tla-1.3.5+dfsg/0000755000175000017500000000000010462452200011730 5ustar userusertla-1.3.5+dfsg/src/0000755000175000017500000000000010462452225012526 5ustar userusertla-1.3.5+dfsg/src/hackerlab/0000755000175000017500000000000010457621774014455 5ustar userusertla-1.3.5+dfsg/src/hackerlab/arrays/0000755000175000017500000000000010457621774015756 5ustar userusertla-1.3.5+dfsg/src/hackerlab/arrays/pow2-array-print.c0000644000175000017500000002520110457621774021257 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:41:51 2001 (pow2-array-print.c) */ /* pow2-array-print.c - * **************************************************************** * Copyright (C) 2000 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/bugs/panic.h" #include "hackerlab/mem/alloc-limits.h" #include "hackerlab/char/str.h" #include "hackerlab/fmt/cvt.h" #include "hackerlab/vu/safe.h" #include "hackerlab/hash/hashtree.h" #include "hackerlab/hash/hash-utils.h" #include "hackerlab/arrays/ar.h" #include "hackerlab/arrays/pow2-array-print.h" /************************************************************************ *(h2 "Generating C Code for a Sparse Array") * * * */ static void pow2_array_print_node (int fd, struct hashtree * table, t_uchar * name, void * node, void ** default_tree_nodes, t_uchar ** default_tree_names, struct pow2_array_level_rule * level, size_t elt_size, t_uchar * elt_type, void (*print_elt_initializer) (int fd, void * elt)) { if (!node) { safe_printfmt (fd, "#define %s 0\n\n", name); return; } else if (default_tree_nodes && (*default_tree_nodes == node)) { safe_printfmt (fd, "#define %s %s\n\n", name, *default_tree_names); return; } if (table) { struct hashtree_item * item; item = hashtree_store (table, hash_ul ((unsigned long)node), node, 0); if (item->binding) { safe_printfmt (fd, "#define %s %s\n\n", name, (t_uchar *)item->binding); return; } else { item->binding = (void *)str_save (lim_use_must_malloc, name); } } if (!level->addr_shift) { size_t n_elts; size_t x; safe_printfmt (fd, "static %s %s[] =\n", elt_type, name); safe_printfmt (fd, "{"); n_elts = level->addr_mask + 1; for (x = 0; x < n_elts; ++x) { print_elt_initializer (fd, (void *)((t_uchar *)node + elt_size * x)); safe_printfmt (fd, ",\n"); } safe_printfmt (fd, "};\n\n"); } else { size_t n_elts; size_t x; t_uchar * page_name; t_uchar page_suffix[100]; n_elts = level->addr_mask + 1; page_suffix[0] = '_'; for (x = 0; x < n_elts; ++x) { cvt_ulong_to_decimal (page_suffix + 1, (t_ulong)x); page_name = str_alloc_cat (lim_use_must_malloc, name, page_suffix); pow2_array_print_node (fd, table, page_name, ((void **)node)[x], (default_tree_nodes ? (default_tree_nodes + 1) : 0), (default_tree_names ? (default_tree_names + 1) : 0), level + 1, elt_size, elt_type, print_elt_initializer); lim_free (lim_use_must_malloc, (void *)page_name); } safe_printfmt (fd, "static void * %s[] =\n", name); safe_printfmt (fd, "{"); for (x = 0; x < n_elts; ++x) { cvt_ulong_to_decimal (page_suffix + 1, (t_ulong)x); page_name = str_alloc_cat (lim_use_must_malloc, name, page_suffix); safe_printfmt (fd, " (void *)%s,\n", page_name); lim_free (lim_use_must_malloc, (void *)page_name); } safe_printfmt (fd, "};\n\n"); } } static void pow2_array_print_default_node (int fd, t_uchar * name, t_uchar * subtree_name, struct pow2_array_level_rule * level) { size_t elts; size_t x; elts = level->addr_mask + 1; safe_printfmt (fd, "static void * %s[] =\n", name); safe_printfmt (fd, "{\n"); for (x = 0; x < elts; ++x) safe_printfmt (fd, " (void *)%s,\n", subtree_name); safe_printfmt (fd, "};\n\n"); } static void pow2_array_rules_print (t_uchar *** default_tree_names_p, int fd, t_uchar * name, struct pow2_array_rules * rules, t_uchar * elt_type, void (*print_elt_initializer) (int fd, void * elt)) { t_uchar * levels_name; t_uchar * defaults_name; t_converter default_tree_names; t_uchar * default_page_name; levels_name = 0; defaults_name = 0, default_tree_names.uchar_ptr_ptr = 0; default_page_name = 0; if (!rules->defaults) defaults_name = str_save (lim_use_must_malloc, "0"); else { int level; for (level = 0; rules->levels[level].addr_shift; ++level) ; default_page_name = str_alloc_cat (lim_use_must_malloc, name, "_dflt_page"); pow2_array_print_node (fd, 0, default_page_name, rules->defaults[level], 0, 0, rules->levels + level, rules->elt_size, elt_type, print_elt_initializer); *(t_uchar **)ar_ref (&default_tree_names.void_ptr, lim_use_must_malloc, level, sizeof (t_uchar *)) = str_save (lim_use_must_malloc, default_page_name); while (level--) { static t_uchar suffix[100]; static t_uchar number[100]; cvt_long_to_decimal (number, (long)level); str_cpy (suffix, "_dflt_"); str_cat (suffix, number); default_tree_names.uchar_ptr_ptr[level] = str_alloc_cat (lim_use_must_malloc, name, suffix); pow2_array_print_default_node (fd, default_tree_names.uchar_ptr_ptr[level], default_tree_names.uchar_ptr_ptr[level + 1], rules->levels + level); } defaults_name = str_alloc_cat (lim_use_must_malloc, name, "_defaults"); safe_printfmt (fd, "static void * %s[] =\n", defaults_name); safe_printfmt (fd, "{\n"); { int x; x = 0; while (1) { safe_printfmt (fd, " (void *)%s,\n", default_tree_names.uchar_ptr_ptr[x]); if (!rules->levels[x].addr_shift) break; ++x; } } safe_printfmt (fd, "};\n\n"); } { int x; levels_name = str_alloc_cat (lim_use_must_malloc, name, "_levels"); safe_printfmt (fd, "static struct pow2_array_level_rule %s[] =\n", levels_name); safe_printfmt (fd, "{\n"); x = 0; while (1) { safe_printfmt (fd, " { %d, 0x%lx },\n", rules->levels[x].addr_shift, (t_ulong)rules->levels[x].addr_mask); if (!rules->levels[x].addr_shift) break; ++x; } safe_printfmt (fd, "};\n\n"); } safe_printfmt (fd, "static struct pow2_array_rules %s =\n", name); safe_printfmt (fd, "{\n"); safe_printfmt (fd, " %s,\n", defaults_name); safe_printfmt (fd, " %s,\n", levels_name); safe_printfmt (fd, " %lu,\n", (t_ulong)rules->elt_size); safe_printfmt (fd, "};\n\n"); lim_free (lim_use_must_malloc, levels_name); lim_free (lim_use_must_malloc, defaults_name); lim_free (lim_use_must_malloc, default_page_name); *default_tree_names_p = default_tree_names.uchar_ptr_ptr; } static void pow2_array_print_macro_exp (int fd, pow2_array array, int level) { if (!level) { safe_printfmt (fd, "((void **)(ARRAY)->root)"); } else { safe_printfmt (fd, "((void **)("); pow2_array_print_macro_exp (fd, array, level - 1); safe_printfmt (fd, "[((INDEX) >> %d) & 0x%lx]))", array->rules->levels[level - 1].addr_shift, (t_ulong)array->rules->levels[level - 1].addr_mask); } } static void free_item (struct hashtree_item * it, struct hashtree_rules * ign) { lim_free (lim_use_must_malloc, it->binding); } /*(c pow2_array_print) * void pow2_array_print (int fd, * struct pow2_array * array, * t_uchar * name, * t_uchar * stub, * int decls_only, * t_uchar * ref_macro_name, * int is_static, * t_uchar * elt_type, * void (*print_elt_initializer) (int fd, void * elt)); * * On descriptor `fd', print C code which compiles to a staticly initialized * sparse array equal to `array'. * * `name' is the variable name to use. * * `stub' is a variable name prefix to use when printing internal * data structures of `array'. * * `decls_only', if not 0, means to print only a declaration for the * array -- not the static initializer. * * `ref_macro_name', if not 0, is a name for a CPP macro. The macro * will be of the form: * * #define REF_MACRO(ARRAY, ELT) ((ELT_TYPE *)(....)) * * The macro is a version of `pow2_array_rref', optimized for access to * the staticly initialized array. * * `elt_type' is a type name for elements of the array. * * `print_elt_initializer' prints a static initializer for particular * elements. * * This function exits by calling `panic' if an error occurs. */ void pow2_array_print (int fd, struct pow2_array * array, t_uchar * name, t_uchar * stub, int decls_only, t_uchar * ref_macro_name, int is_static, t_uchar * elt_type, void (*print_elt_initializer) (int fd, void * elt)) { struct hashtree * table; t_uchar * rules_name; t_uchar * root_name; t_converter default_tree_names; t_uchar * struct_name; if (decls_only) { safe_printfmt (fd, "%s struct pow2_array * %s;\n", (is_static ? "static " : "extern "), name); } if (ref_macro_name) { int n_levels; n_levels = 0; for (n_levels = 0; array->rules->levels[n_levels].addr_shift; ++n_levels) ; ++n_levels; if (!array->rules->defaults) panic ("asked to print pow2_array ref macro for array without defaults"); safe_printfmt (fd, "#define %s(ARRAY, INDEX) (((%s *)", ref_macro_name, elt_type); pow2_array_print_macro_exp (fd, array, n_levels - 1); safe_printfmt (fd, ")[(INDEX) & 0x%lx])\n\n", (t_ulong)array->rules->levels[n_levels - 1].addr_mask); } if (decls_only) return; table = hashtree_alloc (0); rules_name = str_alloc_cat (lim_use_must_malloc, stub, "_rules"); pow2_array_rules_print (&default_tree_names.uchar_ptr_ptr, fd, rules_name, array->rules, elt_type, print_elt_initializer); root_name = str_alloc_cat (lim_use_must_malloc, stub, "_0"); pow2_array_print_node (fd, table, root_name, array->root, array->rules->defaults, default_tree_names.uchar_ptr_ptr, array->rules->levels, array->rules->elt_size, elt_type, print_elt_initializer); struct_name = str_alloc_cat (lim_use_must_malloc, name, "_struct"); safe_printfmt (fd, "static struct pow2_array %s =\n", struct_name); safe_printfmt (fd, "{\n"); safe_printfmt (fd, " lim_no_allocations,\n"); safe_printfmt (fd, " &%s,\n", rules_name); safe_printfmt (fd, " (void *)%s\n", root_name); safe_printfmt (fd, "};\n\n"); safe_printfmt (fd, "%spow2_array %s = &%s;\n", (is_static ? "static " : ""), name, struct_name); safe_printfmt (fd, "\n\n"); lim_free (lim_use_must_malloc, (void *)rules_name); lim_free (lim_use_must_malloc, (void *)root_name); lim_free (lim_use_must_malloc, (void *)struct_name); hashtree_free (table, free_item, 0); { int x; x = (int)ar_size (default_tree_names.void_ptr, lim_use_must_malloc, sizeof (t_uchar *)); while (x--) { lim_free (lim_use_must_malloc, default_tree_names.uchar_ptr_ptr[x]); } ar_free (&default_tree_names.void_ptr, lim_use_must_malloc); } } tla-1.3.5+dfsg/src/hackerlab/arrays/pow2-array-print.h0000644000175000017500000000151210457621774021263 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:41:51 2001 (pow2-array-print.h) */ /* pow2-array-print.h - * **************************************************************** * Copyright (C) 2000 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__ARRAYS__POW2_ARRAY_PRINT_H #define INCLUDE__ARRAYS__POW2_ARRAY_PRINT_H #include "hackerlab/arrays/pow2-array.h" /* automatically generated __STDC__ prototypes */ extern void pow2_array_print (int fd, struct pow2_array * array, t_uchar * name, t_uchar * stub, int decls_only, t_uchar * ref_macro_name, int is_static, t_uchar * elt_type, void (*print_elt_initializer) (int fd, void * elt)); #endif /* INCLUDE__ARRAYS__POW2_ARRAY_PRINT_H */ tla-1.3.5+dfsg/src/hackerlab/arrays/pow2-array.c0000644000175000017500000003245410457621774020135 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:41:51 2001 (pow2-array.c) */ /* pow2-array.c - * **************************************************************** * Copyright (C) 2000 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/os/stdarg.h" #include "hackerlab/mem/mem.h" #include "hackerlab/arrays/pow2-array.h" /************************************************************************ *(h1 "Power-of-Two Sparse Arrays" * :includes ("hackerlab/arrays/pow2-array.h")) * * |power of two size array| * |sparse array| * * A `pow2_array' ("power-of-two sparse array") is an array-like * data structure. It always holds a number of elements which is * some power of two. It provides reasonably fast access to elements * (but slower than ordinary arrays). It provides good memory efficiency * for sparsely populated arrays. * * \NOTE:/ this interface is net yet complete. Some details of the * existing interface may change in future releases. */ /*(menu) */ /************************************************************************ *(h2 "The pow2_array Data Structure") * * A `pow2_array' is represented by a tree structure of uniform depth. * Leaf elements are ordinary (dynamically allocated) arrays, each * leaf having the same number of elements. * * So that sparsely populated arrays can be stored efficiently in * memory, subtrees which are populated entirely with default values * are represented in one of two ways: the root of such subtrees may * be represented as a `NULL' pointer; or the root of such as subtree * may be represented by a "default node". In the latter case, one * default node exists for each level of the tree (a default root, a * default second-level node, a default leaf node, and so on). * Representation by null pointer saves memory by not allocating * default nodes. Representation by default nodes speeds up access, * in some cases. * * For each level of the tree, two values are defined: a `shift' and a * `mask'. For a given internal node of the tree, the subtree * containing the `N'th element below that node is stored in the * subtree: * * (N >> shift) & mask * * The index of the same element within that subtree is: * * N & ((1 << shift) - 1) * * For leaf nodes, `shift' is 0. * * The opaque type `pow2_array_rules' holds the set of `shift' and `mask' * values which define a tree structure for arrays of some size. * The opaque type `pow2_array' holds a particular array. * * Here is a simple example: a sparse array containing 8 elements. * (In ordinary use, we would presumably choose a much larger power * of two.) * * We will define oen possible tree structures for this array: a two * level tree with four elements in each leaf. Other structures are * possible: we might have defined a two-level structure with two * elements in each leaf or a three-level structure with 2 in each * leaf, and two sub-trees below each internal node. * * For the two level tree with four elements per leaf node, we have: * * root: shift == 2 * mask == 1 * * leaf nodes: shift == 0 * mask == 3 * * The default leaf node, at address `Ld' is a four element array: * * * Ld: * ---------------------------- * | dflt | dflt | dflt | dflt| * ---------------------------- * * The default root node, at address `Rd' is a two element array: * * Rd: * ----------- * | Ld | Ld | * ----------- * * An array with a non-default value (`V') in element 2, but default * values everywhere else might look like: * * root: * ---------------- * | leaf | Ld | * --/----------|-- * / | * / | * /---------/ | * leaf: Ld: * -------------------------- ----------------------------- * | dflt | V | dflt | dflt | | dflt | dflt | dflt | dflt | * -------------------------- ----------------------------- * * Suppose that elements in this array are of type `T'. Then, using * the `shift' and `mask' values given above, the address of element * `N' in that tree is: * * (T *)((char *)root[(N >> 2) & 1] + ((N & ((1 << 2) - 1)) & 3)) * * That is the address returned by the function `pow2_array_rref'. * Note that this address might be in `leaf', or it might be in the * default leaf `Ld'. * * When modifying a particular element, it is important to not modify * the default leaf. A copy-on-write strategy is used. For example, * before modifying element 7, the tree is rewritten: * * root: * -------------------- * | leaf0 | Leaf1 | * --/------------/---- * / / * / / * /---------/ / * leaf0: leaf1: * -------------------------- ----------------------------- * | dflt | V | dflt | dflt | | dflt | dflt | dflt | dflt | * -------------------------- ----------------------------- * * The function `pow2_array_ref' performs that copy-on-write operation * and then returns an element address similarly to `pow2_array_rref'. * * If the default value for elements is a region of memory filled with * 0 bytes, a tree can be represented without using default nodes. * For example, the array containing an element only in element 2 * would be represented: * * root: * ---------------- * | leaf | 0 | * --/------------- * / * / * /---------/ * leaf: * ----------------- * | 0 | V | 0 | 0 | * ----------------- * * A tree of this variety is created by not specifying a default leaf * node when calling `make_pow2_array_rules'. `pow2_array_ref' returns * a NULL pointer if an element is accessed which is not currently in * such a tree. * * The function `pow2_array_compact' compresses the representation of a * sparse array by eliminating identical subtrees. For example, after * calling `pow2_array_compact' on an array with default values everywhere * except elements 1 and 5, the tree would look like: * * root: * ------------------- * | leaf | Leaf | * -------\-------/--- * \ / * \ / * \ / * leaf: * -------------------------- * | dflt | V | dflt | dflt | * -------------------------- * * After calling `pow2_array_compact', it is no longer safe to call * `pow2_array_ref' for the same array. `pow2_array_ref' is safe. * `pow2_array_compact' is useful in combination with * `pow2_array_print'. */ /************************************************************************ *(h2 "Allocating Power-of-Two Sparse Arrays") * * * */ /*(c make_pow2_array_rules) * pow2_array_rules make_pow2_array_rules (alloc_limits limits, * size_t elt_size, * void * default_page, * int shift, * size_t mask, * ...); * * Return the `pow2_array_rules' which defines the tree structure * for a particular type of sparse array. * * `limits' is used when allocating the `pow2_array_rules' and default * nodes. See xref:"Allocation With Limitations". * * `elt_size' is the size, in bytes, of individual elements. * * `default_page' is either 0 or a default leaf node. * * The remaining arguments are a series of `shift' and `mask' pairs, * ending with a pair in which `shift' is 0. * * See xref:"The pow2_array Data Structure" for more information about * default leaf nodes, shifts, and masks. * * If allocation fails, this funtion returns 0. */ pow2_array_rules make_pow2_array_rules (alloc_limits limits, size_t elt_size, void * default_page, int shift, size_t mask, ...) { va_list args; int n_levels; struct pow2_array_level_rule * levels; pow2_array_rules rules; rules = (pow2_array_rules)lim_malloc (limits, sizeof (*rules)); if (!rules) return 0; mem_set0 ((t_uchar *)rules, sizeof (*rules)); rules->elt_size = elt_size; va_start (args, mask); n_levels = 1; if (shift) { int s; size_t m; do { s = va_arg (args, int); m = va_arg (args, size_t); ++n_levels; } while (s); } levels = (struct pow2_array_level_rule *)lim_malloc (limits, n_levels * sizeof (struct pow2_array_level_rule)); if (!levels) { lim_free (limits, (void *)rules); return 0; } rules->levels = levels; levels[0].addr_shift = shift; levels[0].addr_mask = mask; n_levels = 1; va_start (args, mask); while (shift) { shift = va_arg (args, int); mask = va_arg (args, size_t); levels[n_levels].addr_shift = shift; levels[n_levels].addr_mask = mask; ++n_levels; } if (default_page) { void ** defaults; int x; defaults = (void **)lim_malloc (limits, n_levels * sizeof (void *)); if (!defaults) { lim_free (limits, (void *)levels); lim_free (limits, (void *)rules); return 0; } rules->defaults = defaults; defaults[n_levels - 1] = default_page; for (x = n_levels - 2; x >= 0; --x) { int level_elts; level_elts = levels[x].addr_mask + 1; defaults[x] = (void *)lim_malloc (limits, level_elts * sizeof (void *)); if (!defaults[x]) { while (x < (n_levels - 1)) { lim_free (limits, defaults[x]); } lim_free (limits, (void *)defaults); lim_free (limits, (void *)levels); lim_free (limits, (void *)rules); return 0; } { int y; for (y = 0; y < level_elts; ++y) ((void **)defaults[x])[y] = defaults[x + 1]; } } } return rules; } /*(c pow2_array_alloc) * pow2_array pow2_array_alloc (alloc_limits limits, * pow2_array_rules rules); * * Allocate a sparse array. * * `limits' is used when allocating the array. It is also used by * `pow2_array_ref' when allocating nodes within the array. * See xref:"Allocation With Limitations". * * `rules' defines the tree structure for the array and should be * an object returned by `make_pow2_array_rules'. * * If allocation fails, this funtion returns 0. */ pow2_array pow2_array_alloc (alloc_limits limits, pow2_array_rules rules) { struct pow2_array * array; array = (struct pow2_array *)lim_malloc (limits, sizeof (struct pow2_array)); if (!array) return 0; array->limits = limits; array->rules = rules; if (rules->defaults) array->root = (void *)rules->defaults[0]; else array->root = 0; return array; } /************************************************************************ *(h2 "Accessing Elements in Sparse Arrays") * * * */ /*(c pow2_array_rref) * void * pow2_array_rref (pow2_array array, size_t addr); * * Return the address if the `addr' element within `array'. * * The value pointed to by this address should not be modified. * * If the element has never been modified, and no default leaf node * was passed to `make_pow2_array_rules', this function returns 0. */ void * pow2_array_rref (pow2_array array, size_t addr) { struct pow2_array_level_rule * levels; int level; void * node; size_t node_addr; size_t remainder; levels = array->rules->levels; level = 0; node = array->root; while (1) { if (!node) return 0; if (!levels[level].addr_shift) { return (void *)((char *)node + (addr & levels[level].addr_mask) * array->rules->elt_size); } node_addr = (addr >> levels[level].addr_shift) & levels[level].addr_mask; remainder = (addr & ((1 << levels[level].addr_shift) - 1)); node = ((void **)node)[node_addr]; addr = remainder; ++level; } } /*(c pow2_array_ref) * void * pow2_array_ref (pow2_array array, size_t addr); * * Return the address if the `addr' element within `array'. * * The value pointed to by this address may be modified. * * This function might allocate memory if the element has not * previously been modified. If allocation fails, this function * returns 0. */ void * pow2_array_ref (pow2_array array, size_t addr) { struct pow2_array_level_rule * levels; int level; void ** node; void ** defaults; size_t node_addr; size_t remainder; levels = array->rules->levels; level = 0; node = &array->root; defaults = array->rules->defaults; while (1) { if ((!*node) || (defaults && (defaults[level] == *node))) { size_t page_size; if (!levels[level].addr_shift) { page_size = array->rules->elt_size * (levels[level].addr_mask + 1); } else { page_size = sizeof (void *) * (levels[level].addr_mask + 1); } *node = lim_malloc (array->limits, page_size); if (!*node) return 0; if (array->rules->defaults) mem_move ((t_uchar *)*node, array->rules->defaults[level], page_size); else mem_set0 ((t_uchar *)*node, page_size); } if (!levels[level].addr_shift) { return (void *)((char *)*node + (addr & levels[level].addr_mask) * array->rules->elt_size); } node_addr = (addr >> levels[level].addr_shift) & levels[level].addr_mask; remainder = (addr & ((1 << levels[level].addr_shift) - 1)); node = ((void **)*node + node_addr); addr = remainder; ++level; } } /*include-documentation "pow2-array-compact.c") */ /*include-documentation "pow2-array-print.c") */ tla-1.3.5+dfsg/src/hackerlab/arrays/Makefile.in0000644000175000017500000000027510457621774020027 0ustar useruserinclude $(makefiles)/library-objects.mk ifeq ($(cgs__install_hackerlab),1) include $(makefiles)/install-includes.mk endif # tag: Tom Lord Tue Dec 4 14:52:13 2001 (arrays/Makefile.in) # tla-1.3.5+dfsg/src/hackerlab/arrays/pow2-array-compact.c0000644000175000017500000001251610457621774021556 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:41:52 2001 (pow2-array-compact.c) */ /* pow2-array-compact.c - * **************************************************************** * Copyright (C) 2000 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/mem/mem.h" #include "hackerlab/hash/hashtree.h" #include "hackerlab/hash/hash-utils.h" #include "hackerlab/arrays/pow2-array-compact.h" /************************************************************************ *(h2 "Compacting Sparse Arrays") * * * */ struct pow2_array_compact_key { pow2_array array; int depth; void * canonical; int (*compare_elts) (void * a, void * b, size_t n_elts); }; static int item_eq (void * key1, void * key2, struct hashtree_rules * rules) { struct pow2_array_compact_key * k1; struct pow2_array_compact_key * k2; int is_leaf; size_t n_elts; size_t size; k1 = (struct pow2_array_compact_key *)key1; k2 = (struct pow2_array_compact_key *)key2; if (k1->depth != k2->depth) return 0; is_leaf = !k1->array->rules->levels[k1->depth].addr_shift; n_elts = k1->array->rules->levels[k1->depth].addr_mask + 1; size = (is_leaf ? (k1->array->rules->elt_size * n_elts) : (sizeof (void *) * n_elts)); if (!is_leaf || !k1->compare_elts) { return !mem_cmp (k1->canonical, k2->canonical, size); } else return k1->compare_elts (k1->canonical, k2->canonical, n_elts); } static void free_item (struct hashtree_item * it, struct hashtree_rules * rules) { lim_free (lim_use_must_malloc, it->key); } static void * compact (struct hashtree * table, struct hashtree_rules * rules, pow2_array array, int depth, void * node, t_ulong (*hash_elts) (void * elts, size_t n_elts), int (*compare_elts) (void * a, void * b, size_t n_elts), void (*free_elts) (void * elts, size_t n_elts)) { struct pow2_array_compact_key key; int is_leaf; size_t n_elts; size_t size; t_ulong hash; struct hashtree_item * item; if (!node) return node; is_leaf = !array->rules->levels[depth].addr_shift; n_elts = array->rules->levels[depth].addr_mask + 1; size = (is_leaf ? (array->rules->elt_size * n_elts) : (sizeof (void *) * n_elts)); if (array->rules->defaults && (node == array->rules->defaults[depth])) return node; if (!is_leaf) { size_t x; for (x = 0; x < n_elts; ++x) ((void **)node)[x] = compact (table, rules, array, depth + 1, ((void **)node)[x], hash_elts, compare_elts, free_elts); } if (array->rules->defaults) { int equals_default; equals_default = ((is_leaf && compare_elts) ? !compare_elts (node, array->rules->defaults[depth], n_elts) : !mem_cmp (node, array->rules->defaults[depth], size)); if (equals_default) { if (is_leaf && free_elts) { free_elts (node, n_elts); } lim_free (array->limits, node); return array->rules->defaults[depth]; } } key.array = array; key.depth = depth; key.canonical = node; key.compare_elts = compare_elts; if (!is_leaf) { hash = hash_pointers ((void **)node, n_elts); } else { hash = (hash_elts ? hash_elts (node, n_elts) : hash_mem (node, size)); } item = hashtree_store (table, hash, (void *)&key, rules); if (item->key != (void *)&key) { if (is_leaf && free_elts) { free_elts (node, n_elts); } lim_free (array->limits, node); return item->binding; } else { struct pow2_array_compact_key * key2; key2 = (struct pow2_array_compact_key *)lim_malloc (lim_use_must_malloc, sizeof (*key2)); *key2 = key; item->key = (void *)key2; item->binding = node; return node; } } /*(c pow2_array_compact) * void pow2_array_compact (pow2_array array, * t_ulong (*hash_elts) (void * elts, size_t n_elts), * int (*compare_elts) (void * a, void * b, size_t n_elts), * void (*free_elts) (void * elts, size_t n_elts)); * * Rearrange the sparse array `array' so that equal subtrees are * represented by a single set of nodes. (See xref:"The pow2_array * Data Structure".) * * `hash_elts' computes a hash value for for `n_elts' stored at * address `elts'. * * `compare_elts' compares two arrays of `n_elts' stored at addresses `a' * and `b' returning 1 if they are equal, 0 otherwise. * * `free_elts' frees storage associated with `n_elts' stored at * address `elts'. * * This function presumes that `array' was created with allocation limits * `lim_use_must_malloc'. If an allocation failure occurs, the process * is terminated by calling `panic'. * * This function is primarily intended for use in combination with * `pow2_array_print'. */ void pow2_array_compact (pow2_array array, t_ulong (*hash_elts) (void * elts, size_t n_elts), int (*compare_elts) (void * a, void * b, size_t n_elts), void (*free_elts) (void * elts, size_t n_elts)) { struct hashtree_rules * rules; struct hashtree * table; rules = hashtree_make_rules (lim_use_must_malloc); table = hashtree_alloc (rules); hashtree_init_rules (rules, item_eq, 0, 0, 0, 0, lim_use_must_malloc); array->root = compact (table, rules, array, 0, array->root, hash_elts, compare_elts, free_elts); hashtree_free (table, free_item, rules); } tla-1.3.5+dfsg/src/hackerlab/arrays/PLUGIN/0000755000175000017500000000000010457621774016754 5ustar userusertla-1.3.5+dfsg/src/hackerlab/arrays/PLUGIN/REQ0000644000175000017500000000003310457621774017322 0ustar useruseros arrays arrays libboot tla-1.3.5+dfsg/src/hackerlab/arrays/ar.h0000644000175000017500000000333310457621774016533 0ustar useruser/* ar.h - decls for variable size arrays * **************************************************************** * Copyright (C) 1998, 2000 Thomas Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__ARRAYS__AR_H #define INCLUDE__ARRAYS__AR_H #include "hackerlab/machine/types.h" #include "hackerlab/mem/alloc-limits.h" typedef union { void * void_ptr; /* for passing to ar_* functions */ t_uchar * uchar_ptr; /* array of char */ t_uchar ** uchar_ptr_ptr; /* array of char * */ void ** void_ptr_ptr; /* array of void * */ int * int_ptr; /* array of int */ off_t *off_t_ptr; /* array of off_t */ } t_converter; /* automatically generated __STDC__ prototypes */ extern int ar_size (void * base, alloc_limits limits, size_t elt_size); extern void * ar_ref (void ** base, alloc_limits limits, int n, int szof); extern int ar_setsize (void ** base, alloc_limits limits, int n, size_t szof); extern void ar_compact (void ** base, alloc_limits limits, size_t szof); extern void ar_free (void ** base, alloc_limits limits); extern void * ar_push (void ** base, alloc_limits limits, size_t szof); extern void * ar_pop (void ** base, alloc_limits limits, size_t szof); extern void * ar_copy (void * base, alloc_limits limits, size_t szof); #endif /* INCLUDE__ARRAYS__AR_H */ tla-1.3.5+dfsg/src/hackerlab/arrays/arrays.doc0000644000175000017500000000172510457621774017753 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:57:18 2001 (arrays.doc) */ /************************************************************************ *(h0 "Arrays") * * Dynamically allocated arrays are a common feature of C programs. * The Hackerlab C library provides two array-like data structures: * variable size arrays, and power-of-two size sparse arrays. * * Variable size arrays are contiguous regions of memory, similar * to memory allocated by malloc. The size of a variable size array, * measured as the number of elements it contains, can be retrieved * at run-time using the function `ar_size'. * * Power-of-two size sparse arrays are a tree structure, used to * represent an array holding a number of elements which is a power * of two. Access to these arrays is very fast, and they are memory * efficient for very large arrays which are sparsely populated. * */ /*(menu) */ /*(include-documentation "ar.c") */ /*(include-documentation "pow2-array.c") */ tla-1.3.5+dfsg/src/hackerlab/arrays/pow2-array.h0000644000175000017500000000245010457621774020133 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:41:51 2001 (pow2-array.h) */ /* pow2-array.h - * **************************************************************** * Copyright (C) 2000 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__ARRAYS__POW2_ARRAY_H #define INCLUDE__ARRAYS__POW2_ARRAY_H #include "hackerlab/mem/alloc-limits.h" struct pow2_array_level_rule { int addr_shift; size_t addr_mask; }; struct pow2_array_rules { void ** defaults; struct pow2_array_level_rule * levels; size_t elt_size; }; typedef struct pow2_array_rules * pow2_array_rules; struct pow2_array { struct alloc_limits * limits; pow2_array_rules rules; void * root; }; typedef struct pow2_array * pow2_array; /* automatically generated __STDC__ prototypes */ extern pow2_array_rules make_pow2_array_rules (struct alloc_limits * limits, size_t elt_size, void * default_page, int shift, size_t mask, ...); extern pow2_array pow2_array_alloc (struct alloc_limits * limits, pow2_array_rules rules); extern void * pow2_array_rref (pow2_array array, size_t addr); extern void * pow2_array_ref (pow2_array array, size_t addr); #endif /* INCLUDE__ARRAYS__POW2_ARRAY_H */ tla-1.3.5+dfsg/src/hackerlab/arrays/ar.c0000644000175000017500000002277410457621774016540 0ustar useruser/* ar.c - variable size arrays * **************************************************************** * Copyright (C) 1998, 2000 Thomas Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/machine/alignment.h" #include "hackerlab/mem/must-malloc.h" #include "hackerlab/mem/mem.h" #include "hackerlab/arrays/ar.h" /************************************************************************ *(h1 "Variable Size Arrays" * :include ("hackerlab/arrays/ar.h")) * * |array| * |variable size array| * |power of two size array| * |aparse array| * * A "variable size array" is a dynamically allocated block of memory, * similar to a block returned by `lim_malloc', except that a variable sized * array is tagged with its size, measured in the number of array elements. * * A null pointer counts as an array of 0 elements. For example, if * `ar_size', which returns the size of a variable sized arrary, is * passed `0', it returns 0. That means there is no special function * to allocate a new variable sized array -- instead, array pointers * should be initialized to 0. This example creates an array with ten * integers by using `ar_ref': * * { * int * the_array; * int * tenth_element; * * the_array = 0; * tenth_element = (int *)ar_ref (&the_array, * lim_use_must_malloc, * 9, * sizeof (int)); * } * * A variable size array can be used as a stack. (See `ar_push' and * `ar_pop'.) * * Array functions use the `lim_malloc' family of functions to allcoate * memory. (See xref:"Allocation With Limitations".) */ /*(menu) */ /************************************************************************ * (h2 "Variable Size Array Internals") * * A variable size array is represented by a malloced block of memory * approximately one word larger than the memory containing the * array's elements. The extra word contains the number of elements * in the array: * * * * __________________________________________________ * | padding | n-elements | elt0 | elt1 | elt2 | ... * -------------------------------------------------- * ^ * | `base' * * Pointers to the array point to element 0 (labeled `base'). The * size of each element is determined by the `szof' parameter to * functions like `ar_setsize' and `ar_ref'. It is not recorded as part * of the array. * * Padding is added as necessary to ensure that the alignment of `elt0' * is as would be returned from malloc. * * The amount of storage allocated to the array may be larger than is * indicated by `n-elements'. */ /************************************************************************ *(h2 "Basic Variable Size Array Functions") * * * */ #define SIZEOF_HEADER ((sizeof (int) > MACHINE_ALIGNMENT) ? sizeof (int) : MACHINE_ALIGNMENT) #define AR_TO_HEADER(B) ((int *)((char *)(B) - SIZEOF_HEADER)) #define HEADER_TO_AR(H) ((void *)((char *)(H) + SIZEOF_HEADER)) /*(c ar_size) * int ar_size (void * base, * alloc_limits limits, * size_t elt_size); * * Return the number of elements in the array. If `base == 0', return * 0. * * `limits' is the allocation limits associated with this array. */ int ar_size (void * base, alloc_limits limits, size_t elt_size) { if (!base) return 0; else return *AR_TO_HEADER(base); } /*(c ar_ref) * void * ar_ref (void ** base, * alloc_limits limits, * int n, * int szof); * * Return the address of element `n' of an array, expanding the array * to `n+1' elements, if necessary. * * `base' is a pointer to a pointer to the array. * * `limits' is the allocation limits associated with this array. * * `szof' is the size, in bytes, of one element of the array. * * If this function adds new elements to an array, those elements are * filled with 0 bytes. * * This function may resize and relocate the array. If it does, * `*base' is updated to point to the new location of the array. */ void * ar_ref (void ** base, alloc_limits limits, int n, int szof) { int * size; void * m; char * b; if (!*base) { m = lim_malloc (limits, SIZEOF_HEADER + szof * (n + 1)); if (!m) return 0; b = HEADER_TO_AR (m); size = AR_TO_HEADER (b); mem_set0 (b, szof * (n + 1)); *size = n + 1; *base = b; } else { b = (char *)*base; size = AR_TO_HEADER (b); if (*size < (n + 1)) { size_t old_size; old_size = *size; m = lim_realloc (limits, size, (SIZEOF_HEADER + szof * (n + 1))); if (!m) return 0; b = HEADER_TO_AR (m); size = AR_TO_HEADER (b); mem_set0 (b + old_size * szof, (n + 1 - old_size) * szof); *size = n + 1; *base = b; } } return b + szof * n; } /*(c ar_setsize) * void ar_setsize (void ** base, * alloc_limits limits, * int n, * size_t szof); * * Resize the array so that it contains exactly `n' elements. * * `base' is a pointer to a pointer to the array. * * `limits' is the allocation limits associated with this array. * * `szof' is the size, in bytes, of one element. * * If this function adds new elements to an array, those elements are * filled with 0 bytes. * * This function can be used to make an array smaller, but doing so * does not reclaim any storage. (See `ar_compact'.) */ int ar_setsize (void ** base, alloc_limits limits, int n, size_t szof) { int answer; answer = 0; if (!n && !*base) return 0; if (n > 0) { if (!ar_ref (base, limits, n - 1, szof)) answer = -1; } if (!answer && *base) { *AR_TO_HEADER (*base) = n; } return answer; } /*(c ar_compact) * void ar_compact (void ** base, * alloc_limits limits, * size_t szof); * * Resize an array so that it is only as large as it needs to be. * * `base' is a pointer to a pointer to the array. * * `limits' is the allocation limits associated with this array. * * `szof' is the size, in bytes, of one element. * * This function may resize and relocate the array. If it does, * `*base' is updated to point to the new location of the array. * * Functions like `ar_setsize' can be used to make an array smaller, but * doing so does not reclaim any storage used by the array and does * not move the array in memory. * * This function does attempt to reclaim storage (by using * `lim_realloc'). If the array occupies significantly more memory * than needed, this function will move it to a smaller block. * If `lim_realloc' returns 0, this function has no effect. */ void ar_compact (void ** base, alloc_limits limits, size_t szof) { size_t size; size = ar_size (*base, limits, szof); if (size == 0) { if (*base) ar_free (base, limits); *base = 0; return; } *base = HEADER_TO_AR (lim_realloc (limits, (void *)AR_TO_HEADER (*base), SIZEOF_HEADER + size * szof)); } /*(c ar_free) * void ar_free (void ** base, alloc_limits limits); * * Release storage associated with the array pointed to by `*base'. * Set `*base' to 0. * * `limits' is the allocation limits associated with this array. */ void ar_free (void ** base, alloc_limits limits) { if (*base) lim_free (limits, (void *)AR_TO_HEADER (*base)); *base = 0; } /************************************************************************ *(h2 "Variable Sized Arrays as Stacks") * * * */ /*(c ar_push) * void * ar_push (void ** base, * alloc_limits limits, * size_t szof); * * Return the address of element `n' in an array previously containing * only `n-1' elements. * * `base' is a pointer to a pointer to the array. * * `limits' is the allocation limits associated with this array. * * `szof' is the size, in bytes, of one element. * * The new array element is filled with 0 bytes. * * This function may resize and relocate the array. If it does, * `*base' is updated to point to the new location of the array. */ void * ar_push (void ** base, alloc_limits limits, size_t szof) { return ar_ref (base, limits, ar_size (*base, limits, szof), szof); } /*(c ar_pop) * void * ar_pop (void ** base, * alloc_limits limits, * size_t szof); * * Return the address of the `n'th element in an array previously * containing `n' elements. Resize the array so that it contains * exactly `n-1' elements. * * `base' is a pointer to a pointer to the array. * * `limits' is the allocation limits associated with this array. * * `szof' is the size, in bytes, of one element. * * This function may resize and relocate the array. If it does, * `*base' is updated to point to the new location of the array. */ void * ar_pop (void ** base, alloc_limits limits, size_t szof) { int size; size = ar_size (*base, limits, szof); ar_setsize (base, limits, size - 1, szof); return (void *)((char *)*base + ((size - 1) * szof)); } /*(c ar_copy) * void * ar_copy (void * base, * alloc_limits limits, * size_t szof); * * Create a new array which is a copy of the array pointed to by * `base'. * * `limits' is the allocation limits associated with this array. */ void * ar_copy (void * base, alloc_limits limits, size_t szof) { void * answer; answer = 0; ar_setsize (&answer, limits, ar_size (base, limits, szof), szof); mem_move (answer, base, szof * ar_size (base, limits, szof)); return answer; } tla-1.3.5+dfsg/src/hackerlab/arrays/pow2-array-compact.h0000644000175000017500000000136310457621774021561 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:41:52 2001 (pow2-array-compact.h) */ /* pow2-array-compact.h - * **************************************************************** * Copyright (C) 2000 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__ARRAYS__POW2_ARRAY_COMPACT_H #define INCLUDE__ARRAYS__POW2_ARRAY_COMPACT_H #include "pow2-array.h" /* automatically generated __STDC__ prototypes */ extern void pow2_array_compact (pow2_array array, t_ulong (*hash_elts) (void * elts, size_t n_elts), int (*compare_elts) (void * a, void * b, size_t n_elts), void (*free_elts) (void * elts, size_t n_elts)); #endif /* INCLUDE__ARRAYS__POW2_ARRAY_COMPACT_H */ tla-1.3.5+dfsg/src/hackerlab/bitsets/0000755000175000017500000000000010457621774016132 5ustar userusertla-1.3.5+dfsg/src/hackerlab/bitsets/bits-print.h0000644000175000017500000000121110457621774020371 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:41:35 2001 (bits-print.h) */ /* bits-print.h - * **************************************************************** * Copyright (C) 2000 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__BITSETS__BITS_PRINT_H #define INCLUDE__BITSETS__BITS_PRINT_H #include "hackerlab/bitsets/bits.h" /* automatically generated __STDC__ prototypes */ extern void bits_print (int fd, bits set, t_uchar * name, t_uchar * stub, int is_static, int decls_only, int as_macro); #endif /* INCLUDE__BITSETS__BITS_PRINT_H */ tla-1.3.5+dfsg/src/hackerlab/bitsets/=scaffolding/0000755000175000017500000000000010457621774020506 5ustar userusertla-1.3.5+dfsg/src/hackerlab/bitsets/=scaffolding/=ffs.c0000644000175000017500000000152110457621774021524 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:41:34 2001 (=ffs.c) */ /* =ffs.c - scaffolding for ffs * **************************************************************** * Copyright (C) 2000 Thomas Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ /* This is handy: gcc -g -o =ffs =ffs.c ; ./=ffs ; rm =ffs */ #include #include #include #include #include #include #include int main (int argc, char ** argv) { int x; for (x = 0; x < 256; ++x) { int pos; for (pos = 0; pos < 8; ++pos) { if (x & ((bitset_subset)1 << pos)) { printf ("%d, ", pos); break; } } if (pos == 8) printf ("-1, "); if ((x % 16) == 15) putchar ('\n'); } return 0; } tla-1.3.5+dfsg/src/hackerlab/bitsets/=scaffolding/=ffc.c0000644000175000017500000000152510457621774021510 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:41:34 2001 (=ffc.c) */ /* =ffc.c - scaffolding for ffc * **************************************************************** * Copyright (C) 2000 Thomas Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ /* This is handy: gcc -g -o =ffc =ffc.c ; ./=ffc ; rm =ffc */ #include #include #include #include #include #include #include int main (int argc, char ** argv) { int x; for (x = 0; x < 256; ++x) { int pos; for (pos = 0; pos < 8; ++pos) { if (!(x & ((bitset_subset)1 << pos))) { printf ("%d, ", pos); break; } } if (pos == 8) printf ("-1, "); if ((x % 16) == 15) putchar ('\n'); } return 0; } tla-1.3.5+dfsg/src/hackerlab/bitsets/bitset.c0000644000175000017500000006072610457621774017603 0ustar useruser/* bitset.c - bitsets * **************************************************************** * Copyright (C) 1998, 2000 Thomas Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/bugs/panic.h" #include "hackerlab/mem/mem.h" #include "hackerlab/bitsets/bitset.h" /************************************************************************ *(h1 "Flat Bitsets" * :includes ("hackerlab/bitset/bitset.h")) * * |subset| * |flat bitset| * * A "bitset" (or "flat bitset") is a packed array whose elements are * each 1 bit. A bitset can be considered a finite, ordered set of * numbered entities. * * The type `bitset_subset' is a bitset small enough to fit in a * variable of type `void *'. (See xref:"Portability Assumptions in * the Hackerlab C Library". * * The type `bitset' is pointer to `bitset_subset'. Bitset functions * generally operate on a pair of values: the `size' (measured in * bits, an integer of type `bit_t') and the `set' (a pointer of type * `bitset_subset *'). * * |ranges (in bitset functions)| Some functions operate on an * arbitrary subsequence of a bitset. Their arguments include a * starting bit (`from'), and an ending bit (`to'); these have names * that end in the suffix `_range'. When a function operates on a * range of bits, the range is specified as a half-open interval. For * example, * * bitset_clear_range (bits, from, to) * * changes the bits numbered: * * from ... to - 1 * * and the bit numbered `to' is unaffected. This permits bit addresses * to be used similarly to pointers: a range of `n' bits beginning * at bit `pos' is: * * pos, pos + n * * Bitsets are ordinarily allocated in sizes rounded up to the * nearest `sizeof (bitset_subset)'. Operations on bitsets, however, * are precise: they modify only the bits in a bitset and no others. * For that reason, it is safe to operate on a bitset with `N' * elements as if it had only `M' elements (with `M < N'). Bits * `M..N-1' will be unaffected. */ /*(menu) */ /*(include-documentation "bitset.h") */ /* bitset_access(B,N,OP) * * Apply OP to the subset of bitset `B' containing element `N' and to * a singleton subset containing a 1-bit in the position where element * `N' resides. */ #define bitset_access(B,N,OP) ((B)[bitset_which_subset(N)] OP ((bitset_subset)1 << ((N) & bitset_subset_mask))) /************************************************************************ *(h2 "Allocating and Freeing Bitsets") * */ /*(c bitset_alloc) * bitset bitset_alloc (alloc_limits limits, bit_t size); * * Allocate an empty bitset large enough to hold `size' members. * * Allocation is performed by `lim_malloc' using `limits'. See * xref:"Allocation With Limitations". */ bitset bitset_alloc (alloc_limits limits, bit_t size) { bitset b; b = (bitset) lim_malloc (limits, sizeof_bitset (size)); bitset_clear (size, b); return b; } /*(c bitset_free) * void bitset_free (alloc_limits limits, bitset a); * * Free the bitset `a'. * * Deallocation is performed by `lim_free' using `limits'. See * xref:"Allocation With Limitations". */ void bitset_free (alloc_limits limits, bitset a) { lim_free (limits, a); } /*(c bitset_dup) * bitset bitset_dup (alloc_limits limits, bit_t size, bitset a); * * Allocate a copy of bitset `a' which has `size' members. * * Allocation is performed by `lim_malloc' using `limits'. See * xref:"Allocation With Limitations". */ bitset bitset_dup (alloc_limits limits, bit_t size, bitset a) { bitset cs; cs = lim_malloc (limits, sizeof_bitset (size)); bitset_assign (size, cs, a); return cs; } /************************************************************************ *(h2 "Tests on Bitsets") * * * */ /*(c bitset_is_member) * int bitset_is_member (bitset b, bit_t n); * * Return bit `n' of bitset `b' (either 0 or 1). */ int bitset_is_member (bitset b, bit_t n) { return !!bitset_access((b), (n), &); } /*(c bitset_is_equal) * int bitset_is_equal (bit_t size, bitset a, bitset b); * * Compare two bitsets for equality. Both bitsets have `size' * members. Return 1 if they are equal, 0 otherwise. */ int bitset_is_equal (bit_t size, bitset a, bitset b) { bit_t x; bit_t bits_in_last_subset; bitset_subset last_bitset_subset_mask; if (!size) return 1; x = bitset_numb_subsets(size) - 1; bits_in_last_subset = (size - bits_per_subset * x); last_bitset_subset_mask = ~(bitset_subset)0 >> (bits_per_subset - bits_in_last_subset); if ((a[x] & last_bitset_subset_mask) != (b[x] & last_bitset_subset_mask)) return 0; while (x--) { if (a[x] != b[x]) return 0; } return 1; } /*(c bitset_is_subset) * int bitset_is_subset (bit_t size, bitset a, bitset b); * * Return 1 if bitset `b' is a subset of bitset `a', 0 otherwise. */ int bitset_is_subset (bit_t size, bitset a, bitset b) { bit_t x; bit_t bits_in_last_subset; bitset_subset last_bitset_subset_mask; bitset_subset a_bits; bitset_subset b_bits; if (!size) return 1; x = bitset_numb_subsets(size) - 1; bits_in_last_subset = (size - bits_per_subset * x); last_bitset_subset_mask = ~(bitset_subset)0 >> (bits_per_subset - bits_in_last_subset); a_bits = (a[x] & last_bitset_subset_mask); b_bits = (b[x] & last_bitset_subset_mask); if ((a_bits | b_bits) != a_bits) return 0; while (x-- && ((a[x] | b[x]) == a[x])) ; return x == -1; } /*(c bitset_is_empty) * int bitset_is_empty (bit_t size, bitset a); * * Return 1 if bitset `a' has no members. */ int bitset_is_empty (bit_t size, bitset a) { bit_t x; bit_t bits_in_last_subset; bitset_subset last_bitset_subset_mask; if (!size) return 1; x = bitset_numb_subsets(size) - 1; bits_in_last_subset = (size - bits_per_subset * x); last_bitset_subset_mask = ~(bitset_subset)0 >> (bits_per_subset - bits_in_last_subset); if (a[x] & last_bitset_subset_mask) return 0; while (x-- && !a[x]) ; return x == -1; } /*(c bitset_is_empty_range) * int bitset_is_empty_range (bitset a, bit_t from, bit_t to); * * Return 1 if bitset `a' has no members in the closed * interval `[from ... to-1]'. */ int bitset_is_empty_range (bitset a, bit_t from, bit_t to) { bit_t first_subset; bitset_subset first_bitset_subset_mask; bit_t last_subset; bitset_subset last_bitset_subset_mask; bit_t x; if (to <= from) return 1; --to; first_subset = bitset_which_subset (from); last_subset = bitset_which_subset (to); first_bitset_subset_mask = ~(bitset_subset)0 << bitset_which_bit (from); last_bitset_subset_mask = ~(bitset_subset)0 >> (bits_per_subset - (1 + bitset_which_bit (to))); if (first_subset == last_subset) return !(a[first_subset] & first_bitset_subset_mask & last_bitset_subset_mask); if (a[first_subset] & first_bitset_subset_mask) return 0; if (a[last_subset] & last_bitset_subset_mask) return 0; for (x = first_subset + 1; x < last_subset; ++x) if (a[x]) return 0; return 1; } /*(c bitset_is_full) * int bitset_is_full (bit_t size, bitset a); * * Return 1 if bitset `a' is filled (all ones). */ int bitset_is_full (bit_t size, bitset a) { bit_t x; bit_t bits_in_last_subset; bitset_subset last_bitset_subset_mask; if (!size) return 1; x = bitset_numb_subsets(size) - 1; bits_in_last_subset = (size - bits_per_subset * x); last_bitset_subset_mask = ~(bitset_subset)0 >> (bits_per_subset - bits_in_last_subset); if ((a[x] & last_bitset_subset_mask) != last_bitset_subset_mask) return 0; while (x-- && (a[x] == (bitset_subset)-1L)) ; return x == -1; } /*(c bitset_is_full_range) * int bitset_is_full_range (bitset a, bit_t from, bit_t to); * * Return 1 if bitset `a' is filled in the closed * interval `[from .. to-1]'. */ int bitset_is_full_range (bitset a, bit_t from, bit_t to) { bit_t first_subset; bitset_subset first_bitset_subset_mask; bit_t last_subset; bitset_subset last_bitset_subset_mask; bit_t x; if (to <= from) return 1; first_subset = bitset_which_subset (from); last_subset = bitset_which_subset (to); first_bitset_subset_mask = ~(((bitset_subset)1 << (from & bitset_subset_mask)) - 1); last_bitset_subset_mask = (((bitset_subset)1 << (to & bitset_subset_mask)) - 1); if (first_subset == last_subset) return ( (a[first_subset] & first_bitset_subset_mask & last_bitset_subset_mask) == (first_bitset_subset_mask & last_bitset_subset_mask)); if ((a[first_subset] & first_bitset_subset_mask) != first_bitset_subset_mask) return 0; if ((a[last_subset] & last_bitset_subset_mask) != last_bitset_subset_mask) return 0; for (x = first_subset + 1; x < last_subset - 1; ++x) if (a[x] != (bitset_subset)-1L) return 0; return 1; } /************************************************************************ *(h2 "Set Operations") * * * */ /*(c bitset_adjoin) * void bitset_adjoin (bitset b, bit_t n); * * Set bit `n' of bitset `b' to 1. */ void bitset_adjoin (bitset b, bit_t n) { bitset_access((b), (n), |=); } /*(c bitset_remove) * void bitset_remove (bitset b, bit_t n); * * Set bit `n' of bitset `b' to 0. */ void bitset_remove (bitset b, bit_t n) { bitset_access((b), (n), &= ~); } /*(c bitset_toggle) * void bitset_toggle (bitset b, bit_t n); * * If bit `n' of bitset `b' is 1, set it to 0; if 0, * set it to 1. */ void bitset_toggle (bitset b, bit_t n) { bitset_access((b), (n), ^= ); } /*(c bitset_clear) * void bitset_clear (bit_t size, bitset b); * * Clear all bits of bitset `b'. */ void bitset_clear (bit_t size, bitset b) { bit_t x; bit_t bits_in_last_subset; bitset_subset last_bitset_subset_mask; if (!size) return; x = bitset_numb_subsets(size) - 1; bits_in_last_subset = (size - bits_per_subset * x); last_bitset_subset_mask = ~(bitset_subset)0 >> (bits_per_subset - bits_in_last_subset); b[x] &= ~last_bitset_subset_mask; mem_set ((char *)b, 0, x * sizeof (bitset_subset)); } /*(c bitset_clear_range) * void bitset_clear_range (bitset b, bit_t from, bit_t to); * * Clear the bits `from .. to - 1' of bitset `b'. */ void bitset_clear_range (bitset b, bit_t from, bit_t to) { bitset bp; while ((from < to) && (from % bits_per_subset)) { bitset_remove (b, from); ++from; } bp = b + bitset_which_subset (from); while (from + bits_per_subset < to) { *bp = (bitset_subset)0; ++bp; from += bits_per_subset; } while (from < to) { bitset_remove (b, from); ++from; } } /*(c bitset_fill) * void bitset_fill (bit_t size, bitset b); * * Set all bits of bitset `b'. */ void bitset_fill (bit_t size, bitset b) { bit_t x; bit_t bits_in_last_subset; bitset_subset last_bitset_subset_mask; if (!size) return; x = bitset_numb_subsets(size) - 1; bits_in_last_subset = (size - bits_per_subset * x); last_bitset_subset_mask = ~(bitset_subset)0 >> (bits_per_subset - bits_in_last_subset); b[x] |= last_bitset_subset_mask; mem_set ((t_uchar *)b, 0xff, x * sizeof (bitset_subset)); } /*(c bitset_fill_range) * void bitset_fill_range (bitset b, bit_t from, bit_t to); * * Set the bits `from .. to - 1' of bitset `b'. */ void bitset_fill_range (bitset b, bit_t from, bit_t to) { bitset bp; while ((from < to) && (from % bits_per_subset)) { bitset_adjoin (b, from); ++from; } bp = b + bitset_which_subset (from); while (from + bits_per_subset < to) { *bp = ~(bitset_subset)0; ++bp; from += bits_per_subset; } while (from < to) { bitset_adjoin (b, from); ++from; } } /*(c bitset_complement) * void bitset_complement (bit_t size, bitset b); * * Toggle all bits in bitset `b'. */ void bitset_complement (bit_t size, bitset b) { bit_t x; bit_t bits_in_last_subset; bitset_subset last_bitset_subset_mask; if (!size) return; x = bitset_numb_subsets(size) - 1; bits_in_last_subset = (size - bits_per_subset * x); last_bitset_subset_mask = ~(bitset_subset)0 >> (bits_per_subset - bits_in_last_subset); b[x] = ((b[x] & ~last_bitset_subset_mask) | (~b[x] & last_bitset_subset_mask)); while (x--) { *b = ~*b; ++b; } } /*(c bitset_assign) * void bitset_assign (bit_t size, bitset a, bitset b); * * Copy bitset `b' to bitset `a'. */ void bitset_assign (bit_t size, bitset a, bitset b) { bit_t x; bit_t bits_in_last_subset; bitset_subset last_bitset_subset_mask; if (!size) return; x = bitset_numb_subsets(size) - 1; bits_in_last_subset = (size - bits_per_subset * x); last_bitset_subset_mask = ~(bitset_subset)0 >> (bits_per_subset - bits_in_last_subset); a[x] = (a[x] & ~last_bitset_subset_mask) | (b[x] & last_bitset_subset_mask); while (x--) a[x] = b[x]; } /*(c bitset_union) * void bitset_union (bit_t size, bitset a, bitset b); * * Add all elements of bitset `b' to bitset `a'. */ void bitset_union (bit_t size, bitset a, bitset b) { bit_t x; bit_t bits_in_last_subset; bitset_subset last_bitset_subset_mask; if (!size) return; x = bitset_numb_subsets(size) - 1; bits_in_last_subset = (size - bits_per_subset * x); last_bitset_subset_mask = ~(bitset_subset)0 >> (bits_per_subset - bits_in_last_subset); a[x] |= (b[x] & last_bitset_subset_mask); while (x--) a[x] |= b[x]; } /*(c bitset_intersection) * void bitset_intersection (bit_t size, bitset a, bitset b); * * Remove from bitset `a' all alements that are not also in bitset * `b'. */ void bitset_intersection (bit_t size, bitset a, bitset b) { bit_t x; bit_t bits_in_last_subset; bitset_subset last_bitset_subset_mask; if (!size) return; x = bitset_numb_subsets(size) - 1; bits_in_last_subset = (size - bits_per_subset * x); last_bitset_subset_mask = ~(bitset_subset)0 >> (bits_per_subset - bits_in_last_subset); a[x] = (a[x] & ~last_bitset_subset_mask) | ((a[x] & b[x]) & last_bitset_subset_mask); while (x--) a[x] &= b[x]; } /*(c bitset_difference) * void bitset_difference (bit_t size, bitset a, bitset b); * * Remove from bitset `a' all alements that are in bitset `b'. */ void bitset_difference (bit_t size, bitset a, bitset b) { bit_t x; bit_t bits_in_last_subset; bitset_subset last_bitset_subset_mask; if (!size) return; x = bitset_numb_subsets(size) - 1; bits_in_last_subset = (size - bits_per_subset * x); last_bitset_subset_mask = ~(bitset_subset)0 >> (bits_per_subset - bits_in_last_subset); a[x] = (a[x] & ~last_bitset_subset_mask) | ((a[x] & ~b[x]) & last_bitset_subset_mask); while (x--) a[x] &= ~ b[x]; } /*(c bitset_revdifference) * void bitset_revdifference (bit_t size, bitset a, bitset b); * * Set all bits in `a' that are set in bitset `b' but not in `a'; * clear all other bits of bitset `a'. * * This is similar to `bitset_difference (size, b, a)' except that * the result is assigned to bitset `a' instead of bitset `b'. */ void bitset_revdifference (bit_t size, bitset a, bitset b) { bit_t x; bit_t bits_in_last_subset; bitset_subset last_bitset_subset_mask; if (!size) return; x = bitset_numb_subsets(size) - 1; bits_in_last_subset = (size - bits_per_subset * x); last_bitset_subset_mask = ~(bitset_subset)0 >> (bits_per_subset - bits_in_last_subset); a[x] = (a[x] & ~last_bitset_subset_mask) | ((~a[x] & b[x]) & last_bitset_subset_mask); while (x--) a[x] = ~a[x] & b[x]; } /*(c bitset_xor) * void bitset_xor (bit_t size, bitset a, bitset b); * * Toggle all bits in bitset `a' that are set in bitset `b'. */ void bitset_xor (bit_t size, bitset a, bitset b) { bit_t x; bit_t bits_in_last_subset; bitset_subset last_bitset_subset_mask; if (!size) return; x = bitset_numb_subsets(size) - 1; bits_in_last_subset = (size - bits_per_subset * x); last_bitset_subset_mask = ~(bitset_subset)0 >> (bits_per_subset - bits_in_last_subset); a[x] ^= (b[x] & last_bitset_subset_mask); while (x--) a[x] ^= b[x]; } /************************************************************************ *(h2 "Population Size") * * * */ /* * (define l (let loop ((x 0) (l '())) (if (eq? x 256) l (loop (+ x 1) (cons x l))))) * (define lb (map (lambda (n) (number->string n 2)) l)) * (define lc (map string->list lb)) * (define ln (map (lambda (l) (map (lambda (c) (if (eq? c #\1) 1 0)) l)) lc)) * (define lt (map (lambda (l) (apply + l)) ln)) */ static int bitset_byte_populations[256] = { 0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4, 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, 4, 5, 5, 6, 5, 6, 6, 7, 5, 6, 6, 7, 6, 7, 7, 8 }; /*(c bitset_population) * bit_t bitset_population (bit_t size, bitset a); * * Return the number of bits set in bitset `a'. */ bit_t bitset_population (bit_t size, bitset a) { bit_t x; bit_t bits_in_last_subset; bitset_subset last_bitset_subset_mask; bitset_subset a_subset; bit_t total; if (!size) return 0; x = bitset_numb_subsets(size) - 1; bits_in_last_subset = (size - bits_per_subset * x); last_bitset_subset_mask = ~(bitset_subset)0 >> (bits_per_subset - bits_in_last_subset); total = 0; a_subset = a[x] & last_bitset_subset_mask; while (a_subset) { total += bitset_byte_populations[a_subset & 0xff]; a_subset >>= 8; } while (x--) { a_subset = a[x]; while (a_subset) { total += bitset_byte_populations[a_subset & 0xff]; a_subset >>= 8; } } return total; } /*(c bitset_population_range) * bit_t bitset_population (bitset a, bit_t from, bit_t to); * * Return the number of bits set in bitset `a' couning only * members in the closed interval `[from .. to-1]'. */ bit_t bitset_population_range (bitset a, bit_t from, bit_t to) { bit_t first_subset; bit_t first_subset_offset; bit_t overcount; bit_t count_error; if (to <= from) return 0; first_subset = bitset_which_subset (from); first_subset_offset = first_subset * bits_per_subset; overcount = bitset_population (to - first_subset_offset, a + first_subset); count_error = bitset_population (from - first_subset_offset, a + first_subset); return overcount - count_error; } /************************************************************************ *(h2 "First Bit Set -- First Bit Clear") * * * */ static int bitset_byte_ffs[256] = { -1, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 6, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 7, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 6, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0 }; /* static bit_t subset_ffs (bitset_subset a); * * Return the address of the first bit set in a bitset_subset. * For bitset_subset 0, return -1. */ static bit_t subset_ffs (bitset_subset a) { bit_t offset; bit_t x; if (!a) return -1; offset = 0; x = sizeof (a); while (x--) { bit_t q; q = bitset_byte_ffs [a & 0xff]; if (q >= 0) return q + offset; offset += 8; a >>= 8; } while (1) panic ("not reached"); } /*(c bitset_ffs) * bit_t bitset_ffs (bit_t size, bitset b); * * Return the (bit) address of the first bit set in bitset `b'. * Return -1 if no bit is set. */ bit_t bitset_ffs (bit_t size, bitset b) { bit_t offset; bit_t x; bit_t bound; offset = 0; x = 0; bound = bitset_numb_subsets(size); while (x < bound) { bit_t fs; fs = subset_ffs (b[x]); if (fs >= 0) { bit_t answer; answer = offset + fs; return (answer < size) ? answer : -1; } offset += bits_per_subset; ++x; } return -1; } /*(c bitset_ffs_range) * bit_t bitset_ffs_range (bitset b, bit_t from, bit_t to); * * Return the (bit) address of the first bit set in bitset `b' * in the range `from .. to-1'. Return -1 if no bit is set. */ bit_t bitset_ffs_range (bitset b, bit_t from, bit_t to) { bit_t n_bits; bit_t first_subset_skip; bit_t f; bit_t answer; n_bits = to - from; first_subset_skip = (from % bits_per_subset); if (first_subset_skip) { bitset_subset s; bit_t first_in_s; s = b[bitset_which_subset (from)]; s &= ~(((bitset_subset)1 << first_subset_skip) - 1); first_in_s = subset_ffs (s); if (first_in_s != -1) { answer = first_in_s + from - first_subset_skip; return (answer < (from + n_bits)) ? answer : -1; } from += bits_per_subset - first_subset_skip; n_bits -= bits_per_subset - first_subset_skip; } f = bitset_ffs (n_bits, b + bitset_which_subset (from)); if (f < 0) return f; answer = from + f; return (answer < (from + n_bits)) ? answer : -1; } static int bitset_byte_ffc[256] = { 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 6, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 7, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 6, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, -1 }; /* static bit_t subset_ffc (bitset_subset a); * * Return the address of the first bit set in a subset. * For bitset_subset 0, return -1. */ static bit_t subset_ffc (bitset_subset a) { bit_t offset; bit_t x; if (a == (bitset_subset)-1L) return -1; offset = 0; x = sizeof (a); while (x--) { bit_t q; q = bitset_byte_ffc [a & 0xff]; if (q >= 0) return q + offset; offset += 8; a >>= 8; } while (1) panic ("not reached"); } /*(c bitset_ffc) * bit_t bitset_ffc (bit_t size, bitset b); * * Return the (bit) address of the first bit clear in bitset `b'. * Return -1 if no bit is clear. */ bit_t bitset_ffc (bit_t size, bitset b) { bit_t offset; bit_t x; bit_t bound; offset = 0; x = 0; bound = bitset_numb_subsets(size); while (x < bound) { bit_t fs; fs = subset_ffc (b[x]); if (fs >= 0) { bit_t answer; answer = offset + fs; return (answer < size) ? answer : -1; } offset += bits_per_subset; ++x; } return -1; } /*(c bitset_ffc_range) * bit_t bitset_ffc_range (bitset b, bit_t from, bit_t to); * * Return the (bit) address of the first bit clear in bitset `b' * in the range `from .. to-1'. Return -1 if no bit is set. */ bit_t bitset_ffc_range (bitset b, bit_t from, bit_t to) { bit_t n_bits; bit_t first_subset_skip; bit_t f; bit_t answer; n_bits = to - from; first_subset_skip = (from % bits_per_subset); if (first_subset_skip) { bitset_subset s; bit_t first_in_s; s = b[bitset_which_subset (from)]; s |= (((bitset_subset)1 << first_subset_skip) - 1); first_in_s = subset_ffc (s); if (first_in_s != -1) { answer = first_in_s + from - first_subset_skip; return (answer < (from + n_bits)) ? answer : -1; } from += bits_per_subset - first_subset_skip; n_bits -= bits_per_subset - first_subset_skip; } f = bitset_ffc (n_bits, b + bitset_which_subset (from)); if (f < 0) return f; answer = from + f; return (answer < (from + n_bits)) ? answer : -1; } tla-1.3.5+dfsg/src/hackerlab/bitsets/bitset-tree.h0000644000175000017500000001771310457621774020543 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:41:33 2001 (bitset-tree.h) */ /* bitset-tree.h - * **************************************************************** * Copyright (C) 2000 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__BITSETS__BITSET_TREE_H #define INCLUDE__BITSETS__BITSET_TREE_H #include "hackerlab/mem/alloc-limits.h" #include "hackerlab/bitsets/bitset.h" /************************************************************************ *(h2 "Bitset Tree Rules") * * The branching structure of a bitset tree is determined by an array * of structures of type `struct bits_tree_rule': * */ /* update bits-print.c when changing fields here */ /*(c #s"struct bits_tree_rule" :category type) * struct bits_tree_rule; * insert*/ struct bits_tree_rule { int fanout; size_t subset_size; size_t subset_shift; size_t subset_mask; }; /*end-insert * * An array of `struct bits_tree_rule' values determines the branching * structure of a bitset tree. Nodes at distance `N' from the the * root of the tree are defined by the `N'th element of the array. * (See also xref:"The Bitset Tree Data Structure".) * * `fanout' is the number of sub-trees a node has. It is 0 for leaf * nodes. * * `subset_size' is the number of bits in each sub-tree. For leaf * nodes, this should be the number of bits in the leaf node. For * optimal performance, `subset_size' should be a multiple of `sizeof * (bitset_subset)'. * * Given a non-leaf bitset tree `T', and a bit address within that * tree, `B', the subset containing that bit is: * * T[B / subset_size] * * The relative address of the bit within that subtree is: * * B % subset_size * * The fields `subset_shift' and `subset_mask' are not used for leaf * nodes. For non-leaf nodes, if `subset_size' is not a power of two, * the fields `subset_shift' and `subset_mask' should be 0. * Otherwise, they should be set as follows: * * subset_shift = log2(subset_size) * subset_mask = subset_size - 1 * * Here is an example for bitset containing `1<<21' elements. In this * example, the root node of the tree has 32 sub-trees; each second * and third level tree has 16 sub-trees; leaf nodes have 256 bits * (`32 * 16 * 16 * 256 == 1<<21'): * * struct bits_tree_rule bitset_rule[] = * { * {32, 1<<16, 16, 0xffff}, // root has 32 subtrees * {16, 1<<12, 12, 0xfff}, // level 1 nodes have 16 subtrees * {16, 256, 8, 0xff}, // level 2 nodes have 16 subtrees * {0, 256, 0, 0} // leaf nodes have 256 bits * }; * * Bitset trees of the same size (`1<<21' bits) could be represented * other ways. For example: * * struct bits_tree_rule bitset_rule[] = * { * {16, 1<<17, 17, 0x1ffff}, // root has 16 subtrees * {2, 1<<16, 16, 0xffff}, // level 1 nodes have 2 subtrees * {16, 1<<12, 12, 0xfff}, // level 2 nodes have 16 subtrees * {16, 256, 8, 0xff}, // level 3 nodes have 16 subtrees * {0, 256, 0, 0} // leaf nodes have 256 bits * }; * * Some care is necessary when choosing the values for an array of * `struct bits_tree_rule'. For a given bitset size, a deeper bitset * tree (more elements in the rules array) means that the worst-case * cost of accessing or modifying a single bit is raised. On the * other hand, homogenous sub-trees (at any depth) are (often) * replaced by a 0 or `-1' pointer saving both space and time -- a * deeper tree may offer more opportunities for that optimization. * The best branching structure depends on the particular sets your * programs uses and the particular access pattern of your program; * experimentation with different branching structures may be * necessary. * */ struct bits_tree_no_such_structure; typedef struct bits_tree_no_such_structure * bits_tree; #define bits_tree_which_bitset(L, R, X) ((R)->subset_shift ? ((X) >> (R)->subset_shift) : ((X) / (R)->subset_size)) #define bits_tree_which_bit(L, R, X) ((R)->subset_mask ? ((X) & (R)->subset_mask) : ((X) % (R)->subset_size)) #define bits_tree_full_bitset ((bits_tree)-1L) #define bits_tree_empty_bitset ((bits_tree)0) /* automatically generated __STDC__ prototypes */ extern bits_tree bits_tree_alloc (alloc_limits lim, struct bits_tree_rule * rule); extern void bits_tree_free (alloc_limits lim, struct bits_tree_rule * rule, bits_tree b); extern bit_t bits_tree_compact (alloc_limits lim, struct bits_tree_rule * rule, bits_tree a); extern bits_tree bits_tree_dup (alloc_limits lim, struct bits_tree_rule * rule, bits_tree a); extern int bits_tree_get_subset (bitset_subset * answer, alloc_limits lim, struct bits_tree_rule * rule, bits_tree b, bit_t n); extern int bits_tree_is_member (alloc_limits lim, struct bits_tree_rule * rule, bits_tree b, int n); extern int bits_tree_is_equal (alloc_limits lim, struct bits_tree_rule * rule, bits_tree a, bits_tree b); extern int bits_tree_is_subset (alloc_limits lim, struct bits_tree_rule * rule, bits_tree a, bits_tree b); extern int bits_tree_is_empty (alloc_limits lim, struct bits_tree_rule * rule, bits_tree a); extern int bits_tree_is_full (alloc_limits lim, struct bits_tree_rule * rule, bits_tree a); extern int bits_tree_is_empty_range (alloc_limits lim, struct bits_tree_rule * rule, bits_tree a, int from, int to); extern int bits_tree_is_full_range (alloc_limits lim, struct bits_tree_rule * rule, bits_tree a, int from, int to); extern int bits_tree_adjoin (alloc_limits lim, struct bits_tree_rule * rule, bits_tree b, int n); extern int bits_tree_remove (alloc_limits lim, struct bits_tree_rule * rule, bits_tree b, int n); extern int bits_tree_toggle (alloc_limits lim, struct bits_tree_rule * rule, bits_tree b, int n); extern void bits_tree_clear (alloc_limits lim, struct bits_tree_rule * rule, bits_tree b); extern void bits_tree_fill (alloc_limits lim, struct bits_tree_rule * rule, bits_tree b); extern int bits_tree_clear_range (alloc_limits lim, struct bits_tree_rule * rule, bits_tree b, int from, int to); extern int bits_tree_fill_range (alloc_limits lim, struct bits_tree_rule * rule, bits_tree b, int from, int to); extern void bits_tree_complement (alloc_limits lim, struct bits_tree_rule * rule, bits_tree b); extern int bits_tree_assign (alloc_limits lim, struct bits_tree_rule * rule, bits_tree a, bits_tree b); extern int bits_tree_union (alloc_limits lim, struct bits_tree_rule * rule, bits_tree a, bits_tree b); extern int bits_tree_intersection (alloc_limits lim, struct bits_tree_rule * rule, bits_tree a, bits_tree b); extern int bits_tree_difference (alloc_limits lim, struct bits_tree_rule * rule, bits_tree a, bits_tree b); extern int bits_tree_revdifference (alloc_limits lim, struct bits_tree_rule * rule, bits_tree a, bits_tree b); extern int bits_tree_xor (alloc_limits lim, struct bits_tree_rule * rule, bits_tree a, bits_tree b); extern int bits_tree_population (alloc_limits lim, struct bits_tree_rule * rule, bits_tree a); extern int bits_tree_population_range (alloc_limits lim, struct bits_tree_rule * rule, bits_tree a, int from, int to); extern int bits_tree_ffs (alloc_limits lim, struct bits_tree_rule * rule, bits_tree b); extern int bits_tree_ffc (alloc_limits lim, struct bits_tree_rule * rule, bits_tree b); extern int bits_tree_ffs_range (alloc_limits lim, struct bits_tree_rule * rule, bits_tree b, int from, int to); extern int bits_tree_ffc_range (alloc_limits lim, struct bits_tree_rule * rule, bits_tree b, int from, int to); #endif /* INCLUDE__BITSETS__BITSET_TREE_H */ tla-1.3.5+dfsg/src/hackerlab/bitsets/bitset-print.h0000644000175000017500000000116110457621774020726 0ustar useruser/* bitset-print.h - decls for printing bitsets * **************************************************************** * Copyright (C) 2000 Thomas Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__BITSETS__BITSET_PRINT_H #define INCLUDE__BITSETS__BITSET_PRINT_H #include "hackerlab/bitsets/bitset.h" /* automatically generated __STDC__ prototypes */ extern void bitset_print (int fd, bit_t size, bitset set, t_uchar * name, int is_static, int decls_only); #endif /* INCLUDE__BITSETS__BITSET_PRINT_H */ tla-1.3.5+dfsg/src/hackerlab/bitsets/uni-bits.h0000644000175000017500000000106110457621774020033 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:41:35 2001 (uni-bits.h) */ /* uni-bits.h - * **************************************************************** * Copyright (C) 2000 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__BITSETS__UNI_BITS_H #define INCLUDE__BITSETS__UNI_BITS_H #include "hackerlab/bitsets/bitset-tree.h" extern struct bits_tree_rule uni_bits_tree_rule[]; /* automatically generated __STDC__ prototypes */ #endif /* INCLUDE__BITSETS__UNI_BITS_H */ tla-1.3.5+dfsg/src/hackerlab/bitsets/uni-bits.c0000644000175000017500000000210410457621774020025 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:41:35 2001 (uni-bits.c) */ /* uni-bits.c - * **************************************************************** * Copyright (C) 2000 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/bitsets/uni-bits.h" /************************************************************************ *(h1 "Unicode Character Bitsets") * * * */ /*(c uni_bits_tree_rule :category variable) * struct bits_tree_rule uni_bits_tree_rule[]; * * `uni_bits_tree_rule' defines a bitset tree branching structure * suitable for representing sparse sets of Unicode code points. * (See xref:"Bitset Tree Rules".) * * Each set has {1 << 21} elements. * * This tree structure has been tuned to efficiently represent * sets corresponding to each of the Unicode General Categories * of characters. (See xref:"Unicode Category Bitsets".) */ struct bits_tree_rule uni_bits_tree_rule[] = {{32, 1<<16, 16, 0xffff}, {16, 1<<12, 12, 0xfff}, {16, 256, 8, 0xff}, {0, 256, 0, 0}}; tla-1.3.5+dfsg/src/hackerlab/bitsets/bitsets-data-sheet.doc0000644000175000017500000001776710457621774022335 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:57:15 2001 (bitsets-data-sheet.doc) */ /************************************************************************ *(h0 "Data Sheet for the Hackerlab Bitsets Functions" * :appendix) * insert*/ Package: Hackerlab Bitsets (bitset data structures) Supplier: regexps.com Function: Hackerlab Bitsets provides functions for manipulating ordinary bitsets, and bitset trees (very large, sparsely populated bitsets). Key Features: Fast and accurate. Clean and simple "classic C" interface. Extensive test suite included. Postscript and HTML documentation included. A complete set of bitset functions. These operations are provided for both ordinary bitsets and bitset trees: alloc free dup is_member is_equal is_subset is_empty is_empty_range is_full is_full_range adjoin remove toggle clear clear_range fill fill_range complement assign union intersection difference revdifference xor population population_range ffs ("find first set") ffs_range ffc ("find first clear") ffc_range Licensing: Hackerlab Bitsets is part of the Hackerlab C Library which is distributed under the terms of the GNU General Public License, Version 2, as published by the Free Software Foundation. Alternative licenses (such as licenses permitting binary-only re-distribution) can be purchased from regexps.com. Prerequisites: standard C compiler Posix libc.a (standard C library) GNU Make Recommended and Disrecommended Applications: Recommended for any application needing a fast and complete implementation of the "standard" bitset operations. Sparse bitset support is ideal for representing sets of Unicode code points. Limitations: This is the first public (non-prototype) release. Contribution to Executable Size: Ordinary Bitsets ---------------- On a Pentium based machine, running gcc (egcs version 2.91.66) we compiled this simple (nonsense) program and linked it against the Hackerlab C Library: int main (int argc, char * argv[]) { bitset_alloc (); bitset_free (); bitset_dup (); bitset_is_member (); bitset_is_equal (); bitset_is_subset (); bitset_is_empty (); bitset_is_empty_range (); bitset_is_full (); bitset_is_full_range (); bitset_adjoin (); bitset_remove (); bitset_toggle (); bitset_clear (); bitset_clear_range (); bitset_fill (); bitset_fill_range (); bitset_complement (); bitset_assign (); bitset_union (); bitset_intersection (); bitset_difference (); bitset_revdifference (); bitset_xor (); bitset_population (); bitset_population_range (); bitset_ffs (); bitset_ffs_range (); bitset_ffc (); bitset_ffc_range (); } Both the library and the program were compiled with the "-g" option. Total executable size: text data 16681 4864 The following list of object files from the Hackerlab C library were linked into the executable: bitset.o alloc-limits.o mem.o must-malloc.o panic.o str.o cvt.o panic-exit.o char-class.o The contribution of those files to the executable size is: text data 15405 4672 Bitset Trees (Large Sparsely Populated Bitsets) ----------------------------------------------- For these, we used the (nonsense) program: int main (int argc, char * argv[]) { bits_alloc (); bits_free (); bits_dup (); bits_is_member (); bits_is_equal (); bits_is_subset (); bits_is_empty (); bits_is_empty_range (); bits_is_full (); bits_is_full_range (); bits_adjoin (); bits_remove (); bits_toggle (); bits_clear (); bits_clear_range (); bits_fill (); bits_fill_range (); bits_complement (); bits_assign (); bits_union (); bits_intersection (); bits_difference (); bits_revdifference (); bits_xor (); bits_population (); bits_population_range (); bits_ffs (); bits_ffs_range (); bits_ffc (); bits_ffc_range (); } Total executable size: text data 39097 4864 The following list of object files from the Hackerlab C library were linked into the executable: bits.o bitset-tree.o bitset.o alloc-limits.o mem.o must-malloc.o panic.o str.o cvt.o panic-exit.o char-class.o The contribution of those files to the executable size is: text data 37814 4672 External Linkage Dependencies: When compiled under FreeBSD 3.0, the simple programs used to test executable sizes depends on the following symbols defined in "libc": _exit free malloc realloc write Accuracy: The Hackerlab Bitsets library passes all of the tests described here: To test the ordinary bitset functions, we wrote a Scheme program to automatically generate test cases. The tests generated exercise all of the bitset functions, testing a variety of bitset sizes and boundary conditions. The Scheme program uses a list-based set library to compute the expected results of these tests and generates an answer key. Over 32,000 tests are generated. To test bitset trees, we wrote a program that performs a randomly selected sequence of bitset operations on both an ordinary bitset and on an equivalent bitset tree. Parameters are randomly selected to exercise a variety of special cases such as boundary conditions. All bitset operations are tested. The ordinary and bitset tree results of each operation are compared for equality. The totality of Hackerlab C Library tests, including the tests described here and tests of other subsystems that use the bitset library, achieve 98.9% test coverage (measured in lines of source executed) for the ordinary bitset functions, 86.8% coverage for bitset tree functions. The code not tested is primarily code concerned with cleanly returning error codes in the (presumably unlikely) case of memory allocation failure. Execution Speed: There are no industry-wide standards for measuring the performance of bitset operations and we know of similar library against which to make comparative measurements. The implementation is conceptually straightforward, and its performance characteristics can be accurately inferred from a description of the implementation. The ordinary bitset functions perform straightforward bit manipulations using C operators. Bitsets are represented as an array of subsets, each subset containing (up to) the number of bits in a machine word. Most functions which operate on a sequence of contiguous bits contain a loop which operates on an entire word at a time, with special cases for the boundaries of the loop. Bitset trees are recursively represented as a tree of bitset trees, with ordinary bitsets as leaf nodes. Subtrees which are all 0 or all 1 are (in most circumstances) replaced by a NULL or -1 pointer (which speeds up operations on those subtrees). Run-time Allocation Requirements: Ordinary bitsets are stored as a contiguous array of bits. Bitset trees afford programmers to make explicit space/time trade-offs by determining the depth and branching structure of the trees. Support: To purchase an alternative license, request additional features, or for any kind of support assistance, you can contact us at "hackerlab@regexps.com" or via our web site "www.regexps.com". We can also be reached at (412) 401-5204 or at: regexps.com 1717 Murray Ave. P.M.B. #10 Pittsburgh, PA 15217 Available support includes (but is not limited to): - porting assistance - customized extensions - consultation concerning regexp-intensive applications - help with undocumented interfaces - bug fixing In most cases, support is offered as a commercial service. /*end-insert */ tla-1.3.5+dfsg/src/hackerlab/bitsets/Makefile.in0000644000175000017500000000027610457621774020204 0ustar useruserinclude $(makefiles)/library-objects.mk ifeq ($(cgs__install_hackerlab),1) include $(makefiles)/install-includes.mk endif # tag: Tom Lord Tue Dec 4 14:52:06 2001 (bitsets/Makefile.in) # tla-1.3.5+dfsg/src/hackerlab/bitsets/bits.h0000644000175000017500000000423310457621774017246 0ustar useruser/* bits.h - generic bitsets * **************************************************************** * Copyright (C) 2000 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__BITSETS__BITS_H #define INCLUDE__BITSETS__BITS_H #include "hackerlab/mem/alloc-limits.h" #include "hackerlab/bitsets/bitset-tree.h" struct bits_tree_shared { /* update bits-print.c when changing fields here */ int refs; bits_tree tree; }; struct bits { /* update bits-print.c when changing fields here */ alloc_limits lim; struct bits_tree_rule * rule; struct bits_tree_shared * stree; }; typedef struct bits * bits; /* automatically generated __STDC__ prototypes */ extern bits bits_alloc (alloc_limits lim, struct bits_tree_rule * rule); extern void bits_free (bits b); extern bits bits_dup (bits a); extern int bits_get_subset (bitset_subset * answer, bits b, int n); extern void bits_compact (bits a); extern int bits_is_member (bits b, int n); extern int bits_is_equal (bits a, bits b); extern int bits_is_subset (bits a, bits b); extern int bits_is_empty (bits a); extern int bits_is_full (bits a); extern int bits_is_empty_range (bits a, int from, int to); extern int bits_is_full_range (bits a, int from, int to); extern int bits_adjoin (bits b, int n); extern int bits_remove (bits b, int n); extern int bits_toggle (bits b, int n); extern int bits_clear (bits b); extern int bits_fill (bits b); extern int bits_clear_range (bits b, int from, int to); extern int bits_fill_range (bits b, int from, int to); extern int bits_complement (bits b); extern int bits_assign (bits a, bits b); extern int bits_union (bits a, bits b); extern int bits_intersection (bits a, bits b); extern int bits_difference (bits a, bits b); extern int bits_revdifference (bits a, bits b); extern int bits_xor (bits a, bits b); extern int bits_population (bits a); extern int bits_population_range (bits a, int from, int to); extern int bits_ffs (bits b); extern int bits_ffc (bits b); extern int bits_ffs_range (bits b, int from, int to); extern int bits_ffc_range (bits b, int from, int to); #endif /* INCLUDE__BITSETS__BITS_H */ tla-1.3.5+dfsg/src/hackerlab/bitsets/bitset-tree-print.h0000644000175000017500000000143310457621774021665 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:41:34 2001 (bitset-tree-print.h) */ /* bitset-tree-print.h - * **************************************************************** * Copyright (C) 2000 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__BITSETS__BITSET_TREE_PRINT_H #define INCLUDE__BITSETS__BITSET_TREE_PRINT_H #include "hackerlab/bitsets/bitset-tree.h" /* automatically generated __STDC__ prototypes */ extern void bits_tree_print (int fd, alloc_limits lim, struct bits_tree_rule * rule, bits_tree bt, t_uchar * name, t_uchar * stub, int is_static, int decls_only, int is_nested); #endif /* INCLUDE__BITSETS__BITSET_TREE_PRINT_H */ tla-1.3.5+dfsg/src/hackerlab/bitsets/PLUGIN/0000755000175000017500000000000010457621774017130 5ustar userusertla-1.3.5+dfsg/src/hackerlab/bitsets/PLUGIN/REQ0000644000175000017500000000003610457621774017501 0ustar useruseros bitsets bitsets libboot tla-1.3.5+dfsg/src/hackerlab/bitsets/bitset.h0000644000175000017500000001404110457621774017575 0ustar useruser/* bitset.h - bitset decls * **************************************************************** * Copyright (C) 1998, 2000 Thomas Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/os/limits.h" #include "hackerlab/mem/alloc-limits.h" #ifndef INCLUDE__BITSETS__BITSET_H #define INCLUDE__BITSETS__BITSET_H /************************************************************************ *(h2 "Bitset Types and Macros") * */ /*(c bit_t :category type) * typedef long bit_t; * * Values of type `bit_t' represent a bit address within * a bitset. The address of the first bit is 0. * * `bit_t' is a signed integer type. Some functions which return a * bit address use the value -1 to indicate `no such bit'. * */ typedef long bit_t; /* A bit address. */ /*end-insert */ /*(c bitset_subset :category type) * typedef unsigned long bitset_subset; * * A fragment of a bitset. A bitset is an array of these. */ typedef unsigned long bitset_subset; /*(c bitset :category type) * typedef bitset_subset * bitset; * * A packed array of bits. */ typedef bitset_subset * bitset; /*c bits_per_subset :category macro) * #define bits_per_subset (8 * sizeof (bitset_subset)) * * The number of bits in one value of type `subset'. The * implementation presumes that `sizeof (bitset_subset)' is a power of two. */ #if ULONG_MAX == 0xffffffffUL #define bits_per_subset (32) #elif ULONG_MAX == ((0xffffffffUL << 32) + 0xffffffffUL) #define bits_per_subset (64) #else #error "odd ULONG_MAX in bitset.h" #endif /*c bitset_subset_mask :category macro) * #define bitset_subset_mask (bits_per_subset - 1) * * A bitmask useful for finding the bit position within a subset * of a bitset element. */ #define bitset_subset_mask (bits_per_subset - 1) /*(c bitset_which_subset :category macro) * #define bitset_which_subset(N) ((N) / bits_per_subset) * * A macro useful for finding the subset index within a bitset of a * particular bitset element. The subset containing bit `N' bit * bitset `B' is: * * B[bitset_which_subset(N)] */ #define bitset_which_subset(N) ((N) / bits_per_subset) /*(c bitset_subset_offset :category macro) * #define bitset_subset_offset(N) \ * (((N) / bits_per_subset) * bits_per_subset) * * A macro useful for finding a subset offset within a bitset of the * subset containing a bitset element. Bit 0 (the low order bit) of * the subset containing bit `N' is the bit whose bit address is * `bitset_subset_offset(N)'. */ #define bitset_subset_offset(N) (((N) / bits_per_subset) * bits_per_subset) /*(c bitset_which_bit :category macro) * #define bitset_which_bit(N) ((N) & bitset_subset_mask) * * The bit number of a bitset index within its subset. */ #define bitset_which_bit(N) ((N) & bitset_subset_mask) /*c bitset_bit_mask :category macro) * #define bitset_bit_mask(N) \ * ((~(bitset_subset)0L) >> (bits_per_subset - bitset_which_bit (N))) * * A bitmask for all bits up to (but not including) element `N' of the * subset containing element `N'. */ #define bitset_bit_mask(N) ((~(bitset_subset)0L) >> (bits_per_subset - bitset_which_bit (N))) /*(c bitset_numb_subsets :category macro) * #define bitset_numb_subsets(N) * * As a function: * * bit_t bitset_numb_subsets (bit_t n); * * Return the number of values of type `subset' necessary to represent * a bitset with `n' elements. Because this is a macro, it can be used * in a declaration: * * { * // declare a bitset that can hold 12 elements: * // * bitset_subset options_set [bitset_numb_subsets(12)]; * } */ #define bitset_numb_subsets(n) (((n) + bits_per_subset - 1) / bits_per_subset) /*(c sizeof_bitset :category macro) * #define sizeof_bitset(N) * * As a function: * * size_t sizeof_bitset (bit_t n); * * Return the size, in bytes, of a bitset large enough to * hold `n' elements: * * // allocate a bitset that can hold 12 elements: * // * options_set = (bitset)must_malloc (sizeof_bitset (12)); */ #define sizeof_bitset(n) (bitset_numb_subsets(n) * sizeof(bitset_subset)) /* automatically generated __STDC__ prototypes */ extern bitset bitset_alloc (alloc_limits limits, bit_t size); extern void bitset_free (alloc_limits limits, bitset a); extern bitset bitset_dup (alloc_limits limits, bit_t size, bitset a); extern bitset bitset_realloc (alloc_limits limits, bit_t new_size, bit_t old_size, bitset a); extern int bitset_is_member (bitset b, bit_t n); extern int bitset_is_equal (bit_t size, bitset a, bitset b); extern int bitset_is_subset (bit_t size, bitset a, bitset b); extern int bitset_is_empty (bit_t size, bitset a); extern int bitset_is_empty_range (bitset a, bit_t from, bit_t to); extern int bitset_is_full (bit_t size, bitset a); extern int bitset_is_full_range (bitset a, bit_t from, bit_t to); extern void bitset_adjoin (bitset b, bit_t n); extern void bitset_remove (bitset b, bit_t n); extern void bitset_toggle (bitset b, bit_t n); extern void bitset_clear (bit_t size, bitset b); extern void bitset_clear_range (bitset b, bit_t from, bit_t to); extern void bitset_fill (bit_t size, bitset b); extern void bitset_fill_range (bitset b, bit_t from, bit_t to); extern void bitset_complement (bit_t size, bitset b); extern void bitset_assign (bit_t size, bitset a, bitset b); extern void bitset_union (bit_t size, bitset a, bitset b); extern void bitset_intersection (bit_t size, bitset a, bitset b); extern void bitset_difference (bit_t size, bitset a, bitset b); extern void bitset_revdifference (bit_t size, bitset a, bitset b); extern void bitset_xor (bit_t size, bitset a, bitset b); extern bit_t bitset_population (bit_t size, bitset a); extern bit_t bitset_population_range (bitset a, bit_t from, bit_t to); extern bit_t bitset_ffs (bit_t size, bitset b); extern bit_t bitset_ffs_range (bitset b, bit_t from, bit_t to); extern bit_t bitset_ffc (bit_t size, bitset b); extern bit_t bitset_ffc_range (bitset b, bit_t from, bit_t to); #endif /* INCLUDE__BITSETS__BITSET_H */ tla-1.3.5+dfsg/src/hackerlab/bitsets/bitset-tree-print.c0000644000175000017500000000713410457621774021664 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:41:34 2001 (bitset-tree-print.c) */ /* bitset-tree-print.c - * **************************************************************** * Copyright (C) 2000 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/bugs/panic.h" #include "hackerlab/char/str.h" #include "hackerlab/fmt/cvt.h" #include "hackerlab/vu/safe.h" #include "hackerlab/mem/alloc-limits.h" #include "hackerlab/bitsets/bitset-print.h" #include "hackerlab/bitsets/bitset-tree-print.h" /************************************************************************ *(h2 "Printing Bitset Trees" * :includes ("hackerlab/bitsets/bitset-tree-print.h")) * * * */ /*(c bits_tree_print) * void bits_tree_print (int fd, * alloc_limits lim, * struct bits_tree_rule * rule, * bits_tree bt, * t_uchar * name, * t_uchar * stub, * int is_static, * int decls_only, * int is_nested); * * Print C code which compiles to an initialized bitset tree. * * `fd' is the descriptor on which to emit code. * * `lim', if not 0, describes allocation limits that apply to this * bitset tree. For more information about allocation limits, see * xref:"Allocation With Limitations". * * `rule' describes the branching structure of the bitset tree. * See xref:"Bitset Tree Rules". * * `bt' is the bitset tree to print. * * `name' is the name for the bitset tree. * * This function calls `panic' if an error occurs. */ void bits_tree_print (int fd, alloc_limits lim, struct bits_tree_rule * rule, bits_tree bt, t_uchar * name, t_uchar * stub, int is_static, int decls_only, int is_nested) { #define MAX_NAME 2048 int x; int name_len; t_uchar row_name[2 * MAX_NAME]; t_uchar stub_name[2 * MAX_NAME]; int name_end; bits_tree * set; name_len = str_length (name); if (name_len > MAX_NAME) panic ("name too long in bits_tree_print"); if (decls_only) { safe_printfmt (fd, "%s bits_tree %s;\n", (is_static ? "static" : "extern"), name); return; } bits_tree_compact (lim, rule, bt); set = (bits_tree *)bt; str_cpy (row_name, stub); str_cpy (stub_name, stub); str_cat (stub_name, "_"); name_end = str_length (stub_name); if (rule->fanout == 0) { bitset_print (fd, rule->subset_size, (bitset)set, row_name, 1, 0); } else { for (x = 0; x < rule->fanout; ++x) { if ( (set[x] == bits_tree_empty_bitset) || (set[x] == bits_tree_full_bitset)) continue; cvt_long_to_decimal (stub_name + name_end, (long)x); bits_tree_print (fd, lim, rule + 1, set[x], stub_name, stub_name, 1, 0, 1); } row_name[name_end] = 0; safe_printfmt (fd, "\n\n"); safe_printfmt (fd, "static bits_tree * %s[%d] =\n", row_name, rule->fanout); safe_printfmt (fd, "{\n"); for (x = 0; x < rule->fanout; ++x) { if (set[x] == bits_tree_empty_bitset) safe_printfmt (fd, " (bits_tree *)0,\n"); else if (set[x] == bits_tree_full_bitset) safe_printfmt (fd, " (bits_tree *)-1L,\n"); else { cvt_long_to_decimal (stub_name + name_end, (long)x); safe_printfmt (fd, " (bits_tree *)%s,\n", stub_name); } } safe_printfmt (fd, "};\n\n"); } if (!is_nested) { safe_printfmt (fd, "\n\n"); safe_printfmt (fd, "%sbits_tree * %s = (bits_tree *)%s\n\n", (is_static ? "static " : ""), name, row_name); } } tla-1.3.5+dfsg/src/hackerlab/bitsets/bitset-tree.c0000644000175000017500000013216710457621774020537 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:41:34 2001 (bitset-tree.c) */ /* bitset-tree.c - * **************************************************************** * Copyright (C) 2000 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/mem/mem.h" #include "hackerlab/bitsets/bitset-tree.h" /************************************************************************ *(h1 "Bitset Trees" * :includes ("hackerlab/bitsets/bitset-tree.h")) * * A "bitset tree" is a sparse representation for a large bitset which * is mostly homogenous (i.e., containing large runs which are all 0 * or all 1). A bitset tree saves time and memory by compressing the * representation of homogenous subsets. * * It is important to note that if your bitsets do not contain large, * contiguous, homogenous (all 0 or all 1) subsets, then bitset trees * are of no help -- they add space and time overhead and offer no * advantage. If your sets do have homogenous subsets, bitset trees * can lead to significant space and time savings. * * Usually, you will not want to use bitset trees directly. Instead, * you will want to use ``shared bitset trees''. (See xref:"Shared * Bitset Trees".) Nevertheless, even if you will use shared bitset * trees, it is important to understand how bitset trees work. */ /************************************************************************ *(h2 "The Bitset Tree Data Structure") * * This section describes the internal representation of bitset trees. * The public interface to bitset trees hides most of the details of * this representation -- but understanding it will help you predict * the performance of programs which use bitset trees, and design * bitset tree rules. (See xref:"Bitset Tree Rules".) * * Bitset trees are defined recursively: a bitset tree is an array of * (pointers to) bitset trees. The leaf nodes of a bitset trees are * (pointers to) ordinary bitsets. (See xref:"Flat Bitsets".) * * A bitset tree represents a single logical bitset which is the * concatenation of its sub-trees. Each subtree at a given distance * from the root has the same number of members and the same depth and * branching structure. * * As an optimization, if a particular subtree is all 0s, that subtree * may be replaced by a null pointer. If a particular subtree is all * 1s, it may be replaced by the pointer `(bits_tree)-1'. Whenever * practical, functions which operate on bitset trees use this * optimization automatically. For example, `bits_fill_range' will * store a subtree of all 0s or all 1s efficiently. In some cases, * the optimization is not practical. For example, `bits_adjoin' * does not attempt to optimize the subtrees it modifies. * * The function `bits_tree_compact' recursively searches a bitset tree, * replacing homogenous sub-trees with 0 or `-1'. * */ /*(include-documentation "bitset-tree.h") */ /************************************************************************ *(h2 "Allocating Bitset Trees") * * * */ /*(c bits_tree_alloc) * bits_tree bits_tree_alloc (alloc_limits lim, * struct bits_tree_rule * rule); * * Allocate a new bitset tree. * * `lim' describes allocation limits that apply to this bitset tree. * For more information about allocation limits, see xref:"Allocation * With Limitations". * * `rule' describes the branching structure of the bitset tree. * See xref:"Bitset Tree Rules". * * The new set is initialized to all `0's. * * If allocation fails, 0 is returned. */ bits_tree bits_tree_alloc (alloc_limits lim, struct bits_tree_rule * rule) { bits_tree answer; if (!rule->fanout) return (bits_tree)bitset_alloc (lim, rule->subset_size); answer = (bits_tree)lim_malloc (lim, rule->fanout * sizeof (bits_tree)); if (answer) mem_set0 ((t_uchar *)answer, rule->fanout * sizeof (bits_tree)); return answer; } /*(c bits_tree_free) * void bits_tree_free (alloc_limits lim, * struct bits_tree_rule * rule, * bits_tree b); * * Free all storage associated with a bitset tree. * * `lim' describes allocation limits that apply to this bitset tree. * For more information about allocation limits, see xref:"Allocation * With Limitations". * * `rule' describes the branching structure of the bitset tree. * See xref:"Bitset Tree Rules". * */ void bits_tree_free (alloc_limits lim, struct bits_tree_rule * rule, bits_tree b) { int x; if (!rule->fanout) { bitset_free (lim, (bitset)b); return; } for (x = 0; x < rule->fanout; ++x) { if ( (((bits_tree *)b)[x] != bits_tree_full_bitset) && (((bits_tree *)b)[x] != bits_tree_empty_bitset)) bits_tree_free (lim, rule + 1, ((bits_tree *)b)[x]); } lim_free (lim, (t_uchar *)b); } /*(c bits_tree_compact) * bit_t bits_tree_compact (alloc_limits lim, * struct bits_tree_rule * rule, * bits_tree a); * * Optimize a bitset tree by compacting homogenous * sub-trees. See xref:"The Bitset Tree Data Structure". * * `lim' describes allocation limits that apply to this bitset tree. * For more information about allocation limits, see xref:"Allocation * With Limitations". * * `rule' describes the branching structure of the bitset tree. * See xref:"Bitset Tree Rules". * * The population size of the set is returned. */ bit_t bits_tree_compact (alloc_limits lim, struct bits_tree_rule * rule, bits_tree a) { int x; bit_t pop; if (!rule->fanout) { return bits_tree_population (lim, rule, a); } pop = 0; for (x = 0; x < rule->fanout; ++x) { if (((bits_tree *)a)[x] == bits_tree_full_bitset) { pop += rule->subset_size; } else if (((bits_tree *)a)[x] == bits_tree_empty_bitset) continue; else { bit_t sub_pop; sub_pop = bits_tree_compact (lim, rule + 1, ((bits_tree *)a)[x]); if (sub_pop == 0) { bits_tree_free (lim, rule + 1, ((bits_tree *)a)[x]); ((bits_tree *)a)[x] = bits_tree_empty_bitset; } else if (sub_pop == rule->subset_size) { bits_tree_free (lim, rule + 1, ((bits_tree *)a)[x]); ((bits_tree *)a)[x] = bits_tree_full_bitset; } pop += sub_pop; } } return pop; } /*(c bits_tree_dup) * bits_tree bits_tree_dup (alloc_limits lim, * struct bits_tree_rule * rule, * bits_tree a); * * Allocate a new copy of bitset tree `a'. * * `lim' describes allocation limits that apply to this bitset tree. * For more information about allocation limits, see xref:"Allocation * With Limitations". * * `rule' describes the branching structure of the bitset tree. * See xref:"Bitset Tree Rules". * * If allocation fails, 0 is returned. */ bits_tree bits_tree_dup (alloc_limits lim, struct bits_tree_rule * rule, bits_tree a) { bits_tree answer; int x; if (!rule->fanout) { return (bits_tree)bitset_dup (lim, rule->subset_size, (bitset)a); } answer = (bits_tree)lim_malloc (lim, rule->fanout * sizeof (bits_tree)); if (answer) { for (x = 0; x < rule->fanout; ++x) { if (((bits_tree *)a)[x] == bits_tree_full_bitset) ((bits_tree *)answer)[x] = bits_tree_full_bitset; else if (((bits_tree *)a)[x] == bits_tree_empty_bitset) ((bits_tree *)answer)[x] = bits_tree_empty_bitset; else { ((bits_tree *)answer)[x] = bits_tree_dup (lim, rule + 1, ((bits_tree *)a)[x]); if ((!((bits_tree *)answer)[x]) && ((bits_tree *)a)[x]) { int y; for (y = x; y < rule->fanout; ++y) ((bits_tree *)answer)[y] = bits_tree_empty_bitset; bits_tree_free (lim, rule, answer); return 0; } } } } return answer; } /************************************************************************ *h2 "Accessing Individual Subsets of a Bitset Tree") * * * */ /*c bits_tree_get_subset) * int bits_tree_get_subset (bitset_subset * answer, * alloc_limits lim, * struct bits_tree_rule * rule, * bits_tree b, * bit_t n); * * Return (in `*answer') the `bitset_subet' containing bit `n' of * bitset tree `b'. See xref:"bitset_subset". * * `lim' describes allocation limits that apply to this * bitset tree. For more information about allocation limits, see * xref:"Allocation With Limitations". * * `rule' describes the branching structure of the bitset tree. * See xref:"Bitset Tree Rules". * * If the indicated subset does not exist (because it is part of * a homogenous subtree whose representation has been optimized) * the corresponding subtree is newly allocated. * * If allocation fails, -1 is returned. Otherwise, 0 is returned. */ int bits_tree_get_subset (bitset_subset * answer, alloc_limits lim, struct bits_tree_rule * rule, bits_tree b, bit_t n) { int bs; if (!rule->fanout) { *answer = ((bitset)b)[bitset_which_subset (n)]; return 0; } bs = bits_tree_which_bitset (lim, rule, n); if (((bits_tree *)b)[bs] == bits_tree_empty_bitset) { ((bits_tree *)b)[bs] = bits_tree_alloc (lim, rule + 1); if (!((bits_tree *)b)[bs]) { ((bits_tree *)b)[bs] = bits_tree_empty_bitset; return -1; } } else if (((bits_tree *)b)[bs] == bits_tree_full_bitset) { ((bits_tree *)b)[bs] = bits_tree_alloc (lim, rule + 1); if (!((bits_tree *)b)[bs]) { ((bits_tree *)b)[bs] = bits_tree_full_bitset; return -1; } bits_tree_fill (lim, rule + 1, ((bits_tree *)b)[bs]); } return bits_tree_get_subset (answer, lim, rule + 1, ((bits_tree *)b)[bs], bits_tree_which_bit(lim, rule, n)); } /************************************************************************ *(h2 "Operations on Bitset Trees") * * * Each of the operations defined for flat bitsets has a corresponding * operation for bitset trees. See xref:"Flat Bitsets". * * The bitset tree operations are: * * * |$bits_tree_is_member| |$bits_tree_is_equal| |$bits_tree_is_subset| * |$bits_tree_is_empty| |$bits_tree_is_full| |$bits_tree_is_empty_range| * |$bits_tree_is_full_range| |$bits_tree_adjoin| |$bits_tree_remove| * |$bits_tree_toggle| |$bits_tree_clear| |$bits_tree_fill| |$bits_tree_clear_range| * |$bits_tree_fill_range| |$bits_tree_complement| |$bits_tree_assign| * |$bits_tree_union| |$bits_tree_intersection| |$bits_tree_difference| * |$bits_tree_revdifference| |$bits_tree_xor| |$bits_tree_population| * |$bits_tree_population_range| |$bits_tree_ffs| |$bits_tree_ffc| * |$bits_tree_ffs_range| |$bits_tree_ffc_range| * * int bits_tree_is_member (alloc_limits lim, * struct bits_tree_rule * rule, * bits_tree b, * int n); * int bits_tree_is_equal (alloc_limits lim, * struct bits_tree_rule * rule, * bits_tree a, bits_tree b); * int bits_tree_is_subset (alloc_limits lim, * struct bits_tree_rule * rule, * bits_tree a, * bits_tree b); * int bits_tree_is_empty (alloc_limits lim, * struct bits_tree_rule * rule, * bits_tree a); * int bits_tree_is_full (alloc_limits lim, * struct bits_tree_rule * rule, * bits_tree a); * int bits_tree_is_empty_range (alloc_limits lim, * struct bits_tree_rule * rule, * bits_tree a, * int from, * int to); * int bits_tree_is_full_range (alloc_limits lim, * struct bits_tree_rule * rule, * bits_tree a, * int from, * int to); * int bits_tree_adjoin (alloc_limits lim, * struct bits_tree_rule * rule, * bits_tree b, * int n); * int bits_tree_remove (alloc_limits lim, * struct bits_tree_rule * rule, * bits_tree b, int n); * int bits_tree_toggle (alloc_limits lim, * struct bits_tree_rule * rule, * bits_tree b, * int n); * void bits_tree_clear (alloc_limits lim, * struct bits_tree_rule * rule, * bits_tree b); * void bits_tree_fill (alloc_limits lim, * struct bits_tree_rule * rule, * bits_tree b); * int bits_tree_clear_range (alloc_limits lim, * struct bits_tree_rule * rule, * bits_tree b, * int from, * int to); * int bits_tree_fill_range (alloc_limits lim, * struct bits_tree_rule * rule, * bits_tree b, * int from, * int to); * void bits_tree_complement (alloc_limits lim, * struct bits_tree_rule * rule, * bits_tree b); * int bits_tree_assign (alloc_limits lim, * struct bits_tree_rule * rule, * bits_tree a, * bits_tree b); * int bits_tree_union (alloc_limits lim, * struct bits_tree_rule * rule, * bits_tree a, * bits_tree b); * int bits_tree_intersection (alloc_limits lim, * struct bits_tree_rule * rule, * bits_tree a, * bits_tree b); * int bits_tree_difference (alloc_limits lim, * struct bits_tree_rule * rule, * bits_tree a, * bits_tree b); * int bits_tree_revdifference (alloc_limits lim, * struct bits_tree_rule * rule, * bits_tree a, * bits_tree b); * int bits_tree_xor (alloc_limits lim, * struct bits_tree_rule * rule, * bits_tree a, * bits_tree b); * int bits_tree_population (alloc_limits lim, * struct bits_tree_rule * rule, * bits_tree a); * int bits_tree_population_range (alloc_limits lim, * struct bits_tree_rule * rule, * bits_tree a, int from, int to); * int bits_tree_ffs (alloc_limits lim, * struct bits_tree_rule * rule, * bits_tree b); * int bits_tree_ffc (alloc_limits lim, * struct bits_tree_rule * rule, * bits_tree b); * int bits_tree_ffs_range (alloc_limits lim, * struct bits_tree_rule * rule, * bits_tree b, * int from, * int to); * int bits_tree_ffc_range (alloc_limits lim, * struct bits_tree_rule * rule, * bits_tree b, * int from, * int to); * * Each function performs the same operation as the corresponding * `bitset_' function (replace `bits_tree' with `bitset_'.) * For documentation, see xref:"Flat Bitsets". For that reason, * the `bits_tree_' functions are not individually documented. * * Each `bits_tree' function takes two initial parameters, `lim' and `rule'. * * `lim' describes allocation limits that apply to the bitset tree(s) * being operated upon. For more information about allocation limits, * see xref:"Allocation With Limitations". * * `rule' describes the branching structure of the bitset trees. * See xref:"Bitset Tree Rules". * * These functions: * * bits_tree_adjoin * bits_tree_remove * bits_tree_toggle * bits_tree_clear * bits_tree_fill * bits_tree_clear_range * bits_tree_fill_range * bits_tree_complement * bits_tree_assign * bits_tree_union * bits_tree_intersection * bits_tree_difference * bits_tree_revdifference * bits_tree_xor * * return a value of type `int'. All of them will sometimes allocate * memory. * * If an allocation fails, these functions return -1 and have * indeterminate side effect on the set being operated upon. * * If all allocations succeed, they return 0 (and have the intended * side effect on the set being operated upon). */ int bits_tree_is_member (alloc_limits lim, struct bits_tree_rule * rule, bits_tree b, int n) { int bs; if (!rule->fanout) { return bitset_is_member ((bitset)b, n); } bs = bits_tree_which_bitset (lim, rule, n); if (((bits_tree *)b)[bs] == bits_tree_full_bitset) return 1; else if (((bits_tree *)b)[bs] == bits_tree_empty_bitset) return 0; else return bits_tree_is_member (lim, rule + 1, ((bits_tree *)b)[bs], bits_tree_which_bit (lim, rule, n)); } static int bits_tree_is_full_bitset (alloc_limits lim, struct bits_tree_rule * rule, bits_tree a) { return ( (a == bits_tree_full_bitset) || ( (a != bits_tree_empty_bitset) && (rule->subset_size == bits_tree_population (lim, rule + 1, a)))); } static int bits_tree_is_empty_bitset (alloc_limits lim, struct bits_tree_rule * rule, bits_tree a) { return ( (a == bits_tree_empty_bitset) || ( (a != bits_tree_full_bitset) && (0 == bits_tree_population (lim, rule + 1, a)))); } int bits_tree_is_equal (alloc_limits lim, struct bits_tree_rule * rule, bits_tree a, bits_tree b) { int x; if (!rule->fanout) { return bitset_is_equal (rule->subset_size, (bitset)a, (bitset)b); } for (x = 0; x < rule->fanout; ++x) { if (((bits_tree *)a)[x] == bits_tree_full_bitset) { if (!bits_tree_is_full_bitset (lim, rule, ((bits_tree *)b)[x])) return 0; } else if (((bits_tree *)a)[x] == bits_tree_empty_bitset) { if (!bits_tree_is_empty_bitset (lim, rule, ((bits_tree *)b)[x])) return 0; } else if (((bits_tree *)b)[x] == bits_tree_full_bitset) { if (!bits_tree_is_full_bitset (lim, rule, ((bits_tree *)a)[x])) return 0; } else if (((bits_tree *)b)[x] == bits_tree_empty_bitset) { if (!bits_tree_is_empty_bitset (lim, rule, ((bits_tree *)a)[x])) return 0; } else if (!bits_tree_is_equal (lim, rule + 1, ((bits_tree *)a)[x], ((bits_tree *)b)[x])) return 0; } return 1; } int bits_tree_is_subset (alloc_limits lim, struct bits_tree_rule * rule, bits_tree a, bits_tree b) { int x; if (!rule->fanout) { return bitset_is_subset (rule->subset_size, (bitset)a, (bitset)b); } for (x = 0; x < rule->fanout; ++x) { if (((bits_tree *)a)[x] == bits_tree_full_bitset) continue; else if (((bits_tree *)a)[x] == bits_tree_empty_bitset) { if (!bits_tree_is_empty_bitset (lim, rule, ((bits_tree *)b)[x])) return 0; } else if (((bits_tree *)b)[x] == bits_tree_full_bitset) return 0; else if (((bits_tree *)b)[x] == bits_tree_empty_bitset) continue; else if (!bits_tree_is_subset (lim, rule + 1, ((bits_tree *)a)[x], ((bits_tree *)b)[x])) return 0; } return 1; } int bits_tree_is_empty (alloc_limits lim, struct bits_tree_rule * rule, bits_tree a) { int x; if (!rule->fanout) { return bitset_is_empty (rule->subset_size, (bitset)a); } for (x = 0; x < rule->fanout; ++x) { if (!bits_tree_is_empty_bitset (lim, rule, ((bits_tree *)a)[x])) return 0; } return 1; } int bits_tree_is_full (alloc_limits lim, struct bits_tree_rule * rule, bits_tree a) { int x; if (!rule->fanout) { return bitset_is_full (rule->subset_size, (bitset)a); } for (x = 0; x < rule->fanout; ++x) { if (!bits_tree_is_full_bitset (lim, rule, ((bits_tree *)a)[x])) return 0; } return 1; } int bits_tree_is_empty_range (alloc_limits lim, struct bits_tree_rule * rule, bits_tree a, int from, int to) { int first_bs; int first_bit; int last_bs; int last_bit; if (!rule->fanout) { return bitset_is_empty_range ((bitset)a, from, to); } if (to <= from) return 1; first_bs = bits_tree_which_bitset (lim, rule, from); first_bit = bits_tree_which_bit (lim, rule, from); last_bs = bits_tree_which_bitset (lim, rule, to); last_bit = bits_tree_which_bit (lim, rule, to); if (first_bs == last_bs) { if (((bits_tree *)a)[first_bs] == bits_tree_full_bitset) return 0; if (((bits_tree *)a)[first_bs] == bits_tree_empty_bitset) return 1; return bits_tree_is_empty_range (lim, rule + 1, ((bits_tree *)a)[first_bs], first_bit, last_bit); } else { int x; if ( (((bits_tree *)a)[first_bs] == bits_tree_full_bitset) || ( (((bits_tree *)a)[first_bs] != bits_tree_empty_bitset) && !bits_tree_is_empty_range (lim, rule + 1, ((bits_tree *)a)[first_bs], first_bit, rule->subset_size))) return 0; if ( last_bit && ((((bits_tree *)a)[last_bs] == bits_tree_full_bitset) || ( (((bits_tree *)a)[last_bs] != bits_tree_empty_bitset) && !bits_tree_is_empty_range (lim, rule + 1, ((bits_tree *)a)[last_bs], 0, last_bit)))) return 0; for (x = first_bs + 1; x < last_bs; ++x) { if (!bits_tree_is_empty_bitset (lim, rule, ((bits_tree *)a)[x])) return 0; } return 1; } } int bits_tree_is_full_range (alloc_limits lim, struct bits_tree_rule * rule, bits_tree a, int from, int to) { int first_bs; int first_bit; int last_bs; int last_bit; if (!rule->fanout) { return bitset_is_full_range ((bitset)a, from, to); } if (to <= from) return 1; first_bs = bits_tree_which_bitset (lim, rule, from); first_bit = bits_tree_which_bit (lim, rule, from); last_bs = bits_tree_which_bitset (lim, rule, to); last_bit = bits_tree_which_bit (lim, rule, to); if (first_bs == last_bs) { if (((bits_tree *)a)[first_bs] == bits_tree_full_bitset) return 1; if (((bits_tree *)a)[first_bs] == bits_tree_empty_bitset) return 0; return bits_tree_is_full_range (lim, rule + 1, ((bits_tree *)a)[first_bs], first_bit, last_bit); } else { int x; if ( (((bits_tree *)a)[first_bs] == bits_tree_empty_bitset) || ( (((bits_tree *)a)[first_bs] != bits_tree_full_bitset) && !bits_tree_is_full_range (lim, rule + 1, ((bits_tree *)a)[first_bs], first_bit, rule->subset_size))) return 0; if ( last_bit && ((((bits_tree *)a)[last_bs] == bits_tree_empty_bitset) || ( (((bits_tree *)a)[last_bs] != bits_tree_full_bitset) && !bits_tree_is_full_range (lim, rule + 1, ((bits_tree *)a)[last_bs], 0, last_bit)))) return 0; for (x = first_bs + 1; x < last_bs; ++x) { if (!bits_tree_is_full_bitset (lim, rule, ((bits_tree *)a)[x])) return 0; } return 1; } } int bits_tree_adjoin (alloc_limits lim, struct bits_tree_rule * rule, bits_tree b, int n) { int bs; if (!rule->fanout) { bitset_adjoin ((bitset)b, n); return 0; } bs = bits_tree_which_bitset (lim, rule, n); if (((bits_tree *)b)[bs] == bits_tree_full_bitset) return 0; if (((bits_tree *)b)[bs] == bits_tree_empty_bitset) { ((bits_tree *)b)[bs] = bits_tree_alloc (lim, rule + 1); if (!((bits_tree *)b)[bs]) { ((bits_tree *)b)[bs] = bits_tree_empty_bitset; return -1; } } return bits_tree_adjoin (lim, rule + 1, ((bits_tree *)b)[bs], bits_tree_which_bit (lim, rule, n)); } int bits_tree_remove (alloc_limits lim, struct bits_tree_rule * rule, bits_tree b, int n) { int bs; if (!rule->fanout) { bitset_remove ((bitset)b, n); return 0; } bs = bits_tree_which_bitset (lim, rule, n); if (((bits_tree *)b)[bs] == bits_tree_empty_bitset) return 0; if (((bits_tree *)b)[bs] == bits_tree_full_bitset) { ((bits_tree *)b)[bs] = bits_tree_alloc (lim, rule + 1); if (!((bits_tree *)b)[bs]) { ((bits_tree *)b)[bs] = bits_tree_full_bitset; return -1; } bits_tree_fill (lim, rule + 1, ((bits_tree *)b)[bs]); } return bits_tree_remove (lim, rule + 1, ((bits_tree *)b)[bs], bits_tree_which_bit (lim, rule, n)); } int bits_tree_toggle (alloc_limits lim, struct bits_tree_rule * rule, bits_tree b, int n) { int bs; if (!rule->fanout) { bitset_toggle ((bitset)b, n); return 0; } bs = bits_tree_which_bitset (lim, rule, n); if (((bits_tree *)b)[bs] == bits_tree_empty_bitset) { ((bits_tree *)b)[bs] = bits_tree_alloc (lim, rule + 1); if (!((bits_tree *)b)[bs]) { ((bits_tree *)b)[bs] = bits_tree_empty_bitset; return -1; } } else if (((bits_tree *)b)[bs] == bits_tree_full_bitset) { ((bits_tree *)b)[bs] = bits_tree_alloc (lim, rule + 1); if (!((bits_tree *)b)[bs]) { ((bits_tree *)b)[bs] = bits_tree_full_bitset; return -1; } bits_tree_fill (lim, rule + 1, ((bits_tree *)b)[bs]); } return bits_tree_toggle (lim, rule + 1, ((bits_tree *)b)[bs], bits_tree_which_bit (lim, rule, n)); } void bits_tree_clear (alloc_limits lim, struct bits_tree_rule * rule, bits_tree b) { int x; if (!rule->fanout) { bitset_clear (rule->subset_size, (bitset)b); return; } for (x = 0; x < rule->fanout; ++x) { if (((bits_tree *)b)[x] == bits_tree_full_bitset) ((bits_tree *)b)[x] = bits_tree_empty_bitset; else if (((bits_tree *)b)[x] != bits_tree_empty_bitset) { bits_tree_free (lim, rule + 1, ((bits_tree *)b)[x]); ((bits_tree *)b)[x] = bits_tree_empty_bitset; } } } void bits_tree_fill (alloc_limits lim, struct bits_tree_rule * rule, bits_tree b) { int x; if (!rule->fanout) { bitset_fill (rule->subset_size, (bitset)b); return; } for (x = 0; x < rule->fanout; ++x) { if (((bits_tree *)b)[x] == bits_tree_empty_bitset) ((bits_tree *)b)[x] = bits_tree_full_bitset; else if (((bits_tree *)b)[x] != bits_tree_full_bitset) { bits_tree_free (lim, rule + 1, ((bits_tree *)b)[x]); ((bits_tree *)b)[x] = bits_tree_full_bitset; } } } int bits_tree_clear_range (alloc_limits lim, struct bits_tree_rule * rule, bits_tree b, int from, int to) { int first_bs; int first_bit; int last_bs; int last_bit; if (!rule->fanout) { bitset_clear_range ((bitset)b, from, to); return 0; } if (to <= from) return 0; first_bs = bits_tree_which_bitset (lim, rule, from); first_bit = bits_tree_which_bit (lim, rule, from); last_bs = bits_tree_which_bitset (lim, rule, to); last_bit = bits_tree_which_bit (lim, rule, to); if (first_bs == last_bs) { if (((bits_tree *)b)[first_bs] == bits_tree_empty_bitset) return 0; if (((bits_tree *)b)[first_bs] == bits_tree_full_bitset) { ((bits_tree *)b)[first_bs] = bits_tree_alloc (lim, rule + 1); if (!((bits_tree *)b)[first_bs]) { ((bits_tree *)b)[first_bs] = bits_tree_full_bitset; return -1; } bits_tree_fill (lim, rule + 1, ((bits_tree *)b)[first_bs]); } return bits_tree_clear_range (lim, rule + 1, ((bits_tree *)b)[first_bs], first_bit, last_bit); } else { int x; if (((bits_tree *)b)[first_bs] != bits_tree_empty_bitset) { if (((bits_tree *)b)[first_bs] == bits_tree_full_bitset) { ((bits_tree *)b)[first_bs] = bits_tree_alloc (lim, rule + 1); if (!((bits_tree *)b)[first_bs]) { ((bits_tree *)b)[first_bs] = bits_tree_full_bitset; return -1; } bits_tree_fill (lim, rule + 1, ((bits_tree *)b)[first_bs]); } if (bits_tree_clear_range (lim, rule + 1, ((bits_tree *)b)[first_bs], first_bit, rule->subset_size)) return -1; } if (last_bit) { if (((bits_tree *)b)[last_bs] != bits_tree_empty_bitset) { if (((bits_tree *)b)[last_bs] == bits_tree_full_bitset) { ((bits_tree *)b)[last_bs] = bits_tree_alloc (lim, rule + 1); if (!((bits_tree *)b)[last_bs]) { ((bits_tree *)b)[last_bs] = bits_tree_full_bitset; return -1; } bits_tree_fill (lim, rule + 1, ((bits_tree *)b)[last_bs]); } if (bits_tree_clear_range (lim, rule + 1, ((bits_tree *)b)[last_bs], 0, last_bit)) return -1; } } for (x = first_bs + 1; x < last_bs; ++x) { if (((bits_tree *)b)[x] == bits_tree_empty_bitset) continue; if (((bits_tree *)b)[x] != bits_tree_full_bitset) bits_tree_free (lim, rule + 1, ((bits_tree *)b)[x]); ((bits_tree *)b)[x] = bits_tree_empty_bitset; } return 0; } } int bits_tree_fill_range (alloc_limits lim, struct bits_tree_rule * rule, bits_tree b, int from, int to) { int first_bs; int first_bit; int last_bs; int last_bit; if (!rule->fanout) { bitset_fill_range ((bitset)b, from, to); return 0; } if (to <= from) return 0; first_bs = bits_tree_which_bitset (lim, rule, from); first_bit = bits_tree_which_bit (lim, rule, from); last_bs = bits_tree_which_bitset (lim, rule, to); last_bit = bits_tree_which_bit (lim, rule, to); if (first_bs == last_bs) { if (((bits_tree *)b)[first_bs] == bits_tree_full_bitset) return 0; if (((bits_tree *)b)[first_bs] == bits_tree_empty_bitset) { ((bits_tree *)b)[first_bs] = bits_tree_alloc (lim, rule + 1); if (!((bits_tree *)b)[first_bs]) { ((bits_tree *)b)[first_bs] = bits_tree_empty_bitset; return -1; } } return bits_tree_fill_range (lim, rule + 1, ((bits_tree *)b)[first_bs], first_bit, last_bit); } else { int x; if (((bits_tree *)b)[first_bs] != bits_tree_full_bitset) { if (((bits_tree *)b)[first_bs] == bits_tree_empty_bitset) { ((bits_tree *)b)[first_bs] = bits_tree_alloc (lim, rule + 1); if (!((bits_tree *)b)[first_bs]) { ((bits_tree *)b)[first_bs] = bits_tree_full_bitset; return -1; } } if (bits_tree_fill_range (lim, rule + 1, ((bits_tree *)b)[first_bs], first_bit, rule->subset_size)) return -1; } if (last_bit) { if (((bits_tree *)b)[last_bs] != bits_tree_full_bitset) { if (((bits_tree *)b)[last_bs] == bits_tree_empty_bitset) { ((bits_tree *)b)[last_bs] = bits_tree_alloc (lim, rule + 1); if (!((bits_tree *)b)[last_bs]) { ((bits_tree *)b)[last_bs] = bits_tree_empty_bitset; return -1; } } if (bits_tree_fill_range (lim, rule + 1, ((bits_tree *)b)[last_bs], 0, last_bit)) return -1; } } for (x = first_bs + 1; x < last_bs; ++x) { if (((bits_tree *)b)[x] == bits_tree_full_bitset) continue; if (((bits_tree *)b)[x] != bits_tree_empty_bitset) bits_tree_free (lim, rule + 1, ((bits_tree *)b)[x]); ((bits_tree *)b)[x] = bits_tree_full_bitset; } return 0; } } void bits_tree_complement (alloc_limits lim, struct bits_tree_rule * rule, bits_tree b) { int x; if (!rule->fanout) { bitset_complement (rule->subset_size, (bitset)b); return; } for (x = 0; x < rule->fanout; ++x) { if (((bits_tree *)b)[x] == bits_tree_empty_bitset) ((bits_tree *)b)[x] = bits_tree_full_bitset; else if (((bits_tree *)b)[x] == bits_tree_full_bitset) ((bits_tree *)b)[x] = bits_tree_empty_bitset; else bits_tree_complement (lim, rule + 1, ((bits_tree *)b)[x]); } } int bits_tree_assign (alloc_limits lim, struct bits_tree_rule * rule, bits_tree a, bits_tree b) { int x; if (!rule->fanout) { bitset_assign (rule->subset_size, (bitset)a, (bitset)b); return 0; } for (x = 0; x < rule->fanout; ++x) { if ( (((bits_tree *)b)[x] == bits_tree_empty_bitset) || (((bits_tree *)b)[x] == bits_tree_full_bitset)) { if ( (((bits_tree *)a)[x] != bits_tree_empty_bitset) && (((bits_tree *)a)[x] != bits_tree_full_bitset)) bits_tree_free (lim, rule + 1, ((bits_tree *)a)[x]); ((bits_tree *)a)[x] = ((bits_tree *)b)[x]; } else { if ( (((bits_tree *)a)[x] == bits_tree_empty_bitset) || (((bits_tree *)a)[x] == bits_tree_full_bitset)) { ((bits_tree *)a)[x] = bits_tree_alloc (lim, rule + 1); if (!((bits_tree *)a)[x]) { ((bits_tree *)a)[x] = bits_tree_empty_bitset; return -1; } } if (bits_tree_assign (lim, rule + 1, ((bits_tree *)a)[x], ((bits_tree *)b)[x])) return -1; } } return 0; } int bits_tree_union (alloc_limits lim, struct bits_tree_rule * rule, bits_tree a, bits_tree b) { int x; if (!rule->fanout) { bitset_union (rule->subset_size, (bitset)a, (bitset)b); return 0; } for (x = 0; x < rule->fanout; ++x) { if (((bits_tree *)b)[x] == bits_tree_full_bitset) { if ( (((bits_tree *)a)[x] != bits_tree_empty_bitset) && (((bits_tree *)a)[x] != bits_tree_full_bitset)) bits_tree_free (lim, rule + 1, ((bits_tree *)a)[x]); ((bits_tree *)a)[x] = bits_tree_full_bitset; } else if (((bits_tree *)b)[x] == bits_tree_empty_bitset) continue; else if (((bits_tree *)a)[x] == bits_tree_full_bitset) continue; else if (((bits_tree *)a)[x] == bits_tree_empty_bitset) { ((bits_tree *)a)[x] = bits_tree_dup (lim, rule + 1, ((bits_tree *)b)[x]); if (!((bits_tree *)a)[x]) { ((bits_tree *)a)[x] = bits_tree_empty_bitset; return -1; } } else if (bits_tree_union (lim, rule + 1, ((bits_tree *)a)[x], ((bits_tree *)b)[x])) return -1; } return 0; } int bits_tree_intersection (alloc_limits lim, struct bits_tree_rule * rule, bits_tree a, bits_tree b) { int x; if (!rule->fanout) { bitset_intersection (rule->subset_size, (bitset)a, (bitset)b); return 0; } for (x = 0; x < rule->fanout; ++x) { if (((bits_tree *)b)[x] == bits_tree_empty_bitset) { if ( (((bits_tree *)a)[x] != bits_tree_empty_bitset) && (((bits_tree *)a)[x] != bits_tree_full_bitset)) bits_tree_free (lim, rule + 1, ((bits_tree *)a)[x]); ((bits_tree *)a)[x] = bits_tree_empty_bitset; } else if (((bits_tree *)b)[x] == bits_tree_full_bitset) continue; else if (((bits_tree *)a)[x] == bits_tree_empty_bitset) continue; else if (((bits_tree *)a)[x] == bits_tree_full_bitset) { ((bits_tree *)a)[x] = bits_tree_dup (lim, rule + 1, ((bits_tree *)b)[x]); if (!((bits_tree *)a)[x]) { ((bits_tree *)a)[x] = bits_tree_full_bitset; return -1; } } else if (bits_tree_intersection (lim, rule + 1, ((bits_tree *)a)[x], ((bits_tree *)b)[x])) return -1; } return 0; } int bits_tree_difference (alloc_limits lim, struct bits_tree_rule * rule, bits_tree a, bits_tree b) { int x; if (!rule->fanout) { bitset_difference (rule->subset_size, (bitset)a, (bitset)b); return 0; } for (x = 0; x < rule->fanout; ++x) { if (((bits_tree *)b)[x] == bits_tree_full_bitset) { if ( (((bits_tree *)a)[x] != bits_tree_empty_bitset) && (((bits_tree *)a)[x] != bits_tree_full_bitset)) bits_tree_free (lim, rule + 1, ((bits_tree *)a)[x]); ((bits_tree *)a)[x] = bits_tree_empty_bitset; } else if (((bits_tree *)b)[x] == bits_tree_empty_bitset) continue; else if (((bits_tree *)a)[x] == bits_tree_empty_bitset) continue; else if (((bits_tree *)a)[x] == bits_tree_full_bitset) { ((bits_tree *)a)[x] = bits_tree_dup (lim, rule + 1, ((bits_tree *)b)[x]); if (!((bits_tree *)a)[x]) { ((bits_tree *)a)[x] = bits_tree_full_bitset; return -1; } bits_tree_complement (lim, rule + 1, ((bits_tree *)a)[x]); } else if (bits_tree_difference (lim, rule + 1, ((bits_tree *)a)[x], ((bits_tree *)b)[x])) return -1; } return 0; } int bits_tree_revdifference (alloc_limits lim, struct bits_tree_rule * rule, bits_tree a, bits_tree b) { int x; if (!rule->fanout) { bitset_revdifference (rule->subset_size, (bitset)a, (bitset)b); return 0; } for (x = 0; x < rule->fanout; ++x) { if (((bits_tree *)a)[x] == bits_tree_full_bitset) ((bits_tree *)a)[x] = bits_tree_empty_bitset; else if (((bits_tree *)a)[x] == bits_tree_empty_bitset) { if (((bits_tree *)b)[x] == bits_tree_empty_bitset) continue; else if (((bits_tree *)b)[x] == bits_tree_full_bitset) ((bits_tree *)a)[x] = ((bits_tree *)b)[x]; else { ((bits_tree *)a)[x] = bits_tree_dup (lim, rule + 1, ((bits_tree *)b)[x]); if (!((bits_tree *)a)[x]) { ((bits_tree *)a)[x] = bits_tree_full_bitset; return -1; } } } else if (((bits_tree *)b)[x] == bits_tree_full_bitset) bits_tree_complement (lim, rule + 1, ((bits_tree *)a)[x]); else if (((bits_tree *)b)[x] == bits_tree_empty_bitset) { if ( (((bits_tree *)a)[x] != bits_tree_empty_bitset) && (((bits_tree *)a)[x] != bits_tree_full_bitset)) bits_tree_free (lim, rule + 1, ((bits_tree *)a)[x]); ((bits_tree *)a)[x] = bits_tree_empty_bitset; } else { if (bits_tree_revdifference (lim, rule + 1, ((bits_tree *)a)[x], ((bits_tree *)b)[x])) return -1; } } return 0; } int bits_tree_xor (alloc_limits lim, struct bits_tree_rule * rule, bits_tree a, bits_tree b) { int x; if (!rule->fanout) { bitset_xor (rule->subset_size, (bitset)a, (bitset)b); return 0; } for (x = 0; x < rule->fanout; ++x) { if (((bits_tree *)b)[x] == bits_tree_empty_bitset) continue; else if (((bits_tree *)b)[x] == bits_tree_full_bitset) { if (((bits_tree *)a)[x] == bits_tree_empty_bitset) ((bits_tree *)a)[x] = bits_tree_full_bitset; else if (((bits_tree *)a)[x] == bits_tree_full_bitset) ((bits_tree *)a)[x] = bits_tree_empty_bitset; else bits_tree_complement (lim, rule + 1, ((bits_tree *)a)[x]); } else if (((bits_tree *)a)[x] == bits_tree_empty_bitset) { if ( (((bits_tree *)b)[x] == bits_tree_empty_bitset) || (((bits_tree *)b)[x] == bits_tree_full_bitset)) ((bits_tree *)a)[x] = ((bits_tree *)b)[x]; else { ((bits_tree *)a)[x] = bits_tree_dup (lim, rule + 1, ((bits_tree *)b)[x]); if (!((bits_tree *)a)[x]) { ((bits_tree *)a)[x] = bits_tree_empty_bitset; return -1; } } } else if (((bits_tree *)a)[x] == bits_tree_full_bitset) { ((bits_tree *)a)[x] = bits_tree_dup (lim, rule + 1, ((bits_tree *)b)[x]); if (!((bits_tree *)a)[x]) { ((bits_tree *)a)[x] = bits_tree_full_bitset; return -1; } bits_tree_complement (lim, rule + 1, ((bits_tree *)a)[x]); } else { if (bits_tree_xor (lim, rule + 1, ((bits_tree *)a)[x], ((bits_tree *)b)[x])) return -1; } } return 0; } int bits_tree_population (alloc_limits lim, struct bits_tree_rule * rule, bits_tree a) { int x; int pop; if (!rule->fanout) { return bitset_population (rule->subset_size, (bitset)a); } pop = 0; for (x = 0; x < rule->fanout; ++x) { if (((bits_tree *)a)[x] == bits_tree_full_bitset) pop += rule->subset_size; else if (((bits_tree *)a)[x] == bits_tree_empty_bitset) continue; else pop += bits_tree_population (lim, rule + 1, ((bits_tree *)a)[x]); } return pop; } int bits_tree_population_range (alloc_limits lim, struct bits_tree_rule * rule, bits_tree a, int from, int to) { int first_bs; int first_bit; int last_bs; int last_bit; if (!rule->fanout) { return bitset_population_range ((bitset)a, from, to); } if (to <= from) return 0; first_bs = bits_tree_which_bitset (lim, rule, from); first_bit = bits_tree_which_bit (lim, rule, from); last_bs = bits_tree_which_bitset (lim, rule, to); last_bit = bits_tree_which_bit (lim, rule, to); if (first_bs == last_bs) { if (((bits_tree *)a)[first_bs] == bits_tree_full_bitset) return last_bit - first_bit; if (((bits_tree *)a)[first_bs] == bits_tree_empty_bitset) return 0; return bits_tree_population_range (lim, rule + 1, ((bits_tree *)a)[first_bs], first_bit, last_bit); } else { int pop; int x; if (bits_tree_is_empty_bitset (lim, rule, ((bits_tree *)a)[first_bs])) pop = 0; else if (bits_tree_is_full_bitset (lim, rule, ((bits_tree *)a)[first_bs])) pop = rule->subset_size - first_bit; else pop = bits_tree_population_range (lim, rule + 1, ((bits_tree *)a)[first_bs], first_bit, rule->subset_size); if (last_bit) { if (bits_tree_is_empty_bitset (lim, rule, ((bits_tree *)a)[last_bs])) pop += 0; else if (bits_tree_is_full_bitset (lim, rule, ((bits_tree *)a)[last_bs])) pop += last_bit; else pop += bits_tree_population_range (lim, rule + 1, ((bits_tree *)a)[last_bs], 0, last_bit); } for (x = first_bs + 1; x < last_bs; ++x) { if (((bits_tree *)a)[x] == bits_tree_empty_bitset) pop += 0; else if (((bits_tree *)a)[x] == bits_tree_full_bitset) pop += rule->subset_size; else pop += bits_tree_population (lim, rule + 1, ((bits_tree *)a)[x]); } return pop; } } int bits_tree_ffs (alloc_limits lim, struct bits_tree_rule * rule, bits_tree b) { int x; int offset; if (!rule->fanout) { return bitset_ffs (rule->subset_size, (bitset)b); } for (x = 0, offset = 0; x < rule->fanout; ++x, offset += rule->subset_size) { int fs; if (((bits_tree *)b)[x] == bits_tree_empty_bitset) continue; else if (((bits_tree *)b)[x] == bits_tree_full_bitset) return offset; else { fs = bits_tree_ffs (lim, rule + 1, ((bits_tree *)b)[x]); if (fs >= 0) return fs + offset; } } return -1; } int bits_tree_ffc (alloc_limits lim, struct bits_tree_rule * rule, bits_tree b) { int x; int offset; if (!rule->fanout) { return bitset_ffc (rule->subset_size, (bitset)b); } for (x = 0, offset = 0; x < rule->fanout; ++x, offset += rule->subset_size) { int fc; if (((bits_tree *)b)[x] == bits_tree_full_bitset) continue; else if (((bits_tree *)b)[x] == bits_tree_empty_bitset) return offset; else { fc = bits_tree_ffc (lim, rule + 1, ((bits_tree *)b)[x]); if (fc >= 0) return fc + offset; } } return -1; } int bits_tree_ffs_range (alloc_limits lim, struct bits_tree_rule * rule, bits_tree b, int from, int to) { int first_bs; int first_bit; int last_bs; int last_bit; if (!rule->fanout) { return bitset_ffs_range ((bitset)b, from, to); } if (to <= from) return -1; first_bs = bits_tree_which_bitset (lim, rule, from); first_bit = bits_tree_which_bit (lim, rule, from); last_bs = bits_tree_which_bitset (lim, rule, to); last_bit = bits_tree_which_bit (lim, rule, to); if (first_bs == last_bs) { int fs; if (((bits_tree *)b)[first_bs] == bits_tree_empty_bitset) return -1; if (((bits_tree *)b)[first_bs] == bits_tree_full_bitset) return from; fs = bits_tree_ffs_range (lim, rule + 1, ((bits_tree *)b)[first_bs], first_bit, last_bit); if (fs < 0) return -1; else return (first_bs * rule->subset_size) + fs; } else { int x; if (((bits_tree *)b)[first_bs] != bits_tree_empty_bitset) { int fs; if (((bits_tree *)b)[first_bs] == bits_tree_full_bitset) return from; fs = bits_tree_ffs_range (lim, rule + 1, ((bits_tree *)b)[first_bs], first_bit, rule->subset_size); if (fs >= 0) return (first_bs * rule->subset_size) + fs; } for (x = first_bs + 1; x < last_bs; ++x) { int fs; if (((bits_tree *)b)[x] == bits_tree_empty_bitset) continue; if (((bits_tree *)b)[x] == bits_tree_full_bitset) return (x * rule->subset_size); fs = bits_tree_ffs (lim, rule + 1, ((bits_tree *)b)[x]); if (fs >= 0) return (x * rule->subset_size) + fs; } if (last_bit) { if (((bits_tree *)b)[last_bs] != bits_tree_empty_bitset) { if (((bits_tree *)b)[last_bs] == bits_tree_full_bitset) return (last_bs * rule->subset_size); else { int fs; fs = bits_tree_ffs_range (lim, rule + 1, ((bits_tree *)b)[last_bs], 0, last_bit); if (fs >= 0) return (last_bs * rule->subset_size) + fs; } } } return -1; } } int bits_tree_ffc_range (alloc_limits lim, struct bits_tree_rule * rule, bits_tree b, int from, int to) { int first_bs; int first_bit; int last_bs; int last_bit; if (!rule->fanout) { return bitset_ffc_range ((bitset)b, from, to); } if (to <= from) return -1; first_bs = bits_tree_which_bitset (lim, rule, from); first_bit = bits_tree_which_bit (lim, rule, from); last_bs = bits_tree_which_bitset (lim, rule, to); last_bit = bits_tree_which_bit (lim, rule, to); if (first_bs == last_bs) { int fs; if (((bits_tree *)b)[first_bs] == bits_tree_full_bitset) return -1; if (((bits_tree *)b)[first_bs] == bits_tree_empty_bitset) return from; fs = bits_tree_ffc_range (lim, rule + 1, ((bits_tree *)b)[first_bs], first_bit, last_bit); if (fs < 0) return -1; else return (first_bs * rule->subset_size) + fs; } else { int x; if (((bits_tree *)b)[first_bs] != bits_tree_full_bitset) { int fs; if (((bits_tree *)b)[first_bs] == bits_tree_empty_bitset) return from; fs = bits_tree_ffc_range (lim, rule + 1, ((bits_tree *)b)[first_bs], first_bit, rule->subset_size); if (fs >= 0) return (first_bs * rule->subset_size) + fs; } for (x = first_bs + 1; x < last_bs; ++x) { int fs; if (((bits_tree *)b)[x] == bits_tree_full_bitset) continue; if (((bits_tree *)b)[x] == bits_tree_empty_bitset) return (x * rule->subset_size); fs = bits_tree_ffc (lim, rule + 1, ((bits_tree *)b)[x]); if (fs >= 0) return (x * rule->subset_size) + fs; } if (last_bit) { if (((bits_tree *)b)[last_bs] != bits_tree_full_bitset) { if (((bits_tree *)b)[last_bs] == bits_tree_empty_bitset) return (last_bs * rule->subset_size); else { int fs; fs = bits_tree_ffc_range (lim, rule + 1, ((bits_tree *)b)[last_bs], 0, last_bit); if (fs >= 0) return (last_bs * rule->subset_size) + fs; } } } return -1; } } tla-1.3.5+dfsg/src/hackerlab/bitsets/bitsets.doc0000644000175000017500000000310210457621774020272 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:57:14 2001 (bitsets.doc) */ /* bitsets.doc * **************************************************************** * Copyright (C) 2000 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ /************************************************************************ *(h0 "Bitsets") * * The Hackerlab C library provides interfaces for managing several * kinds of bitset. * * The most familiar bitsets are ``flat bitsets'' -- packed arrays of * bits. See xref:"Flat Bitsets". * * ``Bitset trees'' are a space and time efficient representation for * very large bitsets which contain long sub-sequences of all `0' or * all `1' bits. These sets are stored in a tree with ordinary bitsets * for leaf nodes. As an important optimization, homogenous subtrees * (those which are all 1 or 0) are represented by one word -- regardless * of how many bits they contain. See xref:"Bitset Trees". * * ``Shared bitset trees'' are bitset trees augmented with copy-on-write * semantics. See xref:"Shared Bitset Trees". * */ /*(menu) */ /*(include-documentation "bitset.c") */ /*(include-documentation "bitset-tree.c") */ /*(include-documentation "bits.c") */ /*(include-documentation "uni-bits.c") */ /*h1 "Printing Bitsets") * * The functions in this section print C code which compiles to * an initialized bitset. */ /*menu) */ /*include-documentation "bitset-print.c") */ /*include-documentation "bitset-tree-print.c") */ /*include-documentation "bits-print.c") */ tla-1.3.5+dfsg/src/hackerlab/bitsets/bits-print.c0000644000175000017500000000643510457621774020401 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:41:35 2001 (bits-print.c) */ /* bits-print.c - * **************************************************************** * Copyright (C) 2000 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/bugs/panic.h" #include "hackerlab/char/str.h" #include "hackerlab/vu/safe.h" #include "hackerlab/bitsets/bitset-tree-print.h" #include "hackerlab/bitsets/bits-print.h" /************************************************************************ *(h2 "Printing Shared Bitset Trees" * :includes ("hackerlab/bitsets/bits-print.h")) * * |bitset printing (shared bitset trees)| * |printing (shared bitset trees)| * * */ /*(c bits_print) * void bits_print (int fd, * bits set, * t_uchar * name, * t_uchar * stub, * int is_static, * int decls_only, * int as_macro); * * Print C code for an initialized shared bitset tree. * * `fd' -- print output on descriptor `fd'. * * `set' -- the bitset to print. * * `name' -- the variable name for the bitset. * * `stub' -- a variable name prefix for components of the bitset. * * `is_static' -- print a static declaration. * * `decls_only' -- print only a declaration, not the bitset itself. * * `as_macro' -- define `name' as a pre-processor name, not a variable. * * This function calls `panic' if an error occurs. */ void bits_print (int fd, bits set, t_uchar * name, t_uchar * stub, int is_static, int decls_only, int as_macro) { #define MAX_NAME 2048 int name_len; t_uchar struct_name[2 * MAX_NAME]; t_uchar rule_name[2 * MAX_NAME]; t_uchar stree_name[2 * MAX_NAME]; name_len = str_length (name); if (name_len > MAX_NAME) panic ("name too long in bits_tree_print"); if (decls_only) { safe_printfmt (fd, "%s bits %s;\n", (is_static ? "static" : "extern"), name); return; } bits_compact (set); bits_tree_print (fd, set->lim, set->rule, set->stree->tree, stub, stub, 1, 0, 1); str_cpy (rule_name, stub); str_cat (rule_name, "_rule"); safe_printfmt (fd, "static struct bits_tree_rule %s[] =\n", rule_name); safe_printfmt (fd, "{\n"); { int x; x = 0; do { safe_printfmt (fd, " {%d, %lu, %lu, %lu},\n", set->rule[x].fanout, (unsigned long)set->rule[x].subset_size, (unsigned long)set->rule[x].subset_shift, (unsigned long)set->rule[x].subset_mask); } while (set->rule[x++].fanout); } safe_printfmt (fd, "};\n\n"); str_cpy (stree_name, stub); str_cat (stree_name, "_stree"); safe_printfmt (fd, "static struct bits_tree_shared %s = { %d, (bits_tree)&%s };\n\n", stree_name, 1, stub); str_cpy (struct_name, stub); str_cat (struct_name, "_bits"); safe_printfmt (fd, "static struct bits %s = \n", struct_name); safe_printfmt (fd, "{\n"); safe_printfmt (fd, " 0,\n"); safe_printfmt (fd, " %s,\n", rule_name); safe_printfmt (fd, " &%s\n", stree_name); safe_printfmt (fd, "};\n\n"); if (!as_macro) safe_printfmt (fd, "%sbits %s = &%s;\n\n", (is_static ? "static " : ""), name, struct_name); else safe_printfmt (fd, "#define %s (&%s)\n\n", name, struct_name); } tla-1.3.5+dfsg/src/hackerlab/bitsets/bitset-print.c0000644000175000017500000000365710457621774020735 0ustar useruser/* bitset-print.c - print a bitset as C source code. * **************************************************************** * Copyright (C) 2000 Thomas Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/vu/safe.h" #include "hackerlab/bitsets/bitset-print.h" /************************************************************************ *(h2 "Printing Flat Bitsets" * :includes ("hackerlab/bitsets/bitset-print.h")) * * |bitset printing (flat bitsets)| * |printing (flat bitsets)| * */ /*(c bitset_print) * void bitset_print (int fd, * bit_t size, * bitset set, * t_uchar * name, * int is_static, * int decls_only); * * Print C code for an initialized bitset. * * `fd' -- print output on descriptor `fd'. * * `size' -- the number of bits in the set. * * `set' -- the bitset to print. * * `name' -- the variable name for the bitset. * * `is_static' -- 1 for a static declaration, 0 otherwise. * * `decls_only' -- print only an `extern' declaration. * * This function calls `panic' if an error occurs. */ void bitset_print (int fd, bit_t size, bitset set, t_uchar * name, int is_static, int decls_only) { int x; int n_subsets; if (decls_only) { safe_printfmt (fd, "extern biset_subset %s[];\n", name); return; } n_subsets = bitset_numb_subsets (size); safe_printfmt (fd, "%sbitset_subset %s[%d] =\n", (is_static ? "static " : ""), name, n_subsets); safe_printfmt (fd, "{\n"); for (x = 0; x < n_subsets - 1; ++x) { safe_printfmt (fd, " 0x%lx,\n", set[x]); } if (bitset_bit_mask (size)) safe_printfmt (fd, " 0x%lx,\n", set[x] & bitset_bit_mask (size)); else safe_printfmt (fd, " 0x%lx,\n", set[x]); safe_printfmt (fd, "};\n"); } tla-1.3.5+dfsg/src/hackerlab/bitsets/bits.c0000644000175000017500000002575410457621774017254 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:41:34 2001 (bits.c) */ /* bits.c - * **************************************************************** * Copyright (C) 2000 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/bitsets/bits.h" /************************************************************************ *(h1 "Shared Bitset Trees" * :includes ("hackerlab/bitsets/bits.h")) * * "Shared bitset trees" are ordinary bitset trees with two differences: * * \1./ The allocation limits that apply to a shared bitset tree are * recorded when the tree is created and do not need to be passed as * parameters to every bitset operation. (For more information about * allocation limits, see xref:"Allocation With Limitations". * * \2./ When a shared bitset tree is copied, very little data is actually * duplicated: the old and the new bitset tree initially share state. * Instead, copying takes place when (and if) either bitset is later * modified. * * Before reading this section, it is a good idea to first understand * the material in xref:"Bitset Trees". */ /************************************************************************ *(h2 "Allocating Shared Bitset Trees") * * * */ /*(c bits_alloc) * bits bits_alloc (alloc_limits lim, struct bits_tree_rule * rule); * * Create a new shared bitset tree, subject to allocation limits `lim', * using branching structure `rule'. * * For more information about allocation limits, see xref:"Allocation * With Limitations". * * For more information about branching structure rules, see * xref:"Bitset Tree Rules". */ bits bits_alloc (alloc_limits lim, struct bits_tree_rule * rule) { bits b; b = (bits)lim_malloc (lim, sizeof (struct bits)); if (!b) return 0; b->lim = lim; b->rule = rule; b->stree = (struct bits_tree_shared *)lim_malloc (lim, sizeof (struct bits_tree_shared)); b->stree->refs = 1; b->stree->tree = bits_tree_alloc (lim, rule); return b; } /*(c bits_free) * void bits_free (bits b); * * Free a previously allocated shared bitset tree. */ void bits_free (bits b) { if (!b) return; --b->stree->refs; if (!b->stree->refs) { bits_tree_free (b->lim, b->rule, b->stree->tree); lim_free (b->lim, (void *)b->stree); } lim_free (b->lim, b); } /*(c bits_dup) * bits bits_dup (bits a); * * Copy a shared bitset tree. * * This operation is inexpensive -- most data is shared between the * two trees until one of the two is modified. * * If set `a' was created with no allocation limits, and allocation * fails, this function does not return. * * If set `a' was created with allocation limits, and allocation * fails, this function returns 0. */ bits bits_dup (bits a) { bits b; b = (bits)lim_malloc (a->lim, sizeof (struct bits)); if (!b) return 0; b->lim = a->lim; b->rule = a->rule; b->stree = a->stree; ++b->stree->refs; return b; } static int bits_cow (bits a) { if (a->stree->refs == 1) return 0; else { struct bits_tree_shared * s; s = (struct bits_tree_shared *)lim_malloc (a->lim, sizeof (struct bits_tree_shared)); if (!s) return -1; s->refs = 1; s->tree = bits_tree_dup (a->lim, a->rule, a->stree->tree); if (!s->tree) { lim_free (a->lim, (void *)s); return -1; } --a->stree->refs; a->stree = s; return 0; } } /*(c bits_compact) * void bits_compact (bits a); * * Optimize a shared bitset tree by compacting homogenous * sub-trees. See xref:"The Bitset Tree Data Structure". * */ void bits_compact (bits a) { bits_tree_compact (a->lim, a->rule, a->stree->tree); } /************************************************************************ *h2 "Accessing Individual Subsets of a Shared Bitset Tree") * * * */ /*c bits_get_subset) * int bits_get_subset (bitset_subset * answer, bits b, int n); * * Return (in `*answer') the `bitset_subet' containing bit `n' of * shared bitset tree `b'. See xref:"bitset_subset". * * If the indicated subset does not exist (because it is part of * a homogenous subtree whose representation has been optimized) * the corresponding subtree is newly allocated. * * If allocation fails, and `b' was created with allocation limits, * return -1. * * If allocation fails, and `b' was created without allocation limits, * this function does not return. * * Otherwise, 0 is returned. * */ int bits_get_subset (bitset_subset * answer, bits b, int n) { return bits_tree_get_subset (answer, b->lim, b->rule, b->stree->tree, n); } /************************************************************************ *(h2 "Operations on Shared Bitset Trees") * * * Each of the operations defined for flat bitsets has a corresponding * operation for shared bitset trees. See xref:"Flat Bitsets". * * The shared bitset tree operations are: * * * |$bits_is_member| |$bits_is_equal| |$bits_is_subset| |$bits_is_empty| |$bits_is_full| * |$bits_is_empty_range| |$bits_is_full_range| |$bits_adjoin| |$bits_remove| * |$bits_toggle| |$bits_clear| |$bits_fill| |$bits_clear_range| |$bits_fill_range| * |$bits_complement| |$bits_assign| |$bits_union| |$bits_intersection| * |$bits_difference| |$bits_revdifference| |$bits_xor| |$bits_population| * |$bits_population_range| |$bits_ffs| |$bits_ffc| |$bits_ffs_range| |$bits_ffc_range| * * int bits_is_member (bits b, int n); * int bits_is_equal (bits a, bits b); * int bits_is_subset (bits a, bits b); * int bits_is_empty (bits a); * int bits_is_full (bits a); * int bits_is_empty_range (bits a, int from, int to); * int bits_is_full_range (bits a, int from, int to); * int bits_adjoin (bits b, int n); * int bits_remove (bits b, int n); * int bits_toggle (bits b, int n); * int bits_clear (bits b); * int bits_fill (bits b); * int bits_clear_range (bits b, int from, int to); * int bits_fill_range (bits b, int from, int to); * int bits_complement (bits b); * int bits_assign (bits a, bits b); * int bits_union (bits a, bits b); * int bits_intersection (bits a, bits b); * int bits_difference (bits a, bits b); * int bits_revdifference (bits a, bits b); * int bits_xor (bits a, bits b); * int bits_population (bits a); * int bits_population_range (bits a, int from, int to); * int bits_ffs (bits b); * int bits_ffc (bits b); * int bits_ffs_range (bits b, int from, int to); * int bits_ffc_range (bits b, int from, int to); * * Each function performs the same operation as the corresponding * `bitset_' function (replace `bits_' with `bitset_'.) * For documentation, see xref:"Flat Bitsets". For that reason, * the `bits_' functions are not individually documented. * * These functions: * * bits_adjoin * bits_remove * bits_toggle * bits_clear * bits_fill * bits_clear_range * bits_fill_range * bits_complement * bits_assign * bits_union * bits_intersection * bits_difference * bits_revdifference * bits_xor * * return a value of type `int'. All of them will sometimes allocate * memory. * * If no allocation limit is being used, and an allocation fails, * these functions do not return. * * If an allocation limit is being used, and an allocation fails, * these functions return -1 and have indeterminate side effect on the * set being operated upon. * * If allocation succeeds, they return 0 (and have the intended side * effect on the set being operated upon). * */ int bits_is_member (bits b, int n) { return bits_tree_is_member (b->lim, b->rule, b->stree->tree, n); } int bits_is_equal (bits a, bits b) { return bits_tree_is_equal (a->lim, a->rule, a->stree->tree, b->stree->tree); } int bits_is_subset (bits a, bits b) { return bits_tree_is_subset (a->lim, a->rule, a->stree->tree, b->stree->tree); } int bits_is_empty (bits a) { return bits_tree_is_empty (a->lim, a->rule, a->stree->tree); } int bits_is_full (bits a) { return bits_tree_is_full (a->lim, a->rule, a->stree->tree); } int bits_is_empty_range (bits a, int from, int to) { return bits_tree_is_empty_range (a->lim, a->rule, a->stree->tree, from, to); } int bits_is_full_range (bits a, int from, int to) { return bits_tree_is_full_range (a->lim, a->rule, a->stree->tree, from, to); } int bits_adjoin (bits b, int n) { if (bits_cow (b)) return -1; return bits_tree_adjoin (b->lim, b->rule, b->stree->tree, n); } int bits_remove (bits b, int n) { if (bits_cow (b)) return -1; return bits_tree_remove (b->lim, b->rule, b->stree->tree, n); } int bits_toggle (bits b, int n) { if (bits_cow (b)) return -1; return bits_tree_toggle (b->lim, b->rule, b->stree->tree, n); } int bits_clear (bits b) { if (bits_cow (b)) return -1; bits_tree_clear (b->lim, b->rule, b->stree->tree); return 0; } int bits_fill (bits b) { if (bits_cow (b)) return -1; bits_tree_fill (b->lim, b->rule, b->stree->tree); return 0; } int bits_clear_range (bits b, int from, int to) { if (bits_cow (b)) return -1; return bits_tree_clear_range (b->lim, b->rule, b->stree->tree, from, to); } int bits_fill_range (bits b, int from, int to) { if (bits_cow (b)) return -1; return bits_tree_fill_range (b->lim, b->rule, b->stree->tree, from, to); } int bits_complement (bits b) { if (bits_cow (b)) return -1; bits_tree_complement (b->lim, b->rule, b->stree->tree); return 0; } int bits_assign (bits a, bits b) { if (bits_cow (b)) return -1; return bits_tree_assign (a->lim, a->rule, a->stree->tree, b->stree->tree); } int bits_union (bits a, bits b) { if (bits_cow (b)) return -1; return bits_tree_union (a->lim, a->rule, a->stree->tree, b->stree->tree); } int bits_intersection (bits a, bits b) { if (bits_cow (b)) return -1; return bits_tree_intersection (a->lim, a->rule, a->stree->tree, b->stree->tree); } int bits_difference (bits a, bits b) { if (bits_cow (b)) return -1; return bits_tree_difference (a->lim, a->rule, a->stree->tree, b->stree->tree); } int bits_revdifference (bits a, bits b) { if (bits_cow (b)) return -1; return bits_tree_revdifference (a->lim, a->rule, a->stree->tree, b->stree->tree); } int bits_xor (bits a, bits b) { if (bits_cow (b)) return -1; return bits_tree_xor (a->lim, a->rule, a->stree->tree, b->stree->tree); } int bits_population (bits a) { return bits_tree_population (a->lim, a->rule, a->stree->tree); } int bits_population_range (bits a, int from, int to) { return bits_tree_population_range (a->lim, a->rule, a->stree->tree, from, to); } int bits_ffs (bits b) { return bits_tree_ffs (b->lim, b->rule, b->stree->tree); } int bits_ffc (bits b) { return bits_tree_ffc (b->lim, b->rule, b->stree->tree); } int bits_ffs_range (bits b, int from, int to) { return bits_tree_ffs_range (b->lim, b->rule, b->stree->tree, from, to); } int bits_ffc_range (bits b, int from, int to) { return bits_tree_ffc_range (b->lim, b->rule, b->stree->tree, from, to); } tla-1.3.5+dfsg/src/hackerlab/dynid/0000755000175000017500000000000010457621774015564 5ustar userusertla-1.3.5+dfsg/src/hackerlab/dynid/dynid.c0000644000175000017500000000554110457621774017044 0ustar useruser/* dynid.c: * **************************************************************** * Copyright (C) 2004 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/mem/mem.h" #include "hackerlab/dynid/dynid.h" /* typedefs */ /* __STDC__ prototypes for static functions */ static int id_key_cmp (void * vkey, void * velt, void * ign); static t_dynid_table * global_table (void); /* declarations */ /* code */ int init_dynid_table (t_dynid_table * dt, alloc_limits limits) { if (!dt) return -1; mem_set0 ((t_uchar *)dt, sizeof (*dt)); if (0 > init_oblist (&dt->id_table, limits, sizeof (t_dynid_record), 0, 0)) return -1; return 0; } void uninit_dynid_table (t_dynid_table * dt, alloc_limits limits) { if (!dt) return; uninit_oblist (&dt->id_table, limits, sizeof (t_dynid_record), 0, 0); mem_set0 ((t_uchar *)dt, sizeof (*dt)); } ssize_t dynid_find (t_dynid_table * dt, alloc_limits limits, void * key) { ssize_t rec; rec = oblist_find (0, &dt->id_table, limits, sizeof (t_dynid_record), 0, 0, key, id_key_cmp, 0); if (rec < 0) return -1; return ((t_dynid_record *)oblist_burst (0, &dt->id_table, limits, sizeof (t_dynid_record), 0, 0, rec, 1))->id; } ssize_t dynid_ensure (t_dynid_table * dt, alloc_limits limits, void * key) { ssize_t rec; ssize_t rec_would_be; rec = oblist_find (&rec_would_be, &dt->id_table, limits, sizeof (t_dynid_record), 0, 0, key, id_key_cmp, 0); if (0 <= rec) { return ((t_dynid_record *)oblist_burst (0, &dt->id_table, limits, sizeof (t_dynid_record), 0, 0, rec, 1))->id; } else { ssize_t answer; t_dynid_record * r; answer = 1 + oblist_size (&dt->id_table, limits, sizeof (t_dynid_record), 0, 0); if (0 > oblist_insert_n (&dt->id_table, limits, sizeof (t_dynid_record), 0, 0, rec_would_be, 1, 0)) return -1; r = (t_dynid_record *)oblist_burst (0, &dt->id_table, limits, sizeof (t_dynid_record), 0, 0, rec_would_be, 1); if (!r) return -1; r->key = key; r->id = answer; return answer; } } static int id_key_cmp (void * vkey, void * velt, void * ign) { t_dynid_record * elt; elt = (t_dynid_record *)velt; if (vkey < elt->key) return -1; else if (vkey > elt->key) return 1; else return 0; } static t_dynid_table * global_table (void) { static int initialized = 0; static t_dynid_table table; if (!initialized) { if (0 > init_dynid_table (&table, lim_use_malloc)) return 0; } return &table; } ssize_t find_global_dynid (void * key) { return dynid_find (global_table (), lim_use_malloc, key); } ssize_t ensure_global_dynid (void * key) { return dynid_ensure (global_table (), lim_use_malloc, key); } /* tag: Tom Lord Sun Oct 24 21:49:19 2004 (dynid.c) */ tla-1.3.5+dfsg/src/hackerlab/dynid/Makefile.in0000644000175000017500000000027410457621774017634 0ustar useruserinclude $(makefiles)/library-objects.mk ifeq ($(cgs__install_hackerlab),1) include $(makefiles)/install-includes.mk endif # tag: Tom Lord Sat Nov 20 18:03:35 2004 (dynid/Makefile.in) # tla-1.3.5+dfsg/src/hackerlab/dynid/dynid.h0000644000175000017500000000210410457621774017041 0ustar useruser/* dynid.h: * **************************************************************** * Copyright (C) 2004 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBAWIKI__DYNID_H #define INCLUDE__LIBAWIKI__DYNID_H #include "hackerlab/oblists/oblist.h" typedef struct dynid_table t_dynid_table; typedef struct dynid_record t_dynid_record; struct dynid_table { t_oblist id_table; }; struct dynid_record { void * key; ssize_t id; }; /* automatically generated __STDC__ prototypes */ extern int init_dynid_table (t_dynid_table * dt, alloc_limits limits); extern void uninit_dynid_table (t_dynid_table * dt, alloc_limits limits); extern ssize_t dynid_find (t_dynid_table * dt, alloc_limits limits, void * key); extern ssize_t dynid_ensure (t_dynid_table * dt, alloc_limits limits, void * key); extern ssize_t find_global_dynid (void * key); extern ssize_t ensure_global_dynid (void * key); #endif /* INCLUDE__LIBAWIKI__DYNID_H */ /* tag: Tom Lord Sun Oct 24 21:49:16 2004 (dynid.h) */ tla-1.3.5+dfsg/src/hackerlab/dynid/PLUGIN/0000755000175000017500000000000010457621774016562 5ustar userusertla-1.3.5+dfsg/src/hackerlab/dynid/PLUGIN/REQ0000644000175000017500000000004310457621774017131 0ustar useruseroblists dynid dynid libhackerlab tla-1.3.5+dfsg/src/hackerlab/unidata-scaffolding/0000755000175000017500000000000010457621774020357 5ustar userusertla-1.3.5+dfsg/src/hackerlab/unidata-scaffolding/=UNIDATA-COPYRIGHT0000644000175000017500000000364610457621774023043 0ustar useruser [It's not clear to me that this is really a true copyright, and I don't mean to endorse either the notion that it is, or isn't.... but here is why I feel free to include unidata.txt in my distributions. Taken from http://www.unicode.org/Public/UNIDATA/UCD.html on Mon Jul 7 2003. Long live the Unicode Consortium! -t] UCD Terms of Use Disclaimer The Unicode Character Database is provided as is by Unicode, Inc. No claims are made as to fitness for any particular purpose. No warranties of any kind are expressed or implied. The recipient agrees to determine applicability of information provided. If this file has been purchased on magnetic or optical media from Unicode, Inc., the sole remedy for any claim will be exchange of defective media within 90 days of receipt. This disclaimer is applicable for all other data files accompanying the Unicode Character Database, some of which have been compiled by the Unicode Consortium, and some of which have been supplied by other sources. Limitations on Rights to Redistribute This Data Recipient is granted the right to make copies in any form for internal distribution and to freely use the information supplied in the creation of products supporting the UnicodeTM Standard. The files in the Unicode Character Database can be redistributed to third parties or other organizations (whether for profit or not) as long as this notice and the disclaimer notice are retained. Information can be extracted from these files and used in documentation or programs, as long as there is an accompanying notice indicating the source. The file Unihan.txt contains older and inconsistent Terms of Use. That language is overridden by these terms. ------ # tag: Tom Lord Mon Jul 7 16:07:02 2003 (unidata-scaffolding/=UNIDATA-COPYRIGHT) # tla-1.3.5+dfsg/src/hackerlab/unidata-scaffolding/unidata.txt0000644000175000017500000235700410457621774022560 0ustar useruser0000;;Cc;0;BN;;;;;N;NULL;;;; 0001;;Cc;0;BN;;;;;N;START OF HEADING;;;; 0002;;Cc;0;BN;;;;;N;START OF TEXT;;;; 0003;;Cc;0;BN;;;;;N;END OF TEXT;;;; 0004;;Cc;0;BN;;;;;N;END OF TRANSMISSION;;;; 0005;;Cc;0;BN;;;;;N;ENQUIRY;;;; 0006;;Cc;0;BN;;;;;N;ACKNOWLEDGE;;;; 0007;;Cc;0;BN;;;;;N;BELL;;;; 0008;;Cc;0;BN;;;;;N;BACKSPACE;;;; 0009;;Cc;0;S;;;;;N;HORIZONTAL TABULATION;;;; 000A;;Cc;0;B;;;;;N;LINE FEED;;;; 000B;;Cc;0;S;;;;;N;VERTICAL TABULATION;;;; 000C;;Cc;0;WS;;;;;N;FORM FEED;;;; 000D;;Cc;0;B;;;;;N;CARRIAGE RETURN;;;; 000E;;Cc;0;BN;;;;;N;SHIFT OUT;;;; 000F;;Cc;0;BN;;;;;N;SHIFT IN;;;; 0010;;Cc;0;BN;;;;;N;DATA LINK ESCAPE;;;; 0011;;Cc;0;BN;;;;;N;DEVICE CONTROL ONE;;;; 0012;;Cc;0;BN;;;;;N;DEVICE CONTROL TWO;;;; 0013;;Cc;0;BN;;;;;N;DEVICE CONTROL THREE;;;; 0014;;Cc;0;BN;;;;;N;DEVICE CONTROL FOUR;;;; 0015;;Cc;0;BN;;;;;N;NEGATIVE ACKNOWLEDGE;;;; 0016;;Cc;0;BN;;;;;N;SYNCHRONOUS IDLE;;;; 0017;;Cc;0;BN;;;;;N;END OF TRANSMISSION BLOCK;;;; 0018;;Cc;0;BN;;;;;N;CANCEL;;;; 0019;;Cc;0;BN;;;;;N;END OF MEDIUM;;;; 001A;;Cc;0;BN;;;;;N;SUBSTITUTE;;;; 001B;;Cc;0;BN;;;;;N;ESCAPE;;;; 001C;;Cc;0;B;;;;;N;FILE SEPARATOR;;;; 001D;;Cc;0;B;;;;;N;GROUP SEPARATOR;;;; 001E;;Cc;0;B;;;;;N;RECORD SEPARATOR;;;; 001F;;Cc;0;S;;;;;N;UNIT SEPARATOR;;;; 0020;SPACE;Zs;0;WS;;;;;N;;;;; 0021;EXCLAMATION MARK;Po;0;ON;;;;;N;;;;; 0022;QUOTATION MARK;Po;0;ON;;;;;N;;;;; 0023;NUMBER SIGN;Po;0;ET;;;;;N;;;;; 0024;DOLLAR SIGN;Sc;0;ET;;;;;N;;;;; 0025;PERCENT SIGN;Po;0;ET;;;;;N;;;;; 0026;AMPERSAND;Po;0;ON;;;;;N;;;;; 0027;APOSTROPHE;Po;0;ON;;;;;N;APOSTROPHE-QUOTE;;;; 0028;LEFT PARENTHESIS;Ps;0;ON;;;;;Y;OPENING PARENTHESIS;;;; 0029;RIGHT PARENTHESIS;Pe;0;ON;;;;;Y;CLOSING PARENTHESIS;;;; 002A;ASTERISK;Po;0;ON;;;;;N;;;;; 002B;PLUS SIGN;Sm;0;ET;;;;;N;;;;; 002C;COMMA;Po;0;CS;;;;;N;;;;; 002D;HYPHEN-MINUS;Pd;0;ET;;;;;N;;;;; 002E;FULL STOP;Po;0;CS;;;;;N;PERIOD;;;; 002F;SOLIDUS;Po;0;ES;;;;;N;SLASH;;;; 0030;DIGIT ZERO;Nd;0;EN;;0;0;0;N;;;;; 0031;DIGIT ONE;Nd;0;EN;;1;1;1;N;;;;; 0032;DIGIT TWO;Nd;0;EN;;2;2;2;N;;;;; 0033;DIGIT THREE;Nd;0;EN;;3;3;3;N;;;;; 0034;DIGIT FOUR;Nd;0;EN;;4;4;4;N;;;;; 0035;DIGIT FIVE;Nd;0;EN;;5;5;5;N;;;;; 0036;DIGIT SIX;Nd;0;EN;;6;6;6;N;;;;; 0037;DIGIT SEVEN;Nd;0;EN;;7;7;7;N;;;;; 0038;DIGIT EIGHT;Nd;0;EN;;8;8;8;N;;;;; 0039;DIGIT NINE;Nd;0;EN;;9;9;9;N;;;;; 003A;COLON;Po;0;CS;;;;;N;;;;; 003B;SEMICOLON;Po;0;ON;;;;;N;;;;; 003C;LESS-THAN SIGN;Sm;0;ON;;;;;Y;;;;; 003D;EQUALS SIGN;Sm;0;ON;;;;;N;;;;; 003E;GREATER-THAN SIGN;Sm;0;ON;;;;;Y;;;;; 003F;QUESTION MARK;Po;0;ON;;;;;N;;;;; 0040;COMMERCIAL AT;Po;0;ON;;;;;N;;;;; 0041;LATIN CAPITAL LETTER A;Lu;0;L;;;;;N;;;;0061; 0042;LATIN CAPITAL LETTER B;Lu;0;L;;;;;N;;;;0062; 0043;LATIN CAPITAL LETTER C;Lu;0;L;;;;;N;;;;0063; 0044;LATIN CAPITAL LETTER D;Lu;0;L;;;;;N;;;;0064; 0045;LATIN CAPITAL LETTER E;Lu;0;L;;;;;N;;;;0065; 0046;LATIN CAPITAL LETTER F;Lu;0;L;;;;;N;;;;0066; 0047;LATIN CAPITAL LETTER G;Lu;0;L;;;;;N;;;;0067; 0048;LATIN CAPITAL LETTER H;Lu;0;L;;;;;N;;;;0068; 0049;LATIN CAPITAL LETTER I;Lu;0;L;;;;;N;;;;0069; 004A;LATIN CAPITAL LETTER J;Lu;0;L;;;;;N;;;;006A; 004B;LATIN CAPITAL LETTER K;Lu;0;L;;;;;N;;;;006B; 004C;LATIN CAPITAL LETTER L;Lu;0;L;;;;;N;;;;006C; 004D;LATIN CAPITAL LETTER M;Lu;0;L;;;;;N;;;;006D; 004E;LATIN CAPITAL LETTER N;Lu;0;L;;;;;N;;;;006E; 004F;LATIN CAPITAL LETTER O;Lu;0;L;;;;;N;;;;006F; 0050;LATIN CAPITAL LETTER P;Lu;0;L;;;;;N;;;;0070; 0051;LATIN CAPITAL LETTER Q;Lu;0;L;;;;;N;;;;0071; 0052;LATIN CAPITAL LETTER R;Lu;0;L;;;;;N;;;;0072; 0053;LATIN CAPITAL LETTER S;Lu;0;L;;;;;N;;;;0073; 0054;LATIN CAPITAL LETTER T;Lu;0;L;;;;;N;;;;0074; 0055;LATIN CAPITAL LETTER U;Lu;0;L;;;;;N;;;;0075; 0056;LATIN CAPITAL LETTER V;Lu;0;L;;;;;N;;;;0076; 0057;LATIN CAPITAL LETTER W;Lu;0;L;;;;;N;;;;0077; 0058;LATIN CAPITAL LETTER X;Lu;0;L;;;;;N;;;;0078; 0059;LATIN CAPITAL LETTER Y;Lu;0;L;;;;;N;;;;0079; 005A;LATIN CAPITAL LETTER Z;Lu;0;L;;;;;N;;;;007A; 005B;LEFT SQUARE BRACKET;Ps;0;ON;;;;;Y;OPENING SQUARE BRACKET;;;; 005C;REVERSE SOLIDUS;Po;0;ON;;;;;N;BACKSLASH;;;; 005D;RIGHT SQUARE BRACKET;Pe;0;ON;;;;;Y;CLOSING SQUARE BRACKET;;;; 005E;CIRCUMFLEX ACCENT;Sk;0;ON;;;;;N;SPACING CIRCUMFLEX;;;; 005F;LOW LINE;Pc;0;ON;;;;;N;SPACING UNDERSCORE;;;; 0060;GRAVE ACCENT;Sk;0;ON;;;;;N;SPACING GRAVE;;;; 0061;LATIN SMALL LETTER A;Ll;0;L;;;;;N;;;0041;;0041 0062;LATIN SMALL LETTER B;Ll;0;L;;;;;N;;;0042;;0042 0063;LATIN SMALL LETTER C;Ll;0;L;;;;;N;;;0043;;0043 0064;LATIN SMALL LETTER D;Ll;0;L;;;;;N;;;0044;;0044 0065;LATIN SMALL LETTER E;Ll;0;L;;;;;N;;;0045;;0045 0066;LATIN SMALL LETTER F;Ll;0;L;;;;;N;;;0046;;0046 0067;LATIN SMALL LETTER G;Ll;0;L;;;;;N;;;0047;;0047 0068;LATIN SMALL LETTER H;Ll;0;L;;;;;N;;;0048;;0048 0069;LATIN SMALL LETTER I;Ll;0;L;;;;;N;;;0049;;0049 006A;LATIN SMALL LETTER J;Ll;0;L;;;;;N;;;004A;;004A 006B;LATIN SMALL LETTER K;Ll;0;L;;;;;N;;;004B;;004B 006C;LATIN SMALL LETTER L;Ll;0;L;;;;;N;;;004C;;004C 006D;LATIN SMALL LETTER M;Ll;0;L;;;;;N;;;004D;;004D 006E;LATIN SMALL LETTER N;Ll;0;L;;;;;N;;;004E;;004E 006F;LATIN SMALL LETTER O;Ll;0;L;;;;;N;;;004F;;004F 0070;LATIN SMALL LETTER P;Ll;0;L;;;;;N;;;0050;;0050 0071;LATIN SMALL LETTER Q;Ll;0;L;;;;;N;;;0051;;0051 0072;LATIN SMALL LETTER R;Ll;0;L;;;;;N;;;0052;;0052 0073;LATIN SMALL LETTER S;Ll;0;L;;;;;N;;;0053;;0053 0074;LATIN SMALL LETTER T;Ll;0;L;;;;;N;;;0054;;0054 0075;LATIN SMALL LETTER U;Ll;0;L;;;;;N;;;0055;;0055 0076;LATIN SMALL LETTER V;Ll;0;L;;;;;N;;;0056;;0056 0077;LATIN SMALL LETTER W;Ll;0;L;;;;;N;;;0057;;0057 0078;LATIN SMALL LETTER X;Ll;0;L;;;;;N;;;0058;;0058 0079;LATIN SMALL LETTER Y;Ll;0;L;;;;;N;;;0059;;0059 007A;LATIN SMALL LETTER Z;Ll;0;L;;;;;N;;;005A;;005A 007B;LEFT CURLY BRACKET;Ps;0;ON;;;;;Y;OPENING CURLY BRACKET;;;; 007C;VERTICAL LINE;Sm;0;ON;;;;;N;VERTICAL BAR;;;; 007D;RIGHT CURLY BRACKET;Pe;0;ON;;;;;Y;CLOSING CURLY BRACKET;;;; 007E;TILDE;Sm;0;ON;;;;;N;;;;; 007F;;Cc;0;BN;;;;;N;DELETE;;;; 0080;;Cc;0;BN;;;;;N;;;;; 0081;;Cc;0;BN;;;;;N;;;;; 0082;;Cc;0;BN;;;;;N;BREAK PERMITTED HERE;;;; 0083;;Cc;0;BN;;;;;N;NO BREAK HERE;;;; 0084;;Cc;0;BN;;;;;N;INDEX;;;; 0085;;Cc;0;B;;;;;N;NEXT LINE;;;; 0086;;Cc;0;BN;;;;;N;START OF SELECTED AREA;;;; 0087;;Cc;0;BN;;;;;N;END OF SELECTED AREA;;;; 0088;;Cc;0;BN;;;;;N;CHARACTER TABULATION SET;;;; 0089;;Cc;0;BN;;;;;N;CHARACTER TABULATION WITH JUSTIFICATION;;;; 008A;;Cc;0;BN;;;;;N;LINE TABULATION SET;;;; 008B;;Cc;0;BN;;;;;N;PARTIAL LINE DOWN;;;; 008C;;Cc;0;BN;;;;;N;PARTIAL LINE UP;;;; 008D;;Cc;0;BN;;;;;N;REVERSE LINE FEED;;;; 008E;;Cc;0;BN;;;;;N;SINGLE SHIFT TWO;;;; 008F;;Cc;0;BN;;;;;N;SINGLE SHIFT THREE;;;; 0090;;Cc;0;BN;;;;;N;DEVICE CONTROL STRING;;;; 0091;;Cc;0;BN;;;;;N;PRIVATE USE ONE;;;; 0092;;Cc;0;BN;;;;;N;PRIVATE USE TWO;;;; 0093;;Cc;0;BN;;;;;N;SET TRANSMIT STATE;;;; 0094;;Cc;0;BN;;;;;N;CANCEL CHARACTER;;;; 0095;;Cc;0;BN;;;;;N;MESSAGE WAITING;;;; 0096;;Cc;0;BN;;;;;N;START OF GUARDED AREA;;;; 0097;;Cc;0;BN;;;;;N;END OF GUARDED AREA;;;; 0098;;Cc;0;BN;;;;;N;START OF STRING;;;; 0099;;Cc;0;BN;;;;;N;;;;; 009A;;Cc;0;BN;;;;;N;SINGLE CHARACTER INTRODUCER;;;; 009B;;Cc;0;BN;;;;;N;CONTROL SEQUENCE INTRODUCER;;;; 009C;;Cc;0;BN;;;;;N;STRING TERMINATOR;;;; 009D;;Cc;0;BN;;;;;N;OPERATING SYSTEM COMMAND;;;; 009E;;Cc;0;BN;;;;;N;PRIVACY MESSAGE;;;; 009F;;Cc;0;BN;;;;;N;APPLICATION PROGRAM COMMAND;;;; 00A0;NO-BREAK SPACE;Zs;0;CS; 0020;;;;N;NON-BREAKING SPACE;;;; 00A1;INVERTED EXCLAMATION MARK;Po;0;ON;;;;;N;;;;; 00A2;CENT SIGN;Sc;0;ET;;;;;N;;;;; 00A3;POUND SIGN;Sc;0;ET;;;;;N;;;;; 00A4;CURRENCY SIGN;Sc;0;ET;;;;;N;;;;; 00A5;YEN SIGN;Sc;0;ET;;;;;N;;;;; 00A6;BROKEN BAR;So;0;ON;;;;;N;BROKEN VERTICAL BAR;;;; 00A7;SECTION SIGN;So;0;ON;;;;;N;;;;; 00A8;DIAERESIS;Sk;0;ON; 0020 0308;;;;N;SPACING DIAERESIS;;;; 00A9;COPYRIGHT SIGN;So;0;ON;;;;;N;;;;; 00AA;FEMININE ORDINAL INDICATOR;Ll;0;L; 0061;;;;N;;;;; 00AB;LEFT-POINTING DOUBLE ANGLE QUOTATION MARK;Pi;0;ON;;;;;Y;LEFT POINTING GUILLEMET;*;;; 00AC;NOT SIGN;Sm;0;ON;;;;;N;;;;; 00AD;SOFT HYPHEN;Pd;0;ON;;;;;N;;;;; 00AE;REGISTERED SIGN;So;0;ON;;;;;N;REGISTERED TRADE MARK SIGN;;;; 00AF;MACRON;Sk;0;ON; 0020 0304;;;;N;SPACING MACRON;;;; 00B0;DEGREE SIGN;So;0;ET;;;;;N;;;;; 00B1;PLUS-MINUS SIGN;Sm;0;ET;;;;;N;PLUS-OR-MINUS SIGN;;;; 00B2;SUPERSCRIPT TWO;No;0;EN; 0032;2;2;2;N;SUPERSCRIPT DIGIT TWO;;;; 00B3;SUPERSCRIPT THREE;No;0;EN; 0033;3;3;3;N;SUPERSCRIPT DIGIT THREE;;;; 00B4;ACUTE ACCENT;Sk;0;ON; 0020 0301;;;;N;SPACING ACUTE;;;; 00B5;MICRO SIGN;Ll;0;L; 03BC;;;;N;;;039C;;039C 00B6;PILCROW SIGN;So;0;ON;;;;;N;PARAGRAPH SIGN;;;; 00B7;MIDDLE DOT;Po;0;ON;;;;;N;;;;; 00B8;CEDILLA;Sk;0;ON; 0020 0327;;;;N;SPACING CEDILLA;;;; 00B9;SUPERSCRIPT ONE;No;0;EN; 0031;1;1;1;N;SUPERSCRIPT DIGIT ONE;;;; 00BA;MASCULINE ORDINAL INDICATOR;Ll;0;L; 006F;;;;N;;;;; 00BB;RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK;Pf;0;ON;;;;;Y;RIGHT POINTING GUILLEMET;*;;; 00BC;VULGAR FRACTION ONE QUARTER;No;0;ON; 0031 2044 0034;;;1/4;N;FRACTION ONE QUARTER;;;; 00BD;VULGAR FRACTION ONE HALF;No;0;ON; 0031 2044 0032;;;1/2;N;FRACTION ONE HALF;;;; 00BE;VULGAR FRACTION THREE QUARTERS;No;0;ON; 0033 2044 0034;;;3/4;N;FRACTION THREE QUARTERS;;;; 00BF;INVERTED QUESTION MARK;Po;0;ON;;;;;N;;;;; 00C0;LATIN CAPITAL LETTER A WITH GRAVE;Lu;0;L;0041 0300;;;;N;LATIN CAPITAL LETTER A GRAVE;;;00E0; 00C1;LATIN CAPITAL LETTER A WITH ACUTE;Lu;0;L;0041 0301;;;;N;LATIN CAPITAL LETTER A ACUTE;;;00E1; 00C2;LATIN CAPITAL LETTER A WITH CIRCUMFLEX;Lu;0;L;0041 0302;;;;N;LATIN CAPITAL LETTER A CIRCUMFLEX;;;00E2; 00C3;LATIN CAPITAL LETTER A WITH TILDE;Lu;0;L;0041 0303;;;;N;LATIN CAPITAL LETTER A TILDE;;;00E3; 00C4;LATIN CAPITAL LETTER A WITH DIAERESIS;Lu;0;L;0041 0308;;;;N;LATIN CAPITAL LETTER A DIAERESIS;;;00E4; 00C5;LATIN CAPITAL LETTER A WITH RING ABOVE;Lu;0;L;0041 030A;;;;N;LATIN CAPITAL LETTER A RING;;;00E5; 00C6;LATIN CAPITAL LETTER AE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER A E;ash *;;00E6; 00C7;LATIN CAPITAL LETTER C WITH CEDILLA;Lu;0;L;0043 0327;;;;N;LATIN CAPITAL LETTER C CEDILLA;;;00E7; 00C8;LATIN CAPITAL LETTER E WITH GRAVE;Lu;0;L;0045 0300;;;;N;LATIN CAPITAL LETTER E GRAVE;;;00E8; 00C9;LATIN CAPITAL LETTER E WITH ACUTE;Lu;0;L;0045 0301;;;;N;LATIN CAPITAL LETTER E ACUTE;;;00E9; 00CA;LATIN CAPITAL LETTER E WITH CIRCUMFLEX;Lu;0;L;0045 0302;;;;N;LATIN CAPITAL LETTER E CIRCUMFLEX;;;00EA; 00CB;LATIN CAPITAL LETTER E WITH DIAERESIS;Lu;0;L;0045 0308;;;;N;LATIN CAPITAL LETTER E DIAERESIS;;;00EB; 00CC;LATIN CAPITAL LETTER I WITH GRAVE;Lu;0;L;0049 0300;;;;N;LATIN CAPITAL LETTER I GRAVE;;;00EC; 00CD;LATIN CAPITAL LETTER I WITH ACUTE;Lu;0;L;0049 0301;;;;N;LATIN CAPITAL LETTER I ACUTE;;;00ED; 00CE;LATIN CAPITAL LETTER I WITH CIRCUMFLEX;Lu;0;L;0049 0302;;;;N;LATIN CAPITAL LETTER I CIRCUMFLEX;;;00EE; 00CF;LATIN CAPITAL LETTER I WITH DIAERESIS;Lu;0;L;0049 0308;;;;N;LATIN CAPITAL LETTER I DIAERESIS;;;00EF; 00D0;LATIN CAPITAL LETTER ETH;Lu;0;L;;;;;N;;Icelandic;;00F0; 00D1;LATIN CAPITAL LETTER N WITH TILDE;Lu;0;L;004E 0303;;;;N;LATIN CAPITAL LETTER N TILDE;;;00F1; 00D2;LATIN CAPITAL LETTER O WITH GRAVE;Lu;0;L;004F 0300;;;;N;LATIN CAPITAL LETTER O GRAVE;;;00F2; 00D3;LATIN CAPITAL LETTER O WITH ACUTE;Lu;0;L;004F 0301;;;;N;LATIN CAPITAL LETTER O ACUTE;;;00F3; 00D4;LATIN CAPITAL LETTER O WITH CIRCUMFLEX;Lu;0;L;004F 0302;;;;N;LATIN CAPITAL LETTER O CIRCUMFLEX;;;00F4; 00D5;LATIN CAPITAL LETTER O WITH TILDE;Lu;0;L;004F 0303;;;;N;LATIN CAPITAL LETTER O TILDE;;;00F5; 00D6;LATIN CAPITAL LETTER O WITH DIAERESIS;Lu;0;L;004F 0308;;;;N;LATIN CAPITAL LETTER O DIAERESIS;;;00F6; 00D7;MULTIPLICATION SIGN;Sm;0;ON;;;;;N;;;;; 00D8;LATIN CAPITAL LETTER O WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER O SLASH;;;00F8; 00D9;LATIN CAPITAL LETTER U WITH GRAVE;Lu;0;L;0055 0300;;;;N;LATIN CAPITAL LETTER U GRAVE;;;00F9; 00DA;LATIN CAPITAL LETTER U WITH ACUTE;Lu;0;L;0055 0301;;;;N;LATIN CAPITAL LETTER U ACUTE;;;00FA; 00DB;LATIN CAPITAL LETTER U WITH CIRCUMFLEX;Lu;0;L;0055 0302;;;;N;LATIN CAPITAL LETTER U CIRCUMFLEX;;;00FB; 00DC;LATIN CAPITAL LETTER U WITH DIAERESIS;Lu;0;L;0055 0308;;;;N;LATIN CAPITAL LETTER U DIAERESIS;;;00FC; 00DD;LATIN CAPITAL LETTER Y WITH ACUTE;Lu;0;L;0059 0301;;;;N;LATIN CAPITAL LETTER Y ACUTE;;;00FD; 00DE;LATIN CAPITAL LETTER THORN;Lu;0;L;;;;;N;;Icelandic;;00FE; 00DF;LATIN SMALL LETTER SHARP S;Ll;0;L;;;;;N;;German;;; 00E0;LATIN SMALL LETTER A WITH GRAVE;Ll;0;L;0061 0300;;;;N;LATIN SMALL LETTER A GRAVE;;00C0;;00C0 00E1;LATIN SMALL LETTER A WITH ACUTE;Ll;0;L;0061 0301;;;;N;LATIN SMALL LETTER A ACUTE;;00C1;;00C1 00E2;LATIN SMALL LETTER A WITH CIRCUMFLEX;Ll;0;L;0061 0302;;;;N;LATIN SMALL LETTER A CIRCUMFLEX;;00C2;;00C2 00E3;LATIN SMALL LETTER A WITH TILDE;Ll;0;L;0061 0303;;;;N;LATIN SMALL LETTER A TILDE;;00C3;;00C3 00E4;LATIN SMALL LETTER A WITH DIAERESIS;Ll;0;L;0061 0308;;;;N;LATIN SMALL LETTER A DIAERESIS;;00C4;;00C4 00E5;LATIN SMALL LETTER A WITH RING ABOVE;Ll;0;L;0061 030A;;;;N;LATIN SMALL LETTER A RING;;00C5;;00C5 00E6;LATIN SMALL LETTER AE;Ll;0;L;;;;;N;LATIN SMALL LETTER A E;ash *;00C6;;00C6 00E7;LATIN SMALL LETTER C WITH CEDILLA;Ll;0;L;0063 0327;;;;N;LATIN SMALL LETTER C CEDILLA;;00C7;;00C7 00E8;LATIN SMALL LETTER E WITH GRAVE;Ll;0;L;0065 0300;;;;N;LATIN SMALL LETTER E GRAVE;;00C8;;00C8 00E9;LATIN SMALL LETTER E WITH ACUTE;Ll;0;L;0065 0301;;;;N;LATIN SMALL LETTER E ACUTE;;00C9;;00C9 00EA;LATIN SMALL LETTER E WITH CIRCUMFLEX;Ll;0;L;0065 0302;;;;N;LATIN SMALL LETTER E CIRCUMFLEX;;00CA;;00CA 00EB;LATIN SMALL LETTER E WITH DIAERESIS;Ll;0;L;0065 0308;;;;N;LATIN SMALL LETTER E DIAERESIS;;00CB;;00CB 00EC;LATIN SMALL LETTER I WITH GRAVE;Ll;0;L;0069 0300;;;;N;LATIN SMALL LETTER I GRAVE;;00CC;;00CC 00ED;LATIN SMALL LETTER I WITH ACUTE;Ll;0;L;0069 0301;;;;N;LATIN SMALL LETTER I ACUTE;;00CD;;00CD 00EE;LATIN SMALL LETTER I WITH CIRCUMFLEX;Ll;0;L;0069 0302;;;;N;LATIN SMALL LETTER I CIRCUMFLEX;;00CE;;00CE 00EF;LATIN SMALL LETTER I WITH DIAERESIS;Ll;0;L;0069 0308;;;;N;LATIN SMALL LETTER I DIAERESIS;;00CF;;00CF 00F0;LATIN SMALL LETTER ETH;Ll;0;L;;;;;N;;Icelandic;00D0;;00D0 00F1;LATIN SMALL LETTER N WITH TILDE;Ll;0;L;006E 0303;;;;N;LATIN SMALL LETTER N TILDE;;00D1;;00D1 00F2;LATIN SMALL LETTER O WITH GRAVE;Ll;0;L;006F 0300;;;;N;LATIN SMALL LETTER O GRAVE;;00D2;;00D2 00F3;LATIN SMALL LETTER O WITH ACUTE;Ll;0;L;006F 0301;;;;N;LATIN SMALL LETTER O ACUTE;;00D3;;00D3 00F4;LATIN SMALL LETTER O WITH CIRCUMFLEX;Ll;0;L;006F 0302;;;;N;LATIN SMALL LETTER O CIRCUMFLEX;;00D4;;00D4 00F5;LATIN SMALL LETTER O WITH TILDE;Ll;0;L;006F 0303;;;;N;LATIN SMALL LETTER O TILDE;;00D5;;00D5 00F6;LATIN SMALL LETTER O WITH DIAERESIS;Ll;0;L;006F 0308;;;;N;LATIN SMALL LETTER O DIAERESIS;;00D6;;00D6 00F7;DIVISION SIGN;Sm;0;ON;;;;;N;;;;; 00F8;LATIN SMALL LETTER O WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER O SLASH;;00D8;;00D8 00F9;LATIN SMALL LETTER U WITH GRAVE;Ll;0;L;0075 0300;;;;N;LATIN SMALL LETTER U GRAVE;;00D9;;00D9 00FA;LATIN SMALL LETTER U WITH ACUTE;Ll;0;L;0075 0301;;;;N;LATIN SMALL LETTER U ACUTE;;00DA;;00DA 00FB;LATIN SMALL LETTER U WITH CIRCUMFLEX;Ll;0;L;0075 0302;;;;N;LATIN SMALL LETTER U CIRCUMFLEX;;00DB;;00DB 00FC;LATIN SMALL LETTER U WITH DIAERESIS;Ll;0;L;0075 0308;;;;N;LATIN SMALL LETTER U DIAERESIS;;00DC;;00DC 00FD;LATIN SMALL LETTER Y WITH ACUTE;Ll;0;L;0079 0301;;;;N;LATIN SMALL LETTER Y ACUTE;;00DD;;00DD 00FE;LATIN SMALL LETTER THORN;Ll;0;L;;;;;N;;Icelandic;00DE;;00DE 00FF;LATIN SMALL LETTER Y WITH DIAERESIS;Ll;0;L;0079 0308;;;;N;LATIN SMALL LETTER Y DIAERESIS;;0178;;0178 0100;LATIN CAPITAL LETTER A WITH MACRON;Lu;0;L;0041 0304;;;;N;LATIN CAPITAL LETTER A MACRON;;;0101; 0101;LATIN SMALL LETTER A WITH MACRON;Ll;0;L;0061 0304;;;;N;LATIN SMALL LETTER A MACRON;;0100;;0100 0102;LATIN CAPITAL LETTER A WITH BREVE;Lu;0;L;0041 0306;;;;N;LATIN CAPITAL LETTER A BREVE;;;0103; 0103;LATIN SMALL LETTER A WITH BREVE;Ll;0;L;0061 0306;;;;N;LATIN SMALL LETTER A BREVE;;0102;;0102 0104;LATIN CAPITAL LETTER A WITH OGONEK;Lu;0;L;0041 0328;;;;N;LATIN CAPITAL LETTER A OGONEK;;;0105; 0105;LATIN SMALL LETTER A WITH OGONEK;Ll;0;L;0061 0328;;;;N;LATIN SMALL LETTER A OGONEK;;0104;;0104 0106;LATIN CAPITAL LETTER C WITH ACUTE;Lu;0;L;0043 0301;;;;N;LATIN CAPITAL LETTER C ACUTE;;;0107; 0107;LATIN SMALL LETTER C WITH ACUTE;Ll;0;L;0063 0301;;;;N;LATIN SMALL LETTER C ACUTE;;0106;;0106 0108;LATIN CAPITAL LETTER C WITH CIRCUMFLEX;Lu;0;L;0043 0302;;;;N;LATIN CAPITAL LETTER C CIRCUMFLEX;;;0109; 0109;LATIN SMALL LETTER C WITH CIRCUMFLEX;Ll;0;L;0063 0302;;;;N;LATIN SMALL LETTER C CIRCUMFLEX;;0108;;0108 010A;LATIN CAPITAL LETTER C WITH DOT ABOVE;Lu;0;L;0043 0307;;;;N;LATIN CAPITAL LETTER C DOT;;;010B; 010B;LATIN SMALL LETTER C WITH DOT ABOVE;Ll;0;L;0063 0307;;;;N;LATIN SMALL LETTER C DOT;;010A;;010A 010C;LATIN CAPITAL LETTER C WITH CARON;Lu;0;L;0043 030C;;;;N;LATIN CAPITAL LETTER C HACEK;;;010D; 010D;LATIN SMALL LETTER C WITH CARON;Ll;0;L;0063 030C;;;;N;LATIN SMALL LETTER C HACEK;;010C;;010C 010E;LATIN CAPITAL LETTER D WITH CARON;Lu;0;L;0044 030C;;;;N;LATIN CAPITAL LETTER D HACEK;;;010F; 010F;LATIN SMALL LETTER D WITH CARON;Ll;0;L;0064 030C;;;;N;LATIN SMALL LETTER D HACEK;;010E;;010E 0110;LATIN CAPITAL LETTER D WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER D BAR;;;0111; 0111;LATIN SMALL LETTER D WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER D BAR;;0110;;0110 0112;LATIN CAPITAL LETTER E WITH MACRON;Lu;0;L;0045 0304;;;;N;LATIN CAPITAL LETTER E MACRON;;;0113; 0113;LATIN SMALL LETTER E WITH MACRON;Ll;0;L;0065 0304;;;;N;LATIN SMALL LETTER E MACRON;;0112;;0112 0114;LATIN CAPITAL LETTER E WITH BREVE;Lu;0;L;0045 0306;;;;N;LATIN CAPITAL LETTER E BREVE;;;0115; 0115;LATIN SMALL LETTER E WITH BREVE;Ll;0;L;0065 0306;;;;N;LATIN SMALL LETTER E BREVE;;0114;;0114 0116;LATIN CAPITAL LETTER E WITH DOT ABOVE;Lu;0;L;0045 0307;;;;N;LATIN CAPITAL LETTER E DOT;;;0117; 0117;LATIN SMALL LETTER E WITH DOT ABOVE;Ll;0;L;0065 0307;;;;N;LATIN SMALL LETTER E DOT;;0116;;0116 0118;LATIN CAPITAL LETTER E WITH OGONEK;Lu;0;L;0045 0328;;;;N;LATIN CAPITAL LETTER E OGONEK;;;0119; 0119;LATIN SMALL LETTER E WITH OGONEK;Ll;0;L;0065 0328;;;;N;LATIN SMALL LETTER E OGONEK;;0118;;0118 011A;LATIN CAPITAL LETTER E WITH CARON;Lu;0;L;0045 030C;;;;N;LATIN CAPITAL LETTER E HACEK;;;011B; 011B;LATIN SMALL LETTER E WITH CARON;Ll;0;L;0065 030C;;;;N;LATIN SMALL LETTER E HACEK;;011A;;011A 011C;LATIN CAPITAL LETTER G WITH CIRCUMFLEX;Lu;0;L;0047 0302;;;;N;LATIN CAPITAL LETTER G CIRCUMFLEX;;;011D; 011D;LATIN SMALL LETTER G WITH CIRCUMFLEX;Ll;0;L;0067 0302;;;;N;LATIN SMALL LETTER G CIRCUMFLEX;;011C;;011C 011E;LATIN CAPITAL LETTER G WITH BREVE;Lu;0;L;0047 0306;;;;N;LATIN CAPITAL LETTER G BREVE;;;011F; 011F;LATIN SMALL LETTER G WITH BREVE;Ll;0;L;0067 0306;;;;N;LATIN SMALL LETTER G BREVE;;011E;;011E 0120;LATIN CAPITAL LETTER G WITH DOT ABOVE;Lu;0;L;0047 0307;;;;N;LATIN CAPITAL LETTER G DOT;;;0121; 0121;LATIN SMALL LETTER G WITH DOT ABOVE;Ll;0;L;0067 0307;;;;N;LATIN SMALL LETTER G DOT;;0120;;0120 0122;LATIN CAPITAL LETTER G WITH CEDILLA;Lu;0;L;0047 0327;;;;N;LATIN CAPITAL LETTER G CEDILLA;;;0123; 0123;LATIN SMALL LETTER G WITH CEDILLA;Ll;0;L;0067 0327;;;;N;LATIN SMALL LETTER G CEDILLA;;0122;;0122 0124;LATIN CAPITAL LETTER H WITH CIRCUMFLEX;Lu;0;L;0048 0302;;;;N;LATIN CAPITAL LETTER H CIRCUMFLEX;;;0125; 0125;LATIN SMALL LETTER H WITH CIRCUMFLEX;Ll;0;L;0068 0302;;;;N;LATIN SMALL LETTER H CIRCUMFLEX;;0124;;0124 0126;LATIN CAPITAL LETTER H WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER H BAR;;;0127; 0127;LATIN SMALL LETTER H WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER H BAR;;0126;;0126 0128;LATIN CAPITAL LETTER I WITH TILDE;Lu;0;L;0049 0303;;;;N;LATIN CAPITAL LETTER I TILDE;;;0129; 0129;LATIN SMALL LETTER I WITH TILDE;Ll;0;L;0069 0303;;;;N;LATIN SMALL LETTER I TILDE;;0128;;0128 012A;LATIN CAPITAL LETTER I WITH MACRON;Lu;0;L;0049 0304;;;;N;LATIN CAPITAL LETTER I MACRON;;;012B; 012B;LATIN SMALL LETTER I WITH MACRON;Ll;0;L;0069 0304;;;;N;LATIN SMALL LETTER I MACRON;;012A;;012A 012C;LATIN CAPITAL LETTER I WITH BREVE;Lu;0;L;0049 0306;;;;N;LATIN CAPITAL LETTER I BREVE;;;012D; 012D;LATIN SMALL LETTER I WITH BREVE;Ll;0;L;0069 0306;;;;N;LATIN SMALL LETTER I BREVE;;012C;;012C 012E;LATIN CAPITAL LETTER I WITH OGONEK;Lu;0;L;0049 0328;;;;N;LATIN CAPITAL LETTER I OGONEK;;;012F; 012F;LATIN SMALL LETTER I WITH OGONEK;Ll;0;L;0069 0328;;;;N;LATIN SMALL LETTER I OGONEK;;012E;;012E 0130;LATIN CAPITAL LETTER I WITH DOT ABOVE;Lu;0;L;0049 0307;;;;N;LATIN CAPITAL LETTER I DOT;;;0069; 0131;LATIN SMALL LETTER DOTLESS I;Ll;0;L;;;;;N;;;0049;;0049 0132;LATIN CAPITAL LIGATURE IJ;Lu;0;L; 0049 004A;;;;N;LATIN CAPITAL LETTER I J;;;0133; 0133;LATIN SMALL LIGATURE IJ;Ll;0;L; 0069 006A;;;;N;LATIN SMALL LETTER I J;;0132;;0132 0134;LATIN CAPITAL LETTER J WITH CIRCUMFLEX;Lu;0;L;004A 0302;;;;N;LATIN CAPITAL LETTER J CIRCUMFLEX;;;0135; 0135;LATIN SMALL LETTER J WITH CIRCUMFLEX;Ll;0;L;006A 0302;;;;N;LATIN SMALL LETTER J CIRCUMFLEX;;0134;;0134 0136;LATIN CAPITAL LETTER K WITH CEDILLA;Lu;0;L;004B 0327;;;;N;LATIN CAPITAL LETTER K CEDILLA;;;0137; 0137;LATIN SMALL LETTER K WITH CEDILLA;Ll;0;L;006B 0327;;;;N;LATIN SMALL LETTER K CEDILLA;;0136;;0136 0138;LATIN SMALL LETTER KRA;Ll;0;L;;;;;N;;Greenlandic;;; 0139;LATIN CAPITAL LETTER L WITH ACUTE;Lu;0;L;004C 0301;;;;N;LATIN CAPITAL LETTER L ACUTE;;;013A; 013A;LATIN SMALL LETTER L WITH ACUTE;Ll;0;L;006C 0301;;;;N;LATIN SMALL LETTER L ACUTE;;0139;;0139 013B;LATIN CAPITAL LETTER L WITH CEDILLA;Lu;0;L;004C 0327;;;;N;LATIN CAPITAL LETTER L CEDILLA;;;013C; 013C;LATIN SMALL LETTER L WITH CEDILLA;Ll;0;L;006C 0327;;;;N;LATIN SMALL LETTER L CEDILLA;;013B;;013B 013D;LATIN CAPITAL LETTER L WITH CARON;Lu;0;L;004C 030C;;;;N;LATIN CAPITAL LETTER L HACEK;;;013E; 013E;LATIN SMALL LETTER L WITH CARON;Ll;0;L;006C 030C;;;;N;LATIN SMALL LETTER L HACEK;;013D;;013D 013F;LATIN CAPITAL LETTER L WITH MIDDLE DOT;Lu;0;L; 004C 00B7;;;;N;;;;0140; 0140;LATIN SMALL LETTER L WITH MIDDLE DOT;Ll;0;L; 006C 00B7;;;;N;;;013F;;013F 0141;LATIN CAPITAL LETTER L WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER L SLASH;;;0142; 0142;LATIN SMALL LETTER L WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER L SLASH;;0141;;0141 0143;LATIN CAPITAL LETTER N WITH ACUTE;Lu;0;L;004E 0301;;;;N;LATIN CAPITAL LETTER N ACUTE;;;0144; 0144;LATIN SMALL LETTER N WITH ACUTE;Ll;0;L;006E 0301;;;;N;LATIN SMALL LETTER N ACUTE;;0143;;0143 0145;LATIN CAPITAL LETTER N WITH CEDILLA;Lu;0;L;004E 0327;;;;N;LATIN CAPITAL LETTER N CEDILLA;;;0146; 0146;LATIN SMALL LETTER N WITH CEDILLA;Ll;0;L;006E 0327;;;;N;LATIN SMALL LETTER N CEDILLA;;0145;;0145 0147;LATIN CAPITAL LETTER N WITH CARON;Lu;0;L;004E 030C;;;;N;LATIN CAPITAL LETTER N HACEK;;;0148; 0148;LATIN SMALL LETTER N WITH CARON;Ll;0;L;006E 030C;;;;N;LATIN SMALL LETTER N HACEK;;0147;;0147 0149;LATIN SMALL LETTER N PRECEDED BY APOSTROPHE;Ll;0;L; 02BC 006E;;;;N;LATIN SMALL LETTER APOSTROPHE N;;;; 014A;LATIN CAPITAL LETTER ENG;Lu;0;L;;;;;N;;Sami;;014B; 014B;LATIN SMALL LETTER ENG;Ll;0;L;;;;;N;;Sami;014A;;014A 014C;LATIN CAPITAL LETTER O WITH MACRON;Lu;0;L;004F 0304;;;;N;LATIN CAPITAL LETTER O MACRON;;;014D; 014D;LATIN SMALL LETTER O WITH MACRON;Ll;0;L;006F 0304;;;;N;LATIN SMALL LETTER O MACRON;;014C;;014C 014E;LATIN CAPITAL LETTER O WITH BREVE;Lu;0;L;004F 0306;;;;N;LATIN CAPITAL LETTER O BREVE;;;014F; 014F;LATIN SMALL LETTER O WITH BREVE;Ll;0;L;006F 0306;;;;N;LATIN SMALL LETTER O BREVE;;014E;;014E 0150;LATIN CAPITAL LETTER O WITH DOUBLE ACUTE;Lu;0;L;004F 030B;;;;N;LATIN CAPITAL LETTER O DOUBLE ACUTE;;;0151; 0151;LATIN SMALL LETTER O WITH DOUBLE ACUTE;Ll;0;L;006F 030B;;;;N;LATIN SMALL LETTER O DOUBLE ACUTE;;0150;;0150 0152;LATIN CAPITAL LIGATURE OE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER O E;;;0153; 0153;LATIN SMALL LIGATURE OE;Ll;0;L;;;;;N;LATIN SMALL LETTER O E;;0152;;0152 0154;LATIN CAPITAL LETTER R WITH ACUTE;Lu;0;L;0052 0301;;;;N;LATIN CAPITAL LETTER R ACUTE;;;0155; 0155;LATIN SMALL LETTER R WITH ACUTE;Ll;0;L;0072 0301;;;;N;LATIN SMALL LETTER R ACUTE;;0154;;0154 0156;LATIN CAPITAL LETTER R WITH CEDILLA;Lu;0;L;0052 0327;;;;N;LATIN CAPITAL LETTER R CEDILLA;;;0157; 0157;LATIN SMALL LETTER R WITH CEDILLA;Ll;0;L;0072 0327;;;;N;LATIN SMALL LETTER R CEDILLA;;0156;;0156 0158;LATIN CAPITAL LETTER R WITH CARON;Lu;0;L;0052 030C;;;;N;LATIN CAPITAL LETTER R HACEK;;;0159; 0159;LATIN SMALL LETTER R WITH CARON;Ll;0;L;0072 030C;;;;N;LATIN SMALL LETTER R HACEK;;0158;;0158 015A;LATIN CAPITAL LETTER S WITH ACUTE;Lu;0;L;0053 0301;;;;N;LATIN CAPITAL LETTER S ACUTE;;;015B; 015B;LATIN SMALL LETTER S WITH ACUTE;Ll;0;L;0073 0301;;;;N;LATIN SMALL LETTER S ACUTE;;015A;;015A 015C;LATIN CAPITAL LETTER S WITH CIRCUMFLEX;Lu;0;L;0053 0302;;;;N;LATIN CAPITAL LETTER S CIRCUMFLEX;;;015D; 015D;LATIN SMALL LETTER S WITH CIRCUMFLEX;Ll;0;L;0073 0302;;;;N;LATIN SMALL LETTER S CIRCUMFLEX;;015C;;015C 015E;LATIN CAPITAL LETTER S WITH CEDILLA;Lu;0;L;0053 0327;;;;N;LATIN CAPITAL LETTER S CEDILLA;*;;015F; 015F;LATIN SMALL LETTER S WITH CEDILLA;Ll;0;L;0073 0327;;;;N;LATIN SMALL LETTER S CEDILLA;*;015E;;015E 0160;LATIN CAPITAL LETTER S WITH CARON;Lu;0;L;0053 030C;;;;N;LATIN CAPITAL LETTER S HACEK;;;0161; 0161;LATIN SMALL LETTER S WITH CARON;Ll;0;L;0073 030C;;;;N;LATIN SMALL LETTER S HACEK;;0160;;0160 0162;LATIN CAPITAL LETTER T WITH CEDILLA;Lu;0;L;0054 0327;;;;N;LATIN CAPITAL LETTER T CEDILLA;*;;0163; 0163;LATIN SMALL LETTER T WITH CEDILLA;Ll;0;L;0074 0327;;;;N;LATIN SMALL LETTER T CEDILLA;*;0162;;0162 0164;LATIN CAPITAL LETTER T WITH CARON;Lu;0;L;0054 030C;;;;N;LATIN CAPITAL LETTER T HACEK;;;0165; 0165;LATIN SMALL LETTER T WITH CARON;Ll;0;L;0074 030C;;;;N;LATIN SMALL LETTER T HACEK;;0164;;0164 0166;LATIN CAPITAL LETTER T WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER T BAR;;;0167; 0167;LATIN SMALL LETTER T WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER T BAR;;0166;;0166 0168;LATIN CAPITAL LETTER U WITH TILDE;Lu;0;L;0055 0303;;;;N;LATIN CAPITAL LETTER U TILDE;;;0169; 0169;LATIN SMALL LETTER U WITH TILDE;Ll;0;L;0075 0303;;;;N;LATIN SMALL LETTER U TILDE;;0168;;0168 016A;LATIN CAPITAL LETTER U WITH MACRON;Lu;0;L;0055 0304;;;;N;LATIN CAPITAL LETTER U MACRON;;;016B; 016B;LATIN SMALL LETTER U WITH MACRON;Ll;0;L;0075 0304;;;;N;LATIN SMALL LETTER U MACRON;;016A;;016A 016C;LATIN CAPITAL LETTER U WITH BREVE;Lu;0;L;0055 0306;;;;N;LATIN CAPITAL LETTER U BREVE;;;016D; 016D;LATIN SMALL LETTER U WITH BREVE;Ll;0;L;0075 0306;;;;N;LATIN SMALL LETTER U BREVE;;016C;;016C 016E;LATIN CAPITAL LETTER U WITH RING ABOVE;Lu;0;L;0055 030A;;;;N;LATIN CAPITAL LETTER U RING;;;016F; 016F;LATIN SMALL LETTER U WITH RING ABOVE;Ll;0;L;0075 030A;;;;N;LATIN SMALL LETTER U RING;;016E;;016E 0170;LATIN CAPITAL LETTER U WITH DOUBLE ACUTE;Lu;0;L;0055 030B;;;;N;LATIN CAPITAL LETTER U DOUBLE ACUTE;;;0171; 0171;LATIN SMALL LETTER U WITH DOUBLE ACUTE;Ll;0;L;0075 030B;;;;N;LATIN SMALL LETTER U DOUBLE ACUTE;;0170;;0170 0172;LATIN CAPITAL LETTER U WITH OGONEK;Lu;0;L;0055 0328;;;;N;LATIN CAPITAL LETTER U OGONEK;;;0173; 0173;LATIN SMALL LETTER U WITH OGONEK;Ll;0;L;0075 0328;;;;N;LATIN SMALL LETTER U OGONEK;;0172;;0172 0174;LATIN CAPITAL LETTER W WITH CIRCUMFLEX;Lu;0;L;0057 0302;;;;N;LATIN CAPITAL LETTER W CIRCUMFLEX;;;0175; 0175;LATIN SMALL LETTER W WITH CIRCUMFLEX;Ll;0;L;0077 0302;;;;N;LATIN SMALL LETTER W CIRCUMFLEX;;0174;;0174 0176;LATIN CAPITAL LETTER Y WITH CIRCUMFLEX;Lu;0;L;0059 0302;;;;N;LATIN CAPITAL LETTER Y CIRCUMFLEX;;;0177; 0177;LATIN SMALL LETTER Y WITH CIRCUMFLEX;Ll;0;L;0079 0302;;;;N;LATIN SMALL LETTER Y CIRCUMFLEX;;0176;;0176 0178;LATIN CAPITAL LETTER Y WITH DIAERESIS;Lu;0;L;0059 0308;;;;N;LATIN CAPITAL LETTER Y DIAERESIS;;;00FF; 0179;LATIN CAPITAL LETTER Z WITH ACUTE;Lu;0;L;005A 0301;;;;N;LATIN CAPITAL LETTER Z ACUTE;;;017A; 017A;LATIN SMALL LETTER Z WITH ACUTE;Ll;0;L;007A 0301;;;;N;LATIN SMALL LETTER Z ACUTE;;0179;;0179 017B;LATIN CAPITAL LETTER Z WITH DOT ABOVE;Lu;0;L;005A 0307;;;;N;LATIN CAPITAL LETTER Z DOT;;;017C; 017C;LATIN SMALL LETTER Z WITH DOT ABOVE;Ll;0;L;007A 0307;;;;N;LATIN SMALL LETTER Z DOT;;017B;;017B 017D;LATIN CAPITAL LETTER Z WITH CARON;Lu;0;L;005A 030C;;;;N;LATIN CAPITAL LETTER Z HACEK;;;017E; 017E;LATIN SMALL LETTER Z WITH CARON;Ll;0;L;007A 030C;;;;N;LATIN SMALL LETTER Z HACEK;;017D;;017D 017F;LATIN SMALL LETTER LONG S;Ll;0;L; 0073;;;;N;;;0053;;0053 0180;LATIN SMALL LETTER B WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER B BAR;;;; 0181;LATIN CAPITAL LETTER B WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER B HOOK;;;0253; 0182;LATIN CAPITAL LETTER B WITH TOPBAR;Lu;0;L;;;;;N;LATIN CAPITAL LETTER B TOPBAR;;;0183; 0183;LATIN SMALL LETTER B WITH TOPBAR;Ll;0;L;;;;;N;LATIN SMALL LETTER B TOPBAR;;0182;;0182 0184;LATIN CAPITAL LETTER TONE SIX;Lu;0;L;;;;;N;;;;0185; 0185;LATIN SMALL LETTER TONE SIX;Ll;0;L;;;;;N;;;0184;;0184 0186;LATIN CAPITAL LETTER OPEN O;Lu;0;L;;;;;N;;;;0254; 0187;LATIN CAPITAL LETTER C WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER C HOOK;;;0188; 0188;LATIN SMALL LETTER C WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER C HOOK;;0187;;0187 0189;LATIN CAPITAL LETTER AFRICAN D;Lu;0;L;;;;;N;;*;;0256; 018A;LATIN CAPITAL LETTER D WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER D HOOK;;;0257; 018B;LATIN CAPITAL LETTER D WITH TOPBAR;Lu;0;L;;;;;N;LATIN CAPITAL LETTER D TOPBAR;;;018C; 018C;LATIN SMALL LETTER D WITH TOPBAR;Ll;0;L;;;;;N;LATIN SMALL LETTER D TOPBAR;;018B;;018B 018D;LATIN SMALL LETTER TURNED DELTA;Ll;0;L;;;;;N;;;;; 018E;LATIN CAPITAL LETTER REVERSED E;Lu;0;L;;;;;N;LATIN CAPITAL LETTER TURNED E;;;01DD; 018F;LATIN CAPITAL LETTER SCHWA;Lu;0;L;;;;;N;;;;0259; 0190;LATIN CAPITAL LETTER OPEN E;Lu;0;L;;;;;N;LATIN CAPITAL LETTER EPSILON;;;025B; 0191;LATIN CAPITAL LETTER F WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER F HOOK;;;0192; 0192;LATIN SMALL LETTER F WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER SCRIPT F;;0191;;0191 0193;LATIN CAPITAL LETTER G WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER G HOOK;;;0260; 0194;LATIN CAPITAL LETTER GAMMA;Lu;0;L;;;;;N;;;;0263; 0195;LATIN SMALL LETTER HV;Ll;0;L;;;;;N;LATIN SMALL LETTER H V;hwair;01F6;;01F6 0196;LATIN CAPITAL LETTER IOTA;Lu;0;L;;;;;N;;;;0269; 0197;LATIN CAPITAL LETTER I WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER BARRED I;;;0268; 0198;LATIN CAPITAL LETTER K WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER K HOOK;;;0199; 0199;LATIN SMALL LETTER K WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER K HOOK;;0198;;0198 019A;LATIN SMALL LETTER L WITH BAR;Ll;0;L;;;;;N;LATIN SMALL LETTER BARRED L;;;; 019B;LATIN SMALL LETTER LAMBDA WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER BARRED LAMBDA;;;; 019C;LATIN CAPITAL LETTER TURNED M;Lu;0;L;;;;;N;;;;026F; 019D;LATIN CAPITAL LETTER N WITH LEFT HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER N HOOK;;;0272; 019E;LATIN SMALL LETTER N WITH LONG RIGHT LEG;Ll;0;L;;;;;N;;;;; 019F;LATIN CAPITAL LETTER O WITH MIDDLE TILDE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER BARRED O;*;;0275; 01A0;LATIN CAPITAL LETTER O WITH HORN;Lu;0;L;004F 031B;;;;N;LATIN CAPITAL LETTER O HORN;;;01A1; 01A1;LATIN SMALL LETTER O WITH HORN;Ll;0;L;006F 031B;;;;N;LATIN SMALL LETTER O HORN;;01A0;;01A0 01A2;LATIN CAPITAL LETTER OI;Lu;0;L;;;;;N;LATIN CAPITAL LETTER O I;gha;;01A3; 01A3;LATIN SMALL LETTER OI;Ll;0;L;;;;;N;LATIN SMALL LETTER O I;gha;01A2;;01A2 01A4;LATIN CAPITAL LETTER P WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER P HOOK;;;01A5; 01A5;LATIN SMALL LETTER P WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER P HOOK;;01A4;;01A4 01A6;LATIN LETTER YR;Lu;0;L;;;;;N;LATIN LETTER Y R;;;0280; 01A7;LATIN CAPITAL LETTER TONE TWO;Lu;0;L;;;;;N;;;;01A8; 01A8;LATIN SMALL LETTER TONE TWO;Ll;0;L;;;;;N;;;01A7;;01A7 01A9;LATIN CAPITAL LETTER ESH;Lu;0;L;;;;;N;;;;0283; 01AA;LATIN LETTER REVERSED ESH LOOP;Ll;0;L;;;;;N;;;;; 01AB;LATIN SMALL LETTER T WITH PALATAL HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER T PALATAL HOOK;;;; 01AC;LATIN CAPITAL LETTER T WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER T HOOK;;;01AD; 01AD;LATIN SMALL LETTER T WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER T HOOK;;01AC;;01AC 01AE;LATIN CAPITAL LETTER T WITH RETROFLEX HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER T RETROFLEX HOOK;;;0288; 01AF;LATIN CAPITAL LETTER U WITH HORN;Lu;0;L;0055 031B;;;;N;LATIN CAPITAL LETTER U HORN;;;01B0; 01B0;LATIN SMALL LETTER U WITH HORN;Ll;0;L;0075 031B;;;;N;LATIN SMALL LETTER U HORN;;01AF;;01AF 01B1;LATIN CAPITAL LETTER UPSILON;Lu;0;L;;;;;N;;;;028A; 01B2;LATIN CAPITAL LETTER V WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER SCRIPT V;;;028B; 01B3;LATIN CAPITAL LETTER Y WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER Y HOOK;;;01B4; 01B4;LATIN SMALL LETTER Y WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER Y HOOK;;01B3;;01B3 01B5;LATIN CAPITAL LETTER Z WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER Z BAR;;;01B6; 01B6;LATIN SMALL LETTER Z WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER Z BAR;;01B5;;01B5 01B7;LATIN CAPITAL LETTER EZH;Lu;0;L;;;;;N;LATIN CAPITAL LETTER YOGH;;;0292; 01B8;LATIN CAPITAL LETTER EZH REVERSED;Lu;0;L;;;;;N;LATIN CAPITAL LETTER REVERSED YOGH;;;01B9; 01B9;LATIN SMALL LETTER EZH REVERSED;Ll;0;L;;;;;N;LATIN SMALL LETTER REVERSED YOGH;;01B8;;01B8 01BA;LATIN SMALL LETTER EZH WITH TAIL;Ll;0;L;;;;;N;LATIN SMALL LETTER YOGH WITH TAIL;;;; 01BB;LATIN LETTER TWO WITH STROKE;Lo;0;L;;;;;N;LATIN LETTER TWO BAR;;;; 01BC;LATIN CAPITAL LETTER TONE FIVE;Lu;0;L;;;;;N;;;;01BD; 01BD;LATIN SMALL LETTER TONE FIVE;Ll;0;L;;;;;N;;;01BC;;01BC 01BE;LATIN LETTER INVERTED GLOTTAL STOP WITH STROKE;Ll;0;L;;;;;N;LATIN LETTER INVERTED GLOTTAL STOP BAR;;;; 01BF;LATIN LETTER WYNN;Ll;0;L;;;;;N;;;01F7;;01F7 01C0;LATIN LETTER DENTAL CLICK;Lo;0;L;;;;;N;LATIN LETTER PIPE;;;; 01C1;LATIN LETTER LATERAL CLICK;Lo;0;L;;;;;N;LATIN LETTER DOUBLE PIPE;;;; 01C2;LATIN LETTER ALVEOLAR CLICK;Lo;0;L;;;;;N;LATIN LETTER PIPE DOUBLE BAR;;;; 01C3;LATIN LETTER RETROFLEX CLICK;Lo;0;L;;;;;N;LATIN LETTER EXCLAMATION MARK;;;; 01C4;LATIN CAPITAL LETTER DZ WITH CARON;Lu;0;L; 0044 017D;;;;N;LATIN CAPITAL LETTER D Z HACEK;;;01C6;01C5 01C5;LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON;Lt;0;L; 0044 017E;;;;N;LATIN LETTER CAPITAL D SMALL Z HACEK;;01C4;01C6; 01C6;LATIN SMALL LETTER DZ WITH CARON;Ll;0;L; 0064 017E;;;;N;LATIN SMALL LETTER D Z HACEK;;01C4;;01C5 01C7;LATIN CAPITAL LETTER LJ;Lu;0;L; 004C 004A;;;;N;LATIN CAPITAL LETTER L J;;;01C9;01C8 01C8;LATIN CAPITAL LETTER L WITH SMALL LETTER J;Lt;0;L; 004C 006A;;;;N;LATIN LETTER CAPITAL L SMALL J;;01C7;01C9; 01C9;LATIN SMALL LETTER LJ;Ll;0;L; 006C 006A;;;;N;LATIN SMALL LETTER L J;;01C7;;01C8 01CA;LATIN CAPITAL LETTER NJ;Lu;0;L; 004E 004A;;;;N;LATIN CAPITAL LETTER N J;;;01CC;01CB 01CB;LATIN CAPITAL LETTER N WITH SMALL LETTER J;Lt;0;L; 004E 006A;;;;N;LATIN LETTER CAPITAL N SMALL J;;01CA;01CC; 01CC;LATIN SMALL LETTER NJ;Ll;0;L; 006E 006A;;;;N;LATIN SMALL LETTER N J;;01CA;;01CB 01CD;LATIN CAPITAL LETTER A WITH CARON;Lu;0;L;0041 030C;;;;N;LATIN CAPITAL LETTER A HACEK;;;01CE; 01CE;LATIN SMALL LETTER A WITH CARON;Ll;0;L;0061 030C;;;;N;LATIN SMALL LETTER A HACEK;;01CD;;01CD 01CF;LATIN CAPITAL LETTER I WITH CARON;Lu;0;L;0049 030C;;;;N;LATIN CAPITAL LETTER I HACEK;;;01D0; 01D0;LATIN SMALL LETTER I WITH CARON;Ll;0;L;0069 030C;;;;N;LATIN SMALL LETTER I HACEK;;01CF;;01CF 01D1;LATIN CAPITAL LETTER O WITH CARON;Lu;0;L;004F 030C;;;;N;LATIN CAPITAL LETTER O HACEK;;;01D2; 01D2;LATIN SMALL LETTER O WITH CARON;Ll;0;L;006F 030C;;;;N;LATIN SMALL LETTER O HACEK;;01D1;;01D1 01D3;LATIN CAPITAL LETTER U WITH CARON;Lu;0;L;0055 030C;;;;N;LATIN CAPITAL LETTER U HACEK;;;01D4; 01D4;LATIN SMALL LETTER U WITH CARON;Ll;0;L;0075 030C;;;;N;LATIN SMALL LETTER U HACEK;;01D3;;01D3 01D5;LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON;Lu;0;L;00DC 0304;;;;N;LATIN CAPITAL LETTER U DIAERESIS MACRON;;;01D6; 01D6;LATIN SMALL LETTER U WITH DIAERESIS AND MACRON;Ll;0;L;00FC 0304;;;;N;LATIN SMALL LETTER U DIAERESIS MACRON;;01D5;;01D5 01D7;LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE;Lu;0;L;00DC 0301;;;;N;LATIN CAPITAL LETTER U DIAERESIS ACUTE;;;01D8; 01D8;LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE;Ll;0;L;00FC 0301;;;;N;LATIN SMALL LETTER U DIAERESIS ACUTE;;01D7;;01D7 01D9;LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON;Lu;0;L;00DC 030C;;;;N;LATIN CAPITAL LETTER U DIAERESIS HACEK;;;01DA; 01DA;LATIN SMALL LETTER U WITH DIAERESIS AND CARON;Ll;0;L;00FC 030C;;;;N;LATIN SMALL LETTER U DIAERESIS HACEK;;01D9;;01D9 01DB;LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE;Lu;0;L;00DC 0300;;;;N;LATIN CAPITAL LETTER U DIAERESIS GRAVE;;;01DC; 01DC;LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE;Ll;0;L;00FC 0300;;;;N;LATIN SMALL LETTER U DIAERESIS GRAVE;;01DB;;01DB 01DD;LATIN SMALL LETTER TURNED E;Ll;0;L;;;;;N;;;018E;;018E 01DE;LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON;Lu;0;L;00C4 0304;;;;N;LATIN CAPITAL LETTER A DIAERESIS MACRON;;;01DF; 01DF;LATIN SMALL LETTER A WITH DIAERESIS AND MACRON;Ll;0;L;00E4 0304;;;;N;LATIN SMALL LETTER A DIAERESIS MACRON;;01DE;;01DE 01E0;LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON;Lu;0;L;0226 0304;;;;N;LATIN CAPITAL LETTER A DOT MACRON;;;01E1; 01E1;LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON;Ll;0;L;0227 0304;;;;N;LATIN SMALL LETTER A DOT MACRON;;01E0;;01E0 01E2;LATIN CAPITAL LETTER AE WITH MACRON;Lu;0;L;00C6 0304;;;;N;LATIN CAPITAL LETTER A E MACRON;ash *;;01E3; 01E3;LATIN SMALL LETTER AE WITH MACRON;Ll;0;L;00E6 0304;;;;N;LATIN SMALL LETTER A E MACRON;ash *;01E2;;01E2 01E4;LATIN CAPITAL LETTER G WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER G BAR;;;01E5; 01E5;LATIN SMALL LETTER G WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER G BAR;;01E4;;01E4 01E6;LATIN CAPITAL LETTER G WITH CARON;Lu;0;L;0047 030C;;;;N;LATIN CAPITAL LETTER G HACEK;;;01E7; 01E7;LATIN SMALL LETTER G WITH CARON;Ll;0;L;0067 030C;;;;N;LATIN SMALL LETTER G HACEK;;01E6;;01E6 01E8;LATIN CAPITAL LETTER K WITH CARON;Lu;0;L;004B 030C;;;;N;LATIN CAPITAL LETTER K HACEK;;;01E9; 01E9;LATIN SMALL LETTER K WITH CARON;Ll;0;L;006B 030C;;;;N;LATIN SMALL LETTER K HACEK;;01E8;;01E8 01EA;LATIN CAPITAL LETTER O WITH OGONEK;Lu;0;L;004F 0328;;;;N;LATIN CAPITAL LETTER O OGONEK;;;01EB; 01EB;LATIN SMALL LETTER O WITH OGONEK;Ll;0;L;006F 0328;;;;N;LATIN SMALL LETTER O OGONEK;;01EA;;01EA 01EC;LATIN CAPITAL LETTER O WITH OGONEK AND MACRON;Lu;0;L;01EA 0304;;;;N;LATIN CAPITAL LETTER O OGONEK MACRON;;;01ED; 01ED;LATIN SMALL LETTER O WITH OGONEK AND MACRON;Ll;0;L;01EB 0304;;;;N;LATIN SMALL LETTER O OGONEK MACRON;;01EC;;01EC 01EE;LATIN CAPITAL LETTER EZH WITH CARON;Lu;0;L;01B7 030C;;;;N;LATIN CAPITAL LETTER YOGH HACEK;;;01EF; 01EF;LATIN SMALL LETTER EZH WITH CARON;Ll;0;L;0292 030C;;;;N;LATIN SMALL LETTER YOGH HACEK;;01EE;;01EE 01F0;LATIN SMALL LETTER J WITH CARON;Ll;0;L;006A 030C;;;;N;LATIN SMALL LETTER J HACEK;;;; 01F1;LATIN CAPITAL LETTER DZ;Lu;0;L; 0044 005A;;;;N;;;;01F3;01F2 01F2;LATIN CAPITAL LETTER D WITH SMALL LETTER Z;Lt;0;L; 0044 007A;;;;N;;;01F1;01F3; 01F3;LATIN SMALL LETTER DZ;Ll;0;L; 0064 007A;;;;N;;;01F1;;01F2 01F4;LATIN CAPITAL LETTER G WITH ACUTE;Lu;0;L;0047 0301;;;;N;;;;01F5; 01F5;LATIN SMALL LETTER G WITH ACUTE;Ll;0;L;0067 0301;;;;N;;;01F4;;01F4 01F6;LATIN CAPITAL LETTER HWAIR;Lu;0;L;;;;;N;;;;0195; 01F7;LATIN CAPITAL LETTER WYNN;Lu;0;L;;;;;N;;;;01BF; 01F8;LATIN CAPITAL LETTER N WITH GRAVE;Lu;0;L;004E 0300;;;;N;;;;01F9; 01F9;LATIN SMALL LETTER N WITH GRAVE;Ll;0;L;006E 0300;;;;N;;;01F8;;01F8 01FA;LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE;Lu;0;L;00C5 0301;;;;N;;;;01FB; 01FB;LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE;Ll;0;L;00E5 0301;;;;N;;;01FA;;01FA 01FC;LATIN CAPITAL LETTER AE WITH ACUTE;Lu;0;L;00C6 0301;;;;N;;ash *;;01FD; 01FD;LATIN SMALL LETTER AE WITH ACUTE;Ll;0;L;00E6 0301;;;;N;;ash *;01FC;;01FC 01FE;LATIN CAPITAL LETTER O WITH STROKE AND ACUTE;Lu;0;L;00D8 0301;;;;N;;;;01FF; 01FF;LATIN SMALL LETTER O WITH STROKE AND ACUTE;Ll;0;L;00F8 0301;;;;N;;;01FE;;01FE 0200;LATIN CAPITAL LETTER A WITH DOUBLE GRAVE;Lu;0;L;0041 030F;;;;N;;;;0201; 0201;LATIN SMALL LETTER A WITH DOUBLE GRAVE;Ll;0;L;0061 030F;;;;N;;;0200;;0200 0202;LATIN CAPITAL LETTER A WITH INVERTED BREVE;Lu;0;L;0041 0311;;;;N;;;;0203; 0203;LATIN SMALL LETTER A WITH INVERTED BREVE;Ll;0;L;0061 0311;;;;N;;;0202;;0202 0204;LATIN CAPITAL LETTER E WITH DOUBLE GRAVE;Lu;0;L;0045 030F;;;;N;;;;0205; 0205;LATIN SMALL LETTER E WITH DOUBLE GRAVE;Ll;0;L;0065 030F;;;;N;;;0204;;0204 0206;LATIN CAPITAL LETTER E WITH INVERTED BREVE;Lu;0;L;0045 0311;;;;N;;;;0207; 0207;LATIN SMALL LETTER E WITH INVERTED BREVE;Ll;0;L;0065 0311;;;;N;;;0206;;0206 0208;LATIN CAPITAL LETTER I WITH DOUBLE GRAVE;Lu;0;L;0049 030F;;;;N;;;;0209; 0209;LATIN SMALL LETTER I WITH DOUBLE GRAVE;Ll;0;L;0069 030F;;;;N;;;0208;;0208 020A;LATIN CAPITAL LETTER I WITH INVERTED BREVE;Lu;0;L;0049 0311;;;;N;;;;020B; 020B;LATIN SMALL LETTER I WITH INVERTED BREVE;Ll;0;L;0069 0311;;;;N;;;020A;;020A 020C;LATIN CAPITAL LETTER O WITH DOUBLE GRAVE;Lu;0;L;004F 030F;;;;N;;;;020D; 020D;LATIN SMALL LETTER O WITH DOUBLE GRAVE;Ll;0;L;006F 030F;;;;N;;;020C;;020C 020E;LATIN CAPITAL LETTER O WITH INVERTED BREVE;Lu;0;L;004F 0311;;;;N;;;;020F; 020F;LATIN SMALL LETTER O WITH INVERTED BREVE;Ll;0;L;006F 0311;;;;N;;;020E;;020E 0210;LATIN CAPITAL LETTER R WITH DOUBLE GRAVE;Lu;0;L;0052 030F;;;;N;;;;0211; 0211;LATIN SMALL LETTER R WITH DOUBLE GRAVE;Ll;0;L;0072 030F;;;;N;;;0210;;0210 0212;LATIN CAPITAL LETTER R WITH INVERTED BREVE;Lu;0;L;0052 0311;;;;N;;;;0213; 0213;LATIN SMALL LETTER R WITH INVERTED BREVE;Ll;0;L;0072 0311;;;;N;;;0212;;0212 0214;LATIN CAPITAL LETTER U WITH DOUBLE GRAVE;Lu;0;L;0055 030F;;;;N;;;;0215; 0215;LATIN SMALL LETTER U WITH DOUBLE GRAVE;Ll;0;L;0075 030F;;;;N;;;0214;;0214 0216;LATIN CAPITAL LETTER U WITH INVERTED BREVE;Lu;0;L;0055 0311;;;;N;;;;0217; 0217;LATIN SMALL LETTER U WITH INVERTED BREVE;Ll;0;L;0075 0311;;;;N;;;0216;;0216 0218;LATIN CAPITAL LETTER S WITH COMMA BELOW;Lu;0;L;0053 0326;;;;N;;*;;0219; 0219;LATIN SMALL LETTER S WITH COMMA BELOW;Ll;0;L;0073 0326;;;;N;;*;0218;;0218 021A;LATIN CAPITAL LETTER T WITH COMMA BELOW;Lu;0;L;0054 0326;;;;N;;*;;021B; 021B;LATIN SMALL LETTER T WITH COMMA BELOW;Ll;0;L;0074 0326;;;;N;;*;021A;;021A 021C;LATIN CAPITAL LETTER YOGH;Lu;0;L;;;;;N;;;;021D; 021D;LATIN SMALL LETTER YOGH;Ll;0;L;;;;;N;;;021C;;021C 021E;LATIN CAPITAL LETTER H WITH CARON;Lu;0;L;0048 030C;;;;N;;;;021F; 021F;LATIN SMALL LETTER H WITH CARON;Ll;0;L;0068 030C;;;;N;;;021E;;021E 0222;LATIN CAPITAL LETTER OU;Lu;0;L;;;;;N;;;;0223; 0223;LATIN SMALL LETTER OU;Ll;0;L;;;;;N;;;0222;;0222 0224;LATIN CAPITAL LETTER Z WITH HOOK;Lu;0;L;;;;;N;;;;0225; 0225;LATIN SMALL LETTER Z WITH HOOK;Ll;0;L;;;;;N;;;0224;;0224 0226;LATIN CAPITAL LETTER A WITH DOT ABOVE;Lu;0;L;0041 0307;;;;N;;;;0227; 0227;LATIN SMALL LETTER A WITH DOT ABOVE;Ll;0;L;0061 0307;;;;N;;;0226;;0226 0228;LATIN CAPITAL LETTER E WITH CEDILLA;Lu;0;L;0045 0327;;;;N;;;;0229; 0229;LATIN SMALL LETTER E WITH CEDILLA;Ll;0;L;0065 0327;;;;N;;;0228;;0228 022A;LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON;Lu;0;L;00D6 0304;;;;N;;;;022B; 022B;LATIN SMALL LETTER O WITH DIAERESIS AND MACRON;Ll;0;L;00F6 0304;;;;N;;;022A;;022A 022C;LATIN CAPITAL LETTER O WITH TILDE AND MACRON;Lu;0;L;00D5 0304;;;;N;;;;022D; 022D;LATIN SMALL LETTER O WITH TILDE AND MACRON;Ll;0;L;00F5 0304;;;;N;;;022C;;022C 022E;LATIN CAPITAL LETTER O WITH DOT ABOVE;Lu;0;L;004F 0307;;;;N;;;;022F; 022F;LATIN SMALL LETTER O WITH DOT ABOVE;Ll;0;L;006F 0307;;;;N;;;022E;;022E 0230;LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON;Lu;0;L;022E 0304;;;;N;;;;0231; 0231;LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON;Ll;0;L;022F 0304;;;;N;;;0230;;0230 0232;LATIN CAPITAL LETTER Y WITH MACRON;Lu;0;L;0059 0304;;;;N;;;;0233; 0233;LATIN SMALL LETTER Y WITH MACRON;Ll;0;L;0079 0304;;;;N;;;0232;;0232 0250;LATIN SMALL LETTER TURNED A;Ll;0;L;;;;;N;;;;; 0251;LATIN SMALL LETTER ALPHA;Ll;0;L;;;;;N;LATIN SMALL LETTER SCRIPT A;;;; 0252;LATIN SMALL LETTER TURNED ALPHA;Ll;0;L;;;;;N;LATIN SMALL LETTER TURNED SCRIPT A;;;; 0253;LATIN SMALL LETTER B WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER B HOOK;;0181;;0181 0254;LATIN SMALL LETTER OPEN O;Ll;0;L;;;;;N;;;0186;;0186 0255;LATIN SMALL LETTER C WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER C CURL;;;; 0256;LATIN SMALL LETTER D WITH TAIL;Ll;0;L;;;;;N;LATIN SMALL LETTER D RETROFLEX HOOK;;0189;;0189 0257;LATIN SMALL LETTER D WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER D HOOK;;018A;;018A 0258;LATIN SMALL LETTER REVERSED E;Ll;0;L;;;;;N;;;;; 0259;LATIN SMALL LETTER SCHWA;Ll;0;L;;;;;N;;;018F;;018F 025A;LATIN SMALL LETTER SCHWA WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER SCHWA HOOK;;;; 025B;LATIN SMALL LETTER OPEN E;Ll;0;L;;;;;N;LATIN SMALL LETTER EPSILON;;0190;;0190 025C;LATIN SMALL LETTER REVERSED OPEN E;Ll;0;L;;;;;N;LATIN SMALL LETTER REVERSED EPSILON;;;; 025D;LATIN SMALL LETTER REVERSED OPEN E WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER REVERSED EPSILON HOOK;;;; 025E;LATIN SMALL LETTER CLOSED REVERSED OPEN E;Ll;0;L;;;;;N;LATIN SMALL LETTER CLOSED REVERSED EPSILON;;;; 025F;LATIN SMALL LETTER DOTLESS J WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER DOTLESS J BAR;;;; 0260;LATIN SMALL LETTER G WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER G HOOK;;0193;;0193 0261;LATIN SMALL LETTER SCRIPT G;Ll;0;L;;;;;N;;;;; 0262;LATIN LETTER SMALL CAPITAL G;Ll;0;L;;;;;N;;;;; 0263;LATIN SMALL LETTER GAMMA;Ll;0;L;;;;;N;;;0194;;0194 0264;LATIN SMALL LETTER RAMS HORN;Ll;0;L;;;;;N;LATIN SMALL LETTER BABY GAMMA;;;; 0265;LATIN SMALL LETTER TURNED H;Ll;0;L;;;;;N;;;;; 0266;LATIN SMALL LETTER H WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER H HOOK;;;; 0267;LATIN SMALL LETTER HENG WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER HENG HOOK;;;; 0268;LATIN SMALL LETTER I WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER BARRED I;;0197;;0197 0269;LATIN SMALL LETTER IOTA;Ll;0;L;;;;;N;;;0196;;0196 026A;LATIN LETTER SMALL CAPITAL I;Ll;0;L;;;;;N;;;;; 026B;LATIN SMALL LETTER L WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;; 026C;LATIN SMALL LETTER L WITH BELT;Ll;0;L;;;;;N;LATIN SMALL LETTER L BELT;;;; 026D;LATIN SMALL LETTER L WITH RETROFLEX HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER L RETROFLEX HOOK;;;; 026E;LATIN SMALL LETTER LEZH;Ll;0;L;;;;;N;LATIN SMALL LETTER L YOGH;;;; 026F;LATIN SMALL LETTER TURNED M;Ll;0;L;;;;;N;;;019C;;019C 0270;LATIN SMALL LETTER TURNED M WITH LONG LEG;Ll;0;L;;;;;N;;;;; 0271;LATIN SMALL LETTER M WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER M HOOK;;;; 0272;LATIN SMALL LETTER N WITH LEFT HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER N HOOK;;019D;;019D 0273;LATIN SMALL LETTER N WITH RETROFLEX HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER N RETROFLEX HOOK;;;; 0274;LATIN LETTER SMALL CAPITAL N;Ll;0;L;;;;;N;;;;; 0275;LATIN SMALL LETTER BARRED O;Ll;0;L;;;;;N;;;019F;;019F 0276;LATIN LETTER SMALL CAPITAL OE;Ll;0;L;;;;;N;LATIN LETTER SMALL CAPITAL O E;;;; 0277;LATIN SMALL LETTER CLOSED OMEGA;Ll;0;L;;;;;N;;;;; 0278;LATIN SMALL LETTER PHI;Ll;0;L;;;;;N;;;;; 0279;LATIN SMALL LETTER TURNED R;Ll;0;L;;;;;N;;;;; 027A;LATIN SMALL LETTER TURNED R WITH LONG LEG;Ll;0;L;;;;;N;;;;; 027B;LATIN SMALL LETTER TURNED R WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER TURNED R HOOK;;;; 027C;LATIN SMALL LETTER R WITH LONG LEG;Ll;0;L;;;;;N;;;;; 027D;LATIN SMALL LETTER R WITH TAIL;Ll;0;L;;;;;N;LATIN SMALL LETTER R HOOK;;;; 027E;LATIN SMALL LETTER R WITH FISHHOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER FISHHOOK R;;;; 027F;LATIN SMALL LETTER REVERSED R WITH FISHHOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER REVERSED FISHHOOK R;;;; 0280;LATIN LETTER SMALL CAPITAL R;Ll;0;L;;;;;N;;;01A6;;01A6 0281;LATIN LETTER SMALL CAPITAL INVERTED R;Ll;0;L;;;;;N;;;;; 0282;LATIN SMALL LETTER S WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER S HOOK;;;; 0283;LATIN SMALL LETTER ESH;Ll;0;L;;;;;N;;;01A9;;01A9 0284;LATIN SMALL LETTER DOTLESS J WITH STROKE AND HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER DOTLESS J BAR HOOK;;;; 0285;LATIN SMALL LETTER SQUAT REVERSED ESH;Ll;0;L;;;;;N;;;;; 0286;LATIN SMALL LETTER ESH WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER ESH CURL;;;; 0287;LATIN SMALL LETTER TURNED T;Ll;0;L;;;;;N;;;;; 0288;LATIN SMALL LETTER T WITH RETROFLEX HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER T RETROFLEX HOOK;;01AE;;01AE 0289;LATIN SMALL LETTER U BAR;Ll;0;L;;;;;N;;;;; 028A;LATIN SMALL LETTER UPSILON;Ll;0;L;;;;;N;;;01B1;;01B1 028B;LATIN SMALL LETTER V WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER SCRIPT V;;01B2;;01B2 028C;LATIN SMALL LETTER TURNED V;Ll;0;L;;;;;N;;;;; 028D;LATIN SMALL LETTER TURNED W;Ll;0;L;;;;;N;;;;; 028E;LATIN SMALL LETTER TURNED Y;Ll;0;L;;;;;N;;;;; 028F;LATIN LETTER SMALL CAPITAL Y;Ll;0;L;;;;;N;;;;; 0290;LATIN SMALL LETTER Z WITH RETROFLEX HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER Z RETROFLEX HOOK;;;; 0291;LATIN SMALL LETTER Z WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER Z CURL;;;; 0292;LATIN SMALL LETTER EZH;Ll;0;L;;;;;N;LATIN SMALL LETTER YOGH;;01B7;;01B7 0293;LATIN SMALL LETTER EZH WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER YOGH CURL;;;; 0294;LATIN LETTER GLOTTAL STOP;Ll;0;L;;;;;N;;;;; 0295;LATIN LETTER PHARYNGEAL VOICED FRICATIVE;Ll;0;L;;;;;N;LATIN LETTER REVERSED GLOTTAL STOP;;;; 0296;LATIN LETTER INVERTED GLOTTAL STOP;Ll;0;L;;;;;N;;;;; 0297;LATIN LETTER STRETCHED C;Ll;0;L;;;;;N;;;;; 0298;LATIN LETTER BILABIAL CLICK;Ll;0;L;;;;;N;LATIN LETTER BULLSEYE;;;; 0299;LATIN LETTER SMALL CAPITAL B;Ll;0;L;;;;;N;;;;; 029A;LATIN SMALL LETTER CLOSED OPEN E;Ll;0;L;;;;;N;LATIN SMALL LETTER CLOSED EPSILON;;;; 029B;LATIN LETTER SMALL CAPITAL G WITH HOOK;Ll;0;L;;;;;N;LATIN LETTER SMALL CAPITAL G HOOK;;;; 029C;LATIN LETTER SMALL CAPITAL H;Ll;0;L;;;;;N;;;;; 029D;LATIN SMALL LETTER J WITH CROSSED-TAIL;Ll;0;L;;;;;N;LATIN SMALL LETTER CROSSED-TAIL J;;;; 029E;LATIN SMALL LETTER TURNED K;Ll;0;L;;;;;N;;;;; 029F;LATIN LETTER SMALL CAPITAL L;Ll;0;L;;;;;N;;;;; 02A0;LATIN SMALL LETTER Q WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER Q HOOK;;;; 02A1;LATIN LETTER GLOTTAL STOP WITH STROKE;Ll;0;L;;;;;N;LATIN LETTER GLOTTAL STOP BAR;;;; 02A2;LATIN LETTER REVERSED GLOTTAL STOP WITH STROKE;Ll;0;L;;;;;N;LATIN LETTER REVERSED GLOTTAL STOP BAR;;;; 02A3;LATIN SMALL LETTER DZ DIGRAPH;Ll;0;L;;;;;N;LATIN SMALL LETTER D Z;;;; 02A4;LATIN SMALL LETTER DEZH DIGRAPH;Ll;0;L;;;;;N;LATIN SMALL LETTER D YOGH;;;; 02A5;LATIN SMALL LETTER DZ DIGRAPH WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER D Z CURL;;;; 02A6;LATIN SMALL LETTER TS DIGRAPH;Ll;0;L;;;;;N;LATIN SMALL LETTER T S;;;; 02A7;LATIN SMALL LETTER TESH DIGRAPH;Ll;0;L;;;;;N;LATIN SMALL LETTER T ESH;;;; 02A8;LATIN SMALL LETTER TC DIGRAPH WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER T C CURL;;;; 02A9;LATIN SMALL LETTER FENG DIGRAPH;Ll;0;L;;;;;N;;;;; 02AA;LATIN SMALL LETTER LS DIGRAPH;Ll;0;L;;;;;N;;;;; 02AB;LATIN SMALL LETTER LZ DIGRAPH;Ll;0;L;;;;;N;;;;; 02AC;LATIN LETTER BILABIAL PERCUSSIVE;Ll;0;L;;;;;N;;;;; 02AD;LATIN LETTER BIDENTAL PERCUSSIVE;Ll;0;L;;;;;N;;;;; 02B0;MODIFIER LETTER SMALL H;Lm;0;L; 0068;;;;N;;;;; 02B1;MODIFIER LETTER SMALL H WITH HOOK;Lm;0;L; 0266;;;;N;MODIFIER LETTER SMALL H HOOK;;;; 02B2;MODIFIER LETTER SMALL J;Lm;0;L; 006A;;;;N;;;;; 02B3;MODIFIER LETTER SMALL R;Lm;0;L; 0072;;;;N;;;;; 02B4;MODIFIER LETTER SMALL TURNED R;Lm;0;L; 0279;;;;N;;;;; 02B5;MODIFIER LETTER SMALL TURNED R WITH HOOK;Lm;0;L; 027B;;;;N;MODIFIER LETTER SMALL TURNED R HOOK;;;; 02B6;MODIFIER LETTER SMALL CAPITAL INVERTED R;Lm;0;L; 0281;;;;N;;;;; 02B7;MODIFIER LETTER SMALL W;Lm;0;L; 0077;;;;N;;;;; 02B8;MODIFIER LETTER SMALL Y;Lm;0;L; 0079;;;;N;;;;; 02B9;MODIFIER LETTER PRIME;Sk;0;ON;;;;;N;;;;; 02BA;MODIFIER LETTER DOUBLE PRIME;Sk;0;ON;;;;;N;;;;; 02BB;MODIFIER LETTER TURNED COMMA;Lm;0;L;;;;;N;;;;; 02BC;MODIFIER LETTER APOSTROPHE;Lm;0;L;;;;;N;;;;; 02BD;MODIFIER LETTER REVERSED COMMA;Lm;0;L;;;;;N;;;;; 02BE;MODIFIER LETTER RIGHT HALF RING;Lm;0;L;;;;;N;;;;; 02BF;MODIFIER LETTER LEFT HALF RING;Lm;0;L;;;;;N;;;;; 02C0;MODIFIER LETTER GLOTTAL STOP;Lm;0;L;;;;;N;;;;; 02C1;MODIFIER LETTER REVERSED GLOTTAL STOP;Lm;0;L;;;;;N;;;;; 02C2;MODIFIER LETTER LEFT ARROWHEAD;Sk;0;ON;;;;;N;;;;; 02C3;MODIFIER LETTER RIGHT ARROWHEAD;Sk;0;ON;;;;;N;;;;; 02C4;MODIFIER LETTER UP ARROWHEAD;Sk;0;ON;;;;;N;;;;; 02C5;MODIFIER LETTER DOWN ARROWHEAD;Sk;0;ON;;;;;N;;;;; 02C6;MODIFIER LETTER CIRCUMFLEX ACCENT;Sk;0;ON;;;;;N;MODIFIER LETTER CIRCUMFLEX;;;; 02C7;CARON;Sk;0;ON;;;;;N;MODIFIER LETTER HACEK;Mandarin Chinese third tone;;; 02C8;MODIFIER LETTER VERTICAL LINE;Sk;0;ON;;;;;N;;;;; 02C9;MODIFIER LETTER MACRON;Sk;0;ON;;;;;N;;Mandarin Chinese first tone;;; 02CA;MODIFIER LETTER ACUTE ACCENT;Sk;0;ON;;;;;N;MODIFIER LETTER ACUTE;Mandarin Chinese second tone;;; 02CB;MODIFIER LETTER GRAVE ACCENT;Sk;0;ON;;;;;N;MODIFIER LETTER GRAVE;Mandarin Chinese fourth tone;;; 02CC;MODIFIER LETTER LOW VERTICAL LINE;Sk;0;ON;;;;;N;;;;; 02CD;MODIFIER LETTER LOW MACRON;Sk;0;ON;;;;;N;;;;; 02CE;MODIFIER LETTER LOW GRAVE ACCENT;Sk;0;ON;;;;;N;MODIFIER LETTER LOW GRAVE;;;; 02CF;MODIFIER LETTER LOW ACUTE ACCENT;Sk;0;ON;;;;;N;MODIFIER LETTER LOW ACUTE;;;; 02D0;MODIFIER LETTER TRIANGULAR COLON;Lm;0;L;;;;;N;;;;; 02D1;MODIFIER LETTER HALF TRIANGULAR COLON;Lm;0;L;;;;;N;;;;; 02D2;MODIFIER LETTER CENTRED RIGHT HALF RING;Sk;0;ON;;;;;N;MODIFIER LETTER CENTERED RIGHT HALF RING;;;; 02D3;MODIFIER LETTER CENTRED LEFT HALF RING;Sk;0;ON;;;;;N;MODIFIER LETTER CENTERED LEFT HALF RING;;;; 02D4;MODIFIER LETTER UP TACK;Sk;0;ON;;;;;N;;;;; 02D5;MODIFIER LETTER DOWN TACK;Sk;0;ON;;;;;N;;;;; 02D6;MODIFIER LETTER PLUS SIGN;Sk;0;ON;;;;;N;;;;; 02D7;MODIFIER LETTER MINUS SIGN;Sk;0;ON;;;;;N;;;;; 02D8;BREVE;Sk;0;ON; 0020 0306;;;;N;SPACING BREVE;;;; 02D9;DOT ABOVE;Sk;0;ON; 0020 0307;;;;N;SPACING DOT ABOVE;Mandarin Chinese light tone;;; 02DA;RING ABOVE;Sk;0;ON; 0020 030A;;;;N;SPACING RING ABOVE;;;; 02DB;OGONEK;Sk;0;ON; 0020 0328;;;;N;SPACING OGONEK;;;; 02DC;SMALL TILDE;Sk;0;ON; 0020 0303;;;;N;SPACING TILDE;;;; 02DD;DOUBLE ACUTE ACCENT;Sk;0;ON; 0020 030B;;;;N;SPACING DOUBLE ACUTE;;;; 02DE;MODIFIER LETTER RHOTIC HOOK;Sk;0;ON;;;;;N;;;;; 02DF;MODIFIER LETTER CROSS ACCENT;Sk;0;ON;;;;;N;;;;; 02E0;MODIFIER LETTER SMALL GAMMA;Lm;0;L; 0263;;;;N;;;;; 02E1;MODIFIER LETTER SMALL L;Lm;0;L; 006C;;;;N;;;;; 02E2;MODIFIER LETTER SMALL S;Lm;0;L; 0073;;;;N;;;;; 02E3;MODIFIER LETTER SMALL X;Lm;0;L; 0078;;;;N;;;;; 02E4;MODIFIER LETTER SMALL REVERSED GLOTTAL STOP;Lm;0;L; 0295;;;;N;;;;; 02E5;MODIFIER LETTER EXTRA-HIGH TONE BAR;Sk;0;ON;;;;;N;;;;; 02E6;MODIFIER LETTER HIGH TONE BAR;Sk;0;ON;;;;;N;;;;; 02E7;MODIFIER LETTER MID TONE BAR;Sk;0;ON;;;;;N;;;;; 02E8;MODIFIER LETTER LOW TONE BAR;Sk;0;ON;;;;;N;;;;; 02E9;MODIFIER LETTER EXTRA-LOW TONE BAR;Sk;0;ON;;;;;N;;;;; 02EA;MODIFIER LETTER YIN DEPARTING TONE MARK;Sk;0;ON;;;;;N;;;;; 02EB;MODIFIER LETTER YANG DEPARTING TONE MARK;Sk;0;ON;;;;;N;;;;; 02EC;MODIFIER LETTER VOICING;Sk;0;ON;;;;;N;;;;; 02ED;MODIFIER LETTER UNASPIRATED;Sk;0;ON;;;;;N;;;;; 02EE;MODIFIER LETTER DOUBLE APOSTROPHE;Lm;0;L;;;;;N;;;;; 0300;COMBINING GRAVE ACCENT;Mn;230;NSM;;;;;N;NON-SPACING GRAVE;Varia;;; 0301;COMBINING ACUTE ACCENT;Mn;230;NSM;;;;;N;NON-SPACING ACUTE;Oxia;;; 0302;COMBINING CIRCUMFLEX ACCENT;Mn;230;NSM;;;;;N;NON-SPACING CIRCUMFLEX;;;; 0303;COMBINING TILDE;Mn;230;NSM;;;;;N;NON-SPACING TILDE;;;; 0304;COMBINING MACRON;Mn;230;NSM;;;;;N;NON-SPACING MACRON;;;; 0305;COMBINING OVERLINE;Mn;230;NSM;;;;;N;NON-SPACING OVERSCORE;;;; 0306;COMBINING BREVE;Mn;230;NSM;;;;;N;NON-SPACING BREVE;Vrachy;;; 0307;COMBINING DOT ABOVE;Mn;230;NSM;;;;;N;NON-SPACING DOT ABOVE;;;; 0308;COMBINING DIAERESIS;Mn;230;NSM;;;;;N;NON-SPACING DIAERESIS;Dialytika;;; 0309;COMBINING HOOK ABOVE;Mn;230;NSM;;;;;N;NON-SPACING HOOK ABOVE;;;; 030A;COMBINING RING ABOVE;Mn;230;NSM;;;;;N;NON-SPACING RING ABOVE;;;; 030B;COMBINING DOUBLE ACUTE ACCENT;Mn;230;NSM;;;;;N;NON-SPACING DOUBLE ACUTE;;;; 030C;COMBINING CARON;Mn;230;NSM;;;;;N;NON-SPACING HACEK;;;; 030D;COMBINING VERTICAL LINE ABOVE;Mn;230;NSM;;;;;N;NON-SPACING VERTICAL LINE ABOVE;Tonos;;; 030E;COMBINING DOUBLE VERTICAL LINE ABOVE;Mn;230;NSM;;;;;N;NON-SPACING DOUBLE VERTICAL LINE ABOVE;;;; 030F;COMBINING DOUBLE GRAVE ACCENT;Mn;230;NSM;;;;;N;NON-SPACING DOUBLE GRAVE;;;; 0310;COMBINING CANDRABINDU;Mn;230;NSM;;;;;N;NON-SPACING CANDRABINDU;;;; 0311;COMBINING INVERTED BREVE;Mn;230;NSM;;;;;N;NON-SPACING INVERTED BREVE;;;; 0312;COMBINING TURNED COMMA ABOVE;Mn;230;NSM;;;;;N;NON-SPACING TURNED COMMA ABOVE;;;; 0313;COMBINING COMMA ABOVE;Mn;230;NSM;;;;;N;NON-SPACING COMMA ABOVE;Psili;;; 0314;COMBINING REVERSED COMMA ABOVE;Mn;230;NSM;;;;;N;NON-SPACING REVERSED COMMA ABOVE;Dasia;;; 0315;COMBINING COMMA ABOVE RIGHT;Mn;232;NSM;;;;;N;NON-SPACING COMMA ABOVE RIGHT;;;; 0316;COMBINING GRAVE ACCENT BELOW;Mn;220;NSM;;;;;N;NON-SPACING GRAVE BELOW;;;; 0317;COMBINING ACUTE ACCENT BELOW;Mn;220;NSM;;;;;N;NON-SPACING ACUTE BELOW;;;; 0318;COMBINING LEFT TACK BELOW;Mn;220;NSM;;;;;N;NON-SPACING LEFT TACK BELOW;;;; 0319;COMBINING RIGHT TACK BELOW;Mn;220;NSM;;;;;N;NON-SPACING RIGHT TACK BELOW;;;; 031A;COMBINING LEFT ANGLE ABOVE;Mn;232;NSM;;;;;N;NON-SPACING LEFT ANGLE ABOVE;;;; 031B;COMBINING HORN;Mn;216;NSM;;;;;N;NON-SPACING HORN;;;; 031C;COMBINING LEFT HALF RING BELOW;Mn;220;NSM;;;;;N;NON-SPACING LEFT HALF RING BELOW;;;; 031D;COMBINING UP TACK BELOW;Mn;220;NSM;;;;;N;NON-SPACING UP TACK BELOW;;;; 031E;COMBINING DOWN TACK BELOW;Mn;220;NSM;;;;;N;NON-SPACING DOWN TACK BELOW;;;; 031F;COMBINING PLUS SIGN BELOW;Mn;220;NSM;;;;;N;NON-SPACING PLUS SIGN BELOW;;;; 0320;COMBINING MINUS SIGN BELOW;Mn;220;NSM;;;;;N;NON-SPACING MINUS SIGN BELOW;;;; 0321;COMBINING PALATALIZED HOOK BELOW;Mn;202;NSM;;;;;N;NON-SPACING PALATALIZED HOOK BELOW;;;; 0322;COMBINING RETROFLEX HOOK BELOW;Mn;202;NSM;;;;;N;NON-SPACING RETROFLEX HOOK BELOW;;;; 0323;COMBINING DOT BELOW;Mn;220;NSM;;;;;N;NON-SPACING DOT BELOW;;;; 0324;COMBINING DIAERESIS BELOW;Mn;220;NSM;;;;;N;NON-SPACING DOUBLE DOT BELOW;;;; 0325;COMBINING RING BELOW;Mn;220;NSM;;;;;N;NON-SPACING RING BELOW;;;; 0326;COMBINING COMMA BELOW;Mn;220;NSM;;;;;N;NON-SPACING COMMA BELOW;;;; 0327;COMBINING CEDILLA;Mn;202;NSM;;;;;N;NON-SPACING CEDILLA;;;; 0328;COMBINING OGONEK;Mn;202;NSM;;;;;N;NON-SPACING OGONEK;;;; 0329;COMBINING VERTICAL LINE BELOW;Mn;220;NSM;;;;;N;NON-SPACING VERTICAL LINE BELOW;;;; 032A;COMBINING BRIDGE BELOW;Mn;220;NSM;;;;;N;NON-SPACING BRIDGE BELOW;;;; 032B;COMBINING INVERTED DOUBLE ARCH BELOW;Mn;220;NSM;;;;;N;NON-SPACING INVERTED DOUBLE ARCH BELOW;;;; 032C;COMBINING CARON BELOW;Mn;220;NSM;;;;;N;NON-SPACING HACEK BELOW;;;; 032D;COMBINING CIRCUMFLEX ACCENT BELOW;Mn;220;NSM;;;;;N;NON-SPACING CIRCUMFLEX BELOW;;;; 032E;COMBINING BREVE BELOW;Mn;220;NSM;;;;;N;NON-SPACING BREVE BELOW;;;; 032F;COMBINING INVERTED BREVE BELOW;Mn;220;NSM;;;;;N;NON-SPACING INVERTED BREVE BELOW;;;; 0330;COMBINING TILDE BELOW;Mn;220;NSM;;;;;N;NON-SPACING TILDE BELOW;;;; 0331;COMBINING MACRON BELOW;Mn;220;NSM;;;;;N;NON-SPACING MACRON BELOW;;;; 0332;COMBINING LOW LINE;Mn;220;NSM;;;;;N;NON-SPACING UNDERSCORE;;;; 0333;COMBINING DOUBLE LOW LINE;Mn;220;NSM;;;;;N;NON-SPACING DOUBLE UNDERSCORE;;;; 0334;COMBINING TILDE OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING TILDE OVERLAY;;;; 0335;COMBINING SHORT STROKE OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING SHORT BAR OVERLAY;;;; 0336;COMBINING LONG STROKE OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING LONG BAR OVERLAY;;;; 0337;COMBINING SHORT SOLIDUS OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING SHORT SLASH OVERLAY;;;; 0338;COMBINING LONG SOLIDUS OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING LONG SLASH OVERLAY;;;; 0339;COMBINING RIGHT HALF RING BELOW;Mn;220;NSM;;;;;N;NON-SPACING RIGHT HALF RING BELOW;;;; 033A;COMBINING INVERTED BRIDGE BELOW;Mn;220;NSM;;;;;N;NON-SPACING INVERTED BRIDGE BELOW;;;; 033B;COMBINING SQUARE BELOW;Mn;220;NSM;;;;;N;NON-SPACING SQUARE BELOW;;;; 033C;COMBINING SEAGULL BELOW;Mn;220;NSM;;;;;N;NON-SPACING SEAGULL BELOW;;;; 033D;COMBINING X ABOVE;Mn;230;NSM;;;;;N;NON-SPACING X ABOVE;;;; 033E;COMBINING VERTICAL TILDE;Mn;230;NSM;;;;;N;NON-SPACING VERTICAL TILDE;;;; 033F;COMBINING DOUBLE OVERLINE;Mn;230;NSM;;;;;N;NON-SPACING DOUBLE OVERSCORE;;;; 0340;COMBINING GRAVE TONE MARK;Mn;230;NSM;0300;;;;N;NON-SPACING GRAVE TONE MARK;Vietnamese;;; 0341;COMBINING ACUTE TONE MARK;Mn;230;NSM;0301;;;;N;NON-SPACING ACUTE TONE MARK;Vietnamese;;; 0342;COMBINING GREEK PERISPOMENI;Mn;230;NSM;;;;;N;;;;; 0343;COMBINING GREEK KORONIS;Mn;230;NSM;0313;;;;N;;;;; 0344;COMBINING GREEK DIALYTIKA TONOS;Mn;230;NSM;0308 0301;;;;N;GREEK NON-SPACING DIAERESIS TONOS;;;; 0345;COMBINING GREEK YPOGEGRAMMENI;Mn;240;NSM;;;;;N;GREEK NON-SPACING IOTA BELOW;;0399;;0399 0346;COMBINING BRIDGE ABOVE;Mn;230;NSM;;;;;N;;;;; 0347;COMBINING EQUALS SIGN BELOW;Mn;220;NSM;;;;;N;;;;; 0348;COMBINING DOUBLE VERTICAL LINE BELOW;Mn;220;NSM;;;;;N;;;;; 0349;COMBINING LEFT ANGLE BELOW;Mn;220;NSM;;;;;N;;;;; 034A;COMBINING NOT TILDE ABOVE;Mn;230;NSM;;;;;N;;;;; 034B;COMBINING HOMOTHETIC ABOVE;Mn;230;NSM;;;;;N;;;;; 034C;COMBINING ALMOST EQUAL TO ABOVE;Mn;230;NSM;;;;;N;;;;; 034D;COMBINING LEFT RIGHT ARROW BELOW;Mn;220;NSM;;;;;N;;;;; 034E;COMBINING UPWARDS ARROW BELOW;Mn;220;NSM;;;;;N;;;;; 0360;COMBINING DOUBLE TILDE;Mn;234;NSM;;;;;N;;;;; 0361;COMBINING DOUBLE INVERTED BREVE;Mn;234;NSM;;;;;N;;;;; 0362;COMBINING DOUBLE RIGHTWARDS ARROW BELOW;Mn;233;NSM;;;;;N;;;;; 0374;GREEK NUMERAL SIGN;Sk;0;ON;02B9;;;;N;GREEK UPPER NUMERAL SIGN;Dexia keraia;;; 0375;GREEK LOWER NUMERAL SIGN;Sk;0;ON;;;;;N;;Aristeri keraia;;; 037A;GREEK YPOGEGRAMMENI;Lm;0;L; 0020 0345;;;;N;GREEK SPACING IOTA BELOW;;;; 037E;GREEK QUESTION MARK;Po;0;ON;003B;;;;N;;Erotimatiko;;; 0384;GREEK TONOS;Sk;0;ON; 0020 0301;;;;N;GREEK SPACING TONOS;;;; 0385;GREEK DIALYTIKA TONOS;Sk;0;ON;00A8 0301;;;;N;GREEK SPACING DIAERESIS TONOS;;;; 0386;GREEK CAPITAL LETTER ALPHA WITH TONOS;Lu;0;L;0391 0301;;;;N;GREEK CAPITAL LETTER ALPHA TONOS;;;03AC; 0387;GREEK ANO TELEIA;Po;0;ON;00B7;;;;N;;;;; 0388;GREEK CAPITAL LETTER EPSILON WITH TONOS;Lu;0;L;0395 0301;;;;N;GREEK CAPITAL LETTER EPSILON TONOS;;;03AD; 0389;GREEK CAPITAL LETTER ETA WITH TONOS;Lu;0;L;0397 0301;;;;N;GREEK CAPITAL LETTER ETA TONOS;;;03AE; 038A;GREEK CAPITAL LETTER IOTA WITH TONOS;Lu;0;L;0399 0301;;;;N;GREEK CAPITAL LETTER IOTA TONOS;;;03AF; 038C;GREEK CAPITAL LETTER OMICRON WITH TONOS;Lu;0;L;039F 0301;;;;N;GREEK CAPITAL LETTER OMICRON TONOS;;;03CC; 038E;GREEK CAPITAL LETTER UPSILON WITH TONOS;Lu;0;L;03A5 0301;;;;N;GREEK CAPITAL LETTER UPSILON TONOS;;;03CD; 038F;GREEK CAPITAL LETTER OMEGA WITH TONOS;Lu;0;L;03A9 0301;;;;N;GREEK CAPITAL LETTER OMEGA TONOS;;;03CE; 0390;GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS;Ll;0;L;03CA 0301;;;;N;GREEK SMALL LETTER IOTA DIAERESIS TONOS;;;; 0391;GREEK CAPITAL LETTER ALPHA;Lu;0;L;;;;;N;;;;03B1; 0392;GREEK CAPITAL LETTER BETA;Lu;0;L;;;;;N;;;;03B2; 0393;GREEK CAPITAL LETTER GAMMA;Lu;0;L;;;;;N;;;;03B3; 0394;GREEK CAPITAL LETTER DELTA;Lu;0;L;;;;;N;;;;03B4; 0395;GREEK CAPITAL LETTER EPSILON;Lu;0;L;;;;;N;;;;03B5; 0396;GREEK CAPITAL LETTER ZETA;Lu;0;L;;;;;N;;;;03B6; 0397;GREEK CAPITAL LETTER ETA;Lu;0;L;;;;;N;;;;03B7; 0398;GREEK CAPITAL LETTER THETA;Lu;0;L;;;;;N;;;;03B8; 0399;GREEK CAPITAL LETTER IOTA;Lu;0;L;;;;;N;;;;03B9; 039A;GREEK CAPITAL LETTER KAPPA;Lu;0;L;;;;;N;;;;03BA; 039B;GREEK CAPITAL LETTER LAMDA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER LAMBDA;;;03BB; 039C;GREEK CAPITAL LETTER MU;Lu;0;L;;;;;N;;;;03BC; 039D;GREEK CAPITAL LETTER NU;Lu;0;L;;;;;N;;;;03BD; 039E;GREEK CAPITAL LETTER XI;Lu;0;L;;;;;N;;;;03BE; 039F;GREEK CAPITAL LETTER OMICRON;Lu;0;L;;;;;N;;;;03BF; 03A0;GREEK CAPITAL LETTER PI;Lu;0;L;;;;;N;;;;03C0; 03A1;GREEK CAPITAL LETTER RHO;Lu;0;L;;;;;N;;;;03C1; 03A3;GREEK CAPITAL LETTER SIGMA;Lu;0;L;;;;;N;;;;03C3; 03A4;GREEK CAPITAL LETTER TAU;Lu;0;L;;;;;N;;;;03C4; 03A5;GREEK CAPITAL LETTER UPSILON;Lu;0;L;;;;;N;;;;03C5; 03A6;GREEK CAPITAL LETTER PHI;Lu;0;L;;;;;N;;;;03C6; 03A7;GREEK CAPITAL LETTER CHI;Lu;0;L;;;;;N;;;;03C7; 03A8;GREEK CAPITAL LETTER PSI;Lu;0;L;;;;;N;;;;03C8; 03A9;GREEK CAPITAL LETTER OMEGA;Lu;0;L;;;;;N;;;;03C9; 03AA;GREEK CAPITAL LETTER IOTA WITH DIALYTIKA;Lu;0;L;0399 0308;;;;N;GREEK CAPITAL LETTER IOTA DIAERESIS;;;03CA; 03AB;GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA;Lu;0;L;03A5 0308;;;;N;GREEK CAPITAL LETTER UPSILON DIAERESIS;;;03CB; 03AC;GREEK SMALL LETTER ALPHA WITH TONOS;Ll;0;L;03B1 0301;;;;N;GREEK SMALL LETTER ALPHA TONOS;;0386;;0386 03AD;GREEK SMALL LETTER EPSILON WITH TONOS;Ll;0;L;03B5 0301;;;;N;GREEK SMALL LETTER EPSILON TONOS;;0388;;0388 03AE;GREEK SMALL LETTER ETA WITH TONOS;Ll;0;L;03B7 0301;;;;N;GREEK SMALL LETTER ETA TONOS;;0389;;0389 03AF;GREEK SMALL LETTER IOTA WITH TONOS;Ll;0;L;03B9 0301;;;;N;GREEK SMALL LETTER IOTA TONOS;;038A;;038A 03B0;GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS;Ll;0;L;03CB 0301;;;;N;GREEK SMALL LETTER UPSILON DIAERESIS TONOS;;;; 03B1;GREEK SMALL LETTER ALPHA;Ll;0;L;;;;;N;;;0391;;0391 03B2;GREEK SMALL LETTER BETA;Ll;0;L;;;;;N;;;0392;;0392 03B3;GREEK SMALL LETTER GAMMA;Ll;0;L;;;;;N;;;0393;;0393 03B4;GREEK SMALL LETTER DELTA;Ll;0;L;;;;;N;;;0394;;0394 03B5;GREEK SMALL LETTER EPSILON;Ll;0;L;;;;;N;;;0395;;0395 03B6;GREEK SMALL LETTER ZETA;Ll;0;L;;;;;N;;;0396;;0396 03B7;GREEK SMALL LETTER ETA;Ll;0;L;;;;;N;;;0397;;0397 03B8;GREEK SMALL LETTER THETA;Ll;0;L;;;;;N;;;0398;;0398 03B9;GREEK SMALL LETTER IOTA;Ll;0;L;;;;;N;;;0399;;0399 03BA;GREEK SMALL LETTER KAPPA;Ll;0;L;;;;;N;;;039A;;039A 03BB;GREEK SMALL LETTER LAMDA;Ll;0;L;;;;;N;GREEK SMALL LETTER LAMBDA;;039B;;039B 03BC;GREEK SMALL LETTER MU;Ll;0;L;;;;;N;;;039C;;039C 03BD;GREEK SMALL LETTER NU;Ll;0;L;;;;;N;;;039D;;039D 03BE;GREEK SMALL LETTER XI;Ll;0;L;;;;;N;;;039E;;039E 03BF;GREEK SMALL LETTER OMICRON;Ll;0;L;;;;;N;;;039F;;039F 03C0;GREEK SMALL LETTER PI;Ll;0;L;;;;;N;;;03A0;;03A0 03C1;GREEK SMALL LETTER RHO;Ll;0;L;;;;;N;;;03A1;;03A1 03C2;GREEK SMALL LETTER FINAL SIGMA;Ll;0;L;;;;;N;;;03A3;;03A3 03C3;GREEK SMALL LETTER SIGMA;Ll;0;L;;;;;N;;;03A3;;03A3 03C4;GREEK SMALL LETTER TAU;Ll;0;L;;;;;N;;;03A4;;03A4 03C5;GREEK SMALL LETTER UPSILON;Ll;0;L;;;;;N;;;03A5;;03A5 03C6;GREEK SMALL LETTER PHI;Ll;0;L;;;;;N;;;03A6;;03A6 03C7;GREEK SMALL LETTER CHI;Ll;0;L;;;;;N;;;03A7;;03A7 03C8;GREEK SMALL LETTER PSI;Ll;0;L;;;;;N;;;03A8;;03A8 03C9;GREEK SMALL LETTER OMEGA;Ll;0;L;;;;;N;;;03A9;;03A9 03CA;GREEK SMALL LETTER IOTA WITH DIALYTIKA;Ll;0;L;03B9 0308;;;;N;GREEK SMALL LETTER IOTA DIAERESIS;;03AA;;03AA 03CB;GREEK SMALL LETTER UPSILON WITH DIALYTIKA;Ll;0;L;03C5 0308;;;;N;GREEK SMALL LETTER UPSILON DIAERESIS;;03AB;;03AB 03CC;GREEK SMALL LETTER OMICRON WITH TONOS;Ll;0;L;03BF 0301;;;;N;GREEK SMALL LETTER OMICRON TONOS;;038C;;038C 03CD;GREEK SMALL LETTER UPSILON WITH TONOS;Ll;0;L;03C5 0301;;;;N;GREEK SMALL LETTER UPSILON TONOS;;038E;;038E 03CE;GREEK SMALL LETTER OMEGA WITH TONOS;Ll;0;L;03C9 0301;;;;N;GREEK SMALL LETTER OMEGA TONOS;;038F;;038F 03D0;GREEK BETA SYMBOL;Ll;0;L; 03B2;;;;N;GREEK SMALL LETTER CURLED BETA;;0392;;0392 03D1;GREEK THETA SYMBOL;Ll;0;L; 03B8;;;;N;GREEK SMALL LETTER SCRIPT THETA;;0398;;0398 03D2;GREEK UPSILON WITH HOOK SYMBOL;Lu;0;L; 03A5;;;;N;GREEK CAPITAL LETTER UPSILON HOOK;;;; 03D3;GREEK UPSILON WITH ACUTE AND HOOK SYMBOL;Lu;0;L;03D2 0301;;;;N;GREEK CAPITAL LETTER UPSILON HOOK TONOS;;;; 03D4;GREEK UPSILON WITH DIAERESIS AND HOOK SYMBOL;Lu;0;L;03D2 0308;;;;N;GREEK CAPITAL LETTER UPSILON HOOK DIAERESIS;;;; 03D5;GREEK PHI SYMBOL;Ll;0;L; 03C6;;;;N;GREEK SMALL LETTER SCRIPT PHI;;03A6;;03A6 03D6;GREEK PI SYMBOL;Ll;0;L; 03C0;;;;N;GREEK SMALL LETTER OMEGA PI;;03A0;;03A0 03D7;GREEK KAI SYMBOL;Ll;0;L;;;;;N;;;;; 03DA;GREEK LETTER STIGMA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER STIGMA;;;03DB; 03DB;GREEK SMALL LETTER STIGMA;Ll;0;L;;;;;N;;;03DA;;03DA 03DC;GREEK LETTER DIGAMMA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER DIGAMMA;;;03DD; 03DD;GREEK SMALL LETTER DIGAMMA;Ll;0;L;;;;;N;;;03DC;;03DC 03DE;GREEK LETTER KOPPA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER KOPPA;;;03DF; 03DF;GREEK SMALL LETTER KOPPA;Ll;0;L;;;;;N;;;03DE;;03DE 03E0;GREEK LETTER SAMPI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER SAMPI;;;03E1; 03E1;GREEK SMALL LETTER SAMPI;Ll;0;L;;;;;N;;;03E0;;03E0 03E2;COPTIC CAPITAL LETTER SHEI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER SHEI;;;03E3; 03E3;COPTIC SMALL LETTER SHEI;Ll;0;L;;;;;N;GREEK SMALL LETTER SHEI;;03E2;;03E2 03E4;COPTIC CAPITAL LETTER FEI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER FEI;;;03E5; 03E5;COPTIC SMALL LETTER FEI;Ll;0;L;;;;;N;GREEK SMALL LETTER FEI;;03E4;;03E4 03E6;COPTIC CAPITAL LETTER KHEI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER KHEI;;;03E7; 03E7;COPTIC SMALL LETTER KHEI;Ll;0;L;;;;;N;GREEK SMALL LETTER KHEI;;03E6;;03E6 03E8;COPTIC CAPITAL LETTER HORI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER HORI;;;03E9; 03E9;COPTIC SMALL LETTER HORI;Ll;0;L;;;;;N;GREEK SMALL LETTER HORI;;03E8;;03E8 03EA;COPTIC CAPITAL LETTER GANGIA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER GANGIA;;;03EB; 03EB;COPTIC SMALL LETTER GANGIA;Ll;0;L;;;;;N;GREEK SMALL LETTER GANGIA;;03EA;;03EA 03EC;COPTIC CAPITAL LETTER SHIMA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER SHIMA;;;03ED; 03ED;COPTIC SMALL LETTER SHIMA;Ll;0;L;;;;;N;GREEK SMALL LETTER SHIMA;;03EC;;03EC 03EE;COPTIC CAPITAL LETTER DEI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER DEI;;;03EF; 03EF;COPTIC SMALL LETTER DEI;Ll;0;L;;;;;N;GREEK SMALL LETTER DEI;;03EE;;03EE 03F0;GREEK KAPPA SYMBOL;Ll;0;L; 03BA;;;;N;GREEK SMALL LETTER SCRIPT KAPPA;;039A;;039A 03F1;GREEK RHO SYMBOL;Ll;0;L; 03C1;;;;N;GREEK SMALL LETTER TAILED RHO;;03A1;;03A1 03F2;GREEK LUNATE SIGMA SYMBOL;Ll;0;L; 03C2;;;;N;GREEK SMALL LETTER LUNATE SIGMA;;03A3;;03A3 03F3;GREEK LETTER YOT;Ll;0;L;;;;;N;;;;; 0400;CYRILLIC CAPITAL LETTER IE WITH GRAVE;Lu;0;L;0415 0300;;;;N;;;;0450; 0401;CYRILLIC CAPITAL LETTER IO;Lu;0;L;0415 0308;;;;N;;;;0451; 0402;CYRILLIC CAPITAL LETTER DJE;Lu;0;L;;;;;N;;Serbocroatian;;0452; 0403;CYRILLIC CAPITAL LETTER GJE;Lu;0;L;0413 0301;;;;N;;;;0453; 0404;CYRILLIC CAPITAL LETTER UKRAINIAN IE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER E;;;0454; 0405;CYRILLIC CAPITAL LETTER DZE;Lu;0;L;;;;;N;;;;0455; 0406;CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER I;;;0456; 0407;CYRILLIC CAPITAL LETTER YI;Lu;0;L;0406 0308;;;;N;;Ukrainian;;0457; 0408;CYRILLIC CAPITAL LETTER JE;Lu;0;L;;;;;N;;;;0458; 0409;CYRILLIC CAPITAL LETTER LJE;Lu;0;L;;;;;N;;;;0459; 040A;CYRILLIC CAPITAL LETTER NJE;Lu;0;L;;;;;N;;;;045A; 040B;CYRILLIC CAPITAL LETTER TSHE;Lu;0;L;;;;;N;;Serbocroatian;;045B; 040C;CYRILLIC CAPITAL LETTER KJE;Lu;0;L;041A 0301;;;;N;;;;045C; 040D;CYRILLIC CAPITAL LETTER I WITH GRAVE;Lu;0;L;0418 0300;;;;N;;;;045D; 040E;CYRILLIC CAPITAL LETTER SHORT U;Lu;0;L;0423 0306;;;;N;;Byelorussian;;045E; 040F;CYRILLIC CAPITAL LETTER DZHE;Lu;0;L;;;;;N;;;;045F; 0410;CYRILLIC CAPITAL LETTER A;Lu;0;L;;;;;N;;;;0430; 0411;CYRILLIC CAPITAL LETTER BE;Lu;0;L;;;;;N;;;;0431; 0412;CYRILLIC CAPITAL LETTER VE;Lu;0;L;;;;;N;;;;0432; 0413;CYRILLIC CAPITAL LETTER GHE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER GE;;;0433; 0414;CYRILLIC CAPITAL LETTER DE;Lu;0;L;;;;;N;;;;0434; 0415;CYRILLIC CAPITAL LETTER IE;Lu;0;L;;;;;N;;;;0435; 0416;CYRILLIC CAPITAL LETTER ZHE;Lu;0;L;;;;;N;;;;0436; 0417;CYRILLIC CAPITAL LETTER ZE;Lu;0;L;;;;;N;;;;0437; 0418;CYRILLIC CAPITAL LETTER I;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER II;;;0438; 0419;CYRILLIC CAPITAL LETTER SHORT I;Lu;0;L;0418 0306;;;;N;CYRILLIC CAPITAL LETTER SHORT II;;;0439; 041A;CYRILLIC CAPITAL LETTER KA;Lu;0;L;;;;;N;;;;043A; 041B;CYRILLIC CAPITAL LETTER EL;Lu;0;L;;;;;N;;;;043B; 041C;CYRILLIC CAPITAL LETTER EM;Lu;0;L;;;;;N;;;;043C; 041D;CYRILLIC CAPITAL LETTER EN;Lu;0;L;;;;;N;;;;043D; 041E;CYRILLIC CAPITAL LETTER O;Lu;0;L;;;;;N;;;;043E; 041F;CYRILLIC CAPITAL LETTER PE;Lu;0;L;;;;;N;;;;043F; 0420;CYRILLIC CAPITAL LETTER ER;Lu;0;L;;;;;N;;;;0440; 0421;CYRILLIC CAPITAL LETTER ES;Lu;0;L;;;;;N;;;;0441; 0422;CYRILLIC CAPITAL LETTER TE;Lu;0;L;;;;;N;;;;0442; 0423;CYRILLIC CAPITAL LETTER U;Lu;0;L;;;;;N;;;;0443; 0424;CYRILLIC CAPITAL LETTER EF;Lu;0;L;;;;;N;;;;0444; 0425;CYRILLIC CAPITAL LETTER HA;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KHA;;;0445; 0426;CYRILLIC CAPITAL LETTER TSE;Lu;0;L;;;;;N;;;;0446; 0427;CYRILLIC CAPITAL LETTER CHE;Lu;0;L;;;;;N;;;;0447; 0428;CYRILLIC CAPITAL LETTER SHA;Lu;0;L;;;;;N;;;;0448; 0429;CYRILLIC CAPITAL LETTER SHCHA;Lu;0;L;;;;;N;;;;0449; 042A;CYRILLIC CAPITAL LETTER HARD SIGN;Lu;0;L;;;;;N;;;;044A; 042B;CYRILLIC CAPITAL LETTER YERU;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER YERI;;;044B; 042C;CYRILLIC CAPITAL LETTER SOFT SIGN;Lu;0;L;;;;;N;;;;044C; 042D;CYRILLIC CAPITAL LETTER E;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER REVERSED E;;;044D; 042E;CYRILLIC CAPITAL LETTER YU;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER IU;;;044E; 042F;CYRILLIC CAPITAL LETTER YA;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER IA;;;044F; 0430;CYRILLIC SMALL LETTER A;Ll;0;L;;;;;N;;;0410;;0410 0431;CYRILLIC SMALL LETTER BE;Ll;0;L;;;;;N;;;0411;;0411 0432;CYRILLIC SMALL LETTER VE;Ll;0;L;;;;;N;;;0412;;0412 0433;CYRILLIC SMALL LETTER GHE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER GE;;0413;;0413 0434;CYRILLIC SMALL LETTER DE;Ll;0;L;;;;;N;;;0414;;0414 0435;CYRILLIC SMALL LETTER IE;Ll;0;L;;;;;N;;;0415;;0415 0436;CYRILLIC SMALL LETTER ZHE;Ll;0;L;;;;;N;;;0416;;0416 0437;CYRILLIC SMALL LETTER ZE;Ll;0;L;;;;;N;;;0417;;0417 0438;CYRILLIC SMALL LETTER I;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER II;;0418;;0418 0439;CYRILLIC SMALL LETTER SHORT I;Ll;0;L;0438 0306;;;;N;CYRILLIC SMALL LETTER SHORT II;;0419;;0419 043A;CYRILLIC SMALL LETTER KA;Ll;0;L;;;;;N;;;041A;;041A 043B;CYRILLIC SMALL LETTER EL;Ll;0;L;;;;;N;;;041B;;041B 043C;CYRILLIC SMALL LETTER EM;Ll;0;L;;;;;N;;;041C;;041C 043D;CYRILLIC SMALL LETTER EN;Ll;0;L;;;;;N;;;041D;;041D 043E;CYRILLIC SMALL LETTER O;Ll;0;L;;;;;N;;;041E;;041E 043F;CYRILLIC SMALL LETTER PE;Ll;0;L;;;;;N;;;041F;;041F 0440;CYRILLIC SMALL LETTER ER;Ll;0;L;;;;;N;;;0420;;0420 0441;CYRILLIC SMALL LETTER ES;Ll;0;L;;;;;N;;;0421;;0421 0442;CYRILLIC SMALL LETTER TE;Ll;0;L;;;;;N;;;0422;;0422 0443;CYRILLIC SMALL LETTER U;Ll;0;L;;;;;N;;;0423;;0423 0444;CYRILLIC SMALL LETTER EF;Ll;0;L;;;;;N;;;0424;;0424 0445;CYRILLIC SMALL LETTER HA;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KHA;;0425;;0425 0446;CYRILLIC SMALL LETTER TSE;Ll;0;L;;;;;N;;;0426;;0426 0447;CYRILLIC SMALL LETTER CHE;Ll;0;L;;;;;N;;;0427;;0427 0448;CYRILLIC SMALL LETTER SHA;Ll;0;L;;;;;N;;;0428;;0428 0449;CYRILLIC SMALL LETTER SHCHA;Ll;0;L;;;;;N;;;0429;;0429 044A;CYRILLIC SMALL LETTER HARD SIGN;Ll;0;L;;;;;N;;;042A;;042A 044B;CYRILLIC SMALL LETTER YERU;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER YERI;;042B;;042B 044C;CYRILLIC SMALL LETTER SOFT SIGN;Ll;0;L;;;;;N;;;042C;;042C 044D;CYRILLIC SMALL LETTER E;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER REVERSED E;;042D;;042D 044E;CYRILLIC SMALL LETTER YU;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER IU;;042E;;042E 044F;CYRILLIC SMALL LETTER YA;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER IA;;042F;;042F 0450;CYRILLIC SMALL LETTER IE WITH GRAVE;Ll;0;L;0435 0300;;;;N;;;0400;;0400 0451;CYRILLIC SMALL LETTER IO;Ll;0;L;0435 0308;;;;N;;;0401;;0401 0452;CYRILLIC SMALL LETTER DJE;Ll;0;L;;;;;N;;Serbocroatian;0402;;0402 0453;CYRILLIC SMALL LETTER GJE;Ll;0;L;0433 0301;;;;N;;;0403;;0403 0454;CYRILLIC SMALL LETTER UKRAINIAN IE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER E;;0404;;0404 0455;CYRILLIC SMALL LETTER DZE;Ll;0;L;;;;;N;;;0405;;0405 0456;CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER I;;0406;;0406 0457;CYRILLIC SMALL LETTER YI;Ll;0;L;0456 0308;;;;N;;Ukrainian;0407;;0407 0458;CYRILLIC SMALL LETTER JE;Ll;0;L;;;;;N;;;0408;;0408 0459;CYRILLIC SMALL LETTER LJE;Ll;0;L;;;;;N;;;0409;;0409 045A;CYRILLIC SMALL LETTER NJE;Ll;0;L;;;;;N;;;040A;;040A 045B;CYRILLIC SMALL LETTER TSHE;Ll;0;L;;;;;N;;Serbocroatian;040B;;040B 045C;CYRILLIC SMALL LETTER KJE;Ll;0;L;043A 0301;;;;N;;;040C;;040C 045D;CYRILLIC SMALL LETTER I WITH GRAVE;Ll;0;L;0438 0300;;;;N;;;040D;;040D 045E;CYRILLIC SMALL LETTER SHORT U;Ll;0;L;0443 0306;;;;N;;Byelorussian;040E;;040E 045F;CYRILLIC SMALL LETTER DZHE;Ll;0;L;;;;;N;;;040F;;040F 0460;CYRILLIC CAPITAL LETTER OMEGA;Lu;0;L;;;;;N;;;;0461; 0461;CYRILLIC SMALL LETTER OMEGA;Ll;0;L;;;;;N;;;0460;;0460 0462;CYRILLIC CAPITAL LETTER YAT;Lu;0;L;;;;;N;;;;0463; 0463;CYRILLIC SMALL LETTER YAT;Ll;0;L;;;;;N;;;0462;;0462 0464;CYRILLIC CAPITAL LETTER IOTIFIED E;Lu;0;L;;;;;N;;;;0465; 0465;CYRILLIC SMALL LETTER IOTIFIED E;Ll;0;L;;;;;N;;;0464;;0464 0466;CYRILLIC CAPITAL LETTER LITTLE YUS;Lu;0;L;;;;;N;;;;0467; 0467;CYRILLIC SMALL LETTER LITTLE YUS;Ll;0;L;;;;;N;;;0466;;0466 0468;CYRILLIC CAPITAL LETTER IOTIFIED LITTLE YUS;Lu;0;L;;;;;N;;;;0469; 0469;CYRILLIC SMALL LETTER IOTIFIED LITTLE YUS;Ll;0;L;;;;;N;;;0468;;0468 046A;CYRILLIC CAPITAL LETTER BIG YUS;Lu;0;L;;;;;N;;;;046B; 046B;CYRILLIC SMALL LETTER BIG YUS;Ll;0;L;;;;;N;;;046A;;046A 046C;CYRILLIC CAPITAL LETTER IOTIFIED BIG YUS;Lu;0;L;;;;;N;;;;046D; 046D;CYRILLIC SMALL LETTER IOTIFIED BIG YUS;Ll;0;L;;;;;N;;;046C;;046C 046E;CYRILLIC CAPITAL LETTER KSI;Lu;0;L;;;;;N;;;;046F; 046F;CYRILLIC SMALL LETTER KSI;Ll;0;L;;;;;N;;;046E;;046E 0470;CYRILLIC CAPITAL LETTER PSI;Lu;0;L;;;;;N;;;;0471; 0471;CYRILLIC SMALL LETTER PSI;Ll;0;L;;;;;N;;;0470;;0470 0472;CYRILLIC CAPITAL LETTER FITA;Lu;0;L;;;;;N;;;;0473; 0473;CYRILLIC SMALL LETTER FITA;Ll;0;L;;;;;N;;;0472;;0472 0474;CYRILLIC CAPITAL LETTER IZHITSA;Lu;0;L;;;;;N;;;;0475; 0475;CYRILLIC SMALL LETTER IZHITSA;Ll;0;L;;;;;N;;;0474;;0474 0476;CYRILLIC CAPITAL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT;Lu;0;L;0474 030F;;;;N;CYRILLIC CAPITAL LETTER IZHITSA DOUBLE GRAVE;;;0477; 0477;CYRILLIC SMALL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT;Ll;0;L;0475 030F;;;;N;CYRILLIC SMALL LETTER IZHITSA DOUBLE GRAVE;;0476;;0476 0478;CYRILLIC CAPITAL LETTER UK;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER UK DIGRAPH;;;0479; 0479;CYRILLIC SMALL LETTER UK;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER UK DIGRAPH;;0478;;0478 047A;CYRILLIC CAPITAL LETTER ROUND OMEGA;Lu;0;L;;;;;N;;;;047B; 047B;CYRILLIC SMALL LETTER ROUND OMEGA;Ll;0;L;;;;;N;;;047A;;047A 047C;CYRILLIC CAPITAL LETTER OMEGA WITH TITLO;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER OMEGA TITLO;;;047D; 047D;CYRILLIC SMALL LETTER OMEGA WITH TITLO;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER OMEGA TITLO;;047C;;047C 047E;CYRILLIC CAPITAL LETTER OT;Lu;0;L;;;;;N;;;;047F; 047F;CYRILLIC SMALL LETTER OT;Ll;0;L;;;;;N;;;047E;;047E 0480;CYRILLIC CAPITAL LETTER KOPPA;Lu;0;L;;;;;N;;;;0481; 0481;CYRILLIC SMALL LETTER KOPPA;Ll;0;L;;;;;N;;;0480;;0480 0482;CYRILLIC THOUSANDS SIGN;So;0;L;;;;;N;;;;; 0483;COMBINING CYRILLIC TITLO;Mn;230;NSM;;;;;N;CYRILLIC NON-SPACING TITLO;;;; 0484;COMBINING CYRILLIC PALATALIZATION;Mn;230;NSM;;;;;N;CYRILLIC NON-SPACING PALATALIZATION;;;; 0485;COMBINING CYRILLIC DASIA PNEUMATA;Mn;230;NSM;;;;;N;CYRILLIC NON-SPACING DASIA PNEUMATA;;;; 0486;COMBINING CYRILLIC PSILI PNEUMATA;Mn;230;NSM;;;;;N;CYRILLIC NON-SPACING PSILI PNEUMATA;;;; 0488;COMBINING CYRILLIC HUNDRED THOUSANDS SIGN;Me;0;NSM;;;;;N;;;;; 0489;COMBINING CYRILLIC MILLIONS SIGN;Me;0;NSM;;;;;N;;;;; 048C;CYRILLIC CAPITAL LETTER SEMISOFT SIGN;Lu;0;L;;;;;N;;;;048D; 048D;CYRILLIC SMALL LETTER SEMISOFT SIGN;Ll;0;L;;;;;N;;;048C;;048C 048E;CYRILLIC CAPITAL LETTER ER WITH TICK;Lu;0;L;;;;;N;;;;048F; 048F;CYRILLIC SMALL LETTER ER WITH TICK;Ll;0;L;;;;;N;;;048E;;048E 0490;CYRILLIC CAPITAL LETTER GHE WITH UPTURN;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER GE WITH UPTURN;;;0491; 0491;CYRILLIC SMALL LETTER GHE WITH UPTURN;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER GE WITH UPTURN;;0490;;0490 0492;CYRILLIC CAPITAL LETTER GHE WITH STROKE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER GE BAR;;;0493; 0493;CYRILLIC SMALL LETTER GHE WITH STROKE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER GE BAR;;0492;;0492 0494;CYRILLIC CAPITAL LETTER GHE WITH MIDDLE HOOK;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER GE HOOK;;;0495; 0495;CYRILLIC SMALL LETTER GHE WITH MIDDLE HOOK;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER GE HOOK;;0494;;0494 0496;CYRILLIC CAPITAL LETTER ZHE WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER ZHE WITH RIGHT DESCENDER;;;0497; 0497;CYRILLIC SMALL LETTER ZHE WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER ZHE WITH RIGHT DESCENDER;;0496;;0496 0498;CYRILLIC CAPITAL LETTER ZE WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER ZE CEDILLA;;;0499; 0499;CYRILLIC SMALL LETTER ZE WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER ZE CEDILLA;;0498;;0498 049A;CYRILLIC CAPITAL LETTER KA WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KA WITH RIGHT DESCENDER;;;049B; 049B;CYRILLIC SMALL LETTER KA WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KA WITH RIGHT DESCENDER;;049A;;049A 049C;CYRILLIC CAPITAL LETTER KA WITH VERTICAL STROKE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KA VERTICAL BAR;;;049D; 049D;CYRILLIC SMALL LETTER KA WITH VERTICAL STROKE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KA VERTICAL BAR;;049C;;049C 049E;CYRILLIC CAPITAL LETTER KA WITH STROKE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KA BAR;;;049F; 049F;CYRILLIC SMALL LETTER KA WITH STROKE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KA BAR;;049E;;049E 04A0;CYRILLIC CAPITAL LETTER BASHKIR KA;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER REVERSED GE KA;;;04A1; 04A1;CYRILLIC SMALL LETTER BASHKIR KA;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER REVERSED GE KA;;04A0;;04A0 04A2;CYRILLIC CAPITAL LETTER EN WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER EN WITH RIGHT DESCENDER;;;04A3; 04A3;CYRILLIC SMALL LETTER EN WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER EN WITH RIGHT DESCENDER;;04A2;;04A2 04A4;CYRILLIC CAPITAL LIGATURE EN GHE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER EN GE;;;04A5; 04A5;CYRILLIC SMALL LIGATURE EN GHE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER EN GE;;04A4;;04A4 04A6;CYRILLIC CAPITAL LETTER PE WITH MIDDLE HOOK;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER PE HOOK;Abkhasian;;04A7; 04A7;CYRILLIC SMALL LETTER PE WITH MIDDLE HOOK;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER PE HOOK;Abkhasian;04A6;;04A6 04A8;CYRILLIC CAPITAL LETTER ABKHASIAN HA;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER O HOOK;;;04A9; 04A9;CYRILLIC SMALL LETTER ABKHASIAN HA;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER O HOOK;;04A8;;04A8 04AA;CYRILLIC CAPITAL LETTER ES WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER ES CEDILLA;;;04AB; 04AB;CYRILLIC SMALL LETTER ES WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER ES CEDILLA;;04AA;;04AA 04AC;CYRILLIC CAPITAL LETTER TE WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER TE WITH RIGHT DESCENDER;;;04AD; 04AD;CYRILLIC SMALL LETTER TE WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER TE WITH RIGHT DESCENDER;;04AC;;04AC 04AE;CYRILLIC CAPITAL LETTER STRAIGHT U;Lu;0;L;;;;;N;;;;04AF; 04AF;CYRILLIC SMALL LETTER STRAIGHT U;Ll;0;L;;;;;N;;;04AE;;04AE 04B0;CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER STRAIGHT U BAR;;;04B1; 04B1;CYRILLIC SMALL LETTER STRAIGHT U WITH STROKE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER STRAIGHT U BAR;;04B0;;04B0 04B2;CYRILLIC CAPITAL LETTER HA WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KHA WITH RIGHT DESCENDER;;;04B3; 04B3;CYRILLIC SMALL LETTER HA WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KHA WITH RIGHT DESCENDER;;04B2;;04B2 04B4;CYRILLIC CAPITAL LIGATURE TE TSE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER TE TSE;Abkhasian;;04B5; 04B5;CYRILLIC SMALL LIGATURE TE TSE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER TE TSE;Abkhasian;04B4;;04B4 04B6;CYRILLIC CAPITAL LETTER CHE WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER CHE WITH RIGHT DESCENDER;;;04B7; 04B7;CYRILLIC SMALL LETTER CHE WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER CHE WITH RIGHT DESCENDER;;04B6;;04B6 04B8;CYRILLIC CAPITAL LETTER CHE WITH VERTICAL STROKE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER CHE VERTICAL BAR;;;04B9; 04B9;CYRILLIC SMALL LETTER CHE WITH VERTICAL STROKE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER CHE VERTICAL BAR;;04B8;;04B8 04BA;CYRILLIC CAPITAL LETTER SHHA;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER H;;;04BB; 04BB;CYRILLIC SMALL LETTER SHHA;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER H;;04BA;;04BA 04BC;CYRILLIC CAPITAL LETTER ABKHASIAN CHE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER IE HOOK;;;04BD; 04BD;CYRILLIC SMALL LETTER ABKHASIAN CHE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER IE HOOK;;04BC;;04BC 04BE;CYRILLIC CAPITAL LETTER ABKHASIAN CHE WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER IE HOOK OGONEK;;;04BF; 04BF;CYRILLIC SMALL LETTER ABKHASIAN CHE WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER IE HOOK OGONEK;;04BE;;04BE 04C0;CYRILLIC LETTER PALOCHKA;Lu;0;L;;;;;N;CYRILLIC LETTER I;;;; 04C1;CYRILLIC CAPITAL LETTER ZHE WITH BREVE;Lu;0;L;0416 0306;;;;N;CYRILLIC CAPITAL LETTER SHORT ZHE;;;04C2; 04C2;CYRILLIC SMALL LETTER ZHE WITH BREVE;Ll;0;L;0436 0306;;;;N;CYRILLIC SMALL LETTER SHORT ZHE;;04C1;;04C1 04C3;CYRILLIC CAPITAL LETTER KA WITH HOOK;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KA HOOK;;;04C4; 04C4;CYRILLIC SMALL LETTER KA WITH HOOK;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KA HOOK;;04C3;;04C3 04C7;CYRILLIC CAPITAL LETTER EN WITH HOOK;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER EN HOOK;;;04C8; 04C8;CYRILLIC SMALL LETTER EN WITH HOOK;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER EN HOOK;;04C7;;04C7 04CB;CYRILLIC CAPITAL LETTER KHAKASSIAN CHE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER CHE WITH LEFT DESCENDER;;;04CC; 04CC;CYRILLIC SMALL LETTER KHAKASSIAN CHE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER CHE WITH LEFT DESCENDER;;04CB;;04CB 04D0;CYRILLIC CAPITAL LETTER A WITH BREVE;Lu;0;L;0410 0306;;;;N;;;;04D1; 04D1;CYRILLIC SMALL LETTER A WITH BREVE;Ll;0;L;0430 0306;;;;N;;;04D0;;04D0 04D2;CYRILLIC CAPITAL LETTER A WITH DIAERESIS;Lu;0;L;0410 0308;;;;N;;;;04D3; 04D3;CYRILLIC SMALL LETTER A WITH DIAERESIS;Ll;0;L;0430 0308;;;;N;;;04D2;;04D2 04D4;CYRILLIC CAPITAL LIGATURE A IE;Lu;0;L;;;;;N;;;;04D5; 04D5;CYRILLIC SMALL LIGATURE A IE;Ll;0;L;;;;;N;;;04D4;;04D4 04D6;CYRILLIC CAPITAL LETTER IE WITH BREVE;Lu;0;L;0415 0306;;;;N;;;;04D7; 04D7;CYRILLIC SMALL LETTER IE WITH BREVE;Ll;0;L;0435 0306;;;;N;;;04D6;;04D6 04D8;CYRILLIC CAPITAL LETTER SCHWA;Lu;0;L;;;;;N;;;;04D9; 04D9;CYRILLIC SMALL LETTER SCHWA;Ll;0;L;;;;;N;;;04D8;;04D8 04DA;CYRILLIC CAPITAL LETTER SCHWA WITH DIAERESIS;Lu;0;L;04D8 0308;;;;N;;;;04DB; 04DB;CYRILLIC SMALL LETTER SCHWA WITH DIAERESIS;Ll;0;L;04D9 0308;;;;N;;;04DA;;04DA 04DC;CYRILLIC CAPITAL LETTER ZHE WITH DIAERESIS;Lu;0;L;0416 0308;;;;N;;;;04DD; 04DD;CYRILLIC SMALL LETTER ZHE WITH DIAERESIS;Ll;0;L;0436 0308;;;;N;;;04DC;;04DC 04DE;CYRILLIC CAPITAL LETTER ZE WITH DIAERESIS;Lu;0;L;0417 0308;;;;N;;;;04DF; 04DF;CYRILLIC SMALL LETTER ZE WITH DIAERESIS;Ll;0;L;0437 0308;;;;N;;;04DE;;04DE 04E0;CYRILLIC CAPITAL LETTER ABKHASIAN DZE;Lu;0;L;;;;;N;;;;04E1; 04E1;CYRILLIC SMALL LETTER ABKHASIAN DZE;Ll;0;L;;;;;N;;;04E0;;04E0 04E2;CYRILLIC CAPITAL LETTER I WITH MACRON;Lu;0;L;0418 0304;;;;N;;;;04E3; 04E3;CYRILLIC SMALL LETTER I WITH MACRON;Ll;0;L;0438 0304;;;;N;;;04E2;;04E2 04E4;CYRILLIC CAPITAL LETTER I WITH DIAERESIS;Lu;0;L;0418 0308;;;;N;;;;04E5; 04E5;CYRILLIC SMALL LETTER I WITH DIAERESIS;Ll;0;L;0438 0308;;;;N;;;04E4;;04E4 04E6;CYRILLIC CAPITAL LETTER O WITH DIAERESIS;Lu;0;L;041E 0308;;;;N;;;;04E7; 04E7;CYRILLIC SMALL LETTER O WITH DIAERESIS;Ll;0;L;043E 0308;;;;N;;;04E6;;04E6 04E8;CYRILLIC CAPITAL LETTER BARRED O;Lu;0;L;;;;;N;;;;04E9; 04E9;CYRILLIC SMALL LETTER BARRED O;Ll;0;L;;;;;N;;;04E8;;04E8 04EA;CYRILLIC CAPITAL LETTER BARRED O WITH DIAERESIS;Lu;0;L;04E8 0308;;;;N;;;;04EB; 04EB;CYRILLIC SMALL LETTER BARRED O WITH DIAERESIS;Ll;0;L;04E9 0308;;;;N;;;04EA;;04EA 04EC;CYRILLIC CAPITAL LETTER E WITH DIAERESIS;Lu;0;L;042D 0308;;;;N;;;;04ED; 04ED;CYRILLIC SMALL LETTER E WITH DIAERESIS;Ll;0;L;044D 0308;;;;N;;;04EC;;04EC 04EE;CYRILLIC CAPITAL LETTER U WITH MACRON;Lu;0;L;0423 0304;;;;N;;;;04EF; 04EF;CYRILLIC SMALL LETTER U WITH MACRON;Ll;0;L;0443 0304;;;;N;;;04EE;;04EE 04F0;CYRILLIC CAPITAL LETTER U WITH DIAERESIS;Lu;0;L;0423 0308;;;;N;;;;04F1; 04F1;CYRILLIC SMALL LETTER U WITH DIAERESIS;Ll;0;L;0443 0308;;;;N;;;04F0;;04F0 04F2;CYRILLIC CAPITAL LETTER U WITH DOUBLE ACUTE;Lu;0;L;0423 030B;;;;N;;;;04F3; 04F3;CYRILLIC SMALL LETTER U WITH DOUBLE ACUTE;Ll;0;L;0443 030B;;;;N;;;04F2;;04F2 04F4;CYRILLIC CAPITAL LETTER CHE WITH DIAERESIS;Lu;0;L;0427 0308;;;;N;;;;04F5; 04F5;CYRILLIC SMALL LETTER CHE WITH DIAERESIS;Ll;0;L;0447 0308;;;;N;;;04F4;;04F4 04F8;CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS;Lu;0;L;042B 0308;;;;N;;;;04F9; 04F9;CYRILLIC SMALL LETTER YERU WITH DIAERESIS;Ll;0;L;044B 0308;;;;N;;;04F8;;04F8 0531;ARMENIAN CAPITAL LETTER AYB;Lu;0;L;;;;;N;;;;0561; 0532;ARMENIAN CAPITAL LETTER BEN;Lu;0;L;;;;;N;;;;0562; 0533;ARMENIAN CAPITAL LETTER GIM;Lu;0;L;;;;;N;;;;0563; 0534;ARMENIAN CAPITAL LETTER DA;Lu;0;L;;;;;N;;;;0564; 0535;ARMENIAN CAPITAL LETTER ECH;Lu;0;L;;;;;N;;;;0565; 0536;ARMENIAN CAPITAL LETTER ZA;Lu;0;L;;;;;N;;;;0566; 0537;ARMENIAN CAPITAL LETTER EH;Lu;0;L;;;;;N;;;;0567; 0538;ARMENIAN CAPITAL LETTER ET;Lu;0;L;;;;;N;;;;0568; 0539;ARMENIAN CAPITAL LETTER TO;Lu;0;L;;;;;N;;;;0569; 053A;ARMENIAN CAPITAL LETTER ZHE;Lu;0;L;;;;;N;;;;056A; 053B;ARMENIAN CAPITAL LETTER INI;Lu;0;L;;;;;N;;;;056B; 053C;ARMENIAN CAPITAL LETTER LIWN;Lu;0;L;;;;;N;;;;056C; 053D;ARMENIAN CAPITAL LETTER XEH;Lu;0;L;;;;;N;;;;056D; 053E;ARMENIAN CAPITAL LETTER CA;Lu;0;L;;;;;N;;;;056E; 053F;ARMENIAN CAPITAL LETTER KEN;Lu;0;L;;;;;N;;;;056F; 0540;ARMENIAN CAPITAL LETTER HO;Lu;0;L;;;;;N;;;;0570; 0541;ARMENIAN CAPITAL LETTER JA;Lu;0;L;;;;;N;;;;0571; 0542;ARMENIAN CAPITAL LETTER GHAD;Lu;0;L;;;;;N;ARMENIAN CAPITAL LETTER LAD;;;0572; 0543;ARMENIAN CAPITAL LETTER CHEH;Lu;0;L;;;;;N;;;;0573; 0544;ARMENIAN CAPITAL LETTER MEN;Lu;0;L;;;;;N;;;;0574; 0545;ARMENIAN CAPITAL LETTER YI;Lu;0;L;;;;;N;;;;0575; 0546;ARMENIAN CAPITAL LETTER NOW;Lu;0;L;;;;;N;;;;0576; 0547;ARMENIAN CAPITAL LETTER SHA;Lu;0;L;;;;;N;;;;0577; 0548;ARMENIAN CAPITAL LETTER VO;Lu;0;L;;;;;N;;;;0578; 0549;ARMENIAN CAPITAL LETTER CHA;Lu;0;L;;;;;N;;;;0579; 054A;ARMENIAN CAPITAL LETTER PEH;Lu;0;L;;;;;N;;;;057A; 054B;ARMENIAN CAPITAL LETTER JHEH;Lu;0;L;;;;;N;;;;057B; 054C;ARMENIAN CAPITAL LETTER RA;Lu;0;L;;;;;N;;;;057C; 054D;ARMENIAN CAPITAL LETTER SEH;Lu;0;L;;;;;N;;;;057D; 054E;ARMENIAN CAPITAL LETTER VEW;Lu;0;L;;;;;N;;;;057E; 054F;ARMENIAN CAPITAL LETTER TIWN;Lu;0;L;;;;;N;;;;057F; 0550;ARMENIAN CAPITAL LETTER REH;Lu;0;L;;;;;N;;;;0580; 0551;ARMENIAN CAPITAL LETTER CO;Lu;0;L;;;;;N;;;;0581; 0552;ARMENIAN CAPITAL LETTER YIWN;Lu;0;L;;;;;N;;;;0582; 0553;ARMENIAN CAPITAL LETTER PIWR;Lu;0;L;;;;;N;;;;0583; 0554;ARMENIAN CAPITAL LETTER KEH;Lu;0;L;;;;;N;;;;0584; 0555;ARMENIAN CAPITAL LETTER OH;Lu;0;L;;;;;N;;;;0585; 0556;ARMENIAN CAPITAL LETTER FEH;Lu;0;L;;;;;N;;;;0586; 0559;ARMENIAN MODIFIER LETTER LEFT HALF RING;Lm;0;L;;;;;N;;;;; 055A;ARMENIAN APOSTROPHE;Po;0;L;;;;;N;ARMENIAN MODIFIER LETTER RIGHT HALF RING;;;; 055B;ARMENIAN EMPHASIS MARK;Po;0;L;;;;;N;;;;; 055C;ARMENIAN EXCLAMATION MARK;Po;0;L;;;;;N;;;;; 055D;ARMENIAN COMMA;Po;0;L;;;;;N;;;;; 055E;ARMENIAN QUESTION MARK;Po;0;L;;;;;N;;;;; 055F;ARMENIAN ABBREVIATION MARK;Po;0;L;;;;;N;;;;; 0561;ARMENIAN SMALL LETTER AYB;Ll;0;L;;;;;N;;;0531;;0531 0562;ARMENIAN SMALL LETTER BEN;Ll;0;L;;;;;N;;;0532;;0532 0563;ARMENIAN SMALL LETTER GIM;Ll;0;L;;;;;N;;;0533;;0533 0564;ARMENIAN SMALL LETTER DA;Ll;0;L;;;;;N;;;0534;;0534 0565;ARMENIAN SMALL LETTER ECH;Ll;0;L;;;;;N;;;0535;;0535 0566;ARMENIAN SMALL LETTER ZA;Ll;0;L;;;;;N;;;0536;;0536 0567;ARMENIAN SMALL LETTER EH;Ll;0;L;;;;;N;;;0537;;0537 0568;ARMENIAN SMALL LETTER ET;Ll;0;L;;;;;N;;;0538;;0538 0569;ARMENIAN SMALL LETTER TO;Ll;0;L;;;;;N;;;0539;;0539 056A;ARMENIAN SMALL LETTER ZHE;Ll;0;L;;;;;N;;;053A;;053A 056B;ARMENIAN SMALL LETTER INI;Ll;0;L;;;;;N;;;053B;;053B 056C;ARMENIAN SMALL LETTER LIWN;Ll;0;L;;;;;N;;;053C;;053C 056D;ARMENIAN SMALL LETTER XEH;Ll;0;L;;;;;N;;;053D;;053D 056E;ARMENIAN SMALL LETTER CA;Ll;0;L;;;;;N;;;053E;;053E 056F;ARMENIAN SMALL LETTER KEN;Ll;0;L;;;;;N;;;053F;;053F 0570;ARMENIAN SMALL LETTER HO;Ll;0;L;;;;;N;;;0540;;0540 0571;ARMENIAN SMALL LETTER JA;Ll;0;L;;;;;N;;;0541;;0541 0572;ARMENIAN SMALL LETTER GHAD;Ll;0;L;;;;;N;ARMENIAN SMALL LETTER LAD;;0542;;0542 0573;ARMENIAN SMALL LETTER CHEH;Ll;0;L;;;;;N;;;0543;;0543 0574;ARMENIAN SMALL LETTER MEN;Ll;0;L;;;;;N;;;0544;;0544 0575;ARMENIAN SMALL LETTER YI;Ll;0;L;;;;;N;;;0545;;0545 0576;ARMENIAN SMALL LETTER NOW;Ll;0;L;;;;;N;;;0546;;0546 0577;ARMENIAN SMALL LETTER SHA;Ll;0;L;;;;;N;;;0547;;0547 0578;ARMENIAN SMALL LETTER VO;Ll;0;L;;;;;N;;;0548;;0548 0579;ARMENIAN SMALL LETTER CHA;Ll;0;L;;;;;N;;;0549;;0549 057A;ARMENIAN SMALL LETTER PEH;Ll;0;L;;;;;N;;;054A;;054A 057B;ARMENIAN SMALL LETTER JHEH;Ll;0;L;;;;;N;;;054B;;054B 057C;ARMENIAN SMALL LETTER RA;Ll;0;L;;;;;N;;;054C;;054C 057D;ARMENIAN SMALL LETTER SEH;Ll;0;L;;;;;N;;;054D;;054D 057E;ARMENIAN SMALL LETTER VEW;Ll;0;L;;;;;N;;;054E;;054E 057F;ARMENIAN SMALL LETTER TIWN;Ll;0;L;;;;;N;;;054F;;054F 0580;ARMENIAN SMALL LETTER REH;Ll;0;L;;;;;N;;;0550;;0550 0581;ARMENIAN SMALL LETTER CO;Ll;0;L;;;;;N;;;0551;;0551 0582;ARMENIAN SMALL LETTER YIWN;Ll;0;L;;;;;N;;;0552;;0552 0583;ARMENIAN SMALL LETTER PIWR;Ll;0;L;;;;;N;;;0553;;0553 0584;ARMENIAN SMALL LETTER KEH;Ll;0;L;;;;;N;;;0554;;0554 0585;ARMENIAN SMALL LETTER OH;Ll;0;L;;;;;N;;;0555;;0555 0586;ARMENIAN SMALL LETTER FEH;Ll;0;L;;;;;N;;;0556;;0556 0587;ARMENIAN SMALL LIGATURE ECH YIWN;Ll;0;L; 0565 0582;;;;N;;;;; 0589;ARMENIAN FULL STOP;Po;0;L;;;;;N;ARMENIAN PERIOD;;;; 058A;ARMENIAN HYPHEN;Pd;0;ON;;;;;N;;;;; 0591;HEBREW ACCENT ETNAHTA;Mn;220;NSM;;;;;N;;;;; 0592;HEBREW ACCENT SEGOL;Mn;230;NSM;;;;;N;;;;; 0593;HEBREW ACCENT SHALSHELET;Mn;230;NSM;;;;;N;;;;; 0594;HEBREW ACCENT ZAQEF QATAN;Mn;230;NSM;;;;;N;;;;; 0595;HEBREW ACCENT ZAQEF GADOL;Mn;230;NSM;;;;;N;;;;; 0596;HEBREW ACCENT TIPEHA;Mn;220;NSM;;;;;N;;*;;; 0597;HEBREW ACCENT REVIA;Mn;230;NSM;;;;;N;;;;; 0598;HEBREW ACCENT ZARQA;Mn;230;NSM;;;;;N;;*;;; 0599;HEBREW ACCENT PASHTA;Mn;230;NSM;;;;;N;;;;; 059A;HEBREW ACCENT YETIV;Mn;222;NSM;;;;;N;;;;; 059B;HEBREW ACCENT TEVIR;Mn;220;NSM;;;;;N;;;;; 059C;HEBREW ACCENT GERESH;Mn;230;NSM;;;;;N;;;;; 059D;HEBREW ACCENT GERESH MUQDAM;Mn;230;NSM;;;;;N;;;;; 059E;HEBREW ACCENT GERSHAYIM;Mn;230;NSM;;;;;N;;;;; 059F;HEBREW ACCENT QARNEY PARA;Mn;230;NSM;;;;;N;;;;; 05A0;HEBREW ACCENT TELISHA GEDOLA;Mn;230;NSM;;;;;N;;;;; 05A1;HEBREW ACCENT PAZER;Mn;230;NSM;;;;;N;;;;; 05A3;HEBREW ACCENT MUNAH;Mn;220;NSM;;;;;N;;;;; 05A4;HEBREW ACCENT MAHAPAKH;Mn;220;NSM;;;;;N;;;;; 05A5;HEBREW ACCENT MERKHA;Mn;220;NSM;;;;;N;;*;;; 05A6;HEBREW ACCENT MERKHA KEFULA;Mn;220;NSM;;;;;N;;;;; 05A7;HEBREW ACCENT DARGA;Mn;220;NSM;;;;;N;;;;; 05A8;HEBREW ACCENT QADMA;Mn;230;NSM;;;;;N;;*;;; 05A9;HEBREW ACCENT TELISHA QETANA;Mn;230;NSM;;;;;N;;;;; 05AA;HEBREW ACCENT YERAH BEN YOMO;Mn;220;NSM;;;;;N;;*;;; 05AB;HEBREW ACCENT OLE;Mn;230;NSM;;;;;N;;;;; 05AC;HEBREW ACCENT ILUY;Mn;230;NSM;;;;;N;;;;; 05AD;HEBREW ACCENT DEHI;Mn;222;NSM;;;;;N;;;;; 05AE;HEBREW ACCENT ZINOR;Mn;228;NSM;;;;;N;;;;; 05AF;HEBREW MARK MASORA CIRCLE;Mn;230;NSM;;;;;N;;;;; 05B0;HEBREW POINT SHEVA;Mn;10;NSM;;;;;N;;;;; 05B1;HEBREW POINT HATAF SEGOL;Mn;11;NSM;;;;;N;;;;; 05B2;HEBREW POINT HATAF PATAH;Mn;12;NSM;;;;;N;;;;; 05B3;HEBREW POINT HATAF QAMATS;Mn;13;NSM;;;;;N;;;;; 05B4;HEBREW POINT HIRIQ;Mn;14;NSM;;;;;N;;;;; 05B5;HEBREW POINT TSERE;Mn;15;NSM;;;;;N;;;;; 05B6;HEBREW POINT SEGOL;Mn;16;NSM;;;;;N;;;;; 05B7;HEBREW POINT PATAH;Mn;17;NSM;;;;;N;;;;; 05B8;HEBREW POINT QAMATS;Mn;18;NSM;;;;;N;;;;; 05B9;HEBREW POINT HOLAM;Mn;19;NSM;;;;;N;;;;; 05BB;HEBREW POINT QUBUTS;Mn;20;NSM;;;;;N;;;;; 05BC;HEBREW POINT DAGESH OR MAPIQ;Mn;21;NSM;;;;;N;HEBREW POINT DAGESH;or shuruq;;; 05BD;HEBREW POINT METEG;Mn;22;NSM;;;;;N;;*;;; 05BE;HEBREW PUNCTUATION MAQAF;Po;0;R;;;;;N;;;;; 05BF;HEBREW POINT RAFE;Mn;23;NSM;;;;;N;;;;; 05C0;HEBREW PUNCTUATION PASEQ;Po;0;R;;;;;N;HEBREW POINT PASEQ;*;;; 05C1;HEBREW POINT SHIN DOT;Mn;24;NSM;;;;;N;;;;; 05C2;HEBREW POINT SIN DOT;Mn;25;NSM;;;;;N;;;;; 05C3;HEBREW PUNCTUATION SOF PASUQ;Po;0;R;;;;;N;;*;;; 05C4;HEBREW MARK UPPER DOT;Mn;230;NSM;;;;;N;;;;; 05D0;HEBREW LETTER ALEF;Lo;0;R;;;;;N;;;;; 05D1;HEBREW LETTER BET;Lo;0;R;;;;;N;;;;; 05D2;HEBREW LETTER GIMEL;Lo;0;R;;;;;N;;;;; 05D3;HEBREW LETTER DALET;Lo;0;R;;;;;N;;;;; 05D4;HEBREW LETTER HE;Lo;0;R;;;;;N;;;;; 05D5;HEBREW LETTER VAV;Lo;0;R;;;;;N;;;;; 05D6;HEBREW LETTER ZAYIN;Lo;0;R;;;;;N;;;;; 05D7;HEBREW LETTER HET;Lo;0;R;;;;;N;;;;; 05D8;HEBREW LETTER TET;Lo;0;R;;;;;N;;;;; 05D9;HEBREW LETTER YOD;Lo;0;R;;;;;N;;;;; 05DA;HEBREW LETTER FINAL KAF;Lo;0;R;;;;;N;;;;; 05DB;HEBREW LETTER KAF;Lo;0;R;;;;;N;;;;; 05DC;HEBREW LETTER LAMED;Lo;0;R;;;;;N;;;;; 05DD;HEBREW LETTER FINAL MEM;Lo;0;R;;;;;N;;;;; 05DE;HEBREW LETTER MEM;Lo;0;R;;;;;N;;;;; 05DF;HEBREW LETTER FINAL NUN;Lo;0;R;;;;;N;;;;; 05E0;HEBREW LETTER NUN;Lo;0;R;;;;;N;;;;; 05E1;HEBREW LETTER SAMEKH;Lo;0;R;;;;;N;;;;; 05E2;HEBREW LETTER AYIN;Lo;0;R;;;;;N;;;;; 05E3;HEBREW LETTER FINAL PE;Lo;0;R;;;;;N;;;;; 05E4;HEBREW LETTER PE;Lo;0;R;;;;;N;;;;; 05E5;HEBREW LETTER FINAL TSADI;Lo;0;R;;;;;N;;;;; 05E6;HEBREW LETTER TSADI;Lo;0;R;;;;;N;;;;; 05E7;HEBREW LETTER QOF;Lo;0;R;;;;;N;;;;; 05E8;HEBREW LETTER RESH;Lo;0;R;;;;;N;;;;; 05E9;HEBREW LETTER SHIN;Lo;0;R;;;;;N;;;;; 05EA;HEBREW LETTER TAV;Lo;0;R;;;;;N;;;;; 05F0;HEBREW LIGATURE YIDDISH DOUBLE VAV;Lo;0;R;;;;;N;HEBREW LETTER DOUBLE VAV;;;; 05F1;HEBREW LIGATURE YIDDISH VAV YOD;Lo;0;R;;;;;N;HEBREW LETTER VAV YOD;;;; 05F2;HEBREW LIGATURE YIDDISH DOUBLE YOD;Lo;0;R;;;;;N;HEBREW LETTER DOUBLE YOD;;;; 05F3;HEBREW PUNCTUATION GERESH;Po;0;R;;;;;N;;;;; 05F4;HEBREW PUNCTUATION GERSHAYIM;Po;0;R;;;;;N;;;;; 060C;ARABIC COMMA;Po;0;CS;;;;;N;;;;; 061B;ARABIC SEMICOLON;Po;0;AL;;;;;N;;;;; 061F;ARABIC QUESTION MARK;Po;0;AL;;;;;N;;;;; 0621;ARABIC LETTER HAMZA;Lo;0;AL;;;;;N;ARABIC LETTER HAMZAH;;;; 0622;ARABIC LETTER ALEF WITH MADDA ABOVE;Lo;0;AL;0627 0653;;;;N;ARABIC LETTER MADDAH ON ALEF;;;; 0623;ARABIC LETTER ALEF WITH HAMZA ABOVE;Lo;0;AL;0627 0654;;;;N;ARABIC LETTER HAMZAH ON ALEF;;;; 0624;ARABIC LETTER WAW WITH HAMZA ABOVE;Lo;0;AL;0648 0654;;;;N;ARABIC LETTER HAMZAH ON WAW;;;; 0625;ARABIC LETTER ALEF WITH HAMZA BELOW;Lo;0;AL;0627 0655;;;;N;ARABIC LETTER HAMZAH UNDER ALEF;;;; 0626;ARABIC LETTER YEH WITH HAMZA ABOVE;Lo;0;AL;064A 0654;;;;N;ARABIC LETTER HAMZAH ON YA;;;; 0627;ARABIC LETTER ALEF;Lo;0;AL;;;;;N;;;;; 0628;ARABIC LETTER BEH;Lo;0;AL;;;;;N;ARABIC LETTER BAA;;;; 0629;ARABIC LETTER TEH MARBUTA;Lo;0;AL;;;;;N;ARABIC LETTER TAA MARBUTAH;;;; 062A;ARABIC LETTER TEH;Lo;0;AL;;;;;N;ARABIC LETTER TAA;;;; 062B;ARABIC LETTER THEH;Lo;0;AL;;;;;N;ARABIC LETTER THAA;;;; 062C;ARABIC LETTER JEEM;Lo;0;AL;;;;;N;;;;; 062D;ARABIC LETTER HAH;Lo;0;AL;;;;;N;ARABIC LETTER HAA;;;; 062E;ARABIC LETTER KHAH;Lo;0;AL;;;;;N;ARABIC LETTER KHAA;;;; 062F;ARABIC LETTER DAL;Lo;0;AL;;;;;N;;;;; 0630;ARABIC LETTER THAL;Lo;0;AL;;;;;N;;;;; 0631;ARABIC LETTER REH;Lo;0;AL;;;;;N;ARABIC LETTER RA;;;; 0632;ARABIC LETTER ZAIN;Lo;0;AL;;;;;N;;;;; 0633;ARABIC LETTER SEEN;Lo;0;AL;;;;;N;;;;; 0634;ARABIC LETTER SHEEN;Lo;0;AL;;;;;N;;;;; 0635;ARABIC LETTER SAD;Lo;0;AL;;;;;N;;;;; 0636;ARABIC LETTER DAD;Lo;0;AL;;;;;N;;;;; 0637;ARABIC LETTER TAH;Lo;0;AL;;;;;N;;;;; 0638;ARABIC LETTER ZAH;Lo;0;AL;;;;;N;ARABIC LETTER DHAH;;;; 0639;ARABIC LETTER AIN;Lo;0;AL;;;;;N;;;;; 063A;ARABIC LETTER GHAIN;Lo;0;AL;;;;;N;;;;; 0640;ARABIC TATWEEL;Lm;0;AL;;;;;N;;;;; 0641;ARABIC LETTER FEH;Lo;0;AL;;;;;N;ARABIC LETTER FA;;;; 0642;ARABIC LETTER QAF;Lo;0;AL;;;;;N;;;;; 0643;ARABIC LETTER KAF;Lo;0;AL;;;;;N;ARABIC LETTER CAF;;;; 0644;ARABIC LETTER LAM;Lo;0;AL;;;;;N;;;;; 0645;ARABIC LETTER MEEM;Lo;0;AL;;;;;N;;;;; 0646;ARABIC LETTER NOON;Lo;0;AL;;;;;N;;;;; 0647;ARABIC LETTER HEH;Lo;0;AL;;;;;N;ARABIC LETTER HA;;;; 0648;ARABIC LETTER WAW;Lo;0;AL;;;;;N;;;;; 0649;ARABIC LETTER ALEF MAKSURA;Lo;0;AL;;;;;N;ARABIC LETTER ALEF MAQSURAH;;;; 064A;ARABIC LETTER YEH;Lo;0;AL;;;;;N;ARABIC LETTER YA;;;; 064B;ARABIC FATHATAN;Mn;27;NSM;;;;;N;;;;; 064C;ARABIC DAMMATAN;Mn;28;NSM;;;;;N;;;;; 064D;ARABIC KASRATAN;Mn;29;NSM;;;;;N;;;;; 064E;ARABIC FATHA;Mn;30;NSM;;;;;N;ARABIC FATHAH;;;; 064F;ARABIC DAMMA;Mn;31;NSM;;;;;N;ARABIC DAMMAH;;;; 0650;ARABIC KASRA;Mn;32;NSM;;;;;N;ARABIC KASRAH;;;; 0651;ARABIC SHADDA;Mn;33;NSM;;;;;N;ARABIC SHADDAH;;;; 0652;ARABIC SUKUN;Mn;34;NSM;;;;;N;;;;; 0653;ARABIC MADDAH ABOVE;Mn;230;NSM;;;;;N;;;;; 0654;ARABIC HAMZA ABOVE;Mn;230;NSM;;;;;N;;;;; 0655;ARABIC HAMZA BELOW;Mn;220;NSM;;;;;N;;;;; 0660;ARABIC-INDIC DIGIT ZERO;Nd;0;AN;;0;0;0;N;;;;; 0661;ARABIC-INDIC DIGIT ONE;Nd;0;AN;;1;1;1;N;;;;; 0662;ARABIC-INDIC DIGIT TWO;Nd;0;AN;;2;2;2;N;;;;; 0663;ARABIC-INDIC DIGIT THREE;Nd;0;AN;;3;3;3;N;;;;; 0664;ARABIC-INDIC DIGIT FOUR;Nd;0;AN;;4;4;4;N;;;;; 0665;ARABIC-INDIC DIGIT FIVE;Nd;0;AN;;5;5;5;N;;;;; 0666;ARABIC-INDIC DIGIT SIX;Nd;0;AN;;6;6;6;N;;;;; 0667;ARABIC-INDIC DIGIT SEVEN;Nd;0;AN;;7;7;7;N;;;;; 0668;ARABIC-INDIC DIGIT EIGHT;Nd;0;AN;;8;8;8;N;;;;; 0669;ARABIC-INDIC DIGIT NINE;Nd;0;AN;;9;9;9;N;;;;; 066A;ARABIC PERCENT SIGN;Po;0;ET;;;;;N;;;;; 066B;ARABIC DECIMAL SEPARATOR;Po;0;AN;;;;;N;;;;; 066C;ARABIC THOUSANDS SEPARATOR;Po;0;AN;;;;;N;;;;; 066D;ARABIC FIVE POINTED STAR;Po;0;AL;;;;;N;;;;; 0670;ARABIC LETTER SUPERSCRIPT ALEF;Mn;35;NSM;;;;;N;ARABIC ALEF ABOVE;;;; 0671;ARABIC LETTER ALEF WASLA;Lo;0;AL;;;;;N;ARABIC LETTER HAMZAT WASL ON ALEF;;;; 0672;ARABIC LETTER ALEF WITH WAVY HAMZA ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER WAVY HAMZAH ON ALEF;;;; 0673;ARABIC LETTER ALEF WITH WAVY HAMZA BELOW;Lo;0;AL;;;;;N;ARABIC LETTER WAVY HAMZAH UNDER ALEF;;;; 0674;ARABIC LETTER HIGH HAMZA;Lo;0;AL;;;;;N;ARABIC LETTER HIGH HAMZAH;;;; 0675;ARABIC LETTER HIGH HAMZA ALEF;Lo;0;AL; 0627 0674;;;;N;ARABIC LETTER HIGH HAMZAH ALEF;;;; 0676;ARABIC LETTER HIGH HAMZA WAW;Lo;0;AL; 0648 0674;;;;N;ARABIC LETTER HIGH HAMZAH WAW;;;; 0677;ARABIC LETTER U WITH HAMZA ABOVE;Lo;0;AL; 06C7 0674;;;;N;ARABIC LETTER HIGH HAMZAH WAW WITH DAMMAH;;;; 0678;ARABIC LETTER HIGH HAMZA YEH;Lo;0;AL; 064A 0674;;;;N;ARABIC LETTER HIGH HAMZAH YA;;;; 0679;ARABIC LETTER TTEH;Lo;0;AL;;;;;N;ARABIC LETTER TAA WITH SMALL TAH;;;; 067A;ARABIC LETTER TTEHEH;Lo;0;AL;;;;;N;ARABIC LETTER TAA WITH TWO DOTS VERTICAL ABOVE;;;; 067B;ARABIC LETTER BEEH;Lo;0;AL;;;;;N;ARABIC LETTER BAA WITH TWO DOTS VERTICAL BELOW;;;; 067C;ARABIC LETTER TEH WITH RING;Lo;0;AL;;;;;N;ARABIC LETTER TAA WITH RING;;;; 067D;ARABIC LETTER TEH WITH THREE DOTS ABOVE DOWNWARDS;Lo;0;AL;;;;;N;ARABIC LETTER TAA WITH THREE DOTS ABOVE DOWNWARD;;;; 067E;ARABIC LETTER PEH;Lo;0;AL;;;;;N;ARABIC LETTER TAA WITH THREE DOTS BELOW;;;; 067F;ARABIC LETTER TEHEH;Lo;0;AL;;;;;N;ARABIC LETTER TAA WITH FOUR DOTS ABOVE;;;; 0680;ARABIC LETTER BEHEH;Lo;0;AL;;;;;N;ARABIC LETTER BAA WITH FOUR DOTS BELOW;;;; 0681;ARABIC LETTER HAH WITH HAMZA ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER HAMZAH ON HAA;;;; 0682;ARABIC LETTER HAH WITH TWO DOTS VERTICAL ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER HAA WITH TWO DOTS VERTICAL ABOVE;;;; 0683;ARABIC LETTER NYEH;Lo;0;AL;;;;;N;ARABIC LETTER HAA WITH MIDDLE TWO DOTS;;;; 0684;ARABIC LETTER DYEH;Lo;0;AL;;;;;N;ARABIC LETTER HAA WITH MIDDLE TWO DOTS VERTICAL;;;; 0685;ARABIC LETTER HAH WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER HAA WITH THREE DOTS ABOVE;;;; 0686;ARABIC LETTER TCHEH;Lo;0;AL;;;;;N;ARABIC LETTER HAA WITH MIDDLE THREE DOTS DOWNWARD;;;; 0687;ARABIC LETTER TCHEHEH;Lo;0;AL;;;;;N;ARABIC LETTER HAA WITH MIDDLE FOUR DOTS;;;; 0688;ARABIC LETTER DDAL;Lo;0;AL;;;;;N;ARABIC LETTER DAL WITH SMALL TAH;;;; 0689;ARABIC LETTER DAL WITH RING;Lo;0;AL;;;;;N;;;;; 068A;ARABIC LETTER DAL WITH DOT BELOW;Lo;0;AL;;;;;N;;;;; 068B;ARABIC LETTER DAL WITH DOT BELOW AND SMALL TAH;Lo;0;AL;;;;;N;;;;; 068C;ARABIC LETTER DAHAL;Lo;0;AL;;;;;N;ARABIC LETTER DAL WITH TWO DOTS ABOVE;;;; 068D;ARABIC LETTER DDAHAL;Lo;0;AL;;;;;N;ARABIC LETTER DAL WITH TWO DOTS BELOW;;;; 068E;ARABIC LETTER DUL;Lo;0;AL;;;;;N;ARABIC LETTER DAL WITH THREE DOTS ABOVE;;;; 068F;ARABIC LETTER DAL WITH THREE DOTS ABOVE DOWNWARDS;Lo;0;AL;;;;;N;ARABIC LETTER DAL WITH THREE DOTS ABOVE DOWNWARD;;;; 0690;ARABIC LETTER DAL WITH FOUR DOTS ABOVE;Lo;0;AL;;;;;N;;;;; 0691;ARABIC LETTER RREH;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH SMALL TAH;;;; 0692;ARABIC LETTER REH WITH SMALL V;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH SMALL V;;;; 0693;ARABIC LETTER REH WITH RING;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH RING;;;; 0694;ARABIC LETTER REH WITH DOT BELOW;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH DOT BELOW;;;; 0695;ARABIC LETTER REH WITH SMALL V BELOW;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH SMALL V BELOW;;;; 0696;ARABIC LETTER REH WITH DOT BELOW AND DOT ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH DOT BELOW AND DOT ABOVE;;;; 0697;ARABIC LETTER REH WITH TWO DOTS ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH TWO DOTS ABOVE;;;; 0698;ARABIC LETTER JEH;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH THREE DOTS ABOVE;;;; 0699;ARABIC LETTER REH WITH FOUR DOTS ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH FOUR DOTS ABOVE;;;; 069A;ARABIC LETTER SEEN WITH DOT BELOW AND DOT ABOVE;Lo;0;AL;;;;;N;;;;; 069B;ARABIC LETTER SEEN WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;;;;; 069C;ARABIC LETTER SEEN WITH THREE DOTS BELOW AND THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;; 069D;ARABIC LETTER SAD WITH TWO DOTS BELOW;Lo;0;AL;;;;;N;;;;; 069E;ARABIC LETTER SAD WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;; 069F;ARABIC LETTER TAH WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;; 06A0;ARABIC LETTER AIN WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;; 06A1;ARABIC LETTER DOTLESS FEH;Lo;0;AL;;;;;N;ARABIC LETTER DOTLESS FA;;;; 06A2;ARABIC LETTER FEH WITH DOT MOVED BELOW;Lo;0;AL;;;;;N;ARABIC LETTER FA WITH DOT MOVED BELOW;;;; 06A3;ARABIC LETTER FEH WITH DOT BELOW;Lo;0;AL;;;;;N;ARABIC LETTER FA WITH DOT BELOW;;;; 06A4;ARABIC LETTER VEH;Lo;0;AL;;;;;N;ARABIC LETTER FA WITH THREE DOTS ABOVE;;;; 06A5;ARABIC LETTER FEH WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;ARABIC LETTER FA WITH THREE DOTS BELOW;;;; 06A6;ARABIC LETTER PEHEH;Lo;0;AL;;;;;N;ARABIC LETTER FA WITH FOUR DOTS ABOVE;;;; 06A7;ARABIC LETTER QAF WITH DOT ABOVE;Lo;0;AL;;;;;N;;;;; 06A8;ARABIC LETTER QAF WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;; 06A9;ARABIC LETTER KEHEH;Lo;0;AL;;;;;N;ARABIC LETTER OPEN CAF;;;; 06AA;ARABIC LETTER SWASH KAF;Lo;0;AL;;;;;N;ARABIC LETTER SWASH CAF;;;; 06AB;ARABIC LETTER KAF WITH RING;Lo;0;AL;;;;;N;ARABIC LETTER CAF WITH RING;;;; 06AC;ARABIC LETTER KAF WITH DOT ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER CAF WITH DOT ABOVE;;;; 06AD;ARABIC LETTER NG;Lo;0;AL;;;;;N;ARABIC LETTER CAF WITH THREE DOTS ABOVE;;;; 06AE;ARABIC LETTER KAF WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;ARABIC LETTER CAF WITH THREE DOTS BELOW;;;; 06AF;ARABIC LETTER GAF;Lo;0;AL;;;;;N;;*;;; 06B0;ARABIC LETTER GAF WITH RING;Lo;0;AL;;;;;N;;;;; 06B1;ARABIC LETTER NGOEH;Lo;0;AL;;;;;N;ARABIC LETTER GAF WITH TWO DOTS ABOVE;;;; 06B2;ARABIC LETTER GAF WITH TWO DOTS BELOW;Lo;0;AL;;;;;N;;;;; 06B3;ARABIC LETTER GUEH;Lo;0;AL;;;;;N;ARABIC LETTER GAF WITH TWO DOTS VERTICAL BELOW;;;; 06B4;ARABIC LETTER GAF WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;; 06B5;ARABIC LETTER LAM WITH SMALL V;Lo;0;AL;;;;;N;;;;; 06B6;ARABIC LETTER LAM WITH DOT ABOVE;Lo;0;AL;;;;;N;;;;; 06B7;ARABIC LETTER LAM WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;; 06B8;ARABIC LETTER LAM WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;;;;; 06B9;ARABIC LETTER NOON WITH DOT BELOW;Lo;0;AL;;;;;N;;;;; 06BA;ARABIC LETTER NOON GHUNNA;Lo;0;AL;;;;;N;ARABIC LETTER DOTLESS NOON;;;; 06BB;ARABIC LETTER RNOON;Lo;0;AL;;;;;N;ARABIC LETTER DOTLESS NOON WITH SMALL TAH;;;; 06BC;ARABIC LETTER NOON WITH RING;Lo;0;AL;;;;;N;;;;; 06BD;ARABIC LETTER NOON WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;; 06BE;ARABIC LETTER HEH DOACHASHMEE;Lo;0;AL;;;;;N;ARABIC LETTER KNOTTED HA;;;; 06BF;ARABIC LETTER TCHEH WITH DOT ABOVE;Lo;0;AL;;;;;N;;;;; 06C0;ARABIC LETTER HEH WITH YEH ABOVE;Lo;0;AL;06D5 0654;;;;N;ARABIC LETTER HAMZAH ON HA;;;; 06C1;ARABIC LETTER HEH GOAL;Lo;0;AL;;;;;N;ARABIC LETTER HA GOAL;;;; 06C2;ARABIC LETTER HEH GOAL WITH HAMZA ABOVE;Lo;0;AL;06C1 0654;;;;N;ARABIC LETTER HAMZAH ON HA GOAL;;;; 06C3;ARABIC LETTER TEH MARBUTA GOAL;Lo;0;AL;;;;;N;ARABIC LETTER TAA MARBUTAH GOAL;;;; 06C4;ARABIC LETTER WAW WITH RING;Lo;0;AL;;;;;N;;;;; 06C5;ARABIC LETTER KIRGHIZ OE;Lo;0;AL;;;;;N;ARABIC LETTER WAW WITH BAR;;;; 06C6;ARABIC LETTER OE;Lo;0;AL;;;;;N;ARABIC LETTER WAW WITH SMALL V;;;; 06C7;ARABIC LETTER U;Lo;0;AL;;;;;N;ARABIC LETTER WAW WITH DAMMAH;;;; 06C8;ARABIC LETTER YU;Lo;0;AL;;;;;N;ARABIC LETTER WAW WITH ALEF ABOVE;;;; 06C9;ARABIC LETTER KIRGHIZ YU;Lo;0;AL;;;;;N;ARABIC LETTER WAW WITH INVERTED SMALL V;;;; 06CA;ARABIC LETTER WAW WITH TWO DOTS ABOVE;Lo;0;AL;;;;;N;;;;; 06CB;ARABIC LETTER VE;Lo;0;AL;;;;;N;ARABIC LETTER WAW WITH THREE DOTS ABOVE;;;; 06CC;ARABIC LETTER FARSI YEH;Lo;0;AL;;;;;N;ARABIC LETTER DOTLESS YA;;;; 06CD;ARABIC LETTER YEH WITH TAIL;Lo;0;AL;;;;;N;ARABIC LETTER YA WITH TAIL;;;; 06CE;ARABIC LETTER YEH WITH SMALL V;Lo;0;AL;;;;;N;ARABIC LETTER YA WITH SMALL V;;;; 06CF;ARABIC LETTER WAW WITH DOT ABOVE;Lo;0;AL;;;;;N;;;;; 06D0;ARABIC LETTER E;Lo;0;AL;;;;;N;ARABIC LETTER YA WITH TWO DOTS VERTICAL BELOW;*;;; 06D1;ARABIC LETTER YEH WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;ARABIC LETTER YA WITH THREE DOTS BELOW;;;; 06D2;ARABIC LETTER YEH BARREE;Lo;0;AL;;;;;N;ARABIC LETTER YA BARREE;;;; 06D3;ARABIC LETTER YEH BARREE WITH HAMZA ABOVE;Lo;0;AL;06D2 0654;;;;N;ARABIC LETTER HAMZAH ON YA BARREE;;;; 06D4;ARABIC FULL STOP;Po;0;AL;;;;;N;ARABIC PERIOD;;;; 06D5;ARABIC LETTER AE;Lo;0;AL;;;;;N;;;;; 06D6;ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA;Mn;230;NSM;;;;;N;;;;; 06D7;ARABIC SMALL HIGH LIGATURE QAF WITH LAM WITH ALEF MAKSURA;Mn;230;NSM;;;;;N;;;;; 06D8;ARABIC SMALL HIGH MEEM INITIAL FORM;Mn;230;NSM;;;;;N;;;;; 06D9;ARABIC SMALL HIGH LAM ALEF;Mn;230;NSM;;;;;N;;;;; 06DA;ARABIC SMALL HIGH JEEM;Mn;230;NSM;;;;;N;;;;; 06DB;ARABIC SMALL HIGH THREE DOTS;Mn;230;NSM;;;;;N;;;;; 06DC;ARABIC SMALL HIGH SEEN;Mn;230;NSM;;;;;N;;;;; 06DD;ARABIC END OF AYAH;Me;0;NSM;;;;;N;;;;; 06DE;ARABIC START OF RUB EL HIZB;Me;0;NSM;;;;;N;;;;; 06DF;ARABIC SMALL HIGH ROUNDED ZERO;Mn;230;NSM;;;;;N;;;;; 06E0;ARABIC SMALL HIGH UPRIGHT RECTANGULAR ZERO;Mn;230;NSM;;;;;N;;;;; 06E1;ARABIC SMALL HIGH DOTLESS HEAD OF KHAH;Mn;230;NSM;;;;;N;;;;; 06E2;ARABIC SMALL HIGH MEEM ISOLATED FORM;Mn;230;NSM;;;;;N;;;;; 06E3;ARABIC SMALL LOW SEEN;Mn;220;NSM;;;;;N;;;;; 06E4;ARABIC SMALL HIGH MADDA;Mn;230;NSM;;;;;N;;;;; 06E5;ARABIC SMALL WAW;Lm;0;AL;;;;;N;;;;; 06E6;ARABIC SMALL YEH;Lm;0;AL;;;;;N;;;;; 06E7;ARABIC SMALL HIGH YEH;Mn;230;NSM;;;;;N;;;;; 06E8;ARABIC SMALL HIGH NOON;Mn;230;NSM;;;;;N;;;;; 06E9;ARABIC PLACE OF SAJDAH;So;0;ON;;;;;N;;;;; 06EA;ARABIC EMPTY CENTRE LOW STOP;Mn;220;NSM;;;;;N;;;;; 06EB;ARABIC EMPTY CENTRE HIGH STOP;Mn;230;NSM;;;;;N;;;;; 06EC;ARABIC ROUNDED HIGH STOP WITH FILLED CENTRE;Mn;230;NSM;;;;;N;;;;; 06ED;ARABIC SMALL LOW MEEM;Mn;220;NSM;;;;;N;;;;; 06F0;EXTENDED ARABIC-INDIC DIGIT ZERO;Nd;0;EN;;0;0;0;N;EASTERN ARABIC-INDIC DIGIT ZERO;;;; 06F1;EXTENDED ARABIC-INDIC DIGIT ONE;Nd;0;EN;;1;1;1;N;EASTERN ARABIC-INDIC DIGIT ONE;;;; 06F2;EXTENDED ARABIC-INDIC DIGIT TWO;Nd;0;EN;;2;2;2;N;EASTERN ARABIC-INDIC DIGIT TWO;;;; 06F3;EXTENDED ARABIC-INDIC DIGIT THREE;Nd;0;EN;;3;3;3;N;EASTERN ARABIC-INDIC DIGIT THREE;;;; 06F4;EXTENDED ARABIC-INDIC DIGIT FOUR;Nd;0;EN;;4;4;4;N;EASTERN ARABIC-INDIC DIGIT FOUR;;;; 06F5;EXTENDED ARABIC-INDIC DIGIT FIVE;Nd;0;EN;;5;5;5;N;EASTERN ARABIC-INDIC DIGIT FIVE;;;; 06F6;EXTENDED ARABIC-INDIC DIGIT SIX;Nd;0;EN;;6;6;6;N;EASTERN ARABIC-INDIC DIGIT SIX;;;; 06F7;EXTENDED ARABIC-INDIC DIGIT SEVEN;Nd;0;EN;;7;7;7;N;EASTERN ARABIC-INDIC DIGIT SEVEN;;;; 06F8;EXTENDED ARABIC-INDIC DIGIT EIGHT;Nd;0;EN;;8;8;8;N;EASTERN ARABIC-INDIC DIGIT EIGHT;;;; 06F9;EXTENDED ARABIC-INDIC DIGIT NINE;Nd;0;EN;;9;9;9;N;EASTERN ARABIC-INDIC DIGIT NINE;;;; 06FA;ARABIC LETTER SHEEN WITH DOT BELOW;Lo;0;AL;;;;;N;;;;; 06FB;ARABIC LETTER DAD WITH DOT BELOW;Lo;0;AL;;;;;N;;;;; 06FC;ARABIC LETTER GHAIN WITH DOT BELOW;Lo;0;AL;;;;;N;;;;; 06FD;ARABIC SIGN SINDHI AMPERSAND;So;0;AL;;;;;N;;;;; 06FE;ARABIC SIGN SINDHI POSTPOSITION MEN;So;0;AL;;;;;N;;;;; 0700;SYRIAC END OF PARAGRAPH;Po;0;AL;;;;;N;;;;; 0701;SYRIAC SUPRALINEAR FULL STOP;Po;0;AL;;;;;N;;;;; 0702;SYRIAC SUBLINEAR FULL STOP;Po;0;AL;;;;;N;;;;; 0703;SYRIAC SUPRALINEAR COLON;Po;0;AL;;;;;N;;;;; 0704;SYRIAC SUBLINEAR COLON;Po;0;AL;;;;;N;;;;; 0705;SYRIAC HORIZONTAL COLON;Po;0;AL;;;;;N;;;;; 0706;SYRIAC COLON SKEWED LEFT;Po;0;AL;;;;;N;;;;; 0707;SYRIAC COLON SKEWED RIGHT;Po;0;AL;;;;;N;;;;; 0708;SYRIAC SUPRALINEAR COLON SKEWED LEFT;Po;0;AL;;;;;N;;;;; 0709;SYRIAC SUBLINEAR COLON SKEWED RIGHT;Po;0;AL;;;;;N;;;;; 070A;SYRIAC CONTRACTION;Po;0;AL;;;;;N;;;;; 070B;SYRIAC HARKLEAN OBELUS;Po;0;AL;;;;;N;;;;; 070C;SYRIAC HARKLEAN METOBELUS;Po;0;AL;;;;;N;;;;; 070D;SYRIAC HARKLEAN ASTERISCUS;Po;0;AL;;;;;N;;;;; 070F;SYRIAC ABBREVIATION MARK;Cf;0;BN;;;;;N;;;;; 0710;SYRIAC LETTER ALAPH;Lo;0;AL;;;;;N;;;;; 0711;SYRIAC LETTER SUPERSCRIPT ALAPH;Mn;36;NSM;;;;;N;;;;; 0712;SYRIAC LETTER BETH;Lo;0;AL;;;;;N;;;;; 0713;SYRIAC LETTER GAMAL;Lo;0;AL;;;;;N;;;;; 0714;SYRIAC LETTER GAMAL GARSHUNI;Lo;0;AL;;;;;N;;;;; 0715;SYRIAC LETTER DALATH;Lo;0;AL;;;;;N;;;;; 0716;SYRIAC LETTER DOTLESS DALATH RISH;Lo;0;AL;;;;;N;;;;; 0717;SYRIAC LETTER HE;Lo;0;AL;;;;;N;;;;; 0718;SYRIAC LETTER WAW;Lo;0;AL;;;;;N;;;;; 0719;SYRIAC LETTER ZAIN;Lo;0;AL;;;;;N;;;;; 071A;SYRIAC LETTER HETH;Lo;0;AL;;;;;N;;;;; 071B;SYRIAC LETTER TETH;Lo;0;AL;;;;;N;;;;; 071C;SYRIAC LETTER TETH GARSHUNI;Lo;0;AL;;;;;N;;;;; 071D;SYRIAC LETTER YUDH;Lo;0;AL;;;;;N;;;;; 071E;SYRIAC LETTER YUDH HE;Lo;0;AL;;;;;N;;;;; 071F;SYRIAC LETTER KAPH;Lo;0;AL;;;;;N;;;;; 0720;SYRIAC LETTER LAMADH;Lo;0;AL;;;;;N;;;;; 0721;SYRIAC LETTER MIM;Lo;0;AL;;;;;N;;;;; 0722;SYRIAC LETTER NUN;Lo;0;AL;;;;;N;;;;; 0723;SYRIAC LETTER SEMKATH;Lo;0;AL;;;;;N;;;;; 0724;SYRIAC LETTER FINAL SEMKATH;Lo;0;AL;;;;;N;;;;; 0725;SYRIAC LETTER E;Lo;0;AL;;;;;N;;;;; 0726;SYRIAC LETTER PE;Lo;0;AL;;;;;N;;;;; 0727;SYRIAC LETTER REVERSED PE;Lo;0;AL;;;;;N;;;;; 0728;SYRIAC LETTER SADHE;Lo;0;AL;;;;;N;;;;; 0729;SYRIAC LETTER QAPH;Lo;0;AL;;;;;N;;;;; 072A;SYRIAC LETTER RISH;Lo;0;AL;;;;;N;;;;; 072B;SYRIAC LETTER SHIN;Lo;0;AL;;;;;N;;;;; 072C;SYRIAC LETTER TAW;Lo;0;AL;;;;;N;;;;; 0730;SYRIAC PTHAHA ABOVE;Mn;230;NSM;;;;;N;;;;; 0731;SYRIAC PTHAHA BELOW;Mn;220;NSM;;;;;N;;;;; 0732;SYRIAC PTHAHA DOTTED;Mn;230;NSM;;;;;N;;;;; 0733;SYRIAC ZQAPHA ABOVE;Mn;230;NSM;;;;;N;;;;; 0734;SYRIAC ZQAPHA BELOW;Mn;220;NSM;;;;;N;;;;; 0735;SYRIAC ZQAPHA DOTTED;Mn;230;NSM;;;;;N;;;;; 0736;SYRIAC RBASA ABOVE;Mn;230;NSM;;;;;N;;;;; 0737;SYRIAC RBASA BELOW;Mn;220;NSM;;;;;N;;;;; 0738;SYRIAC DOTTED ZLAMA HORIZONTAL;Mn;220;NSM;;;;;N;;;;; 0739;SYRIAC DOTTED ZLAMA ANGULAR;Mn;220;NSM;;;;;N;;;;; 073A;SYRIAC HBASA ABOVE;Mn;230;NSM;;;;;N;;;;; 073B;SYRIAC HBASA BELOW;Mn;220;NSM;;;;;N;;;;; 073C;SYRIAC HBASA-ESASA DOTTED;Mn;220;NSM;;;;;N;;;;; 073D;SYRIAC ESASA ABOVE;Mn;230;NSM;;;;;N;;;;; 073E;SYRIAC ESASA BELOW;Mn;220;NSM;;;;;N;;;;; 073F;SYRIAC RWAHA;Mn;230;NSM;;;;;N;;;;; 0740;SYRIAC FEMININE DOT;Mn;230;NSM;;;;;N;;;;; 0741;SYRIAC QUSHSHAYA;Mn;230;NSM;;;;;N;;;;; 0742;SYRIAC RUKKAKHA;Mn;220;NSM;;;;;N;;;;; 0743;SYRIAC TWO VERTICAL DOTS ABOVE;Mn;230;NSM;;;;;N;;;;; 0744;SYRIAC TWO VERTICAL DOTS BELOW;Mn;220;NSM;;;;;N;;;;; 0745;SYRIAC THREE DOTS ABOVE;Mn;230;NSM;;;;;N;;;;; 0746;SYRIAC THREE DOTS BELOW;Mn;220;NSM;;;;;N;;;;; 0747;SYRIAC OBLIQUE LINE ABOVE;Mn;230;NSM;;;;;N;;;;; 0748;SYRIAC OBLIQUE LINE BELOW;Mn;220;NSM;;;;;N;;;;; 0749;SYRIAC MUSIC;Mn;230;NSM;;;;;N;;;;; 074A;SYRIAC BARREKH;Mn;230;NSM;;;;;N;;;;; 0780;THAANA LETTER HAA;Lo;0;AL;;;;;N;;;;; 0781;THAANA LETTER SHAVIYANI;Lo;0;AL;;;;;N;;;;; 0782;THAANA LETTER NOONU;Lo;0;AL;;;;;N;;;;; 0783;THAANA LETTER RAA;Lo;0;AL;;;;;N;;;;; 0784;THAANA LETTER BAA;Lo;0;AL;;;;;N;;;;; 0785;THAANA LETTER LHAVIYANI;Lo;0;AL;;;;;N;;;;; 0786;THAANA LETTER KAAFU;Lo;0;AL;;;;;N;;;;; 0787;THAANA LETTER ALIFU;Lo;0;AL;;;;;N;;;;; 0788;THAANA LETTER VAAVU;Lo;0;AL;;;;;N;;;;; 0789;THAANA LETTER MEEMU;Lo;0;AL;;;;;N;;;;; 078A;THAANA LETTER FAAFU;Lo;0;AL;;;;;N;;;;; 078B;THAANA LETTER DHAALU;Lo;0;AL;;;;;N;;;;; 078C;THAANA LETTER THAA;Lo;0;AL;;;;;N;;;;; 078D;THAANA LETTER LAAMU;Lo;0;AL;;;;;N;;;;; 078E;THAANA LETTER GAAFU;Lo;0;AL;;;;;N;;;;; 078F;THAANA LETTER GNAVIYANI;Lo;0;AL;;;;;N;;;;; 0790;THAANA LETTER SEENU;Lo;0;AL;;;;;N;;;;; 0791;THAANA LETTER DAVIYANI;Lo;0;AL;;;;;N;;;;; 0792;THAANA LETTER ZAVIYANI;Lo;0;AL;;;;;N;;;;; 0793;THAANA LETTER TAVIYANI;Lo;0;AL;;;;;N;;;;; 0794;THAANA LETTER YAA;Lo;0;AL;;;;;N;;;;; 0795;THAANA LETTER PAVIYANI;Lo;0;AL;;;;;N;;;;; 0796;THAANA LETTER JAVIYANI;Lo;0;AL;;;;;N;;;;; 0797;THAANA LETTER CHAVIYANI;Lo;0;AL;;;;;N;;;;; 0798;THAANA LETTER TTAA;Lo;0;AL;;;;;N;;;;; 0799;THAANA LETTER HHAA;Lo;0;AL;;;;;N;;;;; 079A;THAANA LETTER KHAA;Lo;0;AL;;;;;N;;;;; 079B;THAANA LETTER THAALU;Lo;0;AL;;;;;N;;;;; 079C;THAANA LETTER ZAA;Lo;0;AL;;;;;N;;;;; 079D;THAANA LETTER SHEENU;Lo;0;AL;;;;;N;;;;; 079E;THAANA LETTER SAADHU;Lo;0;AL;;;;;N;;;;; 079F;THAANA LETTER DAADHU;Lo;0;AL;;;;;N;;;;; 07A0;THAANA LETTER TO;Lo;0;AL;;;;;N;;;;; 07A1;THAANA LETTER ZO;Lo;0;AL;;;;;N;;;;; 07A2;THAANA LETTER AINU;Lo;0;AL;;;;;N;;;;; 07A3;THAANA LETTER GHAINU;Lo;0;AL;;;;;N;;;;; 07A4;THAANA LETTER QAAFU;Lo;0;AL;;;;;N;;;;; 07A5;THAANA LETTER WAAVU;Lo;0;AL;;;;;N;;;;; 07A6;THAANA ABAFILI;Mn;0;NSM;;;;;N;;;;; 07A7;THAANA AABAAFILI;Mn;0;NSM;;;;;N;;;;; 07A8;THAANA IBIFILI;Mn;0;NSM;;;;;N;;;;; 07A9;THAANA EEBEEFILI;Mn;0;NSM;;;;;N;;;;; 07AA;THAANA UBUFILI;Mn;0;NSM;;;;;N;;;;; 07AB;THAANA OOBOOFILI;Mn;0;NSM;;;;;N;;;;; 07AC;THAANA EBEFILI;Mn;0;NSM;;;;;N;;;;; 07AD;THAANA EYBEYFILI;Mn;0;NSM;;;;;N;;;;; 07AE;THAANA OBOFILI;Mn;0;NSM;;;;;N;;;;; 07AF;THAANA OABOAFILI;Mn;0;NSM;;;;;N;;;;; 07B0;THAANA SUKUN;Mn;0;NSM;;;;;N;;;;; 0901;DEVANAGARI SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;; 0902;DEVANAGARI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;; 0903;DEVANAGARI SIGN VISARGA;Mc;0;L;;;;;N;;;;; 0905;DEVANAGARI LETTER A;Lo;0;L;;;;;N;;;;; 0906;DEVANAGARI LETTER AA;Lo;0;L;;;;;N;;;;; 0907;DEVANAGARI LETTER I;Lo;0;L;;;;;N;;;;; 0908;DEVANAGARI LETTER II;Lo;0;L;;;;;N;;;;; 0909;DEVANAGARI LETTER U;Lo;0;L;;;;;N;;;;; 090A;DEVANAGARI LETTER UU;Lo;0;L;;;;;N;;;;; 090B;DEVANAGARI LETTER VOCALIC R;Lo;0;L;;;;;N;;;;; 090C;DEVANAGARI LETTER VOCALIC L;Lo;0;L;;;;;N;;;;; 090D;DEVANAGARI LETTER CANDRA E;Lo;0;L;;;;;N;;;;; 090E;DEVANAGARI LETTER SHORT E;Lo;0;L;;;;;N;;;;; 090F;DEVANAGARI LETTER E;Lo;0;L;;;;;N;;;;; 0910;DEVANAGARI LETTER AI;Lo;0;L;;;;;N;;;;; 0911;DEVANAGARI LETTER CANDRA O;Lo;0;L;;;;;N;;;;; 0912;DEVANAGARI LETTER SHORT O;Lo;0;L;;;;;N;;;;; 0913;DEVANAGARI LETTER O;Lo;0;L;;;;;N;;;;; 0914;DEVANAGARI LETTER AU;Lo;0;L;;;;;N;;;;; 0915;DEVANAGARI LETTER KA;Lo;0;L;;;;;N;;;;; 0916;DEVANAGARI LETTER KHA;Lo;0;L;;;;;N;;;;; 0917;DEVANAGARI LETTER GA;Lo;0;L;;;;;N;;;;; 0918;DEVANAGARI LETTER GHA;Lo;0;L;;;;;N;;;;; 0919;DEVANAGARI LETTER NGA;Lo;0;L;;;;;N;;;;; 091A;DEVANAGARI LETTER CA;Lo;0;L;;;;;N;;;;; 091B;DEVANAGARI LETTER CHA;Lo;0;L;;;;;N;;;;; 091C;DEVANAGARI LETTER JA;Lo;0;L;;;;;N;;;;; 091D;DEVANAGARI LETTER JHA;Lo;0;L;;;;;N;;;;; 091E;DEVANAGARI LETTER NYA;Lo;0;L;;;;;N;;;;; 091F;DEVANAGARI LETTER TTA;Lo;0;L;;;;;N;;;;; 0920;DEVANAGARI LETTER TTHA;Lo;0;L;;;;;N;;;;; 0921;DEVANAGARI LETTER DDA;Lo;0;L;;;;;N;;;;; 0922;DEVANAGARI LETTER DDHA;Lo;0;L;;;;;N;;;;; 0923;DEVANAGARI LETTER NNA;Lo;0;L;;;;;N;;;;; 0924;DEVANAGARI LETTER TA;Lo;0;L;;;;;N;;;;; 0925;DEVANAGARI LETTER THA;Lo;0;L;;;;;N;;;;; 0926;DEVANAGARI LETTER DA;Lo;0;L;;;;;N;;;;; 0927;DEVANAGARI LETTER DHA;Lo;0;L;;;;;N;;;;; 0928;DEVANAGARI LETTER NA;Lo;0;L;;;;;N;;;;; 0929;DEVANAGARI LETTER NNNA;Lo;0;L;0928 093C;;;;N;;;;; 092A;DEVANAGARI LETTER PA;Lo;0;L;;;;;N;;;;; 092B;DEVANAGARI LETTER PHA;Lo;0;L;;;;;N;;;;; 092C;DEVANAGARI LETTER BA;Lo;0;L;;;;;N;;;;; 092D;DEVANAGARI LETTER BHA;Lo;0;L;;;;;N;;;;; 092E;DEVANAGARI LETTER MA;Lo;0;L;;;;;N;;;;; 092F;DEVANAGARI LETTER YA;Lo;0;L;;;;;N;;;;; 0930;DEVANAGARI LETTER RA;Lo;0;L;;;;;N;;;;; 0931;DEVANAGARI LETTER RRA;Lo;0;L;0930 093C;;;;N;;;;; 0932;DEVANAGARI LETTER LA;Lo;0;L;;;;;N;;;;; 0933;DEVANAGARI LETTER LLA;Lo;0;L;;;;;N;;;;; 0934;DEVANAGARI LETTER LLLA;Lo;0;L;0933 093C;;;;N;;;;; 0935;DEVANAGARI LETTER VA;Lo;0;L;;;;;N;;;;; 0936;DEVANAGARI LETTER SHA;Lo;0;L;;;;;N;;;;; 0937;DEVANAGARI LETTER SSA;Lo;0;L;;;;;N;;;;; 0938;DEVANAGARI LETTER SA;Lo;0;L;;;;;N;;;;; 0939;DEVANAGARI LETTER HA;Lo;0;L;;;;;N;;;;; 093C;DEVANAGARI SIGN NUKTA;Mn;7;NSM;;;;;N;;;;; 093D;DEVANAGARI SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;; 093E;DEVANAGARI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; 093F;DEVANAGARI VOWEL SIGN I;Mc;0;L;;;;;N;;;;; 0940;DEVANAGARI VOWEL SIGN II;Mc;0;L;;;;;N;;;;; 0941;DEVANAGARI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; 0942;DEVANAGARI VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;; 0943;DEVANAGARI VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;; 0944;DEVANAGARI VOWEL SIGN VOCALIC RR;Mn;0;NSM;;;;;N;;;;; 0945;DEVANAGARI VOWEL SIGN CANDRA E;Mn;0;NSM;;;;;N;;;;; 0946;DEVANAGARI VOWEL SIGN SHORT E;Mn;0;NSM;;;;;N;;;;; 0947;DEVANAGARI VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;; 0948;DEVANAGARI VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;; 0949;DEVANAGARI VOWEL SIGN CANDRA O;Mc;0;L;;;;;N;;;;; 094A;DEVANAGARI VOWEL SIGN SHORT O;Mc;0;L;;;;;N;;;;; 094B;DEVANAGARI VOWEL SIGN O;Mc;0;L;;;;;N;;;;; 094C;DEVANAGARI VOWEL SIGN AU;Mc;0;L;;;;;N;;;;; 094D;DEVANAGARI SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;; 0950;DEVANAGARI OM;Lo;0;L;;;;;N;;;;; 0951;DEVANAGARI STRESS SIGN UDATTA;Mn;230;NSM;;;;;N;;;;; 0952;DEVANAGARI STRESS SIGN ANUDATTA;Mn;220;NSM;;;;;N;;;;; 0953;DEVANAGARI GRAVE ACCENT;Mn;230;NSM;;;;;N;;;;; 0954;DEVANAGARI ACUTE ACCENT;Mn;230;NSM;;;;;N;;;;; 0958;DEVANAGARI LETTER QA;Lo;0;L;0915 093C;;;;N;;;;; 0959;DEVANAGARI LETTER KHHA;Lo;0;L;0916 093C;;;;N;;;;; 095A;DEVANAGARI LETTER GHHA;Lo;0;L;0917 093C;;;;N;;;;; 095B;DEVANAGARI LETTER ZA;Lo;0;L;091C 093C;;;;N;;;;; 095C;DEVANAGARI LETTER DDDHA;Lo;0;L;0921 093C;;;;N;;;;; 095D;DEVANAGARI LETTER RHA;Lo;0;L;0922 093C;;;;N;;;;; 095E;DEVANAGARI LETTER FA;Lo;0;L;092B 093C;;;;N;;;;; 095F;DEVANAGARI LETTER YYA;Lo;0;L;092F 093C;;;;N;;;;; 0960;DEVANAGARI LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;; 0961;DEVANAGARI LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;; 0962;DEVANAGARI VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;; 0963;DEVANAGARI VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;; 0964;DEVANAGARI DANDA;Po;0;L;;;;;N;;;;; 0965;DEVANAGARI DOUBLE DANDA;Po;0;L;;;;;N;;;;; 0966;DEVANAGARI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 0967;DEVANAGARI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 0968;DEVANAGARI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 0969;DEVANAGARI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 096A;DEVANAGARI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 096B;DEVANAGARI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 096C;DEVANAGARI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 096D;DEVANAGARI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 096E;DEVANAGARI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 096F;DEVANAGARI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 0970;DEVANAGARI ABBREVIATION SIGN;Po;0;L;;;;;N;;;;; 0981;BENGALI SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;; 0982;BENGALI SIGN ANUSVARA;Mc;0;L;;;;;N;;;;; 0983;BENGALI SIGN VISARGA;Mc;0;L;;;;;N;;;;; 0985;BENGALI LETTER A;Lo;0;L;;;;;N;;;;; 0986;BENGALI LETTER AA;Lo;0;L;;;;;N;;;;; 0987;BENGALI LETTER I;Lo;0;L;;;;;N;;;;; 0988;BENGALI LETTER II;Lo;0;L;;;;;N;;;;; 0989;BENGALI LETTER U;Lo;0;L;;;;;N;;;;; 098A;BENGALI LETTER UU;Lo;0;L;;;;;N;;;;; 098B;BENGALI LETTER VOCALIC R;Lo;0;L;;;;;N;;;;; 098C;BENGALI LETTER VOCALIC L;Lo;0;L;;;;;N;;;;; 098F;BENGALI LETTER E;Lo;0;L;;;;;N;;;;; 0990;BENGALI LETTER AI;Lo;0;L;;;;;N;;;;; 0993;BENGALI LETTER O;Lo;0;L;;;;;N;;;;; 0994;BENGALI LETTER AU;Lo;0;L;;;;;N;;;;; 0995;BENGALI LETTER KA;Lo;0;L;;;;;N;;;;; 0996;BENGALI LETTER KHA;Lo;0;L;;;;;N;;;;; 0997;BENGALI LETTER GA;Lo;0;L;;;;;N;;;;; 0998;BENGALI LETTER GHA;Lo;0;L;;;;;N;;;;; 0999;BENGALI LETTER NGA;Lo;0;L;;;;;N;;;;; 099A;BENGALI LETTER CA;Lo;0;L;;;;;N;;;;; 099B;BENGALI LETTER CHA;Lo;0;L;;;;;N;;;;; 099C;BENGALI LETTER JA;Lo;0;L;;;;;N;;;;; 099D;BENGALI LETTER JHA;Lo;0;L;;;;;N;;;;; 099E;BENGALI LETTER NYA;Lo;0;L;;;;;N;;;;; 099F;BENGALI LETTER TTA;Lo;0;L;;;;;N;;;;; 09A0;BENGALI LETTER TTHA;Lo;0;L;;;;;N;;;;; 09A1;BENGALI LETTER DDA;Lo;0;L;;;;;N;;;;; 09A2;BENGALI LETTER DDHA;Lo;0;L;;;;;N;;;;; 09A3;BENGALI LETTER NNA;Lo;0;L;;;;;N;;;;; 09A4;BENGALI LETTER TA;Lo;0;L;;;;;N;;;;; 09A5;BENGALI LETTER THA;Lo;0;L;;;;;N;;;;; 09A6;BENGALI LETTER DA;Lo;0;L;;;;;N;;;;; 09A7;BENGALI LETTER DHA;Lo;0;L;;;;;N;;;;; 09A8;BENGALI LETTER NA;Lo;0;L;;;;;N;;;;; 09AA;BENGALI LETTER PA;Lo;0;L;;;;;N;;;;; 09AB;BENGALI LETTER PHA;Lo;0;L;;;;;N;;;;; 09AC;BENGALI LETTER BA;Lo;0;L;;;;;N;;;;; 09AD;BENGALI LETTER BHA;Lo;0;L;;;;;N;;;;; 09AE;BENGALI LETTER MA;Lo;0;L;;;;;N;;;;; 09AF;BENGALI LETTER YA;Lo;0;L;;;;;N;;;;; 09B0;BENGALI LETTER RA;Lo;0;L;;;;;N;;;;; 09B2;BENGALI LETTER LA;Lo;0;L;;;;;N;;;;; 09B6;BENGALI LETTER SHA;Lo;0;L;;;;;N;;;;; 09B7;BENGALI LETTER SSA;Lo;0;L;;;;;N;;;;; 09B8;BENGALI LETTER SA;Lo;0;L;;;;;N;;;;; 09B9;BENGALI LETTER HA;Lo;0;L;;;;;N;;;;; 09BC;BENGALI SIGN NUKTA;Mn;7;NSM;;;;;N;;;;; 09BE;BENGALI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; 09BF;BENGALI VOWEL SIGN I;Mc;0;L;;;;;N;;;;; 09C0;BENGALI VOWEL SIGN II;Mc;0;L;;;;;N;;;;; 09C1;BENGALI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; 09C2;BENGALI VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;; 09C3;BENGALI VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;; 09C4;BENGALI VOWEL SIGN VOCALIC RR;Mn;0;NSM;;;;;N;;;;; 09C7;BENGALI VOWEL SIGN E;Mc;0;L;;;;;N;;;;; 09C8;BENGALI VOWEL SIGN AI;Mc;0;L;;;;;N;;;;; 09CB;BENGALI VOWEL SIGN O;Mc;0;L;09C7 09BE;;;;N;;;;; 09CC;BENGALI VOWEL SIGN AU;Mc;0;L;09C7 09D7;;;;N;;;;; 09CD;BENGALI SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;; 09D7;BENGALI AU LENGTH MARK;Mc;0;L;;;;;N;;;;; 09DC;BENGALI LETTER RRA;Lo;0;L;09A1 09BC;;;;N;;;;; 09DD;BENGALI LETTER RHA;Lo;0;L;09A2 09BC;;;;N;;;;; 09DF;BENGALI LETTER YYA;Lo;0;L;09AF 09BC;;;;N;;;;; 09E0;BENGALI LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;; 09E1;BENGALI LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;; 09E2;BENGALI VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;; 09E3;BENGALI VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;; 09E6;BENGALI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 09E7;BENGALI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 09E8;BENGALI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 09E9;BENGALI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 09EA;BENGALI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 09EB;BENGALI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 09EC;BENGALI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 09ED;BENGALI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 09EE;BENGALI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 09EF;BENGALI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 09F0;BENGALI LETTER RA WITH MIDDLE DIAGONAL;Lo;0;L;;;;;N;;Assamese;;; 09F1;BENGALI LETTER RA WITH LOWER DIAGONAL;Lo;0;L;;;;;N;BENGALI LETTER VA WITH LOWER DIAGONAL;Assamese;;; 09F2;BENGALI RUPEE MARK;Sc;0;ET;;;;;N;;;;; 09F3;BENGALI RUPEE SIGN;Sc;0;ET;;;;;N;;;;; 09F4;BENGALI CURRENCY NUMERATOR ONE;No;0;L;;;;1;N;;;;; 09F5;BENGALI CURRENCY NUMERATOR TWO;No;0;L;;;;2;N;;;;; 09F6;BENGALI CURRENCY NUMERATOR THREE;No;0;L;;;;3;N;;;;; 09F7;BENGALI CURRENCY NUMERATOR FOUR;No;0;L;;;;4;N;;;;; 09F8;BENGALI CURRENCY NUMERATOR ONE LESS THAN THE DENOMINATOR;No;0;L;;;;;N;;;;; 09F9;BENGALI CURRENCY DENOMINATOR SIXTEEN;No;0;L;;;;16;N;;;;; 09FA;BENGALI ISSHAR;So;0;L;;;;;N;;;;; 0A02;GURMUKHI SIGN BINDI;Mn;0;NSM;;;;;N;;;;; 0A05;GURMUKHI LETTER A;Lo;0;L;;;;;N;;;;; 0A06;GURMUKHI LETTER AA;Lo;0;L;;;;;N;;;;; 0A07;GURMUKHI LETTER I;Lo;0;L;;;;;N;;;;; 0A08;GURMUKHI LETTER II;Lo;0;L;;;;;N;;;;; 0A09;GURMUKHI LETTER U;Lo;0;L;;;;;N;;;;; 0A0A;GURMUKHI LETTER UU;Lo;0;L;;;;;N;;;;; 0A0F;GURMUKHI LETTER EE;Lo;0;L;;;;;N;;;;; 0A10;GURMUKHI LETTER AI;Lo;0;L;;;;;N;;;;; 0A13;GURMUKHI LETTER OO;Lo;0;L;;;;;N;;;;; 0A14;GURMUKHI LETTER AU;Lo;0;L;;;;;N;;;;; 0A15;GURMUKHI LETTER KA;Lo;0;L;;;;;N;;;;; 0A16;GURMUKHI LETTER KHA;Lo;0;L;;;;;N;;;;; 0A17;GURMUKHI LETTER GA;Lo;0;L;;;;;N;;;;; 0A18;GURMUKHI LETTER GHA;Lo;0;L;;;;;N;;;;; 0A19;GURMUKHI LETTER NGA;Lo;0;L;;;;;N;;;;; 0A1A;GURMUKHI LETTER CA;Lo;0;L;;;;;N;;;;; 0A1B;GURMUKHI LETTER CHA;Lo;0;L;;;;;N;;;;; 0A1C;GURMUKHI LETTER JA;Lo;0;L;;;;;N;;;;; 0A1D;GURMUKHI LETTER JHA;Lo;0;L;;;;;N;;;;; 0A1E;GURMUKHI LETTER NYA;Lo;0;L;;;;;N;;;;; 0A1F;GURMUKHI LETTER TTA;Lo;0;L;;;;;N;;;;; 0A20;GURMUKHI LETTER TTHA;Lo;0;L;;;;;N;;;;; 0A21;GURMUKHI LETTER DDA;Lo;0;L;;;;;N;;;;; 0A22;GURMUKHI LETTER DDHA;Lo;0;L;;;;;N;;;;; 0A23;GURMUKHI LETTER NNA;Lo;0;L;;;;;N;;;;; 0A24;GURMUKHI LETTER TA;Lo;0;L;;;;;N;;;;; 0A25;GURMUKHI LETTER THA;Lo;0;L;;;;;N;;;;; 0A26;GURMUKHI LETTER DA;Lo;0;L;;;;;N;;;;; 0A27;GURMUKHI LETTER DHA;Lo;0;L;;;;;N;;;;; 0A28;GURMUKHI LETTER NA;Lo;0;L;;;;;N;;;;; 0A2A;GURMUKHI LETTER PA;Lo;0;L;;;;;N;;;;; 0A2B;GURMUKHI LETTER PHA;Lo;0;L;;;;;N;;;;; 0A2C;GURMUKHI LETTER BA;Lo;0;L;;;;;N;;;;; 0A2D;GURMUKHI LETTER BHA;Lo;0;L;;;;;N;;;;; 0A2E;GURMUKHI LETTER MA;Lo;0;L;;;;;N;;;;; 0A2F;GURMUKHI LETTER YA;Lo;0;L;;;;;N;;;;; 0A30;GURMUKHI LETTER RA;Lo;0;L;;;;;N;;;;; 0A32;GURMUKHI LETTER LA;Lo;0;L;;;;;N;;;;; 0A33;GURMUKHI LETTER LLA;Lo;0;L;0A32 0A3C;;;;N;;;;; 0A35;GURMUKHI LETTER VA;Lo;0;L;;;;;N;;;;; 0A36;GURMUKHI LETTER SHA;Lo;0;L;0A38 0A3C;;;;N;;;;; 0A38;GURMUKHI LETTER SA;Lo;0;L;;;;;N;;;;; 0A39;GURMUKHI LETTER HA;Lo;0;L;;;;;N;;;;; 0A3C;GURMUKHI SIGN NUKTA;Mn;7;NSM;;;;;N;;;;; 0A3E;GURMUKHI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; 0A3F;GURMUKHI VOWEL SIGN I;Mc;0;L;;;;;N;;;;; 0A40;GURMUKHI VOWEL SIGN II;Mc;0;L;;;;;N;;;;; 0A41;GURMUKHI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; 0A42;GURMUKHI VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;; 0A47;GURMUKHI VOWEL SIGN EE;Mn;0;NSM;;;;;N;;;;; 0A48;GURMUKHI VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;; 0A4B;GURMUKHI VOWEL SIGN OO;Mn;0;NSM;;;;;N;;;;; 0A4C;GURMUKHI VOWEL SIGN AU;Mn;0;NSM;;;;;N;;;;; 0A4D;GURMUKHI SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;; 0A59;GURMUKHI LETTER KHHA;Lo;0;L;0A16 0A3C;;;;N;;;;; 0A5A;GURMUKHI LETTER GHHA;Lo;0;L;0A17 0A3C;;;;N;;;;; 0A5B;GURMUKHI LETTER ZA;Lo;0;L;0A1C 0A3C;;;;N;;;;; 0A5C;GURMUKHI LETTER RRA;Lo;0;L;;;;;N;;;;; 0A5E;GURMUKHI LETTER FA;Lo;0;L;0A2B 0A3C;;;;N;;;;; 0A66;GURMUKHI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 0A67;GURMUKHI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 0A68;GURMUKHI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 0A69;GURMUKHI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 0A6A;GURMUKHI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 0A6B;GURMUKHI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 0A6C;GURMUKHI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 0A6D;GURMUKHI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 0A6E;GURMUKHI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 0A6F;GURMUKHI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 0A70;GURMUKHI TIPPI;Mn;0;NSM;;;;;N;;;;; 0A71;GURMUKHI ADDAK;Mn;0;NSM;;;;;N;;;;; 0A72;GURMUKHI IRI;Lo;0;L;;;;;N;;;;; 0A73;GURMUKHI URA;Lo;0;L;;;;;N;;;;; 0A74;GURMUKHI EK ONKAR;Lo;0;L;;;;;N;;;;; 0A81;GUJARATI SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;; 0A82;GUJARATI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;; 0A83;GUJARATI SIGN VISARGA;Mc;0;L;;;;;N;;;;; 0A85;GUJARATI LETTER A;Lo;0;L;;;;;N;;;;; 0A86;GUJARATI LETTER AA;Lo;0;L;;;;;N;;;;; 0A87;GUJARATI LETTER I;Lo;0;L;;;;;N;;;;; 0A88;GUJARATI LETTER II;Lo;0;L;;;;;N;;;;; 0A89;GUJARATI LETTER U;Lo;0;L;;;;;N;;;;; 0A8A;GUJARATI LETTER UU;Lo;0;L;;;;;N;;;;; 0A8B;GUJARATI LETTER VOCALIC R;Lo;0;L;;;;;N;;;;; 0A8D;GUJARATI VOWEL CANDRA E;Lo;0;L;;;;;N;;;;; 0A8F;GUJARATI LETTER E;Lo;0;L;;;;;N;;;;; 0A90;GUJARATI LETTER AI;Lo;0;L;;;;;N;;;;; 0A91;GUJARATI VOWEL CANDRA O;Lo;0;L;;;;;N;;;;; 0A93;GUJARATI LETTER O;Lo;0;L;;;;;N;;;;; 0A94;GUJARATI LETTER AU;Lo;0;L;;;;;N;;;;; 0A95;GUJARATI LETTER KA;Lo;0;L;;;;;N;;;;; 0A96;GUJARATI LETTER KHA;Lo;0;L;;;;;N;;;;; 0A97;GUJARATI LETTER GA;Lo;0;L;;;;;N;;;;; 0A98;GUJARATI LETTER GHA;Lo;0;L;;;;;N;;;;; 0A99;GUJARATI LETTER NGA;Lo;0;L;;;;;N;;;;; 0A9A;GUJARATI LETTER CA;Lo;0;L;;;;;N;;;;; 0A9B;GUJARATI LETTER CHA;Lo;0;L;;;;;N;;;;; 0A9C;GUJARATI LETTER JA;Lo;0;L;;;;;N;;;;; 0A9D;GUJARATI LETTER JHA;Lo;0;L;;;;;N;;;;; 0A9E;GUJARATI LETTER NYA;Lo;0;L;;;;;N;;;;; 0A9F;GUJARATI LETTER TTA;Lo;0;L;;;;;N;;;;; 0AA0;GUJARATI LETTER TTHA;Lo;0;L;;;;;N;;;;; 0AA1;GUJARATI LETTER DDA;Lo;0;L;;;;;N;;;;; 0AA2;GUJARATI LETTER DDHA;Lo;0;L;;;;;N;;;;; 0AA3;GUJARATI LETTER NNA;Lo;0;L;;;;;N;;;;; 0AA4;GUJARATI LETTER TA;Lo;0;L;;;;;N;;;;; 0AA5;GUJARATI LETTER THA;Lo;0;L;;;;;N;;;;; 0AA6;GUJARATI LETTER DA;Lo;0;L;;;;;N;;;;; 0AA7;GUJARATI LETTER DHA;Lo;0;L;;;;;N;;;;; 0AA8;GUJARATI LETTER NA;Lo;0;L;;;;;N;;;;; 0AAA;GUJARATI LETTER PA;Lo;0;L;;;;;N;;;;; 0AAB;GUJARATI LETTER PHA;Lo;0;L;;;;;N;;;;; 0AAC;GUJARATI LETTER BA;Lo;0;L;;;;;N;;;;; 0AAD;GUJARATI LETTER BHA;Lo;0;L;;;;;N;;;;; 0AAE;GUJARATI LETTER MA;Lo;0;L;;;;;N;;;;; 0AAF;GUJARATI LETTER YA;Lo;0;L;;;;;N;;;;; 0AB0;GUJARATI LETTER RA;Lo;0;L;;;;;N;;;;; 0AB2;GUJARATI LETTER LA;Lo;0;L;;;;;N;;;;; 0AB3;GUJARATI LETTER LLA;Lo;0;L;;;;;N;;;;; 0AB5;GUJARATI LETTER VA;Lo;0;L;;;;;N;;;;; 0AB6;GUJARATI LETTER SHA;Lo;0;L;;;;;N;;;;; 0AB7;GUJARATI LETTER SSA;Lo;0;L;;;;;N;;;;; 0AB8;GUJARATI LETTER SA;Lo;0;L;;;;;N;;;;; 0AB9;GUJARATI LETTER HA;Lo;0;L;;;;;N;;;;; 0ABC;GUJARATI SIGN NUKTA;Mn;7;NSM;;;;;N;;;;; 0ABD;GUJARATI SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;; 0ABE;GUJARATI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; 0ABF;GUJARATI VOWEL SIGN I;Mc;0;L;;;;;N;;;;; 0AC0;GUJARATI VOWEL SIGN II;Mc;0;L;;;;;N;;;;; 0AC1;GUJARATI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; 0AC2;GUJARATI VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;; 0AC3;GUJARATI VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;; 0AC4;GUJARATI VOWEL SIGN VOCALIC RR;Mn;0;NSM;;;;;N;;;;; 0AC5;GUJARATI VOWEL SIGN CANDRA E;Mn;0;NSM;;;;;N;;;;; 0AC7;GUJARATI VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;; 0AC8;GUJARATI VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;; 0AC9;GUJARATI VOWEL SIGN CANDRA O;Mc;0;L;;;;;N;;;;; 0ACB;GUJARATI VOWEL SIGN O;Mc;0;L;;;;;N;;;;; 0ACC;GUJARATI VOWEL SIGN AU;Mc;0;L;;;;;N;;;;; 0ACD;GUJARATI SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;; 0AD0;GUJARATI OM;Lo;0;L;;;;;N;;;;; 0AE0;GUJARATI LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;; 0AE6;GUJARATI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 0AE7;GUJARATI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 0AE8;GUJARATI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 0AE9;GUJARATI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 0AEA;GUJARATI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 0AEB;GUJARATI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 0AEC;GUJARATI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 0AED;GUJARATI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 0AEE;GUJARATI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 0AEF;GUJARATI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 0B01;ORIYA SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;; 0B02;ORIYA SIGN ANUSVARA;Mc;0;L;;;;;N;;;;; 0B03;ORIYA SIGN VISARGA;Mc;0;L;;;;;N;;;;; 0B05;ORIYA LETTER A;Lo;0;L;;;;;N;;;;; 0B06;ORIYA LETTER AA;Lo;0;L;;;;;N;;;;; 0B07;ORIYA LETTER I;Lo;0;L;;;;;N;;;;; 0B08;ORIYA LETTER II;Lo;0;L;;;;;N;;;;; 0B09;ORIYA LETTER U;Lo;0;L;;;;;N;;;;; 0B0A;ORIYA LETTER UU;Lo;0;L;;;;;N;;;;; 0B0B;ORIYA LETTER VOCALIC R;Lo;0;L;;;;;N;;;;; 0B0C;ORIYA LETTER VOCALIC L;Lo;0;L;;;;;N;;;;; 0B0F;ORIYA LETTER E;Lo;0;L;;;;;N;;;;; 0B10;ORIYA LETTER AI;Lo;0;L;;;;;N;;;;; 0B13;ORIYA LETTER O;Lo;0;L;;;;;N;;;;; 0B14;ORIYA LETTER AU;Lo;0;L;;;;;N;;;;; 0B15;ORIYA LETTER KA;Lo;0;L;;;;;N;;;;; 0B16;ORIYA LETTER KHA;Lo;0;L;;;;;N;;;;; 0B17;ORIYA LETTER GA;Lo;0;L;;;;;N;;;;; 0B18;ORIYA LETTER GHA;Lo;0;L;;;;;N;;;;; 0B19;ORIYA LETTER NGA;Lo;0;L;;;;;N;;;;; 0B1A;ORIYA LETTER CA;Lo;0;L;;;;;N;;;;; 0B1B;ORIYA LETTER CHA;Lo;0;L;;;;;N;;;;; 0B1C;ORIYA LETTER JA;Lo;0;L;;;;;N;;;;; 0B1D;ORIYA LETTER JHA;Lo;0;L;;;;;N;;;;; 0B1E;ORIYA LETTER NYA;Lo;0;L;;;;;N;;;;; 0B1F;ORIYA LETTER TTA;Lo;0;L;;;;;N;;;;; 0B20;ORIYA LETTER TTHA;Lo;0;L;;;;;N;;;;; 0B21;ORIYA LETTER DDA;Lo;0;L;;;;;N;;;;; 0B22;ORIYA LETTER DDHA;Lo;0;L;;;;;N;;;;; 0B23;ORIYA LETTER NNA;Lo;0;L;;;;;N;;;;; 0B24;ORIYA LETTER TA;Lo;0;L;;;;;N;;;;; 0B25;ORIYA LETTER THA;Lo;0;L;;;;;N;;;;; 0B26;ORIYA LETTER DA;Lo;0;L;;;;;N;;;;; 0B27;ORIYA LETTER DHA;Lo;0;L;;;;;N;;;;; 0B28;ORIYA LETTER NA;Lo;0;L;;;;;N;;;;; 0B2A;ORIYA LETTER PA;Lo;0;L;;;;;N;;;;; 0B2B;ORIYA LETTER PHA;Lo;0;L;;;;;N;;;;; 0B2C;ORIYA LETTER BA;Lo;0;L;;;;;N;;;;; 0B2D;ORIYA LETTER BHA;Lo;0;L;;;;;N;;;;; 0B2E;ORIYA LETTER MA;Lo;0;L;;;;;N;;;;; 0B2F;ORIYA LETTER YA;Lo;0;L;;;;;N;;;;; 0B30;ORIYA LETTER RA;Lo;0;L;;;;;N;;;;; 0B32;ORIYA LETTER LA;Lo;0;L;;;;;N;;;;; 0B33;ORIYA LETTER LLA;Lo;0;L;;;;;N;;;;; 0B36;ORIYA LETTER SHA;Lo;0;L;;;;;N;;;;; 0B37;ORIYA LETTER SSA;Lo;0;L;;;;;N;;;;; 0B38;ORIYA LETTER SA;Lo;0;L;;;;;N;;;;; 0B39;ORIYA LETTER HA;Lo;0;L;;;;;N;;;;; 0B3C;ORIYA SIGN NUKTA;Mn;7;NSM;;;;;N;;;;; 0B3D;ORIYA SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;; 0B3E;ORIYA VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; 0B3F;ORIYA VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;; 0B40;ORIYA VOWEL SIGN II;Mc;0;L;;;;;N;;;;; 0B41;ORIYA VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; 0B42;ORIYA VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;; 0B43;ORIYA VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;; 0B47;ORIYA VOWEL SIGN E;Mc;0;L;;;;;N;;;;; 0B48;ORIYA VOWEL SIGN AI;Mc;0;L;0B47 0B56;;;;N;;;;; 0B4B;ORIYA VOWEL SIGN O;Mc;0;L;0B47 0B3E;;;;N;;;;; 0B4C;ORIYA VOWEL SIGN AU;Mc;0;L;0B47 0B57;;;;N;;;;; 0B4D;ORIYA SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;; 0B56;ORIYA AI LENGTH MARK;Mn;0;NSM;;;;;N;;;;; 0B57;ORIYA AU LENGTH MARK;Mc;0;L;;;;;N;;;;; 0B5C;ORIYA LETTER RRA;Lo;0;L;0B21 0B3C;;;;N;;;;; 0B5D;ORIYA LETTER RHA;Lo;0;L;0B22 0B3C;;;;N;;;;; 0B5F;ORIYA LETTER YYA;Lo;0;L;;;;;N;;;;; 0B60;ORIYA LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;; 0B61;ORIYA LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;; 0B66;ORIYA DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 0B67;ORIYA DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 0B68;ORIYA DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 0B69;ORIYA DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 0B6A;ORIYA DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 0B6B;ORIYA DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 0B6C;ORIYA DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 0B6D;ORIYA DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 0B6E;ORIYA DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 0B6F;ORIYA DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 0B70;ORIYA ISSHAR;So;0;L;;;;;N;;;;; 0B82;TAMIL SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;; 0B83;TAMIL SIGN VISARGA;Mc;0;L;;;;;N;;;;; 0B85;TAMIL LETTER A;Lo;0;L;;;;;N;;;;; 0B86;TAMIL LETTER AA;Lo;0;L;;;;;N;;;;; 0B87;TAMIL LETTER I;Lo;0;L;;;;;N;;;;; 0B88;TAMIL LETTER II;Lo;0;L;;;;;N;;;;; 0B89;TAMIL LETTER U;Lo;0;L;;;;;N;;;;; 0B8A;TAMIL LETTER UU;Lo;0;L;;;;;N;;;;; 0B8E;TAMIL LETTER E;Lo;0;L;;;;;N;;;;; 0B8F;TAMIL LETTER EE;Lo;0;L;;;;;N;;;;; 0B90;TAMIL LETTER AI;Lo;0;L;;;;;N;;;;; 0B92;TAMIL LETTER O;Lo;0;L;;;;;N;;;;; 0B93;TAMIL LETTER OO;Lo;0;L;;;;;N;;;;; 0B94;TAMIL LETTER AU;Lo;0;L;0B92 0BD7;;;;N;;;;; 0B95;TAMIL LETTER KA;Lo;0;L;;;;;N;;;;; 0B99;TAMIL LETTER NGA;Lo;0;L;;;;;N;;;;; 0B9A;TAMIL LETTER CA;Lo;0;L;;;;;N;;;;; 0B9C;TAMIL LETTER JA;Lo;0;L;;;;;N;;;;; 0B9E;TAMIL LETTER NYA;Lo;0;L;;;;;N;;;;; 0B9F;TAMIL LETTER TTA;Lo;0;L;;;;;N;;;;; 0BA3;TAMIL LETTER NNA;Lo;0;L;;;;;N;;;;; 0BA4;TAMIL LETTER TA;Lo;0;L;;;;;N;;;;; 0BA8;TAMIL LETTER NA;Lo;0;L;;;;;N;;;;; 0BA9;TAMIL LETTER NNNA;Lo;0;L;;;;;N;;;;; 0BAA;TAMIL LETTER PA;Lo;0;L;;;;;N;;;;; 0BAE;TAMIL LETTER MA;Lo;0;L;;;;;N;;;;; 0BAF;TAMIL LETTER YA;Lo;0;L;;;;;N;;;;; 0BB0;TAMIL LETTER RA;Lo;0;L;;;;;N;;;;; 0BB1;TAMIL LETTER RRA;Lo;0;L;;;;;N;;;;; 0BB2;TAMIL LETTER LA;Lo;0;L;;;;;N;;;;; 0BB3;TAMIL LETTER LLA;Lo;0;L;;;;;N;;;;; 0BB4;TAMIL LETTER LLLA;Lo;0;L;;;;;N;;;;; 0BB5;TAMIL LETTER VA;Lo;0;L;;;;;N;;;;; 0BB7;TAMIL LETTER SSA;Lo;0;L;;;;;N;;;;; 0BB8;TAMIL LETTER SA;Lo;0;L;;;;;N;;;;; 0BB9;TAMIL LETTER HA;Lo;0;L;;;;;N;;;;; 0BBE;TAMIL VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; 0BBF;TAMIL VOWEL SIGN I;Mc;0;L;;;;;N;;;;; 0BC0;TAMIL VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;; 0BC1;TAMIL VOWEL SIGN U;Mc;0;L;;;;;N;;;;; 0BC2;TAMIL VOWEL SIGN UU;Mc;0;L;;;;;N;;;;; 0BC6;TAMIL VOWEL SIGN E;Mc;0;L;;;;;N;;;;; 0BC7;TAMIL VOWEL SIGN EE;Mc;0;L;;;;;N;;;;; 0BC8;TAMIL VOWEL SIGN AI;Mc;0;L;;;;;N;;;;; 0BCA;TAMIL VOWEL SIGN O;Mc;0;L;0BC6 0BBE;;;;N;;;;; 0BCB;TAMIL VOWEL SIGN OO;Mc;0;L;0BC7 0BBE;;;;N;;;;; 0BCC;TAMIL VOWEL SIGN AU;Mc;0;L;0BC6 0BD7;;;;N;;;;; 0BCD;TAMIL SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;; 0BD7;TAMIL AU LENGTH MARK;Mc;0;L;;;;;N;;;;; 0BE7;TAMIL DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 0BE8;TAMIL DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 0BE9;TAMIL DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 0BEA;TAMIL DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 0BEB;TAMIL DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 0BEC;TAMIL DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 0BED;TAMIL DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 0BEE;TAMIL DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 0BEF;TAMIL DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 0BF0;TAMIL NUMBER TEN;No;0;L;;;;10;N;;;;; 0BF1;TAMIL NUMBER ONE HUNDRED;No;0;L;;;;100;N;;;;; 0BF2;TAMIL NUMBER ONE THOUSAND;No;0;L;;;;1000;N;;;;; 0C01;TELUGU SIGN CANDRABINDU;Mc;0;L;;;;;N;;;;; 0C02;TELUGU SIGN ANUSVARA;Mc;0;L;;;;;N;;;;; 0C03;TELUGU SIGN VISARGA;Mc;0;L;;;;;N;;;;; 0C05;TELUGU LETTER A;Lo;0;L;;;;;N;;;;; 0C06;TELUGU LETTER AA;Lo;0;L;;;;;N;;;;; 0C07;TELUGU LETTER I;Lo;0;L;;;;;N;;;;; 0C08;TELUGU LETTER II;Lo;0;L;;;;;N;;;;; 0C09;TELUGU LETTER U;Lo;0;L;;;;;N;;;;; 0C0A;TELUGU LETTER UU;Lo;0;L;;;;;N;;;;; 0C0B;TELUGU LETTER VOCALIC R;Lo;0;L;;;;;N;;;;; 0C0C;TELUGU LETTER VOCALIC L;Lo;0;L;;;;;N;;;;; 0C0E;TELUGU LETTER E;Lo;0;L;;;;;N;;;;; 0C0F;TELUGU LETTER EE;Lo;0;L;;;;;N;;;;; 0C10;TELUGU LETTER AI;Lo;0;L;;;;;N;;;;; 0C12;TELUGU LETTER O;Lo;0;L;;;;;N;;;;; 0C13;TELUGU LETTER OO;Lo;0;L;;;;;N;;;;; 0C14;TELUGU LETTER AU;Lo;0;L;;;;;N;;;;; 0C15;TELUGU LETTER KA;Lo;0;L;;;;;N;;;;; 0C16;TELUGU LETTER KHA;Lo;0;L;;;;;N;;;;; 0C17;TELUGU LETTER GA;Lo;0;L;;;;;N;;;;; 0C18;TELUGU LETTER GHA;Lo;0;L;;;;;N;;;;; 0C19;TELUGU LETTER NGA;Lo;0;L;;;;;N;;;;; 0C1A;TELUGU LETTER CA;Lo;0;L;;;;;N;;;;; 0C1B;TELUGU LETTER CHA;Lo;0;L;;;;;N;;;;; 0C1C;TELUGU LETTER JA;Lo;0;L;;;;;N;;;;; 0C1D;TELUGU LETTER JHA;Lo;0;L;;;;;N;;;;; 0C1E;TELUGU LETTER NYA;Lo;0;L;;;;;N;;;;; 0C1F;TELUGU LETTER TTA;Lo;0;L;;;;;N;;;;; 0C20;TELUGU LETTER TTHA;Lo;0;L;;;;;N;;;;; 0C21;TELUGU LETTER DDA;Lo;0;L;;;;;N;;;;; 0C22;TELUGU LETTER DDHA;Lo;0;L;;;;;N;;;;; 0C23;TELUGU LETTER NNA;Lo;0;L;;;;;N;;;;; 0C24;TELUGU LETTER TA;Lo;0;L;;;;;N;;;;; 0C25;TELUGU LETTER THA;Lo;0;L;;;;;N;;;;; 0C26;TELUGU LETTER DA;Lo;0;L;;;;;N;;;;; 0C27;TELUGU LETTER DHA;Lo;0;L;;;;;N;;;;; 0C28;TELUGU LETTER NA;Lo;0;L;;;;;N;;;;; 0C2A;TELUGU LETTER PA;Lo;0;L;;;;;N;;;;; 0C2B;TELUGU LETTER PHA;Lo;0;L;;;;;N;;;;; 0C2C;TELUGU LETTER BA;Lo;0;L;;;;;N;;;;; 0C2D;TELUGU LETTER BHA;Lo;0;L;;;;;N;;;;; 0C2E;TELUGU LETTER MA;Lo;0;L;;;;;N;;;;; 0C2F;TELUGU LETTER YA;Lo;0;L;;;;;N;;;;; 0C30;TELUGU LETTER RA;Lo;0;L;;;;;N;;;;; 0C31;TELUGU LETTER RRA;Lo;0;L;;;;;N;;;;; 0C32;TELUGU LETTER LA;Lo;0;L;;;;;N;;;;; 0C33;TELUGU LETTER LLA;Lo;0;L;;;;;N;;;;; 0C35;TELUGU LETTER VA;Lo;0;L;;;;;N;;;;; 0C36;TELUGU LETTER SHA;Lo;0;L;;;;;N;;;;; 0C37;TELUGU LETTER SSA;Lo;0;L;;;;;N;;;;; 0C38;TELUGU LETTER SA;Lo;0;L;;;;;N;;;;; 0C39;TELUGU LETTER HA;Lo;0;L;;;;;N;;;;; 0C3E;TELUGU VOWEL SIGN AA;Mn;0;NSM;;;;;N;;;;; 0C3F;TELUGU VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;; 0C40;TELUGU VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;; 0C41;TELUGU VOWEL SIGN U;Mc;0;L;;;;;N;;;;; 0C42;TELUGU VOWEL SIGN UU;Mc;0;L;;;;;N;;;;; 0C43;TELUGU VOWEL SIGN VOCALIC R;Mc;0;L;;;;;N;;;;; 0C44;TELUGU VOWEL SIGN VOCALIC RR;Mc;0;L;;;;;N;;;;; 0C46;TELUGU VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;; 0C47;TELUGU VOWEL SIGN EE;Mn;0;NSM;;;;;N;;;;; 0C48;TELUGU VOWEL SIGN AI;Mn;0;NSM;0C46 0C56;;;;N;;;;; 0C4A;TELUGU VOWEL SIGN O;Mn;0;NSM;;;;;N;;;;; 0C4B;TELUGU VOWEL SIGN OO;Mn;0;NSM;;;;;N;;;;; 0C4C;TELUGU VOWEL SIGN AU;Mn;0;NSM;;;;;N;;;;; 0C4D;TELUGU SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;; 0C55;TELUGU LENGTH MARK;Mn;84;NSM;;;;;N;;;;; 0C56;TELUGU AI LENGTH MARK;Mn;91;NSM;;;;;N;;;;; 0C60;TELUGU LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;; 0C61;TELUGU LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;; 0C66;TELUGU DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 0C67;TELUGU DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 0C68;TELUGU DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 0C69;TELUGU DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 0C6A;TELUGU DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 0C6B;TELUGU DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 0C6C;TELUGU DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 0C6D;TELUGU DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 0C6E;TELUGU DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 0C6F;TELUGU DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 0C82;KANNADA SIGN ANUSVARA;Mc;0;L;;;;;N;;;;; 0C83;KANNADA SIGN VISARGA;Mc;0;L;;;;;N;;;;; 0C85;KANNADA LETTER A;Lo;0;L;;;;;N;;;;; 0C86;KANNADA LETTER AA;Lo;0;L;;;;;N;;;;; 0C87;KANNADA LETTER I;Lo;0;L;;;;;N;;;;; 0C88;KANNADA LETTER II;Lo;0;L;;;;;N;;;;; 0C89;KANNADA LETTER U;Lo;0;L;;;;;N;;;;; 0C8A;KANNADA LETTER UU;Lo;0;L;;;;;N;;;;; 0C8B;KANNADA LETTER VOCALIC R;Lo;0;L;;;;;N;;;;; 0C8C;KANNADA LETTER VOCALIC L;Lo;0;L;;;;;N;;;;; 0C8E;KANNADA LETTER E;Lo;0;L;;;;;N;;;;; 0C8F;KANNADA LETTER EE;Lo;0;L;;;;;N;;;;; 0C90;KANNADA LETTER AI;Lo;0;L;;;;;N;;;;; 0C92;KANNADA LETTER O;Lo;0;L;;;;;N;;;;; 0C93;KANNADA LETTER OO;Lo;0;L;;;;;N;;;;; 0C94;KANNADA LETTER AU;Lo;0;L;;;;;N;;;;; 0C95;KANNADA LETTER KA;Lo;0;L;;;;;N;;;;; 0C96;KANNADA LETTER KHA;Lo;0;L;;;;;N;;;;; 0C97;KANNADA LETTER GA;Lo;0;L;;;;;N;;;;; 0C98;KANNADA LETTER GHA;Lo;0;L;;;;;N;;;;; 0C99;KANNADA LETTER NGA;Lo;0;L;;;;;N;;;;; 0C9A;KANNADA LETTER CA;Lo;0;L;;;;;N;;;;; 0C9B;KANNADA LETTER CHA;Lo;0;L;;;;;N;;;;; 0C9C;KANNADA LETTER JA;Lo;0;L;;;;;N;;;;; 0C9D;KANNADA LETTER JHA;Lo;0;L;;;;;N;;;;; 0C9E;KANNADA LETTER NYA;Lo;0;L;;;;;N;;;;; 0C9F;KANNADA LETTER TTA;Lo;0;L;;;;;N;;;;; 0CA0;KANNADA LETTER TTHA;Lo;0;L;;;;;N;;;;; 0CA1;KANNADA LETTER DDA;Lo;0;L;;;;;N;;;;; 0CA2;KANNADA LETTER DDHA;Lo;0;L;;;;;N;;;;; 0CA3;KANNADA LETTER NNA;Lo;0;L;;;;;N;;;;; 0CA4;KANNADA LETTER TA;Lo;0;L;;;;;N;;;;; 0CA5;KANNADA LETTER THA;Lo;0;L;;;;;N;;;;; 0CA6;KANNADA LETTER DA;Lo;0;L;;;;;N;;;;; 0CA7;KANNADA LETTER DHA;Lo;0;L;;;;;N;;;;; 0CA8;KANNADA LETTER NA;Lo;0;L;;;;;N;;;;; 0CAA;KANNADA LETTER PA;Lo;0;L;;;;;N;;;;; 0CAB;KANNADA LETTER PHA;Lo;0;L;;;;;N;;;;; 0CAC;KANNADA LETTER BA;Lo;0;L;;;;;N;;;;; 0CAD;KANNADA LETTER BHA;Lo;0;L;;;;;N;;;;; 0CAE;KANNADA LETTER MA;Lo;0;L;;;;;N;;;;; 0CAF;KANNADA LETTER YA;Lo;0;L;;;;;N;;;;; 0CB0;KANNADA LETTER RA;Lo;0;L;;;;;N;;;;; 0CB1;KANNADA LETTER RRA;Lo;0;L;;;;;N;;;;; 0CB2;KANNADA LETTER LA;Lo;0;L;;;;;N;;;;; 0CB3;KANNADA LETTER LLA;Lo;0;L;;;;;N;;;;; 0CB5;KANNADA LETTER VA;Lo;0;L;;;;;N;;;;; 0CB6;KANNADA LETTER SHA;Lo;0;L;;;;;N;;;;; 0CB7;KANNADA LETTER SSA;Lo;0;L;;;;;N;;;;; 0CB8;KANNADA LETTER SA;Lo;0;L;;;;;N;;;;; 0CB9;KANNADA LETTER HA;Lo;0;L;;;;;N;;;;; 0CBE;KANNADA VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; 0CBF;KANNADA VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;; 0CC0;KANNADA VOWEL SIGN II;Mc;0;L;0CBF 0CD5;;;;N;;;;; 0CC1;KANNADA VOWEL SIGN U;Mc;0;L;;;;;N;;;;; 0CC2;KANNADA VOWEL SIGN UU;Mc;0;L;;;;;N;;;;; 0CC3;KANNADA VOWEL SIGN VOCALIC R;Mc;0;L;;;;;N;;;;; 0CC4;KANNADA VOWEL SIGN VOCALIC RR;Mc;0;L;;;;;N;;;;; 0CC6;KANNADA VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;; 0CC7;KANNADA VOWEL SIGN EE;Mc;0;L;0CC6 0CD5;;;;N;;;;; 0CC8;KANNADA VOWEL SIGN AI;Mc;0;L;0CC6 0CD6;;;;N;;;;; 0CCA;KANNADA VOWEL SIGN O;Mc;0;L;0CC6 0CC2;;;;N;;;;; 0CCB;KANNADA VOWEL SIGN OO;Mc;0;L;0CCA 0CD5;;;;N;;;;; 0CCC;KANNADA VOWEL SIGN AU;Mn;0;NSM;;;;;N;;;;; 0CCD;KANNADA SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;; 0CD5;KANNADA LENGTH MARK;Mc;0;L;;;;;N;;;;; 0CD6;KANNADA AI LENGTH MARK;Mc;0;L;;;;;N;;;;; 0CDE;KANNADA LETTER FA;Lo;0;L;;;;;N;;;;; 0CE0;KANNADA LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;; 0CE1;KANNADA LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;; 0CE6;KANNADA DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 0CE7;KANNADA DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 0CE8;KANNADA DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 0CE9;KANNADA DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 0CEA;KANNADA DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 0CEB;KANNADA DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 0CEC;KANNADA DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 0CED;KANNADA DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 0CEE;KANNADA DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 0CEF;KANNADA DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 0D02;MALAYALAM SIGN ANUSVARA;Mc;0;L;;;;;N;;;;; 0D03;MALAYALAM SIGN VISARGA;Mc;0;L;;;;;N;;;;; 0D05;MALAYALAM LETTER A;Lo;0;L;;;;;N;;;;; 0D06;MALAYALAM LETTER AA;Lo;0;L;;;;;N;;;;; 0D07;MALAYALAM LETTER I;Lo;0;L;;;;;N;;;;; 0D08;MALAYALAM LETTER II;Lo;0;L;;;;;N;;;;; 0D09;MALAYALAM LETTER U;Lo;0;L;;;;;N;;;;; 0D0A;MALAYALAM LETTER UU;Lo;0;L;;;;;N;;;;; 0D0B;MALAYALAM LETTER VOCALIC R;Lo;0;L;;;;;N;;;;; 0D0C;MALAYALAM LETTER VOCALIC L;Lo;0;L;;;;;N;;;;; 0D0E;MALAYALAM LETTER E;Lo;0;L;;;;;N;;;;; 0D0F;MALAYALAM LETTER EE;Lo;0;L;;;;;N;;;;; 0D10;MALAYALAM LETTER AI;Lo;0;L;;;;;N;;;;; 0D12;MALAYALAM LETTER O;Lo;0;L;;;;;N;;;;; 0D13;MALAYALAM LETTER OO;Lo;0;L;;;;;N;;;;; 0D14;MALAYALAM LETTER AU;Lo;0;L;;;;;N;;;;; 0D15;MALAYALAM LETTER KA;Lo;0;L;;;;;N;;;;; 0D16;MALAYALAM LETTER KHA;Lo;0;L;;;;;N;;;;; 0D17;MALAYALAM LETTER GA;Lo;0;L;;;;;N;;;;; 0D18;MALAYALAM LETTER GHA;Lo;0;L;;;;;N;;;;; 0D19;MALAYALAM LETTER NGA;Lo;0;L;;;;;N;;;;; 0D1A;MALAYALAM LETTER CA;Lo;0;L;;;;;N;;;;; 0D1B;MALAYALAM LETTER CHA;Lo;0;L;;;;;N;;;;; 0D1C;MALAYALAM LETTER JA;Lo;0;L;;;;;N;;;;; 0D1D;MALAYALAM LETTER JHA;Lo;0;L;;;;;N;;;;; 0D1E;MALAYALAM LETTER NYA;Lo;0;L;;;;;N;;;;; 0D1F;MALAYALAM LETTER TTA;Lo;0;L;;;;;N;;;;; 0D20;MALAYALAM LETTER TTHA;Lo;0;L;;;;;N;;;;; 0D21;MALAYALAM LETTER DDA;Lo;0;L;;;;;N;;;;; 0D22;MALAYALAM LETTER DDHA;Lo;0;L;;;;;N;;;;; 0D23;MALAYALAM LETTER NNA;Lo;0;L;;;;;N;;;;; 0D24;MALAYALAM LETTER TA;Lo;0;L;;;;;N;;;;; 0D25;MALAYALAM LETTER THA;Lo;0;L;;;;;N;;;;; 0D26;MALAYALAM LETTER DA;Lo;0;L;;;;;N;;;;; 0D27;MALAYALAM LETTER DHA;Lo;0;L;;;;;N;;;;; 0D28;MALAYALAM LETTER NA;Lo;0;L;;;;;N;;;;; 0D2A;MALAYALAM LETTER PA;Lo;0;L;;;;;N;;;;; 0D2B;MALAYALAM LETTER PHA;Lo;0;L;;;;;N;;;;; 0D2C;MALAYALAM LETTER BA;Lo;0;L;;;;;N;;;;; 0D2D;MALAYALAM LETTER BHA;Lo;0;L;;;;;N;;;;; 0D2E;MALAYALAM LETTER MA;Lo;0;L;;;;;N;;;;; 0D2F;MALAYALAM LETTER YA;Lo;0;L;;;;;N;;;;; 0D30;MALAYALAM LETTER RA;Lo;0;L;;;;;N;;;;; 0D31;MALAYALAM LETTER RRA;Lo;0;L;;;;;N;;;;; 0D32;MALAYALAM LETTER LA;Lo;0;L;;;;;N;;;;; 0D33;MALAYALAM LETTER LLA;Lo;0;L;;;;;N;;;;; 0D34;MALAYALAM LETTER LLLA;Lo;0;L;;;;;N;;;;; 0D35;MALAYALAM LETTER VA;Lo;0;L;;;;;N;;;;; 0D36;MALAYALAM LETTER SHA;Lo;0;L;;;;;N;;;;; 0D37;MALAYALAM LETTER SSA;Lo;0;L;;;;;N;;;;; 0D38;MALAYALAM LETTER SA;Lo;0;L;;;;;N;;;;; 0D39;MALAYALAM LETTER HA;Lo;0;L;;;;;N;;;;; 0D3E;MALAYALAM VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; 0D3F;MALAYALAM VOWEL SIGN I;Mc;0;L;;;;;N;;;;; 0D40;MALAYALAM VOWEL SIGN II;Mc;0;L;;;;;N;;;;; 0D41;MALAYALAM VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; 0D42;MALAYALAM VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;; 0D43;MALAYALAM VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;; 0D46;MALAYALAM VOWEL SIGN E;Mc;0;L;;;;;N;;;;; 0D47;MALAYALAM VOWEL SIGN EE;Mc;0;L;;;;;N;;;;; 0D48;MALAYALAM VOWEL SIGN AI;Mc;0;L;;;;;N;;;;; 0D4A;MALAYALAM VOWEL SIGN O;Mc;0;L;0D46 0D3E;;;;N;;;;; 0D4B;MALAYALAM VOWEL SIGN OO;Mc;0;L;0D47 0D3E;;;;N;;;;; 0D4C;MALAYALAM VOWEL SIGN AU;Mc;0;L;0D46 0D57;;;;N;;;;; 0D4D;MALAYALAM SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;; 0D57;MALAYALAM AU LENGTH MARK;Mc;0;L;;;;;N;;;;; 0D60;MALAYALAM LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;; 0D61;MALAYALAM LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;; 0D66;MALAYALAM DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 0D67;MALAYALAM DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 0D68;MALAYALAM DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 0D69;MALAYALAM DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 0D6A;MALAYALAM DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 0D6B;MALAYALAM DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 0D6C;MALAYALAM DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 0D6D;MALAYALAM DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 0D6E;MALAYALAM DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 0D6F;MALAYALAM DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 0D82;SINHALA SIGN ANUSVARAYA;Mc;0;L;;;;;N;;;;; 0D83;SINHALA SIGN VISARGAYA;Mc;0;L;;;;;N;;;;; 0D85;SINHALA LETTER AYANNA;Lo;0;L;;;;;N;;;;; 0D86;SINHALA LETTER AAYANNA;Lo;0;L;;;;;N;;;;; 0D87;SINHALA LETTER AEYANNA;Lo;0;L;;;;;N;;;;; 0D88;SINHALA LETTER AEEYANNA;Lo;0;L;;;;;N;;;;; 0D89;SINHALA LETTER IYANNA;Lo;0;L;;;;;N;;;;; 0D8A;SINHALA LETTER IIYANNA;Lo;0;L;;;;;N;;;;; 0D8B;SINHALA LETTER UYANNA;Lo;0;L;;;;;N;;;;; 0D8C;SINHALA LETTER UUYANNA;Lo;0;L;;;;;N;;;;; 0D8D;SINHALA LETTER IRUYANNA;Lo;0;L;;;;;N;;;;; 0D8E;SINHALA LETTER IRUUYANNA;Lo;0;L;;;;;N;;;;; 0D8F;SINHALA LETTER ILUYANNA;Lo;0;L;;;;;N;;;;; 0D90;SINHALA LETTER ILUUYANNA;Lo;0;L;;;;;N;;;;; 0D91;SINHALA LETTER EYANNA;Lo;0;L;;;;;N;;;;; 0D92;SINHALA LETTER EEYANNA;Lo;0;L;;;;;N;;;;; 0D93;SINHALA LETTER AIYANNA;Lo;0;L;;;;;N;;;;; 0D94;SINHALA LETTER OYANNA;Lo;0;L;;;;;N;;;;; 0D95;SINHALA LETTER OOYANNA;Lo;0;L;;;;;N;;;;; 0D96;SINHALA LETTER AUYANNA;Lo;0;L;;;;;N;;;;; 0D9A;SINHALA LETTER ALPAPRAANA KAYANNA;Lo;0;L;;;;;N;;;;; 0D9B;SINHALA LETTER MAHAAPRAANA KAYANNA;Lo;0;L;;;;;N;;;;; 0D9C;SINHALA LETTER ALPAPRAANA GAYANNA;Lo;0;L;;;;;N;;;;; 0D9D;SINHALA LETTER MAHAAPRAANA GAYANNA;Lo;0;L;;;;;N;;;;; 0D9E;SINHALA LETTER KANTAJA NAASIKYAYA;Lo;0;L;;;;;N;;;;; 0D9F;SINHALA LETTER SANYAKA GAYANNA;Lo;0;L;;;;;N;;;;; 0DA0;SINHALA LETTER ALPAPRAANA CAYANNA;Lo;0;L;;;;;N;;;;; 0DA1;SINHALA LETTER MAHAAPRAANA CAYANNA;Lo;0;L;;;;;N;;;;; 0DA2;SINHALA LETTER ALPAPRAANA JAYANNA;Lo;0;L;;;;;N;;;;; 0DA3;SINHALA LETTER MAHAAPRAANA JAYANNA;Lo;0;L;;;;;N;;;;; 0DA4;SINHALA LETTER TAALUJA NAASIKYAYA;Lo;0;L;;;;;N;;;;; 0DA5;SINHALA LETTER TAALUJA SANYOOGA NAAKSIKYAYA;Lo;0;L;;;;;N;;;;; 0DA6;SINHALA LETTER SANYAKA JAYANNA;Lo;0;L;;;;;N;;;;; 0DA7;SINHALA LETTER ALPAPRAANA TTAYANNA;Lo;0;L;;;;;N;;;;; 0DA8;SINHALA LETTER MAHAAPRAANA TTAYANNA;Lo;0;L;;;;;N;;;;; 0DA9;SINHALA LETTER ALPAPRAANA DDAYANNA;Lo;0;L;;;;;N;;;;; 0DAA;SINHALA LETTER MAHAAPRAANA DDAYANNA;Lo;0;L;;;;;N;;;;; 0DAB;SINHALA LETTER MUURDHAJA NAYANNA;Lo;0;L;;;;;N;;;;; 0DAC;SINHALA LETTER SANYAKA DDAYANNA;Lo;0;L;;;;;N;;;;; 0DAD;SINHALA LETTER ALPAPRAANA TAYANNA;Lo;0;L;;;;;N;;;;; 0DAE;SINHALA LETTER MAHAAPRAANA TAYANNA;Lo;0;L;;;;;N;;;;; 0DAF;SINHALA LETTER ALPAPRAANA DAYANNA;Lo;0;L;;;;;N;;;;; 0DB0;SINHALA LETTER MAHAAPRAANA DAYANNA;Lo;0;L;;;;;N;;;;; 0DB1;SINHALA LETTER DANTAJA NAYANNA;Lo;0;L;;;;;N;;;;; 0DB3;SINHALA LETTER SANYAKA DAYANNA;Lo;0;L;;;;;N;;;;; 0DB4;SINHALA LETTER ALPAPRAANA PAYANNA;Lo;0;L;;;;;N;;;;; 0DB5;SINHALA LETTER MAHAAPRAANA PAYANNA;Lo;0;L;;;;;N;;;;; 0DB6;SINHALA LETTER ALPAPRAANA BAYANNA;Lo;0;L;;;;;N;;;;; 0DB7;SINHALA LETTER MAHAAPRAANA BAYANNA;Lo;0;L;;;;;N;;;;; 0DB8;SINHALA LETTER MAYANNA;Lo;0;L;;;;;N;;;;; 0DB9;SINHALA LETTER AMBA BAYANNA;Lo;0;L;;;;;N;;;;; 0DBA;SINHALA LETTER YAYANNA;Lo;0;L;;;;;N;;;;; 0DBB;SINHALA LETTER RAYANNA;Lo;0;L;;;;;N;;;;; 0DBD;SINHALA LETTER DANTAJA LAYANNA;Lo;0;L;;;;;N;;;;; 0DC0;SINHALA LETTER VAYANNA;Lo;0;L;;;;;N;;;;; 0DC1;SINHALA LETTER TAALUJA SAYANNA;Lo;0;L;;;;;N;;;;; 0DC2;SINHALA LETTER MUURDHAJA SAYANNA;Lo;0;L;;;;;N;;;;; 0DC3;SINHALA LETTER DANTAJA SAYANNA;Lo;0;L;;;;;N;;;;; 0DC4;SINHALA LETTER HAYANNA;Lo;0;L;;;;;N;;;;; 0DC5;SINHALA LETTER MUURDHAJA LAYANNA;Lo;0;L;;;;;N;;;;; 0DC6;SINHALA LETTER FAYANNA;Lo;0;L;;;;;N;;;;; 0DCA;SINHALA SIGN AL-LAKUNA;Mn;9;NSM;;;;;N;;;;; 0DCF;SINHALA VOWEL SIGN AELA-PILLA;Mc;0;L;;;;;N;;;;; 0DD0;SINHALA VOWEL SIGN KETTI AEDA-PILLA;Mc;0;L;;;;;N;;;;; 0DD1;SINHALA VOWEL SIGN DIGA AEDA-PILLA;Mc;0;L;;;;;N;;;;; 0DD2;SINHALA VOWEL SIGN KETTI IS-PILLA;Mn;0;NSM;;;;;N;;;;; 0DD3;SINHALA VOWEL SIGN DIGA IS-PILLA;Mn;0;NSM;;;;;N;;;;; 0DD4;SINHALA VOWEL SIGN KETTI PAA-PILLA;Mn;0;NSM;;;;;N;;;;; 0DD6;SINHALA VOWEL SIGN DIGA PAA-PILLA;Mn;0;NSM;;;;;N;;;;; 0DD8;SINHALA VOWEL SIGN GAETTA-PILLA;Mc;0;L;;;;;N;;;;; 0DD9;SINHALA VOWEL SIGN KOMBUVA;Mc;0;L;;;;;N;;;;; 0DDA;SINHALA VOWEL SIGN DIGA KOMBUVA;Mc;0;L;0DD9 0DCA;;;;N;;;;; 0DDB;SINHALA VOWEL SIGN KOMBU DEKA;Mc;0;L;;;;;N;;;;; 0DDC;SINHALA VOWEL SIGN KOMBUVA HAA AELA-PILLA;Mc;0;L;0DD9 0DCF;;;;N;;;;; 0DDD;SINHALA VOWEL SIGN KOMBUVA HAA DIGA AELA-PILLA;Mc;0;L;0DDC 0DCA;;;;N;;;;; 0DDE;SINHALA VOWEL SIGN KOMBUVA HAA GAYANUKITTA;Mc;0;L;0DD9 0DDF;;;;N;;;;; 0DDF;SINHALA VOWEL SIGN GAYANUKITTA;Mc;0;L;;;;;N;;;;; 0DF2;SINHALA VOWEL SIGN DIGA GAETTA-PILLA;Mc;0;L;;;;;N;;;;; 0DF3;SINHALA VOWEL SIGN DIGA GAYANUKITTA;Mc;0;L;;;;;N;;;;; 0DF4;SINHALA PUNCTUATION KUNDDALIYA;Po;0;L;;;;;N;;;;; 0E01;THAI CHARACTER KO KAI;Lo;0;L;;;;;N;THAI LETTER KO KAI;;;; 0E02;THAI CHARACTER KHO KHAI;Lo;0;L;;;;;N;THAI LETTER KHO KHAI;;;; 0E03;THAI CHARACTER KHO KHUAT;Lo;0;L;;;;;N;THAI LETTER KHO KHUAT;;;; 0E04;THAI CHARACTER KHO KHWAI;Lo;0;L;;;;;N;THAI LETTER KHO KHWAI;;;; 0E05;THAI CHARACTER KHO KHON;Lo;0;L;;;;;N;THAI LETTER KHO KHON;;;; 0E06;THAI CHARACTER KHO RAKHANG;Lo;0;L;;;;;N;THAI LETTER KHO RAKHANG;;;; 0E07;THAI CHARACTER NGO NGU;Lo;0;L;;;;;N;THAI LETTER NGO NGU;;;; 0E08;THAI CHARACTER CHO CHAN;Lo;0;L;;;;;N;THAI LETTER CHO CHAN;;;; 0E09;THAI CHARACTER CHO CHING;Lo;0;L;;;;;N;THAI LETTER CHO CHING;;;; 0E0A;THAI CHARACTER CHO CHANG;Lo;0;L;;;;;N;THAI LETTER CHO CHANG;;;; 0E0B;THAI CHARACTER SO SO;Lo;0;L;;;;;N;THAI LETTER SO SO;;;; 0E0C;THAI CHARACTER CHO CHOE;Lo;0;L;;;;;N;THAI LETTER CHO CHOE;;;; 0E0D;THAI CHARACTER YO YING;Lo;0;L;;;;;N;THAI LETTER YO YING;;;; 0E0E;THAI CHARACTER DO CHADA;Lo;0;L;;;;;N;THAI LETTER DO CHADA;;;; 0E0F;THAI CHARACTER TO PATAK;Lo;0;L;;;;;N;THAI LETTER TO PATAK;;;; 0E10;THAI CHARACTER THO THAN;Lo;0;L;;;;;N;THAI LETTER THO THAN;;;; 0E11;THAI CHARACTER THO NANGMONTHO;Lo;0;L;;;;;N;THAI LETTER THO NANGMONTHO;;;; 0E12;THAI CHARACTER THO PHUTHAO;Lo;0;L;;;;;N;THAI LETTER THO PHUTHAO;;;; 0E13;THAI CHARACTER NO NEN;Lo;0;L;;;;;N;THAI LETTER NO NEN;;;; 0E14;THAI CHARACTER DO DEK;Lo;0;L;;;;;N;THAI LETTER DO DEK;;;; 0E15;THAI CHARACTER TO TAO;Lo;0;L;;;;;N;THAI LETTER TO TAO;;;; 0E16;THAI CHARACTER THO THUNG;Lo;0;L;;;;;N;THAI LETTER THO THUNG;;;; 0E17;THAI CHARACTER THO THAHAN;Lo;0;L;;;;;N;THAI LETTER THO THAHAN;;;; 0E18;THAI CHARACTER THO THONG;Lo;0;L;;;;;N;THAI LETTER THO THONG;;;; 0E19;THAI CHARACTER NO NU;Lo;0;L;;;;;N;THAI LETTER NO NU;;;; 0E1A;THAI CHARACTER BO BAIMAI;Lo;0;L;;;;;N;THAI LETTER BO BAIMAI;;;; 0E1B;THAI CHARACTER PO PLA;Lo;0;L;;;;;N;THAI LETTER PO PLA;;;; 0E1C;THAI CHARACTER PHO PHUNG;Lo;0;L;;;;;N;THAI LETTER PHO PHUNG;;;; 0E1D;THAI CHARACTER FO FA;Lo;0;L;;;;;N;THAI LETTER FO FA;;;; 0E1E;THAI CHARACTER PHO PHAN;Lo;0;L;;;;;N;THAI LETTER PHO PHAN;;;; 0E1F;THAI CHARACTER FO FAN;Lo;0;L;;;;;N;THAI LETTER FO FAN;;;; 0E20;THAI CHARACTER PHO SAMPHAO;Lo;0;L;;;;;N;THAI LETTER PHO SAMPHAO;;;; 0E21;THAI CHARACTER MO MA;Lo;0;L;;;;;N;THAI LETTER MO MA;;;; 0E22;THAI CHARACTER YO YAK;Lo;0;L;;;;;N;THAI LETTER YO YAK;;;; 0E23;THAI CHARACTER RO RUA;Lo;0;L;;;;;N;THAI LETTER RO RUA;;;; 0E24;THAI CHARACTER RU;Lo;0;L;;;;;N;THAI LETTER RU;;;; 0E25;THAI CHARACTER LO LING;Lo;0;L;;;;;N;THAI LETTER LO LING;;;; 0E26;THAI CHARACTER LU;Lo;0;L;;;;;N;THAI LETTER LU;;;; 0E27;THAI CHARACTER WO WAEN;Lo;0;L;;;;;N;THAI LETTER WO WAEN;;;; 0E28;THAI CHARACTER SO SALA;Lo;0;L;;;;;N;THAI LETTER SO SALA;;;; 0E29;THAI CHARACTER SO RUSI;Lo;0;L;;;;;N;THAI LETTER SO RUSI;;;; 0E2A;THAI CHARACTER SO SUA;Lo;0;L;;;;;N;THAI LETTER SO SUA;;;; 0E2B;THAI CHARACTER HO HIP;Lo;0;L;;;;;N;THAI LETTER HO HIP;;;; 0E2C;THAI CHARACTER LO CHULA;Lo;0;L;;;;;N;THAI LETTER LO CHULA;;;; 0E2D;THAI CHARACTER O ANG;Lo;0;L;;;;;N;THAI LETTER O ANG;;;; 0E2E;THAI CHARACTER HO NOKHUK;Lo;0;L;;;;;N;THAI LETTER HO NOK HUK;;;; 0E2F;THAI CHARACTER PAIYANNOI;Lo;0;L;;;;;N;THAI PAI YAN NOI;paiyan noi;;; 0E30;THAI CHARACTER SARA A;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA A;;;; 0E31;THAI CHARACTER MAI HAN-AKAT;Mn;0;NSM;;;;;N;THAI VOWEL SIGN MAI HAN-AKAT;;;; 0E32;THAI CHARACTER SARA AA;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA AA;;;; 0E33;THAI CHARACTER SARA AM;Lo;0;L; 0E4D 0E32;;;;N;THAI VOWEL SIGN SARA AM;;;; 0E34;THAI CHARACTER SARA I;Mn;0;NSM;;;;;N;THAI VOWEL SIGN SARA I;;;; 0E35;THAI CHARACTER SARA II;Mn;0;NSM;;;;;N;THAI VOWEL SIGN SARA II;;;; 0E36;THAI CHARACTER SARA UE;Mn;0;NSM;;;;;N;THAI VOWEL SIGN SARA UE;;;; 0E37;THAI CHARACTER SARA UEE;Mn;0;NSM;;;;;N;THAI VOWEL SIGN SARA UEE;sara uue;;; 0E38;THAI CHARACTER SARA U;Mn;103;NSM;;;;;N;THAI VOWEL SIGN SARA U;;;; 0E39;THAI CHARACTER SARA UU;Mn;103;NSM;;;;;N;THAI VOWEL SIGN SARA UU;;;; 0E3A;THAI CHARACTER PHINTHU;Mn;9;NSM;;;;;N;THAI VOWEL SIGN PHINTHU;;;; 0E3F;THAI CURRENCY SYMBOL BAHT;Sc;0;ET;;;;;N;THAI BAHT SIGN;;;; 0E40;THAI CHARACTER SARA E;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA E;;;; 0E41;THAI CHARACTER SARA AE;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA AE;;;; 0E42;THAI CHARACTER SARA O;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA O;;;; 0E43;THAI CHARACTER SARA AI MAIMUAN;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA MAI MUAN;sara ai mai muan;;; 0E44;THAI CHARACTER SARA AI MAIMALAI;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA MAI MALAI;sara ai mai malai;;; 0E45;THAI CHARACTER LAKKHANGYAO;Lo;0;L;;;;;N;THAI LAK KHANG YAO;lakkhang yao;;; 0E46;THAI CHARACTER MAIYAMOK;Lm;0;L;;;;;N;THAI MAI YAMOK;mai yamok;;; 0E47;THAI CHARACTER MAITAIKHU;Mn;0;NSM;;;;;N;THAI VOWEL SIGN MAI TAI KHU;mai taikhu;;; 0E48;THAI CHARACTER MAI EK;Mn;107;NSM;;;;;N;THAI TONE MAI EK;;;; 0E49;THAI CHARACTER MAI THO;Mn;107;NSM;;;;;N;THAI TONE MAI THO;;;; 0E4A;THAI CHARACTER MAI TRI;Mn;107;NSM;;;;;N;THAI TONE MAI TRI;;;; 0E4B;THAI CHARACTER MAI CHATTAWA;Mn;107;NSM;;;;;N;THAI TONE MAI CHATTAWA;;;; 0E4C;THAI CHARACTER THANTHAKHAT;Mn;0;NSM;;;;;N;THAI THANTHAKHAT;;;; 0E4D;THAI CHARACTER NIKHAHIT;Mn;0;NSM;;;;;N;THAI NIKKHAHIT;nikkhahit;;; 0E4E;THAI CHARACTER YAMAKKAN;Mn;0;NSM;;;;;N;THAI YAMAKKAN;;;; 0E4F;THAI CHARACTER FONGMAN;Po;0;L;;;;;N;THAI FONGMAN;;;; 0E50;THAI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 0E51;THAI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 0E52;THAI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 0E53;THAI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 0E54;THAI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 0E55;THAI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 0E56;THAI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 0E57;THAI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 0E58;THAI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 0E59;THAI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 0E5A;THAI CHARACTER ANGKHANKHU;Po;0;L;;;;;N;THAI ANGKHANKHU;;;; 0E5B;THAI CHARACTER KHOMUT;Po;0;L;;;;;N;THAI KHOMUT;;;; 0E81;LAO LETTER KO;Lo;0;L;;;;;N;;;;; 0E82;LAO LETTER KHO SUNG;Lo;0;L;;;;;N;;;;; 0E84;LAO LETTER KHO TAM;Lo;0;L;;;;;N;;;;; 0E87;LAO LETTER NGO;Lo;0;L;;;;;N;;;;; 0E88;LAO LETTER CO;Lo;0;L;;;;;N;;;;; 0E8A;LAO LETTER SO TAM;Lo;0;L;;;;;N;;;;; 0E8D;LAO LETTER NYO;Lo;0;L;;;;;N;;;;; 0E94;LAO LETTER DO;Lo;0;L;;;;;N;;;;; 0E95;LAO LETTER TO;Lo;0;L;;;;;N;;;;; 0E96;LAO LETTER THO SUNG;Lo;0;L;;;;;N;;;;; 0E97;LAO LETTER THO TAM;Lo;0;L;;;;;N;;;;; 0E99;LAO LETTER NO;Lo;0;L;;;;;N;;;;; 0E9A;LAO LETTER BO;Lo;0;L;;;;;N;;;;; 0E9B;LAO LETTER PO;Lo;0;L;;;;;N;;;;; 0E9C;LAO LETTER PHO SUNG;Lo;0;L;;;;;N;;;;; 0E9D;LAO LETTER FO TAM;Lo;0;L;;;;;N;;;;; 0E9E;LAO LETTER PHO TAM;Lo;0;L;;;;;N;;;;; 0E9F;LAO LETTER FO SUNG;Lo;0;L;;;;;N;;;;; 0EA1;LAO LETTER MO;Lo;0;L;;;;;N;;;;; 0EA2;LAO LETTER YO;Lo;0;L;;;;;N;;;;; 0EA3;LAO LETTER LO LING;Lo;0;L;;;;;N;;;;; 0EA5;LAO LETTER LO LOOT;Lo;0;L;;;;;N;;;;; 0EA7;LAO LETTER WO;Lo;0;L;;;;;N;;;;; 0EAA;LAO LETTER SO SUNG;Lo;0;L;;;;;N;;;;; 0EAB;LAO LETTER HO SUNG;Lo;0;L;;;;;N;;;;; 0EAD;LAO LETTER O;Lo;0;L;;;;;N;;;;; 0EAE;LAO LETTER HO TAM;Lo;0;L;;;;;N;;;;; 0EAF;LAO ELLIPSIS;Lo;0;L;;;;;N;;;;; 0EB0;LAO VOWEL SIGN A;Lo;0;L;;;;;N;;;;; 0EB1;LAO VOWEL SIGN MAI KAN;Mn;0;NSM;;;;;N;;;;; 0EB2;LAO VOWEL SIGN AA;Lo;0;L;;;;;N;;;;; 0EB3;LAO VOWEL SIGN AM;Lo;0;L; 0ECD 0EB2;;;;N;;;;; 0EB4;LAO VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;; 0EB5;LAO VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;; 0EB6;LAO VOWEL SIGN Y;Mn;0;NSM;;;;;N;;;;; 0EB7;LAO VOWEL SIGN YY;Mn;0;NSM;;;;;N;;;;; 0EB8;LAO VOWEL SIGN U;Mn;118;NSM;;;;;N;;;;; 0EB9;LAO VOWEL SIGN UU;Mn;118;NSM;;;;;N;;;;; 0EBB;LAO VOWEL SIGN MAI KON;Mn;0;NSM;;;;;N;;;;; 0EBC;LAO SEMIVOWEL SIGN LO;Mn;0;NSM;;;;;N;;;;; 0EBD;LAO SEMIVOWEL SIGN NYO;Lo;0;L;;;;;N;;;;; 0EC0;LAO VOWEL SIGN E;Lo;0;L;;;;;N;;;;; 0EC1;LAO VOWEL SIGN EI;Lo;0;L;;;;;N;;;;; 0EC2;LAO VOWEL SIGN O;Lo;0;L;;;;;N;;;;; 0EC3;LAO VOWEL SIGN AY;Lo;0;L;;;;;N;;;;; 0EC4;LAO VOWEL SIGN AI;Lo;0;L;;;;;N;;;;; 0EC6;LAO KO LA;Lm;0;L;;;;;N;;;;; 0EC8;LAO TONE MAI EK;Mn;122;NSM;;;;;N;;;;; 0EC9;LAO TONE MAI THO;Mn;122;NSM;;;;;N;;;;; 0ECA;LAO TONE MAI TI;Mn;122;NSM;;;;;N;;;;; 0ECB;LAO TONE MAI CATAWA;Mn;122;NSM;;;;;N;;;;; 0ECC;LAO CANCELLATION MARK;Mn;0;NSM;;;;;N;;;;; 0ECD;LAO NIGGAHITA;Mn;0;NSM;;;;;N;;;;; 0ED0;LAO DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 0ED1;LAO DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 0ED2;LAO DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 0ED3;LAO DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 0ED4;LAO DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 0ED5;LAO DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 0ED6;LAO DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 0ED7;LAO DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 0ED8;LAO DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 0ED9;LAO DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 0EDC;LAO HO NO;Lo;0;L; 0EAB 0E99;;;;N;;;;; 0EDD;LAO HO MO;Lo;0;L; 0EAB 0EA1;;;;N;;;;; 0F00;TIBETAN SYLLABLE OM;Lo;0;L;;;;;N;;;;; 0F01;TIBETAN MARK GTER YIG MGO TRUNCATED A;So;0;L;;;;;N;;ter yik go a thung;;; 0F02;TIBETAN MARK GTER YIG MGO -UM RNAM BCAD MA;So;0;L;;;;;N;;ter yik go wum nam chey ma;;; 0F03;TIBETAN MARK GTER YIG MGO -UM GTER TSHEG MA;So;0;L;;;;;N;;ter yik go wum ter tsek ma;;; 0F04;TIBETAN MARK INITIAL YIG MGO MDUN MA;Po;0;L;;;;;N;TIBETAN SINGLE ORNAMENT;yik go dun ma;;; 0F05;TIBETAN MARK CLOSING YIG MGO SGAB MA;Po;0;L;;;;;N;;yik go kab ma;;; 0F06;TIBETAN MARK CARET YIG MGO PHUR SHAD MA;Po;0;L;;;;;N;;yik go pur shey ma;;; 0F07;TIBETAN MARK YIG MGO TSHEG SHAD MA;Po;0;L;;;;;N;;yik go tsek shey ma;;; 0F08;TIBETAN MARK SBRUL SHAD;Po;0;L;;;;;N;TIBETAN RGYANSHAD;drul shey;;; 0F09;TIBETAN MARK BSKUR YIG MGO;Po;0;L;;;;;N;;kur yik go;;; 0F0A;TIBETAN MARK BKA- SHOG YIG MGO;Po;0;L;;;;;N;;ka sho yik go;;; 0F0B;TIBETAN MARK INTERSYLLABIC TSHEG;Po;0;L;;;;;N;TIBETAN TSEG;tsek;;; 0F0C;TIBETAN MARK DELIMITER TSHEG BSTAR;Po;0;L; 0F0B;;;;N;;tsek tar;;; 0F0D;TIBETAN MARK SHAD;Po;0;L;;;;;N;TIBETAN SHAD;shey;;; 0F0E;TIBETAN MARK NYIS SHAD;Po;0;L;;;;;N;TIBETAN DOUBLE SHAD;nyi shey;;; 0F0F;TIBETAN MARK TSHEG SHAD;Po;0;L;;;;;N;;tsek shey;;; 0F10;TIBETAN MARK NYIS TSHEG SHAD;Po;0;L;;;;;N;;nyi tsek shey;;; 0F11;TIBETAN MARK RIN CHEN SPUNGS SHAD;Po;0;L;;;;;N;TIBETAN RINCHANPHUNGSHAD;rinchen pung shey;;; 0F12;TIBETAN MARK RGYA GRAM SHAD;Po;0;L;;;;;N;;gya tram shey;;; 0F13;TIBETAN MARK CARET -DZUD RTAGS ME LONG CAN;So;0;L;;;;;N;;dzu ta me long chen;;; 0F14;TIBETAN MARK GTER TSHEG;So;0;L;;;;;N;TIBETAN COMMA;ter tsek;;; 0F15;TIBETAN LOGOTYPE SIGN CHAD RTAGS;So;0;L;;;;;N;;che ta;;; 0F16;TIBETAN LOGOTYPE SIGN LHAG RTAGS;So;0;L;;;;;N;;hlak ta;;; 0F17;TIBETAN ASTROLOGICAL SIGN SGRA GCAN -CHAR RTAGS;So;0;L;;;;;N;;trachen char ta;;; 0F18;TIBETAN ASTROLOGICAL SIGN -KHYUD PA;Mn;220;NSM;;;;;N;;kyu pa;;; 0F19;TIBETAN ASTROLOGICAL SIGN SDONG TSHUGS;Mn;220;NSM;;;;;N;;dong tsu;;; 0F1A;TIBETAN SIGN RDEL DKAR GCIG;So;0;L;;;;;N;;deka chig;;; 0F1B;TIBETAN SIGN RDEL DKAR GNYIS;So;0;L;;;;;N;;deka nyi;;; 0F1C;TIBETAN SIGN RDEL DKAR GSUM;So;0;L;;;;;N;;deka sum;;; 0F1D;TIBETAN SIGN RDEL NAG GCIG;So;0;L;;;;;N;;dena chig;;; 0F1E;TIBETAN SIGN RDEL NAG GNYIS;So;0;L;;;;;N;;dena nyi;;; 0F1F;TIBETAN SIGN RDEL DKAR RDEL NAG;So;0;L;;;;;N;;deka dena;;; 0F20;TIBETAN DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 0F21;TIBETAN DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 0F22;TIBETAN DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 0F23;TIBETAN DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 0F24;TIBETAN DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 0F25;TIBETAN DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 0F26;TIBETAN DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 0F27;TIBETAN DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 0F28;TIBETAN DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 0F29;TIBETAN DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 0F2A;TIBETAN DIGIT HALF ONE;No;0;L;;;;;N;;;;; 0F2B;TIBETAN DIGIT HALF TWO;No;0;L;;;;;N;;;;; 0F2C;TIBETAN DIGIT HALF THREE;No;0;L;;;;;N;;;;; 0F2D;TIBETAN DIGIT HALF FOUR;No;0;L;;;;;N;;;;; 0F2E;TIBETAN DIGIT HALF FIVE;No;0;L;;;;;N;;;;; 0F2F;TIBETAN DIGIT HALF SIX;No;0;L;;;;;N;;;;; 0F30;TIBETAN DIGIT HALF SEVEN;No;0;L;;;;;N;;;;; 0F31;TIBETAN DIGIT HALF EIGHT;No;0;L;;;;;N;;;;; 0F32;TIBETAN DIGIT HALF NINE;No;0;L;;;;;N;;;;; 0F33;TIBETAN DIGIT HALF ZERO;No;0;L;;;;;N;;;;; 0F34;TIBETAN MARK BSDUS RTAGS;So;0;L;;;;;N;;du ta;;; 0F35;TIBETAN MARK NGAS BZUNG NYI ZLA;Mn;220;NSM;;;;;N;TIBETAN HONORIFIC UNDER RING;nge zung nyi da;;; 0F36;TIBETAN MARK CARET -DZUD RTAGS BZHI MIG CAN;So;0;L;;;;;N;;dzu ta shi mig chen;;; 0F37;TIBETAN MARK NGAS BZUNG SGOR RTAGS;Mn;220;NSM;;;;;N;TIBETAN UNDER RING;nge zung gor ta;;; 0F38;TIBETAN MARK CHE MGO;So;0;L;;;;;N;;che go;;; 0F39;TIBETAN MARK TSA -PHRU;Mn;216;NSM;;;;;N;TIBETAN LENITION MARK;tsa tru;;; 0F3A;TIBETAN MARK GUG RTAGS GYON;Ps;0;ON;;;;;N;;gug ta yun;;; 0F3B;TIBETAN MARK GUG RTAGS GYAS;Pe;0;ON;;;;;N;;gug ta ye;;; 0F3C;TIBETAN MARK ANG KHANG GYON;Ps;0;ON;;;;;N;TIBETAN LEFT BRACE;ang kang yun;;; 0F3D;TIBETAN MARK ANG KHANG GYAS;Pe;0;ON;;;;;N;TIBETAN RIGHT BRACE;ang kang ye;;; 0F3E;TIBETAN SIGN YAR TSHES;Mc;0;L;;;;;N;;yar tse;;; 0F3F;TIBETAN SIGN MAR TSHES;Mc;0;L;;;;;N;;mar tse;;; 0F40;TIBETAN LETTER KA;Lo;0;L;;;;;N;;;;; 0F41;TIBETAN LETTER KHA;Lo;0;L;;;;;N;;;;; 0F42;TIBETAN LETTER GA;Lo;0;L;;;;;N;;;;; 0F43;TIBETAN LETTER GHA;Lo;0;L;0F42 0FB7;;;;N;;;;; 0F44;TIBETAN LETTER NGA;Lo;0;L;;;;;N;;;;; 0F45;TIBETAN LETTER CA;Lo;0;L;;;;;N;;;;; 0F46;TIBETAN LETTER CHA;Lo;0;L;;;;;N;;;;; 0F47;TIBETAN LETTER JA;Lo;0;L;;;;;N;;;;; 0F49;TIBETAN LETTER NYA;Lo;0;L;;;;;N;;;;; 0F4A;TIBETAN LETTER TTA;Lo;0;L;;;;;N;TIBETAN LETTER REVERSED TA;;;; 0F4B;TIBETAN LETTER TTHA;Lo;0;L;;;;;N;TIBETAN LETTER REVERSED THA;;;; 0F4C;TIBETAN LETTER DDA;Lo;0;L;;;;;N;TIBETAN LETTER REVERSED DA;;;; 0F4D;TIBETAN LETTER DDHA;Lo;0;L;0F4C 0FB7;;;;N;;;;; 0F4E;TIBETAN LETTER NNA;Lo;0;L;;;;;N;TIBETAN LETTER REVERSED NA;;;; 0F4F;TIBETAN LETTER TA;Lo;0;L;;;;;N;;;;; 0F50;TIBETAN LETTER THA;Lo;0;L;;;;;N;;;;; 0F51;TIBETAN LETTER DA;Lo;0;L;;;;;N;;;;; 0F52;TIBETAN LETTER DHA;Lo;0;L;0F51 0FB7;;;;N;;;;; 0F53;TIBETAN LETTER NA;Lo;0;L;;;;;N;;;;; 0F54;TIBETAN LETTER PA;Lo;0;L;;;;;N;;;;; 0F55;TIBETAN LETTER PHA;Lo;0;L;;;;;N;;;;; 0F56;TIBETAN LETTER BA;Lo;0;L;;;;;N;;;;; 0F57;TIBETAN LETTER BHA;Lo;0;L;0F56 0FB7;;;;N;;;;; 0F58;TIBETAN LETTER MA;Lo;0;L;;;;;N;;;;; 0F59;TIBETAN LETTER TSA;Lo;0;L;;;;;N;;;;; 0F5A;TIBETAN LETTER TSHA;Lo;0;L;;;;;N;;;;; 0F5B;TIBETAN LETTER DZA;Lo;0;L;;;;;N;;;;; 0F5C;TIBETAN LETTER DZHA;Lo;0;L;0F5B 0FB7;;;;N;;;;; 0F5D;TIBETAN LETTER WA;Lo;0;L;;;;;N;;;;; 0F5E;TIBETAN LETTER ZHA;Lo;0;L;;;;;N;;;;; 0F5F;TIBETAN LETTER ZA;Lo;0;L;;;;;N;;;;; 0F60;TIBETAN LETTER -A;Lo;0;L;;;;;N;TIBETAN LETTER AA;;;; 0F61;TIBETAN LETTER YA;Lo;0;L;;;;;N;;;;; 0F62;TIBETAN LETTER RA;Lo;0;L;;;;;N;;*;;; 0F63;TIBETAN LETTER LA;Lo;0;L;;;;;N;;;;; 0F64;TIBETAN LETTER SHA;Lo;0;L;;;;;N;;;;; 0F65;TIBETAN LETTER SSA;Lo;0;L;;;;;N;TIBETAN LETTER REVERSED SHA;;;; 0F66;TIBETAN LETTER SA;Lo;0;L;;;;;N;;;;; 0F67;TIBETAN LETTER HA;Lo;0;L;;;;;N;;;;; 0F68;TIBETAN LETTER A;Lo;0;L;;;;;N;;;;; 0F69;TIBETAN LETTER KSSA;Lo;0;L;0F40 0FB5;;;;N;;;;; 0F6A;TIBETAN LETTER FIXED-FORM RA;Lo;0;L;;;;;N;;*;;; 0F71;TIBETAN VOWEL SIGN AA;Mn;129;NSM;;;;;N;;;;; 0F72;TIBETAN VOWEL SIGN I;Mn;130;NSM;;;;;N;;;;; 0F73;TIBETAN VOWEL SIGN II;Mn;0;NSM;0F71 0F72;;;;N;;;;; 0F74;TIBETAN VOWEL SIGN U;Mn;132;NSM;;;;;N;;;;; 0F75;TIBETAN VOWEL SIGN UU;Mn;0;NSM;0F71 0F74;;;;N;;;;; 0F76;TIBETAN VOWEL SIGN VOCALIC R;Mn;0;NSM;0FB2 0F80;;;;N;;;;; 0F77;TIBETAN VOWEL SIGN VOCALIC RR;Mn;0;NSM; 0FB2 0F81;;;;N;;;;; 0F78;TIBETAN VOWEL SIGN VOCALIC L;Mn;0;NSM;0FB3 0F80;;;;N;;;;; 0F79;TIBETAN VOWEL SIGN VOCALIC LL;Mn;0;NSM; 0FB3 0F81;;;;N;;;;; 0F7A;TIBETAN VOWEL SIGN E;Mn;130;NSM;;;;;N;;;;; 0F7B;TIBETAN VOWEL SIGN EE;Mn;130;NSM;;;;;N;TIBETAN VOWEL SIGN AI;;;; 0F7C;TIBETAN VOWEL SIGN O;Mn;130;NSM;;;;;N;;;;; 0F7D;TIBETAN VOWEL SIGN OO;Mn;130;NSM;;;;;N;TIBETAN VOWEL SIGN AU;;;; 0F7E;TIBETAN SIGN RJES SU NGA RO;Mn;0;NSM;;;;;N;TIBETAN ANUSVARA;je su nga ro;;; 0F7F;TIBETAN SIGN RNAM BCAD;Mc;0;L;;;;;N;TIBETAN VISARGA;nam chey;;; 0F80;TIBETAN VOWEL SIGN REVERSED I;Mn;130;NSM;;;;;N;TIBETAN VOWEL SIGN SHORT I;;;; 0F81;TIBETAN VOWEL SIGN REVERSED II;Mn;0;NSM;0F71 0F80;;;;N;;;;; 0F82;TIBETAN SIGN NYI ZLA NAA DA;Mn;230;NSM;;;;;N;TIBETAN CANDRABINDU WITH ORNAMENT;nyi da na da;;; 0F83;TIBETAN SIGN SNA LDAN;Mn;230;NSM;;;;;N;TIBETAN CANDRABINDU;nan de;;; 0F84;TIBETAN MARK HALANTA;Mn;9;NSM;;;;;N;TIBETAN VIRAMA;;;; 0F85;TIBETAN MARK PALUTA;Po;0;L;;;;;N;TIBETAN CHUCHENYIGE;;;; 0F86;TIBETAN SIGN LCI RTAGS;Mn;230;NSM;;;;;N;;ji ta;;; 0F87;TIBETAN SIGN YANG RTAGS;Mn;230;NSM;;;;;N;;yang ta;;; 0F88;TIBETAN SIGN LCE TSA CAN;Lo;0;L;;;;;N;;che tsa chen;;; 0F89;TIBETAN SIGN MCHU CAN;Lo;0;L;;;;;N;;chu chen;;; 0F8A;TIBETAN SIGN GRU CAN RGYINGS;Lo;0;L;;;;;N;;tru chen ging;;; 0F8B;TIBETAN SIGN GRU MED RGYINGS;Lo;0;L;;;;;N;;tru me ging;;; 0F90;TIBETAN SUBJOINED LETTER KA;Mn;0;NSM;;;;;N;;;;; 0F91;TIBETAN SUBJOINED LETTER KHA;Mn;0;NSM;;;;;N;;;;; 0F92;TIBETAN SUBJOINED LETTER GA;Mn;0;NSM;;;;;N;;;;; 0F93;TIBETAN SUBJOINED LETTER GHA;Mn;0;NSM;0F92 0FB7;;;;N;;;;; 0F94;TIBETAN SUBJOINED LETTER NGA;Mn;0;NSM;;;;;N;;;;; 0F95;TIBETAN SUBJOINED LETTER CA;Mn;0;NSM;;;;;N;;;;; 0F96;TIBETAN SUBJOINED LETTER CHA;Mn;0;NSM;;;;;N;;;;; 0F97;TIBETAN SUBJOINED LETTER JA;Mn;0;NSM;;;;;N;;;;; 0F99;TIBETAN SUBJOINED LETTER NYA;Mn;0;NSM;;;;;N;;;;; 0F9A;TIBETAN SUBJOINED LETTER TTA;Mn;0;NSM;;;;;N;;;;; 0F9B;TIBETAN SUBJOINED LETTER TTHA;Mn;0;NSM;;;;;N;;;;; 0F9C;TIBETAN SUBJOINED LETTER DDA;Mn;0;NSM;;;;;N;;;;; 0F9D;TIBETAN SUBJOINED LETTER DDHA;Mn;0;NSM;0F9C 0FB7;;;;N;;;;; 0F9E;TIBETAN SUBJOINED LETTER NNA;Mn;0;NSM;;;;;N;;;;; 0F9F;TIBETAN SUBJOINED LETTER TA;Mn;0;NSM;;;;;N;;;;; 0FA0;TIBETAN SUBJOINED LETTER THA;Mn;0;NSM;;;;;N;;;;; 0FA1;TIBETAN SUBJOINED LETTER DA;Mn;0;NSM;;;;;N;;;;; 0FA2;TIBETAN SUBJOINED LETTER DHA;Mn;0;NSM;0FA1 0FB7;;;;N;;;;; 0FA3;TIBETAN SUBJOINED LETTER NA;Mn;0;NSM;;;;;N;;;;; 0FA4;TIBETAN SUBJOINED LETTER PA;Mn;0;NSM;;;;;N;;;;; 0FA5;TIBETAN SUBJOINED LETTER PHA;Mn;0;NSM;;;;;N;;;;; 0FA6;TIBETAN SUBJOINED LETTER BA;Mn;0;NSM;;;;;N;;;;; 0FA7;TIBETAN SUBJOINED LETTER BHA;Mn;0;NSM;0FA6 0FB7;;;;N;;;;; 0FA8;TIBETAN SUBJOINED LETTER MA;Mn;0;NSM;;;;;N;;;;; 0FA9;TIBETAN SUBJOINED LETTER TSA;Mn;0;NSM;;;;;N;;;;; 0FAA;TIBETAN SUBJOINED LETTER TSHA;Mn;0;NSM;;;;;N;;;;; 0FAB;TIBETAN SUBJOINED LETTER DZA;Mn;0;NSM;;;;;N;;;;; 0FAC;TIBETAN SUBJOINED LETTER DZHA;Mn;0;NSM;0FAB 0FB7;;;;N;;;;; 0FAD;TIBETAN SUBJOINED LETTER WA;Mn;0;NSM;;;;;N;;*;;; 0FAE;TIBETAN SUBJOINED LETTER ZHA;Mn;0;NSM;;;;;N;;;;; 0FAF;TIBETAN SUBJOINED LETTER ZA;Mn;0;NSM;;;;;N;;;;; 0FB0;TIBETAN SUBJOINED LETTER -A;Mn;0;NSM;;;;;N;;;;; 0FB1;TIBETAN SUBJOINED LETTER YA;Mn;0;NSM;;;;;N;;*;;; 0FB2;TIBETAN SUBJOINED LETTER RA;Mn;0;NSM;;;;;N;;*;;; 0FB3;TIBETAN SUBJOINED LETTER LA;Mn;0;NSM;;;;;N;;;;; 0FB4;TIBETAN SUBJOINED LETTER SHA;Mn;0;NSM;;;;;N;;;;; 0FB5;TIBETAN SUBJOINED LETTER SSA;Mn;0;NSM;;;;;N;;;;; 0FB6;TIBETAN SUBJOINED LETTER SA;Mn;0;NSM;;;;;N;;;;; 0FB7;TIBETAN SUBJOINED LETTER HA;Mn;0;NSM;;;;;N;;;;; 0FB8;TIBETAN SUBJOINED LETTER A;Mn;0;NSM;;;;;N;;;;; 0FB9;TIBETAN SUBJOINED LETTER KSSA;Mn;0;NSM;0F90 0FB5;;;;N;;;;; 0FBA;TIBETAN SUBJOINED LETTER FIXED-FORM WA;Mn;0;NSM;;;;;N;;*;;; 0FBB;TIBETAN SUBJOINED LETTER FIXED-FORM YA;Mn;0;NSM;;;;;N;;*;;; 0FBC;TIBETAN SUBJOINED LETTER FIXED-FORM RA;Mn;0;NSM;;;;;N;;*;;; 0FBE;TIBETAN KU RU KHA;So;0;L;;;;;N;;kuruka;;; 0FBF;TIBETAN KU RU KHA BZHI MIG CAN;So;0;L;;;;;N;;kuruka shi mik chen;;; 0FC0;TIBETAN CANTILLATION SIGN HEAVY BEAT;So;0;L;;;;;N;;;;; 0FC1;TIBETAN CANTILLATION SIGN LIGHT BEAT;So;0;L;;;;;N;;;;; 0FC2;TIBETAN CANTILLATION SIGN CANG TE-U;So;0;L;;;;;N;;chang tyu;;; 0FC3;TIBETAN CANTILLATION SIGN SBUB -CHAL;So;0;L;;;;;N;;bub chey;;; 0FC4;TIBETAN SYMBOL DRIL BU;So;0;L;;;;;N;;drilbu;;; 0FC5;TIBETAN SYMBOL RDO RJE;So;0;L;;;;;N;;dorje;;; 0FC6;TIBETAN SYMBOL PADMA GDAN;Mn;220;NSM;;;;;N;;pema den;;; 0FC7;TIBETAN SYMBOL RDO RJE RGYA GRAM;So;0;L;;;;;N;;dorje gya dram;;; 0FC8;TIBETAN SYMBOL PHUR PA;So;0;L;;;;;N;;phurba;;; 0FC9;TIBETAN SYMBOL NOR BU;So;0;L;;;;;N;;norbu;;; 0FCA;TIBETAN SYMBOL NOR BU NYIS -KHYIL;So;0;L;;;;;N;;norbu nyi khyi;;; 0FCB;TIBETAN SYMBOL NOR BU GSUM -KHYIL;So;0;L;;;;;N;;norbu sum khyi;;; 0FCC;TIBETAN SYMBOL NOR BU BZHI -KHYIL;So;0;L;;;;;N;;norbu shi khyi;;; 0FCF;TIBETAN SIGN RDEL NAG GSUM;So;0;L;;;;;N;;;;; 1000;MYANMAR LETTER KA;Lo;0;L;;;;;N;;;;; 1001;MYANMAR LETTER KHA;Lo;0;L;;;;;N;;;;; 1002;MYANMAR LETTER GA;Lo;0;L;;;;;N;;;;; 1003;MYANMAR LETTER GHA;Lo;0;L;;;;;N;;;;; 1004;MYANMAR LETTER NGA;Lo;0;L;;;;;N;;;;; 1005;MYANMAR LETTER CA;Lo;0;L;;;;;N;;;;; 1006;MYANMAR LETTER CHA;Lo;0;L;;;;;N;;;;; 1007;MYANMAR LETTER JA;Lo;0;L;;;;;N;;;;; 1008;MYANMAR LETTER JHA;Lo;0;L;;;;;N;;;;; 1009;MYANMAR LETTER NYA;Lo;0;L;;;;;N;;;;; 100A;MYANMAR LETTER NNYA;Lo;0;L;;;;;N;;;;; 100B;MYANMAR LETTER TTA;Lo;0;L;;;;;N;;;;; 100C;MYANMAR LETTER TTHA;Lo;0;L;;;;;N;;;;; 100D;MYANMAR LETTER DDA;Lo;0;L;;;;;N;;;;; 100E;MYANMAR LETTER DDHA;Lo;0;L;;;;;N;;;;; 100F;MYANMAR LETTER NNA;Lo;0;L;;;;;N;;;;; 1010;MYANMAR LETTER TA;Lo;0;L;;;;;N;;;;; 1011;MYANMAR LETTER THA;Lo;0;L;;;;;N;;;;; 1012;MYANMAR LETTER DA;Lo;0;L;;;;;N;;;;; 1013;MYANMAR LETTER DHA;Lo;0;L;;;;;N;;;;; 1014;MYANMAR LETTER NA;Lo;0;L;;;;;N;;;;; 1015;MYANMAR LETTER PA;Lo;0;L;;;;;N;;;;; 1016;MYANMAR LETTER PHA;Lo;0;L;;;;;N;;;;; 1017;MYANMAR LETTER BA;Lo;0;L;;;;;N;;;;; 1018;MYANMAR LETTER BHA;Lo;0;L;;;;;N;;;;; 1019;MYANMAR LETTER MA;Lo;0;L;;;;;N;;;;; 101A;MYANMAR LETTER YA;Lo;0;L;;;;;N;;;;; 101B;MYANMAR LETTER RA;Lo;0;L;;;;;N;;;;; 101C;MYANMAR LETTER LA;Lo;0;L;;;;;N;;;;; 101D;MYANMAR LETTER WA;Lo;0;L;;;;;N;;;;; 101E;MYANMAR LETTER SA;Lo;0;L;;;;;N;;;;; 101F;MYANMAR LETTER HA;Lo;0;L;;;;;N;;;;; 1020;MYANMAR LETTER LLA;Lo;0;L;;;;;N;;;;; 1021;MYANMAR LETTER A;Lo;0;L;;;;;N;;;;; 1023;MYANMAR LETTER I;Lo;0;L;;;;;N;;;;; 1024;MYANMAR LETTER II;Lo;0;L;;;;;N;;;;; 1025;MYANMAR LETTER U;Lo;0;L;;;;;N;;;;; 1026;MYANMAR LETTER UU;Lo;0;L;1025 102E;;;;N;;;;; 1027;MYANMAR LETTER E;Lo;0;L;;;;;N;;;;; 1029;MYANMAR LETTER O;Lo;0;L;;;;;N;;;;; 102A;MYANMAR LETTER AU;Lo;0;L;;;;;N;;;;; 102C;MYANMAR VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; 102D;MYANMAR VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;; 102E;MYANMAR VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;; 102F;MYANMAR VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; 1030;MYANMAR VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;; 1031;MYANMAR VOWEL SIGN E;Mc;0;L;;;;;N;;;;; 1032;MYANMAR VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;; 1036;MYANMAR SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;; 1037;MYANMAR SIGN DOT BELOW;Mn;7;NSM;;;;;N;;;;; 1038;MYANMAR SIGN VISARGA;Mc;0;L;;;;;N;;;;; 1039;MYANMAR SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;; 1040;MYANMAR DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 1041;MYANMAR DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 1042;MYANMAR DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 1043;MYANMAR DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 1044;MYANMAR DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 1045;MYANMAR DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 1046;MYANMAR DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 1047;MYANMAR DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 1048;MYANMAR DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 1049;MYANMAR DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 104A;MYANMAR SIGN LITTLE SECTION;Po;0;L;;;;;N;;;;; 104B;MYANMAR SIGN SECTION;Po;0;L;;;;;N;;;;; 104C;MYANMAR SYMBOL LOCATIVE;Po;0;L;;;;;N;;;;; 104D;MYANMAR SYMBOL COMPLETED;Po;0;L;;;;;N;;;;; 104E;MYANMAR SYMBOL AFOREMENTIONED;Po;0;L;;;;;N;;;;; 104F;MYANMAR SYMBOL GENITIVE;Po;0;L;;;;;N;;;;; 1050;MYANMAR LETTER SHA;Lo;0;L;;;;;N;;;;; 1051;MYANMAR LETTER SSA;Lo;0;L;;;;;N;;;;; 1052;MYANMAR LETTER VOCALIC R;Lo;0;L;;;;;N;;;;; 1053;MYANMAR LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;; 1054;MYANMAR LETTER VOCALIC L;Lo;0;L;;;;;N;;;;; 1055;MYANMAR LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;; 1056;MYANMAR VOWEL SIGN VOCALIC R;Mc;0;L;;;;;N;;;;; 1057;MYANMAR VOWEL SIGN VOCALIC RR;Mc;0;L;;;;;N;;;;; 1058;MYANMAR VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;; 1059;MYANMAR VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;; 10A0;GEORGIAN CAPITAL LETTER AN;Lu;0;L;;;;;N;;Khutsuri;;; 10A1;GEORGIAN CAPITAL LETTER BAN;Lu;0;L;;;;;N;;Khutsuri;;; 10A2;GEORGIAN CAPITAL LETTER GAN;Lu;0;L;;;;;N;;Khutsuri;;; 10A3;GEORGIAN CAPITAL LETTER DON;Lu;0;L;;;;;N;;Khutsuri;;; 10A4;GEORGIAN CAPITAL LETTER EN;Lu;0;L;;;;;N;;Khutsuri;;; 10A5;GEORGIAN CAPITAL LETTER VIN;Lu;0;L;;;;;N;;Khutsuri;;; 10A6;GEORGIAN CAPITAL LETTER ZEN;Lu;0;L;;;;;N;;Khutsuri;;; 10A7;GEORGIAN CAPITAL LETTER TAN;Lu;0;L;;;;;N;;Khutsuri;;; 10A8;GEORGIAN CAPITAL LETTER IN;Lu;0;L;;;;;N;;Khutsuri;;; 10A9;GEORGIAN CAPITAL LETTER KAN;Lu;0;L;;;;;N;;Khutsuri;;; 10AA;GEORGIAN CAPITAL LETTER LAS;Lu;0;L;;;;;N;;Khutsuri;;; 10AB;GEORGIAN CAPITAL LETTER MAN;Lu;0;L;;;;;N;;Khutsuri;;; 10AC;GEORGIAN CAPITAL LETTER NAR;Lu;0;L;;;;;N;;Khutsuri;;; 10AD;GEORGIAN CAPITAL LETTER ON;Lu;0;L;;;;;N;;Khutsuri;;; 10AE;GEORGIAN CAPITAL LETTER PAR;Lu;0;L;;;;;N;;Khutsuri;;; 10AF;GEORGIAN CAPITAL LETTER ZHAR;Lu;0;L;;;;;N;;Khutsuri;;; 10B0;GEORGIAN CAPITAL LETTER RAE;Lu;0;L;;;;;N;;Khutsuri;;; 10B1;GEORGIAN CAPITAL LETTER SAN;Lu;0;L;;;;;N;;Khutsuri;;; 10B2;GEORGIAN CAPITAL LETTER TAR;Lu;0;L;;;;;N;;Khutsuri;;; 10B3;GEORGIAN CAPITAL LETTER UN;Lu;0;L;;;;;N;;Khutsuri;;; 10B4;GEORGIAN CAPITAL LETTER PHAR;Lu;0;L;;;;;N;;Khutsuri;;; 10B5;GEORGIAN CAPITAL LETTER KHAR;Lu;0;L;;;;;N;;Khutsuri;;; 10B6;GEORGIAN CAPITAL LETTER GHAN;Lu;0;L;;;;;N;;Khutsuri;;; 10B7;GEORGIAN CAPITAL LETTER QAR;Lu;0;L;;;;;N;;Khutsuri;;; 10B8;GEORGIAN CAPITAL LETTER SHIN;Lu;0;L;;;;;N;;Khutsuri;;; 10B9;GEORGIAN CAPITAL LETTER CHIN;Lu;0;L;;;;;N;;Khutsuri;;; 10BA;GEORGIAN CAPITAL LETTER CAN;Lu;0;L;;;;;N;;Khutsuri;;; 10BB;GEORGIAN CAPITAL LETTER JIL;Lu;0;L;;;;;N;;Khutsuri;;; 10BC;GEORGIAN CAPITAL LETTER CIL;Lu;0;L;;;;;N;;Khutsuri;;; 10BD;GEORGIAN CAPITAL LETTER CHAR;Lu;0;L;;;;;N;;Khutsuri;;; 10BE;GEORGIAN CAPITAL LETTER XAN;Lu;0;L;;;;;N;;Khutsuri;;; 10BF;GEORGIAN CAPITAL LETTER JHAN;Lu;0;L;;;;;N;;Khutsuri;;; 10C0;GEORGIAN CAPITAL LETTER HAE;Lu;0;L;;;;;N;;Khutsuri;;; 10C1;GEORGIAN CAPITAL LETTER HE;Lu;0;L;;;;;N;;Khutsuri;;; 10C2;GEORGIAN CAPITAL LETTER HIE;Lu;0;L;;;;;N;;Khutsuri;;; 10C3;GEORGIAN CAPITAL LETTER WE;Lu;0;L;;;;;N;;Khutsuri;;; 10C4;GEORGIAN CAPITAL LETTER HAR;Lu;0;L;;;;;N;;Khutsuri;;; 10C5;GEORGIAN CAPITAL LETTER HOE;Lu;0;L;;;;;N;;Khutsuri;;; 10D0;GEORGIAN LETTER AN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER AN;;;; 10D1;GEORGIAN LETTER BAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER BAN;;;; 10D2;GEORGIAN LETTER GAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER GAN;;;; 10D3;GEORGIAN LETTER DON;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER DON;;;; 10D4;GEORGIAN LETTER EN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER EN;;;; 10D5;GEORGIAN LETTER VIN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER VIN;;;; 10D6;GEORGIAN LETTER ZEN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER ZEN;;;; 10D7;GEORGIAN LETTER TAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER TAN;;;; 10D8;GEORGIAN LETTER IN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER IN;;;; 10D9;GEORGIAN LETTER KAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER KAN;;;; 10DA;GEORGIAN LETTER LAS;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER LAS;;;; 10DB;GEORGIAN LETTER MAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER MAN;;;; 10DC;GEORGIAN LETTER NAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER NAR;;;; 10DD;GEORGIAN LETTER ON;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER ON;;;; 10DE;GEORGIAN LETTER PAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER PAR;;;; 10DF;GEORGIAN LETTER ZHAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER ZHAR;;;; 10E0;GEORGIAN LETTER RAE;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER RAE;;;; 10E1;GEORGIAN LETTER SAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER SAN;;;; 10E2;GEORGIAN LETTER TAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER TAR;;;; 10E3;GEORGIAN LETTER UN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER UN;;;; 10E4;GEORGIAN LETTER PHAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER PHAR;;;; 10E5;GEORGIAN LETTER KHAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER KHAR;;;; 10E6;GEORGIAN LETTER GHAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER GHAN;;;; 10E7;GEORGIAN LETTER QAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER QAR;;;; 10E8;GEORGIAN LETTER SHIN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER SHIN;;;; 10E9;GEORGIAN LETTER CHIN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER CHIN;;;; 10EA;GEORGIAN LETTER CAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER CAN;;;; 10EB;GEORGIAN LETTER JIL;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER JIL;;;; 10EC;GEORGIAN LETTER CIL;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER CIL;;;; 10ED;GEORGIAN LETTER CHAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER CHAR;;;; 10EE;GEORGIAN LETTER XAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER XAN;;;; 10EF;GEORGIAN LETTER JHAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER JHAN;;;; 10F0;GEORGIAN LETTER HAE;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER HAE;;;; 10F1;GEORGIAN LETTER HE;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER HE;;;; 10F2;GEORGIAN LETTER HIE;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER HIE;;;; 10F3;GEORGIAN LETTER WE;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER WE;;;; 10F4;GEORGIAN LETTER HAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER HAR;;;; 10F5;GEORGIAN LETTER HOE;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER HOE;;;; 10F6;GEORGIAN LETTER FI;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER FI;;;; 10FB;GEORGIAN PARAGRAPH SEPARATOR;Po;0;L;;;;;N;;;;; 1100;HANGUL CHOSEONG KIYEOK;Lo;0;L;;;;;N;;g *;;; 1101;HANGUL CHOSEONG SSANGKIYEOK;Lo;0;L;;;;;N;;gg *;;; 1102;HANGUL CHOSEONG NIEUN;Lo;0;L;;;;;N;;n *;;; 1103;HANGUL CHOSEONG TIKEUT;Lo;0;L;;;;;N;;d *;;; 1104;HANGUL CHOSEONG SSANGTIKEUT;Lo;0;L;;;;;N;;dd *;;; 1105;HANGUL CHOSEONG RIEUL;Lo;0;L;;;;;N;;r *;;; 1106;HANGUL CHOSEONG MIEUM;Lo;0;L;;;;;N;;m *;;; 1107;HANGUL CHOSEONG PIEUP;Lo;0;L;;;;;N;;b *;;; 1108;HANGUL CHOSEONG SSANGPIEUP;Lo;0;L;;;;;N;;bb *;;; 1109;HANGUL CHOSEONG SIOS;Lo;0;L;;;;;N;;s *;;; 110A;HANGUL CHOSEONG SSANGSIOS;Lo;0;L;;;;;N;;ss *;;; 110B;HANGUL CHOSEONG IEUNG;Lo;0;L;;;;;N;;;;; 110C;HANGUL CHOSEONG CIEUC;Lo;0;L;;;;;N;;j *;;; 110D;HANGUL CHOSEONG SSANGCIEUC;Lo;0;L;;;;;N;;jj *;;; 110E;HANGUL CHOSEONG CHIEUCH;Lo;0;L;;;;;N;;c *;;; 110F;HANGUL CHOSEONG KHIEUKH;Lo;0;L;;;;;N;;k *;;; 1110;HANGUL CHOSEONG THIEUTH;Lo;0;L;;;;;N;;t *;;; 1111;HANGUL CHOSEONG PHIEUPH;Lo;0;L;;;;;N;;p *;;; 1112;HANGUL CHOSEONG HIEUH;Lo;0;L;;;;;N;;h *;;; 1113;HANGUL CHOSEONG NIEUN-KIYEOK;Lo;0;L;;;;;N;;;;; 1114;HANGUL CHOSEONG SSANGNIEUN;Lo;0;L;;;;;N;;;;; 1115;HANGUL CHOSEONG NIEUN-TIKEUT;Lo;0;L;;;;;N;;;;; 1116;HANGUL CHOSEONG NIEUN-PIEUP;Lo;0;L;;;;;N;;;;; 1117;HANGUL CHOSEONG TIKEUT-KIYEOK;Lo;0;L;;;;;N;;;;; 1118;HANGUL CHOSEONG RIEUL-NIEUN;Lo;0;L;;;;;N;;;;; 1119;HANGUL CHOSEONG SSANGRIEUL;Lo;0;L;;;;;N;;;;; 111A;HANGUL CHOSEONG RIEUL-HIEUH;Lo;0;L;;;;;N;;;;; 111B;HANGUL CHOSEONG KAPYEOUNRIEUL;Lo;0;L;;;;;N;;;;; 111C;HANGUL CHOSEONG MIEUM-PIEUP;Lo;0;L;;;;;N;;;;; 111D;HANGUL CHOSEONG KAPYEOUNMIEUM;Lo;0;L;;;;;N;;;;; 111E;HANGUL CHOSEONG PIEUP-KIYEOK;Lo;0;L;;;;;N;;;;; 111F;HANGUL CHOSEONG PIEUP-NIEUN;Lo;0;L;;;;;N;;;;; 1120;HANGUL CHOSEONG PIEUP-TIKEUT;Lo;0;L;;;;;N;;;;; 1121;HANGUL CHOSEONG PIEUP-SIOS;Lo;0;L;;;;;N;;;;; 1122;HANGUL CHOSEONG PIEUP-SIOS-KIYEOK;Lo;0;L;;;;;N;;;;; 1123;HANGUL CHOSEONG PIEUP-SIOS-TIKEUT;Lo;0;L;;;;;N;;;;; 1124;HANGUL CHOSEONG PIEUP-SIOS-PIEUP;Lo;0;L;;;;;N;;;;; 1125;HANGUL CHOSEONG PIEUP-SSANGSIOS;Lo;0;L;;;;;N;;;;; 1126;HANGUL CHOSEONG PIEUP-SIOS-CIEUC;Lo;0;L;;;;;N;;;;; 1127;HANGUL CHOSEONG PIEUP-CIEUC;Lo;0;L;;;;;N;;;;; 1128;HANGUL CHOSEONG PIEUP-CHIEUCH;Lo;0;L;;;;;N;;;;; 1129;HANGUL CHOSEONG PIEUP-THIEUTH;Lo;0;L;;;;;N;;;;; 112A;HANGUL CHOSEONG PIEUP-PHIEUPH;Lo;0;L;;;;;N;;;;; 112B;HANGUL CHOSEONG KAPYEOUNPIEUP;Lo;0;L;;;;;N;;;;; 112C;HANGUL CHOSEONG KAPYEOUNSSANGPIEUP;Lo;0;L;;;;;N;;;;; 112D;HANGUL CHOSEONG SIOS-KIYEOK;Lo;0;L;;;;;N;;;;; 112E;HANGUL CHOSEONG SIOS-NIEUN;Lo;0;L;;;;;N;;;;; 112F;HANGUL CHOSEONG SIOS-TIKEUT;Lo;0;L;;;;;N;;;;; 1130;HANGUL CHOSEONG SIOS-RIEUL;Lo;0;L;;;;;N;;;;; 1131;HANGUL CHOSEONG SIOS-MIEUM;Lo;0;L;;;;;N;;;;; 1132;HANGUL CHOSEONG SIOS-PIEUP;Lo;0;L;;;;;N;;;;; 1133;HANGUL CHOSEONG SIOS-PIEUP-KIYEOK;Lo;0;L;;;;;N;;;;; 1134;HANGUL CHOSEONG SIOS-SSANGSIOS;Lo;0;L;;;;;N;;;;; 1135;HANGUL CHOSEONG SIOS-IEUNG;Lo;0;L;;;;;N;;;;; 1136;HANGUL CHOSEONG SIOS-CIEUC;Lo;0;L;;;;;N;;;;; 1137;HANGUL CHOSEONG SIOS-CHIEUCH;Lo;0;L;;;;;N;;;;; 1138;HANGUL CHOSEONG SIOS-KHIEUKH;Lo;0;L;;;;;N;;;;; 1139;HANGUL CHOSEONG SIOS-THIEUTH;Lo;0;L;;;;;N;;;;; 113A;HANGUL CHOSEONG SIOS-PHIEUPH;Lo;0;L;;;;;N;;;;; 113B;HANGUL CHOSEONG SIOS-HIEUH;Lo;0;L;;;;;N;;;;; 113C;HANGUL CHOSEONG CHITUEUMSIOS;Lo;0;L;;;;;N;;;;; 113D;HANGUL CHOSEONG CHITUEUMSSANGSIOS;Lo;0;L;;;;;N;;;;; 113E;HANGUL CHOSEONG CEONGCHIEUMSIOS;Lo;0;L;;;;;N;;;;; 113F;HANGUL CHOSEONG CEONGCHIEUMSSANGSIOS;Lo;0;L;;;;;N;;;;; 1140;HANGUL CHOSEONG PANSIOS;Lo;0;L;;;;;N;;;;; 1141;HANGUL CHOSEONG IEUNG-KIYEOK;Lo;0;L;;;;;N;;;;; 1142;HANGUL CHOSEONG IEUNG-TIKEUT;Lo;0;L;;;;;N;;;;; 1143;HANGUL CHOSEONG IEUNG-MIEUM;Lo;0;L;;;;;N;;;;; 1144;HANGUL CHOSEONG IEUNG-PIEUP;Lo;0;L;;;;;N;;;;; 1145;HANGUL CHOSEONG IEUNG-SIOS;Lo;0;L;;;;;N;;;;; 1146;HANGUL CHOSEONG IEUNG-PANSIOS;Lo;0;L;;;;;N;;;;; 1147;HANGUL CHOSEONG SSANGIEUNG;Lo;0;L;;;;;N;;;;; 1148;HANGUL CHOSEONG IEUNG-CIEUC;Lo;0;L;;;;;N;;;;; 1149;HANGUL CHOSEONG IEUNG-CHIEUCH;Lo;0;L;;;;;N;;;;; 114A;HANGUL CHOSEONG IEUNG-THIEUTH;Lo;0;L;;;;;N;;;;; 114B;HANGUL CHOSEONG IEUNG-PHIEUPH;Lo;0;L;;;;;N;;;;; 114C;HANGUL CHOSEONG YESIEUNG;Lo;0;L;;;;;N;;;;; 114D;HANGUL CHOSEONG CIEUC-IEUNG;Lo;0;L;;;;;N;;;;; 114E;HANGUL CHOSEONG CHITUEUMCIEUC;Lo;0;L;;;;;N;;;;; 114F;HANGUL CHOSEONG CHITUEUMSSANGCIEUC;Lo;0;L;;;;;N;;;;; 1150;HANGUL CHOSEONG CEONGCHIEUMCIEUC;Lo;0;L;;;;;N;;;;; 1151;HANGUL CHOSEONG CEONGCHIEUMSSANGCIEUC;Lo;0;L;;;;;N;;;;; 1152;HANGUL CHOSEONG CHIEUCH-KHIEUKH;Lo;0;L;;;;;N;;;;; 1153;HANGUL CHOSEONG CHIEUCH-HIEUH;Lo;0;L;;;;;N;;;;; 1154;HANGUL CHOSEONG CHITUEUMCHIEUCH;Lo;0;L;;;;;N;;;;; 1155;HANGUL CHOSEONG CEONGCHIEUMCHIEUCH;Lo;0;L;;;;;N;;;;; 1156;HANGUL CHOSEONG PHIEUPH-PIEUP;Lo;0;L;;;;;N;;;;; 1157;HANGUL CHOSEONG KAPYEOUNPHIEUPH;Lo;0;L;;;;;N;;;;; 1158;HANGUL CHOSEONG SSANGHIEUH;Lo;0;L;;;;;N;;;;; 1159;HANGUL CHOSEONG YEORINHIEUH;Lo;0;L;;;;;N;;;;; 115F;HANGUL CHOSEONG FILLER;Lo;0;L;;;;;N;;;;; 1160;HANGUL JUNGSEONG FILLER;Lo;0;L;;;;;N;;;;; 1161;HANGUL JUNGSEONG A;Lo;0;L;;;;;N;;;;; 1162;HANGUL JUNGSEONG AE;Lo;0;L;;;;;N;;;;; 1163;HANGUL JUNGSEONG YA;Lo;0;L;;;;;N;;;;; 1164;HANGUL JUNGSEONG YAE;Lo;0;L;;;;;N;;;;; 1165;HANGUL JUNGSEONG EO;Lo;0;L;;;;;N;;;;; 1166;HANGUL JUNGSEONG E;Lo;0;L;;;;;N;;;;; 1167;HANGUL JUNGSEONG YEO;Lo;0;L;;;;;N;;;;; 1168;HANGUL JUNGSEONG YE;Lo;0;L;;;;;N;;;;; 1169;HANGUL JUNGSEONG O;Lo;0;L;;;;;N;;;;; 116A;HANGUL JUNGSEONG WA;Lo;0;L;;;;;N;;;;; 116B;HANGUL JUNGSEONG WAE;Lo;0;L;;;;;N;;;;; 116C;HANGUL JUNGSEONG OE;Lo;0;L;;;;;N;;;;; 116D;HANGUL JUNGSEONG YO;Lo;0;L;;;;;N;;;;; 116E;HANGUL JUNGSEONG U;Lo;0;L;;;;;N;;;;; 116F;HANGUL JUNGSEONG WEO;Lo;0;L;;;;;N;;;;; 1170;HANGUL JUNGSEONG WE;Lo;0;L;;;;;N;;;;; 1171;HANGUL JUNGSEONG WI;Lo;0;L;;;;;N;;;;; 1172;HANGUL JUNGSEONG YU;Lo;0;L;;;;;N;;;;; 1173;HANGUL JUNGSEONG EU;Lo;0;L;;;;;N;;;;; 1174;HANGUL JUNGSEONG YI;Lo;0;L;;;;;N;;;;; 1175;HANGUL JUNGSEONG I;Lo;0;L;;;;;N;;;;; 1176;HANGUL JUNGSEONG A-O;Lo;0;L;;;;;N;;;;; 1177;HANGUL JUNGSEONG A-U;Lo;0;L;;;;;N;;;;; 1178;HANGUL JUNGSEONG YA-O;Lo;0;L;;;;;N;;;;; 1179;HANGUL JUNGSEONG YA-YO;Lo;0;L;;;;;N;;;;; 117A;HANGUL JUNGSEONG EO-O;Lo;0;L;;;;;N;;;;; 117B;HANGUL JUNGSEONG EO-U;Lo;0;L;;;;;N;;;;; 117C;HANGUL JUNGSEONG EO-EU;Lo;0;L;;;;;N;;;;; 117D;HANGUL JUNGSEONG YEO-O;Lo;0;L;;;;;N;;;;; 117E;HANGUL JUNGSEONG YEO-U;Lo;0;L;;;;;N;;;;; 117F;HANGUL JUNGSEONG O-EO;Lo;0;L;;;;;N;;;;; 1180;HANGUL JUNGSEONG O-E;Lo;0;L;;;;;N;;;;; 1181;HANGUL JUNGSEONG O-YE;Lo;0;L;;;;;N;;;;; 1182;HANGUL JUNGSEONG O-O;Lo;0;L;;;;;N;;;;; 1183;HANGUL JUNGSEONG O-U;Lo;0;L;;;;;N;;;;; 1184;HANGUL JUNGSEONG YO-YA;Lo;0;L;;;;;N;;;;; 1185;HANGUL JUNGSEONG YO-YAE;Lo;0;L;;;;;N;;;;; 1186;HANGUL JUNGSEONG YO-YEO;Lo;0;L;;;;;N;;;;; 1187;HANGUL JUNGSEONG YO-O;Lo;0;L;;;;;N;;;;; 1188;HANGUL JUNGSEONG YO-I;Lo;0;L;;;;;N;;;;; 1189;HANGUL JUNGSEONG U-A;Lo;0;L;;;;;N;;;;; 118A;HANGUL JUNGSEONG U-AE;Lo;0;L;;;;;N;;;;; 118B;HANGUL JUNGSEONG U-EO-EU;Lo;0;L;;;;;N;;;;; 118C;HANGUL JUNGSEONG U-YE;Lo;0;L;;;;;N;;;;; 118D;HANGUL JUNGSEONG U-U;Lo;0;L;;;;;N;;;;; 118E;HANGUL JUNGSEONG YU-A;Lo;0;L;;;;;N;;;;; 118F;HANGUL JUNGSEONG YU-EO;Lo;0;L;;;;;N;;;;; 1190;HANGUL JUNGSEONG YU-E;Lo;0;L;;;;;N;;;;; 1191;HANGUL JUNGSEONG YU-YEO;Lo;0;L;;;;;N;;;;; 1192;HANGUL JUNGSEONG YU-YE;Lo;0;L;;;;;N;;;;; 1193;HANGUL JUNGSEONG YU-U;Lo;0;L;;;;;N;;;;; 1194;HANGUL JUNGSEONG YU-I;Lo;0;L;;;;;N;;;;; 1195;HANGUL JUNGSEONG EU-U;Lo;0;L;;;;;N;;;;; 1196;HANGUL JUNGSEONG EU-EU;Lo;0;L;;;;;N;;;;; 1197;HANGUL JUNGSEONG YI-U;Lo;0;L;;;;;N;;;;; 1198;HANGUL JUNGSEONG I-A;Lo;0;L;;;;;N;;;;; 1199;HANGUL JUNGSEONG I-YA;Lo;0;L;;;;;N;;;;; 119A;HANGUL JUNGSEONG I-O;Lo;0;L;;;;;N;;;;; 119B;HANGUL JUNGSEONG I-U;Lo;0;L;;;;;N;;;;; 119C;HANGUL JUNGSEONG I-EU;Lo;0;L;;;;;N;;;;; 119D;HANGUL JUNGSEONG I-ARAEA;Lo;0;L;;;;;N;;;;; 119E;HANGUL JUNGSEONG ARAEA;Lo;0;L;;;;;N;;;;; 119F;HANGUL JUNGSEONG ARAEA-EO;Lo;0;L;;;;;N;;;;; 11A0;HANGUL JUNGSEONG ARAEA-U;Lo;0;L;;;;;N;;;;; 11A1;HANGUL JUNGSEONG ARAEA-I;Lo;0;L;;;;;N;;;;; 11A2;HANGUL JUNGSEONG SSANGARAEA;Lo;0;L;;;;;N;;;;; 11A8;HANGUL JONGSEONG KIYEOK;Lo;0;L;;;;;N;;g *;;; 11A9;HANGUL JONGSEONG SSANGKIYEOK;Lo;0;L;;;;;N;;gg *;;; 11AA;HANGUL JONGSEONG KIYEOK-SIOS;Lo;0;L;;;;;N;;gs *;;; 11AB;HANGUL JONGSEONG NIEUN;Lo;0;L;;;;;N;;n *;;; 11AC;HANGUL JONGSEONG NIEUN-CIEUC;Lo;0;L;;;;;N;;nj *;;; 11AD;HANGUL JONGSEONG NIEUN-HIEUH;Lo;0;L;;;;;N;;nh *;;; 11AE;HANGUL JONGSEONG TIKEUT;Lo;0;L;;;;;N;;d *;;; 11AF;HANGUL JONGSEONG RIEUL;Lo;0;L;;;;;N;;l *;;; 11B0;HANGUL JONGSEONG RIEUL-KIYEOK;Lo;0;L;;;;;N;;lg *;;; 11B1;HANGUL JONGSEONG RIEUL-MIEUM;Lo;0;L;;;;;N;;lm *;;; 11B2;HANGUL JONGSEONG RIEUL-PIEUP;Lo;0;L;;;;;N;;lb *;;; 11B3;HANGUL JONGSEONG RIEUL-SIOS;Lo;0;L;;;;;N;;ls *;;; 11B4;HANGUL JONGSEONG RIEUL-THIEUTH;Lo;0;L;;;;;N;;lt *;;; 11B5;HANGUL JONGSEONG RIEUL-PHIEUPH;Lo;0;L;;;;;N;;lp *;;; 11B6;HANGUL JONGSEONG RIEUL-HIEUH;Lo;0;L;;;;;N;;lh *;;; 11B7;HANGUL JONGSEONG MIEUM;Lo;0;L;;;;;N;;m *;;; 11B8;HANGUL JONGSEONG PIEUP;Lo;0;L;;;;;N;;b *;;; 11B9;HANGUL JONGSEONG PIEUP-SIOS;Lo;0;L;;;;;N;;bs *;;; 11BA;HANGUL JONGSEONG SIOS;Lo;0;L;;;;;N;;s *;;; 11BB;HANGUL JONGSEONG SSANGSIOS;Lo;0;L;;;;;N;;ss *;;; 11BC;HANGUL JONGSEONG IEUNG;Lo;0;L;;;;;N;;ng *;;; 11BD;HANGUL JONGSEONG CIEUC;Lo;0;L;;;;;N;;j *;;; 11BE;HANGUL JONGSEONG CHIEUCH;Lo;0;L;;;;;N;;c *;;; 11BF;HANGUL JONGSEONG KHIEUKH;Lo;0;L;;;;;N;;k *;;; 11C0;HANGUL JONGSEONG THIEUTH;Lo;0;L;;;;;N;;t *;;; 11C1;HANGUL JONGSEONG PHIEUPH;Lo;0;L;;;;;N;;p *;;; 11C2;HANGUL JONGSEONG HIEUH;Lo;0;L;;;;;N;;h *;;; 11C3;HANGUL JONGSEONG KIYEOK-RIEUL;Lo;0;L;;;;;N;;;;; 11C4;HANGUL JONGSEONG KIYEOK-SIOS-KIYEOK;Lo;0;L;;;;;N;;;;; 11C5;HANGUL JONGSEONG NIEUN-KIYEOK;Lo;0;L;;;;;N;;;;; 11C6;HANGUL JONGSEONG NIEUN-TIKEUT;Lo;0;L;;;;;N;;;;; 11C7;HANGUL JONGSEONG NIEUN-SIOS;Lo;0;L;;;;;N;;;;; 11C8;HANGUL JONGSEONG NIEUN-PANSIOS;Lo;0;L;;;;;N;;;;; 11C9;HANGUL JONGSEONG NIEUN-THIEUTH;Lo;0;L;;;;;N;;;;; 11CA;HANGUL JONGSEONG TIKEUT-KIYEOK;Lo;0;L;;;;;N;;;;; 11CB;HANGUL JONGSEONG TIKEUT-RIEUL;Lo;0;L;;;;;N;;;;; 11CC;HANGUL JONGSEONG RIEUL-KIYEOK-SIOS;Lo;0;L;;;;;N;;;;; 11CD;HANGUL JONGSEONG RIEUL-NIEUN;Lo;0;L;;;;;N;;;;; 11CE;HANGUL JONGSEONG RIEUL-TIKEUT;Lo;0;L;;;;;N;;;;; 11CF;HANGUL JONGSEONG RIEUL-TIKEUT-HIEUH;Lo;0;L;;;;;N;;;;; 11D0;HANGUL JONGSEONG SSANGRIEUL;Lo;0;L;;;;;N;;;;; 11D1;HANGUL JONGSEONG RIEUL-MIEUM-KIYEOK;Lo;0;L;;;;;N;;;;; 11D2;HANGUL JONGSEONG RIEUL-MIEUM-SIOS;Lo;0;L;;;;;N;;;;; 11D3;HANGUL JONGSEONG RIEUL-PIEUP-SIOS;Lo;0;L;;;;;N;;;;; 11D4;HANGUL JONGSEONG RIEUL-PIEUP-HIEUH;Lo;0;L;;;;;N;;;;; 11D5;HANGUL JONGSEONG RIEUL-KAPYEOUNPIEUP;Lo;0;L;;;;;N;;;;; 11D6;HANGUL JONGSEONG RIEUL-SSANGSIOS;Lo;0;L;;;;;N;;;;; 11D7;HANGUL JONGSEONG RIEUL-PANSIOS;Lo;0;L;;;;;N;;;;; 11D8;HANGUL JONGSEONG RIEUL-KHIEUKH;Lo;0;L;;;;;N;;;;; 11D9;HANGUL JONGSEONG RIEUL-YEORINHIEUH;Lo;0;L;;;;;N;;;;; 11DA;HANGUL JONGSEONG MIEUM-KIYEOK;Lo;0;L;;;;;N;;;;; 11DB;HANGUL JONGSEONG MIEUM-RIEUL;Lo;0;L;;;;;N;;;;; 11DC;HANGUL JONGSEONG MIEUM-PIEUP;Lo;0;L;;;;;N;;;;; 11DD;HANGUL JONGSEONG MIEUM-SIOS;Lo;0;L;;;;;N;;;;; 11DE;HANGUL JONGSEONG MIEUM-SSANGSIOS;Lo;0;L;;;;;N;;;;; 11DF;HANGUL JONGSEONG MIEUM-PANSIOS;Lo;0;L;;;;;N;;;;; 11E0;HANGUL JONGSEONG MIEUM-CHIEUCH;Lo;0;L;;;;;N;;;;; 11E1;HANGUL JONGSEONG MIEUM-HIEUH;Lo;0;L;;;;;N;;;;; 11E2;HANGUL JONGSEONG KAPYEOUNMIEUM;Lo;0;L;;;;;N;;;;; 11E3;HANGUL JONGSEONG PIEUP-RIEUL;Lo;0;L;;;;;N;;;;; 11E4;HANGUL JONGSEONG PIEUP-PHIEUPH;Lo;0;L;;;;;N;;;;; 11E5;HANGUL JONGSEONG PIEUP-HIEUH;Lo;0;L;;;;;N;;;;; 11E6;HANGUL JONGSEONG KAPYEOUNPIEUP;Lo;0;L;;;;;N;;;;; 11E7;HANGUL JONGSEONG SIOS-KIYEOK;Lo;0;L;;;;;N;;;;; 11E8;HANGUL JONGSEONG SIOS-TIKEUT;Lo;0;L;;;;;N;;;;; 11E9;HANGUL JONGSEONG SIOS-RIEUL;Lo;0;L;;;;;N;;;;; 11EA;HANGUL JONGSEONG SIOS-PIEUP;Lo;0;L;;;;;N;;;;; 11EB;HANGUL JONGSEONG PANSIOS;Lo;0;L;;;;;N;;;;; 11EC;HANGUL JONGSEONG IEUNG-KIYEOK;Lo;0;L;;;;;N;;;;; 11ED;HANGUL JONGSEONG IEUNG-SSANGKIYEOK;Lo;0;L;;;;;N;;;;; 11EE;HANGUL JONGSEONG SSANGIEUNG;Lo;0;L;;;;;N;;;;; 11EF;HANGUL JONGSEONG IEUNG-KHIEUKH;Lo;0;L;;;;;N;;;;; 11F0;HANGUL JONGSEONG YESIEUNG;Lo;0;L;;;;;N;;;;; 11F1;HANGUL JONGSEONG YESIEUNG-SIOS;Lo;0;L;;;;;N;;;;; 11F2;HANGUL JONGSEONG YESIEUNG-PANSIOS;Lo;0;L;;;;;N;;;;; 11F3;HANGUL JONGSEONG PHIEUPH-PIEUP;Lo;0;L;;;;;N;;;;; 11F4;HANGUL JONGSEONG KAPYEOUNPHIEUPH;Lo;0;L;;;;;N;;;;; 11F5;HANGUL JONGSEONG HIEUH-NIEUN;Lo;0;L;;;;;N;;;;; 11F6;HANGUL JONGSEONG HIEUH-RIEUL;Lo;0;L;;;;;N;;;;; 11F7;HANGUL JONGSEONG HIEUH-MIEUM;Lo;0;L;;;;;N;;;;; 11F8;HANGUL JONGSEONG HIEUH-PIEUP;Lo;0;L;;;;;N;;;;; 11F9;HANGUL JONGSEONG YEORINHIEUH;Lo;0;L;;;;;N;;;;; 1200;ETHIOPIC SYLLABLE HA;Lo;0;L;;;;;N;;;;; 1201;ETHIOPIC SYLLABLE HU;Lo;0;L;;;;;N;;;;; 1202;ETHIOPIC SYLLABLE HI;Lo;0;L;;;;;N;;;;; 1203;ETHIOPIC SYLLABLE HAA;Lo;0;L;;;;;N;;;;; 1204;ETHIOPIC SYLLABLE HEE;Lo;0;L;;;;;N;;;;; 1205;ETHIOPIC SYLLABLE HE;Lo;0;L;;;;;N;;;;; 1206;ETHIOPIC SYLLABLE HO;Lo;0;L;;;;;N;;;;; 1208;ETHIOPIC SYLLABLE LA;Lo;0;L;;;;;N;;;;; 1209;ETHIOPIC SYLLABLE LU;Lo;0;L;;;;;N;;;;; 120A;ETHIOPIC SYLLABLE LI;Lo;0;L;;;;;N;;;;; 120B;ETHIOPIC SYLLABLE LAA;Lo;0;L;;;;;N;;;;; 120C;ETHIOPIC SYLLABLE LEE;Lo;0;L;;;;;N;;;;; 120D;ETHIOPIC SYLLABLE LE;Lo;0;L;;;;;N;;;;; 120E;ETHIOPIC SYLLABLE LO;Lo;0;L;;;;;N;;;;; 120F;ETHIOPIC SYLLABLE LWA;Lo;0;L;;;;;N;;;;; 1210;ETHIOPIC SYLLABLE HHA;Lo;0;L;;;;;N;;;;; 1211;ETHIOPIC SYLLABLE HHU;Lo;0;L;;;;;N;;;;; 1212;ETHIOPIC SYLLABLE HHI;Lo;0;L;;;;;N;;;;; 1213;ETHIOPIC SYLLABLE HHAA;Lo;0;L;;;;;N;;;;; 1214;ETHIOPIC SYLLABLE HHEE;Lo;0;L;;;;;N;;;;; 1215;ETHIOPIC SYLLABLE HHE;Lo;0;L;;;;;N;;;;; 1216;ETHIOPIC SYLLABLE HHO;Lo;0;L;;;;;N;;;;; 1217;ETHIOPIC SYLLABLE HHWA;Lo;0;L;;;;;N;;;;; 1218;ETHIOPIC SYLLABLE MA;Lo;0;L;;;;;N;;;;; 1219;ETHIOPIC SYLLABLE MU;Lo;0;L;;;;;N;;;;; 121A;ETHIOPIC SYLLABLE MI;Lo;0;L;;;;;N;;;;; 121B;ETHIOPIC SYLLABLE MAA;Lo;0;L;;;;;N;;;;; 121C;ETHIOPIC SYLLABLE MEE;Lo;0;L;;;;;N;;;;; 121D;ETHIOPIC SYLLABLE ME;Lo;0;L;;;;;N;;;;; 121E;ETHIOPIC SYLLABLE MO;Lo;0;L;;;;;N;;;;; 121F;ETHIOPIC SYLLABLE MWA;Lo;0;L;;;;;N;;;;; 1220;ETHIOPIC SYLLABLE SZA;Lo;0;L;;;;;N;;;;; 1221;ETHIOPIC SYLLABLE SZU;Lo;0;L;;;;;N;;;;; 1222;ETHIOPIC SYLLABLE SZI;Lo;0;L;;;;;N;;;;; 1223;ETHIOPIC SYLLABLE SZAA;Lo;0;L;;;;;N;;;;; 1224;ETHIOPIC SYLLABLE SZEE;Lo;0;L;;;;;N;;;;; 1225;ETHIOPIC SYLLABLE SZE;Lo;0;L;;;;;N;;;;; 1226;ETHIOPIC SYLLABLE SZO;Lo;0;L;;;;;N;;;;; 1227;ETHIOPIC SYLLABLE SZWA;Lo;0;L;;;;;N;;;;; 1228;ETHIOPIC SYLLABLE RA;Lo;0;L;;;;;N;;;;; 1229;ETHIOPIC SYLLABLE RU;Lo;0;L;;;;;N;;;;; 122A;ETHIOPIC SYLLABLE RI;Lo;0;L;;;;;N;;;;; 122B;ETHIOPIC SYLLABLE RAA;Lo;0;L;;;;;N;;;;; 122C;ETHIOPIC SYLLABLE REE;Lo;0;L;;;;;N;;;;; 122D;ETHIOPIC SYLLABLE RE;Lo;0;L;;;;;N;;;;; 122E;ETHIOPIC SYLLABLE RO;Lo;0;L;;;;;N;;;;; 122F;ETHIOPIC SYLLABLE RWA;Lo;0;L;;;;;N;;;;; 1230;ETHIOPIC SYLLABLE SA;Lo;0;L;;;;;N;;;;; 1231;ETHIOPIC SYLLABLE SU;Lo;0;L;;;;;N;;;;; 1232;ETHIOPIC SYLLABLE SI;Lo;0;L;;;;;N;;;;; 1233;ETHIOPIC SYLLABLE SAA;Lo;0;L;;;;;N;;;;; 1234;ETHIOPIC SYLLABLE SEE;Lo;0;L;;;;;N;;;;; 1235;ETHIOPIC SYLLABLE SE;Lo;0;L;;;;;N;;;;; 1236;ETHIOPIC SYLLABLE SO;Lo;0;L;;;;;N;;;;; 1237;ETHIOPIC SYLLABLE SWA;Lo;0;L;;;;;N;;;;; 1238;ETHIOPIC SYLLABLE SHA;Lo;0;L;;;;;N;;;;; 1239;ETHIOPIC SYLLABLE SHU;Lo;0;L;;;;;N;;;;; 123A;ETHIOPIC SYLLABLE SHI;Lo;0;L;;;;;N;;;;; 123B;ETHIOPIC SYLLABLE SHAA;Lo;0;L;;;;;N;;;;; 123C;ETHIOPIC SYLLABLE SHEE;Lo;0;L;;;;;N;;;;; 123D;ETHIOPIC SYLLABLE SHE;Lo;0;L;;;;;N;;;;; 123E;ETHIOPIC SYLLABLE SHO;Lo;0;L;;;;;N;;;;; 123F;ETHIOPIC SYLLABLE SHWA;Lo;0;L;;;;;N;;;;; 1240;ETHIOPIC SYLLABLE QA;Lo;0;L;;;;;N;;;;; 1241;ETHIOPIC SYLLABLE QU;Lo;0;L;;;;;N;;;;; 1242;ETHIOPIC SYLLABLE QI;Lo;0;L;;;;;N;;;;; 1243;ETHIOPIC SYLLABLE QAA;Lo;0;L;;;;;N;;;;; 1244;ETHIOPIC SYLLABLE QEE;Lo;0;L;;;;;N;;;;; 1245;ETHIOPIC SYLLABLE QE;Lo;0;L;;;;;N;;;;; 1246;ETHIOPIC SYLLABLE QO;Lo;0;L;;;;;N;;;;; 1248;ETHIOPIC SYLLABLE QWA;Lo;0;L;;;;;N;;;;; 124A;ETHIOPIC SYLLABLE QWI;Lo;0;L;;;;;N;;;;; 124B;ETHIOPIC SYLLABLE QWAA;Lo;0;L;;;;;N;;;;; 124C;ETHIOPIC SYLLABLE QWEE;Lo;0;L;;;;;N;;;;; 124D;ETHIOPIC SYLLABLE QWE;Lo;0;L;;;;;N;;;;; 1250;ETHIOPIC SYLLABLE QHA;Lo;0;L;;;;;N;;;;; 1251;ETHIOPIC SYLLABLE QHU;Lo;0;L;;;;;N;;;;; 1252;ETHIOPIC SYLLABLE QHI;Lo;0;L;;;;;N;;;;; 1253;ETHIOPIC SYLLABLE QHAA;Lo;0;L;;;;;N;;;;; 1254;ETHIOPIC SYLLABLE QHEE;Lo;0;L;;;;;N;;;;; 1255;ETHIOPIC SYLLABLE QHE;Lo;0;L;;;;;N;;;;; 1256;ETHIOPIC SYLLABLE QHO;Lo;0;L;;;;;N;;;;; 1258;ETHIOPIC SYLLABLE QHWA;Lo;0;L;;;;;N;;;;; 125A;ETHIOPIC SYLLABLE QHWI;Lo;0;L;;;;;N;;;;; 125B;ETHIOPIC SYLLABLE QHWAA;Lo;0;L;;;;;N;;;;; 125C;ETHIOPIC SYLLABLE QHWEE;Lo;0;L;;;;;N;;;;; 125D;ETHIOPIC SYLLABLE QHWE;Lo;0;L;;;;;N;;;;; 1260;ETHIOPIC SYLLABLE BA;Lo;0;L;;;;;N;;;;; 1261;ETHIOPIC SYLLABLE BU;Lo;0;L;;;;;N;;;;; 1262;ETHIOPIC SYLLABLE BI;Lo;0;L;;;;;N;;;;; 1263;ETHIOPIC SYLLABLE BAA;Lo;0;L;;;;;N;;;;; 1264;ETHIOPIC SYLLABLE BEE;Lo;0;L;;;;;N;;;;; 1265;ETHIOPIC SYLLABLE BE;Lo;0;L;;;;;N;;;;; 1266;ETHIOPIC SYLLABLE BO;Lo;0;L;;;;;N;;;;; 1267;ETHIOPIC SYLLABLE BWA;Lo;0;L;;;;;N;;;;; 1268;ETHIOPIC SYLLABLE VA;Lo;0;L;;;;;N;;;;; 1269;ETHIOPIC SYLLABLE VU;Lo;0;L;;;;;N;;;;; 126A;ETHIOPIC SYLLABLE VI;Lo;0;L;;;;;N;;;;; 126B;ETHIOPIC SYLLABLE VAA;Lo;0;L;;;;;N;;;;; 126C;ETHIOPIC SYLLABLE VEE;Lo;0;L;;;;;N;;;;; 126D;ETHIOPIC SYLLABLE VE;Lo;0;L;;;;;N;;;;; 126E;ETHIOPIC SYLLABLE VO;Lo;0;L;;;;;N;;;;; 126F;ETHIOPIC SYLLABLE VWA;Lo;0;L;;;;;N;;;;; 1270;ETHIOPIC SYLLABLE TA;Lo;0;L;;;;;N;;;;; 1271;ETHIOPIC SYLLABLE TU;Lo;0;L;;;;;N;;;;; 1272;ETHIOPIC SYLLABLE TI;Lo;0;L;;;;;N;;;;; 1273;ETHIOPIC SYLLABLE TAA;Lo;0;L;;;;;N;;;;; 1274;ETHIOPIC SYLLABLE TEE;Lo;0;L;;;;;N;;;;; 1275;ETHIOPIC SYLLABLE TE;Lo;0;L;;;;;N;;;;; 1276;ETHIOPIC SYLLABLE TO;Lo;0;L;;;;;N;;;;; 1277;ETHIOPIC SYLLABLE TWA;Lo;0;L;;;;;N;;;;; 1278;ETHIOPIC SYLLABLE CA;Lo;0;L;;;;;N;;;;; 1279;ETHIOPIC SYLLABLE CU;Lo;0;L;;;;;N;;;;; 127A;ETHIOPIC SYLLABLE CI;Lo;0;L;;;;;N;;;;; 127B;ETHIOPIC SYLLABLE CAA;Lo;0;L;;;;;N;;;;; 127C;ETHIOPIC SYLLABLE CEE;Lo;0;L;;;;;N;;;;; 127D;ETHIOPIC SYLLABLE CE;Lo;0;L;;;;;N;;;;; 127E;ETHIOPIC SYLLABLE CO;Lo;0;L;;;;;N;;;;; 127F;ETHIOPIC SYLLABLE CWA;Lo;0;L;;;;;N;;;;; 1280;ETHIOPIC SYLLABLE XA;Lo;0;L;;;;;N;;;;; 1281;ETHIOPIC SYLLABLE XU;Lo;0;L;;;;;N;;;;; 1282;ETHIOPIC SYLLABLE XI;Lo;0;L;;;;;N;;;;; 1283;ETHIOPIC SYLLABLE XAA;Lo;0;L;;;;;N;;;;; 1284;ETHIOPIC SYLLABLE XEE;Lo;0;L;;;;;N;;;;; 1285;ETHIOPIC SYLLABLE XE;Lo;0;L;;;;;N;;;;; 1286;ETHIOPIC SYLLABLE XO;Lo;0;L;;;;;N;;;;; 1288;ETHIOPIC SYLLABLE XWA;Lo;0;L;;;;;N;;;;; 128A;ETHIOPIC SYLLABLE XWI;Lo;0;L;;;;;N;;;;; 128B;ETHIOPIC SYLLABLE XWAA;Lo;0;L;;;;;N;;;;; 128C;ETHIOPIC SYLLABLE XWEE;Lo;0;L;;;;;N;;;;; 128D;ETHIOPIC SYLLABLE XWE;Lo;0;L;;;;;N;;;;; 1290;ETHIOPIC SYLLABLE NA;Lo;0;L;;;;;N;;;;; 1291;ETHIOPIC SYLLABLE NU;Lo;0;L;;;;;N;;;;; 1292;ETHIOPIC SYLLABLE NI;Lo;0;L;;;;;N;;;;; 1293;ETHIOPIC SYLLABLE NAA;Lo;0;L;;;;;N;;;;; 1294;ETHIOPIC SYLLABLE NEE;Lo;0;L;;;;;N;;;;; 1295;ETHIOPIC SYLLABLE NE;Lo;0;L;;;;;N;;;;; 1296;ETHIOPIC SYLLABLE NO;Lo;0;L;;;;;N;;;;; 1297;ETHIOPIC SYLLABLE NWA;Lo;0;L;;;;;N;;;;; 1298;ETHIOPIC SYLLABLE NYA;Lo;0;L;;;;;N;;;;; 1299;ETHIOPIC SYLLABLE NYU;Lo;0;L;;;;;N;;;;; 129A;ETHIOPIC SYLLABLE NYI;Lo;0;L;;;;;N;;;;; 129B;ETHIOPIC SYLLABLE NYAA;Lo;0;L;;;;;N;;;;; 129C;ETHIOPIC SYLLABLE NYEE;Lo;0;L;;;;;N;;;;; 129D;ETHIOPIC SYLLABLE NYE;Lo;0;L;;;;;N;;;;; 129E;ETHIOPIC SYLLABLE NYO;Lo;0;L;;;;;N;;;;; 129F;ETHIOPIC SYLLABLE NYWA;Lo;0;L;;;;;N;;;;; 12A0;ETHIOPIC SYLLABLE GLOTTAL A;Lo;0;L;;;;;N;;;;; 12A1;ETHIOPIC SYLLABLE GLOTTAL U;Lo;0;L;;;;;N;;;;; 12A2;ETHIOPIC SYLLABLE GLOTTAL I;Lo;0;L;;;;;N;;;;; 12A3;ETHIOPIC SYLLABLE GLOTTAL AA;Lo;0;L;;;;;N;;;;; 12A4;ETHIOPIC SYLLABLE GLOTTAL EE;Lo;0;L;;;;;N;;;;; 12A5;ETHIOPIC SYLLABLE GLOTTAL E;Lo;0;L;;;;;N;;;;; 12A6;ETHIOPIC SYLLABLE GLOTTAL O;Lo;0;L;;;;;N;;;;; 12A7;ETHIOPIC SYLLABLE GLOTTAL WA;Lo;0;L;;;;;N;;;;; 12A8;ETHIOPIC SYLLABLE KA;Lo;0;L;;;;;N;;;;; 12A9;ETHIOPIC SYLLABLE KU;Lo;0;L;;;;;N;;;;; 12AA;ETHIOPIC SYLLABLE KI;Lo;0;L;;;;;N;;;;; 12AB;ETHIOPIC SYLLABLE KAA;Lo;0;L;;;;;N;;;;; 12AC;ETHIOPIC SYLLABLE KEE;Lo;0;L;;;;;N;;;;; 12AD;ETHIOPIC SYLLABLE KE;Lo;0;L;;;;;N;;;;; 12AE;ETHIOPIC SYLLABLE KO;Lo;0;L;;;;;N;;;;; 12B0;ETHIOPIC SYLLABLE KWA;Lo;0;L;;;;;N;;;;; 12B2;ETHIOPIC SYLLABLE KWI;Lo;0;L;;;;;N;;;;; 12B3;ETHIOPIC SYLLABLE KWAA;Lo;0;L;;;;;N;;;;; 12B4;ETHIOPIC SYLLABLE KWEE;Lo;0;L;;;;;N;;;;; 12B5;ETHIOPIC SYLLABLE KWE;Lo;0;L;;;;;N;;;;; 12B8;ETHIOPIC SYLLABLE KXA;Lo;0;L;;;;;N;;;;; 12B9;ETHIOPIC SYLLABLE KXU;Lo;0;L;;;;;N;;;;; 12BA;ETHIOPIC SYLLABLE KXI;Lo;0;L;;;;;N;;;;; 12BB;ETHIOPIC SYLLABLE KXAA;Lo;0;L;;;;;N;;;;; 12BC;ETHIOPIC SYLLABLE KXEE;Lo;0;L;;;;;N;;;;; 12BD;ETHIOPIC SYLLABLE KXE;Lo;0;L;;;;;N;;;;; 12BE;ETHIOPIC SYLLABLE KXO;Lo;0;L;;;;;N;;;;; 12C0;ETHIOPIC SYLLABLE KXWA;Lo;0;L;;;;;N;;;;; 12C2;ETHIOPIC SYLLABLE KXWI;Lo;0;L;;;;;N;;;;; 12C3;ETHIOPIC SYLLABLE KXWAA;Lo;0;L;;;;;N;;;;; 12C4;ETHIOPIC SYLLABLE KXWEE;Lo;0;L;;;;;N;;;;; 12C5;ETHIOPIC SYLLABLE KXWE;Lo;0;L;;;;;N;;;;; 12C8;ETHIOPIC SYLLABLE WA;Lo;0;L;;;;;N;;;;; 12C9;ETHIOPIC SYLLABLE WU;Lo;0;L;;;;;N;;;;; 12CA;ETHIOPIC SYLLABLE WI;Lo;0;L;;;;;N;;;;; 12CB;ETHIOPIC SYLLABLE WAA;Lo;0;L;;;;;N;;;;; 12CC;ETHIOPIC SYLLABLE WEE;Lo;0;L;;;;;N;;;;; 12CD;ETHIOPIC SYLLABLE WE;Lo;0;L;;;;;N;;;;; 12CE;ETHIOPIC SYLLABLE WO;Lo;0;L;;;;;N;;;;; 12D0;ETHIOPIC SYLLABLE PHARYNGEAL A;Lo;0;L;;;;;N;;;;; 12D1;ETHIOPIC SYLLABLE PHARYNGEAL U;Lo;0;L;;;;;N;;;;; 12D2;ETHIOPIC SYLLABLE PHARYNGEAL I;Lo;0;L;;;;;N;;;;; 12D3;ETHIOPIC SYLLABLE PHARYNGEAL AA;Lo;0;L;;;;;N;;;;; 12D4;ETHIOPIC SYLLABLE PHARYNGEAL EE;Lo;0;L;;;;;N;;;;; 12D5;ETHIOPIC SYLLABLE PHARYNGEAL E;Lo;0;L;;;;;N;;;;; 12D6;ETHIOPIC SYLLABLE PHARYNGEAL O;Lo;0;L;;;;;N;;;;; 12D8;ETHIOPIC SYLLABLE ZA;Lo;0;L;;;;;N;;;;; 12D9;ETHIOPIC SYLLABLE ZU;Lo;0;L;;;;;N;;;;; 12DA;ETHIOPIC SYLLABLE ZI;Lo;0;L;;;;;N;;;;; 12DB;ETHIOPIC SYLLABLE ZAA;Lo;0;L;;;;;N;;;;; 12DC;ETHIOPIC SYLLABLE ZEE;Lo;0;L;;;;;N;;;;; 12DD;ETHIOPIC SYLLABLE ZE;Lo;0;L;;;;;N;;;;; 12DE;ETHIOPIC SYLLABLE ZO;Lo;0;L;;;;;N;;;;; 12DF;ETHIOPIC SYLLABLE ZWA;Lo;0;L;;;;;N;;;;; 12E0;ETHIOPIC SYLLABLE ZHA;Lo;0;L;;;;;N;;;;; 12E1;ETHIOPIC SYLLABLE ZHU;Lo;0;L;;;;;N;;;;; 12E2;ETHIOPIC SYLLABLE ZHI;Lo;0;L;;;;;N;;;;; 12E3;ETHIOPIC SYLLABLE ZHAA;Lo;0;L;;;;;N;;;;; 12E4;ETHIOPIC SYLLABLE ZHEE;Lo;0;L;;;;;N;;;;; 12E5;ETHIOPIC SYLLABLE ZHE;Lo;0;L;;;;;N;;;;; 12E6;ETHIOPIC SYLLABLE ZHO;Lo;0;L;;;;;N;;;;; 12E7;ETHIOPIC SYLLABLE ZHWA;Lo;0;L;;;;;N;;;;; 12E8;ETHIOPIC SYLLABLE YA;Lo;0;L;;;;;N;;;;; 12E9;ETHIOPIC SYLLABLE YU;Lo;0;L;;;;;N;;;;; 12EA;ETHIOPIC SYLLABLE YI;Lo;0;L;;;;;N;;;;; 12EB;ETHIOPIC SYLLABLE YAA;Lo;0;L;;;;;N;;;;; 12EC;ETHIOPIC SYLLABLE YEE;Lo;0;L;;;;;N;;;;; 12ED;ETHIOPIC SYLLABLE YE;Lo;0;L;;;;;N;;;;; 12EE;ETHIOPIC SYLLABLE YO;Lo;0;L;;;;;N;;;;; 12F0;ETHIOPIC SYLLABLE DA;Lo;0;L;;;;;N;;;;; 12F1;ETHIOPIC SYLLABLE DU;Lo;0;L;;;;;N;;;;; 12F2;ETHIOPIC SYLLABLE DI;Lo;0;L;;;;;N;;;;; 12F3;ETHIOPIC SYLLABLE DAA;Lo;0;L;;;;;N;;;;; 12F4;ETHIOPIC SYLLABLE DEE;Lo;0;L;;;;;N;;;;; 12F5;ETHIOPIC SYLLABLE DE;Lo;0;L;;;;;N;;;;; 12F6;ETHIOPIC SYLLABLE DO;Lo;0;L;;;;;N;;;;; 12F7;ETHIOPIC SYLLABLE DWA;Lo;0;L;;;;;N;;;;; 12F8;ETHIOPIC SYLLABLE DDA;Lo;0;L;;;;;N;;;;; 12F9;ETHIOPIC SYLLABLE DDU;Lo;0;L;;;;;N;;;;; 12FA;ETHIOPIC SYLLABLE DDI;Lo;0;L;;;;;N;;;;; 12FB;ETHIOPIC SYLLABLE DDAA;Lo;0;L;;;;;N;;;;; 12FC;ETHIOPIC SYLLABLE DDEE;Lo;0;L;;;;;N;;;;; 12FD;ETHIOPIC SYLLABLE DDE;Lo;0;L;;;;;N;;;;; 12FE;ETHIOPIC SYLLABLE DDO;Lo;0;L;;;;;N;;;;; 12FF;ETHIOPIC SYLLABLE DDWA;Lo;0;L;;;;;N;;;;; 1300;ETHIOPIC SYLLABLE JA;Lo;0;L;;;;;N;;;;; 1301;ETHIOPIC SYLLABLE JU;Lo;0;L;;;;;N;;;;; 1302;ETHIOPIC SYLLABLE JI;Lo;0;L;;;;;N;;;;; 1303;ETHIOPIC SYLLABLE JAA;Lo;0;L;;;;;N;;;;; 1304;ETHIOPIC SYLLABLE JEE;Lo;0;L;;;;;N;;;;; 1305;ETHIOPIC SYLLABLE JE;Lo;0;L;;;;;N;;;;; 1306;ETHIOPIC SYLLABLE JO;Lo;0;L;;;;;N;;;;; 1307;ETHIOPIC SYLLABLE JWA;Lo;0;L;;;;;N;;;;; 1308;ETHIOPIC SYLLABLE GA;Lo;0;L;;;;;N;;;;; 1309;ETHIOPIC SYLLABLE GU;Lo;0;L;;;;;N;;;;; 130A;ETHIOPIC SYLLABLE GI;Lo;0;L;;;;;N;;;;; 130B;ETHIOPIC SYLLABLE GAA;Lo;0;L;;;;;N;;;;; 130C;ETHIOPIC SYLLABLE GEE;Lo;0;L;;;;;N;;;;; 130D;ETHIOPIC SYLLABLE GE;Lo;0;L;;;;;N;;;;; 130E;ETHIOPIC SYLLABLE GO;Lo;0;L;;;;;N;;;;; 1310;ETHIOPIC SYLLABLE GWA;Lo;0;L;;;;;N;;;;; 1312;ETHIOPIC SYLLABLE GWI;Lo;0;L;;;;;N;;;;; 1313;ETHIOPIC SYLLABLE GWAA;Lo;0;L;;;;;N;;;;; 1314;ETHIOPIC SYLLABLE GWEE;Lo;0;L;;;;;N;;;;; 1315;ETHIOPIC SYLLABLE GWE;Lo;0;L;;;;;N;;;;; 1318;ETHIOPIC SYLLABLE GGA;Lo;0;L;;;;;N;;;;; 1319;ETHIOPIC SYLLABLE GGU;Lo;0;L;;;;;N;;;;; 131A;ETHIOPIC SYLLABLE GGI;Lo;0;L;;;;;N;;;;; 131B;ETHIOPIC SYLLABLE GGAA;Lo;0;L;;;;;N;;;;; 131C;ETHIOPIC SYLLABLE GGEE;Lo;0;L;;;;;N;;;;; 131D;ETHIOPIC SYLLABLE GGE;Lo;0;L;;;;;N;;;;; 131E;ETHIOPIC SYLLABLE GGO;Lo;0;L;;;;;N;;;;; 1320;ETHIOPIC SYLLABLE THA;Lo;0;L;;;;;N;;;;; 1321;ETHIOPIC SYLLABLE THU;Lo;0;L;;;;;N;;;;; 1322;ETHIOPIC SYLLABLE THI;Lo;0;L;;;;;N;;;;; 1323;ETHIOPIC SYLLABLE THAA;Lo;0;L;;;;;N;;;;; 1324;ETHIOPIC SYLLABLE THEE;Lo;0;L;;;;;N;;;;; 1325;ETHIOPIC SYLLABLE THE;Lo;0;L;;;;;N;;;;; 1326;ETHIOPIC SYLLABLE THO;Lo;0;L;;;;;N;;;;; 1327;ETHIOPIC SYLLABLE THWA;Lo;0;L;;;;;N;;;;; 1328;ETHIOPIC SYLLABLE CHA;Lo;0;L;;;;;N;;;;; 1329;ETHIOPIC SYLLABLE CHU;Lo;0;L;;;;;N;;;;; 132A;ETHIOPIC SYLLABLE CHI;Lo;0;L;;;;;N;;;;; 132B;ETHIOPIC SYLLABLE CHAA;Lo;0;L;;;;;N;;;;; 132C;ETHIOPIC SYLLABLE CHEE;Lo;0;L;;;;;N;;;;; 132D;ETHIOPIC SYLLABLE CHE;Lo;0;L;;;;;N;;;;; 132E;ETHIOPIC SYLLABLE CHO;Lo;0;L;;;;;N;;;;; 132F;ETHIOPIC SYLLABLE CHWA;Lo;0;L;;;;;N;;;;; 1330;ETHIOPIC SYLLABLE PHA;Lo;0;L;;;;;N;;;;; 1331;ETHIOPIC SYLLABLE PHU;Lo;0;L;;;;;N;;;;; 1332;ETHIOPIC SYLLABLE PHI;Lo;0;L;;;;;N;;;;; 1333;ETHIOPIC SYLLABLE PHAA;Lo;0;L;;;;;N;;;;; 1334;ETHIOPIC SYLLABLE PHEE;Lo;0;L;;;;;N;;;;; 1335;ETHIOPIC SYLLABLE PHE;Lo;0;L;;;;;N;;;;; 1336;ETHIOPIC SYLLABLE PHO;Lo;0;L;;;;;N;;;;; 1337;ETHIOPIC SYLLABLE PHWA;Lo;0;L;;;;;N;;;;; 1338;ETHIOPIC SYLLABLE TSA;Lo;0;L;;;;;N;;;;; 1339;ETHIOPIC SYLLABLE TSU;Lo;0;L;;;;;N;;;;; 133A;ETHIOPIC SYLLABLE TSI;Lo;0;L;;;;;N;;;;; 133B;ETHIOPIC SYLLABLE TSAA;Lo;0;L;;;;;N;;;;; 133C;ETHIOPIC SYLLABLE TSEE;Lo;0;L;;;;;N;;;;; 133D;ETHIOPIC SYLLABLE TSE;Lo;0;L;;;;;N;;;;; 133E;ETHIOPIC SYLLABLE TSO;Lo;0;L;;;;;N;;;;; 133F;ETHIOPIC SYLLABLE TSWA;Lo;0;L;;;;;N;;;;; 1340;ETHIOPIC SYLLABLE TZA;Lo;0;L;;;;;N;;;;; 1341;ETHIOPIC SYLLABLE TZU;Lo;0;L;;;;;N;;;;; 1342;ETHIOPIC SYLLABLE TZI;Lo;0;L;;;;;N;;;;; 1343;ETHIOPIC SYLLABLE TZAA;Lo;0;L;;;;;N;;;;; 1344;ETHIOPIC SYLLABLE TZEE;Lo;0;L;;;;;N;;;;; 1345;ETHIOPIC SYLLABLE TZE;Lo;0;L;;;;;N;;;;; 1346;ETHIOPIC SYLLABLE TZO;Lo;0;L;;;;;N;;;;; 1348;ETHIOPIC SYLLABLE FA;Lo;0;L;;;;;N;;;;; 1349;ETHIOPIC SYLLABLE FU;Lo;0;L;;;;;N;;;;; 134A;ETHIOPIC SYLLABLE FI;Lo;0;L;;;;;N;;;;; 134B;ETHIOPIC SYLLABLE FAA;Lo;0;L;;;;;N;;;;; 134C;ETHIOPIC SYLLABLE FEE;Lo;0;L;;;;;N;;;;; 134D;ETHIOPIC SYLLABLE FE;Lo;0;L;;;;;N;;;;; 134E;ETHIOPIC SYLLABLE FO;Lo;0;L;;;;;N;;;;; 134F;ETHIOPIC SYLLABLE FWA;Lo;0;L;;;;;N;;;;; 1350;ETHIOPIC SYLLABLE PA;Lo;0;L;;;;;N;;;;; 1351;ETHIOPIC SYLLABLE PU;Lo;0;L;;;;;N;;;;; 1352;ETHIOPIC SYLLABLE PI;Lo;0;L;;;;;N;;;;; 1353;ETHIOPIC SYLLABLE PAA;Lo;0;L;;;;;N;;;;; 1354;ETHIOPIC SYLLABLE PEE;Lo;0;L;;;;;N;;;;; 1355;ETHIOPIC SYLLABLE PE;Lo;0;L;;;;;N;;;;; 1356;ETHIOPIC SYLLABLE PO;Lo;0;L;;;;;N;;;;; 1357;ETHIOPIC SYLLABLE PWA;Lo;0;L;;;;;N;;;;; 1358;ETHIOPIC SYLLABLE RYA;Lo;0;L;;;;;N;;;;; 1359;ETHIOPIC SYLLABLE MYA;Lo;0;L;;;;;N;;;;; 135A;ETHIOPIC SYLLABLE FYA;Lo;0;L;;;;;N;;;;; 1361;ETHIOPIC WORDSPACE;Po;0;L;;;;;N;;;;; 1362;ETHIOPIC FULL STOP;Po;0;L;;;;;N;;;;; 1363;ETHIOPIC COMMA;Po;0;L;;;;;N;;;;; 1364;ETHIOPIC SEMICOLON;Po;0;L;;;;;N;;;;; 1365;ETHIOPIC COLON;Po;0;L;;;;;N;;;;; 1366;ETHIOPIC PREFACE COLON;Po;0;L;;;;;N;;;;; 1367;ETHIOPIC QUESTION MARK;Po;0;L;;;;;N;;;;; 1368;ETHIOPIC PARAGRAPH SEPARATOR;Po;0;L;;;;;N;;;;; 1369;ETHIOPIC DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 136A;ETHIOPIC DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 136B;ETHIOPIC DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 136C;ETHIOPIC DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 136D;ETHIOPIC DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 136E;ETHIOPIC DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 136F;ETHIOPIC DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 1370;ETHIOPIC DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 1371;ETHIOPIC DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 1372;ETHIOPIC NUMBER TEN;No;0;L;;;;10;N;;;;; 1373;ETHIOPIC NUMBER TWENTY;No;0;L;;;;20;N;;;;; 1374;ETHIOPIC NUMBER THIRTY;No;0;L;;;;30;N;;;;; 1375;ETHIOPIC NUMBER FORTY;No;0;L;;;;40;N;;;;; 1376;ETHIOPIC NUMBER FIFTY;No;0;L;;;;50;N;;;;; 1377;ETHIOPIC NUMBER SIXTY;No;0;L;;;;60;N;;;;; 1378;ETHIOPIC NUMBER SEVENTY;No;0;L;;;;70;N;;;;; 1379;ETHIOPIC NUMBER EIGHTY;No;0;L;;;;80;N;;;;; 137A;ETHIOPIC NUMBER NINETY;No;0;L;;;;90;N;;;;; 137B;ETHIOPIC NUMBER HUNDRED;No;0;L;;;;100;N;;;;; 137C;ETHIOPIC NUMBER TEN THOUSAND;No;0;L;;;;10000;N;;;;; 13A0;CHEROKEE LETTER A;Lo;0;L;;;;;N;;;;; 13A1;CHEROKEE LETTER E;Lo;0;L;;;;;N;;;;; 13A2;CHEROKEE LETTER I;Lo;0;L;;;;;N;;;;; 13A3;CHEROKEE LETTER O;Lo;0;L;;;;;N;;;;; 13A4;CHEROKEE LETTER U;Lo;0;L;;;;;N;;;;; 13A5;CHEROKEE LETTER V;Lo;0;L;;;;;N;;;;; 13A6;CHEROKEE LETTER GA;Lo;0;L;;;;;N;;;;; 13A7;CHEROKEE LETTER KA;Lo;0;L;;;;;N;;;;; 13A8;CHEROKEE LETTER GE;Lo;0;L;;;;;N;;;;; 13A9;CHEROKEE LETTER GI;Lo;0;L;;;;;N;;;;; 13AA;CHEROKEE LETTER GO;Lo;0;L;;;;;N;;;;; 13AB;CHEROKEE LETTER GU;Lo;0;L;;;;;N;;;;; 13AC;CHEROKEE LETTER GV;Lo;0;L;;;;;N;;;;; 13AD;CHEROKEE LETTER HA;Lo;0;L;;;;;N;;;;; 13AE;CHEROKEE LETTER HE;Lo;0;L;;;;;N;;;;; 13AF;CHEROKEE LETTER HI;Lo;0;L;;;;;N;;;;; 13B0;CHEROKEE LETTER HO;Lo;0;L;;;;;N;;;;; 13B1;CHEROKEE LETTER HU;Lo;0;L;;;;;N;;;;; 13B2;CHEROKEE LETTER HV;Lo;0;L;;;;;N;;;;; 13B3;CHEROKEE LETTER LA;Lo;0;L;;;;;N;;;;; 13B4;CHEROKEE LETTER LE;Lo;0;L;;;;;N;;;;; 13B5;CHEROKEE LETTER LI;Lo;0;L;;;;;N;;;;; 13B6;CHEROKEE LETTER LO;Lo;0;L;;;;;N;;;;; 13B7;CHEROKEE LETTER LU;Lo;0;L;;;;;N;;;;; 13B8;CHEROKEE LETTER LV;Lo;0;L;;;;;N;;;;; 13B9;CHEROKEE LETTER MA;Lo;0;L;;;;;N;;;;; 13BA;CHEROKEE LETTER ME;Lo;0;L;;;;;N;;;;; 13BB;CHEROKEE LETTER MI;Lo;0;L;;;;;N;;;;; 13BC;CHEROKEE LETTER MO;Lo;0;L;;;;;N;;;;; 13BD;CHEROKEE LETTER MU;Lo;0;L;;;;;N;;;;; 13BE;CHEROKEE LETTER NA;Lo;0;L;;;;;N;;;;; 13BF;CHEROKEE LETTER HNA;Lo;0;L;;;;;N;;;;; 13C0;CHEROKEE LETTER NAH;Lo;0;L;;;;;N;;;;; 13C1;CHEROKEE LETTER NE;Lo;0;L;;;;;N;;;;; 13C2;CHEROKEE LETTER NI;Lo;0;L;;;;;N;;;;; 13C3;CHEROKEE LETTER NO;Lo;0;L;;;;;N;;;;; 13C4;CHEROKEE LETTER NU;Lo;0;L;;;;;N;;;;; 13C5;CHEROKEE LETTER NV;Lo;0;L;;;;;N;;;;; 13C6;CHEROKEE LETTER QUA;Lo;0;L;;;;;N;;;;; 13C7;CHEROKEE LETTER QUE;Lo;0;L;;;;;N;;;;; 13C8;CHEROKEE LETTER QUI;Lo;0;L;;;;;N;;;;; 13C9;CHEROKEE LETTER QUO;Lo;0;L;;;;;N;;;;; 13CA;CHEROKEE LETTER QUU;Lo;0;L;;;;;N;;;;; 13CB;CHEROKEE LETTER QUV;Lo;0;L;;;;;N;;;;; 13CC;CHEROKEE LETTER SA;Lo;0;L;;;;;N;;;;; 13CD;CHEROKEE LETTER S;Lo;0;L;;;;;N;;;;; 13CE;CHEROKEE LETTER SE;Lo;0;L;;;;;N;;;;; 13CF;CHEROKEE LETTER SI;Lo;0;L;;;;;N;;;;; 13D0;CHEROKEE LETTER SO;Lo;0;L;;;;;N;;;;; 13D1;CHEROKEE LETTER SU;Lo;0;L;;;;;N;;;;; 13D2;CHEROKEE LETTER SV;Lo;0;L;;;;;N;;;;; 13D3;CHEROKEE LETTER DA;Lo;0;L;;;;;N;;;;; 13D4;CHEROKEE LETTER TA;Lo;0;L;;;;;N;;;;; 13D5;CHEROKEE LETTER DE;Lo;0;L;;;;;N;;;;; 13D6;CHEROKEE LETTER TE;Lo;0;L;;;;;N;;;;; 13D7;CHEROKEE LETTER DI;Lo;0;L;;;;;N;;;;; 13D8;CHEROKEE LETTER TI;Lo;0;L;;;;;N;;;;; 13D9;CHEROKEE LETTER DO;Lo;0;L;;;;;N;;;;; 13DA;CHEROKEE LETTER DU;Lo;0;L;;;;;N;;;;; 13DB;CHEROKEE LETTER DV;Lo;0;L;;;;;N;;;;; 13DC;CHEROKEE LETTER DLA;Lo;0;L;;;;;N;;;;; 13DD;CHEROKEE LETTER TLA;Lo;0;L;;;;;N;;;;; 13DE;CHEROKEE LETTER TLE;Lo;0;L;;;;;N;;;;; 13DF;CHEROKEE LETTER TLI;Lo;0;L;;;;;N;;;;; 13E0;CHEROKEE LETTER TLO;Lo;0;L;;;;;N;;;;; 13E1;CHEROKEE LETTER TLU;Lo;0;L;;;;;N;;;;; 13E2;CHEROKEE LETTER TLV;Lo;0;L;;;;;N;;;;; 13E3;CHEROKEE LETTER TSA;Lo;0;L;;;;;N;;;;; 13E4;CHEROKEE LETTER TSE;Lo;0;L;;;;;N;;;;; 13E5;CHEROKEE LETTER TSI;Lo;0;L;;;;;N;;;;; 13E6;CHEROKEE LETTER TSO;Lo;0;L;;;;;N;;;;; 13E7;CHEROKEE LETTER TSU;Lo;0;L;;;;;N;;;;; 13E8;CHEROKEE LETTER TSV;Lo;0;L;;;;;N;;;;; 13E9;CHEROKEE LETTER WA;Lo;0;L;;;;;N;;;;; 13EA;CHEROKEE LETTER WE;Lo;0;L;;;;;N;;;;; 13EB;CHEROKEE LETTER WI;Lo;0;L;;;;;N;;;;; 13EC;CHEROKEE LETTER WO;Lo;0;L;;;;;N;;;;; 13ED;CHEROKEE LETTER WU;Lo;0;L;;;;;N;;;;; 13EE;CHEROKEE LETTER WV;Lo;0;L;;;;;N;;;;; 13EF;CHEROKEE LETTER YA;Lo;0;L;;;;;N;;;;; 13F0;CHEROKEE LETTER YE;Lo;0;L;;;;;N;;;;; 13F1;CHEROKEE LETTER YI;Lo;0;L;;;;;N;;;;; 13F2;CHEROKEE LETTER YO;Lo;0;L;;;;;N;;;;; 13F3;CHEROKEE LETTER YU;Lo;0;L;;;;;N;;;;; 13F4;CHEROKEE LETTER YV;Lo;0;L;;;;;N;;;;; 1401;CANADIAN SYLLABICS E;Lo;0;L;;;;;N;;;;; 1402;CANADIAN SYLLABICS AAI;Lo;0;L;;;;;N;;;;; 1403;CANADIAN SYLLABICS I;Lo;0;L;;;;;N;;;;; 1404;CANADIAN SYLLABICS II;Lo;0;L;;;;;N;;;;; 1405;CANADIAN SYLLABICS O;Lo;0;L;;;;;N;;;;; 1406;CANADIAN SYLLABICS OO;Lo;0;L;;;;;N;;;;; 1407;CANADIAN SYLLABICS Y-CREE OO;Lo;0;L;;;;;N;;;;; 1408;CANADIAN SYLLABICS CARRIER EE;Lo;0;L;;;;;N;;;;; 1409;CANADIAN SYLLABICS CARRIER I;Lo;0;L;;;;;N;;;;; 140A;CANADIAN SYLLABICS A;Lo;0;L;;;;;N;;;;; 140B;CANADIAN SYLLABICS AA;Lo;0;L;;;;;N;;;;; 140C;CANADIAN SYLLABICS WE;Lo;0;L;;;;;N;;;;; 140D;CANADIAN SYLLABICS WEST-CREE WE;Lo;0;L;;;;;N;;;;; 140E;CANADIAN SYLLABICS WI;Lo;0;L;;;;;N;;;;; 140F;CANADIAN SYLLABICS WEST-CREE WI;Lo;0;L;;;;;N;;;;; 1410;CANADIAN SYLLABICS WII;Lo;0;L;;;;;N;;;;; 1411;CANADIAN SYLLABICS WEST-CREE WII;Lo;0;L;;;;;N;;;;; 1412;CANADIAN SYLLABICS WO;Lo;0;L;;;;;N;;;;; 1413;CANADIAN SYLLABICS WEST-CREE WO;Lo;0;L;;;;;N;;;;; 1414;CANADIAN SYLLABICS WOO;Lo;0;L;;;;;N;;;;; 1415;CANADIAN SYLLABICS WEST-CREE WOO;Lo;0;L;;;;;N;;;;; 1416;CANADIAN SYLLABICS NASKAPI WOO;Lo;0;L;;;;;N;;;;; 1417;CANADIAN SYLLABICS WA;Lo;0;L;;;;;N;;;;; 1418;CANADIAN SYLLABICS WEST-CREE WA;Lo;0;L;;;;;N;;;;; 1419;CANADIAN SYLLABICS WAA;Lo;0;L;;;;;N;;;;; 141A;CANADIAN SYLLABICS WEST-CREE WAA;Lo;0;L;;;;;N;;;;; 141B;CANADIAN SYLLABICS NASKAPI WAA;Lo;0;L;;;;;N;;;;; 141C;CANADIAN SYLLABICS AI;Lo;0;L;;;;;N;;;;; 141D;CANADIAN SYLLABICS Y-CREE W;Lo;0;L;;;;;N;;;;; 141E;CANADIAN SYLLABICS GLOTTAL STOP;Lo;0;L;;;;;N;;;;; 141F;CANADIAN SYLLABICS FINAL ACUTE;Lo;0;L;;;;;N;;;;; 1420;CANADIAN SYLLABICS FINAL GRAVE;Lo;0;L;;;;;N;;;;; 1421;CANADIAN SYLLABICS FINAL BOTTOM HALF RING;Lo;0;L;;;;;N;;;;; 1422;CANADIAN SYLLABICS FINAL TOP HALF RING;Lo;0;L;;;;;N;;;;; 1423;CANADIAN SYLLABICS FINAL RIGHT HALF RING;Lo;0;L;;;;;N;;;;; 1424;CANADIAN SYLLABICS FINAL RING;Lo;0;L;;;;;N;;;;; 1425;CANADIAN SYLLABICS FINAL DOUBLE ACUTE;Lo;0;L;;;;;N;;;;; 1426;CANADIAN SYLLABICS FINAL DOUBLE SHORT VERTICAL STROKES;Lo;0;L;;;;;N;;;;; 1427;CANADIAN SYLLABICS FINAL MIDDLE DOT;Lo;0;L;;;;;N;;;;; 1428;CANADIAN SYLLABICS FINAL SHORT HORIZONTAL STROKE;Lo;0;L;;;;;N;;;;; 1429;CANADIAN SYLLABICS FINAL PLUS;Lo;0;L;;;;;N;;;;; 142A;CANADIAN SYLLABICS FINAL DOWN TACK;Lo;0;L;;;;;N;;;;; 142B;CANADIAN SYLLABICS EN;Lo;0;L;;;;;N;;;;; 142C;CANADIAN SYLLABICS IN;Lo;0;L;;;;;N;;;;; 142D;CANADIAN SYLLABICS ON;Lo;0;L;;;;;N;;;;; 142E;CANADIAN SYLLABICS AN;Lo;0;L;;;;;N;;;;; 142F;CANADIAN SYLLABICS PE;Lo;0;L;;;;;N;;;;; 1430;CANADIAN SYLLABICS PAAI;Lo;0;L;;;;;N;;;;; 1431;CANADIAN SYLLABICS PI;Lo;0;L;;;;;N;;;;; 1432;CANADIAN SYLLABICS PII;Lo;0;L;;;;;N;;;;; 1433;CANADIAN SYLLABICS PO;Lo;0;L;;;;;N;;;;; 1434;CANADIAN SYLLABICS POO;Lo;0;L;;;;;N;;;;; 1435;CANADIAN SYLLABICS Y-CREE POO;Lo;0;L;;;;;N;;;;; 1436;CANADIAN SYLLABICS CARRIER HEE;Lo;0;L;;;;;N;;;;; 1437;CANADIAN SYLLABICS CARRIER HI;Lo;0;L;;;;;N;;;;; 1438;CANADIAN SYLLABICS PA;Lo;0;L;;;;;N;;;;; 1439;CANADIAN SYLLABICS PAA;Lo;0;L;;;;;N;;;;; 143A;CANADIAN SYLLABICS PWE;Lo;0;L;;;;;N;;;;; 143B;CANADIAN SYLLABICS WEST-CREE PWE;Lo;0;L;;;;;N;;;;; 143C;CANADIAN SYLLABICS PWI;Lo;0;L;;;;;N;;;;; 143D;CANADIAN SYLLABICS WEST-CREE PWI;Lo;0;L;;;;;N;;;;; 143E;CANADIAN SYLLABICS PWII;Lo;0;L;;;;;N;;;;; 143F;CANADIAN SYLLABICS WEST-CREE PWII;Lo;0;L;;;;;N;;;;; 1440;CANADIAN SYLLABICS PWO;Lo;0;L;;;;;N;;;;; 1441;CANADIAN SYLLABICS WEST-CREE PWO;Lo;0;L;;;;;N;;;;; 1442;CANADIAN SYLLABICS PWOO;Lo;0;L;;;;;N;;;;; 1443;CANADIAN SYLLABICS WEST-CREE PWOO;Lo;0;L;;;;;N;;;;; 1444;CANADIAN SYLLABICS PWA;Lo;0;L;;;;;N;;;;; 1445;CANADIAN SYLLABICS WEST-CREE PWA;Lo;0;L;;;;;N;;;;; 1446;CANADIAN SYLLABICS PWAA;Lo;0;L;;;;;N;;;;; 1447;CANADIAN SYLLABICS WEST-CREE PWAA;Lo;0;L;;;;;N;;;;; 1448;CANADIAN SYLLABICS Y-CREE PWAA;Lo;0;L;;;;;N;;;;; 1449;CANADIAN SYLLABICS P;Lo;0;L;;;;;N;;;;; 144A;CANADIAN SYLLABICS WEST-CREE P;Lo;0;L;;;;;N;;;;; 144B;CANADIAN SYLLABICS CARRIER H;Lo;0;L;;;;;N;;;;; 144C;CANADIAN SYLLABICS TE;Lo;0;L;;;;;N;;;;; 144D;CANADIAN SYLLABICS TAAI;Lo;0;L;;;;;N;;;;; 144E;CANADIAN SYLLABICS TI;Lo;0;L;;;;;N;;;;; 144F;CANADIAN SYLLABICS TII;Lo;0;L;;;;;N;;;;; 1450;CANADIAN SYLLABICS TO;Lo;0;L;;;;;N;;;;; 1451;CANADIAN SYLLABICS TOO;Lo;0;L;;;;;N;;;;; 1452;CANADIAN SYLLABICS Y-CREE TOO;Lo;0;L;;;;;N;;;;; 1453;CANADIAN SYLLABICS CARRIER DEE;Lo;0;L;;;;;N;;;;; 1454;CANADIAN SYLLABICS CARRIER DI;Lo;0;L;;;;;N;;;;; 1455;CANADIAN SYLLABICS TA;Lo;0;L;;;;;N;;;;; 1456;CANADIAN SYLLABICS TAA;Lo;0;L;;;;;N;;;;; 1457;CANADIAN SYLLABICS TWE;Lo;0;L;;;;;N;;;;; 1458;CANADIAN SYLLABICS WEST-CREE TWE;Lo;0;L;;;;;N;;;;; 1459;CANADIAN SYLLABICS TWI;Lo;0;L;;;;;N;;;;; 145A;CANADIAN SYLLABICS WEST-CREE TWI;Lo;0;L;;;;;N;;;;; 145B;CANADIAN SYLLABICS TWII;Lo;0;L;;;;;N;;;;; 145C;CANADIAN SYLLABICS WEST-CREE TWII;Lo;0;L;;;;;N;;;;; 145D;CANADIAN SYLLABICS TWO;Lo;0;L;;;;;N;;;;; 145E;CANADIAN SYLLABICS WEST-CREE TWO;Lo;0;L;;;;;N;;;;; 145F;CANADIAN SYLLABICS TWOO;Lo;0;L;;;;;N;;;;; 1460;CANADIAN SYLLABICS WEST-CREE TWOO;Lo;0;L;;;;;N;;;;; 1461;CANADIAN SYLLABICS TWA;Lo;0;L;;;;;N;;;;; 1462;CANADIAN SYLLABICS WEST-CREE TWA;Lo;0;L;;;;;N;;;;; 1463;CANADIAN SYLLABICS TWAA;Lo;0;L;;;;;N;;;;; 1464;CANADIAN SYLLABICS WEST-CREE TWAA;Lo;0;L;;;;;N;;;;; 1465;CANADIAN SYLLABICS NASKAPI TWAA;Lo;0;L;;;;;N;;;;; 1466;CANADIAN SYLLABICS T;Lo;0;L;;;;;N;;;;; 1467;CANADIAN SYLLABICS TTE;Lo;0;L;;;;;N;;;;; 1468;CANADIAN SYLLABICS TTI;Lo;0;L;;;;;N;;;;; 1469;CANADIAN SYLLABICS TTO;Lo;0;L;;;;;N;;;;; 146A;CANADIAN SYLLABICS TTA;Lo;0;L;;;;;N;;;;; 146B;CANADIAN SYLLABICS KE;Lo;0;L;;;;;N;;;;; 146C;CANADIAN SYLLABICS KAAI;Lo;0;L;;;;;N;;;;; 146D;CANADIAN SYLLABICS KI;Lo;0;L;;;;;N;;;;; 146E;CANADIAN SYLLABICS KII;Lo;0;L;;;;;N;;;;; 146F;CANADIAN SYLLABICS KO;Lo;0;L;;;;;N;;;;; 1470;CANADIAN SYLLABICS KOO;Lo;0;L;;;;;N;;;;; 1471;CANADIAN SYLLABICS Y-CREE KOO;Lo;0;L;;;;;N;;;;; 1472;CANADIAN SYLLABICS KA;Lo;0;L;;;;;N;;;;; 1473;CANADIAN SYLLABICS KAA;Lo;0;L;;;;;N;;;;; 1474;CANADIAN SYLLABICS KWE;Lo;0;L;;;;;N;;;;; 1475;CANADIAN SYLLABICS WEST-CREE KWE;Lo;0;L;;;;;N;;;;; 1476;CANADIAN SYLLABICS KWI;Lo;0;L;;;;;N;;;;; 1477;CANADIAN SYLLABICS WEST-CREE KWI;Lo;0;L;;;;;N;;;;; 1478;CANADIAN SYLLABICS KWII;Lo;0;L;;;;;N;;;;; 1479;CANADIAN SYLLABICS WEST-CREE KWII;Lo;0;L;;;;;N;;;;; 147A;CANADIAN SYLLABICS KWO;Lo;0;L;;;;;N;;;;; 147B;CANADIAN SYLLABICS WEST-CREE KWO;Lo;0;L;;;;;N;;;;; 147C;CANADIAN SYLLABICS KWOO;Lo;0;L;;;;;N;;;;; 147D;CANADIAN SYLLABICS WEST-CREE KWOO;Lo;0;L;;;;;N;;;;; 147E;CANADIAN SYLLABICS KWA;Lo;0;L;;;;;N;;;;; 147F;CANADIAN SYLLABICS WEST-CREE KWA;Lo;0;L;;;;;N;;;;; 1480;CANADIAN SYLLABICS KWAA;Lo;0;L;;;;;N;;;;; 1481;CANADIAN SYLLABICS WEST-CREE KWAA;Lo;0;L;;;;;N;;;;; 1482;CANADIAN SYLLABICS NASKAPI KWAA;Lo;0;L;;;;;N;;;;; 1483;CANADIAN SYLLABICS K;Lo;0;L;;;;;N;;;;; 1484;CANADIAN SYLLABICS KW;Lo;0;L;;;;;N;;;;; 1485;CANADIAN SYLLABICS SOUTH-SLAVEY KEH;Lo;0;L;;;;;N;;;;; 1486;CANADIAN SYLLABICS SOUTH-SLAVEY KIH;Lo;0;L;;;;;N;;;;; 1487;CANADIAN SYLLABICS SOUTH-SLAVEY KOH;Lo;0;L;;;;;N;;;;; 1488;CANADIAN SYLLABICS SOUTH-SLAVEY KAH;Lo;0;L;;;;;N;;;;; 1489;CANADIAN SYLLABICS CE;Lo;0;L;;;;;N;;;;; 148A;CANADIAN SYLLABICS CAAI;Lo;0;L;;;;;N;;;;; 148B;CANADIAN SYLLABICS CI;Lo;0;L;;;;;N;;;;; 148C;CANADIAN SYLLABICS CII;Lo;0;L;;;;;N;;;;; 148D;CANADIAN SYLLABICS CO;Lo;0;L;;;;;N;;;;; 148E;CANADIAN SYLLABICS COO;Lo;0;L;;;;;N;;;;; 148F;CANADIAN SYLLABICS Y-CREE COO;Lo;0;L;;;;;N;;;;; 1490;CANADIAN SYLLABICS CA;Lo;0;L;;;;;N;;;;; 1491;CANADIAN SYLLABICS CAA;Lo;0;L;;;;;N;;;;; 1492;CANADIAN SYLLABICS CWE;Lo;0;L;;;;;N;;;;; 1493;CANADIAN SYLLABICS WEST-CREE CWE;Lo;0;L;;;;;N;;;;; 1494;CANADIAN SYLLABICS CWI;Lo;0;L;;;;;N;;;;; 1495;CANADIAN SYLLABICS WEST-CREE CWI;Lo;0;L;;;;;N;;;;; 1496;CANADIAN SYLLABICS CWII;Lo;0;L;;;;;N;;;;; 1497;CANADIAN SYLLABICS WEST-CREE CWII;Lo;0;L;;;;;N;;;;; 1498;CANADIAN SYLLABICS CWO;Lo;0;L;;;;;N;;;;; 1499;CANADIAN SYLLABICS WEST-CREE CWO;Lo;0;L;;;;;N;;;;; 149A;CANADIAN SYLLABICS CWOO;Lo;0;L;;;;;N;;;;; 149B;CANADIAN SYLLABICS WEST-CREE CWOO;Lo;0;L;;;;;N;;;;; 149C;CANADIAN SYLLABICS CWA;Lo;0;L;;;;;N;;;;; 149D;CANADIAN SYLLABICS WEST-CREE CWA;Lo;0;L;;;;;N;;;;; 149E;CANADIAN SYLLABICS CWAA;Lo;0;L;;;;;N;;;;; 149F;CANADIAN SYLLABICS WEST-CREE CWAA;Lo;0;L;;;;;N;;;;; 14A0;CANADIAN SYLLABICS NASKAPI CWAA;Lo;0;L;;;;;N;;;;; 14A1;CANADIAN SYLLABICS C;Lo;0;L;;;;;N;;;;; 14A2;CANADIAN SYLLABICS SAYISI TH;Lo;0;L;;;;;N;;;;; 14A3;CANADIAN SYLLABICS ME;Lo;0;L;;;;;N;;;;; 14A4;CANADIAN SYLLABICS MAAI;Lo;0;L;;;;;N;;;;; 14A5;CANADIAN SYLLABICS MI;Lo;0;L;;;;;N;;;;; 14A6;CANADIAN SYLLABICS MII;Lo;0;L;;;;;N;;;;; 14A7;CANADIAN SYLLABICS MO;Lo;0;L;;;;;N;;;;; 14A8;CANADIAN SYLLABICS MOO;Lo;0;L;;;;;N;;;;; 14A9;CANADIAN SYLLABICS Y-CREE MOO;Lo;0;L;;;;;N;;;;; 14AA;CANADIAN SYLLABICS MA;Lo;0;L;;;;;N;;;;; 14AB;CANADIAN SYLLABICS MAA;Lo;0;L;;;;;N;;;;; 14AC;CANADIAN SYLLABICS MWE;Lo;0;L;;;;;N;;;;; 14AD;CANADIAN SYLLABICS WEST-CREE MWE;Lo;0;L;;;;;N;;;;; 14AE;CANADIAN SYLLABICS MWI;Lo;0;L;;;;;N;;;;; 14AF;CANADIAN SYLLABICS WEST-CREE MWI;Lo;0;L;;;;;N;;;;; 14B0;CANADIAN SYLLABICS MWII;Lo;0;L;;;;;N;;;;; 14B1;CANADIAN SYLLABICS WEST-CREE MWII;Lo;0;L;;;;;N;;;;; 14B2;CANADIAN SYLLABICS MWO;Lo;0;L;;;;;N;;;;; 14B3;CANADIAN SYLLABICS WEST-CREE MWO;Lo;0;L;;;;;N;;;;; 14B4;CANADIAN SYLLABICS MWOO;Lo;0;L;;;;;N;;;;; 14B5;CANADIAN SYLLABICS WEST-CREE MWOO;Lo;0;L;;;;;N;;;;; 14B6;CANADIAN SYLLABICS MWA;Lo;0;L;;;;;N;;;;; 14B7;CANADIAN SYLLABICS WEST-CREE MWA;Lo;0;L;;;;;N;;;;; 14B8;CANADIAN SYLLABICS MWAA;Lo;0;L;;;;;N;;;;; 14B9;CANADIAN SYLLABICS WEST-CREE MWAA;Lo;0;L;;;;;N;;;;; 14BA;CANADIAN SYLLABICS NASKAPI MWAA;Lo;0;L;;;;;N;;;;; 14BB;CANADIAN SYLLABICS M;Lo;0;L;;;;;N;;;;; 14BC;CANADIAN SYLLABICS WEST-CREE M;Lo;0;L;;;;;N;;;;; 14BD;CANADIAN SYLLABICS MH;Lo;0;L;;;;;N;;;;; 14BE;CANADIAN SYLLABICS ATHAPASCAN M;Lo;0;L;;;;;N;;;;; 14BF;CANADIAN SYLLABICS SAYISI M;Lo;0;L;;;;;N;;;;; 14C0;CANADIAN SYLLABICS NE;Lo;0;L;;;;;N;;;;; 14C1;CANADIAN SYLLABICS NAAI;Lo;0;L;;;;;N;;;;; 14C2;CANADIAN SYLLABICS NI;Lo;0;L;;;;;N;;;;; 14C3;CANADIAN SYLLABICS NII;Lo;0;L;;;;;N;;;;; 14C4;CANADIAN SYLLABICS NO;Lo;0;L;;;;;N;;;;; 14C5;CANADIAN SYLLABICS NOO;Lo;0;L;;;;;N;;;;; 14C6;CANADIAN SYLLABICS Y-CREE NOO;Lo;0;L;;;;;N;;;;; 14C7;CANADIAN SYLLABICS NA;Lo;0;L;;;;;N;;;;; 14C8;CANADIAN SYLLABICS NAA;Lo;0;L;;;;;N;;;;; 14C9;CANADIAN SYLLABICS NWE;Lo;0;L;;;;;N;;;;; 14CA;CANADIAN SYLLABICS WEST-CREE NWE;Lo;0;L;;;;;N;;;;; 14CB;CANADIAN SYLLABICS NWA;Lo;0;L;;;;;N;;;;; 14CC;CANADIAN SYLLABICS WEST-CREE NWA;Lo;0;L;;;;;N;;;;; 14CD;CANADIAN SYLLABICS NWAA;Lo;0;L;;;;;N;;;;; 14CE;CANADIAN SYLLABICS WEST-CREE NWAA;Lo;0;L;;;;;N;;;;; 14CF;CANADIAN SYLLABICS NASKAPI NWAA;Lo;0;L;;;;;N;;;;; 14D0;CANADIAN SYLLABICS N;Lo;0;L;;;;;N;;;;; 14D1;CANADIAN SYLLABICS CARRIER NG;Lo;0;L;;;;;N;;;;; 14D2;CANADIAN SYLLABICS NH;Lo;0;L;;;;;N;;;;; 14D3;CANADIAN SYLLABICS LE;Lo;0;L;;;;;N;;;;; 14D4;CANADIAN SYLLABICS LAAI;Lo;0;L;;;;;N;;;;; 14D5;CANADIAN SYLLABICS LI;Lo;0;L;;;;;N;;;;; 14D6;CANADIAN SYLLABICS LII;Lo;0;L;;;;;N;;;;; 14D7;CANADIAN SYLLABICS LO;Lo;0;L;;;;;N;;;;; 14D8;CANADIAN SYLLABICS LOO;Lo;0;L;;;;;N;;;;; 14D9;CANADIAN SYLLABICS Y-CREE LOO;Lo;0;L;;;;;N;;;;; 14DA;CANADIAN SYLLABICS LA;Lo;0;L;;;;;N;;;;; 14DB;CANADIAN SYLLABICS LAA;Lo;0;L;;;;;N;;;;; 14DC;CANADIAN SYLLABICS LWE;Lo;0;L;;;;;N;;;;; 14DD;CANADIAN SYLLABICS WEST-CREE LWE;Lo;0;L;;;;;N;;;;; 14DE;CANADIAN SYLLABICS LWI;Lo;0;L;;;;;N;;;;; 14DF;CANADIAN SYLLABICS WEST-CREE LWI;Lo;0;L;;;;;N;;;;; 14E0;CANADIAN SYLLABICS LWII;Lo;0;L;;;;;N;;;;; 14E1;CANADIAN SYLLABICS WEST-CREE LWII;Lo;0;L;;;;;N;;;;; 14E2;CANADIAN SYLLABICS LWO;Lo;0;L;;;;;N;;;;; 14E3;CANADIAN SYLLABICS WEST-CREE LWO;Lo;0;L;;;;;N;;;;; 14E4;CANADIAN SYLLABICS LWOO;Lo;0;L;;;;;N;;;;; 14E5;CANADIAN SYLLABICS WEST-CREE LWOO;Lo;0;L;;;;;N;;;;; 14E6;CANADIAN SYLLABICS LWA;Lo;0;L;;;;;N;;;;; 14E7;CANADIAN SYLLABICS WEST-CREE LWA;Lo;0;L;;;;;N;;;;; 14E8;CANADIAN SYLLABICS LWAA;Lo;0;L;;;;;N;;;;; 14E9;CANADIAN SYLLABICS WEST-CREE LWAA;Lo;0;L;;;;;N;;;;; 14EA;CANADIAN SYLLABICS L;Lo;0;L;;;;;N;;;;; 14EB;CANADIAN SYLLABICS WEST-CREE L;Lo;0;L;;;;;N;;;;; 14EC;CANADIAN SYLLABICS MEDIAL L;Lo;0;L;;;;;N;;;;; 14ED;CANADIAN SYLLABICS SE;Lo;0;L;;;;;N;;;;; 14EE;CANADIAN SYLLABICS SAAI;Lo;0;L;;;;;N;;;;; 14EF;CANADIAN SYLLABICS SI;Lo;0;L;;;;;N;;;;; 14F0;CANADIAN SYLLABICS SII;Lo;0;L;;;;;N;;;;; 14F1;CANADIAN SYLLABICS SO;Lo;0;L;;;;;N;;;;; 14F2;CANADIAN SYLLABICS SOO;Lo;0;L;;;;;N;;;;; 14F3;CANADIAN SYLLABICS Y-CREE SOO;Lo;0;L;;;;;N;;;;; 14F4;CANADIAN SYLLABICS SA;Lo;0;L;;;;;N;;;;; 14F5;CANADIAN SYLLABICS SAA;Lo;0;L;;;;;N;;;;; 14F6;CANADIAN SYLLABICS SWE;Lo;0;L;;;;;N;;;;; 14F7;CANADIAN SYLLABICS WEST-CREE SWE;Lo;0;L;;;;;N;;;;; 14F8;CANADIAN SYLLABICS SWI;Lo;0;L;;;;;N;;;;; 14F9;CANADIAN SYLLABICS WEST-CREE SWI;Lo;0;L;;;;;N;;;;; 14FA;CANADIAN SYLLABICS SWII;Lo;0;L;;;;;N;;;;; 14FB;CANADIAN SYLLABICS WEST-CREE SWII;Lo;0;L;;;;;N;;;;; 14FC;CANADIAN SYLLABICS SWO;Lo;0;L;;;;;N;;;;; 14FD;CANADIAN SYLLABICS WEST-CREE SWO;Lo;0;L;;;;;N;;;;; 14FE;CANADIAN SYLLABICS SWOO;Lo;0;L;;;;;N;;;;; 14FF;CANADIAN SYLLABICS WEST-CREE SWOO;Lo;0;L;;;;;N;;;;; 1500;CANADIAN SYLLABICS SWA;Lo;0;L;;;;;N;;;;; 1501;CANADIAN SYLLABICS WEST-CREE SWA;Lo;0;L;;;;;N;;;;; 1502;CANADIAN SYLLABICS SWAA;Lo;0;L;;;;;N;;;;; 1503;CANADIAN SYLLABICS WEST-CREE SWAA;Lo;0;L;;;;;N;;;;; 1504;CANADIAN SYLLABICS NASKAPI SWAA;Lo;0;L;;;;;N;;;;; 1505;CANADIAN SYLLABICS S;Lo;0;L;;;;;N;;;;; 1506;CANADIAN SYLLABICS ATHAPASCAN S;Lo;0;L;;;;;N;;;;; 1507;CANADIAN SYLLABICS SW;Lo;0;L;;;;;N;;;;; 1508;CANADIAN SYLLABICS BLACKFOOT S;Lo;0;L;;;;;N;;;;; 1509;CANADIAN SYLLABICS MOOSE-CREE SK;Lo;0;L;;;;;N;;;;; 150A;CANADIAN SYLLABICS NASKAPI SKW;Lo;0;L;;;;;N;;;;; 150B;CANADIAN SYLLABICS NASKAPI S-W;Lo;0;L;;;;;N;;;;; 150C;CANADIAN SYLLABICS NASKAPI SPWA;Lo;0;L;;;;;N;;;;; 150D;CANADIAN SYLLABICS NASKAPI STWA;Lo;0;L;;;;;N;;;;; 150E;CANADIAN SYLLABICS NASKAPI SKWA;Lo;0;L;;;;;N;;;;; 150F;CANADIAN SYLLABICS NASKAPI SCWA;Lo;0;L;;;;;N;;;;; 1510;CANADIAN SYLLABICS SHE;Lo;0;L;;;;;N;;;;; 1511;CANADIAN SYLLABICS SHI;Lo;0;L;;;;;N;;;;; 1512;CANADIAN SYLLABICS SHII;Lo;0;L;;;;;N;;;;; 1513;CANADIAN SYLLABICS SHO;Lo;0;L;;;;;N;;;;; 1514;CANADIAN SYLLABICS SHOO;Lo;0;L;;;;;N;;;;; 1515;CANADIAN SYLLABICS SHA;Lo;0;L;;;;;N;;;;; 1516;CANADIAN SYLLABICS SHAA;Lo;0;L;;;;;N;;;;; 1517;CANADIAN SYLLABICS SHWE;Lo;0;L;;;;;N;;;;; 1518;CANADIAN SYLLABICS WEST-CREE SHWE;Lo;0;L;;;;;N;;;;; 1519;CANADIAN SYLLABICS SHWI;Lo;0;L;;;;;N;;;;; 151A;CANADIAN SYLLABICS WEST-CREE SHWI;Lo;0;L;;;;;N;;;;; 151B;CANADIAN SYLLABICS SHWII;Lo;0;L;;;;;N;;;;; 151C;CANADIAN SYLLABICS WEST-CREE SHWII;Lo;0;L;;;;;N;;;;; 151D;CANADIAN SYLLABICS SHWO;Lo;0;L;;;;;N;;;;; 151E;CANADIAN SYLLABICS WEST-CREE SHWO;Lo;0;L;;;;;N;;;;; 151F;CANADIAN SYLLABICS SHWOO;Lo;0;L;;;;;N;;;;; 1520;CANADIAN SYLLABICS WEST-CREE SHWOO;Lo;0;L;;;;;N;;;;; 1521;CANADIAN SYLLABICS SHWA;Lo;0;L;;;;;N;;;;; 1522;CANADIAN SYLLABICS WEST-CREE SHWA;Lo;0;L;;;;;N;;;;; 1523;CANADIAN SYLLABICS SHWAA;Lo;0;L;;;;;N;;;;; 1524;CANADIAN SYLLABICS WEST-CREE SHWAA;Lo;0;L;;;;;N;;;;; 1525;CANADIAN SYLLABICS SH;Lo;0;L;;;;;N;;;;; 1526;CANADIAN SYLLABICS YE;Lo;0;L;;;;;N;;;;; 1527;CANADIAN SYLLABICS YAAI;Lo;0;L;;;;;N;;;;; 1528;CANADIAN SYLLABICS YI;Lo;0;L;;;;;N;;;;; 1529;CANADIAN SYLLABICS YII;Lo;0;L;;;;;N;;;;; 152A;CANADIAN SYLLABICS YO;Lo;0;L;;;;;N;;;;; 152B;CANADIAN SYLLABICS YOO;Lo;0;L;;;;;N;;;;; 152C;CANADIAN SYLLABICS Y-CREE YOO;Lo;0;L;;;;;N;;;;; 152D;CANADIAN SYLLABICS YA;Lo;0;L;;;;;N;;;;; 152E;CANADIAN SYLLABICS YAA;Lo;0;L;;;;;N;;;;; 152F;CANADIAN SYLLABICS YWE;Lo;0;L;;;;;N;;;;; 1530;CANADIAN SYLLABICS WEST-CREE YWE;Lo;0;L;;;;;N;;;;; 1531;CANADIAN SYLLABICS YWI;Lo;0;L;;;;;N;;;;; 1532;CANADIAN SYLLABICS WEST-CREE YWI;Lo;0;L;;;;;N;;;;; 1533;CANADIAN SYLLABICS YWII;Lo;0;L;;;;;N;;;;; 1534;CANADIAN SYLLABICS WEST-CREE YWII;Lo;0;L;;;;;N;;;;; 1535;CANADIAN SYLLABICS YWO;Lo;0;L;;;;;N;;;;; 1536;CANADIAN SYLLABICS WEST-CREE YWO;Lo;0;L;;;;;N;;;;; 1537;CANADIAN SYLLABICS YWOO;Lo;0;L;;;;;N;;;;; 1538;CANADIAN SYLLABICS WEST-CREE YWOO;Lo;0;L;;;;;N;;;;; 1539;CANADIAN SYLLABICS YWA;Lo;0;L;;;;;N;;;;; 153A;CANADIAN SYLLABICS WEST-CREE YWA;Lo;0;L;;;;;N;;;;; 153B;CANADIAN SYLLABICS YWAA;Lo;0;L;;;;;N;;;;; 153C;CANADIAN SYLLABICS WEST-CREE YWAA;Lo;0;L;;;;;N;;;;; 153D;CANADIAN SYLLABICS NASKAPI YWAA;Lo;0;L;;;;;N;;;;; 153E;CANADIAN SYLLABICS Y;Lo;0;L;;;;;N;;;;; 153F;CANADIAN SYLLABICS BIBLE-CREE Y;Lo;0;L;;;;;N;;;;; 1540;CANADIAN SYLLABICS WEST-CREE Y;Lo;0;L;;;;;N;;;;; 1541;CANADIAN SYLLABICS SAYISI YI;Lo;0;L;;;;;N;;;;; 1542;CANADIAN SYLLABICS RE;Lo;0;L;;;;;N;;;;; 1543;CANADIAN SYLLABICS R-CREE RE;Lo;0;L;;;;;N;;;;; 1544;CANADIAN SYLLABICS WEST-CREE LE;Lo;0;L;;;;;N;;;;; 1545;CANADIAN SYLLABICS RAAI;Lo;0;L;;;;;N;;;;; 1546;CANADIAN SYLLABICS RI;Lo;0;L;;;;;N;;;;; 1547;CANADIAN SYLLABICS RII;Lo;0;L;;;;;N;;;;; 1548;CANADIAN SYLLABICS RO;Lo;0;L;;;;;N;;;;; 1549;CANADIAN SYLLABICS ROO;Lo;0;L;;;;;N;;;;; 154A;CANADIAN SYLLABICS WEST-CREE LO;Lo;0;L;;;;;N;;;;; 154B;CANADIAN SYLLABICS RA;Lo;0;L;;;;;N;;;;; 154C;CANADIAN SYLLABICS RAA;Lo;0;L;;;;;N;;;;; 154D;CANADIAN SYLLABICS WEST-CREE LA;Lo;0;L;;;;;N;;;;; 154E;CANADIAN SYLLABICS RWAA;Lo;0;L;;;;;N;;;;; 154F;CANADIAN SYLLABICS WEST-CREE RWAA;Lo;0;L;;;;;N;;;;; 1550;CANADIAN SYLLABICS R;Lo;0;L;;;;;N;;;;; 1551;CANADIAN SYLLABICS WEST-CREE R;Lo;0;L;;;;;N;;;;; 1552;CANADIAN SYLLABICS MEDIAL R;Lo;0;L;;;;;N;;;;; 1553;CANADIAN SYLLABICS FE;Lo;0;L;;;;;N;;;;; 1554;CANADIAN SYLLABICS FAAI;Lo;0;L;;;;;N;;;;; 1555;CANADIAN SYLLABICS FI;Lo;0;L;;;;;N;;;;; 1556;CANADIAN SYLLABICS FII;Lo;0;L;;;;;N;;;;; 1557;CANADIAN SYLLABICS FO;Lo;0;L;;;;;N;;;;; 1558;CANADIAN SYLLABICS FOO;Lo;0;L;;;;;N;;;;; 1559;CANADIAN SYLLABICS FA;Lo;0;L;;;;;N;;;;; 155A;CANADIAN SYLLABICS FAA;Lo;0;L;;;;;N;;;;; 155B;CANADIAN SYLLABICS FWAA;Lo;0;L;;;;;N;;;;; 155C;CANADIAN SYLLABICS WEST-CREE FWAA;Lo;0;L;;;;;N;;;;; 155D;CANADIAN SYLLABICS F;Lo;0;L;;;;;N;;;;; 155E;CANADIAN SYLLABICS THE;Lo;0;L;;;;;N;;;;; 155F;CANADIAN SYLLABICS N-CREE THE;Lo;0;L;;;;;N;;;;; 1560;CANADIAN SYLLABICS THI;Lo;0;L;;;;;N;;;;; 1561;CANADIAN SYLLABICS N-CREE THI;Lo;0;L;;;;;N;;;;; 1562;CANADIAN SYLLABICS THII;Lo;0;L;;;;;N;;;;; 1563;CANADIAN SYLLABICS N-CREE THII;Lo;0;L;;;;;N;;;;; 1564;CANADIAN SYLLABICS THO;Lo;0;L;;;;;N;;;;; 1565;CANADIAN SYLLABICS THOO;Lo;0;L;;;;;N;;;;; 1566;CANADIAN SYLLABICS THA;Lo;0;L;;;;;N;;;;; 1567;CANADIAN SYLLABICS THAA;Lo;0;L;;;;;N;;;;; 1568;CANADIAN SYLLABICS THWAA;Lo;0;L;;;;;N;;;;; 1569;CANADIAN SYLLABICS WEST-CREE THWAA;Lo;0;L;;;;;N;;;;; 156A;CANADIAN SYLLABICS TH;Lo;0;L;;;;;N;;;;; 156B;CANADIAN SYLLABICS TTHE;Lo;0;L;;;;;N;;;;; 156C;CANADIAN SYLLABICS TTHI;Lo;0;L;;;;;N;;;;; 156D;CANADIAN SYLLABICS TTHO;Lo;0;L;;;;;N;;;;; 156E;CANADIAN SYLLABICS TTHA;Lo;0;L;;;;;N;;;;; 156F;CANADIAN SYLLABICS TTH;Lo;0;L;;;;;N;;;;; 1570;CANADIAN SYLLABICS TYE;Lo;0;L;;;;;N;;;;; 1571;CANADIAN SYLLABICS TYI;Lo;0;L;;;;;N;;;;; 1572;CANADIAN SYLLABICS TYO;Lo;0;L;;;;;N;;;;; 1573;CANADIAN SYLLABICS TYA;Lo;0;L;;;;;N;;;;; 1574;CANADIAN SYLLABICS NUNAVIK HE;Lo;0;L;;;;;N;;;;; 1575;CANADIAN SYLLABICS NUNAVIK HI;Lo;0;L;;;;;N;;;;; 1576;CANADIAN SYLLABICS NUNAVIK HII;Lo;0;L;;;;;N;;;;; 1577;CANADIAN SYLLABICS NUNAVIK HO;Lo;0;L;;;;;N;;;;; 1578;CANADIAN SYLLABICS NUNAVIK HOO;Lo;0;L;;;;;N;;;;; 1579;CANADIAN SYLLABICS NUNAVIK HA;Lo;0;L;;;;;N;;;;; 157A;CANADIAN SYLLABICS NUNAVIK HAA;Lo;0;L;;;;;N;;;;; 157B;CANADIAN SYLLABICS NUNAVIK H;Lo;0;L;;;;;N;;;;; 157C;CANADIAN SYLLABICS NUNAVUT H;Lo;0;L;;;;;N;;;;; 157D;CANADIAN SYLLABICS HK;Lo;0;L;;;;;N;;;;; 157E;CANADIAN SYLLABICS QAAI;Lo;0;L;;;;;N;;;;; 157F;CANADIAN SYLLABICS QI;Lo;0;L;;;;;N;;;;; 1580;CANADIAN SYLLABICS QII;Lo;0;L;;;;;N;;;;; 1581;CANADIAN SYLLABICS QO;Lo;0;L;;;;;N;;;;; 1582;CANADIAN SYLLABICS QOO;Lo;0;L;;;;;N;;;;; 1583;CANADIAN SYLLABICS QA;Lo;0;L;;;;;N;;;;; 1584;CANADIAN SYLLABICS QAA;Lo;0;L;;;;;N;;;;; 1585;CANADIAN SYLLABICS Q;Lo;0;L;;;;;N;;;;; 1586;CANADIAN SYLLABICS TLHE;Lo;0;L;;;;;N;;;;; 1587;CANADIAN SYLLABICS TLHI;Lo;0;L;;;;;N;;;;; 1588;CANADIAN SYLLABICS TLHO;Lo;0;L;;;;;N;;;;; 1589;CANADIAN SYLLABICS TLHA;Lo;0;L;;;;;N;;;;; 158A;CANADIAN SYLLABICS WEST-CREE RE;Lo;0;L;;;;;N;;;;; 158B;CANADIAN SYLLABICS WEST-CREE RI;Lo;0;L;;;;;N;;;;; 158C;CANADIAN SYLLABICS WEST-CREE RO;Lo;0;L;;;;;N;;;;; 158D;CANADIAN SYLLABICS WEST-CREE RA;Lo;0;L;;;;;N;;;;; 158E;CANADIAN SYLLABICS NGAAI;Lo;0;L;;;;;N;;;;; 158F;CANADIAN SYLLABICS NGI;Lo;0;L;;;;;N;;;;; 1590;CANADIAN SYLLABICS NGII;Lo;0;L;;;;;N;;;;; 1591;CANADIAN SYLLABICS NGO;Lo;0;L;;;;;N;;;;; 1592;CANADIAN SYLLABICS NGOO;Lo;0;L;;;;;N;;;;; 1593;CANADIAN SYLLABICS NGA;Lo;0;L;;;;;N;;;;; 1594;CANADIAN SYLLABICS NGAA;Lo;0;L;;;;;N;;;;; 1595;CANADIAN SYLLABICS NG;Lo;0;L;;;;;N;;;;; 1596;CANADIAN SYLLABICS NNG;Lo;0;L;;;;;N;;;;; 1597;CANADIAN SYLLABICS SAYISI SHE;Lo;0;L;;;;;N;;;;; 1598;CANADIAN SYLLABICS SAYISI SHI;Lo;0;L;;;;;N;;;;; 1599;CANADIAN SYLLABICS SAYISI SHO;Lo;0;L;;;;;N;;;;; 159A;CANADIAN SYLLABICS SAYISI SHA;Lo;0;L;;;;;N;;;;; 159B;CANADIAN SYLLABICS WOODS-CREE THE;Lo;0;L;;;;;N;;;;; 159C;CANADIAN SYLLABICS WOODS-CREE THI;Lo;0;L;;;;;N;;;;; 159D;CANADIAN SYLLABICS WOODS-CREE THO;Lo;0;L;;;;;N;;;;; 159E;CANADIAN SYLLABICS WOODS-CREE THA;Lo;0;L;;;;;N;;;;; 159F;CANADIAN SYLLABICS WOODS-CREE TH;Lo;0;L;;;;;N;;;;; 15A0;CANADIAN SYLLABICS LHI;Lo;0;L;;;;;N;;;;; 15A1;CANADIAN SYLLABICS LHII;Lo;0;L;;;;;N;;;;; 15A2;CANADIAN SYLLABICS LHO;Lo;0;L;;;;;N;;;;; 15A3;CANADIAN SYLLABICS LHOO;Lo;0;L;;;;;N;;;;; 15A4;CANADIAN SYLLABICS LHA;Lo;0;L;;;;;N;;;;; 15A5;CANADIAN SYLLABICS LHAA;Lo;0;L;;;;;N;;;;; 15A6;CANADIAN SYLLABICS LH;Lo;0;L;;;;;N;;;;; 15A7;CANADIAN SYLLABICS TH-CREE THE;Lo;0;L;;;;;N;;;;; 15A8;CANADIAN SYLLABICS TH-CREE THI;Lo;0;L;;;;;N;;;;; 15A9;CANADIAN SYLLABICS TH-CREE THII;Lo;0;L;;;;;N;;;;; 15AA;CANADIAN SYLLABICS TH-CREE THO;Lo;0;L;;;;;N;;;;; 15AB;CANADIAN SYLLABICS TH-CREE THOO;Lo;0;L;;;;;N;;;;; 15AC;CANADIAN SYLLABICS TH-CREE THA;Lo;0;L;;;;;N;;;;; 15AD;CANADIAN SYLLABICS TH-CREE THAA;Lo;0;L;;;;;N;;;;; 15AE;CANADIAN SYLLABICS TH-CREE TH;Lo;0;L;;;;;N;;;;; 15AF;CANADIAN SYLLABICS AIVILIK B;Lo;0;L;;;;;N;;;;; 15B0;CANADIAN SYLLABICS BLACKFOOT E;Lo;0;L;;;;;N;;;;; 15B1;CANADIAN SYLLABICS BLACKFOOT I;Lo;0;L;;;;;N;;;;; 15B2;CANADIAN SYLLABICS BLACKFOOT O;Lo;0;L;;;;;N;;;;; 15B3;CANADIAN SYLLABICS BLACKFOOT A;Lo;0;L;;;;;N;;;;; 15B4;CANADIAN SYLLABICS BLACKFOOT WE;Lo;0;L;;;;;N;;;;; 15B5;CANADIAN SYLLABICS BLACKFOOT WI;Lo;0;L;;;;;N;;;;; 15B6;CANADIAN SYLLABICS BLACKFOOT WO;Lo;0;L;;;;;N;;;;; 15B7;CANADIAN SYLLABICS BLACKFOOT WA;Lo;0;L;;;;;N;;;;; 15B8;CANADIAN SYLLABICS BLACKFOOT NE;Lo;0;L;;;;;N;;;;; 15B9;CANADIAN SYLLABICS BLACKFOOT NI;Lo;0;L;;;;;N;;;;; 15BA;CANADIAN SYLLABICS BLACKFOOT NO;Lo;0;L;;;;;N;;;;; 15BB;CANADIAN SYLLABICS BLACKFOOT NA;Lo;0;L;;;;;N;;;;; 15BC;CANADIAN SYLLABICS BLACKFOOT KE;Lo;0;L;;;;;N;;;;; 15BD;CANADIAN SYLLABICS BLACKFOOT KI;Lo;0;L;;;;;N;;;;; 15BE;CANADIAN SYLLABICS BLACKFOOT KO;Lo;0;L;;;;;N;;;;; 15BF;CANADIAN SYLLABICS BLACKFOOT KA;Lo;0;L;;;;;N;;;;; 15C0;CANADIAN SYLLABICS SAYISI HE;Lo;0;L;;;;;N;;;;; 15C1;CANADIAN SYLLABICS SAYISI HI;Lo;0;L;;;;;N;;;;; 15C2;CANADIAN SYLLABICS SAYISI HO;Lo;0;L;;;;;N;;;;; 15C3;CANADIAN SYLLABICS SAYISI HA;Lo;0;L;;;;;N;;;;; 15C4;CANADIAN SYLLABICS CARRIER GHU;Lo;0;L;;;;;N;;;;; 15C5;CANADIAN SYLLABICS CARRIER GHO;Lo;0;L;;;;;N;;;;; 15C6;CANADIAN SYLLABICS CARRIER GHE;Lo;0;L;;;;;N;;;;; 15C7;CANADIAN SYLLABICS CARRIER GHEE;Lo;0;L;;;;;N;;;;; 15C8;CANADIAN SYLLABICS CARRIER GHI;Lo;0;L;;;;;N;;;;; 15C9;CANADIAN SYLLABICS CARRIER GHA;Lo;0;L;;;;;N;;;;; 15CA;CANADIAN SYLLABICS CARRIER RU;Lo;0;L;;;;;N;;;;; 15CB;CANADIAN SYLLABICS CARRIER RO;Lo;0;L;;;;;N;;;;; 15CC;CANADIAN SYLLABICS CARRIER RE;Lo;0;L;;;;;N;;;;; 15CD;CANADIAN SYLLABICS CARRIER REE;Lo;0;L;;;;;N;;;;; 15CE;CANADIAN SYLLABICS CARRIER RI;Lo;0;L;;;;;N;;;;; 15CF;CANADIAN SYLLABICS CARRIER RA;Lo;0;L;;;;;N;;;;; 15D0;CANADIAN SYLLABICS CARRIER WU;Lo;0;L;;;;;N;;;;; 15D1;CANADIAN SYLLABICS CARRIER WO;Lo;0;L;;;;;N;;;;; 15D2;CANADIAN SYLLABICS CARRIER WE;Lo;0;L;;;;;N;;;;; 15D3;CANADIAN SYLLABICS CARRIER WEE;Lo;0;L;;;;;N;;;;; 15D4;CANADIAN SYLLABICS CARRIER WI;Lo;0;L;;;;;N;;;;; 15D5;CANADIAN SYLLABICS CARRIER WA;Lo;0;L;;;;;N;;;;; 15D6;CANADIAN SYLLABICS CARRIER HWU;Lo;0;L;;;;;N;;;;; 15D7;CANADIAN SYLLABICS CARRIER HWO;Lo;0;L;;;;;N;;;;; 15D8;CANADIAN SYLLABICS CARRIER HWE;Lo;0;L;;;;;N;;;;; 15D9;CANADIAN SYLLABICS CARRIER HWEE;Lo;0;L;;;;;N;;;;; 15DA;CANADIAN SYLLABICS CARRIER HWI;Lo;0;L;;;;;N;;;;; 15DB;CANADIAN SYLLABICS CARRIER HWA;Lo;0;L;;;;;N;;;;; 15DC;CANADIAN SYLLABICS CARRIER THU;Lo;0;L;;;;;N;;;;; 15DD;CANADIAN SYLLABICS CARRIER THO;Lo;0;L;;;;;N;;;;; 15DE;CANADIAN SYLLABICS CARRIER THE;Lo;0;L;;;;;N;;;;; 15DF;CANADIAN SYLLABICS CARRIER THEE;Lo;0;L;;;;;N;;;;; 15E0;CANADIAN SYLLABICS CARRIER THI;Lo;0;L;;;;;N;;;;; 15E1;CANADIAN SYLLABICS CARRIER THA;Lo;0;L;;;;;N;;;;; 15E2;CANADIAN SYLLABICS CARRIER TTU;Lo;0;L;;;;;N;;;;; 15E3;CANADIAN SYLLABICS CARRIER TTO;Lo;0;L;;;;;N;;;;; 15E4;CANADIAN SYLLABICS CARRIER TTE;Lo;0;L;;;;;N;;;;; 15E5;CANADIAN SYLLABICS CARRIER TTEE;Lo;0;L;;;;;N;;;;; 15E6;CANADIAN SYLLABICS CARRIER TTI;Lo;0;L;;;;;N;;;;; 15E7;CANADIAN SYLLABICS CARRIER TTA;Lo;0;L;;;;;N;;;;; 15E8;CANADIAN SYLLABICS CARRIER PU;Lo;0;L;;;;;N;;;;; 15E9;CANADIAN SYLLABICS CARRIER PO;Lo;0;L;;;;;N;;;;; 15EA;CANADIAN SYLLABICS CARRIER PE;Lo;0;L;;;;;N;;;;; 15EB;CANADIAN SYLLABICS CARRIER PEE;Lo;0;L;;;;;N;;;;; 15EC;CANADIAN SYLLABICS CARRIER PI;Lo;0;L;;;;;N;;;;; 15ED;CANADIAN SYLLABICS CARRIER PA;Lo;0;L;;;;;N;;;;; 15EE;CANADIAN SYLLABICS CARRIER P;Lo;0;L;;;;;N;;;;; 15EF;CANADIAN SYLLABICS CARRIER GU;Lo;0;L;;;;;N;;;;; 15F0;CANADIAN SYLLABICS CARRIER GO;Lo;0;L;;;;;N;;;;; 15F1;CANADIAN SYLLABICS CARRIER GE;Lo;0;L;;;;;N;;;;; 15F2;CANADIAN SYLLABICS CARRIER GEE;Lo;0;L;;;;;N;;;;; 15F3;CANADIAN SYLLABICS CARRIER GI;Lo;0;L;;;;;N;;;;; 15F4;CANADIAN SYLLABICS CARRIER GA;Lo;0;L;;;;;N;;;;; 15F5;CANADIAN SYLLABICS CARRIER KHU;Lo;0;L;;;;;N;;;;; 15F6;CANADIAN SYLLABICS CARRIER KHO;Lo;0;L;;;;;N;;;;; 15F7;CANADIAN SYLLABICS CARRIER KHE;Lo;0;L;;;;;N;;;;; 15F8;CANADIAN SYLLABICS CARRIER KHEE;Lo;0;L;;;;;N;;;;; 15F9;CANADIAN SYLLABICS CARRIER KHI;Lo;0;L;;;;;N;;;;; 15FA;CANADIAN SYLLABICS CARRIER KHA;Lo;0;L;;;;;N;;;;; 15FB;CANADIAN SYLLABICS CARRIER KKU;Lo;0;L;;;;;N;;;;; 15FC;CANADIAN SYLLABICS CARRIER KKO;Lo;0;L;;;;;N;;;;; 15FD;CANADIAN SYLLABICS CARRIER KKE;Lo;0;L;;;;;N;;;;; 15FE;CANADIAN SYLLABICS CARRIER KKEE;Lo;0;L;;;;;N;;;;; 15FF;CANADIAN SYLLABICS CARRIER KKI;Lo;0;L;;;;;N;;;;; 1600;CANADIAN SYLLABICS CARRIER KKA;Lo;0;L;;;;;N;;;;; 1601;CANADIAN SYLLABICS CARRIER KK;Lo;0;L;;;;;N;;;;; 1602;CANADIAN SYLLABICS CARRIER NU;Lo;0;L;;;;;N;;;;; 1603;CANADIAN SYLLABICS CARRIER NO;Lo;0;L;;;;;N;;;;; 1604;CANADIAN SYLLABICS CARRIER NE;Lo;0;L;;;;;N;;;;; 1605;CANADIAN SYLLABICS CARRIER NEE;Lo;0;L;;;;;N;;;;; 1606;CANADIAN SYLLABICS CARRIER NI;Lo;0;L;;;;;N;;;;; 1607;CANADIAN SYLLABICS CARRIER NA;Lo;0;L;;;;;N;;;;; 1608;CANADIAN SYLLABICS CARRIER MU;Lo;0;L;;;;;N;;;;; 1609;CANADIAN SYLLABICS CARRIER MO;Lo;0;L;;;;;N;;;;; 160A;CANADIAN SYLLABICS CARRIER ME;Lo;0;L;;;;;N;;;;; 160B;CANADIAN SYLLABICS CARRIER MEE;Lo;0;L;;;;;N;;;;; 160C;CANADIAN SYLLABICS CARRIER MI;Lo;0;L;;;;;N;;;;; 160D;CANADIAN SYLLABICS CARRIER MA;Lo;0;L;;;;;N;;;;; 160E;CANADIAN SYLLABICS CARRIER YU;Lo;0;L;;;;;N;;;;; 160F;CANADIAN SYLLABICS CARRIER YO;Lo;0;L;;;;;N;;;;; 1610;CANADIAN SYLLABICS CARRIER YE;Lo;0;L;;;;;N;;;;; 1611;CANADIAN SYLLABICS CARRIER YEE;Lo;0;L;;;;;N;;;;; 1612;CANADIAN SYLLABICS CARRIER YI;Lo;0;L;;;;;N;;;;; 1613;CANADIAN SYLLABICS CARRIER YA;Lo;0;L;;;;;N;;;;; 1614;CANADIAN SYLLABICS CARRIER JU;Lo;0;L;;;;;N;;;;; 1615;CANADIAN SYLLABICS SAYISI JU;Lo;0;L;;;;;N;;;;; 1616;CANADIAN SYLLABICS CARRIER JO;Lo;0;L;;;;;N;;;;; 1617;CANADIAN SYLLABICS CARRIER JE;Lo;0;L;;;;;N;;;;; 1618;CANADIAN SYLLABICS CARRIER JEE;Lo;0;L;;;;;N;;;;; 1619;CANADIAN SYLLABICS CARRIER JI;Lo;0;L;;;;;N;;;;; 161A;CANADIAN SYLLABICS SAYISI JI;Lo;0;L;;;;;N;;;;; 161B;CANADIAN SYLLABICS CARRIER JA;Lo;0;L;;;;;N;;;;; 161C;CANADIAN SYLLABICS CARRIER JJU;Lo;0;L;;;;;N;;;;; 161D;CANADIAN SYLLABICS CARRIER JJO;Lo;0;L;;;;;N;;;;; 161E;CANADIAN SYLLABICS CARRIER JJE;Lo;0;L;;;;;N;;;;; 161F;CANADIAN SYLLABICS CARRIER JJEE;Lo;0;L;;;;;N;;;;; 1620;CANADIAN SYLLABICS CARRIER JJI;Lo;0;L;;;;;N;;;;; 1621;CANADIAN SYLLABICS CARRIER JJA;Lo;0;L;;;;;N;;;;; 1622;CANADIAN SYLLABICS CARRIER LU;Lo;0;L;;;;;N;;;;; 1623;CANADIAN SYLLABICS CARRIER LO;Lo;0;L;;;;;N;;;;; 1624;CANADIAN SYLLABICS CARRIER LE;Lo;0;L;;;;;N;;;;; 1625;CANADIAN SYLLABICS CARRIER LEE;Lo;0;L;;;;;N;;;;; 1626;CANADIAN SYLLABICS CARRIER LI;Lo;0;L;;;;;N;;;;; 1627;CANADIAN SYLLABICS CARRIER LA;Lo;0;L;;;;;N;;;;; 1628;CANADIAN SYLLABICS CARRIER DLU;Lo;0;L;;;;;N;;;;; 1629;CANADIAN SYLLABICS CARRIER DLO;Lo;0;L;;;;;N;;;;; 162A;CANADIAN SYLLABICS CARRIER DLE;Lo;0;L;;;;;N;;;;; 162B;CANADIAN SYLLABICS CARRIER DLEE;Lo;0;L;;;;;N;;;;; 162C;CANADIAN SYLLABICS CARRIER DLI;Lo;0;L;;;;;N;;;;; 162D;CANADIAN SYLLABICS CARRIER DLA;Lo;0;L;;;;;N;;;;; 162E;CANADIAN SYLLABICS CARRIER LHU;Lo;0;L;;;;;N;;;;; 162F;CANADIAN SYLLABICS CARRIER LHO;Lo;0;L;;;;;N;;;;; 1630;CANADIAN SYLLABICS CARRIER LHE;Lo;0;L;;;;;N;;;;; 1631;CANADIAN SYLLABICS CARRIER LHEE;Lo;0;L;;;;;N;;;;; 1632;CANADIAN SYLLABICS CARRIER LHI;Lo;0;L;;;;;N;;;;; 1633;CANADIAN SYLLABICS CARRIER LHA;Lo;0;L;;;;;N;;;;; 1634;CANADIAN SYLLABICS CARRIER TLHU;Lo;0;L;;;;;N;;;;; 1635;CANADIAN SYLLABICS CARRIER TLHO;Lo;0;L;;;;;N;;;;; 1636;CANADIAN SYLLABICS CARRIER TLHE;Lo;0;L;;;;;N;;;;; 1637;CANADIAN SYLLABICS CARRIER TLHEE;Lo;0;L;;;;;N;;;;; 1638;CANADIAN SYLLABICS CARRIER TLHI;Lo;0;L;;;;;N;;;;; 1639;CANADIAN SYLLABICS CARRIER TLHA;Lo;0;L;;;;;N;;;;; 163A;CANADIAN SYLLABICS CARRIER TLU;Lo;0;L;;;;;N;;;;; 163B;CANADIAN SYLLABICS CARRIER TLO;Lo;0;L;;;;;N;;;;; 163C;CANADIAN SYLLABICS CARRIER TLE;Lo;0;L;;;;;N;;;;; 163D;CANADIAN SYLLABICS CARRIER TLEE;Lo;0;L;;;;;N;;;;; 163E;CANADIAN SYLLABICS CARRIER TLI;Lo;0;L;;;;;N;;;;; 163F;CANADIAN SYLLABICS CARRIER TLA;Lo;0;L;;;;;N;;;;; 1640;CANADIAN SYLLABICS CARRIER ZU;Lo;0;L;;;;;N;;;;; 1641;CANADIAN SYLLABICS CARRIER ZO;Lo;0;L;;;;;N;;;;; 1642;CANADIAN SYLLABICS CARRIER ZE;Lo;0;L;;;;;N;;;;; 1643;CANADIAN SYLLABICS CARRIER ZEE;Lo;0;L;;;;;N;;;;; 1644;CANADIAN SYLLABICS CARRIER ZI;Lo;0;L;;;;;N;;;;; 1645;CANADIAN SYLLABICS CARRIER ZA;Lo;0;L;;;;;N;;;;; 1646;CANADIAN SYLLABICS CARRIER Z;Lo;0;L;;;;;N;;;;; 1647;CANADIAN SYLLABICS CARRIER INITIAL Z;Lo;0;L;;;;;N;;;;; 1648;CANADIAN SYLLABICS CARRIER DZU;Lo;0;L;;;;;N;;;;; 1649;CANADIAN SYLLABICS CARRIER DZO;Lo;0;L;;;;;N;;;;; 164A;CANADIAN SYLLABICS CARRIER DZE;Lo;0;L;;;;;N;;;;; 164B;CANADIAN SYLLABICS CARRIER DZEE;Lo;0;L;;;;;N;;;;; 164C;CANADIAN SYLLABICS CARRIER DZI;Lo;0;L;;;;;N;;;;; 164D;CANADIAN SYLLABICS CARRIER DZA;Lo;0;L;;;;;N;;;;; 164E;CANADIAN SYLLABICS CARRIER SU;Lo;0;L;;;;;N;;;;; 164F;CANADIAN SYLLABICS CARRIER SO;Lo;0;L;;;;;N;;;;; 1650;CANADIAN SYLLABICS CARRIER SE;Lo;0;L;;;;;N;;;;; 1651;CANADIAN SYLLABICS CARRIER SEE;Lo;0;L;;;;;N;;;;; 1652;CANADIAN SYLLABICS CARRIER SI;Lo;0;L;;;;;N;;;;; 1653;CANADIAN SYLLABICS CARRIER SA;Lo;0;L;;;;;N;;;;; 1654;CANADIAN SYLLABICS CARRIER SHU;Lo;0;L;;;;;N;;;;; 1655;CANADIAN SYLLABICS CARRIER SHO;Lo;0;L;;;;;N;;;;; 1656;CANADIAN SYLLABICS CARRIER SHE;Lo;0;L;;;;;N;;;;; 1657;CANADIAN SYLLABICS CARRIER SHEE;Lo;0;L;;;;;N;;;;; 1658;CANADIAN SYLLABICS CARRIER SHI;Lo;0;L;;;;;N;;;;; 1659;CANADIAN SYLLABICS CARRIER SHA;Lo;0;L;;;;;N;;;;; 165A;CANADIAN SYLLABICS CARRIER SH;Lo;0;L;;;;;N;;;;; 165B;CANADIAN SYLLABICS CARRIER TSU;Lo;0;L;;;;;N;;;;; 165C;CANADIAN SYLLABICS CARRIER TSO;Lo;0;L;;;;;N;;;;; 165D;CANADIAN SYLLABICS CARRIER TSE;Lo;0;L;;;;;N;;;;; 165E;CANADIAN SYLLABICS CARRIER TSEE;Lo;0;L;;;;;N;;;;; 165F;CANADIAN SYLLABICS CARRIER TSI;Lo;0;L;;;;;N;;;;; 1660;CANADIAN SYLLABICS CARRIER TSA;Lo;0;L;;;;;N;;;;; 1661;CANADIAN SYLLABICS CARRIER CHU;Lo;0;L;;;;;N;;;;; 1662;CANADIAN SYLLABICS CARRIER CHO;Lo;0;L;;;;;N;;;;; 1663;CANADIAN SYLLABICS CARRIER CHE;Lo;0;L;;;;;N;;;;; 1664;CANADIAN SYLLABICS CARRIER CHEE;Lo;0;L;;;;;N;;;;; 1665;CANADIAN SYLLABICS CARRIER CHI;Lo;0;L;;;;;N;;;;; 1666;CANADIAN SYLLABICS CARRIER CHA;Lo;0;L;;;;;N;;;;; 1667;CANADIAN SYLLABICS CARRIER TTSU;Lo;0;L;;;;;N;;;;; 1668;CANADIAN SYLLABICS CARRIER TTSO;Lo;0;L;;;;;N;;;;; 1669;CANADIAN SYLLABICS CARRIER TTSE;Lo;0;L;;;;;N;;;;; 166A;CANADIAN SYLLABICS CARRIER TTSEE;Lo;0;L;;;;;N;;;;; 166B;CANADIAN SYLLABICS CARRIER TTSI;Lo;0;L;;;;;N;;;;; 166C;CANADIAN SYLLABICS CARRIER TTSA;Lo;0;L;;;;;N;;;;; 166D;CANADIAN SYLLABICS CHI SIGN;Po;0;L;;;;;N;;;;; 166E;CANADIAN SYLLABICS FULL STOP;Po;0;L;;;;;N;;;;; 166F;CANADIAN SYLLABICS QAI;Lo;0;L;;;;;N;;;;; 1670;CANADIAN SYLLABICS NGAI;Lo;0;L;;;;;N;;;;; 1671;CANADIAN SYLLABICS NNGI;Lo;0;L;;;;;N;;;;; 1672;CANADIAN SYLLABICS NNGII;Lo;0;L;;;;;N;;;;; 1673;CANADIAN SYLLABICS NNGO;Lo;0;L;;;;;N;;;;; 1674;CANADIAN SYLLABICS NNGOO;Lo;0;L;;;;;N;;;;; 1675;CANADIAN SYLLABICS NNGA;Lo;0;L;;;;;N;;;;; 1676;CANADIAN SYLLABICS NNGAA;Lo;0;L;;;;;N;;;;; 1680;OGHAM SPACE MARK;Zs;0;WS;;;;;N;;;;; 1681;OGHAM LETTER BEITH;Lo;0;L;;;;;N;;;;; 1682;OGHAM LETTER LUIS;Lo;0;L;;;;;N;;;;; 1683;OGHAM LETTER FEARN;Lo;0;L;;;;;N;;;;; 1684;OGHAM LETTER SAIL;Lo;0;L;;;;;N;;;;; 1685;OGHAM LETTER NION;Lo;0;L;;;;;N;;;;; 1686;OGHAM LETTER UATH;Lo;0;L;;;;;N;;;;; 1687;OGHAM LETTER DAIR;Lo;0;L;;;;;N;;;;; 1688;OGHAM LETTER TINNE;Lo;0;L;;;;;N;;;;; 1689;OGHAM LETTER COLL;Lo;0;L;;;;;N;;;;; 168A;OGHAM LETTER CEIRT;Lo;0;L;;;;;N;;;;; 168B;OGHAM LETTER MUIN;Lo;0;L;;;;;N;;;;; 168C;OGHAM LETTER GORT;Lo;0;L;;;;;N;;;;; 168D;OGHAM LETTER NGEADAL;Lo;0;L;;;;;N;;;;; 168E;OGHAM LETTER STRAIF;Lo;0;L;;;;;N;;;;; 168F;OGHAM LETTER RUIS;Lo;0;L;;;;;N;;;;; 1690;OGHAM LETTER AILM;Lo;0;L;;;;;N;;;;; 1691;OGHAM LETTER ONN;Lo;0;L;;;;;N;;;;; 1692;OGHAM LETTER UR;Lo;0;L;;;;;N;;;;; 1693;OGHAM LETTER EADHADH;Lo;0;L;;;;;N;;;;; 1694;OGHAM LETTER IODHADH;Lo;0;L;;;;;N;;;;; 1695;OGHAM LETTER EABHADH;Lo;0;L;;;;;N;;;;; 1696;OGHAM LETTER OR;Lo;0;L;;;;;N;;;;; 1697;OGHAM LETTER UILLEANN;Lo;0;L;;;;;N;;;;; 1698;OGHAM LETTER IFIN;Lo;0;L;;;;;N;;;;; 1699;OGHAM LETTER EAMHANCHOLL;Lo;0;L;;;;;N;;;;; 169A;OGHAM LETTER PEITH;Lo;0;L;;;;;N;;;;; 169B;OGHAM FEATHER MARK;Ps;0;ON;;;;;N;;;;; 169C;OGHAM REVERSED FEATHER MARK;Pe;0;ON;;;;;N;;;;; 16A0;RUNIC LETTER FEHU FEOH FE F;Lo;0;L;;;;;N;;;;; 16A1;RUNIC LETTER V;Lo;0;L;;;;;N;;;;; 16A2;RUNIC LETTER URUZ UR U;Lo;0;L;;;;;N;;;;; 16A3;RUNIC LETTER YR;Lo;0;L;;;;;N;;;;; 16A4;RUNIC LETTER Y;Lo;0;L;;;;;N;;;;; 16A5;RUNIC LETTER W;Lo;0;L;;;;;N;;;;; 16A6;RUNIC LETTER THURISAZ THURS THORN;Lo;0;L;;;;;N;;;;; 16A7;RUNIC LETTER ETH;Lo;0;L;;;;;N;;;;; 16A8;RUNIC LETTER ANSUZ A;Lo;0;L;;;;;N;;;;; 16A9;RUNIC LETTER OS O;Lo;0;L;;;;;N;;;;; 16AA;RUNIC LETTER AC A;Lo;0;L;;;;;N;;;;; 16AB;RUNIC LETTER AESC;Lo;0;L;;;;;N;;;;; 16AC;RUNIC LETTER LONG-BRANCH-OSS O;Lo;0;L;;;;;N;;;;; 16AD;RUNIC LETTER SHORT-TWIG-OSS O;Lo;0;L;;;;;N;;;;; 16AE;RUNIC LETTER O;Lo;0;L;;;;;N;;;;; 16AF;RUNIC LETTER OE;Lo;0;L;;;;;N;;;;; 16B0;RUNIC LETTER ON;Lo;0;L;;;;;N;;;;; 16B1;RUNIC LETTER RAIDO RAD REID R;Lo;0;L;;;;;N;;;;; 16B2;RUNIC LETTER KAUNA;Lo;0;L;;;;;N;;;;; 16B3;RUNIC LETTER CEN;Lo;0;L;;;;;N;;;;; 16B4;RUNIC LETTER KAUN K;Lo;0;L;;;;;N;;;;; 16B5;RUNIC LETTER G;Lo;0;L;;;;;N;;;;; 16B6;RUNIC LETTER ENG;Lo;0;L;;;;;N;;;;; 16B7;RUNIC LETTER GEBO GYFU G;Lo;0;L;;;;;N;;;;; 16B8;RUNIC LETTER GAR;Lo;0;L;;;;;N;;;;; 16B9;RUNIC LETTER WUNJO WYNN W;Lo;0;L;;;;;N;;;;; 16BA;RUNIC LETTER HAGLAZ H;Lo;0;L;;;;;N;;;;; 16BB;RUNIC LETTER HAEGL H;Lo;0;L;;;;;N;;;;; 16BC;RUNIC LETTER LONG-BRANCH-HAGALL H;Lo;0;L;;;;;N;;;;; 16BD;RUNIC LETTER SHORT-TWIG-HAGALL H;Lo;0;L;;;;;N;;;;; 16BE;RUNIC LETTER NAUDIZ NYD NAUD N;Lo;0;L;;;;;N;;;;; 16BF;RUNIC LETTER SHORT-TWIG-NAUD N;Lo;0;L;;;;;N;;;;; 16C0;RUNIC LETTER DOTTED-N;Lo;0;L;;;;;N;;;;; 16C1;RUNIC LETTER ISAZ IS ISS I;Lo;0;L;;;;;N;;;;; 16C2;RUNIC LETTER E;Lo;0;L;;;;;N;;;;; 16C3;RUNIC LETTER JERAN J;Lo;0;L;;;;;N;;;;; 16C4;RUNIC LETTER GER;Lo;0;L;;;;;N;;;;; 16C5;RUNIC LETTER LONG-BRANCH-AR AE;Lo;0;L;;;;;N;;;;; 16C6;RUNIC LETTER SHORT-TWIG-AR A;Lo;0;L;;;;;N;;;;; 16C7;RUNIC LETTER IWAZ EOH;Lo;0;L;;;;;N;;;;; 16C8;RUNIC LETTER PERTHO PEORTH P;Lo;0;L;;;;;N;;;;; 16C9;RUNIC LETTER ALGIZ EOLHX;Lo;0;L;;;;;N;;;;; 16CA;RUNIC LETTER SOWILO S;Lo;0;L;;;;;N;;;;; 16CB;RUNIC LETTER SIGEL LONG-BRANCH-SOL S;Lo;0;L;;;;;N;;;;; 16CC;RUNIC LETTER SHORT-TWIG-SOL S;Lo;0;L;;;;;N;;;;; 16CD;RUNIC LETTER C;Lo;0;L;;;;;N;;;;; 16CE;RUNIC LETTER Z;Lo;0;L;;;;;N;;;;; 16CF;RUNIC LETTER TIWAZ TIR TYR T;Lo;0;L;;;;;N;;;;; 16D0;RUNIC LETTER SHORT-TWIG-TYR T;Lo;0;L;;;;;N;;;;; 16D1;RUNIC LETTER D;Lo;0;L;;;;;N;;;;; 16D2;RUNIC LETTER BERKANAN BEORC BJARKAN B;Lo;0;L;;;;;N;;;;; 16D3;RUNIC LETTER SHORT-TWIG-BJARKAN B;Lo;0;L;;;;;N;;;;; 16D4;RUNIC LETTER DOTTED-P;Lo;0;L;;;;;N;;;;; 16D5;RUNIC LETTER OPEN-P;Lo;0;L;;;;;N;;;;; 16D6;RUNIC LETTER EHWAZ EH E;Lo;0;L;;;;;N;;;;; 16D7;RUNIC LETTER MANNAZ MAN M;Lo;0;L;;;;;N;;;;; 16D8;RUNIC LETTER LONG-BRANCH-MADR M;Lo;0;L;;;;;N;;;;; 16D9;RUNIC LETTER SHORT-TWIG-MADR M;Lo;0;L;;;;;N;;;;; 16DA;RUNIC LETTER LAUKAZ LAGU LOGR L;Lo;0;L;;;;;N;;;;; 16DB;RUNIC LETTER DOTTED-L;Lo;0;L;;;;;N;;;;; 16DC;RUNIC LETTER INGWAZ;Lo;0;L;;;;;N;;;;; 16DD;RUNIC LETTER ING;Lo;0;L;;;;;N;;;;; 16DE;RUNIC LETTER DAGAZ DAEG D;Lo;0;L;;;;;N;;;;; 16DF;RUNIC LETTER OTHALAN ETHEL O;Lo;0;L;;;;;N;;;;; 16E0;RUNIC LETTER EAR;Lo;0;L;;;;;N;;;;; 16E1;RUNIC LETTER IOR;Lo;0;L;;;;;N;;;;; 16E2;RUNIC LETTER CWEORTH;Lo;0;L;;;;;N;;;;; 16E3;RUNIC LETTER CALC;Lo;0;L;;;;;N;;;;; 16E4;RUNIC LETTER CEALC;Lo;0;L;;;;;N;;;;; 16E5;RUNIC LETTER STAN;Lo;0;L;;;;;N;;;;; 16E6;RUNIC LETTER LONG-BRANCH-YR;Lo;0;L;;;;;N;;;;; 16E7;RUNIC LETTER SHORT-TWIG-YR;Lo;0;L;;;;;N;;;;; 16E8;RUNIC LETTER ICELANDIC-YR;Lo;0;L;;;;;N;;;;; 16E9;RUNIC LETTER Q;Lo;0;L;;;;;N;;;;; 16EA;RUNIC LETTER X;Lo;0;L;;;;;N;;;;; 16EB;RUNIC SINGLE PUNCTUATION;Po;0;L;;;;;N;;;;; 16EC;RUNIC MULTIPLE PUNCTUATION;Po;0;L;;;;;N;;;;; 16ED;RUNIC CROSS PUNCTUATION;Po;0;L;;;;;N;;;;; 16EE;RUNIC ARLAUG SYMBOL;No;0;L;;;;17;N;;golden number 17;;; 16EF;RUNIC TVIMADUR SYMBOL;No;0;L;;;;18;N;;golden number 18;;; 16F0;RUNIC BELGTHOR SYMBOL;No;0;L;;;;19;N;;golden number 19;;; 1780;KHMER LETTER KA;Lo;0;L;;;;;N;;;;; 1781;KHMER LETTER KHA;Lo;0;L;;;;;N;;;;; 1782;KHMER LETTER KO;Lo;0;L;;;;;N;;;;; 1783;KHMER LETTER KHO;Lo;0;L;;;;;N;;;;; 1784;KHMER LETTER NGO;Lo;0;L;;;;;N;;;;; 1785;KHMER LETTER CA;Lo;0;L;;;;;N;;;;; 1786;KHMER LETTER CHA;Lo;0;L;;;;;N;;;;; 1787;KHMER LETTER CO;Lo;0;L;;;;;N;;;;; 1788;KHMER LETTER CHO;Lo;0;L;;;;;N;;;;; 1789;KHMER LETTER NYO;Lo;0;L;;;;;N;;;;; 178A;KHMER LETTER DA;Lo;0;L;;;;;N;;;;; 178B;KHMER LETTER TTHA;Lo;0;L;;;;;N;;;;; 178C;KHMER LETTER DO;Lo;0;L;;;;;N;;;;; 178D;KHMER LETTER TTHO;Lo;0;L;;;;;N;;;;; 178E;KHMER LETTER NNO;Lo;0;L;;;;;N;;;;; 178F;KHMER LETTER TA;Lo;0;L;;;;;N;;;;; 1790;KHMER LETTER THA;Lo;0;L;;;;;N;;;;; 1791;KHMER LETTER TO;Lo;0;L;;;;;N;;;;; 1792;KHMER LETTER THO;Lo;0;L;;;;;N;;;;; 1793;KHMER LETTER NO;Lo;0;L;;;;;N;;;;; 1794;KHMER LETTER BA;Lo;0;L;;;;;N;;;;; 1795;KHMER LETTER PHA;Lo;0;L;;;;;N;;;;; 1796;KHMER LETTER PO;Lo;0;L;;;;;N;;;;; 1797;KHMER LETTER PHO;Lo;0;L;;;;;N;;;;; 1798;KHMER LETTER MO;Lo;0;L;;;;;N;;;;; 1799;KHMER LETTER YO;Lo;0;L;;;;;N;;;;; 179A;KHMER LETTER RO;Lo;0;L;;;;;N;;;;; 179B;KHMER LETTER LO;Lo;0;L;;;;;N;;;;; 179C;KHMER LETTER VO;Lo;0;L;;;;;N;;;;; 179D;KHMER LETTER SHA;Lo;0;L;;;;;N;;;;; 179E;KHMER LETTER SSO;Lo;0;L;;;;;N;;;;; 179F;KHMER LETTER SA;Lo;0;L;;;;;N;;;;; 17A0;KHMER LETTER HA;Lo;0;L;;;;;N;;;;; 17A1;KHMER LETTER LA;Lo;0;L;;;;;N;;;;; 17A2;KHMER LETTER QA;Lo;0;L;;;;;N;;;;; 17A3;KHMER INDEPENDENT VOWEL QAQ;Lo;0;L;;;;;N;;;;; 17A4;KHMER INDEPENDENT VOWEL QAA;Lo;0;L;;;;;N;;;;; 17A5;KHMER INDEPENDENT VOWEL QI;Lo;0;L;;;;;N;;;;; 17A6;KHMER INDEPENDENT VOWEL QII;Lo;0;L;;;;;N;;;;; 17A7;KHMER INDEPENDENT VOWEL QU;Lo;0;L;;;;;N;;;;; 17A8;KHMER INDEPENDENT VOWEL QUK;Lo;0;L;;;;;N;;;;; 17A9;KHMER INDEPENDENT VOWEL QUU;Lo;0;L;;;;;N;;;;; 17AA;KHMER INDEPENDENT VOWEL QUUV;Lo;0;L;;;;;N;;;;; 17AB;KHMER INDEPENDENT VOWEL RY;Lo;0;L;;;;;N;;;;; 17AC;KHMER INDEPENDENT VOWEL RYY;Lo;0;L;;;;;N;;;;; 17AD;KHMER INDEPENDENT VOWEL LY;Lo;0;L;;;;;N;;;;; 17AE;KHMER INDEPENDENT VOWEL LYY;Lo;0;L;;;;;N;;;;; 17AF;KHMER INDEPENDENT VOWEL QE;Lo;0;L;;;;;N;;;;; 17B0;KHMER INDEPENDENT VOWEL QAI;Lo;0;L;;;;;N;;;;; 17B1;KHMER INDEPENDENT VOWEL QOO TYPE ONE;Lo;0;L;;;;;N;;;;; 17B2;KHMER INDEPENDENT VOWEL QOO TYPE TWO;Lo;0;L;;;;;N;;;;; 17B3;KHMER INDEPENDENT VOWEL QAU;Lo;0;L;;;;;N;;;;; 17B4;KHMER VOWEL INHERENT AQ;Mc;0;L;;;;;N;;;;; 17B5;KHMER VOWEL INHERENT AA;Mc;0;L;;;;;N;;;;; 17B6;KHMER VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; 17B7;KHMER VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;; 17B8;KHMER VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;; 17B9;KHMER VOWEL SIGN Y;Mn;0;NSM;;;;;N;;;;; 17BA;KHMER VOWEL SIGN YY;Mn;0;NSM;;;;;N;;;;; 17BB;KHMER VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; 17BC;KHMER VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;; 17BD;KHMER VOWEL SIGN UA;Mn;0;NSM;;;;;N;;;;; 17BE;KHMER VOWEL SIGN OE;Mc;0;L;;;;;N;;;;; 17BF;KHMER VOWEL SIGN YA;Mc;0;L;;;;;N;;;;; 17C0;KHMER VOWEL SIGN IE;Mc;0;L;;;;;N;;;;; 17C1;KHMER VOWEL SIGN E;Mc;0;L;;;;;N;;;;; 17C2;KHMER VOWEL SIGN AE;Mc;0;L;;;;;N;;;;; 17C3;KHMER VOWEL SIGN AI;Mc;0;L;;;;;N;;;;; 17C4;KHMER VOWEL SIGN OO;Mc;0;L;;;;;N;;;;; 17C5;KHMER VOWEL SIGN AU;Mc;0;L;;;;;N;;;;; 17C6;KHMER SIGN NIKAHIT;Mn;0;NSM;;;;;N;;;;; 17C7;KHMER SIGN REAHMUK;Mc;0;L;;;;;N;;;;; 17C8;KHMER SIGN YUUKALEAPINTU;Mc;0;L;;;;;N;;;;; 17C9;KHMER SIGN MUUSIKATOAN;Mn;0;NSM;;;;;N;;;;; 17CA;KHMER SIGN TRIISAP;Mn;0;NSM;;;;;N;;;;; 17CB;KHMER SIGN BANTOC;Mn;0;NSM;;;;;N;;;;; 17CC;KHMER SIGN ROBAT;Mn;0;NSM;;;;;N;;;;; 17CD;KHMER SIGN TOANDAKHIAT;Mn;0;NSM;;;;;N;;;;; 17CE;KHMER SIGN KAKABAT;Mn;0;NSM;;;;;N;;;;; 17CF;KHMER SIGN AHSDA;Mn;0;NSM;;;;;N;;;;; 17D0;KHMER SIGN SAMYOK SANNYA;Mn;0;NSM;;;;;N;;;;; 17D1;KHMER SIGN VIRIAM;Mn;0;NSM;;;;;N;;;;; 17D2;KHMER SIGN COENG;Mn;9;NSM;;;;;N;;;;; 17D3;KHMER SIGN BATHAMASAT;Mn;0;NSM;;;;;N;;;;; 17D4;KHMER SIGN KHAN;Po;0;L;;;;;N;;;;; 17D5;KHMER SIGN BARIYOOSAN;Po;0;L;;;;;N;;;;; 17D6;KHMER SIGN CAMNUC PII KUUH;Po;0;L;;;;;N;;;;; 17D7;KHMER SIGN LEK TOO;Po;0;L;;;;;N;;;;; 17D8;KHMER SIGN BEYYAL;Po;0;L;;;;;N;;;;; 17D9;KHMER SIGN PHNAEK MUAN;Po;0;L;;;;;N;;;;; 17DA;KHMER SIGN KOOMUUT;Po;0;L;;;;;N;;;;; 17DB;KHMER CURRENCY SYMBOL RIEL;Sc;0;ET;;;;;N;;;;; 17DC;KHMER SIGN AVAKRAHASANYA;Po;0;L;;;;;N;;;;; 17E0;KHMER DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 17E1;KHMER DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 17E2;KHMER DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 17E3;KHMER DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 17E4;KHMER DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 17E5;KHMER DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 17E6;KHMER DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 17E7;KHMER DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 17E8;KHMER DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 17E9;KHMER DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 1800;MONGOLIAN BIRGA;Po;0;ON;;;;;N;;;;; 1801;MONGOLIAN ELLIPSIS;Po;0;ON;;;;;N;;;;; 1802;MONGOLIAN COMMA;Po;0;ON;;;;;N;;;;; 1803;MONGOLIAN FULL STOP;Po;0;ON;;;;;N;;;;; 1804;MONGOLIAN COLON;Po;0;ON;;;;;N;;;;; 1805;MONGOLIAN FOUR DOTS;Po;0;ON;;;;;N;;;;; 1806;MONGOLIAN TODO SOFT HYPHEN;Pd;0;ON;;;;;N;;;;; 1807;MONGOLIAN SIBE SYLLABLE BOUNDARY MARKER;Po;0;ON;;;;;N;;;;; 1808;MONGOLIAN MANCHU COMMA;Po;0;ON;;;;;N;;;;; 1809;MONGOLIAN MANCHU FULL STOP;Po;0;ON;;;;;N;;;;; 180A;MONGOLIAN NIRUGU;Po;0;ON;;;;;N;;;;; 180B;MONGOLIAN FREE VARIATION SELECTOR ONE;Cf;0;BN;;;;;N;;;;; 180C;MONGOLIAN FREE VARIATION SELECTOR TWO;Cf;0;BN;;;;;N;;;;; 180D;MONGOLIAN FREE VARIATION SELECTOR THREE;Cf;0;BN;;;;;N;;;;; 180E;MONGOLIAN VOWEL SEPARATOR;Cf;0;BN;;;;;N;;;;; 1810;MONGOLIAN DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 1811;MONGOLIAN DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 1812;MONGOLIAN DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 1813;MONGOLIAN DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; 1814;MONGOLIAN DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; 1815;MONGOLIAN DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; 1816;MONGOLIAN DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; 1817;MONGOLIAN DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 1818;MONGOLIAN DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 1819;MONGOLIAN DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 1820;MONGOLIAN LETTER A;Lo;0;L;;;;;N;;;;; 1821;MONGOLIAN LETTER E;Lo;0;L;;;;;N;;;;; 1822;MONGOLIAN LETTER I;Lo;0;L;;;;;N;;;;; 1823;MONGOLIAN LETTER O;Lo;0;L;;;;;N;;;;; 1824;MONGOLIAN LETTER U;Lo;0;L;;;;;N;;;;; 1825;MONGOLIAN LETTER OE;Lo;0;L;;;;;N;;;;; 1826;MONGOLIAN LETTER UE;Lo;0;L;;;;;N;;;;; 1827;MONGOLIAN LETTER EE;Lo;0;L;;;;;N;;;;; 1828;MONGOLIAN LETTER NA;Lo;0;L;;;;;N;;;;; 1829;MONGOLIAN LETTER ANG;Lo;0;L;;;;;N;;;;; 182A;MONGOLIAN LETTER BA;Lo;0;L;;;;;N;;;;; 182B;MONGOLIAN LETTER PA;Lo;0;L;;;;;N;;;;; 182C;MONGOLIAN LETTER QA;Lo;0;L;;;;;N;;;;; 182D;MONGOLIAN LETTER GA;Lo;0;L;;;;;N;;;;; 182E;MONGOLIAN LETTER MA;Lo;0;L;;;;;N;;;;; 182F;MONGOLIAN LETTER LA;Lo;0;L;;;;;N;;;;; 1830;MONGOLIAN LETTER SA;Lo;0;L;;;;;N;;;;; 1831;MONGOLIAN LETTER SHA;Lo;0;L;;;;;N;;;;; 1832;MONGOLIAN LETTER TA;Lo;0;L;;;;;N;;;;; 1833;MONGOLIAN LETTER DA;Lo;0;L;;;;;N;;;;; 1834;MONGOLIAN LETTER CHA;Lo;0;L;;;;;N;;;;; 1835;MONGOLIAN LETTER JA;Lo;0;L;;;;;N;;;;; 1836;MONGOLIAN LETTER YA;Lo;0;L;;;;;N;;;;; 1837;MONGOLIAN LETTER RA;Lo;0;L;;;;;N;;;;; 1838;MONGOLIAN LETTER WA;Lo;0;L;;;;;N;;;;; 1839;MONGOLIAN LETTER FA;Lo;0;L;;;;;N;;;;; 183A;MONGOLIAN LETTER KA;Lo;0;L;;;;;N;;;;; 183B;MONGOLIAN LETTER KHA;Lo;0;L;;;;;N;;;;; 183C;MONGOLIAN LETTER TSA;Lo;0;L;;;;;N;;;;; 183D;MONGOLIAN LETTER ZA;Lo;0;L;;;;;N;;;;; 183E;MONGOLIAN LETTER HAA;Lo;0;L;;;;;N;;;;; 183F;MONGOLIAN LETTER ZRA;Lo;0;L;;;;;N;;;;; 1840;MONGOLIAN LETTER LHA;Lo;0;L;;;;;N;;;;; 1841;MONGOLIAN LETTER ZHI;Lo;0;L;;;;;N;;;;; 1842;MONGOLIAN LETTER CHI;Lo;0;L;;;;;N;;;;; 1843;MONGOLIAN LETTER TODO LONG VOWEL SIGN;Lm;0;L;;;;;N;;;;; 1844;MONGOLIAN LETTER TODO E;Lo;0;L;;;;;N;;;;; 1845;MONGOLIAN LETTER TODO I;Lo;0;L;;;;;N;;;;; 1846;MONGOLIAN LETTER TODO O;Lo;0;L;;;;;N;;;;; 1847;MONGOLIAN LETTER TODO U;Lo;0;L;;;;;N;;;;; 1848;MONGOLIAN LETTER TODO OE;Lo;0;L;;;;;N;;;;; 1849;MONGOLIAN LETTER TODO UE;Lo;0;L;;;;;N;;;;; 184A;MONGOLIAN LETTER TODO ANG;Lo;0;L;;;;;N;;;;; 184B;MONGOLIAN LETTER TODO BA;Lo;0;L;;;;;N;;;;; 184C;MONGOLIAN LETTER TODO PA;Lo;0;L;;;;;N;;;;; 184D;MONGOLIAN LETTER TODO QA;Lo;0;L;;;;;N;;;;; 184E;MONGOLIAN LETTER TODO GA;Lo;0;L;;;;;N;;;;; 184F;MONGOLIAN LETTER TODO MA;Lo;0;L;;;;;N;;;;; 1850;MONGOLIAN LETTER TODO TA;Lo;0;L;;;;;N;;;;; 1851;MONGOLIAN LETTER TODO DA;Lo;0;L;;;;;N;;;;; 1852;MONGOLIAN LETTER TODO CHA;Lo;0;L;;;;;N;;;;; 1853;MONGOLIAN LETTER TODO JA;Lo;0;L;;;;;N;;;;; 1854;MONGOLIAN LETTER TODO TSA;Lo;0;L;;;;;N;;;;; 1855;MONGOLIAN LETTER TODO YA;Lo;0;L;;;;;N;;;;; 1856;MONGOLIAN LETTER TODO WA;Lo;0;L;;;;;N;;;;; 1857;MONGOLIAN LETTER TODO KA;Lo;0;L;;;;;N;;;;; 1858;MONGOLIAN LETTER TODO GAA;Lo;0;L;;;;;N;;;;; 1859;MONGOLIAN LETTER TODO HAA;Lo;0;L;;;;;N;;;;; 185A;MONGOLIAN LETTER TODO JIA;Lo;0;L;;;;;N;;;;; 185B;MONGOLIAN LETTER TODO NIA;Lo;0;L;;;;;N;;;;; 185C;MONGOLIAN LETTER TODO DZA;Lo;0;L;;;;;N;;;;; 185D;MONGOLIAN LETTER SIBE E;Lo;0;L;;;;;N;;;;; 185E;MONGOLIAN LETTER SIBE I;Lo;0;L;;;;;N;;;;; 185F;MONGOLIAN LETTER SIBE IY;Lo;0;L;;;;;N;;;;; 1860;MONGOLIAN LETTER SIBE UE;Lo;0;L;;;;;N;;;;; 1861;MONGOLIAN LETTER SIBE U;Lo;0;L;;;;;N;;;;; 1862;MONGOLIAN LETTER SIBE ANG;Lo;0;L;;;;;N;;;;; 1863;MONGOLIAN LETTER SIBE KA;Lo;0;L;;;;;N;;;;; 1864;MONGOLIAN LETTER SIBE GA;Lo;0;L;;;;;N;;;;; 1865;MONGOLIAN LETTER SIBE HA;Lo;0;L;;;;;N;;;;; 1866;MONGOLIAN LETTER SIBE PA;Lo;0;L;;;;;N;;;;; 1867;MONGOLIAN LETTER SIBE SHA;Lo;0;L;;;;;N;;;;; 1868;MONGOLIAN LETTER SIBE TA;Lo;0;L;;;;;N;;;;; 1869;MONGOLIAN LETTER SIBE DA;Lo;0;L;;;;;N;;;;; 186A;MONGOLIAN LETTER SIBE JA;Lo;0;L;;;;;N;;;;; 186B;MONGOLIAN LETTER SIBE FA;Lo;0;L;;;;;N;;;;; 186C;MONGOLIAN LETTER SIBE GAA;Lo;0;L;;;;;N;;;;; 186D;MONGOLIAN LETTER SIBE HAA;Lo;0;L;;;;;N;;;;; 186E;MONGOLIAN LETTER SIBE TSA;Lo;0;L;;;;;N;;;;; 186F;MONGOLIAN LETTER SIBE ZA;Lo;0;L;;;;;N;;;;; 1870;MONGOLIAN LETTER SIBE RAA;Lo;0;L;;;;;N;;;;; 1871;MONGOLIAN LETTER SIBE CHA;Lo;0;L;;;;;N;;;;; 1872;MONGOLIAN LETTER SIBE ZHA;Lo;0;L;;;;;N;;;;; 1873;MONGOLIAN LETTER MANCHU I;Lo;0;L;;;;;N;;;;; 1874;MONGOLIAN LETTER MANCHU KA;Lo;0;L;;;;;N;;;;; 1875;MONGOLIAN LETTER MANCHU RA;Lo;0;L;;;;;N;;;;; 1876;MONGOLIAN LETTER MANCHU FA;Lo;0;L;;;;;N;;;;; 1877;MONGOLIAN LETTER MANCHU ZHA;Lo;0;L;;;;;N;;;;; 1880;MONGOLIAN LETTER ALI GALI ANUSVARA ONE;Lo;0;L;;;;;N;;;;; 1881;MONGOLIAN LETTER ALI GALI VISARGA ONE;Lo;0;L;;;;;N;;;;; 1882;MONGOLIAN LETTER ALI GALI DAMARU;Lo;0;L;;;;;N;;;;; 1883;MONGOLIAN LETTER ALI GALI UBADAMA;Lo;0;L;;;;;N;;;;; 1884;MONGOLIAN LETTER ALI GALI INVERTED UBADAMA;Lo;0;L;;;;;N;;;;; 1885;MONGOLIAN LETTER ALI GALI BALUDA;Lo;0;L;;;;;N;;;;; 1886;MONGOLIAN LETTER ALI GALI THREE BALUDA;Lo;0;L;;;;;N;;;;; 1887;MONGOLIAN LETTER ALI GALI A;Lo;0;L;;;;;N;;;;; 1888;MONGOLIAN LETTER ALI GALI I;Lo;0;L;;;;;N;;;;; 1889;MONGOLIAN LETTER ALI GALI KA;Lo;0;L;;;;;N;;;;; 188A;MONGOLIAN LETTER ALI GALI NGA;Lo;0;L;;;;;N;;;;; 188B;MONGOLIAN LETTER ALI GALI CA;Lo;0;L;;;;;N;;;;; 188C;MONGOLIAN LETTER ALI GALI TTA;Lo;0;L;;;;;N;;;;; 188D;MONGOLIAN LETTER ALI GALI TTHA;Lo;0;L;;;;;N;;;;; 188E;MONGOLIAN LETTER ALI GALI DDA;Lo;0;L;;;;;N;;;;; 188F;MONGOLIAN LETTER ALI GALI NNA;Lo;0;L;;;;;N;;;;; 1890;MONGOLIAN LETTER ALI GALI TA;Lo;0;L;;;;;N;;;;; 1891;MONGOLIAN LETTER ALI GALI DA;Lo;0;L;;;;;N;;;;; 1892;MONGOLIAN LETTER ALI GALI PA;Lo;0;L;;;;;N;;;;; 1893;MONGOLIAN LETTER ALI GALI PHA;Lo;0;L;;;;;N;;;;; 1894;MONGOLIAN LETTER ALI GALI SSA;Lo;0;L;;;;;N;;;;; 1895;MONGOLIAN LETTER ALI GALI ZHA;Lo;0;L;;;;;N;;;;; 1896;MONGOLIAN LETTER ALI GALI ZA;Lo;0;L;;;;;N;;;;; 1897;MONGOLIAN LETTER ALI GALI AH;Lo;0;L;;;;;N;;;;; 1898;MONGOLIAN LETTER TODO ALI GALI TA;Lo;0;L;;;;;N;;;;; 1899;MONGOLIAN LETTER TODO ALI GALI ZHA;Lo;0;L;;;;;N;;;;; 189A;MONGOLIAN LETTER MANCHU ALI GALI GHA;Lo;0;L;;;;;N;;;;; 189B;MONGOLIAN LETTER MANCHU ALI GALI NGA;Lo;0;L;;;;;N;;;;; 189C;MONGOLIAN LETTER MANCHU ALI GALI CA;Lo;0;L;;;;;N;;;;; 189D;MONGOLIAN LETTER MANCHU ALI GALI JHA;Lo;0;L;;;;;N;;;;; 189E;MONGOLIAN LETTER MANCHU ALI GALI TTA;Lo;0;L;;;;;N;;;;; 189F;MONGOLIAN LETTER MANCHU ALI GALI DDHA;Lo;0;L;;;;;N;;;;; 18A0;MONGOLIAN LETTER MANCHU ALI GALI TA;Lo;0;L;;;;;N;;;;; 18A1;MONGOLIAN LETTER MANCHU ALI GALI DHA;Lo;0;L;;;;;N;;;;; 18A2;MONGOLIAN LETTER MANCHU ALI GALI SSA;Lo;0;L;;;;;N;;;;; 18A3;MONGOLIAN LETTER MANCHU ALI GALI CYA;Lo;0;L;;;;;N;;;;; 18A4;MONGOLIAN LETTER MANCHU ALI GALI ZHA;Lo;0;L;;;;;N;;;;; 18A5;MONGOLIAN LETTER MANCHU ALI GALI ZA;Lo;0;L;;;;;N;;;;; 18A6;MONGOLIAN LETTER ALI GALI HALF U;Lo;0;L;;;;;N;;;;; 18A7;MONGOLIAN LETTER ALI GALI HALF YA;Lo;0;L;;;;;N;;;;; 18A8;MONGOLIAN LETTER MANCHU ALI GALI BHA;Lo;0;L;;;;;N;;;;; 18A9;MONGOLIAN LETTER ALI GALI DAGALGA;Mn;228;NSM;;;;;N;;;;; 1E00;LATIN CAPITAL LETTER A WITH RING BELOW;Lu;0;L;0041 0325;;;;N;;;;1E01; 1E01;LATIN SMALL LETTER A WITH RING BELOW;Ll;0;L;0061 0325;;;;N;;;1E00;;1E00 1E02;LATIN CAPITAL LETTER B WITH DOT ABOVE;Lu;0;L;0042 0307;;;;N;;;;1E03; 1E03;LATIN SMALL LETTER B WITH DOT ABOVE;Ll;0;L;0062 0307;;;;N;;;1E02;;1E02 1E04;LATIN CAPITAL LETTER B WITH DOT BELOW;Lu;0;L;0042 0323;;;;N;;;;1E05; 1E05;LATIN SMALL LETTER B WITH DOT BELOW;Ll;0;L;0062 0323;;;;N;;;1E04;;1E04 1E06;LATIN CAPITAL LETTER B WITH LINE BELOW;Lu;0;L;0042 0331;;;;N;;;;1E07; 1E07;LATIN SMALL LETTER B WITH LINE BELOW;Ll;0;L;0062 0331;;;;N;;;1E06;;1E06 1E08;LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE;Lu;0;L;00C7 0301;;;;N;;;;1E09; 1E09;LATIN SMALL LETTER C WITH CEDILLA AND ACUTE;Ll;0;L;00E7 0301;;;;N;;;1E08;;1E08 1E0A;LATIN CAPITAL LETTER D WITH DOT ABOVE;Lu;0;L;0044 0307;;;;N;;;;1E0B; 1E0B;LATIN SMALL LETTER D WITH DOT ABOVE;Ll;0;L;0064 0307;;;;N;;;1E0A;;1E0A 1E0C;LATIN CAPITAL LETTER D WITH DOT BELOW;Lu;0;L;0044 0323;;;;N;;;;1E0D; 1E0D;LATIN SMALL LETTER D WITH DOT BELOW;Ll;0;L;0064 0323;;;;N;;;1E0C;;1E0C 1E0E;LATIN CAPITAL LETTER D WITH LINE BELOW;Lu;0;L;0044 0331;;;;N;;;;1E0F; 1E0F;LATIN SMALL LETTER D WITH LINE BELOW;Ll;0;L;0064 0331;;;;N;;;1E0E;;1E0E 1E10;LATIN CAPITAL LETTER D WITH CEDILLA;Lu;0;L;0044 0327;;;;N;;;;1E11; 1E11;LATIN SMALL LETTER D WITH CEDILLA;Ll;0;L;0064 0327;;;;N;;;1E10;;1E10 1E12;LATIN CAPITAL LETTER D WITH CIRCUMFLEX BELOW;Lu;0;L;0044 032D;;;;N;;;;1E13; 1E13;LATIN SMALL LETTER D WITH CIRCUMFLEX BELOW;Ll;0;L;0064 032D;;;;N;;;1E12;;1E12 1E14;LATIN CAPITAL LETTER E WITH MACRON AND GRAVE;Lu;0;L;0112 0300;;;;N;;;;1E15; 1E15;LATIN SMALL LETTER E WITH MACRON AND GRAVE;Ll;0;L;0113 0300;;;;N;;;1E14;;1E14 1E16;LATIN CAPITAL LETTER E WITH MACRON AND ACUTE;Lu;0;L;0112 0301;;;;N;;;;1E17; 1E17;LATIN SMALL LETTER E WITH MACRON AND ACUTE;Ll;0;L;0113 0301;;;;N;;;1E16;;1E16 1E18;LATIN CAPITAL LETTER E WITH CIRCUMFLEX BELOW;Lu;0;L;0045 032D;;;;N;;;;1E19; 1E19;LATIN SMALL LETTER E WITH CIRCUMFLEX BELOW;Ll;0;L;0065 032D;;;;N;;;1E18;;1E18 1E1A;LATIN CAPITAL LETTER E WITH TILDE BELOW;Lu;0;L;0045 0330;;;;N;;;;1E1B; 1E1B;LATIN SMALL LETTER E WITH TILDE BELOW;Ll;0;L;0065 0330;;;;N;;;1E1A;;1E1A 1E1C;LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE;Lu;0;L;0228 0306;;;;N;;;;1E1D; 1E1D;LATIN SMALL LETTER E WITH CEDILLA AND BREVE;Ll;0;L;0229 0306;;;;N;;;1E1C;;1E1C 1E1E;LATIN CAPITAL LETTER F WITH DOT ABOVE;Lu;0;L;0046 0307;;;;N;;;;1E1F; 1E1F;LATIN SMALL LETTER F WITH DOT ABOVE;Ll;0;L;0066 0307;;;;N;;;1E1E;;1E1E 1E20;LATIN CAPITAL LETTER G WITH MACRON;Lu;0;L;0047 0304;;;;N;;;;1E21; 1E21;LATIN SMALL LETTER G WITH MACRON;Ll;0;L;0067 0304;;;;N;;;1E20;;1E20 1E22;LATIN CAPITAL LETTER H WITH DOT ABOVE;Lu;0;L;0048 0307;;;;N;;;;1E23; 1E23;LATIN SMALL LETTER H WITH DOT ABOVE;Ll;0;L;0068 0307;;;;N;;;1E22;;1E22 1E24;LATIN CAPITAL LETTER H WITH DOT BELOW;Lu;0;L;0048 0323;;;;N;;;;1E25; 1E25;LATIN SMALL LETTER H WITH DOT BELOW;Ll;0;L;0068 0323;;;;N;;;1E24;;1E24 1E26;LATIN CAPITAL LETTER H WITH DIAERESIS;Lu;0;L;0048 0308;;;;N;;;;1E27; 1E27;LATIN SMALL LETTER H WITH DIAERESIS;Ll;0;L;0068 0308;;;;N;;;1E26;;1E26 1E28;LATIN CAPITAL LETTER H WITH CEDILLA;Lu;0;L;0048 0327;;;;N;;;;1E29; 1E29;LATIN SMALL LETTER H WITH CEDILLA;Ll;0;L;0068 0327;;;;N;;;1E28;;1E28 1E2A;LATIN CAPITAL LETTER H WITH BREVE BELOW;Lu;0;L;0048 032E;;;;N;;;;1E2B; 1E2B;LATIN SMALL LETTER H WITH BREVE BELOW;Ll;0;L;0068 032E;;;;N;;;1E2A;;1E2A 1E2C;LATIN CAPITAL LETTER I WITH TILDE BELOW;Lu;0;L;0049 0330;;;;N;;;;1E2D; 1E2D;LATIN SMALL LETTER I WITH TILDE BELOW;Ll;0;L;0069 0330;;;;N;;;1E2C;;1E2C 1E2E;LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE;Lu;0;L;00CF 0301;;;;N;;;;1E2F; 1E2F;LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE;Ll;0;L;00EF 0301;;;;N;;;1E2E;;1E2E 1E30;LATIN CAPITAL LETTER K WITH ACUTE;Lu;0;L;004B 0301;;;;N;;;;1E31; 1E31;LATIN SMALL LETTER K WITH ACUTE;Ll;0;L;006B 0301;;;;N;;;1E30;;1E30 1E32;LATIN CAPITAL LETTER K WITH DOT BELOW;Lu;0;L;004B 0323;;;;N;;;;1E33; 1E33;LATIN SMALL LETTER K WITH DOT BELOW;Ll;0;L;006B 0323;;;;N;;;1E32;;1E32 1E34;LATIN CAPITAL LETTER K WITH LINE BELOW;Lu;0;L;004B 0331;;;;N;;;;1E35; 1E35;LATIN SMALL LETTER K WITH LINE BELOW;Ll;0;L;006B 0331;;;;N;;;1E34;;1E34 1E36;LATIN CAPITAL LETTER L WITH DOT BELOW;Lu;0;L;004C 0323;;;;N;;;;1E37; 1E37;LATIN SMALL LETTER L WITH DOT BELOW;Ll;0;L;006C 0323;;;;N;;;1E36;;1E36 1E38;LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON;Lu;0;L;1E36 0304;;;;N;;;;1E39; 1E39;LATIN SMALL LETTER L WITH DOT BELOW AND MACRON;Ll;0;L;1E37 0304;;;;N;;;1E38;;1E38 1E3A;LATIN CAPITAL LETTER L WITH LINE BELOW;Lu;0;L;004C 0331;;;;N;;;;1E3B; 1E3B;LATIN SMALL LETTER L WITH LINE BELOW;Ll;0;L;006C 0331;;;;N;;;1E3A;;1E3A 1E3C;LATIN CAPITAL LETTER L WITH CIRCUMFLEX BELOW;Lu;0;L;004C 032D;;;;N;;;;1E3D; 1E3D;LATIN SMALL LETTER L WITH CIRCUMFLEX BELOW;Ll;0;L;006C 032D;;;;N;;;1E3C;;1E3C 1E3E;LATIN CAPITAL LETTER M WITH ACUTE;Lu;0;L;004D 0301;;;;N;;;;1E3F; 1E3F;LATIN SMALL LETTER M WITH ACUTE;Ll;0;L;006D 0301;;;;N;;;1E3E;;1E3E 1E40;LATIN CAPITAL LETTER M WITH DOT ABOVE;Lu;0;L;004D 0307;;;;N;;;;1E41; 1E41;LATIN SMALL LETTER M WITH DOT ABOVE;Ll;0;L;006D 0307;;;;N;;;1E40;;1E40 1E42;LATIN CAPITAL LETTER M WITH DOT BELOW;Lu;0;L;004D 0323;;;;N;;;;1E43; 1E43;LATIN SMALL LETTER M WITH DOT BELOW;Ll;0;L;006D 0323;;;;N;;;1E42;;1E42 1E44;LATIN CAPITAL LETTER N WITH DOT ABOVE;Lu;0;L;004E 0307;;;;N;;;;1E45; 1E45;LATIN SMALL LETTER N WITH DOT ABOVE;Ll;0;L;006E 0307;;;;N;;;1E44;;1E44 1E46;LATIN CAPITAL LETTER N WITH DOT BELOW;Lu;0;L;004E 0323;;;;N;;;;1E47; 1E47;LATIN SMALL LETTER N WITH DOT BELOW;Ll;0;L;006E 0323;;;;N;;;1E46;;1E46 1E48;LATIN CAPITAL LETTER N WITH LINE BELOW;Lu;0;L;004E 0331;;;;N;;;;1E49; 1E49;LATIN SMALL LETTER N WITH LINE BELOW;Ll;0;L;006E 0331;;;;N;;;1E48;;1E48 1E4A;LATIN CAPITAL LETTER N WITH CIRCUMFLEX BELOW;Lu;0;L;004E 032D;;;;N;;;;1E4B; 1E4B;LATIN SMALL LETTER N WITH CIRCUMFLEX BELOW;Ll;0;L;006E 032D;;;;N;;;1E4A;;1E4A 1E4C;LATIN CAPITAL LETTER O WITH TILDE AND ACUTE;Lu;0;L;00D5 0301;;;;N;;;;1E4D; 1E4D;LATIN SMALL LETTER O WITH TILDE AND ACUTE;Ll;0;L;00F5 0301;;;;N;;;1E4C;;1E4C 1E4E;LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS;Lu;0;L;00D5 0308;;;;N;;;;1E4F; 1E4F;LATIN SMALL LETTER O WITH TILDE AND DIAERESIS;Ll;0;L;00F5 0308;;;;N;;;1E4E;;1E4E 1E50;LATIN CAPITAL LETTER O WITH MACRON AND GRAVE;Lu;0;L;014C 0300;;;;N;;;;1E51; 1E51;LATIN SMALL LETTER O WITH MACRON AND GRAVE;Ll;0;L;014D 0300;;;;N;;;1E50;;1E50 1E52;LATIN CAPITAL LETTER O WITH MACRON AND ACUTE;Lu;0;L;014C 0301;;;;N;;;;1E53; 1E53;LATIN SMALL LETTER O WITH MACRON AND ACUTE;Ll;0;L;014D 0301;;;;N;;;1E52;;1E52 1E54;LATIN CAPITAL LETTER P WITH ACUTE;Lu;0;L;0050 0301;;;;N;;;;1E55; 1E55;LATIN SMALL LETTER P WITH ACUTE;Ll;0;L;0070 0301;;;;N;;;1E54;;1E54 1E56;LATIN CAPITAL LETTER P WITH DOT ABOVE;Lu;0;L;0050 0307;;;;N;;;;1E57; 1E57;LATIN SMALL LETTER P WITH DOT ABOVE;Ll;0;L;0070 0307;;;;N;;;1E56;;1E56 1E58;LATIN CAPITAL LETTER R WITH DOT ABOVE;Lu;0;L;0052 0307;;;;N;;;;1E59; 1E59;LATIN SMALL LETTER R WITH DOT ABOVE;Ll;0;L;0072 0307;;;;N;;;1E58;;1E58 1E5A;LATIN CAPITAL LETTER R WITH DOT BELOW;Lu;0;L;0052 0323;;;;N;;;;1E5B; 1E5B;LATIN SMALL LETTER R WITH DOT BELOW;Ll;0;L;0072 0323;;;;N;;;1E5A;;1E5A 1E5C;LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON;Lu;0;L;1E5A 0304;;;;N;;;;1E5D; 1E5D;LATIN SMALL LETTER R WITH DOT BELOW AND MACRON;Ll;0;L;1E5B 0304;;;;N;;;1E5C;;1E5C 1E5E;LATIN CAPITAL LETTER R WITH LINE BELOW;Lu;0;L;0052 0331;;;;N;;;;1E5F; 1E5F;LATIN SMALL LETTER R WITH LINE BELOW;Ll;0;L;0072 0331;;;;N;;;1E5E;;1E5E 1E60;LATIN CAPITAL LETTER S WITH DOT ABOVE;Lu;0;L;0053 0307;;;;N;;;;1E61; 1E61;LATIN SMALL LETTER S WITH DOT ABOVE;Ll;0;L;0073 0307;;;;N;;;1E60;;1E60 1E62;LATIN CAPITAL LETTER S WITH DOT BELOW;Lu;0;L;0053 0323;;;;N;;;;1E63; 1E63;LATIN SMALL LETTER S WITH DOT BELOW;Ll;0;L;0073 0323;;;;N;;;1E62;;1E62 1E64;LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE;Lu;0;L;015A 0307;;;;N;;;;1E65; 1E65;LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE;Ll;0;L;015B 0307;;;;N;;;1E64;;1E64 1E66;LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE;Lu;0;L;0160 0307;;;;N;;;;1E67; 1E67;LATIN SMALL LETTER S WITH CARON AND DOT ABOVE;Ll;0;L;0161 0307;;;;N;;;1E66;;1E66 1E68;LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE;Lu;0;L;1E62 0307;;;;N;;;;1E69; 1E69;LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE;Ll;0;L;1E63 0307;;;;N;;;1E68;;1E68 1E6A;LATIN CAPITAL LETTER T WITH DOT ABOVE;Lu;0;L;0054 0307;;;;N;;;;1E6B; 1E6B;LATIN SMALL LETTER T WITH DOT ABOVE;Ll;0;L;0074 0307;;;;N;;;1E6A;;1E6A 1E6C;LATIN CAPITAL LETTER T WITH DOT BELOW;Lu;0;L;0054 0323;;;;N;;;;1E6D; 1E6D;LATIN SMALL LETTER T WITH DOT BELOW;Ll;0;L;0074 0323;;;;N;;;1E6C;;1E6C 1E6E;LATIN CAPITAL LETTER T WITH LINE BELOW;Lu;0;L;0054 0331;;;;N;;;;1E6F; 1E6F;LATIN SMALL LETTER T WITH LINE BELOW;Ll;0;L;0074 0331;;;;N;;;1E6E;;1E6E 1E70;LATIN CAPITAL LETTER T WITH CIRCUMFLEX BELOW;Lu;0;L;0054 032D;;;;N;;;;1E71; 1E71;LATIN SMALL LETTER T WITH CIRCUMFLEX BELOW;Ll;0;L;0074 032D;;;;N;;;1E70;;1E70 1E72;LATIN CAPITAL LETTER U WITH DIAERESIS BELOW;Lu;0;L;0055 0324;;;;N;;;;1E73; 1E73;LATIN SMALL LETTER U WITH DIAERESIS BELOW;Ll;0;L;0075 0324;;;;N;;;1E72;;1E72 1E74;LATIN CAPITAL LETTER U WITH TILDE BELOW;Lu;0;L;0055 0330;;;;N;;;;1E75; 1E75;LATIN SMALL LETTER U WITH TILDE BELOW;Ll;0;L;0075 0330;;;;N;;;1E74;;1E74 1E76;LATIN CAPITAL LETTER U WITH CIRCUMFLEX BELOW;Lu;0;L;0055 032D;;;;N;;;;1E77; 1E77;LATIN SMALL LETTER U WITH CIRCUMFLEX BELOW;Ll;0;L;0075 032D;;;;N;;;1E76;;1E76 1E78;LATIN CAPITAL LETTER U WITH TILDE AND ACUTE;Lu;0;L;0168 0301;;;;N;;;;1E79; 1E79;LATIN SMALL LETTER U WITH TILDE AND ACUTE;Ll;0;L;0169 0301;;;;N;;;1E78;;1E78 1E7A;LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS;Lu;0;L;016A 0308;;;;N;;;;1E7B; 1E7B;LATIN SMALL LETTER U WITH MACRON AND DIAERESIS;Ll;0;L;016B 0308;;;;N;;;1E7A;;1E7A 1E7C;LATIN CAPITAL LETTER V WITH TILDE;Lu;0;L;0056 0303;;;;N;;;;1E7D; 1E7D;LATIN SMALL LETTER V WITH TILDE;Ll;0;L;0076 0303;;;;N;;;1E7C;;1E7C 1E7E;LATIN CAPITAL LETTER V WITH DOT BELOW;Lu;0;L;0056 0323;;;;N;;;;1E7F; 1E7F;LATIN SMALL LETTER V WITH DOT BELOW;Ll;0;L;0076 0323;;;;N;;;1E7E;;1E7E 1E80;LATIN CAPITAL LETTER W WITH GRAVE;Lu;0;L;0057 0300;;;;N;;;;1E81; 1E81;LATIN SMALL LETTER W WITH GRAVE;Ll;0;L;0077 0300;;;;N;;;1E80;;1E80 1E82;LATIN CAPITAL LETTER W WITH ACUTE;Lu;0;L;0057 0301;;;;N;;;;1E83; 1E83;LATIN SMALL LETTER W WITH ACUTE;Ll;0;L;0077 0301;;;;N;;;1E82;;1E82 1E84;LATIN CAPITAL LETTER W WITH DIAERESIS;Lu;0;L;0057 0308;;;;N;;;;1E85; 1E85;LATIN SMALL LETTER W WITH DIAERESIS;Ll;0;L;0077 0308;;;;N;;;1E84;;1E84 1E86;LATIN CAPITAL LETTER W WITH DOT ABOVE;Lu;0;L;0057 0307;;;;N;;;;1E87; 1E87;LATIN SMALL LETTER W WITH DOT ABOVE;Ll;0;L;0077 0307;;;;N;;;1E86;;1E86 1E88;LATIN CAPITAL LETTER W WITH DOT BELOW;Lu;0;L;0057 0323;;;;N;;;;1E89; 1E89;LATIN SMALL LETTER W WITH DOT BELOW;Ll;0;L;0077 0323;;;;N;;;1E88;;1E88 1E8A;LATIN CAPITAL LETTER X WITH DOT ABOVE;Lu;0;L;0058 0307;;;;N;;;;1E8B; 1E8B;LATIN SMALL LETTER X WITH DOT ABOVE;Ll;0;L;0078 0307;;;;N;;;1E8A;;1E8A 1E8C;LATIN CAPITAL LETTER X WITH DIAERESIS;Lu;0;L;0058 0308;;;;N;;;;1E8D; 1E8D;LATIN SMALL LETTER X WITH DIAERESIS;Ll;0;L;0078 0308;;;;N;;;1E8C;;1E8C 1E8E;LATIN CAPITAL LETTER Y WITH DOT ABOVE;Lu;0;L;0059 0307;;;;N;;;;1E8F; 1E8F;LATIN SMALL LETTER Y WITH DOT ABOVE;Ll;0;L;0079 0307;;;;N;;;1E8E;;1E8E 1E90;LATIN CAPITAL LETTER Z WITH CIRCUMFLEX;Lu;0;L;005A 0302;;;;N;;;;1E91; 1E91;LATIN SMALL LETTER Z WITH CIRCUMFLEX;Ll;0;L;007A 0302;;;;N;;;1E90;;1E90 1E92;LATIN CAPITAL LETTER Z WITH DOT BELOW;Lu;0;L;005A 0323;;;;N;;;;1E93; 1E93;LATIN SMALL LETTER Z WITH DOT BELOW;Ll;0;L;007A 0323;;;;N;;;1E92;;1E92 1E94;LATIN CAPITAL LETTER Z WITH LINE BELOW;Lu;0;L;005A 0331;;;;N;;;;1E95; 1E95;LATIN SMALL LETTER Z WITH LINE BELOW;Ll;0;L;007A 0331;;;;N;;;1E94;;1E94 1E96;LATIN SMALL LETTER H WITH LINE BELOW;Ll;0;L;0068 0331;;;;N;;;;; 1E97;LATIN SMALL LETTER T WITH DIAERESIS;Ll;0;L;0074 0308;;;;N;;;;; 1E98;LATIN SMALL LETTER W WITH RING ABOVE;Ll;0;L;0077 030A;;;;N;;;;; 1E99;LATIN SMALL LETTER Y WITH RING ABOVE;Ll;0;L;0079 030A;;;;N;;;;; 1E9A;LATIN SMALL LETTER A WITH RIGHT HALF RING;Ll;0;L; 0061 02BE;;;;N;;;;; 1E9B;LATIN SMALL LETTER LONG S WITH DOT ABOVE;Ll;0;L;017F 0307;;;;N;;;1E60;;1E60 1EA0;LATIN CAPITAL LETTER A WITH DOT BELOW;Lu;0;L;0041 0323;;;;N;;;;1EA1; 1EA1;LATIN SMALL LETTER A WITH DOT BELOW;Ll;0;L;0061 0323;;;;N;;;1EA0;;1EA0 1EA2;LATIN CAPITAL LETTER A WITH HOOK ABOVE;Lu;0;L;0041 0309;;;;N;;;;1EA3; 1EA3;LATIN SMALL LETTER A WITH HOOK ABOVE;Ll;0;L;0061 0309;;;;N;;;1EA2;;1EA2 1EA4;LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE;Lu;0;L;00C2 0301;;;;N;;;;1EA5; 1EA5;LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE;Ll;0;L;00E2 0301;;;;N;;;1EA4;;1EA4 1EA6;LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE;Lu;0;L;00C2 0300;;;;N;;;;1EA7; 1EA7;LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE;Ll;0;L;00E2 0300;;;;N;;;1EA6;;1EA6 1EA8;LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE;Lu;0;L;00C2 0309;;;;N;;;;1EA9; 1EA9;LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE;Ll;0;L;00E2 0309;;;;N;;;1EA8;;1EA8 1EAA;LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE;Lu;0;L;00C2 0303;;;;N;;;;1EAB; 1EAB;LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE;Ll;0;L;00E2 0303;;;;N;;;1EAA;;1EAA 1EAC;LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW;Lu;0;L;1EA0 0302;;;;N;;;;1EAD; 1EAD;LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW;Ll;0;L;1EA1 0302;;;;N;;;1EAC;;1EAC 1EAE;LATIN CAPITAL LETTER A WITH BREVE AND ACUTE;Lu;0;L;0102 0301;;;;N;;;;1EAF; 1EAF;LATIN SMALL LETTER A WITH BREVE AND ACUTE;Ll;0;L;0103 0301;;;;N;;;1EAE;;1EAE 1EB0;LATIN CAPITAL LETTER A WITH BREVE AND GRAVE;Lu;0;L;0102 0300;;;;N;;;;1EB1; 1EB1;LATIN SMALL LETTER A WITH BREVE AND GRAVE;Ll;0;L;0103 0300;;;;N;;;1EB0;;1EB0 1EB2;LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE;Lu;0;L;0102 0309;;;;N;;;;1EB3; 1EB3;LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE;Ll;0;L;0103 0309;;;;N;;;1EB2;;1EB2 1EB4;LATIN CAPITAL LETTER A WITH BREVE AND TILDE;Lu;0;L;0102 0303;;;;N;;;;1EB5; 1EB5;LATIN SMALL LETTER A WITH BREVE AND TILDE;Ll;0;L;0103 0303;;;;N;;;1EB4;;1EB4 1EB6;LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW;Lu;0;L;1EA0 0306;;;;N;;;;1EB7; 1EB7;LATIN SMALL LETTER A WITH BREVE AND DOT BELOW;Ll;0;L;1EA1 0306;;;;N;;;1EB6;;1EB6 1EB8;LATIN CAPITAL LETTER E WITH DOT BELOW;Lu;0;L;0045 0323;;;;N;;;;1EB9; 1EB9;LATIN SMALL LETTER E WITH DOT BELOW;Ll;0;L;0065 0323;;;;N;;;1EB8;;1EB8 1EBA;LATIN CAPITAL LETTER E WITH HOOK ABOVE;Lu;0;L;0045 0309;;;;N;;;;1EBB; 1EBB;LATIN SMALL LETTER E WITH HOOK ABOVE;Ll;0;L;0065 0309;;;;N;;;1EBA;;1EBA 1EBC;LATIN CAPITAL LETTER E WITH TILDE;Lu;0;L;0045 0303;;;;N;;;;1EBD; 1EBD;LATIN SMALL LETTER E WITH TILDE;Ll;0;L;0065 0303;;;;N;;;1EBC;;1EBC 1EBE;LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE;Lu;0;L;00CA 0301;;;;N;;;;1EBF; 1EBF;LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE;Ll;0;L;00EA 0301;;;;N;;;1EBE;;1EBE 1EC0;LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE;Lu;0;L;00CA 0300;;;;N;;;;1EC1; 1EC1;LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE;Ll;0;L;00EA 0300;;;;N;;;1EC0;;1EC0 1EC2;LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE;Lu;0;L;00CA 0309;;;;N;;;;1EC3; 1EC3;LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE;Ll;0;L;00EA 0309;;;;N;;;1EC2;;1EC2 1EC4;LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE;Lu;0;L;00CA 0303;;;;N;;;;1EC5; 1EC5;LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE;Ll;0;L;00EA 0303;;;;N;;;1EC4;;1EC4 1EC6;LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW;Lu;0;L;1EB8 0302;;;;N;;;;1EC7; 1EC7;LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW;Ll;0;L;1EB9 0302;;;;N;;;1EC6;;1EC6 1EC8;LATIN CAPITAL LETTER I WITH HOOK ABOVE;Lu;0;L;0049 0309;;;;N;;;;1EC9; 1EC9;LATIN SMALL LETTER I WITH HOOK ABOVE;Ll;0;L;0069 0309;;;;N;;;1EC8;;1EC8 1ECA;LATIN CAPITAL LETTER I WITH DOT BELOW;Lu;0;L;0049 0323;;;;N;;;;1ECB; 1ECB;LATIN SMALL LETTER I WITH DOT BELOW;Ll;0;L;0069 0323;;;;N;;;1ECA;;1ECA 1ECC;LATIN CAPITAL LETTER O WITH DOT BELOW;Lu;0;L;004F 0323;;;;N;;;;1ECD; 1ECD;LATIN SMALL LETTER O WITH DOT BELOW;Ll;0;L;006F 0323;;;;N;;;1ECC;;1ECC 1ECE;LATIN CAPITAL LETTER O WITH HOOK ABOVE;Lu;0;L;004F 0309;;;;N;;;;1ECF; 1ECF;LATIN SMALL LETTER O WITH HOOK ABOVE;Ll;0;L;006F 0309;;;;N;;;1ECE;;1ECE 1ED0;LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE;Lu;0;L;00D4 0301;;;;N;;;;1ED1; 1ED1;LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE;Ll;0;L;00F4 0301;;;;N;;;1ED0;;1ED0 1ED2;LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE;Lu;0;L;00D4 0300;;;;N;;;;1ED3; 1ED3;LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE;Ll;0;L;00F4 0300;;;;N;;;1ED2;;1ED2 1ED4;LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE;Lu;0;L;00D4 0309;;;;N;;;;1ED5; 1ED5;LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE;Ll;0;L;00F4 0309;;;;N;;;1ED4;;1ED4 1ED6;LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE;Lu;0;L;00D4 0303;;;;N;;;;1ED7; 1ED7;LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE;Ll;0;L;00F4 0303;;;;N;;;1ED6;;1ED6 1ED8;LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW;Lu;0;L;1ECC 0302;;;;N;;;;1ED9; 1ED9;LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW;Ll;0;L;1ECD 0302;;;;N;;;1ED8;;1ED8 1EDA;LATIN CAPITAL LETTER O WITH HORN AND ACUTE;Lu;0;L;01A0 0301;;;;N;;;;1EDB; 1EDB;LATIN SMALL LETTER O WITH HORN AND ACUTE;Ll;0;L;01A1 0301;;;;N;;;1EDA;;1EDA 1EDC;LATIN CAPITAL LETTER O WITH HORN AND GRAVE;Lu;0;L;01A0 0300;;;;N;;;;1EDD; 1EDD;LATIN SMALL LETTER O WITH HORN AND GRAVE;Ll;0;L;01A1 0300;;;;N;;;1EDC;;1EDC 1EDE;LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE;Lu;0;L;01A0 0309;;;;N;;;;1EDF; 1EDF;LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE;Ll;0;L;01A1 0309;;;;N;;;1EDE;;1EDE 1EE0;LATIN CAPITAL LETTER O WITH HORN AND TILDE;Lu;0;L;01A0 0303;;;;N;;;;1EE1; 1EE1;LATIN SMALL LETTER O WITH HORN AND TILDE;Ll;0;L;01A1 0303;;;;N;;;1EE0;;1EE0 1EE2;LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW;Lu;0;L;01A0 0323;;;;N;;;;1EE3; 1EE3;LATIN SMALL LETTER O WITH HORN AND DOT BELOW;Ll;0;L;01A1 0323;;;;N;;;1EE2;;1EE2 1EE4;LATIN CAPITAL LETTER U WITH DOT BELOW;Lu;0;L;0055 0323;;;;N;;;;1EE5; 1EE5;LATIN SMALL LETTER U WITH DOT BELOW;Ll;0;L;0075 0323;;;;N;;;1EE4;;1EE4 1EE6;LATIN CAPITAL LETTER U WITH HOOK ABOVE;Lu;0;L;0055 0309;;;;N;;;;1EE7; 1EE7;LATIN SMALL LETTER U WITH HOOK ABOVE;Ll;0;L;0075 0309;;;;N;;;1EE6;;1EE6 1EE8;LATIN CAPITAL LETTER U WITH HORN AND ACUTE;Lu;0;L;01AF 0301;;;;N;;;;1EE9; 1EE9;LATIN SMALL LETTER U WITH HORN AND ACUTE;Ll;0;L;01B0 0301;;;;N;;;1EE8;;1EE8 1EEA;LATIN CAPITAL LETTER U WITH HORN AND GRAVE;Lu;0;L;01AF 0300;;;;N;;;;1EEB; 1EEB;LATIN SMALL LETTER U WITH HORN AND GRAVE;Ll;0;L;01B0 0300;;;;N;;;1EEA;;1EEA 1EEC;LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE;Lu;0;L;01AF 0309;;;;N;;;;1EED; 1EED;LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE;Ll;0;L;01B0 0309;;;;N;;;1EEC;;1EEC 1EEE;LATIN CAPITAL LETTER U WITH HORN AND TILDE;Lu;0;L;01AF 0303;;;;N;;;;1EEF; 1EEF;LATIN SMALL LETTER U WITH HORN AND TILDE;Ll;0;L;01B0 0303;;;;N;;;1EEE;;1EEE 1EF0;LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW;Lu;0;L;01AF 0323;;;;N;;;;1EF1; 1EF1;LATIN SMALL LETTER U WITH HORN AND DOT BELOW;Ll;0;L;01B0 0323;;;;N;;;1EF0;;1EF0 1EF2;LATIN CAPITAL LETTER Y WITH GRAVE;Lu;0;L;0059 0300;;;;N;;;;1EF3; 1EF3;LATIN SMALL LETTER Y WITH GRAVE;Ll;0;L;0079 0300;;;;N;;;1EF2;;1EF2 1EF4;LATIN CAPITAL LETTER Y WITH DOT BELOW;Lu;0;L;0059 0323;;;;N;;;;1EF5; 1EF5;LATIN SMALL LETTER Y WITH DOT BELOW;Ll;0;L;0079 0323;;;;N;;;1EF4;;1EF4 1EF6;LATIN CAPITAL LETTER Y WITH HOOK ABOVE;Lu;0;L;0059 0309;;;;N;;;;1EF7; 1EF7;LATIN SMALL LETTER Y WITH HOOK ABOVE;Ll;0;L;0079 0309;;;;N;;;1EF6;;1EF6 1EF8;LATIN CAPITAL LETTER Y WITH TILDE;Lu;0;L;0059 0303;;;;N;;;;1EF9; 1EF9;LATIN SMALL LETTER Y WITH TILDE;Ll;0;L;0079 0303;;;;N;;;1EF8;;1EF8 1F00;GREEK SMALL LETTER ALPHA WITH PSILI;Ll;0;L;03B1 0313;;;;N;;;1F08;;1F08 1F01;GREEK SMALL LETTER ALPHA WITH DASIA;Ll;0;L;03B1 0314;;;;N;;;1F09;;1F09 1F02;GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA;Ll;0;L;1F00 0300;;;;N;;;1F0A;;1F0A 1F03;GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA;Ll;0;L;1F01 0300;;;;N;;;1F0B;;1F0B 1F04;GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA;Ll;0;L;1F00 0301;;;;N;;;1F0C;;1F0C 1F05;GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA;Ll;0;L;1F01 0301;;;;N;;;1F0D;;1F0D 1F06;GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI;Ll;0;L;1F00 0342;;;;N;;;1F0E;;1F0E 1F07;GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI;Ll;0;L;1F01 0342;;;;N;;;1F0F;;1F0F 1F08;GREEK CAPITAL LETTER ALPHA WITH PSILI;Lu;0;L;0391 0313;;;;N;;;;1F00; 1F09;GREEK CAPITAL LETTER ALPHA WITH DASIA;Lu;0;L;0391 0314;;;;N;;;;1F01; 1F0A;GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA;Lu;0;L;1F08 0300;;;;N;;;;1F02; 1F0B;GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA;Lu;0;L;1F09 0300;;;;N;;;;1F03; 1F0C;GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA;Lu;0;L;1F08 0301;;;;N;;;;1F04; 1F0D;GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA;Lu;0;L;1F09 0301;;;;N;;;;1F05; 1F0E;GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI;Lu;0;L;1F08 0342;;;;N;;;;1F06; 1F0F;GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI;Lu;0;L;1F09 0342;;;;N;;;;1F07; 1F10;GREEK SMALL LETTER EPSILON WITH PSILI;Ll;0;L;03B5 0313;;;;N;;;1F18;;1F18 1F11;GREEK SMALL LETTER EPSILON WITH DASIA;Ll;0;L;03B5 0314;;;;N;;;1F19;;1F19 1F12;GREEK SMALL LETTER EPSILON WITH PSILI AND VARIA;Ll;0;L;1F10 0300;;;;N;;;1F1A;;1F1A 1F13;GREEK SMALL LETTER EPSILON WITH DASIA AND VARIA;Ll;0;L;1F11 0300;;;;N;;;1F1B;;1F1B 1F14;GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA;Ll;0;L;1F10 0301;;;;N;;;1F1C;;1F1C 1F15;GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA;Ll;0;L;1F11 0301;;;;N;;;1F1D;;1F1D 1F18;GREEK CAPITAL LETTER EPSILON WITH PSILI;Lu;0;L;0395 0313;;;;N;;;;1F10; 1F19;GREEK CAPITAL LETTER EPSILON WITH DASIA;Lu;0;L;0395 0314;;;;N;;;;1F11; 1F1A;GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA;Lu;0;L;1F18 0300;;;;N;;;;1F12; 1F1B;GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA;Lu;0;L;1F19 0300;;;;N;;;;1F13; 1F1C;GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA;Lu;0;L;1F18 0301;;;;N;;;;1F14; 1F1D;GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA;Lu;0;L;1F19 0301;;;;N;;;;1F15; 1F20;GREEK SMALL LETTER ETA WITH PSILI;Ll;0;L;03B7 0313;;;;N;;;1F28;;1F28 1F21;GREEK SMALL LETTER ETA WITH DASIA;Ll;0;L;03B7 0314;;;;N;;;1F29;;1F29 1F22;GREEK SMALL LETTER ETA WITH PSILI AND VARIA;Ll;0;L;1F20 0300;;;;N;;;1F2A;;1F2A 1F23;GREEK SMALL LETTER ETA WITH DASIA AND VARIA;Ll;0;L;1F21 0300;;;;N;;;1F2B;;1F2B 1F24;GREEK SMALL LETTER ETA WITH PSILI AND OXIA;Ll;0;L;1F20 0301;;;;N;;;1F2C;;1F2C 1F25;GREEK SMALL LETTER ETA WITH DASIA AND OXIA;Ll;0;L;1F21 0301;;;;N;;;1F2D;;1F2D 1F26;GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI;Ll;0;L;1F20 0342;;;;N;;;1F2E;;1F2E 1F27;GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI;Ll;0;L;1F21 0342;;;;N;;;1F2F;;1F2F 1F28;GREEK CAPITAL LETTER ETA WITH PSILI;Lu;0;L;0397 0313;;;;N;;;;1F20; 1F29;GREEK CAPITAL LETTER ETA WITH DASIA;Lu;0;L;0397 0314;;;;N;;;;1F21; 1F2A;GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA;Lu;0;L;1F28 0300;;;;N;;;;1F22; 1F2B;GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA;Lu;0;L;1F29 0300;;;;N;;;;1F23; 1F2C;GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA;Lu;0;L;1F28 0301;;;;N;;;;1F24; 1F2D;GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA;Lu;0;L;1F29 0301;;;;N;;;;1F25; 1F2E;GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI;Lu;0;L;1F28 0342;;;;N;;;;1F26; 1F2F;GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI;Lu;0;L;1F29 0342;;;;N;;;;1F27; 1F30;GREEK SMALL LETTER IOTA WITH PSILI;Ll;0;L;03B9 0313;;;;N;;;1F38;;1F38 1F31;GREEK SMALL LETTER IOTA WITH DASIA;Ll;0;L;03B9 0314;;;;N;;;1F39;;1F39 1F32;GREEK SMALL LETTER IOTA WITH PSILI AND VARIA;Ll;0;L;1F30 0300;;;;N;;;1F3A;;1F3A 1F33;GREEK SMALL LETTER IOTA WITH DASIA AND VARIA;Ll;0;L;1F31 0300;;;;N;;;1F3B;;1F3B 1F34;GREEK SMALL LETTER IOTA WITH PSILI AND OXIA;Ll;0;L;1F30 0301;;;;N;;;1F3C;;1F3C 1F35;GREEK SMALL LETTER IOTA WITH DASIA AND OXIA;Ll;0;L;1F31 0301;;;;N;;;1F3D;;1F3D 1F36;GREEK SMALL LETTER IOTA WITH PSILI AND PERISPOMENI;Ll;0;L;1F30 0342;;;;N;;;1F3E;;1F3E 1F37;GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI;Ll;0;L;1F31 0342;;;;N;;;1F3F;;1F3F 1F38;GREEK CAPITAL LETTER IOTA WITH PSILI;Lu;0;L;0399 0313;;;;N;;;;1F30; 1F39;GREEK CAPITAL LETTER IOTA WITH DASIA;Lu;0;L;0399 0314;;;;N;;;;1F31; 1F3A;GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA;Lu;0;L;1F38 0300;;;;N;;;;1F32; 1F3B;GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA;Lu;0;L;1F39 0300;;;;N;;;;1F33; 1F3C;GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA;Lu;0;L;1F38 0301;;;;N;;;;1F34; 1F3D;GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA;Lu;0;L;1F39 0301;;;;N;;;;1F35; 1F3E;GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI;Lu;0;L;1F38 0342;;;;N;;;;1F36; 1F3F;GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI;Lu;0;L;1F39 0342;;;;N;;;;1F37; 1F40;GREEK SMALL LETTER OMICRON WITH PSILI;Ll;0;L;03BF 0313;;;;N;;;1F48;;1F48 1F41;GREEK SMALL LETTER OMICRON WITH DASIA;Ll;0;L;03BF 0314;;;;N;;;1F49;;1F49 1F42;GREEK SMALL LETTER OMICRON WITH PSILI AND VARIA;Ll;0;L;1F40 0300;;;;N;;;1F4A;;1F4A 1F43;GREEK SMALL LETTER OMICRON WITH DASIA AND VARIA;Ll;0;L;1F41 0300;;;;N;;;1F4B;;1F4B 1F44;GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA;Ll;0;L;1F40 0301;;;;N;;;1F4C;;1F4C 1F45;GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA;Ll;0;L;1F41 0301;;;;N;;;1F4D;;1F4D 1F48;GREEK CAPITAL LETTER OMICRON WITH PSILI;Lu;0;L;039F 0313;;;;N;;;;1F40; 1F49;GREEK CAPITAL LETTER OMICRON WITH DASIA;Lu;0;L;039F 0314;;;;N;;;;1F41; 1F4A;GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA;Lu;0;L;1F48 0300;;;;N;;;;1F42; 1F4B;GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA;Lu;0;L;1F49 0300;;;;N;;;;1F43; 1F4C;GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA;Lu;0;L;1F48 0301;;;;N;;;;1F44; 1F4D;GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA;Lu;0;L;1F49 0301;;;;N;;;;1F45; 1F50;GREEK SMALL LETTER UPSILON WITH PSILI;Ll;0;L;03C5 0313;;;;N;;;;; 1F51;GREEK SMALL LETTER UPSILON WITH DASIA;Ll;0;L;03C5 0314;;;;N;;;1F59;;1F59 1F52;GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA;Ll;0;L;1F50 0300;;;;N;;;;; 1F53;GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA;Ll;0;L;1F51 0300;;;;N;;;1F5B;;1F5B 1F54;GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA;Ll;0;L;1F50 0301;;;;N;;;;; 1F55;GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA;Ll;0;L;1F51 0301;;;;N;;;1F5D;;1F5D 1F56;GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI;Ll;0;L;1F50 0342;;;;N;;;;; 1F57;GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI;Ll;0;L;1F51 0342;;;;N;;;1F5F;;1F5F 1F59;GREEK CAPITAL LETTER UPSILON WITH DASIA;Lu;0;L;03A5 0314;;;;N;;;;1F51; 1F5B;GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA;Lu;0;L;1F59 0300;;;;N;;;;1F53; 1F5D;GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA;Lu;0;L;1F59 0301;;;;N;;;;1F55; 1F5F;GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI;Lu;0;L;1F59 0342;;;;N;;;;1F57; 1F60;GREEK SMALL LETTER OMEGA WITH PSILI;Ll;0;L;03C9 0313;;;;N;;;1F68;;1F68 1F61;GREEK SMALL LETTER OMEGA WITH DASIA;Ll;0;L;03C9 0314;;;;N;;;1F69;;1F69 1F62;GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA;Ll;0;L;1F60 0300;;;;N;;;1F6A;;1F6A 1F63;GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA;Ll;0;L;1F61 0300;;;;N;;;1F6B;;1F6B 1F64;GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA;Ll;0;L;1F60 0301;;;;N;;;1F6C;;1F6C 1F65;GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA;Ll;0;L;1F61 0301;;;;N;;;1F6D;;1F6D 1F66;GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI;Ll;0;L;1F60 0342;;;;N;;;1F6E;;1F6E 1F67;GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI;Ll;0;L;1F61 0342;;;;N;;;1F6F;;1F6F 1F68;GREEK CAPITAL LETTER OMEGA WITH PSILI;Lu;0;L;03A9 0313;;;;N;;;;1F60; 1F69;GREEK CAPITAL LETTER OMEGA WITH DASIA;Lu;0;L;03A9 0314;;;;N;;;;1F61; 1F6A;GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA;Lu;0;L;1F68 0300;;;;N;;;;1F62; 1F6B;GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA;Lu;0;L;1F69 0300;;;;N;;;;1F63; 1F6C;GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA;Lu;0;L;1F68 0301;;;;N;;;;1F64; 1F6D;GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA;Lu;0;L;1F69 0301;;;;N;;;;1F65; 1F6E;GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI;Lu;0;L;1F68 0342;;;;N;;;;1F66; 1F6F;GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI;Lu;0;L;1F69 0342;;;;N;;;;1F67; 1F70;GREEK SMALL LETTER ALPHA WITH VARIA;Ll;0;L;03B1 0300;;;;N;;;1FBA;;1FBA 1F71;GREEK SMALL LETTER ALPHA WITH OXIA;Ll;0;L;03AC;;;;N;;;1FBB;;1FBB 1F72;GREEK SMALL LETTER EPSILON WITH VARIA;Ll;0;L;03B5 0300;;;;N;;;1FC8;;1FC8 1F73;GREEK SMALL LETTER EPSILON WITH OXIA;Ll;0;L;03AD;;;;N;;;1FC9;;1FC9 1F74;GREEK SMALL LETTER ETA WITH VARIA;Ll;0;L;03B7 0300;;;;N;;;1FCA;;1FCA 1F75;GREEK SMALL LETTER ETA WITH OXIA;Ll;0;L;03AE;;;;N;;;1FCB;;1FCB 1F76;GREEK SMALL LETTER IOTA WITH VARIA;Ll;0;L;03B9 0300;;;;N;;;1FDA;;1FDA 1F77;GREEK SMALL LETTER IOTA WITH OXIA;Ll;0;L;03AF;;;;N;;;1FDB;;1FDB 1F78;GREEK SMALL LETTER OMICRON WITH VARIA;Ll;0;L;03BF 0300;;;;N;;;1FF8;;1FF8 1F79;GREEK SMALL LETTER OMICRON WITH OXIA;Ll;0;L;03CC;;;;N;;;1FF9;;1FF9 1F7A;GREEK SMALL LETTER UPSILON WITH VARIA;Ll;0;L;03C5 0300;;;;N;;;1FEA;;1FEA 1F7B;GREEK SMALL LETTER UPSILON WITH OXIA;Ll;0;L;03CD;;;;N;;;1FEB;;1FEB 1F7C;GREEK SMALL LETTER OMEGA WITH VARIA;Ll;0;L;03C9 0300;;;;N;;;1FFA;;1FFA 1F7D;GREEK SMALL LETTER OMEGA WITH OXIA;Ll;0;L;03CE;;;;N;;;1FFB;;1FFB 1F80;GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI;Ll;0;L;1F00 0345;;;;N;;;1F88;;1F88 1F81;GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI;Ll;0;L;1F01 0345;;;;N;;;1F89;;1F89 1F82;GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F02 0345;;;;N;;;1F8A;;1F8A 1F83;GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F03 0345;;;;N;;;1F8B;;1F8B 1F84;GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F04 0345;;;;N;;;1F8C;;1F8C 1F85;GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F05 0345;;;;N;;;1F8D;;1F8D 1F86;GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F06 0345;;;;N;;;1F8E;;1F8E 1F87;GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F07 0345;;;;N;;;1F8F;;1F8F 1F88;GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI;Lt;0;L;1F08 0345;;;;N;;;;1F80; 1F89;GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI;Lt;0;L;1F09 0345;;;;N;;;;1F81; 1F8A;GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI;Lt;0;L;1F0A 0345;;;;N;;;;1F82; 1F8B;GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI;Lt;0;L;1F0B 0345;;;;N;;;;1F83; 1F8C;GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI;Lt;0;L;1F0C 0345;;;;N;;;;1F84; 1F8D;GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI;Lt;0;L;1F0D 0345;;;;N;;;;1F85; 1F8E;GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI;Lt;0;L;1F0E 0345;;;;N;;;;1F86; 1F8F;GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI;Lt;0;L;1F0F 0345;;;;N;;;;1F87; 1F90;GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI;Ll;0;L;1F20 0345;;;;N;;;1F98;;1F98 1F91;GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI;Ll;0;L;1F21 0345;;;;N;;;1F99;;1F99 1F92;GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F22 0345;;;;N;;;1F9A;;1F9A 1F93;GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F23 0345;;;;N;;;1F9B;;1F9B 1F94;GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F24 0345;;;;N;;;1F9C;;1F9C 1F95;GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F25 0345;;;;N;;;1F9D;;1F9D 1F96;GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F26 0345;;;;N;;;1F9E;;1F9E 1F97;GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F27 0345;;;;N;;;1F9F;;1F9F 1F98;GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI;Lt;0;L;1F28 0345;;;;N;;;;1F90; 1F99;GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI;Lt;0;L;1F29 0345;;;;N;;;;1F91; 1F9A;GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI;Lt;0;L;1F2A 0345;;;;N;;;;1F92; 1F9B;GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI;Lt;0;L;1F2B 0345;;;;N;;;;1F93; 1F9C;GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI;Lt;0;L;1F2C 0345;;;;N;;;;1F94; 1F9D;GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI;Lt;0;L;1F2D 0345;;;;N;;;;1F95; 1F9E;GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI;Lt;0;L;1F2E 0345;;;;N;;;;1F96; 1F9F;GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI;Lt;0;L;1F2F 0345;;;;N;;;;1F97; 1FA0;GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI;Ll;0;L;1F60 0345;;;;N;;;1FA8;;1FA8 1FA1;GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI;Ll;0;L;1F61 0345;;;;N;;;1FA9;;1FA9 1FA2;GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F62 0345;;;;N;;;1FAA;;1FAA 1FA3;GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F63 0345;;;;N;;;1FAB;;1FAB 1FA4;GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F64 0345;;;;N;;;1FAC;;1FAC 1FA5;GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F65 0345;;;;N;;;1FAD;;1FAD 1FA6;GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F66 0345;;;;N;;;1FAE;;1FAE 1FA7;GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F67 0345;;;;N;;;1FAF;;1FAF 1FA8;GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI;Lt;0;L;1F68 0345;;;;N;;;;1FA0; 1FA9;GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI;Lt;0;L;1F69 0345;;;;N;;;;1FA1; 1FAA;GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI;Lt;0;L;1F6A 0345;;;;N;;;;1FA2; 1FAB;GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI;Lt;0;L;1F6B 0345;;;;N;;;;1FA3; 1FAC;GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI;Lt;0;L;1F6C 0345;;;;N;;;;1FA4; 1FAD;GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI;Lt;0;L;1F6D 0345;;;;N;;;;1FA5; 1FAE;GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI;Lt;0;L;1F6E 0345;;;;N;;;;1FA6; 1FAF;GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI;Lt;0;L;1F6F 0345;;;;N;;;;1FA7; 1FB0;GREEK SMALL LETTER ALPHA WITH VRACHY;Ll;0;L;03B1 0306;;;;N;;;1FB8;;1FB8 1FB1;GREEK SMALL LETTER ALPHA WITH MACRON;Ll;0;L;03B1 0304;;;;N;;;1FB9;;1FB9 1FB2;GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI;Ll;0;L;1F70 0345;;;;N;;;;; 1FB3;GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI;Ll;0;L;03B1 0345;;;;N;;;1FBC;;1FBC 1FB4;GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI;Ll;0;L;03AC 0345;;;;N;;;;; 1FB6;GREEK SMALL LETTER ALPHA WITH PERISPOMENI;Ll;0;L;03B1 0342;;;;N;;;;; 1FB7;GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1FB6 0345;;;;N;;;;; 1FB8;GREEK CAPITAL LETTER ALPHA WITH VRACHY;Lu;0;L;0391 0306;;;;N;;;;1FB0; 1FB9;GREEK CAPITAL LETTER ALPHA WITH MACRON;Lu;0;L;0391 0304;;;;N;;;;1FB1; 1FBA;GREEK CAPITAL LETTER ALPHA WITH VARIA;Lu;0;L;0391 0300;;;;N;;;;1F70; 1FBB;GREEK CAPITAL LETTER ALPHA WITH OXIA;Lu;0;L;0386;;;;N;;;;1F71; 1FBC;GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI;Lt;0;L;0391 0345;;;;N;;;;1FB3; 1FBD;GREEK KORONIS;Sk;0;ON; 0020 0313;;;;N;;;;; 1FBE;GREEK PROSGEGRAMMENI;Ll;0;L;03B9;;;;N;;;0399;;0399 1FBF;GREEK PSILI;Sk;0;ON; 0020 0313;;;;N;;;;; 1FC0;GREEK PERISPOMENI;Sk;0;ON; 0020 0342;;;;N;;;;; 1FC1;GREEK DIALYTIKA AND PERISPOMENI;Sk;0;ON;00A8 0342;;;;N;;;;; 1FC2;GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI;Ll;0;L;1F74 0345;;;;N;;;;; 1FC3;GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI;Ll;0;L;03B7 0345;;;;N;;;1FCC;;1FCC 1FC4;GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI;Ll;0;L;03AE 0345;;;;N;;;;; 1FC6;GREEK SMALL LETTER ETA WITH PERISPOMENI;Ll;0;L;03B7 0342;;;;N;;;;; 1FC7;GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1FC6 0345;;;;N;;;;; 1FC8;GREEK CAPITAL LETTER EPSILON WITH VARIA;Lu;0;L;0395 0300;;;;N;;;;1F72; 1FC9;GREEK CAPITAL LETTER EPSILON WITH OXIA;Lu;0;L;0388;;;;N;;;;1F73; 1FCA;GREEK CAPITAL LETTER ETA WITH VARIA;Lu;0;L;0397 0300;;;;N;;;;1F74; 1FCB;GREEK CAPITAL LETTER ETA WITH OXIA;Lu;0;L;0389;;;;N;;;;1F75; 1FCC;GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI;Lt;0;L;0397 0345;;;;N;;;;1FC3; 1FCD;GREEK PSILI AND VARIA;Sk;0;ON;1FBF 0300;;;;N;;;;; 1FCE;GREEK PSILI AND OXIA;Sk;0;ON;1FBF 0301;;;;N;;;;; 1FCF;GREEK PSILI AND PERISPOMENI;Sk;0;ON;1FBF 0342;;;;N;;;;; 1FD0;GREEK SMALL LETTER IOTA WITH VRACHY;Ll;0;L;03B9 0306;;;;N;;;1FD8;;1FD8 1FD1;GREEK SMALL LETTER IOTA WITH MACRON;Ll;0;L;03B9 0304;;;;N;;;1FD9;;1FD9 1FD2;GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA;Ll;0;L;03CA 0300;;;;N;;;;; 1FD3;GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA;Ll;0;L;0390;;;;N;;;;; 1FD6;GREEK SMALL LETTER IOTA WITH PERISPOMENI;Ll;0;L;03B9 0342;;;;N;;;;; 1FD7;GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI;Ll;0;L;03CA 0342;;;;N;;;;; 1FD8;GREEK CAPITAL LETTER IOTA WITH VRACHY;Lu;0;L;0399 0306;;;;N;;;;1FD0; 1FD9;GREEK CAPITAL LETTER IOTA WITH MACRON;Lu;0;L;0399 0304;;;;N;;;;1FD1; 1FDA;GREEK CAPITAL LETTER IOTA WITH VARIA;Lu;0;L;0399 0300;;;;N;;;;1F76; 1FDB;GREEK CAPITAL LETTER IOTA WITH OXIA;Lu;0;L;038A;;;;N;;;;1F77; 1FDD;GREEK DASIA AND VARIA;Sk;0;ON;1FFE 0300;;;;N;;;;; 1FDE;GREEK DASIA AND OXIA;Sk;0;ON;1FFE 0301;;;;N;;;;; 1FDF;GREEK DASIA AND PERISPOMENI;Sk;0;ON;1FFE 0342;;;;N;;;;; 1FE0;GREEK SMALL LETTER UPSILON WITH VRACHY;Ll;0;L;03C5 0306;;;;N;;;1FE8;;1FE8 1FE1;GREEK SMALL LETTER UPSILON WITH MACRON;Ll;0;L;03C5 0304;;;;N;;;1FE9;;1FE9 1FE2;GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA;Ll;0;L;03CB 0300;;;;N;;;;; 1FE3;GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA;Ll;0;L;03B0;;;;N;;;;; 1FE4;GREEK SMALL LETTER RHO WITH PSILI;Ll;0;L;03C1 0313;;;;N;;;;; 1FE5;GREEK SMALL LETTER RHO WITH DASIA;Ll;0;L;03C1 0314;;;;N;;;1FEC;;1FEC 1FE6;GREEK SMALL LETTER UPSILON WITH PERISPOMENI;Ll;0;L;03C5 0342;;;;N;;;;; 1FE7;GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI;Ll;0;L;03CB 0342;;;;N;;;;; 1FE8;GREEK CAPITAL LETTER UPSILON WITH VRACHY;Lu;0;L;03A5 0306;;;;N;;;;1FE0; 1FE9;GREEK CAPITAL LETTER UPSILON WITH MACRON;Lu;0;L;03A5 0304;;;;N;;;;1FE1; 1FEA;GREEK CAPITAL LETTER UPSILON WITH VARIA;Lu;0;L;03A5 0300;;;;N;;;;1F7A; 1FEB;GREEK CAPITAL LETTER UPSILON WITH OXIA;Lu;0;L;038E;;;;N;;;;1F7B; 1FEC;GREEK CAPITAL LETTER RHO WITH DASIA;Lu;0;L;03A1 0314;;;;N;;;;1FE5; 1FED;GREEK DIALYTIKA AND VARIA;Sk;0;ON;00A8 0300;;;;N;;;;; 1FEE;GREEK DIALYTIKA AND OXIA;Sk;0;ON;0385;;;;N;;;;; 1FEF;GREEK VARIA;Sk;0;ON;0060;;;;N;;;;; 1FF2;GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI;Ll;0;L;1F7C 0345;;;;N;;;;; 1FF3;GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI;Ll;0;L;03C9 0345;;;;N;;;1FFC;;1FFC 1FF4;GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI;Ll;0;L;03CE 0345;;;;N;;;;; 1FF6;GREEK SMALL LETTER OMEGA WITH PERISPOMENI;Ll;0;L;03C9 0342;;;;N;;;;; 1FF7;GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1FF6 0345;;;;N;;;;; 1FF8;GREEK CAPITAL LETTER OMICRON WITH VARIA;Lu;0;L;039F 0300;;;;N;;;;1F78; 1FF9;GREEK CAPITAL LETTER OMICRON WITH OXIA;Lu;0;L;038C;;;;N;;;;1F79; 1FFA;GREEK CAPITAL LETTER OMEGA WITH VARIA;Lu;0;L;03A9 0300;;;;N;;;;1F7C; 1FFB;GREEK CAPITAL LETTER OMEGA WITH OXIA;Lu;0;L;038F;;;;N;;;;1F7D; 1FFC;GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI;Lt;0;L;03A9 0345;;;;N;;;;1FF3; 1FFD;GREEK OXIA;Sk;0;ON;00B4;;;;N;;;;; 1FFE;GREEK DASIA;Sk;0;ON; 0020 0314;;;;N;;;;; 2000;EN QUAD;Zs;0;WS;2002;;;;N;;;;; 2001;EM QUAD;Zs;0;WS;2003;;;;N;;;;; 2002;EN SPACE;Zs;0;WS; 0020;;;;N;;;;; 2003;EM SPACE;Zs;0;WS; 0020;;;;N;;;;; 2004;THREE-PER-EM SPACE;Zs;0;WS; 0020;;;;N;;;;; 2005;FOUR-PER-EM SPACE;Zs;0;WS; 0020;;;;N;;;;; 2006;SIX-PER-EM SPACE;Zs;0;WS; 0020;;;;N;;;;; 2007;FIGURE SPACE;Zs;0;WS; 0020;;;;N;;;;; 2008;PUNCTUATION SPACE;Zs;0;WS; 0020;;;;N;;;;; 2009;THIN SPACE;Zs;0;WS; 0020;;;;N;;;;; 200A;HAIR SPACE;Zs;0;WS; 0020;;;;N;;;;; 200B;ZERO WIDTH SPACE;Zs;0;BN;;;;;N;;;;; 200C;ZERO WIDTH NON-JOINER;Cf;0;BN;;;;;N;;;;; 200D;ZERO WIDTH JOINER;Cf;0;BN;;;;;N;;;;; 200E;LEFT-TO-RIGHT MARK;Cf;0;L;;;;;N;;;;; 200F;RIGHT-TO-LEFT MARK;Cf;0;R;;;;;N;;;;; 2010;HYPHEN;Pd;0;ON;;;;;N;;;;; 2011;NON-BREAKING HYPHEN;Pd;0;ON; 2010;;;;N;;;;; 2012;FIGURE DASH;Pd;0;ON;;;;;N;;;;; 2013;EN DASH;Pd;0;ON;;;;;N;;;;; 2014;EM DASH;Pd;0;ON;;;;;N;;;;; 2015;HORIZONTAL BAR;Pd;0;ON;;;;;N;QUOTATION DASH;;;; 2016;DOUBLE VERTICAL LINE;Po;0;ON;;;;;N;DOUBLE VERTICAL BAR;;;; 2017;DOUBLE LOW LINE;Po;0;ON; 0020 0333;;;;N;SPACING DOUBLE UNDERSCORE;;;; 2018;LEFT SINGLE QUOTATION MARK;Pi;0;ON;;;;;N;SINGLE TURNED COMMA QUOTATION MARK;;;; 2019;RIGHT SINGLE QUOTATION MARK;Pf;0;ON;;;;;N;SINGLE COMMA QUOTATION MARK;;;; 201A;SINGLE LOW-9 QUOTATION MARK;Ps;0;ON;;;;;N;LOW SINGLE COMMA QUOTATION MARK;;;; 201B;SINGLE HIGH-REVERSED-9 QUOTATION MARK;Pi;0;ON;;;;;N;SINGLE REVERSED COMMA QUOTATION MARK;;;; 201C;LEFT DOUBLE QUOTATION MARK;Pi;0;ON;;;;;N;DOUBLE TURNED COMMA QUOTATION MARK;;;; 201D;RIGHT DOUBLE QUOTATION MARK;Pf;0;ON;;;;;N;DOUBLE COMMA QUOTATION MARK;;;; 201E;DOUBLE LOW-9 QUOTATION MARK;Ps;0;ON;;;;;N;LOW DOUBLE COMMA QUOTATION MARK;;;; 201F;DOUBLE HIGH-REVERSED-9 QUOTATION MARK;Pi;0;ON;;;;;N;DOUBLE REVERSED COMMA QUOTATION MARK;;;; 2020;DAGGER;Po;0;ON;;;;;N;;;;; 2021;DOUBLE DAGGER;Po;0;ON;;;;;N;;;;; 2022;BULLET;Po;0;ON;;;;;N;;;;; 2023;TRIANGULAR BULLET;Po;0;ON;;;;;N;;;;; 2024;ONE DOT LEADER;Po;0;ON; 002E;;;;N;;;;; 2025;TWO DOT LEADER;Po;0;ON; 002E 002E;;;;N;;;;; 2026;HORIZONTAL ELLIPSIS;Po;0;ON; 002E 002E 002E;;;;N;;;;; 2027;HYPHENATION POINT;Po;0;ON;;;;;N;;;;; 2028;LINE SEPARATOR;Zl;0;WS;;;;;N;;;;; 2029;PARAGRAPH SEPARATOR;Zp;0;B;;;;;N;;;;; 202A;LEFT-TO-RIGHT EMBEDDING;Cf;0;LRE;;;;;N;;;;; 202B;RIGHT-TO-LEFT EMBEDDING;Cf;0;RLE;;;;;N;;;;; 202C;POP DIRECTIONAL FORMATTING;Cf;0;PDF;;;;;N;;;;; 202D;LEFT-TO-RIGHT OVERRIDE;Cf;0;LRO;;;;;N;;;;; 202E;RIGHT-TO-LEFT OVERRIDE;Cf;0;RLO;;;;;N;;;;; 202F;NARROW NO-BREAK SPACE;Zs;0;WS; 0020;;;;N;;;;; 2030;PER MILLE SIGN;Po;0;ET;;;;;N;;;;; 2031;PER TEN THOUSAND SIGN;Po;0;ET;;;;;N;;;;; 2032;PRIME;Po;0;ET;;;;;N;;;;; 2033;DOUBLE PRIME;Po;0;ET; 2032 2032;;;;N;;;;; 2034;TRIPLE PRIME;Po;0;ET; 2032 2032 2032;;;;N;;;;; 2035;REVERSED PRIME;Po;0;ON;;;;;N;;;;; 2036;REVERSED DOUBLE PRIME;Po;0;ON; 2035 2035;;;;N;;;;; 2037;REVERSED TRIPLE PRIME;Po;0;ON; 2035 2035 2035;;;;N;;;;; 2038;CARET;Po;0;ON;;;;;N;;;;; 2039;SINGLE LEFT-POINTING ANGLE QUOTATION MARK;Pi;0;ON;;;;;Y;LEFT POINTING SINGLE GUILLEMET;;;; 203A;SINGLE RIGHT-POINTING ANGLE QUOTATION MARK;Pf;0;ON;;;;;Y;RIGHT POINTING SINGLE GUILLEMET;;;; 203B;REFERENCE MARK;Po;0;ON;;;;;N;;;;; 203C;DOUBLE EXCLAMATION MARK;Po;0;ON; 0021 0021;;;;N;;;;; 203D;INTERROBANG;Po;0;ON;;;;;N;;;;; 203E;OVERLINE;Po;0;ON; 0020 0305;;;;N;SPACING OVERSCORE;;;; 203F;UNDERTIE;Pc;0;ON;;;;;N;;Enotikon;;; 2040;CHARACTER TIE;Pc;0;ON;;;;;N;;;;; 2041;CARET INSERTION POINT;Po;0;ON;;;;;N;;;;; 2042;ASTERISM;Po;0;ON;;;;;N;;;;; 2043;HYPHEN BULLET;Po;0;ON;;;;;N;;;;; 2044;FRACTION SLASH;Sm;0;ON;;;;;N;;;;; 2045;LEFT SQUARE BRACKET WITH QUILL;Ps;0;ON;;;;;Y;;;;; 2046;RIGHT SQUARE BRACKET WITH QUILL;Pe;0;ON;;;;;Y;;;;; 2048;QUESTION EXCLAMATION MARK;Po;0;ON; 003F 0021;;;;N;;;;; 2049;EXCLAMATION QUESTION MARK;Po;0;ON; 0021 003F;;;;N;;;;; 204A;TIRONIAN SIGN ET;Po;0;ON;;;;;N;;;;; 204B;REVERSED PILCROW SIGN;Po;0;ON;;;;;N;;;;; 204C;BLACK LEFTWARDS BULLET;Po;0;ON;;;;;N;;;;; 204D;BLACK RIGHTWARDS BULLET;Po;0;ON;;;;;N;;;;; 206A;INHIBIT SYMMETRIC SWAPPING;Cf;0;BN;;;;;N;;;;; 206B;ACTIVATE SYMMETRIC SWAPPING;Cf;0;BN;;;;;N;;;;; 206C;INHIBIT ARABIC FORM SHAPING;Cf;0;BN;;;;;N;;;;; 206D;ACTIVATE ARABIC FORM SHAPING;Cf;0;BN;;;;;N;;;;; 206E;NATIONAL DIGIT SHAPES;Cf;0;BN;;;;;N;;;;; 206F;NOMINAL DIGIT SHAPES;Cf;0;BN;;;;;N;;;;; 2070;SUPERSCRIPT ZERO;No;0;EN; 0030;0;0;0;N;SUPERSCRIPT DIGIT ZERO;;;; 2074;SUPERSCRIPT FOUR;No;0;EN; 0034;4;4;4;N;SUPERSCRIPT DIGIT FOUR;;;; 2075;SUPERSCRIPT FIVE;No;0;EN; 0035;5;5;5;N;SUPERSCRIPT DIGIT FIVE;;;; 2076;SUPERSCRIPT SIX;No;0;EN; 0036;6;6;6;N;SUPERSCRIPT DIGIT SIX;;;; 2077;SUPERSCRIPT SEVEN;No;0;EN; 0037;7;7;7;N;SUPERSCRIPT DIGIT SEVEN;;;; 2078;SUPERSCRIPT EIGHT;No;0;EN; 0038;8;8;8;N;SUPERSCRIPT DIGIT EIGHT;;;; 2079;SUPERSCRIPT NINE;No;0;EN; 0039;9;9;9;N;SUPERSCRIPT DIGIT NINE;;;; 207A;SUPERSCRIPT PLUS SIGN;Sm;0;ET; 002B;;;;N;;;;; 207B;SUPERSCRIPT MINUS;Sm;0;ET; 2212;;;;N;SUPERSCRIPT HYPHEN-MINUS;;;; 207C;SUPERSCRIPT EQUALS SIGN;Sm;0;ON; 003D;;;;N;;;;; 207D;SUPERSCRIPT LEFT PARENTHESIS;Ps;0;ON; 0028;;;;Y;SUPERSCRIPT OPENING PARENTHESIS;;;; 207E;SUPERSCRIPT RIGHT PARENTHESIS;Pe;0;ON; 0029;;;;Y;SUPERSCRIPT CLOSING PARENTHESIS;;;; 207F;SUPERSCRIPT LATIN SMALL LETTER N;Ll;0;L; 006E;;;;N;;;;; 2080;SUBSCRIPT ZERO;No;0;EN; 0030;0;0;0;N;SUBSCRIPT DIGIT ZERO;;;; 2081;SUBSCRIPT ONE;No;0;EN; 0031;1;1;1;N;SUBSCRIPT DIGIT ONE;;;; 2082;SUBSCRIPT TWO;No;0;EN; 0032;2;2;2;N;SUBSCRIPT DIGIT TWO;;;; 2083;SUBSCRIPT THREE;No;0;EN; 0033;3;3;3;N;SUBSCRIPT DIGIT THREE;;;; 2084;SUBSCRIPT FOUR;No;0;EN; 0034;4;4;4;N;SUBSCRIPT DIGIT FOUR;;;; 2085;SUBSCRIPT FIVE;No;0;EN; 0035;5;5;5;N;SUBSCRIPT DIGIT FIVE;;;; 2086;SUBSCRIPT SIX;No;0;EN; 0036;6;6;6;N;SUBSCRIPT DIGIT SIX;;;; 2087;SUBSCRIPT SEVEN;No;0;EN; 0037;7;7;7;N;SUBSCRIPT DIGIT SEVEN;;;; 2088;SUBSCRIPT EIGHT;No;0;EN; 0038;8;8;8;N;SUBSCRIPT DIGIT EIGHT;;;; 2089;SUBSCRIPT NINE;No;0;EN; 0039;9;9;9;N;SUBSCRIPT DIGIT NINE;;;; 208A;SUBSCRIPT PLUS SIGN;Sm;0;ET; 002B;;;;N;;;;; 208B;SUBSCRIPT MINUS;Sm;0;ET; 2212;;;;N;SUBSCRIPT HYPHEN-MINUS;;;; 208C;SUBSCRIPT EQUALS SIGN;Sm;0;ON; 003D;;;;N;;;;; 208D;SUBSCRIPT LEFT PARENTHESIS;Ps;0;ON; 0028;;;;Y;SUBSCRIPT OPENING PARENTHESIS;;;; 208E;SUBSCRIPT RIGHT PARENTHESIS;Pe;0;ON; 0029;;;;Y;SUBSCRIPT CLOSING PARENTHESIS;;;; 20A0;EURO-CURRENCY SIGN;Sc;0;ET;;;;;N;;;;; 20A1;COLON SIGN;Sc;0;ET;;;;;N;;;;; 20A2;CRUZEIRO SIGN;Sc;0;ET;;;;;N;;;;; 20A3;FRENCH FRANC SIGN;Sc;0;ET;;;;;N;;;;; 20A4;LIRA SIGN;Sc;0;ET;;;;;N;;;;; 20A5;MILL SIGN;Sc;0;ET;;;;;N;;;;; 20A6;NAIRA SIGN;Sc;0;ET;;;;;N;;;;; 20A7;PESETA SIGN;Sc;0;ET;;;;;N;;;;; 20A8;RUPEE SIGN;Sc;0;ET; 0052 0073;;;;N;;;;; 20A9;WON SIGN;Sc;0;ET;;;;;N;;;;; 20AA;NEW SHEQEL SIGN;Sc;0;ET;;;;;N;;;;; 20AB;DONG SIGN;Sc;0;ET;;;;;N;;;;; 20AC;EURO SIGN;Sc;0;ET;;;;;N;;;;; 20AD;KIP SIGN;Sc;0;ET;;;;;N;;;;; 20AE;TUGRIK SIGN;Sc;0;ET;;;;;N;;;;; 20AF;DRACHMA SIGN;Sc;0;ET;;;;;N;;;;; 20D0;COMBINING LEFT HARPOON ABOVE;Mn;230;NSM;;;;;N;NON-SPACING LEFT HARPOON ABOVE;;;; 20D1;COMBINING RIGHT HARPOON ABOVE;Mn;230;NSM;;;;;N;NON-SPACING RIGHT HARPOON ABOVE;;;; 20D2;COMBINING LONG VERTICAL LINE OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING LONG VERTICAL BAR OVERLAY;;;; 20D3;COMBINING SHORT VERTICAL LINE OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING SHORT VERTICAL BAR OVERLAY;;;; 20D4;COMBINING ANTICLOCKWISE ARROW ABOVE;Mn;230;NSM;;;;;N;NON-SPACING ANTICLOCKWISE ARROW ABOVE;;;; 20D5;COMBINING CLOCKWISE ARROW ABOVE;Mn;230;NSM;;;;;N;NON-SPACING CLOCKWISE ARROW ABOVE;;;; 20D6;COMBINING LEFT ARROW ABOVE;Mn;230;NSM;;;;;N;NON-SPACING LEFT ARROW ABOVE;;;; 20D7;COMBINING RIGHT ARROW ABOVE;Mn;230;NSM;;;;;N;NON-SPACING RIGHT ARROW ABOVE;;;; 20D8;COMBINING RING OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING RING OVERLAY;;;; 20D9;COMBINING CLOCKWISE RING OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING CLOCKWISE RING OVERLAY;;;; 20DA;COMBINING ANTICLOCKWISE RING OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING ANTICLOCKWISE RING OVERLAY;;;; 20DB;COMBINING THREE DOTS ABOVE;Mn;230;NSM;;;;;N;NON-SPACING THREE DOTS ABOVE;;;; 20DC;COMBINING FOUR DOTS ABOVE;Mn;230;NSM;;;;;N;NON-SPACING FOUR DOTS ABOVE;;;; 20DD;COMBINING ENCLOSING CIRCLE;Me;0;NSM;;;;;N;ENCLOSING CIRCLE;;;; 20DE;COMBINING ENCLOSING SQUARE;Me;0;NSM;;;;;N;ENCLOSING SQUARE;;;; 20DF;COMBINING ENCLOSING DIAMOND;Me;0;NSM;;;;;N;ENCLOSING DIAMOND;;;; 20E0;COMBINING ENCLOSING CIRCLE BACKSLASH;Me;0;NSM;;;;;N;ENCLOSING CIRCLE SLASH;;;; 20E1;COMBINING LEFT RIGHT ARROW ABOVE;Mn;230;NSM;;;;;N;NON-SPACING LEFT RIGHT ARROW ABOVE;;;; 20E2;COMBINING ENCLOSING SCREEN;Me;0;NSM;;;;;N;;;;; 20E3;COMBINING ENCLOSING KEYCAP;Me;0;NSM;;;;;N;;;;; 2100;ACCOUNT OF;So;0;ON; 0061 002F 0063;;;;N;;;;; 2101;ADDRESSED TO THE SUBJECT;So;0;ON; 0061 002F 0073;;;;N;;;;; 2102;DOUBLE-STRUCK CAPITAL C;Lu;0;L; 0043;;;;N;DOUBLE-STRUCK C;;;; 2103;DEGREE CELSIUS;So;0;ON; 00B0 0043;;;;N;DEGREES CENTIGRADE;;;; 2104;CENTRE LINE SYMBOL;So;0;ON;;;;;N;C L SYMBOL;;;; 2105;CARE OF;So;0;ON; 0063 002F 006F;;;;N;;;;; 2106;CADA UNA;So;0;ON; 0063 002F 0075;;;;N;;;;; 2107;EULER CONSTANT;Lu;0;L; 0190;;;;N;EULERS;;;; 2108;SCRUPLE;So;0;ON;;;;;N;;;;; 2109;DEGREE FAHRENHEIT;So;0;ON; 00B0 0046;;;;N;DEGREES FAHRENHEIT;;;; 210A;SCRIPT SMALL G;Ll;0;L; 0067;;;;N;;;;; 210B;SCRIPT CAPITAL H;Lu;0;L; 0048;;;;N;SCRIPT H;;;; 210C;BLACK-LETTER CAPITAL H;Lu;0;L; 0048;;;;N;BLACK-LETTER H;;;; 210D;DOUBLE-STRUCK CAPITAL H;Lu;0;L; 0048;;;;N;DOUBLE-STRUCK H;;;; 210E;PLANCK CONSTANT;Ll;0;L; 0068;;;;N;;;;; 210F;PLANCK CONSTANT OVER TWO PI;Ll;0;L; 0127;;;;N;PLANCK CONSTANT OVER 2 PI;;;; 2110;SCRIPT CAPITAL I;Lu;0;L; 0049;;;;N;SCRIPT I;;;; 2111;BLACK-LETTER CAPITAL I;Lu;0;L; 0049;;;;N;BLACK-LETTER I;;;; 2112;SCRIPT CAPITAL L;Lu;0;L; 004C;;;;N;SCRIPT L;;;; 2113;SCRIPT SMALL L;Ll;0;L; 006C;;;;N;;;;; 2114;L B BAR SYMBOL;So;0;ON;;;;;N;;;;; 2115;DOUBLE-STRUCK CAPITAL N;Lu;0;L; 004E;;;;N;DOUBLE-STRUCK N;;;; 2116;NUMERO SIGN;So;0;ON; 004E 006F;;;;N;NUMERO;;;; 2117;SOUND RECORDING COPYRIGHT;So;0;ON;;;;;N;;;;; 2118;SCRIPT CAPITAL P;So;0;ON;;;;;N;SCRIPT P;;;; 2119;DOUBLE-STRUCK CAPITAL P;Lu;0;L; 0050;;;;N;DOUBLE-STRUCK P;;;; 211A;DOUBLE-STRUCK CAPITAL Q;Lu;0;L; 0051;;;;N;DOUBLE-STRUCK Q;;;; 211B;SCRIPT CAPITAL R;Lu;0;L; 0052;;;;N;SCRIPT R;;;; 211C;BLACK-LETTER CAPITAL R;Lu;0;L; 0052;;;;N;BLACK-LETTER R;;;; 211D;DOUBLE-STRUCK CAPITAL R;Lu;0;L; 0052;;;;N;DOUBLE-STRUCK R;;;; 211E;PRESCRIPTION TAKE;So;0;ON;;;;;N;;;;; 211F;RESPONSE;So;0;ON;;;;;N;;;;; 2120;SERVICE MARK;So;0;ON; 0053 004D;;;;N;;;;; 2121;TELEPHONE SIGN;So;0;ON; 0054 0045 004C;;;;N;T E L SYMBOL;;;; 2122;TRADE MARK SIGN;So;0;ON; 0054 004D;;;;N;TRADEMARK;;;; 2123;VERSICLE;So;0;ON;;;;;N;;;;; 2124;DOUBLE-STRUCK CAPITAL Z;Lu;0;L; 005A;;;;N;DOUBLE-STRUCK Z;;;; 2125;OUNCE SIGN;So;0;ON;;;;;N;OUNCE;;;; 2126;OHM SIGN;Lu;0;L;03A9;;;;N;OHM;;;03C9; 2127;INVERTED OHM SIGN;So;0;ON;;;;;N;MHO;;;; 2128;BLACK-LETTER CAPITAL Z;Lu;0;L; 005A;;;;N;BLACK-LETTER Z;;;; 2129;TURNED GREEK SMALL LETTER IOTA;So;0;ON;;;;;N;;;;; 212A;KELVIN SIGN;Lu;0;L;004B;;;;N;DEGREES KELVIN;;;006B; 212B;ANGSTROM SIGN;Lu;0;L;00C5;;;;N;ANGSTROM UNIT;;;00E5; 212C;SCRIPT CAPITAL B;Lu;0;L; 0042;;;;N;SCRIPT B;;;; 212D;BLACK-LETTER CAPITAL C;Lu;0;L; 0043;;;;N;BLACK-LETTER C;;;; 212E;ESTIMATED SYMBOL;So;0;ET;;;;;N;;;;; 212F;SCRIPT SMALL E;Ll;0;L; 0065;;;;N;;;;; 2130;SCRIPT CAPITAL E;Lu;0;L; 0045;;;;N;SCRIPT E;;;; 2131;SCRIPT CAPITAL F;Lu;0;L; 0046;;;;N;SCRIPT F;;;; 2132;TURNED CAPITAL F;So;0;ON;;;;;N;TURNED F;;;; 2133;SCRIPT CAPITAL M;Lu;0;L; 004D;;;;N;SCRIPT M;;;; 2134;SCRIPT SMALL O;Ll;0;L; 006F;;;;N;;;;; 2135;ALEF SYMBOL;Lo;0;L; 05D0;;;;N;FIRST TRANSFINITE CARDINAL;;;; 2136;BET SYMBOL;Lo;0;L; 05D1;;;;N;SECOND TRANSFINITE CARDINAL;;;; 2137;GIMEL SYMBOL;Lo;0;L; 05D2;;;;N;THIRD TRANSFINITE CARDINAL;;;; 2138;DALET SYMBOL;Lo;0;L; 05D3;;;;N;FOURTH TRANSFINITE CARDINAL;;;; 2139;INFORMATION SOURCE;Ll;0;L; 0069;;;;N;;;;; 213A;ROTATED CAPITAL Q;So;0;ON;;;;;N;;;;; 2153;VULGAR FRACTION ONE THIRD;No;0;ON; 0031 2044 0033;;;1/3;N;FRACTION ONE THIRD;;;; 2154;VULGAR FRACTION TWO THIRDS;No;0;ON; 0032 2044 0033;;;2/3;N;FRACTION TWO THIRDS;;;; 2155;VULGAR FRACTION ONE FIFTH;No;0;ON; 0031 2044 0035;;;1/5;N;FRACTION ONE FIFTH;;;; 2156;VULGAR FRACTION TWO FIFTHS;No;0;ON; 0032 2044 0035;;;2/5;N;FRACTION TWO FIFTHS;;;; 2157;VULGAR FRACTION THREE FIFTHS;No;0;ON; 0033 2044 0035;;;3/5;N;FRACTION THREE FIFTHS;;;; 2158;VULGAR FRACTION FOUR FIFTHS;No;0;ON; 0034 2044 0035;;;4/5;N;FRACTION FOUR FIFTHS;;;; 2159;VULGAR FRACTION ONE SIXTH;No;0;ON; 0031 2044 0036;;;1/6;N;FRACTION ONE SIXTH;;;; 215A;VULGAR FRACTION FIVE SIXTHS;No;0;ON; 0035 2044 0036;;;5/6;N;FRACTION FIVE SIXTHS;;;; 215B;VULGAR FRACTION ONE EIGHTH;No;0;ON; 0031 2044 0038;;;1/8;N;FRACTION ONE EIGHTH;;;; 215C;VULGAR FRACTION THREE EIGHTHS;No;0;ON; 0033 2044 0038;;;3/8;N;FRACTION THREE EIGHTHS;;;; 215D;VULGAR FRACTION FIVE EIGHTHS;No;0;ON; 0035 2044 0038;;;5/8;N;FRACTION FIVE EIGHTHS;;;; 215E;VULGAR FRACTION SEVEN EIGHTHS;No;0;ON; 0037 2044 0038;;;7/8;N;FRACTION SEVEN EIGHTHS;;;; 215F;FRACTION NUMERATOR ONE;No;0;ON; 0031 2044;;;1;N;;;;; 2160;ROMAN NUMERAL ONE;Nl;0;L; 0049;;;1;N;;;;2170; 2161;ROMAN NUMERAL TWO;Nl;0;L; 0049 0049;;;2;N;;;;2171; 2162;ROMAN NUMERAL THREE;Nl;0;L; 0049 0049 0049;;;3;N;;;;2172; 2163;ROMAN NUMERAL FOUR;Nl;0;L; 0049 0056;;;4;N;;;;2173; 2164;ROMAN NUMERAL FIVE;Nl;0;L; 0056;;;5;N;;;;2174; 2165;ROMAN NUMERAL SIX;Nl;0;L; 0056 0049;;;6;N;;;;2175; 2166;ROMAN NUMERAL SEVEN;Nl;0;L; 0056 0049 0049;;;7;N;;;;2176; 2167;ROMAN NUMERAL EIGHT;Nl;0;L; 0056 0049 0049 0049;;;8;N;;;;2177; 2168;ROMAN NUMERAL NINE;Nl;0;L; 0049 0058;;;9;N;;;;2178; 2169;ROMAN NUMERAL TEN;Nl;0;L; 0058;;;10;N;;;;2179; 216A;ROMAN NUMERAL ELEVEN;Nl;0;L; 0058 0049;;;11;N;;;;217A; 216B;ROMAN NUMERAL TWELVE;Nl;0;L; 0058 0049 0049;;;12;N;;;;217B; 216C;ROMAN NUMERAL FIFTY;Nl;0;L; 004C;;;50;N;;;;217C; 216D;ROMAN NUMERAL ONE HUNDRED;Nl;0;L; 0043;;;100;N;;;;217D; 216E;ROMAN NUMERAL FIVE HUNDRED;Nl;0;L; 0044;;;500;N;;;;217E; 216F;ROMAN NUMERAL ONE THOUSAND;Nl;0;L; 004D;;;1000;N;;;;217F; 2170;SMALL ROMAN NUMERAL ONE;Nl;0;L; 0069;;;1;N;;;2160;;2160 2171;SMALL ROMAN NUMERAL TWO;Nl;0;L; 0069 0069;;;2;N;;;2161;;2161 2172;SMALL ROMAN NUMERAL THREE;Nl;0;L; 0069 0069 0069;;;3;N;;;2162;;2162 2173;SMALL ROMAN NUMERAL FOUR;Nl;0;L; 0069 0076;;;4;N;;;2163;;2163 2174;SMALL ROMAN NUMERAL FIVE;Nl;0;L; 0076;;;5;N;;;2164;;2164 2175;SMALL ROMAN NUMERAL SIX;Nl;0;L; 0076 0069;;;6;N;;;2165;;2165 2176;SMALL ROMAN NUMERAL SEVEN;Nl;0;L; 0076 0069 0069;;;7;N;;;2166;;2166 2177;SMALL ROMAN NUMERAL EIGHT;Nl;0;L; 0076 0069 0069 0069;;;8;N;;;2167;;2167 2178;SMALL ROMAN NUMERAL NINE;Nl;0;L; 0069 0078;;;9;N;;;2168;;2168 2179;SMALL ROMAN NUMERAL TEN;Nl;0;L; 0078;;;10;N;;;2169;;2169 217A;SMALL ROMAN NUMERAL ELEVEN;Nl;0;L; 0078 0069;;;11;N;;;216A;;216A 217B;SMALL ROMAN NUMERAL TWELVE;Nl;0;L; 0078 0069 0069;;;12;N;;;216B;;216B 217C;SMALL ROMAN NUMERAL FIFTY;Nl;0;L; 006C;;;50;N;;;216C;;216C 217D;SMALL ROMAN NUMERAL ONE HUNDRED;Nl;0;L; 0063;;;100;N;;;216D;;216D 217E;SMALL ROMAN NUMERAL FIVE HUNDRED;Nl;0;L; 0064;;;500;N;;;216E;;216E 217F;SMALL ROMAN NUMERAL ONE THOUSAND;Nl;0;L; 006D;;;1000;N;;;216F;;216F 2180;ROMAN NUMERAL ONE THOUSAND C D;Nl;0;L;;;;1000;N;;;;; 2181;ROMAN NUMERAL FIVE THOUSAND;Nl;0;L;;;;5000;N;;;;; 2182;ROMAN NUMERAL TEN THOUSAND;Nl;0;L;;;;10000;N;;;;; 2183;ROMAN NUMERAL REVERSED ONE HUNDRED;Nl;0;L;;;;;N;;;;; 2190;LEFTWARDS ARROW;Sm;0;ON;;;;;N;LEFT ARROW;;;; 2191;UPWARDS ARROW;Sm;0;ON;;;;;N;UP ARROW;;;; 2192;RIGHTWARDS ARROW;Sm;0;ON;;;;;N;RIGHT ARROW;;;; 2193;DOWNWARDS ARROW;Sm;0;ON;;;;;N;DOWN ARROW;;;; 2194;LEFT RIGHT ARROW;Sm;0;ON;;;;;N;;;;; 2195;UP DOWN ARROW;So;0;ON;;;;;N;;;;; 2196;NORTH WEST ARROW;So;0;ON;;;;;N;UPPER LEFT ARROW;;;; 2197;NORTH EAST ARROW;So;0;ON;;;;;N;UPPER RIGHT ARROW;;;; 2198;SOUTH EAST ARROW;So;0;ON;;;;;N;LOWER RIGHT ARROW;;;; 2199;SOUTH WEST ARROW;So;0;ON;;;;;N;LOWER LEFT ARROW;;;; 219A;LEFTWARDS ARROW WITH STROKE;Sm;0;ON;2190 0338;;;;N;LEFT ARROW WITH STROKE;;;; 219B;RIGHTWARDS ARROW WITH STROKE;Sm;0;ON;2192 0338;;;;N;RIGHT ARROW WITH STROKE;;;; 219C;LEFTWARDS WAVE ARROW;So;0;ON;;;;;N;LEFT WAVE ARROW;;;; 219D;RIGHTWARDS WAVE ARROW;So;0;ON;;;;;N;RIGHT WAVE ARROW;;;; 219E;LEFTWARDS TWO HEADED ARROW;So;0;ON;;;;;N;LEFT TWO HEADED ARROW;;;; 219F;UPWARDS TWO HEADED ARROW;So;0;ON;;;;;N;UP TWO HEADED ARROW;;;; 21A0;RIGHTWARDS TWO HEADED ARROW;Sm;0;ON;;;;;N;RIGHT TWO HEADED ARROW;;;; 21A1;DOWNWARDS TWO HEADED ARROW;So;0;ON;;;;;N;DOWN TWO HEADED ARROW;;;; 21A2;LEFTWARDS ARROW WITH TAIL;So;0;ON;;;;;N;LEFT ARROW WITH TAIL;;;; 21A3;RIGHTWARDS ARROW WITH TAIL;Sm;0;ON;;;;;N;RIGHT ARROW WITH TAIL;;;; 21A4;LEFTWARDS ARROW FROM BAR;So;0;ON;;;;;N;LEFT ARROW FROM BAR;;;; 21A5;UPWARDS ARROW FROM BAR;So;0;ON;;;;;N;UP ARROW FROM BAR;;;; 21A6;RIGHTWARDS ARROW FROM BAR;Sm;0;ON;;;;;N;RIGHT ARROW FROM BAR;;;; 21A7;DOWNWARDS ARROW FROM BAR;So;0;ON;;;;;N;DOWN ARROW FROM BAR;;;; 21A8;UP DOWN ARROW WITH BASE;So;0;ON;;;;;N;;;;; 21A9;LEFTWARDS ARROW WITH HOOK;So;0;ON;;;;;N;LEFT ARROW WITH HOOK;;;; 21AA;RIGHTWARDS ARROW WITH HOOK;So;0;ON;;;;;N;RIGHT ARROW WITH HOOK;;;; 21AB;LEFTWARDS ARROW WITH LOOP;So;0;ON;;;;;N;LEFT ARROW WITH LOOP;;;; 21AC;RIGHTWARDS ARROW WITH LOOP;So;0;ON;;;;;N;RIGHT ARROW WITH LOOP;;;; 21AD;LEFT RIGHT WAVE ARROW;So;0;ON;;;;;N;;;;; 21AE;LEFT RIGHT ARROW WITH STROKE;Sm;0;ON;2194 0338;;;;N;;;;; 21AF;DOWNWARDS ZIGZAG ARROW;So;0;ON;;;;;N;DOWN ZIGZAG ARROW;;;; 21B0;UPWARDS ARROW WITH TIP LEFTWARDS;So;0;ON;;;;;N;UP ARROW WITH TIP LEFT;;;; 21B1;UPWARDS ARROW WITH TIP RIGHTWARDS;So;0;ON;;;;;N;UP ARROW WITH TIP RIGHT;;;; 21B2;DOWNWARDS ARROW WITH TIP LEFTWARDS;So;0;ON;;;;;N;DOWN ARROW WITH TIP LEFT;;;; 21B3;DOWNWARDS ARROW WITH TIP RIGHTWARDS;So;0;ON;;;;;N;DOWN ARROW WITH TIP RIGHT;;;; 21B4;RIGHTWARDS ARROW WITH CORNER DOWNWARDS;So;0;ON;;;;;N;RIGHT ARROW WITH CORNER DOWN;;;; 21B5;DOWNWARDS ARROW WITH CORNER LEFTWARDS;So;0;ON;;;;;N;DOWN ARROW WITH CORNER LEFT;;;; 21B6;ANTICLOCKWISE TOP SEMICIRCLE ARROW;So;0;ON;;;;;N;;;;; 21B7;CLOCKWISE TOP SEMICIRCLE ARROW;So;0;ON;;;;;N;;;;; 21B8;NORTH WEST ARROW TO LONG BAR;So;0;ON;;;;;N;UPPER LEFT ARROW TO LONG BAR;;;; 21B9;LEFTWARDS ARROW TO BAR OVER RIGHTWARDS ARROW TO BAR;So;0;ON;;;;;N;LEFT ARROW TO BAR OVER RIGHT ARROW TO BAR;;;; 21BA;ANTICLOCKWISE OPEN CIRCLE ARROW;So;0;ON;;;;;N;;;;; 21BB;CLOCKWISE OPEN CIRCLE ARROW;So;0;ON;;;;;N;;;;; 21BC;LEFTWARDS HARPOON WITH BARB UPWARDS;So;0;ON;;;;;N;LEFT HARPOON WITH BARB UP;;;; 21BD;LEFTWARDS HARPOON WITH BARB DOWNWARDS;So;0;ON;;;;;N;LEFT HARPOON WITH BARB DOWN;;;; 21BE;UPWARDS HARPOON WITH BARB RIGHTWARDS;So;0;ON;;;;;N;UP HARPOON WITH BARB RIGHT;;;; 21BF;UPWARDS HARPOON WITH BARB LEFTWARDS;So;0;ON;;;;;N;UP HARPOON WITH BARB LEFT;;;; 21C0;RIGHTWARDS HARPOON WITH BARB UPWARDS;So;0;ON;;;;;N;RIGHT HARPOON WITH BARB UP;;;; 21C1;RIGHTWARDS HARPOON WITH BARB DOWNWARDS;So;0;ON;;;;;N;RIGHT HARPOON WITH BARB DOWN;;;; 21C2;DOWNWARDS HARPOON WITH BARB RIGHTWARDS;So;0;ON;;;;;N;DOWN HARPOON WITH BARB RIGHT;;;; 21C3;DOWNWARDS HARPOON WITH BARB LEFTWARDS;So;0;ON;;;;;N;DOWN HARPOON WITH BARB LEFT;;;; 21C4;RIGHTWARDS ARROW OVER LEFTWARDS ARROW;So;0;ON;;;;;N;RIGHT ARROW OVER LEFT ARROW;;;; 21C5;UPWARDS ARROW LEFTWARDS OF DOWNWARDS ARROW;So;0;ON;;;;;N;UP ARROW LEFT OF DOWN ARROW;;;; 21C6;LEFTWARDS ARROW OVER RIGHTWARDS ARROW;So;0;ON;;;;;N;LEFT ARROW OVER RIGHT ARROW;;;; 21C7;LEFTWARDS PAIRED ARROWS;So;0;ON;;;;;N;LEFT PAIRED ARROWS;;;; 21C8;UPWARDS PAIRED ARROWS;So;0;ON;;;;;N;UP PAIRED ARROWS;;;; 21C9;RIGHTWARDS PAIRED ARROWS;So;0;ON;;;;;N;RIGHT PAIRED ARROWS;;;; 21CA;DOWNWARDS PAIRED ARROWS;So;0;ON;;;;;N;DOWN PAIRED ARROWS;;;; 21CB;LEFTWARDS HARPOON OVER RIGHTWARDS HARPOON;So;0;ON;;;;;N;LEFT HARPOON OVER RIGHT HARPOON;;;; 21CC;RIGHTWARDS HARPOON OVER LEFTWARDS HARPOON;So;0;ON;;;;;N;RIGHT HARPOON OVER LEFT HARPOON;;;; 21CD;LEFTWARDS DOUBLE ARROW WITH STROKE;So;0;ON;21D0 0338;;;;N;LEFT DOUBLE ARROW WITH STROKE;;;; 21CE;LEFT RIGHT DOUBLE ARROW WITH STROKE;Sm;0;ON;21D4 0338;;;;N;;;;; 21CF;RIGHTWARDS DOUBLE ARROW WITH STROKE;Sm;0;ON;21D2 0338;;;;N;RIGHT DOUBLE ARROW WITH STROKE;;;; 21D0;LEFTWARDS DOUBLE ARROW;So;0;ON;;;;;N;LEFT DOUBLE ARROW;;;; 21D1;UPWARDS DOUBLE ARROW;So;0;ON;;;;;N;UP DOUBLE ARROW;;;; 21D2;RIGHTWARDS DOUBLE ARROW;Sm;0;ON;;;;;N;RIGHT DOUBLE ARROW;;;; 21D3;DOWNWARDS DOUBLE ARROW;So;0;ON;;;;;N;DOWN DOUBLE ARROW;;;; 21D4;LEFT RIGHT DOUBLE ARROW;Sm;0;ON;;;;;N;;;;; 21D5;UP DOWN DOUBLE ARROW;So;0;ON;;;;;N;;;;; 21D6;NORTH WEST DOUBLE ARROW;So;0;ON;;;;;N;UPPER LEFT DOUBLE ARROW;;;; 21D7;NORTH EAST DOUBLE ARROW;So;0;ON;;;;;N;UPPER RIGHT DOUBLE ARROW;;;; 21D8;SOUTH EAST DOUBLE ARROW;So;0;ON;;;;;N;LOWER RIGHT DOUBLE ARROW;;;; 21D9;SOUTH WEST DOUBLE ARROW;So;0;ON;;;;;N;LOWER LEFT DOUBLE ARROW;;;; 21DA;LEFTWARDS TRIPLE ARROW;So;0;ON;;;;;N;LEFT TRIPLE ARROW;;;; 21DB;RIGHTWARDS TRIPLE ARROW;So;0;ON;;;;;N;RIGHT TRIPLE ARROW;;;; 21DC;LEFTWARDS SQUIGGLE ARROW;So;0;ON;;;;;N;LEFT SQUIGGLE ARROW;;;; 21DD;RIGHTWARDS SQUIGGLE ARROW;So;0;ON;;;;;N;RIGHT SQUIGGLE ARROW;;;; 21DE;UPWARDS ARROW WITH DOUBLE STROKE;So;0;ON;;;;;N;UP ARROW WITH DOUBLE STROKE;;;; 21DF;DOWNWARDS ARROW WITH DOUBLE STROKE;So;0;ON;;;;;N;DOWN ARROW WITH DOUBLE STROKE;;;; 21E0;LEFTWARDS DASHED ARROW;So;0;ON;;;;;N;LEFT DASHED ARROW;;;; 21E1;UPWARDS DASHED ARROW;So;0;ON;;;;;N;UP DASHED ARROW;;;; 21E2;RIGHTWARDS DASHED ARROW;So;0;ON;;;;;N;RIGHT DASHED ARROW;;;; 21E3;DOWNWARDS DASHED ARROW;So;0;ON;;;;;N;DOWN DASHED ARROW;;;; 21E4;LEFTWARDS ARROW TO BAR;So;0;ON;;;;;N;LEFT ARROW TO BAR;;;; 21E5;RIGHTWARDS ARROW TO BAR;So;0;ON;;;;;N;RIGHT ARROW TO BAR;;;; 21E6;LEFTWARDS WHITE ARROW;So;0;ON;;;;;N;WHITE LEFT ARROW;;;; 21E7;UPWARDS WHITE ARROW;So;0;ON;;;;;N;WHITE UP ARROW;;;; 21E8;RIGHTWARDS WHITE ARROW;So;0;ON;;;;;N;WHITE RIGHT ARROW;;;; 21E9;DOWNWARDS WHITE ARROW;So;0;ON;;;;;N;WHITE DOWN ARROW;;;; 21EA;UPWARDS WHITE ARROW FROM BAR;So;0;ON;;;;;N;WHITE UP ARROW FROM BAR;;;; 21EB;UPWARDS WHITE ARROW ON PEDESTAL;So;0;ON;;;;;N;;;;; 21EC;UPWARDS WHITE ARROW ON PEDESTAL WITH HORIZONTAL BAR;So;0;ON;;;;;N;;;;; 21ED;UPWARDS WHITE ARROW ON PEDESTAL WITH VERTICAL BAR;So;0;ON;;;;;N;;;;; 21EE;UPWARDS WHITE DOUBLE ARROW;So;0;ON;;;;;N;;;;; 21EF;UPWARDS WHITE DOUBLE ARROW ON PEDESTAL;So;0;ON;;;;;N;;;;; 21F0;RIGHTWARDS WHITE ARROW FROM WALL;So;0;ON;;;;;N;;;;; 21F1;NORTH WEST ARROW TO CORNER;So;0;ON;;;;;N;;;;; 21F2;SOUTH EAST ARROW TO CORNER;So;0;ON;;;;;N;;;;; 21F3;UP DOWN WHITE ARROW;So;0;ON;;;;;N;;;;; 2200;FOR ALL;Sm;0;ON;;;;;N;;;;; 2201;COMPLEMENT;Sm;0;ON;;;;;Y;;;;; 2202;PARTIAL DIFFERENTIAL;Sm;0;ON;;;;;Y;;;;; 2203;THERE EXISTS;Sm;0;ON;;;;;Y;;;;; 2204;THERE DOES NOT EXIST;Sm;0;ON;2203 0338;;;;Y;;;;; 2205;EMPTY SET;Sm;0;ON;;;;;N;;;;; 2206;INCREMENT;Sm;0;ON;;;;;N;;;;; 2207;NABLA;Sm;0;ON;;;;;N;;;;; 2208;ELEMENT OF;Sm;0;ON;;;;;Y;;;;; 2209;NOT AN ELEMENT OF;Sm;0;ON;2208 0338;;;;Y;;;;; 220A;SMALL ELEMENT OF;Sm;0;ON;;;;;Y;;;;; 220B;CONTAINS AS MEMBER;Sm;0;ON;;;;;Y;;;;; 220C;DOES NOT CONTAIN AS MEMBER;Sm;0;ON;220B 0338;;;;Y;;;;; 220D;SMALL CONTAINS AS MEMBER;Sm;0;ON;;;;;Y;;;;; 220E;END OF PROOF;Sm;0;ON;;;;;N;;;;; 220F;N-ARY PRODUCT;Sm;0;ON;;;;;N;;;;; 2210;N-ARY COPRODUCT;Sm;0;ON;;;;;N;;;;; 2211;N-ARY SUMMATION;Sm;0;ON;;;;;Y;;;;; 2212;MINUS SIGN;Sm;0;ET;;;;;N;;;;; 2213;MINUS-OR-PLUS SIGN;Sm;0;ET;;;;;N;;;;; 2214;DOT PLUS;Sm;0;ON;;;;;N;;;;; 2215;DIVISION SLASH;Sm;0;ON;;;;;Y;;;;; 2216;SET MINUS;Sm;0;ON;;;;;Y;;;;; 2217;ASTERISK OPERATOR;Sm;0;ON;;;;;N;;;;; 2218;RING OPERATOR;Sm;0;ON;;;;;N;;;;; 2219;BULLET OPERATOR;Sm;0;ON;;;;;N;;;;; 221A;SQUARE ROOT;Sm;0;ON;;;;;Y;;;;; 221B;CUBE ROOT;Sm;0;ON;;;;;Y;;;;; 221C;FOURTH ROOT;Sm;0;ON;;;;;Y;;;;; 221D;PROPORTIONAL TO;Sm;0;ON;;;;;Y;;;;; 221E;INFINITY;Sm;0;ON;;;;;N;;;;; 221F;RIGHT ANGLE;Sm;0;ON;;;;;Y;;;;; 2220;ANGLE;Sm;0;ON;;;;;Y;;;;; 2221;MEASURED ANGLE;Sm;0;ON;;;;;Y;;;;; 2222;SPHERICAL ANGLE;Sm;0;ON;;;;;Y;;;;; 2223;DIVIDES;Sm;0;ON;;;;;N;;;;; 2224;DOES NOT DIVIDE;Sm;0;ON;2223 0338;;;;Y;;;;; 2225;PARALLEL TO;Sm;0;ON;;;;;N;;;;; 2226;NOT PARALLEL TO;Sm;0;ON;2225 0338;;;;Y;;;;; 2227;LOGICAL AND;Sm;0;ON;;;;;N;;;;; 2228;LOGICAL OR;Sm;0;ON;;;;;N;;;;; 2229;INTERSECTION;Sm;0;ON;;;;;N;;;;; 222A;UNION;Sm;0;ON;;;;;N;;;;; 222B;INTEGRAL;Sm;0;ON;;;;;Y;;;;; 222C;DOUBLE INTEGRAL;Sm;0;ON; 222B 222B;;;;Y;;;;; 222D;TRIPLE INTEGRAL;Sm;0;ON; 222B 222B 222B;;;;Y;;;;; 222E;CONTOUR INTEGRAL;Sm;0;ON;;;;;Y;;;;; 222F;SURFACE INTEGRAL;Sm;0;ON; 222E 222E;;;;Y;;;;; 2230;VOLUME INTEGRAL;Sm;0;ON; 222E 222E 222E;;;;Y;;;;; 2231;CLOCKWISE INTEGRAL;Sm;0;ON;;;;;Y;;;;; 2232;CLOCKWISE CONTOUR INTEGRAL;Sm;0;ON;;;;;Y;;;;; 2233;ANTICLOCKWISE CONTOUR INTEGRAL;Sm;0;ON;;;;;Y;;;;; 2234;THEREFORE;Sm;0;ON;;;;;N;;;;; 2235;BECAUSE;Sm;0;ON;;;;;N;;;;; 2236;RATIO;Sm;0;ON;;;;;N;;;;; 2237;PROPORTION;Sm;0;ON;;;;;N;;;;; 2238;DOT MINUS;Sm;0;ON;;;;;N;;;;; 2239;EXCESS;Sm;0;ON;;;;;Y;;;;; 223A;GEOMETRIC PROPORTION;Sm;0;ON;;;;;N;;;;; 223B;HOMOTHETIC;Sm;0;ON;;;;;Y;;;;; 223C;TILDE OPERATOR;Sm;0;ON;;;;;Y;;;;; 223D;REVERSED TILDE;Sm;0;ON;;;;;Y;;lazy S;;; 223E;INVERTED LAZY S;Sm;0;ON;;;;;Y;;;;; 223F;SINE WAVE;Sm;0;ON;;;;;Y;;;;; 2240;WREATH PRODUCT;Sm;0;ON;;;;;Y;;;;; 2241;NOT TILDE;Sm;0;ON;223C 0338;;;;Y;;;;; 2242;MINUS TILDE;Sm;0;ON;;;;;Y;;;;; 2243;ASYMPTOTICALLY EQUAL TO;Sm;0;ON;;;;;Y;;;;; 2244;NOT ASYMPTOTICALLY EQUAL TO;Sm;0;ON;2243 0338;;;;Y;;;;; 2245;APPROXIMATELY EQUAL TO;Sm;0;ON;;;;;Y;;;;; 2246;APPROXIMATELY BUT NOT ACTUALLY EQUAL TO;Sm;0;ON;;;;;Y;;;;; 2247;NEITHER APPROXIMATELY NOR ACTUALLY EQUAL TO;Sm;0;ON;2245 0338;;;;Y;;;;; 2248;ALMOST EQUAL TO;Sm;0;ON;;;;;Y;;;;; 2249;NOT ALMOST EQUAL TO;Sm;0;ON;2248 0338;;;;Y;;;;; 224A;ALMOST EQUAL OR EQUAL TO;Sm;0;ON;;;;;Y;;;;; 224B;TRIPLE TILDE;Sm;0;ON;;;;;Y;;;;; 224C;ALL EQUAL TO;Sm;0;ON;;;;;Y;;;;; 224D;EQUIVALENT TO;Sm;0;ON;;;;;N;;;;; 224E;GEOMETRICALLY EQUIVALENT TO;Sm;0;ON;;;;;N;;;;; 224F;DIFFERENCE BETWEEN;Sm;0;ON;;;;;N;;;;; 2250;APPROACHES THE LIMIT;Sm;0;ON;;;;;N;;;;; 2251;GEOMETRICALLY EQUAL TO;Sm;0;ON;;;;;N;;;;; 2252;APPROXIMATELY EQUAL TO OR THE IMAGE OF;Sm;0;ON;;;;;Y;;;;; 2253;IMAGE OF OR APPROXIMATELY EQUAL TO;Sm;0;ON;;;;;Y;;;;; 2254;COLON EQUALS;Sm;0;ON;;;;;Y;COLON EQUAL;;;; 2255;EQUALS COLON;Sm;0;ON;;;;;Y;EQUAL COLON;;;; 2256;RING IN EQUAL TO;Sm;0;ON;;;;;N;;;;; 2257;RING EQUAL TO;Sm;0;ON;;;;;N;;;;; 2258;CORRESPONDS TO;Sm;0;ON;;;;;N;;;;; 2259;ESTIMATES;Sm;0;ON;;;;;N;;;;; 225A;EQUIANGULAR TO;Sm;0;ON;;;;;N;;;;; 225B;STAR EQUALS;Sm;0;ON;;;;;N;;;;; 225C;DELTA EQUAL TO;Sm;0;ON;;;;;N;;;;; 225D;EQUAL TO BY DEFINITION;Sm;0;ON;;;;;N;;;;; 225E;MEASURED BY;Sm;0;ON;;;;;N;;;;; 225F;QUESTIONED EQUAL TO;Sm;0;ON;;;;;Y;;;;; 2260;NOT EQUAL TO;Sm;0;ON;003D 0338;;;;Y;;;;; 2261;IDENTICAL TO;Sm;0;ON;;;;;N;;;;; 2262;NOT IDENTICAL TO;Sm;0;ON;2261 0338;;;;Y;;;;; 2263;STRICTLY EQUIVALENT TO;Sm;0;ON;;;;;N;;;;; 2264;LESS-THAN OR EQUAL TO;Sm;0;ON;;;;;Y;LESS THAN OR EQUAL TO;;;; 2265;GREATER-THAN OR EQUAL TO;Sm;0;ON;;;;;Y;GREATER THAN OR EQUAL TO;;;; 2266;LESS-THAN OVER EQUAL TO;Sm;0;ON;;;;;Y;LESS THAN OVER EQUAL TO;;;; 2267;GREATER-THAN OVER EQUAL TO;Sm;0;ON;;;;;Y;GREATER THAN OVER EQUAL TO;;;; 2268;LESS-THAN BUT NOT EQUAL TO;Sm;0;ON;;;;;Y;LESS THAN BUT NOT EQUAL TO;;;; 2269;GREATER-THAN BUT NOT EQUAL TO;Sm;0;ON;;;;;Y;GREATER THAN BUT NOT EQUAL TO;;;; 226A;MUCH LESS-THAN;Sm;0;ON;;;;;Y;MUCH LESS THAN;;;; 226B;MUCH GREATER-THAN;Sm;0;ON;;;;;Y;MUCH GREATER THAN;;;; 226C;BETWEEN;Sm;0;ON;;;;;N;;;;; 226D;NOT EQUIVALENT TO;Sm;0;ON;224D 0338;;;;N;;;;; 226E;NOT LESS-THAN;Sm;0;ON;003C 0338;;;;Y;NOT LESS THAN;;;; 226F;NOT GREATER-THAN;Sm;0;ON;003E 0338;;;;Y;NOT GREATER THAN;;;; 2270;NEITHER LESS-THAN NOR EQUAL TO;Sm;0;ON;2264 0338;;;;Y;NEITHER LESS THAN NOR EQUAL TO;;;; 2271;NEITHER GREATER-THAN NOR EQUAL TO;Sm;0;ON;2265 0338;;;;Y;NEITHER GREATER THAN NOR EQUAL TO;;;; 2272;LESS-THAN OR EQUIVALENT TO;Sm;0;ON;;;;;Y;LESS THAN OR EQUIVALENT TO;;;; 2273;GREATER-THAN OR EQUIVALENT TO;Sm;0;ON;;;;;Y;GREATER THAN OR EQUIVALENT TO;;;; 2274;NEITHER LESS-THAN NOR EQUIVALENT TO;Sm;0;ON;2272 0338;;;;Y;NEITHER LESS THAN NOR EQUIVALENT TO;;;; 2275;NEITHER GREATER-THAN NOR EQUIVALENT TO;Sm;0;ON;2273 0338;;;;Y;NEITHER GREATER THAN NOR EQUIVALENT TO;;;; 2276;LESS-THAN OR GREATER-THAN;Sm;0;ON;;;;;Y;LESS THAN OR GREATER THAN;;;; 2277;GREATER-THAN OR LESS-THAN;Sm;0;ON;;;;;Y;GREATER THAN OR LESS THAN;;;; 2278;NEITHER LESS-THAN NOR GREATER-THAN;Sm;0;ON;2276 0338;;;;Y;NEITHER LESS THAN NOR GREATER THAN;;;; 2279;NEITHER GREATER-THAN NOR LESS-THAN;Sm;0;ON;2277 0338;;;;Y;NEITHER GREATER THAN NOR LESS THAN;;;; 227A;PRECEDES;Sm;0;ON;;;;;Y;;;;; 227B;SUCCEEDS;Sm;0;ON;;;;;Y;;;;; 227C;PRECEDES OR EQUAL TO;Sm;0;ON;;;;;Y;;;;; 227D;SUCCEEDS OR EQUAL TO;Sm;0;ON;;;;;Y;;;;; 227E;PRECEDES OR EQUIVALENT TO;Sm;0;ON;;;;;Y;;;;; 227F;SUCCEEDS OR EQUIVALENT TO;Sm;0;ON;;;;;Y;;;;; 2280;DOES NOT PRECEDE;Sm;0;ON;227A 0338;;;;Y;;;;; 2281;DOES NOT SUCCEED;Sm;0;ON;227B 0338;;;;Y;;;;; 2282;SUBSET OF;Sm;0;ON;;;;;Y;;;;; 2283;SUPERSET OF;Sm;0;ON;;;;;Y;;;;; 2284;NOT A SUBSET OF;Sm;0;ON;2282 0338;;;;Y;;;;; 2285;NOT A SUPERSET OF;Sm;0;ON;2283 0338;;;;Y;;;;; 2286;SUBSET OF OR EQUAL TO;Sm;0;ON;;;;;Y;;;;; 2287;SUPERSET OF OR EQUAL TO;Sm;0;ON;;;;;Y;;;;; 2288;NEITHER A SUBSET OF NOR EQUAL TO;Sm;0;ON;2286 0338;;;;Y;;;;; 2289;NEITHER A SUPERSET OF NOR EQUAL TO;Sm;0;ON;2287 0338;;;;Y;;;;; 228A;SUBSET OF WITH NOT EQUAL TO;Sm;0;ON;;;;;Y;SUBSET OF OR NOT EQUAL TO;;;; 228B;SUPERSET OF WITH NOT EQUAL TO;Sm;0;ON;;;;;Y;SUPERSET OF OR NOT EQUAL TO;;;; 228C;MULTISET;Sm;0;ON;;;;;Y;;;;; 228D;MULTISET MULTIPLICATION;Sm;0;ON;;;;;N;;;;; 228E;MULTISET UNION;Sm;0;ON;;;;;N;;;;; 228F;SQUARE IMAGE OF;Sm;0;ON;;;;;Y;;;;; 2290;SQUARE ORIGINAL OF;Sm;0;ON;;;;;Y;;;;; 2291;SQUARE IMAGE OF OR EQUAL TO;Sm;0;ON;;;;;Y;;;;; 2292;SQUARE ORIGINAL OF OR EQUAL TO;Sm;0;ON;;;;;Y;;;;; 2293;SQUARE CAP;Sm;0;ON;;;;;N;;;;; 2294;SQUARE CUP;Sm;0;ON;;;;;N;;;;; 2295;CIRCLED PLUS;Sm;0;ON;;;;;N;;;;; 2296;CIRCLED MINUS;Sm;0;ON;;;;;N;;;;; 2297;CIRCLED TIMES;Sm;0;ON;;;;;N;;;;; 2298;CIRCLED DIVISION SLASH;Sm;0;ON;;;;;Y;;;;; 2299;CIRCLED DOT OPERATOR;Sm;0;ON;;;;;N;;;;; 229A;CIRCLED RING OPERATOR;Sm;0;ON;;;;;N;;;;; 229B;CIRCLED ASTERISK OPERATOR;Sm;0;ON;;;;;N;;;;; 229C;CIRCLED EQUALS;Sm;0;ON;;;;;N;;;;; 229D;CIRCLED DASH;Sm;0;ON;;;;;N;;;;; 229E;SQUARED PLUS;Sm;0;ON;;;;;N;;;;; 229F;SQUARED MINUS;Sm;0;ON;;;;;N;;;;; 22A0;SQUARED TIMES;Sm;0;ON;;;;;N;;;;; 22A1;SQUARED DOT OPERATOR;Sm;0;ON;;;;;N;;;;; 22A2;RIGHT TACK;Sm;0;ON;;;;;Y;;;;; 22A3;LEFT TACK;Sm;0;ON;;;;;Y;;;;; 22A4;DOWN TACK;Sm;0;ON;;;;;N;;;;; 22A5;UP TACK;Sm;0;ON;;;;;N;;;;; 22A6;ASSERTION;Sm;0;ON;;;;;Y;;;;; 22A7;MODELS;Sm;0;ON;;;;;Y;;;;; 22A8;TRUE;Sm;0;ON;;;;;Y;;;;; 22A9;FORCES;Sm;0;ON;;;;;Y;;;;; 22AA;TRIPLE VERTICAL BAR RIGHT TURNSTILE;Sm;0;ON;;;;;Y;;;;; 22AB;DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE;Sm;0;ON;;;;;Y;;;;; 22AC;DOES NOT PROVE;Sm;0;ON;22A2 0338;;;;Y;;;;; 22AD;NOT TRUE;Sm;0;ON;22A8 0338;;;;Y;;;;; 22AE;DOES NOT FORCE;Sm;0;ON;22A9 0338;;;;Y;;;;; 22AF;NEGATED DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE;Sm;0;ON;22AB 0338;;;;Y;;;;; 22B0;PRECEDES UNDER RELATION;Sm;0;ON;;;;;Y;;;;; 22B1;SUCCEEDS UNDER RELATION;Sm;0;ON;;;;;Y;;;;; 22B2;NORMAL SUBGROUP OF;Sm;0;ON;;;;;Y;;;;; 22B3;CONTAINS AS NORMAL SUBGROUP;Sm;0;ON;;;;;Y;;;;; 22B4;NORMAL SUBGROUP OF OR EQUAL TO;Sm;0;ON;;;;;Y;;;;; 22B5;CONTAINS AS NORMAL SUBGROUP OR EQUAL TO;Sm;0;ON;;;;;Y;;;;; 22B6;ORIGINAL OF;Sm;0;ON;;;;;Y;;;;; 22B7;IMAGE OF;Sm;0;ON;;;;;Y;;;;; 22B8;MULTIMAP;Sm;0;ON;;;;;Y;;;;; 22B9;HERMITIAN CONJUGATE MATRIX;Sm;0;ON;;;;;N;;;;; 22BA;INTERCALATE;Sm;0;ON;;;;;N;;;;; 22BB;XOR;Sm;0;ON;;;;;N;;;;; 22BC;NAND;Sm;0;ON;;;;;N;;;;; 22BD;NOR;Sm;0;ON;;;;;N;;;;; 22BE;RIGHT ANGLE WITH ARC;Sm;0;ON;;;;;Y;;;;; 22BF;RIGHT TRIANGLE;Sm;0;ON;;;;;Y;;;;; 22C0;N-ARY LOGICAL AND;Sm;0;ON;;;;;N;;;;; 22C1;N-ARY LOGICAL OR;Sm;0;ON;;;;;N;;;;; 22C2;N-ARY INTERSECTION;Sm;0;ON;;;;;N;;;;; 22C3;N-ARY UNION;Sm;0;ON;;;;;N;;;;; 22C4;DIAMOND OPERATOR;Sm;0;ON;;;;;N;;;;; 22C5;DOT OPERATOR;Sm;0;ON;;;;;N;;;;; 22C6;STAR OPERATOR;Sm;0;ON;;;;;N;;;;; 22C7;DIVISION TIMES;Sm;0;ON;;;;;N;;;;; 22C8;BOWTIE;Sm;0;ON;;;;;N;;;;; 22C9;LEFT NORMAL FACTOR SEMIDIRECT PRODUCT;Sm;0;ON;;;;;Y;;;;; 22CA;RIGHT NORMAL FACTOR SEMIDIRECT PRODUCT;Sm;0;ON;;;;;Y;;;;; 22CB;LEFT SEMIDIRECT PRODUCT;Sm;0;ON;;;;;Y;;;;; 22CC;RIGHT SEMIDIRECT PRODUCT;Sm;0;ON;;;;;Y;;;;; 22CD;REVERSED TILDE EQUALS;Sm;0;ON;;;;;Y;;;;; 22CE;CURLY LOGICAL OR;Sm;0;ON;;;;;N;;;;; 22CF;CURLY LOGICAL AND;Sm;0;ON;;;;;N;;;;; 22D0;DOUBLE SUBSET;Sm;0;ON;;;;;Y;;;;; 22D1;DOUBLE SUPERSET;Sm;0;ON;;;;;Y;;;;; 22D2;DOUBLE INTERSECTION;Sm;0;ON;;;;;N;;;;; 22D3;DOUBLE UNION;Sm;0;ON;;;;;N;;;;; 22D4;PITCHFORK;Sm;0;ON;;;;;N;;;;; 22D5;EQUAL AND PARALLEL TO;Sm;0;ON;;;;;N;;;;; 22D6;LESS-THAN WITH DOT;Sm;0;ON;;;;;Y;LESS THAN WITH DOT;;;; 22D7;GREATER-THAN WITH DOT;Sm;0;ON;;;;;Y;GREATER THAN WITH DOT;;;; 22D8;VERY MUCH LESS-THAN;Sm;0;ON;;;;;Y;VERY MUCH LESS THAN;;;; 22D9;VERY MUCH GREATER-THAN;Sm;0;ON;;;;;Y;VERY MUCH GREATER THAN;;;; 22DA;LESS-THAN EQUAL TO OR GREATER-THAN;Sm;0;ON;;;;;Y;LESS THAN EQUAL TO OR GREATER THAN;;;; 22DB;GREATER-THAN EQUAL TO OR LESS-THAN;Sm;0;ON;;;;;Y;GREATER THAN EQUAL TO OR LESS THAN;;;; 22DC;EQUAL TO OR LESS-THAN;Sm;0;ON;;;;;Y;EQUAL TO OR LESS THAN;;;; 22DD;EQUAL TO OR GREATER-THAN;Sm;0;ON;;;;;Y;EQUAL TO OR GREATER THAN;;;; 22DE;EQUAL TO OR PRECEDES;Sm;0;ON;;;;;Y;;;;; 22DF;EQUAL TO OR SUCCEEDS;Sm;0;ON;;;;;Y;;;;; 22E0;DOES NOT PRECEDE OR EQUAL;Sm;0;ON;227C 0338;;;;Y;;;;; 22E1;DOES NOT SUCCEED OR EQUAL;Sm;0;ON;227D 0338;;;;Y;;;;; 22E2;NOT SQUARE IMAGE OF OR EQUAL TO;Sm;0;ON;2291 0338;;;;Y;;;;; 22E3;NOT SQUARE ORIGINAL OF OR EQUAL TO;Sm;0;ON;2292 0338;;;;Y;;;;; 22E4;SQUARE IMAGE OF OR NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;; 22E5;SQUARE ORIGINAL OF OR NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;; 22E6;LESS-THAN BUT NOT EQUIVALENT TO;Sm;0;ON;;;;;Y;LESS THAN BUT NOT EQUIVALENT TO;;;; 22E7;GREATER-THAN BUT NOT EQUIVALENT TO;Sm;0;ON;;;;;Y;GREATER THAN BUT NOT EQUIVALENT TO;;;; 22E8;PRECEDES BUT NOT EQUIVALENT TO;Sm;0;ON;;;;;Y;;;;; 22E9;SUCCEEDS BUT NOT EQUIVALENT TO;Sm;0;ON;;;;;Y;;;;; 22EA;NOT NORMAL SUBGROUP OF;Sm;0;ON;22B2 0338;;;;Y;;;;; 22EB;DOES NOT CONTAIN AS NORMAL SUBGROUP;Sm;0;ON;22B3 0338;;;;Y;;;;; 22EC;NOT NORMAL SUBGROUP OF OR EQUAL TO;Sm;0;ON;22B4 0338;;;;Y;;;;; 22ED;DOES NOT CONTAIN AS NORMAL SUBGROUP OR EQUAL;Sm;0;ON;22B5 0338;;;;Y;;;;; 22EE;VERTICAL ELLIPSIS;Sm;0;ON;;;;;N;;;;; 22EF;MIDLINE HORIZONTAL ELLIPSIS;Sm;0;ON;;;;;N;;;;; 22F0;UP RIGHT DIAGONAL ELLIPSIS;Sm;0;ON;;;;;Y;;;;; 22F1;DOWN RIGHT DIAGONAL ELLIPSIS;Sm;0;ON;;;;;Y;;;;; 2300;DIAMETER SIGN;So;0;ON;;;;;N;;;;; 2301;ELECTRIC ARROW;So;0;ON;;;;;N;;;;; 2302;HOUSE;So;0;ON;;;;;N;;;;; 2303;UP ARROWHEAD;So;0;ON;;;;;N;;;;; 2304;DOWN ARROWHEAD;So;0;ON;;;;;N;;;;; 2305;PROJECTIVE;So;0;ON;;;;;N;;;;; 2306;PERSPECTIVE;So;0;ON;;;;;N;;;;; 2307;WAVY LINE;So;0;ON;;;;;N;;;;; 2308;LEFT CEILING;Sm;0;ON;;;;;Y;;;;; 2309;RIGHT CEILING;Sm;0;ON;;;;;Y;;;;; 230A;LEFT FLOOR;Sm;0;ON;;;;;Y;;;;; 230B;RIGHT FLOOR;Sm;0;ON;;;;;Y;;;;; 230C;BOTTOM RIGHT CROP;So;0;ON;;;;;N;;;;; 230D;BOTTOM LEFT CROP;So;0;ON;;;;;N;;;;; 230E;TOP RIGHT CROP;So;0;ON;;;;;N;;;;; 230F;TOP LEFT CROP;So;0;ON;;;;;N;;;;; 2310;REVERSED NOT SIGN;So;0;ON;;;;;N;;;;; 2311;SQUARE LOZENGE;So;0;ON;;;;;N;;;;; 2312;ARC;So;0;ON;;;;;N;;;;; 2313;SEGMENT;So;0;ON;;;;;N;;;;; 2314;SECTOR;So;0;ON;;;;;N;;;;; 2315;TELEPHONE RECORDER;So;0;ON;;;;;N;;;;; 2316;POSITION INDICATOR;So;0;ON;;;;;N;;;;; 2317;VIEWDATA SQUARE;So;0;ON;;;;;N;;;;; 2318;PLACE OF INTEREST SIGN;So;0;ON;;;;;N;COMMAND KEY;;;; 2319;TURNED NOT SIGN;So;0;ON;;;;;N;;;;; 231A;WATCH;So;0;ON;;;;;N;;;;; 231B;HOURGLASS;So;0;ON;;;;;N;;;;; 231C;TOP LEFT CORNER;So;0;ON;;;;;N;;;;; 231D;TOP RIGHT CORNER;So;0;ON;;;;;N;;;;; 231E;BOTTOM LEFT CORNER;So;0;ON;;;;;N;;;;; 231F;BOTTOM RIGHT CORNER;So;0;ON;;;;;N;;;;; 2320;TOP HALF INTEGRAL;Sm;0;ON;;;;;Y;;;;; 2321;BOTTOM HALF INTEGRAL;Sm;0;ON;;;;;Y;;;;; 2322;FROWN;So;0;ON;;;;;N;;;;; 2323;SMILE;So;0;ON;;;;;N;;;;; 2324;UP ARROWHEAD BETWEEN TWO HORIZONTAL BARS;So;0;ON;;;;;N;ENTER KEY;;;; 2325;OPTION KEY;So;0;ON;;;;;N;;;;; 2326;ERASE TO THE RIGHT;So;0;ON;;;;;N;DELETE TO THE RIGHT KEY;;;; 2327;X IN A RECTANGLE BOX;So;0;ON;;;;;N;CLEAR KEY;;;; 2328;KEYBOARD;So;0;ON;;;;;N;;;;; 2329;LEFT-POINTING ANGLE BRACKET;Ps;0;ON;3008;;;;Y;BRA;;;; 232A;RIGHT-POINTING ANGLE BRACKET;Pe;0;ON;3009;;;;Y;KET;;;; 232B;ERASE TO THE LEFT;So;0;ON;;;;;N;DELETE TO THE LEFT KEY;;;; 232C;BENZENE RING;So;0;ON;;;;;N;;;;; 232D;CYLINDRICITY;So;0;ON;;;;;N;;;;; 232E;ALL AROUND-PROFILE;So;0;ON;;;;;N;;;;; 232F;SYMMETRY;So;0;ON;;;;;N;;;;; 2330;TOTAL RUNOUT;So;0;ON;;;;;N;;;;; 2331;DIMENSION ORIGIN;So;0;ON;;;;;N;;;;; 2332;CONICAL TAPER;So;0;ON;;;;;N;;;;; 2333;SLOPE;So;0;ON;;;;;N;;;;; 2334;COUNTERBORE;So;0;ON;;;;;N;;;;; 2335;COUNTERSINK;So;0;ON;;;;;N;;;;; 2336;APL FUNCTIONAL SYMBOL I-BEAM;So;0;L;;;;;N;;;;; 2337;APL FUNCTIONAL SYMBOL SQUISH QUAD;So;0;L;;;;;N;;;;; 2338;APL FUNCTIONAL SYMBOL QUAD EQUAL;So;0;L;;;;;N;;;;; 2339;APL FUNCTIONAL SYMBOL QUAD DIVIDE;So;0;L;;;;;N;;;;; 233A;APL FUNCTIONAL SYMBOL QUAD DIAMOND;So;0;L;;;;;N;;;;; 233B;APL FUNCTIONAL SYMBOL QUAD JOT;So;0;L;;;;;N;;;;; 233C;APL FUNCTIONAL SYMBOL QUAD CIRCLE;So;0;L;;;;;N;;;;; 233D;APL FUNCTIONAL SYMBOL CIRCLE STILE;So;0;L;;;;;N;;;;; 233E;APL FUNCTIONAL SYMBOL CIRCLE JOT;So;0;L;;;;;N;;;;; 233F;APL FUNCTIONAL SYMBOL SLASH BAR;So;0;L;;;;;N;;;;; 2340;APL FUNCTIONAL SYMBOL BACKSLASH BAR;So;0;L;;;;;N;;;;; 2341;APL FUNCTIONAL SYMBOL QUAD SLASH;So;0;L;;;;;N;;;;; 2342;APL FUNCTIONAL SYMBOL QUAD BACKSLASH;So;0;L;;;;;N;;;;; 2343;APL FUNCTIONAL SYMBOL QUAD LESS-THAN;So;0;L;;;;;N;;;;; 2344;APL FUNCTIONAL SYMBOL QUAD GREATER-THAN;So;0;L;;;;;N;;;;; 2345;APL FUNCTIONAL SYMBOL LEFTWARDS VANE;So;0;L;;;;;N;;;;; 2346;APL FUNCTIONAL SYMBOL RIGHTWARDS VANE;So;0;L;;;;;N;;;;; 2347;APL FUNCTIONAL SYMBOL QUAD LEFTWARDS ARROW;So;0;L;;;;;N;;;;; 2348;APL FUNCTIONAL SYMBOL QUAD RIGHTWARDS ARROW;So;0;L;;;;;N;;;;; 2349;APL FUNCTIONAL SYMBOL CIRCLE BACKSLASH;So;0;L;;;;;N;;;;; 234A;APL FUNCTIONAL SYMBOL DOWN TACK UNDERBAR;So;0;L;;;;;N;;*;;; 234B;APL FUNCTIONAL SYMBOL DELTA STILE;So;0;L;;;;;N;;;;; 234C;APL FUNCTIONAL SYMBOL QUAD DOWN CARET;So;0;L;;;;;N;;;;; 234D;APL FUNCTIONAL SYMBOL QUAD DELTA;So;0;L;;;;;N;;;;; 234E;APL FUNCTIONAL SYMBOL DOWN TACK JOT;So;0;L;;;;;N;;*;;; 234F;APL FUNCTIONAL SYMBOL UPWARDS VANE;So;0;L;;;;;N;;;;; 2350;APL FUNCTIONAL SYMBOL QUAD UPWARDS ARROW;So;0;L;;;;;N;;;;; 2351;APL FUNCTIONAL SYMBOL UP TACK OVERBAR;So;0;L;;;;;N;;*;;; 2352;APL FUNCTIONAL SYMBOL DEL STILE;So;0;L;;;;;N;;;;; 2353;APL FUNCTIONAL SYMBOL QUAD UP CARET;So;0;L;;;;;N;;;;; 2354;APL FUNCTIONAL SYMBOL QUAD DEL;So;0;L;;;;;N;;;;; 2355;APL FUNCTIONAL SYMBOL UP TACK JOT;So;0;L;;;;;N;;*;;; 2356;APL FUNCTIONAL SYMBOL DOWNWARDS VANE;So;0;L;;;;;N;;;;; 2357;APL FUNCTIONAL SYMBOL QUAD DOWNWARDS ARROW;So;0;L;;;;;N;;;;; 2358;APL FUNCTIONAL SYMBOL QUOTE UNDERBAR;So;0;L;;;;;N;;;;; 2359;APL FUNCTIONAL SYMBOL DELTA UNDERBAR;So;0;L;;;;;N;;;;; 235A;APL FUNCTIONAL SYMBOL DIAMOND UNDERBAR;So;0;L;;;;;N;;;;; 235B;APL FUNCTIONAL SYMBOL JOT UNDERBAR;So;0;L;;;;;N;;;;; 235C;APL FUNCTIONAL SYMBOL CIRCLE UNDERBAR;So;0;L;;;;;N;;;;; 235D;APL FUNCTIONAL SYMBOL UP SHOE JOT;So;0;L;;;;;N;;;;; 235E;APL FUNCTIONAL SYMBOL QUOTE QUAD;So;0;L;;;;;N;;;;; 235F;APL FUNCTIONAL SYMBOL CIRCLE STAR;So;0;L;;;;;N;;;;; 2360;APL FUNCTIONAL SYMBOL QUAD COLON;So;0;L;;;;;N;;;;; 2361;APL FUNCTIONAL SYMBOL UP TACK DIAERESIS;So;0;L;;;;;N;;*;;; 2362;APL FUNCTIONAL SYMBOL DEL DIAERESIS;So;0;L;;;;;N;;;;; 2363;APL FUNCTIONAL SYMBOL STAR DIAERESIS;So;0;L;;;;;N;;;;; 2364;APL FUNCTIONAL SYMBOL JOT DIAERESIS;So;0;L;;;;;N;;;;; 2365;APL FUNCTIONAL SYMBOL CIRCLE DIAERESIS;So;0;L;;;;;N;;;;; 2366;APL FUNCTIONAL SYMBOL DOWN SHOE STILE;So;0;L;;;;;N;;;;; 2367;APL FUNCTIONAL SYMBOL LEFT SHOE STILE;So;0;L;;;;;N;;;;; 2368;APL FUNCTIONAL SYMBOL TILDE DIAERESIS;So;0;L;;;;;N;;;;; 2369;APL FUNCTIONAL SYMBOL GREATER-THAN DIAERESIS;So;0;L;;;;;N;;;;; 236A;APL FUNCTIONAL SYMBOL COMMA BAR;So;0;L;;;;;N;;;;; 236B;APL FUNCTIONAL SYMBOL DEL TILDE;So;0;L;;;;;N;;;;; 236C;APL FUNCTIONAL SYMBOL ZILDE;So;0;L;;;;;N;;;;; 236D;APL FUNCTIONAL SYMBOL STILE TILDE;So;0;L;;;;;N;;;;; 236E;APL FUNCTIONAL SYMBOL SEMICOLON UNDERBAR;So;0;L;;;;;N;;;;; 236F;APL FUNCTIONAL SYMBOL QUAD NOT EQUAL;So;0;L;;;;;N;;;;; 2370;APL FUNCTIONAL SYMBOL QUAD QUESTION;So;0;L;;;;;N;;;;; 2371;APL FUNCTIONAL SYMBOL DOWN CARET TILDE;So;0;L;;;;;N;;;;; 2372;APL FUNCTIONAL SYMBOL UP CARET TILDE;So;0;L;;;;;N;;;;; 2373;APL FUNCTIONAL SYMBOL IOTA;So;0;L;;;;;N;;;;; 2374;APL FUNCTIONAL SYMBOL RHO;So;0;L;;;;;N;;;;; 2375;APL FUNCTIONAL SYMBOL OMEGA;So;0;L;;;;;N;;;;; 2376;APL FUNCTIONAL SYMBOL ALPHA UNDERBAR;So;0;L;;;;;N;;;;; 2377;APL FUNCTIONAL SYMBOL EPSILON UNDERBAR;So;0;L;;;;;N;;;;; 2378;APL FUNCTIONAL SYMBOL IOTA UNDERBAR;So;0;L;;;;;N;;;;; 2379;APL FUNCTIONAL SYMBOL OMEGA UNDERBAR;So;0;L;;;;;N;;;;; 237A;APL FUNCTIONAL SYMBOL ALPHA;So;0;L;;;;;N;;;;; 237B;NOT CHECK MARK;So;0;ON;;;;;N;;;;; 237D;SHOULDERED OPEN BOX;So;0;ON;;;;;N;;;;; 237E;BELL SYMBOL;So;0;ON;;;;;N;;;;; 237F;VERTICAL LINE WITH MIDDLE DOT;So;0;ON;;;;;N;;;;; 2380;INSERTION SYMBOL;So;0;ON;;;;;N;;;;; 2381;CONTINUOUS UNDERLINE SYMBOL;So;0;ON;;;;;N;;;;; 2382;DISCONTINUOUS UNDERLINE SYMBOL;So;0;ON;;;;;N;;;;; 2383;EMPHASIS SYMBOL;So;0;ON;;;;;N;;;;; 2384;COMPOSITION SYMBOL;So;0;ON;;;;;N;;;;; 2385;WHITE SQUARE WITH CENTRE VERTICAL LINE;So;0;ON;;;;;N;;;;; 2386;ENTER SYMBOL;So;0;ON;;;;;N;;;;; 2387;ALTERNATIVE KEY SYMBOL;So;0;ON;;;;;N;;;;; 2388;HELM SYMBOL;So;0;ON;;;;;N;;;;; 2389;CIRCLED HORIZONTAL BAR WITH NOTCH;So;0;ON;;;;;N;;pause;;; 238A;CIRCLED TRIANGLE DOWN;So;0;ON;;;;;N;;break;;; 238B;BROKEN CIRCLE WITH NORTHWEST ARROW;So;0;ON;;;;;N;;escape;;; 238C;UNDO SYMBOL;So;0;ON;;;;;N;;;;; 238D;MONOSTABLE SYMBOL;So;0;ON;;;;;N;;;;; 238E;HYSTERESIS SYMBOL;So;0;ON;;;;;N;;;;; 238F;OPEN-CIRCUIT-OUTPUT H-TYPE SYMBOL;So;0;ON;;;;;N;;;;; 2390;OPEN-CIRCUIT-OUTPUT L-TYPE SYMBOL;So;0;ON;;;;;N;;;;; 2391;PASSIVE-PULL-DOWN-OUTPUT SYMBOL;So;0;ON;;;;;N;;;;; 2392;PASSIVE-PULL-UP-OUTPUT SYMBOL;So;0;ON;;;;;N;;;;; 2393;DIRECT CURRENT SYMBOL FORM TWO;So;0;ON;;;;;N;;;;; 2394;SOFTWARE-FUNCTION SYMBOL;So;0;ON;;;;;N;;;;; 2395;APL FUNCTIONAL SYMBOL QUAD;So;0;L;;;;;N;;;;; 2396;DECIMAL SEPARATOR KEY SYMBOL;So;0;ON;;;;;N;;;;; 2397;PREVIOUS PAGE;So;0;ON;;;;;N;;;;; 2398;NEXT PAGE;So;0;ON;;;;;N;;;;; 2399;PRINT SCREEN SYMBOL;So;0;ON;;;;;N;;;;; 239A;CLEAR SCREEN SYMBOL;So;0;ON;;;;;N;;;;; 2400;SYMBOL FOR NULL;So;0;ON;;;;;N;GRAPHIC FOR NULL;;;; 2401;SYMBOL FOR START OF HEADING;So;0;ON;;;;;N;GRAPHIC FOR START OF HEADING;;;; 2402;SYMBOL FOR START OF TEXT;So;0;ON;;;;;N;GRAPHIC FOR START OF TEXT;;;; 2403;SYMBOL FOR END OF TEXT;So;0;ON;;;;;N;GRAPHIC FOR END OF TEXT;;;; 2404;SYMBOL FOR END OF TRANSMISSION;So;0;ON;;;;;N;GRAPHIC FOR END OF TRANSMISSION;;;; 2405;SYMBOL FOR ENQUIRY;So;0;ON;;;;;N;GRAPHIC FOR ENQUIRY;;;; 2406;SYMBOL FOR ACKNOWLEDGE;So;0;ON;;;;;N;GRAPHIC FOR ACKNOWLEDGE;;;; 2407;SYMBOL FOR BELL;So;0;ON;;;;;N;GRAPHIC FOR BELL;;;; 2408;SYMBOL FOR BACKSPACE;So;0;ON;;;;;N;GRAPHIC FOR BACKSPACE;;;; 2409;SYMBOL FOR HORIZONTAL TABULATION;So;0;ON;;;;;N;GRAPHIC FOR HORIZONTAL TABULATION;;;; 240A;SYMBOL FOR LINE FEED;So;0;ON;;;;;N;GRAPHIC FOR LINE FEED;;;; 240B;SYMBOL FOR VERTICAL TABULATION;So;0;ON;;;;;N;GRAPHIC FOR VERTICAL TABULATION;;;; 240C;SYMBOL FOR FORM FEED;So;0;ON;;;;;N;GRAPHIC FOR FORM FEED;;;; 240D;SYMBOL FOR CARRIAGE RETURN;So;0;ON;;;;;N;GRAPHIC FOR CARRIAGE RETURN;;;; 240E;SYMBOL FOR SHIFT OUT;So;0;ON;;;;;N;GRAPHIC FOR SHIFT OUT;;;; 240F;SYMBOL FOR SHIFT IN;So;0;ON;;;;;N;GRAPHIC FOR SHIFT IN;;;; 2410;SYMBOL FOR DATA LINK ESCAPE;So;0;ON;;;;;N;GRAPHIC FOR DATA LINK ESCAPE;;;; 2411;SYMBOL FOR DEVICE CONTROL ONE;So;0;ON;;;;;N;GRAPHIC FOR DEVICE CONTROL ONE;;;; 2412;SYMBOL FOR DEVICE CONTROL TWO;So;0;ON;;;;;N;GRAPHIC FOR DEVICE CONTROL TWO;;;; 2413;SYMBOL FOR DEVICE CONTROL THREE;So;0;ON;;;;;N;GRAPHIC FOR DEVICE CONTROL THREE;;;; 2414;SYMBOL FOR DEVICE CONTROL FOUR;So;0;ON;;;;;N;GRAPHIC FOR DEVICE CONTROL FOUR;;;; 2415;SYMBOL FOR NEGATIVE ACKNOWLEDGE;So;0;ON;;;;;N;GRAPHIC FOR NEGATIVE ACKNOWLEDGE;;;; 2416;SYMBOL FOR SYNCHRONOUS IDLE;So;0;ON;;;;;N;GRAPHIC FOR SYNCHRONOUS IDLE;;;; 2417;SYMBOL FOR END OF TRANSMISSION BLOCK;So;0;ON;;;;;N;GRAPHIC FOR END OF TRANSMISSION BLOCK;;;; 2418;SYMBOL FOR CANCEL;So;0;ON;;;;;N;GRAPHIC FOR CANCEL;;;; 2419;SYMBOL FOR END OF MEDIUM;So;0;ON;;;;;N;GRAPHIC FOR END OF MEDIUM;;;; 241A;SYMBOL FOR SUBSTITUTE;So;0;ON;;;;;N;GRAPHIC FOR SUBSTITUTE;;;; 241B;SYMBOL FOR ESCAPE;So;0;ON;;;;;N;GRAPHIC FOR ESCAPE;;;; 241C;SYMBOL FOR FILE SEPARATOR;So;0;ON;;;;;N;GRAPHIC FOR FILE SEPARATOR;;;; 241D;SYMBOL FOR GROUP SEPARATOR;So;0;ON;;;;;N;GRAPHIC FOR GROUP SEPARATOR;;;; 241E;SYMBOL FOR RECORD SEPARATOR;So;0;ON;;;;;N;GRAPHIC FOR RECORD SEPARATOR;;;; 241F;SYMBOL FOR UNIT SEPARATOR;So;0;ON;;;;;N;GRAPHIC FOR UNIT SEPARATOR;;;; 2420;SYMBOL FOR SPACE;So;0;ON;;;;;N;GRAPHIC FOR SPACE;;;; 2421;SYMBOL FOR DELETE;So;0;ON;;;;;N;GRAPHIC FOR DELETE;;;; 2422;BLANK SYMBOL;So;0;ON;;;;;N;BLANK;;;; 2423;OPEN BOX;So;0;ON;;;;;N;;;;; 2424;SYMBOL FOR NEWLINE;So;0;ON;;;;;N;GRAPHIC FOR NEWLINE;;;; 2425;SYMBOL FOR DELETE FORM TWO;So;0;ON;;;;;N;;;;; 2426;SYMBOL FOR SUBSTITUTE FORM TWO;So;0;ON;;;;;N;;;;; 2440;OCR HOOK;So;0;ON;;;;;N;;;;; 2441;OCR CHAIR;So;0;ON;;;;;N;;;;; 2442;OCR FORK;So;0;ON;;;;;N;;;;; 2443;OCR INVERTED FORK;So;0;ON;;;;;N;;;;; 2444;OCR BELT BUCKLE;So;0;ON;;;;;N;;;;; 2445;OCR BOW TIE;So;0;ON;;;;;N;;;;; 2446;OCR BRANCH BANK IDENTIFICATION;So;0;ON;;;;;N;;;;; 2447;OCR AMOUNT OF CHECK;So;0;ON;;;;;N;;;;; 2448;OCR DASH;So;0;ON;;;;;N;;;;; 2449;OCR CUSTOMER ACCOUNT NUMBER;So;0;ON;;;;;N;;;;; 244A;OCR DOUBLE BACKSLASH;So;0;ON;;;;;N;;;;; 2460;CIRCLED DIGIT ONE;No;0;EN; 0031;;1;1;N;;;;; 2461;CIRCLED DIGIT TWO;No;0;EN; 0032;;2;2;N;;;;; 2462;CIRCLED DIGIT THREE;No;0;EN; 0033;;3;3;N;;;;; 2463;CIRCLED DIGIT FOUR;No;0;EN; 0034;;4;4;N;;;;; 2464;CIRCLED DIGIT FIVE;No;0;EN; 0035;;5;5;N;;;;; 2465;CIRCLED DIGIT SIX;No;0;EN; 0036;;6;6;N;;;;; 2466;CIRCLED DIGIT SEVEN;No;0;EN; 0037;;7;7;N;;;;; 2467;CIRCLED DIGIT EIGHT;No;0;EN; 0038;;8;8;N;;;;; 2468;CIRCLED DIGIT NINE;No;0;EN; 0039;;9;9;N;;;;; 2469;CIRCLED NUMBER TEN;No;0;EN; 0031 0030;;;10;N;;;;; 246A;CIRCLED NUMBER ELEVEN;No;0;EN; 0031 0031;;;11;N;;;;; 246B;CIRCLED NUMBER TWELVE;No;0;EN; 0031 0032;;;12;N;;;;; 246C;CIRCLED NUMBER THIRTEEN;No;0;EN; 0031 0033;;;13;N;;;;; 246D;CIRCLED NUMBER FOURTEEN;No;0;EN; 0031 0034;;;14;N;;;;; 246E;CIRCLED NUMBER FIFTEEN;No;0;EN; 0031 0035;;;15;N;;;;; 246F;CIRCLED NUMBER SIXTEEN;No;0;EN; 0031 0036;;;16;N;;;;; 2470;CIRCLED NUMBER SEVENTEEN;No;0;EN; 0031 0037;;;17;N;;;;; 2471;CIRCLED NUMBER EIGHTEEN;No;0;EN; 0031 0038;;;18;N;;;;; 2472;CIRCLED NUMBER NINETEEN;No;0;EN; 0031 0039;;;19;N;;;;; 2473;CIRCLED NUMBER TWENTY;No;0;EN; 0032 0030;;;20;N;;;;; 2474;PARENTHESIZED DIGIT ONE;No;0;EN; 0028 0031 0029;;1;1;N;;;;; 2475;PARENTHESIZED DIGIT TWO;No;0;EN; 0028 0032 0029;;2;2;N;;;;; 2476;PARENTHESIZED DIGIT THREE;No;0;EN; 0028 0033 0029;;3;3;N;;;;; 2477;PARENTHESIZED DIGIT FOUR;No;0;EN; 0028 0034 0029;;4;4;N;;;;; 2478;PARENTHESIZED DIGIT FIVE;No;0;EN; 0028 0035 0029;;5;5;N;;;;; 2479;PARENTHESIZED DIGIT SIX;No;0;EN; 0028 0036 0029;;6;6;N;;;;; 247A;PARENTHESIZED DIGIT SEVEN;No;0;EN; 0028 0037 0029;;7;7;N;;;;; 247B;PARENTHESIZED DIGIT EIGHT;No;0;EN; 0028 0038 0029;;8;8;N;;;;; 247C;PARENTHESIZED DIGIT NINE;No;0;EN; 0028 0039 0029;;9;9;N;;;;; 247D;PARENTHESIZED NUMBER TEN;No;0;EN; 0028 0031 0030 0029;;;10;N;;;;; 247E;PARENTHESIZED NUMBER ELEVEN;No;0;EN; 0028 0031 0031 0029;;;11;N;;;;; 247F;PARENTHESIZED NUMBER TWELVE;No;0;EN; 0028 0031 0032 0029;;;12;N;;;;; 2480;PARENTHESIZED NUMBER THIRTEEN;No;0;EN; 0028 0031 0033 0029;;;13;N;;;;; 2481;PARENTHESIZED NUMBER FOURTEEN;No;0;EN; 0028 0031 0034 0029;;;14;N;;;;; 2482;PARENTHESIZED NUMBER FIFTEEN;No;0;EN; 0028 0031 0035 0029;;;15;N;;;;; 2483;PARENTHESIZED NUMBER SIXTEEN;No;0;EN; 0028 0031 0036 0029;;;16;N;;;;; 2484;PARENTHESIZED NUMBER SEVENTEEN;No;0;EN; 0028 0031 0037 0029;;;17;N;;;;; 2485;PARENTHESIZED NUMBER EIGHTEEN;No;0;EN; 0028 0031 0038 0029;;;18;N;;;;; 2486;PARENTHESIZED NUMBER NINETEEN;No;0;EN; 0028 0031 0039 0029;;;19;N;;;;; 2487;PARENTHESIZED NUMBER TWENTY;No;0;EN; 0028 0032 0030 0029;;;20;N;;;;; 2488;DIGIT ONE FULL STOP;No;0;EN; 0031 002E;;1;1;N;DIGIT ONE PERIOD;;;; 2489;DIGIT TWO FULL STOP;No;0;EN; 0032 002E;;2;2;N;DIGIT TWO PERIOD;;;; 248A;DIGIT THREE FULL STOP;No;0;EN; 0033 002E;;3;3;N;DIGIT THREE PERIOD;;;; 248B;DIGIT FOUR FULL STOP;No;0;EN; 0034 002E;;4;4;N;DIGIT FOUR PERIOD;;;; 248C;DIGIT FIVE FULL STOP;No;0;EN; 0035 002E;;5;5;N;DIGIT FIVE PERIOD;;;; 248D;DIGIT SIX FULL STOP;No;0;EN; 0036 002E;;6;6;N;DIGIT SIX PERIOD;;;; 248E;DIGIT SEVEN FULL STOP;No;0;EN; 0037 002E;;7;7;N;DIGIT SEVEN PERIOD;;;; 248F;DIGIT EIGHT FULL STOP;No;0;EN; 0038 002E;;8;8;N;DIGIT EIGHT PERIOD;;;; 2490;DIGIT NINE FULL STOP;No;0;EN; 0039 002E;;9;9;N;DIGIT NINE PERIOD;;;; 2491;NUMBER TEN FULL STOP;No;0;EN; 0031 0030 002E;;;10;N;NUMBER TEN PERIOD;;;; 2492;NUMBER ELEVEN FULL STOP;No;0;EN; 0031 0031 002E;;;11;N;NUMBER ELEVEN PERIOD;;;; 2493;NUMBER TWELVE FULL STOP;No;0;EN; 0031 0032 002E;;;12;N;NUMBER TWELVE PERIOD;;;; 2494;NUMBER THIRTEEN FULL STOP;No;0;EN; 0031 0033 002E;;;13;N;NUMBER THIRTEEN PERIOD;;;; 2495;NUMBER FOURTEEN FULL STOP;No;0;EN; 0031 0034 002E;;;14;N;NUMBER FOURTEEN PERIOD;;;; 2496;NUMBER FIFTEEN FULL STOP;No;0;EN; 0031 0035 002E;;;15;N;NUMBER FIFTEEN PERIOD;;;; 2497;NUMBER SIXTEEN FULL STOP;No;0;EN; 0031 0036 002E;;;16;N;NUMBER SIXTEEN PERIOD;;;; 2498;NUMBER SEVENTEEN FULL STOP;No;0;EN; 0031 0037 002E;;;17;N;NUMBER SEVENTEEN PERIOD;;;; 2499;NUMBER EIGHTEEN FULL STOP;No;0;EN; 0031 0038 002E;;;18;N;NUMBER EIGHTEEN PERIOD;;;; 249A;NUMBER NINETEEN FULL STOP;No;0;EN; 0031 0039 002E;;;19;N;NUMBER NINETEEN PERIOD;;;; 249B;NUMBER TWENTY FULL STOP;No;0;EN; 0032 0030 002E;;;20;N;NUMBER TWENTY PERIOD;;;; 249C;PARENTHESIZED LATIN SMALL LETTER A;So;0;L; 0028 0061 0029;;;;N;;;;; 249D;PARENTHESIZED LATIN SMALL LETTER B;So;0;L; 0028 0062 0029;;;;N;;;;; 249E;PARENTHESIZED LATIN SMALL LETTER C;So;0;L; 0028 0063 0029;;;;N;;;;; 249F;PARENTHESIZED LATIN SMALL LETTER D;So;0;L; 0028 0064 0029;;;;N;;;;; 24A0;PARENTHESIZED LATIN SMALL LETTER E;So;0;L; 0028 0065 0029;;;;N;;;;; 24A1;PARENTHESIZED LATIN SMALL LETTER F;So;0;L; 0028 0066 0029;;;;N;;;;; 24A2;PARENTHESIZED LATIN SMALL LETTER G;So;0;L; 0028 0067 0029;;;;N;;;;; 24A3;PARENTHESIZED LATIN SMALL LETTER H;So;0;L; 0028 0068 0029;;;;N;;;;; 24A4;PARENTHESIZED LATIN SMALL LETTER I;So;0;L; 0028 0069 0029;;;;N;;;;; 24A5;PARENTHESIZED LATIN SMALL LETTER J;So;0;L; 0028 006A 0029;;;;N;;;;; 24A6;PARENTHESIZED LATIN SMALL LETTER K;So;0;L; 0028 006B 0029;;;;N;;;;; 24A7;PARENTHESIZED LATIN SMALL LETTER L;So;0;L; 0028 006C 0029;;;;N;;;;; 24A8;PARENTHESIZED LATIN SMALL LETTER M;So;0;L; 0028 006D 0029;;;;N;;;;; 24A9;PARENTHESIZED LATIN SMALL LETTER N;So;0;L; 0028 006E 0029;;;;N;;;;; 24AA;PARENTHESIZED LATIN SMALL LETTER O;So;0;L; 0028 006F 0029;;;;N;;;;; 24AB;PARENTHESIZED LATIN SMALL LETTER P;So;0;L; 0028 0070 0029;;;;N;;;;; 24AC;PARENTHESIZED LATIN SMALL LETTER Q;So;0;L; 0028 0071 0029;;;;N;;;;; 24AD;PARENTHESIZED LATIN SMALL LETTER R;So;0;L; 0028 0072 0029;;;;N;;;;; 24AE;PARENTHESIZED LATIN SMALL LETTER S;So;0;L; 0028 0073 0029;;;;N;;;;; 24AF;PARENTHESIZED LATIN SMALL LETTER T;So;0;L; 0028 0074 0029;;;;N;;;;; 24B0;PARENTHESIZED LATIN SMALL LETTER U;So;0;L; 0028 0075 0029;;;;N;;;;; 24B1;PARENTHESIZED LATIN SMALL LETTER V;So;0;L; 0028 0076 0029;;;;N;;;;; 24B2;PARENTHESIZED LATIN SMALL LETTER W;So;0;L; 0028 0077 0029;;;;N;;;;; 24B3;PARENTHESIZED LATIN SMALL LETTER X;So;0;L; 0028 0078 0029;;;;N;;;;; 24B4;PARENTHESIZED LATIN SMALL LETTER Y;So;0;L; 0028 0079 0029;;;;N;;;;; 24B5;PARENTHESIZED LATIN SMALL LETTER Z;So;0;L; 0028 007A 0029;;;;N;;;;; 24B6;CIRCLED LATIN CAPITAL LETTER A;So;0;L; 0041;;;;N;;;;24D0; 24B7;CIRCLED LATIN CAPITAL LETTER B;So;0;L; 0042;;;;N;;;;24D1; 24B8;CIRCLED LATIN CAPITAL LETTER C;So;0;L; 0043;;;;N;;;;24D2; 24B9;CIRCLED LATIN CAPITAL LETTER D;So;0;L; 0044;;;;N;;;;24D3; 24BA;CIRCLED LATIN CAPITAL LETTER E;So;0;L; 0045;;;;N;;;;24D4; 24BB;CIRCLED LATIN CAPITAL LETTER F;So;0;L; 0046;;;;N;;;;24D5; 24BC;CIRCLED LATIN CAPITAL LETTER G;So;0;L; 0047;;;;N;;;;24D6; 24BD;CIRCLED LATIN CAPITAL LETTER H;So;0;L; 0048;;;;N;;;;24D7; 24BE;CIRCLED LATIN CAPITAL LETTER I;So;0;L; 0049;;;;N;;;;24D8; 24BF;CIRCLED LATIN CAPITAL LETTER J;So;0;L; 004A;;;;N;;;;24D9; 24C0;CIRCLED LATIN CAPITAL LETTER K;So;0;L; 004B;;;;N;;;;24DA; 24C1;CIRCLED LATIN CAPITAL LETTER L;So;0;L; 004C;;;;N;;;;24DB; 24C2;CIRCLED LATIN CAPITAL LETTER M;So;0;L; 004D;;;;N;;;;24DC; 24C3;CIRCLED LATIN CAPITAL LETTER N;So;0;L; 004E;;;;N;;;;24DD; 24C4;CIRCLED LATIN CAPITAL LETTER O;So;0;L; 004F;;;;N;;;;24DE; 24C5;CIRCLED LATIN CAPITAL LETTER P;So;0;L; 0050;;;;N;;;;24DF; 24C6;CIRCLED LATIN CAPITAL LETTER Q;So;0;L; 0051;;;;N;;;;24E0; 24C7;CIRCLED LATIN CAPITAL LETTER R;So;0;L; 0052;;;;N;;;;24E1; 24C8;CIRCLED LATIN CAPITAL LETTER S;So;0;L; 0053;;;;N;;;;24E2; 24C9;CIRCLED LATIN CAPITAL LETTER T;So;0;L; 0054;;;;N;;;;24E3; 24CA;CIRCLED LATIN CAPITAL LETTER U;So;0;L; 0055;;;;N;;;;24E4; 24CB;CIRCLED LATIN CAPITAL LETTER V;So;0;L; 0056;;;;N;;;;24E5; 24CC;CIRCLED LATIN CAPITAL LETTER W;So;0;L; 0057;;;;N;;;;24E6; 24CD;CIRCLED LATIN CAPITAL LETTER X;So;0;L; 0058;;;;N;;;;24E7; 24CE;CIRCLED LATIN CAPITAL LETTER Y;So;0;L; 0059;;;;N;;;;24E8; 24CF;CIRCLED LATIN CAPITAL LETTER Z;So;0;L; 005A;;;;N;;;;24E9; 24D0;CIRCLED LATIN SMALL LETTER A;So;0;L; 0061;;;;N;;;24B6;;24B6 24D1;CIRCLED LATIN SMALL LETTER B;So;0;L; 0062;;;;N;;;24B7;;24B7 24D2;CIRCLED LATIN SMALL LETTER C;So;0;L; 0063;;;;N;;;24B8;;24B8 24D3;CIRCLED LATIN SMALL LETTER D;So;0;L; 0064;;;;N;;;24B9;;24B9 24D4;CIRCLED LATIN SMALL LETTER E;So;0;L; 0065;;;;N;;;24BA;;24BA 24D5;CIRCLED LATIN SMALL LETTER F;So;0;L; 0066;;;;N;;;24BB;;24BB 24D6;CIRCLED LATIN SMALL LETTER G;So;0;L; 0067;;;;N;;;24BC;;24BC 24D7;CIRCLED LATIN SMALL LETTER H;So;0;L; 0068;;;;N;;;24BD;;24BD 24D8;CIRCLED LATIN SMALL LETTER I;So;0;L; 0069;;;;N;;;24BE;;24BE 24D9;CIRCLED LATIN SMALL LETTER J;So;0;L; 006A;;;;N;;;24BF;;24BF 24DA;CIRCLED LATIN SMALL LETTER K;So;0;L; 006B;;;;N;;;24C0;;24C0 24DB;CIRCLED LATIN SMALL LETTER L;So;0;L; 006C;;;;N;;;24C1;;24C1 24DC;CIRCLED LATIN SMALL LETTER M;So;0;L; 006D;;;;N;;;24C2;;24C2 24DD;CIRCLED LATIN SMALL LETTER N;So;0;L; 006E;;;;N;;;24C3;;24C3 24DE;CIRCLED LATIN SMALL LETTER O;So;0;L; 006F;;;;N;;;24C4;;24C4 24DF;CIRCLED LATIN SMALL LETTER P;So;0;L; 0070;;;;N;;;24C5;;24C5 24E0;CIRCLED LATIN SMALL LETTER Q;So;0;L; 0071;;;;N;;;24C6;;24C6 24E1;CIRCLED LATIN SMALL LETTER R;So;0;L; 0072;;;;N;;;24C7;;24C7 24E2;CIRCLED LATIN SMALL LETTER S;So;0;L; 0073;;;;N;;;24C8;;24C8 24E3;CIRCLED LATIN SMALL LETTER T;So;0;L; 0074;;;;N;;;24C9;;24C9 24E4;CIRCLED LATIN SMALL LETTER U;So;0;L; 0075;;;;N;;;24CA;;24CA 24E5;CIRCLED LATIN SMALL LETTER V;So;0;L; 0076;;;;N;;;24CB;;24CB 24E6;CIRCLED LATIN SMALL LETTER W;So;0;L; 0077;;;;N;;;24CC;;24CC 24E7;CIRCLED LATIN SMALL LETTER X;So;0;L; 0078;;;;N;;;24CD;;24CD 24E8;CIRCLED LATIN SMALL LETTER Y;So;0;L; 0079;;;;N;;;24CE;;24CE 24E9;CIRCLED LATIN SMALL LETTER Z;So;0;L; 007A;;;;N;;;24CF;;24CF 24EA;CIRCLED DIGIT ZERO;No;0;EN; 0030;;0;0;N;;;;; 2500;BOX DRAWINGS LIGHT HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT HORIZONTAL;;;; 2501;BOX DRAWINGS HEAVY HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY HORIZONTAL;;;; 2502;BOX DRAWINGS LIGHT VERTICAL;So;0;ON;;;;;N;FORMS LIGHT VERTICAL;;;; 2503;BOX DRAWINGS HEAVY VERTICAL;So;0;ON;;;;;N;FORMS HEAVY VERTICAL;;;; 2504;BOX DRAWINGS LIGHT TRIPLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT TRIPLE DASH HORIZONTAL;;;; 2505;BOX DRAWINGS HEAVY TRIPLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY TRIPLE DASH HORIZONTAL;;;; 2506;BOX DRAWINGS LIGHT TRIPLE DASH VERTICAL;So;0;ON;;;;;N;FORMS LIGHT TRIPLE DASH VERTICAL;;;; 2507;BOX DRAWINGS HEAVY TRIPLE DASH VERTICAL;So;0;ON;;;;;N;FORMS HEAVY TRIPLE DASH VERTICAL;;;; 2508;BOX DRAWINGS LIGHT QUADRUPLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT QUADRUPLE DASH HORIZONTAL;;;; 2509;BOX DRAWINGS HEAVY QUADRUPLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY QUADRUPLE DASH HORIZONTAL;;;; 250A;BOX DRAWINGS LIGHT QUADRUPLE DASH VERTICAL;So;0;ON;;;;;N;FORMS LIGHT QUADRUPLE DASH VERTICAL;;;; 250B;BOX DRAWINGS HEAVY QUADRUPLE DASH VERTICAL;So;0;ON;;;;;N;FORMS HEAVY QUADRUPLE DASH VERTICAL;;;; 250C;BOX DRAWINGS LIGHT DOWN AND RIGHT;So;0;ON;;;;;N;FORMS LIGHT DOWN AND RIGHT;;;; 250D;BOX DRAWINGS DOWN LIGHT AND RIGHT HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND RIGHT HEAVY;;;; 250E;BOX DRAWINGS DOWN HEAVY AND RIGHT LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND RIGHT LIGHT;;;; 250F;BOX DRAWINGS HEAVY DOWN AND RIGHT;So;0;ON;;;;;N;FORMS HEAVY DOWN AND RIGHT;;;; 2510;BOX DRAWINGS LIGHT DOWN AND LEFT;So;0;ON;;;;;N;FORMS LIGHT DOWN AND LEFT;;;; 2511;BOX DRAWINGS DOWN LIGHT AND LEFT HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND LEFT HEAVY;;;; 2512;BOX DRAWINGS DOWN HEAVY AND LEFT LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND LEFT LIGHT;;;; 2513;BOX DRAWINGS HEAVY DOWN AND LEFT;So;0;ON;;;;;N;FORMS HEAVY DOWN AND LEFT;;;; 2514;BOX DRAWINGS LIGHT UP AND RIGHT;So;0;ON;;;;;N;FORMS LIGHT UP AND RIGHT;;;; 2515;BOX DRAWINGS UP LIGHT AND RIGHT HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND RIGHT HEAVY;;;; 2516;BOX DRAWINGS UP HEAVY AND RIGHT LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND RIGHT LIGHT;;;; 2517;BOX DRAWINGS HEAVY UP AND RIGHT;So;0;ON;;;;;N;FORMS HEAVY UP AND RIGHT;;;; 2518;BOX DRAWINGS LIGHT UP AND LEFT;So;0;ON;;;;;N;FORMS LIGHT UP AND LEFT;;;; 2519;BOX DRAWINGS UP LIGHT AND LEFT HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND LEFT HEAVY;;;; 251A;BOX DRAWINGS UP HEAVY AND LEFT LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND LEFT LIGHT;;;; 251B;BOX DRAWINGS HEAVY UP AND LEFT;So;0;ON;;;;;N;FORMS HEAVY UP AND LEFT;;;; 251C;BOX DRAWINGS LIGHT VERTICAL AND RIGHT;So;0;ON;;;;;N;FORMS LIGHT VERTICAL AND RIGHT;;;; 251D;BOX DRAWINGS VERTICAL LIGHT AND RIGHT HEAVY;So;0;ON;;;;;N;FORMS VERTICAL LIGHT AND RIGHT HEAVY;;;; 251E;BOX DRAWINGS UP HEAVY AND RIGHT DOWN LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND RIGHT DOWN LIGHT;;;; 251F;BOX DRAWINGS DOWN HEAVY AND RIGHT UP LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND RIGHT UP LIGHT;;;; 2520;BOX DRAWINGS VERTICAL HEAVY AND RIGHT LIGHT;So;0;ON;;;;;N;FORMS VERTICAL HEAVY AND RIGHT LIGHT;;;; 2521;BOX DRAWINGS DOWN LIGHT AND RIGHT UP HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND RIGHT UP HEAVY;;;; 2522;BOX DRAWINGS UP LIGHT AND RIGHT DOWN HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND RIGHT DOWN HEAVY;;;; 2523;BOX DRAWINGS HEAVY VERTICAL AND RIGHT;So;0;ON;;;;;N;FORMS HEAVY VERTICAL AND RIGHT;;;; 2524;BOX DRAWINGS LIGHT VERTICAL AND LEFT;So;0;ON;;;;;N;FORMS LIGHT VERTICAL AND LEFT;;;; 2525;BOX DRAWINGS VERTICAL LIGHT AND LEFT HEAVY;So;0;ON;;;;;N;FORMS VERTICAL LIGHT AND LEFT HEAVY;;;; 2526;BOX DRAWINGS UP HEAVY AND LEFT DOWN LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND LEFT DOWN LIGHT;;;; 2527;BOX DRAWINGS DOWN HEAVY AND LEFT UP LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND LEFT UP LIGHT;;;; 2528;BOX DRAWINGS VERTICAL HEAVY AND LEFT LIGHT;So;0;ON;;;;;N;FORMS VERTICAL HEAVY AND LEFT LIGHT;;;; 2529;BOX DRAWINGS DOWN LIGHT AND LEFT UP HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND LEFT UP HEAVY;;;; 252A;BOX DRAWINGS UP LIGHT AND LEFT DOWN HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND LEFT DOWN HEAVY;;;; 252B;BOX DRAWINGS HEAVY VERTICAL AND LEFT;So;0;ON;;;;;N;FORMS HEAVY VERTICAL AND LEFT;;;; 252C;BOX DRAWINGS LIGHT DOWN AND HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT DOWN AND HORIZONTAL;;;; 252D;BOX DRAWINGS LEFT HEAVY AND RIGHT DOWN LIGHT;So;0;ON;;;;;N;FORMS LEFT HEAVY AND RIGHT DOWN LIGHT;;;; 252E;BOX DRAWINGS RIGHT HEAVY AND LEFT DOWN LIGHT;So;0;ON;;;;;N;FORMS RIGHT HEAVY AND LEFT DOWN LIGHT;;;; 252F;BOX DRAWINGS DOWN LIGHT AND HORIZONTAL HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND HORIZONTAL HEAVY;;;; 2530;BOX DRAWINGS DOWN HEAVY AND HORIZONTAL LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND HORIZONTAL LIGHT;;;; 2531;BOX DRAWINGS RIGHT LIGHT AND LEFT DOWN HEAVY;So;0;ON;;;;;N;FORMS RIGHT LIGHT AND LEFT DOWN HEAVY;;;; 2532;BOX DRAWINGS LEFT LIGHT AND RIGHT DOWN HEAVY;So;0;ON;;;;;N;FORMS LEFT LIGHT AND RIGHT DOWN HEAVY;;;; 2533;BOX DRAWINGS HEAVY DOWN AND HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY DOWN AND HORIZONTAL;;;; 2534;BOX DRAWINGS LIGHT UP AND HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT UP AND HORIZONTAL;;;; 2535;BOX DRAWINGS LEFT HEAVY AND RIGHT UP LIGHT;So;0;ON;;;;;N;FORMS LEFT HEAVY AND RIGHT UP LIGHT;;;; 2536;BOX DRAWINGS RIGHT HEAVY AND LEFT UP LIGHT;So;0;ON;;;;;N;FORMS RIGHT HEAVY AND LEFT UP LIGHT;;;; 2537;BOX DRAWINGS UP LIGHT AND HORIZONTAL HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND HORIZONTAL HEAVY;;;; 2538;BOX DRAWINGS UP HEAVY AND HORIZONTAL LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND HORIZONTAL LIGHT;;;; 2539;BOX DRAWINGS RIGHT LIGHT AND LEFT UP HEAVY;So;0;ON;;;;;N;FORMS RIGHT LIGHT AND LEFT UP HEAVY;;;; 253A;BOX DRAWINGS LEFT LIGHT AND RIGHT UP HEAVY;So;0;ON;;;;;N;FORMS LEFT LIGHT AND RIGHT UP HEAVY;;;; 253B;BOX DRAWINGS HEAVY UP AND HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY UP AND HORIZONTAL;;;; 253C;BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT VERTICAL AND HORIZONTAL;;;; 253D;BOX DRAWINGS LEFT HEAVY AND RIGHT VERTICAL LIGHT;So;0;ON;;;;;N;FORMS LEFT HEAVY AND RIGHT VERTICAL LIGHT;;;; 253E;BOX DRAWINGS RIGHT HEAVY AND LEFT VERTICAL LIGHT;So;0;ON;;;;;N;FORMS RIGHT HEAVY AND LEFT VERTICAL LIGHT;;;; 253F;BOX DRAWINGS VERTICAL LIGHT AND HORIZONTAL HEAVY;So;0;ON;;;;;N;FORMS VERTICAL LIGHT AND HORIZONTAL HEAVY;;;; 2540;BOX DRAWINGS UP HEAVY AND DOWN HORIZONTAL LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND DOWN HORIZONTAL LIGHT;;;; 2541;BOX DRAWINGS DOWN HEAVY AND UP HORIZONTAL LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND UP HORIZONTAL LIGHT;;;; 2542;BOX DRAWINGS VERTICAL HEAVY AND HORIZONTAL LIGHT;So;0;ON;;;;;N;FORMS VERTICAL HEAVY AND HORIZONTAL LIGHT;;;; 2543;BOX DRAWINGS LEFT UP HEAVY AND RIGHT DOWN LIGHT;So;0;ON;;;;;N;FORMS LEFT UP HEAVY AND RIGHT DOWN LIGHT;;;; 2544;BOX DRAWINGS RIGHT UP HEAVY AND LEFT DOWN LIGHT;So;0;ON;;;;;N;FORMS RIGHT UP HEAVY AND LEFT DOWN LIGHT;;;; 2545;BOX DRAWINGS LEFT DOWN HEAVY AND RIGHT UP LIGHT;So;0;ON;;;;;N;FORMS LEFT DOWN HEAVY AND RIGHT UP LIGHT;;;; 2546;BOX DRAWINGS RIGHT DOWN HEAVY AND LEFT UP LIGHT;So;0;ON;;;;;N;FORMS RIGHT DOWN HEAVY AND LEFT UP LIGHT;;;; 2547;BOX DRAWINGS DOWN LIGHT AND UP HORIZONTAL HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND UP HORIZONTAL HEAVY;;;; 2548;BOX DRAWINGS UP LIGHT AND DOWN HORIZONTAL HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND DOWN HORIZONTAL HEAVY;;;; 2549;BOX DRAWINGS RIGHT LIGHT AND LEFT VERTICAL HEAVY;So;0;ON;;;;;N;FORMS RIGHT LIGHT AND LEFT VERTICAL HEAVY;;;; 254A;BOX DRAWINGS LEFT LIGHT AND RIGHT VERTICAL HEAVY;So;0;ON;;;;;N;FORMS LEFT LIGHT AND RIGHT VERTICAL HEAVY;;;; 254B;BOX DRAWINGS HEAVY VERTICAL AND HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY VERTICAL AND HORIZONTAL;;;; 254C;BOX DRAWINGS LIGHT DOUBLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT DOUBLE DASH HORIZONTAL;;;; 254D;BOX DRAWINGS HEAVY DOUBLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY DOUBLE DASH HORIZONTAL;;;; 254E;BOX DRAWINGS LIGHT DOUBLE DASH VERTICAL;So;0;ON;;;;;N;FORMS LIGHT DOUBLE DASH VERTICAL;;;; 254F;BOX DRAWINGS HEAVY DOUBLE DASH VERTICAL;So;0;ON;;;;;N;FORMS HEAVY DOUBLE DASH VERTICAL;;;; 2550;BOX DRAWINGS DOUBLE HORIZONTAL;So;0;ON;;;;;N;FORMS DOUBLE HORIZONTAL;;;; 2551;BOX DRAWINGS DOUBLE VERTICAL;So;0;ON;;;;;N;FORMS DOUBLE VERTICAL;;;; 2552;BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE;So;0;ON;;;;;N;FORMS DOWN SINGLE AND RIGHT DOUBLE;;;; 2553;BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE;So;0;ON;;;;;N;FORMS DOWN DOUBLE AND RIGHT SINGLE;;;; 2554;BOX DRAWINGS DOUBLE DOWN AND RIGHT;So;0;ON;;;;;N;FORMS DOUBLE DOWN AND RIGHT;;;; 2555;BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE;So;0;ON;;;;;N;FORMS DOWN SINGLE AND LEFT DOUBLE;;;; 2556;BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE;So;0;ON;;;;;N;FORMS DOWN DOUBLE AND LEFT SINGLE;;;; 2557;BOX DRAWINGS DOUBLE DOWN AND LEFT;So;0;ON;;;;;N;FORMS DOUBLE DOWN AND LEFT;;;; 2558;BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE;So;0;ON;;;;;N;FORMS UP SINGLE AND RIGHT DOUBLE;;;; 2559;BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE;So;0;ON;;;;;N;FORMS UP DOUBLE AND RIGHT SINGLE;;;; 255A;BOX DRAWINGS DOUBLE UP AND RIGHT;So;0;ON;;;;;N;FORMS DOUBLE UP AND RIGHT;;;; 255B;BOX DRAWINGS UP SINGLE AND LEFT DOUBLE;So;0;ON;;;;;N;FORMS UP SINGLE AND LEFT DOUBLE;;;; 255C;BOX DRAWINGS UP DOUBLE AND LEFT SINGLE;So;0;ON;;;;;N;FORMS UP DOUBLE AND LEFT SINGLE;;;; 255D;BOX DRAWINGS DOUBLE UP AND LEFT;So;0;ON;;;;;N;FORMS DOUBLE UP AND LEFT;;;; 255E;BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE;So;0;ON;;;;;N;FORMS VERTICAL SINGLE AND RIGHT DOUBLE;;;; 255F;BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE;So;0;ON;;;;;N;FORMS VERTICAL DOUBLE AND RIGHT SINGLE;;;; 2560;BOX DRAWINGS DOUBLE VERTICAL AND RIGHT;So;0;ON;;;;;N;FORMS DOUBLE VERTICAL AND RIGHT;;;; 2561;BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE;So;0;ON;;;;;N;FORMS VERTICAL SINGLE AND LEFT DOUBLE;;;; 2562;BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE;So;0;ON;;;;;N;FORMS VERTICAL DOUBLE AND LEFT SINGLE;;;; 2563;BOX DRAWINGS DOUBLE VERTICAL AND LEFT;So;0;ON;;;;;N;FORMS DOUBLE VERTICAL AND LEFT;;;; 2564;BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE;So;0;ON;;;;;N;FORMS DOWN SINGLE AND HORIZONTAL DOUBLE;;;; 2565;BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE;So;0;ON;;;;;N;FORMS DOWN DOUBLE AND HORIZONTAL SINGLE;;;; 2566;BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL;So;0;ON;;;;;N;FORMS DOUBLE DOWN AND HORIZONTAL;;;; 2567;BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE;So;0;ON;;;;;N;FORMS UP SINGLE AND HORIZONTAL DOUBLE;;;; 2568;BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE;So;0;ON;;;;;N;FORMS UP DOUBLE AND HORIZONTAL SINGLE;;;; 2569;BOX DRAWINGS DOUBLE UP AND HORIZONTAL;So;0;ON;;;;;N;FORMS DOUBLE UP AND HORIZONTAL;;;; 256A;BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE;So;0;ON;;;;;N;FORMS VERTICAL SINGLE AND HORIZONTAL DOUBLE;;;; 256B;BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE;So;0;ON;;;;;N;FORMS VERTICAL DOUBLE AND HORIZONTAL SINGLE;;;; 256C;BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL;So;0;ON;;;;;N;FORMS DOUBLE VERTICAL AND HORIZONTAL;;;; 256D;BOX DRAWINGS LIGHT ARC DOWN AND RIGHT;So;0;ON;;;;;N;FORMS LIGHT ARC DOWN AND RIGHT;;;; 256E;BOX DRAWINGS LIGHT ARC DOWN AND LEFT;So;0;ON;;;;;N;FORMS LIGHT ARC DOWN AND LEFT;;;; 256F;BOX DRAWINGS LIGHT ARC UP AND LEFT;So;0;ON;;;;;N;FORMS LIGHT ARC UP AND LEFT;;;; 2570;BOX DRAWINGS LIGHT ARC UP AND RIGHT;So;0;ON;;;;;N;FORMS LIGHT ARC UP AND RIGHT;;;; 2571;BOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO LOWER LEFT;So;0;ON;;;;;N;FORMS LIGHT DIAGONAL UPPER RIGHT TO LOWER LEFT;;;; 2572;BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO LOWER RIGHT;So;0;ON;;;;;N;FORMS LIGHT DIAGONAL UPPER LEFT TO LOWER RIGHT;;;; 2573;BOX DRAWINGS LIGHT DIAGONAL CROSS;So;0;ON;;;;;N;FORMS LIGHT DIAGONAL CROSS;;;; 2574;BOX DRAWINGS LIGHT LEFT;So;0;ON;;;;;N;FORMS LIGHT LEFT;;;; 2575;BOX DRAWINGS LIGHT UP;So;0;ON;;;;;N;FORMS LIGHT UP;;;; 2576;BOX DRAWINGS LIGHT RIGHT;So;0;ON;;;;;N;FORMS LIGHT RIGHT;;;; 2577;BOX DRAWINGS LIGHT DOWN;So;0;ON;;;;;N;FORMS LIGHT DOWN;;;; 2578;BOX DRAWINGS HEAVY LEFT;So;0;ON;;;;;N;FORMS HEAVY LEFT;;;; 2579;BOX DRAWINGS HEAVY UP;So;0;ON;;;;;N;FORMS HEAVY UP;;;; 257A;BOX DRAWINGS HEAVY RIGHT;So;0;ON;;;;;N;FORMS HEAVY RIGHT;;;; 257B;BOX DRAWINGS HEAVY DOWN;So;0;ON;;;;;N;FORMS HEAVY DOWN;;;; 257C;BOX DRAWINGS LIGHT LEFT AND HEAVY RIGHT;So;0;ON;;;;;N;FORMS LIGHT LEFT AND HEAVY RIGHT;;;; 257D;BOX DRAWINGS LIGHT UP AND HEAVY DOWN;So;0;ON;;;;;N;FORMS LIGHT UP AND HEAVY DOWN;;;; 257E;BOX DRAWINGS HEAVY LEFT AND LIGHT RIGHT;So;0;ON;;;;;N;FORMS HEAVY LEFT AND LIGHT RIGHT;;;; 257F;BOX DRAWINGS HEAVY UP AND LIGHT DOWN;So;0;ON;;;;;N;FORMS HEAVY UP AND LIGHT DOWN;;;; 2580;UPPER HALF BLOCK;So;0;ON;;;;;N;;;;; 2581;LOWER ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;; 2582;LOWER ONE QUARTER BLOCK;So;0;ON;;;;;N;;;;; 2583;LOWER THREE EIGHTHS BLOCK;So;0;ON;;;;;N;;;;; 2584;LOWER HALF BLOCK;So;0;ON;;;;;N;;;;; 2585;LOWER FIVE EIGHTHS BLOCK;So;0;ON;;;;;N;;;;; 2586;LOWER THREE QUARTERS BLOCK;So;0;ON;;;;;N;LOWER THREE QUARTER BLOCK;;;; 2587;LOWER SEVEN EIGHTHS BLOCK;So;0;ON;;;;;N;;;;; 2588;FULL BLOCK;So;0;ON;;;;;N;;;;; 2589;LEFT SEVEN EIGHTHS BLOCK;So;0;ON;;;;;N;;;;; 258A;LEFT THREE QUARTERS BLOCK;So;0;ON;;;;;N;LEFT THREE QUARTER BLOCK;;;; 258B;LEFT FIVE EIGHTHS BLOCK;So;0;ON;;;;;N;;;;; 258C;LEFT HALF BLOCK;So;0;ON;;;;;N;;;;; 258D;LEFT THREE EIGHTHS BLOCK;So;0;ON;;;;;N;;;;; 258E;LEFT ONE QUARTER BLOCK;So;0;ON;;;;;N;;;;; 258F;LEFT ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;; 2590;RIGHT HALF BLOCK;So;0;ON;;;;;N;;;;; 2591;LIGHT SHADE;So;0;ON;;;;;N;;;;; 2592;MEDIUM SHADE;So;0;ON;;;;;N;;;;; 2593;DARK SHADE;So;0;ON;;;;;N;;;;; 2594;UPPER ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;; 2595;RIGHT ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;; 25A0;BLACK SQUARE;So;0;ON;;;;;N;;;;; 25A1;WHITE SQUARE;So;0;ON;;;;;N;;;;; 25A2;WHITE SQUARE WITH ROUNDED CORNERS;So;0;ON;;;;;N;;;;; 25A3;WHITE SQUARE CONTAINING BLACK SMALL SQUARE;So;0;ON;;;;;N;;;;; 25A4;SQUARE WITH HORIZONTAL FILL;So;0;ON;;;;;N;;;;; 25A5;SQUARE WITH VERTICAL FILL;So;0;ON;;;;;N;;;;; 25A6;SQUARE WITH ORTHOGONAL CROSSHATCH FILL;So;0;ON;;;;;N;;;;; 25A7;SQUARE WITH UPPER LEFT TO LOWER RIGHT FILL;So;0;ON;;;;;N;;;;; 25A8;SQUARE WITH UPPER RIGHT TO LOWER LEFT FILL;So;0;ON;;;;;N;;;;; 25A9;SQUARE WITH DIAGONAL CROSSHATCH FILL;So;0;ON;;;;;N;;;;; 25AA;BLACK SMALL SQUARE;So;0;ON;;;;;N;;;;; 25AB;WHITE SMALL SQUARE;So;0;ON;;;;;N;;;;; 25AC;BLACK RECTANGLE;So;0;ON;;;;;N;;;;; 25AD;WHITE RECTANGLE;So;0;ON;;;;;N;;;;; 25AE;BLACK VERTICAL RECTANGLE;So;0;ON;;;;;N;;;;; 25AF;WHITE VERTICAL RECTANGLE;So;0;ON;;;;;N;;;;; 25B0;BLACK PARALLELOGRAM;So;0;ON;;;;;N;;;;; 25B1;WHITE PARALLELOGRAM;So;0;ON;;;;;N;;;;; 25B2;BLACK UP-POINTING TRIANGLE;So;0;ON;;;;;N;BLACK UP POINTING TRIANGLE;;;; 25B3;WHITE UP-POINTING TRIANGLE;So;0;ON;;;;;N;WHITE UP POINTING TRIANGLE;;;; 25B4;BLACK UP-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;BLACK UP POINTING SMALL TRIANGLE;;;; 25B5;WHITE UP-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;WHITE UP POINTING SMALL TRIANGLE;;;; 25B6;BLACK RIGHT-POINTING TRIANGLE;So;0;ON;;;;;N;BLACK RIGHT POINTING TRIANGLE;;;; 25B7;WHITE RIGHT-POINTING TRIANGLE;Sm;0;ON;;;;;N;WHITE RIGHT POINTING TRIANGLE;;;; 25B8;BLACK RIGHT-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;BLACK RIGHT POINTING SMALL TRIANGLE;;;; 25B9;WHITE RIGHT-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;WHITE RIGHT POINTING SMALL TRIANGLE;;;; 25BA;BLACK RIGHT-POINTING POINTER;So;0;ON;;;;;N;BLACK RIGHT POINTING POINTER;;;; 25BB;WHITE RIGHT-POINTING POINTER;So;0;ON;;;;;N;WHITE RIGHT POINTING POINTER;;;; 25BC;BLACK DOWN-POINTING TRIANGLE;So;0;ON;;;;;N;BLACK DOWN POINTING TRIANGLE;;;; 25BD;WHITE DOWN-POINTING TRIANGLE;So;0;ON;;;;;N;WHITE DOWN POINTING TRIANGLE;;;; 25BE;BLACK DOWN-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;BLACK DOWN POINTING SMALL TRIANGLE;;;; 25BF;WHITE DOWN-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;WHITE DOWN POINTING SMALL TRIANGLE;;;; 25C0;BLACK LEFT-POINTING TRIANGLE;So;0;ON;;;;;N;BLACK LEFT POINTING TRIANGLE;;;; 25C1;WHITE LEFT-POINTING TRIANGLE;Sm;0;ON;;;;;N;WHITE LEFT POINTING TRIANGLE;;;; 25C2;BLACK LEFT-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;BLACK LEFT POINTING SMALL TRIANGLE;;;; 25C3;WHITE LEFT-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;WHITE LEFT POINTING SMALL TRIANGLE;;;; 25C4;BLACK LEFT-POINTING POINTER;So;0;ON;;;;;N;BLACK LEFT POINTING POINTER;;;; 25C5;WHITE LEFT-POINTING POINTER;So;0;ON;;;;;N;WHITE LEFT POINTING POINTER;;;; 25C6;BLACK DIAMOND;So;0;ON;;;;;N;;;;; 25C7;WHITE DIAMOND;So;0;ON;;;;;N;;;;; 25C8;WHITE DIAMOND CONTAINING BLACK SMALL DIAMOND;So;0;ON;;;;;N;;;;; 25C9;FISHEYE;So;0;ON;;;;;N;;;;; 25CA;LOZENGE;So;0;ON;;;;;N;;;;; 25CB;WHITE CIRCLE;So;0;ON;;;;;N;;;;; 25CC;DOTTED CIRCLE;So;0;ON;;;;;N;;;;; 25CD;CIRCLE WITH VERTICAL FILL;So;0;ON;;;;;N;;;;; 25CE;BULLSEYE;So;0;ON;;;;;N;;;;; 25CF;BLACK CIRCLE;So;0;ON;;;;;N;;;;; 25D0;CIRCLE WITH LEFT HALF BLACK;So;0;ON;;;;;N;;;;; 25D1;CIRCLE WITH RIGHT HALF BLACK;So;0;ON;;;;;N;;;;; 25D2;CIRCLE WITH LOWER HALF BLACK;So;0;ON;;;;;N;;;;; 25D3;CIRCLE WITH UPPER HALF BLACK;So;0;ON;;;;;N;;;;; 25D4;CIRCLE WITH UPPER RIGHT QUADRANT BLACK;So;0;ON;;;;;N;;;;; 25D5;CIRCLE WITH ALL BUT UPPER LEFT QUADRANT BLACK;So;0;ON;;;;;N;;;;; 25D6;LEFT HALF BLACK CIRCLE;So;0;ON;;;;;N;;;;; 25D7;RIGHT HALF BLACK CIRCLE;So;0;ON;;;;;N;;;;; 25D8;INVERSE BULLET;So;0;ON;;;;;N;;;;; 25D9;INVERSE WHITE CIRCLE;So;0;ON;;;;;N;;;;; 25DA;UPPER HALF INVERSE WHITE CIRCLE;So;0;ON;;;;;N;;;;; 25DB;LOWER HALF INVERSE WHITE CIRCLE;So;0;ON;;;;;N;;;;; 25DC;UPPER LEFT QUADRANT CIRCULAR ARC;So;0;ON;;;;;N;;;;; 25DD;UPPER RIGHT QUADRANT CIRCULAR ARC;So;0;ON;;;;;N;;;;; 25DE;LOWER RIGHT QUADRANT CIRCULAR ARC;So;0;ON;;;;;N;;;;; 25DF;LOWER LEFT QUADRANT CIRCULAR ARC;So;0;ON;;;;;N;;;;; 25E0;UPPER HALF CIRCLE;So;0;ON;;;;;N;;;;; 25E1;LOWER HALF CIRCLE;So;0;ON;;;;;N;;;;; 25E2;BLACK LOWER RIGHT TRIANGLE;So;0;ON;;;;;N;;;;; 25E3;BLACK LOWER LEFT TRIANGLE;So;0;ON;;;;;N;;;;; 25E4;BLACK UPPER LEFT TRIANGLE;So;0;ON;;;;;N;;;;; 25E5;BLACK UPPER RIGHT TRIANGLE;So;0;ON;;;;;N;;;;; 25E6;WHITE BULLET;So;0;ON;;;;;N;;;;; 25E7;SQUARE WITH LEFT HALF BLACK;So;0;ON;;;;;N;;;;; 25E8;SQUARE WITH RIGHT HALF BLACK;So;0;ON;;;;;N;;;;; 25E9;SQUARE WITH UPPER LEFT DIAGONAL HALF BLACK;So;0;ON;;;;;N;;;;; 25EA;SQUARE WITH LOWER RIGHT DIAGONAL HALF BLACK;So;0;ON;;;;;N;;;;; 25EB;WHITE SQUARE WITH VERTICAL BISECTING LINE;So;0;ON;;;;;N;;;;; 25EC;WHITE UP-POINTING TRIANGLE WITH DOT;So;0;ON;;;;;N;WHITE UP POINTING TRIANGLE WITH DOT;;;; 25ED;UP-POINTING TRIANGLE WITH LEFT HALF BLACK;So;0;ON;;;;;N;UP POINTING TRIANGLE WITH LEFT HALF BLACK;;;; 25EE;UP-POINTING TRIANGLE WITH RIGHT HALF BLACK;So;0;ON;;;;;N;UP POINTING TRIANGLE WITH RIGHT HALF BLACK;;;; 25EF;LARGE CIRCLE;So;0;ON;;;;;N;;;;; 25F0;WHITE SQUARE WITH UPPER LEFT QUADRANT;So;0;ON;;;;;N;;;;; 25F1;WHITE SQUARE WITH LOWER LEFT QUADRANT;So;0;ON;;;;;N;;;;; 25F2;WHITE SQUARE WITH LOWER RIGHT QUADRANT;So;0;ON;;;;;N;;;;; 25F3;WHITE SQUARE WITH UPPER RIGHT QUADRANT;So;0;ON;;;;;N;;;;; 25F4;WHITE CIRCLE WITH UPPER LEFT QUADRANT;So;0;ON;;;;;N;;;;; 25F5;WHITE CIRCLE WITH LOWER LEFT QUADRANT;So;0;ON;;;;;N;;;;; 25F6;WHITE CIRCLE WITH LOWER RIGHT QUADRANT;So;0;ON;;;;;N;;;;; 25F7;WHITE CIRCLE WITH UPPER RIGHT QUADRANT;So;0;ON;;;;;N;;;;; 2600;BLACK SUN WITH RAYS;So;0;ON;;;;;N;;;;; 2601;CLOUD;So;0;ON;;;;;N;;;;; 2602;UMBRELLA;So;0;ON;;;;;N;;;;; 2603;SNOWMAN;So;0;ON;;;;;N;;;;; 2604;COMET;So;0;ON;;;;;N;;;;; 2605;BLACK STAR;So;0;ON;;;;;N;;;;; 2606;WHITE STAR;So;0;ON;;;;;N;;;;; 2607;LIGHTNING;So;0;ON;;;;;N;;;;; 2608;THUNDERSTORM;So;0;ON;;;;;N;;;;; 2609;SUN;So;0;ON;;;;;N;;;;; 260A;ASCENDING NODE;So;0;ON;;;;;N;;;;; 260B;DESCENDING NODE;So;0;ON;;;;;N;;;;; 260C;CONJUNCTION;So;0;ON;;;;;N;;;;; 260D;OPPOSITION;So;0;ON;;;;;N;;;;; 260E;BLACK TELEPHONE;So;0;ON;;;;;N;;;;; 260F;WHITE TELEPHONE;So;0;ON;;;;;N;;;;; 2610;BALLOT BOX;So;0;ON;;;;;N;;;;; 2611;BALLOT BOX WITH CHECK;So;0;ON;;;;;N;;;;; 2612;BALLOT BOX WITH X;So;0;ON;;;;;N;;;;; 2613;SALTIRE;So;0;ON;;;;;N;;;;; 2619;REVERSED ROTATED FLORAL HEART BULLET;So;0;ON;;;;;N;;;;; 261A;BLACK LEFT POINTING INDEX;So;0;ON;;;;;N;;;;; 261B;BLACK RIGHT POINTING INDEX;So;0;ON;;;;;N;;;;; 261C;WHITE LEFT POINTING INDEX;So;0;ON;;;;;N;;;;; 261D;WHITE UP POINTING INDEX;So;0;ON;;;;;N;;;;; 261E;WHITE RIGHT POINTING INDEX;So;0;ON;;;;;N;;;;; 261F;WHITE DOWN POINTING INDEX;So;0;ON;;;;;N;;;;; 2620;SKULL AND CROSSBONES;So;0;ON;;;;;N;;;;; 2621;CAUTION SIGN;So;0;ON;;;;;N;;;;; 2622;RADIOACTIVE SIGN;So;0;ON;;;;;N;;;;; 2623;BIOHAZARD SIGN;So;0;ON;;;;;N;;;;; 2624;CADUCEUS;So;0;ON;;;;;N;;;;; 2625;ANKH;So;0;ON;;;;;N;;;;; 2626;ORTHODOX CROSS;So;0;ON;;;;;N;;;;; 2627;CHI RHO;So;0;ON;;;;;N;;;;; 2628;CROSS OF LORRAINE;So;0;ON;;;;;N;;;;; 2629;CROSS OF JERUSALEM;So;0;ON;;;;;N;;;;; 262A;STAR AND CRESCENT;So;0;ON;;;;;N;;;;; 262B;FARSI SYMBOL;So;0;ON;;;;;N;SYMBOL OF IRAN;;;; 262C;ADI SHAKTI;So;0;ON;;;;;N;;;;; 262D;HAMMER AND SICKLE;So;0;ON;;;;;N;;;;; 262E;PEACE SYMBOL;So;0;ON;;;;;N;;;;; 262F;YIN YANG;So;0;ON;;;;;N;;;;; 2630;TRIGRAM FOR HEAVEN;So;0;ON;;;;;N;;;;; 2631;TRIGRAM FOR LAKE;So;0;ON;;;;;N;;;;; 2632;TRIGRAM FOR FIRE;So;0;ON;;;;;N;;;;; 2633;TRIGRAM FOR THUNDER;So;0;ON;;;;;N;;;;; 2634;TRIGRAM FOR WIND;So;0;ON;;;;;N;;;;; 2635;TRIGRAM FOR WATER;So;0;ON;;;;;N;;;;; 2636;TRIGRAM FOR MOUNTAIN;So;0;ON;;;;;N;;;;; 2637;TRIGRAM FOR EARTH;So;0;ON;;;;;N;;;;; 2638;WHEEL OF DHARMA;So;0;ON;;;;;N;;;;; 2639;WHITE FROWNING FACE;So;0;ON;;;;;N;;;;; 263A;WHITE SMILING FACE;So;0;ON;;;;;N;;;;; 263B;BLACK SMILING FACE;So;0;ON;;;;;N;;;;; 263C;WHITE SUN WITH RAYS;So;0;ON;;;;;N;;;;; 263D;FIRST QUARTER MOON;So;0;ON;;;;;N;;;;; 263E;LAST QUARTER MOON;So;0;ON;;;;;N;;;;; 263F;MERCURY;So;0;ON;;;;;N;;;;; 2640;FEMALE SIGN;So;0;ON;;;;;N;;;;; 2641;EARTH;So;0;ON;;;;;N;;;;; 2642;MALE SIGN;So;0;ON;;;;;N;;;;; 2643;JUPITER;So;0;ON;;;;;N;;;;; 2644;SATURN;So;0;ON;;;;;N;;;;; 2645;URANUS;So;0;ON;;;;;N;;;;; 2646;NEPTUNE;So;0;ON;;;;;N;;;;; 2647;PLUTO;So;0;ON;;;;;N;;;;; 2648;ARIES;So;0;ON;;;;;N;;;;; 2649;TAURUS;So;0;ON;;;;;N;;;;; 264A;GEMINI;So;0;ON;;;;;N;;;;; 264B;CANCER;So;0;ON;;;;;N;;;;; 264C;LEO;So;0;ON;;;;;N;;;;; 264D;VIRGO;So;0;ON;;;;;N;;;;; 264E;LIBRA;So;0;ON;;;;;N;;;;; 264F;SCORPIUS;So;0;ON;;;;;N;;;;; 2650;SAGITTARIUS;So;0;ON;;;;;N;;;;; 2651;CAPRICORN;So;0;ON;;;;;N;;;;; 2652;AQUARIUS;So;0;ON;;;;;N;;;;; 2653;PISCES;So;0;ON;;;;;N;;;;; 2654;WHITE CHESS KING;So;0;ON;;;;;N;;;;; 2655;WHITE CHESS QUEEN;So;0;ON;;;;;N;;;;; 2656;WHITE CHESS ROOK;So;0;ON;;;;;N;;;;; 2657;WHITE CHESS BISHOP;So;0;ON;;;;;N;;;;; 2658;WHITE CHESS KNIGHT;So;0;ON;;;;;N;;;;; 2659;WHITE CHESS PAWN;So;0;ON;;;;;N;;;;; 265A;BLACK CHESS KING;So;0;ON;;;;;N;;;;; 265B;BLACK CHESS QUEEN;So;0;ON;;;;;N;;;;; 265C;BLACK CHESS ROOK;So;0;ON;;;;;N;;;;; 265D;BLACK CHESS BISHOP;So;0;ON;;;;;N;;;;; 265E;BLACK CHESS KNIGHT;So;0;ON;;;;;N;;;;; 265F;BLACK CHESS PAWN;So;0;ON;;;;;N;;;;; 2660;BLACK SPADE SUIT;So;0;ON;;;;;N;;;;; 2661;WHITE HEART SUIT;So;0;ON;;;;;N;;;;; 2662;WHITE DIAMOND SUIT;So;0;ON;;;;;N;;;;; 2663;BLACK CLUB SUIT;So;0;ON;;;;;N;;;;; 2664;WHITE SPADE SUIT;So;0;ON;;;;;N;;;;; 2665;BLACK HEART SUIT;So;0;ON;;;;;N;;;;; 2666;BLACK DIAMOND SUIT;So;0;ON;;;;;N;;;;; 2667;WHITE CLUB SUIT;So;0;ON;;;;;N;;;;; 2668;HOT SPRINGS;So;0;ON;;;;;N;;;;; 2669;QUARTER NOTE;So;0;ON;;;;;N;;;;; 266A;EIGHTH NOTE;So;0;ON;;;;;N;;;;; 266B;BEAMED EIGHTH NOTES;So;0;ON;;;;;N;BARRED EIGHTH NOTES;;;; 266C;BEAMED SIXTEENTH NOTES;So;0;ON;;;;;N;BARRED SIXTEENTH NOTES;;;; 266D;MUSIC FLAT SIGN;So;0;ON;;;;;N;FLAT;;;; 266E;MUSIC NATURAL SIGN;So;0;ON;;;;;N;NATURAL;;;; 266F;MUSIC SHARP SIGN;Sm;0;ON;;;;;N;SHARP;;;; 2670;WEST SYRIAC CROSS;So;0;ON;;;;;N;;;;; 2671;EAST SYRIAC CROSS;So;0;ON;;;;;N;;;;; 2701;UPPER BLADE SCISSORS;So;0;ON;;;;;N;;;;; 2702;BLACK SCISSORS;So;0;ON;;;;;N;;;;; 2703;LOWER BLADE SCISSORS;So;0;ON;;;;;N;;;;; 2704;WHITE SCISSORS;So;0;ON;;;;;N;;;;; 2706;TELEPHONE LOCATION SIGN;So;0;ON;;;;;N;;;;; 2707;TAPE DRIVE;So;0;ON;;;;;N;;;;; 2708;AIRPLANE;So;0;ON;;;;;N;;;;; 2709;ENVELOPE;So;0;ON;;;;;N;;;;; 270C;VICTORY HAND;So;0;ON;;;;;N;;;;; 270D;WRITING HAND;So;0;ON;;;;;N;;;;; 270E;LOWER RIGHT PENCIL;So;0;ON;;;;;N;;;;; 270F;PENCIL;So;0;ON;;;;;N;;;;; 2710;UPPER RIGHT PENCIL;So;0;ON;;;;;N;;;;; 2711;WHITE NIB;So;0;ON;;;;;N;;;;; 2712;BLACK NIB;So;0;ON;;;;;N;;;;; 2713;CHECK MARK;So;0;ON;;;;;N;;;;; 2714;HEAVY CHECK MARK;So;0;ON;;;;;N;;;;; 2715;MULTIPLICATION X;So;0;ON;;;;;N;;;;; 2716;HEAVY MULTIPLICATION X;So;0;ON;;;;;N;;;;; 2717;BALLOT X;So;0;ON;;;;;N;;;;; 2718;HEAVY BALLOT X;So;0;ON;;;;;N;;;;; 2719;OUTLINED GREEK CROSS;So;0;ON;;;;;N;;;;; 271A;HEAVY GREEK CROSS;So;0;ON;;;;;N;;;;; 271B;OPEN CENTRE CROSS;So;0;ON;;;;;N;OPEN CENTER CROSS;;;; 271C;HEAVY OPEN CENTRE CROSS;So;0;ON;;;;;N;HEAVY OPEN CENTER CROSS;;;; 271D;LATIN CROSS;So;0;ON;;;;;N;;;;; 271E;SHADOWED WHITE LATIN CROSS;So;0;ON;;;;;N;;;;; 271F;OUTLINED LATIN CROSS;So;0;ON;;;;;N;;;;; 2720;MALTESE CROSS;So;0;ON;;;;;N;;;;; 2721;STAR OF DAVID;So;0;ON;;;;;N;;;;; 2722;FOUR TEARDROP-SPOKED ASTERISK;So;0;ON;;;;;N;;;;; 2723;FOUR BALLOON-SPOKED ASTERISK;So;0;ON;;;;;N;;;;; 2724;HEAVY FOUR BALLOON-SPOKED ASTERISK;So;0;ON;;;;;N;;;;; 2725;FOUR CLUB-SPOKED ASTERISK;So;0;ON;;;;;N;;;;; 2726;BLACK FOUR POINTED STAR;So;0;ON;;;;;N;;;;; 2727;WHITE FOUR POINTED STAR;So;0;ON;;;;;N;;;;; 2729;STRESS OUTLINED WHITE STAR;So;0;ON;;;;;N;;;;; 272A;CIRCLED WHITE STAR;So;0;ON;;;;;N;;;;; 272B;OPEN CENTRE BLACK STAR;So;0;ON;;;;;N;OPEN CENTER BLACK STAR;;;; 272C;BLACK CENTRE WHITE STAR;So;0;ON;;;;;N;BLACK CENTER WHITE STAR;;;; 272D;OUTLINED BLACK STAR;So;0;ON;;;;;N;;;;; 272E;HEAVY OUTLINED BLACK STAR;So;0;ON;;;;;N;;;;; 272F;PINWHEEL STAR;So;0;ON;;;;;N;;;;; 2730;SHADOWED WHITE STAR;So;0;ON;;;;;N;;;;; 2731;HEAVY ASTERISK;So;0;ON;;;;;N;;;;; 2732;OPEN CENTRE ASTERISK;So;0;ON;;;;;N;OPEN CENTER ASTERISK;;;; 2733;EIGHT SPOKED ASTERISK;So;0;ON;;;;;N;;;;; 2734;EIGHT POINTED BLACK STAR;So;0;ON;;;;;N;;;;; 2735;EIGHT POINTED PINWHEEL STAR;So;0;ON;;;;;N;;;;; 2736;SIX POINTED BLACK STAR;So;0;ON;;;;;N;;;;; 2737;EIGHT POINTED RECTILINEAR BLACK STAR;So;0;ON;;;;;N;;;;; 2738;HEAVY EIGHT POINTED RECTILINEAR BLACK STAR;So;0;ON;;;;;N;;;;; 2739;TWELVE POINTED BLACK STAR;So;0;ON;;;;;N;;;;; 273A;SIXTEEN POINTED ASTERISK;So;0;ON;;;;;N;;;;; 273B;TEARDROP-SPOKED ASTERISK;So;0;ON;;;;;N;;;;; 273C;OPEN CENTRE TEARDROP-SPOKED ASTERISK;So;0;ON;;;;;N;OPEN CENTER TEARDROP-SPOKED ASTERISK;;;; 273D;HEAVY TEARDROP-SPOKED ASTERISK;So;0;ON;;;;;N;;;;; 273E;SIX PETALLED BLACK AND WHITE FLORETTE;So;0;ON;;;;;N;;;;; 273F;BLACK FLORETTE;So;0;ON;;;;;N;;;;; 2740;WHITE FLORETTE;So;0;ON;;;;;N;;;;; 2741;EIGHT PETALLED OUTLINED BLACK FLORETTE;So;0;ON;;;;;N;;;;; 2742;CIRCLED OPEN CENTRE EIGHT POINTED STAR;So;0;ON;;;;;N;CIRCLED OPEN CENTER EIGHT POINTED STAR;;;; 2743;HEAVY TEARDROP-SPOKED PINWHEEL ASTERISK;So;0;ON;;;;;N;;;;; 2744;SNOWFLAKE;So;0;ON;;;;;N;;;;; 2745;TIGHT TRIFOLIATE SNOWFLAKE;So;0;ON;;;;;N;;;;; 2746;HEAVY CHEVRON SNOWFLAKE;So;0;ON;;;;;N;;;;; 2747;SPARKLE;So;0;ON;;;;;N;;;;; 2748;HEAVY SPARKLE;So;0;ON;;;;;N;;;;; 2749;BALLOON-SPOKED ASTERISK;So;0;ON;;;;;N;;;;; 274A;EIGHT TEARDROP-SPOKED PROPELLER ASTERISK;So;0;ON;;;;;N;;;;; 274B;HEAVY EIGHT TEARDROP-SPOKED PROPELLER ASTERISK;So;0;ON;;;;;N;;;;; 274D;SHADOWED WHITE CIRCLE;So;0;ON;;;;;N;;;;; 274F;LOWER RIGHT DROP-SHADOWED WHITE SQUARE;So;0;ON;;;;;N;;;;; 2750;UPPER RIGHT DROP-SHADOWED WHITE SQUARE;So;0;ON;;;;;N;;;;; 2751;LOWER RIGHT SHADOWED WHITE SQUARE;So;0;ON;;;;;N;;;;; 2752;UPPER RIGHT SHADOWED WHITE SQUARE;So;0;ON;;;;;N;;;;; 2756;BLACK DIAMOND MINUS WHITE X;So;0;ON;;;;;N;;;;; 2758;LIGHT VERTICAL BAR;So;0;ON;;;;;N;;;;; 2759;MEDIUM VERTICAL BAR;So;0;ON;;;;;N;;;;; 275A;HEAVY VERTICAL BAR;So;0;ON;;;;;N;;;;; 275B;HEAVY SINGLE TURNED COMMA QUOTATION MARK ORNAMENT;So;0;ON;;;;;N;;;;; 275C;HEAVY SINGLE COMMA QUOTATION MARK ORNAMENT;So;0;ON;;;;;N;;;;; 275D;HEAVY DOUBLE TURNED COMMA QUOTATION MARK ORNAMENT;So;0;ON;;;;;N;;;;; 275E;HEAVY DOUBLE COMMA QUOTATION MARK ORNAMENT;So;0;ON;;;;;N;;;;; 2761;CURVED STEM PARAGRAPH SIGN ORNAMENT;So;0;ON;;;;;N;;;;; 2762;HEAVY EXCLAMATION MARK ORNAMENT;So;0;ON;;;;;N;;;;; 2763;HEAVY HEART EXCLAMATION MARK ORNAMENT;So;0;ON;;;;;N;;;;; 2764;HEAVY BLACK HEART;So;0;ON;;;;;N;;;;; 2765;ROTATED HEAVY BLACK HEART BULLET;So;0;ON;;;;;N;;;;; 2766;FLORAL HEART;So;0;ON;;;;;N;;;;; 2767;ROTATED FLORAL HEART BULLET;So;0;ON;;;;;N;;;;; 2776;DINGBAT NEGATIVE CIRCLED DIGIT ONE;No;0;ON;;;1;1;N;INVERSE CIRCLED DIGIT ONE;;;; 2777;DINGBAT NEGATIVE CIRCLED DIGIT TWO;No;0;ON;;;2;2;N;INVERSE CIRCLED DIGIT TWO;;;; 2778;DINGBAT NEGATIVE CIRCLED DIGIT THREE;No;0;ON;;;3;3;N;INVERSE CIRCLED DIGIT THREE;;;; 2779;DINGBAT NEGATIVE CIRCLED DIGIT FOUR;No;0;ON;;;4;4;N;INVERSE CIRCLED DIGIT FOUR;;;; 277A;DINGBAT NEGATIVE CIRCLED DIGIT FIVE;No;0;ON;;;5;5;N;INVERSE CIRCLED DIGIT FIVE;;;; 277B;DINGBAT NEGATIVE CIRCLED DIGIT SIX;No;0;ON;;;6;6;N;INVERSE CIRCLED DIGIT SIX;;;; 277C;DINGBAT NEGATIVE CIRCLED DIGIT SEVEN;No;0;ON;;;7;7;N;INVERSE CIRCLED DIGIT SEVEN;;;; 277D;DINGBAT NEGATIVE CIRCLED DIGIT EIGHT;No;0;ON;;;8;8;N;INVERSE CIRCLED DIGIT EIGHT;;;; 277E;DINGBAT NEGATIVE CIRCLED DIGIT NINE;No;0;ON;;;9;9;N;INVERSE CIRCLED DIGIT NINE;;;; 277F;DINGBAT NEGATIVE CIRCLED NUMBER TEN;No;0;ON;;;;10;N;INVERSE CIRCLED NUMBER TEN;;;; 2780;DINGBAT CIRCLED SANS-SERIF DIGIT ONE;No;0;ON;;;1;1;N;CIRCLED SANS-SERIF DIGIT ONE;;;; 2781;DINGBAT CIRCLED SANS-SERIF DIGIT TWO;No;0;ON;;;2;2;N;CIRCLED SANS-SERIF DIGIT TWO;;;; 2782;DINGBAT CIRCLED SANS-SERIF DIGIT THREE;No;0;ON;;;3;3;N;CIRCLED SANS-SERIF DIGIT THREE;;;; 2783;DINGBAT CIRCLED SANS-SERIF DIGIT FOUR;No;0;ON;;;4;4;N;CIRCLED SANS-SERIF DIGIT FOUR;;;; 2784;DINGBAT CIRCLED SANS-SERIF DIGIT FIVE;No;0;ON;;;5;5;N;CIRCLED SANS-SERIF DIGIT FIVE;;;; 2785;DINGBAT CIRCLED SANS-SERIF DIGIT SIX;No;0;ON;;;6;6;N;CIRCLED SANS-SERIF DIGIT SIX;;;; 2786;DINGBAT CIRCLED SANS-SERIF DIGIT SEVEN;No;0;ON;;;7;7;N;CIRCLED SANS-SERIF DIGIT SEVEN;;;; 2787;DINGBAT CIRCLED SANS-SERIF DIGIT EIGHT;No;0;ON;;;8;8;N;CIRCLED SANS-SERIF DIGIT EIGHT;;;; 2788;DINGBAT CIRCLED SANS-SERIF DIGIT NINE;No;0;ON;;;9;9;N;CIRCLED SANS-SERIF DIGIT NINE;;;; 2789;DINGBAT CIRCLED SANS-SERIF NUMBER TEN;No;0;ON;;;;10;N;CIRCLED SANS-SERIF NUMBER TEN;;;; 278A;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT ONE;No;0;ON;;;1;1;N;INVERSE CIRCLED SANS-SERIF DIGIT ONE;;;; 278B;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT TWO;No;0;ON;;;2;2;N;INVERSE CIRCLED SANS-SERIF DIGIT TWO;;;; 278C;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT THREE;No;0;ON;;;3;3;N;INVERSE CIRCLED SANS-SERIF DIGIT THREE;;;; 278D;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FOUR;No;0;ON;;;4;4;N;INVERSE CIRCLED SANS-SERIF DIGIT FOUR;;;; 278E;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FIVE;No;0;ON;;;5;5;N;INVERSE CIRCLED SANS-SERIF DIGIT FIVE;;;; 278F;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SIX;No;0;ON;;;6;6;N;INVERSE CIRCLED SANS-SERIF DIGIT SIX;;;; 2790;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SEVEN;No;0;ON;;;7;7;N;INVERSE CIRCLED SANS-SERIF DIGIT SEVEN;;;; 2791;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT EIGHT;No;0;ON;;;8;8;N;INVERSE CIRCLED SANS-SERIF DIGIT EIGHT;;;; 2792;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT NINE;No;0;ON;;;9;9;N;INVERSE CIRCLED SANS-SERIF DIGIT NINE;;;; 2793;DINGBAT NEGATIVE CIRCLED SANS-SERIF NUMBER TEN;No;0;ON;;;;10;N;INVERSE CIRCLED SANS-SERIF NUMBER TEN;;;; 2794;HEAVY WIDE-HEADED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY WIDE-HEADED RIGHT ARROW;;;; 2798;HEAVY SOUTH EAST ARROW;So;0;ON;;;;;N;HEAVY LOWER RIGHT ARROW;;;; 2799;HEAVY RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY RIGHT ARROW;;;; 279A;HEAVY NORTH EAST ARROW;So;0;ON;;;;;N;HEAVY UPPER RIGHT ARROW;;;; 279B;DRAFTING POINT RIGHTWARDS ARROW;So;0;ON;;;;;N;DRAFTING POINT RIGHT ARROW;;;; 279C;HEAVY ROUND-TIPPED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY ROUND-TIPPED RIGHT ARROW;;;; 279D;TRIANGLE-HEADED RIGHTWARDS ARROW;So;0;ON;;;;;N;TRIANGLE-HEADED RIGHT ARROW;;;; 279E;HEAVY TRIANGLE-HEADED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY TRIANGLE-HEADED RIGHT ARROW;;;; 279F;DASHED TRIANGLE-HEADED RIGHTWARDS ARROW;So;0;ON;;;;;N;DASHED TRIANGLE-HEADED RIGHT ARROW;;;; 27A0;HEAVY DASHED TRIANGLE-HEADED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY DASHED TRIANGLE-HEADED RIGHT ARROW;;;; 27A1;BLACK RIGHTWARDS ARROW;So;0;ON;;;;;N;BLACK RIGHT ARROW;;;; 27A2;THREE-D TOP-LIGHTED RIGHTWARDS ARROWHEAD;So;0;ON;;;;;N;THREE-D TOP-LIGHTED RIGHT ARROWHEAD;;;; 27A3;THREE-D BOTTOM-LIGHTED RIGHTWARDS ARROWHEAD;So;0;ON;;;;;N;THREE-D BOTTOM-LIGHTED RIGHT ARROWHEAD;;;; 27A4;BLACK RIGHTWARDS ARROWHEAD;So;0;ON;;;;;N;BLACK RIGHT ARROWHEAD;;;; 27A5;HEAVY BLACK CURVED DOWNWARDS AND RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY BLACK CURVED DOWN AND RIGHT ARROW;;;; 27A6;HEAVY BLACK CURVED UPWARDS AND RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY BLACK CURVED UP AND RIGHT ARROW;;;; 27A7;SQUAT BLACK RIGHTWARDS ARROW;So;0;ON;;;;;N;SQUAT BLACK RIGHT ARROW;;;; 27A8;HEAVY CONCAVE-POINTED BLACK RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY CONCAVE-POINTED BLACK RIGHT ARROW;;;; 27A9;RIGHT-SHADED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;RIGHT-SHADED WHITE RIGHT ARROW;;;; 27AA;LEFT-SHADED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;LEFT-SHADED WHITE RIGHT ARROW;;;; 27AB;BACK-TILTED SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;BACK-TILTED SHADOWED WHITE RIGHT ARROW;;;; 27AC;FRONT-TILTED SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;FRONT-TILTED SHADOWED WHITE RIGHT ARROW;;;; 27AD;HEAVY LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY LOWER RIGHT-SHADOWED WHITE RIGHT ARROW;;;; 27AE;HEAVY UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY UPPER RIGHT-SHADOWED WHITE RIGHT ARROW;;;; 27AF;NOTCHED LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;NOTCHED LOWER RIGHT-SHADOWED WHITE RIGHT ARROW;;;; 27B1;NOTCHED UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;NOTCHED UPPER RIGHT-SHADOWED WHITE RIGHT ARROW;;;; 27B2;CIRCLED HEAVY WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;CIRCLED HEAVY WHITE RIGHT ARROW;;;; 27B3;WHITE-FEATHERED RIGHTWARDS ARROW;So;0;ON;;;;;N;WHITE-FEATHERED RIGHT ARROW;;;; 27B4;BLACK-FEATHERED SOUTH EAST ARROW;So;0;ON;;;;;N;BLACK-FEATHERED LOWER RIGHT ARROW;;;; 27B5;BLACK-FEATHERED RIGHTWARDS ARROW;So;0;ON;;;;;N;BLACK-FEATHERED RIGHT ARROW;;;; 27B6;BLACK-FEATHERED NORTH EAST ARROW;So;0;ON;;;;;N;BLACK-FEATHERED UPPER RIGHT ARROW;;;; 27B7;HEAVY BLACK-FEATHERED SOUTH EAST ARROW;So;0;ON;;;;;N;HEAVY BLACK-FEATHERED LOWER RIGHT ARROW;;;; 27B8;HEAVY BLACK-FEATHERED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY BLACK-FEATHERED RIGHT ARROW;;;; 27B9;HEAVY BLACK-FEATHERED NORTH EAST ARROW;So;0;ON;;;;;N;HEAVY BLACK-FEATHERED UPPER RIGHT ARROW;;;; 27BA;TEARDROP-BARBED RIGHTWARDS ARROW;So;0;ON;;;;;N;TEARDROP-BARBED RIGHT ARROW;;;; 27BB;HEAVY TEARDROP-SHANKED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY TEARDROP-SHANKED RIGHT ARROW;;;; 27BC;WEDGE-TAILED RIGHTWARDS ARROW;So;0;ON;;;;;N;WEDGE-TAILED RIGHT ARROW;;;; 27BD;HEAVY WEDGE-TAILED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY WEDGE-TAILED RIGHT ARROW;;;; 27BE;OPEN-OUTLINED RIGHTWARDS ARROW;So;0;ON;;;;;N;OPEN-OUTLINED RIGHT ARROW;;;; 2800;BRAILLE PATTERN BLANK;So;0;ON;;;;;N;;;;; 2801;BRAILLE PATTERN DOTS-1;So;0;ON;;;;;N;;;;; 2802;BRAILLE PATTERN DOTS-2;So;0;ON;;;;;N;;;;; 2803;BRAILLE PATTERN DOTS-12;So;0;ON;;;;;N;;;;; 2804;BRAILLE PATTERN DOTS-3;So;0;ON;;;;;N;;;;; 2805;BRAILLE PATTERN DOTS-13;So;0;ON;;;;;N;;;;; 2806;BRAILLE PATTERN DOTS-23;So;0;ON;;;;;N;;;;; 2807;BRAILLE PATTERN DOTS-123;So;0;ON;;;;;N;;;;; 2808;BRAILLE PATTERN DOTS-4;So;0;ON;;;;;N;;;;; 2809;BRAILLE PATTERN DOTS-14;So;0;ON;;;;;N;;;;; 280A;BRAILLE PATTERN DOTS-24;So;0;ON;;;;;N;;;;; 280B;BRAILLE PATTERN DOTS-124;So;0;ON;;;;;N;;;;; 280C;BRAILLE PATTERN DOTS-34;So;0;ON;;;;;N;;;;; 280D;BRAILLE PATTERN DOTS-134;So;0;ON;;;;;N;;;;; 280E;BRAILLE PATTERN DOTS-234;So;0;ON;;;;;N;;;;; 280F;BRAILLE PATTERN DOTS-1234;So;0;ON;;;;;N;;;;; 2810;BRAILLE PATTERN DOTS-5;So;0;ON;;;;;N;;;;; 2811;BRAILLE PATTERN DOTS-15;So;0;ON;;;;;N;;;;; 2812;BRAILLE PATTERN DOTS-25;So;0;ON;;;;;N;;;;; 2813;BRAILLE PATTERN DOTS-125;So;0;ON;;;;;N;;;;; 2814;BRAILLE PATTERN DOTS-35;So;0;ON;;;;;N;;;;; 2815;BRAILLE PATTERN DOTS-135;So;0;ON;;;;;N;;;;; 2816;BRAILLE PATTERN DOTS-235;So;0;ON;;;;;N;;;;; 2817;BRAILLE PATTERN DOTS-1235;So;0;ON;;;;;N;;;;; 2818;BRAILLE PATTERN DOTS-45;So;0;ON;;;;;N;;;;; 2819;BRAILLE PATTERN DOTS-145;So;0;ON;;;;;N;;;;; 281A;BRAILLE PATTERN DOTS-245;So;0;ON;;;;;N;;;;; 281B;BRAILLE PATTERN DOTS-1245;So;0;ON;;;;;N;;;;; 281C;BRAILLE PATTERN DOTS-345;So;0;ON;;;;;N;;;;; 281D;BRAILLE PATTERN DOTS-1345;So;0;ON;;;;;N;;;;; 281E;BRAILLE PATTERN DOTS-2345;So;0;ON;;;;;N;;;;; 281F;BRAILLE PATTERN DOTS-12345;So;0;ON;;;;;N;;;;; 2820;BRAILLE PATTERN DOTS-6;So;0;ON;;;;;N;;;;; 2821;BRAILLE PATTERN DOTS-16;So;0;ON;;;;;N;;;;; 2822;BRAILLE PATTERN DOTS-26;So;0;ON;;;;;N;;;;; 2823;BRAILLE PATTERN DOTS-126;So;0;ON;;;;;N;;;;; 2824;BRAILLE PATTERN DOTS-36;So;0;ON;;;;;N;;;;; 2825;BRAILLE PATTERN DOTS-136;So;0;ON;;;;;N;;;;; 2826;BRAILLE PATTERN DOTS-236;So;0;ON;;;;;N;;;;; 2827;BRAILLE PATTERN DOTS-1236;So;0;ON;;;;;N;;;;; 2828;BRAILLE PATTERN DOTS-46;So;0;ON;;;;;N;;;;; 2829;BRAILLE PATTERN DOTS-146;So;0;ON;;;;;N;;;;; 282A;BRAILLE PATTERN DOTS-246;So;0;ON;;;;;N;;;;; 282B;BRAILLE PATTERN DOTS-1246;So;0;ON;;;;;N;;;;; 282C;BRAILLE PATTERN DOTS-346;So;0;ON;;;;;N;;;;; 282D;BRAILLE PATTERN DOTS-1346;So;0;ON;;;;;N;;;;; 282E;BRAILLE PATTERN DOTS-2346;So;0;ON;;;;;N;;;;; 282F;BRAILLE PATTERN DOTS-12346;So;0;ON;;;;;N;;;;; 2830;BRAILLE PATTERN DOTS-56;So;0;ON;;;;;N;;;;; 2831;BRAILLE PATTERN DOTS-156;So;0;ON;;;;;N;;;;; 2832;BRAILLE PATTERN DOTS-256;So;0;ON;;;;;N;;;;; 2833;BRAILLE PATTERN DOTS-1256;So;0;ON;;;;;N;;;;; 2834;BRAILLE PATTERN DOTS-356;So;0;ON;;;;;N;;;;; 2835;BRAILLE PATTERN DOTS-1356;So;0;ON;;;;;N;;;;; 2836;BRAILLE PATTERN DOTS-2356;So;0;ON;;;;;N;;;;; 2837;BRAILLE PATTERN DOTS-12356;So;0;ON;;;;;N;;;;; 2838;BRAILLE PATTERN DOTS-456;So;0;ON;;;;;N;;;;; 2839;BRAILLE PATTERN DOTS-1456;So;0;ON;;;;;N;;;;; 283A;BRAILLE PATTERN DOTS-2456;So;0;ON;;;;;N;;;;; 283B;BRAILLE PATTERN DOTS-12456;So;0;ON;;;;;N;;;;; 283C;BRAILLE PATTERN DOTS-3456;So;0;ON;;;;;N;;;;; 283D;BRAILLE PATTERN DOTS-13456;So;0;ON;;;;;N;;;;; 283E;BRAILLE PATTERN DOTS-23456;So;0;ON;;;;;N;;;;; 283F;BRAILLE PATTERN DOTS-123456;So;0;ON;;;;;N;;;;; 2840;BRAILLE PATTERN DOTS-7;So;0;ON;;;;;N;;;;; 2841;BRAILLE PATTERN DOTS-17;So;0;ON;;;;;N;;;;; 2842;BRAILLE PATTERN DOTS-27;So;0;ON;;;;;N;;;;; 2843;BRAILLE PATTERN DOTS-127;So;0;ON;;;;;N;;;;; 2844;BRAILLE PATTERN DOTS-37;So;0;ON;;;;;N;;;;; 2845;BRAILLE PATTERN DOTS-137;So;0;ON;;;;;N;;;;; 2846;BRAILLE PATTERN DOTS-237;So;0;ON;;;;;N;;;;; 2847;BRAILLE PATTERN DOTS-1237;So;0;ON;;;;;N;;;;; 2848;BRAILLE PATTERN DOTS-47;So;0;ON;;;;;N;;;;; 2849;BRAILLE PATTERN DOTS-147;So;0;ON;;;;;N;;;;; 284A;BRAILLE PATTERN DOTS-247;So;0;ON;;;;;N;;;;; 284B;BRAILLE PATTERN DOTS-1247;So;0;ON;;;;;N;;;;; 284C;BRAILLE PATTERN DOTS-347;So;0;ON;;;;;N;;;;; 284D;BRAILLE PATTERN DOTS-1347;So;0;ON;;;;;N;;;;; 284E;BRAILLE PATTERN DOTS-2347;So;0;ON;;;;;N;;;;; 284F;BRAILLE PATTERN DOTS-12347;So;0;ON;;;;;N;;;;; 2850;BRAILLE PATTERN DOTS-57;So;0;ON;;;;;N;;;;; 2851;BRAILLE PATTERN DOTS-157;So;0;ON;;;;;N;;;;; 2852;BRAILLE PATTERN DOTS-257;So;0;ON;;;;;N;;;;; 2853;BRAILLE PATTERN DOTS-1257;So;0;ON;;;;;N;;;;; 2854;BRAILLE PATTERN DOTS-357;So;0;ON;;;;;N;;;;; 2855;BRAILLE PATTERN DOTS-1357;So;0;ON;;;;;N;;;;; 2856;BRAILLE PATTERN DOTS-2357;So;0;ON;;;;;N;;;;; 2857;BRAILLE PATTERN DOTS-12357;So;0;ON;;;;;N;;;;; 2858;BRAILLE PATTERN DOTS-457;So;0;ON;;;;;N;;;;; 2859;BRAILLE PATTERN DOTS-1457;So;0;ON;;;;;N;;;;; 285A;BRAILLE PATTERN DOTS-2457;So;0;ON;;;;;N;;;;; 285B;BRAILLE PATTERN DOTS-12457;So;0;ON;;;;;N;;;;; 285C;BRAILLE PATTERN DOTS-3457;So;0;ON;;;;;N;;;;; 285D;BRAILLE PATTERN DOTS-13457;So;0;ON;;;;;N;;;;; 285E;BRAILLE PATTERN DOTS-23457;So;0;ON;;;;;N;;;;; 285F;BRAILLE PATTERN DOTS-123457;So;0;ON;;;;;N;;;;; 2860;BRAILLE PATTERN DOTS-67;So;0;ON;;;;;N;;;;; 2861;BRAILLE PATTERN DOTS-167;So;0;ON;;;;;N;;;;; 2862;BRAILLE PATTERN DOTS-267;So;0;ON;;;;;N;;;;; 2863;BRAILLE PATTERN DOTS-1267;So;0;ON;;;;;N;;;;; 2864;BRAILLE PATTERN DOTS-367;So;0;ON;;;;;N;;;;; 2865;BRAILLE PATTERN DOTS-1367;So;0;ON;;;;;N;;;;; 2866;BRAILLE PATTERN DOTS-2367;So;0;ON;;;;;N;;;;; 2867;BRAILLE PATTERN DOTS-12367;So;0;ON;;;;;N;;;;; 2868;BRAILLE PATTERN DOTS-467;So;0;ON;;;;;N;;;;; 2869;BRAILLE PATTERN DOTS-1467;So;0;ON;;;;;N;;;;; 286A;BRAILLE PATTERN DOTS-2467;So;0;ON;;;;;N;;;;; 286B;BRAILLE PATTERN DOTS-12467;So;0;ON;;;;;N;;;;; 286C;BRAILLE PATTERN DOTS-3467;So;0;ON;;;;;N;;;;; 286D;BRAILLE PATTERN DOTS-13467;So;0;ON;;;;;N;;;;; 286E;BRAILLE PATTERN DOTS-23467;So;0;ON;;;;;N;;;;; 286F;BRAILLE PATTERN DOTS-123467;So;0;ON;;;;;N;;;;; 2870;BRAILLE PATTERN DOTS-567;So;0;ON;;;;;N;;;;; 2871;BRAILLE PATTERN DOTS-1567;So;0;ON;;;;;N;;;;; 2872;BRAILLE PATTERN DOTS-2567;So;0;ON;;;;;N;;;;; 2873;BRAILLE PATTERN DOTS-12567;So;0;ON;;;;;N;;;;; 2874;BRAILLE PATTERN DOTS-3567;So;0;ON;;;;;N;;;;; 2875;BRAILLE PATTERN DOTS-13567;So;0;ON;;;;;N;;;;; 2876;BRAILLE PATTERN DOTS-23567;So;0;ON;;;;;N;;;;; 2877;BRAILLE PATTERN DOTS-123567;So;0;ON;;;;;N;;;;; 2878;BRAILLE PATTERN DOTS-4567;So;0;ON;;;;;N;;;;; 2879;BRAILLE PATTERN DOTS-14567;So;0;ON;;;;;N;;;;; 287A;BRAILLE PATTERN DOTS-24567;So;0;ON;;;;;N;;;;; 287B;BRAILLE PATTERN DOTS-124567;So;0;ON;;;;;N;;;;; 287C;BRAILLE PATTERN DOTS-34567;So;0;ON;;;;;N;;;;; 287D;BRAILLE PATTERN DOTS-134567;So;0;ON;;;;;N;;;;; 287E;BRAILLE PATTERN DOTS-234567;So;0;ON;;;;;N;;;;; 287F;BRAILLE PATTERN DOTS-1234567;So;0;ON;;;;;N;;;;; 2880;BRAILLE PATTERN DOTS-8;So;0;ON;;;;;N;;;;; 2881;BRAILLE PATTERN DOTS-18;So;0;ON;;;;;N;;;;; 2882;BRAILLE PATTERN DOTS-28;So;0;ON;;;;;N;;;;; 2883;BRAILLE PATTERN DOTS-128;So;0;ON;;;;;N;;;;; 2884;BRAILLE PATTERN DOTS-38;So;0;ON;;;;;N;;;;; 2885;BRAILLE PATTERN DOTS-138;So;0;ON;;;;;N;;;;; 2886;BRAILLE PATTERN DOTS-238;So;0;ON;;;;;N;;;;; 2887;BRAILLE PATTERN DOTS-1238;So;0;ON;;;;;N;;;;; 2888;BRAILLE PATTERN DOTS-48;So;0;ON;;;;;N;;;;; 2889;BRAILLE PATTERN DOTS-148;So;0;ON;;;;;N;;;;; 288A;BRAILLE PATTERN DOTS-248;So;0;ON;;;;;N;;;;; 288B;BRAILLE PATTERN DOTS-1248;So;0;ON;;;;;N;;;;; 288C;BRAILLE PATTERN DOTS-348;So;0;ON;;;;;N;;;;; 288D;BRAILLE PATTERN DOTS-1348;So;0;ON;;;;;N;;;;; 288E;BRAILLE PATTERN DOTS-2348;So;0;ON;;;;;N;;;;; 288F;BRAILLE PATTERN DOTS-12348;So;0;ON;;;;;N;;;;; 2890;BRAILLE PATTERN DOTS-58;So;0;ON;;;;;N;;;;; 2891;BRAILLE PATTERN DOTS-158;So;0;ON;;;;;N;;;;; 2892;BRAILLE PATTERN DOTS-258;So;0;ON;;;;;N;;;;; 2893;BRAILLE PATTERN DOTS-1258;So;0;ON;;;;;N;;;;; 2894;BRAILLE PATTERN DOTS-358;So;0;ON;;;;;N;;;;; 2895;BRAILLE PATTERN DOTS-1358;So;0;ON;;;;;N;;;;; 2896;BRAILLE PATTERN DOTS-2358;So;0;ON;;;;;N;;;;; 2897;BRAILLE PATTERN DOTS-12358;So;0;ON;;;;;N;;;;; 2898;BRAILLE PATTERN DOTS-458;So;0;ON;;;;;N;;;;; 2899;BRAILLE PATTERN DOTS-1458;So;0;ON;;;;;N;;;;; 289A;BRAILLE PATTERN DOTS-2458;So;0;ON;;;;;N;;;;; 289B;BRAILLE PATTERN DOTS-12458;So;0;ON;;;;;N;;;;; 289C;BRAILLE PATTERN DOTS-3458;So;0;ON;;;;;N;;;;; 289D;BRAILLE PATTERN DOTS-13458;So;0;ON;;;;;N;;;;; 289E;BRAILLE PATTERN DOTS-23458;So;0;ON;;;;;N;;;;; 289F;BRAILLE PATTERN DOTS-123458;So;0;ON;;;;;N;;;;; 28A0;BRAILLE PATTERN DOTS-68;So;0;ON;;;;;N;;;;; 28A1;BRAILLE PATTERN DOTS-168;So;0;ON;;;;;N;;;;; 28A2;BRAILLE PATTERN DOTS-268;So;0;ON;;;;;N;;;;; 28A3;BRAILLE PATTERN DOTS-1268;So;0;ON;;;;;N;;;;; 28A4;BRAILLE PATTERN DOTS-368;So;0;ON;;;;;N;;;;; 28A5;BRAILLE PATTERN DOTS-1368;So;0;ON;;;;;N;;;;; 28A6;BRAILLE PATTERN DOTS-2368;So;0;ON;;;;;N;;;;; 28A7;BRAILLE PATTERN DOTS-12368;So;0;ON;;;;;N;;;;; 28A8;BRAILLE PATTERN DOTS-468;So;0;ON;;;;;N;;;;; 28A9;BRAILLE PATTERN DOTS-1468;So;0;ON;;;;;N;;;;; 28AA;BRAILLE PATTERN DOTS-2468;So;0;ON;;;;;N;;;;; 28AB;BRAILLE PATTERN DOTS-12468;So;0;ON;;;;;N;;;;; 28AC;BRAILLE PATTERN DOTS-3468;So;0;ON;;;;;N;;;;; 28AD;BRAILLE PATTERN DOTS-13468;So;0;ON;;;;;N;;;;; 28AE;BRAILLE PATTERN DOTS-23468;So;0;ON;;;;;N;;;;; 28AF;BRAILLE PATTERN DOTS-123468;So;0;ON;;;;;N;;;;; 28B0;BRAILLE PATTERN DOTS-568;So;0;ON;;;;;N;;;;; 28B1;BRAILLE PATTERN DOTS-1568;So;0;ON;;;;;N;;;;; 28B2;BRAILLE PATTERN DOTS-2568;So;0;ON;;;;;N;;;;; 28B3;BRAILLE PATTERN DOTS-12568;So;0;ON;;;;;N;;;;; 28B4;BRAILLE PATTERN DOTS-3568;So;0;ON;;;;;N;;;;; 28B5;BRAILLE PATTERN DOTS-13568;So;0;ON;;;;;N;;;;; 28B6;BRAILLE PATTERN DOTS-23568;So;0;ON;;;;;N;;;;; 28B7;BRAILLE PATTERN DOTS-123568;So;0;ON;;;;;N;;;;; 28B8;BRAILLE PATTERN DOTS-4568;So;0;ON;;;;;N;;;;; 28B9;BRAILLE PATTERN DOTS-14568;So;0;ON;;;;;N;;;;; 28BA;BRAILLE PATTERN DOTS-24568;So;0;ON;;;;;N;;;;; 28BB;BRAILLE PATTERN DOTS-124568;So;0;ON;;;;;N;;;;; 28BC;BRAILLE PATTERN DOTS-34568;So;0;ON;;;;;N;;;;; 28BD;BRAILLE PATTERN DOTS-134568;So;0;ON;;;;;N;;;;; 28BE;BRAILLE PATTERN DOTS-234568;So;0;ON;;;;;N;;;;; 28BF;BRAILLE PATTERN DOTS-1234568;So;0;ON;;;;;N;;;;; 28C0;BRAILLE PATTERN DOTS-78;So;0;ON;;;;;N;;;;; 28C1;BRAILLE PATTERN DOTS-178;So;0;ON;;;;;N;;;;; 28C2;BRAILLE PATTERN DOTS-278;So;0;ON;;;;;N;;;;; 28C3;BRAILLE PATTERN DOTS-1278;So;0;ON;;;;;N;;;;; 28C4;BRAILLE PATTERN DOTS-378;So;0;ON;;;;;N;;;;; 28C5;BRAILLE PATTERN DOTS-1378;So;0;ON;;;;;N;;;;; 28C6;BRAILLE PATTERN DOTS-2378;So;0;ON;;;;;N;;;;; 28C7;BRAILLE PATTERN DOTS-12378;So;0;ON;;;;;N;;;;; 28C8;BRAILLE PATTERN DOTS-478;So;0;ON;;;;;N;;;;; 28C9;BRAILLE PATTERN DOTS-1478;So;0;ON;;;;;N;;;;; 28CA;BRAILLE PATTERN DOTS-2478;So;0;ON;;;;;N;;;;; 28CB;BRAILLE PATTERN DOTS-12478;So;0;ON;;;;;N;;;;; 28CC;BRAILLE PATTERN DOTS-3478;So;0;ON;;;;;N;;;;; 28CD;BRAILLE PATTERN DOTS-13478;So;0;ON;;;;;N;;;;; 28CE;BRAILLE PATTERN DOTS-23478;So;0;ON;;;;;N;;;;; 28CF;BRAILLE PATTERN DOTS-123478;So;0;ON;;;;;N;;;;; 28D0;BRAILLE PATTERN DOTS-578;So;0;ON;;;;;N;;;;; 28D1;BRAILLE PATTERN DOTS-1578;So;0;ON;;;;;N;;;;; 28D2;BRAILLE PATTERN DOTS-2578;So;0;ON;;;;;N;;;;; 28D3;BRAILLE PATTERN DOTS-12578;So;0;ON;;;;;N;;;;; 28D4;BRAILLE PATTERN DOTS-3578;So;0;ON;;;;;N;;;;; 28D5;BRAILLE PATTERN DOTS-13578;So;0;ON;;;;;N;;;;; 28D6;BRAILLE PATTERN DOTS-23578;So;0;ON;;;;;N;;;;; 28D7;BRAILLE PATTERN DOTS-123578;So;0;ON;;;;;N;;;;; 28D8;BRAILLE PATTERN DOTS-4578;So;0;ON;;;;;N;;;;; 28D9;BRAILLE PATTERN DOTS-14578;So;0;ON;;;;;N;;;;; 28DA;BRAILLE PATTERN DOTS-24578;So;0;ON;;;;;N;;;;; 28DB;BRAILLE PATTERN DOTS-124578;So;0;ON;;;;;N;;;;; 28DC;BRAILLE PATTERN DOTS-34578;So;0;ON;;;;;N;;;;; 28DD;BRAILLE PATTERN DOTS-134578;So;0;ON;;;;;N;;;;; 28DE;BRAILLE PATTERN DOTS-234578;So;0;ON;;;;;N;;;;; 28DF;BRAILLE PATTERN DOTS-1234578;So;0;ON;;;;;N;;;;; 28E0;BRAILLE PATTERN DOTS-678;So;0;ON;;;;;N;;;;; 28E1;BRAILLE PATTERN DOTS-1678;So;0;ON;;;;;N;;;;; 28E2;BRAILLE PATTERN DOTS-2678;So;0;ON;;;;;N;;;;; 28E3;BRAILLE PATTERN DOTS-12678;So;0;ON;;;;;N;;;;; 28E4;BRAILLE PATTERN DOTS-3678;So;0;ON;;;;;N;;;;; 28E5;BRAILLE PATTERN DOTS-13678;So;0;ON;;;;;N;;;;; 28E6;BRAILLE PATTERN DOTS-23678;So;0;ON;;;;;N;;;;; 28E7;BRAILLE PATTERN DOTS-123678;So;0;ON;;;;;N;;;;; 28E8;BRAILLE PATTERN DOTS-4678;So;0;ON;;;;;N;;;;; 28E9;BRAILLE PATTERN DOTS-14678;So;0;ON;;;;;N;;;;; 28EA;BRAILLE PATTERN DOTS-24678;So;0;ON;;;;;N;;;;; 28EB;BRAILLE PATTERN DOTS-124678;So;0;ON;;;;;N;;;;; 28EC;BRAILLE PATTERN DOTS-34678;So;0;ON;;;;;N;;;;; 28ED;BRAILLE PATTERN DOTS-134678;So;0;ON;;;;;N;;;;; 28EE;BRAILLE PATTERN DOTS-234678;So;0;ON;;;;;N;;;;; 28EF;BRAILLE PATTERN DOTS-1234678;So;0;ON;;;;;N;;;;; 28F0;BRAILLE PATTERN DOTS-5678;So;0;ON;;;;;N;;;;; 28F1;BRAILLE PATTERN DOTS-15678;So;0;ON;;;;;N;;;;; 28F2;BRAILLE PATTERN DOTS-25678;So;0;ON;;;;;N;;;;; 28F3;BRAILLE PATTERN DOTS-125678;So;0;ON;;;;;N;;;;; 28F4;BRAILLE PATTERN DOTS-35678;So;0;ON;;;;;N;;;;; 28F5;BRAILLE PATTERN DOTS-135678;So;0;ON;;;;;N;;;;; 28F6;BRAILLE PATTERN DOTS-235678;So;0;ON;;;;;N;;;;; 28F7;BRAILLE PATTERN DOTS-1235678;So;0;ON;;;;;N;;;;; 28F8;BRAILLE PATTERN DOTS-45678;So;0;ON;;;;;N;;;;; 28F9;BRAILLE PATTERN DOTS-145678;So;0;ON;;;;;N;;;;; 28FA;BRAILLE PATTERN DOTS-245678;So;0;ON;;;;;N;;;;; 28FB;BRAILLE PATTERN DOTS-1245678;So;0;ON;;;;;N;;;;; 28FC;BRAILLE PATTERN DOTS-345678;So;0;ON;;;;;N;;;;; 28FD;BRAILLE PATTERN DOTS-1345678;So;0;ON;;;;;N;;;;; 28FE;BRAILLE PATTERN DOTS-2345678;So;0;ON;;;;;N;;;;; 28FF;BRAILLE PATTERN DOTS-12345678;So;0;ON;;;;;N;;;;; 2E80;CJK RADICAL REPEAT;So;0;ON;;;;;N;;;;; 2E81;CJK RADICAL CLIFF;So;0;ON;;;;;N;;;;; 2E82;CJK RADICAL SECOND ONE;So;0;ON;;;;;N;;;;; 2E83;CJK RADICAL SECOND TWO;So;0;ON;;;;;N;;;;; 2E84;CJK RADICAL SECOND THREE;So;0;ON;;;;;N;;;;; 2E85;CJK RADICAL PERSON;So;0;ON;;;;;N;;;;; 2E86;CJK RADICAL BOX;So;0;ON;;;;;N;;;;; 2E87;CJK RADICAL TABLE;So;0;ON;;;;;N;;;;; 2E88;CJK RADICAL KNIFE ONE;So;0;ON;;;;;N;;;;; 2E89;CJK RADICAL KNIFE TWO;So;0;ON;;;;;N;;;;; 2E8A;CJK RADICAL DIVINATION;So;0;ON;;;;;N;;;;; 2E8B;CJK RADICAL SEAL;So;0;ON;;;;;N;;;;; 2E8C;CJK RADICAL SMALL ONE;So;0;ON;;;;;N;;;;; 2E8D;CJK RADICAL SMALL TWO;So;0;ON;;;;;N;;;;; 2E8E;CJK RADICAL LAME ONE;So;0;ON;;;;;N;;;;; 2E8F;CJK RADICAL LAME TWO;So;0;ON;;;;;N;;;;; 2E90;CJK RADICAL LAME THREE;So;0;ON;;;;;N;;;;; 2E91;CJK RADICAL LAME FOUR;So;0;ON;;;;;N;;;;; 2E92;CJK RADICAL SNAKE;So;0;ON;;;;;N;;;;; 2E93;CJK RADICAL THREAD;So;0;ON;;;;;N;;;;; 2E94;CJK RADICAL SNOUT ONE;So;0;ON;;;;;N;;;;; 2E95;CJK RADICAL SNOUT TWO;So;0;ON;;;;;N;;;;; 2E96;CJK RADICAL HEART ONE;So;0;ON;;;;;N;;;;; 2E97;CJK RADICAL HEART TWO;So;0;ON;;;;;N;;;;; 2E98;CJK RADICAL HAND;So;0;ON;;;;;N;;;;; 2E99;CJK RADICAL RAP;So;0;ON;;;;;N;;;;; 2E9B;CJK RADICAL CHOKE;So;0;ON;;;;;N;;;;; 2E9C;CJK RADICAL SUN;So;0;ON;;;;;N;;;;; 2E9D;CJK RADICAL MOON;So;0;ON;;;;;N;;;;; 2E9E;CJK RADICAL DEATH;So;0;ON;;;;;N;;;;; 2E9F;CJK RADICAL MOTHER;So;0;ON; 6BCD;;;;N;;;;; 2EA0;CJK RADICAL CIVILIAN;So;0;ON;;;;;N;;;;; 2EA1;CJK RADICAL WATER ONE;So;0;ON;;;;;N;;;;; 2EA2;CJK RADICAL WATER TWO;So;0;ON;;;;;N;;;;; 2EA3;CJK RADICAL FIRE;So;0;ON;;;;;N;;;;; 2EA4;CJK RADICAL PAW ONE;So;0;ON;;;;;N;;;;; 2EA5;CJK RADICAL PAW TWO;So;0;ON;;;;;N;;;;; 2EA6;CJK RADICAL SIMPLIFIED HALF TREE TRUNK;So;0;ON;;;;;N;;;;; 2EA7;CJK RADICAL COW;So;0;ON;;;;;N;;;;; 2EA8;CJK RADICAL DOG;So;0;ON;;;;;N;;;;; 2EA9;CJK RADICAL JADE;So;0;ON;;;;;N;;;;; 2EAA;CJK RADICAL BOLT OF CLOTH;So;0;ON;;;;;N;;;;; 2EAB;CJK RADICAL EYE;So;0;ON;;;;;N;;;;; 2EAC;CJK RADICAL SPIRIT ONE;So;0;ON;;;;;N;;;;; 2EAD;CJK RADICAL SPIRIT TWO;So;0;ON;;;;;N;;;;; 2EAE;CJK RADICAL BAMBOO;So;0;ON;;;;;N;;;;; 2EAF;CJK RADICAL SILK;So;0;ON;;;;;N;;;;; 2EB0;CJK RADICAL C-SIMPLIFIED SILK;So;0;ON;;;;;N;;;;; 2EB1;CJK RADICAL NET ONE;So;0;ON;;;;;N;;;;; 2EB2;CJK RADICAL NET TWO;So;0;ON;;;;;N;;;;; 2EB3;CJK RADICAL NET THREE;So;0;ON;;;;;N;;;;; 2EB4;CJK RADICAL NET FOUR;So;0;ON;;;;;N;;;;; 2EB5;CJK RADICAL MESH;So;0;ON;;;;;N;;;;; 2EB6;CJK RADICAL SHEEP;So;0;ON;;;;;N;;;;; 2EB7;CJK RADICAL RAM;So;0;ON;;;;;N;;;;; 2EB8;CJK RADICAL EWE;So;0;ON;;;;;N;;;;; 2EB9;CJK RADICAL OLD;So;0;ON;;;;;N;;;;; 2EBA;CJK RADICAL BRUSH ONE;So;0;ON;;;;;N;;;;; 2EBB;CJK RADICAL BRUSH TWO;So;0;ON;;;;;N;;;;; 2EBC;CJK RADICAL MEAT;So;0;ON;;;;;N;;;;; 2EBD;CJK RADICAL MORTAR;So;0;ON;;;;;N;;;;; 2EBE;CJK RADICAL GRASS ONE;So;0;ON;;;;;N;;;;; 2EBF;CJK RADICAL GRASS TWO;So;0;ON;;;;;N;;;;; 2EC0;CJK RADICAL GRASS THREE;So;0;ON;;;;;N;;;;; 2EC1;CJK RADICAL TIGER;So;0;ON;;;;;N;;;;; 2EC2;CJK RADICAL CLOTHES;So;0;ON;;;;;N;;;;; 2EC3;CJK RADICAL WEST ONE;So;0;ON;;;;;N;;;;; 2EC4;CJK RADICAL WEST TWO;So;0;ON;;;;;N;;;;; 2EC5;CJK RADICAL C-SIMPLIFIED SEE;So;0;ON;;;;;N;;;;; 2EC6;CJK RADICAL SIMPLIFIED HORN;So;0;ON;;;;;N;;;;; 2EC7;CJK RADICAL HORN;So;0;ON;;;;;N;;;;; 2EC8;CJK RADICAL C-SIMPLIFIED SPEECH;So;0;ON;;;;;N;;;;; 2EC9;CJK RADICAL C-SIMPLIFIED SHELL;So;0;ON;;;;;N;;;;; 2ECA;CJK RADICAL FOOT;So;0;ON;;;;;N;;;;; 2ECB;CJK RADICAL C-SIMPLIFIED CART;So;0;ON;;;;;N;;;;; 2ECC;CJK RADICAL SIMPLIFIED WALK;So;0;ON;;;;;N;;;;; 2ECD;CJK RADICAL WALK ONE;So;0;ON;;;;;N;;;;; 2ECE;CJK RADICAL WALK TWO;So;0;ON;;;;;N;;;;; 2ECF;CJK RADICAL CITY;So;0;ON;;;;;N;;;;; 2ED0;CJK RADICAL C-SIMPLIFIED GOLD;So;0;ON;;;;;N;;;;; 2ED1;CJK RADICAL LONG ONE;So;0;ON;;;;;N;;;;; 2ED2;CJK RADICAL LONG TWO;So;0;ON;;;;;N;;;;; 2ED3;CJK RADICAL C-SIMPLIFIED LONG;So;0;ON;;;;;N;;;;; 2ED4;CJK RADICAL C-SIMPLIFIED GATE;So;0;ON;;;;;N;;;;; 2ED5;CJK RADICAL MOUND ONE;So;0;ON;;;;;N;;;;; 2ED6;CJK RADICAL MOUND TWO;So;0;ON;;;;;N;;;;; 2ED7;CJK RADICAL RAIN;So;0;ON;;;;;N;;;;; 2ED8;CJK RADICAL BLUE;So;0;ON;;;;;N;;;;; 2ED9;CJK RADICAL C-SIMPLIFIED TANNED LEATHER;So;0;ON;;;;;N;;;;; 2EDA;CJK RADICAL C-SIMPLIFIED LEAF;So;0;ON;;;;;N;;;;; 2EDB;CJK RADICAL C-SIMPLIFIED WIND;So;0;ON;;;;;N;;;;; 2EDC;CJK RADICAL C-SIMPLIFIED FLY;So;0;ON;;;;;N;;;;; 2EDD;CJK RADICAL EAT ONE;So;0;ON;;;;;N;;;;; 2EDE;CJK RADICAL EAT TWO;So;0;ON;;;;;N;;;;; 2EDF;CJK RADICAL EAT THREE;So;0;ON;;;;;N;;;;; 2EE0;CJK RADICAL C-SIMPLIFIED EAT;So;0;ON;;;;;N;;;;; 2EE1;CJK RADICAL HEAD;So;0;ON;;;;;N;;;;; 2EE2;CJK RADICAL C-SIMPLIFIED HORSE;So;0;ON;;;;;N;;;;; 2EE3;CJK RADICAL BONE;So;0;ON;;;;;N;;;;; 2EE4;CJK RADICAL GHOST;So;0;ON;;;;;N;;;;; 2EE5;CJK RADICAL C-SIMPLIFIED FISH;So;0;ON;;;;;N;;;;; 2EE6;CJK RADICAL C-SIMPLIFIED BIRD;So;0;ON;;;;;N;;;;; 2EE7;CJK RADICAL C-SIMPLIFIED SALT;So;0;ON;;;;;N;;;;; 2EE8;CJK RADICAL SIMPLIFIED WHEAT;So;0;ON;;;;;N;;;;; 2EE9;CJK RADICAL SIMPLIFIED YELLOW;So;0;ON;;;;;N;;;;; 2EEA;CJK RADICAL C-SIMPLIFIED FROG;So;0;ON;;;;;N;;;;; 2EEB;CJK RADICAL J-SIMPLIFIED EVEN;So;0;ON;;;;;N;;;;; 2EEC;CJK RADICAL C-SIMPLIFIED EVEN;So;0;ON;;;;;N;;;;; 2EED;CJK RADICAL J-SIMPLIFIED TOOTH;So;0;ON;;;;;N;;;;; 2EEE;CJK RADICAL C-SIMPLIFIED TOOTH;So;0;ON;;;;;N;;;;; 2EEF;CJK RADICAL J-SIMPLIFIED DRAGON;So;0;ON;;;;;N;;;;; 2EF0;CJK RADICAL C-SIMPLIFIED DRAGON;So;0;ON;;;;;N;;;;; 2EF1;CJK RADICAL TURTLE;So;0;ON;;;;;N;;;;; 2EF2;CJK RADICAL J-SIMPLIFIED TURTLE;So;0;ON;;;;;N;;;;; 2EF3;CJK RADICAL C-SIMPLIFIED TURTLE;So;0;ON; 9F9F;;;;N;;;;; 2F00;KANGXI RADICAL ONE;So;0;ON; 4E00;;;;N;;;;; 2F01;KANGXI RADICAL LINE;So;0;ON; 4E28;;;;N;;;;; 2F02;KANGXI RADICAL DOT;So;0;ON; 4E36;;;;N;;;;; 2F03;KANGXI RADICAL SLASH;So;0;ON; 4E3F;;;;N;;;;; 2F04;KANGXI RADICAL SECOND;So;0;ON; 4E59;;;;N;;;;; 2F05;KANGXI RADICAL HOOK;So;0;ON; 4E85;;;;N;;;;; 2F06;KANGXI RADICAL TWO;So;0;ON; 4E8C;;;;N;;;;; 2F07;KANGXI RADICAL LID;So;0;ON; 4EA0;;;;N;;;;; 2F08;KANGXI RADICAL MAN;So;0;ON; 4EBA;;;;N;;;;; 2F09;KANGXI RADICAL LEGS;So;0;ON; 513F;;;;N;;;;; 2F0A;KANGXI RADICAL ENTER;So;0;ON; 5165;;;;N;;;;; 2F0B;KANGXI RADICAL EIGHT;So;0;ON; 516B;;;;N;;;;; 2F0C;KANGXI RADICAL DOWN BOX;So;0;ON; 5182;;;;N;;;;; 2F0D;KANGXI RADICAL COVER;So;0;ON; 5196;;;;N;;;;; 2F0E;KANGXI RADICAL ICE;So;0;ON; 51AB;;;;N;;;;; 2F0F;KANGXI RADICAL TABLE;So;0;ON; 51E0;;;;N;;;;; 2F10;KANGXI RADICAL OPEN BOX;So;0;ON; 51F5;;;;N;;;;; 2F11;KANGXI RADICAL KNIFE;So;0;ON; 5200;;;;N;;;;; 2F12;KANGXI RADICAL POWER;So;0;ON; 529B;;;;N;;;;; 2F13;KANGXI RADICAL WRAP;So;0;ON; 52F9;;;;N;;;;; 2F14;KANGXI RADICAL SPOON;So;0;ON; 5315;;;;N;;;;; 2F15;KANGXI RADICAL RIGHT OPEN BOX;So;0;ON; 531A;;;;N;;;;; 2F16;KANGXI RADICAL HIDING ENCLOSURE;So;0;ON; 5338;;;;N;;;;; 2F17;KANGXI RADICAL TEN;So;0;ON; 5341;;;;N;;;;; 2F18;KANGXI RADICAL DIVINATION;So;0;ON; 535C;;;;N;;;;; 2F19;KANGXI RADICAL SEAL;So;0;ON; 5369;;;;N;;;;; 2F1A;KANGXI RADICAL CLIFF;So;0;ON; 5382;;;;N;;;;; 2F1B;KANGXI RADICAL PRIVATE;So;0;ON; 53B6;;;;N;;;;; 2F1C;KANGXI RADICAL AGAIN;So;0;ON; 53C8;;;;N;;;;; 2F1D;KANGXI RADICAL MOUTH;So;0;ON; 53E3;;;;N;;;;; 2F1E;KANGXI RADICAL ENCLOSURE;So;0;ON; 56D7;;;;N;;;;; 2F1F;KANGXI RADICAL EARTH;So;0;ON; 571F;;;;N;;;;; 2F20;KANGXI RADICAL SCHOLAR;So;0;ON; 58EB;;;;N;;;;; 2F21;KANGXI RADICAL GO;So;0;ON; 5902;;;;N;;;;; 2F22;KANGXI RADICAL GO SLOWLY;So;0;ON; 590A;;;;N;;;;; 2F23;KANGXI RADICAL EVENING;So;0;ON; 5915;;;;N;;;;; 2F24;KANGXI RADICAL BIG;So;0;ON; 5927;;;;N;;;;; 2F25;KANGXI RADICAL WOMAN;So;0;ON; 5973;;;;N;;;;; 2F26;KANGXI RADICAL CHILD;So;0;ON; 5B50;;;;N;;;;; 2F27;KANGXI RADICAL ROOF;So;0;ON; 5B80;;;;N;;;;; 2F28;KANGXI RADICAL INCH;So;0;ON; 5BF8;;;;N;;;;; 2F29;KANGXI RADICAL SMALL;So;0;ON; 5C0F;;;;N;;;;; 2F2A;KANGXI RADICAL LAME;So;0;ON; 5C22;;;;N;;;;; 2F2B;KANGXI RADICAL CORPSE;So;0;ON; 5C38;;;;N;;;;; 2F2C;KANGXI RADICAL SPROUT;So;0;ON; 5C6E;;;;N;;;;; 2F2D;KANGXI RADICAL MOUNTAIN;So;0;ON; 5C71;;;;N;;;;; 2F2E;KANGXI RADICAL RIVER;So;0;ON; 5DDB;;;;N;;;;; 2F2F;KANGXI RADICAL WORK;So;0;ON; 5DE5;;;;N;;;;; 2F30;KANGXI RADICAL ONESELF;So;0;ON; 5DF1;;;;N;;;;; 2F31;KANGXI RADICAL TURBAN;So;0;ON; 5DFE;;;;N;;;;; 2F32;KANGXI RADICAL DRY;So;0;ON; 5E72;;;;N;;;;; 2F33;KANGXI RADICAL SHORT THREAD;So;0;ON; 5E7A;;;;N;;;;; 2F34;KANGXI RADICAL DOTTED CLIFF;So;0;ON; 5E7F;;;;N;;;;; 2F35;KANGXI RADICAL LONG STRIDE;So;0;ON; 5EF4;;;;N;;;;; 2F36;KANGXI RADICAL TWO HANDS;So;0;ON; 5EFE;;;;N;;;;; 2F37;KANGXI RADICAL SHOOT;So;0;ON; 5F0B;;;;N;;;;; 2F38;KANGXI RADICAL BOW;So;0;ON; 5F13;;;;N;;;;; 2F39;KANGXI RADICAL SNOUT;So;0;ON; 5F50;;;;N;;;;; 2F3A;KANGXI RADICAL BRISTLE;So;0;ON; 5F61;;;;N;;;;; 2F3B;KANGXI RADICAL STEP;So;0;ON; 5F73;;;;N;;;;; 2F3C;KANGXI RADICAL HEART;So;0;ON; 5FC3;;;;N;;;;; 2F3D;KANGXI RADICAL HALBERD;So;0;ON; 6208;;;;N;;;;; 2F3E;KANGXI RADICAL DOOR;So;0;ON; 6236;;;;N;;;;; 2F3F;KANGXI RADICAL HAND;So;0;ON; 624B;;;;N;;;;; 2F40;KANGXI RADICAL BRANCH;So;0;ON; 652F;;;;N;;;;; 2F41;KANGXI RADICAL RAP;So;0;ON; 6534;;;;N;;;;; 2F42;KANGXI RADICAL SCRIPT;So;0;ON; 6587;;;;N;;;;; 2F43;KANGXI RADICAL DIPPER;So;0;ON; 6597;;;;N;;;;; 2F44;KANGXI RADICAL AXE;So;0;ON; 65A4;;;;N;;;;; 2F45;KANGXI RADICAL SQUARE;So;0;ON; 65B9;;;;N;;;;; 2F46;KANGXI RADICAL NOT;So;0;ON; 65E0;;;;N;;;;; 2F47;KANGXI RADICAL SUN;So;0;ON; 65E5;;;;N;;;;; 2F48;KANGXI RADICAL SAY;So;0;ON; 66F0;;;;N;;;;; 2F49;KANGXI RADICAL MOON;So;0;ON; 6708;;;;N;;;;; 2F4A;KANGXI RADICAL TREE;So;0;ON; 6728;;;;N;;;;; 2F4B;KANGXI RADICAL LACK;So;0;ON; 6B20;;;;N;;;;; 2F4C;KANGXI RADICAL STOP;So;0;ON; 6B62;;;;N;;;;; 2F4D;KANGXI RADICAL DEATH;So;0;ON; 6B79;;;;N;;;;; 2F4E;KANGXI RADICAL WEAPON;So;0;ON; 6BB3;;;;N;;;;; 2F4F;KANGXI RADICAL DO NOT;So;0;ON; 6BCB;;;;N;;;;; 2F50;KANGXI RADICAL COMPARE;So;0;ON; 6BD4;;;;N;;;;; 2F51;KANGXI RADICAL FUR;So;0;ON; 6BDB;;;;N;;;;; 2F52;KANGXI RADICAL CLAN;So;0;ON; 6C0F;;;;N;;;;; 2F53;KANGXI RADICAL STEAM;So;0;ON; 6C14;;;;N;;;;; 2F54;KANGXI RADICAL WATER;So;0;ON; 6C34;;;;N;;;;; 2F55;KANGXI RADICAL FIRE;So;0;ON; 706B;;;;N;;;;; 2F56;KANGXI RADICAL CLAW;So;0;ON; 722A;;;;N;;;;; 2F57;KANGXI RADICAL FATHER;So;0;ON; 7236;;;;N;;;;; 2F58;KANGXI RADICAL DOUBLE X;So;0;ON; 723B;;;;N;;;;; 2F59;KANGXI RADICAL HALF TREE TRUNK;So;0;ON; 723F;;;;N;;;;; 2F5A;KANGXI RADICAL SLICE;So;0;ON; 7247;;;;N;;;;; 2F5B;KANGXI RADICAL FANG;So;0;ON; 7259;;;;N;;;;; 2F5C;KANGXI RADICAL COW;So;0;ON; 725B;;;;N;;;;; 2F5D;KANGXI RADICAL DOG;So;0;ON; 72AC;;;;N;;;;; 2F5E;KANGXI RADICAL PROFOUND;So;0;ON; 7384;;;;N;;;;; 2F5F;KANGXI RADICAL JADE;So;0;ON; 7389;;;;N;;;;; 2F60;KANGXI RADICAL MELON;So;0;ON; 74DC;;;;N;;;;; 2F61;KANGXI RADICAL TILE;So;0;ON; 74E6;;;;N;;;;; 2F62;KANGXI RADICAL SWEET;So;0;ON; 7518;;;;N;;;;; 2F63;KANGXI RADICAL LIFE;So;0;ON; 751F;;;;N;;;;; 2F64;KANGXI RADICAL USE;So;0;ON; 7528;;;;N;;;;; 2F65;KANGXI RADICAL FIELD;So;0;ON; 7530;;;;N;;;;; 2F66;KANGXI RADICAL BOLT OF CLOTH;So;0;ON; 758B;;;;N;;;;; 2F67;KANGXI RADICAL SICKNESS;So;0;ON; 7592;;;;N;;;;; 2F68;KANGXI RADICAL DOTTED TENT;So;0;ON; 7676;;;;N;;;;; 2F69;KANGXI RADICAL WHITE;So;0;ON; 767D;;;;N;;;;; 2F6A;KANGXI RADICAL SKIN;So;0;ON; 76AE;;;;N;;;;; 2F6B;KANGXI RADICAL DISH;So;0;ON; 76BF;;;;N;;;;; 2F6C;KANGXI RADICAL EYE;So;0;ON; 76EE;;;;N;;;;; 2F6D;KANGXI RADICAL SPEAR;So;0;ON; 77DB;;;;N;;;;; 2F6E;KANGXI RADICAL ARROW;So;0;ON; 77E2;;;;N;;;;; 2F6F;KANGXI RADICAL STONE;So;0;ON; 77F3;;;;N;;;;; 2F70;KANGXI RADICAL SPIRIT;So;0;ON; 793A;;;;N;;;;; 2F71;KANGXI RADICAL TRACK;So;0;ON; 79B8;;;;N;;;;; 2F72;KANGXI RADICAL GRAIN;So;0;ON; 79BE;;;;N;;;;; 2F73;KANGXI RADICAL CAVE;So;0;ON; 7A74;;;;N;;;;; 2F74;KANGXI RADICAL STAND;So;0;ON; 7ACB;;;;N;;;;; 2F75;KANGXI RADICAL BAMBOO;So;0;ON; 7AF9;;;;N;;;;; 2F76;KANGXI RADICAL RICE;So;0;ON; 7C73;;;;N;;;;; 2F77;KANGXI RADICAL SILK;So;0;ON; 7CF8;;;;N;;;;; 2F78;KANGXI RADICAL JAR;So;0;ON; 7F36;;;;N;;;;; 2F79;KANGXI RADICAL NET;So;0;ON; 7F51;;;;N;;;;; 2F7A;KANGXI RADICAL SHEEP;So;0;ON; 7F8A;;;;N;;;;; 2F7B;KANGXI RADICAL FEATHER;So;0;ON; 7FBD;;;;N;;;;; 2F7C;KANGXI RADICAL OLD;So;0;ON; 8001;;;;N;;;;; 2F7D;KANGXI RADICAL AND;So;0;ON; 800C;;;;N;;;;; 2F7E;KANGXI RADICAL PLOW;So;0;ON; 8012;;;;N;;;;; 2F7F;KANGXI RADICAL EAR;So;0;ON; 8033;;;;N;;;;; 2F80;KANGXI RADICAL BRUSH;So;0;ON; 807F;;;;N;;;;; 2F81;KANGXI RADICAL MEAT;So;0;ON; 8089;;;;N;;;;; 2F82;KANGXI RADICAL MINISTER;So;0;ON; 81E3;;;;N;;;;; 2F83;KANGXI RADICAL SELF;So;0;ON; 81EA;;;;N;;;;; 2F84;KANGXI RADICAL ARRIVE;So;0;ON; 81F3;;;;N;;;;; 2F85;KANGXI RADICAL MORTAR;So;0;ON; 81FC;;;;N;;;;; 2F86;KANGXI RADICAL TONGUE;So;0;ON; 820C;;;;N;;;;; 2F87;KANGXI RADICAL OPPOSE;So;0;ON; 821B;;;;N;;;;; 2F88;KANGXI RADICAL BOAT;So;0;ON; 821F;;;;N;;;;; 2F89;KANGXI RADICAL STOPPING;So;0;ON; 826E;;;;N;;;;; 2F8A;KANGXI RADICAL COLOR;So;0;ON; 8272;;;;N;;;;; 2F8B;KANGXI RADICAL GRASS;So;0;ON; 8278;;;;N;;;;; 2F8C;KANGXI RADICAL TIGER;So;0;ON; 864D;;;;N;;;;; 2F8D;KANGXI RADICAL INSECT;So;0;ON; 866B;;;;N;;;;; 2F8E;KANGXI RADICAL BLOOD;So;0;ON; 8840;;;;N;;;;; 2F8F;KANGXI RADICAL WALK ENCLOSURE;So;0;ON; 884C;;;;N;;;;; 2F90;KANGXI RADICAL CLOTHES;So;0;ON; 8863;;;;N;;;;; 2F91;KANGXI RADICAL WEST;So;0;ON; 897E;;;;N;;;;; 2F92;KANGXI RADICAL SEE;So;0;ON; 898B;;;;N;;;;; 2F93;KANGXI RADICAL HORN;So;0;ON; 89D2;;;;N;;;;; 2F94;KANGXI RADICAL SPEECH;So;0;ON; 8A00;;;;N;;;;; 2F95;KANGXI RADICAL VALLEY;So;0;ON; 8C37;;;;N;;;;; 2F96;KANGXI RADICAL BEAN;So;0;ON; 8C46;;;;N;;;;; 2F97;KANGXI RADICAL PIG;So;0;ON; 8C55;;;;N;;;;; 2F98;KANGXI RADICAL BADGER;So;0;ON; 8C78;;;;N;;;;; 2F99;KANGXI RADICAL SHELL;So;0;ON; 8C9D;;;;N;;;;; 2F9A;KANGXI RADICAL RED;So;0;ON; 8D64;;;;N;;;;; 2F9B;KANGXI RADICAL RUN;So;0;ON; 8D70;;;;N;;;;; 2F9C;KANGXI RADICAL FOOT;So;0;ON; 8DB3;;;;N;;;;; 2F9D;KANGXI RADICAL BODY;So;0;ON; 8EAB;;;;N;;;;; 2F9E;KANGXI RADICAL CART;So;0;ON; 8ECA;;;;N;;;;; 2F9F;KANGXI RADICAL BITTER;So;0;ON; 8F9B;;;;N;;;;; 2FA0;KANGXI RADICAL MORNING;So;0;ON; 8FB0;;;;N;;;;; 2FA1;KANGXI RADICAL WALK;So;0;ON; 8FB5;;;;N;;;;; 2FA2;KANGXI RADICAL CITY;So;0;ON; 9091;;;;N;;;;; 2FA3;KANGXI RADICAL WINE;So;0;ON; 9149;;;;N;;;;; 2FA4;KANGXI RADICAL DISTINGUISH;So;0;ON; 91C6;;;;N;;;;; 2FA5;KANGXI RADICAL VILLAGE;So;0;ON; 91CC;;;;N;;;;; 2FA6;KANGXI RADICAL GOLD;So;0;ON; 91D1;;;;N;;;;; 2FA7;KANGXI RADICAL LONG;So;0;ON; 9577;;;;N;;;;; 2FA8;KANGXI RADICAL GATE;So;0;ON; 9580;;;;N;;;;; 2FA9;KANGXI RADICAL MOUND;So;0;ON; 961C;;;;N;;;;; 2FAA;KANGXI RADICAL SLAVE;So;0;ON; 96B6;;;;N;;;;; 2FAB;KANGXI RADICAL SHORT TAILED BIRD;So;0;ON; 96B9;;;;N;;;;; 2FAC;KANGXI RADICAL RAIN;So;0;ON; 96E8;;;;N;;;;; 2FAD;KANGXI RADICAL BLUE;So;0;ON; 9751;;;;N;;;;; 2FAE;KANGXI RADICAL WRONG;So;0;ON; 975E;;;;N;;;;; 2FAF;KANGXI RADICAL FACE;So;0;ON; 9762;;;;N;;;;; 2FB0;KANGXI RADICAL LEATHER;So;0;ON; 9769;;;;N;;;;; 2FB1;KANGXI RADICAL TANNED LEATHER;So;0;ON; 97CB;;;;N;;;;; 2FB2;KANGXI RADICAL LEEK;So;0;ON; 97ED;;;;N;;;;; 2FB3;KANGXI RADICAL SOUND;So;0;ON; 97F3;;;;N;;;;; 2FB4;KANGXI RADICAL LEAF;So;0;ON; 9801;;;;N;;;;; 2FB5;KANGXI RADICAL WIND;So;0;ON; 98A8;;;;N;;;;; 2FB6;KANGXI RADICAL FLY;So;0;ON; 98DB;;;;N;;;;; 2FB7;KANGXI RADICAL EAT;So;0;ON; 98DF;;;;N;;;;; 2FB8;KANGXI RADICAL HEAD;So;0;ON; 9996;;;;N;;;;; 2FB9;KANGXI RADICAL FRAGRANT;So;0;ON; 9999;;;;N;;;;; 2FBA;KANGXI RADICAL HORSE;So;0;ON; 99AC;;;;N;;;;; 2FBB;KANGXI RADICAL BONE;So;0;ON; 9AA8;;;;N;;;;; 2FBC;KANGXI RADICAL TALL;So;0;ON; 9AD8;;;;N;;;;; 2FBD;KANGXI RADICAL HAIR;So;0;ON; 9ADF;;;;N;;;;; 2FBE;KANGXI RADICAL FIGHT;So;0;ON; 9B25;;;;N;;;;; 2FBF;KANGXI RADICAL SACRIFICIAL WINE;So;0;ON; 9B2F;;;;N;;;;; 2FC0;KANGXI RADICAL CAULDRON;So;0;ON; 9B32;;;;N;;;;; 2FC1;KANGXI RADICAL GHOST;So;0;ON; 9B3C;;;;N;;;;; 2FC2;KANGXI RADICAL FISH;So;0;ON; 9B5A;;;;N;;;;; 2FC3;KANGXI RADICAL BIRD;So;0;ON; 9CE5;;;;N;;;;; 2FC4;KANGXI RADICAL SALT;So;0;ON; 9E75;;;;N;;;;; 2FC5;KANGXI RADICAL DEER;So;0;ON; 9E7F;;;;N;;;;; 2FC6;KANGXI RADICAL WHEAT;So;0;ON; 9EA5;;;;N;;;;; 2FC7;KANGXI RADICAL HEMP;So;0;ON; 9EBB;;;;N;;;;; 2FC8;KANGXI RADICAL YELLOW;So;0;ON; 9EC3;;;;N;;;;; 2FC9;KANGXI RADICAL MILLET;So;0;ON; 9ECD;;;;N;;;;; 2FCA;KANGXI RADICAL BLACK;So;0;ON; 9ED1;;;;N;;;;; 2FCB;KANGXI RADICAL EMBROIDERY;So;0;ON; 9EF9;;;;N;;;;; 2FCC;KANGXI RADICAL FROG;So;0;ON; 9EFD;;;;N;;;;; 2FCD;KANGXI RADICAL TRIPOD;So;0;ON; 9F0E;;;;N;;;;; 2FCE;KANGXI RADICAL DRUM;So;0;ON; 9F13;;;;N;;;;; 2FCF;KANGXI RADICAL RAT;So;0;ON; 9F20;;;;N;;;;; 2FD0;KANGXI RADICAL NOSE;So;0;ON; 9F3B;;;;N;;;;; 2FD1;KANGXI RADICAL EVEN;So;0;ON; 9F4A;;;;N;;;;; 2FD2;KANGXI RADICAL TOOTH;So;0;ON; 9F52;;;;N;;;;; 2FD3;KANGXI RADICAL DRAGON;So;0;ON; 9F8D;;;;N;;;;; 2FD4;KANGXI RADICAL TURTLE;So;0;ON; 9F9C;;;;N;;;;; 2FD5;KANGXI RADICAL FLUTE;So;0;ON; 9FA0;;;;N;;;;; 2FF0;IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO RIGHT;So;0;ON;;;;;N;;;;; 2FF1;IDEOGRAPHIC DESCRIPTION CHARACTER ABOVE TO BELOW;So;0;ON;;;;;N;;;;; 2FF2;IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO MIDDLE AND RIGHT;So;0;ON;;;;;N;;;;; 2FF3;IDEOGRAPHIC DESCRIPTION CHARACTER ABOVE TO MIDDLE AND BELOW;So;0;ON;;;;;N;;;;; 2FF4;IDEOGRAPHIC DESCRIPTION CHARACTER FULL SURROUND;So;0;ON;;;;;N;;;;; 2FF5;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM ABOVE;So;0;ON;;;;;N;;;;; 2FF6;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM BELOW;So;0;ON;;;;;N;;;;; 2FF7;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM LEFT;So;0;ON;;;;;N;;;;; 2FF8;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM UPPER LEFT;So;0;ON;;;;;N;;;;; 2FF9;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM UPPER RIGHT;So;0;ON;;;;;N;;;;; 2FFA;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM LOWER LEFT;So;0;ON;;;;;N;;;;; 2FFB;IDEOGRAPHIC DESCRIPTION CHARACTER OVERLAID;So;0;ON;;;;;N;;;;; 3000;IDEOGRAPHIC SPACE;Zs;0;WS; 0020;;;;N;;;;; 3001;IDEOGRAPHIC COMMA;Po;0;ON;;;;;N;;;;; 3002;IDEOGRAPHIC FULL STOP;Po;0;ON;;;;;N;IDEOGRAPHIC PERIOD;;;; 3003;DITTO MARK;Po;0;ON;;;;;N;;;;; 3004;JAPANESE INDUSTRIAL STANDARD SYMBOL;So;0;ON;;;;;N;;;;; 3005;IDEOGRAPHIC ITERATION MARK;Lm;0;L;;;;;N;;;;; 3006;IDEOGRAPHIC CLOSING MARK;Lo;0;L;;;;;N;;;;; 3007;IDEOGRAPHIC NUMBER ZERO;Nl;0;L;;;;0;N;;;;; 3008;LEFT ANGLE BRACKET;Ps;0;ON;;;;;Y;OPENING ANGLE BRACKET;;;; 3009;RIGHT ANGLE BRACKET;Pe;0;ON;;;;;Y;CLOSING ANGLE BRACKET;;;; 300A;LEFT DOUBLE ANGLE BRACKET;Ps;0;ON;;;;;Y;OPENING DOUBLE ANGLE BRACKET;;;; 300B;RIGHT DOUBLE ANGLE BRACKET;Pe;0;ON;;;;;Y;CLOSING DOUBLE ANGLE BRACKET;;;; 300C;LEFT CORNER BRACKET;Ps;0;ON;;;;;Y;OPENING CORNER BRACKET;;;; 300D;RIGHT CORNER BRACKET;Pe;0;ON;;;;;Y;CLOSING CORNER BRACKET;;;; 300E;LEFT WHITE CORNER BRACKET;Ps;0;ON;;;;;Y;OPENING WHITE CORNER BRACKET;;;; 300F;RIGHT WHITE CORNER BRACKET;Pe;0;ON;;;;;Y;CLOSING WHITE CORNER BRACKET;;;; 3010;LEFT BLACK LENTICULAR BRACKET;Ps;0;ON;;;;;Y;OPENING BLACK LENTICULAR BRACKET;;;; 3011;RIGHT BLACK LENTICULAR BRACKET;Pe;0;ON;;;;;Y;CLOSING BLACK LENTICULAR BRACKET;;;; 3012;POSTAL MARK;So;0;ON;;;;;N;;;;; 3013;GETA MARK;So;0;ON;;;;;N;;;;; 3014;LEFT TORTOISE SHELL BRACKET;Ps;0;ON;;;;;Y;OPENING TORTOISE SHELL BRACKET;;;; 3015;RIGHT TORTOISE SHELL BRACKET;Pe;0;ON;;;;;Y;CLOSING TORTOISE SHELL BRACKET;;;; 3016;LEFT WHITE LENTICULAR BRACKET;Ps;0;ON;;;;;Y;OPENING WHITE LENTICULAR BRACKET;;;; 3017;RIGHT WHITE LENTICULAR BRACKET;Pe;0;ON;;;;;Y;CLOSING WHITE LENTICULAR BRACKET;;;; 3018;LEFT WHITE TORTOISE SHELL BRACKET;Ps;0;ON;;;;;Y;OPENING WHITE TORTOISE SHELL BRACKET;;;; 3019;RIGHT WHITE TORTOISE SHELL BRACKET;Pe;0;ON;;;;;Y;CLOSING WHITE TORTOISE SHELL BRACKET;;;; 301A;LEFT WHITE SQUARE BRACKET;Ps;0;ON;;;;;Y;OPENING WHITE SQUARE BRACKET;;;; 301B;RIGHT WHITE SQUARE BRACKET;Pe;0;ON;;;;;Y;CLOSING WHITE SQUARE BRACKET;;;; 301C;WAVE DASH;Pd;0;ON;;;;;N;;;;; 301D;REVERSED DOUBLE PRIME QUOTATION MARK;Ps;0;ON;;;;;N;;;;; 301E;DOUBLE PRIME QUOTATION MARK;Pe;0;ON;;;;;N;;;;; 301F;LOW DOUBLE PRIME QUOTATION MARK;Pe;0;ON;;;;;N;;;;; 3020;POSTAL MARK FACE;So;0;ON;;;;;N;;;;; 3021;HANGZHOU NUMERAL ONE;Nl;0;L;;;;1;N;;;;; 3022;HANGZHOU NUMERAL TWO;Nl;0;L;;;;2;N;;;;; 3023;HANGZHOU NUMERAL THREE;Nl;0;L;;;;3;N;;;;; 3024;HANGZHOU NUMERAL FOUR;Nl;0;L;;;;4;N;;;;; 3025;HANGZHOU NUMERAL FIVE;Nl;0;L;;;;5;N;;;;; 3026;HANGZHOU NUMERAL SIX;Nl;0;L;;;;6;N;;;;; 3027;HANGZHOU NUMERAL SEVEN;Nl;0;L;;;;7;N;;;;; 3028;HANGZHOU NUMERAL EIGHT;Nl;0;L;;;;8;N;;;;; 3029;HANGZHOU NUMERAL NINE;Nl;0;L;;;;9;N;;;;; 302A;IDEOGRAPHIC LEVEL TONE MARK;Mn;218;NSM;;;;;N;;;;; 302B;IDEOGRAPHIC RISING TONE MARK;Mn;228;NSM;;;;;N;;;;; 302C;IDEOGRAPHIC DEPARTING TONE MARK;Mn;232;NSM;;;;;N;;;;; 302D;IDEOGRAPHIC ENTERING TONE MARK;Mn;222;NSM;;;;;N;;;;; 302E;HANGUL SINGLE DOT TONE MARK;Mn;224;NSM;;;;;N;;;;; 302F;HANGUL DOUBLE DOT TONE MARK;Mn;224;NSM;;;;;N;;;;; 3030;WAVY DASH;Pd;0;ON;;;;;N;;;;; 3031;VERTICAL KANA REPEAT MARK;Lm;0;L;;;;;N;;;;; 3032;VERTICAL KANA REPEAT WITH VOICED SOUND MARK;Lm;0;L;;;;;N;;;;; 3033;VERTICAL KANA REPEAT MARK UPPER HALF;Lm;0;L;;;;;N;;;;; 3034;VERTICAL KANA REPEAT WITH VOICED SOUND MARK UPPER HALF;Lm;0;L;;;;;N;;;;; 3035;VERTICAL KANA REPEAT MARK LOWER HALF;Lm;0;L;;;;;N;;;;; 3036;CIRCLED POSTAL MARK;So;0;ON; 3012;;;;N;;;;; 3037;IDEOGRAPHIC TELEGRAPH LINE FEED SEPARATOR SYMBOL;So;0;ON;;;;;N;;;;; 3038;HANGZHOU NUMERAL TEN;Nl;0;L; 5341;;;10;N;;;;; 3039;HANGZHOU NUMERAL TWENTY;Nl;0;L; 5344;;;20;N;;;;; 303A;HANGZHOU NUMERAL THIRTY;Nl;0;L; 5345;;;30;N;;;;; 303E;IDEOGRAPHIC VARIATION INDICATOR;So;0;ON;;;;;N;;;;; 303F;IDEOGRAPHIC HALF FILL SPACE;So;0;ON;;;;;N;;;;; 3041;HIRAGANA LETTER SMALL A;Lo;0;L;;;;;N;;;;; 3042;HIRAGANA LETTER A;Lo;0;L;;;;;N;;;;; 3043;HIRAGANA LETTER SMALL I;Lo;0;L;;;;;N;;;;; 3044;HIRAGANA LETTER I;Lo;0;L;;;;;N;;;;; 3045;HIRAGANA LETTER SMALL U;Lo;0;L;;;;;N;;;;; 3046;HIRAGANA LETTER U;Lo;0;L;;;;;N;;;;; 3047;HIRAGANA LETTER SMALL E;Lo;0;L;;;;;N;;;;; 3048;HIRAGANA LETTER E;Lo;0;L;;;;;N;;;;; 3049;HIRAGANA LETTER SMALL O;Lo;0;L;;;;;N;;;;; 304A;HIRAGANA LETTER O;Lo;0;L;;;;;N;;;;; 304B;HIRAGANA LETTER KA;Lo;0;L;;;;;N;;;;; 304C;HIRAGANA LETTER GA;Lo;0;L;304B 3099;;;;N;;;;; 304D;HIRAGANA LETTER KI;Lo;0;L;;;;;N;;;;; 304E;HIRAGANA LETTER GI;Lo;0;L;304D 3099;;;;N;;;;; 304F;HIRAGANA LETTER KU;Lo;0;L;;;;;N;;;;; 3050;HIRAGANA LETTER GU;Lo;0;L;304F 3099;;;;N;;;;; 3051;HIRAGANA LETTER KE;Lo;0;L;;;;;N;;;;; 3052;HIRAGANA LETTER GE;Lo;0;L;3051 3099;;;;N;;;;; 3053;HIRAGANA LETTER KO;Lo;0;L;;;;;N;;;;; 3054;HIRAGANA LETTER GO;Lo;0;L;3053 3099;;;;N;;;;; 3055;HIRAGANA LETTER SA;Lo;0;L;;;;;N;;;;; 3056;HIRAGANA LETTER ZA;Lo;0;L;3055 3099;;;;N;;;;; 3057;HIRAGANA LETTER SI;Lo;0;L;;;;;N;;;;; 3058;HIRAGANA LETTER ZI;Lo;0;L;3057 3099;;;;N;;;;; 3059;HIRAGANA LETTER SU;Lo;0;L;;;;;N;;;;; 305A;HIRAGANA LETTER ZU;Lo;0;L;3059 3099;;;;N;;;;; 305B;HIRAGANA LETTER SE;Lo;0;L;;;;;N;;;;; 305C;HIRAGANA LETTER ZE;Lo;0;L;305B 3099;;;;N;;;;; 305D;HIRAGANA LETTER SO;Lo;0;L;;;;;N;;;;; 305E;HIRAGANA LETTER ZO;Lo;0;L;305D 3099;;;;N;;;;; 305F;HIRAGANA LETTER TA;Lo;0;L;;;;;N;;;;; 3060;HIRAGANA LETTER DA;Lo;0;L;305F 3099;;;;N;;;;; 3061;HIRAGANA LETTER TI;Lo;0;L;;;;;N;;;;; 3062;HIRAGANA LETTER DI;Lo;0;L;3061 3099;;;;N;;;;; 3063;HIRAGANA LETTER SMALL TU;Lo;0;L;;;;;N;;;;; 3064;HIRAGANA LETTER TU;Lo;0;L;;;;;N;;;;; 3065;HIRAGANA LETTER DU;Lo;0;L;3064 3099;;;;N;;;;; 3066;HIRAGANA LETTER TE;Lo;0;L;;;;;N;;;;; 3067;HIRAGANA LETTER DE;Lo;0;L;3066 3099;;;;N;;;;; 3068;HIRAGANA LETTER TO;Lo;0;L;;;;;N;;;;; 3069;HIRAGANA LETTER DO;Lo;0;L;3068 3099;;;;N;;;;; 306A;HIRAGANA LETTER NA;Lo;0;L;;;;;N;;;;; 306B;HIRAGANA LETTER NI;Lo;0;L;;;;;N;;;;; 306C;HIRAGANA LETTER NU;Lo;0;L;;;;;N;;;;; 306D;HIRAGANA LETTER NE;Lo;0;L;;;;;N;;;;; 306E;HIRAGANA LETTER NO;Lo;0;L;;;;;N;;;;; 306F;HIRAGANA LETTER HA;Lo;0;L;;;;;N;;;;; 3070;HIRAGANA LETTER BA;Lo;0;L;306F 3099;;;;N;;;;; 3071;HIRAGANA LETTER PA;Lo;0;L;306F 309A;;;;N;;;;; 3072;HIRAGANA LETTER HI;Lo;0;L;;;;;N;;;;; 3073;HIRAGANA LETTER BI;Lo;0;L;3072 3099;;;;N;;;;; 3074;HIRAGANA LETTER PI;Lo;0;L;3072 309A;;;;N;;;;; 3075;HIRAGANA LETTER HU;Lo;0;L;;;;;N;;;;; 3076;HIRAGANA LETTER BU;Lo;0;L;3075 3099;;;;N;;;;; 3077;HIRAGANA LETTER PU;Lo;0;L;3075 309A;;;;N;;;;; 3078;HIRAGANA LETTER HE;Lo;0;L;;;;;N;;;;; 3079;HIRAGANA LETTER BE;Lo;0;L;3078 3099;;;;N;;;;; 307A;HIRAGANA LETTER PE;Lo;0;L;3078 309A;;;;N;;;;; 307B;HIRAGANA LETTER HO;Lo;0;L;;;;;N;;;;; 307C;HIRAGANA LETTER BO;Lo;0;L;307B 3099;;;;N;;;;; 307D;HIRAGANA LETTER PO;Lo;0;L;307B 309A;;;;N;;;;; 307E;HIRAGANA LETTER MA;Lo;0;L;;;;;N;;;;; 307F;HIRAGANA LETTER MI;Lo;0;L;;;;;N;;;;; 3080;HIRAGANA LETTER MU;Lo;0;L;;;;;N;;;;; 3081;HIRAGANA LETTER ME;Lo;0;L;;;;;N;;;;; 3082;HIRAGANA LETTER MO;Lo;0;L;;;;;N;;;;; 3083;HIRAGANA LETTER SMALL YA;Lo;0;L;;;;;N;;;;; 3084;HIRAGANA LETTER YA;Lo;0;L;;;;;N;;;;; 3085;HIRAGANA LETTER SMALL YU;Lo;0;L;;;;;N;;;;; 3086;HIRAGANA LETTER YU;Lo;0;L;;;;;N;;;;; 3087;HIRAGANA LETTER SMALL YO;Lo;0;L;;;;;N;;;;; 3088;HIRAGANA LETTER YO;Lo;0;L;;;;;N;;;;; 3089;HIRAGANA LETTER RA;Lo;0;L;;;;;N;;;;; 308A;HIRAGANA LETTER RI;Lo;0;L;;;;;N;;;;; 308B;HIRAGANA LETTER RU;Lo;0;L;;;;;N;;;;; 308C;HIRAGANA LETTER RE;Lo;0;L;;;;;N;;;;; 308D;HIRAGANA LETTER RO;Lo;0;L;;;;;N;;;;; 308E;HIRAGANA LETTER SMALL WA;Lo;0;L;;;;;N;;;;; 308F;HIRAGANA LETTER WA;Lo;0;L;;;;;N;;;;; 3090;HIRAGANA LETTER WI;Lo;0;L;;;;;N;;;;; 3091;HIRAGANA LETTER WE;Lo;0;L;;;;;N;;;;; 3092;HIRAGANA LETTER WO;Lo;0;L;;;;;N;;;;; 3093;HIRAGANA LETTER N;Lo;0;L;;;;;N;;;;; 3094;HIRAGANA LETTER VU;Lo;0;L;3046 3099;;;;N;;;;; 3099;COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK;Mn;8;NSM;;;;;N;NON-SPACING KATAKANA-HIRAGANA VOICED SOUND MARK;;;; 309A;COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK;Mn;8;NSM;;;;;N;NON-SPACING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK;;;; 309B;KATAKANA-HIRAGANA VOICED SOUND MARK;Sk;0;ON; 0020 3099;;;;N;;;;; 309C;KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK;Sk;0;ON; 0020 309A;;;;N;;;;; 309D;HIRAGANA ITERATION MARK;Lm;0;L;;;;;N;;;;; 309E;HIRAGANA VOICED ITERATION MARK;Lm;0;L;309D 3099;;;;N;;;;; 30A1;KATAKANA LETTER SMALL A;Lo;0;L;;;;;N;;;;; 30A2;KATAKANA LETTER A;Lo;0;L;;;;;N;;;;; 30A3;KATAKANA LETTER SMALL I;Lo;0;L;;;;;N;;;;; 30A4;KATAKANA LETTER I;Lo;0;L;;;;;N;;;;; 30A5;KATAKANA LETTER SMALL U;Lo;0;L;;;;;N;;;;; 30A6;KATAKANA LETTER U;Lo;0;L;;;;;N;;;;; 30A7;KATAKANA LETTER SMALL E;Lo;0;L;;;;;N;;;;; 30A8;KATAKANA LETTER E;Lo;0;L;;;;;N;;;;; 30A9;KATAKANA LETTER SMALL O;Lo;0;L;;;;;N;;;;; 30AA;KATAKANA LETTER O;Lo;0;L;;;;;N;;;;; 30AB;KATAKANA LETTER KA;Lo;0;L;;;;;N;;;;; 30AC;KATAKANA LETTER GA;Lo;0;L;30AB 3099;;;;N;;;;; 30AD;KATAKANA LETTER KI;Lo;0;L;;;;;N;;;;; 30AE;KATAKANA LETTER GI;Lo;0;L;30AD 3099;;;;N;;;;; 30AF;KATAKANA LETTER KU;Lo;0;L;;;;;N;;;;; 30B0;KATAKANA LETTER GU;Lo;0;L;30AF 3099;;;;N;;;;; 30B1;KATAKANA LETTER KE;Lo;0;L;;;;;N;;;;; 30B2;KATAKANA LETTER GE;Lo;0;L;30B1 3099;;;;N;;;;; 30B3;KATAKANA LETTER KO;Lo;0;L;;;;;N;;;;; 30B4;KATAKANA LETTER GO;Lo;0;L;30B3 3099;;;;N;;;;; 30B5;KATAKANA LETTER SA;Lo;0;L;;;;;N;;;;; 30B6;KATAKANA LETTER ZA;Lo;0;L;30B5 3099;;;;N;;;;; 30B7;KATAKANA LETTER SI;Lo;0;L;;;;;N;;;;; 30B8;KATAKANA LETTER ZI;Lo;0;L;30B7 3099;;;;N;;;;; 30B9;KATAKANA LETTER SU;Lo;0;L;;;;;N;;;;; 30BA;KATAKANA LETTER ZU;Lo;0;L;30B9 3099;;;;N;;;;; 30BB;KATAKANA LETTER SE;Lo;0;L;;;;;N;;;;; 30BC;KATAKANA LETTER ZE;Lo;0;L;30BB 3099;;;;N;;;;; 30BD;KATAKANA LETTER SO;Lo;0;L;;;;;N;;;;; 30BE;KATAKANA LETTER ZO;Lo;0;L;30BD 3099;;;;N;;;;; 30BF;KATAKANA LETTER TA;Lo;0;L;;;;;N;;;;; 30C0;KATAKANA LETTER DA;Lo;0;L;30BF 3099;;;;N;;;;; 30C1;KATAKANA LETTER TI;Lo;0;L;;;;;N;;;;; 30C2;KATAKANA LETTER DI;Lo;0;L;30C1 3099;;;;N;;;;; 30C3;KATAKANA LETTER SMALL TU;Lo;0;L;;;;;N;;;;; 30C4;KATAKANA LETTER TU;Lo;0;L;;;;;N;;;;; 30C5;KATAKANA LETTER DU;Lo;0;L;30C4 3099;;;;N;;;;; 30C6;KATAKANA LETTER TE;Lo;0;L;;;;;N;;;;; 30C7;KATAKANA LETTER DE;Lo;0;L;30C6 3099;;;;N;;;;; 30C8;KATAKANA LETTER TO;Lo;0;L;;;;;N;;;;; 30C9;KATAKANA LETTER DO;Lo;0;L;30C8 3099;;;;N;;;;; 30CA;KATAKANA LETTER NA;Lo;0;L;;;;;N;;;;; 30CB;KATAKANA LETTER NI;Lo;0;L;;;;;N;;;;; 30CC;KATAKANA LETTER NU;Lo;0;L;;;;;N;;;;; 30CD;KATAKANA LETTER NE;Lo;0;L;;;;;N;;;;; 30CE;KATAKANA LETTER NO;Lo;0;L;;;;;N;;;;; 30CF;KATAKANA LETTER HA;Lo;0;L;;;;;N;;;;; 30D0;KATAKANA LETTER BA;Lo;0;L;30CF 3099;;;;N;;;;; 30D1;KATAKANA LETTER PA;Lo;0;L;30CF 309A;;;;N;;;;; 30D2;KATAKANA LETTER HI;Lo;0;L;;;;;N;;;;; 30D3;KATAKANA LETTER BI;Lo;0;L;30D2 3099;;;;N;;;;; 30D4;KATAKANA LETTER PI;Lo;0;L;30D2 309A;;;;N;;;;; 30D5;KATAKANA LETTER HU;Lo;0;L;;;;;N;;;;; 30D6;KATAKANA LETTER BU;Lo;0;L;30D5 3099;;;;N;;;;; 30D7;KATAKANA LETTER PU;Lo;0;L;30D5 309A;;;;N;;;;; 30D8;KATAKANA LETTER HE;Lo;0;L;;;;;N;;;;; 30D9;KATAKANA LETTER BE;Lo;0;L;30D8 3099;;;;N;;;;; 30DA;KATAKANA LETTER PE;Lo;0;L;30D8 309A;;;;N;;;;; 30DB;KATAKANA LETTER HO;Lo;0;L;;;;;N;;;;; 30DC;KATAKANA LETTER BO;Lo;0;L;30DB 3099;;;;N;;;;; 30DD;KATAKANA LETTER PO;Lo;0;L;30DB 309A;;;;N;;;;; 30DE;KATAKANA LETTER MA;Lo;0;L;;;;;N;;;;; 30DF;KATAKANA LETTER MI;Lo;0;L;;;;;N;;;;; 30E0;KATAKANA LETTER MU;Lo;0;L;;;;;N;;;;; 30E1;KATAKANA LETTER ME;Lo;0;L;;;;;N;;;;; 30E2;KATAKANA LETTER MO;Lo;0;L;;;;;N;;;;; 30E3;KATAKANA LETTER SMALL YA;Lo;0;L;;;;;N;;;;; 30E4;KATAKANA LETTER YA;Lo;0;L;;;;;N;;;;; 30E5;KATAKANA LETTER SMALL YU;Lo;0;L;;;;;N;;;;; 30E6;KATAKANA LETTER YU;Lo;0;L;;;;;N;;;;; 30E7;KATAKANA LETTER SMALL YO;Lo;0;L;;;;;N;;;;; 30E8;KATAKANA LETTER YO;Lo;0;L;;;;;N;;;;; 30E9;KATAKANA LETTER RA;Lo;0;L;;;;;N;;;;; 30EA;KATAKANA LETTER RI;Lo;0;L;;;;;N;;;;; 30EB;KATAKANA LETTER RU;Lo;0;L;;;;;N;;;;; 30EC;KATAKANA LETTER RE;Lo;0;L;;;;;N;;;;; 30ED;KATAKANA LETTER RO;Lo;0;L;;;;;N;;;;; 30EE;KATAKANA LETTER SMALL WA;Lo;0;L;;;;;N;;;;; 30EF;KATAKANA LETTER WA;Lo;0;L;;;;;N;;;;; 30F0;KATAKANA LETTER WI;Lo;0;L;;;;;N;;;;; 30F1;KATAKANA LETTER WE;Lo;0;L;;;;;N;;;;; 30F2;KATAKANA LETTER WO;Lo;0;L;;;;;N;;;;; 30F3;KATAKANA LETTER N;Lo;0;L;;;;;N;;;;; 30F4;KATAKANA LETTER VU;Lo;0;L;30A6 3099;;;;N;;;;; 30F5;KATAKANA LETTER SMALL KA;Lo;0;L;;;;;N;;;;; 30F6;KATAKANA LETTER SMALL KE;Lo;0;L;;;;;N;;;;; 30F7;KATAKANA LETTER VA;Lo;0;L;30EF 3099;;;;N;;;;; 30F8;KATAKANA LETTER VI;Lo;0;L;30F0 3099;;;;N;;;;; 30F9;KATAKANA LETTER VE;Lo;0;L;30F1 3099;;;;N;;;;; 30FA;KATAKANA LETTER VO;Lo;0;L;30F2 3099;;;;N;;;;; 30FB;KATAKANA MIDDLE DOT;Pc;0;ON;;;;;N;;;;; 30FC;KATAKANA-HIRAGANA PROLONGED SOUND MARK;Lm;0;L;;;;;N;;;;; 30FD;KATAKANA ITERATION MARK;Lm;0;L;;;;;N;;;;; 30FE;KATAKANA VOICED ITERATION MARK;Lm;0;L;30FD 3099;;;;N;;;;; 3105;BOPOMOFO LETTER B;Lo;0;L;;;;;N;;;;; 3106;BOPOMOFO LETTER P;Lo;0;L;;;;;N;;;;; 3107;BOPOMOFO LETTER M;Lo;0;L;;;;;N;;;;; 3108;BOPOMOFO LETTER F;Lo;0;L;;;;;N;;;;; 3109;BOPOMOFO LETTER D;Lo;0;L;;;;;N;;;;; 310A;BOPOMOFO LETTER T;Lo;0;L;;;;;N;;;;; 310B;BOPOMOFO LETTER N;Lo;0;L;;;;;N;;;;; 310C;BOPOMOFO LETTER L;Lo;0;L;;;;;N;;;;; 310D;BOPOMOFO LETTER G;Lo;0;L;;;;;N;;;;; 310E;BOPOMOFO LETTER K;Lo;0;L;;;;;N;;;;; 310F;BOPOMOFO LETTER H;Lo;0;L;;;;;N;;;;; 3110;BOPOMOFO LETTER J;Lo;0;L;;;;;N;;;;; 3111;BOPOMOFO LETTER Q;Lo;0;L;;;;;N;;;;; 3112;BOPOMOFO LETTER X;Lo;0;L;;;;;N;;;;; 3113;BOPOMOFO LETTER ZH;Lo;0;L;;;;;N;;;;; 3114;BOPOMOFO LETTER CH;Lo;0;L;;;;;N;;;;; 3115;BOPOMOFO LETTER SH;Lo;0;L;;;;;N;;;;; 3116;BOPOMOFO LETTER R;Lo;0;L;;;;;N;;;;; 3117;BOPOMOFO LETTER Z;Lo;0;L;;;;;N;;;;; 3118;BOPOMOFO LETTER C;Lo;0;L;;;;;N;;;;; 3119;BOPOMOFO LETTER S;Lo;0;L;;;;;N;;;;; 311A;BOPOMOFO LETTER A;Lo;0;L;;;;;N;;;;; 311B;BOPOMOFO LETTER O;Lo;0;L;;;;;N;;;;; 311C;BOPOMOFO LETTER E;Lo;0;L;;;;;N;;;;; 311D;BOPOMOFO LETTER EH;Lo;0;L;;;;;N;;;;; 311E;BOPOMOFO LETTER AI;Lo;0;L;;;;;N;;;;; 311F;BOPOMOFO LETTER EI;Lo;0;L;;;;;N;;;;; 3120;BOPOMOFO LETTER AU;Lo;0;L;;;;;N;;;;; 3121;BOPOMOFO LETTER OU;Lo;0;L;;;;;N;;;;; 3122;BOPOMOFO LETTER AN;Lo;0;L;;;;;N;;;;; 3123;BOPOMOFO LETTER EN;Lo;0;L;;;;;N;;;;; 3124;BOPOMOFO LETTER ANG;Lo;0;L;;;;;N;;;;; 3125;BOPOMOFO LETTER ENG;Lo;0;L;;;;;N;;;;; 3126;BOPOMOFO LETTER ER;Lo;0;L;;;;;N;;;;; 3127;BOPOMOFO LETTER I;Lo;0;L;;;;;N;;;;; 3128;BOPOMOFO LETTER U;Lo;0;L;;;;;N;;;;; 3129;BOPOMOFO LETTER IU;Lo;0;L;;;;;N;;;;; 312A;BOPOMOFO LETTER V;Lo;0;L;;;;;N;;;;; 312B;BOPOMOFO LETTER NG;Lo;0;L;;;;;N;;;;; 312C;BOPOMOFO LETTER GN;Lo;0;L;;;;;N;;;;; 3131;HANGUL LETTER KIYEOK;Lo;0;L; 1100;;;;N;HANGUL LETTER GIYEOG;;;; 3132;HANGUL LETTER SSANGKIYEOK;Lo;0;L; 1101;;;;N;HANGUL LETTER SSANG GIYEOG;;;; 3133;HANGUL LETTER KIYEOK-SIOS;Lo;0;L; 11AA;;;;N;HANGUL LETTER GIYEOG SIOS;;;; 3134;HANGUL LETTER NIEUN;Lo;0;L; 1102;;;;N;;;;; 3135;HANGUL LETTER NIEUN-CIEUC;Lo;0;L; 11AC;;;;N;HANGUL LETTER NIEUN JIEUJ;;;; 3136;HANGUL LETTER NIEUN-HIEUH;Lo;0;L; 11AD;;;;N;HANGUL LETTER NIEUN HIEUH;;;; 3137;HANGUL LETTER TIKEUT;Lo;0;L; 1103;;;;N;HANGUL LETTER DIGEUD;;;; 3138;HANGUL LETTER SSANGTIKEUT;Lo;0;L; 1104;;;;N;HANGUL LETTER SSANG DIGEUD;;;; 3139;HANGUL LETTER RIEUL;Lo;0;L; 1105;;;;N;HANGUL LETTER LIEUL;;;; 313A;HANGUL LETTER RIEUL-KIYEOK;Lo;0;L; 11B0;;;;N;HANGUL LETTER LIEUL GIYEOG;;;; 313B;HANGUL LETTER RIEUL-MIEUM;Lo;0;L; 11B1;;;;N;HANGUL LETTER LIEUL MIEUM;;;; 313C;HANGUL LETTER RIEUL-PIEUP;Lo;0;L; 11B2;;;;N;HANGUL LETTER LIEUL BIEUB;;;; 313D;HANGUL LETTER RIEUL-SIOS;Lo;0;L; 11B3;;;;N;HANGUL LETTER LIEUL SIOS;;;; 313E;HANGUL LETTER RIEUL-THIEUTH;Lo;0;L; 11B4;;;;N;HANGUL LETTER LIEUL TIEUT;;;; 313F;HANGUL LETTER RIEUL-PHIEUPH;Lo;0;L; 11B5;;;;N;HANGUL LETTER LIEUL PIEUP;;;; 3140;HANGUL LETTER RIEUL-HIEUH;Lo;0;L; 111A;;;;N;HANGUL LETTER LIEUL HIEUH;;;; 3141;HANGUL LETTER MIEUM;Lo;0;L; 1106;;;;N;;;;; 3142;HANGUL LETTER PIEUP;Lo;0;L; 1107;;;;N;HANGUL LETTER BIEUB;;;; 3143;HANGUL LETTER SSANGPIEUP;Lo;0;L; 1108;;;;N;HANGUL LETTER SSANG BIEUB;;;; 3144;HANGUL LETTER PIEUP-SIOS;Lo;0;L; 1121;;;;N;HANGUL LETTER BIEUB SIOS;;;; 3145;HANGUL LETTER SIOS;Lo;0;L; 1109;;;;N;;;;; 3146;HANGUL LETTER SSANGSIOS;Lo;0;L; 110A;;;;N;HANGUL LETTER SSANG SIOS;;;; 3147;HANGUL LETTER IEUNG;Lo;0;L; 110B;;;;N;;;;; 3148;HANGUL LETTER CIEUC;Lo;0;L; 110C;;;;N;HANGUL LETTER JIEUJ;;;; 3149;HANGUL LETTER SSANGCIEUC;Lo;0;L; 110D;;;;N;HANGUL LETTER SSANG JIEUJ;;;; 314A;HANGUL LETTER CHIEUCH;Lo;0;L; 110E;;;;N;HANGUL LETTER CIEUC;;;; 314B;HANGUL LETTER KHIEUKH;Lo;0;L; 110F;;;;N;HANGUL LETTER KIYEOK;;;; 314C;HANGUL LETTER THIEUTH;Lo;0;L; 1110;;;;N;HANGUL LETTER TIEUT;;;; 314D;HANGUL LETTER PHIEUPH;Lo;0;L; 1111;;;;N;HANGUL LETTER PIEUP;;;; 314E;HANGUL LETTER HIEUH;Lo;0;L; 1112;;;;N;;;;; 314F;HANGUL LETTER A;Lo;0;L; 1161;;;;N;;;;; 3150;HANGUL LETTER AE;Lo;0;L; 1162;;;;N;;;;; 3151;HANGUL LETTER YA;Lo;0;L; 1163;;;;N;;;;; 3152;HANGUL LETTER YAE;Lo;0;L; 1164;;;;N;;;;; 3153;HANGUL LETTER EO;Lo;0;L; 1165;;;;N;;;;; 3154;HANGUL LETTER E;Lo;0;L; 1166;;;;N;;;;; 3155;HANGUL LETTER YEO;Lo;0;L; 1167;;;;N;;;;; 3156;HANGUL LETTER YE;Lo;0;L; 1168;;;;N;;;;; 3157;HANGUL LETTER O;Lo;0;L; 1169;;;;N;;;;; 3158;HANGUL LETTER WA;Lo;0;L; 116A;;;;N;;;;; 3159;HANGUL LETTER WAE;Lo;0;L; 116B;;;;N;;;;; 315A;HANGUL LETTER OE;Lo;0;L; 116C;;;;N;;;;; 315B;HANGUL LETTER YO;Lo;0;L; 116D;;;;N;;;;; 315C;HANGUL LETTER U;Lo;0;L; 116E;;;;N;;;;; 315D;HANGUL LETTER WEO;Lo;0;L; 116F;;;;N;;;;; 315E;HANGUL LETTER WE;Lo;0;L; 1170;;;;N;;;;; 315F;HANGUL LETTER WI;Lo;0;L; 1171;;;;N;;;;; 3160;HANGUL LETTER YU;Lo;0;L; 1172;;;;N;;;;; 3161;HANGUL LETTER EU;Lo;0;L; 1173;;;;N;;;;; 3162;HANGUL LETTER YI;Lo;0;L; 1174;;;;N;;;;; 3163;HANGUL LETTER I;Lo;0;L; 1175;;;;N;;;;; 3164;HANGUL FILLER;Lo;0;L; 1160;;;;N;HANGUL CAE OM;;;; 3165;HANGUL LETTER SSANGNIEUN;Lo;0;L; 1114;;;;N;HANGUL LETTER SSANG NIEUN;;;; 3166;HANGUL LETTER NIEUN-TIKEUT;Lo;0;L; 1115;;;;N;HANGUL LETTER NIEUN DIGEUD;;;; 3167;HANGUL LETTER NIEUN-SIOS;Lo;0;L; 11C7;;;;N;HANGUL LETTER NIEUN SIOS;;;; 3168;HANGUL LETTER NIEUN-PANSIOS;Lo;0;L; 11C8;;;;N;HANGUL LETTER NIEUN BAN CHI EUM;;;; 3169;HANGUL LETTER RIEUL-KIYEOK-SIOS;Lo;0;L; 11CC;;;;N;HANGUL LETTER LIEUL GIYEOG SIOS;;;; 316A;HANGUL LETTER RIEUL-TIKEUT;Lo;0;L; 11CE;;;;N;HANGUL LETTER LIEUL DIGEUD;;;; 316B;HANGUL LETTER RIEUL-PIEUP-SIOS;Lo;0;L; 11D3;;;;N;HANGUL LETTER LIEUL BIEUB SIOS;;;; 316C;HANGUL LETTER RIEUL-PANSIOS;Lo;0;L; 11D7;;;;N;HANGUL LETTER LIEUL BAN CHI EUM;;;; 316D;HANGUL LETTER RIEUL-YEORINHIEUH;Lo;0;L; 11D9;;;;N;HANGUL LETTER LIEUL YEOLIN HIEUH;;;; 316E;HANGUL LETTER MIEUM-PIEUP;Lo;0;L; 111C;;;;N;HANGUL LETTER MIEUM BIEUB;;;; 316F;HANGUL LETTER MIEUM-SIOS;Lo;0;L; 11DD;;;;N;HANGUL LETTER MIEUM SIOS;;;; 3170;HANGUL LETTER MIEUM-PANSIOS;Lo;0;L; 11DF;;;;N;HANGUL LETTER BIEUB BAN CHI EUM;;;; 3171;HANGUL LETTER KAPYEOUNMIEUM;Lo;0;L; 111D;;;;N;HANGUL LETTER MIEUM SUN GYEONG EUM;;;; 3172;HANGUL LETTER PIEUP-KIYEOK;Lo;0;L; 111E;;;;N;HANGUL LETTER BIEUB GIYEOG;;;; 3173;HANGUL LETTER PIEUP-TIKEUT;Lo;0;L; 1120;;;;N;HANGUL LETTER BIEUB DIGEUD;;;; 3174;HANGUL LETTER PIEUP-SIOS-KIYEOK;Lo;0;L; 1122;;;;N;HANGUL LETTER BIEUB SIOS GIYEOG;;;; 3175;HANGUL LETTER PIEUP-SIOS-TIKEUT;Lo;0;L; 1123;;;;N;HANGUL LETTER BIEUB SIOS DIGEUD;;;; 3176;HANGUL LETTER PIEUP-CIEUC;Lo;0;L; 1127;;;;N;HANGUL LETTER BIEUB JIEUJ;;;; 3177;HANGUL LETTER PIEUP-THIEUTH;Lo;0;L; 1129;;;;N;HANGUL LETTER BIEUB TIEUT;;;; 3178;HANGUL LETTER KAPYEOUNPIEUP;Lo;0;L; 112B;;;;N;HANGUL LETTER BIEUB SUN GYEONG EUM;;;; 3179;HANGUL LETTER KAPYEOUNSSANGPIEUP;Lo;0;L; 112C;;;;N;HANGUL LETTER SSANG BIEUB SUN GYEONG EUM;;;; 317A;HANGUL LETTER SIOS-KIYEOK;Lo;0;L; 112D;;;;N;HANGUL LETTER SIOS GIYEOG;;;; 317B;HANGUL LETTER SIOS-NIEUN;Lo;0;L; 112E;;;;N;HANGUL LETTER SIOS NIEUN;;;; 317C;HANGUL LETTER SIOS-TIKEUT;Lo;0;L; 112F;;;;N;HANGUL LETTER SIOS DIGEUD;;;; 317D;HANGUL LETTER SIOS-PIEUP;Lo;0;L; 1132;;;;N;HANGUL LETTER SIOS BIEUB;;;; 317E;HANGUL LETTER SIOS-CIEUC;Lo;0;L; 1136;;;;N;HANGUL LETTER SIOS JIEUJ;;;; 317F;HANGUL LETTER PANSIOS;Lo;0;L; 1140;;;;N;HANGUL LETTER BAN CHI EUM;;;; 3180;HANGUL LETTER SSANGIEUNG;Lo;0;L; 1147;;;;N;HANGUL LETTER SSANG IEUNG;;;; 3181;HANGUL LETTER YESIEUNG;Lo;0;L; 114C;;;;N;HANGUL LETTER NGIEUNG;;;; 3182;HANGUL LETTER YESIEUNG-SIOS;Lo;0;L; 11F1;;;;N;HANGUL LETTER NGIEUNG SIOS;;;; 3183;HANGUL LETTER YESIEUNG-PANSIOS;Lo;0;L; 11F2;;;;N;HANGUL LETTER NGIEUNG BAN CHI EUM;;;; 3184;HANGUL LETTER KAPYEOUNPHIEUPH;Lo;0;L; 1157;;;;N;HANGUL LETTER PIEUP SUN GYEONG EUM;;;; 3185;HANGUL LETTER SSANGHIEUH;Lo;0;L; 1158;;;;N;HANGUL LETTER SSANG HIEUH;;;; 3186;HANGUL LETTER YEORINHIEUH;Lo;0;L; 1159;;;;N;HANGUL LETTER YEOLIN HIEUH;;;; 3187;HANGUL LETTER YO-YA;Lo;0;L; 1184;;;;N;HANGUL LETTER YOYA;;;; 3188;HANGUL LETTER YO-YAE;Lo;0;L; 1185;;;;N;HANGUL LETTER YOYAE;;;; 3189;HANGUL LETTER YO-I;Lo;0;L; 1188;;;;N;HANGUL LETTER YOI;;;; 318A;HANGUL LETTER YU-YEO;Lo;0;L; 1191;;;;N;HANGUL LETTER YUYEO;;;; 318B;HANGUL LETTER YU-YE;Lo;0;L; 1192;;;;N;HANGUL LETTER YUYE;;;; 318C;HANGUL LETTER YU-I;Lo;0;L; 1194;;;;N;HANGUL LETTER YUI;;;; 318D;HANGUL LETTER ARAEA;Lo;0;L; 119E;;;;N;HANGUL LETTER ALAE A;;;; 318E;HANGUL LETTER ARAEAE;Lo;0;L; 11A1;;;;N;HANGUL LETTER ALAE AE;;;; 3190;IDEOGRAPHIC ANNOTATION LINKING MARK;So;0;L;;;;;N;KANBUN TATETEN;Kanbun Tateten;;; 3191;IDEOGRAPHIC ANNOTATION REVERSE MARK;So;0;L;;;;;N;KAERITEN RE;Kaeriten;;; 3192;IDEOGRAPHIC ANNOTATION ONE MARK;No;0;L; 4E00;;;;N;KAERITEN ITI;Kaeriten;;; 3193;IDEOGRAPHIC ANNOTATION TWO MARK;No;0;L; 4E8C;;;;N;KAERITEN NI;Kaeriten;;; 3194;IDEOGRAPHIC ANNOTATION THREE MARK;No;0;L; 4E09;;;;N;KAERITEN SAN;Kaeriten;;; 3195;IDEOGRAPHIC ANNOTATION FOUR MARK;No;0;L; 56DB;;;;N;KAERITEN SI;Kaeriten;;; 3196;IDEOGRAPHIC ANNOTATION TOP MARK;So;0;L; 4E0A;;;;N;KAERITEN ZYOU;Kaeriten;;; 3197;IDEOGRAPHIC ANNOTATION MIDDLE MARK;So;0;L; 4E2D;;;;N;KAERITEN TYUU;Kaeriten;;; 3198;IDEOGRAPHIC ANNOTATION BOTTOM MARK;So;0;L; 4E0B;;;;N;KAERITEN GE;Kaeriten;;; 3199;IDEOGRAPHIC ANNOTATION FIRST MARK;So;0;L; 7532;;;;N;KAERITEN KOU;Kaeriten;;; 319A;IDEOGRAPHIC ANNOTATION SECOND MARK;So;0;L; 4E59;;;;N;KAERITEN OTU;Kaeriten;;; 319B;IDEOGRAPHIC ANNOTATION THIRD MARK;So;0;L; 4E19;;;;N;KAERITEN HEI;Kaeriten;;; 319C;IDEOGRAPHIC ANNOTATION FOURTH MARK;So;0;L; 4E01;;;;N;KAERITEN TEI;Kaeriten;;; 319D;IDEOGRAPHIC ANNOTATION HEAVEN MARK;So;0;L; 5929;;;;N;KAERITEN TEN;Kaeriten;;; 319E;IDEOGRAPHIC ANNOTATION EARTH MARK;So;0;L; 5730;;;;N;KAERITEN TI;Kaeriten;;; 319F;IDEOGRAPHIC ANNOTATION MAN MARK;So;0;L; 4EBA;;;;N;KAERITEN ZIN;Kaeriten;;; 31A0;BOPOMOFO LETTER BU;Lo;0;L;;;;;N;;;;; 31A1;BOPOMOFO LETTER ZI;Lo;0;L;;;;;N;;;;; 31A2;BOPOMOFO LETTER JI;Lo;0;L;;;;;N;;;;; 31A3;BOPOMOFO LETTER GU;Lo;0;L;;;;;N;;;;; 31A4;BOPOMOFO LETTER EE;Lo;0;L;;;;;N;;;;; 31A5;BOPOMOFO LETTER ENN;Lo;0;L;;;;;N;;;;; 31A6;BOPOMOFO LETTER OO;Lo;0;L;;;;;N;;;;; 31A7;BOPOMOFO LETTER ONN;Lo;0;L;;;;;N;;;;; 31A8;BOPOMOFO LETTER IR;Lo;0;L;;;;;N;;;;; 31A9;BOPOMOFO LETTER ANN;Lo;0;L;;;;;N;;;;; 31AA;BOPOMOFO LETTER INN;Lo;0;L;;;;;N;;;;; 31AB;BOPOMOFO LETTER UNN;Lo;0;L;;;;;N;;;;; 31AC;BOPOMOFO LETTER IM;Lo;0;L;;;;;N;;;;; 31AD;BOPOMOFO LETTER NGG;Lo;0;L;;;;;N;;;;; 31AE;BOPOMOFO LETTER AINN;Lo;0;L;;;;;N;;;;; 31AF;BOPOMOFO LETTER AUNN;Lo;0;L;;;;;N;;;;; 31B0;BOPOMOFO LETTER AM;Lo;0;L;;;;;N;;;;; 31B1;BOPOMOFO LETTER OM;Lo;0;L;;;;;N;;;;; 31B2;BOPOMOFO LETTER ONG;Lo;0;L;;;;;N;;;;; 31B3;BOPOMOFO LETTER INNN;Lo;0;L;;;;;N;;;;; 31B4;BOPOMOFO FINAL LETTER P;Lo;0;L;;;;;N;;;;; 31B5;BOPOMOFO FINAL LETTER T;Lo;0;L;;;;;N;;;;; 31B6;BOPOMOFO FINAL LETTER K;Lo;0;L;;;;;N;;;;; 31B7;BOPOMOFO FINAL LETTER H;Lo;0;L;;;;;N;;;;; 3200;PARENTHESIZED HANGUL KIYEOK;So;0;L; 0028 1100 0029;;;;N;PARENTHESIZED HANGUL GIYEOG;;;; 3201;PARENTHESIZED HANGUL NIEUN;So;0;L; 0028 1102 0029;;;;N;;;;; 3202;PARENTHESIZED HANGUL TIKEUT;So;0;L; 0028 1103 0029;;;;N;PARENTHESIZED HANGUL DIGEUD;;;; 3203;PARENTHESIZED HANGUL RIEUL;So;0;L; 0028 1105 0029;;;;N;PARENTHESIZED HANGUL LIEUL;;;; 3204;PARENTHESIZED HANGUL MIEUM;So;0;L; 0028 1106 0029;;;;N;;;;; 3205;PARENTHESIZED HANGUL PIEUP;So;0;L; 0028 1107 0029;;;;N;PARENTHESIZED HANGUL BIEUB;;;; 3206;PARENTHESIZED HANGUL SIOS;So;0;L; 0028 1109 0029;;;;N;;;;; 3207;PARENTHESIZED HANGUL IEUNG;So;0;L; 0028 110B 0029;;;;N;;;;; 3208;PARENTHESIZED HANGUL CIEUC;So;0;L; 0028 110C 0029;;;;N;PARENTHESIZED HANGUL JIEUJ;;;; 3209;PARENTHESIZED HANGUL CHIEUCH;So;0;L; 0028 110E 0029;;;;N;PARENTHESIZED HANGUL CIEUC;;;; 320A;PARENTHESIZED HANGUL KHIEUKH;So;0;L; 0028 110F 0029;;;;N;PARENTHESIZED HANGUL KIYEOK;;;; 320B;PARENTHESIZED HANGUL THIEUTH;So;0;L; 0028 1110 0029;;;;N;PARENTHESIZED HANGUL TIEUT;;;; 320C;PARENTHESIZED HANGUL PHIEUPH;So;0;L; 0028 1111 0029;;;;N;PARENTHESIZED HANGUL PIEUP;;;; 320D;PARENTHESIZED HANGUL HIEUH;So;0;L; 0028 1112 0029;;;;N;;;;; 320E;PARENTHESIZED HANGUL KIYEOK A;So;0;L; 0028 1100 1161 0029;;;;N;PARENTHESIZED HANGUL GA;;;; 320F;PARENTHESIZED HANGUL NIEUN A;So;0;L; 0028 1102 1161 0029;;;;N;PARENTHESIZED HANGUL NA;;;; 3210;PARENTHESIZED HANGUL TIKEUT A;So;0;L; 0028 1103 1161 0029;;;;N;PARENTHESIZED HANGUL DA;;;; 3211;PARENTHESIZED HANGUL RIEUL A;So;0;L; 0028 1105 1161 0029;;;;N;PARENTHESIZED HANGUL LA;;;; 3212;PARENTHESIZED HANGUL MIEUM A;So;0;L; 0028 1106 1161 0029;;;;N;PARENTHESIZED HANGUL MA;;;; 3213;PARENTHESIZED HANGUL PIEUP A;So;0;L; 0028 1107 1161 0029;;;;N;PARENTHESIZED HANGUL BA;;;; 3214;PARENTHESIZED HANGUL SIOS A;So;0;L; 0028 1109 1161 0029;;;;N;PARENTHESIZED HANGUL SA;;;; 3215;PARENTHESIZED HANGUL IEUNG A;So;0;L; 0028 110B 1161 0029;;;;N;PARENTHESIZED HANGUL A;;;; 3216;PARENTHESIZED HANGUL CIEUC A;So;0;L; 0028 110C 1161 0029;;;;N;PARENTHESIZED HANGUL JA;;;; 3217;PARENTHESIZED HANGUL CHIEUCH A;So;0;L; 0028 110E 1161 0029;;;;N;PARENTHESIZED HANGUL CA;;;; 3218;PARENTHESIZED HANGUL KHIEUKH A;So;0;L; 0028 110F 1161 0029;;;;N;PARENTHESIZED HANGUL KA;;;; 3219;PARENTHESIZED HANGUL THIEUTH A;So;0;L; 0028 1110 1161 0029;;;;N;PARENTHESIZED HANGUL TA;;;; 321A;PARENTHESIZED HANGUL PHIEUPH A;So;0;L; 0028 1111 1161 0029;;;;N;PARENTHESIZED HANGUL PA;;;; 321B;PARENTHESIZED HANGUL HIEUH A;So;0;L; 0028 1112 1161 0029;;;;N;PARENTHESIZED HANGUL HA;;;; 321C;PARENTHESIZED HANGUL CIEUC U;So;0;L; 0028 110C 116E 0029;;;;N;PARENTHESIZED HANGUL JU;;;; 3220;PARENTHESIZED IDEOGRAPH ONE;No;0;L; 0028 4E00 0029;;;;N;;;;; 3221;PARENTHESIZED IDEOGRAPH TWO;No;0;L; 0028 4E8C 0029;;;;N;;;;; 3222;PARENTHESIZED IDEOGRAPH THREE;No;0;L; 0028 4E09 0029;;;;N;;;;; 3223;PARENTHESIZED IDEOGRAPH FOUR;No;0;L; 0028 56DB 0029;;;;N;;;;; 3224;PARENTHESIZED IDEOGRAPH FIVE;No;0;L; 0028 4E94 0029;;;;N;;;;; 3225;PARENTHESIZED IDEOGRAPH SIX;No;0;L; 0028 516D 0029;;;;N;;;;; 3226;PARENTHESIZED IDEOGRAPH SEVEN;No;0;L; 0028 4E03 0029;;;;N;;;;; 3227;PARENTHESIZED IDEOGRAPH EIGHT;No;0;L; 0028 516B 0029;;;;N;;;;; 3228;PARENTHESIZED IDEOGRAPH NINE;No;0;L; 0028 4E5D 0029;;;;N;;;;; 3229;PARENTHESIZED IDEOGRAPH TEN;No;0;L; 0028 5341 0029;;;;N;;;;; 322A;PARENTHESIZED IDEOGRAPH MOON;So;0;L; 0028 6708 0029;;;;N;;;;; 322B;PARENTHESIZED IDEOGRAPH FIRE;So;0;L; 0028 706B 0029;;;;N;;;;; 322C;PARENTHESIZED IDEOGRAPH WATER;So;0;L; 0028 6C34 0029;;;;N;;;;; 322D;PARENTHESIZED IDEOGRAPH WOOD;So;0;L; 0028 6728 0029;;;;N;;;;; 322E;PARENTHESIZED IDEOGRAPH METAL;So;0;L; 0028 91D1 0029;;;;N;;;;; 322F;PARENTHESIZED IDEOGRAPH EARTH;So;0;L; 0028 571F 0029;;;;N;;;;; 3230;PARENTHESIZED IDEOGRAPH SUN;So;0;L; 0028 65E5 0029;;;;N;;;;; 3231;PARENTHESIZED IDEOGRAPH STOCK;So;0;L; 0028 682A 0029;;;;N;;;;; 3232;PARENTHESIZED IDEOGRAPH HAVE;So;0;L; 0028 6709 0029;;;;N;;;;; 3233;PARENTHESIZED IDEOGRAPH SOCIETY;So;0;L; 0028 793E 0029;;;;N;;;;; 3234;PARENTHESIZED IDEOGRAPH NAME;So;0;L; 0028 540D 0029;;;;N;;;;; 3235;PARENTHESIZED IDEOGRAPH SPECIAL;So;0;L; 0028 7279 0029;;;;N;;;;; 3236;PARENTHESIZED IDEOGRAPH FINANCIAL;So;0;L; 0028 8CA1 0029;;;;N;;;;; 3237;PARENTHESIZED IDEOGRAPH CONGRATULATION;So;0;L; 0028 795D 0029;;;;N;;;;; 3238;PARENTHESIZED IDEOGRAPH LABOR;So;0;L; 0028 52B4 0029;;;;N;;;;; 3239;PARENTHESIZED IDEOGRAPH REPRESENT;So;0;L; 0028 4EE3 0029;;;;N;;;;; 323A;PARENTHESIZED IDEOGRAPH CALL;So;0;L; 0028 547C 0029;;;;N;;;;; 323B;PARENTHESIZED IDEOGRAPH STUDY;So;0;L; 0028 5B66 0029;;;;N;;;;; 323C;PARENTHESIZED IDEOGRAPH SUPERVISE;So;0;L; 0028 76E3 0029;;;;N;;;;; 323D;PARENTHESIZED IDEOGRAPH ENTERPRISE;So;0;L; 0028 4F01 0029;;;;N;;;;; 323E;PARENTHESIZED IDEOGRAPH RESOURCE;So;0;L; 0028 8CC7 0029;;;;N;;;;; 323F;PARENTHESIZED IDEOGRAPH ALLIANCE;So;0;L; 0028 5354 0029;;;;N;;;;; 3240;PARENTHESIZED IDEOGRAPH FESTIVAL;So;0;L; 0028 796D 0029;;;;N;;;;; 3241;PARENTHESIZED IDEOGRAPH REST;So;0;L; 0028 4F11 0029;;;;N;;;;; 3242;PARENTHESIZED IDEOGRAPH SELF;So;0;L; 0028 81EA 0029;;;;N;;;;; 3243;PARENTHESIZED IDEOGRAPH REACH;So;0;L; 0028 81F3 0029;;;;N;;;;; 3260;CIRCLED HANGUL KIYEOK;So;0;L; 1100;;;;N;CIRCLED HANGUL GIYEOG;;;; 3261;CIRCLED HANGUL NIEUN;So;0;L; 1102;;;;N;;;;; 3262;CIRCLED HANGUL TIKEUT;So;0;L; 1103;;;;N;CIRCLED HANGUL DIGEUD;;;; 3263;CIRCLED HANGUL RIEUL;So;0;L; 1105;;;;N;CIRCLED HANGUL LIEUL;;;; 3264;CIRCLED HANGUL MIEUM;So;0;L; 1106;;;;N;;;;; 3265;CIRCLED HANGUL PIEUP;So;0;L; 1107;;;;N;CIRCLED HANGUL BIEUB;;;; 3266;CIRCLED HANGUL SIOS;So;0;L; 1109;;;;N;;;;; 3267;CIRCLED HANGUL IEUNG;So;0;L; 110B;;;;N;;;;; 3268;CIRCLED HANGUL CIEUC;So;0;L; 110C;;;;N;CIRCLED HANGUL JIEUJ;;;; 3269;CIRCLED HANGUL CHIEUCH;So;0;L; 110E;;;;N;CIRCLED HANGUL CIEUC;;;; 326A;CIRCLED HANGUL KHIEUKH;So;0;L; 110F;;;;N;CIRCLED HANGUL KIYEOK;;;; 326B;CIRCLED HANGUL THIEUTH;So;0;L; 1110;;;;N;CIRCLED HANGUL TIEUT;;;; 326C;CIRCLED HANGUL PHIEUPH;So;0;L; 1111;;;;N;CIRCLED HANGUL PIEUP;;;; 326D;CIRCLED HANGUL HIEUH;So;0;L; 1112;;;;N;;;;; 326E;CIRCLED HANGUL KIYEOK A;So;0;L; 1100 1161;;;;N;CIRCLED HANGUL GA;;;; 326F;CIRCLED HANGUL NIEUN A;So;0;L; 1102 1161;;;;N;CIRCLED HANGUL NA;;;; 3270;CIRCLED HANGUL TIKEUT A;So;0;L; 1103 1161;;;;N;CIRCLED HANGUL DA;;;; 3271;CIRCLED HANGUL RIEUL A;So;0;L; 1105 1161;;;;N;CIRCLED HANGUL LA;;;; 3272;CIRCLED HANGUL MIEUM A;So;0;L; 1106 1161;;;;N;CIRCLED HANGUL MA;;;; 3273;CIRCLED HANGUL PIEUP A;So;0;L; 1107 1161;;;;N;CIRCLED HANGUL BA;;;; 3274;CIRCLED HANGUL SIOS A;So;0;L; 1109 1161;;;;N;CIRCLED HANGUL SA;;;; 3275;CIRCLED HANGUL IEUNG A;So;0;L; 110B 1161;;;;N;CIRCLED HANGUL A;;;; 3276;CIRCLED HANGUL CIEUC A;So;0;L; 110C 1161;;;;N;CIRCLED HANGUL JA;;;; 3277;CIRCLED HANGUL CHIEUCH A;So;0;L; 110E 1161;;;;N;CIRCLED HANGUL CA;;;; 3278;CIRCLED HANGUL KHIEUKH A;So;0;L; 110F 1161;;;;N;CIRCLED HANGUL KA;;;; 3279;CIRCLED HANGUL THIEUTH A;So;0;L; 1110 1161;;;;N;CIRCLED HANGUL TA;;;; 327A;CIRCLED HANGUL PHIEUPH A;So;0;L; 1111 1161;;;;N;CIRCLED HANGUL PA;;;; 327B;CIRCLED HANGUL HIEUH A;So;0;L; 1112 1161;;;;N;CIRCLED HANGUL HA;;;; 327F;KOREAN STANDARD SYMBOL;So;0;L;;;;;N;;;;; 3280;CIRCLED IDEOGRAPH ONE;No;0;L; 4E00;;;1;N;;;;; 3281;CIRCLED IDEOGRAPH TWO;No;0;L; 4E8C;;;2;N;;;;; 3282;CIRCLED IDEOGRAPH THREE;No;0;L; 4E09;;;3;N;;;;; 3283;CIRCLED IDEOGRAPH FOUR;No;0;L; 56DB;;;4;N;;;;; 3284;CIRCLED IDEOGRAPH FIVE;No;0;L; 4E94;;;5;N;;;;; 3285;CIRCLED IDEOGRAPH SIX;No;0;L; 516D;;;6;N;;;;; 3286;CIRCLED IDEOGRAPH SEVEN;No;0;L; 4E03;;;7;N;;;;; 3287;CIRCLED IDEOGRAPH EIGHT;No;0;L; 516B;;;8;N;;;;; 3288;CIRCLED IDEOGRAPH NINE;No;0;L; 4E5D;;;9;N;;;;; 3289;CIRCLED IDEOGRAPH TEN;No;0;L; 5341;;;10;N;;;;; 328A;CIRCLED IDEOGRAPH MOON;So;0;L; 6708;;;;N;;;;; 328B;CIRCLED IDEOGRAPH FIRE;So;0;L; 706B;;;;N;;;;; 328C;CIRCLED IDEOGRAPH WATER;So;0;L; 6C34;;;;N;;;;; 328D;CIRCLED IDEOGRAPH WOOD;So;0;L; 6728;;;;N;;;;; 328E;CIRCLED IDEOGRAPH METAL;So;0;L; 91D1;;;;N;;;;; 328F;CIRCLED IDEOGRAPH EARTH;So;0;L; 571F;;;;N;;;;; 3290;CIRCLED IDEOGRAPH SUN;So;0;L; 65E5;;;;N;;;;; 3291;CIRCLED IDEOGRAPH STOCK;So;0;L; 682A;;;;N;;;;; 3292;CIRCLED IDEOGRAPH HAVE;So;0;L; 6709;;;;N;;;;; 3293;CIRCLED IDEOGRAPH SOCIETY;So;0;L; 793E;;;;N;;;;; 3294;CIRCLED IDEOGRAPH NAME;So;0;L; 540D;;;;N;;;;; 3295;CIRCLED IDEOGRAPH SPECIAL;So;0;L; 7279;;;;N;;;;; 3296;CIRCLED IDEOGRAPH FINANCIAL;So;0;L; 8CA1;;;;N;;;;; 3297;CIRCLED IDEOGRAPH CONGRATULATION;So;0;L; 795D;;;;N;;;;; 3298;CIRCLED IDEOGRAPH LABOR;So;0;L; 52B4;;;;N;;;;; 3299;CIRCLED IDEOGRAPH SECRET;So;0;L; 79D8;;;;N;;;;; 329A;CIRCLED IDEOGRAPH MALE;So;0;L; 7537;;;;N;;;;; 329B;CIRCLED IDEOGRAPH FEMALE;So;0;L; 5973;;;;N;;;;; 329C;CIRCLED IDEOGRAPH SUITABLE;So;0;L; 9069;;;;N;;;;; 329D;CIRCLED IDEOGRAPH EXCELLENT;So;0;L; 512A;;;;N;;;;; 329E;CIRCLED IDEOGRAPH PRINT;So;0;L; 5370;;;;N;;;;; 329F;CIRCLED IDEOGRAPH ATTENTION;So;0;L; 6CE8;;;;N;;;;; 32A0;CIRCLED IDEOGRAPH ITEM;So;0;L; 9805;;;;N;;;;; 32A1;CIRCLED IDEOGRAPH REST;So;0;L; 4F11;;;;N;;;;; 32A2;CIRCLED IDEOGRAPH COPY;So;0;L; 5199;;;;N;;;;; 32A3;CIRCLED IDEOGRAPH CORRECT;So;0;L; 6B63;;;;N;;;;; 32A4;CIRCLED IDEOGRAPH HIGH;So;0;L; 4E0A;;;;N;;;;; 32A5;CIRCLED IDEOGRAPH CENTRE;So;0;L; 4E2D;;;;N;CIRCLED IDEOGRAPH CENTER;;;; 32A6;CIRCLED IDEOGRAPH LOW;So;0;L; 4E0B;;;;N;;;;; 32A7;CIRCLED IDEOGRAPH LEFT;So;0;L; 5DE6;;;;N;;;;; 32A8;CIRCLED IDEOGRAPH RIGHT;So;0;L; 53F3;;;;N;;;;; 32A9;CIRCLED IDEOGRAPH MEDICINE;So;0;L; 533B;;;;N;;;;; 32AA;CIRCLED IDEOGRAPH RELIGION;So;0;L; 5B97;;;;N;;;;; 32AB;CIRCLED IDEOGRAPH STUDY;So;0;L; 5B66;;;;N;;;;; 32AC;CIRCLED IDEOGRAPH SUPERVISE;So;0;L; 76E3;;;;N;;;;; 32AD;CIRCLED IDEOGRAPH ENTERPRISE;So;0;L; 4F01;;;;N;;;;; 32AE;CIRCLED IDEOGRAPH RESOURCE;So;0;L; 8CC7;;;;N;;;;; 32AF;CIRCLED IDEOGRAPH ALLIANCE;So;0;L; 5354;;;;N;;;;; 32B0;CIRCLED IDEOGRAPH NIGHT;So;0;L; 591C;;;;N;;;;; 32C0;IDEOGRAPHIC TELEGRAPH SYMBOL FOR JANUARY;So;0;L; 0031 6708;;;;N;;;;; 32C1;IDEOGRAPHIC TELEGRAPH SYMBOL FOR FEBRUARY;So;0;L; 0032 6708;;;;N;;;;; 32C2;IDEOGRAPHIC TELEGRAPH SYMBOL FOR MARCH;So;0;L; 0033 6708;;;;N;;;;; 32C3;IDEOGRAPHIC TELEGRAPH SYMBOL FOR APRIL;So;0;L; 0034 6708;;;;N;;;;; 32C4;IDEOGRAPHIC TELEGRAPH SYMBOL FOR MAY;So;0;L; 0035 6708;;;;N;;;;; 32C5;IDEOGRAPHIC TELEGRAPH SYMBOL FOR JUNE;So;0;L; 0036 6708;;;;N;;;;; 32C6;IDEOGRAPHIC TELEGRAPH SYMBOL FOR JULY;So;0;L; 0037 6708;;;;N;;;;; 32C7;IDEOGRAPHIC TELEGRAPH SYMBOL FOR AUGUST;So;0;L; 0038 6708;;;;N;;;;; 32C8;IDEOGRAPHIC TELEGRAPH SYMBOL FOR SEPTEMBER;So;0;L; 0039 6708;;;;N;;;;; 32C9;IDEOGRAPHIC TELEGRAPH SYMBOL FOR OCTOBER;So;0;L; 0031 0030 6708;;;;N;;;;; 32CA;IDEOGRAPHIC TELEGRAPH SYMBOL FOR NOVEMBER;So;0;L; 0031 0031 6708;;;;N;;;;; 32CB;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DECEMBER;So;0;L; 0031 0032 6708;;;;N;;;;; 32D0;CIRCLED KATAKANA A;So;0;L; 30A2;;;;N;;;;; 32D1;CIRCLED KATAKANA I;So;0;L; 30A4;;;;N;;;;; 32D2;CIRCLED KATAKANA U;So;0;L; 30A6;;;;N;;;;; 32D3;CIRCLED KATAKANA E;So;0;L; 30A8;;;;N;;;;; 32D4;CIRCLED KATAKANA O;So;0;L; 30AA;;;;N;;;;; 32D5;CIRCLED KATAKANA KA;So;0;L; 30AB;;;;N;;;;; 32D6;CIRCLED KATAKANA KI;So;0;L; 30AD;;;;N;;;;; 32D7;CIRCLED KATAKANA KU;So;0;L; 30AF;;;;N;;;;; 32D8;CIRCLED KATAKANA KE;So;0;L; 30B1;;;;N;;;;; 32D9;CIRCLED KATAKANA KO;So;0;L; 30B3;;;;N;;;;; 32DA;CIRCLED KATAKANA SA;So;0;L; 30B5;;;;N;;;;; 32DB;CIRCLED KATAKANA SI;So;0;L; 30B7;;;;N;;;;; 32DC;CIRCLED KATAKANA SU;So;0;L; 30B9;;;;N;;;;; 32DD;CIRCLED KATAKANA SE;So;0;L; 30BB;;;;N;;;;; 32DE;CIRCLED KATAKANA SO;So;0;L; 30BD;;;;N;;;;; 32DF;CIRCLED KATAKANA TA;So;0;L; 30BF;;;;N;;;;; 32E0;CIRCLED KATAKANA TI;So;0;L; 30C1;;;;N;;;;; 32E1;CIRCLED KATAKANA TU;So;0;L; 30C4;;;;N;;;;; 32E2;CIRCLED KATAKANA TE;So;0;L; 30C6;;;;N;;;;; 32E3;CIRCLED KATAKANA TO;So;0;L; 30C8;;;;N;;;;; 32E4;CIRCLED KATAKANA NA;So;0;L; 30CA;;;;N;;;;; 32E5;CIRCLED KATAKANA NI;So;0;L; 30CB;;;;N;;;;; 32E6;CIRCLED KATAKANA NU;So;0;L; 30CC;;;;N;;;;; 32E7;CIRCLED KATAKANA NE;So;0;L; 30CD;;;;N;;;;; 32E8;CIRCLED KATAKANA NO;So;0;L; 30CE;;;;N;;;;; 32E9;CIRCLED KATAKANA HA;So;0;L; 30CF;;;;N;;;;; 32EA;CIRCLED KATAKANA HI;So;0;L; 30D2;;;;N;;;;; 32EB;CIRCLED KATAKANA HU;So;0;L; 30D5;;;;N;;;;; 32EC;CIRCLED KATAKANA HE;So;0;L; 30D8;;;;N;;;;; 32ED;CIRCLED KATAKANA HO;So;0;L; 30DB;;;;N;;;;; 32EE;CIRCLED KATAKANA MA;So;0;L; 30DE;;;;N;;;;; 32EF;CIRCLED KATAKANA MI;So;0;L; 30DF;;;;N;;;;; 32F0;CIRCLED KATAKANA MU;So;0;L; 30E0;;;;N;;;;; 32F1;CIRCLED KATAKANA ME;So;0;L; 30E1;;;;N;;;;; 32F2;CIRCLED KATAKANA MO;So;0;L; 30E2;;;;N;;;;; 32F3;CIRCLED KATAKANA YA;So;0;L; 30E4;;;;N;;;;; 32F4;CIRCLED KATAKANA YU;So;0;L; 30E6;;;;N;;;;; 32F5;CIRCLED KATAKANA YO;So;0;L; 30E8;;;;N;;;;; 32F6;CIRCLED KATAKANA RA;So;0;L; 30E9;;;;N;;;;; 32F7;CIRCLED KATAKANA RI;So;0;L; 30EA;;;;N;;;;; 32F8;CIRCLED KATAKANA RU;So;0;L; 30EB;;;;N;;;;; 32F9;CIRCLED KATAKANA RE;So;0;L; 30EC;;;;N;;;;; 32FA;CIRCLED KATAKANA RO;So;0;L; 30ED;;;;N;;;;; 32FB;CIRCLED KATAKANA WA;So;0;L; 30EF;;;;N;;;;; 32FC;CIRCLED KATAKANA WI;So;0;L; 30F0;;;;N;;;;; 32FD;CIRCLED KATAKANA WE;So;0;L; 30F1;;;;N;;;;; 32FE;CIRCLED KATAKANA WO;So;0;L; 30F2;;;;N;;;;; 3300;SQUARE APAATO;So;0;L; 30A2 30D1 30FC 30C8;;;;N;SQUARED APAATO;;;; 3301;SQUARE ARUHUA;So;0;L; 30A2 30EB 30D5 30A1;;;;N;SQUARED ARUHUA;;;; 3302;SQUARE ANPEA;So;0;L; 30A2 30F3 30DA 30A2;;;;N;SQUARED ANPEA;;;; 3303;SQUARE AARU;So;0;L; 30A2 30FC 30EB;;;;N;SQUARED AARU;;;; 3304;SQUARE ININGU;So;0;L; 30A4 30CB 30F3 30B0;;;;N;SQUARED ININGU;;;; 3305;SQUARE INTI;So;0;L; 30A4 30F3 30C1;;;;N;SQUARED INTI;;;; 3306;SQUARE UON;So;0;L; 30A6 30A9 30F3;;;;N;SQUARED UON;;;; 3307;SQUARE ESUKUUDO;So;0;L; 30A8 30B9 30AF 30FC 30C9;;;;N;SQUARED ESUKUUDO;;;; 3308;SQUARE EEKAA;So;0;L; 30A8 30FC 30AB 30FC;;;;N;SQUARED EEKAA;;;; 3309;SQUARE ONSU;So;0;L; 30AA 30F3 30B9;;;;N;SQUARED ONSU;;;; 330A;SQUARE OOMU;So;0;L; 30AA 30FC 30E0;;;;N;SQUARED OOMU;;;; 330B;SQUARE KAIRI;So;0;L; 30AB 30A4 30EA;;;;N;SQUARED KAIRI;;;; 330C;SQUARE KARATTO;So;0;L; 30AB 30E9 30C3 30C8;;;;N;SQUARED KARATTO;;;; 330D;SQUARE KARORII;So;0;L; 30AB 30ED 30EA 30FC;;;;N;SQUARED KARORII;;;; 330E;SQUARE GARON;So;0;L; 30AC 30ED 30F3;;;;N;SQUARED GARON;;;; 330F;SQUARE GANMA;So;0;L; 30AC 30F3 30DE;;;;N;SQUARED GANMA;;;; 3310;SQUARE GIGA;So;0;L; 30AE 30AC;;;;N;SQUARED GIGA;;;; 3311;SQUARE GINII;So;0;L; 30AE 30CB 30FC;;;;N;SQUARED GINII;;;; 3312;SQUARE KYURII;So;0;L; 30AD 30E5 30EA 30FC;;;;N;SQUARED KYURII;;;; 3313;SQUARE GIRUDAA;So;0;L; 30AE 30EB 30C0 30FC;;;;N;SQUARED GIRUDAA;;;; 3314;SQUARE KIRO;So;0;L; 30AD 30ED;;;;N;SQUARED KIRO;;;; 3315;SQUARE KIROGURAMU;So;0;L; 30AD 30ED 30B0 30E9 30E0;;;;N;SQUARED KIROGURAMU;;;; 3316;SQUARE KIROMEETORU;So;0;L; 30AD 30ED 30E1 30FC 30C8 30EB;;;;N;SQUARED KIROMEETORU;;;; 3317;SQUARE KIROWATTO;So;0;L; 30AD 30ED 30EF 30C3 30C8;;;;N;SQUARED KIROWATTO;;;; 3318;SQUARE GURAMU;So;0;L; 30B0 30E9 30E0;;;;N;SQUARED GURAMU;;;; 3319;SQUARE GURAMUTON;So;0;L; 30B0 30E9 30E0 30C8 30F3;;;;N;SQUARED GURAMUTON;;;; 331A;SQUARE KURUZEIRO;So;0;L; 30AF 30EB 30BC 30A4 30ED;;;;N;SQUARED KURUZEIRO;;;; 331B;SQUARE KUROONE;So;0;L; 30AF 30ED 30FC 30CD;;;;N;SQUARED KUROONE;;;; 331C;SQUARE KEESU;So;0;L; 30B1 30FC 30B9;;;;N;SQUARED KEESU;;;; 331D;SQUARE KORUNA;So;0;L; 30B3 30EB 30CA;;;;N;SQUARED KORUNA;;;; 331E;SQUARE KOOPO;So;0;L; 30B3 30FC 30DD;;;;N;SQUARED KOOPO;;;; 331F;SQUARE SAIKURU;So;0;L; 30B5 30A4 30AF 30EB;;;;N;SQUARED SAIKURU;;;; 3320;SQUARE SANTIIMU;So;0;L; 30B5 30F3 30C1 30FC 30E0;;;;N;SQUARED SANTIIMU;;;; 3321;SQUARE SIRINGU;So;0;L; 30B7 30EA 30F3 30B0;;;;N;SQUARED SIRINGU;;;; 3322;SQUARE SENTI;So;0;L; 30BB 30F3 30C1;;;;N;SQUARED SENTI;;;; 3323;SQUARE SENTO;So;0;L; 30BB 30F3 30C8;;;;N;SQUARED SENTO;;;; 3324;SQUARE DAASU;So;0;L; 30C0 30FC 30B9;;;;N;SQUARED DAASU;;;; 3325;SQUARE DESI;So;0;L; 30C7 30B7;;;;N;SQUARED DESI;;;; 3326;SQUARE DORU;So;0;L; 30C9 30EB;;;;N;SQUARED DORU;;;; 3327;SQUARE TON;So;0;L; 30C8 30F3;;;;N;SQUARED TON;;;; 3328;SQUARE NANO;So;0;L; 30CA 30CE;;;;N;SQUARED NANO;;;; 3329;SQUARE NOTTO;So;0;L; 30CE 30C3 30C8;;;;N;SQUARED NOTTO;;;; 332A;SQUARE HAITU;So;0;L; 30CF 30A4 30C4;;;;N;SQUARED HAITU;;;; 332B;SQUARE PAASENTO;So;0;L; 30D1 30FC 30BB 30F3 30C8;;;;N;SQUARED PAASENTO;;;; 332C;SQUARE PAATU;So;0;L; 30D1 30FC 30C4;;;;N;SQUARED PAATU;;;; 332D;SQUARE BAARERU;So;0;L; 30D0 30FC 30EC 30EB;;;;N;SQUARED BAARERU;;;; 332E;SQUARE PIASUTORU;So;0;L; 30D4 30A2 30B9 30C8 30EB;;;;N;SQUARED PIASUTORU;;;; 332F;SQUARE PIKURU;So;0;L; 30D4 30AF 30EB;;;;N;SQUARED PIKURU;;;; 3330;SQUARE PIKO;So;0;L; 30D4 30B3;;;;N;SQUARED PIKO;;;; 3331;SQUARE BIRU;So;0;L; 30D3 30EB;;;;N;SQUARED BIRU;;;; 3332;SQUARE HUARADDO;So;0;L; 30D5 30A1 30E9 30C3 30C9;;;;N;SQUARED HUARADDO;;;; 3333;SQUARE HUIITO;So;0;L; 30D5 30A3 30FC 30C8;;;;N;SQUARED HUIITO;;;; 3334;SQUARE BUSSYERU;So;0;L; 30D6 30C3 30B7 30A7 30EB;;;;N;SQUARED BUSSYERU;;;; 3335;SQUARE HURAN;So;0;L; 30D5 30E9 30F3;;;;N;SQUARED HURAN;;;; 3336;SQUARE HEKUTAARU;So;0;L; 30D8 30AF 30BF 30FC 30EB;;;;N;SQUARED HEKUTAARU;;;; 3337;SQUARE PESO;So;0;L; 30DA 30BD;;;;N;SQUARED PESO;;;; 3338;SQUARE PENIHI;So;0;L; 30DA 30CB 30D2;;;;N;SQUARED PENIHI;;;; 3339;SQUARE HERUTU;So;0;L; 30D8 30EB 30C4;;;;N;SQUARED HERUTU;;;; 333A;SQUARE PENSU;So;0;L; 30DA 30F3 30B9;;;;N;SQUARED PENSU;;;; 333B;SQUARE PEEZI;So;0;L; 30DA 30FC 30B8;;;;N;SQUARED PEEZI;;;; 333C;SQUARE BEETA;So;0;L; 30D9 30FC 30BF;;;;N;SQUARED BEETA;;;; 333D;SQUARE POINTO;So;0;L; 30DD 30A4 30F3 30C8;;;;N;SQUARED POINTO;;;; 333E;SQUARE BORUTO;So;0;L; 30DC 30EB 30C8;;;;N;SQUARED BORUTO;;;; 333F;SQUARE HON;So;0;L; 30DB 30F3;;;;N;SQUARED HON;;;; 3340;SQUARE PONDO;So;0;L; 30DD 30F3 30C9;;;;N;SQUARED PONDO;;;; 3341;SQUARE HOORU;So;0;L; 30DB 30FC 30EB;;;;N;SQUARED HOORU;;;; 3342;SQUARE HOON;So;0;L; 30DB 30FC 30F3;;;;N;SQUARED HOON;;;; 3343;SQUARE MAIKURO;So;0;L; 30DE 30A4 30AF 30ED;;;;N;SQUARED MAIKURO;;;; 3344;SQUARE MAIRU;So;0;L; 30DE 30A4 30EB;;;;N;SQUARED MAIRU;;;; 3345;SQUARE MAHHA;So;0;L; 30DE 30C3 30CF;;;;N;SQUARED MAHHA;;;; 3346;SQUARE MARUKU;So;0;L; 30DE 30EB 30AF;;;;N;SQUARED MARUKU;;;; 3347;SQUARE MANSYON;So;0;L; 30DE 30F3 30B7 30E7 30F3;;;;N;SQUARED MANSYON;;;; 3348;SQUARE MIKURON;So;0;L; 30DF 30AF 30ED 30F3;;;;N;SQUARED MIKURON;;;; 3349;SQUARE MIRI;So;0;L; 30DF 30EA;;;;N;SQUARED MIRI;;;; 334A;SQUARE MIRIBAARU;So;0;L; 30DF 30EA 30D0 30FC 30EB;;;;N;SQUARED MIRIBAARU;;;; 334B;SQUARE MEGA;So;0;L; 30E1 30AC;;;;N;SQUARED MEGA;;;; 334C;SQUARE MEGATON;So;0;L; 30E1 30AC 30C8 30F3;;;;N;SQUARED MEGATON;;;; 334D;SQUARE MEETORU;So;0;L; 30E1 30FC 30C8 30EB;;;;N;SQUARED MEETORU;;;; 334E;SQUARE YAADO;So;0;L; 30E4 30FC 30C9;;;;N;SQUARED YAADO;;;; 334F;SQUARE YAARU;So;0;L; 30E4 30FC 30EB;;;;N;SQUARED YAARU;;;; 3350;SQUARE YUAN;So;0;L; 30E6 30A2 30F3;;;;N;SQUARED YUAN;;;; 3351;SQUARE RITTORU;So;0;L; 30EA 30C3 30C8 30EB;;;;N;SQUARED RITTORU;;;; 3352;SQUARE RIRA;So;0;L; 30EA 30E9;;;;N;SQUARED RIRA;;;; 3353;SQUARE RUPII;So;0;L; 30EB 30D4 30FC;;;;N;SQUARED RUPII;;;; 3354;SQUARE RUUBURU;So;0;L; 30EB 30FC 30D6 30EB;;;;N;SQUARED RUUBURU;;;; 3355;SQUARE REMU;So;0;L; 30EC 30E0;;;;N;SQUARED REMU;;;; 3356;SQUARE RENTOGEN;So;0;L; 30EC 30F3 30C8 30B2 30F3;;;;N;SQUARED RENTOGEN;;;; 3357;SQUARE WATTO;So;0;L; 30EF 30C3 30C8;;;;N;SQUARED WATTO;;;; 3358;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ZERO;So;0;L; 0030 70B9;;;;N;;;;; 3359;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ONE;So;0;L; 0031 70B9;;;;N;;;;; 335A;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWO;So;0;L; 0032 70B9;;;;N;;;;; 335B;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THREE;So;0;L; 0033 70B9;;;;N;;;;; 335C;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOUR;So;0;L; 0034 70B9;;;;N;;;;; 335D;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIVE;So;0;L; 0035 70B9;;;;N;;;;; 335E;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIX;So;0;L; 0036 70B9;;;;N;;;;; 335F;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVEN;So;0;L; 0037 70B9;;;;N;;;;; 3360;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHT;So;0;L; 0038 70B9;;;;N;;;;; 3361;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINE;So;0;L; 0039 70B9;;;;N;;;;; 3362;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TEN;So;0;L; 0031 0030 70B9;;;;N;;;;; 3363;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ELEVEN;So;0;L; 0031 0031 70B9;;;;N;;;;; 3364;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWELVE;So;0;L; 0031 0032 70B9;;;;N;;;;; 3365;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THIRTEEN;So;0;L; 0031 0033 70B9;;;;N;;;;; 3366;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOURTEEN;So;0;L; 0031 0034 70B9;;;;N;;;;; 3367;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIFTEEN;So;0;L; 0031 0035 70B9;;;;N;;;;; 3368;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIXTEEN;So;0;L; 0031 0036 70B9;;;;N;;;;; 3369;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVENTEEN;So;0;L; 0031 0037 70B9;;;;N;;;;; 336A;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHTEEN;So;0;L; 0031 0038 70B9;;;;N;;;;; 336B;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINETEEN;So;0;L; 0031 0039 70B9;;;;N;;;;; 336C;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY;So;0;L; 0032 0030 70B9;;;;N;;;;; 336D;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-ONE;So;0;L; 0032 0031 70B9;;;;N;;;;; 336E;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-TWO;So;0;L; 0032 0032 70B9;;;;N;;;;; 336F;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-THREE;So;0;L; 0032 0033 70B9;;;;N;;;;; 3370;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-FOUR;So;0;L; 0032 0034 70B9;;;;N;;;;; 3371;SQUARE HPA;So;0;L; 0068 0050 0061;;;;N;;;;; 3372;SQUARE DA;So;0;L; 0064 0061;;;;N;;;;; 3373;SQUARE AU;So;0;L; 0041 0055;;;;N;;;;; 3374;SQUARE BAR;So;0;L; 0062 0061 0072;;;;N;;;;; 3375;SQUARE OV;So;0;L; 006F 0056;;;;N;;;;; 3376;SQUARE PC;So;0;L; 0070 0063;;;;N;;;;; 337B;SQUARE ERA NAME HEISEI;So;0;L; 5E73 6210;;;;N;SQUARED TWO IDEOGRAPHS ERA NAME HEISEI;;;; 337C;SQUARE ERA NAME SYOUWA;So;0;L; 662D 548C;;;;N;SQUARED TWO IDEOGRAPHS ERA NAME SYOUWA;;;; 337D;SQUARE ERA NAME TAISYOU;So;0;L; 5927 6B63;;;;N;SQUARED TWO IDEOGRAPHS ERA NAME TAISYOU;;;; 337E;SQUARE ERA NAME MEIZI;So;0;L; 660E 6CBB;;;;N;SQUARED TWO IDEOGRAPHS ERA NAME MEIZI;;;; 337F;SQUARE CORPORATION;So;0;L; 682A 5F0F 4F1A 793E;;;;N;SQUARED FOUR IDEOGRAPHS CORPORATION;;;; 3380;SQUARE PA AMPS;So;0;L; 0070 0041;;;;N;SQUARED PA AMPS;;;; 3381;SQUARE NA;So;0;L; 006E 0041;;;;N;SQUARED NA;;;; 3382;SQUARE MU A;So;0;L; 03BC 0041;;;;N;SQUARED MU A;;;; 3383;SQUARE MA;So;0;L; 006D 0041;;;;N;SQUARED MA;;;; 3384;SQUARE KA;So;0;L; 006B 0041;;;;N;SQUARED KA;;;; 3385;SQUARE KB;So;0;L; 004B 0042;;;;N;SQUARED KB;;;; 3386;SQUARE MB;So;0;L; 004D 0042;;;;N;SQUARED MB;;;; 3387;SQUARE GB;So;0;L; 0047 0042;;;;N;SQUARED GB;;;; 3388;SQUARE CAL;So;0;L; 0063 0061 006C;;;;N;SQUARED CAL;;;; 3389;SQUARE KCAL;So;0;L; 006B 0063 0061 006C;;;;N;SQUARED KCAL;;;; 338A;SQUARE PF;So;0;L; 0070 0046;;;;N;SQUARED PF;;;; 338B;SQUARE NF;So;0;L; 006E 0046;;;;N;SQUARED NF;;;; 338C;SQUARE MU F;So;0;L; 03BC 0046;;;;N;SQUARED MU F;;;; 338D;SQUARE MU G;So;0;L; 03BC 0067;;;;N;SQUARED MU G;;;; 338E;SQUARE MG;So;0;L; 006D 0067;;;;N;SQUARED MG;;;; 338F;SQUARE KG;So;0;L; 006B 0067;;;;N;SQUARED KG;;;; 3390;SQUARE HZ;So;0;L; 0048 007A;;;;N;SQUARED HZ;;;; 3391;SQUARE KHZ;So;0;L; 006B 0048 007A;;;;N;SQUARED KHZ;;;; 3392;SQUARE MHZ;So;0;L; 004D 0048 007A;;;;N;SQUARED MHZ;;;; 3393;SQUARE GHZ;So;0;L; 0047 0048 007A;;;;N;SQUARED GHZ;;;; 3394;SQUARE THZ;So;0;L; 0054 0048 007A;;;;N;SQUARED THZ;;;; 3395;SQUARE MU L;So;0;L; 03BC 2113;;;;N;SQUARED MU L;;;; 3396;SQUARE ML;So;0;L; 006D 2113;;;;N;SQUARED ML;;;; 3397;SQUARE DL;So;0;L; 0064 2113;;;;N;SQUARED DL;;;; 3398;SQUARE KL;So;0;L; 006B 2113;;;;N;SQUARED KL;;;; 3399;SQUARE FM;So;0;L; 0066 006D;;;;N;SQUARED FM;;;; 339A;SQUARE NM;So;0;L; 006E 006D;;;;N;SQUARED NM;;;; 339B;SQUARE MU M;So;0;L; 03BC 006D;;;;N;SQUARED MU M;;;; 339C;SQUARE MM;So;0;L; 006D 006D;;;;N;SQUARED MM;;;; 339D;SQUARE CM;So;0;L; 0063 006D;;;;N;SQUARED CM;;;; 339E;SQUARE KM;So;0;L; 006B 006D;;;;N;SQUARED KM;;;; 339F;SQUARE MM SQUARED;So;0;L; 006D 006D 00B2;;;;N;SQUARED MM SQUARED;;;; 33A0;SQUARE CM SQUARED;So;0;L; 0063 006D 00B2;;;;N;SQUARED CM SQUARED;;;; 33A1;SQUARE M SQUARED;So;0;L; 006D 00B2;;;;N;SQUARED M SQUARED;;;; 33A2;SQUARE KM SQUARED;So;0;L; 006B 006D 00B2;;;;N;SQUARED KM SQUARED;;;; 33A3;SQUARE MM CUBED;So;0;L; 006D 006D 00B3;;;;N;SQUARED MM CUBED;;;; 33A4;SQUARE CM CUBED;So;0;L; 0063 006D 00B3;;;;N;SQUARED CM CUBED;;;; 33A5;SQUARE M CUBED;So;0;L; 006D 00B3;;;;N;SQUARED M CUBED;;;; 33A6;SQUARE KM CUBED;So;0;L; 006B 006D 00B3;;;;N;SQUARED KM CUBED;;;; 33A7;SQUARE M OVER S;So;0;L; 006D 2215 0073;;;;N;SQUARED M OVER S;;;; 33A8;SQUARE M OVER S SQUARED;So;0;L; 006D 2215 0073 00B2;;;;N;SQUARED M OVER S SQUARED;;;; 33A9;SQUARE PA;So;0;L; 0050 0061;;;;N;SQUARED PA;;;; 33AA;SQUARE KPA;So;0;L; 006B 0050 0061;;;;N;SQUARED KPA;;;; 33AB;SQUARE MPA;So;0;L; 004D 0050 0061;;;;N;SQUARED MPA;;;; 33AC;SQUARE GPA;So;0;L; 0047 0050 0061;;;;N;SQUARED GPA;;;; 33AD;SQUARE RAD;So;0;L; 0072 0061 0064;;;;N;SQUARED RAD;;;; 33AE;SQUARE RAD OVER S;So;0;L; 0072 0061 0064 2215 0073;;;;N;SQUARED RAD OVER S;;;; 33AF;SQUARE RAD OVER S SQUARED;So;0;L; 0072 0061 0064 2215 0073 00B2;;;;N;SQUARED RAD OVER S SQUARED;;;; 33B0;SQUARE PS;So;0;L; 0070 0073;;;;N;SQUARED PS;;;; 33B1;SQUARE NS;So;0;L; 006E 0073;;;;N;SQUARED NS;;;; 33B2;SQUARE MU S;So;0;L; 03BC 0073;;;;N;SQUARED MU S;;;; 33B3;SQUARE MS;So;0;L; 006D 0073;;;;N;SQUARED MS;;;; 33B4;SQUARE PV;So;0;L; 0070 0056;;;;N;SQUARED PV;;;; 33B5;SQUARE NV;So;0;L; 006E 0056;;;;N;SQUARED NV;;;; 33B6;SQUARE MU V;So;0;L; 03BC 0056;;;;N;SQUARED MU V;;;; 33B7;SQUARE MV;So;0;L; 006D 0056;;;;N;SQUARED MV;;;; 33B8;SQUARE KV;So;0;L; 006B 0056;;;;N;SQUARED KV;;;; 33B9;SQUARE MV MEGA;So;0;L; 004D 0056;;;;N;SQUARED MV MEGA;;;; 33BA;SQUARE PW;So;0;L; 0070 0057;;;;N;SQUARED PW;;;; 33BB;SQUARE NW;So;0;L; 006E 0057;;;;N;SQUARED NW;;;; 33BC;SQUARE MU W;So;0;L; 03BC 0057;;;;N;SQUARED MU W;;;; 33BD;SQUARE MW;So;0;L; 006D 0057;;;;N;SQUARED MW;;;; 33BE;SQUARE KW;So;0;L; 006B 0057;;;;N;SQUARED KW;;;; 33BF;SQUARE MW MEGA;So;0;L; 004D 0057;;;;N;SQUARED MW MEGA;;;; 33C0;SQUARE K OHM;So;0;L; 006B 03A9;;;;N;SQUARED K OHM;;;; 33C1;SQUARE M OHM;So;0;L; 004D 03A9;;;;N;SQUARED M OHM;;;; 33C2;SQUARE AM;So;0;L; 0061 002E 006D 002E;;;;N;SQUARED AM;;;; 33C3;SQUARE BQ;So;0;L; 0042 0071;;;;N;SQUARED BQ;;;; 33C4;SQUARE CC;So;0;L; 0063 0063;;;;N;SQUARED CC;;;; 33C5;SQUARE CD;So;0;L; 0063 0064;;;;N;SQUARED CD;;;; 33C6;SQUARE C OVER KG;So;0;L; 0043 2215 006B 0067;;;;N;SQUARED C OVER KG;;;; 33C7;SQUARE CO;So;0;L; 0043 006F 002E;;;;N;SQUARED CO;;;; 33C8;SQUARE DB;So;0;L; 0064 0042;;;;N;SQUARED DB;;;; 33C9;SQUARE GY;So;0;L; 0047 0079;;;;N;SQUARED GY;;;; 33CA;SQUARE HA;So;0;L; 0068 0061;;;;N;SQUARED HA;;;; 33CB;SQUARE HP;So;0;L; 0048 0050;;;;N;SQUARED HP;;;; 33CC;SQUARE IN;So;0;L; 0069 006E;;;;N;SQUARED IN;;;; 33CD;SQUARE KK;So;0;L; 004B 004B;;;;N;SQUARED KK;;;; 33CE;SQUARE KM CAPITAL;So;0;L; 004B 004D;;;;N;SQUARED KM CAPITAL;;;; 33CF;SQUARE KT;So;0;L; 006B 0074;;;;N;SQUARED KT;;;; 33D0;SQUARE LM;So;0;L; 006C 006D;;;;N;SQUARED LM;;;; 33D1;SQUARE LN;So;0;L; 006C 006E;;;;N;SQUARED LN;;;; 33D2;SQUARE LOG;So;0;L; 006C 006F 0067;;;;N;SQUARED LOG;;;; 33D3;SQUARE LX;So;0;L; 006C 0078;;;;N;SQUARED LX;;;; 33D4;SQUARE MB SMALL;So;0;L; 006D 0062;;;;N;SQUARED MB SMALL;;;; 33D5;SQUARE MIL;So;0;L; 006D 0069 006C;;;;N;SQUARED MIL;;;; 33D6;SQUARE MOL;So;0;L; 006D 006F 006C;;;;N;SQUARED MOL;;;; 33D7;SQUARE PH;So;0;L; 0050 0048;;;;N;SQUARED PH;;;; 33D8;SQUARE PM;So;0;L; 0070 002E 006D 002E;;;;N;SQUARED PM;;;; 33D9;SQUARE PPM;So;0;L; 0050 0050 004D;;;;N;SQUARED PPM;;;; 33DA;SQUARE PR;So;0;L; 0050 0052;;;;N;SQUARED PR;;;; 33DB;SQUARE SR;So;0;L; 0073 0072;;;;N;SQUARED SR;;;; 33DC;SQUARE SV;So;0;L; 0053 0076;;;;N;SQUARED SV;;;; 33DD;SQUARE WB;So;0;L; 0057 0062;;;;N;SQUARED WB;;;; 33E0;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ONE;So;0;L; 0031 65E5;;;;N;;;;; 33E1;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWO;So;0;L; 0032 65E5;;;;N;;;;; 33E2;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THREE;So;0;L; 0033 65E5;;;;N;;;;; 33E3;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOUR;So;0;L; 0034 65E5;;;;N;;;;; 33E4;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIVE;So;0;L; 0035 65E5;;;;N;;;;; 33E5;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIX;So;0;L; 0036 65E5;;;;N;;;;; 33E6;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVEN;So;0;L; 0037 65E5;;;;N;;;;; 33E7;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHT;So;0;L; 0038 65E5;;;;N;;;;; 33E8;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINE;So;0;L; 0039 65E5;;;;N;;;;; 33E9;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TEN;So;0;L; 0031 0030 65E5;;;;N;;;;; 33EA;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ELEVEN;So;0;L; 0031 0031 65E5;;;;N;;;;; 33EB;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWELVE;So;0;L; 0031 0032 65E5;;;;N;;;;; 33EC;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTEEN;So;0;L; 0031 0033 65E5;;;;N;;;;; 33ED;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOURTEEN;So;0;L; 0031 0034 65E5;;;;N;;;;; 33EE;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIFTEEN;So;0;L; 0031 0035 65E5;;;;N;;;;; 33EF;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIXTEEN;So;0;L; 0031 0036 65E5;;;;N;;;;; 33F0;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVENTEEN;So;0;L; 0031 0037 65E5;;;;N;;;;; 33F1;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHTEEN;So;0;L; 0031 0038 65E5;;;;N;;;;; 33F2;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINETEEN;So;0;L; 0031 0039 65E5;;;;N;;;;; 33F3;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY;So;0;L; 0032 0030 65E5;;;;N;;;;; 33F4;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-ONE;So;0;L; 0032 0031 65E5;;;;N;;;;; 33F5;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-TWO;So;0;L; 0032 0032 65E5;;;;N;;;;; 33F6;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-THREE;So;0;L; 0032 0033 65E5;;;;N;;;;; 33F7;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FOUR;So;0;L; 0032 0034 65E5;;;;N;;;;; 33F8;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FIVE;So;0;L; 0032 0035 65E5;;;;N;;;;; 33F9;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SIX;So;0;L; 0032 0036 65E5;;;;N;;;;; 33FA;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SEVEN;So;0;L; 0032 0037 65E5;;;;N;;;;; 33FB;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-EIGHT;So;0;L; 0032 0038 65E5;;;;N;;;;; 33FC;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-NINE;So;0;L; 0032 0039 65E5;;;;N;;;;; 33FD;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY;So;0;L; 0033 0030 65E5;;;;N;;;;; 33FE;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY-ONE;So;0;L; 0033 0031 65E5;;;;N;;;;; 3400;;Lo;0;L;;;;;N;;;;; 4DB5;;Lo;0;L;;;;;N;;;;; 4E00;;Lo;0;L;;;;;N;;;;; 9FA5;;Lo;0;L;;;;;N;;;;; A000;YI SYLLABLE IT;Lo;0;L;;;;;N;;;;; A001;YI SYLLABLE IX;Lo;0;L;;;;;N;;;;; A002;YI SYLLABLE I;Lo;0;L;;;;;N;;;;; A003;YI SYLLABLE IP;Lo;0;L;;;;;N;;;;; A004;YI SYLLABLE IET;Lo;0;L;;;;;N;;;;; A005;YI SYLLABLE IEX;Lo;0;L;;;;;N;;;;; A006;YI SYLLABLE IE;Lo;0;L;;;;;N;;;;; A007;YI SYLLABLE IEP;Lo;0;L;;;;;N;;;;; A008;YI SYLLABLE AT;Lo;0;L;;;;;N;;;;; A009;YI SYLLABLE AX;Lo;0;L;;;;;N;;;;; A00A;YI SYLLABLE A;Lo;0;L;;;;;N;;;;; A00B;YI SYLLABLE AP;Lo;0;L;;;;;N;;;;; A00C;YI SYLLABLE UOX;Lo;0;L;;;;;N;;;;; A00D;YI SYLLABLE UO;Lo;0;L;;;;;N;;;;; A00E;YI SYLLABLE UOP;Lo;0;L;;;;;N;;;;; A00F;YI SYLLABLE OT;Lo;0;L;;;;;N;;;;; A010;YI SYLLABLE OX;Lo;0;L;;;;;N;;;;; A011;YI SYLLABLE O;Lo;0;L;;;;;N;;;;; A012;YI SYLLABLE OP;Lo;0;L;;;;;N;;;;; A013;YI SYLLABLE EX;Lo;0;L;;;;;N;;;;; A014;YI SYLLABLE E;Lo;0;L;;;;;N;;;;; A015;YI SYLLABLE WU;Lo;0;L;;;;;N;;;;; A016;YI SYLLABLE BIT;Lo;0;L;;;;;N;;;;; A017;YI SYLLABLE BIX;Lo;0;L;;;;;N;;;;; A018;YI SYLLABLE BI;Lo;0;L;;;;;N;;;;; A019;YI SYLLABLE BIP;Lo;0;L;;;;;N;;;;; A01A;YI SYLLABLE BIET;Lo;0;L;;;;;N;;;;; A01B;YI SYLLABLE BIEX;Lo;0;L;;;;;N;;;;; A01C;YI SYLLABLE BIE;Lo;0;L;;;;;N;;;;; A01D;YI SYLLABLE BIEP;Lo;0;L;;;;;N;;;;; A01E;YI SYLLABLE BAT;Lo;0;L;;;;;N;;;;; A01F;YI SYLLABLE BAX;Lo;0;L;;;;;N;;;;; A020;YI SYLLABLE BA;Lo;0;L;;;;;N;;;;; A021;YI SYLLABLE BAP;Lo;0;L;;;;;N;;;;; A022;YI SYLLABLE BUOX;Lo;0;L;;;;;N;;;;; A023;YI SYLLABLE BUO;Lo;0;L;;;;;N;;;;; A024;YI SYLLABLE BUOP;Lo;0;L;;;;;N;;;;; A025;YI SYLLABLE BOT;Lo;0;L;;;;;N;;;;; A026;YI SYLLABLE BOX;Lo;0;L;;;;;N;;;;; A027;YI SYLLABLE BO;Lo;0;L;;;;;N;;;;; A028;YI SYLLABLE BOP;Lo;0;L;;;;;N;;;;; A029;YI SYLLABLE BEX;Lo;0;L;;;;;N;;;;; A02A;YI SYLLABLE BE;Lo;0;L;;;;;N;;;;; A02B;YI SYLLABLE BEP;Lo;0;L;;;;;N;;;;; A02C;YI SYLLABLE BUT;Lo;0;L;;;;;N;;;;; A02D;YI SYLLABLE BUX;Lo;0;L;;;;;N;;;;; A02E;YI SYLLABLE BU;Lo;0;L;;;;;N;;;;; A02F;YI SYLLABLE BUP;Lo;0;L;;;;;N;;;;; A030;YI SYLLABLE BURX;Lo;0;L;;;;;N;;;;; A031;YI SYLLABLE BUR;Lo;0;L;;;;;N;;;;; A032;YI SYLLABLE BYT;Lo;0;L;;;;;N;;;;; A033;YI SYLLABLE BYX;Lo;0;L;;;;;N;;;;; A034;YI SYLLABLE BY;Lo;0;L;;;;;N;;;;; A035;YI SYLLABLE BYP;Lo;0;L;;;;;N;;;;; A036;YI SYLLABLE BYRX;Lo;0;L;;;;;N;;;;; A037;YI SYLLABLE BYR;Lo;0;L;;;;;N;;;;; A038;YI SYLLABLE PIT;Lo;0;L;;;;;N;;;;; A039;YI SYLLABLE PIX;Lo;0;L;;;;;N;;;;; A03A;YI SYLLABLE PI;Lo;0;L;;;;;N;;;;; A03B;YI SYLLABLE PIP;Lo;0;L;;;;;N;;;;; A03C;YI SYLLABLE PIEX;Lo;0;L;;;;;N;;;;; A03D;YI SYLLABLE PIE;Lo;0;L;;;;;N;;;;; A03E;YI SYLLABLE PIEP;Lo;0;L;;;;;N;;;;; A03F;YI SYLLABLE PAT;Lo;0;L;;;;;N;;;;; A040;YI SYLLABLE PAX;Lo;0;L;;;;;N;;;;; A041;YI SYLLABLE PA;Lo;0;L;;;;;N;;;;; A042;YI SYLLABLE PAP;Lo;0;L;;;;;N;;;;; A043;YI SYLLABLE PUOX;Lo;0;L;;;;;N;;;;; A044;YI SYLLABLE PUO;Lo;0;L;;;;;N;;;;; A045;YI SYLLABLE PUOP;Lo;0;L;;;;;N;;;;; A046;YI SYLLABLE POT;Lo;0;L;;;;;N;;;;; A047;YI SYLLABLE POX;Lo;0;L;;;;;N;;;;; A048;YI SYLLABLE PO;Lo;0;L;;;;;N;;;;; A049;YI SYLLABLE POP;Lo;0;L;;;;;N;;;;; A04A;YI SYLLABLE PUT;Lo;0;L;;;;;N;;;;; A04B;YI SYLLABLE PUX;Lo;0;L;;;;;N;;;;; A04C;YI SYLLABLE PU;Lo;0;L;;;;;N;;;;; A04D;YI SYLLABLE PUP;Lo;0;L;;;;;N;;;;; A04E;YI SYLLABLE PURX;Lo;0;L;;;;;N;;;;; A04F;YI SYLLABLE PUR;Lo;0;L;;;;;N;;;;; A050;YI SYLLABLE PYT;Lo;0;L;;;;;N;;;;; A051;YI SYLLABLE PYX;Lo;0;L;;;;;N;;;;; A052;YI SYLLABLE PY;Lo;0;L;;;;;N;;;;; A053;YI SYLLABLE PYP;Lo;0;L;;;;;N;;;;; A054;YI SYLLABLE PYRX;Lo;0;L;;;;;N;;;;; A055;YI SYLLABLE PYR;Lo;0;L;;;;;N;;;;; A056;YI SYLLABLE BBIT;Lo;0;L;;;;;N;;;;; A057;YI SYLLABLE BBIX;Lo;0;L;;;;;N;;;;; A058;YI SYLLABLE BBI;Lo;0;L;;;;;N;;;;; A059;YI SYLLABLE BBIP;Lo;0;L;;;;;N;;;;; A05A;YI SYLLABLE BBIET;Lo;0;L;;;;;N;;;;; A05B;YI SYLLABLE BBIEX;Lo;0;L;;;;;N;;;;; A05C;YI SYLLABLE BBIE;Lo;0;L;;;;;N;;;;; A05D;YI SYLLABLE BBIEP;Lo;0;L;;;;;N;;;;; A05E;YI SYLLABLE BBAT;Lo;0;L;;;;;N;;;;; A05F;YI SYLLABLE BBAX;Lo;0;L;;;;;N;;;;; A060;YI SYLLABLE BBA;Lo;0;L;;;;;N;;;;; A061;YI SYLLABLE BBAP;Lo;0;L;;;;;N;;;;; A062;YI SYLLABLE BBUOX;Lo;0;L;;;;;N;;;;; A063;YI SYLLABLE BBUO;Lo;0;L;;;;;N;;;;; A064;YI SYLLABLE BBUOP;Lo;0;L;;;;;N;;;;; A065;YI SYLLABLE BBOT;Lo;0;L;;;;;N;;;;; A066;YI SYLLABLE BBOX;Lo;0;L;;;;;N;;;;; A067;YI SYLLABLE BBO;Lo;0;L;;;;;N;;;;; A068;YI SYLLABLE BBOP;Lo;0;L;;;;;N;;;;; A069;YI SYLLABLE BBEX;Lo;0;L;;;;;N;;;;; A06A;YI SYLLABLE BBE;Lo;0;L;;;;;N;;;;; A06B;YI SYLLABLE BBEP;Lo;0;L;;;;;N;;;;; A06C;YI SYLLABLE BBUT;Lo;0;L;;;;;N;;;;; A06D;YI SYLLABLE BBUX;Lo;0;L;;;;;N;;;;; A06E;YI SYLLABLE BBU;Lo;0;L;;;;;N;;;;; A06F;YI SYLLABLE BBUP;Lo;0;L;;;;;N;;;;; A070;YI SYLLABLE BBURX;Lo;0;L;;;;;N;;;;; A071;YI SYLLABLE BBUR;Lo;0;L;;;;;N;;;;; A072;YI SYLLABLE BBYT;Lo;0;L;;;;;N;;;;; A073;YI SYLLABLE BBYX;Lo;0;L;;;;;N;;;;; A074;YI SYLLABLE BBY;Lo;0;L;;;;;N;;;;; A075;YI SYLLABLE BBYP;Lo;0;L;;;;;N;;;;; A076;YI SYLLABLE NBIT;Lo;0;L;;;;;N;;;;; A077;YI SYLLABLE NBIX;Lo;0;L;;;;;N;;;;; A078;YI SYLLABLE NBI;Lo;0;L;;;;;N;;;;; A079;YI SYLLABLE NBIP;Lo;0;L;;;;;N;;;;; A07A;YI SYLLABLE NBIEX;Lo;0;L;;;;;N;;;;; A07B;YI SYLLABLE NBIE;Lo;0;L;;;;;N;;;;; A07C;YI SYLLABLE NBIEP;Lo;0;L;;;;;N;;;;; A07D;YI SYLLABLE NBAT;Lo;0;L;;;;;N;;;;; A07E;YI SYLLABLE NBAX;Lo;0;L;;;;;N;;;;; A07F;YI SYLLABLE NBA;Lo;0;L;;;;;N;;;;; A080;YI SYLLABLE NBAP;Lo;0;L;;;;;N;;;;; A081;YI SYLLABLE NBOT;Lo;0;L;;;;;N;;;;; A082;YI SYLLABLE NBOX;Lo;0;L;;;;;N;;;;; A083;YI SYLLABLE NBO;Lo;0;L;;;;;N;;;;; A084;YI SYLLABLE NBOP;Lo;0;L;;;;;N;;;;; A085;YI SYLLABLE NBUT;Lo;0;L;;;;;N;;;;; A086;YI SYLLABLE NBUX;Lo;0;L;;;;;N;;;;; A087;YI SYLLABLE NBU;Lo;0;L;;;;;N;;;;; A088;YI SYLLABLE NBUP;Lo;0;L;;;;;N;;;;; A089;YI SYLLABLE NBURX;Lo;0;L;;;;;N;;;;; A08A;YI SYLLABLE NBUR;Lo;0;L;;;;;N;;;;; A08B;YI SYLLABLE NBYT;Lo;0;L;;;;;N;;;;; A08C;YI SYLLABLE NBYX;Lo;0;L;;;;;N;;;;; A08D;YI SYLLABLE NBY;Lo;0;L;;;;;N;;;;; A08E;YI SYLLABLE NBYP;Lo;0;L;;;;;N;;;;; A08F;YI SYLLABLE NBYRX;Lo;0;L;;;;;N;;;;; A090;YI SYLLABLE NBYR;Lo;0;L;;;;;N;;;;; A091;YI SYLLABLE HMIT;Lo;0;L;;;;;N;;;;; A092;YI SYLLABLE HMIX;Lo;0;L;;;;;N;;;;; A093;YI SYLLABLE HMI;Lo;0;L;;;;;N;;;;; A094;YI SYLLABLE HMIP;Lo;0;L;;;;;N;;;;; A095;YI SYLLABLE HMIEX;Lo;0;L;;;;;N;;;;; A096;YI SYLLABLE HMIE;Lo;0;L;;;;;N;;;;; A097;YI SYLLABLE HMIEP;Lo;0;L;;;;;N;;;;; A098;YI SYLLABLE HMAT;Lo;0;L;;;;;N;;;;; A099;YI SYLLABLE HMAX;Lo;0;L;;;;;N;;;;; A09A;YI SYLLABLE HMA;Lo;0;L;;;;;N;;;;; A09B;YI SYLLABLE HMAP;Lo;0;L;;;;;N;;;;; A09C;YI SYLLABLE HMUOX;Lo;0;L;;;;;N;;;;; A09D;YI SYLLABLE HMUO;Lo;0;L;;;;;N;;;;; A09E;YI SYLLABLE HMUOP;Lo;0;L;;;;;N;;;;; A09F;YI SYLLABLE HMOT;Lo;0;L;;;;;N;;;;; A0A0;YI SYLLABLE HMOX;Lo;0;L;;;;;N;;;;; A0A1;YI SYLLABLE HMO;Lo;0;L;;;;;N;;;;; A0A2;YI SYLLABLE HMOP;Lo;0;L;;;;;N;;;;; A0A3;YI SYLLABLE HMUT;Lo;0;L;;;;;N;;;;; A0A4;YI SYLLABLE HMUX;Lo;0;L;;;;;N;;;;; A0A5;YI SYLLABLE HMU;Lo;0;L;;;;;N;;;;; A0A6;YI SYLLABLE HMUP;Lo;0;L;;;;;N;;;;; A0A7;YI SYLLABLE HMURX;Lo;0;L;;;;;N;;;;; A0A8;YI SYLLABLE HMUR;Lo;0;L;;;;;N;;;;; A0A9;YI SYLLABLE HMYX;Lo;0;L;;;;;N;;;;; A0AA;YI SYLLABLE HMY;Lo;0;L;;;;;N;;;;; A0AB;YI SYLLABLE HMYP;Lo;0;L;;;;;N;;;;; A0AC;YI SYLLABLE HMYRX;Lo;0;L;;;;;N;;;;; A0AD;YI SYLLABLE HMYR;Lo;0;L;;;;;N;;;;; A0AE;YI SYLLABLE MIT;Lo;0;L;;;;;N;;;;; A0AF;YI SYLLABLE MIX;Lo;0;L;;;;;N;;;;; A0B0;YI SYLLABLE MI;Lo;0;L;;;;;N;;;;; A0B1;YI SYLLABLE MIP;Lo;0;L;;;;;N;;;;; A0B2;YI SYLLABLE MIEX;Lo;0;L;;;;;N;;;;; A0B3;YI SYLLABLE MIE;Lo;0;L;;;;;N;;;;; A0B4;YI SYLLABLE MIEP;Lo;0;L;;;;;N;;;;; A0B5;YI SYLLABLE MAT;Lo;0;L;;;;;N;;;;; A0B6;YI SYLLABLE MAX;Lo;0;L;;;;;N;;;;; A0B7;YI SYLLABLE MA;Lo;0;L;;;;;N;;;;; A0B8;YI SYLLABLE MAP;Lo;0;L;;;;;N;;;;; A0B9;YI SYLLABLE MUOT;Lo;0;L;;;;;N;;;;; A0BA;YI SYLLABLE MUOX;Lo;0;L;;;;;N;;;;; A0BB;YI SYLLABLE MUO;Lo;0;L;;;;;N;;;;; A0BC;YI SYLLABLE MUOP;Lo;0;L;;;;;N;;;;; A0BD;YI SYLLABLE MOT;Lo;0;L;;;;;N;;;;; A0BE;YI SYLLABLE MOX;Lo;0;L;;;;;N;;;;; A0BF;YI SYLLABLE MO;Lo;0;L;;;;;N;;;;; A0C0;YI SYLLABLE MOP;Lo;0;L;;;;;N;;;;; A0C1;YI SYLLABLE MEX;Lo;0;L;;;;;N;;;;; A0C2;YI SYLLABLE ME;Lo;0;L;;;;;N;;;;; A0C3;YI SYLLABLE MUT;Lo;0;L;;;;;N;;;;; A0C4;YI SYLLABLE MUX;Lo;0;L;;;;;N;;;;; A0C5;YI SYLLABLE MU;Lo;0;L;;;;;N;;;;; A0C6;YI SYLLABLE MUP;Lo;0;L;;;;;N;;;;; A0C7;YI SYLLABLE MURX;Lo;0;L;;;;;N;;;;; A0C8;YI SYLLABLE MUR;Lo;0;L;;;;;N;;;;; A0C9;YI SYLLABLE MYT;Lo;0;L;;;;;N;;;;; A0CA;YI SYLLABLE MYX;Lo;0;L;;;;;N;;;;; A0CB;YI SYLLABLE MY;Lo;0;L;;;;;N;;;;; A0CC;YI SYLLABLE MYP;Lo;0;L;;;;;N;;;;; A0CD;YI SYLLABLE FIT;Lo;0;L;;;;;N;;;;; A0CE;YI SYLLABLE FIX;Lo;0;L;;;;;N;;;;; A0CF;YI SYLLABLE FI;Lo;0;L;;;;;N;;;;; A0D0;YI SYLLABLE FIP;Lo;0;L;;;;;N;;;;; A0D1;YI SYLLABLE FAT;Lo;0;L;;;;;N;;;;; A0D2;YI SYLLABLE FAX;Lo;0;L;;;;;N;;;;; A0D3;YI SYLLABLE FA;Lo;0;L;;;;;N;;;;; A0D4;YI SYLLABLE FAP;Lo;0;L;;;;;N;;;;; A0D5;YI SYLLABLE FOX;Lo;0;L;;;;;N;;;;; A0D6;YI SYLLABLE FO;Lo;0;L;;;;;N;;;;; A0D7;YI SYLLABLE FOP;Lo;0;L;;;;;N;;;;; A0D8;YI SYLLABLE FUT;Lo;0;L;;;;;N;;;;; A0D9;YI SYLLABLE FUX;Lo;0;L;;;;;N;;;;; A0DA;YI SYLLABLE FU;Lo;0;L;;;;;N;;;;; A0DB;YI SYLLABLE FUP;Lo;0;L;;;;;N;;;;; A0DC;YI SYLLABLE FURX;Lo;0;L;;;;;N;;;;; A0DD;YI SYLLABLE FUR;Lo;0;L;;;;;N;;;;; A0DE;YI SYLLABLE FYT;Lo;0;L;;;;;N;;;;; A0DF;YI SYLLABLE FYX;Lo;0;L;;;;;N;;;;; A0E0;YI SYLLABLE FY;Lo;0;L;;;;;N;;;;; A0E1;YI SYLLABLE FYP;Lo;0;L;;;;;N;;;;; A0E2;YI SYLLABLE VIT;Lo;0;L;;;;;N;;;;; A0E3;YI SYLLABLE VIX;Lo;0;L;;;;;N;;;;; A0E4;YI SYLLABLE VI;Lo;0;L;;;;;N;;;;; A0E5;YI SYLLABLE VIP;Lo;0;L;;;;;N;;;;; A0E6;YI SYLLABLE VIET;Lo;0;L;;;;;N;;;;; A0E7;YI SYLLABLE VIEX;Lo;0;L;;;;;N;;;;; A0E8;YI SYLLABLE VIE;Lo;0;L;;;;;N;;;;; A0E9;YI SYLLABLE VIEP;Lo;0;L;;;;;N;;;;; A0EA;YI SYLLABLE VAT;Lo;0;L;;;;;N;;;;; A0EB;YI SYLLABLE VAX;Lo;0;L;;;;;N;;;;; A0EC;YI SYLLABLE VA;Lo;0;L;;;;;N;;;;; A0ED;YI SYLLABLE VAP;Lo;0;L;;;;;N;;;;; A0EE;YI SYLLABLE VOT;Lo;0;L;;;;;N;;;;; A0EF;YI SYLLABLE VOX;Lo;0;L;;;;;N;;;;; A0F0;YI SYLLABLE VO;Lo;0;L;;;;;N;;;;; A0F1;YI SYLLABLE VOP;Lo;0;L;;;;;N;;;;; A0F2;YI SYLLABLE VEX;Lo;0;L;;;;;N;;;;; A0F3;YI SYLLABLE VEP;Lo;0;L;;;;;N;;;;; A0F4;YI SYLLABLE VUT;Lo;0;L;;;;;N;;;;; A0F5;YI SYLLABLE VUX;Lo;0;L;;;;;N;;;;; A0F6;YI SYLLABLE VU;Lo;0;L;;;;;N;;;;; A0F7;YI SYLLABLE VUP;Lo;0;L;;;;;N;;;;; A0F8;YI SYLLABLE VURX;Lo;0;L;;;;;N;;;;; A0F9;YI SYLLABLE VUR;Lo;0;L;;;;;N;;;;; A0FA;YI SYLLABLE VYT;Lo;0;L;;;;;N;;;;; A0FB;YI SYLLABLE VYX;Lo;0;L;;;;;N;;;;; A0FC;YI SYLLABLE VY;Lo;0;L;;;;;N;;;;; A0FD;YI SYLLABLE VYP;Lo;0;L;;;;;N;;;;; A0FE;YI SYLLABLE VYRX;Lo;0;L;;;;;N;;;;; A0FF;YI SYLLABLE VYR;Lo;0;L;;;;;N;;;;; A100;YI SYLLABLE DIT;Lo;0;L;;;;;N;;;;; A101;YI SYLLABLE DIX;Lo;0;L;;;;;N;;;;; A102;YI SYLLABLE DI;Lo;0;L;;;;;N;;;;; A103;YI SYLLABLE DIP;Lo;0;L;;;;;N;;;;; A104;YI SYLLABLE DIEX;Lo;0;L;;;;;N;;;;; A105;YI SYLLABLE DIE;Lo;0;L;;;;;N;;;;; A106;YI SYLLABLE DIEP;Lo;0;L;;;;;N;;;;; A107;YI SYLLABLE DAT;Lo;0;L;;;;;N;;;;; A108;YI SYLLABLE DAX;Lo;0;L;;;;;N;;;;; A109;YI SYLLABLE DA;Lo;0;L;;;;;N;;;;; A10A;YI SYLLABLE DAP;Lo;0;L;;;;;N;;;;; A10B;YI SYLLABLE DUOX;Lo;0;L;;;;;N;;;;; A10C;YI SYLLABLE DUO;Lo;0;L;;;;;N;;;;; A10D;YI SYLLABLE DOT;Lo;0;L;;;;;N;;;;; A10E;YI SYLLABLE DOX;Lo;0;L;;;;;N;;;;; A10F;YI SYLLABLE DO;Lo;0;L;;;;;N;;;;; A110;YI SYLLABLE DOP;Lo;0;L;;;;;N;;;;; A111;YI SYLLABLE DEX;Lo;0;L;;;;;N;;;;; A112;YI SYLLABLE DE;Lo;0;L;;;;;N;;;;; A113;YI SYLLABLE DEP;Lo;0;L;;;;;N;;;;; A114;YI SYLLABLE DUT;Lo;0;L;;;;;N;;;;; A115;YI SYLLABLE DUX;Lo;0;L;;;;;N;;;;; A116;YI SYLLABLE DU;Lo;0;L;;;;;N;;;;; A117;YI SYLLABLE DUP;Lo;0;L;;;;;N;;;;; A118;YI SYLLABLE DURX;Lo;0;L;;;;;N;;;;; A119;YI SYLLABLE DUR;Lo;0;L;;;;;N;;;;; A11A;YI SYLLABLE TIT;Lo;0;L;;;;;N;;;;; A11B;YI SYLLABLE TIX;Lo;0;L;;;;;N;;;;; A11C;YI SYLLABLE TI;Lo;0;L;;;;;N;;;;; A11D;YI SYLLABLE TIP;Lo;0;L;;;;;N;;;;; A11E;YI SYLLABLE TIEX;Lo;0;L;;;;;N;;;;; A11F;YI SYLLABLE TIE;Lo;0;L;;;;;N;;;;; A120;YI SYLLABLE TIEP;Lo;0;L;;;;;N;;;;; A121;YI SYLLABLE TAT;Lo;0;L;;;;;N;;;;; A122;YI SYLLABLE TAX;Lo;0;L;;;;;N;;;;; A123;YI SYLLABLE TA;Lo;0;L;;;;;N;;;;; A124;YI SYLLABLE TAP;Lo;0;L;;;;;N;;;;; A125;YI SYLLABLE TUOT;Lo;0;L;;;;;N;;;;; A126;YI SYLLABLE TUOX;Lo;0;L;;;;;N;;;;; A127;YI SYLLABLE TUO;Lo;0;L;;;;;N;;;;; A128;YI SYLLABLE TUOP;Lo;0;L;;;;;N;;;;; A129;YI SYLLABLE TOT;Lo;0;L;;;;;N;;;;; A12A;YI SYLLABLE TOX;Lo;0;L;;;;;N;;;;; A12B;YI SYLLABLE TO;Lo;0;L;;;;;N;;;;; A12C;YI SYLLABLE TOP;Lo;0;L;;;;;N;;;;; A12D;YI SYLLABLE TEX;Lo;0;L;;;;;N;;;;; A12E;YI SYLLABLE TE;Lo;0;L;;;;;N;;;;; A12F;YI SYLLABLE TEP;Lo;0;L;;;;;N;;;;; A130;YI SYLLABLE TUT;Lo;0;L;;;;;N;;;;; A131;YI SYLLABLE TUX;Lo;0;L;;;;;N;;;;; A132;YI SYLLABLE TU;Lo;0;L;;;;;N;;;;; A133;YI SYLLABLE TUP;Lo;0;L;;;;;N;;;;; A134;YI SYLLABLE TURX;Lo;0;L;;;;;N;;;;; A135;YI SYLLABLE TUR;Lo;0;L;;;;;N;;;;; A136;YI SYLLABLE DDIT;Lo;0;L;;;;;N;;;;; A137;YI SYLLABLE DDIX;Lo;0;L;;;;;N;;;;; A138;YI SYLLABLE DDI;Lo;0;L;;;;;N;;;;; A139;YI SYLLABLE DDIP;Lo;0;L;;;;;N;;;;; A13A;YI SYLLABLE DDIEX;Lo;0;L;;;;;N;;;;; A13B;YI SYLLABLE DDIE;Lo;0;L;;;;;N;;;;; A13C;YI SYLLABLE DDIEP;Lo;0;L;;;;;N;;;;; A13D;YI SYLLABLE DDAT;Lo;0;L;;;;;N;;;;; A13E;YI SYLLABLE DDAX;Lo;0;L;;;;;N;;;;; A13F;YI SYLLABLE DDA;Lo;0;L;;;;;N;;;;; A140;YI SYLLABLE DDAP;Lo;0;L;;;;;N;;;;; A141;YI SYLLABLE DDUOX;Lo;0;L;;;;;N;;;;; A142;YI SYLLABLE DDUO;Lo;0;L;;;;;N;;;;; A143;YI SYLLABLE DDUOP;Lo;0;L;;;;;N;;;;; A144;YI SYLLABLE DDOT;Lo;0;L;;;;;N;;;;; A145;YI SYLLABLE DDOX;Lo;0;L;;;;;N;;;;; A146;YI SYLLABLE DDO;Lo;0;L;;;;;N;;;;; A147;YI SYLLABLE DDOP;Lo;0;L;;;;;N;;;;; A148;YI SYLLABLE DDEX;Lo;0;L;;;;;N;;;;; A149;YI SYLLABLE DDE;Lo;0;L;;;;;N;;;;; A14A;YI SYLLABLE DDEP;Lo;0;L;;;;;N;;;;; A14B;YI SYLLABLE DDUT;Lo;0;L;;;;;N;;;;; A14C;YI SYLLABLE DDUX;Lo;0;L;;;;;N;;;;; A14D;YI SYLLABLE DDU;Lo;0;L;;;;;N;;;;; A14E;YI SYLLABLE DDUP;Lo;0;L;;;;;N;;;;; A14F;YI SYLLABLE DDURX;Lo;0;L;;;;;N;;;;; A150;YI SYLLABLE DDUR;Lo;0;L;;;;;N;;;;; A151;YI SYLLABLE NDIT;Lo;0;L;;;;;N;;;;; A152;YI SYLLABLE NDIX;Lo;0;L;;;;;N;;;;; A153;YI SYLLABLE NDI;Lo;0;L;;;;;N;;;;; A154;YI SYLLABLE NDIP;Lo;0;L;;;;;N;;;;; A155;YI SYLLABLE NDIEX;Lo;0;L;;;;;N;;;;; A156;YI SYLLABLE NDIE;Lo;0;L;;;;;N;;;;; A157;YI SYLLABLE NDAT;Lo;0;L;;;;;N;;;;; A158;YI SYLLABLE NDAX;Lo;0;L;;;;;N;;;;; A159;YI SYLLABLE NDA;Lo;0;L;;;;;N;;;;; A15A;YI SYLLABLE NDAP;Lo;0;L;;;;;N;;;;; A15B;YI SYLLABLE NDOT;Lo;0;L;;;;;N;;;;; A15C;YI SYLLABLE NDOX;Lo;0;L;;;;;N;;;;; A15D;YI SYLLABLE NDO;Lo;0;L;;;;;N;;;;; A15E;YI SYLLABLE NDOP;Lo;0;L;;;;;N;;;;; A15F;YI SYLLABLE NDEX;Lo;0;L;;;;;N;;;;; A160;YI SYLLABLE NDE;Lo;0;L;;;;;N;;;;; A161;YI SYLLABLE NDEP;Lo;0;L;;;;;N;;;;; A162;YI SYLLABLE NDUT;Lo;0;L;;;;;N;;;;; A163;YI SYLLABLE NDUX;Lo;0;L;;;;;N;;;;; A164;YI SYLLABLE NDU;Lo;0;L;;;;;N;;;;; A165;YI SYLLABLE NDUP;Lo;0;L;;;;;N;;;;; A166;YI SYLLABLE NDURX;Lo;0;L;;;;;N;;;;; A167;YI SYLLABLE NDUR;Lo;0;L;;;;;N;;;;; A168;YI SYLLABLE HNIT;Lo;0;L;;;;;N;;;;; A169;YI SYLLABLE HNIX;Lo;0;L;;;;;N;;;;; A16A;YI SYLLABLE HNI;Lo;0;L;;;;;N;;;;; A16B;YI SYLLABLE HNIP;Lo;0;L;;;;;N;;;;; A16C;YI SYLLABLE HNIET;Lo;0;L;;;;;N;;;;; A16D;YI SYLLABLE HNIEX;Lo;0;L;;;;;N;;;;; A16E;YI SYLLABLE HNIE;Lo;0;L;;;;;N;;;;; A16F;YI SYLLABLE HNIEP;Lo;0;L;;;;;N;;;;; A170;YI SYLLABLE HNAT;Lo;0;L;;;;;N;;;;; A171;YI SYLLABLE HNAX;Lo;0;L;;;;;N;;;;; A172;YI SYLLABLE HNA;Lo;0;L;;;;;N;;;;; A173;YI SYLLABLE HNAP;Lo;0;L;;;;;N;;;;; A174;YI SYLLABLE HNUOX;Lo;0;L;;;;;N;;;;; A175;YI SYLLABLE HNUO;Lo;0;L;;;;;N;;;;; A176;YI SYLLABLE HNOT;Lo;0;L;;;;;N;;;;; A177;YI SYLLABLE HNOX;Lo;0;L;;;;;N;;;;; A178;YI SYLLABLE HNOP;Lo;0;L;;;;;N;;;;; A179;YI SYLLABLE HNEX;Lo;0;L;;;;;N;;;;; A17A;YI SYLLABLE HNE;Lo;0;L;;;;;N;;;;; A17B;YI SYLLABLE HNEP;Lo;0;L;;;;;N;;;;; A17C;YI SYLLABLE HNUT;Lo;0;L;;;;;N;;;;; A17D;YI SYLLABLE NIT;Lo;0;L;;;;;N;;;;; A17E;YI SYLLABLE NIX;Lo;0;L;;;;;N;;;;; A17F;YI SYLLABLE NI;Lo;0;L;;;;;N;;;;; A180;YI SYLLABLE NIP;Lo;0;L;;;;;N;;;;; A181;YI SYLLABLE NIEX;Lo;0;L;;;;;N;;;;; A182;YI SYLLABLE NIE;Lo;0;L;;;;;N;;;;; A183;YI SYLLABLE NIEP;Lo;0;L;;;;;N;;;;; A184;YI SYLLABLE NAX;Lo;0;L;;;;;N;;;;; A185;YI SYLLABLE NA;Lo;0;L;;;;;N;;;;; A186;YI SYLLABLE NAP;Lo;0;L;;;;;N;;;;; A187;YI SYLLABLE NUOX;Lo;0;L;;;;;N;;;;; A188;YI SYLLABLE NUO;Lo;0;L;;;;;N;;;;; A189;YI SYLLABLE NUOP;Lo;0;L;;;;;N;;;;; A18A;YI SYLLABLE NOT;Lo;0;L;;;;;N;;;;; A18B;YI SYLLABLE NOX;Lo;0;L;;;;;N;;;;; A18C;YI SYLLABLE NO;Lo;0;L;;;;;N;;;;; A18D;YI SYLLABLE NOP;Lo;0;L;;;;;N;;;;; A18E;YI SYLLABLE NEX;Lo;0;L;;;;;N;;;;; A18F;YI SYLLABLE NE;Lo;0;L;;;;;N;;;;; A190;YI SYLLABLE NEP;Lo;0;L;;;;;N;;;;; A191;YI SYLLABLE NUT;Lo;0;L;;;;;N;;;;; A192;YI SYLLABLE NUX;Lo;0;L;;;;;N;;;;; A193;YI SYLLABLE NU;Lo;0;L;;;;;N;;;;; A194;YI SYLLABLE NUP;Lo;0;L;;;;;N;;;;; A195;YI SYLLABLE NURX;Lo;0;L;;;;;N;;;;; A196;YI SYLLABLE NUR;Lo;0;L;;;;;N;;;;; A197;YI SYLLABLE HLIT;Lo;0;L;;;;;N;;;;; A198;YI SYLLABLE HLIX;Lo;0;L;;;;;N;;;;; A199;YI SYLLABLE HLI;Lo;0;L;;;;;N;;;;; A19A;YI SYLLABLE HLIP;Lo;0;L;;;;;N;;;;; A19B;YI SYLLABLE HLIEX;Lo;0;L;;;;;N;;;;; A19C;YI SYLLABLE HLIE;Lo;0;L;;;;;N;;;;; A19D;YI SYLLABLE HLIEP;Lo;0;L;;;;;N;;;;; A19E;YI SYLLABLE HLAT;Lo;0;L;;;;;N;;;;; A19F;YI SYLLABLE HLAX;Lo;0;L;;;;;N;;;;; A1A0;YI SYLLABLE HLA;Lo;0;L;;;;;N;;;;; A1A1;YI SYLLABLE HLAP;Lo;0;L;;;;;N;;;;; A1A2;YI SYLLABLE HLUOX;Lo;0;L;;;;;N;;;;; A1A3;YI SYLLABLE HLUO;Lo;0;L;;;;;N;;;;; A1A4;YI SYLLABLE HLUOP;Lo;0;L;;;;;N;;;;; A1A5;YI SYLLABLE HLOX;Lo;0;L;;;;;N;;;;; A1A6;YI SYLLABLE HLO;Lo;0;L;;;;;N;;;;; A1A7;YI SYLLABLE HLOP;Lo;0;L;;;;;N;;;;; A1A8;YI SYLLABLE HLEX;Lo;0;L;;;;;N;;;;; A1A9;YI SYLLABLE HLE;Lo;0;L;;;;;N;;;;; A1AA;YI SYLLABLE HLEP;Lo;0;L;;;;;N;;;;; A1AB;YI SYLLABLE HLUT;Lo;0;L;;;;;N;;;;; A1AC;YI SYLLABLE HLUX;Lo;0;L;;;;;N;;;;; A1AD;YI SYLLABLE HLU;Lo;0;L;;;;;N;;;;; A1AE;YI SYLLABLE HLUP;Lo;0;L;;;;;N;;;;; A1AF;YI SYLLABLE HLURX;Lo;0;L;;;;;N;;;;; A1B0;YI SYLLABLE HLUR;Lo;0;L;;;;;N;;;;; A1B1;YI SYLLABLE HLYT;Lo;0;L;;;;;N;;;;; A1B2;YI SYLLABLE HLYX;Lo;0;L;;;;;N;;;;; A1B3;YI SYLLABLE HLY;Lo;0;L;;;;;N;;;;; A1B4;YI SYLLABLE HLYP;Lo;0;L;;;;;N;;;;; A1B5;YI SYLLABLE HLYRX;Lo;0;L;;;;;N;;;;; A1B6;YI SYLLABLE HLYR;Lo;0;L;;;;;N;;;;; A1B7;YI SYLLABLE LIT;Lo;0;L;;;;;N;;;;; A1B8;YI SYLLABLE LIX;Lo;0;L;;;;;N;;;;; A1B9;YI SYLLABLE LI;Lo;0;L;;;;;N;;;;; A1BA;YI SYLLABLE LIP;Lo;0;L;;;;;N;;;;; A1BB;YI SYLLABLE LIET;Lo;0;L;;;;;N;;;;; A1BC;YI SYLLABLE LIEX;Lo;0;L;;;;;N;;;;; A1BD;YI SYLLABLE LIE;Lo;0;L;;;;;N;;;;; A1BE;YI SYLLABLE LIEP;Lo;0;L;;;;;N;;;;; A1BF;YI SYLLABLE LAT;Lo;0;L;;;;;N;;;;; A1C0;YI SYLLABLE LAX;Lo;0;L;;;;;N;;;;; A1C1;YI SYLLABLE LA;Lo;0;L;;;;;N;;;;; A1C2;YI SYLLABLE LAP;Lo;0;L;;;;;N;;;;; A1C3;YI SYLLABLE LUOT;Lo;0;L;;;;;N;;;;; A1C4;YI SYLLABLE LUOX;Lo;0;L;;;;;N;;;;; A1C5;YI SYLLABLE LUO;Lo;0;L;;;;;N;;;;; A1C6;YI SYLLABLE LUOP;Lo;0;L;;;;;N;;;;; A1C7;YI SYLLABLE LOT;Lo;0;L;;;;;N;;;;; A1C8;YI SYLLABLE LOX;Lo;0;L;;;;;N;;;;; A1C9;YI SYLLABLE LO;Lo;0;L;;;;;N;;;;; A1CA;YI SYLLABLE LOP;Lo;0;L;;;;;N;;;;; A1CB;YI SYLLABLE LEX;Lo;0;L;;;;;N;;;;; A1CC;YI SYLLABLE LE;Lo;0;L;;;;;N;;;;; A1CD;YI SYLLABLE LEP;Lo;0;L;;;;;N;;;;; A1CE;YI SYLLABLE LUT;Lo;0;L;;;;;N;;;;; A1CF;YI SYLLABLE LUX;Lo;0;L;;;;;N;;;;; A1D0;YI SYLLABLE LU;Lo;0;L;;;;;N;;;;; A1D1;YI SYLLABLE LUP;Lo;0;L;;;;;N;;;;; A1D2;YI SYLLABLE LURX;Lo;0;L;;;;;N;;;;; A1D3;YI SYLLABLE LUR;Lo;0;L;;;;;N;;;;; A1D4;YI SYLLABLE LYT;Lo;0;L;;;;;N;;;;; A1D5;YI SYLLABLE LYX;Lo;0;L;;;;;N;;;;; A1D6;YI SYLLABLE LY;Lo;0;L;;;;;N;;;;; A1D7;YI SYLLABLE LYP;Lo;0;L;;;;;N;;;;; A1D8;YI SYLLABLE LYRX;Lo;0;L;;;;;N;;;;; A1D9;YI SYLLABLE LYR;Lo;0;L;;;;;N;;;;; A1DA;YI SYLLABLE GIT;Lo;0;L;;;;;N;;;;; A1DB;YI SYLLABLE GIX;Lo;0;L;;;;;N;;;;; A1DC;YI SYLLABLE GI;Lo;0;L;;;;;N;;;;; A1DD;YI SYLLABLE GIP;Lo;0;L;;;;;N;;;;; A1DE;YI SYLLABLE GIET;Lo;0;L;;;;;N;;;;; A1DF;YI SYLLABLE GIEX;Lo;0;L;;;;;N;;;;; A1E0;YI SYLLABLE GIE;Lo;0;L;;;;;N;;;;; A1E1;YI SYLLABLE GIEP;Lo;0;L;;;;;N;;;;; A1E2;YI SYLLABLE GAT;Lo;0;L;;;;;N;;;;; A1E3;YI SYLLABLE GAX;Lo;0;L;;;;;N;;;;; A1E4;YI SYLLABLE GA;Lo;0;L;;;;;N;;;;; A1E5;YI SYLLABLE GAP;Lo;0;L;;;;;N;;;;; A1E6;YI SYLLABLE GUOT;Lo;0;L;;;;;N;;;;; A1E7;YI SYLLABLE GUOX;Lo;0;L;;;;;N;;;;; A1E8;YI SYLLABLE GUO;Lo;0;L;;;;;N;;;;; A1E9;YI SYLLABLE GUOP;Lo;0;L;;;;;N;;;;; A1EA;YI SYLLABLE GOT;Lo;0;L;;;;;N;;;;; A1EB;YI SYLLABLE GOX;Lo;0;L;;;;;N;;;;; A1EC;YI SYLLABLE GO;Lo;0;L;;;;;N;;;;; A1ED;YI SYLLABLE GOP;Lo;0;L;;;;;N;;;;; A1EE;YI SYLLABLE GET;Lo;0;L;;;;;N;;;;; A1EF;YI SYLLABLE GEX;Lo;0;L;;;;;N;;;;; A1F0;YI SYLLABLE GE;Lo;0;L;;;;;N;;;;; A1F1;YI SYLLABLE GEP;Lo;0;L;;;;;N;;;;; A1F2;YI SYLLABLE GUT;Lo;0;L;;;;;N;;;;; A1F3;YI SYLLABLE GUX;Lo;0;L;;;;;N;;;;; A1F4;YI SYLLABLE GU;Lo;0;L;;;;;N;;;;; A1F5;YI SYLLABLE GUP;Lo;0;L;;;;;N;;;;; A1F6;YI SYLLABLE GURX;Lo;0;L;;;;;N;;;;; A1F7;YI SYLLABLE GUR;Lo;0;L;;;;;N;;;;; A1F8;YI SYLLABLE KIT;Lo;0;L;;;;;N;;;;; A1F9;YI SYLLABLE KIX;Lo;0;L;;;;;N;;;;; A1FA;YI SYLLABLE KI;Lo;0;L;;;;;N;;;;; A1FB;YI SYLLABLE KIP;Lo;0;L;;;;;N;;;;; A1FC;YI SYLLABLE KIEX;Lo;0;L;;;;;N;;;;; A1FD;YI SYLLABLE KIE;Lo;0;L;;;;;N;;;;; A1FE;YI SYLLABLE KIEP;Lo;0;L;;;;;N;;;;; A1FF;YI SYLLABLE KAT;Lo;0;L;;;;;N;;;;; A200;YI SYLLABLE KAX;Lo;0;L;;;;;N;;;;; A201;YI SYLLABLE KA;Lo;0;L;;;;;N;;;;; A202;YI SYLLABLE KAP;Lo;0;L;;;;;N;;;;; A203;YI SYLLABLE KUOX;Lo;0;L;;;;;N;;;;; A204;YI SYLLABLE KUO;Lo;0;L;;;;;N;;;;; A205;YI SYLLABLE KUOP;Lo;0;L;;;;;N;;;;; A206;YI SYLLABLE KOT;Lo;0;L;;;;;N;;;;; A207;YI SYLLABLE KOX;Lo;0;L;;;;;N;;;;; A208;YI SYLLABLE KO;Lo;0;L;;;;;N;;;;; A209;YI SYLLABLE KOP;Lo;0;L;;;;;N;;;;; A20A;YI SYLLABLE KET;Lo;0;L;;;;;N;;;;; A20B;YI SYLLABLE KEX;Lo;0;L;;;;;N;;;;; A20C;YI SYLLABLE KE;Lo;0;L;;;;;N;;;;; A20D;YI SYLLABLE KEP;Lo;0;L;;;;;N;;;;; A20E;YI SYLLABLE KUT;Lo;0;L;;;;;N;;;;; A20F;YI SYLLABLE KUX;Lo;0;L;;;;;N;;;;; A210;YI SYLLABLE KU;Lo;0;L;;;;;N;;;;; A211;YI SYLLABLE KUP;Lo;0;L;;;;;N;;;;; A212;YI SYLLABLE KURX;Lo;0;L;;;;;N;;;;; A213;YI SYLLABLE KUR;Lo;0;L;;;;;N;;;;; A214;YI SYLLABLE GGIT;Lo;0;L;;;;;N;;;;; A215;YI SYLLABLE GGIX;Lo;0;L;;;;;N;;;;; A216;YI SYLLABLE GGI;Lo;0;L;;;;;N;;;;; A217;YI SYLLABLE GGIEX;Lo;0;L;;;;;N;;;;; A218;YI SYLLABLE GGIE;Lo;0;L;;;;;N;;;;; A219;YI SYLLABLE GGIEP;Lo;0;L;;;;;N;;;;; A21A;YI SYLLABLE GGAT;Lo;0;L;;;;;N;;;;; A21B;YI SYLLABLE GGAX;Lo;0;L;;;;;N;;;;; A21C;YI SYLLABLE GGA;Lo;0;L;;;;;N;;;;; A21D;YI SYLLABLE GGAP;Lo;0;L;;;;;N;;;;; A21E;YI SYLLABLE GGUOT;Lo;0;L;;;;;N;;;;; A21F;YI SYLLABLE GGUOX;Lo;0;L;;;;;N;;;;; A220;YI SYLLABLE GGUO;Lo;0;L;;;;;N;;;;; A221;YI SYLLABLE GGUOP;Lo;0;L;;;;;N;;;;; A222;YI SYLLABLE GGOT;Lo;0;L;;;;;N;;;;; A223;YI SYLLABLE GGOX;Lo;0;L;;;;;N;;;;; A224;YI SYLLABLE GGO;Lo;0;L;;;;;N;;;;; A225;YI SYLLABLE GGOP;Lo;0;L;;;;;N;;;;; A226;YI SYLLABLE GGET;Lo;0;L;;;;;N;;;;; A227;YI SYLLABLE GGEX;Lo;0;L;;;;;N;;;;; A228;YI SYLLABLE GGE;Lo;0;L;;;;;N;;;;; A229;YI SYLLABLE GGEP;Lo;0;L;;;;;N;;;;; A22A;YI SYLLABLE GGUT;Lo;0;L;;;;;N;;;;; A22B;YI SYLLABLE GGUX;Lo;0;L;;;;;N;;;;; A22C;YI SYLLABLE GGU;Lo;0;L;;;;;N;;;;; A22D;YI SYLLABLE GGUP;Lo;0;L;;;;;N;;;;; A22E;YI SYLLABLE GGURX;Lo;0;L;;;;;N;;;;; A22F;YI SYLLABLE GGUR;Lo;0;L;;;;;N;;;;; A230;YI SYLLABLE MGIEX;Lo;0;L;;;;;N;;;;; A231;YI SYLLABLE MGIE;Lo;0;L;;;;;N;;;;; A232;YI SYLLABLE MGAT;Lo;0;L;;;;;N;;;;; A233;YI SYLLABLE MGAX;Lo;0;L;;;;;N;;;;; A234;YI SYLLABLE MGA;Lo;0;L;;;;;N;;;;; A235;YI SYLLABLE MGAP;Lo;0;L;;;;;N;;;;; A236;YI SYLLABLE MGUOX;Lo;0;L;;;;;N;;;;; A237;YI SYLLABLE MGUO;Lo;0;L;;;;;N;;;;; A238;YI SYLLABLE MGUOP;Lo;0;L;;;;;N;;;;; A239;YI SYLLABLE MGOT;Lo;0;L;;;;;N;;;;; A23A;YI SYLLABLE MGOX;Lo;0;L;;;;;N;;;;; A23B;YI SYLLABLE MGO;Lo;0;L;;;;;N;;;;; A23C;YI SYLLABLE MGOP;Lo;0;L;;;;;N;;;;; A23D;YI SYLLABLE MGEX;Lo;0;L;;;;;N;;;;; A23E;YI SYLLABLE MGE;Lo;0;L;;;;;N;;;;; A23F;YI SYLLABLE MGEP;Lo;0;L;;;;;N;;;;; A240;YI SYLLABLE MGUT;Lo;0;L;;;;;N;;;;; A241;YI SYLLABLE MGUX;Lo;0;L;;;;;N;;;;; A242;YI SYLLABLE MGU;Lo;0;L;;;;;N;;;;; A243;YI SYLLABLE MGUP;Lo;0;L;;;;;N;;;;; A244;YI SYLLABLE MGURX;Lo;0;L;;;;;N;;;;; A245;YI SYLLABLE MGUR;Lo;0;L;;;;;N;;;;; A246;YI SYLLABLE HXIT;Lo;0;L;;;;;N;;;;; A247;YI SYLLABLE HXIX;Lo;0;L;;;;;N;;;;; A248;YI SYLLABLE HXI;Lo;0;L;;;;;N;;;;; A249;YI SYLLABLE HXIP;Lo;0;L;;;;;N;;;;; A24A;YI SYLLABLE HXIET;Lo;0;L;;;;;N;;;;; A24B;YI SYLLABLE HXIEX;Lo;0;L;;;;;N;;;;; A24C;YI SYLLABLE HXIE;Lo;0;L;;;;;N;;;;; A24D;YI SYLLABLE HXIEP;Lo;0;L;;;;;N;;;;; A24E;YI SYLLABLE HXAT;Lo;0;L;;;;;N;;;;; A24F;YI SYLLABLE HXAX;Lo;0;L;;;;;N;;;;; A250;YI SYLLABLE HXA;Lo;0;L;;;;;N;;;;; A251;YI SYLLABLE HXAP;Lo;0;L;;;;;N;;;;; A252;YI SYLLABLE HXUOT;Lo;0;L;;;;;N;;;;; A253;YI SYLLABLE HXUOX;Lo;0;L;;;;;N;;;;; A254;YI SYLLABLE HXUO;Lo;0;L;;;;;N;;;;; A255;YI SYLLABLE HXUOP;Lo;0;L;;;;;N;;;;; A256;YI SYLLABLE HXOT;Lo;0;L;;;;;N;;;;; A257;YI SYLLABLE HXOX;Lo;0;L;;;;;N;;;;; A258;YI SYLLABLE HXO;Lo;0;L;;;;;N;;;;; A259;YI SYLLABLE HXOP;Lo;0;L;;;;;N;;;;; A25A;YI SYLLABLE HXEX;Lo;0;L;;;;;N;;;;; A25B;YI SYLLABLE HXE;Lo;0;L;;;;;N;;;;; A25C;YI SYLLABLE HXEP;Lo;0;L;;;;;N;;;;; A25D;YI SYLLABLE NGIEX;Lo;0;L;;;;;N;;;;; A25E;YI SYLLABLE NGIE;Lo;0;L;;;;;N;;;;; A25F;YI SYLLABLE NGIEP;Lo;0;L;;;;;N;;;;; A260;YI SYLLABLE NGAT;Lo;0;L;;;;;N;;;;; A261;YI SYLLABLE NGAX;Lo;0;L;;;;;N;;;;; A262;YI SYLLABLE NGA;Lo;0;L;;;;;N;;;;; A263;YI SYLLABLE NGAP;Lo;0;L;;;;;N;;;;; A264;YI SYLLABLE NGUOT;Lo;0;L;;;;;N;;;;; A265;YI SYLLABLE NGUOX;Lo;0;L;;;;;N;;;;; A266;YI SYLLABLE NGUO;Lo;0;L;;;;;N;;;;; A267;YI SYLLABLE NGOT;Lo;0;L;;;;;N;;;;; A268;YI SYLLABLE NGOX;Lo;0;L;;;;;N;;;;; A269;YI SYLLABLE NGO;Lo;0;L;;;;;N;;;;; A26A;YI SYLLABLE NGOP;Lo;0;L;;;;;N;;;;; A26B;YI SYLLABLE NGEX;Lo;0;L;;;;;N;;;;; A26C;YI SYLLABLE NGE;Lo;0;L;;;;;N;;;;; A26D;YI SYLLABLE NGEP;Lo;0;L;;;;;N;;;;; A26E;YI SYLLABLE HIT;Lo;0;L;;;;;N;;;;; A26F;YI SYLLABLE HIEX;Lo;0;L;;;;;N;;;;; A270;YI SYLLABLE HIE;Lo;0;L;;;;;N;;;;; A271;YI SYLLABLE HAT;Lo;0;L;;;;;N;;;;; A272;YI SYLLABLE HAX;Lo;0;L;;;;;N;;;;; A273;YI SYLLABLE HA;Lo;0;L;;;;;N;;;;; A274;YI SYLLABLE HAP;Lo;0;L;;;;;N;;;;; A275;YI SYLLABLE HUOT;Lo;0;L;;;;;N;;;;; A276;YI SYLLABLE HUOX;Lo;0;L;;;;;N;;;;; A277;YI SYLLABLE HUO;Lo;0;L;;;;;N;;;;; A278;YI SYLLABLE HUOP;Lo;0;L;;;;;N;;;;; A279;YI SYLLABLE HOT;Lo;0;L;;;;;N;;;;; A27A;YI SYLLABLE HOX;Lo;0;L;;;;;N;;;;; A27B;YI SYLLABLE HO;Lo;0;L;;;;;N;;;;; A27C;YI SYLLABLE HOP;Lo;0;L;;;;;N;;;;; A27D;YI SYLLABLE HEX;Lo;0;L;;;;;N;;;;; A27E;YI SYLLABLE HE;Lo;0;L;;;;;N;;;;; A27F;YI SYLLABLE HEP;Lo;0;L;;;;;N;;;;; A280;YI SYLLABLE WAT;Lo;0;L;;;;;N;;;;; A281;YI SYLLABLE WAX;Lo;0;L;;;;;N;;;;; A282;YI SYLLABLE WA;Lo;0;L;;;;;N;;;;; A283;YI SYLLABLE WAP;Lo;0;L;;;;;N;;;;; A284;YI SYLLABLE WUOX;Lo;0;L;;;;;N;;;;; A285;YI SYLLABLE WUO;Lo;0;L;;;;;N;;;;; A286;YI SYLLABLE WUOP;Lo;0;L;;;;;N;;;;; A287;YI SYLLABLE WOX;Lo;0;L;;;;;N;;;;; A288;YI SYLLABLE WO;Lo;0;L;;;;;N;;;;; A289;YI SYLLABLE WOP;Lo;0;L;;;;;N;;;;; A28A;YI SYLLABLE WEX;Lo;0;L;;;;;N;;;;; A28B;YI SYLLABLE WE;Lo;0;L;;;;;N;;;;; A28C;YI SYLLABLE WEP;Lo;0;L;;;;;N;;;;; A28D;YI SYLLABLE ZIT;Lo;0;L;;;;;N;;;;; A28E;YI SYLLABLE ZIX;Lo;0;L;;;;;N;;;;; A28F;YI SYLLABLE ZI;Lo;0;L;;;;;N;;;;; A290;YI SYLLABLE ZIP;Lo;0;L;;;;;N;;;;; A291;YI SYLLABLE ZIEX;Lo;0;L;;;;;N;;;;; A292;YI SYLLABLE ZIE;Lo;0;L;;;;;N;;;;; A293;YI SYLLABLE ZIEP;Lo;0;L;;;;;N;;;;; A294;YI SYLLABLE ZAT;Lo;0;L;;;;;N;;;;; A295;YI SYLLABLE ZAX;Lo;0;L;;;;;N;;;;; A296;YI SYLLABLE ZA;Lo;0;L;;;;;N;;;;; A297;YI SYLLABLE ZAP;Lo;0;L;;;;;N;;;;; A298;YI SYLLABLE ZUOX;Lo;0;L;;;;;N;;;;; A299;YI SYLLABLE ZUO;Lo;0;L;;;;;N;;;;; A29A;YI SYLLABLE ZUOP;Lo;0;L;;;;;N;;;;; A29B;YI SYLLABLE ZOT;Lo;0;L;;;;;N;;;;; A29C;YI SYLLABLE ZOX;Lo;0;L;;;;;N;;;;; A29D;YI SYLLABLE ZO;Lo;0;L;;;;;N;;;;; A29E;YI SYLLABLE ZOP;Lo;0;L;;;;;N;;;;; A29F;YI SYLLABLE ZEX;Lo;0;L;;;;;N;;;;; A2A0;YI SYLLABLE ZE;Lo;0;L;;;;;N;;;;; A2A1;YI SYLLABLE ZEP;Lo;0;L;;;;;N;;;;; A2A2;YI SYLLABLE ZUT;Lo;0;L;;;;;N;;;;; A2A3;YI SYLLABLE ZUX;Lo;0;L;;;;;N;;;;; A2A4;YI SYLLABLE ZU;Lo;0;L;;;;;N;;;;; A2A5;YI SYLLABLE ZUP;Lo;0;L;;;;;N;;;;; A2A6;YI SYLLABLE ZURX;Lo;0;L;;;;;N;;;;; A2A7;YI SYLLABLE ZUR;Lo;0;L;;;;;N;;;;; A2A8;YI SYLLABLE ZYT;Lo;0;L;;;;;N;;;;; A2A9;YI SYLLABLE ZYX;Lo;0;L;;;;;N;;;;; A2AA;YI SYLLABLE ZY;Lo;0;L;;;;;N;;;;; A2AB;YI SYLLABLE ZYP;Lo;0;L;;;;;N;;;;; A2AC;YI SYLLABLE ZYRX;Lo;0;L;;;;;N;;;;; A2AD;YI SYLLABLE ZYR;Lo;0;L;;;;;N;;;;; A2AE;YI SYLLABLE CIT;Lo;0;L;;;;;N;;;;; A2AF;YI SYLLABLE CIX;Lo;0;L;;;;;N;;;;; A2B0;YI SYLLABLE CI;Lo;0;L;;;;;N;;;;; A2B1;YI SYLLABLE CIP;Lo;0;L;;;;;N;;;;; A2B2;YI SYLLABLE CIET;Lo;0;L;;;;;N;;;;; A2B3;YI SYLLABLE CIEX;Lo;0;L;;;;;N;;;;; A2B4;YI SYLLABLE CIE;Lo;0;L;;;;;N;;;;; A2B5;YI SYLLABLE CIEP;Lo;0;L;;;;;N;;;;; A2B6;YI SYLLABLE CAT;Lo;0;L;;;;;N;;;;; A2B7;YI SYLLABLE CAX;Lo;0;L;;;;;N;;;;; A2B8;YI SYLLABLE CA;Lo;0;L;;;;;N;;;;; A2B9;YI SYLLABLE CAP;Lo;0;L;;;;;N;;;;; A2BA;YI SYLLABLE CUOX;Lo;0;L;;;;;N;;;;; A2BB;YI SYLLABLE CUO;Lo;0;L;;;;;N;;;;; A2BC;YI SYLLABLE CUOP;Lo;0;L;;;;;N;;;;; A2BD;YI SYLLABLE COT;Lo;0;L;;;;;N;;;;; A2BE;YI SYLLABLE COX;Lo;0;L;;;;;N;;;;; A2BF;YI SYLLABLE CO;Lo;0;L;;;;;N;;;;; A2C0;YI SYLLABLE COP;Lo;0;L;;;;;N;;;;; A2C1;YI SYLLABLE CEX;Lo;0;L;;;;;N;;;;; A2C2;YI SYLLABLE CE;Lo;0;L;;;;;N;;;;; A2C3;YI SYLLABLE CEP;Lo;0;L;;;;;N;;;;; A2C4;YI SYLLABLE CUT;Lo;0;L;;;;;N;;;;; A2C5;YI SYLLABLE CUX;Lo;0;L;;;;;N;;;;; A2C6;YI SYLLABLE CU;Lo;0;L;;;;;N;;;;; A2C7;YI SYLLABLE CUP;Lo;0;L;;;;;N;;;;; A2C8;YI SYLLABLE CURX;Lo;0;L;;;;;N;;;;; A2C9;YI SYLLABLE CUR;Lo;0;L;;;;;N;;;;; A2CA;YI SYLLABLE CYT;Lo;0;L;;;;;N;;;;; A2CB;YI SYLLABLE CYX;Lo;0;L;;;;;N;;;;; A2CC;YI SYLLABLE CY;Lo;0;L;;;;;N;;;;; A2CD;YI SYLLABLE CYP;Lo;0;L;;;;;N;;;;; A2CE;YI SYLLABLE CYRX;Lo;0;L;;;;;N;;;;; A2CF;YI SYLLABLE CYR;Lo;0;L;;;;;N;;;;; A2D0;YI SYLLABLE ZZIT;Lo;0;L;;;;;N;;;;; A2D1;YI SYLLABLE ZZIX;Lo;0;L;;;;;N;;;;; A2D2;YI SYLLABLE ZZI;Lo;0;L;;;;;N;;;;; A2D3;YI SYLLABLE ZZIP;Lo;0;L;;;;;N;;;;; A2D4;YI SYLLABLE ZZIET;Lo;0;L;;;;;N;;;;; A2D5;YI SYLLABLE ZZIEX;Lo;0;L;;;;;N;;;;; A2D6;YI SYLLABLE ZZIE;Lo;0;L;;;;;N;;;;; A2D7;YI SYLLABLE ZZIEP;Lo;0;L;;;;;N;;;;; A2D8;YI SYLLABLE ZZAT;Lo;0;L;;;;;N;;;;; A2D9;YI SYLLABLE ZZAX;Lo;0;L;;;;;N;;;;; A2DA;YI SYLLABLE ZZA;Lo;0;L;;;;;N;;;;; A2DB;YI SYLLABLE ZZAP;Lo;0;L;;;;;N;;;;; A2DC;YI SYLLABLE ZZOX;Lo;0;L;;;;;N;;;;; A2DD;YI SYLLABLE ZZO;Lo;0;L;;;;;N;;;;; A2DE;YI SYLLABLE ZZOP;Lo;0;L;;;;;N;;;;; A2DF;YI SYLLABLE ZZEX;Lo;0;L;;;;;N;;;;; A2E0;YI SYLLABLE ZZE;Lo;0;L;;;;;N;;;;; A2E1;YI SYLLABLE ZZEP;Lo;0;L;;;;;N;;;;; A2E2;YI SYLLABLE ZZUX;Lo;0;L;;;;;N;;;;; A2E3;YI SYLLABLE ZZU;Lo;0;L;;;;;N;;;;; A2E4;YI SYLLABLE ZZUP;Lo;0;L;;;;;N;;;;; A2E5;YI SYLLABLE ZZURX;Lo;0;L;;;;;N;;;;; A2E6;YI SYLLABLE ZZUR;Lo;0;L;;;;;N;;;;; A2E7;YI SYLLABLE ZZYT;Lo;0;L;;;;;N;;;;; A2E8;YI SYLLABLE ZZYX;Lo;0;L;;;;;N;;;;; A2E9;YI SYLLABLE ZZY;Lo;0;L;;;;;N;;;;; A2EA;YI SYLLABLE ZZYP;Lo;0;L;;;;;N;;;;; A2EB;YI SYLLABLE ZZYRX;Lo;0;L;;;;;N;;;;; A2EC;YI SYLLABLE ZZYR;Lo;0;L;;;;;N;;;;; A2ED;YI SYLLABLE NZIT;Lo;0;L;;;;;N;;;;; A2EE;YI SYLLABLE NZIX;Lo;0;L;;;;;N;;;;; A2EF;YI SYLLABLE NZI;Lo;0;L;;;;;N;;;;; A2F0;YI SYLLABLE NZIP;Lo;0;L;;;;;N;;;;; A2F1;YI SYLLABLE NZIEX;Lo;0;L;;;;;N;;;;; A2F2;YI SYLLABLE NZIE;Lo;0;L;;;;;N;;;;; A2F3;YI SYLLABLE NZIEP;Lo;0;L;;;;;N;;;;; A2F4;YI SYLLABLE NZAT;Lo;0;L;;;;;N;;;;; A2F5;YI SYLLABLE NZAX;Lo;0;L;;;;;N;;;;; A2F6;YI SYLLABLE NZA;Lo;0;L;;;;;N;;;;; A2F7;YI SYLLABLE NZAP;Lo;0;L;;;;;N;;;;; A2F8;YI SYLLABLE NZUOX;Lo;0;L;;;;;N;;;;; A2F9;YI SYLLABLE NZUO;Lo;0;L;;;;;N;;;;; A2FA;YI SYLLABLE NZOX;Lo;0;L;;;;;N;;;;; A2FB;YI SYLLABLE NZOP;Lo;0;L;;;;;N;;;;; A2FC;YI SYLLABLE NZEX;Lo;0;L;;;;;N;;;;; A2FD;YI SYLLABLE NZE;Lo;0;L;;;;;N;;;;; A2FE;YI SYLLABLE NZUX;Lo;0;L;;;;;N;;;;; A2FF;YI SYLLABLE NZU;Lo;0;L;;;;;N;;;;; A300;YI SYLLABLE NZUP;Lo;0;L;;;;;N;;;;; A301;YI SYLLABLE NZURX;Lo;0;L;;;;;N;;;;; A302;YI SYLLABLE NZUR;Lo;0;L;;;;;N;;;;; A303;YI SYLLABLE NZYT;Lo;0;L;;;;;N;;;;; A304;YI SYLLABLE NZYX;Lo;0;L;;;;;N;;;;; A305;YI SYLLABLE NZY;Lo;0;L;;;;;N;;;;; A306;YI SYLLABLE NZYP;Lo;0;L;;;;;N;;;;; A307;YI SYLLABLE NZYRX;Lo;0;L;;;;;N;;;;; A308;YI SYLLABLE NZYR;Lo;0;L;;;;;N;;;;; A309;YI SYLLABLE SIT;Lo;0;L;;;;;N;;;;; A30A;YI SYLLABLE SIX;Lo;0;L;;;;;N;;;;; A30B;YI SYLLABLE SI;Lo;0;L;;;;;N;;;;; A30C;YI SYLLABLE SIP;Lo;0;L;;;;;N;;;;; A30D;YI SYLLABLE SIEX;Lo;0;L;;;;;N;;;;; A30E;YI SYLLABLE SIE;Lo;0;L;;;;;N;;;;; A30F;YI SYLLABLE SIEP;Lo;0;L;;;;;N;;;;; A310;YI SYLLABLE SAT;Lo;0;L;;;;;N;;;;; A311;YI SYLLABLE SAX;Lo;0;L;;;;;N;;;;; A312;YI SYLLABLE SA;Lo;0;L;;;;;N;;;;; A313;YI SYLLABLE SAP;Lo;0;L;;;;;N;;;;; A314;YI SYLLABLE SUOX;Lo;0;L;;;;;N;;;;; A315;YI SYLLABLE SUO;Lo;0;L;;;;;N;;;;; A316;YI SYLLABLE SUOP;Lo;0;L;;;;;N;;;;; A317;YI SYLLABLE SOT;Lo;0;L;;;;;N;;;;; A318;YI SYLLABLE SOX;Lo;0;L;;;;;N;;;;; A319;YI SYLLABLE SO;Lo;0;L;;;;;N;;;;; A31A;YI SYLLABLE SOP;Lo;0;L;;;;;N;;;;; A31B;YI SYLLABLE SEX;Lo;0;L;;;;;N;;;;; A31C;YI SYLLABLE SE;Lo;0;L;;;;;N;;;;; A31D;YI SYLLABLE SEP;Lo;0;L;;;;;N;;;;; A31E;YI SYLLABLE SUT;Lo;0;L;;;;;N;;;;; A31F;YI SYLLABLE SUX;Lo;0;L;;;;;N;;;;; A320;YI SYLLABLE SU;Lo;0;L;;;;;N;;;;; A321;YI SYLLABLE SUP;Lo;0;L;;;;;N;;;;; A322;YI SYLLABLE SURX;Lo;0;L;;;;;N;;;;; A323;YI SYLLABLE SUR;Lo;0;L;;;;;N;;;;; A324;YI SYLLABLE SYT;Lo;0;L;;;;;N;;;;; A325;YI SYLLABLE SYX;Lo;0;L;;;;;N;;;;; A326;YI SYLLABLE SY;Lo;0;L;;;;;N;;;;; A327;YI SYLLABLE SYP;Lo;0;L;;;;;N;;;;; A328;YI SYLLABLE SYRX;Lo;0;L;;;;;N;;;;; A329;YI SYLLABLE SYR;Lo;0;L;;;;;N;;;;; A32A;YI SYLLABLE SSIT;Lo;0;L;;;;;N;;;;; A32B;YI SYLLABLE SSIX;Lo;0;L;;;;;N;;;;; A32C;YI SYLLABLE SSI;Lo;0;L;;;;;N;;;;; A32D;YI SYLLABLE SSIP;Lo;0;L;;;;;N;;;;; A32E;YI SYLLABLE SSIEX;Lo;0;L;;;;;N;;;;; A32F;YI SYLLABLE SSIE;Lo;0;L;;;;;N;;;;; A330;YI SYLLABLE SSIEP;Lo;0;L;;;;;N;;;;; A331;YI SYLLABLE SSAT;Lo;0;L;;;;;N;;;;; A332;YI SYLLABLE SSAX;Lo;0;L;;;;;N;;;;; A333;YI SYLLABLE SSA;Lo;0;L;;;;;N;;;;; A334;YI SYLLABLE SSAP;Lo;0;L;;;;;N;;;;; A335;YI SYLLABLE SSOT;Lo;0;L;;;;;N;;;;; A336;YI SYLLABLE SSOX;Lo;0;L;;;;;N;;;;; A337;YI SYLLABLE SSO;Lo;0;L;;;;;N;;;;; A338;YI SYLLABLE SSOP;Lo;0;L;;;;;N;;;;; A339;YI SYLLABLE SSEX;Lo;0;L;;;;;N;;;;; A33A;YI SYLLABLE SSE;Lo;0;L;;;;;N;;;;; A33B;YI SYLLABLE SSEP;Lo;0;L;;;;;N;;;;; A33C;YI SYLLABLE SSUT;Lo;0;L;;;;;N;;;;; A33D;YI SYLLABLE SSUX;Lo;0;L;;;;;N;;;;; A33E;YI SYLLABLE SSU;Lo;0;L;;;;;N;;;;; A33F;YI SYLLABLE SSUP;Lo;0;L;;;;;N;;;;; A340;YI SYLLABLE SSYT;Lo;0;L;;;;;N;;;;; A341;YI SYLLABLE SSYX;Lo;0;L;;;;;N;;;;; A342;YI SYLLABLE SSY;Lo;0;L;;;;;N;;;;; A343;YI SYLLABLE SSYP;Lo;0;L;;;;;N;;;;; A344;YI SYLLABLE SSYRX;Lo;0;L;;;;;N;;;;; A345;YI SYLLABLE SSYR;Lo;0;L;;;;;N;;;;; A346;YI SYLLABLE ZHAT;Lo;0;L;;;;;N;;;;; A347;YI SYLLABLE ZHAX;Lo;0;L;;;;;N;;;;; A348;YI SYLLABLE ZHA;Lo;0;L;;;;;N;;;;; A349;YI SYLLABLE ZHAP;Lo;0;L;;;;;N;;;;; A34A;YI SYLLABLE ZHUOX;Lo;0;L;;;;;N;;;;; A34B;YI SYLLABLE ZHUO;Lo;0;L;;;;;N;;;;; A34C;YI SYLLABLE ZHUOP;Lo;0;L;;;;;N;;;;; A34D;YI SYLLABLE ZHOT;Lo;0;L;;;;;N;;;;; A34E;YI SYLLABLE ZHOX;Lo;0;L;;;;;N;;;;; A34F;YI SYLLABLE ZHO;Lo;0;L;;;;;N;;;;; A350;YI SYLLABLE ZHOP;Lo;0;L;;;;;N;;;;; A351;YI SYLLABLE ZHET;Lo;0;L;;;;;N;;;;; A352;YI SYLLABLE ZHEX;Lo;0;L;;;;;N;;;;; A353;YI SYLLABLE ZHE;Lo;0;L;;;;;N;;;;; A354;YI SYLLABLE ZHEP;Lo;0;L;;;;;N;;;;; A355;YI SYLLABLE ZHUT;Lo;0;L;;;;;N;;;;; A356;YI SYLLABLE ZHUX;Lo;0;L;;;;;N;;;;; A357;YI SYLLABLE ZHU;Lo;0;L;;;;;N;;;;; A358;YI SYLLABLE ZHUP;Lo;0;L;;;;;N;;;;; A359;YI SYLLABLE ZHURX;Lo;0;L;;;;;N;;;;; A35A;YI SYLLABLE ZHUR;Lo;0;L;;;;;N;;;;; A35B;YI SYLLABLE ZHYT;Lo;0;L;;;;;N;;;;; A35C;YI SYLLABLE ZHYX;Lo;0;L;;;;;N;;;;; A35D;YI SYLLABLE ZHY;Lo;0;L;;;;;N;;;;; A35E;YI SYLLABLE ZHYP;Lo;0;L;;;;;N;;;;; A35F;YI SYLLABLE ZHYRX;Lo;0;L;;;;;N;;;;; A360;YI SYLLABLE ZHYR;Lo;0;L;;;;;N;;;;; A361;YI SYLLABLE CHAT;Lo;0;L;;;;;N;;;;; A362;YI SYLLABLE CHAX;Lo;0;L;;;;;N;;;;; A363;YI SYLLABLE CHA;Lo;0;L;;;;;N;;;;; A364;YI SYLLABLE CHAP;Lo;0;L;;;;;N;;;;; A365;YI SYLLABLE CHUOT;Lo;0;L;;;;;N;;;;; A366;YI SYLLABLE CHUOX;Lo;0;L;;;;;N;;;;; A367;YI SYLLABLE CHUO;Lo;0;L;;;;;N;;;;; A368;YI SYLLABLE CHUOP;Lo;0;L;;;;;N;;;;; A369;YI SYLLABLE CHOT;Lo;0;L;;;;;N;;;;; A36A;YI SYLLABLE CHOX;Lo;0;L;;;;;N;;;;; A36B;YI SYLLABLE CHO;Lo;0;L;;;;;N;;;;; A36C;YI SYLLABLE CHOP;Lo;0;L;;;;;N;;;;; A36D;YI SYLLABLE CHET;Lo;0;L;;;;;N;;;;; A36E;YI SYLLABLE CHEX;Lo;0;L;;;;;N;;;;; A36F;YI SYLLABLE CHE;Lo;0;L;;;;;N;;;;; A370;YI SYLLABLE CHEP;Lo;0;L;;;;;N;;;;; A371;YI SYLLABLE CHUX;Lo;0;L;;;;;N;;;;; A372;YI SYLLABLE CHU;Lo;0;L;;;;;N;;;;; A373;YI SYLLABLE CHUP;Lo;0;L;;;;;N;;;;; A374;YI SYLLABLE CHURX;Lo;0;L;;;;;N;;;;; A375;YI SYLLABLE CHUR;Lo;0;L;;;;;N;;;;; A376;YI SYLLABLE CHYT;Lo;0;L;;;;;N;;;;; A377;YI SYLLABLE CHYX;Lo;0;L;;;;;N;;;;; A378;YI SYLLABLE CHY;Lo;0;L;;;;;N;;;;; A379;YI SYLLABLE CHYP;Lo;0;L;;;;;N;;;;; A37A;YI SYLLABLE CHYRX;Lo;0;L;;;;;N;;;;; A37B;YI SYLLABLE CHYR;Lo;0;L;;;;;N;;;;; A37C;YI SYLLABLE RRAX;Lo;0;L;;;;;N;;;;; A37D;YI SYLLABLE RRA;Lo;0;L;;;;;N;;;;; A37E;YI SYLLABLE RRUOX;Lo;0;L;;;;;N;;;;; A37F;YI SYLLABLE RRUO;Lo;0;L;;;;;N;;;;; A380;YI SYLLABLE RROT;Lo;0;L;;;;;N;;;;; A381;YI SYLLABLE RROX;Lo;0;L;;;;;N;;;;; A382;YI SYLLABLE RRO;Lo;0;L;;;;;N;;;;; A383;YI SYLLABLE RROP;Lo;0;L;;;;;N;;;;; A384;YI SYLLABLE RRET;Lo;0;L;;;;;N;;;;; A385;YI SYLLABLE RREX;Lo;0;L;;;;;N;;;;; A386;YI SYLLABLE RRE;Lo;0;L;;;;;N;;;;; A387;YI SYLLABLE RREP;Lo;0;L;;;;;N;;;;; A388;YI SYLLABLE RRUT;Lo;0;L;;;;;N;;;;; A389;YI SYLLABLE RRUX;Lo;0;L;;;;;N;;;;; A38A;YI SYLLABLE RRU;Lo;0;L;;;;;N;;;;; A38B;YI SYLLABLE RRUP;Lo;0;L;;;;;N;;;;; A38C;YI SYLLABLE RRURX;Lo;0;L;;;;;N;;;;; A38D;YI SYLLABLE RRUR;Lo;0;L;;;;;N;;;;; A38E;YI SYLLABLE RRYT;Lo;0;L;;;;;N;;;;; A38F;YI SYLLABLE RRYX;Lo;0;L;;;;;N;;;;; A390;YI SYLLABLE RRY;Lo;0;L;;;;;N;;;;; A391;YI SYLLABLE RRYP;Lo;0;L;;;;;N;;;;; A392;YI SYLLABLE RRYRX;Lo;0;L;;;;;N;;;;; A393;YI SYLLABLE RRYR;Lo;0;L;;;;;N;;;;; A394;YI SYLLABLE NRAT;Lo;0;L;;;;;N;;;;; A395;YI SYLLABLE NRAX;Lo;0;L;;;;;N;;;;; A396;YI SYLLABLE NRA;Lo;0;L;;;;;N;;;;; A397;YI SYLLABLE NRAP;Lo;0;L;;;;;N;;;;; A398;YI SYLLABLE NROX;Lo;0;L;;;;;N;;;;; A399;YI SYLLABLE NRO;Lo;0;L;;;;;N;;;;; A39A;YI SYLLABLE NROP;Lo;0;L;;;;;N;;;;; A39B;YI SYLLABLE NRET;Lo;0;L;;;;;N;;;;; A39C;YI SYLLABLE NREX;Lo;0;L;;;;;N;;;;; A39D;YI SYLLABLE NRE;Lo;0;L;;;;;N;;;;; A39E;YI SYLLABLE NREP;Lo;0;L;;;;;N;;;;; A39F;YI SYLLABLE NRUT;Lo;0;L;;;;;N;;;;; A3A0;YI SYLLABLE NRUX;Lo;0;L;;;;;N;;;;; A3A1;YI SYLLABLE NRU;Lo;0;L;;;;;N;;;;; A3A2;YI SYLLABLE NRUP;Lo;0;L;;;;;N;;;;; A3A3;YI SYLLABLE NRURX;Lo;0;L;;;;;N;;;;; A3A4;YI SYLLABLE NRUR;Lo;0;L;;;;;N;;;;; A3A5;YI SYLLABLE NRYT;Lo;0;L;;;;;N;;;;; A3A6;YI SYLLABLE NRYX;Lo;0;L;;;;;N;;;;; A3A7;YI SYLLABLE NRY;Lo;0;L;;;;;N;;;;; A3A8;YI SYLLABLE NRYP;Lo;0;L;;;;;N;;;;; A3A9;YI SYLLABLE NRYRX;Lo;0;L;;;;;N;;;;; A3AA;YI SYLLABLE NRYR;Lo;0;L;;;;;N;;;;; A3AB;YI SYLLABLE SHAT;Lo;0;L;;;;;N;;;;; A3AC;YI SYLLABLE SHAX;Lo;0;L;;;;;N;;;;; A3AD;YI SYLLABLE SHA;Lo;0;L;;;;;N;;;;; A3AE;YI SYLLABLE SHAP;Lo;0;L;;;;;N;;;;; A3AF;YI SYLLABLE SHUOX;Lo;0;L;;;;;N;;;;; A3B0;YI SYLLABLE SHUO;Lo;0;L;;;;;N;;;;; A3B1;YI SYLLABLE SHUOP;Lo;0;L;;;;;N;;;;; A3B2;YI SYLLABLE SHOT;Lo;0;L;;;;;N;;;;; A3B3;YI SYLLABLE SHOX;Lo;0;L;;;;;N;;;;; A3B4;YI SYLLABLE SHO;Lo;0;L;;;;;N;;;;; A3B5;YI SYLLABLE SHOP;Lo;0;L;;;;;N;;;;; A3B6;YI SYLLABLE SHET;Lo;0;L;;;;;N;;;;; A3B7;YI SYLLABLE SHEX;Lo;0;L;;;;;N;;;;; A3B8;YI SYLLABLE SHE;Lo;0;L;;;;;N;;;;; A3B9;YI SYLLABLE SHEP;Lo;0;L;;;;;N;;;;; A3BA;YI SYLLABLE SHUT;Lo;0;L;;;;;N;;;;; A3BB;YI SYLLABLE SHUX;Lo;0;L;;;;;N;;;;; A3BC;YI SYLLABLE SHU;Lo;0;L;;;;;N;;;;; A3BD;YI SYLLABLE SHUP;Lo;0;L;;;;;N;;;;; A3BE;YI SYLLABLE SHURX;Lo;0;L;;;;;N;;;;; A3BF;YI SYLLABLE SHUR;Lo;0;L;;;;;N;;;;; A3C0;YI SYLLABLE SHYT;Lo;0;L;;;;;N;;;;; A3C1;YI SYLLABLE SHYX;Lo;0;L;;;;;N;;;;; A3C2;YI SYLLABLE SHY;Lo;0;L;;;;;N;;;;; A3C3;YI SYLLABLE SHYP;Lo;0;L;;;;;N;;;;; A3C4;YI SYLLABLE SHYRX;Lo;0;L;;;;;N;;;;; A3C5;YI SYLLABLE SHYR;Lo;0;L;;;;;N;;;;; A3C6;YI SYLLABLE RAT;Lo;0;L;;;;;N;;;;; A3C7;YI SYLLABLE RAX;Lo;0;L;;;;;N;;;;; A3C8;YI SYLLABLE RA;Lo;0;L;;;;;N;;;;; A3C9;YI SYLLABLE RAP;Lo;0;L;;;;;N;;;;; A3CA;YI SYLLABLE RUOX;Lo;0;L;;;;;N;;;;; A3CB;YI SYLLABLE RUO;Lo;0;L;;;;;N;;;;; A3CC;YI SYLLABLE RUOP;Lo;0;L;;;;;N;;;;; A3CD;YI SYLLABLE ROT;Lo;0;L;;;;;N;;;;; A3CE;YI SYLLABLE ROX;Lo;0;L;;;;;N;;;;; A3CF;YI SYLLABLE RO;Lo;0;L;;;;;N;;;;; A3D0;YI SYLLABLE ROP;Lo;0;L;;;;;N;;;;; A3D1;YI SYLLABLE REX;Lo;0;L;;;;;N;;;;; A3D2;YI SYLLABLE RE;Lo;0;L;;;;;N;;;;; A3D3;YI SYLLABLE REP;Lo;0;L;;;;;N;;;;; A3D4;YI SYLLABLE RUT;Lo;0;L;;;;;N;;;;; A3D5;YI SYLLABLE RUX;Lo;0;L;;;;;N;;;;; A3D6;YI SYLLABLE RU;Lo;0;L;;;;;N;;;;; A3D7;YI SYLLABLE RUP;Lo;0;L;;;;;N;;;;; A3D8;YI SYLLABLE RURX;Lo;0;L;;;;;N;;;;; A3D9;YI SYLLABLE RUR;Lo;0;L;;;;;N;;;;; A3DA;YI SYLLABLE RYT;Lo;0;L;;;;;N;;;;; A3DB;YI SYLLABLE RYX;Lo;0;L;;;;;N;;;;; A3DC;YI SYLLABLE RY;Lo;0;L;;;;;N;;;;; A3DD;YI SYLLABLE RYP;Lo;0;L;;;;;N;;;;; A3DE;YI SYLLABLE RYRX;Lo;0;L;;;;;N;;;;; A3DF;YI SYLLABLE RYR;Lo;0;L;;;;;N;;;;; A3E0;YI SYLLABLE JIT;Lo;0;L;;;;;N;;;;; A3E1;YI SYLLABLE JIX;Lo;0;L;;;;;N;;;;; A3E2;YI SYLLABLE JI;Lo;0;L;;;;;N;;;;; A3E3;YI SYLLABLE JIP;Lo;0;L;;;;;N;;;;; A3E4;YI SYLLABLE JIET;Lo;0;L;;;;;N;;;;; A3E5;YI SYLLABLE JIEX;Lo;0;L;;;;;N;;;;; A3E6;YI SYLLABLE JIE;Lo;0;L;;;;;N;;;;; A3E7;YI SYLLABLE JIEP;Lo;0;L;;;;;N;;;;; A3E8;YI SYLLABLE JUOT;Lo;0;L;;;;;N;;;;; A3E9;YI SYLLABLE JUOX;Lo;0;L;;;;;N;;;;; A3EA;YI SYLLABLE JUO;Lo;0;L;;;;;N;;;;; A3EB;YI SYLLABLE JUOP;Lo;0;L;;;;;N;;;;; A3EC;YI SYLLABLE JOT;Lo;0;L;;;;;N;;;;; A3ED;YI SYLLABLE JOX;Lo;0;L;;;;;N;;;;; A3EE;YI SYLLABLE JO;Lo;0;L;;;;;N;;;;; A3EF;YI SYLLABLE JOP;Lo;0;L;;;;;N;;;;; A3F0;YI SYLLABLE JUT;Lo;0;L;;;;;N;;;;; A3F1;YI SYLLABLE JUX;Lo;0;L;;;;;N;;;;; A3F2;YI SYLLABLE JU;Lo;0;L;;;;;N;;;;; A3F3;YI SYLLABLE JUP;Lo;0;L;;;;;N;;;;; A3F4;YI SYLLABLE JURX;Lo;0;L;;;;;N;;;;; A3F5;YI SYLLABLE JUR;Lo;0;L;;;;;N;;;;; A3F6;YI SYLLABLE JYT;Lo;0;L;;;;;N;;;;; A3F7;YI SYLLABLE JYX;Lo;0;L;;;;;N;;;;; A3F8;YI SYLLABLE JY;Lo;0;L;;;;;N;;;;; A3F9;YI SYLLABLE JYP;Lo;0;L;;;;;N;;;;; A3FA;YI SYLLABLE JYRX;Lo;0;L;;;;;N;;;;; A3FB;YI SYLLABLE JYR;Lo;0;L;;;;;N;;;;; A3FC;YI SYLLABLE QIT;Lo;0;L;;;;;N;;;;; A3FD;YI SYLLABLE QIX;Lo;0;L;;;;;N;;;;; A3FE;YI SYLLABLE QI;Lo;0;L;;;;;N;;;;; A3FF;YI SYLLABLE QIP;Lo;0;L;;;;;N;;;;; A400;YI SYLLABLE QIET;Lo;0;L;;;;;N;;;;; A401;YI SYLLABLE QIEX;Lo;0;L;;;;;N;;;;; A402;YI SYLLABLE QIE;Lo;0;L;;;;;N;;;;; A403;YI SYLLABLE QIEP;Lo;0;L;;;;;N;;;;; A404;YI SYLLABLE QUOT;Lo;0;L;;;;;N;;;;; A405;YI SYLLABLE QUOX;Lo;0;L;;;;;N;;;;; A406;YI SYLLABLE QUO;Lo;0;L;;;;;N;;;;; A407;YI SYLLABLE QUOP;Lo;0;L;;;;;N;;;;; A408;YI SYLLABLE QOT;Lo;0;L;;;;;N;;;;; A409;YI SYLLABLE QOX;Lo;0;L;;;;;N;;;;; A40A;YI SYLLABLE QO;Lo;0;L;;;;;N;;;;; A40B;YI SYLLABLE QOP;Lo;0;L;;;;;N;;;;; A40C;YI SYLLABLE QUT;Lo;0;L;;;;;N;;;;; A40D;YI SYLLABLE QUX;Lo;0;L;;;;;N;;;;; A40E;YI SYLLABLE QU;Lo;0;L;;;;;N;;;;; A40F;YI SYLLABLE QUP;Lo;0;L;;;;;N;;;;; A410;YI SYLLABLE QURX;Lo;0;L;;;;;N;;;;; A411;YI SYLLABLE QUR;Lo;0;L;;;;;N;;;;; A412;YI SYLLABLE QYT;Lo;0;L;;;;;N;;;;; A413;YI SYLLABLE QYX;Lo;0;L;;;;;N;;;;; A414;YI SYLLABLE QY;Lo;0;L;;;;;N;;;;; A415;YI SYLLABLE QYP;Lo;0;L;;;;;N;;;;; A416;YI SYLLABLE QYRX;Lo;0;L;;;;;N;;;;; A417;YI SYLLABLE QYR;Lo;0;L;;;;;N;;;;; A418;YI SYLLABLE JJIT;Lo;0;L;;;;;N;;;;; A419;YI SYLLABLE JJIX;Lo;0;L;;;;;N;;;;; A41A;YI SYLLABLE JJI;Lo;0;L;;;;;N;;;;; A41B;YI SYLLABLE JJIP;Lo;0;L;;;;;N;;;;; A41C;YI SYLLABLE JJIET;Lo;0;L;;;;;N;;;;; A41D;YI SYLLABLE JJIEX;Lo;0;L;;;;;N;;;;; A41E;YI SYLLABLE JJIE;Lo;0;L;;;;;N;;;;; A41F;YI SYLLABLE JJIEP;Lo;0;L;;;;;N;;;;; A420;YI SYLLABLE JJUOX;Lo;0;L;;;;;N;;;;; A421;YI SYLLABLE JJUO;Lo;0;L;;;;;N;;;;; A422;YI SYLLABLE JJUOP;Lo;0;L;;;;;N;;;;; A423;YI SYLLABLE JJOT;Lo;0;L;;;;;N;;;;; A424;YI SYLLABLE JJOX;Lo;0;L;;;;;N;;;;; A425;YI SYLLABLE JJO;Lo;0;L;;;;;N;;;;; A426;YI SYLLABLE JJOP;Lo;0;L;;;;;N;;;;; A427;YI SYLLABLE JJUT;Lo;0;L;;;;;N;;;;; A428;YI SYLLABLE JJUX;Lo;0;L;;;;;N;;;;; A429;YI SYLLABLE JJU;Lo;0;L;;;;;N;;;;; A42A;YI SYLLABLE JJUP;Lo;0;L;;;;;N;;;;; A42B;YI SYLLABLE JJURX;Lo;0;L;;;;;N;;;;; A42C;YI SYLLABLE JJUR;Lo;0;L;;;;;N;;;;; A42D;YI SYLLABLE JJYT;Lo;0;L;;;;;N;;;;; A42E;YI SYLLABLE JJYX;Lo;0;L;;;;;N;;;;; A42F;YI SYLLABLE JJY;Lo;0;L;;;;;N;;;;; A430;YI SYLLABLE JJYP;Lo;0;L;;;;;N;;;;; A431;YI SYLLABLE NJIT;Lo;0;L;;;;;N;;;;; A432;YI SYLLABLE NJIX;Lo;0;L;;;;;N;;;;; A433;YI SYLLABLE NJI;Lo;0;L;;;;;N;;;;; A434;YI SYLLABLE NJIP;Lo;0;L;;;;;N;;;;; A435;YI SYLLABLE NJIET;Lo;0;L;;;;;N;;;;; A436;YI SYLLABLE NJIEX;Lo;0;L;;;;;N;;;;; A437;YI SYLLABLE NJIE;Lo;0;L;;;;;N;;;;; A438;YI SYLLABLE NJIEP;Lo;0;L;;;;;N;;;;; A439;YI SYLLABLE NJUOX;Lo;0;L;;;;;N;;;;; A43A;YI SYLLABLE NJUO;Lo;0;L;;;;;N;;;;; A43B;YI SYLLABLE NJOT;Lo;0;L;;;;;N;;;;; A43C;YI SYLLABLE NJOX;Lo;0;L;;;;;N;;;;; A43D;YI SYLLABLE NJO;Lo;0;L;;;;;N;;;;; A43E;YI SYLLABLE NJOP;Lo;0;L;;;;;N;;;;; A43F;YI SYLLABLE NJUX;Lo;0;L;;;;;N;;;;; A440;YI SYLLABLE NJU;Lo;0;L;;;;;N;;;;; A441;YI SYLLABLE NJUP;Lo;0;L;;;;;N;;;;; A442;YI SYLLABLE NJURX;Lo;0;L;;;;;N;;;;; A443;YI SYLLABLE NJUR;Lo;0;L;;;;;N;;;;; A444;YI SYLLABLE NJYT;Lo;0;L;;;;;N;;;;; A445;YI SYLLABLE NJYX;Lo;0;L;;;;;N;;;;; A446;YI SYLLABLE NJY;Lo;0;L;;;;;N;;;;; A447;YI SYLLABLE NJYP;Lo;0;L;;;;;N;;;;; A448;YI SYLLABLE NJYRX;Lo;0;L;;;;;N;;;;; A449;YI SYLLABLE NJYR;Lo;0;L;;;;;N;;;;; A44A;YI SYLLABLE NYIT;Lo;0;L;;;;;N;;;;; A44B;YI SYLLABLE NYIX;Lo;0;L;;;;;N;;;;; A44C;YI SYLLABLE NYI;Lo;0;L;;;;;N;;;;; A44D;YI SYLLABLE NYIP;Lo;0;L;;;;;N;;;;; A44E;YI SYLLABLE NYIET;Lo;0;L;;;;;N;;;;; A44F;YI SYLLABLE NYIEX;Lo;0;L;;;;;N;;;;; A450;YI SYLLABLE NYIE;Lo;0;L;;;;;N;;;;; A451;YI SYLLABLE NYIEP;Lo;0;L;;;;;N;;;;; A452;YI SYLLABLE NYUOX;Lo;0;L;;;;;N;;;;; A453;YI SYLLABLE NYUO;Lo;0;L;;;;;N;;;;; A454;YI SYLLABLE NYUOP;Lo;0;L;;;;;N;;;;; A455;YI SYLLABLE NYOT;Lo;0;L;;;;;N;;;;; A456;YI SYLLABLE NYOX;Lo;0;L;;;;;N;;;;; A457;YI SYLLABLE NYO;Lo;0;L;;;;;N;;;;; A458;YI SYLLABLE NYOP;Lo;0;L;;;;;N;;;;; A459;YI SYLLABLE NYUT;Lo;0;L;;;;;N;;;;; A45A;YI SYLLABLE NYUX;Lo;0;L;;;;;N;;;;; A45B;YI SYLLABLE NYU;Lo;0;L;;;;;N;;;;; A45C;YI SYLLABLE NYUP;Lo;0;L;;;;;N;;;;; A45D;YI SYLLABLE XIT;Lo;0;L;;;;;N;;;;; A45E;YI SYLLABLE XIX;Lo;0;L;;;;;N;;;;; A45F;YI SYLLABLE XI;Lo;0;L;;;;;N;;;;; A460;YI SYLLABLE XIP;Lo;0;L;;;;;N;;;;; A461;YI SYLLABLE XIET;Lo;0;L;;;;;N;;;;; A462;YI SYLLABLE XIEX;Lo;0;L;;;;;N;;;;; A463;YI SYLLABLE XIE;Lo;0;L;;;;;N;;;;; A464;YI SYLLABLE XIEP;Lo;0;L;;;;;N;;;;; A465;YI SYLLABLE XUOX;Lo;0;L;;;;;N;;;;; A466;YI SYLLABLE XUO;Lo;0;L;;;;;N;;;;; A467;YI SYLLABLE XOT;Lo;0;L;;;;;N;;;;; A468;YI SYLLABLE XOX;Lo;0;L;;;;;N;;;;; A469;YI SYLLABLE XO;Lo;0;L;;;;;N;;;;; A46A;YI SYLLABLE XOP;Lo;0;L;;;;;N;;;;; A46B;YI SYLLABLE XYT;Lo;0;L;;;;;N;;;;; A46C;YI SYLLABLE XYX;Lo;0;L;;;;;N;;;;; A46D;YI SYLLABLE XY;Lo;0;L;;;;;N;;;;; A46E;YI SYLLABLE XYP;Lo;0;L;;;;;N;;;;; A46F;YI SYLLABLE XYRX;Lo;0;L;;;;;N;;;;; A470;YI SYLLABLE XYR;Lo;0;L;;;;;N;;;;; A471;YI SYLLABLE YIT;Lo;0;L;;;;;N;;;;; A472;YI SYLLABLE YIX;Lo;0;L;;;;;N;;;;; A473;YI SYLLABLE YI;Lo;0;L;;;;;N;;;;; A474;YI SYLLABLE YIP;Lo;0;L;;;;;N;;;;; A475;YI SYLLABLE YIET;Lo;0;L;;;;;N;;;;; A476;YI SYLLABLE YIEX;Lo;0;L;;;;;N;;;;; A477;YI SYLLABLE YIE;Lo;0;L;;;;;N;;;;; A478;YI SYLLABLE YIEP;Lo;0;L;;;;;N;;;;; A479;YI SYLLABLE YUOT;Lo;0;L;;;;;N;;;;; A47A;YI SYLLABLE YUOX;Lo;0;L;;;;;N;;;;; A47B;YI SYLLABLE YUO;Lo;0;L;;;;;N;;;;; A47C;YI SYLLABLE YUOP;Lo;0;L;;;;;N;;;;; A47D;YI SYLLABLE YOT;Lo;0;L;;;;;N;;;;; A47E;YI SYLLABLE YOX;Lo;0;L;;;;;N;;;;; A47F;YI SYLLABLE YO;Lo;0;L;;;;;N;;;;; A480;YI SYLLABLE YOP;Lo;0;L;;;;;N;;;;; A481;YI SYLLABLE YUT;Lo;0;L;;;;;N;;;;; A482;YI SYLLABLE YUX;Lo;0;L;;;;;N;;;;; A483;YI SYLLABLE YU;Lo;0;L;;;;;N;;;;; A484;YI SYLLABLE YUP;Lo;0;L;;;;;N;;;;; A485;YI SYLLABLE YURX;Lo;0;L;;;;;N;;;;; A486;YI SYLLABLE YUR;Lo;0;L;;;;;N;;;;; A487;YI SYLLABLE YYT;Lo;0;L;;;;;N;;;;; A488;YI SYLLABLE YYX;Lo;0;L;;;;;N;;;;; A489;YI SYLLABLE YY;Lo;0;L;;;;;N;;;;; A48A;YI SYLLABLE YYP;Lo;0;L;;;;;N;;;;; A48B;YI SYLLABLE YYRX;Lo;0;L;;;;;N;;;;; A48C;YI SYLLABLE YYR;Lo;0;L;;;;;N;;;;; A490;YI RADICAL QOT;So;0;ON;;;;;N;;;;; A491;YI RADICAL LI;So;0;ON;;;;;N;;;;; A492;YI RADICAL KIT;So;0;ON;;;;;N;;;;; A493;YI RADICAL NYIP;So;0;ON;;;;;N;;;;; A494;YI RADICAL CYP;So;0;ON;;;;;N;;;;; A495;YI RADICAL SSI;So;0;ON;;;;;N;;;;; A496;YI RADICAL GGOP;So;0;ON;;;;;N;;;;; A497;YI RADICAL GEP;So;0;ON;;;;;N;;;;; A498;YI RADICAL MI;So;0;ON;;;;;N;;;;; A499;YI RADICAL HXIT;So;0;ON;;;;;N;;;;; A49A;YI RADICAL LYR;So;0;ON;;;;;N;;;;; A49B;YI RADICAL BBUT;So;0;ON;;;;;N;;;;; A49C;YI RADICAL MOP;So;0;ON;;;;;N;;;;; A49D;YI RADICAL YO;So;0;ON;;;;;N;;;;; A49E;YI RADICAL PUT;So;0;ON;;;;;N;;;;; A49F;YI RADICAL HXUO;So;0;ON;;;;;N;;;;; A4A0;YI RADICAL TAT;So;0;ON;;;;;N;;;;; A4A1;YI RADICAL GA;So;0;ON;;;;;N;;;;; A4A4;YI RADICAL DDUR;So;0;ON;;;;;N;;;;; A4A5;YI RADICAL BUR;So;0;ON;;;;;N;;;;; A4A6;YI RADICAL GGUO;So;0;ON;;;;;N;;;;; A4A7;YI RADICAL NYOP;So;0;ON;;;;;N;;;;; A4A8;YI RADICAL TU;So;0;ON;;;;;N;;;;; A4A9;YI RADICAL OP;So;0;ON;;;;;N;;;;; A4AA;YI RADICAL JJUT;So;0;ON;;;;;N;;;;; A4AB;YI RADICAL ZOT;So;0;ON;;;;;N;;;;; A4AC;YI RADICAL PYT;So;0;ON;;;;;N;;;;; A4AD;YI RADICAL HMO;So;0;ON;;;;;N;;;;; A4AE;YI RADICAL YIT;So;0;ON;;;;;N;;;;; A4AF;YI RADICAL VUR;So;0;ON;;;;;N;;;;; A4B0;YI RADICAL SHY;So;0;ON;;;;;N;;;;; A4B1;YI RADICAL VEP;So;0;ON;;;;;N;;;;; A4B2;YI RADICAL ZA;So;0;ON;;;;;N;;;;; A4B3;YI RADICAL JO;So;0;ON;;;;;N;;;;; A4B5;YI RADICAL JJY;So;0;ON;;;;;N;;;;; A4B6;YI RADICAL GOT;So;0;ON;;;;;N;;;;; A4B7;YI RADICAL JJIE;So;0;ON;;;;;N;;;;; A4B8;YI RADICAL WO;So;0;ON;;;;;N;;;;; A4B9;YI RADICAL DU;So;0;ON;;;;;N;;;;; A4BA;YI RADICAL SHUR;So;0;ON;;;;;N;;;;; A4BB;YI RADICAL LIE;So;0;ON;;;;;N;;;;; A4BC;YI RADICAL CY;So;0;ON;;;;;N;;;;; A4BD;YI RADICAL CUOP;So;0;ON;;;;;N;;;;; A4BE;YI RADICAL CIP;So;0;ON;;;;;N;;;;; A4BF;YI RADICAL HXOP;So;0;ON;;;;;N;;;;; A4C0;YI RADICAL SHAT;So;0;ON;;;;;N;;;;; A4C2;YI RADICAL SHOP;So;0;ON;;;;;N;;;;; A4C3;YI RADICAL CHE;So;0;ON;;;;;N;;;;; A4C4;YI RADICAL ZZIET;So;0;ON;;;;;N;;;;; A4C6;YI RADICAL KE;So;0;ON;;;;;N;;;;; AC00;;Lo;0;L;;;;;N;;;;; D7A3;;Lo;0;L;;;;;N;;;;; D800;;Cs;0;L;;;;;N;;;;; DB7F;;Cs;0;L;;;;;N;;;;; DB80;;Cs;0;L;;;;;N;;;;; DBFF;;Cs;0;L;;;;;N;;;;; DC00;;Cs;0;L;;;;;N;;;;; DFFF;;Cs;0;L;;;;;N;;;;; E000;;Co;0;L;;;;;N;;;;; F8FF;;Co;0;L;;;;;N;;;;; F900;CJK COMPATIBILITY IDEOGRAPH-F900;Lo;0;L;8C48;;;;N;;;;; F901;CJK COMPATIBILITY IDEOGRAPH-F901;Lo;0;L;66F4;;;;N;;;;; F902;CJK COMPATIBILITY IDEOGRAPH-F902;Lo;0;L;8ECA;;;;N;;;;; F903;CJK COMPATIBILITY IDEOGRAPH-F903;Lo;0;L;8CC8;;;;N;;;;; F904;CJK COMPATIBILITY IDEOGRAPH-F904;Lo;0;L;6ED1;;;;N;;;;; F905;CJK COMPATIBILITY IDEOGRAPH-F905;Lo;0;L;4E32;;;;N;;;;; F906;CJK COMPATIBILITY IDEOGRAPH-F906;Lo;0;L;53E5;;;;N;;;;; F907;CJK COMPATIBILITY IDEOGRAPH-F907;Lo;0;L;9F9C;;;;N;;;;; F908;CJK COMPATIBILITY IDEOGRAPH-F908;Lo;0;L;9F9C;;;;N;;;;; F909;CJK COMPATIBILITY IDEOGRAPH-F909;Lo;0;L;5951;;;;N;;;;; F90A;CJK COMPATIBILITY IDEOGRAPH-F90A;Lo;0;L;91D1;;;;N;;;;; F90B;CJK COMPATIBILITY IDEOGRAPH-F90B;Lo;0;L;5587;;;;N;;;;; F90C;CJK COMPATIBILITY IDEOGRAPH-F90C;Lo;0;L;5948;;;;N;;;;; F90D;CJK COMPATIBILITY IDEOGRAPH-F90D;Lo;0;L;61F6;;;;N;;;;; F90E;CJK COMPATIBILITY IDEOGRAPH-F90E;Lo;0;L;7669;;;;N;;;;; F90F;CJK COMPATIBILITY IDEOGRAPH-F90F;Lo;0;L;7F85;;;;N;;;;; F910;CJK COMPATIBILITY IDEOGRAPH-F910;Lo;0;L;863F;;;;N;;;;; F911;CJK COMPATIBILITY IDEOGRAPH-F911;Lo;0;L;87BA;;;;N;;;;; F912;CJK COMPATIBILITY IDEOGRAPH-F912;Lo;0;L;88F8;;;;N;;;;; F913;CJK COMPATIBILITY IDEOGRAPH-F913;Lo;0;L;908F;;;;N;;;;; F914;CJK COMPATIBILITY IDEOGRAPH-F914;Lo;0;L;6A02;;;;N;;;;; F915;CJK COMPATIBILITY IDEOGRAPH-F915;Lo;0;L;6D1B;;;;N;;;;; F916;CJK COMPATIBILITY IDEOGRAPH-F916;Lo;0;L;70D9;;;;N;;;;; F917;CJK COMPATIBILITY IDEOGRAPH-F917;Lo;0;L;73DE;;;;N;;;;; F918;CJK COMPATIBILITY IDEOGRAPH-F918;Lo;0;L;843D;;;;N;;;;; F919;CJK COMPATIBILITY IDEOGRAPH-F919;Lo;0;L;916A;;;;N;;;;; F91A;CJK COMPATIBILITY IDEOGRAPH-F91A;Lo;0;L;99F1;;;;N;;;;; F91B;CJK COMPATIBILITY IDEOGRAPH-F91B;Lo;0;L;4E82;;;;N;;;;; F91C;CJK COMPATIBILITY IDEOGRAPH-F91C;Lo;0;L;5375;;;;N;;;;; F91D;CJK COMPATIBILITY IDEOGRAPH-F91D;Lo;0;L;6B04;;;;N;;;;; F91E;CJK COMPATIBILITY IDEOGRAPH-F91E;Lo;0;L;721B;;;;N;;;;; F91F;CJK COMPATIBILITY IDEOGRAPH-F91F;Lo;0;L;862D;;;;N;;;;; F920;CJK COMPATIBILITY IDEOGRAPH-F920;Lo;0;L;9E1E;;;;N;;;;; F921;CJK COMPATIBILITY IDEOGRAPH-F921;Lo;0;L;5D50;;;;N;;;;; F922;CJK COMPATIBILITY IDEOGRAPH-F922;Lo;0;L;6FEB;;;;N;;;;; F923;CJK COMPATIBILITY IDEOGRAPH-F923;Lo;0;L;85CD;;;;N;;;;; F924;CJK COMPATIBILITY IDEOGRAPH-F924;Lo;0;L;8964;;;;N;;;;; F925;CJK COMPATIBILITY IDEOGRAPH-F925;Lo;0;L;62C9;;;;N;;;;; F926;CJK COMPATIBILITY IDEOGRAPH-F926;Lo;0;L;81D8;;;;N;;;;; F927;CJK COMPATIBILITY IDEOGRAPH-F927;Lo;0;L;881F;;;;N;;;;; F928;CJK COMPATIBILITY IDEOGRAPH-F928;Lo;0;L;5ECA;;;;N;;;;; F929;CJK COMPATIBILITY IDEOGRAPH-F929;Lo;0;L;6717;;;;N;;;;; F92A;CJK COMPATIBILITY IDEOGRAPH-F92A;Lo;0;L;6D6A;;;;N;;;;; F92B;CJK COMPATIBILITY IDEOGRAPH-F92B;Lo;0;L;72FC;;;;N;;;;; F92C;CJK COMPATIBILITY IDEOGRAPH-F92C;Lo;0;L;90CE;;;;N;;;;; F92D;CJK COMPATIBILITY IDEOGRAPH-F92D;Lo;0;L;4F86;;;;N;;;;; F92E;CJK COMPATIBILITY IDEOGRAPH-F92E;Lo;0;L;51B7;;;;N;;;;; F92F;CJK COMPATIBILITY IDEOGRAPH-F92F;Lo;0;L;52DE;;;;N;;;;; F930;CJK COMPATIBILITY IDEOGRAPH-F930;Lo;0;L;64C4;;;;N;;;;; F931;CJK COMPATIBILITY IDEOGRAPH-F931;Lo;0;L;6AD3;;;;N;;;;; F932;CJK COMPATIBILITY IDEOGRAPH-F932;Lo;0;L;7210;;;;N;;;;; F933;CJK COMPATIBILITY IDEOGRAPH-F933;Lo;0;L;76E7;;;;N;;;;; F934;CJK COMPATIBILITY IDEOGRAPH-F934;Lo;0;L;8001;;;;N;;;;; F935;CJK COMPATIBILITY IDEOGRAPH-F935;Lo;0;L;8606;;;;N;;;;; F936;CJK COMPATIBILITY IDEOGRAPH-F936;Lo;0;L;865C;;;;N;;;;; F937;CJK COMPATIBILITY IDEOGRAPH-F937;Lo;0;L;8DEF;;;;N;;;;; F938;CJK COMPATIBILITY IDEOGRAPH-F938;Lo;0;L;9732;;;;N;;;;; F939;CJK COMPATIBILITY IDEOGRAPH-F939;Lo;0;L;9B6F;;;;N;;;;; F93A;CJK COMPATIBILITY IDEOGRAPH-F93A;Lo;0;L;9DFA;;;;N;;;;; F93B;CJK COMPATIBILITY IDEOGRAPH-F93B;Lo;0;L;788C;;;;N;;;;; F93C;CJK COMPATIBILITY IDEOGRAPH-F93C;Lo;0;L;797F;;;;N;;;;; F93D;CJK COMPATIBILITY IDEOGRAPH-F93D;Lo;0;L;7DA0;;;;N;;;;; F93E;CJK COMPATIBILITY IDEOGRAPH-F93E;Lo;0;L;83C9;;;;N;;;;; F93F;CJK COMPATIBILITY IDEOGRAPH-F93F;Lo;0;L;9304;;;;N;;;;; F940;CJK COMPATIBILITY IDEOGRAPH-F940;Lo;0;L;9E7F;;;;N;;;;; F941;CJK COMPATIBILITY IDEOGRAPH-F941;Lo;0;L;8AD6;;;;N;;;;; F942;CJK COMPATIBILITY IDEOGRAPH-F942;Lo;0;L;58DF;;;;N;;;;; F943;CJK COMPATIBILITY IDEOGRAPH-F943;Lo;0;L;5F04;;;;N;;;;; F944;CJK COMPATIBILITY IDEOGRAPH-F944;Lo;0;L;7C60;;;;N;;;;; F945;CJK COMPATIBILITY IDEOGRAPH-F945;Lo;0;L;807E;;;;N;;;;; F946;CJK COMPATIBILITY IDEOGRAPH-F946;Lo;0;L;7262;;;;N;;;;; F947;CJK COMPATIBILITY IDEOGRAPH-F947;Lo;0;L;78CA;;;;N;;;;; F948;CJK COMPATIBILITY IDEOGRAPH-F948;Lo;0;L;8CC2;;;;N;;;;; F949;CJK COMPATIBILITY IDEOGRAPH-F949;Lo;0;L;96F7;;;;N;;;;; F94A;CJK COMPATIBILITY IDEOGRAPH-F94A;Lo;0;L;58D8;;;;N;;;;; F94B;CJK COMPATIBILITY IDEOGRAPH-F94B;Lo;0;L;5C62;;;;N;;;;; F94C;CJK COMPATIBILITY IDEOGRAPH-F94C;Lo;0;L;6A13;;;;N;;;;; F94D;CJK COMPATIBILITY IDEOGRAPH-F94D;Lo;0;L;6DDA;;;;N;;;;; F94E;CJK COMPATIBILITY IDEOGRAPH-F94E;Lo;0;L;6F0F;;;;N;;;;; F94F;CJK COMPATIBILITY IDEOGRAPH-F94F;Lo;0;L;7D2F;;;;N;;;;; F950;CJK COMPATIBILITY IDEOGRAPH-F950;Lo;0;L;7E37;;;;N;;;;; F951;CJK COMPATIBILITY IDEOGRAPH-F951;Lo;0;L;96FB;;;;N;;;;; F952;CJK COMPATIBILITY IDEOGRAPH-F952;Lo;0;L;52D2;;;;N;;;;; F953;CJK COMPATIBILITY IDEOGRAPH-F953;Lo;0;L;808B;;;;N;;;;; F954;CJK COMPATIBILITY IDEOGRAPH-F954;Lo;0;L;51DC;;;;N;;;;; F955;CJK COMPATIBILITY IDEOGRAPH-F955;Lo;0;L;51CC;;;;N;;;;; F956;CJK COMPATIBILITY IDEOGRAPH-F956;Lo;0;L;7A1C;;;;N;;;;; F957;CJK COMPATIBILITY IDEOGRAPH-F957;Lo;0;L;7DBE;;;;N;;;;; F958;CJK COMPATIBILITY IDEOGRAPH-F958;Lo;0;L;83F1;;;;N;;;;; F959;CJK COMPATIBILITY IDEOGRAPH-F959;Lo;0;L;9675;;;;N;;;;; F95A;CJK COMPATIBILITY IDEOGRAPH-F95A;Lo;0;L;8B80;;;;N;;;;; F95B;CJK COMPATIBILITY IDEOGRAPH-F95B;Lo;0;L;62CF;;;;N;;;;; F95C;CJK COMPATIBILITY IDEOGRAPH-F95C;Lo;0;L;6A02;;;;N;;;;; F95D;CJK COMPATIBILITY IDEOGRAPH-F95D;Lo;0;L;8AFE;;;;N;;;;; F95E;CJK COMPATIBILITY IDEOGRAPH-F95E;Lo;0;L;4E39;;;;N;;;;; F95F;CJK COMPATIBILITY IDEOGRAPH-F95F;Lo;0;L;5BE7;;;;N;;;;; F960;CJK COMPATIBILITY IDEOGRAPH-F960;Lo;0;L;6012;;;;N;;;;; F961;CJK COMPATIBILITY IDEOGRAPH-F961;Lo;0;L;7387;;;;N;;;;; F962;CJK COMPATIBILITY IDEOGRAPH-F962;Lo;0;L;7570;;;;N;;;;; F963;CJK COMPATIBILITY IDEOGRAPH-F963;Lo;0;L;5317;;;;N;;;;; F964;CJK COMPATIBILITY IDEOGRAPH-F964;Lo;0;L;78FB;;;;N;;;;; F965;CJK COMPATIBILITY IDEOGRAPH-F965;Lo;0;L;4FBF;;;;N;;;;; F966;CJK COMPATIBILITY IDEOGRAPH-F966;Lo;0;L;5FA9;;;;N;;;;; F967;CJK COMPATIBILITY IDEOGRAPH-F967;Lo;0;L;4E0D;;;;N;;;;; F968;CJK COMPATIBILITY IDEOGRAPH-F968;Lo;0;L;6CCC;;;;N;;;;; F969;CJK COMPATIBILITY IDEOGRAPH-F969;Lo;0;L;6578;;;;N;;;;; F96A;CJK COMPATIBILITY IDEOGRAPH-F96A;Lo;0;L;7D22;;;;N;;;;; F96B;CJK COMPATIBILITY IDEOGRAPH-F96B;Lo;0;L;53C3;;;;N;;;;; F96C;CJK COMPATIBILITY IDEOGRAPH-F96C;Lo;0;L;585E;;;;N;;;;; F96D;CJK COMPATIBILITY IDEOGRAPH-F96D;Lo;0;L;7701;;;;N;;;;; F96E;CJK COMPATIBILITY IDEOGRAPH-F96E;Lo;0;L;8449;;;;N;;;;; F96F;CJK COMPATIBILITY IDEOGRAPH-F96F;Lo;0;L;8AAA;;;;N;;;;; F970;CJK COMPATIBILITY IDEOGRAPH-F970;Lo;0;L;6BBA;;;;N;;;;; F971;CJK COMPATIBILITY IDEOGRAPH-F971;Lo;0;L;8FB0;;;;N;;;;; F972;CJK COMPATIBILITY IDEOGRAPH-F972;Lo;0;L;6C88;;;;N;;;;; F973;CJK COMPATIBILITY IDEOGRAPH-F973;Lo;0;L;62FE;;;;N;;;;; F974;CJK COMPATIBILITY IDEOGRAPH-F974;Lo;0;L;82E5;;;;N;;;;; F975;CJK COMPATIBILITY IDEOGRAPH-F975;Lo;0;L;63A0;;;;N;;;;; F976;CJK COMPATIBILITY IDEOGRAPH-F976;Lo;0;L;7565;;;;N;;;;; F977;CJK COMPATIBILITY IDEOGRAPH-F977;Lo;0;L;4EAE;;;;N;;;;; F978;CJK COMPATIBILITY IDEOGRAPH-F978;Lo;0;L;5169;;;;N;;;;; F979;CJK COMPATIBILITY IDEOGRAPH-F979;Lo;0;L;51C9;;;;N;;;;; F97A;CJK COMPATIBILITY IDEOGRAPH-F97A;Lo;0;L;6881;;;;N;;;;; F97B;CJK COMPATIBILITY IDEOGRAPH-F97B;Lo;0;L;7CE7;;;;N;;;;; F97C;CJK COMPATIBILITY IDEOGRAPH-F97C;Lo;0;L;826F;;;;N;;;;; F97D;CJK COMPATIBILITY IDEOGRAPH-F97D;Lo;0;L;8AD2;;;;N;;;;; F97E;CJK COMPATIBILITY IDEOGRAPH-F97E;Lo;0;L;91CF;;;;N;;;;; F97F;CJK COMPATIBILITY IDEOGRAPH-F97F;Lo;0;L;52F5;;;;N;;;;; F980;CJK COMPATIBILITY IDEOGRAPH-F980;Lo;0;L;5442;;;;N;;;;; F981;CJK COMPATIBILITY IDEOGRAPH-F981;Lo;0;L;5973;;;;N;;;;; F982;CJK COMPATIBILITY IDEOGRAPH-F982;Lo;0;L;5EEC;;;;N;;;;; F983;CJK COMPATIBILITY IDEOGRAPH-F983;Lo;0;L;65C5;;;;N;;;;; F984;CJK COMPATIBILITY IDEOGRAPH-F984;Lo;0;L;6FFE;;;;N;;;;; F985;CJK COMPATIBILITY IDEOGRAPH-F985;Lo;0;L;792A;;;;N;;;;; F986;CJK COMPATIBILITY IDEOGRAPH-F986;Lo;0;L;95AD;;;;N;;;;; F987;CJK COMPATIBILITY IDEOGRAPH-F987;Lo;0;L;9A6A;;;;N;;;;; F988;CJK COMPATIBILITY IDEOGRAPH-F988;Lo;0;L;9E97;;;;N;;;;; F989;CJK COMPATIBILITY IDEOGRAPH-F989;Lo;0;L;9ECE;;;;N;;;;; F98A;CJK COMPATIBILITY IDEOGRAPH-F98A;Lo;0;L;529B;;;;N;;;;; F98B;CJK COMPATIBILITY IDEOGRAPH-F98B;Lo;0;L;66C6;;;;N;;;;; F98C;CJK COMPATIBILITY IDEOGRAPH-F98C;Lo;0;L;6B77;;;;N;;;;; F98D;CJK COMPATIBILITY IDEOGRAPH-F98D;Lo;0;L;8F62;;;;N;;;;; F98E;CJK COMPATIBILITY IDEOGRAPH-F98E;Lo;0;L;5E74;;;;N;;;;; F98F;CJK COMPATIBILITY IDEOGRAPH-F98F;Lo;0;L;6190;;;;N;;;;; F990;CJK COMPATIBILITY IDEOGRAPH-F990;Lo;0;L;6200;;;;N;;;;; F991;CJK COMPATIBILITY IDEOGRAPH-F991;Lo;0;L;649A;;;;N;;;;; F992;CJK COMPATIBILITY IDEOGRAPH-F992;Lo;0;L;6F23;;;;N;;;;; F993;CJK COMPATIBILITY IDEOGRAPH-F993;Lo;0;L;7149;;;;N;;;;; F994;CJK COMPATIBILITY IDEOGRAPH-F994;Lo;0;L;7489;;;;N;;;;; F995;CJK COMPATIBILITY IDEOGRAPH-F995;Lo;0;L;79CA;;;;N;;;;; F996;CJK COMPATIBILITY IDEOGRAPH-F996;Lo;0;L;7DF4;;;;N;;;;; F997;CJK COMPATIBILITY IDEOGRAPH-F997;Lo;0;L;806F;;;;N;;;;; F998;CJK COMPATIBILITY IDEOGRAPH-F998;Lo;0;L;8F26;;;;N;;;;; F999;CJK COMPATIBILITY IDEOGRAPH-F999;Lo;0;L;84EE;;;;N;;;;; F99A;CJK COMPATIBILITY IDEOGRAPH-F99A;Lo;0;L;9023;;;;N;;;;; F99B;CJK COMPATIBILITY IDEOGRAPH-F99B;Lo;0;L;934A;;;;N;;;;; F99C;CJK COMPATIBILITY IDEOGRAPH-F99C;Lo;0;L;5217;;;;N;;;;; F99D;CJK COMPATIBILITY IDEOGRAPH-F99D;Lo;0;L;52A3;;;;N;;;;; F99E;CJK COMPATIBILITY IDEOGRAPH-F99E;Lo;0;L;54BD;;;;N;;;;; F99F;CJK COMPATIBILITY IDEOGRAPH-F99F;Lo;0;L;70C8;;;;N;;;;; F9A0;CJK COMPATIBILITY IDEOGRAPH-F9A0;Lo;0;L;88C2;;;;N;;;;; F9A1;CJK COMPATIBILITY IDEOGRAPH-F9A1;Lo;0;L;8AAA;;;;N;;;;; F9A2;CJK COMPATIBILITY IDEOGRAPH-F9A2;Lo;0;L;5EC9;;;;N;;;;; F9A3;CJK COMPATIBILITY IDEOGRAPH-F9A3;Lo;0;L;5FF5;;;;N;;;;; F9A4;CJK COMPATIBILITY IDEOGRAPH-F9A4;Lo;0;L;637B;;;;N;;;;; F9A5;CJK COMPATIBILITY IDEOGRAPH-F9A5;Lo;0;L;6BAE;;;;N;;;;; F9A6;CJK COMPATIBILITY IDEOGRAPH-F9A6;Lo;0;L;7C3E;;;;N;;;;; F9A7;CJK COMPATIBILITY IDEOGRAPH-F9A7;Lo;0;L;7375;;;;N;;;;; F9A8;CJK COMPATIBILITY IDEOGRAPH-F9A8;Lo;0;L;4EE4;;;;N;;;;; F9A9;CJK COMPATIBILITY IDEOGRAPH-F9A9;Lo;0;L;56F9;;;;N;;;;; F9AA;CJK COMPATIBILITY IDEOGRAPH-F9AA;Lo;0;L;5BE7;;;;N;;;;; F9AB;CJK COMPATIBILITY IDEOGRAPH-F9AB;Lo;0;L;5DBA;;;;N;;;;; F9AC;CJK COMPATIBILITY IDEOGRAPH-F9AC;Lo;0;L;601C;;;;N;;;;; F9AD;CJK COMPATIBILITY IDEOGRAPH-F9AD;Lo;0;L;73B2;;;;N;;;;; F9AE;CJK COMPATIBILITY IDEOGRAPH-F9AE;Lo;0;L;7469;;;;N;;;;; F9AF;CJK COMPATIBILITY IDEOGRAPH-F9AF;Lo;0;L;7F9A;;;;N;;;;; F9B0;CJK COMPATIBILITY IDEOGRAPH-F9B0;Lo;0;L;8046;;;;N;;;;; F9B1;CJK COMPATIBILITY IDEOGRAPH-F9B1;Lo;0;L;9234;;;;N;;;;; F9B2;CJK COMPATIBILITY IDEOGRAPH-F9B2;Lo;0;L;96F6;;;;N;;;;; F9B3;CJK COMPATIBILITY IDEOGRAPH-F9B3;Lo;0;L;9748;;;;N;;;;; F9B4;CJK COMPATIBILITY IDEOGRAPH-F9B4;Lo;0;L;9818;;;;N;;;;; F9B5;CJK COMPATIBILITY IDEOGRAPH-F9B5;Lo;0;L;4F8B;;;;N;;;;; F9B6;CJK COMPATIBILITY IDEOGRAPH-F9B6;Lo;0;L;79AE;;;;N;;;;; F9B7;CJK COMPATIBILITY IDEOGRAPH-F9B7;Lo;0;L;91B4;;;;N;;;;; F9B8;CJK COMPATIBILITY IDEOGRAPH-F9B8;Lo;0;L;96B8;;;;N;;;;; F9B9;CJK COMPATIBILITY IDEOGRAPH-F9B9;Lo;0;L;60E1;;;;N;;;;; F9BA;CJK COMPATIBILITY IDEOGRAPH-F9BA;Lo;0;L;4E86;;;;N;;;;; F9BB;CJK COMPATIBILITY IDEOGRAPH-F9BB;Lo;0;L;50DA;;;;N;;;;; F9BC;CJK COMPATIBILITY IDEOGRAPH-F9BC;Lo;0;L;5BEE;;;;N;;;;; F9BD;CJK COMPATIBILITY IDEOGRAPH-F9BD;Lo;0;L;5C3F;;;;N;;;;; F9BE;CJK COMPATIBILITY IDEOGRAPH-F9BE;Lo;0;L;6599;;;;N;;;;; F9BF;CJK COMPATIBILITY IDEOGRAPH-F9BF;Lo;0;L;6A02;;;;N;;;;; F9C0;CJK COMPATIBILITY IDEOGRAPH-F9C0;Lo;0;L;71CE;;;;N;;;;; F9C1;CJK COMPATIBILITY IDEOGRAPH-F9C1;Lo;0;L;7642;;;;N;;;;; F9C2;CJK COMPATIBILITY IDEOGRAPH-F9C2;Lo;0;L;84FC;;;;N;;;;; F9C3;CJK COMPATIBILITY IDEOGRAPH-F9C3;Lo;0;L;907C;;;;N;;;;; F9C4;CJK COMPATIBILITY IDEOGRAPH-F9C4;Lo;0;L;9F8D;;;;N;;;;; F9C5;CJK COMPATIBILITY IDEOGRAPH-F9C5;Lo;0;L;6688;;;;N;;;;; F9C6;CJK COMPATIBILITY IDEOGRAPH-F9C6;Lo;0;L;962E;;;;N;;;;; F9C7;CJK COMPATIBILITY IDEOGRAPH-F9C7;Lo;0;L;5289;;;;N;;;;; F9C8;CJK COMPATIBILITY IDEOGRAPH-F9C8;Lo;0;L;677B;;;;N;;;;; F9C9;CJK COMPATIBILITY IDEOGRAPH-F9C9;Lo;0;L;67F3;;;;N;;;;; F9CA;CJK COMPATIBILITY IDEOGRAPH-F9CA;Lo;0;L;6D41;;;;N;;;;; F9CB;CJK COMPATIBILITY IDEOGRAPH-F9CB;Lo;0;L;6E9C;;;;N;;;;; F9CC;CJK COMPATIBILITY IDEOGRAPH-F9CC;Lo;0;L;7409;;;;N;;;;; F9CD;CJK COMPATIBILITY IDEOGRAPH-F9CD;Lo;0;L;7559;;;;N;;;;; F9CE;CJK COMPATIBILITY IDEOGRAPH-F9CE;Lo;0;L;786B;;;;N;;;;; F9CF;CJK COMPATIBILITY IDEOGRAPH-F9CF;Lo;0;L;7D10;;;;N;;;;; F9D0;CJK COMPATIBILITY IDEOGRAPH-F9D0;Lo;0;L;985E;;;;N;;;;; F9D1;CJK COMPATIBILITY IDEOGRAPH-F9D1;Lo;0;L;516D;;;;N;;;;; F9D2;CJK COMPATIBILITY IDEOGRAPH-F9D2;Lo;0;L;622E;;;;N;;;;; F9D3;CJK COMPATIBILITY IDEOGRAPH-F9D3;Lo;0;L;9678;;;;N;;;;; F9D4;CJK COMPATIBILITY IDEOGRAPH-F9D4;Lo;0;L;502B;;;;N;;;;; F9D5;CJK COMPATIBILITY IDEOGRAPH-F9D5;Lo;0;L;5D19;;;;N;;;;; F9D6;CJK COMPATIBILITY IDEOGRAPH-F9D6;Lo;0;L;6DEA;;;;N;;;;; F9D7;CJK COMPATIBILITY IDEOGRAPH-F9D7;Lo;0;L;8F2A;;;;N;;;;; F9D8;CJK COMPATIBILITY IDEOGRAPH-F9D8;Lo;0;L;5F8B;;;;N;;;;; F9D9;CJK COMPATIBILITY IDEOGRAPH-F9D9;Lo;0;L;6144;;;;N;;;;; F9DA;CJK COMPATIBILITY IDEOGRAPH-F9DA;Lo;0;L;6817;;;;N;;;;; F9DB;CJK COMPATIBILITY IDEOGRAPH-F9DB;Lo;0;L;7387;;;;N;;;;; F9DC;CJK COMPATIBILITY IDEOGRAPH-F9DC;Lo;0;L;9686;;;;N;;;;; F9DD;CJK COMPATIBILITY IDEOGRAPH-F9DD;Lo;0;L;5229;;;;N;;;;; F9DE;CJK COMPATIBILITY IDEOGRAPH-F9DE;Lo;0;L;540F;;;;N;;;;; F9DF;CJK COMPATIBILITY IDEOGRAPH-F9DF;Lo;0;L;5C65;;;;N;;;;; F9E0;CJK COMPATIBILITY IDEOGRAPH-F9E0;Lo;0;L;6613;;;;N;;;;; F9E1;CJK COMPATIBILITY IDEOGRAPH-F9E1;Lo;0;L;674E;;;;N;;;;; F9E2;CJK COMPATIBILITY IDEOGRAPH-F9E2;Lo;0;L;68A8;;;;N;;;;; F9E3;CJK COMPATIBILITY IDEOGRAPH-F9E3;Lo;0;L;6CE5;;;;N;;;;; F9E4;CJK COMPATIBILITY IDEOGRAPH-F9E4;Lo;0;L;7406;;;;N;;;;; F9E5;CJK COMPATIBILITY IDEOGRAPH-F9E5;Lo;0;L;75E2;;;;N;;;;; F9E6;CJK COMPATIBILITY IDEOGRAPH-F9E6;Lo;0;L;7F79;;;;N;;;;; F9E7;CJK COMPATIBILITY IDEOGRAPH-F9E7;Lo;0;L;88CF;;;;N;;;;; F9E8;CJK COMPATIBILITY IDEOGRAPH-F9E8;Lo;0;L;88E1;;;;N;;;;; F9E9;CJK COMPATIBILITY IDEOGRAPH-F9E9;Lo;0;L;91CC;;;;N;;;;; F9EA;CJK COMPATIBILITY IDEOGRAPH-F9EA;Lo;0;L;96E2;;;;N;;;;; F9EB;CJK COMPATIBILITY IDEOGRAPH-F9EB;Lo;0;L;533F;;;;N;;;;; F9EC;CJK COMPATIBILITY IDEOGRAPH-F9EC;Lo;0;L;6EBA;;;;N;;;;; F9ED;CJK COMPATIBILITY IDEOGRAPH-F9ED;Lo;0;L;541D;;;;N;;;;; F9EE;CJK COMPATIBILITY IDEOGRAPH-F9EE;Lo;0;L;71D0;;;;N;;;;; F9EF;CJK COMPATIBILITY IDEOGRAPH-F9EF;Lo;0;L;7498;;;;N;;;;; F9F0;CJK COMPATIBILITY IDEOGRAPH-F9F0;Lo;0;L;85FA;;;;N;;;;; F9F1;CJK COMPATIBILITY IDEOGRAPH-F9F1;Lo;0;L;96A3;;;;N;;;;; F9F2;CJK COMPATIBILITY IDEOGRAPH-F9F2;Lo;0;L;9C57;;;;N;;;;; F9F3;CJK COMPATIBILITY IDEOGRAPH-F9F3;Lo;0;L;9E9F;;;;N;;;;; F9F4;CJK COMPATIBILITY IDEOGRAPH-F9F4;Lo;0;L;6797;;;;N;;;;; F9F5;CJK COMPATIBILITY IDEOGRAPH-F9F5;Lo;0;L;6DCB;;;;N;;;;; F9F6;CJK COMPATIBILITY IDEOGRAPH-F9F6;Lo;0;L;81E8;;;;N;;;;; F9F7;CJK COMPATIBILITY IDEOGRAPH-F9F7;Lo;0;L;7ACB;;;;N;;;;; F9F8;CJK COMPATIBILITY IDEOGRAPH-F9F8;Lo;0;L;7B20;;;;N;;;;; F9F9;CJK COMPATIBILITY IDEOGRAPH-F9F9;Lo;0;L;7C92;;;;N;;;;; F9FA;CJK COMPATIBILITY IDEOGRAPH-F9FA;Lo;0;L;72C0;;;;N;;;;; F9FB;CJK COMPATIBILITY IDEOGRAPH-F9FB;Lo;0;L;7099;;;;N;;;;; F9FC;CJK COMPATIBILITY IDEOGRAPH-F9FC;Lo;0;L;8B58;;;;N;;;;; F9FD;CJK COMPATIBILITY IDEOGRAPH-F9FD;Lo;0;L;4EC0;;;;N;;;;; F9FE;CJK COMPATIBILITY IDEOGRAPH-F9FE;Lo;0;L;8336;;;;N;;;;; F9FF;CJK COMPATIBILITY IDEOGRAPH-F9FF;Lo;0;L;523A;;;;N;;;;; FA00;CJK COMPATIBILITY IDEOGRAPH-FA00;Lo;0;L;5207;;;;N;;;;; FA01;CJK COMPATIBILITY IDEOGRAPH-FA01;Lo;0;L;5EA6;;;;N;;;;; FA02;CJK COMPATIBILITY IDEOGRAPH-FA02;Lo;0;L;62D3;;;;N;;;;; FA03;CJK COMPATIBILITY IDEOGRAPH-FA03;Lo;0;L;7CD6;;;;N;;;;; FA04;CJK COMPATIBILITY IDEOGRAPH-FA04;Lo;0;L;5B85;;;;N;;;;; FA05;CJK COMPATIBILITY IDEOGRAPH-FA05;Lo;0;L;6D1E;;;;N;;;;; FA06;CJK COMPATIBILITY IDEOGRAPH-FA06;Lo;0;L;66B4;;;;N;;;;; FA07;CJK COMPATIBILITY IDEOGRAPH-FA07;Lo;0;L;8F3B;;;;N;;;;; FA08;CJK COMPATIBILITY IDEOGRAPH-FA08;Lo;0;L;884C;;;;N;;;;; FA09;CJK COMPATIBILITY IDEOGRAPH-FA09;Lo;0;L;964D;;;;N;;;;; FA0A;CJK COMPATIBILITY IDEOGRAPH-FA0A;Lo;0;L;898B;;;;N;;;;; FA0B;CJK COMPATIBILITY IDEOGRAPH-FA0B;Lo;0;L;5ED3;;;;N;;;;; FA0C;CJK COMPATIBILITY IDEOGRAPH-FA0C;Lo;0;L;5140;;;;N;;;;; FA0D;CJK COMPATIBILITY IDEOGRAPH-FA0D;Lo;0;L;55C0;;;;N;;;;; FA0E;CJK COMPATIBILITY IDEOGRAPH-FA0E;Lo;0;L;;;;;N;;;;; FA0F;CJK COMPATIBILITY IDEOGRAPH-FA0F;Lo;0;L;;;;;N;;;;; FA10;CJK COMPATIBILITY IDEOGRAPH-FA10;Lo;0;L;585A;;;;N;;;;; FA11;CJK COMPATIBILITY IDEOGRAPH-FA11;Lo;0;L;;;;;N;;;;; FA12;CJK COMPATIBILITY IDEOGRAPH-FA12;Lo;0;L;6674;;;;N;;;;; FA13;CJK COMPATIBILITY IDEOGRAPH-FA13;Lo;0;L;;;;;N;;;;; FA14;CJK COMPATIBILITY IDEOGRAPH-FA14;Lo;0;L;;;;;N;;;;; FA15;CJK COMPATIBILITY IDEOGRAPH-FA15;Lo;0;L;51DE;;;;N;;;;; FA16;CJK COMPATIBILITY IDEOGRAPH-FA16;Lo;0;L;732A;;;;N;;;;; FA17;CJK COMPATIBILITY IDEOGRAPH-FA17;Lo;0;L;76CA;;;;N;;;;; FA18;CJK COMPATIBILITY IDEOGRAPH-FA18;Lo;0;L;793C;;;;N;;;;; FA19;CJK COMPATIBILITY IDEOGRAPH-FA19;Lo;0;L;795E;;;;N;;;;; FA1A;CJK COMPATIBILITY IDEOGRAPH-FA1A;Lo;0;L;7965;;;;N;;;;; FA1B;CJK COMPATIBILITY IDEOGRAPH-FA1B;Lo;0;L;798F;;;;N;;;;; FA1C;CJK COMPATIBILITY IDEOGRAPH-FA1C;Lo;0;L;9756;;;;N;;;;; FA1D;CJK COMPATIBILITY IDEOGRAPH-FA1D;Lo;0;L;7CBE;;;;N;;;;; FA1E;CJK COMPATIBILITY IDEOGRAPH-FA1E;Lo;0;L;7FBD;;;;N;;;;; FA1F;CJK COMPATIBILITY IDEOGRAPH-FA1F;Lo;0;L;;;;;N;;*;;; FA20;CJK COMPATIBILITY IDEOGRAPH-FA20;Lo;0;L;8612;;;;N;;;;; FA21;CJK COMPATIBILITY IDEOGRAPH-FA21;Lo;0;L;;;;;N;;;;; FA22;CJK COMPATIBILITY IDEOGRAPH-FA22;Lo;0;L;8AF8;;;;N;;;;; FA23;CJK COMPATIBILITY IDEOGRAPH-FA23;Lo;0;L;;;;;N;;*;;; FA24;CJK COMPATIBILITY IDEOGRAPH-FA24;Lo;0;L;;;;;N;;;;; FA25;CJK COMPATIBILITY IDEOGRAPH-FA25;Lo;0;L;9038;;;;N;;;;; FA26;CJK COMPATIBILITY IDEOGRAPH-FA26;Lo;0;L;90FD;;;;N;;;;; FA27;CJK COMPATIBILITY IDEOGRAPH-FA27;Lo;0;L;;;;;N;;;;; FA28;CJK COMPATIBILITY IDEOGRAPH-FA28;Lo;0;L;;;;;N;;;;; FA29;CJK COMPATIBILITY IDEOGRAPH-FA29;Lo;0;L;;;;;N;;;;; FA2A;CJK COMPATIBILITY IDEOGRAPH-FA2A;Lo;0;L;98EF;;;;N;;;;; FA2B;CJK COMPATIBILITY IDEOGRAPH-FA2B;Lo;0;L;98FC;;;;N;;;;; FA2C;CJK COMPATIBILITY IDEOGRAPH-FA2C;Lo;0;L;9928;;;;N;;;;; FA2D;CJK COMPATIBILITY IDEOGRAPH-FA2D;Lo;0;L;9DB4;;;;N;;;;; FB00;LATIN SMALL LIGATURE FF;Ll;0;L; 0066 0066;;;;N;;;;; FB01;LATIN SMALL LIGATURE FI;Ll;0;L; 0066 0069;;;;N;;;;; FB02;LATIN SMALL LIGATURE FL;Ll;0;L; 0066 006C;;;;N;;;;; FB03;LATIN SMALL LIGATURE FFI;Ll;0;L; 0066 0066 0069;;;;N;;;;; FB04;LATIN SMALL LIGATURE FFL;Ll;0;L; 0066 0066 006C;;;;N;;;;; FB05;LATIN SMALL LIGATURE LONG S T;Ll;0;L; 017F 0074;;;;N;;;;; FB06;LATIN SMALL LIGATURE ST;Ll;0;L; 0073 0074;;;;N;;;;; FB13;ARMENIAN SMALL LIGATURE MEN NOW;Ll;0;L; 0574 0576;;;;N;;;;; FB14;ARMENIAN SMALL LIGATURE MEN ECH;Ll;0;L; 0574 0565;;;;N;;;;; FB15;ARMENIAN SMALL LIGATURE MEN INI;Ll;0;L; 0574 056B;;;;N;;;;; FB16;ARMENIAN SMALL LIGATURE VEW NOW;Ll;0;L; 057E 0576;;;;N;;;;; FB17;ARMENIAN SMALL LIGATURE MEN XEH;Ll;0;L; 0574 056D;;;;N;;;;; FB1D;HEBREW LETTER YOD WITH HIRIQ;Lo;0;R;05D9 05B4;;;;N;;;;; FB1E;HEBREW POINT JUDEO-SPANISH VARIKA;Mn;26;NSM;;;;;N;HEBREW POINT VARIKA;;;; FB1F;HEBREW LIGATURE YIDDISH YOD YOD PATAH;Lo;0;R;05F2 05B7;;;;N;;;;; FB20;HEBREW LETTER ALTERNATIVE AYIN;Lo;0;R; 05E2;;;;N;;;;; FB21;HEBREW LETTER WIDE ALEF;Lo;0;R; 05D0;;;;N;;;;; FB22;HEBREW LETTER WIDE DALET;Lo;0;R; 05D3;;;;N;;;;; FB23;HEBREW LETTER WIDE HE;Lo;0;R; 05D4;;;;N;;;;; FB24;HEBREW LETTER WIDE KAF;Lo;0;R; 05DB;;;;N;;;;; FB25;HEBREW LETTER WIDE LAMED;Lo;0;R; 05DC;;;;N;;;;; FB26;HEBREW LETTER WIDE FINAL MEM;Lo;0;R; 05DD;;;;N;;;;; FB27;HEBREW LETTER WIDE RESH;Lo;0;R; 05E8;;;;N;;;;; FB28;HEBREW LETTER WIDE TAV;Lo;0;R; 05EA;;;;N;;;;; FB29;HEBREW LETTER ALTERNATIVE PLUS SIGN;Sm;0;ET; 002B;;;;N;;;;; FB2A;HEBREW LETTER SHIN WITH SHIN DOT;Lo;0;R;05E9 05C1;;;;N;;;;; FB2B;HEBREW LETTER SHIN WITH SIN DOT;Lo;0;R;05E9 05C2;;;;N;;;;; FB2C;HEBREW LETTER SHIN WITH DAGESH AND SHIN DOT;Lo;0;R;FB49 05C1;;;;N;;;;; FB2D;HEBREW LETTER SHIN WITH DAGESH AND SIN DOT;Lo;0;R;FB49 05C2;;;;N;;;;; FB2E;HEBREW LETTER ALEF WITH PATAH;Lo;0;R;05D0 05B7;;;;N;;;;; FB2F;HEBREW LETTER ALEF WITH QAMATS;Lo;0;R;05D0 05B8;;;;N;;;;; FB30;HEBREW LETTER ALEF WITH MAPIQ;Lo;0;R;05D0 05BC;;;;N;;;;; FB31;HEBREW LETTER BET WITH DAGESH;Lo;0;R;05D1 05BC;;;;N;;;;; FB32;HEBREW LETTER GIMEL WITH DAGESH;Lo;0;R;05D2 05BC;;;;N;;;;; FB33;HEBREW LETTER DALET WITH DAGESH;Lo;0;R;05D3 05BC;;;;N;;;;; FB34;HEBREW LETTER HE WITH MAPIQ;Lo;0;R;05D4 05BC;;;;N;;;;; FB35;HEBREW LETTER VAV WITH DAGESH;Lo;0;R;05D5 05BC;;;;N;;;;; FB36;HEBREW LETTER ZAYIN WITH DAGESH;Lo;0;R;05D6 05BC;;;;N;;;;; FB38;HEBREW LETTER TET WITH DAGESH;Lo;0;R;05D8 05BC;;;;N;;;;; FB39;HEBREW LETTER YOD WITH DAGESH;Lo;0;R;05D9 05BC;;;;N;;;;; FB3A;HEBREW LETTER FINAL KAF WITH DAGESH;Lo;0;R;05DA 05BC;;;;N;;;;; FB3B;HEBREW LETTER KAF WITH DAGESH;Lo;0;R;05DB 05BC;;;;N;;;;; FB3C;HEBREW LETTER LAMED WITH DAGESH;Lo;0;R;05DC 05BC;;;;N;;;;; FB3E;HEBREW LETTER MEM WITH DAGESH;Lo;0;R;05DE 05BC;;;;N;;;;; FB40;HEBREW LETTER NUN WITH DAGESH;Lo;0;R;05E0 05BC;;;;N;;;;; FB41;HEBREW LETTER SAMEKH WITH DAGESH;Lo;0;R;05E1 05BC;;;;N;;;;; FB43;HEBREW LETTER FINAL PE WITH DAGESH;Lo;0;R;05E3 05BC;;;;N;;;;; FB44;HEBREW LETTER PE WITH DAGESH;Lo;0;R;05E4 05BC;;;;N;;;;; FB46;HEBREW LETTER TSADI WITH DAGESH;Lo;0;R;05E6 05BC;;;;N;;;;; FB47;HEBREW LETTER QOF WITH DAGESH;Lo;0;R;05E7 05BC;;;;N;;;;; FB48;HEBREW LETTER RESH WITH DAGESH;Lo;0;R;05E8 05BC;;;;N;;;;; FB49;HEBREW LETTER SHIN WITH DAGESH;Lo;0;R;05E9 05BC;;;;N;;;;; FB4A;HEBREW LETTER TAV WITH DAGESH;Lo;0;R;05EA 05BC;;;;N;;;;; FB4B;HEBREW LETTER VAV WITH HOLAM;Lo;0;R;05D5 05B9;;;;N;;;;; FB4C;HEBREW LETTER BET WITH RAFE;Lo;0;R;05D1 05BF;;;;N;;;;; FB4D;HEBREW LETTER KAF WITH RAFE;Lo;0;R;05DB 05BF;;;;N;;;;; FB4E;HEBREW LETTER PE WITH RAFE;Lo;0;R;05E4 05BF;;;;N;;;;; FB4F;HEBREW LIGATURE ALEF LAMED;Lo;0;R; 05D0 05DC;;;;N;;;;; FB50;ARABIC LETTER ALEF WASLA ISOLATED FORM;Lo;0;AL; 0671;;;;N;;;;; FB51;ARABIC LETTER ALEF WASLA FINAL FORM;Lo;0;AL; 0671;;;;N;;;;; FB52;ARABIC LETTER BEEH ISOLATED FORM;Lo;0;AL; 067B;;;;N;;;;; FB53;ARABIC LETTER BEEH FINAL FORM;Lo;0;AL; 067B;;;;N;;;;; FB54;ARABIC LETTER BEEH INITIAL FORM;Lo;0;AL; 067B;;;;N;;;;; FB55;ARABIC LETTER BEEH MEDIAL FORM;Lo;0;AL; 067B;;;;N;;;;; FB56;ARABIC LETTER PEH ISOLATED FORM;Lo;0;AL; 067E;;;;N;;;;; FB57;ARABIC LETTER PEH FINAL FORM;Lo;0;AL; 067E;;;;N;;;;; FB58;ARABIC LETTER PEH INITIAL FORM;Lo;0;AL; 067E;;;;N;;;;; FB59;ARABIC LETTER PEH MEDIAL FORM;Lo;0;AL; 067E;;;;N;;;;; FB5A;ARABIC LETTER BEHEH ISOLATED FORM;Lo;0;AL; 0680;;;;N;;;;; FB5B;ARABIC LETTER BEHEH FINAL FORM;Lo;0;AL; 0680;;;;N;;;;; FB5C;ARABIC LETTER BEHEH INITIAL FORM;Lo;0;AL; 0680;;;;N;;;;; FB5D;ARABIC LETTER BEHEH MEDIAL FORM;Lo;0;AL; 0680;;;;N;;;;; FB5E;ARABIC LETTER TTEHEH ISOLATED FORM;Lo;0;AL; 067A;;;;N;;;;; FB5F;ARABIC LETTER TTEHEH FINAL FORM;Lo;0;AL; 067A;;;;N;;;;; FB60;ARABIC LETTER TTEHEH INITIAL FORM;Lo;0;AL; 067A;;;;N;;;;; FB61;ARABIC LETTER TTEHEH MEDIAL FORM;Lo;0;AL; 067A;;;;N;;;;; FB62;ARABIC LETTER TEHEH ISOLATED FORM;Lo;0;AL; 067F;;;;N;;;;; FB63;ARABIC LETTER TEHEH FINAL FORM;Lo;0;AL; 067F;;;;N;;;;; FB64;ARABIC LETTER TEHEH INITIAL FORM;Lo;0;AL; 067F;;;;N;;;;; FB65;ARABIC LETTER TEHEH MEDIAL FORM;Lo;0;AL; 067F;;;;N;;;;; FB66;ARABIC LETTER TTEH ISOLATED FORM;Lo;0;AL; 0679;;;;N;;;;; FB67;ARABIC LETTER TTEH FINAL FORM;Lo;0;AL; 0679;;;;N;;;;; FB68;ARABIC LETTER TTEH INITIAL FORM;Lo;0;AL; 0679;;;;N;;;;; FB69;ARABIC LETTER TTEH MEDIAL FORM;Lo;0;AL; 0679;;;;N;;;;; FB6A;ARABIC LETTER VEH ISOLATED FORM;Lo;0;AL; 06A4;;;;N;;;;; FB6B;ARABIC LETTER VEH FINAL FORM;Lo;0;AL; 06A4;;;;N;;;;; FB6C;ARABIC LETTER VEH INITIAL FORM;Lo;0;AL; 06A4;;;;N;;;;; FB6D;ARABIC LETTER VEH MEDIAL FORM;Lo;0;AL; 06A4;;;;N;;;;; FB6E;ARABIC LETTER PEHEH ISOLATED FORM;Lo;0;AL; 06A6;;;;N;;;;; FB6F;ARABIC LETTER PEHEH FINAL FORM;Lo;0;AL; 06A6;;;;N;;;;; FB70;ARABIC LETTER PEHEH INITIAL FORM;Lo;0;AL; 06A6;;;;N;;;;; FB71;ARABIC LETTER PEHEH MEDIAL FORM;Lo;0;AL; 06A6;;;;N;;;;; FB72;ARABIC LETTER DYEH ISOLATED FORM;Lo;0;AL; 0684;;;;N;;;;; FB73;ARABIC LETTER DYEH FINAL FORM;Lo;0;AL; 0684;;;;N;;;;; FB74;ARABIC LETTER DYEH INITIAL FORM;Lo;0;AL; 0684;;;;N;;;;; FB75;ARABIC LETTER DYEH MEDIAL FORM;Lo;0;AL; 0684;;;;N;;;;; FB76;ARABIC LETTER NYEH ISOLATED FORM;Lo;0;AL; 0683;;;;N;;;;; FB77;ARABIC LETTER NYEH FINAL FORM;Lo;0;AL; 0683;;;;N;;;;; FB78;ARABIC LETTER NYEH INITIAL FORM;Lo;0;AL; 0683;;;;N;;;;; FB79;ARABIC LETTER NYEH MEDIAL FORM;Lo;0;AL; 0683;;;;N;;;;; FB7A;ARABIC LETTER TCHEH ISOLATED FORM;Lo;0;AL; 0686;;;;N;;;;; FB7B;ARABIC LETTER TCHEH FINAL FORM;Lo;0;AL; 0686;;;;N;;;;; FB7C;ARABIC LETTER TCHEH INITIAL FORM;Lo;0;AL; 0686;;;;N;;;;; FB7D;ARABIC LETTER TCHEH MEDIAL FORM;Lo;0;AL; 0686;;;;N;;;;; FB7E;ARABIC LETTER TCHEHEH ISOLATED FORM;Lo;0;AL; 0687;;;;N;;;;; FB7F;ARABIC LETTER TCHEHEH FINAL FORM;Lo;0;AL; 0687;;;;N;;;;; FB80;ARABIC LETTER TCHEHEH INITIAL FORM;Lo;0;AL; 0687;;;;N;;;;; FB81;ARABIC LETTER TCHEHEH MEDIAL FORM;Lo;0;AL; 0687;;;;N;;;;; FB82;ARABIC LETTER DDAHAL ISOLATED FORM;Lo;0;AL; 068D;;;;N;;;;; FB83;ARABIC LETTER DDAHAL FINAL FORM;Lo;0;AL; 068D;;;;N;;;;; FB84;ARABIC LETTER DAHAL ISOLATED FORM;Lo;0;AL; 068C;;;;N;;;;; FB85;ARABIC LETTER DAHAL FINAL FORM;Lo;0;AL; 068C;;;;N;;;;; FB86;ARABIC LETTER DUL ISOLATED FORM;Lo;0;AL; 068E;;;;N;;;;; FB87;ARABIC LETTER DUL FINAL FORM;Lo;0;AL; 068E;;;;N;;;;; FB88;ARABIC LETTER DDAL ISOLATED FORM;Lo;0;AL; 0688;;;;N;;;;; FB89;ARABIC LETTER DDAL FINAL FORM;Lo;0;AL; 0688;;;;N;;;;; FB8A;ARABIC LETTER JEH ISOLATED FORM;Lo;0;AL; 0698;;;;N;;;;; FB8B;ARABIC LETTER JEH FINAL FORM;Lo;0;AL; 0698;;;;N;;;;; FB8C;ARABIC LETTER RREH ISOLATED FORM;Lo;0;AL; 0691;;;;N;;;;; FB8D;ARABIC LETTER RREH FINAL FORM;Lo;0;AL; 0691;;;;N;;;;; FB8E;ARABIC LETTER KEHEH ISOLATED FORM;Lo;0;AL; 06A9;;;;N;;;;; FB8F;ARABIC LETTER KEHEH FINAL FORM;Lo;0;AL; 06A9;;;;N;;;;; FB90;ARABIC LETTER KEHEH INITIAL FORM;Lo;0;AL; 06A9;;;;N;;;;; FB91;ARABIC LETTER KEHEH MEDIAL FORM;Lo;0;AL; 06A9;;;;N;;;;; FB92;ARABIC LETTER GAF ISOLATED FORM;Lo;0;AL; 06AF;;;;N;;;;; FB93;ARABIC LETTER GAF FINAL FORM;Lo;0;AL; 06AF;;;;N;;;;; FB94;ARABIC LETTER GAF INITIAL FORM;Lo;0;AL; 06AF;;;;N;;;;; FB95;ARABIC LETTER GAF MEDIAL FORM;Lo;0;AL; 06AF;;;;N;;;;; FB96;ARABIC LETTER GUEH ISOLATED FORM;Lo;0;AL; 06B3;;;;N;;;;; FB97;ARABIC LETTER GUEH FINAL FORM;Lo;0;AL; 06B3;;;;N;;;;; FB98;ARABIC LETTER GUEH INITIAL FORM;Lo;0;AL; 06B3;;;;N;;;;; FB99;ARABIC LETTER GUEH MEDIAL FORM;Lo;0;AL; 06B3;;;;N;;;;; FB9A;ARABIC LETTER NGOEH ISOLATED FORM;Lo;0;AL; 06B1;;;;N;;;;; FB9B;ARABIC LETTER NGOEH FINAL FORM;Lo;0;AL; 06B1;;;;N;;;;; FB9C;ARABIC LETTER NGOEH INITIAL FORM;Lo;0;AL; 06B1;;;;N;;;;; FB9D;ARABIC LETTER NGOEH MEDIAL FORM;Lo;0;AL; 06B1;;;;N;;;;; FB9E;ARABIC LETTER NOON GHUNNA ISOLATED FORM;Lo;0;AL; 06BA;;;;N;;;;; FB9F;ARABIC LETTER NOON GHUNNA FINAL FORM;Lo;0;AL; 06BA;;;;N;;;;; FBA0;ARABIC LETTER RNOON ISOLATED FORM;Lo;0;AL; 06BB;;;;N;;;;; FBA1;ARABIC LETTER RNOON FINAL FORM;Lo;0;AL; 06BB;;;;N;;;;; FBA2;ARABIC LETTER RNOON INITIAL FORM;Lo;0;AL; 06BB;;;;N;;;;; FBA3;ARABIC LETTER RNOON MEDIAL FORM;Lo;0;AL; 06BB;;;;N;;;;; FBA4;ARABIC LETTER HEH WITH YEH ABOVE ISOLATED FORM;Lo;0;AL; 06C0;;;;N;;;;; FBA5;ARABIC LETTER HEH WITH YEH ABOVE FINAL FORM;Lo;0;AL; 06C0;;;;N;;;;; FBA6;ARABIC LETTER HEH GOAL ISOLATED FORM;Lo;0;AL; 06C1;;;;N;;;;; FBA7;ARABIC LETTER HEH GOAL FINAL FORM;Lo;0;AL; 06C1;;;;N;;;;; FBA8;ARABIC LETTER HEH GOAL INITIAL FORM;Lo;0;AL; 06C1;;;;N;;;;; FBA9;ARABIC LETTER HEH GOAL MEDIAL FORM;Lo;0;AL; 06C1;;;;N;;;;; FBAA;ARABIC LETTER HEH DOACHASHMEE ISOLATED FORM;Lo;0;AL; 06BE;;;;N;;;;; FBAB;ARABIC LETTER HEH DOACHASHMEE FINAL FORM;Lo;0;AL; 06BE;;;;N;;;;; FBAC;ARABIC LETTER HEH DOACHASHMEE INITIAL FORM;Lo;0;AL; 06BE;;;;N;;;;; FBAD;ARABIC LETTER HEH DOACHASHMEE MEDIAL FORM;Lo;0;AL; 06BE;;;;N;;;;; FBAE;ARABIC LETTER YEH BARREE ISOLATED FORM;Lo;0;AL; 06D2;;;;N;;;;; FBAF;ARABIC LETTER YEH BARREE FINAL FORM;Lo;0;AL; 06D2;;;;N;;;;; FBB0;ARABIC LETTER YEH BARREE WITH HAMZA ABOVE ISOLATED FORM;Lo;0;AL; 06D3;;;;N;;;;; FBB1;ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM;Lo;0;AL; 06D3;;;;N;;;;; FBD3;ARABIC LETTER NG ISOLATED FORM;Lo;0;AL; 06AD;;;;N;;;;; FBD4;ARABIC LETTER NG FINAL FORM;Lo;0;AL; 06AD;;;;N;;;;; FBD5;ARABIC LETTER NG INITIAL FORM;Lo;0;AL; 06AD;;;;N;;;;; FBD6;ARABIC LETTER NG MEDIAL FORM;Lo;0;AL; 06AD;;;;N;;;;; FBD7;ARABIC LETTER U ISOLATED FORM;Lo;0;AL; 06C7;;;;N;;;;; FBD8;ARABIC LETTER U FINAL FORM;Lo;0;AL; 06C7;;;;N;;;;; FBD9;ARABIC LETTER OE ISOLATED FORM;Lo;0;AL; 06C6;;;;N;;;;; FBDA;ARABIC LETTER OE FINAL FORM;Lo;0;AL; 06C6;;;;N;;;;; FBDB;ARABIC LETTER YU ISOLATED FORM;Lo;0;AL; 06C8;;;;N;;;;; FBDC;ARABIC LETTER YU FINAL FORM;Lo;0;AL; 06C8;;;;N;;;;; FBDD;ARABIC LETTER U WITH HAMZA ABOVE ISOLATED FORM;Lo;0;AL; 0677;;;;N;;;;; FBDE;ARABIC LETTER VE ISOLATED FORM;Lo;0;AL; 06CB;;;;N;;;;; FBDF;ARABIC LETTER VE FINAL FORM;Lo;0;AL; 06CB;;;;N;;;;; FBE0;ARABIC LETTER KIRGHIZ OE ISOLATED FORM;Lo;0;AL; 06C5;;;;N;;;;; FBE1;ARABIC LETTER KIRGHIZ OE FINAL FORM;Lo;0;AL; 06C5;;;;N;;;;; FBE2;ARABIC LETTER KIRGHIZ YU ISOLATED FORM;Lo;0;AL; 06C9;;;;N;;;;; FBE3;ARABIC LETTER KIRGHIZ YU FINAL FORM;Lo;0;AL; 06C9;;;;N;;;;; FBE4;ARABIC LETTER E ISOLATED FORM;Lo;0;AL; 06D0;;;;N;;;;; FBE5;ARABIC LETTER E FINAL FORM;Lo;0;AL; 06D0;;;;N;;;;; FBE6;ARABIC LETTER E INITIAL FORM;Lo;0;AL; 06D0;;;;N;;;;; FBE7;ARABIC LETTER E MEDIAL FORM;Lo;0;AL; 06D0;;;;N;;;;; FBE8;ARABIC LETTER UIGHUR KAZAKH KIRGHIZ ALEF MAKSURA INITIAL FORM;Lo;0;AL; 0649;;;;N;;;;; FBE9;ARABIC LETTER UIGHUR KAZAKH KIRGHIZ ALEF MAKSURA MEDIAL FORM;Lo;0;AL; 0649;;;;N;;;;; FBEA;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF ISOLATED FORM;Lo;0;AL; 0626 0627;;;;N;;;;; FBEB;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF FINAL FORM;Lo;0;AL; 0626 0627;;;;N;;;;; FBEC;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH AE ISOLATED FORM;Lo;0;AL; 0626 06D5;;;;N;;;;; FBED;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH AE FINAL FORM;Lo;0;AL; 0626 06D5;;;;N;;;;; FBEE;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH WAW ISOLATED FORM;Lo;0;AL; 0626 0648;;;;N;;;;; FBEF;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH WAW FINAL FORM;Lo;0;AL; 0626 0648;;;;N;;;;; FBF0;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH U ISOLATED FORM;Lo;0;AL; 0626 06C7;;;;N;;;;; FBF1;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH U FINAL FORM;Lo;0;AL; 0626 06C7;;;;N;;;;; FBF2;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH OE ISOLATED FORM;Lo;0;AL; 0626 06C6;;;;N;;;;; FBF3;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH OE FINAL FORM;Lo;0;AL; 0626 06C6;;;;N;;;;; FBF4;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YU ISOLATED FORM;Lo;0;AL; 0626 06C8;;;;N;;;;; FBF5;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YU FINAL FORM;Lo;0;AL; 0626 06C8;;;;N;;;;; FBF6;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E ISOLATED FORM;Lo;0;AL; 0626 06D0;;;;N;;;;; FBF7;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E FINAL FORM;Lo;0;AL; 0626 06D0;;;;N;;;;; FBF8;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E INITIAL FORM;Lo;0;AL; 0626 06D0;;;;N;;;;; FBF9;ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL; 0626 0649;;;;N;;;;; FBFA;ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 0626 0649;;;;N;;;;; FBFB;ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA INITIAL FORM;Lo;0;AL; 0626 0649;;;;N;;;;; FBFC;ARABIC LETTER FARSI YEH ISOLATED FORM;Lo;0;AL; 06CC;;;;N;;;;; FBFD;ARABIC LETTER FARSI YEH FINAL FORM;Lo;0;AL; 06CC;;;;N;;;;; FBFE;ARABIC LETTER FARSI YEH INITIAL FORM;Lo;0;AL; 06CC;;;;N;;;;; FBFF;ARABIC LETTER FARSI YEH MEDIAL FORM;Lo;0;AL; 06CC;;;;N;;;;; FC00;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH JEEM ISOLATED FORM;Lo;0;AL; 0626 062C;;;;N;;;;; FC01;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HAH ISOLATED FORM;Lo;0;AL; 0626 062D;;;;N;;;;; FC02;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM ISOLATED FORM;Lo;0;AL; 0626 0645;;;;N;;;;; FC03;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL; 0626 0649;;;;N;;;;; FC04;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YEH ISOLATED FORM;Lo;0;AL; 0626 064A;;;;N;;;;; FC05;ARABIC LIGATURE BEH WITH JEEM ISOLATED FORM;Lo;0;AL; 0628 062C;;;;N;;;;; FC06;ARABIC LIGATURE BEH WITH HAH ISOLATED FORM;Lo;0;AL; 0628 062D;;;;N;;;;; FC07;ARABIC LIGATURE BEH WITH KHAH ISOLATED FORM;Lo;0;AL; 0628 062E;;;;N;;;;; FC08;ARABIC LIGATURE BEH WITH MEEM ISOLATED FORM;Lo;0;AL; 0628 0645;;;;N;;;;; FC09;ARABIC LIGATURE BEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL; 0628 0649;;;;N;;;;; FC0A;ARABIC LIGATURE BEH WITH YEH ISOLATED FORM;Lo;0;AL; 0628 064A;;;;N;;;;; FC0B;ARABIC LIGATURE TEH WITH JEEM ISOLATED FORM;Lo;0;AL; 062A 062C;;;;N;;;;; FC0C;ARABIC LIGATURE TEH WITH HAH ISOLATED FORM;Lo;0;AL; 062A 062D;;;;N;;;;; FC0D;ARABIC LIGATURE TEH WITH KHAH ISOLATED FORM;Lo;0;AL; 062A 062E;;;;N;;;;; FC0E;ARABIC LIGATURE TEH WITH MEEM ISOLATED FORM;Lo;0;AL; 062A 0645;;;;N;;;;; FC0F;ARABIC LIGATURE TEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL; 062A 0649;;;;N;;;;; FC10;ARABIC LIGATURE TEH WITH YEH ISOLATED FORM;Lo;0;AL; 062A 064A;;;;N;;;;; FC11;ARABIC LIGATURE THEH WITH JEEM ISOLATED FORM;Lo;0;AL; 062B 062C;;;;N;;;;; FC12;ARABIC LIGATURE THEH WITH MEEM ISOLATED FORM;Lo;0;AL; 062B 0645;;;;N;;;;; FC13;ARABIC LIGATURE THEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL; 062B 0649;;;;N;;;;; FC14;ARABIC LIGATURE THEH WITH YEH ISOLATED FORM;Lo;0;AL; 062B 064A;;;;N;;;;; FC15;ARABIC LIGATURE JEEM WITH HAH ISOLATED FORM;Lo;0;AL; 062C 062D;;;;N;;;;; FC16;ARABIC LIGATURE JEEM WITH MEEM ISOLATED FORM;Lo;0;AL; 062C 0645;;;;N;;;;; FC17;ARABIC LIGATURE HAH WITH JEEM ISOLATED FORM;Lo;0;AL; 062D 062C;;;;N;;;;; FC18;ARABIC LIGATURE HAH WITH MEEM ISOLATED FORM;Lo;0;AL; 062D 0645;;;;N;;;;; FC19;ARABIC LIGATURE KHAH WITH JEEM ISOLATED FORM;Lo;0;AL; 062E 062C;;;;N;;;;; FC1A;ARABIC LIGATURE KHAH WITH HAH ISOLATED FORM;Lo;0;AL; 062E 062D;;;;N;;;;; FC1B;ARABIC LIGATURE KHAH WITH MEEM ISOLATED FORM;Lo;0;AL; 062E 0645;;;;N;;;;; FC1C;ARABIC LIGATURE SEEN WITH JEEM ISOLATED FORM;Lo;0;AL; 0633 062C;;;;N;;;;; FC1D;ARABIC LIGATURE SEEN WITH HAH ISOLATED FORM;Lo;0;AL; 0633 062D;;;;N;;;;; FC1E;ARABIC LIGATURE SEEN WITH KHAH ISOLATED FORM;Lo;0;AL; 0633 062E;;;;N;;;;; FC1F;ARABIC LIGATURE SEEN WITH MEEM ISOLATED FORM;Lo;0;AL; 0633 0645;;;;N;;;;; FC20;ARABIC LIGATURE SAD WITH HAH ISOLATED FORM;Lo;0;AL; 0635 062D;;;;N;;;;; FC21;ARABIC LIGATURE SAD WITH MEEM ISOLATED FORM;Lo;0;AL; 0635 0645;;;;N;;;;; FC22;ARABIC LIGATURE DAD WITH JEEM ISOLATED FORM;Lo;0;AL; 0636 062C;;;;N;;;;; FC23;ARABIC LIGATURE DAD WITH HAH ISOLATED FORM;Lo;0;AL; 0636 062D;;;;N;;;;; FC24;ARABIC LIGATURE DAD WITH KHAH ISOLATED FORM;Lo;0;AL; 0636 062E;;;;N;;;;; FC25;ARABIC LIGATURE DAD WITH MEEM ISOLATED FORM;Lo;0;AL; 0636 0645;;;;N;;;;; FC26;ARABIC LIGATURE TAH WITH HAH ISOLATED FORM;Lo;0;AL; 0637 062D;;;;N;;;;; FC27;ARABIC LIGATURE TAH WITH MEEM ISOLATED FORM;Lo;0;AL; 0637 0645;;;;N;;;;; FC28;ARABIC LIGATURE ZAH WITH MEEM ISOLATED FORM;Lo;0;AL; 0638 0645;;;;N;;;;; FC29;ARABIC LIGATURE AIN WITH JEEM ISOLATED FORM;Lo;0;AL; 0639 062C;;;;N;;;;; FC2A;ARABIC LIGATURE AIN WITH MEEM ISOLATED FORM;Lo;0;AL; 0639 0645;;;;N;;;;; FC2B;ARABIC LIGATURE GHAIN WITH JEEM ISOLATED FORM;Lo;0;AL; 063A 062C;;;;N;;;;; FC2C;ARABIC LIGATURE GHAIN WITH MEEM ISOLATED FORM;Lo;0;AL; 063A 0645;;;;N;;;;; FC2D;ARABIC LIGATURE FEH WITH JEEM ISOLATED FORM;Lo;0;AL; 0641 062C;;;;N;;;;; FC2E;ARABIC LIGATURE FEH WITH HAH ISOLATED FORM;Lo;0;AL; 0641 062D;;;;N;;;;; FC2F;ARABIC LIGATURE FEH WITH KHAH ISOLATED FORM;Lo;0;AL; 0641 062E;;;;N;;;;; FC30;ARABIC LIGATURE FEH WITH MEEM ISOLATED FORM;Lo;0;AL; 0641 0645;;;;N;;;;; FC31;ARABIC LIGATURE FEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL; 0641 0649;;;;N;;;;; FC32;ARABIC LIGATURE FEH WITH YEH ISOLATED FORM;Lo;0;AL; 0641 064A;;;;N;;;;; FC33;ARABIC LIGATURE QAF WITH HAH ISOLATED FORM;Lo;0;AL; 0642 062D;;;;N;;;;; FC34;ARABIC LIGATURE QAF WITH MEEM ISOLATED FORM;Lo;0;AL; 0642 0645;;;;N;;;;; FC35;ARABIC LIGATURE QAF WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL; 0642 0649;;;;N;;;;; FC36;ARABIC LIGATURE QAF WITH YEH ISOLATED FORM;Lo;0;AL; 0642 064A;;;;N;;;;; FC37;ARABIC LIGATURE KAF WITH ALEF ISOLATED FORM;Lo;0;AL; 0643 0627;;;;N;;;;; FC38;ARABIC LIGATURE KAF WITH JEEM ISOLATED FORM;Lo;0;AL; 0643 062C;;;;N;;;;; FC39;ARABIC LIGATURE KAF WITH HAH ISOLATED FORM;Lo;0;AL; 0643 062D;;;;N;;;;; FC3A;ARABIC LIGATURE KAF WITH KHAH ISOLATED FORM;Lo;0;AL; 0643 062E;;;;N;;;;; FC3B;ARABIC LIGATURE KAF WITH LAM ISOLATED FORM;Lo;0;AL; 0643 0644;;;;N;;;;; FC3C;ARABIC LIGATURE KAF WITH MEEM ISOLATED FORM;Lo;0;AL; 0643 0645;;;;N;;;;; FC3D;ARABIC LIGATURE KAF WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL; 0643 0649;;;;N;;;;; FC3E;ARABIC LIGATURE KAF WITH YEH ISOLATED FORM;Lo;0;AL; 0643 064A;;;;N;;;;; FC3F;ARABIC LIGATURE LAM WITH JEEM ISOLATED FORM;Lo;0;AL; 0644 062C;;;;N;;;;; FC40;ARABIC LIGATURE LAM WITH HAH ISOLATED FORM;Lo;0;AL; 0644 062D;;;;N;;;;; FC41;ARABIC LIGATURE LAM WITH KHAH ISOLATED FORM;Lo;0;AL; 0644 062E;;;;N;;;;; FC42;ARABIC LIGATURE LAM WITH MEEM ISOLATED FORM;Lo;0;AL; 0644 0645;;;;N;;;;; FC43;ARABIC LIGATURE LAM WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL; 0644 0649;;;;N;;;;; FC44;ARABIC LIGATURE LAM WITH YEH ISOLATED FORM;Lo;0;AL; 0644 064A;;;;N;;;;; FC45;ARABIC LIGATURE MEEM WITH JEEM ISOLATED FORM;Lo;0;AL; 0645 062C;;;;N;;;;; FC46;ARABIC LIGATURE MEEM WITH HAH ISOLATED FORM;Lo;0;AL; 0645 062D;;;;N;;;;; FC47;ARABIC LIGATURE MEEM WITH KHAH ISOLATED FORM;Lo;0;AL; 0645 062E;;;;N;;;;; FC48;ARABIC LIGATURE MEEM WITH MEEM ISOLATED FORM;Lo;0;AL; 0645 0645;;;;N;;;;; FC49;ARABIC LIGATURE MEEM WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL; 0645 0649;;;;N;;;;; FC4A;ARABIC LIGATURE MEEM WITH YEH ISOLATED FORM;Lo;0;AL; 0645 064A;;;;N;;;;; FC4B;ARABIC LIGATURE NOON WITH JEEM ISOLATED FORM;Lo;0;AL; 0646 062C;;;;N;;;;; FC4C;ARABIC LIGATURE NOON WITH HAH ISOLATED FORM;Lo;0;AL; 0646 062D;;;;N;;;;; FC4D;ARABIC LIGATURE NOON WITH KHAH ISOLATED FORM;Lo;0;AL; 0646 062E;;;;N;;;;; FC4E;ARABIC LIGATURE NOON WITH MEEM ISOLATED FORM;Lo;0;AL; 0646 0645;;;;N;;;;; FC4F;ARABIC LIGATURE NOON WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL; 0646 0649;;;;N;;;;; FC50;ARABIC LIGATURE NOON WITH YEH ISOLATED FORM;Lo;0;AL; 0646 064A;;;;N;;;;; FC51;ARABIC LIGATURE HEH WITH JEEM ISOLATED FORM;Lo;0;AL; 0647 062C;;;;N;;;;; FC52;ARABIC LIGATURE HEH WITH MEEM ISOLATED FORM;Lo;0;AL; 0647 0645;;;;N;;;;; FC53;ARABIC LIGATURE HEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL; 0647 0649;;;;N;;;;; FC54;ARABIC LIGATURE HEH WITH YEH ISOLATED FORM;Lo;0;AL; 0647 064A;;;;N;;;;; FC55;ARABIC LIGATURE YEH WITH JEEM ISOLATED FORM;Lo;0;AL; 064A 062C;;;;N;;;;; FC56;ARABIC LIGATURE YEH WITH HAH ISOLATED FORM;Lo;0;AL; 064A 062D;;;;N;;;;; FC57;ARABIC LIGATURE YEH WITH KHAH ISOLATED FORM;Lo;0;AL; 064A 062E;;;;N;;;;; FC58;ARABIC LIGATURE YEH WITH MEEM ISOLATED FORM;Lo;0;AL; 064A 0645;;;;N;;;;; FC59;ARABIC LIGATURE YEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL; 064A 0649;;;;N;;;;; FC5A;ARABIC LIGATURE YEH WITH YEH ISOLATED FORM;Lo;0;AL; 064A 064A;;;;N;;;;; FC5B;ARABIC LIGATURE THAL WITH SUPERSCRIPT ALEF ISOLATED FORM;Lo;0;AL; 0630 0670;;;;N;;;;; FC5C;ARABIC LIGATURE REH WITH SUPERSCRIPT ALEF ISOLATED FORM;Lo;0;AL; 0631 0670;;;;N;;;;; FC5D;ARABIC LIGATURE ALEF MAKSURA WITH SUPERSCRIPT ALEF ISOLATED FORM;Lo;0;AL; 0649 0670;;;;N;;;;; FC5E;ARABIC LIGATURE SHADDA WITH DAMMATAN ISOLATED FORM;Lo;0;AL; 0020 064C 0651;;;;N;;;;; FC5F;ARABIC LIGATURE SHADDA WITH KASRATAN ISOLATED FORM;Lo;0;AL; 0020 064D 0651;;;;N;;;;; FC60;ARABIC LIGATURE SHADDA WITH FATHA ISOLATED FORM;Lo;0;AL; 0020 064E 0651;;;;N;;;;; FC61;ARABIC LIGATURE SHADDA WITH DAMMA ISOLATED FORM;Lo;0;AL; 0020 064F 0651;;;;N;;;;; FC62;ARABIC LIGATURE SHADDA WITH KASRA ISOLATED FORM;Lo;0;AL; 0020 0650 0651;;;;N;;;;; FC63;ARABIC LIGATURE SHADDA WITH SUPERSCRIPT ALEF ISOLATED FORM;Lo;0;AL; 0020 0651 0670;;;;N;;;;; FC64;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH REH FINAL FORM;Lo;0;AL; 0626 0631;;;;N;;;;; FC65;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ZAIN FINAL FORM;Lo;0;AL; 0626 0632;;;;N;;;;; FC66;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM FINAL FORM;Lo;0;AL; 0626 0645;;;;N;;;;; FC67;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH NOON FINAL FORM;Lo;0;AL; 0626 0646;;;;N;;;;; FC68;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 0626 0649;;;;N;;;;; FC69;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YEH FINAL FORM;Lo;0;AL; 0626 064A;;;;N;;;;; FC6A;ARABIC LIGATURE BEH WITH REH FINAL FORM;Lo;0;AL; 0628 0631;;;;N;;;;; FC6B;ARABIC LIGATURE BEH WITH ZAIN FINAL FORM;Lo;0;AL; 0628 0632;;;;N;;;;; FC6C;ARABIC LIGATURE BEH WITH MEEM FINAL FORM;Lo;0;AL; 0628 0645;;;;N;;;;; FC6D;ARABIC LIGATURE BEH WITH NOON FINAL FORM;Lo;0;AL; 0628 0646;;;;N;;;;; FC6E;ARABIC LIGATURE BEH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 0628 0649;;;;N;;;;; FC6F;ARABIC LIGATURE BEH WITH YEH FINAL FORM;Lo;0;AL; 0628 064A;;;;N;;;;; FC70;ARABIC LIGATURE TEH WITH REH FINAL FORM;Lo;0;AL; 062A 0631;;;;N;;;;; FC71;ARABIC LIGATURE TEH WITH ZAIN FINAL FORM;Lo;0;AL; 062A 0632;;;;N;;;;; FC72;ARABIC LIGATURE TEH WITH MEEM FINAL FORM;Lo;0;AL; 062A 0645;;;;N;;;;; FC73;ARABIC LIGATURE TEH WITH NOON FINAL FORM;Lo;0;AL; 062A 0646;;;;N;;;;; FC74;ARABIC LIGATURE TEH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 062A 0649;;;;N;;;;; FC75;ARABIC LIGATURE TEH WITH YEH FINAL FORM;Lo;0;AL; 062A 064A;;;;N;;;;; FC76;ARABIC LIGATURE THEH WITH REH FINAL FORM;Lo;0;AL; 062B 0631;;;;N;;;;; FC77;ARABIC LIGATURE THEH WITH ZAIN FINAL FORM;Lo;0;AL; 062B 0632;;;;N;;;;; FC78;ARABIC LIGATURE THEH WITH MEEM FINAL FORM;Lo;0;AL; 062B 0645;;;;N;;;;; FC79;ARABIC LIGATURE THEH WITH NOON FINAL FORM;Lo;0;AL; 062B 0646;;;;N;;;;; FC7A;ARABIC LIGATURE THEH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 062B 0649;;;;N;;;;; FC7B;ARABIC LIGATURE THEH WITH YEH FINAL FORM;Lo;0;AL; 062B 064A;;;;N;;;;; FC7C;ARABIC LIGATURE FEH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 0641 0649;;;;N;;;;; FC7D;ARABIC LIGATURE FEH WITH YEH FINAL FORM;Lo;0;AL; 0641 064A;;;;N;;;;; FC7E;ARABIC LIGATURE QAF WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 0642 0649;;;;N;;;;; FC7F;ARABIC LIGATURE QAF WITH YEH FINAL FORM;Lo;0;AL; 0642 064A;;;;N;;;;; FC80;ARABIC LIGATURE KAF WITH ALEF FINAL FORM;Lo;0;AL; 0643 0627;;;;N;;;;; FC81;ARABIC LIGATURE KAF WITH LAM FINAL FORM;Lo;0;AL; 0643 0644;;;;N;;;;; FC82;ARABIC LIGATURE KAF WITH MEEM FINAL FORM;Lo;0;AL; 0643 0645;;;;N;;;;; FC83;ARABIC LIGATURE KAF WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 0643 0649;;;;N;;;;; FC84;ARABIC LIGATURE KAF WITH YEH FINAL FORM;Lo;0;AL; 0643 064A;;;;N;;;;; FC85;ARABIC LIGATURE LAM WITH MEEM FINAL FORM;Lo;0;AL; 0644 0645;;;;N;;;;; FC86;ARABIC LIGATURE LAM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 0644 0649;;;;N;;;;; FC87;ARABIC LIGATURE LAM WITH YEH FINAL FORM;Lo;0;AL; 0644 064A;;;;N;;;;; FC88;ARABIC LIGATURE MEEM WITH ALEF FINAL FORM;Lo;0;AL; 0645 0627;;;;N;;;;; FC89;ARABIC LIGATURE MEEM WITH MEEM FINAL FORM;Lo;0;AL; 0645 0645;;;;N;;;;; FC8A;ARABIC LIGATURE NOON WITH REH FINAL FORM;Lo;0;AL; 0646 0631;;;;N;;;;; FC8B;ARABIC LIGATURE NOON WITH ZAIN FINAL FORM;Lo;0;AL; 0646 0632;;;;N;;;;; FC8C;ARABIC LIGATURE NOON WITH MEEM FINAL FORM;Lo;0;AL; 0646 0645;;;;N;;;;; FC8D;ARABIC LIGATURE NOON WITH NOON FINAL FORM;Lo;0;AL; 0646 0646;;;;N;;;;; FC8E;ARABIC LIGATURE NOON WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 0646 0649;;;;N;;;;; FC8F;ARABIC LIGATURE NOON WITH YEH FINAL FORM;Lo;0;AL; 0646 064A;;;;N;;;;; FC90;ARABIC LIGATURE ALEF MAKSURA WITH SUPERSCRIPT ALEF FINAL FORM;Lo;0;AL; 0649 0670;;;;N;;;;; FC91;ARABIC LIGATURE YEH WITH REH FINAL FORM;Lo;0;AL; 064A 0631;;;;N;;;;; FC92;ARABIC LIGATURE YEH WITH ZAIN FINAL FORM;Lo;0;AL; 064A 0632;;;;N;;;;; FC93;ARABIC LIGATURE YEH WITH MEEM FINAL FORM;Lo;0;AL; 064A 0645;;;;N;;;;; FC94;ARABIC LIGATURE YEH WITH NOON FINAL FORM;Lo;0;AL; 064A 0646;;;;N;;;;; FC95;ARABIC LIGATURE YEH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 064A 0649;;;;N;;;;; FC96;ARABIC LIGATURE YEH WITH YEH FINAL FORM;Lo;0;AL; 064A 064A;;;;N;;;;; FC97;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH JEEM INITIAL FORM;Lo;0;AL; 0626 062C;;;;N;;;;; FC98;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HAH INITIAL FORM;Lo;0;AL; 0626 062D;;;;N;;;;; FC99;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH KHAH INITIAL FORM;Lo;0;AL; 0626 062E;;;;N;;;;; FC9A;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM INITIAL FORM;Lo;0;AL; 0626 0645;;;;N;;;;; FC9B;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HEH INITIAL FORM;Lo;0;AL; 0626 0647;;;;N;;;;; FC9C;ARABIC LIGATURE BEH WITH JEEM INITIAL FORM;Lo;0;AL; 0628 062C;;;;N;;;;; FC9D;ARABIC LIGATURE BEH WITH HAH INITIAL FORM;Lo;0;AL; 0628 062D;;;;N;;;;; FC9E;ARABIC LIGATURE BEH WITH KHAH INITIAL FORM;Lo;0;AL; 0628 062E;;;;N;;;;; FC9F;ARABIC LIGATURE BEH WITH MEEM INITIAL FORM;Lo;0;AL; 0628 0645;;;;N;;;;; FCA0;ARABIC LIGATURE BEH WITH HEH INITIAL FORM;Lo;0;AL; 0628 0647;;;;N;;;;; FCA1;ARABIC LIGATURE TEH WITH JEEM INITIAL FORM;Lo;0;AL; 062A 062C;;;;N;;;;; FCA2;ARABIC LIGATURE TEH WITH HAH INITIAL FORM;Lo;0;AL; 062A 062D;;;;N;;;;; FCA3;ARABIC LIGATURE TEH WITH KHAH INITIAL FORM;Lo;0;AL; 062A 062E;;;;N;;;;; FCA4;ARABIC LIGATURE TEH WITH MEEM INITIAL FORM;Lo;0;AL; 062A 0645;;;;N;;;;; FCA5;ARABIC LIGATURE TEH WITH HEH INITIAL FORM;Lo;0;AL; 062A 0647;;;;N;;;;; FCA6;ARABIC LIGATURE THEH WITH MEEM INITIAL FORM;Lo;0;AL; 062B 0645;;;;N;;;;; FCA7;ARABIC LIGATURE JEEM WITH HAH INITIAL FORM;Lo;0;AL; 062C 062D;;;;N;;;;; FCA8;ARABIC LIGATURE JEEM WITH MEEM INITIAL FORM;Lo;0;AL; 062C 0645;;;;N;;;;; FCA9;ARABIC LIGATURE HAH WITH JEEM INITIAL FORM;Lo;0;AL; 062D 062C;;;;N;;;;; FCAA;ARABIC LIGATURE HAH WITH MEEM INITIAL FORM;Lo;0;AL; 062D 0645;;;;N;;;;; FCAB;ARABIC LIGATURE KHAH WITH JEEM INITIAL FORM;Lo;0;AL; 062E 062C;;;;N;;;;; FCAC;ARABIC LIGATURE KHAH WITH MEEM INITIAL FORM;Lo;0;AL; 062E 0645;;;;N;;;;; FCAD;ARABIC LIGATURE SEEN WITH JEEM INITIAL FORM;Lo;0;AL; 0633 062C;;;;N;;;;; FCAE;ARABIC LIGATURE SEEN WITH HAH INITIAL FORM;Lo;0;AL; 0633 062D;;;;N;;;;; FCAF;ARABIC LIGATURE SEEN WITH KHAH INITIAL FORM;Lo;0;AL; 0633 062E;;;;N;;;;; FCB0;ARABIC LIGATURE SEEN WITH MEEM INITIAL FORM;Lo;0;AL; 0633 0645;;;;N;;;;; FCB1;ARABIC LIGATURE SAD WITH HAH INITIAL FORM;Lo;0;AL; 0635 062D;;;;N;;;;; FCB2;ARABIC LIGATURE SAD WITH KHAH INITIAL FORM;Lo;0;AL; 0635 062E;;;;N;;;;; FCB3;ARABIC LIGATURE SAD WITH MEEM INITIAL FORM;Lo;0;AL; 0635 0645;;;;N;;;;; FCB4;ARABIC LIGATURE DAD WITH JEEM INITIAL FORM;Lo;0;AL; 0636 062C;;;;N;;;;; FCB5;ARABIC LIGATURE DAD WITH HAH INITIAL FORM;Lo;0;AL; 0636 062D;;;;N;;;;; FCB6;ARABIC LIGATURE DAD WITH KHAH INITIAL FORM;Lo;0;AL; 0636 062E;;;;N;;;;; FCB7;ARABIC LIGATURE DAD WITH MEEM INITIAL FORM;Lo;0;AL; 0636 0645;;;;N;;;;; FCB8;ARABIC LIGATURE TAH WITH HAH INITIAL FORM;Lo;0;AL; 0637 062D;;;;N;;;;; FCB9;ARABIC LIGATURE ZAH WITH MEEM INITIAL FORM;Lo;0;AL; 0638 0645;;;;N;;;;; FCBA;ARABIC LIGATURE AIN WITH JEEM INITIAL FORM;Lo;0;AL; 0639 062C;;;;N;;;;; FCBB;ARABIC LIGATURE AIN WITH MEEM INITIAL FORM;Lo;0;AL; 0639 0645;;;;N;;;;; FCBC;ARABIC LIGATURE GHAIN WITH JEEM INITIAL FORM;Lo;0;AL; 063A 062C;;;;N;;;;; FCBD;ARABIC LIGATURE GHAIN WITH MEEM INITIAL FORM;Lo;0;AL; 063A 0645;;;;N;;;;; FCBE;ARABIC LIGATURE FEH WITH JEEM INITIAL FORM;Lo;0;AL; 0641 062C;;;;N;;;;; FCBF;ARABIC LIGATURE FEH WITH HAH INITIAL FORM;Lo;0;AL; 0641 062D;;;;N;;;;; FCC0;ARABIC LIGATURE FEH WITH KHAH INITIAL FORM;Lo;0;AL; 0641 062E;;;;N;;;;; FCC1;ARABIC LIGATURE FEH WITH MEEM INITIAL FORM;Lo;0;AL; 0641 0645;;;;N;;;;; FCC2;ARABIC LIGATURE QAF WITH HAH INITIAL FORM;Lo;0;AL; 0642 062D;;;;N;;;;; FCC3;ARABIC LIGATURE QAF WITH MEEM INITIAL FORM;Lo;0;AL; 0642 0645;;;;N;;;;; FCC4;ARABIC LIGATURE KAF WITH JEEM INITIAL FORM;Lo;0;AL; 0643 062C;;;;N;;;;; FCC5;ARABIC LIGATURE KAF WITH HAH INITIAL FORM;Lo;0;AL; 0643 062D;;;;N;;;;; FCC6;ARABIC LIGATURE KAF WITH KHAH INITIAL FORM;Lo;0;AL; 0643 062E;;;;N;;;;; FCC7;ARABIC LIGATURE KAF WITH LAM INITIAL FORM;Lo;0;AL; 0643 0644;;;;N;;;;; FCC8;ARABIC LIGATURE KAF WITH MEEM INITIAL FORM;Lo;0;AL; 0643 0645;;;;N;;;;; FCC9;ARABIC LIGATURE LAM WITH JEEM INITIAL FORM;Lo;0;AL; 0644 062C;;;;N;;;;; FCCA;ARABIC LIGATURE LAM WITH HAH INITIAL FORM;Lo;0;AL; 0644 062D;;;;N;;;;; FCCB;ARABIC LIGATURE LAM WITH KHAH INITIAL FORM;Lo;0;AL; 0644 062E;;;;N;;;;; FCCC;ARABIC LIGATURE LAM WITH MEEM INITIAL FORM;Lo;0;AL; 0644 0645;;;;N;;;;; FCCD;ARABIC LIGATURE LAM WITH HEH INITIAL FORM;Lo;0;AL; 0644 0647;;;;N;;;;; FCCE;ARABIC LIGATURE MEEM WITH JEEM INITIAL FORM;Lo;0;AL; 0645 062C;;;;N;;;;; FCCF;ARABIC LIGATURE MEEM WITH HAH INITIAL FORM;Lo;0;AL; 0645 062D;;;;N;;;;; FCD0;ARABIC LIGATURE MEEM WITH KHAH INITIAL FORM;Lo;0;AL; 0645 062E;;;;N;;;;; FCD1;ARABIC LIGATURE MEEM WITH MEEM INITIAL FORM;Lo;0;AL; 0645 0645;;;;N;;;;; FCD2;ARABIC LIGATURE NOON WITH JEEM INITIAL FORM;Lo;0;AL; 0646 062C;;;;N;;;;; FCD3;ARABIC LIGATURE NOON WITH HAH INITIAL FORM;Lo;0;AL; 0646 062D;;;;N;;;;; FCD4;ARABIC LIGATURE NOON WITH KHAH INITIAL FORM;Lo;0;AL; 0646 062E;;;;N;;;;; FCD5;ARABIC LIGATURE NOON WITH MEEM INITIAL FORM;Lo;0;AL; 0646 0645;;;;N;;;;; FCD6;ARABIC LIGATURE NOON WITH HEH INITIAL FORM;Lo;0;AL; 0646 0647;;;;N;;;;; FCD7;ARABIC LIGATURE HEH WITH JEEM INITIAL FORM;Lo;0;AL; 0647 062C;;;;N;;;;; FCD8;ARABIC LIGATURE HEH WITH MEEM INITIAL FORM;Lo;0;AL; 0647 0645;;;;N;;;;; FCD9;ARABIC LIGATURE HEH WITH SUPERSCRIPT ALEF INITIAL FORM;Lo;0;AL; 0647 0670;;;;N;;;;; FCDA;ARABIC LIGATURE YEH WITH JEEM INITIAL FORM;Lo;0;AL; 064A 062C;;;;N;;;;; FCDB;ARABIC LIGATURE YEH WITH HAH INITIAL FORM;Lo;0;AL; 064A 062D;;;;N;;;;; FCDC;ARABIC LIGATURE YEH WITH KHAH INITIAL FORM;Lo;0;AL; 064A 062E;;;;N;;;;; FCDD;ARABIC LIGATURE YEH WITH MEEM INITIAL FORM;Lo;0;AL; 064A 0645;;;;N;;;;; FCDE;ARABIC LIGATURE YEH WITH HEH INITIAL FORM;Lo;0;AL; 064A 0647;;;;N;;;;; FCDF;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM MEDIAL FORM;Lo;0;AL; 0626 0645;;;;N;;;;; FCE0;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HEH MEDIAL FORM;Lo;0;AL; 0626 0647;;;;N;;;;; FCE1;ARABIC LIGATURE BEH WITH MEEM MEDIAL FORM;Lo;0;AL; 0628 0645;;;;N;;;;; FCE2;ARABIC LIGATURE BEH WITH HEH MEDIAL FORM;Lo;0;AL; 0628 0647;;;;N;;;;; FCE3;ARABIC LIGATURE TEH WITH MEEM MEDIAL FORM;Lo;0;AL; 062A 0645;;;;N;;;;; FCE4;ARABIC LIGATURE TEH WITH HEH MEDIAL FORM;Lo;0;AL; 062A 0647;;;;N;;;;; FCE5;ARABIC LIGATURE THEH WITH MEEM MEDIAL FORM;Lo;0;AL; 062B 0645;;;;N;;;;; FCE6;ARABIC LIGATURE THEH WITH HEH MEDIAL FORM;Lo;0;AL; 062B 0647;;;;N;;;;; FCE7;ARABIC LIGATURE SEEN WITH MEEM MEDIAL FORM;Lo;0;AL; 0633 0645;;;;N;;;;; FCE8;ARABIC LIGATURE SEEN WITH HEH MEDIAL FORM;Lo;0;AL; 0633 0647;;;;N;;;;; FCE9;ARABIC LIGATURE SHEEN WITH MEEM MEDIAL FORM;Lo;0;AL; 0634 0645;;;;N;;;;; FCEA;ARABIC LIGATURE SHEEN WITH HEH MEDIAL FORM;Lo;0;AL; 0634 0647;;;;N;;;;; FCEB;ARABIC LIGATURE KAF WITH LAM MEDIAL FORM;Lo;0;AL; 0643 0644;;;;N;;;;; FCEC;ARABIC LIGATURE KAF WITH MEEM MEDIAL FORM;Lo;0;AL; 0643 0645;;;;N;;;;; FCED;ARABIC LIGATURE LAM WITH MEEM MEDIAL FORM;Lo;0;AL; 0644 0645;;;;N;;;;; FCEE;ARABIC LIGATURE NOON WITH MEEM MEDIAL FORM;Lo;0;AL; 0646 0645;;;;N;;;;; FCEF;ARABIC LIGATURE NOON WITH HEH MEDIAL FORM;Lo;0;AL; 0646 0647;;;;N;;;;; FCF0;ARABIC LIGATURE YEH WITH MEEM MEDIAL FORM;Lo;0;AL; 064A 0645;;;;N;;;;; FCF1;ARABIC LIGATURE YEH WITH HEH MEDIAL FORM;Lo;0;AL; 064A 0647;;;;N;;;;; FCF2;ARABIC LIGATURE SHADDA WITH FATHA MEDIAL FORM;Lo;0;AL; 0640 064E 0651;;;;N;;;;; FCF3;ARABIC LIGATURE SHADDA WITH DAMMA MEDIAL FORM;Lo;0;AL; 0640 064F 0651;;;;N;;;;; FCF4;ARABIC LIGATURE SHADDA WITH KASRA MEDIAL FORM;Lo;0;AL; 0640 0650 0651;;;;N;;;;; FCF5;ARABIC LIGATURE TAH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL; 0637 0649;;;;N;;;;; FCF6;ARABIC LIGATURE TAH WITH YEH ISOLATED FORM;Lo;0;AL; 0637 064A;;;;N;;;;; FCF7;ARABIC LIGATURE AIN WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL; 0639 0649;;;;N;;;;; FCF8;ARABIC LIGATURE AIN WITH YEH ISOLATED FORM;Lo;0;AL; 0639 064A;;;;N;;;;; FCF9;ARABIC LIGATURE GHAIN WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL; 063A 0649;;;;N;;;;; FCFA;ARABIC LIGATURE GHAIN WITH YEH ISOLATED FORM;Lo;0;AL; 063A 064A;;;;N;;;;; FCFB;ARABIC LIGATURE SEEN WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL; 0633 0649;;;;N;;;;; FCFC;ARABIC LIGATURE SEEN WITH YEH ISOLATED FORM;Lo;0;AL; 0633 064A;;;;N;;;;; FCFD;ARABIC LIGATURE SHEEN WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL; 0634 0649;;;;N;;;;; FCFE;ARABIC LIGATURE SHEEN WITH YEH ISOLATED FORM;Lo;0;AL; 0634 064A;;;;N;;;;; FCFF;ARABIC LIGATURE HAH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL; 062D 0649;;;;N;;;;; FD00;ARABIC LIGATURE HAH WITH YEH ISOLATED FORM;Lo;0;AL; 062D 064A;;;;N;;;;; FD01;ARABIC LIGATURE JEEM WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL; 062C 0649;;;;N;;;;; FD02;ARABIC LIGATURE JEEM WITH YEH ISOLATED FORM;Lo;0;AL; 062C 064A;;;;N;;;;; FD03;ARABIC LIGATURE KHAH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL; 062E 0649;;;;N;;;;; FD04;ARABIC LIGATURE KHAH WITH YEH ISOLATED FORM;Lo;0;AL; 062E 064A;;;;N;;;;; FD05;ARABIC LIGATURE SAD WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL; 0635 0649;;;;N;;;;; FD06;ARABIC LIGATURE SAD WITH YEH ISOLATED FORM;Lo;0;AL; 0635 064A;;;;N;;;;; FD07;ARABIC LIGATURE DAD WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL; 0636 0649;;;;N;;;;; FD08;ARABIC LIGATURE DAD WITH YEH ISOLATED FORM;Lo;0;AL; 0636 064A;;;;N;;;;; FD09;ARABIC LIGATURE SHEEN WITH JEEM ISOLATED FORM;Lo;0;AL; 0634 062C;;;;N;;;;; FD0A;ARABIC LIGATURE SHEEN WITH HAH ISOLATED FORM;Lo;0;AL; 0634 062D;;;;N;;;;; FD0B;ARABIC LIGATURE SHEEN WITH KHAH ISOLATED FORM;Lo;0;AL; 0634 062E;;;;N;;;;; FD0C;ARABIC LIGATURE SHEEN WITH MEEM ISOLATED FORM;Lo;0;AL; 0634 0645;;;;N;;;;; FD0D;ARABIC LIGATURE SHEEN WITH REH ISOLATED FORM;Lo;0;AL; 0634 0631;;;;N;;;;; FD0E;ARABIC LIGATURE SEEN WITH REH ISOLATED FORM;Lo;0;AL; 0633 0631;;;;N;;;;; FD0F;ARABIC LIGATURE SAD WITH REH ISOLATED FORM;Lo;0;AL; 0635 0631;;;;N;;;;; FD10;ARABIC LIGATURE DAD WITH REH ISOLATED FORM;Lo;0;AL; 0636 0631;;;;N;;;;; FD11;ARABIC LIGATURE TAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 0637 0649;;;;N;;;;; FD12;ARABIC LIGATURE TAH WITH YEH FINAL FORM;Lo;0;AL; 0637 064A;;;;N;;;;; FD13;ARABIC LIGATURE AIN WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 0639 0649;;;;N;;;;; FD14;ARABIC LIGATURE AIN WITH YEH FINAL FORM;Lo;0;AL; 0639 064A;;;;N;;;;; FD15;ARABIC LIGATURE GHAIN WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 063A 0649;;;;N;;;;; FD16;ARABIC LIGATURE GHAIN WITH YEH FINAL FORM;Lo;0;AL; 063A 064A;;;;N;;;;; FD17;ARABIC LIGATURE SEEN WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 0633 0649;;;;N;;;;; FD18;ARABIC LIGATURE SEEN WITH YEH FINAL FORM;Lo;0;AL; 0633 064A;;;;N;;;;; FD19;ARABIC LIGATURE SHEEN WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 0634 0649;;;;N;;;;; FD1A;ARABIC LIGATURE SHEEN WITH YEH FINAL FORM;Lo;0;AL; 0634 064A;;;;N;;;;; FD1B;ARABIC LIGATURE HAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 062D 0649;;;;N;;;;; FD1C;ARABIC LIGATURE HAH WITH YEH FINAL FORM;Lo;0;AL; 062D 064A;;;;N;;;;; FD1D;ARABIC LIGATURE JEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 062C 0649;;;;N;;;;; FD1E;ARABIC LIGATURE JEEM WITH YEH FINAL FORM;Lo;0;AL; 062C 064A;;;;N;;;;; FD1F;ARABIC LIGATURE KHAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 062E 0649;;;;N;;;;; FD20;ARABIC LIGATURE KHAH WITH YEH FINAL FORM;Lo;0;AL; 062E 064A;;;;N;;;;; FD21;ARABIC LIGATURE SAD WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 0635 0649;;;;N;;;;; FD22;ARABIC LIGATURE SAD WITH YEH FINAL FORM;Lo;0;AL; 0635 064A;;;;N;;;;; FD23;ARABIC LIGATURE DAD WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 0636 0649;;;;N;;;;; FD24;ARABIC LIGATURE DAD WITH YEH FINAL FORM;Lo;0;AL; 0636 064A;;;;N;;;;; FD25;ARABIC LIGATURE SHEEN WITH JEEM FINAL FORM;Lo;0;AL; 0634 062C;;;;N;;;;; FD26;ARABIC LIGATURE SHEEN WITH HAH FINAL FORM;Lo;0;AL; 0634 062D;;;;N;;;;; FD27;ARABIC LIGATURE SHEEN WITH KHAH FINAL FORM;Lo;0;AL; 0634 062E;;;;N;;;;; FD28;ARABIC LIGATURE SHEEN WITH MEEM FINAL FORM;Lo;0;AL; 0634 0645;;;;N;;;;; FD29;ARABIC LIGATURE SHEEN WITH REH FINAL FORM;Lo;0;AL; 0634 0631;;;;N;;;;; FD2A;ARABIC LIGATURE SEEN WITH REH FINAL FORM;Lo;0;AL; 0633 0631;;;;N;;;;; FD2B;ARABIC LIGATURE SAD WITH REH FINAL FORM;Lo;0;AL; 0635 0631;;;;N;;;;; FD2C;ARABIC LIGATURE DAD WITH REH FINAL FORM;Lo;0;AL; 0636 0631;;;;N;;;;; FD2D;ARABIC LIGATURE SHEEN WITH JEEM INITIAL FORM;Lo;0;AL; 0634 062C;;;;N;;;;; FD2E;ARABIC LIGATURE SHEEN WITH HAH INITIAL FORM;Lo;0;AL; 0634 062D;;;;N;;;;; FD2F;ARABIC LIGATURE SHEEN WITH KHAH INITIAL FORM;Lo;0;AL; 0634 062E;;;;N;;;;; FD30;ARABIC LIGATURE SHEEN WITH MEEM INITIAL FORM;Lo;0;AL; 0634 0645;;;;N;;;;; FD31;ARABIC LIGATURE SEEN WITH HEH INITIAL FORM;Lo;0;AL; 0633 0647;;;;N;;;;; FD32;ARABIC LIGATURE SHEEN WITH HEH INITIAL FORM;Lo;0;AL; 0634 0647;;;;N;;;;; FD33;ARABIC LIGATURE TAH WITH MEEM INITIAL FORM;Lo;0;AL; 0637 0645;;;;N;;;;; FD34;ARABIC LIGATURE SEEN WITH JEEM MEDIAL FORM;Lo;0;AL; 0633 062C;;;;N;;;;; FD35;ARABIC LIGATURE SEEN WITH HAH MEDIAL FORM;Lo;0;AL; 0633 062D;;;;N;;;;; FD36;ARABIC LIGATURE SEEN WITH KHAH MEDIAL FORM;Lo;0;AL; 0633 062E;;;;N;;;;; FD37;ARABIC LIGATURE SHEEN WITH JEEM MEDIAL FORM;Lo;0;AL; 0634 062C;;;;N;;;;; FD38;ARABIC LIGATURE SHEEN WITH HAH MEDIAL FORM;Lo;0;AL; 0634 062D;;;;N;;;;; FD39;ARABIC LIGATURE SHEEN WITH KHAH MEDIAL FORM;Lo;0;AL; 0634 062E;;;;N;;;;; FD3A;ARABIC LIGATURE TAH WITH MEEM MEDIAL FORM;Lo;0;AL; 0637 0645;;;;N;;;;; FD3B;ARABIC LIGATURE ZAH WITH MEEM MEDIAL FORM;Lo;0;AL; 0638 0645;;;;N;;;;; FD3C;ARABIC LIGATURE ALEF WITH FATHATAN FINAL FORM;Lo;0;AL; 0627 064B;;;;N;;;;; FD3D;ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM;Lo;0;AL; 0627 064B;;;;N;;;;; FD3E;ORNATE LEFT PARENTHESIS;Ps;0;ON;;;;;N;;;;; FD3F;ORNATE RIGHT PARENTHESIS;Pe;0;ON;;;;;N;;;;; FD50;ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM;Lo;0;AL; 062A 062C 0645;;;;N;;;;; FD51;ARABIC LIGATURE TEH WITH HAH WITH JEEM FINAL FORM;Lo;0;AL; 062A 062D 062C;;;;N;;;;; FD52;ARABIC LIGATURE TEH WITH HAH WITH JEEM INITIAL FORM;Lo;0;AL; 062A 062D 062C;;;;N;;;;; FD53;ARABIC LIGATURE TEH WITH HAH WITH MEEM INITIAL FORM;Lo;0;AL; 062A 062D 0645;;;;N;;;;; FD54;ARABIC LIGATURE TEH WITH KHAH WITH MEEM INITIAL FORM;Lo;0;AL; 062A 062E 0645;;;;N;;;;; FD55;ARABIC LIGATURE TEH WITH MEEM WITH JEEM INITIAL FORM;Lo;0;AL; 062A 0645 062C;;;;N;;;;; FD56;ARABIC LIGATURE TEH WITH MEEM WITH HAH INITIAL FORM;Lo;0;AL; 062A 0645 062D;;;;N;;;;; FD57;ARABIC LIGATURE TEH WITH MEEM WITH KHAH INITIAL FORM;Lo;0;AL; 062A 0645 062E;;;;N;;;;; FD58;ARABIC LIGATURE JEEM WITH MEEM WITH HAH FINAL FORM;Lo;0;AL; 062C 0645 062D;;;;N;;;;; FD59;ARABIC LIGATURE JEEM WITH MEEM WITH HAH INITIAL FORM;Lo;0;AL; 062C 0645 062D;;;;N;;;;; FD5A;ARABIC LIGATURE HAH WITH MEEM WITH YEH FINAL FORM;Lo;0;AL; 062D 0645 064A;;;;N;;;;; FD5B;ARABIC LIGATURE HAH WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 062D 0645 0649;;;;N;;;;; FD5C;ARABIC LIGATURE SEEN WITH HAH WITH JEEM INITIAL FORM;Lo;0;AL; 0633 062D 062C;;;;N;;;;; FD5D;ARABIC LIGATURE SEEN WITH JEEM WITH HAH INITIAL FORM;Lo;0;AL; 0633 062C 062D;;;;N;;;;; FD5E;ARABIC LIGATURE SEEN WITH JEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 0633 062C 0649;;;;N;;;;; FD5F;ARABIC LIGATURE SEEN WITH MEEM WITH HAH FINAL FORM;Lo;0;AL; 0633 0645 062D;;;;N;;;;; FD60;ARABIC LIGATURE SEEN WITH MEEM WITH HAH INITIAL FORM;Lo;0;AL; 0633 0645 062D;;;;N;;;;; FD61;ARABIC LIGATURE SEEN WITH MEEM WITH JEEM INITIAL FORM;Lo;0;AL; 0633 0645 062C;;;;N;;;;; FD62;ARABIC LIGATURE SEEN WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL; 0633 0645 0645;;;;N;;;;; FD63;ARABIC LIGATURE SEEN WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL; 0633 0645 0645;;;;N;;;;; FD64;ARABIC LIGATURE SAD WITH HAH WITH HAH FINAL FORM;Lo;0;AL; 0635 062D 062D;;;;N;;;;; FD65;ARABIC LIGATURE SAD WITH HAH WITH HAH INITIAL FORM;Lo;0;AL; 0635 062D 062D;;;;N;;;;; FD66;ARABIC LIGATURE SAD WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL; 0635 0645 0645;;;;N;;;;; FD67;ARABIC LIGATURE SHEEN WITH HAH WITH MEEM FINAL FORM;Lo;0;AL; 0634 062D 0645;;;;N;;;;; FD68;ARABIC LIGATURE SHEEN WITH HAH WITH MEEM INITIAL FORM;Lo;0;AL; 0634 062D 0645;;;;N;;;;; FD69;ARABIC LIGATURE SHEEN WITH JEEM WITH YEH FINAL FORM;Lo;0;AL; 0634 062C 064A;;;;N;;;;; FD6A;ARABIC LIGATURE SHEEN WITH MEEM WITH KHAH FINAL FORM;Lo;0;AL; 0634 0645 062E;;;;N;;;;; FD6B;ARABIC LIGATURE SHEEN WITH MEEM WITH KHAH INITIAL FORM;Lo;0;AL; 0634 0645 062E;;;;N;;;;; FD6C;ARABIC LIGATURE SHEEN WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL; 0634 0645 0645;;;;N;;;;; FD6D;ARABIC LIGATURE SHEEN WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL; 0634 0645 0645;;;;N;;;;; FD6E;ARABIC LIGATURE DAD WITH HAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 0636 062D 0649;;;;N;;;;; FD6F;ARABIC LIGATURE DAD WITH KHAH WITH MEEM FINAL FORM;Lo;0;AL; 0636 062E 0645;;;;N;;;;; FD70;ARABIC LIGATURE DAD WITH KHAH WITH MEEM INITIAL FORM;Lo;0;AL; 0636 062E 0645;;;;N;;;;; FD71;ARABIC LIGATURE TAH WITH MEEM WITH HAH FINAL FORM;Lo;0;AL; 0637 0645 062D;;;;N;;;;; FD72;ARABIC LIGATURE TAH WITH MEEM WITH HAH INITIAL FORM;Lo;0;AL; 0637 0645 062D;;;;N;;;;; FD73;ARABIC LIGATURE TAH WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL; 0637 0645 0645;;;;N;;;;; FD74;ARABIC LIGATURE TAH WITH MEEM WITH YEH FINAL FORM;Lo;0;AL; 0637 0645 064A;;;;N;;;;; FD75;ARABIC LIGATURE AIN WITH JEEM WITH MEEM FINAL FORM;Lo;0;AL; 0639 062C 0645;;;;N;;;;; FD76;ARABIC LIGATURE AIN WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL; 0639 0645 0645;;;;N;;;;; FD77;ARABIC LIGATURE AIN WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL; 0639 0645 0645;;;;N;;;;; FD78;ARABIC LIGATURE AIN WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 0639 0645 0649;;;;N;;;;; FD79;ARABIC LIGATURE GHAIN WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL; 063A 0645 0645;;;;N;;;;; FD7A;ARABIC LIGATURE GHAIN WITH MEEM WITH YEH FINAL FORM;Lo;0;AL; 063A 0645 064A;;;;N;;;;; FD7B;ARABIC LIGATURE GHAIN WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 063A 0645 0649;;;;N;;;;; FD7C;ARABIC LIGATURE FEH WITH KHAH WITH MEEM FINAL FORM;Lo;0;AL; 0641 062E 0645;;;;N;;;;; FD7D;ARABIC LIGATURE FEH WITH KHAH WITH MEEM INITIAL FORM;Lo;0;AL; 0641 062E 0645;;;;N;;;;; FD7E;ARABIC LIGATURE QAF WITH MEEM WITH HAH FINAL FORM;Lo;0;AL; 0642 0645 062D;;;;N;;;;; FD7F;ARABIC LIGATURE QAF WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL; 0642 0645 0645;;;;N;;;;; FD80;ARABIC LIGATURE LAM WITH HAH WITH MEEM FINAL FORM;Lo;0;AL; 0644 062D 0645;;;;N;;;;; FD81;ARABIC LIGATURE LAM WITH HAH WITH YEH FINAL FORM;Lo;0;AL; 0644 062D 064A;;;;N;;;;; FD82;ARABIC LIGATURE LAM WITH HAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 0644 062D 0649;;;;N;;;;; FD83;ARABIC LIGATURE LAM WITH JEEM WITH JEEM INITIAL FORM;Lo;0;AL; 0644 062C 062C;;;;N;;;;; FD84;ARABIC LIGATURE LAM WITH JEEM WITH JEEM FINAL FORM;Lo;0;AL; 0644 062C 062C;;;;N;;;;; FD85;ARABIC LIGATURE LAM WITH KHAH WITH MEEM FINAL FORM;Lo;0;AL; 0644 062E 0645;;;;N;;;;; FD86;ARABIC LIGATURE LAM WITH KHAH WITH MEEM INITIAL FORM;Lo;0;AL; 0644 062E 0645;;;;N;;;;; FD87;ARABIC LIGATURE LAM WITH MEEM WITH HAH FINAL FORM;Lo;0;AL; 0644 0645 062D;;;;N;;;;; FD88;ARABIC LIGATURE LAM WITH MEEM WITH HAH INITIAL FORM;Lo;0;AL; 0644 0645 062D;;;;N;;;;; FD89;ARABIC LIGATURE MEEM WITH HAH WITH JEEM INITIAL FORM;Lo;0;AL; 0645 062D 062C;;;;N;;;;; FD8A;ARABIC LIGATURE MEEM WITH HAH WITH MEEM INITIAL FORM;Lo;0;AL; 0645 062D 0645;;;;N;;;;; FD8B;ARABIC LIGATURE MEEM WITH HAH WITH YEH FINAL FORM;Lo;0;AL; 0645 062D 064A;;;;N;;;;; FD8C;ARABIC LIGATURE MEEM WITH JEEM WITH HAH INITIAL FORM;Lo;0;AL; 0645 062C 062D;;;;N;;;;; FD8D;ARABIC LIGATURE MEEM WITH JEEM WITH MEEM INITIAL FORM;Lo;0;AL; 0645 062C 0645;;;;N;;;;; FD8E;ARABIC LIGATURE MEEM WITH KHAH WITH JEEM INITIAL FORM;Lo;0;AL; 0645 062E 062C;;;;N;;;;; FD8F;ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM;Lo;0;AL; 0645 062E 0645;;;;N;;;;; FD92;ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM;Lo;0;AL; 0645 062C 062E;;;;N;;;;; FD93;ARABIC LIGATURE HEH WITH MEEM WITH JEEM INITIAL FORM;Lo;0;AL; 0647 0645 062C;;;;N;;;;; FD94;ARABIC LIGATURE HEH WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL; 0647 0645 0645;;;;N;;;;; FD95;ARABIC LIGATURE NOON WITH HAH WITH MEEM INITIAL FORM;Lo;0;AL; 0646 062D 0645;;;;N;;;;; FD96;ARABIC LIGATURE NOON WITH HAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 0646 062D 0649;;;;N;;;;; FD97;ARABIC LIGATURE NOON WITH JEEM WITH MEEM FINAL FORM;Lo;0;AL; 0646 062C 0645;;;;N;;;;; FD98;ARABIC LIGATURE NOON WITH JEEM WITH MEEM INITIAL FORM;Lo;0;AL; 0646 062C 0645;;;;N;;;;; FD99;ARABIC LIGATURE NOON WITH JEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 0646 062C 0649;;;;N;;;;; FD9A;ARABIC LIGATURE NOON WITH MEEM WITH YEH FINAL FORM;Lo;0;AL; 0646 0645 064A;;;;N;;;;; FD9B;ARABIC LIGATURE NOON WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 0646 0645 0649;;;;N;;;;; FD9C;ARABIC LIGATURE YEH WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL; 064A 0645 0645;;;;N;;;;; FD9D;ARABIC LIGATURE YEH WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL; 064A 0645 0645;;;;N;;;;; FD9E;ARABIC LIGATURE BEH WITH KHAH WITH YEH FINAL FORM;Lo;0;AL; 0628 062E 064A;;;;N;;;;; FD9F;ARABIC LIGATURE TEH WITH JEEM WITH YEH FINAL FORM;Lo;0;AL; 062A 062C 064A;;;;N;;;;; FDA0;ARABIC LIGATURE TEH WITH JEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 062A 062C 0649;;;;N;;;;; FDA1;ARABIC LIGATURE TEH WITH KHAH WITH YEH FINAL FORM;Lo;0;AL; 062A 062E 064A;;;;N;;;;; FDA2;ARABIC LIGATURE TEH WITH KHAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 062A 062E 0649;;;;N;;;;; FDA3;ARABIC LIGATURE TEH WITH MEEM WITH YEH FINAL FORM;Lo;0;AL; 062A 0645 064A;;;;N;;;;; FDA4;ARABIC LIGATURE TEH WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 062A 0645 0649;;;;N;;;;; FDA5;ARABIC LIGATURE JEEM WITH MEEM WITH YEH FINAL FORM;Lo;0;AL; 062C 0645 064A;;;;N;;;;; FDA6;ARABIC LIGATURE JEEM WITH HAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 062C 062D 0649;;;;N;;;;; FDA7;ARABIC LIGATURE JEEM WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 062C 0645 0649;;;;N;;;;; FDA8;ARABIC LIGATURE SEEN WITH KHAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 0633 062E 0649;;;;N;;;;; FDA9;ARABIC LIGATURE SAD WITH HAH WITH YEH FINAL FORM;Lo;0;AL; 0635 062D 064A;;;;N;;;;; FDAA;ARABIC LIGATURE SHEEN WITH HAH WITH YEH FINAL FORM;Lo;0;AL; 0634 062D 064A;;;;N;;;;; FDAB;ARABIC LIGATURE DAD WITH HAH WITH YEH FINAL FORM;Lo;0;AL; 0636 062D 064A;;;;N;;;;; FDAC;ARABIC LIGATURE LAM WITH JEEM WITH YEH FINAL FORM;Lo;0;AL; 0644 062C 064A;;;;N;;;;; FDAD;ARABIC LIGATURE LAM WITH MEEM WITH YEH FINAL FORM;Lo;0;AL; 0644 0645 064A;;;;N;;;;; FDAE;ARABIC LIGATURE YEH WITH HAH WITH YEH FINAL FORM;Lo;0;AL; 064A 062D 064A;;;;N;;;;; FDAF;ARABIC LIGATURE YEH WITH JEEM WITH YEH FINAL FORM;Lo;0;AL; 064A 062C 064A;;;;N;;;;; FDB0;ARABIC LIGATURE YEH WITH MEEM WITH YEH FINAL FORM;Lo;0;AL; 064A 0645 064A;;;;N;;;;; FDB1;ARABIC LIGATURE MEEM WITH MEEM WITH YEH FINAL FORM;Lo;0;AL; 0645 0645 064A;;;;N;;;;; FDB2;ARABIC LIGATURE QAF WITH MEEM WITH YEH FINAL FORM;Lo;0;AL; 0642 0645 064A;;;;N;;;;; FDB3;ARABIC LIGATURE NOON WITH HAH WITH YEH FINAL FORM;Lo;0;AL; 0646 062D 064A;;;;N;;;;; FDB4;ARABIC LIGATURE QAF WITH MEEM WITH HAH INITIAL FORM;Lo;0;AL; 0642 0645 062D;;;;N;;;;; FDB5;ARABIC LIGATURE LAM WITH HAH WITH MEEM INITIAL FORM;Lo;0;AL; 0644 062D 0645;;;;N;;;;; FDB6;ARABIC LIGATURE AIN WITH MEEM WITH YEH FINAL FORM;Lo;0;AL; 0639 0645 064A;;;;N;;;;; FDB7;ARABIC LIGATURE KAF WITH MEEM WITH YEH FINAL FORM;Lo;0;AL; 0643 0645 064A;;;;N;;;;; FDB8;ARABIC LIGATURE NOON WITH JEEM WITH HAH INITIAL FORM;Lo;0;AL; 0646 062C 062D;;;;N;;;;; FDB9;ARABIC LIGATURE MEEM WITH KHAH WITH YEH FINAL FORM;Lo;0;AL; 0645 062E 064A;;;;N;;;;; FDBA;ARABIC LIGATURE LAM WITH JEEM WITH MEEM INITIAL FORM;Lo;0;AL; 0644 062C 0645;;;;N;;;;; FDBB;ARABIC LIGATURE KAF WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL; 0643 0645 0645;;;;N;;;;; FDBC;ARABIC LIGATURE LAM WITH JEEM WITH MEEM FINAL FORM;Lo;0;AL; 0644 062C 0645;;;;N;;;;; FDBD;ARABIC LIGATURE NOON WITH JEEM WITH HAH FINAL FORM;Lo;0;AL; 0646 062C 062D;;;;N;;;;; FDBE;ARABIC LIGATURE JEEM WITH HAH WITH YEH FINAL FORM;Lo;0;AL; 062C 062D 064A;;;;N;;;;; FDBF;ARABIC LIGATURE HAH WITH JEEM WITH YEH FINAL FORM;Lo;0;AL; 062D 062C 064A;;;;N;;;;; FDC0;ARABIC LIGATURE MEEM WITH JEEM WITH YEH FINAL FORM;Lo;0;AL; 0645 062C 064A;;;;N;;;;; FDC1;ARABIC LIGATURE FEH WITH MEEM WITH YEH FINAL FORM;Lo;0;AL; 0641 0645 064A;;;;N;;;;; FDC2;ARABIC LIGATURE BEH WITH HAH WITH YEH FINAL FORM;Lo;0;AL; 0628 062D 064A;;;;N;;;;; FDC3;ARABIC LIGATURE KAF WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL; 0643 0645 0645;;;;N;;;;; FDC4;ARABIC LIGATURE AIN WITH JEEM WITH MEEM INITIAL FORM;Lo;0;AL; 0639 062C 0645;;;;N;;;;; FDC5;ARABIC LIGATURE SAD WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL; 0635 0645 0645;;;;N;;;;; FDC6;ARABIC LIGATURE SEEN WITH KHAH WITH YEH FINAL FORM;Lo;0;AL; 0633 062E 064A;;;;N;;;;; FDC7;ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM;Lo;0;AL; 0646 062C 064A;;;;N;;;;; FDF0;ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM;Lo;0;AL; 0635 0644 06D2;;;;N;;;;; FDF1;ARABIC LIGATURE QALA USED AS KORANIC STOP SIGN ISOLATED FORM;Lo;0;AL; 0642 0644 06D2;;;;N;;;;; FDF2;ARABIC LIGATURE ALLAH ISOLATED FORM;Lo;0;AL; 0627 0644 0644 0647;;;;N;;;;; FDF3;ARABIC LIGATURE AKBAR ISOLATED FORM;Lo;0;AL; 0627 0643 0628 0631;;;;N;;;;; FDF4;ARABIC LIGATURE MOHAMMAD ISOLATED FORM;Lo;0;AL; 0645 062D 0645 062F;;;;N;;;;; FDF5;ARABIC LIGATURE SALAM ISOLATED FORM;Lo;0;AL; 0635 0644 0639 0645;;;;N;;;;; FDF6;ARABIC LIGATURE RASOUL ISOLATED FORM;Lo;0;AL; 0631 0633 0648 0644;;;;N;;;;; FDF7;ARABIC LIGATURE ALAYHE ISOLATED FORM;Lo;0;AL; 0639 0644 064A 0647;;;;N;;;;; FDF8;ARABIC LIGATURE WASALLAM ISOLATED FORM;Lo;0;AL; 0648 0633 0644 0645;;;;N;;;;; FDF9;ARABIC LIGATURE SALLA ISOLATED FORM;Lo;0;AL; 0635 0644 0649;;;;N;;;;; FDFA;ARABIC LIGATURE SALLALLAHOU ALAYHE WASALLAM;Lo;0;AL; 0635 0644 0649 0020 0627 0644 0644 0647 0020 0639 0644 064A 0647 0020 0648 0633 0644 0645;;;;N;ARABIC LETTER SALLALLAHOU ALAYHE WASALLAM;;;; FDFB;ARABIC LIGATURE JALLAJALALOUHOU;Lo;0;AL; 062C 0644 0020 062C 0644 0627 0644 0647;;;;N;ARABIC LETTER JALLAJALALOUHOU;;;; FE20;COMBINING LIGATURE LEFT HALF;Mn;230;NSM;;;;;N;;;;; FE21;COMBINING LIGATURE RIGHT HALF;Mn;230;NSM;;;;;N;;;;; FE22;COMBINING DOUBLE TILDE LEFT HALF;Mn;230;NSM;;;;;N;;;;; FE23;COMBINING DOUBLE TILDE RIGHT HALF;Mn;230;NSM;;;;;N;;;;; FE30;PRESENTATION FORM FOR VERTICAL TWO DOT LEADER;Po;0;ON; 2025;;;;N;GLYPH FOR VERTICAL TWO DOT LEADER;;;; FE31;PRESENTATION FORM FOR VERTICAL EM DASH;Pd;0;ON; 2014;;;;N;GLYPH FOR VERTICAL EM DASH;;;; FE32;PRESENTATION FORM FOR VERTICAL EN DASH;Pd;0;ON; 2013;;;;N;GLYPH FOR VERTICAL EN DASH;;;; FE33;PRESENTATION FORM FOR VERTICAL LOW LINE;Pc;0;ON; 005F;;;;N;GLYPH FOR VERTICAL SPACING UNDERSCORE;;;; FE34;PRESENTATION FORM FOR VERTICAL WAVY LOW LINE;Pc;0;ON; 005F;;;;N;GLYPH FOR VERTICAL SPACING WAVY UNDERSCORE;;;; FE35;PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS;Ps;0;ON; 0028;;;;N;GLYPH FOR VERTICAL OPENING PARENTHESIS;;;; FE36;PRESENTATION FORM FOR VERTICAL RIGHT PARENTHESIS;Pe;0;ON; 0029;;;;N;GLYPH FOR VERTICAL CLOSING PARENTHESIS;;;; FE37;PRESENTATION FORM FOR VERTICAL LEFT CURLY BRACKET;Ps;0;ON; 007B;;;;N;GLYPH FOR VERTICAL OPENING CURLY BRACKET;;;; FE38;PRESENTATION FORM FOR VERTICAL RIGHT CURLY BRACKET;Pe;0;ON; 007D;;;;N;GLYPH FOR VERTICAL CLOSING CURLY BRACKET;;;; FE39;PRESENTATION FORM FOR VERTICAL LEFT TORTOISE SHELL BRACKET;Ps;0;ON; 3014;;;;N;GLYPH FOR VERTICAL OPENING TORTOISE SHELL BRACKET;;;; FE3A;PRESENTATION FORM FOR VERTICAL RIGHT TORTOISE SHELL BRACKET;Pe;0;ON; 3015;;;;N;GLYPH FOR VERTICAL CLOSING TORTOISE SHELL BRACKET;;;; FE3B;PRESENTATION FORM FOR VERTICAL LEFT BLACK LENTICULAR BRACKET;Ps;0;ON; 3010;;;;N;GLYPH FOR VERTICAL OPENING BLACK LENTICULAR BRACKET;;;; FE3C;PRESENTATION FORM FOR VERTICAL RIGHT BLACK LENTICULAR BRACKET;Pe;0;ON; 3011;;;;N;GLYPH FOR VERTICAL CLOSING BLACK LENTICULAR BRACKET;;;; FE3D;PRESENTATION FORM FOR VERTICAL LEFT DOUBLE ANGLE BRACKET;Ps;0;ON; 300A;;;;N;GLYPH FOR VERTICAL OPENING DOUBLE ANGLE BRACKET;;;; FE3E;PRESENTATION FORM FOR VERTICAL RIGHT DOUBLE ANGLE BRACKET;Pe;0;ON; 300B;;;;N;GLYPH FOR VERTICAL CLOSING DOUBLE ANGLE BRACKET;;;; FE3F;PRESENTATION FORM FOR VERTICAL LEFT ANGLE BRACKET;Ps;0;ON; 3008;;;;N;GLYPH FOR VERTICAL OPENING ANGLE BRACKET;;;; FE40;PRESENTATION FORM FOR VERTICAL RIGHT ANGLE BRACKET;Pe;0;ON; 3009;;;;N;GLYPH FOR VERTICAL CLOSING ANGLE BRACKET;;;; FE41;PRESENTATION FORM FOR VERTICAL LEFT CORNER BRACKET;Ps;0;ON; 300C;;;;N;GLYPH FOR VERTICAL OPENING CORNER BRACKET;;;; FE42;PRESENTATION FORM FOR VERTICAL RIGHT CORNER BRACKET;Pe;0;ON; 300D;;;;N;GLYPH FOR VERTICAL CLOSING CORNER BRACKET;;;; FE43;PRESENTATION FORM FOR VERTICAL LEFT WHITE CORNER BRACKET;Ps;0;ON; 300E;;;;N;GLYPH FOR VERTICAL OPENING WHITE CORNER BRACKET;;;; FE44;PRESENTATION FORM FOR VERTICAL RIGHT WHITE CORNER BRACKET;Pe;0;ON; 300F;;;;N;GLYPH FOR VERTICAL CLOSING WHITE CORNER BRACKET;;;; FE49;DASHED OVERLINE;Po;0;ON; 203E;;;;N;SPACING DASHED OVERSCORE;;;; FE4A;CENTRELINE OVERLINE;Po;0;ON; 203E;;;;N;SPACING CENTERLINE OVERSCORE;;;; FE4B;WAVY OVERLINE;Po;0;ON; 203E;;;;N;SPACING WAVY OVERSCORE;;;; FE4C;DOUBLE WAVY OVERLINE;Po;0;ON; 203E;;;;N;SPACING DOUBLE WAVY OVERSCORE;;;; FE4D;DASHED LOW LINE;Pc;0;ON; 005F;;;;N;SPACING DASHED UNDERSCORE;;;; FE4E;CENTRELINE LOW LINE;Pc;0;ON; 005F;;;;N;SPACING CENTERLINE UNDERSCORE;;;; FE4F;WAVY LOW LINE;Pc;0;ON; 005F;;;;N;SPACING WAVY UNDERSCORE;;;; FE50;SMALL COMMA;Po;0;CS; 002C;;;;N;;;;; FE51;SMALL IDEOGRAPHIC COMMA;Po;0;ON; 3001;;;;N;;;;; FE52;SMALL FULL STOP;Po;0;CS; 002E;;;;N;SMALL PERIOD;;;; FE54;SMALL SEMICOLON;Po;0;ON; 003B;;;;N;;;;; FE55;SMALL COLON;Po;0;CS; 003A;;;;N;;;;; FE56;SMALL QUESTION MARK;Po;0;ON; 003F;;;;N;;;;; FE57;SMALL EXCLAMATION MARK;Po;0;ON; 0021;;;;N;;;;; FE58;SMALL EM DASH;Pd;0;ON; 2014;;;;N;;;;; FE59;SMALL LEFT PARENTHESIS;Ps;0;ON; 0028;;;;N;SMALL OPENING PARENTHESIS;;;; FE5A;SMALL RIGHT PARENTHESIS;Pe;0;ON; 0029;;;;N;SMALL CLOSING PARENTHESIS;;;; FE5B;SMALL LEFT CURLY BRACKET;Ps;0;ON; 007B;;;;N;SMALL OPENING CURLY BRACKET;;;; FE5C;SMALL RIGHT CURLY BRACKET;Pe;0;ON; 007D;;;;N;SMALL CLOSING CURLY BRACKET;;;; FE5D;SMALL LEFT TORTOISE SHELL BRACKET;Ps;0;ON; 3014;;;;N;SMALL OPENING TORTOISE SHELL BRACKET;;;; FE5E;SMALL RIGHT TORTOISE SHELL BRACKET;Pe;0;ON; 3015;;;;N;SMALL CLOSING TORTOISE SHELL BRACKET;;;; FE5F;SMALL NUMBER SIGN;Po;0;ET; 0023;;;;N;;;;; FE60;SMALL AMPERSAND;Po;0;ON; 0026;;;;N;;;;; FE61;SMALL ASTERISK;Po;0;ON; 002A;;;;N;;;;; FE62;SMALL PLUS SIGN;Sm;0;ET; 002B;;;;N;;;;; FE63;SMALL HYPHEN-MINUS;Pd;0;ET; 002D;;;;N;;;;; FE64;SMALL LESS-THAN SIGN;Sm;0;ON; 003C;;;;N;;;;; FE65;SMALL GREATER-THAN SIGN;Sm;0;ON; 003E;;;;N;;;;; FE66;SMALL EQUALS SIGN;Sm;0;ON; 003D;;;;N;;;;; FE68;SMALL REVERSE SOLIDUS;Po;0;ON; 005C;;;;N;SMALL BACKSLASH;;;; FE69;SMALL DOLLAR SIGN;Sc;0;ET; 0024;;;;N;;;;; FE6A;SMALL PERCENT SIGN;Po;0;ET; 0025;;;;N;;;;; FE6B;SMALL COMMERCIAL AT;Po;0;ON; 0040;;;;N;;;;; FE70;ARABIC FATHATAN ISOLATED FORM;Lo;0;AL; 0020 064B;;;;N;ARABIC SPACING FATHATAN;;;; FE71;ARABIC TATWEEL WITH FATHATAN ABOVE;Lo;0;AL; 0640 064B;;;;N;ARABIC FATHATAN ON TATWEEL;;;; FE72;ARABIC DAMMATAN ISOLATED FORM;Lo;0;AL; 0020 064C;;;;N;ARABIC SPACING DAMMATAN;;;; FE74;ARABIC KASRATAN ISOLATED FORM;Lo;0;AL; 0020 064D;;;;N;ARABIC SPACING KASRATAN;;;; FE76;ARABIC FATHA ISOLATED FORM;Lo;0;AL; 0020 064E;;;;N;ARABIC SPACING FATHAH;;;; FE77;ARABIC FATHA MEDIAL FORM;Lo;0;AL; 0640 064E;;;;N;ARABIC FATHAH ON TATWEEL;;;; FE78;ARABIC DAMMA ISOLATED FORM;Lo;0;AL; 0020 064F;;;;N;ARABIC SPACING DAMMAH;;;; FE79;ARABIC DAMMA MEDIAL FORM;Lo;0;AL; 0640 064F;;;;N;ARABIC DAMMAH ON TATWEEL;;;; FE7A;ARABIC KASRA ISOLATED FORM;Lo;0;AL; 0020 0650;;;;N;ARABIC SPACING KASRAH;;;; FE7B;ARABIC KASRA MEDIAL FORM;Lo;0;AL; 0640 0650;;;;N;ARABIC KASRAH ON TATWEEL;;;; FE7C;ARABIC SHADDA ISOLATED FORM;Lo;0;AL; 0020 0651;;;;N;ARABIC SPACING SHADDAH;;;; FE7D;ARABIC SHADDA MEDIAL FORM;Lo;0;AL; 0640 0651;;;;N;ARABIC SHADDAH ON TATWEEL;;;; FE7E;ARABIC SUKUN ISOLATED FORM;Lo;0;AL; 0020 0652;;;;N;ARABIC SPACING SUKUN;;;; FE7F;ARABIC SUKUN MEDIAL FORM;Lo;0;AL; 0640 0652;;;;N;ARABIC SUKUN ON TATWEEL;;;; FE80;ARABIC LETTER HAMZA ISOLATED FORM;Lo;0;AL; 0621;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH;;;; FE81;ARABIC LETTER ALEF WITH MADDA ABOVE ISOLATED FORM;Lo;0;AL; 0622;;;;N;GLYPH FOR ISOLATE ARABIC MADDAH ON ALEF;;;; FE82;ARABIC LETTER ALEF WITH MADDA ABOVE FINAL FORM;Lo;0;AL; 0622;;;;N;GLYPH FOR FINAL ARABIC MADDAH ON ALEF;;;; FE83;ARABIC LETTER ALEF WITH HAMZA ABOVE ISOLATED FORM;Lo;0;AL; 0623;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH ON ALEF;;;; FE84;ARABIC LETTER ALEF WITH HAMZA ABOVE FINAL FORM;Lo;0;AL; 0623;;;;N;GLYPH FOR FINAL ARABIC HAMZAH ON ALEF;;;; FE85;ARABIC LETTER WAW WITH HAMZA ABOVE ISOLATED FORM;Lo;0;AL; 0624;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH ON WAW;;;; FE86;ARABIC LETTER WAW WITH HAMZA ABOVE FINAL FORM;Lo;0;AL; 0624;;;;N;GLYPH FOR FINAL ARABIC HAMZAH ON WAW;;;; FE87;ARABIC LETTER ALEF WITH HAMZA BELOW ISOLATED FORM;Lo;0;AL; 0625;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH UNDER ALEF;;;; FE88;ARABIC LETTER ALEF WITH HAMZA BELOW FINAL FORM;Lo;0;AL; 0625;;;;N;GLYPH FOR FINAL ARABIC HAMZAH UNDER ALEF;;;; FE89;ARABIC LETTER YEH WITH HAMZA ABOVE ISOLATED FORM;Lo;0;AL; 0626;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH ON YA;;;; FE8A;ARABIC LETTER YEH WITH HAMZA ABOVE FINAL FORM;Lo;0;AL; 0626;;;;N;GLYPH FOR FINAL ARABIC HAMZAH ON YA;;;; FE8B;ARABIC LETTER YEH WITH HAMZA ABOVE INITIAL FORM;Lo;0;AL; 0626;;;;N;GLYPH FOR INITIAL ARABIC HAMZAH ON YA;;;; FE8C;ARABIC LETTER YEH WITH HAMZA ABOVE MEDIAL FORM;Lo;0;AL; 0626;;;;N;GLYPH FOR MEDIAL ARABIC HAMZAH ON YA;;;; FE8D;ARABIC LETTER ALEF ISOLATED FORM;Lo;0;AL; 0627;;;;N;GLYPH FOR ISOLATE ARABIC ALEF;;;; FE8E;ARABIC LETTER ALEF FINAL FORM;Lo;0;AL; 0627;;;;N;GLYPH FOR FINAL ARABIC ALEF;;;; FE8F;ARABIC LETTER BEH ISOLATED FORM;Lo;0;AL; 0628;;;;N;GLYPH FOR ISOLATE ARABIC BAA;;;; FE90;ARABIC LETTER BEH FINAL FORM;Lo;0;AL; 0628;;;;N;GLYPH FOR FINAL ARABIC BAA;;;; FE91;ARABIC LETTER BEH INITIAL FORM;Lo;0;AL; 0628;;;;N;GLYPH FOR INITIAL ARABIC BAA;;;; FE92;ARABIC LETTER BEH MEDIAL FORM;Lo;0;AL; 0628;;;;N;GLYPH FOR MEDIAL ARABIC BAA;;;; FE93;ARABIC LETTER TEH MARBUTA ISOLATED FORM;Lo;0;AL; 0629;;;;N;GLYPH FOR ISOLATE ARABIC TAA MARBUTAH;;;; FE94;ARABIC LETTER TEH MARBUTA FINAL FORM;Lo;0;AL; 0629;;;;N;GLYPH FOR FINAL ARABIC TAA MARBUTAH;;;; FE95;ARABIC LETTER TEH ISOLATED FORM;Lo;0;AL; 062A;;;;N;GLYPH FOR ISOLATE ARABIC TAA;;;; FE96;ARABIC LETTER TEH FINAL FORM;Lo;0;AL; 062A;;;;N;GLYPH FOR FINAL ARABIC TAA;;;; FE97;ARABIC LETTER TEH INITIAL FORM;Lo;0;AL; 062A;;;;N;GLYPH FOR INITIAL ARABIC TAA;;;; FE98;ARABIC LETTER TEH MEDIAL FORM;Lo;0;AL; 062A;;;;N;GLYPH FOR MEDIAL ARABIC TAA;;;; FE99;ARABIC LETTER THEH ISOLATED FORM;Lo;0;AL; 062B;;;;N;GLYPH FOR ISOLATE ARABIC THAA;;;; FE9A;ARABIC LETTER THEH FINAL FORM;Lo;0;AL; 062B;;;;N;GLYPH FOR FINAL ARABIC THAA;;;; FE9B;ARABIC LETTER THEH INITIAL FORM;Lo;0;AL; 062B;;;;N;GLYPH FOR INITIAL ARABIC THAA;;;; FE9C;ARABIC LETTER THEH MEDIAL FORM;Lo;0;AL; 062B;;;;N;GLYPH FOR MEDIAL ARABIC THAA;;;; FE9D;ARABIC LETTER JEEM ISOLATED FORM;Lo;0;AL; 062C;;;;N;GLYPH FOR ISOLATE ARABIC JEEM;;;; FE9E;ARABIC LETTER JEEM FINAL FORM;Lo;0;AL; 062C;;;;N;GLYPH FOR FINAL ARABIC JEEM;;;; FE9F;ARABIC LETTER JEEM INITIAL FORM;Lo;0;AL; 062C;;;;N;GLYPH FOR INITIAL ARABIC JEEM;;;; FEA0;ARABIC LETTER JEEM MEDIAL FORM;Lo;0;AL; 062C;;;;N;GLYPH FOR MEDIAL ARABIC JEEM;;;; FEA1;ARABIC LETTER HAH ISOLATED FORM;Lo;0;AL; 062D;;;;N;GLYPH FOR ISOLATE ARABIC HAA;;;; FEA2;ARABIC LETTER HAH FINAL FORM;Lo;0;AL; 062D;;;;N;GLYPH FOR FINAL ARABIC HAA;;;; FEA3;ARABIC LETTER HAH INITIAL FORM;Lo;0;AL; 062D;;;;N;GLYPH FOR INITIAL ARABIC HAA;;;; FEA4;ARABIC LETTER HAH MEDIAL FORM;Lo;0;AL; 062D;;;;N;GLYPH FOR MEDIAL ARABIC HAA;;;; FEA5;ARABIC LETTER KHAH ISOLATED FORM;Lo;0;AL; 062E;;;;N;GLYPH FOR ISOLATE ARABIC KHAA;;;; FEA6;ARABIC LETTER KHAH FINAL FORM;Lo;0;AL; 062E;;;;N;GLYPH FOR FINAL ARABIC KHAA;;;; FEA7;ARABIC LETTER KHAH INITIAL FORM;Lo;0;AL; 062E;;;;N;GLYPH FOR INITIAL ARABIC KHAA;;;; FEA8;ARABIC LETTER KHAH MEDIAL FORM;Lo;0;AL; 062E;;;;N;GLYPH FOR MEDIAL ARABIC KHAA;;;; FEA9;ARABIC LETTER DAL ISOLATED FORM;Lo;0;AL; 062F;;;;N;GLYPH FOR ISOLATE ARABIC DAL;;;; FEAA;ARABIC LETTER DAL FINAL FORM;Lo;0;AL; 062F;;;;N;GLYPH FOR FINAL ARABIC DAL;;;; FEAB;ARABIC LETTER THAL ISOLATED FORM;Lo;0;AL; 0630;;;;N;GLYPH FOR ISOLATE ARABIC THAL;;;; FEAC;ARABIC LETTER THAL FINAL FORM;Lo;0;AL; 0630;;;;N;GLYPH FOR FINAL ARABIC THAL;;;; FEAD;ARABIC LETTER REH ISOLATED FORM;Lo;0;AL; 0631;;;;N;GLYPH FOR ISOLATE ARABIC RA;;;; FEAE;ARABIC LETTER REH FINAL FORM;Lo;0;AL; 0631;;;;N;GLYPH FOR FINAL ARABIC RA;;;; FEAF;ARABIC LETTER ZAIN ISOLATED FORM;Lo;0;AL; 0632;;;;N;GLYPH FOR ISOLATE ARABIC ZAIN;;;; FEB0;ARABIC LETTER ZAIN FINAL FORM;Lo;0;AL; 0632;;;;N;GLYPH FOR FINAL ARABIC ZAIN;;;; FEB1;ARABIC LETTER SEEN ISOLATED FORM;Lo;0;AL; 0633;;;;N;GLYPH FOR ISOLATE ARABIC SEEN;;;; FEB2;ARABIC LETTER SEEN FINAL FORM;Lo;0;AL; 0633;;;;N;GLYPH FOR FINAL ARABIC SEEN;;;; FEB3;ARABIC LETTER SEEN INITIAL FORM;Lo;0;AL; 0633;;;;N;GLYPH FOR INITIAL ARABIC SEEN;;;; FEB4;ARABIC LETTER SEEN MEDIAL FORM;Lo;0;AL; 0633;;;;N;GLYPH FOR MEDIAL ARABIC SEEN;;;; FEB5;ARABIC LETTER SHEEN ISOLATED FORM;Lo;0;AL; 0634;;;;N;GLYPH FOR ISOLATE ARABIC SHEEN;;;; FEB6;ARABIC LETTER SHEEN FINAL FORM;Lo;0;AL; 0634;;;;N;GLYPH FOR FINAL ARABIC SHEEN;;;; FEB7;ARABIC LETTER SHEEN INITIAL FORM;Lo;0;AL; 0634;;;;N;GLYPH FOR INITIAL ARABIC SHEEN;;;; FEB8;ARABIC LETTER SHEEN MEDIAL FORM;Lo;0;AL; 0634;;;;N;GLYPH FOR MEDIAL ARABIC SHEEN;;;; FEB9;ARABIC LETTER SAD ISOLATED FORM;Lo;0;AL; 0635;;;;N;GLYPH FOR ISOLATE ARABIC SAD;;;; FEBA;ARABIC LETTER SAD FINAL FORM;Lo;0;AL; 0635;;;;N;GLYPH FOR FINAL ARABIC SAD;;;; FEBB;ARABIC LETTER SAD INITIAL FORM;Lo;0;AL; 0635;;;;N;GLYPH FOR INITIAL ARABIC SAD;;;; FEBC;ARABIC LETTER SAD MEDIAL FORM;Lo;0;AL; 0635;;;;N;GLYPH FOR MEDIAL ARABIC SAD;;;; FEBD;ARABIC LETTER DAD ISOLATED FORM;Lo;0;AL; 0636;;;;N;GLYPH FOR ISOLATE ARABIC DAD;;;; FEBE;ARABIC LETTER DAD FINAL FORM;Lo;0;AL; 0636;;;;N;GLYPH FOR FINAL ARABIC DAD;;;; FEBF;ARABIC LETTER DAD INITIAL FORM;Lo;0;AL; 0636;;;;N;GLYPH FOR INITIAL ARABIC DAD;;;; FEC0;ARABIC LETTER DAD MEDIAL FORM;Lo;0;AL; 0636;;;;N;GLYPH FOR MEDIAL ARABIC DAD;;;; FEC1;ARABIC LETTER TAH ISOLATED FORM;Lo;0;AL; 0637;;;;N;GLYPH FOR ISOLATE ARABIC TAH;;;; FEC2;ARABIC LETTER TAH FINAL FORM;Lo;0;AL; 0637;;;;N;GLYPH FOR FINAL ARABIC TAH;;;; FEC3;ARABIC LETTER TAH INITIAL FORM;Lo;0;AL; 0637;;;;N;GLYPH FOR INITIAL ARABIC TAH;;;; FEC4;ARABIC LETTER TAH MEDIAL FORM;Lo;0;AL; 0637;;;;N;GLYPH FOR MEDIAL ARABIC TAH;;;; FEC5;ARABIC LETTER ZAH ISOLATED FORM;Lo;0;AL; 0638;;;;N;GLYPH FOR ISOLATE ARABIC DHAH;;;; FEC6;ARABIC LETTER ZAH FINAL FORM;Lo;0;AL; 0638;;;;N;GLYPH FOR FINAL ARABIC DHAH;;;; FEC7;ARABIC LETTER ZAH INITIAL FORM;Lo;0;AL; 0638;;;;N;GLYPH FOR INITIAL ARABIC DHAH;;;; FEC8;ARABIC LETTER ZAH MEDIAL FORM;Lo;0;AL; 0638;;;;N;GLYPH FOR MEDIAL ARABIC DHAH;;;; FEC9;ARABIC LETTER AIN ISOLATED FORM;Lo;0;AL; 0639;;;;N;GLYPH FOR ISOLATE ARABIC AIN;;;; FECA;ARABIC LETTER AIN FINAL FORM;Lo;0;AL; 0639;;;;N;GLYPH FOR FINAL ARABIC AIN;;;; FECB;ARABIC LETTER AIN INITIAL FORM;Lo;0;AL; 0639;;;;N;GLYPH FOR INITIAL ARABIC AIN;;;; FECC;ARABIC LETTER AIN MEDIAL FORM;Lo;0;AL; 0639;;;;N;GLYPH FOR MEDIAL ARABIC AIN;;;; FECD;ARABIC LETTER GHAIN ISOLATED FORM;Lo;0;AL; 063A;;;;N;GLYPH FOR ISOLATE ARABIC GHAIN;;;; FECE;ARABIC LETTER GHAIN FINAL FORM;Lo;0;AL; 063A;;;;N;GLYPH FOR FINAL ARABIC GHAIN;;;; FECF;ARABIC LETTER GHAIN INITIAL FORM;Lo;0;AL; 063A;;;;N;GLYPH FOR INITIAL ARABIC GHAIN;;;; FED0;ARABIC LETTER GHAIN MEDIAL FORM;Lo;0;AL; 063A;;;;N;GLYPH FOR MEDIAL ARABIC GHAIN;;;; FED1;ARABIC LETTER FEH ISOLATED FORM;Lo;0;AL; 0641;;;;N;GLYPH FOR ISOLATE ARABIC FA;;;; FED2;ARABIC LETTER FEH FINAL FORM;Lo;0;AL; 0641;;;;N;GLYPH FOR FINAL ARABIC FA;;;; FED3;ARABIC LETTER FEH INITIAL FORM;Lo;0;AL; 0641;;;;N;GLYPH FOR INITIAL ARABIC FA;;;; FED4;ARABIC LETTER FEH MEDIAL FORM;Lo;0;AL; 0641;;;;N;GLYPH FOR MEDIAL ARABIC FA;;;; FED5;ARABIC LETTER QAF ISOLATED FORM;Lo;0;AL; 0642;;;;N;GLYPH FOR ISOLATE ARABIC QAF;;;; FED6;ARABIC LETTER QAF FINAL FORM;Lo;0;AL; 0642;;;;N;GLYPH FOR FINAL ARABIC QAF;;;; FED7;ARABIC LETTER QAF INITIAL FORM;Lo;0;AL; 0642;;;;N;GLYPH FOR INITIAL ARABIC QAF;;;; FED8;ARABIC LETTER QAF MEDIAL FORM;Lo;0;AL; 0642;;;;N;GLYPH FOR MEDIAL ARABIC QAF;;;; FED9;ARABIC LETTER KAF ISOLATED FORM;Lo;0;AL; 0643;;;;N;GLYPH FOR ISOLATE ARABIC CAF;;;; FEDA;ARABIC LETTER KAF FINAL FORM;Lo;0;AL; 0643;;;;N;GLYPH FOR FINAL ARABIC CAF;;;; FEDB;ARABIC LETTER KAF INITIAL FORM;Lo;0;AL; 0643;;;;N;GLYPH FOR INITIAL ARABIC CAF;;;; FEDC;ARABIC LETTER KAF MEDIAL FORM;Lo;0;AL; 0643;;;;N;GLYPH FOR MEDIAL ARABIC CAF;;;; FEDD;ARABIC LETTER LAM ISOLATED FORM;Lo;0;AL; 0644;;;;N;GLYPH FOR ISOLATE ARABIC LAM;;;; FEDE;ARABIC LETTER LAM FINAL FORM;Lo;0;AL; 0644;;;;N;GLYPH FOR FINAL ARABIC LAM;;;; FEDF;ARABIC LETTER LAM INITIAL FORM;Lo;0;AL; 0644;;;;N;GLYPH FOR INITIAL ARABIC LAM;;;; FEE0;ARABIC LETTER LAM MEDIAL FORM;Lo;0;AL; 0644;;;;N;GLYPH FOR MEDIAL ARABIC LAM;;;; FEE1;ARABIC LETTER MEEM ISOLATED FORM;Lo;0;AL; 0645;;;;N;GLYPH FOR ISOLATE ARABIC MEEM;;;; FEE2;ARABIC LETTER MEEM FINAL FORM;Lo;0;AL; 0645;;;;N;GLYPH FOR FINAL ARABIC MEEM;;;; FEE3;ARABIC LETTER MEEM INITIAL FORM;Lo;0;AL; 0645;;;;N;GLYPH FOR INITIAL ARABIC MEEM;;;; FEE4;ARABIC LETTER MEEM MEDIAL FORM;Lo;0;AL; 0645;;;;N;GLYPH FOR MEDIAL ARABIC MEEM;;;; FEE5;ARABIC LETTER NOON ISOLATED FORM;Lo;0;AL; 0646;;;;N;GLYPH FOR ISOLATE ARABIC NOON;;;; FEE6;ARABIC LETTER NOON FINAL FORM;Lo;0;AL; 0646;;;;N;GLYPH FOR FINAL ARABIC NOON;;;; FEE7;ARABIC LETTER NOON INITIAL FORM;Lo;0;AL; 0646;;;;N;GLYPH FOR INITIAL ARABIC NOON;;;; FEE8;ARABIC LETTER NOON MEDIAL FORM;Lo;0;AL; 0646;;;;N;GLYPH FOR MEDIAL ARABIC NOON;;;; FEE9;ARABIC LETTER HEH ISOLATED FORM;Lo;0;AL; 0647;;;;N;GLYPH FOR ISOLATE ARABIC HA;;;; FEEA;ARABIC LETTER HEH FINAL FORM;Lo;0;AL; 0647;;;;N;GLYPH FOR FINAL ARABIC HA;;;; FEEB;ARABIC LETTER HEH INITIAL FORM;Lo;0;AL; 0647;;;;N;GLYPH FOR INITIAL ARABIC HA;;;; FEEC;ARABIC LETTER HEH MEDIAL FORM;Lo;0;AL; 0647;;;;N;GLYPH FOR MEDIAL ARABIC HA;;;; FEED;ARABIC LETTER WAW ISOLATED FORM;Lo;0;AL; 0648;;;;N;GLYPH FOR ISOLATE ARABIC WAW;;;; FEEE;ARABIC LETTER WAW FINAL FORM;Lo;0;AL; 0648;;;;N;GLYPH FOR FINAL ARABIC WAW;;;; FEEF;ARABIC LETTER ALEF MAKSURA ISOLATED FORM;Lo;0;AL; 0649;;;;N;GLYPH FOR ISOLATE ARABIC ALEF MAQSURAH;;;; FEF0;ARABIC LETTER ALEF MAKSURA FINAL FORM;Lo;0;AL; 0649;;;;N;GLYPH FOR FINAL ARABIC ALEF MAQSURAH;;;; FEF1;ARABIC LETTER YEH ISOLATED FORM;Lo;0;AL; 064A;;;;N;GLYPH FOR ISOLATE ARABIC YA;;;; FEF2;ARABIC LETTER YEH FINAL FORM;Lo;0;AL; 064A;;;;N;GLYPH FOR FINAL ARABIC YA;;;; FEF3;ARABIC LETTER YEH INITIAL FORM;Lo;0;AL; 064A;;;;N;GLYPH FOR INITIAL ARABIC YA;;;; FEF4;ARABIC LETTER YEH MEDIAL FORM;Lo;0;AL; 064A;;;;N;GLYPH FOR MEDIAL ARABIC YA;;;; FEF5;ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE ISOLATED FORM;Lo;0;AL; 0644 0622;;;;N;GLYPH FOR ISOLATE ARABIC MADDAH ON LIGATURE LAM ALEF;;;; FEF6;ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE FINAL FORM;Lo;0;AL; 0644 0622;;;;N;GLYPH FOR FINAL ARABIC MADDAH ON LIGATURE LAM ALEF;;;; FEF7;ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE ISOLATED FORM;Lo;0;AL; 0644 0623;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH ON LIGATURE LAM ALEF;;;; FEF8;ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE FINAL FORM;Lo;0;AL; 0644 0623;;;;N;GLYPH FOR FINAL ARABIC HAMZAH ON LIGATURE LAM ALEF;;;; FEF9;ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW ISOLATED FORM;Lo;0;AL; 0644 0625;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH UNDER LIGATURE LAM ALEF;;;; FEFA;ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW FINAL FORM;Lo;0;AL; 0644 0625;;;;N;GLYPH FOR FINAL ARABIC HAMZAH UNDER LIGATURE LAM ALEF;;;; FEFB;ARABIC LIGATURE LAM WITH ALEF ISOLATED FORM;Lo;0;AL; 0644 0627;;;;N;GLYPH FOR ISOLATE ARABIC LIGATURE LAM ALEF;;;; FEFC;ARABIC LIGATURE LAM WITH ALEF FINAL FORM;Lo;0;AL; 0644 0627;;;;N;GLYPH FOR FINAL ARABIC LIGATURE LAM ALEF;;;; FEFF;ZERO WIDTH NO-BREAK SPACE;Cf;0;BN;;;;;N;BYTE ORDER MARK;;;; FF01;FULLWIDTH EXCLAMATION MARK;Po;0;ON; 0021;;;;N;;;;; FF02;FULLWIDTH QUOTATION MARK;Po;0;ON; 0022;;;;N;;;;; FF03;FULLWIDTH NUMBER SIGN;Po;0;ET; 0023;;;;N;;;;; FF04;FULLWIDTH DOLLAR SIGN;Sc;0;ET; 0024;;;;N;;;;; FF05;FULLWIDTH PERCENT SIGN;Po;0;ET; 0025;;;;N;;;;; FF06;FULLWIDTH AMPERSAND;Po;0;ON; 0026;;;;N;;;;; FF07;FULLWIDTH APOSTROPHE;Po;0;ON; 0027;;;;N;;;;; FF08;FULLWIDTH LEFT PARENTHESIS;Ps;0;ON; 0028;;;;N;FULLWIDTH OPENING PARENTHESIS;;;; FF09;FULLWIDTH RIGHT PARENTHESIS;Pe;0;ON; 0029;;;;N;FULLWIDTH CLOSING PARENTHESIS;;;; FF0A;FULLWIDTH ASTERISK;Po;0;ON; 002A;;;;N;;;;; FF0B;FULLWIDTH PLUS SIGN;Sm;0;ET; 002B;;;;N;;;;; FF0C;FULLWIDTH COMMA;Po;0;CS; 002C;;;;N;;;;; FF0D;FULLWIDTH HYPHEN-MINUS;Pd;0;ET; 002D;;;;N;;;;; FF0E;FULLWIDTH FULL STOP;Po;0;CS; 002E;;;;N;FULLWIDTH PERIOD;;;; FF0F;FULLWIDTH SOLIDUS;Po;0;ES; 002F;;;;N;FULLWIDTH SLASH;;;; FF10;FULLWIDTH DIGIT ZERO;Nd;0;EN; 0030;0;0;0;N;;;;; FF11;FULLWIDTH DIGIT ONE;Nd;0;EN; 0031;1;1;1;N;;;;; FF12;FULLWIDTH DIGIT TWO;Nd;0;EN; 0032;2;2;2;N;;;;; FF13;FULLWIDTH DIGIT THREE;Nd;0;EN; 0033;3;3;3;N;;;;; FF14;FULLWIDTH DIGIT FOUR;Nd;0;EN; 0034;4;4;4;N;;;;; FF15;FULLWIDTH DIGIT FIVE;Nd;0;EN; 0035;5;5;5;N;;;;; FF16;FULLWIDTH DIGIT SIX;Nd;0;EN; 0036;6;6;6;N;;;;; FF17;FULLWIDTH DIGIT SEVEN;Nd;0;EN; 0037;7;7;7;N;;;;; FF18;FULLWIDTH DIGIT EIGHT;Nd;0;EN; 0038;8;8;8;N;;;;; FF19;FULLWIDTH DIGIT NINE;Nd;0;EN; 0039;9;9;9;N;;;;; FF1A;FULLWIDTH COLON;Po;0;CS; 003A;;;;N;;;;; FF1B;FULLWIDTH SEMICOLON;Po;0;ON; 003B;;;;N;;;;; FF1C;FULLWIDTH LESS-THAN SIGN;Sm;0;ON; 003C;;;;N;;;;; FF1D;FULLWIDTH EQUALS SIGN;Sm;0;ON; 003D;;;;N;;;;; FF1E;FULLWIDTH GREATER-THAN SIGN;Sm;0;ON; 003E;;;;N;;;;; FF1F;FULLWIDTH QUESTION MARK;Po;0;ON; 003F;;;;N;;;;; FF20;FULLWIDTH COMMERCIAL AT;Po;0;ON; 0040;;;;N;;;;; FF21;FULLWIDTH LATIN CAPITAL LETTER A;Lu;0;L; 0041;;;;N;;;;FF41; FF22;FULLWIDTH LATIN CAPITAL LETTER B;Lu;0;L; 0042;;;;N;;;;FF42; FF23;FULLWIDTH LATIN CAPITAL LETTER C;Lu;0;L; 0043;;;;N;;;;FF43; FF24;FULLWIDTH LATIN CAPITAL LETTER D;Lu;0;L; 0044;;;;N;;;;FF44; FF25;FULLWIDTH LATIN CAPITAL LETTER E;Lu;0;L; 0045;;;;N;;;;FF45; FF26;FULLWIDTH LATIN CAPITAL LETTER F;Lu;0;L; 0046;;;;N;;;;FF46; FF27;FULLWIDTH LATIN CAPITAL LETTER G;Lu;0;L; 0047;;;;N;;;;FF47; FF28;FULLWIDTH LATIN CAPITAL LETTER H;Lu;0;L; 0048;;;;N;;;;FF48; FF29;FULLWIDTH LATIN CAPITAL LETTER I;Lu;0;L; 0049;;;;N;;;;FF49; FF2A;FULLWIDTH LATIN CAPITAL LETTER J;Lu;0;L; 004A;;;;N;;;;FF4A; FF2B;FULLWIDTH LATIN CAPITAL LETTER K;Lu;0;L; 004B;;;;N;;;;FF4B; FF2C;FULLWIDTH LATIN CAPITAL LETTER L;Lu;0;L; 004C;;;;N;;;;FF4C; FF2D;FULLWIDTH LATIN CAPITAL LETTER M;Lu;0;L; 004D;;;;N;;;;FF4D; FF2E;FULLWIDTH LATIN CAPITAL LETTER N;Lu;0;L; 004E;;;;N;;;;FF4E; FF2F;FULLWIDTH LATIN CAPITAL LETTER O;Lu;0;L; 004F;;;;N;;;;FF4F; FF30;FULLWIDTH LATIN CAPITAL LETTER P;Lu;0;L; 0050;;;;N;;;;FF50; FF31;FULLWIDTH LATIN CAPITAL LETTER Q;Lu;0;L; 0051;;;;N;;;;FF51; FF32;FULLWIDTH LATIN CAPITAL LETTER R;Lu;0;L; 0052;;;;N;;;;FF52; FF33;FULLWIDTH LATIN CAPITAL LETTER S;Lu;0;L; 0053;;;;N;;;;FF53; FF34;FULLWIDTH LATIN CAPITAL LETTER T;Lu;0;L; 0054;;;;N;;;;FF54; FF35;FULLWIDTH LATIN CAPITAL LETTER U;Lu;0;L; 0055;;;;N;;;;FF55; FF36;FULLWIDTH LATIN CAPITAL LETTER V;Lu;0;L; 0056;;;;N;;;;FF56; FF37;FULLWIDTH LATIN CAPITAL LETTER W;Lu;0;L; 0057;;;;N;;;;FF57; FF38;FULLWIDTH LATIN CAPITAL LETTER X;Lu;0;L; 0058;;;;N;;;;FF58; FF39;FULLWIDTH LATIN CAPITAL LETTER Y;Lu;0;L; 0059;;;;N;;;;FF59; FF3A;FULLWIDTH LATIN CAPITAL LETTER Z;Lu;0;L; 005A;;;;N;;;;FF5A; FF3B;FULLWIDTH LEFT SQUARE BRACKET;Ps;0;ON; 005B;;;;N;FULLWIDTH OPENING SQUARE BRACKET;;;; FF3C;FULLWIDTH REVERSE SOLIDUS;Po;0;ON; 005C;;;;N;FULLWIDTH BACKSLASH;;;; FF3D;FULLWIDTH RIGHT SQUARE BRACKET;Pe;0;ON; 005D;;;;N;FULLWIDTH CLOSING SQUARE BRACKET;;;; FF3E;FULLWIDTH CIRCUMFLEX ACCENT;Sk;0;ON; 005E;;;;N;FULLWIDTH SPACING CIRCUMFLEX;;;; FF3F;FULLWIDTH LOW LINE;Pc;0;ON; 005F;;;;N;FULLWIDTH SPACING UNDERSCORE;;;; FF40;FULLWIDTH GRAVE ACCENT;Sk;0;ON; 0060;;;;N;FULLWIDTH SPACING GRAVE;;;; FF41;FULLWIDTH LATIN SMALL LETTER A;Ll;0;L; 0061;;;;N;;;FF21;;FF21 FF42;FULLWIDTH LATIN SMALL LETTER B;Ll;0;L; 0062;;;;N;;;FF22;;FF22 FF43;FULLWIDTH LATIN SMALL LETTER C;Ll;0;L; 0063;;;;N;;;FF23;;FF23 FF44;FULLWIDTH LATIN SMALL LETTER D;Ll;0;L; 0064;;;;N;;;FF24;;FF24 FF45;FULLWIDTH LATIN SMALL LETTER E;Ll;0;L; 0065;;;;N;;;FF25;;FF25 FF46;FULLWIDTH LATIN SMALL LETTER F;Ll;0;L; 0066;;;;N;;;FF26;;FF26 FF47;FULLWIDTH LATIN SMALL LETTER G;Ll;0;L; 0067;;;;N;;;FF27;;FF27 FF48;FULLWIDTH LATIN SMALL LETTER H;Ll;0;L; 0068;;;;N;;;FF28;;FF28 FF49;FULLWIDTH LATIN SMALL LETTER I;Ll;0;L; 0069;;;;N;;;FF29;;FF29 FF4A;FULLWIDTH LATIN SMALL LETTER J;Ll;0;L; 006A;;;;N;;;FF2A;;FF2A FF4B;FULLWIDTH LATIN SMALL LETTER K;Ll;0;L; 006B;;;;N;;;FF2B;;FF2B FF4C;FULLWIDTH LATIN SMALL LETTER L;Ll;0;L; 006C;;;;N;;;FF2C;;FF2C FF4D;FULLWIDTH LATIN SMALL LETTER M;Ll;0;L; 006D;;;;N;;;FF2D;;FF2D FF4E;FULLWIDTH LATIN SMALL LETTER N;Ll;0;L; 006E;;;;N;;;FF2E;;FF2E FF4F;FULLWIDTH LATIN SMALL LETTER O;Ll;0;L; 006F;;;;N;;;FF2F;;FF2F FF50;FULLWIDTH LATIN SMALL LETTER P;Ll;0;L; 0070;;;;N;;;FF30;;FF30 FF51;FULLWIDTH LATIN SMALL LETTER Q;Ll;0;L; 0071;;;;N;;;FF31;;FF31 FF52;FULLWIDTH LATIN SMALL LETTER R;Ll;0;L; 0072;;;;N;;;FF32;;FF32 FF53;FULLWIDTH LATIN SMALL LETTER S;Ll;0;L; 0073;;;;N;;;FF33;;FF33 FF54;FULLWIDTH LATIN SMALL LETTER T;Ll;0;L; 0074;;;;N;;;FF34;;FF34 FF55;FULLWIDTH LATIN SMALL LETTER U;Ll;0;L; 0075;;;;N;;;FF35;;FF35 FF56;FULLWIDTH LATIN SMALL LETTER V;Ll;0;L; 0076;;;;N;;;FF36;;FF36 FF57;FULLWIDTH LATIN SMALL LETTER W;Ll;0;L; 0077;;;;N;;;FF37;;FF37 FF58;FULLWIDTH LATIN SMALL LETTER X;Ll;0;L; 0078;;;;N;;;FF38;;FF38 FF59;FULLWIDTH LATIN SMALL LETTER Y;Ll;0;L; 0079;;;;N;;;FF39;;FF39 FF5A;FULLWIDTH LATIN SMALL LETTER Z;Ll;0;L; 007A;;;;N;;;FF3A;;FF3A FF5B;FULLWIDTH LEFT CURLY BRACKET;Ps;0;ON; 007B;;;;N;FULLWIDTH OPENING CURLY BRACKET;;;; FF5C;FULLWIDTH VERTICAL LINE;Sm;0;ON; 007C;;;;N;FULLWIDTH VERTICAL BAR;;;; FF5D;FULLWIDTH RIGHT CURLY BRACKET;Pe;0;ON; 007D;;;;N;FULLWIDTH CLOSING CURLY BRACKET;;;; FF5E;FULLWIDTH TILDE;Sm;0;ON; 007E;;;;N;FULLWIDTH SPACING TILDE;;;; FF61;HALFWIDTH IDEOGRAPHIC FULL STOP;Po;0;ON; 3002;;;;N;HALFWIDTH IDEOGRAPHIC PERIOD;;;; FF62;HALFWIDTH LEFT CORNER BRACKET;Ps;0;ON; 300C;;;;N;HALFWIDTH OPENING CORNER BRACKET;;;; FF63;HALFWIDTH RIGHT CORNER BRACKET;Pe;0;ON; 300D;;;;N;HALFWIDTH CLOSING CORNER BRACKET;;;; FF64;HALFWIDTH IDEOGRAPHIC COMMA;Po;0;ON; 3001;;;;N;;;;; FF65;HALFWIDTH KATAKANA MIDDLE DOT;Pc;0;ON; 30FB;;;;N;;;;; FF66;HALFWIDTH KATAKANA LETTER WO;Lo;0;L; 30F2;;;;N;;;;; FF67;HALFWIDTH KATAKANA LETTER SMALL A;Lo;0;L; 30A1;;;;N;;;;; FF68;HALFWIDTH KATAKANA LETTER SMALL I;Lo;0;L; 30A3;;;;N;;;;; FF69;HALFWIDTH KATAKANA LETTER SMALL U;Lo;0;L; 30A5;;;;N;;;;; FF6A;HALFWIDTH KATAKANA LETTER SMALL E;Lo;0;L; 30A7;;;;N;;;;; FF6B;HALFWIDTH KATAKANA LETTER SMALL O;Lo;0;L; 30A9;;;;N;;;;; FF6C;HALFWIDTH KATAKANA LETTER SMALL YA;Lo;0;L; 30E3;;;;N;;;;; FF6D;HALFWIDTH KATAKANA LETTER SMALL YU;Lo;0;L; 30E5;;;;N;;;;; FF6E;HALFWIDTH KATAKANA LETTER SMALL YO;Lo;0;L; 30E7;;;;N;;;;; FF6F;HALFWIDTH KATAKANA LETTER SMALL TU;Lo;0;L; 30C3;;;;N;;;;; FF70;HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK;Lm;0;L; 30FC;;;;N;;;;; FF71;HALFWIDTH KATAKANA LETTER A;Lo;0;L; 30A2;;;;N;;;;; FF72;HALFWIDTH KATAKANA LETTER I;Lo;0;L; 30A4;;;;N;;;;; FF73;HALFWIDTH KATAKANA LETTER U;Lo;0;L; 30A6;;;;N;;;;; FF74;HALFWIDTH KATAKANA LETTER E;Lo;0;L; 30A8;;;;N;;;;; FF75;HALFWIDTH KATAKANA LETTER O;Lo;0;L; 30AA;;;;N;;;;; FF76;HALFWIDTH KATAKANA LETTER KA;Lo;0;L; 30AB;;;;N;;;;; FF77;HALFWIDTH KATAKANA LETTER KI;Lo;0;L; 30AD;;;;N;;;;; FF78;HALFWIDTH KATAKANA LETTER KU;Lo;0;L; 30AF;;;;N;;;;; FF79;HALFWIDTH KATAKANA LETTER KE;Lo;0;L; 30B1;;;;N;;;;; FF7A;HALFWIDTH KATAKANA LETTER KO;Lo;0;L; 30B3;;;;N;;;;; FF7B;HALFWIDTH KATAKANA LETTER SA;Lo;0;L; 30B5;;;;N;;;;; FF7C;HALFWIDTH KATAKANA LETTER SI;Lo;0;L; 30B7;;;;N;;;;; FF7D;HALFWIDTH KATAKANA LETTER SU;Lo;0;L; 30B9;;;;N;;;;; FF7E;HALFWIDTH KATAKANA LETTER SE;Lo;0;L; 30BB;;;;N;;;;; FF7F;HALFWIDTH KATAKANA LETTER SO;Lo;0;L; 30BD;;;;N;;;;; FF80;HALFWIDTH KATAKANA LETTER TA;Lo;0;L; 30BF;;;;N;;;;; FF81;HALFWIDTH KATAKANA LETTER TI;Lo;0;L; 30C1;;;;N;;;;; FF82;HALFWIDTH KATAKANA LETTER TU;Lo;0;L; 30C4;;;;N;;;;; FF83;HALFWIDTH KATAKANA LETTER TE;Lo;0;L; 30C6;;;;N;;;;; FF84;HALFWIDTH KATAKANA LETTER TO;Lo;0;L; 30C8;;;;N;;;;; FF85;HALFWIDTH KATAKANA LETTER NA;Lo;0;L; 30CA;;;;N;;;;; FF86;HALFWIDTH KATAKANA LETTER NI;Lo;0;L; 30CB;;;;N;;;;; FF87;HALFWIDTH KATAKANA LETTER NU;Lo;0;L; 30CC;;;;N;;;;; FF88;HALFWIDTH KATAKANA LETTER NE;Lo;0;L; 30CD;;;;N;;;;; FF89;HALFWIDTH KATAKANA LETTER NO;Lo;0;L; 30CE;;;;N;;;;; FF8A;HALFWIDTH KATAKANA LETTER HA;Lo;0;L; 30CF;;;;N;;;;; FF8B;HALFWIDTH KATAKANA LETTER HI;Lo;0;L; 30D2;;;;N;;;;; FF8C;HALFWIDTH KATAKANA LETTER HU;Lo;0;L; 30D5;;;;N;;;;; FF8D;HALFWIDTH KATAKANA LETTER HE;Lo;0;L; 30D8;;;;N;;;;; FF8E;HALFWIDTH KATAKANA LETTER HO;Lo;0;L; 30DB;;;;N;;;;; FF8F;HALFWIDTH KATAKANA LETTER MA;Lo;0;L; 30DE;;;;N;;;;; FF90;HALFWIDTH KATAKANA LETTER MI;Lo;0;L; 30DF;;;;N;;;;; FF91;HALFWIDTH KATAKANA LETTER MU;Lo;0;L; 30E0;;;;N;;;;; FF92;HALFWIDTH KATAKANA LETTER ME;Lo;0;L; 30E1;;;;N;;;;; FF93;HALFWIDTH KATAKANA LETTER MO;Lo;0;L; 30E2;;;;N;;;;; FF94;HALFWIDTH KATAKANA LETTER YA;Lo;0;L; 30E4;;;;N;;;;; FF95;HALFWIDTH KATAKANA LETTER YU;Lo;0;L; 30E6;;;;N;;;;; FF96;HALFWIDTH KATAKANA LETTER YO;Lo;0;L; 30E8;;;;N;;;;; FF97;HALFWIDTH KATAKANA LETTER RA;Lo;0;L; 30E9;;;;N;;;;; FF98;HALFWIDTH KATAKANA LETTER RI;Lo;0;L; 30EA;;;;N;;;;; FF99;HALFWIDTH KATAKANA LETTER RU;Lo;0;L; 30EB;;;;N;;;;; FF9A;HALFWIDTH KATAKANA LETTER RE;Lo;0;L; 30EC;;;;N;;;;; FF9B;HALFWIDTH KATAKANA LETTER RO;Lo;0;L; 30ED;;;;N;;;;; FF9C;HALFWIDTH KATAKANA LETTER WA;Lo;0;L; 30EF;;;;N;;;;; FF9D;HALFWIDTH KATAKANA LETTER N;Lo;0;L; 30F3;;;;N;;;;; FF9E;HALFWIDTH KATAKANA VOICED SOUND MARK;Lm;0;L; 3099;;;;N;;halfwidth katakana-hiragana voiced sound mark;;; FF9F;HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK;Lm;0;L; 309A;;;;N;;halfwidth katakana-hiragana semi-voiced sound mark;;; FFA0;HALFWIDTH HANGUL FILLER;Lo;0;L; 3164;;;;N;HALFWIDTH HANGUL CAE OM;;;; FFA1;HALFWIDTH HANGUL LETTER KIYEOK;Lo;0;L; 3131;;;;N;HALFWIDTH HANGUL LETTER GIYEOG;;;; FFA2;HALFWIDTH HANGUL LETTER SSANGKIYEOK;Lo;0;L; 3132;;;;N;HALFWIDTH HANGUL LETTER SSANG GIYEOG;;;; FFA3;HALFWIDTH HANGUL LETTER KIYEOK-SIOS;Lo;0;L; 3133;;;;N;HALFWIDTH HANGUL LETTER GIYEOG SIOS;;;; FFA4;HALFWIDTH HANGUL LETTER NIEUN;Lo;0;L; 3134;;;;N;;;;; FFA5;HALFWIDTH HANGUL LETTER NIEUN-CIEUC;Lo;0;L; 3135;;;;N;HALFWIDTH HANGUL LETTER NIEUN JIEUJ;;;; FFA6;HALFWIDTH HANGUL LETTER NIEUN-HIEUH;Lo;0;L; 3136;;;;N;HALFWIDTH HANGUL LETTER NIEUN HIEUH;;;; FFA7;HALFWIDTH HANGUL LETTER TIKEUT;Lo;0;L; 3137;;;;N;HALFWIDTH HANGUL LETTER DIGEUD;;;; FFA8;HALFWIDTH HANGUL LETTER SSANGTIKEUT;Lo;0;L; 3138;;;;N;HALFWIDTH HANGUL LETTER SSANG DIGEUD;;;; FFA9;HALFWIDTH HANGUL LETTER RIEUL;Lo;0;L; 3139;;;;N;HALFWIDTH HANGUL LETTER LIEUL;;;; FFAA;HALFWIDTH HANGUL LETTER RIEUL-KIYEOK;Lo;0;L; 313A;;;;N;HALFWIDTH HANGUL LETTER LIEUL GIYEOG;;;; FFAB;HALFWIDTH HANGUL LETTER RIEUL-MIEUM;Lo;0;L; 313B;;;;N;HALFWIDTH HANGUL LETTER LIEUL MIEUM;;;; FFAC;HALFWIDTH HANGUL LETTER RIEUL-PIEUP;Lo;0;L; 313C;;;;N;HALFWIDTH HANGUL LETTER LIEUL BIEUB;;;; FFAD;HALFWIDTH HANGUL LETTER RIEUL-SIOS;Lo;0;L; 313D;;;;N;HALFWIDTH HANGUL LETTER LIEUL SIOS;;;; FFAE;HALFWIDTH HANGUL LETTER RIEUL-THIEUTH;Lo;0;L; 313E;;;;N;HALFWIDTH HANGUL LETTER LIEUL TIEUT;;;; FFAF;HALFWIDTH HANGUL LETTER RIEUL-PHIEUPH;Lo;0;L; 313F;;;;N;HALFWIDTH HANGUL LETTER LIEUL PIEUP;;;; FFB0;HALFWIDTH HANGUL LETTER RIEUL-HIEUH;Lo;0;L; 3140;;;;N;HALFWIDTH HANGUL LETTER LIEUL HIEUH;;;; FFB1;HALFWIDTH HANGUL LETTER MIEUM;Lo;0;L; 3141;;;;N;;;;; FFB2;HALFWIDTH HANGUL LETTER PIEUP;Lo;0;L; 3142;;;;N;HALFWIDTH HANGUL LETTER BIEUB;;;; FFB3;HALFWIDTH HANGUL LETTER SSANGPIEUP;Lo;0;L; 3143;;;;N;HALFWIDTH HANGUL LETTER SSANG BIEUB;;;; FFB4;HALFWIDTH HANGUL LETTER PIEUP-SIOS;Lo;0;L; 3144;;;;N;HALFWIDTH HANGUL LETTER BIEUB SIOS;;;; FFB5;HALFWIDTH HANGUL LETTER SIOS;Lo;0;L; 3145;;;;N;;;;; FFB6;HALFWIDTH HANGUL LETTER SSANGSIOS;Lo;0;L; 3146;;;;N;HALFWIDTH HANGUL LETTER SSANG SIOS;;;; FFB7;HALFWIDTH HANGUL LETTER IEUNG;Lo;0;L; 3147;;;;N;;;;; FFB8;HALFWIDTH HANGUL LETTER CIEUC;Lo;0;L; 3148;;;;N;HALFWIDTH HANGUL LETTER JIEUJ;;;; FFB9;HALFWIDTH HANGUL LETTER SSANGCIEUC;Lo;0;L; 3149;;;;N;HALFWIDTH HANGUL LETTER SSANG JIEUJ;;;; FFBA;HALFWIDTH HANGUL LETTER CHIEUCH;Lo;0;L; 314A;;;;N;HALFWIDTH HANGUL LETTER CIEUC;;;; FFBB;HALFWIDTH HANGUL LETTER KHIEUKH;Lo;0;L; 314B;;;;N;HALFWIDTH HANGUL LETTER KIYEOK;;;; FFBC;HALFWIDTH HANGUL LETTER THIEUTH;Lo;0;L; 314C;;;;N;HALFWIDTH HANGUL LETTER TIEUT;;;; FFBD;HALFWIDTH HANGUL LETTER PHIEUPH;Lo;0;L; 314D;;;;N;HALFWIDTH HANGUL LETTER PIEUP;;;; FFBE;HALFWIDTH HANGUL LETTER HIEUH;Lo;0;L; 314E;;;;N;;;;; FFC2;HALFWIDTH HANGUL LETTER A;Lo;0;L; 314F;;;;N;;;;; FFC3;HALFWIDTH HANGUL LETTER AE;Lo;0;L; 3150;;;;N;;;;; FFC4;HALFWIDTH HANGUL LETTER YA;Lo;0;L; 3151;;;;N;;;;; FFC5;HALFWIDTH HANGUL LETTER YAE;Lo;0;L; 3152;;;;N;;;;; FFC6;HALFWIDTH HANGUL LETTER EO;Lo;0;L; 3153;;;;N;;;;; FFC7;HALFWIDTH HANGUL LETTER E;Lo;0;L; 3154;;;;N;;;;; FFCA;HALFWIDTH HANGUL LETTER YEO;Lo;0;L; 3155;;;;N;;;;; FFCB;HALFWIDTH HANGUL LETTER YE;Lo;0;L; 3156;;;;N;;;;; FFCC;HALFWIDTH HANGUL LETTER O;Lo;0;L; 3157;;;;N;;;;; FFCD;HALFWIDTH HANGUL LETTER WA;Lo;0;L; 3158;;;;N;;;;; FFCE;HALFWIDTH HANGUL LETTER WAE;Lo;0;L; 3159;;;;N;;;;; FFCF;HALFWIDTH HANGUL LETTER OE;Lo;0;L; 315A;;;;N;;;;; FFD2;HALFWIDTH HANGUL LETTER YO;Lo;0;L; 315B;;;;N;;;;; FFD3;HALFWIDTH HANGUL LETTER U;Lo;0;L; 315C;;;;N;;;;; FFD4;HALFWIDTH HANGUL LETTER WEO;Lo;0;L; 315D;;;;N;;;;; FFD5;HALFWIDTH HANGUL LETTER WE;Lo;0;L; 315E;;;;N;;;;; FFD6;HALFWIDTH HANGUL LETTER WI;Lo;0;L; 315F;;;;N;;;;; FFD7;HALFWIDTH HANGUL LETTER YU;Lo;0;L; 3160;;;;N;;;;; FFDA;HALFWIDTH HANGUL LETTER EU;Lo;0;L; 3161;;;;N;;;;; FFDB;HALFWIDTH HANGUL LETTER YI;Lo;0;L; 3162;;;;N;;;;; FFDC;HALFWIDTH HANGUL LETTER I;Lo;0;L; 3163;;;;N;;;;; FFE0;FULLWIDTH CENT SIGN;Sc;0;ET; 00A2;;;;N;;;;; FFE1;FULLWIDTH POUND SIGN;Sc;0;ET; 00A3;;;;N;;;;; FFE2;FULLWIDTH NOT SIGN;Sm;0;ON; 00AC;;;;N;;;;; FFE3;FULLWIDTH MACRON;Sk;0;ON; 00AF;;;;N;FULLWIDTH SPACING MACRON;*;;; FFE4;FULLWIDTH BROKEN BAR;So;0;ON; 00A6;;;;N;FULLWIDTH BROKEN VERTICAL BAR;;;; FFE5;FULLWIDTH YEN SIGN;Sc;0;ET; 00A5;;;;N;;;;; FFE6;FULLWIDTH WON SIGN;Sc;0;ET; 20A9;;;;N;;;;; FFE8;HALFWIDTH FORMS LIGHT VERTICAL;So;0;ON; 2502;;;;N;;;;; FFE9;HALFWIDTH LEFTWARDS ARROW;Sm;0;ON; 2190;;;;N;;;;; FFEA;HALFWIDTH UPWARDS ARROW;Sm;0;ON; 2191;;;;N;;;;; FFEB;HALFWIDTH RIGHTWARDS ARROW;Sm;0;ON; 2192;;;;N;;;;; FFEC;HALFWIDTH DOWNWARDS ARROW;Sm;0;ON; 2193;;;;N;;;;; FFED;HALFWIDTH BLACK SQUARE;So;0;ON; 25A0;;;;N;;;;; FFEE;HALFWIDTH WHITE CIRCLE;So;0;ON; 25CB;;;;N;;;;; FFF9;INTERLINEAR ANNOTATION ANCHOR;Cf;0;BN;;;;;N;;;;; FFFA;INTERLINEAR ANNOTATION SEPARATOR;Cf;0;BN;;;;;N;;;;; FFFB;INTERLINEAR ANNOTATION TERMINATOR;Cf;0;BN;;;;;N;;;;; FFFC;OBJECT REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; tla-1.3.5+dfsg/src/hackerlab/unidata-scaffolding/Makefile.in0000644000175000017500000000030410457621774022421 0ustar useruser libs := $(objroot)/hackerlab/libboot/libboot.a -lm mains := unidata-generate.c include $(makefiles)/programs.mk # tag: Tom Lord Tue Dec 4 14:52:18 2001 (unidata-scaffolding/Makefile.in) # tla-1.3.5+dfsg/src/hackerlab/unidata-scaffolding/unidata-generate.c0000644000175000017500000010772410457621774023753 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:41:49 2001 (unidata-generate.c) */ /* unidata-generate.c - * **************************************************************** * Copyright (C) 2000 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/arrays/pow2-array-compact.h" #include "hackerlab/arrays/pow2-array-print.h" #include "hackerlab/bitsets/bits.h" #include "hackerlab/bitsets/bits-print.h" #include "hackerlab/bitsets/uni-bits.h" #include "hackerlab/rx-posix/regexps.h" #include "hackerlab/uni/unidata.h" #include "hackerlab/unidata/db-macros.h" #include "hackerlab/unidata/case-db-macros.h" #include "hackerlab/cmd/main.h" static t_uchar * program_name = "unidata-generate"; static t_uchar * usage = "[options] input-file"; static t_uchar * version_string = "1.0"; #define OPTS(OP, OP2) \ OP (opt_help_msg, "h", "help", 0, \ "Display a help message and exit.") \ OP (opt_long_help, "H", 0, 0, \ "Display a verbose help message and exit.") \ OP (opt_version, "V", "version", 0, \ "Display a release identifier string") \ OP2 (opt_version, 0, 0, 0, "and exit.") \ OP (opt_verbose, "v", "verbose", 0, \ "Display information about the unidata database on stderr.") static t_uchar long_help[] = ("Generate C source code from teh unidata database.\n" "This program is used during the build process of \n" "the hackerlab C library.\n"); enum options { OPTS (OPT_ENUM, OPT_IGN) }; struct opt_desc opts[] = { OPTS (OPT_DESC, OPT_DESC) {-1, 0, 0, 0, 0} }; struct unidata { t_unicode code_value; t_uchar * character_name; enum uni_general_category general_category; t_uint canonical_combining_class; enum uni_bidi_category bidi_category; struct uni_decomposition_mapping character_decomposition_mapping; int decimal_digit_value; int digit_value; struct uni_numeric_value numeric_value; int mirrored; t_uchar * unicode_1_name; t_uchar * comment_10646; t_unicode uppercase_mapping; t_unicode lowercase_mapping; t_unicode titlecase_mapping; }; #define UNIDATA_FIELDS \ UNIDATA_FIELD(unidata_code_value, "[0-9a-fA-F]\\+") \ UNIDATA_FIELD(unidata_character_name, "[^;]\\+") \ UNIDATA_FIELD(unidata_general_category, "[A-Z][a-z]") \ UNIDATA_FIELD(unidata_canonical_combining_class, "[0-9]\\+") \ UNIDATA_FIELD(unidata_bidi_category, "[A-Z]\\{1,3\\}") \ UNIDATA_FIELD(unidata_character_decomposition_mapping, "[^;]*") \ UNIDATA_FIELD(unidata_decimal_digit_value, "[0-9]*") \ UNIDATA_FIELD(unidata_digit_value, "[0-9]*") \ UNIDATA_FIELD(unidata_numeric_value, "[0-9/]*") \ UNIDATA_FIELD(unidata_mirrored, "[YN]") \ UNIDATA_FIELD(unidata_unicode_1_name, "[^;]*") \ UNIDATA_FIELD(unidata_comment_10646, "[^;]*") \ UNIDATA_FIELD(unidata_uppercase_mapping, "[0-9a-fA-F]*") \ UNIDATA_FIELD(unidata_lowercase_mapping, "[0-9a-fA-F]*") \ UNIDATA_FIELDX(unidata_titlecase_mapping, "[0-9a-fA-F]*") /* positions within pmatch data of fields: */ enum unidata_field_positions { #undef UNIDATA_FIELD #define UNIDATA_FIELD(A,B) A, #undef UNIDATA_FIELDX #define UNIDATA_FIELDX(A,B) A, unidata_entire_line = 0, UNIDATA_FIELDS n_unidata_fields }; /* regexp for unidata fields */ static char unidata_regexp_source[] = #undef UNIDATA_FIELD #define UNIDATA_FIELD(A,B) "\\(" B "\\)" ";" #undef UNIDATA_FIELDX #define UNIDATA_FIELDX(A,B) "\\(" B "\\)" "^" UNIDATA_FIELDS "$"; static regex_t * unidata_regexp (void) { static int done = 0; static regex_t answer; if (done) return &answer; if (regcomp (&answer, unidata_regexp_source, REG_NEWLINE)) panic ("internal regcomp error for unidata_regexp_source"); done = 1; return &answer; } /* Parsed format of a unidata line. */ #undef UNI_DECOMPOSITION_TYPE #define UNI_DECOMPOSITION_TYPE(NAME) \ "<" #NAME ">" "[[:cut %:]]\\|" static char uni_decomposition_type_regexp_source[] = "^" "[[:(" UNI_DECOMPOSITION_TYPES "[[:cut 2:]]" "):]]"; static regex_t * uni_decomposition_type_regexp (void) { static int done = 0; static regex_t answer; if (done) return &answer; if (regcomp (&answer, uni_decomposition_type_regexp_source, 0)) panic ("internal regcomp error for uni_decomposition_type_regexp_source"); done = 1; return &answer; } static char uni_range_first_regexp_source[] = "^[^;]*;[^;]*[[:([[:( First>;[[:cut 1:]]):]]\\|[[:( Last>;[[:cut 2:]]):]]):]]"; static regex_t * uni_range_first_regexp (void) { static int done = 0; static regex_t answer; if (done) return &answer; if (regcomp (&answer, uni_range_first_regexp_source, 0)) panic ("internal regcomp error for uni_range_first_regexp"); done = 1; return &answer; } void unidata_parse (struct unidata * unidata, int * in_range, int line_no, t_uchar * line, long len) { int errn; int match; regmatch_t pmatch[n_unidata_fields]; regmatch_t * pmatch_p = pmatch; t_uint n; t_uchar * syntax_error; if (len && (line[len - 1] == '\n')) --len; if (len && (line[len - 1] == '\r')) --len; match = regnexec (unidata_regexp (), (char *)line, len, n_unidata_fields, &pmatch_p, 0); if (match) { syntax_error = "parsing entire line into fields"; syntax_exit: safe_printfmt (2, "unicode database:%d: syntax error (%s)\n", line_no, syntax_error); safe_printfmt (2, "\t%.*s\n", (int)len, line); panic ("unrecoverable error parsing unicode database"); } { regmatch_t range_pmatch[1]; regmatch_t * range_pmatch_p = range_pmatch; match = regnexec (uni_range_first_regexp (), line, len, 1, &range_pmatch_p, 0); switch (match) { case 0: *in_range = range_pmatch[0].final_tag; break; case REG_NOMATCH: *in_range = 0; break; default: safe_printfmt (2, "unicode database:%d:\n", line_no); panic ("internal regexp error"); break; } } if (cvt_hex_to_uint (&errn, &n, line + pmatch[unidata_code_value].rm_so, pmatch[unidata_code_value].rm_eo - pmatch[unidata_code_value].rm_so)) { syntax_error = "parsing code value"; goto syntax_exit; } else unidata->code_value = (t_unicode)n; unidata->character_name = str_save_n (lim_use_must_malloc, line + pmatch[unidata_character_name].rm_so, pmatch[unidata_character_name].rm_eo - pmatch[unidata_character_name].rm_so); unidata->general_category = uni_general_category_lookup_n (line + pmatch[unidata_general_category].rm_so, pmatch[unidata_general_category].rm_eo - pmatch[unidata_general_category].rm_so); if (cvt_decimal_to_uint (&errn, &unidata->canonical_combining_class, line + pmatch[unidata_canonical_combining_class].rm_so, pmatch[unidata_canonical_combining_class].rm_eo - pmatch[unidata_canonical_combining_class].rm_so)) { syntax_error = "parsing canonical combining class"; goto syntax_exit; } unidata->bidi_category = uni_bidi_category_lookup_n (line + pmatch[unidata_bidi_category].rm_so, pmatch[unidata_bidi_category].rm_eo - pmatch[unidata_bidi_category].rm_so); if (pmatch[unidata_character_decomposition_mapping].rm_eo == pmatch[unidata_character_decomposition_mapping].rm_so) { unidata->character_decomposition_mapping.type = uni_decomposition_none; unidata->character_decomposition_mapping.decomposition = 0; } else { regmatch_t decomp_pmatch[1]; regmatch_t * decomp_pmatch_p = decomp_pmatch; t_uchar * str; size_t len; match = regnexec (uni_decomposition_type_regexp (), line + pmatch[unidata_character_decomposition_mapping].rm_so, pmatch[unidata_character_decomposition_mapping].rm_eo - pmatch[unidata_character_decomposition_mapping].rm_so, 1, &decomp_pmatch_p, 0); if (match) { syntax_error = "parsing character decomposition mapping type"; goto syntax_exit; } unidata->character_decomposition_mapping.type = decomp_pmatch[0].final_tag - 1; unidata->character_decomposition_mapping.decomposition = 0; str = line + pmatch[unidata_character_decomposition_mapping].rm_so + decomp_pmatch[0].rm_eo; len = (pmatch[unidata_character_decomposition_mapping].rm_eo - pmatch[unidata_character_decomposition_mapping].rm_so) - decomp_pmatch[0].rm_eo; while (1) { t_uint d; t_uchar * d_start; size_t d_len; while (len && char_is_space (*str)) { ++str; --len; } if (!len) break; d_start = str; d_len = 0; while (len && char_is_xdigit (*str)) { ++d_len; ++str; --len; } if (cvt_hex_to_uint (&errn, &d, d_start, d_len)) { syntax_error = "parsing decomposition value"; goto syntax_exit; } *(t_unicode *)ar_push ((void **)&unidata->character_decomposition_mapping.decomposition, lim_use_must_malloc, sizeof (t_unicode)) = (t_unicode)d; } } if (pmatch[unidata_decimal_digit_value].rm_so == pmatch[unidata_decimal_digit_value].rm_eo) unidata->decimal_digit_value = 10; else if (cvt_decimal_to_int (&errn, &unidata->decimal_digit_value, line + pmatch[unidata_decimal_digit_value].rm_so, pmatch[unidata_decimal_digit_value].rm_eo - pmatch[unidata_decimal_digit_value].rm_so)) { syntax_error = "parsing decimal digit value"; goto syntax_exit; } if (pmatch[unidata_digit_value].rm_so == pmatch[unidata_digit_value].rm_eo) unidata->digit_value = -1; else if (cvt_decimal_to_int (&errn, &unidata->digit_value, line + pmatch[unidata_digit_value].rm_so, pmatch[unidata_digit_value].rm_eo - pmatch[unidata_digit_value].rm_so)) { syntax_error = "parsing digit value"; goto syntax_exit; } if (pmatch[unidata_numeric_value].rm_so == pmatch[unidata_numeric_value].rm_eo) unidata->numeric_value.numerator = -1; else { t_uchar * slash; t_uchar * str; size_t len; str = line + pmatch[unidata_numeric_value].rm_so; len = pmatch[unidata_numeric_value].rm_eo - pmatch[unidata_numeric_value].rm_so; slash = str_chr_index_n (str, len, '/'); if (!slash) { unidata->numeric_value.denominator = 1; if (cvt_decimal_to_int (&errn, &unidata->numeric_value.numerator, str, len)) { syntax_error = "parsing numeric value"; goto syntax_exit; } } else { if (cvt_decimal_to_uint (&errn, &unidata->numeric_value.numerator, str, slash - str)) { syntax_error = "parsing numerator of numeric value"; goto syntax_exit; } if (cvt_decimal_to_int (&errn, &unidata->numeric_value.denominator, slash + 1, len - (slash - str) - 1)) { syntax_error = "parsing denominator of numeric value"; goto syntax_exit; } } } switch (line[pmatch[unidata_mirrored].rm_so]) { case 'Y': unidata->mirrored = 1; break; case 'N': unidata->mirrored = 0; break; default: syntax_error = "parsing mirrored"; goto syntax_exit; } if (pmatch[unidata_unicode_1_name].rm_so == pmatch[unidata_unicode_1_name].rm_eo) unidata->unicode_1_name = 0; else unidata->unicode_1_name = str_save_n (lim_use_must_malloc, line + pmatch[unidata_unicode_1_name].rm_so, pmatch[unidata_unicode_1_name].rm_eo - pmatch[unidata_unicode_1_name].rm_so); if (pmatch[unidata_comment_10646].rm_so == pmatch[unidata_comment_10646].rm_eo) unidata->comment_10646 = 0; else unidata->comment_10646 = str_save_n (lim_use_must_malloc, line + pmatch[unidata_comment_10646].rm_so, pmatch[unidata_comment_10646].rm_eo - pmatch[unidata_comment_10646].rm_so); if (pmatch[unidata_uppercase_mapping].rm_so == pmatch[unidata_uppercase_mapping].rm_eo) unidata->uppercase_mapping = 0; else if (cvt_hex_to_uint (&errn, &n, line + pmatch[unidata_uppercase_mapping].rm_so, pmatch[unidata_uppercase_mapping].rm_eo - pmatch[unidata_uppercase_mapping].rm_so)) { syntax_error = "parsing uppercase mapping"; goto syntax_exit; } else unidata->uppercase_mapping = n; if (pmatch[unidata_lowercase_mapping].rm_so == pmatch[unidata_lowercase_mapping].rm_eo) unidata->lowercase_mapping = 0; else if (cvt_hex_to_uint (&errn, &n, line + pmatch[unidata_lowercase_mapping].rm_so, pmatch[unidata_lowercase_mapping].rm_eo - pmatch[unidata_lowercase_mapping].rm_so)) { syntax_error = "parsing lowercase mapping"; goto syntax_exit; } else unidata->lowercase_mapping = n; if (pmatch[unidata_titlecase_mapping].rm_so == pmatch[unidata_titlecase_mapping].rm_eo) unidata->titlecase_mapping = 0; else if (cvt_hex_to_uint (&errn, &n, line + pmatch[unidata_titlecase_mapping].rm_so, pmatch[unidata_titlecase_mapping].rm_eo - pmatch[unidata_titlecase_mapping].rm_so)) { syntax_error = "parsing titlecase mapping"; goto syntax_exit; } else unidata->titlecase_mapping = n; } void unidata_free (struct unidata * ud) { lim_free (lim_use_must_malloc, ud->character_name); ar_free ((void **)&ud->character_decomposition_mapping.decomposition, lim_use_must_malloc); lim_free (lim_use_must_malloc, ud->unicode_1_name); lim_free (lim_use_must_malloc, ud->comment_10646); } int unidata_next (struct unidata * data, int * in_range, int * line_no, int fd) { int errn; t_uchar * line; long len; ++*line_no; if (0 > vfdbuf_next_line (&errn, &line, &len, fd)) { safe_printfmt (2, "unicode database (%d): %s\n", errn, errno_to_string (errn)); panic ("unrecoverable error parsing unicode database\n"); } if (!line) return 0; unidata_parse (data, in_range, *line_no, line, (size_t)len); return 1; } static void print_t_uint16 (int fd, void * elt) { safe_printfmt (fd, "%d", (int)(*(t_uint16 *)elt)); } static void print_t_case (int fd, void * elt) { struct uni_case_mapping * mapping; mapping = (struct uni_case_mapping *)elt; safe_printfmt (fd, "{ 0x%04lX, 0x%04lX, 0x%04lX }", (unsigned long)mapping->upper, (unsigned long)mapping->lower, (unsigned long)mapping->title); /* safe_printfmt (fd, "{ 0x%l04X, 0x%l04X }", (unsigned long)mapping->upper, (unsigned long)mapping->lower); */ /* safe_printfmt (fd, "{ 0x%l04X }", (unsigned long)mapping->upper); */ } static void print_t_uint8 (int fd, void * elt) { safe_printfmt (fd, "%d", (int)(*(t_uint8 *)elt)); } static void print_t_int16 (int fd, void * elt) { safe_printfmt (fd, "%d", (int)(*(t_int16 *)elt)); } int main (int argc, char * argv[]) { int errn; t_uchar * input_file; t_uchar * bits_file; t_uchar * bits_h_file; t_uchar * db_file; t_uchar * db_h_file; t_uchar * case_db_file; t_uchar * case_db_h_file; t_uchar * combine_db_file; t_uchar * combine_db_h_file; t_uchar * decomp_db_file; t_uchar * decomp_db_h_file; int input_fd; int bits_fd; int bits_h_fd; int db_fd; int db_h_fd; int case_db_fd; int case_db_h_fd; int combine_db_fd; int combine_db_h_fd; int decomp_db_fd; int decomp_db_h_fd; bits * sets; bits all_chars; int x; int line_no; int has_decomp; int max_decomp; int total_decomp; t_unicode worst_decomp = 0; int non0_combine; int uppers; int lowers; int titles; int uppers_and_lowers; int uppers_and_title; int two_case; int three_case; int have_case[256]; int have_case2[512]; int numerics; int non_dec_digits; pow2_array_rules db_rules; pow2_array db_array; pow2_array_rules case_rules; pow2_array case_db_array; pow2_array_rules combine_rules; pow2_array combine_db_array; pow2_array_rules decomp_rules; pow2_array decomp_db_array; union { struct uni_decomposition_mapping * dmp; void *void_ptr; } decompositions; int verbose; int o; struct opt_parsed * option; verbose = 0; option = 0; while (1) { o = opt_standard (lim_use_must_malloc, &option, opts, &argc, argv, program_name, usage, version_string, long_help, opt_help_msg, opt_long_help, opt_version); if (o == opt_none) break; switch (o) { default: safe_printfmt (2, "unhandled option `%s'\n", option->opt_string); panic ("internal error parsing arguments"); usage_error: opt_usage (2, argv[0], program_name, usage, 1); panic_exit (); #if 0 bogus_arg: safe_printfmt (2, "ill-formed argument for `%s' (`%s')\n", option->opt_string, option->arg_string); goto usage_error; #endif case opt_verbose: verbose = 1; break; } } rx_set_dfa_cache_threshold (2 * 2097152); if (argc != 2) goto usage_error; input_file = argv[1]; bits_file = "bitsets.c"; bits_h_file = "bitsets.h"; db_file = "db.c"; db_h_file = "db.h"; case_db_file = "case-db.c"; case_db_h_file = "case-db.h"; combine_db_file = "combine-db.c"; combine_db_h_file = "combine-db.h"; decomp_db_file = "decomp-db.c"; decomp_db_h_file = "decomp-db.h"; input_fd = safe_open (input_file, O_RDONLY, 0); bits_fd = safe_open (bits_file, O_WRONLY | O_CREAT | O_EXCL, 0644); bits_h_fd = safe_open (bits_h_file, O_WRONLY | O_CREAT | O_EXCL, 0644); db_fd = safe_open (db_file, O_WRONLY | O_CREAT | O_EXCL, 0644); db_h_fd = safe_open (db_h_file, O_WRONLY | O_CREAT | O_EXCL, 0644); case_db_fd = safe_open (case_db_file, O_WRONLY | O_CREAT | O_EXCL, 0644); case_db_h_fd = safe_open (case_db_h_file, O_WRONLY | O_CREAT | O_EXCL, 0644); combine_db_fd = safe_open (combine_db_file, O_WRONLY | O_CREAT | O_EXCL, 0644); combine_db_h_fd = safe_open (combine_db_h_file, O_WRONLY | O_CREAT | O_EXCL, 0644); decomp_db_fd = safe_open (decomp_db_file, O_WRONLY | O_CREAT | O_EXCL, 0644); decomp_db_h_fd = safe_open (decomp_db_h_file, O_WRONLY | O_CREAT | O_EXCL, 0644); if (vfdbuf_buffer_fd (&errn, input_fd, 0, O_RDONLY, 0)) panic ("unable to buffer input file"); if (vfdbuf_buffer_fd (&errn, bits_fd, 0, O_WRONLY, 0)) panic ("unable to buffer bitset output file"); if (vfdbuf_buffer_fd (&errn, bits_h_fd, 0, O_WRONLY, 0)) panic ("unable to buffer bitset header output file"); if (vfdbuf_buffer_fd (&errn, db_fd, 0, O_WRONLY, 0)) panic ("unable to buffer db output file"); if (vfdbuf_buffer_fd (&errn, db_h_fd, 0, O_WRONLY, 0)) panic ("unable to buffer db header output file"); if (vfdbuf_buffer_fd (&errn, case_db_fd, 0, O_WRONLY, 0)) panic ("unable to buffer db output file"); if (vfdbuf_buffer_fd (&errn, case_db_h_fd, 0, O_WRONLY, 0)) panic ("unable to buffer db header output file"); if (vfdbuf_buffer_fd (&errn, combine_db_fd, 0, O_WRONLY, 0)) panic ("unable to buffer db output file"); if (vfdbuf_buffer_fd (&errn, combine_db_h_fd, 0, O_WRONLY, 0)) panic ("unable to buffer db header output file"); if (vfdbuf_buffer_fd (&errn, decomp_db_fd, 0, O_WRONLY, 0)) panic ("unable to buffer db output file"); if (vfdbuf_buffer_fd (&errn, decomp_db_h_fd, 0, O_WRONLY, 0)) panic ("unable to buffer db header output file"); sets = (bits *)must_malloc (uni_n_categories * sizeof (bits)); for (x = 0; x < uni_n_categories; ++x) sets[x] = bits_alloc (0, uni_bits_tree_rule); all_chars = bits_alloc (0, uni_bits_tree_rule); { static t_uint16 db_default_page[1 << 11]; static struct uni_case_mapping case_default_page[16]; static t_uint8 combine_default_page[16]; static t_int16 decomp_default_page[16]; { int i; t_uint16 v; v = unidata__assemble_db (0, 10, 0, uni_bidi_ON, uni_general_category_Cn); for (i = 0; i < (sizeof (db_default_page) / sizeof (db_default_page[0])); ++i) { db_default_page[i] = v; } } db_rules = make_pow2_array_rules (lim_use_must_malloc, sizeof (t_uint16), (void *)db_default_page, 11, (size_t)0x3ff, 0, (size_t)0x7ff); case_rules = make_pow2_array_rules (lim_use_must_malloc, sizeof (struct uni_case_mapping), (void *)case_default_page, 16, (size_t)0x1f, 12, (size_t)0xf, 8, (size_t)0xf, 4, (size_t)0xf, 0, (size_t)0xf); combine_rules = make_pow2_array_rules (lim_use_must_malloc, sizeof (t_uint8), (void *)combine_default_page, 16, (size_t)0x1f, 12, (size_t)0xf, 8, (size_t)0xf, 4, (size_t)0xf, 0, (size_t)0xf); decomp_rules = make_pow2_array_rules (lim_use_must_malloc, sizeof (t_int16), (void *)decomp_default_page, 16, (size_t)0x1f, 12, (size_t)0xf, 8, (size_t)0xf, 4, (size_t)0xf, 0, (size_t)0xf); } decompositions.void_ptr = 0; ar_push (&decompositions.void_ptr, lim_use_must_malloc, sizeof (struct uni_decomposition_mapping)); decompositions.dmp[0].type = uni_decomposition_none; decompositions.dmp[0].decomposition = 0; db_array = pow2_array_alloc (lim_use_must_malloc, db_rules); case_db_array = pow2_array_alloc (lim_use_must_malloc, case_rules); combine_db_array = pow2_array_alloc (lim_use_must_malloc, combine_rules); decomp_db_array = pow2_array_alloc (lim_use_must_malloc, decomp_rules); line_no = 0; has_decomp = 0; max_decomp = 0; total_decomp = 0; non0_combine = 0; uppers = 0; uppers_and_title = 0; uppers_and_lowers = 0; lowers = 0; titles = 0; for (x = 0; x < 256; ++x) have_case[x] = 0; for (x = 0; x < 512; ++x) have_case2[x] = 0; two_case = 0; three_case = 0; numerics = 0; non_dec_digits = 0; while (1) { struct unidata data; int in_range; struct unidata data_2; if (!unidata_next (&data, &in_range, &line_no, input_fd)) break; /* eof */ if (verbose && !(line_no % 500)) safe_printfmt (2, "line %d\n", line_no); if (data.general_category == uni_general_category_Cn) { safe_printfmt (2, "Character U+%X is an unassigned character in unidata.txt!", data.code_value); panic ("unidata.txt is broken"); } { t_uint16 dbv; dbv = unidata__assemble_db (1, data.decimal_digit_value, data.mirrored, data.bidi_category, data.general_category); *(t_uint16 *)pow2_array_ref (db_array, data.code_value) = dbv; } if (data.digit_value >= 0) ++non_dec_digits; if (data.numeric_value.numerator >= 0) { ++numerics; } if (data.character_decomposition_mapping.decomposition) { size_t size; ++has_decomp; size = ar_size ((void *)data.character_decomposition_mapping.decomposition, lim_use_must_malloc, sizeof (*data.character_decomposition_mapping.decomposition)); total_decomp += (int)size; if (size > max_decomp) { max_decomp = (int) size; worst_decomp = data.code_value; } } if (data.uppercase_mapping) { ++uppers; if (data.lowercase_mapping) ++uppers_and_lowers; if (data.titlecase_mapping) ++uppers_and_title; } if (data.lowercase_mapping) ++lowers; if (data.titlecase_mapping) ++titles; { int q; q = !!data.uppercase_mapping + !!data.lowercase_mapping + !!data.titlecase_mapping; if (q == 2) ++two_case; else if (q == 3) ++three_case; } if (data.uppercase_mapping || data.lowercase_mapping || data.titlecase_mapping) { have_case[0xff & (data.code_value >> 8)] = 1; have_case2[0x1ff & (data.code_value >> 7)] = 1; } if (data.uppercase_mapping || data.lowercase_mapping || data.titlecase_mapping) { struct uni_case_mapping * mapping; mapping = (struct uni_case_mapping *)pow2_array_ref (case_db_array, data.code_value); mapping->upper = data.uppercase_mapping; mapping->lower = data.lowercase_mapping; mapping->title = data.titlecase_mapping; } if (data.canonical_combining_class) { ++non0_combine; *(t_uint8 *)pow2_array_ref (combine_db_array, data.code_value) = data.canonical_combining_class; } if (data.character_decomposition_mapping.type != uni_decomposition_none) { struct uni_decomposition_mapping * decomp; t_int16 index; if ((1 << 16) <= ar_size (decompositions.void_ptr, lim_use_must_malloc, sizeof (*decompositions.dmp))) panic ("too many characters have decomposition mappings -- unidata-generate needs to be modified\n"); index = (t_int16)ar_size (decompositions.void_ptr, lim_use_must_malloc, sizeof (*decompositions.dmp)); decomp = (struct uni_decomposition_mapping *)ar_push (&decompositions.void_ptr, lim_use_must_malloc, sizeof (*decompositions.dmp)); decomp->type = data.character_decomposition_mapping.type; decomp->decomposition = (t_unicode *)ar_copy ((void *)data.character_decomposition_mapping.decomposition, lim_use_must_malloc, sizeof (t_unicode)); *(t_int16 *)pow2_array_ref (decomp_db_array, data.code_value) = index; } bits_adjoin (sets[data.general_category], data.code_value); if ((data.general_category != uni_general_category_Cs) && (data.general_category != uni_general_category_Co)) bits_adjoin (all_chars, data.code_value); if (in_range && (in_range != 1)) { safe_printfmt (2, "unicode database:%d: found end of range (\"..., Last>;\") without start of range\n", line_no); panic ("unrecoverable error parsing unicode database"); } else if (in_range) { if (!unidata_next (&data_2, &in_range, &line_no, input_fd)) { safe_printfmt (2, "unicode database:%d: end of line encountered looking for range end\n", line_no); panic ("unrecoverable error parsing unicode database"); } /* safe_printfmt (2, "line %d (range end)\n", line_no); */ if (in_range != 2) { safe_printfmt (2, "unicode database:%d: missing end of range (\"..., Last>;\")\n", line_no); panic ("unrecoverable error parsing unicode database"); } bits_fill_range (sets[data.general_category], data.code_value, data_2.code_value + 1); if ((data.general_category != uni_general_category_Cs) && (data.general_category != uni_general_category_Co)) { bits_fill_range (all_chars, data.code_value, data_2.code_value + 1); } { t_uint16 dbv; int q; dbv = unidata__assemble_db (1, data.decimal_digit_value, data.mirrored, data.bidi_category, data.general_category); for (q = data.code_value; q <= data_2.code_value; ++q) *(t_uint16 *)pow2_array_ref (db_array, q) = dbv; if (data.uppercase_mapping || data.lowercase_mapping || data.titlecase_mapping) { struct uni_case_mapping * mapping; mapping = (struct uni_case_mapping *)pow2_array_ref (case_db_array, data.code_value); mapping->upper = data.uppercase_mapping; mapping->lower = data.lowercase_mapping; mapping->title = data.titlecase_mapping; for (q = data.code_value; q <= data_2.code_value; ++q) *(struct uni_case_mapping *)pow2_array_ref (case_db_array, q) = *mapping; } if (data.canonical_combining_class) { for (q = data.code_value; q <= data_2.code_value; ++q) { ++non0_combine; *(t_uint8 *)pow2_array_ref (combine_db_array, q) = data.canonical_combining_class; } } if (data.character_decomposition_mapping.type != uni_decomposition_none) { t_int16 index; index = (t_int16)(ar_size (decompositions.void_ptr, lim_use_must_malloc, sizeof (*decompositions.dmp)) - 1); for (q = data.code_value; q <= data_2.code_value; ++q) *(t_int16 *)pow2_array_ref (decomp_db_array, q) = index; } } } } /* "The Private Use character outside of the BMP (U+F0000..U+FFFFD, * U+100000..U+10FFFD) are not listed. These correspond to surrogate * pairs where the first surrogate is in the High Surrogate Private * Use section." - The UnicodeData File Format Version 3.0.0 */ bits_fill_range (sets[uni_general_category_Co], 0xf0000, 0xffffe); bits_fill_range (all_chars, 0xf0000, 0xffffe); bits_fill_range (sets[uni_general_category_Co], 0x100000, 0x10fff2); bits_fill_range (all_chars, 0x100000, 0x10fff2); /* These should appear to be unassigned characters in the database. * * If you encounter a file with private-use characters you don't * recognize, that's an error. * * If you have an application that uses private use characters, * you should make a modified unidata.txt assigning them appropriate * categories (not Co). */ { enum uni_general_category cat; for (cat = uni_first_synthetic_category; cat < uni_n_categories; ++cat) { int first_char; int x; bits it; first_char = uni_general_category_names[cat].name[0]; it = bits_alloc (0, uni_bits_tree_rule); for (x = 0; uni_general_category_names[x].name; ++x) { if ( (uni_general_category_names[x].name[0] == first_char) && (sets[x])) { bits_union (it, sets[x]); } } sets[cat] = it; } safe_printfmt (bits_fd, "/* This file automatically generated by unidata-generate */\n\n"); safe_printfmt (bits_fd, "#include \"bitsets.h\"\n"); safe_printfmt (bits_fd, "\n\n"); safe_printfmt (bits_h_fd, "/* This file automatically generated by unidata-generate */\n\n"); safe_printfmt (bits_h_fd, "#include \"hackerlab/bitsets/bits.h\"\n"); safe_printfmt (bits_h_fd, "\n\n"); for (x = 0; x < uni_n_categories; ++x) { t_uchar * name; t_uchar * stub; name = str_alloc_cat (lim_use_must_malloc, "unidata_bitset_", uni_general_category_names[x].name); stub = str_alloc_cat (lim_use_must_malloc, name, "_"); bits_compact (sets[x]); bits_print (bits_fd, sets[x], name, stub, 0, 0, 0); safe_printfmt (bits_fd, "\n\f\n"); bits_print (bits_h_fd, sets[x], name, stub, 0, 1, 0); safe_printfmt (bits_h_fd, "\n\f\n"); } } bits_compact (all_chars); bits_print (bits_fd, all_chars, "unidata_bitset_universal", "unidata_bitset_universal_", 0, 0, 0); safe_printfmt (bits_fd, "\n\n"); bits_print (bits_h_fd, all_chars, "unidata_bitset_universal", "unidata_bitset_universal_", 0, 1, 0); safe_printfmt (bits_h_fd, "\n\n"); if (verbose) { safe_printfmt (2, "%d characters have a decomposition mapping\n", has_decomp); safe_printfmt (2, "%d characters in the widest decomp mapping\n", max_decomp); safe_printfmt (2, "U+%X is the code value of the widest decomp mapping\n", worst_decomp); safe_printfmt (2, "%d characters (total) in decomp mappings\n", total_decomp); safe_printfmt (2, "%d have a non-0 canonical combining class\n", non0_combine); safe_printfmt (2, "%d have uppercase mappings\n", uppers); safe_printfmt (2, "%d have lowercase mappings\n", lowers); safe_printfmt (2, "%d have titlecase mappings\n", titles); safe_printfmt (2, "%d have upper and lower mappings\n", uppers_and_lowers); safe_printfmt (2, "%d have upper and title mappings\n", uppers_and_title); safe_printfmt (2, "%d have lower and title mappings\n", two_case - (uppers_and_lowers + uppers_and_title)); } if (verbose) { { int case_pages; int case_half_pages; case_pages = 0; case_half_pages = 0; for (x = 0; x < 256; ++x) if (have_case[x]) ++case_pages; for (x = 0; x < 512; ++x) if (have_case2[x]) ++case_half_pages; safe_printfmt (2, "%d pages (256 characters/page) have case mappings\n", case_pages); safe_printfmt (2, "%d half pages (128 characters/page) have case mappings\n", case_half_pages); safe_printfmt (2, "%d characters have exactly two case mappings\n", two_case); safe_printfmt (2, "%d characters have exactly three case mappings\n", three_case); } safe_printfmt (2, "%d characters have a numeric value\n", numerics); safe_printfmt (2, "%d characters are non-decimal digits\n", non_dec_digits); } safe_printfmt (db_fd, "/* This file automatically generated by unidata-generate */\n\n"); safe_printfmt (db_fd, "#include \"db.h\"\n"); safe_printfmt (db_fd, "\n\n"); pow2_array_compact (db_array, 0, 0, 0); pow2_array_print (db_fd, db_array, "unidata__db", "unidata__db", 0, 0, 0, "t_uint16", print_t_uint16); safe_printfmt (db_fd, "\n\n"); safe_printfmt (db_h_fd, "/* This file automatically generated by unidata-generate */\n\n"); safe_printfmt (db_h_fd, "#include \"hackerlab/arrays/pow2-array.h\"\n"); safe_printfmt (db_h_fd, "\n\n"); pow2_array_print (db_h_fd, db_array, "unidata__db", "unidata__db", 1, "unidata__db_ref", 0, "t_uint16", 0); safe_printfmt (db_h_fd, "\n\n"); safe_printfmt (case_db_fd, "/* This file automatically generated by unidata-generate */\n\n"); safe_printfmt (case_db_fd, "#include \"case-db.h\"\n"); safe_printfmt (case_db_fd, "\n\n"); pow2_array_compact (case_db_array, 0, 0, 0); pow2_array_print (case_db_fd, case_db_array, "unidata__case_db", "unidata__case_db", 0, 0, 0, "struct uni_case_mapping", print_t_case); safe_printfmt (case_db_fd, "\n\n"); safe_printfmt (case_db_h_fd, "/* This file automatically generated by unidata-generate */\n\n"); safe_printfmt (case_db_h_fd, "#include \"hackerlab/arrays/pow2-array.h\"\n"); safe_printfmt (case_db_h_fd, "#include \"hackerlab/unidata/case-db-macros.h\"\n"); safe_printfmt (case_db_h_fd, "\n\n"); pow2_array_print (case_db_h_fd, case_db_array, "unidata__case_db", "unidata__case_db", 1, "unidata__case_db_ref", 0, "struct uni_case_mapping", 0); safe_printfmt (case_db_h_fd, "\n\n"); safe_printfmt (combine_db_fd, "/* This file automatically generated by unidata-generate */\n\n"); safe_printfmt (combine_db_fd, "#include \"combine-db.h\"\n"); safe_printfmt (combine_db_fd, "\n\n"); pow2_array_compact (combine_db_array, 0, 0, 0); pow2_array_print (combine_db_fd, combine_db_array, "unidata__combine_db", "unidata__combine_db", 0, 0, 0, "t_uint8", print_t_uint8); safe_printfmt (combine_db_fd, "\n\n"); safe_printfmt (combine_db_h_fd, "/* This file automatically generated by unidata-generate */\n\n"); safe_printfmt (combine_db_h_fd, "#include \"hackerlab/arrays/pow2-array.h\"\n"); safe_printfmt (combine_db_h_fd, "#include \"hackerlab/unidata/combine-db-macros.h\"\n"); safe_printfmt (combine_db_h_fd, "\n\n"); pow2_array_print (combine_db_h_fd, combine_db_array, "unidata__combine_db", "unidata__combine_db", 1, "unidata__combine_db_ref", 0, "t_uint8", 0); safe_printfmt (combine_db_h_fd, "\n\n"); safe_printfmt (decomp_db_fd, "/* This file automatically generated by unidata-generate */\n\n"); safe_printfmt (decomp_db_fd, "#include \"decomp-db.h\"\n"); safe_printfmt (decomp_db_fd, "\n\n"); pow2_array_compact (decomp_db_array, 0, 0, 0); pow2_array_print (decomp_db_fd, decomp_db_array, "unidata__decomp_db", "unidata__decomp_db", 0, 0, 0, "t_int16", print_t_int16); safe_printfmt (decomp_db_fd, "\n\n"); { size_t d; size_t n_d; size_t off; n_d = ar_size (decompositions.void_ptr, lim_use_must_malloc, sizeof (*decompositions.dmp)); safe_printfmt (decomp_db_fd, "static t_unicode unidata_decomposition_data[] =\n"); safe_printfmt (decomp_db_fd, "{\n"); for (d = 0; d < n_d; ++d) { size_t c; size_t n_c; n_c = ar_size (decompositions.dmp[d].decomposition, lim_use_must_malloc, sizeof (*decompositions.dmp[d].decomposition)); for (c = 0; c < n_c; ++c) { safe_printfmt (decomp_db_fd, " 0x%04X,\n", decompositions.dmp[d].decomposition[c]); } safe_printfmt (decomp_db_fd, " 0x0,\n"); } safe_printfmt (decomp_db_fd, "};\n\n"); safe_printfmt (decomp_db_fd, "struct uni_decomposition_mapping unidata_decomposition_table[] =\n"); safe_printfmt (decomp_db_fd, "{\n"); off = 0; for (d = 0; d < n_d; ++d) { safe_printfmt (decomp_db_fd, " { %d, unidata_decomposition_data + %lu },\n", decompositions.dmp[d].type, (unsigned long)off); off += ar_size ((void *)decompositions.dmp[d].decomposition, lim_use_must_malloc, sizeof (*decompositions.dmp[d].decomposition)) + 1; } safe_printfmt (decomp_db_fd, "};\n\n"); } safe_printfmt (decomp_db_h_fd, "/* This file automatically generated by unidata-generate */\n\n"); safe_printfmt (decomp_db_h_fd, "#include \"hackerlab/arrays/pow2-array.h\"\n"); safe_printfmt (decomp_db_h_fd, "#include \"hackerlab/unidata/decomp-db-macros.h\"\n"); safe_printfmt (decomp_db_h_fd, "\n\n"); pow2_array_print (decomp_db_h_fd, decomp_db_array, "unidata__decomp_db", "unidata__decomp_db", 1, "unidata__decomp_db_ref", 0, "t_int16", 0); safe_printfmt (decomp_db_h_fd, "\n\n"); safe_printfmt (decomp_db_h_fd, "extern struct uni_decomposition_mapping unidata_decomposition_table[];\n\n\n"); safe_close (input_fd); safe_close (bits_fd); safe_close (bits_h_fd); safe_close (db_fd); safe_close (db_h_fd); safe_close (case_db_fd); safe_close (case_db_h_fd); safe_close (combine_db_fd); safe_close (combine_db_h_fd); safe_close (decomp_db_fd); safe_close (decomp_db_h_fd); return 0; } tla-1.3.5+dfsg/src/hackerlab/unidata-scaffolding/PLUGIN/0000755000175000017500000000000010457621774021355 5ustar userusertla-1.3.5+dfsg/src/hackerlab/unidata-scaffolding/PLUGIN/REQ0000644000175000017500000000007310457621774021727 0ustar useruserlibboot unidata-scaffolding unidata-scaffolding libboot2 tla-1.3.5+dfsg/src/hackerlab/libboot/0000755000175000017500000000000010457621774016107 5ustar userusertla-1.3.5+dfsg/src/hackerlab/libboot/Makefile.in0000644000175000017500000000017710457621774020161 0ustar useruser# tag: Tom Lord Tue Dec 4 14:52:16 2001 (libboot/Makefile.in) # otherdirs := $(boot_dirs) include $(makefiles)/library.mk tla-1.3.5+dfsg/src/hackerlab/libboot/PLUGIN/0000755000175000017500000000000010457621774017105 5ustar userusertla-1.3.5+dfsg/src/hackerlab/libboot/PLUGIN/REQ0000644000175000017500000000002110457621774017450 0ustar useruserlibboot libboot tla-1.3.5+dfsg/src/hackerlab/properties/0000755000175000017500000000000010457621774016651 5ustar userusertla-1.3.5+dfsg/src/hackerlab/properties/property.c0000644000175000017500000001150610457621774020704 0ustar useruser/* property.c: * **************************************************************** * Copyright (C) 2004 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/mem/mem.h" #include "hackerlab/arrays/ar.h" #include "hackerlab/dynid/dynid.h" #include "hackerlab/properties/property.h" /* __STDC__ prototypes for static functions */ static t_dynid_table * property_global_id_table (void); static t_dynid_table * property_representation_id_table (void); ssize_t property_representation_id (void * key) { return dynid_ensure (property_representation_id_table (), lim_use_malloc, key); } ssize_t property_global_id (void * key) { return dynid_ensure (property_global_id_table (), lim_use_malloc, key); } ssize_t property_id (ssize_t representation_id, ssize_t global_id) { static ssize_t ** table = 0; ssize_t ** row_box; ssize_t * col_box; row_box = ar_ref ((void **)&table, lim_use_malloc, representation_id, sizeof (ssize_t *)); if (!row_box) return -1; col_box = ar_ref ((void **)row_box, lim_use_malloc, global_id, sizeof (ssize_t)); if (!col_box) return -1; if (!*col_box) { static ssize_t * row_count = 0; ssize_t * row_count_box; row_count_box = (ssize_t *)ar_ref ((void **)&row_count, lim_use_malloc, representation_id, sizeof (ssize_t)); if (!row_count_box) return -1; *row_count_box += 1; *col_box = *row_count_box; } return *col_box; } static t_dynid_table * property_global_id_table (void) { static int initialized = 0; static t_dynid_table table; if (!initialized) { if (0 > init_dynid_table (&table, lim_use_malloc)) return 0; initialized = 1; } return &table; } static t_dynid_table * property_representation_id_table (void) { static int initialized = 0; static t_dynid_table table; if (!initialized) { if (0 > init_dynid_table (&table, lim_use_malloc)) return 0; initialized = 1; } return &table; } int init_property_table (t_property_table * table, alloc_limits limits) { if (!table) return -1; mem_set0 ((t_uchar *)table, sizeof (*table)); return 0; } int uninit_property_table (t_property_table * table, alloc_limits limits) { ssize_t n_rows; ssize_t x; if (!table) return -1; n_rows = ar_size ((void *)*table, limits, sizeof (t_property_row)); for (x = 0; x < n_rows; ++x) { if ((*table)[x]._type && (*table)[x]._type->fns && (*table)[x]._type->fns->uninit) { ssize_t n_cols; ssize_t y; n_cols = ar_size ((void *)(*table)[x]._row, limits, (*table)[x]._type->fns->elt_size); for (y = 0; y < n_cols; ++y) { (*table)[x]._type->fns->uninit ((*table)[x]._type, limits, y, (void *)((t_uchar *)(*table)[x]._row + y * (*table)[x]._type->fns->elt_size)); } } ar_free ((void **)&(*table)[x]._row, limits); } ar_free ((void **)table, limits); mem_set0 ((t_uchar *)table, sizeof (*table)); return 0; } void * property_soft_ref (t_property_table * table, alloc_limits limits, ssize_t elt_size, ssize_t representation_id, ssize_t global_id, ssize_t n) { ssize_t id; t_property_row * row; id = property_id (representation_id, global_id); if (id < 0) return 0; if (id >= ar_size ((void *)*table, limits, sizeof (t_property_row))) return 0; row = &(*table)[id]; if (n < 0) return 0; if (n >= ar_size ((void *)row->_row, limits, elt_size)) return 0; return (void *)((t_uchar *)row->_row + n * elt_size); } void * property_ref (t_property_table * table, alloc_limits limits, ssize_t elt_size, ssize_t representation_id, ssize_t global_id, ssize_t n, t_property_type * type) { ssize_t id; t_property_row * row; ssize_t was_size; void * answer; id = property_id (representation_id, global_id); if (id < 0) return 0; row = (t_property_row *)ar_ref ((void **)table, lim_use_malloc, id, sizeof (t_property_row)); if (!row) return 0; if (type && !row->_type) row->_type = type; if (n < 0) return 0; was_size = ar_size ((void *)row->_row, lim_use_malloc, elt_size); answer = ar_ref ((void **)&row->_row, lim_use_malloc, n, elt_size); if (!answer) return 0; if (row->_type && row->_type->fns && row->_type->fns->init) { ssize_t y; for (y = was_size; y <= n; ++y) { row->_type->fns->init (row->_type, limits, y, row->_row + y * row->_type->fns->elt_size); } } return answer; } /* tag: Tom Lord Wed Oct 27 09:29:18 2004 (property.c) */ tla-1.3.5+dfsg/src/hackerlab/properties/Makefile.in0000644000175000017500000000030110457621774020710 0ustar useruserinclude $(makefiles)/library-objects.mk ifeq ($(cgs__install_hackerlab),1) include $(makefiles)/install-includes.mk endif # tag: Tom Lord Sat Nov 20 18:25:27 2004 (properties/Makefile.in) # tla-1.3.5+dfsg/src/hackerlab/properties/property.h0000644000175000017500000000464310457621774020715 0ustar useruser/* property.h: * **************************************************************** * Copyright (C) 2004 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBAWIKI__PROPERTY_H #define INCLUDE__LIBAWIKI__PROPERTY_H #include "hackerlab/mem/alloc-limits.h" typedef struct property_row * t_property_table; typedef struct property_row t_property_row; typedef struct property_type t_property_type; typedef struct property_fns t_property_fns; typedef void (*t_property_init_fn) (t_property_type * type, alloc_limits limits, ssize_t pos, void * mem); typedef void (*t_property_uninit_fn) (t_property_type * type, alloc_limits limits, ssize_t pos, void * mem); struct property_row { struct property_type * _type; void * _row; }; struct property_type { t_property_fns * fns; }; struct property_fns { t_uchar * debugging_name; ssize_t elt_size; t_property_init_fn init; t_property_uninit_fn uninit; }; /* automatically generated __STDC__ prototypes */ extern ssize_t property_representation_id (void * key); extern ssize_t property_global_id (void * key); extern ssize_t property_id (ssize_t representation_id, ssize_t global_id); extern int init_property_table (t_property_table * table, alloc_limits limits); extern int uninit_property_table (t_property_table * table, alloc_limits limits); extern void * property_soft_ref (t_property_table * table, alloc_limits limits, ssize_t elt_size, ssize_t representation_id, ssize_t global_id, ssize_t n); extern void * property_ref (t_property_table * table, alloc_limits limits, ssize_t elt_size, ssize_t representation_id, ssize_t global_id, ssize_t n, t_property_type * type); #endif /* INCLUDE__LIBAWIKI__PROPERTY_H */ /* tag: Tom Lord Wed Oct 27 09:22:25 2004 (property.h) */ tla-1.3.5+dfsg/src/hackerlab/properties/PLUGIN/0000755000175000017500000000000010457621774017647 5ustar userusertla-1.3.5+dfsg/src/hackerlab/properties/PLUGIN/REQ0000644000175000017500000000007510457621774020223 0ustar useruserdynid properties arrays properties properties libhackerlab tla-1.3.5+dfsg/src/hackerlab/uni/0000755000175000017500000000000010457621774015250 5ustar userusertla-1.3.5+dfsg/src/hackerlab/uni/coding-inlines.c0000644000175000017500000012543610457621774020331 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:41:36 2001 (coding-inlines.c) */ /* coding-inlines.c - * **************************************************************** * Copyright (C) 2000, 2004 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/machine/endian.h" #include "hackerlab/machine/types.h" #include "hackerlab/bugs/panic.h" #include "hackerlab/uni/invariant.h" #include "hackerlab/uni/coding.h" #ifndef UNI_INLINE_QUALIFIERS #define UNI_INLINE_QUALIFIERS #endif #ifndef __GNUC__ #undef __attribute__ #define __attribute__(X) #endif /************************************************************************ *(h2 "Lowest Level Unicode String Functions") * * * These functions provide the basics of reading and writing codepoints * in strings. */ /************************************************************************ *(h3 "Encoding Scheme Size Information") * */ /*(c uni_cv_sizeof) * size_t uni_cv_sizeof (enum uni_encoding_scheme encoding); * * Return the size in bytes of code units used in a particular * encoding scheme (1 for uni_iso8859_1 and uni_utf8, 2 for uni_utf16, * etc.). */ UNI_INLINE_QUALIFIERS size_t __attribute__((unused)) uni_cv_sizeof (enum uni_encoding_scheme encoding) { switch (encoding) { #undef UNI_ENCODING #define UNI_ENCODING(NAME, WIDTH, SCANNER_WIDTH, CSET_SIZE) case uni_ ## NAME: return (size_t)WIDTH; break; UNI_ENCODING_SCHEMES; default: return uni_cv_sizeof (uni_iso8859_1); } } /*(c uni_scanner_sizeof) * size_t uni_scanner_sizeof (enum uni_encoding_scheme encoding); * * Return the size in bytes of the unit of length used by the * prefered scanner routine for a given encoding. * * In other words, for native encoding forms, return 1; * For -be and -le forms, return what ujni_cv_sizeof would return. */ UNI_INLINE_QUALIFIERS size_t __attribute__((unused)) uni_scanner_sizeof (enum uni_encoding_scheme encoding) { switch (encoding) { #undef UNI_ENCODING #define UNI_ENCODING(NAME, WIDTH, SCANNER_WIDTH, CSET_SIZE) case uni_ ## NAME: return (size_t)SCANNER_WIDTH; break; UNI_ENCODING_SCHEMES; default: return uni_cv_sizeof (uni_iso8859_1); } } UNI_INLINE_QUALIFIERS ssize_t __attribute__((unused)) uni_cv_length_of_codepoint_in_encoding (enum uni_encoding_scheme enc, t_unicode c) { switch (enc) { default: case uni_iso8859_1: return ((c < 255) ? (ssize_t)1 : (ssize_t)-1); case uni_utf8: return ( (c < 128) ? (ssize_t)1 : (c < (1<<11)) ? (ssize_t)2 : (c < (1<<16)) ? (ssize_t)3 : (c < (1<<21)) ? (ssize_t)4 : (ssize_t)-2); case uni_utf16: case uni_utf16be: case uni_utf16le: return ( (c < (1<<16)) ? (ssize_t)1 : (c < (1<<21)) ? (ssize_t)2 : (ssize_t)-2); case uni_utf32: case uni_utf32be: case uni_utf32le: return ( (c < (1<<21)) ? (ssize_t)1 : (ssize_t)-2); case uni_bogus32: case uni_bogus32be: case uni_bogus32le: return (ssize_t)1; } } /************************************************************************ *(h3 "Codepoint Properties for Reading and Writing Strings") * * * */ /*(c uni_is_codepoint) * int uni_is_codepoint (t_unicode c); * * Return non-0 iff `c' is in the closed range [0..0x1fffff]. */ UNI_INLINE_QUALIFIERS int __attribute__((unused)) uni_is_codepoint (t_unicode c) { return (c <= (t_unicode)0x1fffffL); } #define UNI_BOGUS_MASK ((t_unicode)1 << 21) /*(c uni_is_bogus) * int uni_is_bogus (t_unicode c); * * Return non-0 iff `c' is a bogus unicode character. */ UNI_INLINE_QUALIFIERS int __attribute__((unused)) uni_is_bogus (t_unicode c) { return (c >> 21) == (t_unicode)1; } /*(c uni_make_bogus) * t_unicode uni_is_bogus (t_unicode c); * * Return a new bogus unicode character containing `c'. Calling * `uni_is_bogus' on the returned value always yields a non-zero * value. */ UNI_INLINE_QUALIFIERS t_unicode __attribute__((unused)) uni_make_bogus (t_unicode c) { uni_invariant (uni_is_codepoint (c)); return (c | UNI_BOGUS_MASK); } /*(c uni_extract_bogus) * t_unicode uni_extract_bogus (t_unicode c); * * Return the codepoint contained in `c'. */ UNI_INLINE_QUALIFIERS t_unicode __attribute__((unused)) uni_extract_bogus_character (t_unicode c) { uni_invariant (uni_is_bogus (c)); return (c & (~UNI_BOGUS_MASK)); } #undef UNI_BOGUS_MASK /*(c uni_is_high_surrogate) * int uni_is_high_surrogate (t_unicode c); * * Return 1 if `c' is a high surrogate, 0 otherwise. * */ UNI_INLINE_QUALIFIERS int __attribute__((unused)) uni_is_high_surrogate (t_unicode c) { return (((c) >= 0xdb80) && ((c) <= 0xdbff)); } /*(c uni_is_low_surrogate) * int uni_is_low_surrogate (t_unicode c); * * Return 1 if `c' is a low surrogate, 0 otherwise. * */ UNI_INLINE_QUALIFIERS int __attribute__((unused)) uni_is_low_surrogate (t_unicode c) { return (((c) >= 0xdc00) && ((c) <= 0xdfff)); } /*(c uni_is_surrogate) * int uni_is_surrogate (t_unicode c); * * Return 1 if `c' is a surrogate codepoint, 0 otherwise. * */ UNI_INLINE_QUALIFIERS int __attribute__((unused)) uni_is_surrogate (t_unicode c) { return (c >= 0xdb80) && (c <= 0xdfff); } /*(c uni_assemble_surrogates) * t_unicode uni_assemble_surrogates (t_unichar hi, t_unichar lo); * * Assemble a high and low surrogate codpoint pair into the * single codepoint they denote. */ UNI_INLINE_QUALIFIERS t_unicode __attribute__((unused)) uni_assemble_surrogates (t_unichar hi, t_unichar lo) { return ((hi - 0xd800) * 0x400) + (lo - 0xdc00) + 0x10000; } /************************************************************************ *(h3 "Unaligned Codepoint Scanning") * * * These functions are used to read codepoints from strings * of various encodings. * * In the nominal case, all scan functions return the next codepoint in * the input stream. If the codepoint is cut-off (would require bytes * beyond the stream's length), UNI_SCAN_INPUT_TRUNCATED is returned * instead. Finally, if the encoding is invalid, the offending (up to * 4) bytes are wrapped in a `bogus' codepoint. Thus, the * returned value should always be ckecked using `uni_is_bogus'. * * \Note:/ The string data manipulated by these functions does _not_ * have to be aligned appropriately for the code unit of the encoding * scheme. These functions read one byte at a time. * * \Note:/ In contrast to many unicode string functions in * `libhackerlab', these functions measure string lengths and * manipulate string indexes as _byte_ addresses. */ /*(c uni_iso8859_1_iscan) * t_unicode uni_iso8859_1_iscan (t_uchar * str, * size_t * pos, * size_t len) * * Return the (8-bit) codepoint at offset `*pos' * in `str'. As a side-effect, increment `*pos'. */ UNI_INLINE_QUALIFIERS t_unicode __attribute__((unused)) uni_iso8859_1_iscan (t_uchar * str, size_t * pos, size_t len) { uni_invariant (str && pos && *pos < len); return str [(*pos)++]; } /*(c uni_utf8_iscan) * t_unicode uni_utf8_iscan (t_uchar * str, * size_t * pos, * size_t len) * * Return the codepoint which begins at offset `*pos' * in `str'. As a side-effect, increment `*pos' past * the end of the codepoint. `len' indicates the length * (in bytes) of the string. * * If the codepoint is cut-off (would require bytes beyond * `len') then `*pos' is not modified and UNI_SCAN_INPUT_TRUNCATED is returned. * (This is intended to facilitate applications reading characters * from a buffered I/O stream.) * * If the string beginning at offset `*pos' is not validly encoded, * the offending byte is encoded in a bogus character and returned. * Thus, the value returned by this function should be ckecked using * `uni_is_bogus'. */ UNI_INLINE_QUALIFIERS t_unicode __attribute__((unused)) uni_utf8_iscan (t_uchar * str, size_t * pos, size_t len) { t_unicode c0; t_unicode c1; t_unicode c2; t_unicode c3; t_unicode c; uni_invariant (str && pos && (*pos < len)); c0 = str [(*pos)++]; switch (c0 >> 3) { case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7: case 8: case 9: case 10: case 11: case 12: case 13: case 14: case 15: return c0; case 24: case 25: case 26: case 27: if ((*pos) >= len) { --(*pos); return UNI_SCAN_INPUT_TRUNCATED; } c1 = str [(*pos)++]; if ((c1 >> 6) != 2) { --(*pos); return uni_make_bogus (c0); } c = (((c0 & 0x1f) << 6) | (c1 & 0x3f)); if (c < 128) { --(*pos); return uni_make_bogus (c0); } return c; case 28: case 29: if (((*pos) + 1) >= len) { --(*pos); return UNI_SCAN_INPUT_TRUNCATED; } c1 = str [(*pos)++]; c2 = str [(*pos)++]; if (((c1 >> 6) != 2) || ((c2 >> 6) != 2)) { (*pos) -= 2; return uni_make_bogus (c0); } c = ((c0 & 0xf) << 12) | ((c1 & 0x3f) << 6) | (c2 & 0x3f); if (uni_is_surrogate (c) || (c < (1 << 11))) { (*pos) -= 2; return uni_make_bogus (c0); } return c; case 30: if (((*pos) + 2) >= len) { --(*pos); return UNI_SCAN_INPUT_TRUNCATED; } c1 = str [(*pos)++]; c2 = str [(*pos)++]; c3 = str [(*pos)++]; if (((c1 >> 6) != 2) || ((c2 >> 6) != 2) || ((c3 >> 6) != 2)) { (*pos) -= 3; return uni_make_bogus (c0); } c = (((c0 & 7) << 18) | ((c1 & 0x3f) << 12) | ((c2 & 0x3f) << 6) | (c3 & 0x3f)); if ((c < (1 << 16)) || (c > 0x1fffffL)) { (*pos) -= 3; return uni_make_bogus (c0); } return c; default: /* 16 and 31 */ return uni_make_bogus (c0); } } /*(c uni_utf16be_iscan) * t_unicode uni_utf16be_iscan (t_uchar * str, * size_t * pos, * size_t len) * * Return the codepoint which begins at offset `*pos' * in `str'. As a side-effect, increment `*pos' past * the end of the codepoint. `len' indicates the length * (in bytes) of the string. * * If the codepoint is cut-off (would require bytes beyond * `len') then `*pos' is not modified and UNI_SCAN_INPUT_TRUNCATED is returned. * (This is intended to facilitate applications reading characters * from a buffered I/O stream.) * * If the string beginning at offset `*pos' is not validly encoded, * the 2 offending bytes are encoded in a bogus character and returned. * Thus, the value returned by this function should be ckecked using * `uni_is_bogus'. */ UNI_INLINE_QUALIFIERS t_unicode __attribute__((unused)) uni_utf16be_iscan (t_uchar * str, size_t * pos, size_t len) { t_unicode hi; t_unicode lo; t_unicode first; t_unicode second; uni_invariant (str && pos && (((*pos) + 1) < len)); hi = str [(*pos)++]; lo = str [(*pos)++]; first = (hi << 8) | lo; if (uni_is_low_surrogate (first)) { return uni_make_bogus (first); } if (!uni_is_high_surrogate (first)) return first; if (((*pos) + 1) >= len) { (*pos) -= 2; return UNI_SCAN_INPUT_TRUNCATED; } hi = str [(*pos)++]; lo = str [(*pos)++]; second = (hi << 8) | lo; if (!uni_is_low_surrogate (second)) { (*pos) -= 2; return uni_make_bogus (first); } return uni_assemble_surrogates (first, second); } /*(c uni_utf16le_iscan) * t_unicode uni_utf16le_iscan (t_uchar * str, * size_t * pos, * size_t len) * * Return the codepoint which begins at offset `*pos' * in `str'. As a side-effect, increment `*pos' past * the end of the codepoint. `len' indicates the length * (in bytes) of the string. * * If the codepoint is cut-off (would require bytes beyond * `len') then `*pos' is not modified and UNI_SCAN_INPUT_TRUNCATED is returned. * (This is intended to facilitate applications reading characters * from a buffered I/O stream.) * * If the string beginning at offset `*pos' is not validly encoded, * the 2 offending bytes are encoded in a bogus character and returned. * Thus, the value returned by this function should be ckecked using * `uni_is_bogus'. */ UNI_INLINE_QUALIFIERS t_unicode __attribute__((unused)) uni_utf16le_iscan (t_uchar * str, size_t * pos, size_t len) { t_unicode hi; t_unicode lo; t_unicode first; t_unicode second; uni_invariant (str && pos && (((*pos) + 1) < len)); lo = str [(*pos)++]; hi = str [(*pos)++]; first = (hi << 8) | lo; if (uni_is_low_surrogate (first)) { return uni_make_bogus (first); } if (!uni_is_high_surrogate (first)) return first; if (((*pos) + 1) >= len) { (*pos) -= 2; return UNI_SCAN_INPUT_TRUNCATED; } lo = str [(*pos)++]; hi = str [(*pos)++]; second = (hi << 8) | lo; if (!uni_is_low_surrogate (second)) { (*pos) -= 2; return uni_make_bogus (first); } return uni_assemble_surrogates (first, second); } /*(c uni_utf16_iscan) * t_unicode uni_utf16_iscan (t_uchar * str, * size_t * pos, * size_t len) * * Return the codepoint which begins at offset `*pos' * in `str'. As a side-effect, increment `*pos' past * the end of the codepoint. `len' indicates the length * (in bytes) of the string. * * If the codepoint is cut-off (would require bytes beyond * `len') then `*pos' is not modified and UNI_SCAN_INPUT_TRUNCATED is returned. * (This is intended to facilitate applications reading characters * from a buffered I/O stream.) * * If the string beginning at offset `*pos' is not validly encoded, * the 2 offending bytes are encoded in a bogus character and returned. * Thus, the value returned by this function should be ckecked using * `uni_is_bogus'. */ UNI_INLINE_QUALIFIERS t_unicode __attribute__((unused)) uni_utf16_iscan (t_uchar * str, size_t * pos, size_t len) { #if MACHINE_IS_BIGENDIAN return uni_utf16be_iscan (str, pos, len); #else return uni_utf16le_iscan (str, pos, len); #endif } /*(c uni_utf32le_iscan) * t_unicode uni_utf32le_iscan (t_uchar * str, * size_t * pos, * size_t len) * * Return the codepoint which begins at offset `*pos' * in `str'. As a side-effect, increment `*pos' past * the end of the codepoint. `len' indicates the length * (in bytes) of the string. * * If the codepoint is cut-off (would require bytes beyond * `len') then `*pos' is not modified and UNI_SCAN_INPUT_TRUNCATED is returned. * (This is intended to facilitate applications reading characters * from a buffered I/O stream.) * * If the string beginning at offset `*pos' is not validly encoded, * the 4 offending bytes are encoded in a bogus character and returned. * Thus, the value returned by this function should be ckecked using * `uni_is_bogus'. */ UNI_INLINE_QUALIFIERS t_unicode __attribute__((unused)) uni_utf32le_iscan (t_uchar * str, size_t * pos, size_t len) { t_unicode result; size_t p; uni_invariant (str && pos && (*pos < len)); p = *pos; if (p + 4 > len) return UNI_SCAN_INPUT_TRUNCATED; result = str[p] + (str[p + 1] << 8) + (str[p + 2] << 16) + (str[p + 3] << 24); (*pos) += 4; return result; } /*(c uni_utf32be_iscan) * t_unicode uni_utf32be_iscan (t_uchar * str, * size_t * pos, * size_t len) * * Return the codepoint which begins at offset `*pos' * in `str'. As a side-effect, increment `*pos' past * the end of the codepoint. `len' indicates the length * (in bytes) of the string. * * If the codepoint is cut-off (would require bytes beyond * `len') then `*pos' is not modified and UNI_SCAN_INPUT_TRUNCATED is returned. * (This is intended to facilitate applications reading characters * from a buffered I/O stream.) * * If the string beginning at offset `*pos' is not validly encoded, * the 4 offending bytes are encoded in a bogus character and returned. * Thus, the value returned by this function should be ckecked using * `uni_is_bogus'. */ UNI_INLINE_QUALIFIERS t_unicode __attribute__((unused)) uni_utf32be_iscan (t_uchar * str, size_t * pos, size_t len) { t_unicode result; size_t p; uni_invariant (str && pos && (*pos < len)); p = *pos; if (p + 4 > len) return UNI_SCAN_INPUT_TRUNCATED; result = str[p + 3] + (str[p + 2] << 8) + (str[p + 1] << 16) + (str[p] << 24); (*pos) += 4; return result; } /*(c uni_utf32_iscan) * t_unicode uni_utf32_iscan (t_uchar * str, * size_t * pos, * size_t len) * * Return the codepoint which begins at offset `*pos' * in `str'. As a side-effect, increment `*pos' past * the end of the codepoint. `len' indicates the length * (in bytes) of the string. * * If the codepoint is cut-off (would require bytes beyond * `len') then `*pos' is not modified and UNI_SCAN_INPUT_TRUNCATED is returned. * (This is intended to facilitate applications reading characters * from a buffered I/O stream.) * * If the string beginning at offset `*pos' is not validly encoded, * the 4 offending bytes are encoded in a bogus character and returned. * Thus, the value returned by this function should be ckecked using * `uni_is_bogus'. */ UNI_INLINE_QUALIFIERS t_unicode __attribute__((unused)) uni_utf32_iscan (t_uchar * str, size_t * pos, size_t len) { #if MACHINE_IS_BIGENDIAN return uni_utf32be_iscan (str, pos, len); #else return uni_utf32le_iscan (str, pos, len); #endif } /*(c uni_bogus32le_iscan) * t_unicode uni_bogus32le_iscan (t_uchar * str, * size_t * pos, * size_t len) * * Return the codepoint which begins at offset `*pos' * in `str'. As a side-effect, increment `*pos' past * the end of the codepoint. `len' indicates the length * (in bytes) of the string. * * If the codepoint is cut-off (would require bytes beyond * `len') then `*pos' is not modified and UNI_SCAN_INPUT_TRUNCATED is returned. * (This is intended to facilitate applications reading characters * from a buffered I/O stream.) * * If the string beginning at offset `*pos' is not validly encoded, * the 4 offending bytes are encoded in a bogus character and returned. * Thus, the value returned by this function should be ckecked using * `uni_is_bogus'. */ UNI_INLINE_QUALIFIERS t_unicode __attribute__((unused)) uni_bogus32le_iscan (t_uchar * str, size_t * pos, size_t len) { t_unicode result; size_t p; uni_invariant (str && pos && (*pos < len)); p = *pos; if (p + 4 > len) return UNI_SCAN_INPUT_TRUNCATED; result = str[p] + (str[p + 1] << 8) + (str[p + 2] << 16) + (str[p + 3] << 24); (*pos) += 4; return result; } /*(c uni_bogus32be_iscan) * t_unicode uni_bogus32be_iscan (t_uchar * str, * size_t * pos, * size_t len) * * Return the codepoint which begins at offset `*pos' * in `str'. As a side-effect, increment `*pos' past * the end of the codepoint. `len' indicates the length * (in bytes) of the string. * * If the codepoint is cut-off (would require bytes beyond * `len') then `*pos' is not modified and UNI_SCAN_INPUT_TRUNCATED is returned. * (This is intended to facilitate applications reading characters * from a buffered I/O stream.) * * If the string beginning at offset `*pos' is not validly encoded, * the 4 offending bytes are encoded in a bogus character and returned. * Thus, the value returned by this function should be ckecked using * `uni_is_bogus'. */ UNI_INLINE_QUALIFIERS t_unicode __attribute__((unused)) uni_bogus32be_iscan (t_uchar * str, size_t * pos, size_t len) { t_unicode result; size_t p; uni_invariant (str && pos && (*pos < len)); p = *pos; if (p + 4 > len) return UNI_SCAN_INPUT_TRUNCATED; result = str[p + 3] + (str[p + 2] << 8) + (str[p + 1] << 16) + (str[p] << 24); (*pos) += 4; return result; } /*(c uni_bogus32_iscan) * t_unicode uni_bogus32_iscan (t_uchar * str, * size_t * pos, * size_t len) * * Return the (possibly bogus) codepoint which begins at offset `*pos' * in `str'. As a side-effect, increment `*pos' past the end of the * codepoint. `len' indicates the length (in bytes) of the string. * * If the codepoint is cut-off (would require bytes beyond `len') then * `*pos' is not modified and UNI_SCAN_INPUT_TRUNCATED is returned. * (This is intended to facilitate applications reading characters * from a buffered I/O stream.) * * If the string beginning at offset `*pos' is not validly encoded, * the 4 offending bytes are encoded in a bogus character and returned. * Thus, the value returned by this function should be ckecked using * `uni_is_bogus'. */ UNI_INLINE_QUALIFIERS t_unicode __attribute__((unused)) uni_bogus32_iscan (t_uchar * str, size_t * pos, size_t len) { #if MACHINE_IS_BIGENDIAN return uni_bogus32be_iscan (str, pos, len); #else return uni_bogus32le_iscan (str, pos, len); #endif } /************************************************************************ *(h3 "Aligned Codepoint Scanning") * * * These functions are used to read codepoints from strings * of various encodings. * * \Note:/ The string data manipulated by these functions have to be * aligned appropriately for the code unit of the encoding scheme. * * \Note:/ These functions measure string lengths and * manipulate string indexes as _code_value_ indexes. */ /*(c uni_iso8859_1_scan) * t_unicode uni_iso8859_1_scan (t_uchar * str, * size_t * pos, * size_t len) * * Return the (8-bit) codepoint at offset `*pos' * in `str'. As a side-effect, increment `*pos'. */ UNI_INLINE_QUALIFIERS t_unicode __attribute__((unused)) uni_iso8859_1_scan (t_uchar * str, size_t * pos, size_t len) { return uni_iso8859_1_iscan (str, pos, len); } /*(c uni_utf8_scan) * t_unicode uni_utf8_scan (t_uchar * str, * size_t * pos, * size_t len) * * Return the codepoint which begins at offset `*pos' * in `str'. As a side-effect, increment `*pos' past * the end of the codepoint. `len' indicates the length * (in bytes) of the string. * * If the codepoint is cut-off (would require bytes beyond * `len') then `*pos' is not modified and UNI_SCAN_INPUT_TRUNCATED is returned. * (This is intended to facilitate applications reading characters * from a buffered I/O stream.) * * If the string beginning at offset `*pos' is not validly encoded, * the offending byte is encoded in a bogus character and returned. * Thus, the value returned by this function should be ckecked using * `uni_is_bogus'. */ UNI_INLINE_QUALIFIERS t_unicode __attribute__((unused)) uni_utf8_scan (t_uchar * str, size_t * pos, size_t len) { return uni_utf8_iscan (str, pos, len); } /*(c uni_utf16_scan) * t_unicode uni_utf16_scan (t_uint16 * str, * size_t * pos16, * size_t len16) * * Return the codepoint which begins at offset `*pos16' * in `str'. As a side-effect, increment `*pos' past * the end of the codepoint. `len16' indicates the length * of the string (measured in `t_uint16' values). * * If the codepoint is cut-off (would require data beyond * `len16') then `*pos' is not modified and UNI_SCAN_INPUT_TRUNCATED is returned. * (This is intended to facilitate applications reading characters * from a buffered I/O stream.) * * If the string beginning at offset `*pos' is not validly encoded, * the 2 offending bytes are encoded in a bogus character and returned. * Thus, the value returned by this function should be ckecked using * `uni_is_bogus'. */ UNI_INLINE_QUALIFIERS t_unicode __attribute__((unused)) uni_utf16_scan (t_uint16 * str, size_t * pos16, size_t len16) { t_unicode first; t_unicode second; uni_invariant (str && pos16 && ((*pos16) < len16)); first = str[(*pos16)++]; if (uni_is_low_surrogate (first)) { return uni_make_bogus (first); } if (!uni_is_high_surrogate (first)) return first; if ((*pos16) >= len16) { (*pos16) -= 1; return UNI_SCAN_INPUT_TRUNCATED; } second = str [(*pos16)++]; if (!uni_is_low_surrogate (second)) { (*pos16) -= 1; return uni_make_bogus (first); } return uni_assemble_surrogates (first, second); } /*(c uni_utf32_scan) * t_unicode uni_utf32_scan (t_uint32 * str, * size_t * pos32, * size_t len32) * * Return the codepoint which begins at offset `*pos32' in `str'. As * a side-effect, increment `*pos' past the end of the codepoint. * `len32' indicates the length of the string (measured in `t_uint32' * values). * * If the string beginning at offset `*pos' is not validly encoded, * the 4 offending bytes are encoded in a bogus character and * returned. Thus, the value returned by this function should be * ckecked using `uni_is_bogus'. */ UNI_INLINE_QUALIFIERS t_unicode __attribute__((unused)) uni_utf32_scan (t_uint32 * str, size_t * pos32, size_t len32) { t_unicode result; uni_invariant (str && pos32 && ((*pos32) < len32)); result = str[(*pos32)++]; return result; } /*(c uni_bogus32_scan) * t_unicode uni_bogus32_scan (t_uint32 * str, * size_t * pos32, * size_t len32) * * Return the codepoint which begins at offset `*pos32' in `str'. As * a side-effect, increment `*pos' past the end of the codepoint. * `len32' indicates the length of the string (measured in `t_uint32' * values). * * If the string beginning at offset `*pos' is not validly encoded, * the 4 offending bytes are encoded in a bogus character and * returned. Thus, the value returned by this function should be * ckecked using `uni_is_bogus'. */ UNI_INLINE_QUALIFIERS t_unicode __attribute__((unused)) uni_bogus32_scan (t_uint32 * str, size_t * pos32, size_t len32) { t_unicode result; uni_invariant (str && pos32 && ((*pos32) < len32)); result = str[(*pos32)++]; return result; } /************************************************************************ *(h3 "Unaligned Codepoint Writing") * * * These functions are used to write codepoints to strings * of various encodings. * * \Note:/ The string data manipulated by these functions * does _not_ have to be aligned appropriately for the code * unit of the encoding scheme. These functions write one byte * at a time. * * \Note:/ In contrast to many unicode string functions in * `libhackerlab', these functions measure string lengths and * manipulate string indexes as _byte_ addresses. */ /*(c uni_iso8859_1_iput) * int uni_iso8859_1_iput (t_uchar * str, * size_t * pos, * size_t len, * t_unicode c) * * Write the codepoint `c' to `str' at offset `*pos'. * * As a side effect, increment `*pos' past the newly written * codpoint. * * Normally, return the number of bytes written (the same amount * by which `*pos' is incremented). * * If writing the codepoint would exceed the length, `len', of the * string, then instead return the inverse (negative) number of bytes * required to store the codepoint. * * \Note:/ This function may only be called for values of `c' less * than 256. */ UNI_INLINE_QUALIFIERS int __attribute__((unused)) uni_iso8859_1_iput (t_uchar * str, size_t * pos, size_t len, t_unicode c) { uni_invariant (str && pos && (c < 256)); if ((*pos) >= len) { return -1; } str[(*pos)++] = (t_uchar)c; return 1; } /*(c uni_utf8_iput) * int uni_utf8_iput (t_uchar * str, * size_t * pos, * size_t len, * t_unicode c) * * Write the codepoint `c' to `str' at offset `*pos'. * * As a side effect, increment `*pos' past the newly written * codpoint. * * Normally, return the number of bytes written (the same amount * by which `*pos' is incremented). * * If writing the codepoint would exceed the length, `len', of the * string, then instead return the inverse (negative) number of bytes * required to store the codepoint. */ UNI_INLINE_QUALIFIERS int __attribute__((unused)) uni_utf8_iput (t_uchar * str, size_t * pos, size_t len, t_unicode c) { uni_invariant (str && pos); uni_invariant (uni_is_codepoint (c)); uni_invariant (!uni_is_surrogate (c)); if (c < 0x80) { if (*pos >= len) return -1; str[(*pos)++] = c; return 1; } else if (c < 0x800) { if ((*pos + 1) >= len) return -2; str[(*pos)++] = (0xc0 | (c >> 6)); str[(*pos)++] = (0x80 | (c & 0x3f)); return 2; } else if (c <= 0xffff) { if ((*pos + 2) >= len) return -3; str[(*pos)++] = (0xe0 | (c >> 12)); str[(*pos)++] = (0x80 | ((c >> 6) & 0x3f)); str[(*pos)++] = (0x80 | (c & 0x3f)); return 3; } else if (c < 0x110000) { t_unicode hi_bits; if ((*pos + 3) >= len) return -4; hi_bits = (c >> 16); c &= 0xffff; str[(*pos)++] = (0xf0 | (hi_bits >> 2)); str[(*pos)++] = (0x80 | ((hi_bits & 3) << 4) | ((c >> 12) & 0xf)); str[(*pos)++] = (0x80 | ((c >> 6) & 0x3f)); str[(*pos)++] = (0x80 | (c & 0x3f)); return 4; } else while (1) panic ("out of range character in uni_utf8_iput"); } /*(c uni_utf16be_iput) * int uni_utf16be_iput (t_uchar * str, * size_t * pos, * size_t len, * t_unicode c) * * Write the codepoint `c' to `str' at offset `*pos'. * * As a side effect, increment `*pos' past the newly written * codpoint. * * Normally, return the number of bytes written (the same amount * by which `*pos' is incremented). * * If writing the codepoint would exceed the length, `len', of the * string, then instead return the inverse (negative) number of bytes * required to store the codepoint. */ UNI_INLINE_QUALIFIERS int __attribute__((unused)) uni_utf16be_iput (t_uchar * str, size_t * pos, size_t len, t_unicode c) { uni_invariant (str && pos); uni_invariant (uni_is_codepoint (c)); uni_invariant (!uni_is_surrogate (c)); if (c <= 0xffff) { if ((*pos + 1) >= len) return -2; str[(*pos)++] = ((c >> 8) & 0xff); str[(*pos)++] = (c & 0xff); return 2; } else { t_unicode hi; t_unicode lo; if ((*pos + 3) >= len) return -4; hi = (c - 0x10000) / 0x400 + 0xd800; lo = (c - 0x10000) + 0xdc00; str[(*pos)++] = ((hi >> 8) & 0xff); str[(*pos)++] = (hi & 0xff); str[(*pos)++] = ((lo >> 8) & 0xff); str[(*pos)++] = (lo & 0xff); return 4; } } /*(c uni_utf16le_iput) * int uni_utf16le_iput (t_uchar * str, * size_t * pos, * size_t len, * t_unicode c) * * Write the codepoint `c' to `str' at offset `*pos'. * * As a side effect, increment `*pos' past the newly written * codpoint. * * Normally, return the number of bytes written (the same amount * by which `*pos' is incremented). * * If writing the codepoint would exceed the length, `len', of the * string, then instead return the inverse (negative) number of bytes * required to store the codepoint. */ UNI_INLINE_QUALIFIERS int __attribute__((unused)) uni_utf16le_iput (t_uchar * str, size_t * pos, size_t len, t_unicode c) { uni_invariant (str && pos); uni_invariant (uni_is_codepoint (c)); uni_invariant (!uni_is_surrogate (c)); if (c <= 0xffff) { if ((*pos + 1) >= len) return -2; str[(*pos)++] = (c & 0xff); str[(*pos)++] = ((c >> 8) & 0xff); return 2; } else { t_unicode hi; t_unicode lo; if ((*pos + 3) >= len) return -4; hi = (c - 0x10000) / 0x400 + 0xd800; lo = (c - 0x10000) + 0xdc00; str[(*pos)++] = (hi & 0xff); str[(*pos)++] = ((hi >> 8) & 0xff); str[(*pos)++] = (lo & 0xff); str[(*pos)++] = ((lo >> 8) & 0xff); return 4; } } /*(c uni_utf16_iput) * int uni_utf16_iput (t_uchar * str, * size_t * pos, * size_t len, * t_unicode c) * * Write the codepoint `c' to `str' at offset `*pos'. * * As a side effect, increment `*pos' past the newly written * codpoint. * * Normally, return the number of bytes written (the same amount * by which `*pos' is incremented). * * If writing the codepoint would exceed the length, `len', of the * string, then instead return the inverse (negative) number of bytes * required to store the codepoint. */ UNI_INLINE_QUALIFIERS int __attribute__((unused)) uni_utf16_iput (t_uchar * str, size_t * pos, size_t len, t_unicode c) { #if MACHINE_IS_BIGENDIAN return uni_utf16be_iput (str, pos, len, c); #else return uni_utf16le_iput (str, pos, len, c); #endif } /*(c uni_utf32le_iput) * int uni_utf32le_iput (t_uchar * str, * size_t * pos, * size_t len, * t_unicode c) * * Write the codepoint `c' to `str' at offset `*pos'. * * As a side effect, increment `*pos' past the newly written * codpoint. * * Normally, return the number of bytes written (the same amount * by which `*pos' is incremented). * * If writing the codepoint would exceed the length, `len', of the * string, then instead return the inverse (negative) number of bytes * required to store the codepoint. */ UNI_INLINE_QUALIFIERS int __attribute__((unused)) uni_utf32le_iput (t_uchar * str, size_t * pos, size_t len, t_unicode c) { uni_invariant (str && pos); uni_invariant (uni_is_codepoint (c)); uni_invariant (!uni_is_surrogate (c)); if ((*pos) + 4 > len) return -4; str[(*pos)++] = c & 0xff; str[(*pos)++] = (c >> 8) & 0xff; str[(*pos)++] = (c >> 16) & 0xff; str[(*pos)++] = 0; return 4; } /*(c uni_utf32be_iput) * int uni_utf32be_iput (t_uchar * str, * size_t * pos, * size_t len, * t_unicode c) * * Write the codepoint `c' to `str' at offset `*pos'. * * As a side effect, increment `*pos' past the newly written * codpoint. * * Normally, return the number of bytes written (the same amount * by which `*pos' is incremented). * * If writing the codepoint would exceed the length, `len', of the * string, then instead return the inverse (negative) number of bytes * required to store the codepoint. */ UNI_INLINE_QUALIFIERS int __attribute__((unused)) uni_utf32be_iput (t_uchar * str, size_t * pos, size_t len, t_unicode c) { uni_invariant (str && pos); uni_invariant (uni_is_codepoint (c)); uni_invariant (!uni_is_surrogate (c)); if ((*pos) + 4 > len) return -4; str[(*pos)++] = 0; str[(*pos)++] = (c >> 16) & 0xff; str[(*pos)++] = (c >> 8) & 0xff; str[(*pos)++] = c & 0xff; return 4; } /*(c uni_utf32_iput) * int uni_utf32_iput (t_uchar * str, * size_t * pos, * size_t len, * t_unicode c) * * Write the codepoint `c' to `str' at offset `*pos'. * * As a side effect, increment `*pos' past the newly written * codpoint. * * Normally, return the number of bytes written (the same amount * by which `*pos' is incremented). * * If writing the codepoint would exceed the length, `len', of the * string, then instead return the inverse (negative) number of bytes * required to store the codepoint. */ UNI_INLINE_QUALIFIERS int __attribute__((unused)) uni_utf32_iput (t_uchar * str, size_t * pos, size_t len, t_unicode c) { #if MACHINE_IS_BIGENDIAN return uni_utf32be_iput (str, pos, len, c); #else return uni_utf32le_iput (str, pos, len, c); #endif } /*(c uni_bogus32le_iput) * int uni_bogus32le_iput (t_uchar * str, * size_t * pos, * size_t len, * t_unicode c) * * Write the (possibly bogus) codepoint `c' to `str' at offset `*pos'. * * As a side effect, increment `*pos' past the newly written * codpoint. * * Normally, return the number of bytes written (the same amount * by which `*pos' is incremented). * * If writing the codepoint would exceed the length, `len', of the * string, then instead return the inverse (negative) number of bytes * required to store the codepoint. */ UNI_INLINE_QUALIFIERS int __attribute__((unused)) uni_bogus32le_iput (t_uchar * str, size_t * pos, size_t len, t_unicode c) { uni_invariant (str && pos); if ((*pos) + 4 > len) return -4; str[(*pos)++] = c & 0xff; str[(*pos)++] = (c >> 8) & 0xff; str[(*pos)++] = (c >> 16) & 0xff; str[(*pos)++] = 0; return 4; } /*(c uni_bogus32be_iput) * int uni_bogus32be_iput (t_uchar * str, * size_t * pos, * size_t len, * t_unicode c) * * Write the (possibly bogus) codepoint `c' to `str' at offset `*pos'. * * As a side effect, increment `*pos' past the newly written * codpoint. * * Normally, return the number of bytes written (the same amount * by which `*pos' is incremented). * * If writing the codepoint would exceed the length, `len', of the * string, then instead return the inverse (negative) number of bytes * required to store the codepoint. */ UNI_INLINE_QUALIFIERS int __attribute__((unused)) uni_bogus32be_iput (t_uchar * str, size_t * pos, size_t len, t_unicode c) { uni_invariant (str && pos); if ((*pos) + 4 > len) return -4; str[(*pos)++] = 0; str[(*pos)++] = (c >> 16) & 0xff; str[(*pos)++] = (c >> 8) & 0xff; str[(*pos)++] = c & 0xff; return 4; } /*(c uni_bogus32_iput) * int uni_bogus32_iput (t_uchar * str, * size_t * pos, * size_t len, * t_unicode c) * * Write the (possibly bogus) codepoint `c' to `str' at offset `*pos'. * * As a side effect, increment `*pos' past the newly written * codpoint. * * Normally, return the number of bytes written (the same amount * by which `*pos' is incremented). * * If writing the codepoint would exceed the length, `len', of the * string, then instead return the inverse (negative) number of bytes * required to store the codepoint. */ UNI_INLINE_QUALIFIERS int __attribute__((unused)) uni_bogus32_iput (t_uchar * str, size_t * pos, size_t len, t_unicode c) { #if MACHINE_IS_BIGENDIAN return uni_bogus32be_iput (str, pos, len, c); #else return uni_bogus32le_iput (str, pos, len, c); #endif } /************************************************************************ *(h3 "Aligned Codepoint Writing") * * * These functions are used to write codepoints to strings * of various encodings. * * \Note:/ The string data manipulated by these functions have to be * aligned appropriately for the code unit of the encoding scheme. * * \Note:/ These functions measure string lengths and * manipulate string indexes as _code_value_ indexes. */ /*(c uni_iso8859_1_put) * int uni_iso8859_1_put (t_uchar * str, * size_t * pos, * size_t len, * t_unicode c) * * Store the codepoint `c' in `str' beginning at code value * offset `*pos'. * * Normally, advance `*pos' past the end of the newly stored * codepoint and return the number of code values written. * * If storing `c' would require writing beyond the `len' code values * beginning at `str', then instead return the inverse (negative) number * of code values needed to store `c'. * * \Note:/ It is an error to call this function with values of `c' * greater than 256. */ UNI_INLINE_QUALIFIERS int __attribute__((unused)) uni_iso8859_1_put (t_uchar * str, size_t * pos, size_t len, t_unicode c) { return uni_iso8859_1_iput (str, pos, len, c); } /*(c uni_utf8_put) * int uni_utf8_put (t_uchar * str, * size_t * pos, * size_t len, * t_unicode c) * * Store the codepoint `c' in `str' beginning at code value * offset `*pos'. * * Normally, advance `*pos' past the end of the newly stored * codepoint and return the number of code values written. * * If storing `c' would require writing beyond the `len' code values * beginning at `str', then instead return the inverse (negative) number * of code values needed to store `c'. */ UNI_INLINE_QUALIFIERS int __attribute__((unused)) uni_utf8_put (t_uchar * str, size_t * pos, size_t len, t_unicode c) { return uni_utf8_iput (str, pos, len, c); } /*(c uni_utf16_put) * int uni_utf16_put (t_uint16 * str, * size_t * pos, * size_t len, * t_unicode c) * * Store the codepoint `c' in `str' beginning at code value * offset `*pos'. * * Normally, advance `*pos' past the end of the newly stored * codepoint and return the number of code values written. * * If storing `c' would require writing beyond the `len' code values * beginning at `str', then instead return the inverse (negative) number * of code values needed to store `c'. */ UNI_INLINE_QUALIFIERS int __attribute__((unused)) uni_utf16_put (t_uint16 * str, size_t * pos16, size_t len16, t_unicode c) { uni_invariant (str && pos16); uni_invariant (uni_is_codepoint (c)); uni_invariant (!uni_is_surrogate (c)); if (c <= 0xffff) { if ((*pos16) >= len16) return -1; str[(*pos16)++] = (t_uint16)(c & 0xffff); return 1; } else { t_unicode hi; t_unicode lo; if ((*pos16 + 1) >= len16) return -2; hi = (c - 0x10000) / 0x400 + 0xd800; lo = (c - 0x10000) + 0xdc00; str[(*pos16)++] = (t_uint16)(hi & 0xffff); str[(*pos16)++] = (t_uint16)(lo & 0xffff); return 2; } } /*(c uni_utf32_put) * int uni_utf32_put (t_uint32 * str, * size_t * pos, * size_t len, * t_unicode c) * * Store the codepoint `c' in `str' beginning at code value * offset `*pos'. * * Advance `*pos' past the end of the newly stored * codepoint and return the number of code values written (i.e. 1). * */ UNI_INLINE_QUALIFIERS int __attribute__((unused)) uni_utf32_put (t_uint32 * str, size_t * pos32, size_t len32, t_unicode c) { uni_invariant (str && pos32 && ((*pos32) < len32)); uni_invariant (uni_is_codepoint (c)); str[(*pos32)++] = c; return 1; } /*(c uni_bogus32_put) * int uni_bogus32_put (t_uint32 * str, * size_t * pos, * size_t len, * t_unicode c) * * Store the (possibly bogus) codepoint `c' in `str' beginning at code * value offset `*pos'. * * Advance `*pos' past the end of the newly stored * codepoint and return the number of code values written (i.e. 1). * */ UNI_INLINE_QUALIFIERS int __attribute__((unused)) uni_bogus32_put (t_uint32 * str, size_t * pos32, size_t len32, t_unicode c) { uni_invariant (str && pos32 && ((*pos32) < len32)); str[(*pos32)++] = c; return 1; } tla-1.3.5+dfsg/src/hackerlab/uni/coding-inlines.h0000644000175000017500000001630610457621774020331 0ustar useruser/* coding-inlines.h - declarations for inline encoding/decoding functions * **************************************************************** * Copyright (C) 2000, 2004 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__UNI__CODING_INLINES_H #define INCLUDE__UNI__CODING_INLINES_H #undef UNI_INLINE_QUALIFIERS #define UNI_INLINE_QUALIFIERS #ifndef __GNUC__ #undef __attribute__ #define __attribute__(X) #endif /* automatically generated __STDC__ prototypes */ extern UNI_INLINE_QUALIFIERS size_t __attribute__((unused)) uni_cv_sizeof (enum uni_encoding_scheme encoding); extern UNI_INLINE_QUALIFIERS size_t __attribute__((unused)) uni_scanner_sizeof (enum uni_encoding_scheme encoding); extern UNI_INLINE_QUALIFIERS ssize_t __attribute__((unused)) uni_cv_length_of_codepoint_in_encoding (enum uni_encoding_scheme enc, t_unicode c); extern UNI_INLINE_QUALIFIERS int __attribute__((unused)) uni_is_codepoint (t_unicode c); extern UNI_INLINE_QUALIFIERS int __attribute__((unused)) uni_is_bogus (t_unicode c); extern UNI_INLINE_QUALIFIERS t_unicode __attribute__((unused)) uni_make_bogus (t_unicode c); extern UNI_INLINE_QUALIFIERS t_unicode __attribute__((unused)) uni_extract_bogus_character (t_unicode c); extern UNI_INLINE_QUALIFIERS int __attribute__((unused)) uni_is_high_surrogate (t_unicode c); extern UNI_INLINE_QUALIFIERS int __attribute__((unused)) uni_is_low_surrogate (t_unicode c); extern UNI_INLINE_QUALIFIERS int __attribute__((unused)) uni_is_surrogate (t_unicode c); extern UNI_INLINE_QUALIFIERS t_unicode __attribute__((unused)) uni_assemble_surrogates (t_unichar hi, t_unichar lo); extern UNI_INLINE_QUALIFIERS t_unicode __attribute__((unused)) uni_iso8859_1_iscan (t_uchar * str, size_t * pos, size_t len); extern UNI_INLINE_QUALIFIERS t_unicode __attribute__((unused)) uni_utf8_iscan (t_uchar * str, size_t * pos, size_t len); extern UNI_INLINE_QUALIFIERS t_unicode __attribute__((unused)) uni_utf16be_iscan (t_uchar * str, size_t * pos, size_t len); extern UNI_INLINE_QUALIFIERS t_unicode __attribute__((unused)) uni_utf16le_iscan (t_uchar * str, size_t * pos, size_t len); extern UNI_INLINE_QUALIFIERS t_unicode __attribute__((unused)) uni_utf16_iscan (t_uchar * str, size_t * pos, size_t len); extern UNI_INLINE_QUALIFIERS t_unicode __attribute__((unused)) uni_utf32le_iscan (t_uchar * str, size_t * pos, size_t len); extern UNI_INLINE_QUALIFIERS t_unicode __attribute__((unused)) uni_utf32be_iscan (t_uchar * str, size_t * pos, size_t len); extern UNI_INLINE_QUALIFIERS t_unicode __attribute__((unused)) uni_utf32_iscan (t_uchar * str, size_t * pos, size_t len); extern UNI_INLINE_QUALIFIERS t_unicode __attribute__((unused)) uni_bogus32le_iscan (t_uchar * str, size_t * pos, size_t len); extern UNI_INLINE_QUALIFIERS t_unicode __attribute__((unused)) uni_bogus32be_iscan (t_uchar * str, size_t * pos, size_t len); extern UNI_INLINE_QUALIFIERS t_unicode __attribute__((unused)) uni_bogus32_iscan (t_uchar * str, size_t * pos, size_t len); extern UNI_INLINE_QUALIFIERS t_unicode __attribute__((unused)) uni_iso8859_1_scan (t_uchar * str, size_t * pos, size_t len); extern UNI_INLINE_QUALIFIERS t_unicode __attribute__((unused)) uni_utf8_scan (t_uchar * str, size_t * pos, size_t len); extern UNI_INLINE_QUALIFIERS t_unicode __attribute__((unused)) uni_utf16_scan (t_uint16 * str, size_t * pos16, size_t len16); extern UNI_INLINE_QUALIFIERS t_unicode __attribute__((unused)) uni_utf32_scan (t_uint32 * str, size_t * pos32, size_t len32); extern UNI_INLINE_QUALIFIERS t_unicode __attribute__((unused)) uni_bogus32_scan (t_uint32 * str, size_t * pos32, size_t len32); extern UNI_INLINE_QUALIFIERS int __attribute__((unused)) uni_iso8859_1_iput (t_uchar * str, size_t * pos, size_t len, t_unicode c); extern UNI_INLINE_QUALIFIERS int __attribute__((unused)) uni_utf8_iput (t_uchar * str, size_t * pos, size_t len, t_unicode c); extern UNI_INLINE_QUALIFIERS int __attribute__((unused)) uni_utf16be_iput (t_uchar * str, size_t * pos, size_t len, t_unicode c); extern UNI_INLINE_QUALIFIERS int __attribute__((unused)) uni_utf16le_iput (t_uchar * str, size_t * pos, size_t len, t_unicode c); extern UNI_INLINE_QUALIFIERS int __attribute__((unused)) uni_utf16_iput (t_uchar * str, size_t * pos, size_t len, t_unicode c); extern UNI_INLINE_QUALIFIERS int __attribute__((unused)) uni_utf32le_iput (t_uchar * str, size_t * pos, size_t len, t_unicode c); extern UNI_INLINE_QUALIFIERS int __attribute__((unused)) uni_utf32be_iput (t_uchar * str, size_t * pos, size_t len, t_unicode c); extern UNI_INLINE_QUALIFIERS int __attribute__((unused)) uni_utf32_iput (t_uchar * str, size_t * pos, size_t len, t_unicode c); extern UNI_INLINE_QUALIFIERS int __attribute__((unused)) uni_bogus32le_iput (t_uchar * str, size_t * pos, size_t len, t_unicode c); extern UNI_INLINE_QUALIFIERS int __attribute__((unused)) uni_bogus32be_iput (t_uchar * str, size_t * pos, size_t len, t_unicode c); extern UNI_INLINE_QUALIFIERS int __attribute__((unused)) uni_bogus32_iput (t_uchar * str, size_t * pos, size_t len, t_unicode c); extern UNI_INLINE_QUALIFIERS int __attribute__((unused)) uni_iso8859_1_put (t_uchar * str, size_t * pos, size_t len, t_unicode c); extern UNI_INLINE_QUALIFIERS int __attribute__((unused)) uni_utf8_put (t_uchar * str, size_t * pos, size_t len, t_unicode c); extern UNI_INLINE_QUALIFIERS int __attribute__((unused)) uni_utf16_put (t_uint16 * str, size_t * pos16, size_t len16, t_unicode c); extern UNI_INLINE_QUALIFIERS int __attribute__((unused)) uni_utf32_put (t_uint32 * str, size_t * pos32, size_t len32, t_unicode c); extern UNI_INLINE_QUALIFIERS int __attribute__((unused)) uni_bogus32_put (t_uint32 * str, size_t * pos32, size_t len32, t_unicode c); #endif /* INCLUDE__UNI__CODING_INLINES_H */ tla-1.3.5+dfsg/src/hackerlab/uni/Makefile.in0000644000175000017500000000027210457621774017316 0ustar useruser include $(makefiles)/library-objects.mk ifeq ($(cgs__install_hackerlab),1) include $(makefiles)/install-includes.mk endif # tag: Tom Lord Tue Dec 4 14:52:23 2001 (uni/Makefile.in) # tla-1.3.5+dfsg/src/hackerlab/uni/coding.h0000644000175000017500000000405510457621774016670 0ustar useruser/* coding.h - coding system conversions * **************************************************************** * Copyright (C) 2000, 2004 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__UNI__CODING_H #define INCLUDE__UNI__CODING_H #include "hackerlab/machine/types.h" #define UNI_ENCODING_SCHEMES \ UNI_ENCODING (iso8859_1, 1, 1, 256) /* must be first */ \ UNI_ENCODING (utf8, 1, 1, (1 << 21)) \ UNI_ENCODING (utf16, 2, 2, (1 << 21)) \ UNI_ENCODING (utf16be, 2, 1, (1 << 21)) \ UNI_ENCODING (utf16le, 2, 1, (1 << 21)) \ UNI_ENCODING (utf32, 4, 4, (1 << 21)) \ UNI_ENCODING (utf32le, 4, 1, (1 << 21)) \ UNI_ENCODING (utf32be, 4, 1, (1 << 21)) \ UNI_ENCODING (bogus32, 4, 4, (1 << 23)) \ UNI_ENCODING (bogus32le, 4, 1, (1 << 23)) \ UNI_ENCODING (bogus32be, 4, 1, (1 << 23)) enum uni_encoding_scheme { #undef UNI_ENCODING #define UNI_ENCODING(NAME, WIDTH, SCANNER_WIDTH, CSET_SIZE) uni_ ## NAME, UNI_ENCODING_SCHEMES }; #define UNI_ENCODING_PAIR(a,b) (((a)<<4) | (b)) #define UNI_SCAN_INPUT_TRUNCATED ((t_unicode)1 << 23) typedef t_unicode (*uni_iscan_fn)(t_uchar * str, size_t * pos, size_t len); typedef int (*uni_iput_fn)(t_uchar * str, size_t * pos, size_t len, t_unicode c); #if defined(__GNUC__) && (defined(UNI_CODING_INLINES) || defined(UNI_INLINES)) #undef UNI_INLINE_QUALIFIERS #define UNI_INLINE_QUALIFIERS static inline #include "hackerlab/uni/coding-inlines.c" #else #undef UNI_INLINE_QUALIFIERS #include "hackerlab/uni/coding-inlines.h" #endif /* automatically generated __STDC__ prototypes */ extern uni_iscan_fn uni_encoding_iscan_fn (enum uni_encoding_scheme encoding); extern uni_iput_fn uni_encoding_iput_fn (enum uni_encoding_scheme encoding); #endif /* INCLUDE__UNI__CODING_H */ tla-1.3.5+dfsg/src/hackerlab/uni/PLUGIN/0000755000175000017500000000000010457621774016246 5ustar userusertla-1.3.5+dfsg/src/hackerlab/uni/PLUGIN/REQ0000644000175000017500000000002610457621774016616 0ustar userusermem uni uni libboot tla-1.3.5+dfsg/src/hackerlab/uni/coding.c0000644000175000017500000000375310457621774016667 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:41:36 2001 (coding.c) */ /* coding.c - * **************************************************************** * Copyright (C) 2000, 2004 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #define UNI_CODING_INLINES #include #include "hackerlab/machine/types.h" #include "hackerlab/machine/endian.h" #include "hackerlab/bugs/panic.h" #include "hackerlab/uni/coding.h" uni_iscan_fn uni_encoding_iscan_fn (enum uni_encoding_scheme encoding) { switch (encoding) { case uni_iso8859_1: return uni_iso8859_1_iscan; case uni_utf8: return uni_utf8_iscan; case uni_utf16: return uni_utf16_iscan; case uni_utf16be: return uni_utf16be_iscan; case uni_utf16le: return uni_utf16le_iscan; case uni_utf32: return uni_utf32_iscan; case uni_utf32le: return uni_utf32le_iscan; case uni_utf32be: return uni_utf32be_iscan; case uni_bogus32: return uni_bogus32_iscan; case uni_bogus32le: return uni_bogus32le_iscan; case uni_bogus32be: return uni_bogus32be_iscan; } while (1) panic ("not reached in uni_encoding_iscan_fn"); } uni_iput_fn uni_encoding_iput_fn (enum uni_encoding_scheme encoding) { switch (encoding) { case uni_iso8859_1: return uni_iso8859_1_iput; case uni_utf8: return uni_utf8_iput; case uni_utf16: return uni_utf16_iput; case uni_utf16be: return uni_utf16be_iput; case uni_utf16le: return uni_utf16le_iput; case uni_utf32: return uni_utf32_iput; case uni_utf32le: return uni_utf32le_iput; case uni_utf32be: return uni_utf32be_iput; case uni_bogus32: return uni_bogus32_iput; case uni_bogus32be: return uni_bogus32be_iput; case uni_bogus32le: return uni_bogus32le_iput; } while (1) panic ("not reached in uni_encoding_iput_fn"); } tla-1.3.5+dfsg/src/hackerlab/uni/unidata.c0000644000175000017500000001105310457621774017041 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:41:37 2001 (unidata.c) */ /* unidata.c - * **************************************************************** * Copyright (C) 2000 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/char/str.h" #include "hackerlab/uni/unidata.h" /*(c uni_bidi_category) * enum uni_bidi_categories; * * An enumeration of the bi-directional classifications of * of Unicode characters. * * (See the *Unicode 3.0* specification for more information * on the meaning of these categories.) * * Each category name is formed by prefixing `uni_bidi_' to * a category name (`L', `LRE', etc.): * * uni_bidi_L * uni_bidi_LRE * etc. * * The macro `UNI_BIDI_CATEGORIES' may also be handy: * */ #undef UNI_BIDI_CATEGORY #define UNI_BIDI_CATEGORY(n,ign) { #n, uni_bidi_ ## n }, const struct uni_bidi_category_name uni_bidi_category_names[] = { UNI_BIDI_CATEGORIES {0, 0} }; const int n_uni_bidi_categories = sizeof (uni_bidi_category_names) / sizeof (struct uni_bidi_category_name); /*(c uni_bidi_category_lookup_n) * int uni_bidi_category_lookup_n (t_uchar * name, size_t len); * * Given the name of a bidirectional category (e.g. "l"), return the * corresponding `enum uni_bidi_category'. If `name' is not valid, * return -1. * * `name' -- the bidi category name to look up. * `len' -- the length of `name' in bytes. */ int uni_bidi_category_lookup_n (t_uchar * name, size_t len) { int x; for (x = 0; x < n_uni_bidi_categories; ++x) { if (!str_casecmp_n (uni_bidi_category_names[x].name, str_length (uni_bidi_category_names[x].name), name, len)) return uni_bidi_category_names[x].category; } return -1; } /*(c uni_bidi_category_lookup) * int uni_bidi_category_lookup (t_uchar * name); * * Given the name of a bidirectional category (e.g. "l"), return the * corresponding `enum uni_bidi_category'. IF `name' is not valid, * return -1. * * `name' -- the bidi category name to look up (0-terminated). */ int uni_bidi_category_lookup (t_uchar * name) { return uni_bidi_category_lookup_n (name, str_length (name)); } const struct uni_general_category_name uni_general_category_names[] = { #define UNI_GENERAL_CATEGORY_NAME(NAME, ALT_NAME, DESC) \ { #NAME, uni_general_category_##NAME }, #define UNI_SYNTH_CATEGORY_NAME(NAME, ALT_NAME, DESC) \ { #NAME, uni_general_category_##NAME }, UNI_GENERAL_CATEGORIES_LIST(_NAME) UNI_SYNTHETIC_CATEGORIES_LIST(_NAME) {0, 0} }; const enum uni_general_category uni_first_synthetic_category = uni_general_category_L; const int uni_n_categories = (uni_general_category_symbol + 1); int uni_general_category_lookup_n (t_uchar * name, size_t len) { int x; for (x = 0; uni_general_category_names[x].name; ++x) if (!str_casecmp_n (name, len, uni_general_category_names[x].name, str_length (uni_general_category_names[x].name))) return uni_general_category_names[x].category; return -1; } int uni_general_category_lookup (t_uchar * name) { return uni_general_category_lookup_n (name, str_length (name)); } #undef UNI_DECOMPOSITION_TYPE #define UNI_DECOMPOSITION_TYPE(n) { #n, uni_decomposition_ ## n }, const struct uni_decomposition_type_name uni_decomposition_type_names[] = { UNI_DECOMPOSITION_TYPES {0, 0} }; const int n_uni_decomposition_types = sizeof (uni_decomposition_type_names) / sizeof (struct uni_decomposition_type_name); /*(c uni_decomposition_type_lookup_n) * int uni_decomposition_type_lookup_n (t_uchar * name, size_t len); * * Given the name of a decomposition mapping type (e.g. "font"), return the * corresponding `enum uni_decomposition_type'. If `name' is not valid, * return -1. * * `name' -- the bidi category name to look up. * `len' -- the length of `name' in bytes. */ int uni_decomposition_type_lookup_n (t_uchar * name, size_t len) { int x; for (x = 0; x < n_uni_bidi_categories; ++x) { if (!str_casecmp_n (uni_decomposition_type_names[x].name, str_length (uni_decomposition_type_names[x].name), name, len)) return uni_decomposition_type_names[x].category; } return -1; } /*(c uni_decomposition_type_lookup) * int uni_decomposition_type_lookup (t_uchar * name); * * Given the name of a bidirectional category (e.g. "l"), return the * corresponding `enum uni_decomposition_type'. If `name' is not valid, * return -1. * * `name' -- the bidi category name to look up (0-terminated). */ int uni_decomposition_type_lookup (t_uchar * name) { return uni_decomposition_type_lookup_n (name, str_length (name)); } tla-1.3.5+dfsg/src/hackerlab/uni/invariant.h0000644000175000017500000000113110457621774017410 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:41:37 2001 (invariant.h) */ /* invariant.h - * **************************************************************** * Copyright (C) 2000 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__UNI__INVARIANT_H #define INCLUDE__UNI__INVARIANT_H #include "hackerlab/bugs/panic.h" #ifdef UNI_DANGEROUSLY #define uni_invariant(EXP) #else #define uni_invariant(EXP) invariant(EXP) #endif /* automatically generated __STDC__ prototypes */ #endif /* INCLUDE__UNI__INVARIANT_H */ tla-1.3.5+dfsg/src/hackerlab/uni/unidata.h0000644000175000017500000001551510457621774017055 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:41:36 2001 (unidata.h) */ /* unidata.h - * **************************************************************** * Copyright (C) 2000 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__UNI__UNIDATA_H #define INCLUDE__UNI__UNIDATA_H #include "hackerlab/machine/types.h" #define UNI_BIDI_CATEGORIES \ UNI_BIDI_CATEGORY(L, "Left-to-Right") \ UNI_BIDI_CATEGORY(LRE, "Left-to-Right Embedding") \ UNI_BIDI_CATEGORY(LRO, "Left-to-Right Override") \ UNI_BIDI_CATEGORY(R, "Right-to-Left") \ UNI_BIDI_CATEGORY(AL, "Right-to-Left Arabic") \ UNI_BIDI_CATEGORY(RLE, "Right-to-Left Embedding") \ UNI_BIDI_CATEGORY(RLO, "Right-to-Left Override") \ UNI_BIDI_CATEGORY(PDF, "Pop Directional Format") \ UNI_BIDI_CATEGORY(EN, "European Number") \ UNI_BIDI_CATEGORY(ES, "European Number Separator") \ UNI_BIDI_CATEGORY(ET, "European Number Terminator") \ UNI_BIDI_CATEGORY(AN, "Arabic Number") \ UNI_BIDI_CATEGORY(CS, "Common Number Separator") \ UNI_BIDI_CATEGORY(NSM, "Non-Spacing Mark") \ UNI_BIDI_CATEGORY(BN, "Boundary Neutral") \ UNI_BIDI_CATEGORY(B, "Paragraph Separator") \ UNI_BIDI_CATEGORY(S, "Segment Separator") \ UNI_BIDI_CATEGORY(WS, "Whitspace") \ UNI_BIDI_CATEGORY(ON, "Other Neutrals") enum uni_bidi_category { #undef UNI_BIDI_CATEGORY #define UNI_BIDI_CATEGORY(NAME, IGN) uni_bidi_ ## NAME, UNI_BIDI_CATEGORIES }; struct uni_bidi_category_name { t_uchar * name; enum uni_bidi_category category; }; extern const struct uni_bidi_category_name uni_bidi_category_names[]; extern const int n_uni_bidi_categories; #define UNI_GENERAL_CATEGORIES_LIST(MACRO) \ UNI_GENERAL_CATEGORY##MACRO (Lu, letter_uppercase, "Letter, uppercase") \ UNI_GENERAL_CATEGORY##MACRO (Ll, letter_lowercase, "Letter, lowercase") \ UNI_GENERAL_CATEGORY##MACRO (Lt, letter_titlecase, "Letter, titlecase") \ UNI_GENERAL_CATEGORY##MACRO (Lm, letter_modifier, "Letter, modifier") \ UNI_GENERAL_CATEGORY##MACRO (Lo, letter_other, "Letter, other") \ \ UNI_GENERAL_CATEGORY##MACRO (Mn, mark_nonspacing, "Mark, nonspacing") \ UNI_GENERAL_CATEGORY##MACRO (Mc, mark_spacing_combining, "Mark, spacing combining") \ UNI_GENERAL_CATEGORY##MACRO (Me, mark_enclosing, "Mark, enclosing") \ \ UNI_GENERAL_CATEGORY##MACRO (Nd, number_decimal_digit, "Number, decimal digit") \ UNI_GENERAL_CATEGORY##MACRO (Nl, number_letter, "Number, letter") \ UNI_GENERAL_CATEGORY##MACRO (No, number_other, "Number, other") \ \ UNI_GENERAL_CATEGORY##MACRO (Zs, separator_space, "Separator, space") \ UNI_GENERAL_CATEGORY##MACRO (Zl, separator_line, "Separator, line") \ UNI_GENERAL_CATEGORY##MACRO (Zp, separator_paragraph, "Separator, paragraph") \ \ UNI_GENERAL_CATEGORY##MACRO (Cc, other_control, "Other, control") \ UNI_GENERAL_CATEGORY##MACRO (Cf, other_format, "Other, format") \ UNI_GENERAL_CATEGORY##MACRO (Cs, other_surrogate, "Other, surrogate") \ UNI_GENERAL_CATEGORY##MACRO (Co, other_private_use, "Other, private use") \ UNI_GENERAL_CATEGORY##MACRO (Cn, other_not_assigned, "Other, not assigned") \ \ UNI_GENERAL_CATEGORY##MACRO (Pc, punctuation_connector, "Punctuation, connector") \ UNI_GENERAL_CATEGORY##MACRO (Pd, punctuation_dash, "Punctuation, dash") \ UNI_GENERAL_CATEGORY##MACRO (Ps, punctuation_open, "Punctuation, open") \ UNI_GENERAL_CATEGORY##MACRO (Pe, punctuation_close, "Punctuation, close") \ UNI_GENERAL_CATEGORY##MACRO (Pi, punctuation_initial_quote, "Punctuation, initial quote") \ UNI_GENERAL_CATEGORY##MACRO (Pf, punctuation_final_quote, "Punctuation, final quote") \ UNI_GENERAL_CATEGORY##MACRO (Po, punctuation_other, "Punctuation, other") \ \ UNI_GENERAL_CATEGORY##MACRO (Sm, symbol_math, "Symbol, math") \ UNI_GENERAL_CATEGORY##MACRO (Sc, symbol_currency, "Symbol, currency") \ UNI_GENERAL_CATEGORY##MACRO (Sk, symbol_modifier, "Symbol, modifier") \ UNI_GENERAL_CATEGORY##MACRO (So, symbol_other, "Symbol, other") #define UNI_SYNTHETIC_CATEGORIES_LIST(MACRO) \ UNI_SYNTH_CATEGORY##MACRO (L, letter, "Letter") \ UNI_SYNTH_CATEGORY##MACRO (M, mark, "Mark") \ UNI_SYNTH_CATEGORY##MACRO (N, number, "Number") \ UNI_SYNTH_CATEGORY##MACRO (Z, separator, "Separator") \ UNI_SYNTH_CATEGORY##MACRO (C, other, "Other") \ UNI_SYNTH_CATEGORY##MACRO (P, punctuation, "Punctuation") \ UNI_SYNTH_CATEGORY##MACRO (S, symbol, "Symbol") enum uni_general_category { #define UNI_GENERAL_CATEGORY_ENUM(NAME, ALT_NAME, DESC) \ uni_general_category_##NAME, uni_general_category_##ALT_NAME = uni_general_category_##NAME, #define UNI_SYNTH_CATEGORY_ENUM(NAME, ALT_NAME, DESC) \ uni_general_category_##NAME, uni_general_category_##ALT_NAME = uni_general_category_##NAME, UNI_GENERAL_CATEGORIES_LIST(_ENUM) UNI_SYNTHETIC_CATEGORIES_LIST(_ENUM) }; struct uni_general_category_name { t_uchar * name; enum uni_general_category category; }; extern const struct uni_general_category_name uni_general_category_names[]; extern const enum uni_general_category uni_first_synthetic_category; extern const int uni_n_categories; typedef t_uchar uni_canonical_combining_class; struct uni_numeric_value { t_uint numerator; t_uint denominator; }; #define UNI_DECOMPOSITION_TYPES \ UNI_DECOMPOSITION_TYPE(none) \ UNI_DECOMPOSITION_TYPE(canonical) \ UNI_DECOMPOSITION_TYPE(font) \ UNI_DECOMPOSITION_TYPE(noBreak) \ UNI_DECOMPOSITION_TYPE(initial) \ UNI_DECOMPOSITION_TYPE(medial) \ UNI_DECOMPOSITION_TYPE(final) \ UNI_DECOMPOSITION_TYPE(isolated) \ UNI_DECOMPOSITION_TYPE(circle) \ UNI_DECOMPOSITION_TYPE(super) \ UNI_DECOMPOSITION_TYPE(sub) \ UNI_DECOMPOSITION_TYPE(vertical) \ UNI_DECOMPOSITION_TYPE(wide) \ UNI_DECOMPOSITION_TYPE(narrow) \ UNI_DECOMPOSITION_TYPE(small) \ UNI_DECOMPOSITION_TYPE(square) \ UNI_DECOMPOSITION_TYPE(fraction) \ UNI_DECOMPOSITION_TYPE(compat) enum uni_decomposition_type { #undef UNI_DECOMPOSITION_TYPE #define UNI_DECOMPOSITION_TYPE(NAME) \ uni_decomposition_ ## NAME, UNI_DECOMPOSITION_TYPES }; struct uni_decomposition_mapping { enum uni_decomposition_type type; t_unicode * decomposition; }; struct uni_decomposition_type_name { t_uchar * name; enum uni_decomposition_type category; }; extern const struct uni_decomposition_type_name uni_decomposition_type_names[]; extern const int n_uni_decomposition_types; struct uni_case_mapping { t_unicode upper; t_unicode lower; t_unicode title; }; /* automatically generated __STDC__ prototypes */ extern int uni_bidi_category_lookup_n (t_uchar * name, size_t len); extern int uni_bidi_category_lookup (t_uchar * name); extern int uni_general_category_lookup_n (t_uchar * name, size_t len); extern int uni_general_category_lookup (t_uchar * name); extern int uni_decomposition_type_lookup_n (t_uchar * name, size_t len); extern int uni_decomposition_type_lookup (t_uchar * name); #endif /* INCLUDE__UNI__UNIDATA_H */ tla-1.3.5+dfsg/src/hackerlab/xml-scaffolding/0000755000175000017500000000000010457621774017532 5ustar userusertla-1.3.5+dfsg/src/hackerlab/xml-scaffolding/xml-generate.c0000644000175000017500000002102410457621774022265 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:41:49 2001 (xml-generate.c) */ /* xml-generate.c - * **************************************************************** * Copyright (C) 2000 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/bitsets/bits.h" #include "hackerlab/bitsets/uni-bits.h" #include "hackerlab/bitsets/bits-print.h" #include "hackerlab/cmd/main.h" struct char_range { int from; int to; }; struct char_range ideographic_chars[] = { {0x4E00, 0x9FA5}, {0x3007, 0x3007}, {0x3021, 0x3029}, {0, 0} }; struct char_range extender_chars[] = { {0x00B7, 0x02D0}, {0x02D1, 0x0387}, {0x0640, 0x0640}, {0x0E46, 0x0E46}, {0x0EC6, 0x0EC6}, {0x3005, 0x3005}, {0x3031, 0x3035}, {0x309D, 0x309E}, {0x30FC, 0x30FE}, {0, 0} }; struct char_range digit_chars[] = { {0x0030, 0x0039}, {0x0660, 0x0669}, {0x06F0, 0x06F9}, {0x0966, 0x096F}, {0x09E6, 0x09EF}, {0x0A66, 0x0A6F}, {0x0AE6, 0x0AEF}, {0x0B66, 0x0B6F}, {0x0BE7, 0x0BEF}, {0x0C66, 0x0C6F}, {0x0CE6, 0x0CEF}, {0x0D66, 0x0D6F}, {0x0E50, 0x0E59}, {0x0ED0, 0x0ED9}, {0x0F20, 0x0F29}, {0, 0} }; struct char_range base_chars[] = { {0x0041, 0x005A}, {0x0061, 0x007A}, {0x00C0, 0x00D6}, {0x00D8, 0x00F6}, {0x00F8, 0x00FF}, {0x0100, 0x0131}, {0x0134, 0x013E}, {0x0141, 0x0148}, {0x014A, 0x017E}, {0x0180, 0x01C3}, {0x01CD, 0x01F0}, {0x01F4, 0x01F5}, {0x01FA, 0x0217}, {0x0250, 0x02A8}, {0x02BB, 0x02C1}, {0x0386, 0x0386}, {0x0388, 0x038A}, {0x038C, 0x038C}, {0x038E, 0x03A1}, {0x03A3, 0x03CE}, {0x03D0, 0x03D6}, {0x03DA, 0x03DA}, {0x03DC, 0x0000}, {0x03DE, 0x0000}, {0x03E0, 0x03E0}, {0x03E2, 0x03F3}, {0x0401, 0x040C}, {0x040E, 0x044F}, {0x0451, 0x045C}, {0x045E, 0x0481}, {0x0490, 0x04C4}, {0x04C7, 0x04C8}, {0x04CB, 0x04CC}, {0x04D0, 0x04EB}, {0x04EE, 0x04F5}, {0x04F8, 0x04F9}, {0x0531, 0x0556}, {0x0559, 0x0559}, {0x0561, 0x0586}, {0x05D0, 0x05EA}, {0x05F0, 0x05F2}, {0x0621, 0x063A}, {0x0641, 0x064A}, {0x0671, 0x06B7}, {0x06BA, 0x06BE}, {0x06C0, 0x06CE}, {0x06D0, 0x06D3}, {0x06D5, 0x06D5}, {0x06E5, 0x06E6}, {0x0905, 0x0939}, {0x093D, 0x093D}, {0x0958, 0x0961}, {0x0985, 0x098C}, {0x098F, 0x0990}, {0x0993, 0x09A8}, {0x09AA, 0x09B0}, {0x09B2, 0x09B2}, {0x09B6, 0x09B9}, {0x09DC, 0x09DD}, {0x09DF, 0x09E1}, {0x09F0, 0x09F1}, {0x0A05, 0x0A0A}, {0x0A0F, 0x0A10}, {0x0A13, 0x0A28}, {0x0A2A, 0x0A30}, {0x0A32, 0x0A33}, {0x0A35, 0x0A36}, {0x0A38, 0x0A39}, {0x0A59, 0x0A5C}, {0x0A5E, 0x0A5E}, {0x0A72, 0x0A74}, {0x0A85, 0x0A8B}, {0x0A8D, 0x0A8D}, {0x0A8F, 0x0A91}, {0x0A93, 0x0AA8}, {0x0AAA, 0x0AB0}, {0x0AB2, 0x0AB3}, {0x0AB5, 0x0AB9}, {0x0ABD, 0x0ABD}, {0x0AE0, 0x0000}, {0x0B05, 0x0B0C}, {0x0B0F, 0x0B10}, {0x0B13, 0x0B28}, {0x0B2A, 0x0B30}, {0x0B32, 0x0B33}, {0x0B36, 0x0B39}, {0x0B3D, 0x0B3D}, {0x0B5C, 0x0B5D}, {0x0B5F, 0x0B61}, {0x0B85, 0x0B8A}, {0x0B8E, 0x0B90}, {0x0B92, 0x0B95}, {0x0B99, 0x0B9A}, {0x0B9C, 0x0B9C}, {0x0B9E, 0x0B9F}, {0x0BA3, 0x0BA4}, {0x0BA8, 0x0BAA}, {0x0BAE, 0x0BB5}, {0x0BB7, 0x0BB9}, {0x0C05, 0x0C0C}, {0x0C0E, 0x0C10}, {0x0C12, 0x0C28}, {0x0C2A, 0x0C33}, {0x0C35, 0x0C39}, {0x0C60, 0x0C61}, {0x0C85, 0x0C8C}, {0x0C8E, 0x0C90}, {0x0C92, 0x0CA8}, {0x0CAA, 0x0CB3}, {0x0CB5, 0x0CB9}, {0x0CDE, 0x0CDE}, {0x0CE0, 0x0CE1}, {0x0D05, 0x0D0C}, {0x0D0E, 0x0D10}, {0x0D12, 0x0D28}, {0x0D2A, 0x0D39}, {0x0D60, 0x0D61}, {0x0E01, 0x0E2E}, {0x0E30, 0x0E30}, {0x0E32, 0x0E33}, {0x0E40, 0x0E45}, {0x0E81, 0x0E82}, {0x0E84, 0x0E84}, {0x0E87, 0x0E88}, {0x0E8A, 0x0E8A}, {0x0E8D, 0x0000}, {0x0E94, 0x0E97}, {0x0E99, 0x0E9F}, {0x0EA1, 0x0EA3}, {0x0EA5, 0x0EA5}, {0x0EA7, 0x0000}, {0x0EAA, 0x0EAB}, {0x0EAD, 0x0EAE}, {0x0EB0, 0x0EB0}, {0x0EB2, 0x0EB3}, {0x0EBD, 0x0000}, {0x0EC0, 0x0EC4}, {0x0F40, 0x0F47}, {0x0F49, 0x0F69}, {0x10A0, 0x10C5}, {0x10D0, 0x10F6}, {0x1100, 0x1100}, {0x1102, 0x1103}, {0x1105, 0x1107}, {0x1109, 0x1109}, {0x110B, 0x110C}, {0x110E, 0x1112}, {0x113C, 0x0000}, {0x113E, 0x113E}, {0x1140, 0x0000}, {0x114C, 0x0000}, {0x114E, 0x0000}, {0x1150, 0x1150}, {0x1154, 0x1155}, {0x1159, 0x0000}, {0x115F, 0x1161}, {0x1163, 0x1163}, {0x1165, 0x0000}, {0x1167, 0x0000}, {0x1169, 0x0000}, {0x116D, 0x116E}, {0x1172, 0x1173}, {0x1175, 0x1175}, {0x119E, 0x0000}, {0x11A8, 0x11A8}, {0x11AB, 0x0000}, {0x11AE, 0x11AF}, {0x11B7, 0x11B8}, {0x11BA, 0x11BA}, {0x11BC, 0x11C2}, {0x11EB, 0x0000}, {0x11F0, 0x0000}, {0x11F9, 0x11F9}, {0x1E00, 0x1E9B}, {0x1EA0, 0x1EF9}, {0x1F00, 0x1F15}, {0x1F18, 0x1F1D}, {0x1F20, 0x1F45}, {0x1F48, 0x1F4D}, {0x1F50, 0x1F57}, {0x1F59, 0x1F59}, {0x1F5B, 0x0000}, {0x1F5D, 0x0000}, {0x1F5F, 0x1F7D}, {0x1F80, 0x1FB4}, {0x1FB6, 0x1FBC}, {0x1FBE, 0x1FBE}, {0x1FC2, 0x1FC4}, {0x1FC6, 0x1FCC}, {0x1FD0, 0x1FD3}, {0x1FD6, 0x1FDB}, {0x1FE0, 0x1FEC}, {0x1FF2, 0x1FF4}, {0x1FF6, 0x1FFC}, {0x2126, 0x2126}, {0x212A, 0x212B}, {0x212E, 0x212E}, {0x2180, 0x2182}, {0x3041, 0x3094}, {0x30A1, 0x30FA}, {0x3105, 0x312C}, {0xAC00, 0xD7A3}, {0, 0} }; struct char_range combining_chars[] = { {0x0300, 0x0345}, {0x0360, 0x0361}, {0x0483, 0x0486}, {0x0591, 0x05A1}, {0x05A3, 0x05B9}, {0x05BB, 0x05BD}, {0x05BF, 0x05BF}, {0x05C1, 0x05C2}, {0x05C4, 0x05C4}, {0x064B, 0x0652}, {0x0670, 0x0670}, {0x06D6, 0x06DC}, {0x06DD, 0x06DF}, {0x06E0, 0x06E4}, {0x06E7, 0x06E8}, {0x06EA, 0x06ED}, {0x0901, 0x0903}, {0x093C, 0x093C}, {0x093E, 0x094C}, {0x094D, 0x094D}, {0x0951, 0x0954}, {0x0962, 0x0963}, {0x0981, 0x0983}, {0x09BC, 0x09BC}, {0x09BE, 0x09BE}, {0x09BF, 0x09BF}, {0x09C0, 0x09C4}, {0x09C7, 0x09C8}, {0x09CB, 0x09CD}, {0x09D7, 0x09D7}, {0x09E2, 0x09E3}, {0x0A02, 0x0A02}, {0x0A3C, 0x0A3C}, {0x0A3E, 0x0A3E}, {0x0A3F, 0x0A3F}, {0x0A40, 0x0A42}, {0x0A47, 0x0A48}, {0x0A4B, 0x0A4D}, {0x0A70, 0x0A71}, {0x0A81, 0x0A83}, {0x0ABC, 0x0ABC}, {0x0ABE, 0x0AC5}, {0x0AC7, 0x0AC9}, {0x0ACB, 0x0ACD}, {0x0B01, 0x0B03}, {0x0B3C, 0x0B3C}, {0x0B3E, 0x0B43}, {0x0B47, 0x0B48}, {0x0B4B, 0x0B4D}, {0x0B56, 0x0B57}, {0x0B82, 0x0B83}, {0x0BBE, 0x0BC2}, {0x0BC6, 0x0BC8}, {0x0BCA, 0x0BCD}, {0x0BD7, 0x0BD7}, {0x0C01, 0x0C03}, {0x0C3E, 0x0C44}, {0x0C46, 0x0C48}, {0x0C4A, 0x0C4D}, {0x0C55, 0x0C56}, {0x0C82, 0x0C83}, {0x0CBE, 0x0CC4}, {0x0CC6, 0x0CC8}, {0x0CCA, 0x0CCD}, {0x0CD5, 0x0CD6}, {0x0D02, 0x0D03}, {0x0D3E, 0x0D43}, {0x0D46, 0x0D48}, {0x0D4A, 0x0D4D}, {0x0D57, 0x0D57}, {0x0E31, 0x0E31}, {0x0E34, 0x0E3A}, {0x0E47, 0x0E4E}, {0x0EB1, 0x0EB1}, {0x0EB4, 0x0EB9}, {0x0EBB, 0x0EBC}, {0x0EC8, 0x0ECD}, {0x0F18, 0x0F19}, {0x0F35, 0x0F35}, {0x0F37, 0x0F37}, {0x0F39, 0x0F39}, {0x0F3E, 0x0F3E}, {0x0F3F, 0x0F3F}, {0x0F71, 0x0F84}, {0x0F86, 0x0F8B}, {0x0F90, 0x0F95}, {0x0F97, 0x0F97}, {0x0F99, 0x0FAD}, {0x0FB1, 0x0FB7}, {0x0FB9, 0x0FB9}, {0x20D0, 0x20DC}, {0x20E1, 0x20E1}, {0x302A, 0x302F}, {0x3099, 0x3099}, {0x309A, 0x309A}, {0, 0} }; bits make_set (struct char_range * r) { int x; bits s; s = bits_alloc (lim_use_must_malloc, uni_bits_tree_rule); for (x = 0; r[x].from; ++x) { bits_fill_range (s, r[x].from, r[x].to); } return s; } int main (int argc, char * argv[]) { bits xml_charset; int cset_fd; cset_fd = safe_open ("charsets.c", O_WRONLY | O_CREAT, 0644); xml_charset = bits_alloc (lim_use_must_malloc, uni_bits_tree_rule); safe_printfmt (cset_fd, "/* automatically generated */\n"); safe_printfmt (cset_fd, "\n"); safe_printfmt (cset_fd, "#include \"hackerlab/xml/charsets.h\"\n"); safe_printfmt (cset_fd, "\n\n\f\n\n"); bits_adjoin (xml_charset, 0x09); bits_adjoin (xml_charset, 0x0a); bits_adjoin (xml_charset, 0x0d); bits_fill_range (xml_charset, 0x20, 0xd800); bits_fill_range (xml_charset, 0xe0000, 0xfffe); bits_fill_range (xml_charset, 0x10000, 0x110000); bits_print (cset_fd, xml_charset, "xml_charset", "xc", 0, 0, 0); bits_clear (xml_charset); bits_adjoin (xml_charset, '.'); bits_adjoin (xml_charset, '\\'); bits_adjoin (xml_charset, '|'); bits_adjoin (xml_charset, '?'); bits_adjoin (xml_charset, '*'); bits_adjoin (xml_charset, '+'); bits_adjoin (xml_charset, '{'); bits_adjoin (xml_charset, '}'); bits_adjoin (xml_charset, '('); bits_adjoin (xml_charset, ')'); bits_adjoin (xml_charset, '['); bits_adjoin (xml_charset, ']'); bits_print (cset_fd, xml_charset, "xml_re_meta_charset", "x_mc", 0, 0, 0); bits_print (cset_fd, make_set (base_chars), "xml_base_charset", "x_bas", 0, 0, 0); bits_print (cset_fd, make_set (ideographic_chars), "xml_ideographic_charset", "x_id", 0, 0, 0); bits_print (cset_fd, make_set (combining_chars), "xml_combining_charset", "x_com", 0, 0, 0); bits_print (cset_fd, make_set (digit_chars), "xml_digit_charset", "x_dig", 0, 0, 0); bits_print (cset_fd, make_set (extender_chars), "xml_extender_charset", "x_ext", 0, 0, 0); return 0; } tla-1.3.5+dfsg/src/hackerlab/xml-scaffolding/Makefile.in0000644000175000017500000000027610457621774021604 0ustar useruser libs := $(objroot)/hackerlab/libboot2/libboot2.a -lm mains := xml-generate.c include $(makefiles)/programs.mk # tag: Tom Lord Tue Dec 4 14:52:15 2001 (xml-scaffolding/Makefile.in) # tla-1.3.5+dfsg/src/hackerlab/xml-scaffolding/PLUGIN/0000755000175000017500000000000010457621774020530 5ustar userusertla-1.3.5+dfsg/src/hackerlab/xml-scaffolding/PLUGIN/REQ0000644000175000017500000000007010457621774021077 0ustar useruserlibboot2 xml-scaffolding xml-scaffolding libhackerlab tla-1.3.5+dfsg/src/hackerlab/vu-network/0000755000175000017500000000000010457621774016576 5ustar userusertla-1.3.5+dfsg/src/hackerlab/vu-network/url-socket.c0000644000175000017500000016467110457621774021051 0ustar useruser/* url-socket.c - File namespace extensions. * **************************************************************** * Copyright (C) 1999, 2000 Thomas Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/os/alloca.h" #include "hackerlab/os/errno.h" #include "hackerlab/os/sys/param.h" #include "hackerlab/os/sys/socket.h" #include "hackerlab/bugs/panic.h" #include "hackerlab/char/char-class.h" #include "hackerlab/char/str.h" #include "hackerlab/mem/mem.h" #include "hackerlab/mem/must-malloc.h" #include "hackerlab/arrays/ar.h" #include "hackerlab/fmt/cvt.h" #include "hackerlab/fs/file-names.h" #include "hackerlab/vu/vu-sys.h" #include "hackerlab/vu/vu-bad-arg.h" #include "hackerlab/vu-network/url-socket.h" /************************************************************************ *(h0 "A VU Handler for the URL Socket Scheme") * * These functions provide VU namespace handlers for file-names * that designate various kinds of sockets. By using these handlers, * your programs can (almost) transparently handle filenames * like: * * inet://myserver.host.com:10000 * * or * * unix:/tmp/.X11-unix/X0 * * Two kinds of sockets are available: *server* sockets and *client* * sockets. * * "server sockets" are created with `socket(2)', `bind(2)', and * `listen(2)'. When `vu_open' is called, a call to `listen(2)' is * made and the client connection (if any) is returned. * * "client sockets" are created with `socket(2)', `bind(2)', and * `connect(2)'. * * Sockets may be named in either the `unix' or `inet' domains. * * The syntax of these URLs is described in the documentation for * `url_socket_push_client_handler' and * `url_socket_push_socket_handler'. */ /* struct url_socket_params * * The closure type for every file name pattern than can open a socket * URL. A pointer to one of these structures is used as the closure * when calling `vu_push_name_handler'. * * These closures are copied by must_malloc/mem_move. */ struct url_socket_params { enum url_socket_type type; /* What type of socket (server, client, both) is opened by this file name pattern? */ enum url_socket_domains domains; /* What domain (unix, inet, both) is opened by this file name pattern? */ int server_flags; /* How was the server opened? (O_NONBLOCK, etc.) */ int default_port; /* If the port isn't specified in the file name, this is the default. */ int backlog; /* For listen(2). */ url_socket_server_callback server_callback; /* Called back when a new server socket is created and bound. */ url_socket_connect_callback connection_callback; /* Called when a server socket receives a new connection. */ url_socket_server_close_callback server_close_callback; /* Called when a server socket is closed. */ void * closure; /* A closure for the two callbacks. */ }; /* url_socket_vtable * * System calls for functions that operate on descriptors, URL * handling for functions that operate on file names. */ static struct vu_fs_discipline url_socket_vtable; /* url_server_socket_vtable * * Errors for most functions. Server shut-down for `vu_close'. */ static struct vu_fs_discipline url_server_socket_vtable; /* __STDC__ prototypes for static functions */ static regex_t * url_socket_client_regex (const t_uchar ** name, const t_uchar *** doc, enum url_socket_domains domains, int default_port); static regex_t * url_socket_server_regex (const t_uchar ** name, const t_uchar *** doc, enum url_socket_domains domains, int may_be_client, int default_port); static regex_t * url_socket_only_server_regex (const t_uchar ** name, const t_uchar *** doc, enum url_socket_domains domains, int default_port); static int server_fd_for_addr (int * errn, struct sockaddr * addr, int addr_len, const char * path, int flags, int mode, struct url_socket_params * params); static struct server_memo * find_memo_for_server_fd (int fd); static void remove_memo_for_server_fd (int fd); static int decode_socket_url (int * errn, struct sockaddr * addr, int * addr_len, struct url_socket_params * params, int * be_a_server, const char * path, int be_a_server_hint); static void * url_socket_make_closure (void * closure); static void url_socket_free_closure (void * closure); static int url_socket_open (int * errn, const char * path, int flags, int mode, void * closure); static int url_socket_close (int * errn, int fd, void * closure); static int url_socket_access (int * errn, const char * path, int mode, void * closure); static int url_socket_chdir (int * errn, const char * path, void * closure); static int url_socket_chmod (int * errn, const char * path, int mode, void * closure); static int url_socket_chown (int * errn, const char * path, int owner, int group, void * closure); static int url_socket_chroot (int * errn, const char * path, void * closure); static int url_socket_closedir (int * errn, DIR * dir, void * closure); static int url_socket_fchdir (int * errn, int fd, void * closure); static int url_socket_fchmod (int * errn, int fd, int mode, void * closure); static int url_socket_fchown (int * errn, int fd, int owner, int group, void * closure); static int url_socket_fstat (int * errn, int fd, struct stat * buf, void * closure); static int url_socket_fsync (int * errn, int fd, void * closure); static int url_socket_ftruncate (int * errn, int fd, off_t where, void * closure); static int url_socket_link (int * errn, const char * from, const char * to, void * closure); static off_t url_socket_lseek (int * errn, int fd, off_t offset, int whence, void * closure); static int url_socket_lstat (int * errn, const char * path, struct stat * buf, void * closure); static int url_socket_mkdir (int * errn, const char * path, int mode, void * closure); static int url_socket_opendir (int * errn, DIR ** retv, const char * path, void * closure); static ssize_t url_socket_read (int * errn, int fd, char * buf, size_t count, void * closure); static int url_socket_readdir (int * errn, struct alloc_limits * limits, char ** file_ret, DIR * dir, void * closure); static int url_socket_readlink (int * errn, const char * path, char * buf, int bufsize, void * closure); static int url_socket_rename (int * errn, const char * from, const char * to, void * closure); static int url_socket_rmdir (int * errn, const char * path, void * closure); static int url_socket_stat (int * errn, const char * path, struct stat * buf, void * closure); static int url_socket_symlink (int * errn, const char * from, const char * to, void * closure); static int url_socket_truncate (int * errn, const char * path, off_t where, void * closure); static int url_socket_unlink (int * errn, const char * path, void * closure); static int url_socket_utime (int * errn, const char * path, struct utimbuf * times, void * closure); static ssize_t url_socket_write (int * errn, int fd, const char * buf, size_t count, void * closure); static int url_socket_fcntl (int * errn, int fd, int cmd, long arg, void * closure); static int url_socket_dup (int * errn, int fd, void * closure); static int url_socket_dup2 (int * errn, int fd, int newfd, void * closure); static int url_socket_move_state (int * errn, int fd, int newfd, void * closure); static int url_server_socket_close (int * errn, int fd, void * closure); /* static regex_t * url_socket_client_regex (const t_uchar * name, * const t_uchar *** doc, * enum url_socket_domains domains, * int default_port); * * Return a file name regexp and namespace option name for client * sockets in the indicated domains. * * Domains: Regexp: Name: * ----------------------------------------------------------- * unix unix: client/unix * inet inet:// client/inet * both unix:\|inet:// client/any */ static regex_t * url_socket_client_regex (const t_uchar ** name, const t_uchar *** doc, enum url_socket_domains domains, int default_port) { switch (domains) { default: panic ("illegal domains specification to url_socket_push_client_handler"); case url_socket_unix: { static int initialized = 0; static regex_t regex; static const t_uchar * docstr[] = { "unix:$PATH", "Client connection to a unix-domain socket.", "$PATH is ~-expanded.", 0 }; if (!initialized) { if (0 > regcomp (®ex, "^unix:", 0)) panic ("unable to compile socket url regexp"); initialized = 1; } *name = "client/unix"; *doc = docstr; return ®ex; } case url_socket_inet: { static int initialized = 0; static regex_t regex; static const t_uchar * docstr[] = { "inet:$HOST:$PORT", "Client connection to an internet-domain", "socket.", 0 }; static const t_uchar * docstr_opt_port[] = { "inet:$HOST[:$PORT]", "Client connection to an internet-domain", "socket.", 0 }; if (!initialized) { if (0 > regcomp (®ex, "^inet://", 0)) panic ("unable to compile socket url regexp"); initialized = 1; } *name = "client/inet"; *doc = ((default_port < 0) ? docstr : docstr_opt_port); return ®ex; } case url_socket_inet_or_unix: { static int initialized = 0; static regex_t regex; static const t_uchar * docstr[] = { "unix:$PATH or inet:$HOST:$PORT", "Client connection to a unix or", "internet domain socket. $PATH", "is ~-expanded.", 0 }; static const t_uchar * docstr_opt_port[] = { "unix:$PATH or inet:$HOST[:$PORT]", "Client connection to a unix or", "internet domain socket. $PATH", "is ~-expanded.", 0 }; if (!initialized) { if (0 > regcomp (®ex, "^[[:(unix:\\|inet://):]]", 0)) panic ("unable to compile socket url regexp"); initialized = 1; } *name = "client/any"; *doc = ((default_port < 0) ? docstr : docstr_opt_port); return ®ex; } } } /* static regex_t * url_socket_server_regex (const t_uchar ** name, * const t_uchar *** doc, * enum url_socket_domains domains, * int may_be_client, * int default_port); * * Return a file name regexp and option argument name for server * sockets in the indicated domains. Regexps that can also be used * for client sockets are included. * * Domains: Regexp: * -------------------------------------- * unix unix:\|unix-server: * inet inet://\|inet-server:// * both unix:\|unix-server:\|inet://\|inet-server:// * * See the comment for `url_socket_push_socket_handler' for the names * associated with each combination of `domains' and `may_be_client'. */ static regex_t * url_socket_server_regex (const t_uchar ** name, const t_uchar *** doc, enum url_socket_domains domains, int may_be_client, int default_port) { switch (domains) { default: panic ("illegal domains specification to url_socket_push_client_handler"); case url_socket_unix: { static int initialized = 0; static regex_t regex; if (!initialized) { if (0 > regcomp (®ex, "^[[:(unix:\\|unix-server:):]]", 0)) panic ("unable to compile socket url regexp"); initialized = 1; } if (may_be_client) { static const t_uchar * docstr[] = { "unix:$PATH or unix-server:$PATH", "Be a server or client for a unix-domain", "socket. $PATH is ~-expanded.", 0 }; *name = "socket/unix"; *doc = docstr; } else { static const t_uchar * docstr[] = { "unix:$PATH or unix-server:$PATH", "Be a server for a unix-domain socket.", "$PATH is ~-expanded.", 0 }; *name = "server/unix"; *doc = docstr; } return ®ex; } case url_socket_inet: { static int initialized = 0; static regex_t regex; if (!initialized) { if (0 > regcomp (®ex, "^[[:(inet://\\|inet-server://):]]", 0)) panic ("unable to compile socket url regexp"); initialized = 1; } if (may_be_client) { static const t_uchar * docstr[] = { "inet:$HOST:$PORT", " or inet-server:$PATH:$PORT", "Be a server or client for an", "internet-domain socket.", 0 }; static const t_uchar * docstr_opt_port[] = { "inet:$HOST[:$PORT]", " or inet-server:$PATH[:$PORT]", "Be a server or client for an", "internet-domain socket.", 0 }; *name = "socket/inet"; *doc = ((default_port < 0) ? docstr : docstr_opt_port); } else { static const t_uchar * docstr[] = { "inet:$HOST:$PORT", " or inet-server:$PATH:$PORT", "Be a server for an internet-domain", "socket.", 0 }; static const t_uchar * docstr_opt_port[] = { "inet:$HOST[:$PORT]", " or inet-server:$PATH[:$PORT]", "Be a server for an internet-domain", "socket.", 0 }; *name = "server/inet"; *doc = ((default_port < 0) ? docstr : docstr_opt_port); } return ®ex; } case url_socket_inet_or_unix: { static int initialized = 0; static regex_t regex; if (!initialized) { if (0 > regcomp (®ex, "^[[:(unix:\\|unix-server:\\|inet://\\|inet-server://):]]", 0)) panic ("unable to compile socket url regexp"); initialized = 1; } if (may_be_client) { static const t_uchar * docstr[] = { "unix:$PATH, unix-server:$PATH", "inet:$HOST:$PORT", "or inet-server:$HOST:$PORT", "Be a client or server for a unix or", "internet domain socket. $PATH is", "~-expanded.", 0 }; static const t_uchar * docstr_opt_port[] = { "unix:$PATH, unix-server:$PATH", "inet:$HOST:[$PORT]", "or inet-server:$HOST:[$PORT]", "Be client or a server for a unix or internet", "domain socket. $PATH is ~-expanded.", 0 }; *name = "socket/any"; *doc = ((default_port < 0) ? docstr : docstr_opt_port); } else { static const t_uchar * docstr[] = { "unix:$PATH, unix-server:$PATH", "inet:$HOST:$PORT", "or inet-server:$HOST:$PORT", "Be a server for a unix or internet", "internet domain socket. $PATH is", "~-expanded.", 0 }; static const t_uchar * docstr_opt_port[] = { "unix:$PATH, unix-server:$PATH", "inet:$HOST:[$PORT]", "or inet-server:$HOST:[$PORT]", "Be server for a unix or internet domain", "socket. $PATH is ~-expanded.", 0 }; *name = "server/any"; *doc = ((default_port < 0) ? docstr : docstr_opt_port); } return ®ex; } } } /* static regex_t * url_socket_only_server_regex (const t_uchar ** name, * const t_uchar *** doc, * enum url_socket_domains domains, * int default_port); * * Return a file name regexp and option argument name for server * sockets in the indicated domains. Regexps that can also be used * for client sockets are excluded. * * Domains: Regexp: * -------------------------------------- * unix unix-server: * inet inet-server:// * both unix-server:\|inet-server:// * * See the comment for `url_socket_push_socket_handler' for the names * associated with each domain. */ static regex_t * url_socket_only_server_regex (const t_uchar ** name, const t_uchar *** doc, enum url_socket_domains domains, int default_port) { switch (domains) { default: panic ("illegal domains specification to url_socket_push_client_handler"); case url_socket_unix: { static int initialized = 0; static regex_t regex; static const t_uchar * docstr[] = { "unix-server:$PATH", "Be a server for a unix-domain socket.", "$PATH is ~-expanded.", 0 }; if (!initialized) { if (0 > regcomp (®ex, "^unix-server:", 0)) panic ("unable to compile socket url regexp"); initialized = 1; } *name = "socket/unix-server"; *doc = docstr; return ®ex; } case url_socket_inet: { static int initialized = 0; static regex_t regex; static const t_uchar * docstr[] = { "inet-server:$PATH:$PORT", "Be a server for an internet-domain", "socket.", 0 }; static const t_uchar * docstr_opt_port[] = { "inet-server:$PATH[:$PORT]", "Be a server for an internet-domain", "socket.", 0 }; if (!initialized) { if (0 > regcomp (®ex, "^inet-server://", 0)) panic ("unable to compile socket url regexp"); initialized = 1; } *name = "socket/inet-server"; *doc = ((default_port < 0) ? docstr : docstr_opt_port); return ®ex; } case url_socket_inet_or_unix: { static int initialized = 0; static regex_t regex; static const t_uchar * docstr[] = { "unix-server:$PATH", "or inet-server:$HOST:$PORT", "Be a server for a unix or internet", "internet domain socket. $PATH is", "~-expanded.", 0 }; static const t_uchar * docstr_opt_port[] = { "unix-server:$PATH", "or inet-server:$HOST:[$PORT]", "Be server for a unix or internet domain", "socket. $PATH is ~-expanded.", 0 }; if (!initialized) { if (0 > regcomp (®ex, "^[[:(unix-server:\\|inet-server://):]]", 0)) panic ("unable to compile socket url regexp"); initialized = 1; } *name = "socket/any-server"; *doc = ((default_port < 0) ? docstr : docstr_opt_port); return ®ex; } } } /*(c url_socket_push_client_handler) * void url_socket_push_client_handler (enum url_socket_domains domains, * int default_port, * int is_optional); * * Push a VU namespace handler for client sockets. * * Domains: File Name: * ------------------------------------------------------------------ * url_socket_unix unix:$PATH * url_socket_inet inet://$HOST[:$PORT] * url_socket_inet_or_unix unix:$PATH or inet://$HOST[:$PORT] * * Note that the `$PATH' of a unix domain socket is subject to "~" expansion * using `file_name_tilde_expand'. * * (See xref:"file_name_tilde_expand".) * * `default_port' is used for internet-domain sockets. * * If `is_optional' is 0, the handler is immediately added to the VU namespace. * If `is_optional' is not 0, the handler is added to the list of optional * handlers and may be enabled by `vu_enable_optional_name_handler'. * * (See xref:"vu_enable_optional_name_handler".) * * * Domains: Optional Handler Name: * ------------------------------------------------------------------ * url_socket_unix client/unix * url_socket_inet client/inet * url_socket_inet_or_unix client/any * */ void url_socket_push_client_handler (enum url_socket_domains domains, int default_port, int is_optional) { regex_t * regex; struct url_socket_params params; const t_uchar * name; const t_uchar ** doc; regex = url_socket_client_regex (&name, &doc, domains, default_port); params.type = url_socket_client; params.domains = domains; params.default_port = default_port; params.backlog = 0; params.server_callback = 0; params.connection_callback = 0; params.server_close_callback = 0; vu_push_name_handler (name, doc, regex, 0, &url_socket_vtable, (void *)¶ms, is_optional); } /*(c url_socket_push_socket_handler) * void url_socket_push_socket_handler * (enum url_socket_domains domains, * int server_flags, * int may_be_client, * int only_server_url, * int default_port, * int backlog, * url_socket_server_callback server_callback, * url_socket_connect_callback connection_callback, * url_socket_server_close_callback server_close_callback, * void * closure, * is_optional); * * Push a VU namespace handler for server sockets. After this call, a * call to `vu_open' with a suitable file name will work by creating a * socket. * * `server_flags' may be any bitwise combination of: * * O_NONBLOCK # Don't block waiting for connections. * * There are two kinds of file name patterns: those that can be used * to name both clients and servers, and those that can only be used * to name servers: * * server only: client or server: * ------------------------------------------------- * unix-server:$PATH unix:$PATH * inet-server://$HOST[:$PORT] inet://$HOST[:$PORT] * * By default, both kinds of URL are accepted and interpreted as names * of server sockets. Note that: * * `$PATH' of a unix domain socket is subject to "~" expansion using * `file_name_tilde_expand'. * * `$HOST' of an internet-domain socket may be `INADDR_LOOPBACK'. * If the URL is the name of a server, `$HOST' may also be * `INADDR_ANY'. (See `inet(4)'.) * * `$PORT' of an internet-domain server may be 0, meaning that the * system should assign a port number which will be reported in * the server callback in the `server_addr' parameter (see below). * * If `may_be_client' is not 0, then accept both kinds of URLs, but * interpret "client or server" URLs as naming client sockets (your * process will open a connection to some other server). * * If `only_server_url' is not 0, then accept "server only" URLs, but * not "client or server" URLs. In this case, `may_be_client' is * ignored. This is especially useful in combination with * `url_socket_push_client_handler' and other calls to * `vu_push_name_handler'. * * `default_port' is used when creating an internet-domain socket for * which the port number was not specified in the file-name. * * `backlog' is used for the call to `listen(2)'. * * `server_callback' is called when a new server socket has been * created successfully. It's arguments are explained below. * * `connect_callback' is called when a new connection has been * received. It's arguments are explained below. * * `server_close_callback' is called when the server descriptor * is closed. It's arguments are explained below. * * `closure' is an opaque value passed to the callback functions. * * If `is_optional' is 0, the handler is immediately added to the VU namespace. * If `is_optional' is non-0, the handler is added to the list of optional * handlers and may be enabled by `vu_enable_optional_name_handler'. * * domain(s) only_server_url may_be_client Optional Handler Name * -------------------------------------------------------------------- * unix 0 0 server/unix * inet 0 0 server/inet * inet_or_unix 0 0 server/any * unix 0 1 socket/unix * inet 0 1 socket/inet * inet_or_unix 0 1 socket/any * unix 1 * socket/unix-server * inet 1 * socket/inet-server * inet_or_unix 1 * socket/any-server * * * \Calling Conventions for Callbacks/ * * typedef void (*url_socket_server_callback) (char * path, * int server_flags, * int flags, * int mode, * int server_fd, * struct sockaddr * server_addr, * int server_addr_len, * void * closure); * * `path' is the file name that caused the server socket to * be created. * * `server_flags' is 0 or a bit-wise combination of `O_NONBLOCK'. * * `flags' is the `flags' parameter passed to `vu_open', if this * server socket was created by a call to `vu_open', 0 otherwise. * * `mode' is the `mode' parameter passed to `vu_open', if this * server socket was created by a call to `vu_open', 0 otherwise. * * `server_fd' is the descriptor number of the server socket. * * `server_addr' and `server_addr_len' is the address passed to * `bind'. * * `closure' is the `closure' argument passed to * `url_socket_push_socket_handler'. * * typedef void (*url_socket_connect_callback) * (char * path, * int flags, * int mode, * int server_fd, * int connection_fd, * struct sockaddr * client_addr, * int client_addr_len, * void * closure); * * `path' is the file name that caused the client connection to this * server to be created. * * `flags' is the `flags' parameter passed to `vu_open'. * * `mode' is the `mode' parameter passed to `vu_open'. * * `server_fd' is the descriptor number of the server socket. * * `connection_fd' is the descriptor number of the client connection. * * `client_addr' and `client_addr_len' is the address from `accept'. * * `closure' is the `closure' argument passed to * `url_socket_push_socket_handler'. * * typedef void (*url_socket_server_close_callback) * (int server_fd, * struct sockaddr * server_addr, * int server_addr_len, * void * closure); * * `server_fd' is the descriptor number of the server socket. * * `server_addr' and `server_addr_len' is the address passed to * `bind'. * * `closure' is the `closure' argument passed to * `url_socket_push_socket_handler'. * */ void url_socket_push_server_handler (enum url_socket_domains domains, int server_flags, int may_be_client, int only_server_url, int default_port, int backlog, url_socket_server_callback server_callback, url_socket_connect_callback connection_callback, url_socket_server_close_callback server_close_callback, void * closure, int is_optional) { regex_t * regex; struct url_socket_params params; const t_uchar * name; const t_uchar ** doc; if (only_server_url) regex = url_socket_only_server_regex (&name, &doc, domains, default_port); else regex = url_socket_server_regex (&name, &doc, domains, may_be_client, default_port); if (may_be_client) params.type = url_socket_server_or_client; else params.type = url_socket_server; params.domains = domains; params.server_flags = server_flags; params.default_port = default_port; params.backlog = backlog; params.server_callback = server_callback; params.connection_callback = connection_callback; params.server_close_callback = server_close_callback; params.closure = closure; vu_push_name_handler (name, doc, regex, 0, &url_socket_vtable, (void *)¶ms, is_optional); } /**************************************************************** * Caching Server Sockets * * The system creates only one server socket per address. */ #ifndef SOCK_MAXADDRLEN #undef MAX #define MAX(A,B) (((A)>=(B))?(A):(B)) #define SOCK_MAXADDRLEN MAX(sizeof(struct sockaddr_un), sizeof (struct sockaddr_in)) #endif struct server_memo { char addr_data[SOCK_MAXADDRLEN]; /* The address of the server */ int fd; /* The descriptor of the server */ int flags; /* O_NONBLOCK */ char * path; /* If this is a unix domain socket, the file name to unlink */ }; static union { struct server_memo * smp; void * void_ptr; } addr_memo = {0}; #define IN_ADDR(A) ((struct sockaddr_in *)A) #define IN_ADDR(A) ((struct sockaddr_in *)A) #define UN_ADDR(A) ((struct sockaddr_un *)A) #define SOCKADDR(A) ((struct sockaddr *)(A)) #define ADDR_MEMO(N) SOCKADDR(addr_memo.smp[(N)].addr_data) #define IN_ADDR_MEMO(N) IN_ADDR(addr_memo.smp[(N)].addr_data) #define UN_ADDR_MEMO(N) UN_ADDR(addr_memo.smp[(N)].addr_data) /* static int server_fd_for_addr (int * errn, * struct sockaddr * addr, * int addr_len, * const char * path, * int flags, * int mode, * struct url_socket_params * params); * * Return a server socket for a given address or -1. * * `errn' returns an errno code. * * `addr' and `addr_len' is the address of the server (for `bind(2)'). * * `path' is the `path' parameter for the server callback in `params'. * * `flags' is the `flags' parameter for the server callback in `params'. * * `mode' is the `mode' parameter for the server callback in `params'. * * `params' is the VU closure containing the server callback and other * parameters. */ static int server_fd_for_addr (int * errn, struct sockaddr * addr, int addr_len, const char * path, int flags, int mode, struct url_socket_params * params) { int fd; int size; int x; int desired_flags; struct server_memo * memo; size = ar_size (addr_memo.void_ptr, lim_use_must_malloc, sizeof (*addr_memo.smp)); for (x = 0; x < size; ++x) { if (addr->sa_family == ADDR_MEMO(x)->sa_family) { switch (addr->sa_family) { default: panic ("corrupt address memo in url-socket.c"); case AF_INET: if ( (IN_ADDR (addr)->sin_port == IN_ADDR_MEMO (x)->sin_port) && !mem_cmp ((t_uchar *)&IN_ADDR (addr)->sin_addr, (t_uchar *)&IN_ADDR_MEMO (x)->sin_addr, sizeof (struct in_addr))) { memo = &addr_memo.smp [x]; fd = addr_memo.smp[x].fd; goto got_fd; } break; case AF_UNIX: if (!str_cmp (UN_ADDR (addr)->sun_path, UN_ADDR_MEMO (x)->sun_path)) { memo = &addr_memo.smp [x]; fd = addr_memo.smp[x].fd; goto got_fd; } break; } } } fd = socket (addr->sa_family, SOCK_STREAM, 0); if (fd < 0) { *errn = errno; return -1; } { int ign; if (0 > setsockopt (fd, SOL_SOCKET, SO_REUSEADDR, (char *)&ign, sizeof (ign))) { *errn = errno; close (fd); return -1; } } if (0 > bind (fd, addr, addr_len)) { *errn = errno; close (fd); return -1; } if (0 > listen (fd, params->backlog)) { *errn = errno; close (fd); return -1; } { int orig_flags; orig_flags = fcntl (fd, F_GETFL, 0); if (orig_flags < 0) { *errn = errno; close (fd); return -1; } memo = (struct server_memo *)ar_push (&addr_memo.void_ptr, lim_use_must_malloc, sizeof (struct server_memo)); mem_move (memo->addr_data, (t_uchar *)addr, addr_len); memo->fd = fd; memo->flags = orig_flags & O_NONBLOCK; if (addr->sa_family == AF_INET) memo->path = 0; else memo->path = str_save (lim_use_must_malloc, UN_ADDR (addr)->sun_path); } vu_set_fd_handler (fd, &url_server_socket_vtable, (void *)params); if (params->server_callback) params->server_callback (path, params->server_flags, flags, mode, fd, addr, addr_len, params->closure); got_fd: desired_flags = (params->server_flags & O_NONBLOCK); if (desired_flags != memo->flags) { if (-1 == fcntl (fd, F_SETFL, desired_flags)) { *errn = errno; return -1; } memo->flags = desired_flags; } return fd; } /* static void remove_memo_for_server_fd (int fd); * * Remove the cache of data about server socket `fd'. */ static struct server_memo * find_memo_for_server_fd (int fd) { int size; int x; size = ar_size (addr_memo.void_ptr, lim_use_must_malloc, sizeof (*addr_memo.smp)); for (x = 0; x < size; ++x) { if (addr_memo.smp[x].fd == fd) return &addr_memo.smp[x]; } while (1) panic ("url-socket.c: trying to find a server fd memo for unknown server"); } /* static void remove_memo_for_server_fd (int fd); * * Remove the cache of data about server socket `fd'. */ static void remove_memo_for_server_fd (int fd) { int size; int x; size = ar_size (addr_memo.void_ptr, lim_use_must_malloc, sizeof (*addr_memo.smp)); for (x = 0; x < size; ++x) { if (addr_memo.smp[x].fd == fd) { addr_memo.smp[x] = addr_memo.smp[size - 1]; ar_pop (&addr_memo.void_ptr, lim_use_must_malloc, sizeof (struct server_memo)); return; } } panic ("url-socket.c: trying to remove server fd memo for unknown server"); } /* static int decode_socket_url (int * errn, * struct sockaddr * addr, * int * addr_len, * int * be_a_server, * const char * path, * struct url_socket_params * params, * int be_a_server_hint); * * Translate a URL to a socket address. Return 0 on success, * -1 in the event of an error. * * `errn' returns an errno code. * * `addr' and `addr_len' return the translated address. * * `be_a_server' returns 0 if a client socket was specified, * 1 if a server socket was specified. The `path' specifies a * server if the URL scheme is "unix-server" or "inet-server", * or if the `type' field of `params' is `url_socket_server'. * It is an error (EINVAL) if the `type' field of `params' is * `url_socket_client', but the URL scheme is "unix-server" or * "inet-server" (Other kinds of errors may also return EINVAL.) * * `path' is the URL to translate. * * `params' is the URL params associated with `path'. For example, this * is the `closure' parameter passed to `url_socket_open'. * * `be_a_server_hint' applies only if the `type' field of `params' * is `url_socket_server_or_client'. * */ static int decode_socket_url (int * errn, struct sockaddr * addr, int * addr_len, struct url_socket_params * params, int * be_a_server, const char * path, int be_a_server_hint) { int is_server_address; is_server_address = 0; if (!str_cmp_prefix ("inet://", path) || (is_server_address = !str_cmp_prefix ("inet-server://", path))) { char * addr_spec; char * end_of_addr_spec; char * host; /* Sanity check the requested socket type against the * parameters for this handler. * * Perhaps this should actually panic. */ if ( (params->domains != url_socket_inet) && (params->domains != url_socket_inet_or_unix)) { bogus_addr: *errn = EINVAL; return -1; } IN_ADDR(addr)->sin_family = AF_INET; /* Find the extent of the host part of the path. * Find the port number, if any was specified. */ addr_spec = str_chr_index (path, '/'); addr_spec += 2; end_of_addr_spec = str_chr_index (addr_spec, ':'); if (!end_of_addr_spec) { /* No port specified in path. Use the default. */ end_of_addr_spec = str_chr_index (addr_spec, 0); if (params->default_port < 0) goto bogus_addr; IN_ADDR(addr)->sin_port = htons (params->default_port); } else { char * port_name; unsigned long port; int errn; /* Port number explicitly specified. */ port_name = end_of_addr_spec + 1; if (0 > cvt_decimal_to_ulong (&errn, &port, port_name, str_length (port_name))) return -1; IN_ADDR(addr)->sin_port = htons (port); } /* Make a copy of the hostname, so we can have a 0-terminated * form. */ host = alloca (1 + end_of_addr_spec - addr_spec); str_cpy_n (host, addr_spec, end_of_addr_spec - addr_spec); host[end_of_addr_spec - addr_spec] = 0; /* Does it appear to be an IP address? */ if (char_is_digit (*host)) { IN_ADDR(addr)->sin_addr.s_addr = inet_addr (host); if ((t_ulong)(long)IN_ADDR(addr)->sin_addr.s_addr == (t_ulong)-1) goto bogus_addr; } #if 0 /* INADDR_LOOPBACK is not defined in some versions of BSD/OS. */ else if (!str_cmp ("INADDR_LOOPBACK", host)) { IN_ADDR(addr)->sin_addr.s_addr = INADDR_LOOPBACK; } #endif else if (!str_cmp ("INADDR_ANY", host)) { IN_ADDR(addr)->sin_addr.s_addr = INADDR_ANY; } else { struct hostent * hostentp; hostentp = gethostbyname (host); if (!hostentp || (hostentp->h_addrtype != AF_INET)) goto bogus_addr; mem_move ((t_uchar *)&IN_ADDR(addr)->sin_addr, hostentp->h_addr, hostentp->h_length); } *addr_len = sizeof (struct sockaddr_in); } else if (!str_cmp_prefix ("unix:", path) || (is_server_address = !str_cmp_prefix ("unix-server:", path))) { char * socket_path; char * expanded_socket_path; int len; /* Sanity check the requested socket type against the * parameters for this handler. */ if ( (params->domains != url_socket_unix) && (params->domains != url_socket_inet_or_unix)) goto bogus_addr; UN_ADDR(addr)->sun_family = AF_UNIX; socket_path = 1 + str_chr_index (path, ':'); expanded_socket_path = file_name_tilde_expand (lim_use_must_malloc, socket_path); len = str_length (expanded_socket_path); if (len + 1 > sizeof (UN_ADDR(addr)->sun_path)) { *errn = ENAMETOOLONG; return -1; } str_cpy (UN_ADDR(addr)->sun_path, expanded_socket_path); *addr_len = sizeof (struct sockaddr_un); } if (is_server_address && (params->type == url_socket_client)) goto bogus_addr; *be_a_server = ( is_server_address || (params->type == url_socket_server) || be_a_server_hint); if ( (addr->sa_family == AF_INET) && !*be_a_server && (IN_ADDR(addr)->sin_addr.s_addr == INADDR_ANY)) { *errn = EINVAL; return -1; } return 0; } /*c int url_socket_create_server_socket (int * errn, char * path) * * Create a server socket for `path'. Return a descriptor number * or -1. * * `errno' returns an errno code. * * `path' should be a URL matching a pattern added to the VU file * namespace. * * `vu_close' can be used to close a server fd. */ int url_socket_create_server_socket (int * errn, char * path) { struct vu_handler * handler; struct url_socket_params * params; char addr_space[SOCK_MAXADDRLEN]; struct sockaddr * addr; int addr_len; int be_a_server; handler = vu_path_dispatch (path); params = (struct url_socket_params *)handler->closure; addr = (struct sockaddr *)addr_space; if (0 > decode_socket_url (errn, addr, &addr_len, params, &be_a_server, path, 0)) return -1; if (!be_a_server) { *errn = EINVAL; return -1; } else { int server_fd; server_fd = server_fd_for_addr (errn, addr, addr_len, path, 0, 0, params); return server_fd; } } int url_inet_client (int * errn, t_uchar * host, int port) { t_ulong host_addr; if (char_is_digit (*host)) { struct in_addr a; a.s_addr = inet_addr (host); if ((t_ulong)(long)a.s_addr == (t_ulong) -1) { bogus_addr: *errn = EINVAL; return -1; } host_addr = ntohl (a.s_addr); } else { struct hostent * hostentp; hostentp = gethostbyname (host); if (!hostentp || (hostentp->h_addrtype != AF_INET)) goto bogus_addr; mem_move ((t_uchar *)&host_addr, hostentp->h_addr, hostentp->h_length); host_addr = ntohl (host_addr); } return url_inet_client_addr (errn, host_addr, port); } int url_inet_client_addr (int * errn, t_ulong host, int port) { int fd; struct url_socket_params params; struct sockaddr_in addr; addr.sin_family = AF_INET; addr.sin_port = htons (port); addr.sin_addr.s_addr = htonl (host); fd = socket (AF_INET, SOCK_STREAM, 0); if (fd < 0) { *errn = errno; return -1; } if (0 > connect (fd, (struct sockaddr *)&addr, sizeof (addr))) { *errn = errno; close (fd); return -1; } params.type = url_socket_client; params.domains = url_socket_inet; params.default_port = 0; params.backlog = 5; params.server_callback = 0; params.connection_callback = 0; params.server_close_callback = 0; vu_set_fd_handler (fd, &url_socket_vtable, (void *)¶ms); return fd; } int url_inet_server_accept (int * errn, int server_fd) { struct url_socket_params params; char client_addr_space[SOCK_MAXADDRLEN]; struct sockaddr * client_addr; int client_addr_len; int connection_fd; client_addr = (struct sockaddr *)client_addr_space; client_addr_len = sizeof (client_addr_space); connection_fd = accept (server_fd, client_addr, &client_addr_len); if (connection_fd < 0) { *errn = errno; return -1; } params.type = url_socket_server; params.domains = url_socket_inet; params.default_port = 0; params.backlog = 0; params.server_callback = 0; params.connection_callback = 0; params.server_close_callback = 0; vu_set_fd_handler (connection_fd, &url_socket_vtable, (void *)¶ms); return connection_fd; } int url_inet_server (alloc_limits limits, t_ulong * host_addr_is, t_uchar ** host_id_is, int * port_is, int * errn, t_uchar * host, int port) { int fd; struct url_socket_params params; struct sockaddr_in addr; t_uchar *myhost; mem_set0 ((t_uchar *)&addr, sizeof (addr)); addr.sin_family = AF_INET; addr.sin_port = htons (port); if (!host) { if (host_id_is) { size_t size = 64; int err; myhost = (t_uchar *) must_malloc (size + 1); while (1) { int i = size - 1; myhost[i] = '\0'; err = gethostname (myhost, size); if (err >= 0 && myhost[i] == '\0') break; else if (err < 0 && errno != ENAMETOOLONG && errno != 0) must_free (myhost); size *= 2; myhost = must_realloc (myhost, size + 1); } *host_id_is = str_save (limits, myhost); } addr.sin_addr.s_addr = htonl (INADDR_ANY); } else { if (host_id_is) *host_id_is = str_save (limits, host); if (char_is_digit (*host)) { addr.sin_addr.s_addr = inet_addr (host); if ((t_ulong)(long)addr.sin_addr.s_addr == (t_ulong)-1) goto bogus_addr; } else if (!str_cmp ("INADDR_ANY", host)) { addr.sin_addr.s_addr = htonl (INADDR_ANY); } else { struct hostent * hostentp; hostentp = gethostbyname (host); if (!hostentp || (hostentp->h_addrtype != AF_INET)) { bogus_addr: *errn = EINVAL; return -1; } mem_move ((t_uchar *)&addr.sin_addr, hostentp->h_addr, hostentp->h_length); } } mem_set0 ((t_uchar *)¶ms, sizeof (params)); params.type = url_socket_server; params.domains = url_socket_inet; params.default_port = 0; params.backlog = 1; params.server_callback = 0; params.connection_callback = 0; params.server_close_callback = 0; fd = server_fd_for_addr (errn, (struct sockaddr *)&addr, sizeof (addr), 0, O_RDWR, 0, ¶ms); if (fd < 0) { return -1; } else { if (host_addr_is) { if (ntohl (addr.sin_addr.s_addr) != INADDR_ANY) { *host_addr_is = ntohl (addr.sin_addr.s_addr); } else { struct hostent * hostent; size_t size = 64; int err; t_uchar *my_name; my_name = (t_uchar *) must_malloc (size + 1); while (1) { int i = size - 1; my_name[i] = '\0'; err = gethostname (my_name, size); if (err >= 0 && my_name[i] == '\0') break; else if (err < 0 && errno != ENAMETOOLONG && errno != 0) must_free (my_name); size *= 2; my_name = must_realloc (my_name, size + 1); } hostent = gethostbyname (my_name); if (!hostent) { int ign; *errn = errno; vu_close (&ign, fd); return -1; } { t_uint32 tmp; mem_move ((t_uchar *)&tmp, (t_uchar *)hostent->h_addr, 4); *host_addr_is = ntohl (tmp); } } } if (port_is) { char name_space[SOCK_MAXADDRLEN]; int name_len; struct sockaddr * name; name = (struct sockaddr *)name_space; name_len = sizeof (name_space); if (0 > getsockname (fd, name, &name_len)) { int e; *errn = errno; vu_close (&e, fd); return -1; } else { if (port_is) { *port_is = ntohs (IN_ADDR(name)->sin_port); } } } } return fd; } /**************************************************************** * VU `open' and `close' for Sockets * * */ /*c void * url_socket_make_closure (void * closure); * * A `make_closure' function for a VU vtable. (See `vu_push_name_handler'.) */ static void * url_socket_make_closure (void * closure) { struct url_socket_params * answer; answer = (struct url_socket_params *)must_malloc (sizeof (*answer)); *answer = *(struct url_socket_params *)closure; return (void *)answer; } /*c void url_socket_free_closure (void * closure); * * A `free_closure' function for a VU vtable. (See `vu_push_name_handler'.) */ static void url_socket_free_closure (void * closure) { must_free (closure); } /*c void url_socket_open (int * errn, * const char * path, * int flags, * int mode, * void * closure); * * An `open' function for a VU vtable. (See `vu_push_name_handler'.) * * See `url_socket_push_client_handler' and `url_socket_push_server_handler'. */ static int url_socket_open (int * errn, const char * path, int flags, int mode, void * closure) { struct url_socket_params * params; char addr_space[SOCK_MAXADDRLEN]; struct sockaddr * addr; int addr_len; int be_a_server; params = (struct url_socket_params *)closure; addr = (struct sockaddr *)addr_space; if (0 > decode_socket_url (errn, addr, &addr_len, params, &be_a_server, path, 0)) return -1; if (!be_a_server) { int fd; fd = socket (addr->sa_family, SOCK_STREAM, 0); if (fd < 0) { *errn = errno; return -1; } if (0 > connect (fd, addr, addr_len)) { *errn = errno; close (fd); return -1; } return fd; } else { char client_addr_space[SOCK_MAXADDRLEN]; struct sockaddr * client_addr; int client_addr_len; int server_fd; int connection_fd; client_addr = (struct sockaddr *)client_addr_space; client_addr_len = sizeof (client_addr_space); server_fd = server_fd_for_addr (errn, addr, addr_len, path, flags, mode, params); if (server_fd < 0) return -1; connection_fd = accept (server_fd, client_addr, &client_addr_len); if (connection_fd < 0) { *errn = errno; return -1; } if (params->connection_callback) params->connection_callback (path, flags, mode, server_fd, connection_fd, client_addr, client_addr_len, params->closure); return connection_fd; } } /*c void url_socket_close (int * errn, int fd, void * closure); * char * path, * int flags, * int mode, * void * closure); * * A `close' function for a VU vtable. (See `vu_push_name_handler'.) * * See `url_socket_push_client_handler' and `url_socket_push_server_handler'. */ static int url_socket_close (int * errn, int fd, void * closure) { int x; int size; size = ar_size (addr_memo.void_ptr, lim_use_must_malloc, sizeof (*addr_memo.smp)); for (x = 0; x < size; ++x) if (fd == addr_memo.smp [x].fd) { if (0 > vu_sys_close (errn, fd, 0)) return -1; addr_memo.smp[x] = addr_memo.smp[size - 1]; ar_pop (&addr_memo.void_ptr, lim_use_must_malloc, sizeof (struct server_memo)); return 0; } return vu_sys_close (errn, fd, 0); } /**************************************************************** * VU Vtable Functions for URL Sockets */ static int url_socket_access (int * errn, const char * path, int mode, void * closure) { *errn = EINVAL; return -1; } static int url_socket_chdir (int * errn, const char * path, void * closure) { *errn = EINVAL; return -1; } static int url_socket_chmod (int * errn, const char * path, int mode, void * closure) { *errn = EINVAL; return -1; } static int url_socket_chown (int * errn, const char * path, int owner, int group, void * closure) { *errn = EINVAL; return -1; } static int url_socket_chroot (int * errn, const char * path, void * closure) { *errn = EINVAL; return -1; } static int url_socket_closedir (int * errn, DIR * dir, void * closure) { *errn = EINVAL; return -1; } static int url_socket_fchdir (int * errn, int fd, void * closure) { *errn = EINVAL; return -1; } static int url_socket_fchmod (int * errn, int fd, int mode, void * closure) { *errn = EINVAL; return -1; } static int url_socket_fchown (int * errn, int fd, int owner, int group, void * closure) { *errn = EINVAL; return -1; } static int url_socket_fstat (int * errn, int fd, struct stat * buf, void * closure) { *errn = EINVAL; return -1; } static int url_socket_fsync (int * errn, int fd, void * closure) { *errn = EINVAL; return -1; } static int url_socket_ftruncate (int * errn, int fd, off_t where, void * closure) { *errn = EINVAL; return -1; } static int url_socket_link (int * errn, const char * from, const char * to, void * closure) { *errn = EINVAL; return -1; } static off_t url_socket_lseek (int * errn, int fd, off_t offset, int whence, void * closure) { *errn = ESPIPE; return -1; } static int url_socket_lstat (int * errn, const char * path, struct stat * buf, void * closure) { *errn = EINVAL; return -1; } static int url_socket_mkdir (int * errn, const char * path, int mode, void * closure) { *errn = EINVAL; return -1; } static int url_socket_opendir (int * errn, DIR ** retv, const char * path, void * closure) { *errn = EINVAL; return -1; } static ssize_t url_socket_read (int * errn, int fd, char * buf, size_t count, void * closure) { return vu_sys_read (errn, fd, buf, count, 0); } static int url_socket_readdir (int * errn, struct alloc_limits * limits, char ** file_ret, DIR * dir, void * closure) { *errn = EINVAL; return -1; } static int url_socket_readlink (int * errn, const char * path, char * buf, int bufsize, void * closure) { *errn = EINVAL; return -1; } static int url_socket_rename (int * errn, const char * from, const char * to, void * closure) { *errn = EINVAL; return -1; } static int url_socket_rmdir (int * errn, const char * path, void * closure) { *errn = EINVAL; return -1; } static int url_socket_stat (int * errn, const char * path, struct stat * buf, void * closure) { *errn = EINVAL; return -1; } static int url_socket_symlink (int * errn, const char * from, const char * to, void * closure) { *errn = EINVAL; return -1; } static int url_socket_truncate (int * errn, const char * path, off_t where, void * closure) { *errn = EINVAL; return -1; } static int url_socket_unlink (int * errn, const char * path, void * closure) { *errn = EINVAL; return -1; } static int url_socket_utime (int * errn, const char * path, struct utimbuf * times, void * closure) { *errn = EINVAL; return -1; } static ssize_t url_socket_write (int * errn, int fd, const char * buf, size_t count, void * closure) { return vu_sys_write (errn, fd, buf, count, 0); } static int url_socket_fcntl (int * errn, int fd, int cmd, long arg, void * closure) { return vu_sys_fcntl (errn, fd, cmd, arg, 0); } static int url_socket_dup (int * errn, int fd, void * closure) { return vu_sys_dup (errn, fd, 0); } static int url_socket_dup2 (int * errn, int fd, int newfd, void * closure) { return vu_sys_dup2 (errn, fd, newfd, 0); } static int url_socket_move_state (int * errn, int fd, int newfd, void * closure) { if (fd == newfd) return fd; vu_set_fd_handler (newfd, &url_socket_vtable, closure); return 0; } static struct vu_fs_discipline url_socket_vtable = { VU_FS_DISCIPLINE_INITIALIZERS (url_socket_) }; /**************************************************************** * VU Vtable Functions for Server Sockets */ /*c int url_server_socket_close (int * errn, int fd, void * closure); * * A `vu_close_fn' implementation. * * Close a descriptor which is a server-socket created by * `url_socket_open' or `url_socket_create_server_socket'. * */ static int url_server_socket_close (int * errn, int fd, void * closure) { struct url_socket_params * params; struct server_memo * memo; struct sockaddr * addr; int addr_len; char addr_space[SOCK_MAXADDRLEN]; params = (struct url_socket_params *)closure; memo = find_memo_for_server_fd (fd); if (close (fd) < 0) { *errn = errno; return -1; } if (memo->path) { int errn2; vu_unlink (&errn2, memo->path); } addr = (struct sockaddr *)memo->addr_data; addr_len = (addr->sa_family ? sizeof (struct sockaddr_in) : sizeof (struct sockaddr_un)); mem_move (addr_space, (t_uchar *)addr, addr_len); addr = (struct sockaddr *)addr_space; remove_memo_for_server_fd (fd); if (params->server_close_callback) params->server_close_callback (fd, addr, addr_len, params->closure); return 0; } #define url_server_socket_make_closure url_socket_make_closure #define url_server_socket_free_closure url_socket_free_closure #define url_server_socket_access (vu_access_fn)vu_bad_arg #define url_server_socket_chdir (vu_chdir_fn)vu_bad_arg #define url_server_socket_chmod (vu_chmod_fn)vu_bad_arg #define url_server_socket_chown (vu_chown_fn)vu_bad_arg #define url_server_socket_chroot (vu_chroot_fn)vu_bad_arg #define url_server_socket_closedir (vu_closedir_fn)vu_bad_arg #define url_server_socket_fchdir (vu_fchdir_fn)vu_bad_arg #define url_server_socket_fchmod (vu_fchmod_fn)vu_bad_arg #define url_server_socket_fchown (vu_fchown_fn)vu_bad_arg #define url_server_socket_fstat (vu_fstat_fn)vu_bad_arg #define url_server_socket_fsync (vu_fsync_fn)vu_bad_arg #define url_server_socket_ftruncate (vu_ftruncate_fn)vu_bad_arg #define url_server_socket_link (vu_link_fn)vu_bad_arg #define url_server_socket_lseek (vu_lseek_fn)vu_bad_arg #define url_server_socket_lstat (vu_lstat_fn)vu_bad_arg #define url_server_socket_mkdir (vu_mkdir_fn)vu_bad_arg #define url_server_socket_open (vu_open_fn)vu_bad_arg #define url_server_socket_opendir (vu_opendir_fn)vu_bad_arg #define url_server_socket_read (vu_read_fn)vu_bad_arg #define url_server_socket_readdir (vu_readdir_fn)vu_bad_arg #define url_server_socket_readlink (vu_readlink_fn)vu_bad_arg #define url_server_socket_rename (vu_rename_fn)vu_bad_arg #define url_server_socket_rmdir (vu_rmdir_fn)vu_bad_arg #define url_server_socket_stat (vu_stat_fn)vu_bad_arg #define url_server_socket_symlink (vu_symlink_fn)vu_bad_arg #define url_server_socket_truncate (vu_truncate_fn)vu_bad_arg #define url_server_socket_unlink (vu_unlink_fn)vu_bad_arg #define url_server_socket_utime (vu_utime_fn)vu_bad_arg #define url_server_socket_write (vu_write_fn)vu_bad_arg #define url_server_socket_fcntl (vu_fcntl_fn)vu_bad_arg #define url_server_socket_dup (vu_dup_fn)vu_bad_arg #define url_server_socket_dup2 (vu_dup2_fn)vu_bad_arg #define url_server_socket_move_state (vu_dup2_fn)vu_bad_arg static struct vu_fs_discipline url_server_socket_vtable = { VU_FS_DISCIPLINE_INITIALIZERS (url_server_socket_) }; tla-1.3.5+dfsg/src/hackerlab/vu-network/Makefile.in0000644000175000017500000000030210457621774020636 0ustar useruser include $(makefiles)/library-objects.mk ifeq ($(cgs__install_hackerlab),1) include $(makefiles)/install-includes.mk endif # tag: Tom Lord Tue Dec 4 14:52:20 2001 (vu-network/Makefile.in) # tla-1.3.5+dfsg/src/hackerlab/vu-network/PLUGIN/0000755000175000017500000000000010457621774017574 5ustar userusertla-1.3.5+dfsg/src/hackerlab/vu-network/PLUGIN/REQ0000644000175000017500000000004410457621774020144 0ustar useruservu vu-network vu-network libboot tla-1.3.5+dfsg/src/hackerlab/vu-network/url-socket.h0000644000175000017500000000715010457621774021042 0ustar useruser/* url-socket.h - decls for the socket URLs file system * **************************************************************** * Copyright (C) 1999, 2000 Thomas Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__VU_NETWORK__URL_SOCKET_H #define INCLUDE__VU_NETWORK__URL_SOCKET_H #include "hackerlab/os/sys/socket.h" #include "hackerlab/os/sys/param.h" #include "hackerlab/os/sys/un.h" #include "hackerlab/os/netinet/in.h" #include "hackerlab/os/arpa/inet.h" #include "hackerlab/os/netdb.h" #include "hackerlab/vu/vu.h" /* enum url_socket_type * * A single file name regexp can be used to name client sockets, * server sockets, or both. */ enum url_socket_type { url_socket_client, url_socket_server, url_socket_server_or_client, }; /* enum url_socket_domains * * A single file name regexp can be associated with * sockets in the inet domain, the unix domain, or both. */ enum url_socket_domains { url_socket_unix, url_socket_inet, url_socket_inet_or_unix, }; /* A client-supplied function that is called when a new server socket * is created. */ typedef void (*url_socket_server_callback) (const char * path, int server_flags, int flags, int mode, int server_fd, struct sockaddr * server_addr, int server_addr_len, void * closure); /* A client-supplied function that is called when a new client * connection is received. */ typedef void (*url_socket_connect_callback) (const char * path, int flags, int mode, int server_fd, int connection_fd, struct sockaddr * client_addr, int client_addr_len, void * closure); /* A client-supplied function that is called when a server socket is closed. */ typedef void (*url_socket_server_close_callback) (int server_fd, struct sockaddr * server_addr, int server_addr_len, void * closure); /* automatically generated __STDC__ prototypes */ extern void url_socket_push_client_handler (enum url_socket_domains domains, int default_port, int is_optional); extern void url_socket_push_server_handler (enum url_socket_domains domains, int server_flags, int may_be_client, int only_server_url, int default_port, int backlog, url_socket_server_callback server_callback, url_socket_connect_callback connection_callback, url_socket_server_close_callback server_close_callback, void * closure, int is_optional); extern int url_socket_create_server_socket (int * errn, char * path); extern int url_inet_client (int * errn, t_uchar * host, int port); extern int url_inet_client_addr (int * errn, t_ulong host, int port); extern int url_inet_server_accept (int * errn, int server_fd); extern int url_inet_server (alloc_limits limits, t_ulong * host_addr_is, t_uchar ** host_id_is, int * port_is, int * errn, t_uchar * host, int port); #endif /* INCLUDE__VU_NETWORK__URL_SOCKET_H */ tla-1.3.5+dfsg/src/hackerlab/fs/0000755000175000017500000000000010457621774015065 5ustar userusertla-1.3.5+dfsg/src/hackerlab/fs/tmp-files.h0000644000175000017500000000142310457621774017136 0ustar useruser/* tmp-files.h: * **************************************************************** * Copyright (C) 2002 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__FS__TMP_FILES_H #define INCLUDE__FS__TMP_FILES_H #include "hackerlab/vu/vu.h" #include "hackerlab/mem/alloc-limits.h" /* automatically generated __STDC__ prototypes */ extern char * tmp_dir (struct alloc_limits * limits); extern int tmp_open (int * errn, char ** name, struct alloc_limits * limits, char * basename, int flags, int mode); extern int tmp_open_anonymous (int * errn, int flags, int mode); #endif /* INCLUDE__FS__TMP_FILES_H */ /* tag: Tom Lord Sat Jan 5 15:26:10 2002 (tmp-files.h) */ tla-1.3.5+dfsg/src/hackerlab/fs/tmp-files.c0000644000175000017500000000476310457621774017143 0ustar useruser/* tmp-files.c: * **************************************************************** * Copyright (C) 2002 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/os/errno.h" #include "hackerlab/os/errno-to-string.h" #include "hackerlab/os/stdlib.h" #include "hackerlab/os/sys/types.h" #include "hackerlab/os/unistd.h" #include "hackerlab/bugs/panic.h" #include "hackerlab/char/str.h" #include "hackerlab/fmt/cvt.h" #include "hackerlab/vu/safe.h" #include "hackerlab/fs/file-names.h" #include "hackerlab/fs/tmp-files.h" char * tmp_dir (struct alloc_limits * limits) { t_uchar * a; a = getenv ("TMPDIR"); if (!a) a = "/tmp"; return str_save (limits, a); } int tmp_open (int * errn, char ** name, struct alloc_limits * limits, char * basename, int flags, int mode) { char * dir; char * file; int len; dir = 0; file = 0; flags |= (O_CREAT | O_EXCL); dir = tmp_dir (limits); if (!dir) { enomem_error: *errn = ENOMEM; other_error: if (dir) lim_free (limits, dir); if (file) lim_free (limits, file); return -1; } file = file_name_in_vicinity (limits, dir, basename); if (!file) goto enomem_error; len = str_length (dir) + str_length (basename); { char * t; t = lim_realloc (limits, file, len + 64); if (!t) goto enomem_error; file = t; } file[len] = '.'; ++len; { t_ulong seq; seq = (t_ulong)getpid (); while (1) { int fd; cvt_ulong_to_decimal (file + len, seq); fd = vu_open (errn, file, flags, mode); if (fd >= 0) { *name = file; lim_free (limits, dir); return fd; } if (*errn != EEXIST) goto other_error; ++seq; } } panic ("tmp-files: not reached!"); return -1; } int tmp_open_anonymous (int * errn, int flags, int mode) { char * file; int fd; int ign; fd = tmp_open (errn, &file, lim_use_malloc, "anon", flags, mode); if (fd < 0) return -1; if (0 > vu_unlink (&ign, file)) { safe_printfmt (2, "\n"); safe_printfmt (2, "tmp_open_anonymous: unable to unlink anonymous tmp file\n"); safe_printfmt (2, " file: %s\n", file); safe_printfmt (2, " error: %s (%d)\n", errno_to_string (ign), ign); safe_printfmt (2, "\n"); panic ("unable to unlink anonymous tmp file\n"); } lim_free (lim_use_malloc, file); return fd; } /* tag: Tom Lord Fri Feb 22 13:46:41 2002 (tmp-files.c) */ tla-1.3.5+dfsg/src/hackerlab/fs/file-names.h0000644000175000017500000000364510457621774017266 0ustar useruser/* file-names.h - decls for file-name manipulations * **************************************************************** * Copyright (C) 1998, 2000 Thomas Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__FS__FILE_NAMES_H #define INCLUDE__FS__FILE_NAMES_H #include "hackerlab/machine/types.h" #include "hackerlab/mem/alloc-limits.h" /* automatically generated __STDC__ prototypes */ extern t_uchar * file_name_home_directory (void); extern int file_name_is_absolute (const t_uchar * f); extern t_uchar * file_name_tilde_expand (alloc_limits limits, const t_uchar * fname); extern t_uchar * file_name_tail (alloc_limits limits, const t_uchar * fname); extern t_uchar * file_name_head (alloc_limits limits, const char * fname); extern t_uchar * file_name_sans_head (alloc_limits limits, const char * fname); extern t_uchar * file_name_as_directory (alloc_limits limits, const t_uchar * f); extern t_uchar * file_name_from_directory (alloc_limits limits, const t_uchar * f); extern t_uchar * file_name_directory (alloc_limits limits, const t_uchar * f); extern t_uchar * file_name_directory_file (alloc_limits limits, const t_uchar * f); extern int file_name_is_path_prefix (const t_uchar * maybe_prefix, const t_uchar * path); extern int file_name_is_dir_prefix (const t_uchar * maybe_prefix, const t_uchar * path); extern t_uchar * file_name_in_vicinity (alloc_limits limits, const t_uchar * dir, const t_uchar * name); extern t_uchar ** path_parse (alloc_limits limits, const t_uchar * path); extern void free_path (alloc_limits limits, t_uchar ** path); extern t_uchar * path_find_executable (alloc_limits limits, const t_uchar ** path, const t_uchar * tail); #endif /* INCLUDE__FS__FILE_NAMES_H */ tla-1.3.5+dfsg/src/hackerlab/fs/file-names.c0000644000175000017500000004350710457621774017262 0ustar useruser/* file-names.c - file-name manipulations * **************************************************************** * Copyright (C) 1998, 2000 Thomas Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/os/alloca.h" #include "hackerlab/os/stdlib.h" #include "hackerlab/os/pwd.h" #include "hackerlab/bugs/panic.h" #include "hackerlab/char/str.h" #include "hackerlab/mem/mem.h" #include "hackerlab/arrays/ar.h" #include "hackerlab/vu/vu.h" #include "hackerlab/fs/file-names.h" /************************************************************************ *(h0 "File-name Manipulation Functions" * :include ("fs/file-names.h")) * * The functions in this chapter are for managing strings which are * file names. Though the actual implementation is unix-specific, the * calling conventions for these functions (based on the design of GNU * Emacs) should support other operating systems as well. * * \WARNING: some of the functions in this chapter use `must_malloc' * when it would be better to use some other allocation function. * This is likely to be fixed in a future release./ */ /*(menu) */ /************************************************************************ *(h1 "Home Directories") * * * */ /*(c file_name_home_directory) * char * file_name_home_directory (void); * * Return the user's home directory. * * The path returned should not be freed by the caller and * may be returned more than once by `file_name_home_directory'. * * The home directory is defined to be the value of the * environment variable HOME, unless that variable is unbound * or is bound to an empty string. If HOME is undefined, then * the home directory is found using `getpwuid' and the * real user id of the process. * * If the home directory can not be computed, or storage can not * be allocated, `panic' is called to force the process to exit. * * The directory name returned is formatted as if returned * by `file_name_as_directory' (it will end with a single `/'). */ t_uchar * file_name_home_directory (void) { static t_uchar * path = 0; t_uchar * env; int uid; struct passwd * pwent; if (path) return path; env = getenv ("HOME"); if (env && env[0]) path = file_name_as_directory (lim_use_must_malloc, env); else { uid = getuid (); pwent = getpwuid (uid); if (!pwent) panic ("unable to compute a home directory"); path = file_name_as_directory (lim_use_must_malloc, pwent->pw_dir); } return path; } /*(c file_name_is_absolute) * int file_name_is_absolute (t_uchar * f); * * return f && f[0] && (f[0] == '/'); */ int file_name_is_absolute (const t_uchar * f) { return f && f[0] && (f[0] == '/'); } /*(c file_name_tilde_expand) * t_uchar * file_name_tilde_expand (alloc_limits limits, char * fname); * * Return a newly allocated copy of `fname' with a leading `~' or * `~user' expanded to the appropriate home directory. * * If allocation fails (but does not call `panic') this function returns 0. * * If asked to expand `~', and unable to find a home directory for the * current process, this function panics and exits. * * If asked to expand `~user', and unable to find a home directory for * `user', this function returns a newly allocated copy of `fname'. * */ t_uchar * file_name_tilde_expand (alloc_limits limits, const t_uchar * fname) { if (fname[0] != '~') return str_save (limits, fname); else if (!fname[1] || (fname[1] == '/')) { t_uchar * home; home = file_name_home_directory (); if (!fname[1]) { /* Return a file name without a trailing "/" */ return file_name_from_directory (limits, home); } else if (!fname[2]) { /* Return a file name with a trailing "/" */ return str_save (limits, home); } else { const t_uchar * pos; pos = fname + 2; while (*pos == '/') { ++pos; } if (!*pos) { /* Return a file name with a trailing "/" */ return str_save (limits, home); } else { /* Combine the ~-expansion with the remaining file-name. */ return file_name_in_vicinity (limits, home, pos); } } } else { const t_uchar * uname_end; int uname_len; t_uchar * uname; struct passwd * pwent; uname_end = str_chr_index (fname + 1, '/'); if (!uname_end) uname_end = fname + str_length (fname); uname_len = uname_end - (fname + 1); uname = (t_uchar *)alloca (uname_len + 1); str_cpy_n (uname, fname + 1, uname_len); uname[uname_len] = 0; pwent = getpwnam (uname); if (!pwent) { /* unknown user -- return fname unmodified */ return str_save (limits, fname); } if (*uname_end && uname_end[1]) { /* ~uname/relative-path * * Return relative-path relative to the expanded * home directory. */ return file_name_in_vicinity (limits, pwent->pw_dir, uname_end + 1); } else if (*uname_end) { /* ~uname/ * * Return the expanded home directory, with * a trailing "/". */ return file_name_as_directory (limits, pwent->pw_dir); } else { /* ~uname * * Return the expanded home directory, without * a trailing "/". */ return file_name_from_directory (limits, pwent->pw_dir); } } } /************************************************************************ *(h1 "File-name Algebra") * * * */ /*(c file_name_tail) * char * file_name_tail (alloc_limits limits, char * fname); * * Return a newly allocated string containing only the last element of * the file-name `fname'. The last element is everything following * the last `"/"' or all of `fname' if it contains no `"/"' * characters. * * "/usr/bin/ls" => "ls" * "/usr/bin/" => "" * "ls" => "ls" * * If allocation fails (but does not call `panic') this function returns 0. */ t_uchar * file_name_tail (alloc_limits limits, const t_uchar * fname) { t_uchar * s; s = str_chr_rindex (fname, '/'); return str_save (limits, s ? s + 1 : fname); } /*(c file_name_head) * t_uchar * file_name_head (alloc_limits limits, char * fname); * * "/usr/bin/ls" => "/" * "usr/bin/ls" => "usr" * "ls" => "ls" * 0 => 0 */ t_uchar * file_name_head (alloc_limits limits, const char * fname) { t_uchar * slash; if (!fname) return 0; if (fname[0] == '/') return str_save (limits, "/"); slash = str_chr_index (fname, '/'); if (!slash) return str_save (limits, fname); else return str_save_n (limits, fname, (char *)slash - fname); } /*(c file_name_sans_head) * t_uchar * file_name_sans_head (alloc_limits limits, char * fname); * * "/" => 0 * "/usr/bin/ls" => "usr/bin/ls" * "usr/bin/ls" => "bin/ls" * "usr/" => 0 * "ls" => 0 * 0 => 0 */ t_uchar * file_name_sans_head (alloc_limits limits, const char * fname) { t_uchar * slash; if (!fname) return 0; if ((fname[0] == '/') && !fname[1]) return 0; if (fname[0] == '/') return str_save (limits, fname + 1); slash = str_chr_index (fname, '/'); if (!slash || !slash[1]) return 0; else return str_save (limits, slash + 1); } /*(c file_name_as_directory) * t_uchar * file_name_as_directory (alloc_limits limits, t_uchar * f); * * Return a newly allocated copy of file-name `f', ensuring that the * copy ends in a single `"/"'. * * "/usr/bin/ls" => "/usr/bin/ls/" * "/usr/bin/" => "/usr/bin/" * "/usr/bin///" => "/usr/bin/" * "ls" => "ls/" * "/" => "/" * * If allocation fails (but does not call `panic') this function returns 0. */ t_uchar * file_name_as_directory (alloc_limits limits, const t_uchar * f) { int len; int already_is; len = str_length (f); if (!len) return str_save (limits, f); already_is = (f[len - 1] == '/'); while (len && (f[len - 1] == '/')) --len; if (already_is) return str_save_n (limits, f, len + 1); else { t_uchar * answer; answer = lim_malloc (limits, len + 2); if (!answer) return 0; mem_move (answer, f, len); answer[len] = '/'; answer[len + 1] = 0; return answer; } } /*(c file_name_from_directory) * t_uchar * file_name_from_directory (alloc_limits limits, t_uchar * f); * * Return a newly allocated copy of file-name `f', removing all * trailing `"/"' characters. The root directory is treated specially: * * "/usr/bin/ls" => "/usr/bin/ls" * "ls" => "ls" * "/usr/bin/" => "/usr/bin" * "/usr/bin///" => "/usr/bin" * "/" => "/" * * If allocation fails (but does not call `panic') this function returns 0. */ t_uchar * file_name_from_directory (alloc_limits limits, const t_uchar * f) { t_uchar * answer; int len; answer = str_save (limits, f); if (!answer) return 0; len = str_length (f); if (len == 1) return answer; while (len-- && (answer[len] == '/')) answer[len] = 0; return answer; } /*(c file_name_directory) * t_uchar * file_name_directory (alloc_limits limits, t_uchar * f); * * Return a newly allocated copy of the directory portion of file-name * `f', ensuring that the copy ends with a single `"/"'. * * The directory portion is everything except the last component of a * file-name. If `f' already ends with a `"/"', then this function is * the same as `file_name_as_directory'. If `f' has no directory * component, this function returns 0: * * "/usr/bin/ls" => "/usr/bin/" * "/usr/bin///ls" => "/usr/bin/" * "/usr/bin/" => "/usr/bin/" * "/usr/bin" => "/usr/" * "ls" => 0 * "/" => "/" * * If allocation fails (but does not call `panic') this function returns 0. */ t_uchar * file_name_directory (alloc_limits limits, const t_uchar * f) { int len; int already_is; len = str_length (f); if (!len) return 0; already_is = (f[len - 1] == '/'); while (len && (f[len - 1] == '/')) --len; if (already_is) return str_save_n (limits, f, len + 1); else { t_uchar * answer; while (len && (f[len - 1] != '/')) --len; if (!len) return 0; while (len && (f[len - 1] == '/')) --len; ++len; answer = lim_malloc (limits, len + 1); if (!answer) return 0; mem_move (answer, f, len); answer[len] = 0; return answer; } } /*(c file_name_directory_file) * t_uchar * file_name_directory_file (alloc_limits limits, t_uchar * f); * * Return a newly allocated copy of the directory portion of file-name * `f', ensuring that the copy does not end with a single `"/"' (with * one exception). * * The directory portion is everything except the last component of a * file-name. If `f' has no directory component, this function returns 0: * * "/usr/bin/ls" => "/usr/bin" * "/usr/bin///ls" => "/usr/bin" * "/usr/bin/" => "/usr/bin" * "/usr/bin" => "/usr" * "ls" => 0 * "/" => "/" * * If allocation fails (but does not call `panic') this function returns 0. * */ t_uchar * file_name_directory_file (alloc_limits limits, const t_uchar * f) { t_uchar * intermediate; t_uchar * answer; intermediate = file_name_directory (limits, f); if (!intermediate) return 0; answer = file_name_from_directory (limits, intermediate); lim_free (limits, intermediate); return answer; } /*(c file_name_is_path_prefix) * int file_name_is_path_prefix (t_uchar * maybe_prefix, t_uchar * path); * * Return non-zero if `maybe_prefix' is equal to `path' or to some * path-prefix of `path'. * * For example: * * "/usr/bin" is a prefix of "/usr/bin/ls" * "/usr/bin" is a prefix of "/usr/bin" * "/usr/bin" is a prefix of "/usr/bin/" * "/usr/bin/" is a prefix of "/usr/bin/" * * but: * * "/usr/bin" is _not_ a prefix of "/usr/bin-utils/ls" * "/usr/bin/" is _not_ a prefix of "/usr/bin" * */ int file_name_is_path_prefix (const t_uchar * maybe_prefix, const t_uchar * path) { int len; if (str_cmp_prefix (maybe_prefix, path)) return 0; len = str_length (maybe_prefix); if (path[len] && (path[len] != '/')) return 0; return 1; } /*(c file_name_is_dir_prefix) * int file_name_is_dir_prefix (t_uchar * maybe_prefix, t_uchar * path); * * Return non-zero if `maybe_prefix' is equal to the directory * part of path. * */ int file_name_is_dir_prefix (const t_uchar * maybe_prefix, const t_uchar * path) { const t_uchar * p; if (!file_name_is_path_prefix (maybe_prefix, path)) return 0; p = path + str_length (maybe_prefix); while (*p == '/') ++p; if (!*p) return 0; while (*p) if (*(p++) == '/') return 0; return 1; } /*(c file_name_in_vicinity) * t_uchar * file_name_in_vicinity (alloc_limits limits, * t_uchar * dir, * t_uchar * file); * * Return a newly allocated string which is `dir', followed by `"/"', * followed by `file'. If `dir' is a directory name and `file' is a * relative file-name, then the result is a name for `file', relative * to `dir'. If `dir' already ends in `"/"', no additional `"/"' is * added. * * If `dir' is 0 or `""', a newly allocated copy of `file' is returned. * * If `file' is an absolute file name (begins with `"/"') a newly allocated copy * of `file' is returned. * * "/usr/bin", "ls" => "/usr/bin/ls" * "/usr/bin/", "ls" => "/usr/bin/ls" * "/usr/bin///", "ls" => "/usr/bin/ls" * "/etc", "/usr/bin/ls" => "/usr/bin/ls" * 0, "ls" => "ls" * * If allocation fails (but does not call `panic') this function returns 0. */ t_uchar * file_name_in_vicinity (alloc_limits limits, const t_uchar * dir, const t_uchar * name) { int dl; int nl; t_uchar * answer; if (name && (*name == '/')) return str_save (limits, name); dl = str_length (dir); if (dl && (dir[dl - 1] == '/')) { while (dl && (dir[dl - 1] == '/')) --dl; ++dl; } nl = str_length (name); answer = (t_uchar *)lim_malloc (limits, dl + nl + 2); if (!answer) return 0; if (dir && dir[0]) { mem_move (answer, dir, dl); if (answer[dl - 1] != '/') answer[dl++] = '/'; str_cpy (answer + dl, name); } else { mem_move (answer, name, nl); answer[nl] = 0; } return answer; } /************************************************************************ *(h1 "Paths") * * * */ /*(c path_parse) * t_uchar ** path_parse (alloc_limits limits, char * path); * * Convert a path of file-names separated by ':' to form a 0-terminated * array of file-names. * * An empty file-name is converted to `"."'. * * The array is allocated by the variable sized array functions and * should be freed using `ar_free' (see xref:"Variable Size Arrays"). * Note that `ar_size' returns the size of the array, including the * final 0. * * The elements of the array are allocated by `must_malloc' and should be * freed using `must_free'. *THIS IS A BUG.* * * The function `free_path' can be used to free a path allocated by * `path_parse'. * * If allocation fails (but does not call `panic') this function returns 0. */ t_uchar ** path_parse (alloc_limits limits, const t_uchar * path) { t_converter answer; t_uchar ** loc; answer.void_ptr = 0; while (*path) { if (*path == ':') { loc = (t_uchar **)ar_push (&answer.void_ptr, limits, sizeof (t_uchar *)); if (!loc) { int x; espace_error: x = ar_size (answer.void_ptr, limits, sizeof (*answer.uchar_ptr_ptr)); while (x--) { lim_free (limits, answer.uchar_ptr_ptr[x]); } ar_free (&answer.void_ptr, limits); return 0; } *loc = (t_uchar *)str_save (limits, "."); if (!*loc) goto espace_error; ++path; } else { const t_uchar * end; end = str_chr_index (path, ':'); if (!end) end = path + str_length (path); loc = (t_uchar **)ar_push (&answer.void_ptr, lim_use_must_malloc, sizeof (t_uchar *)); if (!loc) goto espace_error; *loc = (t_uchar *)str_save_n (lim_use_must_malloc, path, end - path); if (!*loc) goto espace_error; path = end; if ((*path == ':') && (*(path + 1))) ++path; } } loc = (t_uchar **)ar_push (&answer.void_ptr, lim_use_must_malloc, sizeof (t_uchar *)); if (!loc) goto espace_error; *loc = 0; return answer.uchar_ptr_ptr; } /*(c free_path) * void free_path (alloc_limits limits, t_uchar ** path) * * Free a path allocated by `path_parse'. */ void free_path (alloc_limits limits, t_uchar ** path) { if (path) { t_converter aPath; int x; aPath.uchar_ptr_ptr = path; for (x = 0; path[x]; ++x) lim_free (limits, path[x]); ar_free (&aPath.void_ptr, limits); } } /*(c path_find_executable) * t_uchar * path_find_executable (alloc_limits limits, * const t_uchar ** path, * const t_uchar * tail); * * Search on `path' for a file named `tail' that is executable by * this process. Returns a newly allocated copy of the name of such a file * or 0. * * The file-name returned is formed by `file_name_in_vicinity (limits, path[N], tail)' * and should be freed by `must_free'. * * The effective user and group ids are used to check whether or not the * file can be executed (which should be the same rule used by the kernel). * * If allocation fails (but does not call `panic') this function returns 0. */ t_uchar * path_find_executable (alloc_limits limits, const t_uchar ** path, const t_uchar * tail) { int x; t_uchar * answer; int euid; int egid; euid = geteuid (); egid = getegid (); x = 0; while (path[x]) { struct stat stat; int stat_ok; int errn; answer = file_name_in_vicinity (limits, path[x], tail); if (!answer) return 0; stat_ok = vu_stat (&errn, answer, &stat); if (stat_ok == 0) { if (euid == stat.st_uid) { if (stat.st_mode & S_IXUSR) return answer; } if (egid == stat.st_gid) { if (stat.st_mode & S_IXGRP) return answer; } if (stat.st_mode & S_IXOTH) return answer; } lim_free (limits, answer); ++x; } answer = 0; return answer; } tla-1.3.5+dfsg/src/hackerlab/fs/Makefile.in0000644000175000017500000000027110457621774017132 0ustar useruser include $(makefiles)/library-objects.mk ifeq ($(cgs__install_hackerlab),1) include $(makefiles)/install-includes.mk endif # tag: Tom Lord Tue Dec 4 14:52:07 2001 (fs/Makefile.in) # tla-1.3.5+dfsg/src/hackerlab/fs/cwd.c0000644000175000017500000000313510457621774016010 0ustar useruser/* cwd.c: * **************************************************************** * Copyright (C) 2002 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/bugs/panic.h" #include "hackerlab/os/errno.h" #include "hackerlab/os/unistd.h" #include "hackerlab/char/str.h" #include "hackerlab/fs/cwd.h" #include "config-options.h" #if cfg__enable_pathcompress==1 #include "hackerlab/vu/vu-pathcompress.h" #endif t_uchar * safe_current_working_directory (void) { int ign; char * it; it = current_working_directory (&ign, 0); if (!it) panic ("unable to compute current working directory"); return it; } char * current_working_directory (int * errn, struct alloc_limits * limits) { char * path; size_t sizeof_path; sizeof_path = 4096; path = lim_malloc (limits, sizeof_path); if (!path) { enomem_error: *errn = ENOMEM; if (path) lim_free (limits, path); return 0; } while (1) { #if cfg__enable_pathcompress==1 if (pathcompress_getcwd (path, sizeof_path)) #else if (getcwd (path, sizeof_path)) #endif { char * answer; answer = lim_realloc (limits, path, str_length (path) + 1); if (!answer) goto enomem_error; return answer; } else if (errno == ERANGE) { char * new_path; sizeof_path *= 2; new_path = lim_realloc (limits, path, sizeof_path); if (!new_path) goto enomem_error; } else { *errn = errno; lim_free (limits, path); return 0; } } } /* tag: Tom Lord Fri Feb 22 04:10:53 2002 (cwd.c) */ tla-1.3.5+dfsg/src/hackerlab/fs/PLUGIN/0000755000175000017500000000000010457621774016063 5ustar userusertla-1.3.5+dfsg/src/hackerlab/fs/PLUGIN/REQ0000644000175000017500000000002410457621774016431 0ustar useruservu fs fs libboot tla-1.3.5+dfsg/src/hackerlab/fs/cwd.h0000644000175000017500000000113510457621774016013 0ustar useruser/* cwd.h: * **************************************************************** * Copyright (C) 2002 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__FS__CWD_H #define INCLUDE__FS__CWD_H #include "hackerlab/mem/alloc-limits.h" /* automatically generated __STDC__ prototypes */ extern t_uchar * safe_current_working_directory (void); extern char * current_working_directory (int * errn, struct alloc_limits * limits); #endif /* INCLUDE__FS__CWD_H */ /* tag: Tom Lord Sat Jan 5 15:26:10 2002 (cwd.h) */ tla-1.3.5+dfsg/src/hackerlab/obqueues/0000755000175000017500000000000010457621774016305 5ustar userusertla-1.3.5+dfsg/src/hackerlab/obqueues/Makefile.in0000644000175000017500000000027710457621774020360 0ustar useruserinclude $(makefiles)/library-objects.mk ifeq ($(cgs__install_hackerlab),1) include $(makefiles)/install-includes.mk endif # tag: Tom Lord Thu Nov 4 09:51:39 2004 (obqueues/Makefile.in) # tla-1.3.5+dfsg/src/hackerlab/obqueues/obqueue.h0000644000175000017500000001411210457621774020122 0ustar useruser/* obqueue.h: * **************************************************************** * Copyright (C) 2004 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBAWIKI__OBQUEUE_H #define INCLUDE__LIBAWIKI__OBQUEUE_H #include "hackerlab/mem/alloc-limits.h" typedef struct obqueue t_obqueue; typedef struct obqueue_type t_obqueue_type; typedef int (*t_obqueue_init_fn) (t_obqueue * ot, alloc_limits limits, ssize_t elt_size, t_obqueue_type * type, void * closure, void * mem, ssize_t n_elts); typedef void (*t_obqueue_uninit_fn) (t_obqueue * ot, alloc_limits limits, ssize_t elt_size, t_obqueue_type * type, void * closure, void * mem, ssize_t n_elts); struct obqueue_type { t_obqueue_init_fn init; t_obqueue_uninit_fn uninit; }; struct obqueue { ssize_t _head; ssize_t _tail; t_uchar * _storage; }; /* automatically generated __STDC__ prototypes */ extern int init_obqueue (t_obqueue * oq, alloc_limits limits, ssize_t elt_size, t_obqueue_type * type, void * closure); extern void uninit_obqueue (t_obqueue * oq, alloc_limits limits, ssize_t elt_size, t_obqueue_type * type, void * closure); extern ssize_t obqueue__room (t_obqueue * oq, alloc_limits limits, ssize_t elt_size, t_obqueue_type * type, void * closure); extern int obqueue_is_empty (t_obqueue * oq, alloc_limits limits, ssize_t elt_size, t_obqueue_type * type, void * closure); extern int obqueue_size (t_obqueue * oq, alloc_limits limits, ssize_t elt_size, t_obqueue_type * type, void * closure); extern ssize_t obqueue__nth_place (t_obqueue * oq, alloc_limits limits, ssize_t elt_size, t_obqueue_type * type, void * closure, ssize_t n); extern void * obqueue_peek (t_obqueue * oq, alloc_limits limits, ssize_t elt_size, t_obqueue_type * type, void * closure); extern void * obqueue_n (t_obqueue * oq, alloc_limits limits, ssize_t elt_size, t_obqueue_type * type, void * closure, ssize_t n); extern void * obqueue_burst (ssize_t * len_returned, t_obqueue * oq, alloc_limits limits, ssize_t elt_size, t_obqueue_type * type, void * closure, ssize_t n, ssize_t len); extern void * obqueue_range (t_obqueue * oq, alloc_limits limits, ssize_t elt_size, t_obqueue_type * type, void * closure, ssize_t n, ssize_t len); extern void * obqueue_push (t_obqueue * oq, alloc_limits limits, ssize_t elt_size, t_obqueue_type * type, void * closure); extern int obqueue_push_n (t_obqueue * oq, alloc_limits limits, ssize_t elt_size, t_obqueue_type * type, void * closure, ssize_t n); extern void obqueue_pop (t_obqueue * oq, alloc_limits limits, ssize_t elt_size, t_obqueue_type * type, void * closure); extern void obqueue_pop_n (t_obqueue * oq, alloc_limits limits, ssize_t elt_size, t_obqueue_type * type, void * closure, ssize_t n); extern void * obqueue_append (t_obqueue * oq, alloc_limits limits, ssize_t elt_size, t_obqueue_type * type, void * closure); extern int obqueue_append_n (t_obqueue * oq, alloc_limits limits, ssize_t elt_size, t_obqueue_type * type, void * closure, ssize_t n); extern void obqueue_pop_last (t_obqueue * oq, alloc_limits limits, ssize_t elt_size, t_obqueue_type * type, void * closure); extern void obqueue_pop_last_n (t_obqueue * oq, alloc_limits limits, ssize_t elt_size, t_obqueue_type * type, void * closure, ssize_t n); #endif /* INCLUDE__LIBAWIKI__OBQUEUE_H */ /* tag: Tom Lord Fri Oct 22 16:25:11 2004 (obqueue.h) */ tla-1.3.5+dfsg/src/hackerlab/obqueues/obqueue.c0000644000175000017500000004071510457621774020125 0ustar useruser/* obqueue.c: * **************************************************************** * Copyright (C) 2004 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/mem/mem.h" #include "hackerlab/arrays/ar.h" #include "hackerlab/obqueues/obqueue.h" /* __STDC__ prototypes for static functions */ static ssize_t obqueue__head (t_obqueue * oq, alloc_limits limits, ssize_t elt_size, t_obqueue_type * type, void * closure); static ssize_t obqueue__tail (t_obqueue * oq, alloc_limits limits, ssize_t elt_size, t_obqueue_type * type, void * closure); static ssize_t ideal_room_for_size (ssize_t s); static int ensure_room (t_obqueue * oq, alloc_limits limits, ssize_t elt_size, t_obqueue_type * type, void * closure, ssize_t n_more); static void uninit_elements (t_obqueue * oq, alloc_limits limits, ssize_t elt_size, t_obqueue_type * type, void * closure, ssize_t from, ssize_t to); static int init_elements (t_obqueue * oq, alloc_limits limits, ssize_t elt_size, t_obqueue_type * type, void * closure, ssize_t from, ssize_t to); int init_obqueue (t_obqueue * oq, alloc_limits limits, ssize_t elt_size, t_obqueue_type * type, void * closure) { if (!oq) return -1; mem_set0 ((t_uchar *)oq, sizeof (*oq)); return 0; } void uninit_obqueue (t_obqueue * oq, alloc_limits limits, ssize_t elt_size, t_obqueue_type * type, void * closure) { if (!oq) return; if (type && type->uninit) { ssize_t r; ssize_t h; ssize_t t; r = obqueue__room (oq, limits, elt_size, type, closure); h = obqueue__head (oq, limits, elt_size, type, closure); t = obqueue__tail (oq, limits, elt_size, type, closure); if (h < t) { type->uninit (oq, limits, elt_size, type, closure, (void *)(oq->_storage + h * elt_size), t - h); } else if (t < h) { type->uninit (oq, limits, elt_size, type, closure, (void *)(oq->_storage), t); type->uninit (oq, limits, elt_size, type, closure, (void *)(oq->_storage + h * elt_size), r - h); } } ar_free ((void **)&oq->_storage, limits); mem_set0 ((t_uchar *)oq, sizeof (*oq)); } ssize_t obqueue__room (t_obqueue * oq, alloc_limits limits, ssize_t elt_size, t_obqueue_type * type, void * closure) { if (!oq) return 0; else return (ssize_t)ar_size ((void *)oq->_storage, limits, elt_size); } static ssize_t obqueue__head (t_obqueue * oq, alloc_limits limits, ssize_t elt_size, t_obqueue_type * type, void * closure) { if (!oq) return 0; else return oq->_head; } static ssize_t obqueue__tail (t_obqueue * oq, alloc_limits limits, ssize_t elt_size, t_obqueue_type * type, void * closure) { if (!oq) return 0; else return oq->_tail; } int obqueue_is_empty (t_obqueue * oq, alloc_limits limits, ssize_t elt_size, t_obqueue_type * type, void * closure) { return ( obqueue__head (oq, limits, elt_size, type, closure) == obqueue__tail (oq, limits, elt_size, type, closure)); } int obqueue_size (t_obqueue * oq, alloc_limits limits, ssize_t elt_size, t_obqueue_type * type, void * closure) { ssize_t h; ssize_t t; ssize_t r; h = obqueue__head (oq, limits, elt_size, type, closure); t = obqueue__tail (oq, limits, elt_size, type, closure); r = obqueue__room (oq, limits, elt_size, type, closure); if (h <= t) return t - h; else return (t + (r - h)); } ssize_t obqueue__nth_place (t_obqueue * oq, alloc_limits limits, ssize_t elt_size, t_obqueue_type * type, void * closure, ssize_t n) { ssize_t s; ssize_t h; ssize_t t; ssize_t r; s = obqueue_size (oq, limits, elt_size, type, closure); if (n < 0) n += s; if (n < 0) return -1; if (n >= s) return -1; h = obqueue__head (oq, limits, elt_size, type, closure); t = obqueue__tail (oq, limits, elt_size, type, closure); r = obqueue__room (oq, limits, elt_size, type, closure); if (h < t) { return h + n; } else if ((r - h) > n) { return h + n; } else { return n - (r - h); } } void * obqueue_peek (t_obqueue * oq, alloc_limits limits, ssize_t elt_size, t_obqueue_type * type, void * closure) { return obqueue_n (oq, limits, elt_size, type, closure, 0); } void * obqueue_n (t_obqueue * oq, alloc_limits limits, ssize_t elt_size, t_obqueue_type * type, void * closure, ssize_t n) { ssize_t place; place = obqueue__nth_place (oq, limits, elt_size, type, closure, n); if (place < 0) return 0; return oq->_storage + place * elt_size; } void * obqueue_burst (ssize_t * len_returned, t_obqueue * oq, alloc_limits limits, ssize_t elt_size, t_obqueue_type * type, void * closure, ssize_t n, ssize_t len) { ssize_t s; ssize_t h; ssize_t t; ssize_t r; ssize_t n_place; ssize_t end_place; void * answer; s = obqueue_size (oq, limits, elt_size, type, closure); h = obqueue__head (oq, limits, elt_size, type, closure); t = obqueue__tail (oq, limits, elt_size, type, closure); r = obqueue__room (oq, limits, elt_size, type, closure); n_place = obqueue__nth_place (oq, limits, elt_size, type, closure, n); end_place = obqueue__nth_place (oq, limits, elt_size, type, closure, n + len - 1); if ((n_place < 0) || (end_place < 0)) return 0; answer = oq->_storage + n_place * elt_size; if (len_returned) { if (n_place >= h) { if (end_place >= n_place) *len_returned = len; else *len_returned = (r - n_place); } else { if (end_place < t) *len_returned = len; else *len_returned = t - n_place; } } return answer; } void * obqueue_range (t_obqueue * oq, alloc_limits limits, ssize_t elt_size, t_obqueue_type * type, void * closure, ssize_t n, ssize_t len) { ssize_t s; ssize_t h; ssize_t t; ssize_t r; ssize_t n_place; ssize_t end_place; void * answer; s = obqueue_size (oq, limits, elt_size, type, closure); h = obqueue__head (oq, limits, elt_size, type, closure); t = obqueue__tail (oq, limits, elt_size, type, closure); r = obqueue__room (oq, limits, elt_size, type, closure); n_place = obqueue__nth_place (oq, limits, elt_size, type, closure, n); end_place = obqueue__nth_place (oq, limits, elt_size, type, closure, n + len - 1); if ((n_place < 0) || (end_place < 0)) return 0; answer = oq->_storage + n_place * elt_size; if (n_place >= h) { if (end_place >= n_place) return answer; } else { if (end_place <= t) return answer; } /* buffer needs to be rotated. * * stuff-a tail=gap head=stuff-b * ^ * N */ { t_uchar * new_array = 0; ssize_t new_r; ssize_t h_len; new_r = ideal_room_for_size (s); if (0 > ar_setsize ((void **)&new_array, limits, new_r, elt_size)) { return 0; } h_len = (r - h); mem_move (new_array, oq->_storage + h * elt_size, h_len * elt_size); mem_move (new_array + h_len * elt_size, oq->_storage, t * elt_size); ar_free ((void **)&oq->_storage, limits); oq->_storage = new_array; oq->_head = 0; oq->_tail = s; } return oq->_storage + n * elt_size; } static ssize_t ideal_room_for_size (ssize_t s) { s += 1; if (s <= 0) return 0; if (s < 256) return 16 * ((s + 15) / 16); if (s < 10240) return 256 * ((s + 255) / 256); return 10240 * ((s + 10239) / 10240); } void * obqueue_push (t_obqueue * oq, alloc_limits limits, ssize_t elt_size, t_obqueue_type * type, void * closure) { ssize_t h; ssize_t r; void * answer; if (0 > ensure_room (oq, limits, elt_size, type, closure, 1)) return 0; h = obqueue__head (oq, limits, elt_size, type, closure); r = obqueue__room (oq, limits, elt_size, type, closure); --h; if (h < 0) h = (r - 1); answer = oq->_storage + h * elt_size; if (type && type->init) { if (0 > type->init (oq, limits, elt_size, type, closure, answer, 1)) return 0; } else { mem_set0 ((t_uchar *)answer, elt_size); } oq->_head = h; return answer; } int obqueue_push_n (t_obqueue * oq, alloc_limits limits, ssize_t elt_size, t_obqueue_type * type, void * closure, ssize_t n) { ssize_t h; ssize_t saved_head; ssize_t r; if (0 > ensure_room (oq, limits, elt_size, type, closure, n)) return -1; h = obqueue__head (oq, limits, elt_size, type, closure); saved_head = h; r = obqueue__room (oq, limits, elt_size, type, closure); h = h - n; if (h < 0) h = (r + h); oq->_head = h; if (0 > init_elements (oq, limits, elt_size, type, closure, 0, n)) { oq->_head = saved_head; return -1; } return 0; } void obqueue_pop (t_obqueue * oq, alloc_limits limits, ssize_t elt_size, t_obqueue_type * type, void * closure) { if (obqueue_is_empty (oq, limits, elt_size, type, closure)) return; if (type && type->uninit) type->uninit (oq, limits, elt_size, type, closure, (void *)(oq->_storage + oq->_head * elt_size), 1); ++oq->_head; if (oq->_head >= obqueue__room (oq, limits, elt_size, type, closure)) oq->_head = 0; } void obqueue_pop_n (t_obqueue * oq, alloc_limits limits, ssize_t elt_size, t_obqueue_type * type, void * closure, ssize_t n) { if (obqueue_is_empty (oq, limits, elt_size, type, closure)) return; if (n > obqueue_size (oq, limits, elt_size, type, closure)) n = obqueue_size (oq, limits, elt_size, type, closure); if (n <= 0) return; uninit_elements (oq, limits, elt_size, type, closure, 0, n); oq->_head += n; if (oq->_head >= obqueue__room (oq, limits, elt_size, type, closure)) oq->_head = (oq->_head - obqueue__room (oq, limits, elt_size, type, closure)); } void * obqueue_append (t_obqueue * oq, alloc_limits limits, ssize_t elt_size, t_obqueue_type * type, void * closure) { void * answer; ssize_t t; if (0 > ensure_room (oq, limits, elt_size, type, closure, 1)) return 0; answer = oq->_storage + oq->_tail * elt_size; t = oq->_tail + 1; if (t >= obqueue__room (oq, limits, elt_size, type, closure)) t = 0; if (type && type->init) { if (0 > type->init (oq, limits, elt_size, type, closure, answer, 1)) return 0; } else { mem_set0 ((t_uchar *)answer, elt_size); } oq->_tail = t; return answer; } int obqueue_append_n (t_obqueue * oq, alloc_limits limits, ssize_t elt_size, t_obqueue_type * type, void * closure, ssize_t n) { ssize_t saved_s; ssize_t t; ssize_t saved_t; ssize_t r; if (0 > ensure_room (oq, limits, elt_size, type, closure, n)) return -1; saved_s = obqueue_size (oq, limits, elt_size, type, closure); saved_t = obqueue__tail (oq, limits, elt_size, type, closure); t = n + saved_t; r = obqueue__room (oq, limits, elt_size, type, closure); if (t >= r) t = t - r; oq->_tail = t; if (0 > init_elements (oq, limits, elt_size, type, closure, saved_s, saved_s + n)) { oq->_tail = saved_t; return -1; } return 0; } void obqueue_pop_last (t_obqueue * oq, alloc_limits limits, ssize_t elt_size, t_obqueue_type * type, void * closure) { if (obqueue_is_empty (oq, limits, elt_size, type, closure)) return; --oq->_tail; if (oq->_tail < 0) oq->_tail = (obqueue__room (oq, limits, elt_size, type, closure) - 1); if (type && type->uninit) { type->uninit (oq, limits, elt_size, type, closure, (void *)(oq->_storage + oq->_tail * elt_size), 1); } } void obqueue_pop_last_n (t_obqueue * oq, alloc_limits limits, ssize_t elt_size, t_obqueue_type * type, void * closure, ssize_t n) { ssize_t s; if (obqueue_is_empty (oq, limits, elt_size, type, closure)) return; s = obqueue_size (oq, limits, elt_size, type, closure); if (n > s) n = s; uninit_elements (oq, limits, elt_size, type, closure, (s - n), s); oq->_tail -= n; if (oq->_tail < 0) oq->_tail = (obqueue__room (oq, limits, elt_size, type, closure) + oq->_tail); } static int ensure_room (t_obqueue * oq, alloc_limits limits, ssize_t elt_size, t_obqueue_type * type, void * closure, ssize_t n_more) { ssize_t h; ssize_t t; ssize_t s; ssize_t r; ssize_t new_r; if (n_more < 0) return -1; h = obqueue__head (oq, limits, elt_size, type, closure); t = obqueue__tail (oq, limits, elt_size, type, closure); s = obqueue_size (oq, limits, elt_size, type, closure); r = obqueue__room (oq, limits, elt_size, type, closure); if ((r - s) > n_more) return 0; new_r = ideal_room_for_size (s + n_more); if (0 > ar_setsize ((void **)&oq->_storage, limits, new_r, elt_size)) return -1; if (h > t) { mem_move (oq->_storage + (new_r - (r - h)) * elt_size, oq->_storage + h * elt_size, (r - h) * elt_size); oq->_head = (new_r - (r - h)); } return 0; } static void uninit_elements (t_obqueue * oq, alloc_limits limits, ssize_t elt_size, t_obqueue_type * type, void * closure, ssize_t from, ssize_t to) { if (type && type->uninit) { ssize_t pos; ssize_t todo; pos = from; todo = (to - from); while (todo) { void * burst; ssize_t burst_amt; burst = obqueue_burst (&burst_amt, oq, limits, elt_size, type, closure, pos, todo); type->uninit (oq, limits, elt_size, type, closure, burst, burst_amt); pos += burst_amt; todo -= burst_amt; } } } static int init_elements (t_obqueue * oq, alloc_limits limits, ssize_t elt_size, t_obqueue_type * type, void * closure, ssize_t from, ssize_t to) { ssize_t pos; ssize_t todo; pos = from; todo = (to - from); while (todo) { void * burst; ssize_t burst_amt; burst = obqueue_burst (&burst_amt, oq, limits, elt_size, type, closure, pos, todo); if (!type || !type->init) { mem_set0 ((t_uchar *)burst, burst_amt); } else { if (0 > type->init (oq, limits, elt_size, type, closure, burst, burst_amt)) { uninit_elements (oq, limits, elt_size, type, closure, from, to - todo); return -1; } } pos += burst_amt; todo -= burst_amt; } return 0; } /* tag: Tom Lord Fri Oct 22 16:27:00 2004 (obqueue.c) */ tla-1.3.5+dfsg/src/hackerlab/obqueues/PLUGIN/0000755000175000017500000000000010457621774017303 5ustar userusertla-1.3.5+dfsg/src/hackerlab/obqueues/PLUGIN/REQ0000644000175000017500000000004710457621774017656 0ustar useruserarrays obqueues obqueues libhackerlab tla-1.3.5+dfsg/src/hackerlab/edit/0000755000175000017500000000000010457621774015402 5ustar userusertla-1.3.5+dfsg/src/hackerlab/edit/Makefile.in0000644000175000017500000000027310457621774017451 0ustar useruser include $(makefiles)/library-objects.mk ifeq ($(cgs__install_hackerlab),1) include $(makefiles)/install-includes.mk endif # tag: Tom Lord Fri Jan 2 09:53:36 2004 (edit/Makefile.in) # tla-1.3.5+dfsg/src/hackerlab/edit/PLUGIN/0000755000175000017500000000000010457621774016400 5ustar userusertla-1.3.5+dfsg/src/hackerlab/edit/PLUGIN/REQ0000644000175000017500000000005010457621774016745 0ustar useruserlibboot2 edit edit libhackerlab tla-1.3.5+dfsg/src/hackerlab/=feature-map0000644000175000017500000000204110457621774016700 0ustar useruser; up to patch-19 graphs: obmarkers otables oblists handles patch-19 add digraphs patch-18 add graphs properties: oblists patch-17 add properties identifiers: oblists patch-16 more for identifiers (symbol tables) patch-15 add identifiers dynid: oblists patch-14 add dynid obmarkers: oblists patch-13 add obmarkers handles: obtables oblists patch-11 add handles patch-12 makefile fix for handles qlinks: patch-9 add qlinks oblists: obqueues patch-10 add t_list_ssize_t -- oblists specialized for ssize_t values patch-6 fix oblists tag patch-5 add oblists obqueues: patch-4 obqueues tag correction patch-3 obqueues added obtables: patch-2 fix tree-lint issues with obtables patch-1 Add the obtables modules ignored: patch-8 merge from obtables feature patch-7 add =feature-map file base-0 tag of lord@emf.net--gnu-arch-2004/hackerlab--devo--1.1--patch-2 ; tag: Tom Lord Fri Nov 5 08:19:09 2004 (hackerlab/=feature-map) tla-1.3.5+dfsg/src/hackerlab/edstrings/0000755000175000017500000000000010457621774016457 5ustar userusertla-1.3.5+dfsg/src/hackerlab/edstrings/edstring.h0000644000175000017500000000754210457621774020457 0ustar useruser/* edstring.h: * **************************************************************** * Copyright (C) 2004 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBAWIKI__EDSTRING_H #define INCLUDE__LIBAWIKI__EDSTRING_H #include "hackerlab/oblists/oblist.h" #include "hackerlab/obmarkers/obmarkers.h" typedef struct edstring t_edstring; struct edstring { t_oblist _str; t_obmarker_table _markers; }; /* automatically generated __STDC__ prototypes */ extern int init_edstring (t_edstring * bs, alloc_limits limits, ssize_t elt_size); extern int uninit_edstring (t_edstring * bs, alloc_limits limits, ssize_t elt_size); extern ssize_t edstring_room (t_edstring * bs, alloc_limits limits, ssize_t elt_size); extern int edstring_is_empty (t_edstring * bs, alloc_limits limits, ssize_t elt_size); extern ssize_t edstring_size (t_edstring * bs, alloc_limits limits, ssize_t elt_size); extern t_uchar * edstring_burst (ssize_t * len_returned, t_edstring * bs, alloc_limits limits, ssize_t elt_size, ssize_t n, ssize_t len); extern t_uchar * edstring_range (t_edstring * bs, alloc_limits limits, ssize_t elt_size, ssize_t n, ssize_t len); extern int edstring_insert_n (t_edstring * bs, alloc_limits limits, ssize_t elt_size, ssize_t before_pos, t_uchar * data, ssize_t len); extern int edstring_delete_n (t_edstring * bs, alloc_limits limits, ssize_t elt_size, ssize_t pos, ssize_t len); extern ssize_t alloc_edstring_marker (t_edstring * bs, alloc_limits limits, ssize_t elt_size, ssize_t initial_pos); extern int free_edstring_marker (t_edstring * bs, alloc_limits limits, ssize_t elt_size, ssize_t id); extern ssize_t edstring_n_markers (t_edstring * bs, alloc_limits limits, ssize_t elt_size); extern ssize_t edstring_marker_room (t_edstring * bs, alloc_limits limits, ssize_t elt_size); extern ssize_t edstring_marker_pos (t_edstring * bs, alloc_limits limits, ssize_t elt_size, ssize_t id); extern int edstring_set_marker_pos (t_edstring * bs, alloc_limits limits, ssize_t elt_size, ssize_t id, ssize_t new_pos); extern ssize_t edstring_marker_handle_set (t_edstring * bs, alloc_limits limits, ssize_t elt_size, ssize_t m); #endif /* INCLUDE__LIBAWIKI__EDSTRING_H */ /* tag: Tom Lord Sat Nov 20 20:30:58 2004 (edstrings/edstring.h) */ tla-1.3.5+dfsg/src/hackerlab/edstrings/Makefile.in0000644000175000017500000000030010457621774020515 0ustar useruserinclude $(makefiles)/library-objects.mk ifeq ($(cgs__install_hackerlab),1) include $(makefiles)/install-includes.mk endif # tag: Tom Lord Sat Nov 20 20:40:48 2004 (edstrings/Makefile.in) # tla-1.3.5+dfsg/src/hackerlab/edstrings/PLUGIN/0000755000175000017500000000000010457621774017455 5ustar userusertla-1.3.5+dfsg/src/hackerlab/edstrings/PLUGIN/REQ0000644000175000017500000000012110457621774020021 0ustar useruseroblists edstrings obmarkers edstrings handles edstrings edstrings libhackerlab tla-1.3.5+dfsg/src/hackerlab/edstrings/edstring.c0000644000175000017500000001164510457621774020451 0ustar useruser/* edstring.c: * **************************************************************** * Copyright (C) 2004 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/bugs/panic.h" #include "hackerlab/mem/mem.h" #include "hackerlab/edstrings/edstring.h" /* __STDC__ prototypes for static functions */ int init_edstring (t_edstring * bs, alloc_limits limits, ssize_t elt_size) { if (!bs) return -1; if (0 > init_oblist (&bs->_str, limits, elt_size, 0, 0)) return -1; if (0 > init_obmarker_table (&bs->_markers, limits)) return -1; return 0; } int uninit_edstring (t_edstring * bs, alloc_limits limits, ssize_t elt_size) { if (!bs) return -1; if (0 > uninit_obmarker_table (&bs->_markers, limits)) return -1; uninit_oblist (&bs->_str, limits, elt_size, 0, 0); return 0; } ssize_t edstring_room (t_edstring * bs, alloc_limits limits, ssize_t elt_size) { if (!bs) return 0; return oblist_room (&bs->_str, limits, elt_size, 0, 0); } int edstring_is_empty (t_edstring * bs, alloc_limits limits, ssize_t elt_size) { if (!bs) return 0; return oblist_is_empty (&bs->_str, limits, elt_size, 0, 0); } ssize_t edstring_size (t_edstring * bs, alloc_limits limits, ssize_t elt_size) { if (!bs) return 0; return oblist_size (&bs->_str, limits, elt_size, 0, 0); } t_uchar * edstring_burst (ssize_t * len_returned, t_edstring * bs, alloc_limits limits, ssize_t elt_size, ssize_t n, ssize_t len) { if (!bs) return 0; return (t_uchar *)oblist_burst (len_returned, &bs->_str, limits, elt_size, 0, 0, n, len); } t_uchar * edstring_range (t_edstring * bs, alloc_limits limits, ssize_t elt_size, ssize_t n, ssize_t len) { if (!bs) return 0; return (t_uchar *)oblist_range (&bs->_str, limits, elt_size, 0, 0, n, len); } int edstring_insert_n (t_edstring * bs, alloc_limits limits, ssize_t elt_size, ssize_t before_pos, t_uchar * data, ssize_t len) { if (!bs) return -1; if (0 > oblist_insert_n (&bs->_str, limits, elt_size, 0, 0, before_pos, len, (void *)data)) return -1; if (0 > obmarker_insert_n (&bs->_markers, limits, before_pos, len)) return -1; return 0; } int edstring_delete_n (t_edstring * bs, alloc_limits limits, ssize_t elt_size, ssize_t pos, ssize_t len) { if (!bs) return -1; if (0 > oblist_delete_n (&bs->_str, limits, elt_size, 0, 0, pos, len)) return -1; if (0 > obmarker_delete_n (&bs->_markers, limits, pos, len)) return -1; return 0; } ssize_t alloc_edstring_marker (t_edstring * bs, alloc_limits limits, ssize_t elt_size, ssize_t initial_pos) { ssize_t str_size; if (!bs) return -1; str_size = edstring_size (bs, limits, elt_size); if ((initial_pos < -1) || (initial_pos > str_size)) return -1; return obmarker_alloc (&bs->_markers, limits, initial_pos); } int free_edstring_marker (t_edstring * bs, alloc_limits limits, ssize_t elt_size, ssize_t id) { return obmarker_free (&bs->_markers, limits, id); } ssize_t edstring_n_markers (t_edstring * bs, alloc_limits limits, ssize_t elt_size) { if (!bs) return 0; else return obmarker_n_markers (&bs->_markers, limits); } ssize_t edstring_marker_room (t_edstring * bs, alloc_limits limits, ssize_t elt_size) { if (!bs) return 0; else return obmarker_room (&bs->_markers, limits); } ssize_t edstring_marker_pos (t_edstring * bs, alloc_limits limits, ssize_t elt_size, ssize_t id) { if (!bs) return -1; return obmarker_pos (&bs->_markers, limits, id); } int edstring_set_marker_pos (t_edstring * bs, alloc_limits limits, ssize_t elt_size, ssize_t id, ssize_t new_pos) { if (!bs) return -1; return obmarker_set_pos (&bs->_markers, limits, id, new_pos); } ssize_t edstring_marker_handle_set (t_edstring * bs, alloc_limits limits, ssize_t elt_size, ssize_t m) { if (!bs) return -1; return obmarker_handle_set (&bs->_markers, limits, m); } /* tag: Tom Lord Sat Nov 20 20:31:40 2004 (edstrings/edstring.c) */ tla-1.3.5+dfsg/src/hackerlab/mem/0000755000175000017500000000000010457621774015233 5ustar userusertla-1.3.5+dfsg/src/hackerlab/mem/mem.h0000644000175000017500000000161310457621774016163 0ustar useruser/* mem.h - array-of-byte decls * **************************************************************** * Copyright (C) 1998, 2000 Thomas Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__MEM__MEM_H #define INCLUDE__MEM__MEM_H #include "hackerlab/machine/types.h" /* automatically generated __STDC__ prototypes */ extern void mem_set (t_uchar * mem, unsigned int c, size_t size); extern void mem_set0 (t_uchar * mem, size_t n); extern void mem_move (t_uchar * to, const t_uchar * from, size_t amt); extern void mem_cpy (void * to, void const * from, size_t amt); extern int mem_cmp (const t_uchar * m1, const t_uchar * m2, size_t amt); extern size_t mem_occurrences (const t_uchar * mem, unsigned int c, size_t size); #endif /* INCLUDE__MEM__MEM_H */ tla-1.3.5+dfsg/src/hackerlab/mem/alloc-limits.h0000644000175000017500000000457010457621774020003 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:41:27 2001 (alloc-limits.h) */ /* alloc-limits.h - * **************************************************************** * Copyright (C) 2000 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__MEM__ALLOC_LIMITS_H #define INCLUDE__MEM__ALLOC_LIMITS_H #include "hackerlab/machine/types.h" struct alloc_limits; typedef struct alloc_limits * alloc_limits; typedef void (*lim_free_memory_fn)(void * closure, size_t needed); extern struct alloc_limits lim_use_malloc_limits; #define lim_use_malloc (&lim_use_malloc_limits) #define lim_use_must_malloc ((alloc_limits)0) extern struct alloc_limits lim_no_allocations_limits; #define lim_no_allocations (&lim_no_allocations_limits) #define LIM_END ((size_t)-1) /* automatically generated __STDC__ prototypes */ extern alloc_limits make_alloc_limits (t_uchar * name, size_t threshold, size_t failure_pt, int panic_on_failure, lim_free_memory_fn free_memory, void * closure); extern void free_alloc_limits (alloc_limits limits); extern size_t lim_set_threshold (alloc_limits it, size_t threshold); extern size_t lim_threshold (alloc_limits limits); extern size_t lim_set_failure_pt (alloc_limits limits, size_t failure_pt); extern size_t lim_failure_pt (alloc_limits limits); extern int lim_is_panic_on_failure (alloc_limits limits); extern int lim_set_panic_on_failure (alloc_limits limits, int value); extern size_t lim_in_use (alloc_limits limits); extern size_t lim_high_water_mark (alloc_limits limits); extern void * lim_malloc (alloc_limits limits, size_t amt); extern void * lim_zalloc (alloc_limits limits, size_t amt); extern void * lim_soft_malloc (alloc_limits limits, size_t amt); extern void * lim_realloc (alloc_limits limits, void * prev, size_t amt); extern void * lim_soft_realloc (alloc_limits limits, void * prev, size_t amt); extern void lim_free (alloc_limits limits, void * ptr); extern int lim_prepare (alloc_limits limits, size_t amt); extern void * lim_malloc_contiguous (alloc_limits limits, size_t base_size, ...); #endif /* INCLUDE__MEM__ALLOC_LIMITS_H */ tla-1.3.5+dfsg/src/hackerlab/mem/mem.c0000644000175000017500000000522710457621774016163 0ustar useruser/* mem.c - array-of-byte functions * **************************************************************** * Copyright (C) 1998, 2000 Thomas Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/mem/mem.h" /************************************************************************ *(h1 "Array-of-Byte Functions" * :includes ("hackerlab/mem/mem.h")) * * These functions operate on regions of memory as arrays of unsigned * bytes with no further interpretation. */ /*(c mem_set) * void mem_set (t_uchar * mem, unsigned int c, size_t size); * * Store `size' bytes of value `c' beginning at `mem'. */ void mem_set (t_uchar * mem, unsigned int c, size_t size) { while (size--) *(mem++) = c; } /*(c mem_set0) * void mem_set0 (t_uchar * mem, size_t n); * * Store `n' 0 bytes beginning at `mem'. */ void mem_set0 (t_uchar * mem, size_t n) { while (n--) *(mem++) = 0; } /*(c mem_move) * void mem_move (t_uchar * to, const t_uchar * from, size_t amt); * * Copy `amt' bytes from `from' to `to'. The source and destination * regions may overlap. */ void mem_move (t_uchar * to, const t_uchar * from, size_t amt) { if (from == to) return; if (from > to) { while (amt--) *to++ = *from++; } else { to += amt - 1; from += amt - 1; while (amt--) *to-- = *from--; } } /*(c mem_cpy) * void mem_cpy (void * to, const void * from, size_t amt); * * Copy `amt' bytes from `from' to `to'. The source and destination * regions may not overlap. */ void mem_cpy (void * to, const void * from, size_t amt) { if (from == to) return; while (amt--) *(char *)to++ = *(char const *)from++; } /*(c mem_cmp) * int mem_cmp (const t_uchar * m1, const t_uchar * m2, size_t amt); * * Compare `amt' bytes starting at `m1' and `m2'. If a difference is * found, immediately return -1 if the differing byte in `m1' is less * than the byte in `m2', 1 otherwise. If no difference is found, * return 0. */ int mem_cmp (const t_uchar * m1, const t_uchar * m2, size_t amt) { while (amt--) if (*m1++ != *m2++) { --m1; --m2; return (*m1 < *m2) ? -1 : 1; } return 0; } /*(c mem_occurrences) * size_t mem_occurrences (const t_uchar * mem, * unsigned int c, * size_t size); * * Search `size' bytes of data for occurences of byte `c' beginning at * `mem'. Return the number of occurences found. */ size_t mem_occurrences (const t_uchar * mem, unsigned int c, size_t size) { size_t x; x = 0; while (size--) if (*mem++ == c) ++x; return x; } tla-1.3.5+dfsg/src/hackerlab/mem/alloc-limits.c0000644000175000017500000004107710457621774020001 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:41:27 2001 (alloc-limits.c) */ /* alloc-limits.c - * **************************************************************** * Copyright (C) 2000 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/machine/alignment.h" #include "hackerlab/os/malloc.h" #include "hackerlab/os/stdarg.h" #include "hackerlab/bugs/panic.h" #include "hackerlab/mem/mem.h" #include "hackerlab/mem/must-malloc.h" #include "hackerlab/mem/alloc-limits.h" /************************************************************************ *(h1 "Allocation With Limitations" * :includes ("hackerlab/mem/alloc-limits.h")) * * |allocation limits| * |limited allocation| * * In some situations it is desriable for a subsystem of a program * to limit its use of memory, independently of the rest of the program. * The `alloc_limits' functions are for such situations. * * There are two steps to using the `alloc_limits' functions. First, * you create an `alloc_limits' object which specifies how much memory * your subsystem should, ideally, use, and how much it is permitted to use. * See xref:"make_alloc_limits". Second, use functions like `lim_malloc' * and `lim_free' instead of functions like `malloc' and `free' in the * subsystem to which the limits apply. * * */ /*(menu) */ #define SIZEOF_HEADER ((sizeof (size_t) > MACHINE_ALIGNMENT) ? sizeof (size_t) : MACHINE_ALIGNMENT) #define MEM_TO_HEADER(B) ((size_t *)((char *)(B) - SIZEOF_HEADER)) #define HEADER_TO_MEM(H) ((void *)((char *)(H) + SIZEOF_HEADER)) struct alloc_limits { t_uchar * name; size_t threshold; /* where does allocation trigger gc? */ size_t failure_pt; /* where does allocation fail? */ /* threshold == 0 never trigger gc * failure_pt == 0 never fail */ int panic_on_failure; size_t in_use; size_t high_water_mark; lim_free_memory_fn free_memory; void * closure; }; struct alloc_limits lim_use_malloc_limits = { "alloc_limits for generic malloc", 0, 0, 0, 0, 0, 0, 0 }; struct alloc_limits lim_no_allocations_limits = { "alloc_limits which prohibit allocation", 0, 1, 0, 1, 1, 0, 0 }; /************************************************************************ *(h2 "Specifying Allocation Limits") * * An object of the opaque type `alloc_limits' records the rules which * limit memory use in a particular subsystem. * */ /*(c make_alloc_limits) * alloc_limits make_alloc_limits (t_uchar * name, * size_t threshold, * size_t failure_pt, * int panic_on_failure, * lim_free_memory_fn free_memory, * void * closure); * * Create a new `alloc_limits' object. * * `name' is the name of the subsystem to which these allocation limits * apply. The name is useful for debugging purposes. * * `threshold' specifies an ideal limit on the amount of memory used * by your subsystem. If a subsystem attempts to allocate more than * `threshold' bytes, the `free_memory' function for that subsystem * is invoked (see below). `threshold' may be 0, in which case the * `free_memory' function is never invoked. * * `failure_pt' specifies an absolute limit on the amount of memory * used by your subsystem. Allocations beyond `failure_pt' fail * (return 0). * * `panic_on_failure', if non-0, means that if the failure point is * reached, or allocation fails, the program will exit with a * message to the standard error stream and a non-0 status. * If 0, allocation failures return 0. * * |$lim_free_memory_fn| * * `free_memory' is a function pointer: * * typedef void (*lim_free_memory_fn)(void * closure, * size_t needed); * * It is called immediately before an allocation that would exceed * `threshold' (if `threshold' is not 0). `closure' is as passed * to `make_alloc_limits' (see below). `needed' is the number of * bytes by which the proposed allocation causes the total amount of * memory used by the subsystem to exceed `threshold'. It is completely * safe to call `lim_free' from your `free_memory' function. It * is possible to call `lim_malloc' or `lim_realloc', but if your * program does this, `free_memory' must be reentrant. * * `closure' is an opaque value passed to `free_memory'. * * If a new `alloc_limits' object can not be allocated, this function * calls `panic' and does not return. * * As an alternative to calling `make_alloc_limits' in some situations, * three pre-defined allocation limits are declared in `alloc-limits.h': * * extern alloc_limits lim_use_malloc; * extern alloc_limits lim_use_must_malloc; * extern alloc_limits lim_no_allocations; * * Allocations performed with `lim_use_malloc' are unlimited and are * effectively like allocations performed with `malloc' or `realloc'. * Failed allocations return 0. * * Allocations performed with `lim_use_must_malloc' are unlimited and * are effectively like allocations performed with `must_malloc' or * `must_realloc'. Failed allocations cause the process to exit with * a non-0 status. * * Allocations performed with `lim_no_allocations' always fail and return * 0. `lim_free' has no effect when passed `lim_no_allocations'. */ alloc_limits make_alloc_limits (t_uchar * name, size_t threshold, size_t failure_pt, int panic_on_failure, lim_free_memory_fn free_memory, void * closure) { alloc_limits answer; answer = (alloc_limits)must_malloc (sizeof (struct alloc_limits)); answer->name = name; answer->threshold = threshold; answer->failure_pt = failure_pt; answer->panic_on_failure = panic_on_failure; answer->in_use = 0; answer->high_water_mark = 0; answer->free_memory = free_memory; answer->closure = closure; return answer; } /*(c free_alloc_limits) * void free_alloc_limits (alloc_limits limits); * * Free an allocation limits object. */ void free_alloc_limits (alloc_limits limits) { must_free ((void *)limits); } /*(c lim_set_threshold) * size_t lim_set_threshold (alloc_limits it, size_t threshold); * * Modify the `threshold' of an `alloc_limits' object. Return * the old `threshold'. * * This function does not immediately call `free_memory', even if * the total amount of memory allocated exceeds the new `threshold'. */ size_t lim_set_threshold (alloc_limits it, size_t threshold) { size_t old; old = it->threshold; it->threshold = threshold; return old; } /*(c lim_threshold) * size_t lim_threshold (alloc_limits limits); * * Return the current `threshold' of allocation limits `limits'. */ size_t lim_threshold (alloc_limits limits) { return limits->threshold; } /*(c lim_set_failure_pt) * size_t lim_set_failure_pt (alloc_limits limits, size_t failure_pt); * * Modify the `failure_pt' of an `alloc_limits' object. Return * the old `failure_pt'. * */ size_t lim_set_failure_pt (alloc_limits limits, size_t failure_pt) { size_t old; old = limits->failure_pt; limits->failure_pt = failure_pt; return old; } /*(c lim_failure_pt) * size_t lim_failure_pt (alloc_limits limits); * * Return the `failure_pt' of allocation limits `limits'. */ size_t lim_failure_pt (alloc_limits limits) { return limits->failure_pt; } /*(c lim_is_panic_on_failure) * int lim_is_panic_on_failure (alloc_limits limits); * * Return the value of the `panic_on_failure' flag of * allocation limits `limits'. */ int lim_is_panic_on_failure (alloc_limits limits) { return limits->panic_on_failure; } /*(c lim_set_panic_on_failure) * int lim_set_panic_on_failure (alloc_limits limits, int value); * * Set the `panic_on_failure' flag of allocation limits `limits'. * * Return the old value. */ int lim_set_panic_on_failure (alloc_limits limits, int value) { int was; was = limits->panic_on_failure; limits->panic_on_failure = value; return was; } /*(c lim_in_use) * size_t lim_in_use (alloc_limits limits); * * Return the amount (in bytes) of memory allocation charged * to `limits' and not yet freed. */ size_t lim_in_use (alloc_limits limits) { return limits->in_use; } /*(c lim_high_water_mark) * size_t lim_high_water_mark (alloc_limits limits); * * Return the largest amount (in bytes) of outstanding memory * allocation charged to `limits' during the lifetime of the process. */ size_t lim_high_water_mark (alloc_limits limits) { return limits->high_water_mark; } /************************************************************************ *(h2 "Allocating and Freeing") * * These functions allocate and free memory, similarly to * `malloc', `realloc', and `free', but with allocation limits. * */ /*(c lim_malloc) * void * lim_malloc (alloc_limits limits, size_t amt); * * Allocate `amt' bytes of memory. * * If the allocation would exceed the threshold of `limits', * invoke the `free_memory' function first. * * If the allocation would exceed the `failure_pt' of `limits', or if * the underlying `malloc' fails, return 0 (if the `panic_on_failure' * flag of `limits' is 0) or exit the process with a non-0 status (if * `panic_on_failure' is non-0). * * Adjust the `in_use' and `high_water_mark' of `limits'. * * If `limits' is 0, this function works like xref:"must_malloc". * */ void * lim_malloc (alloc_limits limits, size_t amt) { if (!limits) return must_malloc (amt); if (lim_prepare (limits, amt)) { if (limits->panic_on_failure) { panic_msg ("allocation failure"); panic (limits->name); } else return 0; } return lim_soft_malloc (limits, amt); } /*(c lim_zalloc) * void * lim_zalloc (alloc_limits limits, size_t amt); * * Use `lim_malloc' to attempt to allocate `amt' bytes * of memory. If allocation succeeds, initialize that * memory to all zero bytes. * * Return the allocated region or 0 if allocation fails. */ void * lim_zalloc (alloc_limits limits, size_t amt) { void * answer; answer = lim_malloc (limits, amt); if (answer) mem_set0 ((t_uchar *)answer, amt); return answer; } /*(c lim_soft_malloc) * void * lim_soft_malloc (alloc_limits limits, size_t amt); * * Allocate `amt' bytes of memory. Return the newly allocated memory. * * If the allocation would exceed the `failure_pt' of `limits', * or if the underlying `malloc' fails, return 0 (if the * `panic_on_failure' flag of `limits' is 0) or exit the * process with a non-0 status. * * Adjust the `in_use' and `high_water_mark' of `limits'. * * This function *does not* invoke the `free_memory' function of * `limits', even if the allocation would exceed the threshold of * `limits'. * * If `limits' is 0, this function works like xref:"must_malloc". * */ void * lim_soft_malloc (alloc_limits limits, size_t amt) { void * answer; if (!limits) return must_malloc (amt); if (limits->failure_pt && (limits->in_use + amt >= limits->failure_pt)) { if (limits->panic_on_failure) { panic_msg ("allocation failure"); panic (limits->name); } else return 0; } answer = (void *)malloc (amt + SIZEOF_HEADER); if (!answer) { if (limits->panic_on_failure) { panic_msg ("allocation failure"); panic (limits->name); } else return 0; } *(size_t *)answer = amt; limits->in_use += amt; if (limits->in_use > limits->high_water_mark) limits->high_water_mark = limits->in_use; return HEADER_TO_MEM (answer); } /*(c lim_realloc) * void * lim_realloc (alloc_limits limits, void * prev, size_t amt); * * Reallocate `prev' as `amt' bytes of memory. Copy (up to) `amt' bytes * of data from `prev' to the newly allocated memory. * * If the allocation would exceed the threshold of `limits', * invoke the `free_memory' function first. * * If the allocation would exceed the `failure_pt' of `limits', * or if the underlying `malloc' fails, return 0 (if the * `panic_on_failure' flag of `limits' is 0) or exit the * process with a non-0 status. * * Adjust the `in_use' and `high_water_mark' of `limits'. * * If `prev' is 0, this function behaves like `lim_malloc'. * * * If `limits' is 0, this function works like xref:"must_realloc". * */ void * lim_realloc (alloc_limits limits, void * prev, size_t amt) { void * base; size_t prev_amt; if (!limits) return must_realloc (prev, amt); if (!prev) return lim_malloc (limits, amt); base = MEM_TO_HEADER (prev); prev_amt = *(size_t *)base; if (amt > prev_amt) { if (lim_prepare (limits, amt - prev_amt)) { if (limits->panic_on_failure) { panic_msg ("allocation failure"); panic (limits->name); } else return 0; } } return lim_soft_realloc (limits, prev, amt); } /*(c lim_soft_realloc) * void * lim_soft_realloc (alloc_limits limits, * void * prev, * size_t amt); * * * Reallocate `prev' as `amt' bytes of memory. Copy (up to) `amt' bytes * of data from `prev' to the newly allocated memory. * * If the allocation would exceed the `failure_pt' of `limits', or if * the underlying `malloc' fails, return 0 (if the * `panic_on_failure' flag of `limits' is 0) or exit the * process with a non-0 status. * * Adjust the `in_use' and `high_water_mark' of `limits'. * * This function *does not* invoke the `free_memory' function of * `limits', even if the allocation would exceed the threshold of * `limits'. * * If `limits' is 0, this function works like xref:"must_realloc". * */ void * lim_soft_realloc (alloc_limits limits, void * prev, size_t amt) { void * base; size_t prev_amt; void * answer; if (!limits) return must_realloc (prev, amt); if (!prev) return lim_soft_malloc (limits, amt); base = MEM_TO_HEADER (prev); prev_amt = *(size_t *)base; if (amt > prev_amt) { if (limits->failure_pt && (limits->in_use + amt - prev_amt >= limits->failure_pt)) { if (limits->panic_on_failure) { panic_msg ("allocation failure"); panic (limits->name); } else return 0; } } answer = (void *)realloc (base, amt + SIZEOF_HEADER); if (!answer) { if (limits->panic_on_failure) { panic_msg ("allocation failure"); panic (limits->name); } else return 0; } *(size_t *)answer = amt; limits->in_use -= prev_amt; limits->in_use += amt; if (limits->in_use > limits->high_water_mark) limits->high_water_mark = limits->in_use; return HEADER_TO_MEM (answer); } /*(c lim_free) * void lim_free (alloc_limits limits, void * ptr); * * Free `ptr'. Adjust the `in_use' and `high_water_mark' values * of `limits'. * * If `limits' is 0, this function works like xref:"must_free". * */ void lim_free (alloc_limits limits, void * ptr) { void * base; size_t amt; if (limits == lim_no_allocations) return; if (!ptr) return; if (!limits) { must_free (ptr); return; } base = MEM_TO_HEADER (ptr); amt = *(size_t *)base; limits->in_use -= amt; free (base); } /************************************************************************ *(h2 "Reserving Limited Memory") * * * */ /*(c lim_prepare) * int lim_prepare (alloc_limits limits, size_t amt); * * Prepare for an allocation of `amt' bytes. * * If such an allocation would exceed the threshold of `limits', * invoke the `free_memory' function first. * * If the allocation would exceed the `failure_pt' of `limits', * return -1. Otherwise, return 0. * * * If `limits' is 0, this function simply returns 0. * */ int lim_prepare (alloc_limits limits, size_t amt) { if (!limits) return 0; if (limits->threshold && (limits->in_use + amt >= limits->threshold) && limits->free_memory) limits->free_memory (limits->closure, amt); if (limits->failure_pt && (limits->in_use + amt >= limits->failure_pt)) return -1; return 0; } void * lim_malloc_contiguous (alloc_limits limits, size_t base_size, ...) { va_list ap; size_t total_size; size_t part_offset; size_t part_size; t_uchar * answer; total_size = base_size; va_start (ap, base_size); while (1) { part_offset = va_arg (ap, size_t); if (part_offset == (size_t)-1) break; part_size = va_arg (ap, size_t); total_size += part_size; } va_end (ap); answer = lim_malloc (limits, total_size); if (!answer) return 0; va_start (ap, base_size); total_size = base_size; while (1) { part_offset = va_arg (ap, size_t); if (part_offset == (size_t)-1) break; part_size = va_arg (ap, size_t); *(t_uchar **)(answer + part_offset) = answer + total_size; total_size += part_size; } return (void *)answer; } tla-1.3.5+dfsg/src/hackerlab/mem/memory.doc0000644000175000017500000000233310457621774017233 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:57:14 2001 (memory.doc) */ /************************************************************************ *(h0 "Low-level Memory Management") * * The programming interfaces described in this chapter provide * some frequently needed functionality built on top of the standard * functions `malloc', `realloc', and `free'. * * There are functions that work like `malloc' and friends, but * that cause the process to exit with an error message and a * non-0 status if an allocation fails. See xref:"Allocate or Die". * * There are functions that let you keep track of how much memory is * used by a particular subsystem of your program, and limit that * amount of memory if you choose. You can use these functions to * trigger various forms of garbage collection. See xref:"Allocation With * Limitations". * * Finally, There are functions that operate on arrays of bytes. * These do little more than replace standard functions such as * `memcpy', but are included for symmetry and completeness. See * xref:"Array-of-Byte Functions". * */ /*(menu) */ /*(include-documentation "must-malloc.c") */ /*(include-documentation "alloc-limits.c") */ /*(include-documentation "mem.c") */ tla-1.3.5+dfsg/src/hackerlab/mem/must-malloc.c0000644000175000017500000000425710457621774017644 0ustar useruser/* must-malloc.c - malloc or die * **************************************************************** * Copyright (C) 1998, 2000 Thomas Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/os/malloc.h" #include "hackerlab/char/str.h" #include "hackerlab/mem/mem.h" #include "hackerlab/bugs/panic.h" #include "hackerlab/mem/must-malloc.h" /************************************************************************ *(h1 "Allocate or Die" * :includes ("hackerlab/mem/must-malloc.h")) * * The functions in this section allocate memory. If an allocation * fails, they call `panic' rather than returning. Thus, these * functions may be used without checking for errors. */ /*(c must_calloc) * void * must_calloc (size_t amt); * * Return a newly allocated block large enough to hold `amt' bytes. * If no such block can be allocated, exit by calling `panic'. * Fill the newly allocated memory with 0 bytes. * */ void * must_calloc (size_t amt) { void * a; a = must_malloc (amt); mem_set0 (a, amt); return a; } /*(c must_malloc) * void * must_malloc (size_t amt); * * Return a newly malloced block large enough to hold `amt' bytes. If * no such block can be allocated, exit by calling `panic'. */ void * must_malloc (size_t amt) { void * a; a = (void *)malloc (amt); if (amt && !a) panic ("out of memory"); return a; } /*(c must_realloc) * void * must_realloc (void * ptr, size_t amt); * * Return a malloced block large enough to hold `amt' bytes. If `ptr' * is not 0, it should point to a previously malloced block. The * contents of the new block are initialized from the contents of * `ptr'. If the new block is not the same as `ptr', `ptr' is freed. * * If no block can be allocated, exit by calling `panic'. */ void * must_realloc (void * ptr, size_t amt) { void * a; a = (void *)realloc (ptr, amt); if (amt && !a) panic ("out of memory"); return a; } /*(c must_free) * void must_free (void * ptr); * * Free a block allocated by `must_calloc', `must_malloc', or * `must_realloc'. */ void must_free (void * ptr) { if (ptr) free (ptr); } tla-1.3.5+dfsg/src/hackerlab/mem/Makefile.in0000644000175000017500000000027210457621774017301 0ustar useruser include $(makefiles)/library-objects.mk ifeq ($(cgs__install_hackerlab),1) include $(makefiles)/install-includes.mk endif # tag: Tom Lord Tue Dec 4 14:52:04 2001 (mem/Makefile.in) # tla-1.3.5+dfsg/src/hackerlab/mem/must-malloc.h0000644000175000017500000000120710457621774017641 0ustar useruser/* must-malloc.h - decls for malloc or die * **************************************************************** * Copyright (C) 1998, 2000 Thomas Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__MEM__MUST_MALLOC_H #define INCLUDE__MEM__MUST_MALLOC_H #include "hackerlab/machine/types.h" /* automatically generated __STDC__ prototypes */ extern void * must_calloc (size_t amt); extern void * must_malloc (size_t amt); extern void * must_realloc (void * ptr, size_t amt); extern void must_free (void * ptr); #endif /* INCLUDE__MEM__MUST_MALLOC_H */ tla-1.3.5+dfsg/src/hackerlab/mem/PLUGIN/0000755000175000017500000000000010457621774016231 5ustar userusertla-1.3.5+dfsg/src/hackerlab/mem/PLUGIN/REQ0000644000175000017500000000002610457621774016601 0ustar useruseros mem mem libboot tla-1.3.5+dfsg/src/hackerlab/machine/0000755000175000017500000000000010457621774016061 5ustar userusertla-1.3.5+dfsg/src/hackerlab/machine/gen-alignment.to-c0000644000175000017500000000306110457621774021372 0ustar useruser/* tag: Tom Lord Tue Dec 4 15:02:16 2001 (gen-alignment.to-c) */ /* gen-alignment.c - -*-c-*- * **************************************************************** * Copyright (C) 2000 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include #define TYPES \ TYPE(char, char) \ TYPE(short, short) \ TYPE(int, int) \ TYPE(long, long) \ TYPE(long long, long_long) \ TYPE(void *, pointer) \ TYPE(float, float) \ TYPE(double, double) \ TYPE(long double, long_double) #undef TYPE #define TYPE(SCALAR, STRUCT) \ typedef struct \ { \ SCALAR a; \ char b; \ } struct_ ## STRUCT; TYPES static size_t machine_alignment (void) { size_t best; size_t this; best = 1; /* technique borrowed from Computing Memory Alignment Restrictions of Data Types in C and C++ by Tom Lokovic http://www.monkeyspeak.com/alignment/ */ #undef TYPE #define TYPE(SCALAR, STRUCT) \ this = ((sizeof(struct_ ## STRUCT) > sizeof(SCALAR)) ? \ sizeof(struct_ ## STRUCT) - sizeof(SCALAR) : sizeof(SCALAR)) ;\ if (this > best) \ best = this; TYPES return best; } int main (int argc, char * argv[]) { printf ("/* Automatically generated by gen-alignment. DO NOT EDIT.\n"); printf ("*/\n"); printf ("#ifndef INCLUDE__MACHINE__ALIGNMENT_H\n"); printf ("#define INCLUDE__MACHINE__ALIGNMENT_H\n"); printf ("\n\n"); printf ("#define MACHINE_ALIGNMENT %ld\n", (long)machine_alignment ()); printf ("\n\n"); printf ("#endif\n"); return 0; } tla-1.3.5+dfsg/src/hackerlab/machine/endian.sh0000644000175000017500000000143510457621774017656 0ustar useruser#!/bin/sh # tag: Tom Lord Tue Dec 4 14:54:41 2001 (machine/endian.sh) # CC="$1" cat > endian-test.c << EOF main() { unsigned int x = 1; exit (*(unsigned char *)&x); } EOF cat > ,tmp << EOF /* endian.h - endianness * **************************************************************** * Copyright (C) 2000 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__MACHINE__ENDIAN_H #define INCLUDE__MACHINE__ENDIAN_H #define MACHINE_IS_BIGENDIAN @BIG@ /* automatically generated __STDC__ prototypes */ #endif /* INCLUDE__MACHINE__ENDIAN_H */ EOF $CC -o endian-test endian-test.c if ./endian-test ; then sed -e s/@BIG@/1/ ,tmp > endian.h else sed -e s/@BIG@/0/ ,tmp > endian.h fi rm ,tmp tla-1.3.5+dfsg/src/hackerlab/machine/Makefile.in0000644000175000017500000000170510457621774020131 0ustar useruser generated-includes := endian.h alignment.h include $(makefiles)/library-objects.mk ifeq ($(cgs__install_hackerlab),1) include $(makefiles)/install-includes.mk endif endian.h: endian.sh $(cfg__posix_shell) $(srcdir)/endian.sh $(CC) alignment.h: gen-alignment.to-c test ! -e gen-alignment${cfg__exec_suffix} || rm gen-alignment${cfg__exec_suffix} test ! -e gen-alignment.c || rm gen-alignment.c cp $(srcdir)/gen-alignment.to-c gen-alignment.c $(CC) -o gen-alignment gen-alignment.c ./gen-alignment > alignment.h clean: clean-generators clean-generators: test ! -e endian-test${cfg__exec_suffix} || rm endian-test${cfg__exec_suffix} test ! -e endian-test.c || rm endian-test.c test ! -e gen-alignment${cfg__exec_suffix} || rm gen-alignment${cfg__exec_suffix} test ! -e gen-alignment.c || rm gen-alignment.c test ! -e endian.h || rm endian.h test ! -e alignment.h || rm alignment.h # tag: Tom Lord Tue Dec 4 14:52:09 2001 (machine/Makefile.in) # tla-1.3.5+dfsg/src/hackerlab/machine/machine.doc0000644000175000017500000000430010457621774020151 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:57:14 2001 (machine.doc) */ /************************************************************************ *(h0 "Machine-Specific Definitions" * :includes ("hackerlab/machine/types.h")) * The following machine-specific types and macros are used throughout the Hackerlab C library. */ /*(menu) */ /************************************************************************ *(h1 "Known-Width Integer Types") * */ /*(c t_uint8 :category type) * * An 8-bit unsigned integer. * */ /*(c t_int8 :category type) * * An 8-bit signed integer. * */ /*(c t_uint16 :category type) * * An 16-bit unsigned integer. * */ /*(c t_int16 :category type) * * An 16-bit signed integer. * */ /*(c t_uint32 :category type) * * An 32-bit unsigned integer. * */ /*(c t_int32 :category type) * * An 32-bit signed integer. * */ /************************************************************************ *(h1 "Unsigned Integer Types") * * * */ /*(c t_uchar :category type) * * Short-hand for `unsigned char'. * */ /*(c t_ushort :category type) * * Short-hand for `unsigned short'. * */ /*(c t_uint :category type) * * Short-hand for `unsigned int'. * */ /*(c t_ulong :category type) * * Short-hand for `unsigned long'. * */ /************************************************************************ *(h1 "Sizeof Macros") * */ /*(c MACHINE_SIZEOF_SHORT :category macro) * * An integer equal to `sizeof (short)'. */ /*(c MACHINE_SIZEOF_INT :category macro) * * An integer equal to `sizeof (int)'. */ /*(c MACHINE_SIZEOF_LONG :category macro) * * An integer equal to `sizeof (long)'. */ /************************************************************************ *(h1 "Types for Unicode") * * * */ /*(c t_unichar :category type) * * A synonym for `t_uint16' -- an unsigned 16-bit integer. * * This type is used to represent code units in the UTF-16 encoding * form. */ /*(c t_unicode :category type) * * A synonym for `t_uint32' -- an unsigned 32-bit integer. * * This type is used to represent Unicode code points and can * also be used to represent code units in the UTF-32 encoding * form. */ tla-1.3.5+dfsg/src/hackerlab/machine/PLUGIN/0000755000175000017500000000000010457621774017057 5ustar userusertla-1.3.5+dfsg/src/hackerlab/machine/PLUGIN/REQ0000644000175000017500000000002210457621774017423 0ustar userusermachine libboot tla-1.3.5+dfsg/src/hackerlab/machine/types.h0000644000175000017500000000616210457621774017403 0ustar useruser/* types.h - basic machine type declarations * **************************************************************** * Copyright (C) 2000 Thomas Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__MACHINE__TYPES_H #define INCLUDE__MACHINE__TYPES_H #include "hackerlab/os/stddef.h" #include "hackerlab/os/limits.h" #include "hackerlab/os/sys/types.h" #include "hackerlab/machine/alignment.h" /***************************************************************** * t_uint8, t_int8 * */ #if UCHAR_MAX == 0xff typedef unsigned char t_uint8; typedef char t_int8; #else #error "Characters aren't 8 bits?" #endif /***************************************************************** * t_uint16, t_int16 * */ #if USHRT_MAX == 0xffff typedef unsigned short t_uint16; typedef short t_int16; #elif UINT_MAX == 0xffff typedef unsigned int t_uint16; typedef int t_int16; #elif ULONG_MAX == 0xffff typedef unsigned long t_uint16; typedef long t_int16; #else #error "No 16 bit integer type?" #endif /***************************************************************** * t_uint32, t_int32 * */ #if USHRT_MAX == 0xffffffffUL typedef unsigned short t_uint32; typedef short t_int32; #elif UINT_MAX == 0xffffffffUL typedef unsigned int t_uint32; typedef int t_int32; #elif ULONG_MAX == 0xffffffffUL typedef unsigned long t_uint32; typedef long t_int32; #else #error "No 32 bit integer type?" #endif /**************************************************************** * `t_' shorthands for unsigned integer types * */ typedef unsigned char t_uchar; typedef unsigned short t_ushort; typedef unsigned int t_uint; typedef unsigned long t_ulong; /**************************************************************** * sizeof macros */ #if USHRT_MAX == 0xffUL #define MACHINE_SIZEOF_SHORT (1) #elif USHRT_MAX == 0xffffUL #define MACHINE_SIZEOF_SHORT (2) #elif USHRT_MAX == 0xffffffffUL #define MACHINE_SIZEOF_SHORT (4) #elif USHRT_MAX == ((0xffffffffUL << 32) + 0xffffffffUL) #define MACHINE_SIZEOF_SHORT (8) #else #error "weird sizeof(short)" #endif #if UINT_MAX == 0xffUL #define MACHINE_SIZEOF_INT (1) #elif UINT_MAX == 0xffffUL #define MACHINE_SIZEOF_INT (2) #elif UINT_MAX == 0xffffffffUL #define MACHINE_SIZEOF_INT (4) #elif UINT_MAX == ((0xffffffffUL << 32) + 0xffffffffUL) #define MACHINE_SIZEOF_INT (8) #else #error "weird sizeof(short)" #endif #if ULONG_MAX == 0xffUL #define MACHINE_SIZEOF_LONG (1) #elif ULONG_MAX == 0xffffUL #define MACHINE_SIZEOF_LONG (2) #elif ULONG_MAX == 0xffffffffUL #define MACHINE_SIZEOF_LONG (4) #elif ULONG_MAX == ((0xffffffffUL << 32) + 0xffffffffUL) #define MACHINE_SIZEOF_LONG (8) #else #error "weird sizeof(short)" #endif /***************************************************************** * unichar * */ /* A 16-bit character: */ typedef t_uint16 t_unichar; /* A unicode scalar value */ typedef t_uint32 t_unicode; #define MACHINE_UNICODE_MAXCODEPT ((t_uint32)0x1fffffUL) #define MACHINE_UNICODE_MAXINT ((t_uint32)0xffffffffUL) /* automatically generated __STDC__ prototypes */ #endif /* INCLUDE__MACHINE__TYPES_H */ tla-1.3.5+dfsg/src/hackerlab/machine/=README0000644000175000017500000000034710457621774017042 0ustar useruser# tag: Tom Lord Tue Dec 4 15:06:34 2001 (machine/=README) # Machine Parameters These files create CPP macros capturing information about the host machine's representations (e.g., integer sizes and alignment requirements). tla-1.3.5+dfsg/src/hackerlab/unidata/0000755000175000017500000000000010457621774016102 5ustar userusertla-1.3.5+dfsg/src/hackerlab/unidata/case-db-inlines.h0000644000175000017500000000142610457621774021213 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:41:49 2001 (case-db-inlines.h) */ /* case-db-inlines.h - * **************************************************************** * Copyright (C) 2000 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__UNIDATA__CASE_DB_INLINES_H #define INCLUDE__UNIDATA__CASE_DB_INLINES_H #undef UNIDATA_INLINE_QUALIFIERS #define UNIDATA_INLINE_QUALIFIERS /* automatically generated __STDC__ prototypes */ extern UNIDATA_INLINE_QUALIFIERS t_unicode unidata_to_upper (t_unicode c); extern UNIDATA_INLINE_QUALIFIERS t_unicode unidata_to_lower (t_unicode c); extern UNIDATA_INLINE_QUALIFIERS t_unicode unidata_to_title (t_unicode c); #endif /* INCLUDE__UNIDATA__CASE_DB_INLINES_H */ tla-1.3.5+dfsg/src/hackerlab/unidata/db-macros.h0000644000175000017500000000171510457621774020126 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:41:45 2001 (db-macros.h) */ /* db-macros.h - * **************************************************************** * Copyright (C) 2000 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__UNIDATA__DB_MACROS_H #define INCLUDE__UNIDATA__DB_MACROS_H #define unidata__assemble_db(ASSIGNED, DEC, M, BC, GC) \ ((((ASSIGNED) & 1) << 15) | (((DEC) & 0xf) << 11) | (((M) & 1) << 10) | (((BC) & 0x1f) << 5) | (((GC) & 0x1f) << 0)) #define unidata__db_is_assigned_code_point(DBV) ((DBV) & 0x8000) #define unidata__db_decimal_digit_value(DBV) (((DBV) >> 11) & 0xf) #define unidata__db_is_mirrored(DBV) (((DBV) >> 10) & 1) #define unidata__db_bidi_category(DBV) (((DBV) >> 5) & 0x1f) #define unidata__db_general_category(DBV) (((DBV) >> 0) & 0x1f) /* automatically generated __STDC__ prototypes */ #endif /* INCLUDE__UNIDATA__DB_MACROS_H */ tla-1.3.5+dfsg/src/hackerlab/unidata/blocks.c0000644000175000017500000001252210457621774017525 0ustar useruser/* blocks.c - standard unicode blocks * **************************************************************** * Copyright (C) 2000 Thomas Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/unidata/blocks.h" const struct uni_block uni_blocks[] = { { "Basic Latin", 0x0000, 0x007F, }, { "Latin-1 Supplement", 0x0080, 0x00FF, }, { "Latin Extended-A", 0x0100, 0x017F, }, { "Latin Extended-B", 0x0180, 0x024F, }, { "IPA Extensions", 0x0250, 0x02AF, }, { "Spacing Modifier Letters", 0x02B0, 0x02FF, }, { "Combining Diacritical Marks", 0x0300, 0x036F, }, { "Greek", 0x0370, 0x03FF, }, { "Cyrillic", 0x0400, 0x04FF, }, { "Armenian", 0x0530, 0x058F, }, { "Hebrew", 0x0590, 0x05FF, }, { "Arabic", 0x0600, 0x06FF, }, { "Syriac ", 0x0700, 0x074F, }, { "Thaana", 0x0780, 0x07BF, }, { "Devanagari", 0x0900, 0x097F, }, { "Bengali", 0x0980, 0x09FF, }, { "Gurmukhi", 0x0A00, 0x0A7F, }, { "Gujarati", 0x0A80, 0x0AFF, }, { "Oriya", 0x0B00, 0x0B7F, }, { "Tamil", 0x0B80, 0x0BFF, }, { "Telugu", 0x0C00, 0x0C7F, }, { "Kannada", 0x0C80, 0x0CFF, }, { "Malayalam", 0x0D00, 0x0D7F, }, { "Sinhala", 0x0D80, 0x0DFF, }, { "Thai", 0x0E00, 0x0E7F, }, { "Lao", 0x0E80, 0x0EFF, }, { "Tibetan", 0x0F00, 0x0FFF, }, { "Myanmar ", 0x1000, 0x109F, }, { "Georgian", 0x10A0, 0x10FF, }, { "Hangul Jamo", 0x1100, 0x11FF, }, { "Ethiopic", 0x1200, 0x137F, }, { "Cherokee", 0x13A0, 0x13FF, }, { "Unified Canadian Aboriginal Syllabics", 0x1400, 0x167F, }, { "Ogham", 0x1680, 0x169F, }, { "Runic", 0x16A0, 0x16FF, }, { "Khmer", 0x1780, 0x17FF, }, { "Mongolian", 0x1800, 0x18AF, }, { "Latin Extended Additional", 0x1E00, 0x1EFF, }, { "Greek Extended", 0x1F00, 0x1FFF, }, { "General Punctuation", 0x2000, 0x206F, }, { "Superscripts and Subscripts", 0x2070, 0x209F, }, { "Currency Symbols", 0x20A0, 0x20CF, }, { "Combining Marks for Symbols", 0x20D0, 0x20FF, }, { "Letterlike Symbols", 0x2100, 0x214F, }, { "Number Forms", 0x2150, 0x218F, }, { "Arrows", 0x2190, 0x21FF, }, { "Mathematical Operators", 0x2200, 0x22FF, }, { "Miscellaneous Technical", 0x2300, 0x23FF, }, { "Control Pictures", 0x2400, 0x243F, }, { "Optical Character Recognition", 0x2440, 0x245F, }, { "Enclosed Alphanumerics", 0x2460, 0x24FF, }, { "Box Drawing", 0x2500, 0x257F, }, { "Block Elements", 0x2580, 0x259F, }, { "Geometric Shapes", 0x25A0, 0x25FF, }, { "Miscellaneous Symbols", 0x2600, 0x26FF, }, { "Dingbats", 0x2700, 0x27BF, }, { "Braille Patterns", 0x2800, 0x28FF, }, { "CJK Radicals Supplement", 0x2E80, 0x2EFF, }, { "Kangxi Radicals", 0x2F00, 0x2FDF, }, { "Ideographic Description Characters", 0x2FF0, 0x2FFF, }, { "CJK Symbols and Punctuation", 0x3000, 0x303F, }, { "Hiragana", 0x3040, 0x309F, }, { "Katakana", 0x30A0, 0x30FF, }, { "Bopomofo", 0x3100, 0x312F, }, { "Hangul Compatibility Jamo", 0x3130, 0x318F, }, { "Kanbun", 0x3190, 0x319F, }, { "Bopomofo Extended", 0x31A0, 0x31BF, }, { "Enclosed CJK Letters and Months", 0x3200, 0x32FF, }, { "CJK Compatibility", 0x3300, 0x33FF, }, { "CJK Unified Ideographs Extension A", 0x3400, 0x4DB5, }, { "CJK Unified Ideographs", 0x4E00, 0x9FFF, }, { "Yi Syllables", 0xA000, 0xA48F, }, { "Yi Radicals", 0xA490, 0xA4CF, }, { "Hangul Syllables", 0xAC00, 0xD7A3, }, { "High Surrogates", 0xD800, 0xDB7F, }, { "High Private Use Surrogates", 0xDB80, 0xDBFF, }, { "Low Surrogates", 0xDC00, 0xDFFF, }, { "Private Use", 0xE000, 0xF8FF, }, { "CJK Compatibility Ideographs", 0xF900, 0xFAFF, }, { "Alphabetic Presentation Forms", 0xFB00, 0xFB4F, }, { "Arabic Presentation Forms-A", 0xFB50, 0xFDFF, }, { "Combining Half Marks", 0xFE20, 0xFE2F, }, { "CJK Compatibility Forms", 0xFE30, 0xFE4F, }, { "Small Form Variants", 0xFE50, 0xFE6F, }, { "Arabic Presentation Forms-B", 0xFE70, 0xFEFE, }, { "Specials", 0xFEFF, 0xFEFF, }, { "Halfwidth and Fullwidth Forms", 0xFF00, 0xFFEF, }, { "Specials", 0xFFF0, 0xFFFD, }, {0, 0, 0} }; const int n_uni_blocks = (sizeof (uni_blocks) / sizeof(struct uni_block)) - 1; tla-1.3.5+dfsg/src/hackerlab/unidata/db-inlines.h0000644000175000017500000000170710457621774020304 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:41:46 2001 (db-inlines.h) */ /* db-inlines.h - * **************************************************************** * Copyright (C) 2000 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__UNIDATA__DB_INLINES_H #define INCLUDE__UNIDATA__DB_INLINES_H #undef UNIDATA_INLINE_QUALIFIERS #define UNIDATA_INLINE_QUALIFIERS /* automatically generated __STDC__ prototypes */ extern UNIDATA_INLINE_QUALIFIERS int unidata_is_assigned_code_point (t_unicode c); extern UNIDATA_INLINE_QUALIFIERS int unidata_decimal_digit_value (t_unicode c); extern UNIDATA_INLINE_QUALIFIERS int unidata_is_mirrored (t_unicode c); extern UNIDATA_INLINE_QUALIFIERS enum uni_bidi_category unidata_bidi_category (t_unicode c); extern UNIDATA_INLINE_QUALIFIERS enum uni_general_category unidata_general_category (t_unicode c); #endif /* INCLUDE__UNIDATA__DB_INLINES_H */ tla-1.3.5+dfsg/src/hackerlab/unidata/case-db-macros.h0000644000175000017500000000102210457621774021026 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:41:46 2001 (case-db-macros.h) */ /* case-db-macros.h - * **************************************************************** * Copyright (C) 2000 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__UNIDATA__CASE_DB_MACROS_H #define INCLUDE__UNIDATA__CASE_DB_MACROS_H #include "hackerlab/uni/unidata.h" /* automatically generated __STDC__ prototypes */ #endif /* INCLUDE__UNIDATA__CASE_DB_MACROS_H */ tla-1.3.5+dfsg/src/hackerlab/unidata/=unidata-size.c0000644000175000017500000000142710457621774020744 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:41:44 2001 (=unidata-size.c) */ #include int main (int argc, char * argv[]) { t_unicode c; int value; c = argv[0][0]; value = unidata_is_assigned_code_point (c); value += (int)unidata_general_category (c); value += (int)unidata_decimal_digit_value (c); value += (int)unidata_bidi_category (c); value += (int)unidata_is_mirrored (c); value += (int)unidata_canonical_combining_class (c); value += (int)unidata_to_upper (c); value += (int)unidata_to_lower (c); value += (int)unidata_to_title (c); value += (int)unidata_character_decomposition_mapping (c)->type; value += (int)uni_blocks[0].start; value += bits_population (uni_general_category_bitset (uni_general_category_Sm)); return value; } tla-1.3.5+dfsg/src/hackerlab/unidata/bitset-lookup.c0000644000175000017500000000444610457621774021057 0ustar useruser/* bitset-lookup.c - lookup a unicode category bitset * **************************************************************** * Copyright (C) 2000 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/bugs/panic.h" #include "hackerlab/unidata/bitsets.h" #include "hackerlab/unidata/bitset-lookup.h" /************************************************************************ *(h2 "Unicode Category Bitsets") * * */ /*(c uni_universal_bitset) * bits uni_universal_bitset (void); * * Return the set of all assigned code points which are not surrogate * code points and are not private use code points. The set is * represented as a shared bitset tree. (See xref:"Shared Bitset * Trees".) * * The shared bitset tree returned by this function uses the tree * structure defined by `uni_bits_tree_rule'. (See xref:"Unicode * Character Bitsets".) * * Programs should not attempt to modify the set returned by * this function. */ bits uni_universal_bitset (void) { return unidata_bitset_universal; } /*(c uni_general_category_bitset) * bits uni_general_category_bitset (enum uni_general_category c); * * Return the set of all assigned code points having the indicated * general category or synthetic general category. The set is * represented as a shared bitset tree. (See xref:"Shared Bitset * Trees".) * * `c' indicates which category to return. It may be a Unicode * general category or a synthetic general category. (See * xref:"General Category".) * * The shared bitset tree returned by this function uses the tree * structure defined by `uni_bits_tree_rule'. (See xref:"Unicode * Character Bitsets".) * * Programs should not attempt to modify the set returned by * this function. * */ bits uni_general_category_bitset (enum uni_general_category c) { switch (c) { default: panic ("unrecognized general category in uni_general_category_bitset"); #define UNI_GENERAL_CATEGORY_SET(NAME, ALT_NAME, DESC) \ case uni_general_category_ ## NAME: \ return unidata_bitset_ ## NAME; #define UNI_SYNTH_CATEGORY_SET(NAME, ALT_NAME, DESC) UNI_GENERAL_CATEGORY_SET(NAME, ALT_NAME, DESC) UNI_GENERAL_CATEGORIES_LIST(_SET) UNI_SYNTHETIC_CATEGORIES_LIST(_SET) } } tla-1.3.5+dfsg/src/hackerlab/unidata/=later/0000755000175000017500000000000010457621774017306 5ustar userusertla-1.3.5+dfsg/src/hackerlab/unidata/=later/bitsets.h0000644000175000017500000000127710457621774021143 0ustar useruser/* bitsets.h - decls for unicode category bitsets * **************************************************************** * Copyright (C) 2000 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__hackerlab__UNI__CATEGORIES_H #define INCLUDE__hackerlab__UNI__CATEGORIES_H /* automatically generated __STDC__ prototypes */ extern bits uni_complete_bitset (void); extern bits uni_general_category_bitset (enum uni_general_category c); extern int uni_general_category_lookup_n (t_uchar * name, size_t len); extern int uni_general_category_lookup (t_uchar * name); #endif /* INCLUDE__hackerlab__UNI__CATEGORIES_H */ tla-1.3.5+dfsg/src/hackerlab/unidata/=later/uni-pow2-array.h0000644000175000017500000000125410457621774022255 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:41:45 2001 (uni-pow2-array.h) */ /* uni-pow2-array.h - * **************************************************************** * Copyright (C) 2000 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__UNI__UNI_POW2_ARRAY_H #define INCLUDE__UNI__UNI_POW2_ARRAY_H extern struct pow2_array_level_rule uni_pow2_array_levels_5_16[]; extern struct pow2_array_level_rule uni_pow2_array_levels_10_11[]; extern struct pow2_array_level_rule uni_pow2_array_levels_8_5_8[]; /* automatically generated __STDC__ prototypes */ #endif /* INCLUDE__UNI__UNI_POW2_ARRAY_H */ tla-1.3.5+dfsg/src/hackerlab/unidata/=later/decomp.h0000644000175000017500000000303510457621774020727 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:41:44 2001 (decomp.h) */ /* decomp.h - * **************************************************************** * Copyright (C) 2000 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__UNI__DECOMP_H #define INCLUDE__UNI__DECOMP_H #define UNI_DECOMPOSITION_TYPES \ UNI_DECOMPOSITION_TYPE(font, 2,"font") \ UNI_DECOMPOSITION_TYPE(nobreak, 3,"noBreak") \ UNI_DECOMPOSITION_TYPE(initial, 4,"initial") \ UNI_DECOMPOSITION_TYPE(medial, 5,"medial") \ UNI_DECOMPOSITION_TYPE(final, 6,"final") \ UNI_DECOMPOSITION_TYPE(isolated, 7,"isolated") \ UNI_DECOMPOSITION_TYPE(circle, 8,"circle") \ UNI_DECOMPOSITION_TYPE(super, 9,"super") \ UNI_DECOMPOSITION_TYPE(sub, 10,"sub") \ UNI_DECOMPOSITION_TYPE(vertical, 11,"vertical") \ UNI_DECOMPOSITION_TYPE(wide, 12,"wide") \ UNI_DECOMPOSITION_TYPE(narrow, 13,"narrow") \ UNI_DECOMPOSITION_TYPE(small, 14,"small") \ UNI_DECOMPOSITION_TYPE(square, 15,"square") \ UNI_DECOMPOSITION_TYPE(fraction, 16,"fraction") \ UNI_DECOMPOSITION_TYPE(compat, 17, "compat") enum uni_decomposition_type { #undef UNI_DECOMPOSITION_TYPE #define UNI_DECOMPOSITION_TYPE(SYM, NUM, NAME) \ uni_ ## SYM ## _decomposition = NUM, uni_canonical_decomposition = 1, UNI_DECOMPOSITION_TYPES }; struct uni_decomposition_mapping { enum uni_decomposition_type type; t_unicode * decomposition; /* ar_free */ }; /* automatically generated __STDC__ prototypes */ #endif /* INCLUDE__UNI__DECOMP_H */ tla-1.3.5+dfsg/src/hackerlab/unidata/=later/uni-pow2-array.c0000644000175000017500000000142310457621774022246 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:41:45 2001 (uni-pow2-array.c) */ /* uni-pow2-array.c - * **************************************************************** * Copyright (C) 2000 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include #include "hackerlab/machine/types.h" #include "hackerlab/mem/alloc-limits.h" #include "hackerlab/arrays/pow2-array.h" #include "hackerlab/uni/uni-pow2-array.h" struct pow2_array_level_rule uni_pow2_array_levels_5_16[] = { {16, 0x1f}, {0, 0xffff} }; struct pow2_array_level_rule uni_pow2_array_levels_10_11[] = { {11, 0x3ff}, {0, 0x7ff} }; struct pow2_array_level_rule uni_pow2_array_levels_8_5_8[] = { {13, 0xff}, {8, 0x1f}, {0, 0xff} }; tla-1.3.5+dfsg/src/hackerlab/unidata/=later/db.h0000644000175000017500000000314410457621774020046 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:41:44 2001 (db.h) */ /* db.h - * **************************************************************** * Copyright (C) 2000 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__UNI__DB_H #define INCLUDE__UNI__DB_H typedef t_uint16 uni__t_db0_page; extern uni__t_db0_page * uni__db0[]; #define uni__db0_is_mirrored(V) (((V) >> 15) & 1) #define uni__db0_decimal_digit_value(V) (((V) >> 10) & 0x1f) #define uni__db0_bidi_categry(V) (((V) >> 5) & 0x1f) #define uni__db0_general_categry(V) (((V) >> 0) & 0x1f) #define uni__db0_page(C) (uni__db0[(((C) >> 13) & 0xff)]) #define uni__db0_offset(C) (uni__db0[((C) & 0x1fff)]) #define uni__db0_val(C) (uni__db0[uni__db0_page(C)][uni__db0_offset(C)]) #define uni_is_mirrored(C) uni__db0_is_mirrored (uni__db0_page (C)) #define uni_decimal_digit_value(C) uni__db0_decimal_digit_value (uni__db0_page (C)) #define uni_bidi_categry(C) uni__db0_bidi_categry (uni__db0_page (C)) #define uni_general_categry(C) uni__db0_general_categry (uni__db0_page (C)) typedef t_uchar * uni__combining_class_db[]; #define uni__combining_class_db_page(C) (uni__combining_class_db[(((C) >> 13) & 0xff)]) #define uni__combining_class_db_offset(C) (uni__combining_class_db[((C) & 0x1fff)]) #define uni__combining_class_db_val(C) (uni__combining_class_db[uni__combining_class_db_page(C)][uni__combining_class_db_offset(C)]) #define uni_canonical_combining_class(C) uni__combining_class_db(C) /* automatically generated __STDC__ prototypes */ #endif /* INCLUDE__UNI__DB_H */ tla-1.3.5+dfsg/src/hackerlab/unidata/=later/numbers.h0000644000175000017500000000100410457621774021125 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:41:45 2001 (numbers.h) */ /* numbers.h - * **************************************************************** * Copyright (C) 2000 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__UNI__NUMBERS_H #define INCLUDE__UNI__NUMBERS_H struct uni_numeric_value { int numerator; int denominator; }; /* automatically generated __STDC__ prototypes */ #endif /* INCLUDE__UNI__NUMBERS_H */ tla-1.3.5+dfsg/src/hackerlab/unidata/=later/categories-constants.h0000644000175000017500000045573010457621774023634 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:41:44 2001 (categories-constants.h) */ static bitset_subset Lu__0_0_0[8] = { 0x0, 0x0, 0x7fffffe, 0x0, 0x0, 0x0, 0x7f7fffff, 0x0, }; static bitset_subset Lu__0_0_1[8] = { 0x55555555, 0xaa555555, 0x555554aa, 0x2b555555, 0xb1dbced6, 0x11aed2d5, 0x4aaaa490, 0x55d25555, }; static bitset_subset Lu__0_0_2[8] = { 0x55555555, 0x55554, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }; static bitset_subset Lu__0_0_3[8] = { 0x0, 0x0, 0x0, 0x0, 0xfffed740, 0xffb, 0x541c0000, 0x5555, }; static bitset_subset Lu__0_0_4[8] = { 0xffffffff, 0xffff, 0x0, 0x55555555, 0x55555001, 0x55555555, 0x5555088b, 0x1155555, }; static bitset_subset Lu__0_0_5[8] = { 0x0, 0xfffe0000, 0x7fffff, 0x0, 0x0, 0x0, 0x0, 0x0, }; static bits_tree * Lu__0_0[16] = { (bits_tree *)Lu__0_0_0, (bits_tree *)Lu__0_0_1, (bits_tree *)Lu__0_0_2, (bits_tree *)Lu__0_0_3, (bits_tree *)Lu__0_0_4, (bits_tree *)Lu__0_0_5, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, }; static bitset_subset Lu__0_1_0[8] = { 0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0x3f, 0x0, }; static bitset_subset Lu__0_1_14[8] = { 0x55555555, 0x55555555, 0x55555555, 0x55555555, 0x155555, 0x55555555, 0x55555555, 0x1555555, }; static bitset_subset Lu__0_1_15[8] = { 0x3f00ff00, 0xff00ff00, 0xaa003f00, 0xff00, 0x0, 0xf000000, 0xf000f00, 0xf001f00, }; static bits_tree * Lu__0_1[16] = { (bits_tree *)Lu__0_1_0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)Lu__0_1_14, (bits_tree *)Lu__0_1_15, }; static bitset_subset Lu__0_2_1[8] = { 0x3e273884, 0xb3d50, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }; static bits_tree * Lu__0_2[16] = { (bits_tree *)0, (bits_tree *)Lu__0_2_1, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, }; static bitset_subset Lu__0_15_15[8] = { 0x0, 0x7fffffe, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }; static bits_tree * Lu__0_15[16] = { (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)Lu__0_15_15, }; static bits_tree * Lu__0[16] = { (bits_tree *)Lu__0_0, (bits_tree *)Lu__0_1, (bits_tree *)Lu__0_2, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)Lu__0_15, }; static bits_tree * Lu_[32] = { (bits_tree *)Lu__0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, }; static struct bits_tree_rule Lu__rule[] = { {32, 65536, 16, 65535}, {16, 4096, 12, 4095}, {16, 256, 8, 255}, {0, 256, 0, 0}, }; static struct bits_tree_shared Lu__stree = { 1, (bits_tree)&Lu_ }; static struct bits Lu__bits = { 0, Lu__rule, &Lu__stree }; #define Lu (&Lu__bits) static bitset_subset Ll__0_0_0[8] = { 0x0, 0x0, 0x0, 0x7fffffe, 0x0, 0x4200400, 0x80000000, 0xff7fffff, }; static bitset_subset Ll__0_0_1[8] = { 0xaaaaaaaa, 0x55aaaaaa, 0xaaaaab55, 0xd4aaaaaa, 0x4e243129, 0xe6512d2a, 0xb5555240, 0xaa29aaaa, }; static bitset_subset Ll__0_0_2[8] = { 0xaaaaaaaa, 0xaaaa8, 0xffff0000, 0xffffffff, 0xffffffff, 0x3fff, 0x0, 0x0, }; static bitset_subset Ll__0_0_3[8] = { 0x0, 0x0, 0x0, 0x0, 0x10000, 0xfffff000, 0xa8e37fff, 0xfaaaa, }; static bitset_subset Ll__0_0_4[8] = { 0x0, 0xffff0000, 0xffffffff, 0xaaaaaaaa, 0xaaaaa002, 0xaaaaaaaa, 0xaaaa1114, 0x22aaaaa, }; static bitset_subset Ll__0_0_5[8] = { 0x0, 0x0, 0x0, 0xfffffffe, 0xff, 0x0, 0x0, 0x0, }; static bits_tree * Ll__0_0[16] = { (bits_tree *)Ll__0_0_0, (bits_tree *)Ll__0_0_1, (bits_tree *)Ll__0_0_2, (bits_tree *)Ll__0_0_3, (bits_tree *)Ll__0_0_4, (bits_tree *)Ll__0_0_5, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, }; static bitset_subset Ll__0_1_14[8] = { 0xaaaaaaaa, 0xaaaaaaaa, 0xaaaaaaaa, 0xaaaaaaaa, 0xfeaaaaa, 0xaaaaaaaa, 0xaaaaaaaa, 0x2aaaaaa, }; static bitset_subset Ll__0_1_15[8] = { 0x3f00ff, 0xff00ff, 0xff003f, 0x3fff00ff, 0xff00ff, 0x40df00ff, 0xcf00dc, 0xdc00ff, }; static bits_tree * Ll__0_1[16] = { (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)Ll__0_1_14, (bits_tree *)Ll__0_1_15, }; static bitset_subset Ll__0_2_0[8] = { 0x0, 0x0, 0x0, 0x80000000, 0x0, 0x0, 0x0, 0x0, }; static bitset_subset Ll__0_2_1[8] = { 0x8c400, 0x2108000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }; static bits_tree * Ll__0_2[16] = { (bits_tree *)Ll__0_2_0, (bits_tree *)Ll__0_2_1, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, }; static bitset_subset Ll__0_15_11[8] = { 0xf8007f, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }; static bitset_subset Ll__0_15_15[8] = { 0x0, 0x0, 0x7fffffe, 0x0, 0x0, 0x0, 0x0, 0x0, }; static bits_tree * Ll__0_15[16] = { (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)Ll__0_15_11, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)Ll__0_15_15, }; static bits_tree * Ll__0[16] = { (bits_tree *)Ll__0_0, (bits_tree *)Ll__0_1, (bits_tree *)Ll__0_2, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)Ll__0_15, }; static bits_tree * Ll_[32] = { (bits_tree *)Ll__0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, }; static struct bits_tree_rule Ll__rule[] = { {32, 65536, 16, 65535}, {16, 4096, 12, 4095}, {16, 256, 8, 255}, {0, 256, 0, 0}, }; static struct bits_tree_shared Ll__stree = { 1, (bits_tree)&Ll_ }; static struct bits Ll__bits = { 0, Ll__rule, &Ll__stree }; #define Ll (&Ll__bits) static bitset_subset Lt__0_0_1[8] = { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x920, 0x40000, }; static bits_tree * Lt__0_0[16] = { (bits_tree *)0, (bits_tree *)Lt__0_0_1, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, }; static bitset_subset Lt__0_1_15[8] = { 0x0, 0x0, 0x0, 0x0, 0xff00ff00, 0x1000ff00, 0x1000, 0x10000000, }; static bits_tree * Lt__0_1[16] = { (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)Lt__0_1_15, }; static bits_tree * Lt__0[16] = { (bits_tree *)Lt__0_0, (bits_tree *)Lt__0_1, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, }; static bits_tree * Lt_[32] = { (bits_tree *)Lt__0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, }; static struct bits_tree_rule Lt__rule[] = { {32, 65536, 16, 65535}, {16, 4096, 12, 4095}, {16, 256, 8, 255}, {0, 256, 0, 0}, }; static struct bits_tree_shared Lt__stree = { 1, (bits_tree)&Lt_ }; static struct bits Lt__bits = { 0, Lt__rule, &Lt__stree }; #define Lt (&Lt__bits) static bitset_subset Lm__0_0_2[8] = { 0x0, 0x0, 0x0, 0x0, 0x0, 0xf9ff0000, 0x30003, 0x401f, }; static bitset_subset Lm__0_0_3[8] = { 0x0, 0x0, 0x0, 0x4000000, 0x0, 0x0, 0x0, 0x0, }; static bitset_subset Lm__0_0_5[8] = { 0x0, 0x0, 0x2000000, 0x0, 0x0, 0x0, 0x0, 0x0, }; static bitset_subset Lm__0_0_6[8] = { 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x60, }; static bitset_subset Lm__0_0_14[8] = { 0x0, 0x0, 0x40, 0x0, 0x0, 0x0, 0x40, 0x0, }; static bits_tree * Lm__0_0[16] = { (bits_tree *)0, (bits_tree *)0, (bits_tree *)Lm__0_0_2, (bits_tree *)Lm__0_0_3, (bits_tree *)0, (bits_tree *)Lm__0_0_5, (bits_tree *)Lm__0_0_6, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)Lm__0_0_14, (bits_tree *)0, }; static bitset_subset Lm__0_1_8[8] = { 0x0, 0x0, 0x8, 0x0, 0x0, 0x0, 0x0, 0x0, }; static bits_tree * Lm__0_1[16] = { (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)Lm__0_1_8, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, }; static bitset_subset Lm__0_3_0[8] = { 0x20, 0x3e0000, 0x0, 0x0, 0x60000000, 0x0, 0x0, 0x70000000, }; static bits_tree * Lm__0_3[16] = { (bits_tree *)Lm__0_3_0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, }; static bitset_subset Lm__0_15_15[8] = { 0x0, 0x0, 0x0, 0x10000, 0xc0000000, 0x0, 0x0, 0x0, }; static bits_tree * Lm__0_15[16] = { (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)Lm__0_15_15, }; static bits_tree * Lm__0[16] = { (bits_tree *)Lm__0_0, (bits_tree *)Lm__0_1, (bits_tree *)0, (bits_tree *)Lm__0_3, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)Lm__0_15, }; static bits_tree * Lm_[32] = { (bits_tree *)Lm__0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, }; static struct bits_tree_rule Lm__rule[] = { {32, 65536, 16, 65535}, {16, 4096, 12, 4095}, {16, 256, 8, 255}, {0, 256, 0, 0}, }; static struct bits_tree_shared Lm__stree = { 1, (bits_tree)&Lm_ }; static struct bits Lm__bits = { 0, Lm__rule, &Lm__stree }; #define Lm (&Lm__bits) static bitset_subset Lo__0_0_1[8] = { 0x0, 0x0, 0x0, 0x0, 0x0, 0x8000000, 0xf, 0x0, }; static bitset_subset Lo__0_0_5[8] = { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffff0000, 0x707ff, }; static bitset_subset Lo__0_0_6[8] = { 0x0, 0x7fffffe, 0x7fe, 0xfffe0000, 0xffffffff, 0xffffffff, 0x2fffff, 0x1c000000, }; static bitset_subset Lo__0_0_7[8] = { 0xfffd0000, 0x1fff, 0x0, 0x0, 0xffffffff, 0x3f, 0x0, 0x0, }; static bitset_subset Lo__0_0_9[8] = { 0xffffffe0, 0x23ffffff, 0xff010000, 0x3, 0xfff99fe0, 0x3c5fdff, 0xb0000000, 0x30003, }; static bitset_subset Lo__0_0_10[8] = { 0xfff987e0, 0x36dfdff, 0x5e000000, 0x1c0000, 0xfffbafe0, 0x23edfdff, 0x10000, 0x1, }; static bitset_subset Lo__0_0_11[8] = { 0xfff99fe0, 0x23cdfdff, 0xb0000000, 0x3, 0xd63dc7e0, 0x3bfc718, 0x0, 0x0, }; static bitset_subset Lo__0_0_12[8] = { 0xfffddfe0, 0x3effdff, 0x0, 0x3, 0xfffddfe0, 0x3effdff, 0x40000000, 0x3, }; static bitset_subset Lo__0_0_13[8] = { 0xfffddfe0, 0x3fffdff, 0x0, 0x3, 0xfc7fffe0, 0x2ffbffff, 0x7f, 0x0, }; static bitset_subset Lo__0_0_14[8] = { 0xfffffffe, 0xdffff, 0x3f, 0x0, 0xfef02596, 0x200decae, 0x3000001f, 0x0, }; static bitset_subset Lo__0_0_15[8] = { 0x1, 0x0, 0xfffffeff, 0x7ff, 0xf00, 0x0, 0x0, 0x0, }; static bits_tree * Lo__0_0[16] = { (bits_tree *)0, (bits_tree *)Lo__0_0_1, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)Lo__0_0_5, (bits_tree *)Lo__0_0_6, (bits_tree *)Lo__0_0_7, (bits_tree *)0, (bits_tree *)Lo__0_0_9, (bits_tree *)Lo__0_0_10, (bits_tree *)Lo__0_0_11, (bits_tree *)Lo__0_0_12, (bits_tree *)Lo__0_0_13, (bits_tree *)Lo__0_0_14, (bits_tree *)Lo__0_0_15, }; static bitset_subset Lo__0_1_0[8] = { 0xffffffff, 0x6fb, 0x3f0000, 0x0, 0x0, 0x0, 0xffff0000, 0x7fffff, }; static bitset_subset Lo__0_1_1[8] = { 0xffffffff, 0xffffffff, 0x83ffffff, 0xffffffff, 0xffffffff, 0xffffff07, 0xffffffff, 0x3ffffff, }; static bitset_subset Lo__0_1_2[8] = { 0xffffff7f, 0xffffffff, 0x3d7f3d7f, 0xffffffff, 0xffff3d7f, 0x7f3d7fff, 0xff7f7f3d, 0xffff7fff, }; static bitset_subset Lo__0_1_3[8] = { 0x7f3d7fff, 0xffffffff, 0x7ffff7f, 0x0, 0x0, 0xffffffff, 0xffffffff, 0x1fffff, }; static bitset_subset Lo__0_1_4[8] = { 0xfffffffe, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, }; static bitset_subset Lo__0_1_6[8] = { 0xffffffff, 0xffffffff, 0xffffffff, 0x7f9fff, 0x7fffffe, 0xffffffff, 0xffffffff, 0x7ff, }; static bitset_subset Lo__0_1_7[8] = { 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xfffff, 0x0, 0x0, }; static bitset_subset Lo__0_1_8[8] = { 0x0, 0xffffffff, 0xfffffff7, 0xffffff, 0xffffffff, 0x1ff, 0x0, 0x0, }; static bits_tree * Lo__0_1[16] = { (bits_tree *)Lo__0_1_0, (bits_tree *)Lo__0_1_1, (bits_tree *)Lo__0_1_2, (bits_tree *)Lo__0_1_3, (bits_tree *)Lo__0_1_4, (bits_tree *)-1L, (bits_tree *)Lo__0_1_6, (bits_tree *)Lo__0_1_7, (bits_tree *)Lo__0_1_8, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, }; static bitset_subset Lo__0_2_1[8] = { 0x0, 0x1e00000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }; static bits_tree * Lo__0_2[16] = { (bits_tree *)0, (bits_tree *)Lo__0_2_1, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, }; static bitset_subset Lo__0_3_0[8] = { 0x40, 0x0, 0xfffffffe, 0xffffffff, 0x1fffff, 0xfffffffe, 0xffffffff, 0x7ffffff, }; static bitset_subset Lo__0_3_1[8] = { 0xffffffe0, 0xfffe1fff, 0xffffffff, 0xffffffff, 0x7fff, 0xffffff, 0x0, 0x0, }; static bits_tree * Lo__0_3[16] = { (bits_tree *)Lo__0_3_0, (bits_tree *)Lo__0_3_1, (bits_tree *)0, (bits_tree *)0, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, }; static bitset_subset Lo__0_4_13[8] = { 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x3fffff, 0x0, 0x0, }; static bits_tree * Lo__0_4[16] = { (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)Lo__0_4_13, (bits_tree *)-1L, (bits_tree *)-1L, }; static bitset_subset Lo__0_9_15[8] = { 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x3f, 0x0, 0x0, }; static bits_tree * Lo__0_9[16] = { (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)Lo__0_9_15, }; static bitset_subset Lo__0_10_4[8] = { 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x1fff, 0x0, 0x0, 0x0, }; static bits_tree * Lo__0_10[16] = { (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)Lo__0_10_4, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, }; static bitset_subset Lo__0_13_7[8] = { 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xf, 0x0, 0x0, }; static bits_tree * Lo__0_13[16] = { (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)Lo__0_13_7, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, }; static bitset_subset Lo__0_15_10[8] = { 0xffffffff, 0x3fff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }; static bitset_subset Lo__0_15_11[8] = { 0xa0000000, 0x5f7ffdff, 0xffffffdb, 0xffffffff, 0xffffffff, 0x3ffff, 0xfff80000, 0xffffffff, }; static bitset_subset Lo__0_15_13[8] = { 0xffffffff, 0x3fffffff, 0xffff0000, 0xffffffff, 0xfffcffff, 0xffffffff, 0xff, 0xfff0000, }; static bitset_subset Lo__0_15_14[8] = { 0x0, 0x0, 0x0, 0xffd70000, 0xffffffff, 0xffffffff, 0xffffffff, 0x1fffffff, }; static bitset_subset Lo__0_15_15[8] = { 0x0, 0x0, 0x0, 0xfffeffc0, 0x3fffffff, 0x7fffffff, 0x1cfcfcfc, 0x0, }; static bits_tree * Lo__0_15[16] = { (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)-1L, (bits_tree *)Lo__0_15_10, (bits_tree *)Lo__0_15_11, (bits_tree *)-1L, (bits_tree *)Lo__0_15_13, (bits_tree *)Lo__0_15_14, (bits_tree *)Lo__0_15_15, }; static bits_tree * Lo__0[16] = { (bits_tree *)Lo__0_0, (bits_tree *)Lo__0_1, (bits_tree *)Lo__0_2, (bits_tree *)Lo__0_3, (bits_tree *)Lo__0_4, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)Lo__0_9, (bits_tree *)Lo__0_10, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)Lo__0_13, (bits_tree *)0, (bits_tree *)Lo__0_15, }; static bits_tree * Lo_[32] = { (bits_tree *)Lo__0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, }; static struct bits_tree_rule Lo__rule[] = { {32, 65536, 16, 65535}, {16, 4096, 12, 4095}, {16, 256, 8, 255}, {0, 256, 0, 0}, }; static struct bits_tree_shared Lo__stree = { 1, (bits_tree)&Lo_ }; static struct bits Lo__bits = { 0, Lo__rule, &Lo__stree }; #define Lo (&Lo__bits) static bitset_subset Mn__0_0_3[8] = { 0xffffffff, 0xffffffff, 0x7fff, 0x7, 0x0, 0x0, 0x0, 0x0, }; static bitset_subset Mn__0_0_4[8] = { 0x0, 0x0, 0x0, 0x0, 0x78, 0x0, 0x0, 0x0, }; static bitset_subset Mn__0_0_5[8] = { 0x0, 0x0, 0x0, 0x0, 0xfffe0000, 0xbbfffffb, 0x16, 0x0, }; static bitset_subset Mn__0_0_6[8] = { 0x0, 0x0, 0x3ff800, 0x10000, 0x0, 0x0, 0x9fc00000, 0x3d9f, }; static bitset_subset Mn__0_0_7[8] = { 0x20000, 0xffff0000, 0x7ff, 0x0, 0x0, 0x1ffc0, 0x0, 0x0, }; static bitset_subset Mn__0_0_9[8] = { 0x6, 0x10000000, 0x1e21fe, 0xc, 0x2, 0x10000000, 0x201e, 0xc, }; static bitset_subset Mn__0_0_10[8] = { 0x4, 0x10000000, 0x3986, 0x30000, 0x6, 0x10000000, 0x21be, 0x0, }; static bitset_subset Mn__0_0_11[8] = { 0x2, 0x90000000, 0x40200e, 0x0, 0x4, 0x0, 0x2001, 0x0, }; static bitset_subset Mn__0_0_12[8] = { 0x0, 0xc0000000, 0x603dc1, 0x0, 0x0, 0x80000000, 0x3040, 0x0, }; static bitset_subset Mn__0_0_13[8] = { 0x0, 0x0, 0x200e, 0x0, 0x0, 0x0, 0x5c0400, 0x0, }; static bitset_subset Mn__0_0_14[8] = { 0x0, 0x7f20000, 0x7f80, 0x0, 0x0, 0x1bf20000, 0x3f00, 0x0, }; static bitset_subset Mn__0_0_15[8] = { 0x3000000, 0x2a00000, 0x0, 0x7ffe0000, 0xfeff00df, 0x1fffffff, 0x40, 0x0, }; static bits_tree * Mn__0_0[16] = { (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)Mn__0_0_3, (bits_tree *)Mn__0_0_4, (bits_tree *)Mn__0_0_5, (bits_tree *)Mn__0_0_6, (bits_tree *)Mn__0_0_7, (bits_tree *)0, (bits_tree *)Mn__0_0_9, (bits_tree *)Mn__0_0_10, (bits_tree *)Mn__0_0_11, (bits_tree *)Mn__0_0_12, (bits_tree *)Mn__0_0_13, (bits_tree *)Mn__0_0_14, (bits_tree *)Mn__0_0_15, }; static bitset_subset Mn__0_1_0[8] = { 0x0, 0x2c5e000, 0x3000000, 0x0, 0x0, 0x0, 0x0, 0x0, }; static bitset_subset Mn__0_1_7[8] = { 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f800000, 0xffe40, 0x0, }; static bitset_subset Mn__0_1_8[8] = { 0x0, 0x0, 0x0, 0x0, 0x0, 0x200, 0x0, 0x0, }; static bits_tree * Mn__0_1[16] = { (bits_tree *)Mn__0_1_0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)Mn__0_1_7, (bits_tree *)Mn__0_1_8, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, }; static bitset_subset Mn__0_2_0[8] = { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1fff0000, 0x2, }; static bits_tree * Mn__0_2[16] = { (bits_tree *)Mn__0_2_0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, }; static bitset_subset Mn__0_3_0[8] = { 0x0, 0xfc00, 0x0, 0x0, 0x6000000, 0x0, 0x0, 0x0, }; static bits_tree * Mn__0_3[16] = { (bits_tree *)Mn__0_3_0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, }; static bitset_subset Mn__0_15_11[8] = { 0x40000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }; static bitset_subset Mn__0_15_14[8] = { 0x0, 0xf, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }; static bits_tree * Mn__0_15[16] = { (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)Mn__0_15_11, (bits_tree *)0, (bits_tree *)0, (bits_tree *)Mn__0_15_14, (bits_tree *)0, }; static bits_tree * Mn__0[16] = { (bits_tree *)Mn__0_0, (bits_tree *)Mn__0_1, (bits_tree *)Mn__0_2, (bits_tree *)Mn__0_3, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)Mn__0_15, }; static bits_tree * Mn_[32] = { (bits_tree *)Mn__0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, }; static struct bits_tree_rule Mn__rule[] = { {32, 65536, 16, 65535}, {16, 4096, 12, 4095}, {16, 256, 8, 255}, {0, 256, 0, 0}, }; static struct bits_tree_shared Mn__stree = { 1, (bits_tree)&Mn_ }; static struct bits Mn__bits = { 0, Mn__rule, &Mn__stree }; #define Mn (&Mn__bits) static bitset_subset Mc__0_0_9[8] = { 0x8, 0xc0000000, 0x1e01, 0x0, 0xc, 0xc0000000, 0x801981, 0x0, }; static bitset_subset Mc__0_0_10[8] = { 0x0, 0xc0000000, 0x1, 0x0, 0x8, 0xc0000000, 0x1a01, 0x0, }; static bitset_subset Mc__0_0_11[8] = { 0xc, 0x40000000, 0x801981, 0x0, 0x8, 0xc0000000, 0x801dc6, 0x0, }; static bitset_subset Mc__0_0_12[8] = { 0xe, 0x0, 0x1e, 0x0, 0xc, 0x40000000, 0x600d9f, 0x0, }; static bitset_subset Mc__0_0_13[8] = { 0xc, 0xc0000000, 0x801dc1, 0x0, 0xc, 0x0, 0xff038000, 0xc0000, }; static bitset_subset Mc__0_0_15[8] = { 0x0, 0xc0000000, 0x0, 0x80000000, 0x0, 0x0, 0x0, 0x0, }; static bits_tree * Mc__0_0[16] = { (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)Mc__0_0_9, (bits_tree *)Mc__0_0_10, (bits_tree *)Mc__0_0_11, (bits_tree *)Mc__0_0_12, (bits_tree *)Mc__0_0_13, (bits_tree *)0, (bits_tree *)Mc__0_0_15, }; static bitset_subset Mc__0_1_0[8] = { 0x0, 0x1021000, 0xc00000, 0x0, 0x0, 0x0, 0x0, 0x0, }; static bitset_subset Mc__0_1_7[8] = { 0x0, 0x0, 0x0, 0x0, 0x0, 0xc0700000, 0x1bf, 0x0, }; static bits_tree * Mc__0_1[16] = { (bits_tree *)Mc__0_1_0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)Mc__0_1_7, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, }; static bits_tree * Mc__0[16] = { (bits_tree *)Mc__0_0, (bits_tree *)Mc__0_1, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, }; static bits_tree * Mc_[32] = { (bits_tree *)Mc__0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, }; static struct bits_tree_rule Mc__rule[] = { {32, 65536, 16, 65535}, {16, 4096, 12, 4095}, {16, 256, 8, 255}, {0, 256, 0, 0}, }; static struct bits_tree_shared Mc__stree = { 1, (bits_tree)&Mc_ }; static struct bits Mc__bits = { 0, Mc__rule, &Mc__stree }; #define Mc (&Mc__bits) static bitset_subset Me__0_0_4[8] = { 0x0, 0x0, 0x0, 0x0, 0x300, 0x0, 0x0, 0x0, }; static bitset_subset Me__0_0_6[8] = { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x60000000, 0x0, }; static bits_tree * Me__0_0[16] = { (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)Me__0_0_4, (bits_tree *)0, (bits_tree *)Me__0_0_6, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, }; static bitset_subset Me__0_2_0[8] = { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe0000000, 0xd, }; static bits_tree * Me__0_2[16] = { (bits_tree *)Me__0_2_0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, }; static bits_tree * Me__0[16] = { (bits_tree *)Me__0_0, (bits_tree *)0, (bits_tree *)Me__0_2, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, }; static bits_tree * Me_[32] = { (bits_tree *)Me__0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, }; static struct bits_tree_rule Me__rule[] = { {32, 65536, 16, 65535}, {16, 4096, 12, 4095}, {16, 256, 8, 255}, {0, 256, 0, 0}, }; static struct bits_tree_shared Me__stree = { 1, (bits_tree)&Me_ }; static struct bits Me__bits = { 0, Me__rule, &Me__stree }; #define Me (&Me__bits) static bitset_subset Nd__0_0_0[8] = { 0x0, 0x3ff0000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }; static bitset_subset Nd__0_0_6[8] = { 0x0, 0x0, 0x0, 0x3ff, 0x0, 0x0, 0x0, 0x3ff0000, }; static bitset_subset Nd__0_0_9[8] = { 0x0, 0x0, 0x0, 0xffc0, 0x0, 0x0, 0x0, 0xffc0, }; static bitset_subset Nd__0_0_10[8] = { 0x0, 0x0, 0x0, 0xffc0, 0x0, 0x0, 0x0, 0xffc0, }; static bitset_subset Nd__0_0_11[8] = { 0x0, 0x0, 0x0, 0xffc0, 0x0, 0x0, 0x0, 0xff80, }; static bitset_subset Nd__0_0_12[8] = { 0x0, 0x0, 0x0, 0xffc0, 0x0, 0x0, 0x0, 0xffc0, }; static bitset_subset Nd__0_0_13[8] = { 0x0, 0x0, 0x0, 0xffc0, 0x0, 0x0, 0x0, 0x0, }; static bitset_subset Nd__0_0_14[8] = { 0x0, 0x0, 0x3ff0000, 0x0, 0x0, 0x0, 0x3ff0000, 0x0, }; static bitset_subset Nd__0_0_15[8] = { 0x0, 0x3ff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }; static bits_tree * Nd__0_0[16] = { (bits_tree *)Nd__0_0_0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)Nd__0_0_6, (bits_tree *)0, (bits_tree *)0, (bits_tree *)Nd__0_0_9, (bits_tree *)Nd__0_0_10, (bits_tree *)Nd__0_0_11, (bits_tree *)Nd__0_0_12, (bits_tree *)Nd__0_0_13, (bits_tree *)Nd__0_0_14, (bits_tree *)Nd__0_0_15, }; static bitset_subset Nd__0_1_0[8] = { 0x0, 0x0, 0x3ff, 0x0, 0x0, 0x0, 0x0, 0x0, }; static bitset_subset Nd__0_1_3[8] = { 0x0, 0x0, 0x0, 0x3fe00, 0x0, 0x0, 0x0, 0x0, }; static bitset_subset Nd__0_1_7[8] = { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3ff, }; static bitset_subset Nd__0_1_8[8] = { 0x3ff0000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }; static bits_tree * Nd__0_1[16] = { (bits_tree *)Nd__0_1_0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)Nd__0_1_3, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)Nd__0_1_7, (bits_tree *)Nd__0_1_8, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, }; static bitset_subset Nd__0_15_15[8] = { 0x3ff0000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }; static bits_tree * Nd__0_15[16] = { (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)Nd__0_15_15, }; static bits_tree * Nd__0[16] = { (bits_tree *)Nd__0_0, (bits_tree *)Nd__0_1, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)Nd__0_15, }; static bits_tree * Nd_[32] = { (bits_tree *)Nd__0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, }; static struct bits_tree_rule Nd__rule[] = { {32, 65536, 16, 65535}, {16, 4096, 12, 4095}, {16, 256, 8, 255}, {0, 256, 0, 0}, }; static struct bits_tree_shared Nd__stree = { 1, (bits_tree)&Nd_ }; static struct bits Nd__bits = { 0, Nd__rule, &Nd__stree }; #define Nd (&Nd__bits) static bitset_subset Nl__0_2_1[8] = { 0x0, 0x0, 0x0, 0xffffffff, 0xf, 0x0, 0x0, 0x0, }; static bits_tree * Nl__0_2[16] = { (bits_tree *)0, (bits_tree *)Nl__0_2_1, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, }; static bitset_subset Nl__0_3_0[8] = { 0x80, 0x70003fe, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }; static bits_tree * Nl__0_3[16] = { (bits_tree *)Nl__0_3_0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, }; static bits_tree * Nl__0[16] = { (bits_tree *)0, (bits_tree *)0, (bits_tree *)Nl__0_2, (bits_tree *)Nl__0_3, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, }; static bits_tree * Nl_[32] = { (bits_tree *)Nl__0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, }; static struct bits_tree_rule Nl__rule[] = { {32, 65536, 16, 65535}, {16, 4096, 12, 4095}, {16, 256, 8, 255}, {0, 256, 0, 0}, }; static struct bits_tree_shared Nl__stree = { 1, (bits_tree)&Nl_ }; static struct bits Nl__bits = { 0, Nl__rule, &Nl__stree }; #define Nl (&Nl__bits) static bitset_subset No__0_0_0[8] = { 0x0, 0x0, 0x0, 0x0, 0x0, 0x720c0000, 0x0, 0x0, }; static bitset_subset No__0_0_9[8] = { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f00000, }; static bitset_subset No__0_0_11[8] = { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x70000, }; static bitset_subset No__0_0_15[8] = { 0x0, 0xffc00, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }; static bits_tree * No__0_0[16] = { (bits_tree *)No__0_0_0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)No__0_0_9, (bits_tree *)0, (bits_tree *)No__0_0_11, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)No__0_0_15, }; static bitset_subset No__0_1_3[8] = { 0x0, 0x0, 0x0, 0x1ffc0000, 0x0, 0x0, 0x0, 0x0, }; static bitset_subset No__0_1_6[8] = { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1c000, }; static bits_tree * No__0_1[16] = { (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)No__0_1_3, (bits_tree *)0, (bits_tree *)0, (bits_tree *)No__0_1_6, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, }; static bitset_subset No__0_2_0[8] = { 0x0, 0x0, 0x0, 0x3f10000, 0x3ff, 0x0, 0x0, 0x0, }; static bitset_subset No__0_2_1[8] = { 0x0, 0x0, 0xfff80000, 0x0, 0x0, 0x0, 0x0, 0x0, }; static bitset_subset No__0_2_4[8] = { 0x0, 0x0, 0x0, 0xffffffff, 0xfffffff, 0x0, 0x0, 0x400, }; static bitset_subset No__0_2_7[8] = { 0x0, 0x0, 0x0, 0xffc00000, 0xfffff, 0x0, 0x0, 0x0, }; static bits_tree * No__0_2[16] = { (bits_tree *)No__0_2_0, (bits_tree *)No__0_2_1, (bits_tree *)0, (bits_tree *)0, (bits_tree *)No__0_2_4, (bits_tree *)0, (bits_tree *)0, (bits_tree *)No__0_2_7, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, }; static bitset_subset No__0_3_1[8] = { 0x0, 0x0, 0x0, 0x0, 0x3c0000, 0x0, 0x0, 0x0, }; static bitset_subset No__0_3_2[8] = { 0x0, 0x3ff, 0x0, 0x0, 0x3ff, 0x0, 0x0, 0x0, }; static bits_tree * No__0_3[16] = { (bits_tree *)0, (bits_tree *)No__0_3_1, (bits_tree *)No__0_3_2, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, }; static bits_tree * No__0[16] = { (bits_tree *)No__0_0, (bits_tree *)No__0_1, (bits_tree *)No__0_2, (bits_tree *)No__0_3, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, }; static bits_tree * No_[32] = { (bits_tree *)No__0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, }; static struct bits_tree_rule No__rule[] = { {32, 65536, 16, 65535}, {16, 4096, 12, 4095}, {16, 256, 8, 255}, {0, 256, 0, 0}, }; static struct bits_tree_shared No__stree = { 1, (bits_tree)&No_ }; static struct bits No__bits = { 0, No__rule, &No__stree }; #define No (&No__bits) static bitset_subset Zs__0_0_0[8] = { 0x0, 0x1, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, }; static bits_tree * Zs__0_0[16] = { (bits_tree *)Zs__0_0_0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, }; static bitset_subset Zs__0_1_6[8] = { 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, }; static bits_tree * Zs__0_1[16] = { (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)Zs__0_1_6, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, }; static bitset_subset Zs__0_2_0[8] = { 0xfff, 0x8000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }; static bits_tree * Zs__0_2[16] = { (bits_tree *)Zs__0_2_0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, }; static bitset_subset Zs__0_3_0[8] = { 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }; static bits_tree * Zs__0_3[16] = { (bits_tree *)Zs__0_3_0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, }; static bits_tree * Zs__0[16] = { (bits_tree *)Zs__0_0, (bits_tree *)Zs__0_1, (bits_tree *)Zs__0_2, (bits_tree *)Zs__0_3, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, }; static bits_tree * Zs_[32] = { (bits_tree *)Zs__0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, }; static struct bits_tree_rule Zs__rule[] = { {32, 65536, 16, 65535}, {16, 4096, 12, 4095}, {16, 256, 8, 255}, {0, 256, 0, 0}, }; static struct bits_tree_shared Zs__stree = { 1, (bits_tree)&Zs_ }; static struct bits Zs__bits = { 0, Zs__rule, &Zs__stree }; #define Zs (&Zs__bits) static bitset_subset Zl__0_2_0[8] = { 0x0, 0x100, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }; static bits_tree * Zl__0_2[16] = { (bits_tree *)Zl__0_2_0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, }; static bits_tree * Zl__0[16] = { (bits_tree *)0, (bits_tree *)0, (bits_tree *)Zl__0_2, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, }; static bits_tree * Zl_[32] = { (bits_tree *)Zl__0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, }; static struct bits_tree_rule Zl__rule[] = { {32, 65536, 16, 65535}, {16, 4096, 12, 4095}, {16, 256, 8, 255}, {0, 256, 0, 0}, }; static struct bits_tree_shared Zl__stree = { 1, (bits_tree)&Zl_ }; static struct bits Zl__bits = { 0, Zl__rule, &Zl__stree }; #define Zl (&Zl__bits) static bitset_subset Zp__0_2_0[8] = { 0x0, 0x200, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }; static bits_tree * Zp__0_2[16] = { (bits_tree *)Zp__0_2_0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, }; static bits_tree * Zp__0[16] = { (bits_tree *)0, (bits_tree *)0, (bits_tree *)Zp__0_2, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, }; static bits_tree * Zp_[32] = { (bits_tree *)Zp__0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, }; static struct bits_tree_rule Zp__rule[] = { {32, 65536, 16, 65535}, {16, 4096, 12, 4095}, {16, 256, 8, 255}, {0, 256, 0, 0}, }; static struct bits_tree_shared Zp__stree = { 1, (bits_tree)&Zp_ }; static struct bits Zp__bits = { 0, Zp__rule, &Zp__stree }; #define Zp (&Zp__bits) static bitset_subset Cc__0_0_0[8] = { 0xffffffff, 0x0, 0x0, 0x80000000, 0xffffffff, 0x0, 0x0, 0x0, }; static bits_tree * Cc__0_0[16] = { (bits_tree *)Cc__0_0_0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, }; static bits_tree * Cc__0[16] = { (bits_tree *)Cc__0_0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, }; static bits_tree * Cc_[32] = { (bits_tree *)Cc__0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, }; static struct bits_tree_rule Cc__rule[] = { {32, 65536, 16, 65535}, {16, 4096, 12, 4095}, {16, 256, 8, 255}, {0, 256, 0, 0}, }; static struct bits_tree_shared Cc__stree = { 1, (bits_tree)&Cc_ }; static struct bits Cc__bits = { 0, Cc__rule, &Cc__stree }; #define Cc (&Cc__bits) static bitset_subset Cf__0_0_7[8] = { 0x8000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }; static bits_tree * Cf__0_0[16] = { (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)Cf__0_0_7, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, }; static bitset_subset Cf__0_1_8[8] = { 0x7800, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }; static bits_tree * Cf__0_1[16] = { (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)Cf__0_1_8, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, }; static bitset_subset Cf__0_2_0[8] = { 0xf000, 0x7c00, 0x0, 0xfc00, 0x0, 0x0, 0x0, 0x0, }; static bits_tree * Cf__0_2[16] = { (bits_tree *)Cf__0_2_0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, }; static bitset_subset Cf__0_15_14[8] = { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x80000000, }; static bitset_subset Cf__0_15_15[8] = { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe000000, }; static bits_tree * Cf__0_15[16] = { (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)Cf__0_15_14, (bits_tree *)Cf__0_15_15, }; static bits_tree * Cf__0[16] = { (bits_tree *)Cf__0_0, (bits_tree *)Cf__0_1, (bits_tree *)Cf__0_2, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)Cf__0_15, }; static bits_tree * Cf_[32] = { (bits_tree *)Cf__0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, }; static struct bits_tree_rule Cf__rule[] = { {32, 65536, 16, 65535}, {16, 4096, 12, 4095}, {16, 256, 8, 255}, {0, 256, 0, 0}, }; static struct bits_tree_shared Cf__stree = { 1, (bits_tree)&Cf_ }; static struct bits Cf__bits = { 0, Cf__rule, &Cf__stree }; #define Cf (&Cf__bits) static bits_tree * Cs__0_13[16] = { (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, }; static bits_tree * Cs__0[16] = { (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)Cs__0_13, (bits_tree *)0, (bits_tree *)0, }; static bits_tree * Cs_[32] = { (bits_tree *)Cs__0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, }; static struct bits_tree_rule Cs__rule[] = { {32, 65536, 16, 65535}, {16, 4096, 12, 4095}, {16, 256, 8, 255}, {0, 256, 0, 0}, }; static struct bits_tree_shared Cs__stree = { 1, (bits_tree)&Cs_ }; static struct bits Cs__bits = { 0, Cs__rule, &Cs__stree }; #define Cs (&Cs__bits) static bits_tree * Co__0_15[16] = { (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, }; static bits_tree * Co__0[16] = { (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)-1L, (bits_tree *)Co__0_15, }; static bitset_subset Co__15_15_15[8] = { 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x3fffffff, }; static bits_tree * Co__15_15[16] = { (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)Co__15_15_15, }; static bits_tree * Co__15[16] = { (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)Co__15_15, }; static bitset_subset Co__16_15_15[8] = { 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x3ffff, }; static bits_tree * Co__16_15[16] = { (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)Co__16_15_15, }; static bits_tree * Co__16[16] = { (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)Co__16_15, }; static bits_tree * Co_[32] = { (bits_tree *)Co__0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)Co__15, (bits_tree *)Co__16, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, }; static struct bits_tree_rule Co__rule[] = { {32, 65536, 16, 65535}, {16, 4096, 12, 4095}, {16, 256, 8, 255}, {0, 256, 0, 0}, }; static struct bits_tree_shared Co__stree = { 1, (bits_tree)&Co_ }; static struct bits Co__bits = { 0, Co__rule, &Co__stree }; #define Co (&Co__bits) static bits_tree * Cn_[32] = { (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, }; static struct bits_tree_rule Cn__rule[] = { {32, 65536, 16, 65535}, {16, 4096, 12, 4095}, {16, 256, 8, 255}, {0, 256, 0, 0}, }; static struct bits_tree_shared Cn__stree = { 1, (bits_tree)&Cn_ }; static struct bits Cn__bits = { 0, Cn__rule, &Cn__stree }; #define Cn (&Cn__bits) static bitset_subset Pc__0_0_0[8] = { 0x0, 0x0, 0x80000000, 0x0, 0x0, 0x0, 0x0, 0x0, }; static bits_tree * Pc__0_0[16] = { (bits_tree *)Pc__0_0_0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, }; static bitset_subset Pc__0_2_0[8] = { 0x0, 0x80000000, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, }; static bits_tree * Pc__0_2[16] = { (bits_tree *)Pc__0_2_0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, }; static bitset_subset Pc__0_3_0[8] = { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8000000, }; static bits_tree * Pc__0_3[16] = { (bits_tree *)Pc__0_3_0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, }; static bitset_subset Pc__0_15_14[8] = { 0x0, 0x180000, 0xe000, 0x0, 0x0, 0x0, 0x0, 0x0, }; static bitset_subset Pc__0_15_15[8] = { 0x0, 0x80000000, 0x0, 0x20, 0x0, 0x0, 0x0, 0x0, }; static bits_tree * Pc__0_15[16] = { (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)Pc__0_15_14, (bits_tree *)Pc__0_15_15, }; static bits_tree * Pc__0[16] = { (bits_tree *)Pc__0_0, (bits_tree *)0, (bits_tree *)Pc__0_2, (bits_tree *)Pc__0_3, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)Pc__0_15, }; static bits_tree * Pc_[32] = { (bits_tree *)Pc__0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, }; static struct bits_tree_rule Pc__rule[] = { {32, 65536, 16, 65535}, {16, 4096, 12, 4095}, {16, 256, 8, 255}, {0, 256, 0, 0}, }; static struct bits_tree_shared Pc__stree = { 1, (bits_tree)&Pc_ }; static struct bits Pc__bits = { 0, Pc__rule, &Pc__stree }; #define Pc (&Pc__bits) static bitset_subset Pd__0_0_0[8] = { 0x0, 0x2000, 0x0, 0x0, 0x0, 0x2000, 0x0, 0x0, }; static bitset_subset Pd__0_0_5[8] = { 0x0, 0x0, 0x0, 0x0, 0x400, 0x0, 0x0, 0x0, }; static bits_tree * Pd__0_0[16] = { (bits_tree *)Pd__0_0_0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)Pd__0_0_5, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, }; static bitset_subset Pd__0_1_8[8] = { 0x40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }; static bits_tree * Pd__0_1[16] = { (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)Pd__0_1_8, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, }; static bitset_subset Pd__0_2_0[8] = { 0x3f0000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }; static bits_tree * Pd__0_2[16] = { (bits_tree *)Pd__0_2_0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, }; static bitset_subset Pd__0_3_0[8] = { 0x10000000, 0x10000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }; static bits_tree * Pd__0_3[16] = { (bits_tree *)Pd__0_3_0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, }; static bitset_subset Pd__0_15_14[8] = { 0x0, 0x60000, 0x1000000, 0x8, 0x0, 0x0, 0x0, 0x0, }; static bitset_subset Pd__0_15_15[8] = { 0x2000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }; static bits_tree * Pd__0_15[16] = { (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)Pd__0_15_14, (bits_tree *)Pd__0_15_15, }; static bits_tree * Pd__0[16] = { (bits_tree *)Pd__0_0, (bits_tree *)Pd__0_1, (bits_tree *)Pd__0_2, (bits_tree *)Pd__0_3, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)Pd__0_15, }; static bits_tree * Pd_[32] = { (bits_tree *)Pd__0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, }; static struct bits_tree_rule Pd__rule[] = { {32, 65536, 16, 65535}, {16, 4096, 12, 4095}, {16, 256, 8, 255}, {0, 256, 0, 0}, }; static struct bits_tree_shared Pd__stree = { 1, (bits_tree)&Pd_ }; static struct bits Pd__bits = { 0, Pd__rule, &Pd__stree }; #define Pd (&Pd__bits) static bitset_subset Ps__0_0_0[8] = { 0x0, 0x100, 0x8000000, 0x8000000, 0x0, 0x0, 0x0, 0x0, }; static bitset_subset Ps__0_0_15[8] = { 0x0, 0x14000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }; static bits_tree * Ps__0_0[16] = { (bits_tree *)Ps__0_0_0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)Ps__0_0_15, }; static bitset_subset Ps__0_1_6[8] = { 0x0, 0x0, 0x0, 0x0, 0x8000000, 0x0, 0x0, 0x0, }; static bits_tree * Ps__0_1[16] = { (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)Ps__0_1_6, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, }; static bitset_subset Ps__0_2_0[8] = { 0x44000000, 0x0, 0x20, 0x20000000, 0x2000, 0x0, 0x0, 0x0, }; static bitset_subset Ps__0_2_3[8] = { 0x0, 0x200, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }; static bits_tree * Ps__0_2[16] = { (bits_tree *)Ps__0_2_0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)Ps__0_2_3, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, }; static bitset_subset Ps__0_3_0[8] = { 0x25515500, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }; static bits_tree * Ps__0_3[16] = { (bits_tree *)Ps__0_3_0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, }; static bitset_subset Ps__0_15_13[8] = { 0x0, 0x40000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }; static bitset_subset Ps__0_15_14[8] = { 0x0, 0xaaa00000, 0x2a00000a, 0x0, 0x0, 0x0, 0x0, 0x0, }; static bitset_subset Ps__0_15_15[8] = { 0x100, 0x8000000, 0x8000000, 0x4, 0x0, 0x0, 0x0, 0x0, }; static bits_tree * Ps__0_15[16] = { (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)Ps__0_15_13, (bits_tree *)Ps__0_15_14, (bits_tree *)Ps__0_15_15, }; static bits_tree * Ps__0[16] = { (bits_tree *)Ps__0_0, (bits_tree *)Ps__0_1, (bits_tree *)Ps__0_2, (bits_tree *)Ps__0_3, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)Ps__0_15, }; static bits_tree * Ps_[32] = { (bits_tree *)Ps__0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, }; static struct bits_tree_rule Ps__rule[] = { {32, 65536, 16, 65535}, {16, 4096, 12, 4095}, {16, 256, 8, 255}, {0, 256, 0, 0}, }; static struct bits_tree_shared Ps__stree = { 1, (bits_tree)&Ps_ }; static struct bits Ps__bits = { 0, Ps__rule, &Ps__stree }; #define Ps (&Ps__bits) static bitset_subset Pe__0_0_0[8] = { 0x0, 0x200, 0x20000000, 0x20000000, 0x0, 0x0, 0x0, 0x0, }; static bitset_subset Pe__0_0_15[8] = { 0x0, 0x28000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }; static bits_tree * Pe__0_0[16] = { (bits_tree *)Pe__0_0_0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)Pe__0_0_15, }; static bitset_subset Pe__0_1_6[8] = { 0x0, 0x0, 0x0, 0x0, 0x10000000, 0x0, 0x0, 0x0, }; static bits_tree * Pe__0_1[16] = { (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)Pe__0_1_6, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, }; static bitset_subset Pe__0_2_0[8] = { 0x0, 0x0, 0x40, 0x40000000, 0x4000, 0x0, 0x0, 0x0, }; static bitset_subset Pe__0_2_3[8] = { 0x0, 0x400, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }; static bits_tree * Pe__0_2[16] = { (bits_tree *)Pe__0_2_0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)Pe__0_2_3, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, }; static bitset_subset Pe__0_3_0[8] = { 0xcaa2aa00, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }; static bits_tree * Pe__0_3[16] = { (bits_tree *)Pe__0_3_0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, }; static bitset_subset Pe__0_15_13[8] = { 0x0, 0x80000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }; static bitset_subset Pe__0_15_14[8] = { 0x0, 0x55400000, 0x54000015, 0x0, 0x0, 0x0, 0x0, 0x0, }; static bitset_subset Pe__0_15_15[8] = { 0x200, 0x20000000, 0x20000000, 0x8, 0x0, 0x0, 0x0, 0x0, }; static bits_tree * Pe__0_15[16] = { (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)Pe__0_15_13, (bits_tree *)Pe__0_15_14, (bits_tree *)Pe__0_15_15, }; static bits_tree * Pe__0[16] = { (bits_tree *)Pe__0_0, (bits_tree *)Pe__0_1, (bits_tree *)Pe__0_2, (bits_tree *)Pe__0_3, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)Pe__0_15, }; static bits_tree * Pe_[32] = { (bits_tree *)Pe__0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, }; static struct bits_tree_rule Pe__rule[] = { {32, 65536, 16, 65535}, {16, 4096, 12, 4095}, {16, 256, 8, 255}, {0, 256, 0, 0}, }; static struct bits_tree_shared Pe__stree = { 1, (bits_tree)&Pe_ }; static struct bits Pe__bits = { 0, Pe__rule, &Pe__stree }; #define Pe (&Pe__bits) static bitset_subset Pi__0_0_0[8] = { 0x0, 0x0, 0x0, 0x0, 0x0, 0x800, 0x0, 0x0, }; static bits_tree * Pi__0_0[16] = { (bits_tree *)Pi__0_0_0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, }; static bitset_subset Pi__0_2_0[8] = { 0x99000000, 0x2000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }; static bits_tree * Pi__0_2[16] = { (bits_tree *)Pi__0_2_0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, }; static bits_tree * Pi__0[16] = { (bits_tree *)Pi__0_0, (bits_tree *)0, (bits_tree *)Pi__0_2, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, }; static bits_tree * Pi_[32] = { (bits_tree *)Pi__0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, }; static struct bits_tree_rule Pi__rule[] = { {32, 65536, 16, 65535}, {16, 4096, 12, 4095}, {16, 256, 8, 255}, {0, 256, 0, 0}, }; static struct bits_tree_shared Pi__stree = { 1, (bits_tree)&Pi_ }; static struct bits Pi__bits = { 0, Pi__rule, &Pi__stree }; #define Pi (&Pi__bits) static bitset_subset Pf__0_0_0[8] = { 0x0, 0x0, 0x0, 0x0, 0x0, 0x8000000, 0x0, 0x0, }; static bits_tree * Pf__0_0[16] = { (bits_tree *)Pf__0_0_0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, }; static bitset_subset Pf__0_2_0[8] = { 0x22000000, 0x4000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }; static bits_tree * Pf__0_2[16] = { (bits_tree *)Pf__0_2_0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, }; static bits_tree * Pf__0[16] = { (bits_tree *)Pf__0_0, (bits_tree *)0, (bits_tree *)Pf__0_2, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, }; static bits_tree * Pf_[32] = { (bits_tree *)Pf__0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, }; static struct bits_tree_rule Pf__rule[] = { {32, 65536, 16, 65535}, {16, 4096, 12, 4095}, {16, 256, 8, 255}, {0, 256, 0, 0}, }; static struct bits_tree_shared Pf__stree = { 1, (bits_tree)&Pf_ }; static struct bits Pf__bits = { 0, Pf__rule, &Pf__stree }; #define Pf (&Pf__bits) static bitset_subset Po__0_0_0[8] = { 0x0, 0x8c00d4ee, 0x10000001, 0x0, 0x0, 0x80800002, 0x0, 0x0, }; static bitset_subset Po__0_0_3[8] = { 0x0, 0x0, 0x0, 0x40000000, 0x80, 0x0, 0x0, 0x0, }; static bitset_subset Po__0_0_5[8] = { 0x0, 0x0, 0xfc000000, 0x0, 0x200, 0x40000000, 0x9, 0x180000, }; static bitset_subset Po__0_0_6[8] = { 0x88001000, 0x0, 0x0, 0x3c00, 0x0, 0x0, 0x100000, 0x0, }; static bitset_subset Po__0_0_7[8] = { 0x3fff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }; static bitset_subset Po__0_0_9[8] = { 0x0, 0x0, 0x0, 0x10030, 0x0, 0x0, 0x0, 0x0, }; static bitset_subset Po__0_0_13[8] = { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x100000, }; static bitset_subset Po__0_0_14[8] = { 0x0, 0x0, 0xc008000, 0x0, 0x0, 0x0, 0x0, 0x0, }; static bitset_subset Po__0_0_15[8] = { 0x7fff0, 0x0, 0x0, 0x0, 0x20, 0x0, 0x0, 0x0, }; static bits_tree * Po__0_0[16] = { (bits_tree *)Po__0_0_0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)Po__0_0_3, (bits_tree *)0, (bits_tree *)Po__0_0_5, (bits_tree *)Po__0_0_6, (bits_tree *)Po__0_0_7, (bits_tree *)0, (bits_tree *)Po__0_0_9, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)Po__0_0_13, (bits_tree *)Po__0_0_14, (bits_tree *)Po__0_0_15, }; static bitset_subset Po__0_1_0[8] = { 0x0, 0x0, 0xfc00, 0x0, 0x0, 0x0, 0x0, 0x8000000, }; static bitset_subset Po__0_1_3[8] = { 0x0, 0x0, 0x0, 0x1fe, 0x0, 0x0, 0x0, 0x0, }; static bitset_subset Po__0_1_6[8] = { 0x0, 0x0, 0x0, 0x6000, 0x0, 0x0, 0x0, 0x3800, }; static bitset_subset Po__0_1_7[8] = { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x17f00000, 0x0, }; static bitset_subset Po__0_1_8[8] = { 0x7bf, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }; static bits_tree * Po__0_1[16] = { (bits_tree *)Po__0_1_0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)Po__0_1_3, (bits_tree *)0, (bits_tree *)0, (bits_tree *)Po__0_1_6, (bits_tree *)Po__0_1_7, (bits_tree *)Po__0_1_8, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, }; static bitset_subset Po__0_2_0[8] = { 0xc00000, 0x79ff00ff, 0x3f0e, 0x0, 0x0, 0x0, 0x0, 0x0, }; static bits_tree * Po__0_2[16] = { (bits_tree *)Po__0_2_0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, }; static bitset_subset Po__0_3_0[8] = { 0xe, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }; static bits_tree * Po__0_3[16] = { (bits_tree *)Po__0_3_0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, }; static bitset_subset Po__0_15_14[8] = { 0x0, 0x10000, 0x80f71e00, 0xd03, 0x0, 0x0, 0x0, 0x0, }; static bitset_subset Po__0_15_15[8] = { 0x8c00d4ee, 0x10000001, 0x0, 0x12, 0x0, 0x0, 0x0, 0x0, }; static bits_tree * Po__0_15[16] = { (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)Po__0_15_14, (bits_tree *)Po__0_15_15, }; static bits_tree * Po__0[16] = { (bits_tree *)Po__0_0, (bits_tree *)Po__0_1, (bits_tree *)Po__0_2, (bits_tree *)Po__0_3, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)Po__0_15, }; static bits_tree * Po_[32] = { (bits_tree *)Po__0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, }; static struct bits_tree_rule Po__rule[] = { {32, 65536, 16, 65535}, {16, 4096, 12, 4095}, {16, 256, 8, 255}, {0, 256, 0, 0}, }; static struct bits_tree_shared Po__stree = { 1, (bits_tree)&Po_ }; static struct bits Po__bits = { 0, Po__rule, &Po__stree }; #define Po (&Po__bits) static bitset_subset Sm__0_0_0[8] = { 0x0, 0x70000800, 0x0, 0x50000000, 0x0, 0x21000, 0x800000, 0x800000, }; static bits_tree * Sm__0_0[16] = { (bits_tree *)Sm__0_0_0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, }; static bitset_subset Sm__0_2_0[8] = { 0x0, 0x0, 0x10, 0x1c000000, 0x1c00, 0x0, 0x0, 0x0, }; static bitset_subset Sm__0_2_1[8] = { 0x0, 0x0, 0x0, 0x0, 0xc1f0000, 0x4049, 0x14c000, 0x0, }; static bitset_subset Sm__0_2_2[8] = { 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x3ffff, }; static bitset_subset Sm__0_2_3[8] = { 0xf00, 0x3, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }; static bitset_subset Sm__0_2_5[8] = { 0x0, 0x0, 0x0, 0x0, 0x0, 0x800000, 0x2, 0x0, }; static bitset_subset Sm__0_2_6[8] = { 0x0, 0x0, 0x0, 0x8000, 0x0, 0x0, 0x0, 0x0, }; static bits_tree * Sm__0_2[16] = { (bits_tree *)Sm__0_2_0, (bits_tree *)Sm__0_2_1, (bits_tree *)Sm__0_2_2, (bits_tree *)Sm__0_2_3, (bits_tree *)0, (bits_tree *)Sm__0_2_5, (bits_tree *)Sm__0_2_6, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, }; static bitset_subset Sm__0_15_11[8] = { 0x0, 0x200, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }; static bitset_subset Sm__0_15_14[8] = { 0x0, 0x0, 0x0, 0x74, 0x0, 0x0, 0x0, 0x0, }; static bitset_subset Sm__0_15_15[8] = { 0x70000800, 0x0, 0x50000000, 0x0, 0x0, 0x0, 0x0, 0x1e04, }; static bits_tree * Sm__0_15[16] = { (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)Sm__0_15_11, (bits_tree *)0, (bits_tree *)0, (bits_tree *)Sm__0_15_14, (bits_tree *)Sm__0_15_15, }; static bits_tree * Sm__0[16] = { (bits_tree *)Sm__0_0, (bits_tree *)0, (bits_tree *)Sm__0_2, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)Sm__0_15, }; static bits_tree * Sm_[32] = { (bits_tree *)Sm__0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, }; static struct bits_tree_rule Sm__rule[] = { {32, 65536, 16, 65535}, {16, 4096, 12, 4095}, {16, 256, 8, 255}, {0, 256, 0, 0}, }; static struct bits_tree_shared Sm__stree = { 1, (bits_tree)&Sm_ }; static struct bits Sm__bits = { 0, Sm__rule, &Sm__stree }; #define Sm (&Sm__bits) static bitset_subset Sc__0_0_0[8] = { 0x0, 0x10, 0x0, 0x0, 0x0, 0x3c, 0x0, 0x0, }; static bitset_subset Sc__0_0_9[8] = { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc0000, }; static bitset_subset Sc__0_0_14[8] = { 0x0, 0x80000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }; static bits_tree * Sc__0_0[16] = { (bits_tree *)Sc__0_0_0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)Sc__0_0_9, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)Sc__0_0_14, (bits_tree *)0, }; static bitset_subset Sc__0_1_7[8] = { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8000000, 0x0, }; static bits_tree * Sc__0_1[16] = { (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)Sc__0_1_7, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, }; static bitset_subset Sc__0_2_0[8] = { 0x0, 0x0, 0x0, 0x0, 0x0, 0xffff, 0x0, 0x0, }; static bits_tree * Sc__0_2[16] = { (bits_tree *)Sc__0_2_0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, }; static bitset_subset Sc__0_15_14[8] = { 0x0, 0x0, 0x0, 0x200, 0x0, 0x0, 0x0, 0x0, }; static bitset_subset Sc__0_15_15[8] = { 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x63, }; static bits_tree * Sc__0_15[16] = { (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)Sc__0_15_14, (bits_tree *)Sc__0_15_15, }; static bits_tree * Sc__0[16] = { (bits_tree *)Sc__0_0, (bits_tree *)Sc__0_1, (bits_tree *)Sc__0_2, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)Sc__0_15, }; static bits_tree * Sc_[32] = { (bits_tree *)Sc__0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, }; static struct bits_tree_rule Sc__rule[] = { {32, 65536, 16, 65535}, {16, 4096, 12, 4095}, {16, 256, 8, 255}, {0, 256, 0, 0}, }; static struct bits_tree_shared Sc__stree = { 1, (bits_tree)&Sc_ }; static struct bits Sc__bits = { 0, Sc__rule, &Sc__stree }; #define Sc (&Sc__bits) static bitset_subset Sk__0_0_0[8] = { 0x0, 0x0, 0x40000000, 0x1, 0x0, 0x1108100, 0x0, 0x0, }; static bitset_subset Sk__0_0_2[8] = { 0x0, 0x0, 0x0, 0x0, 0x0, 0x6000000, 0xfffcfffc, 0x3fe0, }; static bitset_subset Sk__0_0_3[8] = { 0x0, 0x0, 0x0, 0x300000, 0x30, 0x0, 0x0, 0x0, }; static bits_tree * Sk__0_0[16] = { (bits_tree *)Sk__0_0_0, (bits_tree *)0, (bits_tree *)Sk__0_0_2, (bits_tree *)Sk__0_0_3, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, }; static bitset_subset Sk__0_1_15[8] = { 0x0, 0x0, 0x0, 0x0, 0x0, 0xa0000000, 0xe000e003, 0x6000e000, }; static bits_tree * Sk__0_1[16] = { (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)Sk__0_1_15, }; static bitset_subset Sk__0_3_0[8] = { 0x0, 0x0, 0x0, 0x0, 0x18000000, 0x0, 0x0, 0x0, }; static bits_tree * Sk__0_3[16] = { (bits_tree *)Sk__0_3_0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, }; static bitset_subset Sk__0_15_15[8] = { 0x0, 0x40000000, 0x1, 0x0, 0x0, 0x0, 0x0, 0x8, }; static bits_tree * Sk__0_15[16] = { (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)Sk__0_15_15, }; static bits_tree * Sk__0[16] = { (bits_tree *)Sk__0_0, (bits_tree *)Sk__0_1, (bits_tree *)0, (bits_tree *)Sk__0_3, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)Sk__0_15, }; static bits_tree * Sk_[32] = { (bits_tree *)Sk__0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, }; static struct bits_tree_rule Sk__rule[] = { {32, 65536, 16, 65535}, {16, 4096, 12, 4095}, {16, 256, 8, 255}, {0, 256, 0, 0}, }; static struct bits_tree_shared Sk__stree = { 1, (bits_tree)&Sk_ }; static struct bits Sk__bits = { 0, Sk__rule, &Sk__stree }; #define Sk (&Sk__bits) static bitset_subset So__0_0_0[8] = { 0x0, 0x0, 0x0, 0x0, 0x0, 0x4142c0, 0x0, 0x0, }; static bitset_subset So__0_0_4[8] = { 0x0, 0x0, 0x0, 0x0, 0x4, 0x0, 0x0, 0x0, }; static bitset_subset So__0_0_6[8] = { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x60000200, }; static bitset_subset So__0_0_9[8] = { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4000000, }; static bitset_subset So__0_0_11[8] = { 0x0, 0x0, 0x0, 0x10000, 0x0, 0x0, 0x0, 0x0, }; static bitset_subset So__0_0_15[8] = { 0xfcf8000e, 0x1500000, 0x0, 0x0, 0x0, 0xc0000000, 0x9fbf, 0x0, }; static bits_tree * So__0_0[16] = { (bits_tree *)So__0_0_0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)So__0_0_4, (bits_tree *)0, (bits_tree *)So__0_0_6, (bits_tree *)0, (bits_tree *)0, (bits_tree *)So__0_0_9, (bits_tree *)0, (bits_tree *)So__0_0_11, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)So__0_0_15, }; static bitset_subset So__0_2_1[8] = { 0xc1d0037b, 0x40442af, 0x0, 0x0, 0xf3e00000, 0xffffbfb6, 0xffeb3fff, 0xfffff, }; static bitset_subset So__0_2_3[8] = { 0xfffff0ff, 0xfffff9fc, 0xffffffff, 0xefffffff, 0x7ffffff, 0x0, 0x0, 0x0, }; static bitset_subset So__0_2_4[8] = { 0xffffffff, 0x7f, 0x7ff, 0x0, 0xf0000000, 0xffffffff, 0xffffffff, 0x3ff, }; static bitset_subset So__0_2_5[8] = { 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x3fffff, 0xff7fffff, 0xfffffffd, 0xffffff, }; static bitset_subset So__0_2_6[8] = { 0xfe0fffff, 0xffffffff, 0xffffffff, 0x37fff, 0x0, 0x0, 0x0, 0x0, }; static bitset_subset So__0_2_7[8] = { 0xfffff3de, 0xfffffeff, 0x7f47afff, 0xfe, 0xff100000, 0x7ffeffff, 0x0, 0x0, }; static bitset_subset So__0_2_14[8] = { 0x0, 0x0, 0x0, 0x0, 0xfbffffff, 0xffffffff, 0xffffffff, 0xfffff, }; static bitset_subset So__0_2_15[8] = { 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x3fffff, 0xfff0000, }; static bits_tree * So__0_2[16] = { (bits_tree *)0, (bits_tree *)So__0_2_1, (bits_tree *)0, (bits_tree *)So__0_2_3, (bits_tree *)So__0_2_4, (bits_tree *)So__0_2_5, (bits_tree *)So__0_2_6, (bits_tree *)So__0_2_7, (bits_tree *)-1L, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)So__0_2_14, (bits_tree *)So__0_2_15, }; static bitset_subset So__0_3_0[8] = { 0xc0010, 0xc0c00001, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }; static bitset_subset So__0_3_1[8] = { 0x0, 0x0, 0x0, 0x0, 0xffc30000, 0x0, 0x0, 0x0, }; static bitset_subset So__0_3_2[8] = { 0x1fffffff, 0xfffffc00, 0xf, 0x8fffffff, 0xfffffc00, 0x1ffff, 0xffff0fff, 0x7fffffff, }; static bitset_subset So__0_3_3[8] = { 0xffffffff, 0xffffffff, 0xffffffff, 0xf87fffff, 0xffffffff, 0xffffffff, 0x3fffffff, 0x7fffffff, }; static bits_tree * So__0_3[16] = { (bits_tree *)So__0_3_0, (bits_tree *)So__0_3_1, (bits_tree *)So__0_3_2, (bits_tree *)So__0_3_3, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, }; static bitset_subset So__0_10_4[8] = { 0x0, 0x0, 0x0, 0x0, 0xffff0000, 0xffeffff3, 0x5d, 0x0, }; static bits_tree * So__0_10[16] = { (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)So__0_10_4, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, }; static bitset_subset So__0_15_15[8] = { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x30006110, }; static bits_tree * So__0_15[16] = { (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)So__0_15_15, }; static bits_tree * So__0[16] = { (bits_tree *)So__0_0, (bits_tree *)0, (bits_tree *)So__0_2, (bits_tree *)So__0_3, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)So__0_10, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)So__0_15, }; static bits_tree * So_[32] = { (bits_tree *)So__0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, }; static struct bits_tree_rule So__rule[] = { {32, 65536, 16, 65535}, {16, 4096, 12, 4095}, {16, 256, 8, 255}, {0, 256, 0, 0}, }; static struct bits_tree_shared So__stree = { 1, (bits_tree)&So_ }; static struct bits So__bits = { 0, So__rule, &So__stree }; #define So (&So__bits) static bitset_subset L__0_0_0[8] = { 0x0, 0x0, 0x7fffffe, 0x7fffffe, 0x0, 0x4200400, 0xff7fffff, 0xff7fffff, }; static bitset_subset L__0_0_2[8] = { 0xffffffff, 0xffffc, 0xffff0000, 0xffffffff, 0xffffffff, 0xf9ff3fff, 0x30003, 0x401f, }; static bitset_subset L__0_0_3[8] = { 0x0, 0x0, 0x0, 0x4000000, 0xffffd740, 0xfffffffb, 0xfcff7fff, 0xfffff, }; static bitset_subset L__0_0_4[8] = { 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfffff003, 0xffffffff, 0xffff199f, 0x33fffff, }; static bitset_subset L__0_0_5[8] = { 0x0, 0xfffe0000, 0x27fffff, 0xfffffffe, 0xff, 0x0, 0xffff0000, 0x707ff, }; static bitset_subset L__0_0_6[8] = { 0x0, 0x7fffffe, 0x7ff, 0xfffe0000, 0xffffffff, 0xffffffff, 0x2fffff, 0x1c000060, }; static bitset_subset L__0_0_7[8] = { 0xfffd0000, 0x1fff, 0x0, 0x0, 0xffffffff, 0x3f, 0x0, 0x0, }; static bitset_subset L__0_0_9[8] = { 0xffffffe0, 0x23ffffff, 0xff010000, 0x3, 0xfff99fe0, 0x3c5fdff, 0xb0000000, 0x30003, }; static bitset_subset L__0_0_10[8] = { 0xfff987e0, 0x36dfdff, 0x5e000000, 0x1c0000, 0xfffbafe0, 0x23edfdff, 0x10000, 0x1, }; static bitset_subset L__0_0_11[8] = { 0xfff99fe0, 0x23cdfdff, 0xb0000000, 0x3, 0xd63dc7e0, 0x3bfc718, 0x0, 0x0, }; static bitset_subset L__0_0_12[8] = { 0xfffddfe0, 0x3effdff, 0x0, 0x3, 0xfffddfe0, 0x3effdff, 0x40000000, 0x3, }; static bitset_subset L__0_0_13[8] = { 0xfffddfe0, 0x3fffdff, 0x0, 0x3, 0xfc7fffe0, 0x2ffbffff, 0x7f, 0x0, }; static bitset_subset L__0_0_14[8] = { 0xfffffffe, 0xdffff, 0x7f, 0x0, 0xfef02596, 0x200decae, 0x3000005f, 0x0, }; static bitset_subset L__0_0_15[8] = { 0x1, 0x0, 0xfffffeff, 0x7ff, 0xf00, 0x0, 0x0, 0x0, }; static bits_tree * L__0_0[16] = { (bits_tree *)L__0_0_0, (bits_tree *)-1L, (bits_tree *)L__0_0_2, (bits_tree *)L__0_0_3, (bits_tree *)L__0_0_4, (bits_tree *)L__0_0_5, (bits_tree *)L__0_0_6, (bits_tree *)L__0_0_7, (bits_tree *)0, (bits_tree *)L__0_0_9, (bits_tree *)L__0_0_10, (bits_tree *)L__0_0_11, (bits_tree *)L__0_0_12, (bits_tree *)L__0_0_13, (bits_tree *)L__0_0_14, (bits_tree *)L__0_0_15, }; static bitset_subset L__0_1_0[8] = { 0xffffffff, 0x6fb, 0x3f0000, 0x0, 0x0, 0xffffffff, 0xffff003f, 0x7fffff, }; static bitset_subset L__0_1_1[8] = { 0xffffffff, 0xffffffff, 0x83ffffff, 0xffffffff, 0xffffffff, 0xffffff07, 0xffffffff, 0x3ffffff, }; static bitset_subset L__0_1_2[8] = { 0xffffff7f, 0xffffffff, 0x3d7f3d7f, 0xffffffff, 0xffff3d7f, 0x7f3d7fff, 0xff7f7f3d, 0xffff7fff, }; static bitset_subset L__0_1_3[8] = { 0x7f3d7fff, 0xffffffff, 0x7ffff7f, 0x0, 0x0, 0xffffffff, 0xffffffff, 0x1fffff, }; static bitset_subset L__0_1_4[8] = { 0xfffffffe, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, }; static bitset_subset L__0_1_6[8] = { 0xffffffff, 0xffffffff, 0xffffffff, 0x7f9fff, 0x7fffffe, 0xffffffff, 0xffffffff, 0x7ff, }; static bitset_subset L__0_1_7[8] = { 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xfffff, 0x0, 0x0, }; static bitset_subset L__0_1_8[8] = { 0x0, 0xffffffff, 0xffffffff, 0xffffff, 0xffffffff, 0x1ff, 0x0, 0x0, }; static bitset_subset L__0_1_14[8] = { 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfffffff, 0xffffffff, 0xffffffff, 0x3ffffff, }; static bitset_subset L__0_1_15[8] = { 0x3f3fffff, 0xffffffff, 0xaaff3f3f, 0x3fffffff, 0xffffffff, 0x5fdfffff, 0xfcf1fdc, 0x1fdc1fff, }; static bits_tree * L__0_1[16] = { (bits_tree *)L__0_1_0, (bits_tree *)L__0_1_1, (bits_tree *)L__0_1_2, (bits_tree *)L__0_1_3, (bits_tree *)L__0_1_4, (bits_tree *)-1L, (bits_tree *)L__0_1_6, (bits_tree *)L__0_1_7, (bits_tree *)L__0_1_8, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)L__0_1_14, (bits_tree *)L__0_1_15, }; static bitset_subset L__0_2_0[8] = { 0x0, 0x0, 0x0, 0x80000000, 0x0, 0x0, 0x0, 0x0, }; static bitset_subset L__0_2_1[8] = { 0x3e2ffc84, 0x3fbbd50, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }; static bits_tree * L__0_2[16] = { (bits_tree *)L__0_2_0, (bits_tree *)L__0_2_1, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, }; static bitset_subset L__0_3_0[8] = { 0x60, 0x3e0000, 0xfffffffe, 0xffffffff, 0x601fffff, 0xfffffffe, 0xffffffff, 0x77ffffff, }; static bitset_subset L__0_3_1[8] = { 0xffffffe0, 0xfffe1fff, 0xffffffff, 0xffffffff, 0x7fff, 0xffffff, 0x0, 0x0, }; static bits_tree * L__0_3[16] = { (bits_tree *)L__0_3_0, (bits_tree *)L__0_3_1, (bits_tree *)0, (bits_tree *)0, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, }; static bitset_subset L__0_4_13[8] = { 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x3fffff, 0x0, 0x0, }; static bits_tree * L__0_4[16] = { (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)L__0_4_13, (bits_tree *)-1L, (bits_tree *)-1L, }; static bitset_subset L__0_9_15[8] = { 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x3f, 0x0, 0x0, }; static bits_tree * L__0_9[16] = { (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)L__0_9_15, }; static bitset_subset L__0_10_4[8] = { 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x1fff, 0x0, 0x0, 0x0, }; static bits_tree * L__0_10[16] = { (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)L__0_10_4, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, }; static bitset_subset L__0_13_7[8] = { 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xf, 0x0, 0x0, }; static bits_tree * L__0_13[16] = { (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)L__0_13_7, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, }; static bitset_subset L__0_15_10[8] = { 0xffffffff, 0x3fff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }; static bitset_subset L__0_15_11[8] = { 0xa0f8007f, 0x5f7ffdff, 0xffffffdb, 0xffffffff, 0xffffffff, 0x3ffff, 0xfff80000, 0xffffffff, }; static bitset_subset L__0_15_13[8] = { 0xffffffff, 0x3fffffff, 0xffff0000, 0xffffffff, 0xfffcffff, 0xffffffff, 0xff, 0xfff0000, }; static bitset_subset L__0_15_14[8] = { 0x0, 0x0, 0x0, 0xffd70000, 0xffffffff, 0xffffffff, 0xffffffff, 0x1fffffff, }; static bitset_subset L__0_15_15[8] = { 0x0, 0x7fffffe, 0x7fffffe, 0xffffffc0, 0xffffffff, 0x7fffffff, 0x1cfcfcfc, 0x0, }; static bits_tree * L__0_15[16] = { (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)-1L, (bits_tree *)L__0_15_10, (bits_tree *)L__0_15_11, (bits_tree *)-1L, (bits_tree *)L__0_15_13, (bits_tree *)L__0_15_14, (bits_tree *)L__0_15_15, }; static bits_tree * L__0[16] = { (bits_tree *)L__0_0, (bits_tree *)L__0_1, (bits_tree *)L__0_2, (bits_tree *)L__0_3, (bits_tree *)L__0_4, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)L__0_9, (bits_tree *)L__0_10, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)L__0_13, (bits_tree *)0, (bits_tree *)L__0_15, }; static bits_tree * L_[32] = { (bits_tree *)L__0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, }; static struct bits_tree_rule L__rule[] = { {32, 65536, 16, 65535}, {16, 4096, 12, 4095}, {16, 256, 8, 255}, {0, 256, 0, 0}, }; static struct bits_tree_shared L__stree = { 1, (bits_tree)&L_ }; static struct bits L__bits = { 0, L__rule, &L__stree }; #define L (&L__bits) static bitset_subset M__0_0_3[8] = { 0xffffffff, 0xffffffff, 0x7fff, 0x7, 0x0, 0x0, 0x0, 0x0, }; static bitset_subset M__0_0_4[8] = { 0x0, 0x0, 0x0, 0x0, 0x378, 0x0, 0x0, 0x0, }; static bitset_subset M__0_0_5[8] = { 0x0, 0x0, 0x0, 0x0, 0xfffe0000, 0xbbfffffb, 0x16, 0x0, }; static bitset_subset M__0_0_6[8] = { 0x0, 0x0, 0x3ff800, 0x10000, 0x0, 0x0, 0xffc00000, 0x3d9f, }; static bitset_subset M__0_0_7[8] = { 0x20000, 0xffff0000, 0x7ff, 0x0, 0x0, 0x1ffc0, 0x0, 0x0, }; static bitset_subset M__0_0_9[8] = { 0xe, 0xd0000000, 0x1e3fff, 0xc, 0xe, 0xd0000000, 0x80399f, 0xc, }; static bitset_subset M__0_0_10[8] = { 0x4, 0xd0000000, 0x3987, 0x30000, 0xe, 0xd0000000, 0x3bbf, 0x0, }; static bitset_subset M__0_0_11[8] = { 0xe, 0xd0000000, 0xc0398f, 0x0, 0xc, 0xc0000000, 0x803dc7, 0x0, }; static bitset_subset M__0_0_12[8] = { 0xe, 0xc0000000, 0x603ddf, 0x0, 0xc, 0xc0000000, 0x603ddf, 0x0, }; static bitset_subset M__0_0_13[8] = { 0xc, 0xc0000000, 0x803dcf, 0x0, 0xc, 0x0, 0xff5f8400, 0xc0000, }; static bitset_subset M__0_0_14[8] = { 0x0, 0x7f20000, 0x7f80, 0x0, 0x0, 0x1bf20000, 0x3f00, 0x0, }; static bitset_subset M__0_0_15[8] = { 0x3000000, 0xc2a00000, 0x0, 0xfffe0000, 0xfeff00df, 0x1fffffff, 0x40, 0x0, }; static bits_tree * M__0_0[16] = { (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)M__0_0_3, (bits_tree *)M__0_0_4, (bits_tree *)M__0_0_5, (bits_tree *)M__0_0_6, (bits_tree *)M__0_0_7, (bits_tree *)0, (bits_tree *)M__0_0_9, (bits_tree *)M__0_0_10, (bits_tree *)M__0_0_11, (bits_tree *)M__0_0_12, (bits_tree *)M__0_0_13, (bits_tree *)M__0_0_14, (bits_tree *)M__0_0_15, }; static bitset_subset M__0_1_0[8] = { 0x0, 0x3c7f000, 0x3c00000, 0x0, 0x0, 0x0, 0x0, 0x0, }; static bitset_subset M__0_1_7[8] = { 0x0, 0x0, 0x0, 0x0, 0x0, 0xfff00000, 0xfffff, 0x0, }; static bitset_subset M__0_1_8[8] = { 0x0, 0x0, 0x0, 0x0, 0x0, 0x200, 0x0, 0x0, }; static bits_tree * M__0_1[16] = { (bits_tree *)M__0_1_0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)M__0_1_7, (bits_tree *)M__0_1_8, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, }; static bitset_subset M__0_2_0[8] = { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffff0000, 0xf, }; static bits_tree * M__0_2[16] = { (bits_tree *)M__0_2_0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, }; static bitset_subset M__0_3_0[8] = { 0x0, 0xfc00, 0x0, 0x0, 0x6000000, 0x0, 0x0, 0x0, }; static bits_tree * M__0_3[16] = { (bits_tree *)M__0_3_0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, }; static bitset_subset M__0_15_11[8] = { 0x40000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }; static bitset_subset M__0_15_14[8] = { 0x0, 0xf, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }; static bits_tree * M__0_15[16] = { (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)M__0_15_11, (bits_tree *)0, (bits_tree *)0, (bits_tree *)M__0_15_14, (bits_tree *)0, }; static bits_tree * M__0[16] = { (bits_tree *)M__0_0, (bits_tree *)M__0_1, (bits_tree *)M__0_2, (bits_tree *)M__0_3, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)M__0_15, }; static bits_tree * M_[32] = { (bits_tree *)M__0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, }; static struct bits_tree_rule M__rule[] = { {32, 65536, 16, 65535}, {16, 4096, 12, 4095}, {16, 256, 8, 255}, {0, 256, 0, 0}, }; static struct bits_tree_shared M__stree = { 1, (bits_tree)&M_ }; static struct bits M__bits = { 0, M__rule, &M__stree }; #define M (&M__bits) static bitset_subset N__0_0_0[8] = { 0x0, 0x3ff0000, 0x0, 0x0, 0x0, 0x720c0000, 0x0, 0x0, }; static bitset_subset N__0_0_6[8] = { 0x0, 0x0, 0x0, 0x3ff, 0x0, 0x0, 0x0, 0x3ff0000, }; static bitset_subset N__0_0_9[8] = { 0x0, 0x0, 0x0, 0xffc0, 0x0, 0x0, 0x0, 0x3f0ffc0, }; static bitset_subset N__0_0_10[8] = { 0x0, 0x0, 0x0, 0xffc0, 0x0, 0x0, 0x0, 0xffc0, }; static bitset_subset N__0_0_11[8] = { 0x0, 0x0, 0x0, 0xffc0, 0x0, 0x0, 0x0, 0x7ff80, }; static bitset_subset N__0_0_12[8] = { 0x0, 0x0, 0x0, 0xffc0, 0x0, 0x0, 0x0, 0xffc0, }; static bitset_subset N__0_0_13[8] = { 0x0, 0x0, 0x0, 0xffc0, 0x0, 0x0, 0x0, 0x0, }; static bitset_subset N__0_0_14[8] = { 0x0, 0x0, 0x3ff0000, 0x0, 0x0, 0x0, 0x3ff0000, 0x0, }; static bitset_subset N__0_0_15[8] = { 0x0, 0xfffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }; static bits_tree * N__0_0[16] = { (bits_tree *)N__0_0_0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)N__0_0_6, (bits_tree *)0, (bits_tree *)0, (bits_tree *)N__0_0_9, (bits_tree *)N__0_0_10, (bits_tree *)N__0_0_11, (bits_tree *)N__0_0_12, (bits_tree *)N__0_0_13, (bits_tree *)N__0_0_14, (bits_tree *)N__0_0_15, }; static bitset_subset N__0_1_0[8] = { 0x0, 0x0, 0x3ff, 0x0, 0x0, 0x0, 0x0, 0x0, }; static bitset_subset N__0_1_3[8] = { 0x0, 0x0, 0x0, 0x1ffffe00, 0x0, 0x0, 0x0, 0x0, }; static bitset_subset N__0_1_6[8] = { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1c000, }; static bitset_subset N__0_1_7[8] = { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3ff, }; static bitset_subset N__0_1_8[8] = { 0x3ff0000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }; static bits_tree * N__0_1[16] = { (bits_tree *)N__0_1_0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)N__0_1_3, (bits_tree *)0, (bits_tree *)0, (bits_tree *)N__0_1_6, (bits_tree *)N__0_1_7, (bits_tree *)N__0_1_8, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, }; static bitset_subset N__0_2_0[8] = { 0x0, 0x0, 0x0, 0x3f10000, 0x3ff, 0x0, 0x0, 0x0, }; static bitset_subset N__0_2_1[8] = { 0x0, 0x0, 0xfff80000, 0xffffffff, 0xf, 0x0, 0x0, 0x0, }; static bitset_subset N__0_2_4[8] = { 0x0, 0x0, 0x0, 0xffffffff, 0xfffffff, 0x0, 0x0, 0x400, }; static bitset_subset N__0_2_7[8] = { 0x0, 0x0, 0x0, 0xffc00000, 0xfffff, 0x0, 0x0, 0x0, }; static bits_tree * N__0_2[16] = { (bits_tree *)N__0_2_0, (bits_tree *)N__0_2_1, (bits_tree *)0, (bits_tree *)0, (bits_tree *)N__0_2_4, (bits_tree *)0, (bits_tree *)0, (bits_tree *)N__0_2_7, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, }; static bitset_subset N__0_3_0[8] = { 0x80, 0x70003fe, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }; static bitset_subset N__0_3_1[8] = { 0x0, 0x0, 0x0, 0x0, 0x3c0000, 0x0, 0x0, 0x0, }; static bitset_subset N__0_3_2[8] = { 0x0, 0x3ff, 0x0, 0x0, 0x3ff, 0x0, 0x0, 0x0, }; static bits_tree * N__0_3[16] = { (bits_tree *)N__0_3_0, (bits_tree *)N__0_3_1, (bits_tree *)N__0_3_2, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, }; static bitset_subset N__0_15_15[8] = { 0x3ff0000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }; static bits_tree * N__0_15[16] = { (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)N__0_15_15, }; static bits_tree * N__0[16] = { (bits_tree *)N__0_0, (bits_tree *)N__0_1, (bits_tree *)N__0_2, (bits_tree *)N__0_3, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)N__0_15, }; static bits_tree * N_[32] = { (bits_tree *)N__0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, }; static struct bits_tree_rule N__rule[] = { {32, 65536, 16, 65535}, {16, 4096, 12, 4095}, {16, 256, 8, 255}, {0, 256, 0, 0}, }; static struct bits_tree_shared N__stree = { 1, (bits_tree)&N_ }; static struct bits N__bits = { 0, N__rule, &N__stree }; #define N (&N__bits) static bitset_subset Z__0_0_0[8] = { 0x0, 0x1, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, }; static bits_tree * Z__0_0[16] = { (bits_tree *)Z__0_0_0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, }; static bitset_subset Z__0_1_6[8] = { 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, }; static bits_tree * Z__0_1[16] = { (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)Z__0_1_6, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, }; static bitset_subset Z__0_2_0[8] = { 0xfff, 0x8300, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }; static bits_tree * Z__0_2[16] = { (bits_tree *)Z__0_2_0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, }; static bitset_subset Z__0_3_0[8] = { 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }; static bits_tree * Z__0_3[16] = { (bits_tree *)Z__0_3_0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, }; static bits_tree * Z__0[16] = { (bits_tree *)Z__0_0, (bits_tree *)Z__0_1, (bits_tree *)Z__0_2, (bits_tree *)Z__0_3, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, }; static bits_tree * Z_[32] = { (bits_tree *)Z__0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, }; static struct bits_tree_rule Z__rule[] = { {32, 65536, 16, 65535}, {16, 4096, 12, 4095}, {16, 256, 8, 255}, {0, 256, 0, 0}, }; static struct bits_tree_shared Z__stree = { 1, (bits_tree)&Z_ }; static struct bits Z__bits = { 0, Z__rule, &Z__stree }; #define Z (&Z__bits) static bitset_subset C__0_0_0[8] = { 0xffffffff, 0x0, 0x0, 0x80000000, 0xffffffff, 0x0, 0x0, 0x0, }; static bitset_subset C__0_0_7[8] = { 0x8000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }; static bits_tree * C__0_0[16] = { (bits_tree *)C__0_0_0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)C__0_0_7, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, }; static bitset_subset C__0_1_8[8] = { 0x7800, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }; static bits_tree * C__0_1[16] = { (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)C__0_1_8, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, }; static bitset_subset C__0_2_0[8] = { 0xf000, 0x7c00, 0x0, 0xfc00, 0x0, 0x0, 0x0, 0x0, }; static bits_tree * C__0_2[16] = { (bits_tree *)C__0_2_0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, }; static bits_tree * C__0_13[16] = { (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, }; static bitset_subset C__0_15_14[8] = { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x80000000, }; static bitset_subset C__0_15_15[8] = { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe000000, }; static bits_tree * C__0_15[16] = { (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)C__0_15_14, (bits_tree *)C__0_15_15, }; static bits_tree * C__0[16] = { (bits_tree *)C__0_0, (bits_tree *)C__0_1, (bits_tree *)C__0_2, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)C__0_13, (bits_tree *)-1L, (bits_tree *)C__0_15, }; static bitset_subset C__15_15_15[8] = { 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x3fffffff, }; static bits_tree * C__15_15[16] = { (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)C__15_15_15, }; static bits_tree * C__15[16] = { (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)C__15_15, }; static bitset_subset C__16_15_15[8] = { 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x3ffff, }; static bits_tree * C__16_15[16] = { (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)C__16_15_15, }; static bits_tree * C__16[16] = { (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)C__16_15, }; static bits_tree * C_[32] = { (bits_tree *)C__0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)C__15, (bits_tree *)C__16, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, }; static struct bits_tree_rule C__rule[] = { {32, 65536, 16, 65535}, {16, 4096, 12, 4095}, {16, 256, 8, 255}, {0, 256, 0, 0}, }; static struct bits_tree_shared C__stree = { 1, (bits_tree)&C_ }; static struct bits C__bits = { 0, C__rule, &C__stree }; #define C (&C__bits) static bitset_subset P__0_0_0[8] = { 0x0, 0x8c00f7ee, 0xb8000001, 0x28000000, 0x0, 0x88802802, 0x0, 0x0, }; static bitset_subset P__0_0_3[8] = { 0x0, 0x0, 0x0, 0x40000000, 0x80, 0x0, 0x0, 0x0, }; static bitset_subset P__0_0_5[8] = { 0x0, 0x0, 0xfc000000, 0x0, 0x600, 0x40000000, 0x9, 0x180000, }; static bitset_subset P__0_0_6[8] = { 0x88001000, 0x0, 0x0, 0x3c00, 0x0, 0x0, 0x100000, 0x0, }; static bitset_subset P__0_0_7[8] = { 0x3fff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }; static bitset_subset P__0_0_9[8] = { 0x0, 0x0, 0x0, 0x10030, 0x0, 0x0, 0x0, 0x0, }; static bitset_subset P__0_0_13[8] = { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x100000, }; static bitset_subset P__0_0_14[8] = { 0x0, 0x0, 0xc008000, 0x0, 0x0, 0x0, 0x0, 0x0, }; static bitset_subset P__0_0_15[8] = { 0x7fff0, 0x3c000000, 0x0, 0x0, 0x20, 0x0, 0x0, 0x0, }; static bits_tree * P__0_0[16] = { (bits_tree *)P__0_0_0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)P__0_0_3, (bits_tree *)0, (bits_tree *)P__0_0_5, (bits_tree *)P__0_0_6, (bits_tree *)P__0_0_7, (bits_tree *)0, (bits_tree *)P__0_0_9, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)P__0_0_13, (bits_tree *)P__0_0_14, (bits_tree *)P__0_0_15, }; static bitset_subset P__0_1_0[8] = { 0x0, 0x0, 0xfc00, 0x0, 0x0, 0x0, 0x0, 0x8000000, }; static bitset_subset P__0_1_3[8] = { 0x0, 0x0, 0x0, 0x1fe, 0x0, 0x0, 0x0, 0x0, }; static bitset_subset P__0_1_6[8] = { 0x0, 0x0, 0x0, 0x6000, 0x18000000, 0x0, 0x0, 0x3800, }; static bitset_subset P__0_1_7[8] = { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x17f00000, 0x0, }; static bitset_subset P__0_1_8[8] = { 0x7ff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }; static bits_tree * P__0_1[16] = { (bits_tree *)P__0_1_0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)P__0_1_3, (bits_tree *)0, (bits_tree *)0, (bits_tree *)P__0_1_6, (bits_tree *)P__0_1_7, (bits_tree *)P__0_1_8, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, }; static bitset_subset P__0_2_0[8] = { 0xffff0000, 0xffff00ff, 0x3f6f, 0x60000000, 0x6000, 0x0, 0x0, 0x0, }; static bitset_subset P__0_2_3[8] = { 0x0, 0x600, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }; static bits_tree * P__0_2[16] = { (bits_tree *)P__0_2_0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)P__0_2_3, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, }; static bitset_subset P__0_3_0[8] = { 0xfff3ff0e, 0x10000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8000000, }; static bits_tree * P__0_3[16] = { (bits_tree *)P__0_3_0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, }; static bitset_subset P__0_15_13[8] = { 0x0, 0xc0000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }; static bitset_subset P__0_15_14[8] = { 0x0, 0xffff0000, 0xfff7fe1f, 0xd0b, 0x0, 0x0, 0x0, 0x0, }; static bitset_subset P__0_15_15[8] = { 0x8c00f7ee, 0xb8000001, 0x28000000, 0x3e, 0x0, 0x0, 0x0, 0x0, }; static bits_tree * P__0_15[16] = { (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)P__0_15_13, (bits_tree *)P__0_15_14, (bits_tree *)P__0_15_15, }; static bits_tree * P__0[16] = { (bits_tree *)P__0_0, (bits_tree *)P__0_1, (bits_tree *)P__0_2, (bits_tree *)P__0_3, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)P__0_15, }; static bits_tree * P_[32] = { (bits_tree *)P__0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, }; static struct bits_tree_rule P__rule[] = { {32, 65536, 16, 65535}, {16, 4096, 12, 4095}, {16, 256, 8, 255}, {0, 256, 0, 0}, }; static struct bits_tree_shared P__stree = { 1, (bits_tree)&P_ }; static struct bits P__bits = { 0, P__rule, &P__stree }; #define P (&P__bits) static bitset_subset S__0_0_0[8] = { 0x0, 0x70000810, 0x40000000, 0x50000001, 0x0, 0x153d3fc, 0x800000, 0x800000, }; static bitset_subset S__0_0_2[8] = { 0x0, 0x0, 0x0, 0x0, 0x0, 0x6000000, 0xfffcfffc, 0x3fe0, }; static bitset_subset S__0_0_3[8] = { 0x0, 0x0, 0x0, 0x300000, 0x30, 0x0, 0x0, 0x0, }; static bitset_subset S__0_0_4[8] = { 0x0, 0x0, 0x0, 0x0, 0x4, 0x0, 0x0, 0x0, }; static bitset_subset S__0_0_6[8] = { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x60000200, }; static bitset_subset S__0_0_9[8] = { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x40c0000, }; static bitset_subset S__0_0_11[8] = { 0x0, 0x0, 0x0, 0x10000, 0x0, 0x0, 0x0, 0x0, }; static bitset_subset S__0_0_14[8] = { 0x0, 0x80000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }; static bitset_subset S__0_0_15[8] = { 0xfcf8000e, 0x1500000, 0x0, 0x0, 0x0, 0xc0000000, 0x9fbf, 0x0, }; static bits_tree * S__0_0[16] = { (bits_tree *)S__0_0_0, (bits_tree *)0, (bits_tree *)S__0_0_2, (bits_tree *)S__0_0_3, (bits_tree *)S__0_0_4, (bits_tree *)0, (bits_tree *)S__0_0_6, (bits_tree *)0, (bits_tree *)0, (bits_tree *)S__0_0_9, (bits_tree *)0, (bits_tree *)S__0_0_11, (bits_tree *)0, (bits_tree *)0, (bits_tree *)S__0_0_14, (bits_tree *)S__0_0_15, }; static bitset_subset S__0_1_7[8] = { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8000000, 0x0, }; static bitset_subset S__0_1_15[8] = { 0x0, 0x0, 0x0, 0x0, 0x0, 0xa0000000, 0xe000e003, 0x6000e000, }; static bits_tree * S__0_1[16] = { (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)S__0_1_7, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)S__0_1_15, }; static bitset_subset S__0_2_0[8] = { 0x0, 0x0, 0x10, 0x1c000000, 0x1c00, 0xffff, 0x0, 0x0, }; static bitset_subset S__0_2_1[8] = { 0xc1d0037b, 0x40442af, 0x0, 0x0, 0xffff0000, 0xffffffff, 0xffffffff, 0xfffff, }; static bitset_subset S__0_2_2[8] = { 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x3ffff, }; static bitset_subset S__0_2_3[8] = { 0xffffffff, 0xfffff9ff, 0xffffffff, 0xefffffff, 0x7ffffff, 0x0, 0x0, 0x0, }; static bitset_subset S__0_2_4[8] = { 0xffffffff, 0x7f, 0x7ff, 0x0, 0xf0000000, 0xffffffff, 0xffffffff, 0x3ff, }; static bitset_subset S__0_2_5[8] = { 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x3fffff, 0xffffffff, 0xffffffff, 0xffffff, }; static bitset_subset S__0_2_6[8] = { 0xfe0fffff, 0xffffffff, 0xffffffff, 0x3ffff, 0x0, 0x0, 0x0, 0x0, }; static bitset_subset S__0_2_7[8] = { 0xfffff3de, 0xfffffeff, 0x7f47afff, 0xfe, 0xff100000, 0x7ffeffff, 0x0, 0x0, }; static bitset_subset S__0_2_14[8] = { 0x0, 0x0, 0x0, 0x0, 0xfbffffff, 0xffffffff, 0xffffffff, 0xfffff, }; static bitset_subset S__0_2_15[8] = { 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x3fffff, 0xfff0000, }; static bits_tree * S__0_2[16] = { (bits_tree *)S__0_2_0, (bits_tree *)S__0_2_1, (bits_tree *)S__0_2_2, (bits_tree *)S__0_2_3, (bits_tree *)S__0_2_4, (bits_tree *)S__0_2_5, (bits_tree *)S__0_2_6, (bits_tree *)S__0_2_7, (bits_tree *)-1L, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)S__0_2_14, (bits_tree *)S__0_2_15, }; static bitset_subset S__0_3_0[8] = { 0xc0010, 0xc0c00001, 0x0, 0x0, 0x18000000, 0x0, 0x0, 0x0, }; static bitset_subset S__0_3_1[8] = { 0x0, 0x0, 0x0, 0x0, 0xffc30000, 0x0, 0x0, 0x0, }; static bitset_subset S__0_3_2[8] = { 0x1fffffff, 0xfffffc00, 0xf, 0x8fffffff, 0xfffffc00, 0x1ffff, 0xffff0fff, 0x7fffffff, }; static bitset_subset S__0_3_3[8] = { 0xffffffff, 0xffffffff, 0xffffffff, 0xf87fffff, 0xffffffff, 0xffffffff, 0x3fffffff, 0x7fffffff, }; static bits_tree * S__0_3[16] = { (bits_tree *)S__0_3_0, (bits_tree *)S__0_3_1, (bits_tree *)S__0_3_2, (bits_tree *)S__0_3_3, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, }; static bitset_subset S__0_10_4[8] = { 0x0, 0x0, 0x0, 0x0, 0xffff0000, 0xffeffff3, 0x5d, 0x0, }; static bits_tree * S__0_10[16] = { (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)S__0_10_4, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, }; static bitset_subset S__0_15_11[8] = { 0x0, 0x200, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }; static bitset_subset S__0_15_14[8] = { 0x0, 0x0, 0x0, 0x274, 0x0, 0x0, 0x0, 0x0, }; static bitset_subset S__0_15_15[8] = { 0x70000810, 0x40000000, 0x50000001, 0x0, 0x0, 0x0, 0x0, 0x30007f7f, }; static bits_tree * S__0_15[16] = { (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)S__0_15_11, (bits_tree *)0, (bits_tree *)0, (bits_tree *)S__0_15_14, (bits_tree *)S__0_15_15, }; static bits_tree * S__0[16] = { (bits_tree *)S__0_0, (bits_tree *)S__0_1, (bits_tree *)S__0_2, (bits_tree *)S__0_3, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)S__0_10, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)S__0_15, }; static bits_tree * S_[32] = { (bits_tree *)S__0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, }; static struct bits_tree_rule S__rule[] = { {32, 65536, 16, 65535}, {16, 4096, 12, 4095}, {16, 256, 8, 255}, {0, 256, 0, 0}, }; static struct bits_tree_shared S__stree = { 1, (bits_tree)&S_ }; static struct bits S__bits = { 0, S__rule, &S__stree }; #define S (&S__bits) static bitset_subset entire_cset__0_0_2[8] = { 0xffffffff, 0xffffc, 0xffff0000, 0xffffffff, 0xffffffff, 0xffff3fff, 0xffffffff, 0x7fff, }; static bitset_subset entire_cset__0_0_3[8] = { 0xffffffff, 0xffffffff, 0x7fff, 0x44300007, 0xffffd7f0, 0xfffffffb, 0xfcff7fff, 0xfffff, }; static bitset_subset entire_cset__0_0_4[8] = { 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfffff37f, 0xffffffff, 0xffff199f, 0x33fffff, }; static bitset_subset entire_cset__0_0_5[8] = { 0x0, 0xfffe0000, 0xfe7fffff, 0xfffffffe, 0xfffe06ff, 0xfbfffffb, 0xffff001f, 0x1f07ff, }; static bitset_subset entire_cset__0_0_6[8] = { 0x88001000, 0x7fffffe, 0x3fffff, 0xffff3fff, 0xffffffff, 0xffffffff, 0xffffffff, 0x7fff3fff, }; static bitset_subset entire_cset__0_0_7[8] = { 0xffffbfff, 0xffff1fff, 0x7ff, 0x0, 0xffffffff, 0x1ffff, 0x0, 0x0, }; static bitset_subset entire_cset__0_0_9[8] = { 0xffffffee, 0xf3ffffff, 0xff1f3fff, 0x1ffff, 0xfff99fee, 0xd3c5fdff, 0xb080399f, 0x7ffffcf, }; static bitset_subset entire_cset__0_0_10[8] = { 0xfff987e4, 0xd36dfdff, 0x5e003987, 0x1fffc0, 0xfffbafee, 0xf3edfdff, 0x13bbf, 0xffc1, }; static bitset_subset entire_cset__0_0_11[8] = { 0xfff99fee, 0xf3cdfdff, 0xb0c0398f, 0x1ffc3, 0xd63dc7ec, 0xc3bfc718, 0x803dc7, 0x7ff80, }; static bitset_subset entire_cset__0_0_12[8] = { 0xfffddfee, 0xc3effdff, 0x603ddf, 0xffc3, 0xfffddfec, 0xc3effdff, 0x40603ddf, 0xffc3, }; static bitset_subset entire_cset__0_0_13[8] = { 0xfffddfec, 0xc3fffdff, 0x803dcf, 0xffc3, 0xfc7fffec, 0x2ffbffff, 0xff5f847f, 0x1c0000, }; static bitset_subset entire_cset__0_0_14[8] = { 0xfffffffe, 0x87ffffff, 0xfffffff, 0x0, 0xfef02596, 0x3bffecae, 0x33ff3f5f, 0x0, }; static bitset_subset entire_cset__0_0_15[8] = { 0xffffffff, 0xffffffff, 0xfffffeff, 0xfffe07ff, 0xfeff0fff, 0xdfffffff, 0x9fff, 0x0, }; static bits_tree * entire_cset__0_0[16] = { (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)entire_cset__0_0_2, (bits_tree *)entire_cset__0_0_3, (bits_tree *)entire_cset__0_0_4, (bits_tree *)entire_cset__0_0_5, (bits_tree *)entire_cset__0_0_6, (bits_tree *)entire_cset__0_0_7, (bits_tree *)0, (bits_tree *)entire_cset__0_0_9, (bits_tree *)entire_cset__0_0_10, (bits_tree *)entire_cset__0_0_11, (bits_tree *)entire_cset__0_0_12, (bits_tree *)entire_cset__0_0_13, (bits_tree *)entire_cset__0_0_14, (bits_tree *)entire_cset__0_0_15, }; static bitset_subset entire_cset__0_1_0[8] = { 0xffffffff, 0x3c7f6fb, 0x3ffffff, 0x0, 0x0, 0xffffffff, 0xffff003f, 0x87fffff, }; static bitset_subset entire_cset__0_1_1[8] = { 0xffffffff, 0xffffffff, 0x83ffffff, 0xffffffff, 0xffffffff, 0xffffff07, 0xffffffff, 0x3ffffff, }; static bitset_subset entire_cset__0_1_2[8] = { 0xffffff7f, 0xffffffff, 0x3d7f3d7f, 0xffffffff, 0xffff3d7f, 0x7f3d7fff, 0xff7f7f3d, 0xffff7fff, }; static bitset_subset entire_cset__0_1_3[8] = { 0x7f3d7fff, 0xffffffff, 0x7ffff7f, 0x1ffffffe, 0x0, 0xffffffff, 0xffffffff, 0x1fffff, }; static bitset_subset entire_cset__0_1_4[8] = { 0xfffffffe, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, }; static bitset_subset entire_cset__0_1_6[8] = { 0xffffffff, 0xffffffff, 0xffffffff, 0x7fffff, 0x1fffffff, 0xffffffff, 0xffffffff, 0x1ffff, }; static bitset_subset entire_cset__0_1_7[8] = { 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff, 0x1fffffff, 0x3ff, }; static bitset_subset entire_cset__0_1_8[8] = { 0x3ff7fff, 0xffffffff, 0xffffffff, 0xffffff, 0xffffffff, 0x3ff, 0x0, 0x0, }; static bitset_subset entire_cset__0_1_14[8] = { 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfffffff, 0xffffffff, 0xffffffff, 0x3ffffff, }; static bitset_subset entire_cset__0_1_15[8] = { 0x3f3fffff, 0xffffffff, 0xaaff3f3f, 0x3fffffff, 0xffffffff, 0xffdfffff, 0xefcfffdf, 0x7fdcffff, }; static bits_tree * entire_cset__0_1[16] = { (bits_tree *)entire_cset__0_1_0, (bits_tree *)entire_cset__0_1_1, (bits_tree *)entire_cset__0_1_2, (bits_tree *)entire_cset__0_1_3, (bits_tree *)entire_cset__0_1_4, (bits_tree *)-1L, (bits_tree *)entire_cset__0_1_6, (bits_tree *)entire_cset__0_1_7, (bits_tree *)entire_cset__0_1_8, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)entire_cset__0_1_14, (bits_tree *)entire_cset__0_1_15, }; static bitset_subset entire_cset__0_2_0[8] = { 0xffffffff, 0xffffffff, 0x3f7f, 0xfff1fc00, 0x7fff, 0xffff, 0xffff0000, 0xf, }; static bitset_subset entire_cset__0_2_1[8] = { 0xffffffff, 0x7ffffff, 0xfff80000, 0xffffffff, 0xffff000f, 0xffffffff, 0xffffffff, 0xfffff, }; static bitset_subset entire_cset__0_2_2[8] = { 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x3ffff, }; static bitset_subset entire_cset__0_2_3[8] = { 0xffffffff, 0xffffffff, 0xffffffff, 0xefffffff, 0x7ffffff, 0x0, 0x0, 0x0, }; static bitset_subset entire_cset__0_2_4[8] = { 0xffffffff, 0x7f, 0x7ff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x7ff, }; static bitset_subset entire_cset__0_2_5[8] = { 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x3fffff, 0xffffffff, 0xffffffff, 0xffffff, }; static bitset_subset entire_cset__0_2_6[8] = { 0xfe0fffff, 0xffffffff, 0xffffffff, 0x3ffff, 0x0, 0x0, 0x0, 0x0, }; static bitset_subset entire_cset__0_2_7[8] = { 0xfffff3de, 0xfffffeff, 0x7f47afff, 0xffc000fe, 0xff1fffff, 0x7ffeffff, 0x0, 0x0, }; static bitset_subset entire_cset__0_2_14[8] = { 0x0, 0x0, 0x0, 0x0, 0xfbffffff, 0xffffffff, 0xffffffff, 0xfffff, }; static bitset_subset entire_cset__0_2_15[8] = { 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x3fffff, 0xfff0000, }; static bits_tree * entire_cset__0_2[16] = { (bits_tree *)entire_cset__0_2_0, (bits_tree *)entire_cset__0_2_1, (bits_tree *)entire_cset__0_2_2, (bits_tree *)entire_cset__0_2_3, (bits_tree *)entire_cset__0_2_4, (bits_tree *)entire_cset__0_2_5, (bits_tree *)entire_cset__0_2_6, (bits_tree *)entire_cset__0_2_7, (bits_tree *)-1L, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)entire_cset__0_2_14, (bits_tree *)entire_cset__0_2_15, }; static bitset_subset entire_cset__0_3_0[8] = { 0xffffffff, 0xc7ffffff, 0xfffffffe, 0xffffffff, 0x7e1fffff, 0xfffffffe, 0xffffffff, 0x7fffffff, }; static bitset_subset entire_cset__0_3_1[8] = { 0xffffffe0, 0xfffe1fff, 0xffffffff, 0xffffffff, 0xffff7fff, 0xffffff, 0x0, 0x0, }; static bitset_subset entire_cset__0_3_2[8] = { 0x1fffffff, 0xffffffff, 0xf, 0x8fffffff, 0xffffffff, 0x1ffff, 0xffff0fff, 0x7fffffff, }; static bitset_subset entire_cset__0_3_3[8] = { 0xffffffff, 0xffffffff, 0xffffffff, 0xf87fffff, 0xffffffff, 0xffffffff, 0x3fffffff, 0x7fffffff, }; static bits_tree * entire_cset__0_3[16] = { (bits_tree *)entire_cset__0_3_0, (bits_tree *)entire_cset__0_3_1, (bits_tree *)entire_cset__0_3_2, (bits_tree *)entire_cset__0_3_3, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, }; static bitset_subset entire_cset__0_4_13[8] = { 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x3fffff, 0x0, 0x0, }; static bits_tree * entire_cset__0_4[16] = { (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)entire_cset__0_4_13, (bits_tree *)-1L, (bits_tree *)-1L, }; static bitset_subset entire_cset__0_9_15[8] = { 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x3f, 0x0, 0x0, }; static bits_tree * entire_cset__0_9[16] = { (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)entire_cset__0_9_15, }; static bitset_subset entire_cset__0_10_4[8] = { 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffff1fff, 0xffeffff3, 0x5d, 0x0, }; static bits_tree * entire_cset__0_10[16] = { (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)entire_cset__0_10_4, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, }; static bitset_subset entire_cset__0_13_7[8] = { 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xf, 0x0, 0x0, }; static bits_tree * entire_cset__0_13[16] = { (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)entire_cset__0_13_7, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, }; static bitset_subset entire_cset__0_15_10[8] = { 0xffffffff, 0x3fff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }; static bitset_subset entire_cset__0_15_11[8] = { 0xe0f8007f, 0x5f7fffff, 0xffffffdb, 0xffffffff, 0xffffffff, 0x3ffff, 0xfff80000, 0xffffffff, }; static bitset_subset entire_cset__0_15_13[8] = { 0xffffffff, 0xffffffff, 0xffff0000, 0xffffffff, 0xfffcffff, 0xffffffff, 0xff, 0xfff0000, }; static bitset_subset entire_cset__0_15_14[8] = { 0x0, 0xffff000f, 0xfff7fe1f, 0xffd70f7f, 0xffffffff, 0xffffffff, 0xffffffff, 0x9fffffff, }; static bitset_subset entire_cset__0_15_15[8] = { 0xfffffffe, 0xffffffff, 0x7fffffff, 0xfffffffe, 0xffffffff, 0x7fffffff, 0x1cfcfcfc, 0x3e007f7f, }; static bits_tree * entire_cset__0_15[16] = { (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)entire_cset__0_15_10, (bits_tree *)entire_cset__0_15_11, (bits_tree *)-1L, (bits_tree *)entire_cset__0_15_13, (bits_tree *)entire_cset__0_15_14, (bits_tree *)entire_cset__0_15_15, }; static bits_tree * entire_cset__0[16] = { (bits_tree *)entire_cset__0_0, (bits_tree *)entire_cset__0_1, (bits_tree *)entire_cset__0_2, (bits_tree *)entire_cset__0_3, (bits_tree *)entire_cset__0_4, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)entire_cset__0_9, (bits_tree *)entire_cset__0_10, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)entire_cset__0_13, (bits_tree *)-1L, (bits_tree *)entire_cset__0_15, }; static bitset_subset entire_cset__15_15_15[8] = { 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x3fffffff, }; static bits_tree * entire_cset__15_15[16] = { (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)entire_cset__15_15_15, }; static bits_tree * entire_cset__15[16] = { (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)entire_cset__15_15, }; static bitset_subset entire_cset__16_15_15[8] = { 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x3ffff, }; static bits_tree * entire_cset__16_15[16] = { (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)entire_cset__16_15_15, }; static bits_tree * entire_cset__16[16] = { (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)-1L, (bits_tree *)entire_cset__16_15, }; static bits_tree * entire_cset_[32] = { (bits_tree *)entire_cset__0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)entire_cset__15, (bits_tree *)entire_cset__16, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, (bits_tree *)0, }; static struct bits_tree_rule entire_cset__rule[] = { {32, 65536, 16, 65535}, {16, 4096, 12, 4095}, {16, 256, 8, 255}, {0, 256, 0, 0}, }; static struct bits_tree_shared entire_cset__stree = { 1, (bits_tree)&entire_cset_ }; static struct bits entire_cset__bits = { 0, entire_cset__rule, &entire_cset__stree }; #define entire_cset (&entire_cset__bits) tla-1.3.5+dfsg/src/hackerlab/unidata/unidata-data-sheet.doc0000644000175000017500000002001110457621774022225 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:57:17 2001 (unidata-data-sheet.doc) */ /************************************************************************ *(h0 "Data Sheet for the Hackerlab Unicode Database" * :appendix) * insert*/ Package: Hackerlab Unicode Database (the Unicode Character Database in C) Supplier: regexps.com Function: The Hackerlab Unicode Database provides a C interface to data taken from the Unicode Character Database published by the Unicode Consortium. Key Features: Space and time efficient. Accurate (based on comparisons to the Unicode 3.0 databases). Clean and simple "classic C" interface. Provides: assigned test -- is a code point assigned? general category decimal digit value bidirectional category bidirectional mirroring property canonical combining class default case mappings character decomposition mappings Unicode blocks general category bitsets Easy to upgrade: most data is automatically extracted from the standard file ``unidata.txt'' published by the Unicode Consortium. Ready for Unicode 3.1: Database data structures are designed for a character set with 2^21 code points. Validation tests are included. Postscript and HTML documentation is included. Variable depth trie structures for the database, selectable at compile time. (A space/time trade-off.) Licensing: The Hackerlab Unicode Database is part of the Hackerlab C Library, which is distributed under the terms of the GNU General Public License, Version 2, as published by the Free Software Foundation. Alternative licenses (such as licenses permitting binary-only re-distribution) can be purchased from regexps.com. Prerequisites: standard C compiler Posix libc.a (standard C library) GNU Make Recommended and Disrecommended Applications: Recommended for all applications needing access to Unicode Character Database properties. Limitations: This is the first public release. The database has been carefully tested but is not in widespread use. Some important features, which are likely to be added in future releases, are not present in this release. These include: locale-sensitive case mappings pre-computed normalization forms Contribution to Executable Size: On a Pentium based machine, running gcc (egcs version 2.91.66) we compiled this simple (nonsense) program and linked it against the Hackerlab C Library: #include int main (int argc, char * argv[]) { t_unicode c; int value; c = argv[0][0]; value = unidata_is_assigned_code_point (c); value += (int)unidata_general_category (c); value += (int)unidata_decimal_digit_value (c); value += (int)unidata_bidi_category (c); value += (int)unidata_is_mirrored (c); value += (int)unidata_canonical_combining_class (c); value += (int)unidata_to_upper (c); value += (int)unidata_to_lower (c); value += (int)unidata_to_title (c); value += (int)unidata_character_decomposition_mapping (c)->type; value += (int)uni_blocks[0].start; value += bits_population (uni_general_category_bitset (uni_general_category_Sm)); return value; } Both the library and the program were compiled with the "-g" option. The program forces linkage with all of the Hackerlab Unicode Database. Total executable size: text data 43120 221064 The following list of object files from the Hackerlab C library were linked into the executable: alloc-limits.o bits.o bitset-lookup.o bitset-tree.o bitset.o bitsets.o blocks.o case-db-inlines.o case-db.o char-class.o combine-db.o cvt.o db-inlines.o db.o decomp-db.o mem.o must-malloc.o panic-exit.o panic.o str.o The contribution of those files to the executable size is: text data 41541 218056 Those sizes represent maximums: they are for a program that access all of the information in the database, and that uses both the general category mapping and precomputed bitsets for each general category. A realistic scenario is a program which does not use the bidi properties, the decomposition mapping, or the category bitsets. To measure size in that scenario, we compiled this test program: #include int main (int argc, char * argv[]) { t_unicode c; int value; c = argv[0][0]; value = unidata_is_assigned_code_point (c); value += (int)unidata_general_category (c); value += (int)unidata_decimal_digit_value (c); value += (int)unidata_canonical_combining_class (c); value += (int)unidata_to_upper (c); value += (int)unidata_to_lower (c); value += (int)unidata_to_title (c); value += (int)uni_blocks[0].start; return value; } and obtained the total executable size: text data 13864 104980 Sizes may differ slightly from the latest release of Rx. Sizes will obviously vary with platform compiler, and compiler options. External Linkage Dependencies: When compiled under FreeBSD 3.0, the simple program used to test executable sizes depends on the following symbols defined in "libc": write malloc realloc free _exit Accuracy: We test the accuracy of the Hackerlab Unicode database by using it to print a text file containing a subset of the fields present in "unidata.txt". We then extract those fields from "unidata.txt" itself using a sed script and compare the resulting files. There are no known bugs in the Hackerlab Unicode database. Execution Speed: All of the functions that access the Hackerlab Unicode Database are very fast. To give a quantitative sense of what "very fast" means, we have measured the size of some functions in instructions, as compiled by gcc (egcs version 2.91.66) for a Pentium architecture machine with the compiler option `-g'. None of the functions contain loops. function instruction count ----------------------------------------------- unidata_is_assigned_code_point 28 unidata_general_category 29 unidata_decimal_digit_value 41 unidata_bidi_category 31 unidata_is_mirrored 31 unidata_to_upper 56 unidata_to_lower 56 unidata_to_title 56 Most of those functions performs two array look-ups and a number of bit-manipulation operations. The three case-conversion functions perform five array look-ups and a number of bit-manipulation operations. `unidata_decimal_digit_value' performs a conditional test. Instruction counts include function prologues and epilogues. For programs compiled with GCC, those functions are also available as inlinable functions. `unidata_character_decomposition_mapping' is a macro which performs five array look-ups and a number of bit-manipulation operations. These instruction counts may, obviously, vary with choice of compiler, compiler options, and platform. Cited implementation details may change in future releases. Run-time Allocation Requirements: The Hackerlab Unicode database does not perform a significant amount of memory allocation at run-time. Support: To purchase an alternative license, request additional features, or for any kind of support assistance, you can contact us at "hackerlab@regexps.com" or via our web site "www.regexps.com". We can also be reached at (412) 401-5204. We are currently in the midst of relocating from Pennsylvania to California, so at this time, we have no reliable postal address. Available support includes (but is not limited to): - porting assistance - customized extensions - consultation concerning regexp-intensive applications - bug fixing In most cases, support is offered as a commercial service. /*end-insert */ tla-1.3.5+dfsg/src/hackerlab/unidata/combine-db-macros.h0000644000175000017500000000172410457621774021540 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:41:46 2001 (combine-db-macros.h) */ /* combine-db-macros.h - * **************************************************************** * Copyright (C) 2000 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__UNIDATA__COMBINE_DB_MACROS_H #define INCLUDE__UNIDATA__COMBINE_DB_MACROS_H /************************************************************************ *(h2 "Canonical Combining Class") * * * */ /*(c unidata_canonical_combining_class :category macro) * #define unidata_canonical_combining_class(C) * * Return the canonical combining class of a Unicode * character. * * Combining classes are represented as unsigned 8-bit integers. */ #define unidata_canonical_combining_class(C) (unidata__combine_db_ref(unidata__combine_db, (C))) /* automatically generated __STDC__ prototypes */ #endif /* INCLUDE__UNIDATA__COMBINE_DB_MACROS_H */ tla-1.3.5+dfsg/src/hackerlab/unidata/blocks.h0000644000175000017500000000263010457621774017531 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:41:43 2001 (blocks.h) */ /* blocks.h - * **************************************************************** * Copyright (C) 2000 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__UNIDATA__BLOCKS_H #define INCLUDE__UNIDATA__BLOCKS_H #include "hackerlab/machine/types.h" /************************************************************************ *(h2 "Unicode Blocks") * */ /*(c #s"struct uni_block" :category type) * struct uni_block; * * Structures of this type describe one of the standard blocks of * Unicode characters (`"Basic Latin"', `"Latin-1 Supplement"', etc.) * insert*/ struct uni_block { t_uchar * name; /* name of the block */ t_unichar start; /* first character in the block */ t_unichar end; /* last character in the block */ }; /*end-insert * * */ /*(c uni_blocks :category variable) * extern struct uni_block uni_blocks[]; * * The names of the standard Unicode blocks. This array is sorted * in code-point order, from least to greatest. * * `n_uni_blocks' is the number of blocks in `uni_blocks'. * * uni_blocks[n_uni_blocks].name == 0 * insert*/ extern const struct uni_block uni_blocks[]; extern const int n_uni_blocks; /*end-insert */ /* automatically generated __STDC__ prototypes */ #endif /* INCLUDE__UNIDATA__BLOCKS_H */ tla-1.3.5+dfsg/src/hackerlab/unidata/Makefile.in0000644000175000017500000000160610457621774020152 0ustar useruser libs := $(objroot)/hackerlab/libboot/libboot.a -lm generated-includes := bitsets.h db.h case-db.h combine-db.h decomp-db.h generated-source := bitsets.c db.c case-db.c combine-db.c decomp-db.c include $(makefiles)/library-objects.mk ifeq ($(cgs__install_hackerlab),1) include $(makefiles)/install-includes.mk endif $(generated-includes) $(generated-source): ../unidata-scaffolding/unidata-generate $(srcdir)/../unidata-scaffolding/unidata.txt echo echo "================ parsing unidata.txt ================" echo for f in $(generated-includes) $(generated-source) ; do test ! -e $$f || rm $$f ; done ../unidata-scaffolding/unidata-generate --verbose $(srcdir)/../unidata-scaffolding/unidata.txt clean: clean-unidata clean-unidata: for f in $(generated-includes) $(generated-source) ; do test ! -e $$f || rm $$f ; done # tag: Tom Lord Tue Dec 4 14:52:17 2001 (unidata/Makefile.in) # tla-1.3.5+dfsg/src/hackerlab/unidata/PLUGIN/0000755000175000017500000000000010457621774017100 5ustar userusertla-1.3.5+dfsg/src/hackerlab/unidata/PLUGIN/REQ0000644000175000017500000000006110457621774017447 0ustar useruserunidata-scaffolding unidata unidata libboot2 tla-1.3.5+dfsg/src/hackerlab/unidata/decomp-db-macros.h0000644000175000017500000000442010457621774021367 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:41:47 2001 (decomp-db-macros.h) */ /* decomp-db-macros.h - * **************************************************************** * Copyright (C) 2000 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__UNIDATA__DECOMP_DB_MACROS_H #define INCLUDE__UNIDATA__DECOMP_DB_MACROS_H #include "hackerlab/uni/unidata.h" /************************************************************************ *(h2 "Character Decomposition Mapping") * */ /*(c #s"enum uni_decomposition_type" :category type) * enum uni_decomposition_type; * * The decomposition mapping of a character is described by * values of this enumerated type: * * * uni_decomposition_none * uni_decomposition_canonical * uni_decomposition_font * uni_decomposition_noBreak * uni_decomposition_initial * uni_decomposition_medial * uni_decomposition_final * uni_decomposition_isolated * uni_decomposition_circle * uni_decomposition_super * uni_decomposition_sub * uni_decomposition_vertical * uni_decomposition_wide * uni_decomposition_narrow * uni_decomposition_small * uni_decomposition_square * uni_decomposition_fraction * uni_decomposition_compat * * The value `uni_decomposition_none' indicates that a character * has no decomposition mapping. */ /*(c #s"struct uni_decomposition_mapping" :category type) * struct uni_decomposition_mapping; * * A character's decomposition mapping is described by this * structure. It has the fields: * * enum uni_decomposition_type type; * t_unicode * decomposition; * * `type' is the type of decomposition. * * If `type' is not `uni_decomposition_none', then `decomposition' * is a 0-termianted array of code points which are the decomposition * of the character. */ /*(c unidata_character_decomposition_mapping :category macro) * #define unidata_character_decomposition_mapping(C) * * Return the decomposition mapping of `C'. This macro returns * a pointer to a `struct uni_decomposition_mapping'. */ #define unidata_character_decomposition_mapping(C) (&(unidata_decomposition_table[unidata__decomp_db_ref (unidata__decomp_db, (C))])) /* automatically generated __STDC__ prototypes */ #endif /* INCLUDE__UNIDATA__DECOMP_DB_MACROS_H */ tla-1.3.5+dfsg/src/hackerlab/unidata/db-inlines.c0000644000175000017500000001627710457621774020307 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:41:46 2001 (db-inlines.c) */ /* db-inlines.c - * **************************************************************** * Copyright (C) 2000 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/uni/invariant.h" #include "hackerlab/uni/unidata.h" #include "hackerlab/unidata/bitsets.h" #include "hackerlab/unidata/db.h" #include "hackerlab/unidata/db-macros.h" #ifndef UNIDATA_INLINE_QUALIFIERS #define UNIDATA_INLINE_QUALIFIERS #endif #ifndef __GNUC__ #undef __attribute__ #define __attribute__(X) #endif /************************************************************************ *(h1 "Unicode Character Properties" * :include ("hackerlab/unicode/unidata.h")) * * The functions and macros in this chapter present programs with an * interface to various properties extracted from the Unicode * Character Database as published by the Unicode consortium. * * For information about the version of the database used and the * implications of using these functions on program size, see * xref:"Data Sheet for the Hackerlab Unicode Database". * */ /*(menu) */ /************************************************************************ *(h2 "Assigned Code Points") * * * */ /*(c unidata_is_assigned_code_point) * int unidata_is_assigned_code_point (t_unicode c); * * Return 1 if `c' is an assigned code point, 0 otherwise. * * A code point is *assigned* if it has an entry in `unidata.txt' * or is part of a range of characters whose end-points are * defined in `unidata.txt'. */ UNIDATA_INLINE_QUALIFIERS int __attribute__((unused)) unidata_is_assigned_code_point (t_unicode c) { t_uint16 db; db = unidata__db_ref (unidata__db, c); return !!unidata__db_is_assigned_code_point (db); } /************************************************************************ *(h2 "General Category") * * * */ /*(c #s"enum unidata_general_category" :category type) * enum uni_general_category; * * The General Category of a Unicode character is represented by * an enumerated value of this type. * * The primary category values are: * * uni_general_category_Lu Letter, uppercase * uni_general_category_Ll Letter, lowercase * uni_general_category_Lt Letter, titlecase * uni_general_category_Lm Letter, modifier * uni_general_category_Lo Letter, other" * * uni_general_category_Mn Mark, nonspacing * uni_general_category_Mc Mark, spacing combining * uni_general_category_Me Mark, enclosing * * uni_general_category_Nd Number, decimal digit * uni_general_category_Nl Number, letter * uni_general_category_No Number, other * * uni_general_category_Zs Separator, space * uni_general_category_Zl Separator, line * uni_general_category_Zp Separator, paragraph * * uni_general_category_Cc Other, control * uni_general_category_Cf Other, format * uni_general_category_Cs Other, surrogate * uni_general_category_Co Other, private use * uni_general_category_Cn Other, not assigned * * uni_general_category_Pc Punctuation, connector * uni_general_category_Pd Punctuation, dash * uni_general_category_Ps Punctuation, open * uni_general_category_Pe Punctuation, close * uni_general_category_Pi Punctuation, initial quote * uni_general_category_Pf Punctuation, final quote * uni_general_category_Po Punctuation, other * * uni_general_category_Sm Symbol, math * uni_general_category_Sc Symbol, currency * uni_general_category_Sk Symbol, modifier * uni_general_category_So Symbol, other * * Seven additional synthetic categories are defined. These are: * * uni_general_category_L Letter * uni_general_category_M Mark * uni_general_category_N Number * uni_general_category_Z Separator * uni_general_category_C Other * uni_general_category_P Punctuation * uni_general_category_S Symbol * * No character is given a synthetic category as its general category. * Rather, the synthetic categories are used in some interfaces to * refer to all characters having a general category within one of * the synthetic categories. */ /*(c unidata_general_category) * enum uni_general_category unidata_general_category (t_unicode c); * * Return the general category of `c'. * * The category returned for unassigned code points is * `uni_general_category_Cn' (Other, Not Assigned). */ UNIDATA_INLINE_QUALIFIERS enum uni_general_category __attribute__((unused)) unidata_general_category (t_unicode c) { t_uint16 db; db = unidata__db_ref (unidata__db, c); return(enum uni_general_category)unidata__db_general_category (db); } /************************************************************************ *(h2 "Unicode Decimal Digit Values") * * * */ /*(c unidata_decimal_digit_value) * int unidata_decimal_digit_value (t_unicode c); * * If `c' is a decimal digit (regardless of script) return * its digit value. Otherwise, return -1. */ UNIDATA_INLINE_QUALIFIERS int __attribute__((unused)) unidata_decimal_digit_value (t_unicode c) { t_uint16 db; int val; db = unidata__db_ref (unidata__db, c); val = unidata__db_decimal_digit_value (db); return (val == 10) ? -1 : val; } /************************************************************************ *(h2 "Unicode Bidirectional Properties") * * * */ /*(c #s"enum unidata_bidi_category" :category type) * enum uni_bidi_category; * * The Bidrectional Category of a Unicode character is represented by * an enumerated value of this type. * * The bidi category values are: * * uni_bidi_L Left-to-Right * uni_bidi_LRE Left-to-Right Embedding * uni_bidi_LRO Left-to-Right Override * uni_bidi_R Right-to-Left * uni_bidi_AL Right-to-Left Arabic * uni_bidi_RLE Right-to-Left Embedding * uni_bidi_RLO Right-to-Left Override * uni_bidi_PDF Pop Directional Format * uni_bidi_EN European Number * uni_bidi_ES European Number Separator * uni_bidi_ET European Number Terminator * uni_bidi_AN Arabic Number * uni_bidi_CS Common Number Separator * uni_bidi_NSM Non-Spacing Mark * uni_bidi_BN Boundary Neutral * uni_bidi_B Paragraph Separator * uni_bidi_S Segment Separator * uni_bidi_WS Whitspace * uni_bidi_ON Other Neutrals * */ /*(c unidata_bidi_category) * enum uni_bidi_category unidata_bidi_category (t_unicode c); * * Return the bidirectional category of `c'. * * The category returned for unassigned code points is * `uni_bidi_ON' (other neutrals). */ UNIDATA_INLINE_QUALIFIERS enum uni_bidi_category __attribute__((unused)) unidata_bidi_category (t_unicode c) { t_uint16 db; db = unidata__db_ref (unidata__db, c); return (enum uni_bidi_category)unidata__db_bidi_category (db); } /*(c unidata_is_mirrored) * int unidata_is_mirrored (t_unicode c); * * Return 1 if `c' is mirrored in bidirectional text, 0 * otherwise. */ UNIDATA_INLINE_QUALIFIERS int __attribute__((unused)) unidata_is_mirrored (t_unicode c) { t_uint16 db; db = unidata__db_ref (unidata__db, c); return !!unidata__db_is_mirrored (db); } /*(include-documentation "combine-db-macros.h") */ /*(include-documentation "case-db-inlines.c") */ /*(include-documentation "decomp-db-macros.h") */ /*(include-documentation "blocks.h") */ /*(include-documentation "bitset-lookup.c") */ tla-1.3.5+dfsg/src/hackerlab/unidata/bitset-lookup.h0000644000175000017500000000124110457621774021052 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:41:49 2001 (bitset-lookup.h) */ /* bitset-lookup.h - * **************************************************************** * Copyright (C) 2000 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__UNIDATA__BITSET_LOOKUP_H #define INCLUDE__UNIDATA__BITSET_LOOKUP_H #include "hackerlab/bitsets/bits.h" #include "hackerlab/uni/unidata.h" /* automatically generated __STDC__ prototypes */ extern bits uni_universal_bitset (void); extern bits uni_general_category_bitset (enum uni_general_category c); #endif /* INCLUDE__UNIDATA__BITSET_LOOKUP_H */ tla-1.3.5+dfsg/src/hackerlab/unidata/case-db-inlines.c0000644000175000017500000000356610457621774021215 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:41:49 2001 (case-db-inlines.c) */ /* case-db-inlines.c - * **************************************************************** * Copyright (C) 2000 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/uni/unidata.h" #include "hackerlab/unidata/case-db.h" #include "hackerlab/unidata/case-db-macros.h" #ifndef UNIDATA_INLINE_QUALIFIERS #define UNIDATA_INLINE_QUALIFIERS #endif #ifndef __GNUC__ #undef __attribute__ #define __attribute__(X) #endif /************************************************************************ *(h2 "Simple Unicode Case Conversions") * * These functions use the case mappings in `unidata.txt'. * */ /*(c unidata_to_upper) * t_unicode unidata_to_upper (t_unicode c); * * If `c' has a default uppercase mapping, return that mapping. * Otherwise, return `c'. */ UNIDATA_INLINE_QUALIFIERS t_unicode __attribute__((unused)) unidata_to_upper (t_unicode c) { t_unicode mapping; mapping = unidata__case_db_ref (unidata__case_db, c).upper; return (mapping ? mapping : c); } /*(c unidata_to_lower) * t_unicode unidata_to_lower (t_unicode c); * * If `c' has a default lowercase mapping, return that mapping. * Otherwise, return `c'. */ UNIDATA_INLINE_QUALIFIERS t_unicode __attribute__((unused)) unidata_to_lower (t_unicode c) { t_unicode mapping; mapping = unidata__case_db_ref (unidata__case_db, c).lower; return (mapping ? mapping : c); } /*(c unidata_to_title) * t_unicode unidata_to_title (t_unicode c); * * If `c' has a default titlecase mapping, return that mapping. * Otherwise, return `c'. */ UNIDATA_INLINE_QUALIFIERS t_unicode __attribute__((unused)) unidata_to_title (t_unicode c) { t_unicode mapping; mapping = unidata__case_db_ref (unidata__case_db, c).title; return (mapping ? mapping : c); } tla-1.3.5+dfsg/src/hackerlab/unidata/unidata.h0000644000175000017500000000254610457621774017707 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:41:45 2001 (unidata.h) */ /* unidata.h - * **************************************************************** * Copyright (C) 2000 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__UNIDATA__UNIDATA_H #define INCLUDE__UNIDATA__UNIDATA_H #include "hackerlab/uni/unidata.h" #include "hackerlab/unidata/bitsets.h" #include "hackerlab/unidata/bitset-lookup.h" #include "hackerlab/unidata/blocks.h" #include "hackerlab/unidata/db.h" #include "hackerlab/unidata/db-macros.h" #include "hackerlab/unidata/case-db.h" #include "hackerlab/unidata/case-db-macros.h" #include "hackerlab/unidata/combine-db.h" #include "hackerlab/unidata/combine-db-macros.h" #include "hackerlab/unidata/decomp-db.h" #include "hackerlab/unidata/decomp-db-macros.h" #define unidata__db_data(CODE) (unidata__db_ref (unidata__db, CODE)) #if defined(__GNUC__) && defined(UNIDATA_INLINES) #undef UNI_INLINE_QUALIFIERS #define UNI_INLINE_QUALIFIERS static inline #include "hackerlab/unidata/db-inlines.c" #include "hackerlab/unidata/case-db-inlines.c" #else #undef UNI_INLINE_QUALIFIERS #include "hackerlab/unidata/db-inlines.h" #include "hackerlab/unidata/case-db-inlines.h" #endif /* automatically generated __STDC__ prototypes */ #endif /* INCLUDE__UNIDATA__UNIDATA_H */ tla-1.3.5+dfsg/src/hackerlab/unidata/=unidata-size2.c0000644000175000017500000000105510457621774021023 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:41:44 2001 (=unidata-size2.c) */ #include int main (int argc, char * argv[]) { t_unicode c; int value; c = argv[0][0]; value = unidata_is_assigned_code_point (c); value += (int)unidata_general_category (c); value += (int)unidata_decimal_digit_value (c); value += (int)unidata_canonical_combining_class (c); value += (int)unidata_to_upper (c); value += (int)unidata_to_lower (c); value += (int)unidata_to_title (c); value += (int)uni_blocks[0].start; return value; } tla-1.3.5+dfsg/src/hackerlab/vu/0000755000175000017500000000000010457621774015107 5ustar userusertla-1.3.5+dfsg/src/hackerlab/vu/safe-vu-utils.c0000644000175000017500000000567210457621774017771 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:41:40 2001 (safe-vu-utils.c) */ /* safe-vu-utils.c - * **************************************************************** * Copyright (C) 2000 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/os/errno-to-string.h" #include "hackerlab/bugs/panic.h" #include "hackerlab/vu/printfmt.h" #include "hackerlab/vu/safe-vu-utils.h" /*(c safe_move_fd) * int safe_move_fd (int fd, int newfd); * * See xref:"move_fd". */ int safe_move_fd (int fd, int newfd) { int errn; int answer; answer = vu_move_fd (&errn, fd, newfd); if (0 > answer) { printfmt (&errn, 2, "Error calling `vu_move_fd' to move descriptor %d to descriptor %d (%s)\n", fd, newfd, errno_to_string (errn)); panic ("I/O error"); } return answer; } /*(c safe_file_to_string) * int safe_file_to_string (t_uchar ** buf, * size_t * len, * int fd); * * Read the entire contents of `fd' into a newly allocated string. * * The new string is returned in `*buf'; its length in `*len'. * * If `vu_fstat' is able to report the length of the file, a single call to * `vu_read_retry' is used to read its contents. Otherwise, repeated calls * to `vu_read_retry' are used. */ void safe_file_to_string (t_uchar ** buf, size_t * len, int fd) { int errn; int answer; answer = vu_file_to_string (&errn, buf, len, fd); if (0 > answer) { printfmt (&errn, 2, "Error calling `vu_file_to_string' for descriptor %d (%s)\n", fd, errno_to_string (errn)); panic ("I/O error"); } } /*(c safe_file_is_directory) * int safe_file_is_directory (const t_uchar * name); * * Return 1 if `name' names a directory, 0 if not. * * (If `name' is a symbolic link, even to a directory, 0 is * returned, but see also xref:"safe_file_is_directory_following".) * * Non-existence of any file called `name' is not an error. */ int safe_file_is_directory (const t_uchar * name) { int errn; int answer; answer = vu_file_is_directory (&errn, name); if (0 > answer) { printfmt (&errn, 2, "Error calling `vu_file_is_directory' (%s)\n", errno_to_string (errn)); printfmt (&errn, 2, " file %s\n", name); panic ("I/O error"); } return answer; } /*(c safe_file_is_directory_following) * int safe_file_is_directory_following (const t_uchar * name); * * Return 1 if `name' names a directory or symlink to a directory, * 0 if not. * * Non-existence of any file called `name' is not an error. */ int safe_file_is_directory_following (const t_uchar * name) { int errn; int answer; answer = vu_file_is_directory_following (&errn, name); if (0 > answer) { printfmt (&errn, 2, "Error calling `vu_file_is_directory_following' (%s)\n", errno_to_string (errn)); printfmt (&errn, 2, " file %s\n", name); panic ("I/O error"); } return answer; } tla-1.3.5+dfsg/src/hackerlab/vu/vfdbuf.c0000644000175000017500000013544410457621774016542 0ustar useruser/* vfdbuf.c - VU buffered I/O * **************************************************************** * Copyright (C) 1998, 2000 Thomas Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/os/errno.h" #include "hackerlab/bugs/panic.h" #include "hackerlab/mem/mem.h" #include "hackerlab/mem/must-malloc.h" #include "hackerlab/arrays/ar.h" #include "hackerlab/vu/vu-sys.h" #include "hackerlab/vu/vfdbuf.h" /************************************************************************ *(h0 "Buffered File Descriptors") * * These functions allow you to perform buffered I/O on descriptors * using the VU functions. (See xref:"A Virtual Unix File-System * Interface".) * * Each buffered file is associated with these values: * * t_uchar * buffer; * Storage for buffered characters. * The location of the buffer in memory * may change over time. * * long bufsize * The size of the buffer. * * t_uchar * read_write_position; * The read/write position, within the buffer. * This corresponds to the file offset returned * by: * vu_lseek (&errn, fd, 0, SEEK_CUR) * * long buffered; * The number of buffered characters relative * to the read/write position. * * All bytes between `buffer' and * `read_write_position + buffered' are * buffered. * * Note that `buffered' may be negative if the * `read_write_position' is beyond the current * end of the file. * * Normal I/O functions like `vu_read' and `vu_write' operate * in the expected way: they buffer characters or read characters * from the buffer, flushing or refilling it as needed. * * For high-performance I/O, there is assistance for performing * buffered I/O without copying characters to and from the buffer: * * vfdbuf_getbuf * vfdbuf_takebuf * vfdbuf_set_buffer * vfdbuf_more * vfdbuf_advance * * which are documented later in this chapter. * * Buffers can be designated `dont_flush' -- which means that the buffer * grows rather than writing to an underlying file. In combination with * pseudo-descriptors (see xref:"reserv_pseudo"), `dont_flush' buffers * can be used to implement in-core files (files which are actually * strings). * * Buffers can be designated `zero_byte' -- which means that an extra * byte is added to the buffer (at `buffer + bufsize') and that byte * is initialized to 0. */ /*(menu) */ struct vfdbuf_record { struct vu_handler sub_handler; int flags; int eof; void (*free_buffer)(t_uchar * buffer, void * closure); void * free_buffer_closure; int dont_flush; int is_pipe; int zero_byte; int auto_shift; off_t fd_offset; /* the kernel's read/write position */ off_t buffer_offset; /* position in the file of the buffer */ long read_write_pos; /* offset within the buffer */ long buffered; /* number of valid characters in buffer */ long bufsize; /* total size of buffer */ t_uchar * buf; /* the buffer */ }; static union { struct vfdbuf_record * vfd; /* array of vfdbuf_record */ void * void_ptr; /* for passing to ar_* functions */ } bufs = {0}; #if 1 #define check_buffer_invariants(FD) \ check_buffer_invariants_internal (fd, __FILE__, __LINE__) #else #define check_buffer_invariants(FD) #undef invariant #define invariant(COND) #endif static void check_buffer_invariants_internal (int fd, char * file, int line) { invariant_at_file_line (vfdbuf_is_buffered (fd), file, line); /* temporary invariant since RDWR mode doesn't really work */ invariant_at_file_line ((bufs.vfd[fd].flags & O_ACCMODE) != O_RDWR, file, line); invariant_at_file_line (bufs.vfd[fd].buffered >= 0, file, line); invariant_at_file_line (bufs.vfd[fd].buffered <= bufs.vfd[fd].bufsize, file, line); invariant_at_file_line (bufs.vfd[fd].read_write_pos >= 0, file, line); invariant_at_file_line (bufs.vfd[fd].read_write_pos <= bufs.vfd[fd].bufsize, file, line); invariant_at_file_line ((!bufs.vfd[fd].bufsize && !bufs.vfd[fd].zero_byte) || bufs.vfd[fd].buf, file, line); /* invariant_at_file_line (bufs.vfd[fd].is_pipe || ((bufs.vfd[fd].flags & O_ACCMODE) != O_RDWR), file, line); */ /* Note that the RDWR case doesn't really work. */ invariant_at_file_line (( !bufs.vfd[fd].is_pipe || ( (((bufs.vfd[fd].flags & O_ACCMODE) == O_RDONLY) && (bufs.vfd[fd].fd_offset == (bufs.vfd[fd].buffer_offset + bufs.vfd[fd].buffered))) || (((bufs.vfd[fd].flags & O_ACCMODE) == O_WRONLY) && (bufs.vfd[fd].fd_offset == bufs.vfd[fd].buffer_offset)) || (((bufs.vfd[fd].flags & O_ACCMODE) == O_RDWR) && 0))), file, line); } /* static void realloc_buf (int fd, long bufsize); * * Make a buffer larger. (`bufsize' must be >= than * `bufs.vfd[fd].bufsize'.) */ static void realloc_buf (int fd, long bufsize) { long size; t_uchar * oldbuf; t_uchar * newbuf; invariant (bufsize >= bufs.vfd[fd].bufsize); check_buffer_invariants (fd); oldbuf = bufs.vfd[fd].buf; size = bufsize + (bufs.vfd[fd].zero_byte ? 1 : 0); newbuf = (t_uchar *)must_malloc (size); mem_move (newbuf, oldbuf, bufs.vfd[fd].buffered); bufs.vfd[fd].buf = newbuf; bufs.vfd[fd].bufsize = bufsize; if (bufs.vfd[fd].free_buffer) { bufs.vfd[fd].free_buffer (oldbuf, bufs.vfd[fd].free_buffer_closure); bufs.vfd[fd].free_buffer = 0; } else { must_free (oldbuf); } if (bufs.vfd[fd].zero_byte) bufs.vfd[fd].buf[size - 1] = 0; invariant (bufs.vfd[fd].buf != oldbuf); check_buffer_invariants (fd); } void vfdbuf_flush_all(void) { int x; int size; size = ar_size (bufs.void_ptr, lim_use_must_malloc, sizeof (*bufs.vfd)); for (x = 0; x < size; ++x) { if (bufs.vfd[x].sub_handler.vtable) { int errn; vfdbuf_flush (&errn, x); } } } /************************************************************************ *(h1 "Establishing Buffers") * */ /*(c vfdbuf_buffer_fd) * int vfdbuf_buffer_fd (int * errn, * int fd, * long bufsize, * int flags, * int buffer_flags); * * Arrange to buffer I/O on descriptor `fd'. * * `fd' is the descriptor to buffer. * * `bufsize' is the initial size of the buffer or 0 to use a buffer of * the default size. * * `flags' indicates whether to buffer for input (`O_RDONLY'), * output (`O_WRONLY') or both (`O_RDWR'). * * \WARNING:/ I am fairly sure that there are bugs in the * buffering code, especially for `O_RDWR' files. Some * comprehensive unit tests are needed for this module. * * `buffer_flags' is a combination (`|') of any of the bits: * * vfdbuf_add_zero_byte * vfdbuf_auto_shift * * If `vfdbuf_add_zero_byte' is set, the actual buffer size for this * descriptor is one byte larger than `bufsize' (even if the buffer is * reallocated). The extra byte is initialized to 0. * * If `vfdbuf_auto_shift' is set, the behavior of `vfdbuf_more' is * modified. See xref:"vfdbuf_more". * * If `fd' is already buffered, this function attempts to reset the * buffer size, flags, and buffer flags. If more than `bufsize' * characters are already buffered, the resulting buffer will be * larger than `bufsize'. * * Return 0 on success, -1 (and set `*errn') on error. */ int vfdbuf_buffer_fd (int * errn, int fd, long bufsize, int flags, int buffer_flags) { off_t offset; int is_pipe; struct vu_handler * sub_handler; if (bufsize <= 0) bufsize = 4096; if ((ar_size (bufs.void_ptr, lim_use_must_malloc, sizeof (*bufs.vfd)) > fd) && bufs.vfd[fd].sub_handler.vtable) { int had_zero_byte; /* already buffered */ if (bufs.vfd[fd].flags != flags) { if (errn) *errn = EINVAL; return -1; } had_zero_byte = bufs.vfd[fd].zero_byte; bufs.vfd[fd].auto_shift = !!(buffer_flags & vfdbuf_auto_shift); bufs.vfd[fd].zero_byte = !!(buffer_flags & vfdbuf_add_zero_byte); if (bufsize != bufs.vfd[fd].bufsize) { t_uchar * oldbuf; t_uchar * newbuf; if (bufsize < bufs.vfd[fd].buffered) bufsize = bufs.vfd[fd].buffered; newbuf = must_malloc (bufsize + bufs.vfd[fd].zero_byte); oldbuf = bufs.vfd[fd].buf; mem_move (newbuf, oldbuf, bufs.vfd[fd].buffered); if (bufs.vfd[fd].free_buffer) bufs.vfd[fd].free_buffer (oldbuf, bufs.vfd[fd].free_buffer_closure); else must_free (oldbuf); bufs.vfd[fd].buf = newbuf; if (bufs.vfd[fd].zero_byte) bufs.vfd[fd].buf[bufsize] = 0; } check_buffer_invariants (fd); return 0; } sub_handler = vu_fd_dispatch (fd); offset = sub_handler->vtable->lseek (errn, fd, 0, SEEK_CUR, sub_handler->closure); if (offset >= 0) is_pipe = 0; else { if ((*errn != ESPIPE) || ((flags & O_ACCMODE) == O_RDWR)) return -1; else { is_pipe = 1; offset = 0; } } if (fd >= ar_size (bufs.void_ptr, lim_use_must_malloc, sizeof (*bufs.vfd))) ar_ref (&bufs.void_ptr, lim_use_must_malloc, fd, sizeof (struct vfdbuf_record)); bufs.vfd[fd].sub_handler = *sub_handler; bufs.vfd[fd].flags = O_ACCMODE & flags; bufs.vfd[fd].eof = 0; bufs.vfd[fd].free_buffer = 0; bufs.vfd[fd].free_buffer_closure = 0; bufs.vfd[fd].dont_flush = 0; bufs.vfd[fd].is_pipe = is_pipe; bufs.vfd[fd].zero_byte = !!(buffer_flags & vfdbuf_add_zero_byte); bufs.vfd[fd].auto_shift = !!(buffer_flags & vfdbuf_auto_shift); bufs.vfd[fd].fd_offset = 0; bufs.vfd[fd].buffer_offset = offset; bufs.vfd[fd].read_write_pos = 0; bufs.vfd[fd].buffered = 0; bufs.vfd[fd].buf = must_malloc (bufsize + bufs.vfd[fd].zero_byte); bufs.vfd[fd].bufsize = bufsize; vu_set_fd_handler (fd, &vfdbuf_vtable, 0); check_buffer_invariants (fd); return 0; } /*(c vfdbuf_set_buffer) * int * vfdbuf_set_buffer (int * errn, * int fd, * t_uchar * buffer, * long bufsize, * long read_write_pos, * long buffered, * int add_zero_byte, * void (*free_buffer)(t_uchar * buf, void * closure), * void * free_buffer_closure) * * Establish a specific region of memory as the buffer for `fd'. * * See xref:"Buffered File Descriptors" and xref:"vfdbuf_buffer_fd". */ int vfdbuf_set_buffer (int * errn, int fd, t_uchar * buffer, long bufsize, long read_write_pos, long buffered, int add_zero_byte, void (*free_buffer)(t_uchar * buf, void * closure), void * free_buffer_closure) { if (!((ar_size (bufs.void_ptr, lim_use_must_malloc, sizeof (*bufs.vfd)) > fd) && bufs.vfd[fd].sub_handler.vtable)) { /* not buffered */ invalid: if (errn) *errn = EINVAL; return -1; } if ((buffered > bufsize) || (read_write_pos > bufsize)) goto invalid; if (bufs.vfd[fd].free_buffer) bufs.vfd[fd].free_buffer (bufs.vfd[fd].buf, bufs.vfd[fd].free_buffer_closure); bufs.vfd[fd].buf = buffer; bufs.vfd[fd].bufsize = bufsize; bufs.vfd[fd].read_write_pos = read_write_pos; bufs.vfd[fd].buffered = buffered; bufs.vfd[fd].zero_byte = !!add_zero_byte; bufs.vfd[fd].free_buffer = free_buffer; bufs.vfd[fd].free_buffer_closure = free_buffer_closure; check_buffer_invariants (fd); return 0; } int vfdbuf_unbuffer_fd (int * errn, int fd) { check_buffer_invariants (fd); if (!bufs.vfd[fd].dont_flush && (bufs.vfd[fd].flags != O_RDONLY) && bufs.vfd[fd].buffered && bufs.vfd[fd].read_write_pos) { int flush; flush = vfdbuf_flush (errn, fd); if (flush < 0) return -1; } vu_set_fd_handler (fd, bufs.vfd[fd].sub_handler.vtable, bufs.vfd[fd].sub_handler.closure); if (!bufs.vfd[fd].free_buffer) must_free (bufs.vfd[fd].buf); else bufs.vfd[fd].free_buffer (bufs.vfd[fd].buf, bufs.vfd[fd].free_buffer_closure); mem_set ((t_uchar *)&bufs.vfd[fd], 0, sizeof (bufs.vfd[fd])); return 0; } /*(c vfdbuf_is_buffered) * int vfdbuf_is_buffered (int fd); * * Return 1 if fd has a (vfdbuf) buffer, 0 otherwise. */ int vfdbuf_is_buffered (int fd) { if ((ar_size (bufs.void_ptr, lim_use_must_malloc, sizeof (*bufs.vfd)) > fd) && bufs.vfd[fd].sub_handler.vtable) return 1; return 0; } /************************************************************************ *(h1 "Controlling Buffer Flushing") * * * */ /*(c vfdbuf_set_dont_flush) * int vfdbuf_set_dont_flush (int * errn, int fd, int setting); * * Activate or deactivate buffer flushing for descriptor `fd'. * * `setting' is 0 to deactivate and any other value to activate * flushing. * * If flushing is deactivated, writes may cause the size of the buffer * to be increased and calls to `vfdbuf_flush' have no effect. * * Return -1 and EINVAL if `fd' is not buffered, 0 otherwise. * * See also xref:"vfdbuf_is_dont_flush". */ int vfdbuf_set_dont_flush (int * errn, int fd, int setting) { if (!vfdbuf_is_buffered (fd)) { if (errn) *errn = EINVAL; return -1; } bufs.vfd[fd].dont_flush = !!setting; check_buffer_invariants (fd); return 0; } /*(c vfdbuf_is_dont_flush) * int vfdbuf_is_dont_flush (int * errn, int fd); * * Return 0 if fd is buffered and flushing is enabled, * a positive value if fd is buffered and flushing is disabled. * * Return -1 and EINVAL if fd is not buffered. */ int vfdbuf_is_dont_flush (int * errn, int fd) { if (!vfdbuf_is_buffered (fd)) { if (errn) *errn = EINVAL; return -1; } return bufs.vfd[fd].dont_flush; } /************************************************************************ *(h1 "Controlling Buffer Auto-shift") * */ /*(c vfdbuf_set_auto_shift) * int vfdbuf_set_auto_shift (int * errn, int fd, int setting); * * Activate or deactivate buffer auto-shift for descriptor `fd'. * * `setting' is 0 to deactivate and any other value to activate * auto-shift. * * See xref:"vfdbuf_more". * * Return -1 and EINVAL if `fd' is not buffered, 0 otherwise. * * See also xref:"vfdbuf_is_auto_shift". */ int vfdbuf_set_auto_shift (int * errn, int fd, int setting) { if (!vfdbuf_is_buffered (fd)) { if (errn) *errn = EINVAL; return -1; } bufs.vfd[fd].auto_shift = !!setting; check_buffer_invariants (fd); return 0; } /*(c vfdbuf_is_auto_shift) * int vfdbuf_is_auto_shift (int * errn, int fd); * * Return 0 if fd is buffered and auto-shift is disabled, * a positive value if fd is buffered and auto-shift is enabled. * * Return -1 and EINVAL if fd is not buffered. */ int vfdbuf_is_auto_shift (int * errn, int fd) { if (!vfdbuf_is_buffered (fd)) { if (errn) *errn = EINVAL; return -1; } return bufs.vfd[fd].auto_shift; } /* static int sync_offset (int * errn, int fd); * * Move the descriptor's offset within the file to agree with the * buffer's offset within the file. */ static int sync_offset (int * errn, int fd) { check_buffer_invariants (fd); invariant ( ( ((bufs.vfd[fd].flags & O_ACCMODE) != O_RDONLY) && ((bufs.vfd[fd].flags & O_ACCMODE) != O_RDWR)) || ( (bufs.vfd[fd].buffered == 0) && (bufs.vfd[fd].read_write_pos == 0))); if (bufs.vfd[fd].buffer_offset != bufs.vfd[fd].fd_offset) { off_t got; got = bufs.vfd[fd].sub_handler.vtable->lseek (errn, fd, bufs.vfd[fd].buffer_offset, SEEK_SET, bufs.vfd[fd].sub_handler.closure); if (got != bufs.vfd[fd].buffer_offset) { if (got >= 0) if (errn) *errn = EIO; return -1; } bufs.vfd[fd].fd_offset = bufs.vfd[fd].buffer_offset; check_buffer_invariants (fd); } return 0; } /************************************************************************ *(h1 "Access to Buffers") * */ /*(c vfdbuf_getbuf) * int vfdbuf_getbuf (int * errn, * t_uchar ** buffer, * long * bufsize, * t_uchar ** read_write_position, * long * buffered, * int fd); * * Return the address and size of the buffer and the address (within * that buffer) and number of buffered characters beyond the * read/write position for descriptor `fd'. * * Upon return, `*buf' is the read/write position and `*buffered' is * the number of buffered characters beyond that position. If * `*buffered' is less than 0, then the characters between `*buffer' * and `*buffer - *buffered' are not yet part of the file (the read/write * position is beyond the end of the file). * * Any of `buffer', `bufsize', `read_write_pos' or `buffered' may be * 0. * * Return -1 and EINVAL if `fd' is not buffered, 0 otherwise. */ int vfdbuf_getbuf (int * errn, t_uchar ** buffer, long * bufsize, t_uchar ** read_write_position, long * buffered, int * has_zero_byte, int fd) { if (!vfdbuf_is_buffered (fd)) { if (errn) *errn = EINVAL; return -1; } if (buffer) *buffer = bufs.vfd[fd].buf; if (bufsize) *bufsize = bufs.vfd[fd].bufsize; if (read_write_position) *read_write_position = bufs.vfd[fd].buf + bufs.vfd[fd].read_write_pos; if (buffered) *buffered = bufs.vfd[fd].buffered - bufs.vfd[fd].read_write_pos; if (has_zero_byte) *has_zero_byte = bufs.vfd[fd].zero_byte; invariant (!buffer || (*buffer == bufs.vfd[fd].buf)); invariant (!bufsize || (*bufsize == bufs.vfd[fd].bufsize)); invariant (!read_write_position || ((*read_write_position - bufs.vfd[fd].buf) == bufs.vfd[fd].read_write_pos)); invariant (!buffered || ((bufs.vfd[fd].read_write_pos + *buffered) == bufs.vfd[fd].buffered)); invariant (!has_zero_byte || (*has_zero_byte == bufs.vfd[fd].zero_byte)); return 0; } /*(c vfdbuf_takebuf) * int vfdbuf_takebuf (int * errn, * t_uchar ** bufbase, * long * bufsize, * t_uchar ** read_write_pos, * long * buffered, * int fd, * void (*free_buffer)(t_uchar * buf, void * closure), * void * free_buffer_closure); * * Return the address of and size of the buffer for `fd'. Also return * the address of and number of buffered characters beyond the * read/write position. (See `vfdbuf_getbuf'.) * * Responsibility for freeing the buffer returned (allocated by * `must_malloc') rests with the caller. `vfdbuf' functions will continue * to use the buffer. When the `vfdbuf' functions no longer require * the buffer, they call `free_buffer': * * free_buffer (buffer, free_buffer_closure) * * Subsequent calls to `vfdbuf_takebuf', made before `free_buffer' is * called will return the same buffer if the same values are passed * for `free_buffer' and `free_buffer_closure' and a newly allocated * buffer otherwise. */ int vfdbuf_takebuf (int * errn, t_uchar ** bufbase, long * bufsize, t_uchar ** read_write_pos, long * buffered, int * has_zero_byte, int fd, void (*free_buffer)(t_uchar * buf, void * closure), void * free_buffer_closure) { if (!vfdbuf_is_buffered (fd)) { if (errn) *errn = EINVAL; return -1; } if ( (bufs.vfd[fd].free_buffer != free_buffer) || (bufs.vfd[fd].free_buffer_closure != free_buffer_closure)) realloc_buf (fd, bufs.vfd[fd].bufsize); bufs.vfd[fd].free_buffer = free_buffer; bufs.vfd[fd].free_buffer_closure = free_buffer_closure; return vfdbuf_getbuf (errn, bufbase, bufsize, read_write_pos, buffered, has_zero_byte, fd); } /************************************************************************ *(h1 "Controlling What is Buffered") * * */ /*(c vfdbuf_shift) * int vfdbuf_shift (int * errn, int fd, long amt); * * \WARNING: there is a note in the code that says documentation * for this function is out of date./ * * Discard `amt' leading characters from a buffer, shifting any * remaining characters to make room at the end of the buffer. * * If the "don't flush" flag is set for this buffer, this call will * increase the size of the buffer by `amt' characters and leave existing * characters untouched. * * If `amt' is larger than the number of buffered characters that * preceed the read/write position, or if `amt' is -1, the effect is * the same as if `amt' were exactly the number of buffered characters * that preceed the read/write position. * * If the buffer is being used for output, this call will first flush * shifted characters that are currently part of the file. If there * are characters in the buffer beyond the end of the file, however, they * are not flushed by this function. The effect is that this function * will not make a file larger. (See `vfdbuf_buffer_to_position'.) * * Return 0 upon success, -1 upon error. This function can fail for a * descriptor opened for writing if it was necessary to flush * characters from the buffer, but the flush operation failed. * * One useful post-condition of this function is that there is room * for `amt' more characters beyond the read/write position after a * call to this function than were available before. * * Another useful post-condition is that the read/write position * within the file is not changed by this function. (See * `vfdbuf_advance'.) */ int vfdbuf_shift (int * errn, int fd, long amt) { off_t after_short_write; if (!vfdbuf_is_buffered (fd)) { *errn = EINVAL; return -1; } if ((amt > bufs.vfd[fd].read_write_pos) || (amt == -1)) amt = bufs.vfd[fd].read_write_pos; if (bufs.vfd[fd].dont_flush) { realloc_buf (fd, bufs.vfd[fd].bufsize + amt); return 0; } after_short_write = 0; retry_after_short_write: if (((bufs.vfd[fd].flags & O_ACCMODE) == O_WRONLY) || ((bufs.vfd[fd].flags & O_ACCMODE) == O_RDWR)) { size_t to_write; off_t wrote; if (sync_offset (errn, fd) < 0) return -1; to_write = (bufs.vfd[fd].buffered < amt) ? bufs.vfd[fd].buffered : amt; wrote = bufs.vfd[fd].sub_handler.vtable->write (errn, fd, bufs.vfd[fd].buf, to_write, bufs.vfd[fd].sub_handler.closure); if (wrote < 0) return -1; bufs.vfd[fd].fd_offset += wrote; if (to_write > wrote) { after_short_write = amt - wrote; amt = wrote; } } mem_move (bufs.vfd[fd].buf, bufs.vfd[fd].buf + amt, bufs.vfd[fd].buffered - amt); bufs.vfd[fd].buffer_offset += amt; bufs.vfd[fd].read_write_pos -= amt; bufs.vfd[fd].buffered -= amt; check_buffer_invariants (fd); if (after_short_write) { amt = after_short_write; goto retry_after_short_write; } return 0; } /*(c vfdbuf_advance) * int vfdbuf_advance (int * errn, int fd, long amt); * * Advance the read/write position of a buffered descriptor. * * If `amt' is larger than the number of buffered characters beyond * the read/write position, the size of the buffer is increased, and * the new characters initialized to 0, but no new characters are read * from the descriptor. * * One or more calls this function are commonly followed by a call * to `vfdbuf_shift' to discard the advanced-over characters from the * buffer. A good time to make such a call is before a call to * `vfdbuf_more', if it is safe to discard characters from the buffer * at that time. * * Return -1 and EINVAL if `fd' is not buffered, 0 otherwise. */ int vfdbuf_advance (int * errn, int fd, long amt) { long bufsize_needed; if (!vfdbuf_is_buffered (fd)) { if (errn) *errn = EINVAL; return -1; } bufsize_needed = bufs.vfd[fd].read_write_pos + amt; if (bufsize_needed > bufs.vfd[fd].bufsize) realloc_buf (fd, bufsize_needed); if (bufs.vfd[fd].read_write_pos + amt > bufs.vfd[fd].buffered) { long from; long fill_to; from = ((bufs.vfd[fd].read_write_pos > bufs.vfd[fd].buffered) ? bufs.vfd[fd].read_write_pos : bufs.vfd[fd].buffered); fill_to = bufs.vfd[fd].read_write_pos + amt; mem_set (bufs.vfd[fd].buf + from, 0, fill_to - from); } bufs.vfd[fd].read_write_pos += amt; check_buffer_invariants (fd); return 0; } /*(c vfdbuf_flush) * int vfdbuf_flush (int * errn, int fd); * * Write buffered characters prior to the read/write position to disk. * This function has no effect if descriptor `fd' is not buffered, or * if the "don't flush" flag is set for this descriptor. (See * `vfdbuf_set_dont_flush'.) * * Flushed characters are removed from the buffer. * * The read/write position may be past the last character of the file. * In that case, only the characters in the file are flushed to disk. * (See `vfdbuf_buffer_to_position'.) * * Return 0 upon success, -1 upon error. */ int vfdbuf_flush (int * errn, int fd) { off_t wrote; size_t to_write; if (!vfdbuf_is_buffered (fd)) { if (errn) *errn = EINVAL; return -1; } if ( !bufs.vfd[fd].read_write_pos || bufs.vfd[fd].dont_flush || ((bufs.vfd[fd].flags != O_WRONLY) && (bufs.vfd[fd].flags != O_RDWR))) return 0; to_write = bufs.vfd[fd].read_write_pos; if (to_write > bufs.vfd[fd].buffered) to_write = bufs.vfd[fd].buffered; retry: if (sync_offset (errn, fd) < 0) return -1; wrote = bufs.vfd[fd].sub_handler.vtable->write (errn, fd, bufs.vfd[fd].buf, to_write, bufs.vfd[fd].sub_handler.closure); if (wrote < 0) return -1; mem_move (bufs.vfd[fd].buf, bufs.vfd[fd].buf + wrote, bufs.vfd[fd].buffered - wrote); to_write -= wrote; bufs.vfd[fd].fd_offset += wrote; bufs.vfd[fd].buffer_offset += wrote; bufs.vfd[fd].read_write_pos -= wrote; bufs.vfd[fd].buffered -= wrote; if (to_write) goto retry; invariant ((bufs.vfd[fd].buffered == 0) || (bufs.vfd[fd].read_write_pos == 0)); /* This would discard any characters prior to the read_write_pos * that are not already part of the file. That doesn't seem like * the right thing to do, although it would give the invariant that * (read_write_pos == 0) on exit. * * bufs.vfd[fd].buffer_offset += bufs.vfd[fd].read_write_pos; * bufs.vfd[fd].read_write_pos = 0; */ check_buffer_invariants (fd); return 0; } /*(c vfdbuf_return) * int vfdbuf_return (int * errn, int fd, t_uchar * str, long len); * * Add characters to the buffer for descriptor `fd'. * * Characters are inserted immediately after the read/write position * so that subsequent reads on this descriptor return those characters * first and subsequent writes overwrite them. Subsequent flushes of * a writable descriptor will ignore these characters unless the * read/write position is first advanced by a write or by * `vfdbuf_advance'. * * If `fd' is a read-only descriptor, buffered characters prior to * the read/write position may be overwritten. * * The read/write position of the descriptor is unchanged relative to * the beginning of the file by calls to this function. */ int vfdbuf_return (int * errn, int fd, t_uchar * str, long len) { long size_needed; if (!vfdbuf_is_buffered (fd)) { if (errn) *errn = EINVAL; return -1; } if ((bufs.vfd[fd].flags & O_ACCMODE) == O_RDONLY) { if (bufs.vfd[fd].read_write_pos >= len) { bufs.vfd[fd].read_write_pos -= len; mem_move (bufs.vfd[fd].buf + bufs.vfd[fd].read_write_pos, str, len); return 0; } else { int ign; vfdbuf_shift (&ign, fd, -1); } } if (bufs.vfd[fd].buffered <= bufs.vfd[fd].read_write_pos) size_needed = bufs.vfd[fd].read_write_pos + len; else size_needed = bufs.vfd[fd].buffered + len; if (size_needed > bufs.vfd[fd].bufsize) realloc_buf (fd, size_needed); if (bufs.vfd[fd].buffered <= bufs.vfd[fd].read_write_pos) { mem_move (bufs.vfd[fd].buf + bufs.vfd[fd].read_write_pos, str, len); bufs.vfd[fd].buffered = bufs.vfd[fd].read_write_pos + len; } else { mem_move (bufs.vfd[fd].buf + bufs.vfd[fd].read_write_pos + len, bufs.vfd[fd].buf + bufs.vfd[fd].read_write_pos, bufs.vfd[fd].buffered - bufs.vfd[fd].read_write_pos); mem_move (bufs.vfd[fd].buf + bufs.vfd[fd].read_write_pos, str, len); bufs.vfd[fd].buffered += len; } return 0; } /*(c vfdbuf_more) * int vfdbuf_more (int * errn, * t_uchar ** buffer, * long * bufsize, * t_uchar ** read_write_pos, * long * buffered, * int fd, * long opt_amt); * * Buffer (by reading) additional characters for descriptor `fd'. * Return the address of and number of buffered unread characters * (including previously buffered but unread characters). * * `opt_amt' is the number of additional characters to read or 0 to * read a default number of additional characters. * * Ordinarily, no characters are discarded from the buffer by this * function. (See `vfdbuf_advance' and `vfdbuf_shift'.) * * If the buffer was created with the flag `vfdbuf_auto_shift', * `opt_amt' is 0, and the last buffered character is more than 3/4 of * the way through the buffer's allocated memory, then `vfdbuf_more' * will call `vfdbuf_shift' before doing anything else. This is the * only circumstance under which `vfdbuf_more' will discard characters * from a buffer. * * The read/write position is not changed by this function. * * Return -1 upon error, the number of characters read upon success. */ ssize_t vfdbuf_more (int * errn, t_uchar ** buffer, long * bufsize, t_uchar ** read_write_pos, long * buffered, int * has_zero_byte, int fd, long opt_amt) { long size_needed; if (!vfdbuf_is_buffered (fd)) { if (errn) *errn = EINVAL; return -1; } if (!opt_amt) { if (bufs.vfd[fd].auto_shift) { long pos; long size; pos = bufs.vfd[fd].buffered; size = bufs.vfd[fd].bufsize; if (pos * 4 > size * 3) if (vfdbuf_shift (errn, fd, -1)) return -1; } opt_amt = bufs.vfd[fd].bufsize - bufs.vfd[fd].buffered; if (!opt_amt) opt_amt = bufs.vfd[fd].bufsize; if (!opt_amt) opt_amt = 4096; } size_needed = bufs.vfd[fd].buffered + opt_amt; if (size_needed > bufs.vfd[fd].bufsize) realloc_buf (fd, size_needed); { off_t offset; ssize_t got; offset = bufs.vfd[fd].buffer_offset + bufs.vfd[fd].buffered; if (offset != bufs.vfd[fd].fd_offset) { off_t went_to; went_to = bufs.vfd[fd].sub_handler.vtable->lseek (errn, fd, offset, SEEK_SET, bufs.vfd[fd].sub_handler.closure); if (0 > went_to) return -1; if (went_to != offset) { if (errn) *errn = EIO; return -1; } bufs.vfd[fd].fd_offset = offset; } got = bufs.vfd[fd].sub_handler.vtable->read (errn, fd, bufs.vfd[fd].buf + bufs.vfd[fd].buffered, opt_amt, bufs.vfd[fd].sub_handler.closure); if (got < 0) return -1; if (got == 0) bufs.vfd[fd].eof = 1; else { bufs.vfd[fd].fd_offset += got; bufs.vfd[fd].buffered += got; } if (0 > vfdbuf_getbuf (errn, buffer, bufsize, read_write_pos, buffered, has_zero_byte, fd)) return -1; check_buffer_invariants (fd); return got; } } /************************************************************************ *(h1 "The End-of-File") * * * */ /*(c vfdbuf_is_eof) * int vfdbuf_is_eof (int * errn, int fd); * * Return 1 value if the end of file has been reached while * reading from buffered descriptor `fd', 0 otherwise. * * Return -1 and EINVAL if `fd' is not a buffered descriptor. */ int vfdbuf_is_eof (int * errn, int fd) { if (!vfdbuf_is_buffered (fd)) { if (errn) *errn = EINVAL; return -1; } return bufs.vfd[fd].eof; } /*(c vfdbuf_clear_eof) * void vfdbuf_clear_eof (int * errn, int fd); * * Clear the eof flag for buffered file descriptor `fd'. * * Return -1 and EINVAL if `fd' is not a buffered descriptor. */ int vfdbuf_clear_eof (int * errn, int fd) { if (!vfdbuf_is_buffered (fd)) { if (errn) *errn = EINVAL; return -1; } bufs.vfd[fd].eof = 0; return 0; } #define vfdbuf_make_closure vu_sys_make_closure #define vfdbuf_free_closure vu_sys_free_closure int vfdbuf_access (int * errn, const char * path, int mode, void * closure) { return vu_sys_access (errn, path, mode, closure); } int vfdbuf_chdir (int * errn, const char * path, void * closure) { return vu_sys_chdir (errn, path, closure); } int vfdbuf_chmod (int * errn, const char * path, int mode, void * closure) { return vu_sys_chmod (errn, path, mode, closure); } int vfdbuf_chown (int * errn, const char * path, int owner, int group, void * closure) { return vu_sys_chown (errn, path, owner, group, closure); } int vfdbuf_chroot (int * errn, const char * path, void * closure) { return vu_sys_chroot (errn, path, closure); } int vfdbuf_closedir (int * errn, DIR * dir, void * closure) { return bufs.vfd[vu_dir_fd (dir)].sub_handler.vtable->closedir (errn, dir, closure); } int vfdbuf_fchdir (int * errn, int fd, void * closure) { return bufs.vfd[fd].sub_handler.vtable->fchdir (errn, fd, closure); } int vfdbuf_fchmod (int * errn, int fd, int mode, void * closure) { return bufs.vfd[fd].sub_handler.vtable->fchmod (errn, fd, mode, closure); } int vfdbuf_fchown (int * errn, int fd, int owner, int group, void * closure) { return bufs.vfd[fd].sub_handler.vtable->fchown (errn, fd, owner, group, closure); } int vfdbuf_fstat (int * errn, int fd, struct stat * buf, void * closure) { return bufs.vfd[fd].sub_handler.vtable->fstat (errn, fd, buf, closure); } int vfdbuf_link (int * errn, const char * from, const char * to, void * closure) { return vu_sys_link (errn, from, to, closure); } int vfdbuf_lstat (int * errn, const char * path, struct stat * buf, void * closure) { return vu_sys_lstat (errn, path, buf, closure); } int vfdbuf_mkdir (int * errn, const char * path, int mode, void * closure) { return vu_sys_mkdir (errn, path, mode, closure); } int vfdbuf_open (int * errn, const char * path, int flags, int mode, void * closure) { return vu_sys_open (errn, path, flags, mode, closure); } int vfdbuf_opendir (int * errn, DIR ** retv, const char * path, void * closure) { return vu_sys_opendir (errn, retv, path, closure); } int vfdbuf_readdir (int * errn, struct alloc_limits * limits, char ** file_ret, DIR * dir, void * closure) { return bufs.vfd[ vu_dir_fd (dir)].sub_handler.vtable->readdir (errn, limits, file_ret, dir, closure); } int vfdbuf_readlink (int * errn, const char * path, char * buf, int bufsize, void * closure) { return vu_sys_readlink (errn, path, buf, bufsize, closure); } int vfdbuf_rename (int * errn, const char * from, const char * to, void * closure) { return vu_sys_rename (errn, from, to, closure); } int vfdbuf_rmdir (int * errn, const char * path, void * closure) { return vu_sys_rmdir (errn, path, closure); } int vfdbuf_stat (int * errn, const char * path, struct stat * buf, void * closure) { return vu_sys_stat (errn, path, buf, closure); } int vfdbuf_symlink (int * errn, const char * from, const char * to, void * closure) { return vu_sys_symlink (errn, from, to, closure); } int vfdbuf_truncate (int * errn, const char * path, off_t where, void * closure) { return vu_sys_truncate (errn, path, where, closure); } int vfdbuf_unlink (int * errn, const char * path, void * closure) { return vu_sys_unlink (errn, path, closure); } int vfdbuf_utime (int * errn, const char * path, struct utimbuf * times, void * closure) { return vu_sys_utime (errn, path, times, closure); } int vfdbuf_fcntl (int * errn, int fd, int cmd, long arg, void * closure) { return bufs.vfd[fd].sub_handler.vtable->fcntl (errn, fd, cmd, arg, closure); } int vfdbuf_dup (int * errn, int fd, void * closure) { return bufs.vfd[fd].sub_handler.vtable->dup (errn, fd, closure); } int vfdbuf_dup2 (int * errn, int fd, int newfd, void * closure) { return bufs.vfd[fd].sub_handler.vtable->dup2 (errn, fd, newfd, closure); } int vfdbuf_move_state (int * errn, int fd, int newfd, void * closure) { int sub_move; struct vu_handler * sub_handler; if (fd == newfd) return fd; sub_move = bufs.vfd[fd].sub_handler.vtable->move_state (errn, fd, newfd, bufs.vfd[fd].sub_handler.closure); if (0 > sub_move) return -1; /* sub_handler might have changed the underlying handler for fd */ sub_handler = vu_fd_dispatch (fd); if (sub_handler->vtable != &vfdbuf_vtable) bufs.vfd[fd].sub_handler = *sub_handler; /* Move the buffer to the new descriptor. */ ar_ref (&bufs.void_ptr, lim_use_must_malloc, newfd, sizeof (struct vfdbuf_record)); bufs.vfd[newfd] = bufs.vfd[fd]; /* Remove the buffer from the old descriptor. */ mem_set0 ((t_uchar *)&bufs.vfd[fd], sizeof (bufs.vfd[fd])); /* Make sure the old fd is now using the sub_handler and not * a vfdbuf handler. */ vu_set_fd_handler (fd, bufs.vfd[newfd].sub_handler.vtable, bufs.vfd[newfd].sub_handler.closure); /* Make sure the new fd is now using a vfdbuf handler. */ vu_set_fd_handler (newfd, &vfdbuf_vtable, 0); return 0; } int vfdbuf_close (int * errn, int fd, void * closure) { int got; check_buffer_invariants (fd); if (!bufs.vfd[fd].dont_flush && (bufs.vfd[fd].flags != O_RDONLY) && bufs.vfd[fd].buffered && bufs.vfd[fd].read_write_pos) { int flush; flush = vfdbuf_flush (errn, fd); if (flush < 0) return -1; } got = bufs.vfd[fd].sub_handler.vtable->close (errn, fd, bufs.vfd[fd].sub_handler.closure); bufs.vfd[fd].sub_handler.vtable->free_closure (bufs.vfd[fd].sub_handler.closure); if (!bufs.vfd[fd].free_buffer) must_free (bufs.vfd[fd].buf); else bufs.vfd[fd].free_buffer (bufs.vfd[fd].buf, bufs.vfd[fd].free_buffer_closure); mem_set ((t_uchar *)&bufs.vfd[fd], 0, sizeof (bufs.vfd[fd])); return got; } int vfdbuf_fsync (int * errn, int fd, void * closure) { if ((bufs.vfd[fd].flags != O_RDONLY) && bufs.vfd[fd].buffered && bufs.vfd[fd].read_write_pos) { if (bufs.vfd[fd].dont_flush) { if (errn) *errn = EINVAL; return -1; } if (vfdbuf_flush (errn, fd) < 0) return -1; } return bufs.vfd[fd].sub_handler.vtable->fsync (errn, fd, bufs.vfd[fd].sub_handler.closure); } int vfdbuf_ftruncate (int * errn, int fd, off_t where, void * closure) { int got; got = bufs.vfd[fd].sub_handler.vtable->ftruncate (errn, fd, where, bufs.vfd[fd].sub_handler.closure); if (got < 0) return -1; if (bufs.vfd[fd].buffer_offset >= got) { bufs.vfd[fd].buffer_offset += bufs.vfd[fd].read_write_pos; bufs.vfd[fd].read_write_pos = 0; bufs.vfd[fd].buffered = 0; } else if (bufs.vfd[fd].buffer_offset + bufs.vfd[fd].buffered >= got) { long retained; retained = got - bufs.vfd[fd].buffer_offset; mem_set (bufs.vfd[fd].buf + retained, 0, bufs.vfd[fd].buffered - retained); bufs.vfd[fd].buffered = retained; } check_buffer_invariants (fd); return 0; } ssize_t vfdbuf_read (int * errn, int fd, char * buf, size_t count, void * closure) { ssize_t orig_count; ssize_t avail; ssize_t filled_in; orig_count = count; if (bufs.vfd[fd].buffered > bufs.vfd[fd].read_write_pos) avail = bufs.vfd[fd].buffered - bufs.vfd[fd].read_write_pos; else avail = 0; filled_in = (avail < count ? avail : count); mem_move (buf, bufs.vfd[fd].buf + bufs.vfd[fd].read_write_pos, filled_in); bufs.vfd[fd].read_write_pos += filled_in; buf += filled_in; count -= filled_in; check_buffer_invariants (fd); if (!count) return orig_count; else { ssize_t got; /* We have consumed all buffered characters without * completing the read. */ invariant (bufs.vfd[fd].buffered == bufs.vfd[fd].read_write_pos); if (!bufs.vfd[fd].dont_flush) { /* bufs.vfd[fd].dont_flush == 0 * * Now read buffer-sized chunks directly into the * caller's buffer, but do this only if we are * permitted to flush the vfdbuf buffer. */ if (0 > vfdbuf_shift (errn, fd, -1)) { if (orig_count == count) return -1; else { check_buffer_invariants (fd); return orig_count - count; } } /* The vfdbuf buffer is empty: */ invariant (bufs.vfd[fd].read_write_pos == 0); invariant (bufs.vfd[fd].buffered == 0); if (sync_offset (errn, fd) < 0) { if (orig_count == count) return -1; else { check_buffer_invariants (fd); return orig_count - count; } } while (count > bufs.vfd[fd].bufsize) { /* The following invariant is true because either we: * * 1. just called sync_offset * or 2. added equal amounts to both `buffer_offset' and `fd_offset'. * */ invariant (bufs.vfd[fd].buffer_offset == bufs.vfd[fd].fd_offset); got = bufs.vfd[fd].sub_handler.vtable->read (errn, fd, buf, bufs.vfd[fd].bufsize, bufs.vfd[fd].sub_handler.closure); if (got < 0) { if (count == orig_count) return -1; check_buffer_invariants (fd); return orig_count - count; } if (got == 0) { bufs.vfd[fd].eof = 1; check_buffer_invariants (fd); return orig_count - count; } bufs.vfd[fd].fd_offset += got; bufs.vfd[fd].buffer_offset += got; buf += got; count -= got; } } /* There may be more to read because either * * 1. We weren't permitted to read buffersize chunks * directly into the caller's buffer because * `bufs.vfd[fd].dont_flush != 0'. * * or 2. We read buffersize chunks, but there remains * more characters (smaller than the size of the * buffer) yet to read. * */ if (count) { /* Buffer some additional characters internally, then copy * those to the caller's buffer. */ if (vfdbuf_more (errn, 0, 0, 0, 0, 0, fd, 0) < 0) { if (orig_count == count) return -1; else { check_buffer_invariants (fd); return orig_count - count; } } avail = bufs.vfd[fd].buffered - bufs.vfd[fd].read_write_pos; filled_in = (avail < count ? avail : count); mem_move (buf, bufs.vfd[fd].buf + bufs.vfd[fd].read_write_pos, filled_in); bufs.vfd[fd].read_write_pos += filled_in; buf += filled_in; count -= filled_in; } check_buffer_invariants (fd); return orig_count - count; } } ssize_t vfdbuf_write (int * errn, int fd, const char * buf, size_t count, void * closure) { ssize_t orig_count; ssize_t avail; ssize_t filled_in; orig_count = count; avail = bufs.vfd[fd].bufsize - bufs.vfd[fd].read_write_pos; if (bufs.vfd[fd].dont_flush && (avail < count)) { ssize_t added; added = count - avail; realloc_buf (fd, bufs.vfd[fd].bufsize + added); avail = bufs.vfd[fd].bufsize - bufs.vfd[fd].read_write_pos; invariant (avail >= count); } filled_in = (avail < count ? avail : count); mem_move (bufs.vfd[fd].buf + bufs.vfd[fd].read_write_pos, buf, filled_in); bufs.vfd[fd].read_write_pos += filled_in; if (bufs.vfd[fd].read_write_pos > bufs.vfd[fd].buffered) bufs.vfd[fd].buffered = bufs.vfd[fd].read_write_pos; buf += filled_in; count -= filled_in; check_buffer_invariants (fd); if (!count) { invariant (filled_in == orig_count); return orig_count; } else { int errn2; if (vfdbuf_flush (&errn2, fd) < 0) { if (filled_in) { check_buffer_invariants (fd); return filled_in; } else { if (errn) *errn = errn2; return -1; } } /* This is not a general invariant of `vfdbuf_flush', but * works here because we made sure that all characters before * the read_write_pos were considered buffered before calling * `vfdbuf_flush'. * * This invariant is important before the call to `sync_offset'. */ invariant (bufs.vfd[fd].read_write_pos == 0); if (sync_offset (errn, fd) < 0) { if (count == orig_count) return -1; else { check_buffer_invariants (fd); return orig_count - count; } } while (count > bufs.vfd[fd].bufsize) { ssize_t wrote; wrote = bufs.vfd[fd].sub_handler.vtable->write (errn, fd, buf, bufs.vfd[fd].bufsize, bufs.vfd[fd].sub_handler.closure); if (wrote < 0) { if (count < orig_count) return (orig_count - count); else return -1; } bufs.vfd[fd].fd_offset += wrote; bufs.vfd[fd].buffer_offset = bufs.vfd[fd].fd_offset; buf += wrote; count -= wrote; if (wrote < bufs.vfd[fd].bufsize) { check_buffer_invariants (fd); return orig_count - count; } } mem_move (bufs.vfd[fd].buf, buf, count); bufs.vfd[fd].buffer_offset = bufs.vfd[fd].fd_offset; bufs.vfd[fd].read_write_pos = count; bufs.vfd[fd].buffered = count; check_buffer_invariants (fd); return orig_count; } } off_t vfdbuf_lseek (int * errn, int fd, off_t offset, int whence, void * closure) { check_buffer_invariants (fd); if (bufs.vfd[fd].is_pipe) { if (whence == SEEK_SET) { if ((bufs.vfd[fd].flags & O_ACCMODE) == O_RDONLY) { /* is_pipe, SEEK_SET, O_RDONLY */ if (offset == bufs.vfd[fd].fd_offset) return offset; else { espipe_error: if (errn) *errn = ESPIPE; return -1; } } else { /* is_pipe, SEEK_SET, O_WRONLY */ if (offset == (bufs.vfd[fd].buffer_offset + bufs.vfd[fd].buffered)) return offset; else goto espipe_error; } /* not reached */ } else if ((whence == SEEK_CUR) && (offset == 0)) { if ((bufs.vfd[fd].flags & O_ACCMODE) == O_RDONLY) { /* is_pipe, SEEK_CUR, O_RDONLY */ return bufs.vfd[fd].fd_offset; } else { /* is_pipe, SEEK_CUR, O_WRONLY */ return bufs.vfd[fd].fd_offset + bufs.vfd[fd].buffered; } } else goto espipe_error; /* is_pipe, not reached */ } /* !is_pipe */ switch (whence) { default: if (errn) *errn = EINVAL; return -1; case SEEK_SET: break; case SEEK_CUR: offset += (bufs.vfd[fd].buffer_offset + bufs.vfd[fd].read_write_pos); break; case SEEK_END: { struct stat statb; if (0 > vu_fstat (errn, fd, &statb)) return -1; offset += statb.st_size; } break; } if ((offset >= bufs.vfd[fd].buffer_offset) && (offset <= (bufs.vfd[fd].buffer_offset + bufs.vfd[fd].buffered))) bufs.vfd[fd].read_write_pos = offset - bufs.vfd[fd].buffer_offset; else { if (((bufs.vfd[fd].flags & O_ACCMODE) != O_RDONLY) && bufs.vfd[fd].buffered && bufs.vfd[fd].read_write_pos) { /* This is a writable descriptor and there are valid buffered characters * preceeding the read/write position. */ if (bufs.vfd[fd].dont_flush) { if (errn) *errn = EINVAL; return -1; } if (0 > vfdbuf_flush (errn, fd)) return -1; invariant (!bufs.vfd[fd].buffered); } /* Either this buffer is read-only, or there are no valid characters * in the buffer. */ bufs.vfd[fd].buffer_offset = offset; bufs.vfd[fd].read_write_pos = 0; bufs.vfd[fd].buffered = 0; } check_buffer_invariants (fd); return bufs.vfd[fd].buffer_offset + bufs.vfd[fd].read_write_pos; } struct vu_fs_discipline vfdbuf_vtable \ = { VU_FS_DISCIPLINE_INITIALIZERS (vfdbuf_) }; tla-1.3.5+dfsg/src/hackerlab/vu/safe.h0000644000175000017500000000522610457621774016203 0ustar useruser/* safe.h - decls for error-free I/O routines (panic on error) * **************************************************************** * Copyright (C) 1999, 2000 Thomas Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__VU__SAFE_H #define INCLUDE__VU__SAFE_H #include "hackerlab/os/sys/stat.h" #include "hackerlab/os/fcntl.h" #include "hackerlab/os/unistd.h" #include "hackerlab/os/stdlib.h" #include "hackerlab/os/sys/time.h" #include "hackerlab/os/utime.h" #include "hackerlab/os/dirent.h" #include "hackerlab/machine/types.h" #include "hackerlab/vu/safe-vu-utils.h" #include "hackerlab/vu/safe-vfdbuf.h" #include "hackerlab/vu/safe-printfmt.h" /* automatically generated __STDC__ prototypes */ extern int safe_access (const char * path, int mode); extern int safe_chdir (const char * path); extern int safe_chmod (const char * path, int mode); extern int safe_chown (const char * path, int owner, int group); extern int safe_chroot (const char * path); extern int safe_close (int fd); extern int safe_closedir (DIR * dir); extern int safe_fchdir (int fd); extern int safe_fchmod (int fd, int mode); extern int safe_fchown (int fd, int owner, int group); extern int safe_fstat (int fd, struct stat * buf); extern int safe_fsync (int fd); extern int safe_ftruncate (int fd, long where); extern int safe_link (const char * from, const char * to); extern long safe_lseek (int fd, long offset, int whence); extern int safe_lstat (const char * path, struct stat * buf); extern int safe_mkdir (const char * path, int mode); extern int safe_open (const char * path, int flags, int mode); extern int safe_opendir (DIR ** retv, const char * path); extern long safe_read (int fd, char * buf, long count); extern long safe_read_retry (int fd, char * buf, long count); extern int safe_readdir (char ** file_ret, DIR * dir); extern int safe_readlink (const char * path, char * buf, int bufsize); extern int safe_rename (const char * from, const char * to); extern int safe_rmdir (const char * path); extern int safe_stat (const char * path, struct stat * buf); extern int safe_symlink (const char * from, const char * to); extern int safe_truncate (const char * path, long where); extern int safe_unlink (const char * path); extern int safe_utime (const char * path, struct utimbuf * times); extern long safe_write (int fd, const char * buf, long count); extern long safe_write_retry (int fd, const t_uchar * buf, int amt); extern int safe_fcntl (int fd, int cmd, long arg); extern int safe_dup (int fd); extern int safe_dup2 (int fd, int newfd); extern int safe_move_state (int fd, int newfd); #endif /* INCLUDE__VU__SAFE_H */ tla-1.3.5+dfsg/src/hackerlab/vu/url-fd.h0000644000175000017500000000106410457621774016452 0ustar useruser/* url-fd.h - decls for the fd: URL file system * **************************************************************** * Copyright (C) 1999, 2000 Thomas Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__VU__URL_FD_H #define INCLUDE__VU__URL_FD_H #include "hackerlab/vu/vu.h" /* automatically generated __STDC__ prototypes */ extern void url_fd_push_handler (int is_optional); extern int url_fd_to_fd (int * errn, const char * path); #endif /* INCLUDE__VU__URL_FD_H */ tla-1.3.5+dfsg/src/hackerlab/vu/printfmt.h0000644000175000017500000000132410457621774017123 0ustar useruser/* printfmt.h - decls for formatted printing * **************************************************************** * Copyright (C) 1998, 2000 Thomas Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__VU__PRINTFMT_H #define INCLUDE__VU__PRINTFMT_H #include "hackerlab/vu/printfmt-va.h" #if !defined(__GNUC__) # undef __attribute__ # define __attribute__(X) #endif extern int printfmt (int * errn, int fd, const char * fmt, ...) __attribute__((format (printf, 3, 4))); /* automatically generated __STDC__ prototypes */ extern int printfmt (int * errn, int fd, const char * fmt, ...); #endif /* INCLUDE__VU__PRINTFMT_H */ tla-1.3.5+dfsg/src/hackerlab/vu/safe-vu-utils-vfdbuf.h0000644000175000017500000000115210457621774021235 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:41:41 2001 (safe-vu-utils-vfdbuf.h) */ /* safe-vu-utils-vfdbuf.h - * **************************************************************** * Copyright (C) 2000 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__VU__SAFE_VU_UTILS_VFDBUF_H #define INCLUDE__VU__SAFE_VU_UTILS_VFDBUF_H #include "hackerlab/vu/vu-utils-vfdbuf.h" /* automatically generated __STDC__ prototypes */ extern void safe_next_line (t_uchar ** line, long * len, int fd); #endif /* INCLUDE__VU__SAFE_VU_UTILS_VFDBUF_H */ tla-1.3.5+dfsg/src/hackerlab/vu/pathcompress.h0000644000175000017500000000034510457621774017772 0ustar useruserchar* pathcompress_compress_path(char* path, char* compressed); char* pathcompress_uncompress_path(char* path, char* uncompressed); void pathcompress_add_path(char* path, char* abspath); void pathcompress_add_pathid(char* path); tla-1.3.5+dfsg/src/hackerlab/vu/safe-vu-utils-vfdbuf.c0000644000175000017500000000161210457621774021231 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:41:41 2001 (safe-vu-utils-vfdbuf.c) */ /* safe-vu-utils-vfdbuf.c - * **************************************************************** * Copyright (C) 2000 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/os/errno.h" #include "hackerlab/os/errno-to-string.h" #include "hackerlab/bugs/panic.h" #include "hackerlab/vu/printfmt.h" #include "hackerlab/vu/safe-vu-utils-vfdbuf.h" void safe_next_line (t_uchar ** line, long * len, int fd) { int errn; int status; retry: status = vfdbuf_next_line (&errn, line, len, fd); if (status < 0) { if (errn == EAGAIN) goto retry; printfmt (&errn, 2, "Error during call to `vfdbuf_next_line'\n"); printfmt (&errn, 2, " error %d: %s\n", errn, errno_to_string (errn)); panic ("I/O error"); } } tla-1.3.5+dfsg/src/hackerlab/vu/reserv.c0000644000175000017500000001734010457621774016566 0ustar useruser/* reserv.c - reserved and pseudo file descriptors * **************************************************************** * Copyright (C) 1998, 2000 Thomas Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/os/errno.h" #include "hackerlab/os/limits.h" #include "hackerlab/bugs/panic.h" #include "hackerlab/arrays/ar.h" #include "hackerlab/vu/vu-bad-arg.h" #include "hackerlab/vu/vu.h" #include "hackerlab/vu/reserv.h" /************************************************************************ *(h0 "Reserved File Descriptors and Pseudo-Descriptors" * :include ("vu/reserv.h")) * * The functions in this section allow programs to allocate file * descriptors and pseudo-descriptors. A pseudo-descriptor is an * integer outside of the range of descriptors used by the kernel * (`0..(OPEN_MAX - 1)'). Pseudo-descriptors are densely packed * (allocated sequentially beginning with `OPEN_MAX') and are suitable * for use with the function `vu_set_fd_handler' (see xref:"A Virtual * Unix File-System Interface"). */ /* A dynamically sized array of available pseudo-descriptors. */ static t_converter free_reserved_pseudo = {0}; /* The lowest-numbered pseudo-descriptor (== OPEN_MAX). */ static int first_pseudo; /* The lowest-numbered pseudo-descriptor that has never been allocated. */ static int next_pseudo; /* VU functions */ static void * reserve_pseudo_make_closure (void * closure); static void reserve_pseudo_free_closure (void * closure); static int reserve_pseudo_close (int * errn, int fd, void * closure); /* #define reserve_pseudo_make_closure (vu_make_closure_fn)vu_bad_arg */ /* #define reserve_pseudo_free_closure (vu_free_closure_fn)vu_bad_arg */ #define reserve_pseudo_access (vu_access_fn)vu_bad_arg #define reserve_pseudo_chdir (vu_chdir_fn)vu_bad_arg #define reserve_pseudo_chmod (vu_chmod_fn)vu_bad_arg #define reserve_pseudo_chown (vu_chown_fn)vu_bad_arg #define reserve_pseudo_chroot (vu_chroot_fn)vu_bad_arg /* #define reserve_pseudo_close (vu_close_fn)vu_bad_arg */ #define reserve_pseudo_closedir (vu_closedir_fn)vu_bad_arg #define reserve_pseudo_fchdir (vu_fchdir_fn)vu_bad_arg #define reserve_pseudo_fchmod (vu_fchmod_fn)vu_bad_arg #define reserve_pseudo_fchown (vu_fchown_fn)vu_bad_arg #define reserve_pseudo_fstat (vu_fstat_fn)vu_bad_arg #define reserve_pseudo_fsync (vu_fsync_fn)vu_bad_arg #define reserve_pseudo_ftruncate (vu_ftruncate_fn)vu_bad_arg #define reserve_pseudo_link (vu_link_fn)vu_bad_arg #define reserve_pseudo_lseek (vu_lseek_fn)vu_bad_arg #define reserve_pseudo_lstat (vu_lstat_fn)vu_bad_arg #define reserve_pseudo_mkdir (vu_mkdir_fn)vu_bad_arg #define reserve_pseudo_open (vu_open_fn)vu_bad_arg #define reserve_pseudo_opendir (vu_opendir_fn)vu_bad_arg #define reserve_pseudo_read (vu_read_fn)vu_bad_arg #define reserve_pseudo_readdir (vu_readdir_fn)vu_bad_arg #define reserve_pseudo_readlink (vu_readlink_fn)vu_bad_arg #define reserve_pseudo_rename (vu_rename_fn)vu_bad_arg #define reserve_pseudo_rmdir (vu_rmdir_fn)vu_bad_arg #define reserve_pseudo_stat (vu_stat_fn)vu_bad_arg #define reserve_pseudo_symlink (vu_symlink_fn)vu_bad_arg #define reserve_pseudo_truncate (vu_truncate_fn)vu_bad_arg #define reserve_pseudo_unlink (vu_unlink_fn)vu_bad_arg #define reserve_pseudo_utime (vu_utime_fn)vu_bad_arg #define reserve_pseudo_write (vu_write_fn)vu_bad_arg #define reserve_pseudo_fcntl (vu_fcntl_fn)vu_bad_arg #define reserve_pseudo_dup (vu_dup_fn)vu_bad_arg #define reserve_pseudo_dup2 (vu_dup2_fn)vu_bad_arg #define reserve_pseudo_move_state (vu_dup2_fn)vu_bad_arg static struct vu_fs_discipline pseudo_fd_functions \ = { VU_FS_DISCIPLINE_INITIALIZERS (reserve_pseudo_) }; /*(c reserv) * int reserv (int * errn, int flags); * * Allocate a file descriptor by opening `"/dev/null"' by using * `vu_open' in the manner descibed by `flags' which may be one of * `O_RDONLY', `O_RDWR' etc. * * (See xref:"vu_open".) */ int reserv (int * errn, int flags) { return vu_open (errn, "/dev/null", flags, 0); } static void init_reserv () { static int initialized = 0; if (!initialized) { /* Is there really a guarantee that descriptors * are densly packed, starting at 0? If not, * this is bogus. */ next_pseudo = sysconf (_SC_OPEN_MAX); if (next_pseudo < 0) panic ("I/O error calling sysconf (_SC_OPEN_MAX);\n"); /* next_pseudo = getdtablesize (); if (next_pseudo < 0) next_pseudo = OPEN_MAX; */ first_pseudo = next_pseudo; initialized = 1; } } /*(c reserv_pseudo) * int reserv_pseudo (int * errn, int flags); * * Reserve a pseudo file descriptor suitable for use with * `vu_set_fd_handler'. A pseudo file descriptor can be used with the * vu file system functions and is guaranteed not to be the same as * any real file descriptor. (see xref:"A Virtual Unix File-System * Interface") */ int reserv_pseudo (int * errn, int flags) { int answer; init_reserv (); if (ar_size (free_reserved_pseudo.void_ptr, lim_use_must_malloc, sizeof (*free_reserved_pseudo.int_ptr))) answer = *(int *)ar_pop (&free_reserved_pseudo.void_ptr, lim_use_must_malloc, sizeof (int)); else answer = ++next_pseudo; vu_set_fd_handler (answer, &pseudo_fd_functions, 0); return answer; } /*(c reserv_pseudo_ge_n) * int reserv_pseudo_ge_n (int * errn, int n, int flags); * * Reserve a pseudo file descriptor greater than or equal to `n' * suitable for use with `vu_set_fd_handler'. A pseudo file * descriptor can be used with the vu file system functions and is * guaranteed not to be the same as any real file descriptor. (see * xref:"A Virtual Unix File-System Interface") * * This function is useful for implementing `vu_fcntl' with a `cmd' * argument `F_DUPFD'. */ int reserv_pseudo_ge_n (int * errn, int n, int flags) { int s; int answer; init_reserv (); if (n < first_pseudo) n = first_pseudo; answer = -1; s = ar_size (free_reserved_pseudo.void_ptr, lim_use_must_malloc, sizeof (*free_reserved_pseudo.int_ptr)); if (s) { int x; for (x = 0; x < s; ++x) if ( (free_reserved_pseudo.int_ptr[x] >= n) && (free_reserved_pseudo.int_ptr[x] < free_reserved_pseudo.int_ptr[s - 1])) { int tmp; tmp = free_reserved_pseudo.int_ptr[x]; free_reserved_pseudo.int_ptr[x] = free_reserved_pseudo.int_ptr[s - 1]; free_reserved_pseudo.int_ptr[s - 1] = tmp; } } if (!s || (free_reserved_pseudo.int_ptr[s - 1] < n)) { while (next_pseudo < n) { *(int *)ar_push (&free_reserved_pseudo.void_ptr, lim_use_must_malloc, sizeof (int)) = next_pseudo; ++next_pseudo; } } return reserv_pseudo (errn, flags); } /* static void * reserve_pseudo_make_closure (void * closure); * * Do nothing. This is the `make_closure' function in the vtable * `pseudo_fd_functions'. */ static void * reserve_pseudo_make_closure (void * closure) { return closure; } /* static void reserve_pseudo_free_closure (void * closure); * * Do nothing. This is the `free_closure' function in the vtable * `pseudo_fd_functions'. */ static void reserve_pseudo_free_closure (void * closure) { } /* static int reserve_pseudo_close (int * errn, int fd, void * closure); * * Close a pseudo-file descriptor. This is the `close' function in * the vtable `pseudo_fd_functions'. */ static int reserve_pseudo_close (int * errn, int fd, void * closure) { *(int *)ar_push (&free_reserved_pseudo.void_ptr, lim_use_must_malloc, sizeof (int)) = fd; return 0; } /*(c unreserv_pseudo) * void unreserv_pseudo (int fd); * * Release a pseudo-descriptor previously allocated by * `reserved_pseudo'. */ void unreserv_pseudo (int fd) { *(int *)ar_push (&free_reserved_pseudo.void_ptr, lim_use_must_malloc, sizeof (int)) = fd; } tla-1.3.5+dfsg/src/hackerlab/vu/vu-utils-vfdbuf.h0000644000175000017500000000112610457621774020322 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:41:40 2001 (vu-utils-vfdbuf.h) */ /* vu-utils-vfdbuf.h - * **************************************************************** * Copyright (C) 2000 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__VU__VU_UTILS_VFDBUF_H #define INCLUDE__VU__VU_UTILS_VFDBUF_H #include "hackerlab/vu/vfdbuf.h" /* automatically generated __STDC__ prototypes */ extern int vfdbuf_next_line (int * errn, t_uchar ** line, long * len, int fd); #endif /* INCLUDE__VU__VU_UTILS_VFDBUF_H */ tla-1.3.5+dfsg/src/hackerlab/vu/safe-vfdbuf.c0000644000175000017500000001367410457621774017456 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:41:40 2001 (safe-vfdbuf.c) */ /* safe-vfdbuf.c - * **************************************************************** * Copyright (C) 2000 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/os/errno-to-string.h" #include "hackerlab/bugs/panic.h" #include "hackerlab/vu/printfmt.h" #include "hackerlab/vu/safe-vfdbuf.h" void safe_buffer_fd (int fd, long bufsize, int flags, int buffer_flags) { int errn; int status; status = vfdbuf_buffer_fd (&errn, fd, bufsize, flags, buffer_flags); if (status < 0) { printfmt (&errn, 2, "Error during call to `vfdbuf_buffer_fd' (%d, %s)\n", errn, errno_to_string (errn)); panic ("I/O error"); } } void safe_set_buffer (int fd, t_uchar * buffer, long bufsize, long read_write_pos, long buffered, int add_zero_byte, void (*free_buffer)(t_uchar * buf, void * closure), void * free_buffer_closure) { int errn; int status; status = vfdbuf_set_buffer (&errn, fd, buffer, bufsize, read_write_pos, buffered, add_zero_byte, free_buffer, free_buffer_closure); if (status < 0) { printfmt (&errn, 2, "Error during call to `vfdbuf_set_buffer' (%d: %s)\n", errn, errno_to_string (errn)); panic ("I/O error"); } } void safe_set_dont_flush (int fd, int setting) { int errn; int status; status = vfdbuf_set_dont_flush (&errn, fd, setting); if (status < 0) { printfmt (&errn, 2, "Error during call to `vfdbuf_set_dont_flush' (%d: %s)\n", errn, errno_to_string (errn)); panic ("I/O error"); } } void safe_unbuffer (int fd) { int errn; int status; status = vfdbuf_unbuffer_fd (&errn, fd); if (status < 0) { printfmt (&errn, 2, "Error during call to `vfdbuf_unbuffer_fd' (%d, %s)\n", errn, errno_to_string (errn)); panic ("I/O error"); } } int safe_is_dont_flush (int fd) { int errn; int status; status = vfdbuf_is_dont_flush (&errn, fd); if (status < 0) { printfmt (&errn, 2, "Error during call to `vfdbuf_is_dont_flush' (%d: %s)\n", errn, errno_to_string (errn)); panic ("I/O error"); } return status; } void safe_set_auto_shift (int fd, int setting) { int errn; int status; status = vfdbuf_set_auto_shift (&errn, fd, setting); if (status < 0) { printfmt (&errn, 2, "Error during call to `vfdbuf_set_auto_shift' (%d: %s)\n", errn, errno_to_string (errn)); panic ("I/O error"); } } int safe_is_auto_shift (int fd) { int errn; int status; status = vfdbuf_is_auto_shift (&errn, fd); if (status < 0) { printfmt (&errn, 2, "Error during call to `vfdbuf_is_auto_shift' (%d: %s)\n", errn, errno_to_string (errn)); panic ("I/O error"); } return status; } void safe_getbuf (t_uchar ** buffer, long * bufsize, t_uchar ** read_write_position, long * buffered, int * has_zero_byte, int fd) { int errn; int status; status = vfdbuf_getbuf (&errn, buffer, bufsize, read_write_position, buffered, has_zero_byte, fd); if (status < 0) { printfmt (&errn, 2, "Error during call to `vfdbuf_getbuf' (%d: %s)\n", errn, errno_to_string (errn)); panic ("I/O error"); } } void safe_takebuf (t_uchar ** bufbase, long * bufsize, t_uchar ** read_write_pos, long * buffered, int * has_zero_byte, int fd, void (*free_buffer)(t_uchar * buf, void * closure), void * free_buffer_closure) { int errn; int status; status = vfdbuf_takebuf (&errn, bufbase, bufsize, read_write_pos, buffered, has_zero_byte, fd, free_buffer, free_buffer_closure); if (status < 0) { printfmt (&errn, 2, "Error during call to `vfdbuf_takebuf' (%d: %s)\n", errn, errno_to_string (errn)); panic ("I/O error"); } } void safe_shift (int fd, long amt) { int errn; int status; status = vfdbuf_shift (&errn, fd, amt); if (status < 0) { printfmt (&errn, 2, "Error during call to `vfdbuf_shift' (%d: %s)\n", errn, errno_to_string (errn)); panic ("I/O error"); } } void safe_advance (int fd, long amt) { int errn; int status; status = vfdbuf_advance (&errn, fd, amt); if (status < 0) { printfmt (&errn, 2, "Error during call to `vfdbuf_advance' (%d: %s)\n", errn, errno_to_string (errn)); panic ("I/O error"); } } void safe_flush (int fd) { int errn; int status; if (!vfdbuf_is_buffered (fd)) return; status = vfdbuf_flush (&errn, fd); if (status < 0) { printfmt (&errn, 2, "Error during call to `vfdbuf_flush' (%d: %s)\n", errn, errno_to_string (errn)); panic ("I/O error"); } } void safe_return (int fd, t_uchar * str, long len) { int errn; int status; status = vfdbuf_return (&errn, fd, str, len); if (status < 0) { printfmt (&errn, 2, "Error during call to `vfdbuf_return' (%d: %s)\n", errn, errno_to_string (errn)); panic ("I/O error"); } } ssize_t safe_more (t_uchar ** buffer, long * bufsize, t_uchar ** read_write_pos, long * buffered, int * has_zero_byte, int fd, long opt_amt) { int errn; int status; status = vfdbuf_more (&errn, buffer, bufsize, read_write_pos, buffered, has_zero_byte, fd, opt_amt); if (status < 0) { printfmt (&errn, 2, "Error during call to `vfdbuf_more' (%d: %s)\n", errn, errno_to_string (errn)); panic ("I/O error"); } return status; } int safe_is_eof (int fd) { int errn; int status; status = vfdbuf_is_eof (&errn, fd); if (status < 0) { printfmt (&errn, 2, "Error during call to `vfdbuf_is_eof' (%d: %s)\n", errn, errno_to_string (errn)); panic ("I/O error"); } return status; } void safe_clear_eof (int fd) { int errn; int status; status = vfdbuf_clear_eof (&errn, fd); if (status < 0) { printfmt (&errn, 2, "Error during call to `vfdbuf_clear_eof' (%d: %s)\n", errn, errno_to_string (errn)); panic ("I/O error"); } } tla-1.3.5+dfsg/src/hackerlab/vu/printfmt-va.c0000644000175000017500000002206310457621774017525 0ustar useruser/* printfmt-va.c - varargs formatted printing * **************************************************************** * Copyright (C) 2000 Thomas Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/os/errno.h" #include "hackerlab/os/stdarg.h" #include "hackerlab/bugs/panic.h" #include "hackerlab/char/char-class.h" #include "hackerlab/char/str.h" #include "hackerlab/mem/mem.h" #include "hackerlab/vu/vu.h" #include "hackerlab/fmt/cvt.h" #include "hackerlab/vu/printfmt.h" #include "hackerlab/vu/printfmt-va.h" /*c * int print_padding (int * errn, int fd, int padding_character, int amt); * * Print `amt' copies of `padding_character' on descriptor `fd'. */ static int print_padding (int * errn, int fd, int padding_character, int amt) { static char spaces[] = " "; mem_set ((t_uchar *)spaces, padding_character, sizeof (spaces)); while (amt > sizeof (spaces) - 1) { if (0 > vu_write_retry (errn, fd, spaces, sizeof (spaces) - 1)) return -1; amt -= sizeof (spaces) - 1; } if (0 > vu_write_retry (errn, fd, spaces, amt)) return -1; return 0; } /*c * int print_zeros (int * errn, int fd, int amt); * * Print `amt' zeros ("0") on descriptor fd. */ static int print_zeros (int * errn, int fd, int amt) { static char spaces[] = "0000000000000000"; while (amt > sizeof (spaces) - 1) { if (0 > vu_write_retry (errn, fd, spaces, sizeof (spaces) - 1)) return -1; amt -= sizeof (spaces) - 1; } if (0 > vu_write_retry (errn, fd, spaces, amt)) return -1; return 0; } int printfmt_va_list (int * errn, int fd, const t_uchar * fmt, va_list ap) { int amt; int wrote; t_uchar cbuf[2]; t_uchar nbuf[64]; wrote = 0; while (1) { switch (*fmt) { case 0: return wrote; default: { const t_uchar * end; end = str_chr_index (fmt, '%'); if (!end) end = fmt + str_length (fmt); amt = vu_write_retry (errn, fd, fmt, end - fmt); if (amt < 0) return -1; wrote += amt; fmt = end; break; } case '%': { ++fmt; if (*fmt == '%') { amt = vu_write_retry (errn, fd, fmt, 1); if (amt < 0) return -1; wrote += 1; ++fmt; } else { int len; int padding; int padding_character; int leave_blank; int alternate_form; int left_adjusted; int print_sign; int field_width; int precision; int is_short; int is_long; int is_long_double; long arg_long; unsigned long arg_ulong; t_uchar * arg_str; void * arg_ptr; int * arg_iptr; short * arg_sptr; long * arg_lptr; padding_character = ' '; leave_blank = 0; alternate_form = 0; left_adjusted = 0; print_sign = 0; field_width = -1; precision = -1; is_short = 0; is_long = 0; is_long_double = 1; while (1) { switch (*fmt) { default: goto get_conversion_specifier; case '&': padding_character = va_arg (ap, int); ++fmt; break; case ' ': leave_blank = 1; ++fmt; break; case '#': alternate_form = 1; ++fmt; break; case '0': padding_character = '0'; ++fmt; break; case '-': left_adjusted = 1; ++fmt; break; case '+': print_sign = 1; ++fmt; break; case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': field_width = 0; while (char_is_digit (*fmt)) { field_width = field_width * 10 + (*fmt - '0'); ++fmt; } break; case '*': field_width = va_arg (ap, int); ++fmt; break; case '.': precision = 0; ++fmt; if (*fmt == '*') { precision = va_arg (ap, int); ++fmt; break; } while (char_is_digit (*fmt)) { precision = precision * 10 + (*fmt - '0'); ++fmt; } break; case 'h': is_short = 1; ++fmt; break; case 'l': is_long = 1; ++fmt; break; case 'L': is_long_double = 1; ++fmt; break; } } get_conversion_specifier: switch (*fmt) { default: if (errn) *errn = EINVAL; return -1; case 'd': if (!is_long) arg_long = (long)va_arg (ap, int); else arg_long = va_arg (ap, long); if (arg_long >= 0) cvt_ulong_to_decimal (nbuf, (unsigned long)arg_long); else { nbuf[0] = '-'; cvt_ulong_to_decimal (nbuf + 1, (unsigned long)-arg_long); } goto integer_common; case 'o': if (!is_long) arg_ulong = (unsigned long)va_arg (ap, unsigned int); else arg_ulong = va_arg (ap, unsigned long); cvt_ulong_to_octal (nbuf, arg_ulong); if (alternate_form && arg_ulong) { mem_move (nbuf + 1, nbuf, str_length (nbuf) + 1); nbuf[0] = '0'; } goto integer_common; case 'u': if (!is_long) arg_ulong = (unsigned long)va_arg (ap, unsigned int); else arg_ulong = va_arg (ap, unsigned long); cvt_ulong_to_decimal (nbuf, arg_ulong); goto integer_common; case 'X': if (!is_long) arg_ulong = (unsigned long)va_arg (ap, unsigned int); else arg_ulong = va_arg (ap, unsigned long); cvt_ulong_to_HEX (nbuf, arg_ulong); goto integer_common; case 'x': if (!is_long) arg_ulong = (unsigned long)va_arg (ap, unsigned int); else arg_ulong = va_arg (ap, unsigned long); x_common: cvt_ulong_to_hex (nbuf, arg_ulong); if (alternate_form && arg_ulong) { mem_move (nbuf + 2, nbuf, str_length (nbuf) + 1); nbuf[0] = '0'; if (*fmt == 'X') nbuf[1] = 'X'; else nbuf[1] = 'x'; } goto integer_common; integer_common: { int has_sign; int zeros; len = str_length (nbuf); has_sign = (nbuf[0] == '-'); zeros = 0; if (precision > (len - has_sign)) zeros = precision - (len - has_sign); if (print_sign) { if (!has_sign) { mem_move (nbuf + 1, nbuf, len + 1); nbuf[0] = '+'; has_sign = 1; len += 1; } } if (field_width > len + zeros) padding = field_width - (len + zeros); else padding = 0; if (!left_adjusted && padding) { if (0 > print_padding (errn, fd, padding_character, padding)) return -1; wrote += padding; } if (zeros) { if (has_sign) { if (0 > vu_write_retry (errn, fd, nbuf, 1)) return -1; wrote += 1; mem_move (nbuf, nbuf + 1, len); len -= 1; } if ( (char_to_lower (*fmt) == 'x') && (nbuf[0] == '0') && (char_to_lower (nbuf[1]) == 'x')) { if (0 > vu_write_retry (errn, fd, nbuf, 2)) return -1; wrote += 2; mem_move (nbuf, nbuf + 2, len - 1); len -= 2; } if (0 > print_zeros (errn, fd, zeros)) return -1; wrote += zeros; } if (0 > vu_write_retry (errn, fd, nbuf, len)) return -1; wrote += len; if (left_adjusted && padding) { if (0 > print_padding (errn, fd, padding_character, padding)) return -1; wrote += padding; } break; } case 'e': panic ("floating point formatted output not supported"); case 'E': panic ("floating point formatted output not supported"); case 'f': panic ("floating point formatted output not supported"); case 'g': panic ("floating point formatted output not supported"); case 'c': { cbuf[0] = (t_uchar)va_arg (ap, int); cbuf[1] = 0; arg_str = cbuf; len = 1; goto str_known_length; } case 's': { arg_str = va_arg (ap, t_uchar *); if (!arg_str) arg_str = "(null)"; if (precision < 0) len = str_length (arg_str); else { len = 0; while ((len < precision) && arg_str[len]) ++len; } str_known_length: if (field_width > len) padding = field_width - len; else padding = 0; if (!left_adjusted && padding) { if (0 > print_padding (errn, fd, padding_character, padding)) return -1; wrote += padding; } if (0 > vu_write_retry (errn, fd, arg_str, len)) return -1; wrote += len; if (left_adjusted && padding) { if (0 > print_padding (errn, fd, padding_character, padding)) return -1; wrote += padding; } break; } case 'p': arg_ptr = va_arg (ap, void *); arg_ulong = (unsigned long) arg_ptr; alternate_form = 1; goto x_common; case 'n': if (is_short) { arg_sptr = va_arg (ap, short *); *arg_sptr = wrote; } else if (is_long) { arg_lptr = va_arg (ap, long *); *arg_lptr = wrote; } else { arg_iptr = va_arg (ap, int *); *arg_iptr = wrote; } break; } ++fmt; } break; } } } return 0; } tla-1.3.5+dfsg/src/hackerlab/vu/vu-bad-arg.c0000644000175000017500000000171010457621774017177 0ustar useruser/* vu-bad-arg.c - the EINVAL file system * **************************************************************** * Copyright (C) 1999, 2000 Thomas Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/os/errno.h" #include "hackerlab/vu/vu-bad-arg.h" /************************************************************************ *(h0 "A VU Handler that Always Returns an Error") * */ /*(c vu_bad_arg) * int vu_bad_arg (int * errn, ...); * * Return -1 and set `*errn' to `EINVAL'. * * This function is useful when implementing VU handler vtables in * which not every VU function is supported. */ int vu_bad_arg (int * errn, ...) { if (errn) *errn = EINVAL; return -1; } #define VU_FS_NAME_BAD_ARG(name, prefix, middle, suffix, ret, proto) ((ret(*)proto)vu_bad_arg), struct vu_fs_discipline _vu_bad_arg_functions \ = { VU_MAP_FS_NAMES (_BAD_ARG, , , , ) }; tla-1.3.5+dfsg/src/hackerlab/vu/vu-sys.h0000644000175000017500000001160010457621774016524 0ustar useruser/* vu-sys.h - decls for direct VU functions * **************************************************************** * Copyright (C) 1999, 2000 Thomas Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__VU__VU_SYS_H #define INCLUDE__VU__VU_SYS_H #include "hackerlab/vu/vu.h" /**************************************************************** * vu_system_fs_vtable * * All functions perform ordinary system calls. */ extern struct vu_fs_discipline _vu_system_fs_vtable; /* automatically generated __STDC__ prototypes */ extern void * vu_sys_make_closure (void * closure); extern void vu_sys_free_closure (void * closure); extern int vu_sys_access (int * errn, const char * path, int mode, void * closure); extern int vu_sys_chdir (int * errn, const char * path, void * closure); extern int vu_sys_chmod (int * errn, const char * path, int mode, void * closure); extern int vu_sys_chown (int * errn, const char * path, int owner, int group, void * closure); extern int vu_sys_chroot (int * errn, const char * path, void * closure); extern int vu_sys_closedir (int * errn, DIR * dir, void * closure); extern int vu_sys_close (int * errn, int fd, void * closure); extern int vu_sys_fchdir (int * errn, int fd, void * closure); extern int vu_sys_fchmod (int * errn, int fd, int mode, void * closure); extern int vu_sys_fchown (int * errn, int fd, int owner, int group, void * closure); extern int vu_sys_fstat (int * errn, int fd, struct stat * buf, void * closure); extern int vu_sys_fsync (int * errn, int fd, void * closure); extern int vu_sys_ftruncate (int * errn, int fd, off_t where, void * closure); extern int vu_sys_link (int * errn, const char * from, const char * to, void * closure); extern off_t vu_sys_lseek (int * errn, int fd, off_t offset, int whence, void * closure); extern int vu_sys_lstat (int * errn, const char * path, struct stat * buf, void * closure); extern int vu_sys_mkdir (int * errn, const char * path, int mode, void * closure); extern int vu_sys_open (int * errn, const char * path, int flags, int mode, void * closure); extern int vu_sys_opendir (int * errn, DIR ** retv, const char * path, void * closure); extern ssize_t vu_sys_read (int * errn, int fd, char * buf, size_t count, void * closure); extern int vu_sys_readdir (int * errn, struct alloc_limits * limits, char ** file_ret, DIR * dir, void * closure); extern int vu_sys_readlink (int * errn, const char * path, char * buf, int bufsize, void * closure); extern int vu_sys_rename (int * errn, const char * from, const char * to, void * closure); extern int vu_sys_rmdir (int * errn, const char * path, void * closure); extern int vu_sys_stat (int * errn, const char * path, struct stat * buf, void * closure); extern int vu_sys_symlink (int * errn, const char * from, const char * to, void * closure); extern int vu_sys_truncate (int * errn, const char * path, off_t where, void * closure); extern int vu_sys_unlink (int * errn, const char * path, void * closure); extern int vu_sys_utime (int * errn, const char * path, struct utimbuf * times, void * closure); extern ssize_t vu_sys_write (int * errn, int fd, const char * buf, size_t count, void * closure); extern int vu_sys_fcntl (int * errn, int fd, int cmd, long arg, void * closure); extern int vu_sys_dup (int * errn, int fd, void * closure); extern int vu_sys_dup2 (int * errn, int fd, int newfd, void * closure); extern int vu_sys_move_state (int * errn, int fd, int newfd, void * closure); #endif /* INCLUDE__VU__VU_SYS_H */ tla-1.3.5+dfsg/src/hackerlab/vu/vfdbuf.h0000644000175000017500000001320210457621774016532 0ustar useruser/* vfdbuf.h - VU buffered I/O decls * **************************************************************** * Copyright (C) 1998, 2000 Thomas Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__VU__VFDBUF_H #define INCLUDE__VU__VFDBUF_H #include "hackerlab/vu/vu.h" extern struct vu_fs_discipline vfdbuf_vtable; enum vfdbuf_buffer_flags { vfdbuf_add_zero_byte = 1, vfdbuf_auto_shift = 2 }; /* automatically generated __STDC__ prototypes */ extern void vfdbuf_flush_all(void); extern int vfdbuf_buffer_fd (int * errn, int fd, long bufsize, int flags, int buffer_flags); extern int vfdbuf_set_buffer (int * errn, int fd, t_uchar * buffer, long bufsize, long read_write_pos, long buffered, int add_zero_byte, void (*free_buffer)(t_uchar * buf, void * closure), void * free_buffer_closure); extern int vfdbuf_unbuffer_fd (int * errn, int fd); extern int vfdbuf_is_buffered (int fd); extern int vfdbuf_set_dont_flush (int * errn, int fd, int setting); extern int vfdbuf_is_dont_flush (int * errn, int fd); extern int vfdbuf_set_auto_shift (int * errn, int fd, int setting); extern int vfdbuf_is_auto_shift (int * errn, int fd); extern int vfdbuf_getbuf (int * errn, t_uchar ** buffer, long * bufsize, t_uchar ** read_write_position, long * buffered, int * has_zero_byte, int fd); extern int vfdbuf_takebuf (int * errn, t_uchar ** bufbase, long * bufsize, t_uchar ** read_write_pos, long * buffered, int * has_zero_byte, int fd, void (*free_buffer)(t_uchar * buf, void * closure), void * free_buffer_closure); extern int vfdbuf_shift (int * errn, int fd, long amt); extern int vfdbuf_advance (int * errn, int fd, long amt); extern int vfdbuf_flush (int * errn, int fd); extern int vfdbuf_return (int * errn, int fd, t_uchar * str, long len); extern ssize_t vfdbuf_more (int * errn, t_uchar ** buffer, long * bufsize, t_uchar ** read_write_pos, long * buffered, int * has_zero_byte, int fd, long opt_amt); extern int vfdbuf_is_eof (int * errn, int fd); extern int vfdbuf_clear_eof (int * errn, int fd); extern int vfdbuf_access (int * errn, const char * path, int mode, void * closure); extern int vfdbuf_chdir (int * errn, const char * path, void * closure); extern int vfdbuf_chmod (int * errn, const char * path, int mode, void * closure); extern int vfdbuf_chown (int * errn, const char * path, int owner, int group, void * closure); extern int vfdbuf_chroot (int * errn, const char * path, void * closure); extern int vfdbuf_closedir (int * errn, DIR * dir, void * closure); extern int vfdbuf_fchdir (int * errn, int fd, void * closure); extern int vfdbuf_fchmod (int * errn, int fd, int mode, void * closure); extern int vfdbuf_fchown (int * errn, int fd, int owner, int group, void * closure); extern int vfdbuf_fstat (int * errn, int fd, struct stat * buf, void * closure); extern int vfdbuf_link (int * errn, const char * from, const char * to, void * closure); extern int vfdbuf_lstat (int * errn, const char * path, struct stat * buf, void * closure); extern int vfdbuf_mkdir (int * errn, const char * path, int mode, void * closure); extern int vfdbuf_open (int * errn, const char * path, int flags, int mode, void * closure); extern int vfdbuf_opendir (int * errn, DIR ** retv, const char * path, void * closure); extern int vfdbuf_readdir (int * errn, struct alloc_limits * limits, char ** file_ret, DIR * dir, void * closure); extern int vfdbuf_readlink (int * errn, const char * path, char * buf, int bufsize, void * closure); extern int vfdbuf_rename (int * errn, const char * from, const char * to, void * closure); extern int vfdbuf_rmdir (int * errn, const char * path, void * closure); extern int vfdbuf_stat (int * errn, const char * path, struct stat * buf, void * closure); extern int vfdbuf_symlink (int * errn, const char * from, const char * to, void * closure); extern int vfdbuf_truncate (int * errn, const char * path, off_t where, void * closure); extern int vfdbuf_unlink (int * errn, const char * path, void * closure); extern int vfdbuf_utime (int * errn, const char * path, struct utimbuf * times, void * closure); extern int vfdbuf_fcntl (int * errn, int fd, int cmd, long arg, void * closure); extern int vfdbuf_dup (int * errn, int fd, void * closure); extern int vfdbuf_dup2 (int * errn, int fd, int newfd, void * closure); extern int vfdbuf_move_state (int * errn, int fd, int newfd, void * closure); extern int vfdbuf_close (int * errn, int fd, void * closure); extern int vfdbuf_fsync (int * errn, int fd, void * closure); extern int vfdbuf_ftruncate (int * errn, int fd, off_t where, void * closure); extern ssize_t vfdbuf_read (int * errn, int fd, char * buf, size_t count, void * closure); extern ssize_t vfdbuf_write (int * errn, int fd, const char * buf, size_t count, void * closure); extern off_t vfdbuf_lseek (int * errn, int fd, off_t offset, int whence, void * closure); #endif /* INCLUDE__VU__VFDBUF_H */ tla-1.3.5+dfsg/src/hackerlab/vu/vu.c0000644000175000017500000010136410457621774015712 0ustar useruser/* vu.c - virtual unix file-system interface * **************************************************************** * Copyright (C) 1998, 2000 Thomas Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/os/errno.h" #include "hackerlab/bugs/panic.h" #include "hackerlab/char/str.h" #include "hackerlab/arrays/ar.h" #include "hackerlab/vu/reserv.h" #include "hackerlab/vu/vu-bad-arg.h" #include "hackerlab/vu/vu-sys.h" #include "hackerlab/vu/vu.h" /************************************************************************ *(h0 "A Virtual Unix File-System Interface" * :include ("vu/vu.h")) * * VU provides a "virtual file-system interface" -- a way for programs * to redefine the meaning of the basic file-system functions for a * particular file descriptor or for a particular part of the * file-system namespace. When a process defines a virtual * file-system, its definitions apply to that process only. */ /*(menu) */ /**************************************************************** *(h1 "The VU File-System Functions") * * For the purposes of this section, the unix file system interface is * defined as these functions: * * * access chdir chmod chown chroot close closedir fchdir fchmod * fchown fstat fsync ftruncate link lseek lstat mkdir open * opendir read readdir readlink rename rmdir stat * symlink truncate unlink utime write fcntl * dup dup2 * * For each of those functions, there is a corresponding `vu_' function: * * vu_access vu_chdir vu_chmod ... * * The function prototypes of the `vu_' functions are slightly * different from the traditional unix functions. For one thing, all * `vu_' functions accept an output paramter, `errn', as the first * argument: * * int vu_open (int * errn, char * path, int flags, int mode) * * That parameter takes the place of the global variable `errno'. * When an error occurs in a `vu_' function, the error number is * returned in `*errn'. * * The other interface difference is the functions for reading * directories. The `vu_' functions return an integer to indicate * success (0) or failure (-1) and return other information through * output parameters: * * int vu_opendir (int * errn, DIR ** retv, char * path) * int vu_readdir (int * errn, * struct alloc_limits * limits, * char ** file_ret, * DIR * dir) * * Aside from those difference, `vu_' functions can be substituted * freely for their unix counterparts. If no other changes are made, * the modified program will run just the same as the original. * * There are two additional `vu_' functions: * * vu_read_retry vu_write_retry * * which are similar to `read' and `write' but which * automatically restart after a `EINTR' or `EAGAIN'. * */ /**************************************************************** *(h1 "Virtual File-System Functions") * * Programs can provide their own definitions of the `vu_' file-system * functions. These definitions can be made to apply to specific file * descriptors or to a subset of the names in the file-system * namespace of the process. * * To define a set of virtual functions, a program defines functions * having the same return types and almost the same parameters as the * `vu_' virtual functions. The virtual functions take one extra * (final) argument, `void * closure'. For example: * * int my_virtual_open (int * errn, * char * path, * int flags, * int mode, * void * closure) * * All of these functions must be named consistently by adding a * prefix to the root name of the file system functions: * * my_virtual_access my_virtual_chdir my_virtual_chmod ... * * Two additional functions must be provided: * * void * my_virtual_make_closure (void * closure) * void my_virtual_free_closure (void * closure) * * These are explained below. * * Having defined a set of virtual file system functions, a program * must declare a "vtable" for the functions: * * #include "hackerlab/vu/vu.h" * ... * * struct vu_fs_discipline my_fs_vtable * = { VU_FS_DISCIPLINE_INITIALIZERS (my_virtual_) }; * * Note that the prefix used to name virtual functions is used by * the macro `VU_FS_DISCIPLINE_INITIALIZERS' to initialize the vtable. * * Finally, the functions may be applied to either a portion of the * file-system namespace or to a particular descriptor: * * // Applying `my_virtual_' functions to a particular * // descriptor: * // * vu_set_fd_handler (fd, &my_fs_vtable, closure); * * // Applying `my_virtual_' functions to a part * // of the file-system namespace. Note that * // preg is a `regex_t' -- a regular expression * // compiled by `regcomp'. `eflags' is like the * // parameter of the same name to `regexec': * // * vu_push_name_handler (name, doc, preg, eflags, * &my_fs_vtable, closure, 0); * * After those calls, a call to a `vu_' file-system using descriptor * `fd' will do its work by calling a `my_virtual_' function (e.g. * `vu_read' will call `my_virtual_read' to read from `fd'). * * A call to a `vu_' function with a path that matches the regexp * `preg' will also do its work by calling a `my_virtual_' function * (e.g. `vu_open' will call `my_virtual_open' to open a matching * file-name). If a new file is successfully opened this way, VU * automatically calls `vu_set_fd_handler' to establish the same * vtable as the handler for the new descriptor. * * Name-space handlers are kept on a stack and searched from the * top of stack down. Each handler has a name and an array of * strings which are its documentation. */ /**************************************************************** *(h1 "VU Closures") * * When a set of virtual file system functions is installed by * `vu_set_fd_handler' or `vu_push_name_handler' the caller provides a * closure. This closure is an opaque value to `vu' itself. A copy * of the closure is passed as the final parameter to the caller's * virtual functions. For example, to open a file that has matched a * regular expression passed to `vu_push_name_handler', `vu_open' uses * the sequence: * * fd = handler->vtable->open (errn, path, flags, mode, * handler->closure); * * VU doesn't save a copy of the closure directly. Instead, it calls * the `make_closure' function from the vtable to create the value * to save and the `free_closure' function when that copy is being * discarded. `make_closure' is called once when * `vu_push_name_handler' is called, and once each time * `vu_set_fd_handler' is called. `free_closure' is called each time * `vu_close' or `vu_closedir' is called. */ /*(c vu_handler :category type) * struct vu_handler; * * For each VU namespace handler and file-descriptor handler, there * is a `struct vu_handler' that indicates the `vtable' and `closure' * to use for that portion of the file-system. * * struct vu_handler * { * struct vu_fs_discipline * vtable; * void * closure; * }; * */ /**************************************************************** *(h1 "Pseudo-Descriptors") * * The `vu_' functions can operate on file descriptors which are * created by the program itself without the knowledge of the * operating system kernel. The advantage of such descriptors is that * they take up no kernel resources so it is practical to create a * large number of them. * * Pseudo-descriptors which are guaranteed to be distinct from all * kernel descriptors can be created using the function * `reserv_pseudo' and destroyed using the function `unreserv_pseudo'. * For example: * * fd = reserv_pseudo (); * vu_set_fd_handler (fd, &my_fs_vtable, 0); * * and: * * int * my_virtual_close (int * errn, int fd, void * closure) * { * unreserv_pseudo (fd); * return 0; * } * * One way to use a pseudo-descriptor is to combine it with * buffered-I/O to create a file that corresponds to a string in the * program's address space. (See xref:"Buffered File Descriptors".) */ /* static struct _vu_namespace_handler * _vu_fs_handlers; * * A stack (using `ar_push' and `ar_pop') of VU namespace handlers. */ union _t_vu_fs_handlers _vu_fs_handlers = {0}; /* static struct _vu_namespace_handler * _vu_optional_fs_handlers; * * A stack (using `ar_push' and `ar_pop') of optional VU namespace * handlers. */ union _t_vu_fs_handlers _vu_optional_fs_handlers = {0}; /* static struct vu_handler * fd_handlers; * * An array (using `ar_ref') of VU descriptor handlers, indexed by * descriptor numbers. */ static union { struct vu_handler * hp; void *void_ptr; } fd_handlers = {0}; /* static DIR * known_dirs; * * An array (using `ar_ref') of open directories known to VU. * Indexed by descriptor numbers. */ static union { DIR ** DIR_ptr_ptr; void * void_ptr; } known_dirs = {0}; /* static struct vu_handler bad_arg_handler; * * The vu_handler for non-descriptors (descriptor numbers less than 0). */ static struct vu_handler bad_arg_handler = { &_vu_bad_arg_functions, 0 }; /* static struct vu_handler default_handler; * * The vu_handler for file names and descriptors with no other handler. */ static struct vu_handler default_handler = { &_vu_system_fs_vtable, 0 }; /************************************************************************ *(h1 "Establishing VU Handlers") * */ /* Dynamically setting rules for dispatching on file names and * descriptor numbers: */ /*(c vu_push_name_handler) * void vu_push_name_handler (const t_uchar * name, * const t_uchar ** doc, * regex_t * preg, * int eflags, * struct vu_fs_discipline * vtable, * void * closure, * int is_optional); * * `vu_push_name_handler' establishs a vtable of virtual file system * functions for a portion of the file-system namespace. * * `name' is the name for the handler recognized by * `vu_enable_optional_name_handler'. Conventionally, * this name may be used as an option argument to the * command line options `-N' or `--namespace'. For optimal * help message formatting, `name' should be no longer than * 30 characters. A pointer to `name' is kept by this function. * * `doc' is a documentation string for the handler, printed in the * outpupt of `vu_help_for_optional_handlers'. For optimal help * message formatting, each line of `doc' should be no longer than 40 * characters. The last element of the array `doc' must be 0. * A pointer to `doc' is kept by this function. * * File-names matching `preg' are handled by the functions in * `vtable'. Matching is performed by `regexec': * * regexec (preg, path, 0, 0, eflags) * * If a matching file is successfully opened, `vu_open' and * `vu_opendir' call: * * vu_set_fd_handler (new_fd, vtable, closure) * * If `is_optional' is not 0, the file-name handler is recorded * but not enabled. It can be made active by a call to * `vu_enable_optional_name_handler'. */ void vu_push_name_handler (const t_uchar * name, const t_uchar ** doc, regex_t * preg, int eflags, struct vu_fs_discipline * vtable, void * closure, int is_optional) { struct _vu_namespace_handler * name_handler; if (is_optional) name_handler = (struct _vu_namespace_handler *)ar_push ((void **)&_vu_optional_fs_handlers, lim_use_must_malloc, sizeof (*name_handler)); else name_handler = (struct _vu_namespace_handler *)ar_push ((void **)&_vu_fs_handlers, lim_use_must_malloc, sizeof (*name_handler)); name_handler->preg = preg; name_handler->eflags = eflags; name_handler->handler.vtable = vtable; name_handler->handler.closure = vtable->make_closure (closure); name_handler->name = name; name_handler->doc = doc; } /*(c vu_enable_optional_name_handler) * int vu_enable_optional_name_handler (const t_uchar * name); * * Push the named namespace handler on the VU namespace stack. * * The named handler must have previously been established by a * call to `vu_push_optional_name_handler'. * * Return 0 on success, -1 if the named handler was not found. */ int vu_enable_optional_name_handler (const t_uchar * name) { int x; int len; len = ar_size (_vu_optional_fs_handlers.void_ptr, lim_use_must_malloc, sizeof (*_vu_optional_fs_handlers.nhp)); for (x = 0; x < len; ++x) { if (!str_cmp (name, _vu_optional_fs_handlers.nhp[x].name)) { vu_push_name_handler (_vu_optional_fs_handlers.nhp[x].name, _vu_optional_fs_handlers.nhp[x].doc, _vu_optional_fs_handlers.nhp[x].preg, _vu_optional_fs_handlers.nhp[x].eflags, _vu_optional_fs_handlers.nhp[x].handler.vtable, _vu_optional_fs_handlers.nhp[x].handler.closure, 0); return 0; } } return -1; } static void close_vu_files () { int n_dirs; int n_handlers; int x; n_dirs = ar_size (known_dirs.void_ptr, lim_use_must_malloc, sizeof (*known_dirs.DIR_ptr_ptr)); for (x = 0; x < n_dirs; ++x) { int errn; if (known_dirs.DIR_ptr_ptr[x]) vu_closedir (&errn, known_dirs.DIR_ptr_ptr[x]); } n_handlers = ar_size (fd_handlers.void_ptr, lim_use_must_malloc, sizeof (*fd_handlers.hp)); for (x = 0; x < n_handlers; ++x) { if (fd_handlers.hp[x].vtable) { int errn; vu_close (&errn, x); } } } /*(c vu_set_fd_handler) * void vu_set_fd_handler (int fd, * struct vu_fs_discipline * vtable, * void * closure); * * Establish a vtable of virtual file system functions for a * particular descriptor or pseudo-descriptor. * * The handler is automatically removed by `vu_close'. */ void vu_set_fd_handler (int fd, struct vu_fs_discipline * vtable, void * closure) { static int initialized = 0; struct vu_handler * handler; if (!initialized) { if (0 > atexit (close_vu_files)) panic ("error registering atexit function in vu_set_fd_handler"); initialized = 1; } handler = (struct vu_handler *)ar_ref (&fd_handlers.void_ptr, lim_use_must_malloc, fd, sizeof (*handler)); handler->vtable = vtable; handler->closure = vtable->make_closure (closure); } void vu_reinit_after_unexec (void) { if (0 > atexit (close_vu_files)) panic ("error registering atexit function in vu_reinit_after_unexec"); } /*(c vu_move_state) * int vu_move_state (int * errn, int fd, int newfd); * * Move the VU handler for `fd' to `newfd'. * */ int vu_move_state (int * errn, int fd, int newfd) { struct vu_handler * handler; int rv; handler = vu_fd_dispatch (fd); rv = handler->vtable->move_state (errn, fd, newfd, handler->closure); return rv; } /************************************************************************ *(h1 "Looking Up VU Handlers") * * * */ /*(c vu_path_dispatch) * struct vu_handler * vu_path_dispatch (char * path); * * Return the vtable and closure that handle the file-name `path'. * (See xref:"vu_handler".) */ struct vu_handler * vu_path_dispatch (const char * path) { int x; for (x = ar_size (_vu_fs_handlers.void_ptr, lim_use_must_malloc, sizeof (*_vu_fs_handlers.nhp)) - 1; x >= 0; --x) { if (!regexec (_vu_fs_handlers.nhp[x].preg, path, 0, 0, _vu_fs_handlers.nhp[x].eflags)) return &_vu_fs_handlers.nhp[x].handler; } return &default_handler; } /*(c vu_fd_dispatch) * struct vu_handler * vu_fd_dispatch (int fd); * * Return the vtable and closure that handle the descriptor `fd'. * (See xref:"vu_handler".) */ struct vu_handler * vu_fd_dispatch (int fd) { if (fd < 0) return &bad_arg_handler; if ((fd >= ar_size (fd_handlers.void_ptr, lim_use_must_malloc, sizeof (*fd_handlers.hp))) || !fd_handlers.hp[fd].vtable) return &default_handler; return &fd_handlers.hp[fd]; } /*(c vu_dir_dispatch) * struct vu_handler * vu_dir_dispatch (DIR * dir); * * Return the vtable and closure that handle the directory `dir'. * (See xref:"vu_handler".) */ struct vu_handler * vu_dir_dispatch (DIR * dir) { return vu_fd_dispatch (vu_dir_fd (dir)); } /************************************************************************ *(h1 "Stacking Descriptor Handlers") * * The function `vu_fd_dispatch' returns a pointer to a `struct * vu_handler' which in turn holds a pointer to the vtable and closure * used to handle `vu_' functions for a particular descriptor (see * xref:"vu_handler"). * * * Using `vu_fd_dispatch', descriptor handlers can be stacked. For * example, the buffered-I/O functions (`vfdbuf_') work by imposing a * file-system vtable that maintains a buffer but that performs actual * I/O by calling functions from an underlying vtable. To establish * the buffering vtable, the function `vfdbuf_buffer_fd' uses a * sequence of operations like: * * int * vfdbuf_buffer_fd (int * errn, int fd, * long bufsize, int flags, int zero_buffer) * { * struct vu_handler * sub_handler; * * ... * sub_handler = vu_fd_dispatch (fd); * * ... remember that sub_handler does I/O for fd: * bufs[fd].sub_handler = sub_handler; * ... * * ... Establish the buffering functions as the new vtable for * `fd'. * * vu_set_fd_handler (fd, &vfdbuf_vtable, 0); * } * * The `vfdbuf_' file-system functions follow this example: * * int * vfdbuf_fsync (int * errn, int fd, void * closure) * { * ... Empty the buffer. * * if (vfdbuf_flush (errn, fd) < 0) * return -1; * * ... Perform the actual `fsync' using the vtable set aside * in vfdbuf_buffer_fd: * * return bufs[fd].sub_handler.vtable->fsync * (errn, fd, bufs[fd].sub_handler.closure); * } * * Note that when closing a file, it is the responsibility of the * `vfdbuf_' functions to free the closure for the underlying vtable: * * int * vfdbuf_close (int * errn, int fd, void * closure) * { * int errn * int got; * int ign; * * ... * got = bufs[fd].sub_handler.vtable->close * (errn, fd, bufs[fd].sub_handler.closure); * * bufs[fd].sub_handler.vtable->free_closure * (bufs[fd].sub_handler.closure); * ... * } * */ /************************************************************************ *(h1 "The VU File-system Interface") * * These functions approximately mirror the traditional unix system call * interface, but have these improvments: * * 1. Error numbers are not stored in a global, but * in a return value. * * 2. Functions dispatch on file names and descriptors, * permitting these functions to work on objects other than * ordinary files and sockets and to work on ordinary files * and sockets in unusual ways. */ /*(c vu_access) * int vu_access (int * errn, const char * path, int mode); * * See the manual page for `access'. */ int vu_access (int * errn, const char * path, int mode) { struct vu_handler * handler; handler = vu_path_dispatch (path); return handler->vtable->access(errn, path, mode, handler->closure); } /*(c vu_chdir) * int vu_chdir (int * errn, const char * path); * * See the manual page for `chdir'. */ int vu_chdir (int * errn, const char * path) { struct vu_handler * handler; handler = vu_path_dispatch (path); return handler->vtable->chdir(errn, path, handler->closure); } /*(c vu_chmod) * int vu_chmod (int * errn, const char * path, int mode); * * See the manual page for `chmod'. */ int vu_chmod (int * errn, const char * path, int mode) { struct vu_handler * handler; handler = vu_path_dispatch (path); return handler->vtable->chmod(errn, path, mode, handler->closure); } /*(c vu_chown) * int vu_chown (int * errn, const char * path, int owner, int group); * * See the manual page for `chown'. */ int vu_chown (int * errn, const char * path, int owner, int group) { struct vu_handler * handler; handler = vu_path_dispatch (path); return handler->vtable->chown(errn, path, owner, group, handler->closure); } /*(c vu_chroot) * int vu_chroot (int * errn, const char * path); * * See the manual page for `chroot'. */ int vu_chroot (int * errn, const char * path) { struct vu_handler * handler; handler = vu_path_dispatch (path); return handler->vtable->chroot(errn, path, handler->closure); } /*(c vu_close) * int vu_close (int * errn, int fd); * * See the manual page for `close'. */ int vu_close (int * errn, int fd) { struct vu_handler * handler; int status; handler = vu_fd_dispatch (fd); status = handler->vtable->close(errn, fd, handler->closure); if (status >= 0) { if (handler != &default_handler) { if (handler->vtable->free_closure) handler->vtable->free_closure (handler->closure); handler->vtable = 0; handler->closure = 0; } } return status; } /*(c vu_closedir) * int vu_closedir (int * errn, DIR * dir); * * See the manual page for `closedir'. */ int vu_closedir (int * errn, DIR * dir) { struct vu_handler * handler; int fd; int status; handler = vu_dir_dispatch (dir); fd = vu_dir_fd (dir); status = handler->vtable->closedir(errn, dir, handler->closure); if (status >= 0) { DIR ** dirp; dirp = (DIR **)ar_ref (&known_dirs.void_ptr, lim_use_must_malloc, fd, sizeof (DIR *)); *dirp = 0; if (handler != &default_handler) { if (handler->vtable->free_closure) handler->vtable->free_closure (handler->closure); handler->vtable = 0; handler->closure = 0; } unreserv_pseudo (fd); } return status; } /*(c vu_fchdir) * int vu_fchdir (int * errn, int fd); * * See the manual page for `fchdir'. */ int vu_fchdir (int * errn, int fd) { struct vu_handler * handler; handler = vu_fd_dispatch (fd); return handler->vtable->fchdir(errn, fd, handler->closure); } /*(c vu_fchmod) * int vu_fchmod (int * errn, int fd, int mode); * * See the manual page for `fchmod'. */ int vu_fchmod (int * errn, int fd, int mode) { struct vu_handler * handler; handler = vu_fd_dispatch (fd); return handler->vtable->fchmod (errn, fd, mode, handler->closure); } /*(c vu_fchown) * int vu_fchown (int * errn, int fd, int owner, int group); * * See the manual page for `fchown'. */ int vu_fchown (int * errn, int fd, int owner, int group) { struct vu_handler * handler; handler = vu_fd_dispatch (fd); return handler->vtable->fchown (errn, fd, owner, group, handler->closure); } /*(c vu_fstat) * int vu_fstat (int * errn, int fd, struct stat * buf); * * See the manual page for `fstat'. */ int vu_fstat (int * errn, int fd, struct stat * buf) { struct vu_handler * handler; handler = vu_fd_dispatch (fd); return handler->vtable->fstat(errn, fd, buf, handler->closure); } /*(c vu_fsync) * int vu_fsync (int * errn, int fd); * * See the manual page for `fsync'. */ int vu_fsync (int * errn, int fd) { struct vu_handler * handler; handler = vu_fd_dispatch (fd); return handler->vtable->fsync(errn, fd, handler->closure); } /*(c vu_ftruncate) * int vu_ftruncate (int * errn, int fd, off_t where); * * See the manual page for `ftruncate'. */ int vu_ftruncate (int * errn, int fd, off_t where) { struct vu_handler * handler; handler = vu_fd_dispatch (fd); return handler->vtable->ftruncate(errn, fd, where, handler->closure); } /*(c vu_link) * int vu_link (int * errn, const char * from, const char * to); * * See the manual page for `link'. */ int vu_link (int * errn, const char * from, const char * to) { struct vu_handler * handler; struct vu_handler * handler2; handler = vu_path_dispatch (from); handler2 = vu_path_dispatch (to); if ( (handler->vtable->link != handler2->vtable->link) || (handler->closure != handler2->closure)) { if (errn) *errn = EXDEV; return -1; } return handler->vtable->link(errn, from, to, handler->closure); } /*(c vu_lseek) * off_t vu_lseek (int * errn, int fd, off_t offset, int whence); * * See the manual page for `lseek'. */ off_t vu_lseek (int * errn, int fd, off_t offset, int whence) { struct vu_handler * handler; handler = vu_fd_dispatch (fd); return handler->vtable->lseek(errn, fd, offset, whence, handler->closure); } /*(c vu_lstat) * int vu_lstat (int * errn, const char * path, struct stat * buf); * * See the manual page for `lstat'. */ int vu_lstat (int * errn, const char * path, struct stat * buf) { struct vu_handler * handler; handler = vu_path_dispatch (path); return handler->vtable->lstat(errn, path, buf, handler->closure); } /*(c vu_mkdir) * int vu_mkdir (int * errn, const char * path, int mode); * * See the manual page for `mkdir'. */ int vu_mkdir (int * errn, const char * path, int mode) { struct vu_handler * handler; handler = vu_path_dispatch (path); return handler->vtable->mkdir(errn, path, mode, handler->closure); } /*(c vu_open) * int vu_open (int * errn, const char * path, int flags, int mode); * * See the manual page for `open'. */ int vu_open (int * errn, const char * path, int flags, int mode) { struct vu_handler * handler; int fd; handler = vu_path_dispatch (path); fd = handler->vtable->open(errn, path, flags, mode, handler->closure); if (fd >= 0) { if ((ar_size (fd_handlers.void_ptr, lim_use_must_malloc, sizeof (*fd_handlers.hp)) <= fd) || !fd_handlers.hp [fd].vtable) vu_set_fd_handler (fd, handler->vtable, handler->closure); } return fd; } /*(c vu_dir_fd) * int vu_dir_fd (DIR * dir); * * Return the pseudo descriptor associated with DIR. */ int vu_dir_fd (DIR * dir) { int x; x = ar_size (known_dirs.void_ptr, lim_use_must_malloc, sizeof (*known_dirs.DIR_ptr_ptr)) - 1; while (x >= 0) { if (known_dirs.DIR_ptr_ptr[x] == dir) return x; --x; } panic ("attempt to find pseudo fd for unknown dir"); return -1; } /*(c vu_opendir) * int vu_opendir (int * errn, DIR ** retv, const char * path); * * See the manual page for `opendir'. */ int vu_opendir (int * errn, DIR ** retv, const char * path) { struct vu_handler * handler; int fd; int status; handler = vu_path_dispatch (path); status = handler->vtable->opendir(errn, retv, path, handler->closure); if (status >= 0) { fd = reserv_pseudo (errn, 0); if (fd < 0) panic ("unable to reserve pseudo fd in vu_opendir"); { DIR ** dirp; dirp = (DIR **)ar_ref (&known_dirs.void_ptr, lim_use_must_malloc, fd, sizeof (DIR *)); *dirp = *retv; vu_set_fd_handler (fd, handler->vtable, handler->closure); } } return status; } /*(c vu_read) * ssize_t vu_read (int * errn, int fd, char * buf, size_t count); * * See the manual page for `read'. */ ssize_t vu_read (int * errn, int fd, char * buf, size_t count) { struct vu_handler * handler; handler = vu_fd_dispatch (fd); return handler->vtable->read (errn, fd, buf, count, handler->closure); } /*(c vu_read_retry) * ssize_t vu_read_retry (int * errn, int fd, char * buf, size_t count); * * Use `vu_read' to read from `fd'. Read repeatedly (even if a read * returns early from EINTR or EAGAIN) until `count' characters are * read, or the end-of-file is reached. * * Return the number of characters read or -1 on error. */ ssize_t vu_read_retry (int * errn, int fd, char * buf, size_t count) { ssize_t amt_read; amt_read = 0; while (1) { ssize_t amt; amt = vu_read (errn, fd, buf, count); if (amt < 0) { if ((*errn == EAGAIN) || (*errn == EINTR)) continue; else return amt; } amt_read += amt; if (!amt || (amt == count)) return amt_read; count -= amt; buf += amt; } } /*(c vu_readdir) * int vu_readdir (int * errn, * struct alloc_limits * limits, * char ** file_ret, * DIR * dir); * * See the manual page for `readdir'. * * Note that in `vu', the file name is returned in `*file_ret' * and is dynamically allocated using `limits'. It is up to the * caller to free the file name. */ int vu_readdir (int * errn, struct alloc_limits * limits, char ** file_ret, DIR * dir) { struct vu_handler * handler; handler = vu_dir_dispatch (dir); return handler->vtable->readdir(errn, limits, file_ret, dir, handler->closure); } /*(c vu_readlink) * int vu_readlink (int * errn, const char * path, char * buf, int bufsize); * * See the manual page for `readlink'. */ int vu_readlink (int * errn, const char * path, char * buf, int bufsize) { struct vu_handler * handler; handler = vu_path_dispatch (path); return handler->vtable->readlink(errn, path, buf, bufsize, handler->closure); } /*(c vu_rename) * int vu_rename (int * errn, const char * from, const char * to); * * See the manual page for `rename'. */ int vu_rename (int * errn, const char * from, const char * to) { struct vu_handler * handler; struct vu_handler * handler2; handler = vu_path_dispatch (from); handler2 = vu_path_dispatch (to); if ( (handler->vtable->rename != handler2->vtable->rename) || (handler->closure != handler2->closure)) { if (errn) *errn = EXDEV; return -1; } return handler->vtable->rename(errn, from, to, handler->closure); } /*(c vu_rmdir) * int vu_rmdir (int * errn, const char * path); * * See the manual page for `rmdir'. */ int vu_rmdir (int * errn, const char * path) { struct vu_handler * handler; handler = vu_path_dispatch (path); return handler->vtable->rmdir(errn, path, handler->closure); } /*(c vu_stat) * int vu_stat (int * errn, const char * path, struct stat * buf); * * See the manual page for `stat'. */ int vu_stat (int * errn, const char * path, struct stat * buf) { struct vu_handler * handler; handler = vu_path_dispatch (path); return handler->vtable->stat(errn, path, buf, handler->closure); } /*(c vu_symlink) * int vu_symlink (int * errn, const char * from, const char * to); * * See the manual page for `symlink'. */ int vu_symlink (int * errn, const char * from, const char * to) { struct vu_handler * handler; struct vu_handler * handler2; handler = vu_path_dispatch (from); handler2 = vu_path_dispatch (to); if ( (handler->vtable->symlink != handler2->vtable->symlink) || (handler->closure != handler2->closure)) { if (errn) *errn = EXDEV; return -1; } return handler->vtable->symlink(errn, from, to, handler->closure); } /*(c vu_truncate) * int vu_truncate (int * errn, const char * path, off_t where); * * See the manual page for `truncate'. */ int vu_truncate (int * errn, const char * path, off_t where) { struct vu_handler * handler; handler = vu_path_dispatch (path); return handler->vtable->truncate(errn, path, where, handler->closure); } /*(c vu_unlink) * int vu_unlink (int * errn, const char * path); * * See the manual page for `unlink'. */ int vu_unlink (int * errn, const char * path) { struct vu_handler * handler; handler = vu_path_dispatch (path); return handler->vtable->unlink(errn, path, handler->closure); } /*(c vu_utime) * int vu_utime (int * errn, const char * path, struct utimbuf *times); * * See the manual page for `utime'. */ int vu_utime (int * errn, const char * path, struct utimbuf * times) { struct vu_handler * handler; handler = vu_path_dispatch (path); return handler->vtable->utime (errn, path, times, handler->closure); } /*(c vu_write) * ssize_t vu_write (int * errn, int fd, const char * buf, size_t count); * * See the manual page for `write'. */ ssize_t vu_write (int * errn, int fd, const char * buf, size_t count) { struct vu_handler * handler; handler = vu_fd_dispatch (fd); return handler->vtable->write(errn, fd, buf, count, handler->closure); } /*(c vu_write_retry) * ssize_t vu_write_retry (int * errn, int fd, const char * buf, size_t count); * * Use `vu_write' to write to `fd'. Write repeatedly (even if a write * returns early from EINTR or EAGAIN) until `count' characters are * written. * * Return the number of characters written or -1 on error. */ ssize_t vu_write_retry (int * errn, int fd, const char * buf, size_t count) { size_t orig_count; orig_count = count; while (1) { ssize_t amt; amt = vu_write (errn, fd, buf, count); if (amt < 0) { if ((*errn == EAGAIN) || (*errn == EINTR)) continue; else return amt; } else if (amt == count) return orig_count; else { count -= amt; buf += amt; } } } /*(c vu_fcntl) * int vu_fcntl (int * errn, int fd, int cmd, long arg); * * See the manual page for `fcntl'. */ int vu_fcntl (int * errn, int fd, int cmd, long arg) { struct vu_handler * handler; handler = vu_fd_dispatch (fd); return handler->vtable->fcntl(errn, fd, cmd, arg, handler->closure); } /*(c vu_dup) * int vu_dup (int * errn, int fd); * * See the manual page for `dup'. */ int vu_dup (int * errn, int fd) { struct vu_handler * handler; int new_fd; handler = vu_fd_dispatch (fd); new_fd = handler->vtable->dup(errn, fd, handler->closure); return new_fd; } /*(c vu_dup2) * int vu_dup2 (int * errn, int fd, int newfd); * * See the manual page for `dup2'. */ int vu_dup2 (int * errn, int fd, int newfd) { struct vu_handler * handler; int new_fd; handler = vu_fd_dispatch (fd); new_fd = handler->vtable->dup2(errn, fd, newfd, handler->closure); return new_fd; } tla-1.3.5+dfsg/src/hackerlab/vu/safe-printfmt.c0000644000175000017500000000225110457621774020032 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:41:40 2001 (safe-printfmt.c) */ /* safe-printfmt.c - * **************************************************************** * Copyright (C) 2000 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/os/errno-to-string.h" #include "hackerlab/bugs/panic.h" #include "hackerlab/vu/safe-printfmt.h" /*(c safe_printfmt) * void safe_printfmt (int fd, const char * fmt, ...); * * See xref:"printfmt". */ void safe_printfmt (int fd, const char * fmt, ...) { int errn; int answer; va_list ap; va_start (ap, fmt); answer = printfmt_va_list (&errn, fd, fmt, ap); va_end (ap); if (0 > answer) { printfmt (&errn, 2, "Error in `printfmt' (%s)\n", errno_to_string (errn)); panic ("I/O error"); } } void safe_printfmt_va_list (int fd, const char * fmt, va_list ap) { int errn; int answer; answer = printfmt_va_list (&errn, fd, fmt, ap); if (0 > answer) { printfmt (&errn, 2, "Error in `printfmt_va_list' (%s)\n", errno_to_string (errn)); panic ("I/O error"); } } tla-1.3.5+dfsg/src/hackerlab/vu/vu-utils-vfdbuf.c0000644000175000017500000000424410457621774020321 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:41:41 2001 (vu-utils-vfdbuf.c) */ /* vu-utils-vfdbuf.c - * **************************************************************** * Copyright (C) 2000 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/os/errno.h" #include "hackerlab/mem/must-malloc.h" #include "hackerlab/char/str.h" #include "hackerlab/vu/vu-utils-vfdbuf.h" /*(c vfdbuf_next_line) * int vfdbuf_next_line (int * errn, t_uchar ** line, long * len, int fd); * * Return the next (newline terminated) line of input from `fd'. * * `fd' should be a buffered file. If it is not, a buffer is imposed * using `vfdbuf_buffer_fd', passing the `vfdbuf_auto_shift' flag. * * If no error occurs, return 0. The line is returned in `*line' and * its length in `*len'. The line is stored in the buffer for `fd' and * may be overwritten by subsequent calls to this or other I/O functions * operating on `fd'. * * If an error occurs, return -1 and fill `*errn'. * * The newline character is included in the line returned. If the * file ends with a non-empty line that is not terminated by `\n', the * partial line (not ending in newline) is returned. * * Because it does not copy input from the file's buffer to other * storage, this function can be used efficiently process an input * file, one line at a time. */ int vfdbuf_next_line (int * errn, t_uchar ** line, long * len, int fd) { long buffered; t_uchar * eol; if (!vfdbuf_is_buffered (fd)) { if (vfdbuf_buffer_fd (errn, fd, 0, O_RDONLY, vfdbuf_auto_shift)) return -1; } if (vfdbuf_getbuf (errn, 0, 0, line, &buffered, 0, fd)) return -1; while (1) { eol = str_chr_index_n (*line, (size_t)buffered, '\n'); if (!eol && vfdbuf_is_eof (errn, fd)) { if (!buffered) { *line = 0; *len = 0; return 0; } else eol = *line + buffered - 1; } if (eol) { *len = (eol - *line) + 1; vfdbuf_advance (errn, fd, *len); return 0; } if ( (0 > vfdbuf_more (errn, 0, 0, line, &buffered, 0, fd, 0)) && (*errn != EINTR)) return -1; } } tla-1.3.5+dfsg/src/hackerlab/vu/safe.c0000644000175000017500000003606510457621774016203 0ustar useruser/* safe.c - error-free I/O routines (panic on error) * **************************************************************** * Copyright (C) 1999, 2000 Thomas Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/os/stdarg.h" #include "hackerlab/os/errno.h" #include "hackerlab/os/errno-to-string.h" #include "hackerlab/bugs/panic.h" #include "hackerlab/vu/vu-utils.h" #include "hackerlab/vu/safe.h" /************************************************************************ *(h0 "An Errorless Front-end to the VU File-system Interface") * * These functions perform I/O but never return errors. If an error * occurs, they print a message and abort the program. * */ /*(c safe_access) * int safe_access (const char * path, int mode); * * See xref:"vu_access". * * If mode is F_OK and the file does not exist, return -1. */ int safe_access (const char * path, int mode) { int errn; int answer; answer = vu_access (&errn, path, mode); if (answer < 0) { if ((errn == ENOENT) && (mode == F_OK)) return -1; printfmt (&errn, 2, "Error during call to `vu_access' for %s (%s)\n", path, errno_to_string (errn)); panic ("I/O error"); } return answer; } /*(c safe_chdir) * int safe_chdir (const char * path); * * See xref:"vu_chdir". */ int safe_chdir (const char * path) { int errn; int answer; answer = vu_chdir (&errn, path); if (answer < 0) { printfmt (&errn, 2, "Error during call to `vu_chdir' for %s (%s)\n", path, errno_to_string (errn)); panic ("I/O error"); } return answer; } /*(c safe_chmod) * int safe_chmod (const char * path, int mode); * * See xref:"vu_chmod". */ int safe_chmod (const char * path, int mode) { int errn; int answer; answer = vu_chmod (&errn, path, mode); if (answer < 0) { printfmt (&errn, 2, "Error during call to `vu_chmod' for %s (%s)\n", path, errno_to_string (errn)); panic ("I/O error"); } return answer; } /*(c safe_chown) * int safe_chown (const char * path, int owner, int group); * * See xref:"vu_chown". */ int safe_chown (const char * path, int owner, int group) { int errn; int answer; answer = vu_chown (&errn, path, owner, group); if (answer < 0) { printfmt (&errn, 2, "Error during call to `vu_chown' for %s (%s)\n", path, errno_to_string (errn)); panic ("I/O error"); } return answer; } /*(c safe_chroot) * int safe_chroot (const char * path); * * See xref:"vu_chroot". */ int safe_chroot (const char * path) { int errn; int answer; answer = vu_chroot (&errn, path); if (answer < 0) { printfmt (&errn, 2, "Error during call to `vu_chroot' for %s (%s)\n", path, errno_to_string (errn)); panic ("I/O error"); } return answer; } /*(c safe_close) * int safe_close (int fd); * * See xref:"vu_close". */ int safe_close (int fd) { int errn; int answer; answer = vu_close (&errn, fd); if (0 > answer) { printfmt (&errn, 2, "Error while closing descriptor %d (%s)\n", fd, errno_to_string (errn)); panic ("I/O error"); } return answer; } /*(c safe_closedir) * int safe_closedir (DIR * dir); * * See xref:"vu_closedir". */ int safe_closedir (DIR * dir) { int errn; int answer; answer = vu_closedir (&errn, dir); if (0 > answer) { printfmt (&errn, 2, "Error while closing directory (%s)\n", errno_to_string (errn)); panic ("I/O error"); } return answer; } /*(c safe_fchdir) * int safe_fchdir (int fd); * * See xref:"vu_fchdir". */ int safe_fchdir (int fd) { int errn; int answer; answer = vu_fchdir (&errn, fd); if (0 > answer) { printfmt (&errn, 2, "Error calling `vu_fchdir' for descriptor %d (%s)\n", fd, errno_to_string (errn)); panic ("I/O error"); } return answer; } /*(c safe_fchmod) * int safe_fchmod (int fd, int mode); * * See xref:"vu_fchmod". */ int safe_fchmod (int fd, int mode) { int errn; int answer; answer = vu_fchmod (&errn, fd, mode); if (0 > answer) { printfmt (&errn, 2, "Error calling `vu_fchmod' for descriptor %d (%s)\n", fd, errno_to_string (errn)); panic ("I/O error"); } return answer; } /*(c safe_fchown) * int safe_fchown (int fd, int owner, int group); * * See xref:"vu_fchown". */ int safe_fchown (int fd, int owner, int group) { int errn; int answer; answer = vu_fchown (&errn, fd, owner, group); if (0 > answer) { printfmt (&errn, 2, "Error calling `vu_fchgrp' for descriptor %d (%s)\n", fd, errno_to_string (errn)); panic ("I/O error"); } return answer; } /*(c safe_fstat) * int safe_fstat (int fd, struct stat * buf); * * See xref:"vu_fstat". */ int safe_fstat (int fd, struct stat * buf) { int errn; int answer; answer = vu_fstat (&errn, fd, buf); if (0 > answer) { printfmt (&errn, 2, "Error calling `vu_fstat' for descriptor %d (%s)\n", fd, errno_to_string (errn)); panic ("I/O error"); } return answer; } /*(c safe_fsync) * int safe_fsync (int fd); * * See xref:"vu_fsync". */ int safe_fsync (int fd) { int errn; int answer; answer = vu_fsync (&errn, fd); if (0 > answer) { printfmt (&errn, 2, "Error calling `vu_fsync' for descriptor %d (%s)\n", fd, errno_to_string (errn)); panic ("I/O error"); } return answer; } /*(c safe_ftruncate) * int safe_ftruncate (int fd, long where); * * See xref:"vu_ftruncate". */ int safe_ftruncate (int fd, long where) { int errn; int answer; answer = vu_ftruncate (&errn, fd, where); if (0 > answer) { printfmt (&errn, 2, "Error calling `vu_ftruncate' for descriptor %d (%s)\n", fd, errno_to_string (errn)); panic ("I/O error"); } return answer; } /*(c safe_link) * int safe_link (const char * from, const char * to); * * See xref:"vu_link". */ int safe_link (const char * from, const char * to) { int errn; int answer; answer = vu_link (&errn, from, to); if (0 > answer) { printfmt (&errn, 2, "Error calling `vu_link' to link \"%s\" to \"%s\" (%s)\n", to, from, errno_to_string (errn)); panic ("I/O error"); } return answer; } /*(c safe_lseek) * long safe_lseek (int fd, long offset, int whence); * * See xref:"vu_lseek". */ long safe_lseek (int fd, long offset, int whence) { int errn; long answer; answer = vu_lseek (&errn, fd, offset, whence); if (0 > answer) { printfmt (&errn, 2, "Error calling `vu_lseek' for descriptor %d, offset %ld, whence=%d (%s)\n", fd, offset, whence, errno_to_string (errn)); panic ("I/O error"); } return answer; } /*(c safe_lstat) * int safe_lstat (const char * path, struct stat * buf); * * See xref:"vu_lstat". */ int safe_lstat (const char * path, struct stat * buf) { int errn; int answer; answer = vu_lstat (&errn, path, buf); if (0 > answer) { printfmt (&errn, 2, "Error calling `vu_lstat' for \"%s\" (%s)\n", path, errno_to_string (errn)); panic ("I/O error"); } return answer; } /*(c safe_mkdir) * int safe_mkdir (const char * path, int mode); * * See xref:"vu_mkdir". */ int safe_mkdir (const char * path, int mode) { int errn; int answer; answer = vu_mkdir (&errn, path, mode); if (0 > answer) { printfmt (&errn, 2, "unable to create directory \"%s\" (%s)\n", path, errno_to_string (errn)); panic ("I/O error"); } return answer; } /*(c safe_open) * int safe_open (const char * path, int flags, int mode); * * See xref:"vu_open". */ int safe_open (const char * path, int flags, int mode) { int errn; int fd; fd = vu_open (&errn, path, flags, mode); if (0 > fd) { printfmt (&errn, 2, "unable to open file \"%s\" (%s)\n", path, errno_to_string (errn)); panic ("I/O error"); } return fd; } /*(c safe_opendir) * int safe_opendir (DIR ** retv, const char * path); * * See xref:"vu_opendir". */ int safe_opendir (DIR ** retv, const char * path) { int errn; int answer; answer = vu_opendir (&errn, retv, path); if (0 > answer) { printfmt (&errn, 2, "unable to open directory \"%s\" (%s)\n", path, errno_to_string (errn)); panic ("I/O error"); } return answer; } /*(c safe_read) * long safe_read (int fd, char * buf, long count); * * See xref:"vu_read". */ long safe_read (int fd, char * buf, long count) { int errn; long answer; answer = vu_read (&errn, fd, buf, count); if (0 > answer) { printfmt (&errn, 2, "Error calling `vu_read' for descriptor %d (%s)\n", fd, errno_to_string (errn)); panic ("I/O error"); } return answer; } /*(c safe_read_retry) * long safe_read_retry (int fd, char * buf, long count); * * See xref:"vu_read_retry". */ long safe_read_retry (int fd, char * buf, long count) { int errn; long answer; answer = vu_read_retry (&errn, fd, buf, count); if (0 > answer) { printfmt (&errn, 2, "Error calling `vu_read_retry' for descriptor %d (%s)\n", fd, errno_to_string (errn)); panic ("I/O error"); } return answer; } /*(c safe_readdir) * int safe_readdir (char ** file_ret, DIR * dir); * * See xref:"vu_readdir". */ int safe_readdir (char ** file_ret, DIR * dir) { int errn; int answer; answer = vu_readdir (&errn, 0, file_ret, dir); if (0 > answer) { if (!errn) *file_ret = 0; else { printfmt (&errn, 2, "unable to read directory (%s)\n", errno_to_string (errn)); panic ("I/O error"); } } return answer; } /*(c safe_readlink) * int safe_readlink (const char * path, char * buf, int bufsize); * * See xref:"vu_readlink". */ int safe_readlink (const char * path, char * buf, int bufsize) { int errn; int answer; answer = vu_readlink (&errn, path, buf, bufsize); if (0 > answer) { printfmt (&errn, 2, "unable to read link \"%s\" (%s)\n", path, errno_to_string (errn)); panic ("I/O error"); } return answer; } /*(c safe_rename) * int safe_rename (const char * from, const char * to); * * See xref:"vu_rename". */ int safe_rename (const char * from, const char * to) { int errn; int answer; answer = vu_rename (&errn, from, to); if (0 > answer) { printfmt (&errn, 2, "unable to rename \"%s\" to \"%s\" (%s)\n", from, to, errno_to_string (errn)); panic ("I/O error"); } return answer; } /*(c safe_rmdir) * int safe_rmdir (const char * path); * * See xref:"vu_rmdir". */ int safe_rmdir (const char * path) { int errn; int answer; answer = vu_rmdir (&errn, path); if (0 > answer) { printfmt (&errn, 2, "unable to rmdir \"%s\" (%s)\n", path, errno_to_string (errn)); panic ("I/O error"); } return answer; } /*(c safe_stat) * int safe_stat (const char * path, struct stat * buf); * * See xref:"vu_stat". */ int safe_stat (const char * path, struct stat * buf) { int errn; int answer; answer = vu_stat (&errn, path, buf); if (0 > answer) { printfmt (&errn, 2, "Error calling `vu_stat' for \"%s\" (%s)\n", path, errno_to_string (errn)); panic ("I/O error"); } return answer; } /*(c safe_symlink) * int safe_symlink (const char * from, const char * to); * * See xref:"vu_symlink". */ int safe_symlink (const char * from, const char * to) { int errn; int answer; answer = vu_symlink (&errn, from, to); if (0 > answer) { printfmt (&errn, 2, "Error calling `vu_symlink' to link \"%s\" to \"%s\" (%s)\n", to, from, errno_to_string (errn)); panic ("I/O error"); } return answer; } /*(c safe_truncate) * int safe_truncate (const char * path, long where); * * See xref:"vu_truncate". */ int safe_truncate (const char * path, long where) { int errn; int answer; answer = vu_truncate (&errn, path, where); if (0 > answer) { printfmt (&errn, 2, "Error calling `vu_truncate' to truncate \"%s\" at %ld (%s)\n", path, where, errno_to_string (errn)); panic ("I/O error"); } return answer; } /*(c safe_unlink) * int safe_unlink (const char * path); * * See xref:"vu_unlink". */ int safe_unlink (const char * path) { int errn; int answer; answer = vu_unlink (&errn, path); if (0 > answer) { printfmt (&errn, 2, "Error calling `vu_unlink' to remove \"%s\" (%s)\n", path, errno_to_string (errn)); panic ("I/O error"); } return answer; } /*(c safe_utime) * int safe_utime (const char * path, struct utimbuf * times); * * See xref:"vu_utime". */ int safe_utime (const char * path, struct utimbuf * times) { int errn; int answer; answer = vu_utime (&errn, path, times); if (0 > answer) { printfmt (&errn, 2, "Error calling `vu_utime' to change timestamps of \"%s\" (%s)\n", path, errno_to_string (errn)); panic ("I/O error"); } return answer; } /*(c safe_write) * long safe_write (int fd, const char * buf, long count); * * See xref:"vu_write". */ long safe_write (int fd, const char * buf, long count) { int errn; long answer; answer = vu_write (&errn, fd, buf, count); if (0 > answer) { printfmt (&errn, 2, "Error calling `vu_write' for descriptor %d (%s)\n", fd, errno_to_string (errn)); panic ("I/O error"); } return answer; } /*(c safe_write_retry) * long safe_write_retry (int fd, const t_uchar * buf, int amt); * * See xref:"vu_write_retry". */ long safe_write_retry (int fd, const t_uchar * buf, int amt) { int errn; long answer; answer = vu_write_retry (&errn, fd, buf, amt); if (0 > answer) { printfmt (&errn, 2, "Error calling `vu_write_retry' for descriptor %d (%s)\n", fd, errno_to_string (errn)); panic ("I/O error"); } return answer; } /*(c safe_fcntl) * int safe_fcntl (int fd, int cmd, long arg); * * See xref:"vu_fcntl". */ int safe_fcntl (int fd, int cmd, long arg) { int errn; int answer; answer = vu_fcntl (&errn, fd, cmd, arg); if (0 > answer) { printfmt (&errn, 2, "Error calling `vu_fcntl' for descriptor %d (%s)\n", fd, errno_to_string (errn)); panic ("I/O error"); } return answer; } /*(c safe_dup) * int safe_dup (int fd); * * See xref:"vu_dup". */ int safe_dup (int fd) { int errn; int answer; answer = vu_dup (&errn, fd); if (0 > answer) { printfmt (&errn, 2, "Error calling `vu_dup' for descriptor %d (%s)\n", fd, errno_to_string (errn)); panic ("I/O error"); } return answer; } /*(c safe_dup2) * int safe_dup2 (int fd, int newfd); * * See xref:"vu_dup2". */ int safe_dup2 (int fd, int newfd) { int errn; int answer; answer = vu_dup2 (&errn, fd, newfd); if (0 > answer) { printfmt (&errn, 2, "Error calling `vu_dup2' to duplicate %d to %d (%s)\n", fd, newfd, errno_to_string (errn)); panic ("I/O error"); } return answer; } /*(c safe_move_state) * int safe_move_state (int fd, int newfd); * * See xref:"vu_move_state". */ int safe_move_state (int fd, int newfd) { int errn; int answer; answer = vu_move_state (&errn, fd, newfd); if (0 > answer) { printfmt (&errn, 2, "Error calling `vu_move_state' to copy VU state for descriptor %d to descriptor %d (%s)\n", fd, newfd, errno_to_string (errn)); panic ("I/O error"); } return answer; } tla-1.3.5+dfsg/src/hackerlab/vu/url-fd.c0000644000175000017500000002456510457621774016460 0ustar useruser/* url-fd.c - the fd: URL file system * **************************************************************** * Copyright (C) 1999, 2000 Thomas Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/os/errno.h" #include "hackerlab/bugs/panic.h" #include "hackerlab/char/str.h" #include "hackerlab/fmt/cvt.h" #include "hackerlab/vu/vu.h" #include "hackerlab/vu/vu-sys.h" #include "hackerlab/vu/url-fd.h" /************************************************************************ *(h0 "A VU Handler for the URL File-Descriptor Scheme") * * These functions provide a VU namespace handler for file-names of * the form: * * fd:N * * where `N' is a non-negative integer. * * Opening such a file, with this namespace handler installed, returns * the indicated file descriptor. */ static struct vu_fs_discipline url_fd_vtable; /* __STDC__ prototypes for static functions */ static void * url_fd_make_closure (void * closure); static void url_fd_free_closure (void * closure); static int url_fd_access (int * errn, const char * path, int mode, void * closure); static int url_fd_chdir (int * errn, const char * path, void * closure); static int url_fd_chmod (int * errn, const char * path, int mode, void * closure); static int url_fd_chown (int * errn, const char * path, int owner, int group, void * closure); static int url_fd_chroot (int * errn, const char * path, void * closure); static int url_fd_close (int * errn, int fd, void * closure); static int url_fd_closedir (int * errn, DIR * dir, void * closure); static int url_fd_fchdir (int * errn, int fd, void * closure); static int url_fd_fchmod (int * errn, int fd, int mode, void * closure); static int url_fd_fchown (int * errn, int fd, int owner, int group, void * closure); static int url_fd_fstat (int * errn, int fd, struct stat * buf, void * closure); static int url_fd_fsync (int * errn, int fd, void * closure); static int url_fd_ftruncate (int * errn, int fd, off_t where, void * closure); static int url_fd_link (int * errn, const char * from, const char * to, void * closure); static off_t url_fd_lseek (int * errn, int fd, off_t offset, int whence, void * closure); static int url_fd_lstat (int * errn, const char * path, struct stat * buf, void * closure); static int url_fd_mkdir (int * errn, const char * path, int mode, void * closure); static int url_fd_open (int * errn, const char * path, int flags, int mode, void * closure); static int url_fd_opendir (int * errn, DIR ** retv, const char * path, void * closure); static ssize_t url_fd_read (int * errn, int fd, char * buf, size_t count, void * closure); static int url_fd_readdir (int * errn, struct alloc_limits * limits, char ** file_ret, DIR * dir, void * closure); static int url_fd_readlink (int * errn, const char * path, char * buf, int bufsize, void * closure); static int url_fd_rename (int * errn, const char * from, const char * to, void * closure); static int url_fd_rmdir (int * errn, const char * path, void * closure); static int url_fd_stat (int * errn, const char * path, struct stat * buf, void * closure); static int url_fd_symlink (int * errn, const char * from, const char * to, void * closure); static int url_fd_truncate (int * errn, const char * path, off_t where, void * closure); static int url_fd_unlink (int * errn, const char * path, void * closure); static int url_fd_utime (int * errn, const char * path, struct utimbuf * times, void * closure); static ssize_t url_fd_write (int * errn, int fd, const char * buf, size_t count, void * closure); static int url_fd_fcntl (int * errn, int fd, int cmd, long arg, void * closure); static int url_fd_dup (int * errn, int fd, void * closure); static int url_fd_dup2 (int * errn, int fd, int newfd, void * closure); static int url_fd_move_state (int * errn, int fd, int newfd, void * closure); /*(c url_fd_push_handler) * void url_fd_push_handler (int is_optional); * * Push a VU namespace handler named "fd" which recognizes file-names * using the regexp: * * ^fd:[0-9]\+ * * It handles file names like: * * fd:N * * where `N' is a non-negative integer. * * Opening such a file, with this namespace handler installed, returns * the indicated file descriptor. * * If the flag `is_optional' is 0, the namespace handler is simply * installed. If it is not 0, the handler is registered under the * name `"fd"', but not installed. * * (See xref:"vu_enable_optional_name_handler".) */ void url_fd_push_handler (int is_optional) { static int initialized = 0; static regex_t url_fd_regex; static const t_uchar * doc[] = { "fd:N", "File descriptor N.", 0 }; if (!initialized) { if (0 > regcomp (&url_fd_regex, "^fd:[0-9]\\+", 0)) panic ("unable to compile regexp"); initialized = 1; } vu_push_name_handler ("fd", doc, &url_fd_regex, 0, &url_fd_vtable, 0, is_optional); } /*(c url_fd_to_fd) * int url_fd_to_fd (int * errn, char * path); * * Return the file descriptor number named by a filename of the form: * * fd:N * * where `N' is a non-negative integer. * * If the filename can not be parsed, -1 is returned and `*errn' is * set. */ int url_fd_to_fd (int * errn, const char * path) { char * fd_spec; int fd; fd_spec = str_chr_index (path, ':'); if (!fd_spec) { if (errn) *errn = ENOENT; return -1; } ++fd_spec; if (0 > cvt_decimal_to_int (errn, &fd, fd_spec, str_length (fd_spec))) return -1; return fd; } static void * url_fd_make_closure (void * closure) { return 0; } static void url_fd_free_closure (void * closure) { } static int url_fd_access (int * errn, const char * path, int mode, void * closure) { if (errn) *errn = EINVAL; return -1; } static int url_fd_chdir (int * errn, const char * path, void * closure) { int fd; fd = url_fd_to_fd (errn, path); if (0 > fd) return -1; return vu_sys_fchdir (errn, fd, 0); } static int url_fd_chmod (int * errn, const char * path, int mode, void * closure) { int fd; fd = url_fd_to_fd (errn, path); if (0 > fd) return -1; return vu_sys_fchmod (errn, fd, mode, 0); } static int url_fd_chown (int * errn, const char * path, int owner, int group, void * closure) { int fd; fd = url_fd_to_fd (errn, path); if (0 > fd) return -1; return vu_sys_fchown (errn, fd, owner, group, 0); } static int url_fd_chroot (int * errn, const char * path, void * closure) { if (errn) *errn = EINVAL; return -1; } static int url_fd_close (int * errn, int fd, void * closure) { return vu_sys_close (errn, fd, 0); } static int url_fd_closedir (int * errn, DIR * dir, void * closure) { if (errn) *errn = EINVAL; return -1; } static int url_fd_fchdir (int * errn, int fd, void * closure) { return vu_sys_fchdir (errn, fd, 0); } static int url_fd_fchmod (int * errn, int fd, int mode, void * closure) { return vu_sys_fchmod (errn, fd, mode, 0); } static int url_fd_fchown (int * errn, int fd, int owner, int group, void * closure) { return vu_sys_fchown (errn, fd, owner, group, 0); } static int url_fd_fstat (int * errn, int fd, struct stat * buf, void * closure) { return vu_sys_fstat (errn, fd, buf, 0); } static int url_fd_fsync (int * errn, int fd, void * closure) { return vu_sys_fsync (errn, fd, 0); } static int url_fd_ftruncate (int * errn, int fd, off_t where, void * closure) { return vu_sys_ftruncate (errn, fd, where, 0); } static int url_fd_link (int * errn, const char * from, const char * to, void * closure) { if (errn) *errn = EINVAL; return -1; } static off_t url_fd_lseek (int * errn, int fd, off_t offset, int whence, void * closure) { return vu_sys_lseek (errn, fd, offset, whence, 0); } static int url_fd_lstat (int * errn, const char * path, struct stat * buf, void * closure) { return url_fd_stat (errn, path, buf, closure); } static int url_fd_mkdir (int * errn, const char * path, int mode, void * closure) { if (errn) *errn = EINVAL; return -1; } static int url_fd_open (int * errn, const char * path, int flags, int mode, void * closure) { return url_fd_to_fd (errn, path); } static int url_fd_opendir (int * errn, DIR ** retv, const char * path, void * closure) { if (errn) *errn = EINVAL; return -1; } static ssize_t url_fd_read (int * errn, int fd, char * buf, size_t count, void * closure) { return vu_sys_read (errn, fd, buf, count, 0); } static int url_fd_readdir (int * errn, struct alloc_limits * limits, char ** file_ret, DIR * dir, void * closure) { if (errn) *errn = EINVAL; return -1; } static int url_fd_readlink (int * errn, const char * path, char * buf, int bufsize, void * closure) { if (errn) *errn = EINVAL; return -1; } static int url_fd_rename (int * errn, const char * from, const char * to, void * closure) { if (errn) *errn = EINVAL; return -1; } static int url_fd_rmdir (int * errn, const char * path, void * closure) { if (errn) *errn = EINVAL; return -1; } static int url_fd_stat (int * errn, const char * path, struct stat * buf, void * closure) { int fd; fd = url_fd_to_fd (errn, path); if (0 > fd) return -1; return vu_sys_fstat (errn, fd, buf, 0); } static int url_fd_symlink (int * errn, const char * from, const char * to, void * closure) { if (errn) *errn = EINVAL; return -1; } static int url_fd_truncate (int * errn, const char * path, off_t where, void * closure) { int fd; fd = url_fd_to_fd (errn, path); if (0 > fd) return -1; return vu_sys_ftruncate (errn, fd, where, 0); } static int url_fd_unlink (int * errn, const char * path, void * closure) { if (errn) *errn = EINVAL; return -1; } static int url_fd_utime (int * errn, const char * path, struct utimbuf * times, void * closure) { if (errn) *errn = EINVAL; return -1; } static ssize_t url_fd_write (int * errn, int fd, const char * buf, size_t count, void * closure) { return vu_sys_write (errn, fd, buf, count, 0); } static int url_fd_fcntl (int * errn, int fd, int cmd, long arg, void * closure) { return vu_sys_fcntl (errn, fd, cmd, arg, 0); } static int url_fd_dup (int * errn, int fd, void * closure) { return vu_sys_dup (errn, fd, 0); } static int url_fd_dup2 (int * errn, int fd, int newfd, void * closure) { return vu_sys_dup2 (errn, fd, newfd, 0); } static int url_fd_move_state (int * errn, int fd, int newfd, void * closure) { return vu_sys_move_state (errn, fd, newfd, 0); } static struct vu_fs_discipline url_fd_vtable = { VU_FS_DISCIPLINE_INITIALIZERS (url_fd_) }; tla-1.3.5+dfsg/src/hackerlab/vu/safe-vu-utils.h0000644000175000017500000000144010457621774017763 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:41:41 2001 (safe-vu-utils.h) */ /* safe-vu-utils.h - * **************************************************************** * Copyright (C) 2000 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__VU__SAFE_VU_UTILS_H #define INCLUDE__VU__SAFE_VU_UTILS_H #include "hackerlab/vu/vu-utils.h" #include "hackerlab/vu/safe-vu-utils-vfdbuf.h" /* automatically generated __STDC__ prototypes */ extern int safe_move_fd (int fd, int newfd); extern void safe_file_to_string (t_uchar ** buf, size_t * len, int fd); extern int safe_file_is_directory (const t_uchar * name); extern int safe_file_is_directory_following (const t_uchar * name); #endif /* INCLUDE__VU__SAFE_VU_UTILS_H */ tla-1.3.5+dfsg/src/hackerlab/vu/vu-bad-arg.h0000644000175000017500000000107210457621774017205 0ustar useruser/* vu-bad-arg.h - decls for the EINVAL file system * **************************************************************** * Copyright (C) 1999, 2000 Thomas Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__VU__VU_BAD_ARG_H #define INCLUDE__VU__VU_BAD_ARG_H #include "hackerlab/vu/vu.h" extern struct vu_fs_discipline _vu_bad_arg_functions; /* automatically generated __STDC__ prototypes */ extern int vu_bad_arg (int * errn, ...); #endif /* INCLUDE__VU__VU_BAD_ARG_H */ tla-1.3.5+dfsg/src/hackerlab/vu/Makefile.in0000644000175000017500000000027110457621774017154 0ustar useruser include $(makefiles)/library-objects.mk ifeq ($(cgs__install_hackerlab),1) include $(makefiles)/install-includes.mk endif # tag: Tom Lord Tue Dec 4 14:52:19 2001 (vu/Makefile.in) # tla-1.3.5+dfsg/src/hackerlab/vu/vu-help.h0000644000175000017500000000120110457621774016632 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:41:39 2001 (vu-help.h) */ /* vu-help.h - * **************************************************************** * Copyright (C) 2000 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__VU__VU_HELP_H #define INCLUDE__VU__VU_HELP_H #include "hackerlab/machine/types.h" /* automatically generated __STDC__ prototypes */ extern void vu_help_for_optional_handlers (t_uchar * long_option_name, int fd); extern void vu_help_for_enabled_handlers (t_uchar * long_option_name, int fd); #endif /* INCLUDE__VU__VU_HELP_H */ tla-1.3.5+dfsg/src/hackerlab/vu/vu.h0000644000175000017500000002726310457621774015724 0ustar useruser/* vu.h - virtual unix file-system interface decls * **************************************************************** * Copyright (C) 1998, 2000 Thomas Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__VU__VU_H #define INCLUDE__VU__VU_H #include "hackerlab/os/sys/stat.h" #include "hackerlab/os/fcntl.h" #include "hackerlab/os/unistd.h" #include "hackerlab/os/stdlib.h" #include "hackerlab/os/sys/time.h" #include "hackerlab/os/utime.h" #include "hackerlab/os/dirent.h" #include "hackerlab/rx-posix/regexps.h" /*c #define VU_MAP_FS_NAMES(c ,prefix, middle, suffix, punct) * * expand to many calls for the form: * * VU_FS_NAME##c (fn, prefix, middle, suffix, ret, proto) punct * * where: * * `fn' is the root name of a virtual system call (e.g. `access' or * `open') * * `ret' is the return type of that system call (e.g. `int') * * `proto' is the argument list prototype of implementations of that * system call (e.g. `(int * errn, char * path, int mode, void * closure)') * * By passing a suitable value for `c', this expansion can call another * macro (e.g. VU_FS_NAME_A) to construct structure initializers, * structure field declarations, etc. * * To generate a list of fill-in-the-blank templates for VU functions, * run `vu-prototypes your_prefix_'. */ #define VU_MAP_FS_NAMES(c ,prefix, middle, suffix, punct) \ VU_FS_NAME##c (make_closure, prefix, middle, suffix, \ void *, (void * closure)) punct \ VU_FS_NAME##c (free_closure, prefix, middle, suffix, \ void, (void * closure)) punct \ VU_FS_NAME##c (access, prefix, middle, suffix, \ int, (int * errn, const char * path, int mode, void * closure)) punct \ VU_FS_NAME##c (chdir, prefix, middle, suffix, \ int, (int * errn, const char * path, void * closure)) punct \ VU_FS_NAME##c (chmod, prefix, middle, suffix, \ int, (int * errn, const char * path, int mode, void * closure)) punct \ VU_FS_NAME##c (chown, prefix, middle, suffix, \ int, (int * errn, const char * path, int owner, int group, void * closure)) punct \ VU_FS_NAME##c (chroot, prefix, middle, suffix, \ int, (int * errn, const char * path, void * closure)) punct \ VU_FS_NAME##c (close, prefix, middle, suffix, \ int, (int * errn, int fd, void * closure)) punct \ VU_FS_NAME##c (closedir, prefix, middle, suffix, \ int, (int * errn, DIR * dir, void * closure)) punct \ VU_FS_NAME##c (fchdir, prefix, middle, suffix, \ int, (int * errn, int fd, void * closure)) punct \ VU_FS_NAME##c (fchmod, prefix, middle, suffix, \ int, (int * errn, int fd, int mode, void * closure)) punct \ VU_FS_NAME##c (fchown, prefix, middle, suffix, \ int, (int * errn, int fd, int owner, int group, void * closure)) punct \ VU_FS_NAME##c (fstat, prefix, middle, suffix, \ int, (int * errn, int fd, struct stat * buf, void * closure)) punct \ VU_FS_NAME##c (fsync, prefix, middle, suffix, \ int, (int * errn, int fd, void * closure)) punct \ VU_FS_NAME##c (ftruncate, prefix, middle, suffix, \ int, (int * errn, int fd, off_t where, void * closure)) punct \ VU_FS_NAME##c (link, prefix, middle, suffix, \ int, (int * errn, const char * from, const char * to, void * closure)) punct \ VU_FS_NAME##c (lseek, prefix, middle, suffix, \ off_t, (int * errn, int fd, off_t offset, int whence, void * closure)) punct \ VU_FS_NAME##c (lstat, prefix, middle, suffix, \ int, (int * errn, const char * path, struct stat * buf, void * closure)) punct \ VU_FS_NAME##c (mkdir, prefix, middle, suffix, \ int, (int * errn, const char * path, int mode, void * closure)) punct \ VU_FS_NAME##c (open, prefix, middle, suffix, \ int, (int * errn, const char * path, int flags, int mode, void * closure)) punct \ VU_FS_NAME##c (opendir, prefix, middle, suffix, \ int, (int * errn, DIR ** retv, const char * path, void * closure)) punct \ VU_FS_NAME##c (read, prefix, middle, suffix, \ ssize_t, \ (int * errn, int fd, char * buf, size_t count, void * closure)) punct \ VU_FS_NAME##c (readdir, prefix, middle, suffix, \ int, (int * errn, struct alloc_limits * lims, char ** file, DIR * dir, void * closure)) punct \ VU_FS_NAME##c (readlink, prefix, middle, suffix, \ int, (int * errn, const char * path, char * buf, int bufsize, void * closure)) punct \ VU_FS_NAME##c (rename, prefix, middle, suffix, \ int, (int * errn, const char * from, const char * to, void * closure)) punct \ VU_FS_NAME##c (rmdir, prefix, middle, suffix, \ int, (int * errn, const char * path, void * closure)) punct \ VU_FS_NAME##c (stat, prefix, middle, suffix, \ int, (int * errn, const char * path, struct stat * buf, void * closure)) punct \ VU_FS_NAME##c (symlink, prefix, middle, suffix, \ int, (int * errn, const char * from, const char * to, void * closure)) punct \ VU_FS_NAME##c (truncate, prefix, middle, suffix, \ int, (int * errn, const char * path, off_t where, void * closure)) punct \ VU_FS_NAME##c (unlink, prefix, middle, suffix, \ int, (int * errn, const char * path, void * closure)) punct \ VU_FS_NAME##c (utime, prefix, middle, suffix, \ int, (int * errn, const char * path, struct utimbuf * times, void * closure)) punct \ VU_FS_NAME##c (write, prefix, middle, suffix, \ ssize_t, \ (int * errn, int fd, const char * buf, size_t count, void * closure)) punct \ VU_FS_NAME##c (fcntl, prefix, middle, suffix, \ int, (int * errn, int fd, int cmd, long arg, void * closure)) punct \ VU_FS_NAME##c (dup, prefix, middle, suffix, \ int, (int * errn, int fd, void * closure)) punct \ VU_FS_NAME##c (dup2, prefix, middle, suffix, \ int, (int * errn, int fd, int newfd, void * closure)) punct \ VU_FS_NAME##c (move_state, prefix, middle, suffix, \ int, (int * errn, int fd, int newfd, void * closure)) /* vu virtual function types. * * This expands to a series of typedefs such as: * * typedef int (*vu_access_fn) (int * errn, char * path, int mode); */ #define VU_FS_NAME_TYPEDEF(name, prefix, middle, suffix, ret, proto) typedef ret (*vu_##name##_fn) proto VU_MAP_FS_NAMES(_TYPEDEF, , , , ;); /*c struct vu_fs_discipline; * * This type is a virtual function table whose fields point to * functions that implement the unix file-system discipline with VU * calling conventions. For each file-system function or system call, * there is a corresponding VU function and VU function type that * matches that function, except for the addition of one or two * parameters. For example: * * // unix: * // * int open (const char * pathname, int flags, mode_t mode); * * // vu function: * // * int vu_open (int * errn, char * pathname, int flags, int mode); * * // vu function type: * // * typedef int (*vu_open_fn) (int *, char *, int, int, void * closure); * * For each such function type, this structure has a corresponding * field: * * // field of struct vu_fs_discipline: * // * vu_open_fn open; * * The order of the fields is unspecified. To staticly initialize a * structure of this type, use the macro VU_FS_DISCIPLINE_INITIALIZERS * and name your functions in a systematic way. For example, if * your VU virtual function implementations have names like: * * vu_sys_open * vu_sys_close * ... * * You can initialize a `struct vu_fs_discipline' this way: * * struct vu_fs_discipline vu_system_fs_vtable * = { VU_FS_DISCIPLINE_INITIALIZERS (vu_sys_) }; * */ #define VU_FS_NAME_STRUCT_FIELD(name, prefix, middle, suffix, ret, proto) prefix##name##middle name##suffix struct vu_fs_discipline { VU_MAP_FS_NAMES (_STRUCT_FIELD, vu_,_fn , , ;); }; #define VU_FS_NAME_INITIALIZER(name, prefix, middle, suffix, ret, proto) prefix##name, #define VU_FS_DISCIPLINE_INITIALIZERS(PREFIX) VU_MAP_FS_NAMES (_INITIALIZER, PREFIX, , , ) /*c struct vu_handler; * * For each VU namespace handler and file-descriptor handler, there * is a `struct vu_handler' that indicates the `vtable' and `closure' * to use for that portion of the file-system. */ struct vu_handler { struct vu_fs_discipline * vtable; void * closure; }; /**************************************************************** * Internal definitions * */ struct _vu_namespace_handler { regex_t * preg; int eflags; struct vu_handler handler; const t_uchar * name; const t_uchar ** doc; }; extern union _t_vu_fs_handlers { struct _vu_namespace_handler * nhp; void *void_ptr; } _vu_fs_handlers; extern union _t_vu_fs_handlers _vu_optional_fs_handlers; /* automatically generated __STDC__ prototypes */ extern void vu_push_name_handler (const t_uchar * name, const t_uchar ** doc, regex_t * preg, int eflags, struct vu_fs_discipline * vtable, void * closure, int is_optional); extern int vu_enable_optional_name_handler (const t_uchar * name); extern void vu_set_fd_handler (int fd, struct vu_fs_discipline * vtable, void * closure); extern void vu_reinit_after_unexec (void); extern int vu_move_state (int * errn, int fd, int newfd); extern struct vu_handler * vu_path_dispatch (const char * path); extern struct vu_handler * vu_fd_dispatch (int fd); extern struct vu_handler * vu_dir_dispatch (DIR * dir); extern int vu_access (int * errn, const char * path, int mode); extern int vu_chdir (int * errn, const char * path); extern int vu_chmod (int * errn, const char * path, int mode); extern int vu_chown (int * errn, const char * path, int owner, int group); extern int vu_chroot (int * errn, const char * path); extern int vu_close (int * errn, int fd); extern int vu_closedir (int * errn, DIR * dir); extern int vu_fchdir (int * errn, int fd); extern int vu_fchmod (int * errn, int fd, int mode); extern int vu_fchown (int * errn, int fd, int owner, int group); extern int vu_fstat (int * errn, int fd, struct stat * buf); extern int vu_fsync (int * errn, int fd); extern int vu_ftruncate (int * errn, int fd, off_t where); extern int vu_link (int * errn, const char * from, const char * to); extern off_t vu_lseek (int * errn, int fd, off_t offset, int whence); extern int vu_lstat (int * errn, const char * path, struct stat * buf); extern int vu_mkdir (int * errn, const char * path, int mode); extern int vu_open (int * errn, const char * path, int flags, int mode); extern int vu_dir_fd (DIR * dir); extern int vu_opendir (int * errn, DIR ** retv, const char * path); extern ssize_t vu_read (int * errn, int fd, char * buf, size_t count); extern ssize_t vu_read_retry (int * errn, int fd, char * buf, size_t count); extern int vu_readdir (int * errn, struct alloc_limits * limits, char ** file_ret, DIR * dir); extern int vu_readlink (int * errn, const char * path, char * buf, int bufsize); extern int vu_rename (int * errn, const char * from, const char * to); extern int vu_rmdir (int * errn, const char * path); extern int vu_stat (int * errn, const char * path, struct stat * buf); extern int vu_symlink (int * errn, const char * from, const char * to); extern int vu_truncate (int * errn, const char * path, off_t where); extern int vu_unlink (int * errn, const char * path); extern int vu_utime (int * errn, const char * path, struct utimbuf * times); extern ssize_t vu_write (int * errn, int fd, const char * buf, size_t count); extern ssize_t vu_write_retry (int * errn, int fd, const char * buf, size_t count); extern int vu_fcntl (int * errn, int fd, int cmd, long arg); extern int vu_dup (int * errn, int fd); extern int vu_dup2 (int * errn, int fd, int newfd); #endif /* INCLUDE__VU__VU_H */ tla-1.3.5+dfsg/src/hackerlab/vu/vu-dash.h0000644000175000017500000000101410457621774016623 0ustar useruser/* vu-dash.h - decls for the dash (stdin/stdout) file system * **************************************************************** * Copyright (C) 1999, 2000 Thomas Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__VU__VU_DASH_H #define INCLUDE__VU__VU_DASH_H #include "hackerlab/vu/vu.h" /* automatically generated __STDC__ prototypes */ extern void vu_push_dash_handler (int is_optional); #endif /* INCLUDE__VU__VU_DASH_H */ tla-1.3.5+dfsg/src/hackerlab/vu/reserv.h0000644000175000017500000000122610457621774016567 0ustar useruser/* reserv.h - decls for reserved and pseudo file descriptors * **************************************************************** * Copyright (C) 1998, 2000 Thomas Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__VU__RESERV_H #define INCLUDE__VU__RESERV_H #include "hackerlab/vu/vu.h" /* automatically generated __STDC__ prototypes */ extern int reserv (int * errn, int flags); extern int reserv_pseudo (int * errn, int flags); extern int reserv_pseudo_ge_n (int * errn, int n, int flags); extern void unreserv_pseudo (int fd); #endif /* INCLUDE__VU__RESERV_H */ tla-1.3.5+dfsg/src/hackerlab/vu/vu-virtual-null.h0000644000175000017500000000116510457621774020351 0ustar useruser/* vu-virtual-null.h - decls for the virtual-null file system * **************************************************************** * Copyright (C) 1999, 2000 Thomas Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__VU__VU_VIRTUAL_NULL_H #define INCLUDE__VU__VU_VIRTUAL_NULL_H #include "hackerlab/vu/vu.h" /* automatically generated __STDC__ prototypes */ extern int vu_make_virtual_null_fd (int * errn, int flags); extern int vu_make_virtual_null_fd_ge_n (int * errn, int n, int flags); #endif /* INCLUDE__VU__VU_VIRTUAL_NULL_H */ tla-1.3.5+dfsg/src/hackerlab/vu/vu-sys.c0000644000175000017500000003124610457621774016527 0ustar useruser/* vu-sys.c - direct VU functions * **************************************************************** * Copyright (C) 1999, 2000 Thomas Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include #include "hackerlab/os/errno.h" #include "hackerlab/os/unistd.h" #include "hackerlab/mem/mem.h" #include "hackerlab/vu/vu-sys.h" #include "hackerlab/char/str.h" /************************************************************************ *(h0 "VU Native File System Access") * * * These functions define a trivial file-system implementation in * which all functions call their system-call equivalents. */ struct vu_fs_discipline _vu_system_fs_vtable = { VU_FS_DISCIPLINE_INITIALIZERS (vu_sys_) }; /*(c vu_sys_make_closure) * void * vu_sys_make_closure (void * closure); * * Return `closure'. */ void * vu_sys_make_closure (void * closure) { return closure; } /*(c vu_sys_free_closure) * void vu_sys_free_closure (void * closure); * * A noop. */ void vu_sys_free_closure (void * closure) {} /*(c vu_sys_access) * int vu_sys_access (int * errn, const char * path, int mode, void * closure); * * Call `access'. */ int vu_sys_access (int * errn, const char * path, int mode, void * closure) { int rv; rv = access (path, mode); if (rv) if (errn) *errn = errno; return rv; } /*(c vu_sys_chdir) * int vu_sys_chdir (int * errn, const char * path, void * closure); * * Call `chdir'. */ int vu_sys_chdir (int * errn, const char * path, void * closure) { int rv; rv = chdir (path); if (rv) if (errn) *errn = errno; return rv; } /*(c vu_sys_chmod) * int vu_sys_chmod (int * errn, const char * path, int mode, void * closure); * * Call `chmod'. */ int vu_sys_chmod (int * errn, const char * path, int mode, void * closure) { int rv; rv = chmod (path, mode); if (rv) if (errn) *errn = errno; return rv; } /*(c vu_sys_chown) * int vu_sys_chown (int * errn, * const char * path, * int owner, * int group, * void * closure); * * Call `chown'. */ int vu_sys_chown (int * errn, const char * path, int owner, int group, void * closure) { int rv; rv = chown (path, owner, group); if (rv) if (errn) *errn = errno; return rv; } /*(c vu_sys_chroot) * int vu_sys_chroot (int * errn, const char * path, void * closure); * * Call `chroot'. */ int vu_sys_chroot (int * errn, const char * path, void * closure) { int rv; rv = chroot (path); if (rv) if (errn) *errn = errno; return rv; } /*(c vu_sys_closedir) * int vu_sys_closedir (int * errn, DIR * dir, void * closure); * * Call `closedir'. */ int vu_sys_closedir (int * errn, DIR * dir, void * closure) { int rv; rv = closedir (dir); if (rv) if (errn) *errn = errno; return rv; } /*(c vu_sys_close) * int vu_sys_close (int * errn, int fd, void * closure); * * Call `close'. */ int vu_sys_close (int * errn, int fd, void * closure) { int rv; rv = close (fd); if (rv) if (errn) *errn = errno; return rv; } /*(c vu_sys_fchdir) * int vu_sys_fchdir (int * errn, int fd, void * closure); * * Call `fchdir'. */ int vu_sys_fchdir (int * errn, int fd, void * closure) { int rv; rv = fchdir (fd); if (rv) if (errn) *errn = errno; return rv; } /*(c vu_sys_fchmod) * int vu_sys_fchmod (int * errn, int fd, int mode, void * closure); * * Call `fchmod'. */ int vu_sys_fchmod (int * errn, int fd, int mode, void * closure) { int rv; rv = fchmod (fd, mode); if (rv) if (errn) *errn = errno; return rv; } /*(c vu_sys_fchown) * int vu_sys_fchown (int * errn, * int fd, * int owner, * int group, * void * closure); * * Call `fchown'. */ int vu_sys_fchown (int * errn, int fd, int owner, int group, void * closure) { int rv; rv = fchown (fd, owner, group); if (rv) if (errn) *errn = errno; return rv; } /*(c vu_sys_fstat) * int vu_sys_fstat (int * errn, * int fd, * struct stat * buf, * void * closure); * * Call `fstat'. */ int vu_sys_fstat (int * errn, int fd, struct stat * buf, void * closure) { int rv; rv = fstat (fd, buf); if (rv) if (errn) *errn = errno; return rv; } /*(c vu_sys_fsync) * int vu_sys_fsync (int * errn, int fd, void * closure); * * Call `fsync'. */ int vu_sys_fsync (int * errn, int fd, void * closure) { int rv; rv = fsync (fd); if (rv) if (errn) *errn = errno; return rv; } /*(c vu_sys_ftruncate) * int vu_sys_ftruncate (int * errn, int fd, off_t where, void * closure); * * Call `ftruncate'. */ int vu_sys_ftruncate (int * errn, int fd, off_t where, void * closure) { int rv; rv = ftruncate (fd, where); if (rv) if (errn) *errn = errno; return rv; } /*(c vu_sys_link) * int vu_sys_link (int * errn, const char * from, const char * to, void * closure); * * Call `link'. */ int vu_sys_link (int * errn, const char * from, const char * to, void * closure) { int rv; rv = link (from, to); if (rv) if (errn) *errn = errno; return rv; } /*(c vu_sys_lseek) * off_t vu_sys_lseek (int * errn, * int fd, * off_t offset, * int whence, * void * closure); * * Call `lseek'. */ off_t vu_sys_lseek (int * errn, int fd, off_t offset, int whence, void * closure) { off_t rv; rv = lseek (fd, offset, whence); if (rv) if (errn) *errn = errno; return rv; } /*(c vu_sys_lstat) * int vu_sys_lstat (int * errn, * const char * path, * struct stat * buf, * void * closure); * * Call `lstat'. */ int vu_sys_lstat (int * errn, const char * path, struct stat * buf, void * closure) { int rv; rv = lstat (path, buf); if (rv) if (errn) *errn = errno; return rv; } /*(c vu_sys_mkdir) * int vu_sys_mkdir (int * errn, const char * path, int mode, void * closure); * * Call `mkdir'. */ int vu_sys_mkdir (int * errn, const char * path, int mode, void * closure) { int rv; rv = mkdir (path, mode); if (rv) if (errn) *errn = errno; return rv; } /*(c vu_sys_open) * int vu_sys_open (int * errn, * const char * path, * int flags, * int mode, * void * closure); * * Call `open'. */ int vu_sys_open (int * errn, const char * path, int flags, int mode, void * closure) { int rv; rv = open (path, flags, mode); if (rv) if (errn) *errn = errno; return rv; } /*(c vu_sys_opendir) * int vu_sys_opendir (int * errn, * DIR ** retv, * const char * path, * void * closure); * * Call `opendir'. */ int vu_sys_opendir (int * errn, DIR ** retv, const char * path, void * closure) { *retv = opendir (path); if (!*retv) if (errn) *errn = errno; return (*retv == 0 ? -1 : 0); } /*(c vu_sys_read) * ssize_t vu_sys_read (int * errn, * int fd, * char * buf, * size_t count, * void * closure); * * * Call `read'. */ ssize_t vu_sys_read (int * errn, int fd, char * buf, size_t count, void * closure) { ssize_t rv; rv = read (fd, buf, count); if (rv == -1) if (errn) *errn = errno; return rv; } /*(c vu_sys_readdir) * int vu_sys_readdir (int * errn, * struct alloc_limits * limits, * char ** file_ret, * DIR * dir, * void * closure); * * Call `readdir'. */ int vu_sys_readdir (int * errn, struct alloc_limits * limits, char ** file_ret, DIR * dir, void * closure) { struct dirent * de; errno = 0; de = readdir (dir); if (!de) { if (errn) *errn = errno; return -1; } if (file_ret) { *file_ret = str_save (limits, de->d_name); if (!*file_ret) { if (errn) *errn = ENOMEM; return -1; } } return 0; } /*(c vu_sys_readlink) * int vu_sys_readlink (int * errn, * const char * path, * char * buf, * int bufsize, * void * closure); * * Call `readlink'. */ int vu_sys_readlink (int * errn, const char * path, char * buf, int bufsize, void * closure) { int rv; rv = readlink (path, buf, bufsize); if (rv) if (errn) *errn = errno; return rv; } /*(c vu_sys_rename) * int vu_sys_rename (int * errn, const char * from, const char * to, void * closure); * * Call `rename'. */ int vu_sys_rename (int * errn, const char * from, const char * to, void * closure) { int rv; rv = rename (from, to); if (rv) if (errn) *errn = errno; return rv; } /*(c vu_sys_rmdir) * int vu_sys_rmdir (int * errn, const char * path, void * closure); * * Call `rmdir'. */ int vu_sys_rmdir (int * errn, const char * path, void * closure) { int rv; rv = rmdir (path); if (rv) if (errn) *errn = errno; return rv; } /*(c vu_sys_stat) * int vu_sys_stat (int * errn, * const char * path, * struct stat * buf, * void * closure); * * Call `stat'. */ int vu_sys_stat (int * errn, const char * path, struct stat * buf, void * closure) { int rv; rv = stat (path, buf); if (rv) if (errn) *errn = errno; return rv; } /*(c vu_sys_symlink) * int vu_sys_symlink (int * errn, const char * from, const char * to, void * closure); * * Call `symlink'. */ int vu_sys_symlink (int * errn, const char * from, const char * to, void * closure) { int rv; rv = symlink (from, to); if (rv) if (errn) *errn = errno; return rv; } /*(c vu_sys_truncate) * int vu_sys_truncate (int * errn, * const char * path, * off_t where, * void * closure); * * Call `truncate'. */ int vu_sys_truncate (int * errn, const char * path, off_t where, void * closure) { int rv; rv = truncate (path, where); if (rv) if (errn) *errn = errno; return rv; } /*(c vu_sys_unlink) * int vu_sys_unlink (int * errn, const char * path, void * closure); * * Call `unlink'. */ int vu_sys_unlink (int * errn, const char * path, void * closure) { int rv; rv = unlink (path); if (rv) if (errn) *errn = errno; return rv; } /*(c vu_sys_utime) * int vu_sys_utime (int * errn, * const char * path, * struct utimbuf * times, * void * closure); * * Call `utime'. */ int vu_sys_utime (int * errn, const char * path, struct utimbuf * times, void * closure) { int rv; rv = utime (path, times); if (rv) if (errn) *errn = errno; return rv; } /*(c vu_sys_write) * ssize_t vu_sys_write (int * errn, * int fd, * const char * buf, * size_t count, * void * closure); * * Call `write'. */ ssize_t vu_sys_write (int * errn, int fd, const char * buf, size_t count, void * closure) { ssize_t rv; if (count == 0) { /* Posix leaves unspecified the behavior of `write' if * `count' is 0 and `fd' is not a regular file. * * I beg to differ. */ return 0; } rv = write (fd, buf, count); if (rv == -1) if (errn) *errn = errno; return rv; } /*(c vu_sys_fcntl) * int vu_sys_fcntl (int * errn, * int fd, * int cmd, * long arg, * void * closure); * * Call `fcntl'. */ int vu_sys_fcntl (int * errn, int fd, int cmd, long arg, void * closure) { int rv; rv = fcntl (fd, cmd, arg); if (rv) if (errn) *errn = errno; return rv; } /*(c vu_sys_dup) * int vu_sys_dup (int * errn, int fd, void * closure); * * Call `dup'. */ int vu_sys_dup (int * errn, int fd, void * closure) { int rv; rv = dup (fd); if (rv == -1) if (errn) *errn = errno; return rv; } /*(c vu_sys_dup2) * int vu_sys_dup2 (int * errn, int fd, int newfd, void * closure); * * Call `dup2'. */ int vu_sys_dup2 (int * errn, int fd, int newfd, void * closure) { int rv; rv = dup2 (fd, newfd); if (rv == -1) if (errn) *errn = errno; return rv; } /*(c vu_sys_move_state) * int vu_sys_move_state (int * errn, int fd, int newfd, void * closure); * * A noop (return 0). */ int vu_sys_move_state (int * errn, int fd, int newfd, void * closure) { return 0; } tla-1.3.5+dfsg/src/hackerlab/vu/vu-help.c0000644000175000017500000000775610457621774016652 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:41:39 2001 (vu-help.c) */ /* vu-help.c - * **************************************************************** * Copyright (C) 2000 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/bugs/panic.h" #include "hackerlab/char/str.h" #include "hackerlab/arrays/ar.h" #include "hackerlab/vu/printfmt.h" #include "hackerlab/vu/vu.h" #include "hackerlab/vu/vu-help.h" /* static int vu_help_with_handlers (t_uchar * long_option_name, * int fd, * struct _vu_namespace_handler * handlers) * * Print a help message describing namespace handlers in `handlers'. * Documentation for the handlers is printed in reverse order (treating * `handlers' as a stack and starting at the top of the stack). * * Output is in two columns. The first column is the name of a category * of file names, the second column is documentation for that category. * `long_option_name', if not 0, is the title for the first column. * * `fd' is the descriptor on which to write output. */ static void vu_help_with_handlers (t_uchar * long_option_name, int fd, struct _vu_namespace_handler * handlers) { t_uchar * col1_head; t_uchar * col2_head; int col1_width; int col2_width; int x; int n_handlers; int errn; col1_head = (long_option_name ? long_option_name : (t_uchar *)"Category"); col2_head = "File Names Supported"; n_handlers = ar_size ((void *)handlers, lim_use_must_malloc, sizeof (*handlers)); col1_width = str_length (col1_head); col2_width = str_length (col2_head); for (x = 0; x < n_handlers; ++x) { int this_width; int y; this_width = str_length (handlers[x].name); if (this_width > col1_width) col1_width = this_width; for (y = 0; handlers[x].doc[y]; ++y) { this_width = str_length (handlers[x].doc[y]); if (this_width > col2_width) col2_width = this_width; } } if (0 > printfmt (&errn, fd, " %-*s %s\n\n", col1_width, col1_head, col2_head)) { io_error: panic ("I/O error in vu_help_with_handlers"); } for (x = n_handlers - 1; x >= 0; --x) { int y; if (0 > printfmt (&errn, fd, " %-*s ", col1_width, handlers[x].name)) goto io_error; if (0 > printfmt (&errn, fd, "%s\n", handlers[x].doc[0])) goto io_error; for (y = 1; handlers[x].doc[y]; ++y) { if (0 > printfmt (&errn, fd, " %*s %s\n", col1_width, "", handlers[x].doc[y])) goto io_error; } if (0 > printfmt (&errn, fd, "\n")) goto io_error; } } /*(c vu_help_for_optional_handlers) * int vu_help_for_optional_handlers (t_uchar * long_option_name, * int fd); * * Print a help message describing the optional namespace handlers * that have been established by `vu_push_optional_name_handler'. * Documentation for the handlers is printed in the reverse order * of calls to `vu_push_optional_name_handler'. * * Output is in two columns. The first column is the name of a category * of file names, the second column is documentation for that category. * `long_option_name', if not 0, is the title for the first column. * * `fd' is the descriptor on which to write output. */ void vu_help_for_optional_handlers (t_uchar * long_option_name, int fd) { vu_help_with_handlers (long_option_name, fd, _vu_optional_fs_handlers.nhp); } /*(c vu_help_for_enabled_handlers) * int vu_help_for_enabled_handlers (t_uchar * long_option_name, * int fd); * * Print a help message describing the enabled namespace handlers that * have been established by `vu_push_name_handler'. Documentation for * the handlers is printed in the reverse order of calls to * `vu_push_name_handler' -- that is, in order of precedence from * highest to lowest. * * `fd' is the descriptor on which to write output. */ void vu_help_for_enabled_handlers (t_uchar * long_option_name, int fd) { vu_help_with_handlers (long_option_name, fd, _vu_fs_handlers.nhp); } tla-1.3.5+dfsg/src/hackerlab/vu/PLUGIN/0000755000175000017500000000000010457621774016105 5ustar userusertla-1.3.5+dfsg/src/hackerlab/vu/PLUGIN/REQ0000644000175000017500000000002610457621774016455 0ustar useruserfmt vu vu libboot tla-1.3.5+dfsg/src/hackerlab/vu/safe-vfdbuf.h0000644000175000017500000000356010457621774017454 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:41:40 2001 (safe-vfdbuf.h) */ /* safe-vfdbuf.h - * **************************************************************** * Copyright (C) 2000 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__VU__SAFE_VFDBUF_H #define INCLUDE__VU__SAFE_VFDBUF_H #include "hackerlab/vu/vfdbuf.h" /* automatically generated __STDC__ prototypes */ extern void safe_buffer_fd (int fd, long bufsize, int flags, int buffer_flags); extern void safe_set_buffer (int fd, t_uchar * buffer, long bufsize, long read_write_pos, long buffered, int add_zero_byte, void (*free_buffer)(t_uchar * buf, void * closure), void * free_buffer_closure); extern void safe_set_dont_flush (int fd, int setting); extern void safe_unbuffer (int fd); extern int safe_is_dont_flush (int fd); extern void safe_set_auto_shift (int fd, int setting); extern int safe_is_auto_shift (int fd); extern void safe_getbuf (t_uchar ** buffer, long * bufsize, t_uchar ** read_write_position, long * buffered, int * has_zero_byte, int fd); extern void safe_takebuf (t_uchar ** bufbase, long * bufsize, t_uchar ** read_write_pos, long * buffered, int * has_zero_byte, int fd, void (*free_buffer)(t_uchar * buf, void * closure), void * free_buffer_closure); extern void safe_shift (int fd, long amt); extern void safe_advance (int fd, long amt); extern void safe_flush (int fd); extern void safe_return (int fd, t_uchar * str, long len); extern ssize_t safe_more (t_uchar ** buffer, long * bufsize, t_uchar ** read_write_pos, long * buffered, int * has_zero_byte, int fd, long opt_amt); extern int safe_is_eof (int fd); extern void safe_clear_eof (int fd); #endif /* INCLUDE__VU__SAFE_VFDBUF_H */ tla-1.3.5+dfsg/src/hackerlab/vu/vu-utils.c0000644000175000017500000000743710457621774017056 0ustar useruser/* vu-utils.c - vu helper functions * **************************************************************** * Copyright (C) 2000 Thomas Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/os/errno.h" #include "hackerlab/mem/must-malloc.h" #include "hackerlab/char/str.h" #include "hackerlab/vu/vu-utils.h" /************************************************************************ *(h0 "VU Utilities") * * These functions provide higher-level abstractions that capture common * ways of using the lower-level VU functions. */ /*(c vu_file_to_string) * int vu_file_to_string (int * errn, * t_uchar ** buf, * size_t * len, * int fd); * * Read the entire contents of `fd' into a newly allocated string. * * If no error occurs, return 0. The new string is returned in `*buf'; * its length in `*len'. * * If an I/O error occurs, return -1 and fill `*errn'. * * If `vu_fstat' is able to report the length of the file, a single call to * `vu_read_retry' is used to read its contents. Otherwise, repeated calls * to `vu_read_retry' are used. */ int vu_file_to_string (int * errn, t_uchar ** buf, size_t * len, int fd) { struct stat sb; if (!vu_fstat (errn, fd, &sb)) { *buf = (t_uchar *)must_malloc (sb.st_size); if (sb.st_size != vu_read_retry (errn, fd, *buf, sb.st_size)) { must_free (*buf); return -1; } *len = sb.st_size; return 0; } else { #define chunk 8192 size_t total; *buf = (t_uchar *)must_malloc (chunk); total = 0; while (1) { ssize_t amt; amt = vu_read_retry (errn, fd, *buf + total, chunk); if (amt < 0) { must_free (*buf); return -1; } if (amt == 0) { *buf = (t_uchar *)must_realloc ((void *)*buf, total); *len = total; return 0; } total += amt; *buf = (t_uchar *)must_realloc ((void *)*buf, total + chunk); } } } /*(c vu_move_fd) * int vu_move_fd (int * errn, int fd, int newfd); * * Relocate `fd' to `newfd'. `fd' must already be handled by VU. * * Thus function performs a `vu_dup' or `vu_dup2' * * This is useful when performing file redirections after `fork' and * before `exec'. * */ int vu_move_fd (int * errn, int fd, int newfd) { int ign; if (fd < 0) { if (errn) *errn = EINVAL; return -1; } if (fd == newfd) return 0; if (newfd == -1) newfd = vu_dup (errn, fd); else newfd = vu_dup2 (errn, fd, newfd); if (newfd < 0) return -1; if (0 > vu_move_state (errn, fd, newfd)) { vu_close (&ign, newfd); return -1; } vu_close (&ign, fd); return newfd; } /*(c vu_file_is_directory) * int vu_file_is_directory (int * errn, const t_uchar * name); * * Return 1 if `name' names a directory, 0 if not, -1 on error. * * Non-existence of any file called `name' is not an error. */ int vu_file_is_directory (int * errn, const t_uchar * name) { int e; struct stat sb; if (0 > vu_lstat (&e, name, &sb)) { if (e == ENOENT) return 0; if (errn) *errn = e; return -1; } return (S_ISDIR (sb.st_mode)); } /*(c vu_file_is_directory_following) * int vu_file_is_directory_following (int * errn, const t_uchar * name); * * Return 1 if `name' names a directory or symlink to a directory, * 0 if not, -1 on error. * * Non-existence of any file called `name' is not an error. */ int vu_file_is_directory_following (int * errn, const t_uchar * name) { int e; struct stat sb; if (0 > vu_stat (&e, name, &sb)) { if (e == ENOENT) return 0; if (errn) *errn = e; return -1; } return (S_ISDIR (sb.st_mode)); } tla-1.3.5+dfsg/src/hackerlab/vu/vu-pathcompress.h0000644000175000017500000000006710457621774020423 0ustar useruserextern struct vu_fs_discipline pathcompress_fs_vtable; tla-1.3.5+dfsg/src/hackerlab/vu/vu-virtual-null.c0000644000175000017500000003077010457621774020350 0ustar useruser/* vu-virtual-null.c - the virtual-null file system * **************************************************************** * Copyright (C) 1999, 2000 Thomas Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/os/errno.h" #include "hackerlab/arrays/ar.h" #include "hackerlab/vu/reserv.h" #include "hackerlab/vu/vu-virtual-null.h" /* __STDC__ prototypes for static functions */ static void * vu_virtual_null_make_closure (void * closure); static void vu_virtual_null_free_closure (void * closure); static int vu_virtual_null_access (int * errn, const char * path, int mode, void * closure); static int vu_virtual_null_chdir (int * errn, const char * path, void * closure); static int vu_virtual_null_chmod (int * errn, const char * path, int mode, void * closure); static int vu_virtual_null_chown (int * errn, const char * path, int owner, int group, void * closure); static int vu_virtual_null_chroot (int * errn, const char * path, void * closure); static int vu_virtual_null_closedir (int * errn, DIR * dir, void * closure); static int vu_virtual_null_close (int * errn, int fd, void * closure); static int vu_virtual_null_fchdir (int * errn, int fd, void * closure); static int vu_virtual_null_fchmod (int * errn, int fd, int mode, void * closure); static int vu_virtual_null_fchown (int * errn, int fd, int owner, int group, void * closure); static int vu_virtual_null_fstat (int * errn, int fd, struct stat * buf, void * closure); static int vu_virtual_null_fsync (int * errn, int fd, void * closure); static int vu_virtual_null_ftruncate (int * errn, int fd, off_t where, void * closure); static int vu_virtual_null_link (int * errn, const char * from, const char * to, void * closure); static off_t vu_virtual_null_lseek (int * errn, int fd, off_t offset, int whence, void * closure); static int vu_virtual_null_lstat (int * errn, const char * path, struct stat * buf, void * closure); static int vu_virtual_null_mkdir (int * errn, const char * path, int mode, void * closure); static int vu_virtual_null_open (int * errn, const char * path, int flags, int mode, void * closure); static int vu_virtual_null_opendir (int * errn, DIR ** retv, const char * path, void * closure); static ssize_t vu_virtual_null_read (int * errn, int fd, char * buf, size_t count, void * closure); static int vu_virtual_null_readdir (int * errn, struct alloc_limits * limits, char ** file_ret, DIR * dir, void * closure); static int vu_virtual_null_readlink (int * errn, const char * path, char * buf, int bufsize, void * closure); static int vu_virtual_null_rename (int * errn, const char * from, const char * to, void * closure); static int vu_virtual_null_rmdir (int * errn, const char * path, void * closure); static int vu_virtual_null_stat (int * errn, const char * path, struct stat * buf, void * closure); static int vu_virtual_null_symlink (int * errn, const char * from, const char * to, void * closure); static int vu_virtual_null_truncate (int * errn, const char * path, off_t where, void * closure); static int vu_virtual_null_unlink (int * errn, const char * path, void * closure); static int vu_virtual_null_utime (int * errn, const char * path, struct utimbuf * times, void * closure); static ssize_t vu_virtual_null_write (int * errn, int fd, const char * buf, size_t count, void * closure); static int vu_virtual_null_fcntl (int * errn, int fd, int cmd, long arg, void * closure); static int vu_virtual_null_dup (int * errn, int fd, void * closure); static int vu_virtual_null_dup2 (int * errn, int fd, int newfd, void * closure); static int vu_virtual_null_move_state (int * errn, int fd, int newfd, void * closure); static struct vu_fs_discipline vu_virtual_null_vtable = { VU_FS_DISCIPLINE_INITIALIZERS (vu_virtual_null_) }; /************************************************************************ *(h0 "Virtual Null File Descriptors") * * These VU functions define a trivial file system implementation in * which all functions act like the file is /dev/null but no actual * system calls are performed. * * Virtual /dev/null is considered a universally readable/writable, * permanently 0-length file whose permissions bits and ownerships can * not be changed by anyone (including root). It's access, * modification and change times are permanently 0. * * The closure for opened files is the access flags cast to * (void *). */ static t_converter fd_offset = {0}; /*(c vu_make_virtual_null_fd) * int vu_make_virtual_null_fd (int * errn, int flags); * * Return a new (pseudo) descriptor opened for * "virtual /dev/null". */ int vu_make_virtual_null_fd (int * errn, int flags) { int fd; fd = reserv_pseudo (errn, flags); if (fd >= 0) { off_t ** offset; offset = (off_t **)ar_ref (&fd_offset.void_ptr, lim_use_must_malloc, fd, sizeof (off_t)); *offset = 0; vu_set_fd_handler (fd, &vu_virtual_null_vtable, (void *)(unsigned long)flags); } return fd; } /*(c vu_make_virtual_null_fd_ge_n) * int vu_make_virtual_null_fd_ge_n (int * errn, int n, int flags); * * Return a new (pseudo) descriptor opened for * "virtual /dev/null". * * The new descriptor is greater than or equal to `n'. */ int vu_make_virtual_null_fd_ge_n (int * errn, int n, int flags) { int fd; fd = reserv_pseudo_ge_n (errn, n, flags); if (fd >= 0) { off_t ** offset; offset = (off_t **)ar_ref (&fd_offset.void_ptr, lim_use_must_malloc, fd, sizeof (off_t)); *offset = 0; vu_set_fd_handler (fd, &vu_virtual_null_vtable, (void *)(unsigned long)flags); } return fd; } static void * vu_virtual_null_make_closure (void * closure) { return closure; } static void vu_virtual_null_free_closure (void * closure) {} static int vu_virtual_null_access (int * errn, const char * path, int mode, void * closure) { if (mode & X_OK) { if (errn) *errn = EACCES; return -1; } return 0; } static int vu_virtual_null_chdir (int * errn, const char * path, void * closure) { if (errn) *errn = ENOSYS; return -1; } static int vu_virtual_null_chmod (int * errn, const char * path, int mode, void * closure) { if (errn) *errn = EPERM; return -1; } static int vu_virtual_null_chown (int * errn, const char * path, int owner, int group, void * closure) { if (errn) *errn = EPERM; return -1; } static int vu_virtual_null_chroot (int * errn, const char * path, void * closure) { if (errn) *errn = EPERM; return -1; } static int vu_virtual_null_closedir (int * errn, DIR * dir, void * closure) { if (errn) *errn = ENOTDIR; return -1; } static int vu_virtual_null_close (int * errn, int fd, void * closure) { fd_offset.off_t_ptr[fd] = 0; unreserv_pseudo (fd); return 0; } static int vu_virtual_null_fchdir (int * errn, int fd, void * closure) { if (errn) *errn = ENOSYS; return -1; } static int vu_virtual_null_fchmod (int * errn, int fd, int mode, void * closure) { if (errn) *errn = EPERM; return -1; } static int vu_virtual_null_fchown (int * errn, int fd, int owner, int group, void * closure) { if (errn) *errn = EPERM; return -1; } static int vu_virtual_null_fstat (int * errn, int fd, struct stat * buf, void * closure) { buf->st_dev = 0; buf->st_ino = 0; buf->st_mode = S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH; buf->st_nlink = 1; buf->st_uid = 0; buf->st_gid = 0; buf->st_rdev = 0; buf->st_size = 0; buf->st_blksize = 4096; buf->st_blocks = 0; buf->st_atime = 0; buf->st_mtime = 0; buf->st_ctime = 0; return 0; } static int vu_virtual_null_fsync (int * errn, int fd, void * closure) { return 0; } static int vu_virtual_null_ftruncate (int * errn, int fd, off_t where, void * closure) { if (((int)(unsigned long)closure == O_RDONLY) || (where != 0)) { if (errn) *errn = EIO; return -1; } return 0; } static int vu_virtual_null_link (int * errn, const char * from, const char * to, void * closure) { if (errn) *errn = ENOSYS; return -1; } static off_t vu_virtual_null_lseek (int * errn, int fd, off_t offset, int whence, void * closure) { switch (whence) { case SEEK_END: case SEEK_SET: if (offset < 0) { offset_error: if (errn) *errn = EINVAL; return -1; } fd_offset.off_t_ptr[fd] = offset; return offset; case SEEK_CUR: if ((fd_offset.off_t_ptr[fd] + offset) < 0) goto offset_error; fd_offset.off_t_ptr[fd] = fd_offset.off_t_ptr[fd] + offset; return fd_offset.off_t_ptr[fd]; default: if (errn) *errn = EINVAL; return -1; } } static int vu_virtual_null_lstat (int * errn, const char * path, struct stat * buf, void * closure) { return vu_virtual_null_fstat (errn, 0, buf, closure); } static int vu_virtual_null_mkdir (int * errn, const char * path, int mode, void * closure) { if (errn) *errn = ENOSYS; return -1; } static int vu_virtual_null_open (int * errn, const char * path, int flags, int mode, void * closure) { return vu_make_virtual_null_fd (errn, flags); } static int vu_virtual_null_opendir (int * errn, DIR ** retv, const char * path, void * closure) { if (errn) *errn = ENOTDIR; return -1; } static ssize_t vu_virtual_null_read (int * errn, int fd, char * buf, size_t count, void * closure) { if ((int)(unsigned long)closure == O_WRONLY) { if (errn) *errn = EBADF; return -1; } return 0; } static int vu_virtual_null_readdir (int * errn, struct alloc_limits * limits, char ** file_ret, DIR * dir, void * closure) { if (errn) *errn = ENOTDIR; return -1; } static int vu_virtual_null_readlink (int * errn, const char * path, char * buf, int bufsize, void * closure) { if (errn) *errn = EINVAL; return -1; } static int vu_virtual_null_rename (int * errn, const char * from, const char * to, void * closure) { if (errn) *errn = ENOSYS; return -1; } static int vu_virtual_null_rmdir (int * errn, const char * path, void * closure) { if (errn) *errn = ENOSYS; return -1; } static int vu_virtual_null_stat (int * errn, const char * path, struct stat * buf, void * closure) { return vu_virtual_null_fstat (errn, 0, buf, closure); } static int vu_virtual_null_symlink (int * errn, const char * from, const char * to, void * closure) { if (errn) *errn = ENOSYS; return -1; } static int vu_virtual_null_truncate (int * errn, const char * path, off_t where, void * closure) { if (where != 0) { if (errn) *errn = EIO; return -1; } return 0; } static int vu_virtual_null_unlink (int * errn, const char * path, void * closure) { if (errn) *errn = ENOSYS; return -1; } static int vu_virtual_null_utime (int * errn, const char * path, struct utimbuf * times, void * closure) { if (errn) *errn = EPERM; return -1; } static ssize_t vu_virtual_null_write (int * errn, int fd, const char * buf, size_t count, void * closure) { if ((int)(unsigned long)closure == O_RDONLY) { if (errn) *errn = EBADF; return -1; } fd_offset.off_t_ptr[fd] += count; return count; } static int vu_virtual_null_fcntl (int * errn, int fd, int cmd, long arg, void * closure) { switch (cmd) { default: if (errn) *errn = ENOSYS; return -1; case F_DUPFD: return vu_make_virtual_null_fd_ge_n (errn, arg, (int)(unsigned long)closure); case F_GETFD: return FD_CLOEXEC; case F_SETFD: if (arg != FD_CLOEXEC) { if (errn) *errn = EINVAL; return -1; } return 0; case F_GETFL: return O_NONBLOCK | (int)(unsigned long)closure; case F_SETFL: if (arg != O_NONBLOCK) { if (errn) *errn = EINVAL; return -1; } return 0; case F_GETOWN: case F_SETOWN: if (errn) *errn = EINVAL; return -1; } } static int vu_virtual_null_dup (int * errn, int fd, void * closure) { return vu_virtual_null_fcntl (errn, fd, F_DUPFD, 0, closure); } static int vu_virtual_null_dup2 (int * errn, int fd, int newfd, void * closure) { return vu_virtual_null_fcntl (errn, fd, F_DUPFD, newfd, closure); } static int vu_virtual_null_move_state (int * errn, int fd, int newfd, void * closure) { off_t ** offset_fd; off_t ** offset_newfd; if (fd == newfd) return fd; offset_fd = (off_t **)ar_ref (&fd_offset.void_ptr, lim_use_must_malloc, fd, sizeof (off_t)); offset_newfd = (off_t **)ar_ref (&fd_offset.void_ptr, lim_use_must_malloc, newfd, sizeof (off_t)); *offset_newfd = *offset_fd; vu_set_fd_handler (newfd, &vu_virtual_null_vtable, closure); return 0; } tla-1.3.5+dfsg/src/hackerlab/vu/printfmt.c0000644000175000017500000000275610457621774017130 0ustar useruser/* printfmt.c - formatted printing * **************************************************************** * Copyright (C) 1998, 2000 Thomas Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/vu/printfmt-va.h" #include "hackerlab/vu/printfmt.h" /************************************************************************ *(h0 "Formatted Printing With printfmt") * * The function `printfmt' provides the functionality of the standard * function `printf' within the context of the *VU* file system * interface. */ /*(c printfmt) * int printfmt (int * errn, int fd, const char * fmt, ...); * * Print formatted output on descriptor `fd'. * * [See the man page for `printf(3)' for a description for format * strings.] * * Extensions: * * The formatting flag '&' means to read the padding character * from the next unused argument. ' ' is the default padding * character. * * \WARNING: The implementation of this function is incomplete. * Floating point values are not handled yet, for example./ * * \WARNING: Compilers do not type check the arguments to this * function, so it is easy to make mistakes. A type-safe * interface for formatted printing is needed for a future * release./ */ int printfmt (int * errn, int fd, const char * fmt, ...) { int answer; va_list ap; va_start (ap, fmt); answer = printfmt_va_list (errn, fd, (t_uchar *)fmt, ap); va_end (ap); return answer; } tla-1.3.5+dfsg/src/hackerlab/vu/vu-utils.h0000644000175000017500000000161010457621774017046 0ustar useruser/* vu-utils.h - decls for vu helper functions * **************************************************************** * Copyright (C) 2000 Thomas Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__VU__VU_UTILS_H #define INCLUDE__VU__VU_UTILS_H #include "hackerlab/vu/vu.h" #include "hackerlab/vu/printfmt.h" #include "hackerlab/vu/vu-utils-vfdbuf.h" /* automatically generated __STDC__ prototypes */ extern int vu_file_to_string (int * errn, t_uchar ** buf, size_t * len, int fd); extern int vu_move_fd (int * errn, int fd, int newfd); extern int vu_file_is_directory (int * errn, const t_uchar * name); extern int vu_file_is_directory_following (int * errn, const t_uchar * name); #endif /* INCLUDE__VU__VU_UTILS_H */ tla-1.3.5+dfsg/src/hackerlab/vu/printfmt-va.h0000644000175000017500000000112610457621774017527 0ustar useruser/* printfmt-va.h - decls for varargs formatted printing * **************************************************************** * Copyright (C) 2000 Thomas Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__VU__PRINTFMT_VA_H #define INCLUDE__VU__PRINTFMT_VA_H #include "hackerlab/machine/types.h" #include "hackerlab/os/stdarg.h" /* automatically generated __STDC__ prototypes */ extern int printfmt_va_list (int * errn, int fd, const t_uchar * fmt, va_list ap); #endif /* INCLUDE__VU__PRINTFMT_VA_H */ tla-1.3.5+dfsg/src/hackerlab/vu/vu-pathcompress.c0000644000175000017500000003762210457621774020425 0ustar useruser#include #include #include #ifdef __CYGWIN__ #include #endif #include "hackerlab/vu/vu.h" #include "hackerlab/vu/vu-sys.h" #include "hackerlab/char/str.h" #define DEBUG 0 #if DEBUG #define Dprintf printf #else #define Dprintf do_nothing #endif #include "pathcompress.c" #define NUM_INFO 1024 struct pathcompress_info { DIR* dir; char* comp_dir; char* uncomp_dir; } pathcompress_info[NUM_INFO]; int pathcompress_numinfo = 0; struct pathcompress_info* pathcompress_grab_info() { struct pathcompress_info* p = NULL; int i; for (i=0 ; idir == NULL) { memset(p, 0, sizeof(*p)); return p; } } p = &pathcompress_info[pathcompress_numinfo++]; memset(p, 0, sizeof(*p)); return p; } struct pathcompress_info* pathcompress_find_info(DIR* dir) { struct pathcompress_info* p = NULL; int i; for (i=0 ; idir == dir) { return p; } } return NULL; } void pathcompress_free_info(DIR* dir) { struct pathcompress_info* p = NULL; int i; for (i=0 ; idir == dir) { p->dir = NULL; if (i == pathcompress_numinfo-1) { pathcompress_numinfo--; } } } } void* pathcompress_make_closure(void * closure) { //Dprintf("pathcompress_make_closure(%p)\n", closure); return vu_sys_make_closure(closure); } void pathcompress_free_closure(void * closure) { //Dprintf("pathcompress_free_closure(%p)\n", closure); vu_sys_free_closure(closure); } int pathcompress_access(int* errn, char* path, int mode, void* closure) { int rvl; char compressed_path[PATH_LEN]=""; Dprintf("pathcompress_access(%s,%x)",path,mode); pathcompress_compress_path(path, compressed_path); rvl = vu_sys_access(errn, compressed_path, mode, closure); Dprintf("=%d\n", rvl); return rvl; } int pathcompress_chdir(int * errn, char * path, void * closure) { int rvl; char compressed_path[PATH_LEN]=""; Dprintf("pathcompress_chdir(%s)", path); pathcompress_compress_path(path, compressed_path); rvl = vu_sys_chdir(errn, compressed_path, closure); Dprintf("=%d\n", rvl); return rvl; } int pathcompress_chmod(int * errn, char * path, int mode, void * closure) { int rvl; char compressed_path[PATH_LEN]=""; Dprintf("pathcompress_chmod(%s,0%o)", path, mode); pathcompress_compress_path(path, compressed_path); rvl = vu_sys_chmod(errn, compressed_path, mode, closure); Dprintf("=%d\n", rvl); return rvl; } int pathcompress_chown(int * errn, char * path, int owner, int group, void * closure) { int rvl; char compressed_path[PATH_LEN]=""; Dprintf("pathcompress_chown(%s,%d,%d)", path, owner, group); pathcompress_compress_path(path, compressed_path); rvl = vu_sys_chown(errn, compressed_path, owner, group, closure); Dprintf("=%d\n", rvl); return rvl; } int pathcompress_chroot(int * errn, char * path, void * closure) { int rvl; char compressed_path[PATH_LEN]=""; Dprintf("pathcompress_chroot(%s)", path); pathcompress_compress_path(path, compressed_path); rvl = vu_sys_chroot(errn, compressed_path, closure); Dprintf("=%d\n", rvl); return rvl; } int pathcompress_closedir(int * errn, DIR * dir, void * closure) { int rvl; struct pathcompress_info* p; Dprintf("pathcompress_closedir(%p)", dir); p = pathcompress_find_info(dir); if (p->uncomp_dir != NULL) { lim_free(0, p->uncomp_dir); p->uncomp_dir = NULL; } if (p->comp_dir != NULL) { lim_free(0, p->comp_dir); p->comp_dir = NULL; } pathcompress_free_info(dir); rvl = vu_sys_closedir(errn, dir, closure); Dprintf("=%d\n", rvl); return rvl; } int pathcompress_close(int * errn, int fd, void * closure) { int rvl; Dprintf("pathcompress_close(%d)", fd); rvl = vu_sys_close(errn, fd, closure); Dprintf("=%d\n", rvl); return rvl; } int pathcompress_fchdir(int * errn, int fd, void * closure) { int rvl; Dprintf("pathcompress_fchdir(%d)", fd); rvl = vu_sys_fchdir(errn, fd, closure); Dprintf("=%d\n", rvl); return rvl; } int pathcompress_fchmod(int * errn, int fd, int mode, void * closure) { int rvl; Dprintf("pathcompress_fchmod(%d,%x)", fd, mode); rvl = vu_sys_fchmod(errn, fd, mode, closure); Dprintf("=%d\n", rvl); return rvl; } int pathcompress_fchown(int * errn, int fd, int owner, int group, void * closure) { int rvl; Dprintf("pathcompress_fchown(%d,%d,%d)", fd, owner, group); rvl = vu_sys_fchown(errn, fd, owner, group, closure); Dprintf("=%d\n", rvl); return rvl; } int pathcompress_fstat(int * errn, int fd, struct stat * buf, void * closure) { int rvl; Dprintf("pathcompress_fstat(%d,%p)", fd, buf); rvl = vu_sys_fstat(errn, fd, buf, closure); Dprintf("=%d\n", rvl); return rvl; } int pathcompress_fsync(int * errn, int fd, void * closure) { int rvl; Dprintf("pathcompress_fsync(%d)", fd); rvl = vu_sys_fsync(errn, fd, closure); Dprintf("=%d\n", rvl); return rvl; } int pathcompress_ftruncate(int * errn, int fd, off_t where, void * closure) { int rvl; Dprintf("pathcompress_ftruncate(%d,%d)", fd, (int)where); rvl = vu_sys_ftruncate(errn, fd, where, closure); Dprintf("=%d\n", rvl); return rvl; } int pathcompress_getcwd(char* cwd, size_t size) { char wd[PATH_LEN]=""; char compressed_wd[PATH_LEN]=""; char* c; int rvl; int len; Dprintf("pathcompress_getcwd(%p, %d)", cwd, size); c = getcwd(compressed_wd, sizeof(compressed_wd)); if (c == NULL) { rvl = -1; } else { if (pathcompress_uncompress_path(compressed_wd, wd)==NULL) { rvl = -1; } else { len = strlen(wd); if (strlen(wd)>size-1) { errno = ERANGE; rvl = 0; } else { strcpy(cwd, wd); rvl = 1; } } } Dprintf("=%d '%s'\n", rvl, cwd); return rvl; } int pathcompress_link(int * errn, char * from, char * to, void * closure) { int rvl; char compressed_from[PATH_LEN]=""; char compressed_to[PATH_LEN]=""; Dprintf("pathcompress_link(%s,%s)", from, to); pathcompress_compress_path(from, compressed_from); pathcompress_compress_path(to, compressed_to); rvl = vu_sys_link(errn, compressed_from, compressed_to, closure); Dprintf("=%d\n", rvl); return rvl; } off_t pathcompress_lseek(int * errn, int fd, off_t offset, int whence, void * closure) { int rvl; Dprintf("pathcompress_lseek(%d,%d,%d)", fd, (int)offset, whence); rvl = vu_sys_lseek(errn, fd,offset, whence, closure); Dprintf("=%d\n", rvl); return rvl; } int pathcompress_lstat(int * errn, char * path, struct stat * buf, void * closure) { int rvl; char compressed_path[PATH_LEN]=""; char* cpath; Dprintf("pathcompress_lstat(%s,%p)", path, buf); cpath = pathcompress_compress_path(path, compressed_path); if (cpath != NULL) { rvl = vu_sys_lstat(errn, cpath, buf, closure); } else { *errn = ENOENT; rvl = -1; } Dprintf("=%d\n", rvl); return rvl; } int pathcompress_mkdir(int * errn, char * path, int mode, void * closure) { int rvl; char abspath[PATH_LEN]=""; char compressed_path[PATH_LEN]=""; Dprintf("pathcompress_mkdir(%s,0%o)", path, mode); pathcompress_add_path(path, abspath); //printf("abspath(%s)\n", abspath); pathcompress_compress_path(path, compressed_path); //printf("compressed(%s)\n", path); rvl = vu_sys_mkdir(errn, compressed_path, mode, closure); if (rvl == 0) { pathcompress_add_pathid(path); } Dprintf("=%d\n", rvl); return rvl; } int pathcompress_open(int * errn, char * path, int flags, int mode, void * closure) { int rvl; char* p; char* q; char intermediary[PATH_LEN]=""; char compressed_intermediary[PATH_LEN]=""; char compressed_path[PATH_LEN]=""; struct stat buf; int err; p = path; q = intermediary; //we might need to create intermediary directories... if ((flags & O_CREAT) == O_CREAT) { //printf("pathcompress_open(%s)\n", path); if (*p == '/') { *q++ = *p++; } while (*p != '\0') { while ((*p != '/') && (*p != '\0')) { *q++ = *p++; } //printf("p=%x p=%s\n", *p, p); *q = '\0'; if (*p == '/') { pathcompress_compress_path(intermediary, compressed_intermediary); //printf("intermediary(%s) p=%s c=%s\n", intermediary, p, compressed_intermediary); rvl = stat(compressed_intermediary, &buf); //printf("stat(%s)=%d\n", compressed, rvl); if (rvl!=0) { //printf("create(%s)\n", compressed); pathcompress_mkdir(&err, intermediary, 0777, closure); //printf("created(%s)\n", compressed); } *q++=*p++; } } } pathcompress_compress_path(path, compressed_path); #ifdef __CYGWIN__ Dprintf("pathcompress_open(%s,0x%x,0%03o)", compressed_path, flags, mode); rvl = vu_sys_open(errn, compressed_path, flags | O_BINARY, mode, closure); Dprintf("=%d\n", rvl); return rvl; #endif return 0; } int pathcompress_opendir(int * errn, DIR ** retv, char * path, void * closure) { int rvl; char compressed_path[PATH_LEN]=""; struct pathcompress_info* p; p = pathcompress_grab_info(); p->uncomp_dir = str_save(0, path); Dprintf("pathcompress_opendir(%p,%s)", retv, path); pathcompress_compress_path(path, compressed_path); p->comp_dir = str_save(0, compressed_path); Dprintf("pathcompress_opendir(%p,%s)", retv, compressed_path); rvl = vu_sys_opendir(errn, retv, compressed_path, closure); p->dir = *retv; Dprintf("=%d\n", rvl); return rvl; } ssize_t pathcompress_read(int * errn, int fd, char * buf, size_t count, void * closure) { int rvl; Dprintf("pathcompress_read(%d,%p,%d)", fd, buf, count); rvl = vu_sys_read(errn, fd, buf, count, closure); Dprintf("=%d\n", rvl); return rvl; } int pathcompress_readdir(int * errn, struct alloc_limits * limits, char ** file_ret, DIR * dir, void * closure) { struct pathcompress_info* p = pathcompress_find_info(dir); int rvl; char* path; char abspath[PATH_LEN]=""; int err; struct stat stat; char uncompressed_path[PATH_LEN]=""; //Dprintf("pathcompress_readdir(%p,%p,%p)", limits, file_ret, dir); p = pathcompress_find_info(dir); Dprintf("pathcompress_readdir(%s)", p->uncomp_dir); next: rvl = vu_sys_readdir(errn, limits, file_ret, dir, closure); if (rvl < 0) { goto exit; } path = *file_ret; if (strcmp(path,".")==0 || strcmp(path, "..")==0) { goto exit; } sprintf(abspath, "%s/%s", p->comp_dir, path); vu_sys_stat(&err, abspath, &stat, NULL); if (!S_ISDIR(stat.st_mode)) { //printf("[NOTDIR st_mode=%x]", stat.st_mode); goto exit; } pathcompress_uncompress_path(abspath, uncompressed_path); /* printf("\nuncompressed: %s\n", uncompressed_path); printf("uncomp_dir: %s\n", p->uncomp_dir); printf("comp_dir: %s\n", p->comp_dir); printf("norm_dir: %s\n", p->norm_dir); */ path = &uncompressed_path[strlen(uncompressed_path)]; while (path[-1] != '/') path--; lim_free(0, *file_ret); *file_ret = str_save(0, path); exit: if (rvl==0) { Dprintf("=%d (%s)\n", rvl, *file_ret); } else { Dprintf("=%d\n", rvl); } return rvl; } int pathcompress_readlink(int * errn, char * path, char * buf, int bufsize, void * closure) { int rvl; char compressed_path[PATH_LEN]=""; Dprintf("pathcompress_readlink(%s,%p,%d)", path, buf, bufsize); pathcompress_compress_path(path, compressed_path); rvl = vu_sys_readlink(errn, compressed_path, buf, bufsize, closure); Dprintf("=%d\n", rvl); return rvl; } int pathcompress_rename(int * errn, char * from, char * to, void * closure) { struct stat stat; int err; int rvl; char abspath[PATH_LEN]=""; char cwd[PATH_LEN]=""; char compressed_from[PATH_LEN]=""; char compressed_to[PATH_LEN]=""; getcwd(cwd, sizeof(cwd)); if (*from != '/') { Dprintf("pathcompress_rename([cwd=%s]'%s','%s')\n", cwd, from, to); } else { Dprintf("pathcompress_rename('%s','%s')\n", from, to); } pathcompress_compress_path(from, compressed_from); pathcompress_compress_path(to, compressed_to); vu_sys_stat(&err, compressed_from, &stat, NULL); if (S_ISDIR(stat.st_mode)) { pathcompress_add_path(to, abspath); //to = abspath; pathcompress_compress_path(to, compressed_to); //printf("cmp(\na=%s\nc=%s\n)=%d\n", abspath, compressed_to, strcmp(abspath, compressed_to)); } Dprintf("pathcompress_rename('%s','%s')", compressed_from, compressed_to); rvl = vu_sys_rename(errn, compressed_from, compressed_to, closure); if (rvl != 0) { Dprintf("=%d, err=%d\n", rvl, *errn); } pathcompress_remove_path(from); pathcompress_update_pathid(to); return rvl; } int pathcompress_rmdir(int * errn, char * path, void * closure) { int rvl; char dirnames[PATH_LEN]=""; char compressed_path[PATH_LEN]=""; pathcompress_compress_path(path, compressed_path); Dprintf("pathcompress_rmdir(%s)", compressed_path); rvl = vu_sys_rmdir(errn, compressed_path, closure); pathcompress_remove_path(path); Dprintf("=%d\n", rvl); return rvl; } int pathcompress_stat(int * errn, char * path, struct stat * buf, void * closure) { int rvl; char compressed_path[PATH_LEN]=""; char* cpath; Dprintf("pathcompress_stat(%s,%p)", path, buf); cpath = pathcompress_compress_path(path, compressed_path); //Dprintf("pathcompress_stat(%s,%p)", compressed_path, buf); if (cpath != NULL) { rvl = vu_sys_stat(errn, compressed_path, buf, closure); } else { *errn = ENOENT; rvl = -1; } Dprintf("=%d\n", rvl); return rvl; } int pathcompress_symlink(int * errn, char * from, char * to, void * closure) { int rvl; char compressed_from[PATH_LEN]=""; char compressed_to[PATH_LEN]=""; Dprintf("pathcompress_symlink(%s,%s)", from, to); pathcompress_compress_path(from, compressed_from); pathcompress_compress_path(to, compressed_to); rvl = vu_sys_symlink(errn, compressed_from, compressed_to, closure); Dprintf("=%d\n", rvl); return rvl; } int pathcompress_truncate(int * errn, char * path, off_t where, void * closure) { int rvl; char compressed_path[PATH_LEN]=""; pathcompress_compress_path(path, compressed_path); Dprintf("pathcompress_truncate(%s,%d)", compressed_path, (int)where); rvl = vu_sys_truncate(errn, compressed_path, where, closure); Dprintf("=%d\n", rvl); return rvl; } int pathcompress_unlink(int * errn, char * path, void * closure) { int rvl; char compressed_path[PATH_LEN]=""; pathcompress_compress_path(path, compressed_path); Dprintf("pathcompress_unlink(%s)", compressed_path); rvl = vu_sys_unlink(errn, compressed_path, closure); Dprintf("=%d\n", rvl); return rvl; } int pathcompress_utime(int * errn, char * path, struct utimbuf * times, void * closure) { int rvl; char compressed_path[PATH_LEN]=""; pathcompress_compress_path(path, compressed_path); Dprintf("pathcompress_utime(%s,%p)", compressed_path, times); rvl = vu_sys_utime(errn, compressed_path, times, closure); Dprintf("=%d\n", rvl); return rvl; } ssize_t pathcompress_write(int * errn, int fd, char * buf, size_t count, void * closure) { int rvl; Dprintf("pathcompress_write(%d,%p,%d)", fd, buf, count); rvl = vu_sys_write(errn, fd, buf, count, closure); Dprintf("=%d\n", rvl); return rvl; } int pathcompress_fcntl(int * errn, int fd, int cmd, long arg, void * closure) { int rvl; Dprintf("pathcompress_fcntl(%d,0x%x,%ld)", fd, cmd, arg); rvl = vu_sys_fcntl(errn, fd, cmd, arg, closure); Dprintf("=%d\n", rvl); return rvl; } int pathcompress_dup(int * errn, int fd, void * closure) { int rvl; Dprintf("pathcompress_dup(%d)", fd); rvl = vu_sys_dup(errn, fd, closure); Dprintf("=%d\n", rvl); return rvl; } int pathcompress_dup2(int * errn, int fd, int newfd, void * closure) { int rvl; Dprintf("pathcompress_dup2(%d,%d)", fd, newfd); rvl = vu_sys_dup2(errn, fd, newfd, closure); Dprintf("=%d\n", rvl); return rvl; } int pathcompress_move_state(int * errn, int fd, int newfd, void * closure) { int rvl; Dprintf("pathcompress_move_state(%d,%d)", fd, newfd); rvl = vu_sys_move_state(errn, fd, newfd, closure); Dprintf("=%d\n", rvl); return rvl; } struct vu_fs_discipline pathcompress_fs_vtable = { VU_FS_DISCIPLINE_INITIALIZERS (pathcompress_) }; tla-1.3.5+dfsg/src/hackerlab/vu/safe-printfmt.h0000644000175000017500000000160210457621774020036 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:41:39 2001 (safe-printfmt.h) */ /* safe-printfmt.h - * **************************************************************** * Copyright (C) 2000 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__VU__SAFE_PRINTFMT_H #define INCLUDE__VU__SAFE_PRINTFMT_H #include "hackerlab/vu/printfmt.h" #if !defined(__GNUC__) # undef __attribute__ # define __attribute__(X) #endif extern void safe_printfmt (int fd, const char * fmt, ...) __attribute__((format (printf, 2, 3))); /* automatically generated __STDC__ prototypes */ extern void safe_printfmt (int fd, const char * fmt, ...); extern void safe_printfmt_va_list (int fd, const char * fmt, va_list ap); #endif /* INCLUDE__VU__SAFE_PRINTFMT_H */ tla-1.3.5+dfsg/src/hackerlab/vu/vu-dash.c0000644000175000017500000000750310457621774016627 0ustar useruser/* vu-dash.c - the dash (stdin/stdout) file system * **************************************************************** * Copyright (C) 1999, 2000 Thomas Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/os/errno.h" #include "hackerlab/bugs/panic.h" #include "hackerlab/rx-posix/regexps.h" #include "hackerlab/vu/vu.h" #include "hackerlab/vu/vu-sys.h" #include "hackerlab/vu/vu-dash.h" /* __STDC__ prototypes for static functions */ static int vu_dash_open (int * errn, const char * path, int flags, int mode, void * closure); static struct vu_fs_discipline vu_dash_vtable; /************************************************************************ *(h0 "A VU Name Handler for Standard Input and Output") * * These functions provide a VU namespace handler for file names matching * the regexp: * * ^-$ * * When opened for `O_RDONLY' access, `"-"' refers to descriptor 0. * * When opened for `O_WRONLY' access, `"-"' refers to descriptor 1. * * The file `"-"' may not be opened for `O_RDWR' access. */ /*(c vu_push_dash_handler) * void vu_push_dash_handler (int is_optional); * * Establish a VU namespace handler for file-names matching the * regexp: * * ^-$ * * * When opened for `O_RDONLY' access, `"-"' refers to descriptor 0. * * When opened for `O_WRONLY' access, `"-"' refers to descriptor 1. * * The file `"-"' may not be opened for `O_RDWR' access. * * If the flag `is_optional' is 0, the namespace handler is simply * installed. If it is not 0, the handler is registered under the * name `"fd"', but not installed. * * (See xref:"vu_enable_optional_name_handler".) */ void vu_push_dash_handler (int is_optional) { static int initialized = 0; static regex_t rgx; static const t_uchar * doc[] = { "-", "Standard input or output.", 0 }; if (!initialized) { if (0 > regcomp (&rgx, "^-$", 0)) panic ("unable to compile regexp"); initialized = 1; } vu_push_name_handler ("standard files", doc, &rgx, 0, &vu_dash_vtable, 0, is_optional); } static int vu_dash_open (int * errn, const char * path, int flags, int mode, void * closure) { switch (flags & O_ACCMODE) { case O_RDONLY: return 0; case O_WRONLY: return 1; default: if (errn) *errn = EINVAL; return -1; } } #define vu_dash_make_closure vu_sys_make_closure #define vu_dash_free_closure vu_sys_free_closure #define vu_dash_access vu_sys_access #define vu_dash_chdir vu_sys_chdir #define vu_dash_chmod vu_sys_chmod #define vu_dash_chown vu_sys_chown #define vu_dash_chroot vu_sys_chroot #define vu_dash_close vu_sys_close #define vu_dash_closedir vu_sys_closedir #define vu_dash_fchdir vu_sys_fchdir #define vu_dash_fchmod vu_sys_fchmod #define vu_dash_fchown vu_sys_fchown #define vu_dash_fstat vu_sys_fstat #define vu_dash_fsync vu_sys_fsync #define vu_dash_ftruncate vu_sys_ftruncate #define vu_dash_link vu_sys_link #define vu_dash_lseek vu_sys_lseek #define vu_dash_lstat vu_sys_lstat #define vu_dash_mkdir vu_sys_mkdir #define vu_dash_opendir vu_sys_opendir #define vu_dash_read vu_sys_read #define vu_dash_readdir vu_sys_readdir #define vu_dash_readlink vu_sys_readlink #define vu_dash_rename vu_sys_rename #define vu_dash_rmdir vu_sys_rmdir #define vu_dash_stat vu_sys_stat #define vu_dash_symlink vu_sys_symlink #define vu_dash_telldir vu_sys_telldir #define vu_dash_truncate vu_sys_truncate #define vu_dash_unlink vu_sys_unlink #define vu_dash_utime vu_sys_utime #define vu_dash_write vu_sys_write #define vu_dash_fcntl vu_sys_fcntl #define vu_dash_dup vu_sys_dup #define vu_dash_dup2 vu_sys_dup2 #define vu_dash_move_state vu_sys_move_state static struct vu_fs_discipline vu_dash_vtable = { VU_FS_DISCIPLINE_INITIALIZERS (vu_dash_) }; tla-1.3.5+dfsg/src/hackerlab/vu/pathcompress.c0000644000175000017500000001202710457621774017765 0ustar useruser#ifdef __CYGWIN__ #include #endif #include #include #include #include #include #define LOG 0 #include "pathcompress.h" inline void do_nothing(char* fmt, ...) { } #ifndef Dprintf #define DEBUG 0 #if DEBUG #define Dprintf printf #else #define Dprintf do_nothing #endif #endif #if 1 #define DDprintf Dprintf #else #define DDprintf do_nothing #endif #if LOG FILE* log = NULL; #endif #define PATH_LEN 2048 char pathcompress_cwd[PATH_LEN]; char* pathcompress_working_dir(char *p) { if ( (p[0]=='.' && p[1]=='/') || (p[0]=='.' && p[1]=='.' && p[2]=='/') || (p[0]!='/') ) { getcwd(pathcompress_cwd, sizeof(pathcompress_cwd)); sprintf(pathcompress_cwd+strlen(pathcompress_cwd), "/"); } else { sprintf(pathcompress_cwd, "%s", ""); } //Dprintf("pathcompress_working_dir(%s)=%s\n", p, pathcompress_cwd); return pathcompress_cwd; } int pathcompress_find_name(char* wd, char* filename, char* shortname, char* longname) { #ifdef __CYGWIN__ WIN32_FIND_DATA finddata; HANDLE hFind; char path[PATH_LEN]; char win32_path[PATH_LEN]; if (wd[strlen(wd)-1]!='/') { sprintf(path, "%s/%s", wd, filename); } else { sprintf(path, "%s%s", wd, filename); } cygwin_conv_to_full_win32_path(path, win32_path); //Dprintf("win32_path = %s\n", win32_path); hFind = FindFirstFile(win32_path, &finddata); if (hFind != INVALID_HANDLE_VALUE) { if (shortname != NULL) { if (finddata.cAlternateFileName[0] != '\0') { sprintf(shortname, "%s", finddata.cAlternateFileName); } else { sprintf(shortname, "%s", filename); } Dprintf("=%s\n", shortname); } if (longname != NULL) { sprintf(longname, finddata.cFileName); Dprintf("=%s\n", longname); } FindClose(hFind); return 1; } else { if (shortname != NULL) { sprintf(shortname, "%s", filename); } if (longname != NULL) { sprintf(longname, "%s", filename); } Dprintf("=NULL"); return 1; } #endif return 0; /* not implemented */ } int pathcompress_find_shortname(char* wd, char* filename, char* shortname) { //Dprintf("pathcompress_find_shortname(%s,%s)", wd, filename); return pathcompress_find_name(wd, filename, shortname, NULL); } int pathcompress_find_longname(char* wd, char* filename, char* longname) { //Dprintf("pathcompress_find_longname(%s,%s)", wd, filename); return pathcompress_find_name(wd, filename, NULL, longname); } char* pathcompress_process_path(char* path, char* compressed, char* uncompressed) { char compressed_wd[PATH_LEN]; char compressed_path[PATH_LEN]=""; char uncompressed_path[PATH_LEN]=""; char filename[PATH_LEN]; char longname[PATH_LEN]; char shortname[PATH_LEN]; char* c = compressed; char* u = uncompressed; char* p = path; char* f; char* w; char* wd; int compressing = compressed == NULL?0:1; if (c == NULL) c = compressed_path; if (u == NULL) u = uncompressed_path; wd = pathcompress_working_dir(path); w = compressed_wd; w += sprintf(w, "%s", wd); *w = '\0'; while (*p != '\0') { f = filename; if ((p[0] == '.') && (p[1] == '.') && ((p[2] == '\0') || (p[2] == '/'))) { *u++ = *c++ = *p++; *u++ = *c++ = *p++; *u++ = *c++ = *p++; while ((w[-1] != '/' ) && (w > compressed_wd)) { w--; } *u = *c = *w = '\0'; continue; } else if ((p[0] == '.') && (p[1] == '/')) { *u++ = *c++ = *p++; *u++ = *c++ = *p++; *u = *c = '\0'; continue; } else if ((p[0] == '.') && (p[1] == '\0')){ *u++ = *c++ = *w++ = *p++; *u = *c = *w = '\0'; continue; } else if (p[0] == '/') { while (p[1] == '/') p++; *u++ = *c++ = *w++ = *p++; *u = *c = *w = '\0'; continue; } while ((*p != '/') && (*p != '\0')) { *f++ = *p++; } *f = '\0'; if (compressing) { if (pathcompress_find_shortname(compressed_wd, filename, shortname)) { c += sprintf(c, "%s", shortname); w += sprintf(w, "%s", shortname); u += sprintf(w, "%s", filename); *u = *c = *w = '\0'; } } else { if (pathcompress_find_longname(compressed_wd, filename, longname)) { c += sprintf(c, "%s", filename); u += sprintf(u, "%s", longname); w += sprintf(w, "%s", filename); *u = *c = *w = '\0'; } } } Dprintf("=%s", compressed==NULL?uncompressed:compressed); if (compressed == NULL) { return uncompressed; } else if (strlen(compressed)>240) { return NULL; } else { return compressed; } } char* pathcompress_uncompress_path(char* path, char* uncompressed) { Dprintf("pathcompress_uncompress_path(%s)", path); return pathcompress_process_path(path, NULL, uncompressed); } char* pathcompress_compress_path(char* path, char* compressed) { Dprintf("pathcompress_compress_path(%s)", path); return pathcompress_process_path(path, compressed, NULL); } void pathcompress_add_path(char* path, char* abspath) { } void pathcompress_remove_path(char* path) { } void pathcompress_add_pathid(char* path) { } void pathcompress_update_pathid(char* path) { } tla-1.3.5+dfsg/src/hackerlab/graphs/0000755000175000017500000000000010457621774015741 5ustar userusertla-1.3.5+dfsg/src/hackerlab/graphs/node-set.c0000644000175000017500000003342710457621774017634 0ustar useruser/* node-set.c: * **************************************************************** * Copyright (C) 2004 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/mem/mem.h" #include "hackerlab/handles/handle.h" #include "hackerlab/graphs/node-set.h" /* __STDC__ prototypes for static functions */ static t_obnode * obnode__n (t_obnode_set * os, alloc_limits limits, ssize_t n); static int obnode__insert_edge (t_obnode_set * os, alloc_limits limits, ssize_t source_node, ssize_t out_edge_slot, ssize_t dest_node); static int obnode__delete_edge (t_obnode_set * os, alloc_limits limits, ssize_t source_node, ssize_t out_edge_slot); static ssize_t obnode__add_in_edge (t_obnode_set * os, alloc_limits limits, ssize_t source_node, ssize_t out_edge_slot, ssize_t dest_node); static int obnode__remove_in_edge (t_obnode_set * os, alloc_limits limits, ssize_t source_node, ssize_t out_edge_slot, ssize_t dest_node); static int in_edge_cmp (void * va, void * vb, void * ign); int init_obnode_set (t_obnode_set * os, alloc_limits limits, ssize_t representation_type) { if (!os) return -1; mem_set0 ((t_uchar *)os, sizeof (*os)); if (0 > init_obtable (&os->_obnodes, limits, sizeof (t_obnode), 0, 0)) return -1; if (0 > init_property_table (&os->_property_table, limits)) return -1; if (representation_type > 0) { os->_representation_type = representation_type; } else { os->_representation_type = property_representation_id ((void *)init_obnode_set); if (os->_representation_type <= 0) return -1; } return 0; } int uninit_obnode_set (t_obnode_set * os, alloc_limits limits) { ssize_t bound; ssize_t x; if (!os) return 0; bound = obtable_room (&os->_obnodes, limits, sizeof (t_obnode), 0, 0); for (x = 0; x < bound; ++x) { t_obnode * node; node = (t_obnode *)obtable_ref (&os->_obnodes, limits, sizeof (t_obnode), 0, 0, x); if ( node && (0 <= node->_handle_set) && (0 > free_handle_set (node->_handle_set))) return -1; node->_handle_set = -1; uninit_oblist (&node->_out_edges, limits, sizeof (t_obnode_out_edge), 0, 0); uninit_oblist (&node->_in_edges, limits, sizeof (t_obnode_in_edge), 0, 0); } uninit_obtable (&os->_obnodes, limits, sizeof (t_obnode), 0, 0); if (0 > uninit_property_table (&os->_property_table, limits)) return -1; mem_set0 ((t_uchar *)os, sizeof (*os)); return 0; } ssize_t obnode_set_n_nodes (t_obnode_set * os, alloc_limits limits) { if (!os) return 0; return obtable_n_elts (&os->_obnodes, limits, sizeof (t_obnode), 0, 0); } ssize_t obnode_set_alloc_node (t_obnode_set * os, alloc_limits limits) { ssize_t answer; if (!os) return 0; answer = obtable_alloc (&os->_obnodes, limits, sizeof (t_obnode), 0, 0); if (answer >= 0) { t_obnode * node; node = (t_obnode *)obtable_ref (&os->_obnodes, limits, sizeof (t_obnode), 0, 0, answer); if (!node) return -1; if (0 > obnode_set__init_node (node, os, limits, answer)) { obtable_free (&os->_obnodes, limits, sizeof (t_obnode), 0, 0, answer); return -1; } } return answer; } int obnode_set_free_node (t_obnode_set * os, alloc_limits limits, ssize_t id) { t_obnode * node; node = (t_obnode *)obtable_ref (&os->_obnodes, limits, sizeof (t_obnode), 0, 0, id); if (!node) return -1; if ( (node->_handle_set >= 0) && (0 > free_handle_set (node->_handle_set))) return -1; node->_handle_set = -1; while (0 < obnode_n_subnodes (os, limits, id)) { if (0 > obnode_delete_edge (os, limits, id, 0)) return -1; } while (0 < obnode_n_parent_nodes (os, limits, id)) { ssize_t source_id; ssize_t edge_slot; source_id = obnode_parent_data_k (&edge_slot, os, limits, id, 0); if (source_id < 0) return -1; if (0 > obnode_delete_edge (os, limits, source_id, edge_slot)) return -1; } obtable_free (&os->_obnodes, limits, sizeof (t_obnode), 0, 0, id); return 0; } int obnode_set__init_node (t_obnode * node, t_obnode_set * os, alloc_limits limits, ssize_t id) { if (!node) return -1; node->_handle_set = -1; if (0 < init_oblist (&node->_out_edges, limits, sizeof (t_obnode_out_edge), 0, 0)) return -1; if (0 < init_oblist (&node->_in_edges, limits, sizeof (t_obnode_in_edge), 0, 0)) return -1; return 0; } static t_obnode * obnode__n (t_obnode_set * os, alloc_limits limits, ssize_t n) { if (!os) return 0; else return (t_obnode *)obtable_ref (&os->_obnodes, limits, sizeof (t_obnode), 0, 0, n); } ssize_t obnode_n_subnodes (t_obnode_set * os, alloc_limits limits, ssize_t n) { t_obnode * node; node = obnode__n (os, limits, n); if (!node) return -1; else return oblist_size (&node->_out_edges, limits, sizeof (t_obnode_out_edge), 0, 0); } t_obnode_out_edge * obnode__subnode_k (t_obnode_set * os, alloc_limits limits, ssize_t n, ssize_t k) { t_obnode * node; node = obnode__n (os, limits, n); if (!node) return 0; else return (t_obnode_out_edge *)oblist_burst (0, &node->_out_edges, limits, sizeof (t_obnode_out_edge), 0, 0, k, 1); } ssize_t obnode_subnode_data_k (t_obnode_set * os, alloc_limits limits, ssize_t n, ssize_t k) { t_obnode * node; node = obnode__n (os, limits, n); if (!node) return -1; else { t_obnode_out_edge * edge; edge = (t_obnode_out_edge *)oblist_burst (0, &node->_out_edges, limits, sizeof (t_obnode_out_edge), 0, 0, k, 1); if (!edge) return -1; else return edge->_dest_node; } } ssize_t obnode_n_parent_nodes (t_obnode_set * os, alloc_limits limits, ssize_t n) { t_obnode * node; node = obnode__n (os, limits, n); if (!node) return -1; else return oblist_size (&node->_in_edges, limits, sizeof (t_obnode_in_edge), 0, 0); } t_obnode_in_edge * obnode__parent_k (t_obnode_set * os, alloc_limits limits, ssize_t n, ssize_t k) { t_obnode * node; node = obnode__n (os, limits, n); if (!node) return 0; else return (t_obnode_in_edge *)oblist_burst (0, &node->_in_edges, limits, sizeof (t_obnode_in_edge), 0, 0, k, 1); } ssize_t obnode_parent_data_k (ssize_t * out_edge_slot, t_obnode_set * os, alloc_limits limits, ssize_t n, ssize_t k) { t_obnode * node; node = obnode__n (os, limits, n); if (!node) { if (out_edge_slot) *out_edge_slot = -1; return -1; } else { t_obnode_in_edge * edge; edge = (t_obnode_in_edge *)oblist_burst (0, &node->_in_edges, limits, sizeof (t_obnode_in_edge), 0, 0, k, 1); if (!edge) { if (out_edge_slot) *out_edge_slot = -1; return -1; } else { if (out_edge_slot) *out_edge_slot = edge->_out_edge_slot; return edge->_source_node; } } } static int obnode__insert_edge (t_obnode_set * os, alloc_limits limits, ssize_t source_node, ssize_t out_edge_slot, ssize_t dest_node) { t_obnode * snode; ssize_t n_out_edges; ssize_t x; t_obnode_out_edge * e; snode = obnode__n (os, limits, source_node); if (!snode) return -1; n_out_edges = oblist_size (&snode->_out_edges, limits, sizeof (t_obnode_out_edge), 0, 0); for (x = out_edge_slot; x < n_out_edges; ++x) { ssize_t subnode; subnode = obnode_subnode_data_k (os, limits, source_node, x); if (0 > obnode__remove_in_edge (os, limits, source_node, x, subnode)) return -1; if (0 > obnode__add_in_edge (os, limits, source_node, x + 1, subnode)) return -1; } if (0 > oblist_insert_n (&snode->_out_edges, limits, sizeof (t_obnode_out_edge), 0, 0, out_edge_slot, 1, 0)) return -1; e = (t_obnode_out_edge *)oblist_burst (0, &snode->_out_edges, limits, sizeof (t_obnode_out_edge), 0, 0, out_edge_slot, 1); if (!e) return -1; e->_dest_node = dest_node; if (0 > obnode__add_in_edge (os, limits, source_node, out_edge_slot, dest_node)) return -1; return 0; } static int obnode__delete_edge (t_obnode_set * os, alloc_limits limits, ssize_t source_node, ssize_t out_edge_slot) { ssize_t dest_node; t_obnode * snode; ssize_t n_out_edges; ssize_t x; dest_node = obnode_subnode_data_k (os, limits, source_node, out_edge_slot); if (dest_node < 0) return -1; if (0 > obnode__remove_in_edge (os, limits, source_node, out_edge_slot, dest_node)) return -1; snode = obnode__n (os, limits, source_node); if (!snode) return -1; n_out_edges = oblist_size (&snode->_out_edges, limits, sizeof (t_obnode_out_edge), 0, 0); for (x = out_edge_slot + 1; x < n_out_edges; ++x) { ssize_t subnode; subnode = obnode_subnode_data_k (os, limits, source_node, x); if (0 > obnode__remove_in_edge (os, limits, source_node, x, subnode)) return -1; if (0 > obnode__add_in_edge (os, limits, source_node, x - 1, subnode)) return -1; } if (0 > oblist_delete_n (&snode->_out_edges, limits, sizeof (t_obnode_out_edge), 0, 0, out_edge_slot, 1)) return -1; return 0; } static ssize_t obnode__add_in_edge (t_obnode_set * os, alloc_limits limits, ssize_t source_node, ssize_t out_edge_slot, ssize_t dest_node) { t_obnode * dnode; t_obnode_in_edge in_key; dnode = obnode__n (os, limits, dest_node); if (!dnode) return -1; in_key._source_node = source_node; in_key._out_edge_slot = out_edge_slot; return oblist_sorted_insert (&dnode->_in_edges, limits, sizeof (t_obnode_in_edge), 0, 0, (void *)&in_key, in_edge_cmp, 0, 1, 0); } static int obnode__remove_in_edge (t_obnode_set * os, alloc_limits limits, ssize_t source_node, ssize_t out_edge_slot, ssize_t dest_node) { t_obnode * dnode; t_obnode_in_edge in_key; ssize_t in_edge; dnode = obnode__n (os, limits, dest_node); if (!dnode) return -1; in_key._source_node = source_node; in_key._out_edge_slot = out_edge_slot; in_edge = oblist_find (0, &dnode->_in_edges, limits, sizeof (t_obnode_in_edge), 0, 0, (void *)&in_key, in_edge_cmp, 0); if (!in_edge) return -1; if (0 > oblist_delete_n (&dnode->_in_edges, limits, sizeof (t_obnode_in_edge), 0, 0, in_edge, 1)) return -1; return 0; } static int in_edge_cmp (void * va, void * vb, void * ign) { t_obnode_in_edge * a; t_obnode_in_edge * b; a = (t_obnode_in_edge *)va; b = (t_obnode_in_edge *)vb; if (a == b) return 0; if (!a) return -1; if (!b) return 1; if (a->_source_node < b->_source_node) return -1; if (a->_source_node > b->_source_node) return 1; if (a->_out_edge_slot < b->_out_edge_slot) return -1; if (a->_out_edge_slot > b->_out_edge_slot) return 1; return 0; } int obnode_insert_edge (t_obnode_set * os, alloc_limits limits, ssize_t source, ssize_t insert_order, ssize_t dest) { return obnode__insert_edge (os, limits, source, insert_order, dest); } int obnode_delete_edge (t_obnode_set * os, alloc_limits limits, ssize_t source, ssize_t insert_order) { return obnode__delete_edge (os, limits, source, insert_order); } void * obnode_property_soft_ref (t_obnode_set * os, alloc_limits limits, ssize_t elt_size, ssize_t node, ssize_t global_property_id) { return property_soft_ref (&os->_property_table, limits, elt_size, os->_representation_type, global_property_id, node); } void * obnode_property_ref (t_obnode_set * os, alloc_limits limits, ssize_t elt_size, ssize_t node, ssize_t global_property_id, t_property_type * type) { return property_ref (&os->_property_table, limits, elt_size, os->_representation_type, global_property_id, node, type); } ssize_t obnode_handle_set (t_obnode_set * os, alloc_limits limits, ssize_t elt_size, ssize_t n) { t_obnode * node; node = obnode__n (os, limits, n); if (!node) return -1; if (node->_handle_set < 0) { node->_handle_set = alloc_handle (); } return node->_handle_set; } /* tag: Tom Lord Tue Oct 26 16:34:50 2004 (node-set.c) */ tla-1.3.5+dfsg/src/hackerlab/graphs/digraph.h0000644000175000017500000000426110457621774017533 0ustar useruser/* digraph.h: * **************************************************************** * Copyright (C) 2004 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBGRAPH__DIGRAPH_H #define INCLUDE__LIBGRAPH__DIGRAPH_H #include "hackerlab/obtables/obtable.h" #include "hackerlab/graphs/node-set.h" typedef struct digraph t_digraph; struct digraph { alloc_limits _limits; t_obnode_set _nodes; }; /* automatically generated __STDC__ prototypes */ extern ssize_t open_digraph (alloc_limits limits, ssize_t representation_type); extern int close_digraph (ssize_t n); extern alloc_limits digraph_limits (ssize_t d); extern ssize_t digraph_n_nodes (ssize_t d); extern ssize_t digraph_alloc_node (ssize_t d); extern int digraph_free_node (ssize_t d, ssize_t n); extern ssize_t digraph_n_subnodes (ssize_t d, ssize_t n); extern ssize_t digraph_n_parent_nodes (ssize_t d, ssize_t n); extern ssize_t digraph_subnode_data_k (ssize_t d, ssize_t n, ssize_t k); extern ssize_t digraph_parent_data_k (ssize_t * out_slot, ssize_t d, ssize_t n, ssize_t k); extern int digraph_insert_edge (ssize_t d, ssize_t source, ssize_t where, ssize_t dest); extern int digraph_delete_edge (ssize_t d, ssize_t source, ssize_t where); extern void * digraph_property_soft_ref (ssize_t d, ssize_t elt_size, ssize_t node, ssize_t global_property_id); extern void * digraph_property_ref (ssize_t d, ssize_t elt_size, ssize_t node, ssize_t global_property_id, t_property_type * type); #endif /* INCLUDE__LIBGRAPH__DIGRAPH_H */ /* tag: Tom Lord Thu Oct 28 08:06:19 2004 (graph.h) */ tla-1.3.5+dfsg/src/hackerlab/graphs/node-set.h0000644000175000017500000001073510457621774017636 0ustar useruser/* obnode-set.h: * **************************************************************** * Copyright (C) 2004 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBAWIKI__OBNODE_SET_H #define INCLUDE__LIBAWIKI__OBNODE_SET_H #include "hackerlab/obtables/obtable.h" #include "hackerlab/oblists/oblist.h" #include "hackerlab/properties/property.h" typedef struct obnode_set t_obnode_set; typedef struct obnode t_obnode; typedef struct obnode_out_edge t_obnode_out_edge; typedef struct obnode_in_edge t_obnode_in_edge; struct obnode_set { t_obtable _obnodes; ssize_t _representation_type; t_property_table _property_table; }; struct obnode { struct obtable_elt _obtable_elt; t_oblist _out_edges; t_oblist _in_edges; ssize_t _handle_set; }; struct obnode_out_edge { ssize_t _dest_node; }; struct obnode_in_edge { ssize_t _source_node; ssize_t _out_edge_slot; }; /* automatically generated __STDC__ prototypes */ extern int init_obnode_set (t_obnode_set * os, alloc_limits limits, ssize_t representation_type); extern int uninit_obnode_set (t_obnode_set * os, alloc_limits limits); extern ssize_t obnode_set_n_nodes (t_obnode_set * os, alloc_limits limits); extern ssize_t obnode_set_alloc_node (t_obnode_set * os, alloc_limits limits); extern int obnode_set_free_node (t_obnode_set * os, alloc_limits limits, ssize_t id); extern int obnode_set__init_node (t_obnode * node, t_obnode_set * os, alloc_limits limits, ssize_t id); extern ssize_t obnode_n_subnodes (t_obnode_set * os, alloc_limits limits, ssize_t n); extern t_obnode_out_edge * obnode__subnode_k (t_obnode_set * os, alloc_limits limits, ssize_t n, ssize_t k); extern ssize_t obnode_subnode_data_k (t_obnode_set * os, alloc_limits limits, ssize_t n, ssize_t k); extern ssize_t obnode_n_parent_nodes (t_obnode_set * os, alloc_limits limits, ssize_t n); extern t_obnode_in_edge * obnode__parent_k (t_obnode_set * os, alloc_limits limits, ssize_t n, ssize_t k); extern ssize_t obnode_parent_data_k (ssize_t * out_edge_slot, t_obnode_set * os, alloc_limits limits, ssize_t n, ssize_t k); extern int obnode_insert_edge (t_obnode_set * os, alloc_limits limits, ssize_t source, ssize_t insert_order, ssize_t dest); extern int obnode_delete_edge (t_obnode_set * os, alloc_limits limits, ssize_t source, ssize_t insert_order); extern void * obnode_property_soft_ref (t_obnode_set * os, alloc_limits limits, ssize_t elt_size, ssize_t node, ssize_t global_property_id); extern void * obnode_property_ref (t_obnode_set * os, alloc_limits limits, ssize_t elt_size, ssize_t node, ssize_t global_property_id, t_property_type * type); extern ssize_t obnode_handle_set (t_obnode_set * os, alloc_limits limits, ssize_t elt_size, ssize_t n); #endif /* INCLUDE__LIBAWIKI__OBNODE_SET_H */ /* tag: Tom Lord Tue Oct 26 16:22:59 2004 (obnode-set.h) */ tla-1.3.5+dfsg/src/hackerlab/graphs/Makefile.in0000644000175000017500000000027510457621774020012 0ustar useruserinclude $(makefiles)/library-objects.mk ifeq ($(cgs__install_hackerlab),1) include $(makefiles)/install-includes.mk endif # tag: Tom Lord Sat Nov 20 18:50:34 2004 (graphs/Makefile.in) # tla-1.3.5+dfsg/src/hackerlab/graphs/digraph.c0000644000175000017500000000755210457621774017534 0ustar useruser/* digraph.c: * **************************************************************** * Copyright (C) 2004 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/mem/mem.h" #include "hackerlab/graphs/node-set.h" #include "hackerlab/graphs/digraph.h" /* typedefs */ OBTABLE_STATIC_TABLE(digraph, t_digraph); /* __STDC__ prototypes for static functions */ ssize_t open_digraph (alloc_limits limits, ssize_t representation_type) { ssize_t n; t_digraph * d; n = digraph_alloc_id (); d = digraph_ref_id (n); if (!d) return -1; d->_limits = limits; if (0 > init_obnode_set (&d->_nodes, limits, representation_type)) { digraph_free_id (n); return -1; } return n; } int close_digraph (ssize_t n) { t_digraph * d; d = digraph_ref_id (n); if (!d) return -1; if (0 > uninit_obnode_set (&d->_nodes, d->_limits)) return -1; return 0; } alloc_limits digraph_limits (ssize_t d) { t_digraph * dg; dg = digraph_ref_id (d); if (!dg) return 0; return dg->_limits; } ssize_t digraph_n_nodes (ssize_t d) { t_digraph * dg; dg = digraph_ref_id (d); if (!dg) return 0; return obnode_set_n_nodes (&dg->_nodes, dg->_limits); } ssize_t digraph_alloc_node (ssize_t d) { t_digraph * dg; dg = digraph_ref_id (d); if (!dg) return -1; return obnode_set_alloc_node (&dg->_nodes, dg->_limits); } int digraph_free_node (ssize_t d, ssize_t n) { t_digraph * dg; dg = digraph_ref_id (d); if (!dg) return -1; return obnode_set_free_node (&dg->_nodes, dg->_limits, n); } ssize_t digraph_n_subnodes (ssize_t d, ssize_t n) { t_digraph * dg; dg = digraph_ref_id (d); if (!dg) return -1; return obnode_n_subnodes (&dg->_nodes, dg->_limits, n); } ssize_t digraph_n_parent_nodes (ssize_t d, ssize_t n) { t_digraph * dg; dg = digraph_ref_id (d); if (!dg) return -1; return obnode_n_parent_nodes (&dg->_nodes, dg->_limits, n); } ssize_t digraph_subnode_data_k (ssize_t d, ssize_t n, ssize_t k) { t_digraph * dg; dg = digraph_ref_id (d); if (!dg) return -1; return obnode_subnode_data_k (&dg->_nodes, dg->_limits, n, k); } ssize_t digraph_parent_data_k (ssize_t * out_slot, ssize_t d, ssize_t n, ssize_t k) { t_digraph * dg; dg = digraph_ref_id (d); if (!dg) return -1; return obnode_parent_data_k (out_slot, &dg->_nodes, dg->_limits, n, k); } int digraph_insert_edge (ssize_t d, ssize_t source, ssize_t where, ssize_t dest) { t_digraph * dg; dg = digraph_ref_id (d); if (!dg) return -1; return obnode_insert_edge (&dg->_nodes, dg->_limits, source, where, dest); } int digraph_delete_edge (ssize_t d, ssize_t source, ssize_t where) { t_digraph * dg; dg = digraph_ref_id (d); if (!dg) return -1; return obnode_delete_edge (&dg->_nodes, dg->_limits, source, where); } void * digraph_property_soft_ref (ssize_t d, ssize_t elt_size, ssize_t node, ssize_t global_property_id) { t_digraph * dg; dg = digraph_ref_id (d); if (!dg) return 0; return obnode_property_soft_ref (&dg->_nodes, dg->_limits, elt_size, node, global_property_id); } void * digraph_property_ref (ssize_t d, ssize_t elt_size, ssize_t node, ssize_t global_property_id, t_property_type * type) { t_digraph * dg; dg = digraph_ref_id (d); if (!dg) return 0; return obnode_property_ref (&dg->_nodes, dg->_limits, elt_size, node, global_property_id, type); } /* tag: Tom Lord Thu Oct 28 08:11:08 2004 (graph.c) */ tla-1.3.5+dfsg/src/hackerlab/graphs/PLUGIN/0000755000175000017500000000000010457621774016737 5ustar userusertla-1.3.5+dfsg/src/hackerlab/graphs/PLUGIN/REQ0000644000175000017500000000010710457621774017307 0ustar useruserobtables graphs oblists graphs properties graphs graphs libhackerlab tla-1.3.5+dfsg/src/hackerlab/bugs/0000755000175000017500000000000010457621774015415 5ustar userusertla-1.3.5+dfsg/src/hackerlab/bugs/panic.h0000644000175000017500000000311610457621774016661 0ustar useruser/* panic.h - decls for fatal errors * **************************************************************** * Copyright (C) 1998, 2000 Thomas Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__BUGS__PANIC_H #define INCLUDE__BUGS__PANIC_H #include "hackerlab/machine/types.h" #include "hackerlab/bugs/panic-exit.h" #define invariant_4(CONDITION, MSG, FILE, LINE) \ do { if (!(CONDITION)) invariant_test (0, (MSG), (FILE), (LINE)); } while (0) #define invariant_2(CONDITION, MSG) \ invariant_4 ((CONDITION), (MSG), __FILE__, __LINE__) #define invariant__x(CONDITION) \ invariant_4 ((CONDITION), #CONDITION, __FILE__, __LINE__) #define invariant(CONDITION) \ invariant__x(CONDITION) #define invariant_at_file_linex(CONDITION, FILE, LINE) \ do { if (!(CONDITION)) invariant_test (0, #CONDITION, (FILE), (LINE)); } while (0) #define invariant_at_file_line(CONDITION, FILE, LINE) \ invariant_at_file_linex((CONDITION), (FILE), (LINE)) /* Use invariant_TODO when you want to write an invariant check * because you *think* the code is right but for external reasons * you aren't certain. This allows an invariant failure to be * checked but also allows you to `grep' for code that needs * more careful review. */ #define invariant_TODO(X) invariant(X) /* automatically generated __STDC__ prototypes */ extern void panic (const char * str); extern void panic_msg (const char * str); extern void invariant_test (int condition, const char * str, char * file, int line); #endif /* INCLUDE__BUGS__PANIC_H */ tla-1.3.5+dfsg/src/hackerlab/bugs/panic-exit.c0000644000175000017500000000253510457621774017627 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:41:26 2001 (panic-exit.c) */ /* panic-exit.c - * **************************************************************** * Copyright (C) 2000 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/os/unistd.h" #include "hackerlab/os/exit.h" #include "hackerlab/bugs/panic-exit.h" /************************************************************************ *(h1 "Exiting Due to Panic" * :includes ("hackerlab/bugs/panic-exit.h")) * * |exitting on panic| */ /*(c panic_exit) * void panic_exit (void); * * This function is called by `panic' to terminate the process with * status 1. (It does not return. It calls `_exit'.) * * For your convenience, this function is defined in its own object * file. You can define your own version and still link against * this library. If you do define your own version, *it must not * return*. * */ void panic_exit (void) { /* Why exit with status 2 instead of EXIT_FAILURE? * * Some programs return information in the exit status and * conventionally statuses 0 and 1 are ordinary returns, * with status 2 indicating an abnormal exit. `panic_exit' should * be useful in such programs and in forked subprocesses preparing to * `exec' such programs. */ _exit (2); } tla-1.3.5+dfsg/src/hackerlab/bugs/=later/0000755000175000017500000000000010457621774016621 5ustar userusertla-1.3.5+dfsg/src/hackerlab/bugs/=later/error.c0000644000175000017500000000470010457621774020117 0ustar useruser/* error.c: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/bugs/error.h" /* __STDC__ prototypes for static functions */ static int err_is_proxy_for (err_type_t * a, err_type_t * b); static int err_equivalent_proxies (err_t * a, err_t * b); int err_types_equal (err_type_t * a, err_type_t * b) { if (!a) return 0; else if (!b) return 0; else if (err_is_proxy_for (a, b)) return 1; else if (err_is_proxy_for (b, a)) return 1; else return (a == b); return 0; } static int err_is_proxy_for (err_type_t * a, err_type_t * b) { if (a->proxy_for == b) return 1; else if (b->proxy_for == a) return 1; else if (!a->is_proxy && !b->is_proxy) return 0; else if (a->is_proxy && b->is_proxy) return err_equivalent_proxies (a, b); else if (!a->is_proxy && b->proxy_for && (b->proxy_for != a)) return 0; else if (!b->is_proxy && a->proxy_for && (a->proxy_for != b)) return 0; else { err_type_t * proxy; err_type_t * canonical; invariant (!(a->is_proxy && b->is_proxy)); invariant (a->is_proxy || b->is_proxy); if (a->is_proxy) { proxy = a; canonical = b; } else { proxy = b; canonical = a; } return err_is_canonical_for (canonical, proxy); } } static int err_equivalent_proxies (err_t * a, err_t * b) { #undef fix return 0; } int err_is_type (err_type_t * type, err_t * err) { return err_types_equal (type, err->type); } void err_set_type (err_t * dest, err_type_t * type) { err_clean (dest); dest->type = type; } err_type_t err_type (err_t * err) { return dest->type; } t_uchar * err_name (err_t * err) { if (!err->type) return 0; else return (t_uchar *)err->type->name; } t_uchar * err_msg (err_t * err) { if (!err->type) return 0; else return (t_uchar *)err->type->msg; } void err_type_coordinates (err_type_t * type) { } void err_clean (err_t * err) { if (err->vtable) err->vtable->clean (err); mem_set0 ((t_uchar *)err, sizeof (*err)); } void err_propogate (err_t * to, err_t * from) { err_clean (to); *to = *from; mem_set0 ((t_uchar *)from, sizeof (*from)); } /* tag: Tom Lord Thu Oct 23 15:51:34 2003 (error.c) */ tla-1.3.5+dfsg/src/hackerlab/bugs/=later/error.h0000644000175000017500000000375410457621774020134 0ustar useruser/* error.h: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__BUGS__ERROR_H #define INCLUDE__BUGS__ERROR_H #include "hackerlab/machine/types.h" struct err_type_vtable; struct err_type_description { /* Applications should not access these fields * directly. */ char * name; char * msg; struct err_type_vtable * vtable; char * domain; t_uint32 code; int is_proxy; struct err_type_description * proxy_for; #if 0 t_uint64 domhash_hi; t_uint64 domhash_lo; #endif t_uint domseq; t_uint typeseq; }; typedef struct err_type_description err_type_t; struct err_value { /* Applications should not access these fields * directly. */ err_type_t * type; t_uint event_n; t_uint32 logging_done; union { struct err_value * e; t_uchar * s; t_uchar ** sa; int i; t_uint u; t_int32 i32; t_uint32 u32; float f; double d; void * v; } params; }; typedef struct err_value err_t; #define ERR_TYPE_DECL(NAME,MSG,VTBL) \ struct err_type_description NAME = { #NAME, MSG, VTBL, 0, } #define ERR_STDTYPE_DECL(NAME,MSG,VTBL,DOM,CODE) \ struct err_type_description NAME = { #NAME, MSG, VTBL, DOM, CODE, 0, } #define ERR_INIT() { 0, } /* automatically generated __STDC__ prototypes */ extern int err_types_equal (err_type_t * a, err_type_t * b); extern int err_is_type (err_type_t * type, err_t * err); extern void err_set_type (err_t * dest, err_type_t * type); extern err_type_t err_type (err_t * err); extern t_uchar * err_name (err_t * err); extern t_uchar * err_msg (err_t * err); extern void err_type_coordinates (err_type_t * type); extern void err_clean (err_t * err); extern void err_propogate (err_t * to, err_t * from); #endif /* INCLUDE__BUGS__ERROR_H */ /* tag: Tom Lord Thu Oct 23 15:10:31 2003 (error.h) */ tla-1.3.5+dfsg/src/hackerlab/bugs/bugs.doc0000644000175000017500000000271310457621774017047 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:57:12 2001 (bugs.doc) */ /************************************************************************ *(h0 "Handling Bugs") * * * |Burroughs, William S.| * * Captain Mission did not fear Panic, the sudden * intolerable knowing that everything is alive. * He was himself an emissary of Panic, of the * knowledge that man fears above all else: the * truth of his origin. It's so close. Just wipe * away the words and look. * * William S. Burroughs * Ghost of a Chance * * The Hackerlab C library defines a "bug" as a condition within a * running program which is not expected to arise, and which can not * be recovered from if it does arise, but which can not be ruled out * with certainty. * * When a bug occurs, the only sane alternative is for the process * to exit with a non-0 status. By convention, a process which * exits due to a bug should print an error message on its standard * output stream giving some indication of what bug occurred. * * When a fatal condition arises, call `panic'. In tricky code, * play it safe and test for conditions which should always be * true by using the macro `invariant'. See xref:"Panic". * * If your program needs to quit in some way besides `_exit(1)', you * might want to replace the function `panic_exit'. See xref:"Exiting * Due to Panic". * */ /*(menu) */ /*(include-documentation "panic.c") */ /*(include-documentation "panic-exit.c") */ tla-1.3.5+dfsg/src/hackerlab/bugs/Makefile.in0000644000175000017500000000027310457621774017464 0ustar useruserinclude $(makefiles)/library-objects.mk ifeq ($(cgs__install_hackerlab),1) include $(makefiles)/install-includes.mk endif # tag: Tom Lord Tue Dec 4 14:52:07 2001 (bugs/Makefile.in) # tla-1.3.5+dfsg/src/hackerlab/bugs/panic-exit.h0000644000175000017500000000074010457621774017630 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:41:26 2001 (panic-exit.h) */ /* panic-exit.h - * **************************************************************** * Copyright (C) 2000 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__BUGS__panic_H #define INCLUDE__BUGS__panic_H /* automatically generated __STDC__ prototypes */ extern void panic_exit (void); #endif /* INCLUDE__BUGS__panic_H */ tla-1.3.5+dfsg/src/hackerlab/bugs/PLUGIN/0000755000175000017500000000000010457621774016413 5ustar userusertla-1.3.5+dfsg/src/hackerlab/bugs/PLUGIN/REQ0000644000175000017500000000002710457621774016764 0ustar useruseros bugs bugs libboot tla-1.3.5+dfsg/src/hackerlab/bugs/test-coverage.h0000644000175000017500000000203510457621774020336 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:41:26 2001 (test-coverage.h) */ /* test-coverage.h - * **************************************************************** * Copyright (C) 2000 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__BUGS__TEST_COVERAGE_H #define INCLUDE__BUGS__TEST_COVERAGE_H #include "hackerlab/bugs/panic.h" /* example: * * #define TEST_COVERAGE_LIST(MACRO) \ * TEST_COVERAGE_ ## MACRO (name1); \ * TEST_COVERAGE_ ## MACRO (name2); \ * ... \ * TEST_COVERAGE_ ## MACRO (name2) \ * * * TEST_COVERAGE_LIST(DECL); * * * { * ... * TEST_COVERED(name_n); * * } * * * * { * TEST_COVERAGE_LIST(CHECK); * exit (0); * } */ #define TEST_COVERAGE_DECL(NAME) static int NAME = 0 #define TEST_COVERAGE_CHECK(NAME) if (!NAME) panic ("test coverage failure: " #NAME) #define TEST_COVERED(NAME) NAME = 1 /* automatically generated __STDC__ prototypes */ #endif /* INCLUDE__BUGS__TEST_COVERAGE_H */ tla-1.3.5+dfsg/src/hackerlab/bugs/panic.c0000644000175000017500000000455010457621774016657 0ustar useruser/* panic.c - fatal errors * **************************************************************** * Copyright (C) 1998, 2000 Thomas Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/os/unistd.h" #include "hackerlab/char/str.h" #include "hackerlab/fmt/cvt.h" #include "hackerlab/bugs/panic-exit.h" #include "hackerlab/bugs/panic.h" /************************************************************************ *(h1 "Panic" * :includes ("hackerlab/bugs/panic.h")) * * |panic| * |invariant| */ /*(c panic) * int panic (const char * str); * * Print an error message containing `str' on descriptor 2 and exit * the process by calling `panic_exit'. * * This function uses `write' to print `str'. * * This function does not return. */ void panic (const char * str) { write (2, "PANIC: ", str_length ("PANIC: ")); write (2, str, str_length (str)); write (2, "\n", 1); panic_exit (); } /*(c panic_msg) * int panic_msg (const char * str); * * Print an error message containing `str' on descriptor 2. * * This function uses `write' to print `str'. * * This function *does* return. */ void panic_msg (const char * str) { write (2, "PANIC MESSAGE: ", str_length ("PANIC MESSAGE: ")); write (2, str, str_length (str)); write (2, "\n", 1); } /*(c invariant :category macro) * void invariant(CONDITION); * * Defined as: * * #define invariant(X) invariant_test(X, #X, __FILE__, __LINE__) * * * If `CONDITION' evaluates to 0, write a message to the standard * error output (descriptor 2) and exit by calling `panic_exit'. * See xref:"panic". */ /*(c invariant_test) * void invariant_test (int condition, const char * str, char * file, int line); * * If `condition' is 0, write a message to stderr (fd 2) and exit. * See xref:"invariant". */ void invariant_test (int condition, const char * str, char * file, int line) { char buffer[2 + sizeof (long) * 3]; # define botched "botched invariant\n " if (condition) return; cvt_long_to_decimal (buffer, line); write (2, file, str_length (file)); write (2, ":", 1); write (2, buffer, str_length (buffer)); write (2, ":", 1); write (2, botched, str_length (botched)); write (2, str, str_length (str)); write (2, "\n", 1); while (1) panic ("exiting on botched invariant"); } tla-1.3.5+dfsg/src/hackerlab/char/0000755000175000017500000000000010457621774015372 5ustar userusertla-1.3.5+dfsg/src/hackerlab/char/char-class.h0000644000175000017500000000501510457621774017564 0ustar useruser/* char-class.h - decls for character classifications * **************************************************************** * Copyright (C) 1998, 2000 Thomas Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__CHAR__CHAR_CLASS_H #define INCLUDE__CHAR__CHAR_CLASS_H #include "hackerlab/machine/types.h" extern t_uchar char__to_lower_table[]; extern t_uchar char__to_upper_table[]; extern short char__digit_value_table []; #define char_to_lower(X) (char__to_lower_table[(t_uchar)(X)]) #define char_to_upper(X) (char__to_upper_table[(t_uchar)(X)]) #define char_digit_value(X) (char__digit_value_table[(t_uchar)(X)]) enum char_classes { char_class_upper = (1 << 0), char_class_lower = (1 << 1), char_class_alpha = (1 << 2), char_class_digit = (1 << 3), char_class_alnum = (1 << 4), char_class_control = (1 << 5), char_class_printable = (1 << 6), char_class_space = (1 << 7), char_class_graph = (1 << 8), char_class_c_id = (1 << 9), char_class_xdigit = (1 << 10), char_class_odigit = (1 << 11), char_class_punct = (1 << 12), char_class_blank = (1 << 13), char_class_non_ascii = (1 << 14) }; extern unsigned short char__class_table[]; #define char_is_any_of(X, C) (!!(char__class_table[(t_uchar)(X)] & (C))) #define char_is_class(X, C) ((char__class_table[(t_uchar)(X)] & (C)) == (C)) #define char_is_ascii(X) ((t_uchar)(X) < 128) #define char_is_non_ascii(X) ((t_uchar)(X) >= 128) #define char_is_upper(X) char_is_class ((X), char_class_upper) #define char_is_lower(X) char_is_class ((X), char_class_lower) #define char_is_alpha(X) char_is_class ((X), char_class_alpha) #define char_is_digit(X) char_is_class ((X), char_class_digit) #define char_is_alnum(X) char_is_class ((X), char_class_alnum) #define char_is_control(X) char_is_class ((X), char_class_control) #define char_is_printable(X) char_is_class ((X), char_class_printable) #define char_is_space(X) char_is_class ((X), char_class_space) #define char_is_graph(X) char_is_class ((X), char_class_graph) #define char_is_c_id(X) char_is_class ((X), char_class_c_id) #define char_is_xdigit(X) char_is_class ((X), char_class_xdigit) #define char_is_odigit(X) char_is_class ((X), char_class_odigit) #define char_is_punct(X) char_is_class ((X), char_class_punct) #define char_is_blank(X) char_is_class ((X), char_class_blank) #define char_is_alphanumeric(X) (char_is_alpha((X)) || char_is_digit((X))) /* automatically generated __STDC__ prototypes */ #endif /* INCLUDE__CHAR__CHAR_CLASS_H */ tla-1.3.5+dfsg/src/hackerlab/char/char-name.c0000644000175000017500000000571110457621774017375 0ustar useruser/* char-name.c - the C names of characters * **************************************************************** * Copyright (C) 1998, 2000 Thomas Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/char/char-name.h" /************************************************************************ *(h1 "Character Names" * :include ("char/char-name.h")) */ /*(c char_name :category variable) * extern t_uchar * char_name[256]; * * `char_name' contains the C names of each character (suitable for * use in C character constants or strings). For example: * * char_name['\0'] is "\\000" * char_name['\n'] is "\\n" * char_name['\\'] is "\\\\" * char_name['a'] is "a" */ t_uchar * char_name[] = { "\\000", "\\001", "\\002", "\\003", "\\004", "\\005", "\\006", "\\a", "\\010", "\\t", "\\n", "\\013", "\\f", "\\r", "\\016", "\\017", "\\020", "\\021", "\\022", "\\023", "\\024", "\\025", "\\026", "\\027", "\\030", "\\031", "\\032", "\\033", "\\034", "\\035", "\\036", "\\037", " ", "!", "\\\"", "#", "$", "%", "&", "'", "(", ")", "*", "+", ",", "-", ".", "/", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", ":", ";", "<", "=", ">", "?", "@", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "[", "\\\\", "]", "^", "_", "`", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "{", "|", "}", "~", "\\177", "\\200", "\\201", "\\202", "\\203", "\\204", "\\205", "\\206", "\\207", "\\210", "\\211", "\\212", "\\213", "\\214", "\\215", "\\216", "\\217", "\\220", "\\221", "\\222", "\\223", "\\224", "\\225", "\\226", "\\227", "\\230", "\\231", "\\232", "\\233", "\\234", "\\235", "\\236", "\\237", "\\240", "\\241", "\\242", "\\243", "\\244", "\\245", "\\246", "\\247", "\\250", "\\251", "\\252", "\\253", "\\254", "\\255", "\\256", "\\257", "\\260", "\\261", "\\262", "\\263", "\\264", "\\265", "\\266", "\\267", "\\270", "\\271", "\\272", "\\273", "\\274", "\\275", "\\276", "\\277", "\\300", "\\301", "\\302", "\\303", "\\304", "\\305", "\\306", "\\307", "\\310", "\\311", "\\312", "\\313", "\\314", "\\315", "\\316", "\\317", "\\320", "\\321", "\\322", "\\323", "\\324", "\\325", "\\326", "\\327", "\\330", "\\331", "\\332", "\\333", "\\334", "\\335", "\\336", "\\337", "\\340", "\\341", "\\342", "\\343", "\\344", "\\345", "\\346", "\\347", "\\350", "\\351", "\\352", "\\353", "\\354", "\\355", "\\356", "\\357", "\\360", "\\361", "\\362", "\\363", "\\364", "\\365", "\\366", "\\367", "\\370", "\\371", "\\372", "\\373", "\\374", "\\375", "\\376", "\\377", }; tla-1.3.5+dfsg/src/hackerlab/char/char-name.h0000644000175000017500000000100610457621774017373 0ustar useruser/* char-name.h - decls for the C names of characters * **************************************************************** * Copyright (C) 1998, 2000 Thomas Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__CHAR__CHAR_NAME_H #define INCLUDE__CHAR__CHAR_NAME_H #include "hackerlab/machine/types.h" extern t_uchar * char_name[]; /* automatically generated __STDC__ prototypes */ #endif /* INCLUDE__CHAR__CHAR_NAME_H */ tla-1.3.5+dfsg/src/hackerlab/char/pika-escaping-utils.h0000644000175000017500000000314210457621774021414 0ustar useruser/* pika-escaping-utils.h - decls for saving escaped/unescaped pika scheme strings * **************************************************************** * Copyright (C) 2004 Christian Thaeter * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__CHAR__PIKA_ESCAPING_UTILS_H #define INCLUDE__CHAR__PIKA_ESCAPING_UTILS_H #include "hackerlab/mem/alloc-limits.h" /* automatically generated __STDC__ prototypes */ extern t_uchar * pika_save_escape_iso8859_1_n (size_t * length_return, alloc_limits limits, int escape_classes, const t_uchar * str, size_t length); extern t_uchar * pika_save_escape_iso8859_1 (size_t * length_return, alloc_limits limits, int escape_classes, const t_uchar * str); extern t_uchar * pika_save_unescape_iso8859_1_n (size_t * length_return, alloc_limits limits, const t_uchar * str, size_t length); extern t_uchar * pika_save_unescape_iso8859_1 (size_t * length_return, alloc_limits limits, const t_uchar * str); #endif /* INCLUDE__CHAR__PIKA_ESCAPING_UTILS_H */ tla-1.3.5+dfsg/src/hackerlab/char/pika-escaping.c0000644000175000017500000002455110457621774020260 0ustar useruser/* pika-escaping.c - decls for escaping/unescaping pika scheme strings * **************************************************************** * Copyright (C) 2004, Christian Thaeter * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/fmt/cvt.h" #include "hackerlab/char/char-class.h" #include "hackerlab/char/pika-escaping.h" /************************************************************************ *(h1 "Pika Escaping") * * ``Escaping'' a string means substituting a symbolic representation * for some characters. For example, the C character constant: * * "column 1\tcolumn 2\n" * * contains an escaped tab character and an escaped newline. * * There are many different escaping syntaxes of which C's is only one * example. As a coding standard, hackerlab programs should use the * syntax of Pika Scheme for all exchange formats. (The Pika format * is simple, extensible, and handles Unicode well. Additionally, * Pika Scheme is [will be] the preferred scripting and extension language * for Hackerlab programs.) * * The functions in this section implement Pika Scheme escaping for * ordinary C strings (strings over the `char' type). */ /* __STDC__ prototypes for static functions */ static int str_print (size_t * needed, t_uchar * to, size_t to_length, const t_uchar * from); /************************************************************************ *(h2 "Basic Pika Escaping Functions") * * * */ /*(c pika_escape_iso8859_1_n) * size_t pika_escape_iso8859_1_n (t_uchar * result, * size_t result_length, * int escape_classes, * const t_uchar * str, * size_t length); * * Fill up to `result_length' characters of `result' * with a Pika-escaped form of the `length' characters * beginning at `str' (including a final 0 character). * * Return the number of characters required to escape the input * string, not counting the final 0 character. (This may be greater * than `result_length' if insufficient space was provided to contain * the result.) * * Note, therefore, that if the return value is greater than or * equal to `result_length', then the output has been truncated * and no final 0 character appended. * * The parameter `escape_classes' is a bitwise or of * values of type `enum char_class' (see xref:"Character * Classes"). Characters in the indicated classes * are replaced by hexadecimal or symbolic escapes * in the result -- other characters are unmodified. * * Backslashes and doublequotes are always escaped. * */ size_t pika_escape_iso8859_1_n (t_uchar * result, size_t result_length, int escape_classes, const t_uchar * str, size_t length) { size_t conv_out; conv_out = 0; while (length) { if (*str == '\\' || *str == '"' || char_is_any_of (*str, escape_classes)) { size_t needed; int success; switch (*str) { case '\t': success = str_print (&needed, result, result_length, "\\(tab)"); break; case '\n': success = str_print (&needed, result, result_length, "\\(nl)"); break; case '\r': success = str_print (&needed, result, result_length, "\\(cr)"); break; case '\f': success = str_print (&needed, result, result_length, "\\(np)"); break; case ' ': success = str_print (&needed, result, result_length, "\\(sp)"); break; case '\\': success = str_print (&needed, result, result_length, "\\\\"); break; case '"': success = str_print (&needed, result, result_length, "\\\""); break; default: success = str_print (&needed, result, result_length, "\\(U+"); conv_out += needed; if (success == 0) { result += needed; result_length -= needed; } success = cvt_ulong_to_HEX_n (result, result_length, (unsigned long) *str, &needed); conv_out += needed; if (success == 0) { result += needed; result_length -= needed; } success = str_print (&needed, result, result_length, ")"); break; } conv_out += needed; if (success == 0) { result += needed; result_length -= needed; } } else { if (result_length) { *result = *str; --result_length; ++result; } ++conv_out; } --length; ++str; } if (result_length) *result = '\0'; return conv_out; } /*(c pika_unescape_iso8859_1_n) * int pika_unescape_iso8859_1_n (size_t * result_needed, * size_t * str_used, * t_uchar * result, * size_t result_length, * const t_uchar * str, * size_t length); * * Fill up to `result_length' characters of `result' * with the Pika-unescaped form of the `length' characters * beginning at `str' plus a final 0. * * Return in `*result_needed' the number of characters required to * unescape the input string, not counting the final 0. (This may be * greater than `result_length' if insufficient space was provided to * contain the result.) * * Note, therefore, that the function succeeds only if the value * to be returned in `*result_needed' is less than `result_length'. * * If `str_used' is not 0, return in `*str_used' the number * of characters consumed from `str' (normally `length'). * * Return 0 on success, -1 if either `result_length' is not large * enough to hold the unescaped result plus the final 0 or if the * input string contains a syntax error. * * If `*result_needed >= result_length' then there was * not enough room to unescape the input; otherwise, * the input contains a syntax error. * * In either case, `*str_used' indicates the first character * within `str' that could not be unescaped in the result. */ int pika_unescape_iso8859_1_n (size_t * result_needed, size_t * str_used, t_uchar * result, size_t result_length, const t_uchar * str, size_t length) { int ret; size_t needed; size_t remain; const t_uchar * progress; const t_uchar * str_itr; ret = 0; needed = 0; remain = length; progress = str; str_itr = str; while (remain) { if (*str_itr == '\\') { static struct pika_escape_symbolic_names { char * name; size_t name_len; char translation; } symbolic_names[] = { { "(tab)", 5, '\t' }, { "(nl)", 4, '\n' }, { "(cr)", 4, '\r' }, { "(np)", 4, '\f' }, { "(sp)", 4, ' ' }, { "\\", 1, '\\' }, { "\"", 1, '"' }, { 0, 0, 0 } }; int x; ++str_itr; --remain; for (x = 0; symbolic_names[x].name; ++x) { if (!str_casecmp_prefix_n (symbolic_names[x].name, symbolic_names[x].name_len, str_itr, remain)) { str_itr += symbolic_names[x].name_len; remain -= symbolic_names[x].name_len; ++needed; if (result_length) { *result = symbolic_names[x].translation; ++result; --result_length; } else ret = -1; break; } } if (!symbolic_names[x].name) { if (!str_casecmp_prefix_n ("(U+", (size_t)3, str_itr, remain)) { int err; unsigned n; size_t consumed; str_itr += 3; remain -= 3; if (cvt_scan_hex_to_uint (&err, &n, &consumed, str_itr, remain)) goto einval; if (n > 0xff) goto einval; str_itr += consumed; remain -= consumed; if (*str_itr != ')') goto einval; ++str_itr; --remain; ++needed; if (result_length) { *result = (t_uchar)n; ++result; --result_length; } else ret = -1; } else { einval: ret = -1; goto exit; } } } else { ++needed; --remain; if (result_length) { *result = *str_itr; ++result; --result_length; ++str_itr; } else ret = -1; } if (ret == 0) progress = str_itr; } if (result_length) *result = '\0'; else ret = -1; exit: if (result_needed) *result_needed = needed; if (str_used) *str_used = progress - str; return ret; } static int str_print (size_t * needed, t_uchar * to, size_t to_length, const t_uchar * from) { size_t used; used = 0; while ((used < to_length) && *from) { *to++ = *from++; ++used; } if (*from) { while (*from) { ++used; ++from; } if (needed) *needed = used; return -1; } if (needed) *needed = used; return 0; } /*(include-documentation "pika-escaping-utils.c") */ tla-1.3.5+dfsg/src/hackerlab/char/dstr.h0000644000175000017500000000302310457621774016515 0ustar useruser/* dstr.h: * **************************************************************** * Copyright (C) 2004 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__CHAR__DSTR_H #define INCLUDE__CHAR__DSTR_H #include "hackerlab/char/str.h" struct dstr_handle; typedef struct dstr_handle * t_dstr; /* automatically generated __STDC__ prototypes */ extern t_dstr dstr_save (alloc_limits limits, const t_uchar * str); extern t_dstr dstr_make_n (alloc_limits limits, size_t len); extern t_dstr dstr_save_n (alloc_limits limits, const t_uchar * str, size_t len); extern t_dstr dstr_copy (alloc_limits limits, t_dstr orig); extern t_dstr dstr_take (alloc_limits limits, t_uchar * str, size_t len); extern void dstr_ref (t_dstr s); extern void dstr_unref (t_dstr s); extern size_t dstr_length (t_dstr x); extern t_uchar * dstr_data (size_t * length, t_dstr x); extern unsigned long dstr_hash (t_dstr str); extern int dstr_cmp (t_dstr ad, t_dstr bd); extern int dstr_casecmp (t_dstr ad, t_dstr bd); extern int dstr_cat (t_dstr to, t_dstr from); extern t_dstr dstr_append (alloc_limits limits, t_dstr left, t_dstr right); extern void dstr_shrink (t_dstr str, size_t start, size_t end); extern t_dstr dstr_substr (alloc_limits limits, t_dstr str, size_t start, size_t end); #endif /* INCLUDE__CHAR__DSTR_H */ /* tag: Tom Lord Thu Jan 1 10:49:53 2004 (dstr.h) */ tla-1.3.5+dfsg/src/hackerlab/char/char-class.c0000644000175000017500000002037310457621774017563 0ustar useruser/* char-class.c - character classifications * **************************************************************** * Copyright (C) 1998, 2000 Thomas Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/char/char-class.h" /************************************************************************ *(h1 "Character Classes" * :include ("char/char-class.h")) * * The character-class macros assign each byte to various categories of * characters such as upper-case and lower-case letters. * * These functions are based on the ASCII character set. They are not * locale-sensative. * */ #define cset(Q) \ Q(0), Q(1), Q(2), Q(3), Q(4), Q(5), Q(6), Q(7), \ Q(8), Q(9), Q(10), Q(11), Q(12), Q(13), Q(14), Q(15), \ Q(16), Q(17), Q(18), Q(19), Q(20), Q(21), Q(22), Q(23), \ Q(24), Q(25), Q(26), Q(27), Q(28), Q(29), Q(30), Q(31), \ Q(32), Q(33), Q(34), Q(35), Q(36), Q(37), Q(38), Q(39), \ Q(40), Q(41), Q(42), Q(43), Q(44), Q(45), Q(46), Q(47), \ Q(48), Q(49), Q(50), Q(51), Q(52), Q(53), Q(54), Q(55), \ Q(56), Q(57), Q(58), Q(59), Q(60), Q(61), Q(62), Q(63), \ Q(64), Q(65), Q(66), Q(67), Q(68), Q(69), Q(70), Q(71), \ Q(72), Q(73), Q(74), Q(75), Q(76), Q(77), Q(78), Q(79), \ Q(80), Q(81), Q(82), Q(83), Q(84), Q(85), Q(86), Q(87), \ Q(88), Q(89), Q(90), Q(91), Q(92), Q(93), Q(94), Q(95), \ Q(96), Q(97), Q(98), Q(99), Q(100), Q(101), Q(102), Q(103), \ Q(104), Q(105), Q(106), Q(107), Q(108), Q(109), Q(110), Q(111), \ Q(112), Q(113), Q(114), Q(115), Q(116), Q(117), Q(118), Q(119), \ Q(120), Q(121), Q(122), Q(123), Q(124), Q(125), Q(126), Q(127), \ Q(128), Q(129), Q(130), Q(131), Q(132), Q(133), Q(134), Q(135), \ Q(136), Q(137), Q(138), Q(139), Q(140), Q(141), Q(142), Q(143), \ Q(144), Q(145), Q(146), Q(147), Q(148), Q(149), Q(150), Q(151), \ Q(152), Q(153), Q(154), Q(155), Q(156), Q(157), Q(158), Q(159), \ Q(160), Q(161), Q(162), Q(163), Q(164), Q(165), Q(166), Q(167), \ Q(168), Q(169), Q(170), Q(171), Q(172), Q(173), Q(174), Q(175), \ Q(176), Q(177), Q(178), Q(179), Q(180), Q(181), Q(182), Q(183), \ Q(184), Q(185), Q(186), Q(187), Q(188), Q(189), Q(190), Q(191), \ Q(192), Q(193), Q(194), Q(195), Q(196), Q(197), Q(198), Q(199), \ Q(200), Q(201), Q(202), Q(203), Q(204), Q(205), Q(206), Q(207), \ Q(208), Q(209), Q(210), Q(211), Q(212), Q(213), Q(214), Q(215), \ Q(216), Q(217), Q(218), Q(219), Q(220), Q(221), Q(222), Q(223), \ Q(224), Q(225), Q(226), Q(227), Q(228), Q(229), Q(230), Q(231), \ Q(232), Q(233), Q(234), Q(235), Q(236), Q(237), Q(238), Q(239), \ Q(240), Q(241), Q(242), Q(243), Q(244), Q(245), Q(246), Q(247), \ Q(248), Q(249), Q(250), Q(251), Q(252), Q(253), Q(254), Q(255) #define as_lower(X) ((((X) >= 'A') && ((X) <= 'Z')) \ ? ((X) - 'A' + 'a') \ : (X)) #define as_upper(X) ((((X) >= 'a') && ((X) <= 'z')) \ ? ((X) - 'a' + 'A') \ : (X)) t_uchar char__to_lower_table[] = { cset(as_lower) }; t_uchar char__to_upper_table[] = { cset(as_upper) }; #define upper_test(C) (((C) >= 'A') && ((C) <= 'Z')) #define lower_test(C) (((C) >= 'a') && ((C) <= 'z')) #define alpha_test(C) (upper_test(C) || lower_test(C)) #define digit_test(C) (((C) >= '0') && ((C) <= '9')) #define alnum_test(C) (alpha_test(C) || digit_test(C)) #define control_test(C) ((C) < 32) #define space_test(C) (((C) == '\n') || ((C) == '\t') || ((C) == '\f') || ((C) == ' ') || ((C) == '\r') || ((C) == '\v')) #define graph_test(C) (((C) >= 33) && ((C) < 127)) #define printable_test(C) (graph_test(C) || ((C) == ' ')) #define c_id_test(C) (alnum_test(C) || ((C) == '_')) #define xdigit_test(C) ( digit_test(C) \ || (((C) >= 'a') && ((C) <= 'f')) \ || (((C) >= 'A') && ((C) <= 'F'))) #define odigit_test(C) (((C) >= '0') && ((C) <= '7')) #define punct_test(C) ( (((C) >= 33) && ((C) <= 47)) \ || (((C) >= 58) && ((C) <= 64)) \ || (((C) >= 91) && ((C) <= 96)) \ || (((C) >= 123) && ((C) <= 126))) #define blank_test(C) (((C) == ' ') || ((C) == '\t')) #define non_ascii_test(C) ((C) >= 128) #define upper_bit(C) (upper_test(C) ? char_class_upper : 0) #define lower_bit(C) (lower_test(C) ? char_class_lower : 0) #define alpha_bit(C) (alpha_test(C) ? char_class_alpha : 0) #define digit_bit(C) (digit_test(C) ? char_class_digit : 0) #define alnum_bit(C) (alnum_test(C) ? char_class_alnum : 0) #define control_bit(C) (control_test(C) ? char_class_control : 0) #define printable_bit(C) (printable_test(C) ? char_class_printable : 0) #define space_bit(C) (space_test(C) ? char_class_space : 0) #define graph_bit(C) (graph_test(C) ? char_class_graph : 0) #define c_id_bit(C) (c_id_test(C) ? char_class_c_id : 0) #define xdigit_bit(C) (xdigit_test(C) ? char_class_xdigit : 0) #define odigit_bit(C) (odigit_test(C) ? char_class_odigit : 0) #define punct_bit(C) (punct_test(C) ? char_class_punct : 0) #define blank_bit(C) (blank_test(C) ? char_class_blank : 0) #define non_ascii_bit(C) (non_ascii_test(C) ? char_class_non_ascii : 0) #define class_bits(C) ( upper_bit(C) \ | lower_bit(C) \ | alpha_bit(C) \ | digit_bit(C) \ | alnum_bit(C) \ | control_bit(C) \ | printable_bit(C) \ | space_bit(C) \ | graph_bit(C) \ | c_id_bit(C) \ | xdigit_bit(C) \ | odigit_bit(C) \ | punct_bit(C) \ | blank_bit(C) \ | non_ascii_bit(C)) #define digit_value_n(C) ((digit_test (C) \ ? ((C) - '0') \ : (upper_test (C) \ ? (10 + (C) - 'A') \ : ((lower_test (C) \ ? (10 + (C) - 'a') \ : -1))))) unsigned short char__class_table[] = { cset (class_bits) }; short char__digit_value_table [] = { cset (digit_value_n) }; #if 0 /*(c char_is_upper :category macro) * int char_is_upper (t_uchar x); * * Return 1 if `x' is an upper case letter, 0 otherwise. */ int char_is_upper (t_uchar x) { macro } /*(c char_is_lower :category macro) * int char_is_lower (t_uchar x); * * Return 1 if `x' is a lower case letter, 0 otherwise. */ int char_is_lower (t_uchar x) { macro } /*(c char_is_alpha :category macro) * int char_is_alpha (t_uchar x); * * Return 1 if `x' is an upper or lower case letter, 0 otherwise. */ int char_is_alpha (t_uchar x) { macro } /*(c char_is_digit :category macro) * int char_is_digit (t_uchar x); * * Return 1 if `x' is a decimal digit, 0 otherwise. */ int char_is_digit (t_uchar x) { macro } /*(c char_is_alnum :category macro) * int char_is_alnum (t_uchar x); * * Return 1 if `x' is an upper or lower case letter or digit, 0 otherwise. */ int char_is_alnum (t_uchar x) { macro } /*(c char_is_control :category macro) * int char_is_control (t_uchar x); * * Return 1 if `x' is a control character, 0 otherwise. */ int char_is_control (t_uchar x) { macro } /*(c char_is_printable :category macro) * int char_is_printable (t_uchar x); * * Return 1 if `x' is a printable character, 0 otherwise. */ int char_is_printable (t_uchar x) { macro } /*(c char_is_space :category macro) * int char_is_space (t_uchar x); * * Return 1 if `x' is a space character, 0 otherwise. */ int char_is_space (t_uchar x) { macro } /*(c char_is_graph :category macro) * int char_is_graph (t_uchar x); * * Return 1 if `x' is a non-space printable character, 0 otherwise. */ int char_is_graph (t_uchar x) { macro } /*(c char_is_c_id :category macro) * int char_is_c_id (t_uchar x); * * Return 1 if `x' is an alpha-numeric character or '_', 0 otherwise. */ int char_is_c_id (t_uchar x) { macro } /*(c char_is_xdigit :category macro) * int char_is_xdigit (t_uchar x); * * Return 1 if `x' is a hexadecimal digit, 0 otherwise. */ int char_is_xdigit (t_uchar x) { macro } /*(c char_is_odigit :category macro) * int char_is_odigit (t_uchar x); * * Return 1 if `x' is an octal digit, 0 otherwise. */ int char_is_odigit (t_uchar x) { macro } /*(c char_is_punct :category macro) * int char_is_punct (t_uchar x); * * Return 1 if `x' is a punctuation character, 0 otherwise. */ int char_is_punct (t_uchar x) { macro } /*(c char_is_ascii :category macro) * int char_is_ascii (t_uchar x); * * Return 1 if `x' is an ascii character. */ int char_is_non_ascii (t_uchar x) { macro } /*(c char_is_non_ascii :category macro) * int char_is_non_ascii (t_uchar x); * * Return 1 if `x' is not a plain ascii character. */ int char_is_non_ascii (t_uchar x) { macro } #endif tla-1.3.5+dfsg/src/hackerlab/char/=scaffolding/0000755000175000017500000000000010457621774017746 5ustar userusertla-1.3.5+dfsg/src/hackerlab/char/=scaffolding/=names.c0000644000175000017500000000230010457621774021305 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:41:26 2001 (=names.c) */ /* =names.c - generate a list of character names * **************************************************************** * Copyright (C) 2000 Thomas Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ /* This is handy for generating part of "chrname.c" * * cc -o =names =names.c ; ./=names ; rm =names * */ #include #include #include #include #include #include int main (int argc, char ** argv) { int x; x = 0; while (x < 256) { if (x == '\\') fputs (" \"\\\\\\\\\",", stdout); else if (x == '"') fputs (" \"\\\\\\\"\",", stdout); else if (isprint (x)) printf (" \"%c\",", x); else { switch (x) { default: printf (" \"\\\\0%o\",", x); break; case '\n': fputs (" \"\\\\n\",", stdout); break; case '\t': fputs (" \"\\\\t\",", stdout); break; case '\f': fputs (" \"\\\\f\",", stdout); break; } } ++x; if (!(x % 8)) putchar ('\n'); } putchar ('\n'); return 0; } tla-1.3.5+dfsg/src/hackerlab/char/pika-escaping.h0000644000175000017500000000224210457621774020256 0ustar useruser/* pika-escaping.h - decls for escaping/unescaping pika scheme strings * **************************************************************** * Copyright (C) 2004 Christian Thaeter * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__CHAR__PIKA_ESCAPING_H #define INCLUDE__CHAR__PIKA_ESCAPING_H #include "hackerlab/char/char-class.h" #include "hackerlab/char/str.h" /* automatically generated __STDC__ prototypes */ extern size_t pika_escape_iso8859_1_n (t_uchar * result, size_t result_length, int escape_classes, const t_uchar * str, size_t length); extern int pika_unescape_iso8859_1_n (size_t * result_needed, size_t * str_used, t_uchar * result, size_t result_length, const t_uchar * str, size_t length); #endif /* INCLUDE__CHAR__PIKA_ESCAPING_H */ tla-1.3.5+dfsg/src/hackerlab/char/str.h0000644000175000017500000000670710457621774016365 0ustar useruser/* str.h - decls for string functions * **************************************************************** * Copyright (C) 1998, 2000 Thomas Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__CHAR__STR_H #define INCLUDE__CHAR__STR_H #include "hackerlab/char/str-many.h" /* automatically generated __STDC__ prototypes */ extern size_t str_length (const t_uchar * x); extern size_t str_length_n (const t_uchar * x, size_t n); extern unsigned long str_hash (const t_uchar * chr); extern unsigned long str_hash_n (const t_uchar * chr, size_t len); extern t_uchar * str_chr_index (const t_uchar * s, int c); extern t_uchar * str_chr_rindex (const t_uchar * s, int c); extern t_uchar * str_chr_index_n (const t_uchar * s, size_t n, int c); extern t_uchar * str_chr_rindex_n (const t_uchar * s, size_t n, int c); extern t_uchar * str_separate (t_uchar ** stringp, t_uchar * delims); extern int str_cmp (const t_uchar * a, const t_uchar * b); extern int str_cmp_n (const t_uchar * a, size_t a_l, const t_uchar * b, size_t b_l); extern int str_cmp_prefix (const t_uchar * prefix, const t_uchar * s); extern int str_cmp_prefix_n (const t_uchar * prefix, size_t prefix_len, const t_uchar * s, size_t s_len); extern int str_casecmp (const t_uchar * a, const t_uchar * b); extern int str_casecmp_n (const t_uchar * a, size_t a_l, const t_uchar * b, size_t b_l); extern int str_casecmp_prefix (const t_uchar * prefix, const t_uchar * s); extern int str_casecmp_prefix_n (const t_uchar * prefix, size_t prefix_len, const t_uchar * s, size_t s_len); extern t_uchar * str_cpy (t_uchar * to, const t_uchar * from); extern t_uchar * str_cpy_n (t_uchar * to, const t_uchar * from, size_t n); extern t_uchar * str_cat (t_uchar * to, const t_uchar * from); extern t_uchar * str_cat_n (t_uchar * to, const t_uchar * from, size_t n); extern t_uchar * str_save (alloc_limits limits, const t_uchar * str); extern t_uchar * str_save_n (alloc_limits limits, const t_uchar * str, size_t len); extern t_uchar * str_save_trimming (alloc_limits limits, const t_uchar * str); extern t_uchar * str_save_trimming_n (alloc_limits limits, const t_uchar * str, size_t len); extern t_uchar * str_alloc_cat (alloc_limits limits, const t_uchar * str1, const t_uchar * str2); extern t_uchar * str_alloc_cat_n (alloc_limits limits, const t_uchar * str1, const t_uchar * str2, size_t n); extern t_uchar * str_realloc_cat (alloc_limits limits, t_uchar * str1, const t_uchar * str2); extern t_uchar * str_realloc_cat_n (alloc_limits limits, t_uchar * str1, const t_uchar * str2, size_t n); extern size_t str_occurences (t_uchar * s, int c); #endif /* INCLUDE__CHAR__STR_H */ tla-1.3.5+dfsg/src/hackerlab/char/Makefile.in0000644000175000017500000000027410457621774017442 0ustar useruser include $(makefiles)/library-objects.mk ifeq ($(cgs__install_hackerlab),1) include $(makefiles)/install-includes.mk endif # tag: Tom Lord Tue Dec 4 14:52:09 2001 (char/Makefile.in) # tla-1.3.5+dfsg/src/hackerlab/char/str-many.c0000644000175000017500000000716210457621774017316 0ustar useruser/* str-many.c - vararg string functions * **************************************************************** * Copyright (C) 2002 Scott Parish * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include #include "hackerlab/mem/mem.h" #include "hackerlab/char/char-class.h" #include "hackerlab/char/str.h" /* __STDC__ prototypes for static functions */ static void str_cat_many_va (t_uchar * to, va_list ap); static size_t str_length_many_va (va_list ap); /************************************************************************ *(h2 "Vararg String Functions") * * */ /* str_end * * An end-of-arglist marker for the vararg string functions. */ t_uchar str_end[1]; /*(c str_cat_many) * t_uchar * str_cat_many (const t_uchar * to, ...); * * Append 0-terminated strings to the 0-terminated string `to'. The * strings should not overlap. The last argument should be the value * `str_end'. * * Returns `to'. */ t_uchar * str_cat_many (t_uchar * to, ...) { va_list ap; va_start (ap, to); str_cat_many_va (to, ap); va_end (ap); return to; } /*(c str_alloc_cat_many) * t_uchar * str_alloc_cat_many (alloc_limits limits, ...); * * Allocate a new string large enough to hold the concatenation of * 0-terminated strings (including a final 0). Initialize the new string * with the concatenation of the given strings. The last argument should * be the value `str_end'. * * Allocate storage according to `limits'. (See xref:"Allocation * With Limitations".) */ t_uchar * str_alloc_cat_many (alloc_limits limits, ...) { va_list ap; size_t len; va_start (ap, limits); len = str_length_many_va (ap); va_end (ap); if (!len) { return str_save (limits, ""); } else { t_uchar * answer; answer = (t_uchar *)lim_malloc (limits, len + 1); if (!answer) return 0; *answer = 0; va_start (ap, limits); str_cat_many_va (answer, ap); va_end (ap); return answer; } } /*(c str_realloc_cat_many) * t_uchar * str_realloc_cat_many (alloc_limits limits, * t_uchar * str1, * ...) * * Reallocate `str1' to be large enough to hold the concatenation of * 0-terminated strings (including a final 0). Initialize the new string * with the concatenation of the strings. The last argument should be the * value `str_end'. * * Allocate storage according to `limits'. (See xref:"Allocation * With Limitations".) */ t_uchar * str_realloc_cat_many (alloc_limits limits, t_uchar * str1, ...) { va_list ap; size_t added_len; size_t str1_len; size_t total_len; va_start (ap, str1); added_len = str_length_many_va (ap); va_end (ap); if (!added_len) return str1; str1_len = str_length (str1); total_len = str1_len + added_len + 1; str1 = (t_uchar *)lim_realloc (limits, str1, total_len); if (!str1) return 0; str1[str1_len] = 0; va_start (ap, str1); str_cat_many_va (str1 + str1_len, ap); va_end (ap); return str1; } static void str_cat_many_va (t_uchar * to, va_list ap) { const t_uchar * from; while (*to) ++to; for (from = va_arg (ap, const t_uchar *); from != str_end; from = va_arg (ap, const t_uchar *)) { if (from) while (*from) *to++ = *from++; } *to = 0; } static size_t str_length_many_va (va_list ap) { const t_uchar * str; size_t len; len = 0; for (str = va_arg (ap, const t_uchar *); str != str_end; str = va_arg (ap, const t_uchar *)) { len += str_length (str); } return len; } tla-1.3.5+dfsg/src/hackerlab/char/character-and-string.doc0000644000175000017500000000136110457621774022062 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:57:14 2001 (character-and-string.doc) */ /************************************************************************ *(h0 "Eight-bit Characters and Strings") * * The functions in this section operate on 8-bit characters (values * of type `char' or `t_uchar') and strings of such characters. * * \NOTE:/ Internationalized character and string functions are not * included with this release. Future releases will include such * functions in addition to those documented here. */ /*(menu) */ /*(include-documentation "char-class.c") */ /*(include-documentation "char-name.c") */ /*(include-documentation "str.c") */ /*(include-documentation "dstr.c") */ /*(include-documentation "pika-escaping.c") */ tla-1.3.5+dfsg/src/hackerlab/char/PLUGIN/0000755000175000017500000000000010457621774016370 5ustar userusertla-1.3.5+dfsg/src/hackerlab/char/PLUGIN/REQ0000644000175000017500000000003010457621774016733 0ustar useruseros char char libboot tla-1.3.5+dfsg/src/hackerlab/char/str-many.h0000644000175000017500000000161410457621774017317 0ustar useruser/* str-many.h: decls for vararg string functions * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__CHAR__STR_MANY_H #define INCLUDE__CHAR__STR_MANY_H #include "hackerlab/machine/types.h" #include "hackerlab/os/stdarg.h" #include "hackerlab/mem/alloc-limits.h" extern t_uchar str_end[]; /* automatically generated __STDC__ prototypes */ extern t_uchar * str_cat_many (t_uchar * to, ...); extern t_uchar * str_alloc_cat_many (alloc_limits limits, ...); extern t_uchar * str_realloc_cat_many (alloc_limits limits, t_uchar * str1, ...); #endif /* INCLUDE__CHAR__STR_MANY_H */ /* tag: Tom Lord Sat Jan 5 15:26:10 2002 (str-many.h) */ tla-1.3.5+dfsg/src/hackerlab/char/pika-escaping-utils.c0000644000175000017500000001225610457621774021415 0ustar useruser/* pika-escaping-utils.c - saving escaped/unescaped pika scheme strings * **************************************************************** * Copyright (C) 2004, Christian Thaeter * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/char/pika-escaping.h" #include "hackerlab/char/pika-escaping-utils.h" /* __STDC__ prototypes for static functions */ /************************************************************************ *(h2 "Allocating Convenience Functions") * * * */ /*(c pika_save_escape_iso8859_1_n) * t_uchar * pika__save_escape_iso8859_1_n (size_t * length_return, * alloc_limits limits, * int escape_classes, * const t_uchar * str, * size_t length); * * Return a freshly allocated, 0-terminated copy of `str' with * Pika escaping according to `escape_classes'. * * `str' is `length' characters long. * * Return 0 upon allocation failure. */ t_uchar * pika_save_escape_iso8859_1_n (size_t * length_return, alloc_limits limits, int escape_classes, const t_uchar * str, size_t length) { t_uchar * answer; t_uchar * realloced; size_t result_length; size_t needed; result_length = length * 2; answer = lim_malloc(limits, result_length); if (!answer) return 0; retry: needed = pika_escape_iso8859_1_n (answer, result_length, escape_classes, str, length); if (needed >= result_length) { result_length = needed + 1; realloced = lim_realloc (limits, answer, result_length); if (!realloced) goto enomem; answer = realloced; goto retry; } else { realloced = lim_realloc (limits, answer, needed + 1); if (!realloced) goto enomem; answer = realloced; } if (length_return) *length_return = needed; return answer; enomem: lim_free (limits, answer); return 0; } /*(c pika_save_escape_iso8859_1) * t_uchar * pika_save_escape_iso8859_1 (size_t * length_return, * alloc_limits limits, * int escape_classes, * const t_uchar * str); * * Return a freshly allocated, 0-terminated copy of `str' with * Pika escaping according to `escape_classes'. * * Return 0 upon allocation failure. */ t_uchar * pika_save_escape_iso8859_1 (size_t * length_return, alloc_limits limits, int escape_classes, const t_uchar * str) { size_t length; length = str_length (str); return pika_save_escape_iso8859_1_n (length_return, limits, escape_classes, str, length); } /*(c pika_save_unescape_iso8859_1_n) * t_uchar * pika_save_unescape_iso8859_1_n (size_t * length_return, * alloc_limits limits, * const t_uchar * str, * size_t length); * * Return a freshly-allocated, 0-terminated copy of `str' with Pika * escaping removed. * * `str' is `length' characters long. * * Return 0 upon allocation failure. */ t_uchar * pika_save_unescape_iso8859_1_n (size_t * length_return, alloc_limits limits, const t_uchar * str, size_t length) { t_uchar * answer; t_uchar * realloced; size_t result_length; size_t result_needed; result_length = length; answer = lim_malloc (limits, result_length); if (!answer) return 0; retry: if ( pika_unescape_iso8859_1_n (&result_needed, 0, answer, result_length, str, length) == -1 || result_needed >= result_length) { if (result_needed >= result_length) { result_length = result_needed + 1; realloced = lim_realloc (limits, answer, result_length); if (!realloced) goto error; answer = realloced; goto retry; } else goto error; } else { realloced = lim_realloc (limits, answer, result_needed + 1); if (!realloced) goto error; answer = realloced; } if (length_return) *length_return = result_needed; return answer; error: lim_free (limits, answer); return 0; } /*(c pika_save_unescape_iso8859_1) * t_uchar * pika_save_unescape_iso8859_1 (size_t * length_return, * alloc_limits limits, * const t_uchar * str); * * Return a freshly-allocated, 0-terminated copy of `str' with Pika * escaping removed. * * Return 0 upon allocation failure. */ t_uchar * pika_save_unescape_iso8859_1 (size_t * length_return, alloc_limits limits, const t_uchar * str) { size_t length; length = str_length (str); return pika_save_unescape_iso8859_1_n (length_return, limits, str, length); } tla-1.3.5+dfsg/src/hackerlab/char/str.c0000644000175000017500000005202410457621774016351 0ustar useruser/* str.c - string functions * **************************************************************** * Copyright (C) 1998, 2000 Thomas Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/bugs/panic.h" #include "hackerlab/mem/mem.h" #include "hackerlab/char/char-class.h" #include "hackerlab/char/str.h" /************************************************************************ *(h1 "String Functions") * * These functions operate on `strings', defined to be arrays of * 't_uchar' terminated by (and not otherwise containing) * the null character (`(t_uchar)0'). * * The functionality described in this function overlaps with some * of the functions in the standard C library defined by Posix, * but there are differences. Read the documentation carefully if * you are replacing uses of Posix functions with Hackerlab functions. */ /*(menu) */ /************************************************************************ *(h2 "String Length") * * * */ /*(c str_length) * size_t str_length (const t_uchar * x); * * Return the length of the 0-terminated string `x'. The length does * not include the 0-byte itself. */ size_t str_length (const t_uchar * x) { size_t q; if (!x) return 0; q = 0; while (*x) ++x, ++q; return q; } /*(c str_length_n) * size_t str_length_n (const t_uchar * x, size_t n); * * Return the length of the 0-terminated string `x' but not more than * `n'. The length does not include the 0-byte itself. * * If `x' is longer than `n' bytes, return `n'. */ size_t str_length_n (const t_uchar * x, size_t n) { size_t q; if (!x) return 0; q = 0; while ((q < n) && *x) ++x, ++q; return q; } /************************************************************************ *(h2 "Computing Hash Values From Strings") * */ /*(c str_hash) * unsigned long str_hash (const t_uchar * chr, size_t len); * * Compute an `unsigned long' hash value for a 0-terminated string. * This computes the same hash value as * * str_hash_n (chr, str_length (chr)); * */ unsigned long str_hash (const t_uchar * chr) { unsigned long result; result = 0; while (*chr) { result = *chr + (result << 3) + (result >> (8 * sizeof (result) - 3)); ++chr; } return result; } /*(c str_hash_n) * unsigned long str_hash_n (const t_uchar * chr, size_t len); * * Compute an `unsigned long' hash value for a string of the indicated * length.. */ unsigned long str_hash_n (const t_uchar * chr, size_t len) { unsigned long result; result = 0; while (len--) { result = *chr + (result << 3) + (result >> (8 * sizeof (result) - 3)); ++chr; } return result; } /************************************************************************ *(h2 "Simple String Searching and Parsing") * */ /*(c str_chr_index) * t_uchar * str_chr_index (const t_uchar * s, int c); * * Return the position in 0-terminated string `s' of the first * occurence of `c'. Return 0 if `c' does not occur in `s'. */ t_uchar * str_chr_index (const t_uchar * s, int c) { while (*s) { if (*s == c) return (t_uchar *)s; ++s; } if (c == 0) return (t_uchar *)s; return 0; } /*(c str_chr_rindex) * t_uchar * str_chr_rindex (const t_uchar * s, int c); * * Return the position in 0-terminated string `s' of the last * occurence of `c'. Return 0 if `c' does not occur in `s'. */ t_uchar * str_chr_rindex (const t_uchar * s, int c) { const t_uchar * best; best = 0; while (*s) { if (*s == c) best = s; ++s; } if (c == 0) return (t_uchar *)s; return (t_uchar *)best; } /*(c str_chr_index_n) * t_uchar * str_chr_index_n (const t_uchar * s, size_t n, int c); * * Return the position in length `n' string `s' of the first occurence * of `c'. Return 0 if `c' does not occur in `s'. */ t_uchar * str_chr_index_n (const t_uchar * s, size_t n, int c) { while (n) { if (*s == c) return (t_uchar *)s; if (!*s) return 0; ++s; --n; } return 0; } /*(c str_chr_rindex_n) * t_uchar * str_chr_rindex_n (const t_uchar * s, size_t n, int c); * * Return the position in length `n' string `s' of the last occurence * of `c'. Return 0 if `c' does not occur in `s'. */ t_uchar * str_chr_rindex_n (const t_uchar * s, size_t n, int c) { s += n - 1; while (n) { if (*s == c) return (t_uchar *)s; --s; --n; } return 0; } /*(c str_separate) * t_uchar * str_separate (t_uchar ** stringp, t_uchar * delims); * * Find the first occurence of a character from `delims' in `*stringp', * replace that character with 0, set `*stringp' the address of the next * character after that, and return the value that `*stringp' had on entry. * * If no delimeter is found in `*stringp', set `*stringp' to 0 and return * the value on entry of `*stringp'. * * If `*stringp' is 0, return 0. * * If `delims' is 0, set `*stringp' to 0, and return the value of `*stringp' * on entry. */ t_uchar * str_separate (t_uchar ** stringp, t_uchar * delims) { t_uchar * string; t_uchar * pos; string = *stringp; if (!string) return 0; if (!delims) { *stringp = 0; return string; } pos = string; while (1) { if (!*pos) { *stringp = 0; return string; } if (str_chr_index (delims, *pos)) { *pos = 0; *stringp = pos + 1; return string; } ++pos; } } /************************************************************************ *(h2 "String Comparisons") * * * */ /*(c str_cmp) * int str_cmp (const t_uchar * a, const t_uchar * b); * * Compare strings `a' and `b' returning -1 if `a' is lexically first, * 0 if the two strings are equal, 1 if `b' is lexically first. */ int str_cmp (const t_uchar * a, const t_uchar * b) { if ((!a || !*a) && (!b || !*b)) return 0; if (!b || !*b) return 1; if (!a || !a) return -1; while ((*a == *b) && *a) { ++a; ++b; } if (*a == *b) return 0; else if (*a < *b) return -1; else return 1; } /*(c str_cmp_n) * int str_cmp_n (const t_uchar * a, * size_t a_l, * const t_uchar * b, * size_t b_l); * * Compare strings `a' (length `a_l') and `b' (length `b_l') returning * -1 if `a' is lexically first, 0 if the two strings are equal, 1 if * `b' is lexically first. * */ int str_cmp_n (const t_uchar * a, size_t a_l, const t_uchar * b, size_t b_l) { size_t l; l = ((a_l < b_l) ? a_l : b_l); while (l) { t_uchar ac; t_uchar bc; ac = *a++; bc = *b++; if (ac == bc) { --l; continue; } else { return ((ac < bc) ? -1 : 1); } } if (a_l < b_l) return -1; else if (b_l < a_l) return 1; else return 0; } /*(c str_cmp_prefix) * int str_cmp_prefix (const t_uchar * prefix, const t_uchar * s); * * Compare strings `prefix' and `s'. If `prefix' is a prefix of `s', * return 0. Otherwise, if `prefix' is lexically first, return -1; * if `s' is lexically first, return 1. */ int str_cmp_prefix (const t_uchar * prefix, const t_uchar * s) { if (!prefix) return 0; if (!s) { if (!*prefix) return 0; else return 1; } while (*prefix) { if (*s < *prefix) return 1; else if (*s > *prefix) return -1; else ++prefix, ++s; } return 0; } /*(c str_cmp_prefix_n) * int str_cmp_prefix_n (const t_uchar * prefix, * size_t prefix_len, * const t_uchar * s, * size_t s_len); * * Compare strings `prefix' and `s', of the indicated lengths. If * `prefix' is a prefix of `s', return 0. Otherwise, if `prefix' is * lexically first, return -1; if `s' is lexically first, return 1. */ int str_cmp_prefix_n (const t_uchar * prefix, size_t prefix_len, const t_uchar * s, size_t s_len) { if (!prefix_len) return 0; if (!s_len) return 1; while (prefix_len && s_len) { if (*s < *prefix) return 1; else if (*s > *prefix) return -1; else { ++prefix; ++s; --prefix_len; --s_len; } } return !!prefix_len; } /************************************************************************ *(h2 "String Comparisons Ignoring Case") * */ /*(c str_casecmp) * int str_casecmp (const t_uchar * a, const t_uchar * b); * * Compare strings `a' and `b' ignoring case, returning -1 if `a' is * lexically first, 0 if the two strings are equal, 1 if `b' is * lexically first. */ int str_casecmp (const t_uchar * a, const t_uchar * b) { if ((!a || !*a) && (!b || !*b)) return 0; if (!b || !*b) return 1; if (!a || !*a) return -1; while ((char_to_lower(*a) == char_to_lower(*b)) && *a) { ++a; ++b; } if (char_to_lower(*a) == char_to_lower(*b)) return 0; else if (char_to_lower(*a) < char_to_lower(*b)) return -1; else return 1; } /*(c str_casecmp_n) * int str_casecmp_n (const t_uchar * a, size_t a_l, * const t_uchar * b, size_t b_l); * * Compare strings `a' (length `a_l') and `b' (length `b_l') ignoring * case returning -1 if `a' is lexically first, 0 if the two strings * are equal, 1 if `b' is lexically first. */ int str_casecmp_n (const t_uchar * a, size_t a_l, const t_uchar * b, size_t b_l) { size_t l; l = ((a_l < b_l) ? a_l : b_l); while (l) { t_uchar ac; t_uchar bc; ac = char_to_lower(*a++); bc = char_to_lower(*b++); if (ac < bc) return -1; else if (ac > bc) return 1; else if (!ac) return 0; --l; } if (a_l < b_l) return -1; else if (b_l < a_l) return 1; else return 0; } /*(c str_casecmp_prefix) * int str_casecmp_prefix (const t_uchar * prefix, const t_uchar * s); * * Compare strings `prefix' and `s', ignoring case. If `prefix' is a * prefix of `s', return 0. Otherwise, if `prefix' is lexically * first, return -1; if `s' is lexically first, return 1. */ int str_casecmp_prefix (const t_uchar * prefix, const t_uchar * s) { if (!prefix) return 0; if (!s) { if (!*prefix) return 0; else return 1; } while (*prefix) { if (char_to_lower(*s) < char_to_lower(*prefix)) return 1; else if (char_to_lower(*s) > char_to_lower(*prefix)) return -1; else ++prefix, ++s; } return 0; } /*(c str_casecmp_prefix_n) * int str_casecmp_prefix_n (const t_uchar * prefix, * size_t prefix_len, * const t_uchar * s, * size_t s_len); * * Compare strings `prefix' and `s', of the indicated lengths, * ignoring case. If `prefix' is a prefix of `s', return 0. * Otherwise, if `prefix' is lexically first, return -1; if `s' is * lexically first, return 1. */ int str_casecmp_prefix_n (const t_uchar * prefix, size_t prefix_len, const t_uchar * s, size_t s_len) { if (!prefix_len) return 0; if (!s_len) return 1; while (prefix_len && s_len) { if (char_to_lower(*s) < char_to_lower (*prefix)) return 1; else if (char_to_lower (*s) > char_to_lower (*prefix)) return -1; else { ++prefix; ++s; --prefix_len; --s_len; } } return !!prefix_len; } /************************************************************************ *(h2 "String Copying") * */ /*(c str_cpy) * t_uchar * str_cpy (t_uchar * to, const t_uchar * from); * * Copy the 0-terminated string `from' to `to'. `from' and `to' * should not overlap. * * Returns `to'. */ t_uchar * str_cpy (t_uchar * to, const t_uchar * from) { t_uchar * answer; answer = to; if (from) { while (*from) *to++ = *from++; } *to = 0; return answer; } /*(c str_cpy_n) * t_uchar * str_cpy_n (t_uchar * to, * const t_uchar * from, * size_t n); * * Copy up-to `n' characters from `from' to `to'. * * Add a final 0 to `to'. * * \Warning:/ This function is different from `strncpy'. `strncpy' * always stores exactly `n' characters in `to', padding the result * with 0 if a 0 character is encountered in `from' before `n' * characters are written. This function stores up to `n+1' characters: * up to `n' non-0 characters from `from', plus a final 0. * * Returns `to'. */ t_uchar * str_cpy_n (t_uchar * to, const t_uchar * from, size_t n) { t_uchar * answer; answer = to; if (from) { while (n && *from) { *to++ = *from++; --n; } } *to++ = 0; return answer; } /************************************************************************ *(h2 "String Concatenation") * * * */ /*(c str_cat) * t_uchar * str_cat (t_uchar * to, const t_uchar * from); * * Append the 0-terminated string `from' to the 0-terminated string * `to'. The strings should not overlap. * * Returns `to'. */ t_uchar * str_cat (t_uchar * to, const t_uchar * from) { t_uchar * answer; answer = to; if (from) { while (*to) ++to; while (*from) *to++ = *from++; *to = 0; } return answer; } /*(c str_cat_n) * t_uchar * str_cat_n (t_uchar * to, * const t_uchar * from, * size_t n); * * Append at most `n' characters of the 0-terminated string `from' to * the 0-terminated string `to'. The strings should not overlap. * Add a final 0 (thus writing up to `n + 1' characters in `to', * starting from the position of the final 0 in `to' on entry). * * Returns `to'. */ t_uchar * str_cat_n (t_uchar * to, const t_uchar * from, size_t n) { t_uchar * answer; answer = to; while (*to) ++to; while (n && *from) { *to++ = *from++; --n; } *to = 0; return answer; } /************************************************************************ *(h2 "String Allocators") * * */ /*(c str_save) * t_uchar * str_save (alloc_limits limits, const t_uchar * str); * * Allocate a copy of the 0-terminated string `str'. * * Allocate storage according to `limits'. (See xref:"Allocation * With Limitations".) */ t_uchar * str_save (alloc_limits limits, const t_uchar * str) { t_uchar * it; size_t len; len = str_length (str); invariant (len + 1); it = (t_uchar *)lim_malloc (limits, len + 1); if (!it) return 0; str_cpy (it, str); return it; } /*(c str_save_n) * t_uchar * str_save_n (alloc_limits limits, * const t_uchar * str, * size_t len); * * Allocate a copy of the n-byte string `str'. * Add one byte to the new string and store 0 in that byte. * * Allocate storage according to `limits'. (See xref:"Allocation * With Limitations".) */ t_uchar * str_save_n (alloc_limits limits, const t_uchar * str, size_t len) { t_uchar * it; invariant (len + 1); it = (t_uchar *)lim_malloc (limits, len + 1); if (!it) return 0; mem_move (it, str, len); it[len] = 0; return it; } /*(c str_save_trimming) * t_uchar * str_save_trimming (alloc_limits limits, const t_uchar * str); * * Allocate a copy of the 0-terminated string `str', discarding * leading and trailing whitespace from the copy. * * Allocate storage according to `limits'. (See xref:"Allocation * With Limitations".) */ t_uchar * str_save_trimming (alloc_limits limits, const t_uchar * str) { const t_uchar * start; const t_uchar * scan; const t_uchar * end; size_t len; t_uchar * it; if (!str) start = scan = end = 0; else { for (start = str; *start && char_is_space (*start); ++start) ; end = start; for (scan = start; *scan; ++scan) { if (!char_is_space (*scan)) end = scan + 1; } } len = (end - start); invariant (len + 1); it = (t_uchar *)lim_malloc (limits, len + 1); if (!it) return 0; mem_move (it, start, len); it[len] = 0; return it; } /*(c str_save_trimming_n) * t_uchar * str_save_trimming_n (alloc_limits limits, * const t_uchar * str, * size_t len); * * Allocate a copy of the n-byte string `str'. Leading and * trailing whitespace are discarded from the copy (which may * therefore be of length less than `n'). * * The copy includes a trailing 0. * * Allocate storage according to `limits'. (See xref:"Allocation * With Limitations".) */ t_uchar * str_save_trimming_n (alloc_limits limits, const t_uchar * str, size_t len) { t_uchar * it; while (len && char_is_space (*str)) { ++str; --len; } while (len && char_is_space (str[len - 1])) { --len; } invariant (len + 1); it = (t_uchar *)lim_malloc (limits, len + 1); if (!it) return 0; mem_move (it, str, len); it[len] = 0; return it; } /*(c str_alloc_cat) * t_uchar * str_alloc_cat (alloc_limits limits, * const t_uchar * str1, * const t_uchar * str2); * * Allocate a new string large enough to hold the concatenation of * 0-terminated strings `str1' and `str2' (including a final 0). * Initialize the new string with the concatenation of `str1' and * `str2'. * * Allocate storage according to `limits'. (See xref:"Allocation * With Limitations".) */ t_uchar * str_alloc_cat (alloc_limits limits, const t_uchar * str1, const t_uchar * str2) { if (!str1 && !str2) return 0; if (!str1) return str_save (limits, str2); if (!str2) return str_save (limits, str1); { t_uchar * it; size_t len; len = str_length (str1) + str_length (str2) + 1; it = (t_uchar *)lim_malloc (limits, len); if (!it) return 0; str_cpy (it, str1); str_cat (it, str2); return it; } } /*(c str_alloc_cat_n) * t_uchar * str_alloc_cat_n (alloc_limits limits, * const t_uchar * str1, * const t_uchar * str2, * size_t n); * * Allocate a new 0-terminated string large enough to hold the * concatenation of 0-terminated strings `str1' and `str2', * considering at most `n' characters from `str2'. * * Initialize the new string with the concatenation of `str1' and * up to `n' characters of `str2'. Append a final 0. * * Allocate storage according to `limits'. (See xref:"Allocation * With Limitations".) */ t_uchar * str_alloc_cat_n (alloc_limits limits, const t_uchar * str1, const t_uchar * str2, size_t n) { if (!str1 && !str2) return 0; if (!str1) return str_save_n (limits, str2, n); if (!str2) return str_save (limits, str1); { t_uchar * it; size_t len; len = str_length (str1) + str_length_n (str2, n) + 1; it = (t_uchar *)lim_malloc (limits, len); if (!it) return 0; str_cpy (it, str1); str_cat_n (it, str2, n); return it; } } /*(c str_realloc_cat) * t_uchar * str_realloc_cat (alloc_limits limits, * t_uchar * str1, * const t_uchar * str2); * * Reallocate `str1`' to be large enough to hold the concatenation of * 0-terminated strings `str1' and `str2' (including a final 0). * Initialize the new string with the concatenation of `str1' and * `str2'. * * Allocate storage according to `limits'. (See xref:"Allocation * With Limitations".) */ t_uchar * str_realloc_cat (alloc_limits limits, t_uchar * str1, const t_uchar * str2) { if (!str1 && !str2) return 0; if (!str1) return str_save (limits, str2); if (!str2) return str1; { t_uchar * it; size_t len; len = str_length (str1) + str_length (str2) + 1; it = (t_uchar *)lim_realloc (limits, str1, len); if (!it) return 0; str_cat (it, str2); return it; } } /*(c str_realloc_cat_n) * t_uchar * str_realloc_cat_n (alloc_limits limits, * t_uchar * str1, * const t_uchar * str2, * size_t n); * * Reallocate `str' to be large enough to hold the * concatenation of 0-terminated strings `str1' and `str2', * considering at most `n' characters from `str2'. * * Initialize the new string with the concatenation of `str1' and * up to `n' characters of `str2'. Append a final 0. * * Allocate storage according to `limits'. (See xref:"Allocation * With Limitations".) */ t_uchar * str_realloc_cat_n (alloc_limits limits, t_uchar * str1, const t_uchar * str2, size_t n) { if (!str1 && !str2) return 0; if (!str1) return str_save_n (limits, str2, n); if (!str2) return str1; { t_uchar * it; size_t len; len = str_length (str1) + str_length_n (str2, n) + 1; it = (t_uchar *)lim_realloc (limits, str1, len); if (!it) return 0; str_cat_n (it, str2, n); return it; } } size_t str_occurences (t_uchar * s, int c) { size_t answer; answer = 0; while (*s) { if (*s == c) ++answer; ++s; } return answer; } /*(include-documentation "str-many.c") */ tla-1.3.5+dfsg/src/hackerlab/char/dstr.c0000644000175000017500000002167010457621774016520 0ustar useruser/* dstr.c - dynamically sized string functions * **************************************************************** * Copyright (C) 1998, 2000 Thomas Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/mem/mem.h" #include "hackerlab/mem/alloc-limits.h" #include "hackerlab/char/char-class.h" #include "hackerlab/char/dstr.h" struct dstr_handle { size_t length; t_uchar * data; alloc_limits limits; int refs; }; /************************************************************************ *(h1 "Dynamic String Functions") * * These functions operate on dynamically resizable strings of `char' * values. */ /*(menu) */ /************************************************************************ *(h2 "The t_dstr Type") * * * */ /*(c t_dstr :category type) * typedef t_dstr; * * The type of dynamic strings. */ /************************************************************************ *(h2 "Allocating New Dynamic Strings") * * * */ /*(c dstr_save) * t_dstr dstr_save (alloc_limits limits, const t_uchar * str); * * Create a new dynamic string which is a copy of the 0-terminated * string `str'. */ t_dstr dstr_save (alloc_limits limits, const t_uchar * str) { return dstr_save_n (limits, str, str_length (str)); } /*(c dstr_make_n) * t_dstr dstr_make_n (alloc_limits limits, size_t len); * * Create a new dynamic string which is initialized to `len' NUL * characters. */ t_dstr dstr_make_n (alloc_limits limits, size_t len) { t_dstr answer; answer = (t_dstr)lim_malloc (limits, sizeof (*answer)); if (!answer) return 0; answer->limits = limits; answer->length = len; answer->refs = 1; answer->data = (t_uchar *)lim_malloc (limits, len + 1); if (answer->data) { mem_set0 (answer->data, len + 1); } else { lim_free (0, answer); answer = 0; } return answer; } /*(c dstr_save_n) * t_dstr dstr_save_n (alloc_limits limits, const t_uchar * str, size_t len); * * Create a new dynamic string which is a copy of `len'-byte * string `str'. */ t_dstr dstr_save_n (alloc_limits limits, const t_uchar * str, size_t len) { t_dstr answer; answer = (t_dstr)lim_malloc (limits, sizeof (*answer)); if (!answer) return 0; answer->limits = limits; answer->length = len; answer->refs = 1; answer->data = (t_uchar *)lim_malloc (limits, 1 + len); if (answer->data) { mem_move (answer->data, str, len); answer->data[len] = 0; } else { lim_free (0, answer); answer = 0; } return answer; } /*(c dstr_copy) * t_dstr dstr_copy (alloc_limits limits, t_dstr orig); * * Allocate a new copy of a dynamic string. */ t_dstr dstr_copy (alloc_limits limits, t_dstr orig) { return dstr_save_n (limits, orig->data, orig->length); } /*(c dstr_take) * t_dstr dstr_take (alloc_limits limits, * t_uchar * str, size_t len); * * Allocate a new dstr, "taking over" the allocated * string `str'. * * If the new dstr can not be allocated, `str' is freed. */ t_dstr dstr_take (alloc_limits limits, t_uchar * str, size_t len) { t_dstr answer; answer = (t_dstr)lim_malloc (limits, sizeof (*answer)); if (!answer) { lim_free (limits, str); return 0; } answer->limits = limits; answer->length = len; answer->refs = 1; answer->data = str; return answer; } /************************************************************************ *(h2 "Reference Counting Dynamic Strings") * * Dynamic strings are reference counte and are initially allocated with * a reference count of 1. * */ /*(c dstr_ref) * void dstr_ref (t_dstr s); * * Increase the reference count of `s'. */ void dstr_ref (t_dstr s) { if (s) ++s->refs; } /*(c dstr_unref) * void dstr_unref (t_dstr s); * * Decrement the reference count of `s', freeing it if the * reference count drops to 0. */ void dstr_unref (t_dstr s) { if (s && !--s->refs) { lim_free (s->limits, s->data); lim_free (s->limits, s); } } /************************************************************************ *(h2 "Dynamic String Data") * * * */ /*(c dstr_length) * size_t dstr_length (t_dstr x); * * Return the length of the dynamic string x. */ size_t dstr_length (t_dstr x) { if (!x) return 0; else return x->length; } /*(c dstr_data) * t_uchar * dstr_data (size_t * length, t_dstr x); * * Return a pointer to the data for dynamic string `x'. Store the * length of `x' in `*length' (if `length' is not 0). * * The pointer remains valid until the string is freed or modified. * * A final `NUL' character is promised to be appended to the data * but this does not preclude there being other `NUL' characters * within the string. */ t_uchar * dstr_data (size_t * length, t_dstr x) { if (!x) { if (length) *length = 0; return 0; } else { if (length) *length = x->length; return x->data; } } /************************************************************************ *(h2 "Computing Hash Values From Dynamic Strings") * */ /*(c dstr_hash_n) * unsigned long dstr_hash (t_dstr str); * * Compute an `unsigned long' hash value for a string. */ unsigned long dstr_hash (t_dstr str) { t_uchar * data; size_t len; data = dstr_data (&len, str); return str_hash_n (data, len); } /************************************************************************ *(h2 "Dynamic String Comparisons") * * * */ /*(c dstr_cmp) * int dstr_cmp (t_dstr a, t_dstr b); * * Compare strings `a' and `b' returning -1 if `a' is lexically first, * 0 if the two strings are equal, 1 if `b' is lexically first. */ int dstr_cmp (t_dstr ad, t_dstr bd) { t_uchar * a; size_t a_l; t_uchar * b; size_t b_l; a = dstr_data (&a_l, ad); b = dstr_data (&b_l, bd); if ((a == b) && (a_l == b_l)) return 0; return str_cmp_n (a, a_l, b, b_l); } /*(c dstr_casecmp) * int dstr_casecmp (t_dstr a, t_dstr b); * * Compare strings `a' and `b', ignoring case, returning -1 if `a' is * lexically first, 0 if the two strings are equal, 1 if `b' is * lexically first. */ int dstr_casecmp (t_dstr ad, t_dstr bd) { t_uchar * a; size_t a_l; t_uchar * b; size_t b_l; a = dstr_data (&a_l, ad); b = dstr_data (&b_l, bd); if ((a == b) && (a_l == b_l)) return 0; return str_casecmp_n (a, a_l, b, b_l); } /************************************************************************ *(h2 "Dynamic String Concatenation") * * * */ /*(c dstr_cat) * int dstr_cat (t_dstr to, t_dstr from); * * Append `from' to `to', modifying `to'. * * Return 0 normally, non-0 if an allocation failure occurs * (in which case `to' is unmodified). */ int dstr_cat (t_dstr to, t_dstr from) { size_t new_length; t_uchar * new_data; if (!from) return 0; new_length = to->length + from->length; new_data = lim_realloc (to->limits, to->data, new_length + 1); if (!new_data) return -1; to->data = new_data; mem_move (to->data + to->length, from->data, from->length); to->data[new_length] = 0; to->length = new_length; return 0; } /*(c dstr_append) * t_dstr dstr_append (alloc_limits limits, * t_dstr left, t_dstr right); * * Construct a new dynamic string which is the concatenation of * dynamic strings `left' and `right'. */ t_dstr dstr_append (alloc_limits limits, t_dstr left, t_dstr right) { t_dstr answer = 0; size_t new_length; new_length = left->length + right->length; answer = dstr_make_n (limits, new_length); if (answer) { mem_move (answer->data, left->data, left->length); mem_move (answer->data + left->length, right->data, right->length); } return answer; } /************************************************************************ *(h2 "Dynamic String Substring Extraction") * * * */ /*(c dstr_shrink) * void dstr_shrink (t_dstr str, size_t start, size_t end); * * Reduce `str' to only it's substring from `start' (inclusive) * to `end' (exclusive). */ void dstr_shrink (t_dstr str, size_t start, size_t end) { size_t new_length; t_uchar * new_data; new_length = end - start; mem_move (str->data, str->data + start, new_length); str->data[new_length] = 0; new_data = lim_realloc (str->limits, str->data, new_length + 1); if (new_data) str->data = new_data; } /*(c dstr_substr) * t_dstr dstr_substr (alloc_limits limits, * t_dstr str, * size_t start, size_t end); * * Allocate a new dynamic string which is the subset of `str' * from `start' (inclusive) to `end' (exclusive). */ t_dstr dstr_substr (alloc_limits limits, t_dstr str, size_t start, size_t end) { size_t new_length; new_length = end - start; return dstr_save_n (limits, str->data + start, new_length); } /* tag: Tom Lord Thu Jan 1 13:08:18 2004 (dstr.c) */ tla-1.3.5+dfsg/src/hackerlab/COPYING0000644000175000017500000004403110457621774015512 0ustar useruserAll or most of the source files in this distribution refer to this file for copyright and warranty information. This file should be included whenever those files are redistributed. This software is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License, version 2, as published by the Free Software Foundation. That license is reproduced below. GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License. # tag: Tom Lord Fri Jan 11 15:49:28 2002 (hackerlab/COPYING) # tla-1.3.5+dfsg/src/hackerlab/xml/0000755000175000017500000000000010457621774015255 5ustar userusertla-1.3.5+dfsg/src/hackerlab/xml/charsets.h0000644000175000017500000000517310457621774017250 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:41:43 2001 (charsets.h) */ /* xml-charsets.h - - decls for XML's standard character sets * **************************************************************** * Copyright (C) 2000 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__XML__CHARSETS_H #define INCLUDE__XML__CHARSETS_H #include "hackerlab/bitsets/bits.h" #include "hackerlab/bitsets/uni-bits.h" /************************************************************************ *(h1 "XML Character Sets" * :includes ("hackerlab/xml/charsets.h")) * * This section presents a collection of efficiently represented * sets of Unicode characters. Sets are represented as shared * bitset trees; see xref:"Shared Bitset Trees". The tree structure * of these sets is defined by `uni_bits_tree_rule'; see xref:"Unicode * Character Bitsets". * */ /*(c xml_charset :category variable) * * The set of all Unicode characters which are valid * in an XML document. This set is defined by the * production for `Char' in *XML 1.0*. */ /*(c xml_is_char :category macro) * #define xml_is_char(UNICODE) * * Return 1 if `UNICODE' (a Unicode code point) is a valid * character in XML. A code point is a valid character * if it matches the production for `Char' in *XML 1.0*, or * equivalently, if it is a member of the bitset `xml_charset'. */ /*(c xml_base_charset :category variable) * * The set of all Unicode characters that match * the production for `BaseChar' in *XML 1.0*. */ /*(c xml_combining_charset :category variable) * * The set of all Unicode characters that match * the production for `CombiningChar' in *XML 1.0*. */ /*(c xml_digit_charset :category variable) * * The set of all Unicode characters that match * the production for `Digit' in *XML 1.0*. */ /*(c xml_extender_charset :category variable) * * The set of all Unicode characters that match * the production for `Extender' in *XML 1.0*. */ /*(c xml_ideographic_charset :category variable) * * The set of all Unicode characters that match * the production for `Ideographic' in *XML 1.0*. */ extern bits xml_charset; extern bits xml_base_charset; extern bits xml_combining_charset; extern bits xml_digit_charset; extern bits xml_extender_charset; extern bits xml_ideographic_charset; extern bits xml_re_dot_charset; extern bits xml_re_meta_charset; #define xml_is_char(X) bits_is_member(xml_charset, (X)) #define xml_is_re_meta_char(X) bits_is_member(xml_re_meta_charset, (X)) /* automatically generated __STDC__ prototypes */ #endif /* INCLUDE__XML__CHARSETS_H */ tla-1.3.5+dfsg/src/hackerlab/xml/Makefile.in0000644000175000017500000000105110457621774017317 0ustar useruser libs := $(objroot)/hackerlab/libboot/libboot.a -lm generated-source := charsets.c include $(makefiles)/library-objects.mk ifeq ($(cgs__install_hackerlab),1) include $(makefiles)/install-includes.mk endif $(generated-includes) $(generated-source): ../xml-scaffolding/xml-generate echo echo "================ generating xml character sets ================" echo for f in $(generated-includes) $(generated-source) ; do test ! -e $$f || rm $$f ; done ../xml-scaffolding/xml-generate # tag: Tom Lord Tue Dec 4 14:52:16 2001 (xml/Makefile.in) # tla-1.3.5+dfsg/src/hackerlab/xml/PLUGIN/0000755000175000017500000000000010457621774016253 5ustar userusertla-1.3.5+dfsg/src/hackerlab/xml/PLUGIN/REQ0000644000175000017500000000005110457621774016621 0ustar useruserxml-scaffolding xml xml libhackerlab tla-1.3.5+dfsg/src/hackerlab/xml/xml.doc0000644000175000017500000000130010457621774016536 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:57:17 2001 (xml.doc) */ /************************************************************************ *(h0 "XML Support") * * The Hackerlab C Library contains tools for processing XML * documents. XML is defined in the specification *Extensible * Markup Language (XML) 1.0 (Second Edition)* published by * W3C (url:"http://www.w3.org/TR/REC-xml"). Within this * document, that specification is refered to *XML 1.0*. * * In addition to the functions described here, the library * contains a regular expression pattern matcher for * a pattern langauge described by W3C. See xref:"XML Regular * Expressions". * */ /*(include-documentation "charsets.h") */ tla-1.3.5+dfsg/src/hackerlab/splay/0000755000175000017500000000000010457621774015605 5ustar userusertla-1.3.5+dfsg/src/hackerlab/splay/fsplay.c0000644000175000017500000007646010457621774017264 0ustar useruser/* fsplay.c: * **************************************************************** * Copyright (C) 2004 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/bugs/panic.h" #include "hackerlab/mem/mem.h" #include "hackerlab/splay/fsplay.h" struct fsplay_tree_type { alloc_limits limits; struct fsplay_vtable * vtable; struct fsplay_tree * free_list; t_uchar * free_pool; int n_free_pool; }; static int const pool_chunk_size = (1 << 10); /* __STDC__ prototypes for static functions */ static t_fsplay_tree fsplay_alloc_node (t_fsplay_tree_type type); static t_fsplay_tree fsplay_make_splayed_node (t_fsplay_tree_type type, t_fsplay_tree being_rotated, t_fsplay_tree new_left, t_fsplay_tree new_right); static int cmp_always_minus_1 (t_fsplay_tree_type type, void * position, t_fsplay_tree tree); static int cmp_always_plus_1 (t_fsplay_tree_type type, void * position, t_fsplay_tree tree); /************************************************************************ *(h1 "t_fpslay_tree -- Functional Splay Trees" * :include "hackerlab/splay/fsplay.h") * * Functional splay trees are reference counted binary trees * which _are_never_modified_. * * Instead, operations that would normally modify a tree (such as splaying * or the insertion of a new element) work by building a new. The new * tree will share as much information as possible with the old tree. * * For example, let's suppose that we have a tree of the form: * * * T * / \ * Tl Tr * * and want to insert a new element `N' just after `T'. * We'll build a new tree: * * * N * / \ * T' Tr * / * Tl * * In which the subtrees `Tl' and `Tr' are shared with the old tree, * but elements {T'} and `N' are newly allocated. */ /*(menu) */ /*(include-documentation "fsplay.h") */ /*(c fsplay_make_type) * t_fsplay_tree_type fsplay_make_type (alloc_limits limits, * struct fsplay_vtable * vtable); * * Allocate a new type object describing a class of fsplay trees. * (See xref:"struct fsplay_vtable".) * * The allocation pool `limits' will be usef for all future allocations * related to this tree type. */ t_fsplay_tree_type fsplay_make_type (alloc_limits limits, struct fsplay_vtable * vtable) { t_fsplay_tree_type answer = 0; invariant (vtable->full_tree_node_size >= sizeof (struct fsplay_tree)); answer = lim_malloc (limits, sizeof (*answer)); if (!answer) return 0; mem_set0 ((t_uchar *)answer, sizeof (*answer)); answer->limits = limits; answer->vtable = vtable; return answer; } /************************************************************************ *(h1 "Memory Management for fsplay Trees") * * * */ static t_fsplay_tree fsplay_alloc_node (t_fsplay_tree_type type) { t_fsplay_tree answer = 0; retry: if (type->free_list) { answer = type->free_list; type->free_list = answer->left; } else if (type->n_free_pool) { --type->n_free_pool; answer = (t_fsplay_tree)(type->free_pool + type->n_free_pool * type->vtable->full_tree_node_size); } else { type->free_pool = (t_uchar *)lim_malloc (type->limits, pool_chunk_size * type->vtable->full_tree_node_size); if (type->free_pool) { type->n_free_pool = pool_chunk_size; goto retry; } } if (answer) { mem_set0 ((t_uchar *)answer, type->vtable->full_tree_node_size); answer->refs = 1; } return answer; } /*(c fsplay_make) * t_fsplay_tree fsplay_make (t_fsplay_tree_type type, * void * data); * * Create a new (single-node) splay tree from the indicated `data'. * Return 0 upon allocation failure. * * Note that as a side effect, except in the case of allocation failure, * this function will call the `ref_data' method of the vtable associated * with `type'. * * The newly allocated tree has a reference count of 1. */ t_fsplay_tree fsplay_make (t_fsplay_tree_type type, void * data) { t_fsplay_tree answer = 0; answer = fsplay_alloc_node (type); if (answer) { answer->data = data; type->vtable->ref_data (type, answer); } return answer; } /*(c fsplay_ref) * void fsplay_ref (t_fsplay_tree_type type, * t_fsplay_tree tree); * * Increment the reference count of `tree'. */ void fsplay_ref (t_fsplay_tree_type type, t_fsplay_tree tree) { if (tree) ++tree->refs; } /*(c fsplay_unref) * void fsplay_unref (t_fsplay_tree_type type, * t_fsplay_tree tree); * * Decrement the reference count of `tree'. If it falls to 0, * the tree is deallocated. */ void fsplay_unref (t_fsplay_tree_type type, t_fsplay_tree tree) { tail_call: if (tree) { --tree->refs; if (!tree->refs) { t_fsplay_tree left = tree->left; t_fsplay_tree right = tree->right; tree->left = type->free_list; type->free_list = tree; if (type->vtable->unref_data) { type->vtable->unref_data (type, tree); } if (!right && left) { tree = left; goto tail_call; } else if (!left && right) { tree = right; goto tail_call; } else if (left) /* we know && right */ { fsplay_unref (type, left); tree = right; goto tail_call; } } } } static t_fsplay_tree fsplay_make_splayed_node (t_fsplay_tree_type type, t_fsplay_tree being_rotated, t_fsplay_tree new_left, t_fsplay_tree new_right) { t_fsplay_tree answer = 0; answer = fsplay_alloc_node (type); if (answer) { /* assume that data has a reference count for this new node. */ answer->data = being_rotated->data; if (new_left) { fsplay_ref (type, new_left); answer->left = new_left; } if (new_right) { fsplay_ref (type, new_right); answer->right = new_right; } type->vtable->ref_data (type, answer); } return answer; } /************************************************************************ *(h1 "Searching in Functional Splay Trees") * * */ /*(c fsplay_find) * t_fsplay_tree fsplay_find (t_fsplay_tree_type type, * t_fsplay_cmp_position_fn cmp, * t_fsplay_tree tree, * void * position); * * Using the ordering function `cmp', search for data matching * `position' in `tree'. * * If found, the matching subtree is returned and its reference count * is incremented. (Callers should plan to use `fsplay_unref'.) * * If not found, 0 is returned. */ t_fsplay_tree fsplay_find (t_fsplay_tree_type type, t_fsplay_cmp_position_fn cmp, void * position, t_fsplay_tree tree) { tail_call: if (!tree) { return 0; } else { int cmp_order; cmp_order = cmp (type, position, tree); if (!cmp_order) { fsplay_ref (type, tree); return tree; } else if (cmp_order < 0) { tree = tree->left; goto tail_call; } else { tree = tree->right; goto tail_call; } } } /*(c fsplay_find_min) * t_fsplay_tree fsplay_find_min (t_fsplay_tree_type type, * t_fsplay_tree tree); * * Return the leftmost leaf node of `tree', incrementing its * reference count. (Callers should plan to use `fsplay_unref'.) */ t_fsplay_tree fsplay_find_min (t_fsplay_tree_type type, t_fsplay_tree tree) { if (!tree) return 0; while (tree->left) tree = tree->left; fsplay_ref (type, tree); return tree; } /*(c fsplay_find_max) * t_fsplay_tree fsplay_find_max (t_fsplay_tree_type type, * t_fsplay_tree tree); * * Return the rightmost leaf node of `tree', incrementing its * reference count. (Callers should plan to use `fsplay_unref'.) */ t_fsplay_tree fsplay_find_max (t_fsplay_tree_type type, t_fsplay_tree tree) { if (!tree) return 0; while (tree->right) tree = tree->right; fsplay_ref (type, tree); return tree; } /************************************************************************ *(h1 "Top-down Splaying for Functional Splay Trees") * * "Splaying" is a process by which a binary tree is converted into * an equivalently ordered binary tree, but with a different root node. * * On average (for a random sequence of splaying operations -- * randomly choosing which node to make the new root) splaying is an * `O(log n)' operation where `n' is the number of nodes in the tree. * * For access patterns exhibiting locality within the ordered set of * nodes, splaying tends to move frequently accessed nodes near to the * root of the tree (where they can be found very quickly). * * In classical splay trees, splaying is a mutating operation: the tree * being splayed is modified in place. * * With functional splay trees, splaying creates a _new_tree_. The new * tree shares as much state as possible with the old tree, but the root * node and up to (on average) `O(log n)' additional nodes may be newly * allocated. * * Why use functional splay trees? They are surely not for every * circumstance but they do have an attractive property: after * splaying a _functional_ tree, both the original tree and the new * tree still exist, relatively efficiently. * * The splay operation is the basis of fundamental ordered set * operations such as insertion or deletion * * Consider, therefore, using functional splay trees to implement an * editable string such as for the ``buffer'' data structure of a * text editor: * * Such a buffer is, in effect, an ordered set of ``buffer fragments'', * each representing a portion of the buffer. * * Basic editting operations insert and delete buffer fragments. * * By using any kind of splay tree: * * ~ random string insertions and deletions average `O(log n)' of the * size of the buffer rather than `O(n)' (as with gap buffers). * * ~ localized string insertions and deletions average `O(1)' (as * with gap buffers). * * By using _functional_ splay trees: * * ~ undo and redo are very simple to implement: just keep the * pre- or post-edit trees around. * * * One difficulty of this approach is the need to avoid * fragmentation. It is unacceptable, for example, that every * insertion of a single character adds a new tree node. In combination * with editting, a buffer data structure must also do some form * of ``gathering'' -- combining adjacent buffer fragments into * single, contiguous-in-memory buffer fragments. But splay trees * again make this fairly trivial: gathering the top few nodes in * a splay tree is an `O(1)' operation -- a buffer data structure can * do this in the background, incrementally, and opportunistically. * * Another difficulty of this approach is that buffer text is not * contiguous in memory. For example, a regexp match must either * first gather the buffer into a single node (an `O(n)' operation) * or must be able to operate across the fragments of a scattered string. * Now you know why `libhackerlab''s Rx pattern matcher has support * for scattered strings. * * Another difficulty of this approach is I/O, especially writing the * contents of a buffer. No you know why I'm a big fan of scatter/gather * I/O in some versions of unix-like operating systems. */ /*(c fsplay_raise) * t_fsplay_tree fsplay_raise (t_fsplay_tree_type type, * t_fsplay_cmp_position_fn cmp, * void * position, * t_fsplay_tree tree); * * Return a new tree which is a splay of `tree' that raises * the node of `tree' closest to `position' (according to `cmp') * to the root. * * ``Closest'' means: an exactly matching node if one exists, * otherwise the node to the immediate left if that exits, * otherwise the node to the immediate right. */ t_fsplay_tree fsplay_raise (t_fsplay_tree_type type, t_fsplay_cmp_position_fn cmp, void * position, t_fsplay_tree tree) { int cmp_order; if (!tree) return 0; /* The algorithm below always hold a reference count on * the current root. */ fsplay_ref (type, tree); iterate: cmp_order = cmp (type, position, tree); if (!cmp_order) { /* Give the root reference we hold to the caller. */ return tree; } else if (cmp_order < 0) { /* The desired root node is in the left subtree, if the left subtree exists. */ int cmp2_order; if (!tree->left) { /* Give the root reference we hold to the caller. */ return tree; } cmp2_order = cmp (type, position, tree->left); if (!cmp2_order) { /* zig * * T * / \ * Tl _Tr * / \ * _Tll _Tlr * * Tl is our desired tree-root. * * Nodes beginning with _ might be NULL. * * We need to make: * * Tl' * / \ * _Tll T' * / \ * _Tlr _Tr * * * Note that the preorder traversals are: * * before: _Tll Tl _Tlr T _Tr * after: _Tll Tl' _Tlr T' _Tr */ t_fsplay_tree T_prime = 0; t_fsplay_tree Tl_prime = 0; Tl_is_target_root: T_prime = fsplay_make_splayed_node (type, tree, tree->left->right, tree->right); if (!T_prime) { zig_alloc_error: fsplay_unref (type, T_prime); fsplay_unref (type, Tl_prime); fsplay_unref (type, tree); return 0; } Tl_prime = fsplay_make_splayed_node (type, tree->left, tree->left->left, T_prime); if (!Tl_prime) goto zig_alloc_error; fsplay_unref (type, T_prime); fsplay_unref (type, tree); /* keep the reference on Tl_prime and give it to the caller. */ return Tl_prime; } else if (cmp2_order < 0) { /* zig-zig * * T * / \ * Tl _Tr * / \ * _Tll _Tlr * / \ * _Tlll _Tllr * * _Tll is our desired tree-root. * * Nodes beginning with _ might be NULL. * * If _Tll is null, then this reduces to the "Tl_is_target_root" rule. * * Otherwise, we need to build: * * Tll' * / \ * _Tlll Tl' * / \ * _Tllr T' * / \ * _Tlr _Tr * * * Preorder traversals: * * before: _Tlll _Tll _Tllr _Tl _Tlr T _Tr * after: _Tlll _Tll' _Tllr _Tl' _Tlr T' _Tr * * What if there is no exactly matching node? * * We now that the key is < T and < Tl. * * If _Tll doesn't exist, we raise Tl and we're done with it. * * Note that we want to handle the "no exact match" case without * looping infinitely. If there is a "just to the left" match, * we eventually want to raise that. If there isn't a "just to the * left" match, we want to raise the "just to the right" match. * * If this part of the raise process were part of a thrashing loop, * then after this raise we must, later, raise Tll' a second time. * We know that the key is < Tl. So if it is greater than Tllr. * And if it is less than Tll we'll raise Tlll or one of its immediate * children. * * [Please insert here a slightly tricky inductive proof that no thrashing * will occur and replicate that by analogy in the next 4 cases. Until then * let's take D Sleator's word for it (and hope that the algorithm here is a * faithful transcription thereof. :-)] */ if (!tree->left->left) goto Tl_is_target_root; else { t_fsplay_tree T_prime = 0; t_fsplay_tree Tl_prime = 0; t_fsplay_tree Tll_prime = 0; T_prime = fsplay_make_splayed_node (type, tree, tree->left->right, tree->right); if (!T_prime) { zig_zig_alloc_error: fsplay_unref (type, T_prime); fsplay_unref (type, Tl_prime); fsplay_unref (type, Tll_prime); fsplay_unref (type, tree); return 0; } Tl_prime = fsplay_make_splayed_node (type, tree->left, tree->left->left->right, T_prime); if (!Tl_prime) goto zig_zig_alloc_error; fsplay_unref (type, T_prime); Tll_prime = fsplay_make_splayed_node (type, tree->left->left, tree->left->left->left, Tl_prime); if (!Tll_prime) goto zig_zig_alloc_error; fsplay_unref (type, Tl_prime); fsplay_unref (type, tree); /* keep the reference on Tll_prime and interate. */ tree = Tll_prime; goto iterate; } } else { /* zig-zag * * T * / \ * Tl _Tr * / \ * _Tll _Tlr * / \ * _Tlrl _Tlrr * * _Tlr is our desired tree-root. * * Nodes beginning with _ might be NULL. * * If _Tlr is null, then this reduces to the "Tl_is_target_root" rule. * * Otherwise, we need to build: * * Tlr' * / \ * Tl' T' * / \ / \ * _Tll _Tlrl _Tlrr _Tr * * * Preorder traversals: * * before: _Tll Tl _Tlrl _Tlr _Tlrr T _Tr * after: _Tll Tl' _Tlrl _Tlr' _Tlrr T' _Tr * */ if (!tree->left->right) goto Tl_is_target_root; else { t_fsplay_tree T_prime = 0; t_fsplay_tree Tl_prime = 0; t_fsplay_tree Tlr_prime = 0; T_prime = fsplay_make_splayed_node (type, tree, tree->left->right->right, tree->right); if (!T_prime) { zig_zag_alloc_error: fsplay_unref (type, T_prime); fsplay_unref (type, Tl_prime); fsplay_unref (type, Tlr_prime); fsplay_unref (type, tree); return 0; } Tl_prime = fsplay_make_splayed_node (type, tree->left, tree->left->left, tree->left->right->left); if (!Tl_prime) goto zig_zag_alloc_error; Tlr_prime = fsplay_make_splayed_node (type, tree->left->right, Tl_prime, T_prime); if (!Tlr_prime) goto zig_zag_alloc_error; fsplay_unref (type, Tl_prime); fsplay_unref (type, T_prime); fsplay_unref (type, tree); /* keep the reference on Tlr_prime and iterate. */ tree = Tlr_prime; goto iterate; } } } else { /* The desired root node is in the right subtree, if the right subtree exists. */ int cmp2_order; if (!tree->right) { /* Give the root reference we hold to the caller. */ return tree; } cmp2_order = cmp (type, position, tree->right); if (!cmp2_order) { /* zag * * T * / \ * _Tl Tr * / \ * _Trl _Trr * * Tr is our desired tree-root. * * Nodes beginning with _ might be NULL. * * We need to make: * * Tr' * / \ * T' _Trr * / \ * _Tl _Trl * * * Note that the preorder traversals are: * * before: _Tl T _Trl Tr _Trr * after: _Tl T' _Trl Tr' _Trr */ t_fsplay_tree T_prime = 0; t_fsplay_tree Tr_prime = 0; Tr_is_target_root: T_prime = fsplay_make_splayed_node (type, tree, tree->left, tree->right->left); if (!T_prime) { zag_alloc_error: fsplay_unref (type, T_prime); fsplay_unref (type, Tr_prime); fsplay_unref (type, tree); return 0; } Tr_prime = fsplay_make_splayed_node (type, tree->right, T_prime, tree->right->right); if (!Tr_prime) goto zag_alloc_error; fsplay_unref (type, T_prime); fsplay_unref (type, tree); /* keep the reference on Tr_prime and give it to the caller. */ return Tr_prime; } else if (cmp2_order < 0) { /* zag-zag * * T * / \ * _Tl Tr * / \ * _Trl _Trr * / \ * _Trrl _Trrr * * _Trr is our desired tree-root. * * Nodes beginning with _ might be NULL. * * If _Trr is null, then this reduces to the "Tr_is_target_root" rule. * * Otherwise, we need to build: * * Trr' * / \ * Tr' _Trrr * / \ * T' _Trrl * / \ * _Tl _Trl * * * Preorder traversals: * * before: _Tl T _Trl Tr _Trrl _Trr _Trrr * after: _Tl T' _Trl Tr' _Trrl _Trr' _Trrr * */ if (!tree->right->right) goto Tr_is_target_root; else { t_fsplay_tree T_prime = 0; t_fsplay_tree Tr_prime = 0; t_fsplay_tree Trr_prime = 0; T_prime = fsplay_make_splayed_node (type, tree, tree->left, tree->right->left); if (!T_prime) { zag_zag_alloc_error: fsplay_unref (type, T_prime); fsplay_unref (type, Tr_prime); fsplay_unref (type, Trr_prime); fsplay_unref (type, tree); return 0; } Tr_prime = fsplay_make_splayed_node (type, tree->right, T_prime, tree->right->right->left); if (!Tr_prime) goto zag_zag_alloc_error; fsplay_unref (type, T_prime); Trr_prime = fsplay_make_splayed_node (type, tree->right->right, Tr_prime, tree->right->right->right); if (!Trr_prime) goto zag_zag_alloc_error; fsplay_unref (type, Tr_prime); fsplay_unref (type, tree); /* keep the reference on Trr_prime and iterate. */ tree = Trr_prime; goto iterate; } } else { /* zag-zig * * T * / \ * _Tl Tr * / \ * _Trl _Trr * / \ * _Trlr _Trlr * * _Trl is our desired tree-root. * * Nodes beginning with _ might be NULL. * * If _Trl is null, then this reduces to the "Tr_is_target_root" rule. * * Otherwise, we need to build: * * Trl' * / \ * T' Tr' * / \ / \ * _Tl _Trlr _Trlr _Trr * * * Preorder traversals: * * before: _Tl T _Trlr _Trl _Trlr Tr _Trr * after: _Tl T' _Trlr _Trl' _Trlr Tr' _Trr * */ if (!tree->right->left) goto Tr_is_target_root; else { t_fsplay_tree T_prime = 0; t_fsplay_tree Tr_prime = 0; t_fsplay_tree Trl_prime = 0; T_prime = fsplay_make_splayed_node (type, tree, tree->left, tree->right->left->right); if (!T_prime) { zag_zig_alloc_error: fsplay_unref (type, T_prime); fsplay_unref (type, Tr_prime); fsplay_unref (type, Trl_prime); fsplay_unref (type, tree); return 0; } Tr_prime = fsplay_make_splayed_node (type, tree->right, tree->right->left->right, tree->right->right); if (!Tr_prime) goto zag_zig_alloc_error; Trl_prime = fsplay_make_splayed_node (type, tree->right->left, T_prime, Tr_prime); if (!Trl_prime) goto zag_zig_alloc_error; fsplay_unref (type, T_prime); fsplay_unref (type, Tr_prime); fsplay_unref (type, tree); /* keep the reference on Trl_prime and iterate. */ tree = Trl_prime; goto iterate; } } } } t_fsplay_tree fsplay_raise_min (t_fsplay_tree_type type, t_fsplay_tree tree) { return fsplay_raise (type, cmp_always_minus_1, 0, tree); } t_fsplay_tree fsplay_raise_max (t_fsplay_tree_type type, t_fsplay_tree tree) { return fsplay_raise (type, cmp_always_plus_1, 0, tree); } static int cmp_always_minus_1 (t_fsplay_tree_type type, void * position, t_fsplay_tree tree) { return -1; } static int cmp_always_plus_1 (t_fsplay_tree_type type, void * position, t_fsplay_tree tree) { return 1; } /*(c fsplay_insert_after) * t_fsplay_tree fsplay_insert_after (t_fsplay_tree_type type, * t_fsplay_tree tree, * t_fsplay_tree new_tree); * * Return a new tree which is `new_tree' inserted just after * the root node of `tree'. */ t_fsplay_tree fsplay_insert_after (t_fsplay_tree_type type, t_fsplay_tree tree, t_fsplay_tree new_tree) { if (!tree) { fsplay_ref (type, new_tree); return new_tree; } else if (!new_tree) { fsplay_ref (type, tree); return tree; } else { /* insert-after * * Have: * * T * / \ * _Tl _Tr * * and want to insert N after T giving: * * * N' * / \ * T' _Tr * / * _Tl * * * Preorder traversal: * * Before: _Tl T _Tr * After: _Tl T' N' _Tr */ t_fsplay_tree T_prime = 0; t_fsplay_tree N_prime = 0; T_prime = fsplay_make_splayed_node (type, tree, tree->left, 0); if (!T_prime) { alloc_error: fsplay_unref (type, T_prime); fsplay_unref (type, N_prime); return 0; } N_prime = fsplay_make_splayed_node (type, new_tree, T_prime, tree->right); if (!N_prime) goto alloc_error; fsplay_unref (type, T_prime); return N_prime; } } /*(c fsplay_insert_before) * t_fsplay_tree fsplay_insert_before (t_fsplay_tree_type type, * t_fsplay_tree tree, * t_fsplay_tree new_tree); * * Return a new tree which is `new_tree' inserted just befpre * the root node of `tree'. */ t_fsplay_tree fsplay_insert_before (t_fsplay_tree_type type, t_fsplay_tree tree, t_fsplay_tree new_tree) { if (!tree) { fsplay_ref (type, new_tree); return new_tree; } else if (!new_tree) { fsplay_ref (type, tree); return tree; } else { /* insert-before * * Have: * * T * / \ * _Tl _Tr * * and want to insert N after T giving: * * * N' * / \ * _Tl T' * \ * _Tr * * * Preorder traversal: * * Before: _Tl T _Tr * After: _Tl N' T' _Tr */ t_fsplay_tree T_prime = 0; t_fsplay_tree N_prime = 0; T_prime = fsplay_make_splayed_node (type, tree, 0, tree->right); if (!T_prime) { alloc_error: fsplay_unref (type, T_prime); fsplay_unref (type, N_prime); return 0; } N_prime = fsplay_make_splayed_node (type, new_tree, tree->left, T_prime); if (!N_prime) goto alloc_error; fsplay_unref (type, T_prime); return N_prime; } } /*(c fsplay_delete) * t_fsplay_tree fsplay_delete (t_fsplay_tree_type type, * t_fsplay_tree tree); * * Return a new tree which is `tree' with its root node removed. */ t_fsplay_tree fsplay_delete (t_fsplay_tree_type type, t_fsplay_tree tree) { if (!tree) return 0; else { /* delete * * Have: * * T * / \ * _Tl _Tr * * and want to remove T. * * Removing T is the same as inserting _Tr after _Tl. */ return fsplay_insert_after (type, tree->left, tree->right); } } /* tag: Tom Lord Fri Jan 2 09:31:58 2004 (fsplay.c) */ tla-1.3.5+dfsg/src/hackerlab/splay/fsplay.h0000644000175000017500000001474210457621774017264 0ustar useruser/* fsplay.h: * **************************************************************** * Copyright (C) 2004 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__EDIT__FSPLAY_H #define INCLUDE__EDIT__FSPLAY_H #include "hackerlab/mem/alloc-limits.h" /************************************************************************ *(h2 "Functional Splay Tree Types") * * * */ /*(c t_fsplay_tree :category type) * typedef struct fsplay_tree * { * int refs; * struct fsplay_tree * left; * struct fsplay_tree * right; * void * data; * } * t_fsplay_tree; * * The type of a node in a functional splay tree. * Programs must not modify any but the `data' field. * * Program may modify the `data' field but only by replacing * it with an equivalent value. * * \Fields:/ * * `refs': the reference count of this node. * * `left' and `right': The left and right subtrees (possibly 0). * * `data': User data attached to this tree node. Note that * more than one node may share the same data, consequently, * provisions are made to reference count the data separately from * the node (see below). */ struct fsplay_tree { int refs; struct fsplay_tree * left; struct fsplay_tree * right; void * data; }; typedef struct fsplay_tree * t_fsplay_tree; /*(c t_fsplay_tree_type :category type) * typedef t_fsplay_tree_type; * * `t_fsplay_tree_type' are ``type objects'' encapsulating a * `struct fsplay_vtable *' and describing the type of a class * of `t_fsplay_tree' values. * * The function `fsplay_make_type' is used to allocate new * `t_fsplay_tree_type' values. */ struct fsplay_tree_type; typedef struct fsplay_tree_type * t_fsplay_tree_type; /*(c #s"struct fsplay_vtable" :category type) * struct fsplay_vtable * { * size_t full_tree_node_size; * void (*ref_data) (t_fsplay_tree_type type, t_fsplay_tree tree); * void (*unref_data) (t_fsplay_tree_type type, t_fsplay_tree tree); * }; * * A `struct fsplay_vtable' specifies parameters which distinguish * a particular ``type'' of functional splay tree. * * In order to use functional splay trees, programs must provide an instance * of the vtable structure. * * \Fields:/ * * `full_tree_node_size': The number of bytes to allocate for each node * in the data structure. I.e., the number of bytes to allocate when * creating a new `struct fsplay_tree'. Note that this value _must_ be * greater than `sizeof (struct fsplay_tree)'. The purpose of this field * is to allow programs to embed additional information in tree nodes by * adding storage for additional fields beyond those of `struct fsplay_tree'. * * `ref_data' and `unref_data': These are called when a new node has been * constructed. The new node with all fields initialized is passed to * these routines. The `data' field of the new node has either been copied * from an older node or was passed to the function `fsplay_make'. If `data' * requires memory management, `ref' should either increment its reference * count (_not_ the `refs' field of the node) or replace it with a freshly allocated * copy of the same data; `unref' should either decrement the reference count of * `data' or free it if it was freshly allocated by `ref'. */ struct fsplay_vtable { size_t full_tree_node_size; void (*ref_data) (t_fsplay_tree_type type, t_fsplay_tree tree); void (*unref_data) (t_fsplay_tree_type type, t_fsplay_tree tree); }; /*(c t_fsplay_cmp_position_fn :category type) * typedef int (*t_fsplay_cmp_position_fn) (t_fsplay_tree_type type, * void * position, * t_fsplay_tree tree) * * The function type of functions used to compare tree nodes to compute * their ordering relationship to an arbitrary datum. * * The `data' field of `tree' should be compared to the datum indicated * by `position'. (`position' is ultimately supplied by the same caller who * provides the `t_fsplay_cmp_position_fn'). * * If `position' is _less than_ `tree', a value less than 0 should be returned. * * If `position' is _greater than_ `tree', a value greater than 0 should * be returned. * * If `position' is _equal to_ `tree', 0 should be returned. */ typedef int (*t_fsplay_cmp_position_fn) (t_fsplay_tree_type type, void * position, t_fsplay_tree tree); /* automatically generated __STDC__ prototypes */ extern t_fsplay_tree_type fsplay_make_type (alloc_limits limits, struct fsplay_vtable * vtable); extern t_fsplay_tree fsplay_make (t_fsplay_tree_type type, void * data); extern void fsplay_ref (t_fsplay_tree_type type, t_fsplay_tree tree); extern void fsplay_unref (t_fsplay_tree_type type, t_fsplay_tree tree); extern t_fsplay_tree fsplay_find (t_fsplay_tree_type type, t_fsplay_cmp_position_fn cmp, void * position, t_fsplay_tree tree); extern t_fsplay_tree fsplay_find_min (t_fsplay_tree_type type, t_fsplay_tree tree); extern t_fsplay_tree fsplay_find_max (t_fsplay_tree_type type, t_fsplay_tree tree); extern t_fsplay_tree fsplay_raise (t_fsplay_tree_type type, t_fsplay_cmp_position_fn cmp, void * position, t_fsplay_tree tree); extern t_fsplay_tree fsplay_raise_min (t_fsplay_tree_type type, t_fsplay_tree tree); extern t_fsplay_tree fsplay_raise_max (t_fsplay_tree_type type, t_fsplay_tree tree); extern t_fsplay_tree fsplay_insert_after (t_fsplay_tree_type type, t_fsplay_tree tree, t_fsplay_tree new_tree); extern t_fsplay_tree fsplay_insert_before (t_fsplay_tree_type type, t_fsplay_tree tree, t_fsplay_tree new_tree); extern t_fsplay_tree fsplay_delete (t_fsplay_tree_type type, t_fsplay_tree tree); #endif /* INCLUDE__EDIT__FSPLAY_H */ /* tag: Tom Lord Fri Jan 2 09:31:55 2004 (fsplay.h) */ tla-1.3.5+dfsg/src/hackerlab/splay/Makefile.in0000644000175000017500000000027410457621774017655 0ustar useruser include $(makefiles)/library-objects.mk ifeq ($(cgs__install_hackerlab),1) include $(makefiles)/install-includes.mk endif # tag: Tom Lord Fri Jan 2 20:09:31 2004 (splay/Makefile.in) # tla-1.3.5+dfsg/src/hackerlab/splay/PLUGIN/0000755000175000017500000000000010457621774016603 5ustar userusertla-1.3.5+dfsg/src/hackerlab/splay/PLUGIN/REQ0000644000175000017500000000003110457621774017147 0ustar useruseros splay splay libboot tla-1.3.5+dfsg/src/hackerlab/splay/splay.doc0000644000175000017500000000117110457621774017424 0ustar useruser/* splay.doc: * **************************************************************** * Copyright (C) 2004 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ /************************************************************************ *(h0 "Splay Trees") * * Splay trees are self-balancing binary trees that adjust their * structure in response to access patterns. * * See url:"http://www.link.cs.cmu.edu/splay/" for links to more * information. */ /*(include-documentation "fsplay.c") */ /* tag: Tom Lord Sun Jan 4 10:26:33 2004 (splay.doc) */ tla-1.3.5+dfsg/src/hackerlab/buffers/0000755000175000017500000000000010457621774016111 5ustar userusertla-1.3.5+dfsg/src/hackerlab/buffers/buffer-set.h0000644000175000017500000000547510457621774020337 0ustar useruser/* buffer-set.h: * **************************************************************** * Copyright (C) 2004 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBAWIKI__BUFFER_SET_H #define INCLUDE__LIBAWIKI__BUFFER_SET_H #include "hackerlab/identifiers/symbol-table.h" #include "hackerlab/properties/property.h" #include "hackerlab/buffers/buffer.h" typedef struct buffer_set t_buffer_set; struct buffer_set { t_symbol_table _buffers; alloc_limits _limits; ssize_t _representation_type; t_property_table _property_table; }; /* automatically generated __STDC__ prototypes */ extern int init_buffer_set (t_buffer_set * const bs, alloc_limits const limits, ssize_t const representation_type); extern int uninit_buffer_set (t_buffer_set * const bs); extern alloc_limits buffer_set_limits (t_buffer_set * const bs); extern ssize_t buffer_set_representation_type (t_buffer_set * const bs); extern ssize_t buffer_set_n_entries (t_buffer_set * const bs); extern ssize_t buffer_set_room (t_buffer_set * const bs); extern t_buffer * buffer_set_buffer_n (const t_uchar ** const name_ret, t_buffer_set * const bs, ssize_t const n); extern t_buffer * buffer_set_nth_buffer (const t_uchar ** const name_ret, t_buffer_set * bs, ssize_t n); extern t_buffer * buffer_set_find (t_buffer_set * const bs, const t_uchar * const name); extern t_buffer * buffer_set_ensure (t_buffer_set * const bs, const t_uchar * const name); extern ssize_t buffer_set_index (t_buffer_set * const bs, const t_uchar * const name); extern int buffer_set_delete (t_buffer_set * const bs, const t_uchar * const name); extern int buffer_set_delete_nth (t_buffer_set * const bs, ssize_t const n); extern void * buffer_set_property_soft_ref (t_buffer_set * const bs, ssize_t const elt_size, ssize_t const buffer, ssize_t const global_property_id); extern void * buffer_set_property_ref (t_buffer_set * const bs, ssize_t const elt_size, ssize_t const buffer, ssize_t const global_property_id, t_property_type * const type); #endif /* INCLUDE__LIBAWIKI__BUFFER_SET_H */ /* tag: Tom Lord Wed Oct 27 12:29:30 2004 (buffer-set.h) */ tla-1.3.5+dfsg/src/hackerlab/buffers/buffer.c0000644000175000017500000000722710457621774017536 0ustar useruser/* buffer.c: * **************************************************************** * Copyright (C) 2004 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/buffers/buffer.h" /* typedefs */ /* __STDC__ prototypes for static functions */ /* declarations */ /* code */ int init_buffer (t_buffer * bs, alloc_limits limits) { return init_edstring (&bs->_string, limits, sizeof (t_uchar)); } int uninit_buffer (t_buffer * bs, alloc_limits limits) { return uninit_edstring (&bs->_string, limits, sizeof (t_uchar)); } ssize_t buffer_room (t_buffer * bs, alloc_limits limits) { return edstring_room (&bs->_string, limits, sizeof (t_uchar)); } int buffer_is_empty (t_buffer * bs, alloc_limits limits) { return edstring_is_empty (&bs->_string, limits, sizeof (t_uchar)); } ssize_t buffer_size (t_buffer * bs, alloc_limits limits) { return edstring_size (&bs->_string, limits, sizeof (t_uchar)); } int buffer_n (t_buffer * bs, alloc_limits limits, ssize_t n) { t_uchar * box; box = buffer_burst (0, bs, limits, n, 1); if (!box) return -1; return *box; } t_uchar * buffer_burst (ssize_t * len_returned, t_buffer * bs, alloc_limits limits, ssize_t n, ssize_t len) { return (t_uchar *)edstring_burst (len_returned, &bs->_string, limits, sizeof (t_uchar), n, len); } t_uchar * buffer_range (t_buffer * bs, alloc_limits limits, ssize_t n, ssize_t len) { return (t_uchar *)edstring_range (&bs->_string, limits, sizeof (t_uchar), n, len); } int buffer_insert_n (t_buffer * bs, alloc_limits limits, ssize_t before_pos, t_uchar * data, ssize_t len) { return edstring_insert_n (&bs->_string, limits, sizeof(t_uchar), before_pos, data, len); } int buffer_delete_n (t_buffer * bs, alloc_limits limits, ssize_t pos, ssize_t len) { return edstring_delete_n (&bs->_string, limits, sizeof(t_uchar), pos, len); } ssize_t alloc_buffer_marker (t_buffer * bs, alloc_limits limits, ssize_t initial_pos) { return alloc_edstring_marker (&bs->_string, limits, sizeof (t_uchar), initial_pos); } int free_buffer_marker (t_buffer * bs, alloc_limits limits, ssize_t id) { return free_edstring_marker (&bs->_string, limits, sizeof (t_uchar), id); } ssize_t buffer_n_markers (t_buffer * bs, alloc_limits limits) { return edstring_n_markers (&bs->_string, limits, sizeof (t_uchar)); } ssize_t buffer_marker_room (t_buffer * bs, alloc_limits limits) { return edstring_marker_room (&bs->_string, limits, sizeof (t_uchar)); } ssize_t buffer_marker_pos (t_buffer * bs, alloc_limits limits, ssize_t id) { return edstring_marker_pos (&bs->_string, limits, sizeof (t_uchar), id); } int buffer_set_marker_pos (t_buffer * bs, alloc_limits limits, ssize_t id, ssize_t new_pos) { return edstring_set_marker_pos (&bs->_string, limits, sizeof (t_uchar), id, new_pos); } ssize_t buffer_marker_handle_set (t_buffer * bs, alloc_limits limits, ssize_t marker_id) { return edstring_marker_handle_set (&bs->_string, limits, sizeof (t_uchar), marker_id); } /* tag: Tom Lord Sun Nov 21 06:55:36 2004 (buffer.c) */ tla-1.3.5+dfsg/src/hackerlab/buffers/file-buffers.c0000644000175000017500000001520510457621774020631 0ustar useruser/* file-buffers.c: * **************************************************************** * Copyright (C) 2004 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/os/errno.h" #include "hackerlab/vu/vu.h" #include "hackerlab/properties/property.h" #include "hackerlab/buffers/buffers.h" /* __STDC__ prototypes for static functions */ static ssize_t buffer_file_names_property (void); static void init_file_names_list (t_property_type * type, alloc_limits limits, ssize_t pos, void * mem); static void uninit_file_names_list (t_property_type * type, alloc_limits limits, ssize_t pos, void * mem); static t_oblist * buffer_names_list (ssize_t bset, ssize_t buffer); static ssize_t buffer_file_stat_property (void); static struct stat * buffer_last_stat (ssize_t, ssize_t buffer); static ssize_t buffer_file_names_property (void) { static ssize_t answer = -1; if (answer < 0) { answer = property_global_id ((void *)buffer_file_names_property); } return answer; } static void init_file_names_list (t_property_type * type, alloc_limits limits, ssize_t pos, void * mem) { t_oblist * list; list = (t_oblist *)mem; if (list) { init_oblist (list, limits, sizeof (t_uchar *), 0, 0); } } static void uninit_file_names_list (t_property_type * type, alloc_limits limits, ssize_t pos, void * mem) { t_oblist * list; list = (t_oblist *)mem; if (list) { while (!oblist_is_empty (list, limits, sizeof (t_uchar *), 0, 0)) { t_uchar ** box; box = (t_uchar **)oblist_burst (0, list, limits, sizeof (t_uchar *), 0, 0, 0, 1); if (box) lim_free (limits, (void *)*box); oblist_delete_n (list, limits, sizeof (t_uchar *), 0, 0, 0, 1); } uninit_oblist (list, limits, sizeof (t_uchar *), 0, 0); } } static t_property_fns buffer_file_names_property_fns = { (t_uchar *)"buffer_file_names_property_type", sizeof (t_oblist), init_file_names_list, uninit_file_names_list, }; static t_property_type buffer_file_names_property_type = { &buffer_file_names_property_fns }; static t_oblist * buffer_names_list (ssize_t bset, ssize_t buffer) { return (t_oblist *)buffer_session_property_ref (bset, sizeof (t_oblist), buffer, buffer_file_names_property(), &buffer_file_names_property_type); } t_uchar * buf_file_name (ssize_t bset, ssize_t buffer) { t_oblist * list; t_uchar ** box; list = buffer_names_list (bset, buffer); if (!list) return 0; box = (t_uchar **)oblist_burst (0, list, buffer_session_limits (bset), sizeof (t_uchar *), 0, 0, 0, 1); if (!box) return 0; else return * box; } static ssize_t buffer_file_stat_property (void) { static ssize_t answer = -1; if (answer < 0) { answer = property_global_id ((void *)buffer_file_stat_property); } return answer; } static struct stat * buffer_last_stat (ssize_t bset, ssize_t buffer) { return (struct stat *)buffer_session_property_ref (bset, sizeof (t_uchar *), buffer, buffer_file_stat_property(), 0); } ssize_t buf_find_existing_file (int * errn, ssize_t bset, t_uchar * file) { int my_errn; int fd; struct stat s; ssize_t room; ssize_t x; if (!errn) errn = &my_errn; fd = vu_open (errn, file, O_RDONLY, 0); if (fd < 0) { return -1; } if (0 > vu_fstat (errn, fd, &s)) { vu_close (0, fd); return -1; } if (0 > vu_close (errn, fd)) return -1; room = buffer_session_room (bset); for (x = 0; x < room; ++x) { struct stat * bufstat; bufstat = buffer_last_stat (bset, x); if ( bufstat && (s.st_ino == bufstat->st_ino) && (s.st_dev == bufstat->st_dev)) { return x; } } if (errn) *errn = 0; return -1; } ssize_t buf_find_file (int * errn, ssize_t bset, t_uchar * file) { int my_errn; int fd; struct stat s; ssize_t room; ssize_t x; ssize_t answer; t_uchar * name_for_buffer = file; if (!errn) errn = &my_errn; fd = vu_open (errn, file, O_RDONLY, 0); if (fd < 0) { return -1; } if (0 > vu_fstat (errn, fd, &s)) { vu_close (0, fd); return -1; } room = buffer_session_room (bset); for (x = 0; x < room; ++x) { struct stat * bufstat; bufstat = buffer_last_stat (bset, x); if ( bufstat && (s.st_ino == bufstat->st_ino) && (s.st_dev == bufstat->st_dev)) { if (0 > vu_close (errn, fd)) return -1; return x; } } answer = buffer_session_index_create (bset, name_for_buffer); if (answer < 0) { vu_close (0, fd); return -1; } if (0 > buf_insert_from_fd (errn, 0, bset, answer, fd, 0, -1)) { vu_close (0, fd); return -1; } { struct stat * saved_s; saved_s = buffer_last_stat (bset, answer); if (!saved_s) return -1; *saved_s = s; } if (0 > vu_close (errn, fd)) return -1; if (errn) *errn = 0; return answer; } int buf_insert_from_fd (int * errn, ssize_t * amt_inserted_return, ssize_t bset, ssize_t buffer, int fd, ssize_t insert_pos, ssize_t insert_amt) { int my_errn; ssize_t amt_inserted; int at_eof; if (!errn) errn = &my_errn; amt_inserted = 0; at_eof = 0; while ( !at_eof && ( (insert_amt < 0) || (amt_inserted < insert_amt))) { t_uchar buf[16 * 1024]; ssize_t amt_read; amt_read = vu_read (errn, fd, buf, sizeof (buf)); if (amt_read < 0) { if ((*errn != EINTR) && (*errn != EAGAIN)) return -1; } else if (amt_read == 0) { at_eof = 1; } else { if (0 > buf_insert_str_n (bset, buffer, insert_pos + amt_inserted, buf, amt_read)) { *errn = 0; return -1; } amt_inserted += amt_read; } } if (amt_inserted_return) *amt_inserted_return = amt_inserted; return 0; } /* tag: Tom Lord Wed Oct 27 19:35:15 2004 (file-buffers.c) */ tla-1.3.5+dfsg/src/hackerlab/buffers/buffers-ops.h0000644000175000017500000000270510457621774020521 0ustar useruser/* buffers-ops.h: * **************************************************************** * Copyright (C) 2004 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__BUFFERS__BUFFERS_OPS_H #define INCLUDE__BUFFERS__BUFFERS_OPS_H /* automatically generated __STDC__ prototypes */ extern ssize_t buf_room (ssize_t session, ssize_t buf); extern int buf_is_empty (ssize_t session, ssize_t buf); extern ssize_t buf_size (ssize_t session, ssize_t buf); extern int buf_n (ssize_t session, ssize_t buf, ssize_t n); extern t_uchar * buf_burst (ssize_t * len_returned, ssize_t session, ssize_t buf, ssize_t n, ssize_t len); extern t_uchar * buf_range (ssize_t session, ssize_t buf, ssize_t n, ssize_t len); extern int buf_insert_str_n (ssize_t session, ssize_t buf, ssize_t before_pos, t_uchar * data, ssize_t len); extern int buf_delete_n (ssize_t session, ssize_t buf, ssize_t pos, ssize_t len); #endif /* INCLUDE__BUFFERS__BUFFERS_OPS_H */ /* tag: Tom Lord Sun Nov 21 10:10:19 2004 (buffers-ops.h) */ tla-1.3.5+dfsg/src/hackerlab/buffers/buffers-ops.c0000644000175000017500000000474510457621774020522 0ustar useruser/* buffers-ops.c: * **************************************************************** * Copyright (C) 2004 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/buffers/buffers.h" /* typedefs */ /* __STDC__ prototypes for static functions */ /* declarations */ ssize_t buf_room (ssize_t session, ssize_t buf) { t_buffer * bf; bf = buffer_session_buffer_n (0, session, buf); if (!bf) return -1; return buffer_room (bf, buffer_session_limits (session)); } int buf_is_empty (ssize_t session, ssize_t buf) { t_buffer * bf; bf = buffer_session_buffer_n (0, session, buf); if (!bf) return -1; return buffer_is_empty (bf, buffer_session_limits (session)); } ssize_t buf_size (ssize_t session, ssize_t buf) { t_buffer * bf; bf = buffer_session_buffer_n (0, session, buf); if (!bf) return -1; return buffer_size (bf, buffer_session_limits (session)); } int buf_n (ssize_t session, ssize_t buf, ssize_t n) { t_buffer * bf; bf = buffer_session_buffer_n (0, session, buf); if (!bf) return -1; return buffer_n (bf, buffer_session_limits (session), n); } t_uchar * buf_burst (ssize_t * len_returned, ssize_t session, ssize_t buf, ssize_t n, ssize_t len) { t_buffer * bf; bf = buffer_session_buffer_n (0, session, buf); if (!bf) return 0; return buffer_burst (len_returned, bf, buffer_session_limits (session), n, len); } t_uchar * buf_range (ssize_t session, ssize_t buf, ssize_t n, ssize_t len) { t_buffer * bf; bf = buffer_session_buffer_n (0, session, buf); if (!bf) return 0; return buffer_range (bf, buffer_session_limits (session), n, len); } int buf_insert_str_n (ssize_t session, ssize_t buf, ssize_t before_pos, t_uchar * data, ssize_t len) { t_buffer * bf; bf = buffer_session_buffer_n (0, session, buf); if (!bf) return -1; return buffer_insert_n (bf, buffer_session_limits (session), before_pos, data, len); } int buf_delete_n (ssize_t session, ssize_t buf, ssize_t pos, ssize_t len) { t_buffer * bf; bf = buffer_session_buffer_n (0, session, buf); if (!bf) return -1; return buffer_delete_n (bf, buffer_session_limits (session), pos, len); } /* tag: Tom Lord Sun Nov 21 10:10:14 2004 (buffers-ops.c) */ tla-1.3.5+dfsg/src/hackerlab/buffers/buffers.h0000644000175000017500000000571010457621774017721 0ustar useruser/* buffers.h: * **************************************************************** * Copyright (C) 2004 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__BUFFERS__BUFFERS_H #define INCLUDE__BUFFERS__BUFFERS_H #include "hackerlab/properties/property.h" #include "hackerlab/buffers/buffer.h" #include "hackerlab/buffers/points.h" #include "hackerlab/buffers/file-buffers.h" #include "hackerlab/buffers/buffers-ops.h" #include "hackerlab/buffers/edit-ops.h" /* automatically generated __STDC__ prototypes */ extern ssize_t buffer_session_open (alloc_limits const limits, ssize_t const representation_type); extern int buffer_session_close (alloc_limits const limits, ssize_t const id); extern alloc_limits buffer_session_limits (ssize_t const session); extern ssize_t buffer_session_representation_type (ssize_t const session); extern ssize_t buffer_session_n_entries (ssize_t const session); extern ssize_t buffer_session_room (ssize_t const session); extern t_buffer * buffer_session_buffer_n (const t_uchar ** const name_ret, ssize_t const session, ssize_t const n); extern t_buffer * buffer_session_nth_buffer (const t_uchar ** const name_ret, ssize_t const session, ssize_t const n); extern t_buffer * buffer_session_find (ssize_t const session, t_uchar * const name); extern t_buffer * buffer_session_ensure (ssize_t const session, t_uchar * const name); extern ssize_t buffer_session_index (ssize_t const session, t_uchar * const name); extern ssize_t buffer_session_index_create (ssize_t const session, t_uchar * const name); extern int buffer_session_delete (ssize_t const session, t_uchar * const name); extern int buffer_session_delete_nth (ssize_t const session, ssize_t const n); extern void * buffer_session_property_soft_ref (ssize_t const session, ssize_t const elt_size, ssize_t const buffer, ssize_t const global_property_id); extern void * buffer_session_property_ref (ssize_t const session, ssize_t const elt_size, ssize_t const buffer, ssize_t const global_property_id, t_property_type * const type); #endif /* INCLUDE__BUFFERS__BUFFERS_H */ /* tag: Tom Lord Sun Nov 21 08:01:56 2004 (buffers.h) */ tla-1.3.5+dfsg/src/hackerlab/buffers/points.c0000644000175000017500000001205710457621774017576 0ustar useruser/* points.c: * **************************************************************** * Copyright (C) 2004 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/handles/handle.h" #include "hackerlab/buffers/buffers.h" /* typedefs */ /* __STDC__ prototypes for static functions */ /* declarations */ /* code */ void init_bufpt (t_buffer_point * pt) { if (pt) { pt->_session = -1; pt->_buffer = -1; pt->_marker_handle = -1; } } int uninit_bufpt (t_buffer_point * pt) { if ( pt && (0 <= pt->_marker_handle) && (0 > free_handle (pt->_marker_handle))) { return -1; } init_bufpt (pt); return 0; } int bufpt_valid (t_buffer_point * pt) { if (!pt) return 0; if ( (0 > pt->_session) || (0 > pt->_buffer) || (0 > pt->_marker_handle) || (0 > handle_ref (pt->_marker_handle))) return 0; return 1; } ssize_t bufpt_session (t_buffer_point * pt) { if (!pt) return -1; return pt->_session; } ssize_t bufpt_buffer (t_buffer_point * pt) { if (!pt) return -1; return pt->_buffer; } ssize_t bufpt_pos (t_buffer_point * pt) { ssize_t marker; t_buffer * buf; if (!pt) return -1; if ( (0 > pt->_session) || (0 > pt->_buffer) || (0 > pt->_marker_handle)) return -1; marker = handle_ref (pt->_marker_handle); if (marker < 0) return -1; buf = buffer_session_buffer_n (0, pt->_session, pt->_buffer); if (!buf) return -1; return buffer_marker_pos (buf, buffer_session_limits (pt->_session), marker); } int bufpt_leave_position (t_buffer_point * pt) { ssize_t marker; t_buffer * buf; if ( (0 > pt->_session) || (0 > pt->_buffer) || (0 > pt->_marker_handle)) return 0; marker = handle_ref (pt->_marker_handle); if (marker < 0) return 0; buf = buffer_session_buffer_n (0, pt->_session, pt->_buffer); if (!buf) return -1; return free_buffer_marker (buf, buffer_session_limits (pt->_session), marker); } int bufpt_leave_buffer (t_buffer_point * pt) { if (bufpt_leave_position (pt)) return -1; pt->_buffer = -1; return 0; } int bufpt_leave_session (t_buffer_point * pt) { if (bufpt_leave_buffer (pt)) return -1; pt->_session = -1; return 0; } int bufpt_enter_session (t_buffer_point * pt, ssize_t session) { if (!pt) return -1; if (pt->_session == session) return 0; if (bufpt_leave_session (pt)) return -1; pt->_session = session; return 0; } int bufpt_enter_buffer (t_buffer_point * pt, ssize_t session, ssize_t buffer) { if (0 > bufpt_enter_session (pt, session)) return -1; if (pt->_buffer == buffer) return 0; if (0 > bufpt_leave_buffer (pt)) return -1; pt->_buffer = buffer; return 0; } int bufpt_goto_abs (t_buffer_point * pt, ssize_t session, ssize_t buffer, ssize_t pos) { t_buffer * buf; ssize_t marker; if (0 > bufpt_enter_buffer (pt, session, buffer)) return -1; buf = buffer_session_buffer_n (0, pt->_session, pt->_buffer); if (!buf) return -1; if (pt->_marker_handle < 0) { pt->_marker_handle = alloc_handle (); if (pt->_marker_handle < 0) return -1; } marker = handle_ref (pt->_marker_handle); if (marker < 0) { marker = alloc_buffer_marker (buf, buffer_session_limits (pt->_session), pos); if (marker < 0) return -1; if (0 > handle_set (pt->_marker_handle, buffer_marker_handle_set (buf, buffer_session_limits (pt->_session), marker), marker)) return -1; return 0; } else { if (0 > buffer_set_marker_pos (buf, buffer_session_limits (pt->_session), marker, pos)) return -1; return 0; } } int bufpt_goto (t_buffer_point * pt, ssize_t pos) { return bufpt_goto_abs (pt, bufpt_session (pt), bufpt_buffer (pt), pos); } int bufpt_switch_to_buffer (t_buffer_point * pt, ssize_t buffer, ssize_t pos) { return bufpt_goto_abs (pt, bufpt_session (pt), buffer, pos); } int bufpt_copy_from (t_buffer_point * pt_a, t_buffer_point * pt_b) { return bufpt_goto_abs (pt_a, bufpt_session (pt_b), bufpt_buffer (pt_b), bufpt_pos (pt_b)); } t_uchar * bufpt_range (t_buffer_point * pt, ssize_t len) { ssize_t bset; ssize_t buf; ssize_t pos; bset = bufpt_session (pt); buf = bufpt_buffer (pt); pos = bufpt_pos (pt); if ((bset < 0) || (buf < 0) || (pos < 0)) return 0; return buf_range (bset, buf, pos, len); } t_uchar * bufpt_burst (ssize_t * len_return, t_buffer_point * pt, ssize_t len) { ssize_t bset; ssize_t buf; ssize_t pos; bset = bufpt_session (pt); buf = bufpt_buffer (pt); pos = bufpt_pos (pt); if ((bset < 0) || (buf < 0) || (pos < 0)) return 0; return buf_burst (len_return, bset, buf, pos, len); } /* tag: Tom Lord Sun Nov 21 08:40:05 2004 (points.c) */ tla-1.3.5+dfsg/src/hackerlab/buffers/buffers.c0000644000175000017500000001264110457621774017715 0ustar useruser/* buffers.c: * **************************************************************** * Copyright (C) 2004 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/dynid/dynid.h" #include "hackerlab/buffers/buffer-set.h" #include "hackerlab/buffers/buffers.h" /* typedefs */ typedef struct buffer_set_entry t_buffer_set_entry; struct buffer_set_entry { t_buffer_set set; }; OBTABLE_STATIC_TABLE (buffer_set, t_buffer_set_entry); /* __STDC__ prototypes for static functions */ /* declarations */ /* code */ ssize_t buffer_session_open (alloc_limits const limits, ssize_t const representation_type_spec) { ssize_t it_desc; struct buffer_set_entry * it; ssize_t representation_type; it_desc = buffer_set_alloc_id (); it = buffer_set_ref_id (it_desc); if (!it) return -1; if (representation_type > 0) { representation_type = representation_type_spec; } else { representation_type = ensure_global_dynid ((void *)buffer_session_open); if (representation_type <= 0) return -1; } if (0 > init_buffer_set (&it->set, limits, representation_type)) return -1; return it_desc; } int buffer_session_close (alloc_limits const limits, ssize_t const id) { struct buffer_set_entry * it; it = buffer_set_ref_id (id); if (!it) return -1; if (0 > uninit_buffer_set (&it->set)) return -1; buffer_set_free_id (id); return 0; } alloc_limits buffer_session_limits (ssize_t const session) { struct buffer_set_entry * it; it = buffer_set_ref_id (session); if (!it) return 0; return buffer_set_limits (&it->set); } ssize_t buffer_session_representation_type (ssize_t const session) { struct buffer_set_entry * it; it = buffer_set_ref_id (session); if (!it) return 0; return buffer_set_representation_type (&it->set); } ssize_t buffer_session_n_entries (ssize_t const session) { struct buffer_set_entry * it; it = buffer_set_ref_id (session); if (!it) return 0; return buffer_set_n_entries (&it->set); } ssize_t buffer_session_room (ssize_t const session) { struct buffer_set_entry * it; it = buffer_set_ref_id (session); if (!it) return 0; return buffer_set_room (&it->set); } t_buffer * buffer_session_buffer_n (const t_uchar ** const name_ret, ssize_t const session, ssize_t const n) { struct buffer_set_entry * it; it = buffer_set_ref_id (session); if (!it) return 0; return buffer_set_buffer_n (name_ret, &it->set, n); } t_buffer * buffer_session_nth_buffer (const t_uchar ** const name_ret, ssize_t const session, ssize_t const n) { struct buffer_set_entry * it; it = buffer_set_ref_id (session); if (!it) return 0; return buffer_set_nth_buffer (name_ret, &it->set, n); } t_buffer * buffer_session_find (ssize_t const session, t_uchar * const name) { struct buffer_set_entry * it; it = buffer_set_ref_id (session); if (!it) return 0; return buffer_set_find (&it->set, name); } t_buffer * buffer_session_ensure (ssize_t const session, t_uchar * const name) { struct buffer_set_entry * it; it = buffer_set_ref_id (session); if (!it) return 0; return buffer_set_ensure (&it->set, name); } ssize_t buffer_session_index (ssize_t const session, t_uchar * const name) { struct buffer_set_entry * it; it = buffer_set_ref_id (session); if (!it) return -1; return buffer_set_index (&it->set, name); } ssize_t buffer_session_index_create (ssize_t const session, t_uchar * const name) { ssize_t answer; answer = buffer_session_index (session, name); if (answer < 0) { (void)buffer_session_ensure (session, name); answer = buffer_session_index (session, name); } return answer; } int buffer_session_delete (ssize_t const session, t_uchar * const name) { struct buffer_set_entry * it; it = buffer_set_ref_id (session); if (!it) return 0; return buffer_set_delete (&it->set, name); } int buffer_session_delete_nth (ssize_t const session, ssize_t const n) { struct buffer_set_entry * it; it = buffer_set_ref_id (session); if (!it) return 0; return buffer_set_delete_nth (&it->set, n); } void * buffer_session_property_soft_ref (ssize_t const session, ssize_t const elt_size, ssize_t const buffer, ssize_t const global_property_id) { struct buffer_set_entry * it; it = buffer_set_ref_id (session); if (!it) return 0; return buffer_set_property_soft_ref (&it->set, elt_size, buffer, global_property_id); } void * buffer_session_property_ref (ssize_t const session, ssize_t const elt_size, ssize_t const buffer, ssize_t const global_property_id, t_property_type * const type) { struct buffer_set_entry * it; it = buffer_set_ref_id (session); if (!it) return 0; return buffer_set_property_ref (&it->set, elt_size, buffer, global_property_id, type); } /* tag: Tom Lord Sun Nov 21 08:02:31 2004 (buffers.c) */ tla-1.3.5+dfsg/src/hackerlab/buffers/Makefile.in0000644000175000017500000000027610457621774020163 0ustar useruserinclude $(makefiles)/library-objects.mk ifeq ($(cgs__install_hackerlab),1) include $(makefiles)/install-includes.mk endif # tag: Tom Lord Sat Nov 20 19:30:33 2004 (buffers/Makefile.in) # tla-1.3.5+dfsg/src/hackerlab/buffers/buffer.h0000644000175000017500000000576210457621774017545 0ustar useruser/* buffer.h: * **************************************************************** * Copyright (C) 2004 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__BUFFERS__BUFFER_H #define INCLUDE__BUFFERS__BUFFER_H #include "hackerlab/rx-posix/posix.h" #include "hackerlab/edstrings/edstring.h" typedef struct buffer t_buffer; struct buffer { t_edstring _string; }; /* automatically generated __STDC__ prototypes */ extern int init_buffer (t_buffer * bs, alloc_limits limits); extern int uninit_buffer (t_buffer * bs, alloc_limits limits); extern ssize_t buffer_room (t_buffer * bs, alloc_limits limits); extern int buffer_is_empty (t_buffer * bs, alloc_limits limits); extern ssize_t buffer_size (t_buffer * bs, alloc_limits limits); extern int buffer_n (t_buffer * bs, alloc_limits limits, ssize_t n); extern t_uchar * buffer_burst (ssize_t * len_returned, t_buffer * bs, alloc_limits limits, ssize_t n, ssize_t len); extern t_uchar * buffer_range (t_buffer * bs, alloc_limits limits, ssize_t n, ssize_t len); extern int buffer_insert_n (t_buffer * bs, alloc_limits limits, ssize_t before_pos, t_uchar * data, ssize_t len); extern int buffer_delete_n (t_buffer * bs, alloc_limits limits, ssize_t pos, ssize_t len); extern ssize_t alloc_buffer_marker (t_buffer * bs, alloc_limits limits, ssize_t initial_pos); extern int free_buffer_marker (t_buffer * bs, alloc_limits limits, ssize_t id); extern ssize_t buffer_n_markers (t_buffer * bs, alloc_limits limits); extern ssize_t buffer_marker_room (t_buffer * bs, alloc_limits limits); extern ssize_t buffer_marker_pos (t_buffer * bs, alloc_limits limits, ssize_t id); extern int buffer_set_marker_pos (t_buffer * bs, alloc_limits limits, ssize_t id, ssize_t new_pos); extern ssize_t buffer_marker_handle_set (t_buffer * bs, alloc_limits limits, ssize_t marker_m); #endif /* INCLUDE__BUFFERS__BUFFER_H */ /* tag: Tom Lord Sun Nov 21 06:55:33 2004 (buffer.h) */ tla-1.3.5+dfsg/src/hackerlab/buffers/edit-ops.h0000644000175000017500000000555610457621774020021 0ustar useruser/* edit-ops.h: * **************************************************************** * Copyright (C) 2004 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__BUFFERS__EDIT_OPS_H #define INCLUDE__BUFFERS__EDIT_OPS_H /* automatically generated __STDC__ prototypes */ extern int bufpt_insert_str_n (t_buffer_point * pt, t_uchar * str, ssize_t len); extern int bufpt_backward_delete_n (t_buffer_point * pt_point, ssize_t n); extern int bufpt_is_eol (t_buffer_point * m, t_buffer_point * end); extern int bufpt_is_at_end (t_buffer_point * m, t_buffer_point * end); extern int bufpt_char_at (t_buffer_point * m, t_buffer_point * end); extern int bufpt_looking_at_str_n (t_buffer_point * m, t_buffer_point * end, const t_uchar * str, ssize_t len); extern int bufpt_looking_at_blank_line (t_buffer_point * m, t_buffer_point * end); extern int bufpt_looking_at_ci_str_n (t_buffer_point * m, t_buffer_point * end, t_uchar * str, ssize_t len); extern int bufpt_looking_at_re (t_buffer_point * m, t_buffer_point * end_pt, regex_t * preg, int eflags); extern ssize_t bufpt_col (t_buffer_point * m); extern ssize_t bufpt_col_tabifying (t_buffer_point * m); extern int bufpt_forward_char (t_buffer_point * m, t_buffer_point * end, ssize_t n); extern int bufpt_backward_char (t_buffer_point * m, t_buffer_point * end, ssize_t n); extern int bufpt_beginning_of_line (t_buffer_point * m, t_buffer_point * end); extern int bufpt_next_line (t_buffer_point * m, t_buffer_point * end); extern int bufpt_end_of_line (t_buffer_point * m, t_buffer_point * end); extern int bufpt_pass_whitespace (t_buffer_point * m, t_buffer_point * end); extern int bufpt_pass_graphical (t_buffer_point * m, t_buffer_point * end); extern int bufpt_pass_blanks (t_buffer_point * m, t_buffer_point * end); extern int bufpt_pass_blank_lines (t_buffer_point * m, t_buffer_point * end); #endif /* INCLUDE__BUFFERS__EDIT_OPS_H */ /* tag: Tom Lord Sun Nov 21 10:46:25 2004 (edit-ops.h) */ tla-1.3.5+dfsg/src/hackerlab/buffers/file-buffers.h0000644000175000017500000000231310457621774020632 0ustar useruser/* file-buffers.h: * **************************************************************** * Copyright (C) 2004 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBAWIKI__FILE_BUFFERS_H #define INCLUDE__LIBAWIKI__FILE_BUFFERS_H #include "hackerlab/buffers/buffer-set.h" /* automatically generated __STDC__ prototypes */ extern t_uchar * buf_file_name (ssize_t bset, ssize_t buffer); extern ssize_t buf_find_existing_file (int * errn, ssize_t bset, t_uchar * file); extern ssize_t buf_find_file (int * errn, ssize_t bset, t_uchar * file); extern int buf_insert_from_fd (int * errn, ssize_t * amt_inserted_return, ssize_t bset, ssize_t buffer, int fd, ssize_t insert_pos, ssize_t insert_amt); #endif /* INCLUDE__LIBAWIKI__FILE_BUFFERS_H */ /* tag: Tom Lord Wed Oct 27 19:35:09 2004 (file-buffers.h) */ tla-1.3.5+dfsg/src/hackerlab/buffers/PLUGIN/0000755000175000017500000000000010457621774017107 5ustar userusertla-1.3.5+dfsg/src/hackerlab/buffers/PLUGIN/REQ0000644000175000017500000000007110457621774017457 0ustar useruseroblists buffers obmarkers buffers buffers libhackerlab tla-1.3.5+dfsg/src/hackerlab/buffers/points.h0000644000175000017500000000375310457621774017606 0ustar useruser/* points.h: * **************************************************************** * Copyright (C) 2004 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__BUFFERS__POINTS_H #define INCLUDE__BUFFERS__POINTS_H typedef struct buffer_point t_buffer_point; struct buffer_point { ssize_t _session; ssize_t _buffer; ssize_t _marker_handle; }; /* automatically generated __STDC__ prototypes */ extern void init_bufpt (t_buffer_point * pt); extern int uninit_bufpt (t_buffer_point * pt); extern int bufpt_valid (t_buffer_point * pt); extern ssize_t bufpt_session (t_buffer_point * pt); extern ssize_t bufpt_buffer (t_buffer_point * pt); extern ssize_t bufpt_pos (t_buffer_point * pt); extern int bufpt_leave_position (t_buffer_point * pt); extern int bufpt_leave_buffer (t_buffer_point * pt); extern int bufpt_leave_session (t_buffer_point * pt); extern int bufpt_enter_session (t_buffer_point * pt, ssize_t session); extern int bufpt_enter_buffer (t_buffer_point * pt, ssize_t session, ssize_t buffer); extern int bufpt_goto_abs (t_buffer_point * pt, ssize_t session, ssize_t buffer, ssize_t pos); extern int bufpt_goto (t_buffer_point * pt, ssize_t pos); extern int bufpt_switch_to_buffer (t_buffer_point * pt, ssize_t buffer, ssize_t pos); extern int bufpt_copy_from (t_buffer_point * pt_a, t_buffer_point * pt_b); extern t_uchar * bufpt_range (t_buffer_point * pt, ssize_t len); extern t_uchar * bufpt_burst (ssize_t * len_return, t_buffer_point * pt, ssize_t len); #endif /* INCLUDE__BUFFERS__POINTS_H */ /* tag: Tom Lord Sun Nov 21 08:39:32 2004 (points.h) */ tla-1.3.5+dfsg/src/hackerlab/buffers/buffer-set.c0000644000175000017500000001174310457621774020325 0ustar useruser/* buffer-set.c: * **************************************************************** * Copyright (C) 2004 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/mem/mem.h" #include "hackerlab/dynid/dynid.h" #include "hackerlab/buffers/buffer.h" #include "hackerlab/buffers/buffer-set.h" int init_buffer_set (t_buffer_set * const bs, alloc_limits const limits, ssize_t const representation_type) { if (!bs) return -1; mem_set0 ((t_uchar *)bs, sizeof (*bs)); if (0 > init_symbol_table (&bs->_buffers, limits, sizeof (t_buffer))) return -1; bs->_limits = limits; if (representation_type > 0) bs->_representation_type = representation_type; else { bs->_representation_type = ensure_global_dynid ((void *)init_buffer_set); if (bs->_representation_type < 0) return -1; } if (0 > init_property_table (&bs->_property_table, limits)) return -1; return 0; } int uninit_buffer_set (t_buffer_set * const bs) { if (!bs) return -1; while (buffer_set_n_entries (bs)) { if (0 > buffer_set_delete_nth (bs, 0)) return -1; } if (0 > uninit_symbol_table (&bs->_buffers, bs->_limits, sizeof (t_buffer))) return -1; if (0 > uninit_property_table (&bs->_property_table, bs->_limits)) return -1; mem_set0 ((t_uchar *)bs, sizeof (*bs)); return 0; } alloc_limits buffer_set_limits (t_buffer_set * const bs) { if (!bs) return 0; return bs->_limits; } ssize_t buffer_set_representation_type (t_buffer_set * const bs) { if (!bs) return 0; return bs->_representation_type; } ssize_t buffer_set_n_entries (t_buffer_set * const bs) { if (!bs) return 0; return symbol_table_n_entries (&bs->_buffers, bs->_limits, sizeof (t_buffer)); } ssize_t buffer_set_room (t_buffer_set * const bs) { if (!bs) return 0; return symbol_table_room (&bs->_buffers, bs->_limits, sizeof (t_buffer)); } t_buffer * buffer_set_buffer_n (const t_uchar ** const name_ret, t_buffer_set * const bs, ssize_t const n) { if (!bs) return 0; return (t_buffer *)symbol_table_entry_n (name_ret, &bs->_buffers, bs->_limits, sizeof (t_buffer), n); } t_buffer * buffer_set_nth_buffer (const t_uchar ** const name_ret, t_buffer_set * bs, ssize_t n) { if (!bs) return 0; return (t_buffer *)symbol_table_nth_entry (name_ret, &bs->_buffers, bs->_limits, sizeof (t_buffer), n); } t_buffer * buffer_set_find (t_buffer_set * const bs, const t_uchar * const name) { if (!bs) return 0; return (t_buffer *)symbol_table_entry_find (&bs->_buffers, bs->_limits, sizeof (t_buffer), name); } t_buffer * buffer_set_ensure (t_buffer_set * const bs, const t_uchar * const name) { t_buffer * answer; if (!bs) return 0; answer = buffer_set_find (bs, name); if (answer) return answer; answer = (t_buffer *)symbol_table_entry_ensure (&bs->_buffers, bs->_limits, sizeof (t_buffer), name); if (!answer) return 0; if (0 > init_buffer (answer, bs->_limits)) return 0; return answer; } ssize_t buffer_set_index (t_buffer_set * const bs, const t_uchar * const name) { return symbol_table_entry_index (&bs->_buffers, bs->_limits, sizeof (t_buffer), name); } int buffer_set_delete (t_buffer_set * const bs, const t_uchar * const name) { t_buffer * answer; answer = buffer_set_find (bs, name); if (!answer) return -1; if (0 > uninit_buffer (answer, bs->_limits)) return -1; return symbol_table_entry_delete (&bs->_buffers, bs->_limits, sizeof (t_buffer), name); } int buffer_set_delete_nth (t_buffer_set * const bs, ssize_t const n) { const t_uchar * name; t_buffer * answer; answer = buffer_set_nth_buffer (&name, bs, n); if (!answer) return -1; if (0 > uninit_buffer (answer, bs->_limits)) return -1; return symbol_table_entry_delete (&bs->_buffers, bs->_limits, sizeof (t_buffer), name); } void * buffer_set_property_soft_ref (t_buffer_set * const bs, ssize_t const elt_size, ssize_t const buffer, ssize_t const global_property_id) { if (!bs) return 0; return property_soft_ref (&bs->_property_table, bs->_limits, elt_size, bs->_representation_type, global_property_id, buffer); } void * buffer_set_property_ref (t_buffer_set * const bs, ssize_t const elt_size, ssize_t const buffer, ssize_t const global_property_id, t_property_type * const type) { if (!bs) return 0; return property_ref (&bs->_property_table, bs->_limits, elt_size, bs->_representation_type, global_property_id, buffer, type); } /* tag: Tom Lord Wed Oct 27 12:35:15 2004 (buffer-set.c) */ tla-1.3.5+dfsg/src/hackerlab/buffers/edit-ops.c0000644000175000017500000003616410457621774020013 0ustar useruser/* edit-ops.c: * **************************************************************** * Copyright (C) 2004 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/char/char-class.h" #include "hackerlab/buffers/buffers.h" /* typedefs */ /* __STDC__ prototypes for static functions */ /* declarations */ /* code */ int bufpt_insert_str_n (t_buffer_point * pt, t_uchar * str, ssize_t len) { if (0 > buf_insert_str_n (bufpt_session (pt), bufpt_buffer (pt), bufpt_pos (pt), str, len)) return -1; return 0; } int bufpt_backward_delete_n (t_buffer_point * pt_point, ssize_t n) { ssize_t bset; ssize_t buf; ssize_t pos; bset = bufpt_session (pt_point); buf = bufpt_buffer (pt_point); pos = bufpt_pos (pt_point); if ((bset < 0) || (buf < 0) || (pos < 0) || (n < 0) || (n > pos)) return -1; return buf_delete_n (bset, buf, pos - n, n); } int bufpt_is_eol (t_buffer_point * m, t_buffer_point * end) { ssize_t bset; ssize_t buffer; ssize_t pos; ssize_t end_bset; ssize_t end_buffer; ssize_t end_pos; t_uchar * burst; bset = bufpt_session (m); buffer = bufpt_buffer (m); pos = bufpt_pos (m); end_bset = bufpt_session (end); end_buffer = bufpt_buffer (end); end_pos = bufpt_pos (end); if ((end_bset != bset) || (buffer != end_buffer)) return -1; if (end_pos <= pos) return 1; burst = buf_burst (0, bset, buffer, pos, 1); if (!burst) return -1; if (*burst == '\n') return 1; return 0; } int bufpt_is_at_end (t_buffer_point * m, t_buffer_point * end) { ssize_t bset; ssize_t buffer; ssize_t pos; ssize_t end_bset; ssize_t end_buffer; ssize_t end_pos; bset = bufpt_session (m); buffer = bufpt_buffer (m); pos = bufpt_pos (m); end_bset = bufpt_session (end); end_buffer = bufpt_buffer (end); end_pos = bufpt_pos (end); if ((end_bset != bset) || (buffer != end_buffer)) return -1; if (end_pos <= pos) return 1; else return 0; } int bufpt_char_at (t_buffer_point * m, t_buffer_point * end) { ssize_t bset; ssize_t buffer; ssize_t pos; ssize_t end_bset; ssize_t end_buffer; ssize_t end_pos; bset = bufpt_session (m); buffer = bufpt_buffer (m); pos = bufpt_pos (m); end_bset = bufpt_session (end); end_buffer = bufpt_buffer (end); end_pos = bufpt_pos (end); if ((end_bset != bset) || (buffer != end_buffer)) return -1; if (end_pos <= pos) return -1; return buf_n (bset, buffer, pos); } int bufpt_looking_at_str_n (t_buffer_point * m, t_buffer_point * end, const t_uchar * str, ssize_t len) { ssize_t bset; ssize_t buffer; ssize_t pos; ssize_t end_bset; ssize_t end_buffer; ssize_t end_pos; bset = bufpt_session (m); buffer = bufpt_buffer (m); pos = bufpt_pos (m); end_bset = bufpt_session (end); end_buffer = bufpt_buffer (end); end_pos = bufpt_pos (end); if ((end_bset != bset) || (buffer != end_buffer)) return -1; if (end_pos <= pos) return 0; if (len > (end_pos - pos)) return 0; if (!len) return 1; while (len && (pos < end_pos)) { t_uchar * burst; ssize_t burst_len; ssize_t x; burst = buf_burst (&burst_len, bset, buffer, pos, len); if (!burst) return -1; for (x = 0; x < burst_len; ++x) { if (burst[x] != *str) return 0; ++str; --len; } pos += x; } if (len) return 0; else return 1; } int bufpt_looking_at_blank_line (t_buffer_point * m, t_buffer_point * end) { ssize_t bset; ssize_t buffer; ssize_t pos; ssize_t end_bset; ssize_t end_buffer; ssize_t end_pos; bset = bufpt_session (m); buffer = bufpt_buffer (m); pos = bufpt_pos (m); end_bset = bufpt_session (end); end_buffer = bufpt_buffer (end); end_pos = bufpt_pos (end); if ((end_bset != bset) || (buffer != end_buffer)) return -1; if (end_pos <= pos) return 0; while (pos < end_pos) { t_uchar * burst; ssize_t burst_len; ssize_t x; burst = buf_burst (&burst_len, bset, buffer, pos, end_pos - pos); if (!burst) return -1; for (x = 0; x < burst_len; ++x) { if (burst[x] == '\n') return 1; if (!char_is_blank (burst[x])) return 0; } pos += x; } return 1; } int bufpt_looking_at_ci_str_n (t_buffer_point * m, t_buffer_point * end, t_uchar * str, ssize_t len) { ssize_t bset; ssize_t buffer; ssize_t pos; ssize_t end_bset; ssize_t end_buffer; ssize_t end_pos; bset = bufpt_session (m); buffer = bufpt_buffer (m); pos = bufpt_pos (m); end_bset = bufpt_session (end); end_buffer = bufpt_buffer (end); end_pos = bufpt_pos (end); if ((end_bset != bset) || (buffer != end_buffer)) return -1; if (end_pos <= pos) return 0; if (len > (end_pos - pos)) return 0; if (!len) return 1; while (len && (pos < end_pos)) { t_uchar * burst; ssize_t burst_len; ssize_t x; burst = buf_burst (&burst_len, bset, buffer, pos, len); if (!burst) return -1; for (x = 0; x < burst_len; ++x) { if (char_to_lower (burst[x]) != char_to_lower (*str)) return 0; ++str; --len; } pos += x; } if (len) return 0; else return 1; } int bufpt_looking_at_re (t_buffer_point * m, t_buffer_point * end_pt, regex_t * preg, int eflags) { ssize_t bset; ssize_t buffer; ssize_t pos; ssize_t end_bset; ssize_t end_buffer; ssize_t end_pos; ssize_t size; ssize_t len; t_uchar * str; bset = bufpt_session (m); buffer = bufpt_buffer (m); pos = bufpt_pos (m); end_bset = bufpt_session (end_pt); end_buffer = bufpt_buffer (end_pt); end_pos = bufpt_pos (end_pt); if ((end_bset != bset) || (buffer != end_buffer)) return -1; if ((bset < 0) || (buffer < 0) || (pos < 0) || (end_pos < 0) || (end_pos < pos)) return -1; size = buf_size (bset, buffer); if (end_pos > size) return -1; len = end_pos - pos; if (!len) str = 0; else { str = buf_range (bset, buffer, pos, len); if (!str) return -1; } { int r; r = regexec (preg, str, 0, 0, eflags); if (!r) return 1; else if (r == REG_NOMATCH) return 0; else return -1; } } ssize_t bufpt_col (t_buffer_point * m) { ssize_t bset; ssize_t buffer; ssize_t pos; bset = bufpt_session (m); buffer = bufpt_buffer (m); pos = bufpt_pos (m); if ((bset < 0) || (buffer < 0) || (pos < 0)) return -1; while (pos > 0) { t_uchar * s; s = buf_burst (0, bset, buffer, pos, 1); if (!s) return -1; if (*s == '\n') { ++pos; break; } else { --pos; } } return (bufpt_pos (m) - pos); } ssize_t bufpt_col_tabifying (t_buffer_point * m) { t_buffer_point pos; ssize_t answer; init_bufpt (&pos); if (0 > bufpt_copy_from (&pos, m)) { bail: (void)uninit_bufpt (&pos); return -1; } if (0 > bufpt_beginning_of_line (&pos, m)) goto bail; answer = 0; while (bufpt_pos (m) > bufpt_pos (&pos)) { switch (bufpt_char_at (&pos, m)) { default: answer += 1; break; case '\t': answer += 8; answer /= 8; answer *= 8; break; } if (0 > bufpt_goto (&pos, 1 + bufpt_pos (&pos))) goto bail; } if (0 > uninit_bufpt (&pos)) goto bail; return answer; } int bufpt_forward_char (t_buffer_point * m, t_buffer_point * end, ssize_t n) { ssize_t bset; ssize_t buffer; ssize_t pos; ssize_t end_bset; ssize_t end_buffer; ssize_t end_pos; bset = bufpt_session (m); buffer = bufpt_buffer (m); pos = bufpt_pos (m); end_bset = bufpt_session (end); end_buffer = bufpt_buffer (end); end_pos = bufpt_pos (end); if ((end_bset != bset) || (buffer != end_buffer)) return -1; if (end_pos <= pos) return -1; if ((end_pos < 0) || (pos < 0)) return -1; if ((pos + n) > end_pos) return -1; if ((pos + n) < 0) return -1; pos += n; if (0 > bufpt_goto (m, pos)) return -1; return 0; } int bufpt_backward_char (t_buffer_point * m, t_buffer_point * end, ssize_t n) { return bufpt_forward_char (m, end, -n); } int bufpt_beginning_of_line (t_buffer_point * m, t_buffer_point * end) { tail: if (0 > bufpt_pos (m)) return -1; if (0 == bufpt_pos (m)) return 0; if (0 > bufpt_goto (m, -1 + bufpt_pos (m))) return -1; if ('\n' == bufpt_char_at (m, end)) { if (0 > bufpt_forward_char (m, end, 1)) return -1; return 0; } else goto tail; } #undef MIN #define MIN(A,B) ((A) <= (B) ? (A) : (B)) int bufpt_next_line (t_buffer_point * m, t_buffer_point * end) { ssize_t bset; ssize_t buffer; ssize_t pos; ssize_t end_bset; ssize_t end_buffer; ssize_t end_pos; bset = bufpt_session (m); buffer = bufpt_buffer (m); pos = bufpt_pos (m); end_bset = bufpt_session (end); end_buffer = bufpt_buffer (end); end_pos = bufpt_pos (end); if ((end_bset != bset) || (buffer != end_buffer)) return -1; if (end_pos <= pos) return 0; while (pos < end_pos) { t_uchar * burst; ssize_t burst_len; ssize_t x; burst = buf_burst (&burst_len, bset, buffer, pos, MIN(16, end_pos - pos)); if (!burst) return -1; for (x = 0; x < burst_len; ++x) { if (burst[x] == '\n') break; } if (x == burst_len) { pos += x; } else { pos += x + 1; break; } } if (0 > bufpt_goto (m, pos)) return -1; return 0; } int bufpt_end_of_line (t_buffer_point * m, t_buffer_point * end) { ssize_t bset; ssize_t buffer; ssize_t pos; ssize_t end_bset; ssize_t end_buffer; ssize_t end_pos; bset = bufpt_session (m); buffer = bufpt_buffer (m); pos = bufpt_pos (m); end_bset = bufpt_session (end); end_buffer = bufpt_buffer (end); end_pos = bufpt_pos (end); if ((end_bset != bset) || (buffer != end_buffer)) return -1; if (end_pos <= pos) return 0; while (pos < end_pos) { t_uchar * burst; ssize_t burst_len; ssize_t x; burst = buf_burst (&burst_len, bset, buffer, pos, MIN(16, end_pos - pos)); if (!burst) return -1; for (x = 0; x < burst_len; ++x) { if (burst[x] == '\n') break; } pos += x; if (x != burst_len) { /* we found a newline. */ break; } } if (0 > bufpt_goto (m, pos)) return -1; return 0; } int bufpt_pass_whitespace (t_buffer_point * m, t_buffer_point * end) { ssize_t bset; ssize_t buffer; ssize_t pos; ssize_t end_bset; ssize_t end_buffer; ssize_t end_pos; bset = bufpt_session (m); buffer = bufpt_buffer (m); pos = bufpt_pos (m); end_bset = bufpt_session (end); end_buffer = bufpt_buffer (end); end_pos = bufpt_pos (end); if ((end_bset != bset) || (buffer != end_buffer)) return -1; if (end_pos <= pos) return 0; while (pos < end_pos) { t_uchar * burst; ssize_t burst_len; ssize_t x; burst = buf_burst (&burst_len, bset, buffer, pos, MIN(16, end_pos - pos)); if (!burst) return -1; for (x = 0; x < burst_len; ++x) { if (!char_is_space (burst[x])) break; } pos += x; if (x != burst_len) break; } if (0 > bufpt_goto (m, pos)) return -1; return 0; } int bufpt_pass_graphical (t_buffer_point * m, t_buffer_point * end) { ssize_t bset; ssize_t buffer; ssize_t pos; ssize_t end_bset; ssize_t end_buffer; ssize_t end_pos; bset = bufpt_session (m); buffer = bufpt_buffer (m); pos = bufpt_pos (m); end_bset = bufpt_session (end); end_buffer = bufpt_buffer (end); end_pos = bufpt_pos (end); if ((end_bset != bset) || (buffer != end_buffer)) return -1; if (end_pos <= pos) return 0; while (pos < end_pos) { t_uchar * burst; ssize_t burst_len; ssize_t x; burst = buf_burst (&burst_len, bset, buffer, pos, MIN(16, end_pos - pos)); if (!burst) return -1; for (x = 0; x < burst_len; ++x) { if (!char_is_graph (burst[x])) break; } pos += x; if (x != burst_len) break; } if (0 > bufpt_goto (m, pos)) return -1; return 0; } int bufpt_pass_blanks (t_buffer_point * m, t_buffer_point * end) { ssize_t bset; ssize_t buffer; ssize_t pos; ssize_t end_bset; ssize_t end_buffer; ssize_t end_pos; bset = bufpt_session (m); buffer = bufpt_buffer (m); pos = bufpt_pos (m); end_bset = bufpt_session (end); end_buffer = bufpt_buffer (end); end_pos = bufpt_pos (end); if ((end_bset != bset) || (buffer != end_buffer)) return -1; if (end_pos <= pos) return 0; while (pos < end_pos) { t_uchar * burst; ssize_t burst_len; ssize_t x; burst = buf_burst (&burst_len, bset, buffer, pos, MIN(16, end_pos - pos)); if (!burst) return -1; for (x = 0; x < burst_len; ++x) { if (!char_is_blank (burst[x])) break; } pos += x; if (x != burst_len) break; } if (0 > bufpt_goto (m, pos)) return -1; return 0; } int bufpt_pass_blank_lines (t_buffer_point * m, t_buffer_point * end) { ssize_t bset; ssize_t buffer; ssize_t pos; ssize_t end_bset; ssize_t end_buffer; ssize_t end_pos; ssize_t best_guess_end_pos; bset = bufpt_session (m); buffer = bufpt_buffer (m); pos = bufpt_pos (m); end_bset = bufpt_session (end); end_buffer = bufpt_buffer (end); end_pos = bufpt_pos (end); if ((end_bset != bset) || (buffer != end_buffer)) return -1; if (end_pos <= pos) return 0; best_guess_end_pos = pos; while (pos < end_pos) { t_uchar * burst; ssize_t burst_len; ssize_t x; burst = buf_burst (&burst_len, bset, buffer, pos, MIN(16, end_pos - pos)); if (!burst) return -1; for (x = 0; x < burst_len; ++x) { if (!char_is_space (burst[x])) break; else if (burst[x] == '\n') best_guess_end_pos = pos + x + 1; } pos += x; if (x != burst_len) break; } if (0 > bufpt_goto (m, best_guess_end_pos)) return -1; return 0; } /* tag: Tom Lord Sun Nov 21 10:46:28 2004 (edit-ops.c) */ tla-1.3.5+dfsg/src/hackerlab/rx-xml/0000755000175000017500000000000010457621774015704 5ustar userusertla-1.3.5+dfsg/src/hackerlab/rx-xml/xml-re.doc0000644000175000017500000000111310457621774017573 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:57:17 2001 (xml-re.doc) */ /************************************************************************ *(h0 "XML Regular Expressions") * * The W3C document *XML Schema Part 2: Datatypes* defines a regular * expression language for use in XML Schema. (See * url:"http://www.w3.org/TR/xmlschema-2".) * * This chapter presents C functions used for matching XML regular * expressions. (See xref:"An Introduction to XML Regular * Expressions".) * */ /*(menu) */ /*(include-documentation "re.c") */ /*(include-documentation "using.doc") */ tla-1.3.5+dfsg/src/hackerlab/rx-xml/rx-xml-data-sheet.doc0000644000175000017500000003450410457621774021645 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:57:17 2001 (rx-xml-data-sheet.doc) */ /************************************************************************ *(h0 "Data Sheet for the Hackerlab Rx XML Regular Expression Matcher" * :appendix) * insert*/ Package: Hackerlab Rx-XML (an XML/Unicode regular expression matcher) Supplier: regexps.com Function: Hackerlab Rx-XML is a regular expression pattern matcher for Schema-capable validating XML processors. It is also a general purpose Unicode regular expression matcher. Key Features: Rx-XML is fast and accurate. Supports the regular expression language specified in the W3C document "XML Schema Part 2" (http://www.w3.org/TR/xmlschema-2). Supports alternative regular expression syntaxes. Clean and simple "classic C" interface. Patterns may use UTF-8 or UTF-16. Strings compared to compiled patterns may use UTF-8 or UTF-16. Provides protection against encoding-based illegal data attacks: Ill-formed encoding sequences (e.g. non-shortest form UTF-8) are detected and rejected during regular expression compilation and matching. Configurable space/time trade-offs. Ready for Unicode 3.1: Designed for a character set with 2^21 code points. Validation tests are included. Postscript and HTML documentation is included. Licensing: Hackerlab Rx-XML is part of the Hackerlab C Library which is distributed under the terms of the GNU General Public License, Version 2, as published by the Free Software Foundation. Alternative licenses (such as licenses permitting binary-only re-distribution) can be purchased from regexps.com. Prerequisites: standard C compiler Posix libc.a (standard C library) GNU Make Recommended and Disrecommended Applications: Rx-XML is recommended for any Unicode application in need of regular expression pattern matching. Rx-XML is recommended for use in high-performance Schema-capable XML processors (e.g., a XML-based transaction server). Limitations: This is the first public (non-prototype) release. Rx-XML has been carefully tested but is not yet in widespread use. Test coverage is extensive, but not exhaustive. Thus, prudence suggests that minor bugs are likely to remain. Rx-XML protects applications against an important class of regular-expression-based denial-of-service attacks: those where a trusted source provides regular expressions, but an untrusted source provides strings to compare to those expressions. The current release does *not* protect applications against another class of attacks: those where an untrusted source provides the regular expressions. (This is likely to be fixed in future releases.) Rx-XML is single threaded. In multi-threaded applications, programs must ensure that Rx-XML is active in only one thread at a time. (This is likely to be fixed in future releases.) The set of error codes returned from functions that compile and match regular expressions is likely to change in future releases. Contribution to Executable Size: On a Pentium based machine, running gcc (egcs version 2.91.66) we compiled this simple (nonsense) program and linked it against the Hackerlab C Library: int main (int argc, char * argv[]) { rx_xml_recomp (); rx_xml_is_match (); rx_xml_free_re (); } Both the library and the program were compiled with the "-g" option. Total executable size: text data 91745 58740 The following list of object files from the Hackerlab C library were linked into the executable: alloc-limits.o bits-tree-rules.o bits.o bitset-lookup.o bitset-tree.o bitset.o bitsets.o blocks.o char-class.o charsets.o coding-inlines.o coding.o cvt.o dfa-cache.o dfa-iso8859-1.o dfa-utf16.o dfa-utf8.o dfa.o escape.o hashtree.o mem.o must-malloc.o nfa-cache.o nfa.o panic-exit.o panic.o re.o str.o super.o tree.o uni-bits.o unidata.o The contribution of those files to the executable size is: text data 90472 58548 Sizes may differ slightly from the latest release of Rx-XML. Sizes will obviously vary with platform compiler, and compiler options. External Linkage Dependencies: When compiled under FreeBSD 3.0, the simple program used to test executable sizes depends on the following symbols defined in "libc": _exit free longjmp malloc realloc setjmp Accuracy: Rx-XML is distributed with a test suite that consists of 334 test cases that systematically exercise every feature of the regular expression language. Of those, 319 test cases involve legal expressions and a string that may or may not match. Fifteen test cases involve illegal expressions, expected to return an error. During validation, expressions are compiled from both UTF-8 and UTF-16 source. Each time a legal expression is compiled, it is compared to both a UTF-8 and UTF-16 string. A total of 1276 match tests are performed. Rx-xml permits programs to make a space/time trade-off -- trading memory available to the matcher for matcher throughput. The validation tests are run in small, default, and large memory configurations. The validation test are also run in "stress test" mode. In that mode, each legal expression is compiled only once, but the list of match tests is repeated 500 times (a total of 638,000) matches. (Rx-XML passes all of the tests described above.) We repeat the caveat from the section "Limitations": This is the first public (non-prototype) release. Rx-XML has been carefully tested but is not yet in widespread use. Test coverage is extensive, but not exhaustive. Thus, prudence suggests that minor bugs are likely to remain. Execution Speed: *Qualitative Analysis* Rx-XML converts regular expressions to deterministic finite automata (DFA) and compares strings to expressions in a single pass. Subject to memory limitations, comparing a length `N' string to an expression requires `O(N)' (very inexpensive) steps. When there is not enough memory to hold a complete deterministic automata, Rx-XML discards and rebuilds DFA states as needed. In the worst case, comparing a string of length `N' to an expression of length `K' requires `O(K * N)' (somewhat expensive) steps. *Quantitative Analysis* There are no agreed upon standards for measuring the performance of Unicode regular expression pattern matchers. We know of no other comparable regular expression matchers. For these reasons, comparative performance measurements are not available. The primary target applications for Rx-XML are high-performance, Schema-capable, validating XML processors. Consider, for example, an XML-based transaction processor. Our hypothetical processor is configured by reading a set of schema definitions, including some which use `pattern' constraints, at start-up time. It then reads a succession of XML documents, each specifying a proposed transaction, from untrusted sources. Among other validations, the processor must check to see that each proposed transaction is an XML document that conforms to the schema definitions. Part of that validation process involves comparing data to regular expressions specified for pattern schema. What, then, is the impact of pattern matching on transaction processing speed? We made measurements designed to test the best and worst case scenarios. In the best case, there is sufficient memory that all of the relevant DFA states are cached in memory and matching is performed with O(N) steps. In the worst case, memory is too limited, almost no DFA states are successfully cached, and matching requires O(K*N) steps. Our measurements use the regular expression: \p{Ll}{4}-\p{Nd}{5} which matches a string of four lowercase letters (in any script), followed by "-", followed by five decimal digits (in any script). To simulate a sequence of transaction requests, we constructed 5 matching strings and 1 non-matching string. To avoid skewing test results by exercising only optimizations that apply to the Basic Latin script, our test strings use characters from six Unicode Blocks: Armenian, Basic Latin, Greek, IPA Extensions, Latin-1 Supplement, and Devanagari. In an inner loop, we successively test each of those strings for a match. An outer loop repeats those tests either 50000 or 5000 times. We performed two sets of measurements: one for strings encoded using UTF-16, and one for strings encoded using UTF-8. For each encoding form, we made two measurements: once where Rx-XML is granted enough memory to cache the entire DFA for the test expression, and once where its allocation is drastically limited, forcing it to re-construct a DFA state at almost every step (these are the ample memory and limited memory scenarios). For the ample memory scenario, 50000 iterations of the outer loop were performed. For the limited memory scenario, 5000 iterations were performed. To compute the number of code points processed per second, we divided the sum of system and user CPU time taken for all iterations by the number of Unicode code points scanned by the matcher. That number of code points is the number of iterations multiplied by the sum of the lengths of the matching expressions and the length of the non-matching expression up to and including the first non-matching character. Both the library and test program were compiled by gcc (egcs version 2.91.66), *without* optimization. Tests were conducted on a 400 Mhz Pentium II running FreeBSD 3.0. Profiling reports that 96% of the run-time of the test program was spent in `rx_xml_is_match': ample limited memory memory UTF-16 3,604,194 7,298 UTF-8 3,395,061 4,642 code-points-per-second processed by rx_xml_is_match For information about the amount of memory used by theses tests, see the next section "Run-time Allocation Requirements" To gain further perspective on matcher throughput, we ran the test suite described in the section "Accuracy" in stress test mode (compiling each expression only once), limiting the list of test cases to 42 representative tests, iterating 500 times. Each test case performs both UTF-8 UTF-16 matches. Cache sizes were sufficiently large for an "ample memory" test. This test performed 84,000 separate matches totalling 730,000 code points at a rate of 2,033,426 code points per second. In this test `rx_xml_is_match' accounted for 72% of the run time (for comparison with the preceeding table, (96 / 72) * 2,033,426 == 2,711,235). Our performance test has limitations: Performance is likely to vary with the choice of regular expression and with the strings being matched. While almost all conceivable expressions should have substantially similar performance, it is theoretically possible to construct expressions whose DFA is too large to ever cache; such expressions will always have "limited memory" performance. Performance (especially memory allocation, discussed in the next section) is likely to vary with the strings being matched; by using a variety of scripts in our test cases, we tried to achieve realistic results -- but a much larger set of test cases would presumably be a more realistic simulation. Nevertheless, we conclude that with "ample memory", rx-xml is fast enough for quite heavy workloads (millions of code points per second). In (worst case) "limited memory" configurations, rx-xml is suitable for very light workloads (thousands of code points per second). Exact performance will, obviously, vary with choice of compiler, compiler options, and platform. Run-time Allocation Requirements: The amount of memory allocated by Rx at run-time is dominated by the size of two caches: the "nfa cache" and the "dfa cache". Roughly speaking, the "nfa cache" limits the quantity of compiled regexps that are re-used across calls to "regcomp"; the size of the "dfa cache" limits the number of DFA transition tables dynamically constructed by "regexec". The sizes of these caches are independent and under application control. They may be varied, trading space for time. By default, both cache sizes are set to an advisory limit of 1MB. (This is an "advisory limit" because it may be exceeded when necessary for correct operation. Except in rare circumstances, actual cache sizes closely approximate the advisory limit.) We ran the test suite discussed in the section "Accuracy" with advisory limits of 10K, 1MB, and 8MB (for each cache). The relation between the advisory limits, the amount of memory actually used, the combined user and system execution times, and the number of DFA-state cache misses is displayed in the following table: NFA/DFA cache NFA/DFA cache time DFA misses advisory limit actual usage (seconds) (bytes) (bytes) 10K / 10K 10,514 / 12,744 0.61 3908 1MB / 1MB 299,948 / 1,048,576 0.27 890 8MB / 8MB 299,796 / 3,139,536 0.32 890 (Note that 10K vs. 1MB is an effective space/time trade-off. 8MB did not improve the cache-hit rate compared to 1MB, and caused a slight performance loss -- presumably due to virtual memory effects.) The "ample memory" and "limited memory" tests described in the section "Execution Speed" were conducted by varying the advisory cache limits. The memory used in those tests is displayed in the following table: NFA/DFA cache NFA/DFA cache advisory limit actual usage (bytes) (bytes) UTF-16 matching limited 1024 / 1024 10,513 / 3,604 memory ample 1MB / 1MB 10,513 / 37,388 memory UTF-8 matching limited 1024 / 1024 10,513 / 10,900 memory ample 1MB / 1MB 10,513 / 75,724 memory (The section "Execution Speed" describes the dramatic performance differences between the two cache limits.) Support: To purchase an alternative license, request additional features, or for any kind of support assistance, you can contact us at "hackerlab@regexps.com" or via our web site "www.regexps.com". We can also be reached at (412) 401-5204. We are currently in the midst of relocating from Pennsylvania to California, so at this time, we have no reliable postal address. /*end-insert */ tla-1.3.5+dfsg/src/hackerlab/rx-xml/re.h0000644000175000017500000000643610457621774016474 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:41:43 2001 (re.h) */ /* re.h - * **************************************************************** * Copyright (C) 2000 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__RX_UNICODE__RE_H #define INCLUDE__RX_UNICODE__RE_H #include "hackerlab/unicode/unicode.h" #include "hackerlab/rx/tree.h" #include "hackerlab/rx/nfa.h" enum rx_xml_syntax_options { rx_xml_syntax_xml = 0, rx_xml_syntax_unicode_escapes = 1, rx_xml_syntax_consistent_metacharacters = 2, rx_xml_syntax_dot_dot_ranges = 4, rx_xml_syntax_carrot_set_difference = 8, rx_xml_syntax_add_branch = 16, rx_xml_syntax_no_newlines = 32, rx_xml_syntax_no_cr = 64, rx_xml_syntax_no_linesep = 128, rx_xml_syntax_dot_star_prefix = 256, }; #define rx_xml_syntax_unigrep ( rx_xml_syntax_unicode_escapes \ | rx_xml_syntax_consistent_metacharacters \ | rx_xml_syntax_dot_dot_ranges \ | rx_xml_syntax_carrot_set_difference) enum rx_xml_recomp_errno { rx_xml_recomp_OK, rx_xml_recomp_OUT_OF_MEMORY, rx_xml_recomp_BAD_DUPLICATION_RANGE, rx_xml_recomp_GARBAGE_AFTER_REGEXP, rx_xml_recomp_MISSING_RPAREN, rx_xml_recomp_BOGUS_CHAR, rx_xml_recomp_MISSING_COMMA, rx_xml_recomp_MISSING_BRACE, rx_xml_recomp_BOGUS_CATEGORY_ESCAPE, rx_xml_recomp_BOGUS_CHARACTER_CLASS, }; struct rx_xml_rebuf { struct rx_exp_node * exp; struct rx_unfa * nfa; }; typedef struct rx_xml_rebuf rx_xml_rebuf; enum rx_xml_rematch_errno { rx_xml_rematch_OK, rx_xml_rematch_BAD_ENCODING, rx_xml_rematch_ILLEGAL_STR, rx_xml_rematch_OUT_OF_MEMORY, }; enum rx_xml_longest_status { rx_xml_longest_error, rx_xml_longest_out_of_input_match, rx_xml_longest_out_of_input_nomatch, rx_xml_longest_found, rx_xml_longest_nomatch, }; enum rx_xml_prefix_status { rx_xml_prefix_error, rx_xml_prefix_out_of_input, rx_xml_prefix_found, rx_xml_prefix_nomatch, }; /* automatically generated __STDC__ prototypes */ extern enum rx_xml_recomp_errno rx_xml_recomp (rx_xml_rebuf * re, enum uni_encoding_scheme encoding, uni_string source, size_t length); extern enum rx_xml_recomp_errno rx_xml_recomp_branch (rx_xml_rebuf * re, enum uni_encoding_scheme encoding, uni_string source, size_t length); extern enum rx_xml_recomp_errno rx_xml_recomp_opts (rx_xml_rebuf * re, enum uni_encoding_scheme encoding, uni_string src, size_t len, t_ulong syntax_options, bits cset); extern void rx_xml_free_re (rx_xml_rebuf * re); extern int rx_xml_is_match (enum rx_xml_rematch_errno * errn, rx_xml_rebuf * re, enum uni_encoding_scheme encoding, uni_string string, size_t length); extern enum rx_xml_longest_status rx_xml_longest_match (enum rx_xml_rematch_errno * errn, size_t * match_len, rx_xml_rebuf * re, enum uni_encoding_scheme encoding, uni_string string, size_t length); extern enum rx_xml_prefix_status rx_xml_prefix_match (enum rx_xml_rematch_errno * errn, rx_xml_rebuf * re, enum uni_encoding_scheme encoding, uni_string string, size_t length); #endif /* INCLUDE__RX_UNICODE__RE_H */ tla-1.3.5+dfsg/src/hackerlab/rx-xml/Makefile.in0000644000175000017500000000027510457621774017755 0ustar useruser include $(makefiles)/library-objects.mk ifeq ($(cgs__install_hackerlab),1) include $(makefiles)/install-includes.mk endif # tag: Tom Lord Tue Dec 4 14:52:16 2001 (rx-xml/Makefile.in) # tla-1.3.5+dfsg/src/hackerlab/rx-xml/using.doc0000644000175000017500000000217110457621774017521 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:57:16 2001 (using.doc) */ /************************************************************************ *(h1 "Using Rx in XML Processors") * |XML processors (using Rx in)| |XML Schema| XML Schema datatype definitions can use regular expressions in `pattern' facets to define the syntax of a value space. For information on this topic, see the *W3C* document *XML Schema: Part 2*, url:"http://www.w3.org/TR/xmlschema-2". The functions xref:"rx_xml_recomp", xref:"rx_xml_recomp_branch", and xref:"rx_xml_is_match" were designed specifically for `pattern' schema. `rx_xml_recomp' compiles the regular expression syntax of `pattern' facets. (See xref:"Comments on the XML Schema Regular Expression Syntax".) If a `pattern' facet contains more than one regular expression, they are supposed to be combined as alternative branches (see section *5.2.4* of *XML Schema: Part 2*). The function `rx_xml_recomp_branch' provides an easy implementation of this functionality. Finally, `rx_xml_is_match' compares an entire string to a regular expression -- the test required to validate a `pattern' constraint. * */ tla-1.3.5+dfsg/src/hackerlab/rx-xml/comments.doc0000644000175000017500000002256510457621774020232 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:57:17 2001 (comments.doc) */ /* xml-comments.c - * **************************************************************** * Copyright (C) 2000 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ /************************************************************************ *(h0 "Comments on the XML Schema Regular Expression Syntax" :appendix) |regular expression language| |XML| |W3C| |Schema (XML)| |XML Schema| |errors (in the XML specification)| Appendix E of the W3C publication *XML Schema Part 2: Datatypes* defines a syntax for Unicode regular expressions. That syntax is supported by Rx. (See xref:"XML Regular Expression Functions".) This chapter describes some minor error's in W3C's specification (as of the ``24 October 2000'' draft). It will make the most sense if read alongside the W3C specification. */ /*(menu) */ /************************************************************************ *(h1 "| is not Specified as a Metacharacter") Taking the grammar specification literally, the following regular expression is ambiguous: a|b It could match one of: a b or it could match only: a|b That's because `|' is defined both as the separator character for branches, and as a normal character. It is defined as a normal character because it is an XML character that is not included in the list of meta-characters. \Solution:/ Add `|' to the list of meta-characters. As a side-effect, a new single character escape is created: \| which denotes a literal `|'. */ /************************************************************************ *(h1 "The Specification of \\i is Wrong") * We presume that the intended meaning of the multi-character escape `\i' is ``Any character which may be the first character of an XML Name''. That makes `\i' useful in conjunction with `\c'. The specification says that multi-character escape `\i' is: [\p{L}\p{Nl}:_] which doesn't agree with the XML definition of a name, and is besides an odd definition. \Solution:/ Define `\i' as the set of character that match the production: NameInitial ::= (Letter | '_' | ':') if that production is added to the grammar for XML (in url:"http://www.w3.org/TR/REC-xml"). */ /************************************************************************ *(h1 "The Specification of \\w is Wrong") * The specification says that multi-character escape `\w' is: [�-￿-[\p{P}\p{S}\p{C}]] but also that it is: all characters except the set of "punctuation", "separator" and "control" characters The range `�-&xFFFF' contains code points which are not valid XML characters and which are not valid Unicode characters. Furthermore, it does not contain code points (above `0xffff') which are valid XML and Unicode characters. \Solution:/ Define `\w' as: [^\p{P}\p{Z}\p{C}] */ /************************************************************************ *(h1 "Character Class Expression Syntax is Botched") * The syntax of character class expressions is ambiguous. If the ambiguity is ignored, the syntax requires an arbitrary amount of look-ahead to parse correctly. \The Specified Syntax:/ The basic syntax for a character class expression (as currently specified) is: character_class_expression: '[' character_group ']' | '[' character_group '-' character_class_expression ']' character_group: positive_character_group | '^' positive_character_group A `positive_character_group' is defined as: one or more character ranges or character class escapes, concatenated together. A character range may be a single character escape, or any ordinary XML character other than one of `[]\^-', except that `^' is permitted as the first character of a `positive_character_group' following the `^' that indicates a negated character group, and `-' is permitted as either the first or last character of any `positive_character_group'. A character range is a pair of characters: s-e where `s' may be a single character escape or any XML character other than one of `^\', except that `^' is permitted if `s' is not the first character of a character class expression. `e' may be a single character escape or any XML character which is not one of `[\'. Finally, the code point of `e' must be greater than or equal to the code point of `s'. \The Problems:/ First, consider the ambiguous expression: [abc]-z[-def] On the one hand, the expression matches four characters such as: a-zd a-ze a-z- because `[abc]' and `[-def]' are valid character class expressions. Note that we are using the special case exception that `-' is permitted as the first character of a positive character group. On the other hand, the expression matches one character: a b c w x ] [ ... because `]-z' and `[-d' are valid character ranges. Here we are using the special case that the start character of a character range which is not the first element of a character class expression may be any XML character other than `\'. Second, consider the expression: ['--9] The specification does not make it clear whether that is set containing the range: '-- and the character: 9 or a set containing the character: ' and the range: --9 We are again using the special case rule that `-' is not a meta-character in a character class expression if it occurs as an end-point of a character class expression. Third, consider the first four characters of an XML regular expression: [A-] Is that a two character character class? It is if the entire regular expression is: [A-]mistake because in that case, `-' occurs as the last character of a `positive_character_group'. On the other hand, if the entire regular expression is: [A-]mistake] then the `-' indicates a character range from `A' to `]'. Overall, the special case rules concerning characters in `[]^-' create ambiguities, make it difficult to write a correct parser, difficult to read some expressions correctly, and easier than it needs to be to write an un-intended pattern. \Proposed Solutions/ We propose several possible ways to solve the problems with character class expressions. All of our proposals are based on this (incomplete) grammar: character_class_expression: '[' character_group ']' | '[' character_group SUBTRACTION character_class_expression ']' character_group: positive_character_group | '^' positive_character_group positive_character_group: positive_character_subgroup | positive_character_subgroup positive_character_group positive_character_subgroup: multi_character_escape | category_escape | range_endpoint | range_endpoint RANGE range_endpoint range_endpoint: single_character_escape | normal_range_character normal_range_character: [\p{isXmlChar}-SPECIALS] Three productions are missing from that grammar and we have several ideas of how each may be defined. Those productions are for: SUBTRACTION the character class subtraction operator RANGE the character class range operator SPECIALS the set of characters that are special in a character class expression. These characters must be escaped by `\' to have literal meaning in a character class expression. For `SUBTRACTION', we propose one of these alternatives: [s1] SUBTRACTION: '^' [s2] SUBTRACTION: '-' We include `[s1]' because that is the syntax used in *Unicode Technical Report #18* (available from url:"http://www.unicode.org"). For `RANGE', we propose one of: [r1] RANGE: '..' [r2] RANGE: '-' For `SPECIALS', we propose one of: [sp1] SPECIALS: [\{isMetaChar} SUBTRACTION RANGE] [sp2] SPECIALS: [\{isCCMetaChar} SUBTRACTION RANGE] where the set "MetaChar" contains the characters that have special meaning ^outside^ of character class expressions which are: . \ ? * + { } ( ) [ ] | where the set "CCMetaChar" contains the characters that have special meaning ^inside^ of character class expressions in all of the proposed syntaxes. These are: \ [ ] \Discussion:/ We have described a solution space of eight possible repairs to the character class syntax. Each solution in this space differs from the others in one or more of: the syntax for character set subtraction; the syntax for character ranges; the set of characters that must be escaped (with `\') to have literal meaning. In our implementation of an XML regular expression matcher, the default syntax we provided is: [s2] SUBTRACTION: '-' [r2] RANGE: '-' [sp2] SPECIALS: [\{isCCMetaChar} SUBTRACTION RANGE] We made that the default because it most closely resembles the syntax of the current specification, but removes the ambiguities. If we had free reign to change the standard, we would instead choose: [s2] SUBTRACTION: '-' [r1] RANGE: '..' [sp1] SPECIALS: [\{isMetaChar} SUBTRACTION RANGE] for several reasons: \1/ We believe that using `..' for ranges and `-' for subtraction avoids confusion and is intuitive for most people. \2/ We believe that requiring all meta-characters to be quoted to have literal meaning in a character set expression is an easy rule to understand and use. \3/ Requiring meta-characters to be quoted leaves room for future extensions in which unused meta-characters are given special meaning in character class expressions. For example, `^' could be used as a ``symmetric difference'' (``xor'') operator. */ tla-1.3.5+dfsg/src/hackerlab/rx-xml/PLUGIN/0000755000175000017500000000000010457621774016702 5ustar userusertla-1.3.5+dfsg/src/hackerlab/rx-xml/PLUGIN/REQ0000644000175000017500000000004110457621774017247 0ustar useruserxml rx-xml rx-xml libhackerlab tla-1.3.5+dfsg/src/hackerlab/rx-xml/re.c0000644000175000017500000014263510457621774016471 0ustar useruser/* re.c - An XML regular expression matcher * **************************************************************** * Copyright (C) 2000, 2004 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/bugs/panic.h" #include "hackerlab/os/setjmp.h" #include "hackerlab/char/char-class.h" #include "hackerlab/mem/mem.h" #include "hackerlab/bitsets/bits.h" #include "hackerlab/unidata/unidata.h" #include "hackerlab/xml/charsets.h" #include "hackerlab/rx/tree.h" #include "hackerlab/rx/nfa-cache.h" #include "hackerlab/rx/nfa.h" #include "hackerlab/rx/dfa.h" #include "hackerlab/rx/dfa-iso8859-1.h" #include "hackerlab/rx/dfa-utf8.h" #include "hackerlab/rx/dfa-utf16.h" #include "hackerlab/rx-xml/re.h" struct xmlre_parse_state; /* __STDC__ prototypes for static functions */ static void rx_xml_parse_regexp (struct xmlre_parse_state * state, struct rx_exp_node ** where); static void rx_xml_parse_branch (struct xmlre_parse_state * state, struct rx_exp_node ** where); static void rx_xml_parse_piece (struct xmlre_parse_state * state, struct rx_exp_node ** where); static struct rx_exp_node * rx_xml_build_interval_tree (struct xmlre_parse_state * state, struct rx_exp_node * exp, t_uint from, t_uint to); static struct rx_exp_node * rx_xml_build_repeat_tree (struct rx_exp_node * n, t_uint amt); static void rx_xml_parse_atom (struct xmlre_parse_state * state, struct rx_exp_node ** where); static int rx_xml_eop (struct xmlre_parse_state * state); static int rx_xml_scan_op (struct xmlre_parse_state * state, t_unicode c); static int rx_xml_scan_digit (struct xmlre_parse_state * state, int * d); static int rx_xml_scan_op_ahead (struct xmlre_parse_state * state, t_unicode c); static int rx_xml_scan_uint (struct xmlre_parse_state * state, t_uint * x); static int rx_xml_scan_opt_uint (struct xmlre_parse_state * state, t_uint * x); static int rx_xml_scan_single_character_escape (struct xmlre_parse_state * state, t_unicode * c); static int rx_xml_scan_normal_char (struct xmlre_parse_state * state, t_unicode * c); static int rx_xml_scan_multi_character_escape (struct xmlre_parse_state * state, bits * b); static int block_name_cmp (t_uchar * source, t_uchar * canonical); static int rx_xml_scan_category_escape (struct xmlre_parse_state * state, bits * b); static int rx_xml_scan_character_class (struct xmlre_parse_state * state, bits * set); static int rx_xml_scan_character_group (struct xmlre_parse_state * state, bits * set); static int rx_xml_scan_character_range (struct xmlre_parse_state * state, bits * set); static int rx_xml_scan_character_class_escape (struct xmlre_parse_state * state, bits * set); static int rx_xml_scan_range_char (struct xmlre_parse_state * state, t_unicode * c); static bits rx_xml_dot_set (struct xmlre_parse_state * state); static bits rx_xml_space_set (void); static bits rx_xml_name_initial_set (void); static bits rx_xml_name_set (void); static bits rx_xml_letter_set (void); static bits rx_xml_unicode_category_set (struct xmlre_parse_state * state, enum uni_general_category c); static bits rx_xml_word_category_set (struct xmlre_parse_state * state); /************************************************************************ *(h1 "XML Regular Expression Functions" * :includes ("hackerlab/rx-unicode/re.h")) * * |XML regular expression| * |regular expression (XML)| * */ /*(menu) */ struct xmlre_parse_state { struct rx_exp_node * root; t_ulong syntax_options; bits complete_cset; enum uni_encoding_scheme encoding; uni_iscan_fn scan; t_uchar * source; size_t len; size_t pos; enum rx_xml_recomp_errno err; jmp_buf *err_escape; }; /* __STDC__ prototypes for static functions */ static void rx_xml_parse_regexp (struct xmlre_parse_state * state, struct rx_exp_node ** where); static void rx_xml_parse_branch (struct xmlre_parse_state * state, struct rx_exp_node ** where); static void rx_xml_parse_piece (struct xmlre_parse_state * state, struct rx_exp_node ** where); static struct rx_exp_node * rx_xml_build_interval_tree (struct xmlre_parse_state * state, struct rx_exp_node * exp, t_uint from, t_uint to); static struct rx_exp_node * rx_xml_build_repeat_tree (struct rx_exp_node * n, t_uint amt); static void rx_xml_parse_atom (struct xmlre_parse_state * state, struct rx_exp_node ** where); static int rx_xml_eop (struct xmlre_parse_state * state); static int rx_xml_scan_op (struct xmlre_parse_state * state, t_unicode c); static int rx_xml_scan_digit (struct xmlre_parse_state * state, int * d); static int rx_xml_scan_op_ahead (struct xmlre_parse_state * state, t_unicode c); static int rx_xml_scan_uint (struct xmlre_parse_state * state, t_uint * x); static int rx_xml_scan_opt_uint (struct xmlre_parse_state * state, t_uint * x); static int rx_xml_scan_single_character_escape (struct xmlre_parse_state * state, t_unicode * c); static int rx_xml_scan_normal_char (struct xmlre_parse_state * state, t_unicode * c); static int rx_xml_scan_multi_character_escape (struct xmlre_parse_state * state, bits * b); static int block_name_cmp (t_uchar * source, t_uchar * canonical); static int rx_xml_scan_category_escape (struct xmlre_parse_state * state, bits * b); static int rx_xml_scan_character_class (struct xmlre_parse_state * state, bits * set); static int rx_xml_scan_character_group (struct xmlre_parse_state * state, bits * set); static int rx_xml_scan_character_range (struct xmlre_parse_state * state, bits * set); static int rx_xml_scan_character_class_escape (struct xmlre_parse_state * state, bits * set); static int rx_xml_scan_range_char (struct xmlre_parse_state * state, t_unicode * c); static bits rx_xml_dot_set (struct xmlre_parse_state * state); static bits rx_xml_space_set (void); static bits rx_xml_name_initial_set (void); static bits rx_xml_name_set (void); static bits rx_xml_letter_set (void); static bits rx_xml_unicode_category_set (struct xmlre_parse_state * state, enum uni_general_category c); static bits rx_xml_word_category_set (struct xmlre_parse_state * state); /************************************************************************ *(h2 "Compiling XML Regular Expressions") * * The functions in this section compile regular expressions using the * syntax defined for XML Schema. (See also xref:"Using Rx in XML * Processors".) */ /*(c rx_xml_recomp) * enum rx_xml_recomp_errno * rx_xml_recomp (rx_xml_rebuf * re, * enum uni_encoding_scheme encoding, * uni_string * source, * size_t length); * * Compile a regular expression using XML syntax. * * `re' is an opaque output parameter which will be filled with * the compiled expression. * * `encoding' describes the encoding scheme of the source expression. * It may be any of: * * uni_iso8859_1, 8-bit characters (u+0..u+255 only) * uni_utf8, UTF-8 encoding * uni_utf16, UTF-16 in native byte order * * Note that the encoding scheme of the source expression has no bearing * on the encoding scheme of strings tested for a match. * * `source' points to the source for the regular expression, a string * encoded in the manner specified by `encoding'. * * `length' is the size of the source expression, measured in code units. * * Return 0 upon success, an error code otherwise. See * `' for the list of error codes. * The list of error codes is likely to change in future releaes. * Future releases will add a function for translating * error codes to error messages. */ enum rx_xml_recomp_errno rx_xml_recomp (rx_xml_rebuf * re, enum uni_encoding_scheme encoding, uni_string source, size_t length) { return rx_xml_recomp_opts (re, encoding, source, length, rx_xml_syntax_xml, xml_charset); } /*(c rx_xml_recomp_branch) * enum rx_xml_recomp_errno * rx_xml_recomp_branch (rx_xml_rebuf * re, * enum uni_encoding_scheme encoding, * uni_string source, * size_t length); * * Compile a Unicode regular expression in XML syntax adding an * alternative branch to an already compiled expression. * * Parameters and return values are as to xref:"rx_xml_recomp" except * that `re' must contain an already compiled expression. * * If, on entry, `re' contains a compiled form of expression `RE1', * and `source' points to expression `RE2', the result is the same as * if the expression: * * (RE1)|(RE2) * * were compiled. */ enum rx_xml_recomp_errno rx_xml_recomp_branch (rx_xml_rebuf * re, enum uni_encoding_scheme encoding, uni_string source, size_t length) { return rx_xml_recomp_opts (re, encoding, source, length, rx_xml_syntax_xml | rx_xml_syntax_add_branch, xml_charset); } /************************************************************************ *(h2 "Compiling With Syntax Options") * * |syntax options| * |compiling regular expressions (any syntax)| * * The function in this section compiles Unicode regular expressions * using any of a variety of syntaxes which can be selected by * options provided to `rx_xml_recomp_opts'. * */ /*(c rx_xml_recomp_opts) * enum rx_xml_recomp_errno * rx_xml_recomp_opts (rx_xml_rebuf * re, * enum uni_encoding_scheme encoding, * uni_string source, * size_t length, * t_ulong syntax_options, * bits cset); * * Compile a Unicode regular expression. * * Parameters `re', `encoding', `source', and `length' are as to * xref:"rx_xml_recomp". * * `syntax_options' indicates what regular expression syntax to use * and how to interpret that syntax. It is a bit-wise ^or^ of any of: * * rx_xml_syntax_unicode_escapes * Permit numeric character escapes ("\u+xxxx" and "\v+xxxxxx") * * rx_xml_syntax_consistent_metacharacters * Require all special characters to be escaped in * character class expressions. Ordinarily, * some special characters do not need to be * escaped in character class expressions (as per * XML syntax). * * rx_xml_syntax_dot_dot_ranges * Use ".." instead of "-" to indicate character ranges * in character class expressions ("[a..z]") * * rx_xml_syntax_carrot_set_difference * Use "^" instead of "-" to indicate character set * subtraction ("[\p{L}^[a..z]]") * * rx_xml_syntax_add_branch * `re' must contain a previously compiled expression. * Compile this expression as an alternative branch. * * rx_xml_syntax_no_newlines * rx_xml_syntax_no_cr * rx_xml_syntax_no_linesep * Do not include newline (carriage return, line separator) * in the character set matched by `.' or (implicitly) in * negated character set expressions. * * rx_xml_syntax_dot_star_prefix * Compile the expression as if it were prefixed by: * * `(.*)' * * Passing 0 or `rx_xml_syntax_xml' for `syntax_options' * causes XML syntax to be used. * * `cset' is the set of all valid code code points. * * Common choices for `cset' are: * * xml_charset -- the set of code points permitted in * XML documents (declared in * * * unidata_bitset_universal -- the set of all assigned * code points (declared in * * */ enum rx_xml_recomp_errno rx_xml_recomp_opts (rx_xml_rebuf * re, enum uni_encoding_scheme encoding, uni_string src, size_t len, t_ulong syntax_options, bits cset) { size_t n_bytes; struct xmlre_parse_state state; jmp_buf escape; n_bytes = len * uni_cv_sizeof (encoding); mem_set0 ((t_uchar *)re, sizeof (*re)); mem_set0 ((t_uchar *)&state, sizeof (state)); state.encoding = encoding; state.complete_cset = xml_charset; state.scan = uni_encoding_iscan_fn (encoding); state.source = src.iso8859_1; state.len = n_bytes; state.pos = 0; state.syntax_options = syntax_options; state.root = 0; state.err_escape = &escape; if (setjmp (*state.err_escape)) { error: rx_free_exp (state.root); return state.err; } rx_xml_parse_regexp (&state, &state.root); if (!rx_xml_eop (&state)) { state.err = rx_xml_recomp_GARBAGE_AFTER_REGEXP; goto error; } if (syntax_options & rx_xml_syntax_dot_star_prefix) { bits dot_set; struct rx_exp_node * dot; struct rx_exp_node * dot_star; struct rx_exp_node * concat; dot_set = rx_xml_dot_set (&state); if (!dot_set) { state.err = rx_xml_recomp_OUT_OF_MEMORY; goto error; } dot = rx_mk_r_cset_take (r_cset, (1 << 21), dot_set); if (!dot) { bits_free (dot_set); state.err = rx_xml_recomp_OUT_OF_MEMORY; goto error; } dot_star = rx_mk_r_monop (r_star, dot); if (!dot_star) { rx_free_exp (dot); state.err = rx_xml_recomp_OUT_OF_MEMORY; goto error; } concat = rx_mk_r_binop (r_concat, dot_star, state.root); if (!concat) { rx_free_exp (dot_star); state.err = rx_xml_recomp_OUT_OF_MEMORY; goto error; } state.root = concat; } if (syntax_options & rx_xml_syntax_add_branch) { struct rx_exp_node * n; n = rx_mk_r_binop (r_alternate, re->exp, state.root); if (!n) { state.err = rx_xml_recomp_OUT_OF_MEMORY; goto error; } state.root = n; } re->exp = state.root; re->nfa = 0; return rx_xml_recomp_OK; } /************************************************************************ *(h2 "Freeing a Compiled XML Regular Expression") * * */ /*(c rx_xml_free_re) * void rx_xml_free_re (rx_xml_rebuf * re); * * Release all storage associated with a previously compiled expression. * This does not free the memory pointed to by `re'. * */ void rx_xml_free_re (rx_xml_rebuf * re) { rx_free_exp (re->exp); rx_free_unfa (re->nfa); mem_set0 ((t_uchar *)re, sizeof (*re)); } /************************************************************************ *(h2 "Comparing a String To An XML Regular Expression") * */ /*(c rx_xml_is_match) * int rx_xml_is_match (enum rx_xml_rematch_errno * errn, * rx_xml_rebuf * re, * enum uni_encoding_scheme encoding, * uni_string * string, * size_t length); * * Compare the compiled expression `re' to `string'. Return 1 if the * entire string matches, 0 if it does not, and `-1' if an error * occurs. * * `errn' is an output parameter that returns an error code if an * error occurs (see `' for the list of error * codes. The list of error codes is likely to change in future * releaes. Future releases will add a function for translating error * codes to error messages. * * `re' is a previously compiled regular expression. * * `encoding' describes the encoding scheme of `string'. * It may be any of: * * uni_iso8859_1, 8-bit characters (u+0..u+255 only) * uni_utf8, UTF-8 encoding * uni_utf16, UTF-16 in native byte order * * `string' is the string to test for a match, encoded according to * `encoding'. * * `length' is the length of that string in code units. */ int rx_xml_is_match (enum rx_xml_rematch_errno * errn, rx_xml_rebuf * re, enum uni_encoding_scheme encoding, uni_string string, size_t length) { size_t len; int adv; int label; struct rx_dfa dfa; int storage_unit_size; len = length * uni_cv_sizeof (encoding); if ((encoding == uni_utf16) && (len & 1)) { *errn = rx_xml_rematch_ILLEGAL_STR; return -1; } mem_set0 ((t_uchar *)&dfa, sizeof (dfa)); if (!re->nfa) { re->nfa = rx_unfa (re->exp, (1 << 21)); if (!re->nfa) { *errn = rx_xml_rematch_OUT_OF_MEMORY; return -1; } } rx_init_dfa_from_nfa (&dfa, re->nfa->nfa); storage_unit_size = ((encoding == uni_utf16) ? 2 : 1); if (rx_dfa_goto_start_superstate (&dfa, storage_unit_size)) { *errn = rx_xml_rematch_OUT_OF_MEMORY; return -1; } switch (encoding) { default: case uni_iso8859_1: adv = rx_dfa_iso8859_1_fits (&label, &dfa, string.iso8859_1, len); break; case uni_utf8: adv = rx_dfa_utf8_fits (&label, &dfa, string.utf8, len); break; case uni_utf16: adv = rx_dfa_utf16_fits (&label, &dfa, string.utf16, len / 2); break; } rx_clear_dfa_state (&dfa); if (adv < 0) { *errn = rx_xml_rematch_OUT_OF_MEMORY; return -1; } return !!label; } /*(c rx_xml_longest_match) * enum rx_xml_longest_status * rx_xml_longest_match (enum rx_xml_rematch_errno * errn, * size_t * match_len, * rx_xml_rebuf * re, * enum uni_encoding_scheme encoding, * uni_string string, * size_t length) * * Look for the longest matching prefix of `string'. There are * five possible return values: * * rx_xml_longest_error * An error occured (check *errn). * * rx_xml_longest_out_of_input_match * A match was found. If the string were longer, * a longer match might be found. * * rx_xml_longest_out_of_input_nomatch * No match was found. If the string were longer, * a match might be found. * * rx_xml_longest_found * The longest possible match was found. * * rx_xml_longest_nomatch * No prefix matches. * * `errn' is an output parameter that returns an error code if an * error occurs (see `' for the list of error * codes). The list of error codes is likely to change in future * releaes. Future releases will add a function for translating error * codes to error messages. * * `match_len' returns the length (in code units) of the longest match * found (if any). * * `re' is a previously compiled regular expression. * * `encoding' describes the encoding scheme of `string'. * It may be any of: * * uni_iso8859_1, 8-bit characters (u+0..u+255 only) * uni_utf8, UTF-8 encoding * uni_utf16, UTF-16 in native byte order * * `string' is the string to test for a match, encoded according to * `encoding'. * * `length' is the length of that string in code units. */ enum rx_xml_longest_status rx_xml_longest_match (enum rx_xml_rematch_errno * errn, size_t * match_len, rx_xml_rebuf * re, enum uni_encoding_scheme encoding, uni_string string, size_t length) { size_t code_unit_size; size_t len; struct rx_dfa dfa; int found_match; size_t best_len; size_t pos; int storage_unit_size; code_unit_size = uni_cv_sizeof (encoding); len = length * code_unit_size; if ((encoding == uni_utf16) && (len & 1)) { *errn = rx_xml_rematch_ILLEGAL_STR; return rx_xml_longest_error; } mem_set0 ((t_uchar *)&dfa, sizeof (dfa)); if (!re->nfa) { re->nfa = rx_unfa (re->exp, (1 << 21)); if (!re->nfa) { out_of_memory: *errn = rx_xml_rematch_OUT_OF_MEMORY; return rx_xml_longest_error; } } rx_init_dfa_from_nfa (&dfa, re->nfa->nfa); storage_unit_size = ((encoding == uni_utf16) ? 2 : 1); if (rx_dfa_goto_start_superstate (&dfa, 1)) goto out_of_memory; found_match = !!rx_dfa_tag (&dfa); best_len = 0; pos = 0; while (pos < len) { int adv; size_t amt; switch (encoding) { default: case uni_iso8859_1: adv = rx_dfa_iso8859_1_advance_to_final (&amt, &dfa, string.iso8859_1 + pos, len - pos); break; case uni_utf8: adv = rx_dfa_utf8_advance_to_final (&amt, &dfa, string.utf8 + pos, len - pos); break; case uni_utf16: adv = rx_dfa_utf16_advance_to_final (&amt, &dfa, (t_uint16 *)(string.iso8859_1 + pos), (len - pos) / 2); amt *= 2; break; } if (adv < 0) { rx_clear_dfa_state (&dfa); goto out_of_memory; } if (adv == 0) { rx_clear_dfa_state (&dfa); if (!found_match) { return rx_xml_longest_nomatch; } else { *match_len = best_len / code_unit_size; return rx_xml_longest_found; } } if (rx_dfa_tag (&dfa)) { best_len += amt; found_match = 1; } pos += amt; } if (found_match) { *match_len = best_len / code_unit_size; return rx_xml_longest_out_of_input_match; } else { *match_len = best_len / code_unit_size; return rx_xml_longest_out_of_input_nomatch; } } /*(c rx_xml_prefix_match) * enum rx_xml_prefix_status * rx_xml_prefix_match (enum rx_xml_rematch_errno * errn, * rx_xml_rebuf * re, * enum uni_encoding_scheme encoding, * uni_string string, * size_t length); * * Look for any matching prefix of `string'. Note that this * function does not look for the *longest* matching prefix, * and does not return the length of the prefix found -- it * merely verifies the existence of *some* matching prefix. * * There are four possible return values: * * rx_xml_prefix_error * An error occured (check *errn). * * rx_xml_prefix_out_of_input * No match was found. If the string were longer, * a match might be found. * * rx_xml_prefix_found * A matching prefix was found. * * rx_xml_prefix_nomatch * No prefix matches. * * `errn' is an output parameter that returns an error code if an * error occurs (see `' for the list of error * codes). The list of error codes is likely to change in future * releaes. Future releases will add a function for translating error * codes to error messages. * * `re' is a previously compiled regular expression. * * `encoding' describes the encoding scheme of `string'. * It may be any of: * * uni_iso8859_1, 8-bit characters (u+0..u+255 only) * uni_utf8, UTF-8 encoding * uni_utf16, UTF-16 in native byte order * * `string' is the string to test for a match, encoded according to * `encoding'. * * `length' is the length of that string in code units. */ enum rx_xml_prefix_status rx_xml_prefix_match (enum rx_xml_rematch_errno * errn, rx_xml_rebuf * re, enum uni_encoding_scheme encoding, uni_string string, size_t length) { size_t len; struct rx_dfa dfa; int adv; size_t amt; len = length * uni_cv_sizeof (encoding); if ((encoding == uni_utf16) && (len & 1)) { *errn = rx_xml_rematch_ILLEGAL_STR; return rx_xml_prefix_error; } mem_set0 ((t_uchar *)&dfa, sizeof (dfa)); if (!re->nfa) { re->nfa = rx_unfa (re->exp, (1 << 21)); if (!re->nfa) { out_of_memory: *errn = rx_xml_rematch_OUT_OF_MEMORY; return rx_xml_prefix_error; } } rx_init_dfa_from_nfa (&dfa, re->nfa->nfa); if (rx_dfa_goto_start_superstate (&dfa, 1)) goto out_of_memory; switch (encoding) { default: case uni_iso8859_1: adv = rx_dfa_iso8859_1_advance_to_final (&amt, &dfa, string.iso8859_1, len); break; case uni_utf8: adv = rx_dfa_utf8_advance_to_final (&amt, &dfa, string.utf8, len); break; case uni_utf16: adv = rx_dfa_utf16_advance_to_final (&amt, &dfa, string.utf16, len / 2); break; } if (adv < 0) { rx_clear_dfa_state (&dfa); goto out_of_memory; } if (adv == 0) { rx_clear_dfa_state (&dfa); return rx_xml_prefix_nomatch; } if (rx_dfa_tag (&dfa)) { return rx_xml_prefix_found; } return rx_xml_prefix_out_of_input; } static void rx_xml_parse_regexp (struct xmlre_parse_state * state, struct rx_exp_node ** where) { if (rx_xml_eop (state)) { *where = 0; return; } rx_xml_parse_branch (state, where); while (rx_xml_scan_op (state, '|')) { struct rx_exp_node * alt; alt = rx_mk_r_binop (r_alternate, *where, 0); if (!alt) { state->err = rx_xml_recomp_OUT_OF_MEMORY; longjmp (*state->err_escape, 1); } *where = alt; rx_xml_parse_branch (state, &alt->right); } } static void rx_xml_parse_branch (struct xmlre_parse_state * state, struct rx_exp_node ** where) { rx_xml_parse_piece (state, where); while (*where && !rx_xml_eop (state) && !rx_xml_scan_op_ahead (state, '|') && !rx_xml_scan_op_ahead (state, ')')) { struct rx_exp_node * branch; branch = rx_mk_r_binop (r_concat, *where, 0); if (!branch) { state->err = rx_xml_recomp_OUT_OF_MEMORY; longjmp (*state->err_escape, 1); } *where = branch; rx_xml_parse_piece (state, &branch->right); } } static void rx_xml_parse_piece (struct xmlre_parse_state * state, struct rx_exp_node ** where) { rx_xml_parse_atom (state, where); if (rx_xml_scan_op (state, '?')) { struct rx_exp_node * n; n = rx_mk_r_binop (r_alternate, *where, 0); if (!n) { state->err = rx_xml_recomp_OUT_OF_MEMORY; longjmp (*state->err_escape, 1); } *where = n; } else if (rx_xml_scan_op (state, '*')) { struct rx_exp_node * n; n = rx_mk_r_monop (r_star, *where); if (!n) { state->err = rx_xml_recomp_OUT_OF_MEMORY; longjmp (*state->err_escape, 1); } *where = n; } else if (rx_xml_scan_op (state, '+')) { struct rx_exp_node * n; rx_save_exp (*where); n = rx_mk_r_binop (r_concat, *where, rx_mk_r_monop (r_star, *where)); if (!n) { rx_free_exp (*where); state->err = rx_xml_recomp_OUT_OF_MEMORY; longjmp (*state->err_escape, 1); } *where = n; } else if (rx_xml_scan_op (state, '{')) { t_uint m; t_uint n; int unbounded; struct rx_exp_node * exp; unbounded = 0; exp = *where; rx_save_exp (exp); rx_xml_scan_uint (state, &m); if (rx_xml_scan_op (state, '}')) { n = m; } else { if (!rx_xml_scan_op (state, ',')) { rx_free_exp (exp); state->err = rx_xml_recomp_MISSING_COMMA; longjmp (*state->err_escape, 1); } if (!rx_xml_scan_opt_uint (state, &n)) { n = m; unbounded = 1; } if (!rx_xml_scan_op (state, '}')) { rx_free_exp (exp); state->err = rx_xml_recomp_MISSING_BRACE; longjmp (*state->err_escape, 1); } } /* m and n set. * *where == exp == repeated expression (2 ref counts) */ if ((m == 0) && (n == 0)) { rx_free_exp (*where); *where = 0; } else { if (m > n) { rx_free_exp (exp); state->err = rx_xml_recomp_BAD_DUPLICATION_RANGE; longjmp (*state->err_escape, 1); } if (m == 0) { struct rx_exp_node * n; n = rx_mk_r_binop (r_alternate, 0, *where); if (!n) { rx_free_exp (exp); state->err = rx_xml_recomp_OUT_OF_MEMORY; longjmp (*state->err_escape, 1); } *where = n; where = &(*where)->right; m = 1; } *where = rx_xml_build_interval_tree (state, *where, m, n); } /* *where == RE{m,n} * exp == RE (w/ ref count) */ if (!unbounded) rx_free_exp (exp); else { struct rx_exp_node * star; struct rx_exp_node * concat; star = rx_mk_r_monop (r_star, exp); if (!star) { rx_free_exp (exp); state->err = rx_xml_recomp_OUT_OF_MEMORY; longjmp (*state->err_escape, 1); } concat = rx_mk_r_binop (r_concat, *where, star); if (!concat) { rx_free_exp (star); state->err = rx_xml_recomp_OUT_OF_MEMORY; longjmp (*state->err_escape, 1); } *where = concat; } } } static struct rx_exp_node * rx_xml_build_interval_tree (struct xmlre_parse_state * state, struct rx_exp_node * exp, t_uint from, t_uint to) { t_uint mandatory; t_uint optional; struct rx_exp_node * mandatory_tree; struct rx_exp_node * opt_exp; struct rx_exp_node * opt_tree; struct rx_exp_node * combined; mandatory = from; optional = to - from; /* exp has ref count to take over * * mandatory >= 1 * optional >= 0 */ mandatory_tree = rx_xml_build_repeat_tree (exp, mandatory); if (!mandatory_tree) { rx_free_exp (exp); state->err = rx_xml_recomp_OUT_OF_MEMORY; longjmp (*state->err_escape, 1); } if (!optional) { rx_free_exp (exp); return mandatory_tree; } opt_exp = rx_mk_r_binop (r_alternate, exp, 0); if (!opt_exp) { rx_free_exp (mandatory_tree); rx_free_exp (exp); state->err = rx_xml_recomp_OUT_OF_MEMORY; longjmp (*state->err_escape, 1); } opt_tree = rx_xml_build_repeat_tree (opt_exp, optional); rx_free_exp (opt_exp); if (!opt_tree) { rx_free_exp (mandatory_tree); state->err = rx_xml_recomp_OUT_OF_MEMORY; longjmp (*state->err_escape, 1); } combined = rx_mk_r_binop (r_concat, mandatory_tree, opt_tree); if (!combined) { rx_free_exp (mandatory_tree); rx_free_exp (opt_tree); state->err = rx_xml_recomp_OUT_OF_MEMORY; longjmp (*state->err_escape, 1); } return combined; } static struct rx_exp_node * rx_xml_build_repeat_tree (struct rx_exp_node * n, t_uint amt) { t_uint left; t_uint right; struct rx_exp_node * left_tree; struct rx_exp_node * right_tree; struct rx_exp_node * combined; if (amt == 1) { rx_save_exp (n); return n; } left = amt / 2; right = amt - left; left_tree = rx_xml_build_repeat_tree (n, left); right_tree = rx_xml_build_repeat_tree (n, right); if (!left_tree || !right_tree) { rx_free_exp (left_tree); rx_free_exp (right_tree); return 0; } combined = rx_mk_r_binop (r_concat, left_tree, right_tree); if (!combined) { rx_free_exp (left_tree); rx_free_exp (right_tree); return 0; } return combined; } static void rx_xml_parse_atom (struct xmlre_parse_state * state, struct rx_exp_node ** where) { t_unicode c; bits b; if (rx_xml_scan_op (state, '(')) { rx_xml_parse_regexp (state, where); if (!rx_xml_scan_op (state, ')')) { state->err = rx_xml_recomp_MISSING_RPAREN; longjmp (*state->err_escape, 1); } } else if (rx_xml_scan_op_ahead (state, '[')) { bits set; struct rx_exp_node * n; if (!rx_xml_scan_character_class (state, &set)) { state->err = rx_xml_recomp_BOGUS_CHARACTER_CLASS; longjmp (*state->err_escape, 1); } if ((state->syntax_options & rx_xml_syntax_no_newlines) && bits_remove (set, '\n')) { bits_free (set); state->err = rx_xml_recomp_OUT_OF_MEMORY; longjmp (*state->err_escape, 1); } if ((state->syntax_options & rx_xml_syntax_no_cr) && bits_remove (set, '\r')) { bits_free (set); state->err = rx_xml_recomp_OUT_OF_MEMORY; longjmp (*state->err_escape, 1); } if ((state->syntax_options & rx_xml_syntax_no_linesep) && bits_remove (set, 0x2028)) { bits_free (set); state->err = rx_xml_recomp_OUT_OF_MEMORY; longjmp (*state->err_escape, 1); } n = rx_mk_r_cset_take (r_cset, (1 << 21), set); if (!n) { bits_free (set); state->err = rx_xml_recomp_OUT_OF_MEMORY; longjmp (*state->err_escape, 1); } *where = n; return; } else if ( rx_xml_scan_category_escape (state, &b) || rx_xml_scan_multi_character_escape (state, &b)) { struct rx_exp_node * n; if (!b) { state->err = rx_xml_recomp_OUT_OF_MEMORY; longjmp (*state->err_escape, 1); } if ((state->syntax_options & rx_xml_syntax_no_newlines) && bits_remove (b, '\n')) { bits_free (b); state->err = rx_xml_recomp_OUT_OF_MEMORY; longjmp (*state->err_escape, 1); } if ((state->syntax_options & rx_xml_syntax_no_cr) && bits_remove (b, '\r')) { bits_free (b); state->err = rx_xml_recomp_OUT_OF_MEMORY; longjmp (*state->err_escape, 1); } if ((state->syntax_options & rx_xml_syntax_no_linesep) && bits_remove (b, 0x2028)) { bits_free (b); state->err = rx_xml_recomp_OUT_OF_MEMORY; longjmp (*state->err_escape, 1); } n = rx_mk_r_cset_take (r_cset, (1 << 21), b); if (!n) { bits_free (b); state->err = rx_xml_recomp_OUT_OF_MEMORY; longjmp (*state->err_escape, 1); } *where = n; return; } else if (rx_xml_scan_single_character_escape (state, &c)) { t_uchar str[4]; size_t pos; int len; struct rx_exp_node * n; if ((state->syntax_options & rx_xml_syntax_no_newlines) && (c == '\n')) { state->err = rx_xml_recomp_BOGUS_CHAR; longjmp (*state->err_escape, 1); } if ((state->syntax_options & rx_xml_syntax_no_cr) && (c == '\r')) { state->err = rx_xml_recomp_BOGUS_CHAR; longjmp (*state->err_escape, 1); } if ((state->syntax_options & rx_xml_syntax_no_linesep) && (c == 0x2028)) { state->err = rx_xml_recomp_BOGUS_CHAR; longjmp (*state->err_escape, 1); } pos = 0; len = uni_utf16_iput (str, &pos, (size_t)4, c); invariant (len > 0); n = rx_mk_r_str (r_string, str, pos, uni_utf16); if (!n) { state->err = rx_xml_recomp_OUT_OF_MEMORY; longjmp (*state->err_escape, 1); } *where = n; return; } else { size_t start; size_t saved; size_t end; int n_chars; t_uchar * str; size_t len; start = state->pos; end = start; n_chars = 0; while (1) { saved = state->pos; if (!rx_xml_scan_normal_char (state, &c)) break; if ((state->syntax_options && rx_xml_syntax_no_newlines) && (c == '\n')) { state->err = rx_xml_recomp_BOGUS_CHAR; longjmp (*state->err_escape, 1); } if ((state->syntax_options && rx_xml_syntax_no_cr) && (c == '\r')) { state->err = rx_xml_recomp_BOGUS_CHAR; longjmp (*state->err_escape, 1); } if ((state->syntax_options && rx_xml_syntax_no_linesep) && (c == 0x2028)) { state->err = rx_xml_recomp_BOGUS_CHAR; longjmp (*state->err_escape, 1); } if ( rx_xml_scan_op_ahead (state, '?') || rx_xml_scan_op_ahead (state, '*') || rx_xml_scan_op_ahead (state, '+') || rx_xml_scan_op_ahead (state, '{')) { if (n_chars == 0) { end = state->pos; n_chars = 1; break; } else { state->pos = saved; break; } } ++n_chars; } if (n_chars == 0) { state->err = rx_xml_recomp_BOGUS_CHAR; longjmp (*state->err_escape, 1); } end = state->pos; len = (end - start); str = state->source + start; { struct rx_exp_node * n; n = rx_mk_r_str (r_string, str, len, state->encoding); if (!n) { state->err = rx_xml_recomp_OUT_OF_MEMORY; longjmp (*state->err_escape, 1); } *where = n; } return; } } static int rx_xml_eop (struct xmlre_parse_state * state) { return state->pos >= state->len; } static int rx_xml_scan_op (struct xmlre_parse_state * state, t_unicode c) { size_t pos; t_unicode scanned; if (rx_xml_eop (state)) return 0; pos = state->pos; scanned = state->scan (state->source, &pos, state->len); if (scanned == c) { state->pos = pos; return 1; } else return 0; } static int rx_xml_scan_digit (struct xmlre_parse_state * state, int * d) { size_t pos; t_unicode scanned; if (rx_xml_eop (state)) return 0; pos = state->pos; scanned = state->scan (state->source, &pos, state->len); if (char_is_digit (scanned)) { *d = scanned - '0'; state->pos = pos; return 1; } else return 0; } static int rx_xml_scan_op_ahead (struct xmlre_parse_state * state, t_unicode c) { size_t pos; t_unicode scanned; if (rx_xml_eop (state)) return 0; pos = state->pos; scanned = state->scan (state->source, &pos, state->len); if (scanned == c) { return 1; } else return 0; } static int rx_xml_scan_uint (struct xmlre_parse_state * state, t_uint * x) { int d; if (!rx_xml_scan_digit (state, &d)) return 0; *x = d; while (rx_xml_scan_digit (state, &d)) { if (*x > (UINT_MAX / 10)) return 0; *x *= 10; if (*x > (UINT_MAX - d)) return 0; *x += d; } return 1; } static int rx_xml_scan_opt_uint (struct xmlre_parse_state * state, t_uint * x) { size_t saved_pos; int d; saved_pos = state->pos; if (!rx_xml_scan_digit (state, &d)) return 0; *x = d; while (rx_xml_scan_digit (state, &d)) { if (*x > (UINT_MAX / 10)) { state->pos = saved_pos; return 0; } *x *= 10; if (*x > (UINT_MAX - d)) { state->pos = saved_pos; return 0; } *x += d; } return 1; } static int rx_xml_scan_single_character_escape (struct xmlre_parse_state * state, t_unicode * c) { size_t pos; t_unicode scanned; if (rx_xml_eop (state)) return 0; pos = state->pos; scanned = state->scan (state->source, &pos, state->len); if (scanned != '\\') return 0; if (pos >= state->len) return 0; scanned = state->scan (state->source, &pos, state->len); switch (scanned) { { default: return 0; } /* single character escapes: */ { case 'u': case 'v': { int x; int l; t_unicode v; if (!(state->syntax_options & rx_xml_syntax_unicode_escapes)) return 0; v = 0; l = ((scanned == 'u') ? 4 : 6); for (x = 0; x < l; ++x) { if (pos >= state->len) return 0; scanned = state->scan (state->source, &pos, state->len); switch (scanned) { default: return 0; case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': v *= 16; v += 10 + scanned - 'a'; break; case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': v *= 16; v += 10 + scanned - 'A'; break; case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': v *= 16; v += 10 + scanned - '0'; break; } } if (!bits_is_member (state->complete_cset, v)) return 0; *c = v; state->pos = pos; return 1; } case 'n': *c = '\n'; state->pos = pos; return 1; case 'r': *c = '\r'; state->pos = pos; return 1; case 't': *c = '\t'; state->pos = pos; return 1; case '-': case '|': case '^': case '.': case '\\': case '?': case '*': case '+': case '{': case '}': case '(': case ')': case '[': case ']': *c = scanned; state->pos = pos; return 1; } } } static int rx_xml_scan_normal_char (struct xmlre_parse_state * state, t_unicode * c) { size_t pos; t_unicode scanned; if (rx_xml_eop (state)) return 0; pos = state->pos; scanned = state->scan (state->source, &pos, state->len); if (bits_is_member (state->complete_cset, scanned) && !xml_is_re_meta_char (scanned)) { *c = scanned; state->pos = pos; return 1; } else return 0; } static int rx_xml_scan_multi_character_escape (struct xmlre_parse_state * state, bits * b) { size_t pos; t_unicode scanned; if (rx_xml_eop (state)) return 0; pos = state->pos; scanned = state->scan (state->source, &pos, state->len); if (scanned == '.') { state->pos = pos; *b = rx_xml_dot_set (state); return 1; } else if (scanned == '\\') { if (pos >= state->len) return 0; scanned = state->scan (state->source, &pos, state->len); switch (scanned) { default: return 0; case 's': case 'S': *b = rx_xml_space_set (); break; case 'i': case 'I': *b = rx_xml_name_initial_set (); break; case 'c': case 'C': *b = rx_xml_name_set (); break; case 'd': case 'D': *b = rx_xml_unicode_category_set (state, uni_general_category_Nd); break; case 'w': case 'W': *b = rx_xml_word_category_set (state); break; } if ( !*b || ( char_is_upper (scanned) && bits_revdifference (*b, state->complete_cset))) { bits_free (*b); *b = 0; return 0; } state->pos = pos; return 1; } return 0; } static int block_name_cmp (t_uchar * source, t_uchar * canonical) { while (1) { if (!*source && !*canonical) return 1; if (!*source || !*canonical) return 0; if (char_to_lower (*source) != char_to_lower (*canonical)) { while (char_is_space (*canonical)) ++canonical; if (char_to_lower (*source) != char_to_lower (*canonical)) return 0; } ++source; ++canonical; } } static int rx_xml_scan_category_escape (struct xmlre_parse_state * state, bits * b) { size_t pos; t_unicode scanned; t_unicode op; if (rx_xml_eop (state)) return 0; pos = state->pos; scanned = state->scan (state->source, &pos, state->len); if (scanned != '\\') return 0; if (pos >= state->len) return 0; op = state->scan (state->source, &pos, state->len); switch (op) { default: return 0; case 'p': case 'P': { t_uchar name[64]; int x; if ( (pos >= state->len) || ('{' != state->scan (state->source, &pos, state->len))) { bogus_category_escape: state->err = rx_xml_recomp_BOGUS_CATEGORY_ESCAPE; longjmp (*state->err_escape, 1); } x = 0; while (1) { if (pos >= state->len) return 0; scanned = state->scan (state->source, &pos, state->len); if (!char_is_ascii (scanned)) goto bogus_category_escape; if (scanned == '}') break; name[x++] = (t_uchar)scanned; if (x == (sizeof (name) - 1)) goto bogus_category_escape; } name[x++] = 0; if ((x > 2) && (char_to_lower (name[0]) == 'i') && (char_to_lower (name[1]) == 's')) { bits set; int x; /* block escape */ for (x = 0; x < n_uni_blocks; ++x) { if (block_name_cmp (name + 2, uni_blocks[x].name)) break; } if (x == n_uni_blocks) goto bogus_category_escape; set = bits_alloc (rx_nfa_cache_limits (), uni_bits_tree_rule); if ( !set || bits_fill_range (set, uni_blocks[x].start, uni_blocks[x].end + 1)) { bits_free (set); state->err = rx_xml_recomp_OUT_OF_MEMORY; longjmp (*state->err_escape, 1); } *b = set; } else { int cat; /* category escape */ cat = uni_general_category_lookup (name); if (cat < 0) goto bogus_category_escape; *b = rx_xml_unicode_category_set (state, cat); } break; } } if ( !*b || ( char_is_upper (op) && bits_revdifference (*b, state->complete_cset))) { bits_free (*b); *b = 0; return 0; } state->pos = pos; return 1; } static int rx_xml_scan_character_class (struct xmlre_parse_state * state, bits * set) { if (!rx_xml_scan_op (state, '[')) return 0; *set = bits_alloc (rx_nfa_cache_limits (), uni_bits_tree_rule); if (!*set) { state->err = rx_xml_recomp_OUT_OF_MEMORY; longjmp (*state->err_escape, 1); } if (!rx_xml_scan_character_group (state, set)) return 0; if ((state->syntax_options & rx_xml_syntax_carrot_set_difference) ? rx_xml_scan_op (state, '^') : rx_xml_scan_op (state, '-')) { jmp_buf * saved_escape; jmp_buf escape; bits set2; saved_escape = state->err_escape; state->err_escape = &escape; if (setjmp (*state->err_escape)) { state->err_escape = saved_escape; bits_free (*set); *set = 0; state->err = rx_xml_recomp_OUT_OF_MEMORY; longjmp (*state->err_escape, 1); } if (!rx_xml_scan_character_class (state, &set2)) { bits_free (*set); *set = 0; state->err_escape = saved_escape; return 0; } state->err_escape = saved_escape; if (bits_difference (*set, set2)) { bits_free (*set); bits_free (set2); *set = 0; state->err = rx_xml_recomp_OUT_OF_MEMORY; longjmp (*state->err_escape, 1); } bits_free (set2); } if (!rx_xml_scan_op (state, ']')) { bits_free (*set); return 0; } return 1; } static int rx_xml_scan_character_group (struct xmlre_parse_state * state, bits * set) { int negated; negated = rx_xml_scan_op (state, '^'); if (!rx_xml_scan_character_range (state, set)) return 0; while (rx_xml_scan_character_range (state, set)) ; if (negated && bits_revdifference (*set, state->complete_cset)) { bits_free (*set); state->err = rx_xml_recomp_OUT_OF_MEMORY; longjmp (*state->err_escape, 1); } return 1; } static int rx_xml_scan_character_range (struct xmlre_parse_state * state, bits * set) { t_unicode first; t_unicode second; int is_range; if (rx_xml_scan_character_class_escape (state, set)) return 1; if (!rx_xml_scan_range_char (state, &first)) return 0; if (state->syntax_options & rx_xml_syntax_dot_dot_ranges) { if (!rx_xml_scan_op (state, '.')) is_range = 0; else if (rx_xml_scan_op (state, '.')) is_range = 1; else { bits_free (*set); state->err = rx_xml_recomp_BOGUS_CHAR; longjmp (*state->err_escape, 1); } } else is_range = rx_xml_scan_op (state, '-'); if (!is_range) { if (bits_adjoin (*set, first)) { bits_free (*set); state->err = rx_xml_recomp_OUT_OF_MEMORY; longjmp (*state->err_escape, 1); } return 1; } if ( !rx_xml_scan_range_char (state, &second) || (second < first)) { bits_free (*set); state->err = rx_xml_recomp_BOGUS_CHARACTER_CLASS; longjmp (*state->err_escape, 1); } if (bits_fill_range (*set, first, second + 1)) { bits_free (*set); state->err = rx_xml_recomp_OUT_OF_MEMORY; longjmp (*state->err_escape, 1); } return 1; } static int rx_xml_scan_character_class_escape (struct xmlre_parse_state * state, bits * set) { bits b; int stat; if ( !rx_xml_scan_category_escape (state, &b) && !rx_xml_scan_multi_character_escape (state, &b)) return 0; stat = bits_union (*set, b); bits_free (b); if (stat) { bits_free (*set); state->err = rx_xml_recomp_OUT_OF_MEMORY; longjmp (*state->err_escape, 1); } return 1; } static int rx_xml_scan_range_char (struct xmlre_parse_state * state, t_unicode * c) { size_t pos; t_unicode scanned; if (rx_xml_eop (state)) return 0; pos = state->pos; scanned = state->scan (state->source, &pos, state->len); if (scanned == '\\') { if (!rx_xml_scan_single_character_escape (state, c)) return 0; if ((state->syntax_options & rx_xml_syntax_no_newlines) && (*c == '\n')) return 0; if ((state->syntax_options & rx_xml_syntax_no_cr) && (*c == '\r')) return 0; if ((state->syntax_options & rx_xml_syntax_no_linesep) && (*c == 0x2028)) return 0; return 1; } if (scanned == rx_xml_syntax_consistent_metacharacters) { if (xml_is_re_meta_char (scanned)) return 0; } else { /* Since we are not using consistent metachars syntax, * there is a special set of (excluded) metachars for * character range syntax. * * The XML spec has complicated and ambiguous rules for sometimes accepting * the metacharacters as valid range characters. Because these rules * are ambiguous, we ignore them. */ switch (scanned) { case '-': if (!( (state->syntax_options & rx_xml_syntax_dot_dot_ranges) && (state->syntax_options & rx_xml_syntax_carrot_set_difference))) return 0; break; case '[': case ']': case '^': return 0; default: break; } } /* Not a metacharacter. Is it a valid character? */ if (!bits_is_member (state->complete_cset, scanned)) return 0; if ((state->syntax_options & rx_xml_syntax_no_newlines) && (scanned == '\n')) return 0; if ((state->syntax_options & rx_xml_syntax_no_cr) && (scanned == '\r')) return 0; if ((state->syntax_options & rx_xml_syntax_no_linesep) && (scanned == 0x2028)) return 0; *c = scanned; state->pos = pos; return 1; } static bits rx_xml_dot_set (struct xmlre_parse_state * state) { bits set; set = bits_alloc (rx_nfa_cache_limits (), uni_bits_tree_rule); if (!set) return 0; if ( bits_union (set, state->complete_cset) || bits_remove (set, '\n') || bits_remove (set, '\r')) { bits_free (set); return 0; } return set; } static bits rx_xml_space_set (void) { bits set; set = bits_alloc (rx_nfa_cache_limits (), uni_bits_tree_rule); if (!set) return 0; if ( bits_adjoin (set, ' ') || bits_adjoin (set, '\t') || bits_adjoin (set, '\n') || bits_adjoin (set, '\r')) { bits_free (set); return 0; } return set; } static bits rx_xml_name_initial_set (void) { bits set; set = rx_xml_letter_set (); if (!set) return 0; if ( bits_adjoin (set, ':') || bits_adjoin (set, '_')) { bits_free (set); return 0; } return set; } static bits rx_xml_name_set (void) { bits set; set = rx_xml_name_initial_set (); if (!set) return 0; if ( bits_adjoin (set, '.') || bits_adjoin (set, '-') || bits_union (set, xml_digit_charset) || bits_union (set, xml_combining_charset) || bits_union (set, xml_extender_charset)) { bits_free (set); return 0; } return set; } static bits rx_xml_letter_set (void) { bits set; set = bits_alloc (rx_nfa_cache_limits (), uni_bits_tree_rule); if (!set) return 0; if ( bits_union (set, xml_base_charset) || bits_union (set, xml_ideographic_charset)) { bits_free (set); return 0; } return set; } static bits rx_xml_unicode_category_set (struct xmlre_parse_state * state, enum uni_general_category c) { bits set; set = bits_alloc (rx_nfa_cache_limits (), uni_bits_tree_rule); if (!set) return 0; if ( bits_union (set, state->complete_cset) || bits_intersection (set, uni_general_category_bitset (c))) { bits_free (set); return 0; } return set; } static bits rx_xml_word_category_set (struct xmlre_parse_state * state) { bits set; set = bits_alloc (rx_nfa_cache_limits (), uni_bits_tree_rule); if (!set) return 0; if ( bits_union (set, state->complete_cset) || bits_difference (set, unidata_bitset_P) || bits_difference (set, unidata_bitset_Z) || bits_difference (set, unidata_bitset_C)) { bits_free (set); return 0; } return set; } tla-1.3.5+dfsg/src/hackerlab/rx-xml/introduction-to-xml-re.doc0000644000175000017500000003256010457621774022744 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:57:17 2001 (introduction-to-xml-re.doc) */ /************************************************************************ *(h0 "An Introduction to XML Regular Expressions" * :appendix) * |XML regular expression| |regular expression (XML)| This chapter informally describes ``XML regular expressions'' as supported by Rx. A "regular expression" describes a textual pattern: a string of characters either matches (fits the pattern) or does not match (does not fit the pattern). Regular expressions have many applications associated with searching, editing, and parsing text. Typically, a program allows users to specify a regular expression, then it searches for text that matches that expression. In XML Schema, regular expressions are used to define ``lexical spaces'' (the set of valid literals for a datatype). |XML| |W3C| |Schema (XML)| |XML Schema| The syntax and semantics of XML regular expressions is defined in the W3C document *XML Schema Part 2: Datatypes* (url:"http://www.w3.org/TR/xmlschema-2"). */ /*(menu) */ /*(h1 "Literal and Special Characters") |literal characters (in XML regexps)| |special characters (in XML regexps)| In the simplest cases, a regular expression is just a literal string that must match exactly. For example, the pattern: regular expression matches the string ``regular expression'' and no others. Some characters have a special meaning when they occur in a regular expression. They aren't matched literally as in the previous example, but instead denote a more general pattern. For example, the character `*' is used to indicate that the preceding element of a regular expression may be repeated 0, 1, or more times. In the pattern: smooo*th the `*' indicates that the preceding `o' can be repeated 0 or more times. So the pattern matches: smooth smoooth smooooth smoooooth ... The same pattern does not match these examples: smoth -- The pattern requires at least two o's smoo*th -- The pattern doesn't match the * Suppose you want to write a pattern that literally matches a special character like `*'; in other words, you don't want to `*' to indicate a permissible repetition, but to match `*' literally. This is accomplished by quoting |quoting (in XML regexps)| the special character with a backslash. The pattern: smoo\*th matches the string: smoo*th and no other strings. These characters are special (their meaning is described in this chapter): . \ | ? * + { } ( ) [ ] The remaining sections of this chapter introduce and explain the various special characters that can occur in regular expressions. */ /************************************************************************ *(h1 "Single Character Escapes") * |single character escapes (in XML regular expressions)| |\t (in XML regular expressions)| |\n (in XML regular expressions)| |\r (in XML regular expressions)| These three expressions each match a single, literal character: \t -- matches tab (U+0008) \n -- matches newline (U+000A) \r -- matches carriage return (U+000D) * */ /*(h1 "Dot") |dot operator (in XML regular expressions)| |. (in XML regular expressions)| `.' ordinarily matches nearly any character. p.ck matches pick pack puck pbck pcck p.ck etc. To be more specific, `.' matches any character which is valid in an XML document except for newline (U+000A) and carriage return (U+000D). */ /************************************************************************ *(h1 "Multi-character Escapes") * |multi-character escapes (in XML regular expressions)| |\s (in XML regular expressions)| |\i (in XML regular expressions)| |\c (in XML regular expressions)| |\d (in XML regular expressions)| |\w (in XML regular expressions)| |\S (in XML regular expressions)| |\I (in XML regular expressions)| |\C (in XML regular expressions)| |\D (in XML regular expressions)| |\W (in XML regular expressions)| |name characters (in XML regular expressions)| |digits (in XML regular expressions)| |spaces (in XML regular expressions)| |word characters (in XML regular expressions)| Literal characters match a specific character. Multi-character escapes match any of a set of characters. The multi-character escapes understood by Rx are: \s -- spaces \i -- first character of a "name" \c -- subsequent character of a "name" \d -- digits \w -- word characters `\s' matches a single space, tab, newline, or carriage return. The set of characters valid as the first or subsequent characters in a name (matched by `\i' and `\c' respectively) are as defined in XML. The set of characters matched by `\d' is as defined in XML and includes most Unicode characters with general category `Nd'. The set of characters matched by `\w' includes all characters which are valid in an XML document except those with a general category in class `P' (punctuation), `Z' (separators), and `C' (other, such as control characters and unassigned code points). Each of the multi-character escapes can be negated by writing it as a capital letter: \S -- non-spaces \I -- not the first character of a "name" \C -- not a subsequent character of a "name" \D -- non-digits \W -- non-word characters */ /************************************************************************ *(h1 "Category Escapes") |category escapes (in XML regular expressions)| |Unicode categories (in XML regular expressions)| |categories (Unicode categories in XML regular expressions)| |Unicode blocks (in XML regular expressions)| |\p{} (in XML regular expressions)| |\P{} (in XML regular expressions)| Category escapes are similar to multi-character escapes: they match any of a set of characters. The default set of category escapes refer to the character categories and block names of Unicode. (For information about categories and blocks, see a recent version of *The Unicode Standard* or visit url:"http://www.unicode.org"). A category escape based on a Unicode category is be written: \p{} for example: \p{L} -- letters \p{Lu} -- upper case letters \p{Nd} -- digits A category escape based on a Unicode block name can is written: \p{is} for example: \p{isBasicLatin} \p{isCherokee} \p{isUnifiedCanadianAboriginalSyllabics} Any category can be negated by use '\P' instead of '\p': \P{L} -- non-Letters \P{isCherokee} -- characters which are not in the Cherokee block In all cases, the set of characters is further restricted to include only characters that are valid in XML documents. */ /*(h1 "Character Sets") |character set operator (in XML regular expressions)| |[...] (in XML regular expressions)| `[' begins a ``character set''. A character set matches any of a set of characters which are explicitly enumerated in the regular expression. There are two basic forms a character set can take. The first form is a plain character set: [] -- every character in is in the set. the second form is a negated character set: |negated character set (in XML regular expressions)| [^] -- every character *not* in is in the set. A `' is a more or less an explicit enumeration of a set of characters. It can be written as a string of individual characters: [ABC] -- matches 'A', 'B', or 'C' |character ranges (in XML regular expressions)| |range of characters (in XML regular expressions)| or as a range of characters: [0-9] -- matches any decimal digit These two forms can be mixed: [A-za-z0-9_$] -- any Basic Latin letter (either case), any Basic Latin digit, `_' or `$' Negation allows you to specify which characters are not in the set: [^0-9] -- match any character which is not a Basic Latin digit Special characters can be included within a character set, in the usual way, by quoting them with `\': [\-abc] -- match '-', 'a', 'b', or 'c' Single character escapes, multi-character escapes, and category escapes can all be used in a `': [\t\n\r] -- match tab, newline, or return [\s\d] -- match any space character or digit [^\p{Nd}\p{Ll}] -- match all but digits and lowercase letters |character set subtraction (in XML regular expressions)| |subtraction (character set subtraction in XML regular expressions)| From the two basic forms of character set, two additional forms of character set can be formed, called ``character set subtractions'': [-] -- every character in except those in in [^-] -- every character not in except those in For example: [\p{L}-[\p{isBasicLatin}\p{isGreek}]] -- match any letter except for letters in the Basic Latin or Greek blocks [^\p{L}-[\p{isBasicLatin}\p{isGreek}]] -- match any non-letter except for non-letters in the Basic Latin or Greek blocks */ /*(h1 "Parenthesized Expressions") |parenthesized subexpression (in XML regular expressions)| |(...) (in XML regular expressions)| A subexpression is a regular expression enclosed in `(' and `)'. A subexpression can be used anywhere a single character or character set can be used. Subexpressions are useful for grouping regular expression constructs. For example, the repeat operator, `*', usually applies to just the preceding character. Recall that: smooo*th matches smooth smoooth ... Using a subexpression, we can apply `*' to a longer string: banan(an)*a matches banana bananana banananana ... */ /*(h1 "Repeated Expressions") |repeated subexpression (in XML regular expressions)| |~* (in XML regular expressions)| As previously explained, `*' is the repeat operator. It applies to the preceding character, character set, or subexpression. It indicates that the preceding element can be matched 0 or more times: bana(na)* matches bana banana bananana banananana ... |+ (in XML regular expressions)| `+' is similar to `*' except that `+' requires the preceding element to be matched at least once. So on the one hand: bana(na)* matches bana but bana(na)+ does not. Both match banana bananana banananana ... */ /*(h1 "Optional Expressions") |optional subexpression (in XML regular expressions)| |? (in XML regular expressions)| `?' indicates that the preceding character, character set, or subexpression is optional. It is permitted to match, or to be skipped: CSNY? matches both CSN and CSNY */ /*(h1 "Counted Iteration") |counted iteration (in XML regular expressions)| |interval expression (in XML regular expressions)| |{...} (in XML regular expressions)| The interval operator, `{m,n}' (where `m' and `n' are decimal integers and `0 <= m <= n') indicates that the preceding character, character set, or subexpression must match at least `m' times and may match as many as `n' times. For example: c([ad]){1,4}r matches car cdr caar cdar ... caaar cdaar ... cadddr cddddr but it doesn't match: cdddddr because that has five d's, and the pattern only permits four, and it doesn't match cr because the pattern requires at least one `a' or `d'. A pattern of the form: R{M,} matches `M' or more iterations of `R'. A pattern of the form: R{M} matches exactly 'M' iterations of 'R'. */ /*(h1 "Alternative Expressions") |alternative subexpressions (in XML regular expressions)| || (in XML regular expressions)| An alternative is written: regular expression-1|regular expression-2|regular expression-3|... It matches anything matched by some `regular expression-n'. For example: Crosby, Stills, (and Nash|Nash, and Young) matches Crosby, Stills, and Nash and also Crosby, Stills, Nash, and Young */ /*(h1 "A Summary of Regular Expression Syntax") |regular expression syntax summary (XML)| In summary, regular expressions can be: `abcd' - a string literal `\*' - an escaped special character `\n' - a single character escape `\s' - a multi-character escape `\p{isCherokee}' - a category escape `.' - the universal character set. `[a-z_?]' - a character set `[^abz_?]' - an negated character set `[\p{L}-[\p{isBasicLatin}\p{isGreek}]]' - character set subtraction `(subexp)' - an expression grouped to form a parenthesized subexpression. The following special characters and sequences can be applied to a character, character set, or subexpression: `*' - repeat the preceding element 0 or more times. `+' - repeat the preceding element 1 or more times. `?' - match the preceding element 0 or 1 time. `{m,n}' - match the preceding element at least `m', and as many as `n' times, where 0 <= m <= n `{m,}' - match the preceding element at least `m' times, where 0 <= m `{m}' - match the preceding element exactly `m' times, where 0 <= m Finally, a list of patterns built from the preceeding operators can be combined using `|': `regular expression-1|regular expression-2|..' - match regular expression-1 or regex-2 or ... A special character, like `.' or `*' can be made into a literal by prefixing it with `\'. A special sequence, like `+' or `?' can be made into a literal character by dropping the `\'. */ tla-1.3.5+dfsg/src/hackerlab/oblists/0000755000175000017500000000000010457621774016134 5ustar userusertla-1.3.5+dfsg/src/hackerlab/oblists/oblist.h0000644000175000017500000001225210457621774017603 0ustar useruser/* oblist.h: * **************************************************************** * Copyright (C) 2004 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBAWIKI__OBLIST_H #define INCLUDE__LIBAWIKI__OBLIST_H #include "hackerlab/obqueues/obqueue.h" typedef struct oblist t_oblist; typedef struct oblist_type t_oblist_type; typedef int (*t_oblist_cmp_fn) (void * a, void * b, void * closure); typedef int (*t_oblist_init_fn) (t_oblist * ot, alloc_limits limits, ssize_t elt_size, t_oblist_type * type, void * closure, void * mem, ssize_t n_elts); typedef void (*t_oblist_uninit_fn) (t_oblist * ot, alloc_limits limits, ssize_t elt_size, t_oblist_type * type, void * closure, void * mem, ssize_t n_elts); struct oblist_type { t_oblist_init_fn init; t_oblist_uninit_fn uninit; }; struct oblist { struct obqueue _left; struct obqueue _right; }; /* automatically generated __STDC__ prototypes */ extern int init_oblist (t_oblist * ol, alloc_limits limits, ssize_t elt_size, t_oblist_type * type, void * closure); extern void uninit_oblist (t_oblist * ol, alloc_limits limits, ssize_t elt_size, t_oblist_type * type, void * closure); extern int oblist_is_empty (t_oblist * ol, alloc_limits limits, ssize_t elt_size, t_oblist_type * type, void * closure); extern ssize_t oblist_size (t_oblist * ol, alloc_limits limits, ssize_t elt_size, t_oblist_type * type, void * closure); extern ssize_t oblist_room (t_oblist * ol, alloc_limits limits, ssize_t elt_size, t_oblist_type * type, void * closure); extern void * oblist_burst (ssize_t * len_returned, t_oblist * ol, alloc_limits limits, ssize_t elt_size, t_oblist_type * type, void * closure, ssize_t n, ssize_t len); extern void * oblist_range (t_oblist * ol, alloc_limits limits, ssize_t elt_size, t_oblist_type * type, void * closure, ssize_t n, ssize_t len); extern int oblist_insert_n (t_oblist * ol, alloc_limits limits, ssize_t elt_size, t_oblist_type * type, void * closure, ssize_t before_pos, ssize_t n, void * mem); extern int oblist_delete_n (t_oblist * ol, alloc_limits limits, ssize_t elt_size, t_oblist_type * type, void * closure, ssize_t pos, ssize_t n); extern int oblist_sort (t_oblist * ol, alloc_limits limits, ssize_t elt_size, t_oblist_type * type, void * lclosure, t_oblist_cmp_fn cmp, void * closure); extern ssize_t oblist_find (ssize_t * would_be_before, t_oblist * ol, alloc_limits limits, ssize_t elt_size, t_oblist_type * type, void * lclosure, void * key, t_oblist_cmp_fn cmp, void * closure); extern ssize_t oblist_sorted_insert (t_oblist * ol, alloc_limits limits, ssize_t elt_size, t_oblist_type * type, void * lclosure, void * key, t_oblist_cmp_fn cmp, void * closure, int copy_from_key, int not_if_present); #endif /* INCLUDE__LIBAWIKI__OBLIST_H */ /* tag: Tom Lord Sun Oct 24 08:12:41 2004 (oblist.h) */ tla-1.3.5+dfsg/src/hackerlab/oblists/ssizet.c0000644000175000017500000000454510457621774017631 0ustar useruser/* ssizet.c: * **************************************************************** * Copyright (C) 2004 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/oblists/ssizet.h" /* typedefs */ /* __STDC__ prototypes for static functions */ static int cmp (void * ap, void * bp, void * ign); /* declarations */ /* code */ int init_list_ssize_t (t_list_ssize_t * list, alloc_limits limits) { if (!list) return -1; return init_oblist (&list->list, limits, sizeof (ssize_t), 0, 0); } void uninit_list_ssize_t (t_list_ssize_t * list, alloc_limits limits) { if (!list) return; uninit_oblist (&list->list, limits, sizeof (ssize_t), 0, 0); } int list_ssize_t_is_empty (t_list_ssize_t * list, alloc_limits limits) { ssize_t l; l = oblist_size (&list->list, limits, sizeof (ssize_t), 0, 0); if (l < 0) return -1; return (l == 0); } ssize_t list_ssize_t_pop (alloc_limits limits, t_list_ssize_t * list) { int is_empty; ssize_t * box; ssize_t answer; is_empty = list_ssize_t_is_empty (list, limits); if (is_empty) return is_empty; box = (ssize_t *)oblist_range (&list->list, limits, sizeof (ssize_t), 0, 0, 0, 1); if (!box) return -1; answer = *box; if (0 > oblist_delete_n (&list->list, limits, sizeof (ssize_t), 0, 0, 0, 1)) return -1; return answer; } ssize_t list_ssize_t_bag_add (alloc_limits limits, t_list_ssize_t * list, ssize_t value) { if (!list) return -1; return oblist_sorted_insert (&list->list, limits, sizeof (ssize_t), 0, 0, &value, cmp, 0, 1, 0); } int list_ssize_t_remove (alloc_limits limits, t_list_ssize_t * list, ssize_t value) { ssize_t where; if (!list) return -1; where = oblist_find (0, &list->list, limits, sizeof (ssize_t), 0, 0, &value, cmp, 0); if (where < 0) return -1; return oblist_delete_n (&list->list, limits, sizeof (ssize_t), 0, 0, where, 1); } static int cmp (void * ap, void * bp, void * ign) { ssize_t a; ssize_t b; a = *(ssize_t *)ap; b = *(ssize_t *)bp; if (a < b) return -1; else if (a > b) return 1; else return 0; } /* tag: Tom Lord Sat Nov 20 16:45:28 2004 (ssizet.c) */ tla-1.3.5+dfsg/src/hackerlab/oblists/oblist.c0000644000175000017500000004025110457621774017576 0ustar useruser/* oblist.c: * **************************************************************** * Copyright (C) 2004 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. * */ #include "hackerlab/sort/qsort.h" #include "hackerlab/mem/mem.h" #include "hackerlab/oblists/oblist.h" struct ol_closure; /* __STDC__ prototypes for static functions */ static int oblist_move_gap (t_oblist * ol, alloc_limits limits, ssize_t elt_size, t_oblist_type * type, void * closure, ssize_t wanted_gap); static void init_ol_closure (struct ol_closure * olc, t_oblist * ol, alloc_limits limits, ssize_t elt_size, t_oblist_type * type, void * closure); static t_obqueue_type * translate_type (struct oblist_type * type); static int forward_init (t_obqueue * oq, alloc_limits limits, ssize_t elt_size, t_obqueue_type * type, void * closure, void * mem, ssize_t n_elts); static void forward_uninit (t_obqueue * oq, alloc_limits limits, ssize_t elt_size, t_obqueue_type * type, void * closure, void * mem, ssize_t n_elts); #define LEFT(OL) (&(OL)->_left) #define RIGHT(OL) (&(OL)->_right) struct obqueue_type init_and_uninit = { forward_init, forward_uninit }; struct obqueue_type init_only = { forward_init, 0 }; struct obqueue_type uninit_only = { 0, forward_uninit }; struct ol_closure { t_oblist * ol; t_oblist_type * type; void * closure; }; int init_oblist (t_oblist * ol, alloc_limits limits, ssize_t elt_size, t_oblist_type * type, void * closure) { if (!ol) return -1; else { struct ol_closure olc; init_ol_closure (&olc, ol, limits, elt_size, type, closure); mem_set0 ((t_uchar *)ol, sizeof (*ol)); if (0 > init_obqueue (LEFT(ol), limits, elt_size, translate_type (type), (void *)&olc)) return -1; if (0 > init_obqueue (RIGHT(ol), limits, elt_size, translate_type (type), (void *)&olc)) return -1; return 0; } } void uninit_oblist (t_oblist * ol, alloc_limits limits, ssize_t elt_size, t_oblist_type * type, void * closure) { if (ol) { struct ol_closure olc; init_ol_closure (&olc, ol, limits, elt_size, type, closure); uninit_obqueue (LEFT(ol), limits, elt_size, translate_type (type), (void *)&olc); uninit_obqueue (RIGHT(ol), limits, elt_size, translate_type (type), (void *)&olc); mem_set0 ((t_uchar *)ol, sizeof (*ol)); } } int oblist_is_empty (t_oblist * ol, alloc_limits limits, ssize_t elt_size, t_oblist_type * type, void * closure) { if (!ol) return 1; return !oblist_size (ol, limits, elt_size, type, closure); } ssize_t oblist_size (t_oblist * ol, alloc_limits limits, ssize_t elt_size, t_oblist_type * type, void * closure) { struct ol_closure olc; if (!ol) return 0; init_ol_closure (&olc, ol, limits, elt_size, type, closure); return ( obqueue_size (LEFT(ol), limits, elt_size, translate_type (type), (void *)&olc) + obqueue_size (RIGHT(ol), limits, elt_size, translate_type (type), (void *)&olc)); } ssize_t oblist_room (t_oblist * ol, alloc_limits limits, ssize_t elt_size, t_oblist_type * type, void * closure) { struct ol_closure olc; if (!ol) return 0; init_ol_closure (&olc, ol, limits, elt_size, type, closure); return ( obqueue__room (LEFT(ol), limits, elt_size, translate_type (type), (void *)&olc) + obqueue__room (RIGHT(ol), limits, elt_size, translate_type (type), (void *)&olc)); } void * oblist_burst (ssize_t * len_returned, t_oblist * ol, alloc_limits limits, ssize_t elt_size, t_oblist_type * type, void * closure, ssize_t n, ssize_t len) { struct ol_closure olc; ssize_t left_size; if (n < 0) return 0; init_ol_closure (&olc, ol, limits, elt_size, type, closure); left_size = obqueue_size (LEFT (ol), limits, elt_size, translate_type (type), (void *)&olc); if (n < left_size) { ssize_t len_avail; if ((n + len) <= left_size) len_avail = len; else len_avail = (left_size - n); return obqueue_burst (len_returned, LEFT(ol), limits, elt_size, translate_type (type), (void *)&olc, n, len_avail); } n = (n - obqueue_size (LEFT (ol), limits, elt_size, translate_type (type), (void *)&olc)); return obqueue_burst (len_returned, RIGHT(ol), limits, elt_size, translate_type (type), (void *)&olc, n, len); } void * oblist_range (t_oblist * ol, alloc_limits limits, ssize_t elt_size, t_oblist_type * type, void * closure, ssize_t n, ssize_t len) { ssize_t gap; struct ol_closure olc; if (n < 0) return 0; init_ol_closure (&olc, ol, limits, elt_size, type, closure); if ((len < 0) || ((n + len) < 0) || ((n + len) > oblist_size (ol, limits, elt_size, type, closure))) return 0; gap = obqueue_size (LEFT(ol), limits, elt_size, translate_type (type), (void *)&olc); if ((n < gap) && ((n + len) <= gap)) { return obqueue_range (LEFT(ol), limits, elt_size, translate_type (type), (void *)&olc, n, len); } if (gap <= n) { return obqueue_range (RIGHT(ol), limits, elt_size, translate_type (type), (void *)&olc, n - gap, len); } if ((gap - n) < ((n + len) - gap)) { if (0 > oblist_move_gap (ol, limits, elt_size, type, closure, n)) return 0; return obqueue_range (RIGHT (ol), limits, elt_size, translate_type (type), (void *)&olc, 0, len); } else { if (0 > oblist_move_gap (ol, limits, elt_size, type, closure, n + len)) return 0; return obqueue_range (LEFT (ol), limits, elt_size, translate_type (type), (void *)&olc, n, len); } } static int oblist_move_gap (t_oblist * ol, alloc_limits limits, ssize_t elt_size, t_oblist_type * type, void * closure, ssize_t wanted_gap) { struct ol_closure olc; ssize_t current_gap; ssize_t size; init_ol_closure (&olc, ol, limits, elt_size, type, closure); current_gap = obqueue_size (LEFT(ol), limits, elt_size, translate_type (type), (void *)&olc); size = oblist_size (ol, limits, elt_size, type, closure); if (current_gap == wanted_gap) return 0; if (wanted_gap < 0) return -1; if (wanted_gap > size) return -1; if (wanted_gap < current_gap) { ssize_t amt_to_move; ssize_t amt_moved; ssize_t source_pos; ssize_t dest_pos; amt_to_move = current_gap - wanted_gap; amt_moved = 0; source_pos = wanted_gap; dest_pos = 0; if (0 > obqueue_push_n (RIGHT(ol), limits, elt_size, translate_type (type), (void *)&olc, amt_to_move)) return -1; while (amt_moved < amt_to_move) { t_uchar * left_burst; ssize_t lb_len; t_uchar * right_burst; ssize_t rb_len; ssize_t useful_len; left_burst = obqueue_burst (&lb_len, LEFT(ol), limits, elt_size, translate_type (type), (void *)&olc, source_pos, (amt_to_move - amt_moved)); right_burst = obqueue_burst (&rb_len, RIGHT(ol), limits, elt_size, translate_type (type), (void *)&olc, dest_pos, (amt_to_move - amt_moved)); if (lb_len < rb_len) useful_len = lb_len; else useful_len = rb_len; mem_move (right_burst, left_burst, useful_len * elt_size); amt_moved += useful_len; source_pos += useful_len; dest_pos += useful_len; } obqueue_pop_last_n (LEFT(ol), limits, elt_size, translate_type (type), (void *)&olc, amt_to_move); return 0; } else /* (wanted_gap > current_gap) */ { ssize_t amt_to_move; ssize_t amt_moved; ssize_t source_pos; ssize_t dest_pos; amt_to_move = wanted_gap - current_gap; amt_moved = 0; source_pos = 0; dest_pos = current_gap; if (0 > obqueue_append_n (LEFT(ol), limits, elt_size, translate_type (type), (void *)&olc, amt_to_move)) return -1; while (amt_moved < amt_to_move) { t_uchar * left_burst; ssize_t lb_len; t_uchar * right_burst; ssize_t rb_len; ssize_t useful_len; left_burst = obqueue_burst (&lb_len, LEFT(ol), limits, elt_size, translate_type (type), (void *)&olc, dest_pos, (amt_to_move - amt_moved)); right_burst = obqueue_burst (&rb_len, RIGHT(ol), limits, elt_size, translate_type (type), (void *)&olc, source_pos, (amt_to_move - amt_moved)); if (lb_len < rb_len) useful_len = lb_len; else useful_len = rb_len; mem_move (left_burst, right_burst, useful_len * elt_size); amt_moved += useful_len; source_pos += useful_len; dest_pos += useful_len; } obqueue_pop_n (RIGHT(ol), limits, elt_size, translate_type (type), (void *)&olc, amt_to_move); return 0; } } int oblist_insert_n (t_oblist * ol, alloc_limits limits, ssize_t elt_size, t_oblist_type * type, void * closure, ssize_t before_pos, ssize_t n, void * mem) { struct ol_closure olc; ssize_t s; s = oblist_size (ol, limits, elt_size, type, closure); if (before_pos < 0) return -1; if (before_pos > s) return -1; init_ol_closure (&olc, ol, limits, elt_size, type, closure); if (before_pos == 0) { if (0 > obqueue_push_n (LEFT(ol), limits, elt_size, translate_type (type), (void *)&olc, n)) return -1; } else if (before_pos == s) { if (0 > obqueue_append_n (RIGHT(ol), limits, elt_size, translate_type (type), (void *)&olc, n)) return -1; } else { if (0 > oblist_move_gap (ol, limits, elt_size, type, closure, before_pos)) return -1; if (0 > obqueue_append_n (LEFT(ol), limits, elt_size, translate_type (type), (void *)&olc, n)) return -1; } if (mem) mem_move (oblist_range (ol, limits, elt_size, type, closure, before_pos, n), mem, n * elt_size); return 0; } int oblist_delete_n (t_oblist * ol, alloc_limits limits, ssize_t elt_size, t_oblist_type * type, void * closure, ssize_t pos, ssize_t n) { struct ol_closure olc; ssize_t s; ssize_t gap; ssize_t pos_distance; ssize_t end_distance; ssize_t new_gap; s = oblist_size (ol, limits, elt_size, type, closure); if (pos < 0) return -1; if (pos > s) return -1; if (n < 0) return -1; if (((pos + n) < 0) || ((pos + n) > s)) n = s - pos; init_ol_closure (&olc, ol, limits, elt_size, type, closure); gap = obqueue_size (LEFT (ol), limits, elt_size, translate_type (type), (void *)&olc); if (gap > pos) pos_distance = gap - n; else pos_distance = n - gap; if (gap > (pos + n)) end_distance = gap - (pos + n); else end_distance = (pos + n) - gap; if (pos_distance < end_distance) new_gap = pos; else new_gap = (pos + n); if (0 > oblist_move_gap (ol, limits, elt_size, type, closure, new_gap)) return -1; if (new_gap == pos) { obqueue_pop_n (RIGHT (ol), limits, elt_size, translate_type (type), (void *)&olc, n); return 0; } else { obqueue_pop_last_n (LEFT (ol), limits, elt_size, translate_type (type), (void *)&olc, n); return 0; } } int oblist_sort (t_oblist * ol, alloc_limits limits, ssize_t elt_size, t_oblist_type * type, void * lclosure, t_oblist_cmp_fn cmp, void * closure) { ssize_t s; void * it; s = oblist_size (ol, limits, elt_size, type, lclosure); it = oblist_range (ol, limits, elt_size, type, lclosure, 0, s); if (!s) return -1; quicksort (it, s, elt_size, cmp, closure); return 0; } ssize_t oblist_find (ssize_t * would_be_before, t_oblist * ol, alloc_limits limits, ssize_t elt_size, t_oblist_type * type, void * lclosure, void * key, t_oblist_cmp_fn cmp, void * closure) { ssize_t lo; ssize_t hi; ssize_t leftmost_found; lo = 0; hi = oblist_size (ol, limits, elt_size, type, lclosure); leftmost_found = -1; while (lo < hi) { ssize_t mid; int c; mid = lo + ((hi - lo) >> 1); c = cmp (key, oblist_burst (0, ol, limits, elt_size, type, lclosure, mid, 1), closure); if (!c) { leftmost_found = mid; hi = mid; } else if (c < 0) { hi = mid; } else { lo = mid + 1; } } if (leftmost_found >= 0) return leftmost_found; else { if (would_be_before) { *would_be_before = lo; } return -1; } } ssize_t oblist_sorted_insert (t_oblist * ol, alloc_limits limits, ssize_t elt_size, t_oblist_type * type, void * lclosure, void * key, t_oblist_cmp_fn cmp, void * closure, int copy_from_key, int not_if_present) { ssize_t found_at; ssize_t would_be_before; ssize_t insert_at; found_at = oblist_find (&would_be_before, ol, limits, elt_size, type, lclosure, key, cmp, closure); if (not_if_present && (found_at >= 0)) { return found_at; } if (found_at >= 0) insert_at = found_at; else insert_at = would_be_before; if (0 > oblist_insert_n (ol, limits, elt_size, type, lclosure, insert_at, 1, 0)) return -1; if (copy_from_key && key) mem_move (oblist_range (ol, limits, elt_size, type, closure, insert_at, 1), key, elt_size); return insert_at; } static void init_ol_closure (struct ol_closure * olc, t_oblist * ol, alloc_limits limits, ssize_t elt_size, t_oblist_type * type, void * closure) { olc->ol = ol; olc->type = type; olc->closure = closure; } static t_obqueue_type * translate_type (struct oblist_type * type) { if (!type || (!type->init && !type->uninit)) return 0; else if (!type->uninit) return &init_only; else if (!type->init) return &uninit_only; else return &init_and_uninit; } static int forward_init (t_obqueue * oq, alloc_limits limits, ssize_t elt_size, t_obqueue_type * type, void * closure, void * mem, ssize_t n_elts) { struct ol_closure * olc; olc = (struct ol_closure *)closure; if (!olc || !olc->type || !olc->type->init) return -1; return olc->type->init (olc->ol, limits, elt_size, olc->type, olc->closure, mem, n_elts); } static void forward_uninit (t_obqueue * oq, alloc_limits limits, ssize_t elt_size, t_obqueue_type * type, void * closure, void * mem, ssize_t n_elts) { struct ol_closure * olc; if (!olc || !olc->type || !olc->type->uninit) return; olc->type->uninit (olc->ol, limits, elt_size, olc->type, olc->closure, mem, n_elts); } /* tag: Tom Lord Sun Oct 24 08:12:32 2004 (oblist.c) */ tla-1.3.5+dfsg/src/hackerlab/oblists/ssizet.h0000644000175000017500000000245310457621774017632 0ustar useruser/* ssizet.h: * **************************************************************** * Copyright (C) 2004 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__OBLISTS__SSIZET_H #define INCLUDE__OBLISTS__SSIZET_H #include "hackerlab/oblists/oblist.h" typedef struct list_ssize_t t_list_ssize_t; struct list_ssize_t { t_oblist list; }; /* automatically generated __STDC__ prototypes */ extern int init_list_ssize_t (t_list_ssize_t * list, alloc_limits limits); extern void uninit_list_ssize_t (t_list_ssize_t * list, alloc_limits limits); extern int list_ssize_t_is_empty (t_list_ssize_t * list, alloc_limits limits); extern ssize_t list_ssize_t_pop (alloc_limits limits, t_list_ssize_t * list); extern ssize_t list_ssize_t_bag_add (alloc_limits limits, t_list_ssize_t * list, ssize_t value); extern int list_ssize_t_remove (alloc_limits limits, t_list_ssize_t * list, ssize_t value); #endif /* INCLUDE__OBLISTS__SSIZET_H */ /* tag: Tom Lord Sat Nov 20 16:45:25 2004 (ssizet.h) */ tla-1.3.5+dfsg/src/hackerlab/oblists/Makefile.in0000644000175000017500000000027610457621774020206 0ustar useruserinclude $(makefiles)/library-objects.mk ifeq ($(cgs__install_hackerlab),1) include $(makefiles)/install-includes.mk endif # tag: Tom Lord Fri Nov 5 06:37:24 2004 (oblists/Makefile.in) # tla-1.3.5+dfsg/src/hackerlab/oblists/PLUGIN/0000755000175000017500000000000010457621774017132 5ustar userusertla-1.3.5+dfsg/src/hackerlab/oblists/PLUGIN/REQ0000644000175000017500000000004710457621774017505 0ustar useruserobqueues oblists oblists libhackerlab tla-1.3.5+dfsg/src/hackerlab/Makefile.in0000644000175000017500000000137510457621774016530 0ustar useruser# tag: Tom Lord Tue Dec 4 14:52:07 2001 (hackerlab/Makefile.in) # boot_dirs := \ arrays \ bitsets \ bugs \ char \ cmd \ fmt \ fs \ hash \ machine \ mem \ os \ sort \ splay \ rx \ rx-posix \ uni \ vu \ vu-network # piw \ # piw-malloc \ # piw-glob boot2_dirs := \ unicode \ unidata \ unidata-scaffolding \ $(boot_dirs) hackerlab_dirs := \ buffers \ dynid \ edstrings \ graphs \ handles \ identifiers \ oblists \ obmarkers \ obqueues \ obtables \ properties \ qlinks \ rx-xml \ strings \ xml \ xml-scaffolding \ $(boot2_dirs) export boot_dirs boot2_dirs hackerlab_dirs include $(makefiles)/dirs.mk tla-1.3.5+dfsg/src/hackerlab/unicode/0000755000175000017500000000000010457621774016103 5ustar userusertla-1.3.5+dfsg/src/hackerlab/unicode/introduction-to-unicode.doc0000644000175000017500000002014210457621774023356 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:57:16 2001 (introduction-to-unicode.doc) */ /************************************************************************ *(h0 "An Absurdly Brief Introduction to Unicode" * :appendix) This chapter is a very succinct introduction to the Unicode character set. It may be useful when trying to read this manual, but it is not intended to be a thorough introduction. One place to learn more about Unicode is the web site of the Unicode Consortium: url:"http://www.unicode.org". The current definition of Unicode is published as *The Unicode Standard Version 4.0* by the Unicode Consortium. */ /************************************************************************ *(h1 "Characters") * Unicode defines a set of "abstract characters". Roughly speaking, abstract characters represent indivisable marks that people use in writing systems to convey information. In western alphabets, for example, ^latin small letter A^ is the name of an abstract character. That name doesn't refer to *a* in a particular font, but rather to the idea of ^small A^ in general. Unicode includes a number of abstract characters which are formatting marks: they give an indication of how adjacent characters should be rendered but do not themselves correspond to what one might ordinarily think of as a ``written character''. Unicode includes a number of abstract characters which are control characters: they have traditional (and sometimes standard) meaning in computing, but do not correspond to any feature of human writing. Unicode includes a number of abstract characters which are usually combined with other characters (such as diacritical marks and vowel marks). The goal of Unicode is to encode the complete set of abstract characters used in human writing, sufficient to describe all written text. The situation is complicated by three factors: the necessarily large size of a global character set; the occasionally arbitrary decisions that must be made about what counts as an abstract character and what does not; and the generally acknowledged desirability of supporting bijective mappings between a variety of older character sets and subsets of Unicode. * * */ /************************************************************************ *(h1 "Code Points") * A code point is an integer value which is assigned to an abstract character. Each character receives a unique code point. By convention, code points are always written in hexadecimal notation, prefixed by the string "U+". Usually, no less than four hexadecimal digits are written. Unicode code points are in the closed range `U+0000 .. U+10FFFF'. Thus, it requires at least 21 bits to hold a Unicode code point. Sometimes people say that ``Unicode is a 16-bit character set.'': that is an error. |assigned (code point, Unicode)| There are (now and for the forseeable future) many more code points than abstract characters. Revisions to Unicode add new characters and, sometimes, recommend against using some old characters, but once a code point has been ``assigned'', that assignment never changes. * * */ /************************************************************************ *(h1 "Some Special Code Points") * Unicode code points `U+0000 .. U+007F' are essentially the same as ASCII code points. Unicode code points `U+0000 .. U+00FF' are essentially the same as ISO 8859-1 code points (``Latin 1''). Two code points represent non-characters. These are `U+FFFE' and `U+FFFF'. Programs are free to give these values special meaning internally. The code point `U+FEFF' is assigned to the formatting character ``zero-width no-break space''. This character has a special significance when it occurs in certain serialized representations of Unicode text. This is described in the next section. Code points in the range `U+D800 .. U+DFFF' are called "surrogates". They are not assigned to abstract characters. Instead, they are used in pairs as one way to represent a code point in the range `U+10000 .. U+10FFFF'. This is also described in the next section. * * */ /************************************************************************ *(h1 "Encoding Forms") * If Unicode code points occupy 21-bits of storage, how is a string of Unicode text represented? There are three recommended alternatives called `UTF-8', `UTF-16' and `UTF-32'. Collectively, systems of representing strings are known as "encoding forms". The definition of an encoding form consists of a "code unit" (an unsigned integer with a fixed number of bits, usually fewer than 21) and a rule describing a bijective mapping between code points and sequences of code units. UTF-8 uses 8-bit code units. UTF-16 uses 16-bit code units. Unsurprisingly, UTF-32 uses 32-bit code units. In UTF-8, code points in the range `U+0000 .. U+007F' are stored in a single code unit (one byte). Other code points are represented by a sequence of two or more code units, each byte in the range `80 .. FF'. The details of these multi-byte sequences are available in countless Unicode reference materials. In UTF-16, code points in the range `U+0000 .. U+FFFF' are stored in a single 16-bit code unit. Other code points are represented by a pair of surrogates, each stored in one code unit. Again, the details of multi-code-unit sequences are readily available elsewhere. In UTF-32, code units are 32 bits and each code point is stored in a single code unit. This is the simplest encoding, and the only fixed-width one. This fact greatly simplifies implementations, since UTF-32 processing does not require testing for the presence of surrogates. However, 99% of current code units fit in 16 bits (i.e., belong into what is called the "Basic Multilingual Plane" or BMP), and using the UTF-32 encoding is obviously very inefficient when it comes to memory usage. As a result, UTF-16 is often preferred over UTF-32. Not every sequence of 8-bit values is a valid UTF-8 string. Not every sequence of 16-bit values is a valid UTF-16 string. Strings that are not valid are called ``ill-formed''. |ill-formed (code sequence, Unicode)| When stored in the memory of a running program, UTF-16 and UTF-32 code units are almost certainly stored in the native byte order of the machine. In files and when transmitted, two byte orders are possible. When byte order distinctions are important, the names UTF-16be, UTF-32be (big-endian) and UTF-16le, UTF-32le (little-endian) are used. In Unicode parlance, we say that the three encoding forms UTF-8, UTF-16 and UTF-32 result in seven "encoding schemes", namely, UTF-8, UTF-16, UTF-16be, UTF-16le, UTF-32, UTF-32be and UTF-32le. Encoding forms refer to integer data in memory or APIs, while character encoding schemes refer to byte-serialized data. When a stream of text has a UTF-16 or UTF-32 encoding form, and when its byte order is not known in advance, it is marked with a "byte order mark". A byte order mark is the formatting character ``zero-width no-break space'' (`U+FEFF') occuring as the first character in the stream. By examining the first two bytes of such a stream, and assuming that those bytes are a byte order mark, programs can determine the byte-order of code units within the stream. When a byte order mark is present, it is not considered to be part of the text which it marks. * */ /************************************************************************ *(h1 "Character Properties") * In addition to naming a set of abstract characters, and assigning those characters to code points, the definition of Unicode assigns each character a collection of "character properties". The possible properties a character may have and their meanings are too numerous to list here. Three examples are: \general category/ -- such as ``lowercase letter'', ``uppercase letter'', ``decimal digit'', etc. \decimal digit value/ -- if the character is used as a decimal digit, this property is its numeric value. \case mappings/ -- the default lowercase character corresponding to an uppercase character, and so forth. The Unicode consortium publishes definitions of various character properties and distributes text files listing those properties for each code point. For more information, visit url:"http://www.unicode.org". */ tla-1.3.5+dfsg/src/hackerlab/unicode/uni-string-inlines.h0000644000175000017500000000263310457621774022016 0ustar useruser/* uni-string-inlines.h * **************************************************************** * Copyright (C) 2004 by Jose Antonio Ortega Ruiz * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__UNICODE__UNI_STRING_INLINES_H #define INCLUDE__UNICODE__UNI_STRING_INLINES_H #undef UNI_INLINE_QUALIFIERS #define UNI_INLINE_QUALIFIERS #ifndef __GNUC__ #undef __attribute__ #define __attribute__(X) #endif extern UNI_INLINE_QUALIFIERS uni_string __attribute__((unused)) uni_string_raw (t_uchar * data); extern UNI_INLINE_QUALIFIERS uni_string __attribute__((unused)) uni_string_iso8859_1 (t_uchar * iso8859_1_data); extern UNI_INLINE_QUALIFIERS uni_string __attribute__((unused)) uni_string_utf8 (t_uchar * utf8_data); extern UNI_INLINE_QUALIFIERS uni_string __attribute__((unused)) uni_string_utf16 (t_uint16 * uint16_data); extern UNI_INLINE_QUALIFIERS uni_string __attribute__((unused)) uni_string_utf32 (t_uint32 * uint32_data); extern UNI_INLINE_QUALIFIERS uni_string __attribute__((unused)) uni_string_bogus32 (t_uint32 * bogus32_data); extern UNI_INLINE_QUALIFIERS uni_string __attribute__((unused)) uni_string_encoding (enum uni_encoding_scheme enc, t_uchar * data); #endif /* INCLUDE__UNICODE__UNI_STRING_INLINES_H */ /* tag: Jose Antonio Ortega Ruiz Sat Feb 21 2004 01:22:48 (uni-string-inlines.h) */ tla-1.3.5+dfsg/src/hackerlab/unicode/unicode.doc0000644000175000017500000000125510457621774020223 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:57:16 2001 (unicode.doc) */ /************************************************************************ *(h0 "Unicode" * :include ("flux/unicode/unicode.h")) * This chapter describes the foundation of support for the Unicode character set in the Hackerlab C library. This chapter is not a tutorial introduction to Unicode. We presume that readers are already somewhat familiar with Unicode. A very brief introduction can be found in xref:"An Absurdly Brief Introduction to Unicode". */ /*(menu) */ /*(include-documentation "coding.doc") */ /*(include-documentation "unicode.c") */ /*(include-documentation "../unidata/db-inlines.c") */ tla-1.3.5+dfsg/src/hackerlab/unicode/=later/0000755000175000017500000000000010457621774017307 5ustar userusertla-1.3.5+dfsg/src/hackerlab/unicode/=later/uni-str-inlines.h0000644000175000017500000000253010457621774022520 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:41:41 2001 (uni-str-inlines.h) */ /* uni-str-inlines.h - * **************************************************************** * Copyright (C) 2000 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__UNICODE__UNI_STR_INLINES_H #define INCLUDE__UNICODE__UNI_STR_INLINES_H #undef UNI_INLINE_QUALIFIERS #define UNI_INLINE_QUALIFIERS /* automatically generated __STDC__ prototypes */ extern UNI_INLINE_QUALIFIERS uni_string __attribute__((unused)) uni_str_offset (enum uni_encoding_scheme encoding, uni_string string, ssize_t x); extern UNI_INLINE_QUALIFIERS t_unicode __attribute__((unused)) uni_str_iscan (enum uni_encoding_scheme encoding, uni_string str, size_t * pos, size_t len); extern UNI_INLINE_QUALIFIERS t_unicode __attribute__((unused)) uni_str_scan (enum uni_encoding_scheme encoding, uni_string * str); extern UNI_INLINE_QUALIFIERS int __attribute__((unused)) uni_str_iput (enum uni_encoding_scheme encoding, uni_string str, size_t * pos, size_t len, t_unicode c); extern UNI_INLINE_QUALIFIERS int __attribute__((unused)) uni_str_put (enum uni_encoding_scheme encoding, uni_string * str, t_unicode c); #endif /* INCLUDE__UNICODE__UNI_STR_INLINES_H */ tla-1.3.5+dfsg/src/hackerlab/unicode/=later/unichar-str.h0000644000175000017500000000460610457621774021725 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:41:42 2001 (unichar-str.h) */ /* unichar-str.h - * **************************************************************** * Copyright (C) 2000 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__UNICODE__UNICHAR_STR_H #define INCLUDE__UNICODE__UNICHAR_STR_H #include "hackerlab/machine/types.h" #include "hackerlab/mem/alloc-limits.h" /* automatically generated __STDC__ prototypes */ extern size_t unichar_str_length (const t_unichar * x); extern size_t unichar_str_length_n (const t_unichar * x, size_t n); extern unsigned long unichar_str_hash_n (const t_unichar * chr, size_t len); extern t_unichar * unichar_str_chr_index (const t_unichar * s, int c); extern t_unichar * unichar_str_chr_rindex (const t_unichar * s, int c); extern t_unichar * unichar_str_chr_index_n (const t_unichar * s, size_t n, int c); extern t_unichar * unichar_str_chr_rindex_n (const t_unichar * s, size_t n, int c); extern int unichar_str_cmp (const t_unichar * a, const t_unichar * b); extern int unichar_str_cmp_n (const t_unichar * a, size_t a_l, const t_unichar * b, size_t b_l); extern int unichar_str_cmp_prefix (const t_unichar * prefix, const t_unichar * s); extern int unichar_str_casecmp (const t_unichar * a, const t_unichar * b); extern int unichar_str_casecmp_n (const t_unichar * a, size_t a_l, const t_unichar * b, size_t b_l); extern int unichar_str_casecmp_prefix (const t_unichar * prefix, const t_unichar * s); extern t_unichar * unichar_str_cpy (t_unichar * to, const t_unichar * from); extern t_unichar * unichar_str_cpy_n (t_unichar * to, const t_unichar * from, size_t n); extern t_unichar * unichar_str_cat (t_unichar * to, const t_unichar * from); extern t_unichar * unichar_str_cat_n (t_unichar * to, const t_unichar * from, size_t n); extern t_unichar * unichar_str_save (alloc_limits limits, const t_unichar * str); extern t_unichar * unichar_str_save_n (alloc_limits limits, const t_unichar * str, size_t len); extern t_unichar * unichar_str_alloc_cat (alloc_limits limits, const t_unichar * str1, const t_unichar * str2); extern t_unichar * unichar_str_alloc_cat_n (alloc_limits limits, const t_unichar * str1, const t_unichar * str2, size_t n);; #endif /* INCLUDE__UNICODE__UNICHAR_STR_H */ tla-1.3.5+dfsg/src/hackerlab/unicode/=later/uni-str.c0000644000175000017500000010201110457621774021047 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:41:42 2001 (uni-str.c) */ /* uni-str.c - * **************************************************************** * Copyright (C) 2000 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/bugs/panic.h" #include "hackerlab/char/str.h" #include "hackerlab/hash/hash-utils.h" #include "hackerlab/uni/invariant.h" #include "hackerlab/unicode/unidata.h" #include "hackerlab/unicode/unichar-str.h" #include "hackerlab/unicode/uni-str.h" /************************************************************************ *(h1 "Unicode String Processing") * * * */ /*(c uni_string :category type) * typedef struct uni_undefined_struct * uni_string; * * The opaque pointer type `uni_string' is used to represent a * string of Unicode characters in any of the encodings: * * uni_iso8859_1 * uni_utf8 * uni_utf16 * * By using this type to represent all Unicode strings, programs can * be written without regard to what encoding scheme is being used for * internal processing. (See xref:"Naming Unicode Coding Forms".) * * Pointers of type `uni_string' are created by a simple cast: * * t_uchar * an_iso8859_1_string; * t_uchar * a_utf8_string; * t_unichar * a_utf16_string; * uni_string a_unicode_string; * * a_unicode_string = (uni_string)a_iso8859_1_string; * * or * * a_unicode_string = (uni_string)a_utf8_string; * * or * * a_unicode_string = (uni_string)a_utf16_string; * * \Note:/ A UTF-16 Unicode string must be properly aligned for * the type `t_unichar' (an unsigned 16-bit integer). * * Functions that operate on Unicode strings generally accept two * arguments for each string: an encoding type, and a `uni_string' * value. By convention, the order of those arguments is always: * * encoding, string * * for example: * * uni_str_length (encoding, string) * * When you write new functions that process Unicode strings, * you should ordinarily follow that same convention. * * In almost all cases, when a function accepts or returns the * length of a Unicode string, that length is measured in code * units (not code points). For example, a UTF-16 string containing * only the code point `U+000A' has length 1; a UTF-16 string * containing only the code point `U+10000A' has length 2 (because * it is made up of two code units, a high and a low surrogate). */ /*(menu) */ /************************************************************************ *(h2 "Unicode String Length") * * * */ /*(c uni_str_length) * size_t uni_str_length (enum uni_encoding_scheme encoding, * uni_string s); * * Return the length of a 0-terminated Unicode string, measured in * code units. * * If `encoding' is not one of `uni_iso8859_1', `uni_utf8', or * `uni_utf16', this function exits the process by calling `panic'. */ size_t uni_str_length (enum uni_encoding_scheme encoding, uni_string s) { switch (encoding) { default: panic ("illegal encoding in uni_str_length"); return 0; case uni_iso8859_1: case uni_utf8: return str_length ((t_uchar *)s); case uni_utf16: return unichar_str_length ((t_unichar *)s); } } /*(c uni_str_length_for_encoding) * size_t * uni_str_length_for_encoding (enum uni_encoding_scheme out_enc, * enum uni_encoding_scheme encoding, * uni_string str); * * Return the length of a 0-terminated Unicode string, measured * in code units of a specified encoding. * * `out_enc' is the encoding to use when reporting the length * of the string. * * `encoding' is the encoding of the string as it is stored in memory. * * For example, to find out the UTF-8 length of a UTF-16 string: * * t_unichar a_utf16_string; * size_t utf8_length; * * utf8_length * = uni_str_length_for_encoding (uni_utf8, * uni_utf16, * (uni_string)a_utf16_string); */ size_t uni_str_length_for_encoding (enum uni_encoding_scheme out_enc, enum uni_encoding_scheme encoding, uni_string str) { if (out_enc == encoding) return uni_str_length (encoding, str); else { size_t l; l = 0; while (1) { t_unicode c; c = uni_str_scan (encoding, &str); if (!c) return l; l += uni_length_in_encoding (out_enc, c); } } } /*(c uni_str_length_for_encoding_n) * size_t uni_str_length_for_encoding_n (enum uni_encoding_scheme out_enc, * enum uni_encoding_scheme encoding, * uni_string str, * size_t len); * * Return the length of a Unicode string, measured in code units of a * specified encoding. * * `out_enc' is the encoding to use when reporting the length * of the string. * * `encoding' is the encoding of the string as it is stored in memory. * * `len' is the length of `str' in `encoding', measured in code units. * * This function does not stop at a `U+0000' but instead, counts * such characters normally. This may not be the Right behavior and * may change in future releases: programs should not rely on this * behavior. * */ size_t uni_str_length_for_encoding_n (enum uni_encoding_scheme out_enc, enum uni_encoding_scheme encoding, uni_string str, size_t len) { if (out_enc == encoding) return len; else { size_t pos; size_t l; l = 0; pos = 0; while (pos < len) { t_unicode c; c = uni_str_iscan (encoding, str, &pos, len); l += uni_length_in_encoding (out_enc, c); } return l; } } /************************************************************************ *(h2 "Unicode String Copying") * * * */ /*(c uni_str_cpy) * uni_string uni_str_cpy (enum uni_encoding_scheme encoding, * uni_string to, * uni_string from); * * Copy a 0-terminated Unicode string, preserving its encoding. * * `encoding' is the encoding scheme of both the source string * and its copy. * * `to' is the destination for the copied string. * * `from' is the string to copy. */ uni_string uni_str_cpy (enum uni_encoding_scheme encoding, uni_string to, uni_string from) { switch (encoding) { default: panic ("illegal encoding in uni_str_cpy"); return 0; case uni_iso8859_1: case uni_utf8: return (uni_string)str_cpy ((t_uchar *)to, (t_uchar *)from); case uni_utf16: return (uni_string)unichar_str_cpy ((t_unichar *)to, (t_unichar *)from); } } /*(c uni_str_cpy_n) * uni_string uni_str_cpy_n (enum uni_encoding_scheme encoding, * uni_string to, * uni_string from, * size_t n); * * Copy a Unicode string, preserving its encoding. * * `encoding' is the encoding scheme of both the source string * and its copy. * * `to' is the destination for the copied string. * * `from' is the string to copy. * * `n' is the length of the string to copy, measured in code units. * * If a 0 character is encountered, copying stops. * * In all cases, a 0 character is added to the copied string. * * \Warning:/ This function is different from `strncpy'. `strncpy' * always stores exactly `n' characters in `to', padding the result * with 0 if a 0 character is encountered in `from' before `n' * characters are written. This function stores up to `n+1' characters: * up to `n' non-0 characters from `from', plus a final 0. Also, * this function only ever adds a single 0 to `to' -- it does not * pad `to' with 0 characters. * */ uni_string uni_str_cpy_n (enum uni_encoding_scheme encoding, uni_string to, uni_string from, size_t n) { switch (encoding) { default: panic ("illegal encoding in uni_str_cpy_n"); return 0; case uni_iso8859_1: case uni_utf8: return (uni_string)str_cpy_n ((t_uchar *)to, (t_uchar *)from, n); case uni_utf16: return (uni_string)unichar_str_cpy_n ((t_unichar *)to, (t_unichar *)from, n); } } /*(c uni_str_cpy_xfrm) * uni_string uni_str_cpy_xfrm (enum uni_encoding_scheme to_enc, * uni_string to, * enum uni_encoding_scheme from_enc, * uni_string from); * * Copy a 0-terminated Unicode string, possibly changing encoding * schemes. * * `to_enc' is the encoding scheme for the copy. * * `to' is the destination of the copied string. * * `from_enc' is the encoding scheme for the source string. * * `from' is the string to copy. */ uni_string uni_str_cpy_xfrm (enum uni_encoding_scheme to_enc, uni_string to, enum uni_encoding_scheme from_enc, uni_string from) { if (to_enc == from_enc) return uni_str_cpy (to_enc, to, from); else { uni_string saved_to; saved_to = to; while (1) { t_unicode c; c = uni_str_scan (from_enc, &from); uni_str_put (to_enc, &to, c); if (!c) return saved_to; } } } /*(c uni_str_cpy_xfrm_n) * uni_string uni_str_cpy_xfrm_n (enum uni_encoding_scheme to_enc, * uni_string to, * enum uni_encoding_scheme from_enc, * uni_string from, * size_t n); * * Copy a Unicode string, possibly changing encoding schemes. * * `to_enc' is the encoding scheme for the copy. * * `to' is the destination of the copied string. * * `from_enc' is the encoding scheme for the source string. * * `from' is the string to copy. * * `n' is the length of the string to copy, measured in code units. * * If a 0 character is encountered, copying stops. * * In all cases, a 0 character is added to the copied string. * * \Warning:/ This function is different from `strncpy'. `strncpy' * always stores exactly `n' characters in `to', padding the result * with 0 if a 0 character is encountered in `from' before `n' * characters are written. This function stores up to `n+1' characters: * up to `n' non-0 characters from `from', plus a final 0. * */ uni_string uni_str_cpy_xfrm_n (enum uni_encoding_scheme to_enc, uni_string to, enum uni_encoding_scheme from_enc, uni_string from, size_t n) { if (to_enc == from_enc) return uni_str_cpy_n (to_enc, to, from, n); else { uni_string saved_to; size_t from_pos; saved_to = to; from_pos = 0; while (from_pos < n) { t_unicode c; c = uni_str_iscan (from_enc, from, &from_pos, n); uni_str_put (to_enc, &to, c); } uni_str_put (to_enc, &to, 0); return to; } } /************************************************************************ *(h2 "String Concatenation") * * * */ /*(c uni_str_cat) * uni_string uni_str_cat (enum uni_encoding_scheme encoding, * uni_string to, * uni_string from); * * Concatenate two 0-terminated Unicode strings which use the * same encoding scheme. * * Characters are append to `to', beginning from the position * of the terminating `U+0000' of `to'. * * Characters are copied from `from'. * * A final `U+0000' is included in the concatenated string. * */ uni_string uni_str_cat (enum uni_encoding_scheme encoding, uni_string to, uni_string from) { switch (encoding) { default: panic ("illegal encoding in uni_str_cat"); return 0; case uni_iso8859_1: case uni_utf8: return (uni_string)str_cat ((t_uchar *)to, (t_uchar *)from); case uni_utf16: return (uni_string)unichar_str_cat ((t_unichar *)to, (t_unichar *)from); } } /*(c uni_str_cat_n) * uni_string uni_str_cat_n (enum uni_encoding_scheme encoding, * uni_string to, * uni_string from, * size_t n); * * Append to a 0-terminated Unicode string from a string of * the same encoding. * * Characters are append to `to', beginning from the position * of the terminating `U+0000' of `to'. * * Up to `n' characters are copied from `from'. If a 0 character * is encountered before `n' characters have been copied, copying * stops. * * A final `U+0000' is included in the concatenated string. * */ uni_string uni_str_cat_n (enum uni_encoding_scheme encoding, uni_string to, uni_string from, size_t n) { switch (encoding) { default: panic ("illegal encoding in uni_str_cat_n"); return 0; case uni_iso8859_1: case uni_utf8: return (uni_string)str_cat_n ((t_uchar *)to, (t_uchar *)from, n); case uni_utf16: return (uni_string)unichar_str_cat_n ((t_unichar *)to, (t_unichar *)from, n); } } /*(c uni_str_cat_xfrm) * uni_string uni_str_cat_xfrm (enum uni_encoding_scheme to_enc, * uni_string to, * enum uni_encoding_scheme from_enc, * uni_string from); * * Concatenate two 0-terminated Unicode strings which might use * different encoding schemes. * * `to_enc' is the encoding scheme for `to' (and for the concatenated * string) * * Characters are append to `to', beginning from the position * of the terminating `U+0000' of `to'. * * `from_enc' is the encoding scheme for `from'. * * Characters are copied from `from'. * * A final `U+0000' is included in the concatenated string. * * */ uni_string uni_str_cat_xfrm (enum uni_encoding_scheme to_enc, uni_string to, enum uni_encoding_scheme from_enc, uni_string from) { if (to_enc == from_enc) return uni_str_cat (to_enc, to, from); else { uni_string dest; dest = uni_str_chr_index (to_enc, to, 0); return uni_str_cpy_xfrm (to_enc, dest, from_enc, from); } } /*(c uni_str_cat_xfrm_n) * uni_string uni_str_cat_xfrm_n (enum uni_encoding_scheme to_enc, * uni_string to, * enum uni_encoding_scheme from_enc, * uni_string from, * size_t n); * * Append to a 0-terminated Unicode string from a string which * might use a different encoding. * * `to_enc' is the encoding scheme for `to' (and for the concatenated * string). * * Characters are append to `to', beginning from the position * of the terminating `U+0000' of `to'. * * `from_enc' is the encoding scheme for `from'. * * Up to `n' characters are copied from `from'. If a 0 character * is encountered before `n' characters have been copied, copying * stops. * * A final `U+0000' is included in the concatenated string. * */ uni_string uni_str_cat_xfrm_n (enum uni_encoding_scheme to_enc, uni_string to, enum uni_encoding_scheme from_enc, uni_string from, size_t n) { if (to_enc == from_enc) return uni_str_cat_n (to_enc, to, from, n); else { uni_string dest; dest = uni_str_chr_index (to_enc, to, 0); return uni_str_cpy_xfrm_n (to_enc, dest, from_enc, from, n); } } /************************************************************************ *(h1 "Unicode String Hashing") * * * */ /*(c uni_str_hash_n) * unsigned long uni_str_hash_n (enum uni_encoding_scheme encoding, * uni_string s, * size_t len); * * Compute a hash value for a Unicode string of length `len' (measured * in code units). * * This function does not stop at a `U+0000' but instead, always * processes `len' characters. * * This function will return different hash values for the same string * in two different encodings. See also * xref:"uni_str_hash_codepoints_n". */ unsigned long uni_str_hash_n (enum uni_encoding_scheme encoding, uni_string s, size_t len) { switch (encoding) { default: panic ("illegal encoding in uni_str_hash_n"); return 0; case uni_iso8859_1: case uni_utf8: return str_hash_n ((t_uchar *)s, len); case uni_utf16: return unichar_str_hash_n ((t_unichar *)s, len); } } /*(c uni_str_hash_codepoints_n) * unsigned long * uni_str_hash_codepoints_n (enum uni_encoding_scheme encoding, * uni_string s, * size_t len); * * Compute a hash value for a Unicode string of length `len' (measured * in code units). * * This function does not stop at a `U+0000' but instead, always * processes `len' characters. * * This function will always return the same hash values for a given * string of code points, regardless of what encoding scheme is used. * See also xref:"uni_str_hash_n". * */ unsigned long uni_str_hash_codepoints_n (enum uni_encoding_scheme encoding, uni_string s, size_t len) { size_t pos; unsigned long h; pos = 0; h = 0xbeda221e; while (pos < len) { t_unicode c; c = uni_str_iscan (encoding, s, &pos, len); uni_invariant (!uni_is_noncharacter (c)); h ^= hash_ul ((unsigned long)c); } return h; } /************************************************************************ *(h2 "Finding a Code Point in a Unicode String") * * * */ /*(c uni_str_chr_index) * uni_string * uni_str_chr_index (enum uni_encoding_scheme encoding, * uni_string s, * t_unicode c); * * Return the position of the first occurence of code point `c' in a * 0-terminated Unicode string. If `c' is not found, return 0. * * \Note:/ This function looks for code points, not code units. * It can not be used, for example, to find the position of * an unpaired surrogate in a UTF-16 string. */ uni_string uni_str_chr_index (enum uni_encoding_scheme encoding, uni_string s, t_unicode c) { switch (encoding) { default: panic ("illegal encoding in uni_str_chr_index"); return 0; case uni_iso8859_1: case uni_utf8: return (uni_string)str_chr_index ((t_uchar *)s, c); case uni_utf16: return (uni_string)unichar_str_chr_index ((t_unichar *)s, c); } } /*(c uni_str_chr_rindex) * uni_string uni_str_chr_rindex (enum uni_encoding_scheme encoding, * uni_string s, * t_unicode c); * * Return the position of the last occurence of code point `c' in a * 0-terminated Unicode string. If `c' is not found, return 0. * * \Note:/ This function looks for code points, not code units. * It can not be used, for example, to find the position of * an unpaired surrogate in a UTF-16 string. * */ uni_string uni_str_chr_rindex (enum uni_encoding_scheme encoding, uni_string s, t_unicode c) { switch (encoding) { default: panic ("illegal encoding in uni_str_chr_rindex"); return 0; case uni_iso8859_1: case uni_utf8: return (uni_string)str_chr_rindex ((t_uchar *)s, c); case uni_utf16: return (uni_string)unichar_str_chr_rindex ((t_unichar *)s, c); } } /*(c uni_str_chr_index_n) * uni_string uni_str_chr_index_n (enum uni_encoding_scheme encoding, * uni_string s, * size_t n, * t_unicode c); * * Return the position of the first occurence of code point `c' in a * Unicode string. If `c' is not found, return 0. * * No more than `n' code units of `s' are searched. * * \Note:/ If `U+0000' is encountered before `n' code units are * processed, searching stops. This may not be the Right behavior and * may change in future releases: programs should not rely on this * behavior. * * \Note:/ This function looks for code points, not code units. * It can not be used, for example, to find the position of * an unpaired surrogate in a UTF-16 string. * * */ uni_string uni_str_chr_index_n (enum uni_encoding_scheme encoding, uni_string s, size_t n, t_unicode c) { switch (encoding) { default: panic ("illegal encoding in uni_str_chr_index_n"); return 0; case uni_iso8859_1: case uni_utf8: return (uni_string)str_chr_index_n ((t_uchar *)s, n, c); case uni_utf16: return (uni_string)unichar_str_chr_index_n ((t_unichar *)s, n, c); } } /*(c uni_str_chr_rindex_n) * uni_string uni_str_chr_rindex_n (enum uni_encoding_scheme encoding, * uni_string s, * size_t n, * t_unicode c); * * Return the position of the last occurence of code point `c' in a * Unicode string. If `c' is not found, return 0. * * `n' is the length of `s' measured in code units. * * \Note:/ This function looks for code points, not code units. * It can not be used, for example, to find the position of * an unpaired surrogate in a UTF-16 string. * */ uni_string uni_str_chr_rindex_n (enum uni_encoding_scheme encoding, uni_string s, size_t n, t_unicode c) { switch (encoding) { default: panic ("illegal encoding in uni_str_chr_rindex_n"); return 0; case uni_iso8859_1: case uni_utf8: return (uni_string)str_chr_rindex_n ((t_uchar *)s, n, c); case uni_utf16: return (uni_string)unichar_str_chr_rindex_n ((t_unichar *)s, n, c); } } /************************************************************************ *(h2 "Simple Unicode String Comparisons") * * * The functions in this section compare Unicode strings by code * points. They are not sensative to locale; they are not sensative * to canonical equivalences of any kind. */ /*(c uni_str_cmp) * int uni_str_cmp (enum uni_encoding_scheme encoding, * uni_string a, * uni_string b); * * Compare the code points of 0-terminated strings `a' and `b' * to determine their lexical ordering. * * If `a' is less, return -1. * * If `a' and `b' are identical, return 0. * * If `a' is greater, return 1. */ int uni_str_cmp (enum uni_encoding_scheme encoding, uni_string a, uni_string b) { switch (encoding) { default: panic ("illegal encoding in uni_str_chr_rindex_n"); return 0; case uni_iso8859_1: case uni_utf8: return str_cmp ((t_uchar *)a, (t_uchar *)b); case uni_utf16: return unichar_str_cmp ((t_unichar *)a, (t_unichar *)b); } } /*(c uni_str_cmp_n) * int uni_str_cmp_n (enum uni_encoding_scheme encoding, * uni_string a, size_t a_l, * uni_string b, size_t b_l); * * Compare the code points of strings `a' and `b' * to determine their lexical ordering. * * `a_l' and `b_l' are the lengths of `a' and `b', measured * in code units. * * If `a' is less, return -1. * * If `a' and `b' are identical, return 0. * * If `a' is greater, return 1. * * \Note:/ Both `a' and `b' are considered to be 0-terminated. If * `U+0000' is encountered before `a_l' or `b_l' code units have been * processed, comparison stops. This may not be the Right behavior * and may change in future releases: programs should not rely on this * behavior. */ int uni_str_cmp_n (enum uni_encoding_scheme encoding, uni_string a, size_t a_l, uni_string b, size_t b_l) { switch (encoding) { default: panic ("illegal encoding in uni_str_chr_rindex_n"); return 0; case uni_iso8859_1: case uni_utf8: return str_cmp_n ((t_uchar *)a, a_l, (t_uchar *)b, b_l); case uni_utf16: return unichar_str_cmp_n ((t_unichar *)a, a_l, (t_unichar *)b, b_l); } } /*(c uni_str_cmp_prefix) * int uni_str_cmp_prefix (enum uni_encoding_scheme encoding, * uni_string a, * uni_string b); * * Compare `b' to a prefix of `a'. Both strings are 0-terminated. * * If a prefix of `a' is equal to `b', return 0. * * If `a' is less than `b', return -1. * * If `a' is greater than `b', return -1. */ int uni_str_cmp_prefix (enum uni_encoding_scheme encoding, uni_string a, uni_string b) { switch (encoding) { default: panic ("illegal encoding in uni_str_chr_rindex_n"); return 0; case uni_iso8859_1: case uni_utf8: return str_cmp_prefix ((t_uchar *)a, (t_uchar *)b); case uni_utf16: return unichar_str_cmp_prefix ((t_unichar *)a, (t_unichar *)b); } } int uni_str_casecmp (enum uni_encoding_scheme encoding, uni_string a, uni_string b) { switch (encoding) { default: panic ("illegal encoding in uni_str_chr_rindex_n"); return 0; case uni_iso8859_1: case uni_utf8: return str_casecmp ((t_uchar *)a, (t_uchar *)b); case uni_utf16: return unichar_str_casecmp ((t_unichar *)a, (t_unichar *)b); } } /*(c uni_str_casecmp_n) * int uni_str_casecmp_n (enum uni_encoding_scheme encoding, * uni_string a, size_t a_l, * uni_string b, size_t b_l); * * Compare the code points of 0-terminated strings `a' and `b' * to determine their lexical ordering, disregarding simple * case distinctions. * * If `a' is less, return -1. * * If `a' and `b' are identical, return 0. * * If `a' is greater, return 1. * * The strings are compared as if all characters in both * strings were passed through `unidata_to_ * */ int uni_str_casecmp_n (enum uni_encoding_scheme encoding, uni_string a, size_t a_l, uni_string b, size_t b_l) { switch (encoding) { default: panic ("illegal encoding in uni_str_chr_rindex_n"); return 0; case uni_iso8859_1: return str_casecmp_n ((t_uchar *)a, a_l, (t_uchar *)b, b_l); case uni_utf8: broken; case uni_utf16: return unichar_str_casecmp_n ((t_unichar *)a, a_l, (t_unichar *)b, b_l); } } int uni_str_casecmp_prefix (enum uni_encoding_scheme encoding, uni_string a, uni_string b) { switch (encoding) { default: panic ("illegal encoding in uni_str_chr_rindex_n"); return 0; case uni_iso8859_1: return str_casecmp_prefix ((t_uchar *)a, (t_uchar *)b); case uni_utf8: broken; case uni_utf16: return unichar_str_casecmp_prefix ((t_unichar *)a, (t_unichar *)b); } } int uni_str_cmp_xfrm (enum uni_encoding_scheme a_enc, uni_string a, enum uni_encoding_scheme b_enc, uni_string b) { if (a_enc == b_enc) return uni_str_cmp (a_enc, a, b); else { while (1) { t_unicode from_a; t_unicode from_b; from_a = uni_str_scan (a_enc, &a); from_b = uni_str_scan (b_enc, &b); uni_invariant (!uni_is_noncharacter (from_a)); uni_invariant (!uni_is_noncharacter (from_b)); if (from_a < from_b) return -1; else if (from_b < from_a) return 1; else if (!from_a) return 0; } } } int uni_str_cmp_xfrm_n (enum uni_encoding_scheme a_enc, uni_string a, size_t a_l, enum uni_encoding_scheme b_enc, uni_string b, size_t b_l) { if (a_enc == b_enc) return uni_str_cmp_n (a_enc, a, a_l, b, b_l); else { size_t a_pos; size_t b_pos; size_t l; a_pos = 0; b_pos = 0; l = ((a_l < b_l) ? a_l : b_l); while (a_pos < l) { t_unicode from_a; t_unicode from_b; from_a = uni_str_iscan (a_enc, a, &a_pos, a_l); from_b = uni_str_iscan (b_enc, b, &b_pos, b_l); uni_invariant (!uni_is_noncharacter (from_a)); uni_invariant (!uni_is_noncharacter (from_b)); if (from_a < from_b) return -1; else if (from_b < from_a) return 1; else if (!from_a) return 0; } if (a_l < b_l) return -1; else if (b_l < a_l) return 1; else return 0; } } int uni_str_cmp_prefix_xfrm (enum uni_encoding_scheme a_enc, uni_string a, enum uni_encoding_scheme b_enc, uni_string b) { if (a_enc == b_enc) return uni_str_cmp_prefix (a_enc, a, b); else { while (1) { t_unicode from_a; t_unicode from_b; from_a = uni_str_scan (a_enc, &a); if (!from_a) return 0; from_b = uni_str_scan (b_enc, &b); uni_invariant (!uni_is_noncharacter (from_a)); uni_invariant (!uni_is_noncharacter (from_b)); if (from_a < from_b) return -1; else if (from_b < from_a) return 1; } } } int uni_str_casecmp_xfrm (enum uni_encoding_scheme a_enc, uni_string a, enum uni_encoding_scheme b_enc, uni_string b) { if (a_enc == b_enc) return uni_str_casecmp (a_enc, a, b); else { while (1) { t_unicode from_a; t_unicode from_b; from_a = uni_str_scan (a_enc, &a); from_b = uni_str_scan (b_enc, &b); uni_invariant (!uni_is_noncharacter (from_a)); uni_invariant (!uni_is_noncharacter (from_b)); from_a = unidata_to_lower (from_a); from_b = unidata_to_lower (from_b); if (from_a < from_b) return -1; else if (from_b < from_a) return 1; else if (!from_a) return 0; } } } int uni_str_casecmp_xfrm_n (enum uni_encoding_scheme a_enc, uni_string a, size_t a_l, enum uni_encoding_scheme b_enc, uni_string b, size_t b_l) { if (a_enc == b_enc) return uni_str_casecmp_n (a_enc, a, a_l, b, b_l); else { size_t a_pos; size_t b_pos; size_t l; a_pos = 0; b_pos = 0; l = ((a_l < b_l) ? a_l : b_l); while (a_pos < l) { t_unicode from_a; t_unicode from_b; from_a = uni_str_iscan (a_enc, a, &a_pos, a_l); from_b = uni_str_iscan (b_enc, b, &b_pos, b_l); uni_invariant (!uni_is_noncharacter (from_a)); uni_invariant (!uni_is_noncharacter (from_b)); from_a = unidata_to_lower (from_a); from_b = unidata_to_lower (from_b); if (from_a < from_b) return -1; else if (from_b < from_a) return 1; else if (!from_a) return 0; } if (a_l < b_l) return -1; else if (b_l < a_l) return 1; else return 0; } } int uni_str_casecmp_prefix_xfrm (enum uni_encoding_scheme a_enc, uni_string a, enum uni_encoding_scheme b_enc, uni_string b) { if (a_enc == b_enc) return uni_str_casecmp_prefix (a_enc, a, b); else { while (1) { t_unicode from_a; t_unicode from_b; from_a = uni_str_scan (a_enc, &a); if (!from_a) return 0; from_b = uni_str_scan (b_enc, &b); uni_invariant (!uni_is_noncharacter (from_a)); uni_invariant (!uni_is_noncharacter (from_b)); from_a = unidata_to_lower (from_a); from_b = unidata_to_lower (from_b); if (from_a < from_b) return -1; else if (from_b < from_a) return 1; } } } uni_string uni_str_save_xfrm (alloc_limits limits, enum uni_encoding_scheme out_enc, enum uni_encoding_scheme str_enc, uni_string str) { if (out_enc == str_enc) { switch (str_enc) { default: goto hard_case; case uni_iso8859_1: case uni_utf8: return (uni_string)str_save (limits, (t_uchar *)str); case uni_utf16: return (uni_string)unichar_str_save (limits, (t_unichar *)str); } } else { size_t out_len; uni_string answer; hard_case: out_len = uni_str_length_for_encoding (out_enc, str_enc, str) + 1; answer = (uni_string)lim_malloc (limits, out_len * uni_code_unit_width (out_enc)); uni_str_cpy_xfrm (out_enc, answer, str_enc, str); return answer; } } uni_string uni_str_save_xfrm_n (alloc_limits limits, enum uni_encoding_scheme out_enc, enum uni_encoding_scheme str_enc, uni_string str, size_t len) { if (out_enc == str_enc) { switch (str_enc) { default: goto hard_case; case uni_iso8859_1: case uni_utf8: return (uni_string)str_save_n (limits, (t_uchar *)str, len); case uni_utf16: return (uni_string)unichar_str_save_n (limits, (t_unichar *)str, len); } } else { size_t out_len; uni_string answer; hard_case: out_len = uni_str_length_for_encoding_n (out_enc, str_enc, str, len) + 1; answer = (uni_string)lim_malloc (limits, out_len * uni_code_unit_width (out_enc)); uni_str_cpy_xfrm_n (out_enc, answer, str_enc, str, len); return answer; } } uni_string uni_str_alloc_cat_xfrm (alloc_limits limits, enum uni_encoding_scheme out_enc, enum uni_encoding_scheme str1_enc, uni_string str1, enum uni_encoding_scheme str2_enc, uni_string str2) { if ((out_enc == str1_enc) && (str1_enc == str2_enc)) { switch (out_enc) { default: goto hard_case; case uni_iso8859_1: case uni_utf8: return (uni_string)str_alloc_cat (limits, (t_uchar *)str1, (t_uchar *)str2); case uni_utf16: return (uni_string)unichar_str_alloc_cat (limits, (t_unichar *)str1, (t_unichar *)str2); } } else { size_t str1_size; size_t str2_size; size_t total_size; uni_string answer; hard_case: str1_size = uni_str_length_for_encoding (out_enc, str1_enc, str1); str2_size = uni_str_length_for_encoding (out_enc, str2_enc, str2); total_size = str1_size + str2_size + 1; answer = (uni_string)lim_malloc (limits, total_size * uni_code_unit_width (out_enc)); uni_str_cpy_xfrm (out_enc, answer, str1_enc, str1); uni_str_cpy_xfrm (out_enc, uni_str_offset (out_enc, answer, str1_size), str2_enc, str2); return answer; } } alloc_cat_n_xfrm tla-1.3.5+dfsg/src/hackerlab/unicode/=later/unichar-str.c0000644000175000017500000003414710457621774021723 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:41:42 2001 (unichar-str.c) */ /* unichar-str.c - * **************************************************************** * Copyright (C) 2000 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/mem/mem.h" #include "hackerlab/hash/hash-utils.h" #include "hackerlab/unidata/unidata.h" #include "hackerlab/unicode/unichar-str.h" /************************************************************************ *(h1 "UTF-16 String Processing") * * * */ /************************************************************************ *(h2 "String Length") * * * */ /*(c unichar_str_length) * size_t unichar_str_length (const t_unichar * x); * * Return the length of the 0-terminated string `x'. The length does * not include the 0-byte itself. */ size_t unichar_str_length (const t_unichar * x) { size_t q; if (!x) return 0; q = 0; while (*x) ++x, ++q; return q; } /*(c unichar_str_length_n) * size_t unichar_str_length_n (const t_unichar * x, size_t n); * * Return the length of the 0-terminated string `x' but not more than * `n'. The length does not include the 0-byte itself. * * If `x' is longer than `n' code units, return `n'. */ size_t unichar_str_length_n (const t_unichar * x, size_t n) { size_t q; if (!x) return 0; q = 0; while ((q < n) && *x) ++x, ++q; return q; } /************************************************************************ *(h2 "Computing Hash Values From Strings") * */ /*(c unichar_str_hash_n) * unsigned long unichar_str_hash_n (const t_unichar * chr, size_t len); * * Compute an `unsigned long' hash value for a string. */ unsigned long unichar_str_hash_n (const t_unichar * chr, size_t len) { return hash_mem ((t_uchar *)chr, len * sizeof (t_unichar)); } /************************************************************************ *(h2 "Simple String Searching") * */ /*(c unichar_str_chr_index) * t_unichar * unichar_str_chr_index (const t_unichar * s, int c); * * Return the position in 0-terminated string `s' of the first * occurence of `c'. Return 0 if `c' does not occur in `s'. */ t_unichar * unichar_str_chr_index (const t_unichar * s, fix this -- should be t_unicode int c) { while (*s) { broken -- should look for code points! if (*s == c) return (t_unichar *)s; ++s; } if (c == 0) return (t_unichar *)s; return 0; } /*(c unichar_str_chr_rindex) * t_unichar * unichar_str_chr_rindex (const t_unichar * s, int c); * * Return the position in 0-terminated string `s' of the last * occurence of `c'. Return 0 if `c' does not occur in `s'. */ t_unichar * unichar_str_chr_rindex (const t_unichar * s, int c) { const t_unichar * best; best = 0; while (*s) { if (*s == c) best = s; ++s; } if (c == 0) return (t_unichar *)s; return (t_unichar *)best; } /*(c unichar_str_chr_index_n) * t_unichar * unichar_str_chr_index_n (const t_unichar * s, size_t n, int c); * * Return the position in length `n' string `s' of the first occurence * of `c'. Return 0 if `c' does not occur in `s'. */ t_unichar * unichar_str_chr_index_n (const t_unichar * s, size_t n, int c) { while (n) { if (*s == c) return (t_unichar *)s; if (!*s) return 0; ++s; --n; } return 0; } /*(c unichar_str_chr_rindex_n) * t_unichar * unichar_str_chr_rindex_n (const t_unichar * s, size_t n, int c); * * Return the position in length `n' string `s' of the last occurence * of `c'. Return 0 if `c' does not occur in `s'. */ t_unichar * unichar_str_chr_rindex_n (const t_unichar * s, size_t n, int c) { s += n - 1; while (n) { if (*s == c) return (t_unichar *)s; --s; --n; } return 0; } /************************************************************************ *(h2 "String Comparisons") * * * */ /*(c unichar_str_cmp) * int unichar_str_cmp (const t_unichar * a, const t_unichar * b); * * Compare strings `a' and `b' returning -1 if `a' is lexically first, * 0 if the two strings are equal, 1 if `b' is lexically first. */ int unichar_str_cmp (const t_unichar * a, const t_unichar * b) { if ((!a || !*a) && (!b || !*b)) return 0; if (!b || !*b) return 1; if (!a || !a) return -1; while ((*a == *b) && *a) { ++a; ++b; } if (*a == *b) return 0; else if (*a < *b) return -1; else return 1; } /*(c unichar_str_cmp_n) * int unichar_str_cmp_n (const t_unichar * a, size_t a_l, const t_unichar * b, size_t b_l); * * Compare strings `a' (length `a_l') and `b' (length `b_l') returning * -1 if `a' is lexically first, 0 if the two strings are equal, 1 if * `b' is lexically first. * */ int unichar_str_cmp_n (const t_unichar * a, size_t a_l, const t_unichar * b, size_t b_l) { size_t l; l = ((a_l < b_l) ? a_l : b_l); while (l) { t_unichar ac; t_unichar bc; ac = *a++; bc = *b++; if (ac < bc) return -1; else if (ac > bc) return 1; else if (!ac) return 0; --l; } if (a_l < b_l) return -1; else if (b_l < a_l) return 1; else return 0; } /*(c unichar_str_cmp_prefix) * int unichar_str_cmp_prefix (const t_unichar * prefix, const t_unichar * s); * * Compare strings `prefix' and `s'. If `prefix' is a prefix of `s', * return 0. Otherwise, if `prefix' is lexically first, return -1; * if `s' is lexically first, return 1. */ int unichar_str_cmp_prefix (const t_unichar * prefix, const t_unichar * s) { if (!prefix) return 0; if (!s) { if (!*prefix) return 0; else return 1; } while (*prefix) { if (*s < *prefix) return 1; else if (*s > *prefix) return -1; else ++prefix, ++s; } return 0; } /************************************************************************ *(h2 "String Comparisons Ignoring Case") * */ /*(c unichar_str_casecmp) * int unichar_str_casecmp (const t_unichar * a, const t_unichar * b); * * Compare strings `a' and `b' ignoring case, returning -1 if `a' is * lexically first, 0 if the two strings are equal, 1 if `b' is * lexically first. */ int unichar_str_casecmp (const t_unichar * a, const t_unichar * b) { if ((!a || !*a) && (!b || !*b)) return 0; if (!b || !*b) return 1; if (!a || !*a) return -1; while ((unidata_to_lower(*a) == unidata_to_lower(*b)) && *a) { ++a; ++b; } if (unidata_to_lower(*a) == unidata_to_lower(*b)) return 0; else if (unidata_to_lower(*a) < unidata_to_lower(*b)) return -1; else return 1; } /*(c unichar_str_casecmp_n) * int unichar_str_casecmp_n (const t_unichar * a, size_t a_l, * const t_unichar * b, size_t b_l); * * Compare strings `a' (length `a_l') and `b' (length `b_l') ignoring * case returning -1 if `a' is lexically first, 0 if the two strings * are equal, 1 if `b' is lexically first. */ int unichar_str_casecmp_n (const t_unichar * a, size_t a_l, const t_unichar * b, size_t b_l) { size_t l; l = ((a_l < b_l) ? a_l : b_l); while (l) { t_unichar ac; t_unichar bc; ac = unidata_to_lower(*a++); bc = unidata_to_lower(*b++); if (ac < bc) return -1; else if (ac > bc) return 1; else if (!ac) return 0; --l; } if (a_l < b_l) return -1; else if (b_l < a_l) return 1; else return 0; } /*(c unichar_str_casecmp_prefix) * int unichar_str_casecmp_prefix (const t_unichar * prefix, const t_unichar * s); * * Compare strings `prefix' and `s', ignoring case. If `prefix' is a * prefix of `s', return 0. Otherwise, if `prefix' is lexically * first, return -1; if `s' is lexically first, return 1. */ int unichar_str_casecmp_prefix (const t_unichar * prefix, const t_unichar * s) { if (!prefix) return 0; if (!s) { if (!*prefix) return 0; else return 1; } while (*prefix) { if (unidata_to_lower(*s) < unidata_to_lower(*prefix)) return 1; else if (unidata_to_lower(*s) > unidata_to_lower(*prefix)) return -1; else ++prefix, ++s; } return 0; } /************************************************************************ *(h2 "String Copying") * */ /*(c unichar_str_cpy) * t_unichar * unichar_str_cpy (t_unichar * to, const t_unichar * from); * * Copy the 0-terminated string `from' to `to'. `from' and `to' * should not overlap. * * Returns `to'. */ size_t fix this unichar_str_cpy (t_unichar * to, const t_unichar * from) { t_unichar * answer; answer = to; if (from) { while (*from) *to++ = *from++; } *to = 0; return answer; } /*(c unichar_str_cpy_n) * t_unichar * unichar_str_cpy_n (t_unichar * to, * const t_unichar * from, * size_t n); * * Copy up-to `n' characters from `from' to `to'. * * \Warning:/ This function is different from `strncpy'. `strncpy' * always stores exactly `n' characters in `to', padding the result * with 0 if a 0 character is encountered in `from' before `n' * characters are written. This function stores up to `n+1' characters: * up to `n' non-0 characters from `from', plus a final 0. * * Returns `to'. */ void unichar_str_cpy_n (t_unichar * to, const t_unichar * from, size_t n) { t_unichar * answer; answer = to; if (from) { while (n && *from) { *to++ = *from++; --n; } } *to++ = 0; return answer; } /************************************************************************ *(h2 "String Concatenation") * * * */ /*(c unichar_str_cat) * t_unichar * unichar_str_cat (t_unichar * to, const t_unichar * from); * * Append the 0-terminated string `from' to the 0-terminated string * `to'. The strings should not overlap. * * Returns `to'. */ size_t fix this unichar_str_cat (t_unichar * to, const t_unichar * from) { t_unichar * answer; answer = to; if (from) { while (*to) ++to; while (*from) *to++ = *from++; *to = 0; } return answer; } /*(c unichar_str_cat_n) * t_unichar * unichar_str_cat_n (t_unichar * to, * const t_unichar * from, * size_t n); * * Append at most `n' characters of the 0-terminated string `from' to * the 0-terminated string `to'. The strings should not overlap. * Add a final 0 (thus writing up to `n + 1' characters in `to', * starting from the position of the final 0 in `to' on entry). * * Returns `to'. */ t_unichar * unichar_str_cat_n (t_unichar * to, const t_unichar * from, size_t n) { t_unichar * answer; answer = to; while (*to) ++to; while (n && *from) { *to++ = *from++; --n; } *to = 0; return answer; } /************************************************************************ *(h2 "String Allocators") * * */ /*(c unichar_str_save) * t_unichar * strsav (alloc_limits limits, const t_unichar * str); * * Allocate a copy of the 0-terminated string `str'. * * Allocate storage according to `limits'. (See xref:"Allocation * With Limitations".) */ t_unichar * unichar_str_save (alloc_limits limits, const t_unichar * str) { t_unichar * it; size_t len; len = unichar_str_length (str); it = (t_unichar *)lim_malloc (limits, sizeof (t_unichar) * (len + 1)); if (!it) return 0; unichar_str_cpy (it, str); return it; } /*(c unichar_str_save_n) * t_unichar * unichar_str_save_n (alloc_limits limits, * const t_unichar * str, * size_t len); * * Allocate a copy of the n-byte string `str'. * Add one byte to the new string and store 0 in that byte. * * Allocate storage according to `limits'. (See xref:"Allocation * With Limitations".) */ t_unichar * unichar_str_save_n (alloc_limits limits, const t_unichar * str, size_t len) { t_unichar * it; it = (t_unichar *)lim_malloc (limits, sizeof (t_unichar) * (len + 1)); if (!it) return 0; mem_move ((t_uchar *)it, (t_uchar *)str, len); it[len] = 0; return it; } /*(c unichar_str_alloc_cat) * t_unichar * unichar_str_alloc_cat (alloc_limits limits, * const t_unichar * str1, * const t_unichar * str2); * * Allocate a new string large enough to hold the concatenation of * 0-terminated strings `str1' and `str2' (including a final 0). * Initialize the new string with the concatenation of `str1' and * `str2'. * * Allocate storage according to `limits'. (See xref:"Allocation * With Limitations".) */ t_unichar * unichar_str_alloc_cat (alloc_limits limits, const t_unichar * str1, const t_unichar * str2) { if (!str1 && !str2) return 0; if (!str1) return unichar_str_save (limits, str2); if (!str2) return unichar_str_save (limits, str1); { t_unichar * it; size_t len; len = unichar_str_length (str1) + unichar_str_length (str2) + 1; it = (t_unichar *)lim_malloc (limits, sizeof (t_unichar) * len); if (!it) return 0; unichar_str_cpy (it, str1); unichar_str_cat (it, str2); return it; } } /*(c unichar_str_alloc_cat_n) * t_unichar * unichar_str_alloc_cat (alloc_limits limits, * const t_unichar * str1, * const t_unichar * str2, * size_t n); * * Allocate a new 0-terminated string large enough to hold the * concatenation of 0-terminated strings `str1' and `str2', * considering at most `n' characters from `str2'. * * Initialize the new string with the concatenation of `str1' and * up to `n' characters of `str2'. Append a final 0. * * Allocate storage according to `limits'. (See xref:"Allocation * With Limitations".) */ t_unichar * unichar_str_alloc_cat_n (alloc_limits limits, const t_unichar * str1, const t_unichar * str2, size_t n) { if (!str1 && !str2) return 0; if (!str1) return unichar_str_save_n (limits, str2, n); if (!str2) return unichar_str_save (limits, str1); { t_unichar * it; size_t len; len = unichar_str_length (str1) + unichar_str_length_n (str2, n) + 1; it = (t_unichar *)lim_malloc (limits, sizeof (t_unichar) * len); if (!it) return 0; unichar_str_cpy (it, str1); unichar_str_cat_n (it, str2, n); return it; } } tla-1.3.5+dfsg/src/hackerlab/unicode/=later/uni-str-inlines.c0000644000175000017500000001620310457621774022515 0ustar useruser/* uni-str-inlines.c - inline unicode string functions * **************************************************************** * Copyright (C) 2000 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #define UNI_CODING_INLINES #include "hackerlab/machine/types.h" #include "hackerlab/bugs/panic.h" #include "hackerlab/uni/invariant.h" #include "hackerlab/uni/coding.h" #include "hackerlab/unicode/uni-str.h" #ifndef UNI_INLINE_QUALIFIERS #define UNI_INLINE_QUALIFIERS #endif #ifndef __GNUC__ #undef __attribute__ #define __attribute__(X) #endif UNI_INLINE_QUALIFIERS uni_string __attribute__((unused)) uni_str_offset (enum uni_encoding_scheme encoding, uni_string string, ssize_t x) { return (uni_string)((t_uchar *)string + (x * uni_code_unit_width (encoding))); } UNI_INLINE_QUALIFIERS t_unicode __attribute__((unused)) uni_str_iscan (enum uni_encoding_scheme encoding, uni_string str, size_t * pos, size_t len) { t_unicode c0; t_unicode c1; switch (encoding) { default: panic ("unhandled encoding scheme in uni_str_iscan"); case uni_iso8859_1: uni_invariant (*pos < len); return (t_unicode)(((t_uchar *)str)[(*pos)++]); case uni_utf16: uni_invariant (*pos < len); c0 = (t_unicode)(((t_unichar **)str)[(*pos)++]); if (uni_is_low_surrogate (c0)) { --(*pos); return 0xfffe; } if (!uni_is_high_surrogate (c0)) return c0; if (((*pos) + 1) < len) { --(*pos); return 0xffff; } c1 = (t_unicode)(((t_unichar **)str)[(*pos)++]); if (!uni_is_low_surrogate (c1)) { (*pos) -= 2; return 0xfffe; } return uni_assemble_surrogates (c0, c1); case uni_utf8: return uni_utf8_iscan ((t_uchar *)str, pos, len); } } UNI_INLINE_QUALIFIERS t_unicode __attribute__((unused)) uni_str_scan (enum uni_encoding_scheme encoding, uni_string * str) { t_unicode c0; t_unicode c1; switch (encoding) { default: panic ("unhandled encoding scheme in uni_str_scan"); case uni_iso8859_1: return (t_unicode)*((*(t_uchar **)str)++); case uni_utf16: c0 = (t_unicode)*((*(t_unichar **)str)++); if (uni_is_low_surrogate (c0)) { --(*((t_unichar **)str)); return 0xfffe; } if (!uni_is_high_surrogate (c0)) return c0; c1 = (t_unicode)*((*(t_unichar **)str)++); if (!uni_is_low_surrogate (c1)) { (*(t_unichar **)str) -= 2; return 0xfffe; } return uni_assemble_surrogates (c0, c1); case uni_utf8: { t_unicode c0; t_unicode c1; t_unicode c2; t_unicode c3; t_unicode c; c0 = (t_unicode)*((*(t_uchar **)str)++); switch ((c0 >> 3) & 0x1f) { case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7: case 8: case 9: case 10: case 11: case 12: case 13: case 14: case 15: return c0; case 24: case 25: case 26: case 27: c1 = (t_unicode)*((*(t_uchar **)str)++); if ((c1 >> 6) != 2) { (*(t_uchar **)str) -= 2; return (c1 ? 0xfffe : 0xffff); } c = (((c0 & 0x1f) << 6) | (c1 & 0x3f)); if (c < 128) { (*(t_uchar **)str) -= 2; return 0xfffe; } return c; case 28: case 29: c1 = (t_unicode)*((*(t_uchar **)str)++); if (!c1) { (*(t_uchar **)str) -= 2; return 0xffff; } c2 = (t_unicode)*((*(t_uchar **)str)++); if (((c1 >> 6) != 2) || ((c2 >> 6) != 2)) { (*(t_uchar **)str) -= 3; return (c2 ? 0xfffe : 0xffff); } c = ((c0 & 0xf) << 12) | ((c1 & 0x3f) << 6) | (c2 & 0x3f); if (uni_is_surrogate (c) || (c < (1 << 11))) { (*(t_uchar **)str) -= 3; return 0xfffe; } return c; case 30: c1 = (t_unicode)*((*(t_uchar **)str)++); if (!c1) { (*(t_uchar **)str) -= 2; return 0xffff; } c2 = (t_unicode)*((*(t_uchar **)str)++); if (!c2) { (*(t_uchar **)str) -= 3; return 0xffff; } c3 = (t_unicode)*((*(t_uchar **)str)++); if (((c1 >> 6) != 2) || ((c2 >> 6) != 2) || ((c3 >> 6) != 2)) { (*(t_uchar **)str) -= 4; return (c3 ? 0xfffe : 0xffff); } c = (((c0 & 7) << 18) | ((c1 & 0x3f) << 12) | ((c2 & 0x3f) << 6) | (c3 & 0x3f)); if ((c < (1 << 16)) || (c > 0x10ffff)) { (*(t_uchar **)str) -= 4; return 0xfffe; } return c; default: /* 16 and 32 */ return 0xfffe; } } } } UNI_INLINE_QUALIFIERS int __attribute__((unused)) uni_str_iput (enum uni_encoding_scheme encoding, uni_string str, size_t * pos, size_t len, t_unicode c) { switch (encoding) { default: panic ("unhandled encoding scheme in uni_str_iput"); case uni_iso8859_1: return uni_iso8859_1_iput ((t_uchar *)str, pos, len, c); case uni_utf8: return uni_utf8_iput ((t_uchar *)str, pos, len, c); case uni_utf16: uni_invariant (!uni_is_noncharacter (c)); uni_invariant (!uni_is_surrogate (c)); if (c <= 0xffff) { if ((*pos) >= len) return -1; ((t_unichar *)str)[*pos] = c; ++(*pos); return 1; } else { t_unicode hi; t_unicode lo; if ((*pos + 1) >= len) return -2; hi = (c - 0x10000) / 0x400 + 0xd800; lo = (c - 0x10000) + 0xdc00; ((t_unichar *)str)[*pos] = hi; ++(*pos); ((t_unichar *)str)[*pos] = lo; ++(*pos); return 2; } } } UNI_INLINE_QUALIFIERS int __attribute__((unused)) uni_str_put (enum uni_encoding_scheme encoding, uni_string * str, t_unicode c) { switch (encoding) { default: panic ("unhandled encoding scheme in uni_str_iput"); case uni_iso8859_1: uni_invariant (c < 256); *((*((t_uchar **)str))++) = c; return 1; case uni_utf8: { uni_invariant (!uni_is_noncharacter (c)); uni_invariant (!uni_is_surrogate (c)); if (c < 0x80) { *((*((t_uchar **)str))++) = c; return 1; } else if (c < 0x800) { *((*((t_uchar **)str))++) = (0xc0 | (c >> 6)); *((*((t_uchar **)str))++) = (0x80 | (c & 0x3f)); return 2; } else if (c < 0x10000) { *((*((t_uchar **)str))++) = (0xe0 | (c >> 12)); *((*((t_uchar **)str))++) = (0x80 | ((c >> 6) & 0x3f)); *((*((t_uchar **)str))++) = (0x80 | (c & 0x3f)); return 3; } else if (c < 0x110000) { t_unicode hi_bits; hi_bits = (c >> 16); c &= 0xffff; *((*((t_uchar **)str))++) = (0xf0 | (hi_bits >> 2)); *((*((t_uchar **)str))++) = (0x80 | ((hi_bits & 3) << 4) | ((c >> 12) & 0xf)); *((*((t_uchar **)str))++) = (0x80 | ((c >> 6) & 0x3f)); *((*((t_uchar **)str))++) = (0x80 | (c & 0x3f)); return 4; } else panic ("out of range character in uni_str_put"); } case uni_utf16: { uni_invariant (!uni_is_noncharacter (c)); uni_invariant (!uni_is_surrogate (c)); if (c < 0x10000) { *((*((t_unichar **)str))++) = c; return 1; } else { t_unicode hi; t_unicode lo; hi = (c - 0x10000) / 0x400 + 0xd800; lo = (c - 0x10000) + 0xdc00; *((*((t_unichar **)str))++) = hi; *((*((t_unichar **)str))++) = lo; return 2; } } } } tla-1.3.5+dfsg/src/hackerlab/unicode/=later/uni-str.h0000644000175000017500000001237510457621774021071 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:41:42 2001 (uni-str.h) */ /* uni-str.h - * **************************************************************** * Copyright (C) 2000 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__UNI__UNI_STR_H #define INCLUDE__UNI__UNI_STR_H #include "hackerlab/mem/alloc-limits.h" #include "hackerlab/uni/coding.h" #if defined(__GNUC__) && defined(UNI_STR_INLINES) #undef UNI_INLINE_QUALIFIERS #define UNI_INLINE_QUALIFIERS static inline #include "hackerlab/unicode/uni-str-inlines.c" #else #undef UNI_INLINE_QUALIFIERS #include "hackerlab/unicode/uni-str-inlines.h" #endif /* automatically generated __STDC__ prototypes */ extern size_t uni_str_length (enum uni_encoding_scheme encoding, uni_string s); extern size_t uni_str_length_for_encoding (enum uni_encoding_scheme out_enc, enum uni_encoding_scheme encoding, uni_string str); extern size_t uni_str_length_for_encoding_n (enum uni_encoding_scheme out_enc, enum uni_encoding_scheme encoding, uni_string str, size_t len); extern uni_string uni_str_cpy (enum uni_encoding_scheme encoding, uni_string to, uni_string from); extern uni_string uni_str_cpy_n (enum uni_encoding_scheme encoding, uni_string to, uni_string from, size_t n); extern uni_string uni_str_cpy_xfrm (enum uni_encoding_scheme to_enc, uni_string to, enum uni_encoding_scheme from_enc, uni_string from); extern uni_string uni_str_cpy_xfrm_n (enum uni_encoding_scheme to_enc, uni_string to, enum uni_encoding_scheme from_enc, uni_string from, size_t n); extern uni_string uni_str_cat (enum uni_encoding_scheme encoding, uni_string to, uni_string from); extern uni_string uni_str_cat_n (enum uni_encoding_scheme encoding, uni_string to, uni_string from, size_t n); extern uni_string uni_str_cat_xfrm (enum uni_encoding_scheme to_enc, uni_string to, enum uni_encoding_scheme from_enc, uni_string from); extern uni_string uni_str_cat_xfrm_n (enum uni_encoding_scheme to_enc, uni_string to, enum uni_encoding_scheme from_enc, uni_string from, size_t n); extern unsigned long uni_str_hash_n (enum uni_encoding_scheme encoding, uni_string s, size_t len); extern unsigned long uni_str_hash_codepoints_n (enum uni_encoding_scheme encoding, uni_string s, size_t len); extern uni_string uni_str_chr_index (enum uni_encoding_scheme encoding, uni_string s, t_unicode c); extern uni_string uni_str_chr_rindex (enum uni_encoding_scheme encoding, uni_string s, t_unicode c); extern uni_string uni_str_chr_index_n (enum uni_encoding_scheme encoding, uni_string s, size_t n, t_unicode c); extern uni_string uni_str_chr_rindex_n (enum uni_encoding_scheme encoding, uni_string s, size_t n, t_unicode c); extern int uni_str_cmp (enum uni_encoding_scheme encoding, uni_string a, uni_string b); extern int uni_str_cmp_n (enum uni_encoding_scheme encoding, uni_string a, size_t a_l, uni_string b, size_t b_l); extern int uni_str_cmp_prefix (enum uni_encoding_scheme encoding, uni_string a, uni_string b); extern int uni_str_casecmp (enum uni_encoding_scheme encoding, uni_string a, uni_string b); extern int uni_str_casecmp_n (enum uni_encoding_scheme encoding, uni_string a, size_t a_l, uni_string b, size_t b_l); extern int uni_str_casecmp_prefix (enum uni_encoding_scheme encoding, uni_string a, uni_string b); extern int uni_str_cmp_xfrm (enum uni_encoding_scheme a_enc, uni_string a, enum uni_encoding_scheme b_enc, uni_string b); extern int uni_str_cmp_xfrm_n (enum uni_encoding_scheme a_enc, uni_string a, size_t a_l, enum uni_encoding_scheme b_enc, uni_string b, size_t b_l); extern int uni_str_cmp_prefix_xfrm (enum uni_encoding_scheme a_enc, uni_string a, enum uni_encoding_scheme b_enc, uni_string b); extern int uni_str_casecmp_xfrm (enum uni_encoding_scheme a_enc, uni_string a, enum uni_encoding_scheme b_enc, uni_string b); extern int uni_str_casecmp_xfrm_n (enum uni_encoding_scheme a_enc, uni_string a, size_t a_l, enum uni_encoding_scheme b_enc, uni_string b, size_t b_l); extern int uni_str_casecmp_prefix_xfrm (enum uni_encoding_scheme a_enc, uni_string a, enum uni_encoding_scheme b_enc, uni_string b); extern uni_string uni_str_save_xfrm (alloc_limits limits, enum uni_encoding_scheme out_enc, enum uni_encoding_scheme str_enc, uni_string str); extern uni_string uni_str_save_xfrm_n (alloc_limits limits, enum uni_encoding_scheme out_enc, enum uni_encoding_scheme str_enc, uni_string str, size_t len); extern uni_string uni_str_alloc_cat_xfrm (alloc_limits limits, enum uni_encoding_scheme out_enc, enum uni_encoding_scheme str1_enc, uni_string str1, enum uni_encoding_scheme str2_enc, uni_string str2); #endif /* INCLUDE__UNI__UNI_STR_H */ tla-1.3.5+dfsg/src/hackerlab/unicode/unicode.h0000644000175000017500000000733310457621774017710 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:41:43 2001 (unicode.h) */ /* unicode.h - * **************************************************************** * Copyright (C) 2000, 2004 Tom Lord, Jose A Ortega Ruiz * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__UNICODE__UNICODE_H #define INCLUDE__UNICODE__UNICODE_H #include "hackerlab/uni/coding.h" #include "hackerlab/unidata/unidata.h" /************************************************************************ *(h2 "Low-level Unicode String Types") * * * */ /*(c uni_string :category type) * typedef struct uni__undefined_struct * uni_string; * * The type `uni_string' is a union of pointers to values of different * sizes. It is used to represent the address of a Unicode string or * an address within a Unicode string. * * Any two `uni_string' values may be compared for equality using the * `==' operator. * * `uni_string' pointers within a single string may be compared * using any relational operator (`<', `>', etc.) by referring to * the `.raw' field. * * `uni_string' values are created from UTF-8 pointers (`t_uchar * *'), from UTF-16 pointers (`t_uint16 *') or from UTF-32 pointers * (`t_uint32 *') by means of provided cast functions (see below). * * By convention, all functions that operate on Unicode strings * accept two parameters for each string: an encoding form, and * a string pointer as in this function declaration: * * void uni_fn (enum uni_encoding_scheme encoding, * uni_string s); * * By convention, the length of a Unicode string is always measured * in code units, no matter what the size of those code units. * Integer string indexes are also measured in code units. */ typedef union { t_uchar * raw; t_uchar * iso8859_1; t_uchar * utf8; t_uint16 * utf16; t_uint32 * utf32; t_uint32 * bogus32; t_uchar * utf16be; t_uchar * utf32be; t_uchar * bogus32be; t_uchar * utf16le; t_uchar * utf32le; t_uchar * bogus32le; } uni_string; /*(c UNI_STRING_NULL :category macro) * #define UNI_STRING_NULL ... * * An rvalue expression yielding a null-pointer cast to a * `uni_string'. */ #define UNI_STRING_NULL (uni_string_raw ((t_uchar*)0)) /*(c UNI_STRING_TO_raw :category macro) * #define UNI_STRING_TO_raw(s) ... * * Return the address of `uni_string' data cast to `t_uchar *'. */ /*(c UNI_STRING_TO_iso8859_1 :category macro) * #define UNI_STRING_TO_iso8859_1(s) ... * * Return the address of `uni_string' data cast to `t_uchar *'. */ /*(c UNI_STRING_TO_utf8 :category macro) * #define UNI_STRING_TO_utf8(s) ... * * Return the address of `uni_string' data cast to `t_uchar *'. */ /*(c UNI_STRING_TO_utf16 :category macro) * #define UNI_STRING_TO_utf16(s) ... * * Return the address of `uni_string' data cast to `t_uint16 *'. */ /*(c UNI_STRING_TO_utf32 :category macro) * #define UNI_STRING_TO_utf32(s) ... * * Return the address of `uni_string' data cast to `t_uint32 *'. */ /*(c UNI_STRING_TO_bogus32 :category macro) * #define UNI_STRING_TO_bogus32(s) ... * * Return the address of `uni_string' data cast to `t_uint32 *'. */ #define UNI_STRING_TO_raw(s) (s.raw) #define UNI_STRING_TO_iso8859_1(s) (s.iso8859_1) #define UNI_STRING_TO_utf8(s) (s.utf8) #define UNI_STRING_TO_utf16(s) (s.utf16) #define UNI_STRING_TO_utf32(s) (s.utf32) #define UNI_STRING_TO_bogus32(s) (s.bogus32) #if defined(__GNUC__) && defined(UNI_CODING_INLINES) #undef UNI_INLINE_QUALIFIERS #define UNI_INLINE_QUALIFIERS static inline #include "hackerlab/unicode/uni-string-inlines.c" #else #undef UNI_INLINE_QUALIFIERS #include "hackerlab/unicode/uni-string-inlines.h" #endif /* automatically generated __STDC__ prototypes */ #endif /* INCLUDE__UNICODE__UNICODE_H */ tla-1.3.5+dfsg/src/hackerlab/unicode/Makefile.in0000644000175000017500000000027610457621774020155 0ustar useruser include $(makefiles)/library-objects.mk ifeq ($(cgs__install_hackerlab),1) include $(makefiles)/install-includes.mk endif # tag: Tom Lord Tue Dec 4 14:52:16 2001 (unicode/Makefile.in) # tla-1.3.5+dfsg/src/hackerlab/unicode/uni-string-inlines.c0000644000175000017500000001111310457621774022002 0ustar useruser/* uni-string-inlines.c * **************************************************************** * Copyright (C) 2004 by Jose Antonio Ortega Ruiz * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/unicode/unicode.h" #include "hackerlab/bugs/panic.h" #ifndef UNI_INLINE_QUALIFIERS #define UNI_INLINE_QUALIFIERS #endif #ifndef __GNUC__ #undef __attribute__ #define __attribute__(X) #endif /************************************************************************ *(h2 "Uni-string constructors") * The type `uni_string' is a union of pointers to data of different sizes, depending on the actual encoding scheme used by the Unicode string at hand. Hackerlab supports all the standard Unicode 4.0 encodings, plus `iso8859_1' for (extended) ASCII data and `bogus32' (with -be and -le varients) for Unicode data mixed with non-Unicode codepoints. The following construction functions create a new `uni_string' value from a pointer to data in a concrete encoding form. For instance, if `utf8_data' points to 8-bit, UTF8-encoded code units, we can transform it to uni_string with: uni_string s = uni_string_utf8 (utf8_data); Getting back the original pointer is then just a matter of accessing the requisite union member: t_uchar * data = s.uni_utf8; In addition to the standard unicode schemes, a `uni_string' can be viewed as a raw pointer to data (via its `raw' union variant). The `bogus' encodings (`bogus32', `bogus32be', and `bogus32le') represent a UTF-32 unicode string that may contain invalid codepoints. */ /*(c uni_string_raw) * uni_string uni_string_raw (t_uchar * data); * * Return a uni_string value wrapping the given pointer * to raw data. */ UNI_INLINE_QUALIFIERS uni_string __attribute__((unused)) uni_string_raw (t_uchar * data) { uni_string answer; answer.raw = data; return answer; } /*(c uni_string_iso8859_1) * uni_string uni_string_iso8859_1 (t_uchar * iso8859_1_data); * * Return a uni_string value wrapping the given pointer * to ASCII data. */ UNI_INLINE_QUALIFIERS uni_string __attribute__((unused)) uni_string_iso8859_1 (t_uchar * iso8859_1_data) { uni_string answer; answer.iso8859_1 = iso8859_1_data; return answer; } /*(c uni_string_uft8) * uni_string uni_string_utf8 (t_uchar * utf8_data); * * Return a uni_string value wrapping the given pointer * to UTF8 code units. */ UNI_INLINE_QUALIFIERS uni_string __attribute__((unused)) uni_string_utf8 (t_uchar * utf8_data) { uni_string answer; answer.utf8 = utf8_data; return answer; } /*(c uni_string_uft16) * uni_string uni_string_utf16 (t_uint16 * uint16_data); * * Return a uni_string value wrapping the given pointer * to UTF16 code units. */ UNI_INLINE_QUALIFIERS uni_string __attribute__((unused)) uni_string_utf16 (t_uint16 * uint16_data) { uni_string answer; answer.utf16 = uint16_data; return answer; } /*(c uni_string_uft32) * uni_string uni_string_utf32 (t_uint32 * utf32_data); * * Return a uni_string value wrapping the given pointer * to UTF32 code units. */ UNI_INLINE_QUALIFIERS uni_string __attribute__((unused)) uni_string_utf32 (t_uint32 * uint32_data) { uni_string answer; answer.utf32 = uint32_data; return answer; } /*(c uni_string_bogus32) * uni_string uni_string_bogus32 (t_uint32 * uint32_data); * * Return a uni_string value wrapping the given pointer * to bogus code units. */ UNI_INLINE_QUALIFIERS uni_string __attribute__((unused)) uni_string_bogus32 (t_uint32 * uint32_data) { uni_string answer; answer.bogus32 = uint32_data; return answer; } /*(c uni_string_encoding) * uni_string uni_string_encoding (enum uni_encoding_scheme enc, t_uchar * data); * * Return a uni_string value wrapping the given pointer * to data, which points to code units in the given encoding. */ UNI_INLINE_QUALIFIERS uni_string __attribute__((unused)) uni_string_encoding (enum uni_encoding_scheme enc, t_uchar * data) { switch (enc) { default: panic ("Unexpected uni_encoding_scheme value"); return UNI_STRING_NULL; case uni_iso8859_1: return uni_string_iso8859_1 (data); case uni_utf8: return uni_string_utf8 (data); case uni_utf16: case uni_utf16le: case uni_utf16be: return uni_string_utf16 ((t_uint16 *) data); case uni_utf32: case uni_utf32le: case uni_utf32be: return uni_string_utf32 ((t_uint32 *) data); case uni_bogus32: case uni_bogus32le: case uni_bogus32be: return uni_string_bogus32 ((t_uint32 *) data); } } /* tag: Jose Antonio Ortega Ruiz Sat Feb 21 2004 02:04:23 (uni-string-inlines.c) */ tla-1.3.5+dfsg/src/hackerlab/unicode/unicode.c0000644000175000017500000000143110457621774017674 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:41:43 2001 (unicode.c) */ /* unicode.c - * **************************************************************** * Copyright (C) 2000, 2004 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/unicode/unicode.h" /************************************************************************ *(h1 "Representing Unicode Strings") * * * The Hackerlab C Library is designed to operate correctly for programs * which internally use any ^combination^ of the encodings iso8859-1, * utf-8, utf-16 and utf-32. * */ /*(include-documentation "unicode.h") */ /*(include-documentation "uni-string-inlines.c") */ /*(include-documentation "../uni/coding-inlines.c") */ tla-1.3.5+dfsg/src/hackerlab/unicode/=why-unicode.doc0000644000175000017500000000264710457621774021133 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:57:16 2001 (=why-unicode.doc) */ /************************************************************************ *(h0 "Why Unicode?" * :unnumbered) * * Why do we believe that "everyone will use Unicode"? Here are some of our reasons: \A global character set is needed./ As the internet grows in importance, and as software and data increasingly crosses linguistic boundaries, a global character set is needed to simplify software and the integration of multi-linguistic data. \A single, good, global character set is sufficient./ Some systems, notably the Posix Standard C library, are designed with the idea of supporting multiple character sets, selectable at run time. We believe that such systems will, in the long run, prove to be needlessly complex. A single global character set is simpler. \Unicode is a good design./ The design of a global character set must address thousands of obscure issues ultimately encorporating expert knowledge of every human language. While the minutiae may seem overwhelming, the design work must be based on a simple, well-chosen set of principles so that the resulting character set is easy to use in programs. The design of Unicode appears to be well along this path. \Unicode is popular./ Unicode has begun appearing in proposed standards, particularly, proposed Internet standards. Open-source software with Unicode support is becoming more common. * */ tla-1.3.5+dfsg/src/hackerlab/unicode/PLUGIN/0000755000175000017500000000000010457621774017101 5ustar userusertla-1.3.5+dfsg/src/hackerlab/unicode/PLUGIN/REQ0000644000175000017500000000004310457621774017450 0ustar useruserunidata unicode unicode libboot2 tla-1.3.5+dfsg/src/hackerlab/unicode/coding.doc0000644000175000017500000000375410457621774020046 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:57:16 2001 (coding.doc) */ /************************************************************************ *(h1 "Naming Unicode Coding Forms" * :include ("hackerlab/unicode/coding.h")) * */ /*(c uni_encoding_schemes :category type) * enum uni_encoding_schemes; * * Values of the enumerated type `uni_encoding_schemes' are used in * interfaces throughout the Hackerlab C library to identify encoding * schemes for strings or streams of Unicode characters. (See * xref:"An Absurdly Brief Introduction to Unicode".) * * enum uni_encoding_schemes * { * uni_iso8859_1, * uni_utf8, * uni_utf16, * uni_utf16be, * uni_utf16le, * uni_utf32, * uni_utf32be, * uni_utf32le, * uni_bogus32, * uni_bogus32be, * uni_bogus32le, * }; * * `uni_iso8859_1' refers to a degenerate encoding scheme. Each * character is stored in one byte. Only characters in the * range `U+0000 .. U+00FF' can be represented. * * `uni_utf8' refers to the UTF-8 encoding scheme. * * `uni_utf16' refers to UTF-16 in the native byte order of * the machine. * * `uni_utf16be' refers to UTF-16, explicitly in big-endian order. * * `uni_utf16le' refers to UTF-16, explicitly in little-endian order. * * `uni_utf32' refers to UTF-32 in the native byte order of * the machine. * * `uni_utf32be' refers to UTF-32, explicitly in big-endian order. * * `uni_utf32le' refers to UTF-32, explicitly in little-endian order. * * The `bogus' encodings, `uni_bogus32', `uni_bogus32be', and * `uni_bogus32le', refer to a special 32-bit encoding in which * characters outside of the range of Unicode (larger than 21 bits) * are permitted. For example, some subsystems use this to implement * loss-less processing of UTF-8 or UTF-16 texts where those texts may * contain illegal encoding forms (by mapping the illegal coding units * into pseudo-characters outside of the range of Unicode). */ tla-1.3.5+dfsg/src/hackerlab/unicode/=comparison0000644000175000017500000000077710457621774020310 0ustar useruser# tag: Tom Lord Tue Dec 4 15:06:35 2001 (unicode/=comparison) # glibc utf-8 based Posix mb and wchar interface Posix locales utf-8 posix regexps (bugs) icu utf-16 based new interface (c/c++) icu locales Hackerlab encoding form neutral (mix utf-8/16 and ascii8) new interface (c) hackerlab locale support in a future release no locale support in current release posix regexps (8-bit characters, posix locales) xml regexps (encoding neutral) encoding-neutral posix regexps in a future release tla-1.3.5+dfsg/src/hackerlab/unicode/unidata.h0000644000175000017500000000102510457621774017677 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:41:42 2001 (unidata.h) */ /* unidata.h - * **************************************************************** * Copyright (C) 2000 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__UNICODE__UNIDATA_H #define INCLUDE__UNICODE__UNIDATA_H #include "hackerlab/uni/coding.h" #include "hackerlab/unidata/unidata.h" /* automatically generated __STDC__ prototypes */ #endif /* INCLUDE__UNICODE__UNIDATA_H */ tla-1.3.5+dfsg/src/hackerlab/identifiers/0000755000175000017500000000000010457621774016762 5ustar userusertla-1.3.5+dfsg/src/hackerlab/identifiers/symbol-table.c0000644000175000017500000002014210457621774021517 0ustar useruser/* symbol-table.c: * **************************************************************** * Copyright (C) 2004 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/mem/mem.h" #include "hackerlab/char/str.h" #include "hackerlab/identifiers/symbol-table.h" /* __STDC__ prototypes for static functions */ static int find_cmp (void * vk, void * ve, void * vcl); #define SIZEOF_ELT (elt_size - 1 + sizeof (t_symbol_table_entry)) int init_symbol_table (t_symbol_table * const table, alloc_limits const limits, ssize_t const elt_size) { if (!table) return -1; mem_set0 ((t_uchar *)table, sizeof (*table)); if (0 > init_obtable (&table->_kv, limits, SIZEOF_ELT, 0, 0)) return -1; if (0 > init_oblist (&table->_order, limits, sizeof(ssize_t), 0, 0)) return -1; return 0; } int uninit_symbol_table (t_symbol_table * const table, alloc_limits const limits, ssize_t const elt_size) { ssize_t room; ssize_t x; if (!table) return -1; room = obtable_room (&table->_kv, limits, SIZEOF_ELT, 0, 0); for (x = 0; x < room; ++x) { if (!obtable_is_free (&table->_kv, limits, SIZEOF_ELT, 0, 0, x)) { t_symbol_table_entry * e; e = (t_symbol_table_entry *)obtable_ref (&table->_kv, limits, SIZEOF_ELT, 0, 0, x); if (!e) return -1; lim_free (limits, e->_key); e->_key = 0; } } uninit_obtable (&table->_kv, limits, SIZEOF_ELT, 0, 0); uninit_oblist (&table->_order, limits, sizeof(ssize_t), 0, 0); mem_set0 ((t_uchar *)table, sizeof (*table)); return 0; } ssize_t symbol_table_n_entries (t_symbol_table * const table, alloc_limits const limits, ssize_t const elt_size) { if (!table) return 0; return obtable_n_elts (&table->_kv, limits, SIZEOF_ELT, 0, 0); } ssize_t symbol_table_room (t_symbol_table * const table, alloc_limits const limits, ssize_t const elt_size) { if (!table) return 0; return obtable_room (&table->_kv, limits, SIZEOF_ELT, 0, 0); } void * symbol_table_entry_n (const t_uchar ** const key_return, t_symbol_table * const table, alloc_limits const limits, ssize_t const elt_size, ssize_t const n) { t_symbol_table_entry * e; if (!table) return 0; e = (t_symbol_table_entry *)obtable_ref (&table->_kv, limits, SIZEOF_ELT, 0, 0, n); if (!e) return 0; if (key_return) { *key_return = e->_key; } return (void *)e->_value; } void * symbol_table_nth_entry (const t_uchar ** const key_return, t_symbol_table * const table, alloc_limits const limits, ssize_t const elt_size, ssize_t const n) { ssize_t * k_box; ssize_t k; t_symbol_table_entry * e; if (!table) return 0; k_box = (ssize_t *)oblist_burst (0, &table->_order, limits, sizeof (ssize_t), 0, 0, n, 1); if (!k_box) return 0; k = *k_box; e = (t_symbol_table_entry *)obtable_ref (&table->_kv, limits, SIZEOF_ELT, 0, 0, k); if (!e) return 0; if (key_return) { *key_return = e->_key; } return (void *)e->_value; } struct find_cmp_closure { t_symbol_table * table; alloc_limits limits; ssize_t elt_size; }; static int find_cmp (void * const vk, void * const ve, void * const vcl) { t_uchar * key; ssize_t * entry; struct find_cmp_closure * cl; const t_uchar * entry_key; key = (t_uchar *)vk; entry = (ssize_t *)ve; cl = (struct find_cmp_closure *)vcl; if (!key && !entry) return 0; if (!key) return -1; if (!entry) return 1; if (!symbol_table_entry_n (&entry_key, cl->table, cl->limits, cl->elt_size, *entry)) { return 1; } return str_cmp (key, entry_key); } ssize_t symbol_table_entry_index (t_symbol_table * const table, alloc_limits const limits, ssize_t const elt_size, const t_uchar * const key) { struct find_cmp_closure cl; ssize_t order; ssize_t * kv_pos_box; ssize_t kv_pos; if (!table || !key) return -1; cl.table = table; cl.limits = limits; cl.elt_size = elt_size; order = oblist_find (0, &table->_order, limits, sizeof (ssize_t), 0, 0, (void *)key, find_cmp, (void *)&cl); if (order < 0) return -1; kv_pos_box = (ssize_t *)oblist_burst (0, &table->_order, limits, sizeof (ssize_t), 0, 0, order, 1); if (!kv_pos_box) return -1; kv_pos = *kv_pos_box; return kv_pos; } void * symbol_table_entry_find (t_symbol_table * const table, alloc_limits const limits, ssize_t const elt_size, const t_uchar * const key) { struct find_cmp_closure cl; ssize_t order; ssize_t * kv_pos_box; ssize_t kv_pos; t_symbol_table_entry * e; if (!table || !key) return 0; cl.table = table; cl.limits = limits; cl.elt_size = elt_size; order = oblist_find (0, &table->_order, limits, sizeof (ssize_t), 0, 0, (void *)key, find_cmp, (void *)&cl); if (order < 0) return 0; kv_pos_box = (ssize_t *)oblist_burst (0, &table->_order, limits, sizeof (ssize_t), 0, 0, order, 1); if (!kv_pos_box) return 0; kv_pos = *kv_pos_box; e = (t_symbol_table_entry *)obtable_ref (&table->_kv, limits, SIZEOF_ELT, 0, 0, kv_pos); if (!e) return 0; return (void *)e->_value; } void * symbol_table_entry_ensure (t_symbol_table * const table, alloc_limits const limits, ssize_t const elt_size, const t_uchar * const key) { struct find_cmp_closure cl; ssize_t order; ssize_t order_should_be; ssize_t kv_pos; t_symbol_table_entry * e; ssize_t * kv_pos_box; if (!table || !key) return 0; cl.table = table; cl.limits = limits; cl.elt_size = elt_size; order = oblist_find (&order_should_be, &table->_order, limits, sizeof (ssize_t), 0, 0, (void *)key, find_cmp, &cl); if (order >= 0) { kv_pos_box = (ssize_t *)oblist_burst (0, &table->_order, limits, sizeof (ssize_t), 0, 0, order, 1); if (!kv_pos_box) return 0; kv_pos = *kv_pos_box; e = (t_symbol_table_entry *)obtable_ref (&table->_kv, limits, SIZEOF_ELT, 0, 0, kv_pos); if (!e) return 0; return (void *)e->_value; } else { t_uchar * saved_key; saved_key = str_save (limits, key); if (!saved_key) return 0; kv_pos = obtable_alloc (&table->_kv, limits, SIZEOF_ELT, 0, 0); e = (t_symbol_table_entry *)obtable_ref (&table->_kv, limits, SIZEOF_ELT, 0, 0, kv_pos); if (!e) { lim_free (limits, saved_key); return 0; } e->_key = saved_key; if (0 > oblist_insert_n (&table->_order, limits, sizeof (ssize_t), 0, 0, order_should_be, 1, (void *)&kv_pos)) { obtable_free (&table->_kv, limits, SIZEOF_ELT, 0, 0, kv_pos); lim_free (limits, saved_key); return 0; } return (void *)e->_value; } } int symbol_table_entry_delete (t_symbol_table * const table, alloc_limits const limits, ssize_t const elt_size, const t_uchar * const key) { ssize_t order; ssize_t * kv_pos_box; ssize_t kv_pos; if (!table || !key) return 0; order = oblist_find (00, &table->_order, limits, sizeof (ssize_t), 0, 0, (void *)key, find_cmp, 0); if (order < 0) return -1; kv_pos_box = (ssize_t *)oblist_burst (0, &table->_order, limits, sizeof (ssize_t), 0, 0, order, 1); if (!kv_pos_box) return -1; kv_pos = *kv_pos_box; obtable_free (&table->_kv, limits, SIZEOF_ELT, 0, 0, kv_pos); if (0 > oblist_delete_n (&table->_order, limits, sizeof (ssize_t), 0, 0, order, 1)) return -1; return 0; } /* tag: Tom Lord Wed Oct 27 11:39:44 2004 (symbol-table.c) */ tla-1.3.5+dfsg/src/hackerlab/identifiers/identifier.c0000644000175000017500000000410710457621774021252 0ustar useruser/* identifier.c: * **************************************************************** * Copyright (C) 2004 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/char/str.h" #include "hackerlab/oblists/oblist.h" #include "hackerlab/identifiers/identifier.h" /* __STDC__ prototypes for static functions */ static t_oblist * identifier_table (void); static int name_cmp (void * vkey, void * velt, void * ign); static t_oblist * identifier_table (void) { static int initialized = 0; static t_oblist table; if (!initialized) { if (0 > init_oblist (&table, lim_use_malloc, sizeof (t_uchar *), 0, 0)) { return 0; } initialized = 1; } return &table; } const t_uchar * intern_identifier (const t_uchar * const name) { ssize_t found_at; ssize_t would_be_at; t_uchar ** place; found_at = oblist_find (&would_be_at, identifier_table (), lim_use_malloc, sizeof (t_uchar *), 0, 0, (void *)name, name_cmp, 0); if (found_at >= 0) { place = (t_uchar **)oblist_burst (0, identifier_table (), lim_use_malloc, sizeof (t_uchar *), 0, 0, found_at, 1); } else { t_uchar * saved_name; saved_name = str_save (lim_use_malloc, name); if (!saved_name) return 0; if (0 > oblist_insert_n (identifier_table (), lim_use_malloc, sizeof (t_uchar *), 0, 0, would_be_at, 1, 0)) return 0; place = (t_uchar **)oblist_burst (0, identifier_table (), lim_use_malloc, sizeof (t_uchar *), 0, 0, would_be_at, 1); if (place) { *place = saved_name; } } if (!place) return 0; else return *place; } static int name_cmp (void * vkey, void * velt, void * ign) { t_uchar * key; t_uchar ** elt; key = (void *)vkey; elt = (void *)velt; if (!key && !elt) return 0; if (!key && (elt && *elt)) return -1; if (key && (!elt || !*elt)) return 1; return str_cmp (key, *elt); } /* tag: Tom Lord Wed Oct 27 23:05:15 2004 (identifier.c) */ tla-1.3.5+dfsg/src/hackerlab/identifiers/Makefile.in0000644000175000017500000000030210457621774021022 0ustar useruserinclude $(makefiles)/library-objects.mk ifeq ($(cgs__install_hackerlab),1) include $(makefiles)/install-includes.mk endif # tag: Tom Lord Sat Nov 20 18:15:10 2004 (identifiers/Makefile.in) # tla-1.3.5+dfsg/src/hackerlab/identifiers/identifier.h0000644000175000017500000000232210457621774021254 0ustar useruser/* identifier.h: * **************************************************************** * Copyright (C) 2004 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBAWIKI__IDENTIFIER_H #define INCLUDE__LIBAWIKI__IDENTIFIER_H #include "hackerlab/machine/types.h" #include "hackerlab/bugs/panic.h" #define Identifier_decl(C_STEM, STRING) \ static const t_uchar * \ Identifier_ ## C_STEM (void) \ { \ static const t_uchar * it = 0; \ if (!it) it = intern_identifier (STRING); \ return it; \ } extern int __identifier_unused_rubbish_ ## C_STEM #define Identifier_safe_decl(C_STEM, STRING) \ static const t_uchar * \ Identifier_ ## C_STEM (void) \ { \ static const t_uchar * it = 0; \ if (!it) it = intern_identifier (STRING); \ invariant (!!it); \ return it; \ } extern int __identifier_unused_rubbish_ ## C_STEM #define Identifier(STEM) (Identifier_ ## STEM ()) /* automatically generated __STDC__ prototypes */ extern const t_uchar * intern_identifier (const t_uchar * const name); #endif /* INCLUDE__LIBAWIKI__IDENTIFIER_H */ /* tag: Tom Lord Wed Oct 27 23:05:11 2004 (identifier.h) */ tla-1.3.5+dfsg/src/hackerlab/identifiers/identifier-table.h0000644000175000017500000001103610457621774022343 0ustar useruser/* identifier-table.h: * **************************************************************** * Copyright (C) 2004 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBAWIKI__IDENTIFIER_TABLE_H #define INCLUDE__LIBAWIKI__IDENTIFIER_TABLE_H #include "hackerlab/obtables/obtable.h" #include "hackerlab/oblists/oblist.h" typedef struct identifier_table t_identifier_table; typedef struct identifier_table_entry t_identifier_table_entry; struct identifier_table { t_obtable _kv; t_oblist _order; }; struct identifier_table_entry { struct obtable_elt _obtable_elt; const t_uchar * _key; t_uchar _value[1]; }; #define STATIC_DECL_IDENTIFIER_TABLE(STEM, TYPE) \ static t_identifier_table * \ STEM ## _table (void) \ { \ static t_identifier_table table; \ static int initialized = -1; \ if (initialized < 0) \ { \ initialized = init_identifier_table (&table, lim_use_malloc, sizeof (TYPE)); \ if (initialized < 0) return 0; \ } \ return &table; \ } \ static TYPE * \ STEM ## _find (t_uchar * key) \ { \ return (TYPE *)identifier_table_entry_find (STEM ## _table (), lim_use_malloc, sizeof (TYPE), key); \ } \ static TYPE * \ STEM ## _ensure (t_uchar * key) \ { \ return (TYPE *)identifier_table_entry_ensure (STEM ## _table (), lim_use_malloc, sizeof (TYPE), key); \ } \ static ssize_t \ STEM ## _index (t_uchar * key) \ { \ return identifier_table_entry_index (STEM ## _table (), lim_use_malloc, sizeof (TYPE), key); \ } \ static ssize_t \ STEM ## _ensure_index (t_uchar * key) \ { \ if (!STEM ## _ensure (key)) \ return -1; \ else \ return identifier_table_entry_index (STEM ## _table (), lim_use_malloc, sizeof (TYPE), key); \ } \ static TYPE * \ STEM ## _n (t_uchar ** key_ret, ssize_t index) \ { \ return (TYPE *)identifier_table_entry_n (key_ret, STEM ## _table (), lim_use_malloc, sizeof (TYPE), index); \ } /* automatically generated __STDC__ prototypes */ extern int init_identifier_table (t_identifier_table * table, alloc_limits limits, ssize_t elt_size); extern int uninit_identifier_table (t_identifier_table * table, alloc_limits limits, ssize_t elt_size); extern ssize_t identifier_table_n_entries (t_identifier_table * table, alloc_limits limits, ssize_t elt_size); extern ssize_t identifier_table_room (t_identifier_table * table, alloc_limits limits, ssize_t elt_size); extern void * identifier_table_entry_n (const t_uchar ** key_return, t_identifier_table * table, alloc_limits limits, ssize_t elt_size, ssize_t n); extern void * identifier_table_nth_entry (const t_uchar ** key_return, t_identifier_table * table, alloc_limits limits, ssize_t elt_size, ssize_t n); extern ssize_t identifier_table_entry_index (t_identifier_table * table, alloc_limits limits, ssize_t elt_size, const t_uchar * key); extern void * identifier_table_entry_find (t_identifier_table * table, alloc_limits limits, ssize_t elt_size, const t_uchar * key); extern void * identifier_table_entry_ensure (t_identifier_table * table, alloc_limits limits, ssize_t elt_size, const t_uchar * key); extern int identifier_table_entry_delete (t_identifier_table * table, alloc_limits limits, ssize_t elt_size, const t_uchar * key); #endif /* INCLUDE__LIBAWIKI__IDENTIFIER_TABLE_H */ /* tag: Tom Lord Thu Oct 28 11:31:23 2004 (libds/identifier-table.h) */ tla-1.3.5+dfsg/src/hackerlab/identifiers/PLUGIN/0000755000175000017500000000000010457621774017760 5ustar userusertla-1.3.5+dfsg/src/hackerlab/identifiers/PLUGIN/REQ0000644000175000017500000000005610457621774020333 0ustar useruseroblists identifiers identifiers libhackerlab tla-1.3.5+dfsg/src/hackerlab/identifiers/identifier-table.c0000644000175000017500000001717710457621774022352 0ustar useruser/* identifier-table.c: * **************************************************************** * Copyright (C) 2004 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/mem/mem.h" #include "hackerlab/char/str.h" #include "hackerlab/identifiers/identifier-table.h" /* __STDC__ prototypes for static functions */ static int find_cmp (void * vk, void * ve, void * vcl); #define SIZEOF_ELT (elt_size - 1 + sizeof (t_identifier_table_entry)) int init_identifier_table (t_identifier_table * table, alloc_limits limits, ssize_t elt_size) { if (!table) return -1; mem_set0 ((t_uchar *)table, sizeof (*table)); if (0 > init_obtable (&table->_kv, limits, SIZEOF_ELT, 0, 0)) return -1; if (0 > init_oblist (&table->_order, limits, sizeof(ssize_t), 0, 0)) return -1; return 0; } int uninit_identifier_table (t_identifier_table * table, alloc_limits limits, ssize_t elt_size) { if (!table) return -1; uninit_obtable (&table->_kv, limits, SIZEOF_ELT, 0, 0); uninit_oblist (&table->_order, limits, sizeof(ssize_t), 0, 0); mem_set0 ((t_uchar *)table, sizeof (*table)); return 0; } ssize_t identifier_table_n_entries (t_identifier_table * table, alloc_limits limits, ssize_t elt_size) { if (!table) return 0; return obtable_n_elts (&table->_kv, limits, SIZEOF_ELT, 0, 0); } ssize_t identifier_table_room (t_identifier_table * table, alloc_limits limits, ssize_t elt_size) { if (!table) return 0; return obtable_room (&table->_kv, limits, SIZEOF_ELT, 0, 0); } void * identifier_table_entry_n (const t_uchar ** key_return, t_identifier_table * table, alloc_limits limits, ssize_t elt_size, ssize_t n) { t_identifier_table_entry * e; if (!table) return 0; e = (t_identifier_table_entry *)obtable_ref (&table->_kv, limits, SIZEOF_ELT, 0, 0, n); if (!e) return 0; if (key_return) { *key_return = e->_key; } return (void *)e->_value; } void * identifier_table_nth_entry (const t_uchar ** key_return, t_identifier_table * table, alloc_limits limits, ssize_t elt_size, ssize_t n) { ssize_t * k_box; ssize_t k; t_identifier_table_entry * e; if (!table) return 0; k_box = (ssize_t *)oblist_burst (0, &table->_order, limits, sizeof (ssize_t), 0, 0, n, 1); if (!k_box) return 0; k = *k_box; e = (t_identifier_table_entry *)obtable_ref (&table->_kv, limits, SIZEOF_ELT, 0, 0, k); if (!e) return 0; if (key_return) { *key_return = e->_key; } return (void *)e->_value; } struct find_cmp_closure { t_identifier_table * table; alloc_limits limits; ssize_t elt_size; }; static int find_cmp (void * vk, void * ve, void * vcl) { const t_uchar * key; ssize_t * entry; struct find_cmp_closure * cl; const t_uchar * entry_key; key = (const t_uchar *)vk; entry = (ssize_t *)ve; cl = (struct find_cmp_closure *)vcl; if (!key && !entry) return 0; if (!key) return -1; if (!entry) return 1; if (!identifier_table_entry_n (&entry_key, cl->table, cl->limits, cl->elt_size, *entry)) { return 1; } if (key < entry_key) return -1; else if (key > entry_key) return 1; else return 0; } ssize_t identifier_table_entry_index (t_identifier_table * table, alloc_limits limits, ssize_t elt_size, const t_uchar * key) { struct find_cmp_closure cl; ssize_t order; ssize_t * kv_pos_box; ssize_t kv_pos; if (!table || !key) return 0; cl.table = table; cl.limits = limits; cl.elt_size = elt_size; order = oblist_find (0, &table->_order, limits, sizeof (ssize_t), 0, 0, (void *)key, find_cmp, (void *)&cl); if (order < 0) return 0; kv_pos_box = (ssize_t *)oblist_burst (0, &table->_order, limits, sizeof (ssize_t), 0, 0, order, 1); if (!kv_pos_box) return 0; kv_pos = *kv_pos_box; return kv_pos; } void * identifier_table_entry_find (t_identifier_table * table, alloc_limits limits, ssize_t elt_size, const t_uchar * key) { struct find_cmp_closure cl; ssize_t order; ssize_t * kv_pos_box; ssize_t kv_pos; t_identifier_table_entry * e; if (!table || !key) return 0; cl.table = table; cl.limits = limits; cl.elt_size = elt_size; order = oblist_find (0, &table->_order, limits, sizeof (ssize_t), 0, 0, (void *)key, find_cmp, (void *)&cl); if (order < 0) return 0; kv_pos_box = (ssize_t *)oblist_burst (0, &table->_order, limits, sizeof (ssize_t), 0, 0, order, 1); if (!kv_pos_box) return 0; kv_pos = *kv_pos_box; e = (t_identifier_table_entry *)obtable_ref (&table->_kv, limits, SIZEOF_ELT, 0, 0, kv_pos); if (!e) return 0; return (void *)e->_value; } void * identifier_table_entry_ensure (t_identifier_table * table, alloc_limits limits, ssize_t elt_size, const t_uchar * key) { struct find_cmp_closure cl; ssize_t order; ssize_t order_should_be; ssize_t kv_pos; t_identifier_table_entry * e; ssize_t * kv_pos_box; if (!table || !key) return 0; cl.table = table; cl.limits = limits; cl.elt_size = elt_size; order = oblist_find (&order_should_be, &table->_order, limits, sizeof (ssize_t), 0, 0, (void *)key, find_cmp, (void *)&cl); if (order >= 0) { kv_pos_box = (ssize_t *)oblist_burst (0, &table->_order, limits, sizeof (ssize_t), 0, 0, order, 1); if (!kv_pos_box) return 0; kv_pos = *kv_pos_box; e = (t_identifier_table_entry *)obtable_ref (&table->_kv, limits, SIZEOF_ELT, 0, 0, kv_pos); if (!e) return 0; return (void *)e->_value; } else { kv_pos = obtable_alloc (&table->_kv, limits, SIZEOF_ELT, 0, 0); e = (t_identifier_table_entry *)obtable_ref (&table->_kv, limits, SIZEOF_ELT, 0, 0, kv_pos); if (!e) { return 0; } e->_key = key; if (0 > oblist_insert_n (&table->_order, limits, sizeof (ssize_t), 0, 0, order_should_be, 1, (void *)&kv_pos)) { obtable_free (&table->_kv, limits, SIZEOF_ELT, 0, 0, kv_pos); return 0; } return (void *)e->_value; } } int identifier_table_entry_delete (t_identifier_table * table, alloc_limits limits, ssize_t elt_size, const t_uchar * key) { struct find_cmp_closure cl; ssize_t order; ssize_t * kv_pos_box; ssize_t kv_pos; if (!table || !key) return 0; cl.table = table; cl.limits = limits; cl.elt_size = elt_size; order = oblist_find (00, &table->_order, limits, sizeof (ssize_t), 0, 0, (void *)key, find_cmp, (void *)&cl); if (order < 0) return -1; kv_pos_box = (ssize_t *)oblist_burst (0, &table->_order, limits, sizeof (ssize_t), 0, 0, order, 1); if (!kv_pos_box) return -1; kv_pos = *kv_pos_box; obtable_free (&table->_kv, limits, SIZEOF_ELT, 0, 0, kv_pos); if (0 > oblist_delete_n (&table->_order, limits, sizeof (ssize_t), 0, 0, order, 1)) return -1; return 0; } /* tag: Tom Lord Thu Oct 28 11:31:54 2004 (libds/identifier-table.c) */ tla-1.3.5+dfsg/src/hackerlab/identifiers/symbol-table.h0000644000175000017500000001104610457621774021527 0ustar useruser/* symbol-table.h: * **************************************************************** * Copyright (C) 2004 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBAWIKI__SYMBOL_TABLE_H #define INCLUDE__LIBAWIKI__SYMBOL_TABLE_H #include "hackerlab/obtables/obtable.h" #include "hackerlab/oblists/oblist.h" typedef struct symbol_table t_symbol_table; typedef struct symbol_table_entry t_symbol_table_entry; struct symbol_table { t_obtable _kv; t_oblist _order; }; struct symbol_table_entry { struct obtable_elt _obtable_elt; t_uchar * _key; t_uchar _value[1]; }; #define STATIC_DECL_SYMBOL_TABLE(STEM, TYPE) \ static t_symbol_table * \ STEM ## _table (void) \ { \ static t_symbol_table table; \ static int initialized = -1; \ if (initialized < 0) \ { \ initialized = init_symbol_table (&table, lim_use_malloc, sizeof (TYPE)); \ if (initialized < 0) return 0; \ } \ return &table; \ } \ static TYPE * \ STEM ## _find (const t_uchar * const key) \ { \ return (TYPE *)symbol_table_entry_find (STEM ## _table (), lim_use_malloc, sizeof (TYPE), key); \ } \ static TYPE * \ STEM ## _ensure (const t_uchar * const key) \ { \ return (TYPE *)symbol_table_entry_ensure (STEM ## _table (), lim_use_malloc, sizeof (TYPE), key); \ } \ static ssize_t \ STEM ## _index (const t_uchar * const key) \ { \ return symbol_table_entry_index (STEM ## _table (), lim_use_malloc, sizeof (TYPE), key); \ } \ static ssize_t \ STEM ## _ensure_index (const t_uchar * const key) \ { \ if (!STEM ## _ensure (key)) \ return -1; \ else \ return symbol_table_entry_index (STEM ## _table (), lim_use_malloc, sizeof (TYPE), key); \ } \ static TYPE * \ STEM ## _n (const t_uchar ** const key_ret, ssize_t const index) \ { \ return (TYPE *)symbol_table_entry_n (key_ret, STEM ## _table (), lim_use_malloc, sizeof (TYPE), index); \ } /* automatically generated __STDC__ prototypes */ extern int init_symbol_table (t_symbol_table * const table, alloc_limits const limits, ssize_t const elt_size); extern int uninit_symbol_table (t_symbol_table * const table, alloc_limits const limits, ssize_t const elt_size); extern ssize_t symbol_table_n_entries (t_symbol_table * const table, alloc_limits const limits, ssize_t const elt_size); extern ssize_t symbol_table_room (t_symbol_table * const table, alloc_limits const limits, ssize_t const elt_size); extern void * symbol_table_entry_n (const t_uchar ** const key_return, t_symbol_table * const table, alloc_limits const limits, ssize_t const elt_size, ssize_t const n); extern void * symbol_table_nth_entry (const t_uchar ** const key_return, t_symbol_table * const table, alloc_limits const limits, ssize_t const elt_size, ssize_t const n); extern ssize_t symbol_table_entry_index (t_symbol_table * const table, alloc_limits const limits, ssize_t const elt_size, const t_uchar * const key); extern void * symbol_table_entry_find (t_symbol_table * const table, alloc_limits const limits, ssize_t const elt_size, const t_uchar * const key); extern void * symbol_table_entry_ensure (t_symbol_table * const table, alloc_limits const limits, ssize_t const elt_size, const t_uchar * const key); extern int symbol_table_entry_delete (t_symbol_table * const table, alloc_limits const limits, ssize_t const elt_size, const t_uchar * const key); #endif /* INCLUDE__LIBAWIKI__SYMBOL_TABLE_H */ /* tag: Tom Lord Wed Oct 27 11:22:41 2004 (symbol-table.h) */ tla-1.3.5+dfsg/src/hackerlab/hash/0000755000175000017500000000000010457621774015400 5ustar userusertla-1.3.5+dfsg/src/hackerlab/hash/md5-utils.h0000644000175000017500000000210310457621774017370 0ustar useruser/* md5-utils.h: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__HASH__MD5_UTILS_H #define INCLUDE__HASH__MD5_UTILS_H #include "hackerlab/hash/md5.h" /* automatically generated __STDC__ prototypes */ extern t_uchar * md5_ascii_for_str (alloc_limits limits, t_uchar * string); extern t_uchar * md5_ascii_for_str_n (alloc_limits limits, t_uchar * string, size_t length); extern void md5_for_str (t_uchar * result, alloc_limits limits, t_uchar * string); extern void md5_for_str_n (t_uchar * result, alloc_limits limits, t_uchar * string, size_t length); #endif /* INCLUDE__HASH__MD5_UTILS_H */ /* tag: Tom Lord Sun Dec 28 11:37:31 2003 (md5-utils.h) */ tla-1.3.5+dfsg/src/hackerlab/hash/hashing.doc0000644000175000017500000000161310457621774017511 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:57:15 2001 (hashing.doc) */ /************************************************************************ *(h0 "Hashing") * Hash values and hash tables are useful in many programs. The Hackerlab C Library provides: \hash utilities/ -- functions for computing hash values in common situations. Hash functions for strings can be found elsewhere. (For strings of 8-bit characters, see xref:"Computing Hash Values From Strings". For Unicode strings, see *XREF*.) \an md5 implementation/ -- functions to compute an md5 digest of an arbitrary string of bytes. \hash tables/ -- a general-purpose implementation of variably sized hash tables. */ /*(menu) */ /*(include-documentation "hash-utils.c") */ /*(include-documentation "md5-utils.c") */ /*(include-documentation "md5.c") */ /*(include-documentation "sha1.c") */ /*(include-documentation "hashtree.c") */ tla-1.3.5+dfsg/src/hackerlab/hash/hashtree.c0000644000175000017500000003563210457621774017360 0ustar useruser/* hashtree.c - hash tables * **************************************************************** * Copyright (C) 1998, 2000 Thomas Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/mem/mem.h" #include "hackerlab/mem/must-malloc.h" #include "hackerlab/hash/hashtree.h" /************************************************************************ *(h1 "Hash Table Trees" * :include ("hash/hashtree.h")) * * The hashtree library implements in-core hash tables that are * automatically dynamically resized. Callers are given complete * control over memory allocation of hash table data structures. */ /*(menu) */ /*(include-documentation "hashtree.h") */ #define RULES_LIMITS(R) ((R) ? (R)->limits : lim_use_must_malloc) static struct hashtree * default_hash_alloc (struct hashtree_rules * rules) { return (struct hashtree *)lim_malloc (RULES_LIMITS (rules), sizeof (struct hashtree)); } static struct hashtree_item * default_hash_item_alloc (void * key, struct hashtree_rules * rules) { struct hashtree_item * it; it = (struct hashtree_item *)lim_malloc (RULES_LIMITS (rules), sizeof (*it)); if (!it) return 0; it->key = key; it->binding = 0; return it; } static void default_free_hash (struct hashtree * tab, struct hashtree_rules * rules) { lim_free (RULES_LIMITS (rules), (char *)tab); } static void default_free_hash_item (struct hashtree_item * item, struct hashtree_rules * rules) { lim_free (RULES_LIMITS (rules), (char *)item); } static int default_eq (void * va, void * vb, struct hashtree_rules * rules) { return va == vb; } #define EQ(rules) ((rules && rules->eq) ? rules->eq : default_eq) #define HASH_ALLOC(rules) ((rules && rules->hash_alloc) ? rules->hash_alloc : default_hash_alloc) #define FREE_HASH(rules) ((rules && rules->free_hash) ? rules->free_hash : default_free_hash) #define ITEM_ALLOC(rules) ((rules && rules->hash_item_alloc) \ ? rules->hash_item_alloc : default_hash_item_alloc) #define FREE_HASH_ITEM(rules) ((rules && rules->free_hash_item) \ ? rules->free_hash_item : default_free_hash_item) /************************************************************************ *(h2 "Creating Hashtree Rules") * * * */ /*(c hashtree_make_rules) * struct hashtree_rules * hashtree_make_rules (alloc_limits limits); * * Allocate a new `hashtree_rules' structure. (See * xref:"hashtree_rules".) * * The `limits' field of the allocated structure is initialized to `limits'. * * The function pointers in the allocated structure point to * default implementations. Those implementations will use `limits' * when performing allocations. * * If an allocation failure occurs, this function returns 0. */ struct hashtree_rules * hashtree_make_rules (alloc_limits limits) { struct hashtree_rules * _; _ = (struct hashtree_rules *)lim_malloc (limits, sizeof (*_)); if (!_) return 0; _->eq = default_eq; _->hash_alloc = default_hash_alloc; _->free_hash = default_free_hash; _->hash_item_alloc = default_hash_item_alloc; _->free_hash_item = default_free_hash_item; _->limits = limits; return _; } /*(c hashtree_init_rules) * void hashtree_init_rules (struct hashtree_rules * rules, * hashtree_eq_fn eq, * hashtree_alloc_fn hash_alloc, * free_hashtree_fn free_hash, * hashtree_alloc_item_fn hash_item_alloc, * free_hashtree_item_fn free_hash_item, * alloc_limits limits); * * Initialize a `struct hashtree_rules' structure. * * It is also possible to initialize a rules structure by filling in * the fields directly. The advantage of using `hashtree_init_rules' * is that all fields must be specified -- omitting a field will cause * a compilation error. */ void hashtree_init_rules (struct hashtree_rules * rules, hashtree_eq_fn eq, hashtree_alloc_fn hash_alloc, free_hashtree_fn free_hash, hashtree_alloc_item_fn hash_item_alloc, free_hashtree_item_fn free_hash_item, alloc_limits limits) { rules->eq = eq; rules->hash_alloc = hash_alloc; rules->free_hash = free_hash; rules->hash_item_alloc = hash_item_alloc; rules->free_hash_item = free_hash_item; rules->limits = limits; } /*(c hashtree_free_limit_rules) * void hashtree_free_limit_rules (struct hashtree_rules * rules); * * Free storage of a `struct hashtree_rules' allocated by * `hashtree_make_rules'. */ void hashtree_free_limit_rules (struct hashtree_rules * rules) { lim_free (rules->limits, rules); } /************************************************************************ *(h2 "Hash Tree Allocation") * * * */ /*(c hashtree_new) * struct hashtree * hashtree_new (struct hashtree_rules * rules); * * Allocate a new hash table. * * `rules' specifies how memory is allocated for this hash tree, and * how keys are compared for equality. `rules' may be 0, in which * case default implementations are used. See xref:"Types for * Hashtrees". * * If an allocation failure occurs, this function returns 0. */ struct hashtree * hashtree_alloc (struct hashtree_rules * rules) { struct hashtree * it; it = HASH_ALLOC(rules) (rules); if (!it) return 0; mem_set ((t_uchar *)it, 0, sizeof (*it)); return it; } /*(c hashtree_free) * void hashtree_free (struct hashtree * it, * hashtree_free_data_fn freefn, * struct hashtree_rules * rules); * * Free all storage allocated to a hash table, including the `struct * hashtree' itself. (See `hashtree_free_static'.) * * The `freefn' is: * * typedef void * (*hashtree_free_data_fn) (struct hashtree_item * it, * struct hashtree_rules * rules); * * When called, it should free any storage associated with * the `key' and `binding' fields of `it'. * */ void hashtree_free (struct hashtree * it, hashtree_free_data_fn freefn, struct hashtree_rules * rules) { hashtree_free_static (it, freefn, rules); FREE_HASH(rules) (it, rules); } /*(c hashtree_free_static) * void hashtree_free_static (struct hashtree * tab, * hashtree_free_data_fn freefn, * struct hashtree_rules * rules); * * Free all storage allocated to a hash table, but not the `struct * hashtree' itself. (See `hashtree_free'.) */ void hashtree_free_static (struct hashtree * tab, hashtree_free_data_fn freefn, struct hashtree_rules * rules) { int x; for (x = 0; x < 16; ++x) if (bitset_is_member (&tab->nested_p, x)) { hashtree_free_static ((struct hashtree *)tab->children[x], freefn, rules); FREE_HASH (rules) ((struct hashtree *)tab->children[x], rules); } else { struct hashtree_item * them = (struct hashtree_item *)tab->children[x]; while (them) { struct hashtree_item * that; that = them; them = that->next_same_hash; if (freefn) freefn (that, rules); FREE_HASH_ITEM (rules) (that, rules); } } } /************************************************************************ *(h2 "Hash Tree Access") * * * */ static unsigned long hashtree_masks[4] = { 0x12488421, 0x96699669, 0xbe7dd7eb, 0xffffffff }; static int shuffled_bytes[] = { 245, 184, 171, 36, 93, 194, 192, 143, 207, 89, 63, 175, 203, 231, 47, 238, 103, 67, 176, 102, 80, 133, 24, 155, 91, 141, 234, 58, 44, 191, 218, 157, 13, 168, 160, 113, 211, 213, 252, 236, 2, 19, 21, 148, 111, 251, 165, 74, 124, 25, 181, 210, 250, 195, 235, 97, 185, 1, 179, 198, 105, 101, 5, 220, 35, 162, 142, 41, 200, 209, 224, 71, 201, 134, 69, 48, 65, 170, 72, 167, 145, 205, 28, 88, 215, 81, 214, 78, 118, 26, 123, 84, 140, 49, 45, 8, 7, 107, 227, 60, 59, 32, 30, 82, 31, 189, 131, 17, 66, 239, 64, 10, 149, 40, 130, 146, 54, 147, 9, 114, 4, 254, 241, 116, 110, 249, 57, 233, 37, 55, 206, 100, 177, 119, 139, 158, 108, 75, 94, 23, 186, 152, 244, 27, 38, 33, 188, 87, 76, 166, 228, 52, 120, 99, 247, 174, 51, 183, 3, 161, 246, 135, 14, 178, 11, 216, 77, 172, 122, 154, 39, 253, 104, 34, 164, 230, 219, 242, 68, 151, 180, 115, 173, 73, 212, 90, 125, 29, 22, 221, 56, 121, 255, 204, 83, 169, 182, 112, 96, 187, 20, 106, 79, 15, 61, 223, 70, 85, 53, 197, 217, 232, 196, 95, 136, 150, 243, 109, 129, 202, 208, 237, 144, 156, 86, 127, 62, 248, 138, 229, 153, 226, 240, 199, 50, 12, 193, 98, 137, 126, 0, 159, 222, 18, 163, 117, 190, 46, 225, 132, 16, 43, 128, 42, 92, 6 }; /* hash to bucket */ #define H2B(X) \ (0xf & ( shuffled_bytes[X & 0xff] \ ^ shuffled_bytes[((X) >> 4) & 0xff] \ ^ shuffled_bytes[((X) >> 8) & 0xff] \ ^ shuffled_bytes[((X) >> 12) & 0xff] \ ^ shuffled_bytes[((X) >> 16) & 0xff] \ ^ shuffled_bytes[((X) >> 20) & 0xff] \ ^ shuffled_bytes[((X) >> 24) & 0xff] \ ^ shuffled_bytes[((X) >> 28) & 0xff])) /*(c hashtree_find) * struct hashtree_item * hashtree_find (struct hashtree * table, * unsigned long hash, * void * key, * struct hashtree_rules * rules); * * Search for an entry for `key' in hash table `table' and return the * hash table item for that key (or 0). `hash' is the hash value for * `key'. */ struct hashtree_item * hashtree_find (struct hashtree * table, unsigned long hash, void * key, struct hashtree_rules * rules) { hashtree_eq_fn eq; int maskc; unsigned long mask; int bucket; eq = EQ (rules); maskc = 0; mask = hashtree_masks [0]; bucket = H2B(hash & mask); while (bitset_is_member (&table->nested_p, bucket)) { table = (struct hashtree *)(table->children [bucket]); ++maskc; mask = hashtree_masks[maskc]; bucket = H2B (hash & mask); } { struct hashtree_item * it; it = (struct hashtree_item *)(table->children[bucket]); while (it) if (eq (it->key, key, rules)) return it; else it = it->next_same_hash; } return 0; } static int overflows (struct hashtree_item * bucket) { return ( bucket && bucket->next_same_hash && bucket->next_same_hash->next_same_hash && bucket->next_same_hash->next_same_hash->next_same_hash); } /*(c hashtree_store) * struct hashtree_item * hashtree_store (struct hashtree * table, * unsigned long hash, * void * key, * struct hashtree_rules * rules); * * Ensure that there is an entry for `key' in hash table `table' and * return the hash table item for that key. `hash' is the hash value * for `key'. * * If `key' is not already present in `table', this function uses * `rules->hash_item_alloc' to create a new key/value pair. * * If an allocation failure occurs, this function returns 0. */ struct hashtree_item * hashtree_store (struct hashtree * table, unsigned long hash, void * key, struct hashtree_rules * rules) { hashtree_eq_fn eq; int maskc; long mask; int bucket; int depth; eq = EQ (rules); maskc = 0; mask = hashtree_masks [0]; bucket = H2B(hash & mask); depth = 0; while (bitset_is_member (&table->nested_p, bucket)) { table = (struct hashtree *)(table->children [bucket]); ++maskc; mask = hashtree_masks[maskc]; bucket = H2B(hash & mask); ++depth; } { struct hashtree_item * it; it = (struct hashtree_item *)(table->children[bucket]); while (it) if (eq (it->key, key, rules)) return it; else it = it->next_same_hash; } { if ( (depth < 3) && (overflows ((struct hashtree_item *)table->children [bucket]))) { struct hashtree * newtab; newtab = HASH_ALLOC(rules) (rules); if (!newtab) return 0; mem_set0 ((char *)newtab, sizeof (*newtab)); newtab->parent = table; { struct hashtree_item * them; unsigned long newmask; them = (struct hashtree_item *)table->children[bucket]; newmask = hashtree_masks[maskc + 1]; while (them) { struct hashtree_item * save = them->next_same_hash; int new_buck = H2B(them->hash & newmask); them->next_same_hash = ((struct hashtree_item *) newtab->children[new_buck]); ((struct hashtree_item **)newtab->children)[new_buck] = them; them->table = newtab; them = save; ++newtab->refs; --table->refs; } ((struct hashtree **)table->children)[bucket] = newtab; bitset_adjoin (&table->nested_p, bucket); ++table->refs; table = newtab; bucket = H2B(hash & newmask); } } } { struct hashtree_item * it; it = ITEM_ALLOC(rules) (key, rules); if (!it) return 0; it->hash = hash; it->table = table; /* KEY and BINDING are to be set in hash_item_alloc */ it->next_same_hash = (struct hashtree_item *)table->children [bucket]; ((struct hashtree_item **)table->children)[bucket] = it; ++table->refs; return it; } } /*(c hashtree_delete) * void hashtree_delete (struct hashtree_item * it, * struct hashtree_rules * rules); * * Remove hash table item `it' from its hash table. * * To remove a particular key, use `hashtree_find' to retrieve * its key/value pair, and `hashtree_delete' to remove that pair * from the tree. * * This function does not free any storage assocated with * the key or the binding. * * This function does call `rules->free_hash_item' to free `it'. */ void hashtree_delete (struct hashtree_item * it, struct hashtree_rules * rules) { if (it) { struct hashtree * table; unsigned long hash; int depth; int bucket; struct hashtree_item ** pos; table = it->table; hash = it->hash; depth = (table->parent ? (table->parent->parent ? (table->parent->parent->parent ? 3 : 2) : 1) : 0); bucket = H2B (hash & hashtree_masks [depth]); pos = (struct hashtree_item **)&table->children [bucket]; while (*pos != it) pos = &(*pos)->next_same_hash; *pos = it->next_same_hash; FREE_HASH_ITEM(rules) (it, rules); --table->refs; while (!table->refs && depth) { struct hashtree * empty_table; empty_table = table; table = table->parent; --depth; bucket = H2B(hash & hashtree_masks [depth]); --table->refs; table->children[bucket] = 0; bitset_remove (&table->nested_p, bucket); FREE_HASH (rules) (empty_table, rules); } } } void hashtree_fold (struct hashtree *table, hashtree_fold_fn foldfn, void *user_data, struct hashtree_rules * rules) { int bucket; for (bucket = 0; bucket < 16; ++bucket) { if (bitset_is_member (&table->nested_p, bucket)) hashtree_fold ((struct hashtree *)(table->children [bucket]), foldfn, user_data, rules); else { struct hashtree_item * them = (struct hashtree_item *)table->children[bucket]; while (them) { struct hashtree_item * that; that = them; them = that->next_same_hash; foldfn (that, user_data, rules); } } } } tla-1.3.5+dfsg/src/hackerlab/hash/=scaffolding/0000755000175000017500000000000010457621774017754 5ustar userusertla-1.3.5+dfsg/src/hackerlab/hash/=scaffolding/=shuffle2-8.c0000644000175000017500000000164210457621774022103 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:41:36 2001 (=shuffle2-8.c) */ /* =shuffle2-8.c - more scaffolding for hash routines * **************************************************************** * Copyright (C) 2000 Thomas Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ /* This is handy for generating the initializer for * "static int shuffled_bytes[] = " in "hashtree.c". * * cc -o =shuffle2-8 ./=shuffle2-8.c ; ./=shuffle2-8 ; rm =shuffle2-8 * */ #include #include #include #include #include #include int ar [8] = { 0, 1, 2, 3, 4, 5, 6, 7 }; int main (int argc, char ** argv) { int x; srandom (time (0)); for (x = sizeof (ar) / sizeof (ar[0]); x; --x) { int i; i = random () % x; printf ("%d\n", ar[i]); ar[i] = ar[x - 1]; } return 0; } tla-1.3.5+dfsg/src/hackerlab/hash/=scaffolding/=shuffle2.c0000644000175000017500000000402610457621774021735 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:41:36 2001 (=shuffle2.c) */ /* =shuffle2.c - more scaffolding for hash routines * **************************************************************** * Copyright (C) 2000 Thomas Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ /* This is handy for generating the initializer for * "static int shuffled_bytes[] = " in "hashtree.c". * * cc -o =shuffle2 =shuffle2.c ; ./=shuffle2 ; rm =shuffle2 * */ #include #include #include #include #include #include int ar [256] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255 }; int main (int argc, char ** argv) { int x; srandom (time (0)); for (x = 256; x; --x) { int i; i = random () % x; printf ("%d\n", ar[i]); ar[i] = ar[x - 1]; } return 0; } tla-1.3.5+dfsg/src/hackerlab/hash/=scaffolding/=shuffle.c0000644000175000017500000000376310457621774021662 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:41:35 2001 (=shuffle.c) */ /* =shuffle.c - scaffolding for hash routines * **************************************************************** * Copyright (C) 2000 Thomas Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ /* This is handy for generating the initializer for * "static int shuffled_bytes[] = " in "hashtree.c". * * cc -o =shuffle =shuffle.c ; ./=shuffle ; rm =shuffle * */ #include #include #include #include #include #include int ar [256] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255 }; int main (int argc, char ** argv) { int x; for (x = 256; x; --x) { int i; i = random () % x; printf ("%d\n", ar[i]); ar[i] = ar[x - 1]; } return 0; } tla-1.3.5+dfsg/src/hackerlab/hash/sha1-utils.c0000644000175000017500000000601410457621774017537 0ustar useruser/* sha1-utils.c: * **************************************************************** * Copyright (C) 2003 Tom Lord * Adapted for SHA1: * Copyright (C) 2004 Colin Walters * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/char/str.h" #include "hackerlab/hash/sha1-utils.h" /************************************************************************ *(h1 "SHA1 Convenience Functions") * * * */ /*(c sha1_ascii_for_str) * t_uchar * sha1_ascii_for_str (alloc_limits limits, * t_uchar * string); * * Return a 0-terminated (41 bytes, total) string containing * a hexadecimal expression of the SHA1 hash of `string'. * * This procedure internally allocates and frees memory using * `limits'. */ t_uchar * sha1_ascii_for_str (alloc_limits limits, t_uchar * string) { return sha1_ascii_for_str_n (limits, string, str_length (string)); } /*(c sha1_ascii_for_str_n) * t_uchar * sha1_ascii_for_str_n (alloc_limits limits, * t_uchar * string, * size_t length); * * Return a 0-terminated (41 bytes, total) string containing a * hexadecimal expression of the SHA1 hash of the `length'-byte * `string'. * * This procedure internally allocates and frees memory using * `limits'. */ t_uchar * sha1_ascii_for_str_n (alloc_limits limits, t_uchar * string, size_t length) { t_uchar binary[20]; sha1_for_str_n (binary, limits, string, length); return sha1_alloc_ascii (limits, binary); } /*(c sha1_for_str) * void sha1_for_str (t_uchar * result, * alloc_limits limits, * t_uchar * string); * * Fill the 20-byte array `result' with the (binary) SHA1 * hash of `string'. * * This procedure internally allocates and frees memory using * `limits'. */ void sha1_for_str (t_uchar * result, alloc_limits limits, t_uchar * string) { return sha1_for_str_n (result, limits, string, str_length (string)); } /*(c sha1_for_str_n) * void sha1_for_str_n (t_uchar * result, * alloc_limits limits, * t_uchar * string, * size_t length); * * Fill the 20-byte array `result' with the (binary) SHA1 * hash of the `length'-byte `string'. * * This procedure internally allocates and frees memory using * `limits'. */ void sha1_for_str_n (t_uchar * result, alloc_limits limits, t_uchar const * string, size_t length) { sha1_context_t context; context = make_sha1_context (limits); sha1_scan (context, string, length); sha1_final (result, context); } /** * \brief get a sha1_t for a memory region */ sha1_t sha1_for_bytes (t_uchar const * bytes, size_t length) { sha1_t result; sha1_for_str_n ((t_uchar *)&result, lim_use_must_malloc, bytes, length); return result; } /* tag: Colin Walters Mon, 05 Jan 2004 20:11:18 -0500 (sha1-utils.c) */ tla-1.3.5+dfsg/src/hackerlab/hash/sha1.c0000644000175000017500000003207310457621774016405 0ustar useruser/* sha.c - Functions to compute the SHA1 hash (message-digest) of files or blocks of memory. Complies to the NIST specification FIPS-180-1. Copyright (C) 2000, 2001, 2003 Scott G. Miller Modified for hackerlab: Copyright (C) 2004 Colin Walters Credits: Robert Klep -- Expansion function fix */ #include "hackerlab/bugs/panic.h" #include "hackerlab/machine/endian.h" #include "hackerlab/mem/mem.h" #include "hackerlab/char/str.h" #include "hackerlab/fmt/cvt.h" #include "hackerlab/hash/sha1.h" /* Not-swap is a macro that does an endian swap on architectures that are big-endian, as SHA needs some data in a little-endian format */ /************************************************************************ *(h1 "SHA1 Routines") * * The SHA1 routines allow you to compute an SHA1 message digest * According to the definition of SHA1 in RFC 3174 from September 2001. * */ /* Structure to save state of computation between the single steps. */ struct sha1_context { sha1_t current_sha1; t_uint32 total[2]; t_uint32 buflen; t_uchar buffer[128]; }; static void sha1_process_blocks (const void *buffer, size_t len, sha1_context_t ctx); #if MACHINE_IS_BIGENDIAN # define NOTSWAP(n) (n) # define SWAP(n) \ (((n) << 24) | (((n) & 0xff00) << 8) | (((n) >> 8) & 0xff00) | ((n) >> 24)) #else # define NOTSWAP(n) \ (((n) << 24) | (((n) & 0xff00) << 8) | (((n) >> 8) & 0xff00) | ((n) >> 24)) # define SWAP(n) (n) #endif /* This array contains the bytes used to pad the buffer to the next 64-byte boundary. (RFC 1321, 3.1: Step 1) */ static const t_uchar fillbuf[64] = { 0x80, 0 /* , 0, 0, ... */ }; /*(c make_sha1_context) * sha1_context_t make_sha1_context (alloc_limits limits); * * Allocate and initialize an object which will keep track of the * state of an sha1 digest computation. */ sha1_context_t make_sha1_context (alloc_limits limits) { sha1_context_t ctx = 0; ctx = lim_malloc (limits, sizeof (*ctx)); sha1_context_reset (ctx); return ctx; } /*(c sha1_context_reset) * void sha1_context_reset (sha1_context_t ctx); * * Reinitialize a SHA1 state object. This will * undo the effects of any previous calls to * `sha1_scan'. */ void sha1_context_reset (sha1_context_t ctx) { if (ctx) { ctx->current_sha1.A = 0x67452301; ctx->current_sha1.B = 0xefcdab89; ctx->current_sha1.C = 0x98badcfe; ctx->current_sha1.D = 0x10325476; ctx->current_sha1.E = 0xc3d2e1f0; ctx->total[0] = ctx->total[1] = 0; ctx->buflen = 0; } } /*(c free_sha1_context) * void free_sha1_context (alloc_limits limits, sha1_context_t ctx); * * Free all resources associated with an sha1 state object. */ void free_sha1_context (alloc_limits limits, sha1_context_t ctx) { lim_free (limits, ctx); } /*(c sha1_scan) * void sha1_scan (sha1_context_t hd, t_uchar * inbuf, size_t inlen); * * Scan the next `inlen' bytes of `inbuf', treating them as subsequent * bytes in a message for which we are computing an sha1 digest. * * This function may be called repeatedly on sequential ``bursts'' * of a total message. */ void sha1_scan (sha1_context_t ctx, const t_uchar *buffer, size_t len) { /* When we already have some bits in our internal buffer concatenate both inputs first. */ if (ctx->buflen != 0) { size_t left_over = ctx->buflen; size_t add = 128 - left_over > len ? len : 128 - left_over; mem_cpy (&ctx->buffer[left_over], buffer, add); ctx->buflen += add; if (ctx->buflen > 64) { sha1_process_blocks (ctx->buffer, ctx->buflen & ~63, ctx); ctx->buflen &= 63; /* The regions in the following copy operation cannot overlap. */ mem_cpy (ctx->buffer, &ctx->buffer[(left_over + add) & ~63], ctx->buflen); } buffer = (const t_uchar *) buffer + add; len -= add; } /* Process available complete blocks. */ if (len >= 64) { sha1_process_blocks (buffer, len & ~63, ctx); buffer = (const t_uchar *) buffer + (len & ~63); len &= 63; } /* Move remaining bytes in internal buffer. */ if (len > 0) { size_t left_over = ctx->buflen; mem_cpy (&ctx->buffer[left_over], buffer, len); left_over += len; if (left_over >= 64) { sha1_process_blocks (ctx->buffer, 64, ctx); left_over -= 64; mem_cpy (ctx->buffer, &ctx->buffer[64], left_over); } ctx->buflen = left_over; } } /*(c sha1_final) * void sha1_final (t_uchar * result, sha1_context_t ctx); * * Declare that a complete message has been scanned using * `state' and `sha1_scan()'. * * Return the 20-byte SHA1 digest in `result', which must point to * storage for at least 20 bytes. * * As a side-effect, `state' is reinitialized and may be used * again with `sha1_scan ()' to process a new message. */ void sha1_final (t_uchar *result, sha1_context_t ctx) { /* Take yet unprocessed bytes into account. */ t_uint32 bytes = ctx->buflen; size_t pad; /* Now count remaining bytes. */ ctx->total[0] += bytes; if (ctx->total[0] < bytes) ++ctx->total[1]; pad = bytes >= 56 ? 64 + 56 - bytes : 56 - bytes; mem_cpy (&ctx->buffer[bytes], fillbuf, pad); /* Put the 64-bit file length in *bits* at the end of the buffer. */ *(t_uint32 *) &ctx->buffer[bytes + pad + 4] = NOTSWAP (ctx->total[0] << 3); *(t_uint32 *) &ctx->buffer[bytes + pad] = NOTSWAP ((ctx->total[1] << 3) | (ctx->total[0] >> 29)); /* Process last bytes. */ sha1_process_blocks (ctx->buffer, bytes + pad + 8, ctx); ((t_uint32 *) result)[0] = NOTSWAP (ctx->current_sha1.A); ((t_uint32 *) result)[1] = NOTSWAP (ctx->current_sha1.B); ((t_uint32 *) result)[2] = NOTSWAP (ctx->current_sha1.C); ((t_uint32 *) result)[3] = NOTSWAP (ctx->current_sha1.D); ((t_uint32 *) result)[4] = NOTSWAP (ctx->current_sha1.E); sha1_context_reset (ctx); } /*(c sha1_alloc_ascii) * t_uchar * sha1_alloc_ascii (alloc_limits limits, t_uchar * result); * * Return a newly allocated 41-byte 0-terminated ascii string * containing a hexadecimal version of the 20-byte binary sha1 sum * pointed to by `result'. */ t_uchar * sha1_alloc_ascii (alloc_limits limits, t_uchar * result) { t_uchar * answer = 0; answer = lim_malloc (limits, 41); if (!answer) return 0; answer[40] = 0; sha1_ascii (answer, result); return answer; } /*(c sha1_ascii) * void sha1_ascii (t_uchar * answer, t_uchar * result); * * Format a 40-byte ascii string containing a hexadecimal version of * the 20-byte binary SHA1 sum pointed to by `result'. * * This function does not add a final 0-byte to the string. */ void sha1_ascii (t_uchar * answer, t_uchar * result) { int x; for (x = 0; x < 20; ++x) { int hi = (0xf & (result[x] >> 4)); int lo = (0xf & result[x]); answer[2 * x] = ((hi >= 10) ? ('a' + (hi - 10)) : ('0' + hi)); answer[2 * x + 1] = ((lo >= 10) ? ('a' + (lo - 10)) : ('0' + lo)); } } /** * \brief Format a 40-byte ascii string containing a hexadecimal version of * the 20-byte binary SHA1 sum pointed to by `sha1'. * * This function does not add a final 0-byte to the string. */ void sha1_to_ascii (t_uchar * answer, sha1_t * sha1) { sha1_ascii (answer, (t_uchar *) sha1); } /** * \brief convert a hex representation of a sha1 to a sha1_t * \param out the sha1 to populate * \return zero on success; */ int sha1_from_ascii (sha1_t * out, t_uchar const * ascii) { unsigned int scanresult; t_uchar const * position = ascii; t_uchar *current = (t_uchar *)out; int count; out->A = 0; out->B = 0; out->C = 0; out->D = 0; out->E = 0; if (str_length (ascii) != 40) return -1; for (count =0; count < 20; ++count) { int ign; if (cvt_hex_to_uint (&ign, &scanresult, position, 2)) return -1; position +=2; current[count] = scanresult; } return 0; } /* --- Code below is the primary difference between md5.c and sha.c --- */ /* SHA1 round constants */ #define K1 0x5a827999L #define K2 0x6ed9eba1L #define K3 0x8f1bbcdcL #define K4 0xca62c1d6L /* Round functions. Note that F2 is the same as F4. */ #define F1(B,C,D) ( D ^ ( B & ( C ^ D ) ) ) #define F2(B,C,D) (B ^ C ^ D) #define F3(B,C,D) ( ( B & C ) | ( D & ( B | C ) ) ) #define F4(B,C,D) (B ^ C ^ D) /* Process LEN bytes of BUFFER, accumulating context into CTX. It is assumed that LEN % 64 == 0. Most of this code comes from GnuPG's cipher/sha1.c. */ static void sha1_process_blocks (const void *buffer, size_t len, sha1_context_t ctx) { const t_uint32 *words = buffer; size_t nwords = len / sizeof (t_uint32); const t_uint32 *endp = words + nwords; t_uint32 x[16]; t_uint32 a = ctx->current_sha1.A; t_uint32 b = ctx->current_sha1.B; t_uint32 c = ctx->current_sha1.C; t_uint32 d = ctx->current_sha1.D; t_uint32 e = ctx->current_sha1.E; /* First increment the byte count. RFC 1321 specifies the possible length of the file up to 2^64 bits. Here we only compute the number of bytes. Do a double word increment. */ ctx->total[0] += len; if (ctx->total[0] < len) ++ctx->total[1]; #define rol(x,n) ( ((x) << (n)) | ((x) >> (32-(n))) ) #define M(I) ( tm = x[I&0x0f] ^ x[(I-14)&0x0f] \ ^ x[(I-8)&0x0f] ^ x[(I-3)&0x0f] \ , (x[I&0x0f] = rol(tm, 1)) ) #define R(A,B,C,D,E,F,K,M) do { E += rol( A, 5 ) \ + F( B, C, D ) \ + K \ + M; \ B = rol( B, 30 ); \ } while(0) while (words < endp) { t_uint32 tm; int t; /* FIXME: see sha1.c for a better implementation. */ for (t = 0; t < 16; t++) { x[t] = NOTSWAP (*words); words++; } R( a, b, c, d, e, F1, K1, x[ 0] ); R( e, a, b, c, d, F1, K1, x[ 1] ); R( d, e, a, b, c, F1, K1, x[ 2] ); R( c, d, e, a, b, F1, K1, x[ 3] ); R( b, c, d, e, a, F1, K1, x[ 4] ); R( a, b, c, d, e, F1, K1, x[ 5] ); R( e, a, b, c, d, F1, K1, x[ 6] ); R( d, e, a, b, c, F1, K1, x[ 7] ); R( c, d, e, a, b, F1, K1, x[ 8] ); R( b, c, d, e, a, F1, K1, x[ 9] ); R( a, b, c, d, e, F1, K1, x[10] ); R( e, a, b, c, d, F1, K1, x[11] ); R( d, e, a, b, c, F1, K1, x[12] ); R( c, d, e, a, b, F1, K1, x[13] ); R( b, c, d, e, a, F1, K1, x[14] ); R( a, b, c, d, e, F1, K1, x[15] ); R( e, a, b, c, d, F1, K1, M(16) ); R( d, e, a, b, c, F1, K1, M(17) ); R( c, d, e, a, b, F1, K1, M(18) ); R( b, c, d, e, a, F1, K1, M(19) ); R( a, b, c, d, e, F2, K2, M(20) ); R( e, a, b, c, d, F2, K2, M(21) ); R( d, e, a, b, c, F2, K2, M(22) ); R( c, d, e, a, b, F2, K2, M(23) ); R( b, c, d, e, a, F2, K2, M(24) ); R( a, b, c, d, e, F2, K2, M(25) ); R( e, a, b, c, d, F2, K2, M(26) ); R( d, e, a, b, c, F2, K2, M(27) ); R( c, d, e, a, b, F2, K2, M(28) ); R( b, c, d, e, a, F2, K2, M(29) ); R( a, b, c, d, e, F2, K2, M(30) ); R( e, a, b, c, d, F2, K2, M(31) ); R( d, e, a, b, c, F2, K2, M(32) ); R( c, d, e, a, b, F2, K2, M(33) ); R( b, c, d, e, a, F2, K2, M(34) ); R( a, b, c, d, e, F2, K2, M(35) ); R( e, a, b, c, d, F2, K2, M(36) ); R( d, e, a, b, c, F2, K2, M(37) ); R( c, d, e, a, b, F2, K2, M(38) ); R( b, c, d, e, a, F2, K2, M(39) ); R( a, b, c, d, e, F3, K3, M(40) ); R( e, a, b, c, d, F3, K3, M(41) ); R( d, e, a, b, c, F3, K3, M(42) ); R( c, d, e, a, b, F3, K3, M(43) ); R( b, c, d, e, a, F3, K3, M(44) ); R( a, b, c, d, e, F3, K3, M(45) ); R( e, a, b, c, d, F3, K3, M(46) ); R( d, e, a, b, c, F3, K3, M(47) ); R( c, d, e, a, b, F3, K3, M(48) ); R( b, c, d, e, a, F3, K3, M(49) ); R( a, b, c, d, e, F3, K3, M(50) ); R( e, a, b, c, d, F3, K3, M(51) ); R( d, e, a, b, c, F3, K3, M(52) ); R( c, d, e, a, b, F3, K3, M(53) ); R( b, c, d, e, a, F3, K3, M(54) ); R( a, b, c, d, e, F3, K3, M(55) ); R( e, a, b, c, d, F3, K3, M(56) ); R( d, e, a, b, c, F3, K3, M(57) ); R( c, d, e, a, b, F3, K3, M(58) ); R( b, c, d, e, a, F3, K3, M(59) ); R( a, b, c, d, e, F4, K4, M(60) ); R( e, a, b, c, d, F4, K4, M(61) ); R( d, e, a, b, c, F4, K4, M(62) ); R( c, d, e, a, b, F4, K4, M(63) ); R( b, c, d, e, a, F4, K4, M(64) ); R( a, b, c, d, e, F4, K4, M(65) ); R( e, a, b, c, d, F4, K4, M(66) ); R( d, e, a, b, c, F4, K4, M(67) ); R( c, d, e, a, b, F4, K4, M(68) ); R( b, c, d, e, a, F4, K4, M(69) ); R( a, b, c, d, e, F4, K4, M(70) ); R( e, a, b, c, d, F4, K4, M(71) ); R( d, e, a, b, c, F4, K4, M(72) ); R( c, d, e, a, b, F4, K4, M(73) ); R( b, c, d, e, a, F4, K4, M(74) ); R( a, b, c, d, e, F4, K4, M(75) ); R( e, a, b, c, d, F4, K4, M(76) ); R( d, e, a, b, c, F4, K4, M(77) ); R( c, d, e, a, b, F4, K4, M(78) ); R( b, c, d, e, a, F4, K4, M(79) ); a = ctx->current_sha1.A += a; b = ctx->current_sha1.B += b; c = ctx->current_sha1.C += c; d = ctx->current_sha1.D += d; e = ctx->current_sha1.E += e; } } /* tag: Colin Walters Mon, 05 Jan 2004 18:22:29 -0500 (sha1.c) */ tla-1.3.5+dfsg/src/hackerlab/hash/Makefile.in0000644000175000017500000000027310457621774017447 0ustar useruser include $(makefiles)/library-objects.mk ifeq ($(cgs__install_hackerlab),1) include $(makefiles)/install-includes.mk endif # tag: Tom Lord Tue Dec 4 14:52:22 2001 (hash/Makefile.in) # tla-1.3.5+dfsg/src/hackerlab/hash/md5.h0000644000175000017500000000200410457621774016232 0ustar useruser/* md5.h: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__HASH__MD5_H #define INCLUDE__HASH__MD5_H #include "hackerlab/machine/types.h" #include "hackerlab/mem/alloc-limits.h" struct md5_context; typedef struct md5_context * md5_context_t; /* automatically generated __STDC__ prototypes */ extern md5_context_t make_md5_context (alloc_limits limits); extern void md5_context_reset (md5_context_t ctx); extern void free_md5_context (alloc_limits limits, md5_context_t ctx); extern void md5_scan (md5_context_t hd, t_uchar * inbuf, size_t inlen); extern void md5_final (t_uchar * result, md5_context_t hd); extern t_uchar * md5_alloc_ascii (alloc_limits limits, t_uchar * result); extern void md5_ascii (t_uchar * answer, t_uchar * result); #endif /* INCLUDE__HASH__MD5_H */ /* tag: Tom Lord Fri Oct 24 08:03:07 2003 (md5.h) */ tla-1.3.5+dfsg/src/hackerlab/hash/md5.c0000644000175000017500000003225610457621774016241 0ustar useruser/* md5.c - MD5 Message-Digest Algorithm * Copyright (C) 1995, 1996, 1998, 1999, * 2000, 2001 Free Software Foundation, Inc. * * Modifications Copyright (C) 2003, Thomas Lord * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation; either version 2, or (at your option) any * later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software Foundation, * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * * According to the definition of MD5 in RFC 1321 from April 1992. * NOTE: This is *not* the same file as the one from glibc. * NOTE: This is *not* the same file as the one from gnupg. */ /* Written by Ulrich Drepper , 1995. */ /* Heavily modified for GnuPG by */ /* Modified for hackerlab by aka */ #include "hackerlab/bugs/panic.h" #include "hackerlab/machine/endian.h" #include "hackerlab/mem/mem.h" #include "hackerlab/hash/md5.h" /************************************************************************ *(h1 "MD5 Routines") * * The md5 routines allow you to compute an MD5 message digest * According to the definition of MD5 in RFC 1321 from April 1992. * */ struct md5_context { /* chaining variables: */ t_uint32 A; t_uint32 B; t_uint32 C; t_uint32 D; t_uint32 nblocks; t_uchar buf[64]; int count; }; /* __STDC__ prototypes for static functions */ static void transform (md5_context_t ctx, t_uchar * data); /*(c make_md5_context) * md5_context_t make_md5_context (alloc_limits limits); * * Allocate and initialize an object which will keep track of the * state of an md5 digest computation. */ md5_context_t make_md5_context (alloc_limits limits) { md5_context_t ctx = 0; ctx = lim_malloc (limits, sizeof (*ctx)); md5_context_reset (ctx); return ctx; } /*(c md5_context_reset) * void md5_context_reset (md5_context_t ctx); * * Reinitialize an md5 state object. This will * undo the effects of any previous calls to * `md5_scan'. */ void md5_context_reset (md5_context_t ctx) { if (ctx) { ctx->A = 0x67452301; ctx->B = 0xefcdab89; ctx->C = 0x98badcfe; ctx->D = 0x10325476; ctx->nblocks = 0; ctx->count = 0; } } /*(c free_md5_context) * void free_md5_context (alloc_limits limits, md5_context_t ctx); * * Free all resources associated with an md5 state object. */ void free_md5_context (alloc_limits limits, md5_context_t ctx) { lim_free (limits, ctx); } /*(c md5_scan) * void md5_scan (md5_context_t hd, t_uchar * inbuf, size_t inlen); * * Scan the next `inlen' bytes of `inbuf', treating them as subsequent * bytes in a message for which we are computing an md5 digest. * * This function may be called repeatedly on sequential ``bursts'' * of a total message. */ void md5_scan (md5_context_t hd, t_uchar * inbuf, size_t inlen) { if (hd->count == 64) { /* process and flush the buffer */ transform (hd, hd->buf); hd->count = 0; hd->nblocks++; } if (!inlen) return; if (hd->count) { /* fill a partial buffer, * process and flush it. */ while (inlen && (hd->count < 64)) { hd->buf[hd->count] = *inbuf; hd->count++; inbuf++; inlen--; } md5_scan (hd, 0, 0); } /* process inbuf in 64 byte chunks * * (doesn't bother copying chunks to the buffer in hd) */ while (inlen >= 64) { transform (hd, inbuf); hd->count = 0; hd->nblocks++; inlen -= 64; inbuf += 64; } /* buffer up any fragment of a remaining chunk */ while (inlen && (hd->count < 64)) { hd->buf[hd->count] = *inbuf; hd->count++; inbuf++; inlen--; } } /*(c md5_final) * void md5_final (t_uchar * result, md5_context_t state); * * Declare that a complete message has been scanned using * `state' and `md5_scan()'. * * Return the 16-byte md5 digest in `result', which must point to * storage for at least 16 bytes. * * As a side-effect, `state' is reinitialized and may be used * again with `md5_scan ()' to process a new message. */ void md5_final (t_uchar * result, md5_context_t hd) { t_uint32 t; t_uint32 msb; t_uint32 lsb; /* flush teh buffer if it's full. */ md5_scan (hd, 0, 0); t = hd->nblocks; /* multiply by 64 to make a byte count * for the blocks processed so far. */ lsb = t << 6; msb = t >> 26; /* add the count of still-buffered * bytes (there are < 64). * * [Fake 64 bit integer math.... this could be reasonably fixed in * hackerlab but I don't want to perturb the inherited code that * much right now.] */ t = lsb; lsb += hd->count; if (lsb < t ) msb++; /* multiply by 8 to make a bit count */ t = lsb; lsb <<= 3; msb <<= 3; msb |= t >> 29; /* Need to append some padding and the bit count to the message and * add it to the md5sum. The total resulting message has to come * out to a multiple of 64 bytes. * * It'll take 8 bytes to hold the length and we need a minimum * of one padding byte. */ if (hd->count < 56) { /* enough room for the mandatory padding byte */ hd->buf[hd->count] = 0x80; hd->count++; /* add optional padding bytes if needed. */ while (hd->count < 56) { hd->buf[hd->count] = 0; hd->count++; } } else { /* need one extra block * * Mandatory padding byte: */ hd->buf[hd->count] = 0x80; hd->count++; /* fill out this too-small black with optional * padding bytes. */ while (hd->count < 64) { hd->buf[hd->count] = 0; hd->count++; } /* scan the last block and pad out the next: */ md5_scan (hd, 0, 0); mem_set0 (hd->buf, (size_t)56); hd->count = 56; } invariant (hd->count == 56); /* append the 64-bit bit count */ hd->buf[56] = (t_uchar)(lsb & 0xff); hd->buf[57] = (t_uchar)((lsb >> 8) & 0xff); hd->buf[58] = (t_uchar)((lsb >> 16) & 0xff); hd->buf[59] = (t_uchar)((lsb >> 24) & 0xff); hd->buf[60] = (t_uchar)(msb & 0xff); hd->buf[61] = (t_uchar)((msb >> 8) & 0xff); hd->buf[62] = (t_uchar)((msb >> 16) & 0xff); hd->buf[63] = (t_uchar)((msb >> 24) & 0xff); transform (hd, hd->buf); #define X(a) \ do { \ *result++ = (t_uchar)(hd-> a & 0xff); \ *result++ = (t_uchar)((hd-> a >> 8) & 0xff); \ *result++ = (t_uchar)((hd-> a >> 16) & 0xff); \ *result++ = (t_uchar)((hd-> a >> 24) & 0xff); \ } while(0) X(A); X(B); X(C); X(D); #undef X md5_context_reset (hd); } /*(c md5_alloc_ascii) * t_uchar * md5_alloc_ascii (alloc_limits limits, t_uchar * result); * * Return a newly allocated 33-byte 0-terminated ascii string * containing a hexadecimal version of the 16-byte binary md5 sum * pointed to by `result'. */ t_uchar * md5_alloc_ascii (alloc_limits limits, t_uchar * result) { t_uchar * answer = 0; answer = lim_malloc (limits, 33); if (!answer) return 0; answer[32] = 0; md5_ascii (answer, result); return answer; } /*(c md5_ascii) * void md5_ascii (t_uchar * answer, t_uchar * result); * * Format a 32-byte ascii string containing a hexadecimal version of * the 16-byte binary md5 sum pointed to by `result'. * * This function does not add a final 0-byte to the string. */ void md5_ascii (t_uchar * answer, t_uchar * result) { int x; for (x = 0; x < 16; ++x) { int hi = (0xf & (result[x] >> 4)); int lo = (0xf & result[x]); answer[2 * x] = ((hi >= 10) ? ('a' + (hi - 10)) : ('0' + hi)); answer[2 * x + 1] = ((lo >= 10) ? ('a' + (lo - 10)) : ('0' + lo)); } } /* These are the four functions used in the four steps of the MD5 * algorithm and defined in the RFC 1321. The first function is a * little bit optimized (as found in Colin Plumbs public domain * implementation). */ /* #define FF(b, c, d) ((b & c) | (~b & d)) */ #define FF(b, c, d) (d ^ (b & (c ^ d))) #define FG(b, c, d) FF (d, b, c) #define FH(b, c, d) (b ^ c ^ d) #define FI(b, c, d) (c ^ (b | ~d)) /**************** * transform n*64 bytes */ static void transform (md5_context_t ctx, t_uchar * data) { t_uint32 correct_words[16]; t_uint32 A = ctx->A; t_uint32 B = ctx->B; t_uint32 C = ctx->C; t_uint32 D = ctx->D; t_uint32 * cwp = correct_words; #if MACHINE_IS_BIGENDIAN { int i; t_uchar * p2; t_uchar * p1; i = 0; p1 = data; p2 = (t_uchar*)correct_words; while (i < 16) { p2[3] = *p1++; p2[2] = *p1++; p2[1] = *p1++; p2[0] = *p1++; ++i; p2 += 4; } } #else mem_move ((t_uchar *)correct_words, (t_uchar *)data, (size_t)64); #endif /* Rotate a 32 bit integer by n bytes */ #define rol(x,n) ( ((x) << (n)) | ((x) >> (32-(n))) ) #define OP(a, b, c, d, s, T) \ do \ { \ a += FF (b, c, d) + (*cwp++) + T; \ a = rol(a, s); \ a += b; \ } \ while (0) /* Before we start, one word about the strange constants. * They are defined in RFC 1321 as * * T[i] = (int) (4294967296.0 * fabs (sin (i))), i=1..64 */ /* Round 1. */ OP (A, B, C, D, 7, 0xd76aa478); OP (D, A, B, C, 12, 0xe8c7b756); OP (C, D, A, B, 17, 0x242070db); OP (B, C, D, A, 22, 0xc1bdceee); OP (A, B, C, D, 7, 0xf57c0faf); OP (D, A, B, C, 12, 0x4787c62a); OP (C, D, A, B, 17, 0xa8304613); OP (B, C, D, A, 22, 0xfd469501); OP (A, B, C, D, 7, 0x698098d8); OP (D, A, B, C, 12, 0x8b44f7af); OP (C, D, A, B, 17, 0xffff5bb1); OP (B, C, D, A, 22, 0x895cd7be); OP (A, B, C, D, 7, 0x6b901122); OP (D, A, B, C, 12, 0xfd987193); OP (C, D, A, B, 17, 0xa679438e); OP (B, C, D, A, 22, 0x49b40821); #undef OP #define OP(f, a, b, c, d, k, s, T) \ do \ { \ a += f (b, c, d) + correct_words[k] + T; \ a = rol(a, s); \ a += b; \ } \ while (0) /* Round 2. */ OP (FG, A, B, C, D, 1, 5, 0xf61e2562); OP (FG, D, A, B, C, 6, 9, 0xc040b340); OP (FG, C, D, A, B, 11, 14, 0x265e5a51); OP (FG, B, C, D, A, 0, 20, 0xe9b6c7aa); OP (FG, A, B, C, D, 5, 5, 0xd62f105d); OP (FG, D, A, B, C, 10, 9, 0x02441453); OP (FG, C, D, A, B, 15, 14, 0xd8a1e681); OP (FG, B, C, D, A, 4, 20, 0xe7d3fbc8); OP (FG, A, B, C, D, 9, 5, 0x21e1cde6); OP (FG, D, A, B, C, 14, 9, 0xc33707d6); OP (FG, C, D, A, B, 3, 14, 0xf4d50d87); OP (FG, B, C, D, A, 8, 20, 0x455a14ed); OP (FG, A, B, C, D, 13, 5, 0xa9e3e905); OP (FG, D, A, B, C, 2, 9, 0xfcefa3f8); OP (FG, C, D, A, B, 7, 14, 0x676f02d9); OP (FG, B, C, D, A, 12, 20, 0x8d2a4c8a); /* Round 3. */ OP (FH, A, B, C, D, 5, 4, 0xfffa3942); OP (FH, D, A, B, C, 8, 11, 0x8771f681); OP (FH, C, D, A, B, 11, 16, 0x6d9d6122); OP (FH, B, C, D, A, 14, 23, 0xfde5380c); OP (FH, A, B, C, D, 1, 4, 0xa4beea44); OP (FH, D, A, B, C, 4, 11, 0x4bdecfa9); OP (FH, C, D, A, B, 7, 16, 0xf6bb4b60); OP (FH, B, C, D, A, 10, 23, 0xbebfbc70); OP (FH, A, B, C, D, 13, 4, 0x289b7ec6); OP (FH, D, A, B, C, 0, 11, 0xeaa127fa); OP (FH, C, D, A, B, 3, 16, 0xd4ef3085); OP (FH, B, C, D, A, 6, 23, 0x04881d05); OP (FH, A, B, C, D, 9, 4, 0xd9d4d039); OP (FH, D, A, B, C, 12, 11, 0xe6db99e5); OP (FH, C, D, A, B, 15, 16, 0x1fa27cf8); OP (FH, B, C, D, A, 2, 23, 0xc4ac5665); /* Round 4. */ OP (FI, A, B, C, D, 0, 6, 0xf4292244); OP (FI, D, A, B, C, 7, 10, 0x432aff97); OP (FI, C, D, A, B, 14, 15, 0xab9423a7); OP (FI, B, C, D, A, 5, 21, 0xfc93a039); OP (FI, A, B, C, D, 12, 6, 0x655b59c3); OP (FI, D, A, B, C, 3, 10, 0x8f0ccc92); OP (FI, C, D, A, B, 10, 15, 0xffeff47d); OP (FI, B, C, D, A, 1, 21, 0x85845dd1); OP (FI, A, B, C, D, 8, 6, 0x6fa87e4f); OP (FI, D, A, B, C, 15, 10, 0xfe2ce6e0); OP (FI, C, D, A, B, 6, 15, 0xa3014314); OP (FI, B, C, D, A, 13, 21, 0x4e0811a1); OP (FI, A, B, C, D, 4, 6, 0xf7537e82); OP (FI, D, A, B, C, 11, 10, 0xbd3af235); OP (FI, C, D, A, B, 2, 15, 0x2ad7d2bb); OP (FI, B, C, D, A, 9, 21, 0xeb86d391); /* Put checksum in context given as argument. */ ctx->A += A; ctx->B += B; ctx->C += C; ctx->D += D; } /* tag: Tom Lord Fri Oct 24 08:45:11 2003 (md5.c) */ tla-1.3.5+dfsg/src/hackerlab/hash/sha1-utils.h0000644000175000017500000000201110457621774017535 0ustar useruser/* sha1-utils.h: * **************************************************************** * Copyright (C) 2004 Colin Walters * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__HASH__SHA1_UTILS_H #define INCLUDE__HASH__SHA1_UTILS_H #include "hackerlab/hash/sha1.h" /* automatically generated __STDC__ prototypes */ extern t_uchar * sha1_ascii_for_str (alloc_limits limits, t_uchar * string); extern t_uchar * sha1_ascii_for_str_n (alloc_limits limits, t_uchar * string, size_t length); extern void sha1_for_str (t_uchar * result, alloc_limits limits, t_uchar * string); extern void sha1_for_str_n (t_uchar * result, alloc_limits limits, t_uchar const * string, size_t length); extern sha1_t sha1_for_bytes (t_uchar const * bytes, size_t length); #endif /* INCLUDE__HASH__SHA1_UTILS_H */ /* tag: Colin Walters Mon, 05 Jan 2004 20:09:21 -0500 (sha1-utils.h) */ tla-1.3.5+dfsg/src/hackerlab/hash/sha1.h0000644000175000017500000000252010457621774016404 0ustar useruser/* sha1.h: * **************************************************************** * Copyright (C) 2003 Colin Walters * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__HASH__SHA1_H #define INCLUDE__HASH__SHA1_H #include "hackerlab/machine/types.h" #include "hackerlab/mem/alloc-limits.h" typedef struct sha1_ { t_uint32 A; t_uint32 B; t_uint32 C; t_uint32 D; t_uint32 E; } sha1_t; struct sha1_context; typedef struct sha1_context * sha1_context_t; /* automatically generated __STDC__ prototypes */ extern sha1_context_t make_sha1_context (alloc_limits limits); extern void sha1_context_reset (sha1_context_t ctx); extern void free_sha1_context (alloc_limits limits, sha1_context_t ctx); extern void sha1_scan (sha1_context_t hd, const t_uchar * inbuf, size_t inlen); extern void sha1_final (t_uchar * result, sha1_context_t hd); extern t_uchar * sha1_alloc_ascii (alloc_limits limits, t_uchar * result); extern void sha1_ascii (t_uchar * answer, t_uchar * result); extern void sha1_to_ascii (t_uchar * answer, sha1_t * sha1); extern int sha1_from_ascii (sha1_t * out, t_uchar const * ascii); #define sha1_cmp(left, right) mem_cmp (&left, &right, 20) #endif /* INCLUDE__HASH__sha1_H */ /* tag: Colin Walters Sun, 04 Jan 2004 22:37:11 -0500 (sha1.h) */ tla-1.3.5+dfsg/src/hackerlab/hash/PLUGIN/0000755000175000017500000000000010457621774016376 5ustar userusertla-1.3.5+dfsg/src/hackerlab/hash/PLUGIN/REQ0000644000175000017500000000002710457621774016747 0ustar useruseros hash hash libboot tla-1.3.5+dfsg/src/hackerlab/hash/md5-utils.c0000644000175000017500000000532210457621774017371 0ustar useruser/* md5-utils.c: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/char/str.h" #include "hackerlab/hash/md5-utils.h" /************************************************************************ *(h1 "MD5 Convenience Functions") * * * */ /*(c md5_ascii_for_str) * t_uchar * md5_ascii_for_str (alloc_limits limits, * t_uchar * string); * * Return a 0-terminated (33 bytes, total) string containing * a hexadecimal expression of the md5 hash of `string'. * * This procedure internally allocates and frees memory using * `limits'. */ t_uchar * md5_ascii_for_str (alloc_limits limits, t_uchar * string) { return md5_ascii_for_str_n (limits, string, str_length (string)); } /*(c md5_ascii_for_str_n) * t_uchar * md5_ascii_for_str_n (alloc_limits limits, * t_uchar * string, * size_t length); * * Return a 0-terminated (33 bytes, total) string containing a * hexadecimal expression of the md5 hash of the `length'-byte * `string'. * * This procedure internally allocates and frees memory using * `limits'. */ t_uchar * md5_ascii_for_str_n (alloc_limits limits, t_uchar * string, size_t length) { t_uchar binary[16]; md5_for_str_n (binary, limits, string, length); return md5_alloc_ascii (limits, binary); } /*(c md5_for_str) * void md5_for_str (t_uchar * result, * alloc_limits limits, * t_uchar * string); * * Fill the 16-byte array `result' with the (binary) md5 * hash of `string'. * * This procedure internally allocates and frees memory using * `limits'. */ void md5_for_str (t_uchar * result, alloc_limits limits, t_uchar * string) { md5_for_str_n (result, limits, string, str_length (string)); } /*(c md5_for_str_n) * void md5_for_str_n (t_uchar * result, * alloc_limits limits, * t_uchar * string, * size_t length); * * Fill the 16-byte array `result' with the (binary) md5 * hash of the `length'-byte `string'. * * This procedure internally allocates and frees memory using * `limits'. */ void md5_for_str_n (t_uchar * result, alloc_limits limits, t_uchar * string, size_t length) { md5_context_t context; context = make_md5_context (limits); md5_scan (context, string, length); md5_final (result, context); } /* tag: Tom Lord Sun Dec 28 11:37:01 2003 (md5-utils.c) */ tla-1.3.5+dfsg/src/hackerlab/hash/hash-utils.h0000644000175000017500000000130110457621774017625 0ustar useruser/* hash-utils.h - decls for computing hash values * **************************************************************** * Copyright (C) 2000 Thomas Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__HASH__HASH_UTILS_H #define INCLUDE__HASH__HASH_UTILS_H #include "hackerlab/machine/types.h" /* automatically generated __STDC__ prototypes */ extern unsigned long hash_ul (unsigned long n); extern unsigned long hash_double (double d); extern unsigned long hash_pointers (void * elts, size_t n_elts); extern unsigned long hash_mem (const t_uchar * elts, size_t n_elts); #endif /* INCLUDE__HASH__HASH_UTILS_H */ tla-1.3.5+dfsg/src/hackerlab/hash/hash-utils.c0000644000175000017500000001077510457621774017637 0ustar useruser/* hash-utils.c - computing hash values * **************************************************************** * Copyright (C) 2000 Thomas Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/machine/alignment.h" #include "hackerlab/hash/hash-utils.h" /************************************************************************ *(h1 "Hash Utilities" * :includes ("hackerlab/hash/hash-utils.h")) * * The functions in this section provide tools useful for computing * hash values. */ static unsigned long shuffled_bytes[] = { 245, 184, 171, 36, 93, 194, 192, 143, 207, 89, 63, 175, 203, 231, 47, 238, 103, 67, 176, 102, 80, 133, 24, 155, 91, 141, 234, 58, 44, 191, 218, 157, 13, 168, 160, 113, 211, 213, 252, 236, 2, 19, 21, 148, 111, 251, 165, 74, 124, 25, 181, 210, 250, 195, 235, 97, 185, 1, 179, 198, 105, 101, 5, 220, 35, 162, 142, 41, 200, 209, 224, 71, 201, 134, 69, 48, 65, 170, 72, 167, 145, 205, 28, 88, 215, 81, 214, 78, 118, 26, 123, 84, 140, 49, 45, 8, 7, 107, 227, 60, 59, 32, 30, 82, 31, 189, 131, 17, 66, 239, 64, 10, 149, 40, 130, 146, 54, 147, 9, 114, 4, 254, 241, 116, 110, 249, 57, 233, 37, 55, 206, 100, 177, 119, 139, 158, 108, 75, 94, 23, 186, 152, 244, 27, 38, 33, 188, 87, 76, 166, 228, 52, 120, 99, 247, 174, 51, 183, 3, 161, 246, 135, 14, 178, 11, 216, 77, 172, 122, 154, 39, 253, 104, 34, 164, 230, 219, 242, 68, 151, 180, 115, 173, 73, 212, 90, 125, 29, 22, 221, 56, 121, 255, 204, 83, 169, 182, 112, 96, 187, 20, 106, 79, 15, 61, 223, 70, 85, 53, 197, 217, 232, 196, 95, 136, 150, 243, 109, 129, 202, 208, 237, 144, 156, 86, 127, 62, 248, 138, 229, 153, 226, 240, 199, 50, 12, 193, 98, 137, 126, 0, 159, 222, 18, 163, 117, 190, 46, 225, 132, 16, 43, 128, 42, 92, 6 }; /*(c hash_ul) * unsigned long hash_ul (unsigned long n); * * Generate a hash value from an integer. * * This function is slow, but attempts to give a good distribution of * hash values even for a series of `n' which are not particularly * random. */ unsigned long hash_ul (unsigned long n) { int rounds; t_ulong answer = 0; for (rounds = 0; rounds < 5; ++rounds) { int byte; for (byte = 0; byte < sizeof (t_ulong); ++byte) { t_ulong new_byte; new_byte = shuffled_bytes[0xff & (n >> byte)]; answer ^= (new_byte << byte); } n = ((n >> 3) ^ (n << 7)); } return answer; } /*(c hash_double) * unsigned long hash_double (double n); * * Generate a hash value from a double precision float. * * This function is slow, but attempts to give a good distribution of * hash values even for a series of `n' which are not particularly * random. */ unsigned long hash_double (double d) { union { t_uchar raw[sizeof (double)]; double d; } data; data.d = d; return hash_mem (data.raw, sizeof (double)); } /*(c hash_pointers) * unsigned long hash_pointers (void * elts, size_t n_elts); * * Compute a hash value from an array of pointers. * * This function is slow, but attempts to give a good distribution of * hash values even for a series of pointers which are not * particularly random. Usually, pointers are not particularly * random. * * `slow' means that the function does roughly `3 * sizeof (n)' array * look-ups and lots of bit twiddling, per pointer. * */ unsigned long hash_pointers (void * elts, size_t n_elts) { size_t x; unsigned long hash; hash = 0xdec0ded; for (x = 0; x < n_elts; ++x) { hash ^= hash_ul (((unsigned long *)elts)[x]); } return hash; } /*(c hash_mem) * unsigned long hash_mem (const t_uchar * elts, size_t n_bytes); * * Compute a hash value from an array of bytes. * * This function is slow, but attempts to give a good distribution of * hash values even for a series of bytes which are not particularly * random. * * `slow' means that the function does roughly `3 * sizeof (n)' array * look-ups and lots of bit twiddling, per `sizeof (unsigned long)' * bytes. * */ unsigned long hash_mem (const t_uchar * elts, size_t n_elts) { size_t x; unsigned long hash; hash = 0xde7a115; for (x = 0; (x < n_elts) && (MACHINE_ALIGNMENT - 1); ++x) hash ^= hash_ul ((unsigned long)elts[x]); while ((n_elts - x) >= sizeof (unsigned long)) { hash ^= hash_ul (*(unsigned long *)(elts + x)); x += sizeof (unsigned long); } while (x < n_elts) { hash ^= hash_ul ((unsigned long)elts[x]); ++x; } return hash; } tla-1.3.5+dfsg/src/hackerlab/hash/hashtree.h0000644000175000017500000002453610457621774017366 0ustar useruser/* hashtree.h - hash table decls * **************************************************************** * Copyright (C) 1998, 2000 Thomas Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__HASH__HASHTREE_H #define INCLUDE__HASH__HASHTREE_H #include "hackerlab/bitsets/bitset.h" /************************************************************************ *(h2 "Hashtree Data Structures") * */ /*(menu) */ /************************************************************************ *(h3 "How Hashtrees Work") * * A hash tree is an associative data structure mapping "keys" to * "values". Both keys and values are stored as pointers of type * `void *' and may point to any type of value. * * When creating a new hash table, programs specify how parts of the * hash table will be allocated and freed. For example, programs * might simply use `malloc' and `free', or they might use allocation * from a size-limited pool, or they might arrange so that parts of * the hashtree don't have to be allocated at all because they are * stored in hashtree keys. * * Programs also specify, in advance, how keys are compared for * equality. * * Programs do not specify in advance how hash values are computed for * keys. Instead, when storing or looking up keys in a hash table, * programs first compute a hash value for the key and then call * either `hashtree_find' or `hashtree_store'. Hash values are * `unsigned long' integers. * * Internally, hashtrees are stored as trees. Each tree node has 16 * children. The children of leaf nodes are lists of key/value pairs. * At each level of the tree, four bits from the hash value are used * to select a child. The minimum depth of the tree is two: a root * node at level 0, lists of key/value pairs at level 1. The maximum * depth of the tree is: * * (2 * sizeof (unsigned long)) * * If a list of key/value pairs grows too long (more than 5 elements), * and the node containing that list is not a maximum-depth node, the * node "overflows". When overflow occurs, the leaf node is made an * internal node with 16 subtrees. Each of those subtrees is a new * leaf node. All of the key/value pairs from the overflowing node * are redistributed among the new leaf nodes. * * This style of hash tree makes reasonably efficient use of memory * for both small and moderately large numbers of key/value pairs. * Access times are determined by the depth of the tree and are * usually limited by the maximum depth. In the exceptional * circumstance that a maximum-depth node contains a very large number * of key/value pairs (indicating a poor distribution of hash values), * access times for keys in that node grow linearly with the number of * keys in that node. * * The cost of adding an element (possibly causing overflow) is most * commonly the same as the cost of adding an element. The cost of * overflow is determined by the number of key/value pairs that must * be redistributed. That number is limited by the number of * key/value pairs in a leaf node at not-maximal depth (64 == 16 lists * of key/value pairs * 4 pairs per list). Once again, in the * exceptional circumstance of a maximum depth node with many * key/value pairs, the cost of inserting a key grows linearly with * the number of keys in that node. * * * \WARNINGS:/ * * Hashtrees are not a panacea. * * If you know advance roughly how many key/value pairs * a hash table will contain, you can obtain better memory use and * better access times by using a flat, fixed-size hash table. * * Hashtrees are most useful when the number of key/value pairs may * vary over a wide range, when it is important that tables with only * a few key/value pairs remain small, and when the cost of adding * an element (possibly causing overflow), must remain small. * * Hashtrees are also a reasonable default choice when good hash-table * performance is desirable but optimal performance is not necessary. * In most situations, hashtrees will give at least good performance. */ /************************************************************************ *(h3 "Types for Hashtrees") * * * */ /*(c hashtree :category type) * struct hashtree; * * A `struct hashtree' represents a hash table. It is an opaque * structure that should be allocated by `hashtree_new' or else * initialized by being filled with 0 bytes. */ struct hashtree { int refs; struct hashtree * parent; bitset_subset nested_p; void ** children[16]; }; /*(c hashtree_item :category type) * struct hashtree_item * * A `struct hashtree_item' represents one key-value pair stored in a * hash table. It contains (at least) the fields: * * void * key; * void * binding; * * It is safe to modify either field, but modifications must not * change either the hash value of the key or its equality * to other keys. */ struct hashtree_item { struct hashtree_item * next_same_hash; struct hashtree * table; unsigned long hash; void * key; void * binding; }; struct hashtree_rules; /*(c hashtree_rules :category type) * struct hashtree_rules; * * A `struct hashtree_rules' contains function pointers, and an * allocation limits. * * It has these fields, in this order: * * // a function to compare keye: * hashtree_eq_fn eq; * * // a function to allocate tree nodes * hash_alloc_fn hash_alloc; * * // a function to free tree nodes: * free_hashtree_fn free_hash; * * // a function to allocate key/value pairs: * hashtree_alloc_item_fn hash_item_alloc; * * // a function to free key/value pairs: * free_hashtree_item_fn free_hash_item; * * // allocation limits that apply to hash tables * // using these rules: * alloc_limits limits; * * insert*/ typedef int (*hashtree_eq_fn) (void * key1, void * key2, struct hashtree_rules * rules); /*end-insert * * `hashtree_eq_fn' compares two keys for equality. It returns 1 if they * are equal, 0 otherwise. * insert*/ typedef struct hashtree * (*hashtree_alloc_fn) (struct hashtree_rules * rules); /*end-insert * * `hashtree_alloc_fn' allocates a new hash table tree node. Hash tables * are nested to form trees; this function allocates one node of such * a tree. This function may return 0 if allocation fails. * insert*/ typedef void (*free_hashtree_fn) (struct hashtree * node, struct hashtree_rules * rules); /*end-insert * * `free_hashtree_fn' frees an empty hash table tree node. * insert*/ typedef struct hashtree_item * (*hashtree_alloc_item_fn) (void * key, struct hashtree_rules * rules); /*end-insert * * `hashtree_alloc_item_fn' allocates a hash table item (key/value * pair) for the indicated key. It may return 0 if allocation fails. * * `hashtree_alloc_item_fn' must fill in the `key' and `binding' * fields of the `struct hashtree_item' that it returns. Typically, * the field `key' is set equal to the parameter `key', and the field * `binding' is initialized to 0, indicating that the key initially * has no binding. * * Sometimes, if a key will be stored in at most one hashtree, a * useful optimization is to store a `struct hashtree_item' within * each key. In that case, `hashtree_alloc_item_fn' doesn't have to * allocate memory at all: it can return a pointer to the `struct * hashtree_item' in the key. * insert*/ typedef void (*free_hashtree_item_fn) (struct hashtree_item * node, struct hashtree_rules * rules); /*end-insert * * `free_hashtree_item_fn' frees a hash table item (key/value pair). * * * The field `limits' points to allocation limits which are used * by the default implementations of these functions. By convention, * non-default implementations should also use `limits' when performing * allocations. * * Defaults are provided for the functions in a `struct * hashtree_rules'. If any particular function pointer is 0 or if the * `struct hashtree_rules *' passed to `hashtree_alloc' is 0, the * default implementations are used. * * The default functions perform allocations by calling `lim_malloc' * with the allocation limits stored in the field `limits'. (See * xref:"Allocation With Limitations".) If `limits' is 0, or if the * `struct hashtree_rules *' pointer is 0, the allocation limits * `lim_use_must_malloc' is used. In that case, if allocation fails, * the process is exitted by calling `panic'. * * The default implementation of `eq' compares pointers to keys using * `=='. * */ struct hashtree_rules { hashtree_eq_fn eq; hashtree_alloc_fn hash_alloc; free_hashtree_fn free_hash; hashtree_alloc_item_fn hash_item_alloc; free_hashtree_item_fn free_hash_item; alloc_limits limits; }; typedef void (*hashtree_free_data_fn) (struct hashtree_item * it, struct hashtree_rules * rules); typedef void (*hashtree_fold_fn) (struct hashtree_item * it, void *user_data, struct hashtree_rules * rules); /* automatically generated __STDC__ prototypes */ extern struct hashtree_rules * hashtree_make_rules (alloc_limits limits); extern void hashtree_init_rules (struct hashtree_rules * rules, hashtree_eq_fn eq, hashtree_alloc_fn hash_alloc, free_hashtree_fn free_hash, hashtree_alloc_item_fn hash_item_alloc, free_hashtree_item_fn free_hash_item, alloc_limits limits); extern void hashtree_free_limit_rules (struct hashtree_rules * rules); extern struct hashtree * hashtree_alloc (struct hashtree_rules * rules); extern void hashtree_free (struct hashtree * it, hashtree_free_data_fn freefn, struct hashtree_rules * rules); extern void hashtree_free_static (struct hashtree * tab, hashtree_free_data_fn freefn, struct hashtree_rules * rules); extern struct hashtree_item * hashtree_find (struct hashtree * table, unsigned long hash, void * key, struct hashtree_rules * rules); extern struct hashtree_item * hashtree_store (struct hashtree * table, unsigned long hash, void * key, struct hashtree_rules * rules); extern void hashtree_delete (struct hashtree_item * it, struct hashtree_rules * rules); extern void hashtree_fold (struct hashtree *table, hashtree_fold_fn foldfn, void *user_data, struct hashtree_rules * rules); #endif /* INCLUDE__HASH__HASHTREE_H */ tla-1.3.5+dfsg/src/hackerlab/handles/0000755000175000017500000000000010457621774016073 5ustar userusertla-1.3.5+dfsg/src/hackerlab/handles/handle.h0000644000175000017500000000134710457621774017504 0ustar useruser/* handle.h: * **************************************************************** * Copyright (C) 2004 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__HANDLES__HANDLE_H #define INCLUDE__HANDLES__HANDLE_H #include "hackerlab/machine/types.h" /* automatically generated __STDC__ prototypes */ extern ssize_t alloc_handle (void); extern int free_handle (ssize_t h); extern ssize_t handle_ref (ssize_t h); extern int handle_set (ssize_t h, ssize_t s, ssize_t r); extern ssize_t alloc_handle_set (void); extern int free_handle_set (ssize_t s); #endif /* INCLUDE__HANDLES__HANDLE_H */ /* tag: Tom Lord Sat Nov 20 15:52:22 2004 (handle.h) */ tla-1.3.5+dfsg/src/hackerlab/handles/Makefile.in0000644000175000017500000000027610457621774020145 0ustar useruserinclude $(makefiles)/library-objects.mk ifeq ($(cgs__install_hackerlab),1) include $(makefiles)/install-includes.mk endif # tag: Tom Lord Sat Nov 20 16:40:52 2004 (handles/Makefile.in) # tla-1.3.5+dfsg/src/hackerlab/handles/PLUGIN/0000755000175000017500000000000010457621774017071 5ustar userusertla-1.3.5+dfsg/src/hackerlab/handles/PLUGIN/REQ0000644000175000017500000000007010457621774017440 0ustar useruserobtables handles oblists handles handles libhackerlab tla-1.3.5+dfsg/src/hackerlab/handles/handle.c0000644000175000017500000000576210457621774017504 0ustar useruser/* handle.c: * **************************************************************** * Copyright (C) 2004 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/obtables/obtable.h" #include "hackerlab/oblists/ssizet.h" #include "hackerlab/handles/handle.h" /* typedefs */ typedef struct handle_data t_handle_data; struct handle_data { ssize_t set_id; ssize_t resource; }; OBTABLE_STATIC_TABLE(handle, t_handle_data); typedef struct handle_set_data t_handle_set_data; struct handle_set_data { t_list_ssize_t handles; }; OBTABLE_STATIC_TABLE(handle_set, t_handle_set_data); /* __STDC__ prototypes for static functions */ /* declarations */ /* code */ ssize_t alloc_handle (void) { ssize_t answer; t_handle_data * data; answer = handle_alloc_id (); if (answer < 0) return answer; data = handle_ref_id (answer); if (!data) return -1; data->set_id = -1; data->resource = -1; return answer; } int free_handle (ssize_t h) { if (0 > handle_set (h, -1, -1)) return -1; handle_free_id (h); return 0; } ssize_t handle_ref (ssize_t h) { t_handle_data * data; data = handle_ref_id (h); if (!data) return -1; return data->resource; } int handle_set (ssize_t h, ssize_t s, ssize_t r) { t_handle_data * h_data; h_data = handle_ref_id (h); if (!h_data) return -1; if ((h_data->set_id == s) && (h_data->resource == r)) return 0; if (h_data->set_id >= 0) { t_handle_set_data * prev_s_data; prev_s_data = handle_set_ref_id (h_data->set_id); if (!prev_s_data) return -1; if (0 > list_ssize_t_remove (lim_use_malloc, &prev_s_data->handles, h)) return -1; h_data->set_id = -1; h_data->resource = -1; } if (s >= 0) { t_handle_set_data * s_data; s_data = handle_set_ref_id (s); if (!s_data) return -1; if (0 > list_ssize_t_bag_add (lim_use_malloc, &s_data->handles, h)) return -1; h_data->set_id = s; h_data->resource = r; } return 0; } ssize_t alloc_handle_set (void) { ssize_t answer; t_handle_set_data * data; answer = handle_set_alloc_id (); if (answer < 0) return answer; data = handle_set_ref_id (answer); if (!data) return -1; if (0 > init_list_ssize_t (&data->handles, lim_use_malloc)) { handle_set_free_id (answer); return -1; } return answer; } int free_handle_set (ssize_t s) { t_handle_set_data * data; data = handle_set_ref_id (s); if (!data) return -1; while (!list_ssize_t_is_empty (&data->handles, lim_use_malloc)) { ssize_t h; h = list_ssize_t_pop (lim_use_malloc, &data->handles); if (h < 0) return -1; if (0 > handle_set (h, -1, -1)) return -1; } uninit_list_ssize_t (&data->handles, lim_use_malloc); handle_set_free_id (s); return 0; } /* tag: Tom Lord Sat Nov 20 15:52:28 2004 (handle.c) */ tla-1.3.5+dfsg/src/hackerlab/os/0000755000175000017500000000000010457621774015076 5ustar userusertla-1.3.5+dfsg/src/hackerlab/os/errno.h0000644000175000017500000000070610457621774016377 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:41:30 2001 (errno.h) */ /* errno.h - * **************************************************************** * Copyright (C) 2000 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__OS__ERRNO_H #define INCLUDE__OS__ERRNO_H #include /* automatically generated __STDC__ prototypes */ #endif /* INCLUDE__OS__ERRNO_H */ tla-1.3.5+dfsg/src/hackerlab/os/exit-status.gen0000644000175000017500000000122710457621774020065 0ustar useruser/* exit-status.gen - -*-C-*- * **************************************************************** * Copyright (C) 2000 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include #include #include int main (int argc, char * argv[]) { printf ("/* Automatically generated by exit-status.gen\n"); printf (" */\n"); printf ("\n\n"); printf ("#undef EXIT_SUCCESS\n"); printf ("#undef EXIT_FAILURE\n"); printf ("#define EXIT_SUCCESS %d\n", EXIT_SUCCESS); printf ("#define EXIT_FAILURE %d\n", EXIT_FAILURE); printf ("\n\n"); exit (0); } tla-1.3.5+dfsg/src/hackerlab/os/zlib.h0000644000175000017500000000070210457621774016206 0ustar useruser/* zlib.h: * **************************************************************** * Copyright (C) 2005 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__OS__ZLIB_H #define INCLUDE__OS__ZLIB_H #include /* automatically generated __STDC__ prototypes */ #endif /* INCLUDE__OS__ZLIB_H */ /* tag: Tom Lord Fri Apr 15 20:59:54 2005 (zlib.h) */ tla-1.3.5+dfsg/src/hackerlab/os/fcntl.h0000644000175000017500000000070710457621774016361 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:41:31 2001 (fcntl.h) */ /* fcntl.h - * **************************************************************** * Copyright (C) 2000 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__OS__FCNTL_H #define INCLUDE__OS__FCNTL_H #include /* automatically generated __STDC__ prototypes */ #endif /* INCLUDE__OS__FCNTL_H */ tla-1.3.5+dfsg/src/hackerlab/os/stdarg.h0000644000175000017500000000071410457621774016535 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:41:30 2001 (stdarg.h) */ /* stdarg.h - * **************************************************************** * Copyright (C) 2000 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__OS__STDARG_H #define INCLUDE__OS__STDARG_H #include /* automatically generated __STDC__ prototypes */ #endif /* INCLUDE__OS__STDARG_H */ tla-1.3.5+dfsg/src/hackerlab/os/dirent.h0000644000175000017500000000076010457621774016537 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:41:31 2001 (dirent.h) */ /* dirent.h - * **************************************************************** * Copyright (C) 2000 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__OS__DIRENT_H #define INCLUDE__OS__DIRENT_H #include "hackerlab/os/sys/types.h" #include /* automatically generated __STDC__ prototypes */ #endif /* INCLUDE__OS__DIRENT_H */ tla-1.3.5+dfsg/src/hackerlab/os/alloca.h.in0000644000175000017500000000070410457621774017110 0ustar useruser/* alloca.h.in: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__OS__ALLOCA_H #define INCLUDE__OS__ALLOCA_H @@@ /* automatically generated __STDC__ prototypes */ #endif /* INCLUDE__OS__ALLOCA_H */ /* tag: Tom Lord Sat Jan 5 15:26:10 2002 (alloca.h.in) */ tla-1.3.5+dfsg/src/hackerlab/os/stddef.h0000644000175000017500000000107610457621774016524 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:41:29 2001 (stddef.h) */ /* stddef.h - * **************************************************************** * Copyright (C) 2000 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__OS__STDDEF_H #define INCLUDE__OS__STDDEF_H /* ptrdiff_t * size_t * wchar_t -- not used in hackerlab * NULL -- not used in hackerlab * offsetof */ #include /* automatically generated __STDC__ prototypes */ #endif /* INCLUDE__OS__STDDEF_H */ tla-1.3.5+dfsg/src/hackerlab/os/pwd.h0000644000175000017500000000067210457621774016046 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:41:32 2001 (pwd.h) */ /* pwd.h - * **************************************************************** * Copyright (C) 2000 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__OS__PWD_H #define INCLUDE__OS__PWD_H #include /* automatically generated __STDC__ prototypes */ #endif /* INCLUDE__OS__PWD_H */ tla-1.3.5+dfsg/src/hackerlab/os/char-class-locale.c0000644000175000017500000000221710457621774020521 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:41:33 2001 (char-class-locale.c) */ /* char-class-locale.c - * **************************************************************** * Copyright (C) 2000 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include #include "hackerlab/os/char-class-locale.h" int char_is_alnum_locale (t_uchar c) { return isalnum ((char)c); } int char_is_alpha_locale (t_uchar c) { return isalpha ((char)c); } int char_is_control_locale (t_uchar c) { return iscntrl ((char)c); } int char_is_digit_locale (t_uchar c) { return isdigit ((char)c); } int char_is_graph_locale (t_uchar c) { return isgraph ((char)c); } int char_is_lower_locale (t_uchar c) { return islower ((char)c); } int char_is_printable_locale (t_uchar c) { return isprint ((char)c); } int char_is_punct_locale (t_uchar c) { return ispunct ((char)c); } int char_is_space_locale (t_uchar c) { return isspace ((char)c); } int char_is_upper_locale (t_uchar c) { return isupper ((char)c); } int char_is_xdigit_locale (t_uchar c) { return isxdigit ((char)c); } tla-1.3.5+dfsg/src/hackerlab/os/errno-to-string.h0000644000175000017500000000106710457621774020324 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:41:32 2001 (errno-to-string.h) */ /* errno-to-string.h - * **************************************************************** * Copyright (C) 2000 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__OS__ERRNO_TO_STRING_H #define INCLUDE__OS__ERRNO_TO_STRING_H #include "hackerlab/machine/types.h" /* automatically generated __STDC__ prototypes */ extern t_uchar * errno_to_string (int errn); #endif /* INCLUDE__OS__ERRNO_TO_STRING_H */ tla-1.3.5+dfsg/src/hackerlab/os/unistd.h0000644000175000017500000000071410457621774016557 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:41:30 2001 (unistd.h) */ /* unistd.h - * **************************************************************** * Copyright (C) 2000 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__OS__UNISTD_H #define INCLUDE__OS__UNISTD_H #include /* automatically generated __STDC__ prototypes */ #endif /* INCLUDE__OS__UNISTD_H */ tla-1.3.5+dfsg/src/hackerlab/os/time.h0000644000175000017500000000067710457621774016217 0ustar useruser/* time.h * **************************************************************** * Copyright (C) 2000 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__OS__TIME_H #define INCLUDE__OS__TIME_H #include /* automatically generated __STDC__ prototypes */ #endif /* INCLUDE__OS__TIME_H */ /* tag: Tom Lord Tue Jan 22 15:59:35 2002 (time.h) */ tla-1.3.5+dfsg/src/hackerlab/os/arpa/0000755000175000017500000000000010457621774016021 5ustar userusertla-1.3.5+dfsg/src/hackerlab/os/arpa/inet.h0000644000175000017500000000104110457621774017125 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:41:31 2001 (inet.h) */ /* inet.h - * **************************************************************** * Copyright (C) 2000 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__OS__ARPA__INET_H #define INCLUDE__OS__ARPA__INET_H #include "hackerlab/os/sys/socket.h" #include "hackerlab/os/netinet/in.h" #include /* automatically generated __STDC__ prototypes */ #endif /* INCLUDE__OS__ARPA__INET_H */ tla-1.3.5+dfsg/src/hackerlab/os/exit.c0000644000175000017500000000050010457621774016206 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:41:29 2001 (exit.c) */ /* exit.c - * **************************************************************** * Copyright (C) 2000 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/os/exit.h" tla-1.3.5+dfsg/src/hackerlab/os/errno-to-string.c0000644000175000017500000000067010457621774020316 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:41:32 2001 (errno-to-string.c) */ /* errno-to-string.c - * **************************************************************** * Copyright (C) 2000 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include #include "hackerlab/os/errno-to-string.h" t_uchar * errno_to_string (int errn) { return strerror (errn); } tla-1.3.5+dfsg/src/hackerlab/os/char-cmp-locale.h0000644000175000017500000000107310457621774020177 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:41:33 2001 (char-cmp-locale.h) */ /* char-cmp-locale.h - * **************************************************************** * Copyright (C) 2000 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__OS__CHAR_CMP_LOCALE_H #define INCLUDE__OS__CHAR_CMP_LOCALE_H #include "hackerlab/machine/types.h" /* automatically generated __STDC__ prototypes */ extern int char_cmp_locale (t_uchar a, t_uchar b); #endif /* INCLUDE__OS__CHAR_CMP_LOCALE_H */ tla-1.3.5+dfsg/src/hackerlab/os/stdlib.h0000644000175000017500000000071410457621774016532 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:41:31 2001 (stdlib.h) */ /* stdlib.h - * **************************************************************** * Copyright (C) 2000 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__OS__STDLIB_H #define INCLUDE__OS__STDLIB_H #include /* automatically generated __STDC__ prototypes */ #endif /* INCLUDE__OS__STDLIB_H */ tla-1.3.5+dfsg/src/hackerlab/os/char-cmp-locale.c0000644000175000017500000000104710457621774020173 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:41:33 2001 (char-cmp-locale.c) */ /* char-cmp-locale.c - * **************************************************************** * Copyright (C) 2000 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include #include "hackerlab/os/char-cmp-locale.h" int char_cmp_locale (t_uchar a, t_uchar b) { t_uchar as[2]; t_uchar bs[2]; as[0] = a; as[1] = 0; bs[0] = b; bs[1] = 0; return strcoll ((char *)as, (char *)bs); } tla-1.3.5+dfsg/src/hackerlab/os/netinet/0000755000175000017500000000000010457621774016544 5ustar userusertla-1.3.5+dfsg/src/hackerlab/os/netinet/in.h0000644000175000017500000000076710457621774017335 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:41:30 2001 (in.h) */ /* in.h - * **************************************************************** * Copyright (C) 2000 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__OS__NETINET__IN_H #define INCLUDE__OS__NETINET__IN_H #include "hackerlab/os/sys/types.h" #include /* automatically generated __STDC__ prototypes */ #endif /* INCLUDE__NETINET__IN_H */ tla-1.3.5+dfsg/src/hackerlab/os/Makefile.in0000644000175000017500000000136610457621774017151 0ustar useruser include-subdirs := sys netinet arpa generated-includes := exit-status.h alloca.h include $(makefiles)/library-objects.mk ifeq ($(cgs__install_hackerlab),1) include $(makefiles)/install-includes.mk endif exit-status.h: exit-status.gen cp $(srcdir)/exit-status.gen ,es.c $(CC) -o ,es -g ,es.c ./,es > exit-status.h rm ,es${cfg__exec_suffix} ,es.c ifeq ($(cfg__have_alloca_h_header),1) alloca.h: alloca.h.in sed -e 's/@@@/#include /' $(srcdir)/alloca.h.in > $@ else alloca.h: alloca.h.in sed -e 's,@@@,/* not needed on this system */,' $(srcdir)/alloca.h.in > $@ endif exit.o: exit-status.h clean: clean-os clean-os: test ! -e exit-status.h || rm exit-status.h # tag: Tom Lord Tue Dec 4 14:52:05 2001 (os/Makefile.in) # tla-1.3.5+dfsg/src/hackerlab/os/malloc.h0000644000175000017500000000147410457621774016524 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:41:29 2001 (malloc.h) */ /* malloc.h - * **************************************************************** * Copyright (C) 2000 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__OS__MALLOC_H #define INCLUDE__OS__MALLOC_H /* An alternative to for declaring `malloc' and * friends. * * Most hackerlab code should not use `malloc' directly. * Instead, use "hackerlab/mem/alloc-limits.h" */ #include "hackerlab/machine/types.h" extern void * calloc (size_t nmemb, size_t size); extern void free (void * ptr); extern void * malloc (size_t size); extern void * realloc (void * ptr, size_t size); /* automatically generated __STDC__ prototypes */ #endif /* INCLUDE__OS__MALLOC_H */ tla-1.3.5+dfsg/src/hackerlab/os/exit.h0000644000175000017500000000122110457621774016214 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:41:29 2001 (exit.h) */ /* exit.h - * **************************************************************** * Copyright (C) 2000 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__OS__EXIT_H #define INCLUDE__OS__EXIT_H /* An alternative to for declaring `exit' and * `atexit'. */ extern int atexit (void (*func)(void)); extern void exit (int status); #ifndef FOR_MAKEFILE_DEPENDENCIES #include "hackerlab/os/exit-status.h" #endif /* automatically generated __STDC__ prototypes */ #endif /* INCLUDE__OS__EXIT_H */ tla-1.3.5+dfsg/src/hackerlab/os/char-class-locale.h0000644000175000017500000000201210457621774020517 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:41:33 2001 (char-class-locale.h) */ /* char-class-locale.h - * **************************************************************** * Copyright (C) 2000 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__OS__CHAR_CLASS_LOCALE_H #define INCLUDE__OS__CHAR_CLASS_LOCALE_H #include "hackerlab/machine/types.h" /* automatically generated __STDC__ prototypes */ extern int char_is_alnum_locale (t_uchar c); extern int char_is_alpha_locale (t_uchar c); extern int char_is_control_locale (t_uchar c); extern int char_is_digit_locale (t_uchar c); extern int char_is_graph_locale (t_uchar c); extern int char_is_lower_locale (t_uchar c); extern int char_is_printable_locale (t_uchar c); extern int char_is_punct_locale (t_uchar c); extern int char_is_space_locale (t_uchar c); extern int char_is_upper_locale (t_uchar c); extern int char_is_xdigit_locale (t_uchar c); #endif /* INCLUDE__OS__CHAR_CLASS_LOCALE_H */ tla-1.3.5+dfsg/src/hackerlab/os/PLUGIN/0000755000175000017500000000000010457621774016074 5ustar userusertla-1.3.5+dfsg/src/hackerlab/os/PLUGIN/REQ0000644000175000017500000000003010457621774016437 0ustar userusermachine os os libboot tla-1.3.5+dfsg/src/hackerlab/os/setjmp.h0000644000175000017500000000071510457621774016554 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:41:30 2001 (setjmp.h) */ /* setjmp.h - * **************************************************************** * Copyright (C) 2000 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__OS__SETJMP_H #define INCLUDE__OS__SETJMP_H #include /* automatically generated __STDC__ prototypes */ #endif /* INCLUDE__OS__SETJMP_H */ tla-1.3.5+dfsg/src/hackerlab/os/signal.h0000644000175000017500000000071410457621774016526 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:41:32 2001 (signal.h) */ /* signal.h - * **************************************************************** * Copyright (C) 2000 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__OS__SIGNAL_H #define INCLUDE__OS__SIGNAL_H #include /* automatically generated __STDC__ prototypes */ #endif /* INCLUDE__OS__SIGNAL_H */ tla-1.3.5+dfsg/src/hackerlab/os/sys/0000755000175000017500000000000010457621774015714 5ustar userusertla-1.3.5+dfsg/src/hackerlab/os/sys/stat.h0000644000175000017500000000076510457621774017050 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:41:28 2001 (stat.h) */ /* stat.h - * **************************************************************** * Copyright (C) 2000 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__OS__OS__STAT_H #define INCLUDE__OS__OS__STAT_H #include "hackerlab/os/sys/types.h" #include /* automatically generated __STDC__ prototypes */ #endif /* INCLUDE__OS__OS__STAT_H */ tla-1.3.5+dfsg/src/hackerlab/os/sys/mman.h0000644000175000017500000000075210457621774017021 0ustar useruser/* mman.h: * **************************************************************** * Copyright (C) 2002 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__OS__MMAN_H #define INCLUDE__OS__MMAN_H #include "hackerlab/os/sys/types.h" #include /* automatically generated __STDC__ prototypes */ #endif /* INCLUDE__OS__MMAN_H */ /* tag: Tom Lord Sat Jan 5 15:26:10 2002 (mman.h) */ tla-1.3.5+dfsg/src/hackerlab/os/sys/time.h0000644000175000017500000000072410457621774017026 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:41:28 2001 (time.h) */ /* time.h - * **************************************************************** * Copyright (C) 2000 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__OS__SYS__TIME_H #define INCLUDE__OS__SYS__TIME_H #include /* automatically generated __STDC__ prototypes */ #endif /* INCLUDE__OS__SYS__TIME_H */ tla-1.3.5+dfsg/src/hackerlab/os/sys/un.h0000644000175000017500000000075310457621774016514 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:41:28 2001 (un.h) */ /* un.h - * **************************************************************** * Copyright (C) 2000 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__OS__SYS__UN_H #define INCLUDE__OS__SYS__UN_H #include "hackerlab/os/sys/types.h" #include /* automatically generated __STDC__ prototypes */ #endif /* INCLUDE__OS__SYS__UN_H */ tla-1.3.5+dfsg/src/hackerlab/os/sys/socket.h0000644000175000017500000000100310457621774017347 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:41:28 2001 (socket.h) */ /* socket.h - * **************************************************************** * Copyright (C) 2000 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__OS__SYS__SOCKET_H #define INCLUDE__OS__SYS__SOCKET_H #include "hackerlab/os/sys/types.h" #include /* automatically generated __STDC__ prototypes */ #endif /* INCLUDE__OS__SYS__SOCKET_H */ tla-1.3.5+dfsg/src/hackerlab/os/sys/types.h0000644000175000017500000000073110457621774017232 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:41:28 2001 (types.h) */ /* types.h - * **************************************************************** * Copyright (C) 2000 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__OS__SYS__TYPES_H #define INCLUDE__OS__SYS__TYPES_H #include /* automatically generated __STDC__ prototypes */ #endif /* INCLUDE__OS__SYS__TYPES_H */ tla-1.3.5+dfsg/src/hackerlab/os/sys/wait.h0000644000175000017500000000076710457621774017043 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:41:28 2001 (wait.h) */ /* wait.h - * **************************************************************** * Copyright (C) 2000 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__OS__SYS__WAIT_H #define INCLUDE__OS__SYS__WAIT_H #include "hackerlab/os/sys/types.h" #include /* automatically generated __STDC__ prototypes */ #endif /* INCLUDE__OS__SYS__WAIT_H */ tla-1.3.5+dfsg/src/hackerlab/os/sys/param.h0000644000175000017500000000071310457621774017166 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:41:29 2001 (param.h) */ /* param.h - * **************************************************************** * Copyright (C) 2001 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__SYS__PARAM_H #define INCLUDE__SYS__PARAM_H #include /* automatically generated __STDC__ prototypes */ #endif /* INCLUDE__SYS__PARAM_H */ tla-1.3.5+dfsg/src/hackerlab/os/netdb.h0000644000175000017500000000070610457621774016346 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:41:32 2001 (netdb.h) */ /* netdb.h - * **************************************************************** * Copyright (C) 2000 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__OS__NETDB_H #define INCLUDE__OS__NETDB_H #include /* automatically generated __STDC__ prototypes */ #endif /* INCLUDE__OS__NETDB_H */ tla-1.3.5+dfsg/src/hackerlab/os/utime.h0000644000175000017500000000075110457621774016375 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:41:31 2001 (utime.h) */ /* utime.h - * **************************************************************** * Copyright (C) 2000 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__OS__UTIME_H #define INCLUDE__OS__UTIME_H #include "hackerlab/os/sys/time.h" #include /* automatically generated __STDC__ prototypes */ #endif /* INCLUDE__OS__UTIME_H */ tla-1.3.5+dfsg/src/hackerlab/os/=README0000644000175000017500000000250510457621774016055 0ustar useruser# tag: Tom Lord Tue Dec 4 15:06:35 2001 (os/=README) # Gateway to System Include Files A Hackerlab coding convention is that every include file should: 1. Be idempotent. Including an already included file must have no effect. 2. Be self-sufficient. No include file may require that a second file be included first. System header files generally do not have those properties. Therefore, Hackerlab code doesn't use those header files directly. Instead, they use the `os' header files. Whenever you would normally have a sequence of system includes such as: #include #include where `A.h' is required to be included before `B.h', in Hackerlab code, write: #include "hackerlab/os/B.h" The set of files here isn't yet ``complete'' -- files are being added as-needed. Still, the most commonly needed files for file system access, time values, and network programming are all here. There are also a few C functions here which simply call equivalent functions in libc (e.g. `errno_to_string' which calls `strerror'). In some cases, there is a tentative plan to later replace these with new implementations for various obscure reasons (e.g., because some popular libc implementation or other is absurd). In other cases, I simply wanted a function name that was consistent with other names in `libhackerlab'. tla-1.3.5+dfsg/src/hackerlab/os/math.h0000644000175000017500000000070010457621774016175 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:41:32 2001 (math.h) */ /* math.h - * **************************************************************** * Copyright (C) 2000 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__OS__MATH_H #define INCLUDE__OS__MATH_H #include /* automatically generated __STDC__ prototypes */ #endif /* INCLUDE__OS__MATH_H */ tla-1.3.5+dfsg/src/hackerlab/os/limits.h0000644000175000017500000000153010457621774016547 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:41:29 2001 (limits.h) */ /* limits.h - * **************************************************************** * Copyright (C) 2000 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__OS__LIMITS_H #define INCLUDE__OS__LIMITS_H /* * macro >= * * CHAR_BIT 8 * SCHAR_MIN -127 * SCHAR_MAX 127 * UCHAR_MAX 255 * CHAR_MIN SCHAR_MIN or 0 * CHAR_MAX SCHAR_MAX or UCHAR_MAX * MB_LEN_MAX 1 -- not used in hackerlab * SHRT_MIN -32767 * SHRT_MAX 32767 * USHRT_MAX 65535 * INT_MIN -32767 * INT_MAX -32767 * UINT_MAX 65535 * LONG_MIN -2147483647 * LONG_MAX -2147483647 * ULONG_MAX 4294967295 * */ #include /* automatically generated __STDC__ prototypes */ #endif /* INCLUDE__OS__LIMITS_H */ tla-1.3.5+dfsg/src/hackerlab/obtables/0000755000175000017500000000000010457621774016250 5ustar userusertla-1.3.5+dfsg/src/hackerlab/obtables/obtable.h0000644000175000017500000001521410457621774020034 0ustar useruser/* obtable.h: * **************************************************************** * Copyright (C) 2004 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBAWIKI__OBTABLE_H #define INCLUDE__LIBAWIKI__OBTABLE_H #include "hackerlab/mem/alloc-limits.h" /* General idea, in lieu of proper documentation for now. * * * An 'obtable' is a pool from which memory regions of a * fixed size (per obtable) can be allocated and freed. * These regions of memory are /not/ at a fixed location: * a later allocation or free in the same obtable can move * them. * * Therefore, instead of using pointers to refer to a region * of memory allocated from an obtable, a small non-negative * integer is used (similar to a file descriptor). You can * request the current physical address of a given region within * an obtable by providing the index of that object ('obtable_ref'). * * To create an obtable, allocate storage for type 't_obtable' * and pass the address of that storage to 'init_obtable'. * To free an obtable (and everything allocated from it) use * 'uninit_obtable'. * * Use 'obtable_alloc' and 'obtable_free' to allocate and free * elements from the table. Use 'obtable_ref' to get the * temporary address of an object: the address ceases to be * valid after the next 'alloc' or 'free' operation on the * same table. * * 'obtable_n_elts' tells you how many elements are currently * allocated. It returns 0 if the indicated element is not currently * allocated. * * 'obtable_room' tells you a current upper bound on the integer * index of allocated elements. Thus, you can use 'obtable_room' * as an upper bound when iterating over object indexes to find * all allocated objects. * * Sample: * * // a table of 'struct foo' records. * * t_obtable table; * ssize_t an_elt_idx; * struct foo * an_elt; * * if (0 > init_obtable (&table, 0, sizeof (struct foo), 0, 0)) * ... uh oh, some kind of internal error ...; * * an_elt_idx = obtable_alloc (&table, 0, sizeof (struct foo), 0, 0); * if (an_elt_idx < 0) * .... uh oh, allocation failure ...; * * an_elt = obtable_ref (&table, 0, sizeof (struct foo), 0, 0, an_elt_idx); * invariant (!!an_elt); // we know that an_elt_idx is valid * * // later: * obtable_free (&table, 0, sizeof (struct foo), 0, 0, an_elt_idx); * * The extra, usually 0 parameters in the above calls are part of an * interface for hooks to specially initialize and uninitialize individual * elements within an obtable. */ typedef struct obtable t_obtable; typedef struct obtable_type t_obtable_type; typedef int (*t_obtable_init_fn) (t_obtable * ot, alloc_limits limits, ssize_t elt_size, t_obtable_type * type, void * closure, void * mem, ssize_t n_elts); typedef void (*t_obtable_uninit_fn) (t_obtable * ot, alloc_limits limits, ssize_t elt_size, t_obtable_type * type, void * closure, void * mem, ssize_t n_elts); struct obtable_type { t_obtable_init_fn init; t_obtable_uninit_fn uninit; }; struct obtable { void * _storage; ssize_t _n_free; ssize_t _free_list; ssize_t * _free_list_link; }; struct obtable_elt { void * _dummy; /* Some compilers don't like zero-sized structs */ }; #define OBTABLE_STATIC_TABLE(STEM,ELT_TYPE) \ static t_obtable * \ STEM ## _obtable (void) \ { \ static t_obtable table; \ static int initialized = 0; \ \ if (!initialized) \ { \ if (0 > init_obtable (&table, lim_use_malloc, sizeof (ELT_TYPE), 0, 0)) \ return 0; \ initialized = 1; \ } \ return &table; \ } \ static ssize_t STEM ## _alloc_id (void) { return obtable_alloc (STEM ## _obtable (), lim_use_malloc, sizeof (ELT_TYPE), 0, 0); } \ static void STEM ## _free_id (ssize_t e) { obtable_free (STEM ## _obtable (), lim_use_malloc, sizeof (ELT_TYPE), 0, 0, e); } \ static ELT_TYPE * STEM ## _ref_id (ssize_t e) { return (ELT_TYPE *)obtable_ref (STEM ## _obtable (), lim_use_malloc, sizeof (ELT_TYPE), 0, 0, e); } \ extern ssize_t unused__ ## STEM ## __unused /* automatically generated __STDC__ prototypes */ extern int init_obtable (t_obtable * ot, alloc_limits limits, ssize_t elt_size, t_obtable_type * type, void * closure); extern void uninit_obtable (t_obtable * ot, alloc_limits limits, ssize_t elt_size, t_obtable_type * type, void * closure); extern ssize_t obtable_alloc (t_obtable * ot, alloc_limits limits, ssize_t elt_size, t_obtable_type * type, void * closure); extern void obtable_free (t_obtable * ot, alloc_limits limits, ssize_t elt_size, t_obtable_type * type, void * closure, ssize_t it); extern ssize_t obtable_n_elts (t_obtable * ot, alloc_limits limits, ssize_t elt_size, t_obtable_type * type, void * closure); extern ssize_t obtable_is_free (t_obtable * ot, alloc_limits limits, ssize_t elt_size, t_obtable_type * type, void * closure, ssize_t n); extern void * obtable_ref (t_obtable * ot, alloc_limits limits, ssize_t elt_size, t_obtable_type * type, void * closure, ssize_t n); extern ssize_t obtable_room (t_obtable * ot, alloc_limits limits, ssize_t elt_size, t_obtable_type * type, void * closure); #endif /* INCLUDE__LIBAWIKI__OBTABLE_H */ /* tag: Tom Lord Fri Oct 22 15:14:34 2004 (obtable.h) */ tla-1.3.5+dfsg/src/hackerlab/obtables/Makefile.in0000644000175000017500000000027710457621774020323 0ustar useruserinclude $(makefiles)/library-objects.mk ifeq ($(cgs__install_hackerlab),1) include $(makefiles)/install-includes.mk endif # tag: Tom Lord Thu Nov 4 09:03:32 2004 (obtables/Makefile.in) # tla-1.3.5+dfsg/src/hackerlab/obtables/obtable.c0000644000175000017500000001144510457621774020031 0ustar useruser/* obtable.c: * **************************************************************** * Copyright (C) 2004 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/bugs/panic.h" #include "hackerlab/mem/mem.h" #include "hackerlab/arrays/ar.h" #include "hackerlab/obtables/obtable.h" /* __STDC__ prototypes for static functions */ int init_obtable (t_obtable * ot, alloc_limits limits, ssize_t elt_size, t_obtable_type * type, void * closure) { if (!ot) return -1; else { mem_set0 ((t_uchar *)ot, sizeof (*ot)); ot->_free_list = -1; return 0; } } void uninit_obtable (t_obtable * ot, alloc_limits limits, ssize_t elt_size, t_obtable_type * type, void * closure) { if (!ot) return; if (type && type->uninit) { t_uchar * mem; ssize_t bound; ssize_t x; mem = ot->_storage; bound = obtable_room (ot, limits, elt_size, type, closure); for (x = 0; x < bound; ++x) { if (x == ot->_free_list_link[x]) type->uninit (ot, limits, elt_size, type, closure, (void *)(mem + x * elt_size), 1); } } ar_free ((void **)&ot->_storage, limits); ar_free ((void **)&ot->_free_list_link, limits); } ssize_t obtable_alloc (t_obtable * ot, alloc_limits limits, ssize_t elt_size, t_obtable_type * type, void * closure) { if (!ot) return -1; if (0 <= ot->_free_list) { ssize_t answer; ssize_t new_free_list; void * elt; answer = ot->_free_list; elt = (void *)((t_uchar *)ot->_storage + answer * elt_size); new_free_list = ot->_free_list_link[answer]; if (!type || !type->init) { mem_set0 ((t_uchar *)elt, elt_size); } else { if (0 > type->init (ot, limits, elt_size, type, closure, elt, 1)) return -1; } ot->_free_list_link[answer] = answer; ot->_free_list = new_free_list; --ot->_n_free; return answer; } else { ssize_t answer; void * elt; ssize_t * free_link; answer = ar_size ((void *)ot->_storage, limits, elt_size); elt = (void *)ar_push ((void **)&ot->_storage, limits, elt_size); if (!elt) return -1; free_link = (ssize_t *)ar_push ((void **)&ot->_free_list_link, limits, sizeof (ssize_t)); if (!free_link) return -1; if (type && type->init) { if (0 > type->init (ot, limits, elt_size, type, closure, elt, 1)) return -1; } invariant (free_link == &ot->_free_list_link[answer]); *free_link = answer; return answer; } } void obtable_free (t_obtable * ot, alloc_limits limits, ssize_t elt_size, t_obtable_type * type, void * closure, ssize_t it) { void * elt; elt = obtable_ref (ot, limits, elt_size, type, closure, it); if (elt) { if (!type || !type->uninit) mem_set0 ((t_uchar *)elt, elt_size); else type->uninit (ot, limits, elt_size, type, closure, elt, 1); ot->_free_list_link[it] = ot->_free_list; ot->_free_list = it; ++ot->_n_free; } } ssize_t obtable_n_elts (t_obtable * ot, alloc_limits limits, ssize_t elt_size, t_obtable_type * type, void * closure) { if (!ot) return 0; else return obtable_room (ot, limits, elt_size, type, closure) - ot->_n_free; } ssize_t obtable_is_free (t_obtable * ot, alloc_limits limits, ssize_t elt_size, t_obtable_type * type, void * closure, ssize_t n) { if (!ot) return -1; else return !!obtable_ref (ot, limits, elt_size, type, closure, n); } void * obtable_ref (t_obtable * ot, alloc_limits limits, ssize_t elt_size, t_obtable_type * type, void * closure, ssize_t n) { void * elt; if (!ot) return 0; if (n < 0) return 0; if (n >= obtable_room (ot, limits, elt_size, type, closure)) return 0; elt = (void *)((t_uchar *)ot->_storage + n * elt_size); if (n != ot->_free_list_link[n]) return 0; return elt; } ssize_t obtable_room (t_obtable * ot, alloc_limits limits, ssize_t elt_size, t_obtable_type * type, void * closure) { if (!ot) return 0; else return (ssize_t)ar_size ((void *)ot->_storage, limits, elt_size); } /* tag: Tom Lord Fri Oct 22 15:16:24 2004 (obtable.c) */ tla-1.3.5+dfsg/src/hackerlab/obtables/PLUGIN/0000755000175000017500000000000010457621774017246 5ustar userusertla-1.3.5+dfsg/src/hackerlab/obtables/PLUGIN/REQ0000644000175000017500000000004710457621774017621 0ustar useruserarrays obtables obtables libhackerlab tla-1.3.5+dfsg/src/hackerlab/sb/0000755000175000017500000000000010457621774015061 5ustar userusertla-1.3.5+dfsg/src/hackerlab/sb/UNPLUGGED/0000755000175000017500000000000010457621774016413 5ustar userusertla-1.3.5+dfsg/src/hackerlab/sb/UNPLUGGED/REQ0000644000175000017500000000003110457621774016757 0ustar useruserlibboot sb sb libboot2 tla-1.3.5+dfsg/src/hackerlab/sb/Makefile.in0000644000175000017500000000037010457621774017126 0ustar useruser libs := $(objroot)/hackerlab/libboot/libboot.a -lm mains := sb.c include $(makefiles)/programs.mk ifeq ($(cgs__install_hackerlab),1) include $(makefiles)/install-programs.mk endif # tag: Tom Lord Tue Dec 4 14:52:16 2001 (sb/Makefile.in) # tla-1.3.5+dfsg/src/hackerlab/sb/sb.c0000644000175000017500000001307410457621774015636 0ustar useruser/* sb.c * **************************************************************** * Copyright (C) 1999, 2002 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "config-options.h" #include "hackerlab/os/errno-to-string.h" #include "hackerlab/vu/vu-help.h" #include "hackerlab/vu/vu-dash.h" #include "hackerlab/vu/url-fd.h" #include "hackerlab/vu-network/url-socket.h" #include "hackerlab/cmd/main.h" static t_uchar * program_name = "sb"; static t_uchar * usage = "[options] [input-file [output-file]]"; static t_uchar * version_string = (cfg__std__package " from regexps.com\n" "\n" "Copyright 2001, 2002 Tom Lord\n" "\n" "This is free software; see the source for copying conditions.\n" "There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\n" "PARTICULAR PURPOSE.\n" "\n" "Report bugs to .\n" "\n"); #define OPTS(OP, OP2) \ OP (opt_help_msg, "h", "help", 0, "Display a help message and exit.") \ OP (opt_help_namespaces, 0, "help-namespaces", 0, "Display help for --namespace and exit.") \ OP (opt_version, "V", "version", 0, "Display a release identifier string and exit.") \ OP (opt_append, "a", "append", 0, "Open the output file for append.") \ OP (opt_namespace, "N type", "namespace category", 1, "Extend the file namespace.") \ OP2 (opt_namespace, 0, 0, 0, "This option may be used more than once.") \ OP2 (opt_namespace, 0, 0, 0, "See also --help-namespaces.") enum options { OPTS (OPT_ENUM, OPT_IGN) }; struct opt_desc opts[] = { OPTS (OPT_DESC, OPT_DESC) {-1, 0, 0, 0, 0} }; int main (int argc, char * argv[]) { int errn; int in_fd; int out_fd; int append; int o; struct opt_parsed * option = 0; if ( vfdbuf_buffer_fd (&errn, 0, 0, O_RDONLY, 0) || vfdbuf_buffer_fd (&errn, 1, 0, O_WRONLY, 0) || vfdbuf_buffer_fd (&errn, 2, 0, O_WRONLY, 0)) { printfmt (&errn, 2, "error establishing buffers on standard descriptors (%s).", errno_to_string (errn)); exit (1); } url_socket_push_server_handler (url_socket_inet_or_unix, 0, 0, 1, -1, 1, 0, 0, 0, 0, 1); url_socket_push_server_handler (url_socket_inet, 0, 0, 1, -1, 1, 0, 0, 0, 0, 1); url_socket_push_server_handler (url_socket_unix, 0, 0, 1, -1, 1, 0, 0, 0, 0, 1); url_socket_push_server_handler (url_socket_inet_or_unix, 0, 0, 0, -1, 1, 0, 0, 0, 0, 1); url_socket_push_server_handler (url_socket_inet, 0, 0, 0, -1, 1, 0, 0, 0, 0, 1); url_socket_push_server_handler (url_socket_unix, 0, 0, 0, -1, 1, 0, 0, 0, 0, 1); url_socket_push_server_handler (url_socket_unix, 0, 1, 0, -1, 1, 0, 0, 0, 0, 1); url_socket_push_server_handler (url_socket_inet, 0, 1, 0, -1, 1, 0, 0, 0, 0, 1); url_socket_push_server_handler (url_socket_inet_or_unix, 0, 1, 0, -1, 1, 0, 0, 0, 0, 1); url_socket_push_client_handler (url_socket_inet_or_unix, -1, 1); url_socket_push_client_handler (url_socket_inet, -1, 1); url_socket_push_client_handler (url_socket_unix, -1, 1); url_fd_push_handler (1); vu_push_dash_handler (0); append = 0; option = 0; while (1) { o = opt_standard (lim_use_must_malloc, &option, opts, &argc, argv, program_name, usage, version_string, 0, opt_help_msg, -1, opt_version); if (o == opt_none) break; switch (o) { default: safe_printfmt (2, "unhandled option `%s'\n", option->opt_string); panic ("internal error parsing arguments"); usage_error: opt_usage (2, argv[0], program_name, usage, 1); panic_exit (); bogus_arg: safe_printfmt (2, "ill-formed argument for `%s' (`%s')\n", option->opt_string, option->arg_string); goto usage_error; case opt_help_namespaces: printfmt (&errn, 1, "\n"); printfmt (&errn, 1, "--namespace=category adds support for a category of special file names.\n"); printfmt (&errn, 1, "Special file names are URLs with the general syntax $SCHEME:$PARAMETERS\n"); printfmt (&errn, 1, "\n\n"); vu_help_for_optional_handlers ("--namespace", 1); exit (0); case opt_append: append = 1; break; case opt_namespace: if (0 > vu_enable_optional_name_handler (option->arg_string)) goto bogus_arg; break; } } if (argc < 2) in_fd = 0; else { in_fd = vu_open (&errn, argv[1], O_RDONLY, 0); if (in_fd < 0) { printfmt (&errn, 2, "unable to open `%s' for input (\"%s\")\n", argv[1], errno_to_string (errn)); exit (1); } opt_shift (&argc, argv); } if (argc > 3) goto usage_error; if (argc < 2) out_fd = 1; else { out_fd = vu_open (&errn, argv[1], O_WRONLY | O_CREAT | (append ? O_APPEND : O_EXCL), 0666); if (out_fd < 0) { printfmt (&errn, 2, "unable to open `%s' for output (\"%s\")\n", argv[1], errno_to_string (errn)); exit (1); } opt_shift (&argc, argv); } { int page_size; int buf_size; char * buf; int read_size; int write_size; page_size = getpagesize (); buf_size = page_size * 10; buf = must_malloc (buf_size); while (1) { read_size = vu_read (&errn, in_fd, buf, buf_size); if (read_size < 0) { printfmt (&errn, 2, "i/o error reading input (%s)\n", errno_to_string (errn)); exit (1); } if (read_size == 0) exit (0); write_size = vu_write_retry (&errn, out_fd, buf, read_size); if (write_size < 0) { printfmt (&errn, 2, "i/o error writing output (%s)\n", errno_to_string (errn)); exit (1); } if (write_size != read_size) panic ("bizarre vu_write_retry error (wrong amount written)"); } } return 0; } /* tag: suck and blow */ tla-1.3.5+dfsg/src/hackerlab/sort/0000755000175000017500000000000010457621774015444 5ustar userusertla-1.3.5+dfsg/src/hackerlab/sort/Makefile.in0000644000175000017500000000027310457621774017513 0ustar useruser include $(makefiles)/library-objects.mk ifeq ($(cgs__install_hackerlab),1) include $(makefiles)/install-includes.mk endif # tag: Tom Lord Fri Feb 22 06:59:28 2002 (sort/Makefile.in) # tla-1.3.5+dfsg/src/hackerlab/sort/qsort.h0000644000175000017500000000126210457621774016766 0ustar useruser/* qsort.h: * **************************************************************** * Copyright (C) 2002 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__SORT__QSORT_H #define INCLUDE__SORT__QSORT_H #include "hackerlab/os/sys/types.h" typedef int (*quicksort_cmp) (void * a, void * b, void * closure); /* automatically generated __STDC__ prototypes */ extern void quicksort (void * base, size_t n_elts, size_t sizeof_elt, quicksort_cmp cmp, void * closure); #endif /* INCLUDE__SORT__QSORT_H */ /* tag: Tom Lord Sat Jan 5 15:26:10 2002 (qsort.h) */ tla-1.3.5+dfsg/src/hackerlab/sort/qsort.c0000644000175000017500000002261310457621774016764 0ustar useruser/* qsort.c: * **************************************************************** * Copyright (C) 1991, 1992, 1996, 1997, 1999 Free Software Foundation, Inc. * Modifications (C) 2002, Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. * * This file is snarfed from the GNU C Library and modified for libhackerlab. * Originally Written by Douglas C. Schmidt (schmidt@ics.uci.edu). * */ #include #include #include #include "hackerlab/sort/qsort.h" /* This implementation incorporates four optimizations discussed in Sedgewick: * * 1. Non-recursive, using an explicit stack of pointer that store the * next array partition to sort. To save time, this maximum amount * of space required to store an array of SIZE_MAX is allocated on the * stack. Assuming a 32-bit (64 bit) integer for size_t, this needs * only 32 * sizeof(stack_node) == 256 bytes (for 64 bit: 1024 bytes). * Pretty cheap, actually. * * 2. Chose the pivot element using a median-of-three decision tree. * This reduces the probability of selecting a bad pivot value and * eliminates certain extraneous comparisons. * * 3. Only quicksorts TOTAL_ELEMS / MAX_THRESH partitions, leaving * insertion sort to order the MAX_THRESH items within each partition. * This is a big win, since insertion sort is faster for small, mostly * sorted array segments. * * 4. The larger of the two sub-partitions is always pushed onto the * stack first, with the algorithm then concentrating on the * smaller partition. This *guarantees* no more than log (total_elems) * stack size is needed (actually O(1) in this case)! */ /* Discontinue quicksort algorithm when partition gets below this size. * This particular magic number was chosen to work best on a Sun 4/260. */ #define MAX_THRESH 4 /* Stack node declarations used to store unfulfilled partition obligations. */ struct stack_node { char *lo; char *hi; }; /* The next 4 #defines implement a very fast in-line stack abstraction. * * The stack needs log (total_elements) entries (we could even subtract * log(MAX_THRESH)). Since total_elements has type size_t, we get as * upper bound for log (total_elements): * bits per byte (CHAR_BIT) * sizeof(size_t) */ #define STACK_SIZE (8 * sizeof(size_t)) #define PUSH(low, high) ((void) ((top->lo = (low)), (top->hi = (high)), ++top)) #define POP(low, high) ((void) (--top, (low = top->lo), (high = top->hi))) #define STACK_NOT_EMPTY (stack < top) /* Byte-wise swap two items of size SIZE. */ #define SWAP(a, b, size) \ do \ { \ size_t __size = (size); \ char * __a; \ char * __b; \ \ __size = (size); \ __a = (a); \ __b = (b); \ \ do \ { \ char __tmp; \ \ __tmp = *__a; \ *__a++ = *__b; \ *__b++ = __tmp; \ } \ while (--__size > 0); \ } \ while (0) void quicksort (void * base, size_t n_elts, size_t sizeof_elt, quicksort_cmp cmp, void * closure) { char * base_ptr; size_t max_thresh; if (n_elts == 0) return; base_ptr = (char *)base; max_thresh = MAX_THRESH * sizeof_elt; if (n_elts > MAX_THRESH) { struct stack_node stack[STACK_SIZE]; struct stack_node *top; char *lo; char *hi; top = stack + 1; lo = base_ptr; hi = &lo[sizeof_elt * (n_elts - 1)]; while (STACK_NOT_EMPTY) { char *left_ptr; char *right_ptr; char *mid; /* Select median value from among LO, MID, and HI. Rearrange * LO and HI so the three values are sorted. This lowers the * probability of picking a pathological pivot value and * skips a comparison for both the LEFT_PTR and RIGHT_PTR in * the while loops. */ mid = lo + sizeof_elt * ((hi - lo) / sizeof_elt >> 1); if ((*cmp) ((void *) mid, (void *) lo, closure) < 0) { SWAP (mid, lo, sizeof_elt); } if ((*cmp) ((void *) hi, (void *) mid, closure) < 0) { SWAP (mid, hi, sizeof_elt); } else goto jump_over; if ((*cmp) ((void *) mid, (void *) lo, closure) < 0) SWAP (mid, lo, sizeof_elt); jump_over: left_ptr = lo + sizeof_elt; right_ptr = hi - sizeof_elt; /* Here's the famous ``collapse the walls'' section of quicksort. * Gotta like those tight inner loops! They are the main reason * that this algorithm runs much faster than others. */ do { while ((*cmp) ((void *) left_ptr, (void *) mid, closure) < 0) left_ptr += sizeof_elt; while ((*cmp) ((void *) mid, (void *) right_ptr, closure) < 0) right_ptr -= sizeof_elt; if (left_ptr < right_ptr) { SWAP (left_ptr, right_ptr, sizeof_elt); if (mid == left_ptr) mid = right_ptr; else if (mid == right_ptr) mid = left_ptr; left_ptr += sizeof_elt; right_ptr -= sizeof_elt; } else if (left_ptr == right_ptr) { left_ptr += sizeof_elt; right_ptr -= sizeof_elt; break; } } while (left_ptr <= right_ptr); /* Set up pointers for next iteration. First determine whether * left and right partitions are below the threshold size. If so, * ignore one or both. Otherwise, push the larger partition's * bounds on the stack and continue sorting the smaller one. */ if ((size_t) (right_ptr - lo) <= max_thresh) { if ((size_t) (hi - left_ptr) <= max_thresh) { /* Ignore both small partitions. */ POP (lo, hi); } else { /* Ignore small left partition. */ lo = left_ptr; } } else if ((size_t) (hi - left_ptr) <= max_thresh) { /* Ignore small right partition. */ hi = right_ptr; } else if ((right_ptr - lo) > (hi - left_ptr)) { /* Push larger left partition indices. */ PUSH (lo, right_ptr); lo = left_ptr; } else { /* Push larger right partition indices. */ PUSH (left_ptr, hi); hi = right_ptr; } } } /* Once the BASE_PTR array is partially sorted by quicksort the rest * is completely sorted using insertion sort, since this is efficient * for partitions below MAX_THRESH size. BASE_PTR points to the beginning * of the array to sort, and END_PTR points at the very last element in * the array (*not* one beyond it!). */ #define min(x, y) ((x) < (y) ? (x) : (y)) { char * end_ptr; char * tmp_ptr; char * thresh; char * run_ptr; end_ptr = &base_ptr[sizeof_elt * (n_elts - 1)]; tmp_ptr = base_ptr; thresh = min(end_ptr, base_ptr + max_thresh); /* Find smallest element in first threshold and place it at the * array's beginning. This is the smallest array element, * and the operation speeds up insertion sort's inner loop. */ for (run_ptr = tmp_ptr + sizeof_elt; run_ptr <= thresh; run_ptr += sizeof_elt) if ((*cmp) ((void *) run_ptr, (void *) tmp_ptr, closure) < 0) tmp_ptr = run_ptr; if (tmp_ptr != base_ptr) { SWAP (tmp_ptr, base_ptr, sizeof_elt); } /* Insertion sort, running from left-hand-side up to right-hand-side. */ run_ptr = base_ptr + sizeof_elt; while ((run_ptr += sizeof_elt) <= end_ptr) { tmp_ptr = run_ptr - sizeof_elt; while ((*cmp) ((void *) run_ptr, (void *) tmp_ptr, closure) < 0) tmp_ptr -= sizeof_elt; tmp_ptr += sizeof_elt; if (tmp_ptr != run_ptr) { char *trav; trav = run_ptr + sizeof_elt; while (--trav >= run_ptr) { char c; char * hi; char * lo; c = *trav; for (hi = lo = trav; (lo -= sizeof_elt) >= tmp_ptr; hi = lo) *hi = *lo; *hi = c; } } } } } /* tag: Tom Lord Fri Feb 22 06:34:02 2002 (qsort.c) */ tla-1.3.5+dfsg/src/hackerlab/sort/PLUGIN/0000755000175000017500000000000010457621774016442 5ustar userusertla-1.3.5+dfsg/src/hackerlab/sort/PLUGIN/REQ0000644000175000017500000000002710457621774017013 0ustar useruseros sort sort libboot tla-1.3.5+dfsg/src/hackerlab/libboot2/0000755000175000017500000000000010457621774016171 5ustar userusertla-1.3.5+dfsg/src/hackerlab/libboot2/Makefile.in0000644000175000017500000000020110457621774020227 0ustar useruser# tag: Tom Lord Tue Dec 4 14:52:18 2001 (libboot2/Makefile.in) # otherdirs := $(boot2_dirs) include $(makefiles)/library.mk tla-1.3.5+dfsg/src/hackerlab/libboot2/PLUGIN/0000755000175000017500000000000010457621774017167 5ustar userusertla-1.3.5+dfsg/src/hackerlab/libboot2/PLUGIN/REQ0000644000175000017500000000002210457621774017533 0ustar useruserlibboot2 libboot2 tla-1.3.5+dfsg/src/hackerlab/strings/0000755000175000017500000000000010457621774016146 5ustar userusertla-1.3.5+dfsg/src/hackerlab/strings/ustr-inlines.h0000644000175000017500000002133610457621774020760 0ustar useruser/* ustr-inlines.h: * **************************************************************** * Copyright (C) 2004 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__STRINGS__USTR_INLINES_H #define INCLUDE__STRINGS__USTR_INLINES_H #include "hackerlab/strings/ustr.h" /* automatically generated __STDC__ prototypes */ extern inline__ ustr_cv_index_t ustr_cv_index (ssize_t n); extern inline__ ustr_cp_index_t ustri_cp_index (ssize_t n); extern inline__ size_t ustri_cv_index_to_scanner_index (enum uni_encoding_scheme enc, ustr_cv_index_t n); extern inline__ ustr_cv_index_t ustri_scanner_index_to_cv_index (enum uni_encoding_scheme enc, size_t n); extern inline__ uni_string ustri_cv_offset (uni_string str, enum uni_encoding_scheme enc, ustr_cv_index_t n); extern inline__ uni_string ustri_cv_offset_n (ustr_cv_index_t * new_length, uni_string str, enum uni_encoding_scheme enc, ustr_cv_index_t len, ustr_cv_index_t n); extern inline__ t_unicode ustri_scan (uni_string * str_after, uni_string str, enum uni_encoding_scheme enc); extern ustr_cv_index_t ustr_str_subtract (uni_string a, uni_string b, enum uni_encoding_scheme enc); extern inline__ t_unicode ustri_scan_n (uni_string * str_after, ustr_cv_index_t * len_after, uni_string str, enum uni_encoding_scheme enc, ustr_cv_index_t length); extern inline__ int ustri_put (uni_string * str_after, uni_string str, enum uni_encoding_scheme enc, t_unicode c, enum ustr_set_type set_type); extern inline__ int ustri_put_n (uni_string * str_after, ustr_cv_index_t * len_after, uni_string str, enum uni_encoding_scheme enc, ustr_cv_index_t len, t_unicode c, enum ustr_set_type set_type); extern inline__ t_unicode ustri_cv_ref (ustr_cv_index_t * index_after, uni_string str, enum uni_encoding_scheme enc, ustr_cv_index_t index); extern inline__ t_unicode ustri_cv_ref_n (ustr_cv_index_t * index_after, uni_string str, enum uni_encoding_scheme enc, ustr_cv_index_t len, ustr_cv_index_t index); extern inline__ int ustri_cv_set (ustr_cv_index_t * index_after, uni_string str, enum uni_encoding_scheme enc, ustr_cv_index_t index, t_unicode c, enum ustr_set_type set_type); extern inline__ int ustri_cv_set_n (ustr_cv_index_t * index_after, ustr_cv_index_t * len_after, uni_string str, enum uni_encoding_scheme enc, ustr_cv_index_t len, ustr_cv_index_t index, t_unicode c, enum ustr_set_type set_type); extern inline__ uni_string ustr_cp_offset_case (uni_string str, enum uni_encoding_scheme enc, ustr_cp_index_t n); extern inline__ uni_string ustr_cp_offset (uni_string str, enum uni_encoding_scheme enc, ustr_cp_index_t n); extern inline__ uni_string ustr_cp_offset_n_case (uni_string str, enum uni_encoding_scheme enc, ustr_cv_index_t len, ustr_cp_index_t n); extern inline__ uni_string ustr_cp_offset_n (uni_string str, enum uni_encoding_scheme enc, ustr_cv_index_t len, ustr_cp_index_t n); extern inline__ ustr_cv_index_t ustri_cv_length (uni_string str, enum uni_encoding_scheme enc); extern inline__ ustr_cv_index_t ustri_cv_length_in_encoding (enum uni_encoding_scheme dest_enc, uni_string str, enum uni_encoding_scheme enc); extern inline__ ustr_cv_index_t ustri_cv_length_in_encoding_n (enum uni_encoding_scheme dest_enc, uni_string str, enum uni_encoding_scheme enc, ustr_cv_index_t len); extern inline__ ustr_cp_index_t ustri_cp_length (enum uni_encoding_scheme * fw_enc, uni_string str, enum uni_encoding_scheme enc); extern inline__ ustr_cp_index_t ustri_cp_length_n (enum uni_encoding_scheme * fw_enc, uni_string str, enum uni_encoding_scheme enc, ustr_cv_index_t len); extern inline__ uni_string ustri_copy (uni_string dest, enum uni_encoding_scheme dest_enc, uni_string str, enum uni_encoding_scheme enc); extern inline__ uni_string ustri_copy_n (uni_string dest, enum uni_encoding_scheme dest_enc, ustr_cv_index_t dest_len, uni_string str, enum uni_encoding_scheme enc, ustr_cv_index_t len); extern inline__ uni_string ustri_cat (uni_string dest, enum uni_encoding_scheme dest_enc, uni_string str, enum uni_encoding_scheme enc); extern inline__ uni_string ustri_cat_n (uni_string dest, enum uni_encoding_scheme dest_enc, ustr_cv_index_t dest_len, uni_string str, ustr_cv_index_t len, enum uni_encoding_scheme enc); extern inline__ uni_string ustri_save (alloc_limits limits, enum uni_encoding_scheme dest_enc, uni_string str, enum uni_encoding_scheme enc); extern inline__ uni_string ustri_save_n_case (ustr_cv_index_t * dest_len, alloc_limits limits, enum uni_encoding_scheme dest_enc, uni_string str, enum uni_encoding_scheme enc, ustr_cv_index_t len); extern inline__ uni_string ustri_save_n (ustr_cv_index_t * dest_len, alloc_limits limits, enum uni_encoding_scheme dest_enc, uni_string str, enum uni_encoding_scheme enc, ustr_cv_index_t len); #endif /* INCLUDE__STRINGS__USTR_INLINES_H */ /* tag: Tom Lord Wed May 19 09:42:28 2004 (ustr-inlines.h) */ tla-1.3.5+dfsg/src/hackerlab/strings/udstr.h0000644000175000017500000002413610457621774017466 0ustar useruser/* udstr.h: * **************************************************************** * Copyright (C) 2004 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__STRINGS__UDSTR_H #define INCLUDE__STRINGS__UDSTR_H #include "hackerlab/strings/ustr.h" struct udstr_handle; typedef struct udstr_handle * t_udstr; /* automatically generated __STDC__ prototypes */ extern t_udstr udstr_save (alloc_limits limits, uni_string str, enum uni_encoding_scheme enc); extern t_udstr udstr_save_n (alloc_limits limits, uni_string str, enum uni_encoding_scheme enc, ustr_cv_index_t len); extern t_udstr udstr_save_fw (alloc_limits limits, uni_string str, enum uni_encoding_scheme enc); extern t_udstr udstr_save_fw_n (alloc_limits limits, uni_string str, enum uni_encoding_scheme enc, ustr_cv_index_t len); extern t_udstr udstr_save_generic (alloc_limits limits, enum uni_encoding_scheme dest_enc, ustr_cv_index_t dest_len, uni_string str, enum uni_encoding_scheme enc, ustr_cv_index_t len, ustr_cp_index_t cp_len); extern void udstr_ref (t_udstr d); extern void udstr_unref (t_udstr d); extern ustr_cv_index_t udstr_cv_length (t_udstr dstr); extern ustr_cp_index_t udstr_cp_length (t_udstr dstr); extern enum uni_encoding_scheme udstr_encoding (t_udstr dstr); extern uni_string udstr_str (t_udstr dstr); extern t_unicode udstr_cv_ref (ustr_cv_index_t * pos_after, t_udstr dstr, ustr_cv_index_t pos); extern t_unicode udstr_cp_ref (ustr_cv_index_t * pos_after, t_udstr dstr, ustr_cp_index_t pos); extern t_udstr udstr_cv_set (alloc_limits limits, t_udstr s, ustr_cv_index_t x, t_unicode c); extern t_udstr udstr_cv_set_fw (alloc_limits limits, t_udstr s, ustr_cv_index_t x, t_unicode c); extern t_udstr udstr_cp_set (alloc_limits limits, t_udstr s, ustr_cp_index_t x, t_unicode c); extern t_udstr udstr_cp_set_fw (alloc_limits limits, t_udstr s, ustr_cp_index_t x, t_unicode c); extern t_udstr udstr_fw_x (t_udstr d); extern t_udstr udstr_copy (alloc_limits limits, t_udstr dstr); extern t_udstr udstr_copy_fw (alloc_limits limits, t_udstr dstr); extern t_udstr udstr_cv_substr (alloc_limits limits, t_udstr dstr, ustr_cv_index_t from, ustr_cv_index_t to); extern t_udstr udstr_cv_substr_x (t_udstr dstr, ustr_cv_index_t from, ustr_cv_index_t to); extern t_udstr udstr_cv_substr_fw (alloc_limits limits, t_udstr dstr, ustr_cv_index_t from, ustr_cv_index_t to); extern t_udstr udstr_cv_substr_fw_x (t_udstr dstr, ustr_cv_index_t from, ustr_cv_index_t to); extern t_udstr udstr_cp_substr (alloc_limits limits, t_udstr dstr, ustr_cp_index_t from, ustr_cp_index_t to); extern t_udstr udstr_cp_substr_x (t_udstr dstr, ustr_cp_index_t from, ustr_cp_index_t to); extern t_udstr udstr_cp_substr_fw (alloc_limits limits, t_udstr dstr, ustr_cp_index_t from, ustr_cp_index_t to); extern t_udstr udstr_cp_substr_fw_x (t_udstr dstr, ustr_cp_index_t from, ustr_cp_index_t to); extern t_udstr udstr_append (alloc_limits limits, t_udstr a_dstr, t_udstr b_dstr); extern t_udstr udstr_append_x (t_udstr a_dstr, t_udstr b_dstr); extern t_udstr udstr_append_fw (alloc_limits limits, t_udstr a_dstr, t_udstr b_dstr); extern t_udstr udstr_append_fw_x (t_udstr a_dstr, t_udstr b_dstr); extern t_udstr udstr_cv_delete (alloc_limits limits, t_udstr d, ustr_cv_index_t from, ustr_cv_index_t to); extern t_udstr udstr_cp_delete (alloc_limits limits, t_udstr d, ustr_cp_index_t from, ustr_cp_index_t to); extern t_udstr udstr_cv_delete_x (t_udstr d, ustr_cv_index_t from, ustr_cv_index_t to); extern t_udstr udstr_cp_delete_x (t_udstr d, ustr_cp_index_t from, ustr_cp_index_t to); extern t_udstr udstr_cv_delete_fw (alloc_limits limits, t_udstr d, ustr_cv_index_t from, ustr_cv_index_t to); extern t_udstr udstr_cp_delete_fw (alloc_limits limits, t_udstr d, ustr_cp_index_t from, ustr_cp_index_t to); extern t_udstr udstr_cv_delete_fw_x (t_udstr d, ustr_cv_index_t from, ustr_cv_index_t to); extern t_udstr udstr_cp_delete_fw_x (t_udstr d, ustr_cp_index_t from, ustr_cp_index_t to); extern t_udstr udstr_cv_replace (alloc_limits limits, t_udstr into, ustr_cv_index_t i_from, ustr_cv_index_t i_to, t_udstr from, ustr_cv_index_t f_from, ustr_cv_index_t f_to); extern t_udstr udstr_cp_replace (alloc_limits limits, t_udstr into, ustr_cp_index_t i_from, ustr_cp_index_t i_to, t_udstr from, ustr_cp_index_t f_from, ustr_cp_index_t f_to); extern t_udstr udstr_cv_replace_x (t_udstr into, ustr_cv_index_t i_from, ustr_cv_index_t i_to, t_udstr from, ustr_cv_index_t f_from, ustr_cv_index_t f_to); extern t_udstr udstr_cp_replace_x (t_udstr into, ustr_cp_index_t i_from, ustr_cp_index_t i_to, t_udstr from, ustr_cp_index_t f_from, ustr_cp_index_t f_to); extern t_udstr udstr_cv_replace_fw (alloc_limits limits, t_udstr into, ustr_cv_index_t i_from, ustr_cv_index_t i_to, t_udstr from, ustr_cv_index_t f_from, ustr_cv_index_t f_to); extern t_udstr udstr_cp_replace_fw (alloc_limits limits, t_udstr into, ustr_cp_index_t i_from, ustr_cp_index_t i_to, t_udstr from, ustr_cp_index_t f_from, ustr_cp_index_t f_to); extern t_udstr udstr_cv_replace_fw_x (t_udstr into, ustr_cv_index_t i_from, ustr_cv_index_t i_to, t_udstr from, ustr_cv_index_t f_from, ustr_cv_index_t f_to); extern t_udstr udstr_cp_replace_fw_x (t_udstr into, ustr_cp_index_t i_from, ustr_cp_index_t i_to, t_udstr from, ustr_cp_index_t f_from, ustr_cp_index_t f_to); extern ustr_cv_index_t udstr_cv_normalize (t_udstr dstr, ustr_cv_index_t orig_index); extern ustr_cv_index_t udstr_cv_inc (t_udstr dstr, ustr_cv_index_t orig_index); extern ustr_cv_index_t udstr_cv_dec (t_udstr dstr, ustr_cv_index_t orig_index); extern ustr_cv_index_t udstr_cp_to_cv (t_udstr dstr, ustr_cp_index_t cpi); extern void udstr_cp_to_cv_range (ustr_cv_index_t * from_v, ustr_cv_index_t * to_v, t_udstr d, ustr_cp_index_t from, ustr_cp_index_t to); #endif /* INCLUDE__STRINGS__UDSTR_H */ /* tag: Tom Lord Fri Jan 2 08:46:35 2004 (udstr.h) */ tla-1.3.5+dfsg/src/hackerlab/strings/ustr.c0000644000175000017500000002052410457621774017312 0ustar useruser/* ustr.c: * **************************************************************** * Copyright (C) 2004 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/strings/ustr.h" /************************************************************************ *(h0 "ustr_ -- Low Level Unicode Strings") * * The function in this chapter manipulate Unicode strings represented * simply as contiguous arrays of code units -- either 0-terminated or * passed to these functions with a separate `length' parameter. * * These functions operate on all supported encoding forms can be * used with arguments in differing encoding forms. For example, * a UTF16 string can be appended to a UTF8 string -- the concatenation * functions convert the UTF16 data to UTF8 internally. * * Some of the functions below take one or more `length' parameters * limiting the amount of input data to be used. These functions come * in two flavors: `_n' forms accept lengths that are expressed in * coding values, `_cn' forms accept lengths experessed in codepoints. * */ /*(menu) */ #include "ustr-inlines.c" ustr_cv_index_t ustr_cv_index (ssize_t n) { return ustri_cv_index (n); } ustr_cp_index_t ustr_cp_index (ssize_t n) { return ustri_cp_index (n); } size_t ustr_cv_index_to_scanner_index (enum uni_encoding_scheme enc, ustr_cv_index_t n) { return ustri_cv_index_to_scanner_index (enc, n); } ustr_cv_index_t ustr_scanner_index_to_cv_index (enum uni_encoding_scheme enc, size_t n) { return ustri_scanner_index_to_cv_index (enc, n); } uni_string ustr_cv_offset (uni_string str, enum uni_encoding_scheme enc, ustr_cv_index_t n) { return ustri_cv_offset (str, enc, n); } uni_string ustr_cv_offset_n (ustr_cv_index_t * new_length, uni_string str, enum uni_encoding_scheme enc, ustr_cv_index_t len, ustr_cv_index_t n) { return ustri_cv_offset_n (new_length, str, enc, len, n); } t_unicode ustr_scan (uni_string * str_after, uni_string str, enum uni_encoding_scheme enc) { return ustri_scan (str_after, str, enc); } ustr_cv_index_t ustr_str_subtract (uni_string a, uni_string b, enum uni_encoding_scheme enc) { return ustri_str_subtract (a, b, enc); } t_unicode ustr_scan_n (uni_string * str_after, ustr_cv_index_t * len_after, uni_string str, enum uni_encoding_scheme enc, ustr_cv_index_t length) { return ustri_scan_n (str_after, len_after, str, enc, length); } int ustr_put (uni_string * str_after, uni_string str, enum uni_encoding_scheme enc, t_unicode c, enum ustr_set_type set_type) { return ustri_put (str_after, str, enc, c, set_type); } int ustr_put_n (uni_string * str_after, ustr_cv_index_t * len_after, uni_string str, enum uni_encoding_scheme enc, ustr_cv_index_t len, t_unicode c, enum ustr_set_type set_type) { return ustri_put_n (str_after, len_after, str, enc, len, c, set_type); } t_unicode ustr_cv_ref (ustr_cv_index_t * index_after, uni_string str, enum uni_encoding_scheme enc, ustr_cv_index_t index) { return ustri_cv_ref (index_after, str, enc, index); } t_unicode ustr_cv_ref_n (ustr_cv_index_t * index_after, uni_string str, enum uni_encoding_scheme enc, ustr_cv_index_t len, ustr_cv_index_t index) { return ustri_cv_ref_n (index_after, str, enc, len, index); } int ustr_cv_set (ustr_cv_index_t * index_after, uni_string str, enum uni_encoding_scheme enc, ustr_cv_index_t index, t_unicode c, enum ustr_set_type set_type) { return ustri_cv_set (index_after, str, enc, index, c, set_type); } int ustr_cv_set_n (ustr_cv_index_t * index_after, ustr_cv_index_t * len_after, uni_string str, enum uni_encoding_scheme enc, ustr_cv_index_t len, ustr_cv_index_t index, t_unicode c, enum ustr_set_type set_type) { return ustri_cv_set_n (index_after, len_after, str, enc, len, index, c, set_type); } uni_string ustr_cp_offset (uni_string str, enum uni_encoding_scheme enc, ustr_cp_index_t n) { return ustri_cp_offset (str, enc, n); } uni_string ustr_cp_offset_n (uni_string str, enum uni_encoding_scheme enc, ustr_cv_index_t len, ustr_cp_index_t n) { return ustri_cp_offset_n (str, enc, len, n); } ustr_cv_index_t ustr_lengths (ustr_cp_index_t * cp_length, enum uni_encoding_scheme * fw_enc, uni_string str, enum uni_encoding_scheme enc) { return ustri_lengths (cp_length, fw_enc, str, enc); } ustr_cv_index_t ustr_lengths_n (ustr_cp_index_t * cp_length, enum uni_encoding_scheme * fw_enc, uni_string str, enum uni_encoding_scheme enc, ustr_cv_index_t len) { return ustri_lengths_n (cp_length, fw_enc, str, enc, len); } ustr_cv_index_t ustr_cv_length (uni_string str, enum uni_encoding_scheme enc) { return ustri_cv_length (str, enc); } ustr_cv_index_t ustr_cv_length_in_encoding (enum uni_encoding_scheme dest_enc, uni_string str, enum uni_encoding_scheme enc) { return ustri_cv_length_in_encoding (dest_enc, str, enc); } ustr_cv_index_t ustr_cv_length_in_encoding_n (enum uni_encoding_scheme dest_enc, uni_string str, enum uni_encoding_scheme enc, ustr_cv_index_t len) { return ustri_cv_length_in_encoding_n (dest_enc, str, enc, len); } ustr_cp_index_t ustr_cp_length (enum uni_encoding_scheme * fw_enc, uni_string str, enum uni_encoding_scheme enc) { return ustri_cp_length (fw_enc, str, enc); } ustr_cp_index_t ustr_cp_length_n (enum uni_encoding_scheme * fw_enc, uni_string str, enum uni_encoding_scheme enc, ustr_cv_index_t len) { return ustri_cp_length_n (fw_enc, str, enc, len); } uni_string ustr_copy (uni_string dest, enum uni_encoding_scheme dest_enc, uni_string str, enum uni_encoding_scheme enc) { return ustri_copy (dest, dest_enc, str, enc); } uni_string ustr_copy_n (uni_string dest, enum uni_encoding_scheme dest_enc, ustr_cv_index_t dest_len, uni_string str, enum uni_encoding_scheme enc, ustr_cv_index_t len) { return ustri_copy_n (dest, dest_enc, dest_len, str, enc, len); } uni_string ustr_cat (uni_string dest, enum uni_encoding_scheme dest_enc, uni_string str, enum uni_encoding_scheme enc) { return ustri_cat (dest, dest_enc, str, enc); } uni_string ustr_cat_n (uni_string dest, enum uni_encoding_scheme dest_enc, ustr_cv_index_t dest_len, uni_string str, ustr_cv_index_t len, enum uni_encoding_scheme enc) { return ustri_cat_n (dest, dest_enc, dest_len, str, len, enc); } uni_string ustr_save (alloc_limits limits, enum uni_encoding_scheme dest_enc, uni_string str, enum uni_encoding_scheme enc) { return ustri_save (limits, dest_enc, str, enc); } uni_string ustr_save_n_case (ustr_cv_index_t * dest_len, alloc_limits limits, enum uni_encoding_scheme dest_enc, uni_string str, enum uni_encoding_scheme enc, ustr_cv_index_t len) { return ustri_save_n_case (dest_len, limits, dest_enc, str, enc, len); } uni_string ustr_save_n (ustr_cv_index_t * dest_len, alloc_limits limits, enum uni_encoding_scheme dest_enc, uni_string str, enum uni_encoding_scheme enc, ustr_cv_index_t len) { return ustri_save_n (dest_len, limits, dest_enc, str, enc, len); } /* tag: Tom Lord Thu Jan 1 13:54:53 2004 (ustr.c) */ tla-1.3.5+dfsg/src/hackerlab/strings/Makefile.in0000644000175000017500000000027410457621774020216 0ustar useruser include $(makefiles)/library-objects.mk ifeq ($(cgs__install_hackerlab),1) include $(makefiles)/install-includes.mk endif # tag: Tom Lord Thu Jan 1 20:46:34 2004 (char2/Makefile.in) # tla-1.3.5+dfsg/src/hackerlab/strings/udstr.c0000644000175000017500000015147610457621774017471 0ustar useruser/* udstr.c: * **************************************************************** * Copyright (C) 2004 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/mem/mem.h" #include "hackerlab/bugs/panic.h" #include "hackerlab/uni/invariant.h" #include "hackerlab/strings/udstr.h" /************************************************************************ *(h1 "Dynamic Unicode String Functions" * :includes ("hackerlab/strings/udstr.h")) * * */ /*(c t_udstr :category type) * typedef t_udstr; * * `t_udstr' values are mutable, resizable Unicode strings. * * Internally, strings of this type may be of any supported encoding * form and may contain any codepoint valid in that encoding. The * length of an udstr (pronounced "uhd-stir") in both encoding values * and code-points is explicitly recorded. */ struct udstr_handle { int refs; uni_string str; enum uni_encoding_scheme enc; ustr_cv_index_t cv_len; ustr_cp_index_t cp_len; alloc_limits limits; }; /*(menu) */ /* __STDC__ prototypes for static functions */ static enum uni_encoding_scheme pick_fw_of (enum uni_encoding_scheme a, enum uni_encoding_scheme b); static void take_new_data (t_udstr dstr, t_udstr new_data); /************************************************************************ *(h2 "udstr Naming Conventions") * * Some `udstr' functions require users to pass string indexes or lengths * as parameters. Such parameters are always expressed in units of * code values within the relevent encoding form. * * Functions having the suffix `_x' work by modifying their first string * argument rather than by returning a newly allocated string. * * Finally, `_fw' functions are the "full width" varients (see below). * */ /************************************************************************ *(h2 "Convervative Width vs. Full Width Unicode String Functions") * * Normally, `udstr' functions choose the encoding form of their * output strings (or the strings they modify) by copying the encoding * of the first string argument. Thus, for example, concatenating a * UTF-8 string (on the left) and a UTF-16 string (on the right) produces * a UTF-8 string. * * Many `udstr' functions also have a varient whose name contains the * suffix `_fw' ("full width"). These choose output encoding forms by * choosing the _narrowest_ encoding wide enough so that each * codepoint in the string occupies exactly one coding value. For example, * the concatenation of a full-width UTF-8 string (which must contain * only codepoints in the range 0..127) with a full-width UTF-16 string * (which can contain no surrogate pair codepoints are codepoints larger * than 16 bits) may be either UTF-8 or UTF-16, depending on whether the * UTF-16 argument contains any codepoints outside of the range 0..127. * * [Add table of precise conversion rules.] */ /************************************************************************ *(h2 "Constructors") * */ /*(c udstr_save) * t_udstr udstr_save (alloc_limits limits, * uni_string str, * enum uni_encoding_scheme enc); * * Create a `t_udstr' from a 0-terminated unicode string * in the indicated encoding form. * * The internal encoding form of the resulting `t_udstr' * is the same as the encoding of `str', namely, `enc'. */ t_udstr udstr_save (alloc_limits limits, uni_string str, enum uni_encoding_scheme enc) { ustr_cv_index_t len; ustr_cp_index_t cp_len; len = ustr_lengths (&cp_len, 0, str, enc); return udstr_save_generic (limits, enc, len, str, enc, len, cp_len); } /*(c udstr_save_n) * t_udstr udstr_save_n (alloc_limits limits, * uni_string str, * enum uni_encoding_scheme enc, * ustr_cv_index_t len); * * * Create a `t_udstr' from a unicode string * in the indicated encoding form and of the * indicated length (in code values). * * The internal encoding form of the resulting `t_udstr' * is the same as the encoding of `str', namely, `enc'. */ t_udstr udstr_save_n (alloc_limits limits, uni_string str, enum uni_encoding_scheme enc, ustr_cv_index_t len) { ustr_cp_index_t cp_len; cp_len = ustr_cp_length_n (0, str, enc, len); return udstr_save_generic (limits, enc, len, str, enc, len, cp_len); } /*(c udstr_save_fw) * t_udstr udstr_save_fw (alloc_limits limits, * uni_string str, * enum uni_encoding_scheme enc); * * * Create a `t_udstr' from a 0-terminated unicode string * in the indicated encoding form. * * The internal encoding form of the resulting `t_udstr' * is the narrowest among: * * uni_iso8859_1 * uni_utf16 * uni_utf32 * uni_bogus32 * * in which the data from `str' can be represented with * exactly one code value per coding point. */ t_udstr udstr_save_fw (alloc_limits limits, uni_string str, enum uni_encoding_scheme enc) { ustr_cv_index_t len; ustr_cp_index_t cp_len; ustr_cv_index_t dest_len; enum uni_encoding_scheme fw_enc; len = ustr_lengths (&cp_len, &fw_enc, str, enc); dest_len.cv = cp_len.cp; return udstr_save_generic (limits, fw_enc, dest_len, str, enc, len, cp_len); } /*(c udstr_save_fw_n) * t_udstr udstr_save_fw_n (alloc_limits limits, * uni_string str, * enum uni_encoding_scheme enc, * ustr_cv_index_t len); * * Create a `t_udstr' from a unicode string * in the indicated encoding form and of the * indicated length (in code values). * * The internal encoding form of the resulting `t_udstr' * is the narrowest among: * * uni_iso8859_1 * uni_utf16 * uni_utf32 * uni_bogus32 * * in which the data from `str' can be represented with * exactly one code value per coding point. */ t_udstr udstr_save_fw_n (alloc_limits limits, uni_string str, enum uni_encoding_scheme enc, ustr_cv_index_t len) { ustr_cp_index_t cp_len; ustr_cv_index_t dest_len; enum uni_encoding_scheme fw_enc; (void)ustr_lengths_n (&cp_len, &fw_enc, str, enc, len); dest_len.cv = cp_len.cp; return udstr_save_generic (limits, fw_enc, dest_len, str, enc, len, cp_len); } t_udstr udstr_save_generic (alloc_limits limits, enum uni_encoding_scheme dest_enc, ustr_cv_index_t dest_len, uni_string str, enum uni_encoding_scheme enc, ustr_cv_index_t len, ustr_cp_index_t cp_len) { t_udstr answer; size_t dest_cv_sizeof; answer = (t_udstr)lim_malloc (limits, sizeof (*answer)); if (!answer) return 0; answer->refs = 1; answer->enc = dest_enc; answer->cv_len = dest_len; answer->cp_len = cp_len; dest_cv_sizeof = uni_cv_sizeof (dest_enc); answer->str.raw = lim_malloc (limits, (1 + dest_len.cv) * dest_cv_sizeof); if (!answer->str.raw) { lim_free (limits, (t_uchar *)answer); answer = 0; } else { if (dest_enc == enc) { mem_move (answer->str.raw, str.raw, len.cv * dest_cv_sizeof); mem_set0 (answer->str.raw + (dest_len.cv * dest_cv_sizeof), dest_cv_sizeof); } else { ustr_copy_n (answer->str, dest_enc, dest_len, str, enc, len); } } return answer; } /************************************************************************ *(h2 "udstr Memory Management") * * `t_udstr' values are reference counted objects. * Constructors return objects with a reference count * of 1. * */ /*(c udstr_ref) * void udstr_ref (t_udstr d); * * Increment the reference count of `d'. */ void udstr_ref (t_udstr d) { if (!d) return; ++d->refs; } /*(c udstr_unref) * void udstr_unref (t_udstr d); * * Decrement the reference count of `d'. * If it drops to 0, free all storage associated * wtih `d' (thus invalidating all references * to `d'). */ void udstr_unref (t_udstr d) { if (!d) return; if (d->refs > 1) --d->refs; else { lim_free (d->limits, d->str.raw); } } /************************************************************************ *(h2 "udstr Deconstruction") * * * */ /*(c udstr_cv_length) * ustr_cv_index_t udstr_cv_length (t_udstr dstr); * * Return the length of `dstr', measured in coding values. */ ustr_cv_index_t udstr_cv_length (t_udstr dstr) { return dstr->cv_len; } /*(c udstr_cp_length) * ustr_cp_index_t udstr_cp_length (t_udstr dstr); * * Return the length of `dstr', measured in codepoints. */ ustr_cp_index_t udstr_cp_length (t_udstr dstr) { return dstr->cp_len; } /*(c udstr_encoding) * enum uni_encoding_scheme udstr_encoding (t_udstr dstr); * * Return the encoding form used internally for `dstr'. */ enum uni_encoding_scheme udstr_encoding (t_udstr dstr) { return dstr->enc; } /*(c udstr_str) * uni_string udstr_str (t_udstr dstr); * * Return a pointer to the string data used internally for `dstr'. * Subsequent calls to `udstr' functions with `dstr' as a parameter * can invalidate the return value of this function. */ uni_string udstr_str (t_udstr dstr) { return dstr->str; } /*(c udstr_cv_ref) * t_unicode udstr_cv_ref (ustr_cv_index_t * pos_after, * t_udstr dstr, * ustr_cv_index_t pos); * * Return the codepoint found at the indicated * code value index in `dstr'. Optionally return the * codevalue index of the subsequent character. */ t_unicode udstr_cv_ref (ustr_cv_index_t * pos_after, t_udstr dstr, ustr_cv_index_t pos) { return ustr_cv_ref_n (pos_after, dstr->str, dstr->enc, dstr->cv_len, pos); } /*(c udstr_cp_ref) * t_unicode udstr_cp_ref (ustr_cv_index_t * pos_after, * t_udstr dstr, * ustr_cp_index_t pos); * * Return the codepoint found at the indicated * codepoint index in `dstr'. Optionally return the * codevalue index of the subsequent character. */ t_unicode udstr_cp_ref (ustr_cv_index_t * pos_after, t_udstr dstr, ustr_cp_index_t pos) { uni_string pos_str; ustr_cv_index_t pos_cv; if (pos.cp >= dstr->cp_len.cp) { return 0; } else { pos_str = ustr_cp_offset_n (dstr->str, dstr->enc, dstr->cv_len, pos); pos_cv = ustr_str_subtract (pos_str, dstr->str, dstr->enc); return udstr_cv_ref (pos_after, dstr, pos_cv); } } /*(c udstr_cv_set) * t_udstr udstr_cv_set (alloc_limits limits, * t_udstr s, * ustr_cv_index_t x, * t_unicode c); * * Return a new copy of `s' with the character at the * indicated code value replaced by `c'. */ t_udstr udstr_cv_set (alloc_limits limits, t_udstr s, ustr_cv_index_t x, t_unicode c) { struct udstr_handle tmp; ustr_cv_index_t end; tmp.refs = 1; tmp.str.utf32 = &c; tmp.enc = uni_bogus32; tmp.cv_len = ustr_cv_index (1); tmp.cp_len = ustr_cp_index (1); tmp.limits = 0; end = udstr_cv_inc (s, x); return udstr_cv_replace (limits, s, x, end, &tmp, ustr_cv_index (0), ustr_cv_index (1)); } /*(c udstr_cv_set_fw) * t_udstr udstr_cv_set_fw (alloc_limits limits, * t_udstr s, * ustr_cv_index_t x, * t_unicode c); * * * Return a new copy of `s' with the character at the * indicated code value replaced by `c'. * * The returned string uses a full-width encoding. */ t_udstr udstr_cv_set_fw (alloc_limits limits, t_udstr s, ustr_cv_index_t x, t_unicode c) { struct udstr_handle tmp; ustr_cv_index_t end; tmp.refs = 1; tmp.str.utf32 = &c; tmp.enc = uni_bogus32; tmp.cv_len = ustr_cv_index (1); tmp.cp_len = ustr_cp_index (1); tmp.limits = 0; end = udstr_cv_inc (s, x); return udstr_cv_replace_fw (limits, s, x, end, &tmp, ustr_cv_index (0), ustr_cv_index (1)); } /*(c udstr_cp_set) * t_udstr udstr_cp_set (alloc_limits limits, * t_udstr s, * ustr_cp_index_t x, * t_unicode c); * * * Return a new copy of `s' with the character at the * indicated code value replaced by `c'. */ t_udstr udstr_cp_set (alloc_limits limits, t_udstr s, ustr_cp_index_t x, t_unicode c) { struct udstr_handle tmp; tmp.refs = 1; tmp.str.utf32 = &c; tmp.enc = uni_bogus32; tmp.cv_len = ustr_cv_index (1); tmp.cp_len = ustr_cp_index (1); tmp.limits = 0; return udstr_cp_replace (limits, s, x, ustr_cp_index (x.cp + 1), &tmp, ustr_cp_index (0), ustr_cp_index (1)); } /*(c udstr_cp_set_fw) * t_udstr udstr_cp_set_fw (alloc_limits limits, * t_udstr s, * ustr_cp_index_t x, * t_unicode c); * * * Return a new copy of `s' with the character at the * indicated code value replaced by `c'. * * The returned string uses a full-width encoding. */ t_udstr udstr_cp_set_fw (alloc_limits limits, t_udstr s, ustr_cp_index_t x, t_unicode c) { struct udstr_handle tmp; tmp.refs = 1; tmp.str.utf32 = &c; tmp.enc = uni_bogus32; tmp.cv_len = ustr_cv_index (1); tmp.cp_len = ustr_cp_index (1); tmp.limits = 0; return udstr_cp_replace_fw (limits, s, x, ustr_cp_index (x.cp + 1), &tmp, ustr_cp_index (0), ustr_cp_index (1)); } /************************************************************************ *(h2 "Full-width Conversion") * */ /*(c udstr_fw_x) * t_udstr udstr_fw_x (t_udstr d); * * Modify (if necessary) `d' to be of a narrowest encoding such that * each codepoint in `d' occupies exactly one code value. */ t_udstr udstr_fw_x (t_udstr d) { enum uni_encoding_scheme fw_enc; (void)ustr_cp_length_n (&fw_enc, d->str, d->enc, d->cv_len); if (d->enc == fw_enc) return d; { ustr_cv_index_t fw_len; t_udstr new_data = 0; fw_len = ustr_cv_length_in_encoding_n (fw_enc, d->str, d->enc, d->cv_len); new_data = udstr_save_generic (d->limits, fw_enc, fw_len, d->str, d->enc, d->cv_len, d->cp_len); if (!new_data) return 0; take_new_data (d, new_data); return d; } } /************************************************************************ *(h2 "udstr String Copying") * * * */ /*(c udstr_copy) * t_udstr udstr_copy (alloc_limits limits, t_udstr dstr); * * Allocate a fresh copy of `dstr'. */ t_udstr udstr_copy (alloc_limits limits, t_udstr dstr) { return udstr_save_generic (limits, dstr->enc, dstr->cv_len, dstr->str, dstr->enc, dstr->cv_len, dstr->cp_len); } /*(c udstr_copy_fw) * t_udstr udstr_copy_fw (alloc_limits limits, t_udstr dstr); * * Allocate a fresh copy of `dstr', converting it (if necessary) * to a full-width encoding. */ t_udstr udstr_copy_fw (alloc_limits limits, t_udstr dstr) { return udstr_save_fw_n (limits, dstr->str, dstr->enc, dstr->cv_len); } /************************************************************************ *(h2 "udstr Substrings") * * * */ /*(c udstr_cv_substr) * t_udstr udstr_cv_substr (alloc_limits limits, * t_udstr dstr, * ustr_cv_index_t from, * ustr_cv_index_t to); * * Return a freshly allocated substring of `dstr' * containing the indicated half-open range of characters * (measured in code values). */ t_udstr udstr_cv_substr (alloc_limits limits, t_udstr dstr, ustr_cv_index_t from, ustr_cv_index_t to) { uni_string str; ustr_cv_index_t len; str = ustr_cv_offset (dstr->str, dstr->enc, from); len = ustr_cv_index (to.cv - from.cv); return udstr_save_n (limits, str, dstr->enc, len); } /*(c udstr_cv_substr_x) * t_udstr udstr_cv_substr_x (t_udstr dstr, * ustr_cv_index_t from, * ustr_cv_index_t to); * * Modify `dstr' to contain only its indicated * substring. */ t_udstr udstr_cv_substr_x (t_udstr dstr, ustr_cv_index_t from, ustr_cv_index_t to) { t_udstr almost_answer; almost_answer = udstr_cv_substr (dstr->limits, dstr, from, to); if (!almost_answer) { return 0; } else { take_new_data (dstr, almost_answer); return dstr; } } /*(c udstr_cv_substr_fw) * t_udstr udstr_cv_substr_fw (alloc_limits limits, * t_udstr dstr, * ustr_cv_index_t from, * ustr_cv_index_t to); * * * Return a freshly allocated substring of `dstr' * containing the indicated half-open range of characters * (measured in code values). * * The returned string uses a full-width encoding (all of * it's codepoints fit in exactly one code value). */ t_udstr udstr_cv_substr_fw (alloc_limits limits, t_udstr dstr, ustr_cv_index_t from, ustr_cv_index_t to) { uni_string str; ustr_cv_index_t len; str = ustr_cv_offset (dstr->str, dstr->enc, from); len = ustr_cv_index (to.cv - from.cv); return udstr_save_fw_n (limits, str, dstr->enc, len); } /*(c udstr_cv_substr_fw_x) * t_udstr udstr_cv_substr_fw_x (t_udstr dstr, * ustr_cv_index_t from, * ustr_cv_index_t to); * * Modify `dstr' to contain only its indicated substring * and to be in a full-width encoding. */ t_udstr udstr_cv_substr_fw_x (t_udstr dstr, ustr_cv_index_t from, ustr_cv_index_t to) { t_udstr almost_answer; almost_answer = udstr_cv_substr_fw (dstr->limits, dstr, from, to); if (!almost_answer) { return 0; } else { take_new_data (dstr, almost_answer); return dstr; } } /*(c udstr_cp_substr) * t_udstr udstr_cp_substr (alloc_limits limits, * t_udstr dstr, * ustr_cp_index_t from, * ustr_cp_index_t to); * * Return a freshly allocated substring of `dstr' * containing the indicated half-open range of characters * (measured in codepoints). */ t_udstr udstr_cp_substr (alloc_limits limits, t_udstr dstr, ustr_cp_index_t from, ustr_cp_index_t to) { ustr_cv_index_t f_v; ustr_cv_index_t t_v; udstr_cp_to_cv_range (&f_v, &t_v, dstr, from, to); return udstr_cv_substr (limits, dstr, f_v, t_v); } /*(c udstr_cp_substr_x) * t_udstr udstr_cp_substr_x (t_udstr dstr, * ustr_cp_index_t from, * ustr_cp_index_t to); * * Modify `dstr' to contain only its indicated substring. */ t_udstr udstr_cp_substr_x (t_udstr dstr, ustr_cp_index_t from, ustr_cp_index_t to) { t_udstr almost_answer; almost_answer = udstr_cp_substr (dstr->limits, dstr, from, to); if (!almost_answer) { return 0; } else { take_new_data (dstr, almost_answer); return dstr; } } /*(c udstr_cp_substr_fw) * t_udstr udstr_cp_substr_fw (alloc_limits limits, * t_udstr dstr, * ustr_cp_index_t from, * ustr_cp_index_t to); * * Return a freshly allocated substring of `dstr' * containing the indicated half-open range of characters * (measured in codepoints). * * The returned string uses a full-width encoding (all of * it's codepoints fit in exactly one code value). */ t_udstr udstr_cp_substr_fw (alloc_limits limits, t_udstr dstr, ustr_cp_index_t from, ustr_cp_index_t to) { ustr_cv_index_t f_v; ustr_cv_index_t t_v; udstr_cp_to_cv_range (&f_v, &t_v, dstr, from, to); return udstr_cv_substr_fw (limits, dstr, f_v, t_v); } /*(c udstr_cp_substr_fw_x) * t_udstr udstr_cp_substr_fw_x (t_udstr dstr, * ustr_cp_index_t from, * ustr_cp_index_t to); * * Modify `dstr' to contain only its indicated substring * and to be in a full-width encoding. */ t_udstr udstr_cp_substr_fw_x (t_udstr dstr, ustr_cp_index_t from, ustr_cp_index_t to) { t_udstr almost_answer; almost_answer = udstr_cp_substr_fw (dstr->limits, dstr, from, to); if (!almost_answer) { return 0; } else { take_new_data (dstr, almost_answer); return dstr; } } /************************************************************************ *(h2 "udstr String Concatentation") * * * */ /*(c udstr_append) * t_udstr udstr_append (alloc_limits limits, * t_udstr a_dstr, * t_udstr b_dstr); * * Return a freshly allocated string containing * the concatenation of the argument strings. */ t_udstr udstr_append (alloc_limits limits, t_udstr a_dstr, t_udstr b_dstr) { t_udstr answer = 0; answer = udstr_copy (limits, a_dstr); if (answer) { if (!udstr_append_x (answer, b_dstr)) { udstr_unref (answer); answer = 0; } } return answer; } /*(c udstr_append_x) * t_udstr udstr_append_x (t_udstr a_dstr, * t_udstr b_dstr); * * Modify `a_dstr' to contain the concatenation * of `a_dstr' and `b_dstr'. */ t_udstr udstr_append_x (t_udstr a_dstr, t_udstr b_dstr) { ustr_cv_index_t b_len_in_a_enc; ustr_cv_index_t total_len; size_t a_enc_size; size_t proper_a_size; uni_string b_dest; if (a_dstr->enc == b_dstr->enc) { b_len_in_a_enc = b_dstr->cv_len; } else { b_len_in_a_enc = ustr_cv_length_in_encoding_n (a_dstr->enc, b_dstr->str, b_dstr->enc, b_dstr->cv_len); } total_len = ustr_cv_index (b_len_in_a_enc.cv + a_dstr->cv_len.cv); a_enc_size = uni_cv_sizeof (a_dstr->enc); proper_a_size = a_dstr->cv_len.cv * a_enc_size; { t_uchar * resized; resized = lim_realloc (a_dstr->limits, a_dstr->str.raw, proper_a_size); if (!resized) return 0; a_dstr->str.raw = resized; } b_dest = ustr_cv_offset_n (0, a_dstr->str, a_dstr->enc, a_dstr->cv_len, a_dstr->cv_len); ustr_copy_n (b_dest, a_dstr->enc, b_len_in_a_enc, b_dstr->str, b_dstr->enc, b_dstr->cv_len); a_dstr->cp_len = ustr_cp_length_n (0, a_dstr->str, a_dstr->enc, a_dstr->cv_len); return a_dstr; } /*(c udstr_append_fw) * t_udstr udstr_append_fw (alloc_limits limits, * t_udstr a_dstr, * t_udstr b_dstr); * * Return a freshly allocated string containing * the concatenation of the argument strings. * * The new string uses a full-width encoding. */ t_udstr udstr_append_fw (alloc_limits limits, t_udstr a_dstr, t_udstr b_dstr) { t_udstr answer = 0; answer = udstr_copy (limits, a_dstr); if (answer) { if (!udstr_append_fw_x (answer, b_dstr)) { udstr_unref (answer); answer = 0; } } return answer; } /*(c udstr_append_fw_x) * t_udstr udstr_append_fw_x (t_udstr a_dstr, * t_udstr b_dstr); * * Modify `a_dstr' to contain the concatenation * of `a_dstr' and `b_dstr' and to use a full-width * encoding. */ t_udstr udstr_append_fw_x (t_udstr a_dstr, t_udstr b_dstr) { enum uni_encoding_scheme a_fw; enum uni_encoding_scheme b_fw; enum uni_encoding_scheme best_encoding; ustr_lengths_n (0, &a_fw, a_dstr->str, a_dstr->enc, a_dstr->cv_len); ustr_lengths_n (0, &b_fw, a_dstr->str, a_dstr->enc, a_dstr->cv_len); best_encoding = pick_fw_of (a_fw, b_fw); if (a_dstr->enc != best_encoding) { t_udstr new_a; new_a = udstr_save_generic (a_dstr->limits, best_encoding, ustr_cv_index (a_dstr->cp_len.cp), a_dstr->str, a_dstr->enc, a_dstr->cv_len, a_dstr->cp_len); if (!new_a) return 0; a_dstr->str.raw = new_a->str.raw; a_dstr->enc = new_a->enc; lim_free (new_a->limits, new_a); /* new_a dropped deliberately --- a_dstr took it over */ } return udstr_append_x (a_dstr, b_dstr); } /************************************************************************ *(h2 "udstr Substring Deletion") * * * */ /*(c udstr_cv_delete) * t_udstr udstr_cv_delete (alloc_limits limits, * t_udstr d, * ustr_cv_index_t from, * ustr_cv_index_t to); * * Return a new string which is a copy of `d' with * code values in the half-open range `from' to `to' * removed. */ t_udstr udstr_cv_delete (alloc_limits limits, t_udstr d, ustr_cv_index_t from, ustr_cv_index_t to) { uni_string right_source; ustr_cv_index_t right_len; ustr_cv_index_t total_len; ustr_cv_index_t left_len; uni_string right_dest; t_udstr answer = 0; right_source = ustr_cv_offset_n (&right_len, d->str, d->enc, d->cv_len, to); left_len = from; total_len = ustr_cv_index (left_len.cv + right_len.cv); answer = udstr_save_generic (limits, d->enc, total_len, d->str, d->enc, d->cv_len, d->cp_len); if (!answer) return 0; /* * answer is missing half of its data and has the wrong cp_len now. */ right_dest = ustr_cv_offset_n (0, answer->str, answer->enc, answer->cv_len, left_len); ustr_copy_n (right_dest, answer->enc, right_len, right_source, d->enc, right_len); answer->cp_len = ustr_cp_length_n (0, answer->str, answer->enc, answer->cv_len); return answer; } /*(c udstr_cp_delete) * t_udstr udstr_cp_delete (alloc_limits limits, * t_udstr d, * ustr_cp_index_t from, * ustr_cp_index_t to); * * Return a new string which is a copy of `d' with * codepoints in the half-open range `from' to `to' * removed. */ t_udstr udstr_cp_delete (alloc_limits limits, t_udstr d, ustr_cp_index_t from, ustr_cp_index_t to) { ustr_cv_index_t fv; ustr_cv_index_t tv; udstr_cp_to_cv_range (&fv, &tv, d, from, to); return udstr_cv_delete (limits, d, fv, tv); } /*(c udstr_cv_delete_x) * t_udstr udstr_cv_delete_x (t_udstr d, * ustr_cv_index_t from, * ustr_cv_index_t to); * * Modify `d' by removing code values in the half-open range `from' to * `to'. */ t_udstr udstr_cv_delete_x (t_udstr d, ustr_cv_index_t from, ustr_cv_index_t to) { size_t cv_sizeof; size_t from_offset; size_t to_offset; size_t current_length; cv_sizeof = uni_cv_sizeof (d->enc); from_offset = from.cv * cv_sizeof; to_offset = to.cv * cv_sizeof; current_length = d->cv_len.cv * cv_sizeof; mem_move (d->str.raw + from_offset, d->str.raw + to_offset, current_length - to_offset); d->str.raw = lim_realloc (d->limits, d->str.raw, current_length - (to_offset - from_offset)); d->cv_len.cv = (ssize_t)(current_length - (to_offset - from_offset)); return d; } /*(c udstr_cp_delete_x) * t_udstr udstr_cp_delete_x (t_udstr d, * ustr_cp_index_t from, * ustr_cp_index_t to); * * Modify `d' by removing codepoints in the half-open range `from' to * `to'. */ t_udstr udstr_cp_delete_x (t_udstr d, ustr_cp_index_t from, ustr_cp_index_t to) { ustr_cv_index_t fv; ustr_cv_index_t tv; udstr_cp_to_cv_range (&fv, &tv, d, from, to); return udstr_cv_delete_x (d, fv, tv); } /*(c udstr_cv_delete_fw) * t_udstr udstr_cv_delete_fw (alloc_limits limits, * t_udstr d, * ustr_cv_index_t from, * ustr_cv_index_t to); * * Return a new string which is a copy of `d' with * code values in the half-open range `from' to `to' * removed. * * The new string uses a full-width encoding. */ t_udstr udstr_cv_delete_fw (alloc_limits limits, t_udstr d, ustr_cv_index_t from, ustr_cv_index_t to) { uni_string right_source; ustr_cv_index_t right_len; ustr_cp_index_t right_cp_len; enum uni_encoding_scheme right_fw; ustr_cp_index_t left_cp_len; enum uni_encoding_scheme left_fw; enum uni_encoding_scheme actual_fw; ustr_cv_index_t right_len_fw; ustr_cv_index_t left_len_fw; ustr_cv_index_t len_fw; ustr_cp_index_t cp_len; t_udstr answer = 0; uni_string right_dest; size_t d_cv_sizeof; size_t d_right_sizeof; right_source = ustr_cv_offset_n (&right_len, d->str, d->enc, d->cv_len, to); right_cp_len = ustr_cp_length_n (&right_fw, right_source, d->enc, right_len); left_cp_len = ustr_cp_length_n (&left_fw, d->str, d->enc, from); actual_fw = pick_fw_of (right_fw, left_fw); if (actual_fw == d->enc) { right_len_fw = right_len; left_len_fw = from; } else { right_len_fw = ustr_cv_length_in_encoding_n (actual_fw, right_source, d->enc, right_len); left_len_fw = ustr_cv_length_in_encoding_n (actual_fw, d->str, d->enc, from); } len_fw = ustr_cv_index (right_len_fw.cv + left_len_fw.cv); cp_len = ustr_cp_index (right_cp_len.cp + left_cp_len.cp); answer = udstr_save_generic (limits, actual_fw, len_fw, d->str, d->enc, from, left_cp_len); if (!answer) return 0; answer->cp_len = cp_len; right_dest = ustr_cv_offset_n (0, answer->str, answer->enc, answer->cv_len, left_len_fw); d_cv_sizeof = uni_cv_sizeof (d->enc); d_right_sizeof = right_len.cv * d_cv_sizeof; mem_move (right_dest.raw, right_source.raw, d_right_sizeof); return answer; } /*(c udstr_cp_delete_fw) * t_udstr udstr_cp_delete_fw (alloc_limits limits, * t_udstr d, * ustr_cp_index_t from, * ustr_cp_index_t to); * * Return a new string which is a copy of `d' with * codepoints in the half-open range `from' to `to' * removed. * * The new string uses a full-width encoding. */ t_udstr udstr_cp_delete_fw (alloc_limits limits, t_udstr d, ustr_cp_index_t from, ustr_cp_index_t to) { ustr_cv_index_t fv; ustr_cv_index_t tv; udstr_cp_to_cv_range (&fv, &tv, d, from, to); return udstr_cv_delete_fw (limits, d, fv, tv); } /*(c udstr_cv_delete_fw_x) * t_udstr udstr_cv_delete_fw_x (t_udstr d, * ustr_cv_index_t from, * ustr_cv_index_t to); * * Modify `d' by removing code values in the half-open range `from' to * `to' and ensuring that `d' uses a full-width encoding. */ t_udstr udstr_cv_delete_fw_x (t_udstr d, ustr_cv_index_t from, ustr_cv_index_t to) { t_udstr almost_answer = 0; almost_answer = udstr_cv_delete_fw (d->limits, d, from, to); if (!almost_answer) return 0; take_new_data (d, almost_answer); return d; } /*(c udstr_cp_delete_fw_x) * t_udstr udstr_cp_delete_fw_x (t_udstr d, * ustr_cp_index_t from, * ustr_cp_index_t to); * * Modify `d' by removing codepoints in the half-open range `from' to * `to' and ensuring that `d' uses a full-width encoding. */ t_udstr udstr_cp_delete_fw_x (t_udstr d, ustr_cp_index_t from, ustr_cp_index_t to) { ustr_cv_index_t fv; ustr_cv_index_t tv; udstr_cp_to_cv_range (&fv, &tv, d, from, to); return udstr_cv_delete_fw_x (d, fv, tv); } /************************************************************************ *(h2 "udstr Substring Replacement") * * * */ /*(c udstr_cv_replace) * t_udstr udstr_cv_replace (alloc_limits limits, * t_udstr into, * ustr_cv_index_t i_from, * ustr_cv_index_t i_to, * t_udstr from, * ustr_cv_index_t f_from, * ustr_cv_index_t f_to); * * Return a new string in which the indicated substring * of `into' is replaced by the indicated substring of `from'. */ t_udstr udstr_cv_replace (alloc_limits limits, t_udstr into, ustr_cv_index_t i_from, ustr_cv_index_t i_to, t_udstr from, ustr_cv_index_t f_from, ustr_cv_index_t f_to) { t_udstr answer = 0; t_udstr middle = 0; t_udstr end = 0; answer = udstr_cv_substr (limits, into, ustr_cv_index (0), i_from); middle = udstr_cv_substr (limits, from, f_from, f_to); end = udstr_cv_substr (limits, into, i_to, into->cv_len); if (!(answer && middle && end) || !udstr_append_x (answer, middle) || !udstr_append_x (answer, end)) { udstr_unref (answer); udstr_unref (middle); udstr_unref (end); answer = 0; } else { udstr_unref (middle); udstr_unref (end); } return answer; } /*(c udstr_cp_replace) * t_udstr udstr_cp_replace (alloc_limits limits, * t_udstr into, * ustr_cp_index_t i_from, * ustr_cp_index_t i_to, * t_udstr from, * ustr_cp_index_t f_from, * ustr_cp_index_t f_to); * * Return a new string in which the indicated substring * of `into' is replaced by the indicated substring of `from'. */ t_udstr udstr_cp_replace (alloc_limits limits, t_udstr into, ustr_cp_index_t i_from, ustr_cp_index_t i_to, t_udstr from, ustr_cp_index_t f_from, ustr_cp_index_t f_to) { ustr_cv_index_t i_f; ustr_cv_index_t i_t; ustr_cv_index_t f_f; ustr_cv_index_t f_t; udstr_cp_to_cv_range (&i_f, &i_t, into, i_from, i_to); udstr_cp_to_cv_range (&f_f, &f_t, from, f_from, f_to); return udstr_cv_replace (limits, into, i_f, i_t, from, f_f, f_t); } /*(c udstr_cv_replace_x) * t_udstr udstr_cv_replace_x (t_udstr into, * ustr_cv_index_t i_from, * ustr_cv_index_t i_to, * t_udstr from, * ustr_cv_index_t f_from, * ustr_cv_index_t f_to); * * Modify `into' by replacing the indicated substring with * the indicated substring of `from'. */ t_udstr udstr_cv_replace_x (t_udstr into, ustr_cv_index_t i_from, ustr_cv_index_t i_to, t_udstr from, ustr_cv_index_t f_from, ustr_cv_index_t f_to) { t_udstr almost_answer; almost_answer = udstr_cv_replace (into->limits, into, i_from, i_to, from, f_from, f_to); if (!almost_answer) return 0; take_new_data (into, almost_answer); return into; } /*(c udstr_cp_replace_x) * t_udstr udstr_cp_replace_x (t_udstr into, * ustr_cp_index_t i_from, * ustr_cp_index_t i_to, * t_udstr from, * ustr_cp_index_t f_from, * ustr_cp_index_t f_to); * * Modify `into' by replacing the indicated substring with * the indicated substring of `from'. */ t_udstr udstr_cp_replace_x (t_udstr into, ustr_cp_index_t i_from, ustr_cp_index_t i_to, t_udstr from, ustr_cp_index_t f_from, ustr_cp_index_t f_to) { ustr_cv_index_t i_f; ustr_cv_index_t i_t; ustr_cv_index_t f_f; ustr_cv_index_t f_t; udstr_cp_to_cv_range (&i_f, &i_t, into, i_from, i_to); udstr_cp_to_cv_range (&f_f, &f_t, from, f_from, f_to); return udstr_cv_replace_x (into, i_f, i_t, from, f_f, f_t); } /*(c udstr_cv_replace_fw) * t_udstr udstr_cv_replace_fw (alloc_limits limits, * t_udstr into, * ustr_cv_index_t i_from, * ustr_cv_index_t i_to, * t_udstr from, * ustr_cv_index_t f_from, * ustr_cv_index_t f_to); * * Return a new string in which the indicated substring * of `into' is replaced by the indicated substring of `from'. * * The returned string uses a full-width encoding. */ t_udstr udstr_cv_replace_fw (alloc_limits limits, t_udstr into, ustr_cv_index_t i_from, ustr_cv_index_t i_to, t_udstr from, ustr_cv_index_t f_from, ustr_cv_index_t f_to) { t_udstr answer = 0; t_udstr middle = 0; t_udstr end = 0; answer = udstr_cv_substr_fw (limits, into, ustr_cv_index (0), i_from); middle = udstr_cv_substr (limits, from, f_from, f_to); end = udstr_cv_substr (limits, into, i_to, into->cv_len); if (!(answer && middle && end) || !udstr_append_fw_x (answer, middle) || !udstr_append_fw_x (answer, end)) { udstr_unref (answer); udstr_unref (middle); udstr_unref (end); answer = 0; } else { udstr_unref (middle); udstr_unref (end); } return answer; } /*(c udstr_cp_replace_fw) * t_udstr udstr_cp_replace_fw (alloc_limits limits, * t_udstr into, * ustr_cp_index_t i_from, * ustr_cp_index_t i_to, * t_udstr from, * ustr_cp_index_t f_from, * ustr_cp_index_t f_to); * * Return a new string in which the indicated substring * of `into' is replaced by the indicated substring of `from'. * * The returned string uses a full-width encoding. */ t_udstr udstr_cp_replace_fw (alloc_limits limits, t_udstr into, ustr_cp_index_t i_from, ustr_cp_index_t i_to, t_udstr from, ustr_cp_index_t f_from, ustr_cp_index_t f_to) { ustr_cv_index_t i_f; ustr_cv_index_t i_t; ustr_cv_index_t f_f; ustr_cv_index_t f_t; udstr_cp_to_cv_range (&i_f, &i_t, into, i_from, i_to); udstr_cp_to_cv_range (&f_f, &f_t, from, f_from, f_to); return udstr_cv_replace_fw (limits, into, i_f, i_t, from, f_f, f_t); } /*(c udstr_cv_replace_fw_x) * t_udstr udstr_cv_replace_fw_x (t_udstr into, * ustr_cv_index_t i_from, * ustr_cv_index_t i_to, * t_udstr from, * ustr_cv_index_t f_from, * ustr_cv_index_t f_to); * * Modify `into' by replacing the indicated substring with * the indicated substring of `from' and ensuring that * `into' uses a full-width encoding. */ t_udstr udstr_cv_replace_fw_x (t_udstr into, ustr_cv_index_t i_from, ustr_cv_index_t i_to, t_udstr from, ustr_cv_index_t f_from, ustr_cv_index_t f_to) { t_udstr almost_answer; almost_answer = udstr_cv_replace_fw (into->limits, into, i_from, i_to, from, f_from, f_to); if (!almost_answer) return 0; take_new_data (into, almost_answer); return into; } /*(c udstr_cp_replace_fw_x) * t_udstr udstr_cp_replace_fw_x (t_udstr into, * ustr_cp_index_t i_from, * ustr_cp_index_t i_to, * t_udstr from, * ustr_cp_index_t f_from, * ustr_cp_index_t f_to); * * Modify `into' by replacing the indicated substring with * the indicated substring of `from' and ensuring that * `into' uses a full-width encoding. */ t_udstr udstr_cp_replace_fw_x (t_udstr into, ustr_cp_index_t i_from, ustr_cp_index_t i_to, t_udstr from, ustr_cp_index_t f_from, ustr_cp_index_t f_to) { ustr_cv_index_t i_f; ustr_cv_index_t i_t; ustr_cv_index_t f_f; ustr_cv_index_t f_t; udstr_cp_to_cv_range (&i_f, &i_t, into, i_from, i_to); udstr_cp_to_cv_range (&f_f, &f_t, from, f_from, f_to); return udstr_cv_replace_fw_x (into, i_f, i_t, from, f_f, f_t); } /************************************************************************ *(h2 "udstr Index Normalization") * * * */ /*(c udstr_cv_normalize) * ustr_cv_index_t udstr_cv_normalize (t_udstr dstr, * ustr_cv_index_t orig_index); * * Return a code value index derived from `orig_index' by adjusting * it to point to the first code value in its codepoint. */ ustr_cv_index_t udstr_cv_normalize (t_udstr dstr, ustr_cv_index_t orig_index) { ustr_cv_index_t index = orig_index; switch (dstr->enc) { default: case uni_iso8859_1: case uni_utf32: case uni_utf32be: case uni_utf32le: case uni_bogus32: case uni_bogus32be: case uni_bogus32le: { if (index.cv > dstr->cv_len.cv) index.cv = dstr->cv_len.cv; else if (index.cv < 0) index.cv = 0; return index; } case uni_utf8: { if (index.cv > dstr->cv_len.cv) { index.cv = dstr->cv_len.cv; return index; } else if (index.cv <= 0) { index.cv = 0; return index; } else if (!(dstr->str.utf8[index.cv] & 0x80)) { return index; } else { if (0x80 == (0xC0 & dstr->str.utf8[index.cv])) { int n_suffix_bytes = 1; while (1) { /* invarients: * * index.cv >= 1 * * str[index.cv] is some 10xxxxxx character * * 1 <= n_suffix_bytes <= 4 */ /* Look at the previous character to decide * what to do. */ switch (0xc0 & dstr->str.utf8[index.cv - 1]) { case 0x80: { /* preceeding is also a non-first multi-byte sequence * code value. This preserves one of three loop * invarients. */ if (n_suffix_bytes == 4) { /* Then the one to the left means that there are 5 or * more, which is illegal, so, our original index is * just pointing at an ill-formed sequence. * This preserves the second loop invarient while * n_suffix_bytes counts up to detect ill-formed sequences. */ return orig_index; } else if (index.cv == 1) { /* The string starts (at index 0) in the middle of * a multi-char sequence. So, once again, our * original index is pointing at an ill-formed sequence. * This preserves the final loop invarient. */ return orig_index; } else { /* All invarients being preserved and having had made * progress towards finding the start of the character * sequence: */ ++n_suffix_bytes; --index.cv; continue; } } case 0x40: case 0x00: { /* The place we started at is part of an ill-formed sequence (no * 0xc0 starting character. This preserves our loop invarients. */ return orig_index; } case 0xC0: { /* aha! the first character of a multi-byte sequence. */ --index.cv; return index; } } } } } } case uni_utf16: { if (index.cv > dstr->cv_len.cv) { index.cv = dstr->cv_len.cv; return index; } else if (index.cv <= 0) { index.cv = 0; return index; } else if (uni_is_low_surrogate (dstr->str.utf16[index.cv])) { if (uni_is_high_surrogate (dstr->str.utf16[index.cv - 1])) { --index.cv; } return index; } else return index; } case uni_utf16be: { size_t pos; t_unicode c; if (index.cv > dstr->cv_len.cv) { index.cv = dstr->cv_len.cv; return index; } else if (index.cv <= 0) { index.cv = 0; return index; } pos = 0; c = uni_utf16be_iscan ((t_uchar *)(dstr->str.utf16 + index.cv), &pos, (size_t)2); if (uni_is_low_surrogate (c)) { pos = 0; c = uni_utf16be_iscan ((t_uchar *)(dstr->str.utf16 + index.cv - 1), &pos, (size_t)2); if (uni_is_high_surrogate (c)) { --index.cv; } return index; } else return index; } case uni_utf16le: { size_t pos; t_unicode c; if (index.cv > dstr->cv_len.cv) { index.cv = dstr->cv_len.cv; return index; } else if (index.cv <= 0) { index.cv = 0; return index; } pos = 0; c = uni_utf16le_iscan ((t_uchar *)(dstr->str.utf16 + index.cv), &pos, (size_t)2); if (uni_is_low_surrogate (c)) { pos = 0; c = uni_utf16le_iscan ((t_uchar *)(dstr->str.utf16 + index.cv - 1), &pos, (size_t)2); if (uni_is_high_surrogate (c)) { --index.cv; } return index; } else return index; } } } /************************************************************************ *(h2 "udstr String Iteration") * */ /*(c udstr_cv_inc) * ustr_cv_index_t udstr_cv_inc (t_udstr dstr, * ustr_cv_index_t orig_index); * * Increment `orig_index' (presumed to be the code value index * of the first code value of a possibly multi-code value codepoint) * to be the code value index of the beginning of the _next_ codepoint. * (!) */ ustr_cv_index_t udstr_cv_inc (t_udstr dstr, ustr_cv_index_t orig_index) { if (orig_index.cv >= dstr->cv_len.cv) return dstr->cv_len; if (orig_index.cv < 0) return ustr_cv_index (0); switch (dstr->enc) { default: case uni_utf32: case uni_utf32be: case uni_utf32le: case uni_bogus32: case uni_bogus32be: case uni_bogus32le: case uni_iso8859_1: { return ustr_cv_index (orig_index.cv + 1); } #undef CASE_FOR #define CASE_FOR(X) \ case uni_ ## X: \ { \ size_t pos; \ size_t len; \ \ pos = orig_index.cv; \ len = dstr->cv_len.cv; \ uni_ ## X ## _scan (dstr->str.X, &pos, len); \ return ustr_cv_index ((ssize_t)pos); \ } CASE_FOR(utf8); CASE_FOR(utf16); #define ICASE_FOR(X) \ case uni_ ## X: \ { \ size_t pos; \ size_t len; \ \ pos = orig_index.cv * 2; \ len = dstr->cv_len.cv * 2; \ uni_ ## X ## _iscan (dstr->str.X, &pos, len); \ return ustr_cv_index ((ssize_t)(pos / 2)); \ } ICASE_FOR(utf16be); ICASE_FOR(utf16le); } } /*(c udstr_cv_inc) * ustr_cv_index_t udstr_cv_inc (t_udstr dstr, * ustr_cv_index_t orig_index); * * Decrement `orig_index' (presumed to be the code value index * of the first code value of a possibly multi-code value codepoint) * to be the code value index of the beginning of the _previous_ codepoint. * (!) */ ustr_cv_index_t udstr_cv_dec (t_udstr dstr, ustr_cv_index_t orig_index) { if (orig_index.cv > dstr->cv_len.cv) return dstr->cv_len; if (orig_index.cv <= 0) return ustr_cv_index (0); return udstr_cv_normalize (dstr, ustr_cv_index (orig_index.cv - 1)); } /************************************************************************ *(hd "udstr Code Value and Codepoint Index Conversion") * * * */ /*(c udstr_cp_to_cv) * ustr_cv_index_t udstr_cp_to_cv (t_udstr dstr, * ustr_cp_index_t cpi); * * Return the code value index of the indicated codepoint. */ ustr_cv_index_t udstr_cp_to_cv (t_udstr dstr, ustr_cp_index_t cpi) { uni_string addressed; if (cpi.cp < 0) return ustr_cv_index (0); if (cpi.cp >= dstr->cp_len.cp) return dstr->cv_len; addressed = ustr_cp_offset_n (dstr->str, dstr->enc, dstr->cv_len, cpi); return ustr_str_subtract (addressed, dstr->str, dstr->enc); } /*(c udstr_cp_to_cv_range) * void udstr_cp_to_cv_range (ustr_cv_index_t * from_v, * ustr_cv_index_t * to_v, * t_udstr d, * ustr_cp_index_t from, * ustr_cp_index_t to); * * Return the code value indices of the indicated codepoint range. * */ void udstr_cp_to_cv_range (ustr_cv_index_t * from_v, ustr_cv_index_t * to_v, t_udstr d, ustr_cp_index_t from, ustr_cp_index_t to) { uni_string f_str; ustr_cv_index_t f_v; uni_string t_str; ustr_cv_index_t t_v; invariant (from.cp <= to.cp); f_str = ustr_cp_offset_n (d->str, d->enc, d->cv_len, from); f_v = ustr_str_subtract (f_str, d->str, d->enc); t_str = ustr_cp_offset_n (f_str, d->enc, ustr_cv_index (d->cv_len.cv - f_v.cv), ustr_cp_index (to.cp - from.cp)); t_v = ustr_str_subtract (t_str, f_str, d->enc); *from_v = f_v; *to_v = t_v; } /*(c udstr_cv_to_cp) * ustr_cp_index_t udstr_cv_to_cp (t_udstr dstr, * ustr_cv_index_t cvi); * * Return the codepoint index of the indicated code value. */ ustr_cp_index_t udstr_cv_to_cp (t_udstr dstr, ustr_cv_index_t cvi) { if (cvi.cv < 0) return ustr_cp_index (0); if (cvi.cv >= dstr->cv_len.cv) return dstr->cp_len; return ustr_cp_length_n (0, dstr->str, dstr->enc, cvi); } #if 0 cv_set cv_set_x cp_set cp_set_x #endif static enum uni_encoding_scheme pick_fw_of (enum uni_encoding_scheme a, enum uni_encoding_scheme b) { size_t a_size; size_t b_size; if (a == b) return a; a_size = uni_cv_sizeof (a); b_size = uni_cv_sizeof (b); if (a_size > b_size) return a; if (b_size > a_size) return b; switch (a) { case uni_iso8859_1: return uni_iso8859_1; case uni_utf8: return uni_utf8; case uni_utf16be: case uni_utf16le: case uni_utf16: return uni_utf16; case uni_utf32be: case uni_utf32le: case uni_utf32: return uni_utf32; default: case uni_bogus32be: case uni_bogus32le: case uni_bogus32: return uni_bogus32; } } static void take_new_data (t_udstr dstr, t_udstr new_data) { new_data->refs = dstr->refs; lim_free (dstr->limits, dstr->str.raw); *dstr = *new_data; lim_free (new_data->limits, (void *)new_data); } /* tag: Tom Lord Fri Jan 2 08:47:21 2004 (udstr.c) */ tla-1.3.5+dfsg/src/hackerlab/strings/PLUGIN/0000755000175000017500000000000010457621774017144 5ustar userusertla-1.3.5+dfsg/src/hackerlab/strings/PLUGIN/REQ0000644000175000017500000000005110457621774017512 0ustar useruserlibboot2 strings strings libhackerlab tla-1.3.5+dfsg/src/hackerlab/strings/ustr-inlines.c0000644000175000017500000017355210457621774020763 0ustar useruser/* ustr-inline.c: * **************************************************************** * Copyright (C) 2004 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/bugs/panic.h" #include "hackerlab/mem/mem.h" #include "hackerlab/char/str.h" #include "hackerlab/uni/invariant.h" #undef inline__ #ifdef __GCC__ # define inline__ inline #else # define inline__ #endif #include "hackerlab/strings/ustr-inlines.h" inline__ ustr_cv_index_t ustri_cv_index (ssize_t n) { ustr_cv_index_t answer; answer.cv = n; return answer; } inline__ ustr_cp_index_t ustri_cp_index (ssize_t n) { ustr_cp_index_t answer; answer.cp = n; return answer; } inline__ size_t ustri_cv_index_to_scanner_index (enum uni_encoding_scheme enc, ustr_cv_index_t n) { switch (enc) { default: case uni_iso8859_1: case uni_utf8: case uni_utf16: case uni_utf32: case uni_bogus32: return (size_t)n.cv; case uni_utf16be: case uni_utf16le: return 2 * (size_t)n.cv; case uni_utf32be: case uni_utf32le: case uni_bogus32be: case uni_bogus32le: return 2 * (size_t)n.cv; } } inline__ ustr_cv_index_t ustri_scanner_index_to_cv_index (enum uni_encoding_scheme enc, size_t n) { switch (enc) { default: case uni_iso8859_1: case uni_utf8: case uni_utf16: case uni_utf32: case uni_bogus32: return ustr_cv_index ((ssize_t)n); case uni_utf16be: case uni_utf16le: return ustr_cv_index ((ssize_t)(n / 2)); case uni_utf32be: case uni_utf32le: case uni_bogus32be: case uni_bogus32le: return ustr_cv_index ((ssize_t)(n / 4)); } } inline__ uni_string ustri_cv_offset (uni_string str, enum uni_encoding_scheme enc, ustr_cv_index_t n) { uni_string answer; switch (enc) { default: case uni_iso8859_1: case uni_utf8: answer.utf8 = str.utf8 + n.cv; return answer; case uni_utf16: case uni_utf16be: case uni_utf16le: answer.utf16 = str.utf16 + n.cv; return answer; case uni_utf32: case uni_utf32be: case uni_utf32le: case uni_bogus32: case uni_bogus32be: case uni_bogus32le: answer.utf32 = str.utf32 + n.cv; return answer; } } static inline__ void shrink_cv_length_by (ustr_cv_index_t * new_len, ustr_cv_index_t len, ustr_cv_index_t n) { if (new_len) { if (n.cv > len.cv) new_len->cv = 0; else new_len->cv = len.cv - n.cv; } } inline__ uni_string ustri_cv_offset_n (ustr_cv_index_t * new_length, uni_string str, enum uni_encoding_scheme enc, ustr_cv_index_t len, ustr_cv_index_t n) { uni_string answer; switch (enc) { default: case uni_iso8859_1: case uni_utf8: answer.utf8 = str.utf8 + n.cv; shrink_cv_length_by (new_length, len, n); return answer; case uni_utf16: case uni_utf16be: case uni_utf16le: answer.utf16 = str.utf16 + n.cv; shrink_cv_length_by (new_length, len, n); return answer; case uni_utf32: case uni_utf32be: case uni_utf32le: case uni_bogus32: case uni_bogus32be: case uni_bogus32le: answer.utf32 = str.utf32 + n.cv; shrink_cv_length_by (new_length, len, n); return answer; } } static inline__ void string_from_scanner_pos (uni_string * new_string, uni_string str, enum uni_encoding_scheme enc, size_t pos) { if (new_string) { *new_string = ustri_cv_offset (str, enc, ustri_scanner_index_to_cv_index (enc, pos)); } } inline__ t_unicode ustri_scan (uni_string * str_after, uni_string str, enum uni_encoding_scheme enc) { switch (enc) { default: case uni_iso8859_1: { size_t pos = 0; t_unicode c; c = uni_iso8859_1_scan (str.iso8859_1, &pos, pos + 100); string_from_scanner_pos (str_after, str, uni_iso8859_1, pos); return c; } case uni_utf8: { size_t pos = 0; t_unicode c; c = uni_utf8_scan (str.utf8, &pos, pos + 100); string_from_scanner_pos (str_after, str, uni_utf8, pos); return c; } case uni_utf16: { size_t pos = 0; t_unicode c; c = uni_utf16_scan (str.utf16, &pos, pos + 100); string_from_scanner_pos (str_after, str, uni_utf16, pos); return c; } case uni_utf32: { size_t pos = 0; t_unicode c; c = uni_utf32_scan (str.utf32, &pos, pos + 100); string_from_scanner_pos (str_after, str, uni_utf32, pos); return c; } case uni_bogus32: { size_t pos = 0; t_unicode c; c = uni_bogus32_scan (str.bogus32, &pos, pos + 100); string_from_scanner_pos (str_after, str, uni_bogus32, pos); return c; } case uni_utf16be: { size_t pos = 0; t_unicode c; c = uni_utf16be_iscan (str.raw, &pos, pos + 100); string_from_scanner_pos (str_after, str, uni_utf16be, pos); return c; } case uni_utf32be: { size_t pos = 0; t_unicode c; c = uni_utf32be_iscan (str.raw, &pos, pos + 100); string_from_scanner_pos (str_after, str, uni_utf32be, pos); return c; } case uni_bogus32be: { size_t pos = 0; t_unicode c; c = uni_bogus32be_iscan (str.raw, &pos, pos + 100); string_from_scanner_pos (str_after, str, uni_bogus32be, pos); return c; } case uni_utf16le: { size_t pos = 0; t_unicode c; c = uni_utf16le_iscan (str.raw, &pos, pos + 100); string_from_scanner_pos (str_after, str, uni_utf16le, pos); return c; } case uni_utf32le: { size_t pos = 0; t_unicode c; c = uni_utf32le_iscan (str.raw, &pos, pos + 100); string_from_scanner_pos (str_after, str, uni_utf32le, pos); return c; } case uni_bogus32le: { size_t pos = 0; t_unicode c; c = uni_bogus32le_iscan (str.raw, &pos, pos + 100); string_from_scanner_pos (str_after, str, uni_bogus32le, pos); return c; } } } inline__ ustr_cv_index_t ustri_str_subtract (uni_string a, uni_string b, enum uni_encoding_scheme enc) { switch (enc) { default: case uni_iso8859_1: return ustr_cv_index ((ssize_t)(a.iso8859_1 - b.iso8859_1)); case uni_utf8: return ustr_cv_index ((ssize_t)(a.utf8 - b.utf8)); case uni_utf16: case uni_utf16be: case uni_utf16le: return ustr_cv_index ((ssize_t)(a.utf16 - b.utf16)); case uni_utf32: case uni_utf32be: case uni_utf32le: return ustr_cv_index ((ssize_t)(a.utf32 - b.utf32)); case uni_bogus32: case uni_bogus32be: case uni_bogus32le: return ustr_cv_index ((ssize_t)(a.bogus32 - b.bogus32)); } } static inline__ void ustri_scan_n_case (uni_string * str_after, ustr_cv_index_t * len_after, uni_string str, enum uni_encoding_scheme enc, ustr_cv_index_t length, size_t scanner_pos) { string_from_scanner_pos (str_after, str, enc, scanner_pos); if (len_after) len_after->cv = length.cv - ustri_scanner_index_to_cv_index (enc, scanner_pos).cv; } inline__ t_unicode ustri_scan_n (uni_string * str_after, ustr_cv_index_t * len_after, uni_string str, enum uni_encoding_scheme enc, ustr_cv_index_t length) { switch (enc) { default: case uni_iso8859_1: { size_t pos = 0; t_unicode c; c = uni_iso8859_1_scan (str.iso8859_1, &pos, ustri_cv_index_to_scanner_index (uni_iso8859_1, length)); ustri_scan_n_case (str_after, len_after, str, enc, length, pos); return c; } case uni_utf8: { size_t pos = 0; t_unicode c; c = uni_utf8_scan (str.utf8, &pos, ustri_cv_index_to_scanner_index (uni_utf8, length)); ustri_scan_n_case (str_after, len_after, str, enc, length, pos); return c; } case uni_utf16: { size_t pos = 0; t_unicode c; c = uni_utf16_scan (str.utf16, &pos, ustri_cv_index_to_scanner_index (uni_utf16, length)); ustri_scan_n_case (str_after, len_after, str, enc, length, pos); return c; } case uni_utf32: { size_t pos = 0; t_unicode c; c = uni_utf32_scan (str.utf32, &pos, ustri_cv_index_to_scanner_index (uni_utf32, length)); ustri_scan_n_case (str_after, len_after, str, enc, length, pos); return c; } case uni_bogus32: { size_t pos = 0; t_unicode c; c = uni_bogus32_scan (str.bogus32, &pos, ustri_cv_index_to_scanner_index (uni_bogus32, length)); ustri_scan_n_case (str_after, len_after, str, enc, length, pos); return c; } case uni_utf16be: { size_t pos = 0; t_unicode c; c = uni_utf16be_iscan (str.raw, &pos, ustri_cv_index_to_scanner_index (uni_utf16be, length)); ustri_scan_n_case (str_after, len_after, str, enc, length, pos); return c; } case uni_utf32be: { size_t pos = 0; t_unicode c; c = uni_utf32be_iscan (str.raw, &pos, ustri_cv_index_to_scanner_index (uni_utf32be, length)); ustri_scan_n_case (str_after, len_after, str, enc, length, pos); return c; } case uni_bogus32be: { size_t pos = 0; t_unicode c; c = uni_bogus32be_iscan (str.raw, &pos, ustri_cv_index_to_scanner_index (uni_bogus32be, length)); ustri_scan_n_case (str_after, len_after, str, enc, length, pos); return c; } case uni_utf16le: { size_t pos = 0; t_unicode c; c = uni_utf16le_iscan (str.raw, &pos, ustri_cv_index_to_scanner_index (uni_utf16le, length)); ustri_scan_n_case (str_after, len_after, str, enc, length, pos); return c; } case uni_utf32le: { size_t pos = 0; t_unicode c; c = uni_utf32le_iscan (str.raw, &pos, ustri_cv_index_to_scanner_index (uni_utf32le, length)); ustri_scan_n_case (str_after, len_after, str, enc, length, pos); return c; } case uni_bogus32le: { size_t pos = 0; t_unicode c; c = uni_bogus32le_iscan (str.raw, &pos, ustri_cv_index_to_scanner_index (uni_bogus32le, length)); ustri_scan_n_case (str_after, len_after, str, enc, length, pos); return c; } } } static inline__ int ustr_put_case_case_n (uni_string * str_after, ustr_cv_index_t * len_after, uni_string str, enum uni_encoding_scheme enc, ustr_cv_index_t len, int put_result) { invariant (put_result > 0); if (str_after) *str_after = ustri_cv_offset (str, enc, ustri_scanner_index_to_cv_index (enc, (size_t)put_result)); if (len_after) len_after->cv = len.cv - (ssize_t)put_result; return 0; } static inline__ void ustri_shift_characters_case (uni_string str, enum uni_encoding_scheme enc, ustr_cv_index_t amount) { uni_string dest; ustr_cv_index_t cv_len_with_0; uni_string past_0; size_t move_amt; dest = ustri_cv_offset (str, enc, amount); cv_len_with_0 = ustri_cv_length (str, enc); ++cv_len_with_0.cv; past_0 = ustri_cv_offset (str, enc, cv_len_with_0); move_amt = (past_0.raw - str.raw); mem_move (dest.raw, str.raw, move_amt); } static inline__ void ustri_shift_characters_n_case (uni_string str, enum uni_encoding_scheme enc, ustr_cv_index_t len, ustr_cv_index_t amount) { uni_string dest; uni_string past_dest; size_t move_amt; dest = ustri_cv_offset (str, enc, amount); past_dest = ustri_cv_offset (dest, enc, len); move_amt = (past_dest.raw - dest.raw); mem_move (dest.raw, str.raw, move_amt); mem_set0 (past_dest.raw, uni_cv_sizeof (enc)); } static inline__ void ustri_shift_characters (uni_string str, enum uni_encoding_scheme enc, ustr_cv_index_t len, ustr_cv_index_t amount, int shift_by_final_null) { if (shift_by_final_null) { switch (enc) { default: case uni_iso8859_1: ustri_shift_characters_case (str, uni_iso8859_1, amount); return; case uni_utf8: ustri_shift_characters_case (str, uni_utf8, amount); return; case uni_utf16: ustri_shift_characters_case (str, uni_utf16, amount); return; case uni_utf32: ustri_shift_characters_case (str, uni_utf32, amount); return; case uni_bogus32: ustri_shift_characters_case (str, uni_bogus32, amount); return; case uni_utf16be: ustri_shift_characters_case (str, uni_utf16be, amount); return; case uni_utf32be: ustri_shift_characters_case (str, uni_utf32be, amount); return; case uni_bogus32be: ustri_shift_characters_case (str, uni_bogus32be, amount); return; case uni_utf16le: ustri_shift_characters_case (str, uni_utf16le, amount); return; case uni_utf32le: ustri_shift_characters_case (str, uni_utf32le, amount); return; case uni_bogus32le: ustri_shift_characters_case (str, uni_bogus32le, amount); return; } } else { switch (enc) { default: case uni_iso8859_1: ustri_shift_characters_n_case (str, uni_iso8859_1, len, amount); return; case uni_utf8: ustri_shift_characters_n_case (str, uni_utf8, len, amount); return; case uni_utf16: ustri_shift_characters_n_case (str, uni_utf16, len, amount); return; case uni_utf32: ustri_shift_characters_n_case (str, uni_utf32, len, amount); return; case uni_bogus32: ustri_shift_characters_n_case (str, uni_bogus32, len, amount); return; case uni_utf16be: ustri_shift_characters_n_case (str, uni_utf16be, len, amount); return; case uni_utf32be: ustri_shift_characters_n_case (str, uni_utf32be, len, amount); return; case uni_bogus32be: ustri_shift_characters_n_case (str, uni_bogus32be, len, amount); return; case uni_utf16le: ustri_shift_characters_n_case (str, uni_utf16le, len, amount); return; case uni_utf32le: ustri_shift_characters_n_case (str, uni_utf32le, len, amount); return; case uni_bogus32le: ustri_shift_characters_n_case (str, uni_bogus32le, len, amount); return; } } } static inline__ int ustri_put_n_case (uni_string * str_after, ustr_cv_index_t * len_after, uni_string str, enum uni_encoding_scheme enc, ustr_cv_index_t len, t_unicode c, enum ustr_set_type set_type, int shift_by_final_null) { switch (set_type) { case ustr_fit: { t_unicode c_was = ustri_scan_n (0, 0, str, enc, len); int avail = (int)uni_cv_length_of_codepoint_in_encoding (enc, c_was); int wanted = (int)uni_cv_length_of_codepoint_in_encoding (enc, c); if (avail < 0) avail = 1; if (wanted < 0) return wanted; if (avail != wanted) return -1; goto store_character; } case ustr_shift: { t_unicode c_was = ustri_scan_n (0, 0, str, enc, len); int avail = (int)uni_cv_length_of_codepoint_in_encoding (enc, c_was); int wanted = (int)uni_cv_length_of_codepoint_in_encoding (enc, c); if (avail != wanted) ustri_shift_characters (str, enc, len, ustr_cv_index ((ssize_t)(wanted - avail)), shift_by_final_null); goto store_character; } default: case ustr_over: { int wanted = (int)uni_cv_length_of_codepoint_in_encoding (enc, c); if (wanted < len.cv) return -1; store_character: { size_t pos = 0; pos = 0; switch (enc) { default: case uni_iso8859_1: return ustr_put_case_case_n (str_after, len_after, str, uni_iso8859_1, len, uni_iso8859_1_put (str.iso8859_1, &pos, ustri_cv_index_to_scanner_index (uni_iso8859_1, len), c)); case uni_utf8: return ustr_put_case_case_n (str_after, len_after, str, uni_utf8, len, uni_utf8_put (str.utf8, &pos, ustri_cv_index_to_scanner_index (uni_utf8, len), c)); case uni_utf16: return ustr_put_case_case_n (str_after, len_after, str, uni_utf16, len, uni_utf16_put (str.utf16, &pos, ustri_cv_index_to_scanner_index (uni_utf16, len), c)); case uni_utf32: return ustr_put_case_case_n (str_after, len_after, str, uni_utf32, len, uni_utf32_put (str.utf32, &pos, ustri_cv_index_to_scanner_index (uni_utf32, len), c)); case uni_bogus32: return ustr_put_case_case_n (str_after, len_after, str, uni_bogus32, len, uni_bogus32_put (str.bogus32, &pos, ustri_cv_index_to_scanner_index (uni_bogus32, len), c)); case uni_utf16be: return ustr_put_case_case_n (str_after, len_after, str, uni_utf16be, len, uni_utf16be_iput (str.raw, &pos, ustri_cv_index_to_scanner_index (uni_utf16be, len), c)); case uni_utf32be: return ustr_put_case_case_n (str_after, len_after, str, uni_utf32be, len, uni_utf32be_iput (str.raw, &pos, ustri_cv_index_to_scanner_index (uni_utf32be, len), c)); case uni_bogus32be: return ustr_put_case_case_n (str_after, len_after, str, uni_bogus32be, len, uni_bogus32be_iput (str.raw, &pos, ustri_cv_index_to_scanner_index (uni_bogus32be, len), c)); case uni_utf16le: return ustr_put_case_case_n (str_after, len_after, str, uni_utf16le, len, uni_utf16le_iput (str.raw, &pos, ustri_cv_index_to_scanner_index (uni_utf16le, len), c)); case uni_utf32le: return ustr_put_case_case_n (str_after, len_after, str, uni_utf32le, len, uni_utf32le_iput (str.raw, &pos, ustri_cv_index_to_scanner_index (uni_utf32le, len), c)); case uni_bogus32le: return ustr_put_case_case_n (str_after, len_after, str, uni_bogus32le, len, uni_bogus32le_iput (str.raw, &pos, ustri_cv_index_to_scanner_index (uni_bogus32le, len), c)); } } } } } static inline__ int ustri_put_n_cases (uni_string * str_after, ustr_cv_index_t * len_after, uni_string str, enum uni_encoding_scheme enc, ustr_cv_index_t len, t_unicode c, enum ustr_set_type set_type, int shift_by_final_null) { switch (enc) { default: case uni_iso8859_1: return ustri_put_n_case (str_after, len_after, str, uni_iso8859_1, len, c, set_type, shift_by_final_null); case uni_utf8: return ustri_put_n_case (str_after, len_after, str, uni_utf8, len, c, set_type, shift_by_final_null); case uni_utf16: return ustri_put_n_case (str_after, len_after, str, uni_utf16, len, c, set_type, shift_by_final_null); case uni_utf32: return ustri_put_n_case (str_after, len_after, str, uni_utf32, len, c, set_type, shift_by_final_null); case uni_bogus32: return ustri_put_n_case (str_after, len_after, str, uni_bogus32, len, c, set_type, shift_by_final_null); case uni_utf16be: return ustri_put_n_case (str_after, len_after, str, uni_utf16be, len, c, set_type, shift_by_final_null); case uni_utf32be: return ustri_put_n_case (str_after, len_after, str, uni_utf32be, len, c, set_type, shift_by_final_null); case uni_bogus32be: return ustri_put_n_case (str_after, len_after, str, uni_bogus32be, len, c, set_type, shift_by_final_null); case uni_utf16le: return ustri_put_n_case (str_after, len_after, str, uni_utf16le, len, c, set_type, shift_by_final_null); case uni_utf32le: return ustri_put_n_case (str_after, len_after, str, uni_utf32le, len, c, set_type, shift_by_final_null); case uni_bogus32le: return ustri_put_n_case (str_after, len_after, str, uni_bogus32le, len, c, set_type, shift_by_final_null); } } inline__ int ustri_put (uni_string * str_after, uni_string str, enum uni_encoding_scheme enc, t_unicode c, enum ustr_set_type set_type) { switch (set_type) { case ustr_fit: { return ustri_put_n_cases (str_after, 0, str, enc, ustr_cv_index ((ssize_t)100), c, ustr_fit, 0); } case ustr_shift: { return ustri_put_n_cases (str_after, 0, str, enc, ustr_cv_index ((ssize_t)100), c, ustr_shift, 1); } default: case ustr_over: { return ustri_put_n_cases (str_after, 0, str, enc, ustr_cv_index ((ssize_t)100), c, ustr_over, 0); } } } inline__ int ustri_put_n (uni_string * str_after, ustr_cv_index_t * len_after, uni_string str, enum uni_encoding_scheme enc, ustr_cv_index_t len, t_unicode c, enum ustr_set_type set_type) { switch (set_type) { case ustr_fit: { return ustri_put_n_cases (str_after, len_after, str, enc, len, c, ustr_fit, 0); } case ustr_shift: { return ustri_put_n_cases (str_after, len_after, str, enc, len, c, ustr_shift, 0); } default: case ustr_over: { return ustri_put_n_cases (str_after, len_after, str, enc, len, c, ustr_over, 0); } } } static inline__ t_unicode ustri_cv_ref_case (ustr_cv_index_t * index_after, uni_string str, enum uni_encoding_scheme enc, ustr_cv_index_t index) { if (!index_after) return ustri_scan (0, ustri_cv_offset (str, enc, index), enc); else { uni_string str_after; t_unicode answer; answer = ustri_scan (&str_after, ustri_cv_offset (str, enc, index), enc); *index_after = ustr_str_subtract (str_after, str, enc); return answer; } } inline__ t_unicode ustri_cv_ref (ustr_cv_index_t * index_after, uni_string str, enum uni_encoding_scheme enc, ustr_cv_index_t index) { switch (enc) { default: case uni_iso8859_1: return ustri_cv_ref_case (index_after, str, uni_iso8859_1, index); case uni_utf8: return ustri_cv_ref_case (index_after, str, uni_utf8, index); case uni_utf16: return ustri_cv_ref_case (index_after, str, uni_utf16, index); case uni_utf32: return ustri_cv_ref_case (index_after, str, uni_utf32, index); case uni_bogus32: return ustri_cv_ref_case (index_after, str, uni_bogus32, index); case uni_utf16be: return ustri_cv_ref_case (index_after, str, uni_utf16be, index); case uni_utf32be: return ustri_cv_ref_case (index_after, str, uni_utf32be, index); case uni_bogus32be: return ustri_cv_ref_case (index_after, str, uni_bogus32be, index); case uni_utf16le: return ustri_cv_ref_case (index_after, str, uni_utf16le, index); case uni_utf32le: return ustri_cv_ref_case (index_after, str, uni_utf32le, index); case uni_bogus32le: return ustri_cv_ref_case (index_after, str, uni_bogus32le, index); } } static inline__ t_unicode ustri_cv_ref_n_case (ustr_cv_index_t * index_after, uni_string str, enum uni_encoding_scheme enc, ustr_cv_index_t len, ustr_cv_index_t index) { if (len.cv < index.cv) return UNI_SCAN_INPUT_TRUNCATED; else if (!index_after) { return ustri_scan_n (0, 0, ustri_cv_offset (str, enc, index), enc, ustr_cv_index (len.cv - index.cv)); } else { uni_string str_after; t_unicode answer; answer = ustri_scan_n (&str_after, 0, ustri_cv_offset (str, enc, index), enc, ustr_cv_index (len.cv - index.cv)); *index_after = ustr_str_subtract (str_after, str, enc); return answer; } } inline__ t_unicode ustri_cv_ref_n (ustr_cv_index_t * index_after, uni_string str, enum uni_encoding_scheme enc, ustr_cv_index_t len, ustr_cv_index_t index) { switch (enc) { default: case uni_iso8859_1: return ustri_cv_ref_n_case (index_after, str, uni_iso8859_1, len, index); case uni_utf8: return ustri_cv_ref_n_case (index_after, str, uni_utf8, len, index); case uni_utf16: return ustri_cv_ref_n_case (index_after, str, uni_utf16, len, index); case uni_utf32: return ustri_cv_ref_n_case (index_after, str, uni_utf32, len, index); case uni_bogus32: return ustri_cv_ref_n_case (index_after, str, uni_bogus32, len, index); case uni_utf16be: return ustri_cv_ref_n_case (index_after, str, uni_utf16be, index, len); case uni_utf32be: return ustri_cv_ref_n_case (index_after, str, uni_utf32be, len, index); case uni_bogus32be: return ustri_cv_ref_n_case (index_after, str, uni_bogus32be, len, index); case uni_utf16le: return ustri_cv_ref_n_case (index_after, str, uni_utf16le, len, index); case uni_utf32le: return ustri_cv_ref_n_case (index_after, str, uni_utf32le, len, index); case uni_bogus32le: return ustri_cv_ref_n_case (index_after, str, uni_bogus32le, len, index); } } static inline__ int ustri_cv_set_case (ustr_cv_index_t * index_after, uni_string str, enum uni_encoding_scheme enc, ustr_cv_index_t index, t_unicode c, enum ustr_set_type set_type) { if (!index_after) return ustri_put (0, ustri_cv_offset (str, enc, index), enc, c, set_type); else { uni_string str_after; int answer; answer = ustri_put (&str_after, ustri_cv_offset (str, enc, index), enc, c, set_type); *index_after = ustr_str_subtract (str_after, str, enc); return answer; } } inline__ int ustri_cv_set (ustr_cv_index_t * index_after, uni_string str, enum uni_encoding_scheme enc, ustr_cv_index_t index, t_unicode c, enum ustr_set_type set_type) { switch (enc) { default: case uni_iso8859_1: return ustri_cv_set_case (index_after, str, uni_iso8859_1, index, c, set_type); case uni_utf8: return ustri_cv_set_case (index_after, str, uni_utf8, index, c, set_type); case uni_utf16: return ustri_cv_set_case (index_after, str, uni_utf16, index, c, set_type); case uni_utf32: return ustri_cv_set_case (index_after, str, uni_utf32, index, c, set_type); case uni_bogus32: return ustri_cv_set_case (index_after, str, uni_bogus32, index, c, set_type); case uni_utf16be: return ustri_cv_set_case (index_after, str, uni_utf16be, index, c, set_type); case uni_utf32be: return ustri_cv_set_case (index_after, str, uni_utf32be, index, c, set_type); case uni_bogus32be: return ustri_cv_set_case (index_after, str, uni_bogus32be, index, c, set_type); case uni_utf16le: return ustri_cv_set_case (index_after, str, uni_utf16le, index, c, set_type); case uni_utf32le: return ustri_cv_set_case (index_after, str, uni_utf32le, index, c, set_type); case uni_bogus32le: return ustri_cv_set_case (index_after, str, uni_bogus32le, index, c, set_type); } } static inline__ int ustri_cv_set_n_case (ustr_cv_index_t * index_after, ustr_cv_index_t * len_after, uni_string str, enum uni_encoding_scheme enc, ustr_cv_index_t len, ustr_cv_index_t index, t_unicode c, enum ustr_set_type set_type) { if (!index_after && !len_after) { return ustri_put_n (0, 0, ustri_cv_offset (str, enc, index), enc, ustr_cv_index (len.cv - index.cv), c, set_type); } else { uni_string after_str; ustr_cv_index_t after_len; int answer; answer = ustri_put_n (&after_str, &after_len, ustri_cv_offset (str, enc, index), enc, ustr_cv_index (len.cv - index.cv) , c, set_type); if (index_after) *index_after = ustr_str_subtract (after_str, str, enc); if (len_after) len_after->cv = after_len.cv + index.cv; return answer; } } inline__ int ustri_cv_set_n (ustr_cv_index_t * index_after, ustr_cv_index_t * len_after, uni_string str, enum uni_encoding_scheme enc, ustr_cv_index_t len, ustr_cv_index_t index, t_unicode c, enum ustr_set_type set_type) { switch (enc) { default: case uni_iso8859_1: return ustri_cv_set_n_case (index_after, len_after, str, uni_iso8859_1, len, index, c, set_type); case uni_utf8: return ustri_cv_set_n_case (index_after, len_after, str, uni_utf8, len, index, c, set_type); case uni_utf16: return ustri_cv_set_n_case (index_after, len_after, str, uni_utf16, len, index, c, set_type); case uni_utf32: return ustri_cv_set_n_case (index_after, len_after, str, uni_utf32, len, index, c, set_type); case uni_bogus32: return ustri_cv_set_n_case (index_after, len_after, str, uni_bogus32, len, index, c, set_type); case uni_utf16be: return ustri_cv_set_n_case (index_after, len_after, str, uni_utf16be, len, index, c, set_type); case uni_utf32be: return ustri_cv_set_n_case (index_after, len_after, str, uni_utf32be, len, index, c, set_type); case uni_bogus32be: return ustri_cv_set_n_case (index_after, len_after, str, uni_bogus32be, len, index, c, set_type); case uni_utf16le: return ustri_cv_set_n_case (index_after, len_after, str, uni_utf16le, len, index, c, set_type); case uni_utf32le: return ustri_cv_set_n_case (index_after, len_after, str, uni_utf32le, len, index, c, set_type); case uni_bogus32le: return ustri_cv_set_n_case (index_after, len_after, str, uni_bogus32le, len, index, c, set_type); } } static inline__ uni_string ustri_cp_offset_case (uni_string str, enum uni_encoding_scheme enc, ustr_cp_index_t n) { if (!str.raw) return str; while (n.cp) { t_unicode c; uni_string new_str; c = ustri_scan (&new_str, str, enc); if (!c || ( (c == UNI_SCAN_INPUT_TRUNCATED) && (enc != uni_bogus32) && (enc != uni_bogus32be) && (enc != uni_bogus32le))) { uni_string answer; answer.raw = 0; return answer; } str = new_str; --n.cp; } return str; } inline__ uni_string ustri_cp_offset (uni_string str, enum uni_encoding_scheme enc, ustr_cp_index_t n) { switch (enc) { default: case uni_iso8859_1: return ustri_cp_offset_case (str, uni_iso8859_1, n); case uni_utf8: return ustri_cp_offset_case (str, uni_utf8, n); case uni_utf16: return ustri_cp_offset_case (str, uni_utf16, n); case uni_utf32: return ustri_cp_offset_case (str, uni_utf32, n); case uni_bogus32: return ustri_cp_offset_case (str, uni_bogus32, n); case uni_utf16be: return ustri_cp_offset_case (str, uni_utf16be, n); case uni_utf32be: return ustri_cp_offset_case (str, uni_utf32be, n); case uni_bogus32be: return ustri_cp_offset_case (str, uni_bogus32be, n); case uni_utf16le: return ustri_cp_offset_case (str, uni_utf16le, n); case uni_utf32le: return ustri_cp_offset_case (str, uni_utf32le, n); case uni_bogus32le: return ustri_cp_offset_case (str, uni_bogus32le, n); } } static inline__ uni_string ustri_cp_offset_n_case (uni_string str, enum uni_encoding_scheme enc, ustr_cv_index_t len, ustr_cp_index_t n) { if (!str.raw) return str; while (len.cv) { t_unicode c; uni_string new_str; c = ustri_scan_n (&new_str, &len, str, enc, len); if (!c || ( (c == UNI_SCAN_INPUT_TRUNCATED) && (enc != uni_bogus32) && (enc != uni_bogus32be) && (enc != uni_bogus32le))) { uni_string answer; answer.raw = 0; return answer; } str = new_str; } return str; } inline__ uni_string ustri_cp_offset_n (uni_string str, enum uni_encoding_scheme enc, ustr_cv_index_t len, ustr_cp_index_t n) { switch (enc) { default: case uni_iso8859_1: return ustri_cp_offset_n_case (str, uni_iso8859_1, len, n); case uni_utf8: return ustri_cp_offset_n_case (str, uni_utf8, len, n); case uni_utf16: return ustri_cp_offset_n_case (str, uni_utf16, len, n); case uni_utf32: return ustri_cp_offset_n_case (str, uni_utf32, len, n); case uni_bogus32: return ustri_cp_offset_n_case (str, uni_bogus32, len, n); case uni_utf16be: return ustri_cp_offset_n_case (str, uni_utf16be, len, n); case uni_utf32be: return ustri_cp_offset_n_case (str, uni_utf32be, len, n); case uni_bogus32be: return ustri_cp_offset_n_case (str, uni_bogus32be, len, n); case uni_utf16le: return ustri_cp_offset_n_case (str, uni_utf16le, len, n); case uni_utf32le: return ustri_cp_offset_n_case (str, uni_utf32le, len, n); case uni_bogus32le: return ustri_cp_offset_n_case (str, uni_bogus32le, len, n); } } /************************************************************************ *(h1 "Unicode String Length") * * * */ static inline__ ustr_cv_index_t ustri_lengths_case (ustr_cp_index_t * cp_length, enum uni_encoding_scheme * fw_enc, uni_string str, enum uni_encoding_scheme enc) { ustr_cv_index_t answer; ustr_cp_index_t cp_answer; enum uni_encoding_scheme fw; answer.cv = (ssize_t)0; cp_answer.cp = (ssize_t)0; fw = uni_iso8859_1; while (1) { t_unicode c; uni_string str_after; ustr_cv_index_t amt; c = ustri_scan (&str_after, str, enc); if (!c || ((c == UNI_SCAN_INPUT_TRUNCATED) && (enc != uni_bogus32) && (enc != uni_bogus32be) && (enc != uni_bogus32le))) { if (cp_length) *cp_length = cp_answer; if (fw_enc) *fw_enc = fw; return answer; } amt = ustr_str_subtract (str_after, str, enc); str = str_after; answer.cv += amt.cv; ++cp_answer.cp; if (c > 255) { if (c < ((t_unicode)1 << 16)) { if (fw == uni_iso8859_1) fw = uni_utf16; } else if (uni_is_codepoint (c)) { if (fw != uni_bogus32) fw = uni_utf32; } else { fw = uni_bogus32; } } } } inline__ ustr_cv_index_t ustri_lengths (ustr_cp_index_t * cp_length, enum uni_encoding_scheme * fw_enc, uni_string str, enum uni_encoding_scheme enc) { switch (enc) { default: case uni_iso8859_1: return ustri_lengths_case (cp_length, fw_enc, str, uni_iso8859_1); case uni_utf8: return ustri_lengths_case (cp_length, fw_enc, str, uni_utf8); case uni_utf16: return ustri_lengths_case (cp_length, fw_enc, str, uni_utf16); case uni_utf32: return ustri_lengths_case (cp_length, fw_enc, str, uni_utf32); case uni_bogus32: return ustri_lengths_case (cp_length, fw_enc, str, uni_bogus32); case uni_utf16be: return ustri_lengths_case (cp_length, fw_enc, str, uni_utf16be); case uni_utf32be: return ustri_lengths_case (cp_length, fw_enc, str, uni_utf32be); case uni_bogus32be: return ustri_lengths_case (cp_length, fw_enc, str, uni_bogus32be); case uni_utf16le: return ustri_lengths_case (cp_length, fw_enc, str, uni_utf16le); case uni_utf32le: return ustri_lengths_case (cp_length, fw_enc, str, uni_utf32le); case uni_bogus32le: return ustri_lengths_case (cp_length, fw_enc, str, uni_bogus32le); } } static inline__ ustr_cv_index_t ustri_lengths_n_case (ustr_cp_index_t * cp_length, enum uni_encoding_scheme * fw_enc, uni_string str, enum uni_encoding_scheme enc, ustr_cv_index_t len) { ustr_cv_index_t answer; ustr_cp_index_t cp_answer; enum uni_encoding_scheme fw; answer.cv = (ssize_t)0; cp_answer.cp = (ssize_t)0; fw = uni_iso8859_1; while (len.cv) { t_unicode c; uni_string str_after; ustr_cv_index_t amt; c = ustri_scan (&str_after, str, enc); if ((c == UNI_SCAN_INPUT_TRUNCATED) && (enc != uni_bogus32) && (enc != uni_bogus32be) && (enc != uni_bogus32le)) { break; } amt = ustr_str_subtract (str_after, str, enc); str = str_after; answer.cv += amt.cv; len.cv -= amt.cv; ++cp_answer.cp; if (c > 255) { if (c < ((t_unicode)1 << 16)) { if (fw == uni_iso8859_1) fw = uni_utf16; } else if (uni_is_codepoint (c)) { if (fw != uni_bogus32) fw = uni_utf32; } else { fw = uni_bogus32; } } } if (cp_length) *cp_length = cp_answer; if (fw_enc) *fw_enc = fw; return answer; } inline__ ustr_cv_index_t ustri_lengths_n (ustr_cp_index_t * cp_length, enum uni_encoding_scheme * fw_enc, uni_string str, enum uni_encoding_scheme enc, ustr_cv_index_t len) { switch (enc) { default: case uni_iso8859_1: return ustri_lengths_n_case (cp_length, fw_enc, str, uni_iso8859_1, len); case uni_utf8: return ustri_lengths_n_case (cp_length, fw_enc, str, uni_utf8, len); case uni_utf16: return ustri_lengths_n_case (cp_length, fw_enc, str, uni_utf16, len); case uni_utf32: return ustri_lengths_n_case (cp_length, fw_enc, str, uni_utf32, len); case uni_bogus32: return ustri_lengths_n_case (cp_length, fw_enc, str, uni_bogus32, len); case uni_utf16be: return ustri_lengths_n_case (cp_length, fw_enc, str, uni_utf16be, len); case uni_utf32be: return ustri_lengths_n_case (cp_length, fw_enc, str, uni_utf32be, len); case uni_bogus32be: return ustri_lengths_n_case (cp_length, fw_enc, str, uni_bogus32be, len); case uni_utf16le: return ustri_lengths_n_case (cp_length, fw_enc, str, uni_utf16le, len); case uni_utf32le: return ustri_lengths_n_case (cp_length, fw_enc, str, uni_utf32le, len); case uni_bogus32le: return ustri_lengths_n_case (cp_length, fw_enc, str, uni_bogus32le, len); } } static inline__ ustr_cv_index_t ustri_cv_length_case (uni_string str, enum uni_encoding_scheme enc) { ustr_cv_index_t answer; answer.cv = (ssize_t)0; while (1) { t_unicode c; uni_string str_after; ustr_cv_index_t amt; c = ustri_scan (&str_after, str, enc); if (!c || ((c == UNI_SCAN_INPUT_TRUNCATED) && (enc != uni_bogus32) && (enc != uni_bogus32be) && (enc != uni_bogus32le))) return answer; amt = ustr_str_subtract (str_after, str, enc); str = str_after; answer.cv += amt.cv; } } inline__ ustr_cv_index_t ustri_cv_length (uni_string str, enum uni_encoding_scheme enc) { switch (enc) { default: case uni_iso8859_1: return ustri_cv_length_case (str, uni_iso8859_1); case uni_utf8: return ustri_cv_length_case (str, uni_utf8); case uni_utf16: return ustri_cv_length_case (str, uni_utf16); case uni_utf32: return ustri_cv_length_case (str, uni_utf32); case uni_bogus32: return ustri_cv_length_case (str, uni_bogus32); case uni_utf16be: return ustri_cv_length_case (str, uni_utf16be); case uni_utf32be: return ustri_cv_length_case (str, uni_utf32be); case uni_bogus32be: return ustri_cv_length_case (str, uni_bogus32be); case uni_utf16le: return ustri_cv_length_case (str, uni_utf16le); case uni_utf32le: return ustri_cv_length_case (str, uni_utf32le); case uni_bogus32le: return ustri_cv_length_case (str, uni_bogus32le); } } static inline__ ustr_cv_index_t ustri_cv_length_in_encoding_case (enum uni_encoding_scheme dest_enc, uni_string str, enum uni_encoding_scheme enc) { ustr_cv_index_t answer; answer.cv = (ssize_t)0; while (1) { t_unicode c; ssize_t amt; c = ustri_scan (&str, str, enc); if (!c || ((c == UNI_SCAN_INPUT_TRUNCATED) && (enc != uni_bogus32) && (enc != uni_bogus32be) && (enc != uni_bogus32le))) return answer; amt = uni_cv_length_of_codepoint_in_encoding (dest_enc, c); if (amt < 0) return answer; else answer.cv += amt; } } inline__ ustr_cv_index_t ustri_cv_length_in_encoding (enum uni_encoding_scheme dest_enc, uni_string str, enum uni_encoding_scheme enc) { switch (enc) { default: case uni_iso8859_1: return ustri_cv_length_in_encoding_case (dest_enc, str, uni_iso8859_1); case uni_utf8: return ustri_cv_length_in_encoding_case (dest_enc, str, uni_utf8); case uni_utf16: return ustri_cv_length_in_encoding_case (dest_enc, str, uni_utf16); case uni_utf32: return ustri_cv_length_in_encoding_case (dest_enc, str, uni_utf32); case uni_bogus32: return ustri_cv_length_in_encoding_case (dest_enc, str, uni_bogus32); case uni_utf16be: return ustri_cv_length_in_encoding_case (dest_enc, str, uni_utf16be); case uni_utf32be: return ustri_cv_length_in_encoding_case (dest_enc, str, uni_utf32be); case uni_bogus32be: return ustri_cv_length_in_encoding_case (dest_enc, str, uni_bogus32be); case uni_utf16le: return ustri_cv_length_in_encoding_case (dest_enc, str, uni_utf16le); case uni_utf32le: return ustri_cv_length_in_encoding_case (dest_enc, str, uni_utf32le); case uni_bogus32le: return ustri_cv_length_in_encoding_case (dest_enc, str, uni_bogus32le); } } static inline__ ustr_cv_index_t ustri_cv_length_in_encoding_n_case (enum uni_encoding_scheme dest_enc, uni_string str, enum uni_encoding_scheme enc, ustr_cv_index_t len) { ustr_cv_index_t answer; answer.cv = (ssize_t)0; while (len.cv) { t_unicode c; c = ustri_scan_n (&str, &len, str, enc, len); if ( (c == UNI_SCAN_INPUT_TRUNCATED) && (enc != uni_bogus32) && (enc != uni_bogus32be) && (enc != uni_bogus32le)) return answer; answer.cv += uni_cv_length_of_codepoint_in_encoding (dest_enc, c); } return answer; } inline__ ustr_cv_index_t ustri_cv_length_in_encoding_n (enum uni_encoding_scheme dest_enc, uni_string str, enum uni_encoding_scheme enc, ustr_cv_index_t len) { switch (enc) { default: case uni_iso8859_1: return ustri_cv_length_in_encoding_n_case (dest_enc, str, uni_iso8859_1, len); case uni_utf8: return ustri_cv_length_in_encoding_n_case (dest_enc, str, uni_utf8, len); case uni_utf16: return ustri_cv_length_in_encoding_n_case (dest_enc, str, uni_utf16, len); case uni_utf32: return ustri_cv_length_in_encoding_n_case (dest_enc, str, uni_utf32, len); case uni_bogus32: return ustri_cv_length_in_encoding_n_case (dest_enc, str, uni_bogus32, len); case uni_utf16be: return ustri_cv_length_in_encoding_n_case (dest_enc, str, uni_utf16be, len); case uni_utf32be: return ustri_cv_length_in_encoding_n_case (dest_enc, str, uni_utf32be, len); case uni_bogus32be: return ustri_cv_length_in_encoding_n_case (dest_enc, str, uni_bogus32be, len); case uni_utf16le: return ustri_cv_length_in_encoding_n_case (dest_enc, str, uni_utf16le, len); case uni_utf32le: return ustri_cv_length_in_encoding_n_case (dest_enc, str, uni_utf32le, len); case uni_bogus32le: return ustri_cv_length_in_encoding_n_case (dest_enc, str, uni_bogus32le, len); } } static inline__ ustr_cp_index_t ustri_cp_length_case (enum uni_encoding_scheme * fw_enc, uni_string str, enum uni_encoding_scheme enc) { ustr_cp_index_t answer; enum uni_encoding_scheme fw; fw = uni_iso8859_1; answer.cp = (ssize_t)0; while (1) { t_unicode c; c = ustri_scan (&str, str, enc); if (!c || ((c == UNI_SCAN_INPUT_TRUNCATED) && (enc != uni_bogus32) && (enc != uni_bogus32be) && (enc != uni_bogus32le))) { if (fw_enc) *fw_enc = fw; return answer; } if (fw_enc) { if (c > 255) { if (c < ((t_unicode)1<<16)) { if (fw == uni_iso8859_1) fw = uni_utf16; } else if (uni_is_codepoint (c) && (c != UNI_SCAN_INPUT_TRUNCATED)) { if (fw != uni_bogus32) fw = uni_utf32; } else { fw = uni_bogus32; } } } ++answer.cp; } } inline__ ustr_cp_index_t ustri_cp_length (enum uni_encoding_scheme * fw_enc, uni_string str, enum uni_encoding_scheme enc) { switch (enc) { default: case uni_iso8859_1: return ustri_cp_length_case (fw_enc, str, uni_iso8859_1); case uni_utf8: return ustri_cp_length_case (fw_enc, str, uni_utf8); case uni_utf16: return ustri_cp_length_case (fw_enc, str, uni_utf16); case uni_utf32: return ustri_cp_length_case (fw_enc, str, uni_utf32); case uni_bogus32: return ustri_cp_length_case (fw_enc, str, uni_bogus32); case uni_utf16be: return ustri_cp_length_case (fw_enc, str, uni_utf16be); case uni_utf32be: return ustri_cp_length_case (fw_enc, str, uni_utf32be); case uni_bogus32be: return ustri_cp_length_case (fw_enc, str, uni_bogus32be); case uni_utf16le: return ustri_cp_length_case (fw_enc, str, uni_utf16le); case uni_utf32le: return ustri_cp_length_case (fw_enc, str, uni_utf32le); case uni_bogus32le: return ustri_cp_length_case (fw_enc, str, uni_bogus32le); } } static inline__ ustr_cp_index_t ustri_cp_length_n_case (enum uni_encoding_scheme * fw_enc, uni_string str, enum uni_encoding_scheme enc, ustr_cv_index_t len) { ustr_cp_index_t answer; enum uni_encoding_scheme fw; fw = uni_iso8859_1; answer.cp = (ssize_t)0; while (len.cv) { t_unicode c; c = ustri_scan_n (&str, &len, str, enc, len); if ( (c == UNI_SCAN_INPUT_TRUNCATED) && (enc != uni_bogus32) && (enc != uni_bogus32be) && (enc != uni_bogus32le)) { if (fw_enc) *fw_enc = fw; return answer; } if (fw_enc) { if (c > 255) { if (c < ((t_unicode)1<<16)) { if (fw == uni_iso8859_1) fw = uni_utf16; } else if (uni_is_codepoint (c) && (c != UNI_SCAN_INPUT_TRUNCATED)) { if (fw != uni_bogus32) fw = uni_utf32; } else { fw = uni_bogus32; } } } ++answer.cp; } return answer; } inline__ ustr_cp_index_t ustri_cp_length_n (enum uni_encoding_scheme * fw_enc, uni_string str, enum uni_encoding_scheme enc, ustr_cv_index_t len) { switch (enc) { default: case uni_iso8859_1: return ustri_cp_length_n_case (fw_enc, str, uni_iso8859_1, len); case uni_utf8: return ustri_cp_length_n_case (fw_enc, str, uni_utf8, len); case uni_utf16: return ustri_cp_length_n_case (fw_enc, str, uni_utf16, len); case uni_utf32: return ustri_cp_length_n_case (fw_enc, str, uni_utf32, len); case uni_bogus32: return ustri_cp_length_n_case (fw_enc, str, uni_bogus32, len); case uni_utf16be: return ustri_cp_length_n_case (fw_enc, str, uni_utf16be, len); case uni_utf32be: return ustri_cp_length_n_case (fw_enc, str, uni_utf32be, len); case uni_bogus32be: return ustri_cp_length_n_case (fw_enc, str, uni_bogus32be, len); case uni_utf16le: return ustri_cp_length_n_case (fw_enc, str, uni_utf16le, len); case uni_utf32le: return ustri_cp_length_n_case (fw_enc, str, uni_utf32le, len); case uni_bogus32le: return ustri_cp_length_n_case (fw_enc, str, uni_bogus32le, len); } } static inline__ uni_string ustri_copy_case (uni_string dest, enum uni_encoding_scheme dest_enc, uni_string str, enum uni_encoding_scheme enc) { while (1) { t_unicode c; c = ustri_scan (&str, str, enc); if (!c) { ustri_put (&dest, dest, dest_enc, (t_unicode)0, ustr_over); return dest; } else if ( (c == UNI_SCAN_INPUT_TRUNCATED) && (enc != uni_bogus32) && (enc != uni_bogus32be) && (enc != uni_bogus32le)) { return UNI_STRING_NULL; } else if (0 > ustri_put (&dest, dest, dest_enc, c, ustr_over)) { return UNI_STRING_NULL; } } } inline__ uni_string ustri_copy (uni_string dest, enum uni_encoding_scheme dest_enc, uni_string str, enum uni_encoding_scheme enc) { switch (enc) { default: case uni_iso8859_1: return ustri_copy_case (dest, dest_enc, str, uni_iso8859_1); case uni_utf8: return ustri_copy_case (dest, dest_enc, str, uni_utf8); case uni_utf16: return ustri_copy_case (dest, dest_enc, str, uni_utf16); case uni_utf32: return ustri_copy_case (dest, dest_enc, str, uni_utf32); case uni_bogus32: return ustri_copy_case (dest, dest_enc, str, uni_bogus32); case uni_utf16be: return ustri_copy_case (dest, dest_enc, str, uni_utf16be); case uni_utf32be: return ustri_copy_case (dest, dest_enc, str, uni_utf32be); case uni_bogus32be: return ustri_copy_case (dest, dest_enc, str, uni_bogus32be); case uni_utf16le: return ustri_copy_case (dest, dest_enc, str, uni_utf16le); case uni_utf32le: return ustri_copy_case (dest, dest_enc, str, uni_utf32le); case uni_bogus32le: return ustri_copy_case (dest, dest_enc, str, uni_bogus32le); } } static inline__ uni_string ustri_copy_n_case (uni_string dest, enum uni_encoding_scheme dest_enc, ustr_cv_index_t dest_len, uni_string str, enum uni_encoding_scheme enc, ustr_cv_index_t len) { while (len.cv) { t_unicode c; c = ustri_scan_n (&str, &len, str, enc, len); if ( (c == UNI_SCAN_INPUT_TRUNCATED) && (enc != uni_bogus32) && (enc != uni_bogus32be) && (enc != uni_bogus32le)) { return UNI_STRING_NULL; } else if (0 > ustri_put_n (&dest, &dest_len, dest, dest_enc, dest_len, c, ustr_over)) { return UNI_STRING_NULL; } } return str; } inline__ uni_string ustri_copy_n (uni_string dest, enum uni_encoding_scheme dest_enc, ustr_cv_index_t dest_len, uni_string str, enum uni_encoding_scheme enc, ustr_cv_index_t len) { switch (enc) { default: case uni_iso8859_1: return ustri_copy_n_case (dest, dest_enc, dest_len, str, uni_iso8859_1, len); case uni_utf8: return ustri_copy_n_case (dest, dest_enc, dest_len, str, uni_utf8, len); case uni_utf16: return ustri_copy_n_case (dest, dest_enc, dest_len, str, uni_utf16, len); case uni_utf32: return ustri_copy_n_case (dest, dest_enc, dest_len, str, uni_utf32, len); case uni_bogus32: return ustri_copy_n_case (dest, dest_enc, dest_len, str, uni_bogus32, len); case uni_utf16be: return ustri_copy_n_case (dest, dest_enc, dest_len, str, uni_utf16be, len); case uni_utf32be: return ustri_copy_n_case (dest, dest_enc, dest_len, str, uni_utf32be, len); case uni_bogus32be: return ustri_copy_n_case (dest, dest_enc, dest_len, str, uni_bogus32be, len); case uni_utf16le: return ustri_copy_n_case (dest, dest_enc, dest_len, str, uni_utf16le, len); case uni_utf32le: return ustri_copy_n_case (dest, dest_enc, dest_len, str, uni_utf32le, len); case uni_bogus32le: return ustri_copy_n_case (dest, dest_enc, dest_len, str, uni_bogus32le, len); } } static inline__ uni_string ustri_cat_case (uni_string dest, enum uni_encoding_scheme dest_enc, uni_string str, enum uni_encoding_scheme enc) { ustr_cv_index_t dest_end; uni_string write_pos; uni_string answer; dest_end = ustri_cv_length (dest, dest_enc); write_pos = ustri_cv_offset (dest, dest_enc, dest_end); answer = ustri_copy (write_pos, dest_enc, str, enc); return answer; } inline__ uni_string ustri_cat (uni_string dest, enum uni_encoding_scheme dest_enc, uni_string str, enum uni_encoding_scheme enc) { switch (enc) { default: case uni_iso8859_1: return ustri_cat_case (dest, dest_enc, str, uni_iso8859_1); case uni_utf8: return ustri_cat_case (dest, dest_enc, str, uni_utf8); case uni_utf16: return ustri_cat_case (dest, dest_enc, str, uni_utf16); case uni_utf32: return ustri_cat_case (dest, dest_enc, str, uni_utf32); case uni_bogus32: return ustri_cat_case (dest, dest_enc, str, uni_bogus32); case uni_utf16be: return ustri_cat_case (dest, dest_enc, str, uni_utf16be); case uni_utf32be: return ustri_cat_case (dest, dest_enc, str, uni_utf32be); case uni_bogus32be: return ustri_cat_case (dest, dest_enc, str, uni_bogus32be); case uni_utf16le: return ustri_cat_case (dest, dest_enc, str, uni_utf16le); case uni_utf32le: return ustri_cat_case (dest, dest_enc, str, uni_utf32le); case uni_bogus32le: return ustri_cat_case (dest, dest_enc, str, uni_bogus32le); } } static inline__ uni_string ustri_cat_n_case (uni_string dest, enum uni_encoding_scheme dest_enc, ustr_cv_index_t dest_len, uni_string str, enum uni_encoding_scheme enc, ustr_cv_index_t len) { uni_string write_pos; uni_string answer; write_pos = ustri_cv_offset (dest, dest_enc, dest_len); answer = ustri_copy_n (write_pos, dest_enc, len, str, enc, len); return answer; } inline__ uni_string ustri_cat_n (uni_string dest, enum uni_encoding_scheme dest_enc, ustr_cv_index_t dest_len, uni_string str, ustr_cv_index_t len, enum uni_encoding_scheme enc) { switch (enc) { default: case uni_iso8859_1: return ustri_cat_n_case (dest, dest_enc, dest_len, str, uni_iso8859_1, len); case uni_utf8: return ustri_cat_n_case (dest, dest_enc, dest_len, str, uni_utf8, len); case uni_utf16: return ustri_cat_n_case (dest, dest_enc, dest_len, str, uni_utf16, len); case uni_utf32: return ustri_cat_n_case (dest, dest_enc, dest_len, str, uni_utf32, len); case uni_bogus32: return ustri_cat_n_case (dest, dest_enc, dest_len, str, uni_bogus32, len); case uni_utf16be: return ustri_cat_n_case (dest, dest_enc, dest_len, str, uni_utf16be, len); case uni_utf32be: return ustri_cat_n_case (dest, dest_enc, dest_len, str, uni_utf32be, len); case uni_bogus32be: return ustri_cat_n_case (dest, dest_enc, dest_len, str, uni_bogus32be, len); case uni_utf16le: return ustri_cat_n_case (dest, dest_enc, dest_len, str, uni_utf16le, len); case uni_utf32le: return ustri_cat_n_case (dest, dest_enc, dest_len, str, uni_utf32le, len); case uni_bogus32le: return ustri_cat_n_case (dest, dest_enc, dest_len, str, uni_bogus32le, len); } } static inline__ uni_string ustri_save_case (alloc_limits limits, enum uni_encoding_scheme dest_enc, uni_string str, enum uni_encoding_scheme enc) { ustr_cv_index_t length; size_t alloc_length; uni_string answer; length = ustri_cv_length_in_encoding (dest_enc, str, enc); ++length.cv; /* for the final null */ alloc_length = length.cv * uni_cv_sizeof (dest_enc); answer.raw = (t_uchar *)lim_malloc (limits, alloc_length); if (!answer.raw) return answer; else { uni_string end; end = ustri_copy (answer, dest_enc, str, enc); if (end.raw) return answer; else { lim_free (limits, answer.raw); return UNI_STRING_NULL; } } } inline__ uni_string ustri_save (alloc_limits limits, enum uni_encoding_scheme dest_enc, uni_string str, enum uni_encoding_scheme enc) { switch (enc) { default: case uni_iso8859_1: return ustri_save_case (limits, dest_enc, str, uni_iso8859_1); case uni_utf8: return ustri_save_case (limits, dest_enc, str, uni_utf8); case uni_utf16: return ustri_save_case (limits, dest_enc, str, uni_utf16); case uni_utf32: return ustri_save_case (limits, dest_enc, str, uni_utf32); case uni_bogus32: return ustri_save_case (limits, dest_enc, str, uni_bogus32); case uni_utf16be: return ustri_save_case (limits, dest_enc, str, uni_utf16be); case uni_utf32be: return ustri_save_case (limits, dest_enc, str, uni_utf32be); case uni_bogus32be: return ustri_save_case (limits, dest_enc, str, uni_bogus32be); case uni_utf16le: return ustri_save_case (limits, dest_enc, str, uni_utf16le); case uni_utf32le: return ustri_save_case (limits, dest_enc, str, uni_utf32le); case uni_bogus32le: return ustri_save_case (limits, dest_enc, str, uni_bogus32le); } } inline__ uni_string ustri_save_n_case (ustr_cv_index_t * dest_len, alloc_limits limits, enum uni_encoding_scheme dest_enc, uni_string str, enum uni_encoding_scheme enc, ustr_cv_index_t len) { ustr_cv_index_t length; size_t alloc_length; uni_string answer; length = ustri_cv_length_in_encoding_n (dest_enc, str, enc, len); alloc_length = (1 + length.cv) * uni_cv_sizeof (dest_enc); answer.raw = (t_uchar *)lim_malloc (limits, alloc_length); if (!answer.raw) { return answer; } else { uni_string end; end = ustri_copy_n (answer, dest_enc, len, str, enc, len); if (!end.raw) { lim_free (limits, answer.raw); return UNI_STRING_NULL; } else { if (dest_len) *dest_len = length; ustri_put (0, ustri_cv_offset (answer, dest_enc, length), dest_enc, (t_unicode)0, ustr_over); return answer; } } } inline__ uni_string ustri_save_n (ustr_cv_index_t * dest_len, alloc_limits limits, enum uni_encoding_scheme dest_enc, uni_string str, enum uni_encoding_scheme enc, ustr_cv_index_t len) { switch (enc) { default: case uni_iso8859_1: return ustri_save_n_case (dest_len, limits, dest_enc, str, uni_iso8859_1, len); case uni_utf8: return ustri_save_n_case (dest_len, limits, dest_enc, str, uni_utf8, len); case uni_utf16: return ustri_save_n_case (dest_len, limits, dest_enc, str, uni_utf16, len); case uni_utf32: return ustri_save_n_case (dest_len, limits, dest_enc, str, uni_utf32, len); case uni_bogus32: return ustri_save_n_case (dest_len, limits, dest_enc, str, uni_bogus32, len); case uni_utf16be: return ustri_save_n_case (dest_len, limits, dest_enc, str, uni_utf16be, len); case uni_utf32be: return ustri_save_n_case (dest_len, limits, dest_enc, str, uni_utf32be, len); case uni_bogus32be: return ustri_save_n_case (dest_len, limits, dest_enc, str, uni_bogus32be, len); case uni_utf16le: return ustri_save_n_case (dest_len, limits, dest_enc, str, uni_utf16le, len); case uni_utf32le: return ustri_save_n_case (dest_len, limits, dest_enc, str, uni_utf32le, len); case uni_bogus32le: return ustri_save_n_case (dest_len, limits, dest_enc, str, uni_bogus32le, len); } } #if 0 ustri_cmp () ustri_cmp_n () ustri_casecmp () ustri_casecmp_n () #endif /* tag: Tom Lord Wed May 19 09:41:53 2004 (ustr-inline.c) */ tla-1.3.5+dfsg/src/hackerlab/strings/ustr.h0000644000175000017500000001777710457621774017337 0ustar useruser/* ustr.h: * **************************************************************** * Copyright (C) 2004 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__CHAR__USTR_H #define INCLUDE__CHAR__USTR_H #include "hackerlab/unicode/unicode.h" struct ustr_codevalue_index { ssize_t cv; }; typedef struct ustr_codevalue_index ustr_cv_index_t; struct ustr_codepoint_index { ssize_t cp; }; typedef struct ustr_codepoint_index ustr_cp_index_t; enum ustr_length_type { ustr_null_terminated, ustr_coding_value_length, ustr_codepoint_length }; enum ustr_set_type { ustr_over, ustr_fit, ustr_shift }; /* automatically generated __STDC__ prototypes */ extern ustr_cv_index_t ustr_cv_index (ssize_t n); extern ustr_cp_index_t ustr_cp_index (ssize_t n); extern size_t ustr_cv_index_to_scanner_index (enum uni_encoding_scheme enc, ustr_cv_index_t n); extern ustr_cv_index_t ustr_scanner_index_to_cv_index (enum uni_encoding_scheme enc, size_t n); extern uni_string ustr_cv_offset (uni_string str, enum uni_encoding_scheme enc, ustr_cv_index_t n); extern uni_string ustr_cv_offset_n (ustr_cv_index_t * new_length, uni_string str, enum uni_encoding_scheme enc, ustr_cv_index_t len, ustr_cv_index_t n); extern t_unicode ustr_scan (uni_string * str_after, uni_string str, enum uni_encoding_scheme enc); extern ustr_cv_index_t ustr_str_subtract (uni_string a, uni_string b, enum uni_encoding_scheme enc); extern t_unicode ustr_scan_n (uni_string * str_after, ustr_cv_index_t * len_after, uni_string str, enum uni_encoding_scheme enc, ustr_cv_index_t length); extern int ustr_put (uni_string * str_after, uni_string str, enum uni_encoding_scheme enc, t_unicode c, enum ustr_set_type set_type); extern int ustr_put_n (uni_string * str_after, ustr_cv_index_t * len_after, uni_string str, enum uni_encoding_scheme enc, ustr_cv_index_t len, t_unicode c, enum ustr_set_type set_type); extern t_unicode ustr_cv_ref (ustr_cv_index_t * index_after, uni_string str, enum uni_encoding_scheme enc, ustr_cv_index_t index); extern t_unicode ustr_cv_ref_n (ustr_cv_index_t * index_after, uni_string str, enum uni_encoding_scheme enc, ustr_cv_index_t len, ustr_cv_index_t index); extern int ustr_cv_set (ustr_cv_index_t * index_after, uni_string str, enum uni_encoding_scheme enc, ustr_cv_index_t index, t_unicode c, enum ustr_set_type set_type); extern int ustr_cv_set_n (ustr_cv_index_t * index_after, ustr_cv_index_t * len_after, uni_string str, enum uni_encoding_scheme enc, ustr_cv_index_t len, ustr_cv_index_t index, t_unicode c, enum ustr_set_type set_type); extern uni_string ustr_cp_offset (uni_string str, enum uni_encoding_scheme enc, ustr_cp_index_t n); extern uni_string ustr_cp_offset_n (uni_string str, enum uni_encoding_scheme enc, ustr_cv_index_t len, ustr_cp_index_t n); extern ustr_cv_index_t ustr_lengths (ustr_cp_index_t * cp_length, enum uni_encoding_scheme * fw_enc, uni_string str, enum uni_encoding_scheme enc); extern ustr_cv_index_t ustr_lengths_n (ustr_cp_index_t * cp_length, enum uni_encoding_scheme * fw_enc, uni_string str, enum uni_encoding_scheme enc, ustr_cv_index_t len); extern ustr_cv_index_t ustr_cv_length (uni_string str, enum uni_encoding_scheme enc); extern ustr_cv_index_t ustr_cv_length_in_encoding (enum uni_encoding_scheme dest_enc, uni_string str, enum uni_encoding_scheme enc); extern ustr_cv_index_t ustr_cv_length_in_encoding_n (enum uni_encoding_scheme dest_enc, uni_string str, enum uni_encoding_scheme enc, ustr_cv_index_t len); extern ustr_cp_index_t ustr_cp_length (enum uni_encoding_scheme * fw_enc, uni_string str, enum uni_encoding_scheme enc); extern ustr_cp_index_t ustr_cp_length_n (enum uni_encoding_scheme * fw_enc, uni_string str, enum uni_encoding_scheme enc, ustr_cv_index_t len); extern uni_string ustr_copy (uni_string dest, enum uni_encoding_scheme dest_enc, uni_string str, enum uni_encoding_scheme enc); extern uni_string ustr_copy_n (uni_string dest, enum uni_encoding_scheme dest_enc, ustr_cv_index_t dest_len, uni_string str, enum uni_encoding_scheme enc, ustr_cv_index_t len); extern uni_string ustr_cat (uni_string dest, enum uni_encoding_scheme dest_enc, uni_string str, enum uni_encoding_scheme enc); extern uni_string ustr_cat_n (uni_string dest, enum uni_encoding_scheme dest_enc, ustr_cv_index_t dest_len, uni_string str, ustr_cv_index_t len, enum uni_encoding_scheme enc); extern uni_string ustr_save (alloc_limits limits, enum uni_encoding_scheme dest_enc, uni_string str, enum uni_encoding_scheme enc); extern uni_string ustr_save_n_case (ustr_cv_index_t * dest_len, alloc_limits limits, enum uni_encoding_scheme dest_enc, uni_string str, enum uni_encoding_scheme enc, ustr_cv_index_t len); extern uni_string ustr_save_n (ustr_cv_index_t * dest_len, alloc_limits limits, enum uni_encoding_scheme dest_enc, uni_string str, enum uni_encoding_scheme enc, ustr_cv_index_t len); #endif /* INCLUDE__CHAR__USTR_H */ /* tag: Tom Lord Thu Jan 1 13:54:58 2004 (ustr.h) */ tla-1.3.5+dfsg/src/hackerlab/libhackerlab/0000755000175000017500000000000010457621774017060 5ustar userusertla-1.3.5+dfsg/src/hackerlab/libhackerlab/libhackerlab.doc0000644000175000017500000000624410457621774022160 0ustar useruser/**************************************************************** *(book "libhackerlab" * :subtitles ("The Hackerlab C Library" * "for libhackerlab version 1.0" * "" * "visit the Hackerlab at www.regexps.com") * :authors ("Thomas Lord") * :one-line-summary "" * :keywords ("C" * "library") * :copyright-years (1998 1999 2000 2001 2002 2003) * :copyright "Thomas Lord" * :publisher #f * :home-page-link "The Hackerlab at regexps.com" * :contains ("-lhackerlab" * "A Bigger Picture" * "Handling Bugs" * "Machine-Specific Definitions" * "Low-level Memory Management" * "Arrays" * "Bitsets" * "Hashing" * "Splay Trees" * "Eight-bit Characters and Strings" * "Converting Between Numbers and Strings" * "Unicode" * "ustr_ -- Low Level Unicode Strings" * ; "XML Support" * "Posix Regexps" * "XML Regular Expressions" * "Tuning Posix Regexp and XML Regular Expression Performance" * "A Virtual Unix File-System Interface" * "VU Native File System Access" * "A VU Name Handler for Standard Input and Output" * "A VU Handler for the URL File-Descriptor Scheme" * "A VU Handler for the URL Socket Scheme" * "Buffered File Descriptors" * "Reserved File Descriptors and Pseudo-Descriptors" * "Virtual Null File Descriptors" * "Formatted Printing With printfmt" * "VU Utilities" * "An Errorless Front-end to the VU File-system Interface" * "File-name Manipulation Functions" * "Parsing Command-line Options" * ; "PIW -- Debugging With Program Instrumentation" * ; "PIW Malloc Instrumentation" * ; "Using PIW Malloc With Write Barriers" * #f * "An Absurdly Brief Introduction to Unicode" * "An Introduction to Posix Regexps" * "An Introduction to XML Regular Expressions" * "Comments on the XML Schema Regular Expression Syntax" * #f * "Naming Conventions in the Hackerlab C Library" * "Portability Assumptions in the Hackerlab C Library" * "Data Sheet for the Hackerlab Rx Posix Regexp Functions" * "Data Sheet for the Hackerlab Rx XML Regular Expression Matcher" * "Data Sheet for the Hackerlab Unicode Database" * #f * "The GNU Free Documentation License" * "The GNU General Public License" * #f * "On Hacking" * #f * "Indexes") * * :permissions ("Permission is granted to copy, distribute and/or modify this document" * "under the terms of the GNU Free Documentation License, Version 1.1" * "or any later version published by the Free Software Foundation;" * "with the Invariant Sections being:" * "" * " On Hacking" * "" * "with the Front-Cover Texts being" * "" * " \"visit www.regexps.com\"," * "" * "and with the Back-Cover Texts being" * "" * " (none)." * "" * "A copy of the license is included in the section entitled \"GNU" * "Free Documentation License\".")) * */ /* tag: Tom Lord Tue Dec 4 14:57:13 2001 (libhackerlab.doc) */ tla-1.3.5+dfsg/src/hackerlab/libhackerlab/document-license.doc0000644000175000017500000004365710457621774023024 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:57:12 2001 (document-license.doc) */ /************************************************************************ *(h0 "The GNU Free Documentation License" * :appendix) * * insert*/ GNU Free Documentation License Version 1.1, March 2000 Copyright (C) 2000 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. 0. PREAMBLE The purpose of this License is to make a manual, textbook, or other written document "free" in the sense of freedom: to assure everyone the effective freedom to copy and redistribute it, with or without modifying it, either commercially or noncommercially. Secondarily, this License preserves for the author and publisher a way to get credit for their work, while not being considered responsible for modifications made by others. This License is a kind of "copyleft", which means that derivative works of the document must themselves be free in the same sense. It complements the GNU General Public License, which is a copyleft license designed for free software. We have designed this License in order to use it for manuals for free software, because free software needs free documentation: a free program should come with manuals providing the same freedoms that the software does. But this License is not limited to software manuals; it can be used for any textual work, regardless of subject matter or whether it is published as a printed book. We recommend this License principally for works whose purpose is instruction or reference. 1. APPLICABILITY AND DEFINITIONS This License applies to any manual or other work that contains a notice placed by the copyright holder saying it can be distributed under the terms of this License. The "Document", below, refers to any such manual or work. Any member of the public is a licensee, and is addressed as "you". A "Modified Version" of the Document means any work containing the Document or a portion of it, either copied verbatim, or with modifications and/or translated into another language. A "Secondary Section" is a named appendix or a front-matter section of the Document that deals exclusively with the relationship of the publishers or authors of the Document to the Document's overall subject (or to related matters) and contains nothing that could fall directly within that overall subject. (For example, if the Document is in part a textbook of mathematics, a Secondary Section may not explain any mathematics.) The relationship could be a matter of historical connection with the subject or with related matters, or of legal, commercial, philosophical, ethical or political position regarding them. The "Invariant Sections" are certain Secondary Sections whose titles are designated, as being those of Invariant Sections, in the notice that says that the Document is released under this License. The "Cover Texts" are certain short passages of text that are listed, as Front-Cover Texts or Back-Cover Texts, in the notice that says that the Document is released under this License. A "Transparent" copy of the Document means a machine-readable copy, represented in a format whose specification is available to the general public, whose contents can be viewed and edited directly and straightforwardly with generic text editors or (for images composed of pixels) generic paint programs or (for drawings) some widely available drawing editor, and that is suitable for input to text formatters or for automatic translation to a variety of formats suitable for input to text formatters. A copy made in an otherwise Transparent file format whose markup has been designed to thwart or discourage subsequent modification by readers is not Transparent. A copy that is not "Transparent" is called "Opaque". Examples of suitable formats for Transparent copies include plain ASCII without markup, Texinfo input format, LaTeX input format, SGML or XML using a publicly available DTD, and standard-conforming simple HTML designed for human modification. Opaque formats include PostScript, PDF, proprietary formats that can be read and edited only by proprietary word processors, SGML or XML for which the DTD and/or processing tools are not generally available, and the machine-generated HTML produced by some word processors for output purposes only. The "Title Page" means, for a printed book, the title page itself, plus such following pages as are needed to hold, legibly, the material this License requires to appear in the title page. For works in formats which do not have any title page as such, "Title Page" means the text near the most prominent appearance of the work's title, preceding the beginning of the body of the text. 2. VERBATIM COPYING You may copy and distribute the Document in any medium, either commercially or noncommercially, provided that this License, the copyright notices, and the license notice saying this License applies to the Document are reproduced in all copies, and that you add no other conditions whatsoever to those of this License. You may not use technical measures to obstruct or control the reading or further copying of the copies you make or distribute. However, you may accept compensation in exchange for copies. If you distribute a large enough number of copies you must also follow the conditions in section 3. You may also lend copies, under the same conditions stated above, and you may publicly display copies. 3. COPYING IN QUANTITY If you publish printed copies of the Document numbering more than 100, and the Document's license notice requires Cover Texts, you must enclose the copies in covers that carry, clearly and legibly, all these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover. Both covers must also clearly and legibly identify you as the publisher of these copies. The front cover must present the full title with all words of the title equally prominent and visible. You may add other material on the covers in addition. Copying with changes limited to the covers, as long as they preserve the title of the Document and satisfy these conditions, can be treated as verbatim copying in other respects. If the required texts for either cover are too voluminous to fit legibly, you should put the first ones listed (as many as fit reasonably) on the actual cover, and continue the rest onto adjacent pages. If you publish or distribute Opaque copies of the Document numbering more than 100, you must either include a machine-readable Transparent copy along with each Opaque copy, or state in or with each Opaque copy a publicly-accessible computer-network location containing a complete Transparent copy of the Document, free of added material, which the general network-using public has access to download anonymously at no charge using public-standard network protocols. If you use the latter option, you must take reasonably prudent steps, when you begin distribution of Opaque copies in quantity, to ensure that this Transparent copy will remain thus accessible at the stated location until at least one year after the last time you distribute an Opaque copy (directly or through your agents or retailers) of that edition to the public. It is requested, but not required, that you contact the authors of the Document well before redistributing any large number of copies, to give them a chance to provide you with an updated version of the Document. 4. MODIFICATIONS You may copy and distribute a Modified Version of the Document under the conditions of sections 2 and 3 above, provided that you release the Modified Version under precisely this License, with the Modified Version filling the role of the Document, thus licensing distribution and modification of the Modified Version to whoever possesses a copy of it. In addition, you must do these things in the Modified Version: A. Use in the Title Page (and on the covers, if any) a title distinct from that of the Document, and from those of previous versions (which should, if there were any, be listed in the History section of the Document). You may use the same title as a previous version if the original publisher of that version gives permission. B. List on the Title Page, as authors, one or more persons or entities responsible for authorship of the modifications in the Modified Version, together with at least five of the principal authors of the Document (all of its principal authors, if it has less than five). C. State on the Title page the name of the publisher of the Modified Version, as the publisher. D. Preserve all the copyright notices of the Document. E. Add an appropriate copyright notice for your modifications adjacent to the other copyright notices. F. Include, immediately after the copyright notices, a license notice giving the public permission to use the Modified Version under the terms of this License, in the form shown in the Addendum below. G. Preserve in that license notice the full lists of Invariant Sections and required Cover Texts given in the Document's license notice. H. Include an unaltered copy of this License. I. Preserve the section entitled "History", and its title, and add to it an item stating at least the title, year, new authors, and publisher of the Modified Version as given on the Title Page. If there is no section entitled "History" in the Document, create one stating the title, year, authors, and publisher of the Document as given on its Title Page, then add an item describing the Modified Version as stated in the previous sentence. J. Preserve the network location, if any, given in the Document for public access to a Transparent copy of the Document, and likewise the network locations given in the Document for previous versions it was based on. These may be placed in the "History" section. You may omit a network location for a work that was published at least four years before the Document itself, or if the original publisher of the version it refers to gives permission. K. In any section entitled "Acknowledgements" or "Dedications", preserve the section's title, and preserve in the section all the substance and tone of each of the contributor acknowledgements and/or dedications given therein. L. Preserve all the Invariant Sections of the Document, unaltered in their text and in their titles. Section numbers or the equivalent are not considered part of the section titles. M. Delete any section entitled "Endorsements". Such a section may not be included in the Modified Version. N. Do not retitle any existing section as "Endorsements" or to conflict in title with any Invariant Section. If the Modified Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no material copied from the Document, you may at your option designate some or all of these sections as invariant. To do this, add their titles to the list of Invariant Sections in the Modified Version's license notice. These titles must be distinct from any other section titles. You may add a section entitled "Endorsements", provided it contains nothing but endorsements of your Modified Version by various parties--for example, statements of peer review or that the text has been approved by an organization as the authoritative definition of a standard. You may add a passage of up to five words as a Front-Cover Text, and a passage of up to 25 words as a Back-Cover Text, to the end of the list of Cover Texts in the Modified Version. Only one passage of Front-Cover Text and one of Back-Cover Text may be added by (or through arrangements made by) any one entity. If the Document already includes a cover text for the same cover, previously added by you or by arrangement made by the same entity you are acting on behalf of, you may not add another; but you may replace the old one, on explicit permission from the previous publisher that added the old one. The author(s) and publisher(s) of the Document do not by this License give permission to use their names for publicity for or to assert or imply endorsement of any Modified Version. 5. COMBINING DOCUMENTS You may combine the Document with other documents released under this License, under the terms defined in section 4 above for modified versions, provided that you include in the combination all of the Invariant Sections of all of the original documents, unmodified, and list them all as Invariant Sections of your combined work in its license notice. The combined work need only contain one copy of this License, and multiple identical Invariant Sections may be replaced with a single copy. If there are multiple Invariant Sections with the same name but different contents, make the title of each such section unique by adding at the end of it, in parentheses, the name of the original author or publisher of that section if known, or else a unique number. Make the same adjustment to the section titles in the list of Invariant Sections in the license notice of the combined work. In the combination, you must combine any sections entitled "History" in the various original documents, forming one section entitled "History"; likewise combine any sections entitled "Acknowledgements", and any sections entitled "Dedications". You must delete all sections entitled "Endorsements." 6. COLLECTIONS OF DOCUMENTS You may make a collection consisting of the Document and other documents released under this License, and replace the individual copies of this License in the various documents with a single copy that is included in the collection, provided that you follow the rules of this License for verbatim copying of each of the documents in all other respects. You may extract a single document from such a collection, and distribute it individually under this License, provided you insert a copy of this License into the extracted document, and follow this License in all other respects regarding verbatim copying of that document. 7. AGGREGATION WITH INDEPENDENT WORKS A compilation of the Document or its derivatives with other separate and independent documents or works, in or on a volume of a storage or distribution medium, does not as a whole count as a Modified Version of the Document, provided no compilation copyright is claimed for the compilation. Such a compilation is called an "aggregate", and this License does not apply to the other self-contained works thus compiled with the Document, on account of their being thus compiled, if they are not themselves derivative works of the Document. If the Cover Text requirement of section 3 is applicable to these copies of the Document, then if the Document is less than one quarter of the entire aggregate, the Document's Cover Texts may be placed on covers that surround only the Document within the aggregate. Otherwise they must appear on covers around the whole aggregate. 8. TRANSLATION Translation is considered a kind of modification, so you may distribute translations of the Document under the terms of section 4. Replacing Invariant Sections with translations requires special permission from their copyright holders, but you may include translations of some or all Invariant Sections in addition to the original versions of these Invariant Sections. You may include a translation of this License provided that you also include the original English version of this License. In case of a disagreement between the translation and the original English version of this License, the original English version will prevail. 9. TERMINATION You may not copy, modify, sublicense, or distribute the Document except as expressly provided for under this License. Any other attempt to copy, modify, sublicense or distribute the Document is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 10. FUTURE REVISIONS OF THIS LICENSE The Free Software Foundation may publish new, revised versions of the GNU Free Documentation License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. See http://www.gnu.org/copyleft/. Each version of the License is given a distinguishing version number. If the Document specifies that a particular numbered version of this License "or any later version" applies to it, you have the option of following the terms and conditions either of that specified version or of any later version that has been published (not as a draft) by the Free Software Foundation. If the Document does not specify a version number of this License, you may choose any version ever published (not as a draft) by the Free Software Foundation. ADDENDUM: How to use this License for your documents To use this License in a document you have written, include a copy of the License in the document and put the following copyright and license notices just after the title page: Copyright (c) YEAR YOUR NAME. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; with the Invariant Sections being LIST THEIR TITLES, with the Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST. A copy of the license is included in the section entitled "GNU Free Documentation License". If you have no Invariant Sections, write "with no Invariant Sections" instead of saying which ones are invariant. If you have no Front-Cover Texts, write "no Front-Cover Texts" instead of "Front-Cover Texts being LIST"; likewise for Back-Cover Texts. If your document contains nontrivial examples of program code, we recommend releasing these examples in parallel under your choice of free software license, such as the GNU General Public License, to permit their use in free software. /*end-insert */ tla-1.3.5+dfsg/src/hackerlab/libhackerlab/prefixes.doc0000644000175000017500000000645710457621774021410 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:57:14 2001 (prefixes.doc) */ /************************************************************************ *(h0 "Naming Conventions in the Hackerlab C Library" * :appendix) * * This appendix describes the naming conventions used in the Hackerlab C library. */ /*(menu) */ /************************************************************************ *(h1 "C Identifiers and Macros") * C identifiers and macro names are divided into categories related by functionality. For each category, a unique "category stub" is chosen which is an alphanumeric string. If a category has the stub `STUB', most names in that category begin with the string `STUB_'. In some cases, the name `STUB' is used as an identifier by itself. If `STUB' is the name of a data structure, there may be functions named `make_STUB' and `free_STUB'. For some data types, a `sizeof_STUB' macro is defined. Case distinctions do not matter: a stub may be used with any combination of upper and lowercase letters. If a name is publicly visible, but is not intended to be used outside of the implementation of the Hackerlab C Library, it is given a prefix of the form `STUB__'. The stubs currently in use are: ar dynamically sized arrays bits shared bitset trees bits_tree bitset trees bitset flat bitsets char manipulating 8-bit characters cvt number/string conversions errno manipulating error codes file_name manipulating file names hash computing hash values hashtree the hashtree data structure invariant testing invariants lim limited allocation mem manipulating arrays of bytes MACHINE machine-specific parameters must errorless allocation opt command line option processing panic aborting programs path manipulating directory search paths piw the Program Instrumentation Workbench pow2_array power-or-two sized sparse arrays printfmt formatted I/O reserv reserved file descriptors rx regexp pattern matching safe errorless I/O functions str manipulating ISO 8859-1 strings t fundamental typedefs (e.g. `t_uint8') uni foundational Unicode support unidata the Unicode character database url url-based virtual file systems vfdbuf descriptor-based buffered I/O vu virtual descriptor-based i/o xml XML utilities There are also some exceptions. Some versions of the library export the Posix.2 interface for regexp pattern matching (`regcomp', `regexec' etc.). Some versions of the library export standard interfaces for memory allocation (`malloc', `free', etc.). */ /************************************************************************ *(h1 "Header Files") * Hackerlab C Library header files are always named by two directories and a file name, as in this example: Every public header file can be included by itself -- without having to include any other header file first. Some Hackerlab header files have the effect of including other Hackerlab header files. Every Hackerlab header file may be safely included more than once. A CPP macro beginning with `INCLUDE__' is used to protect the contents of each header file from being interpreted more than once. For example, the header `' contains: #ifndef INCLUDE__MACHINE__TYPES_H #define INCLUDE__MACHINE__TYPES_H ... #endif /* INCLUDE__MACHINE__TYPES_H */ * */ tla-1.3.5+dfsg/src/hackerlab/libhackerlab/source-license.doc0000644000175000017500000004442110457621774022474 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:57:13 2001 (source-license.doc) */ /************************************************************************ *(h0 "The GNU General Public License" * :appendix) * * insert*/ The Hackerlab C Library is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation (and reproduced below). This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License (reproduced below) for more details. GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License. /*end-insert */ tla-1.3.5+dfsg/src/hackerlab/libhackerlab/portability.doc0000644000175000017500000000411210457621774022107 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:57:13 2001 (portability.doc) */ /************************************************************************ *(h0 "Portability Assumptions in the Hackerlab C Library" * :appendix) * * The `makefiles' used to compile the library are specific to *GNU Make*, available from the Free Software Foundation (url:"http://www.gnu.org"). The implementation of the Hackerlab C Library is written to make conservative use of standard C and Posix and opportunistic use of the advanced features of GNU C. It should compile cleanly using nearly any ANSI C compiler in nearly any environment that claims to be (substantially) conformant to the *Posix.2* standard (*ISO/IEC 994502: 1993 (ANSI/IEEE Std 1003.2 - 1992*). If compiled with a GNU C compiler, the implementation will take advantage of some non-portable features such as function in-lining -- but this is strictly optional. The Hackerlab C library is written with a few assumptions that are true in many but not all implementations of C: \0./ Values of type `char' and of type `unsigned char' are 8-bit values. \1./ All character code points refer to Unicode characters. For code points in the range {0..255} (including character constants in C programs), this is compatible with ISO 8859-1. For code points in the range {0..127}, this is compatible with ASCII. There is one exception to this rule. The library exports regexp matching functions which are compatible with the Posix.2 specification. Those functions should operate correctly with any character encoding in the ISO 8859 family. (However, only ISO-8859-1 is used in our test suite.) \2./ {sizeof (long) == 4 or 8} \3./ {sizeof (void *) == 4 or 8} \4./ It is safe to cast between pointers and long integers. In other words, after this code: unsigned long x; unsigned long y; void * p; void * r; ... x = (unsigned long)p; r = (void *)x; this is true: r == p and similarly, after: p = (void *)x; y = (unsigned long)p; this is true: x == y Strictly speaking, this is a stronger requirement than simply: sizeof (long) == sizeof (void *) * */ tla-1.3.5+dfsg/src/hackerlab/libhackerlab/on-hacking.doc0000644000175000017500000000542510457621774021573 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:57:14 2001 (on-hacking.doc) */ /************************************************************************ *(h0 "On Hacking" :appendix) Oh, do not ask, "What is it?" Let us go and make our visit. -- T.S. Eliot, The Love Song of J. Alfred Prufrock Shall I spell out the perfect architecture for our software? Predict the form of what we'll build? Construct a fictional schedule and a list of milestones? Prepare a glossy presentation outlining all the planned features? Magically forecast the size of markets and our share? Foretell our winning marketing strategy? Calculate ROI over a three year period to an impossible precision? Or shall we speak of truth? Hacking In nightclubs, living rooms, computer labs at midnight, Over meals and after shows, when sprinklers come on at 3AM Fresh, strung out; sober, tripping We have talked and talked, experimented, lived, as beautiful ideas took hold of our bodies and led them here ``Yes -- it will work like this.'' ``And like that too.'' And we should build it this way: without pain without a master plan by feel and feedback informed by knowledge and joy and life After all: _That_ is how the ancestors worked And off we went. Into academia. Into the industry. Each with hopes of making real our portion of the good ideas. Has it worked so far? Intellegence, perspective, and initiative have become de-valued qualities in programmers; thoughtlessness and rapidity at filling out mediocre code templates have aquired a high market value. Even ``new'' approaches to computing, for example Linux, are aimed more at reimplementing what has already been done than at informed innovation and exploration. Many of the best hackers find that there is neither commercial nor academic support for autonomy and sustained work on long term projects. When conditions arise that enable someone to carefully design an elegant tool or a beautiful piece of computing art, those conditions are typically unstable and the result of a very rare accident. Cynicism and resignation have become our survival skills. We think this industry stinks. I saw the best minds of my generation destroyed by madness, starving hysterical naked, dragging themselves through the negro streets at dawn looking for an angry fix, angelheaded hipsters burning for the ancient heavenly connection to the starry dynamo in the machin- ery of night, who poverty and tatters and hollow-eyed and high sat up smoking in the supernatural darkness of cold-water flats floating across the tops of cities contemplating jazz -- A. Ginsburg, Howl Let's fix things, shall we? */ tla-1.3.5+dfsg/src/hackerlab/libhackerlab/bigpic.doc0000644000175000017500000001226610457621774021013 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:57:13 2001 (bigpic.doc) */ /************************************************************************ *(h0 "A Bigger Picture") * Here's a larger perspective on some of the motivations for the Hackerlab C library: insert*/ Date: Fri, 27 Jul 2001 23:43:50 -0700 (PDT) From: Tom Lord To: gcc@gcc.gnu.org Subject: a .NET alternative (GJC et al) This note is about Free Software implementations of high-level programming languages, including Java and Scheme. It think it pertains to GJC, and more generally, to the strategic direction of all of our language implementations. At the end of the note there is a project announcement, requesting participation and support. The note begins with some background and motivation. I think it is widely recognized, nowadays, that a good approach to implementing high level languages is to build a common run-time system on which they run. The run-time system provides the low-level functionality these languages have in common, and is a foundation upon which interoperability between languages can be built. It seems to me that Microsoft has come to some similar conclusions, as evidenced by their inventing and committing to a low level language that is designed with precise garbage collection in mind (C#), and using that language to implement a run-time system supporting multiple languages. Good for Microsoft! I'm concerned about the run-time systems we currently use. Here are two reasons that indicate some of my thinking: (1) we seem to have systems that rely on conservative garbage collectors, which makes these implementations needlessly unreliable; (2) we don't seem to have any projects to build a common run-time system, designed to support several languages (we have Guile, designed to be a multi-lingual Scheme, but that's not quite the same thing). It seems to me that there is now an opportunity and some choices for the Open Source community. The opportunity is to build a new Free Software run-time system, providing a precise collector, and support for multiple languages. The choices are (1) whether to re-implement the specifications offered by Microsoft, or try to implement something better, and (2) whether to tie the implementation of a new run time system to a specific compiler (GCC, presumably) or try to build something more portable. The unofficial strategy of the Open Source community seems to be, in the always-immortal words of Yogi Berra, "When you come to a fork in the road, take it." Thus, for example, we've already seen Java implementors carve out distinct regions of the implementation design space, resulting in a pleasing choice of Java implementations for users. There have been announcements in the news recently about the possibility of building an Open Source clone of C# and .NET. That's one branch of the fork, and one that is practically guaranteed to find commercial support. I'm not terribly familiar with C#, but what little I've read looked like a respectable design. So if part of the Open Source community commits to that branch of the fork, I'd bet they'll meet with some form of success. But I've always thought that Free Software was about more than just cloning Microsoft software. I like to believe that Free Software is also about creatively exploring new ideas and having the kind of fun that comes from trying to build something "better". So I'm interested in a different branch of the run-time system design space. In particular, I've been working towards a run-time system in C, not C#, supporting multiple high level languages, and providing a a precise garbage collector (along with lots of other nice features). My intention is to build a portable implementation, not tied to any particular compiler. I have a foundation for my proposed run-time system: it's called the Hackerlab C library, and its available at www.regexps.com. There's a long way to go, but I think the foundation has several good ideas, implemented and tested well. In addition to the code that's there, I have some pretty clear ideas about what else needs to be built: how to add thread support, how to build up the Unicode support, what kinds of data structures, and how to finish the I/O subsystem. I have less clear ideas, and think a little bit of experimentation is in order, about what kind of C interface to provide to the garbage collector, and how to support binary object externalization (for persistence and migration of objects). So if you're interested in high level language implementations, such as GJC, please have a look at my web site. There are some initial suggestions for how to participate which you can find in the Hackerlab C Library reference manual, though if the project really takes off, we'll clearly need to make participation more open and more formal. I also need some money to work on this project -- badly. My web site implements a form of the "street performer protocol", and that is one way to help fund further development. I'm also happy to discuss employment and consulting opportunities that might be out there. Thanks for your attention, happy hacking, peace, love, and penguins, fondest regards, over and out, your eccentric and always friendly Internet pal, Tom Lord /*end-insert */ tla-1.3.5+dfsg/src/hackerlab/libhackerlab/Makefile.in0000644000175000017500000000267010457621774021132 0ustar useruser the-pdml-index := libhackerlab.pdml-index texi-main := libhackerlab.texi other-documentation := ../bugs/bugs.doc \ ../machine/machine.doc \ ../mem/memory.doc \ ../cmd/opt.c \ ../bitsets/bitsets.doc \ ../rx-posix/posix-regexps.doc \ ../rx-posix/introduction-to-regexps.doc \ ../rx-posix/rx-posix-data-sheet.doc \ ../rx/tuning.doc \ ../hash/hashing.doc \ ../arrays/arrays.doc \ ../char/character-and-string.doc \ ../strings/ustr.c \ ../fmt/conversions.doc \ ../fs/file-names.c \ ../splay/splay.doc \ ../vu/vu.c \ ../vu/printfmt.c \ ../vu/reserv.c \ ../vu/safe.c \ ../vu/url-fd.c \ ../vu/vfdbuf.c \ ../vu/vu-dash.c \ ../vu/vu-sys.c \ ../vu/vu-utils.c \ ../vu/vu-virtual-null.c \ ../vu-network/url-socket.c \ ../unicode/unicode.doc \ ../unicode/introduction-to-unicode.doc \ ../unidata/unidata-data-sheet.doc \ ../rx-xml/xml-re.doc \ ../rx-xml/introduction-to-xml-re.doc \ ../rx-xml/comments.doc \ ../rx-xml/rx-xml-data-sheet.doc # ../piw/instrumentation.doc \ # ../piw-malloc/piw-malloc.doc \ # ../piw-malloc/write-barriers.c otherdirs := $(hackerlab_dirs) include $(makefiles)/library.mk include $(makefiles)/library-ps.mk include $(makefiles)/library-html.mk ifeq ($(cgs__install_hackerlab),1) include $(makefiles)/install-library.mk endif # tag: Tom Lord Tue Dec 4 14:52:08 2001 (libhackerlab/Makefile.in) # tla-1.3.5+dfsg/src/hackerlab/libhackerlab/introduction.doc0000644000175000017500000001045710457621774022277 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:57:13 2001 (introduction.doc) */ /************************************************************************ *(h0 "-lhackerlab") * The Hackerlab C Library is a general purpose library for C programs running in Posix compatible environments. Development of the library is ongoing. */ /*(h1 "Why a New C Library?") Paradise is exactly like where you are right now, only much, much, BETTER. Laurie Anderson The standard C library was never designed. It simply ``happened'', in several stages. As nearly as I can tell, it started off as a collection of routines needed to write the very first unix shell tools. Some good coding habits developed around this time (keeping interfaces simple, for example). There are little flashes of systematic design, but no sign of a sustained effort to think through what should be in a clean and complete C library -- I guess they were too busy inventing `grep' and such. Then, as Unix spread, the C library grew. BSD hackers added a bunch of functions, for example. Still, nobody sat down to make it a nicely designed library. Standards came along, and they (mostly) tried to codify the C library that already existed. Nowadays, people take the C library for granted. That's a shame, because if you have a nicer library, the programs that use that library are likely to be simpler, more powerful, and more correct. That's where `libhackerlab' comes in. The goal is to completely replace all of libc, except for very system dependent parts, such as system call interfaces. In replacing libc, we want to build something much, much, BETTER. We want a more complete selection of functions, with clearer names, and more consistent interfaces. Whenever possible, we want greater generality. */ /*(h1 "Status") Some parts of `libhackerlab' are reasonably complete, tested, and stable. Others are less so. We've tried to make clear in this manual which parts are which. */ /*(h1 "Contributing") Write to `hackerlab@regexps.com' if you have something to contribute. Here are some suggestions for what volunteers might do: Help With Porting Recently, we've only been testing the library on one BSD-based platform. It should be easy to port to other varieties of unix. Work on test cases. We use lots and lots of unit tests for this code. Some subsystems are lacking unit tests. That's very bad. Work on data sheets. We like to write a data sheet for every major subsystem of the library. Data sheets should describe the subsystem: its recommended uses; situations in which not to use it; the size of the code; the performance of the code, etc. You can see some example data sheets at the end of this manual. More are needed. We also need some tools that will keep the data sheets up to date automatically -- currently they are maintained by hand (including cutting and pasting benchmark results, for example). Use it in your programs -- tell us what works and what doesn't. We think the design so far is quite nice, and our experience using the library seems to confirm this, but your milage may vary. Let us know. Contribute New Subsystems to the Library This is a tricky one. In all probability, we won't like your design prejudices or coding style. But heck, give it a try. Work on floating point I/O We need fast and accurate functions for converting between floating point values and strings. We need support for floating point in printfmt. Work on a scanf replacement. We have printfmt, which replaces printf, but we have no replacement yet for scanf. Give us money. Pay a download fee when you grab a copy of libhackerlab -- helps us pay for much needed electrons, rent, food, and other goodies. Generally speaking, getting paid is a precondition of doing more work on Hackerlab software at a reasonable pace. If you want to spend a whole bunch of money, Talk To Us About Our Business Plan. Work for the Hackerlab If you are an excellent Hacker, and you like libhackerlab, and you want to help start a software R&D lab, and you feel like pursuing a long shot -- send us a resume or code samples or something. It helps if you live in the Bay Area of Northern California, USA. (No, we have no paid positions to offer just yet.) */ tla-1.3.5+dfsg/src/hackerlab/libhackerlab/PLUGIN/0000755000175000017500000000000010457621774020056 5ustar userusertla-1.3.5+dfsg/src/hackerlab/libhackerlab/PLUGIN/REQ0000644000175000017500000000003310457621774020424 0ustar useruserlibhackerlab libhackerlab tla-1.3.5+dfsg/src/hackerlab/libhackerlab/indexes.doc0000644000175000017500000000102110457621774021200 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:57:12 2001 (indexes.doc) */ /************************************************************************ *(h0 "Indexes" :unnumbered) * */ /*(menu) */ /************************************************************************ *(h1 "General Index" * :index (general) * :index-for "libhackerlab") */ /************************************************************************ *(h1 "Identifier Index" * :need 8500 * :index (function macro variable type) * :index-for "libhackerlab") */ tla-1.3.5+dfsg/src/hackerlab/cmd/0000755000175000017500000000000010457621774015220 5ustar userusertla-1.3.5+dfsg/src/hackerlab/cmd/opt.c0000644000175000017500000005152710457621774016200 0ustar useruser/* opt.c - command-line option parsing * **************************************************************** * Copyright (C) 1998, 2000 Thomas Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/os/alloca.h" #include "hackerlab/os/stddef.h" #include "hackerlab/os/limits.h" #include "hackerlab/bugs/panic.h" #include "hackerlab/char/char-class.h" #include "hackerlab/char/str.h" #include "hackerlab/mem/mem.h" #include "hackerlab/vu/safe.h" #include "hackerlab/cmd/opt.h" /************************************************************************ *(h0 "Parsing Command-line Options" * :include ("hackerlab/cmd/opt.h")) * * The functions and macros in this chapter provide a convenient and * standard way to parse command line arguments and provide on-line * help for command-line invocation. An example at the end of the * chapter illustrates their use. * * It is important to understand that these functions are designed * to support *consistent* command line interfaces, rather than * *arbitrary* command line interfaces. Consequently, these functions * aren't especially useful for implementing some of the standard Posix * command line syntaxes. * */ /*(menu) */ /*(include-documentation "opt.h") */ /************************************************************************ *(h1 "Parsing Options") * */ /*(c opt_low) * int opt_low (t_uchar * opt_string, * t_uchar * opt_arg, * struct opt_desc ** desc, * struct opt_desc * opts, * int * argcp, * char ** argv, * t_uchar * opt_string_space); * * Return the next command line option and modify argc/argv to * remove that option. * * `opts' should point to an array of `struct opt_desc' whose final * element contains a value less than 0 in the field `opt_value'. * * Ordinarily `opt' returns the `opt_value' field from the element of * `opts' that matches the next argument. If the field `requires_arg' * is not 0, then the option argument is also returned. The option * and its argument are removed from argc/argv. `opt_string' returns * a string naming the option ("-x", "--long-opt" or * "--long-opt=value"). The string returned in `opt_string' may be * overwritten by later calls to `opt'. `opt_arg' returns * the argument to the option, if the argument requires an argument * and one was provided. A string returned in `opt_arg' points to * a string or substring from `argv'. `desc' returns the option * description for the option returned. * * Any of `opt_string', `opt_arg', and `desc' may be 0. * * `opt_string_space' should point to an array of three characters. * If the next option is a short option, the value stored in `*opt_string' * will point to `opt_string_space'. `opt_string_space' may be 0 * if `opt_string' is 0. * * If the option requires an argument but none is provided, `*opt_arg' * is set to 0, and the `opt_value' field of the option is returned; * argc/argv is not modified. To see that an option with required * argument has been correctly provided, it is necessary to check both * the return value of `opt', and the value of `*opt_arg'. This * behavior is to facilitate providing a specific error message to the * user -- to quote POSIX: "option arguments may not be optional". * * If the next argument is not an ordinary option, a value less than 0 * is returned. These special values are given symbolic names in * `opt.h' (`enum opt_return_values'): * * opt_dash -- the next argument is simply "-". * opt_double_dash -- the next argument is simply "--". * * In either case, the argument ("-" or "--") is removed from * argc/argv. * * opt_unknown -- the next argument does not match * any known option. * * opt_bogus_argument -- a recognized long option was * provided with an option argument, * but the option does not accept * an argument. * * opt_none -- the next argument does not begin * with "-". * * In any of those cases, argc/argv is not modified. */ int opt_low (t_uchar ** opt_string, t_uchar ** opt_arg, struct opt_desc ** desc, struct opt_desc * opts, int * argcp, char ** argv, t_uchar * opt_string_space) { int argc; int choice; t_uchar ** argvx; argc = *argcp; argvx = (t_uchar **)argv; if (opt_string) *opt_string = 0; if (opt_arg) *opt_arg = 0; if (desc) *desc = 0; if (argc == 0) return opt_none; if (!argvx[1]) return opt_none; if (argvx[1][0] != '-') return opt_none; if (argvx[1][1] != '-') { /* short option */ if (opt_string) { opt_string_space[0] = '-'; opt_string_space[1] = argvx[1][1]; opt_string_space[2] = 0; *opt_string = opt_string_space; } if (!argvx[1][1]) { opt_shift (argcp, argv); return opt_dash; } for (choice = 0; opts[choice].opt_value >= 0; ++choice) { if (opts[choice].char_name) { if (opts[choice].char_name[0] == argvx[1][1]) { if (desc) *desc = &opts[choice]; if (!opts[choice].requires_arg) { /* character option, no option argument. */ opt_shift_char_option (argcp, argv); return opts[choice].opt_value; } if (argvx[1][2]) { /* character option, with argument, "-xargument". */ if (opt_arg) *opt_arg = argvx[1] + 2; opt_shift (argcp, argv); return opts[choice].opt_value; } if (argc > 2) { /* character option, with argument, "-x argument". */ if (opt_arg) *opt_arg = argvx[2]; opt_shift (argcp, argv); /* shift away "-x" */ opt_shift (argcp, argv); /* shift away "argument" */ return opts[choice].opt_value; } { /* character option, missing argument. */ if (opt_arg) *opt_arg = 0; return opts[choice].opt_value; } } } } /* unrecognized character option */ return opt_unknown; } else { /* long option */ t_uchar * opt_name; t_uchar * opt_end; int opt_length; t_uchar * eq_arg; if (!str_cmp (argvx[1], "--")) { if (opt_string) *opt_string = "--"; opt_shift (argcp, argv); return opt_double_dash; } if (opt_string) *opt_string = argvx[1]; opt_name = argvx[1] + 2; eq_arg = str_chr_index (opt_name, '='); if (eq_arg) opt_end = eq_arg; else opt_end = opt_name + str_length (opt_name); opt_length = opt_end - opt_name; for (choice = 0; opts[choice].opt_value >= 0; ++choice) { t_uchar * spec_end; int spec_length; if (!opts[choice].long_name) continue; spec_end = str_chr_index (opts[choice].long_name, '='); if (!spec_end) spec_end = str_chr_index (opts[choice].long_name, ' '); if (spec_end) spec_length = spec_end - opts[choice].long_name; else spec_length = str_length (opts[choice].long_name); if ( (opt_length <= spec_length) && !str_cmp_n (opt_name, opt_length, opts[choice].long_name, spec_length) && ( (opt_length == spec_length) || char_is_space(opts[choice].long_name[opt_length]) || ('=' == opts[choice].long_name[opt_length]))) { if (desc) *desc = &opts[choice]; if (!opts[choice].requires_arg) { /* long option, no argument expected */ if (eq_arg) { /* command line contained an argument */ return opt_bogus_argument; } opt_shift (argcp, argv); return opts[choice].opt_value; } /* long option, argument expected */ if (eq_arg) { /* --foo=bar */ if (opt_arg) *opt_arg = eq_arg + 1; opt_shift (argcp, argv); return opts[choice].opt_value; } if (argc > 2) { /* --foo bar */ if (opt_arg) *opt_arg = argvx[2]; opt_shift (argcp, argv); opt_shift (argcp, argv); return opts[choice].opt_value; } { /* --foo, missing argument. */ if (opt_arg) *opt_arg = 0; return opts[choice].opt_value; } } } /* unrecognized long option */ return opt_unknown; } } int opt (alloc_limits limits, struct opt_parsed ** parsed_p, struct opt_desc * opts, int * argcp, char ** argv) { t_uchar * opt_string; t_uchar * arg_string; t_uchar arg_string_space[MB_LEN_MAX * 3]; struct opt_desc * desc; int o; struct opt_parsed * parsed; o = opt_low (&opt_string, &arg_string, &desc, opts, argcp, argv, arg_string_space); parsed = (struct opt_parsed *)lim_malloc_contiguous (limits, sizeof (struct opt_parsed), offsetof (struct opt_parsed, opt_string), str_length (opt_string) + 1, offsetof (struct opt_parsed, arg_string), str_length (arg_string) + 1, LIM_END); if (!parsed) return opt_allocation_failure; parsed->opt_value = o; if (!opt_string) parsed->opt_string = 0; else str_cpy (parsed->opt_string, opt_string); if (!arg_string) parsed->arg_string = 0; else str_cpy (parsed->arg_string, arg_string); parsed->desc = desc; if (*parsed_p) lim_free (limits, (void *)*parsed_p); *parsed_p = parsed; return o; } /*(c opt_standard) * int opt_standard (alloc_limits limits, * struct opt_parsed ** parsed_p, * struct opt_desc * opts, * int * argcp, * char * argvp[], * t_uchar * program_name, * t_uchar * usage, * t_uchar * version_string, * t_uchar * long_help, * int help_option, * int long_help_option, * int version_option); * * This function calls `opt', but handles some commonly * implemented options internally, in a standard way. * * The parameters `limits', `parsed_p', `opts', `argcp', * and `argvp' are as to `opt_low'. * * The parameters `program_name', `usage' and `version_string' are * used in error and informational messages printed by this function. * * The parameters `help_option', `long_help_option' and `version_option' * are the `name' value for some standard options, which are * usually given the command line names: * * -h --help help_option * -H long_help_option * -V --version version_option * * If this function detects the `help_option', it prints a * multi-line message summarizing the available options * to standard output and exits the process with a 0 status. * * If this function detects the `long_help_option', it prints a * multi-line message summarizing the available options * to standard output, adds text from `long_help' and exits the * process with a 0 status. The first line of `long_help' should * summarize the command (conventionally uncapitalized and without * punctuation). The rest of `long_help' should expand upon the * explanation. Long help messages are formatted as: * * first line of long_help * usage: program_name .... * option list * * rest of long_help * * If this function detects the `version_option', it prints a * single-line message containing `version_string' * to standard output and exits the process with a 0 status. * * If this function detects an unrecognized option, a missing option * argument, or an argument provided for an option that doesn't accept * arguments, it prints a usage message to standard error and exits * the process with a non-0 status. */ int opt_standard (alloc_limits limits, struct opt_parsed ** parsed_p, struct opt_desc * opts, int * argc, char * argv[], t_uchar * program_name, t_uchar * usage, t_uchar * version_string, t_uchar * long_help, int help_option, int long_help_option, int version_option) { int o; o = opt (limits, parsed_p, opts, argc, argv); if (o == opt_none) return o; if ((*parsed_p)->desc && (*parsed_p)->desc->requires_arg && !(*parsed_p)->arg_string) { safe_printfmt (2, "missing argument for `%s'\n", (*parsed_p)->opt_string); opt_usage (2, argv[0], program_name, usage, 1); panic_exit (); } if (o == help_option) { if (long_help) { t_uchar * nl; nl = str_chr_index (long_help, '\n'); if (nl) { safe_printfmt (1, "%.*s\n", (int)(nl - long_help), long_help); } } opt_usage (1, argv[0], program_name, usage, 0); safe_printfmt (1, "\n"); opt_help (1, opts); safe_printfmt (1, "\n"); exit (0); } if (o == long_help_option) { t_uchar * nl; nl = str_chr_index (long_help, '\n'); if (nl) safe_printfmt (1, "%.*s\n", (int)(nl - long_help), long_help); opt_usage (1, argv[0], program_name, usage, 0); safe_printfmt (1, "\n"); opt_help (1, opts); safe_printfmt (1, "\n"); if (nl) safe_printfmt (1, "%s", nl + 1); else safe_printfmt (1, "%s", long_help); safe_printfmt (1, "\n"); exit (0); } if (o == version_option) { safe_printfmt (1, "%s %s\n", program_name, version_string); exit (0); } if (o == opt_allocation_failure) { panic ("allocation failure while parsing arguments"); } switch (o) { case opt_dash: return o; case opt_double_dash: return o; case opt_unknown: safe_printfmt (2, "unhandled option `%s'\n", argv[1]); opt_usage (2, argv[0], program_name, usage, 1); panic_exit (); case opt_bogus_argument: safe_printfmt (2, "option `%s' does not accept an argument\n", argv[1]); opt_usage (2, argv[0], program_name, usage, 1); panic_exit (); default: if (o < 0) { safe_printfmt (2, "illegal option code %d for `%s'\n", o, argv[1]); panic ("internal error processing options"); } return o; } } /************************************************************************ *(h1 "Printing Help Messages") * */ /*(c opt_usage) * void opt_usage (int fd, * char * argv0, * t_uchar * program_name, * t_uchar * usage, * int suggest_help); * * Print a usage message on `fd' using the format: * * "usage: %s %s\n", program_name, usage * * If `suggest_help' is not 0, also print: * * "try %s --help\n", argv0 * * By convention, `argv0' should be the first command line string * passed to the program (the name by which the program was invoked). * * `program_name' should be the default name for the program (not * necessarily the name by which it was invoked). */ void opt_usage (int fd, char * argv0, t_uchar * program_name, t_uchar * usage, int suggest_help) { safe_printfmt (fd, "usage: %s %s\n", program_name, usage); if (suggest_help) safe_printfmt (fd, "try %s --help\n", argv0); } /*(c opt_help) * void opt_help (int fd, struct opt_desc * opts); * * Print a help message based on `opts'. * * A long option name in `opts' can have the form "--foo=BAR". * The text "=BAR" is included in the help message. */ void opt_help (int fd, struct opt_desc * opts) { int x; int max_char_opt_len; int max_long_opt_len; int max_desc_len; int line_count; int desc_column; t_uchar * buf; t_uchar * occ_buf; t_uchar * occ_this; t_uchar * occ_next; max_long_opt_len = 0; max_char_opt_len = 0; max_desc_len = 0; line_count = 0; for (x = 0; opts[x].opt_value >= 0; ++x) { int q; if (opts[x].char_name) { q = 1 + str_length (opts[x].char_name); if (q > max_char_opt_len) max_char_opt_len = q; } if (opts[x].long_name) { q = 2 + str_length (opts[x].long_name); if (q > max_long_opt_len) max_long_opt_len = q; } if (opts[x].desc) { occ_buf = occ_this = occ_next = str_save(0, opts[x].desc); while ((occ_this = str_separate(&occ_next, "\n")) != NULL) { q = str_length (occ_this); if (q > max_desc_len) max_desc_len = q; line_count++; } lim_free(0, occ_buf); } } desc_column = 2 + max_char_opt_len + 2 + max_long_opt_len + 2; buf = (t_uchar *)alloca ((desc_column + max_desc_len) * line_count + 1); for (x = 0; opts[x].opt_value >= 0; ++x) { int column; int amt; buf[0] = 0; str_cat (buf, " "); if (opts[x].char_name) { str_cat (buf, "-"); str_cat (buf, opts[x].char_name); if (opts[x].long_name) str_cat (buf, ", "); } column = str_length (buf); if (opts[x].long_name) { str_cat (buf, "--"); str_cat (buf, opts[x].long_name); column = str_length (buf); } while (column < desc_column) buf[column++] = ' '; buf[column] = 0; if (opts[x].desc) { occ_buf = occ_this = occ_next = str_save(0, opts[x].desc); while ((occ_this = str_separate(&occ_next, "\n")) != NULL) { str_cat (buf, occ_this); if (occ_next != NULL) { size_t l; str_cat (buf, "\n"); l = str_length (buf); mem_set (buf + l, ' ', desc_column); buf[l + desc_column] = 0; } } lim_free(0, occ_buf); } str_cat (buf, "\n"); amt = str_length (buf); safe_write_retry (fd, buf, amt); } } /************************************************************************ *(h1 "Shifting Arguments") * */ /*(c opt_shift_char_option) * void opt_shift_char_option (int * argcp, char ** argv); * * Remove a single character argument from argc/argv. For example, * * Before: * * *argcp = 3 * argv = {"prog", "-abc", "-def", 0} * * After: * * *argcp = 3 * argv = {"prog", "-bc", "-def", 0} * * Before: * * *argcp = 3 * argv = {"prog", "-a", "-def", 0} * * After: * * *argcp = 2 * argv = {"prog", "-def", 0} * */ void opt_shift_char_option (int * argcp, char ** argv) { t_uchar ** argvx; argvx = (t_uchar **)argv; if (!argvx[1][2]) opt_shift (argcp, argv); else mem_move (argvx[1] + 1, argvx[1] + 2, 1 + str_length (argvx[1] + 2)); } /*(c opt_shift) * void opt_shift (int * argcp, char ** argv); * * Remove a single argument from argc/argv. For example, * * Before: * * *argcp = 3 * argv = {"prog", "--abc", "-def", 0} * * After: * * *argcp = 2 * argv = {"prog", "-def", 0} * */ void opt_shift (int * argcp, char ** argv) { int argc; int x; t_uchar ** argvx; argc = *argcp; argvx = (t_uchar **)argv; --argc; for (x = 1; x < argc; ++x) argvx[x] = argvx[x + 1]; argvx[x] = 0; *argcp = argc; } #if 0 /************************************************************************ *(h1 "An Example of Option Parsing ") * * The following program illustrates option parsing with `opt'. * These examples illustrates its usage: * * % test --version * test 1.0.0 * * % test --help * usage: ./,test [options] [input-file] * * -h, --help Display a help message and exit. * -V, --version Display a release identifier string * and exit. * -o file, --output-file=file Write output to FILE. * * % ./,test -o one --output-file two -othree --output-file=four * output file argument: `one' * output file argument: `two' * output file argument: `three' * output file argument: `four' * * % ./,test -xyzzy * unhandled option `-xyzzy' * usage: ./,test [options] [input-file] * try ./,test --help * * * Here's the code: * insert*/ #include "hackerlab/cmd/main.h" static t_uchar * program_name = "test"; static t_uchar * usage = "[options]"; static t_uchar * version_string = "1.0"; #define OPTS(OP, OP2) \ OP (opt_help_msg, "h", "help", 0, \ "Display a help message and exit.") \ OP (opt_version, "V", "version", 0, \ "Display a release identifier string") \ OP2 (opt_version, 0, 0, 0, "and exit.") \ OP (opt_output_file, "o file", "output-file=file", 1, \ "Write output to FILE.") enum options { OPTS (OPT_ENUM, OPT_IGN) }; struct opt_desc opts[] = { OPTS (OPT_DESC, OPT_DESC) {-1, 0, 0, 0, 0} }; int main (int argc, char * argv[]) { int errn; int o; struct opt_parsed * option; option = 0; while (1) { o = opt_standard (lim_use_must_malloc, &option, opts, &argc, argv, program_name, usage, version_string, opt_help_msg, opt_version); if (o == opt_none) break; switch (o) { default: safe_printfmt (2, "unhandled option `%s'\n", option->opt_string); panic ("internal error parsing arguments"); usage_error: opt_usage (2, argv[0], program_name, usage, 1); panic_exit (); bogus_arg: safe_printfmt (2, "ill-formed argument for `%s' (`%s')\n", option->opt_string, option->arg_string); goto usage_error; case opt_output_file: if (!opt_arg) { printfmt (&errn, 2, "missing argument for `%s'\n", opt_string); goto usage_error; } printfmt (&errn, 2, "output file argument: `%s'\n", opt_arg); break; } } return 0; } /*end-insert */ #endif tla-1.3.5+dfsg/src/hackerlab/cmd/Makefile.in0000644000175000017500000000027210457621774017266 0ustar useruser include $(makefiles)/library-objects.mk ifeq ($(cgs__install_hackerlab),1) include $(makefiles)/install-includes.mk endif # tag: Tom Lord Tue Dec 4 14:52:19 2001 (cmd/Makefile.in) # tla-1.3.5+dfsg/src/hackerlab/cmd/main.h0000644000175000017500000000202710457621774016316 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:41:39 2001 (main.h) */ /* main.h - * **************************************************************** * Copyright (C) 2000 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__CMD__MAIN_H #define INCLUDE__CMD__MAIN_H #include "hackerlab/cmd/opt.h" /* Things you'd likely want to include in the file * that defines `main', and that probably won't * do any harm. */ #include "hackerlab/bugs/panic.h" #include "hackerlab/os/errno-to-string.h" #include "hackerlab/mem/mem.h" #include "hackerlab/mem/must-malloc.h" #include "hackerlab/mem/alloc-limits.h" #include "hackerlab/arrays/ar.h" #include "hackerlab/char/char-class.h" #include "hackerlab/char/char-name.h" #include "hackerlab/char/str.h" #include "hackerlab/fmt/cvt.h" #include "hackerlab/vu/safe.h" #include "hackerlab/vu/vu-utils.h" #include "hackerlab/vu/vu-dash.h" /* automatically generated __STDC__ prototypes */ #endif /* INCLUDE__CMD__MAIN_H */ tla-1.3.5+dfsg/src/hackerlab/cmd/opt.h0000644000175000017500000001042710457621774016177 0ustar useruser/* opt.h - decls for command-line option parsing * **************************************************************** * Copyright (C) 1998, 2000 Thomas Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__CMD__OPT_H #define INCLUDE__CMD__OPT_H #include "hackerlab/machine/types.h" #include "hackerlab/mem/alloc-limits.h" /************************************************************************ *(h1 "Option Tables") * * * */ /*(c opt_desc :category type) insert*/ struct opt_desc { int opt_value; t_uchar * char_name; t_uchar * long_name; int requires_arg; t_uchar * desc; }; /*end-insert */ /*(c opt_parsed :category type) insert*/ struct opt_parsed { int opt_value; t_uchar * opt_string; t_uchar * arg_string; struct opt_desc * desc; }; /*end-insert */ #if 0 /*(text) * * An array of `struct opt_desc' is used to describe the options * accepted by a program. * * The easiest way to create this array is by defining a macro `OPTS' * of two arguments: `OP', which is used to define a program option * and `OP2', which is used to add additional lines of documentation * to an option. * * Both `OP' and `OP2' are used as macros which accept 5 arguments: * * name an enum name for the option * char_name 0 or a string beginning with a one-character * name for the option. * long_name 0 or a string beginning with a long name for * the option * arg 1 if the option requires an argument, 0 * otherwise * desc A documentation string for the option * * Once you have defined `OPTS' it is easy to create a table of * `struct opt_desc', as in the following example: * insert*/ #define OPTS(OP, OP2) \ OP (opt_help_msg, /* An enum name for the option */ \ "h", /* A short name for the option */ \ "help", /* A long name for the option */ \ 0, /* The option takes no arguments */ \ "Display a help message and exit.") /* help message */ \ \ OP (opt_version, "V", "version", 0, \ "Display a release identifier string and exit.") \ \ /* The next option illustrates how to handle a multi-line */ \ /* help message: */ \ \ OP (opt_output_file, "o file", "output-file=file", 1, \ "Write output to FILE.") \ OP2 (opt_output_file, 0, 0, 1, \ "The file must not already exist.") \ OP (...) ... /* Note that the short and long names for an option are optional * (may be 0) but if both are omitted, then there is no way to * specify the option on a command line. */ enum options { OPTS (OPT_ENUM, OPT_IGN) }; struct opt_desc opts[] = { OPTS (OPT_DESC, OPT_DESC) {-1, 0, 0, 0, 0} }; /*end-insert */ #endif #define OPT_ENUM(name,char_name,long_name,arg,desc) name, #define OPT_DESC(name,char_name,long_name,arg,desc) {name,char_name,long_name,arg,desc}, #define OPT_IGN(name,char_name,long_name,arg,desc) /* See `opt' in `opt.c'. */ enum opt_return_values { opt_dash = -1, /* "-" */ opt_double_dash = -2, /* "--" */ opt_unknown = -3, /* unrecognized option */ opt_bogus_argument = -4, /* --foo=bar but foo does not take an argument */ opt_none = -5, /* next argument is not an option */ opt_allocation_failure = -6 /* from op */ }; /* automatically generated __STDC__ prototypes */ extern int opt_low (t_uchar ** opt_string, t_uchar ** opt_arg, struct opt_desc ** desc, struct opt_desc * opts, int * argcp, char ** argv, t_uchar * opt_string_space); extern int opt (alloc_limits limits, struct opt_parsed ** parsed_p, struct opt_desc * opts, int * argcp, char ** argv); extern int opt_standard (alloc_limits limits, struct opt_parsed ** parsed_p, struct opt_desc * opts, int * argc, char * argv[], t_uchar * program_name, t_uchar * usage, t_uchar * version_string, t_uchar * long_help, int help_option, int long_help_option, int version_option); extern void opt_usage (int fd, char * argv0, t_uchar * program_name, t_uchar * usage, int suggest_help); extern void opt_help (int fd, struct opt_desc * opts); extern void opt_shift_char_option (int * argcp, char ** argv); extern void opt_shift (int * argcp, char ** argv); extern int main (int argc, char * argv[]); #endif /* INCLUDE__CMD__OPT_H */ tla-1.3.5+dfsg/src/hackerlab/cmd/PLUGIN/0000755000175000017500000000000010457621774016216 5ustar userusertla-1.3.5+dfsg/src/hackerlab/cmd/PLUGIN/REQ0000644000175000017500000000002510457621774016565 0ustar useruservu cmd cmd libboot tla-1.3.5+dfsg/src/hackerlab/PLUGIN/0000755000175000017500000000000010457621774015453 5ustar userusertla-1.3.5+dfsg/src/hackerlab/PLUGIN/REQ0000644000175000017500000000002510457621774016022 0ustar useruserhackerlab hackerlab tla-1.3.5+dfsg/src/hackerlab/PLUGIN/DIRS0000644000175000017500000000000010457621774016125 0ustar userusertla-1.3.5+dfsg/src/hackerlab/PLUGIN/options0000644000175000017500000000011610457621774017067 0ustar useruserbinary install-hackerlab no If true, libhackerlab will be installed. tla-1.3.5+dfsg/src/hackerlab/PLUGIN/auto0000644000175000017500000000006010457621774016342 0ustar useruser header-test have-alloca-h-header '' tla-1.3.5+dfsg/src/hackerlab/rx-posix/0000755000175000017500000000000010457621774016246 5ustar userusertla-1.3.5+dfsg/src/hackerlab/rx-posix/posix.h0000644000175000017500000001635310457621774017571 0ustar useruser/* posix.h - Posix.2 compatibility functions * **************************************************************** * Copyright (C) 1998, 2000 Thomas Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__RX_POSIX__POSIX_H #define INCLUDE__RX_POSIX__POSIX_H #include "hackerlab/rx-posix/errnorx.h" #include "hackerlab/rx-posix/dup-max.h" #include "hackerlab/rx-posix/match-regexp.h" /* RE_DUP_MAX (Required by Posix.2) An upper bound on the values * `m' and `n' in a regexp of the form `RE{m,n}'. * * Posix requires this to be declared in "". * * The correct value for Rx is redefined (as a macro) in "hackerlab/rx-posix/limits.h". */ /* regoff_t (Required by Posix.2) Used to represent offsets to * substrings within a string matched by `regexec'. * `regoff_t' is a signed arithmetic type that can hold * the largest value that can be stored in either `off_t' * or `ssize_t'. * * This declaration fails to conform to Posix.2 if * either `off_t' or `ssize_t' is `long long' -- but * that is unlikely to be the case. */ typedef long regoff_t; /* regmatch_t (Required by Posix.2). Offsets to substrings matched * by parenthesized subexpressions. * * This structure includes the (required) fields: * * regoff_t rm_so; Byte offset from start of string to * start of substring. * regoff_t rm_eo; Byte offset from start of string to * the first character after the end * of substring. */ typedef struct rx_registers regmatch_t; /* regex_t (Required by Posix.2) A compiled regexp, filled in * by `regcomp'. */ typedef struct rx_posix_regex { /* re_nsub The number of parenthesized subexpressions. * Filled in by `regcomp'. * * This field is required by Posix.2 * */ size_t re_nsub; /**************************************************************** * The remaining fields are implementation specific and are * filled in by `regcomp'. */ /* pattern The expression tree for the pattern. * The reference count for the expression * is incremented for `pattern'. */ struct rx_exp_node * pattern; /* subexps Pointers to the `re_nsub' parenthesized subexpressions * of pattern. The reference counts are NOT incremented * for these references. */ struct rx_exp_node ** subexps; /* icase non-0 iff regcomp was passed REG_ICASE */ int icase; /* translate 0 or a 256 element mapping from characters to characters. * Regcomp reads the pattern source string through this table * and compiles a pattern that acts as if the target string * is translated through this table. Used to implement * REG_ICASE. */ t_uchar * translate; /* newline_anchor If not 0, ^ matches after \n, $ before \n. * Set by passing REG_NEWLINE to `regcomp'. */ t_uchar newline_anchor; /* If true, an anchor at a newline matches.*/ /* is_left_anchored If not 0, the pattern effectively begins with `^'. * For example, "(^abc)|(^def)" is anchored. * * is_right_anchored Similarly for `$'. */ int is_left_anchored; int is_right_anchored; /* is_nullable If not 0, the pattern can match the empty string. */ t_uchar is_nullable; /* no_sub If not 0, REG_NOSUB was passed to regcomp. */ t_uchar no_sub; /* fastmap If `fastmap[c]' is 0, the pattern can not match * a string that begins with character `c'. */ t_uchar fastmap[256]; /* small_p If not 0, the pattern is "trivial" in such a way that * the cost of pattern->NFA->DFA conversion should be * avoided during matching in favor of matching based * only on the expression tree for the pattern. */ int small_p; /* owner_data Arbitrary data, available to whoever called * regcomp. Do not rely on this feature. */ void * owner_data; } regex_t; /* enum rx_cflags * * Values which can be combined by a bitwise inclusive OR to * form the `cflags' argument for `regcomp'. * * Most of these values are required by Posix.2. `REG_DFA_ONLY' is an * implementation-specific flag and should be avoided by programs * which are intended to be portable between implementations of Posix. */ enum rx_cflags { REG_EXTENDED = 1, /* If REG_EXTENDED is set, then use extended regular expression (ERE) syntax. If not set, then use basic regular expression (BRE) syntax. In extended syntax, none of the regexp operators are written with a backslash. */ REG_ICASE = (REG_EXTENDED << 1), /* If REG_ICASE is set, then ignore case when matching. If not set, then case is significant. */ REG_NOSUB = (REG_ICASE << 1), /* Report only success/failure in regexec. */ REG_NEWLINE = (REG_NOSUB << 1), /* If REG_NEWLINE is set, then "." and complemented character sets do not match at newline characters in the string. Also, "^" and "$" do match at newlines. If not set, then anchors do not match at newlines and complimented character sets ordinarily contain newline. */ REG_DFA_ONLY = (REG_NEWLINE << 1), /* If this bit is set, then restrict the pattern language to patterns that compile to efficient state machines. This is a non-standard feature. */ }; /* enum rx_eflags * * Values which can be combined by a bitwise inclusive OR to * form the `eflags' argument for `regexec'. * * Flags required by Posix.2: * * REG_NOTBOL * REG_NOTEOL * * Implementation-specific (non-standard) flags: * * REG_NO_SUBEXP_REPORTING * REG_ALLOC_REGS */ enum rx_eflags { REG_NOTBOL = 1, /* If REG_NOTBOL is set, then the beginning-of-line operator `^' * doesn't match the beginning of the input string (presumably * because it's not the beginning of a line). If not set, then the * beginning-of-line operator does match the beginning of the * string. * * (Required by Posix.2) */ REG_NOTEOL = (REG_NOTBOL << 1), /* REG_NOTEOL is similar to REG_NOTBOL, except that it applies to * the end-of-line operator `$' and the end of the input string. * * (Required by Posix.2) */ REG_NO_SUBEXP_REPORTING = (REG_NOTEOL << 1), /* REG_NO_SUBEXP_REPORTING causes `regexec' to fill in only * `pmatch[0]' and to ignore other elements of `pmatch'. For some * patterns (those which do not contain back-references or anchors) * this can speed up matching considerably. * * (non-standard) */ REG_ALLOC_REGS = (REG_NO_SUBEXP_REPORTING << 1), /* REG_ALLOC_REGS is only used by `regnexec'. It causes `regnexec' to allocate storage * for `regmatch_t' values. * * (non-standard) */ }; /* automatically generated __STDC__ prototypes */ extern int regcomp (regex_t * preg, const char * pattern, int cflags); extern int regncomp (regex_t * preg, const char * pattern, size_t len, int cflags); extern void regfree (regex_t *preg); extern size_t regerror (int errcode, const regex_t *preg, char *errbuf, size_t errbuf_size); extern int regexec (const regex_t *preg, const char *string, size_t nmatch, regmatch_t pmatch[], int eflags); extern int regnexec (const regex_t *preg, const char *string, regoff_t len, size_t nmatch, regmatch_t **pmatch, int eflags); #endif /* INCLUDE__RX_POSIX__POSIX_H */ tla-1.3.5+dfsg/src/hackerlab/rx-posix/regex.h0000644000175000017500000000073710457621774017540 0ustar useruser/* regex.h - posix compatibility header file * **************************************************************** * Copyright (C) 1998, 2000 Thomas Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__RX_POSIX__REGEX_H #define INCLUDE__RX_POSIX__REGEX_H #include "hackerlab/rx-posix/posix.h" /* automatically generated __STDC__ prototypes */ #endif /* INCLUDE__RX_POSIX__REGEX_H */ tla-1.3.5+dfsg/src/hackerlab/rx-posix/=later/0000755000175000017500000000000010457621774017452 5ustar userusertla-1.3.5+dfsg/src/hackerlab/rx-posix/=later/regex-utils.c0000644000175000017500000000270610457621774022073 0ustar useruser/* regex-utils.c: * **************************************************************** * Copyright (C) 2002 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/rx-posix/regex-utils.h" int regexec_comp (regex_t * preg, char * pattern, int cflags, char * string, size_t nmatch, regmatch_t pmatch[], int eflags) { return regnexec_ncomp (preg, pattern, str_length (pattern), cflags, string, str_length (string), nmatch, pmatch, eflags); } int regnexec_comp (regex_t * preg, char * pattern, int cflags, char * string, size_t string_len, size_t nmatch, regmatch_t pmatch[], int eflags) { return regnexec_ncomp (preg, pattern, str_length (pattern), cflags, string, string_len, nmatch, pmatch, eflags); } int regexec_ncomp (regex_t * preg, char * pattern, size_t pattern_len, int cflags, char * string, size_t nmatch, regmatch_t pmatch[], int eflags) { return regnexec_ncomp (preg, pattern, pattern_len, cflags, string, str_length (string), nmatch, pmatch, eflags); } int regnexec_ncomp (regex_t * preg, char * pattern, size_t pattern_len, int cflags, char * string, size_t string_len, size_t nmatch, regmatch_t pmatch[], int eflags) { if ( } /* tag: Tom Lord Sun Mar 10 22:01:18 2002 (regex-utils.c) */ tla-1.3.5+dfsg/src/hackerlab/rx-posix/re8-parse.c0000644000175000017500000011533410457621774020227 0ustar useruser/* re8-parse.c - compiling regexp syntax to rx_exp_node trees * **************************************************************** * Copyright (C) 1998, 2000 Thomas Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/os/setjmp.h" #include "hackerlab/os/char-class-locale.h" #include "hackerlab/os/char-cmp-locale.h" #include "hackerlab/bugs/panic.h" #include "hackerlab/char/char-class.h" #include "hackerlab/char/str.h" #include "hackerlab/mem/mem.h" #include "hackerlab/bitsets/bits.h" #include "hackerlab/fmt/cvt.h" #include "hackerlab/rx/bits-tree-rules.h" #include "hackerlab/rx/nfa-cache.h" #include "hackerlab/rx-posix/posix.h" #include "hackerlab/rx-posix/re8-parse.h" /**************************************************************** *(h0 "Regexp Parsing" * :includes ("rx-posix/re8-parse.h")) * * The functions in this section compile Posix BRE ("basic regular * expression") and ERE ("extended regular expression") syntax to * expression trees. * * (The standard names of these syntaxes are a mistake: the pattern * languages they describe are not regular expressions but regexps. * See *xref*.) */ /* Functions Used Internally by the Parser */ struct rx_parse_state { struct rx_exp_node * root; t_uchar const * pos; t_uchar const * pattern; int size; int extended_p; int newline_separates_lines; int cset_size; const t_uchar * translate; bits inv_tr[256]; int n_members [256]; int at_beg; char backrefs_valid[10]; int exp_number; int dfa_only; int cut_count; int err; jmp_buf err_escape; }; static void rx_parse_alt (struct rx_exp_node ** where, struct rx_parse_state * state, int paren_matched); static void rx_parse_concat (struct rx_exp_node ** where, struct rx_parse_state * state, int paren_matched); static void rx_parse_repeated (struct rx_exp_node ** where, struct rx_parse_state * state, int paren_matched); static void rx_parse_item (struct rx_exp_node ** where, struct rx_parse_state * state, int paren_matched); static void cleanup_parse_state (struct rx_parse_state * state) { int x; for (x = 0; x < 256; ++x) { if (state->inv_tr[x]) bits_free (state->inv_tr[x]); } } static int rx_eop (struct rx_parse_state * state) { return (state->pos == (state->pattern + state->size)); } static int rx_scan_ahead (struct rx_parse_state * state, t_uchar * token, int len) { if ((state->pos + len) > (state->pattern + state->size)) return 0; { int x; for (x = 0; x < len; ++x) if (state->translate[*(state->pos + x)] != token[x]) return 0; return 1; } } static int rx_expand_op (t_uchar * buf, struct rx_parse_state * state, int op) { if (!state->extended_p && (op != '*')) { buf[0] = '\\'; buf[1] = op; return 2; } else { buf[0] = op; return 1; } } static int rx_scan_op_ahead (struct rx_parse_state * state, int op) { int x; t_uchar buf[2]; x = rx_expand_op (buf, state, op); return rx_scan_ahead (state, buf, x); } static int rx_scan (struct rx_parse_state * state, t_uchar * token, int len) { if (rx_scan_ahead (state, token, len)) { state->pos += len; return 1; } else return 0; } static int rx_scan_op (struct rx_parse_state * state, int op) { int x; t_uchar buf[2]; x = rx_expand_op (buf, state, op); return rx_scan (state, buf, x); } static int rx_factor_string (struct rx_exp_node *** lastp, int cset_size) { struct rx_exp_node ** expp; struct rx_exp_node * exp; bits cs; struct rx_exp_node * cset_node; expp = *lastp; exp = *expp; cs = bits_alloc (rx_nfa_cache_limits (), rx_8bit_bits_tree_rule); if (!cs) { return REG_ESPACE; } if (bits_adjoin (cs, exp->str[exp->str_len - 1])) { bits_free (cs); return REG_ESPACE; } cset_node = rx_mk_r_cset_take (r_cset, cset_size, cs); if (!cset_node) { bits_free (cs); return REG_ESPACE; } cset_node->observed = 0; if (exp->str_len == 1) { rx_free_exp (exp); *expp = cset_node; return 0; } else { struct rx_exp_node * concat_node; concat_node = rx_mk_r_binop (r_concat, exp, cset_node); if (!concat_node) { rx_free_exp (cset_node); return REG_ESPACE; } exp->str_len--; concat_node->observed = 0; *expp = concat_node; *lastp = &concat_node->right; return 0; } } /* The compiler keeps an inverted translation table. * This looks up/inititalize elements. * VALID is an array of booleans that validate CACHE. */ static bits rx_inverse_translation (int * n_members, int cset_size, bits * inv_tr, const t_uchar * translate, int c) { if (!inv_tr[c]) { bits cs; int x; int c_tr; int membs; inv_tr[c] = bits_alloc (rx_nfa_cache_limits(), rx_8bit_bits_tree_rule); if (!inv_tr[c]) return 0; cs = inv_tr[c]; c_tr = translate[(t_uchar)c]; if (bits_clear (cs)) return 0; membs = 0; for (x = 0; x < 256; ++x) if (translate[x] == c_tr) { if (bits_adjoin (cs, x)) return 0; membs++; } n_members[c] = membs; } return inv_tr[c]; } /* A Recursive Descent Regexp Parser */ static void rx_parse_alt (struct rx_exp_node ** where, struct rx_parse_state * state, int paren_matched) { rx_parse_concat (where, state, paren_matched); if (rx_scan_op (state, '|')) { struct rx_exp_node * alt; alt = rx_mk_r_binop (r_alternate, *where, 0); if (!alt) { state->err = REG_ESPACE; longjmp (state->err_escape, 1); } state->at_beg = 1; *where = alt; rx_parse_alt (&alt->right, state, paren_matched); alt->observed = (( alt->left && alt->left->observed) || ( alt->right && alt->right->observed)); } } static void rx_parse_concat (struct rx_exp_node ** where, struct rx_parse_state * state, int paren_matched) { rx_parse_repeated (where, state, paren_matched); while ( *where && !rx_eop (state) && !rx_scan_op_ahead (state, '|') && !((paren_matched == 1) && rx_scan_op_ahead (state, ')')) && !((paren_matched == 2) && rx_scan_ahead (state, "):]]", 4))) { struct rx_exp_node * concat; concat = rx_mk_r_binop (r_concat, *where, 0); if (!concat) { state->err = REG_ESPACE; longjmp (state->err_escape, 1); } *where = concat; rx_parse_repeated (&concat->right, state, paren_matched); concat->observed = (( concat->left && concat->left->observed) || ( concat->right && concat->right->observed)); } } static void rx_parse_repeated (struct rx_exp_node ** where, struct rx_parse_state * state, int paren_matched) { char const * saved_pos; enum { plus, opt, star, interval } op_type; int iv = -2; int iv2 = -2; rx_parse_item (where, state, paren_matched); if (!state->extended_p && state->at_beg) return; saved_pos = state->pos; if (rx_scan_op (state, '+')) op_type = plus; else if (rx_scan_op (state, '?')) op_type = opt; else if (rx_scan_op (state, '*')) op_type = star; else if (!state->dfa_only && rx_scan_op (state, '{')) { int lo; int hi; int errn; t_uchar const * start; t_uchar const * bound; bound = state->pattern + state->size; if (state->pos == bound) { not_an_interval: state->err = REG_BADBR; longjmp (state->err_escape, 1); } start = state->pos; while ( (state->pos < bound) && (char_is_digit (state->translate[*state->pos]))) ++state->pos; if (cvt_decimal_to_int (&errn, &lo, (t_uchar *)start, state->pos - start)) { state->err = REG_BADBR; longjmp (state->err_escape, 1); } if (state->pos == bound) goto not_an_interval; if (rx_scan (state, ",", 1)) { start = state->pos; while ( (state->pos < bound) && (char_is_digit (state->translate[*state->pos]))) ++state->pos; if (state->pos == start) hi = -1; else if (cvt_decimal_to_int (&errn, &hi, (t_uchar *)start, state->pos - start)) { state->err = REG_BADBR; longjmp (state->err_escape, 1); } if (!(rx_scan_op (state, '}'))) goto not_an_interval; goto know_range; } else if (rx_scan_op (state, '}')) { hi = lo; goto know_range; } else goto not_an_interval; know_range: if (((hi < lo) && (hi >= 0)) || (hi > RX_DUP_MAX)) { state->err = REG_BADBR; longjmp (state->err_escape, 1); } op_type = interval; iv = lo; iv2 = hi; } else return; while (*where) { /* repeat operators apply to an entire r_right_concat, * but that could change in the future if r_right_concat * can be generated by something other than rx_parse_repeated. */ if (((*where)->type == r_concat)) where = &(*where)->right; else if ((*where)->type == r_string) { int err; err = rx_factor_string (&where, state->cset_size); if (err) { state->err = REG_ESPACE; longjmp (state->err_escape, 1); } } else break; } { struct rx_exp_node * iter; switch (op_type) { case opt: { struct rx_exp_node * alt; alt = rx_mk_r_binop (r_alternate, *where, 0); if (!alt) { state->err = REG_ESPACE; longjmp (state->err_escape, 1); } alt->observed = (*where) && ((*where)->observed); *where = alt; break; } case plus: case star: star_or_plus: { iter = rx_mk_r_monop (r_star, *where); if (!iter) { state->err = REG_ESPACE; longjmp (state->err_escape, 1); } iter->observed = *where ? (*where)->observed : 0; if (op_type == plus) { struct rx_exp_node * conc; rx_save_exp (*where); conc = rx_mk_r_binop (r_right_concat, iter, *where); if (!conc) { rx_free_exp (iter); state->err = REG_ESPACE; longjmp (state->err_escape, 1); } conc->observed = iter->observed; iter = conc; } *where = iter; break; } case interval: { invariant (iv != -2 && iv2 != -2); if ((iv == 0) && (iv2 == -1)) { op_type = star; goto star_or_plus; } else if ((iv == 1) && (iv2 == -1)) { op_type = plus; goto star_or_plus; } iter = rx_mk_r_monop (r_interval, *where); if (!iter) { state->err = REG_ESPACE; longjmp (state->err_escape, 1); } iter->observed = 1; iter->intval = iv; if (iv2 != -1) { iter->intval2 = iv2; *where = iter; } else { struct rx_exp_node * copy_star; struct rx_exp_node * conc; iter->intval2 = iv; rx_save_exp (*where); copy_star = rx_mk_r_monop (r_star, *where); if (!copy_star) { rx_free_exp (iter); state->err = REG_ESPACE; longjmp (state->err_escape, 1); } copy_star->observed = (*where) && (*where)->observed; conc = rx_mk_r_binop (r_right_concat, iter, copy_star); if (!conc) { rx_free_exp (*where); rx_free_exp (copy_star); *where = 0; state->err = REG_ESPACE; longjmp (state->err_escape, 1); } conc->observed = 1; *where = conc; } break; } } } } enum rx_character_classes { rx_cc_alnum, rx_cc_alpha, rx_cc_blank, rx_cc_cntrl, rx_cc_digit, rx_cc_graph, rx_cc_lower, rx_cc_print, rx_cc_punct, rx_cc_space, rx_cc_upper, rx_cc_xdigit, rx_cc_any }; struct rx_cc_name { char * name; enum rx_character_classes class_id; }; struct rx_cc_name rx_cc_names[] = { {"alnum", rx_cc_alnum}, {"alpha", rx_cc_alpha}, {"blank", rx_cc_blank}, {"cntrl", rx_cc_cntrl}, {"digit", rx_cc_digit}, {"graph", rx_cc_graph}, {"lower", rx_cc_lower}, {"print", rx_cc_print}, {"punct", rx_cc_punct}, {"space", rx_cc_space}, {"upper", rx_cc_upper}, {"xdigit", rx_cc_xdigit}, {0, 0} }; static void rx_parse_item (struct rx_exp_node ** where, struct rx_parse_state * state, int paren_matched) { int type; int iv; int token; const t_uchar * translate; translate = state->translate; if (rx_eop (state)) { empty_item: *where = 0; state->at_beg = 0; return; } /* nested subexpressions */ if (state->dfa_only && rx_scan_op (state, '(')) { state->at_beg = 1; rx_parse_alt (where, state, 1); if (!(rx_scan_op (state, ')'))) { state->err = REG_ELPAREN; longjmp (state->err_escape, 1); } state->at_beg = 0; return; } if (rx_scan_op (state, '(')) { int exp_number; exp_number = state->exp_number; ++state->exp_number; state->at_beg = 1; rx_parse_alt (where, state, 1); if (!(rx_scan_op (state, ')'))) { state->err = REG_ELPAREN; longjmp (state->err_escape, 1); } state->at_beg = 0; if (exp_number < 10) state->backrefs_valid[exp_number] = 1; { struct rx_exp_node * n; n = rx_mk_r_monop (r_parens, *where); if (!n) { state->err = REG_ESPACE; longjmp (state->err_escape, 1); } n->intval = exp_number; n->observed = 1; *where = n; } return; } if (rx_scan (state, "[[:(", 4)) { state->at_beg = 1; rx_parse_alt (where, state, 2); if (!(rx_scan (state, "):]]", 4))) { state->err = REG_ELPAREN; longjmp (state->err_escape, 1); } state->at_beg = 0; { struct rx_exp_node * n; n = rx_mk_r_monop (r_parens, *where); if (!n) { state->err = REG_ESPACE; longjmp (state->err_escape, 1); } n->intval = 0; n->observed = 0; *where = n; } return; } if ( ((paren_matched == 1) && rx_scan_op_ahead (state, ')')) || ((paren_matched == 2) && rx_scan_ahead (state, "):]]", 4))) { *where = 0; return; } if (rx_scan (state, "[[:cut ", 7)) { unsigned const char * bound; int val; int sign; state->at_beg = 0; sign = 1; bound = state->pos + state->size; val = 0; while ( (state->pos < bound) && char_is_space (translate[*state->pos])) ++state->pos; if ( (state->pos >= bound) || !( (translate[*state->pos] == '%') || (translate[*state->pos] == '-') || char_is_digit (translate[*state->pos]))) { bad_cut: state->err = REG_BADPAT; longjmp (state->err_escape, 1); } if (translate[*state->pos] == '%') { val = state->cut_count++; ++state->pos; } else { if (translate[*state->pos] == '-') { sign = -1; ++state->pos; } while ( (state->pos < bound) && char_is_digit (translate [*state->pos])) val = val * 10 + (translate [*(state->pos++)] - '0'); val = val * sign; } while ( (state->pos < bound) && char_is_space (translate [*state->pos])) ++state->pos; if (!rx_scan (state, ":]]", 3)) goto bad_cut; *where = rx_mk_r_int (r_cut, val); if (!*where) { state->err = REG_ESPACE; longjmp (state->err_escape, 1); } (*where)->observed = 1; return; } /* anchors */ if ( !state->dfa_only && (state->extended_p || state->at_beg) && rx_scan (state, "^", 1)) { iv = '^'; make_context_node: type = r_context; { struct rx_exp_node * n; n = rx_mk_r_int (type, iv); if (!n) { state->err = REG_ESPACE; longjmp (state->err_escape, 1); } *where = n; n->observed = 1; state->at_beg = (iv == '^'); return; } } else if (!state->dfa_only && state->extended_p && !state->at_beg && rx_scan (state, "^", 1)) { state->err = REG_BADPAT; longjmp (state->err_escape, 1); } { int at_end; at_end = ( !state->dfa_only && !state->extended_p && ( ((paren_matched == 1) && rx_scan_ahead (state, "$\\)", 3)) || ((paren_matched == 2) && rx_scan_ahead (state, "$):]]", 5)) || rx_scan_ahead (state, "$\\|", 3) || ( rx_scan_ahead (state, "$", 1) && (state->pos + 1 == (state->pattern + state->size))))); if (!state->dfa_only && (state->extended_p || at_end) && rx_scan (state, "$", 1)) { type = r_context; iv = '$'; goto make_context_node; } else if (!state->dfa_only && !state->extended_p && !at_end && rx_scan (state, "$", 1)) { state->err = REG_BADPAT; longjmp (state->err_escape, 1); } } /* The characters *, ?, +, and { are sometimes valid, * sometimes special, and sometimes an error: */ if (token = '*', rx_scan_op_ahead (state, token)) { iv = '*'; goto got_iterator; } if (token = '+', rx_scan_op_ahead (state, token)) { iv = '+'; goto got_iterator; } if (!state->dfa_only && (token = '{', rx_scan_op_ahead (state, token))) { iv = '{'; goto got_iterator; } if (token = '?', rx_scan_op_ahead (state, token)) { iv = '?'; got_iterator: if (!state->extended_p && state->at_beg) { rx_scan_op (state, token); goto begin_string; } else goto empty_item; } /* empty before alt */ if (rx_scan_op_ahead (state, '|')) goto empty_item; /* csets */ if (rx_scan (state, ".", 1)) { bits cs; struct rx_exp_node * n; state->at_beg = 0; cs = bits_alloc (rx_nfa_cache_limits (), rx_8bit_bits_tree_rule); if (!cs) { state->err = REG_ESPACE; longjmp (state->err_escape, 1); } if (bits_fill (cs) || bits_remove (cs, 0)) { bits_free (cs); state->err = REG_ESPACE; longjmp (state->err_escape, 1); } if (state->newline_separates_lines) { if (bits_remove (cs, '\n')) { bits_free (cs); state->err = REG_ESPACE; longjmp (state->err_escape, 1); } } n = rx_mk_r_cset_take (r_cset, state->cset_size, cs); if (!n) { bits_free (cs); state->err = REG_ESPACE; longjmp (state->err_escape, 1); } n->observed = 0; *where = n; return; } if (rx_scan (state, "[", 1)) { int invert_it; bits cs; struct rx_exp_node * n; state->at_beg = 0; invert_it = rx_scan (state, "^", 1); cs = bits_alloc (rx_nfa_cache_limits (), rx_8bit_bits_tree_rule); if (!cs) { state->err = REG_ESPACE; longjmp (state->err_escape, 1); } /* An initial ']' is special. */ if (rx_scan_ahead (state, "]", 1)) goto normal_char; while (!rx_scan (state, "]", 1)) { if (rx_eop (state)) { short_bracket: bits_free (cs); state->err = REG_EBRACK; longjmp (state->err_escape, 1); } else if (rx_scan (state, "[=", 2)) { /* Equivalence classes not supported yet. */ bits_free (cs); state->err = REG_ECOLLATE; longjmp (state->err_escape, 1); } else if (rx_scan (state, "[:", 2)) { int x; int cl = 0; x = 0; while (rx_cc_names[x].name) { if (rx_scan (state, rx_cc_names[x].name, str_length (rx_cc_names[x].name))) { cl = rx_cc_names[x].class_id; break; } else ++x; } if ( !rx_cc_names[x].name || !rx_scan (state, ":]", 2)) { bits_free (cs); state->err = REG_ECTYPE; longjmp (state->err_escape, 1); } for (x = 0; x < state->cset_size; ++x) { int in; switch (cl) { default: while (1) panic ("strange character class"); case rx_cc_alnum: in = char_is_alnum_locale (x); break; case rx_cc_alpha: in = char_is_alpha_locale (x); break; case rx_cc_blank: in = ((x == ' ') || (x == '\t')); break; case rx_cc_cntrl: in = char_is_control_locale (x); break; case rx_cc_digit: in = char_is_digit_locale (x); break; case rx_cc_graph: in = char_is_graph_locale (x); break; case rx_cc_lower: in = char_is_lower_locale (x); break; case rx_cc_print: in = char_is_printable_locale (x); break; case rx_cc_punct: in = char_is_punct_locale (x); break; case rx_cc_space: in = char_is_space_locale (x); break; case rx_cc_upper: in = char_is_upper_locale (x); break; case rx_cc_xdigit: in = char_is_xdigit_locale (x); break; } if (in) { bits it; it = rx_inverse_translation (state->n_members, state->cset_size, state->inv_tr, translate, x); if (!it || bits_union (cs, it)) { bits_free(cs); state->err = REG_ECTYPE; longjmp (state->err_escape, 1); } } } } else { int first; int last; normal_char: if (!rx_scan (state, "[.", 2)) { first = translate[*state->pos]; ++state->pos; } else { first = translate[*state->pos]; ++state->pos; if (!rx_scan (state, ".]", 2)) { /* Illegal collating symbol */ bits_free (cs); state->err = REG_ECOLLATE; longjmp (state->err_escape, 1); } } { bits it; it = rx_inverse_translation (state->n_members, state->cset_size, state->inv_tr, translate, first); if (!it || bits_union (cs, it)) { bits_free (cs); state->err = REG_ESPACE; longjmp (state->err_escape, 1); } } if ( !rx_scan_ahead (state, "-]", 2) && rx_scan (state, "-", 1)) { if (rx_eop (state)) goto short_bracket; if (!rx_scan (state, "[.", 2)) { last = translate[*state->pos]; ++state->pos; } else { last = translate[*state->pos]; ++state->pos; if (!rx_scan (state, ".]", 2)) { /* Illegal collating symbol */ bits_free (cs); state->err = REG_ECOLLATE; longjmp (state->err_escape, 1); } } if (first > last) { bits_free (cs); state->err = REG_ERANGE; longjmp (state->err_escape, 1); } { int c; for (c = 0; c < 256; ++c) { if ( (char_cmp_locale (first, c) <= 0) && (char_cmp_locale (c, last) <= 0)) { bits it; it = rx_inverse_translation (state->n_members, state->cset_size, state->inv_tr, translate, c); if (!it || bits_union (cs, it)) { bits_free (cs); state->err = REG_ESPACE; longjmp (state->err_escape, 1); } } } } } } } if (invert_it) { if (bits_complement (cs) || (state->newline_separates_lines && bits_remove (cs, '\n'))) { bits_free (cs); state->err = REG_ESPACE; longjmp (state->err_escape, 1); } } n = rx_mk_r_cset_take (r_cset, state->cset_size, cs); if (!n) { bits_free (cs); state->err = REG_ESPACE; longjmp (state->err_escape, 1); } *where = n; n->observed = 0; return; } if (rx_scan (state, "\\", 1)) { if (rx_eop (state)) { state->err = REG_EESCAPE; longjmp (state->err_escape, 1); } if (state->dfa_only) goto escaped_char_default; switch (translate[*state->pos]) { default: escaped_char_default: iv = translate[*state->pos]; ++state->pos; goto begin_string; case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': iv = translate[*state->pos]; ++state->pos; if (!state->backrefs_valid[iv - '0']) { state->err = REG_ESUBREG; longjmp (state->err_escape, 1); } else goto make_context_node; } } /* string */ iv = translate[*state->pos]; ++state->pos; begin_string: { bits it; state->at_beg = 0; it = rx_inverse_translation (state->n_members, state->cset_size, state->inv_tr, translate, iv); if (!it) { state->err = REG_ESPACE; longjmp (state->err_escape, 1); } if (state->n_members[iv] == 0) { *where = 0; return; } else if (state->n_members[iv] > 1) { bits cs; struct rx_exp_node * match; cs = bits_dup (it); if (!cs) { state->err = REG_ESPACE; longjmp (state->err_escape, 1); } match = rx_mk_r_cset_take (r_cset, state->cset_size, cs); if (!match) { bits_free (cs); state->err = REG_ESPACE; longjmp (state->err_escape, 1); } match->observed = 0; *where = match; return; } } { char c; c = iv; *where = rx_mk_r_str (r_string, &c, 1, uni_iso8859_1); if (!*where) { state->err = REG_ESPACE; longjmp (state->err_escape, 1); } } (*where)->observed = 0; { unsigned const char * bound; bound = state->pattern + state->size; while (state->pos < bound) { switch (translate[*state->pos]) { default: add_simple_char: { bits it; it = rx_inverse_translation (state->n_members, state->cset_size, state->inv_tr, translate, *state->pos); if (!it) { state->err = REG_ESPACE; longjmp (state->err_escape, 1); } if (state->n_members[*state->pos] != 1) return; { t_uchar * new_str; new_str = ((t_uchar *) rx_nfa_cache_realloc ((*where)->str, (*where)->str_len + 1)); if (!new_str) { state->err = REG_ESPACE; longjmp (state->err_escape, 1); } (*where)->str = new_str; (*where)->str[(*where)->str_len] = translate[*state->pos]; ++(*where)->str_len; } ++state->pos; continue; } case '.': case '*': case '[': return; case '{': case '^': if (state->dfa_only) goto add_simple_char; /* fall through */ case '(': case '|': case '+': case '?': if (!state->extended_p) goto add_simple_char; else return; case ')': if ( (state->extended_p && (paren_matched == 1)) || ((paren_matched == 2) && rx_scan_ahead (state, "):]]", 4))) return; else goto add_simple_char; case '$': if (state->dfa_only) goto add_simple_char; if ( state->extended_p || rx_scan_ahead (state, "$\\|", 3) || ((paren_matched == 1) && rx_scan_ahead (state, "$\\)", 3)) || ((paren_matched == 2) && rx_scan_ahead (state, "$):]]", 5)) || ( rx_scan_ahead (state, "$", 1) && (state->pos + 1 == bound))) return; else goto add_simple_char; case '\\': if ((state->pos + 1) == bound) { state->err = REG_EESCAPE; longjmp (state->err_escape, 1); } if (!state->dfa_only && char_is_digit (translate[*(state->pos + 1)])) return; if (state->extended_p) { ++state->pos; goto add_simple_char; } switch (translate[*(state->pos + 1)]) { default: ++state->pos; goto add_simple_char; case '{': if (state->dfa_only) goto add_simple_char; else return; case ')': if (!state->extended_p && (paren_matched == 1)) return; else { ++state->pos; goto add_simple_char; } case '(': case '|': case '+': case '?': return; } } } } } /* Regexp Optimizer * * This function rewrites an expression returned by the parser, * to produce an equivalent expression that can be matched more * quickly. * * The gist of the optimization is to move regexp constructs which are * not regular expressions closer to the root of the tree. */ static struct rx_exp_node * rx_optimize (struct rx_parse_state * state, struct rx_exp_node * n); static struct rx_exp_node * rx_optimize_combination_left (struct rx_parse_state * state, enum rx_exp_node_type type, struct rx_exp_node * n) { if (!n) return 0; n = rx_optimize (state, n); if (n->type != type) return n; if (!n->observed) return n; n->right = rx_optimize_combination_left (state, type, n->right); if (!n->right || !n->right->observed) return n; if ( (n->right->type != type) || (n->right->right->observed)) return n; { struct rx_exp_node * tmp; tmp = n->right->right; n->right->right = n->right->left; n->right->left = n->left; n->left = n->right; n->right = tmp; n->observed = 1; n->left->observed = 1; return n; } } static struct rx_exp_node * rx_optimize_combination_right (struct rx_parse_state * state, enum rx_exp_node_type type, struct rx_exp_node * n) { if (!n) return 0; n = rx_optimize (state, n); if (!n) return 0; if (n->type != type) return n; if (!n->observed) return n; n->left = rx_optimize_combination_right (state, type, n->left); if (!n->left || !n->left->observed) return n; if ( (n->left->type != type) || (n->left->left->observed)) return n; { struct rx_exp_node * tmp; tmp = n->left->left; n->left->left = n->left->right; n->left->right = n->right; n->right = n->left; n->left = tmp; n->observed = 1; n->right->observed = 1; return n; } } static struct rx_exp_node * rx_optimize_strings (struct rx_parse_state * state, struct rx_exp_node * r) { if ( ((r->type == r_concat) || (r->type == r_right_concat)) && (r->left->type == r_string) && (r->right->type == r_string)) { struct rx_exp_node * t; t_uchar * new_str; new_str = ((t_uchar *) rx_nfa_cache_realloc (r->left->str, r->left->str_len + r->right->str_len)); if (!new_str && (r->left->str_len + r->right->str_len)) { state->err = REG_ESPACE; longjmp (state->err_escape, 1); } r->left->str = new_str; mem_move (r->left->str, r->right->str, r->right->str_len); r->left->str_len += r->right->str_len; t = r->left; r->left = 0; r->right = 0; rx_free_exp (r); r = t; } return r; } static struct rx_exp_node * rx_optimize (struct rx_parse_state * state, struct rx_exp_node * n) { if (!n) return 0; if (!n->observed) return n; if ( (n->type != r_alternate) && (n->type != r_concat)) { if (n->left) n->left = rx_optimize (state, n->left); /* r_right_concat not optimized for now. */ if (n->right) n->right = rx_optimize (state, n->right); return n; } { struct rx_exp_node * l; struct rx_exp_node * r; int l_raisable; int r_raisable; l = rx_optimize_combination_left (state, n->type, n->left); r = rx_optimize_combination_right (state, n->type, n->right); if (l) l_raisable = ( (l->type == n->type) && l->right && (!l->right->observed)); else l_raisable = 0; if (r) r_raisable = ( (r->type == n->type) && r->left && (!r->left->observed)); else r_raisable = 0; if (l && !l->observed && r_raisable) { struct rx_exp_node * tmp; tmp = r->right; r->right = r->left; r->left = l; r = rx_optimize_strings (state, r); n->right = tmp; n->left = r; r->observed = 0; n->observed = 1; return n; } else if (r && !r->observed && l_raisable) { struct rx_exp_node * tmp; tmp = l->left; l->left = l->right; l->right = r; n->left = tmp; n->right = l; l->observed = 0; n->observed = 1; return n; } else if (l_raisable && r_raisable) { struct rx_exp_node * leafs[4]; leafs[0] = l->left; leafs[1] = l->right; leafs[2] = r->left; leafs[3] = r->right; n->left = leafs[0]; n->right = l; l->left = r; r->left = leafs[1]; r->right = leafs[2]; l->right = leafs[3]; n->observed = 1; l->observed = 1; r->observed = 0; return n; } else { n->left = l; n->right = r; return n; } } } /*(c rx_parse) * int rx_parse (struct rx_exp_node ** rx_exp_p, * int * nsub, * const char *pattern, * int size, * int extended_p, * int newline_separates_lines, * int dfa_only, * int cset_size, * t_uchar *translate); * * `rx_parse' translates a string into a regexp expression tree. The * syntax of a regexp is introduced in xref:"An Introduction to Posix * Regexps" and defined formally in xref:"Describing Regexps * Formally". * * Return 0 upon success, and an error code upon failure. * See xref:"Rx Error Codes". * * `*rx_exp_p' returns the compiled expression. * * `*nsub' returns the number of parenthesized subexpressions with * a non-0 subexpression number. * * `pattern' is the regexp string to be compiled. * * `size' is the length of that string. * * If `extended_p' is 0, then use "Basic Regexp Expression" syntax, * otherwise use "Extended Regular Expression" syntax. * * `newline_separates_lines' controls whether or not the input string * (the string being compared to the pattern) is treated as one line * of text, or as any number of lines each ending with a newline * ({'\n'}) character. If `newline_separates_lines' is not 0, then * the pattern dot ({'.'}) and complementary character sets such as * `[^a]' do not match newline characters (so that what they match is * never more than one line of text). For consistency, when compiling * with `newline_separates_lines' the anchor expression `^' should * match immediately after a newline and the anchor expression `$' * should match immediately before a newline -- but the rules about * anchors don't effect compilation. If `newline_separates_lines' is * 0, then {'.'} and complementary character sets do include newline * and anchors should match only at the beginning and end of a string. * * If `dfa_only' is not 0, compile pure regular expressions, not * regexps. This means that operators which are not valid in regular * expressions are interpreted as ordinary characters. Those * operators are: `re{x,y}' (intervals), `^re' and `re$' (anchors), * and `\' (backreferences). * * `cset_size' is the size of the character set (usually 256). * * `translate' is an array of `cset_size' characters, defining a * mapping from characters to characters. The compiler reads * `pattern' through this mapping (i.e., parses according to * `translate[*pattern]' instead of simply `*pattern'). Additionally, * the parsed pattern is modified to achieve the effect of translating * a target string (during a match) through the same translation. * Conceptually, the functions that perform matching could translate * the input string being compared to the pattern by using something * like `translate[string[x]]' but in fact, the same effect is * achieved by specially compiling the pattern. If `0' is passed for * `translate', the effect is the same as passing an identity table in * which `translate[c] == c' for all characters. */ int rx_parse (struct rx_exp_node ** rx_exp_p, int * nsub, const t_uchar * pattern, size_t size, int extended_p, int newline_separates_lines, int dfa_only, int cset_size, const t_uchar * translate) { struct rx_parse_state state; mem_set ((t_uchar *)&state, 0, sizeof (state)); state.pos = pattern; state.pattern = pattern; state.size = size; state.extended_p = extended_p; state.newline_separates_lines = newline_separates_lines; state.cset_size = cset_size; if (!translate) translate = rx_id_translation_table; state.translate = translate; state.at_beg = 1; state.exp_number = 1; state.dfa_only = dfa_only; state.cut_count = 1; if (setjmp (state.err_escape)) { rx_free_exp (state.root); cleanup_parse_state (&state); return state.err; } else { rx_parse_alt (&state.root, &state, 0); *nsub = state.exp_number; if (rx_scan_op_ahead (&state, ')')) { state.err = REG_ERPAREN; longjmp (state.err_escape, 1); } if (!rx_eop (&state)) { state.err = REG_BADPAT; longjmp (state.err_escape, 1); } *rx_exp_p = rx_optimize (&state, state.root); /* *rx_exp_p = state.root; */ cleanup_parse_state (&state); return 0; } } /* Predefined Translation Tables */ /*(c rx_id_translation_table :category variable) * t_uchar rx_id_translation_table[256]; * * An identity mapping of the entire character set. * That is: * * rx_id_translation_table[N] == N * * See xref:"rx_parse". */ const t_uchar rx_id_translation_table[256] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255 }; /*(c rx_case_fold_translation_table :category variable) * t_uchar rx_case_fold_translation_table[256]; * * An identity mapping of the entire character set. * That is: * * rx_id_translation_table[N] == N * * except for `N' which are upper-case letters. * For those: * * rx_id_translation_table[N] == char_to_lower (N) * * See xref:"rx_parse". */ const t_uchar rx_case_fold_translation_table[256] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255 }; tla-1.3.5+dfsg/src/hackerlab/rx-posix/regexps.h0000644000175000017500000000114110457621774020071 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:41:39 2001 (regexps.h) */ /* regexps.h - * **************************************************************** * Copyright (C) 2000 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__RX_POSIX__REGEXPS_H #define INCLUDE__RX_POSIX__REGEXPS_H #include "hackerlab/os/sys/types.h" #include "hackerlab/rx/nfa-cache.h" #include "hackerlab/rx/dfa-cache.h" #include "hackerlab/rx-posix/regex.h" /* automatically generated __STDC__ prototypes */ #endif /* INCLUDE__RX_POSIX__REGEXPS_H */ tla-1.3.5+dfsg/src/hackerlab/rx-posix/posix-regexps.doc0000644000175000017500000003422010457621774021553 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:57:16 2001 (posix-regexps.doc) */ /************************************************************************ *(h0 "Posix Regexps") * * |Posix| |Posix.2| |1003.2| |ANSI/IEEE 1003.2| |ISO/IEDC 994502| * |regular expression notation| * |regexp| * |regular expression| * * The *Posix.2* standard (*ISO/IEC 994502: 1993 (ANSI/IEEE Std 1003.2 * - 1992*)), section *2.8*) specifies the syntax and semantics of a * ``Regular Expression Notation''. Appendix ``B.5'' defines a ``C Binding * for RE Matching'' which includes the functions `regcomp' (to compile * a Posix regexp), `regexec' (to search for a match), `regerror' (to * translate a regexp error code into a string), and `regfree' (to * release storage associated with a compiled regexp). * * The Hackerlab C library provides "Rx", an implementation of * Posix.2 regexp functions (with some extensions). * * This chapter describes that interface. An appendix to this manual * contains an introduction to Posix regexps. (See xref:"An * Introduction to Posix Regexps".) If you are unfamiliar with * regexps, reading that appendix before reading this chapter may be * helpful. * * This chapter begins with documentation for the standard Posix * functions (and some closely related non-standard extensions). If * you are looking for programmer reference manual, see xref:"Posix * Regexp Functions". * * The Posix standard for regexps is precise. On the other hand, it * is often implemented incorrectly and almost never implemented * completely. A discussion of the relation between the Posix * standard and Rx can be found in xref:"Rx and Conformance to the * Posix Standard". * * Obtaining good performance from regexp matchers is sometimes * complicated: they are easy to understand and use in many common * situations, but they require careful attention in applications that * use complicated regexps and in applications that use regexp * matching heavily. Some general advice can be found in xref:"Rx * and the Performance of Regexp Pattern Matching". * * Finally, if you are performance tuning a regexp-intensive * application, you'll need to understand the non-standard interfaces * in xref:"Tuning Posix Regexp and XML Regular Expression Performance". */ /*(menu) */ /*(include-documentation "posix.c") */ /************************************************************************ *(h1 "Rx and Conformance to the Posix Standard") * * Posix specifies the behavior of the C regexp functions quite * precisely. Rx attempts to honor this specification to the * greatest extent possible in a portable implementation. * There are two areas of conformance that are worthy of note: * the question of what is matched by a given regexp, and the * question of how regexp matching interacts with Posix locales. * * The question of ``what is matched'' is worthy of note because * obtaining correct behavior has proven to be extremely difficult -- * few implementations succeed. The implementation of Rx has been * carefully developed and tested with correctness in mind. * * The question of how regexps and locales interact is worthy of note * because it is impossible to completely implement the behavior * specified by Posix in a portable implementation (i.e., in an * implementation that is not intimately familiar with the * non-standard internals of a particular implementation of the * standard C library). * */ /************************************************************************ *(h2 "What is Matched by a Posix Regexp") * * Posix requires that when `regexec' reports the position of a * matching substring, it must report the first-occurring (``leftmost'') * match. Of the possible first-occuring matches, the longest match * must be returned. This is called the "left-most longest rule". * * Posix requires that when `regexec' reports the position of a * substring matched by a parenthesized subexpression, it must report * the last substring matched by that subexpression. If one * parenthesized expression (the ``inner expression'') is enclosed * in another (the ``outer expression'') and the inner expression did * not participate in the last match of the outer expression, then * no substring match may be reported for the inner expression. * * Finally, Posix requires that when regexec determines what * each subpattern matched (regardless of whether the subpattern is * surrounded by parentheses), if there is more than one possibility, * regexec must choose the possibility that first maximizes the length * of substrings matched by the outermost subpatterns, from * left-to-right, and then recursively apply the same rule to * inner subpatterns. However, this rule is subordinate to the * left-most longest rule: if an earlier-occuring or longer overall * match can be obtained by returning a non-maximal match for some * subpattern, `regexec' must return that earlier or longer match. * * This combination of constraints completely determines the return * value of `regexec' and describes the behavior of Rx. Many other * implementations do not conform to the standard in this regard -- * in exceptional situations, compatibility issues may arise when * switching between regexp implementations. */ /************************************************************************ *(h2 "Rx and Posix Locales") * * Posix requires that a character set containing a multi-character * collating element be treated specially. For example, if the * character sequence `ch' is a collating element, then the regexp: * * [[.ch.]] * * will match `ch'. On the other hand, if `ch' is not a collating * element, the same expression is illegal. Similarly, an expression * like: * * [a-z] * * should match all collating elements which collate between ``a'' and * ``z'' (inclusively), including multi-character collating elements * that collate between ``a'' and ``z''. * * Unfortunately, Posix provides no portable mechanism for determining * which sequences of characters are multi-character collating * elements, and which are not. Consequently, Rx operates as if * multi-character collating elements did not exist. * * Posix also defines a character set construct called an ``equivalence * class'': * * [[==]] where is a collating element * * An equivalence class stands for the set of all collating elements * having the same primary collation weight as `'. Unfortunately, * Posix provides no portable mechanism for determining the primary * collation weight of any collating element. Consequently, Rx * implements the equivalence class construct by returning an error * from `regcomp' whenever it is used. * * Posix requires that in a character set, a range of characters such * as: * * [a-z] * * includes all characters that collate between `a' and `z' in the * current locale. Some people argue that this behavior is confusing: * that character ranges should be based on the encoding values of * characters -- not on the rules of collation. Because of * differences in collation, Posix advises that character ranges are a * non-portable construct: portable programs should not use them at * all! * * Rx conforms to Posix by using collation order to interpret * character ranges (with the exception that Rx always behaves as if * there are no multi-character collating elements). Using the C * locale when calling `regcomp' and `regexec' ensures that character * ranges will be interpreted in a way consistent with the ASCII * character set. * */ /************************************************************************ *(h1 "Rx and the Performance of Regexp Pattern Matching") * * * The performance (speed and memory use) of any Posix regexp matcher * (including Rx) is a complicated subject. Programmers who want to use * regexps will benefit by understanding the issues, at least in * broad outline, so that they can avoid pitfalls, so they can make * the best possible use of a particular implementation (Rx, in this * case), and so they know where to delve deeper when performance * issues become particularly important. * * Traditionally, many programmers use regexps as if they were always * computationally *inexpensive*. This is naive. Some uses of * regexps are inexpensive, others are intractable. Many fall * somewhere in the middle. Which uses fall into which cases varies * between implementations. * */ /************************************************************************ *(h2 "Posix Regexp Performance in General") * * This section describes the performance of Posix regexp matching * in general -- it is not specific to Rx. * * Posix regexp pattern matching, in its full generality, is a * computationally expensive process. In some cases, involving only * moderately sized regexps, it is intractably expensive, regardless of * what implementation is being used. Thus, one should never write * programs with the assumption that `regexec' will always return * normally in a reasonable amount of time. (Rx includes non-standard * functionality which can be used to interrupt a call to `regexec' * after a time-out. See xref:"Escaping Long-Running Matches".) * * On the other hand, for many very simple regexps, Posix regexp * matching is very inexpensive, again, (nearly) regardless of * implementation. For example, if a regexp is simply a string of * literal characters, searching for a match is almost certain to be * fast. * * Implementations of Posix regexps often differ in the set of * optimizations they provide. Simplistic implementations, containing * few optimizations, perform well for small and simple regexps, but * poorly in many other cases. Sophisticated implementations can * perform very well on even large regexps if those regexps are true * regular expressions or are nearly true regular expressions. (For * an explanation of the distinction between regexps in general and * ``true regular expressions'', see xref:"An Introduction to Posix * Regexps".) * * Implementations of Posix regexps often differ in correctness, and * this has a bearing on performance. Several popular implementations * sometimes give incorrect results. The bugs that cause those errors * also improve the performance of the same matchers on some patterns * for which they give correct results. Thus, programmers choosing an * implementation are sometimes faced with the uncomfortable trade-off * between the best performance bench-mark results, and the best * correctness testing results. In such situations, an important * question is the relevance of the tests: do the bench-mark tests * accurately reflect regexp usage in the target application? What * are the risks of using an incorrect matcher in the application? * Consider whether the better performance of buggy matchers on some * expressions is offset by their considerably worse performance on * other expressions: it is not the case that the buggy * implementations are always faster. * */ /************************************************************************ *(h2 "Posix Regexp Performance in Rx") * * This section describes the performance of Posix regexp matching * in Rx. * * Rx is designed to give excellent performance over the widest * possible range of regexps (including many large, complicated * regexps), but to never sacrifice correctness. While Rx is at least * competitive with most most implementations on most regexps (and * is sometimes much faster), there are some regexps for which Rx * is much slower than other implementations. Often, this difference * can be attributed to the bugs in other implementations which * speed up some cases while getting other cases wrong. This is * something to keep in mind when comparing Rx to other implementations. * * When a trade-off is necessary between memory use and speed, Rx is * designed to allow programmers to choose how much memory to use and * to provide programmers with the tools necessary to tune memory use * for best possible performance. Rx can operate usefully (though * comparatively slowly) with as little as 10-20K of dynamically * allocated memory. As a rule of thumb, Rx's default of * approximately 2MB is suitable even for applications that use * regexps fairly heavily. (See xref:"Tuning Posix Regexp and * XML Regular Expression Performance".) * * Rx contains optimizations targetted for regexps which are true * regular expressions. Rx converts true regular expressions to * deterministic automata and can compare such expressions to a * potentially matching string very quickly. This optimization makes * it practical to use even quite large regular expressions. For more * information, see the the appendix xref:"Data Sheet * for the Hackerlab Rx Posix Regexp Functions". * * Sometimes regexps which are not true regular expressions can be * matched as quickly as if they were true regular expressions. If a * regexp is not a regular expression only because it begins with a * left anchor (`^') and/or ends with a right anchor (`$'), Rx can * match the expression as quickly as a true regular expression. * If, in addition, the regexp contains parenthesized subexpressions, * Rx can use regular expression optimizations if, either, the * `REG_NOSUB' flag is passed to `regcomp', or the `nmatch' parameter * to `regexec' is less than or equal to 1 (i.e., if `regexec' is not * required to report the positions of substrings matched by * parenthesized subexpressions). * * If a regexp is not a regular expression because it contains * backreferences (`\n') or counted iterations (`RE{n,m}'), Rx's DFA * optimizations do not apply in their full generality. Such * regexps run the greatest risk of being slow. * * The Rx implementation of `regcomp' supports a non-standard flag, * `REG_DFA_ONLY', which can be used to disable all regexp constructs * that are forbidden in true regular expressions. See * xref:"regcomp". * * When regexps are being used for lexical analysis, good performance can * often be achieved by using true regular expressions in combination * with the non-standard regexp operator `[[:cut n:]]'. See xref:"The * cut Operator". */ /*(include-documentation "../rx/escape.c") */ tla-1.3.5+dfsg/src/hackerlab/rx-posix/Makefile.in0000644000175000017500000000027710457621774020321 0ustar useruser include $(makefiles)/library-objects.mk ifeq ($(cgs__install_hackerlab),1) include $(makefiles)/install-includes.mk endif # tag: Tom Lord Tue Dec 4 14:52:24 2001 (rx-posix/Makefile.in) # tla-1.3.5+dfsg/src/hackerlab/rx-posix/performance-hints.c0000644000175000017500000001433210457621774022041 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:41:38 2001 (performance-hints.c) */ /* performance-hints.c - * **************************************************************** * Copyright (C) 2000 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ /************************************************************************ *(h0 "Hints for Obtaining Good Performance") * * |performance hints| * This chapter contains some hints for achieving good performance * when using the Posix regexp functions. * */ /************************************************************************ *(h1 "The Complexity of Posix Regexps") * * |complexity of regexps| * |algorithmic complexity of regexps| * Sometimes, programmers code as if "regexp searches are always * fast". For Posix regexps, that is simply not the case, regardless * of what implementation is being used. * * The difficulty can be understood as follows: * * Consider, first, the problem of comparing an entire string to a * Posix regexp. We want to know if the entire string matches. If * the string matches, we want to know the positions of parenthesized * subexpressions. This is the *Posix match problem*. |Posix match problem| * * The computational complexity of the best known algorithms for the * Posix match problem is a function of three things: the particular * regexp being matched, the length of the string being matched, and * the contents of the string being matched. The complexity (the * number of steps needed to complete a match) is a polynomial * function of the length of the string being matched. The degree of * the polynomial is determined by the regexp and is arbitrarily large * (limited only by the length of the regexp itself). There are * optimizations that can reduce the degree of that polynomial, but * those optimizations can be often be thwarted by carefully choosing * the regexp and/or contents of the string being matched. * * The problems only get worse when using the Posix function * `regexec'. `regexec' doesn't try to match an entire string: it * searches for a matching substring (the *Posix search problem*). |Posix search problem| * There are no universally applicable short-cuts for that search: * `regexec' must potentially examine very possible substring. To * search a string of length `N', `regexec' might have to examine * `O(N^3)' substrings. Various heuristic optimizations can usually * reduce the size of the search, but not always. * * In short, though programmers sometimes think "regexp searches are * always fast", in fact, although "many regexp searches are fast", it is also * the case that "some regexp searches are unacceptably slow". */ /*(h1 "Avoiding Regexp Based Denial of Service Attacks") * * |denial of service attacks| * * The complexity of Posix regexp matching is a serious concern for * some applications. If regexps and target strings are part of the * input to your program, some combinations of inputs can cause your * program to run for a ridiculously long time without producing a * useful result. If your application provides a critical service, * this can be the basis of a denial of service attack. Even if your * application is not critical, this can be the basis of confusing and * annoying behavior. * * A possible solution to some kinds of denial of service attacks * |denial of service attacks| is to set a time limit for matches and * interrupt matches that are taking too long. (See xref:"Escaping * Long-Running Matches".) */ /************************************************************************ *(h1 "Using Regexps Carefully") * * |Posix match problem| |cache (DFA)| |DFA cache| * For a careful choice of regexps, with no subexpression position * reporting, the *Posix match problem* can be solved quickly: an * expected case of `O(n)' steps for a string of length `n' with a * worst case of `O(n*k)' where `k' is the length of the regexp. (the * effectiveness of the DFA cache determines whether expected or worst * case behavior is observed) * * Rx helps achieve that level of performance in several ways. * * \1./ True regexps |true regexps| are always that fast. (See xref:"Regexps versus * Regular Expressions".) Whenever possible, use anonymous subexpressions |anonymous subexpression| * |[[:(...:)]]| * rather than parenthesized subexpressions |parenthesized subexpression| |(...)|. * (See xref:"Anonymous Subexpressions".) * * \2./ Expressions compiled with the non-standard regcomp flag `REG_DFA_ONLY' are * always that fast. (See xref:"regcomp".) * * \3./ Fast matches are obtained for regexps which are not true * regexps but which contain no back references |back references| |\n| (`\n'), anchors |anchors| |^| |$| (`^' * or `$') or iterated subexpressions |iterated subexpressions| |{...}| (`RE{n,m}' ) if 0 is passed for * the `preg' argument to regexec (implying that subexpression * positionss will not be returend) * * Rx optimizes the Posix search problem too: * * * \1./ Anchors (`^' and `$') can reduce the number of substrings searched. * Fast solutions to the Posix match problem are usually possible * even if a pattern begins and/or ends with anchors. * * \2./ If a matching string must begin with one of a small set of characters, * substrings which do not begin with those characters are not searched. * * \3./ If a regexp matches only strings of a particular length, only * substrings of that exact length are searched. * */ /************************************************************************ *(h1 "A Strategy for Searching Long Strings") * * |long searches| * The ideas outlined above lead to the following: If your application * searches long strings for regexp matches, and wants to know the * positions of matching subexpressions, a two part strategy may speed * things up: * * \First,/ search for a matching substring without asking for * subexpression positions (pass 0 for `preg'). * * \Second,/ having found a matching substring, re-match that * substring, asking for subexpression positions. * * Note that this strategy doesn't help if the regexp contains back * references, and it doesn't guarantee that searching will be fast. */ tla-1.3.5+dfsg/src/hackerlab/rx-posix/match-regexp.h0000644000175000017500000001516610457621774021014 0ustar useruser/* match-regexp.h - low-level functions for comparing a string to a regexp * **************************************************************** * Copyright (C) 1998, 2000 Thomas Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__RX_POSIX__MATCH_REGEXP_H #define INCLUDE__RX_POSIX__MATCH_REGEXP_H #include "hackerlab/machine/types.h" #include "hackerlab/rx/tree.h" /* rx_off_t An internal type used by the Posix interface as `regoff_t'. * * (`regoff_t' is required by Posix.2) Used to represent * offsets to substrings within a string matched by * `regexec'. `regoff_t' is a signed arithmetic type * that can hold the largest value that can be stored in * either `off_t' or `long'. * */ typedef long rx_off_t; struct rx_registers { rx_off_t rm_so; /* Byte offset from string's start to substring's start. */ rx_off_t rm_eo; /* Byte offset from string's start to substring's end. */ int final_tag; /* In register 0 of an array of registers, this field * is set to the state label of the last superstate encountered * during a match. */ }; /* struct rx_context_rules * * An argument to `rx_basic_make_solutions' used to specify * the behavior of `^', `$', and backreferences. */ struct rx_context_rules { t_uchar newline_anchor; /* If true, an anchor at a newline matches.*/ t_uchar not_bol; /* If set, the anchors ('^' and '$') don't */ t_uchar not_eol; /* match at the ends of the string. */ t_uchar case_indep; }; /* struct rx_solutions; * * A lazilly computed stream of solutions for an expression or * subexpression compared to a string. */ struct rx_solutions; /************************************************************************ *(paragraphs) */ /*(c rx_vmfn :category type) * typedef int (*rx_vmfn) (void * closure, * const t_uchar ** burst, * rx_off_t * len, * rx_off_t * offset, * rx_off_t start, rx_off_t end, rx_off_t need); * * An `rx_vmfn' is passed to `rx_make_solutions' and used by * `rx_next_solution' to access the input string being compared to a * regexp. The purpose of this function is to permit the calling * program to only keep part of the input string in memory, and to * keep the input string in non-contiguous regions in memory. * * When called, `rx_vmfn' is passed: * * `closure' -- the opaque parameter passed to `rx_make_solutions'. * * `burst' -- an output parameter that will point to part of the input * string. The pointer returned in this parameter must remain valid * until the next call to `rx_vmfn' or `rx_contextfn' for the same * call to `rx_next_solution'. * * `len' -- an output parameter; the length of the string returned in * `*burst'. * * `offset' -- an output parameter; the position of `*burst' within * the input string (e.g., 0 for the beginning of the input string, * 9 if `*burst' is the tenth character of the input). * * `start' through `end' are the input positions requested by Rx. * `need' is the input position that must be returned. `rx_vmfn' is * permitted to return any substring of the input that contains * `need', but the performance of Rx itself is best if returns a * substring containing at least the entire range from `start' to * `end'. The precise performance implications of a particular * implementation of `rx_vmfn' are application specific. * * Note that Rx may access parts of the string out of order and may * visit the same part of the string more than once. * * This function should return 0 on success, and some other value on * error. */ typedef int (*rx_vmfn) (void * closure, const t_uchar ** burst, rx_off_t * len, rx_off_t * offset, rx_off_t start, rx_off_t end, rx_off_t need); /*(c rx_contextfn :category type) * typedef int (*rx_contextfn) (void * closure, * struct rx_exp_node * node, * rx_off_t start, rx_off_t end, * struct rx_registers * regs); * * An `rx_contextfn' is passed to `rx_make_solutions' and used by * `rx_next_solution' to access the input string being compared to a * regexp. The purpose of this function is to permit the calling * program to only keep part of the input string in memory, and to * keep the input string in non-contiguous regions in memory. * * `rx_contextfn' is responsible for evaluating subexpressions * which are anchors (`^' and `$') and subexpressions which are * backreferences (e.g. `\1'). * * When called, `rx_contextfn' is passed: * * `closure' -- the opaque parameter passed to `rx_make_solutions'. * * `node' -- The regexp syntax tree node of the expression to match. * * `start' and `end' -- the positions within the input string (from * `start' to `end-1') that must match `node'. * * `reg' -- subexpression position information for preceeding * subexpressions. This is used for backreferences. Note that if a * previous subexpression was not matched, its starting and ending * positions will be recorded as -1. * * This function should return 1 if the subexpression matches, 0 * otherwise. */ typedef int (*rx_contextfn) (void * closure, struct rx_exp_node * node, rx_off_t start, rx_off_t end, struct rx_registers * regs); /* automatically generated __STDC__ prototypes */ extern struct rx_solutions * rx_basic_make_solutions (struct rx_registers * regs, struct rx_exp_node * expression, struct rx_exp_node ** subexps, int nsub, rx_off_t start, rx_off_t end, struct rx_context_rules * rules, const t_uchar * str, int small_p); extern void rx_basic_free_solutions (struct rx_solutions * solns); extern int rx_next_solution (struct rx_solutions * solns); extern int rx_solutions_final_tag (struct rx_solutions * solns); extern struct rx_solutions * rx_make_solutions (struct rx_registers * regs, int cset_size, struct rx_exp_node * expression, struct rx_exp_node ** subexps, int nsub, rx_off_t start, rx_off_t end, int interval_x, rx_vmfn vmfn, rx_contextfn contextfn, void * closure, int small_p, int certainly_fits, int certain_final_tag); extern void * rx_solutions_closure (struct rx_solutions * solns); extern void rx_free_solutions (struct rx_solutions * solns); extern int rx_simplify_rexp (struct rx_exp_node ** answer, int cset_size, struct rx_exp_node * node, struct rx_exp_node ** subexps); extern int rx_analyze_rexp (struct rx_exp_node *** subexps, size_t * re_nsub, struct rx_exp_node * node); #endif /* INCLUDE__RX_POSIX__MATCH_REGEXP_H */ tla-1.3.5+dfsg/src/hackerlab/rx-posix/errnorx.h0000644000175000017500000000305710457621774020123 0ustar useruser/* errnorx.h - error decls for rx * **************************************************************** * Copyright (C) 1998, 2000 Thomas Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__RX_POSIX__ERRNORX_H #define INCLUDE__RX_POSIX__ERRNORX_H #include "hackerlab/machine/types.h" extern const t_uchar * rx_error_msg[]; #define RX_ERRNO_LIST \ RX_ERRNO(REG_NOERROR, "no error") \ RX_ERRNO(REG_NOMATCH, "no match") \ RX_ERRNO(REG_MATCH_INTERRUPTED, "match interrupted") \ RX_ERRNO(REG_BADPAT, "invalid regular expression") \ RX_ERRNO(REG_ECOLLATE, "invalid collation character") \ RX_ERRNO(REG_ECTYPE, "invalid character class name") \ RX_ERRNO(REG_EESCAPE, "trailing backslash") \ RX_ERRNO(REG_ESUBREG, "invalid back reference") \ RX_ERRNO(REG_EBRACK, "unmatched [ or [^") \ RX_ERRNO(REG_EPAREN, "unmatched (, \\(, ) or \\)") \ RX_ERRNO(REG_EBRACE, "unmatched \\{") \ RX_ERRNO(REG_BADBR, "invalid content of \\{\\}") \ RX_ERRNO(REG_ERANGE, "invalid range end") \ RX_ERRNO(REG_ESPACE, "memory exhausted") \ RX_ERRNO(REG_BADRPT, "invalid preceding regular expression") \ RX_ERRNO(REG_EEND, "premature end of regular expression") \ RX_ERRNO(REG_ESIZE, "regular expression too big") \ RX_ERRNO(REG_ELPAREN, "unmatched (, or \\(") \ RX_ERRNO(REG_ERPAREN, "unmatched ) or \\)") enum rx_errno { #undef RX_ERRNO #define RX_ERRNO(A,B) A, RX_ERRNO_LIST }; /* automatically generated __STDC__ prototypes */ #endif /* INCLUDE__RX_POSIX__ERRNORX_H */ tla-1.3.5+dfsg/src/hackerlab/rx-posix/dup-max.h0000644000175000017500000000075010457621774017774 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:41:39 2001 (dup-max.h) */ /* dup-max.h - * **************************************************************** * Copyright (C) 2000 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__RX_POSIX__DUP_MAX_H #define INCLUDE__RX_POSIX__DUP_MAX_H #define RX_DUP_MAX 255 /* automatically generated __STDC__ prototypes */ #endif /* INCLUDE__RX_POSIX__DUP_MAX_H */ tla-1.3.5+dfsg/src/hackerlab/rx-posix/rx-posix-data-sheet.doc0000644000175000017500000004164010457621774022550 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:57:15 2001 (rx-posix-data-sheet.doc) */ /************************************************************************ *(h0 "Data Sheet for the Hackerlab Rx Posix Regexp Functions" * :appendix) * insert*/ Package: Hackerlab Rx (a Posix regexp matcher) Supplier: regexps.com Function: Hackerlab Rx provides the Posix regexp functions (regcomp, regexec, regfree, and regerror). In addition, closely related non-standard functions provide extended functionality. Key Features: Rx is fast and accurate. Non-standard extensions include support for searching strings not terminated by 0 (regnexec), support for asynchronously interrupting long-running searches (rx_poll), non-capturing parentheses in regexps, the regexp operator `cut' for efficient lexical analysis, and support for tuning memory usage by search functions (a time/space trade-off). Extensive unit tests and validation tests are included. Postscript and HTML documentation is included. Licensing: Hackerlab Rx is part of the Hackerlab C Library, which is distributed under the terms of the GNU General Public License, Version 2, as published by the Free Software Foundation. Alternative licenses (such as licenses permitting binary-only re-distribution) can be purchased from regexps.com. Prerequisites: standard C compiler Posix libc.a (standard C library) GNU Make Recommended and Disrecommended Applications: Rx is for applications needing the standard Posix functions such as `regcomp' and `regexec'. Versions of these functions found in several implementations of the standard C library are buggy, slow, or both slow and buggy. Rx provides a correct, extended, high-performance alternative. Rx is recommended for applications requiring good performance over the widest possible range of regexps. Many other implementations optimize some simple cases, but perform either poorly or incorrectly in difficult cases. Rx is recommended for applications which benefit by being scalable from low-memory environments to large-memory environments. Rx permits programmers to tune its memory use over a wide range, trading space for time. Rx is recommended for applications which accept as input either regexps or strings to search but which must not be subject to denial of service attacks. The reason is that the standard function `regexec' is intractable for some conceivable inputs: In any correct implementation, if regexec is called with certain inputs, it will not return in any reasonable amount of time. Rx supports returning from `regexec' after a time-out has expired, to protect applications from malicious regexp parameters. Rx is recommended for applications which use regexps for lexical analysis. Rx supports a non-standard regexp operator for lexical analysis (the "cut" operator). Rx is NOT recommended for applications running with severely limited amounts of memory (see the sections "Contribution to Executable Size" and "Run-time Allocation Requirements" below.) Rx is NOT recommended for applications in which the amount of regexp compilation dominates the amount of regexp search. The Rx regexp compiler is not the fastest available. On the other hand, this recommendation is subordinate to correctness: if regexp accuracy is more important than regexp speed, Rx is recommended even in cases where regexp compilation dominates regexp search. Finally, Rx is recommended for programs that can benefit by using regexps, but that might otherwise be precluded from using regexps by the performance limitations of older regexps matchers. Rx can efficiently handle regexps which are significantly larger and more complex than can be handled by most other matchers. Limitations: Multi-character collating sequences are not supported. Character equivalence class expressions are not supported. The trivial function `regerror', which translates regexp error codes to strings, has not been internationalized. Test coverage is extensive, but not (yet) 100%. Rx has large executable size and run-time allocation requirements when compared to some implementations. (However, substantially smaller implementations are often buggy and are, in general, slower.) Rx is single threaded. In multi-threaded applications, programs must ensure that Rx is active in only one thread at a time. (This is likely to be fixed in future releases.) Contribution to Executable Size: On a Pentium based machine, running gcc (egcs version 2.91.66) we compiled this simple (nonsense) program and linked it against the Hackerlab C Library: void regexec(void); void regcomp(void); void regerror(void); int main () { regexec(); regcomp(); regerror(); return 0; } Both the library and the program were compiled with the "-g" option. Total executable size: text data 104992 20112 The following list of object files from the Hackerlab C library were linked into the executable: alloc-limits.o bits-tree-rules.o bits.o bitset-tree.o bitset.o char-class-locale.o char-class.o char-cmp-locale.o coding.o cvt.o dfa-cache.o dfa.o errnorx.o escape.o hashtree.o match-regexp.o mem.o must-malloc.o nfa-cache.o nfa.o panic-exit.o panic.o posix.o re8-parse.o str.o super.o tree.o uni-bits.o The contribution of those files to the executable size is: text data 103387 19888 Sizes may differ slightly from the latest release of Rx. Sizes will obviously vary with platform compiler, and compiler options. External Linkage Dependencies: When compiled under FreeBSD 3.0, the simple program used to test executable sizes depends on the following symbols defined in "libc": _CurrentRuneLocale _DefaultRuneLocale ___runetype _exit free longjmp malloc realloc setjmp strcoll write The exact dependencies may, of course, differ from system to system. The symbols `_CurrentRuneLocale', `_DefaultRuneLocale', and `__runetype' are used in FreeBSD to implement macros in the `ctype(3)' family. Accuracy (Comparisons): Rx is distributed with a test suite. The tests consist of 385 distinct regexps. Of those expressions, 23 are invalid expressions, 362 are valid expressions. For valid expressions, the tests include a string to compare to the compiled expression, and the expected results from `regexec'. Rx passes all of those tests. A subset of those tests, consisting of 371 regexps, is based on the Posix.2 standard. Those tests do not use any of Rx's extensions to Posix. The tests were designed by hand to systematically exercise all features of the Posix regexp language. We tested two alternative implementations using only the Posix.2 tests. These were the libc implementation distributed with FreeBSD 3.0, and GNU regex 0.12. (There are many versions of GNU regex in distribution, all numbered "0.12". We used one found in libc, the GNU C Library, version 2.1, as distributed with a popular and recent version of Linux.) The FreeBSD implementation failed 14 of 371 tests. These failures were: 1 invalid regexp successfully compiled 6 valid regexps failed to compile (all 6 appear to be caused by a single bug) 2 calls to `regexec' failed to return the longest possible match 5 calls to `regexec' returned incorrect positions for matching subexpressions GNU regex failed 22 of 371 tests. These failures were: 8 invalid expressions compiled successfully (apparently due to 3 or 4 bugs) 10 valid expressions failed to match matching strings or matched incorrect strings (apparently due to 2 or 3 bugs) 4 calls to `regexec' returned incorrect positions for matching subexpressions Execution Speed: The performance characteristics of Posix regexp matchers are complex and difficult to summarize. Performance varies wildly depending on the types of regexps being used, the details of the strings being searched for matches, and the pattern of calls made to regexp functions. Because of the complexity of the subject, we are wary of publishing benchmark comparisons of regexp matchers. There is no industry-wide agreement on a realistic set of benchmarks. There are not even any proposed realistic benchmarks. We are perfectly capable of constructing benchmarks that would purport to show "Rx always wins big", "Rx always looses big", and benchmarks that would give mixed results. None of those would legitimately inform anyone of what to expect from Rx or any other regexp matcher. Nevertheless, it is our belief, based on our internal measurements, on our experience with Rx, and on our understanding of the implementation issues involved, that Rx is the best performing matcher available. Moreover, the performance advantages of Rx are so great, in some cases, as to extend the usefulness of regexp pattern matching well beyond its traditional applications. Below, we have provided qualitative and quantitative information to back up this assertion. *Correctness Before Speed* In general, the implementation of Rx emphasizes correctness first, and performance second. Subject to that constraint, considerable effort has gone into achieving the best possible performance over the widest range of expressions. Emphasizing correctness has important implications for performance. Some popular regexp matchers contain some interesting bugs: the bugs cause those matchers to give incorrect results for some patterns, but also speed up some cases when the matchers give correct results. That implies that when comparing implementations, correctness and performance can not be regarded as separate issues: fixing the bugs in an implementation can drastically alter its performance characteristics. *Deterministic Finite Automata* Rx is a "DFA based" implementation. That means that, whenever possible, Rx tests for a matching pattern or sub-pattern using a single pass scan of the target string rather than an exhaustive, backtracking search. In some cases, correctness demands an exhaustive backtracking search. Rx excels when DFA optimizations apply. When compiled with optimization, the DFA routines scan a target string at a cost of approximately 12 instructions per character (provided the DFA cache is sufficiently large). As a result, for an interesting and useful subset of regexps in general, namely true regular expressions, regexp comparison is not significantly more expensive than `strcmp', and regexp searching is not significantly more expensive than `strstr' (excluding implementations of `strstr' which use sub-linear search techniques). The reference manual describes the conditions under which DFA optimizations apply. When a pattern demands a backtracking search, but some of its sub-patterns permit DFA optimizations, Rx uses DFAs for those sub-patterns. In a number of cases, Rx is able to apply inexpensive heuristics to "short-cut" an exhaustive backtracking search without sacrificing correctness. *Timing Demonstrations* Here are some examples that illustrate some of the performance advantages of Rx. These are not benchmarks, for reasons outlined above. These examples were specifically designed to show off some of Rx's strengths. To generate these results, we used a simple program called `pseudo-grep'. `pseudo-grep' accepts a regexp as a command line argument and compiles that regexp once. It reads lines of input from its standard input using `fgets'. It compares each line to the expression using `regexec'. If a line matches, that line is printed on standard output, with brackets surrounding the matching text. We compiled `pseudo-grep' three times: once using Rx, once using libc under FreeBSD 3.0, and once using `GNU regex 0.12' (as obtained from "ftp.gnu.org"). We ran the three programs on two examples. In the first example, we searched `/usr/dict/words' (a dictionary containing one word per line) for words that can be spelled using hexadecimal digits, substituting `0' for `O', `1' for `I' and `L, 5 for `S', and `6' for `G'. The regexp used for this example was: "^[a-fA-FoOiIlLsSgG]+$" In the second example, we searched a large file of C source code for C keywords. The regexp used for this example was: "(if|else|while|for|case|switch|default|char|\ int|long|float|double|struct|enum|union|goto\ |break|continue)" Hexadecimal C Keywords words ---------------------------------- Rx 0.05/0.04/0.02 0.29/0.20/0.09 FreeBSD 0.17/0.16/0.02 2.06/2.06/0.00 GNU regex 0.18/0.12/0.06 2.18/2.13/0.04 ---------------------------------- real/user/system time (seconds) Run-time Allocation Requirements: The amount of memory allocated by Rx at run-time is dominated by the size of two caches: the "nfa cache" and the "dfa cache". Roughly speaking, the "nfa cache" limits the quantity of compiled regexps that are re-used across calls to "regcomp"; the size of the "dfa cache" limits the number of DFA transition tables dynamically constructed by "regexec". The sizes of these caches are independent and under application control. They may be varied, trading space for time. By default, both cache sizes are set to an advisory limit of 1MB. (This is an "advisory limit" because it may be exceeded when necessary for correct operation. Except in rare circumstances, actual cache sizes closely approximate the advisory limit.) The Rx test suite for Posix regexps tests successfully with with advisory cache limits as small as 10K for each cache, and as large as 8MB for each cache, and exhibits the expected space-for-time trade-off. Because of the complex nature of regexp performance, there is no simple, fixed relation between cache sizes and run-time. The exact trade-off will depend on the regexp usage patterns of your application and is best determined by experimentation. The following table illustrates the space/time trade-off in action. The program `test-rx' uses 385 distinct regexps. Of those expressions, 23 are invalid expressions, 362 are valid expressions. For valid expressions, the tests include a string to compare to the compiled expression, and the expected results from `regexec'. It should be noted that the test suite includes highly artificial tests which are specifically designed to be very expensive to match. Thus, the time-per-regexp exhibited by `test-rx' is not typical of regexp usage in general. To generate the data in the table, the test program was run 3 times, varying the size of the NFA and DFA caches. Within each run, each test case was repeated 3 times. These repetitions create opportunities for the caches to impact performance dramatically. Six numbers are reported for each run: the advisory limit on the size of both the NFA and DFA caches; the actual amount of memory used by each of the caches; and the real, user, and system times consumed. advisory NFA/DFA cache size real/user/system limits high water mark times (seconds) (both caches) (bytes) -------------------------------------------------------------- 32K 32863 / 56764 201.0 / 188.0 / 12.4 64K 65632 / 65580 41.0 / 37.8 / 2.6 1MB (default) 237170 / 1048600 4.3 / 4.1 / 0.0 8MB 241085 / 3183432 4.2 / 4.0 / 0.1 INTERPRETATION For this test program: A DFA cache size of 32K is too small. In order to complete the tests successfully, Rx transiently allocated 55.4K to the DFA cache. Effective time/space trade-offs are evident between 32K, 64K, and 1MB caches. A cache size of 8MB is too large. Rx used more memory than with 1MB caches, but there was no significant speed up. Support: To purchase an alternative license, request additional features, or for any kind of support assistance, you can contact us at "hackerlab@regexps.com" or via our web site "www.regexps.com". We can also be reached at (412) 401-5204. We are currently in the midst of relocating from Pennsylvania to California, so at this time, we have no reliable postal address. /*end-insert */ tla-1.3.5+dfsg/src/hackerlab/rx-posix/re8-parse.h0000644000175000017500000000201710457621774020225 0ustar useruser/* re8-parse.h - decls for compiling regexp syntax to rx_exp_node trees * **************************************************************** * Copyright (C) 1998, 2000 Thomas Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__RX_POSIX__RE8_PARSE_H #define INCLUDE__RX_POSIX__RE8_PARSE_H #include "hackerlab/machine/types.h" #include "hackerlab/rx/tree.h" #include "hackerlab/rx-posix/errnorx.h" /* The interface for translating a regexp string to * a regexp syntax tree. */ extern const t_uchar rx_case_fold_translation_table[]; extern const t_uchar rx_id_translation_table[]; /* automatically generated __STDC__ prototypes */ extern int rx_parse (struct rx_exp_node ** rx_exp_p, int * nsub, const t_uchar * pattern, size_t size, int extended_p, int newline_separates_lines, int dfa_only, int cset_size, const t_uchar * translate); #endif /* INCLUDE__RX_POSIX__RE8_PARSE_H */ tla-1.3.5+dfsg/src/hackerlab/rx-posix/errnorx.c0000644000175000017500000000142610457621774020114 0ustar useruser/* errnorx.c - error codes for rx * **************************************************************** * Copyright (C) 1998, 2000 Thomas Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/rx-posix/errnorx.h" /************************************************************************ *(h0 "Rx Error Codes" * :includes ("rx-posix/errnorx.h")) * */ /*(c rx_error_msg) * extern const t_uchar *rx_error_msg[]; * * `rx_error_msg' is an array mapping error codes to strings. This is * useful with the return values of `regcomp', `regncomp', `regexec', * `regnexec', and `rx_parse'. */ const t_uchar *rx_error_msg[] = { #undef RX_ERRNO #define RX_ERRNO(A,B) B, RX_ERRNO_LIST }; tla-1.3.5+dfsg/src/hackerlab/rx-posix/PLUGIN/0000755000175000017500000000000010457621774017244 5ustar userusertla-1.3.5+dfsg/src/hackerlab/rx-posix/PLUGIN/REQ0000644000175000017500000000003710457621774017616 0ustar useruserrx rx-posix rx-posix libboot tla-1.3.5+dfsg/src/hackerlab/rx-posix/posix.c0000644000175000017500000010761610457621774017567 0ustar useruser/* posix.c - posix regexp compatibility functions * **************************************************************** * Copyright (C) 1998, 2000 Thomas Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/os/malloc.h" #include "hackerlab/bugs/panic.h" #include "hackerlab/char/char-class.h" #include "hackerlab/char/str.h" #include "hackerlab/mem/mem.h" #include "hackerlab/rx/tree.h" #include "hackerlab/rx/escape.h" #include "hackerlab/rx/nfa-cache.h" #include "hackerlab/rx/dfa.h" #include "hackerlab/rx-posix/re8-parse.h" #include "hackerlab/rx-posix/posix.h" #define RX_MANY_CASES 30 /* __STDC__ prototypes for static functions */ static int rx_regexec (regmatch_t pmatch[], int no_subexp_reporting, int no_pos_reporting, const regex_t *preg, struct rx_context_rules * rules, rx_off_t start, rx_off_t end, const char *string); static int is_simple_anchored_regexp (int * anchored_start, int * anchored_end, struct rx_exp_node * pattern, int no_subexp_reporting); static int rx_regmatch (regmatch_t pmatch[], int no_subexp_reporting, int no_pos_reporting, const regex_t *preg, struct rx_context_rules * rules, rx_off_t start, rx_off_t end, const char *string, int is_bos, int is_eos); static void rx_is_anchored_p (int * left, int * right, struct rx_exp_node * exp); static int rx_fill_in_fastmap (int cset_size, t_uchar * map, struct rx_exp_node * exp); /************************************************************************ *(h1 "Posix Regexp Functions" * :includes ("sys/types.h" * "hackerlab/rx-posix/regex.h")) * * |Posix regexp functions| * |Posix| |Posix.2| |1003.2| |ANSI/IEEE 1003.2| |ISO/IEDC 994502| * * The standard Posix regexp functions provided by Rx are: * * regcomp * regexec * regfree * regerror * * Two closely related but nonstandard functions are also provided: * * regncomp * regnexec * */ #if 0 /*(c regcomp) * int regcomp (regex_t * preg, const char * pattern, int cflags); * * Compile the 0-terminated regexp specification `pattern'. * * The compiled pattern is stored in `*preg', which has the field * (required by Posix): * * size_t re_nsub; The number of parenthesized * subexpressions in the compiled * pattern. * * * `cflags' is a combination of bits which effect compilation: * insert*/ enum rx_cflags { REG_EXTENDED = 1, /* If REG_EXTENDED is set, then use extended regular expression syntax. If not set, then use basic regular expression syntax. In extended syntax, none of the regexp operators are written with a backslash. */ REG_ICASE = (REG_EXTENDED << 1), /* If REG_ICASE is set, then ignore case when matching. If not set, then case is significant. */ REG_NOSUB = (REG_ICASE << 1), /* Report only success/failure in `regexec'. Using this flag can improve performance for some regexps. */ REG_NEWLINE = (REG_NOSUB << 1), /* If REG_NEWLINE is set, then "." and complemented character sets do not match at newline characters in the string. Also, "^" and "$" do match at newlines. If not set, then anchors do not match at newlines and the character sets contain newline.*/ REG_DFA_ONLY = (REG_NEWLINE << 1), /* If this bit is set, then restrict the pattern language to patterns that compile to efficient state machines. In particular, `regexec' will not report positions for parenthesized subexpressions; "^", "$", backreferences ("\n"), and duplication ("{n,m}") are interpreted as normal characters. REG_DFA_ONLY is a non-standard flag. */ }; /*end-insert * * `regcomp' returns 0 on success and an error code on failure (see * xref:"regerror"). */ #endif int regcomp (regex_t * preg, const char * pattern, int cflags) { return regncomp (preg, pattern, str_length (pattern), cflags); } /*(c regncomp) * int regncomp (regex_t * preg, * const char * pattern, * size_t len, * int cflags); * * Compile the `len'-byte regexp specification `pattern'. * * * The compiled pattern is stored in `*preg', which has the field * (required by Posix): * * size_t re_nsub; The number of parenthesized * subexpressions in the compiled * pattern. * * `cflags' is a combination of bits which effect compilation. See * xref:"regcomp". * * `regncomp' returns 0 on success and an error code on failure (see * xref:"regerror"). * * \Note:/ `regncomp' is not part of the Posix.2 interface for * regexp matching. It is an Rx extension. */ int regncomp (regex_t * preg, const char * pattern, size_t len, int cflags) { int ret; struct rx_exp_node * exp; int nsub; mem_set0 ((char *)preg, sizeof (*preg)); if (!(cflags & REG_ICASE)) { preg->icase = 0; preg->translate = 0; } else { unsigned i; preg->icase = 1; preg->translate = (t_uchar *) rx_nfa_cache_malloc (256); if (!preg->translate) return (int) REG_ESPACE; /* Map uppercase characters to corresponding lowercase ones. */ for (i = 0; i < 256; i++) preg->translate[i] = char_is_upper (i) ? char_to_lower (i) : i; } ret = rx_parse (&exp, &nsub, pattern, len, (cflags & REG_EXTENDED), (cflags & REG_NEWLINE), (cflags & REG_DFA_ONLY), 256, preg->translate); /* POSIX doesn't distinguish between an unmatched open-group and an * unmatched close-group: both are REG_EPAREN. */ if ((ret == REG_ELPAREN) || (ret == REG_ERPAREN)) ret = REG_EPAREN; if (ret) return (int)ret; if (!(cflags & REG_NEWLINE)) preg->newline_anchor = 0; else preg->newline_anchor = 1; preg->pattern = exp; preg->re_nsub = 1; preg->subexps = 0; if (rx_analyze_rexp (&preg->subexps, &preg->re_nsub, preg->pattern)) { rx_free_exp (preg->pattern); rx_nfa_cache_free ((void *)preg->subexps); mem_set0 ((char *)preg, sizeof (*preg)); return REG_ESPACE; } preg->is_nullable = rx_fill_in_fastmap (256, preg->fastmap, preg->pattern); rx_is_anchored_p (&preg->is_left_anchored, &preg->is_right_anchored, preg->pattern); preg->no_sub = !!(cflags & REG_NOSUB); preg->small_p = (!preg->pattern || preg->pattern->small_advised_p); return 0; } #if 0 /*(c regexec) * int regexec (const regex_t *preg, * const char *string, * size_t nmatch, * regmatch_t pmatch[], * int eflags); * * Search for a match of compiled regexp `preg' in `string'. * Return the positions of the match and the first `nmatch-1' * parenthesized subexpressions in `pmatch'. * * Return 0 if a match is found, an error code otherwise. See * xref:"regerror". * * It is possible to asynchronously abort a call to `regexec'. See * xref:"Escaping Long-Running Matches". * * `preg' must have been filled in by `regcomp' or `regncomp'. * * `string' must be 0 terminated. See xref:"regnexec". * * `nmatch' may be 0 and must not be negative (Posix specifies that * the parameter be declared signed). It is the number of elements * in the array pointed to by `pmatch'. * * `pmatch' may be 0 if `nmatch' is 0. The details of `regmatch_t' are: * insert*/ struct rx_registers { regoff_t rm_so; /* Byte offset to substring start. */ regoff_t rm_eo; /* Byte offset to substring end. */ int final_tag; /* In pmatch[0] this field is set to * the state label of the last DFA state * encountered during a match. * * This field is implementation specific. * Applications which intend to be portable * between implementations of Posix should * not use this field. */ }; /*end-insert * * The state label |state label (in Posix regexps)| of the final DFA state for most regexps is 1. If a * pattern contains the cut operator |cut (in Posix regexps)| `[[:cut :]]' |[[:cut n:]]| its DFAs will * contain a final state with label `n' at that point in the regexp. * This is useful for detecting which of several possible alternatives * actually occured in a match, as in this example: * * pattern: if[[:cut 1:]]\\|while[[:cut 2:]] * * pmatch[0].final_tag is 1 after matching "if" * pmatch[0].final_tag is 2 after matching "while" * * `eflags' is a bit-wise or (`|') of any of these values: * insert*/ enum rx_eflags { REG_NOTBOL = 1, /* If REG_NOTBOL is set, then the beginning-of-line operator `^' * doesn't match the beginning of the input string (presumably * because it's not the beginning of a line). If not set, then the * beginning-of-line operator does match the beginning of the * string. * * (Standardized in Posix.2) */ REG_NOTEOL = (REG_NOTBOL << 1), /* REG_NOTEOL is similar to REG_NOTBOL, except that it applies to * the end-of-line operator `$' and the end of the input string. * * (Standardized in Posix.2) */ REG_NO_SUBEXP_REPORTING = (REG_NOTEOL << 1), /* REG_NO_SUBEXP_REPORTING causes `regexec' to fill in only * `pmatch[0]' and to ignore other elements of `pmatch'. For some * patterns (those which do not contain back-references or anchors) * this can speed up matching considerably. * * (non-standard) */ REG_ALLOC_REGS = (REG_NO_SUBEXP_REPORTING << 1), /* REG_ALLOC_REGS is only used by `regnexec'. It causes `regnexec' * to allocate storage for `regmatch_t' values. * * (non-standard) */ }; /*end-insert * * The match returned satisfies the left-most longest rule |left-most longest rule (in Posix regexps)| which states * a left-most match of the overall regexp will be returned. Of those * matches, one of the longest will be returned. * * There may be more than one longest match because two matches of * equal length may differ in how they fill in the array `pmatch'. * For example: * * "aaaabbbb" can match \(a*\)\(a*b*\) * with pmatch[1] == "aaaa" [*] * and pmatch[2] == "bbbb" * or * with pmatch[1] == "aaa" * and pmatch[2] == "abbbb" * or * with pmatch[1] == "aa" * and pmatch[2] == "aabbbb" * or * with pmatch[1] == "a" * and pmatch[2] == "aaabbbb" * or * with pmatch[1] == "" * and pmatch[2] == "aaaabbbb" * * * * Of the possible values of `pmatch', Rx implements the standard * behavior of returning that match which recursively maximizes the * lengths of the substrings matched by each subpattern, from left to * right. In the preceeding example, the correct answer is marked * with `[*]'. * */ #endif int regexec (const regex_t *preg, const char *string, size_t nmatch, regmatch_t pmatch[], int eflags) { return regnexec (preg, string, str_length (string), nmatch, &pmatch, (eflags & ~REG_ALLOC_REGS)); } /*(c regnexec) * int regnexec (const regex_t *preg, * const char *string, * regoff_t length, * size_t nmatch, * regmatch_t ** pmatch, * int eflags); * * Search for a match of compiled regexp `preg' in `string'. * Return the positions of the match and the first `nmatch-1' * parenthesized subexpressions in `*pmatch'. * * Return 0 if a match is found, an error code otherwise. See * xref:"regerror". * * `preg' must have been filled in by `regcomp' or `regncomp'. * * `string' must be `length' bytes long. * * See xref:"regnexec" for details about other parameters but * note that `regnexec' and `regexec' use different types for * the parameter `pmatch'. * * In `regexec', `pmatch' is only used to pass a pointer. In * `regnexec', `pmatch' is used both to pass a pointer, and to return * a pointer to the caller. * * Callers are permitted to pass 0 for `nmatch' and `pmatch'. Callers * are also permitted to pass the address of a pointer whose value is * 0 for parameter `pmatch'. If they do so, and also set the bit * `REG_ALLOC_REGS' in `eflags', then `pmatch' will be a return * parameter, returning a malloced array of `preg->re_nsub' elements * containing the sub-expression positions of a successful match. * * It is possible to asynchronously abort a call to `regnexec'. See * xref:"Escaping Long-Running Matches". * * \Note:/ `regnexec' is not part of the Posix.2 interface for * regexp matching. It is an Rx extension. */ int regnexec (const regex_t *preg, const char *string, regoff_t len, size_t nmatch, regmatch_t **pmatch, int eflags) { struct rx_context_rules rules; regmatch_t * regs; size_t nregs; int stat; rules.newline_anchor = preg->newline_anchor; rules.not_bol = !!(eflags & REG_NOTBOL); rules.not_eol = !!(eflags & REG_NOTEOL); rules.case_indep = preg->icase; if (!preg->no_sub && (nmatch >= preg->re_nsub)) { regs = *pmatch; nregs = nmatch; } else { regs = (regmatch_t *)malloc (preg->re_nsub * sizeof (*regs)); if (!regs) return REG_ESPACE; nregs = preg->re_nsub; } { size_t x; for (x = 0; x < nregs; ++x) regs[x].rm_so = regs[x].rm_eo = -1; } stat = rx_regexec (regs, (preg->no_sub || (!(eflags & REG_ALLOC_REGS) && (nmatch <= 1)) || (eflags & REG_NO_SUBEXP_REPORTING)), preg->no_sub, preg, &rules, 0, len, string); if (!stat && pmatch && !preg->no_sub && (regs != *pmatch)) { size_t x; for (x = 0; x < nmatch; ++x) (*pmatch)[x] = regs[x]; } if (!stat && (eflags & REG_ALLOC_REGS)) *pmatch = regs; else if (regs && (!pmatch || (regs != *pmatch))) free (regs); return stat; } /*(c regfree) * void regfree (regex_t *preg); * * Release all storage allocated for the compiled regexp `preg'. * This does not free `preg' itself. */ void regfree (regex_t *preg) { if (preg->pattern) { rx_free_exp (preg->pattern); preg->pattern = 0; } if (preg->subexps) { rx_nfa_cache_free (preg->subexps); preg->subexps = 0; } if (preg->translate != 0) { rx_nfa_cache_free (preg->translate); preg->translate = 0; } } /*(c regerror) * size_t regerror (int errcode, * const regex_t *preg, * char *errbuf, * size_t errbuf_size); * * Returns a message corresponding to an error code, `errcode', * returned from either `regcomp' or `regexec'. The size of the * message is returned. At most, `errbuf_size - 1' characters of the * message are copied to `errbuf'. Whatever is stored in `errbuf' is * 0-terminated. * * |error codes (for Posix regexps)| * The POSIX error codes for regexp pattern matchers are: * * REG_NOMATCH "no match" * REG_BADPAT "invalid regular expression" * REG_ECOLLATE "invalid collation character" * REG_ECTYPE "invalid character class name" * REG_EESCAPE "trailing backslash" * REG_ESUBREG "invalid back reference" * REG_EBRACK "unmatched [ or [^" * REG_EPAREN "unmatched (, \\(, ) or \\)" * REG_EBRACE "unmatched \\{" * REG_BADBR "invalid content of \\{\\}" * REG_ERANGE "invalid range end" * REG_ESPACE "memory exhausted" * REG_BADRPT "invalid preceding regular expression" * * Rx also provides a non-standard error code that is used if * `regexec' or `regnexec' is interrupted (see xref:"Escaping * Long-Running Matches"). * * REG_MATCH_INTERRUPTED "match interrupted" * */ size_t regerror (int errcode, const regex_t *preg, char *errbuf, size_t errbuf_size) { const char *msg; size_t msg_size; msg = (rx_error_msg[errcode] == 0) ? "Success" : (char *)rx_error_msg[errcode]; msg_size = str_length (msg) + 1; /* Includes the 0. */ if (errbuf_size != 0) { if (msg_size > errbuf_size) { str_cpy_n (errbuf, (t_uchar *)msg, errbuf_size - 1); errbuf[errbuf_size - 1] = 0; } else str_cpy (errbuf, (t_uchar *)msg); } return msg_size; } static int rx_regexec (regmatch_t pmatch[], int no_subexp_reporting, int no_pos_reporting, const regex_t *preg, struct rx_context_rules * rules, rx_off_t start, rx_off_t end, const char *string) { int x; int stat; int left_anchored; struct rx_exp_node * simplified; struct rx_unfa * unfa; struct rx_dfa machine; int have_machine; left_anchored = preg->is_left_anchored; unfa = 0; have_machine = 0; if (!preg->small_p && ((end - start) > RX_MANY_CASES)) { int err; err = rx_simplify_rexp (&simplified, 256, preg->pattern, preg->subexps); if (err) return REG_ESPACE; unfa = rx_unfa (simplified, 256); if (!unfa) { rx_free_exp (simplified); return REG_ESPACE; } rx_init_dfa_from_nfa ((struct rx_dfa *)&machine, unfa->nfa); have_machine = 1; rx_free_exp (simplified); } for (x = start; x <= end; ++x) { if (preg->is_nullable || ((x < end) && (preg->fastmap[((t_uchar *)string)[x]]))) { if (!preg->is_nullable && !preg->small_p && ((end - start) > RX_MANY_CASES)) { size_t amt; int adv; if (rx_dfa_goto_start_superstate ((struct rx_dfa *)&machine, 1)) { espace_error: rx_clear_dfa_state ((struct rx_dfa *)&machine); rx_free_unfa ((struct rx_unfa *)unfa); return REG_ESPACE; } if (setjmp (rx_escape_jmp_buf)) { rx_clear_dfa_state ((struct rx_dfa *)&machine); rx_free_unfa ((struct rx_unfa *)unfa); return REG_MATCH_INTERRUPTED; } adv = rx_dfa_advance_to_final (&amt, (struct rx_dfa *)&machine, string + x, end - start - x); if (0 > adv) goto espace_error; if (!adv || (!machine.final_tag && (amt < (end - start - x)))) goto nomatch; if (no_pos_reporting && (!preg->pattern || !preg->pattern->observed)) { rx_clear_dfa_state ((struct rx_dfa *)&machine); rx_free_unfa ((struct rx_unfa *)unfa); return 0; } } stat = rx_regmatch (pmatch, no_subexp_reporting, no_pos_reporting, preg, rules, x, end, string, (x == start), 1); if (!stat || (stat != REG_NOMATCH)) { if (have_machine) rx_clear_dfa_state ((struct rx_dfa *)&machine); rx_free_unfa ((struct rx_unfa *)unfa); return stat; } } nomatch: if (left_anchored) { if (!preg->newline_anchor) { if (have_machine) rx_clear_dfa_state ((struct rx_dfa *)&machine); rx_free_unfa ((struct rx_unfa *)unfa); return REG_NOMATCH; } else while (x < end) { if (string[x] == '\n') break; else ++x; } } } if (have_machine) rx_clear_dfa_state ((struct rx_dfa *)&machine); rx_free_unfa ((struct rx_unfa *)unfa); return REG_NOMATCH; } static int is_simple_anchored_regexp (int * anchored_start, int * anchored_end, struct rx_exp_node * pattern, int no_subexp_reporting) { struct rx_exp_node * left; struct rx_exp_node * right; int left_start; int left_end; int left_is; int right_start; int right_end; int right_is; *anchored_start = 0; *anchored_end = 0; if (!pattern) return 0; if ( (pattern->type == r_context) && ((pattern->intval == '^') || (pattern->intval == '$'))) { *anchored_start = (pattern->intval == '^'); *anchored_end = (pattern->intval == '$'); return 1; } if ( (pattern->type != r_concat) && (pattern->type != r_right_concat) && (pattern->type != r_alternate) && ( (pattern->type != r_parens) || (!no_subexp_reporting && pattern->intval))) return 0; if (pattern->type == r_parens) return is_simple_anchored_regexp (anchored_start, anchored_end, pattern->left, no_subexp_reporting); left = pattern->left; right = pattern->right; left_is = is_simple_anchored_regexp (&left_start, &left_end, left, no_subexp_reporting); right_is = is_simple_anchored_regexp (&right_start, &right_end, right, no_subexp_reporting); if (!left_is && !right_is) return 0; if (!left_is && left) { if (left->observed && (!no_subexp_reporting || !left->observation_contingent)) return 0; } if (!right_is && right) { if (right->observed && (!no_subexp_reporting || !right->observation_contingent)) return 0; } if ((pattern->type == r_concat) || (pattern->type == r_right_concat)) { if (left_is && left_end && right) return 0; if (right_is && right_start && left) return 0; *anchored_start = left_start || right_start; *anchored_end = left_end || right_end; return 1; } else { /* r_alternate */ if ((left_start != right_start) || (left_end != right_end)) return 0; *anchored_start = left_start; *anchored_end = left_end; return 1; } } static int rx_regmatch (regmatch_t pmatch[], int no_subexp_reporting, int no_pos_reporting, const regex_t *preg, struct rx_context_rules * rules, rx_off_t start, rx_off_t end, const char *string, int is_bos, int is_eos) { struct rx_solutions * solutions; int answer; struct rx_context_rules local_rules; rx_off_t orig_end; rx_off_t end_lower_bound; rx_off_t end_upper_bound; int simple_anchored; int anchored_start; int anchored_end; local_rules = *rules; orig_end = end; if (!preg->pattern) { end_lower_bound = start; end_upper_bound = start; } else if (preg->pattern->len >= 0) { if ((end - start) < preg->pattern->len) return REG_NOMATCH; end_lower_bound = start + preg->pattern->len; end_upper_bound = start + preg->pattern->len; } else { end_lower_bound = start; end_upper_bound = end; } simple_anchored = is_simple_anchored_regexp (&anchored_start, &anchored_end, preg->pattern, no_subexp_reporting); if ( simple_anchored || !preg->pattern || !preg->pattern->observed || (preg->pattern->observation_contingent && no_subexp_reporting)) { int free_pattern; struct rx_exp_node * pattern; struct rx_unfa * unfa; struct rx_dfa machine; rx_off_t best; int best_label; rx_off_t pos; size_t amt; if (simple_anchored && anchored_start && rules->not_bol && is_bos) return REG_NOMATCH; free_pattern = 0; if (!simple_anchored || !preg->pattern || !preg->pattern->observed) pattern = preg->pattern; else { int err; err = rx_simplify_rexp (&pattern, 256, preg->pattern, preg->subexps); if (err) return REG_ESPACE; free_pattern = 1; } unfa = rx_unfa (pattern, 256); if (free_pattern) rx_free_exp (pattern); if (!unfa) return REG_ESPACE; rx_init_dfa_from_nfa ((struct rx_dfa *)&machine, unfa->nfa); if (rx_dfa_goto_start_superstate ((struct rx_dfa *)&machine, 1)) { espace_error: rx_clear_dfa_state ((struct rx_dfa *)&machine); rx_free_unfa (unfa); return REG_ESPACE; } if (setjmp (rx_escape_jmp_buf)) { rx_clear_dfa_state ((struct rx_dfa *)&machine); rx_free_unfa (unfa); return REG_MATCH_INTERRUPTED; } best = -1; best_label = 0; pos = start; if (machine.final_tag) { if ( !simple_anchored || !anchored_end || (rules->newline_anchor && (pos < orig_end) && (string[pos] == '\n')) || (!rules->not_eol && is_eos && (orig_end == start))) { if (no_pos_reporting) { rx_clear_dfa_state ((struct rx_dfa *)&machine); rx_free_unfa (unfa); return 0; } best = start; best_label = (int)machine.final_tag; } } while (pos < end_upper_bound) { int adv; adv = rx_dfa_advance_to_final (&amt, (struct rx_dfa *)&machine, string + pos, end_upper_bound - pos); if (0 > adv) goto espace_error; if (!adv || !machine.final_tag) break; pos += amt; if ( !simple_anchored || !anchored_end || (rules->newline_anchor && (pos < orig_end) && (string[pos] == '\n')) || (!rules->not_eol && is_eos && (pos == orig_end))) { if (no_pos_reporting) { rx_clear_dfa_state ((struct rx_dfa *)&machine); rx_free_unfa (unfa); return 0; } best = pos; best_label = (int)machine.final_tag; } } if ((best >= 0) && pmatch) { pmatch[0].rm_so = start; pmatch[0].rm_eo = best; pmatch[0].final_tag = best_label; } rx_clear_dfa_state ((struct rx_dfa *)&machine); rx_free_unfa (unfa); if (best < 0) return REG_NOMATCH; else return 0; } answer = 0; { #define n_end_guess 256 regoff_t end_guesses[n_end_guess]; int valid_end_guesses; int total_end_guesses = 0; int end_guess_position; int no_end_guess_optimization; int next_no_end_guess_optimization; struct rx_exp_node * pattern; struct rx_unfa * unfa; struct rx_dfa machine; int end_search_direction; next_no_end_guess_optimization = (end_upper_bound == end_lower_bound); #if 0 /* to disable DFA optimization: */ next_no_end_guess_optimization = 1; #endif anchored_start = preg->is_left_anchored; anchored_end = preg->is_right_anchored; { int err; err = rx_simplify_rexp (&pattern, 256, preg->pattern, preg->subexps); if (err) return REG_ESPACE; } unfa = rx_unfa (pattern, 256); rx_free_exp (pattern); if (!unfa) return REG_ESPACE; rx_init_dfa_from_nfa ((struct rx_dfa *)&machine, unfa->nfa); /* precondition: end is the last end-point to check for a match. * That's end_lower_bound no_pos_reporting, * and end_upper_bound otherwise. * * if no_pos_reporting is not 0, * The DFA is in the right state for * processing the character at position `end'. * * end_search_direction = (no_pos_reporting ? 1 : -1) */ if (!no_pos_reporting) { end = end_upper_bound; end_search_direction = -1; } else { end = end_lower_bound; end_search_direction = 1; if (rx_dfa_goto_start_superstate ((struct rx_dfa *)&machine, 1)) { espace_error0: rx_clear_dfa_state ((struct rx_dfa *)&machine); rx_free_unfa (unfa); return REG_ESPACE; } if (setjmp (rx_escape_jmp_buf)) { rx_clear_dfa_state ((struct rx_dfa *)&machine); rx_free_unfa (unfa); return REG_MATCH_INTERRUPTED; } if (start < end) { if (!rx_dfa_advance (&machine, string + start, end - start)) goto espace_error0; } } while (no_pos_reporting ? (end <= end_upper_bound) : (end >= end_lower_bound)) { rx_off_t pos; #define POSITIONS_REMAIN (no_pos_reporting ? (pos <= end_upper_bound) : (pos >= end_lower_bound)) #define VALID_FINAL_POSITION \ ( !anchored_end \ || ((pos == orig_end) && is_eos && !rules->not_eol) \ || ((pos < orig_end) && rules->newline_anchor && (string[pos] == '\n'))) /* invariant: * * end is the next plausible end-position of a match. * * next_no_end_guess_optimization says whether or not DFA checks are * likely to pay off by eliminating some possible * values of `end' from consideration. * * If no_pos_reporting, the DFA is set to process the character * at `end'. */ no_end_guess_optimization = next_no_end_guess_optimization; if (no_end_guess_optimization) { /* Arrange to check all possible end points without doing a DFA check. */ valid_end_guesses = 0; end_guess_position = n_end_guess - 1; pos = end; while (POSITIONS_REMAIN && (valid_end_guesses < n_end_guess)) { if (VALID_FINAL_POSITION) { end_guesses[end_guess_position] = pos; --end_guess_position; ++valid_end_guesses; } pos += end_search_direction; } end_guess_position = 0; /* Post-condition: * * Treating end_guesses as a circular stack, their are valid_end_guesses * items on the stack which are possible end positions in the order * they should be checked. */ } else { size_t amt; /* Arrange to check end points that pass a DFA check. */ if (no_pos_reporting) { /* We'll find possible end positions in the order they should * be checked, so treat end_guesses as a queue. */ end_guess_position = n_end_guess - 1; /* end is the next position to check for possible * end-of-match. The DFA is already set to process this character. */ pos = end; } else { /* We'll find possible end positions in the opposite of the order they should * be checked, so treat end_guesses as a stack. */ end_guess_position = 0; /* end is the last position to check for possible * end-of-match. Checking begins at `start'. */ pos = start; if (rx_dfa_goto_start_superstate ((struct rx_dfa *)&machine, 1)) { espace_error2: rx_clear_dfa_state ((struct rx_dfa *)&machine); rx_free_unfa (unfa); return REG_ESPACE; } } valid_end_guesses = 0; total_end_guesses = 0; if (setjmp (rx_escape_jmp_buf)) { rx_clear_dfa_state ((struct rx_dfa *)&machine); rx_free_unfa (unfa); return REG_MATCH_INTERRUPTED; } if (machine.final_tag && VALID_FINAL_POSITION) { end_guesses[end_guess_position] = pos; ++valid_end_guesses; ++total_end_guesses; end_guess_position -= end_search_direction; } { while (no_pos_reporting ? (pos < end_upper_bound) : (pos < end)) { int adv; if (no_pos_reporting) adv = rx_dfa_advance_to_final (&amt, (struct rx_dfa *)&machine, string + pos, end_upper_bound - pos); else adv = rx_dfa_advance_to_final (&amt, (struct rx_dfa *)&machine, string + pos, end - pos); if (0 > adv) goto espace_error2; if (!adv || !machine.final_tag) break; pos += amt; if (!VALID_FINAL_POSITION) continue; end_guesses[end_guess_position] = pos; if (no_pos_reporting) { ++valid_end_guesses; if (valid_end_guesses == n_end_guess) { end_guess_position = 0; break; } else --end_guess_position; } else { if (valid_end_guesses < n_end_guess) ++valid_end_guesses; end_guess_position = ((end_guess_position + 1) % n_end_guess); ++total_end_guesses; } } if (no_pos_reporting) end_guess_position = 0; } /* end_guesses is now a stack of values which when popped, * are plausible end positions int the correct order to * check. */ } if (!valid_end_guesses) { rx_clear_dfa_state ((struct rx_dfa *)&machine); rx_free_unfa (unfa); return REG_NOMATCH; } if (no_end_guess_optimization || (total_end_guesses == ((end_upper_bound - end_lower_bound) + 1))) next_no_end_guess_optimization = 1; while (valid_end_guesses) { end_guess_position = (((end_guess_position + n_end_guess) - 1) % n_end_guess); --valid_end_guesses; end = end_guesses[end_guess_position]; local_rules.not_eol = (rules->not_eol ? ( ((end == orig_end) && is_eos) || !local_rules.newline_anchor || (string[end] != '\n')) /* string[end] is valid because either (end < orig_end) || !is_eos */ : ( (end != orig_end) && (!local_rules.newline_anchor || (string[end] != '\n')))); solutions = rx_basic_make_solutions (pmatch, preg->pattern, preg->subexps, preg->re_nsub, start, end, &local_rules, string, preg->small_p); if (!solutions) { rx_clear_dfa_state ((struct rx_dfa *)&machine); rx_free_unfa (unfa); return REG_ESPACE; } if (setjmp (rx_escape_jmp_buf)) { rx_clear_dfa_state ((struct rx_dfa *)&machine); rx_free_unfa (unfa); rx_basic_free_solutions (solutions); return REG_MATCH_INTERRUPTED; } answer = rx_next_solution (solutions); if (answer < 0) { rx_clear_dfa_state ((struct rx_dfa *)&machine); rx_free_unfa (unfa); rx_basic_free_solutions (solutions); return REG_ESPACE; } if (answer == 1) { if (!no_pos_reporting && pmatch) { pmatch[0].rm_so = start; pmatch[0].rm_eo = end; pmatch[0].final_tag = rx_solutions_final_tag (solutions); } rx_basic_free_solutions (solutions); rx_clear_dfa_state ((struct rx_dfa *)&machine); rx_free_unfa (unfa); return 0; } else rx_basic_free_solutions (solutions); } /* post condition: end is the last end position tried. */ end += end_search_direction; } rx_clear_dfa_state ((struct rx_dfa *)&machine); rx_free_unfa (unfa); } return REG_NOMATCH; } /*c rx_is_anchored_p * void rx_is_anchored_p (int * left, * int * right, * struct rx_exp_node * exp); * * Is an expression "anchored", meaning, must it match at string * or line boundary on either the left or right (`^' or `$')? * * Knowing whether or not an expression is anchored is useful for * optimizing some common kinds of regexp search, so this function * computes that property. * insert*/ static void rx_is_anchored_p (int * left, int * right, struct rx_exp_node * exp) { int ign; if (!left) left = &ign; if (!right) right = &ign; if (!exp) { *left = 0; *right = 0; return; } switch (exp->type) { default: case r_star: case r_cset: case r_string: case r_cut: *left = 0; *right = 0; break; case r_parens: rx_is_anchored_p (left, right, exp->left); break; case r_concat: case r_right_concat: if (!left) rx_is_anchored_p (left, right, exp->right); else if (!right) rx_is_anchored_p (left, right, exp->left); else { rx_is_anchored_p (left, &ign, exp->left); rx_is_anchored_p (&ign, right, exp->right); } break; case r_alternate: { int l1; int r1; int l2; int r2; rx_is_anchored_p (&l1, &r1, exp->left); rx_is_anchored_p (&l2, &r2, exp->right); *left = l1 && l2; *right = r1 && r2; break; } case r_interval: if (exp->intval == 0) { *left = 0; *right = 0; } else rx_is_anchored_p (left, right, exp->left); break; case r_context: if (exp->intval == '^') { *left = 1; *right = 0; } else if (exp->intval == '$') { *left = 0; *right = 1; } else { *left = 0; *right = 0; } break; } } /*end-insert */ /*c rx_fill_in_fastmap * int rx_fill_in_fastmap (int cset_size, * t_uchar * map, * struct rx_exp_node * exp); * * If a pattern can not match the empty string, then there is * a set of characters (the "fastmap") from which the first character * of a matching string must come. For some patterns, the fastmap is * smaller than the complete character set and is easy to compute. * Knowing the fastmap is useful for optimizing some kinds of * regexp search. * * This function returns (in `map') a set represented as an array of * 256 bytes, with entries for members of the fastmap set equal to 1, * and other entries equal to 0. */ static int rx_fill_in_fastmap (int cset_size, t_uchar * map, struct rx_exp_node * exp) { if (!exp) { can_match_empty: { int x; for (x = 0; x < cset_size; ++x) map[x] = 1; } return 1; } switch (exp->type) { case r_cset: { int x; int most; most = exp->cset_size; for (x = 0; x < most; ++x) if (bits_is_member (exp->cset, x)) map[x] = 1; } return 0; case r_string: if (exp->str_len) { map[exp->str[0]] = 1; return 0; } else return 1; case r_concat: case r_right_concat: return ( rx_fill_in_fastmap (cset_size, map, exp->left) && rx_fill_in_fastmap (cset_size, map, exp->right)); case r_alternate: return ( rx_fill_in_fastmap (cset_size, map, exp->left) || rx_fill_in_fastmap (cset_size, map, exp->right)); case r_parens: return rx_fill_in_fastmap (cset_size, map, exp->left); case r_star: goto can_match_empty; case r_interval: if (exp->intval == 0) goto can_match_empty; else return rx_fill_in_fastmap (cset_size, map, exp->left); case r_cut: goto can_match_empty; case r_context: goto can_match_empty; default: while (1) panic ("bogus regexp in rx_fill_in_fastmap"); } } tla-1.3.5+dfsg/src/hackerlab/rx-posix/introduction-to-regexps.doc0000644000175000017500000005632510457621774023564 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:57:15 2001 (introduction-to-regexps.doc) */ /* introduction-to-regexps.c * **************************************************************** * Copyright (C) 2000 Thomas Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ /* general purpose library multiple regexp languages 8 and 16 bit character set support lexical analysis support rexp, nfa, dfa interfaces long-match interrupt dynamic & static regexp compilation debugging features test suite */ /*(h0 "An Introduction to Posix Regexps" :appendix) |Posix| |Posix.2| |1003.2| |ANSI/IEEE 1003.2| |ISO/IEDC 994502| |regular expression notation| |regexp| |regular expression| This chapter describes the Posix-derived regexp pattern languages understood by Rx. The *Posix.2* standard (*ISO/IEC 994502: 1993 (ANSI/IEEE Std 1003.2 - 1992*)), section *2.8*) specifies the syntax and semantics of a ``Regular Expression Notation''. Appendix ``B.5'' defines a ``C Binding for RE Matching''. The current release of Rx follows this standard with several extensions and two minor omissions (multi-character collating elements and equivalence classes based on primary collation weights). The languages understood by Rx are notations for describing text patterns called *regexps*. Regexps are typically used by searching within a string for a substring that matches the pattern. In some documentation, pattern languages such as those understood by Rx are called *regular expressions* and in other documentation, *regexps*. We prefer the term *regexps* because *regular expression* has a formal mathematical meaning which does not describe the languages understood by Rx. Moreover, the mathematical term does describe a subset of what we will call regexps. Sometimes (particularly when talking about performance issues), it is useful to distinguish the regular expression subset of regexps from regexps as a whole. Therefore, it is handy to have two separate terms with distinct meaning: *regexps* (the entire pattern language) and *regular expressions* (a subset of the language, recognizable in some branches of mathematics). */ /*(menu) */ /************************************************************************ *(h1 "Basic Regexps and Extended Regexps") * Posix defines two regexp languages which they call "Basic Regular Expressions" ("BRE") and "Extended Regular Expressions" ("ERE"). (We would have preferred the terms "Basic Regexp" and "Extended Regexp".) This chapter describes BRE, and then describes how ERE differ from BRE. The reason for having two regexp langauges is historical. BRE is the language traditionally used by `ed'; ERE is the language traditionally used by `egrep'. The two languages, as specified by Posix, have different capabilities. There are some BRE operators with no corresponding ERE operator and some ERE operators with no corresponding BRE operator. Fortunately, the syntaxes chosen by Posix are extensible: new operators can be added to either language and, in fact, both can be extended to have the same set of operators (but using slightly different syntaxes). Rx does, in fact, extend both syntaxes in that way. In the introduction that follows, we have attempted to indicate which operators are extensions: if you want to write regexps that are maximally portable, avoid those extensions. */ /*(h1 "Literal Characters and Special Characters") |literal characters (in Posix regexps)| |special characters (in Posix regexps)| In the simplest cases, a regexp is just a literal string that must match exactly. For example, the pattern: regexp matches the string ``regexp'' and no others. Some characters have a special meaning when they occur in a regexp. They aren't matched literally as in the previous example, but instead denote a more general pattern. For example, the character `*' is used to indicate that the preceding element of a regexp may be repeated 0, 1, or more times. In the pattern: smooo*th the `*' indicates that the preceding `o' can be repeated 0 or more times. So the pattern matches: smooth smoooth smooooth smoooooth ... The same pattern does not match these examples: smoth -- The pattern requires at least two o's smoo*th -- The pattern doesn't match the * Suppose you want to write a pattern that literally matches a special character like `*'; in other words, you don't want to `*' to indicate a permissible repetition, but to match `*' literally. This is accomplished by quoting |quoting (in Posix regexps)| the special character with a backslash. The pattern: smoo\*th matches the string: smoo*th and no other strings. These characters are special (their meaning is described in this chapter): . [ \ * ^ $ In seven cases, the pattern is reversed - a backslash makes a normal character special instead of making a special character normal. The characters `+', `?', `|', `(', and `)' are normal but the sequences `\+', `\?', `\|', `\(', `\)', `\{', and `\}' are special (their meaning is described later). The remaining sections of this chapter introduce and explain the various special characters that can occur in regexps. */ /*(h1 "Character Set Expressions") This section introduces the special characters `.' and `['. */ /*(h2 "The Dot Operator") |dot operator (in Posix regexps)| |. (in Posix regexps)| `.' ordinarily matches any character except the NULL character. For example: p.ck matches pick pack puck pbck pcck p.ck etc. In some applications, `.' matches a newline |newline (in Posix regexps)| character, and in other applications, it does not. This is an application-specific paramter and the documentation for a particular application should tell you what `.' matches. */ /*(h2 "The Character Set Operator") |character set operator (in Posix regexps)| |[...] (in Posix regexps)| `[' begins a ``character set''. A character set is similar to `.' in that it matches not a single, literal character, but any of a set of characters. `[' is different from `.' in that with `[', you define the set of characters explicitly. There are two basic forms a character set can take. The first form is a plain character set: [] -- every character in is in the set. the second form is a negated character set: |negated character set (in Posix regexps)| [^] -- every character *not* in is in the set. In some applications, the newline |newline (in Posix regexps)| character ({'\n'}) is included in a negated character set if it is not mentioned in ''. In other applications, the newline character is not included. This is an application-specific paramter and the documentation for a particular application should tell you whether newline is included in negated character sets. A `' may be a more or less an explicit enumeration of a set of characters. It can be written as a string of individual characters: [aeiou] -- matches any of five vowels or as a range of characters: [0-9] -- matches any decimal digit These two forms can be mixed: [A-za-z0-9_$] -- any letter (either case), any digit, `_' or `$' Because of that notation, if you want to include an unescaped `-' in a character set, it must be the last character in the specification: [A-Za-] -- all upper case letters, `a' and `-' If you want to include an unescaped `]' in a character set, it must be the first character in the specification: [^])}] -- any character except `]', ')', and '}' Characters that are special in regexps outside of character-set specifictions (such as `*') are *not* special within a character set. Character set syntax has its own, distinct set of special characters. This is a four-character set: [*+/-] -- the characters `*', '+', `/', and `-' A backslash within a character set specification is not special -- it is a literal character: [\.] -- the characters `\' and `.' Characters which are have special meaning in a character set can be introduced as literal characters by surrounding them with `[.' and `.]': [a[.-.]z] -- the characters `a', `-', and `z' [[.[.]-[.].]] -- all characters from `[' to `]' A character set specification may also contain a ``character class'': |character class (in Posix regexps)| [[:class-name:]] -- every character described by class-name is in the set The supported character class names are: any - the set of all characters alnum - the set of alpha-numeric characters alpha - the set of alphabetic characters blank - tab and space cntrl - the control characters digit - decimal digits graph - all printable characters except space lower - lower case letters print - the "printable" characters punct - punctuation space - whitespace characters upper - upper case letters xdigit - hexadecimal digits Character classes can be combined with other kinds of character set specification: [a-pr-y[:digit:]] -- the telephone keypad alphabet */ /*(h1 "Parenthesized Subexpressions") |subexpression (parenthesized, in Posix regexps)| |parenthesized subexpression (in Posix regexps)| |(...) (in Posix regexps)| A subexpression is a regular expression enclosed in `\(' and `\)'. A subexpression can be used anywhere a single character or character set can be used. Subexpressions are useful for grouping regexp constructs. For example, the repeat operator, `*', usually applies to just the preceding character. Recall that: smooo*th matches smooth smoooth ... Using a subexpression, we can apply `*' to a longer string: banan\(an\)*a matches banana bananana banananana ... Subexpressions also have a special meaning with regard to backreferences and substitutions. (See xref:"Backreferences and Substitutions".) */ /*(h1 "Repeated Subexpressions") |repeated subexpression (in Posix regexps)| |~* (in Posix regexps)| As previously explained, `*' is the repeat operator. It applies to the preceding character, character set, subexpression or backreference. It indicates that the preceding element can be matched 0 or more times: bana\(na\)* matches bana banana bananana banananana ... |+ (in Posix regexps)| `\+' is similar to `*' except that `\+' requires the preceding element to be matched at least once. So on the one hand: bana\(na\)* matches bana but bana(na\)\+ does not. Both match banana bananana banananana ... \Note:/ The `\+' operator is not present in standard BRE -- it is an extension. The corresponding `+' operator of ERE is standard. */ /*(h1 "Optional Subexpressions") |optional subexpression (in Posix regexps)| |? (in Posix regexps)| `\?' indicates that the preceding character, character set, or subexpression is optional. It is permitted to match, or to be skipped: CSNY\? matches both CSN and CSNY \Note:/ The `\?' operator is not present in standard BRE -- it is an extension. The corresponding `?' operator of ERE is standard. */ /*(h1 "Counted Iteration: Interval Expressions") |counted iteration (in Posix regexps)| |interval expression (in Posix regexps)| |{...} (in Posix regexps)| An interval expression, `\{m,n\}' where `m' and `n' are decimal integers with `0 <= m <= n <= 255', applies to the preceding character, character set, subexpression or backreference. It indicates that the preceding element must match at least `m' times and may match as many as `n' times. For example: c\([ad]\)\{1,4\}r matches car cdr caar cdar ... caaar cdaar ... cadddr cddddr but it doesn't match: cdddddr because that has five d's, and the pattern only permits four, and it doesn't match cr because the pattern requires at least one `a' or `d'. A pattern of the form: R\{M,\} matches `M' or more iterations of `R'. A pattern of the form: R\{M\} matches exactly 'M' iterations of 'R'. */ /*(h1 "Alternative Subexpressions") |alternative subexpressions (in Posix regexps)| || (in Posix regexps)| An alternative is written: regexp-1\|regexp-2\|regexp-3\|... It matches anything matched by some `regexp-n'. For example: Crosby, Stills, \(and Nash\|Nash, and Young\) matches Crosby, Stills, and Nash and also Crosby, Stills, Nash, and Young \Note:/ The `\|' operator is not present in standard BRE -- it is an extension. The corresponding `|' operator of ERE is standard. */ /*(h1 "Anchors") |anchors (in Posix regexps)| |left anchor (in Posix regexps)| |right anchor (in Posix regexps)| |^ (in Posix regexps)| |~$ (in Posix regexps)| Anchor experssions are written `^' (``left anchor'') and `$' (``right anchor''). Both kinds of anchor match the empty string but only in certain contexts. A left anchor matches at the beginning of a string, a right anchor at the end of a string. In some situations, `^' matches the empty string immediately after a newline character, and '$' matches immediately before a newline character. Whether or not this is the case is an application-specific behavior: the documentation for each application that uses regexps should state whether or not anchors match near newlines. */ /*(h1 "Backreferences and Substitutions") |backreferences (in Posix regexps)| |substitutions (in Posix regexps)| |\DIGIT (in Posix regexps)| A backreference is written `\n' where `n' is some single digit, 1-9. To be a valid backreference, there must be at least `n' parenthesized subexpressions in the pattern prior to the backreference. A backreference matches a literal copy of whatever was matched by the corresponding subexpression. For example, \(.*\)-\1 matches: go-go -- .* matches the first "go"; \1 matches the second ha-ha wakka-wakka ... but does not match: ha-wakka -- .* matches "ha", but "wakka" is not the same as "ha" In some applications, subexpressions are used to extract substrings. For example, Emacs |emacs| has the functions `match-beginning' and `match-end' which report the positions of strings matched by subexpressions. These functions use the same numbering scheme for subexpressions as backreferences, with the additional rule that subexpression 0 is defined to be the whole regexp. In some applications, subexpressions are used in string substitution. This again uses the backreference numbering scheme. For example, this sed command: s/From:.*<\(.*\)>/To: \1/ matches the entire line: From: Joe Schmoe and subexpression 1 matches `schmoe@uspringfield.edu'. The command replaces the matched line with `To: \1' after doing subexpression substitution on it to get: To: schmoe@uspringfield.edu \Note:/ The backreference operator is present in standard BRE, but not in ERE. Rx adds the backreference operator to ERE as an extension. */ /*(h1 "Anonymous Subexpressions") |anonymous subexpression (in Posix regexps)| |subexpression (anonymous, in Posix regexps)| |[[:(...:)]] (in Posix regexps)| An anonymous subexpression is a subexpression that can not be backreferenced. In some situations, a pattern written using anonymous subexpressions will run faster than the same pattern written with ordinary subexpressions. An anonymous subexpression is written as a regular expression enclosed in `[[:(' and `):]]', for example: sm[[:(oo):]]*th will match all fanciful spellings of ``smooth'' that include an even number of `o''s. An anonymous subexpression can be used anywhere a single character or character set can be used. \Note:/ The `[[:():]]' operator is not standard in either BRE or ERE -- it is an Rx extension. */ /*(h1 "The cut Operator") |cut (in Posix regexps)| |[[:cut n:]] (in Posix regexps)| The cut operator is used to indicate a point in the middle of a regexp at which a match can succeed without matching the remaining pattern. The cut operator takes a parameter which is an integer called the `state label'. |state label (in Posix regexps)| When a pattern matches by reaching a cut operator, one of the values that can be returned is the state label. For example, this regexp can be used for lexical analysis |lexical analysis (with Posix regexps)|: if[[:cut 2:]]\\|then[[:cut 3:]]\\|else[[:cut 4:]] If it matches ``then'', the state label returned will be 3. If it matches ``else'', the state label will be 4. The default state label is 1. This example illustrates using `cut' to terminate a match early: GNU[[:cut 2:]] project That expression matches either of two strings: GNU GNU project with a state label of 2 in the first case and 1 in the second case. A state label may be a decimal integer, or it may be `%'. In the latter case, an integer value is assigned automatically. Automatically assigned integer values start with 1 and each successive `[[:(cut %):]]' in an expression increments the automatically assigned value. \Note:/ The `[[:cut n:]]' operator is not standard in either BRE or ERE -- it is an Rx extension. */ /*(h1 "Regexps versus Regular Expressions") * * |regexp| |regular expression| |true regexp| |true regular expression| * In the Rx documentation and source code we distinguish between * *regexps* and *regular expressions*. Regular expressions are a * subset of regexps. We call regexps which are not regular * expressions ``true regexps'' and if a regexp is a regular expression, * we say that that regexp is ``regular'' or a ``true regular * expression''. * * A practial reason for making such a distinction is performance: * comparing text to a true regular expression is often much less * computationally expensive than comparing text to a true regexp. * * Writing a true regular expression is easy. Every regexp is regular * if it does *not* use any of the following operators: * * ^re - left anchor * re$ - right anchor * re\{x,y\} - counted iteration * \(re\)...\1 - parentheses with backreferences * * If you are mathematically inclined, you may notice that a regexp * of the form: * * re\{x,y\} - counted iteration * * is, in the mathematical sense, a regular expression. For practical * reasons, however, Rx treats such expressions as true regexps. */ /*(h1 "A Summary of Regexp Syntax") |regexp syntax summary (Posix)| In summary, regexps can be: `abcd' - a string literal `.' - the universal character set. `[a-z_?]' - a character set `[^a-z_?]' - an inverted character set `[[:alpha:]]' - a named character set `[[.c.]]' - a quoted character set character `\(subexp\)' - an expression grouped to form a parenthesized subexpression. `[[:(subexp:)]]' - an expression grouped to form an anonymous subexpression. (Non-standard) `^' - a left anchor, matching the beginning of a string. `$' - a right anchor, matching the end of a string. `\n' - a backreference to the nth parenthesized subexpression. (Non-standard in ERE) `[[:cut n:]]' - a point at which a regular expression match can immediately succeed. (Non-standard) The following special characters and sequences can be applied to a character, character set, subexpression, or backreference: `*' - repeat the preceding element 0 or more times. `\+' - repeat the preceding element 1 or more times. (Non-standard in BRE) `\?' - match the preceding element 0 or 1 time. (Non-standard in BRE) `\{m,n\}' - match the preceding element at least `m', and as many as `n' times, where 0 <= m <= n <= 255 `\{m,\}' - match the preceding element at least `m' times, where 0 <= m <= 255 `\{m\}' - match the preceding element exactly `m' times, where 0 <= m <= 255 Finally, a list of patterns built from the preceeding operators can be combined using `\|': `regexp-1\|regexp-2\|..' - match regexp-1 or regex-2 or ... (Non-standard in BRE) A special character, like `.' or `*' can be made into a literal by prefixing it with `\'. A special sequence, like `\+' or `\?' can be made into a literal character by dropping the `\'. */ /*(h1 "The Extended Regexp Syntax") |extended regexp syntax (Posix)| |basic regexp syntax (Posix)| |ERE (Posix Regexps)| |BRE (Posix Regexps)| The regexp syntax described in the preceeding sections is called ``Basic Regular Expression Syntax'' (BRE). In that syntax, some operators are preceeded by a backslash: one\|the other -- the \| operator \(many\)\+ -- The \( \) and \+ operators re\{x,y\} -- The \{ \} operator In that way, the BRE syntax is optimized for situations where we are more likely to want to write `|', `()', `+', or `{}' as literal characters than as regexp operators. The common case is handled without the backslash, the less common case with the backslash. Another syntax exists for situations where the regexp operators are more likely to occur than the corresponding literal characters. In this, the ``Extended Regexp Syntax'' (ERE), none of the regexp operators require a backslash and except in a character set specification, a backslash always means to interpret the next character literally. BRE OPERATOR ERE OPERATOR \| | \+ + \( \) ( ) \{ x, y \} { x, y } If an application uses the extended syntax, the documentation for that application should tell you so. */ /*(h1 "The Leftmost Longest Rule") |leftmost longest rule (in Posix regexps)| |regexp, ambiguous (Posix)| |ambiguous regexp (Posix)| Sometimes a regexp appears to be ambiguous. When comparing an expression like: match to a string like: match-match there is an ambiguity about where the match begins. Do the first 5 characters match? or the last 5? In every case like this, the leftmost match is preferred. The first 5 characters will match. Sometimes the ambiguity is not about where a match will begin, but how long a match will be. For example, suppose we compare the pattern: begin\|beginning to the string beginning either just the first 5 characters will match, or the whole string will match. In every case like this, consistent with finding the leftmost match, the longer match is preferred. The whole string will match. Sometimes there is ambiguity not about how many characters to match or where a match begins, but where the subexpressions occur within the match. This can effect extraction functions like Emacs' `match-beginning' or rewrite functions like sed's `s' command. For example, consider matching the pattern: b\([^q]*\)\(ing\)? against the string beginning One possibility is that the first parenthesized subexpression matches `eginning' and the second parenthesized subexpression is skipped. Another possibility is that the first subexpression matches `eginn' and the second matches `ing'. The rule is that consistant with finding the leftmost and longest overall match, the lengths of strings matched by subpatterns are maximized, from left to right. In the example, the subpattern `b' matches one character, the subpattern `\([^q]*\)' matches the longest possible string, `eginning', and finally the third subpattern `\(ing\)?' matches what is left over (the empty string). The presence or absense of parentheses doesn't change what subpatterns match. If the pattern is: b[^q]*\(ing\)? The subpattern `[^q]*' still matches `eginning' and `\(ing\)?' still matches the empty string. */ tla-1.3.5+dfsg/src/hackerlab/rx-posix/match-regexp.c0000644000175000017500000021572710457621774021014 0ustar useruser/* match-regexp.c - functions for comparing a string to a regexp * **************************************************************** * Copyright (C) 1998, 2000 Thomas Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ /* #define TRACE */ #include "hackerlab/bugs/panic.h" #include "hackerlab/char/char-class.h" #include "hackerlab/char/str.h" #include "hackerlab/bitsets/bits.h" #include "hackerlab/rx/nfa-cache.h" #include "hackerlab/rx/dfa.h" #include "hackerlab/rx/escape.h" #ifdef TRACE #include "hackerlab/vu/safe.h" #include "hackerlab/rx/dbug.h" int rx_trace = 0; int rx_depth_limit = 0; #endif #include "hackerlab/rx-posix/errnorx.h" #include "hackerlab/rx-posix/match-regexp.h" static unsigned long solns_allocated; static unsigned long solns_freed; #define max0(N) (((N) >= 0) ? (N) : 0) /* __STDC__ prototypes for static functions */ static int rx_str_vmfn (void * closure, const t_uchar ** burstp, rx_off_t * lenp, rx_off_t * offsetp, rx_off_t start, rx_off_t end, rx_off_t need); static int rx_str_contextfn (void * closure, struct rx_exp_node * node, rx_off_t start, rx_off_t end, struct rx_registers * regs); static int rx_solution_fit_cset_p (struct rx_solutions * solns); static int rx_solution_fit_str_p (struct rx_solutions * solns); static int rx_solution_fits (struct rx_solutions * solns); static int rx_dfa_longest_counting (int * label, size_t * match_len, size_t * matches_count, struct rx_dfa * dfa, const t_uchar * str, size_t len); static int rx_longest_split_guess (int * label, struct rx_solutions * solns); static int save_nested_registers (struct rx_solutions * solns); static void restore_nested_registers (struct rx_solutions * solns); static int rx_next_solution_internal (struct rx_solutions * solns, jmp_buf * err_escape, int depth); /************************************************************************ *(h0 "Regexp Matching" * :includes ("rx-posix/match-regexp.h")) * * * In xref:"Regexp Expression Trees", we saw how to build expression * trees for regexps and elsewhere how to convert those regexps which * are regular expressions to DFA. In xref:"DFA String Comparisons" * we saw DFA-based functions that can compare a string to a regular * expression. * * But what about those regexps which are not regular expressions? So * far, except for the quasi-standard functions `regexec' and * `regnexec', we have no way to match non-regular regexps. * * The functions in this chapter implement regexp matching. The * interface is very detailed, but there are only a few functions and * they are conceptually simple. * */ /*(menu) */ /************************************************************************ *(h1 "An Overview of the Regexp Matching Interface") * * Given a regexp, and an input string, a regexp comparison function * should return a value that indicates whether or not the string * matches, and an array of values filled in with the substring * positions of elements of the input string that matched the * parenthesized subexpressions in the match. (For example, see * xref:"regexec".) We start out intending to build a regexp * comparison function that fits the preceeding description and make * two observations. * * First, the function needs to be recursive because we only know how * to check whether or not some kinds of regexp match by checking * whether their subexpressions match. * * Second, the function needs to return more than one set of return * values because a regexp can often match a string in more than one * way -- returning a different set of values for each way of * matching. To find the best overall match for a regexp, we may have * to consider more than one way of matching the subexpressions of * that regexp. In fact, the Posix standard for regexps essentially * mandates that we perform a potentially exhaustive search through * the possible ways of matching subexpressions. So, our recursive * comparison function has to be able to find all of the different * ways of matching a particular regexp and string to facilitate that * search. * * Fortunately, we are able to order the search through the set of * subexpressions in such a way that we will often find the best * answer (and know it is the best answer) early. So while our * recursive comparison function has to be able to return all possible * solutions, it should be free to return them in the order we will * search them, and to only actually construct a particular solution * if it is actually required during a search. We can usually save * time by not building solutions that we don't need to search. * * The functions in this chapter implement such a recursive comparison * function. Given a regexp and a string, the functions return a * lazilly-constructed stream of all of the possible ways of matching * the regexp to the string. The stream is sorted; in the solution * stream of a regexp subexpression, the best match, according to the * rules mandated by Posix, is always the earliest match in the stream * that also satisfies the constraints of the overall match of the * containing expressions. * * You build one of these streams of subexpression solutions by calling * `rx_make_solutions', passing the regexp and input string. You * read off elements of the stream by calling `rx_next_solution' which * actually does the work of computing the next solution in the list. * * Implementing a function like `regexec' or `regnexec' is easy. * `regexec' iterates over each possible starting point for a match: * * for (start_pos = 0; start_pos < string_length; ++start_pos) * * At each starting position, `regexec' iterates through each possible * ending position: * * for (end_pos = string_length; end_pos >= start_pos; --end_pos) * * For each possible starting and ending position, `regexec' * constructs a stream of regexp solutions for that substring (by * calling `rx_make_solutions'). It tries to read the first solution * on that stream by calling `rx_next_solution'. If the stream is not * empty, the first solution in the stream is the best possible * solution, and it is returned from `regexec'. * * When `regexec' calls `rx_next_solution' to find out if the stream * of solutions is empty, more streams of solutions may be created for * the subexpressions of the overall regexp. Those recursively * created streams may have to be searched to find an overall * solution. Even though `regexec' only reads one solution from the * stream it creates, the recursive calls to `rx_next_solution' may * read many solutions from the streams they create. * * As just described, you might think `regexec' and `regnexec' do a * lot of work (running so many separate regexp comparisons). You * would be right. Consequently, the real-world implementations of * `regexec' and `regnexec' employ several tricks to reduce the number * of regexp comparisons actually performed -- they try to avoid * calling the functions in this chapter. In addition, the functions * in this chapter employ several tricks to avoid searching * recursively created streams of solutions. Still, in the general * case, functions like `regexec' use the interface described here in * the computationally expensive way described above. (The exact * complexity of a search depends on the particular regexp but in the * worst cases, it is a polynomial function (of high degree) of the * length of the string being searched.) * */ /************************************************************************ *(h1 "Regexp Match Function Data Structures") * */ /*(c #s"struct rx_solutions" :category type) * struct rx_solutions; * * This opaque structure type represents the stream of solutions for * matching a particular regexp against a particular string. */ struct rx_solutions { int small_p; int step; int cset_size; struct rx_exp_node * exp; struct rx_exp_node ** subexps; int nsub; struct rx_registers * regs; rx_off_t start; rx_off_t end; rx_vmfn vmfn; rx_contextfn contextfn; void * closure; struct rx_unfa * dfa; struct rx_dfa match_engine; int certainly_fits; /* we know in advance that rx_solution_fits returns 1 */ int certain_final_tag; int no_fancy_guessing; struct rx_unfa * left_dfa; struct rx_dfa left_match_engine; rx_off_t split_guess; struct rx_solutions * left; struct rx_solutions * right; int interval_x; int interval_from; int interval_to; rx_off_t * saved_rm_so; rx_off_t * saved_rm_eo; int final_tag; }; static struct rx_solutions no_solutions; #if 0 /*(c #s"struct rx_registers" :category type) * struct rx_registers; * * This structure type holds information about the match position * of one regexp subexpression in a (potentially) larger string. * It includes at least these fields: * insert*/ struct rx_registers { rx_off_t rm_so; /* The start of the match. */ rx_off_t rm_eo; /* The end of the match. */ }; /*end-insert */ #endif /************************************************************************ * Low Level Support for Basic String Matching * */ struct rx_str_closure { struct rx_context_rules rules; const t_uchar * str; rx_off_t len; }; static int rx_str_vmfn (void * closure, const t_uchar ** burstp, rx_off_t * lenp, rx_off_t * offsetp, rx_off_t start, rx_off_t end, rx_off_t need) { struct rx_str_closure * strc; strc = (struct rx_str_closure *)closure; if ( (need < 0) || (need > strc->len)) return 0; *burstp = strc->str; *lenp = strc->len; *offsetp = 0; return 0; } static int rx_str_contextfn (void * closure, struct rx_exp_node * node, rx_off_t start, rx_off_t end, struct rx_registers * regs) { struct rx_str_closure * strc; strc = (struct rx_str_closure *)closure; switch (node->intval) { case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': { int cmp; int regn; regn = node->intval - '0'; if ( (regs[regn].rm_so == -1) || ((end - start) != (regs[regn].rm_eo - regs[regn].rm_so))) return 0; else { if (strc->rules.case_indep) cmp = str_casecmp_n ((t_uchar *)strc->str + start, end - start, (t_uchar *)strc->str + regs[regn].rm_so, end - start); else cmp = str_cmp_n ((t_uchar *)strc->str + start, end - start, (t_uchar *)strc->str + regs[regn].rm_so, end - start); return (!cmp ? 1 : 0); } } case '^': { return (( (start == end) && ( ((start == 0) && !strc->rules.not_bol) || ( (start > 0) && strc->rules.newline_anchor && (strc->str[start - 1] == '\n')))) ? 1 : 0); } case '$': { return (( (start == end) && ( ((start == strc->len) && !strc->rules.not_eol) || ( (start < strc->len) && strc->rules.newline_anchor && (strc->str[start] == '\n')))) ? 1 : 0); } default: while (1) panic ("unrecognized context function in rx_str_contextfn"); } } /************************************************************************ *(h1 "Building and Freeing a Stream of Solutions -- The Simplified Common Case") * */ #if 0 /*(c rx_basic_make_solutions) * struct rx_solutions * * rx_basic_make_solutions (struct rx_registers * regs, * struct rx_exp_node * expression, * struct rx_exp_node ** subexps, * int nsub, * rx_off_t start, * rx_off_t end, * struct rx_context_rules * rules, * const t_uchar * str, * int small_p); * * Construct a stream of solutions for matching the regexp * `expression' against the substring of `str' beginning at `start' * and ending at `end'. * * Part of the output of stream, the positions of sub-expressions in a * solution, will be stored in `regs' each time the next solution is * read using `rx_next_solution'. * * The parameter `context_rules' contains flags which effect the * meaning of some regexp operators. * insert*/ struct rx_context_rules { t_uchar newline_anchor; /* If set, an anchor at a newline matches.*/ t_uchar not_bol; t_uchar not_eol; /* If set, the anchors do not match the beginning and end of the complete input string.*/ t_uchar case_indep; /* If set, all string comparisons should be case independent.*/ }; /*end-insert * * You must apply `rx_analyze_rexp' to the regexp `expression' before * calling his function. `rx_analyze_rexp' computes recursively * defined properties of the subexpressions of the expression and * records those properties in the expression tree. During a match, * `rx_next_solution' examines those properties to decide how each * subexpression should be treated. * * `rx_analyze_rexp' will return to you an array of the parenthesized * subexpressions of `expression' and tell you the total number of * subexpressions. You must pass this information along to * `rx_basic_make_solutions' as the `subexps' and `nsub' parameters. * * `rx_analyze_rexp' will also fill in the `small_advised_p' field of * `expression'. You can pass this along to `rx_basic_make_solutions' * as the parameter `small_p'. If not 0, `small_p' advises * `rx_basic_make_solutions' that the regexp is small and simple and * therefore not worthy of several high-latency optimizations that * `rx_next_solution' is capable of. Setting this parameter correctly * can improve performance, setting it incorrectly can ruin * performance, and `rx_analyze_rexp' can only approximately compute * whether or not to set this parameter (it makes a safe guess). The * safest value to pass is 0, which activates the high-latency * optimizations, sometimes (slightly) slowing down matches that * aren't particularly expensive while (substantially) speeding up * some matches that are particularly expensive. * * `rx_basic_make_solutions' requires that the entire input string be * in contiguous memory at one time. Another function, * `rx_make_solutions', can be used if the string is not contiguous in * memory or is not all in memory at one time. */ #endif struct rx_solutions * rx_basic_make_solutions (struct rx_registers * regs, struct rx_exp_node * expression, struct rx_exp_node ** subexps, int nsub, rx_off_t start, rx_off_t end, struct rx_context_rules * rules, const t_uchar * str, int small_p) { struct rx_solutions * solns; struct rx_str_closure * closure; if ( expression && (expression->len >= 0) && (expression->len != (end - start))) return &no_solutions; closure = (struct rx_str_closure *)rx_nfa_cache_malloc (sizeof (*closure)); if (!closure) return 0; closure->str = str; closure->len = end; closure->rules = *rules; solns = rx_make_solutions (regs, 256, expression, subexps, nsub, start, end, 0, rx_str_vmfn, rx_str_contextfn, (void *)closure, small_p, 0, 0); if (!solns) { rx_nfa_cache_free ((void *)closure); return 0; } return solns; } /*(c rx_basic_free_solutions) * void rx_basic_free_solutions (struct rx_solutions * solns); * * Release all storage held by a stream of regexp solutions allocated * by `rx_basic_make_solutions'. */ void rx_basic_free_solutions (struct rx_solutions * solns) { if (solns == 0) return; if (solns == &no_solutions) return; rx_nfa_cache_free (rx_solutions_closure (solns)); rx_free_solutions (solns); } /************************************************************************ * Low Level Support for rx_next_solution * * * */ /* static int rx_solution_fit_cset_p (struct rx_solutions * solns); * * The expression is a character set node and the current substring is * one character long. Compare the two and return 1 if they match, 0 * otherwise. */ static int rx_solution_fit_cset_p (struct rx_solutions * solns) { int current_pos; const t_uchar * burst; rx_off_t burst_addr; rx_off_t burst_len; rx_off_t rel_pos_in_burst; int vmstat; const t_uchar * pos; current_pos = solns->start; vmstat = solns->vmfn (solns->closure, &burst, &burst_len, &burst_addr, current_pos, current_pos + 1, current_pos); if (vmstat) return vmstat; rel_pos_in_burst = current_pos - burst_addr; pos = burst + rel_pos_in_burst; return !!bits_is_member (solns->exp->cset, *pos); } /* static int rx_solution_fit_str_p (struct rx_solutions * solns); * * The expression is a string node and the current substring is the * same length. Compare the two and return 1 if they match, 0 * otherwise. */ static int rx_solution_fit_str_p (struct rx_solutions * solns) { rx_off_t current_pos; const t_uchar * burst; rx_off_t burst_addr; rx_off_t burst_len; rx_off_t burst_end_addr; rx_off_t rel_pos_in_burst; int vmstat; rx_off_t count; t_uchar * key; current_pos = solns->start; count = solns->exp->str_len; key = (t_uchar *)solns->exp->str; next_burst: vmstat = solns->vmfn (solns->closure, &burst, &burst_len, &burst_addr, current_pos, solns->end, current_pos); if (vmstat) return vmstat; rel_pos_in_burst = current_pos - burst_addr; burst_end_addr = burst_addr + burst_len; { const t_uchar * pos; pos = burst + rel_pos_in_burst; if (burst_end_addr >= solns->end) { while (count) { if (rx_poll) (*rx_poll)(); if (*pos != *key) return 0; ++pos; ++key; --count; } return 1; } else { rx_off_t part_count; rx_off_t part_count_init; part_count_init = burst_len - rel_pos_in_burst; part_count = part_count_init; while (part_count) { if (rx_poll) (*rx_poll)(); if (*pos != *key) return 0; ++pos; ++key; --part_count; } count -= part_count_init; current_pos += burst_len - rel_pos_in_burst; goto next_burst; } } } /* static int rx_solution_fits (struct rx_solutions * solns); * * Compare a DFA which describes a superset of the regexp expression * to the current substring and return 1 if they match, 0 otherwise. * That the DFA matches is a necessary but not sufficient condition of * the regexp expression itself matching. This test can be used to * avoid a more expensive regexp comparison. Return -1 for ESPACE. */ static int rx_solution_fits (struct rx_solutions * solns) { const t_uchar * burst; rx_off_t burst_addr; rx_off_t burst_len; rx_off_t burst_end_addr; rx_off_t rel_pos_in_burst; int vmstat; rx_off_t current_pos; if (solns->certainly_fits) { solns->match_engine.final_tag = solns->certain_final_tag; return 1; } current_pos = solns->start; next_burst: vmstat = solns->vmfn (solns->closure, &burst, &burst_len, &burst_addr, current_pos, solns->end, current_pos); if (vmstat) return vmstat; rel_pos_in_burst = current_pos - burst_addr; burst_end_addr = burst_addr + burst_len; if (burst_end_addr >= solns->end) { int fit_label; if (rx_dfa_fits (&fit_label, &solns->match_engine, burst + rel_pos_in_burst, solns->end - current_pos)) return -1; /* espace */ return fit_label; } else { int fit_status; fit_status = rx_dfa_advance (&solns->match_engine, burst + rel_pos_in_burst, burst_len - rel_pos_in_burst); if (fit_status < 0) { return -1; } else if (fit_status) { current_pos += burst_len - rel_pos_in_burst; goto next_burst; } else return 0; } } static int rx_dfa_longest_counting (int * label, size_t * match_len, size_t * matches_count, struct rx_dfa * dfa, const t_uchar * str, size_t len) { size_t pos; size_t n_matches; size_t best_len; int best_label; pos = 0; n_matches = 0; best_len = 0; best_label = rx_dfa_tag (dfa); if (best_label) { n_matches = 1; } while (pos < len) { int adv_stat; size_t adv_amt; adv_stat = rx_dfa_advance_to_final (&adv_amt, dfa, str + pos, len - pos); if (adv_stat < 0) return -1; if (!adv_stat) break; pos += adv_amt; if (rx_dfa_tag (dfa)) { best_len = pos; ++n_matches; best_label = rx_dfa_tag (dfa); } } *label = best_label; *match_len = best_len; *matches_count = n_matches; return 0; } /* adjust split_guess downward to the nearest plausible * position. Return 0 if none exists, 1 otherwise. */ static int rx_longest_split_guess (int * label, struct rx_solutions * solns) { const t_uchar * burst; rx_off_t burst_addr; rx_off_t burst_len; rx_off_t burst_end_addr; rx_off_t rel_pos_in_burst; int vmstat; rx_off_t current_pos; size_t n_matches; rx_off_t best_guess; int best_label; if (solns->no_fancy_guessing) { *label = 0; return 1; } current_pos = solns->start; n_matches = 0; best_guess = -1; best_label = 0; if (rx_dfa_goto_start_superstate (&solns->left_match_engine, 1)) return -1; while (1) { int fit_label; size_t matches_here; size_t len_here; vmstat = solns->vmfn (solns->closure, &burst, &burst_len, &burst_addr, current_pos, solns->split_guess, current_pos); if (vmstat) { rx_clear_dfa_state (&solns->left_match_engine); return vmstat; } rel_pos_in_burst = current_pos - burst_addr; burst_end_addr = burst_addr + burst_len; if (rx_dfa_longest_counting (&fit_label, &len_here, &matches_here, &solns->left_match_engine, burst + rel_pos_in_burst, ((burst_end_addr >= solns->split_guess) ? solns->split_guess - current_pos : burst_end_addr - current_pos))) { rx_clear_dfa_state (&solns->left_match_engine); return -1; } if (fit_label) { n_matches += matches_here; best_guess = len_here + rel_pos_in_burst; best_label = fit_label; } if (!fit_label || (burst_end_addr >= solns->split_guess)) { if (!n_matches) { rx_clear_dfa_state (&solns->left_match_engine); return 0; } solns->split_guess = best_guess; *label = best_label; if (n_matches > (best_guess * 2)) solns->no_fancy_guessing = 1; rx_clear_dfa_state (&solns->left_match_engine); return 1; } current_pos += burst_len - rel_pos_in_burst; } } /************************************************************************ *(h1 "Reading Elements From a Stream of Solutions") * */ /* Save the values of registers for reporting parentheses * enclosed in the expression solns->exp. Initialize * those registers to -1. * * These are stored in the `solns' structure. Only one set of register * values can be saved, per `solns', at a time. */ static int save_nested_registers (struct rx_solutions * solns) { int first_subexp; int last_subexp; int n_subexps; int x; /* Save the value of the set of numbered * parentheses in the tree rooted at this * expression and initialized them to -1. If * this expression does not match, they will * be restored. If it does match, they get values * from that match and not from previous matches. */ first_subexp = solns->exp->min_enclosed_paren; last_subexp = solns->exp->max_enclosed_paren; n_subexps = 1 + (last_subexp - first_subexp); if (!solns->saved_rm_so) { solns->saved_rm_so = (rx_off_t *)rx_nfa_cache_malloc (sizeof (rx_off_t) * n_subexps); solns->saved_rm_eo = (rx_off_t *)rx_nfa_cache_malloc (sizeof (rx_off_t) * n_subexps); if (!solns->saved_rm_so || !solns->saved_rm_eo) { rx_nfa_cache_free ((void *)solns->saved_rm_so); rx_nfa_cache_free ((void *)solns->saved_rm_eo); return -1; } } for (x = 0; x < n_subexps; ++x) { solns->saved_rm_so[x] = solns->regs[x + first_subexp].rm_so; solns->saved_rm_eo[x] = solns->regs[x + first_subexp].rm_eo; solns->regs[x + first_subexp].rm_so = -1; solns->regs[x + first_subexp].rm_eo = -1; } return 0; } /* Restore register values saved by `save_nested_registers'. * * This doesn't erase the stored values. */ static void restore_nested_registers (struct rx_solutions * solns) { int first_subexp; int last_subexp; int n_subexps; int x; first_subexp = solns->exp->min_enclosed_paren; last_subexp = solns->exp->max_enclosed_paren; n_subexps = 1 + (last_subexp - first_subexp); for (x = 0; x < n_subexps; ++x) { solns->regs[x + first_subexp].rm_so = solns->saved_rm_so[x]; solns->regs[x + first_subexp].rm_eo = solns->saved_rm_eo[x]; } } /*(c rx_next_solution) * int rx_next_solution (struct rx_solutions * solns); * * If there are no more solutions in the stream of regexp solutions * `solns', return 0. Otherwise, advance the stream to the next * solution and return 1. Return -1 for ESPACE. * * Advancing the stream means filling in the `regs' structure that was * passed to `rx_basic_make_solutions' or `rx_make_solutions' and * establishing the value that will be returned by subsequent calls to * `rx_solutions_final_tag'. * * Solutions are returned in order from best to worst according to the * leftmost-longest rule (see xref:"Describing Regexps Formally"). * * It is possible to asynchronously abort a call to this function. * See xref:"Exiting Long-Running Matches". */ int rx_next_solution (struct rx_solutions * solns) { jmp_buf err_escape; if (setjmp (err_escape)) { return -1; } return rx_next_solution_internal (solns, &err_escape, 0); } static int rx_next_solution_internal (struct rx_solutions * solns, jmp_buf * err_escape, int depth) { #ifdef TRACE if (rx_trace && (!rx_depth_limit || (depth < rx_depth_limit))) { safe_printfmt (2, "%*s================\n", depth, ""); safe_printfmt (2, "%*sstep: %d\n", depth, "", solns->step); safe_printfmt (2, "%*s----------------\n", depth, ""); safe_printfmt (2, "%*sexpression:\n", depth, ""); safe_printfmt (2, "%*s", depth, ""); rx_unparse_print_rexp (2, 256, solns->exp); safe_printfmt (2, "\n"); safe_printfmt (2, "%*s----------------\n", depth, ""); safe_printfmt (2, "%*sstring:\n", depth, ""); { const t_uchar * burst; rx_off_t burst_addr; rx_off_t burst_len; rx_off_t rel_pos_in_burst; int vmstat; vmstat = solns->vmfn (solns->closure, &burst, &burst_len, &burst_addr, solns->start, solns->end, solns->start); if (vmstat) panic ("vmstat failure in trace"); rel_pos_in_burst = solns->start - burst_addr; safe_printfmt (2, "%*s%.*s\n", depth, "", ((solns->end - solns->start) <= (burst_len - rel_pos_in_burst) ? (solns->end - solns->start) : (burst_len - rel_pos_in_burst)), burst + rel_pos_in_burst); } safe_printfmt (2, "%*s----------------\n", depth, ""); } #endif #define KNOWN_LENGTH(EXP) (!(EXP) \ ? 0 \ : ((EXP)->len >= 0 \ ? (EXP)->len \ : ((((EXP)->type == r_context) && ((EXP)->intval >= '0') && ((EXP)->intval <= '9')) \ ? ((solns->regs[(EXP)->intval - '0'].rm_so >= 0) \ ? (solns->regs[(EXP)->intval - '0'].rm_eo - solns->regs[(EXP)->intval - '0'].rm_so) \ : -1) \ : -1))) if (solns == &no_solutions) { return 0; } if (!solns->exp) { if (solns->step != 0) { return 0; } else { solns->step = 1; solns->final_tag = 1; return (solns->start == solns->end ? 1 : 0); } } else if (!(solns->small_p || solns->exp->observed)) { if (solns->step != 0) { return 0; } else if (solns->exp->type == r_string) { int ans; ans = rx_solution_fit_str_p (solns); solns->final_tag = 1; solns->step = -1; return ans; } else { int ans; ans = rx_solution_fits (solns); if (ans < 0) longjmp (*err_escape, 1); solns->final_tag = solns->match_engine.final_tag; solns->step = -1; return !!ans; } } else /* if (solns->small_p || solns->exp->observed) */ { int fits; switch (solns->step) { case -2: if (solns->exp->min_enclosed_paren) { int first_subexp; int last_subexp; int x; first_subexp = solns->exp->min_enclosed_paren; last_subexp = solns->exp->max_enclosed_paren; for (x = first_subexp; x <= last_subexp; ++x) { solns->regs[x].rm_so = solns->saved_rm_so[x - first_subexp]; solns->regs[x].rm_eo = solns->saved_rm_eo[x - first_subexp]; } } return 0; case -1: return 0; case 0: if (solns->small_p) { solns->step = 1; goto resolve_fit; } else { fits = rx_solution_fits (solns); if (fits < 0) longjmp (*err_escape, 1); /* Set final_tag here because this rough fit test * may be all the matching that gets done. * For example, consider a paren node containing * a true regular expression ending with a cut * operator. */ solns->final_tag = solns->match_engine.final_tag; if (fits == 0) { solns->step = -1; return fits; } else { solns->step = 1; goto resolve_fit; } } default: resolve_fit: switch (solns->exp->type) { case r_string: if (!solns->small_p) { while (1) panic ("bogus regexp in rx_next_solution_internal"); } else { int answer; answer = rx_solution_fit_str_p (solns); solns->final_tag = 1; solns->step = -1; return answer; } case r_cset: if (!solns->small_p) { while (1) panic ("bogus regexp in rx_next_solution_internal"); } else { int answer; answer = rx_solution_fit_cset_p (solns); solns->final_tag = 1; solns->step = -1; return answer; } case r_cut: if (!solns->small_p) { while (1) panic ("bogus regexp in rx_next_solution_internal"); } else { solns->final_tag = solns->exp->intval; solns->step = -1; return !!solns->exp->intval; } case r_parens: { int paren_stat; switch (solns->step) { case 1: if (solns->exp->min_enclosed_paren) { if (save_nested_registers (solns)) longjmp (*err_escape, 1); } if ( !solns->small_p && ( !solns->exp->left || !solns->exp->left->observed)) { /* We already proved that this (simple) * subexpression matches. Optionally, record * its position. Return success once, and * failure for all subsequent attempts to find * other matches. */ if (solns->exp->intval) { solns->regs[solns->exp->intval].rm_so = solns->start; solns->regs[solns->exp->intval].rm_eo = solns->end; } solns->step = -2; /* Keep the final_tag from the fits test. */ return 1; } /* We must search through possible matches of the subexpression. */ solns->left = rx_make_solutions (solns->regs, solns->cset_size, solns->exp->left, solns->subexps, solns->nsub, solns->start, solns->end, 0, solns->vmfn, solns->contextfn, solns->closure, solns->small_p, 0, 0); if (!solns->left) longjmp (*err_escape, 1); case 2: if (solns->exp->min_enclosed_paren) { int first_subexp; int last_subexp; int x; /* Initialize the parentheses in the tree * rooted at this expression to -1. */ first_subexp = solns->exp->min_enclosed_paren; last_subexp = solns->exp->max_enclosed_paren; for (x = first_subexp; x <= last_subexp; ++x) { solns->regs[x].rm_so = -1; solns->regs[x].rm_eo = -1; } } paren_stat = rx_next_solution_internal (solns->left, err_escape, depth + 1); if (paren_stat < 0) longjmp (*err_escape, 1); if (paren_stat == 1) { if (solns->exp->intval) { solns->regs[solns->exp->intval].rm_so = solns->start; solns->regs[solns->exp->intval].rm_eo = solns->end; } solns->final_tag = solns->left->final_tag; solns->step = 2; return 1; } else { rx_free_solutions (solns->left); solns->left = 0; if (solns->exp->min_enclosed_paren) { /* This expression didn't match. Restore the old subexpression * positions. */ restore_nested_registers (solns); } solns->step = -1; return paren_stat; } } } case r_alternate: { int alt_stat; switch (solns->step) { case 1: solns->left = rx_make_solutions (solns->regs, solns->cset_size, solns->exp->left, solns->subexps, solns->nsub, solns->start, solns->end, 0, solns->vmfn, solns->contextfn, solns->closure, solns->small_p, 0, 0); if (!solns->left) longjmp (*err_escape, 1); case 2: alt_stat = rx_next_solution_internal (solns->left, err_escape, depth + 1); if (alt_stat < 0) longjmp (*err_escape, 1); if (alt_stat == 1) { solns->final_tag = solns->left->final_tag; solns->step = 2; return alt_stat; } else { rx_free_solutions (solns->left); solns->left = 0; } solns->right = rx_make_solutions (solns->regs, solns->cset_size, solns->exp->right, solns->subexps, solns->nsub, solns->start, solns->end, 0, solns->vmfn, solns->contextfn, solns->closure, solns->small_p, 0, 0); if (!solns->right) longjmp (*err_escape, 1); case 4: alt_stat = rx_next_solution_internal (solns->right, err_escape, depth + 1); if (alt_stat < 0) longjmp (*err_escape, 1); if (alt_stat == 1) { solns->final_tag = solns->right->final_tag; solns->step = 4; return alt_stat; } else { solns->step = -1; rx_free_solutions (solns->right); solns->right = 0; return alt_stat; } } } case r_concat: { switch (solns->step) { int concat_stat; int split_guess_stat; int certain_label; case 1: if (!solns->exp->left) solns->split_guess = solns->start; else { rx_off_t known_left_length; known_left_length = KNOWN_LENGTH (solns->exp->left); if (known_left_length >= 0) { if (known_left_length > (solns->end - solns->start)) { solns->step = -1; return 0; } solns->split_guess = solns->start + known_left_length; } else { rx_off_t known_right_length; known_right_length = KNOWN_LENGTH (solns->exp->right); if (known_right_length >= 0) { if (known_right_length > (solns->end - solns->start)) { solns->step = -1; return 0; } solns->split_guess = solns->end - known_right_length; } else solns->split_guess = solns->end; } } concat_split_guess_loop: split_guess_stat = rx_longest_split_guess (&certain_label, solns); if (split_guess_stat < 0) longjmp (*err_escape, 1); if (!split_guess_stat) { solns->step = -1; return 0; } solns->left = rx_make_solutions (solns->regs, solns->cset_size, solns->exp->left, solns->subexps, solns->nsub, solns->start, solns->split_guess, 0, solns->vmfn, solns->contextfn, solns->closure, solns->small_p, !!certain_label, certain_label); if (!solns->left) longjmp (*err_escape, 1); concat_try_next_left_match: concat_stat = rx_next_solution_internal (solns->left, err_escape, depth + 1); if (concat_stat < 0) longjmp (*err_escape, 1); if (concat_stat != 1) { rx_free_solutions (solns->left); solns->left = 0; if ( (KNOWN_LENGTH (solns->exp->left) < 0) && (KNOWN_LENGTH (solns->exp->right) < 0)) { --solns->split_guess; if (solns->split_guess >= solns->start) goto concat_split_guess_loop; } solns->step = -1; return 0; } solns->right = rx_make_solutions (solns->regs, solns->cset_size, solns->exp->right, solns->subexps, solns->nsub, solns->split_guess, solns->end, 0, solns->vmfn, solns->contextfn, solns->closure, solns->small_p, 0, 0); if (!solns->right) longjmp (*err_escape, 1); case 2: concat_stat = rx_next_solution_internal (solns->right, err_escape, depth + 1); if (concat_stat < 0) longjmp (*err_escape, 1); if (concat_stat == 1) { solns->final_tag = solns->right->final_tag; solns->step = 2; return concat_stat; } else { rx_free_solutions (solns->right); solns->right = 0; goto concat_try_next_left_match; } } } case r_right_concat: { switch (solns->step) { int concat_stat; rx_off_t known_left_length; rx_off_t known_right_length; case 1: known_left_length = KNOWN_LENGTH (solns->exp->left); known_right_length = KNOWN_LENGTH (solns->exp->right); if (known_left_length >= 0) { solns->split_guess = solns->start + known_left_length; } else if (known_right_length >= 0) { solns->split_guess = solns->end - known_right_length; } else solns->split_guess = solns->start; right_concat_split_guess_loop: solns->left = rx_make_solutions (solns->regs, solns->cset_size, solns->exp->left, solns->subexps, solns->nsub, solns->start, solns->split_guess, 0, solns->vmfn, solns->contextfn, solns->closure, solns->small_p, 0, 0); if (!solns->left) longjmp (*err_escape, 1); right_concat_try_next_left_match: concat_stat = rx_next_solution_internal (solns->left, err_escape, depth + 1); if (concat_stat < 0) longjmp (*err_escape, 1); if (concat_stat != 1) { rx_free_solutions (solns->left); solns->left = 0; if ( (KNOWN_LENGTH (solns->exp->left) < 0) && (KNOWN_LENGTH (solns->exp->right) < 0)) { ++solns->split_guess; if (solns->split_guess <= solns->end) goto right_concat_split_guess_loop; } solns->step = -1; return 0; } solns->right = rx_make_solutions (solns->regs, solns->cset_size, solns->exp->right, solns->subexps, solns->nsub, solns->split_guess, solns->end, 0, solns->vmfn, solns->contextfn, solns->closure, solns->small_p, 0, 0); if (!solns->right) longjmp (*err_escape, 1); case 2: concat_stat = rx_next_solution_internal (solns->right, err_escape, depth + 1); if (concat_stat < 0) longjmp (*err_escape, 1); if (concat_stat == 1) { solns->final_tag = solns->right->final_tag; solns->step = 2; return concat_stat; } else { rx_free_solutions (solns->right); solns->right = 0; goto right_concat_try_next_left_match; } } } case r_star: { int star_stat; switch (solns->step) { case 1: /* Begin by trying to match the entire string * with a single iteration. */ solns->left = rx_make_solutions (solns->regs, solns->cset_size, solns->exp->left, solns->subexps, solns->nsub, solns->start, solns->end, 0, solns->vmfn, solns->contextfn, solns->closure, solns->small_p, 0, 0); if (!solns->left) longjmp (*err_escape, 1); case 2: star_stat = rx_next_solution_internal (solns->left, err_escape, depth + 1); if (star_stat < 0) longjmp (*err_escape, 1); if (star_stat == 1) { /* found a single-iteration whole-string match */ solns->final_tag = solns->left->final_tag; solns->step = 2; return 1; } /* no more single-iteration whole-string matches */ rx_free_solutions (solns->left); solns->left = 0; if (solns->start == solns->end) { /* when comaring to the empty string and none of the single-iteration * matches work, try matching with zero iterations, then give up */ solns->step = -1; return 1; } /* when comparing to a non-empty string and none of the single-iteration * matches work, try all matches with two or more non-empty iterations. */ if (!solns->exp->left || (solns->exp->left->len == 0)) { solns->step = -1; return 0; } else if (solns->exp->left->len > 0) { if ( (solns->exp->left->len >= (solns->end - solns->start)) || (0 != ((solns->end - solns->start) % solns->exp->left->len))) { solns->step = -1; return 0; } solns->split_guess = solns->end - solns->exp->left->len; } else solns->split_guess = solns->start + 1; case 3: star_3: /* Suppose the string has been split into two parts: s == s1 s2 * and we are trying to match R*. * * Recurse by matching s1 against R*, and s2 against R. * * However, if s == s1 and s2 is the empty string, comparing * s1 to R* would cause an infinite recursion. So instead, * compare s1 to R and s2 to R. * * Comparing s2 to R is often much less expensive than comparing * s1 to R*. If s2 doesn't match R, time spent comparing s1 to R* * is wasted. So, before trying s1 against R*, make sure that * s2 can match R. * * Registers are subtle. There are three possibilities: * * [A] R contains no reporting parens * [B] R contains reporting parens * * In case A, matching s1 against R* won't change any registers, * so it is safe to match s to R first. * * In the second case, either * * [B1] R is a reporting parenthesized expression * [B2] R is a non-reporting parenthesized expression * * In either of those two cases, the first step of * comparing s2 to R is to set all of the * registers for nested reporting parentheses to * -1. As a result, again, s1 against R* has no (observable) effect * on registers -- so it is safe to match s to R first. * */ solns->right = rx_make_solutions (solns->regs, solns->cset_size, solns->exp->left, solns->subexps, solns->nsub, solns->split_guess, solns->end, 0, solns->vmfn, solns->contextfn, solns->closure, solns->small_p, 0, 0); if (!solns->right) longjmp (*err_escape, 1); star_stat = rx_next_solution_internal (solns->right, err_escape, depth + 1); if (star_stat < 0) longjmp (*err_escape, 1); if (star_stat != 1) { /* No match for s2 against R, so guess again: */ rx_free_solutions (solns->right); solns->right = 0; if (solns->exp->left->len > 0) { solns->step = -1; return 0; } ++solns->split_guess; if (solns->split_guess > solns->end) { solns->step = -1; return 0; } goto star_3; } /* Aha -- s2 matches R. Does s1 match R*? * * Testing s1 against R* can modify some registers * that were set while matching s2 to R. These * registers must be saved and then restored before * returning the overall match. */ if (save_nested_registers (solns)) { longjmp (*err_escape, 1); } if (solns->split_guess == solns->end) solns->left = rx_make_solutions (solns->regs, solns->cset_size, solns->exp->left, solns->subexps, solns->nsub, solns->start, solns->split_guess, 0, solns->vmfn, solns->contextfn, solns->closure, solns->small_p, 0, 0); else solns->left = rx_make_solutions (solns->regs, solns->cset_size, solns->exp, solns->subexps, solns->nsub, solns->start, solns->split_guess, 0, solns->vmfn, solns->contextfn, solns->closure, solns->small_p, 0, 0); if (!solns->left) longjmp (*err_escape, 1); star_stat = rx_next_solution_internal (solns->left, err_escape, depth + 1); if (star_stat < 0) longjmp (*err_escape, 1); if (star_stat != 1) { /* no matches for the left part of the split string * at this split_guess. */ rx_free_solutions (solns->left); rx_free_solutions (solns->right); solns->left = 0; solns->right = 0; if (solns->exp->left->len > 0) { solns->step = -1; return 0; } ++solns->split_guess; if (solns->split_guess > solns->end) { solns->step = -1; return 0; } goto star_3; } /* Found at least one solution for both s1 against R* and * s2 against R. * * Return that solution. First, restore the registers from * the s2/R match: * */ restore_nested_registers (solns); solns->final_tag = solns->right->final_tag; solns->step = 4; return 1; case 4: /* This is reached when we've found one solution for * s1 against R* and s2 against R, but that solution * was rejected. * * Try to find another solution for s2/R, using the same * match for s1/R*. */ star_stat = rx_next_solution_internal (solns->right, err_escape, depth + 1); if (star_stat < 0) longjmp (*err_escape, 1); if (star_stat == 1) { /* found a match */ solns->final_tag = solns->right->final_tag; solns->step = 4; } /* No more matches for s2/R for the current match of s1/R* * * We could look for another s1/R* match -- but why bother? * Any changes to registers made by such a match are * not observable after any s/R match. So, try again with * a different split guess: */ rx_free_solutions (solns->left); rx_free_solutions (solns->right); solns->left = 0; solns->right = 0; if (solns->exp->left->len > 0) { solns->step = -1; return 0; } ++solns->split_guess; if (solns->split_guess > solns->end) { solns->step = -1; return 0; } goto star_3; } } case r_interval: { /* On entry, interval_x is the number of iterations * already charged to this interval. So, instead * of {intval, intval2}, the interval is actually: * * { max(0, intval - interval_x), * max(0, intval2 - interval_x) } * */ switch (solns->step) { int interval_stat; case 1: solns->interval_from = max0(solns->exp->intval - solns->interval_x); solns->interval_to = max0(solns->exp->intval2 - solns->interval_x); /* Should we try single iteration solutions? * * Yes if either: * * (interval_from <= 1) && (interval_to >= 1) * * or * ((solns->start == solns->end) && (interval_to >= 1)) * * If the string is the empty string (start == end), and any * iterations are permitted (interval_to >= 1) then all possible * solutions (except the 0-iteration solution) can be found with * a single iteration. Repeated iterations for a null match do not * add new solutions compared to a single iteration because the * single iteration will always have the same side effects as multiple * iterations ending with that single iteration. */ if ( ( (solns->start == solns->end) && (solns->interval_to >= 1) && ( !solns->exp->left || (solns->exp->left->len <= 0))) || ( (solns->interval_from <= 1) && (solns->interval_to >= 1) && (solns->start != solns->end) && solns->exp->left && ( (solns->exp->left->len < 0) || (solns->exp->left->len == (solns->end - solns->start))))) { solns->left = rx_make_solutions (solns->regs, solns->cset_size, solns->exp->left, solns->subexps, solns->nsub, solns->start, solns->end, 0, solns->vmfn, solns->contextfn, solns->closure, solns->small_p, 0, 0); if (!solns->left) longjmp (*err_escape, 1); case 2: interval_stat = rx_next_solution_internal (solns->left, err_escape, depth + 1); if (interval_stat < 0) longjmp (*err_escape, 1); if (interval_stat != 1) { rx_free_solutions (solns->left); solns->left = 0; goto try_0_iteration_null_match; } else { solns->step = 2; return 1; } } try_0_iteration_null_match: /* If we're trying to match the empty string, and 0 iterations are * permitted, that is the next best solution. If we're trying to * match the empty string, the 0 iteration solution is the only * remaining possibility. */ if (solns->start == solns->end) { solns->step = -1; return (solns->interval_from == 0); } /* The string is not empty. If only 0 iterations are permitted, * then no solutions are possible. */ if (solns->interval_to == 0) { solns->step = -1; return 0; } /* The string is not empty and no single iteration solution works. * Search through solutions with at least two iterations. We split * the string into two parts, and try to match the left part with N * iterations (N >= 1) and the right part with 1 iteration. * * To satisfy the left-to-right longest-subexpression rule, the right * part (matched by the last iteration) should be as long as possible. */ if (!solns->exp->left || (solns->exp->left->len == 0)) { /* never reached unless certain other optimizations are removed */ solns->step = -1; return 0; } else if (solns->exp->left->len > 0) { if ( (solns->exp->left->len > (solns->end - solns->start)) || (0 != ((solns->end - solns->start) % solns->exp->left->len))) { solns->step = -1; return 0; } solns->split_guess = solns->end - solns->exp->left->len; } else solns->split_guess = solns->start; interval_split_start_at_new_split_guess: solns->right = rx_make_solutions (solns->regs, solns->cset_size, solns->exp->left, solns->subexps, solns->nsub, solns->split_guess, solns->end, 0, solns->vmfn, solns->contextfn, solns->closure, solns->small_p, 0, 0); if (!solns->right) longjmp (*err_escape, 1); next_interval_right_solution: interval_stat = rx_next_solution_internal (solns->right, err_escape, depth + 1); if (interval_stat < 0) longjmp (*err_escape, 1); if (interval_stat != 1) { rx_free_solutions (solns->right); solns->right = 0; if (solns->exp->left->len < 0) { ++solns->split_guess; if (solns->split_guess <= solns->end) goto interval_split_start_at_new_split_guess; } /* No more solutions at all. */ solns->step = -1; return 0; } /* Found a solution for the right half of the split. */ if (save_nested_registers (solns)) { longjmp (*err_escape, 1); } solns->left = rx_make_solutions (solns->regs, solns->cset_size, solns->exp, solns->subexps, solns->nsub, solns->start, solns->split_guess, solns->interval_x + 1, solns->vmfn, solns->contextfn, solns->closure, solns->small_p, 0, 0); if (!solns->left) longjmp (*err_escape, 1); interval_stat = rx_next_solution_internal (solns->left, err_escape, depth + 1); if (interval_stat < 0) longjmp (*err_escape, 1); if (interval_stat != 1) { /* No more solutions for the left part of the string. */ rx_free_solutions (solns->left); solns->left = 0; goto next_interval_right_solution; } /* We found an overall solution for the interval. */ solns->step = 3; restore_nested_registers (solns); solns->final_tag = solns->right->final_tag; return 1; case 3: rx_free_solutions (solns->left); solns->left = 0; goto next_interval_right_solution; } } case r_context: { solns->step = -1; solns->final_tag = 1; return solns->contextfn (solns->closure, solns->exp, solns->start, solns->end, solns->regs); } } } while (1) panic ("unreached in rx_next_solution_internal"); } } /*(c rx_solutions_final_tag) * int rx_solutions_final_tag (struct rx_solutions * solns); * * Return the state label of the last DFA state reached during * the solution most recently returned by `rx_next_solution'. */ int rx_solutions_final_tag (struct rx_solutions * solns) { return solns->final_tag; } /************************************************************************ *(h1 "Building and Freeing a Stream of Solutions -- The General Case") * * The functions in this section are quite general. They can be used * to compare a regexp to a string which is not entirely in memory at * any one time. */ /*(c rx_make_solutions) * struct rx_solutions * * rx_make_solutions (struct rx_registers * regs, * int cset_size, * struct rx_exp_node * expression, * struct rx_exp_node ** subexps, * int nsub, * rx_off_t start, * rx_off_t end, * int interval_x, * rx_vmfn vmfn, * rx_contextfn contextfn, * void * closure, * int small_p, * int certainly_fits, * int certain_final_tag); * * * Construct a stream-of-solutions to a regexp matching problem. For * arguments which are not documented here, see * xref:"rx_basic_make_solutions". * * If `expression' is of type `r_interval', then `interval_x' * is the number of matches already accumulated for the subexpression. * In other words, if expression is `RE{M,N}', it will match as: * * RE{max (0,M - interval_x), max (0, N - interval_x) * * This function does not directly accept an input string. Instead, * it accepts the parameters `vmfn', `contextfn', and `closure'. * * `vmfn' is a function which can return the address of a substring * containing a chosen character position within the entire input * string. It is used to page-in parts of the input string during a * match. The details of this parameter are given below. * * `contextfn' is a function that knows how to evaluate regexp * expressions which are anchors or backreferences. These kinds of * subexpressions may be defined in terms of parts of the input string * that are not in memory or that are not contiguous in memory. The * `contextfn' has the job of sorting that out in an efficient way. * The details of this parameter are also given below. * * `closure' is an opaque parameter that is passed along to `vmfn' and * `contextfn'. * * `small_p', if not 0, means that the regexp is so trivial that * heavy-weight optimizations are not likely to pay off. It is always * safe to pass 0 for this parameter. Internally, Rx passes a non-0 * value if `expression' is 0 or if `expression->small_advised_p' is * non-0. `expression->small_advised_p' is filled in by * `rx_analyze_rexp'. * * `certainly_fits', if not 0, means that if `expression' is converted * to a true regular expression (such as by `rx_simplify_rexp') and * compared to the target string, the target string will certainly match. * Setting this field can speed up some matches. If this field is * non-0, `certain_final_tag' must also be set. It is always safe to * pass 0 for `certainly_fits', though doing so may slow down some matches * slightly. * * `certain_final_tag' is the final DFA state label returned for a * match of simplified form of `expression' against the target string. * This field is only used if `certainly_fits' is not 0. */ struct rx_solutions * rx_make_solutions (struct rx_registers * regs, int cset_size, struct rx_exp_node * expression, struct rx_exp_node ** subexps, int nsub, rx_off_t start, rx_off_t end, int interval_x, rx_vmfn vmfn, rx_contextfn contextfn, void * closure, int small_p, int certainly_fits, int certain_final_tag) { struct rx_solutions * solns; if (!expression && (start != end)) return &no_solutions; if ( expression && (expression->len >= 0) && ((expression->type != r_interval) ? (expression->len != (end - start)) : (/* Is an interval expression of fixed length */ (!expression->len ? (end != start) : ((expression->len - (interval_x * expression->left->len)) != (end - start)))))) return &no_solutions; solns = (struct rx_solutions *)rx_nfa_cache_malloc (sizeof (*solns)); if (!solns) return 0; ++solns_allocated; solns->small_p = small_p; solns->step = 0; solns->cset_size = cset_size; solns->exp = expression; rx_save_exp (expression); solns->subexps = subexps; solns->nsub = nsub; solns->regs = regs; solns->start = start; solns->end = end; solns->vmfn = vmfn; solns->contextfn = contextfn; solns->closure = closure; solns->dfa = 0; solns->match_engine.rx = 0; solns->match_engine.state = 0; solns->certainly_fits = certainly_fits; solns->certain_final_tag = certain_final_tag; solns->no_fancy_guessing = 0; solns->left_dfa = 0; solns->left_match_engine.rx = 0; solns->left_match_engine.state = 0; solns->split_guess = 0; solns->left = 0; solns->right = 0; solns->interval_x = interval_x; solns->interval_from = 0; solns->interval_to = 0; solns->saved_rm_so = 0; solns->saved_rm_eo = 0; solns->final_tag = 0; if (!small_p) { if (!solns->exp || !solns->exp->observed) { solns->dfa = rx_unfa (expression, cset_size); if (!solns->dfa) { rx_free_solutions (solns); return 0; } rx_init_dfa_from_nfa (&solns->match_engine, solns->dfa->nfa); if (rx_dfa_goto_start_superstate (&solns->match_engine, 1)) { rx_free_solutions (solns); return 0; } } else { struct rx_exp_node * simplified; if (rx_simplify_rexp (&simplified, cset_size, solns->exp, subexps)) { rx_free_solutions (solns); return 0; } solns->dfa = rx_unfa (simplified, cset_size); if (!solns->dfa) { rx_free_exp (simplified); rx_free_solutions (solns); return 0; } rx_init_dfa_from_nfa (&solns->match_engine, solns->dfa->nfa); if (rx_dfa_goto_start_superstate (&solns->match_engine, 1)) { rx_free_exp (simplified); rx_free_solutions (solns); return 0; } rx_free_exp (simplified); } } if (solns->exp && (solns->exp->observed || solns->small_p) && (solns->exp->type == r_concat)) { struct rx_exp_node * left_simplified; if (rx_simplify_rexp (&left_simplified, cset_size, solns->exp->left, solns->subexps)) { rx_free_solutions (solns); return 0; } solns->left_dfa = rx_unfa (left_simplified, cset_size); if (!solns->left_dfa) { rx_free_exp (left_simplified); rx_free_solutions (solns); return 0; } rx_init_dfa_from_nfa (&solns->left_match_engine, solns->left_dfa->nfa); rx_free_exp (left_simplified); } return solns; } /*(include-documentation "match-regexp.h") */ /*(c rx_solutions_closure) * void * rx_solutions_closure (struct rx_solutions * solns); * * Given a stream of regexp solutions, return the `closure' * parameter that was passed to `rx_make_solutions'. */ void * rx_solutions_closure (struct rx_solutions * solns) { return solns->closure; } /*(c rx_free_solutions) * void rx_free_solutions (struct rx_solutions * solns); * * Free all storage associated with a stream of regexp solutions * allocated by `rx_make_solutions'. See also * xref:"rx_basic_free_solutions". */ void rx_free_solutions (struct rx_solutions * solns) { if (!solns) return; if (solns == &no_solutions) return; if (solns->left) { rx_free_solutions (solns->left); solns->left = 0; } if (solns->right) { rx_free_solutions (solns->right); solns->right = 0; } if (solns->dfa) { rx_free_unfa (solns->dfa); solns->dfa = 0; } rx_clear_dfa_state (&solns->match_engine); if (solns->left_dfa) { rx_free_unfa (solns->left_dfa); solns->left_dfa = 0; } rx_clear_dfa_state (&solns->left_match_engine); if (solns->exp) { rx_free_exp (solns->exp); solns->exp = 0; } if (solns->saved_rm_so) rx_nfa_cache_free (solns->saved_rm_so); if (solns->saved_rm_eo) rx_nfa_cache_free (solns->saved_rm_eo); rx_nfa_cache_free (solns); ++solns_freed; } /**************************************************************** *(h1 "Regexp Tree To Regular Expression Conversion") * */ /*(c rx_simplify_rexp) * int rx_simplify_rexp (struct rx_exp_node ** answer, * int cset_size, * struct rx_exp_node *node, * struct rx_exp_node ** subexps); * * Convert an expression, which might not be a regular expression, into * a regular expression matching a superset of the original pattern. * * This is useful for a matching heuristic: the regular superset * language is used to test a candidate string for a match, the * original irregular regexp is used to verify the match. The test * using the regular superset is very fast and many non-matching * strings can be quickly rejected; the verification using the * irregular regexp may be slow, so we avoid it when we can. * * If the input expression is a regular expression, this is an * identity function which increments the reference count of `node'. * * `answer' is a return parameter. * * `subexps' is an array of pointers into the expression `node'. * Element `N' of the array is the `N'th parenthesized subexpression * of the tree rooted at `node'. This array is usually computed by * `rx_analyze_rexp'. */ int rx_simplify_rexp (struct rx_exp_node ** answer, int cset_size, struct rx_exp_node * node, struct rx_exp_node ** subexps) { int err; if (!node) { *answer = 0; return 0; } if (!node->observed) { rx_save_exp (node); *answer = node; return 0; } if (node->simplified) { rx_save_exp (node->simplified); *answer = node->simplified; return 0; } switch (node->type) { default: case r_cset: case r_string: case r_cut: panic ("bogus regexp in rx_simplify_rexp"); return -1; case r_parens: err = rx_simplify_rexp (answer, cset_size, node->left, subexps); if (err) return err; break; case r_context: if (char_is_digit (node->intval)) { err = rx_simplify_rexp (answer, cset_size, subexps [node->intval - '0'], subexps); if (err) return err; } else *answer = 0; break; case r_concat: case r_right_concat: case r_alternate: case r_star: case r_interval: { struct rx_exp_node *n; n = rx_exp_node (node->type); if (!n) return REG_ESPACE; if (node->cset) { panic ("found a cset bitset in an unexpected place"); } n->intval = node->intval; n->intval2 = node->intval2; err = rx_simplify_rexp (&n->left, cset_size, node->left, subexps); if (err) { rx_free_exp (n); return err; } err = rx_simplify_rexp (&n->right, cset_size, node->right, subexps); if (err) { rx_free_exp (n); return err; } *answer = n; } break; } node->simplified = *answer; rx_save_exp (node->simplified); return 0; } /**************************************************************** *(h1 "Regexp Tree Analysis") * */ /*(c rx_analyze_rexp) * void rx_analyze_rexp (struct rx_exp_node *** subexps, * size_t * re_nsub, * struct rx_exp_node * node); * * Recursively analyze the expression tree rooted at `node'. For each * node, fill in the fields `observed', `observation_contingent', * `small_advised_p', and `len'. Build an array of parenthesized * sub-expressions in the tree and return that array in `subexps' and * the number of elements it contains in `re_nsub'. * * See `struct rx_exp_node' for information about the meaning of * structure fields filled in by this function. */ int rx_analyze_rexp (struct rx_exp_node *** subexps, size_t * re_nsub, struct rx_exp_node * node) { #define rx_max(a, b) ((a) > (b) ? (a) : (b)) #define rx_min(a, b) ((a) < (b) ? (a) : (b)) if (node) { size_t this_subexp; this_subexp = 0; if (node->type == r_parens) { if (node->intval > 0) { struct rx_exp_node ** array; this_subexp = *re_nsub; ++*re_nsub; if (!*subexps) array = ((struct rx_exp_node **) rx_nfa_cache_malloc (sizeof (struct rx_exp_node *) * *re_nsub)); else array = ((struct rx_exp_node **) rx_nfa_cache_realloc (*subexps, sizeof (struct rx_exp_node *) * *re_nsub)); if (!array) return -1; else *subexps = array; } } if (node->left && rx_analyze_rexp (subexps, re_nsub, node->left)) return -1; if (node->right && rx_analyze_rexp (subexps, re_nsub, node->right)) return -1; switch (node->type) { case r_cset: node->len = 1; node->observed = 0; node->observation_contingent = 1; node->small_advised_p = 1; node->max_enclosed_paren = 0; node->min_enclosed_paren = 0; break; case r_string: node->len = node->str_len; node->observed = 0; node->observation_contingent = 1; node->small_advised_p = 1; node->max_enclosed_paren = 0; node->min_enclosed_paren = 0; break; case r_cut: node->len = -1; node->observed = 0; node->observation_contingent = 1; node->small_advised_p = 1; node->max_enclosed_paren = 0; node->min_enclosed_paren = 0; break; case r_concat: case r_right_concat: case r_alternate: { int lob, rob; int lobc, robc; long llen, rlen; lob = (!node->left ? 0 : node->left->observed); lobc = (!node->left ? 1 : node->left->observation_contingent); rob = (!node->right ? 0 : node->right->observed); robc = (!node->right ? 1 : node->right->observation_contingent); llen = (!node->left ? 0 : node->left->len); rlen = (!node->right ? 0 : node->right->len); if ((llen < 0) || (rlen < 0)) node->len = -1; else if ((node->type == r_concat) || (node->type == r_right_concat)) { if (((size_t)llen + (size_t)rlen) > SSIZE_MAX) panic ("absurdly large regexp in rx_analyze_rexp"); node->len = (long)(llen + rlen); } else /* node->type == r_alternate */ { if (llen == rlen) node->len = llen; else node->len = -1; } node->observed = lob || rob; node->observation_contingent = lobc && robc; if ((node->type == r_concat) || (node->type == r_right_concat)) { node->small_advised_p = ( (!node->left || node->left->small_advised_p) && (!node->right || node->right->small_advised_p)); } else /* node->type == r_alternate */ { node->small_advised_p = 0; } node->max_enclosed_paren = rx_max ((node->left ? node->left->max_enclosed_paren : 0), (node->right ? node->right->max_enclosed_paren : 0)); { int lmin; int rmin; lmin = (node->left ? node->left->min_enclosed_paren : 0); rmin = (node->right ? node->right->min_enclosed_paren : 0); node->min_enclosed_paren = (!lmin ? rmin : (!rmin ? lmin : rx_min (lmin, rmin))); } break; } case r_star: node->len = ((node->left && node->left->len) ? -1 : 0); node->observed = (node->left ? node->left->observed : 0); node->observation_contingent = (node->left ? node->left->observation_contingent : 1); node->small_advised_p = 0; node->max_enclosed_paren = (node->left ? node->left->max_enclosed_paren : 0); node->min_enclosed_paren = (node->left ? node->left->min_enclosed_paren : 0); break; case r_interval: if (!node->left || (node->left->len == 0) || (node->intval2 == 0)) node->len = 0; else if (node->left->len < 0) node->len = -1; else if (node->intval == node->intval2) { if (node->left->len > (SSIZE_MAX / node->intval)) node->len = -1; else node->len = node->left->len * node->intval; } else node->len = -1; node->observed = 1; node->observation_contingent = 0; node->small_advised_p = 0; node->max_enclosed_paren = (node->left ? node->left->max_enclosed_paren : 0); node->min_enclosed_paren = (node->left ? node->left->min_enclosed_paren : 0); break; case r_parens: if (node->intval > 0) { node->observed = 1; (*subexps)[this_subexp] = node; } else node->observed = (node->left ? node->left->observed : 0); node->observation_contingent = ( node->observed && (node->left ? node->left->observation_contingent : 1)); node->len = (node->left ? node->left->len : 0); node->small_advised_p = (!node->left || node->left->small_advised_p); node->max_enclosed_paren = rx_max (node->intval, (node->left ? node->left->max_enclosed_paren : 0)); if (node->left && node->left->min_enclosed_paren) { if (!node->intval) node->min_enclosed_paren = node->left->min_enclosed_paren; else node->min_enclosed_paren = rx_min (node->intval, node->left->min_enclosed_paren); } else node->min_enclosed_paren = node->intval; break; case r_context: switch (node->intval) { default: node->small_advised_p = 1; node->observed = 1; node->observation_contingent = 0; node->len = -1; break; case '^': case '$': node->small_advised_p = 1; node->observed = 1; node->observation_contingent = 0; node->len = 0; break; } node->max_enclosed_paren = 0; node->min_enclosed_paren = 0; break; } } return 0; } tla-1.3.5+dfsg/src/hackerlab/rx-posix/limits.h0000644000175000017500000000213210457621774017716 0ustar useruser/* limits.h - Corrections to for Rx. * **************************************************************** * Copyright (C) 2000 Thomas Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__RX_POSIX__LIMITS_H #define INCLUDE__RX_POSIX__LIMITS_H /* Posix.2 requires regexp implementations to define `RE_DUP_MAX' * but unfortunately specifies that it should be defined in "". * * If Rx is not the default implementation on a system, the value * in "" may not be correct. * * Applications substituting Rx for the native implementation can * use the following sequence of includes to obtain declarations * for both the Posix regex functions and RE_DUP_MAX: * * #include * #include * #include "hackerlab/rx-posix/limits.h" * #include "hackerlab/rx-posix/regex.h" * */ #include "hackerlab/rx-posix/dup-max.h" #undef RE_DUP_MAX #define RE_DUP_MAX RX_DUP_MAX /* automatically generated __STDC__ prototypes */ #endif /* INCLUDE__RX_POSIX__LIMITS_H */ tla-1.3.5+dfsg/src/hackerlab/obmarkers/0000755000175000017500000000000010457621774016442 5ustar userusertla-1.3.5+dfsg/src/hackerlab/obmarkers/obmarkers.h0000644000175000017500000000464710457621774020613 0ustar useruser/* obmarkers.h: * **************************************************************** * Copyright (C) 2004 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBDS__OBMARKERS_H #define INCLUDE__LIBDS__OBMARKERS_H #include "hackerlab/obtables/obtable.h" #include "hackerlab/oblists/oblist.h" typedef struct obmarker_table t_obmarker_table; typedef struct obmarker t_obmarker; struct obmarker_table { t_obtable _markers; t_oblist _in_order; ssize_t _gap; ssize_t _size; }; struct obmarker { struct obtable_elt _obtable_elt; ssize_t _pos; ssize_t _handle_set; }; /* automatically generated __STDC__ prototypes */ extern int init_obmarker_table (t_obmarker_table * table, alloc_limits limits); extern int uninit_obmarker_table (t_obmarker_table * table, alloc_limits limits); extern ssize_t obmarker_alloc (t_obmarker_table * table, alloc_limits limits, ssize_t init_pos); extern int obmarker_free (t_obmarker_table * table, alloc_limits limits, ssize_t m); extern ssize_t obmarker_n_markers (t_obmarker_table * table, alloc_limits limits); extern ssize_t obmarker_room (t_obmarker_table * table, alloc_limits limits); extern ssize_t obmarker_pos (t_obmarker_table * table, alloc_limits limits, ssize_t m); extern int obmarker_set_pos (t_obmarker_table * table, alloc_limits limits, ssize_t m, ssize_t to); extern int obmarker_insert_n (t_obmarker_table * table, alloc_limits limits, ssize_t pos, ssize_t n); extern int obmarker_delete_n (t_obmarker_table * table, alloc_limits limits, ssize_t pos, ssize_t n); extern ssize_t obmarker_handle_set (t_obmarker_table * table, alloc_limits limits, ssize_t id); #endif /* INCLUDE__LIBDS__OBMARKERS_H */ /* tag: Tom Lord Sat Oct 30 13:58:48 2004 (obmarkers.h) */ tla-1.3.5+dfsg/src/hackerlab/obmarkers/Makefile.in0000644000175000017500000000030010457621774020500 0ustar useruserinclude $(makefiles)/library-objects.mk ifeq ($(cgs__install_hackerlab),1) include $(makefiles)/install-includes.mk endif # tag: Tom Lord Sat Nov 20 15:16:38 2004 (obmarkers/Makefile.in) # tla-1.3.5+dfsg/src/hackerlab/obmarkers/PLUGIN/0000755000175000017500000000000010457621774017440 5ustar userusertla-1.3.5+dfsg/src/hackerlab/obmarkers/PLUGIN/REQ0000644000175000017500000000007410457621774020013 0ustar useruseroblists obmarkers qlinks obmarkers obmarkers libhackerlab tla-1.3.5+dfsg/src/hackerlab/obmarkers/obmarkers.c0000644000175000017500000002633310457621774020602 0ustar useruser/* obmarkers.c: * **************************************************************** * Copyright (C) 2004 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/mem/mem.h" #include "hackerlab/obmarkers/obmarkers.h" #include "hackerlab/handles/handle.h" /* __STDC__ prototypes for static functions */ static int cmp (void * va, void * vb, void * vcl); static t_obmarker * obmarker__n (t_obmarker_table * table, alloc_limits limits, ssize_t m); static int gap_cmp (void * va, void * vb, void * vcl); static ssize_t find_gap_order (t_obmarker_table * table, alloc_limits limits, ssize_t pos); static int move_gap (t_obmarker_table * table, alloc_limits limits, ssize_t pos); int init_obmarker_table (t_obmarker_table * table, alloc_limits limits) { if (!table) return -1; mem_set0 ((t_uchar *)table, sizeof (*table)); if (0 > init_obtable (&table->_markers, limits, sizeof (t_obmarker), 0, 0)) return -1; if (0 > init_oblist (&table->_in_order, limits, sizeof (ssize_t), 0, 0)) { uninit_obtable (&table->_markers, limits, sizeof (t_obmarker), 0, 0); return -1; } table->_gap = 0; table->_size = 0; return 0; } int uninit_obmarker_table (t_obmarker_table * table, alloc_limits limits) { ssize_t bound; ssize_t x; if (!table) return -1; bound = obtable_room (&table->_markers, limits, sizeof (t_obmarker), 0, 0); for (x = 0; x < bound; ++x) { t_obmarker * m; m = (t_obmarker *)obtable_ref (&table->_markers, limits, sizeof (t_obmarker), 0, 0, x); if ( m && (0 <= m->_handle_set) && (0 > free_handle_set (m->_handle_set))) return -1; } uninit_oblist (&table->_in_order, limits, sizeof (ssize_t), 0, 0); uninit_obtable (&table->_markers, limits, sizeof (t_obmarker), 0, 0); mem_set0 ((t_uchar *)table, sizeof (*table)); return 0; } struct cmp_closure { t_obmarker_table * table; alloc_limits limits; }; static int cmp (void * va, void * vb, void * vcl) { ssize_t * a; ssize_t * b; struct cmp_closure * cl; ssize_t a_id; ssize_t b_id; ssize_t a_pos; ssize_t b_pos; a = (ssize_t *)va; b = (ssize_t *)vb; cl = (struct cmp_closure *)vcl; a_id = *a; b_id = *b; a_pos = obmarker_pos (cl->table, cl->limits, a_id); b_pos = obmarker_pos (cl->table, cl->limits, b_id); if (a_pos < b_pos) return -1; else if (a_pos > b_pos) return 1; else if (a_id < b_id) return -1; else if (a_id > b_id) return 1; else return 0; } ssize_t obmarker_alloc (t_obmarker_table * table, alloc_limits limits, ssize_t init_pos) { ssize_t answer; t_obmarker * it; ssize_t order; if (!table) return -1; if ((init_pos < 0) || (init_pos > table->_size)) return -1; answer = obtable_alloc (&table->_markers, limits, sizeof (t_obmarker), 0, 0); if (answer < 0) return -1; it = (t_obmarker *)obtable_ref (&table->_markers, limits, sizeof (t_obmarker), 0, 0, answer); if (!it) { obtable_free (&table->_markers, limits, sizeof (t_obmarker), 0, 0, answer); return -1; } it->_handle_set = -1; if (init_pos < table->_gap) { it->_pos = init_pos; } else { it->_pos = init_pos - table->_size - 1; } { struct cmp_closure cl; cl.table = table; cl.limits = limits; (void)oblist_find (&order, &table->_in_order, limits, sizeof (ssize_t), 0, 0, (void *)&answer, cmp, (void *)&cl); } if (0 > oblist_insert_n (&table->_in_order, limits, sizeof (ssize_t), 0, 0, order, 1, &answer)) { obtable_free (&table->_markers, limits, sizeof (t_obmarker), 0, 0, answer); return -1; } return answer; } int obmarker_free (t_obmarker_table * table, alloc_limits limits, ssize_t m) { t_obmarker * it; ssize_t order; if (!table) return -1; it = (t_obmarker *)obtable_ref (&table->_markers, limits, sizeof (t_obmarker), 0, 0, m); if (!it) return -1; if ( (0 <= it->_handle_set) && (0 > free_handle_set (it->_handle_set))) return -1; it->_handle_set = -1; { struct cmp_closure cl; cl.table = table; cl.limits = limits; order = oblist_find (0, &table->_in_order, limits, sizeof (ssize_t), 0, 0, (void *)&m, cmp, (void *)&cl); } obtable_free (&table->_markers, limits, sizeof (t_obmarker), 0, 0, m); if (0 > oblist_delete_n (&table->_in_order, limits, sizeof (ssize_t), 0, 0, order, 1)) return -1; return 0; } static t_obmarker * obmarker__n (t_obmarker_table * table, alloc_limits limits, ssize_t m) { if (!table) return 0; return (t_obmarker *)obtable_ref (&table->_markers, limits, sizeof (t_obmarker), 0, 0, m); } ssize_t obmarker_n_markers (t_obmarker_table * table, alloc_limits limits) { if (!table) return -1; return obtable_n_elts (&table->_markers, limits, sizeof (t_obmarker), 0, 0); } ssize_t obmarker_room (t_obmarker_table * table, alloc_limits limits) { if (!table) return -1; return obtable_room (&table->_markers, limits, sizeof (t_obmarker), 0, 0); } ssize_t obmarker_pos (t_obmarker_table * table, alloc_limits limits, ssize_t m) { t_obmarker * mark; mark = obmarker__n (table, limits, m); if (!mark) return -1; if (mark->_pos >= 0) { return mark->_pos; } else { return mark->_pos + 1 + table->_size; } } int obmarker_set_pos (t_obmarker_table * table, alloc_limits limits, ssize_t m, ssize_t to) { t_obmarker * mark; ssize_t order; if (!table) return -1; if ((to < 0) || (to > table->_size)) return -1; { struct cmp_closure cl; cl.table = table; cl.limits = limits; order = oblist_find (0, &table->_in_order, limits, sizeof (ssize_t), 0, 0, (void *)&m, cmp, (void *)&cl); if (order < 0) return -1; } if (0 > oblist_delete_n (&table->_in_order, limits, sizeof (ssize_t), 0, 0, order, 1)) return -1; mark = obmarker__n (table, limits, m); if (!mark) { (void)oblist_insert_n (&table->_in_order, limits, sizeof (ssize_t), 0, 0, order, 1, (void *)&m); return -1; } if (to < table->_gap) { mark->_pos = to; } else { mark->_pos = (to - table->_size) - 1; } { struct cmp_closure cl; cl.table = table; cl.limits = limits; (void)oblist_find (&order, &table->_in_order, limits, sizeof (ssize_t), 0, 0, (void *)&m, cmp, (void *)&cl); } return oblist_insert_n (&table->_in_order, limits, sizeof (ssize_t), 0, 0, order, 1, (void *)&m); } static ssize_t obmarker__n_markers (t_obmarker_table * table, alloc_limits limits) { if (!table) return 0; return obtable_n_elts (&table->_markers, limits, sizeof (t_obmarker), 0, 0); } int obmarker_insert_n (t_obmarker_table * table, alloc_limits limits, ssize_t pos, ssize_t n) { if (0 > move_gap (table, limits, pos)) return -1; table->_size += n; return 0; } static int gap_cmp (void * va, void * vb, void * vcl) { ssize_t * b; struct cmp_closure * cl; ssize_t b_id; ssize_t a_pos; ssize_t b_pos; a_pos = (ssize_t)va; b = (ssize_t *)vb; cl = (struct cmp_closure *)vcl; b_id = *b; b_pos = obmarker_pos (cl->table, cl->limits, b_id); if (a_pos < b_pos) return -1; else if (a_pos > b_pos) return 1; else return 0; } static ssize_t find_gap_order (t_obmarker_table * table, alloc_limits limits, ssize_t pos) { ssize_t at; ssize_t would; ssize_t answer; struct cmp_closure cl; cl.table = table; cl.limits = limits; at = oblist_find (&would, &table->_in_order, limits, sizeof (ssize_t), 0, 0, (void *)&pos, gap_cmp, (void *)&cl); if (at >= 0) answer = at; else answer = would; return answer; } static int move_gap (t_obmarker_table * table, alloc_limits limits, ssize_t pos) { ssize_t current_gap_order; ssize_t desired_gap_order; if (!table || (pos < 0) || (pos > table->_size)) return -1; current_gap_order = find_gap_order (table, limits, table->_gap); desired_gap_order = find_gap_order (table, limits, pos); if (current_gap_order < desired_gap_order) { ssize_t x; for (x = current_gap_order; x < desired_gap_order; ++x) { ssize_t * m_id_box; ssize_t m_id; t_obmarker * mark; m_id_box = (ssize_t *)oblist_burst (0, &table->_in_order, limits, sizeof (ssize_t), 0, 0, x, 1); if (!m_id_box) return -1; m_id = *m_id_box; mark = obmarker__n (table, limits, m_id); if (!mark) return -1; mark->_pos = ((mark->_pos + 1) + table->_size); } } else { ssize_t x; for (x = current_gap_order - 1; x >= desired_gap_order; --x) { ssize_t * m_id_box; ssize_t m_id; t_obmarker * mark; m_id_box = (ssize_t *)oblist_burst (0, &table->_in_order, limits, sizeof (ssize_t), 0, 0, x, 1); if (!m_id_box) return -1; m_id = *m_id_box; mark = obmarker__n (table, limits, m_id); if (!mark) return -1; mark->_pos = (mark->_pos - table->_size - 1); } } table->_gap = pos; return 0; } int obmarker_delete_n (t_obmarker_table * table, alloc_limits limits, ssize_t pos, ssize_t n) { ssize_t n_markers; ssize_t gap_order; ssize_t x; ssize_t new_size; if (!table) return -1; if ((pos < 0) || (pos > table->_size)) return -1; if ((n < 0) || ((pos + n) < 0) || ((pos + n) > table->_size)) return -1; new_size = table->_size - n; if (0 > move_gap (table, limits, pos)) return -1; n_markers = obmarker__n_markers (table, limits); gap_order = find_gap_order (table, limits, pos); for (x = gap_order; x < n_markers; ++x) { ssize_t * m_id_box; ssize_t m_id; t_obmarker * mark; ssize_t old_mark_pos; m_id_box = (ssize_t *)oblist_burst (0, &table->_in_order, limits, sizeof (ssize_t), 0, 0, x, 1); if (!m_id_box) return -1; m_id = *m_id_box; mark = obmarker__n (table, limits, m_id); if (!mark) return -1; old_mark_pos = table->_size + mark->_pos + 1; if (old_mark_pos >= (pos + n)) break; else mark->_pos = (pos + n) - table->_size - 1; } table->_size = new_size; return 0; } ssize_t obmarker_handle_set (t_obmarker_table * table, alloc_limits limits, ssize_t id) { t_obmarker * mark; mark = obmarker__n (table, limits, id); if (!mark) return -1; if (mark->_handle_set < 0) { mark->_handle_set = alloc_handle_set (); } return mark->_handle_set; } /* tag: Tom Lord Sat Oct 30 13:58:52 2004 (obmarkers.c) */ tla-1.3.5+dfsg/src/hackerlab/tests/0000755000175000017500000000000010457621774015617 5ustar userusertla-1.3.5+dfsg/src/hackerlab/tests/hash-tests/0000755000175000017500000000000010457621774017702 5ustar userusertla-1.3.5+dfsg/src/hackerlab/tests/hash-tests/unit-md5.c0000644000175000017500000001002710457621774021510 0ustar useruser/* unit-md5.c: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/hash/md5.h" #include "hackerlab/cmd/main.h" static t_uchar * program_name = "unit-hash-md5"; static t_uchar * usage = "[options]"; static t_uchar * version_string = "1.0"; #define OPTS(OP, OP2) \ OP (opt_help_msg, "h", "help", 0, \ "Display a help message and exit.") \ OP (opt_version, "V", "version", 0, \ "Display a release identifier string") \ OP2 (opt_version, 0, 0, 0, "and exit.") enum options { OPTS (OPT_ENUM, OPT_IGN) }; struct opt_desc opts[] = { OPTS (OPT_DESC, OPT_DESC) {-1, 0, 0, 0, 0} }; int main (int argc, char * argv[]) { int o; struct opt_parsed * option; option = 0; while (1) { o = opt_standard (lim_use_must_malloc, &option, opts, &argc, argv, program_name, usage, version_string, 0, opt_help_msg, opt_none, opt_version); if (o == opt_none) break; switch (o) { default: safe_printfmt (2, "unhandled option `%s'\n", option->opt_string); panic ("internal error parsing arguments"); } } { struct test_case { char * string; t_uchar answer[16]; }; struct test_case tests[] = { {"", {0xD4, 0x1D, 0x8C, 0xD9, 0x8F, 0x00, 0xB2, 0x04, 0xE9, 0x80, 0x09, 0x98, 0xEC, 0xF8, 0x42, 0x7E}}, {"a", {0x0C, 0xC1, 0x75, 0xB9, 0xC0, 0xF1, 0xB6, 0xA8, 0x31, 0xC3, 0x99, 0xE2, 0x69, 0x77, 0x26, 0x61}}, {"abc", {0x90, 0x01, 0x50, 0x98, 0x3C, 0xD2, 0x4F, 0xB0, 0xD6, 0x96, 0x3F, 0x7D, 0x28, 0xE1, 0x7F, 0x72}}, {"message digest", {0xF9, 0x6B, 0x69, 0x7D, 0x7C, 0xB7, 0x93, 0x8D, 0x52, 0x5A, 0x2F, 0x31, 0xAA, 0xF1, 0x61, 0xD0}}, {"Lo, this message is exactly 64 bytes long, no more and not less.", { 0x39, 0x10, 0x8a, 0xaa, 0xa6, 0x2c, 0x5b, 0x5b, 0x1b, 0x9f, 0x8b, 0xdb, 0xb2, 0x80, 0x79, 0x89 }}, {"Lo, this message is exactly 64 bytes long, no more and not less.", { 0x39, 0x10, 0x8a, 0xaa, 0xa6, 0x2c, 0x5b, 0x5b, 0x1b, 0x9f, 0x8b, 0xdb, 0xb2, 0x80, 0x79, 0x89 }}, {"This message has 56 bytes which is an interesting amount", { 0x6d, 0xe2, 0xb2, 0x26, 0x31, 0x73, 0x7a, 0x22, 0x9d, 0x1e, 0x02, 0x20, 0x63, 0x8f, 0x86, 0xc0 }}, {"This message has 57 bytes which is an interesting amount!", { 0x9f, 0xed, 0x89, 0xb2, 0x9d, 0xce, 0x82, 0x94, 0x97, 0xf0, 0x6a, 0xdd, 0xaf, 0x9f, 0x15, 0xd7 }}, {"This message has 58 bytes which is an interesting amount!!", { 0x94, 0x05, 0x4c, 0x5f, 0xda, 0x77, 0x7c, 0x61, 0xb4, 0x43, 0xde, 0x80, 0x80, 0x3e, 0x52, 0xca }}, {("This message has rather more than 64 bytes\n" "which means that it will take more than md5 buffer\n" "to process. I think that that's an interesting case\n" "to test for, don't you? I could try to come up with\n" "more edge cases but I think this will be the last one\n" "for now.\n"), { 0x02, 0x33, 0x7f, 0x85, 0xba, 0x8e, 0x58, 0x7e, 0x65, 0x0b, 0xc7, 0x1d, 0x60, 0x91, 0xf1, 0xa2 }}, {0, } }; md5_context_t context_a; int x; context_a = make_md5_context (0); for (x = 0; tests[x].string; ++x) { md5_context_t context_b = 0; t_uchar digest_a[16]; t_uchar digest_b[16]; int y; context_b = make_md5_context (0); md5_scan (context_a, tests[x].string, str_length (tests[x].string)); md5_scan (context_b, tests[x].string, str_length (tests[x].string)); md5_final (digest_a, context_a); md5_final (digest_b, context_b); for (y = 0; y < 16; ++y) { invariant (digest_a[y] == digest_b[y]); invariant (digest_a[y] == tests[x].answer[y]); } free_md5_context (0, context_b); } free_md5_context (0, context_a); } return 0; } /* tag: Tom Lord Fri Oct 24 09:12:09 2003 (unit-md5.c) */ tla-1.3.5+dfsg/src/hackerlab/tests/hash-tests/unit-md5.sh0000744000175000017500000000031710457621774021702 0ustar useruser#!/bin/sh set -e arg0="$0" srcdir=`dirname "$arg0"` echo ================ unit-md5 tests ================ ./unit-md5 echo ...passed # tag: Tom Lord Fri Oct 24 09:25:04 2003 (hash-tests/unit-md5.sh) # tla-1.3.5+dfsg/src/hackerlab/tests/hash-tests/=scaffolding/0000755000175000017500000000000010457621774022256 5ustar userusertla-1.3.5+dfsg/src/hackerlab/tests/hash-tests/=scaffolding/gen-hashtree-test.scm0000644000175000017500000000374310457621774026320 0ustar useruser;;; tag: Tom Lord Tue Dec 4 14:59:27 2001 (=scaffolding/gen-hashtree-test.scm) ;;; ;;; gen-hashtree-test.scm - ;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; Copyright (C) 2000 Free Software Foundation, Inc. ;;; ;;; See the file "COPYING" for further information about ;;; the copyright and warranty status of this work. ;;; (define-module (=scaffolding gen-hashtree-test)) (define (gen n a b) (define (toss?) (zero? (logand (random32) 1))) (define (roll n) (modulo (random32) n)) (define table (make-hash-table)) (define seq-table (make-hash-table)) (define n-items 0) (define (script n) (let loop ((script "") (answers "") (n n)) (if (= 0 (modulo n 100)) (pk 'n n)) (if (<= n 0) (values script answers) (call-with-values (lambda () (add-operation script answers)) (lambda (script answers) (loop script answers (1- n))))))) (define (add-operation script answers) (if (or (= n-items 0) (toss?)) (let ((new-key (roll 2147483647)) (new-value (roll 2147483647))) (hashq-set! table new-key new-value) (hashq-set! seq-table n-items new-key) (set! n-items (1+ n-items)) (values (string-append script "s " (->string new-key) " " (->string new-value) "\n") answers)) (if (toss?) (let ((old-key (hashq-ref seq-table (roll n-items)))) (hashq-remove! table old-key) (values (string-append script "d " (->string old-key) "\n") answers)) (let* ((key (hashq-ref seq-table (roll n-items))) (value (hashq-ref table key))) (values (string-append script "f " (->string key) "\n") (if value (string-append answers (->string key) " => " (->string value) "\n") (string-append answers (->string key) " unbound\n"))))))) (call-with-values (lambda () (script n)) (lambda (script answers) (with-output-to-file a (lambda () (display script) (display "q\n"))) (with-output-to-file b (lambda () (display answers)))))) tla-1.3.5+dfsg/src/hackerlab/tests/hash-tests/unit-hashtree.c0000644000175000017500000001202010457621774022621 0ustar useruser/* unit-hashtree.c - test hashtree.c * **************************************************************** * Copyright (C) 2000 Thomas Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/os/math.h" #include "hackerlab/char/char-class.h" #include "hackerlab/hash/hashtree.h" #include "hackerlab/cmd/main.h" static t_uchar * program_name = "unit-hashtree"; static t_uchar * usage = "[options] < tests > results"; static t_uchar * version_string = "1.0"; #define OPTS(OP, OP2) \ OP (opt_help_msg, "h", "help", 0, \ "Display a help message and exit.") \ OP (opt_version, "V", "version", 0, \ "Display a release identifier string") \ OP2 (opt_version, 0, 0, 0, "and exit.") enum options { OPTS (OPT_ENUM, OPT_IGN) }; struct opt_desc opts[] = { OPTS (OPT_DESC, OPT_DESC) {-1, 0, 0, 0, 0} }; static void parse_uint (int * answer, t_uchar ** line, long * len) { int errn; t_uchar * start; while (*len && char_is_space (**line)) { ++*line; --*len; } start = *line; while (*len && char_is_digit (**line)) { ++*line; --*len; } if (start == *line) panic ("syntax error in input"); if (cvt_decimal_to_uint (&errn, answer, start, (*line - start))) panic ("overflow error in number"); while (*len && char_is_space (**line)) { ++*line; --*len; } } static void count_depths (int * n_items, float * total_depth, struct hashtree * ht, int depth) { int x; if (!ht) return; for (x = 0; x < 16; ++x) if (bitset_is_member (&ht->nested_p, x)) count_depths (n_items, total_depth, (struct hashtree *)ht->children[x], 1 + depth); else if (ht->children[x]) { struct hashtree_item * item; item = (struct hashtree_item *)ht->children[x]; while (item) { *n_items += 1; *total_depth += (float)depth; item = item->next_same_hash; } } } #define ABS(X) (((X) < 0) ? -(X) : (X)) static void count_deviation (float * answer, struct hashtree * ht, float average_depth, int depth) { int x; if (!ht) return; for (x = 0; x < 16; ++x) if (bitset_is_member (&ht->nested_p, x)) count_deviation (answer, (struct hashtree *)ht->children[x], average_depth, 1 + depth); else if (ht->children[x]) { struct hashtree_item * item; item = (struct hashtree_item *)ht->children[x]; while (item) { *answer += ABS((float)depth - average_depth); item = item->next_same_hash; } } } static int round_fi (double f) { double n; /* f >= 0 */ if (modf (f, &n) < 0.5) return (int)f + 1; else return (int)f; } int main (int argc, char * argv[]) { int errn; int o; struct opt_parsed * option; option = 0; while (1) { o = opt_standard (lim_use_must_malloc, &option, opts, &argc, argv, program_name, usage, version_string, 0, opt_help_msg, opt_none, opt_version); if (o == opt_none) break; switch (o) { default: safe_printfmt (2, "unhandled option `%s'\n", option->opt_string); panic ("internal error parsing arguments"); } } { struct hashtree * ht; ht = hashtree_alloc (0); if (!ht) panic ("unable to allocate hash tree"); while (1) { long len; t_uchar * line; if (0 > vfdbuf_next_line (&errn, &line, &len, 0)) panic ("vfdbuf_next_line error"); if (len == 0) exit (0); else if (len < 0) panic ("input error"); else { int c; int key; int val; struct hashtree_item * item; c = *line; ++line; --len; switch (c) { default: panic ("command syntax error"); case 's': parse_uint (&key, &line, &len); parse_uint (&val, &line, &len); item = hashtree_store (ht, (unsigned long)key, (void *)(long)key, 0); item->binding = (void *)(long)val; break; case 'f': parse_uint (&key, &line, &len); item = hashtree_find (ht, (unsigned long)key, (void *)(long)key, 0); if (!item) safe_printfmt (1, "%d unbound\n", key); else safe_printfmt (1, "%d => %d\n", key, (int)(long)item->binding); break; case 'd': parse_uint (&key, &line, &len); item = hashtree_find (ht, (unsigned long)key, (void *)(long)key, 0); if (item) hashtree_delete (item, 0); break; case 'q': { int n_items; float total_depth; float average_depth; float total_deviation; float average_deviation; n_items = 0; total_depth = 0.0; count_depths (&n_items, &total_depth, ht, 0); average_depth = total_depth / (float)n_items; total_deviation = 0.0; count_deviation (&total_deviation, ht, average_depth, 0); average_deviation = total_deviation / (float)n_items; /* safe_printfmt (1, "%d items, average depth %f, average depth deviation %f\n", n_items, average_depth, average_deviation); */ safe_printfmt (2, "%d items, average depth %d, average depth deviation %d\n", n_items, (int)round_fi (average_depth), (int)round_fi (average_deviation)); exit (0); } } } } } return 0; } tla-1.3.5+dfsg/src/hackerlab/tests/hash-tests/unit-hash-utils.c0000644000175000017500000000305110457621774023103 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:40:53 2001 (unit-hash-utils.c) */ /* unit-hash-utils.c - * **************************************************************** * Copyright (C) YEAR NAME * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/hash/hash-utils.h" #include "hackerlab/cmd/main.h" static t_uchar * program_name = "unit-hash-utils"; static t_uchar * usage = "[options]"; static t_uchar * version_string = "1.0"; #define OPTS(OP, OP2) \ OP (opt_help_msg, "h", "help", 0, \ "Display a help message and exit.") \ OP (opt_version, "V", "version", 0, \ "Display a release identifier string") \ OP2 (opt_version, 0, 0, 0, "and exit.") enum options { OPTS (OPT_ENUM, OPT_IGN) }; struct opt_desc opts[] = { OPTS (OPT_DESC, OPT_DESC) {-1, 0, 0, 0, 0} }; int main (int argc, char * argv[]) { int o; struct opt_parsed * option; option = 0; while (1) { o = opt_standard (lim_use_must_malloc, &option, opts, &argc, argv, program_name, usage, version_string, 0, opt_help_msg, opt_none, opt_version); if (o == opt_none) break; switch (o) { default: safe_printfmt (2, "unhandled option `%s'\n", option->opt_string); panic ("internal error parsing arguments"); #if 0 usage_error: opt_usage (2, argv[0], program_name, usage, 1); panic_exit (); bogus_arg: safe_printfmt (2, "ill-formed argument for `%s' (`%s')\n", option->opt_string, option->arg_string); goto usage_error; #endif } } return 0; } tla-1.3.5+dfsg/src/hackerlab/tests/hash-tests/Makefile.in0000644000175000017500000000045210457621774021750 0ustar useruser# tag: Tom Lord Tue Dec 4 14:52:13 2001 (hash-tests/Makefile.in) # tested-headers := hashtree.h \ hash-utils.h \ md5.h test-headers := $(addprefix hackerlab/hash/, $(tested-headers)) libs := $(objroot)/hackerlab/libhackerlab/libhackerlab.a -lm include $(makefiles)/unit-tests.mk tla-1.3.5+dfsg/src/hackerlab/tests/hash-tests/DESC0000644000175000017500000000135310457621774020345 0ustar useruser# tag: Tom Lord Tue Dec 4 15:05:28 2001 (hash-tests/DESC) # We test the installed header files to make sure they compile. unit-hashtree Read a test script containing `store', `find', and `delete' operations followed by a `quit' command. Keys and values are integers. Perform these operations and generate results on standard output. These are compared to a file of expected results. The script and results are generated by a scheme program which uses Scheme hash tables to simulate the unit test. For informative purposes, some statistics about the hashtree data structure are printed. unit-hash-utils NOT CURRENTLY IMPLEMENTED This should test the quality of the hash functions in hash-utils. Currently it does nothing. tla-1.3.5+dfsg/src/hackerlab/tests/hash-tests/unit-hashtree.script0000644000175000017500000053255510457621774023727 0ustar userusers 574871803 1300114889 f 574871803 f 574871803 s 990010693 22924464 f 574871803 d 574871803 s 265759667 442077360 s 1103710348 23052624 f 1103710348 f 265759667 s 1010175377 201109425 f 574871803 s 435861424 612516022 s 97896931 1602526715 d 1103710348 f 97896931 f 265759667 f 990010693 s 368684587 1092030204 d 265759667 d 1103710348 d 1010175377 d 435861424 d 574871803 s 755224049 340354188 s 696471478 2000572225 f 368684587 s 802840481 1248080724 s 1100116287 1616765311 s 1813629828 272063888 s 5897344 1341587204 s 546757933 1830482854 s 1806769422 418247782 d 368684587 d 755224049 f 1806769422 d 265759667 s 5233958 713949699 s 871486206 1814065986 s 682285011 1480212167 s 1914015889 1486109511 s 1281886923 2032867444 d 546757933 f 755224049 s 420286553 1788383073 d 574871803 s 1258370457 537109392 s 1415231691 542343350 s 672690002 1413829557 s 1546913624 2096114568 d 1415231691 s 886108552 997050085 s 909498825 1227111655 f 1813629828 f 5897344 s 1076993510 680841854 s 1812907612 1939212311 s 312447285 1206960355 f 1806769422 s 553492015 1279080333 s 913775893 1824797819 f 1076993510 s 196979170 1472921549 f 802840481 s 1678871888 400146109 f 435861424 f 1812907612 d 1010175377 s 1286558117 980947526 f 1258370457 s 2121627909 300731787 d 1100116287 s 1185221381 1110396590 d 1812907612 d 2121627909 d 435861424 f 97896931 d 1076993510 d 909498825 f 672690002 f 871486206 s 2079303358 2001937450 f 990010693 d 913775893 d 755224049 f 1076993510 s 1958484962 467892603 s 768931155 1493983478 d 196979170 s 133309160 1920518252 f 1100116287 s 1700761914 116545256 s 1400787957 131916459 d 368684587 f 1286558117 d 672690002 d 2079303358 s 318007247 1789253002 s 776355132 676157572 d 768931155 f 1813629828 s 26088260 1129414642 s 128195590 382718951 d 435861424 f 196979170 s 2016006920 2134427741 f 553492015 f 1258370457 d 2121627909 s 1987431015 1322826449 s 1483534316 1101261181 s 1164363162 1127349441 s 961737265 1255545031 d 909498825 f 2016006920 s 1075848536 771944254 f 1415231691 d 1958484962 s 2041531514 1059832433 d 768931155 d 2079303358 s 2092166661 1400193630 f 368684587 s 966180373 1105475074 s 2114734422 1482070517 s 725255512 410435405 f 2016006920 s 992056371 718240607 f 1075848536 s 244330535 1605675089 s 55185030 212899891 s 967300706 157582904 f 1076993510 s 2006808675 1387835495 s 1384891015 1355086269 s 1666394338 2080341781 f 672690002 s 823307725 247635199 f 1483534316 s 2123462953 100784576 d 26088260 s 76389738 1123270312 f 1164363162 d 990010693 s 946992430 1079284882 d 265759667 s 1508107084 1170553839 s 20030560 1993861564 s 1397678291 1863588863 f 1508107084 d 2092166661 d 2079303358 f 1075848536 s 1965711088 453945219 s 1298844850 1400937649 s 1987064881 1349527880 s 460659397 710151316 d 1958484962 s 461608582 2127860167 f 886108552 s 523885624 1761282210 f 913775893 d 1546913624 s 1170512684 1359273908 d 20030560 s 1882780783 350216344 s 155527373 810875742 s 1746311451 1148192132 s 1035989797 1609800714 d 155527373 f 435861424 d 2016006920 s 381537891 1164616662 s 1825434345 187645698 s 1575792370 100908166 f 1286558117 s 932944303 2139216323 s 1996435526 1738044126 s 1642624976 626550275 s 1269190946 668323633 f 696471478 s 429652531 1814537527 s 558641723 48591770 s 81193735 1874026116 s 963019655 1302334838 s 207997039 1881939235 s 1950674415 667399891 f 1100116287 f 961737265 s 632616859 1280684043 d 2092166661 s 756191814 1679117208 d 2041531514 d 1076993510 d 2041531514 s 2000345866 1342485712 d 1170512684 s 1060398801 1354936716 d 207997039 d 1281886923 s 331182834 1009975526 d 755224049 f 1076993510 s 1319242808 1325004184 s 580723192 1479911574 s 1144538414 1332773793 s 1442809223 719796141 s 260996276 1780194943 s 1743018745 1957047027 s 1089050664 1876902670 s 1715766627 60601856 d 26088260 d 1715766627 s 55400004 1167141009 s 1724958505 1747864201 f 1415231691 s 85603973 40244543 f 1089050664 s 1287541182 2044259564 s 315727580 985826581 s 947505744 554109560 s 441775787 1998573178 s 1702213171 555883700 f 776355132 s 639928091 188758562 s 1177457394 422796945 d 2079303358 s 1342892432 1591246962 d 756191814 s 1303109580 1047032076 d 1882780783 d 381537891 d 155527373 s 212204405 1425869846 d 1258370457 d 1089050664 s 713482757 1996048526 s 2000054130 1191457310 s 1440382673 462192979 s 777487133 1765302559 s 1100418174 535237778 f 1700761914 f 946992430 s 1842119091 1818090298 s 1589932980 783838364 f 1700761914 f 312447285 s 606161493 817047532 s 917695122 109946557 d 2123462953 f 1715766627 d 155527373 f 913775893 s 1692461377 2070567695 f 441775787 d 1950674415 s 225510738 630429989 s 288377956 1236591482 s 1542702484 6802956 d 1164363162 s 298589115 1722772354 s 20679664 1267649230 f 1812907612 d 961737265 s 1157065811 1328452263 d 2123462953 d 2000054130 s 616080936 1853549355 s 1263621758 1248768192 d 967300706 s 1518546560 511610003 s 856352200 532289667 s 2011984833 1402627666 d 1508107084 d 1442809223 s 1080962721 1362696168 d 966180373 d 2006808675 s 1830175657 1880502861 s 973770262 1754128351 s 2084701070 1125191264 d 1076993510 s 429822032 1846044650 f 133309160 d 461608582 d 1518546560 f 672690002 d 1080962721 s 1781116313 1015695472 s 1659739999 1989465734 d 1806769422 f 523885624 s 1342699748 832458476 s 1733388011 1959462395 s 410135224 2071939073 f 1103710348 s 160058990 283360861 d 1164363162 s 1891160360 920770696 d 1384891015 d 212204405 s 1729446909 244083477 s 2128611319 1586783225 f 2041531514 s 1123721920 1582822813 s 1376514591 112830012 f 1400787957 s 1099492502 2063799951 s 1613794649 1807476663 s 996308620 1384422002 s 220804677 401280670 s 1371983891 2130727579 s 778315902 2111855251 f 85603973 s 1067875623 1166946606 f 696471478 f 1100116287 s 1978624715 1266180224 f 20679664 d 776355132 d 1157065811 f 856352200 s 1729245925 1952420668 d 553492015 s 253377824 1889919032 s 1684610381 785535668 s 1081189303 7234089 s 750657227 1985858804 s 336441455 1566096902 d 212204405 s 212417943 1021719676 s 1243897858 1367059375 s 111138056 948821652 s 1090233506 1353789733 d 1958484962 s 6853088 1144294291 s 444613733 77999946 f 336441455 f 1076993510 d 1067875623 d 1715766627 s 1103868810 56149479 f 1950674415 s 787678191 1257521042 f 312447285 s 1662946795 1229444124 f 886108552 d 1715766627 f 1185221381 f 1724958505 s 1963667044 1692998481 d 750657227 d 2123462953 d 682285011 f 1743018745 f 1258370457 f 2092166661 d 1342699748 f 1743018745 f 1882780783 s 787728831 411562396 s 225558636 203052885 s 1867021569 1336909841 d 990010693 f 336441455 d 315727580 d 1303109580 f 81193735 s 1444807062 1777698616 f 909498825 d 856352200 s 1276972852 805653083 d 1397678291 s 2046457979 2053479395 d 1662946795 f 253377824 s 1114217915 2015903441 d 946992430 s 2136959076 1432484024 s 384898540 1255717034 s 1375700651 2033062548 s 630581511 1162551752 d 1963667044 s 883358842 1340026269 f 1286558117 d 787678191 s 947346789 578017324 d 1123721920 d 315727580 s 1261655582 279226628 s 694375834 1654927280 s 707190533 138025143 s 1525658314 226540400 s 721833452 1109899242 f 961737265 s 1279247223 1314219210 f 435861424 f 682285011 d 1806769422 s 1519686336 313232862 s 1723335948 1007608696 s 1812564460 1714799229 s 916861076 1092973896 s 1462209630 1814807348 s 1200100805 1638811686 s 1056608080 770575261 f 1483534316 s 275238771 470512191 s 78415438 894782302 d 1678871888 f 2123462953 s 1384310243 1655401751 f 1950674415 f 381537891 s 1813890766 939605968 s 1732652564 1996214048 f 1035989797 d 160058990 d 429822032 f 368684587 f 966180373 s 358345617 1492181390 s 1222903378 351208145 s 1032951388 1206459109 s 510323098 872866227 s 1626506494 458035143 s 1365781503 1276185069 s 814230794 1293914707 s 733192277 88984039 d 220804677 d 2041531514 d 725255512 d 1723335948 d 1269190946 s 1139779641 1046080911 f 776355132 s 1911775354 1890885260 d 966180373 s 1337192080 1290824684 d 1060398801 s 629827407 1170458288 d 196979170 s 1985605984 114469675 f 1099492502 s 299990407 1798260445 d 778315902 s 2024601536 2090222624 s 97142446 1316780726 s 1611081710 506489159 s 1066521366 238647295 d 2092166661 f 2114734422 s 874638455 194481214 s 1337249948 734049855 s 188135606 1034040262 f 97896931 f 909498825 s 672644439 1941578997 s 1395748784 1405177059 d 2024601536 s 1818916643 1854113439 s 1398613763 1768946827 f 1678871888 f 1139779641 f 946992430 d 778315902 s 1196547176 466278218 d 2079303358 s 1468509334 387187794 d 1911775354 d 755224049 s 1348151311 571945069 d 1987064881 s 628864535 1355415672 d 616080936 s 458715300 2101176604 d 1978624715 s 659229259 750636200 s 1475799863 71661886 s 1550063878 1767289998 s 1948542671 1781200535 s 2053651256 981868198 f 546757933 s 2002896417 354516401 s 1911437750 1455028012 f 2000054130 d 913775893 d 1444807062 d 1319242808 s 429485460 940623020 s 1665423033 741682044 f 26088260 f 1987431015 f 196979170 f 410135224 d 1842119091 d 2136959076 f 429652531 s 40000277 1221096314 s 1350610967 1650581774 s 133544359 1168521159 s 697678287 1095729423 s 96196764 2004151634 s 1367850756 1575798345 f 2016006920 s 1780252258 140751626 f 1348151311 s 435731120 1549509266 d 1035989797 d 1263621758 s 653165472 926181221 f 694375834 s 1629721921 1720056273 s 1648772171 940423381 d 996308620 f 1462209630 s 1360294964 1752472523 s 1743845864 40719995 s 358079583 641682131 f 2053651256 f 1518546560 d 947346789 f 1743845864 s 953328919 178903741 f 1468509334 d 1103710348 d 368684587 s 294773111 503249993 f 973770262 s 1984311443 1054739193 d 1103868810 f 917695122 f 886108552 f 358079583 f 1442809223 d 1139779641 s 136328146 12735911 d 1818916643 s 1758416174 652296528 s 10276844 489124323 s 1208055588 610629269 s 1709950581 1942992589 d 733192277 d 1613794649 f 1365781503 d 1715766627 s 1923145554 1292397587 s 470694053 1145667925 s 1668976193 756600451 s 1581104261 766877296 f 1723335948 d 1090233506 s 1985256759 649655039 s 2135927669 2136797417 d 1743845864 s 1053834421 1870280932 d 212204405 s 1482562114 2116636891 d 85603973 f 733192277 d 331182834 f 1468509334 s 627158205 1116459497 f 1842119091 f 2006808675 f 458715300 s 1829004036 337391063 s 509681074 1819953177 s 336026037 1683272468 s 918971452 579645463 s 121310515 1145680133 s 1298582462 1844522101 d 1911437750 s 935130086 547293948 s 2141287011 165873931 s 935240036 311631220 s 1599473994 2140635256 f 1978624715 f 1367850756 f 1319242808 s 63264298 1879140687 d 40000277 s 1379943699 748526432 d 1987431015 d 1281886923 s 263969645 465216270 s 880302635 2064690264 s 1834026688 1679373759 s 312736623 1425903646 d 1666394338 d 1963667044 d 632616859 d 358345617 f 1032951388 s 462446922 542710718 d 696471478 d 777487133 s 354059348 1373526038 d 81193735 s 1609120124 13498040 s 1192684571 1229844933 s 507906058 38532529 s 853367047 431566577 f 1103868810 f 1089050664 d 787678191 s 1215520434 1559830454 s 1758079846 1913889803 s 1832529369 1402308355 s 1185398891 863944831 f 932944303 s 191695727 417051813 f 331182834 s 2109995081 1070289682 d 2041531514 f 659229259 f 778315902 f 121310515 s 1077901239 454167139 s 375506026 1639566030 f 1542702484 s 227556613 1016972237 s 807036902 1007620383 d 1066521366 d 725255512 s 1764637395 369544253 d 429822032 f 81193735 s 1359621004 1405329396 d 725255512 s 1907460715 1467444275 s 1448756918 1695000888 d 1813629828 s 488388163 25154263 s 639961074 1292461339 s 144371132 909615086 f 1813629828 d 1907460715 s 1572787519 1919774231 d 331182834 d 946992430 d 1648772171 d 1659739999 s 1319752646 856860638 f 275238771 s 1441494503 1641192844 s 1086435961 1232978819 s 1887213756 1430704858 f 1170512684 d 263969645 s 1273391237 391417416 d 375506026 s 1647120332 114937286 d 1139779641 f 1642624976 f 1662946795 f 616080936 f 1662946795 d 918971452 s 1475714137 1547920684 d 461608582 f 1053834421 s 1002691182 786220298 s 407765789 1674776116 f 1830175657 d 1010175377 d 188135606 f 755224049 s 1492584358 1610663378 s 1969775622 938893868 s 262540809 682264678 s 1094207061 500870079 s 597270789 1503561261 s 215271803 1911327051 s 1267962751 433544438 d 1267962751 f 144371132 s 1376907385 1971877455 s 1594996321 1316978165 s 2107018180 1139270139 s 2019477074 1401810949 s 458280594 348534362 s 183667728 945805151 d 196979170 s 734175060 281556057 s 455512995 1908029692 d 909498825 d 1891160360 d 20030560 s 839085907 1129315944 s 293634711 1001309370 d 1267962751 d 880302635 s 1061892931 191049206 s 819497510 925224266 s 1010646526 1380737262 s 1916314325 1954222882 f 672644439 s 1605511348 1106158673 s 1605543104 1945244580 s 597361352 91395644 s 990990549 521843838 d 1542702484 d 918971452 f 1468509334 f 220804677 f 917695122 s 496041554 730850052 d 1733388011 s 845960442 1794420857 d 315727580 f 6853088 d 1825434345 f 275238771 s 1752268226 1922316281 s 1345672054 585668246 s 172329495 2140167977 f 2136959076 s 516817846 1648578000 s 1186584547 347054794 d 874638455 f 597270789 s 1146318924 1503581578 f 1629721921 f 694375834 s 753780953 1243159580 s 1144868897 1415489076 f 441775787 f 1665423033 f 1605543104 f 597270789 s 1612927486 1496797982 s 1858660412 495633258 f 1319242808 f 1139779641 f 1397678291 s 1807141900 318632073 s 1026651051 1810464858 d 144371132 f 1196547176 s 1648083303 81515432 f 546757933 d 429822032 f 227556613 s 1897113966 1827682148 f 1103868810 f 1812564460 s 1969611935 799341233 f 1192684571 s 187876264 1478442793 f 358345617 d 1508107084 d 558641723 f 312736623 d 1996435526 f 76389738 d 244330535 d 1267962751 f 632616859 d 263969645 s 1727839343 36349916 f 1842119091 d 1397678291 d 1684610381 s 1329364259 127304292 d 1157065811 d 1599473994 f 1100418174 d 458715300 f 1626506494 s 1596813160 379893556 s 565142395 25470775 d 509681074 f 2011984833 f 1781116313 d 853367047 s 267742557 1566957501 f 5897344 d 63264298 s 186060079 768911835 d 336026037 d 1157065811 f 1114217915 f 20679664 d 1950674415 s 29403282 832686394 d 1342699748 d 1668976193 s 1254205487 1453329776 f 787678191 s 2017198276 1128496456 f 1002691182 d 913775893 f 1963667044 s 568523684 1940847549 s 411579116 1970250831 s 1058670966 1187756296 s 1125236669 441897104 s 1993923693 1696102591 d 616080936 f 953328919 d 1281886923 d 133309160 f 1342699748 s 2045615484 1789819374 s 1441439926 53914842 f 2114734422 f 2109995081 f 1254205487 s 621899500 2108258701 s 725716895 931239200 s 1958030746 918929014 s 999860442 707228238 s 480110513 509974388 d 1200100805 d 293634711 s 600888551 1372013265 s 1641870283 75936520 s 977265470 85924834 s 2008763249 707824334 f 568523684 d 1678871888 s 786908926 96465122 s 255073758 576575636 s 944534279 1293780500 s 1276330527 2041443616 f 935130086 s 1012854867 2136718802 f 1978624715 d 1281886923 f 516817846 f 1723335948 s 629463339 997212949 s 378082151 1252286707 s 636675352 49337339 s 1303374776 1325667866 s 1672136703 840225835 s 1265428248 1853080702 s 934656313 159604002 d 1099492502 f 407765789 f 1441494503 s 1894944405 1379721917 s 837049023 1757804069 d 839085907 s 1168190032 1550370549 s 1874610755 1075023605 f 1090233506 s 2118900745 1127624518 s 2128422119 1817433730 s 818240070 822736527 f 1002691182 s 1270915348 1472018545 d 1303109580 s 885639959 517313199 d 1996435526 d 1360294964 s 1530763226 193543039 d 621899500 d 1200100805 d 1894944405 s 1982245277 1903564376 f 1342699748 s 1755364355 1479130376 f 1709950581 s 228358317 1585769645 s 1138723734 467796172 s 976629108 1998559398 s 1007502687 1588689082 d 516817846 f 597270789 f 1032951388 d 1081189303 f 1076993510 d 1641870283 f 262540809 s 552530647 1495658900 s 587387785 324804360 s 815787963 1332307047 s 1209148278 1350824183 s 1748407201 50305850 s 1104321155 400972224 s 216315836 1979897444 d 1138723734 f 1519686336 s 1661351900 298082295 f 880302635 f 1834026688 s 1974134154 106305043 d 597361352 f 1648083303 f 183667728 f 1177457394 s 470364384 444836812 f 961737265 d 1441439926 s 1190239095 572211215 s 1775016194 953779629 s 537114006 780430135 d 1375700651 s 2076747909 785350248 d 378082151 d 1715766627 s 755259890 1671114098 s 153346269 745084665 s 66694745 698721913 f 1550063878 s 1340169228 1516493555 d 721833452 s 4112207 537642779 s 1778431363 466907040 s 174160099 1891706195 s 590586864 918045171 s 1096543848 1673305061 s 2047337645 1826651330 f 1186584547 d 1641870283 f 1032951388 s 1943334948 909403543 s 961012465 913515750 f 1727839343 s 915937729 718623564 d 1076993510 s 857035532 258270629 d 777487133 f 1196547176 d 961737265 s 314460252 670842453 d 961012465 s 1518280274 1427706219 s 463411374 899764368 d 1303109580 s 1179193849 2101813871 f 587387785 s 853626978 1762955495 f 1748407201 d 1337192080 d 20679664 f 753780953 f 580723192 s 31971309 1553299124 s 665172915 1428748638 f 1812907612 d 1067875623 s 1154888968 420101876 s 2084836175 553023808 d 932944303 s 1321108452 65811405 s 1166206311 833822184 s 1477997924 777055354 s 1070012108 809026663 d 1375700651 f 1070012108 d 1519686336 f 2019477074 s 1155489047 671538251 s 955870688 670907650 s 1197574894 1992016102 d 1440382673 s 616672770 341253041 s 128171373 1411265149 d 1518546560 s 1539031817 399876174 d 2006808675 d 1709950581 d 2024601536 s 562803006 666707719 s 1620028266 1864282613 s 595581284 1911860884 d 1575792370 s 991387042 509221379 f 653165472 s 961533763 1093738649 f 1243897858 s 377637554 1862874557 s 609523551 1079555423 f 435731120 s 939796050 1114903048 d 480110513 d 1077901239 s 1116668734 959344212 d 1276330527 d 597361352 s 681667617 892692222 f 5233958 f 78415438 s 1106529896 1245317478 s 1240532390 37629880 s 1091333850 248806635 s 706512545 742102859 s 702741247 1858771593 s 1208191329 715110691 d 636675352 s 274760156 965843579 s 572980445 701137309 s 586591644 192888782 f 496041554 s 120316023 392467421 s 1823260475 1483801271 f 1090233506 s 28140621 745571416 s 73903491 1953762745 d 215271803 f 586591644 f 1775016194 s 1703302372 361475937 s 560949389 2041234204 f 1185221381 d 886108552 s 1193909273 631565369 d 516817846 s 1020721312 733609481 f 1089050664 f 1518280274 s 786173394 763148580 d 1732652564 d 1781116313 d 1589932980 f 1076993510 f 885639959 f 1818916643 f 1321108452 d 1530763226 f 1100116287 s 1347601566 1788980185 s 281398649 1789245641 d 1492584358 d 1882780783 s 116269053 375166887 s 1156686264 2022864224 f 565142395 s 865390121 1055423584 d 121310515 f 1539031817 f 1916314325 s 1383534475 662341464 s 1473085332 239013134 s 295069235 1152192030 s 660883718 1268461083 d 568523684 f 2008763249 f 460659397 d 665172915 s 527921371 1917992199 d 1958484962 f 639961074 f 40000277 s 1897343725 240181222 s 957235695 901064940 s 392294552 2128618334 s 1850217633 1022638575 d 1969775622 s 1233738092 1269060410 s 445346234 1796981781 s 837779273 1742390532 s 1611155127 746783199 s 899388796 599405424 d 1287541182 f 1166206311 f 1572787519 f 196979170 s 2021499542 268312156 s 587700132 1502050248 s 613860619 1947396482 f 560949389 f 629463339 s 1242813336 1000752383 s 840080489 1427387984 d 294773111 f 470694053 d 1081189303 d 244330535 d 1395748784 d 1629721921 f 840080489 f 1778431363 s 1592422533 154167015 s 55215490 994247504 s 1014757595 1671776368 f 1138723734 d 1969775622 s 1874590489 511550891 d 1982245277 f 659229259 s 107810157 1663444903 s 1239695342 1097512608 s 325460467 542451493 f 1963667044 s 1925883467 1612424579 s 1678284082 598258180 s 575670525 1401447182 f 298589115 d 1081189303 s 402400336 1808991588 s 1229321358 1916801745 f 1298582462 f 886108552 s 91496274 1746451881 s 446364654 1524851700 f 944534279 f 1948542671 d 2000054130 f 917695122 s 1962451442 269465281 s 265720554 1498786639 f 574871803 s 1296661192 1606599929 d 1729245925 s 812717112 2144460858 f 392294552 d 312736623 d 1692461377 f 1200100805 s 881651259 738264618 f 977265470 d 814230794 f 1648083303 d 1662946795 d 1894944405 f 97896931 f 516817846 d 918971452 s 2001907895 755572398 d 2053651256 f 1348151311 s 2127039474 1658291391 d 1319242808 f 97142446 d 1376514591 f 1993923693 d 116269053 s 1029802610 876429925 s 1035289334 730854173 s 1964072883 1379405645 s 1483637403 944065974 f 1519686336 s 1619672880 46314007 f 1281886923 d 786908926 s 1556030748 561623357 f 55400004 s 31706083 533874816 s 2139310502 1569164150 d 1010175377 s 912953200 721907141 s 1701754569 581610588 d 244330535 s 1729528549 1671555772 s 981295898 133880444 s 1775463057 1689911192 s 989495058 38402978 s 5111368 70109061 s 2044641252 61935915 s 520058013 769455938 s 374880419 1682409138 d 1605543104 f 963019655 s 370135874 672604995 s 2057702584 1653900893 s 1689305549 1281880302 f 1589932980 f 562803006 s 1811003743 26160685 s 1463857589 546218699 s 354981174 921099118 s 2115495547 2094867918 s 162653213 696179604 s 411094347 1066315478 f 354981174 f 336026037 d 989495058 s 1173530427 1833234937 d 1492584358 s 350132916 813128974 d 2024601536 s 662508686 1136122047 s 1822839377 1298775260 s 1926246513 1709869607 s 554774997 1893477212 d 990010693 s 254030405 1522301074 f 1070012108 s 1611952622 1279211568 f 1080962721 d 2084701070 d 976629108 s 1676233621 558583307 f 1185221381 s 2061108208 892121170 f 1384891015 f 839085907 d 81193735 f 1448756918 d 462446922 f 1197574894 d 496041554 s 1089799994 2047257896 f 1729528549 s 1764866524 1148911984 s 555844509 617182343 s 1330301014 158454816 s 1479574945 26133943 f 458715300 s 2006546436 1294721056 d 1743018745 s 849686411 1469038899 f 2084701070 s 91100095 983753701 s 1402186587 601136577 s 1457910602 1156981086 d 565142395 d 1969611935 s 1820457035 1849086480 s 19605124 1708149269 s 769160419 878422599 f 1303374776 s 102560142 845468786 s 928288214 936568881 d 1067875623 s 1904263894 1649182422 s 1436406421 597175287 s 1127003765 1166090011 f 725716895 s 466437350 858668523 d 629827407 s 864346164 804435261 s 1813870522 906995403 s 1027266478 1835283618 f 20679664 s 2022702369 286400279 s 1830486041 1722806700 f 2121627909 f 312736623 s 1318614745 2012499219 d 191695727 d 1897343725 s 2048789934 1779609314 f 1192684571 d 815787963 s 977003444 1759027001 f 128195590 d 725255512 f 1139779641 s 1413024337 93801400 d 1053834421 s 1257022581 854674470 s 1723629611 755980757 s 949748397 1043544118 s 2011150800 506449786 s 1454689588 1483453231 s 1184628655 1328769578 f 1010175377 d 516817846 d 992056371 f 558641723 s 1842372251 551887287 s 180686399 128033251 f 1858660412 d 961533763 s 1589565706 248654741 d 1572787519 f 1556030748 f 116269053 d 1154888968 f 1192684571 f 1463857589 s 1821333134 1374705355 f 1032951388 f 996308620 s 823365587 43839095 d 600888551 f 961533763 d 262540809 s 1846819846 1719273420 s 354273483 427472876 s 304075474 1338643759 s 805764752 1012493245 s 1435487282 205002091 f 1384891015 s 1496977141 783080001 d 883358842 d 639928091 f 1127003765 f 725255512 s 293541989 1770471781 s 2054274026 2074547255 d 1190239095 d 1258370457 s 308867395 1016339805 s 470945053 365833299 f 1589565706 s 493883306 600992247 s 1056488189 548147974 s 2044014697 580088280 f 1002691182 s 1442636485 780420647 s 1620585752 1494478370 s 663544617 95541496 s 2058989221 404408892 f 1089050664 s 1257419962 1552215752 s 1111760120 2046099059 d 1703302372 s 1744782885 851634649 s 1114698144 1307481978 d 429485460 d 725716895 d 2115495547 d 1365781503 d 981295898 d 446364654 d 1347601566 s 1595770112 1635246766 d 1743018745 s 1074190536 199760499 f 6853088 s 1512896778 1482414220 s 1469454945 162778116 s 1521554609 664253015 d 2114734422 f 1764637395 s 1899036623 1428980484 s 386762991 877266948 s 1977076608 848461308 f 1732652564 s 1726004176 678501529 d 961737265 f 2044641252 s 640569199 887440566 d 1035289334 s 1308860271 1880462100 d 128195590 d 865390121 d 1969775622 f 370135874 f 516817846 d 2054274026 d 445346234 s 1980826540 1595589603 f 1173530427 s 501737879 772955110 s 1571753202 107107490 s 1923265362 1753183764 f 510323098 s 934317589 939525111 d 97896931 f 78415438 s 1450010198 1367786113 s 1243237309 1201129005 d 1010175377 s 1175109098 942559733 d 609523551 d 1270915348 s 1262981361 1147171823 s 1451360800 2081489412 s 1464685197 573248316 s 881475080 1595917362 f 1700761914 s 895726457 2141681221 f 460659397 f 595581284 s 1468838606 1105019672 s 671996068 1880508974 d 597270789 s 1341174626 299883840 s 1993537070 1764569037 f 946992430 d 325460467 f 1070012108 d 839085907 s 2131013338 711667136 s 481858392 33022095 s 1347016382 705018163 s 207301726 185871809 s 214758892 1527046435 s 156221823 1373099858 d 265720554 f 1813629828 d 2107018180 f 4112207 s 830375062 464260977 d 881651259 s 784694174 145652104 d 1436406421 s 158606651 567712722 f 354981174 f 207997039 s 272126342 2028945646 s 1782266659 1377128903 s 1876558999 1581098606 f 1899036623 s 1602051464 519014802 s 779911536 1303708976 s 662789771 203614221 s 731539815 362220872 s 179852647 2079412769 s 1001265336 677308006 f 81193735 s 656505203 584217360 f 935130086 f 1813629828 s 1981719343 77590367 s 976016309 857501903 f 1035989797 s 1756351927 104347842 s 1816967550 284200489 d 378082151 s 485968205 596788967 s 399364339 1253294170 s 1689889376 1160468353 d 628864535 s 1254675740 633278500 d 587700132 s 1277707057 1725260189 f 187876264 s 1226413017 1003612370 f 845960442 f 1662946795 s 571415519 195495337 s 1796025948 1885384714 s 1186445439 4446790 s 1199887481 1259122530 s 1290919890 1873459440 s 91970555 1003682850 d 461608582 d 1727839343 s 1548893748 319883728 s 1396766597 250906179 s 1841428414 822321698 s 1391900752 470863998 s 2102841444 1657309438 s 1465341293 709713271 s 1461119641 2000633162 s 918709151 2092603717 s 2101558850 358432963 s 323569722 1197436040 d 1229321358 d 697678287 s 711863327 1689557503 s 1386759345 933974608 f 1196547176 f 1820457035 s 1745683059 1668309691 s 1000541607 439535194 d 2139310502 d 707190533 f 590586864 d 2047337645 s 984493792 1210699056 s 1569373772 449974753 s 477634103 102047534 s 1043203872 171364189 s 171003265 1917047248 f 1962451442 f 481858392 s 1657490382 252735950 f 1340169228 s 1072728832 1037471219 s 2001642040 2021965011 s 325145456 1443855135 s 1730107128 1921489239 s 1876917557 817209463 s 83434387 988212728 s 2105744556 140164900 s 272622623 365669695 s 980594736 2023160077 s 258263319 2015104790 d 160058990 s 1992666030 794508366 d 102560142 d 961533763 s 312941485 431711212 f 1985605984 s 1888947297 473406507 s 110611740 746029131 d 1103710348 s 865053003 1984887186 s 1184177318 1787192172 s 393289205 1632374554 s 1624366102 583649741 f 2044641252 f 446364654 f 977003444 f 258263319 s 1483398195 1545913775 d 1395748784 s 142045206 624947526 d 458280594 d 786908926 s 1295343930 1679296504 d 1550063878 s 1681243989 1989412159 d 572980445 s 2000505727 502733893 d 31971309 s 232787915 1787273750 s 1448567442 1929318956 s 354266859 132405200 d 807036902 d 172329495 s 1986373181 843123519 s 1838797904 376883860 f 384898540 s 2045353675 1813207998 f 554774997 s 1919814733 642144521 s 1316154849 2090711963 d 1240532390 f 1743018745 s 758230573 422110919 f 1813890766 s 981202113 2099798357 s 1776430066 1047471306 s 1690551138 945341333 s 2107406104 1081226826 s 215425862 853557912 s 110719370 22229113 f 2044641252 s 1744865853 232559289 f 1360294964 s 1112376132 1018692533 d 1457910602 s 1175243696 1628841064 s 134079854 1171908555 s 906124011 1131831011 s 2087524773 1347256873 s 1763586409 1457976243 s 1382876361 1245824431 f 565142395 s 413616588 1881972611 s 2097166256 846865095 d 2006808675 d 20030560 s 292982753 2037814805 f 947505744 s 563629927 736496294 d 2092166661 s 1497365218 1735475416 f 481858392 d 153346269 s 950042312 1250952452 d 1842119091 s 371909701 493831798 f 912953200 d 312941485 d 1595770112 f 2016006920 d 40000277 f 1874610755 f 1732652564 s 270989623 560277212 s 1800134921 221305896 s 1910287825 593215597 f 312941485 s 1533427398 938175209 f 1239695342 f 1986373181 d 2107406104 f 1360294964 s 1924348256 1805982920 s 1048581711 2076972543 s 1423767617 1729623816 s 649171410 1492427994 f 2000505727 s 874457143 507580129 s 2055014764 446714412 s 178742495 1675535523 d 1550063878 f 1605511348 s 1963519188 1982440827 s 2062374306 883538890 d 1058670966 s 1454461214 808994270 s 780631389 1177401271 d 441775787 s 538390768 1959389531 s 880097276 2138132026 s 1966858227 1624380851 d 1391900752 s 625462376 767831712 s 721900472 682722370 s 747827464 1256745358 s 355894624 563722924 s 1456389778 1344354314 f 1992666030 s 2113265677 999426732 f 886108552 f 354981174 s 212904633 1886422140 f 1263621758 f 1829004036 s 1219160518 1834128805 s 816757894 42539781 f 1367850756 d 984493792 d 621899500 f 880302635 f 1842119091 s 1212273859 1460129801 s 784405532 392312880 d 1846819846 s 2147054674 1245375752 d 2022702369 s 827188883 1137999539 d 1729446909 f 308867395 s 278827066 952133962 s 1363871179 1396588673 s 2000330232 461378884 d 2045353675 s 968042541 222669687 s 646658647 222240713 s 11919910 353759205 s 1567204602 1180948089 s 326451557 1900678029 s 2115665734 826501343 s 458178218 1105328409 s 643680761 321715941 f 1382876361 s 674298687 402806653 f 1820457035 s 828403761 2017507842 f 819497510 s 1266641923 1449148707 f 2054274026 f 1709950581 s 2014356088 54476922 d 1672136703 s 104633482 627082506 d 713482757 f 1605543104 s 212082285 1794286737 s 1033847196 737000932 d 1240532390 d 31971309 s 233059161 1688181321 f 694375834 d 990990549 s 836517471 947145867 d 950042312 s 1724939143 1942891178 f 1689889376 s 1332922758 1041337011 f 1184628655 d 354059348 s 574697170 1607160059 d 1075848536 s 1218198167 1249692340 s 117861162 2086209811 f 160058990 f 565142395 d 188135606 f 1094207061 s 1590402186 181251722 s 1476891439 57735559 s 1653141795 632432729 f 977003444 f 814230794 s 461638495 690217619 f 399364339 d 2001642040 f 992056371 s 2117713636 339405513 f 1100116287 f 1012854867 s 784626236 764873637 s 367921121 2134963462 f 1127003765 s 1747042941 943726277 d 961533763 d 312736623 f 636675352 f 232787915 s 297796410 1449441579 f 1186584547 d 1032951388 s 1555045962 1115513050 f 212904633 d 121310515 s 1884818285 2000400741 f 1626506494 d 111138056 f 1199887481 s 861656219 984490017 d 1365781503 s 866159239 2147164100 f 733192277 s 1499621190 1176397208 f 1157065811 s 1880981150 1321867575 f 606161493 s 1900113382 596164058 s 652366382 1867500563 d 1330301014 s 829700397 815973118 s 532312064 1682132357 f 784405532 f 1755364355 f 663544617 f 255073758 d 571415519 d 2118900745 s 680872176 927224526 f 2087524773 s 796304719 699495700 s 650850679 1231807764 s 505077092 66839775 d 2117713636 s 204412659 1834719000 f 188135606 s 1276111590 26749329 s 1048636597 1828843849 f 1899036623 f 312941485 s 28927113 1404880535 s 1515279347 2055731214 s 388796643 413324659 d 73903491 s 733107653 384283590 s 626993292 463611927 f 1090233506 s 845253519 640876467 d 411579116 s 915199324 1416750127 s 209837968 1445677240 d 2136959076 s 1429914420 1202269583 f 2045353675 s 188099324 847748369 s 1635704992 1474741661 s 1956799398 1949750862 d 967300706 s 186363420 2137876716 d 516817846 s 1577811861 1115430360 d 646658647 d 1436406421 s 432375051 1177046100 s 1191227223 1365145424 d 1732652564 d 1116668734 f 856352200 d 183667728 s 140610179 1584005155 s 1160459167 1014333368 d 104633482 f 1813629828 s 648835078 987839459 s 949777250 31583034 s 2098467792 218462372 s 426932699 2012089400 d 963019655 s 1630884972 1247248010 d 1319752646 s 73769212 400833708 f 1440382673 s 825025591 194385430 f 779911536 s 981430335 1792997759 f 1429914420 f 1086435961 s 1930266160 728579422 s 929319176 211980746 s 934577615 611511642 d 1010646526 f 613860619 s 1990654789 226260687 d 1492584358 f 915937729 s 548927108 240729820 f 755224049 f 1756351927 s 1252540269 408919361 s 1730696613 1343496976 d 4112207 s 1568592092 404841767 s 1419808494 248012908 s 1465410327 1804832369 s 206749021 1768172312 s 741085473 169615772 s 871920181 1522592417 s 1026185842 1396740705 d 1067875623 s 856373109 85010292 s 415226934 1534237790 d 934656313 s 304731390 227671081 d 558641723 s 1662699743 1899830429 s 1450208095 493432255 s 1478446267 1365352436 d 31971309 s 408158141 5601909 f 1700761914 f 671996068 d 1577811861 s 295050531 93811308 d 1812907612 d 292982753 d 671996068 s 1259797878 566559972 s 1264857737 1770062084 s 519174654 30736577 f 1841428414 d 160058990 f 1476891439 f 2076747909 s 2085896662 16956859 d 128195590 f 1966858227 s 1953503741 2076112995 s 1373645319 1193487085 f 1197574894 s 707639645 1987950636 d 299990407 d 697678287 f 1919814733 f 934656313 s 1857897720 809492981 s 1457842807 413240284 f 595581284 d 1303374776 s 425201213 483263576 f 823365587 d 1066521366 f 1781116313 s 816423825 1535212151 d 66694745 d 258263319 s 2101762572 451843626 d 1164363162 s 1916532135 2145749238 f 837779273 d 711863327 s 1935431277 197624321 d 85603973 d 1812564460 s 649602004 1186504191 s 121762337 2014028126 f 1727839343 s 1098309250 1865656082 s 2012463227 1634704569 s 224555604 321455948 f 1435487282 f 354273483 s 1122745906 1789662903 f 1900113382 s 1068646963 236325496 s 1092790314 358087833 s 110934483 761503484 s 1728405927 1859812735 f 630581511 s 1862137561 1949347918 d 1456389778 d 741085473 d 1281886923 s 1967896339 1126266472 s 193697880 47429787 s 1753487260 1140220101 d 318007247 s 132011082 832076864 f 516817846 d 1462209630 f 186060079 s 588992834 849691946 s 428090945 1743570014 s 2056851960 1563982706 s 1124852818 1757680586 s 429179173 1363684198 d 1396766597 s 515511032 380549102 f 1229321358 d 588992834 s 2028216559 1056711937 s 265412081 1645704771 s 325521457 2073795717 d 1092790314 d 1969611935 d 829700397 d 1619672880 d 220804677 f 174160099 d 1647120332 f 2041531514 s 1690367831 1012549118 s 281182138 1338070576 f 1525658314 s 366449838 1395269132 f 326451557 s 452294670 2083250403 f 510323098 s 631965194 718226859 d 1812564460 f 939796050 s 1207078696 80566792 s 1179083604 361748930 s 1077400581 977315389 s 811397939 1343765227 d 934317589 s 1442687778 1523590052 f 1930266160 s 1980667278 1433668803 f 1068646963 d 1776430066 d 1332922758 f 961533763 f 2079303358 s 230548908 1315696655 f 963019655 f 1398613763 d 1252540269 s 352803300 515798409 s 2066581524 2117471081 f 1429914420 s 1356178502 1087731074 d 2046457979 s 1706340603 781960630 s 1965869684 1012509538 f 1376514591 f 1384891015 d 2056851960 s 409431237 221440021 s 400532447 140537897 d 1441439926 s 775770789 1865513284 s 952797880 2142156548 f 733107653 s 664947049 1519399540 s 2088867647 793596235 s 2039446100 594898972 s 1959370187 299414155 f 5233958 s 1532762681 1109377839 d 1743845864 f 2141287011 f 1874610755 s 1569835199 93744196 s 360474843 758691245 s 163624025 700075244 f 1950674415 s 592180694 403924235 f 885639959 f 446364654 s 43937326 677232417 f 802840481 s 34323608 1416935733 d 206749021 d 780631389 s 1281167264 1363386153 d 1733388011 d 649171410 f 1454689588 s 497745610 204433268 s 1704462988 248370594 f 28927113 f 2014356088 d 880302635 f 1125236669 d 753780953 s 100790735 688145053 s 1529236860 1700056977 f 2105744556 s 1717359927 450725010 d 768931155 f 2115665734 f 193697880 d 1298844850 f 966180373 s 1454523328 1484168833 s 1218804324 1584959568 f 1056608080 d 928288214 d 856352200 s 1493337229 2027453942 s 1839909035 1540809047 s 1541225260 294041146 s 631609513 1851569620 s 68008086 610230810 f 639961074 f 172329495 d 1089050664 s 7374145 811157036 f 516817846 f 932944303 f 952797880 s 652901892 638313635 d 381537891 d 314460252 f 874638455 s 298595038 1738312060 d 1257419962 d 1684610381 f 886108552 d 441775787 f 823307725 s 117774216 318589324 f 1758416174 d 568523684 s 1240180310 1179820545 d 1114698144 s 1427948249 1974380422 d 1196547176 f 1160459167 d 2085896662 d 1841428414 d 861656219 d 1077901239 f 2024601536 f 1589932980 f 1596813160 f 6853088 d 378082151 f 1382876361 d 312736623 s 756300640 2117790650 s 702335937 1510535826 s 966960559 1958764604 d 31706083 s 1598648436 431955403 s 1767388965 268816058 d 2054274026 s 593630669 1913663491 s 1407144100 334859421 s 122633486 810812195 s 398245804 1567112835 s 130311656 121965125 s 1584088906 1088925684 f 966180373 f 1263621758 s 629272091 622240593 f 117774216 s 1802694259 335449044 s 740289811 1742593145 f 117774216 s 1993721759 115988787 s 940626983 246300443 d 1953503741 f 1413024337 d 1980667278 s 1363571482 49627493 f 1985605984 d 1816967550 d 435861424 s 1180058155 1041611430 f 312941485 s 19962003 1828476525 d 1569373772 s 1759834621 598367304 s 1504178789 823828540 s 103374585 39916374 d 1746311451 f 565142395 s 1881736845 217479896 s 775550151 1397538051 s 1534590089 140249888 s 262135165 160211892 f 828403761 s 40215553 1191740160 s 1477741710 548435301 s 188139620 651809886 s 1095648671 2124104508 s 1779628840 412170248 s 1895290738 146423445 s 35440528 921973596 f 2114734422 s 1434296159 571215203 s 1184899798 1954679536 s 2014564348 1994895089 s 1295112554 1325153151 d 1689889376 d 706512545 s 203522407 93602986 s 1094976565 1988893724 d 4112207 f 2098467792 f 1894944405 s 1574104013 1713248311 s 1665459790 1580329011 d 1398613763 d 609523551 s 820977143 1523745989 f 671996068 f 1319242808 s 581692444 731188286 d 961012465 f 1222903378 s 707753655 1487877856 f 2021499542 s 1221271308 1806926077 f 1391900752 s 1450832182 965539240 f 1611952622 s 2062720754 1809615135 s 1183134786 243823932 s 180399423 471078354 d 961737265 s 1186349214 1360728446 f 816423825 f 1081189303 s 1778739302 2054728227 d 2001907895 s 2102362972 1994309912 s 1532090726 1909547018 d 1340169228 d 1830175657 f 6853088 s 2055625834 583663209 s 1144591307 2102926239 d 1911437750 f 1935431277 s 892496676 976656771 d 1690367831 d 461608582 d 1068646963 s 1625086103 130012819 f 2136959076 s 368909765 197725927 d 546757933 s 593733021 434244364 d 230548908 s 1783014502 172930072 f 1483534316 d 1816967550 s 515298830 1110813289 s 828242764 588415744 f 2128422119 s 955156141 1627836049 f 1626506494 f 574871803 s 2070094984 589390685 d 626993292 d 1089799994 s 383998773 766861589 f 1728405927 s 874785057 2110403184 s 79068855 82220167 s 1720420041 1037376309 f 204412659 s 298440558 719236397 s 1766595622 641847734 d 1200100805 f 120316023 s 1993043835 1571747397 d 415226934 d 1103868810 f 1183134786 s 669350375 1751568135 d 31706083 d 856352200 d 297796410 d 1261655582 f 244330535 s 944196981 288646466 d 1974134154 s 1115740971 1677241837 d 186060079 s 430020973 1293889133 d 1596813160 d 1269190946 s 1590304299 1858765877 d 1242813336 s 1627047785 1964268668 s 1637745497 760982001 s 1072706959 76128944 f 621899500 s 196781130 1923640804 s 839747753 206178129 d 1337192080 s 202464318 242699481 d 664947049 s 1996522861 342135182 s 366761061 1969182968 s 1327569187 1459444817 s 429540132 384668128 s 577099515 2117114378 f 830375062 f 1122745906 s 4535232 2092958476 s 470958762 147939146 f 659229259 s 379097089 629646685 s 2034192899 996407746 s 1358590082 176493285 s 1443969266 606033417 s 1605477394 1183132932 s 811371789 1437550019 f 1796025948 s 1129136669 1998358668 s 1689191845 321833782 s 344462855 1964962417 s 832737645 196575859 f 383998773 d 932944303 d 609523551 s 480582314 196354556 f 1348151311 s 1283732816 801149687 d 593733021 f 628864535 s 1500476705 1816457409 d 278827066 s 417596927 17375375 f 1345672054 d 130311656 s 464765042 797574676 s 2126474053 1596526311 s 930765788 732775479 f 1254675740 s 230387502 1276087378 s 1201211476 629080436 d 477634103 d 1287541182 s 1895072887 730795316 s 110144497 716984280 f 188135606 f 1744865853 s 518360864 2091505516 f 568523684 f 299990407 f 640569199 d 587387785 f 179852647 d 1611155127 d 1077901239 s 1557995879 547268558 f 802840481 f 1627047785 s 1555147913 756017189 d 1429914420 f 947505744 s 1138110493 835938653 s 2043399522 944533396 f 2021499542 s 1524103629 2108983020 f 275238771 s 56353640 336276677 s 1074093035 155853606 s 2035854299 1711001519 f 172329495 s 618538220 351608463 d 509681074 s 1670113871 1385634830 s 1000158494 656505100 d 625462376 d 398245804 d 934317589 s 1678319116 1362925729 d 281398649 s 1835208129 1626847476 s 2044942540 97902048 f 1825434345 f 463411374 f 1681243989 d 1635704992 s 1634442346 1591567261 s 934363493 1774701957 s 570561318 1305537425 s 362612749 1610550629 f 275238771 f 1575792370 d 1532090726 s 1883014229 1052843476 s 89813399 645482460 d 1276972852 s 2144514315 1838973960 f 1267962751 s 691163818 1196415124 d 366449838 s 1356310207 1277209924 s 720153596 270196192 f 1184628655 s 1560090024 772609368 d 297796410 f 697678287 f 417596927 s 2107108804 1085993822 s 1987961704 1777157640 s 1026868381 1101504638 f 1956799398 d 295050531 f 1611952622 s 1440505707 624990202 s 1461297664 707379697 f 2011150800 s 850894465 1457293498 f 1599473994 f 850894465 f 299990407 d 592180694 s 1265400563 1142197940 f 2066581524 f 1281167264 s 1257812463 74107595 d 446364654 d 488388163 f 260996276 s 1855755816 624654965 f 1442687778 d 100790735 d 1450832182 f 1074093035 s 1460961505 1486600478 f 121310515 s 1971705814 1427917349 s 37103453 1647621433 s 1707278239 1068612649 s 499404383 776884817 s 548927238 402111931 s 735231537 1045798627 f 1384310243 d 1783014502 s 1895198639 221056066 s 821922164 1583699877 d 110611740 s 1025264080 1445025497 d 880302635 s 1116297019 1504224471 s 1871867281 2053151709 f 1894944405 s 1226903356 1228058919 s 1431334521 661860316 s 575306527 409575307 s 1205879011 1231497471 s 285897140 1054250755 d 1419808494 s 801905882 917412910 s 1878591794 2033709929 d 1443969266 s 1692877889 1406157711 d 1993923693 s 576698330 1916911941 s 1361582988 344734821 f 1454461214 s 662197019 1836510973 d 428090945 f 587700132 f 1265428248 s 879068611 453069200 s 146434781 2145947090 d 2000330232 f 1157065811 f 1106529896 s 902003259 708693060 s 46293745 1370890079 f 224555604 d 1283732816 s 1423392755 470498868 s 210120727 1349567479 f 1465410327 d 1529236860 d 1363571482 f 1450208095 s 1309248319 190490608 s 1115614635 236784354 f 1201211476 d 570561318 d 1857897720 f 2022702369 s 420686294 1097998852 f 1571753202 s 136942724 356463938 s 544810431 1262476125 d 2062374306 s 899061248 1539855432 s 1727681442 3380061 f 1887213756 s 1514447794 297439547 s 1354894022 133646906 d 28927113 f 1252540269 f 1985256759 s 1413703765 92231379 f 1477997924 s 1253160841 285140113 s 1504919037 2012821555 d 1157065811 s 1681217220 1376802489 d 429652531 s 1175986831 981636943 s 45415136 1917593343 s 571280151 647817576 f 40000277 s 1450930537 1152224693 f 215271803 f 210120727 s 1503740850 1853633849 d 227556613 s 473608741 496957503 f 73903491 s 562543194 1718359470 d 2022702369 s 1721671889 1595765079 s 19694442 899211968 f 1423767617 d 1200100805 s 2097551421 1666905064 d 144371132 s 1015705824 1906727003 f 2084701070 f 1518546560 f 1752268226 s 632967913 431539402 f 1589932980 d 1464685197 s 1815006071 270518038 s 1664537671 220585811 s 1220219472 15071365 s 15785046 1030777189 s 1455791771 1704432498 d 1746311451 s 810118767 445644801 f 632616859 f 366761061 s 493907568 2116460119 s 2144121259 1783982542 s 1810015515 1301036565 s 995331188 373772389 d 107810157 d 1690551138 f 272126342 f 1281886923 s 1886449974 122894184 s 1968382820 1738292795 d 1454461214 s 1189745904 81354327 s 148460336 1891369842 d 1340169228 s 669615838 205498857 f 1477997924 d 103374585 d 2084836175 s 279599914 1172527433 f 314460252 s 873372496 1347492467 s 1407059445 389754723 f 1442687778 s 900984047 2013459288 s 598495195 535591478 f 629272091 d 171003265 s 227073154 1288885277 s 765408246 1568485192 f 1815006071 s 1678675948 603036059 d 577099515 s 286056908 1439857144 s 448052570 193357543 s 1349265614 791852738 s 308493868 1477416517 f 1262981361 s 1818337489 27503944 s 1458089045 792912190 s 122884387 72066066 f 10276844 s 786820747 1618689454 f 537114006 f 1281886923 s 1620666619 1554580899 s 1808434285 1863074767 s 1279074418 1180254510 s 709449305 851108351 s 1428709469 161713748 s 1568971177 284598135 s 1438896448 65704469 s 1911857778 852525216 f 379097089 d 470945053 s 1696681874 181521206 f 458178218 s 105445025 1121546262 s 1996449297 1830995567 f 1460961505 f 1690551138 d 1265428248 s 1059190990 1736979496 s 769657987 1836926813 f 1337249948 s 2057916343 1114019040 d 1091333850 d 1758416174 d 892496676 f 558641723 d 672690002 f 1175243696 s 43239429 766339240 s 87393577 1535997228 s 1018879177 1773384927 s 511219363 1683817622 s 185080756 674392564 s 1848897641 608184520 s 339293493 517964352 s 660684912 1254840411 s 2094297719 833042797 s 1914135796 1684653295 s 1559095591 1727892724 f 2070094984 f 1273391237 s 206169663 1197901194 s 1808908326 1382981951 s 393053924 1084395944 s 359018778 1423689437 s 1555768538 2084374349 f 158606651 s 243069457 1797840569 d 1253160841 s 145708215 2003003746 s 942452618 1720453787 d 1842372251 d 1914015889 s 1957450176 1981102053 d 429652531 s 663560712 1748405722 s 1530438567 1056731847 f 89813399 s 172482223 37278696 f 1373645319 f 97142446 s 499783842 343054181 f 1820457035 s 180084960 1477098665 f 2088867647 f 881651259 f 812717112 s 2082854772 1510529488 s 1372308613 1683011711 d 393053924 s 78157769 2000793291 s 5554359 353093485 f 1201211476 f 769657987 s 2134878203 1977744309 s 1308234666 371142721 f 575670525 s 2061007235 602788051 s 1044335275 1975096664 d 946992430 f 1186445439 s 1745052487 1782540110 d 31971309 f 1186349214 s 2130226562 341217046 d 458715300 s 832420215 1731964915 f 1620028266 s 797666539 542340129 s 1071082508 607282142 s 1870008139 2023301451 f 367921121 d 1627047785 d 29403282 s 354216262 187177802 s 1372964463 72409868 s 615371738 904830083 f 707753655 f 1729245925 s 1378033459 685874117 s 1269603061 408398608 d 1243237309 f 1992666030 s 597561964 1328975620 s 1602143486 1683191882 s 800458406 908672698 s 1648225038 1524044436 f 1116297019 s 2010725690 939564918 f 193697880 s 1415709949 1439717790 s 223919129 82908908 s 652998598 29711841 d 40215553 d 1378033459 s 1765413106 882392051 s 254074326 383133441 s 1795049278 316122731 d 930765788 f 811371789 s 637323025 1930909648 s 1704487380 7345129 s 1407326460 660343727 f 1795049278 f 1704487380 s 609309281 157588553 f 805764752 s 822304189 59228509 d 1441494503 f 11919910 f 1720420041 f 990010693 s 1167216291 1645104657 s 304543580 623549801 s 69144676 649572896 s 2063163064 1258882177 f 966960559 f 285897140 s 1037365755 1480067823 s 497429844 487522432 s 472693631 1374933087 f 1894944405 s 2144901983 306782925 f 1257812463 s 188156611 680471181 s 492175338 596150597 f 818240070 d 7374145 s 612067797 1887305351 f 554774997 f 2021499542 s 76956330 941328597 s 2036353260 938746933 d 1996522861 d 262135165 s 1861628633 2042875862 s 1555684150 849174831 s 314922714 528743960 s 1109132160 1140811757 d 2014356088 s 1850241835 1105609980 d 1372964463 s 673339454 1071435923 d 649602004 s 2008379711 1548811471 s 440808801 1262956456 s 1616872137 671156959 d 575306527 d 1427948249 s 1717098862 1183653967 d 1186349214 f 1753487260 d 669615838 s 316317639 1065729795 f 299990407 f 991387042 f 1778431363 s 34230535 575548131 d 1532762681 f 516817846 s 767615476 1669128968 f 1298582462 s 1919617228 771335630 s 2010853535 1087653269 d 1396766597 s 2134333625 1237861768 s 1012210391 370361718 f 1782266659 f 626993292 d 1229321358 d 942452618 d 780631389 d 1664537671 d 1560090024 d 274760156 s 482567704 829585911 s 1488025904 1841796302 s 1182823605 255556769 d 1706340603 f 1666394338 d 1986373181 s 1650377752 1237992137 f 1115614635 f 671996068 s 1916144230 113226788 s 1565725272 595794492 d 1026651051 f 2062374306 s 1078402096 424846144 f 206749021 f 1811003743 s 92194995 358994054 d 1035289334 d 1966858227 d 1508107084 d 1123721920 f 1815006071 d 961737265 s 1869260019 2053521188 s 1834412498 221166456 s 435711059 1383343611 s 918850350 1475538606 s 492498129 1480537886 d 2006808675 s 1769483187 1964515647 s 8060168 1757036325 f 20030560 s 1908107158 1321463951 s 1797975733 1043240322 s 2112690451 730169172 s 1714348491 1165880232 f 2000505727 f 2079303358 s 1447656945 1926394410 s 1972982501 1548393949 f 206749021 d 2014564348 s 235592898 159509270 d 1012210391 s 1700563171 1922691806 s 1533491709 1489556650 s 602280211 1514179483 s 1146607318 208070713 s 1023988664 1655727658 s 907147841 1481226511 d 473608741 f 1266641923 f 1953503741 f 1146318924 s 23776337 607248653 s 493835765 2140740362 s 2129775426 595536925 s 1555478372 1742144244 d 1972982501 d 2014564348 s 80554228 2133136118 s 672277419 2050218987 d 1089799994 f 1483398195 f 83434387 s 213484606 143986022 s 290885342 126277800 s 1882465562 1681756173 s 1534632847 945198907 s 695044142 1990484062 s 1336681948 2071038290 s 1350591097 595832061 d 984493792 s 2098295017 776755727 s 861516480 254912599 d 2127039474 s 1743197075 759282547 s 1702460831 494264462 f 1226903356 f 1800134921 f 255073758 f 558641723 s 2103143921 1210522590 s 884906635 1161333959 s 1440526918 2022850440 f 1571753202 s 1996054019 1850550463 d 981295898 f 5233958 d 263969645 f 1830486041 d 1678675948 f 426932699 f 1035289334 s 1321437565 1425745766 s 1634749940 924559576 d 981430335 s 1809968000 1097734681 f 1071082508 s 1466927544 575580071 f 1259797878 s 1923872463 1180520877 s 1003936528 1014430970 f 1969775622 f 2128422119 s 1926247556 938688970 s 1213404703 1207664842 f 102560142 d 961533763 s 1509561065 1887334032 d 810118767 s 1549997846 1328811151 s 29001448 185264031 s 1903284559 1479787214 s 1615302871 2078747363 s 605583301 1857511271 s 520423307 923432326 s 1208393260 1127060992 f 212417943 f 587700132 f 1056608080 f 1668976193 s 481450005 588196867 d 40000277 d 133309160 d 79068855 s 671780220 937823609 f 76389738 d 1782266659 f 270989623 d 366761061 d 836517471 d 778315902 s 190568346 195604301 f 1987961704 s 1677771604 1169658490 f 1295343930 s 1292242504 2009465199 s 1614513285 396403503 s 1515741684 1717627406 f 881475080 d 1482562114 s 915089848 1942389399 d 1048636597 s 1404277859 954012215 s 558945932 484300171 s 131014307 433849238 s 640906291 1726091742 s 1149531498 1193121379 d 916861076 s 177854913 919384535 d 1666394338 s 906873586 43940510 d 537114006 d 934317589 s 2105280856 1921107442 d 1443969266 s 1302356559 545544392 s 1683595317 1695075890 s 313753930 2051096416 s 661539950 81467681 f 1978624715 f 1555768538 f 629272091 s 1860125860 607460680 s 1115360256 565257889 s 854894823 1348357241 f 80554228 d 2088867647 s 1725383810 353095752 s 1084392858 1014635702 s 1362786441 1294498022 f 1144868897 d 2017198276 d 1775016194 s 401513764 187141524 d 955870688 s 1395859285 2070314977 f 1839909035 s 786040287 281002021 s 1232281501 1365394879 f 83434387 f 507906058 s 1471189958 1571943802 d 1257419962 d 1139779641 s 1821370751 402625242 s 1718296761 1798484527 d 643680761 f 493835765 s 1203060997 1912734509 s 862806788 1525241258 f 1637745497 d 916861076 f 671996068 s 607965794 926985650 s 275474130 600872753 s 985018814 171685866 d 76956330 s 805389053 553122404 f 575306527 s 1108776425 471506542 d 1184899798 s 994715087 860086935 s 1037508753 1987685918 s 135046421 448168065 s 836325505 723642195 f 55215490 s 547651389 1178572190 f 1170512684 d 1706340603 s 1474278395 1219639320 s 1947057800 1596020896 s 1903274404 443252336 f 314460252 s 1379145597 1615807510 d 682285011 s 964044511 97395551 s 1228616211 645046940 s 1635843054 1842016255 f 966180373 s 1017757654 1548067603 s 2058313196 1347641755 s 1092458586 1103432511 s 986690912 1770067030 d 272126342 s 903728169 1872887658 s 1809973025 689448521 d 1457910602 s 1775906004 1406424139 d 2144901983 d 313753930 s 1222236180 636236347 d 336026037 f 2082854772 d 1556030748 d 1365781503 d 1475799863 d 1514447794 s 973413728 1613579205 f 1440526918 s 1248214787 1133735527 f 1359621004 f 1072706959 d 734175060 f 188156611 f 1026868381 s 1856105664 729444254 s 626256617 1296884664 f 1048636597 s 1261628481 1196734397 f 588992834 s 1296645925 1120559412 d 492175338 s 763270501 195291261 d 2056851960 s 88454817 800864713 f 1456389778 f 1602051464 d 609523551 d 839085907 f 837049023 f 902003259 d 1957450176 s 594256069 411354163 d 881475080 s 1169125586 281157786 f 1347601566 f 968042541 d 1842119091 s 180429074 1384444220 s 2052903797 1088037277 d 2129775426 s 1070892784 1780129935 s 785115642 226902356 s 694629762 644877852 d 1264857737 s 1807896619 1509725688 f 1812564460 s 1581777702 2113661251 s 1265580096 146606677 s 366259326 52026826 f 562543194 s 864195629 1050796371 s 1576225726 1835912013 s 552126338 383058127 f 1068646963 f 552530647 f 1186445439 s 736959445 1455561474 s 1605941425 573657922 f 492498129 s 758380159 740166443 f 1602051464 s 69063919 1033104151 d 1986373181 f 146434781 s 1194783380 476451696 d 1557995879 d 148460336 d 1911775354 d 1810015515 d 413616588 f 1821370751 s 79422883 2077097543 d 1602051464 s 1897751709 882063552 s 2084850500 2076846933 s 2092509399 1570095553 f 1813870522 s 1163472568 1097599976 s 926650988 1244640060 f 810118767 s 925525118 440403069 s 1825665654 519825952 f 955870688 f 884906635 d 663560712 s 222839198 2023286673 d 1233738092 d 616672770 d 1569835199 f 1203060997 f 2006546436 s 832676197 1878365137 s 1932627951 1342308183 s 1656083076 29759108 s 114118105 1394161970 s 649000068 1617001169 s 606493935 516971897 s 387286070 797212441 f 1209148278 s 1241226704 824385674 f 631609513 s 118133863 1319400211 f 1190239095 s 718238356 613143942 d 1755364355 f 725716895 s 626955651 1982756051 f 1599473994 s 1340470861 1488236655 f 1243237309 s 1336727166 2115200285 s 2024883808 85850501 d 1595770112 s 2057784606 26961962 s 1701406381 86492343 s 591706479 1565575670 s 1099007745 45047673 s 2123280909 1669630744 s 1797282865 862617957 f 1592422533 f 973770262 f 1189745904 s 114251286 926969936 s 1700175578 837270894 f 1427948249 s 383123151 982900107 s 390748254 2081907852 d 706512545 d 233059161 f 1270915348 s 1840983075 1826549017 d 102560142 d 1203060997 d 196979170 s 566565101 730640260 s 30498851 1113763411 f 1173530427 d 1648083303 d 839085907 s 2043108053 1742569893 s 771350869 1436069320 d 597561964 d 671780220 f 1668976193 s 1132170117 384839834 s 1252026871 415338685 s 207300084 1475346957 d 2010853535 f 1044335275 s 551823247 1941838984 f 1124852818 d 2102841444 f 1756351927 d 1832529369 s 55585925 1571255947 s 45376979 675799170 f 1332922758 s 1609513929 2127580405 s 1660770190 24496790 d 1590402186 s 1137919992 843739924 f 1124852818 f 298589115 d 957235695 d 1759834621 s 1954628162 1919384286 s 1112410232 920832083 d 1709950581 s 1693613310 2043632554 s 1540418294 1497950875 d 811397939 f 1966858227 f 949748397 s 327136128 883426306 s 827098695 1948127436 s 750833561 1755271951 s 1350367598 720198535 s 685517241 318254145 s 763642 2011867456 d 1185221381 s 1404053708 438897068 f 1634442346 f 1464685197 f 1440382673 f 1681217220 d 1765413106 s 80269636 1054070286 d 832676197 f 1457842807 d 1700761914 d 828242764 f 828403761 s 292810590 1635799456 f 1747042941 s 1274774618 2143632631 s 934371750 766929015 s 201757184 847198652 s 189341154 1157789976 s 495179269 2081565353 d 1581104261 f 2131013338 d 873372496 d 854894823 f 312941485 f 967300706 d 318007247 s 199501312 1978278965 s 1823295095 20136471 f 544810431 s 1700474292 1180716932 s 1442613830 1273658501 f 2028216559 s 1955550302 738712534 d 1598648436 f 131014307 s 1390152814 277819979 f 1277707057 f 566565101 s 438018242 1044841847 f 1163472568 f 2058989221 d 103374585 s 380790882 1223210758 s 1805168103 952962094 s 649437089 1514839677 f 1990654789 s 1798796903 1595382257 d 1609513929 s 111438308 1018709515 f 800458406 f 1190239095 d 493883306 d 1894944405 f 1778431363 f 756191814 s 1426028822 1259077874 s 1901555338 910391129 f 1996449297 s 1812900043 1966878807 f 1743197075 d 671780220 s 764060290 912263810 f 186060079 d 393053924 f 527921371 f 606161493 d 682285011 s 1885262099 1129608116 f 55185030 d 1746311451 s 155563853 733706031 s 646620983 1497766321 s 1372987455 2023620978 s 567970502 1386997112 s 36738229 540856817 s 428727725 1000039770 d 609309281 f 1753487260 d 1648083303 f 966180373 f 331182834 s 1932861269 93132205 f 1743018745 d 135046421 d 1192684571 s 2032632894 352072469 f 1897751709 f 818240070 d 1811003743 f 292982753 f 1037365755 s 2010062139 1257220559 f 1372987455 d 871486206 s 1115501008 629766953 s 809892200 514916199 f 1309248319 s 1425841647 726219840 d 725716895 s 2140160603 1825753674 s 1111558824 1000731257 s 1676951915 863309748 s 187993562 763771821 d 2055014764 s 28922692 1693755814 d 1192684571 s 2102703941 1860487530 f 1813890766 d 1743018745 s 1438672132 1443748587 s 805265281 407823763 f 79068855 f 685517241 d 30498851 d 587700132 f 1648083303 d 1362786441 f 707190533 s 59103357 1902436356 s 1021334243 1193624840 f 621899500 s 1155583676 1495107841 f 1555684150 s 485988388 2108892019 f 917695122 s 1282946700 1908838393 d 1642624976 f 1257812463 s 209913338 1297237607 s 1966872162 171088202 f 1080962721 s 186176155 841023385 d 767615476 s 960657214 692170071 f 963019655 s 613184299 2012706409 d 2117713636 s 946490071 506233389 d 358345617 s 2064183156 535535241 f 325145456 s 880517808 1594323673 s 1709496211 1031355738 f 1229321358 s 912891210 471768484 f 76389738 d 1559095591 s 1090678209 618487039 d 387286070 s 626593814 15563160 f 91970555 d 632616859 d 1348151311 f 756191814 f 1968382820 f 381537891 d 2006808675 d 2056851960 s 2103426562 738248025 s 1166766930 1364841840 s 765642540 1505358639 f 629272091 d 1451360800 s 1564264063 1999820692 s 746528611 417908216 d 1342699748 f 73903491 s 1550530240 1586064279 f 996308620 f 839085907 f 444613733 s 1115886266 952115035 s 1969754223 1031160208 f 1541225260 s 284783754 1194469234 s 2136809711 1595030877 f 1963519188 s 955798003 2137624927 d 28140621 f 1440526918 d 1361582988 f 695044142 s 2088713695 1331443652 s 518825276 1864839313 s 948757550 2139419 s 1796598040 2138949131 f 597270789 s 183613297 1164178303 f 1657490382 d 915089848 s 1838639099 181456713 s 1742131900 1918078886 s 450256088 1859308933 s 189540485 230650562 s 376765505 1179408112 f 1184177318 s 440217595 1829970670 s 1856553765 2013583968 d 432375051 f 519174654 s 314874491 1623694146 f 461608582 s 1645972047 1668598486 d 1930266160 d 2043399522 s 747625111 1845880588 d 1457910602 d 380790882 d 493883306 s 832243713 1760431279 f 28922692 d 758230573 d 706512545 s 1997782296 1902214620 f 2036353260 s 429096875 926390790 s 2136722550 1989071790 d 179852647 f 1569835199 d 1974134154 s 126480813 1876124398 s 1461902405 352675693 d 999860442 d 411579116 s 1433628430 134222199 s 1159099762 563319074 s 582968034 552557977 s 145450841 1931909577 d 981295898 f 1425841647 f 400532447 f 1662699743 s 2044846646 1996342583 s 1764822181 1644436862 f 1056608080 s 893000876 2089681406 d 243069457 s 1894314971 670616633 d 2129775426 f 1319242808 s 903502582 70618195 s 1978999276 2047636558 d 2045353675 s 1274306598 1562338089 s 1873153676 654383131 s 458739304 1547384007 s 1755127655 872764211 s 1456590335 619595534 d 879068611 s 700874452 1772229946 s 1146530226 528248880 d 1371983891 f 2076747909 f 1657490382 d 1276330527 s 984767778 930684806 f 7374145 s 427262759 1994919149 f 20679664 f 591706479 d 1098309250 s 1957396003 748278907 s 816618323 246795382 d 1371983891 f 1265580096 s 565892315 1287312556 s 839252122 1730744929 s 1985376141 10524041 d 1186584547 s 1289947609 907141903 s 601029471 1757984849 f 435861424 f 1363871179 f 2011984833 d 298589115 d 411094347 s 1289630547 807965736 f 696471478 s 1558696192 101986627 s 259377562 1391934236 s 450847830 1992963707 d 640569199 s 414254577 925295736 s 2090634610 1235815325 d 1239695342 f 736959445 s 1219941035 575482052 s 756199873 2075927671 f 562803006 s 941999450 1746517778 d 1089050664 s 1497334207 1182035534 d 2121627909 d 73903491 s 1265522831 1993215906 d 1835208129 s 1088866383 185133125 f 1434296159 s 995229601 1244315749 s 299585127 38831551 s 995874890 379505955 s 1537644713 1876840163 d 386762991 s 1970676991 397309595 s 664430851 1662832427 s 1321859224 708186579 s 1265139102 1797052962 f 224555604 d 1748407201 s 2017969510 589761096 s 1403866162 1585635987 d 674298687 s 1457458921 1193568212 d 626955651 d 55400004 s 286967863 855567982 f 1648083303 s 1306073052 1757124470 s 702041559 1840747810 f 532312064 f 1842372251 s 932579739 1807260960 s 1720558017 1117236234 s 17333083 493832118 d 592180694 d 1613794649 f 1469454945 s 848111481 1626000848 s 857730831 180558759 s 1157526150 1522884575 s 2047082566 1396842550 s 227307672 181938641 s 1530813479 1902496659 s 1880403849 1919829742 s 1099272127 631247486 d 1283732816 s 1607477828 1980504465 d 2128422119 d 1088866383 d 758380159 s 2007119754 448504551 s 1422759402 675812223 s 498176362 59142054 f 1717098862 f 989495058 d 1155489047 f 1146530226 s 975664522 1392024007 f 2136809711 s 16043780 1036008561 d 78415438 s 1532109851 170920421 f 874785057 s 268941470 1359926341 s 360951703 589757562 d 1199887481 s 1507049459 859351608 s 1762910313 1835016130 f 5111368 f 411579116 s 1758070724 1258548398 s 936369896 643174601 f 1185221381 f 819497510 s 409050447 1222345105 d 110144497 s 198050523 1666120338 s 1741061883 1281547004 s 381129954 1833966823 f 1197574894 d 148460336 s 289667360 1114232602 f 1534632847 s 1692839423 460964987 s 1941416539 870015434 s 632267570 1875715971 d 946490071 s 690965158 1667344729 s 1911264062 2048474683 d 1590304299 f 1180058155 f 15785046 f 976629108 s 1684443429 1279346903 f 669615838 s 1725621347 1705547365 f 733107653 f 1337249948 s 1195713435 1318491675 d 1611081710 s 23020291 600454714 d 1375700651 s 887560791 1401531725 f 2126474053 s 694275723 958609517 f 1166206311 d 128195590 f 746528611 f 1033847196 s 1198560072 958115316 f 304731390 s 1385277806 1953051671 s 1875990363 693128814 d 1091333850 d 1403866162 s 1444656780 1498487769 f 1567204602 d 1634749940 s 2100657011 1694182449 s 1383065558 745258874 s 913668703 569626605 f 10276844 s 514637547 1683411126 s 1386080256 1489137878 s 1048530823 503947923 s 1669590908 1948604703 s 679914561 1086204640 f 538390768 s 1022411141 881150847 d 1090678209 d 1953503741 s 653852096 2075128024 s 1310029280 442281924 s 511851631 1828362180 f 253377824 s 1222982139 251516616 f 1056488189 f 818240070 f 56353640 s 1395063432 1409825398 s 1502353174 1213068332 d 420686294 d 981295898 f 1720558017 s 2045790038 361072603 s 1911656780 1584054742 s 1578644577 266300936 d 1923872463 s 1865523287 222066704 s 132876759 1617130136 s 664446637 971999662 s 78934328 1003785535 d 746528611 s 1352964035 2056296088 s 818256559 1954602478 f 885639959 f 2117713636 f 961012465 s 373153863 1052329544 s 1533020783 1185206304 f 214758892 f 498176362 s 650252942 1349653666 s 886949138 555134053 s 517479378 1373390613 f 977265470 f 1384891015 d 899061248 s 1810207341 613055516 f 755259890 d 1442636485 s 333194426 1249361263 s 2031685476 1899614206 s 955117748 639079696 s 1934846109 1156559075 d 976629108 f 1018879177 d 1122745906 s 987822801 897352181 s 587550648 813135238 f 805389053 f 1157526150 d 496041554 d 756191814 d 279599914 s 875101635 1985710265 f 694275723 s 1553710990 1063516273 s 834454843 2051339074 f 360474843 s 620646231 1863890873 d 80554228 s 1267468445 1556307130 d 1319752646 d 873372496 s 1507886508 1358297397 f 1084392858 s 696370454 1129909882 d 2000345866 d 1091333850 d 1780252258 s 1250180137 1485158226 s 458720349 605143024 d 2036353260 s 1837979732 1584859206 d 565892315 s 1060154166 172199996 s 287188290 868570450 f 1092458586 s 772144510 533428337 f 597361352 f 207301726 s 1690906471 773820027 s 930460896 1110100991 s 1177011198 800597075 d 298440558 s 1847317074 169479410 s 1364075779 456667700 d 598495195 s 326810382 1806550897 d 1767388965 s 1362478161 829715537 s 727135565 373138360 f 1306073052 s 1092086540 333126807 s 924612645 92400421 s 1702400817 1939717496 s 504905337 1156309627 s 175980308 1019570345 d 133309160 s 2147111477 534392415 s 1390568947 1896870577 f 428727725 d 290885342 s 576497789 118061380 s 672089383 1042674025 f 1996054019 f 620646231 s 1229950065 1278476840 d 1986373181 d 946490071 s 2114035576 342279869 f 1103710348 s 987276546 425425587 s 840323645 1001923376 s 1026497551 1674012759 d 1252540269 d 1815006071 s 455514208 2032371514 s 554718708 1980308266 f 1298844850 f 265759667 s 1414678853 562195939 f 1468838606 f 1035289334 f 1690367831 d 158606651 f 1775463057 f 69063919 d 2097551421 s 1749908681 517847874 s 729897276 203162155 d 857035532 s 665840170 943439631 s 1704940187 1500900160 d 1468509334 f 2044942540 s 1989636627 2113532844 s 1615662266 611485624 f 2024601536 s 470313895 1935541665 s 119350974 517955293 s 40238935 570121033 s 523322835 1235961203 s 408395574 793417742 s 535780795 244414027 s 1931976051 1262962816 f 913668703 s 936990465 573294413 s 377203887 1699870185 s 482444895 22700432 d 1186445439 s 1931784816 182290341 d 1634442346 d 367921121 f 1026651051 s 1621203361 1434281949 d 1000541607 s 1384959668 1830874690 s 787606220 60594929 d 662508686 f 1963519188 s 1793999803 1432874770 f 940626983 s 1811305118 687258285 f 1624366102 s 600853852 2075400137 f 1969754223 s 1118374393 1759191250 s 355503327 399313823 d 874457143 d 662197019 s 1206469308 173939044 s 343026959 284869079 d 1830175657 f 1425841647 f 839252122 f 36738229 f 1104321155 f 444613733 s 542544002 1485627793 s 1468737801 1590346143 f 2008379711 d 116269053 f 906873586 s 453905848 171450270 d 1175986831 s 822683593 968976093 s 1345262292 805807074 s 1479548593 965197101 d 694629762 s 1174464774 828995256 s 863203719 577533164 d 601029471 s 873428777 726417945 d 1274306598 s 1024725211 1854660270 s 1639459076 529860215 d 1825434345 d 899061248 s 1657256581 1072852522 d 1839909035 d 358345617 f 463411374 d 1440505707 f 765642540 f 1524103629 f 1379145597 s 1679274750 727188159 f 955798003 f 987822801 s 1985128378 742134753 s 1379656416 1395483483 s 1351717617 843899515 s 1362524767 79741611 d 1386080256 f 618538220 s 1347056966 1567860223 d 1870008139 s 1088899981 1019004301 s 2030828370 143632603 s 1898125634 2128760981 f 2102703941 f 408158141 s 1119544887 1927692486 d 829700397 f 618538220 f 1590402186 d 1533491709 f 265759667 s 963559833 980783572 f 1659739999 f 1499621190 s 1614758802 1097139637 d 607965794 f 957235695 d 1532762681 s 818531840 277105099 f 588992834 s 2034254020 8575589 s 2063461426 972135422 d 1010646526 s 242935131 1412835821 s 1757986223 880110975 f 1753487260 d 616672770 d 1978624715 d 2141287011 d 1763586409 d 1930266160 s 2117577339 1846671430 s 1758944016 1935489218 s 2131736252 30940701 d 1620666619 s 577889981 1332164663 d 1729446909 f 2136722550 s 2013150411 1186740848 s 1968607146 638139884 s 560051009 1947650471 f 1174464774 f 1362786441 d 2010725690 s 959230853 172216784 d 874638455 s 1071239973 1168844305 s 1872394105 1356159432 s 874888761 1221826195 f 823365587 f 1379656416 s 960530033 763071163 s 509218118 1642780147 s 1993395422 1855832155 s 1361029778 667579360 s 370107411 1105616386 d 1730696613 s 1640938408 1901766817 f 1383534475 s 1119267406 1673911359 s 1016200389 637457441 s 713300196 1597987474 s 180660516 2107205592 f 627158205 s 1539763703 1166663497 s 2074518824 1536770908 f 1026185842 d 464765042 s 1033017931 1454566036 s 1769742453 426349794 f 713482757 s 489640644 8366731 s 340419430 189027248 f 428727725 f 2084850500 s 610405307 685567846 d 148460336 f 1529236860 s 758808869 153635147 s 1999256219 1923377600 s 618647633 1177826974 s 2022980135 1667467618 d 16043780 f 407765789 s 17599432 435300270 f 662508686 d 929319176 f 871920181 d 758230573 s 1011235372 1094361666 f 1116297019 f 287188290 d 555844509 d 1743018745 s 834943314 1733845476 s 909009095 1390816749 f 1832529369 d 1382876361 d 1267468445 s 1592356964 1883374125 s 1152118167 1351429478 s 1889706344 718854995 f 1414678853 s 117770390 1513427612 s 1930127700 200887278 s 2030301632 1109896374 s 1028697494 631055449 f 1228616211 s 181762994 322835477 d 1700474292 f 1842119091 f 2115665734 d 1468737801 d 935130086 d 1423392755 d 669615838 d 626593814 s 2102148570 1837114554 s 1949186604 2018877549 d 1748407201 f 2044014697 d 1175109098 f 977265470 s 1384713694 2051743709 s 1122543157 1978093521 f 827188883 s 2109873014 391844382 f 1980826540 f 1219941035 s 205438416 669092005 s 489997016 1645039014 s 1694382577 132515470 s 1413334148 1145343666 d 1533020783 f 1990654789 s 382243798 418893121 s 402506988 381282487 f 96196764 d 1769483187 s 1987791893 1917367446 f 2002896417 f 1308234666 s 1381682083 1220113891 s 1394675903 866760463 s 1311929784 1673818000 s 1059793538 2056061798 f 1378033459 d 1926247556 f 1454523328 d 1775906004 f 856373109 f 1805168103 s 381274915 30591747 f 1876558999 s 1117474311 589713786 d 464765042 f 1957396003 s 2087602370 1993127239 d 995874890 f 1440505707 s 618049750 1073162086 s 805311899 275484177 s 799353791 656759092 d 830375062 d 653165472 f 458739304 f 1968607146 f 871920181 s 194060796 915544539 d 1359621004 s 344664748 76779056 f 1015705824 s 1367841533 1681444746 d 1639459076 s 378895477 1346929196 d 537114006 s 1496668319 1381208897 d 1549997846 s 924707281 2029754158 d 616672770 f 2094297719 d 1362478161 s 1527072812 831862321 s 585711329 992597001 s 859196696 1371492478 s 1317519575 410778890 s 847690408 1907447209 f 1539031817 f 587700132 s 297775934 254425411 s 1026849211 958256256 d 2001907895 d 650252942 s 447581922 1901266490 d 56353640 d 35440528 f 984493792 d 523322835 d 1898125634 s 1708126146 776029950 d 1838639099 s 795051062 1488097057 s 1453000107 713774593 d 875101635 s 1130252545 83346199 s 689186095 974156489 s 658898534 144974762 s 388574535 1124493563 d 1458089045 d 822683593 d 1985605984 s 1219638008 1410255321 d 1504919037 s 1447671438 1511099607 d 1515279347 s 964321604 1183054599 s 1885893747 1841953134 s 1290688115 83044021 f 600853852 s 1332691326 870279344 d 1747042941 d 1977076608 s 2018829628 22708421 d 694629762 s 377103004 1296144787 d 1020721312 s 1037581782 1998876490 s 926132355 1142080958 s 1939176490 1140901847 s 110692287 326109525 s 1443773186 1621217591 f 1968382820 d 126480813 s 87492847 1949030124 d 1534590089 s 1014766849 1472655453 s 1834650877 362753587 s 201520744 1288885942 s 798918280 1080578785 d 429485460 d 213484606 s 837526099 1732135308 s 2102093477 2040283190 s 1241885627 2127776037 f 674298687 f 202464318 s 1482706677 2060163888 s 1205915412 114200984 s 2071205104 913119264 d 929319176 f 1882465562 s 1773281773 94649832 s 1818487396 49259661 s 2121693260 1291145288 f 393053924 f 725716895 f 179852647 f 1115740971 d 230387502 f 198050523 f 224555604 s 357538111 299460551 s 1814329747 2117947947 f 414254577 d 1619672880 f 1362478161 s 1505609665 356937042 s 36948996 299201657 d 618538220 s 388632539 749981847 f 679914561 f 1458089045 s 832993419 1407247840 s 130019956 276201469 s 718191781 475038665 d 1797282865 s 50133106 572631608 s 1887500069 609580604 d 1930266160 d 325145456 s 69881925 2112811955 s 916610848 1550554850 d 975664522 d 605583301 s 2093298134 1084276358 d 68008086 s 354257582 1289008701 s 34674168 1029025122 f 1943334948 d 1549997846 d 209913338 s 898561810 195014267 s 1958139405 110330942 d 1689305549 s 725540800 1088115877 d 1477741710 s 1933726586 325667849 f 323569722 s 1816294488 374634428 s 280696833 1870224513 f 326451557 s 831202039 53204984 s 492189998 2011344389 s 389242577 2141341934 s 652379734 719399086 f 1442613830 s 291115063 154281099 d 895726457 s 480801216 319570350 f 834454843 s 1678929768 1173552466 d 215271803 d 696471478 d 1839909035 f 1023988664 d 1397678291 s 1265274425 1534507831 d 265759667 f 664430851 d 518825276 s 1339168100 1820063667 f 2034192899 f 1616872137 d 323569722 s 338146307 1701479690 s 1821657100 2051594752 s 1525722406 1169385529 s 1384068811 1528003518 s 1893174726 1340307087 s 574367343 980930665 s 2003310792 172615117 f 1354894022 d 1482562114 s 1284866517 742786691 f 1473085332 f 1080962721 d 1650377752 d 918709151 d 810118767 s 853951784 1837472443 d 1479548593 s 1353208856 2004138998 s 1198623807 479777886 s 1640936085 1764644403 d 2001907895 s 227333185 1336868256 f 1615662266 s 1492817714 160031390 f 2034192899 f 1508107084 s 505776306 715536995 d 1071082508 d 980594736 d 1537644713 s 1573374510 696733238 s 1432690380 924066424 s 2047112701 1199449109 s 647396583 544783175 s 765094487 488072140 s 2145897490 222139443 d 1596813160 s 1685813377 30532527 d 2087602370 f 1465341293 f 1190239095 s 112544635 2001049922 s 27122010 1900678975 d 1809973025 s 238743909 1165686397 s 1166349101 1164100239 d 111138056 s 486106202 1771635608 f 2022980135 s 1483810715 600378565 s 2082202600 2135214082 s 1229844076 100275070 s 1301551976 127397080 f 1800134921 s 93681873 419058253 f 2105280856 d 1364075779 s 1735462536 1466230888 f 909498825 d 960657214 d 511219363 f 40238935 f 2036353260 f 162653213 s 791151561 991370153 d 1689305549 s 249723991 1870459371 s 1720624382 1458438259 s 668193085 36049895 d 1386080256 s 582682257 1082489451 f 387286070 s 1173285934 1900855078 s 572380564 1489231469 s 151789538 132899382 f 1023988664 d 786173394 s 3163320 967893588 s 1885909828 1636086673 f 1056488189 s 997792519 1470275495 d 1384959668 s 1759002483 250182518 s 50042241 822563082 f 366761061 d 1752268226 d 1184899798 d 1507049459 d 1842372251 s 784986683 744040143 s 1522384421 1741832663 f 28927113 f 864346164 f 1733388011 s 1962024164 287622389 s 1829624637 1853974508 s 694770324 547038224 s 954668866 384756556 s 34977347 678084117 s 751372502 1463070800 s 207877246 837971574 f 1468509334 s 1138334308 1719645692 f 2000505727 f 1281167264 s 224423822 1296166622 s 1252324604 1990936946 s 843998825 798122164 f 1932861269 s 1909034664 1584472014 s 1264532372 1792349260 s 214379095 779523097 f 145450841 d 1815006071 s 2124780563 1483699832 d 97896931 d 415226934 s 1512132289 1656963435 s 527872758 659573239 s 221697344 421124255 s 1378592730 1685656627 s 1225976043 1900035722 d 1581104261 s 263456490 44049754 d 1017757654 d 626993292 f 272126342 f 1505609665 d 1641870283 s 628956574 1371465533 f 1149531498 s 1536211511 1828550658 s 444311235 639702255 f 254030405 d 2112690451 f 2000330232 s 1173947046 1572708023 s 724808734 646351516 f 2046457979 s 1652548571 710058369 d 212417943 d 1175109098 d 1993721759 s 640396457 926033420 f 946490071 d 594256069 s 546319962 1352372390 f 325145456 s 37364542 1862331333 s 1243602737 1367396256 d 1755127655 f 944534279 f 1619672880 f 1971705814 f 399364339 s 820991946 378079997 s 968234454 924399959 s 540701338 905294496 d 1001265336 s 1059439932 38778128 d 370107411 f 966960559 s 798797712 1397246729 s 498721112 1876322610 s 1124677931 317153901 f 552126338 s 187251311 2106380302 s 86381240 499597992 s 2062692293 1259117730 f 7374145 d 1441494503 s 147042930 847648232 s 262946766 1646445944 d 133544359 f 1159099762 d 1666394338 s 1305212663 802622777 s 1712356081 889004017 s 877310347 804212662 s 984923653 263096397 d 1138334308 d 2058989221 d 755224049 s 1911590325 517787628 s 725952259 1088109723 s 2004951742 763095280 s 127129776 2068307943 f 1778739302 s 1083844441 363007075 s 923634852 1347930728 f 1678284082 d 1875990363 d 1240180310 d 903728169 s 741061476 195744978 f 1605477394 f 1177457394 s 1043561934 536030962 s 626121462 1619875403 s 1012893652 396026607 s 1662762239 1330525884 f 175980308 d 1160459167 d 785115642 s 1001177480 1097780965 f 6853088 f 849686411 s 1551665815 360488419 s 2138267828 986609881 s 940393268 1999503533 d 856352200 s 1572267772 165497136 f 1265400563 s 295795156 404044470 d 967300706 s 7822647 675901492 f 1569835199 s 202364111 530844190 s 1999579054 521628370 d 733192277 f 2000345866 s 1488527303 1977255199 s 411133998 910959994 s 1545049578 1206755150 f 1616872137 d 626993292 f 1724958505 s 1904215713 1485800276 f 721900472 f 1329364259 s 1427708368 951965900 d 756199873 s 470563996 704143554 s 953967002 101709484 s 1841414479 989910484 s 1986600259 171560222 s 660203882 1056029705 f 1842119091 s 791579366 1949728486 s 1644317573 1158572437 f 827188883 d 562543194 s 638408924 1775748767 s 1951404094 582232121 d 987822801 f 1888947297 f 1264857737 s 1379333639 1235952975 s 607591581 2027532341 s 1173745205 1524366267 d 388796643 s 1734762983 1424850139 d 1835208129 s 242942030 1867179510 s 1024554639 2043366628 d 918709151 f 1530438567 f 1203060997 d 374880419 s 131882950 986381964 d 1029802610 s 1526129646 478190620 d 2115495547 s 1302840864 284171557 s 1587561154 1308726196 f 1125236669 s 677123556 254030384 d 821922164 f 1842372251 s 941566017 346983428 f 1948542671 s 1724136195 335237147 s 1987025970 1935589843 d 313753930 s 2064052213 531024566 s 1858296246 531985315 d 1011235372 s 535068870 1190395034 s 138839777 1711796777 s 1702731092 505879146 s 2105520723 1244492057 f 1758944016 s 876145879 660686926 d 493907568 s 491592266 595463004 s 1750127435 306275602 s 671015588 442618742 s 1993417774 977687612 s 570706172 1116527390 d 1724136195 f 1769483187 d 756199873 d 707639645 s 1396421849 1151995426 f 1939176490 d 1175986831 d 1407144100 d 1048636597 s 243972574 186403719 s 286086049 1696982415 s 834078670 199449768 f 2036353260 f 906124011 s 2072057899 1371417477 s 1730301252 1930609533 f 1022411141 s 396505920 514879629 s 1399106621 281051857 f 1378592730 s 33759695 811110480 f 876145879 s 1758301736 2124268852 s 1595803139 922010541 d 461638495 s 1495741986 429402396 f 1502353174 s 638632180 662432277 d 1340169228 s 182978239 1145966538 f 2044846646 f 1360294964 s 928185757 297927259 s 1388924037 1893730399 d 28927113 f 1000541607 d 16043780 s 406025645 73241639 d 1332922758 f 834943314 d 28140621 d 1822839377 s 2046679008 1002093884 d 2094297719 s 844649133 2068192220 d 1160459167 f 279599914 s 1941622009 590695563 d 227333185 s 1689382273 1665156606 f 1103868810 s 527889802 1930185417 d 153346269 s 70785517 666555929 s 811185580 1511205062 s 1193865419 914945672 s 567083374 1454663803 s 1522394436 1248802164 f 2103143921 s 2108214266 501691657 f 1568592092 s 1602197581 1548354380 f 1850241835 s 907187465 695772104 f 755224049 f 2017969510 f 370107411 s 957388951 495333618 s 1308089772 898797108 s 501814119 859527726 d 1530813479 s 1064277022 691415721 s 550560741 1445061302 f 574697170 d 111138056 f 575670525 s 1012824068 33493493 s 433408086 990882444 d 1594996321 d 577889981 f 1850241835 s 1571728859 930791134 d 837049023 f 243069457 s 436674444 753571830 s 1521629705 1652992035 s 1012440773 518332455 d 625462376 f 840323645 s 440639518 491540995 s 1158048221 1059418052 s 964675063 483663264 s 1462717627 312631010 d 470958762 f 1894944405 f 1061892931 s 966177489 1994569151 d 354266859 s 567611028 2053518716 d 1653141795 s 2116206837 1504722807 f 242935131 d 1037365755 f 37364542 s 56329007 6725579 d 1647120332 f 924707281 s 1626849514 791267893 s 419509793 1358878921 s 1266704880 1300394685 f 861516480 s 708627802 1131562600 f 1533491709 d 37364542 s 413231656 572703648 f 2001642040 s 457935360 84557680 d 448052570 s 502214976 2130916987 f 711863327 s 28515844 1708095535 d 1413703765 d 1018879177 f 185080756 s 486432157 320391916 f 1758301736 s 1423813223 722846595 s 1652266384 1541283499 s 524503790 2043498476 s 755620117 2135526593 s 139647482 16558789 f 1207078696 s 430016912 424169007 s 1885761099 762325807 s 1710396279 1248757964 s 2107735108 1890191059 d 1904215713 s 2026677196 671303371 f 389242577 f 1590402186 s 866960563 2091074761 d 1569373772 d 1427708368 s 975986342 904678197 d 448052570 s 1498327098 427842289 f 79422883 s 1446245187 1258221326 s 1175427380 1776830129 s 800624402 770803878 d 392294552 d 1404277859 f 1744782885 s 552516329 327773109 f 1347016382 s 2111464473 1829319145 s 1110541290 792698342 s 1276138743 91459881 s 2113039567 1266887262 s 1998263905 2067511664 s 1687431874 333892384 s 1320190957 377555508 f 871920181 f 1808434285 s 1370132104 649946656 s 2130461147 613927481 f 68008086 s 1590864293 853123866 f 1532090726 f 1384310243 d 314874491 s 1780088498 1529599226 s 844329201 1071449453 s 1407840320 1359696 f 832420215 f 1978999276 s 130545302 378134483 d 179852647 s 1468141768 942832561 f 2057702584 s 1056033359 1435670173 f 2107018180 f 662197019 f 632616859 d 172482223 s 635848361 551035327 s 623542515 681580629 f 1842372251 f 990010693 d 1508107084 s 1600967190 966475610 f 1630884972 s 918817955 498428929 s 1340250580 889206952 f 1149531498 d 35440528 s 263629502 1263195870 s 1643033760 1451417663 s 696469497 2057442600 s 692737796 1752466818 d 316317639 s 273876505 627301496 f 1767388965 s 1044872362 738886383 f 1963667044 s 956545091 1764289013 s 1051975857 2027918515 s 1828987253 1523468627 f 1112376132 f 390748254 s 224074637 530664338 f 2054274026 d 507906058 f 1624366102 s 1272547920 817151530 d 721833452 s 1573371454 678188831 s 1159322121 359692436 d 315727580 s 996534084 672717907 s 1548844536 896792544 s 1159621701 670875711 d 1670113871 s 1034414827 329870917 d 1822839377 s 2140062161 558068199 d 955798003 s 566717082 1143278126 f 314460252 d 1330301014 s 286633402 1590379901 d 91100095 s 886856169 2000218316 s 1023109316 887149496 f 1822839377 s 922770897 142260037 f 1611081710 f 695044142 d 697678287 s 499892923 1064111217 d 1000541607 s 703991609 461477159 s 851571111 1348333328 d 2063461426 f 1212273859 d 1969611935 s 1730820121 471001014 s 1089333028 2041199802 d 1932627951 s 1137916376 838825014 d 382243798 s 1904951636 622620793 f 1662762239 s 1025170078 1357445612 s 1398796129 602252834 s 1922103704 811032406 s 440187668 394368879 s 1587445682 1483701908 s 1635627532 927342322 d 2004951742 d 1298582462 d 903502582 s 172338142 1940180618 s 1368615282 817867048 d 1678284082 f 1769742453 f 934656313 s 422817439 1871432936 s 412221022 1359576820 s 740556695 2114298816 d 499404383 f 1193909273 s 406950621 1401475319 s 1442069541 622606953 s 1687150426 1263974723 f 977265470 s 2045366622 146064683 s 1950617979 568882123 s 1192087595 981103145 s 1360899534 1721659840 s 1447486523 1481893574 d 1869260019 s 1162702161 587384152 f 648835078 s 1682665882 1569120472 f 1190239095 s 855171646 1854003944 d 1465341293 s 163400790 701742222 d 1956799398 d 11919910 f 2034254020 s 162682365 408472115 s 245551616 348480788 s 951027820 2031146670 s 772995100 1230681994 d 957388951 f 340419430 s 556712446 749082356 f 918817955 f 1340470861 d 1704940187 f 406950621 s 194690427 1264252332 s 1090016177 67796504 f 944534279 f 111138056 d 1611952622 f 45415136 d 2092509399 f 444311235 d 1914015889 f 1319242808 f 1112376132 d 843998825 f 694275723 s 2100322224 281748889 s 182112575 1646447728 s 997068140 205437737 s 413622413 955428435 s 1618325868 1664094282 s 50275591 1546596263 f 2115665734 d 2105744556 f 819497510 s 707067552 1537505021 s 1039093134 1490343597 s 478323725 1672456172 s 1373106659 522040664 d 1764637395 s 355713008 406505297 s 994509568 456780888 d 46293745 s 671822493 1587420655 s 1233847656 655770582 s 1285547958 1362838135 f 262540809 s 1316521585 732771346 s 2045588747 2105878006 s 832609998 2091065094 d 244330535 s 1981603652 1293804022 s 639776588 1950743962 s 1294137502 475082808 d 665172915 s 583694630 846994775 f 2064052213 s 2019208553 102451215 f 103374585 f 694375834 d 1493337229 d 91970555 d 244330535 s 1195188570 1028776442 s 517815870 2103649106 s 496213752 539860088 f 2062374306 f 55400004 s 1466621096 1827490975 s 1605986791 2049575464 s 1688933932 1496039506 s 2071175527 573388398 f 2140062161 f 1987431015 s 738464873 1451407469 s 106816781 1947621221 f 509681074 s 1470923426 775753454 f 180429074 s 1826418445 1700877694 d 1488527303 d 172482223 s 1402599605 618273707 f 816423825 s 634247287 140814713 s 1794366631 247631494 d 898561810 s 921756259 2040718386 s 390773064 467885693 s 1687280844 146820490 s 738396793 1910689090 f 1641870283 f 1876917557 s 1117559338 1558159551 s 762614172 44923190 d 1701406381 d 1440382673 d 214379095 d 1286558117 s 1267217584 1890995110 s 2077959559 481908255 d 1677771604 s 907668379 2026072959 s 450064601 996148649 s 1542294311 1758762822 s 627855086 1470355650 s 2108531003 2078548356 d 718191781 s 1807740199 935830642 s 2071847859 55564579 s 335292362 2133524138 f 832737645 s 1408826093 729771085 f 2118900745 f 1308860271 d 805265281 d 1112410232 s 1860009771 1027583375 s 591323824 687839926 d 880517808 s 352375570 947496500 s 1660307253 1456922455 s 440732145 718264900 f 1546913624 d 1427708368 s 168834877 2057938979 d 1035989797 d 903502582 s 1019834665 1008458551 d 440732145 d 1347056966 d 577889981 s 361909908 840742014 s 1337559135 2087972011 d 550560741 s 1928208014 1011716090 f 1294137502 d 671015588 s 2048401525 215710954 d 2092509399 s 1251429705 1309972316 d 1461902405 d 156221823 d 1576225726 s 601149251 176066229 d 20030560 f 1605941425 s 562532000 1742267968 d 1308860271 f 383123151 f 1155583676 d 1265139102 d 1664537671 f 1993395422 s 92319432 559964674 f 961737265 s 964077525 1108581991 s 601937789 1671113992 s 1583157990 930315500 s 632605497 2042128716 d 2006546436 s 1129421151 1577790370 s 237593746 1288834940 f 344462855 f 2084836175 d 1970676991 d 1756351927 d 1992666030 d 1222982139 d 2043108053 d 2030301632 d 900984047 d 1321437565 f 832420215 s 1990861559 113771973 s 1546386532 876703361 d 1444807062 f 1186349214 s 577993744 42518359 f 1687431874 f 915937729 d 762614172 s 1959580067 1062987512 d 1742131900 d 1512896778 s 386763578 1153085919 f 1615302871 s 70367862 497770212 d 1290919890 s 1601565863 1597395282 s 1672865574 1957309257 s 644452933 1254419269 s 1793232739 1066515688 d 1747042941 f 1397678291 s 367282925 1266757961 d 1252324604 d 903502582 f 263456490 s 1374567436 611666231 s 838895884 137048157 f 292810590 s 512314595 427250182 s 1037968852 1489081625 s 1326944585 1073010998 s 1222619705 1440293924 f 419509793 s 105756686 64179909 f 1950674415 s 2140780245 403044956 f 466437350 d 188156611 s 1735799612 656419639 s 576898274 1694388492 d 1955550302 s 208989593 2096469135 s 1731790404 72882584 s 916055262 178639270 f 827098695 s 200800108 757322355 s 1033630769 1755924344 d 1363871179 d 520058013 f 902003259 d 1987431015 s 1457052136 1749324261 d 375506026 f 1932627951 d 1797975733 d 1186445439 s 1935537151 1316269187 s 1584412540 1172295128 d 587550648 f 1488025904 d 1012854867 d 1985376141 d 1630884972 f 230548908 f 1274774618 d 854894823 d 1438896448 d 470958762 d 671996068 f 1530763226 d 932579739 f 2030301632 d 1829624637 s 1006161399 2039939891 s 1214737501 1072565196 d 130545302 s 2078204742 1104233200 s 1820043111 321555303 s 586692960 1014017941 f 1702400817 s 1655196944 705803464 s 164449147 685365295 s 1265336181 1585153226 s 1858508581 443830977 d 741061476 s 924521535 1016236743 s 2008226757 946957837 f 243972574 s 1016792103 1206210260 d 87393577 f 295050531 f 1811003743 s 1906305883 2129269024 s 1358097601 1840293958 s 702345562 1743626654 s 1119158720 520664541 f 2084850500 s 494323186 1176425867 s 2129319146 45734322 s 483365751 1949192065 s 882039474 788549302 s 1986516661 878588797 f 1818487396 s 708903908 1995508633 s 232763298 550370547 s 1415191166 1669529268 d 1590304299 d 2124780563 s 1934683383 1326570481 s 463582447 1809936232 f 1166766930 f 2124780563 s 1888491075 2012400566 s 1006878807 573820826 f 1309248319 f 515511032 d 2070094984 s 757804021 1857691055 f 1012440773 s 1775216555 2108473238 s 2108498401 145241501 s 1082845900 749646573 f 286967863 f 685517241 s 1764501839 1315609656 s 505761052 1688511201 f 1759002483 s 30266163 1747222356 s 488717776 843381835 s 126256222 471114742 s 1573730900 432129495 s 1418213988 1514975396 f 1922103704 d 1496977141 s 258409480 1346421661 s 1731739509 1852182713 d 249723991 s 2072679329 651514761 s 576204885 1140232537 f 1286558117 d 1222619705 d 1276138743 f 1904263894 s 1440432980 1201352075 s 137946502 1459761555 s 151069680 1044017416 f 1146607318 s 248789477 2101090630 f 1730820121 d 1379943699 s 689107563 2088460266 s 431557762 1029651224 f 1080962721 s 1102199249 268085525 d 1796598040 s 438892340 557101707 f 523322835 s 1152653821 511111595 s 324189975 903208846 d 180399423 d 263629502 s 190242282 1255177384 s 277218448 796677094 s 1973883112 1898876343 f 1051975857 f 280696833 s 1746571968 772768781 d 1969611935 s 1823174734 102128929 f 172329495 f 1837979732 f 769657987 s 87810863 1272280794 s 611699267 1098680258 f 1456389778 d 2123280909 s 61819522 1914444687 f 1006878807 s 312823388 176980162 f 1980826540 d 118133863 d 981430335 d 1555768538 s 165193348 434888969 s 2063355131 1838562166 s 1662760926 145274024 f 1745052487 s 62097648 138859204 s 499831178 451682592 d 566717082 f 1522394436 s 105446516 1732973423 s 1035795333 1898881331 f 227556613 s 97283872 1979946163 s 779239260 1495223441 s 1629067367 897526514 f 1198623807 d 268941470 f 29001448 s 982930376 521825376 d 1611155127 d 1192684571 s 1870035609 606524875 s 1678717854 703808747 d 1856105664 s 823513403 964631726 d 798797712 s 666629273 131972032 d 1229844076 d 834943314 f 1329364259 s 1118530366 478358383 s 1569050725 200910344 f 455512995 d 1198560072 s 1683049718 1734136570 f 1980826540 f 909498825 f 964077525 s 1021924482 1343998125 f 1221271308 s 534082633 734452535 f 955156141 f 5897344 s 1206836932 2080434099 d 786173394 f 114118105 d 1345672054 s 841048713 787616545 f 180429074 s 1651131582 126424991 s 1851495006 660507624 f 514637547 f 2102703941 s 1874142019 150446851 d 995229601 f 601029471 s 1581974832 525102321 s 1734762564 1366151035 s 1778289981 799035242 f 429652531 s 2021779585 6694535 f 20030560 d 861516480 s 1049766681 1378451389 d 532312064 s 1913936329 690653364 f 1931784816 d 1067875623 s 2141195650 1490713445 s 1966187105 361561672 d 2035854299 f 2082202600 s 1773856904 1059202537 s 2109279752 2108969218 f 660203882 s 374532219 401789672 s 228773529 857250067 s 608117160 688027993 s 206128178 681739995 d 1627047785 d 27122010 s 2009327849 652607332 f 155563853 s 1557856919 240776692 s 1388985704 688442495 s 1700140470 1062974714 s 554464952 1291748243 s 1681417630 1899865403 d 747625111 f 182112575 s 1100083674 1864588248 d 1450208095 f 137946502 f 784405532 f 1947057800 s 1095955152 888660473 s 1486881638 1443125425 s 587574544 977059407 d 267742557 f 1996522861 f 1272547920 d 646620983 s 658236133 804731478 s 683808110 410266343 f 729897276 s 1904947943 465556185 f 1743018745 s 789776999 392528720 f 224074637 s 429627744 1615580503 s 1864234279 1285757542 s 868461766 49918638 s 1599121702 708154771 s 718942666 1391962881 s 1933265225 194636012 f 28515844 s 1480127174 1727330480 d 1111760120 f 1614758802 f 1730696613 s 629491059 72707788 s 2014268727 941169554 s 1843073613 392807608 d 1336681948 s 1372929038 897531851 s 1786332779 1086155990 f 1639459076 s 1201723158 338587854 s 130682332 1822580411 f 957388951 s 1141829510 408186833 s 1593467244 274971912 s 2095023617 2118045525 s 1157251112 299688207 s 1611441489 1672617245 f 1196547176 f 1095648671 f 1462717627 f 607965794 s 1921608586 842662945 s 606808868 1984492455 d 1704940187 d 637323025 s 1303163442 387783485 s 359315300 1999224974 f 1474278395 s 1352838708 678236481 f 992056371 d 1500476705 d 1464685197 d 1834412498 s 401320277 615769843 s 188014980 1827048053 d 1939176490 d 2114035576 d 1442613830 d 497429844 s 1053176043 1524391491 s 364543887 1838129187 d 1704940187 s 1858337071 218820905 d 364543887 s 1004319572 808156162 d 299585127 s 429626357 755644071 d 1316521585 d 1198560072 d 50042241 s 138059119 88014583 d 1729446909 s 27629275 488977013 d 1209148278 f 597270789 d 593733021 s 1846184523 1014610813 d 1455791771 s 1039938926 1113248467 f 492498129 d 190568346 f 413622413 d 922770897 s 773268487 749538003 s 1293802871 133889828 s 475009768 257794078 s 409644388 2103978601 f 1904263894 s 2130140575 1611974526 s 1830652724 1789225299 s 1254635570 480695763 f 850894465 s 1056754018 397390391 d 1876917557 s 1672533744 316978101 s 1571118672 791987870 s 2054688056 1201632258 s 1405384605 154071690 s 1958604786 136728617 s 1477589786 1967381342 d 1476891439 f 1690367831 s 1243382365 750436633 d 1436406421 d 591706479 d 1192087595 f 1456590335 f 823365587 f 918817955 f 1483637403 d 2031685476 f 1605941425 s 279350563 1992518767 d 1320190957 s 1286926452 1448438260 s 545538289 544403218 d 1848897641 s 1848369961 483594224 s 1107189969 1855350825 d 538390768 f 607591581 s 8164496 326267614 d 1828987253 s 725925525 803427246 s 1898829391 2090353698 s 888104742 488408339 s 1412353897 1084546335 s 1231297617 785432649 s 1750320507 1892622618 s 633060058 247877564 s 1504589704 2113546125 d 947505744 s 2080140521 2113537315 s 1513777426 691979192 s 775704068 443324935 d 458178218 s 593353442 596299926 s 1369583902 1827597543 f 146434781 f 587700132 f 1759002483 s 565497139 1764655605 f 805389053 s 507516049 1063606257 s 1584761839 1839310325 d 470364384 f 390748254 f 430016912 d 1479548593 s 323715789 777407436 d 964675063 d 2107735108 s 1754692221 652682819 f 980594736 s 412462453 597477060 d 1679274750 s 1980291425 873305657 s 1878737029 1137327090 s 1457296528 484884392 d 1379333639 f 1612927486 s 1441933082 799235093 f 1690906471 s 622348998 1144031407 f 2144121259 d 551823247 f 40215553 f 128171373 f 581692444 s 108771458 1279836781 f 1681243989 f 1557995879 s 2002057260 927840690 f 818531840 s 464161778 453783670 f 147042930 s 188806728 1948016849 s 378128583 1045349840 s 1704777529 2058248571 f 1883014229 d 1569050725 s 375511687 1857891610 d 171003265 s 1595978383 217991659 f 734175060 d 1755127655 d 1056488189 f 763270501 f 1806769422 d 677123556 s 442664835 594510175 f 371909701 f 1797975733 f 1482562114 d 616080936 s 1058782001 1084531951 d 355894624 s 681447285 656799217 s 1438396369 1027769216 s 2106110376 1868410066 s 645877116 163591254 f 1887213756 s 1733961860 654100838 s 1698189788 1300400343 s 1880409375 1926049261 f 2044942540 s 869132096 1807195657 s 737232490 341159294 f 1209148278 f 199501312 s 228616329 236575860 s 1097828777 1571291367 f 1365781503 s 1160133341 708475720 f 1483637403 d 1103868810 f 507906058 s 51236307 497581137 f 1888491075 s 1770419410 1031223711 s 717338340 1259840041 s 1975332172 210185170 d 502214976 d 76956330 f 909498825 s 801853250 2138290446 d 1626506494 s 697336562 404371687 f 242935131 s 566922488 424250700 d 40238935 s 1634037424 969437565 s 635948717 492240979 f 1386759345 s 1663786184 1885415335 s 825860577 539784937 s 1026635168 1459523839 s 987758406 9376754 f 377103004 f 1880981150 f 1910287825 s 786857743 787396737 s 529153400 1423345455 f 1569050725 f 122884387 s 155595027 413654511 d 381129954 d 136942724 f 89813399 s 1750364792 414536734 s 1854151089 1669283991 d 1555478372 d 955870688 s 1578942271 2109025152 s 355128980 1987229738 s 1016731024 2142824765 s 70634358 419133385 f 577993744 d 386763578 s 307656008 990484964 s 900839318 697152406 s 647381942 1649195186 f 265720554 s 991122471 2100025845 s 872415037 307671178 s 341501537 1324402202 s 224242549 1395036560 f 663544617 d 2064183156 d 390748254 s 1636715208 2146975228 s 608707338 646873522 s 2036841203 1828194825 s 7819259 671833648 d 227556613 d 1097828777 s 2070145830 2109992772 s 256885984 1509782365 s 2055368059 365683439 d 409431237 d 1532090726 s 1406846192 502662112 s 1487313700 392019668 s 2088864782 399838927 s 495474414 487661395 s 1357238871 495233162 f 501814119 d 829700397 d 1911857778 s 2003822093 1529152398 s 1158804625 209758972 s 313278737 1616605165 s 114626371 956435217 s 1744168831 897816352 s 1898061292 1393290766 d 660684912 f 887560791 s 2136559708 533642033 s 750291623 333650209 s 1877190626 189988654 s 1261329194 1348793279 s 539422536 1662072016 d 1326944585 f 668193085 f 155595027 d 2130226562 s 1533867568 1162839220 d 1602143486 s 1860489504 1902206904 d 1415191166 s 1261409350 745759428 f 1222236180 s 2080121056 1605359955 s 1032989237 2098313068 d 354273483 f 659229259 s 1827186710 381139463 f 671015588 s 1462872474 1453933192 s 1881186581 102822772 f 1398613763 f 1533491709 s 1623302499 1085590328 f 1212273859 d 963019655 s 206793715 834935110 d 1106529896 f 323569722 s 722322785 1208235573 s 372789893 941938507 d 1820043111 s 1535827656 1435562291 s 554182744 911381142 s 1177897787 1488099143 s 1752442250 244132570 d 386763578 f 1464685197 d 1549997846 s 718777439 1935094717 s 438023075 160400963 d 1155583676 d 661539950 d 763642 f 202364111 f 1423813223 d 499404383 s 615429999 1075999930 s 1920745372 1381981276 s 823940197 2100758715 s 935370595 391298143 d 1615302871 s 31085311 2097781644 s 1656477062 1588459816 d 1129136669 s 1775671049 78025181 s 1749708360 2050261627 d 1117474311 d 593733021 f 1898061292 f 1496668319 s 203302648 1892036347 d 992056371 d 924521535 s 699384648 1330397733 d 1850241835 s 1136549656 560809846 s 2067496995 587998155 d 1780252258 s 1020921866 2141132844 f 189341154 s 1654176291 575797579 s 1744100378 271645340 d 34230535 s 1265520714 1363338716 s 955733439 1010828374 s 723971346 2147378031 d 388574535 s 584211097 1846868347 f 771350869 s 513524486 788464748 f 343026959 f 281182138 d 313278737 d 1480127174 s 1920344188 1749867089 s 218582213 326354787 d 550560741 s 672159758 1305553116 f 1812907612 s 265103477 736498620 s 1504636691 601939775 d 1099007745 s 1111976321 1692835496 s 1715422874 1978559498 d 1653141795 s 217370845 1970002252 d 2076747909 s 1797327334 1719792094 s 99160495 1117857289 s 1268783869 1382960767 s 1079388343 740113810 d 779239260 f 1402599605 f 87810863 d 227333185 s 951783701 49641239 s 1200804500 1097036463 s 23683671 746880150 s 152115957 846040645 s 503522377 2114824515 f 1272547920 d 1026849211 f 1707278239 s 1039047010 1975917083 d 354981174 d 232787915 s 1959806831 862655677 s 916533325 886339348 s 1593051914 1038455305 d 665840170 s 122313493 985921452 d 1011235372 s 1279877457 212226438 s 1544564933 1251273449 d 935240036 s 648785722 528704999 d 1888947297 s 781595846 1257561508 s 1069657466 703129774 d 2113039567 s 1157719216 2065387411 f 1677771604 s 1243492377 942577872 s 448175161 339659157 d 756300640 s 1519442371 1095243185 s 1071960890 188173914 s 1487135086 969769760 s 641164982 2039427227 s 833650183 2095703311 s 420629420 1105938879 f 1289630547 s 1538657187 1360355520 s 148527055 1808530682 f 1973883112 f 505077092 s 1806581253 1733741675 s 1162933728 1073393113 d 1024725211 s 946407819 400724631 f 1644317573 s 942095987 1814884160 f 634247287 s 1123666620 1354584754 s 951658205 1364255127 s 1226107254 2008028441 s 448315841 1667126046 f 308867395 d 1157251112 s 510946442 1258348008 f 1336727166 s 2057516328 2112002192 s 1353150205 1599852736 f 1948542671 s 178692387 1527693913 d 1074093035 s 1906706514 1054633361 f 1283732816 d 1077901239 s 595324519 1663128747 s 1343930370 246907045 s 766406625 156939725 s 2003767039 1510089930 s 152217857 1371745886 s 1802737077 1550438273 s 522544128 1188505507 s 1250379621 947728373 d 151069680 f 1451360800 s 1522422088 1257132716 s 1875280654 453579439 d 295795156 s 590361447 1076269455 s 1530013851 1228487312 s 898218316 883740741 s 1794116694 1406284870 d 1071082508 f 1006878807 s 733428220 139982588 f 1986600259 s 903865261 1390201683 d 212904633 d 1665459790 s 850195338 466171464 f 216315836 s 68146333 1011022826 s 1640846474 12388122 f 1483398195 s 653617459 156547249 f 1383534475 f 1266704880 s 1526365278 967566429 s 1611214165 60783997 s 624848859 910979336 s 866970866 594931035 s 1992833615 663077368 s 230013937 156440194 s 1123858751 22747888 f 1053834421 d 1175427380 d 660203882 d 2105280856 s 826782028 2135731724 s 2054724275 613096936 s 1601354337 1480067802 d 660684912 d 647396583 f 213484606 d 1838797904 f 1683595317 f 1010175377 d 1282946700 s 1170103408 1277977459 d 1920344188 d 1208191329 f 584211097 d 1184628655 s 979464962 1069825555 s 618761829 206288421 d 955117748 d 1371983891 f 1390152814 s 149600531 758811978 d 155527373 f 1372929038 s 2082970323 2081135763 s 1664782790 1296568097 s 654543316 128549411 d 850195338 s 2106743069 1681735285 f 280696833 d 1095955152 d 1138334308 s 1969834999 1853004690 d 1488025904 s 720973781 1320099695 f 1743197075 f 934371750 s 1879969018 1668052805 d 496213752 d 336441455 s 8581117 1170722616 f 1072728832 f 964044511 d 2034192899 d 1862137561 s 1354890170 1816551756 f 1765413106 s 537020431 516658643 f 1818337489 s 876574224 1604450916 d 1408826093 f 917695122 s 855374308 28411425 s 1033340890 561541759 s 448436843 464984130 s 1183632492 1819874300 s 608743329 1627813071 s 1525796320 17349854 f 2062374306 f 1464685197 f 463582447 d 1228616211 d 1793232739 d 1577811861 s 142600549 340657413 s 1034179333 1524289905 s 1594826225 2133033235 f 987276546 s 506157905 1327280726 d 781595846 d 856352200 f 149600531 s 232586840 599360832 s 952553579 246867486 s 86578430 389468035 s 1833071058 1423647368 f 1679274750 s 2003683394 1663152689 d 568523684 s 1572604402 1462276301 s 984816615 1146500725 d 1753487260 s 1643834208 920119092 s 1981459019 1872672672 f 540701338 s 634323545 1644838512 f 1993043835 f 1250379621 s 1958695781 1230787606 f 1004319572 s 2119881653 1640724975 d 581692444 d 1993537070 f 390748254 d 936990465 d 279599914 s 1271796875 268433231 d 1706340603 f 68146333 s 117389798 1029350356 s 332143502 1001748361 s 1693397931 1329808093 d 1175109098 f 1049766681 s 815250591 2089143879 d 648785722 d 1342699748 s 1486921686 333073507 s 255022363 1697985902 s 253910647 1815375700 s 908707292 35554 s 1056745264 1693433485 f 1269603061 f 527921371 s 2068835961 77057186 d 355128980 f 1954628162 s 1307353359 1619487081 d 1573371454 s 1677139456 2128420092 s 1040967512 889643736 d 1714348491 s 954444794 662018993 s 2139828525 486181978 d 1542294311 f 1114217915 d 694275723 s 913268224 840875811 d 1289947609 s 978892274 1565709727 s 454847478 459193592 s 2078321885 1865737522 s 1100262482 672698668 d 1614513285 s 687251873 71938376 s 188707052 982527037 s 940848611 1971307872 s 1825555566 737092448 s 34782305 1907921570 f 429179173 f 1755364355 f 1904947943 f 1303109580 s 1158486259 1340648626 s 912425299 2027900499 s 1073898631 69123903 f 1198560072 d 2088867647 s 2049382058 722826738 s 1952376947 841345228 d 1044872362 s 1054012477 14560179 s 552680913 1905289376 f 1104321155 f 1621203361 f 2105520723 s 64716460 1469057255 d 975664522 s 2083725836 1258429457 d 1027266478 f 758380159 s 655837639 1243449502 d 827098695 s 537723031 372694784 d 1281167264 s 911633625 106993848 d 275238771 s 166697745 1951127057 d 1820457035 s 383166337 1888358443 d 1358590082 s 1882204820 1201778840 s 2084810590 685919978 s 2045222088 1223643009 s 774441925 2008112912 s 1332379049 772262889 s 497964795 1880184141 f 429540132 s 976298195 1960400559 f 1191227223 d 55400004 s 156289358 1624963650 s 1607134851 1562290592 f 242942030 s 2031330507 86987310 s 1141703707 1419366359 s 359070756 1917331154 f 2011150800 s 1088352528 1878753497 f 1689889376 d 571280151 d 1661351900 s 482547259 1374521830 s 1589668438 1933665293 d 1375700651 f 1572787519 s 485547829 1170802968 d 2147054674 f 1465410327 s 1743880780 2028262501 s 53668718 722702552 f 1159099762 f 1203060997 d 1875990363 f 2082202600 s 215207014 3621125 s 126423430 489168954 f 598495195 d 1956799398 d 1903284559 s 682788979 508864616 s 270879926 762563749 f 274760156 s 356357611 1864783863 s 872539014 1440657172 s 1058748922 1655864186 d 1548893748 f 785115642 d 1422759402 f 1442636485 d 1112410232 d 1379656416 s 1647634277 1119120312 d 56353640 s 674797086 200533289 s 877014810 1259282211 s 1082853659 1168489605 d 16043780 f 180429074 d 1112376132 s 2016513619 1696911529 s 1763003376 1156983305 f 658236133 d 1898061292 s 100043417 2138756373 f 1243492377 s 35025048 1951141194 f 56353640 s 337770124 1283010947 s 1117328047 1914415778 d 427262759 s 681546236 1398965478 f 217370845 s 1277324890 703455107 d 80554228 s 1848745695 1116842488 f 412221022 f 411094347 f 1448567442 f 1396421849 d 1351717617 s 337899232 821034273 s 1977076574 1240909680 d 1779628840 d 323569722 d 1648772171 d 1643033760 f 892496676 s 1063724497 82165031 d 909009095 s 374307741 1008292917 s 622769353 1346192149 d 1834026688 s 1146194951 1154205630 d 1158048221 s 1108600706 1645712914 f 1156686264 s 965090201 224560672 f 607591581 s 1793866619 1050093399 f 1992666030 s 1197779507 2047170493 f 1536211511 f 616672770 d 591706479 d 1825434345 d 2063355131 s 270844764 133878456 s 734031775 2146524809 d 1365781503 s 829839933 1071503177 s 1388588965 121799037 d 1700474292 f 872415037 s 2019253698 627607697 f 444613733 f 1565725272 s 1352786969 434283031 s 336863559 1168314807 d 1173530427 s 1931680476 1130054910 d 509218118 s 882628973 1517206725 s 1404088110 1449012185 d 414254577 s 235987786 1730446329 s 380677597 28750084 f 316317639 f 2011150800 s 735393516 180142282 d 990990549 d 597270789 s 275664356 1230537561 f 1039047010 s 1617076324 1433800216 s 1388658679 1669788002 f 653617459 d 1993537070 s 734540405 886133447 s 2028817231 1621526964 s 1475825386 1448742296 s 2052888451 1439282622 s 853628095 1714946979 f 55215490 f 593733021 s 1731306513 751332705 s 107042688 1668232104 s 659012595 129326843 s 445035907 863867248 s 1949459831 745200832 s 1486542389 73542570 s 987964057 2126431022 f 786173394 s 1917162131 2004149934 s 1336688324 647715658 s 42531086 231538523 s 418161851 338581212 s 696774567 997593807 f 1535827656 s 1334408675 1244605898 s 1570335769 583664640 s 1107521512 1571628697 s 2083989877 261439363 s 480437925 31117846 s 917450971 1367806170 s 717138043 1410337257 s 1268157821 1828499108 s 1339926056 377790027 f 1339168100 s 458499811 137239952 f 2019253698 d 1455791771 s 1720054504 604119814 d 1350591097 f 1592356964 s 1576853859 571663106 f 1581777702 f 1089333028 s 660155323 425800821 s 427658153 884300632 s 1439766882 1005479954 s 888056603 862881356 d 1747042941 s 1041849155 555767993 f 114118105 s 739639285 509865195 s 535291044 1222900799 f 388574535 f 1986373181 s 671187679 351029187 s 1613199802 1790796069 s 2115303998 531369025 s 1137538131 291860399 f 40238935 s 1474803767 1540550689 s 2040240517 132706326 f 1700474292 s 1859293860 679955633 f 593353442 s 1713528327 1217558822 d 1092790314 d 1965711088 s 1217873477 1788633457 d 632616859 d 1745683059 d 1173285934 f 1599121702 s 1943400458 366785814 f 595581284 s 902622565 1506341177 s 694948323 2096704133 s 130586502 421898024 s 97593706 1639771501 f 981295898 s 1949038466 1730779957 s 787199017 92694265 f 978892274 f 43239429 s 1863233672 891144053 s 580941048 1793766619 d 380677597 d 2058313196 d 917450971 s 1167687582 925872811 d 671187679 s 1384222339 1514626647 d 1332379049 d 1034179333 s 785919312 385372709 d 1683595317 s 973059893 1482521004 s 1769021258 469785777 s 839396999 726687049 s 1549544241 1894374631 d 1130252545 d 545538289 s 21766701 1377193229 s 1932615247 468042041 f 151789538 s 1210125212 1380280367 s 940735193 205856613 f 1071082508 s 1556235538 666791223 d 1193909273 d 1769742453 f 23020291 s 1018199927 1985938887 f 812717112 d 1276138743 s 76535780 1959510253 s 1209084191 752761798 d 1277707057 s 466557854 1174090156 f 2127039474 s 1394082376 2109194816 f 2062374306 s 1554005921 2012080658 f 92194995 d 733428220 s 1726299954 2128356752 s 576860502 1189957295 s 1780761311 719143605 s 664572696 1185701459 s 215175303 1168834258 f 554718708 d 787606220 f 518360864 d 1764637395 d 242935131 s 627475152 1699545469 s 11457322 128922324 f 1261329194 s 2050283525 426772683 d 1292242504 s 1308606333 476577714 d 1549544241 f 1044335275 f 1130252545 s 1473826974 1882514086 d 1702731092 f 1826418445 d 438018242 s 708290459 424964082 s 684678768 1256452702 d 1286558117 f 228358317 s 1812149559 1050188133 s 796168908 1232672288 f 830375062 d 1486542389 s 1578326215 632132149 s 228768262 402252110 s 788893945 1110542569 s 1775792311 1795221337 s 1257155016 1477639026 f 1456389778 d 383166337 s 1582600058 1034063441 s 816627761 826444736 s 1933169551 1735767580 s 1264733283 1166610148 s 970259929 1395378410 s 1197950780 36788707 d 622348998 s 1612229699 922252386 s 1791429072 2137347822 s 1988155399 1017947380 s 1087586211 453063790 f 1732652564 f 374880419 s 2135482174 172627090 s 444804824 1142887020 s 1303863232 193354152 s 1125980561 2043959864 s 595835579 1508705915 d 1177011198 d 495179269 d 155527373 d 1554005921 f 5554359 s 1556982923 1504437870 f 5554359 d 985018814 d 332143502 d 8060168 f 69063919 d 1462717627 s 206482525 1520071581 f 1550530240 s 5128244 1042544380 s 1594674335 452043656 s 1209363868 2088078739 s 1966940421 903577097 s 770387478 1230294733 f 733192277 d 847690408 s 1040220469 1287550626 s 1247340442 1494033151 f 1934683383 s 734063015 970121005 f 492498129 f 148460336 s 1837579375 1446132333 s 817047563 69036163 d 548927108 d 880517808 d 1033340890 d 1078402096 s 439532490 746250188 d 200800108 s 794167891 929508861 s 871059614 598275030 s 888546429 288370758 f 795051062 s 1813485338 986053264 s 255722058 610230356 f 69144676 s 360192558 308982616 s 1476494448 748515106 s 1410305451 1917834931 s 166753811 564519174 f 1687431874 f 299585127 d 221697344 d 1663786184 f 1532109851 d 126256222 d 1169125586 f 848111481 s 352106219 1597924640 f 1442069541 d 2009327849 s 821998868 1246141791 s 1259858933 1486175563 d 1795049278 f 1450010198 s 2029580034 1051327239 f 1482706677 f 766406625 s 91095539 692301208 d 554774997 f 175980308 s 1834294860 1160621272 d 1966858227 d 1144868897 f 694629762 s 1289915001 1848248292 d 477634103 d 1495741986 s 1268438982 855038034 f 864346164 d 265103477 f 1265580096 s 847324468 2056886488 s 2009109869 1093365856 s 770257770 1376317035 s 1541357074 518748388 d 885639959 f 198050523 s 1607793658 1151830129 s 1592197381 127350039 s 1242713948 722112975 f 1037365755 f 1987961704 f 166753811 d 11919910 s 1883401344 619425845 s 1606757631 1835725815 d 822304189 s 927308520 1464243321 s 750851422 908957054 d 1402599605 s 375439316 1236040273 f 473608741 s 1624043882 979572458 s 75187969 692898512 f 1985605984 f 1715422874 s 1761627507 1846893845 f 97283872 s 1410810445 1377570140 s 1938667018 476808450 s 1041152919 852247766 s 2037466426 823546121 d 1281167264 d 1222903378 s 353619352 277943415 f 1842372251 f 248789477 s 519899651 1151249787 s 1124122353 414576585 s 489818462 205759955 s 2007185572 1246912874 d 1286558117 s 394235537 469376716 s 1302417873 1847134363 s 756015073 53270067 s 638428482 2176970 f 272622623 d 1648083303 s 2122962046 878635596 d 5554359 d 477634103 f 917450971 s 1240821436 2088017180 s 872765490 1242951405 d 2097551421 s 1165185662 489911312 s 1977169473 898843396 s 782615512 777689278 s 739311339 753167676 s 1110583750 55365082 s 1687616117 1308573594 f 1342892432 s 29951309 163411472 s 1312685271 1036176962 s 147586301 1916180830 s 1183241045 933882845 d 93681873 d 1022411141 d 1800134921 f 955156141 f 206128178 d 1116297019 d 222839198 f 1039093134 f 2078321885 s 2080481625 531302436 d 691163818 f 989495058 s 1196132294 1323918932 s 1756762961 455022395 d 1192087595 d 1640936085 s 849520137 1838486054 s 1860090989 2045961557 d 326810382 s 1427316502 2123454859 s 2029160695 187383154 s 1247089911 1576052457 s 2011203309 624701104 s 765844934 233980417 s 769082183 459255480 d 245551616 s 210851378 1311136375 s 1043412344 1023743716 f 128195590 f 1497334207 f 1060398801 f 587387785 s 207970905 907934697 s 852623586 1673779631 s 1952298662 295378166 s 617180503 1856425692 s 1754624959 2067277070 d 1071960890 s 1162512945 2039654166 f 1180058155 s 530796520 719662091 f 1688933932 f 355894624 d 1092086540 s 1885411410 324825106 d 1700474292 d 81193735 s 569120215 984735094 s 750407431 2147248040 s 1567309870 1932175343 s 152176739 315488215 d 1807141900 d 1354894022 f 2037466426 f 2056851960 d 224423822 s 323012646 395055363 d 576497789 d 538390768 f 827188883 s 337409073 1286585972 d 1058670966 f 934577615 f 1129421151 s 1112696014 673054099 s 646155754 1131308823 d 1103710348 f 1400787957 s 2008097087 269722912 s 1869725194 1764971641 f 1226107254 d 663544617 s 1071714490 922081765 s 2123499495 678659498 s 1003149441 1791355513 f 1020921866 s 1467447981 1411648721 s 1586391938 1410398445 d 1193865419 d 1882780783 s 809391208 361814779 s 1733121663 1839667794 s 330123175 763898636 s 1003222450 739914483 s 2046936976 1743063924 f 7374145 s 169332105 659103997 s 176763727 98012287 f 398245804 d 1394675903 f 1957396003 f 653852096 d 876574224 d 492189998 s 2035139510 1272631366 s 250338970 741369671 s 903049696 910701777 d 1410810445 s 2147199741 686062665 d 70367862 d 91095539 s 1552961529 733520562 d 1720054504 s 1018002543 1178541706 s 1872386851 1066197569 f 1442636485 s 1963972036 72102587 f 374532219 s 515949870 891744177 f 34782305 d 1056033359 s 1168597991 494831471 d 692737796 d 2019208553 s 312057255 2141269935 d 292982753 s 810236316 2132626110 d 1137916376 d 172482223 f 358079583 f 805764752 f 973059893 s 955282938 1403691275 d 452294670 d 1468141768 s 995251191 1465010759 s 565444565 127763427 d 1652548571 d 2092509399 f 1626849514 s 641496474 1462863548 s 204213743 1976475069 f 1060398801 d 2043108053 f 1548844536 s 866086429 1485320405 f 1749908681 s 330734344 111021848 s 157984981 853086420 d 1264733283 s 1054645429 1515232041 s 1562121865 1719445784 s 1147084589 1981208267 s 2135738588 1551400031 s 1939400493 698904160 s 870127559 1564990589 d 2040240517 d 50275591 d 926650988 s 168065376 1115606359 d 1263621758 f 1012854867 f 918850350 f 336026037 s 76525349 364662732 f 1916144230 s 721892462 353172027 f 934656313 d 45415136 s 1481672350 649496872 d 2088864782 s 19907635 1318282853 s 692345258 963374780 f 486106202 s 1108586128 952729514 s 1717568915 1683020041 f 1917162131 s 1793894469 874204574 d 1233738092 d 1108586128 f 1117559338 s 757285721 1917897532 f 968234454 s 30334468 1661266644 d 1605941425 s 1398028668 192454391 f 207301726 f 480110513 f 552126338 s 595543064 452076074 s 2028183584 1302489253 d 1240180310 s 2082604581 13855948 f 1883014229 f 1384959668 s 73246129 1974069288 d 87393577 s 2064101247 688786683 s 841222337 501186100 s 1115228825 1096729164 s 72825767 977429100 s 928412607 1299939932 f 426932699 d 868461766 s 1098232413 1561977896 s 175660753 1635224025 s 1593027133 1501441462 f 880302635 s 1293775226 111797750 s 1421378496 1227026576 f 1054645429 f 606493935 s 1382719068 1635194633 s 1043551293 2130884183 d 470945053 s 1029637198 1257293702 d 383123151 f 163624025 d 1741061883 d 786040287 f 2012463227 f 1116297019 f 1084392858 f 458739304 s 254144456 244156851 d 832993419 s 1200581490 263596501 f 1986600259 s 1760733590 641749398 d 1807141900 f 1947057800 d 518825276 d 1978624715 s 1763543461 127781333 f 293634711 s 614591967 291676750 f 164449147 s 1617214366 1190144426 f 1900113382 d 1690551138 s 426897371 1338405352 f 286086049 s 1720358272 133088762 d 674797086 s 777745180 1471141639 s 298386942 2085733606 d 464765042 d 1332379049 f 1309248319 s 1691996339 1940546105 s 708547005 219959828 s 506009202 611447725 f 1261655582 d 632616859 d 457935360 s 1506694811 614231092 s 816952520 1707053846 f 440639518 s 1464645197 1163492620 f 855171646 s 1058109559 1416552317 s 1341408178 1922561519 s 2116784813 822695424 d 2064052213 f 1293802871 f 1860489504 s 1436174421 895980700 s 2058430874 367965521 f 374532219 s 1202609184 1798343363 d 2134878203 s 2002574436 2050377453 s 976501054 2019678618 s 134750022 749961532 f 152217857 s 2138257343 1654510919 s 1764680523 943201693 s 950673901 854148919 f 653852096 s 1759520161 614943384 d 539422536 s 121971037 1962646069 f 784986683 f 19694442 s 1140287102 1904995105 s 579082176 1895768800 d 1793866619 s 510709384 316155928 s 1292478860 15764825 s 1759375406 1775284986 f 1431334521 d 206169663 s 1285992897 1916275969 s 1887807209 42617718 f 1351717617 s 434250021 1761986997 s 1430911556 1858892428 f 80554228 s 1869819637 1514597024 f 697336562 s 455004774 856136802 d 1564264063 d 672644439 s 631142596 291343168 s 650776060 1383442573 d 1878591794 f 1193909273 d 1825555566 d 1895198639 s 1569131330 1827946318 s 419765522 135467445 s 1278154141 1224349937 s 2118784576 614788919 s 580723684 1245931516 s 1232764158 1896707576 s 920225806 177144908 s 222190803 130495961 d 1875990363 f 452294670 s 1368629135 742705272 d 935370595 s 1682954138 293141287 f 1090233506 s 1934488971 845165899 s 479625711 2077930058 s 408205025 850672216 d 1793894469 s 706902049 308427599 s 1583738805 926967768 f 558641723 d 2072057899 s 1260950152 781306982 f 1332379049 d 1887213756 s 595667282 433666120 s 1874508787 841871145 s 1183011552 848864431 d 499404383 s 1183251767 992021638 d 169332105 f 725716895 f 206482525 f 1565725272 d 1114698144 d 1626506494 f 1111760120 f 33759695 s 427960989 962890940 f 951027820 d 940735193 f 1508107084 d 1041152919 d 179852647 f 887560791 d 258263319 s 1661820148 71947100 f 1468737801 f 1017757654 f 729897276 s 2030761046 544584825 f 2130226562 d 1000158494 d 1094207061 s 41382049 134703398 f 601937789 f 295795156 d 1505609665 f 1812900043 s 567996460 1778429930 d 1303163442 s 593518125 817616676 s 155730773 1119454804 d 318007247 s 965196095 1447883452 s 1462546252 78777641 f 1483810715 f 1011235372 d 1114217915 s 741258411 1803434150 s 826229948 852086491 s 1455786310 1445604616 s 1348034880 1601335389 d 330123175 d 1022411141 f 2123462953 s 1161635402 92026477 s 1399604401 23003680 d 2113039567 d 1611441489 d 935130086 s 1243637313 1071855593 f 188806728 s 1730585378 577106586 s 1792804568 569535334 f 903049696 d 1930266160 s 1063212066 798152625 s 679041987 1955310069 s 1530309598 685943858 s 2037527712 915967568 d 286633402 f 673339454 d 1434296159 d 175980308 d 1400787957 f 1733121663 s 1591334847 835900003 f 1200581490 f 647396583 f 652998598 f 1092086540 d 973413728 s 1133481903 1667019175 d 204412659 f 1456590335 s 2074820654 926997067 f 1269190946 s 326536212 1960626003 f 1123721920 d 567083374 s 612673036 1735107631 s 1559466209 776427385 s 1298280911 1909909288 d 1183632492 f 1733961860 f 1431334521 s 972174250 598251873 s 1185979369 924788085 d 1456389778 s 1246274233 262085907 s 365633994 874758943 d 1661820148 s 180158834 1585022415 s 505182416 997241288 s 556308171 838809597 f 628956574 f 2109995081 s 867832128 296265056 s 1341047001 1063507887 f 1966940421 s 1405940465 527932466 s 1135299132 2050086895 s 1641085184 82762081 s 1909296876 587944497 s 1447717550 1144252669 d 928185757 s 59834141 1270547635 s 2009952834 2138379763 s 589892316 1331943117 f 692737796 s 1327510457 1854605716 s 1628379601 842421200 d 431557762 d 434250021 s 1116046722 1545553516 f 1265580096 d 2068835961 d 1382719068 s 1492018670 765716481 d 207301726 s 445574234 1847143548 s 1605175542 1328039501 s 519896450 1396546103 f 1432690380 f 343026959 f 875101635 d 1162702161 s 393003783 2056276225 s 1299432068 1400811247 f 551823247 s 1929872825 1660290873 s 29064249 1117982768 d 649171410 f 1835208129 s 1918750858 258065582 s 692292053 90552663 d 255722058 s 1207254747 2108511709 f 187993562 s 1005453584 503296303 s 1807044334 285685480 d 358079583 d 2071175527 f 1075848536 s 1342041527 1599973346 f 739639285 s 95275354 2011619486 s 86276590 1071390585 s 2133554051 1794886510 d 527921371 s 1654513516 312417133 f 1090016177 f 1589668438 d 1823295095 s 372125431 431374636 s 126989638 505768791 s 2119890156 601044146 s 1533331305 687320736 f 1920745372 d 815787963 f 845960442 s 1957382972 854771617 s 1548560177 1241074808 d 1812900043 s 1130473930 341043398 s 1288273573 468033036 f 729897276 f 1950617979 s 848196368 734087716 s 1733707047 129333923 s 1124590524 662805772 s 827891135 472705096 f 1348034880 s 1496795604 298945611 d 649602004 d 547651389 d 577993744 f 1457296528 f 298386942 f 553492015 s 721416301 1182679628 s 186736381 2010570763 s 506828079 867507330 f 2036841203 s 1450595410 1295323389 s 1174239633 239426977 s 1365916892 1849866139 s 1998033695 285234077 s 308954052 527818822 d 1874590489 s 675787770 1824944169 s 512935539 2011680551 f 355894624 f 1858508581 s 1489002993 1742131329 f 1043412344 s 1588244448 2134804206 s 1936550694 1985354253 d 1612229699 f 1757986223 d 646658647 d 2035139510 s 1791637810 1512298497 s 2059358625 371237742 f 826782028 s 28794922 966276075 s 2048085391 407036875 s 1622274703 196103921 d 883358842 f 591323824 f 2006808675 s 232973688 1112785447 d 946992430 s 521370030 668814587 s 68874787 1065229666 s 1358510873 1094024589 f 163400790 s 1167910935 469417387 d 1399604401 s 787197424 1672572134 f 1623302499 s 1878940341 970288909 s 2128867347 88206453 f 523322835 s 1729588798 678451270 d 1179193849 s 2093338241 1159029120 s 1017904227 179456407 d 1808908326 s 1363874238 1870795682 s 603721160 2041835463 s 712412852 1773292157 d 350132916 d 1569835199 s 117087134 932906559 f 1759834621 s 46099137 159602986 f 1887213756 s 1380322132 1316081347 s 1012032330 532471938 s 168831015 1136193098 s 62944921 1848605950 d 1908107158 f 1450832182 s 1294659110 1369438875 s 1387812485 904019717 f 1614758802 s 364621698 354878972 f 2144121259 f 1378592730 d 281398649 d 866159239 f 930765788 s 407011948 1491346817 d 1423392755 d 587574544 s 1715183766 1249295471 s 1332656042 1613917170 s 2127635531 1152172619 d 1276972852 s 439778199 723691576 s 2072020424 374618934 d 786820747 s 2078794478 2080746255 d 260996276 s 1152272241 908803368 s 1204008453 476503486 s 58379871 1809159528 s 1415113910 1789311412 f 418161851 f 1149531498 s 1921581475 2097355460 s 770921986 1207773116 s 1379135956 1139083947 d 1265274425 d 1662760926 s 243779401 1204953091 s 1962525407 1263332962 f 1192684571 d 130019956 f 69144676 f 304731390 s 2129710304 896864185 s 1744316402 128516494 f 991387042 s 1639026353 1234058456 s 747187319 1477837857 f 102560142 s 1725675752 145617255 s 613843849 1335707041 s 1235052431 1515841755 s 1881596048 1409712972 s 330527830 1391939628 f 438892340 d 1996054019 f 79422883 s 72888697 372203866 f 672277419 s 889455955 282247742 f 299585127 f 1750320507 s 2071421174 1865256423 s 1641940590 48300605 f 764060290 f 235987786 d 1100116287 s 1608091170 1318926423 s 2080649874 94690444 s 1698604546 984146399 s 1462176473 223290217 d 607965794 s 881608870 626588052 f 538390768 s 1733281300 82885538 f 308493868 s 1792944669 1106512853 s 1514529821 567120376 d 1056033359 s 258679848 51407500 d 1921581475 s 1167472587 1927555768 f 2041531514 d 535291044 s 88400891 858953913 s 1849851970 407846329 d 232973688 s 1813450728 1567837171 s 515969921 1028672363 s 1460663207 1287352211 s 1242019245 478640809 s 1246665499 1646113397 s 1953962280 478463052 s 1140363466 988429847 s 447809646 1076830738 d 1130473930 s 2016582907 914089722 s 1006570007 580056802 s 563677484 1096026723 d 73903491 f 1933265225 s 204775045 750407379 f 2103426562 s 1523887731 1697249478 f 1948542671 f 183667728 f 909498825 d 1010175377 d 181762994 s 1733309843 1896135153 d 335292362 f 554464952 d 1267962751 d 2045222088 f 1305212663 d 1847317074 f 1678675948 s 850324190 321366219 s 1301026345 1243214955 d 70785517 s 508723089 366197017 s 1968400131 333323364 d 202364111 f 420629420 s 672256656 82639139 f 1269603061 d 1462209630 d 839085907 s 967737844 941824423 s 514064923 1642095999 f 977265470 s 1730030385 1971735571 d 757804021 s 639201339 210773220 d 1992666030 s 963478591 1722114623 s 1721616423 416260653 d 227333185 s 1923870760 1932989206 d 142045206 s 1467995083 108613989 d 1599473994 s 759394309 1877994033 s 1874547369 369711724 s 1374056580 1128217588 f 1395859285 s 496631979 1665828955 s 975016562 1180405789 d 429652531 d 1882780783 d 2044846646 s 1122296967 1432007873 s 1505503766 43918534 d 2108214266 s 1898228942 1145038836 s 935524369 2101243767 s 1694934420 450392098 d 1987791893 s 716559893 372124234 s 495503869 379846892 s 574018326 943188985 d 1530813479 d 336026037 d 1071714490 d 658898534 d 756015073 s 236933409 1106222602 s 806220118 1829344078 s 408428969 398420324 s 967430721 893924193 f 1909296876 s 1678110460 81605643 s 1023591073 721041587 f 912891210 d 1261329194 s 2026275511 382015880 f 1904951636 f 304731390 s 835042145 1833598376 s 1194663847 653545449 d 718238356 s 1469306374 1801326335 f 1504589704 s 1799164918 1090423981 s 1400865743 663795605 d 734540405 f 1884818285 s 2004509570 1528104366 s 281345424 215662863 s 1104085250 1410326711 s 673265621 1196975505 s 1710388511 518798232 d 2144514315 s 373919869 1092962113 f 1115886266 d 964044511 d 1612927486 d 1279074418 d 1717568915 f 1668976193 s 1540814897 854963660 f 299990407 f 1882780783 s 733342689 1473421789 d 1454689588 s 848833393 1107008791 s 1781064017 1944715677 s 1246370682 1346007871 s 92298065 736054782 s 1301371960 1948454785 d 1058109559 s 1294697734 1186748051 s 1334904781 1137183524 s 668909024 1870526213 s 1095875379 182232804 s 1869185943 1031066197 d 1450208095 s 2004397694 1911017248 s 337891654 2003315314 s 2043965698 1157203626 d 1726004176 d 1483637403 s 1245143202 1265127764 d 1601354337 s 501359128 882428520 s 153857735 604130815 s 913365132 923818265 s 1470104559 780732311 f 1586391938 f 1813629828 d 1862137561 s 1495568165 883899084 f 791579366 s 1831948054 1191840732 s 1218030503 1693199861 s 786345755 1847057596 s 1385727205 612939080 d 1963667044 f 1354890170 s 265742826 730131193 s 158856087 591623755 s 834978246 2087191920 s 1441323387 2108616444 s 1165312645 1793080850 d 1848369961 s 1068825962 1649973461 s 2065927696 888217018 s 1839364048 1390488592 s 246049063 772838135 s 1918841691 1038580961 s 311773040 1197437049 d 1685813377 s 1432771473 1326255034 s 1343037045 344084032 s 297659702 1019939076 s 945482220 2088765038 d 152217857 f 1242019245 s 1001626123 1945138550 f 1202609184 f 788893945 s 634048889 1384850524 f 1733309843 f 1731306513 f 1548844536 f 1162933728 s 56682520 254228708 d 770387478 s 1215939512 1361585416 s 1116166791 125067981 d 2123462953 d 1731739509 f 1063212066 s 969894639 608743934 s 366443346 28098257 d 625462376 d 458178218 f 635848361 s 1127295369 154818701 s 694050723 1270985493 d 853628095 s 993856955 1074729904 s 1395261764 844676219 d 138059119 f 1228616211 d 313753930 s 271595259 1957161991 d 1475799863 d 957388951 s 1154110862 841735704 d 1568592092 d 278827066 f 1492584358 s 2090417218 1232511073 d 1183241045 s 238171595 551242488 f 1627047785 s 1736547540 1410598090 s 923520937 526999161 d 470364384 f 29064249 d 1640936085 f 1816967550 s 656055470 1776793499 f 1450208095 f 1820043111 d 552516329 d 874457143 s 1588178888 1945023063 f 633060058 s 250965966 940943079 s 674782083 1462804527 s 616526235 555683053 f 1492817714 s 1411421560 950574500 s 1692966539 1953205189 s 378270358 741124981 s 2033895574 1418979515 s 805151584 859674755 f 2077959559 f 40000277 s 617684859 136643731 f 376765505 s 57907928 77146503 f 609523551 f 212417943 s 212573491 1412321313 f 1349265614 s 1783767549 2103884823 f 1056745264 d 158606651 d 1640938408 f 1662760926 d 1139779641 f 587574544 s 719067069 1859722311 f 1140287102 s 743700527 1485973436 f 130586502 s 912125455 778686922 s 1710812802 518114642 d 695044142 s 221070877 236630956 d 254030405 s 451459119 2043499677 s 1020052732 615083098 f 1496977141 f 775550151 d 242935131 d 1107189969 d 326810382 s 401538791 269529658 s 1191840690 490600535 s 1015790109 1862034105 s 2078778625 166009577 s 410098221 1186062309 s 601140128 1661275960 s 716994189 856488195 f 652901892 s 747939226 1406992957 f 1258370457 f 2004951742 d 1647634277 s 1933099108 1092696883 s 1116372579 1023991860 f 1659739999 s 2037518325 2035230209 s 1634053506 604740751 f 527872758 s 2089046983 1524018016 f 689107563 s 429566278 1161424495 s 92181338 1850489967 d 499404383 s 113162984 604994358 f 597361352 s 1366776551 690691115 s 2100406801 177260973 d 632605497 d 1504636691 f 255022363 s 1379755955 1313839611 d 1923872463 s 181453147 1651417882 s 1787193837 1764580866 s 121959092 1911519480 s 2038298077 1130812383 f 758808869 s 1956242624 479293487 s 846180415 1535402136 s 1260136222 1364087143 d 917695122 d 475009768 s 377209470 446221938 s 476495926 85932127 f 840080489 f 482567704 s 586375064 1793605624 d 1988155399 d 1061892931 f 893000876 s 1786543438 420084025 f 1027266478 s 1105193870 563838290 s 2045205618 1040334216 s 454830937 73627309 s 775975736 611857654 f 189341154 d 1829624637 f 576497789 s 1591581948 1728788232 f 453905848 s 1131990484 1036964378 s 1465143269 2142158248 s 97034343 2039880218 s 962341193 347227508 s 2035539263 1123203244 s 1059959334 1203652515 f 1700140470 d 622769353 s 577376042 305086412 s 565057997 1368692903 d 1051975857 d 1144868897 d 433408086 d 1247089911 d 823365587 s 1490331469 1678249847 d 497745610 f 1808908326 d 448315841 d 1793866619 s 677848967 1379933627 d 1921581475 s 1261376069 1377636977 s 1442873491 2006688856 d 1743845864 s 1476042946 2103299523 s 36656340 1233465037 f 1763003376 s 1363492954 1396767667 s 615008081 669671113 s 1235216111 1347520081 f 440808801 f 1581104261 s 1117568197 729077564 s 112480280 553192336 f 572980445 s 1017135321 2065891623 s 1569855346 187988566 d 1351717617 s 1046698267 19005954 f 1762910313 s 412262118 1315362299 s 510937791 2020769662 d 1261329194 d 402400336 f 1512132289 s 733105058 1846152689 d 1589565706 s 579665837 508291720 f 562532000 d 1037508753 f 2119890156 s 25761119 1443961452 s 1754513306 1283728246 f 1860489504 d 1096543848 f 627475152 d 1415113910 s 894105292 29008003 s 1149789781 861719108 f 1130473930 d 672256656 s 1502700247 226120718 s 2072777421 1980634024 s 1486225159 1898009785 s 2003007388 531440338 s 1201323337 2057644613 s 98308328 2100063289 s 263817707 846684934 f 1682954138 f 1379135956 s 1620995222 2079380379 d 1895198639 s 1840174658 1359890751 s 1807989700 698632262 s 2087333993 554156002 s 1507010805 1755479340 d 1903274404 s 1690065400 2117605375 s 461529960 907740533 s 94713627 1926666776 s 197560241 1400178350 f 1600967190 f 1266704880 f 2088713695 f 1285992897 s 2534277 1061357130 s 557139026 1861482326 s 1064323417 1404064079 s 270709093 1865594039 f 1577811861 d 1112410232 f 727135565 s 1611020387 1541244102 s 371285588 786331149 s 1977666699 144421643 f 1967896339 f 1916532135 s 939122502 1768418364 d 1303109580 s 441812847 1365213295 s 426211414 1020147169 s 1810788331 935825810 d 1678110460 d 1650377752 d 1046698267 s 597148793 444067706 s 279730342 2055837030 d 1693397931 f 1308860271 f 643680761 s 1327288292 1952097553 d 1213404703 d 1781064017 f 422817439 s 1654960752 1367102464 d 1599121702 s 2009686901 96497952 s 1890881058 1920292170 s 1393009932 249763400 s 786782615 1245472975 f 182112575 s 1177418092 2094528888 s 1744893401 321926552 d 455512995 f 721900472 s 345083498 1136263156 d 805311899 d 984493792 s 766486230 2134873752 s 1093806384 774172719 f 2118784576 f 1562121865 d 158856087 f 2079303358 s 337490946 1665783083 s 851125746 2010866581 d 1792804568 s 1608428517 219123396 s 1808137401 985609627 s 110126037 2079416011 f 228616329 d 739639285 f 1149789781 d 645877116 d 1850217633 s 466283905 561539346 d 1664537671 d 942095987 s 786108213 864666125 f 1173530427 s 1971417613 632379812 d 1558696192 s 1330723520 1960301691 s 485116213 1752124065 s 1151042028 581855823 s 1335267278 1048139728 s 1382875461 2139755288 f 975016562 f 155563853 s 1184692164 190502735 d 986690912 d 1952298662 d 1477997924 s 1016841076 658925474 d 1261628481 d 463411374 f 378128583 s 1993042360 359510618 f 1039093134 f 172329495 s 1240344977 1698035826 d 2062720754 s 563040592 261468354 d 520058013 d 727135565 f 227556613 d 1137919992 s 1917058634 1261651126 f 771350869 s 1753658014 508096527 s 1461873531 1748441504 s 1184525748 1445039118 s 1897747354 2008079710 s 637294573 1102897675 s 35767266 481617077 f 1786543438 d 1468838606 d 136942724 s 98643359 595020316 d 1521629705 s 931539708 1663068214 s 1215133092 700110314 d 1900113382 d 58379871 s 1105771234 1123435859 d 2123462953 f 1731306513 s 293926594 970356928 d 1281886923 d 1872394105 s 1436468604 51554850 s 71718391 1266687942 s 152007296 1844951702 s 92892263 2047814484 d 1413024337 s 514590977 222797628 s 618600789 343804321 s 1459594345 637730916 d 429652531 f 225510738 d 1376514591 d 172482223 f 996308620 f 1298280911 f 1731306513 f 1293775226 s 2111878680 201423848 d 1432690380 f 1825555566 s 1791798064 627949468 s 1125410953 1078985046 d 1525722406 f 1935537151 d 1246370682 f 975016562 s 869685673 1512040310 f 1450832182 d 554774997 s 188237098 1193271222 d 1330301014 s 1724376514 1962996592 s 344104406 326091636 f 628956574 f 924707281 d 1879969018 d 995229601 d 810118767 f 1963972036 s 1950932900 1601039806 s 1156686149 173144006 s 990388867 1897520521 s 1903076632 94141279 f 1831948054 f 816423825 d 274760156 f 945482220 s 1287371499 1515754262 s 1257560896 139164145 d 1955550302 d 1059190990 s 1089986237 2089688414 f 725255512 s 2131854438 1407967328 s 1083134895 1994517333 s 887215823 1363970087 d 1157719216 f 1125236669 f 1157719216 d 786108213 s 1592702768 576759255 d 460659397 s 1120604945 2040878187 s 853715749 2025248978 s 1626425041 960900225 f 295050531 s 204113683 858658653 d 837049023 s 1302410924 943624849 s 601117173 673055324 f 30334468 s 183056013 1599909864 s 465879973 573031161 f 1786543438 d 445574234 f 567970502 d 1220219472 s 1690068357 1781911258 s 1007305839 936838534 s 584612304 1537955707 s 1264808949 1380392527 s 374281201 1563448540 s 1150498945 2029328513 d 28515844 d 1044872362 s 1728283033 939183420 d 1151042028 f 527889802 s 2106306975 716929280 s 151476635 1301541584 s 1017185267 418866885 f 151069680 f 519899651 s 1299534440 1616274612 s 1588238155 1836279806 d 1308606333 f 1215133092 f 1289630547 s 1435621333 727923364 s 127767041 879399999 f 422817439 s 1968362400 1750269962 f 237593746 s 1755641287 1192414742 s 844807888 633169250 s 2097411759 1268315776 d 470694053 f 1548560177 f 455512995 f 1049766681 d 664947049 s 767207993 1512781875 s 1771175998 212635814 s 423823738 1968277102 f 680872176 f 1056754018 f 445574234 s 1311881524 815335336 f 832737645 s 3759755 1706310322 d 839085907 s 931462968 882422742 d 1267468445 f 370107411 d 1391900752 f 1701754569 s 952117212 3444530 d 810236316 f 648785722 s 1975805686 539202942 f 882039474 s 2031240535 989984638 s 1196465924 788894513 s 574327128 1495615244 s 1920465433 7594278 s 1784721433 1252968161 f 1615302871 f 734540405 d 43937326 s 1663241873 1836932747 d 1259797878 d 1874590489 s 1402911374 853501636 d 1302417873 d 741061476 d 1385727205 s 1726273239 955071572 d 430016912 s 1191355139 978126066 d 1594826225 s 1434368763 267742819 d 1589932980 d 1388924037 f 617180503 s 686312170 101729769 s 123063501 1682827792 f 1663241873 d 411579116 f 1567309870 d 734540405 s 76605219 363043808 d 1413703765 s 2079516721 1275688537 d 190242282 s 431845028 1071672177 d 1441933082 f 708627802 f 151069680 d 2058430874 s 1298980161 1358788856 s 300448213 1435394075 s 1717142732 537453541 d 422817439 f 34674168 s 797837529 369356311 d 2100322224 s 620833476 2122536489 f 1644317573 s 1343951408 1585937002 s 1159180124 737433515 s 2050567534 1037881728 s 1157515105 607540812 d 809892200 s 846216537 617068563 f 840323645 s 1505515051 209085875 s 344510603 829919351 s 1191024828 244056608 s 1310194640 1588008016 d 1899036623 s 1828557593 502788379 f 172482223 d 589892316 s 831184814 723057926 f 1473085332 s 1394933020 1794860858 d 1358510873 s 1792303934 1182912642 s 1846798239 345623635 s 1339745898 161863499 s 1570127072 1990421092 f 1164363162 f 1115886266 s 8873629 179440862 s 215589426 1107821624 d 1829624637 s 1520435433 887621228 s 2033578901 532441515 s 643295329 231756106 f 1906305883 d 40215553 f 671822493 f 1379755955 f 1385277806 f 1975805686 d 874785057 d 1465410327 s 1658072646 1277515914 f 519896450 d 1975332172 f 1100083674 f 1343930370 d 1332656042 s 378599103 499845110 s 1457936430 2059395997 d 34977347 s 1892558033 1342787210 s 1027641913 853376209 s 695167308 740941500 s 594448809 1351106718 d 570706172 s 235193952 772797585 s 90207345 251500223 s 2049498890 630099326 s 1826974918 2088035756 s 1785708505 1438163842 s 1615427319 1183238228 s 689083146 63396493 d 1922103704 d 689107563 s 1903600927 1270761278 s 600276415 1505955230 d 1415709949 s 139847698 1498177817 s 586093794 1177669088 s 944252240 815893945 d 1850241835 f 378599103 s 46529202 2013175649 s 73087134 1030446224 s 1450751784 786563503 s 1379184502 1386839919 s 2080414805 1580286631 f 672277419 f 622769353 f 677123556 s 510968354 1284185616 f 383123151 s 273998318 2091627590 s 945775348 17231076 s 823081342 1467982860 d 1672533744 s 330203820 632614871 d 117770390 s 1738817201 1839284441 s 74914592 1536190640 s 1374389576 2047158995 s 810218530 260460436 s 1218968246 534458754 s 1493409964 1480234103 s 650814258 155831797 s 594782056 2126980412 s 1925589772 309700584 d 1235052431 d 1276138743 s 1372984060 261370331 s 823502984 1635759908 f 649171410 s 43043157 1517463036 s 619506379 863389353 f 2043965698 f 1576225726 f 446364654 d 546757933 s 1457564859 1159303172 f 922770897 f 881651259 f 1327569187 f 1262981361 f 1720624382 s 1037365247 347297011 s 918334824 1474691198 f 153346269 d 1952298662 d 374880419 s 518518406 838007035 f 1874610755 s 285541384 1216878400 f 558641723 s 1655293238 1301462362 f 1488025904 s 1341039503 1109678785 d 2061007235 s 56117914 689964393 s 638527983 256737947 s 232757577 775256353 s 211790756 359406294 f 2039446100 d 1194783380 s 1378977202 1438184886 s 834033687 31765803 s 636387184 1372805306 f 1116372579 s 2111471887 1183956032 f 1834412498 s 1101458630 2055241593 s 970137228 119548702 s 993782653 1518679207 d 1921581475 s 1316581550 1808189813 s 1700318984 494739853 d 470313895 d 1457936430 s 1090949750 861063507 s 1059186979 784366927 s 1284162155 1885825557 s 136910037 708479137 s 1496547862 1702261790 f 1969834999 s 993643219 958182522 d 1724136195 s 1034282151 638934591 f 624848859 f 1155583676 f 796304719 s 1359321394 1590943093 d 366443346 s 1643539428 1076917345 s 1216618355 283083414 s 1218909893 1276726633 s 881907596 1201064593 s 1039645153 87863097 d 1284162155 s 219482312 2142579419 f 865053003 f 45415136 d 916533325 s 2060857636 1329390030 d 277218448 d 1821657100 s 916248666 351858579 s 1565052206 1391503732 d 180158834 d 587387785 s 989148978 763530527 s 2135389863 1418935560 d 632267570 d 1319752646 s 1994663519 713835666 d 834978246 s 2036564003 261063668 f 121959092 d 378895477 f 527872758 s 1914165629 1522776925 f 1279877457 s 729602704 2088289687 s 1092752764 688482400 d 429652531 f 1457564859 s 2142406195 1801993071 s 1907796936 1403967930 f 1731306513 s 1499148417 1467601549 s 1725617567 1234283530 d 787678191 s 829585186 2016189482 s 292638631 961458598 s 1018151566 1599267804 f 88454817 f 4112207 s 2139407396 1935894025 s 715783247 705618139 s 1823581664 57282908 d 138839777 f 1020721312 d 802840481 d 653617459 d 872765490 f 1966187105 s 456813719 1600638802 f 492498129 d 1110583750 s 523424034 1984443813 s 871534944 1154484545 f 2080140521 s 1027943304 1907924427 s 1618146707 647845461 d 806220118 s 2025771217 1690972522 d 935130086 f 249723991 d 279350563 s 96533228 1440779709 s 1712562440 164831005 f 1112696014 s 124037646 1499220045 d 186176155 s 2131108736 1992208165 d 153346269 s 2068329767 637920355 d 1764822181 s 863398687 1155333335 d 1969775622 d 809892200 s 1682095393 1633470187 d 668909024 f 35025048 s 249248540 58335344 f 1545049578 s 335542117 1825671376 f 1742131900 s 1387854405 137427544 f 1791798064 s 695131458 1691476914 s 160249020 1226088659 s 96643324 226842447 f 1659739999 f 1089799994 d 2045588747 s 1718760213 1707104254 s 34947330 1857840191 s 968680858 1098210948 s 910264073 345572201 s 2103713852 1040703659 s 1966625338 1200952680 s 1315523364 1297596004 d 932944303 s 1455561691 325157860 f 2107108804 s 1544322571 1789444227 s 71819719 1824391558 f 412221022 d 1427708368 d 970259929 s 387658811 1331224736 s 1525940225 499264453 s 743580438 773710029 f 1821370751 d 1605477394 s 1127390172 26156498 d 518360864 f 1904215713 s 8053981 226072157 s 616106932 701538213 s 117379894 1089197024 s 819605537 467653601 f 263969645 s 1206651563 1774117397 d 1266704880 s 849583704 1987121442 d 2127039474 s 1671512577 166514456 f 637294573 s 722412443 790675369 s 390388195 908055263 s 1389588684 1727660800 s 740569977 252120688 s 865261300 1458772251 f 10276844 s 1907537665 79906110 s 622007486 1502000296 f 1329364259 d 918817955 s 1817996233 19994110 f 1191024828 s 477433605 1799970990 f 1682954138 f 1504636691 s 331222362 182575666 f 1956242624 f 456813719 d 408205025 f 593353442 s 1994367437 182792081 s 57565456 1859650312 s 1176302387 189600269 s 1875216470 2082746499 s 678767593 160388448 f 1744168831 s 433736746 1788661208 s 6288636 1743693785 s 1080840821 777649768 s 1033938584 1204527259 s 284618014 1051411049 f 2057916343 f 2087333993 s 717374238 2013011714 d 1903284559 s 1428893873 1485386626 f 1082845900 f 848833393 s 1086307498 858769182 s 612676194 1892707767 s 651324386 29842133 f 1883401344 s 806371596 968964738 d 1539763703 d 755224049 d 1039093134 f 133309160 s 121539912 1272174816 d 1097828777 s 794903709 823674860 f 1823295095 s 1411415546 200280257 d 1435621333 f 201520744 f 297775934 d 903728169 s 962946523 1753596269 d 374281201 s 1793590481 1944533107 s 1882903999 591953168 d 1538657187 f 805151584 d 755224049 s 1449813063 632844759 s 1407146588 1571741762 s 1347310187 706228388 s 551714085 1669174912 f 1337249948 s 1806470985 1730844243 s 59710037 1466264595 s 1284107598 1036222583 s 1836020758 470560342 f 757285721 f 1589565706 d 1154110862 d 2045790038 s 1789713011 1962911836 s 1408949716 1432175139 s 755838955 1091162476 f 1265274425 s 1783153167 287496464 s 540968657 2123517222 s 1879606965 416764101 d 1492817714 s 2027695427 2068540678 s 768678329 1697645957 s 215889619 1339875320 s 1332275821 601341388 f 823502984 d 1733281300 f 1797282865 f 1000158494 f 463411374 s 1955275070 1729206483 s 1428992039 1609418262 f 312057255 s 1915398853 446502562 s 532145676 1778778383 s 581067637 2017210520 s 1721152075 745159569 s 1864625378 1576373772 s 148111497 1252108417 s 555114838 242923846 s 1378882280 50715269 d 1438672132 s 1737703047 298820231 f 100043417 s 310297135 598881112 d 1933265225 s 635146016 753617177 d 1441323387 f 659229259 s 484238631 1173985242 s 705445299 405383874 f 1932627951 f 1999579054 s 1416199630 873688029 d 1576853859 d 850324190 d 1242813336 s 562615647 51413913 d 43239429 d 899061248 d 393003783 d 1115886266 s 1671246029 803979373 s 317604730 72695355 f 563677484 s 490157764 214844576 d 554774997 s 80139292 1151915069 s 1796439376 1331581641 s 1984126215 232923907 s 1198314649 246349361 d 519896450 d 1059959334 s 287985918 1263940385 d 634048889 d 1796598040 d 1689889376 d 680872176 s 546581380 1495973801 f 119350974 s 1977071307 383447369 s 975658446 1201334326 f 1077400581 s 1838293001 708702059 d 2030301632 d 1235052431 s 1190442811 1650357319 s 36496443 722835630 f 1797282865 s 1364015485 475299531 f 176763727 s 440346047 1280545636 s 1524259283 138048025 f 1811305118 s 406246505 425669051 d 207997039 s 1926249632 254833168 s 1624303013 291329611 s 1021890818 325794755 s 1915452425 1689810240 s 1994146752 321332677 s 308804800 761678725 f 1447717550 s 1908989338 1545478885 d 1504589704 s 1843823301 1651833127 f 716994189 f 1265428248 f 188135606 s 1195113268 1697278072 s 13079722 1543941176 d 133544359 s 1686816295 1677543151 s 80779954 1439048841 s 451084639 1845965105 s 1247058375 1542304758 d 1123721920 f 1018002543 d 295795156 s 213984582 1470490125 s 488632802 1483569847 s 1084613700 619503213 d 158856087 s 1790903657 239615815 s 537529229 690700454 f 671187679 s 1438580633 897697649 s 924396538 2120317378 f 1657490382 s 1492690948 1815964915 d 924612645 s 338857381 1241727770 s 1312915338 1536517444 d 976016309 s 1612715452 1717466682 s 1106879564 805863226 d 15785046 s 1266002326 1021356749 s 2106554025 191504020 d 1109132160 f 1904951636 d 762614172 d 57565456 f 1885761099 f 51236307 f 899061248 d 967300706 s 1516642870 1762073423 d 19962003 s 965138532 648659086 s 85115973 15109406 d 1549997846 f 1072706959 d 1591334847 s 876670373 1811749336 f 263456490 s 850597082 1375268155 f 1396766597 s 698180540 110586087 s 1324154664 1075724619 f 794167891 d 672644439 d 1101458630 f 180158834 s 289203011 1069625057 s 1879226760 456585348 d 674782083 s 113307033 1570892868 f 984923653 s 1941265402 1445744425 s 69508277 785100886 s 360344206 1041399512 f 2047112701 s 95238584 1400260416 s 1312132984 1689463427 s 45809424 1421206540 s 809760555 1095696064 f 641496474 d 1916532135 s 236924662 1169499169 d 1242713948 f 600276415 d 1504178789 s 2122094082 1502351329 s 2030518703 667000665 f 818531840 f 567996460 s 742569921 176583189 s 760312950 1714242397 d 1496668319 f 814230794 d 1875280654 s 1824027726 1022484049 d 230387502 d 327136128 s 702204269 1741214272 s 1195048433 1889450383 s 636105013 484536656 s 1286164691 1244849607 d 566922488 f 1369583902 s 204083517 894184767 f 186363420 d 577099515 f 142600549 s 19411806 709441267 s 1752387406 1904489700 d 1880409375 s 1997612140 1679275756 d 1864234279 s 1356620975 761017348 f 1612229699 f 183056013 s 1022883120 1553933898 s 2129007653 553180194 f 1548844536 s 1400279125 177495758 s 574746908 890462112 d 140610179 f 97142446 s 2038471142 651260960 s 1126104247 331084384 d 505182416 f 1379184502 f 114626371 d 2130226562 f 1216618355 f 947505744 s 518432797 2130932743 d 440346047 s 2017775808 1012041984 s 655364312 2138146232 s 258053681 1098584704 d 438023075 s 390620270 1201255804 s 713308883 727395781 f 1824027726 d 1183011552 s 349637056 1140284234 f 1116297019 f 1173947046 s 1259214310 1512178064 s 2092545080 1770231745 s 2023329658 243859948 s 2074451162 634480218 s 79949951 1347789101 d 212573491 d 786857743 d 955156141 f 1727681442 s 1787455506 1207881000 s 756303810 319611662 s 1863298346 264673095 f 1994146752 f 517479378 f 56329007 f 1071239973 d 203302648 s 1940227321 260147117 s 1905143863 1943312656 f 1678717854 f 1612715452 s 1542812883 2055403023 f 1895198639 s 1230577978 125405445 d 1973883112 s 1631468911 910265718 d 782615512 s 2045748721 1671120758 f 758380159 d 1963972036 f 1108776425 s 1385246951 1903075139 s 1904301208 2094098772 s 416390922 1177193103 s 1143450904 1934321997 d 1843073613 f 1746311451 f 611699267 d 1459594345 s 1870288995 1854129348 d 934317589 f 628956574 s 1144429773 1979576002 f 527921371 s 1586539787 1391934180 d 535291044 f 669615838 f 800624402 d 921756259 f 1341174626 s 1347436074 698822180 s 1720364191 1366729335 f 1874610755 d 1003222450 s 1028862720 1105513657 s 2068028905 1120746395 d 652366382 s 978568694 1046464964 f 1764866524 d 836517471 d 811185580 d 1262981361 s 1312713986 20484674 s 1359130289 1944503206 f 1382719068 s 1193379982 746427536 s 1995128083 976962591 f 162682365 d 1505503766 d 1039047010 f 1308860271 s 394929420 1291525721 d 515511032 d 40238935 f 2055625834 s 114270156 368328904 d 204213743 s 828227731 1027764895 d 280696833 f 277218448 d 1302417873 s 1127611211 1817920240 s 1296577964 223450164 f 74914592 s 1472500376 266246366 f 1615662266 d 1582600058 d 1712356081 s 133234271 1764181031 d 797666539 f 312736623 d 1357238871 s 1339029900 1197698972 s 286541141 536244715 d 1016841076 f 366259326 d 1655196944 f 759394309 s 1220539423 1764943391 f 426211414 d 775704068 s 153693685 1725345665 s 1072808867 916891917 s 67890566 1203433058 f 903049696 d 1717359927 f 1086435961 s 1267695812 2059259821 s 2117100958 1132315597 s 435719839 211642924 d 1428709469 s 1575447271 1417835353 f 1829624637 s 341141840 411051139 f 2087333993 d 433408086 d 616080936 d 830375062 s 950611988 496154565 d 1671246029 d 1115360256 d 689107563 d 7822647 s 60372726 1605511769 f 2090634610 f 225510738 d 35025048 s 2045728927 417804593 f 1816967550 s 135158913 1345846734 s 2105158276 20571684 s 1044332012 564629674 s 1401341101 408399074 f 1198623807 s 1065247916 1949180912 s 801231821 660547255 d 1012893652 s 770544982 1890256792 f 1492690948 f 401320277 f 1690367831 f 1556982923 f 2029160695 s 295220586 612109387 d 1191840690 f 228768262 d 364621698 s 450775561 1184376314 d 1775906004 f 1678929768 s 1651738114 317585757 f 458739304 f 1016792103 f 511851631 d 1626849514 s 429450007 1749254428 d 1710812802 f 1923870760 s 158783508 1371902056 f 34782305 s 1899714421 1490031652 d 2082970323 s 1871906651 2090990619 f 828227731 s 881630338 140757744 d 823502984 s 2041799847 1814653850 f 186736381 f 76605219 d 1064277022 d 360951703 s 697967804 1346508891 s 1619518064 1070931895 f 250965966 f 772144510 f 73903491 s 1369613771 992529116 s 1393624848 972572317 f 393289205 s 1566151766 1469795400 s 1102917968 1283524707 d 627158205 d 441775787 s 1789809133 185969875 s 383624022 1107867506 s 1265680303 305254169 s 570460687 1674867940 s 1689894922 921009140 f 87393577 d 1619518064 s 747144030 1162790682 d 591706479 s 1344012709 2059290024 f 562532000 s 1128448821 2085239531 f 152217857 s 1609361021 1773896873 d 235987786 f 1261628481 f 92194995 f 587700132 d 527872758 d 869685673 f 1791429072 s 1696415886 1471624 f 1347310187 f 55185030 s 558282112 1527116509 s 886587580 1230782252 f 1197950780 s 737996772 2007672080 f 1184628655 d 1137916376 f 1728405927 f 1714348491 d 655364312 f 1003936528 s 1100624211 1509535195 f 664430851 d 292638631 d 113162984 d 425201213 s 1557990179 1302852079 s 1448445274 81803076 s 211923173 1663888625 s 1124356345 1691897313 d 1757986223 s 579943028 322405889 f 203302648 s 308725146 1406739375 s 257887209 110134962 s 67237705 485284932 f 1792303934 s 662556077 1344236737 s 1037019934 1556159911 d 1016841076 s 792085684 1243608564 s 447263466 1823551592 f 924396538 s 877844899 1961219699 s 100966477 71623261 s 19337949 138860966 s 1415645898 1554698143 d 1289947609 s 453318086 1106790506 f 1162702161 f 1794116694 f 739311339 d 1476494448 s 1853146171 481671039 s 218514715 582637516 f 1483637403 f 200800108 s 806353856 1837459993 s 1007170494 143294431 d 1490331469 s 759188905 1043997567 f 79422883 s 1060041348 857127666 s 1627254271 562790189 f 1440526918 d 1359130289 s 904725033 1425097080 f 1364075779 s 971790997 1091137783 d 215271803 d 689107563 s 1989455591 317345767 s 1896051785 1377387116 s 1406474119 857157739 s 1398567492 717877336 s 1973298381 1031169168 s 1002521087 1935894201 s 2049365156 691783282 d 1102199249 s 1518816767 1663090404 d 1665423033 d 2138267828 d 740556695 f 1316581550 s 1845259877 1985897543 s 532219015 1811712277 s 841984927 666749716 d 823081342 f 1701754569 s 863195321 578666267 s 1185997268 1576611181 f 527921371 d 2001907895 s 830033773 749127163 f 1388985704 f 1530763226 s 2142136391 1821107335 s 431341510 102987959 f 1103710348 d 79068855 s 217062028 105407805 f 1441933082 d 2068835961 s 1808916705 1256739737 d 2043965698 s 1696732375 332379750 s 150333963 327032493 d 2129007653 f 1919814733 d 457935360 d 695131458 s 87591248 412205851 f 1384891015 f 1825555566 s 18684371 2131318721 s 2026027735 1680567449 s 717526211 1830901412 s 1230132022 1101586680 s 1845725793 61254478 f 1989455591 d 1312713986 d 2119890156 s 1878173368 1130209858 s 1935220119 1735937906 f 1897747354 f 975664522 s 1738518830 203208927 s 402755486 1433340949 d 1083844441 f 1269190946 d 826782028 s 1652645071 2005704762 d 1923145554 s 423238612 1524130953 s 2034983284 478170264 f 1307353359 f 629491059 s 1276340589 1725791952 d 641496474 s 869963753 969838819 s 614640527 209430624 s 1607520671 1862075695 f 1125236669 f 511851631 f 1282946700 d 2108214266 f 694375834 f 1027943304 d 1874590489 f 2087524773 f 1470923426 d 934363493 s 214471209 765373519 s 1681919116 1718002632 s 378530681 1423003329 s 1700796159 1634997887 d 2115495547 d 1878591794 s 203075791 2122525105 s 1414878125 470666802 s 1449035630 1081252276 s 1692623759 1564670060 s 1650803935 1779141269 f 2007185572 f 70785517 s 2067733587 1245419930 d 1993721759 f 641496474 s 1006777490 303539254 s 259989696 1718417379 s 562669732 1019969361 s 381974477 565109472 s 1325424601 68429759 f 2045588747 d 1624303013 s 573485885 1030698830 s 615862432 879555554 s 350424354 665141266 d 1438672132 d 206128178 s 253085875 347094537 f 496041554 d 1832529369 s 634426083 793774564 d 800624402 s 1464936688 1385884026 s 1824181982 2001746458 s 1741459183 204687164 s 1759199846 382415453 s 2080479763 362489133 f 514637547 s 737392772 75441706 s 67201605 306759286 f 265720554 s 438621603 1144813046 f 1116372579 f 268941470 f 402755486 s 1404589764 1492139802 d 2092509399 s 966002085 1250345680 f 1240344977 f 1847317074 f 607965794 s 1693572379 1959001857 s 1808353518 186286460 f 750291623 s 368979362 420947655 s 1928594502 1825537419 s 1723141447 971137293 d 799353791 f 1470104559 d 686312170 s 360686189 606990301 s 309199989 153079032 s 1402526836 1961432550 s 810636121 975483937 s 357709827 1344463299 f 2058313196 s 409876953 701231953 d 1259797878 s 1759834099 939230796 d 298589115 d 433736746 s 73894878 814991085 s 306172320 70034273 s 724736223 880670394 f 1169125586 s 743644766 876103710 s 641626636 1285980663 s 1510745799 1745663349 d 601029471 s 1456482857 2110770468 s 1106729588 1763906114 s 1363966620 1837800992 d 639928091 s 1998547650 721225888 s 1050812905 1244942555 f 442664835 d 548927238 s 898411534 1993476108 f 1359621004 f 1630884972 d 409050447 d 314922714 f 83434387 s 1714817705 1125587961 s 1285649805 28917218 d 965090201 s 1632694509 151335550 f 1254205487 s 731016654 310651815 s 363539553 1020764189 s 2106832920 1177705463 f 1406846192 d 355128980 s 1268137477 1731773141 s 888402559 869939298 s 1753610197 817317776 s 312437859 302528637 s 1501479479 611552544 s 389029911 1342569198 s 1292093497 1706108751 f 1257155016 s 1736036405 837039480 d 1807740199 d 1012210391 s 707980632 1067710503 s 853618005 673837052 s 328230407 986274911 d 505776306 d 1660770190 d 2032632894 s 1475847641 1246096302 f 377103004 d 1125980561 f 1476042946 f 76389738 s 1163545205 292669165 s 481679501 620899573 d 1022411141 s 334557911 1204951329 d 587550648 s 895268716 2051923 f 519899651 s 887592854 910561563 s 1287186954 1647445731 s 1866088997 15207120 s 1365217895 1178752326 s 1538183845 1660431827 d 1522422088 s 2049452662 2097332173 d 518360864 d 1682954138 f 1481672350 s 1028372978 893738256 d 1905143863 s 111032554 1899530559 d 2018829628 d 292638631 s 649986391 1057906062 s 484549275 959875076 s 1524063489 943172700 s 1089781984 881709437 s 657552403 2021581588 s 593071595 902470918 f 973059893 f 1383065558 d 1565725272 f 1170512684 d 210851378 d 1027641913 d 350424354 s 2060558352 1518535026 f 1415231691 f 1246370682 s 1481939862 2060827728 s 1204554684 1698539269 f 505182416 s 1271142956 1088980907 f 1279877457 s 233864808 498599542 d 2035854299 s 969931928 2142435531 s 1617519451 844799836 s 2139204914 490082791 d 209837968 f 2010725690 s 2105203636 1708310107 s 2085838210 831969415 s 1984110317 1055520267 d 1362786441 f 1648083303 s 1619930561 1315887197 d 293634711 d 1538657187 s 1957467163 46038267 s 1691480406 697743422 s 976549270 655463410 f 2131108736 f 718238356 s 1193180554 732967344 d 502214976 d 802840481 s 777669687 668843110 d 853618005 s 580715220 468140977 f 1289915001 s 1552015247 988687006 s 1039296741 800322263 d 651324386 d 768931155 f 1548893748 s 1965135654 1475742500 s 1996167077 105928539 d 839252122 d 1473826974 f 1199887481 s 1944286583 1077144806 s 643163078 2116441547 f 1701754569 d 1267468445 s 115103107 868364861 s 977285191 686016867 f 1797975733 s 980053910 1200338148 s 900275464 1313091042 s 1288637995 918997246 f 204083517 d 224074637 f 1734762983 s 1550918075 953817458 s 1710689697 1068920565 f 1378033459 s 378000490 1616711928 f 1212273859 f 177854913 s 2037578239 490712001 s 1253553752 32366615 f 506828079 d 1786543438 f 1380322132 s 458809611 902716750 d 341141840 s 1297470600 1587191084 s 447026177 2142646761 s 796919903 194411750 f 238743909 s 746919389 1338060093 d 362612749 s 111512447 398519159 f 1354890170 s 83560537 2108181181 d 1907460715 d 1733309843 d 1108776425 f 482547259 d 629491059 d 1700140470 s 1519698420 1698836939 d 1867021569 f 839085907 d 681667617 f 1465341293 s 714591154 1880973591 s 1136789009 1531799348 s 1554149978 384227375 s 18439050 1935298975 s 714718111 233275205 s 601573617 1752973625 f 1822839377 s 100821176 2103369627 f 1780761311 s 1110544920 1794271272 f 202364111 s 570957119 1498167788 s 1290655457 904834118 d 1710689697 s 1416792576 1637991279 s 1882571768 92081249 d 440732145 d 55215490 f 18439050 s 1021223607 1006977620 d 708627802 f 34323608 f 209837968 s 921574217 1417840052 s 1671919887 687148980 s 508057115 422237100 f 1131990484 d 34230535 f 445346234 s 1441447458 1171094335 s 415586949 1505331620 d 954444794 s 584791276 845116398 s 175827804 1766690615 s 690137500 1291126855 s 694954828 1799183970 s 791853405 748868291 d 877014810 f 95238584 d 1864234279 d 1290655457 d 272126342 s 928741046 1314874455 s 1361264214 1490702259 s 1064143786 33356111 d 1663241873 d 1660770190 f 1721671889 f 786040287 s 294864554 1503474725 s 61745857 124653328 s 1333958780 1286078872 d 1941622009 s 53195131 1428600484 f 2068028905 d 70367862 f 1337559135 s 1584378000 876581354 s 759046597 428175293 s 1203142396 723039847 d 1271796875 d 1427948249 d 1440505707 d 1758416174 d 967300706 f 1092086540 d 671015588 s 1750679176 899077234 s 396410567 1658123831 f 1897113966 s 1691825784 776928137 d 1212273859 f 409876953 f 1438896448 s 324826734 645211700 s 1754975810 1193044989 s 689590549 1582219049 f 377203887 f 2147054674 d 1775906004 s 1868282269 344806270 s 1238899214 339504882 s 580776997 2070638842 s 1238676198 1310577123 s 1118308300 1635403857 d 718942666 s 274820768 1932486569 s 1263830818 1327595512 s 1004434453 304804204 d 837526099 f 203522407 f 2066581524 s 236184913 832762769 s 659956419 2071438968 f 1590402186 s 573527616 1790257221 s 2045964055 2065077989 f 156221823 f 1643539428 d 506828079 s 310107685 514758908 d 1400279125 d 1797282865 d 708547005 f 1626506494 d 2048085391 s 409074118 992219990 s 875361491 1797872237 d 787199017 s 472964170 531342890 s 1863939196 841450575 s 120517131 1676272932 s 776564487 1227831194 s 117890964 1566764205 s 1530656409 1856165438 d 1966625338 s 1788520817 1993029222 f 1962451442 s 558288992 1242667794 f 1033017931 f 828227731 f 1016731024 f 2031685476 d 1885761099 s 1519549572 1830232855 f 625462376 f 30498851 s 725921788 670938704 f 1640846474 d 881907596 f 445346234 d 535068870 f 10276844 f 310107685 s 330877923 1818637559 d 480110513 d 683808110 s 965676360 556587486 s 1607370439 262759359 f 720153596 s 649275206 498110717 d 1433628430 f 19907635 s 1852544840 1838339142 s 328558170 21733417 d 1860009771 s 314517927 2036270670 s 1156219702 854463382 s 521376532 314350173 s 1115761059 1658598838 d 2102093477 s 1073093805 1546779657 s 1945662968 927920318 d 806220118 d 2098467792 s 2079803692 1596344037 s 1155415824 1910861964 s 61693654 919598018 s 1672042618 1440974551 s 1397667294 409251962 s 473616894 699661398 d 204213743 s 2021821194 1570934523 s 2138547293 2039878672 d 1010175377 s 1775443897 1263512032 f 796168908 d 1779628840 s 574603030 2005180481 d 2074518824 f 496041554 s 1097147248 1776658232 f 1542812883 f 1926247556 d 1448567442 d 1027266478 s 2087787105 1517321495 s 476598533 527977787 f 284783754 s 534391976 1407997112 f 20030560 f 2071175527 f 1240532390 d 2078204742 f 1352786969 s 282001018 737749181 d 1809973025 s 899231951 1154651171 d 606161493 d 440808801 f 2094297719 s 1379482514 275953411 f 1977071307 s 937927699 515343374 s 2110965780 814221239 s 429741228 1096222258 d 466557854 s 721943442 1376606765 d 402506988 s 395036247 2143968327 s 43386522 977675251 s 647078658 209674117 s 1155776255 1616623159 s 1468241423 407067210 f 254144456 s 380180310 800290571 s 285338351 617472159 f 429626357 s 458927235 1346615037 s 988964589 1741651284 f 2068329767 s 1721769668 284632816 s 726439678 1440409072 d 2006808675 f 1950617979 d 517479378 s 784368572 491973310 f 1724376514 d 537114006 s 1403388598 660930518 f 968234454 d 402400336 s 922704106 1807225637 s 1413117831 406732000 d 1053176043 s 1431145395 27647085 d 91100095 s 1890291955 225128953 s 1620533268 1791077385 f 835042145 d 638428482 s 1529508103 38242023 s 2122719065 960946129 f 1813485338 f 121310515 f 69881925 s 1662825761 1025339773 s 687708265 768148081 s 1073113111 241197701 d 1896051785 f 212082285 s 1926102763 1394058086 f 1781116313 s 1754568193 1230665307 s 831662078 1739340344 s 1598371681 574289615 d 1110541290 d 1093806384 s 1535634720 1850453104 d 1770419410 s 1237839835 534754873 s 1749245691 313373989 s 151409922 1250096648 s 1662003930 857181193 d 40238935 d 96533228 s 883823983 1384976027 d 194690427 s 860654522 477260520 d 1407059445 d 1356178502 d 565892315 s 369420693 184034782 s 1180887477 1846038712 s 1075535920 950249666 s 562041059 33846722 f 1288637995 d 662508686 f 1526365278 d 595667282 s 1648470333 177513249 d 2026027735 s 1664765324 1474181354 s 932212815 507585183 f 2026275511 f 1871906651 s 1528549420 620514328 s 1571761413 1393776624 s 556599206 947321749 d 1968362400 s 821302464 632589493 f 493835765 f 263629502 d 1039938926 f 586692960 s 1576153912 66718829 d 537723031 d 640906291 f 1869260019 d 175827804 s 1558506039 268661557 d 1863939196 f 1067875623 f 1162933728 s 1501096602 1302572067 s 1779480516 731242332 f 1737703047 s 804636054 462139197 d 1463857589 f 1790903657 s 2112007913 1109985721 s 671424401 424711020 d 1929872825 f 532145676 s 38919081 759862984 f 1519686336 d 8060168 s 1685651080 1104555205 d 1108776425 f 2048085391 f 1032989237 f 1560090024 d 1637745497 s 18468808 1204233589 d 1169125586 f 2102093477 s 1623535417 1305735753 f 1035989797 s 1710366374 888795428 f 634247287 d 246049063 s 1272965717 1394012938 d 2139310502 f 1878940341 d 193697880 f 524503790 d 2121693260 s 2037190961 1848132766 s 458653755 1411015492 s 932177542 41288421 f 770387478 s 1228122285 710880601 s 1686491908 2137412945 s 1791478734 170444508 f 263969645 d 1947057800 f 454830937 s 1688146502 2087059995 s 1202454698 398230102 s 1605558323 1330407644 d 952117212 d 285541384 s 837849658 1150546839 f 371285588 s 917842790 1747757426 s 1138517561 958378716 s 1221650209 1828636560 s 643292501 1369299414 d 696469497 d 1668976193 d 1808916705 s 885996345 699642028 f 853951784 s 175223610 1214462062 d 1413334148 f 2114035576 f 1390152814 d 1301371960 f 1492817714 s 516525163 905272554 d 1159180124 f 875361491 s 370258034 2126658542 d 853367047 f 304075474 d 1833071058 s 675386409 698336884 f 1966625338 d 242935131 d 1469306374 d 707190533 s 1587705705 1611381082 f 312941485 s 1461554704 1792541232 f 16043780 s 991673422 1720177263 f 1173285934 d 1530438567 f 650850679 s 952950760 1066421848 f 643292501 s 1003307211 1478329336 s 287652525 86730049 s 1698656381 1548284754 s 1116575094 635004567 d 944252240 s 1751550867 1351676491 s 306074434 7505397 s 1954286103 582446184 s 1510558070 1535396944 s 1638899145 1624146583 f 299990407 f 388632539 s 1527017227 318795405 s 129689079 1435370499 s 570990286 1035767387 s 584985108 639834607 d 1794366631 s 360109000 752711497 s 2118800896 115785919 s 648947345 1754685064 d 110719370 s 1116300487 1327581238 s 1102129951 707114817 d 497745610 s 510395660 1407794182 s 11225140 1992779290 f 1786332779 s 1723742479 1052464597 f 2135482174 s 1849087231 1672729190 s 8637366 742446614 f 1647634277 f 1180058155 s 2076206259 1302153927 s 1090031469 1812549587 s 1139624067 1823774727 s 1829051272 540022190 f 1067875623 s 1557467966 1134997404 f 551714085 s 1877369411 845238353 s 599099121 1640879650 s 648410068 1843663902 f 750657227 s 850581845 714934334 d 606493935 s 255474228 1536126026 s 1646665661 705546249 f 1698656381 f 1428893873 s 1960508393 1759234312 f 787197424 s 552097319 859259854 s 516916914 116612039 d 1111760120 f 37364542 f 1264808949 s 177645871 278488518 d 981202113 f 1816967550 s 635691975 1002176282 f 741061476 s 1849578025 807461083 s 825657481 1324377997 d 2047337645 s 890040105 1529231035 s 2060515163 558524177 f 2008097087 s 1736812636 30966023 s 969523242 1725393152 d 1058670966 f 1996435526 s 2042568172 337891032 d 1526129646 d 85115973 d 522544128 s 1888883928 1393259935 d 1769021258 s 91682534 1454737875 d 136910037 f 1332691326 d 1170512684 s 1029315728 1213869309 s 376729398 905389643 f 1427316502 s 533613870 994767745 d 1681919116 s 973302080 513465174 d 628956574 s 1327336939 1085058542 d 23020291 s 1081758310 1336745059 d 413622413 s 511781855 595306537 s 485545832 1643827602 f 733105058 d 485545832 d 1754568193 f 1652266384 f 540968657 d 1058782001 s 808907687 750425302 d 1888491075 s 123475927 816289900 s 219342521 1301835732 s 825166942 203850209 f 1023109316 s 467552006 1238713942 f 677848967 s 330699504 1599468323 s 576163825 1455585857 s 1816493711 117009896 d 386763578 s 746769797 1173484800 s 1990244771 1392827321 s 582580051 70510615 s 1352356804 348786077 d 1533331305 f 966177489 f 46529202 s 717307007 746011491 d 2106110376 s 84329007 513622915 f 510968354 f 570706172 s 887214155 1685733886 f 1071960890 s 965223687 295668839 s 670481446 304633243 f 2044942540 s 2056027439 1025874078 f 2010062139 s 1626772423 62066617 d 61745857 f 2135389863 s 532035515 1950181950 s 841519092 153894524 f 1061892931 f 501359128 s 2140668736 205636291 s 1476788652 114180082 s 1558920060 823333241 s 2056073022 302622016 f 520058013 d 1623302499 s 122405320 427153348 d 1860125860 d 1698656381 s 199587993 1447890377 f 88454817 s 725184047 770380469 d 1839364048 s 1441349290 90406255 d 1334904781 f 122884387 d 312057255 f 1775671049 s 956950534 1310944449 s 1866791082 1510532442 f 1327510457 s 1028856840 396335326 s 1900629771 416991366 f 618049750 d 1144868897 d 448052570 s 98214313 1564670128 s 2020268964 583414677 f 177854913 s 432766097 1259672645 s 1397393811 1530936637 f 501737879 s 536729693 165455952 s 1747146575 1613708247 d 441812847 s 1063597059 1515518094 f 1175986831 d 72888697 f 155595027 s 267075918 687828934 s 1952499282 2085222745 d 981202113 s 767016600 2130082132 s 789434288 1729745059 d 1957450176 d 1736547540 f 906124011 s 672706605 1759145514 s 929334724 1851330509 s 578844406 2118406427 s 1488026734 1923422062 f 1647120332 s 338123549 1704545292 s 1208524647 346495932 f 100821176 s 499013830 1612671121 s 968395410 464680636 s 904025748 1137387241 s 178690162 2066721965 s 1855901061 498082724 f 76605219 f 224242549 f 586692960 f 746528611 s 579703122 416119108 s 228474564 915132938 d 203302648 s 1002129861 640070449 f 402506988 f 1064323417 f 2028817231 d 1099272127 d 1874508787 f 746528611 s 1230643129 62752081 s 1581843558 291226645 s 1398231459 1714817185 f 1858296246 s 950272129 761794446 d 833650183 s 1976259399 2094490760 s 1503178382 834233573 d 579665837 f 1753610197 s 1285139561 2131705068 f 1532090726 s 539233811 816812789 d 859196696 s 820620850 1298901268 s 1026368382 1439383846 d 130019956 s 797887468 623854331 f 1400865743 s 160768982 436308452 s 1581169072 1721448013 s 916837595 1102326406 s 543732763 1641560218 s 1885445116 927710500 d 401513764 d 1571728859 d 669615838 s 721467418 1036913843 f 706902049 f 1368615282 f 366259326 d 736959445 d 1193379982 d 1058782001 s 1958001907 1702455147 d 168065376 s 958497123 2130395483 f 1900629771 s 263582415 433263800 s 1353808138 469463443 s 732858665 1714040121 s 1833357206 2003731605 d 2059358625 f 1320190957 f 966177489 s 1993220818 1487575272 s 550929328 298588747 f 297796410 f 1198623807 f 67237705 f 1092458586 s 602692603 486340480 d 864195629 s 1643481791 1665671713 s 1301130717 1433432811 s 513751141 1279169981 s 1455966835 1830099310 f 499892923 s 1863117500 359076465 s 1778404435 781853476 s 15671166 1867195234 s 2114461666 322404189 s 1922016475 214071334 s 339206862 1857553125 d 871534944 s 1947087802 1524951336 s 1391886912 833434523 s 1135274770 1067045240 d 1350591097 s 531253305 413599880 f 965090201 f 1884818285 s 2133504023 170781892 s 622880697 509988754 s 777929085 204885423 s 218926635 4489577 s 939094167 1396376490 s 1341877361 384167612 s 774940431 1860531590 f 1625086103 d 826229948 f 1718296761 s 2050886360 1608271550 d 2068835961 d 852623586 s 677798575 1080524320 s 1606716055 2019618487 s 1221584411 1214012201 s 1903498008 1988952632 s 1220607049 408548949 s 951315970 1549621926 f 1261628481 d 1652645071 f 2002057260 d 1587705705 f 2008097087 f 1808353518 f 1609513929 s 1852047069 1714879932 s 497046497 788003333 f 1460663207 d 10276844 d 608707338 s 601179505 470225162 s 555239992 1954277088 d 1266002326 s 1119597007 662591234 d 546319962 s 1575276574 1139766590 s 104107794 1636813088 s 1188971612 1023160261 f 76535780 s 852408006 2075131512 f 318007247 f 2080649874 s 2003235916 307481878 f 1812149559 s 688488866 20025928 d 721943442 s 1448666759 1699410297 s 1326715357 740898261 d 1146318924 f 1996435526 d 1614758802 d 1806581253 d 1887213756 f 568523684 s 1789957815 1277267973 s 851239109 1488405820 f 426932699 s 742664317 2116304288 d 1103868810 d 593630669 s 1204645429 953356278 s 1571518494 1038090772 s 874975273 1796032630 s 485913930 1664945025 f 91496274 s 434491295 11174654 s 940353620 1063461647 d 733428220 f 1204645429 s 717421737 333960304 f 1294137502 d 1591581948 d 1098309250 d 650776060 f 178742495 s 1837069 2134468905 s 362030428 927338877 f 800458406 f 565892315 f 488632802 s 1691046770 904575714 s 1968494640 1450247468 s 1136549633 1537586032 s 2100637257 778148702 d 312057255 s 76187156 1910035302 d 212204405 f 967737844 d 214758892 s 161854099 191314682 f 1240344977 f 390620270 d 1265520714 d 777669687 f 742664317 s 146997580 1156481805 s 1729985493 885328161 d 848196368 f 1750679176 s 1801854576 164396181 s 1514805291 2334319 s 2132331720 1054962228 f 632605497 d 354273483 s 1451555937 1490885290 f 1694382577 s 912619431 1220384716 d 253910647 f 953328919 f 784626236 s 607396147 273608231 d 636105013 s 557441485 163594624 s 2076588806 1526609226 d 458499811 s 1043911231 2131493372 s 1150459749 896629155 s 2142336428 1545638244 f 91496274 d 662789771 d 426932699 s 1032359288 829530740 d 1537644713 d 80779954 d 1081189303 s 1083675832 158865836 s 2098759816 1309325585 f 770387478 d 1228616211 f 1866088997 s 768072456 361405855 s 158630396 1393765143 f 328558170 s 1767737154 1202755587 s 959471599 761746657 f 550560741 s 988313243 1796698658 d 267742557 d 2138267828 f 1499148417 s 1831327375 1253163764 f 458280594 s 693638968 1219438799 f 1402526836 s 180535841 1799163904 s 1844461222 633567815 d 1986373181 d 1441349290 s 498246173 1410859362 d 2058430874 d 2045964055 f 390773064 f 517479378 s 2077407018 2033876371 f 36496443 f 770257770 s 1742122940 1283674931 s 1332118038 1640593231 d 473608741 d 940626983 f 935240036 f 1504636691 d 452294670 s 915672457 1400896745 d 1522422088 s 768142220 465773909 d 830375062 s 1013825279 1392531239 s 1165889182 2003120606 s 581328799 726149862 d 1243492377 d 2055625834 s 609692307 94161211 s 1289279027 1009833668 f 1887807209 f 1185398891 s 737496978 1800344495 s 270502408 666686126 d 232787915 f 848111481 d 427658153 f 2057784606 f 1516642870 s 1102960862 1081753323 s 1832403395 789528146 f 2029580034 f 356357611 s 1005985183 2138210363 s 171093475 1434827786 s 1339322372 1896399627 s 1086217484 1332607933 s 1027306559 954483297 s 481328660 581414722 f 1548893748 s 587528953 1369295332 s 2097704988 448088669 d 741085473 s 1769069510 392514688 s 1024126497 563608163 s 2111758791 1902930535 f 1671512577 s 1817713041 1868970930 f 942095987 s 974521601 232327916 s 1530916351 819856869 s 729355600 770078210 f 1539031817 s 1106880358 1424879074 s 1146481606 301521923 d 1882571768 s 1696772005 1584124964 s 2105241303 1254354358 s 1320710251 606750883 f 1080840821 f 1398567492 d 756015073 f 1932627951 f 1488527303 f 1136549656 d 1194663847 s 74112855 733176630 s 17552429 690934286 s 1829962933 2011644537 s 1697705733 981754810 s 1797776448 1433124337 s 570220385 440081155 s 112742532 598197581 s 1458557891 1294003118 f 2058430874 d 1261409350 s 2049547514 1818979315 d 657552403 f 1764680523 s 604069447 1069233115 s 378650969 719525915 d 844807888 d 873372496 s 146764698 713563077 s 601191190 647848106 s 1766078963 1506865844 f 2128422119 s 754356742 1938164668 f 1068825962 f 139847698 s 2045675979 1036678198 f 2035139510 s 1704709246 1410933760 s 204980390 1557698459 d 626593814 f 925525118 d 2045675979 d 2097166256 f 1650803935 d 1544322571 d 481450005 d 2087524773 d 2071847859 s 694464294 1326429501 f 398245804 s 934006350 1891741877 s 737083627 474501835 d 1335267278 d 721416301 f 608117160 s 1428130132 1217879252 s 2031997700 855297288 s 495513849 319994036 f 1957396003 d 826229948 d 1386080256 s 24254888 1028375930 d 928288214 s 1275390091 1634277871 d 809391208 d 1790903657 f 467552006 f 1761627507 d 1882571768 s 1180960483 1033001612 d 1012032330 s 884215974 7955703 s 1082474669 555655307 d 263817707 s 395960541 2123164511 s 736238002 1442891791 f 328230407 d 1677139456 d 1371983891 d 76605219 f 1135274770 f 997792519 s 640904142 996897758 f 1588178888 s 2047450676 1566535007 d 1576153912 s 1969675579 302200429 f 1754975810 s 259515074 1713927660 s 1287012639 18228894 s 1200028168 1427722450 s 1096744512 1938733333 s 1001416558 432153827 s 1461743912 2032934125 s 1605633016 1932901153 s 1725202983 1479789897 s 1140181093 1301981829 d 275664356 f 1218909893 f 1552015247 s 1394307041 363961056 s 1143869897 1460705568 d 519896450 d 1382719068 s 1152714065 1234531759 f 353619352 s 1661538835 1952432187 d 1807740199 d 1127611211 s 1339693561 707184966 s 1199963989 2101492008 s 340473219 1097878257 f 1607370439 s 783628526 1226989996 d 2063163064 s 1215256119 487960358 s 1729826741 2015545 f 1752268226 d 1653141795 s 291214692 1913931993 d 1648470333 f 1463857589 s 494209252 579117689 s 1255808766 1362746215 s 1646307023 1395737961 f 1638899145 f 1433628430 s 1508396854 1444749070 d 1723742479 d 2055625834 s 595022897 1482326036 s 1442602354 1529574253 s 1240576421 2023783505 f 429741228 s 1580015453 630931998 d 1906706514 f 631609513 f 1792944669 d 577376042 s 900038449 1745866919 s 1822722459 193406168 s 1564335156 1636008523 d 707067552 s 2092965698 1525902235 d 1020721312 d 576163825 s 1434136627 1210279141 s 2034633404 372084692 s 1932395604 115887476 d 1808908326 s 262006826 691164737 s 46063292 108016245 f 2035539263 f 1287371499 s 576696490 1307208610 s 1382184039 39218338 s 1794973329 1473354966 f 1689305549 d 458927235 s 314411109 958209427 s 1625333535 1220216253 f 1848745695 f 1549544241 d 1371983891 f 797837529 f 1521629705 s 1731441034 339517412 s 2111961043 1420748978 s 717082097 22620932 f 1259797878 s 1322508731 1962365576 d 1001416558 f 436674444 d 2130140575 s 729567007 529020906 f 366761061 s 197410617 526694809 f 1032951388 f 1002691182 d 1834294860 s 1698093088 1968853660 s 93133342 1571977936 f 232757577 s 2041746498 812455162 d 918334824 d 1963667044 s 119815990 1109570606 s 1481645383 1460125339 d 328230407 f 259515074 s 1621719809 955756495 s 283865785 1048889837 s 1890555819 803342979 s 1974370917 697605829 d 1981719343 f 139847698 s 11512549 829629238 s 2120408919 163790974 d 566565101 f 426932699 s 98566289 234255707 s 79636811 518121493 d 1013825279 s 601984084 88080933 s 383738061 25411433 s 1707514208 602206070 s 1795966696 613718619 s 846506142 586643891 s 1357170927 1012154089 f 354981174 f 115103107 s 1595817083 1129222970 f 1302417873 f 202364111 s 2012149993 1600146738 f 1923870760 f 127129776 d 432766097 s 152179452 864853769 f 1390152814 s 1678530916 1456938229 f 1450832182 d 1678717854 d 1776430066 d 3759755 d 1882465562 s 1610930159 30499240 d 930765788 s 579986308 1158481442 d 2100406801 d 2129007653 f 1016200389 s 1231523048 642446494 s 397071627 234544930 f 572380564 s 613649228 809956022 d 747625111 f 1568971177 d 663560712 f 1917058634 f 413622413 s 1199684386 226994415 d 590586864 d 909498825 f 152007296 s 115360956 1100783554 s 790667979 561746779 s 1496474242 1826167994 f 389029911 s 1784204894 563352100 d 1252026871 s 326752052 1862704241 f 652379734 f 1353808138 s 1991829668 351280700 s 1051794972 466641656 s 921716299 1257309635 f 1549544241 s 1210161018 1667399076 s 1937065184 1304120323 s 1394517603 136548999 d 114251286 s 2072058507 122771786 d 29064249 s 1306766900 1749237368 d 862806788 f 775975736 d 984493792 s 950493148 1702982521 f 115103107 s 31915293 739598013 f 1386080256 s 717949841 1210221897 s 617545215 1971840055 s 1213601489 1131123308 s 13454816 1322689628 s 1427433448 1499838923 s 1951238067 76834324 f 1856553765 s 1583879544 163113819 s 1390536496 195029113 s 1333742447 1786093208 f 907668379 s 122044590 974104616 s 408731078 40222458 s 297171286 53677274 s 839160186 1481110722 s 808930430 1284865141 s 1271522177 71240761 s 1289612798 1655120305 s 652783828 898173154 d 1895290738 d 928741046 s 447639636 1946725993 d 694275723 d 428727725 f 584211097 s 498336101 5751678 f 1117568197 s 1547722825 419403005 s 601710095 1072186834 s 1998210126 1827739706 f 2068028905 s 130021414 124381001 f 1000158494 s 606823794 829832148 f 1692839423 f 959230853 f 344104406 s 349951187 1801913952 s 859510515 256140400 s 119759349 106866878 s 1611923785 992702948 f 989148978 s 1602406863 1471035737 f 61745857 f 1689305549 s 1044284108 1414219626 s 1928579701 762248143 f 1463857589 s 228670659 1971709846 s 1734346299 2091469195 s 772794350 1555909332 s 1635467413 42228012 s 475037829 1644634875 d 1427316502 s 679073560 294392593 d 1099272127 f 1544564933 s 1860668850 914954608 s 1277538920 1143625267 s 950549390 730487919 s 730426739 1503282269 s 1503007035 991266034 s 1250828046 1466303863 f 857730831 s 1471433776 160033395 f 1594826225 d 1841414479 d 1133481903 d 420686294 f 627158205 s 742488643 1077492235 f 1907796936 d 695167308 s 830973597 2006044814 f 1665423033 f 1662699743 d 1454523328 s 564273735 1266098817 f 533613870 d 2001642040 s 1211472896 1155949644 f 532219015 s 934719368 1042548997 d 1384713694 s 1915315787 394003418 s 158643662 1193351357 s 1151985379 1315275817 f 2057516328 f 1119158720 d 1209148278 s 835484036 845172246 s 1322152408 348893537 d 58379871 d 230387502 s 865001952 588499056 s 362118428 747142719 s 364318328 1899128098 d 1682665882 s 1378393065 519477143 s 1876243926 1945785043 s 640072140 633785432 s 559849998 1955937840 f 1407059445 s 1281782458 453203716 q tla-1.3.5+dfsg/src/hackerlab/tests/hash-tests/unit-hash-utils.sh0000644000175000017500000000034210457621774023273 0ustar useruser#!/bin/sh # tag: Tom Lord Tue Dec 4 14:54:34 2001 (hash-tests/unit-hash-utils.sh) # set -e arg0="$0" srcdir=`dirname "$arg0"` echo ================ unit-hash-utils tests ================ ./unit-hash-utils echo ...passed tla-1.3.5+dfsg/src/hackerlab/tests/hash-tests/PLUGIN/0000755000175000017500000000000010457621774020700 5ustar userusertla-1.3.5+dfsg/src/hackerlab/tests/hash-tests/PLUGIN/REQ0000644000175000017500000000002610457621774021250 0ustar userusermem-tests hash-tests tla-1.3.5+dfsg/src/hackerlab/tests/hash-tests/unit-hashtree.sh0000744000175000017500000000044210457621774023017 0ustar useruser#!/bin/sh # tag: Tom Lord Tue Dec 4 14:54:33 2001 (hash-tests/unit-hashtree.sh) # set -e arg0="$0" srcdir=`dirname "$arg0"` echo ================ unit-hashtree tests ================ ./unit-hashtree < $srcdir/unit-hashtree.script | cmp - $srcdir/unit-hashtree.answers echo ...passed tla-1.3.5+dfsg/src/hackerlab/tests/hash-tests/unit-hashtree.answers0000644000175000017500000015514010457621774024074 0ustar useruser574871803 => 1300114889 574871803 => 1300114889 574871803 => 1300114889 1103710348 => 23052624 265759667 => 442077360 574871803 unbound 97896931 => 1602526715 265759667 => 442077360 990010693 => 22924464 368684587 => 1092030204 1806769422 => 418247782 755224049 unbound 1813629828 => 272063888 5897344 => 1341587204 1806769422 => 418247782 1076993510 => 680841854 802840481 => 1248080724 435861424 unbound 1812907612 => 1939212311 1258370457 => 537109392 97896931 => 1602526715 672690002 => 1413829557 871486206 => 1814065986 990010693 => 22924464 1076993510 unbound 1100116287 unbound 1286558117 => 980947526 1813629828 => 272063888 196979170 unbound 553492015 => 1279080333 1258370457 => 537109392 2016006920 => 2134427741 1415231691 unbound 368684587 unbound 2016006920 => 2134427741 1075848536 => 771944254 1076993510 unbound 672690002 unbound 1483534316 => 1101261181 1164363162 => 1127349441 1508107084 => 1170553839 1075848536 => 771944254 886108552 => 997050085 913775893 unbound 435861424 unbound 1286558117 => 980947526 696471478 => 2000572225 1100116287 unbound 961737265 => 1255545031 1076993510 unbound 1415231691 unbound 1089050664 => 1876902670 776355132 => 676157572 1700761914 => 116545256 946992430 => 1079284882 1700761914 => 116545256 312447285 => 1206960355 1715766627 unbound 913775893 unbound 441775787 => 1998573178 1812907612 unbound 133309160 => 1920518252 672690002 unbound 523885624 => 1761282210 1103710348 unbound 2041531514 unbound 1400787957 => 131916459 85603973 => 40244543 696471478 => 2000572225 1100116287 unbound 20679664 => 1267649230 856352200 => 532289667 336441455 => 1566096902 1076993510 unbound 1950674415 unbound 312447285 => 1206960355 886108552 => 997050085 1185221381 => 1110396590 1724958505 => 1747864201 1743018745 => 1957047027 1258370457 unbound 2092166661 unbound 1743018745 => 1957047027 1882780783 unbound 336441455 => 1566096902 81193735 => 1874026116 909498825 unbound 253377824 => 1889919032 1286558117 => 980947526 961737265 unbound 435861424 unbound 682285011 unbound 1483534316 => 1101261181 2123462953 unbound 1950674415 unbound 381537891 unbound 1035989797 => 1609800714 368684587 unbound 966180373 unbound 776355132 unbound 1099492502 => 2063799951 2114734422 => 1482070517 97896931 => 1602526715 909498825 unbound 1678871888 unbound 1139779641 => 1046080911 946992430 unbound 546757933 unbound 2000054130 unbound 26088260 unbound 1987431015 => 1322826449 196979170 unbound 410135224 => 2071939073 429652531 => 1814537527 2016006920 unbound 1348151311 => 571945069 694375834 => 1654927280 1462209630 => 1814807348 2053651256 => 981868198 1518546560 unbound 1743845864 => 40719995 1468509334 => 387187794 973770262 => 1754128351 917695122 => 109946557 886108552 => 997050085 358079583 => 641682131 1442809223 unbound 1365781503 => 1276185069 1723335948 unbound 733192277 unbound 1468509334 => 387187794 1842119091 unbound 2006808675 unbound 458715300 => 2101176604 1978624715 unbound 1367850756 => 1575798345 1319242808 unbound 1032951388 => 1206459109 1103868810 unbound 1089050664 unbound 932944303 => 2139216323 331182834 unbound 659229259 => 750636200 778315902 unbound 121310515 => 1145680133 1542702484 => 6802956 81193735 unbound 1813629828 unbound 275238771 => 470512191 1170512684 unbound 1642624976 => 626550275 1662946795 unbound 616080936 unbound 1662946795 unbound 1053834421 => 1870280932 1830175657 => 1880502861 755224049 unbound 144371132 => 909615086 672644439 => 1941578997 1468509334 => 387187794 220804677 unbound 917695122 => 109946557 6853088 => 1144294291 275238771 => 470512191 2136959076 unbound 597270789 => 1503561261 1629721921 => 1720056273 694375834 => 1654927280 441775787 => 1998573178 1665423033 => 741682044 1605543104 => 1945244580 597270789 => 1503561261 1319242808 unbound 1139779641 unbound 1397678291 unbound 1196547176 => 466278218 546757933 unbound 227556613 => 1016972237 1103868810 unbound 1812564460 => 1714799229 1192684571 => 1229844933 358345617 unbound 312736623 => 1425903646 76389738 => 1123270312 632616859 unbound 1842119091 unbound 1100418174 => 535237778 1626506494 => 458035143 2011984833 => 1402627666 1781116313 => 1015695472 5897344 => 1341587204 1114217915 => 2015903441 20679664 => 1267649230 787678191 unbound 1002691182 => 786220298 1963667044 unbound 953328919 => 178903741 1342699748 unbound 2114734422 => 1482070517 2109995081 => 1070289682 1254205487 => 1453329776 568523684 => 1940847549 935130086 => 547293948 1978624715 unbound 516817846 => 1648578000 1723335948 unbound 407765789 => 1674776116 1441494503 => 1641192844 1090233506 unbound 1002691182 => 786220298 1342699748 unbound 1709950581 => 1942992589 597270789 => 1503561261 1032951388 => 1206459109 1076993510 unbound 262540809 => 682264678 1519686336 => 313232862 880302635 unbound 1834026688 => 1679373759 1648083303 => 81515432 183667728 => 945805151 1177457394 => 422796945 961737265 unbound 1550063878 => 1767289998 1186584547 => 347054794 1032951388 => 1206459109 1727839343 => 36349916 1196547176 => 466278218 587387785 => 324804360 1748407201 => 50305850 753780953 => 1243159580 580723192 => 1479911574 1812907612 unbound 1070012108 => 809026663 2019477074 => 1401810949 653165472 => 926181221 1243897858 => 1367059375 435731120 => 1549509266 5233958 => 713949699 78415438 => 894782302 496041554 => 730850052 1090233506 unbound 586591644 => 192888782 1775016194 => 953779629 1185221381 => 1110396590 1089050664 unbound 1518280274 => 1427706219 1076993510 unbound 885639959 => 517313199 1818916643 unbound 1321108452 => 65811405 1100116287 unbound 565142395 => 25470775 1539031817 => 399876174 1916314325 => 1954222882 2008763249 => 707824334 460659397 => 710151316 639961074 => 1292461339 40000277 unbound 1166206311 => 833822184 1572787519 => 1919774231 196979170 unbound 560949389 => 2041234204 629463339 => 997212949 470694053 => 1145667925 840080489 => 1427387984 1778431363 => 466907040 1138723734 unbound 659229259 => 750636200 1963667044 unbound 298589115 => 1722772354 1298582462 => 1844522101 886108552 unbound 944534279 => 1293780500 1948542671 => 1781200535 917695122 => 109946557 574871803 unbound 392294552 => 2128618334 1200100805 unbound 977265470 => 85924834 1648083303 => 81515432 97896931 => 1602526715 516817846 unbound 1348151311 => 571945069 97142446 => 1316780726 1993923693 => 1696102591 1519686336 unbound 1281886923 unbound 55400004 => 1167141009 963019655 => 1302334838 1589932980 unbound 562803006 => 666707719 354981174 => 921099118 336026037 unbound 1070012108 => 809026663 1080962721 unbound 1185221381 => 1110396590 1384891015 unbound 839085907 unbound 1448756918 => 1695000888 1197574894 => 1992016102 1729528549 => 1671555772 458715300 unbound 2084701070 unbound 1303374776 => 1325667866 725716895 => 931239200 20679664 unbound 2121627909 unbound 312736623 unbound 1192684571 => 1229844933 128195590 => 382718951 1139779641 unbound 1010175377 unbound 558641723 unbound 1858660412 => 495633258 1556030748 => 561623357 116269053 unbound 1192684571 => 1229844933 1463857589 => 546218699 1032951388 => 1206459109 996308620 unbound 961533763 unbound 1384891015 unbound 1127003765 => 1166090011 725255512 unbound 1589565706 => 248654741 1002691182 => 786220298 1089050664 unbound 6853088 => 1144294291 1764637395 => 369544253 1732652564 unbound 2044641252 => 61935915 370135874 => 672604995 516817846 unbound 1173530427 => 1833234937 510323098 => 872866227 78415438 => 894782302 1700761914 => 116545256 460659397 => 710151316 595581284 => 1911860884 946992430 unbound 1070012108 => 809026663 1813629828 unbound 4112207 => 537642779 354981174 => 921099118 207997039 unbound 1899036623 => 1428980484 81193735 unbound 935130086 => 547293948 1813629828 unbound 1035989797 unbound 187876264 => 1478442793 845960442 => 1794420857 1662946795 unbound 1196547176 => 466278218 1820457035 => 1849086480 590586864 => 918045171 1962451442 => 269465281 481858392 => 33022095 1340169228 => 1516493555 1985605984 => 114469675 2044641252 => 61935915 446364654 unbound 977003444 => 1759027001 258263319 => 2015104790 384898540 => 1255717034 554774997 => 1893477212 1743018745 unbound 1813890766 => 939605968 2044641252 => 61935915 1360294964 unbound 565142395 unbound 947505744 => 554109560 481858392 => 33022095 912953200 => 721907141 2016006920 unbound 1874610755 => 1075023605 1732652564 unbound 312941485 unbound 1239695342 => 1097512608 1986373181 => 843123519 1360294964 unbound 2000505727 => 502733893 1605511348 => 1106158673 1992666030 => 794508366 886108552 unbound 354981174 => 921099118 1263621758 unbound 1829004036 => 337391063 1367850756 => 1575798345 880302635 unbound 1842119091 unbound 308867395 => 1016339805 1382876361 => 1245824431 1820457035 => 1849086480 819497510 => 925224266 2054274026 unbound 1709950581 unbound 1605543104 unbound 694375834 => 1654927280 1689889376 => 1160468353 1184628655 => 1328769578 160058990 unbound 565142395 unbound 1094207061 => 500870079 977003444 => 1759027001 814230794 unbound 399364339 => 1253294170 992056371 unbound 1100116287 unbound 1012854867 => 2136718802 1127003765 => 1166090011 636675352 unbound 232787915 => 1787273750 1186584547 => 347054794 212904633 => 1886422140 1626506494 => 458035143 1199887481 => 1259122530 733192277 unbound 1157065811 unbound 606161493 => 817047532 784405532 => 392312880 1755364355 => 1479130376 663544617 => 95541496 255073758 => 576575636 2087524773 => 1347256873 188135606 unbound 1899036623 => 1428980484 312941485 unbound 1090233506 unbound 2045353675 unbound 856352200 unbound 1813629828 unbound 1440382673 unbound 779911536 => 1303708976 1429914420 => 1202269583 1086435961 => 1232978819 613860619 => 1947396482 915937729 => 718623564 755224049 unbound 1756351927 => 104347842 1700761914 => 116545256 671996068 => 1880508974 1841428414 => 822321698 1476891439 => 57735559 2076747909 => 785350248 1966858227 => 1624380851 1197574894 => 1992016102 1919814733 => 642144521 934656313 unbound 595581284 => 1911860884 823365587 => 43839095 1781116313 unbound 837779273 => 1742390532 1727839343 unbound 1435487282 => 205002091 354273483 => 427472876 1900113382 => 596164058 630581511 => 1162551752 516817846 unbound 186060079 => 768911835 1229321358 unbound 174160099 => 1891706195 2041531514 unbound 1525658314 => 226540400 326451557 => 1900678029 510323098 => 872866227 939796050 => 1114903048 1930266160 => 728579422 1068646963 => 236325496 961533763 unbound 2079303358 unbound 963019655 unbound 1398613763 => 1768946827 1429914420 => 1202269583 1376514591 unbound 1384891015 unbound 733107653 => 384283590 5233958 => 713949699 2141287011 => 165873931 1874610755 => 1075023605 1950674415 unbound 885639959 => 517313199 446364654 unbound 802840481 => 1248080724 1454689588 => 1483453231 28927113 => 1404880535 2014356088 => 54476922 1125236669 => 441897104 2105744556 => 140164900 2115665734 => 826501343 193697880 => 47429787 966180373 unbound 1056608080 => 770575261 639961074 => 1292461339 172329495 unbound 516817846 unbound 932944303 unbound 952797880 => 2142156548 874638455 unbound 886108552 unbound 823307725 => 247635199 1758416174 => 652296528 1160459167 => 1014333368 2024601536 unbound 1589932980 unbound 1596813160 => 379893556 6853088 => 1144294291 1382876361 => 1245824431 966180373 unbound 1263621758 unbound 117774216 => 318589324 117774216 => 318589324 1413024337 => 93801400 1985605984 => 114469675 312941485 unbound 565142395 unbound 828403761 => 2017507842 2114734422 unbound 2098467792 => 218462372 1894944405 unbound 671996068 unbound 1319242808 unbound 1222903378 => 351208145 2021499542 => 268312156 1391900752 unbound 1611952622 => 1279211568 816423825 => 1535212151 1081189303 unbound 6853088 => 1144294291 1935431277 => 197624321 2136959076 unbound 1483534316 => 1101261181 2128422119 => 1817433730 1626506494 => 458035143 574871803 unbound 1728405927 => 1859812735 204412659 => 1834719000 120316023 => 392467421 1183134786 => 243823932 244330535 unbound 621899500 unbound 830375062 => 464260977 1122745906 => 1789662903 659229259 => 750636200 1796025948 => 1885384714 383998773 => 766861589 1348151311 => 571945069 628864535 unbound 1345672054 => 585668246 1254675740 => 633278500 188135606 unbound 1744865853 => 232559289 568523684 unbound 299990407 unbound 640569199 => 887440566 179852647 => 2079412769 802840481 => 1248080724 1627047785 => 1964268668 947505744 => 554109560 2021499542 => 268312156 275238771 => 470512191 172329495 unbound 1825434345 unbound 463411374 => 899764368 1681243989 => 1989412159 275238771 => 470512191 1575792370 unbound 1267962751 unbound 1184628655 => 1328769578 697678287 unbound 417596927 => 17375375 1956799398 => 1949750862 1611952622 => 1279211568 2011150800 => 506449786 1599473994 unbound 850894465 => 1457293498 299990407 unbound 2066581524 => 2117471081 1281167264 => 1363386153 260996276 => 1780194943 1442687778 => 1523590052 1074093035 => 155853606 121310515 unbound 1384310243 => 1655401751 1894944405 unbound 1454461214 => 808994270 587700132 unbound 1265428248 => 1853080702 1157065811 unbound 1106529896 => 1245317478 224555604 => 321455948 1465410327 => 1804832369 1450208095 => 493432255 1201211476 => 629080436 2022702369 unbound 1571753202 => 107107490 1887213756 => 1430704858 1252540269 unbound 1985256759 => 649655039 1477997924 => 777055354 40000277 unbound 215271803 unbound 210120727 => 1349567479 73903491 unbound 1423767617 => 1729623816 2084701070 unbound 1518546560 unbound 1752268226 => 1922316281 1589932980 unbound 632616859 unbound 366761061 => 1969182968 272126342 => 2028945646 1281886923 unbound 1477997924 => 777055354 314460252 unbound 1442687778 => 1523590052 629272091 => 622240593 1815006071 => 270518038 1262981361 => 1147171823 10276844 => 489124323 537114006 => 780430135 1281886923 unbound 379097089 => 629646685 458178218 => 1105328409 1460961505 => 1486600478 1690551138 unbound 1337249948 => 734049855 558641723 unbound 1175243696 => 1628841064 2070094984 => 589390685 1273391237 => 391417416 158606651 => 567712722 89813399 => 645482460 1373645319 => 1193487085 97142446 => 1316780726 1820457035 => 1849086480 2088867647 => 793596235 881651259 unbound 812717112 => 2144460858 1201211476 => 629080436 769657987 => 1836926813 575670525 => 1401447182 1186445439 => 4446790 1186349214 => 1360728446 1620028266 => 1864282613 367921121 => 2134963462 707753655 => 1487877856 1729245925 unbound 1992666030 => 794508366 1116297019 => 1504224471 193697880 => 47429787 811371789 => 1437550019 1795049278 => 316122731 1704487380 => 7345129 805764752 => 1012493245 11919910 => 353759205 1720420041 => 1037376309 990010693 unbound 966960559 => 1958764604 285897140 => 1054250755 1894944405 unbound 1257812463 => 74107595 818240070 => 822736527 554774997 => 1893477212 2021499542 => 268312156 1753487260 => 1140220101 299990407 unbound 991387042 => 509221379 1778431363 => 466907040 516817846 unbound 1298582462 => 1844522101 1782266659 => 1377128903 626993292 unbound 1666394338 unbound 1115614635 => 236784354 671996068 unbound 2062374306 unbound 206749021 unbound 1811003743 => 26160685 1815006071 => 270518038 20030560 unbound 2000505727 => 502733893 2079303358 unbound 206749021 unbound 1266641923 => 1449148707 1953503741 unbound 1146318924 => 1503581578 1483398195 => 1545913775 83434387 => 988212728 1226903356 => 1228058919 1800134921 => 221305896 255073758 => 576575636 558641723 unbound 1571753202 => 107107490 5233958 => 713949699 1830486041 => 1722806700 426932699 => 2012089400 1035289334 unbound 1071082508 => 607282142 1259797878 => 566559972 1969775622 unbound 2128422119 => 1817433730 102560142 unbound 212417943 => 1021719676 587700132 unbound 1056608080 => 770575261 1668976193 unbound 76389738 => 1123270312 270989623 => 560277212 1987961704 => 1777157640 1295343930 => 1679296504 881475080 => 1595917362 1978624715 unbound 1555768538 => 2084374349 629272091 => 622240593 80554228 => 2133136118 1144868897 => 1415489076 1839909035 => 1540809047 83434387 => 988212728 507906058 => 38532529 493835765 => 2140740362 1637745497 => 760982001 671996068 unbound 575306527 unbound 55215490 => 994247504 1170512684 unbound 314460252 unbound 966180373 unbound 2082854772 => 1510529488 1440526918 => 2022850440 1359621004 => 1405329396 1072706959 => 76128944 188156611 => 680471181 1026868381 => 1101504638 1048636597 unbound 588992834 unbound 1456389778 unbound 1602051464 => 519014802 837049023 => 1757804069 902003259 => 708693060 1347601566 unbound 968042541 => 222669687 1812564460 unbound 562543194 => 1718359470 1068646963 unbound 552530647 => 1495658900 1186445439 => 4446790 492498129 => 1480537886 1602051464 => 519014802 146434781 => 2145947090 1821370751 => 402625242 1813870522 => 906995403 810118767 unbound 955870688 unbound 884906635 => 1161333959 1203060997 => 1912734509 2006546436 => 1294721056 1209148278 => 1350824183 631609513 => 1851569620 1190239095 unbound 725716895 unbound 1599473994 unbound 1243237309 unbound 1592422533 => 154167015 973770262 => 1754128351 1189745904 => 81354327 1427948249 unbound 1270915348 unbound 1173530427 => 1833234937 1668976193 unbound 1044335275 => 1975096664 1124852818 => 1757680586 1756351927 => 104347842 1332922758 unbound 1124852818 => 1757680586 298589115 => 1722772354 1966858227 unbound 949748397 => 1043544118 1634442346 => 1591567261 1464685197 unbound 1440382673 unbound 1681217220 => 1376802489 1457842807 => 413240284 828403761 => 2017507842 1747042941 => 943726277 2131013338 => 711667136 312941485 unbound 967300706 unbound 544810431 => 1262476125 2028216559 => 1056711937 131014307 => 433849238 1277707057 => 1725260189 566565101 => 730640260 1163472568 => 1097599976 2058989221 => 404408892 1990654789 => 226260687 800458406 => 908672698 1190239095 unbound 1778431363 => 466907040 756191814 unbound 1996449297 => 1830995567 1743197075 => 759282547 186060079 unbound 527921371 => 1917992199 606161493 => 817047532 55185030 => 212899891 1753487260 => 1140220101 966180373 unbound 331182834 unbound 1743018745 unbound 1897751709 => 882063552 818240070 => 822736527 292982753 unbound 1037365755 => 1480067823 1372987455 => 2023620978 1309248319 => 190490608 1813890766 => 939605968 79068855 unbound 685517241 => 318254145 1648083303 unbound 707190533 unbound 621899500 unbound 1555684150 => 849174831 917695122 => 109946557 1257812463 => 74107595 1080962721 unbound 963019655 unbound 325145456 => 1443855135 1229321358 unbound 76389738 => 1123270312 91970555 => 1003682850 756191814 unbound 1968382820 => 1738292795 381537891 unbound 629272091 => 622240593 73903491 unbound 996308620 unbound 839085907 unbound 444613733 => 77999946 1541225260 => 294041146 1963519188 => 1982440827 1440526918 => 2022850440 695044142 => 1990484062 597270789 unbound 1657490382 => 252735950 1184177318 => 1787192172 519174654 => 30736577 461608582 unbound 28922692 => 1693755814 2036353260 => 938746933 1569835199 unbound 1425841647 => 726219840 400532447 => 140537897 1662699743 => 1899830429 1056608080 => 770575261 1319242808 unbound 2076747909 => 785350248 1657490382 => 252735950 7374145 unbound 20679664 unbound 591706479 => 1565575670 1265580096 => 146606677 435861424 unbound 1363871179 => 1396588673 2011984833 => 1402627666 696471478 unbound 736959445 => 1455561474 562803006 => 666707719 1434296159 => 571215203 224555604 => 321455948 1648083303 unbound 532312064 => 1682132357 1842372251 unbound 1469454945 => 162778116 1717098862 => 1183653967 989495058 unbound 1146530226 => 528248880 2136809711 => 1595030877 874785057 => 2110403184 5111368 => 70109061 411579116 unbound 1185221381 unbound 819497510 => 925224266 1197574894 => 1992016102 1534632847 => 945198907 1180058155 => 1041611430 15785046 => 1030777189 976629108 unbound 669615838 unbound 733107653 => 384283590 1337249948 => 734049855 2126474053 => 1596526311 1166206311 => 833822184 746528611 => 417908216 1033847196 => 737000932 304731390 => 227671081 1567204602 => 1180948089 10276844 => 489124323 538390768 => 1959389531 253377824 => 1889919032 1056488189 => 548147974 818240070 => 822736527 56353640 => 336276677 1720558017 => 1117236234 885639959 => 517313199 2117713636 unbound 961012465 unbound 214758892 => 1527046435 498176362 => 59142054 977265470 => 85924834 1384891015 unbound 755259890 => 1671114098 1018879177 => 1773384927 805389053 => 553122404 1157526150 => 1522884575 694275723 => 958609517 360474843 => 758691245 1084392858 => 1014635702 1092458586 => 1103432511 597361352 unbound 207301726 => 185871809 1306073052 => 1757124470 428727725 => 1000039770 1996054019 => 1850550463 620646231 => 1863890873 1103710348 unbound 1298844850 unbound 265759667 unbound 1468838606 => 1105019672 1035289334 unbound 1690367831 unbound 1775463057 => 1689911192 69063919 => 1033104151 2044942540 => 97902048 2024601536 unbound 913668703 => 569626605 1026651051 unbound 1963519188 => 1982440827 940626983 => 246300443 1624366102 => 583649741 1969754223 => 1031160208 1425841647 => 726219840 839252122 => 1730744929 36738229 => 540856817 1104321155 => 400972224 444613733 => 77999946 2008379711 => 1548811471 906873586 => 43940510 463411374 => 899764368 765642540 => 1505358639 1524103629 => 2108983020 1379145597 => 1615807510 955798003 => 2137624927 987822801 => 897352181 618538220 => 351608463 2102703941 => 1860487530 408158141 => 5601909 618538220 => 351608463 1590402186 unbound 265759667 unbound 1659739999 unbound 1499621190 => 1176397208 957235695 unbound 588992834 unbound 1753487260 => 1140220101 2136722550 => 1989071790 1174464774 => 828995256 1362786441 unbound 823365587 => 43839095 1379656416 => 1395483483 1383534475 => 662341464 627158205 => 1116459497 1026185842 => 1396740705 713482757 unbound 428727725 => 1000039770 2084850500 => 2076846933 1529236860 unbound 407765789 => 1674776116 662508686 unbound 871920181 => 1522592417 1116297019 => 1504224471 287188290 => 868570450 1832529369 unbound 1414678853 => 562195939 1228616211 => 645046940 1842119091 unbound 2115665734 => 826501343 2044014697 => 580088280 977265470 => 85924834 827188883 => 1137999539 1980826540 => 1595589603 1219941035 => 575482052 1990654789 => 226260687 96196764 => 2004151634 2002896417 => 354516401 1308234666 => 371142721 1378033459 unbound 1454523328 => 1484168833 856373109 => 85010292 1805168103 => 952962094 1876558999 => 1581098606 1957396003 => 748278907 1440505707 unbound 458739304 => 1547384007 1968607146 => 638139884 871920181 => 1522592417 1015705824 => 1906727003 2094297719 => 833042797 1539031817 => 399876174 587700132 unbound 984493792 unbound 600853852 => 2075400137 1968382820 => 1738292795 674298687 unbound 202464318 => 242699481 1882465562 => 1681756173 393053924 unbound 725716895 unbound 179852647 unbound 1115740971 => 1677241837 198050523 => 1666120338 224555604 => 321455948 414254577 => 925295736 1362478161 unbound 679914561 => 1086204640 1458089045 unbound 1943334948 => 909403543 323569722 => 1197436040 326451557 => 1900678029 1442613830 => 1273658501 834454843 => 2051339074 1023988664 => 1655727658 664430851 => 1662832427 2034192899 => 996407746 1616872137 => 671156959 1354894022 => 133646906 1473085332 => 239013134 1080962721 unbound 1615662266 => 611485624 2034192899 => 996407746 1508107084 unbound 1465341293 => 709713271 1190239095 unbound 2022980135 => 1667467618 1800134921 => 221305896 2105280856 => 1921107442 909498825 unbound 40238935 => 570121033 2036353260 unbound 162653213 => 696179604 387286070 unbound 1023988664 => 1655727658 1056488189 => 548147974 366761061 unbound 28927113 unbound 864346164 => 804435261 1733388011 unbound 1468509334 unbound 2000505727 => 502733893 1281167264 => 1363386153 1932861269 => 93132205 145450841 => 1931909577 272126342 unbound 1505609665 => 356937042 1149531498 => 1193121379 254030405 => 1522301074 2000330232 unbound 2046457979 unbound 946490071 unbound 325145456 unbound 944534279 => 1293780500 1619672880 unbound 1971705814 => 1427917349 399364339 => 1253294170 966960559 => 1958764604 552126338 => 383058127 7374145 unbound 1159099762 => 563319074 1778739302 => 2054728227 1678284082 => 598258180 1605477394 => 1183132932 1177457394 => 422796945 175980308 => 1019570345 6853088 => 1144294291 849686411 => 1469038899 1265400563 => 1142197940 1569835199 unbound 2000345866 unbound 1616872137 => 671156959 1724958505 => 1747864201 721900472 => 682722370 1329364259 => 127304292 1842119091 unbound 827188883 => 1137999539 1888947297 => 473406507 1264857737 unbound 1530438567 => 1056731847 1203060997 unbound 1125236669 => 441897104 1842372251 unbound 1948542671 => 1781200535 1758944016 => 1935489218 1769483187 unbound 1939176490 => 1140901847 2036353260 unbound 906124011 => 1131831011 1022411141 => 881150847 1378592730 => 1685656627 876145879 => 660686926 1502353174 => 1213068332 2044846646 => 1996342583 1360294964 unbound 1000541607 unbound 834943314 => 1733845476 279599914 unbound 1103868810 unbound 2103143921 => 1210522590 1568592092 => 404841767 1850241835 => 1105609980 755224049 unbound 2017969510 => 589761096 370107411 unbound 574697170 => 1607160059 575670525 => 1401447182 1850241835 => 1105609980 243069457 unbound 840323645 => 1001923376 1894944405 unbound 1061892931 => 191049206 242935131 => 1412835821 37364542 => 1862331333 924707281 => 2029754158 861516480 => 254912599 1533491709 unbound 2001642040 unbound 711863327 unbound 185080756 => 674392564 1758301736 => 2124268852 1207078696 => 80566792 389242577 => 2141341934 1590402186 unbound 79422883 => 2077097543 1744782885 => 851634649 1347016382 => 705018163 871920181 => 1522592417 1808434285 => 1863074767 68008086 unbound 1532090726 unbound 1384310243 => 1655401751 832420215 => 1731964915 1978999276 => 2047636558 2057702584 => 1653900893 2107018180 unbound 662197019 unbound 632616859 unbound 1842372251 unbound 990010693 unbound 1630884972 => 1247248010 1149531498 => 1193121379 1767388965 unbound 1963667044 unbound 1112376132 => 1018692533 390748254 => 2081907852 2054274026 unbound 1624366102 => 583649741 314460252 unbound 1822839377 unbound 1611081710 unbound 695044142 => 1990484062 1212273859 => 1460129801 1662762239 => 1330525884 1769742453 => 426349794 934656313 unbound 1193909273 => 631565369 977265470 => 85924834 648835078 => 987839459 1190239095 unbound 2034254020 => 8575589 340419430 => 189027248 918817955 => 498428929 1340470861 => 1488236655 406950621 => 1401475319 944534279 => 1293780500 111138056 unbound 45415136 => 1917593343 444311235 => 639702255 1319242808 unbound 1112376132 => 1018692533 694275723 => 958609517 2115665734 => 826501343 819497510 => 925224266 262540809 unbound 2064052213 => 531024566 103374585 unbound 694375834 => 1654927280 2062374306 unbound 55400004 unbound 2140062161 => 558068199 1987431015 unbound 509681074 unbound 180429074 => 1384444220 816423825 => 1535212151 1641870283 unbound 1876917557 => 817209463 832737645 => 196575859 2118900745 unbound 1308860271 => 1880462100 1546913624 unbound 1294137502 => 475082808 1605941425 => 573657922 383123151 => 982900107 1155583676 => 1495107841 1993395422 => 1855832155 961737265 unbound 344462855 => 1964962417 2084836175 unbound 832420215 => 1731964915 1186349214 unbound 1687431874 => 333892384 915937729 => 718623564 1615302871 => 2078747363 1397678291 unbound 263456490 => 44049754 292810590 => 1635799456 419509793 => 1358878921 1950674415 unbound 466437350 => 858668523 827098695 => 1948127436 902003259 => 708693060 1932627951 unbound 1488025904 => 1841796302 230548908 unbound 1274774618 => 2143632631 1530763226 unbound 2030301632 unbound 1702400817 => 1939717496 243972574 => 186403719 295050531 unbound 1811003743 unbound 2084850500 => 2076846933 1818487396 => 49259661 1166766930 => 1364841840 2124780563 unbound 1309248319 => 190490608 515511032 => 380549102 1012440773 => 518332455 286967863 => 855567982 685517241 => 318254145 1759002483 => 250182518 1922103704 => 811032406 1286558117 unbound 1904263894 => 1649182422 1146607318 => 208070713 1730820121 => 471001014 1080962721 unbound 523322835 unbound 1051975857 => 2027918515 280696833 => 1870224513 172329495 unbound 1837979732 => 1584859206 769657987 => 1836926813 1456389778 unbound 1006878807 => 573820826 1980826540 => 1595589603 1745052487 => 1782540110 1522394436 => 1248802164 227556613 unbound 1198623807 => 479777886 29001448 => 185264031 1329364259 => 127304292 455512995 => 1908029692 1980826540 => 1595589603 909498825 unbound 964077525 => 1108581991 1221271308 => 1806926077 955156141 => 1627836049 5897344 => 1341587204 114118105 => 1394161970 180429074 => 1384444220 514637547 => 1683411126 2102703941 => 1860487530 601029471 unbound 429652531 unbound 20030560 unbound 1931784816 => 182290341 2082202600 => 2135214082 660203882 => 1056029705 155563853 => 733706031 182112575 => 1646447728 137946502 => 1459761555 784405532 => 392312880 1947057800 => 1596020896 1996522861 unbound 1272547920 => 817151530 729897276 => 203162155 1743018745 unbound 224074637 => 530664338 28515844 => 1708095535 1614758802 => 1097139637 1730696613 unbound 1639459076 unbound 957388951 unbound 1196547176 unbound 1095648671 => 2124104508 1462717627 => 312631010 607965794 unbound 1474278395 => 1219639320 992056371 unbound 597270789 unbound 492498129 => 1480537886 413622413 => 955428435 1904263894 => 1649182422 850894465 => 1457293498 1690367831 unbound 1456590335 => 619595534 823365587 => 43839095 918817955 => 498428929 1483637403 => 944065974 1605941425 => 573657922 607591581 => 2027532341 146434781 => 2145947090 587700132 unbound 1759002483 => 250182518 805389053 => 553122404 390748254 => 2081907852 430016912 => 424169007 980594736 unbound 1612927486 => 1496797982 1690906471 => 773820027 2144121259 => 1783982542 40215553 unbound 128171373 => 1411265149 581692444 => 731188286 1681243989 => 1989412159 1557995879 unbound 818531840 => 277105099 147042930 => 847648232 1883014229 => 1052843476 734175060 unbound 763270501 => 195291261 1806769422 unbound 371909701 => 493831798 1797975733 unbound 1482562114 unbound 1887213756 => 1430704858 2044942540 => 97902048 1209148278 unbound 199501312 => 1978278965 1365781503 unbound 1483637403 => 944065974 507906058 unbound 1888491075 => 2012400566 909498825 unbound 242935131 => 1412835821 1386759345 => 933974608 377103004 => 1296144787 1880981150 => 1321867575 1910287825 => 593215597 1569050725 unbound 122884387 => 72066066 89813399 => 645482460 577993744 => 42518359 265720554 unbound 663544617 => 95541496 501814119 => 859527726 887560791 => 1401531725 668193085 => 36049895 155595027 => 413654511 1222236180 => 636236347 659229259 => 750636200 671015588 unbound 1398613763 unbound 1533491709 unbound 1212273859 => 1460129801 323569722 unbound 1464685197 unbound 202364111 => 530844190 1423813223 => 722846595 1898061292 => 1393290766 1496668319 => 1381208897 189341154 => 1157789976 771350869 => 1436069320 343026959 => 284869079 281182138 => 1338070576 1812907612 unbound 1402599605 => 618273707 87810863 => 1272280794 1272547920 => 817151530 1707278239 => 1068612649 1677771604 unbound 1289630547 => 807965736 1973883112 => 1898876343 505077092 => 66839775 1644317573 => 1158572437 634247287 => 140814713 308867395 => 1016339805 1336727166 => 2115200285 1948542671 => 1781200535 1283732816 unbound 1451360800 unbound 1006878807 => 573820826 1986600259 => 171560222 216315836 => 1979897444 1483398195 => 1545913775 1383534475 => 662341464 1266704880 => 1300394685 1053834421 unbound 213484606 unbound 1683595317 => 1695075890 1010175377 unbound 584211097 => 1846868347 1390152814 => 277819979 1372929038 => 897531851 280696833 => 1870224513 1743197075 => 759282547 934371750 => 766929015 1072728832 => 1037471219 964044511 => 97395551 1765413106 unbound 1818337489 => 27503944 917695122 => 109946557 2062374306 unbound 1464685197 unbound 463582447 => 1809936232 987276546 => 425425587 149600531 => 758811978 1679274750 unbound 540701338 => 905294496 1993043835 => 1571747397 1250379621 => 947728373 1004319572 => 808156162 390748254 unbound 68146333 => 1011022826 1049766681 => 1378451389 1269603061 => 408398608 527921371 => 1917992199 1954628162 => 1919384286 1114217915 => 2015903441 429179173 => 1363684198 1755364355 unbound 1904947943 => 465556185 1303109580 unbound 1198560072 unbound 1104321155 => 400972224 1621203361 => 1434281949 2105520723 => 1244492057 758380159 unbound 429540132 => 384668128 1191227223 => 1365145424 242942030 => 1867179510 2011150800 => 506449786 1689889376 unbound 1572787519 unbound 1465410327 => 1804832369 1159099762 => 563319074 1203060997 unbound 2082202600 => 2135214082 598495195 unbound 274760156 unbound 785115642 unbound 1442636485 unbound 180429074 => 1384444220 658236133 => 804731478 1243492377 => 942577872 56353640 unbound 217370845 => 1970002252 412221022 => 1359576820 411094347 unbound 1448567442 => 1929318956 1396421849 => 1151995426 892496676 unbound 1156686264 => 2022864224 607591581 => 2027532341 1992666030 unbound 1536211511 => 1828550658 616672770 unbound 872415037 => 307671178 444613733 => 77999946 1565725272 => 595794492 316317639 unbound 2011150800 => 506449786 1039047010 => 1975917083 653617459 => 156547249 55215490 => 994247504 593733021 unbound 786173394 unbound 1535827656 => 1435562291 1339168100 => 1820063667 2019253698 => 627607697 1592356964 => 1883374125 1581777702 => 2113661251 1089333028 => 2041199802 114118105 => 1394161970 388574535 unbound 1986373181 unbound 40238935 unbound 1700474292 unbound 593353442 => 596299926 1599121702 => 708154771 595581284 => 1911860884 981295898 unbound 978892274 => 1565709727 43239429 => 766339240 151789538 => 132899382 1071082508 unbound 23020291 => 600454714 812717112 => 2144460858 2127039474 unbound 2062374306 unbound 92194995 => 358994054 554718708 => 1980308266 518360864 => 2091505516 1261329194 => 1348793279 1044335275 => 1975096664 1130252545 unbound 1826418445 => 1700877694 228358317 => 1585769645 830375062 unbound 1456389778 unbound 1732652564 unbound 374880419 unbound 5554359 => 353093485 5554359 => 353093485 69063919 => 1033104151 1550530240 => 1586064279 733192277 unbound 1934683383 => 1326570481 492498129 => 1480537886 148460336 unbound 795051062 => 1488097057 69144676 => 649572896 1687431874 => 333892384 299585127 unbound 1532109851 => 170920421 848111481 => 1626000848 1442069541 => 622606953 1450010198 => 1367786113 1482706677 => 2060163888 766406625 => 156939725 175980308 => 1019570345 694629762 unbound 864346164 => 804435261 1265580096 => 146606677 198050523 => 1666120338 1037365755 unbound 1987961704 => 1777157640 166753811 => 564519174 473608741 unbound 1985605984 unbound 1715422874 => 1978559498 97283872 => 1979946163 1842372251 unbound 248789477 => 2101090630 272622623 => 365669695 917450971 unbound 1342892432 => 1591246962 955156141 => 1627836049 206128178 => 681739995 1039093134 => 1490343597 2078321885 => 1865737522 989495058 unbound 128195590 unbound 1497334207 => 1182035534 1060398801 unbound 587387785 unbound 1180058155 => 1041611430 1688933932 => 1496039506 355894624 unbound 2037466426 => 823546121 2056851960 unbound 827188883 => 1137999539 934577615 => 611511642 1129421151 => 1577790370 1400787957 => 131916459 1226107254 => 2008028441 1020921866 => 2141132844 7374145 unbound 398245804 unbound 1957396003 => 748278907 653852096 => 2075128024 1442636485 unbound 374532219 => 401789672 34782305 => 1907921570 358079583 => 641682131 805764752 => 1012493245 973059893 => 1482521004 1626849514 => 791267893 1060398801 unbound 1548844536 => 896792544 1749908681 => 517847874 1012854867 unbound 918850350 => 1475538606 336026037 unbound 1916144230 => 113226788 934656313 unbound 486106202 => 1771635608 1917162131 => 2004149934 1117559338 => 1558159551 968234454 => 924399959 207301726 => 185871809 480110513 unbound 552126338 => 383058127 1883014229 => 1052843476 1384959668 unbound 426932699 => 2012089400 880302635 unbound 1054645429 => 1515232041 606493935 => 516971897 163624025 => 700075244 2012463227 => 1634704569 1116297019 unbound 1084392858 => 1014635702 458739304 => 1547384007 1986600259 => 171560222 1947057800 => 1596020896 293634711 unbound 164449147 => 685365295 1900113382 => 596164058 286086049 => 1696982415 1309248319 => 190490608 1261655582 unbound 440639518 => 491540995 855171646 => 1854003944 1293802871 => 133889828 1860489504 => 1902206904 374532219 => 401789672 152217857 => 1371745886 653852096 => 2075128024 784986683 => 744040143 19694442 => 899211968 1431334521 => 661860316 1351717617 unbound 80554228 unbound 697336562 => 404371687 1193909273 unbound 452294670 unbound 1090233506 unbound 558641723 unbound 1332379049 unbound 725716895 unbound 206482525 => 1520071581 1565725272 => 595794492 1111760120 unbound 33759695 => 811110480 951027820 => 2031146670 1508107084 unbound 887560791 => 1401531725 1468737801 unbound 1017757654 unbound 729897276 => 203162155 2130226562 unbound 601937789 => 1671113992 295795156 unbound 1812900043 => 1966878807 1483810715 => 600378565 1011235372 unbound 2123462953 unbound 188806728 => 1948016849 903049696 => 910701777 673339454 => 1071435923 1733121663 => 1839667794 1200581490 => 263596501 647396583 unbound 652998598 => 29711841 1092086540 unbound 1456590335 => 619595534 1269190946 unbound 1123721920 unbound 1733961860 => 654100838 1431334521 => 661860316 628956574 => 1371465533 2109995081 => 1070289682 1966940421 => 903577097 692737796 unbound 1265580096 => 146606677 1432690380 => 924066424 343026959 => 284869079 875101635 unbound 551823247 unbound 1835208129 unbound 187993562 => 763771821 1075848536 unbound 739639285 => 509865195 1090016177 => 67796504 1589668438 => 1933665293 1920745372 => 1381981276 845960442 => 1794420857 729897276 => 203162155 1950617979 => 568882123 1348034880 => 1601335389 1457296528 => 484884392 298386942 => 2085733606 553492015 unbound 2036841203 => 1828194825 355894624 unbound 1858508581 => 443830977 1043412344 => 1023743716 1757986223 => 880110975 826782028 => 2135731724 591323824 => 687839926 2006808675 unbound 163400790 => 701742222 1623302499 => 1085590328 523322835 unbound 1759834621 unbound 1887213756 unbound 1450832182 unbound 1614758802 => 1097139637 2144121259 => 1783982542 1378592730 => 1685656627 930765788 unbound 418161851 => 338581212 1149531498 => 1193121379 1192684571 unbound 69144676 => 649572896 304731390 => 227671081 991387042 => 509221379 102560142 unbound 438892340 => 557101707 79422883 => 2077097543 672277419 => 2050218987 299585127 unbound 1750320507 => 1892622618 764060290 => 912263810 235987786 => 1730446329 538390768 unbound 308493868 => 1477416517 2041531514 unbound 1933265225 => 194636012 2103426562 => 738248025 1948542671 => 1781200535 183667728 unbound 909498825 unbound 554464952 => 1291748243 1305212663 => 802622777 1678675948 unbound 420629420 => 1105938879 1269603061 => 408398608 977265470 => 85924834 1395859285 => 2070314977 1909296876 => 587944497 912891210 => 471768484 1904951636 => 622620793 304731390 => 227671081 1504589704 => 2113546125 1884818285 => 2000400741 1115886266 => 952115035 1668976193 unbound 299990407 unbound 1882780783 unbound 1586391938 => 1410398445 1813629828 unbound 791579366 => 1949728486 1354890170 => 1816551756 1242019245 => 478640809 1202609184 => 1798343363 788893945 => 1110542569 1733309843 => 1896135153 1731306513 => 751332705 1548844536 => 896792544 1162933728 => 1073393113 1063212066 => 798152625 635848361 => 551035327 1228616211 unbound 1492584358 unbound 1627047785 unbound 29064249 => 1117982768 1816967550 unbound 1450208095 unbound 1820043111 unbound 633060058 => 247877564 1492817714 => 160031390 2077959559 => 481908255 40000277 unbound 376765505 => 1179408112 609523551 unbound 212417943 unbound 1349265614 => 791852738 1056745264 => 1693433485 1662760926 unbound 587574544 unbound 1140287102 => 1904995105 130586502 => 421898024 1496977141 unbound 775550151 => 1397538051 652901892 => 638313635 1258370457 unbound 2004951742 unbound 1659739999 unbound 527872758 => 659573239 689107563 => 2088460266 597361352 unbound 255022363 => 1697985902 758808869 => 153635147 840080489 => 1427387984 482567704 => 829585911 893000876 => 2089681406 1027266478 unbound 189341154 => 1157789976 576497789 unbound 453905848 => 171450270 1700140470 => 1062974714 1808908326 unbound 1763003376 => 1156983305 440808801 => 1262956456 1581104261 unbound 572980445 unbound 1762910313 => 1835016130 1512132289 => 1656963435 562532000 => 1742267968 2119890156 => 601044146 1860489504 => 1902206904 627475152 => 1699545469 1130473930 unbound 1682954138 => 293141287 1379135956 => 1139083947 1600967190 => 966475610 1266704880 => 1300394685 2088713695 => 1331443652 1285992897 => 1916275969 1577811861 unbound 727135565 => 373138360 1967896339 => 1126266472 1916532135 => 2145749238 1308860271 unbound 643680761 unbound 422817439 => 1871432936 182112575 => 1646447728 721900472 => 682722370 2118784576 => 614788919 1562121865 => 1719445784 2079303358 unbound 228616329 => 236575860 1149789781 => 861719108 1173530427 unbound 975016562 => 1180405789 155563853 => 733706031 378128583 => 1045349840 1039093134 => 1490343597 172329495 unbound 227556613 unbound 771350869 => 1436069320 1786543438 => 420084025 1731306513 => 751332705 225510738 => 630429989 996308620 unbound 1298280911 => 1909909288 1731306513 => 751332705 1293775226 => 111797750 1825555566 unbound 1935537151 => 1316269187 975016562 => 1180405789 1450832182 unbound 628956574 => 1371465533 924707281 => 2029754158 1963972036 => 72102587 1831948054 => 1191840732 816423825 => 1535212151 945482220 => 2088765038 725255512 unbound 1125236669 => 441897104 1157719216 unbound 295050531 unbound 30334468 => 1661266644 1786543438 => 420084025 567970502 => 1386997112 527889802 => 1930185417 151069680 unbound 519899651 => 1151249787 1215133092 => 700110314 1289630547 => 807965736 422817439 => 1871432936 237593746 => 1288834940 1548560177 => 1241074808 455512995 unbound 1049766681 => 1378451389 680872176 => 927224526 1056754018 => 397390391 445574234 unbound 832737645 => 196575859 370107411 unbound 1701754569 => 581610588 648785722 unbound 882039474 => 788549302 1615302871 unbound 734540405 unbound 617180503 => 1856425692 1663241873 => 1836932747 1567309870 => 1932175343 708627802 => 1131562600 151069680 unbound 34674168 => 1029025122 1644317573 => 1158572437 840323645 => 1001923376 172482223 unbound 1473085332 => 239013134 1164363162 unbound 1115886266 => 952115035 1906305883 => 2129269024 671822493 => 1587420655 1379755955 => 1313839611 1385277806 => 1953051671 1975805686 => 539202942 519896450 => 1396546103 1100083674 => 1864588248 1343930370 => 246907045 378599103 => 499845110 672277419 => 2050218987 622769353 unbound 677123556 unbound 383123151 unbound 649171410 unbound 2043965698 => 1157203626 1576225726 unbound 446364654 unbound 922770897 unbound 881651259 unbound 1327569187 => 1459444817 1262981361 => 1147171823 1720624382 => 1458438259 153346269 unbound 1874610755 => 1075023605 558641723 unbound 1488025904 unbound 2039446100 => 594898972 1116372579 => 1023991860 1834412498 unbound 1969834999 => 1853004690 624848859 => 910979336 1155583676 unbound 796304719 => 699495700 865053003 => 1984887186 45415136 unbound 121959092 => 1911519480 527872758 => 659573239 1279877457 => 212226438 1457564859 => 1159303172 1731306513 => 751332705 88454817 => 800864713 4112207 unbound 1020721312 unbound 1966187105 => 361561672 492498129 => 1480537886 2080140521 => 2113537315 249723991 unbound 1112696014 => 673054099 35025048 => 1951141194 1545049578 => 1206755150 1742131900 unbound 1791798064 => 627949468 1659739999 unbound 1089799994 unbound 2107108804 => 1085993822 412221022 => 1359576820 1821370751 => 402625242 1904215713 unbound 263969645 unbound 637294573 => 1102897675 10276844 => 489124323 1329364259 => 127304292 1191024828 => 244056608 1682954138 => 293141287 1504636691 unbound 1956242624 => 479293487 456813719 => 1600638802 593353442 => 596299926 1744168831 => 897816352 2057916343 => 1114019040 2087333993 => 554156002 1082845900 => 749646573 848833393 => 1107008791 1883401344 => 619425845 133309160 unbound 1823295095 unbound 201520744 => 1288885942 297775934 => 254425411 805151584 => 859674755 1337249948 => 734049855 757285721 => 1917897532 1589565706 unbound 1265274425 unbound 823502984 => 1635759908 1797282865 unbound 1000158494 unbound 463411374 unbound 312057255 => 2141269935 100043417 => 2138756373 659229259 => 750636200 1932627951 unbound 1999579054 => 521628370 563677484 => 1096026723 119350974 => 517955293 1077400581 => 977315389 1797282865 unbound 176763727 => 98012287 1811305118 => 687258285 1447717550 => 1144252669 716994189 => 856488195 1265428248 unbound 188135606 unbound 1018002543 => 1178541706 671187679 unbound 1657490382 => 252735950 1904951636 => 622620793 1885761099 => 762325807 51236307 => 497581137 899061248 unbound 1072706959 => 76128944 263456490 => 44049754 1396766597 unbound 794167891 => 929508861 180158834 unbound 984923653 => 263096397 2047112701 => 1199449109 641496474 => 1462863548 600276415 => 1505955230 818531840 => 277105099 567996460 => 1778429930 814230794 unbound 1369583902 => 1827597543 186363420 => 2137876716 142600549 => 340657413 1612229699 unbound 183056013 => 1599909864 1548844536 => 896792544 97142446 => 1316780726 1379184502 => 1386839919 114626371 => 956435217 1216618355 => 283083414 947505744 unbound 1824027726 => 1022484049 1116297019 unbound 1173947046 => 1572708023 1727681442 => 3380061 1994146752 => 321332677 517479378 => 1373390613 56329007 => 6725579 1071239973 => 1168844305 1678717854 => 703808747 1612715452 => 1717466682 1895198639 unbound 758380159 unbound 1108776425 => 471506542 1746311451 unbound 611699267 => 1098680258 628956574 => 1371465533 527921371 unbound 669615838 unbound 800624402 => 770803878 1341174626 => 299883840 1874610755 => 1075023605 1764866524 => 1148911984 1382719068 unbound 162682365 => 408472115 1308860271 unbound 2055625834 => 583663209 277218448 unbound 74914592 => 1536190640 1615662266 => 611485624 312736623 unbound 366259326 => 52026826 759394309 => 1877994033 426211414 => 1020147169 903049696 => 910701777 1086435961 => 1232978819 1829624637 unbound 2087333993 => 554156002 2090634610 => 1235815325 225510738 => 630429989 1816967550 unbound 1198623807 => 479777886 1492690948 => 1815964915 401320277 => 615769843 1690367831 unbound 1556982923 => 1504437870 2029160695 => 187383154 228768262 => 402252110 1678929768 => 1173552466 458739304 => 1547384007 1016792103 => 1206210260 511851631 => 1828362180 1923870760 => 1932989206 34782305 => 1907921570 828227731 => 1027764895 186736381 => 2010570763 76605219 => 363043808 250965966 => 940943079 772144510 => 533428337 73903491 unbound 393289205 => 1632374554 87393577 unbound 562532000 => 1742267968 152217857 unbound 1261628481 unbound 92194995 => 358994054 587700132 unbound 1791429072 => 2137347822 1347310187 => 706228388 55185030 => 212899891 1197950780 => 36788707 1184628655 unbound 1728405927 => 1859812735 1714348491 unbound 1003936528 => 1014430970 664430851 => 1662832427 203302648 unbound 1792303934 => 1182912642 924396538 => 2120317378 1162702161 unbound 1794116694 => 1406284870 739311339 => 753167676 1483637403 unbound 200800108 unbound 79422883 => 2077097543 1440526918 => 2022850440 1364075779 unbound 1316581550 => 1808189813 1701754569 => 581610588 527921371 unbound 1388985704 => 688442495 1530763226 unbound 1103710348 unbound 1441933082 unbound 1919814733 => 642144521 1384891015 unbound 1825555566 unbound 1989455591 => 317345767 1897747354 => 2008079710 975664522 unbound 1269190946 unbound 1307353359 => 1619487081 629491059 => 72707788 1125236669 => 441897104 511851631 => 1828362180 1282946700 unbound 694375834 => 1654927280 1027943304 => 1907924427 2087524773 => 1347256873 1470923426 => 775753454 2007185572 => 1246912874 70785517 unbound 641496474 unbound 2045588747 unbound 496041554 unbound 514637547 => 1683411126 265720554 unbound 1116372579 => 1023991860 268941470 unbound 402755486 => 1433340949 1240344977 => 1698035826 1847317074 unbound 607965794 unbound 750291623 => 333650209 1470104559 => 780732311 2058313196 unbound 1169125586 unbound 442664835 => 594510175 1359621004 unbound 1630884972 unbound 83434387 => 988212728 1254205487 => 1453329776 1406846192 => 502662112 1257155016 => 1477639026 377103004 => 1296144787 1476042946 => 2103299523 76389738 => 1123270312 519899651 => 1151249787 1481672350 => 649496872 973059893 => 1482521004 1383065558 => 745258874 1170512684 unbound 1415231691 unbound 1246370682 unbound 505182416 unbound 1279877457 => 212226438 2010725690 unbound 1648083303 unbound 2131108736 => 1992208165 718238356 unbound 1289915001 => 1848248292 1548893748 unbound 1199887481 unbound 1701754569 => 581610588 1797975733 unbound 204083517 => 894184767 1734762983 => 1424850139 1378033459 unbound 1212273859 => 1460129801 177854913 => 919384535 506828079 => 867507330 1380322132 => 1316081347 238743909 => 1165686397 1354890170 => 1816551756 482547259 => 1374521830 839085907 unbound 1465341293 unbound 1822839377 unbound 1780761311 => 719143605 202364111 unbound 18439050 => 1935298975 34323608 => 1416935733 209837968 unbound 1131990484 => 1036964378 445346234 unbound 95238584 => 1400260416 1721671889 => 1595765079 786040287 unbound 2068028905 => 1120746395 1337559135 => 2087972011 1092086540 unbound 1897113966 => 1827682148 409876953 => 701231953 1438896448 unbound 377203887 => 1699870185 2147054674 unbound 203522407 => 93602986 2066581524 => 2117471081 1590402186 unbound 156221823 unbound 1643539428 => 1076917345 1626506494 unbound 1962451442 => 269465281 1033017931 => 1454566036 828227731 => 1027764895 1016731024 => 2142824765 2031685476 unbound 625462376 unbound 30498851 unbound 1640846474 => 12388122 445346234 unbound 10276844 => 489124323 310107685 => 514758908 720153596 => 270196192 19907635 => 1318282853 796168908 => 1232672288 496041554 unbound 1542812883 => 2055403023 1926247556 unbound 284783754 => 1194469234 20030560 unbound 2071175527 unbound 1240532390 unbound 1352786969 => 434283031 2094297719 unbound 1977071307 => 383447369 254144456 => 244156851 429626357 => 755644071 2068329767 => 637920355 1950617979 => 568882123 1724376514 => 1962996592 968234454 => 924399959 835042145 => 1833598376 1813485338 => 986053264 121310515 unbound 69881925 => 2112811955 212082285 => 1794286737 1781116313 unbound 1288637995 => 918997246 1526365278 => 967566429 2026275511 => 382015880 1871906651 => 2090990619 493835765 => 2140740362 263629502 unbound 586692960 => 1014017941 1869260019 unbound 1067875623 unbound 1162933728 => 1073393113 1737703047 => 298820231 1790903657 => 239615815 532145676 => 1778778383 1519686336 unbound 2048085391 unbound 1032989237 => 2098313068 1560090024 unbound 2102093477 unbound 1035989797 unbound 634247287 => 140814713 1878940341 => 970288909 524503790 => 2043498476 770387478 unbound 263969645 unbound 454830937 => 73627309 371285588 => 786331149 853951784 => 1837472443 2114035576 unbound 1390152814 => 277819979 1492817714 unbound 875361491 => 1797872237 304075474 => 1338643759 1966625338 unbound 312941485 unbound 16043780 unbound 1173285934 unbound 650850679 => 1231807764 643292501 => 1369299414 299990407 unbound 388632539 => 749981847 1786332779 => 1086155990 2135482174 => 172627090 1647634277 unbound 1180058155 => 1041611430 1067875623 unbound 551714085 => 1669174912 750657227 unbound 1698656381 => 1548284754 1428893873 => 1485386626 787197424 => 1672572134 37364542 unbound 1264808949 => 1380392527 1816967550 unbound 741061476 unbound 2008097087 => 269722912 1996435526 unbound 1332691326 => 870279344 1427316502 => 2123454859 733105058 => 1846152689 1652266384 => 1541283499 540968657 => 2123517222 1023109316 => 887149496 677848967 => 1379933627 966177489 => 1994569151 46529202 => 2013175649 510968354 => 1284185616 570706172 unbound 1071960890 unbound 2044942540 => 97902048 2010062139 => 1257220559 2135389863 => 1418935560 1061892931 unbound 501359128 => 882428520 520058013 unbound 88454817 => 800864713 122884387 => 72066066 1775671049 => 78025181 1327510457 => 1854605716 618049750 => 1073162086 177854913 => 919384535 501737879 => 772955110 1175986831 unbound 155595027 => 413654511 906124011 => 1131831011 1647120332 unbound 100821176 => 2103369627 76605219 => 363043808 224242549 => 1395036560 586692960 => 1014017941 746528611 unbound 402506988 unbound 1064323417 => 1404064079 2028817231 => 1621526964 746528611 unbound 1858296246 => 531985315 1753610197 => 817317776 1532090726 unbound 1400865743 => 663795605 706902049 => 308427599 1368615282 => 817867048 366259326 => 52026826 1900629771 => 416991366 1320190957 unbound 966177489 => 1994569151 297796410 unbound 1198623807 => 479777886 67237705 => 485284932 1092458586 => 1103432511 499892923 => 1064111217 965090201 unbound 1884818285 => 2000400741 1625086103 => 130012819 1718296761 => 1798484527 1261628481 unbound 2002057260 => 927840690 2008097087 => 269722912 1808353518 => 186286460 1609513929 unbound 1460663207 => 1287352211 76535780 => 1959510253 318007247 unbound 2080649874 => 94690444 1812149559 => 1050188133 1996435526 unbound 568523684 unbound 426932699 => 2012089400 91496274 => 1746451881 1204645429 => 953356278 1294137502 => 475082808 178742495 => 1675535523 800458406 => 908672698 565892315 unbound 488632802 => 1483569847 967737844 => 941824423 1240344977 => 1698035826 390620270 => 1201255804 742664317 => 2116304288 1750679176 => 899077234 632605497 unbound 1694382577 => 132515470 953328919 => 178903741 784626236 => 764873637 91496274 => 1746451881 770387478 unbound 1866088997 => 15207120 328558170 => 21733417 550560741 unbound 1499148417 => 1467601549 458280594 unbound 1402526836 => 1961432550 390773064 => 467885693 517479378 unbound 36496443 => 722835630 770257770 => 1376317035 935240036 unbound 1504636691 unbound 1887807209 => 42617718 1185398891 => 863944831 848111481 => 1626000848 2057784606 => 26961962 1516642870 => 1762073423 2029580034 => 1051327239 356357611 => 1864783863 1548893748 unbound 1671512577 => 166514456 942095987 unbound 1539031817 => 399876174 1080840821 => 777649768 1398567492 => 717877336 1932627951 unbound 1488527303 unbound 1136549656 => 560809846 2058430874 unbound 1764680523 => 943201693 2128422119 unbound 1068825962 => 1649973461 139847698 => 1498177817 2035139510 unbound 925525118 => 440403069 1650803935 => 1779141269 398245804 unbound 608117160 => 688027993 1957396003 => 748278907 467552006 => 1238713942 1761627507 => 1846893845 328230407 => 986274911 1135274770 => 1067045240 997792519 => 1470275495 1588178888 => 1945023063 1754975810 => 1193044989 1218909893 => 1276726633 1552015247 => 988687006 353619352 => 277943415 1607370439 => 262759359 1752268226 unbound 1463857589 unbound 1638899145 => 1624146583 1433628430 unbound 429741228 => 1096222258 631609513 => 1851569620 1792944669 => 1106512853 2035539263 => 1123203244 1287371499 => 1515754262 1689305549 unbound 1848745695 => 1116842488 1549544241 unbound 797837529 => 369356311 1521629705 unbound 1259797878 unbound 436674444 => 753571830 366761061 unbound 1032951388 unbound 1002691182 => 786220298 232757577 => 775256353 259515074 => 1713927660 139847698 => 1498177817 426932699 unbound 354981174 unbound 115103107 => 868364861 1302417873 unbound 202364111 unbound 1923870760 => 1932989206 127129776 => 2068307943 1390152814 => 277819979 1450832182 unbound 1016200389 => 637457441 572380564 => 1489231469 1568971177 => 284598135 1917058634 => 1261651126 413622413 unbound 152007296 => 1844951702 389029911 => 1342569198 652379734 => 719399086 1353808138 => 469463443 1549544241 unbound 775975736 => 611857654 115103107 => 868364861 1386080256 unbound 1856553765 => 2013583968 907668379 => 2026072959 584211097 => 1846868347 1117568197 => 729077564 2068028905 => 1120746395 1000158494 unbound 1692839423 => 460964987 959230853 => 172216784 344104406 => 326091636 989148978 => 763530527 61745857 unbound 1689305549 unbound 1463857589 unbound 1544564933 => 1251273449 857730831 => 180558759 1594826225 unbound 627158205 unbound 1907796936 => 1403967930 1665423033 unbound 1662699743 => 1899830429 533613870 => 994767745 532219015 => 1811712277 2057516328 => 2112002192 1119158720 => 520664541 1407059445 unbound tla-1.3.5+dfsg/src/hackerlab/tests/rx-xml-tests/0000755000175000017500000000000010457621774020206 5ustar userusertla-1.3.5+dfsg/src/hackerlab/tests/rx-xml-tests/tests.h0000644000175000017500000000141210457621774021517 0ustar useruser/* tests.h - declarations for testing rx-xml * **************************************************************** * Copyright (C) 2000 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__XML_TESTS__TESTS_H #define INCLUDE__XML_TESTS__TESTS_H #include "hackerlab/rx-xml/re.h" struct xml_re_test_case { t_uchar * test_name; t_uchar * re; enum rx_xml_recomp_errno comp_error; t_uchar * str; enum rx_xml_rematch_errno match_error; int is_match; }; extern struct xml_re_test_case xml_re_test_cases[]; extern struct xml_re_test_case xml_re_test_cases_alternative_syntax[]; /* automatically generated __STDC__ prototypes */ #endif /* INCLUDE__XML_TESTS__TESTS_H */ tla-1.3.5+dfsg/src/hackerlab/tests/rx-xml-tests/tests.c0000644000175000017500000007063710457621774021531 0ustar useruser/* tests.c - test cases for rx-xml * **************************************************************** * Copyright (C) 2000 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/tests/rx-xml-tests/tests.h" #define TEST(name,re,comperr,str,matcherr,ismatch) \ { name, re, comperr, str, matcherr, ismatch } #define TEST_LIST \ \ /* ATOM TESTS \ */ \ \ \ /* normal characters */ \ TEST("atom test 0", "x", 0, "x", 0, 1), \ \ /* character classes */ \ \ /* single character escape */ \ TEST("atom test 1", "\\n", 0, "\n", 0, 1), \ TEST("atom test 2", "\\r", 0, "\r", 0, 1), \ TEST("atom test 3", "\\t", 0, "\t", 0, 1), \ TEST("atom test 4", "\\\\", 0, "\\", 0, 1), \ TEST("atom test 5", "\\.", 0, ".", 0, 1), \ TEST("atom test 6", "\\.", 0, "x", 0, 0), \ \ TEST("atom test 7", "\\-", 0, "-", 0, 1), \ TEST("atom test 8", "\\^", 0, "^", 0, 1), \ TEST("atom test 9", "\\?", 0, "?", 0, 1), \ TEST("atom test 10", "\\*", 0, "*", 0, 1), \ TEST("atom test 11", "\\+", 0, "+", 0, 1), \ TEST("atom test 12", "\\{", 0, "{", 0, 1), \ TEST("atom test 13", "\\}", 0, "}", 0, 1), \ TEST("atom test 14", "\\(", 0, "(", 0, 1), \ TEST("atom test 15", "\\)", 0, ")", 0, 1), \ TEST("atom test 16", "\\[", 0, "[", 0, 1), \ \ TEST("atom test 17", "\\a", rx_xml_recomp_BOGUS_CHAR, "a", 0, 0), \ \ /* category escapes */ \ TEST("category test 0", "\\p{isGreek}", 0, "\\u0370", 0, 1), \ TEST("category test 1", "\\p{isBasicLatin}", 0, "\\u0370", 0, 0), \ TEST("category test 2", "\\p{isbasiclatin}", 0, "\\u0370", 0, 0), \ TEST("category test 3", "\\p{isBasic Latin}", 0, "\\u0370", 0, 0), \ TEST("category test 4", "\\p{isbasic latin}", 0, "\\u0370", 0, 0), \ TEST("category test 5", "\\p{isGreek}", 0, "a", 0, 0), \ TEST("category test 6", "\\p{isBasicLatin}", 0, "a", 0, 1), \ TEST("category test 7", "\\p{isbasiclatin}", 0, "a", 0, 1), \ TEST("category test 8", "\\p{isBasic Latin}", 0, "a", 0, 1), \ TEST("category test 9", "\\p{isbasic latin}", 0, "a", 0, 1), \ \ /* multi-character escapes */ \ TEST("mce test 0", ".", 0, "a", 0, 1), \ TEST("mce test 1", ".", 0, "b", 0, 1), \ TEST("mce test 2", ".", 0, "\n", 0, 0), \ TEST("mce test 3", ".", 0, "\r", 0, 0), \ TEST("mce test 4", ".", 0, " ", 0, 1), \ TEST("mce test 5", ".", 0, "\\u2200", 0, 1), \ \ TEST("mce test 6", "\\s", 0, " ", 0, 1), \ TEST("mce test 7", "\\s", 0, "\t", 0, 1), \ TEST("mce test 8", "\\s", 0, "\n", 0, 1), \ TEST("mce test 9", "\\s", 0, "\r", 0, 1), \ TEST("mce test 10", "\\s", 0, "x", 0, 0), \ \ TEST("mce test 11", "\\S", 0, " ", 0, 0), \ TEST("mce test 12", "\\S", 0, "\t", 0, 0), \ TEST("mce test 13", "\\S", 0, "\n", 0, 0), \ TEST("mce test 14", "\\S", 0, "\r", 0, 0), \ TEST("mce test 15", "\\S", 0, "x", 0, 1), \ \ \ TEST("mce test 16", "\\i", 0, "a", 0, 1), \ TEST("mce test 17", "\\i", 0, "A", 0, 1), \ TEST("mce test 18", "\\i", 0, "\\u4e00", 0, 1), \ TEST("mce test 19", "\\i", 0, ":", 0, 1), \ TEST("mce test 20", "\\i", 0, "_", 0, 1), \ TEST("mce test 21", "\\i", 0, "2", 0, 0), \ TEST("mce test 22", "\\i", 0, ".", 0, 0), \ TEST("mce test 23", "\\i", 0, "\\u0300", 0, 0), \ TEST("mce test 24", "\\i", 0, " ", 0, 0), \ TEST("mce test 25", "\\i", 0, "\n", 0, 0), \ \ TEST("mce test 26", "\\I", 0, "a", 0, 0), \ TEST("mce test 27", "\\I", 0, "A", 0, 0), \ TEST("mce test 28", "\\I", 0, "\\u4e00", 0, 0), \ TEST("mce test 29", "\\I", 0, ":", 0, 0), \ TEST("mce test 30", "\\I", 0, "_", 0, 0), \ TEST("mce test 31", "\\I", 0, "2", 0, 1), \ TEST("mce test 32", "\\I", 0, ".", 0, 1), \ TEST("mce test 33", "\\I", 0, "\\u0300", 0, 1), \ TEST("mce test 34", "\\I", 0, " ", 0, 1), \ TEST("mce test 35", "\\I", 0, "\n", 0, 1), \ \ TEST("mce test 36", "\\c", 0, "a", 0, 1), \ TEST("mce test 37", "\\c", 0, "A", 0, 1), \ TEST("mce test 38", "\\c", 0, "\\u4e00", 0, 1), \ TEST("mce test 39", "\\c", 0, ":", 0, 1), \ TEST("mce test 40", "\\c", 0, "_", 0, 1), \ TEST("mce test 41", "\\c", 0, "2", 0, 1), \ TEST("mce test 42", "\\c", 0, ".", 0, 1), \ TEST("mce test 43", "\\c", 0, "\\u0300", 0, 1), \ TEST("mce test 44", "\\c", 0, " ", 0, 0), \ TEST("mce test 45", "\\c", 0, "\n", 0, 0), \ \ TEST("mce test 46", "\\C", 0, "a", 0, 0), \ TEST("mce test 47", "\\C", 0, "A", 0, 0), \ TEST("mce test 48", "\\C", 0, "\\u4e00", 0, 0), \ TEST("mce test 49", "\\C", 0, ":", 0, 0), \ TEST("mce test 50", "\\C", 0, "_", 0, 0), \ TEST("mce test 51", "\\C", 0, "2", 0, 0), \ TEST("mce test 52", "\\C", 0, ".", 0, 0), \ TEST("mce test 53", "\\C", 0, "\\u0300", 0, 0), \ TEST("mce test 54", "\\C", 0, " ", 0, 1), \ TEST("mce test 55", "\\C", 0, "\n", 0, 1), \ \ TEST("mce test 56", "\\d", 0, "0", 0, 1), \ TEST("mce test 57", "\\d", 0, "9", 0, 1), \ TEST("mce test 58", "\\d", 0, "\\u0660", 0, 1), \ TEST("mce test 59", "\\d", 0, "\\u0966", 0, 1), \ TEST("mce test 60", "\\d", 0, "x", 0, 0), \ \ TEST("mce test 61", "\\D", 0, "0", 0, 0), \ TEST("mce test 62", "\\D", 0, "9", 0, 0), \ TEST("mce test 63", "\\D", 0, "\\u0660", 0, 0), \ TEST("mce test 64", "\\D", 0, "\\u0966", 0, 0), \ TEST("mce test 65", "\\D", 0, "x", 0, 1), \ \ TEST("mce test 66", "\\w", 0, "a", 0, 1), \ TEST("mce test 67", "\\w", 0, "\\u2200", 0, 1), \ TEST("mce test 68", "\\w", 0, "\\u4e00", 0, 1), \ TEST("mce test 69", "\\w", 0, " ", 0, 0), \ TEST("mce test 70", "\\w", 0, "\t", 0, 0), \ \ TEST("mce test 71", "\\W", 0, "a", 0, 0), \ TEST("mce test 72", "\\W", 0, "\\u2200", 0, 0), \ TEST("mce test 73", "\\W", 0, "\\u4e00", 0, 0), \ TEST("mce test 74", "\\W", 0, " ", 0, 1), \ TEST("mce test 75", "\\W", 0, "\t", 0, 1), \ \ \ /* character class expression */ \ TEST("class test 0", "[ABC]", 0, "A", 0, 1), \ TEST("class test 1", "[a" RANGE "z]", 0, "m", 0, 1), \ TEST("class test 2", "[a" RANGE "z]", 0, "z", 0, 1), \ TEST("class test 3", "[012]", 0, "1", 0, 1), \ TEST("class test 4", "[7" RANGE "9]", 0, "8", 0, 1), \ TEST("class test 5", "[\\p{Sm}]", 0, "\\u2200", 0, 1), \ TEST("class test 6", "[\\p{isGreek}]", 0, "\\u0370", 0, 1), \ TEST("class test 7", "[\\p{isGreek}]", 0, "\\u03ff", 0, 1), \ TEST("class test 8", "[\\p{isGreek}]", 0, "\\u036f", 0, 0), \ TEST("class test 9", "[\\p{isGreek}]", 0, "\\u0400", 0, 0), \ \ TEST("class test 10", "[ABCa" RANGE "z0127" RANGE "9\\p{Sm}\\p{isGreek}]", 0, "A", 0, 1), \ TEST("class test 11", "[ABCa" RANGE "z0127" RANGE "9\\p{Sm}\\p{isGreek}]", 0, "m", 0, 1), \ TEST("class test 12", "[ABCa" RANGE "z0127" RANGE "9\\p{Sm}\\p{isGreek}]", 0, "1", 0, 1), \ TEST("class test 13", "[ABCa" RANGE "z0127" RANGE "9\\p{Sm}\\p{isGreek}]", 0, "8", 0, 1), \ TEST("class test 14", "[ABCa" RANGE "z0127" RANGE "9\\p{Sm}\\p{isGreek}]", 0, "\\u2200", 0, 1), \ TEST("class test 15", "[ABCa" RANGE "z0127" RANGE "9\\p{Sm}\\p{isGreek}]", 0, "\\u0370", 0, 1), \ TEST("class test 16", "[ABCa" RANGE "z0127" RANGE "9\\p{Sm}\\p{isGreek}]", 0, "\\u0400", 0, 0), \ TEST("class test 17", "[ABCa" RANGE "z0127" RANGE "9\\p{Sm}\\p{isGreek}]", 0, "M", 0, 0), \ \ TEST("class test 18", "[^ABCa" RANGE "z0127" RANGE "9\\p{Sm}\\p{isGreek}]", 0, "A", 0, 0), \ TEST("class test 19", "[^ABCa" RANGE "z0127" RANGE "9\\p{Sm}\\p{isGreek}]", 0, "z", 0, 0), \ TEST("class test 20", "[^ABCa" RANGE "z0127" RANGE "9\\p{Sm}\\p{isGreek}]", 0, "m", 0, 0), \ TEST("class test 21", "[^ABCa" RANGE "z0127" RANGE "9\\p{Sm}\\p{isGreek}]", 0, "1", 0, 0), \ TEST("class test 22", "[^ABCa" RANGE "z0127" RANGE "9\\p{Sm}\\p{isGreek}]", 0, "8", 0, 0), \ TEST("class test 23", "[^ABCa" RANGE "z0127" RANGE "9\\p{Sm}\\p{isGreek}]", 0, "\\u2200", 0, 0), \ TEST("class test 24", "[^ABCa" RANGE "z0127" RANGE "9\\p{Sm}\\p{isGreek}]", 0, "\\u0370", 0, 0), \ TEST("class test 25", "[^ABCa" RANGE "z0127" RANGE "9\\p{Sm}\\p{isGreek}]", 0, "\\u0400", 0, 1), \ TEST("class test 26", "[^ABCa" RANGE "z0127" RANGE "9\\p{Sm}\\p{isGreek}]", 0, "M", 0, 1), \ \ TEST("class test 27", "[ABCa" RANGE "z0127" RANGE "9\\p{Sm}\\p{isGreek}" MINUS "[aeiou8" RANGE "9]]", 0, "A", 0, 1), \ TEST("class test 28", "[ABCa" RANGE "z0127" RANGE "9\\p{Sm}\\p{isGreek}" MINUS "[aeiou8" RANGE "9]]", 0, "e", 0, 0), \ TEST("class test 29", "[ABCa" RANGE "z0127" RANGE "9\\p{Sm}\\p{isGreek}" MINUS "[aeiou8" RANGE "9]]", 0, "1", 0, 1), \ TEST("class test 30", "[ABCa" RANGE "z0127" RANGE "9\\p{Sm}\\p{isGreek}" MINUS "[aeiou8" RANGE "9]]", 0, "8", 0, 0), \ \ /* simple concatenation */ \ TEST("concat test 187", "abcd", 0, "abcd", 0, 1), \ TEST("concat test 188", "abcd", 0, "abcde", 0, 0), \ TEST("concat test 189", "abcd", 0, "abc", 0, 0), \ \ /* parenthesized subexpressions */ \ TEST("paren test 0", "(\\n)", 0, "\n", 0, 1), \ TEST("paren test 1", "(\\t)", 0, "\t", 0, 1), \ TEST("paren test 2", "(\\.)", 0, ".", 0, 1), \ TEST("paren test 3", "(\\-)", 0, "-", 0, 1), \ TEST("paren test 4", "(\\?)", 0, "?", 0, 1), \ TEST("paren test 5", "(\\+)", 0, "+", 0, 1), \ TEST("paren test 6", "(\\})", 0, "}", 0, 1), \ TEST("paren test 7", "(\\))", 0, ")", 0, 1), \ TEST("paren test 8", "(\\a)", rx_xml_recomp_BOGUS_CHAR, "a", 0, 0), \ TEST("paren test 9", "(.)", 0, "b", 0, 1), \ TEST("paren test 10", "(.)", 0, "\r", 0, 0), \ TEST("paren test 11", "(.)", 0, "\\u2200", 0, 1), \ TEST("paren test 12", "(\\s)", 0, "\t", 0, 1), \ TEST("paren test 13", "(\\s)", 0, "\r", 0, 1), \ TEST("paren test 14", "(\\S)", 0, " ", 0, 0), \ TEST("paren test 15", "(\\S)", 0, "\n", 0, 0), \ TEST("paren test 16", "(\\S)", 0, "x", 0, 1), \ TEST("paren test 17", "(\\i)", 0, "A", 0, 1), \ TEST("paren test 18", "(\\i)", 0, ":", 0, 1), \ TEST("paren test 19", "(\\i)", 0, "2", 0, 0), \ TEST("paren test 20", "(\\i)", 0, "\\u0300", 0, 0), \ TEST("paren test 21", "(\\i)", 0, "\n", 0, 0), \ TEST("paren test 22", "(\\I)", 0, "A", 0, 0), \ TEST("paren test 23", "(\\I)", 0, ":", 0, 0), \ TEST("paren test 24", "(\\I)", 0, "2", 0, 1), \ TEST("paren test 25", "(\\I)", 0, "\\u0300", 0, 1), \ TEST("paren test 26", "(\\I)", 0, "\n", 0, 1), \ TEST("paren test 27", "(\\c)", 0, "A", 0, 1), \ TEST("paren test 28", "(\\c)", 0, ":", 0, 1), \ TEST("paren test 29", "(\\c)", 0, "2", 0, 1), \ TEST("paren test 30", "(\\c)", 0, "\\u0300", 0, 1), \ TEST("paren test 31", "(\\c)", 0, "\n", 0, 0), \ TEST("paren test 32", "(\\C)", 0, "A", 0, 0), \ TEST("paren test 33", "(\\C)", 0, ":", 0, 0), \ TEST("paren test 34", "(\\C)", 0, "2", 0, 0), \ TEST("paren test 35", "(\\C)", 0, "\\u0300", 0, 0), \ TEST("paren test 36", "(\\C)", 0, "\n", 0, 1), \ TEST("paren test 37", "(\\d)", 0, "9", 0, 1), \ TEST("paren test 38", "(\\d)", 0, "\\u0966", 0, 1), \ TEST("paren test 39", "(\\D)", 0, "0", 0, 0), \ TEST("paren test 40", "(\\D)", 0, "\\u0660", 0, 0), \ TEST("paren test 41", "(\\D)", 0, "x", 0, 1), \ TEST("paren test 42", "(\\w)", 0, "\\u2200", 0, 1), \ TEST("paren test 43", "(\\w)", 0, " ", 0, 0), \ TEST("paren test 44", "(\\W)", 0, "a", 0, 0), \ TEST("paren test 45", "(\\W)", 0, "\\u4e00", 0, 0), \ TEST("paren test 46", "(\\W)", 0, "\t", 0, 1), \ TEST("paren test 47", "([a" RANGE "z])", 0, "m", 0, 1), \ TEST("paren test 48", "([012])", 0, "1", 0, 1), \ TEST("paren test 49", "([\\p{Sm}])", 0, "\\u2200", 0, 1), \ TEST("paren test 50", "([\\p{isGreek}])", 0, "\\u03ff", 0, 1), \ TEST("paren test 51", "([\\p{isGreek}])", 0, "\\u0400", 0, 0), \ TEST("paren test 52", "([ABCa" RANGE "z0127" RANGE "9\\p{Sm}\\p{isGreek}])", 0, "m", 0, 1), \ TEST("paren test 53", "([ABCa" RANGE "z0127" RANGE "9\\p{Sm}\\p{isGreek}])", 0, "8", 0, 1), \ TEST("paren test 54", "([ABCa" RANGE "z0127" RANGE "9\\p{Sm}\\p{isGreek}])", 0, "\\u0370", 0, 1), \ TEST("paren test 55", "([ABCa" RANGE "z0127" RANGE "9\\p{Sm}\\p{isGreek}])", 0, "M", 0, 0), \ TEST("paren test 56", "([^ABCa" RANGE "z0127" RANGE "9\\p{Sm}\\p{isGreek}])", 0, "z", 0, 0), \ TEST("paren test 57", "([^ABCa" RANGE "z0127" RANGE "9\\p{Sm}\\p{isGreek}])", 0, "1", 0, 0), \ TEST("paren test 58", "([^ABCa" RANGE "z0127" RANGE "9\\p{Sm}\\p{isGreek}])", 0, "\\u2200", 0, 0), \ TEST("paren test 59", "([^ABCa" RANGE "z0127" RANGE "9\\p{Sm}\\p{isGreek}])", 0, "\\u0400", 0, 1), \ TEST("paren test 60", "([ABCa" RANGE "z0127" RANGE "9\\p{Sm}\\p{isGreek}" MINUS "[aeiou8" RANGE "9]])", 0, "A", 0, 1),\ TEST("paren test 61", "([ABCa" RANGE "z0127" RANGE "9\\p{Sm}\\p{isGreek}" MINUS "[aeiou8" RANGE "9]])", 0, "1", 0, 1),\ \ TEST("paren test 62", "(abcd)", 0, "abcd", 0, 1), \ TEST("paren test 63", "(abcd)", 0, "abcde", 0, 0), \ TEST("paren test 64", "(abcd)", 0, "abc", 0, 0), \ \ \ \ /* PIECE TESTS \ */ \ \ TEST("piece test 0", "x?", 0, "", 0, 1), \ TEST("piece test 1", "x?", 0, "x", 0, 1), \ TEST("piece test 2", "x?", 0, "y", 0, 0), \ TEST("piece test 3", "abcx?", 0, "abc", 0, 1), \ TEST("piece test 4", "abcx?", 0, "abcx", 0, 1), \ TEST("piece test 5", "abcx?", 0, "abcy", 0, 0), \ \ TEST("piece test 6", "x*", 0, "", 0, 1), \ TEST("piece test 7", "x*", 0, "x", 0, 1), \ TEST("piece test 8", "x*", 0, "xx", 0, 1), \ TEST("piece test 9", "x*", 0, "xxx", 0, 1), \ TEST("piece test 10", "x*", 0, "y", 0, 0), \ TEST("piece test 11", "x*", 0, "xxy", 0, 0), \ \ TEST("piece test 12", "abcx*", 0, "abc", 0, 1), \ TEST("piece test 13", "abcx*", 0, "abcx", 0, 1), \ TEST("piece test 14", "abcx*", 0, "abcxx", 0, 1), \ TEST("piece test 15", "abcx*", 0, "abcxxx", 0, 1), \ TEST("piece test 16", "abcx*", 0, "abcy", 0, 0), \ TEST("piece test 17", "abcx*", 0, "abcxxy", 0, 0), \ \ \ TEST("piece test 18", "x+", 0, "", 0, 0), \ TEST("piece test 19", "x+", 0, "x", 0, 1), \ TEST("piece test 20", "x+", 0, "xx", 0, 1), \ TEST("piece test 21", "x+", 0, "xxx", 0, 1), \ TEST("piece test 22", "x+", 0, "y", 0, 0), \ TEST("piece test 23", "x+", 0, "xxy", 0, 0), \ \ TEST("piece test 24", "abcx+", 0, "abc", 0, 0), \ TEST("piece test 25", "abcx+", 0, "abcx", 0, 1), \ TEST("piece test 26", "abcx+", 0, "abcxx", 0, 1), \ TEST("piece test 27", "abcx+", 0, "abcxxx", 0, 1), \ TEST("piece test 28", "abcx+", 0, "abcy", 0, 0), \ TEST("piece test 29", "abcx+", 0, "abcxxy", 0, 0), \ \ TEST("piece test 30", "x{0,0}", 0, "", 0, 1), \ TEST("piece test 31", "x{0,0}", 0, "x", 0, 0), \ TEST("piece test 32", "x{0,1}", 0, "", 0, 1), \ TEST("piece test 33", "x{0,1}", 0, "x", 0, 1), \ TEST("piece test 34", "x{0,1}", 0, "xx", 0, 0), \ TEST("piece test 35", "x{0,3}", 0, "", 0, 1), \ TEST("piece test 36", "x{0,3}", 0, "x", 0, 1), \ TEST("piece test 37", "x{0,3}", 0, "xx", 0, 1), \ TEST("piece test 38", "x{0,3}", 0, "xxx", 0, 1), \ TEST("piece test 39", "x{0,3}", 0, "xxxx", 0, 0), \ \ TEST("piece test 40", "x{1,0}", rx_xml_recomp_BAD_DUPLICATION_RANGE, "", 0, 1), \ TEST("piece test 41", "x{1,0}", rx_xml_recomp_BAD_DUPLICATION_RANGE, "x", 0, 0), \ TEST("piece test 42", "x{1,1}", 0, "", 0, 0), \ TEST("piece test 43", "x{1,1}", 0, "x", 0, 1), \ TEST("piece test 44", "x{1,1}", 0, "xx", 0, 0), \ TEST("piece test 45", "x{1,3}", 0, "", 0, 0), \ TEST("piece test 46", "x{1,3}", 0, "x", 0, 1), \ TEST("piece test 47", "x{1,3}", 0, "xx", 0, 1), \ TEST("piece test 48", "x{1,3}", 0, "xxx", 0, 1), \ TEST("piece test 49", "x{1,3}", 0, "xxxx", 0, 0), \ \ \ TEST("piece test 50", "abcx{0,0}lmn", 0, "abclmn", 0, 1), \ TEST("piece test 51", "abcx{0,0}lmn", 0, "abcxlmn", 0, 0), \ TEST("piece test 52", "abcx{0,1}lmn", 0, "abclmn", 0, 1), \ TEST("piece test 53", "abcx{0,1}lmn", 0, "abcxlmn", 0, 1), \ TEST("piece test 54", "abcx{0,1}lmn", 0, "abcxxlmn", 0, 0), \ TEST("piece test 55", "abcx{0,3}lmn", 0, "abclmn", 0, 1), \ TEST("piece test 56", "abcx{0,3}lmn", 0, "abcxlmn", 0, 1), \ TEST("piece test 57", "abcx{0,3}lmn", 0, "abcxxlmn", 0, 1), \ TEST("piece test 58", "abcx{0,3}lmn", 0, "abcxxxlmn", 0, 1), \ TEST("piece test 59", "abcx{0,3}lmn", 0, "abcxxxxlmn", 0, 0), \ \ TEST("piece test 60", "abcx{1,0}lmn", rx_xml_recomp_BAD_DUPLICATION_RANGE, "abclmn", 0, 1), \ TEST("piece test 61", "abcx{1,0}lmn", rx_xml_recomp_BAD_DUPLICATION_RANGE, "abcxlmn", 0, 0), \ TEST("piece test 62", "abcx{1,1}lmn", 0, "abclmn", 0, 0), \ TEST("piece test 63", "abcx{1,1}lmn", 0, "abcxlmn", 0, 1), \ TEST("piece test 64", "abcx{1,1}lmn", 0, "abcxxlmn", 0, 0), \ TEST("piece test 65", "abcx{1,3}lmn", 0, "abclmn", 0, 0), \ TEST("piece test 66", "abcx{1,3}lmn", 0, "abcxlmn", 0, 1), \ TEST("piece test 67", "abcx{1,3}lmn", 0, "abcxxlmn", 0, 1), \ TEST("piece test 68", "abcx{1,3}lmn", 0, "abcxxxlmn", 0, 1), \ TEST("piece test 69", "abcx{1,3}lmn", 0, "abcxxxxlmn", 0, 0), \ \ TEST("piece test 70", "abcx{0,}lmn", 0, "abclmn", 0, 1), \ TEST("piece test 71", "abcx{0,}lmn", 0, "abcxlmn", 0, 1), \ TEST("piece test 72", "abcx{0,}lmn", 0, "abclmn", 0, 1), \ TEST("piece test 73", "abcx{0,}lmn", 0, "abcxlmn", 0, 1), \ TEST("piece test 74", "abcx{0,}lmn", 0, "abcxxlmn", 0, 1), \ TEST("piece test 75", "abcx{0,}lmn", 0, "abclmn", 0, 1), \ TEST("piece test 76", "abcx{0,}lmn", 0, "abcxlmn", 0, 1), \ TEST("piece test 77", "abcx{0,}lmn", 0, "abcxxlmn", 0, 1), \ TEST("piece test 78", "abcx{0,}lmn", 0, "abcxxxlmn", 0, 1), \ TEST("piece test 79", "abcx{0,}lmn", 0, "abcxxxxlmn", 0, 1), \ TEST("piece test 80", "abcx{0,}lmn", 0, "abcxxxxxxxxxxxxxxlmn", 0, 1), \ \ TEST("piece test 81", "abcx{1,}lmn", 0, "abclmn", 0, 0), \ TEST("piece test 82", "abcx{1,}lmn", 0, "abcxlmn", 0, 1), \ TEST("piece test 83", "abcx{1,}lmn", 0, "abclmn", 0, 0), \ TEST("piece test 84", "abcx{1,}lmn", 0, "abcxlmn", 0, 1), \ TEST("piece test 85", "abcx{1,}lmn", 0, "abcxxlmn", 0, 1), \ TEST("piece test 86", "abcx{1,}lmn", 0, "abclmn", 0, 0), \ TEST("piece test 87", "abcx{1,}lmn", 0, "abcxlmn", 0, 1), \ TEST("piece test 88", "abcx{1,}lmn", 0, "abcxxlmn", 0, 1), \ TEST("piece test 89", "abcx{1,}lmn", 0, "abcxxxlmn", 0, 1), \ TEST("piece test 90", "abcx{1,}lmn", 0, "abcxxxxlmn", 0, 1), \ TEST("piece test 91", "abcx{1,}lmn", 0, "abcxxxxxxxxxxxxxxlmn", 0, 1), \ \ TEST("piece test 92", "\\p{Ll}{4}-\\p{Nd}{5}", 0, "lmnop-09876", 0, 0), \ TEST("piece test 93", "\\p{Ll}{4}-\\p{Nd}{5}", 0, "\\u03ac\\u03ad\\u03ae\\u03af-12345", 0, 1), \ TEST("piece test 94", "\\p{Ll}{4}-\\p{Nd}{5}", 0, "\\u0255\\u0256\\u0257\\u0258-67890", 0, 1), \ TEST("piece test 95", "\\p{Ll}{4}-\\p{Nd}{5}", 0, "\\u0561\\u0562\\u0563\\u0564-24680", 0, 1), \ TEST("piece test 96", "\\p{Ll}{4}-\\p{Nd}{5}", 0, "abcd-13579", 0, 1), \ TEST("piece test 97", "\\p{Ll}{4}-\\p{Nd}{5}", 0, "\\u00e0\\u00e1\\u00e2\\u00e3-\\u0966\\u0967\\u0968\\u0969\\u096a", 0, 1), \ \ /* BRANCH TESTS \ */ \ \ TEST("alternative test 0", "(wee|week)(night|knights)", 0, "weeknights", 0, 1), \ TEST("alternative test 1", "(week|wee)(night|knights)", 0, "weeknights", 0, 1), \ TEST("alternative test 2", "(wee|week)(knights|night)", 0, "weeknights", 0, 1), \ TEST("alternative test 3", "(week|wee)(knights|night)", 0, "weeknights", 0, 1), \ \ \ \ TEST("tutorial example 0", "Chapter \\d", 0, "Chapter 0", 0, 1), \ TEST("tutorial example 1", "Chapter \\d", 0, "Chapter 1", 0, 1), \ TEST("tutorial example 2", "Chapter \\d", 0, "Chapter 9", 0, 1), \ TEST("tutorial example 3", "Chapter \\d", 0, "Chapter x", 0, 0), \ TEST("tutorial example 4", "Chapter \\d", 0, "Chapter 19", 0, 0), \ TEST("tutorial example 5", "Chapter \\d", 0, "Chapter ", 0, 0), \ \ \ TEST("tutorial example 6", "Chapter\\s\\d", 0, "Chapter 0", 0, 1), \ TEST("tutorial example 7", "Chapter\\s\\d", 0, "Chapter.0", 0, 0), \ TEST("tutorial example 8", "Chapter\\s\\d", 0, "Chapter 1", 0, 1), \ TEST("tutorial example 9", "Chapter\\s\\d", 0, "Chapter\n9", 0, 1), \ TEST("tutorial example 10", "Chapter\\s\\d", 0, "Chapter\rx", 0, 0), \ TEST("tutorial example 11", "Chapter\\s\\d", 0, "Chapter 19", 0, 0), \ TEST("tutorial example 12", "Chapter\\s\\d", 0, "Chapter ", 0, 0), \ \ /* complex expressions */ \ \ TEST("complex 0", "((\\p{Ll}{4}-\\p{Nd}*)|([\\p{isGreek}]+))?", 0, "", 0, 1), \ TEST("complex 1", "((\\p{Ll}{4}-\\p{Nd}*)|([\\p{isGreek}]+))?", 0, "abcd-1234", 0, 1), \ TEST("complex 2", "((\\p{Ll}{4}-\\p{Nd}*)|([\\p{isGreek}]+))?", 0, "abcdx-1234", 0, 0), \ TEST("complex 3", "((\\p{Ll}{4}-\\p{Nd}*)|([\\p{isGreek}]+))?", 0, "\\u03ac\\u03ad\\u03ae\\u03af", 0, 1), \ TEST("complex 4", "((\\p{Ll}{4}-\\p{Nd}*)|([\\p{isGreek}]+))?", 0, "\\u03ac\\u03ad\\u03ae\\u03af-", 0, 1), \ TEST("complex 5", "((\\p{Ll}{4}-\\p{Nd}*)|([\\p{isGreek}]+))?", 0, "\\u03ac\\u03ad\\u03ae\\u03af-234", 0, 1), \ TEST("complex 6", "((\\p{Ll}{4}-\\p{Nd}*)|([\\p{isGreek}]+))?", 0, "\\u03acx\\u03ae\\u03af-234", 0, 1), \ \ /* invalid expressions */ \ TEST("error 0", "a{1x}", rx_xml_recomp_MISSING_COMMA, 0, 0, 0), \ TEST("error 1", "a{1,", rx_xml_recomp_MISSING_BRACE, 0, 0, 0), \ TEST("error 2", "a{3,2}", rx_xml_recomp_BAD_DUPLICATION_RANGE, 0, 0, 0), \ TEST("error 3", "(a", rx_xml_recomp_MISSING_RPAREN, 0, 0, 0), \ TEST("error 4", "[abc", rx_xml_recomp_BOGUS_CHARACTER_CLASS, 0, 0, 0), \ TEST("error 5", "\\px", rx_xml_recomp_BOGUS_CATEGORY_ESCAPE, 0, 0, 0), \ TEST("error 6", "\\P", rx_xml_recomp_BOGUS_CATEGORY_ESCAPE, 0, 0, 0), \ TEST("error 7", "[z" RANGE "a]", rx_xml_recomp_BOGUS_CHARACTER_CLASS, 0, 0, 0), \ TEST("error 8", "[z" RANGE "]", rx_xml_recomp_BOGUS_CHARACTER_CLASS, 0, 0, 0), \ TEST(0, 0, 0, 0, 0, 0) struct xml_re_test_case xml_re_test_cases[] = { #define RANGE "-" #define MINUS "-" TEST_LIST }; struct xml_re_test_case xml_re_test_cases_alternative_syntax[] = { #undef RANGE #undef MINUS #define RANGE ".." #define MINUS "^" TEST_LIST }; tla-1.3.5+dfsg/src/hackerlab/tests/rx-xml-tests/unit-re.c0000644000175000017500000003664010457621774021746 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:41:22 2001 (unit-re.c) */ /* unit-re.c - * **************************************************************** * Copyright (C) 2000 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/bugs/panic.h" #include "hackerlab/cmd/main.h" #include "hackerlab/char/str.h" #include "hackerlab/fmt/cvt.h" #include "hackerlab/rx-posix/regexps.h" #include "hackerlab/rx/dbug.h" #include "hackerlab/uni/coding.h" #include "hackerlab/rx-xml/re.h" #include "hackerlab/xml/charsets.h" #include "hackerlab/tests/rx-xml-tests/tests.h" /* __STDC__ prototypes for static functions */ static size_t translate_str (size_t * points, enum uni_encoding_scheme encoding, t_uchar * output, t_uchar * input); static t_uchar * program_name = "unit-re"; static t_uchar * usage = "[options]"; static t_uchar * version_string = "1.0"; #define OPTS(OP, OP2) \ OP (opt_help_msg, "h", "help", 0, \ "Display a help message and exit.") \ OP (opt_version, "V", "version", 0, \ "Display a release identifier string") \ OP2 (opt_version, 0, 0, 0, "and exit.") \ OP (opt_iterations, "i", "iterations=n", 1, \ "Iterate N times.") \ OP (opt_only_test, "t", "test=n", 1, \ "Run only test N.") \ OP (opt_find_leak, "l", "find-leak", 0, \ "Figure out which test is leaking storage.") \ OP (opt_alternate_syntax, "a", "alternate-syntax", 0, \ "Use the alternative regexp syntax.") \ OP (opt_print_re, "p", "print-re", 0, \ "Print syntax trees.") \ OP (opt_dfa_cache_threshold, "D", "dfa-cache-threshold=N", 1, \ "Set the DFA cache GC threshold.") \ OP (opt_nfa_cache_threshold, "N", "nfa-cache-threshold=N", 1, \ "Set the NFA cache GC threshold.") \ OP (opt_cache_compilations, "c", "cache-compilations", 0, \ "Compile each r.e. only once.") \ OP (opt_verbose, "v", "verbose", 0, \ "Print test names and numbers.") \ OP (opt_range, "r", "range=m,n", 1, \ "Run tests m..n.") \ OP (opt_matches_only, "m", "matches-only", 0, \ "Only run tests cases with matching string.") enum options { OPTS (OPT_ENUM, OPT_IGN) }; struct opt_desc opts[] = { OPTS (OPT_DESC, OPT_DESC) {-1, 0, 0, 0, 0} }; int main (int argc, char * argv[]) { int errn; int verbose; int exit_status; int iter; int find_leak; int alternate_syntax; int only_test; int print_re; int matches_only; int cache_comps; int o; long lo; long hi; struct opt_parsed * option; unsigned long cache_size; rx_xml_rebuf * re_cache; enum rx_xml_recomp_errno * comp_error_cache; int * re_cached; lo = -1; hi = -1; verbose = 0; iter = 1; find_leak = 0; alternate_syntax = 0; only_test = -1; print_re = 0; matches_only = 0; cache_comps = 0; re_cache = 0; comp_error_cache = 0; re_cached = 0; option = 0; while (1) { o = opt_standard (lim_use_must_malloc, &option, opts, &argc, argv, program_name, usage, version_string, opt_help_msg, opt_version); if (o == opt_none) break; switch (o) { default: safe_printfmt (2, "unhandled option `%s'\n", option->opt_string); panic ("internal error parsing arguments"); usage_error: opt_usage (2, argv[0], program_name, usage, 1); panic_exit (); bogus_arg: safe_printfmt (2, "ill-formed argument for `%s' (`%s')\n", option->opt_string, option->arg_string); goto usage_error; case opt_iterations: if (cvt_decimal_to_uint (&errn, &iter, option->arg_string, str_length (option->arg_string))) goto bogus_arg; break; case opt_only_test: if (cvt_decimal_to_uint (&errn, &only_test, option->arg_string, str_length (option->arg_string))) goto bogus_arg; break; case opt_find_leak: find_leak = 1; break; case opt_alternate_syntax: alternate_syntax = 1; break; case opt_print_re: print_re = 1; break; case opt_dfa_cache_threshold: if (cvt_decimal_to_ulong (&errn, &cache_size, option->arg_string, str_length (option->arg_string))) goto bogus_arg; rx_set_dfa_cache_threshold ((size_t)cache_size); break; case opt_nfa_cache_threshold: if (cvt_decimal_to_ulong (&errn, &cache_size, option->arg_string, str_length (option->arg_string))) goto bogus_arg; rx_set_nfa_cache_threshold ((size_t)cache_size); break; case opt_cache_compilations: cache_comps = 1; break; case opt_verbose: verbose = 1; break; case opt_range: { t_uchar * comma; comma = str_chr_index (option->arg_string, ','); if (!comma) goto bogus_arg; if ( cvt_decimal_to_long (&errn, &lo, option->arg_string, comma - option->arg_string) || (lo < 0)) goto bogus_arg; if ( cvt_decimal_to_long (&errn, &hi, comma + 1, str_length (comma + 1)) || (hi < lo)) goto bogus_arg; break; } case opt_matches_only: matches_only = 1; break; } } { static enum uni_encoding_scheme encoding_progression[] = { uni_utf8, uni_utf16 }; int x; int n_comps; int n_matches; size_t n_bytes_matched; size_t n_points_matched; struct xml_re_test_case * test_cases; size_t * str_bytes_table[2]; size_t * str_points_table[2]; t_uchar ** str_table[2]; n_comps = 0; n_matches = 0; n_bytes_matched = 0; n_points_matched = 0; if (alternate_syntax) test_cases = xml_re_test_cases_alternative_syntax; else test_cases = xml_re_test_cases; str_bytes_table[0] = 0; str_bytes_table[1] = 0; str_points_table[0] = 0; str_points_table[1] = 0; str_table[0] = 0; str_table[1] = 0; for (x = 0; test_cases[x].test_name; ++x) { int enc; for (enc = 0; enc < 2; ++enc) { size_t * points; *(t_uchar **)ar_ref ((void **)&str_table[enc], lim_use_must_malloc, x, sizeof (t_uchar *)) = (t_uchar *)must_malloc (1024); points = (size_t *)ar_ref ((void **)&str_points_table[enc], lim_use_must_malloc, x, sizeof (size_t)); *(size_t *)ar_ref ((void **)&str_bytes_table[enc], lim_use_must_malloc, x, sizeof (size_t)) = translate_str (points, encoding_progression[enc], str_table[enc][x], test_cases[x].str); } } exit_status = 0; while (iter--) { int from; int to; if (only_test >= 0) { int q; from = only_test; to = from + 1; for (q = 0; test_cases[q].test_name; ++q) ; if (from >= q) { safe_printfmt (2, "test number (%d) out of range\n", from); exit (1); } } else { from = 0; for (to = 0; test_cases[to].test_name; ++to) ; if ((lo >= 0) && (lo < to)) { from = lo; if (hi + 1 < to) to = hi + 1; } } for (x = from; x < to; ++x) { int re_encoding; if (verbose) { safe_printfmt (1, "test %d (%s)\n", x, test_cases[x].test_name); } for (re_encoding = 0; re_encoding < 2; ++re_encoding) { t_uchar re_src[1024]; size_t re_src_bytes; rx_xml_rebuf * re; enum rx_xml_recomp_errno comp_error; re = (rx_xml_rebuf *)ar_ref ((void **)&re_cache, lim_use_must_malloc, x, sizeof (rx_xml_rebuf)); if (cache_comps && *(int *)ar_ref ((void **)&re_cached, lim_use_must_malloc, x, sizeof (int))) { comp_error = *(enum rx_xml_recomp_errno *)ar_ref ((void **)&comp_error_cache, lim_use_must_malloc, x, sizeof (enum rx_xml_recomp_errno)); } else { ++n_comps; re_src_bytes = translate_str (0, encoding_progression[re_encoding], re_src, test_cases[x].re); if (alternate_syntax) comp_error = rx_xml_recomp_opts (re, encoding_progression[re_encoding], (uni_string)re_src, re_src_bytes / uni_code_unit_size (encoding_progression[re_encoding]), rx_xml_syntax_dot_dot_ranges | rx_xml_syntax_carrot_set_difference, xml_charset); else comp_error = rx_xml_recomp (re, encoding_progression[re_encoding], (uni_string)re_src, re_src_bytes / uni_code_unit_size (encoding_progression[re_encoding])); *(enum rx_xml_recomp_errno *)ar_ref ((void **)&comp_error_cache, lim_use_must_malloc, x, sizeof (enum rx_xml_recomp_errno)) = comp_error; *(int *)ar_ref ((void **)&re_cached, lim_use_must_malloc, x, sizeof (int)) = 1; } if (comp_error != test_cases[x].comp_error) { safe_printfmt (2, "test %d (%s): incorrect compilation error -- got %d, wanted %d\n", x, test_cases[x].test_name, comp_error, test_cases[x].comp_error); safe_printfmt (2, " re encoding = %s\n", (encoding_progression[re_encoding] == uni_utf8 ? "utf8" : "utf16")); safe_printfmt (2, " comp # %d, match # %d\n", n_comps, n_matches); exit_status = 1; } if (comp_error) { if (find_leak) { size_t dfa_bytes; size_t nfa_bytes; dfa_bytes = rx_flush_dfa_cache (); nfa_bytes = rx_flush_nfa_cache (); if (dfa_bytes || nfa_bytes) { safe_printfmt (2, "test %d (%s): comp error\n", x, test_cases[x].test_name); safe_printfmt (2, "memory retained by dfa cache: %lu bytes\n", (unsigned long)dfa_bytes); safe_printfmt (2, "memory retained by nfa cache: %lu bytes\n", (unsigned long)nfa_bytes); exit_status = 1; } } } if (print_re) { safe_printfmt (1, "test %d (%s)\n", x, test_cases[x].test_name); safe_printfmt (1, "r.e. source:\n"); safe_printfmt (1, " %s\n", test_cases[x].re); safe_printfmt (1, "r.e. syntax:\n"); if (!comp_error) rx_print_rexp (1, 1 << 21, 4, re->exp); safe_printfmt (1, "test string:\n"); safe_printfmt (1, " %s\n", test_cases[x].str); } if (!comp_error && !test_cases[x].comp_error && (!matches_only || test_cases[x].is_match)) { int str_encoding; for (str_encoding = 0; str_encoding < 2; ++str_encoding) { t_uchar * str; size_t str_bytes; enum rx_xml_rematch_errno match_error; int is_match; ++n_matches; str_bytes = str_bytes_table[str_encoding][x]; str = str_table[str_encoding][x]; match_error = 0; is_match = rx_xml_is_match (&match_error, re, encoding_progression[str_encoding], (uni_string)str, str_bytes / uni_code_unit_size (encoding_progression[str_encoding])); n_bytes_matched += str_bytes; n_points_matched += str_points_table[str_encoding][x]; if ( ((is_match >= 0) && test_cases[x].match_error) || (match_error != test_cases[x].match_error)) { safe_printfmt (2, "test %d (%s): incorrect match error -- got %d, wanted %d\n", x, test_cases[x].test_name, match_error, test_cases[x].match_error); safe_printfmt (2, " re encoding = %s\n", (encoding_progression[re_encoding] == uni_utf8 ? "utf8" : "utf16")); safe_printfmt (2, " str encoding = %s\n", (encoding_progression[str_encoding] == uni_utf8 ? "utf8" : "utf16")); safe_printfmt (2, " comp # %d, match # %d\n", n_comps, n_matches); exit_status = 1; } else if (is_match != test_cases[x].is_match) { safe_printfmt (2, "test %d (%s): incorrect match result -- got %d, wanted %d\n", x, test_cases[x].test_name, is_match, test_cases[x].is_match); safe_printfmt (2, " re encoding = %s\n", (encoding_progression[re_encoding] == uni_utf8 ? "utf8" : "utf16")); safe_printfmt (2, " str encoding = %s\n", (encoding_progression[str_encoding] == uni_utf8 ? "utf8" : "utf16")); safe_printfmt (2, " comp # %d, match # %d\n", n_comps, n_matches); exit_status = 1; } } if (!cache_comps) { rx_xml_free_re (re); if (find_leak) { size_t dfa_bytes; size_t nfa_bytes; dfa_bytes = rx_flush_dfa_cache (); nfa_bytes = rx_flush_nfa_cache (); if (dfa_bytes || nfa_bytes) { safe_printfmt (2, "test %d (%s)\n", x, test_cases[x].test_name); safe_printfmt (2, "memory retained by dfa cache: %lu bytes\n", (unsigned long)dfa_bytes); safe_printfmt (2, "memory retained by nfa cache: %lu bytes\n", (unsigned long)nfa_bytes); exit_status = 1; } } } } } } } if (cache_comps) { for (x = 0; test_cases[x].test_name; ++x) { if ( *(int *)ar_ref ((void **)&re_cached, lim_use_must_malloc, x, sizeof (int)) && !*(enum rx_xml_recomp_errno *)ar_ref ((void **)&comp_error_cache, lim_use_must_malloc, x, sizeof (enum rx_xml_recomp_errno))) { rx_xml_rebuf * re; re = (rx_xml_rebuf *)ar_ref ((void **)&re_cache, lim_use_must_malloc, x, sizeof (rx_xml_rebuf)); rx_xml_free_re (re); } } } { size_t threshold; size_t failure_pt; size_t in_use; size_t high_water_mark; int dfa_hits; int dfa_misses; int dfa_total_hits; int dfa_total_misses; rx_dfa_cache_statistics (&threshold, &failure_pt, &in_use, &high_water_mark, &dfa_hits, &dfa_misses, &dfa_total_hits, &dfa_total_misses); safe_printfmt (1, "dfa cache stats:\n threshold %lu; failure_pt %lu\n in_use %lu; high_water_mark %lu\n hits %d; misses %d; total_hits %d; total_misses %d\n", (unsigned long)threshold, (unsigned long)failure_pt, (unsigned long)in_use, (unsigned long)high_water_mark, dfa_hits, dfa_misses, dfa_total_hits, dfa_total_misses); } { size_t threshold; size_t failure_pt; size_t in_use; size_t high_water_mark; int nfa_hits; int nfa_misses; int nfa_saves; rx_nfa_cache_statistics (&threshold, &failure_pt, &in_use, &high_water_mark, &nfa_hits, &nfa_misses, &nfa_saves); safe_printfmt (1, "nfa cache stats:\n threshold %lu; failure_pt %lu\n in_use %lu; high_water_mark %lu\n hits %d; misses %d; saves %d\n", (unsigned long)threshold, (unsigned long)failure_pt, (unsigned long)in_use, (unsigned long)high_water_mark, nfa_hits, nfa_misses, nfa_saves); } { size_t dfa_bytes; size_t nfa_bytes; dfa_bytes = rx_flush_dfa_cache (); safe_printfmt (1, "memory retained by dfa cache: %lu bytes\n", (unsigned long)dfa_bytes); nfa_bytes = rx_flush_nfa_cache (); safe_printfmt (1, "memory retained by nfa cache: %lu bytes\n", (unsigned long)nfa_bytes); if (dfa_bytes || nfa_bytes) exit_status = 1; } safe_printfmt (1, "%d compiles, %d matches, %lu bytes matched, %lu code points matched\n", n_comps, n_matches, (unsigned long)n_bytes_matched, (unsigned long)n_points_matched); } exit (exit_status); } static size_t translate_str (size_t * points, enum uni_encoding_scheme encoding, t_uchar * output, t_uchar * input) { size_t input_pos; size_t input_len; size_t output_pos; size_t output_len; size_t p; input_pos = 0; input_len = str_length (input); output_pos = 0; output_len = 1024; p = 0; while (input_pos < input_len) { t_unicode c; c = input[input_pos++]; if ( (c == '\\') && (input_pos < input_len) && (input[input_pos] == 'u')) { int errn; unsigned long x; if ( ((input_pos + 5) > input_len) || (cvt_hex_to_ulong (&errn, &x, input + input_pos + 1, 4))) panic ("bogus escape in test string"); c = x; input_pos += 5; } ++p; switch (encoding) { case uni_utf8: uni_utf8_iput (output, &output_pos, output_len, c); break; case uni_utf16: uni_utf16_iput (output, &output_pos, output_len, c); break; default: panic ("coding error in unit-re.c"); } } if (points) *points = p; return output_pos; } tla-1.3.5+dfsg/src/hackerlab/tests/rx-xml-tests/unit-re.sh0000744000175000017500000000136610457621774022134 0ustar useruser#!/bin/sh # tag: Tom Lord Tue Dec 4 14:54:37 2001 (rx-xml-tests/unit-re.sh) # set -e arg0="$0" srcdir=`dirname "$arg0"` echo "================ xml regexp tests ================" time ./unit-re echo "================ xml regexp tests (alternate syntax) ================" time ./unit-re --alternate-syntax echo "...passed" echo "================ xml regexp tests (10K caches) ================" time ./unit-re --nfa-cache-threshold=10240 --dfa-cache-threshold=10240 echo "================ xml regexp tests (8MB caches) ================" time ./unit-re --nfa-cache-threshold=8388608 --dfa-cache-threshold=8388608 echo "================ xml regexp tests (stress test < 5 minutes) ================" time ./unit-re --iterations=500 --cache-compilations tla-1.3.5+dfsg/src/hackerlab/tests/rx-xml-tests/UNPLUGGED/0000755000175000017500000000000010457621774021540 5ustar userusertla-1.3.5+dfsg/src/hackerlab/tests/rx-xml-tests/UNPLUGGED/REQ0000644000175000017500000000003310457621774022106 0ustar useruserunidata-tests rx-xml-tests tla-1.3.5+dfsg/src/hackerlab/tests/rx-xml-tests/Makefile.in0000644000175000017500000000040210457621774022247 0ustar useruser# tag: Tom Lord Tue Dec 4 14:52:11 2001 (rx-xml-tests/Makefile.in) # tested-headers := re.h test-headers := $(addprefix hackerlab/rx-xml/, $(tested-headers)) libs := $(objroot)/hackerlab/libhackerlab/libhackerlab.a include $(makefiles)/unit-tests.mk tla-1.3.5+dfsg/src/hackerlab/tests/rx-xml-tests/test-time-re.c0000644000175000017500000001554710457621774022705 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:41:22 2001 (test-time-re.c) */ /* time-re.c - timing test for rx-xml * **************************************************************** * Copyright (C) 2001 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/cmd/main.h" #include "hackerlab/rx-xml/re.h" static t_uchar * program_name = "time-re"; static t_uchar * usage = "[options]"; static t_uchar * version_string = "1.0"; #define OPTS(OP, OP2) \ OP (opt_help_msg, "h", "help", 0, \ "Display a help message and exit.") \ OP (opt_version, "V", "version", 0, \ "Display a release identifier string") \ OP2 (opt_version, 0, 0, 0, "and exit.") \ OP (opt_verbose, "v", "verbose", 0, \ "Print cache usage information.") \ OP (opt_monoscript, "m", "monoscript", 0, \ "Don't use lots of different scripts in the tests.") \ OP (opt_utf16, 0, "utf16", 0, \ "Test matching utf16 strings.") \ OP (opt_iterations, "i", "iterations=N", 1, \ "Set the number of test iterations.") \ OP (opt_dfa_cache_threshold, "D", "dfa-cache-threshold=N", 1, \ "Set the DFA cache GC threshold.") \ OP (opt_nfa_cache_threshold, "N", "nfa-cache-threshold=N", 1, \ "Set the NFA cache GC threshold.") enum options { OPTS (OPT_ENUM, OPT_IGN) }; struct opt_desc opts[] = { OPTS (OPT_DESC, OPT_DESC) {-1, 0, 0, 0, 0} }; static t_uchar * test_exp = "\\p{Ll}{4}-\\p{Nd}{5}"; #define N_TESTS 6 static t_uchar * test_strings[N_TESTS] = { "lmnop-09876", "\\u03ac\\u03ad\\u03ae\\u03af-12345", "abcd-13579", "\\u0255\\u0256\\u0257\\u0258-67890", "\\u0561\\u0562\\u0563\\u0564-24680", "\\u00e0\\u00e1\\u00e2\\u00e3-\\u0966\\u0967\\u0968\\u0969\\u096a", }; #define BUF_SIZE 1024 static t_uchar utf16_tests[N_TESTS][BUF_SIZE]; static size_t utf16_test_sizes[N_TESTS]; static t_uchar utf8_tests[N_TESTS][BUF_SIZE]; static size_t utf8_test_sizes[N_TESTS]; static size_t translate_str (enum uni_encoding_scheme encoding, t_uchar * output, t_uchar * input) { size_t input_pos; size_t input_len; size_t output_pos; size_t output_len; input_pos = 0; input_len = str_length (input); output_pos = 0; output_len = BUF_SIZE; while (input_pos < input_len) { t_unicode c; c = input[input_pos++]; if ( (c == '\\') && (input_pos < input_len) && (input[input_pos] == 'u')) { int errn; unsigned long x; if ( ((input_pos + 5) > input_len) || (cvt_hex_to_ulong (&errn, &x, input + input_pos + 1, 4))) panic ("bogus escape in test string"); c = x; input_pos += 5; } switch (encoding) { case uni_utf8: uni_utf8_iput (output, &output_pos, output_len, c); break; case uni_utf16: uni_utf16_iput (output, &output_pos, output_len, c); break; default: panic ("coding error in unit-re.c"); } } return output_pos; } static void init_tests (void) { int x; for (x = 0; x < N_TESTS; ++x) { utf16_test_sizes[x] = translate_str (uni_utf16, utf16_tests[x], test_strings[x]); utf8_test_sizes[x] = translate_str (uni_utf8, utf8_tests[x], test_strings[x]); } } int main (int argc, char * argv[]) { int errn; int o; struct opt_parsed * option; enum uni_encoding_scheme encoding; unsigned long cache_size; unsigned long iterations; int verbose; int monoscript; option = 0; encoding = uni_utf8; iterations = 150000; verbose = 0; monoscript = 0; while (1) { o = opt_standard (lim_use_must_malloc, &option, opts, &argc, argv, program_name, usage, version_string, opt_help_msg, opt_version); if (o == opt_none) break; switch (o) { default: safe_printfmt (2, "unhandled option `%s'\n", option->opt_string); panic ("internal error parsing arguments"); usage_error: opt_usage (2, argv[0], program_name, usage, 1); panic_exit (); bogus_arg: safe_printfmt (2, "ill-formed argument for `%s' (`%s')\n", option->opt_string, option->arg_string); goto usage_error; case opt_dfa_cache_threshold: if (cvt_decimal_to_ulong (&errn, &cache_size, option->arg_string, str_length (option->arg_string))) goto bogus_arg; rx_set_dfa_cache_threshold ((size_t)cache_size); break; case opt_nfa_cache_threshold: if (cvt_decimal_to_ulong (&errn, &cache_size, option->arg_string, str_length (option->arg_string))) goto bogus_arg; rx_set_nfa_cache_threshold ((size_t)cache_size); break; case opt_iterations: if (cvt_decimal_to_ulong (&errn, &iterations, option->arg_string, str_length (option->arg_string))) goto bogus_arg; break; case opt_utf16: encoding = uni_utf16; break; case opt_verbose: verbose = 1; break; case opt_monoscript: monoscript = 1; break; } } init_tests (); { int outer; rx_xml_rebuf re; if (rx_xml_recomp (&re, uni_iso8859_1, (uni_string)test_exp, str_length (test_exp))) panic ("unable to compile regexp"); for (outer = 0; outer < iterations; ++outer) { int inner; for (inner = 0; inner < N_TESTS; ++inner) { int matches; enum rx_xml_rematch_errno errn; int test; if (inner && monoscript) test = 1; else test = inner; matches = rx_xml_is_match (&errn, &re, encoding, (uni_string)(encoding == uni_utf8 ? utf8_tests[test] : utf16_tests[test]), (encoding == uni_utf8 ? utf8_test_sizes[test] : utf16_test_sizes[test] / 2)); if (matches && (inner == 0)) panic ("bogus string matched"); else if (matches < 0) panic ("error during match"); } } } if (verbose) { { size_t threshold; size_t failure_pt; size_t in_use; size_t high_water_mark; int dfa_hits; int dfa_misses; int dfa_total_hits; int dfa_total_misses; rx_dfa_cache_statistics (&threshold, &failure_pt, &in_use, &high_water_mark, &dfa_hits, &dfa_misses, &dfa_total_hits, &dfa_total_misses); safe_printfmt (1, "dfa cache stats:\n threshold %lu; failure_pt %lu\n in_use %lu; high_water_mark %lu\n hits %d; misses %d; total_hits %d; total_misses %d\n", (unsigned long)threshold, (unsigned long)failure_pt, (unsigned long)in_use, (unsigned long)high_water_mark, dfa_hits, dfa_misses, dfa_total_hits, dfa_total_misses); } { size_t threshold; size_t failure_pt; size_t in_use; size_t high_water_mark; int nfa_hits; int nfa_misses; int nfa_saves; rx_nfa_cache_statistics (&threshold, &failure_pt, &in_use, &high_water_mark, &nfa_hits, &nfa_misses, &nfa_saves); safe_printfmt (1, "nfa cache stats:\n threshold %lu; failure_pt %lu\n in_use %lu; high_water_mark %lu\n hits %d; misses %d; saves %d\n", (unsigned long)threshold, (unsigned long)failure_pt, (unsigned long)in_use, (unsigned long)high_water_mark, nfa_hits, nfa_misses, nfa_saves); } } return 0; } tla-1.3.5+dfsg/src/hackerlab/tests/unidata-tests/0000755000175000017500000000000010457621774020404 5ustar userusertla-1.3.5+dfsg/src/hackerlab/tests/unidata-tests/unit-unidata.c0000644000175000017500000001471010457621774023155 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:41:21 2001 (unit-unidata.c) */ /* unit-unidata.c - * **************************************************************** * Copyright (C) YEAR NAME * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/unidata/unidata.h" #include "hackerlab/cmd/main.h" static t_uchar * program_name = "unit-unidata"; static t_uchar * usage = "[options]"; static t_uchar * version_string = "1.0"; #define OPTS(OP, OP2) \ OP (opt_help_msg, "h", "help", 0, \ "Display a help message and exit.") \ OP (opt_version, "V", "version", 0, \ "Display a release identifier string") \ OP2 (opt_version, 0, 0, 0, "and exit.") enum options { OPTS (OPT_ENUM, OPT_IGN) }; struct opt_desc opts[] = { OPTS (OPT_DESC, OPT_DESC) {-1, 0, 0, 0, 0} }; struct unidata_range { t_unicode first; t_unicode last; }; static struct unidata_range abbreviated_ranges[] = { { 0x3400, 0x4db5 }, { 0x4e00, 0x9fa5 }, { 0xac00, 0xd7a3 }, { 0xd800, 0xdb7f }, { 0xdb80, 0xdbff }, { 0xdc00, 0xdfff }, { 0xe000, 0xf8ff }, { 0, 0 } }; static struct unidata_range db_ranges[] = { { 0, 0xffff }, { 0, 0 } }; static void print_char_data (t_unicode c) { static t_uchar * digits[] = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9" }; int decimal; struct uni_decomposition_mapping * decomp; decimal = unidata_decimal_digit_value (c); safe_printfmt (1, "%04X;%s;%d;%s;", c, uni_general_category_names[unidata_general_category (c)].name, unidata_canonical_combining_class (c), uni_bidi_category_names[unidata_bidi_category (c)].name); decomp = unidata_character_decomposition_mapping (c); if (decomp->type != uni_decomposition_none) { int x; if (decomp->type != uni_decomposition_canonical) { safe_printfmt (1, "<%s> ", uni_decomposition_type_names[decomp->type].name); } for (x = 0; decomp->decomposition[x]; ++x) { safe_printfmt (1, "%04X%s", decomp->decomposition[x], (decomp->decomposition[x + 1] ? " " : "")); } } safe_printfmt (1, ";%s;%s;", ((decimal == -1) ? (t_uchar *)"" : digits[decimal]), (unidata_is_mirrored (c) ? "Y" : "N")); if (c != unidata_to_upper (c)) safe_printfmt (1, "%04X", unidata_to_upper (c)); safe_printfmt (1, ";"); if (c != unidata_to_lower (c)) safe_printfmt (1, "%04X", unidata_to_lower (c)); safe_printfmt (1, ";"); if (c != unidata_to_title (c)) safe_printfmt (1, "%04X", unidata_to_title (c)); safe_printfmt (1, "\r\n"); } int main (int argc, char * argv[]) { int errn; int o; struct opt_parsed * option; if (vfdbuf_buffer_fd (&errn, 1, 0, O_WRONLY, 0)) panic ("unable to buffer fd"); option = 0; while (1) { o = opt_standard (lim_use_must_malloc, &option, opts, &argc, argv, program_name, usage, version_string, 0, opt_help_msg, opt_none, opt_version); if (o == opt_none) break; switch (o) { default: safe_printfmt (2, "unhandled option `%s'\n", option->opt_string); panic ("internal error parsing arguments"); #if 0 usage_error: opt_usage (2, argv[0], program_name, usage, 1); panic_exit (); bogus_arg: safe_printfmt (2, "ill-formed argument for `%s' (`%s')\n", option->opt_string, option->arg_string); goto usage_error; #endif } } { int r; t_unicode c; int s; s = 0; for (r = 0; db_ranges[r].last; ++r) { for (c = db_ranges[r].first; c <= db_ranges[r].last; ++c) { if (c != abbreviated_ranges[s].first) { if (unidata_is_assigned_code_point (c)) { print_char_data (c); } else if (unidata_general_category (c) == uni_general_category_Co) { safe_printfmt (1, "%04X;Co;0;L;;;N;;;\r\n", c); } } else { enum uni_general_category cat; int combine; enum uni_bidi_category bidi; int decimal; int mirrored; t_unicode upper; t_unicode lower; t_unicode title; t_unicode q; struct uni_decomposition_mapping * decomp; cat = unidata_general_category (c); if (cat == uni_general_category_Cs) { bidi = uni_bidi_L; decimal = -1; mirrored = 0; } else { bidi = unidata_bidi_category (c); decimal = unidata_decimal_digit_value (c); mirrored = unidata_is_mirrored (c); } combine = unidata_canonical_combining_class (c); decomp = unidata_character_decomposition_mapping (c); upper = unidata_to_upper (c); lower = unidata_to_lower (c); title = unidata_to_title (c); for (q = c; q <= abbreviated_ranges[s].last; ++q) { invariant (cat == unidata_general_category (q)); if (cat != uni_general_category_Cs) { invariant (combine == unidata_canonical_combining_class (q)); invariant (bidi == unidata_bidi_category (q)); invariant (decimal == unidata_decimal_digit_value (q)); invariant (mirrored == unidata_is_mirrored (q)); invariant (decomp == unidata_character_decomposition_mapping (q)); invariant (((upper == c) && (unidata_to_upper (q) == q)) || (upper == unidata_to_upper (q))); invariant (((lower == c) && (unidata_to_lower (q) == q)) || (lower == unidata_to_lower (q))); invariant (((title == c) && (unidata_to_title (q) == q)) || (title == unidata_to_title (q))); } } { int z; for (z = 0; z < 2; ++z) { static t_uchar * digits[] = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9" }; safe_printfmt (1, "%04X;%s;%d;%s;", (z ? q - 1 : c), uni_general_category_names[cat].name, unidata_canonical_combining_class (c), uni_bidi_category_names[bidi].name); if (decomp->type != uni_decomposition_none) { int x; if (decomp->type != uni_decomposition_canonical) { safe_printfmt (1, "<%s> ", uni_decomposition_type_names[decomp->type].name); } for (x = 0; decomp->decomposition[x]; ++x) { safe_printfmt (1, "%04X%s", decomp->decomposition[x], (decomp->decomposition[x + 1] ? " " : "")); } } safe_printfmt (1, ";%s;%s;", ((decimal == -1) ? (t_uchar *)"" : digits[decimal]), (mirrored ? "Y" : "N")); if (c != upper) safe_printfmt (1, "%04X", upper); safe_printfmt (1, ";"); if (c != lower) safe_printfmt (1, "%04X", lower); safe_printfmt (1, ";"); if (c != title) safe_printfmt (1, "%04X", title); safe_printfmt (1, "\r\n"); } } c = abbreviated_ranges[s].last; ++s; } } } } return 0; } tla-1.3.5+dfsg/src/hackerlab/tests/unidata-tests/unit-unidata.sh0000744000175000017500000000076410457621774023352 0ustar useruser#!/bin/sh # tag: Tom Lord Tue Dec 4 14:54:36 2001 (unidata-tests/unit-unidata.sh) # set -e echo "================ unit-unidata test ================" rm -f ,tmp ,tmp2 echo "pruning unidata.txt" sed -e "s/\([^;]*;\)[^;]*;\([^;]*;[^;]*;[^;]*;[^;]*;[^;]*;\)[^;]*;[^;]*;\([^;]*;\)[^;]*;[^;]*;\([^;]*;[^;]*;[^;]*\)/\1\2\3\4/" < $srcroot/hackerlab/unidata-scaffolding/unidata.txt > ,tmp echo "printing hackerlab db" ./unit-unidata > ,tmp2 echo "comparing results" cmp ,tmp ,tmp2 echo ...passed tla-1.3.5+dfsg/src/hackerlab/tests/unidata-tests/Makefile.in0000644000175000017500000000043610457621774022454 0ustar useruser# tag: Tom Lord Tue Dec 4 14:52:10 2001 (unidata-tests/Makefile.in) # tested-headers := unidata.h test-headers := $(addprefix hackerlab/unidata/, $(tested-headers)) libs := $(objroot)/hackerlab/libhackerlab/libhackerlab.a -lm include $(makefiles)/unit-tests.mk export srcroot tla-1.3.5+dfsg/src/hackerlab/tests/unidata-tests/DESC0000644000175000017500000000072710457621774021053 0ustar useruser# tag: Tom Lord Tue Dec 4 15:05:30 2001 (unidata-tests/DESC) # We test the installed header files to make sure they compile. unit-unidata Generate a version of "unidata.txt", omitting some fields, starting from the unidata database in "libflux/unidata/unidata.h". Compare the generated database to the official "unidata.txt". "libflux/unidata/blocks.h" isn't tested yet (but is exceedingly trivial). It is indirectly, partially tested by rx-unicode tests. tla-1.3.5+dfsg/src/hackerlab/tests/unidata-tests/PLUGIN/0000755000175000017500000000000010457621774021402 5ustar userusertla-1.3.5+dfsg/src/hackerlab/tests/unidata-tests/PLUGIN/REQ0000644000175000017500000000003110457621774021746 0ustar useruseruni-tests unidata-tests tla-1.3.5+dfsg/src/hackerlab/tests/bugs-tests/0000755000175000017500000000000010457621774017717 5ustar userusertla-1.3.5+dfsg/src/hackerlab/tests/bugs-tests/unit-panic.panic-msg0000644000175000017500000000002010457621774023556 0ustar useruserPANIC: this way tla-1.3.5+dfsg/src/hackerlab/tests/bugs-tests/unit-panic.sh0000744000175000017500000000126010457621774022322 0ustar useruser#!/bin/sh # tag: Tom Lord Tue Dec 4 14:54:19 2001 (bugs-tests/unit-panic.sh) # set -e arg0="$0" srcdir=`dirname "$arg0"` echo ================ panic and invariant tests ================ echo "panic test..." rm -f ,msg (./unit-panic --panic "this way" 2> ,msg) && (echo "incorrect exit status" ; exit 1) cmp ,msg $srcdir/unit-panic.panic-msg echo "... passed" echo "invariant test..." ./unit-panic --invariant || (echo "incorrect exit status" ; exit 1) echo "... passed" echo "botched invariant test..." rm -f ,msg (./unit-panic --botched 2> ,msg) && (echo "incorrect exit status" ; exit 1) grep -q "unit-panic\\.c:[0-9]*:botched invariant" ,msg echo "... passed" rm -f ,msg tla-1.3.5+dfsg/src/hackerlab/tests/bugs-tests/Makefile.in0000644000175000017500000000046610457621774021772 0ustar useruser# tag: Tom Lord Tue Dec 4 14:52:21 2001 (bugs-tests/Makefile.in) # tested-headers := panic.h \ panic-exit.h \ test-coverage.h test-headers := $(addprefix hackerlab/bugs/, $(tested-headers)) libs := $(objroot)/hackerlab/libhackerlab/libhackerlab.a -lm include $(makefiles)/unit-tests.mk tla-1.3.5+dfsg/src/hackerlab/tests/bugs-tests/DESC0000644000175000017500000000133210457621774020357 0ustar useruser# tag: Tom Lord Tue Dec 4 15:05:24 2001 (bugs-tests/DESC) # We test the installed header files to make sure they compile. unit-panic: --panic test a call to `panic' checking the exit status and standard error output. --invariant check a passed `invariant' --botched test a failed `invariant', checking the exit status and standard error output This indirectly tests panic-exit. unit-test-coverage: [no options] test full coverage for normal exit status and no output --skip-a test skipping coverage point A for exit status and message --skip-b test skipping coverage point B for exit status and message --skip-a --skip-b test skipping both coverage points for exit status and message tla-1.3.5+dfsg/src/hackerlab/tests/bugs-tests/PLUGIN/0000755000175000017500000000000010457621774020715 5ustar userusertla-1.3.5+dfsg/src/hackerlab/tests/bugs-tests/PLUGIN/REQ0000644000175000017500000000002610457621774021265 0ustar useruserbugs-tests bugs-tests tla-1.3.5+dfsg/src/hackerlab/tests/bugs-tests/unit-test-coverage.c0000644000175000017500000000413110457621774023607 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:39:39 2001 (unit-test-coverage.c) */ /* unit-test-coverage.c - * **************************************************************** * Copyright (C) 2000 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/bugs/test-coverage.h" #include "hackerlab/cmd/main.h" static t_uchar * program_name = "unit-test-coverage"; static t_uchar * usage = "[options]"; static t_uchar * version_string = "1.0"; #define OPTS(OP, OP2) \ OP (opt_help_msg, "h", "help", 0, \ "Display a help message and exit.") \ OP (opt_version, "V", "version", 0, \ "Display a release identifier string") \ OP2 (opt_version, 0, 0, 0, "and exit.") \ OP (opt_skip_a, "a", "skip-a", 0, \ "Skip coverage point A.") \ OP (opt_skip_b, "b", "skip-b", 0, \ "Skip coverage point B.") \ enum options { OPTS (OPT_ENUM, OPT_IGN) }; struct opt_desc opts[] = { OPTS (OPT_DESC, OPT_DESC) {-1, 0, 0, 0, 0} }; #define TEST_COVERAGE_LIST(MACRO) \ TEST_COVERAGE_ ## MACRO (point_a); \ TEST_COVERAGE_ ## MACRO (point_b) TEST_COVERAGE_LIST(DECL); int main (int argc, char * argv[]) { int o; struct opt_parsed * option; int skip_a; int skip_b; option = 0; skip_a = 0; skip_b = 0; while (1) { o = opt_standard (lim_use_must_malloc, &option, opts, &argc, argv, program_name, usage, version_string, 0, opt_help_msg, opt_none, opt_version); if (o == opt_none) break; switch (o) { default: safe_printfmt (2, "unhandled option `%s'\n", option->opt_string); panic ("internal error parsing arguments"); #if 0 usage_error: opt_usage (2, argv[0], program_name, usage, 1); panic_exit (); bogus_arg: safe_printfmt (2, "ill-formed argument for `%s' (`%s')\n", option->opt_string, option->arg_string); goto usage_error; #endif case opt_skip_a: skip_a = 1; break; case opt_skip_b: skip_b = 1; break; } } if (!skip_a) TEST_COVERED(point_a); if (!skip_b) TEST_COVERED(point_b); TEST_COVERAGE_LIST(CHECK); return 0; } tla-1.3.5+dfsg/src/hackerlab/tests/bugs-tests/unit-panic.c0000644000175000017500000000376210457621774022142 0ustar useruser/* unit-panic.c - test panic.c * **************************************************************** * Copyright (C) 2000 Thomas Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/cmd/main.h" static t_uchar * program_name = "unit-panic"; static t_uchar * usage = "[options]"; static t_uchar * version_string = "1.0"; #define OPTS(OP, OP2) \ OP (opt_help_msg, "h", "help", 0, \ "Display a help message and exit.") \ OP (opt_version, "V", "version", 0, \ "Display a release identifier string") \ OP2 (opt_version, 0, 0, 0, "and exit.") \ OP (opt_panic, "p", "panic msg", 1, \ "Exit by `panic' with the indicated message") \ OP (opt_ok, "i", "invariant", 0, \ "Execute a successful invariant test (no output).") \ OP (opt_botched, "b", "botched", 0, \ "Execute a failed invariant test (exit with a messsage).") enum options { OPTS (OPT_ENUM, OPT_IGN) }; struct opt_desc opts[] = { OPTS (OPT_DESC, OPT_DESC) {-1, 0, 0, 0, 0} }; int main (int argc, char * argv[]) { int o; struct opt_parsed * option; option = 0; while (1) { o = opt_standard (lim_use_must_malloc, &option, opts, &argc, argv, program_name, usage, version_string, 0, opt_help_msg, opt_none, opt_version); if (o == opt_none) break; switch (o) { default: safe_printfmt (2, "unhandled option `%s'\n", option->opt_string); panic ("internal error parsing arguments"); #if 0 usage_error: opt_usage (2, argv[0], program_name, usage, 1); panic_exit (); bogus_arg: safe_printfmt (2, "ill-formed argument for `%s' (`%s')\n", option->opt_string, option->arg_string); goto usage_error; #endif case opt_panic: panic (option->arg_string); exit (0); case opt_ok: invariant (1); exit (0); case opt_botched: { int zero; zero = 0; invariant(zero + 0); panic ("botched invariant returned"); break; } } } return 0; } tla-1.3.5+dfsg/src/hackerlab/tests/bugs-tests/unit-test-coverage.sh0000744000175000017500000000204110457621774023776 0ustar useruser#!/bin/sh # tag: Tom Lord Tue Dec 4 14:54:26 2001 (bugs-tests/unit-test-coverage.sh) # set -e arg0="$0" srcdir=`dirname "$arg0"` echo ================ test coverage tests ================ echo "full coverage test..." rm -f ,msg (./unit-test-coverage 2> ,msg) || (echo "incorrect exit status" ; exit 1) cmp ,msg /dev/null echo "... passed" echo "skip point B test..." rm -f ,msg ,correct (./unit-test-coverage --skip-b 2> ,msg) && (echo "incorrect exit status" ; exit 1) echo "PANIC: test coverage failure: point_b" > ,correct cmp ,msg ,correct echo "... passed" echo "skip point A test..." rm -f ,msg ,correct (./unit-test-coverage --skip-a 2> ,msg) && (echo "incorrect exit status" ; exit 1) echo "PANIC: test coverage failure: point_a" > ,correct cmp ,msg ,correct echo "... passed" echo "skip points A and B test..." rm -f ,msg ,correct (./unit-test-coverage --skip-a --skip-b 2> ,msg) && (echo "incorrect exit status" ; exit 1) echo "PANIC: test coverage failure: point_a" > ,correct cmp ,msg ,correct echo "... passed" rm -f ,msg ,correct tla-1.3.5+dfsg/src/hackerlab/tests/bitset-tests/0000755000175000017500000000000010457621774020251 5ustar userusertla-1.3.5+dfsg/src/hackerlab/tests/bitset-tests/unit-bitset.tests0000644000175000017500001747141610457621774023631 0ustar userusera 1 0 0 e n 0 # 0 is_member c a 1 0 0 e n 0 # 1 is_member c a 1 0 0 e n 0 # 2 is_member c a 1 0 0 f n 0 # 3 is_member c a 1 0 0 f n 0 # 4 is_member c a 1 0 0 f n 0 # 5 is_member c a 1 0 0 n 0 # 6 is_member c a 1 0 0 n 0 # 7 is_member c a 1 0 0 n 0 # 8 is_member c a 1 0 1 e n 0 # 9 is_member c a 1 0 1 e n 0 # 10 is_member c a 1 0 1 e n 0 # 11 is_member c a 1 0 1 f n 0 # 12 is_member c a 1 0 1 f n 0 # 13 is_member c a 1 0 1 f n 0 # 14 is_member c a 1 0 1 n 0 # 15 is_member c a 1 0 1 n 0 # 16 is_member c a 1 0 1 0 n 0 # 17 is_member c a 1 1 0 e n 0 # 18 is_member c a 1 1 0 e n 0 # 19 is_member c a 1 1 0 e n 0 # 20 is_member c a 1 1 0 f n 0 # 21 is_member c a 1 1 0 f n 0 # 22 is_member c a 1 1 0 f n 0 # 23 is_member c a 1 1 0 n 0 # 24 is_member c a 1 1 0 0 n 0 # 25 is_member c a 1 1 0 0 n 0 # 26 is_member c a 1 1 1 e n 0 # 27 is_member c a 1 1 1 e n 0 # 28 is_member c a 1 1 1 e n 0 # 29 is_member c a 1 1 1 f n 0 # 30 is_member c a 1 1 1 f n 0 # 31 is_member c a 1 1 1 f n 0 # 32 is_member c a 1 1 1 n 0 # 33 is_member c a 1 1 1 0 n 0 # 34 is_member c a 1 1 1 n 0 # 35 is_member c a 31 0 0 e n 0 # 36 is_member c a 31 0 0 e n 30 # 37 is_member c a 31 0 0 e n 28 # 38 is_member c a 31 0 0 f n 0 # 39 is_member c a 31 0 0 f n 30 # 40 is_member c a 31 0 0 f n 2 # 41 is_member c a 31 0 0 0 5 6 7 11 13 18 20 21 23 25 27 28 30 n 0 # 42 is_member c a 31 0 0 0 1 5 7 9 13 15 17 19 20 22 24 25 26 27 28 n 30 # 43 is_member c a 31 0 0 0 2 3 4 5 7 8 9 10 13 14 15 19 21 22 23 25 26 30 n 27 # 44 is_member c a 31 0 1 e n 0 # 45 is_member c a 31 0 1 e n 30 # 46 is_member c a 31 0 1 e n 14 # 47 is_member c a 31 0 1 f n 0 # 48 is_member c a 31 0 1 f n 30 # 49 is_member c a 31 0 1 f n 29 # 50 is_member c a 31 0 1 9 12 14 17 18 20 24 25 26 28 30 n 0 # 51 is_member c a 31 0 1 1 3 8 9 10 12 14 15 16 17 18 20 26 27 30 n 30 # 52 is_member c a 31 0 1 2 4 10 11 14 16 17 21 22 23 24 25 26 27 n 8 # 53 is_member c a 31 1 0 e n 0 # 54 is_member c a 31 1 0 e n 30 # 55 is_member c a 31 1 0 e n 3 # 56 is_member c a 31 1 0 f n 0 # 57 is_member c a 31 1 0 f n 30 # 58 is_member c a 31 1 0 f n 21 # 59 is_member c a 31 1 0 0 2 4 6 7 10 11 13 14 15 19 20 22 23 26 27 28 29 n 0 # 60 is_member c a 31 1 0 0 4 5 7 8 9 10 11 13 14 15 16 17 19 20 21 22 23 26 27 n 30 # 61 is_member c a 31 1 0 1 3 4 9 13 14 16 17 18 19 20 21 22 23 24 27 29 n 27 # 62 is_member c a 31 1 1 e n 0 # 63 is_member c a 31 1 1 e n 30 # 64 is_member c a 31 1 1 e n 16 # 65 is_member c a 31 1 1 f n 0 # 66 is_member c a 31 1 1 f n 30 # 67 is_member c a 31 1 1 f n 4 # 68 is_member c a 31 1 1 2 3 4 6 9 15 18 21 23 24 25 26 27 28 30 n 0 # 69 is_member c a 31 1 1 1 2 3 4 5 6 9 11 12 13 15 16 17 18 22 23 25 26 30 n 30 # 70 is_member c a 31 1 1 0 2 3 5 10 13 14 16 17 18 19 20 22 23 24 26 27 28 29 30 n 26 # 71 is_member c a 32 0 0 e n 0 # 72 is_member c a 32 0 0 e n 31 # 73 is_member c a 32 0 0 e n 25 # 74 is_member c a 32 0 0 f n 0 # 75 is_member c a 32 0 0 f n 31 # 76 is_member c a 32 0 0 f n 8 # 77 is_member c a 32 0 0 3 4 5 7 8 10 11 12 15 21 22 24 25 27 30 31 n 0 # 78 is_member c a 32 0 0 0 2 3 4 6 7 8 9 10 15 16 18 21 25 27 30 n 31 # 79 is_member c a 32 0 0 1 7 8 13 14 17 19 20 21 24 25 27 28 n 17 # 80 is_member c a 32 0 1 e n 0 # 81 is_member c a 32 0 1 e n 31 # 82 is_member c a 32 0 1 e n 5 # 83 is_member c a 32 0 1 f n 0 # 84 is_member c a 32 0 1 f n 31 # 85 is_member c a 32 0 1 f n 22 # 86 is_member c a 32 0 1 1 4 5 6 7 9 10 12 13 14 15 16 17 18 19 20 21 23 24 26 28 n 0 # 87 is_member c a 32 0 1 1 2 3 5 6 7 9 12 15 18 19 20 21 22 23 25 26 n 31 # 88 is_member c a 32 0 1 0 4 10 12 15 17 18 20 21 26 27 n 11 # 89 is_member c a 32 1 0 e n 0 # 90 is_member c a 32 1 0 e n 31 # 91 is_member c a 32 1 0 e n 14 # 92 is_member c a 32 1 0 f n 0 # 93 is_member c a 32 1 0 f n 31 # 94 is_member c a 32 1 0 f n 26 # 95 is_member c a 32 1 0 3 4 5 6 12 19 20 21 22 25 26 27 30 31 n 0 # 96 is_member c a 32 1 0 0 1 2 4 5 6 10 11 12 17 21 22 23 24 28 31 n 31 # 97 is_member c a 32 1 0 3 5 7 9 10 11 13 15 16 18 21 22 26 28 30 31 n 22 # 98 is_member c a 32 1 1 e n 0 # 99 is_member c a 32 1 1 e n 31 # 100 is_member c a 32 1 1 e n 9 # 101 is_member c a 32 1 1 f n 0 # 102 is_member c a 32 1 1 f n 31 # 103 is_member c a 32 1 1 f n 26 # 104 is_member c a 32 1 1 6 9 10 12 15 16 17 18 25 28 29 n 0 # 105 is_member c a 32 1 1 0 4 6 9 12 13 15 16 18 19 20 23 24 25 27 28 30 31 n 31 # 106 is_member c a 32 1 1 0 3 4 6 8 10 11 13 14 15 17 18 19 20 22 23 26 28 29 30 31 n 7 # 107 is_member c a 33 0 0 e n 0 # 108 is_member c a 33 0 0 e n 32 # 109 is_member c a 33 0 0 e n 9 # 110 is_member c a 33 0 0 f n 0 # 111 is_member c a 33 0 0 f n 32 # 112 is_member c a 33 0 0 f n 11 # 113 is_member c a 33 0 0 3 5 12 13 15 16 17 18 19 21 22 24 28 29 30 31 n 0 # 114 is_member c a 33 0 0 1 2 6 7 9 15 16 19 21 22 23 27 31 n 32 # 115 is_member c a 33 0 0 0 4 6 7 8 11 12 14 17 20 23 24 28 29 31 n 19 # 116 is_member c a 33 0 1 e n 0 # 117 is_member c a 33 0 1 e n 32 # 118 is_member c a 33 0 1 e n 9 # 119 is_member c a 33 0 1 f n 0 # 120 is_member c a 33 0 1 f n 32 # 121 is_member c a 33 0 1 f n 18 # 122 is_member c a 33 0 1 1 3 4 6 7 8 9 10 12 15 16 17 18 21 22 24 26 29 32 n 0 # 123 is_member c a 33 0 1 0 2 6 11 12 14 15 16 19 20 22 28 29 n 32 # 124 is_member c a 33 0 1 0 1 2 4 6 7 8 9 10 12 15 16 18 22 24 27 29 n 21 # 125 is_member c a 33 1 0 e n 0 # 126 is_member c a 33 1 0 e n 32 # 127 is_member c a 33 1 0 e n 5 # 128 is_member c a 33 1 0 f n 0 # 129 is_member c a 33 1 0 f n 32 # 130 is_member c a 33 1 0 f n 11 # 131 is_member c a 33 1 0 0 1 3 4 5 6 7 10 13 15 16 19 23 25 27 28 30 31 n 0 # 132 is_member c a 33 1 0 6 7 8 9 11 13 14 15 19 20 22 23 24 25 26 28 30 31 32 n 32 # 133 is_member c a 33 1 0 4 7 12 14 19 24 25 26 29 31 n 10 # 134 is_member c a 33 1 1 e n 0 # 135 is_member c a 33 1 1 e n 32 # 136 is_member c a 33 1 1 e n 30 # 137 is_member c a 33 1 1 f n 0 # 138 is_member c a 33 1 1 f n 32 # 139 is_member c a 33 1 1 f n 21 # 140 is_member c a 33 1 1 1 3 4 5 7 8 9 13 15 17 22 23 26 29 30 32 n 0 # 141 is_member c a 33 1 1 0 2 3 5 6 10 13 17 18 21 22 23 26 28 31 32 n 32 # 142 is_member c a 33 1 1 0 1 3 5 6 7 8 11 12 14 18 19 21 24 25 30 n 28 # 143 is_member c a 63 0 0 e n 0 # 144 is_member c a 63 0 0 e n 62 # 145 is_member c a 63 0 0 e n 49 # 146 is_member c a 63 0 0 f n 0 # 147 is_member c a 63 0 0 f n 62 # 148 is_member c a 63 0 0 f n 12 # 149 is_member c a 63 0 0 0 1 3 5 7 12 17 18 19 20 24 27 30 35 36 37 38 42 44 47 50 57 59 61 n 0 # 150 is_member c a 63 0 0 0 2 3 8 9 11 16 17 19 21 26 28 29 30 31 32 34 36 38 39 40 41 42 46 48 53 54 58 n 62 # 151 is_member c a 63 0 0 1 2 4 7 11 12 13 14 15 16 19 21 22 23 26 30 31 33 36 38 40 42 45 47 48 49 50 52 53 55 56 n 44 # 152 is_member c a 63 0 1 e n 0 # 153 is_member c a 63 0 1 e n 62 # 154 is_member c a 63 0 1 e n 28 # 155 is_member c a 63 0 1 f n 0 # 156 is_member c a 63 0 1 f n 62 # 157 is_member c a 63 0 1 f n 17 # 158 is_member c a 63 0 1 0 1 2 3 5 9 10 11 12 13 15 19 23 24 25 26 29 30 32 33 37 39 40 45 47 49 50 56 62 n 0 # 159 is_member c a 63 0 1 1 6 10 11 12 13 14 15 16 17 18 20 22 25 26 27 29 30 32 34 36 37 38 39 42 45 50 52 54 55 58 59 n 62 # 160 is_member c a 63 0 1 1 3 6 8 13 14 15 19 20 21 22 23 26 28 32 33 36 37 38 39 42 43 45 47 48 49 50 51 52 54 56 57 58 60 62 n 18 # 161 is_member c a 63 1 0 e n 0 # 162 is_member c a 63 1 0 e n 62 # 163 is_member c a 63 1 0 e n 33 # 164 is_member c a 63 1 0 f n 0 # 165 is_member c a 63 1 0 f n 62 # 166 is_member c a 63 1 0 f n 57 # 167 is_member c a 63 1 0 1 2 4 6 7 8 9 12 18 20 21 23 26 27 29 30 31 32 33 35 37 40 41 42 43 47 48 51 52 53 56 62 n 0 # 168 is_member c a 63 1 0 6 7 9 11 13 18 22 23 26 27 28 30 33 35 38 40 44 45 50 51 52 56 58 60 61 62 n 62 # 169 is_member c a 63 1 0 1 4 6 10 11 13 15 16 19 21 24 25 30 31 32 34 35 36 37 42 48 49 50 51 52 56 57 58 61 n 13 # 170 is_member c a 63 1 1 e n 0 # 171 is_member c a 63 1 1 e n 62 # 172 is_member c a 63 1 1 e n 54 # 173 is_member c a 63 1 1 f n 0 # 174 is_member c a 63 1 1 f n 62 # 175 is_member c a 63 1 1 f n 57 # 176 is_member c a 63 1 1 1 3 4 7 8 12 13 14 15 16 17 18 21 23 25 26 27 28 29 30 34 36 39 40 41 42 44 45 47 48 51 53 54 55 57 62 n 0 # 177 is_member c a 63 1 1 0 1 2 5 6 8 9 16 17 19 20 22 23 24 25 29 30 33 34 35 36 37 42 43 44 47 48 49 50 51 52 53 54 55 57 58 59 60 61 62 n 62 # 178 is_member c a 63 1 1 1 2 7 8 9 10 11 12 13 16 17 19 20 21 22 23 25 26 29 31 33 34 35 38 41 44 45 46 47 48 49 50 51 52 58 59 60 61 n 21 # 179 is_member c a 64 0 0 e n 0 # 180 is_member c a 64 0 0 e n 63 # 181 is_member c a 64 0 0 e n 60 # 182 is_member c a 64 0 0 f n 0 # 183 is_member c a 64 0 0 f n 63 # 184 is_member c a 64 0 0 f n 33 # 185 is_member c a 64 0 0 2 4 8 9 12 13 16 18 20 23 24 26 28 29 30 33 34 38 41 42 43 44 47 48 50 51 52 55 56 59 60 n 0 # 186 is_member c a 64 0 0 3 4 6 7 9 10 12 14 15 16 17 19 21 25 28 29 33 34 37 40 42 43 44 45 47 48 49 52 53 54 56 59 61 62 63 n 63 # 187 is_member c a 64 0 0 0 1 2 4 6 7 13 14 15 16 19 21 25 26 28 29 31 32 34 35 37 38 39 48 49 52 55 59 61 62 n 56 # 188 is_member c a 64 0 1 e n 0 # 189 is_member c a 64 0 1 e n 63 # 190 is_member c a 64 0 1 e n 46 # 191 is_member c a 64 0 1 f n 0 # 192 is_member c a 64 0 1 f n 63 # 193 is_member c a 64 0 1 f n 19 # 194 is_member c a 64 0 1 4 6 8 9 10 11 12 15 17 20 21 22 23 26 27 31 32 33 35 38 39 41 42 43 46 48 50 51 54 55 56 57 58 n 0 # 195 is_member c a 64 0 1 1 2 5 8 11 12 15 16 18 20 21 23 27 28 29 30 32 33 34 35 36 39 40 41 42 49 50 52 54 56 58 59 60 61 63 n 63 # 196 is_member c a 64 0 1 0 1 2 3 6 7 11 12 13 16 20 22 23 24 25 26 27 28 29 31 32 34 39 40 41 43 45 46 48 50 51 52 55 59 61 62 n 1 # 197 is_member c a 64 1 0 e n 0 # 198 is_member c a 64 1 0 e n 63 # 199 is_member c a 64 1 0 e n 17 # 200 is_member c a 64 1 0 f n 0 # 201 is_member c a 64 1 0 f n 63 # 202 is_member c a 64 1 0 f n 63 # 203 is_member c a 64 1 0 0 1 2 4 6 7 8 9 10 12 14 18 19 20 23 27 28 29 32 33 34 35 37 38 40 42 44 45 46 47 49 50 51 54 55 56 59 61 n 0 # 204 is_member c a 64 1 0 0 5 6 7 19 20 23 25 27 28 29 30 32 34 39 40 41 42 46 47 53 54 55 56 58 59 61 n 63 # 205 is_member c a 64 1 0 0 1 5 6 9 10 11 15 16 17 18 20 21 23 25 26 27 28 29 30 31 32 34 37 38 39 40 41 45 46 47 48 49 51 52 54 57 60 62 63 n 2 # 206 is_member c a 64 1 1 e n 0 # 207 is_member c a 64 1 1 e n 63 # 208 is_member c a 64 1 1 e n 24 # 209 is_member c a 64 1 1 f n 0 # 210 is_member c a 64 1 1 f n 63 # 211 is_member c a 64 1 1 f n 59 # 212 is_member c a 64 1 1 0 1 3 4 5 17 19 21 22 23 24 26 28 29 30 31 32 33 34 35 36 37 38 45 46 47 48 49 52 55 56 57 59 60 61 62 n 0 # 213 is_member c a 64 1 1 0 3 7 9 11 12 13 14 15 16 19 20 22 25 28 29 30 31 33 34 35 38 39 40 41 42 43 44 47 48 49 50 53 54 55 56 58 59 61 62 63 n 63 # 214 is_member c a 64 1 1 0 1 2 3 4 6 7 10 12 15 16 22 23 25 26 27 28 36 40 41 42 43 48 49 51 52 54 57 61 62 n 22 # 215 is_member c a 65 0 0 e n 0 # 216 is_member c a 65 0 0 e n 64 # 217 is_member c a 65 0 0 e n 57 # 218 is_member c a 65 0 0 f n 0 # 219 is_member c a 65 0 0 f n 64 # 220 is_member c a 65 0 0 f n 21 # 221 is_member c a 65 0 0 0 2 3 5 6 7 9 12 14 15 18 19 20 22 24 25 26 28 30 32 33 35 36 38 42 43 44 45 46 47 50 52 53 55 58 60 61 62 64 n 0 # 222 is_member c a 65 0 0 2 6 7 8 9 10 11 13 14 15 18 20 21 22 24 25 26 27 28 30 31 32 33 36 39 40 42 44 45 48 50 51 54 55 57 58 n 64 # 223 is_member c a 65 0 0 0 1 3 6 7 8 10 11 12 14 16 18 21 22 26 27 35 36 38 39 40 43 44 47 48 49 52 54 57 59 63 64 n 14 # 224 is_member c a 65 0 1 e n 0 # 225 is_member c a 65 0 1 e n 64 # 226 is_member c a 65 0 1 e n 13 # 227 is_member c a 65 0 1 f n 0 # 228 is_member c a 65 0 1 f n 64 # 229 is_member c a 65 0 1 f n 4 # 230 is_member c a 65 0 1 0 4 5 7 11 13 16 17 20 21 23 25 26 30 31 32 35 37 38 39 42 43 44 45 46 47 48 51 53 54 56 58 59 60 61 62 63 n 0 # 231 is_member c a 65 0 1 1 2 4 7 10 13 15 17 18 20 27 31 33 34 35 38 39 40 41 42 43 44 46 49 50 51 59 60 61 63 64 n 64 # 232 is_member c a 65 0 1 1 3 4 5 6 7 8 9 10 19 20 21 25 26 29 30 31 32 34 35 37 38 41 43 45 47 49 50 52 53 56 64 n 9 # 233 is_member c a 65 1 0 e n 0 # 234 is_member c a 65 1 0 e n 64 # 235 is_member c a 65 1 0 e n 29 # 236 is_member c a 65 1 0 f n 0 # 237 is_member c a 65 1 0 f n 64 # 238 is_member c a 65 1 0 f n 53 # 239 is_member c a 65 1 0 3 5 6 7 8 9 10 12 13 16 17 18 19 23 24 25 29 33 35 37 38 40 41 43 44 45 48 49 55 57 60 61 62 64 n 0 # 240 is_member c a 65 1 0 8 9 11 13 14 16 20 22 23 24 26 27 30 32 33 34 37 38 40 44 47 48 49 51 54 57 59 n 64 # 241 is_member c a 65 1 0 0 1 2 3 4 6 8 12 15 16 19 21 26 30 36 40 41 42 44 45 47 50 54 58 59 60 61 63 n 44 # 242 is_member c a 65 1 1 e n 0 # 243 is_member c a 65 1 1 e n 64 # 244 is_member c a 65 1 1 e n 41 # 245 is_member c a 65 1 1 f n 0 # 246 is_member c a 65 1 1 f n 64 # 247 is_member c a 65 1 1 f n 4 # 248 is_member c a 65 1 1 1 6 9 13 14 15 17 19 22 23 24 26 31 32 33 34 36 37 38 40 42 45 46 51 53 54 57 58 60 61 63 64 n 0 # 249 is_member c a 65 1 1 2 3 5 6 7 8 9 10 12 14 16 17 18 19 22 24 27 28 30 31 32 34 37 38 40 41 42 43 45 46 49 50 51 52 53 55 58 60 61 n 64 # 250 is_member c a 65 1 1 1 2 3 4 5 6 7 8 14 17 22 23 27 29 31 32 33 34 36 39 40 44 46 49 50 53 57 59 60 61 64 n 15 # 251 is_member c a 211 0 0 e n 0 # 252 is_member c a 211 0 0 e n 210 # 253 is_member c a 211 0 0 e n 41 # 254 is_member c a 211 0 0 f n 0 # 255 is_member c a 211 0 0 f n 210 # 256 is_member c a 211 0 0 f n 164 # 257 is_member c a 211 0 0 0 3 4 5 7 8 9 12 14 17 18 20 24 25 26 27 28 29 31 33 35 36 37 38 39 40 41 42 43 45 46 48 49 50 52 54 55 56 57 58 59 60 62 67 68 69 70 71 72 73 78 81 82 84 85 87 88 89 90 91 93 94 96 99 102 104 108 110 111 112 115 118 119 121 122 123 124 125 127 128 129 130 132 135 136 137 144 145 147 150 151 153 155 157 158 162 164 167 169 173 174 175 177 178 179 181 184 185 188 190 192 194 195 196 199 201 207 210 n 0 # 258 is_member c a 211 0 0 3 8 9 13 14 18 22 23 24 27 29 30 31 33 34 35 43 46 47 48 49 57 59 60 61 62 64 65 66 71 72 73 75 78 81 85 86 87 89 90 92 93 95 96 100 101 102 104 108 113 114 116 121 124 125 129 130 133 134 141 143 144 147 148 150 154 158 159 160 165 166 170 171 177 178 181 183 186 187 189 190 194 197 198 200 201 204 205 210 n 210 # 259 is_member c a 211 0 0 0 4 7 8 10 15 18 19 21 24 25 26 30 32 34 35 36 38 39 41 43 45 46 47 48 49 50 52 53 54 56 57 58 61 62 64 67 68 73 81 82 83 84 87 92 94 95 96 97 98 102 104 105 106 110 113 117 121 122 124 125 127 128 129 131 133 136 138 140 141 142 143 147 154 156 157 158 159 160 162 168 172 177 179 184 185 186 187 188 189 191 192 197 200 201 202 203 207 208 209 n 129 # 260 is_member c a 211 0 1 e n 0 # 261 is_member c a 211 0 1 e n 210 # 262 is_member c a 211 0 1 e n 154 # 263 is_member c a 211 0 1 f n 0 # 264 is_member c a 211 0 1 f n 210 # 265 is_member c a 211 0 1 f n 34 # 266 is_member c a 211 0 1 0 1 2 4 5 8 11 13 14 15 17 18 19 20 24 26 33 34 35 36 37 41 43 44 46 47 48 49 50 51 52 54 55 57 59 61 64 65 68 69 70 74 76 77 79 87 89 90 91 92 97 98 101 103 110 111 112 116 117 120 126 127 129 130 131 132 134 136 137 138 141 142 148 149 150 151 152 153 159 164 166 167 170 171 173 174 178 182 186 187 189 190 191 194 195 197 198 199 201 204 206 207 208 209 n 0 # 267 is_member c a 211 0 1 4 7 8 11 13 14 19 20 21 24 25 27 28 29 30 34 35 36 37 38 39 43 44 48 53 54 56 57 58 59 60 61 62 65 67 68 69 70 71 74 77 81 82 83 90 93 94 96 97 100 107 109 111 112 113 114 117 119 126 130 132 137 139 140 143 146 147 150 152 154 156 157 158 159 164 165 168 169 170 171 175 176 178 179 180 181 183 187 190 191 192 196 197 198 199 201 203 205 207 210 n 210 # 268 is_member c a 211 0 1 1 5 6 12 14 20 21 22 23 25 31 33 35 36 38 42 44 46 48 51 54 56 57 58 61 62 63 64 66 69 70 71 72 75 76 78 79 80 82 83 84 85 87 88 90 93 95 97 99 100 102 103 104 107 108 110 112 113 115 117 125 127 128 129 135 137 138 142 146 147 150 152 154 159 161 163 164 165 166 170 171 172 174 176 177 178 179 181 186 187 188 190 192 195 196 197 204 206 209 n 57 # 269 is_member c a 211 1 0 e n 0 # 270 is_member c a 211 1 0 e n 210 # 271 is_member c a 211 1 0 e n 12 # 272 is_member c a 211 1 0 f n 0 # 273 is_member c a 211 1 0 f n 210 # 274 is_member c a 211 1 0 f n 115 # 275 is_member c a 211 1 0 4 7 8 10 13 15 17 19 21 22 23 26 27 28 30 32 35 36 37 39 43 46 47 50 53 55 56 58 59 60 61 65 68 69 75 76 78 82 83 92 94 97 99 100 101 103 106 108 112 114 119 120 121 123 125 126 128 131 133 134 138 139 140 143 147 148 149 150 155 160 161 162 163 165 167 170 173 175 178 179 181 183 185 188 189 190 191 193 194 195 198 199 202 203 206 207 208 209 210 n 0 # 276 is_member c a 211 1 0 0 1 3 5 7 8 9 11 16 17 21 25 27 30 33 36 39 41 42 43 44 47 48 49 53 55 57 58 59 60 65 66 69 71 72 74 75 80 81 82 87 88 89 90 91 95 97 100 101 103 105 107 109 112 113 114 117 120 124 127 129 132 133 136 137 138 139 140 145 146 148 149 150 151 153 155 157 158 159 160 163 165 167 170 174 175 181 183 184 185 186 188 189 191 193 194 196 197 203 204 207 208 209 n 210 # 277 is_member c a 211 1 0 1 3 4 6 8 10 11 12 13 18 19 20 24 26 27 29 33 36 39 40 42 44 46 48 52 54 55 56 57 58 60 61 62 64 67 69 70 74 76 78 80 81 82 83 85 88 90 91 94 95 96 98 103 104 106 107 108 109 111 112 117 118 122 124 125 127 130 131 132 134 135 136 137 141 144 145 148 151 152 155 157 159 162 163 164 165 166 167 171 172 175 177 179 180 181 182 183 187 189 190 191 193 194 199 200 202 203 204 206 208 209 n 42 # 278 is_member c a 211 1 1 e n 0 # 279 is_member c a 211 1 1 e n 210 # 280 is_member c a 211 1 1 e n 39 # 281 is_member c a 211 1 1 f n 0 # 282 is_member c a 211 1 1 f n 210 # 283 is_member c a 211 1 1 f n 91 # 284 is_member c a 211 1 1 0 1 2 4 8 9 11 13 16 17 18 19 20 21 22 25 28 30 31 34 35 36 39 40 41 45 46 48 49 50 52 53 54 55 56 59 60 62 63 64 65 66 68 71 73 75 77 78 80 81 82 84 85 87 89 90 91 93 94 95 97 101 103 105 107 108 113 114 116 119 122 123 125 126 127 128 132 133 137 141 142 143 144 145 149 151 162 166 167 168 170 173 174 175 179 180 181 185 186 187 189 191 195 196 199 200 202 203 205 206 207 n 0 # 285 is_member c a 211 1 1 2 4 5 7 11 12 13 16 18 24 28 29 30 31 33 36 37 40 41 43 44 48 50 52 56 57 58 59 61 62 63 64 66 67 68 71 72 74 75 76 77 79 83 84 85 87 91 94 97 100 101 103 106 109 115 117 118 119 122 123 127 129 132 133 135 137 140 142 144 149 150 151 153 154 155 158 162 165 168 170 171 172 173 175 179 182 183 184 185 190 191 195 200 203 205 206 207 210 n 210 # 286 is_member c a 211 1 1 0 2 5 6 7 12 13 17 18 19 20 21 23 26 27 30 32 34 37 38 40 42 43 47 49 50 52 56 61 67 68 71 72 73 74 77 80 82 83 84 85 87 90 91 94 95 96 98 99 100 101 102 103 104 109 110 117 119 123 124 126 128 131 133 134 138 139 143 144 145 148 149 151 152 153 154 155 160 166 167 168 169 170 177 178 181 184 185 187 192 194 196 197 200 202 203 204 205 208 209 210 n 132 # 287 is_member c a 224 0 0 e n 0 # 288 is_member c a 224 0 0 e n 223 # 289 is_member c a 224 0 0 e n 124 # 290 is_member c a 224 0 0 f n 0 # 291 is_member c a 224 0 0 f n 223 # 292 is_member c a 224 0 0 f n 208 # 293 is_member c a 224 0 0 0 1 2 3 4 7 8 11 12 14 16 17 18 20 21 23 26 29 32 36 37 39 41 42 45 46 47 49 52 53 59 61 62 63 64 67 68 69 72 76 80 81 82 83 84 85 86 87 90 93 96 97 98 99 100 103 104 105 107 108 111 113 114 115 116 117 118 121 122 126 129 133 135 138 140 141 144 147 148 152 153 154 158 162 165 167 173 174 176 177 179 185 186 187 189 191 193 196 197 200 202 205 208 209 211 215 217 219 220 221 222 223 n 0 # 294 is_member c a 224 0 0 0 1 3 4 5 7 10 12 14 15 17 18 21 23 24 25 26 27 29 30 32 34 36 42 44 47 49 51 52 53 54 55 57 58 59 60 64 66 67 70 71 73 77 79 80 81 82 83 85 86 87 88 90 92 94 95 97 99 102 103 106 111 112 113 114 116 120 122 123 124 125 126 128 132 134 135 136 137 139 141 142 144 145 146 150 152 153 156 157 158 159 161 163 166 167 170 173 174 175 176 179 180 186 189 191 192 193 194 195 196 197 198 201 202 204 207 208 209 210 211 213 215 219 220 221 222 223 n 223 # 295 is_member c a 224 0 0 0 2 3 5 6 8 9 10 11 18 19 22 23 26 32 33 34 36 37 38 40 41 43 45 47 48 50 53 54 55 57 59 61 62 64 65 68 70 71 72 74 76 77 78 79 81 83 86 87 88 92 95 97 105 108 113 114 115 116 117 119 120 121 123 125 126 127 128 129 131 133 135 136 137 139 141 142 145 148 149 151 152 153 154 161 163 169 170 173 174 175 176 179 180 181 183 184 186 188 192 193 194 198 201 202 203 204 205 206 207 213 214 215 217 219 221 n 83 # 296 is_member c a 224 0 1 e n 0 # 297 is_member c a 224 0 1 e n 223 # 298 is_member c a 224 0 1 e n 7 # 299 is_member c a 224 0 1 f n 0 # 300 is_member c a 224 0 1 f n 223 # 301 is_member c a 224 0 1 f n 14 # 302 is_member c a 224 0 1 0 1 4 7 8 11 13 15 16 18 19 21 24 25 26 29 30 32 35 36 37 39 40 41 44 45 47 48 49 50 52 53 54 55 56 57 58 60 61 62 68 69 70 71 72 77 80 81 82 84 85 87 94 95 97 98 100 101 105 106 107 108 110 113 114 119 121 123 124 125 128 130 131 135 138 141 142 143 145 146 147 148 150 152 155 157 162 163 164 166 170 171 174 175 177 178 180 181 182 183 184 185 186 188 191 192 194 195 196 200 204 205 206 207 208 209 211 213 214 216 217 218 219 222 n 0 # 303 is_member c a 224 0 1 0 4 5 6 7 8 9 11 12 14 15 16 17 20 22 23 24 25 26 28 31 32 33 35 37 38 40 43 45 46 48 50 51 53 54 56 57 58 59 64 65 68 70 71 74 75 80 86 88 90 92 95 97 99 100 102 107 108 109 110 111 114 115 117 122 123 124 126 127 128 129 130 131 133 135 137 140 142 144 145 148 149 150 151 152 154 155 156 157 158 159 160 161 162 163 166 167 170 172 173 174 176 178 179 180 182 183 184 185 186 187 195 197 199 202 203 205 208 211 212 213 214 215 216 217 221 n 223 # 304 is_member c a 224 0 1 1 3 4 5 7 10 11 16 24 25 28 29 30 31 32 33 34 36 39 40 42 43 44 45 47 51 52 55 57 58 59 60 61 62 64 65 66 68 71 72 74 75 77 78 79 81 82 85 86 87 88 89 90 92 93 94 97 98 104 105 107 108 110 114 115 117 120 122 124 125 126 128 129 130 134 141 142 143 147 149 151 153 156 158 161 162 163 164 168 174 175 176 178 179 182 183 186 187 188 189 196 197 198 202 203 205 206 209 211 212 216 219 221 223 n 112 # 305 is_member c a 224 1 0 e n 0 # 306 is_member c a 224 1 0 e n 223 # 307 is_member c a 224 1 0 e n 28 # 308 is_member c a 224 1 0 f n 0 # 309 is_member c a 224 1 0 f n 223 # 310 is_member c a 224 1 0 f n 129 # 311 is_member c a 224 1 0 0 2 4 6 8 9 11 12 13 15 16 21 23 24 27 29 30 31 33 38 39 40 41 42 43 44 46 47 48 49 51 52 53 54 55 56 63 66 67 68 69 70 71 72 73 74 75 76 78 79 81 82 84 85 86 87 88 90 92 94 96 97 100 101 104 105 107 109 111 112 115 116 119 120 123 124 130 131 137 138 139 140 142 143 144 145 147 149 150 151 153 154 157 158 161 163 164 165 168 170 172 173 176 177 179 180 181 182 184 185 188 190 192 195 199 200 204 205 206 207 210 213 217 n 0 # 312 is_member c a 224 1 0 1 3 6 7 8 11 12 16 18 19 20 25 26 28 30 32 33 37 41 42 46 47 48 50 51 52 55 56 57 59 65 67 68 69 70 71 73 75 77 78 81 82 84 87 89 90 92 94 98 99 100 101 102 104 109 110 111 112 113 114 115 116 118 120 121 122 123 128 131 136 138 139 142 145 146 148 149 151 154 155 156 161 163 166 167 168 169 170 173 174 177 178 183 186 188 189 190 192 193 194 195 197 198 200 201 202 203 204 205 210 211 214 215 216 217 220 221 222 n 223 # 313 is_member c a 224 1 0 0 1 4 6 9 12 13 19 22 24 25 26 27 28 31 33 35 39 41 42 44 48 49 50 52 53 55 56 58 59 60 61 62 63 64 66 67 68 70 73 77 78 79 80 81 83 85 86 88 90 91 93 94 96 97 99 101 102 103 104 107 109 110 112 114 116 117 119 122 123 126 130 133 135 138 139 141 148 149 153 154 155 157 158 159 161 164 168 173 174 175 176 178 179 183 187 193 194 198 200 202 208 211 214 215 216 219 220 221 n 150 # 314 is_member c a 224 1 1 e n 0 # 315 is_member c a 224 1 1 e n 223 # 316 is_member c a 224 1 1 e n 221 # 317 is_member c a 224 1 1 f n 0 # 318 is_member c a 224 1 1 f n 223 # 319 is_member c a 224 1 1 f n 56 # 320 is_member c a 224 1 1 0 1 2 4 6 10 11 13 14 18 22 24 25 26 30 33 34 36 37 38 46 47 48 49 51 52 53 55 56 57 62 64 66 67 72 73 74 76 77 79 81 82 84 85 88 89 90 92 94 95 96 98 100 102 103 105 109 110 111 112 113 116 117 118 119 120 121 122 123 125 126 129 136 137 138 140 141 145 146 148 149 150 151 152 153 155 156 159 160 161 164 166 167 171 173 175 176 178 179 181 182 184 187 190 193 194 199 200 201 202 204 206 207 208 209 210 212 215 216 217 218 222 n 0 # 321 is_member c a 224 1 1 2 3 4 5 6 7 8 12 17 18 24 25 30 31 32 34 35 37 38 41 42 43 45 48 50 53 54 56 58 64 66 69 70 72 75 77 82 83 85 88 89 90 94 96 97 98 99 101 105 107 108 109 112 114 116 119 123 128 132 133 134 136 137 138 139 140 142 143 145 146 152 153 160 161 162 163 166 169 170 173 174 175 176 177 181 182 184 185 187 189 192 193 194 197 199 200 206 210 211 212 214 215 218 219 221 n 223 # 322 is_member c a 224 1 1 0 5 9 11 12 16 18 19 20 21 27 32 33 34 35 36 40 41 43 45 47 48 50 51 54 55 58 59 60 61 62 64 65 68 69 70 71 73 74 75 76 78 79 83 84 88 90 93 94 95 96 99 102 103 105 107 108 110 112 116 117 118 120 121 122 124 125 129 131 132 133 136 137 139 141 143 147 152 155 157 159 162 166 169 170 172 176 177 179 181 185 186 187 190 191 192 196 199 204 205 208 209 213 215 219 220 222 n 76 # 323 is_member c a 247 0 0 e n 0 # 324 is_member c a 247 0 0 e n 246 # 325 is_member c a 247 0 0 e n 132 # 326 is_member c a 247 0 0 f n 0 # 327 is_member c a 247 0 0 f n 246 # 328 is_member c a 247 0 0 f n 121 # 329 is_member c a 247 0 0 1 4 5 6 9 10 11 12 16 18 19 20 23 24 26 31 32 35 39 41 42 54 56 57 58 60 62 63 64 66 67 70 71 74 75 76 80 84 86 87 89 92 95 98 99 102 103 104 105 107 109 110 111 116 117 120 123 124 125 128 132 133 135 136 137 139 142 143 144 146 147 151 152 153 154 158 161 162 164 166 167 168 170 172 173 175 176 178 184 185 186 190 191 193 194 197 201 202 204 205 207 210 211 212 214 215 217 223 230 231 237 238 239 241 243 246 n 0 # 330 is_member c a 247 0 0 2 3 11 12 13 14 18 19 20 22 24 25 26 27 28 32 36 37 41 43 44 45 51 52 53 56 59 60 61 63 65 66 67 71 74 78 79 82 86 87 88 89 90 91 92 93 95 96 98 100 102 104 105 106 108 109 110 113 114 116 119 125 127 134 136 137 139 140 146 148 150 155 157 158 159 160 161 166 172 173 174 175 176 179 180 182 184 186 189 192 193 194 195 199 200 205 209 210 212 213 215 218 219 222 223 224 225 226 230 231 232 235 237 239 240 242 243 n 246 # 331 is_member c a 247 0 0 0 1 5 8 11 14 18 21 24 25 28 29 30 31 32 35 37 39 40 42 44 45 46 49 51 52 53 54 55 56 59 60 63 64 65 66 67 69 70 73 74 76 77 78 80 82 83 85 86 87 89 90 94 95 96 97 98 100 101 102 104 105 106 107 108 111 112 114 115 117 118 120 121 122 123 124 125 126 127 129 132 135 138 140 147 151 153 154 156 157 160 161 163 165 166 167 169 171 173 175 177 181 183 184 186 190 192 198 203 204 205 208 209 210 212 216 218 221 222 224 226 228 229 230 232 234 235 241 242 245 246 n 13 # 332 is_member c a 247 0 1 e n 0 # 333 is_member c a 247 0 1 e n 246 # 334 is_member c a 247 0 1 e n 70 # 335 is_member c a 247 0 1 f n 0 # 336 is_member c a 247 0 1 f n 246 # 337 is_member c a 247 0 1 f n 55 # 338 is_member c a 247 0 1 1 3 7 8 9 10 13 14 16 17 18 19 22 23 26 30 32 36 37 39 40 41 43 44 45 48 49 55 56 58 59 61 65 66 68 69 72 75 77 80 81 82 83 85 86 87 89 90 91 92 97 98 100 101 102 103 106 107 108 109 111 112 114 115 118 121 123 127 129 132 133 141 142 143 145 146 149 150 152 156 157 160 161 162 163 164 167 169 171 172 174 175 176 177 180 182 183 184 188 189 190 191 196 197 202 204 205 207 209 210 213 214 215 216 219 220 222 224 226 228 229 230 233 234 237 238 239 240 241 243 244 246 n 0 # 339 is_member c a 247 0 1 0 3 5 7 9 10 11 12 13 14 18 20 21 23 24 27 30 31 32 34 36 40 43 44 46 48 49 50 51 52 54 55 56 57 59 62 65 66 68 70 71 72 74 75 76 77 78 80 81 83 84 85 87 88 89 90 93 94 95 97 104 106 108 109 110 111 112 115 117 120 122 124 125 126 128 130 136 138 139 141 144 145 146 148 151 152 155 156 159 162 163 164 168 169 172 173 174 175 176 177 178 179 182 183 184 185 186 187 189 191 194 195 196 197 199 200 201 203 208 210 212 213 215 216 217 219 220 221 222 229 233 235 237 244 245 246 n 246 # 340 is_member c a 247 0 1 0 1 3 4 7 8 9 13 14 15 17 21 22 25 26 28 29 31 33 37 40 42 45 47 48 49 52 54 55 57 61 62 63 64 70 72 73 74 76 79 81 83 85 86 88 90 93 98 99 100 101 103 104 107 108 109 110 111 112 114 117 118 119 123 128 131 134 136 144 146 147 150 151 152 154 156 158 159 160 161 162 165 166 170 171 172 175 176 177 178 181 184 186 187 188 191 195 196 200 201 202 203 207 211 212 215 216 217 218 223 226 228 230 233 236 237 240 241 242 243 246 n 26 # 341 is_member c a 247 1 0 e n 0 # 342 is_member c a 247 1 0 e n 246 # 343 is_member c a 247 1 0 e n 147 # 344 is_member c a 247 1 0 f n 0 # 345 is_member c a 247 1 0 f n 246 # 346 is_member c a 247 1 0 f n 160 # 347 is_member c a 247 1 0 1 2 3 4 7 8 9 10 11 15 16 20 22 23 26 31 32 35 36 37 39 40 44 45 46 50 52 53 54 56 57 58 62 66 70 71 72 75 79 80 81 83 84 87 90 93 94 95 97 99 102 104 105 106 111 114 115 116 117 118 119 121 123 124 126 128 129 130 133 135 136 139 140 142 143 144 145 146 147 148 149 150 151 154 162 163 166 167 168 169 170 173 176 181 183 186 187 188 192 193 194 197 199 200 205 206 207 209 211 212 213 218 219 220 223 228 231 232 233 234 235 236 237 238 240 243 245 246 n 0 # 348 is_member c a 247 1 0 0 2 3 6 11 13 15 16 18 19 21 22 23 28 29 38 39 42 43 46 47 48 49 50 55 56 57 60 62 63 64 71 74 75 76 78 79 83 84 85 86 87 89 97 99 100 101 102 104 105 107 109 113 117 119 120 124 126 132 134 135 136 137 138 140 142 144 145 146 148 151 152 153 158 161 162 174 177 178 183 185 188 190 193 194 198 199 200 206 207 209 210 216 217 218 219 221 224 226 227 228 229 230 231 232 233 234 237 242 243 n 246 # 349 is_member c a 247 1 0 4 6 8 11 13 14 16 17 20 21 22 25 29 31 33 36 39 40 41 42 44 45 46 47 49 52 53 54 56 58 63 64 65 67 69 70 73 74 76 77 78 80 82 83 85 89 90 91 94 97 99 100 107 108 111 112 113 115 116 117 119 120 121 122 123 132 135 136 137 138 139 145 147 148 150 153 155 157 159 162 163 164 166 167 169 171 173 176 179 180 185 191 192 194 195 196 197 198 200 203 208 209 210 211 215 216 217 224 225 228 229 230 233 237 238 240 241 244 245 n 115 # 350 is_member c a 247 1 1 e n 0 # 351 is_member c a 247 1 1 e n 246 # 352 is_member c a 247 1 1 e n 156 # 353 is_member c a 247 1 1 f n 0 # 354 is_member c a 247 1 1 f n 246 # 355 is_member c a 247 1 1 f n 215 # 356 is_member c a 247 1 1 1 2 3 5 6 11 12 13 14 19 20 22 24 25 28 30 33 34 37 38 39 42 45 46 52 54 55 56 58 59 61 62 63 65 67 68 70 71 72 75 77 81 82 83 86 88 89 90 93 94 95 96 98 99 101 102 105 108 109 110 112 113 115 117 119 120 130 131 132 133 136 138 139 141 142 143 146 147 150 151 153 155 158 159 160 161 162 163 164 165 166 169 171 174 175 177 178 179 180 182 185 187 194 195 197 199 200 201 204 208 209 211 213 215 216 217 218 220 222 225 227 228 229 233 234 237 238 240 245 n 0 # 357 is_member c a 247 1 1 3 7 8 10 11 12 13 19 22 23 25 26 27 29 35 36 37 39 40 42 43 45 49 51 52 53 56 58 62 64 65 67 68 69 70 71 74 78 79 80 83 85 91 98 99 101 102 106 107 108 109 111 113 114 116 117 118 123 126 127 128 129 130 132 134 135 136 137 138 139 140 143 150 153 155 158 162 163 164 166 167 169 170 171 172 174 179 180 187 188 189 191 193 194 197 199 200 202 203 205 206 207 210 211 212 213 215 218 221 223 224 229 231 233 234 235 236 237 238 239 242 243 246 n 246 # 358 is_member c a 247 1 1 0 1 2 5 8 9 10 12 13 15 16 18 19 24 25 27 30 34 38 39 40 43 45 46 49 50 54 55 57 58 59 63 64 69 75 78 81 82 85 87 88 90 92 94 95 96 98 102 103 104 107 108 111 115 117 118 119 121 123 126 129 131 132 135 137 138 143 144 145 146 147 148 149 150 151 152 154 157 158 159 162 167 169 171 174 175 177 178 179 180 181 182 183 185 187 188 189 190 194 195 196 197 198 199 200 201 202 207 210 211 213 214 216 217 220 221 222 226 229 232 233 234 237 238 239 241 242 246 n 204 # 359 is_member c a 1 0 0 e n 0 # 360 adjoin c a 1 0 0 e n 0 # 361 adjoin c a 1 0 0 e n 0 # 362 adjoin c a 1 0 0 f n 0 # 363 adjoin c a 1 0 0 f n 0 # 364 adjoin c a 1 0 0 f n 0 # 365 adjoin c a 1 0 0 0 n 0 # 366 adjoin c a 1 0 0 n 0 # 367 adjoin c a 1 0 0 n 0 # 368 adjoin c a 1 0 1 e n 0 # 369 adjoin c a 1 0 1 e n 0 # 370 adjoin c a 1 0 1 e n 0 # 371 adjoin c a 1 0 1 f n 0 # 372 adjoin c a 1 0 1 f n 0 # 373 adjoin c a 1 0 1 f n 0 # 374 adjoin c a 1 0 1 0 n 0 # 375 adjoin c a 1 0 1 0 n 0 # 376 adjoin c a 1 0 1 0 n 0 # 377 adjoin c a 1 1 0 e n 0 # 378 adjoin c a 1 1 0 e n 0 # 379 adjoin c a 1 1 0 e n 0 # 380 adjoin c a 1 1 0 f n 0 # 381 adjoin c a 1 1 0 f n 0 # 382 adjoin c a 1 1 0 f n 0 # 383 adjoin c a 1 1 0 0 n 0 # 384 adjoin c a 1 1 0 n 0 # 385 adjoin c a 1 1 0 n 0 # 386 adjoin c a 1 1 1 e n 0 # 387 adjoin c a 1 1 1 e n 0 # 388 adjoin c a 1 1 1 e n 0 # 389 adjoin c a 1 1 1 f n 0 # 390 adjoin c a 1 1 1 f n 0 # 391 adjoin c a 1 1 1 f n 0 # 392 adjoin c a 1 1 1 0 n 0 # 393 adjoin c a 1 1 1 n 0 # 394 adjoin c a 1 1 1 n 0 # 395 adjoin c a 31 0 0 e n 0 # 396 adjoin c a 31 0 0 e n 30 # 397 adjoin c a 31 0 0 e n 28 # 398 adjoin c a 31 0 0 f n 0 # 399 adjoin c a 31 0 0 f n 30 # 400 adjoin c a 31 0 0 f n 0 # 401 adjoin c a 31 0 0 1 2 4 6 7 8 9 12 15 16 17 18 19 20 24 26 30 n 0 # 402 adjoin c a 31 0 0 0 1 4 5 6 7 9 10 11 12 16 17 19 20 21 24 28 29 30 n 30 # 403 adjoin c a 31 0 0 1 3 4 6 8 9 11 13 14 15 16 17 20 22 24 26 28 29 n 30 # 404 adjoin c a 31 0 1 e n 0 # 405 adjoin c a 31 0 1 e n 30 # 406 adjoin c a 31 0 1 e n 30 # 407 adjoin c a 31 0 1 f n 0 # 408 adjoin c a 31 0 1 f n 30 # 409 adjoin c a 31 0 1 f n 15 # 410 adjoin c a 31 0 1 2 3 4 5 6 10 13 15 18 19 20 21 23 26 28 n 0 # 411 adjoin c a 31 0 1 0 3 5 6 9 11 15 17 18 20 21 22 23 25 26 27 28 29 30 n 30 # 412 adjoin c a 31 0 1 0 3 4 8 10 11 12 13 15 18 19 21 22 24 25 26 27 29 30 n 4 # 413 adjoin c a 31 1 0 e n 0 # 414 adjoin c a 31 1 0 e n 30 # 415 adjoin c a 31 1 0 e n 27 # 416 adjoin c a 31 1 0 f n 0 # 417 adjoin c a 31 1 0 f n 30 # 418 adjoin c a 31 1 0 f n 29 # 419 adjoin c a 31 1 0 0 5 6 8 9 11 13 16 18 20 21 23 24 25 26 28 n 0 # 420 adjoin c a 31 1 0 0 2 4 5 12 14 15 16 18 20 21 22 23 24 29 30 n 30 # 421 adjoin c a 31 1 0 3 8 9 10 14 19 23 25 n 4 # 422 adjoin c a 31 1 1 e n 0 # 423 adjoin c a 31 1 1 e n 30 # 424 adjoin c a 31 1 1 e n 30 # 425 adjoin c a 31 1 1 f n 0 # 426 adjoin c a 31 1 1 f n 30 # 427 adjoin c a 31 1 1 f n 4 # 428 adjoin c a 31 1 1 0 1 2 5 8 9 11 13 15 19 22 23 24 29 30 n 0 # 429 adjoin c a 31 1 1 2 3 4 5 7 8 9 11 14 15 16 19 20 21 22 23 24 27 28 29 30 n 30 # 430 adjoin c a 31 1 1 2 5 10 12 13 15 16 17 18 20 21 23 26 29 n 3 # 431 adjoin c a 32 0 0 e n 0 # 432 adjoin c a 32 0 0 e n 31 # 433 adjoin c a 32 0 0 e n 19 # 434 adjoin c a 32 0 0 f n 0 # 435 adjoin c a 32 0 0 f n 31 # 436 adjoin c a 32 0 0 f n 27 # 437 adjoin c a 32 0 0 0 1 4 5 6 7 8 10 14 16 17 18 22 24 25 29 30 n 0 # 438 adjoin c a 32 0 0 0 3 4 7 8 11 12 15 16 18 20 21 22 23 24 n 31 # 439 adjoin c a 32 0 0 1 2 7 8 9 10 12 15 20 22 23 24 26 30 31 n 23 # 440 adjoin c a 32 0 1 e n 0 # 441 adjoin c a 32 0 1 e n 31 # 442 adjoin c a 32 0 1 e n 10 # 443 adjoin c a 32 0 1 f n 0 # 444 adjoin c a 32 0 1 f n 31 # 445 adjoin c a 32 0 1 f n 7 # 446 adjoin c a 32 0 1 0 2 3 4 5 6 8 9 10 11 13 15 16 17 18 19 20 21 22 26 28 29 30 n 0 # 447 adjoin c a 32 0 1 0 1 3 4 5 8 17 18 19 20 21 24 26 27 28 29 31 n 31 # 448 adjoin c a 32 0 1 0 2 3 8 10 11 12 20 22 23 24 25 26 27 28 29 30 31 n 15 # 449 adjoin c a 32 1 0 e n 0 # 450 adjoin c a 32 1 0 e n 31 # 451 adjoin c a 32 1 0 e n 28 # 452 adjoin c a 32 1 0 f n 0 # 453 adjoin c a 32 1 0 f n 31 # 454 adjoin c a 32 1 0 f n 23 # 455 adjoin c a 32 1 0 0 2 4 7 9 12 14 18 20 21 23 28 30 31 n 0 # 456 adjoin c a 32 1 0 4 5 7 9 14 15 17 23 24 25 28 29 n 31 # 457 adjoin c a 32 1 0 2 7 9 12 13 16 18 20 23 24 27 31 n 20 # 458 adjoin c a 32 1 1 e n 0 # 459 adjoin c a 32 1 1 e n 31 # 460 adjoin c a 32 1 1 e n 7 # 461 adjoin c a 32 1 1 f n 0 # 462 adjoin c a 32 1 1 f n 31 # 463 adjoin c a 32 1 1 f n 13 # 464 adjoin c a 32 1 1 1 3 7 10 11 12 14 17 20 21 23 25 28 29 30 n 0 # 465 adjoin c a 32 1 1 0 6 7 8 9 11 14 15 21 23 24 25 27 28 30 31 n 31 # 466 adjoin c a 32 1 1 2 3 4 5 6 8 15 16 17 18 24 25 26 27 28 29 n 25 # 467 adjoin c a 33 0 0 e n 0 # 468 adjoin c a 33 0 0 e n 32 # 469 adjoin c a 33 0 0 e n 1 # 470 adjoin c a 33 0 0 f n 0 # 471 adjoin c a 33 0 0 f n 32 # 472 adjoin c a 33 0 0 f n 16 # 473 adjoin c a 33 0 0 0 6 7 8 9 11 12 14 15 16 17 19 20 21 22 23 24 25 29 30 n 0 # 474 adjoin c a 33 0 0 1 2 3 5 6 21 25 27 28 29 n 32 # 475 adjoin c a 33 0 0 0 1 2 3 4 6 8 11 12 13 15 16 17 19 24 27 29 32 n 2 # 476 adjoin c a 33 0 1 e n 0 # 477 adjoin c a 33 0 1 e n 32 # 478 adjoin c a 33 0 1 e n 21 # 479 adjoin c a 33 0 1 f n 0 # 480 adjoin c a 33 0 1 f n 32 # 481 adjoin c a 33 0 1 f n 0 # 482 adjoin c a 33 0 1 0 2 4 8 9 11 12 13 14 18 22 23 27 29 32 n 0 # 483 adjoin c a 33 0 1 1 2 8 13 14 15 16 17 20 24 26 28 29 32 n 32 # 484 adjoin c a 33 0 1 1 2 7 9 13 14 20 21 25 n 31 # 485 adjoin c a 33 1 0 e n 0 # 486 adjoin c a 33 1 0 e n 32 # 487 adjoin c a 33 1 0 e n 28 # 488 adjoin c a 33 1 0 f n 0 # 489 adjoin c a 33 1 0 f n 32 # 490 adjoin c a 33 1 0 f n 29 # 491 adjoin c a 33 1 0 3 4 10 11 19 21 26 28 29 30 n 0 # 492 adjoin c a 33 1 0 3 5 7 8 9 15 16 18 19 22 23 26 29 30 31 n 32 # 493 adjoin c a 33 1 0 0 2 3 4 7 8 9 10 13 16 17 18 20 21 22 24 26 27 28 29 30 31 n 25 # 494 adjoin c a 33 1 1 e n 0 # 495 adjoin c a 33 1 1 e n 32 # 496 adjoin c a 33 1 1 e n 7 # 497 adjoin c a 33 1 1 f n 0 # 498 adjoin c a 33 1 1 f n 32 # 499 adjoin c a 33 1 1 f n 8 # 500 adjoin c a 33 1 1 2 3 4 5 10 13 16 18 21 24 27 28 30 n 0 # 501 adjoin c a 33 1 1 0 5 6 7 12 13 14 15 16 19 20 21 22 23 25 26 27 28 n 32 # 502 adjoin c a 33 1 1 0 1 2 4 5 6 10 13 15 22 23 25 26 27 28 31 n 23 # 503 adjoin c a 63 0 0 e n 0 # 504 adjoin c a 63 0 0 e n 62 # 505 adjoin c a 63 0 0 e n 31 # 506 adjoin c a 63 0 0 f n 0 # 507 adjoin c a 63 0 0 f n 62 # 508 adjoin c a 63 0 0 f n 10 # 509 adjoin c a 63 0 0 3 7 9 11 13 19 22 25 26 27 30 35 36 38 45 46 47 50 51 52 54 57 58 59 61 n 0 # 510 adjoin c a 63 0 0 0 3 5 7 9 11 12 14 15 16 19 20 21 22 25 28 31 32 33 36 37 40 41 42 43 45 48 49 50 51 52 53 58 60 n 62 # 511 adjoin c a 63 0 0 2 3 5 6 9 12 14 17 20 21 25 26 27 28 33 34 35 36 37 40 41 43 44 46 48 51 53 54 55 56 57 58 59 61 62 n 0 # 512 adjoin c a 63 0 1 e n 0 # 513 adjoin c a 63 0 1 e n 62 # 514 adjoin c a 63 0 1 e n 35 # 515 adjoin c a 63 0 1 f n 0 # 516 adjoin c a 63 0 1 f n 62 # 517 adjoin c a 63 0 1 f n 58 # 518 adjoin c a 63 0 1 1 2 3 4 5 10 12 13 14 17 20 24 25 27 30 31 33 34 36 38 40 42 46 47 49 53 54 59 60 62 n 0 # 519 adjoin c a 63 0 1 0 2 4 5 6 8 10 12 14 16 17 18 22 24 26 27 28 29 30 31 33 36 40 42 44 45 46 47 48 49 51 n 62 # 520 adjoin c a 63 0 1 1 2 3 4 5 8 9 10 12 13 15 17 18 22 24 26 29 30 31 32 34 35 37 38 40 41 44 45 48 50 51 53 56 n 31 # 521 adjoin c a 63 1 0 e n 0 # 522 adjoin c a 63 1 0 e n 62 # 523 adjoin c a 63 1 0 e n 21 # 524 adjoin c a 63 1 0 f n 0 # 525 adjoin c a 63 1 0 f n 62 # 526 adjoin c a 63 1 0 f n 28 # 527 adjoin c a 63 1 0 0 3 5 6 7 9 10 11 12 14 15 19 20 24 28 30 31 33 34 35 36 37 38 41 47 48 49 50 53 54 58 62 n 0 # 528 adjoin c a 63 1 0 0 2 3 6 7 8 9 12 14 15 19 20 23 24 25 26 32 33 40 42 43 44 45 46 50 51 52 54 55 57 58 60 62 n 62 # 529 adjoin c a 63 1 0 0 2 3 4 9 12 13 14 15 18 20 23 24 25 26 28 29 30 31 33 34 35 37 40 42 45 47 48 50 51 52 54 55 58 61 62 n 54 # 530 adjoin c a 63 1 1 e n 0 # 531 adjoin c a 63 1 1 e n 62 # 532 adjoin c a 63 1 1 e n 51 # 533 adjoin c a 63 1 1 f n 0 # 534 adjoin c a 63 1 1 f n 62 # 535 adjoin c a 63 1 1 f n 52 # 536 adjoin c a 63 1 1 0 2 3 4 8 9 12 14 15 17 18 19 20 23 25 26 28 29 32 33 35 37 40 42 43 44 45 47 48 50 51 52 58 60 61 62 n 0 # 537 adjoin c a 63 1 1 0 1 3 6 7 10 11 13 16 17 19 20 21 23 26 29 32 36 39 40 42 43 50 56 57 58 60 62 n 62 # 538 adjoin c a 63 1 1 1 2 3 6 8 11 13 15 17 18 19 20 21 22 24 25 27 28 29 30 33 34 35 36 37 39 41 42 43 44 48 51 55 57 58 59 60 61 n 29 # 539 adjoin c a 64 0 0 e n 0 # 540 adjoin c a 64 0 0 e n 63 # 541 adjoin c a 64 0 0 e n 37 # 542 adjoin c a 64 0 0 f n 0 # 543 adjoin c a 64 0 0 f n 63 # 544 adjoin c a 64 0 0 f n 55 # 545 adjoin c a 64 0 0 3 6 9 10 11 13 14 16 18 21 24 25 26 32 33 37 38 40 41 43 51 53 54 56 57 59 61 n 0 # 546 adjoin c a 64 0 0 0 1 2 3 4 5 8 9 12 13 17 20 22 27 29 31 32 34 38 39 45 46 47 48 49 53 54 n 63 # 547 adjoin c a 64 0 0 0 2 3 4 5 6 11 12 15 17 20 22 23 24 28 29 36 38 40 42 43 47 49 51 52 54 55 58 62 63 n 8 # 548 adjoin c a 64 0 1 e n 0 # 549 adjoin c a 64 0 1 e n 63 # 550 adjoin c a 64 0 1 e n 21 # 551 adjoin c a 64 0 1 f n 0 # 552 adjoin c a 64 0 1 f n 63 # 553 adjoin c a 64 0 1 f n 11 # 554 adjoin c a 64 0 1 0 1 3 6 8 10 11 12 14 15 18 20 23 24 25 26 27 29 32 36 39 40 42 44 45 48 49 51 53 54 55 58 59 61 n 0 # 555 adjoin c a 64 0 1 4 5 10 11 12 15 17 18 23 24 26 30 31 32 37 38 40 41 43 45 46 49 50 51 54 56 57 58 59 62 63 n 63 # 556 adjoin c a 64 0 1 0 1 3 4 7 9 10 11 12 13 19 20 22 25 31 33 34 35 38 39 42 45 47 49 51 52 57 58 n 51 # 557 adjoin c a 64 1 0 e n 0 # 558 adjoin c a 64 1 0 e n 63 # 559 adjoin c a 64 1 0 e n 11 # 560 adjoin c a 64 1 0 f n 0 # 561 adjoin c a 64 1 0 f n 63 # 562 adjoin c a 64 1 0 f n 27 # 563 adjoin c a 64 1 0 0 1 3 5 7 8 11 12 13 15 16 17 20 22 26 27 33 34 35 38 40 41 43 44 47 49 52 54 57 59 61 63 n 0 # 564 adjoin c a 64 1 0 0 2 4 6 7 9 13 15 16 17 18 19 20 21 25 27 28 29 32 34 35 36 41 42 43 44 46 47 48 49 51 53 55 57 58 60 62 63 n 63 # 565 adjoin c a 64 1 0 4 5 8 11 14 16 20 21 24 26 27 31 32 33 35 36 37 39 40 41 42 45 46 48 50 51 59 60 61 62 63 n 48 # 566 adjoin c a 64 1 1 e n 0 # 567 adjoin c a 64 1 1 e n 63 # 568 adjoin c a 64 1 1 e n 31 # 569 adjoin c a 64 1 1 f n 0 # 570 adjoin c a 64 1 1 f n 63 # 571 adjoin c a 64 1 1 f n 62 # 572 adjoin c a 64 1 1 0 1 3 4 6 11 13 17 18 19 24 25 27 28 33 36 37 38 43 45 47 50 51 52 54 55 59 60 61 n 0 # 573 adjoin c a 64 1 1 0 1 2 3 4 5 11 13 14 15 17 19 20 22 24 29 30 31 34 37 41 43 45 47 48 49 50 51 54 56 58 59 60 62 n 63 # 574 adjoin c a 64 1 1 0 1 2 4 6 8 9 10 12 15 17 19 24 25 27 32 33 34 35 38 41 42 45 47 48 49 50 54 55 57 58 59 61 n 44 # 575 adjoin c a 65 0 0 e n 0 # 576 adjoin c a 65 0 0 e n 64 # 577 adjoin c a 65 0 0 e n 26 # 578 adjoin c a 65 0 0 f n 0 # 579 adjoin c a 65 0 0 f n 64 # 580 adjoin c a 65 0 0 f n 33 # 581 adjoin c a 65 0 0 2 4 5 10 15 16 17 19 20 23 24 26 27 29 30 31 33 36 38 40 41 42 43 46 47 50 52 54 56 57 60 62 n 0 # 582 adjoin c a 65 0 0 1 3 4 5 7 8 10 13 14 16 17 19 20 21 22 23 25 26 27 28 33 34 36 39 40 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 61 62 63 64 n 64 # 583 adjoin c a 65 0 0 0 4 7 9 19 22 24 26 27 29 30 34 39 43 44 45 47 50 51 52 53 55 58 59 63 64 n 4 # 584 adjoin c a 65 0 1 e n 0 # 585 adjoin c a 65 0 1 e n 64 # 586 adjoin c a 65 0 1 e n 38 # 587 adjoin c a 65 0 1 f n 0 # 588 adjoin c a 65 0 1 f n 64 # 589 adjoin c a 65 0 1 f n 26 # 590 adjoin c a 65 0 1 0 3 4 5 6 7 8 9 10 13 17 18 19 21 23 25 26 27 28 29 31 34 39 41 43 44 50 52 57 60 62 64 n 0 # 591 adjoin c a 65 0 1 0 1 6 9 10 11 12 17 19 20 22 23 24 26 31 35 36 37 38 40 41 43 46 52 58 59 60 61 62 n 64 # 592 adjoin c a 65 0 1 0 1 3 4 6 7 8 13 15 16 17 20 21 22 24 26 27 36 37 39 42 43 46 55 56 58 59 60 61 63 n 52 # 593 adjoin c a 65 1 0 e n 0 # 594 adjoin c a 65 1 0 e n 64 # 595 adjoin c a 65 1 0 e n 45 # 596 adjoin c a 65 1 0 f n 0 # 597 adjoin c a 65 1 0 f n 64 # 598 adjoin c a 65 1 0 f n 34 # 599 adjoin c a 65 1 0 3 4 6 8 9 11 12 13 17 19 21 22 23 24 26 28 30 32 35 38 40 43 47 50 53 56 58 59 60 61 62 n 0 # 600 adjoin c a 65 1 0 2 5 7 11 12 13 14 16 18 20 29 32 34 38 40 43 46 47 48 49 51 52 53 61 62 n 64 # 601 adjoin c a 65 1 0 0 5 7 10 13 15 17 18 22 23 24 26 27 30 32 34 38 39 41 43 44 46 49 50 51 52 53 55 56 60 64 n 1 # 602 adjoin c a 65 1 1 e n 0 # 603 adjoin c a 65 1 1 e n 64 # 604 adjoin c a 65 1 1 e n 30 # 605 adjoin c a 65 1 1 f n 0 # 606 adjoin c a 65 1 1 f n 64 # 607 adjoin c a 65 1 1 f n 53 # 608 adjoin c a 65 1 1 1 3 4 6 7 8 16 17 18 19 23 24 25 27 28 32 33 35 40 41 42 43 44 45 47 48 50 51 52 54 55 56 58 59 60 63 64 n 0 # 609 adjoin c a 65 1 1 0 4 6 7 9 10 13 14 16 17 19 20 21 22 24 25 27 29 30 34 36 37 39 40 41 43 44 49 52 54 57 59 60 64 n 64 # 610 adjoin c a 65 1 1 1 3 6 8 9 10 11 15 16 18 22 24 25 29 30 31 32 34 35 36 39 42 44 45 47 51 54 59 60 63 64 n 34 # 611 adjoin c a 211 0 0 e n 0 # 612 adjoin c a 211 0 0 e n 210 # 613 adjoin c a 211 0 0 e n 13 # 614 adjoin c a 211 0 0 f n 0 # 615 adjoin c a 211 0 0 f n 210 # 616 adjoin c a 211 0 0 f n 125 # 617 adjoin c a 211 0 0 0 1 2 3 7 9 10 11 13 14 15 17 18 20 23 24 25 26 27 28 30 31 33 34 35 38 39 42 47 52 55 57 58 61 62 63 65 66 67 68 72 74 76 77 79 83 84 86 91 94 95 97 101 106 107 109 110 116 118 120 123 124 126 127 128 133 136 142 143 144 149 150 153 155 157 158 164 165 166 167 172 173 175 179 181 182 183 184 186 189 192 193 194 195 196 197 198 202 205 n 0 # 618 adjoin c a 211 0 0 0 3 7 8 20 24 28 29 31 33 35 37 38 39 41 46 48 49 50 54 61 62 63 64 66 67 70 71 75 76 77 80 82 85 86 87 88 94 95 96 97 98 101 102 103 107 109 112 114 120 121 123 124 126 127 129 130 132 133 137 141 142 146 148 150 151 154 156 157 158 159 160 161 163 164 165 166 170 171 172 176 178 179 180 182 184 191 193 194 196 197 198 200 203 204 205 207 209 210 n 210 # 619 adjoin c a 211 0 0 2 6 7 12 16 17 20 21 23 24 27 30 31 32 35 36 38 40 41 42 43 45 48 51 53 54 55 58 59 64 65 67 68 69 70 71 72 73 76 77 79 81 82 84 85 88 90 92 94 95 97 100 102 103 107 109 110 112 114 115 118 120 121 122 127 129 130 133 137 139 144 146 147 148 149 152 153 154 159 160 165 166 167 168 173 176 179 186 187 190 194 195 200 201 204 205 207 209 n 107 # 620 adjoin c a 211 0 1 e n 0 # 621 adjoin c a 211 0 1 e n 210 # 622 adjoin c a 211 0 1 e n 177 # 623 adjoin c a 211 0 1 f n 0 # 624 adjoin c a 211 0 1 f n 210 # 625 adjoin c a 211 0 1 f n 152 # 626 adjoin c a 211 0 1 1 2 4 6 7 8 11 12 13 16 17 23 24 25 28 29 34 36 37 38 39 40 43 44 45 47 48 49 51 53 54 56 58 59 60 61 66 67 69 70 72 75 76 77 78 79 80 82 83 88 89 91 92 93 97 99 100 101 102 103 106 108 109 110 111 113 114 115 117 119 120 121 122 123 124 125 128 130 131 133 135 138 140 141 142 144 145 146 147 148 150 151 152 153 154 155 156 157 158 159 161 163 164 165 166 169 172 179 180 182 183 187 190 191 194 197 198 202 204 206 207 208 210 n 0 # 627 adjoin c a 211 0 1 1 2 4 6 7 8 10 11 12 13 14 18 19 20 24 25 26 27 30 31 32 33 35 36 37 38 39 41 43 44 47 48 50 51 54 56 57 65 68 70 71 72 74 75 76 78 83 84 87 89 93 94 95 97 98 101 106 109 110 111 113 114 115 118 121 122 123 124 125 126 128 129 131 132 133 136 140 148 149 150 152 153 155 156 158 160 163 165 166 168 170 171 172 175 176 179 185 188 190 191 192 194 195 196 197 199 201 202 203 206 207 208 210 n 210 # 628 adjoin c a 211 0 1 1 2 3 5 6 7 8 11 12 13 15 16 19 22 25 28 29 31 32 34 36 37 39 40 41 43 45 46 50 51 53 55 56 57 60 61 63 64 67 68 70 71 74 75 77 78 81 83 84 86 90 91 92 94 95 96 97 98 99 101 102 103 104 105 108 110 111 113 114 118 119 120 121 122 123 126 127 129 130 131 134 138 139 140 142 145 147 150 151 152 154 156 161 163 167 169 170 173 175 177 178 179 181 182 188 189 190 192 194 198 199 201 203 205 206 207 208 209 210 n 190 # 629 adjoin c a 211 1 0 e n 0 # 630 adjoin c a 211 1 0 e n 210 # 631 adjoin c a 211 1 0 e n 182 # 632 adjoin c a 211 1 0 f n 0 # 633 adjoin c a 211 1 0 f n 210 # 634 adjoin c a 211 1 0 f n 58 # 635 adjoin c a 211 1 0 1 2 3 4 5 7 10 17 19 21 24 26 30 33 36 37 38 40 41 45 46 47 48 50 52 55 59 60 73 74 75 76 77 78 79 80 81 82 83 84 86 88 89 91 96 97 98 103 106 108 109 110 111 113 114 117 118 120 123 124 125 127 130 131 135 136 138 139 140 141 142 144 145 146 149 150 155 157 158 159 160 161 165 167 170 174 177 178 179 180 181 182 183 186 188 189 191 193 195 196 197 198 199 200 204 205 208 210 n 0 # 636 adjoin c a 211 1 0 1 2 7 10 12 13 14 21 22 23 24 25 27 30 31 33 35 37 42 43 47 48 49 53 56 60 65 68 69 70 71 73 74 82 83 85 86 93 94 95 100 104 106 108 109 111 114 115 117 119 120 121 127 132 134 135 136 138 143 144 146 147 148 150 151 152 153 157 159 161 163 165 166 167 169 171 173 174 175 177 178 181 184 185 186 187 190 191 192 193 194 196 201 204 207 n 210 # 637 adjoin c a 211 1 0 0 3 4 6 7 8 9 10 12 13 16 17 20 22 24 26 27 28 32 33 35 36 38 39 47 49 53 54 57 59 63 65 66 70 72 74 76 79 85 86 87 88 89 90 91 94 95 97 98 101 102 105 107 108 109 110 114 115 119 122 123 125 126 127 128 129 131 132 135 136 137 138 139 141 143 145 149 151 154 155 157 161 164 167 170 171 177 178 179 180 182 184 185 186 190 191 193 199 200 203 205 207 208 n 120 # 638 adjoin c a 211 1 1 e n 0 # 639 adjoin c a 211 1 1 e n 210 # 640 adjoin c a 211 1 1 e n 8 # 641 adjoin c a 211 1 1 f n 0 # 642 adjoin c a 211 1 1 f n 210 # 643 adjoin c a 211 1 1 f n 83 # 644 adjoin c a 211 1 1 1 2 6 9 11 13 17 18 19 20 22 24 25 26 28 29 30 32 33 38 39 41 44 45 46 48 49 51 52 55 64 65 66 70 74 77 79 80 81 82 83 84 85 86 93 94 96 98 100 101 102 105 106 108 112 115 117 121 122 123 124 125 127 129 130 132 133 134 135 140 141 142 143 145 146 148 149 150 152 153 154 156 159 163 164 165 166 170 174 175 177 180 182 185 186 187 188 190 198 199 200 201 202 205 206 207 208 n 0 # 645 adjoin c a 211 1 1 2 3 4 5 6 7 8 10 11 12 13 19 21 22 25 27 28 29 35 36 38 39 42 45 47 49 50 51 52 53 55 56 57 58 62 63 65 66 71 72 73 74 76 81 83 84 86 89 90 91 93 95 96 99 100 102 103 105 110 116 118 119 121 122 123 129 133 134 135 136 139 140 145 151 152 153 154 158 159 160 161 162 164 165 166 167 170 171 175 177 179 180 182 183 187 188 191 194 197 198 199 201 202 203 204 205 206 208 209 210 n 210 # 646 adjoin c a 211 1 1 0 2 3 4 7 8 11 12 13 14 15 17 18 19 20 21 22 23 24 25 27 30 32 33 34 35 36 38 39 40 41 42 44 47 50 53 54 55 58 59 60 61 63 64 66 67 69 70 72 74 76 80 83 86 87 88 89 90 91 92 93 94 95 97 99 100 102 104 105 106 107 108 110 111 112 114 116 117 118 119 120 121 122 123 124 125 127 128 129 130 131 133 135 138 140 141 143 145 146 148 149 152 157 160 162 163 164 166 169 170 174 175 177 178 179 180 183 185 187 189 190 192 193 195 199 200 202 204 205 207 208 210 n 128 # 647 adjoin c a 224 0 0 e n 0 # 648 adjoin c a 224 0 0 e n 223 # 649 adjoin c a 224 0 0 e n 41 # 650 adjoin c a 224 0 0 f n 0 # 651 adjoin c a 224 0 0 f n 223 # 652 adjoin c a 224 0 0 f n 193 # 653 adjoin c a 224 0 0 0 1 3 4 5 6 7 8 9 10 12 13 16 18 19 20 22 25 28 29 30 32 35 36 39 40 43 45 46 47 49 50 55 57 59 60 63 65 66 73 74 75 77 78 79 80 82 83 84 86 89 93 95 96 99 101 103 106 107 110 111 112 113 114 115 117 119 120 123 125 126 127 128 129 130 132 139 140 141 142 143 144 145 146 147 149 150 153 155 156 157 158 159 160 161 163 164 165 166 168 171 173 175 176 178 181 183 184 185 188 191 192 195 200 201 202 203 204 206 208 209 210 211 212 214 216 218 219 n 0 # 654 adjoin c a 224 0 0 0 1 3 5 8 12 14 17 19 20 23 26 27 28 33 35 36 37 38 39 40 43 47 48 49 50 51 52 54 56 57 60 61 62 64 66 67 69 70 73 74 75 80 83 88 89 90 91 92 93 95 98 101 102 104 105 107 108 109 111 112 114 116 118 119 122 125 130 133 134 135 138 140 143 144 148 152 153 154 155 156 160 162 165 167 168 171 173 174 178 180 181 182 184 185 187 189 193 195 196 197 199 200 201 202 205 206 207 210 211 213 217 219 220 221 222 n 223 # 655 adjoin c a 224 0 0 0 5 9 10 11 12 14 15 16 17 18 22 23 26 29 30 31 36 37 38 40 44 47 48 52 56 58 60 61 65 66 70 72 74 75 78 80 82 83 84 87 88 91 94 97 98 99 102 104 105 108 110 111 112 113 115 117 118 119 120 121 122 125 126 127 131 132 134 135 138 141 142 146 147 149 150 152 158 159 160 163 164 168 175 176 183 184 185 187 190 191 192 194 195 196 198 200 202 203 204 206 207 208 211 213 214 216 219 221 222 n 191 # 656 adjoin c a 224 0 1 e n 0 # 657 adjoin c a 224 0 1 e n 223 # 658 adjoin c a 224 0 1 e n 56 # 659 adjoin c a 224 0 1 f n 0 # 660 adjoin c a 224 0 1 f n 223 # 661 adjoin c a 224 0 1 f n 106 # 662 adjoin c a 224 0 1 0 1 2 4 7 13 14 22 24 25 28 29 31 32 35 36 37 41 42 44 46 47 48 49 56 57 58 59 60 61 62 63 67 69 72 73 74 75 77 78 80 82 86 88 91 95 96 97 98 100 101 102 103 104 105 106 110 112 113 116 118 119 120 122 124 126 127 129 130 132 133 135 137 139 144 145 147 148 150 151 153 154 156 157 158 160 161 164 165 168 172 175 177 178 181 182 183 185 186 188 189 190 191 192 195 196 198 199 200 202 203 204 207 211 212 218 221 222 n 0 # 663 adjoin c a 224 0 1 0 3 4 6 7 9 13 15 20 21 22 23 25 27 33 36 38 40 42 45 46 47 50 53 55 58 59 60 65 70 72 79 80 84 88 91 92 93 94 96 100 103 104 105 109 112 114 115 116 119 120 121 122 123 124 125 127 129 132 133 135 136 137 138 142 144 145 147 149 150 152 155 158 162 164 165 166 167 168 169 170 173 174 175 178 179 182 184 188 190 191 204 211 212 214 215 218 221 223 n 223 # 664 adjoin c a 224 0 1 3 4 5 6 7 8 11 12 13 17 18 19 20 21 22 25 26 27 29 30 31 36 39 40 41 42 43 44 46 47 49 50 52 53 54 58 59 61 62 63 64 67 68 70 71 73 75 78 79 81 82 84 85 86 89 91 93 94 97 99 102 103 106 107 108 109 110 112 113 114 118 119 121 123 124 129 131 133 135 138 139 140 143 145 147 149 151 152 153 155 157 163 165 167 168 170 171 172 173 174 175 176 177 178 180 183 185 186 190 191 192 194 196 198 199 201 202 204 205 207 208 209 211 214 217 218 219 220 221 222 223 n 71 # 665 adjoin c a 224 1 0 e n 0 # 666 adjoin c a 224 1 0 e n 223 # 667 adjoin c a 224 1 0 e n 33 # 668 adjoin c a 224 1 0 f n 0 # 669 adjoin c a 224 1 0 f n 223 # 670 adjoin c a 224 1 0 f n 154 # 671 adjoin c a 224 1 0 1 2 5 9 10 12 13 16 17 21 23 24 26 27 28 30 31 32 33 38 39 45 46 48 49 50 51 52 54 55 56 57 58 60 63 65 67 69 70 71 73 74 75 76 77 78 80 81 83 84 86 87 92 93 98 99 101 103 104 106 109 110 111 114 116 120 123 125 127 131 132 133 134 135 139 142 143 144 147 148 150 151 152 154 158 165 167 170 171 172 176 177 179 182 184 185 187 191 192 193 196 200 202 203 204 207 210 212 213 214 216 219 220 221 222 223 n 0 # 672 adjoin c a 224 1 0 0 1 5 6 8 9 11 16 18 19 20 21 23 24 25 26 27 28 33 34 35 37 41 43 45 48 50 51 52 54 55 56 58 59 60 64 68 69 70 72 75 76 79 80 82 83 85 86 92 94 95 96 99 103 106 108 111 115 120 121 122 127 128 130 131 132 133 134 137 138 143 144 145 146 147 148 151 152 156 160 161 163 164 166 169 170 171 172 175 176 178 179 182 185 186 189 190 192 195 196 200 202 203 204 206 207 208 210 212 214 219 n 223 # 673 adjoin c a 224 1 0 1 4 5 7 10 12 13 14 15 17 18 19 21 23 25 26 27 28 32 33 34 35 36 38 40 41 43 44 47 50 56 57 59 67 73 74 75 78 80 81 82 86 89 93 94 95 96 97 98 101 102 104 105 107 115 116 118 119 123 124 127 134 135 136 138 140 144 145 147 150 157 159 160 161 168 171 172 173 175 176 180 182 185 186 187 188 190 191 193 194 198 199 202 205 206 212 219 221 222 223 n 202 # 674 adjoin c a 224 1 1 e n 0 # 675 adjoin c a 224 1 1 e n 223 # 676 adjoin c a 224 1 1 e n 106 # 677 adjoin c a 224 1 1 f n 0 # 678 adjoin c a 224 1 1 f n 223 # 679 adjoin c a 224 1 1 f n 59 # 680 adjoin c a 224 1 1 1 2 6 7 9 10 11 15 16 20 23 24 27 30 31 33 34 35 37 39 40 45 50 51 52 54 55 56 58 61 62 63 64 65 67 68 69 70 71 75 76 77 81 85 87 89 91 92 97 100 105 106 110 111 113 114 116 121 122 123 124 129 133 134 135 137 139 140 141 142 144 145 146 147 148 152 155 156 157 160 161 162 163 166 167 169 170 172 173 175 178 182 185 188 189 195 196 198 199 201 204 205 208 210 214 215 221 222 223 n 0 # 681 adjoin c a 224 1 1 0 2 3 5 6 7 8 9 10 12 14 15 19 20 22 24 26 27 28 30 31 32 34 38 39 41 46 47 48 50 51 53 56 57 59 61 62 65 67 70 71 74 75 77 82 83 84 86 87 90 91 93 94 95 96 99 100 102 105 107 108 109 111 112 114 115 117 118 119 120 121 124 126 127 128 130 131 132 137 139 142 144 145 150 154 156 157 159 161 162 163 167 170 171 172 173 175 177 178 179 181 183 188 195 196 198 200 202 203 206 207 208 209 210 212 214 218 220 222 n 223 # 682 adjoin c a 224 1 1 0 1 3 5 6 9 11 16 19 22 23 24 25 28 30 31 33 35 36 41 43 44 45 46 47 48 50 52 53 55 57 61 64 65 67 71 73 80 81 82 83 84 86 89 90 91 92 93 95 96 98 99 100 102 107 108 109 111 112 114 116 118 122 128 131 132 133 134 138 139 142 143 148 152 154 156 160 161 163 164 167 168 170 171 173 174 175 180 181 182 185 186 187 192 193 195 196 198 199 200 201 202 205 207 210 211 213 219 221 222 n 62 # 683 adjoin c a 247 0 0 e n 0 # 684 adjoin c a 247 0 0 e n 246 # 685 adjoin c a 247 0 0 e n 39 # 686 adjoin c a 247 0 0 f n 0 # 687 adjoin c a 247 0 0 f n 246 # 688 adjoin c a 247 0 0 f n 219 # 689 adjoin c a 247 0 0 0 1 2 5 7 9 10 11 14 16 17 18 21 22 23 25 26 27 32 34 36 37 40 44 48 50 55 58 59 61 62 65 66 68 71 73 74 76 78 79 80 83 84 86 88 90 93 94 95 96 97 98 100 106 108 112 115 116 119 120 122 125 126 127 129 133 134 135 136 137 138 139 144 145 147 148 151 152 154 155 157 158 159 160 168 170 176 177 178 179 182 183 184 185 186 188 189 190 191 195 198 200 201 202 208 212 213 215 216 223 227 228 231 234 235 238 240 242 243 245 246 n 0 # 690 adjoin c a 247 0 0 0 6 8 10 11 15 16 17 18 23 25 28 31 32 33 43 45 46 49 50 51 55 56 57 59 61 62 67 68 69 70 74 75 76 77 78 81 83 84 85 87 88 89 90 93 95 97 98 100 101 104 106 107 109 111 112 113 115 117 118 120 121 124 125 128 129 131 132 133 135 138 139 143 144 145 146 148 150 151 154 155 161 163 164 166 168 170 171 172 174 175 177 181 189 190 191 193 194 200 203 204 208 209 210 212 214 215 219 220 222 226 227 228 230 231 232 234 235 240 242 243 246 n 246 # 691 adjoin c a 247 0 0 0 1 3 4 6 8 10 16 17 18 19 22 23 27 28 29 30 31 32 33 34 38 40 41 42 43 44 47 48 50 53 54 55 56 58 59 66 67 68 73 77 80 81 84 87 88 89 93 94 95 98 99 100 105 108 109 110 111 112 116 119 121 123 124 125 126 127 129 130 134 138 140 141 142 143 144 147 148 153 155 156 158 161 162 166 167 168 169 171 172 175 177 181 184 185 188 190 194 195 196 197 198 199 200 205 207 208 209 211 212 213 217 218 221 222 223 226 229 230 231 235 237 238 241 244 245 246 n 10 # 692 adjoin c a 247 0 1 e n 0 # 693 adjoin c a 247 0 1 e n 246 # 694 adjoin c a 247 0 1 e n 77 # 695 adjoin c a 247 0 1 f n 0 # 696 adjoin c a 247 0 1 f n 246 # 697 adjoin c a 247 0 1 f n 219 # 698 adjoin c a 247 0 1 0 5 6 8 11 15 17 19 21 22 25 27 28 29 30 31 36 38 39 41 42 43 47 49 50 51 52 53 61 63 68 69 72 74 76 81 82 84 86 88 89 90 92 93 94 101 104 106 107 108 109 110 112 113 114 115 117 118 119 120 121 123 124 126 131 133 134 137 138 140 141 142 143 144 145 148 155 156 160 161 162 163 164 165 168 170 173 176 177 181 182 187 189 199 200 203 204 205 207 209 211 215 217 218 219 221 223 228 229 231 232 233 234 235 236 237 238 240 241 242 246 n 0 # 699 adjoin c a 247 0 1 0 1 2 3 5 6 8 10 14 17 18 20 21 23 24 26 27 30 33 34 35 37 41 42 43 45 47 48 51 53 54 55 56 57 58 60 61 62 64 65 66 68 70 73 75 76 78 79 80 83 84 86 87 88 89 91 92 95 96 98 99 101 102 103 108 110 116 119 121 122 125 130 131 132 133 137 138 139 141 143 145 147 149 150 151 152 155 157 159 160 163 165 168 172 173 174 176 180 181 183 185 186 187 188 189 190 191 194 198 206 208 209 210 211 212 222 225 226 227 228 229 230 234 235 236 237 239 240 243 244 245 n 246 # 700 adjoin c a 247 0 1 2 3 5 6 7 10 13 15 17 18 20 21 22 26 29 31 34 35 38 39 40 41 42 44 48 50 51 53 55 58 59 62 64 67 68 69 70 71 72 73 76 77 78 79 82 83 85 92 93 94 95 98 103 105 108 112 113 115 116 117 121 122 124 125 126 128 129 130 137 138 140 141 142 143 144 145 146 147 148 151 152 153 155 156 158 159 160 161 162 164 166 168 171 174 179 180 181 182 183 184 194 200 201 206 208 215 216 217 221 222 224 226 228 230 231 236 238 240 242 244 n 213 # 701 adjoin c a 247 1 0 e n 0 # 702 adjoin c a 247 1 0 e n 246 # 703 adjoin c a 247 1 0 e n 188 # 704 adjoin c a 247 1 0 f n 0 # 705 adjoin c a 247 1 0 f n 246 # 706 adjoin c a 247 1 0 f n 169 # 707 adjoin c a 247 1 0 0 3 4 8 10 11 13 15 20 22 23 25 26 27 28 29 31 33 35 37 40 45 46 47 51 54 55 57 58 59 60 62 63 66 67 68 71 72 73 75 76 78 79 81 82 83 85 86 89 92 98 100 104 105 107 108 110 113 118 119 124 128 130 132 134 135 136 139 140 143 144 145 151 152 153 154 155 158 159 160 161 163 164 167 168 169 170 171 174 178 179 180 182 183 184 185 193 194 202 203 204 205 206 208 209 211 212 213 215 216 217 219 223 226 228 230 233 234 237 240 241 243 244 245 246 n 0 # 708 adjoin c a 247 1 0 1 2 6 7 8 9 10 12 14 15 16 17 18 19 21 23 24 26 28 29 34 35 36 37 38 40 41 42 44 45 47 50 51 58 61 62 63 65 67 68 72 74 75 76 78 80 84 85 86 90 93 95 96 97 98 100 102 103 105 106 109 110 114 115 116 117 121 122 123 124 125 128 130 131 133 134 135 136 137 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 163 165 166 168 170 172 173 174 175 176 177 180 183 187 189 191 192 193 194 196 197 202 204 205 207 209 213 214 216 221 224 229 230 231 233 237 238 239 243 244 n 246 # 709 adjoin c a 247 1 0 0 1 2 4 5 6 10 11 12 13 14 15 16 17 24 29 30 34 37 38 39 42 45 49 51 53 54 55 59 63 64 67 69 70 71 75 77 78 79 80 83 86 88 92 94 96 99 102 103 104 105 107 108 110 112 116 118 119 120 121 122 123 125 129 132 133 135 136 137 138 139 144 145 154 155 158 160 162 163 166 168 170 172 175 176 177 184 187 188 191 194 195 196 198 199 200 201 202 203 206 209 211 213 220 221 222 225 226 227 229 230 232 233 237 239 240 241 244 245 246 n 184 # 710 adjoin c a 247 1 1 e n 0 # 711 adjoin c a 247 1 1 e n 246 # 712 adjoin c a 247 1 1 e n 243 # 713 adjoin c a 247 1 1 f n 0 # 714 adjoin c a 247 1 1 f n 246 # 715 adjoin c a 247 1 1 f n 72 # 716 adjoin c a 247 1 1 0 1 2 3 5 8 9 11 12 17 19 22 23 24 25 26 29 32 34 41 42 44 49 51 52 54 55 59 61 64 66 68 71 72 75 76 77 81 82 85 87 90 91 97 101 109 110 111 112 113 119 120 125 127 128 129 131 132 136 138 141 142 143 147 148 150 151 152 154 156 159 162 164 165 166 167 169 171 172 174 177 181 182 185 189 190 191 193 196 202 204 205 208 209 212 215 217 219 220 222 223 224 227 228 230 232 233 234 235 236 238 240 242 243 244 246 n 0 # 717 adjoin c a 247 1 1 2 4 7 9 11 12 13 14 16 17 20 25 26 28 30 33 34 41 46 50 52 60 62 65 66 67 71 72 73 78 79 82 84 87 88 89 91 93 94 95 96 97 98 99 100 101 102 103 104 105 107 110 111 112 113 114 121 122 123 124 125 126 128 129 131 132 134 144 146 148 152 155 160 161 162 163 164 165 168 169 170 172 173 174 175 179 180 181 183 187 188 189 190 191 193 196 197 198 199 205 207 209 210 213 214 215 222 223 229 230 231 235 237 238 239 242 243 245 246 n 246 # 718 adjoin c a 247 1 1 0 4 5 9 10 12 13 15 17 18 20 21 22 23 26 28 29 30 31 35 36 42 44 46 48 49 51 52 54 55 56 59 62 68 69 70 71 76 79 81 82 83 86 88 94 95 96 104 105 106 108 113 115 121 122 123 126 127 128 131 132 133 136 138 139 142 143 147 149 151 153 154 155 157 158 165 166 167 168 169 170 172 173 176 177 178 183 186 187 190 191 192 195 196 197 198 199 200 201 203 205 206 209 210 211 214 216 217 223 225 226 228 229 232 233 236 238 241 246 n 210 # 719 adjoin c a 1 0 0 e n 0 # 720 remove c a 1 0 0 e n 0 # 721 remove c a 1 0 0 e n 0 # 722 remove c a 1 0 0 f n 0 # 723 remove c a 1 0 0 f n 0 # 724 remove c a 1 0 0 f n 0 # 725 remove c a 1 0 0 0 n 0 # 726 remove c a 1 0 0 n 0 # 727 remove c a 1 0 0 n 0 # 728 remove c a 1 0 1 e n 0 # 729 remove c a 1 0 1 e n 0 # 730 remove c a 1 0 1 e n 0 # 731 remove c a 1 0 1 f n 0 # 732 remove c a 1 0 1 f n 0 # 733 remove c a 1 0 1 f n 0 # 734 remove c a 1 0 1 0 n 0 # 735 remove c a 1 0 1 n 0 # 736 remove c a 1 0 1 n 0 # 737 remove c a 1 1 0 e n 0 # 738 remove c a 1 1 0 e n 0 # 739 remove c a 1 1 0 e n 0 # 740 remove c a 1 1 0 f n 0 # 741 remove c a 1 1 0 f n 0 # 742 remove c a 1 1 0 f n 0 # 743 remove c a 1 1 0 n 0 # 744 remove c a 1 1 0 0 n 0 # 745 remove c a 1 1 0 0 n 0 # 746 remove c a 1 1 1 e n 0 # 747 remove c a 1 1 1 e n 0 # 748 remove c a 1 1 1 e n 0 # 749 remove c a 1 1 1 f n 0 # 750 remove c a 1 1 1 f n 0 # 751 remove c a 1 1 1 f n 0 # 752 remove c a 1 1 1 0 n 0 # 753 remove c a 1 1 1 0 n 0 # 754 remove c a 1 1 1 0 n 0 # 755 remove c a 31 0 0 e n 0 # 756 remove c a 31 0 0 e n 30 # 757 remove c a 31 0 0 e n 6 # 758 remove c a 31 0 0 f n 0 # 759 remove c a 31 0 0 f n 30 # 760 remove c a 31 0 0 f n 7 # 761 remove c a 31 0 0 1 6 7 8 11 15 16 18 21 22 23 26 30 n 0 # 762 remove c a 31 0 0 0 4 5 7 10 12 14 20 21 25 27 29 30 n 30 # 763 remove c a 31 0 0 2 3 4 5 6 7 10 11 13 15 17 18 19 21 22 23 25 28 29 n 16 # 764 remove c a 31 0 1 e n 0 # 765 remove c a 31 0 1 e n 30 # 766 remove c a 31 0 1 e n 29 # 767 remove c a 31 0 1 f n 0 # 768 remove c a 31 0 1 f n 30 # 769 remove c a 31 0 1 f n 19 # 770 remove c a 31 0 1 0 2 3 4 7 8 9 10 13 16 17 19 20 21 23 26 27 28 30 n 0 # 771 remove c a 31 0 1 0 2 3 9 10 11 13 14 15 16 17 22 24 27 29 30 n 30 # 772 remove c a 31 0 1 0 2 3 4 5 6 7 9 10 11 13 14 16 17 18 23 25 28 29 30 n 16 # 773 remove c a 31 1 0 e n 0 # 774 remove c a 31 1 0 e n 30 # 775 remove c a 31 1 0 e n 17 # 776 remove c a 31 1 0 f n 0 # 777 remove c a 31 1 0 f n 30 # 778 remove c a 31 1 0 f n 2 # 779 remove c a 31 1 0 0 1 2 3 4 5 6 7 8 10 11 12 13 14 15 16 17 20 21 22 23 24 25 26 27 28 30 n 0 # 780 remove c a 31 1 0 0 13 15 16 20 21 23 24 26 27 30 n 30 # 781 remove c a 31 1 0 0 4 5 6 7 11 14 18 21 22 24 25 27 n 19 # 782 remove c a 31 1 1 e n 0 # 783 remove c a 31 1 1 e n 30 # 784 remove c a 31 1 1 e n 19 # 785 remove c a 31 1 1 f n 0 # 786 remove c a 31 1 1 f n 30 # 787 remove c a 31 1 1 f n 26 # 788 remove c a 31 1 1 0 1 4 5 6 7 12 14 16 17 19 21 22 24 25 26 29 30 n 0 # 789 remove c a 31 1 1 0 1 8 10 14 15 17 18 19 21 22 23 24 25 26 27 28 29 30 n 30 # 790 remove c a 31 1 1 0 4 5 6 11 14 16 17 19 20 23 24 27 30 n 3 # 791 remove c a 32 0 0 e n 0 # 792 remove c a 32 0 0 e n 31 # 793 remove c a 32 0 0 e n 26 # 794 remove c a 32 0 0 f n 0 # 795 remove c a 32 0 0 f n 31 # 796 remove c a 32 0 0 f n 13 # 797 remove c a 32 0 0 0 1 5 6 10 13 14 15 17 18 19 20 21 24 27 28 n 0 # 798 remove c a 32 0 0 0 1 2 5 6 7 8 9 15 18 19 24 25 28 29 30 31 n 31 # 799 remove c a 32 0 0 1 3 4 5 6 7 8 15 16 18 19 21 24 26 27 29 30 31 n 24 # 800 remove c a 32 0 1 e n 0 # 801 remove c a 32 0 1 e n 31 # 802 remove c a 32 0 1 e n 30 # 803 remove c a 32 0 1 f n 0 # 804 remove c a 32 0 1 f n 31 # 805 remove c a 32 0 1 f n 4 # 806 remove c a 32 0 1 1 2 4 5 7 9 12 14 15 16 17 18 20 22 24 25 31 n 0 # 807 remove c a 32 0 1 1 3 4 5 6 8 10 12 13 15 16 18 20 21 22 24 26 31 n 31 # 808 remove c a 32 0 1 2 5 6 7 8 11 13 15 16 19 24 29 30 31 n 29 # 809 remove c a 32 1 0 e n 0 # 810 remove c a 32 1 0 e n 31 # 811 remove c a 32 1 0 e n 24 # 812 remove c a 32 1 0 f n 0 # 813 remove c a 32 1 0 f n 31 # 814 remove c a 32 1 0 f n 16 # 815 remove c a 32 1 0 2 6 9 10 12 14 16 18 19 21 31 n 0 # 816 remove c a 32 1 0 0 1 7 11 16 19 21 23 24 25 26 31 n 31 # 817 remove c a 32 1 0 1 5 7 8 10 12 14 17 19 20 21 23 24 28 29 31 n 0 # 818 remove c a 32 1 1 e n 0 # 819 remove c a 32 1 1 e n 31 # 820 remove c a 32 1 1 e n 5 # 821 remove c a 32 1 1 f n 0 # 822 remove c a 32 1 1 f n 31 # 823 remove c a 32 1 1 f n 5 # 824 remove c a 32 1 1 2 3 6 7 8 9 14 17 18 19 20 24 25 27 28 29 31 n 0 # 825 remove c a 32 1 1 2 5 8 9 10 13 16 19 21 24 25 28 29 31 n 31 # 826 remove c a 32 1 1 3 5 7 11 13 16 17 22 26 27 30 31 n 28 # 827 remove c a 33 0 0 e n 0 # 828 remove c a 33 0 0 e n 32 # 829 remove c a 33 0 0 e n 1 # 830 remove c a 33 0 0 f n 0 # 831 remove c a 33 0 0 f n 32 # 832 remove c a 33 0 0 f n 11 # 833 remove c a 33 0 0 0 2 3 4 5 9 10 12 14 16 21 22 28 29 30 31 n 0 # 834 remove c a 33 0 0 1 2 6 11 12 13 14 17 18 20 22 24 25 27 28 30 n 32 # 835 remove c a 33 0 0 0 1 5 6 7 8 10 11 13 14 16 19 20 22 23 24 26 27 29 32 n 11 # 836 remove c a 33 0 1 e n 0 # 837 remove c a 33 0 1 e n 32 # 838 remove c a 33 0 1 e n 9 # 839 remove c a 33 0 1 f n 0 # 840 remove c a 33 0 1 f n 32 # 841 remove c a 33 0 1 f n 20 # 842 remove c a 33 0 1 1 2 5 8 10 13 20 26 27 29 31 n 0 # 843 remove c a 33 0 1 2 3 6 7 8 11 12 13 15 17 18 20 21 22 24 25 26 28 30 32 n 32 # 844 remove c a 33 0 1 0 3 4 5 6 9 10 11 13 16 17 19 21 25 27 28 30 31 32 n 8 # 845 remove c a 33 1 0 e n 0 # 846 remove c a 33 1 0 e n 32 # 847 remove c a 33 1 0 e n 13 # 848 remove c a 33 1 0 f n 0 # 849 remove c a 33 1 0 f n 32 # 850 remove c a 33 1 0 f n 21 # 851 remove c a 33 1 0 0 1 2 4 5 8 11 13 15 17 18 19 20 22 23 24 25 26 28 31 n 0 # 852 remove c a 33 1 0 1 2 7 8 9 10 13 14 16 17 19 20 22 23 27 30 31 n 32 # 853 remove c a 33 1 0 0 1 6 10 11 14 16 17 23 24 27 29 32 n 17 # 854 remove c a 33 1 1 e n 0 # 855 remove c a 33 1 1 e n 32 # 856 remove c a 33 1 1 e n 17 # 857 remove c a 33 1 1 f n 0 # 858 remove c a 33 1 1 f n 32 # 859 remove c a 33 1 1 f n 15 # 860 remove c a 33 1 1 0 4 9 10 12 16 17 18 25 26 32 n 0 # 861 remove c a 33 1 1 0 1 2 4 6 7 9 10 11 13 16 17 18 24 25 26 30 32 n 32 # 862 remove c a 33 1 1 0 2 3 5 8 9 10 11 14 16 17 18 24 29 n 31 # 863 remove c a 63 0 0 e n 0 # 864 remove c a 63 0 0 e n 62 # 865 remove c a 63 0 0 e n 17 # 866 remove c a 63 0 0 f n 0 # 867 remove c a 63 0 0 f n 62 # 868 remove c a 63 0 0 f n 41 # 869 remove c a 63 0 0 2 3 6 7 8 11 14 15 16 19 20 21 22 27 29 31 33 34 35 38 40 42 44 45 49 51 55 57 58 59 61 62 n 0 # 870 remove c a 63 0 0 0 1 5 7 8 10 13 14 15 16 17 18 19 24 25 26 27 29 32 33 34 36 37 39 41 43 44 47 50 52 53 54 56 57 60 61 62 n 62 # 871 remove c a 63 0 0 0 1 4 7 8 11 13 15 16 17 18 21 23 24 25 28 29 30 32 34 36 39 40 42 43 45 46 48 49 50 53 56 59 n 32 # 872 remove c a 63 0 1 e n 0 # 873 remove c a 63 0 1 e n 62 # 874 remove c a 63 0 1 e n 7 # 875 remove c a 63 0 1 f n 0 # 876 remove c a 63 0 1 f n 62 # 877 remove c a 63 0 1 f n 11 # 878 remove c a 63 0 1 0 1 3 4 5 7 8 9 10 11 12 14 15 16 18 19 21 23 25 27 30 31 33 34 36 39 41 42 45 46 48 49 53 55 56 57 58 59 62 n 0 # 879 remove c a 63 0 1 0 2 6 8 9 11 14 17 18 19 26 28 31 32 36 37 38 40 43 44 47 50 52 53 54 55 57 59 62 n 62 # 880 remove c a 63 0 1 1 2 3 5 6 7 8 11 12 13 15 18 19 21 24 27 29 30 31 32 33 36 41 44 47 48 50 52 55 57 58 59 60 61 62 n 3 # 881 remove c a 63 1 0 e n 0 # 882 remove c a 63 1 0 e n 62 # 883 remove c a 63 1 0 e n 13 # 884 remove c a 63 1 0 f n 0 # 885 remove c a 63 1 0 f n 62 # 886 remove c a 63 1 0 f n 43 # 887 remove c a 63 1 0 0 4 5 6 7 9 11 12 16 18 26 27 28 31 32 33 36 40 41 43 48 49 51 53 56 59 60 61 62 n 0 # 888 remove c a 63 1 0 3 10 12 16 18 19 20 26 31 32 33 34 38 39 40 42 43 44 46 47 48 49 50 51 53 54 55 57 59 61 n 62 # 889 remove c a 63 1 0 4 9 11 13 14 16 17 18 19 20 21 22 23 26 28 29 30 31 33 35 37 39 41 42 43 44 45 47 50 55 56 58 59 60 61 62 n 25 # 890 remove c a 63 1 1 e n 0 # 891 remove c a 63 1 1 e n 62 # 892 remove c a 63 1 1 e n 8 # 893 remove c a 63 1 1 f n 0 # 894 remove c a 63 1 1 f n 62 # 895 remove c a 63 1 1 f n 16 # 896 remove c a 63 1 1 2 3 4 6 7 9 11 12 13 14 18 19 20 21 22 23 24 25 26 30 32 33 35 37 39 40 41 44 46 48 49 51 52 54 55 60 61 62 n 0 # 897 remove c a 63 1 1 0 1 4 6 7 8 9 12 13 18 21 22 27 30 33 34 37 38 40 42 43 44 48 49 50 52 53 57 58 59 61 62 n 62 # 898 remove c a 63 1 1 0 1 2 3 4 6 10 11 15 16 22 25 31 32 33 34 35 37 39 42 45 49 50 52 54 58 60 61 n 56 # 899 remove c a 64 0 0 e n 0 # 900 remove c a 64 0 0 e n 63 # 901 remove c a 64 0 0 e n 22 # 902 remove c a 64 0 0 f n 0 # 903 remove c a 64 0 0 f n 63 # 904 remove c a 64 0 0 f n 45 # 905 remove c a 64 0 0 0 3 5 7 9 10 15 16 19 20 21 25 27 28 32 33 37 39 43 46 48 50 52 54 58 59 60 63 n 0 # 906 remove c a 64 0 0 0 1 4 8 10 12 13 15 16 19 20 23 24 26 27 30 33 34 40 43 45 49 52 55 56 60 62 n 63 # 907 remove c a 64 0 0 1 3 4 5 6 7 11 13 14 15 16 19 20 24 25 26 30 38 39 40 48 50 52 54 55 57 59 61 n 41 # 908 remove c a 64 0 1 e n 0 # 909 remove c a 64 0 1 e n 63 # 910 remove c a 64 0 1 e n 35 # 911 remove c a 64 0 1 f n 0 # 912 remove c a 64 0 1 f n 63 # 913 remove c a 64 0 1 f n 14 # 914 remove c a 64 0 1 1 2 6 7 8 10 11 12 14 20 23 26 27 28 30 35 36 44 46 48 50 51 52 54 56 57 61 62 n 0 # 915 remove c a 64 0 1 5 6 7 12 14 15 16 18 19 20 22 26 29 30 31 32 34 36 37 40 41 43 48 52 54 55 57 59 60 63 n 63 # 916 remove c a 64 0 1 0 3 5 6 8 10 12 14 16 17 18 21 23 24 25 27 29 33 34 35 37 38 41 46 49 50 52 55 57 59 60 61 62 n 24 # 917 remove c a 64 1 0 e n 0 # 918 remove c a 64 1 0 e n 63 # 919 remove c a 64 1 0 e n 54 # 920 remove c a 64 1 0 f n 0 # 921 remove c a 64 1 0 f n 63 # 922 remove c a 64 1 0 f n 8 # 923 remove c a 64 1 0 1 2 5 6 7 11 15 16 17 19 20 21 23 24 26 27 28 29 30 32 33 34 36 37 38 40 44 45 47 49 52 53 56 57 59 60 n 0 # 924 remove c a 64 1 0 1 2 4 5 6 7 11 12 13 14 18 20 22 23 26 27 28 34 35 36 37 38 40 41 43 44 45 52 55 58 63 n 63 # 925 remove c a 64 1 0 0 2 3 4 6 7 10 16 17 18 19 21 22 23 25 26 27 31 32 34 35 36 37 38 40 41 45 46 48 50 53 54 55 57 59 61 62 n 55 # 926 remove c a 64 1 1 e n 0 # 927 remove c a 64 1 1 e n 63 # 928 remove c a 64 1 1 e n 55 # 929 remove c a 64 1 1 f n 0 # 930 remove c a 64 1 1 f n 63 # 931 remove c a 64 1 1 f n 56 # 932 remove c a 64 1 1 0 2 6 8 9 11 12 13 14 15 17 18 19 21 23 26 27 28 30 31 34 35 36 37 39 42 45 51 53 54 55 60 62 n 0 # 933 remove c a 64 1 1 0 1 2 3 4 8 11 12 13 16 17 20 21 22 26 28 29 32 36 37 38 40 43 44 45 47 48 49 51 52 56 60 61 62 63 n 63 # 934 remove c a 64 1 1 4 5 6 7 10 19 20 21 24 25 26 27 28 29 30 33 36 43 44 45 46 47 50 51 52 55 56 58 59 61 62 63 n 58 # 935 remove c a 65 0 0 e n 0 # 936 remove c a 65 0 0 e n 64 # 937 remove c a 65 0 0 e n 4 # 938 remove c a 65 0 0 f n 0 # 939 remove c a 65 0 0 f n 64 # 940 remove c a 65 0 0 f n 64 # 941 remove c a 65 0 0 0 1 3 7 10 18 24 25 27 28 29 30 33 35 37 38 39 41 42 43 44 48 52 53 55 56 57 62 63 n 0 # 942 remove c a 65 0 0 1 2 6 11 12 15 16 17 18 19 23 24 25 28 34 35 36 37 38 42 43 44 46 47 49 53 56 57 59 61 63 n 64 # 943 remove c a 65 0 0 2 7 11 14 16 19 20 21 22 23 25 31 32 34 36 38 39 40 42 44 45 46 52 53 56 57 59 60 61 62 63 n 18 # 944 remove c a 65 0 1 e n 0 # 945 remove c a 65 0 1 e n 64 # 946 remove c a 65 0 1 e n 63 # 947 remove c a 65 0 1 f n 0 # 948 remove c a 65 0 1 f n 64 # 949 remove c a 65 0 1 f n 12 # 950 remove c a 65 0 1 1 5 6 8 10 11 12 13 15 16 18 19 22 26 27 29 32 34 38 40 43 48 52 53 59 61 n 0 # 951 remove c a 65 0 1 0 1 2 4 5 10 11 12 14 17 21 22 23 25 27 28 29 31 32 33 35 36 37 38 41 42 43 44 45 48 50 53 56 57 59 60 61 62 63 64 n 64 # 952 remove c a 65 0 1 2 5 8 11 12 13 16 17 19 20 21 23 28 30 32 33 36 37 39 41 45 48 49 50 51 52 56 57 58 59 61 62 63 n 2 # 953 remove c a 65 1 0 e n 0 # 954 remove c a 65 1 0 e n 64 # 955 remove c a 65 1 0 e n 39 # 956 remove c a 65 1 0 f n 0 # 957 remove c a 65 1 0 f n 64 # 958 remove c a 65 1 0 f n 10 # 959 remove c a 65 1 0 1 2 3 7 9 12 14 15 16 21 23 24 26 28 29 32 36 42 43 44 45 46 49 50 51 52 55 58 63 64 n 0 # 960 remove c a 65 1 0 0 2 7 10 11 17 21 22 23 24 26 28 29 34 35 36 38 40 43 44 47 51 54 56 57 58 60 62 63 64 n 64 # 961 remove c a 65 1 0 0 1 2 3 6 7 9 10 11 12 13 18 19 23 25 26 27 28 29 30 31 33 34 35 38 39 41 42 46 47 48 49 51 53 54 55 56 57 58 59 61 62 63 64 n 30 # 962 remove c a 65 1 1 e n 0 # 963 remove c a 65 1 1 e n 64 # 964 remove c a 65 1 1 e n 2 # 965 remove c a 65 1 1 f n 0 # 966 remove c a 65 1 1 f n 64 # 967 remove c a 65 1 1 f n 5 # 968 remove c a 65 1 1 0 1 2 4 8 10 12 18 21 23 26 28 29 31 32 33 34 38 40 41 42 43 46 47 48 49 51 52 53 54 56 59 61 63 64 n 0 # 969 remove c a 65 1 1 3 6 7 13 19 20 22 24 25 26 27 29 31 33 34 40 41 42 44 46 47 50 52 53 54 55 56 57 59 61 62 63 64 n 64 # 970 remove c a 65 1 1 2 3 4 6 11 15 17 20 22 24 25 26 27 28 29 32 35 36 40 44 46 47 51 52 59 61 n 36 # 971 remove c a 211 0 0 e n 0 # 972 remove c a 211 0 0 e n 210 # 973 remove c a 211 0 0 e n 137 # 974 remove c a 211 0 0 f n 0 # 975 remove c a 211 0 0 f n 210 # 976 remove c a 211 0 0 f n 150 # 977 remove c a 211 0 0 0 2 4 5 6 9 11 13 14 15 16 20 21 23 27 28 30 31 33 36 37 38 40 42 43 44 45 46 47 48 51 54 55 56 57 59 62 63 65 66 67 68 69 71 72 74 75 76 77 78 79 82 84 87 89 90 91 101 104 105 107 108 110 111 113 117 118 119 121 123 125 127 129 131 134 143 145 151 152 153 154 156 157 158 160 162 164 165 166 171 172 173 174 175 177 179 181 182 185 188 192 194 198 199 200 204 209 n 0 # 978 remove c a 211 0 0 1 3 8 9 10 15 16 17 18 19 21 23 24 28 30 34 36 38 39 40 41 51 54 56 58 59 60 61 62 63 65 67 70 73 74 75 79 81 83 86 89 90 93 95 96 97 98 103 106 107 110 111 112 114 117 119 123 126 130 132 137 139 142 145 147 149 150 151 154 155 156 157 159 165 166 167 168 170 171 173 175 176 177 178 180 181 187 188 189 190 192 199 202 203 206 208 209 n 210 # 979 remove c a 211 0 0 0 1 2 3 5 8 9 12 13 14 16 17 18 19 22 24 30 31 34 35 38 42 44 46 47 49 50 51 53 57 63 64 66 68 69 70 71 72 75 76 77 78 80 81 83 84 85 88 89 90 92 95 96 98 100 101 103 105 106 108 109 110 112 115 117 121 122 127 132 133 136 142 147 149 150 151 152 153 155 156 158 160 162 163 166 168 170 172 173 174 178 181 183 184 186 187 188 189 191 195 196 199 200 201 203 204 206 207 208 209 n 85 # 980 remove c a 211 0 1 e n 0 # 981 remove c a 211 0 1 e n 210 # 982 remove c a 211 0 1 e n 16 # 983 remove c a 211 0 1 f n 0 # 984 remove c a 211 0 1 f n 210 # 985 remove c a 211 0 1 f n 81 # 986 remove c a 211 0 1 0 1 3 6 7 8 10 13 14 15 17 18 19 20 22 23 25 26 27 28 29 30 31 33 34 35 37 38 41 42 43 45 47 48 50 52 53 57 60 61 62 64 65 69 71 72 76 77 79 81 83 84 97 98 99 100 105 106 108 109 112 115 116 118 120 122 124 126 128 129 130 131 132 137 138 140 142 143 144 145 146 147 149 153 154 157 160 162 163 164 170 173 176 177 178 180 182 183 185 188 189 190 193 196 198 200 201 205 208 n 0 # 987 remove c a 211 0 1 1 4 5 6 8 12 13 15 16 17 18 20 22 23 24 29 30 31 32 33 35 36 37 39 42 49 50 56 57 58 60 62 71 72 74 76 78 81 83 85 89 94 95 96 97 99 101 102 104 105 106 107 108 109 110 112 114 115 119 121 122 123 125 126 127 128 130 132 133 134 135 137 138 140 141 142 145 148 149 154 155 156 157 158 159 160 161 162 163 165 166 167 169 174 175 176 179 180 184 187 188 189 191 192 194 197 199 200 201 202 204 205 206 207 208 210 n 210 # 988 remove c a 211 0 1 0 1 6 9 10 15 18 21 24 25 27 28 29 30 31 33 35 39 40 41 45 47 50 51 52 55 57 63 65 66 67 68 70 71 77 79 80 83 85 86 87 90 91 94 95 96 97 99 102 106 107 113 115 116 117 118 121 123 124 127 129 130 133 134 135 137 139 141 142 143 144 146 147 150 157 159 160 163 166 167 176 177 178 179 181 183 185 186 187 193 195 196 197 201 202 205 206 208 209 n 132 # 989 remove c a 211 1 0 e n 0 # 990 remove c a 211 1 0 e n 210 # 991 remove c a 211 1 0 e n 20 # 992 remove c a 211 1 0 f n 0 # 993 remove c a 211 1 0 f n 210 # 994 remove c a 211 1 0 f n 156 # 995 remove c a 211 1 0 1 4 5 9 10 12 13 17 19 21 22 23 24 25 26 30 31 34 39 45 47 49 50 51 53 54 56 58 60 61 62 65 66 67 71 72 73 77 78 79 81 82 83 88 91 92 98 99 102 107 108 110 115 116 117 118 119 122 124 128 132 136 137 138 139 141 143 145 148 151 152 155 156 157 161 162 170 171 176 177 178 179 181 182 185 187 188 189 191 192 197 198 199 201 204 205 206 207 208 209 210 n 0 # 996 remove c a 211 1 0 1 3 4 7 13 15 18 19 23 26 29 31 33 34 40 41 42 44 47 50 51 52 54 56 57 58 60 61 64 66 67 68 71 75 77 78 79 81 82 83 85 88 89 90 91 92 94 95 96 97 98 99 100 102 107 110 111 113 114 115 116 117 119 120 122 123 124 125 126 127 130 132 133 134 137 139 152 153 156 157 161 162 164 167 169 170 171 172 179 180 181 182 183 184 190 191 194 196 201 207 208 209 n 210 # 997 remove c a 211 1 0 0 1 3 5 6 7 8 10 11 12 14 19 22 23 24 30 32 40 42 43 45 46 47 48 52 55 56 60 62 63 64 67 69 72 74 76 77 79 81 85 90 91 92 93 94 96 97 100 101 102 103 104 105 107 108 110 114 117 118 126 130 131 132 134 135 137 138 139 141 143 145 147 148 149 153 154 155 156 158 160 161 163 165 166 168 169 172 173 176 178 179 183 184 185 186 187 189 194 195 197 201 202 208 210 n 116 # 998 remove c a 211 1 1 e n 0 # 999 remove c a 211 1 1 e n 210 # 1000 remove c a 211 1 1 e n 66 # 1001 remove c a 211 1 1 f n 0 # 1002 remove c a 211 1 1 f n 210 # 1003 remove c a 211 1 1 f n 188 # 1004 remove c a 211 1 1 1 3 4 5 6 7 8 11 12 13 14 18 22 23 24 27 28 30 31 32 34 35 36 37 38 39 40 42 43 45 47 48 52 53 57 66 68 69 71 72 74 78 82 86 87 89 90 94 95 97 101 106 108 109 110 112 116 118 119 121 127 128 133 134 137 138 139 141 145 146 147 148 149 150 152 154 155 156 157 158 159 161 163 164 167 168 170 172 174 176 177 179 184 185 188 189 192 195 196 198 199 200 201 203 204 206 207 208 210 n 0 # 1005 remove c a 211 1 1 3 6 7 9 10 11 12 14 15 19 23 26 31 32 34 35 36 37 38 39 40 41 42 43 45 49 53 58 59 60 61 62 71 72 73 74 76 78 79 84 85 86 89 90 92 93 94 101 104 106 111 112 113 115 116 118 120 121 122 123 124 126 127 128 133 134 135 139 140 141 143 144 145 147 148 151 154 156 157 161 162 164 167 168 169 170 171 172 174 175 176 178 179 180 182 184 185 189 190 191 193 197 200 201 203 205 206 209 n 210 # 1006 remove c a 211 1 1 0 4 5 6 12 19 20 22 23 24 25 27 38 39 40 43 44 45 46 48 50 51 52 53 54 55 56 58 61 63 65 67 70 71 72 74 75 76 77 78 79 81 82 84 85 86 87 88 89 92 93 96 97 99 102 105 111 114 117 120 122 126 127 129 130 131 133 135 136 140 141 142 143 145 148 150 151 152 156 157 159 160 162 165 166 167 172 178 180 182 183 184 187 190 192 195 198 199 200 203 206 207 208 209 210 n 85 # 1007 remove c a 224 0 0 e n 0 # 1008 remove c a 224 0 0 e n 223 # 1009 remove c a 224 0 0 e n 217 # 1010 remove c a 224 0 0 f n 0 # 1011 remove c a 224 0 0 f n 223 # 1012 remove c a 224 0 0 f n 178 # 1013 remove c a 224 0 0 0 4 6 7 8 13 14 16 18 19 24 26 27 30 34 36 40 42 46 47 48 49 50 52 55 56 58 60 61 62 65 66 67 69 74 75 76 77 78 79 81 82 88 90 91 93 94 95 97 98 99 100 102 105 106 109 110 111 113 115 117 118 121 123 126 127 128 130 131 132 133 134 137 139 140 142 146 147 149 151 152 153 154 156 157 159 161 162 163 164 165 168 169 174 175 176 177 178 180 184 186 187 188 189 190 192 193 195 198 202 209 211 213 216 219 n 0 # 1014 remove c a 224 0 0 0 2 4 5 6 10 11 12 13 14 16 21 24 25 28 31 32 35 39 40 41 43 44 46 47 48 52 53 55 57 61 65 67 71 73 74 77 80 81 82 83 86 87 88 92 93 96 97 98 103 105 107 108 109 111 114 115 117 118 120 122 123 128 130 132 133 134 136 139 140 141 144 148 150 151 152 153 154 156 158 159 161 164 167 169 173 174 178 180 181 183 184 187 190 191 193 195 197 198 199 203 208 210 211 213 214 218 219 220 221 222 223 n 223 # 1015 remove c a 224 0 0 0 1 2 3 4 5 6 8 9 13 14 15 18 19 22 23 24 25 28 35 48 52 54 58 59 60 63 64 65 66 72 73 74 75 79 80 81 84 86 88 89 93 96 98 99 100 108 109 111 112 113 115 116 118 119 123 124 125 127 129 130 131 136 137 138 139 140 143 145 148 150 152 154 155 156 165 166 168 169 170 171 175 177 178 181 186 188 191 192 193 202 203 204 206 209 211 212 213 215 220 221 n 197 # 1016 remove c a 224 0 1 e n 0 # 1017 remove c a 224 0 1 e n 223 # 1018 remove c a 224 0 1 e n 206 # 1019 remove c a 224 0 1 f n 0 # 1020 remove c a 224 0 1 f n 223 # 1021 remove c a 224 0 1 f n 164 # 1022 remove c a 224 0 1 0 4 5 7 8 9 11 16 19 20 21 25 27 30 33 34 36 37 38 40 43 44 45 47 49 50 53 54 55 56 58 61 62 63 64 65 68 70 72 77 79 81 83 84 86 87 89 91 92 94 98 99 101 105 106 107 108 109 110 112 115 116 118 123 124 131 133 135 136 137 138 140 141 142 143 145 146 149 153 156 157 158 161 163 164 165 166 168 169 170 171 172 173 174 176 177 178 179 180 184 185 186 187 188 193 196 198 201 205 206 208 209 212 213 214 215 216 218 219 220 n 0 # 1023 remove c a 224 0 1 1 2 6 7 9 11 12 14 15 16 19 20 21 22 23 25 29 30 31 33 35 37 40 41 43 44 46 47 49 50 52 53 56 57 58 61 63 64 65 66 67 68 71 72 73 74 75 76 78 81 82 84 86 87 88 89 92 93 95 96 98 104 105 107 111 116 119 121 124 125 127 128 129 134 139 140 141 142 146 147 148 150 153 154 156 159 164 166 168 169 171 172 175 176 178 179 180 181 184 186 188 189 191 196 198 203 204 206 207 208 209 210 212 214 216 218 219 222 223 n 223 # 1024 remove c a 224 0 1 0 6 7 8 10 11 12 13 14 16 17 18 21 22 25 27 29 30 31 35 36 39 40 42 44 45 46 47 48 49 52 54 55 57 58 60 64 65 66 72 73 74 75 76 77 80 81 82 84 90 92 94 97 98 99 102 103 105 106 107 112 114 115 116 121 122 126 129 132 136 141 142 144 147 148 149 150 152 153 155 160 161 162 163 164 167 168 174 176 178 180 181 182 183 184 186 187 192 195 196 197 198 199 202 204 205 206 208 209 210 211 212 213 214 216 220 221 222 223 n 57 # 1025 remove c a 224 1 0 e n 0 # 1026 remove c a 224 1 0 e n 223 # 1027 remove c a 224 1 0 e n 203 # 1028 remove c a 224 1 0 f n 0 # 1029 remove c a 224 1 0 f n 223 # 1030 remove c a 224 1 0 f n 180 # 1031 remove c a 224 1 0 2 7 8 9 10 12 15 18 19 23 24 26 27 28 35 37 38 40 41 42 43 46 48 51 52 54 55 56 60 61 62 67 68 71 72 76 78 80 81 88 89 90 92 94 95 96 97 98 99 101 105 107 111 113 115 117 118 119 121 127 129 130 132 134 141 143 144 145 147 148 150 156 157 159 160 163 166 167 171 172 173 174 175 176 178 180 181 182 183 187 188 189 190 191 195 196 200 201 203 205 210 211 212 214 216 219 223 n 0 # 1032 remove c a 224 1 0 0 1 5 6 8 9 10 12 16 19 20 22 24 29 30 32 34 44 45 46 47 49 51 55 56 57 64 68 69 73 74 76 81 83 85 86 87 89 91 93 95 96 97 99 100 101 102 104 105 106 107 109 110 111 112 115 116 118 124 125 127 129 130 133 138 139 141 143 145 146 149 150 154 156 161 162 163 164 166 169 170 171 172 174 177 179 180 183 188 190 191 193 194 196 197 200 203 204 205 206 208 212 216 217 218 221 223 n 223 # 1033 remove c a 224 1 0 2 4 6 7 8 11 15 16 17 19 21 22 23 24 25 27 29 30 31 33 38 40 43 44 45 46 47 50 51 53 54 59 61 62 64 66 67 68 69 71 74 77 79 81 83 84 86 91 95 96 97 98 99 100 103 104 107 108 110 114 117 119 121 122 124 125 127 128 131 132 133 134 137 143 147 149 150 151 153 156 157 159 161 163 164 167 169 171 173 174 175 177 178 179 180 181 185 186 189 190 191 192 194 196 199 201 202 207 209 212 213 216 222 223 n 38 # 1034 remove c a 224 1 1 e n 0 # 1035 remove c a 224 1 1 e n 223 # 1036 remove c a 224 1 1 e n 12 # 1037 remove c a 224 1 1 f n 0 # 1038 remove c a 224 1 1 f n 223 # 1039 remove c a 224 1 1 f n 201 # 1040 remove c a 224 1 1 0 1 2 3 5 7 9 10 11 13 15 16 19 24 25 27 28 31 36 37 40 45 47 50 52 54 55 60 61 63 64 65 67 68 69 71 72 80 82 83 84 85 86 90 92 93 95 96 97 98 104 106 107 108 109 111 114 115 117 119 120 121 123 124 126 127 129 131 135 136 137 138 139 140 142 144 145 148 151 153 154 157 160 163 164 166 167 169 170 173 174 176 177 178 179 183 188 189 190 191 194 196 197 200 202 206 209 210 211 214 216 218 219 221 n 0 # 1041 remove c a 224 1 1 2 3 4 5 7 9 10 13 14 15 17 18 19 21 23 26 27 33 36 37 40 42 44 55 56 59 61 63 64 65 67 68 69 70 72 73 74 75 77 81 82 87 88 89 90 97 98 101 102 104 107 109 111 112 115 116 118 119 121 122 123 126 127 128 129 132 133 134 135 138 139 142 144 145 147 151 155 156 158 159 161 164 168 169 175 177 178 179 180 184 185 186 189 191 192 195 196 197 200 201 202 203 204 206 208 209 210 211 212 215 219 220 222 223 n 223 # 1042 remove c a 224 1 1 0 3 5 7 9 10 13 14 16 17 19 23 24 25 26 27 29 33 34 36 42 46 49 50 57 58 60 62 63 65 68 69 74 75 76 79 83 84 85 87 88 92 96 97 99 100 101 105 107 109 110 111 112 114 115 118 119 125 128 129 131 132 133 136 137 140 143 144 147 150 151 155 157 160 161 163 164 165 166 168 170 171 173 177 179 182 183 184 185 186 188 190 195 202 203 211 212 213 216 218 219 223 n 118 # 1043 remove c a 247 0 0 e n 0 # 1044 remove c a 247 0 0 e n 246 # 1045 remove c a 247 0 0 e n 130 # 1046 remove c a 247 0 0 f n 0 # 1047 remove c a 247 0 0 f n 246 # 1048 remove c a 247 0 0 f n 102 # 1049 remove c a 247 0 0 0 1 8 9 13 15 16 21 22 27 29 30 32 33 35 37 41 43 44 45 46 50 51 52 53 57 60 61 62 64 68 69 70 77 78 79 82 85 88 89 90 92 93 94 95 96 99 101 103 105 106 108 109 111 113 116 117 118 119 121 124 126 127 128 130 131 134 136 137 138 139 142 143 145 148 150 155 158 160 163 164 165 167 168 172 174 175 179 183 185 186 187 191 192 194 195 200 201 203 206 208 209 213 214 215 217 218 219 221 222 225 226 227 233 234 235 237 239 240 241 243 246 n 0 # 1050 remove c a 247 0 0 0 1 3 8 11 13 15 17 18 28 29 30 31 32 35 36 37 39 41 42 43 44 50 52 54 55 60 62 63 64 66 67 70 71 73 76 77 78 82 83 84 86 88 91 96 98 101 103 105 106 108 109 110 111 114 115 116 117 119 121 123 125 126 129 130 131 132 133 136 138 144 147 149 150 151 155 158 161 164 165 170 172 174 175 176 178 183 184 185 187 191 193 194 195 199 200 204 207 208 209 211 213 214 219 220 221 223 226 227 228 230 231 232 233 235 238 239 242 243 245 n 246 # 1051 remove c a 247 0 0 0 1 4 6 7 8 10 11 20 21 23 25 26 28 30 31 38 40 41 42 44 48 49 51 52 53 58 60 61 64 68 70 73 74 81 82 84 86 88 89 90 93 94 98 100 101 102 103 107 108 109 110 111 112 113 117 118 120 122 126 127 128 129 133 135 137 138 141 144 146 152 156 160 161 162 164 171 172 173 174 175 177 178 179 182 184 186 188 190 191 192 193 195 197 198 199 200 203 206 209 214 215 216 220 223 227 230 232 236 237 238 239 240 241 243 246 n 68 # 1052 remove c a 247 0 1 e n 0 # 1053 remove c a 247 0 1 e n 246 # 1054 remove c a 247 0 1 e n 169 # 1055 remove c a 247 0 1 f n 0 # 1056 remove c a 247 0 1 f n 246 # 1057 remove c a 247 0 1 f n 229 # 1058 remove c a 247 0 1 2 3 7 12 15 18 21 23 24 26 27 29 31 34 36 37 44 45 52 53 55 59 60 61 62 64 66 67 69 70 71 79 80 81 83 84 87 88 89 90 91 92 94 95 96 97 100 104 105 109 111 112 114 115 116 118 119 123 124 126 127 131 132 133 135 136 137 139 140 142 143 144 145 147 148 150 152 155 156 157 158 159 162 163 166 167 168 169 170 171 173 176 177 179 182 183 186 192 195 198 201 203 204 205 207 208 209 211 212 214 216 217 218 219 221 223 225 226 227 229 232 235 238 239 242 244 245 246 n 0 # 1059 remove c a 247 0 1 1 4 6 7 8 9 10 13 14 15 16 18 19 22 24 25 27 28 30 34 36 37 40 42 43 45 46 48 49 53 54 55 56 58 59 60 61 62 64 65 67 69 72 76 77 79 80 81 83 84 86 87 88 89 91 92 95 97 99 101 102 104 106 107 110 111 112 114 115 116 117 119 120 121 122 123 127 128 129 132 134 135 136 137 138 139 140 141 142 143 145 146 148 151 154 155 161 162 163 165 166 168 171 174 178 180 181 183 185 186 187 195 198 199 200 202 203 207 208 210 211 214 220 222 223 224 226 227 228 229 230 232 233 237 242 245 246 n 246 # 1060 remove c a 247 0 1 0 4 5 7 9 10 15 19 23 24 26 28 31 32 34 35 38 39 40 44 45 48 49 53 57 61 62 65 66 69 74 78 82 83 84 85 86 88 94 97 98 99 102 103 104 105 106 107 108 109 112 113 114 115 116 117 119 121 123 127 128 140 143 146 151 152 153 154 157 158 162 163 164 165 166 172 173 178 179 182 185 186 188 189 190 191 194 197 199 200 201 202 203 204 206 209 211 212 218 219 220 222 224 225 229 232 235 239 240 241 242 243 n 36 # 1061 remove c a 247 1 0 e n 0 # 1062 remove c a 247 1 0 e n 246 # 1063 remove c a 247 1 0 e n 43 # 1064 remove c a 247 1 0 f n 0 # 1065 remove c a 247 1 0 f n 246 # 1066 remove c a 247 1 0 f n 189 # 1067 remove c a 247 1 0 0 1 3 4 8 9 15 17 18 19 20 21 22 23 24 31 32 33 34 35 41 43 45 47 48 50 51 53 54 58 59 60 61 62 63 64 66 67 68 71 73 74 75 76 78 79 80 81 82 84 85 86 90 91 93 94 99 100 102 103 105 106 107 108 110 111 114 115 117 123 124 126 128 132 135 136 138 139 140 141 142 143 145 146 150 151 156 158 160 161 162 168 173 176 178 180 181 182 186 188 190 191 193 195 197 198 199 205 206 207 209 212 216 218 219 220 225 226 229 231 233 236 241 242 244 246 n 0 # 1068 remove c a 247 1 0 0 5 6 9 11 15 16 22 23 24 27 29 30 34 37 38 43 44 46 47 48 49 50 51 53 54 59 60 61 62 65 66 69 70 71 74 76 78 81 83 84 87 90 93 94 95 99 102 105 106 109 110 111 112 114 117 119 123 124 126 128 129 131 135 138 140 141 143 144 145 148 149 152 153 155 159 161 162 167 168 171 172 175 177 181 182 184 188 189 191 192 196 197 200 203 204 205 206 210 211 213 217 218 220 221 223 225 227 229 233 238 239 240 241 242 244 246 n 246 # 1069 remove c a 247 1 0 2 5 6 8 10 11 12 13 16 18 20 22 23 25 26 27 30 31 32 33 37 38 41 45 46 49 50 51 53 54 55 58 59 60 61 62 64 65 66 68 70 74 75 77 80 81 84 88 93 94 96 97 99 107 113 114 116 119 120 121 124 126 127 128 130 134 135 136 137 138 141 142 143 144 145 147 149 153 154 156 158 159 160 161 164 165 167 168 169 170 172 173 175 177 179 181 182 183 184 185 187 190 191 192 193 195 196 198 199 201 205 207 208 209 210 212 213 219 220 221 222 223 224 225 226 227 230 231 235 237 238 245 246 n 71 # 1070 remove c a 247 1 1 e n 0 # 1071 remove c a 247 1 1 e n 246 # 1072 remove c a 247 1 1 e n 69 # 1073 remove c a 247 1 1 f n 0 # 1074 remove c a 247 1 1 f n 246 # 1075 remove c a 247 1 1 f n 99 # 1076 remove c a 247 1 1 1 2 4 5 8 9 10 11 12 16 17 18 19 23 24 29 31 32 34 38 40 41 43 45 46 48 49 50 54 56 58 59 62 63 64 65 68 70 71 74 75 77 78 80 81 87 88 90 93 97 103 107 108 110 111 114 115 116 118 119 120 121 127 129 133 135 137 142 143 144 145 147 150 152 156 157 159 160 161 164 165 166 171 172 175 177 178 179 181 185 186 187 188 190 191 194 197 199 201 205 207 208 210 215 216 218 219 221 223 226 231 233 235 236 237 238 239 241 242 243 246 n 0 # 1077 remove c a 247 1 1 1 3 7 9 10 11 16 17 18 19 20 21 22 25 29 32 33 35 36 37 38 40 41 45 46 48 49 52 54 58 59 64 65 67 68 71 73 75 76 81 82 85 86 87 89 91 92 93 95 98 100 102 103 106 109 110 111 112 113 114 115 116 117 118 124 128 130 131 132 133 134 136 138 147 148 149 154 156 158 159 160 162 163 168 170 172 173 174 175 177 178 180 182 184 185 187 190 192 195 196 197 199 200 201 203 204 206 209 212 215 216 217 223 224 225 226 227 230 237 239 240 241 242 243 n 246 # 1078 remove c a 247 1 1 2 4 6 7 8 9 10 11 13 15 17 18 21 22 23 24 25 26 30 32 33 34 35 37 40 42 43 46 49 50 52 53 56 58 60 61 62 63 64 65 66 68 75 76 80 82 83 88 91 94 96 99 100 101 105 106 108 110 111 114 115 116 117 118 124 125 126 127 133 135 140 141 146 149 150 153 154 156 157 158 160 162 166 167 168 173 174 175 176 177 178 180 181 182 184 185 187 192 193 194 197 198 199 200 204 206 207 208 209 211 212 213 214 216 220 222 223 227 230 241 244 246 n 132 # 1079 remove c a 1 0 0 e n 0 # 1080 toggle c a 1 0 0 e n 0 # 1081 toggle c a 1 0 0 e n 0 # 1082 toggle c a 1 0 0 f n 0 # 1083 toggle c a 1 0 0 f n 0 # 1084 toggle c a 1 0 0 f n 0 # 1085 toggle c a 1 0 0 0 n 0 # 1086 toggle c a 1 0 0 0 n 0 # 1087 toggle c a 1 0 0 n 0 # 1088 toggle c a 1 0 1 e n 0 # 1089 toggle c a 1 0 1 e n 0 # 1090 toggle c a 1 0 1 e n 0 # 1091 toggle c a 1 0 1 f n 0 # 1092 toggle c a 1 0 1 f n 0 # 1093 toggle c a 1 0 1 f n 0 # 1094 toggle c a 1 0 1 0 n 0 # 1095 toggle c a 1 0 1 0 n 0 # 1096 toggle c a 1 0 1 0 n 0 # 1097 toggle c a 1 1 0 e n 0 # 1098 toggle c a 1 1 0 e n 0 # 1099 toggle c a 1 1 0 e n 0 # 1100 toggle c a 1 1 0 f n 0 # 1101 toggle c a 1 1 0 f n 0 # 1102 toggle c a 1 1 0 f n 0 # 1103 toggle c a 1 1 0 n 0 # 1104 toggle c a 1 1 0 0 n 0 # 1105 toggle c a 1 1 0 0 n 0 # 1106 toggle c a 1 1 1 e n 0 # 1107 toggle c a 1 1 1 e n 0 # 1108 toggle c a 1 1 1 e n 0 # 1109 toggle c a 1 1 1 f n 0 # 1110 toggle c a 1 1 1 f n 0 # 1111 toggle c a 1 1 1 f n 0 # 1112 toggle c a 1 1 1 n 0 # 1113 toggle c a 1 1 1 0 n 0 # 1114 toggle c a 1 1 1 0 n 0 # 1115 toggle c a 31 0 0 e n 0 # 1116 toggle c a 31 0 0 e n 30 # 1117 toggle c a 31 0 0 e n 11 # 1118 toggle c a 31 0 0 f n 0 # 1119 toggle c a 31 0 0 f n 30 # 1120 toggle c a 31 0 0 f n 4 # 1121 toggle c a 31 0 0 3 4 5 6 8 10 13 17 18 19 22 23 24 29 n 0 # 1122 toggle c a 31 0 0 2 4 5 9 11 15 16 20 21 24 26 28 29 30 n 30 # 1123 toggle c a 31 0 0 3 7 8 11 12 13 18 19 21 23 24 25 26 27 29 30 n 5 # 1124 toggle c a 31 0 1 e n 0 # 1125 toggle c a 31 0 1 e n 30 # 1126 toggle c a 31 0 1 e n 26 # 1127 toggle c a 31 0 1 f n 0 # 1128 toggle c a 31 0 1 f n 30 # 1129 toggle c a 31 0 1 f n 2 # 1130 toggle c a 31 0 1 3 4 6 8 9 10 14 17 19 20 21 24 25 27 28 30 n 0 # 1131 toggle c a 31 0 1 3 5 6 7 8 9 10 11 12 14 16 17 22 23 25 28 n 30 # 1132 toggle c a 31 0 1 0 1 2 3 6 9 10 12 14 15 16 17 21 27 29 30 n 0 # 1133 toggle c a 31 1 0 e n 0 # 1134 toggle c a 31 1 0 e n 30 # 1135 toggle c a 31 1 0 e n 9 # 1136 toggle c a 31 1 0 f n 0 # 1137 toggle c a 31 1 0 f n 30 # 1138 toggle c a 31 1 0 f n 11 # 1139 toggle c a 31 1 0 4 6 7 8 9 10 11 12 13 17 19 20 21 25 28 n 0 # 1140 toggle c a 31 1 0 1 4 5 8 12 14 16 17 19 20 24 26 n 30 # 1141 toggle c a 31 1 0 2 3 4 5 8 9 10 12 15 17 20 21 22 23 26 27 29 n 28 # 1142 toggle c a 31 1 1 e n 0 # 1143 toggle c a 31 1 1 e n 30 # 1144 toggle c a 31 1 1 e n 6 # 1145 toggle c a 31 1 1 f n 0 # 1146 toggle c a 31 1 1 f n 30 # 1147 toggle c a 31 1 1 f n 1 # 1148 toggle c a 31 1 1 0 4 5 7 9 12 13 21 23 25 26 27 28 30 n 0 # 1149 toggle c a 31 1 1 0 6 7 9 11 12 13 17 20 22 23 24 25 26 28 n 30 # 1150 toggle c a 31 1 1 0 1 2 4 5 7 9 12 14 15 17 19 20 21 22 23 25 26 27 28 29 n 7 # 1151 toggle c a 32 0 0 e n 0 # 1152 toggle c a 32 0 0 e n 31 # 1153 toggle c a 32 0 0 e n 28 # 1154 toggle c a 32 0 0 f n 0 # 1155 toggle c a 32 0 0 f n 31 # 1156 toggle c a 32 0 0 f n 25 # 1157 toggle c a 32 0 0 1 3 4 5 6 7 13 14 15 16 17 18 19 22 25 27 28 29 30 n 0 # 1158 toggle c a 32 0 0 0 2 4 5 9 11 14 18 19 20 21 22 23 26 29 31 n 31 # 1159 toggle c a 32 0 0 0 3 5 8 9 13 23 25 26 27 28 30 31 n 28 # 1160 toggle c a 32 0 1 e n 0 # 1161 toggle c a 32 0 1 e n 31 # 1162 toggle c a 32 0 1 e n 1 # 1163 toggle c a 32 0 1 f n 0 # 1164 toggle c a 32 0 1 f n 31 # 1165 toggle c a 32 0 1 f n 0 # 1166 toggle c a 32 0 1 2 3 4 5 6 8 9 10 14 15 17 18 21 24 25 26 28 31 n 0 # 1167 toggle c a 32 0 1 2 4 5 6 7 8 12 14 17 19 20 21 22 23 25 31 n 31 # 1168 toggle c a 32 0 1 0 1 3 4 5 6 10 13 15 16 17 19 20 25 27 29 31 n 16 # 1169 toggle c a 32 1 0 e n 0 # 1170 toggle c a 32 1 0 e n 31 # 1171 toggle c a 32 1 0 e n 4 # 1172 toggle c a 32 1 0 f n 0 # 1173 toggle c a 32 1 0 f n 31 # 1174 toggle c a 32 1 0 f n 18 # 1175 toggle c a 32 1 0 1 3 5 6 10 11 13 15 16 17 19 26 28 n 0 # 1176 toggle c a 32 1 0 1 6 7 8 9 10 11 12 14 15 18 19 20 22 25 26 29 30 n 31 # 1177 toggle c a 32 1 0 0 2 4 5 6 8 9 11 12 14 16 18 19 20 21 22 24 25 26 27 28 29 n 27 # 1178 toggle c a 32 1 1 e n 0 # 1179 toggle c a 32 1 1 e n 31 # 1180 toggle c a 32 1 1 e n 9 # 1181 toggle c a 32 1 1 f n 0 # 1182 toggle c a 32 1 1 f n 31 # 1183 toggle c a 32 1 1 f n 6 # 1184 toggle c a 32 1 1 0 2 6 11 13 14 17 19 21 24 26 30 n 0 # 1185 toggle c a 32 1 1 0 1 2 5 6 7 11 12 16 21 22 24 25 30 n 31 # 1186 toggle c a 32 1 1 1 2 4 5 9 12 13 14 15 17 19 20 22 23 27 28 n 27 # 1187 toggle c a 33 0 0 e n 0 # 1188 toggle c a 33 0 0 e n 32 # 1189 toggle c a 33 0 0 e n 26 # 1190 toggle c a 33 0 0 f n 0 # 1191 toggle c a 33 0 0 f n 32 # 1192 toggle c a 33 0 0 f n 12 # 1193 toggle c a 33 0 0 2 3 4 5 7 8 9 10 11 13 15 17 18 25 26 27 28 32 n 0 # 1194 toggle c a 33 0 0 1 6 9 11 12 15 17 18 19 23 24 26 28 30 n 32 # 1195 toggle c a 33 0 0 3 5 11 12 13 16 18 20 21 23 24 26 27 29 31 n 18 # 1196 toggle c a 33 0 1 e n 0 # 1197 toggle c a 33 0 1 e n 32 # 1198 toggle c a 33 0 1 e n 24 # 1199 toggle c a 33 0 1 f n 0 # 1200 toggle c a 33 0 1 f n 32 # 1201 toggle c a 33 0 1 f n 14 # 1202 toggle c a 33 0 1 3 9 10 12 14 15 17 18 19 22 23 26 27 28 29 30 n 0 # 1203 toggle c a 33 0 1 2 3 4 5 8 9 16 18 21 22 23 24 25 26 27 28 n 32 # 1204 toggle c a 33 0 1 0 1 3 5 6 7 9 13 15 16 17 19 20 22 23 24 25 26 30 n 9 # 1205 toggle c a 33 1 0 e n 0 # 1206 toggle c a 33 1 0 e n 32 # 1207 toggle c a 33 1 0 e n 29 # 1208 toggle c a 33 1 0 f n 0 # 1209 toggle c a 33 1 0 f n 32 # 1210 toggle c a 33 1 0 f n 13 # 1211 toggle c a 33 1 0 0 1 3 4 5 8 9 11 12 13 14 15 17 18 20 21 29 30 31 32 n 0 # 1212 toggle c a 33 1 0 1 2 8 11 14 20 21 22 23 27 30 31 n 32 # 1213 toggle c a 33 1 0 2 3 4 8 10 14 16 20 22 25 27 30 31 n 19 # 1214 toggle c a 33 1 1 e n 0 # 1215 toggle c a 33 1 1 e n 32 # 1216 toggle c a 33 1 1 e n 28 # 1217 toggle c a 33 1 1 f n 0 # 1218 toggle c a 33 1 1 f n 32 # 1219 toggle c a 33 1 1 f n 25 # 1220 toggle c a 33 1 1 0 3 6 7 9 12 14 15 16 21 22 23 24 25 26 28 30 31 32 n 0 # 1221 toggle c a 33 1 1 5 6 11 12 17 18 20 23 25 27 31 32 n 32 # 1222 toggle c a 33 1 1 0 3 6 8 9 11 13 15 16 17 18 20 23 24 28 29 30 n 16 # 1223 toggle c a 63 0 0 e n 0 # 1224 toggle c a 63 0 0 e n 62 # 1225 toggle c a 63 0 0 e n 30 # 1226 toggle c a 63 0 0 f n 0 # 1227 toggle c a 63 0 0 f n 62 # 1228 toggle c a 63 0 0 f n 12 # 1229 toggle c a 63 0 0 0 2 4 9 12 13 15 17 21 22 23 24 25 27 28 29 31 32 35 36 37 40 42 47 49 56 57 59 60 61 62 n 0 # 1230 toggle c a 63 0 0 0 2 3 5 6 7 11 12 13 15 16 17 21 22 23 24 25 26 27 28 29 32 38 39 40 42 43 45 46 48 50 52 53 55 56 60 61 62 n 62 # 1231 toggle c a 63 0 0 0 4 9 11 12 14 17 18 19 20 21 22 23 27 30 32 36 37 38 39 42 45 46 47 48 49 51 55 56 57 58 59 60 61 n 55 # 1232 toggle c a 63 0 1 e n 0 # 1233 toggle c a 63 0 1 e n 62 # 1234 toggle c a 63 0 1 e n 42 # 1235 toggle c a 63 0 1 f n 0 # 1236 toggle c a 63 0 1 f n 62 # 1237 toggle c a 63 0 1 f n 61 # 1238 toggle c a 63 0 1 1 4 5 7 9 10 12 14 18 19 27 29 32 33 34 35 36 38 42 43 44 45 49 50 51 55 56 57 58 62 n 0 # 1239 toggle c a 63 0 1 3 5 6 7 8 11 20 21 23 24 28 29 30 31 32 34 37 38 40 44 46 48 53 57 59 62 n 62 # 1240 toggle c a 63 0 1 1 2 3 5 6 8 10 11 12 14 16 17 18 21 22 24 26 27 28 30 33 35 36 37 41 50 52 54 55 56 57 58 59 61 n 1 # 1241 toggle c a 63 1 0 e n 0 # 1242 toggle c a 63 1 0 e n 62 # 1243 toggle c a 63 1 0 e n 62 # 1244 toggle c a 63 1 0 f n 0 # 1245 toggle c a 63 1 0 f n 62 # 1246 toggle c a 63 1 0 f n 17 # 1247 toggle c a 63 1 0 0 1 2 3 5 6 7 10 11 14 16 17 18 19 20 21 22 23 24 26 29 30 31 32 33 34 35 36 37 38 39 41 42 43 44 45 46 47 48 49 51 54 57 59 60 62 n 0 # 1248 toggle c a 63 1 0 2 4 5 7 8 9 10 11 12 14 15 19 20 22 24 26 27 31 36 39 42 44 47 48 50 51 52 53 55 57 58 n 62 # 1249 toggle c a 63 1 0 0 5 6 9 11 12 13 15 16 17 18 19 20 22 23 24 25 29 31 33 35 36 37 40 43 45 47 50 52 53 54 56 58 59 62 n 21 # 1250 toggle c a 63 1 1 e n 0 # 1251 toggle c a 63 1 1 e n 62 # 1252 toggle c a 63 1 1 e n 45 # 1253 toggle c a 63 1 1 f n 0 # 1254 toggle c a 63 1 1 f n 62 # 1255 toggle c a 63 1 1 f n 46 # 1256 toggle c a 63 1 1 4 6 8 10 14 15 16 18 19 20 23 26 28 30 33 34 37 40 42 44 47 48 49 51 53 54 55 57 60 n 0 # 1257 toggle c a 63 1 1 3 5 7 8 9 12 13 16 18 19 20 21 22 23 24 29 30 31 32 33 34 36 37 39 40 41 44 45 46 47 49 50 52 55 56 57 58 61 n 62 # 1258 toggle c a 63 1 1 1 3 4 7 8 9 10 12 13 16 21 23 24 26 28 29 30 33 38 41 42 44 46 47 48 49 50 51 52 54 56 57 58 60 62 n 9 # 1259 toggle c a 64 0 0 e n 0 # 1260 toggle c a 64 0 0 e n 63 # 1261 toggle c a 64 0 0 e n 19 # 1262 toggle c a 64 0 0 f n 0 # 1263 toggle c a 64 0 0 f n 63 # 1264 toggle c a 64 0 0 f n 54 # 1265 toggle c a 64 0 0 1 4 5 7 10 11 12 13 14 15 16 17 19 22 23 24 28 29 32 33 34 35 36 47 48 49 50 55 56 57 59 60 61 62 n 0 # 1266 toggle c a 64 0 0 0 1 3 4 5 10 12 15 18 19 20 22 23 24 27 38 40 41 42 43 47 48 52 55 57 59 61 62 n 63 # 1267 toggle c a 64 0 0 2 4 6 7 9 13 17 18 20 21 22 24 27 34 36 37 38 39 40 45 46 47 54 56 59 61 63 n 22 # 1268 toggle c a 64 0 1 e n 0 # 1269 toggle c a 64 0 1 e n 63 # 1270 toggle c a 64 0 1 e n 51 # 1271 toggle c a 64 0 1 f n 0 # 1272 toggle c a 64 0 1 f n 63 # 1273 toggle c a 64 0 1 f n 23 # 1274 toggle c a 64 0 1 0 3 5 7 9 10 15 16 17 18 19 24 25 26 27 28 30 31 32 36 37 40 45 48 54 57 58 61 n 0 # 1275 toggle c a 64 0 1 1 2 9 11 12 13 15 16 18 20 21 22 25 26 27 28 30 31 32 33 36 37 38 40 43 44 45 47 54 55 56 57 59 60 62 63 n 63 # 1276 toggle c a 64 0 1 1 4 6 12 13 17 24 25 26 27 29 30 32 34 36 38 40 42 43 44 46 50 52 53 54 55 56 57 58 59 61 n 3 # 1277 toggle c a 64 1 0 e n 0 # 1278 toggle c a 64 1 0 e n 63 # 1279 toggle c a 64 1 0 e n 53 # 1280 toggle c a 64 1 0 f n 0 # 1281 toggle c a 64 1 0 f n 63 # 1282 toggle c a 64 1 0 f n 8 # 1283 toggle c a 64 1 0 0 1 2 5 6 8 13 14 15 17 18 20 22 23 24 25 28 30 31 33 35 36 38 39 42 43 44 45 46 48 49 50 51 53 57 n 0 # 1284 toggle c a 64 1 0 1 3 4 6 9 12 14 15 17 21 22 23 24 27 28 29 31 32 33 34 35 36 37 41 42 45 46 48 50 53 56 57 59 60 61 62 n 63 # 1285 toggle c a 64 1 0 1 6 7 9 12 14 15 16 17 18 20 23 24 25 27 31 32 36 41 42 44 45 47 48 50 57 59 60 62 63 n 24 # 1286 toggle c a 64 1 1 e n 0 # 1287 toggle c a 64 1 1 e n 63 # 1288 toggle c a 64 1 1 e n 15 # 1289 toggle c a 64 1 1 f n 0 # 1290 toggle c a 64 1 1 f n 63 # 1291 toggle c a 64 1 1 f n 3 # 1292 toggle c a 64 1 1 0 1 2 5 6 7 8 9 10 15 16 17 21 23 24 25 26 27 28 29 31 32 35 38 39 40 41 44 45 47 48 49 50 52 55 57 58 60 63 n 0 # 1293 toggle c a 64 1 1 0 1 2 3 4 6 7 13 14 16 17 18 21 23 24 25 27 29 30 31 32 34 35 36 37 38 43 47 51 53 54 56 59 61 62 n 63 # 1294 toggle c a 64 1 1 1 2 4 5 6 8 12 13 17 22 24 25 28 34 37 38 40 43 45 46 50 51 53 56 59 60 61 63 n 25 # 1295 toggle c a 65 0 0 e n 0 # 1296 toggle c a 65 0 0 e n 64 # 1297 toggle c a 65 0 0 e n 58 # 1298 toggle c a 65 0 0 f n 0 # 1299 toggle c a 65 0 0 f n 64 # 1300 toggle c a 65 0 0 f n 52 # 1301 toggle c a 65 0 0 0 1 2 3 4 7 10 11 12 13 14 15 17 18 19 28 29 32 35 36 37 43 46 47 48 49 53 54 56 58 59 60 63 64 n 0 # 1302 toggle c a 65 0 0 0 3 4 5 6 8 9 12 16 17 18 23 24 26 30 32 34 35 37 40 41 43 44 45 47 49 51 53 54 56 60 62 63 64 n 64 # 1303 toggle c a 65 0 0 0 1 3 6 7 8 10 11 12 13 15 16 18 19 20 22 24 28 31 35 36 38 39 40 41 42 45 53 54 60 61 62 n 9 # 1304 toggle c a 65 0 1 e n 0 # 1305 toggle c a 65 0 1 e n 64 # 1306 toggle c a 65 0 1 e n 10 # 1307 toggle c a 65 0 1 f n 0 # 1308 toggle c a 65 0 1 f n 64 # 1309 toggle c a 65 0 1 f n 15 # 1310 toggle c a 65 0 1 0 1 5 6 7 8 13 15 16 19 21 27 28 30 34 35 37 38 43 44 45 46 47 49 50 51 52 53 54 58 59 60 61 n 0 # 1311 toggle c a 65 0 1 1 4 5 6 7 10 13 18 22 23 25 26 29 31 32 33 35 36 37 38 39 41 43 45 46 47 48 49 54 56 57 58 60 62 63 n 64 # 1312 toggle c a 65 0 1 2 5 6 7 11 14 16 18 23 24 26 31 32 34 37 39 41 42 43 45 48 49 53 57 59 61 n 34 # 1313 toggle c a 65 1 0 e n 0 # 1314 toggle c a 65 1 0 e n 64 # 1315 toggle c a 65 1 0 e n 64 # 1316 toggle c a 65 1 0 f n 0 # 1317 toggle c a 65 1 0 f n 64 # 1318 toggle c a 65 1 0 f n 47 # 1319 toggle c a 65 1 0 1 2 4 7 13 15 17 18 19 20 25 26 27 30 31 33 40 42 47 48 51 52 53 54 56 57 63 64 n 0 # 1320 toggle c a 65 1 0 1 3 5 6 7 10 11 12 13 14 15 18 21 25 28 33 39 40 42 43 44 46 48 53 54 55 61 62 63 n 64 # 1321 toggle c a 65 1 0 2 3 5 6 7 8 9 10 13 15 17 22 23 29 30 31 33 34 35 36 37 42 43 45 46 47 48 50 52 53 54 56 62 64 n 35 # 1322 toggle c a 65 1 1 e n 0 # 1323 toggle c a 65 1 1 e n 64 # 1324 toggle c a 65 1 1 e n 42 # 1325 toggle c a 65 1 1 f n 0 # 1326 toggle c a 65 1 1 f n 64 # 1327 toggle c a 65 1 1 f n 7 # 1328 toggle c a 65 1 1 1 3 4 5 6 8 9 10 11 13 14 16 17 19 21 22 25 26 28 30 32 35 42 43 45 46 47 48 50 53 54 55 56 57 58 60 61 62 63 n 0 # 1329 toggle c a 65 1 1 0 1 5 8 10 11 13 14 15 17 20 21 22 24 27 33 35 37 41 42 44 45 48 54 56 60 61 n 64 # 1330 toggle c a 65 1 1 0 2 3 9 11 12 14 16 18 23 24 25 26 27 35 39 41 42 46 48 49 50 51 54 56 58 60 n 7 # 1331 toggle c a 211 0 0 e n 0 # 1332 toggle c a 211 0 0 e n 210 # 1333 toggle c a 211 0 0 e n 106 # 1334 toggle c a 211 0 0 f n 0 # 1335 toggle c a 211 0 0 f n 210 # 1336 toggle c a 211 0 0 f n 152 # 1337 toggle c a 211 0 0 1 2 6 7 8 10 11 13 14 16 18 19 20 21 23 24 25 26 31 32 36 37 39 43 44 47 48 49 50 51 52 55 56 60 61 63 64 67 71 72 73 74 75 77 78 79 80 81 82 83 84 87 88 89 93 99 100 101 102 103 104 107 110 112 113 115 116 117 118 119 123 128 129 131 133 134 139 144 145 147 150 151 152 153 154 158 161 163 164 166 171 173 176 177 186 187 188 191 193 194 196 197 198 200 205 206 208 n 0 # 1338 toggle c a 211 0 0 1 2 3 4 5 6 7 8 10 11 12 13 16 21 22 23 25 26 28 30 32 33 35 36 37 38 41 43 45 48 54 56 57 58 59 60 61 62 63 64 66 69 70 75 76 77 79 81 84 86 87 88 89 90 91 92 93 94 95 96 97 100 102 108 113 114 116 117 119 120 121 122 123 124 125 127 128 129 130 131 132 133 134 136 138 139 140 143 145 148 157 158 161 162 164 165 166 167 169 170 171 173 174 175 176 178 179 180 187 190 191 193 196 198 201 203 204 207 n 210 # 1339 toggle c a 211 0 0 1 2 6 7 10 12 13 16 17 20 21 23 24 25 29 30 33 34 35 36 37 38 41 42 44 46 47 48 49 50 51 52 54 55 57 60 62 64 65 66 67 68 69 74 77 78 80 81 83 87 89 91 92 95 98 100 102 104 105 106 109 110 112 114 118 119 122 125 127 130 132 133 134 138 139 143 144 148 150 151 153 155 156 158 159 160 161 165 166 167 169 170 171 174 175 177 183 184 186 187 188 190 191 193 195 196 198 200 201 204 205 208 210 n 60 # 1340 toggle c a 211 0 1 e n 0 # 1341 toggle c a 211 0 1 e n 210 # 1342 toggle c a 211 0 1 e n 162 # 1343 toggle c a 211 0 1 f n 0 # 1344 toggle c a 211 0 1 f n 210 # 1345 toggle c a 211 0 1 f n 190 # 1346 toggle c a 211 0 1 0 1 3 14 15 16 17 18 19 20 21 22 25 26 27 30 34 35 36 38 40 42 43 46 49 55 58 60 61 62 63 65 66 68 69 71 72 74 76 77 78 79 81 83 85 86 88 90 91 93 94 98 105 106 108 115 117 122 123 124 125 129 130 134 135 138 139 140 144 147 151 152 154 155 156 157 160 162 166 167 168 169 170 171 173 175 177 178 179 182 183 185 186 188 189 190 191 194 195 196 197 199 200 202 207 210 n 0 # 1347 toggle c a 211 0 1 2 4 11 13 14 16 17 18 19 20 21 22 27 29 30 31 36 37 38 40 41 44 46 53 55 57 58 59 60 62 63 64 67 68 69 71 72 75 76 79 80 85 86 87 88 89 97 100 103 104 105 107 109 110 111 113 115 116 120 121 122 127 129 131 133 134 136 138 139 140 141 142 144 146 150 153 154 155 159 160 161 162 168 171 174 175 177 179 183 186 187 190 192 194 196 198 199 200 201 203 206 207 210 n 210 # 1348 toggle c a 211 0 1 0 1 3 6 8 9 12 13 16 22 28 29 30 31 32 34 36 37 38 39 40 41 43 44 48 50 52 53 57 64 71 74 75 76 77 79 85 87 89 91 93 97 98 99 100 101 102 109 111 113 115 117 118 119 120 122 127 128 131 135 136 141 147 149 150 151 153 157 160 161 164 166 167 168 170 172 174 176 177 179 180 182 186 187 188 189 190 191 192 195 196 199 202 204 205 206 208 n 208 # 1349 toggle c a 211 1 0 e n 0 # 1350 toggle c a 211 1 0 e n 210 # 1351 toggle c a 211 1 0 e n 0 # 1352 toggle c a 211 1 0 f n 0 # 1353 toggle c a 211 1 0 f n 210 # 1354 toggle c a 211 1 0 f n 28 # 1355 toggle c a 211 1 0 0 2 3 5 6 8 11 15 16 17 19 21 22 26 27 29 34 36 37 38 39 42 45 48 51 55 56 57 58 59 60 63 64 67 68 74 75 77 79 81 82 83 86 87 89 90 91 94 98 100 102 104 107 109 110 111 112 113 114 115 117 118 120 121 126 127 128 129 131 133 134 135 138 139 140 141 142 143 144 145 146 148 149 150 151 152 155 156 158 159 160 161 164 168 171 180 183 185 186 190 196 197 198 199 200 204 205 209 210 n 0 # 1356 toggle c a 211 1 0 3 4 6 7 8 10 11 12 21 22 24 25 26 28 29 33 35 37 38 39 41 42 43 47 48 51 53 55 56 59 62 63 66 69 72 76 77 79 82 88 89 90 93 94 97 98 102 104 107 109 110 114 115 116 118 121 122 124 125 126 129 130 131 133 137 142 143 144 145 150 151 153 158 159 162 163 168 169 170 172 173 175 176 177 183 184 188 189 191 194 195 196 197 199 200 203 209 210 n 210 # 1357 toggle c a 211 1 0 1 2 4 10 12 14 15 17 18 19 20 25 26 27 28 29 32 34 35 36 40 43 44 47 50 52 54 56 57 58 59 64 66 67 73 74 79 80 82 83 85 86 89 91 93 99 101 102 103 105 107 112 118 119 122 123 125 129 131 134 135 137 138 139 144 147 148 150 151 154 155 157 159 160 164 167 169 170 171 173 174 175 178 180 181 185 186 187 188 191 192 193 194 207 208 210 n 83 # 1358 toggle c a 211 1 1 e n 0 # 1359 toggle c a 211 1 1 e n 210 # 1360 toggle c a 211 1 1 e n 198 # 1361 toggle c a 211 1 1 f n 0 # 1362 toggle c a 211 1 1 f n 210 # 1363 toggle c a 211 1 1 f n 38 # 1364 toggle c a 211 1 1 0 3 6 7 8 9 10 11 13 15 18 19 20 22 24 25 26 27 31 32 34 35 36 37 38 39 42 43 45 47 50 52 53 54 55 57 58 59 61 62 63 66 69 70 71 73 75 76 77 78 82 85 86 87 88 89 91 92 94 96 97 99 100 102 103 106 107 111 112 113 114 116 117 118 120 124 126 132 135 137 138 139 146 147 149 153 154 155 159 160 161 167 171 172 173 175 178 179 180 185 187 189 190 192 194 195 196 198 200 205 207 208 210 n 0 # 1365 toggle c a 211 1 1 0 1 2 5 11 12 13 15 17 18 19 21 22 23 25 27 28 29 30 31 32 33 34 36 38 40 42 43 46 47 51 54 55 58 59 62 65 66 67 69 71 74 76 79 80 81 82 88 89 91 95 96 97 98 100 101 103 105 107 109 110 113 114 115 119 121 122 123 124 127 131 134 139 143 148 149 151 154 156 159 161 162 163 165 167 169 170 171 176 177 178 180 184 186 187 190 191 192 193 194 196 197 198 200 201 202 203 204 207 n 210 # 1366 toggle c a 211 1 1 1 2 4 5 7 15 16 18 20 23 25 29 32 34 35 38 39 40 46 48 49 50 51 53 54 55 56 58 59 64 67 68 69 70 73 74 75 77 81 82 83 84 85 87 88 90 92 95 96 97 98 100 102 103 105 106 107 109 111 112 114 115 116 118 119 120 123 124 125 130 132 133 136 137 140 143 144 145 146 147 149 150 151 153 154 155 156 165 168 169 171 173 174 175 176 177 178 179 182 183 185 186 188 192 193 194 196 200 201 204 205 208 209 n 117 # 1367 toggle c a 224 0 0 e n 0 # 1368 toggle c a 224 0 0 e n 223 # 1369 toggle c a 224 0 0 e n 121 # 1370 toggle c a 224 0 0 f n 0 # 1371 toggle c a 224 0 0 f n 223 # 1372 toggle c a 224 0 0 f n 81 # 1373 toggle c a 224 0 0 0 1 3 6 7 8 9 10 12 14 16 17 20 24 25 29 30 32 33 34 35 37 38 39 40 43 44 47 48 49 51 52 55 58 59 61 62 63 64 65 66 67 68 69 70 71 76 77 79 82 84 85 91 92 94 95 97 98 101 102 103 106 107 110 111 112 115 119 120 122 123 124 127 131 132 136 139 140 141 142 145 147 150 152 153 154 155 158 160 161 163 165 166 167 170 171 173 175 176 177 178 181 186 187 188 189 191 192 195 198 200 201 203 204 205 206 208 210 211 215 216 219 220 221 223 n 0 # 1374 toggle c a 224 0 0 1 2 5 6 8 13 14 17 19 20 23 24 25 27 28 29 31 32 36 38 39 40 41 44 46 48 49 51 53 54 56 58 64 65 66 67 73 74 76 77 78 79 80 82 84 85 87 88 92 93 95 96 100 101 102 104 105 106 107 109 110 112 113 115 117 118 121 122 124 129 130 132 139 140 141 142 143 144 146 149 150 151 152 156 157 158 161 165 166 169 172 175 176 178 180 181 183 185 187 191 192 193 196 197 198 199 200 201 203 206 207 208 209 211 215 217 218 219 220 221 222 223 n 223 # 1375 toggle c a 224 0 0 0 1 4 5 7 8 9 10 13 15 18 19 20 22 24 26 27 29 30 32 34 35 38 40 41 45 47 49 50 53 59 62 63 65 66 67 68 70 71 75 78 81 82 83 86 87 88 91 94 95 97 98 101 108 109 110 112 113 116 118 119 122 123 124 125 126 129 131 133 135 142 144 145 147 150 151 152 154 155 157 159 161 163 165 166 167 169 170 171 173 174 176 179 180 181 182 183 186 187 191 192 193 194 196 199 202 203 204 205 206 207 210 215 216 221 222 n 212 # 1376 toggle c a 224 0 1 e n 0 # 1377 toggle c a 224 0 1 e n 223 # 1378 toggle c a 224 0 1 e n 146 # 1379 toggle c a 224 0 1 f n 0 # 1380 toggle c a 224 0 1 f n 223 # 1381 toggle c a 224 0 1 f n 98 # 1382 toggle c a 224 0 1 0 3 4 13 14 15 16 18 19 23 24 26 31 32 34 36 38 42 43 45 46 49 50 51 52 55 58 59 60 62 64 66 67 68 69 73 75 76 77 78 79 80 81 82 83 87 92 94 96 97 100 102 105 106 108 109 111 112 113 117 118 119 122 124 125 126 129 130 133 135 136 139 145 146 147 148 149 154 155 159 162 163 166 167 168 170 172 174 177 178 182 183 184 186 188 190 192 193 195 198 200 201 202 204 205 206 208 209 214 216 217 219 220 223 n 0 # 1383 toggle c a 224 0 1 1 2 3 5 7 14 16 25 26 30 31 32 33 34 39 40 41 44 46 47 51 52 53 55 56 64 66 68 69 71 72 73 75 77 78 79 81 82 83 84 85 86 90 91 93 97 98 99 100 102 103 105 107 108 115 123 132 137 140 141 144 145 148 149 150 152 153 157 158 159 165 166 167 170 172 174 175 177 180 181 182 183 184 186 189 191 192 193 196 202 204 207 209 212 213 214 215 217 220 221 223 n 223 # 1384 toggle c a 224 0 1 0 4 6 8 10 12 16 17 18 19 20 21 23 24 25 29 34 35 36 39 40 41 43 45 50 52 55 57 59 62 63 64 65 66 67 69 70 72 73 76 77 80 83 84 85 86 89 90 91 93 94 96 99 106 107 112 113 115 117 118 119 120 121 122 124 125 126 127 130 131 132 133 135 137 138 139 142 143 144 146 149 152 154 155 157 163 166 167 169 171 174 176 178 179 183 184 185 186 187 188 191 193 194 195 197 199 200 201 208 211 214 217 220 221 n 223 # 1385 toggle c a 224 1 0 e n 0 # 1386 toggle c a 224 1 0 e n 223 # 1387 toggle c a 224 1 0 e n 37 # 1388 toggle c a 224 1 0 f n 0 # 1389 toggle c a 224 1 0 f n 223 # 1390 toggle c a 224 1 0 f n 57 # 1391 toggle c a 224 1 0 0 2 5 6 10 12 14 15 16 18 19 20 21 23 24 25 32 34 35 36 37 40 42 43 44 46 48 49 52 53 56 57 58 63 66 68 70 71 72 74 75 76 77 79 80 81 83 85 89 91 93 94 95 97 101 106 112 114 118 119 128 130 133 135 140 141 142 143 145 148 149 153 154 156 157 158 159 161 163 164 165 166 167 171 174 176 177 178 179 180 184 185 186 187 188 189 190 196 200 201 204 205 206 207 208 209 210 211 212 215 217 218 220 221 222 n 0 # 1392 toggle c a 224 1 0 4 5 7 9 10 12 13 15 18 20 21 23 24 27 29 30 31 34 35 38 39 41 43 45 46 47 51 53 54 59 62 64 65 67 70 72 73 76 79 80 81 82 84 85 86 89 94 95 96 98 100 101 102 103 104 109 112 115 119 121 124 127 128 133 135 139 141 142 143 146 147 148 149 150 151 152 153 155 157 158 159 161 163 164 165 166 170 173 175 178 183 185 186 187 188 190 194 196 197 198 200 201 202 204 206 209 211 213 214 215 220 n 223 # 1393 toggle c a 224 1 0 2 5 6 12 17 18 20 21 25 28 29 30 33 34 35 37 38 39 43 44 45 48 50 52 53 54 56 59 63 64 68 72 73 75 80 81 82 83 84 86 87 88 91 92 93 94 95 96 99 100 101 103 106 107 108 109 111 112 113 115 118 120 123 124 125 127 129 130 131 134 135 136 138 139 145 147 150 157 163 164 166 168 169 173 174 176 182 183 185 187 188 189 193 196 198 199 201 202 204 205 206 208 210 215 217 218 220 221 n 60 # 1394 toggle c a 224 1 1 e n 0 # 1395 toggle c a 224 1 1 e n 223 # 1396 toggle c a 224 1 1 e n 154 # 1397 toggle c a 224 1 1 f n 0 # 1398 toggle c a 224 1 1 f n 223 # 1399 toggle c a 224 1 1 f n 14 # 1400 toggle c a 224 1 1 0 1 7 10 11 13 15 17 23 27 28 29 31 32 33 37 38 39 40 41 44 45 46 48 50 53 55 61 62 64 66 68 69 71 73 76 79 83 86 88 90 93 94 96 97 98 99 101 102 103 104 109 111 112 114 116 117 118 119 120 131 134 135 137 139 140 141 142 143 145 146 148 149 151 153 154 158 160 161 163 165 166 167 168 170 171 173 176 178 181 184 186 187 188 189 192 193 195 196 198 199 200 205 206 207 211 213 216 219 220 221 223 n 0 # 1401 toggle c a 224 1 1 1 2 6 8 15 16 17 18 21 25 30 31 33 38 40 45 49 51 52 53 56 57 66 68 69 70 72 74 76 77 78 80 83 85 87 88 89 91 96 98 99 101 104 105 106 107 108 111 112 113 114 115 116 118 119 120 122 124 126 127 128 129 131 133 136 137 139 141 142 144 145 147 148 150 151 156 157 158 160 165 166 167 168 170 177 180 181 186 189 190 196 199 202 203 204 206 207 214 215 216 218 221 222 n 223 # 1402 toggle c a 224 1 1 0 2 3 6 7 8 9 10 13 16 17 18 22 24 25 26 28 30 31 32 33 34 39 41 44 45 46 47 48 49 50 51 53 56 57 59 64 68 69 71 72 73 76 85 86 88 90 96 97 98 100 101 104 105 106 110 111 115 117 118 119 121 123 125 128 129 130 132 134 135 137 139 143 144 145 147 148 150 151 154 155 156 157 159 160 161 163 166 169 173 175 177 178 181 183 185 186 188 189 190 191 192 194 197 198 199 200 201 203 204 206 209 212 213 216 217 219 220 222 223 n 120 # 1403 toggle c a 247 0 0 e n 0 # 1404 toggle c a 247 0 0 e n 246 # 1405 toggle c a 247 0 0 e n 11 # 1406 toggle c a 247 0 0 f n 0 # 1407 toggle c a 247 0 0 f n 246 # 1408 toggle c a 247 0 0 f n 73 # 1409 toggle c a 247 0 0 2 3 5 8 9 11 12 18 20 21 22 23 24 27 30 32 33 35 36 37 39 42 44 46 47 49 56 57 58 60 61 62 63 64 66 67 68 69 70 74 76 77 80 81 82 85 88 91 102 103 104 105 106 108 110 111 112 114 120 121 122 126 127 128 131 132 134 137 138 140 141 142 143 145 147 149 150 152 153 154 155 157 158 161 165 166 168 169 170 171 173 174 175 176 177 180 182 185 187 188 198 200 201 202 205 208 209 214 215 216 218 219 220 221 222 223 227 228 231 235 236 238 239 244 n 0 # 1410 toggle c a 247 0 0 0 1 2 5 9 10 12 14 16 17 18 20 23 25 26 27 28 32 34 38 39 41 45 46 48 50 51 52 54 57 59 60 63 64 67 68 70 73 74 75 76 79 80 81 82 83 85 86 92 93 97 102 103 105 106 114 116 117 118 122 123 127 129 131 134 137 138 141 142 145 146 148 149 150 151 153 154 155 158 159 162 163 164 165 168 169 170 171 172 179 182 183 184 185 186 189 190 191 193 194 197 198 200 203 204 205 209 211 212 214 215 217 219 220 222 224 226 230 232 233 235 236 237 239 242 244 n 246 # 1411 toggle c a 247 0 0 0 2 3 4 5 8 9 10 15 20 22 23 24 26 28 30 31 34 38 41 42 43 46 47 53 63 64 65 70 72 73 76 77 78 82 83 86 88 90 92 93 96 97 98 100 102 103 105 108 110 113 114 115 117 119 121 124 126 127 132 133 136 139 140 144 146 151 154 156 157 165 169 171 173 176 181 182 183 185 186 188 191 192 193 196 197 198 199 200 202 203 204 207 209 211 214 215 217 218 219 220 222 223 226 228 229 231 232 234 235 237 238 239 240 242 245 246 n 140 # 1412 toggle c a 247 0 1 e n 0 # 1413 toggle c a 247 0 1 e n 246 # 1414 toggle c a 247 0 1 e n 200 # 1415 toggle c a 247 0 1 f n 0 # 1416 toggle c a 247 0 1 f n 246 # 1417 toggle c a 247 0 1 f n 27 # 1418 toggle c a 247 0 1 0 3 5 6 9 10 12 13 14 16 19 25 26 32 33 34 36 37 40 42 43 48 49 51 52 53 58 59 60 63 66 70 72 74 76 78 79 80 82 83 85 87 90 91 92 93 94 97 98 101 102 105 106 108 109 110 111 113 114 116 119 120 121 122 123 124 125 130 131 134 137 138 141 143 148 151 154 156 158 160 163 164 168 172 173 176 178 179 180 181 186 189 190 193 197 200 201 202 203 204 205 207 213 214 217 218 219 220 222 223 227 228 229 230 231 232 233 234 236 240 241 242 243 244 245 n 0 # 1419 toggle c a 247 0 1 0 1 3 5 6 9 10 11 12 14 15 17 18 19 22 23 25 30 32 33 36 37 38 39 40 41 42 43 45 46 48 49 54 55 56 58 60 61 62 63 64 72 78 81 83 88 90 91 93 95 96 97 100 101 103 105 107 108 109 112 113 114 120 122 124 127 129 132 133 142 145 146 150 153 157 161 162 165 167 169 171 176 178 181 183 185 187 188 189 192 193 196 197 200 201 203 204 205 207 211 213 214 215 216 221 222 223 224 227 231 233 234 236 239 240 242 246 n 246 # 1420 toggle c a 247 0 1 0 1 4 7 8 11 12 13 14 15 16 17 18 25 29 33 34 37 41 42 45 46 48 49 50 52 54 57 58 60 62 66 70 71 72 73 76 78 80 81 82 83 84 89 90 96 98 101 105 106 108 109 110 111 112 114 115 116 118 121 122 126 129 130 131 132 136 139 142 144 145 146 147 149 152 153 154 155 157 159 160 161 162 163 166 168 172 182 185 187 188 191 194 195 197 198 203 205 207 209 211 215 220 221 225 227 228 230 231 234 235 238 239 241 242 n 217 # 1421 toggle c a 247 1 0 e n 0 # 1422 toggle c a 247 1 0 e n 246 # 1423 toggle c a 247 1 0 e n 114 # 1424 toggle c a 247 1 0 f n 0 # 1425 toggle c a 247 1 0 f n 246 # 1426 toggle c a 247 1 0 f n 160 # 1427 toggle c a 247 1 0 0 1 2 3 5 6 8 9 10 11 12 15 17 19 20 22 23 24 26 28 29 30 33 35 36 41 43 46 49 51 54 56 57 58 61 62 63 66 68 69 70 72 73 77 78 79 80 82 84 86 89 90 91 93 94 95 101 102 104 105 106 108 111 112 113 118 119 121 123 124 126 128 129 130 132 133 134 135 136 139 140 141 142 143 144 148 150 151 154 156 158 161 162 168 169 170 171 172 173 174 176 177 178 179 181 182 186 187 188 194 195 196 198 199 201 202 204 206 207 211 216 217 219 221 223 227 228 230 236 238 240 243 244 n 0 # 1428 toggle c a 247 1 0 2 4 5 7 9 13 14 15 23 25 28 29 30 33 36 37 38 39 40 44 46 48 50 52 55 59 61 64 65 66 68 69 72 73 74 75 76 77 79 80 81 82 83 86 88 89 91 92 93 95 100 101 102 103 106 114 117 118 120 123 125 127 128 129 130 131 133 134 135 137 141 142 144 145 146 149 150 153 154 155 156 159 162 163 165 166 168 170 171 172 173 175 179 183 186 187 188 190 191 192 194 195 199 200 202 203 206 207 208 210 213 215 218 219 222 224 225 229 231 234 236 239 240 241 244 245 246 n 246 # 1429 toggle c a 247 1 0 1 2 7 9 10 13 14 16 17 18 20 22 25 26 28 31 35 38 39 41 43 45 46 48 49 50 51 53 55 57 61 63 64 66 68 69 75 83 87 89 90 91 94 96 97 98 99 100 104 108 109 110 111 113 114 119 120 122 125 126 128 129 130 131 134 135 136 140 141 144 146 149 154 155 157 158 160 161 167 173 174 178 179 183 184 190 195 197 198 199 203 208 212 214 215 216 219 220 225 227 229 230 231 236 237 238 240 242 243 244 245 n 92 # 1430 toggle c a 247 1 1 e n 0 # 1431 toggle c a 247 1 1 e n 246 # 1432 toggle c a 247 1 1 e n 147 # 1433 toggle c a 247 1 1 f n 0 # 1434 toggle c a 247 1 1 f n 246 # 1435 toggle c a 247 1 1 f n 166 # 1436 toggle c a 247 1 1 2 3 4 7 9 10 12 14 16 17 18 19 21 22 23 24 25 26 29 30 31 33 35 37 38 39 40 41 43 46 47 49 50 52 53 55 58 59 61 64 65 68 71 73 74 75 77 78 79 80 83 85 87 88 93 94 96 98 99 100 102 105 106 107 109 110 113 114 116 119 120 121 122 124 125 126 127 128 129 130 131 133 134 135 137 138 139 140 141 143 144 148 149 151 156 158 159 161 162 163 165 166 167 168 169 170 177 178 180 181 182 191 193 195 196 198 200 201 202 204 206 210 213 215 216 217 218 223 225 227 228 231 232 235 236 240 242 244 246 n 0 # 1437 toggle c a 247 1 1 0 2 4 6 10 14 18 22 23 24 25 26 28 29 31 35 39 40 44 46 47 48 49 52 53 55 56 59 62 64 68 69 73 74 82 91 92 95 96 97 98 99 100 104 105 109 111 114 115 119 120 121 122 123 125 128 130 132 134 135 138 139 140 144 146 148 152 153 156 157 159 163 164 165 166 167 169 170 175 176 180 182 183 186 188 192 195 197 198 199 200 202 203 204 206 208 210 211 212 213 218 220 221 223 225 226 227 228 230 232 233 235 240 242 246 n 246 # 1438 toggle c a 247 1 1 1 3 4 7 8 9 10 11 12 14 18 19 20 23 24 26 28 33 34 43 45 47 49 50 53 58 60 61 64 66 67 68 71 74 75 78 79 86 87 88 93 94 99 100 102 104 105 109 113 114 115 117 118 119 123 124 126 128 132 134 135 137 140 141 142 145 147 148 150 151 152 154 155 157 158 160 162 163 167 169 174 175 178 179 180 182 183 184 185 192 196 197 198 202 203 205 206 207 209 210 213 214 215 219 220 221 223 224 225 226 227 229 230 231 233 234 235 237 239 240 242 243 244 245 246 n 230 # 1439 toggle c a 0 0 0 e # 1440 is_empty c a 0 0 0 e # 1441 is_empty c a 0 0 0 # 1442 is_empty c a 0 0 1 e # 1443 is_empty c a 0 0 1 e # 1444 is_empty c a 0 0 1 # 1445 is_empty c a 0 1 0 e # 1446 is_empty c a 0 1 0 e # 1447 is_empty c a 0 1 0 # 1448 is_empty c a 0 1 1 e # 1449 is_empty c a 0 1 1 e # 1450 is_empty c a 0 1 1 # 1451 is_empty c a 1 0 0 e # 1452 is_empty c a 1 0 0 f # 1453 is_empty c a 1 0 0 # 1454 is_empty c a 1 0 1 e # 1455 is_empty c a 1 0 1 f # 1456 is_empty c a 1 0 1 # 1457 is_empty c a 1 1 0 e # 1458 is_empty c a 1 1 0 f # 1459 is_empty c a 1 1 0 # 1460 is_empty c a 1 1 1 e # 1461 is_empty c a 1 1 1 f # 1462 is_empty c a 1 1 1 # 1463 is_empty c a 31 0 0 e # 1464 is_empty c a 31 0 0 f # 1465 is_empty c a 31 0 0 0 1 3 4 6 9 15 17 18 19 20 21 22 23 24 25 29 30 # 1466 is_empty c a 31 0 1 e # 1467 is_empty c a 31 0 1 f # 1468 is_empty c a 31 0 1 1 2 4 6 7 9 11 16 17 18 19 20 21 22 23 25 27 28 # 1469 is_empty c a 31 1 0 e # 1470 is_empty c a 31 1 0 f # 1471 is_empty c a 31 1 0 5 13 15 16 18 24 25 26 27 28 # 1472 is_empty c a 31 1 1 e # 1473 is_empty c a 31 1 1 f # 1474 is_empty c a 31 1 1 1 2 3 8 10 11 12 13 15 16 17 21 23 24 26 27 30 # 1475 is_empty c a 32 0 0 e # 1476 is_empty c a 32 0 0 f # 1477 is_empty c a 32 0 0 0 2 4 6 8 11 15 16 20 22 23 26 28 # 1478 is_empty c a 32 0 1 e # 1479 is_empty c a 32 0 1 f # 1480 is_empty c a 32 0 1 0 1 2 3 5 6 8 13 17 18 23 24 26 28 30 31 # 1481 is_empty c a 32 1 0 e # 1482 is_empty c a 32 1 0 f # 1483 is_empty c a 32 1 0 1 4 6 7 8 9 10 12 14 15 16 20 22 23 24 25 # 1484 is_empty c a 32 1 1 e # 1485 is_empty c a 32 1 1 f # 1486 is_empty c a 32 1 1 1 2 3 5 6 7 8 9 12 13 15 17 23 28 29 30 31 # 1487 is_empty c a 33 0 0 e # 1488 is_empty c a 33 0 0 f # 1489 is_empty c a 33 0 0 1 2 3 4 5 6 9 10 12 17 18 20 24 25 26 28 29 32 # 1490 is_empty c a 33 0 1 e # 1491 is_empty c a 33 0 1 f # 1492 is_empty c a 33 0 1 1 4 5 6 7 8 10 12 14 20 21 23 25 29 30 31 32 # 1493 is_empty c a 33 1 0 e # 1494 is_empty c a 33 1 0 f # 1495 is_empty c a 33 1 0 1 4 7 8 9 10 12 15 16 17 18 22 23 24 27 29 31 32 # 1496 is_empty c a 33 1 1 e # 1497 is_empty c a 33 1 1 f # 1498 is_empty c a 33 1 1 0 2 4 5 7 11 12 15 17 19 20 22 28 31 # 1499 is_empty c a 63 0 0 e # 1500 is_empty c a 63 0 0 f # 1501 is_empty c a 63 0 0 3 5 7 10 11 12 13 15 17 18 20 21 22 27 28 35 37 38 39 40 41 42 43 44 50 51 53 55 60 61 # 1502 is_empty c a 63 0 1 e # 1503 is_empty c a 63 0 1 f # 1504 is_empty c a 63 0 1 2 4 7 10 13 14 17 21 23 25 28 30 31 33 38 39 40 41 42 43 44 45 47 48 49 51 52 53 54 55 56 60 # 1505 is_empty c a 63 1 0 e # 1506 is_empty c a 63 1 0 f # 1507 is_empty c a 63 1 0 2 8 11 12 13 15 16 19 20 21 22 23 24 28 29 30 34 35 36 38 39 42 47 49 50 52 56 57 58 59 60 62 # 1508 is_empty c a 63 1 1 e # 1509 is_empty c a 63 1 1 f # 1510 is_empty c a 63 1 1 1 2 3 4 5 6 11 16 20 21 22 25 28 29 32 33 36 38 43 44 45 47 49 54 55 57 60 # 1511 is_empty c a 64 0 0 e # 1512 is_empty c a 64 0 0 f # 1513 is_empty c a 64 0 0 2 3 5 6 7 12 14 15 16 17 18 19 22 25 27 29 31 33 34 35 36 37 38 42 44 45 46 47 48 49 50 51 55 57 59 60 61 62 # 1514 is_empty c a 64 0 1 e # 1515 is_empty c a 64 0 1 f # 1516 is_empty c a 64 0 1 0 1 3 4 7 8 11 15 18 20 23 24 25 26 27 30 34 35 38 42 43 46 47 48 49 52 55 58 59 60 61 62 63 # 1517 is_empty c a 64 1 0 e # 1518 is_empty c a 64 1 0 f # 1519 is_empty c a 64 1 0 0 1 2 5 6 7 9 11 15 16 17 19 21 22 25 27 30 33 34 36 37 41 42 43 44 46 47 50 53 54 56 62 63 # 1520 is_empty c a 64 1 1 e # 1521 is_empty c a 64 1 1 f # 1522 is_empty c a 64 1 1 1 6 7 9 10 16 18 19 21 23 25 27 29 31 32 33 40 41 42 45 46 49 52 53 55 56 57 58 60 # 1523 is_empty c a 65 0 0 e # 1524 is_empty c a 65 0 0 f # 1525 is_empty c a 65 0 0 0 1 2 4 5 6 7 8 13 14 15 16 17 20 21 26 29 30 32 34 35 38 40 41 42 44 45 47 48 53 54 55 56 57 58 60 61 62 # 1526 is_empty c a 65 0 1 e # 1527 is_empty c a 65 0 1 f # 1528 is_empty c a 65 0 1 0 2 4 7 9 10 11 12 13 14 16 18 19 22 23 26 31 39 42 46 48 50 51 52 53 54 56 57 58 60 # 1529 is_empty c a 65 1 0 e # 1530 is_empty c a 65 1 0 f # 1531 is_empty c a 65 1 0 1 2 3 5 7 11 14 15 17 18 20 24 28 29 30 32 33 39 40 41 42 45 46 47 49 50 52 54 55 56 61 62 64 # 1532 is_empty c a 65 1 1 e # 1533 is_empty c a 65 1 1 f # 1534 is_empty c a 65 1 1 0 1 7 9 11 12 13 16 17 22 23 24 26 27 32 33 34 36 40 43 45 49 50 51 53 54 55 57 58 60 62 63 64 # 1535 is_empty c a 211 0 0 e # 1536 is_empty c a 211 0 0 f # 1537 is_empty c a 211 0 0 2 3 6 7 12 13 14 16 17 18 21 22 27 28 30 33 35 36 37 38 42 46 50 51 54 55 56 59 63 64 66 67 69 71 75 76 77 79 81 82 83 85 88 89 90 96 101 103 104 106 107 110 111 114 115 118 121 122 126 127 128 129 132 135 136 143 144 147 151 153 155 157 158 159 160 161 163 168 169 170 174 175 176 178 180 182 189 192 193 194 198 199 201 203 206 208 209 # 1538 is_empty c a 211 0 1 e # 1539 is_empty c a 211 0 1 f # 1540 is_empty c a 211 0 1 0 1 5 7 8 13 15 17 18 21 23 25 26 27 33 35 37 41 42 43 44 45 46 47 48 49 51 52 53 54 57 59 63 65 67 68 69 72 73 76 79 81 82 85 86 87 89 90 91 95 96 97 99 100 101 102 103 104 107 109 111 114 115 116 117 118 120 121 125 126 128 130 131 133 135 137 138 139 143 146 149 150 151 152 156 159 160 163 165 166 167 168 169 172 173 178 179 181 182 185 189 190 191 194 195 197 198 200 203 205 207 208 # 1541 is_empty c a 211 1 0 e # 1542 is_empty c a 211 1 0 f # 1543 is_empty c a 211 1 0 6 7 9 10 16 19 23 24 30 32 34 37 38 39 40 41 44 45 46 47 50 51 52 54 57 58 59 61 67 70 74 77 78 79 80 81 83 84 91 94 96 99 100 101 105 108 111 113 116 117 118 120 121 122 125 126 129 132 134 138 140 141 142 143 144 147 149 150 152 153 156 158 161 162 165 167 168 171 174 175 176 177 178 179 180 181 183 184 185 187 188 195 196 197 198 199 201 202 207 210 # 1544 is_empty c a 211 1 1 e # 1545 is_empty c a 211 1 1 f # 1546 is_empty c a 211 1 1 1 4 5 6 8 10 13 14 16 17 18 19 20 21 22 26 28 34 35 37 40 42 46 49 52 53 54 55 57 59 60 64 65 68 69 70 71 72 73 77 80 81 82 84 87 89 90 97 98 99 101 102 105 106 107 108 111 112 113 115 117 118 119 121 122 123 124 126 129 131 133 135 136 137 138 139 141 142 144 145 146 148 149 154 156 157 158 159 160 161 162 164 165 167 168 169 170 172 173 175 176 181 182 183 184 185 187 188 189 190 192 194 195 197 198 200 201 202 203 204 206 208 210 # 1547 is_empty c a 224 0 0 e # 1548 is_empty c a 224 0 0 f # 1549 is_empty c a 224 0 0 0 2 3 6 7 9 10 11 12 15 16 18 21 22 24 28 29 31 33 34 37 39 40 43 45 46 49 51 52 56 57 58 59 60 61 62 64 66 71 73 74 75 76 81 83 85 87 88 90 91 94 96 97 98 100 101 104 105 109 110 111 113 114 115 116 118 123 124 126 127 128 129 131 132 137 138 139 140 141 142 144 146 148 149 150 154 157 160 164 165 166 168 169 171 172 174 176 177 178 180 181 182 183 185 187 188 192 193 194 195 196 197 199 200 201 203 207 216 219 220 223 # 1550 is_empty c a 224 0 1 e # 1551 is_empty c a 224 0 1 f # 1552 is_empty c a 224 0 1 2 3 6 10 11 12 14 19 21 28 32 35 36 37 42 43 45 47 48 49 50 53 54 55 58 60 62 65 68 69 72 82 83 85 87 88 91 92 93 96 97 99 101 106 107 108 110 112 113 114 115 118 120 121 123 124 126 127 130 131 135 136 138 139 140 141 142 145 147 153 160 168 169 170 172 173 174 176 180 181 182 183 187 192 196 197 199 200 206 208 209 210 212 213 217 218 219 222 223 # 1553 is_empty c a 224 1 0 e # 1554 is_empty c a 224 1 0 f # 1555 is_empty c a 224 1 0 0 3 5 7 9 11 12 15 19 21 27 30 32 33 34 35 36 38 39 42 44 45 46 47 50 52 54 59 61 64 67 68 70 71 72 79 84 86 91 96 98 100 101 105 106 107 108 112 113 114 115 116 117 118 124 125 126 129 130 131 135 140 141 142 143 144 145 146 147 148 149 151 152 153 155 159 160 162 164 167 168 169 171 172 173 174 176 185 186 187 194 197 200 202 205 206 210 212 214 215 217 218 220 222 # 1556 is_empty c a 224 1 1 e # 1557 is_empty c a 224 1 1 f # 1558 is_empty c a 224 1 1 2 3 5 10 11 12 13 16 17 18 19 22 26 28 29 30 35 38 39 40 41 42 43 46 49 53 54 57 58 60 63 64 65 66 69 71 74 75 76 77 79 81 83 84 89 93 96 97 98 99 100 102 104 105 107 109 110 111 114 116 117 120 121 124 125 126 127 128 129 130 133 134 137 139 140 141 142 145 147 148 149 151 152 153 155 158 162 163 167 170 173 175 177 178 180 181 182 183 184 186 189 191 196 197 201 203 204 205 208 211 214 215 216 217 220 221 222 223 # 1559 is_empty c a 247 0 0 e # 1560 is_empty c a 247 0 0 f # 1561 is_empty c a 247 0 0 0 3 5 6 8 13 14 16 20 26 29 33 34 37 38 42 43 44 47 48 49 54 55 56 57 63 67 70 71 73 74 79 81 83 86 91 92 93 95 97 98 99 100 101 102 105 106 107 110 111 114 116 117 118 119 122 123 126 127 128 129 130 131 133 135 136 138 140 144 146 152 155 158 163 165 166 167 172 174 175 176 179 180 181 183 184 185 186 190 191 192 199 200 203 204 207 208 209 210 211 218 219 220 221 223 225 226 227 230 231 232 234 235 236 240 245 246 # 1562 is_empty c a 247 0 1 e # 1563 is_empty c a 247 0 1 f # 1564 is_empty c a 247 0 1 0 1 2 4 5 6 9 13 17 18 20 22 25 27 30 33 34 35 36 37 40 41 42 43 44 51 55 57 59 60 62 64 65 67 69 70 72 73 76 78 80 86 87 92 95 97 99 102 106 108 112 113 114 117 118 122 123 124 126 128 130 132 133 134 135 139 140 141 143 146 147 148 149 153 157 158 161 162 163 164 166 167 168 170 171 172 174 176 177 179 180 182 186 187 190 193 195 198 200 201 203 205 208 210 212 213 214 220 222 224 228 231 233 235 236 237 238 241 242 244 245 246 # 1565 is_empty c a 247 1 0 e # 1566 is_empty c a 247 1 0 f # 1567 is_empty c a 247 1 0 2 3 6 10 13 14 15 17 19 22 23 25 26 27 28 29 32 34 36 37 38 39 40 47 49 50 51 52 53 54 56 57 59 61 62 65 66 67 68 70 71 72 74 76 80 81 82 83 84 85 89 91 95 98 99 100 101 102 103 105 108 111 114 118 119 121 122 123 132 134 136 139 140 141 142 145 147 151 157 158 159 164 167 169 170 172 173 176 177 181 182 184 186 189 191 193 194 196 198 201 202 206 212 214 215 216 217 220 221 224 226 227 228 229 233 234 235 237 240 241 242 243 245 246 # 1568 is_empty c a 247 1 1 e # 1569 is_empty c a 247 1 1 f # 1570 is_empty c a 247 1 1 1 3 4 6 11 12 13 18 21 22 23 24 26 27 28 29 30 31 32 34 35 36 37 39 40 41 42 43 44 50 51 52 54 55 56 57 59 60 62 63 66 75 79 80 81 82 83 85 88 89 91 93 94 95 97 98 99 102 103 106 107 108 109 110 112 113 116 117 118 119 120 122 123 125 126 127 128 129 132 136 137 140 142 143 148 151 152 154 155 158 162 164 166 170 172 173 177 178 182 183 184 185 186 189 190 192 193 194 195 196 200 205 206 210 211 212 213 214 217 218 219 225 232 233 234 235 236 240 242 243 244 245 # 1571 is_empty c a 0 0 0 e # 1572 is_full c a 0 0 0 e # 1573 is_full c a 0 0 0 # 1574 is_full c a 0 0 1 e # 1575 is_full c a 0 0 1 e # 1576 is_full c a 0 0 1 # 1577 is_full c a 0 1 0 e # 1578 is_full c a 0 1 0 e # 1579 is_full c a 0 1 0 # 1580 is_full c a 0 1 1 e # 1581 is_full c a 0 1 1 e # 1582 is_full c a 0 1 1 # 1583 is_full c a 1 0 0 e # 1584 is_full c a 1 0 0 f # 1585 is_full c a 1 0 0 # 1586 is_full c a 1 0 1 e # 1587 is_full c a 1 0 1 f # 1588 is_full c a 1 0 1 # 1589 is_full c a 1 1 0 e # 1590 is_full c a 1 1 0 f # 1591 is_full c a 1 1 0 0 # 1592 is_full c a 1 1 1 e # 1593 is_full c a 1 1 1 f # 1594 is_full c a 1 1 1 # 1595 is_full c a 31 0 0 e # 1596 is_full c a 31 0 0 f # 1597 is_full c a 31 0 0 0 4 6 7 8 12 14 15 21 24 28 # 1598 is_full c a 31 0 1 e # 1599 is_full c a 31 0 1 f # 1600 is_full c a 31 0 1 0 1 2 4 6 7 11 13 14 16 18 20 22 23 28 29 30 # 1601 is_full c a 31 1 0 e # 1602 is_full c a 31 1 0 f # 1603 is_full c a 31 1 0 0 1 2 3 4 6 8 10 11 15 17 19 21 22 26 27 29 30 # 1604 is_full c a 31 1 1 e # 1605 is_full c a 31 1 1 f # 1606 is_full c a 31 1 1 0 1 2 3 4 6 10 11 12 16 18 19 20 21 22 27 30 # 1607 is_full c a 32 0 0 e # 1608 is_full c a 32 0 0 f # 1609 is_full c a 32 0 0 4 5 8 9 11 13 15 16 17 18 19 21 22 23 25 26 30 31 # 1610 is_full c a 32 0 1 e # 1611 is_full c a 32 0 1 f # 1612 is_full c a 32 0 1 5 6 8 9 12 13 19 21 22 24 25 26 28 29 # 1613 is_full c a 32 1 0 e # 1614 is_full c a 32 1 0 f # 1615 is_full c a 32 1 0 1 2 4 5 6 7 8 9 10 12 14 19 21 24 25 26 27 28 31 # 1616 is_full c a 32 1 1 e # 1617 is_full c a 32 1 1 f # 1618 is_full c a 32 1 1 4 6 7 9 11 15 19 21 22 24 25 26 28 # 1619 is_full c a 33 0 0 e # 1620 is_full c a 33 0 0 f # 1621 is_full c a 33 0 0 1 11 12 13 17 18 19 20 21 22 24 25 26 27 30 31 # 1622 is_full c a 33 0 1 e # 1623 is_full c a 33 0 1 f # 1624 is_full c a 33 0 1 2 3 7 8 10 12 13 14 15 16 19 21 22 24 26 30 31 32 # 1625 is_full c a 33 1 0 e # 1626 is_full c a 33 1 0 f # 1627 is_full c a 33 1 0 0 1 3 6 7 8 11 12 14 16 17 18 19 20 22 26 27 29 31 32 # 1628 is_full c a 33 1 1 e # 1629 is_full c a 33 1 1 f # 1630 is_full c a 33 1 1 0 1 3 4 5 6 7 9 10 11 12 15 18 19 20 21 24 25 # 1631 is_full c a 63 0 0 e # 1632 is_full c a 63 0 0 f # 1633 is_full c a 63 0 0 6 9 11 16 19 21 22 26 27 31 35 36 38 39 42 45 46 51 59 62 # 1634 is_full c a 63 0 1 e # 1635 is_full c a 63 0 1 f # 1636 is_full c a 63 0 1 0 1 3 4 5 6 7 9 11 14 15 16 21 22 23 25 29 32 33 36 37 39 40 41 42 47 48 49 52 55 59 # 1637 is_full c a 63 1 0 e # 1638 is_full c a 63 1 0 f # 1639 is_full c a 63 1 0 0 4 6 7 10 11 12 15 16 24 25 29 30 34 36 40 41 43 45 49 53 54 55 56 # 1640 is_full c a 63 1 1 e # 1641 is_full c a 63 1 1 f # 1642 is_full c a 63 1 1 3 5 6 8 9 10 14 16 17 18 20 21 22 23 24 29 30 31 33 34 36 37 38 40 41 42 43 45 47 48 51 54 58 59 60 62 # 1643 is_full c a 64 0 0 e # 1644 is_full c a 64 0 0 f # 1645 is_full c a 64 0 0 2 3 6 7 10 12 13 14 15 18 20 22 24 26 27 30 32 36 37 38 41 46 47 49 55 58 59 60 63 # 1646 is_full c a 64 0 1 e # 1647 is_full c a 64 0 1 f # 1648 is_full c a 64 0 1 0 3 7 8 9 12 17 18 20 24 27 28 30 31 32 33 34 37 40 41 42 43 44 48 49 50 51 55 57 58 62 # 1649 is_full c a 64 1 0 e # 1650 is_full c a 64 1 0 f # 1651 is_full c a 64 1 0 1 2 3 4 6 8 9 11 12 15 17 18 19 22 23 26 28 29 30 32 36 38 39 40 42 43 44 45 46 48 49 50 53 54 55 57 60 61 62 63 # 1652 is_full c a 64 1 1 e # 1653 is_full c a 64 1 1 f # 1654 is_full c a 64 1 1 1 6 9 12 15 18 19 21 24 25 26 27 28 30 33 35 38 39 42 43 46 47 48 49 52 53 54 55 56 58 60 62 # 1655 is_full c a 65 0 0 e # 1656 is_full c a 65 0 0 f # 1657 is_full c a 65 0 0 3 4 7 10 11 12 13 14 15 21 22 23 25 30 31 37 39 42 44 45 48 49 50 52 53 57 58 59 60 61 64 # 1658 is_full c a 65 0 1 e # 1659 is_full c a 65 0 1 f # 1660 is_full c a 65 0 1 0 1 3 4 9 13 18 20 22 24 27 28 29 30 31 32 34 35 36 38 43 44 45 50 51 56 57 59 60 61 62 63 # 1661 is_full c a 65 1 0 e # 1662 is_full c a 65 1 0 f # 1663 is_full c a 65 1 0 0 2 6 7 8 9 10 14 16 17 18 24 27 29 30 33 34 35 37 38 39 40 44 46 47 48 49 53 55 57 58 59 60 61 64 # 1664 is_full c a 65 1 1 e # 1665 is_full c a 65 1 1 f # 1666 is_full c a 65 1 1 2 4 5 11 13 14 15 17 19 24 25 26 27 34 37 38 39 42 43 46 49 51 53 56 58 59 63 64 # 1667 is_full c a 211 0 0 e # 1668 is_full c a 211 0 0 f # 1669 is_full c a 211 0 0 6 7 10 11 16 19 21 23 24 28 32 33 38 40 41 43 48 49 53 54 61 65 67 71 74 75 76 79 80 81 82 85 86 87 90 91 92 94 99 100 102 104 105 107 108 109 110 111 112 113 116 118 119 121 122 125 126 127 130 132 134 135 138 143 145 147 148 150 153 154 155 157 158 159 162 163 164 165 166 168 172 173 180 182 183 184 185 186 188 192 195 196 197 199 201 206 207 208 209 # 1670 is_full c a 211 0 1 e # 1671 is_full c a 211 0 1 f # 1672 is_full c a 211 0 1 0 3 7 9 10 11 12 14 15 17 21 23 25 26 28 29 30 31 32 36 37 38 40 41 43 46 50 51 54 55 62 64 67 75 76 79 80 81 82 83 86 88 89 90 93 95 97 98 99 101 103 105 106 109 111 112 113 114 117 118 120 122 123 126 129 131 132 134 141 144 146 150 151 152 154 156 157 158 159 160 161 162 166 167 168 172 173 174 175 177 178 181 187 190 193 194 195 200 201 202 203 205 207 # 1673 is_full c a 211 1 0 e # 1674 is_full c a 211 1 0 f # 1675 is_full c a 211 1 0 0 2 3 8 9 11 12 14 15 19 20 21 23 28 29 32 37 38 40 43 44 45 49 50 52 54 56 60 61 62 63 67 70 72 74 75 78 81 82 83 85 88 89 90 91 92 93 94 95 98 99 100 101 102 103 104 105 106 109 110 111 112 114 117 120 124 128 130 131 132 133 134 135 136 141 143 145 147 148 149 150 151 152 155 157 160 162 163 165 166 170 173 175 176 177 179 182 184 185 188 189 191 192 194 197 200 202 206 # 1676 is_full c a 211 1 1 e # 1677 is_full c a 211 1 1 f # 1678 is_full c a 211 1 1 0 1 2 4 5 6 7 8 13 15 17 19 20 22 24 27 29 32 39 40 41 44 45 46 48 50 51 52 53 54 56 60 61 62 63 64 69 72 73 75 78 80 81 82 84 85 86 87 93 94 99 100 101 102 103 107 108 111 118 120 122 123 125 128 129 131 134 135 136 138 139 140 145 147 148 151 152 153 154 155 156 157 159 160 161 162 164 167 168 173 174 175 176 178 179 180 181 184 187 189 191 192 195 196 200 201 202 204 205 207 208 209 # 1679 is_full c a 224 0 0 e # 1680 is_full c a 224 0 0 f # 1681 is_full c a 224 0 0 0 1 2 4 6 7 9 14 18 19 20 21 22 24 30 33 39 40 44 45 46 50 53 55 57 59 62 63 67 68 69 71 73 76 77 79 83 85 86 88 92 96 97 98 103 106 107 110 111 112 114 116 118 119 120 121 122 126 127 128 129 133 139 140 142 143 144 146 147 148 149 151 152 155 156 157 158 159 160 163 168 169 173 178 180 183 184 186 187 189 193 197 198 199 200 205 207 208 211 212 214 215 216 218 222 # 1682 is_full c a 224 0 1 e # 1683 is_full c a 224 0 1 f # 1684 is_full c a 224 0 1 0 1 2 4 5 9 10 16 19 20 22 23 24 27 28 31 34 35 39 40 46 48 50 51 52 53 54 59 60 61 62 63 65 66 67 68 70 71 72 73 80 83 88 89 91 92 94 96 97 99 101 102 103 104 108 109 110 111 114 116 117 118 119 120 122 124 126 127 129 130 132 133 135 137 143 144 145 147 148 150 151 152 153 157 160 161 162 163 164 166 167 171 172 175 177 178 180 181 183 184 187 196 200 202 203 204 206 209 210 212 214 215 216 218 220 222 # 1685 is_full c a 224 1 0 e # 1686 is_full c a 224 1 0 f # 1687 is_full c a 224 1 0 0 3 4 5 6 7 9 10 13 14 15 16 17 18 19 20 21 23 26 27 29 32 33 34 35 37 39 40 42 44 45 47 53 59 60 61 62 63 65 66 67 68 70 71 73 77 79 80 81 84 85 86 87 88 90 91 92 93 94 96 97 99 100 102 104 106 108 111 112 113 115 116 117 118 119 122 125 126 127 130 134 136 137 138 139 142 145 146 148 149 150 153 159 163 164 171 172 173 174 176 177 178 179 180 181 183 185 187 188 189 190 195 196 197 201 204 206 207 209 210 211 213 214 215 216 218 219 221 223 # 1688 is_full c a 224 1 1 e # 1689 is_full c a 224 1 1 f # 1690 is_full c a 224 1 1 1 2 4 6 8 10 11 13 15 18 19 21 22 23 25 26 27 28 29 32 34 37 38 43 45 47 48 50 52 53 56 57 58 59 60 63 64 69 70 73 75 76 77 79 80 82 83 84 87 92 93 94 96 98 102 103 105 108 109 110 111 113 114 117 118 122 123 125 128 132 134 139 142 143 146 147 149 151 153 154 155 156 158 159 162 164 165 167 169 170 171 173 174 175 177 178 179 180 181 184 186 187 189 191 197 199 200 202 204 205 209 210 212 215 216 218 223 # 1691 is_full c a 247 0 0 e # 1692 is_full c a 247 0 0 f # 1693 is_full c a 247 0 0 0 7 8 11 12 14 17 18 24 29 36 37 39 40 41 43 47 51 53 56 57 61 62 63 68 69 70 71 74 75 76 80 81 85 89 90 91 92 93 94 95 96 97 99 100 102 104 105 106 107 113 115 117 119 120 122 123 124 125 126 127 128 129 130 133 134 135 136 137 138 141 142 144 152 154 155 156 157 158 159 160 161 163 164 165 166 167 168 169 171 172 173 177 178 181 182 183 185 186 190 195 198 199 200 201 202 203 204 209 210 212 219 220 222 223 224 226 227 229 230 232 233 235 238 239 241 245 246 # 1694 is_full c a 247 0 1 e # 1695 is_full c a 247 0 1 f # 1696 is_full c a 247 0 1 1 4 5 7 10 12 18 19 20 22 23 24 25 26 28 29 30 32 34 36 37 41 42 46 47 48 49 50 51 52 53 54 55 57 58 61 62 65 66 68 69 70 72 73 74 77 81 84 85 88 90 93 98 106 108 109 110 112 113 114 115 116 118 119 121 122 123 127 128 129 131 133 135 136 137 139 140 141 143 144 146 147 148 149 150 153 154 155 158 159 162 163 164 167 169 170 172 175 176 177 178 179 180 182 185 196 197 199 204 206 207 209 210 213 216 217 218 219 220 224 225 226 227 230 231 232 233 235 238 239 240 241 245 246 # 1697 is_full c a 247 1 0 e # 1698 is_full c a 247 1 0 f # 1699 is_full c a 247 1 0 2 6 7 10 11 12 14 15 17 27 28 31 32 37 39 42 44 49 50 54 55 61 67 69 71 72 75 76 77 78 79 80 81 83 84 86 90 91 93 97 99 101 102 104 107 110 112 115 117 119 122 126 127 128 130 132 133 134 135 138 139 142 144 149 154 157 161 162 164 165 167 169 170 171 173 176 177 180 181 182 183 184 185 188 189 190 191 192 193 196 202 203 204 207 208 209 211 213 214 216 218 220 221 223 224 225 227 229 231 232 234 235 237 238 240 245 246 # 1700 is_full c a 247 1 1 e # 1701 is_full c a 247 1 1 f # 1702 is_full c a 247 1 1 0 2 5 6 7 8 9 11 12 13 14 15 16 19 20 22 32 33 34 35 36 37 38 40 43 49 55 57 59 70 73 74 75 78 79 82 83 86 87 89 90 91 95 96 100 101 102 104 105 106 109 110 111 113 114 115 118 119 121 122 123 126 128 130 134 137 140 143 145 146 147 150 151 153 154 157 158 159 164 166 168 170 171 172 173 174 176 180 186 191 192 193 195 197 201 202 203 204 205 207 212 213 215 219 220 221 222 223 224 225 226 228 229 232 235 238 240 242 243 246 # 1703 is_full c a 0 0 0 e # 1704 dup c a 0 0 0 e # 1705 dup c a 0 0 0 # 1706 dup c a 0 0 1 e # 1707 dup c a 0 0 1 e # 1708 dup c a 0 0 1 # 1709 dup c a 0 1 0 e # 1710 dup c a 0 1 0 e # 1711 dup c a 0 1 0 # 1712 dup c a 0 1 1 e # 1713 dup c a 0 1 1 e # 1714 dup c a 0 1 1 # 1715 dup c a 1 0 0 e # 1716 dup c a 1 0 0 f # 1717 dup c a 1 0 0 0 # 1718 dup c a 1 0 1 e # 1719 dup c a 1 0 1 f # 1720 dup c a 1 0 1 # 1721 dup c a 1 1 0 e # 1722 dup c a 1 1 0 f # 1723 dup c a 1 1 0 # 1724 dup c a 1 1 1 e # 1725 dup c a 1 1 1 f # 1726 dup c a 1 1 1 0 # 1727 dup c a 31 0 0 e # 1728 dup c a 31 0 0 f # 1729 dup c a 31 0 0 2 3 5 6 8 9 10 11 12 15 16 17 18 20 22 24 27 28 30 # 1730 dup c a 31 0 1 e # 1731 dup c a 31 0 1 f # 1732 dup c a 31 0 1 0 1 3 4 6 8 11 13 15 16 17 18 19 20 21 22 24 28 29 # 1733 dup c a 31 1 0 e # 1734 dup c a 31 1 0 f # 1735 dup c a 31 1 0 0 1 2 3 4 5 6 8 10 11 13 20 24 25 26 28 29 30 # 1736 dup c a 31 1 1 e # 1737 dup c a 31 1 1 f # 1738 dup c a 31 1 1 0 3 9 13 14 15 17 18 19 20 26 27 28 29 # 1739 dup c a 32 0 0 e # 1740 dup c a 32 0 0 f # 1741 dup c a 32 0 0 0 2 6 7 8 9 12 15 16 18 19 21 27 # 1742 dup c a 32 0 1 e # 1743 dup c a 32 0 1 f # 1744 dup c a 32 0 1 2 3 4 5 6 7 13 16 17 18 20 22 24 29 31 # 1745 dup c a 32 1 0 e # 1746 dup c a 32 1 0 f # 1747 dup c a 32 1 0 2 4 5 9 10 11 14 17 18 23 24 25 29 31 # 1748 dup c a 32 1 1 e # 1749 dup c a 32 1 1 f # 1750 dup c a 32 1 1 0 2 3 8 12 14 15 17 21 23 25 27 30 # 1751 dup c a 33 0 0 e # 1752 dup c a 33 0 0 f # 1753 dup c a 33 0 0 0 1 3 4 5 7 9 12 18 23 24 25 26 30 31 # 1754 dup c a 33 0 1 e # 1755 dup c a 33 0 1 f # 1756 dup c a 33 0 1 1 6 8 15 17 21 24 25 28 # 1757 dup c a 33 1 0 e # 1758 dup c a 33 1 0 f # 1759 dup c a 33 1 0 0 1 2 3 4 6 9 10 11 13 16 17 18 19 22 24 25 29 30 32 # 1760 dup c a 33 1 1 e # 1761 dup c a 33 1 1 f # 1762 dup c a 33 1 1 0 2 3 4 5 7 8 12 13 16 18 21 22 26 27 28 29 30 31 # 1763 dup c a 63 0 0 e # 1764 dup c a 63 0 0 f # 1765 dup c a 63 0 0 1 7 8 9 11 13 14 15 16 17 18 19 20 22 24 25 27 28 29 32 34 35 36 37 38 40 43 45 46 47 48 49 50 51 52 53 55 56 58 62 # 1766 dup c a 63 0 1 e # 1767 dup c a 63 0 1 f # 1768 dup c a 63 0 1 1 6 7 14 17 20 21 23 24 25 26 29 30 31 32 34 36 37 43 44 47 51 53 54 56 62 # 1769 dup c a 63 1 0 e # 1770 dup c a 63 1 0 f # 1771 dup c a 63 1 0 1 2 4 5 6 10 11 12 15 17 21 24 25 26 27 30 33 34 36 37 38 40 43 44 46 50 53 54 55 56 57 58 59 61 # 1772 dup c a 63 1 1 e # 1773 dup c a 63 1 1 f # 1774 dup c a 63 1 1 0 1 4 9 13 15 19 20 22 23 25 26 29 30 32 34 35 37 38 39 40 42 46 47 48 52 56 57 60 # 1775 dup c a 64 0 0 e # 1776 dup c a 64 0 0 f # 1777 dup c a 64 0 0 4 7 8 9 10 13 15 16 17 20 21 23 24 27 29 31 33 34 36 38 39 40 41 44 49 50 51 54 56 59 61 62 # 1778 dup c a 64 0 1 e # 1779 dup c a 64 0 1 f # 1780 dup c a 64 0 1 1 2 4 5 7 9 14 19 20 22 24 28 30 32 34 35 38 39 42 44 45 46 47 50 51 52 53 55 56 57 59 61 # 1781 dup c a 64 1 0 e # 1782 dup c a 64 1 0 f # 1783 dup c a 64 1 0 3 4 10 13 17 20 21 23 24 26 31 32 33 34 35 36 38 40 41 42 43 45 47 48 49 50 51 52 55 56 61 # 1784 dup c a 64 1 1 e # 1785 dup c a 64 1 1 f # 1786 dup c a 64 1 1 1 2 5 6 7 8 9 10 12 14 15 17 21 23 25 27 30 31 33 35 36 38 39 41 42 43 45 46 47 48 53 59 60 62 # 1787 dup c a 65 0 0 e # 1788 dup c a 65 0 0 f # 1789 dup c a 65 0 0 4 5 6 8 9 11 12 13 14 15 17 20 22 24 27 31 32 33 34 35 36 37 38 40 43 46 50 51 52 53 55 58 59 60 64 # 1790 dup c a 65 0 1 e # 1791 dup c a 65 0 1 f # 1792 dup c a 65 0 1 2 8 10 11 15 23 24 26 28 33 34 35 39 40 41 42 46 50 51 52 54 55 57 58 60 # 1793 dup c a 65 1 0 e # 1794 dup c a 65 1 0 f # 1795 dup c a 65 1 0 10 11 15 16 18 22 23 25 26 27 30 31 32 36 38 40 44 47 48 50 51 52 53 54 56 57 58 61 62 # 1796 dup c a 65 1 1 e # 1797 dup c a 65 1 1 f # 1798 dup c a 65 1 1 3 5 6 7 11 12 15 18 19 21 22 24 25 26 27 28 32 33 34 35 36 37 38 40 42 43 46 47 48 50 54 57 61 62 63 64 # 1799 dup c a 211 0 0 e # 1800 dup c a 211 0 0 f # 1801 dup c a 211 0 0 0 1 2 4 7 11 12 14 16 18 22 24 27 30 31 33 37 41 44 45 46 47 49 54 56 60 65 68 69 70 71 77 80 81 82 83 85 88 90 91 92 93 94 95 96 103 104 105 107 108 109 112 117 118 122 123 125 126 130 131 132 135 136 137 138 139 144 145 147 151 152 154 157 159 165 166 168 169 172 175 177 178 179 181 183 188 189 192 193 196 198 202 204 206 207 209 210 # 1802 dup c a 211 0 1 e # 1803 dup c a 211 0 1 f # 1804 dup c a 211 0 1 1 4 6 10 11 15 17 18 19 20 24 25 27 28 29 30 32 33 34 35 37 39 41 42 43 45 46 47 48 49 51 52 53 54 55 56 58 59 61 63 64 66 68 69 72 73 74 76 77 79 81 84 88 91 94 95 96 97 99 100 102 103 105 108 113 114 115 119 120 121 122 123 125 126 127 128 130 132 133 136 138 140 141 142 144 147 148 149 150 153 155 156 158 159 160 166 167 168 171 176 182 183 188 190 191 192 195 196 197 198 199 202 203 204 205 210 # 1805 dup c a 211 1 0 e # 1806 dup c a 211 1 0 f # 1807 dup c a 211 1 0 0 1 2 4 6 12 15 18 19 20 22 23 25 27 29 30 31 33 38 39 40 41 42 43 46 47 48 49 50 51 54 60 61 64 65 66 67 69 70 72 73 74 77 78 81 83 90 94 97 99 100 101 104 106 107 108 109 115 116 120 122 124 125 126 128 129 132 134 135 136 137 138 139 141 143 146 148 149 151 155 156 159 164 166 167 168 169 172 173 181 185 188 189 190 198 202 203 208 209 210 # 1808 dup c a 211 1 1 e # 1809 dup c a 211 1 1 f # 1810 dup c a 211 1 1 0 1 2 4 5 6 8 9 11 12 16 17 21 24 25 28 31 32 35 36 39 40 42 43 44 47 53 54 56 58 59 61 65 68 69 70 71 73 74 76 80 81 82 83 84 87 88 89 92 93 94 96 99 100 102 105 108 109 111 114 116 117 118 120 122 123 128 129 130 131 133 134 138 143 145 146 148 149 150 151 154 155 156 159 160 164 166 168 170 172 174 177 180 184 187 189 192 193 194 195 200 202 203 204 205 206 207 208 # 1811 dup c a 224 0 0 e # 1812 dup c a 224 0 0 f # 1813 dup c a 224 0 0 0 1 5 6 10 11 13 17 18 19 20 23 26 28 31 32 33 34 36 37 38 39 42 43 52 53 54 55 56 57 59 60 61 62 63 64 65 71 72 75 77 79 80 81 82 83 85 86 88 89 91 92 94 96 98 104 105 109 110 113 115 116 117 119 120 121 123 130 131 132 133 136 138 141 142 143 144 145 146 147 148 151 153 154 157 158 159 162 163 165 171 172 175 181 183 184 185 188 189 190 193 195 196 197 200 201 202 203 204 206 208 213 214 216 219 222 223 # 1814 dup c a 224 0 1 e # 1815 dup c a 224 0 1 f # 1816 dup c a 224 0 1 2 3 4 5 7 8 10 11 12 13 14 16 18 21 23 24 25 26 29 30 31 32 33 34 35 36 37 38 41 43 44 47 48 50 51 52 54 55 57 59 62 64 67 71 74 76 78 81 87 89 90 91 92 93 95 97 98 99 101 103 106 109 110 111 112 116 117 119 120 122 123 125 126 128 131 133 134 135 136 137 140 141 143 145 147 148 149 150 151 153 156 158 160 164 167 168 171 173 175 176 177 178 179 181 182 183 190 197 201 203 204 205 207 210 211 212 213 214 216 217 218 222 223 # 1817 dup c a 224 1 0 e # 1818 dup c a 224 1 0 f # 1819 dup c a 224 1 0 0 4 5 6 8 9 10 11 12 14 16 17 19 21 24 25 26 29 30 32 35 36 39 43 44 48 54 57 58 59 60 61 63 64 65 66 67 68 69 70 75 80 81 82 85 86 87 88 89 90 91 93 96 99 102 107 108 109 111 112 115 118 120 125 126 128 130 132 133 134 139 141 142 143 145 146 147 149 154 155 157 158 161 163 164 171 173 174 176 177 183 184 188 193 198 199 200 201 204 206 207 208 209 213 216 217 218 219 223 # 1820 dup c a 224 1 1 e # 1821 dup c a 224 1 1 f # 1822 dup c a 224 1 1 4 5 7 8 9 11 12 13 14 15 16 20 21 22 23 25 26 27 28 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 51 52 54 57 61 63 66 70 71 73 74 80 81 83 87 90 91 94 95 96 98 99 100 101 102 104 105 106 110 111 114 115 116 117 118 121 122 123 125 127 130 133 134 136 137 139 142 143 145 146 148 154 160 162 166 175 176 177 179 181 182 183 185 189 190 193 194 195 197 198 200 202 209 211 215 217 219 223 # 1823 dup c a 247 0 0 e # 1824 dup c a 247 0 0 f # 1825 dup c a 247 0 0 0 4 6 7 8 9 12 13 14 16 17 18 22 27 32 33 34 35 38 47 52 54 58 59 60 67 68 69 71 73 76 77 81 82 84 85 88 91 92 93 99 101 102 103 108 109 110 117 118 122 126 127 128 130 133 134 135 136 139 140 141 145 146 147 148 149 150 153 154 155 157 158 159 174 175 177 178 179 180 181 184 185 187 188 190 191 192 195 197 199 203 204 206 214 215 218 220 221 225 227 229 230 231 236 240 241 242 243 245 246 # 1826 dup c a 247 0 1 e # 1827 dup c a 247 0 1 f # 1828 dup c a 247 0 1 0 2 3 4 5 9 10 11 13 14 16 17 18 20 21 22 23 24 26 27 28 30 32 33 35 36 37 39 40 42 44 45 47 48 53 55 58 60 62 67 68 70 71 72 73 74 75 76 78 80 81 82 83 84 86 88 89 90 94 96 99 100 108 109 110 111 112 113 114 115 117 119 123 124 128 129 133 134 135 138 141 142 145 147 149 150 151 152 154 155 156 157 160 162 163 165 166 169 170 173 174 175 177 178 179 180 182 183 184 185 188 189 190 193 196 198 200 201 202 207 210 212 213 214 216 218 221 222 224 226 227 228 229 231 232 233 237 239 240 243 # 1829 dup c a 247 1 0 e # 1830 dup c a 247 1 0 f # 1831 dup c a 247 1 0 0 1 4 9 12 18 20 22 23 25 33 34 36 38 43 44 45 47 52 57 61 62 64 66 67 68 70 71 72 74 79 80 81 85 86 88 90 91 93 95 98 99 100 101 102 105 106 107 110 114 115 119 120 122 123 124 126 128 129 134 135 137 139 142 143 145 146 147 149 150 151 153 154 157 159 160 161 164 166 170 171 172 173 174 176 177 178 179 180 181 182 183 185 187 188 189 190 191 194 196 197 198 201 204 208 211 214 215 217 220 226 231 233 234 235 236 239 240 241 242 246 # 1832 dup c a 247 1 1 e # 1833 dup c a 247 1 1 f # 1834 dup c a 247 1 1 0 5 6 9 13 14 15 16 17 18 19 20 23 27 28 29 30 31 35 36 42 45 52 53 54 61 63 65 66 68 69 74 75 76 78 80 82 83 84 85 91 93 94 95 98 102 103 104 106 107 108 109 112 113 115 116 119 120 121 122 127 128 132 136 140 142 143 146 148 151 152 153 160 161 162 166 167 168 171 172 174 176 177 180 181 183 184 188 189 190 191 192 193 199 201 202 207 209 212 213 217 218 220 222 223 226 231 232 236 237 239 240 241 246 # 1835 dup c a 0 0 0 e # 1836 clear c a 0 0 0 e # 1837 clear c a 0 0 0 # 1838 clear c a 0 0 1 e # 1839 clear c a 0 0 1 e # 1840 clear c a 0 0 1 # 1841 clear c a 0 1 0 e # 1842 clear c a 0 1 0 e # 1843 clear c a 0 1 0 # 1844 clear c a 0 1 1 e # 1845 clear c a 0 1 1 e # 1846 clear c a 0 1 1 # 1847 clear c a 1 0 0 e # 1848 clear c a 1 0 0 f # 1849 clear c a 1 0 0 0 # 1850 clear c a 1 0 1 e # 1851 clear c a 1 0 1 f # 1852 clear c a 1 0 1 # 1853 clear c a 1 1 0 e # 1854 clear c a 1 1 0 f # 1855 clear c a 1 1 0 0 # 1856 clear c a 1 1 1 e # 1857 clear c a 1 1 1 f # 1858 clear c a 1 1 1 0 # 1859 clear c a 31 0 0 e # 1860 clear c a 31 0 0 f # 1861 clear c a 31 0 0 0 2 3 6 7 8 9 11 12 13 14 17 22 23 24 26 29 # 1862 clear c a 31 0 1 e # 1863 clear c a 31 0 1 f # 1864 clear c a 31 0 1 1 5 6 9 10 12 13 17 18 19 21 24 25 30 # 1865 clear c a 31 1 0 e # 1866 clear c a 31 1 0 f # 1867 clear c a 31 1 0 0 3 4 5 6 9 11 12 13 14 17 18 19 21 23 24 27 29 30 # 1868 clear c a 31 1 1 e # 1869 clear c a 31 1 1 f # 1870 clear c a 31 1 1 1 2 4 5 7 20 22 23 28 29 30 # 1871 clear c a 32 0 0 e # 1872 clear c a 32 0 0 f # 1873 clear c a 32 0 0 0 1 2 4 5 7 9 10 11 12 14 16 18 20 23 24 26 27 29 30 # 1874 clear c a 32 0 1 e # 1875 clear c a 32 0 1 f # 1876 clear c a 32 0 1 0 1 3 4 5 8 11 12 18 20 21 27 30 # 1877 clear c a 32 1 0 e # 1878 clear c a 32 1 0 f # 1879 clear c a 32 1 0 2 6 8 10 11 15 17 20 21 22 24 28 # 1880 clear c a 32 1 1 e # 1881 clear c a 32 1 1 f # 1882 clear c a 32 1 1 0 2 4 5 7 8 10 12 13 16 17 19 20 23 25 26 28 31 # 1883 clear c a 33 0 0 e # 1884 clear c a 33 0 0 f # 1885 clear c a 33 0 0 0 2 3 4 6 7 8 9 11 12 13 14 15 16 18 19 20 24 27 28 29 30 31 # 1886 clear c a 33 0 1 e # 1887 clear c a 33 0 1 f # 1888 clear c a 33 0 1 0 1 4 7 8 9 11 12 14 16 20 24 27 28 31 # 1889 clear c a 33 1 0 e # 1890 clear c a 33 1 0 f # 1891 clear c a 33 1 0 1 3 8 11 12 13 14 16 21 23 26 27 28 # 1892 clear c a 33 1 1 e # 1893 clear c a 33 1 1 f # 1894 clear c a 33 1 1 0 1 2 5 6 7 9 10 11 12 14 16 18 19 20 27 28 31 # 1895 clear c a 63 0 0 e # 1896 clear c a 63 0 0 f # 1897 clear c a 63 0 0 0 1 2 3 4 5 7 10 11 15 16 18 22 23 27 28 31 34 37 39 45 49 50 51 53 55 57 58 59 62 # 1898 clear c a 63 0 1 e # 1899 clear c a 63 0 1 f # 1900 clear c a 63 0 1 1 3 4 6 7 8 12 20 21 22 25 28 30 36 38 39 42 47 48 49 51 52 53 55 56 59 60 # 1901 clear c a 63 1 0 e # 1902 clear c a 63 1 0 f # 1903 clear c a 63 1 0 1 4 5 9 13 14 16 17 19 22 26 27 29 31 32 33 37 38 39 43 46 48 52 54 56 57 60 62 # 1904 clear c a 63 1 1 e # 1905 clear c a 63 1 1 f # 1906 clear c a 63 1 1 3 4 5 6 10 12 13 16 17 18 20 21 23 24 27 28 29 30 32 35 39 40 41 42 43 44 47 48 51 53 54 55 57 58 60 61 62 # 1907 clear c a 64 0 0 e # 1908 clear c a 64 0 0 f # 1909 clear c a 64 0 0 0 5 6 8 9 11 12 15 20 22 23 25 26 27 28 29 32 33 34 37 38 41 42 46 47 48 55 57 58 59 60 63 # 1910 clear c a 64 0 1 e # 1911 clear c a 64 0 1 f # 1912 clear c a 64 0 1 0 5 6 7 8 9 10 12 13 15 17 19 20 22 28 29 30 31 37 40 42 43 48 49 51 53 55 58 61 62 # 1913 clear c a 64 1 0 e # 1914 clear c a 64 1 0 f # 1915 clear c a 64 1 0 2 6 7 10 11 12 15 16 18 21 22 23 25 27 28 34 35 38 39 40 42 43 44 45 47 50 51 53 54 55 56 59 61 63 # 1916 clear c a 64 1 1 e # 1917 clear c a 64 1 1 f # 1918 clear c a 64 1 1 0 1 2 8 11 13 15 16 18 21 22 24 29 32 34 36 38 39 41 43 44 45 47 50 51 52 53 55 57 59 60 61 62 # 1919 clear c a 65 0 0 e # 1920 clear c a 65 0 0 f # 1921 clear c a 65 0 0 1 2 3 4 6 13 14 15 16 17 18 19 20 22 27 31 32 34 35 36 40 41 43 46 52 54 55 56 58 64 # 1922 clear c a 65 0 1 e # 1923 clear c a 65 0 1 f # 1924 clear c a 65 0 1 0 4 5 7 11 12 13 17 19 20 22 23 27 29 33 34 36 39 42 45 46 48 53 55 57 59 60 61 64 # 1925 clear c a 65 1 0 e # 1926 clear c a 65 1 0 f # 1927 clear c a 65 1 0 1 2 5 6 7 10 15 16 17 19 21 22 25 28 29 32 34 35 36 37 38 41 42 43 47 48 49 50 52 53 57 58 62 # 1928 clear c a 65 1 1 e # 1929 clear c a 65 1 1 f # 1930 clear c a 65 1 1 4 5 7 8 10 12 13 16 20 22 23 30 31 32 34 35 40 42 45 46 50 52 53 55 60 63 64 # 1931 clear c a 211 0 0 e # 1932 clear c a 211 0 0 f # 1933 clear c a 211 0 0 3 4 5 8 9 10 11 12 16 17 18 19 20 21 22 27 28 30 31 32 34 35 42 48 51 55 56 57 58 61 63 66 67 69 71 74 75 80 84 85 88 90 95 96 97 98 100 102 105 106 107 112 113 114 116 118 119 120 121 132 134 137 139 140 141 143 144 147 148 150 151 153 155 157 158 159 164 168 169 171 173 174 177 178 181 184 185 188 192 193 194 195 196 199 200 201 202 204 205 206 208 209 210 # 1934 clear c a 211 0 1 e # 1935 clear c a 211 0 1 f # 1936 clear c a 211 0 1 0 6 9 10 11 12 17 18 20 26 28 29 31 36 38 39 41 42 43 47 48 51 52 53 54 55 56 57 59 60 61 62 63 67 68 70 71 73 74 76 79 80 82 85 88 89 92 95 96 97 98 101 103 104 107 108 110 111 112 117 119 120 121 124 125 127 128 133 138 140 141 142 143 148 149 151 153 156 157 159 163 165 166 169 170 172 173 175 176 179 181 182 183 184 185 187 188 190 191 192 194 197 198 200 202 205 209 # 1937 clear c a 211 1 0 e # 1938 clear c a 211 1 0 f # 1939 clear c a 211 1 0 0 1 2 4 5 6 7 8 10 11 16 20 21 22 24 25 26 29 32 34 35 38 40 41 42 43 48 49 51 58 59 64 65 75 76 77 78 79 83 84 85 88 93 96 97 100 101 105 106 109 111 113 114 118 120 122 127 128 129 131 132 133 138 139 142 143 144 145 150 152 153 155 156 157 158 159 160 162 163 164 171 172 175 177 179 180 183 184 185 186 187 188 189 190 191 192 193 194 195 199 200 201 205 207 208 210 # 1940 clear c a 211 1 1 e # 1941 clear c a 211 1 1 f # 1942 clear c a 211 1 1 0 1 4 5 7 8 9 10 12 13 15 16 19 23 24 26 27 28 30 31 35 38 39 45 49 50 60 63 64 66 67 68 69 70 74 78 81 82 83 84 89 90 96 99 100 104 106 107 108 116 117 118 120 121 124 125 127 128 129 131 132 133 135 136 137 138 139 142 143 144 146 148 149 150 151 154 156 159 161 162 166 169 171 172 175 181 183 188 191 195 199 200 203 204 205 206 209 210 # 1943 clear c a 224 0 0 e # 1944 clear c a 224 0 0 f # 1945 clear c a 224 0 0 0 1 2 6 8 10 11 13 21 22 24 25 27 30 31 33 36 38 39 41 42 43 44 48 49 52 54 56 57 64 65 66 67 68 69 70 72 73 77 78 79 85 86 88 90 93 94 96 97 99 100 105 106 107 109 110 111 112 113 116 117 118 119 121 123 124 125 128 129 134 135 137 139 140 142 143 145 148 152 154 155 160 162 164 165 166 168 170 172 173 175 176 179 180 182 183 184 185 189 190 199 200 203 205 206 207 209 210 211 213 214 216 218 219 220 221 # 1946 clear c a 224 0 1 e # 1947 clear c a 224 0 1 f # 1948 clear c a 224 0 1 1 5 9 10 11 12 13 14 15 16 18 21 22 23 24 25 26 27 31 32 33 36 37 40 42 45 47 53 56 60 62 63 66 67 68 71 72 76 77 82 86 88 89 95 96 98 99 100 101 103 105 106 111 112 117 120 121 122 125 129 130 131 132 134 137 139 140 141 143 145 146 147 148 150 151 153 155 156 159 162 164 165 166 167 170 176 179 180 184 185 187 190 191 192 193 197 199 205 206 208 211 213 214 219 220 221 # 1949 clear c a 224 1 0 e # 1950 clear c a 224 1 0 f # 1951 clear c a 224 1 0 0 1 2 4 7 8 9 14 16 17 20 22 25 26 28 30 31 33 34 35 38 39 40 44 45 46 47 48 50 51 53 54 55 56 57 59 61 63 64 66 67 68 69 70 71 78 81 82 83 84 85 86 88 93 95 97 98 99 100 101 102 103 105 110 111 113 114 115 116 117 119 120 121 127 130 138 139 140 141 143 146 148 150 151 155 156 160 163 164 165 170 171 174 175 176 177 178 179 181 182 183 185 187 189 193 195 197 199 202 204 205 208 213 214 216 221 222 223 # 1952 clear c a 224 1 1 e # 1953 clear c a 224 1 1 f # 1954 clear c a 224 1 1 1 2 3 4 5 6 7 11 13 15 16 17 20 22 23 24 28 29 30 32 33 35 36 38 39 40 42 43 44 46 47 51 53 54 57 60 62 63 66 67 70 72 73 75 78 79 81 82 83 84 89 99 100 107 108 109 110 112 115 116 121 122 124 126 128 132 133 134 139 144 147 148 154 156 157 158 162 164 165 166 174 176 177 178 179 183 185 186 188 189 190 191 192 193 195 196 197 199 203 204 206 207 209 210 211 215 218 219 221 222 # 1955 clear c a 247 0 0 e # 1956 clear c a 247 0 0 f # 1957 clear c a 247 0 0 8 9 11 12 14 17 18 24 28 32 33 34 35 37 40 41 43 44 46 49 50 53 54 58 60 62 63 64 66 72 73 74 75 76 77 80 81 82 84 85 86 89 92 94 95 96 97 100 101 103 106 110 114 117 120 121 122 123 125 126 127 129 132 133 138 139 140 143 144 149 150 151 152 154 155 158 159 164 165 170 171 172 174 175 178 179 180 181 182 183 186 188 189 192 194 195 206 207 208 209 210 211 212 215 216 219 220 221 223 226 230 231 235 236 238 239 241 243 245 246 # 1958 clear c a 247 0 1 e # 1959 clear c a 247 0 1 f # 1960 clear c a 247 0 1 6 9 11 14 16 18 19 21 22 25 26 28 29 32 33 36 41 43 48 49 52 54 56 59 61 65 68 69 70 72 74 75 76 79 84 87 88 89 90 91 92 93 96 97 98 99 100 101 102 105 109 113 114 115 116 118 119 122 123 125 128 129 130 132 133 134 135 136 142 148 150 151 152 153 154 156 162 163 165 166 170 171 172 175 176 177 179 180 182 183 184 185 186 187 188 192 198 199 201 205 210 212 213 215 220 221 222 223 224 225 230 231 232 234 239 240 # 1961 clear c a 247 1 0 e # 1962 clear c a 247 1 0 f # 1963 clear c a 247 1 0 0 1 2 6 9 11 13 14 15 16 18 19 24 25 29 30 31 32 36 41 44 45 51 52 53 54 55 56 61 68 69 70 71 72 75 77 81 84 86 87 88 90 95 96 97 100 103 105 106 107 108 109 112 114 116 117 120 122 126 130 135 137 138 140 141 142 143 150 152 156 159 160 167 169 170 172 173 178 180 182 183 184 186 187 188 190 192 193 194 197 198 199 200 201 203 204 205 207 212 214 215 217 222 227 230 236 237 241 243 244 246 # 1964 clear c a 247 1 1 e # 1965 clear c a 247 1 1 f # 1966 clear c a 247 1 1 3 4 8 9 10 15 16 19 23 24 25 27 28 29 33 37 39 40 45 49 51 55 57 58 62 63 64 66 68 71 72 73 74 79 80 81 85 87 88 89 94 97 101 107 109 110 112 114 115 117 118 119 120 121 127 129 131 132 134 136 141 142 149 152 153 154 156 158 162 163 164 165 170 171 175 176 181 182 185 186 188 189 190 192 193 195 196 200 201 208 210 213 214 215 216 217 219 221 222 224 228 230 231 233 235 240 242 245 246 # 1967 clear c a 0 0 0 e # 1968 fill c a 0 0 0 e # 1969 fill c a 0 0 0 # 1970 fill c a 0 0 1 e # 1971 fill c a 0 0 1 e # 1972 fill c a 0 0 1 # 1973 fill c a 0 1 0 e # 1974 fill c a 0 1 0 e # 1975 fill c a 0 1 0 # 1976 fill c a 0 1 1 e # 1977 fill c a 0 1 1 e # 1978 fill c a 0 1 1 # 1979 fill c a 1 0 0 e # 1980 fill c a 1 0 0 f # 1981 fill c a 1 0 0 # 1982 fill c a 1 0 1 e # 1983 fill c a 1 0 1 f # 1984 fill c a 1 0 1 0 # 1985 fill c a 1 1 0 e # 1986 fill c a 1 1 0 f # 1987 fill c a 1 1 0 # 1988 fill c a 1 1 1 e # 1989 fill c a 1 1 1 f # 1990 fill c a 1 1 1 0 # 1991 fill c a 31 0 0 e # 1992 fill c a 31 0 0 f # 1993 fill c a 31 0 0 2 3 4 6 8 11 12 14 15 16 21 23 26 27 28 29 30 # 1994 fill c a 31 0 1 e # 1995 fill c a 31 0 1 f # 1996 fill c a 31 0 1 2 3 5 6 7 8 10 11 14 16 18 20 21 25 28 30 # 1997 fill c a 31 1 0 e # 1998 fill c a 31 1 0 f # 1999 fill c a 31 1 0 0 2 3 4 5 6 8 12 13 16 19 23 24 26 28 # 2000 fill c a 31 1 1 e # 2001 fill c a 31 1 1 f # 2002 fill c a 31 1 1 0 1 2 3 5 6 7 11 15 16 17 19 20 21 23 24 25 26 28 29 # 2003 fill c a 32 0 0 e # 2004 fill c a 32 0 0 f # 2005 fill c a 32 0 0 0 1 3 6 8 10 11 12 13 14 15 16 17 19 20 28 30 31 # 2006 fill c a 32 0 1 e # 2007 fill c a 32 0 1 f # 2008 fill c a 32 0 1 0 4 14 16 19 21 23 24 27 28 30 31 # 2009 fill c a 32 1 0 e # 2010 fill c a 32 1 0 f # 2011 fill c a 32 1 0 0 2 6 7 8 11 19 22 24 25 27 29 31 # 2012 fill c a 32 1 1 e # 2013 fill c a 32 1 1 f # 2014 fill c a 32 1 1 3 4 6 7 8 9 10 13 14 15 17 18 19 22 27 29 30 # 2015 fill c a 33 0 0 e # 2016 fill c a 33 0 0 f # 2017 fill c a 33 0 0 4 5 6 8 9 10 12 14 17 18 19 21 23 25 30 31 # 2018 fill c a 33 0 1 e # 2019 fill c a 33 0 1 f # 2020 fill c a 33 0 1 1 4 5 7 11 13 16 19 20 22 23 24 27 29 31 32 # 2021 fill c a 33 1 0 e # 2022 fill c a 33 1 0 f # 2023 fill c a 33 1 0 0 1 2 5 6 7 9 11 14 15 16 18 21 22 23 24 25 27 30 # 2024 fill c a 33 1 1 e # 2025 fill c a 33 1 1 f # 2026 fill c a 33 1 1 0 1 3 4 6 7 9 11 12 14 18 19 21 22 25 26 28 29 30 31 32 # 2027 fill c a 63 0 0 e # 2028 fill c a 63 0 0 f # 2029 fill c a 63 0 0 1 4 6 7 9 11 12 13 14 17 20 21 23 25 26 28 29 31 32 33 36 41 46 47 52 53 56 58 # 2030 fill c a 63 0 1 e # 2031 fill c a 63 0 1 f # 2032 fill c a 63 0 1 0 1 2 4 6 8 10 12 13 15 21 22 23 24 25 26 30 33 34 38 40 42 43 45 46 47 51 53 54 55 56 57 61 # 2033 fill c a 63 1 0 e # 2034 fill c a 63 1 0 f # 2035 fill c a 63 1 0 1 3 4 5 8 9 10 11 13 14 17 27 28 34 39 42 43 47 49 51 53 54 55 60 61 # 2036 fill c a 63 1 1 e # 2037 fill c a 63 1 1 f # 2038 fill c a 63 1 1 5 6 12 13 14 15 19 20 22 24 26 29 30 31 32 38 39 40 43 44 45 46 52 54 55 56 57 58 61 62 # 2039 fill c a 64 0 0 e # 2040 fill c a 64 0 0 f # 2041 fill c a 64 0 0 1 3 6 7 11 14 16 17 18 19 20 21 22 24 27 28 30 36 39 40 41 42 43 44 45 47 48 50 54 55 56 58 59 60 61 63 # 2042 fill c a 64 0 1 e # 2043 fill c a 64 0 1 f # 2044 fill c a 64 0 1 1 3 5 6 8 9 11 12 13 16 18 20 21 23 26 33 35 36 38 44 45 46 47 48 49 51 52 56 59 61 63 # 2045 fill c a 64 1 0 e # 2046 fill c a 64 1 0 f # 2047 fill c a 64 1 0 1 6 7 8 9 11 12 13 14 15 16 17 21 22 27 28 29 32 33 34 42 45 46 48 50 55 56 57 59 61 # 2048 fill c a 64 1 1 e # 2049 fill c a 64 1 1 f # 2050 fill c a 64 1 1 0 1 5 6 7 9 11 14 16 17 21 22 23 24 26 29 32 33 34 36 37 39 41 42 43 44 45 47 49 50 51 52 53 54 58 59 # 2051 fill c a 65 0 0 e # 2052 fill c a 65 0 0 f # 2053 fill c a 65 0 0 2 3 6 7 9 10 13 14 15 16 17 18 20 22 24 25 28 29 30 33 35 39 40 42 45 47 48 51 52 55 57 60 # 2054 fill c a 65 0 1 e # 2055 fill c a 65 0 1 f # 2056 fill c a 65 0 1 0 2 3 4 6 7 12 16 18 20 21 23 24 25 26 31 32 34 36 37 41 42 44 46 47 48 49 50 51 54 57 58 63 # 2057 fill c a 65 1 0 e # 2058 fill c a 65 1 0 f # 2059 fill c a 65 1 0 4 6 7 10 15 17 19 20 21 24 25 26 27 29 31 33 38 40 41 42 43 46 47 50 51 53 56 59 60 61 62 # 2060 fill c a 65 1 1 e # 2061 fill c a 65 1 1 f # 2062 fill c a 65 1 1 0 2 6 9 12 14 16 17 18 19 22 25 29 30 34 35 36 37 38 39 40 43 44 47 48 50 54 55 59 60 61 # 2063 fill c a 211 0 0 e # 2064 fill c a 211 0 0 f # 2065 fill c a 211 0 0 0 1 3 4 8 11 13 14 15 16 20 30 37 38 40 47 52 53 54 56 57 58 61 62 63 64 68 70 71 72 73 75 77 78 79 83 84 85 87 88 89 92 95 96 97 99 101 102 104 108 110 121 122 126 130 131 133 134 136 139 143 144 147 148 149 152 153 154 157 158 160 161 169 171 173 174 182 186 187 189 195 196 197 200 201 204 206 207 208 209 # 2066 fill c a 211 0 1 e # 2067 fill c a 211 0 1 f # 2068 fill c a 211 0 1 2 3 4 6 7 8 10 11 12 15 22 23 25 26 28 29 31 34 36 38 39 40 41 42 43 46 47 48 52 53 56 57 59 60 61 62 63 68 71 73 74 75 77 79 81 84 86 87 95 96 99 100 102 103 105 106 107 108 110 112 113 114 115 119 120 121 123 126 127 128 129 130 131 134 135 138 139 140 143 145 147 149 150 152 156 157 159 160 161 167 168 170 172 173 176 177 180 182 183 185 186 188 190 191 195 196 197 202 203 208 210 # 2069 fill c a 211 1 0 e # 2070 fill c a 211 1 0 f # 2071 fill c a 211 1 0 0 1 9 12 13 14 15 16 17 24 27 29 30 32 34 35 36 40 41 42 43 44 45 46 47 48 49 50 51 56 57 60 61 67 69 72 73 75 76 78 81 83 84 85 86 87 90 94 96 101 102 104 109 110 111 112 115 119 120 122 123 124 125 127 128 129 130 132 133 136 137 138 140 141 145 147 149 151 154 158 161 164 165 166 167 168 169 172 174 178 180 184 188 193 194 196 198 199 203 204 207 # 2072 fill c a 211 1 1 e # 2073 fill c a 211 1 1 f # 2074 fill c a 211 1 1 1 2 3 4 7 9 11 14 21 25 26 29 30 31 32 33 37 39 41 42 43 45 47 48 49 53 54 55 57 59 60 65 66 67 68 70 73 74 75 76 78 79 80 84 88 89 91 93 95 96 98 100 101 102 104 105 107 108 111 113 116 117 118 119 120 122 124 125 127 131 133 136 139 140 141 142 146 149 152 154 155 158 160 161 164 165 166 167 169 171 172 177 178 179 180 182 183 185 186 187 188 191 193 194 197 199 200 201 202 204 205 206 208 # 2075 fill c a 224 0 0 e # 2076 fill c a 224 0 0 f # 2077 fill c a 224 0 0 0 1 5 7 8 9 11 13 14 15 18 21 22 23 24 25 28 29 31 32 33 35 36 38 39 47 48 50 51 52 53 54 55 56 58 59 62 63 65 66 67 69 70 71 80 83 85 92 93 96 101 103 107 108 110 111 112 115 117 122 126 128 129 130 132 136 138 139 140 141 143 145 146 148 149 150 153 154 155 157 160 162 163 164 166 168 169 171 172 173 176 178 179 181 183 184 186 188 190 191 192 193 196 198 199 204 205 206 207 213 215 216 217 219 221 222 223 # 2078 fill c a 224 0 1 e # 2079 fill c a 224 0 1 f # 2080 fill c a 224 0 1 0 3 4 8 9 10 11 12 16 17 18 20 21 23 24 26 32 33 34 38 39 42 44 46 47 51 54 56 58 60 61 62 63 64 65 67 69 70 71 73 76 77 81 83 85 90 95 98 101 103 104 107 109 110 111 112 114 115 119 120 121 123 126 127 128 129 132 135 136 137 140 143 144 146 147 148 149 150 151 152 153 154 157 160 162 163 164 167 169 173 177 180 181 183 184 185 188 189 190 193 197 199 200 201 204 205 208 209 210 211 212 213 214 215 216 219 220 # 2081 fill c a 224 1 0 e # 2082 fill c a 224 1 0 f # 2083 fill c a 224 1 0 3 5 6 7 12 13 15 22 26 30 31 32 35 36 38 42 44 49 50 51 52 53 54 56 57 58 61 63 64 65 66 67 68 69 74 78 79 80 82 83 85 88 90 91 93 94 96 97 99 100 101 104 112 115 116 117 119 121 122 123 124 125 126 127 128 131 132 133 134 135 136 140 141 142 149 150 151 152 153 154 155 157 160 161 162 163 164 165 166 167 174 175 176 178 180 181 183 184 185 188 189 191 192 194 195 197 199 201 203 204 205 207 210 214 219 221 222 # 2084 fill c a 224 1 1 e # 2085 fill c a 224 1 1 f # 2086 fill c a 224 1 1 3 5 6 13 18 19 21 22 23 26 27 31 32 34 37 38 39 41 44 46 47 48 49 50 53 54 55 57 59 61 62 65 68 71 75 76 78 79 81 82 83 85 87 88 89 91 92 95 96 97 99 100 101 102 108 110 111 112 113 114 116 119 121 122 123 124 125 126 127 128 130 131 134 136 138 141 144 146 147 151 152 154 155 157 158 159 161 162 165 166 167 168 169 173 174 177 178 179 184 187 188 190 192 193 194 197 201 202 203 204 205 207 208 210 212 217 220 222 223 # 2087 fill c a 247 0 0 e # 2088 fill c a 247 0 0 f # 2089 fill c a 247 0 0 3 7 10 11 13 14 17 19 20 21 24 25 26 27 29 30 31 33 37 39 40 41 42 44 45 49 52 53 54 55 56 57 60 62 63 67 69 72 75 76 77 78 80 82 83 84 85 86 87 88 90 91 93 94 95 99 100 101 102 103 110 112 113 115 116 119 123 126 127 130 133 137 138 139 143 145 146 147 148 150 152 159 161 163 164 165 167 169 170 171 173 174 175 176 178 179 180 184 185 186 188 189 192 193 195 198 199 202 203 206 208 210 211 212 215 216 217 218 219 220 223 224 225 226 231 232 234 236 238 239 240 241 243 244 245 246 # 2090 fill c a 247 0 1 e # 2091 fill c a 247 0 1 f # 2092 fill c a 247 0 1 0 1 2 3 4 5 7 8 13 14 16 18 20 23 25 28 29 31 32 33 34 36 39 40 41 44 47 48 51 52 57 58 60 66 68 71 72 73 74 75 79 80 81 82 83 87 88 91 92 93 95 102 105 109 115 117 121 127 128 130 132 133 134 136 137 138 140 142 146 147 151 153 155 159 160 163 165 168 169 170 171 173 174 175 177 178 179 182 183 184 188 189 191 194 195 197 200 206 207 209 210 211 212 213 215 217 219 220 222 224 229 230 234 235 237 238 239 241 244 245 # 2093 fill c a 247 1 0 e # 2094 fill c a 247 1 0 f # 2095 fill c a 247 1 0 1 2 4 6 10 11 12 13 14 17 21 26 27 29 31 32 34 35 37 39 46 47 51 53 54 55 57 58 59 66 67 70 71 75 79 80 81 83 86 87 91 92 93 94 97 99 101 102 103 107 108 109 111 112 113 114 118 119 120 123 126 127 130 131 133 137 140 141 143 144 145 146 149 150 155 156 158 161 163 164 165 168 170 171 175 179 183 184 186 187 188 189 192 194 195 199 200 202 203 204 206 207 208 210 213 218 224 227 228 229 230 233 235 236 238 239 240 241 242 244 # 2096 fill c a 247 1 1 e # 2097 fill c a 247 1 1 f # 2098 fill c a 247 1 1 4 5 6 7 13 15 21 23 25 26 27 28 31 32 33 39 40 41 44 45 46 47 52 60 65 66 67 70 75 78 80 82 83 84 88 91 92 93 98 99 100 101 102 103 104 106 108 109 110 111 113 115 117 121 122 127 130 133 142 144 149 154 155 156 158 160 161 163 165 167 168 169 170 172 173 174 175 179 180 181 185 187 191 193 194 195 200 202 203 206 207 208 210 211 212 213 216 217 227 229 233 235 238 240 242 243 246 # 2099 fill c a 0 0 0 e # 2100 complement c a 0 0 0 e # 2101 complement c a 0 0 0 # 2102 complement c a 0 0 1 e # 2103 complement c a 0 0 1 e # 2104 complement c a 0 0 1 # 2105 complement c a 0 1 0 e # 2106 complement c a 0 1 0 e # 2107 complement c a 0 1 0 # 2108 complement c a 0 1 1 e # 2109 complement c a 0 1 1 e # 2110 complement c a 0 1 1 # 2111 complement c a 1 0 0 e # 2112 complement c a 1 0 0 f # 2113 complement c a 1 0 0 # 2114 complement c a 1 0 1 e # 2115 complement c a 1 0 1 f # 2116 complement c a 1 0 1 0 # 2117 complement c a 1 1 0 e # 2118 complement c a 1 1 0 f # 2119 complement c a 1 1 0 # 2120 complement c a 1 1 1 e # 2121 complement c a 1 1 1 f # 2122 complement c a 1 1 1 0 # 2123 complement c a 31 0 0 e # 2124 complement c a 31 0 0 f # 2125 complement c a 31 0 0 1 2 3 4 6 7 8 9 10 12 13 14 15 19 20 21 22 23 25 26 27 28 29 30 # 2126 complement c a 31 0 1 e # 2127 complement c a 31 0 1 f # 2128 complement c a 31 0 1 1 2 3 4 5 6 8 9 11 12 14 16 17 18 19 20 21 23 # 2129 complement c a 31 1 0 e # 2130 complement c a 31 1 0 f # 2131 complement c a 31 1 0 0 2 3 4 5 6 8 10 11 15 18 21 22 26 27 28 30 # 2132 complement c a 31 1 1 e # 2133 complement c a 31 1 1 f # 2134 complement c a 31 1 1 2 5 6 7 8 10 12 14 16 20 21 22 26 27 28 30 # 2135 complement c a 32 0 0 e # 2136 complement c a 32 0 0 f # 2137 complement c a 32 0 0 1 2 3 5 6 8 12 13 16 17 18 19 20 21 22 23 24 26 27 30 31 # 2138 complement c a 32 0 1 e # 2139 complement c a 32 0 1 f # 2140 complement c a 32 0 1 0 1 4 7 9 10 14 16 17 19 22 25 27 28 31 # 2141 complement c a 32 1 0 e # 2142 complement c a 32 1 0 f # 2143 complement c a 32 1 0 1 5 7 11 16 20 21 22 24 26 27 28 30 # 2144 complement c a 32 1 1 e # 2145 complement c a 32 1 1 f # 2146 complement c a 32 1 1 1 2 3 4 9 11 12 15 16 17 19 20 22 24 25 27 29 31 # 2147 complement c a 33 0 0 e # 2148 complement c a 33 0 0 f # 2149 complement c a 33 0 0 0 2 3 4 6 8 11 12 13 14 15 20 22 23 25 26 27 28 30 31 32 # 2150 complement c a 33 0 1 e # 2151 complement c a 33 0 1 f # 2152 complement c a 33 0 1 0 1 2 3 4 5 6 7 9 10 11 12 16 17 22 25 27 28 30 31 # 2153 complement c a 33 1 0 e # 2154 complement c a 33 1 0 f # 2155 complement c a 33 1 0 0 1 2 3 4 5 6 7 8 9 10 16 17 18 20 22 23 24 25 26 28 # 2156 complement c a 33 1 1 e # 2157 complement c a 33 1 1 f # 2158 complement c a 33 1 1 2 5 10 11 12 13 16 17 19 21 22 24 25 26 31 32 # 2159 complement c a 63 0 0 e # 2160 complement c a 63 0 0 f # 2161 complement c a 63 0 0 2 4 6 8 10 11 12 14 15 16 17 19 25 26 27 29 30 31 33 34 36 37 39 42 44 45 46 47 51 52 53 56 59 61 62 # 2162 complement c a 63 0 1 e # 2163 complement c a 63 0 1 f # 2164 complement c a 63 0 1 0 1 2 4 6 7 8 10 11 14 15 16 19 20 25 30 33 34 35 38 39 40 42 43 44 45 46 47 50 52 57 59 # 2165 complement c a 63 1 0 e # 2166 complement c a 63 1 0 f # 2167 complement c a 63 1 0 0 3 5 9 12 15 16 17 18 19 20 24 26 27 28 31 33 35 37 39 40 41 43 45 46 48 49 51 53 57 61 62 # 2168 complement c a 63 1 1 e # 2169 complement c a 63 1 1 f # 2170 complement c a 63 1 1 0 1 3 10 12 13 15 16 19 20 21 22 25 26 29 31 32 33 34 35 37 39 41 43 44 45 46 54 57 58 60 # 2171 complement c a 64 0 0 e # 2172 complement c a 64 0 0 f # 2173 complement c a 64 0 0 0 3 4 6 7 9 12 16 17 20 21 24 29 30 34 37 39 40 41 43 45 46 48 50 51 56 57 58 60 61 62 # 2174 complement c a 64 0 1 e # 2175 complement c a 64 0 1 f # 2176 complement c a 64 0 1 0 1 2 4 7 9 11 12 15 16 20 21 23 28 29 31 32 37 39 40 41 43 45 46 48 51 52 53 57 58 60 # 2177 complement c a 64 1 0 e # 2178 complement c a 64 1 0 f # 2179 complement c a 64 1 0 1 2 3 4 6 7 8 10 12 15 16 17 18 19 20 24 25 27 29 31 34 38 40 41 42 43 46 47 50 52 53 55 56 57 60 61 62 # 2180 complement c a 64 1 1 e # 2181 complement c a 64 1 1 f # 2182 complement c a 64 1 1 0 1 6 7 9 10 12 16 19 21 24 25 27 28 30 31 36 40 42 43 44 47 49 51 52 53 54 55 56 59 60 # 2183 complement c a 65 0 0 e # 2184 complement c a 65 0 0 f # 2185 complement c a 65 0 0 0 1 2 3 4 7 9 10 14 15 16 19 24 25 27 29 33 37 39 40 42 43 44 45 46 47 51 52 53 55 56 57 58 61 62 63 64 # 2186 complement c a 65 0 1 e # 2187 complement c a 65 0 1 f # 2188 complement c a 65 0 1 4 5 6 8 9 11 12 13 15 18 20 23 25 28 32 34 35 37 40 45 47 52 53 55 56 59 60 64 # 2189 complement c a 65 1 0 e # 2190 complement c a 65 1 0 f # 2191 complement c a 65 1 0 3 5 6 7 12 14 15 16 18 19 20 21 22 24 25 26 31 32 33 34 36 40 41 42 45 52 55 59 60 61 63 64 # 2192 complement c a 65 1 1 e # 2193 complement c a 65 1 1 f # 2194 complement c a 65 1 1 1 2 3 7 9 14 15 16 18 19 20 21 25 29 31 32 36 37 40 42 44 45 47 48 49 50 51 52 53 54 55 56 64 # 2195 complement c a 211 0 0 e # 2196 complement c a 211 0 0 f # 2197 complement c a 211 0 0 0 3 4 5 6 13 16 17 19 20 22 27 29 30 34 35 36 37 40 42 45 46 48 50 51 53 55 56 57 58 61 62 63 64 65 66 67 69 74 75 77 83 84 86 87 89 91 96 101 102 103 105 106 108 109 110 113 114 117 119 121 123 124 125 127 129 132 137 138 140 142 145 147 149 150 151 154 161 162 166 167 172 176 177 180 186 187 188 194 195 197 198 199 202 206 210 # 2198 complement c a 211 0 1 e # 2199 complement c a 211 0 1 f # 2200 complement c a 211 0 1 4 5 7 8 10 12 16 23 24 25 29 31 33 36 38 39 40 41 43 45 47 51 52 53 55 56 57 60 61 63 64 67 68 70 71 74 77 79 81 84 85 87 88 89 91 92 93 94 95 97 98 101 105 106 107 108 110 114 121 122 124 125 127 128 131 135 138 140 141 142 144 145 146 151 157 159 162 163 164 166 168 169 170 171 172 173 175 176 178 180 184 185 186 188 189 196 198 199 201 202 204 206 207 208 209 # 2201 complement c a 211 1 0 e # 2202 complement c a 211 1 0 f # 2203 complement c a 211 1 0 0 2 5 6 7 8 9 10 14 15 16 18 19 20 21 24 25 27 32 38 41 42 43 45 46 49 50 52 54 55 57 58 59 62 63 64 68 70 73 76 78 81 82 85 88 91 92 94 95 96 99 103 105 109 110 111 112 113 115 116 117 121 124 127 128 129 133 134 135 139 143 145 146 147 151 153 154 158 160 166 167 168 171 173 174 175 176 177 178 182 183 185 186 187 189 190 195 196 199 200 201 202 204 205 206 207 208 209 210 # 2204 complement c a 211 1 1 e # 2205 complement c a 211 1 1 f # 2206 complement c a 211 1 1 1 2 3 5 6 7 9 10 14 18 21 22 24 25 31 34 37 39 40 44 48 50 51 52 53 55 57 59 61 62 66 67 71 72 73 75 76 77 79 80 82 83 84 86 89 92 94 95 96 97 98 99 102 104 107 108 109 110 111 114 116 117 118 119 120 131 137 140 144 151 153 155 157 159 162 163 164 169 170 172 174 175 176 179 181 182 183 184 186 191 192 196 197 198 202 204 208 # 2207 complement c a 224 0 0 e # 2208 complement c a 224 0 0 f # 2209 complement c a 224 0 0 4 5 13 14 15 19 20 21 24 25 26 28 30 31 38 39 40 42 44 45 46 53 54 56 60 65 66 67 72 75 80 82 86 87 88 91 93 94 95 96 97 98 99 103 104 105 106 107 109 114 115 116 118 119 120 127 129 130 135 136 138 143 144 148 153 154 155 157 158 160 161 162 164 167 168 171 172 173 174 176 178 179 183 184 185 186 188 190 191 193 199 200 202 205 206 208 209 210 220 223 # 2210 complement c a 224 0 1 e # 2211 complement c a 224 0 1 f # 2212 complement c a 224 0 1 0 4 7 8 12 15 20 21 22 23 27 30 32 34 35 36 37 38 39 41 42 48 49 50 51 52 53 54 55 56 57 58 61 62 65 67 68 70 71 73 78 81 82 83 84 85 86 87 88 89 92 94 96 99 101 102 103 104 105 107 111 114 115 116 117 118 119 120 121 122 123 125 126 128 130 133 135 136 138 140 142 143 145 146 149 152 154 155 156 157 159 164 165 167 170 171 172 173 174 176 177 178 180 181 189 191 192 193 195 197 198 199 201 202 203 204 205 208 209 210 212 214 216 221 222 # 2213 complement c a 224 1 0 e # 2214 complement c a 224 1 0 f # 2215 complement c a 224 1 0 3 4 5 6 8 14 15 17 20 22 23 24 26 28 29 33 36 40 41 42 43 45 46 47 48 51 52 53 55 61 62 63 66 70 73 76 80 83 85 86 87 89 90 91 92 93 96 100 102 104 105 106 107 109 111 114 115 118 121 125 129 130 133 136 138 139 142 143 144 145 146 147 151 153 154 155 159 162 163 164 166 167 168 169 170 171 173 174 175 178 179 180 186 187 188 196 199 201 202 204 208 210 211 212 216 218 219 223 # 2216 complement c a 224 1 1 e # 2217 complement c a 224 1 1 f # 2218 complement c a 224 1 1 0 1 3 4 5 6 8 10 12 14 15 16 17 18 19 22 25 27 29 30 38 39 40 43 44 46 48 49 52 57 59 63 64 65 68 71 72 73 76 78 79 80 83 85 87 89 91 93 94 98 100 101 104 105 106 107 108 109 110 111 113 114 115 116 121 123 124 128 130 133 134 135 136 137 138 139 140 142 145 146 151 153 154 156 159 163 166 167 170 172 178 180 184 185 186 187 190 191 193 195 198 200 202 203 204 208 209 210 211 213 216 217 221 222 223 # 2219 complement c a 247 0 0 e # 2220 complement c a 247 0 0 f # 2221 complement c a 247 0 0 0 4 6 8 11 12 14 17 19 20 22 23 26 27 29 33 38 39 40 41 42 45 46 47 50 52 53 54 56 57 58 60 65 66 67 70 71 75 78 79 80 81 82 85 86 88 89 90 91 95 100 104 105 107 110 112 113 114 116 118 119 121 122 124 129 130 132 135 137 138 139 140 142 143 145 147 150 154 156 160 163 165 166 167 168 171 172 174 180 181 182 183 185 189 192 193 196 197 199 201 206 209 210 212 213 216 218 225 226 228 229 230 232 234 235 236 245 246 # 2222 complement c a 247 0 1 e # 2223 complement c a 247 0 1 f # 2224 complement c a 247 0 1 2 3 5 7 9 12 15 17 18 20 22 23 24 28 33 34 35 36 38 42 43 44 46 47 49 51 52 53 54 55 58 59 60 69 71 74 75 77 78 79 82 85 91 93 95 96 98 103 104 105 106 108 109 110 112 113 114 117 118 119 122 123 124 125 127 131 132 133 134 135 136 138 141 142 144 150 151 153 156 157 161 164 165 170 171 173 174 175 179 180 184 185 186 187 188 190 194 195 199 203 206 208 209 211 213 214 216 217 218 219 220 221 229 231 233 234 238 242 243 244 245 246 # 2225 complement c a 247 1 0 e # 2226 complement c a 247 1 0 f # 2227 complement c a 247 1 0 0 1 2 4 5 6 7 9 11 13 14 17 19 20 21 22 25 27 28 30 31 32 33 35 36 37 38 40 41 42 44 45 46 48 50 51 52 53 54 56 59 65 68 69 71 72 75 82 84 85 86 87 89 91 93 96 98 104 108 109 112 114 115 118 119 123 125 127 129 131 133 135 137 139 141 145 147 151 153 154 155 156 157 158 159 160 162 164 165 168 174 179 181 182 183 184 185 186 188 191 192 194 195 198 199 200 203 204 205 209 211 214 216 218 219 220 223 227 228 230 232 233 236 237 238 240 241 242 245 # 2228 complement c a 247 1 1 e # 2229 complement c a 247 1 1 f # 2230 complement c a 247 1 1 3 7 8 9 11 12 13 16 18 21 22 23 25 26 27 32 35 36 37 38 39 40 42 43 46 48 49 54 55 57 58 59 61 63 65 66 68 69 71 75 81 83 86 87 93 95 101 102 103 106 107 108 110 112 114 116 117 118 122 123 126 127 128 130 133 142 144 145 146 147 149 150 151 153 156 159 162 163 167 171 172 173 176 180 182 184 186 187 188 189 190 193 194 196 200 205 206 216 219 222 224 225 226 227 231 232 233 236 240 241 245 246 # 2231 complement c a 0 0 0 e # 2232 ffs c a 0 0 0 e # 2233 ffs c a 0 0 0 # 2234 ffs c a 0 0 1 e # 2235 ffs c a 0 0 1 e # 2236 ffs c a 0 0 1 # 2237 ffs c a 0 1 0 e # 2238 ffs c a 0 1 0 e # 2239 ffs c a 0 1 0 # 2240 ffs c a 0 1 1 e # 2241 ffs c a 0 1 1 e # 2242 ffs c a 0 1 1 # 2243 ffs c a 1 0 0 e # 2244 ffs c a 1 0 0 f # 2245 ffs c a 1 0 0 # 2246 ffs c a 1 0 1 e # 2247 ffs c a 1 0 1 f # 2248 ffs c a 1 0 1 # 2249 ffs c a 1 1 0 e # 2250 ffs c a 1 1 0 f # 2251 ffs c a 1 1 0 # 2252 ffs c a 1 1 1 e # 2253 ffs c a 1 1 1 f # 2254 ffs c a 1 1 1 # 2255 ffs c a 31 0 0 e # 2256 ffs c a 31 0 0 f # 2257 ffs c a 31 0 0 3 6 10 12 13 14 16 18 21 22 25 27 28 30 # 2258 ffs c a 31 0 1 e # 2259 ffs c a 31 0 1 f # 2260 ffs c a 31 0 1 1 7 8 9 10 12 13 15 16 17 18 22 23 24 25 26 28 # 2261 ffs c a 31 1 0 e # 2262 ffs c a 31 1 0 f # 2263 ffs c a 31 1 0 2 3 4 7 9 10 11 12 13 15 16 21 24 25 28 29 30 # 2264 ffs c a 31 1 1 e # 2265 ffs c a 31 1 1 f # 2266 ffs c a 31 1 1 0 3 5 6 8 9 11 12 14 18 20 21 22 23 24 25 27 29 30 # 2267 ffs c a 32 0 0 e # 2268 ffs c a 32 0 0 f # 2269 ffs c a 32 0 0 5 7 8 10 11 12 14 17 19 20 22 23 26 28 29 30 # 2270 ffs c a 32 0 1 e # 2271 ffs c a 32 0 1 f # 2272 ffs c a 32 0 1 2 3 5 10 12 13 14 16 20 21 23 30 # 2273 ffs c a 32 1 0 e # 2274 ffs c a 32 1 0 f # 2275 ffs c a 32 1 0 1 3 4 5 6 7 9 11 12 13 18 19 22 23 27 31 # 2276 ffs c a 32 1 1 e # 2277 ffs c a 32 1 1 f # 2278 ffs c a 32 1 1 2 3 5 6 8 13 14 17 19 22 23 24 28 29 31 # 2279 ffs c a 33 0 0 e # 2280 ffs c a 33 0 0 f # 2281 ffs c a 33 0 0 1 2 4 5 6 10 13 14 16 20 21 22 23 26 27 30 # 2282 ffs c a 33 0 1 e # 2283 ffs c a 33 0 1 f # 2284 ffs c a 33 0 1 0 1 2 3 4 9 10 12 17 20 21 22 24 25 28 29 31 32 # 2285 ffs c a 33 1 0 e # 2286 ffs c a 33 1 0 f # 2287 ffs c a 33 1 0 1 2 3 4 7 9 13 14 16 18 19 22 23 24 26 27 28 30 # 2288 ffs c a 33 1 1 e # 2289 ffs c a 33 1 1 f # 2290 ffs c a 33 1 1 0 4 5 7 9 12 18 19 21 27 28 31 32 # 2291 ffs c a 63 0 0 e # 2292 ffs c a 63 0 0 f # 2293 ffs c a 63 0 0 1 6 11 13 15 16 18 20 22 23 24 25 26 29 30 31 32 36 38 43 45 46 47 48 49 51 54 55 57 59 # 2294 ffs c a 63 0 1 e # 2295 ffs c a 63 0 1 f # 2296 ffs c a 63 0 1 1 2 5 7 10 12 13 15 16 17 21 25 27 29 31 35 38 39 40 41 43 49 50 51 53 54 55 56 58 # 2297 ffs c a 63 1 0 e # 2298 ffs c a 63 1 0 f # 2299 ffs c a 63 1 0 0 3 4 5 8 10 11 12 15 16 17 18 21 24 25 26 31 32 33 34 36 38 39 41 42 44 45 47 48 49 52 53 54 56 57 58 59 60 62 # 2300 ffs c a 63 1 1 e # 2301 ffs c a 63 1 1 f # 2302 ffs c a 63 1 1 0 2 5 9 10 11 12 13 14 15 16 17 18 20 21 25 26 28 31 34 35 38 39 41 44 46 47 49 52 53 56 58 59 60 # 2303 ffs c a 64 0 0 e # 2304 ffs c a 64 0 0 f # 2305 ffs c a 64 0 0 3 4 5 6 8 9 10 12 15 16 20 22 24 26 27 28 32 33 38 41 42 45 49 50 52 55 56 58 59 60 61 62 # 2306 ffs c a 64 0 1 e # 2307 ffs c a 64 0 1 f # 2308 ffs c a 64 0 1 0 2 5 6 7 8 10 14 15 16 17 18 19 22 23 24 25 26 27 28 29 32 34 40 42 45 51 52 54 55 59 61 # 2309 ffs c a 64 1 0 e # 2310 ffs c a 64 1 0 f # 2311 ffs c a 64 1 0 0 2 4 5 7 11 12 16 17 21 25 27 29 30 33 34 35 36 38 39 41 42 45 46 48 50 51 53 55 56 57 60 62 # 2312 ffs c a 64 1 1 e # 2313 ffs c a 64 1 1 f # 2314 ffs c a 64 1 1 3 4 5 6 8 9 10 12 13 14 16 21 22 24 27 28 32 38 40 42 43 45 49 51 52 54 55 56 58 59 60 61 # 2315 ffs c a 65 0 0 e # 2316 ffs c a 65 0 0 f # 2317 ffs c a 65 0 0 2 3 4 5 7 13 14 20 22 23 24 25 26 28 29 30 33 36 37 38 39 46 47 50 53 54 56 57 58 60 61 62 64 # 2318 ffs c a 65 0 1 e # 2319 ffs c a 65 0 1 f # 2320 ffs c a 65 0 1 0 3 6 7 8 13 14 15 16 17 19 20 22 23 27 28 29 30 31 34 35 36 37 38 39 41 42 43 44 45 47 48 49 50 51 53 56 57 59 60 62 63 # 2321 ffs c a 65 1 0 e # 2322 ffs c a 65 1 0 f # 2323 ffs c a 65 1 0 0 1 5 6 8 11 12 15 18 20 23 24 30 31 33 35 36 39 40 41 42 43 47 50 52 54 55 59 60 61 62 64 # 2324 ffs c a 65 1 1 e # 2325 ffs c a 65 1 1 f # 2326 ffs c a 65 1 1 1 2 5 7 8 9 11 13 15 16 17 18 20 21 22 34 35 38 39 41 42 43 44 46 47 49 51 52 53 55 59 60 64 # 2327 ffs c a 211 0 0 e # 2328 ffs c a 211 0 0 f # 2329 ffs c a 211 0 0 2 4 5 6 7 8 10 13 14 15 17 18 20 21 22 24 28 29 31 40 42 43 46 49 50 54 56 58 59 62 66 67 69 70 73 78 80 81 82 86 88 89 90 91 93 95 96 102 105 106 109 110 112 113 114 115 117 119 120 122 123 124 126 127 128 131 132 135 142 151 152 154 155 156 157 158 159 160 162 163 166 167 168 172 173 175 177 179 181 182 183 185 186 192 193 197 198 199 203 205 206 207 # 2330 ffs c a 211 0 1 e # 2331 ffs c a 211 0 1 f # 2332 ffs c a 211 0 1 0 3 4 5 9 10 11 12 13 15 16 18 19 25 29 30 33 34 36 38 41 45 48 53 54 55 56 61 63 64 67 68 73 74 75 76 77 79 81 83 86 88 89 92 93 95 97 98 102 105 108 110 111 114 115 118 125 127 131 132 138 139 140 141 142 144 145 146 149 150 151 155 156 157 158 164 166 168 171 176 178 182 183 184 186 187 188 189 196 199 200 201 202 203 204 207 209 # 2333 ffs c a 211 1 0 e # 2334 ffs c a 211 1 0 f # 2335 ffs c a 211 1 0 0 7 9 11 13 16 18 19 21 22 24 25 27 30 32 34 36 37 40 42 46 47 48 49 50 51 57 58 59 61 65 67 68 69 71 77 80 84 94 95 98 100 101 105 106 107 108 110 114 116 119 120 121 126 127 129 132 133 134 135 138 140 141 142 144 147 148 149 150 152 154 155 157 158 159 161 164 168 169 172 174 175 176 182 183 185 186 187 189 190 191 192 196 198 202 205 206 208 210 # 2336 ffs c a 211 1 1 e # 2337 ffs c a 211 1 1 f # 2338 ffs c a 211 1 1 1 2 8 9 11 12 13 17 18 19 22 24 25 27 28 29 30 31 32 35 36 39 42 47 48 50 52 53 54 63 64 66 67 68 70 72 73 74 75 76 78 79 80 85 86 87 90 92 96 99 100 101 104 105 107 110 111 112 113 115 116 118 120 121 122 123 124 127 128 133 134 136 138 139 140 141 142 144 147 148 150 151 152 153 154 155 156 157 158 159 163 164 167 168 170 172 173 174 175 180 183 185 186 188 190 192 195 197 200 202 203 204 205 206 # 2339 ffs c a 224 0 0 e # 2340 ffs c a 224 0 0 f # 2341 ffs c a 224 0 0 0 1 2 3 4 5 8 9 12 14 16 18 22 25 28 30 31 33 34 41 43 48 52 54 55 57 63 65 66 67 70 76 77 78 82 84 87 89 91 94 97 99 104 105 106 108 109 110 112 113 115 117 118 119 121 122 123 127 130 132 133 134 136 137 138 140 141 142 143 144 147 148 150 155 156 158 160 162 163 165 168 170 175 176 177 178 179 180 181 186 188 189 191 194 195 196 197 198 199 201 207 210 213 218 # 2342 ffs c a 224 0 1 e # 2343 ffs c a 224 0 1 f # 2344 ffs c a 224 0 1 8 10 12 16 17 20 21 22 26 27 28 32 34 35 36 37 39 42 44 46 47 53 54 55 57 61 63 66 67 70 71 72 73 75 76 77 78 87 88 89 90 95 96 98 99 100 102 103 105 106 108 109 112 113 114 117 118 120 121 125 126 128 129 131 133 136 138 139 140 143 145 148 150 151 154 155 156 157 158 159 160 162 163 175 177 180 181 186 189 191 193 194 198 199 200 201 205 206 207 213 214 216 217 218 220 221 223 # 2345 ffs c a 224 1 0 e # 2346 ffs c a 224 1 0 f # 2347 ffs c a 224 1 0 0 4 6 10 11 12 13 14 16 18 20 21 22 23 32 33 34 36 37 38 40 41 42 43 45 48 50 51 54 55 56 58 60 62 64 65 66 67 69 72 76 77 78 79 82 83 84 85 87 91 92 95 98 99 101 105 108 112 114 115 118 120 123 124 125 127 130 131 133 136 137 138 140 141 142 143 145 150 154 159 160 161 162 163 164 167 168 171 173 174 176 178 179 181 183 187 188 190 193 197 205 206 209 211 212 214 216 217 222 223 # 2348 ffs c a 224 1 1 e # 2349 ffs c a 224 1 1 f # 2350 ffs c a 224 1 1 3 5 6 7 11 14 20 21 22 24 26 28 29 33 34 35 36 37 38 39 41 42 45 46 48 50 51 56 58 62 63 65 66 67 68 70 71 73 75 80 81 83 88 89 90 91 94 99 100 102 107 108 111 114 115 116 117 119 120 121 122 126 127 128 130 131 132 133 135 137 138 141 142 143 145 146 148 149 151 152 153 154 157 160 161 163 164 165 166 167 168 171 174 175 176 179 181 184 186 190 194 195 197 198 199 202 203 205 206 211 212 213 215 218 221 222 223 # 2351 ffs c a 247 0 0 e # 2352 ffs c a 247 0 0 f # 2353 ffs c a 247 0 0 0 1 2 5 7 8 12 14 18 20 26 27 28 30 31 35 40 41 42 43 45 46 47 48 49 51 55 56 57 58 59 62 63 64 65 69 72 74 76 77 78 79 80 82 84 86 89 91 93 96 97 100 101 102 103 105 108 111 114 117 118 119 120 121 123 124 125 127 128 129 131 132 134 135 136 139 143 144 149 150 152 155 158 163 164 166 167 168 172 173 178 179 181 187 188 192 193 195 199 201 204 206 208 213 214 220 223 225 226 228 233 234 238 240 242 244 245 246 # 2354 ffs c a 247 0 1 e # 2355 ffs c a 247 0 1 f # 2356 ffs c a 247 0 1 2 6 8 9 10 12 14 18 19 20 23 25 26 27 28 31 32 35 36 39 42 43 45 47 50 51 52 54 56 57 58 59 62 63 64 66 67 68 70 71 73 74 75 78 79 81 82 84 85 87 90 91 92 94 95 96 97 98 100 101 107 108 110 117 119 121 128 130 131 135 136 137 138 142 143 144 146 150 151 155 156 157 158 159 161 162 164 167 169 171 173 178 180 181 183 186 187 189 190 194 196 199 202 203 207 208 209 212 215 216 218 220 221 222 225 226 227 228 230 232 233 234 236 238 239 243 244 245 246 # 2357 ffs c a 247 1 0 e # 2358 ffs c a 247 1 0 f # 2359 ffs c a 247 1 0 0 1 2 3 4 5 6 8 11 13 14 15 17 18 19 20 21 22 25 26 28 36 38 39 40 42 45 46 47 48 49 52 54 55 57 59 63 64 65 67 70 71 72 73 75 76 78 80 82 83 85 86 87 88 89 90 91 94 97 98 101 103 105 106 108 109 110 111 112 113 114 116 121 123 130 132 138 145 146 147 149 151 152 153 154 158 161 162 166 168 169 170 173 176 181 184 188 190 192 193 194 197 198 203 205 209 210 212 214 215 216 218 219 221 222 225 226 227 230 231 232 234 237 238 239 240 241 245 # 2360 ffs c a 247 1 1 e # 2361 ffs c a 247 1 1 f # 2362 ffs c a 247 1 1 4 5 9 10 17 19 22 23 24 25 30 31 33 36 42 43 44 45 48 49 51 52 54 55 59 62 63 68 69 70 77 78 84 89 91 94 98 100 104 105 110 111 113 117 119 120 121 122 124 125 126 128 130 131 132 135 136 137 140 145 146 148 151 152 153 155 156 157 159 162 165 168 169 170 171 177 178 185 187 188 189 190 192 194 198 201 202 206 207 209 213 214 216 217 220 222 223 224 228 231 235 236 238 239 243 # 2363 ffs c a 0 0 0 e # 2364 ffc c a 0 0 0 e # 2365 ffc c a 0 0 0 # 2366 ffc c a 0 0 1 e # 2367 ffc c a 0 0 1 e # 2368 ffc c a 0 0 1 # 2369 ffc c a 0 1 0 e # 2370 ffc c a 0 1 0 e # 2371 ffc c a 0 1 0 # 2372 ffc c a 0 1 1 e # 2373 ffc c a 0 1 1 e # 2374 ffc c a 0 1 1 # 2375 ffc c a 1 0 0 e # 2376 ffc c a 1 0 0 f # 2377 ffc c a 1 0 0 0 # 2378 ffc c a 1 0 1 e # 2379 ffc c a 1 0 1 f # 2380 ffc c a 1 0 1 # 2381 ffc c a 1 1 0 e # 2382 ffc c a 1 1 0 f # 2383 ffc c a 1 1 0 0 # 2384 ffc c a 1 1 1 e # 2385 ffc c a 1 1 1 f # 2386 ffc c a 1 1 1 # 2387 ffc c a 31 0 0 e # 2388 ffc c a 31 0 0 f # 2389 ffc c a 31 0 0 0 1 3 4 5 6 7 13 14 16 18 19 20 23 26 28 29 30 # 2390 ffc c a 31 0 1 e # 2391 ffc c a 31 0 1 f # 2392 ffc c a 31 0 1 0 1 5 9 10 11 13 14 16 21 22 27 28 29 30 # 2393 ffc c a 31 1 0 e # 2394 ffc c a 31 1 0 f # 2395 ffc c a 31 1 0 0 1 2 5 6 7 10 12 13 17 18 19 22 23 24 25 26 28 29 # 2396 ffc c a 31 1 1 e # 2397 ffc c a 31 1 1 f # 2398 ffc c a 31 1 1 0 1 3 4 6 7 8 12 14 16 17 18 19 23 26 27 29 30 # 2399 ffc c a 32 0 0 e # 2400 ffc c a 32 0 0 f # 2401 ffc c a 32 0 0 1 4 6 10 16 17 19 21 25 27 30 # 2402 ffc c a 32 0 1 e # 2403 ffc c a 32 0 1 f # 2404 ffc c a 32 0 1 0 2 3 4 5 7 8 13 14 16 19 28 30 31 # 2405 ffc c a 32 1 0 e # 2406 ffc c a 32 1 0 f # 2407 ffc c a 32 1 0 0 1 5 8 9 10 12 14 16 19 20 21 23 25 27 30 # 2408 ffc c a 32 1 1 e # 2409 ffc c a 32 1 1 f # 2410 ffc c a 32 1 1 2 3 4 7 9 11 16 17 20 21 23 24 25 26 29 31 # 2411 ffc c a 33 0 0 e # 2412 ffc c a 33 0 0 f # 2413 ffc c a 33 0 0 0 3 5 6 7 8 10 12 15 17 19 21 22 24 25 28 29 30 31 # 2414 ffc c a 33 0 1 e # 2415 ffc c a 33 0 1 f # 2416 ffc c a 33 0 1 1 2 4 6 12 13 14 17 18 19 20 22 23 24 25 27 28 30 32 # 2417 ffc c a 33 1 0 e # 2418 ffc c a 33 1 0 f # 2419 ffc c a 33 1 0 0 1 2 4 5 7 9 10 12 21 25 27 28 29 30 31 # 2420 ffc c a 33 1 1 e # 2421 ffc c a 33 1 1 f # 2422 ffc c a 33 1 1 1 6 8 9 13 15 16 17 19 24 28 29 30 32 # 2423 ffc c a 63 0 0 e # 2424 ffc c a 63 0 0 f # 2425 ffc c a 63 0 0 1 4 5 7 9 11 14 17 19 21 22 23 24 26 27 30 34 35 38 39 41 42 45 46 47 48 50 52 54 55 56 57 58 59 60 61 # 2426 ffc c a 63 0 1 e # 2427 ffc c a 63 0 1 f # 2428 ffc c a 63 0 1 4 5 6 7 9 11 15 16 17 18 20 23 24 25 26 27 28 29 33 36 38 42 43 44 46 47 50 51 52 54 55 58 # 2429 ffc c a 63 1 0 e # 2430 ffc c a 63 1 0 f # 2431 ffc c a 63 1 0 2 3 6 8 11 12 13 15 17 18 20 21 22 28 30 32 33 34 35 37 40 41 43 44 45 46 48 54 55 56 59 60 62 # 2432 ffc c a 63 1 1 e # 2433 ffc c a 63 1 1 f # 2434 ffc c a 63 1 1 2 4 5 6 8 9 11 12 16 17 18 25 27 29 30 31 32 33 35 36 38 44 45 46 47 48 52 53 55 57 58 59 60 61 62 # 2435 ffc c a 64 0 0 e # 2436 ffc c a 64 0 0 f # 2437 ffc c a 64 0 0 0 1 4 5 9 11 12 14 16 18 20 22 23 24 25 26 27 29 30 32 34 35 38 39 42 43 44 45 47 48 50 51 52 53 54 55 57 58 59 60 61 63 # 2438 ffc c a 64 0 1 e # 2439 ffc c a 64 0 1 f # 2440 ffc c a 64 0 1 1 2 3 5 6 9 11 13 14 17 19 22 23 26 36 37 38 40 45 46 47 48 50 52 56 58 62 63 # 2441 ffc c a 64 1 0 e # 2442 ffc c a 64 1 0 f # 2443 ffc c a 64 1 0 1 4 6 7 8 9 10 12 13 14 15 16 17 18 19 22 25 27 28 30 33 34 37 38 39 40 41 43 44 47 48 52 57 61 62 # 2444 ffc c a 64 1 1 e # 2445 ffc c a 64 1 1 f # 2446 ffc c a 64 1 1 0 1 2 5 8 10 12 15 16 17 18 19 22 26 27 33 35 36 37 38 41 42 43 46 48 49 54 55 59 60 61 62 # 2447 ffc c a 65 0 0 e # 2448 ffc c a 65 0 0 f # 2449 ffc c a 65 0 0 0 2 5 6 8 9 14 16 22 23 24 26 27 29 30 31 33 36 38 39 43 44 46 47 48 50 52 53 57 59 60 62 63 # 2450 ffc c a 65 0 1 e # 2451 ffc c a 65 0 1 f # 2452 ffc c a 65 0 1 3 7 8 9 10 12 14 21 22 24 25 31 32 33 36 37 39 40 41 42 43 45 47 51 59 60 61 64 # 2453 ffc c a 65 1 0 e # 2454 ffc c a 65 1 0 f # 2455 ffc c a 65 1 0 0 1 2 3 4 7 14 15 16 20 22 24 26 27 28 30 31 34 36 41 42 43 45 46 50 51 52 55 56 58 59 60 62 63 64 # 2456 ffc c a 65 1 1 e # 2457 ffc c a 65 1 1 f # 2458 ffc c a 65 1 1 0 2 3 13 15 19 20 22 23 24 25 26 28 29 31 32 34 36 38 40 42 44 46 48 52 55 60 61 63 # 2459 ffc c a 211 0 0 e # 2460 ffc c a 211 0 0 f # 2461 ffc c a 211 0 0 0 5 6 11 13 15 17 19 23 25 26 29 33 38 39 40 42 43 46 47 50 51 55 59 60 61 62 66 67 68 69 70 71 73 74 75 76 78 80 81 82 87 88 91 94 95 96 97 98 99 101 102 103 108 110 111 112 113 114 118 119 120 122 123 124 125 126 127 130 131 133 134 135 141 142 144 145 146 147 149 150 151 153 154 157 159 162 164 165 168 174 177 179 182 183 184 185 186 191 198 200 202 204 205 206 209 210 # 2462 ffc c a 211 0 1 e # 2463 ffc c a 211 0 1 f # 2464 ffc c a 211 0 1 0 2 3 6 7 8 9 11 13 14 15 16 18 21 22 23 24 25 26 27 29 30 32 33 34 37 38 40 42 44 45 47 49 51 52 54 55 56 57 58 61 66 67 69 70 71 72 73 75 76 78 89 90 91 92 96 97 98 99 100 101 102 103 104 106 107 108 109 112 113 114 117 118 119 120 121 123 124 125 126 127 128 129 130 132 133 135 136 137 138 139 140 142 143 145 147 148 150 151 152 155 156 158 159 170 172 173 174 176 185 191 192 195 196 197 202 205 206 207 208 # 2465 ffc c a 211 1 0 e # 2466 ffc c a 211 1 0 f # 2467 ffc c a 211 1 0 2 3 4 8 9 10 14 18 19 20 21 23 26 29 30 31 34 36 38 39 40 41 44 45 46 49 50 52 55 56 57 59 60 61 62 66 68 69 71 72 75 78 79 80 81 83 86 89 92 93 94 97 98 100 102 103 104 115 116 117 120 122 123 125 127 128 131 132 134 138 139 140 141 145 148 150 151 152 153 154 156 159 160 161 162 164 165 166 168 169 171 172 173 174 176 178 180 181 183 184 185 187 189 190 191 193 198 203 209 210 # 2468 ffc c a 211 1 1 e # 2469 ffc c a 211 1 1 f # 2470 ffc c a 211 1 1 1 2 3 5 9 10 13 14 15 18 19 22 24 26 28 29 30 31 33 34 35 36 43 44 46 49 50 51 53 59 60 62 65 69 70 72 75 77 79 80 82 83 88 89 91 95 97 99 101 107 109 110 112 113 118 119 122 124 125 128 130 134 135 136 140 143 144 145 149 153 154 155 156 159 160 162 165 166 168 171 172 173 174 175 176 178 179 188 189 190 192 193 194 196 197 198 199 202 203 205 206 207 208 209 210 # 2471 ffc c a 224 0 0 e # 2472 ffc c a 224 0 0 f # 2473 ffc c a 224 0 0 1 3 5 8 9 12 14 17 19 20 22 23 24 26 27 30 31 35 37 39 40 41 43 48 51 52 54 55 56 57 62 63 67 69 70 71 73 74 75 77 81 84 87 88 89 90 92 93 94 99 101 102 103 104 109 111 113 116 117 119 126 127 128 131 134 136 140 141 144 145 146 147 150 151 153 155 159 160 161 162 163 165 167 168 169 171 172 179 180 181 182 184 186 188 195 196 197 198 199 201 202 206 207 208 209 211 212 214 215 217 222 223 # 2474 ffc c a 224 0 1 e # 2475 ffc c a 224 0 1 f # 2476 ffc c a 224 0 1 0 2 3 4 6 9 10 11 14 18 21 23 24 25 29 31 34 36 38 44 45 46 49 50 51 52 54 55 57 60 61 64 67 68 70 71 72 75 80 83 84 85 87 88 89 91 93 97 99 100 102 103 107 108 109 111 112 115 117 118 120 125 126 129 135 136 137 139 141 145 147 148 149 151 153 154 157 158 159 160 163 164 165 166 167 170 171 172 177 178 180 182 183 184 185 188 192 193 195 196 198 201 204 205 206 209 212 215 217 221 222 # 2477 ffc c a 224 1 0 e # 2478 ffc c a 224 1 0 f # 2479 ffc c a 224 1 0 0 3 6 7 8 11 12 16 17 18 19 21 22 23 24 26 27 29 32 36 39 41 42 45 46 48 49 51 52 54 56 57 61 62 65 66 67 70 71 75 78 80 83 85 88 89 94 95 97 98 103 104 108 110 111 112 113 116 117 119 121 122 123 125 126 130 131 132 135 136 137 145 149 150 151 152 153 154 156 157 158 161 162 164 167 169 171 172 177 179 180 182 183 185 186 189 191 194 196 200 203 204 205 209 210 213 214 215 217 218 219 220 222 # 2480 ffc c a 224 1 1 e # 2481 ffc c a 224 1 1 f # 2482 ffc c a 224 1 1 0 1 2 3 4 5 7 9 10 12 14 16 17 22 23 25 26 29 37 39 40 43 44 45 46 47 48 50 52 53 56 58 60 62 66 67 72 73 75 76 80 82 83 85 89 90 93 94 95 97 99 101 104 105 106 108 110 111 112 113 116 117 118 119 120 121 123 124 125 126 128 131 133 135 136 139 140 143 145 147 148 150 158 159 162 163 166 167 170 172 174 175 178 179 181 183 185 186 189 191 192 196 201 208 213 214 216 217 218 220 222 223 # 2483 ffc c a 247 0 0 e # 2484 ffc c a 247 0 0 f # 2485 ffc c a 247 0 0 0 2 3 4 6 12 13 14 15 16 18 21 22 24 25 26 27 29 34 35 36 37 39 41 48 50 54 57 58 62 63 64 65 66 67 68 69 70 72 74 76 77 78 79 84 86 88 89 90 97 98 99 100 101 103 104 105 106 107 108 109 113 114 116 119 124 125 126 127 128 129 130 131 141 146 148 151 153 156 160 165 166 167 170 172 174 176 177 178 180 185 186 189 190 193 194 195 196 197 199 200 203 204 207 212 213 214 216 218 219 223 225 228 229 231 233 234 240 242 243 # 2486 ffc c a 247 0 1 e # 2487 ffc c a 247 0 1 f # 2488 ffc c a 247 0 1 0 1 2 3 8 10 12 13 15 19 21 22 23 26 28 31 34 35 36 37 38 39 41 45 46 47 48 55 56 58 59 63 64 67 70 74 75 76 77 79 81 85 91 92 93 95 96 97 98 101 102 103 104 107 109 110 112 114 118 119 124 125 126 127 128 129 133 137 139 140 143 144 151 153 156 159 160 161 164 166 170 171 172 174 175 177 179 181 182 183 189 190 194 196 197 199 202 204 205 208 209 211 212 214 217 219 220 224 229 231 237 239 240 241 242 243 244 245 246 # 2489 ffc c a 247 1 0 e # 2490 ffc c a 247 1 0 f # 2491 ffc c a 247 1 0 1 5 6 7 8 12 14 15 16 19 31 32 33 36 40 42 43 44 46 48 52 53 54 61 66 68 70 72 76 77 78 79 82 83 85 87 88 89 94 95 96 97 99 101 103 111 112 114 116 117 119 120 124 127 130 131 133 134 135 139 140 141 142 143 144 147 150 152 155 156 157 158 161 163 164 165 166 171 172 173 174 175 177 178 179 181 185 190 191 195 207 210 211 215 216 217 224 225 227 228 229 233 234 235 238 240 241 244 # 2492 ffc c a 247 1 1 e # 2493 ffc c a 247 1 1 f # 2494 ffc c a 247 1 1 0 2 6 7 14 15 17 18 20 22 25 26 27 28 31 35 36 37 38 43 44 46 48 49 51 55 58 59 62 63 64 65 66 67 68 69 73 76 79 81 82 83 86 87 88 89 90 101 102 103 106 108 115 116 118 119 122 123 124 129 130 131 132 133 138 140 142 144 147 148 152 155 156 157 160 162 163 166 167 168 169 171 172 175 176 177 179 181 183 185 186 188 189 191 196 199 202 204 206 211 214 215 219 221 222 223 228 231 232 235 236 240 242 244 245 # 2495 ffc c a 0 0 0 e # 2496 population c a 0 0 0 e # 2497 population c a 0 0 0 # 2498 population c a 0 0 1 e # 2499 population c a 0 0 1 e # 2500 population c a 0 0 1 # 2501 population c a 0 1 0 e # 2502 population c a 0 1 0 e # 2503 population c a 0 1 0 # 2504 population c a 0 1 1 e # 2505 population c a 0 1 1 e # 2506 population c a 0 1 1 # 2507 population c a 1 0 0 e # 2508 population c a 1 0 0 f # 2509 population c a 1 0 0 # 2510 population c a 1 0 1 e # 2511 population c a 1 0 1 f # 2512 population c a 1 0 1 # 2513 population c a 1 1 0 e # 2514 population c a 1 1 0 f # 2515 population c a 1 1 0 # 2516 population c a 1 1 1 e # 2517 population c a 1 1 1 f # 2518 population c a 1 1 1 # 2519 population c a 31 0 0 e # 2520 population c a 31 0 0 f # 2521 population c a 31 0 0 0 2 6 7 8 10 11 15 16 21 24 25 26 27 # 2522 population c a 31 0 1 e # 2523 population c a 31 0 1 f # 2524 population c a 31 0 1 0 4 7 10 12 13 14 15 16 18 21 23 26 28 29 30 # 2525 population c a 31 1 0 e # 2526 population c a 31 1 0 f # 2527 population c a 31 1 0 0 2 8 9 10 12 13 16 20 22 23 24 26 28 29 30 # 2528 population c a 31 1 1 e # 2529 population c a 31 1 1 f # 2530 population c a 31 1 1 0 2 3 4 7 10 11 13 15 16 17 20 22 23 # 2531 population c a 32 0 0 e # 2532 population c a 32 0 0 f # 2533 population c a 32 0 0 0 3 5 9 14 15 21 23 24 25 28 29 30 31 # 2534 population c a 32 0 1 e # 2535 population c a 32 0 1 f # 2536 population c a 32 0 1 2 6 7 9 11 14 16 17 18 19 20 22 23 # 2537 population c a 32 1 0 e # 2538 population c a 32 1 0 f # 2539 population c a 32 1 0 0 2 4 5 8 9 10 11 12 13 15 16 18 20 21 28 29 30 # 2540 population c a 32 1 1 e # 2541 population c a 32 1 1 f # 2542 population c a 32 1 1 0 1 2 3 4 5 6 8 9 11 12 13 18 20 22 24 26 28 29 30 31 # 2543 population c a 33 0 0 e # 2544 population c a 33 0 0 f # 2545 population c a 33 0 0 0 1 2 4 5 6 8 13 14 15 16 17 19 23 25 28 # 2546 population c a 33 0 1 e # 2547 population c a 33 0 1 f # 2548 population c a 33 0 1 1 2 3 4 6 8 10 13 19 20 23 24 25 29 30 32 # 2549 population c a 33 1 0 e # 2550 population c a 33 1 0 f # 2551 population c a 33 1 0 0 2 6 10 12 13 14 17 19 20 21 22 23 26 31 32 # 2552 population c a 33 1 1 e # 2553 population c a 33 1 1 f # 2554 population c a 33 1 1 3 5 7 9 10 12 14 15 17 18 20 22 26 27 28 29 30 32 # 2555 population c a 63 0 0 e # 2556 population c a 63 0 0 f # 2557 population c a 63 0 0 3 4 5 7 8 9 10 11 12 13 15 17 18 19 20 27 29 30 31 34 39 42 47 50 52 54 55 56 58 61 62 # 2558 population c a 63 0 1 e # 2559 population c a 63 0 1 f # 2560 population c a 63 0 1 0 2 5 6 12 13 14 17 19 20 22 23 26 28 29 31 32 38 40 42 43 45 47 48 50 52 53 57 58 60 # 2561 population c a 63 1 0 e # 2562 population c a 63 1 0 f # 2563 population c a 63 1 0 0 2 4 9 13 16 17 20 24 26 30 31 32 33 38 39 41 42 44 46 47 49 50 54 55 56 57 60 61 # 2564 population c a 63 1 1 e # 2565 population c a 63 1 1 f # 2566 population c a 63 1 1 0 1 4 5 6 7 9 10 11 12 15 16 18 20 22 23 25 26 28 29 30 32 34 35 37 40 43 45 51 54 55 57 59 60 61 # 2567 population c a 64 0 0 e # 2568 population c a 64 0 0 f # 2569 population c a 64 0 0 5 6 7 8 9 13 14 15 20 21 22 24 25 26 27 29 31 32 33 36 37 40 41 42 44 45 47 51 56 60 61 63 # 2570 population c a 64 0 1 e # 2571 population c a 64 0 1 f # 2572 population c a 64 0 1 1 4 5 6 7 8 9 12 15 16 17 18 20 23 24 25 27 29 30 31 32 37 39 40 44 45 47 48 51 52 53 54 55 59 62 63 # 2573 population c a 64 1 0 e # 2574 population c a 64 1 0 f # 2575 population c a 64 1 0 3 5 6 7 13 15 18 23 24 25 26 27 28 29 30 32 37 41 42 44 45 50 51 52 53 56 59 60 63 # 2576 population c a 64 1 1 e # 2577 population c a 64 1 1 f # 2578 population c a 64 1 1 0 6 7 11 13 15 16 17 18 19 20 23 25 29 33 35 40 41 45 48 49 51 55 57 60 61 62 63 # 2579 population c a 65 0 0 e # 2580 population c a 65 0 0 f # 2581 population c a 65 0 0 2 3 8 9 13 14 16 18 19 20 22 23 25 28 33 34 35 40 41 42 45 46 48 49 51 53 54 55 56 58 59 62 63 # 2582 population c a 65 0 1 e # 2583 population c a 65 0 1 f # 2584 population c a 65 0 1 0 1 5 7 9 13 16 17 19 20 22 23 25 28 30 31 34 35 36 38 40 42 44 45 46 47 48 50 51 53 54 55 56 60 61 # 2585 population c a 65 1 0 e # 2586 population c a 65 1 0 f # 2587 population c a 65 1 0 1 4 5 7 9 10 12 13 15 16 19 20 22 26 30 31 33 35 36 37 38 40 41 42 44 47 49 50 53 54 55 56 57 60 61 64 # 2588 population c a 65 1 1 e # 2589 population c a 65 1 1 f # 2590 population c a 65 1 1 2 5 6 8 11 12 15 17 19 20 21 22 28 29 32 33 36 39 40 41 42 43 44 46 51 56 57 58 60 61 62 63 64 # 2591 population c a 211 0 0 e # 2592 population c a 211 0 0 f # 2593 population c a 211 0 0 1 2 3 5 6 9 11 12 14 15 16 17 19 21 22 28 29 32 34 37 38 39 41 51 53 55 57 60 61 63 69 71 72 73 74 78 79 80 81 82 83 84 86 88 89 91 92 93 95 97 99 100 101 103 107 108 109 112 115 121 123 124 125 126 130 134 135 136 139 141 145 147 148 155 159 160 162 163 164 165 166 167 173 174 177 182 183 184 185 186 189 190 191 193 194 195 196 197 198 200 202 204 206 209 210 # 2594 population c a 211 0 1 e # 2595 population c a 211 0 1 f # 2596 population c a 211 0 1 0 2 3 5 7 8 10 11 12 13 14 15 16 17 19 20 21 22 23 24 26 28 29 31 33 35 36 37 39 42 44 45 46 47 50 55 56 57 60 63 65 66 68 70 73 79 80 81 90 92 93 96 97 98 101 102 103 107 108 110 111 114 115 116 120 121 123 124 125 127 128 129 131 132 133 134 137 139 142 143 145 146 148 151 153 156 157 158 160 166 169 171 174 175 176 177 178 179 180 182 188 190 191 192 195 197 199 200 201 206 208 209 # 2597 population c a 211 1 0 e # 2598 population c a 211 1 0 f # 2599 population c a 211 1 0 0 2 4 6 10 11 12 15 16 22 24 27 32 35 39 42 45 49 50 53 54 56 60 63 64 65 66 70 71 73 75 76 77 79 80 81 84 87 88 89 90 91 94 95 97 99 103 104 105 106 107 109 110 112 115 116 117 119 120 122 123 124 125 126 128 131 133 134 139 141 145 147 148 149 150 158 159 160 161 162 164 165 166 169 171 172 179 181 185 186 187 190 193 199 201 205 209 # 2600 population c a 211 1 1 e # 2601 population c a 211 1 1 f # 2602 population c a 211 1 1 1 2 3 5 6 7 10 11 12 15 16 19 20 23 25 27 31 32 34 39 40 41 42 45 49 55 57 58 59 60 63 64 68 73 74 75 76 81 82 83 85 87 88 91 93 94 97 99 101 103 104 106 107 108 113 116 117 119 120 121 124 126 127 130 131 132 134 135 136 137 139 141 144 145 146 147 152 153 154 155 157 158 160 161 163 165 166 168 171 172 173 175 179 180 181 183 184 190 192 193 196 197 199 201 202 206 207 208 210 # 2603 population c a 224 0 0 e # 2604 population c a 224 0 0 f # 2605 population c a 224 0 0 5 6 7 9 12 14 17 18 20 22 24 27 28 29 30 34 35 39 41 45 46 47 48 51 52 54 55 58 60 61 62 65 66 67 70 71 73 75 76 77 78 79 87 88 91 94 95 97 98 101 103 104 106 107 109 111 113 115 117 118 122 123 124 125 126 127 128 129 132 133 139 141 142 143 144 151 154 157 160 161 162 166 167 168 172 175 177 178 179 180 184 186 188 189 190 191 192 193 198 202 204 208 210 211 212 215 216 219 223 # 2606 population c a 224 0 1 e # 2607 population c a 224 0 1 f # 2608 population c a 224 0 1 1 3 4 8 10 14 17 21 22 23 26 31 32 33 35 36 37 39 40 44 45 46 48 51 54 55 56 57 60 61 62 63 66 72 74 75 77 78 83 84 87 88 89 90 91 93 94 95 97 99 101 102 105 107 110 111 112 115 117 120 127 129 130 131 133 135 137 139 140 142 143 144 149 150 151 155 156 158 161 163 165 167 169 170 173 176 177 180 188 192 193 194 199 203 205 209 212 213 217 218 220 223 # 2609 population c a 224 1 0 e # 2610 population c a 224 1 0 f # 2611 population c a 224 1 0 0 4 5 9 11 12 13 14 21 22 24 25 26 27 28 30 31 32 35 37 39 40 41 43 46 47 48 54 58 60 61 64 65 68 70 71 75 76 78 79 80 84 85 86 87 89 94 97 98 99 101 102 103 108 111 117 119 120 124 125 126 128 133 137 138 139 140 141 142 145 146 147 148 149 150 151 154 157 158 161 162 164 165 166 168 169 171 172 173 176 177 179 180 182 185 186 187 189 190 191 192 193 195 196 198 200 203 206 213 214 215 216 217 218 220 221 222 # 2612 population c a 224 1 1 e # 2613 population c a 224 1 1 f # 2614 population c a 224 1 1 6 9 11 14 15 19 22 23 25 30 31 33 35 37 39 40 41 44 48 49 51 54 55 59 61 62 63 64 65 66 68 70 71 76 77 78 79 80 82 84 85 87 88 89 90 92 95 98 100 101 105 108 111 113 116 117 119 120 121 125 127 133 135 136 137 139 142 143 146 150 154 155 156 157 158 165 168 172 174 176 177 178 181 184 187 189 193 194 196 198 199 200 201 202 203 205 207 208 209 212 213 214 215 216 217 218 220 221 222 # 2615 population c a 247 0 0 e # 2616 population c a 247 0 0 f # 2617 population c a 247 0 0 0 1 2 4 7 11 13 14 16 17 20 23 25 26 28 29 31 36 40 41 42 43 45 48 49 50 52 53 56 59 60 61 62 65 66 67 72 76 78 79 88 89 91 92 99 102 104 106 107 108 109 111 113 115 117 119 120 121 122 123 124 125 126 130 131 132 133 139 140 141 142 146 147 148 150 151 152 155 159 160 165 166 168 171 172 176 179 181 185 187 189 190 192 194 196 197 198 199 200 202 203 204 209 211 212 213 216 217 220 221 223 226 228 229 231 232 234 235 239 242 243 # 2618 population c a 247 0 1 e # 2619 population c a 247 0 1 f # 2620 population c a 247 0 1 0 6 7 8 9 10 11 12 13 15 16 18 20 22 23 24 26 27 30 32 34 36 39 42 44 45 47 52 53 55 59 60 63 64 65 67 70 71 72 75 77 79 81 84 85 87 89 90 93 96 97 101 103 105 106 107 108 110 112 114 115 118 119 120 125 128 129 130 131 132 134 137 140 142 143 144 145 146 152 153 156 157 158 160 161 166 167 169 175 177 179 182 186 187 189 192 193 194 199 201 202 203 206 207 209 210 211 213 215 218 219 222 225 226 227 231 235 236 238 239 242 243 245 # 2621 population c a 247 1 0 e # 2622 population c a 247 1 0 f # 2623 population c a 247 1 0 7 8 9 13 14 15 16 19 21 24 25 26 27 29 31 34 35 36 39 41 44 47 48 49 51 52 53 55 56 61 62 65 69 70 72 74 81 84 86 87 88 90 91 93 96 97 98 101 102 104 105 106 109 110 111 112 113 114 117 123 125 129 131 132 135 136 137 140 141 142 143 144 145 148 150 152 153 155 156 161 164 166 167 178 180 182 183 185 186 189 191 192 193 195 198 199 201 203 206 208 209 210 211 214 215 218 219 222 226 229 231 232 234 235 236 237 239 242 243 244 245 # 2624 population c a 247 1 1 e # 2625 population c a 247 1 1 f # 2626 population c a 247 1 1 4 5 7 10 11 12 13 14 15 18 22 24 27 28 33 36 37 39 42 44 45 49 50 51 53 57 60 65 66 67 68 69 70 71 73 78 79 81 83 84 85 87 89 93 94 96 97 100 103 105 107 109 111 112 113 114 116 120 121 122 125 126 130 132 135 136 138 142 145 146 147 148 151 152 153 156 157 158 163 164 165 166 167 169 170 171 172 173 174 176 177 179 180 182 183 185 188 192 193 196 199 200 202 203 205 207 210 212 217 218 222 223 225 227 229 230 232 233 239 240 241 243 245 # 2627 population c a 0 0 0 e r 0 0 # 2628 is_empty_range c a 0 0 0 e r 0 0 # 2629 is_empty_range c a 0 0 0 e r 0 0 # 2630 is_empty_range c a 0 0 0 e r 0 0 # 2631 is_empty_range c a 0 0 0 e r 0 0 # 2632 is_empty_range c a 0 0 0 e r 0 0 # 2633 is_empty_range c a 0 0 0 e r 0 0 # 2634 is_empty_range c a 0 0 0 e r 0 0 # 2635 is_empty_range c a 0 0 0 e r 0 0 # 2636 is_empty_range c a 0 0 0 e r 0 0 # 2637 is_empty_range c a 0 0 0 r 0 0 # 2638 is_empty_range c a 0 0 0 r 0 0 # 2639 is_empty_range c a 0 0 0 r 0 0 # 2640 is_empty_range c a 0 0 0 r 0 0 # 2641 is_empty_range c a 0 0 0 r 0 0 # 2642 is_empty_range c a 0 0 1 e r 0 0 # 2643 is_empty_range c a 0 0 1 e r 0 0 # 2644 is_empty_range c a 0 0 1 e r 0 0 # 2645 is_empty_range c a 0 0 1 e r 0 0 # 2646 is_empty_range c a 0 0 1 e r 0 0 # 2647 is_empty_range c a 0 0 1 e r 0 0 # 2648 is_empty_range c a 0 0 1 e r 0 0 # 2649 is_empty_range c a 0 0 1 e r 0 0 # 2650 is_empty_range c a 0 0 1 e r 0 0 # 2651 is_empty_range c a 0 0 1 e r 0 0 # 2652 is_empty_range c a 0 0 1 r 0 0 # 2653 is_empty_range c a 0 0 1 r 0 0 # 2654 is_empty_range c a 0 0 1 r 0 0 # 2655 is_empty_range c a 0 0 1 r 0 0 # 2656 is_empty_range c a 0 0 1 r 0 0 # 2657 is_empty_range c a 0 1 0 e r 0 0 # 2658 is_empty_range c a 0 1 0 e r 0 0 # 2659 is_empty_range c a 0 1 0 e r 0 0 # 2660 is_empty_range c a 0 1 0 e r 0 0 # 2661 is_empty_range c a 0 1 0 e r 0 0 # 2662 is_empty_range c a 0 1 0 e r 0 0 # 2663 is_empty_range c a 0 1 0 e r 0 0 # 2664 is_empty_range c a 0 1 0 e r 0 0 # 2665 is_empty_range c a 0 1 0 e r 0 0 # 2666 is_empty_range c a 0 1 0 e r 0 0 # 2667 is_empty_range c a 0 1 0 r 0 0 # 2668 is_empty_range c a 0 1 0 r 0 0 # 2669 is_empty_range c a 0 1 0 r 0 0 # 2670 is_empty_range c a 0 1 0 r 0 0 # 2671 is_empty_range c a 0 1 0 r 0 0 # 2672 is_empty_range c a 0 1 1 e r 0 0 # 2673 is_empty_range c a 0 1 1 e r 0 0 # 2674 is_empty_range c a 0 1 1 e r 0 0 # 2675 is_empty_range c a 0 1 1 e r 0 0 # 2676 is_empty_range c a 0 1 1 e r 0 0 # 2677 is_empty_range c a 0 1 1 e r 0 0 # 2678 is_empty_range c a 0 1 1 e r 0 0 # 2679 is_empty_range c a 0 1 1 e r 0 0 # 2680 is_empty_range c a 0 1 1 e r 0 0 # 2681 is_empty_range c a 0 1 1 e r 0 0 # 2682 is_empty_range c a 0 1 1 r 0 0 # 2683 is_empty_range c a 0 1 1 r 0 0 # 2684 is_empty_range c a 0 1 1 r 0 0 # 2685 is_empty_range c a 0 1 1 r 0 0 # 2686 is_empty_range c a 0 1 1 r 0 0 # 2687 is_empty_range c a 1 0 0 e r 0 1 # 2688 is_empty_range c a 1 0 0 e r 1 0 # 2689 is_empty_range c a 1 0 0 e r 0 1 # 2690 is_empty_range c a 1 0 0 e r 0 1 # 2691 is_empty_range c a 1 0 0 e r 0 0 # 2692 is_empty_range c a 1 0 0 f r 0 1 # 2693 is_empty_range c a 1 0 0 f r 1 0 # 2694 is_empty_range c a 1 0 0 f r 0 0 # 2695 is_empty_range c a 1 0 0 f r 0 1 # 2696 is_empty_range c a 1 0 0 f r 0 0 # 2697 is_empty_range c a 1 0 0 r 0 1 # 2698 is_empty_range c a 1 0 0 r 0 0 # 2699 is_empty_range c a 1 0 0 r 0 0 # 2700 is_empty_range c a 1 0 0 0 r 0 1 # 2701 is_empty_range c a 1 0 0 r 0 0 # 2702 is_empty_range c a 1 0 1 e r 0 1 # 2703 is_empty_range c a 1 0 1 e r 0 0 # 2704 is_empty_range c a 1 0 1 e r 0 0 # 2705 is_empty_range c a 1 0 1 e r 0 1 # 2706 is_empty_range c a 1 0 1 e r 0 1 # 2707 is_empty_range c a 1 0 1 f r 0 1 # 2708 is_empty_range c a 1 0 1 f r 0 0 # 2709 is_empty_range c a 1 0 1 f r 0 0 # 2710 is_empty_range c a 1 0 1 f r 0 1 # 2711 is_empty_range c a 1 0 1 f r 0 0 # 2712 is_empty_range c a 1 0 1 0 r 0 1 # 2713 is_empty_range c a 1 0 1 r 1 0 # 2714 is_empty_range c a 1 0 1 0 r 0 1 # 2715 is_empty_range c a 1 0 1 0 r 0 1 # 2716 is_empty_range c a 1 0 1 0 r 0 0 # 2717 is_empty_range c a 1 1 0 e r 0 1 # 2718 is_empty_range c a 1 1 0 e r 0 0 # 2719 is_empty_range c a 1 1 0 e r 0 0 # 2720 is_empty_range c a 1 1 0 e r 0 1 # 2721 is_empty_range c a 1 1 0 e r 0 0 # 2722 is_empty_range c a 1 1 0 f r 0 1 # 2723 is_empty_range c a 1 1 0 f r 1 0 # 2724 is_empty_range c a 1 1 0 f r 0 0 # 2725 is_empty_range c a 1 1 0 f r 0 1 # 2726 is_empty_range c a 1 1 0 f r 0 0 # 2727 is_empty_range c a 1 1 0 0 r 0 1 # 2728 is_empty_range c a 1 1 0 r 1 0 # 2729 is_empty_range c a 1 1 0 r 0 1 # 2730 is_empty_range c a 1 1 0 r 0 1 # 2731 is_empty_range c a 1 1 0 r 0 1 # 2732 is_empty_range c a 1 1 1 e r 0 1 # 2733 is_empty_range c a 1 1 1 e r 1 0 # 2734 is_empty_range c a 1 1 1 e r 0 0 # 2735 is_empty_range c a 1 1 1 e r 0 1 # 2736 is_empty_range c a 1 1 1 e r 0 1 # 2737 is_empty_range c a 1 1 1 f r 0 1 # 2738 is_empty_range c a 1 1 1 f r 1 0 # 2739 is_empty_range c a 1 1 1 f r 0 1 # 2740 is_empty_range c a 1 1 1 f r 0 1 # 2741 is_empty_range c a 1 1 1 f r 0 0 # 2742 is_empty_range c a 1 1 1 0 r 0 1 # 2743 is_empty_range c a 1 1 1 0 r 1 0 # 2744 is_empty_range c a 1 1 1 0 r 0 1 # 2745 is_empty_range c a 1 1 1 r 0 1 # 2746 is_empty_range c a 1 1 1 r 0 0 # 2747 is_empty_range c a 31 0 0 e r 0 31 # 2748 is_empty_range c a 31 0 0 e r 27 14 # 2749 is_empty_range c a 31 0 0 e r 14 29 # 2750 is_empty_range c a 31 0 0 e r 3 31 # 2751 is_empty_range c a 31 0 0 e r 0 23 # 2752 is_empty_range c a 31 0 0 f r 0 31 # 2753 is_empty_range c a 31 0 0 f r 3 0 # 2754 is_empty_range c a 31 0 0 f r 9 13 # 2755 is_empty_range c a 31 0 0 f r 1 31 # 2756 is_empty_range c a 31 0 0 f r 0 14 # 2757 is_empty_range c a 31 0 0 1 5 13 15 17 18 19 20 21 22 25 26 27 28 30 r 0 31 # 2758 is_empty_range c a 31 0 0 0 2 4 5 6 7 11 12 16 19 22 25 29 30 r 19 9 # 2759 is_empty_range c a 31 0 0 0 1 3 4 6 8 9 12 13 16 20 21 22 23 25 28 29 30 r 6 10 # 2760 is_empty_range c a 31 0 0 1 2 4 12 13 15 18 21 22 24 27 r 5 31 # 2761 is_empty_range c a 31 0 0 0 2 3 7 8 9 15 16 18 21 24 25 26 28 30 r 0 6 # 2762 is_empty_range c a 31 0 1 e r 0 31 # 2763 is_empty_range c a 31 0 1 e r 0 0 # 2764 is_empty_range c a 31 0 1 e r 1 2 # 2765 is_empty_range c a 31 0 1 e r 8 31 # 2766 is_empty_range c a 31 0 1 e r 0 6 # 2767 is_empty_range c a 31 0 1 f r 0 31 # 2768 is_empty_range c a 31 0 1 f r 1 0 # 2769 is_empty_range c a 31 0 1 f r 1 10 # 2770 is_empty_range c a 31 0 1 f r 24 31 # 2771 is_empty_range c a 31 0 1 f r 0 11 # 2772 is_empty_range c a 31 0 1 0 1 2 3 5 8 9 10 11 13 14 17 19 27 28 r 0 31 # 2773 is_empty_range c a 31 0 1 0 3 7 8 9 10 11 14 15 16 19 20 21 22 24 26 27 r 27 18 # 2774 is_empty_range c a 31 0 1 2 3 4 5 6 7 8 14 15 16 17 18 20 24 26 28 30 r 16 19 # 2775 is_empty_range c a 31 0 1 0 1 3 4 9 11 12 16 17 23 26 29 r 20 31 # 2776 is_empty_range c a 31 0 1 0 1 2 3 4 6 8 11 12 13 15 16 18 20 24 25 26 27 28 29 30 r 0 22 # 2777 is_empty_range c a 31 1 0 e r 0 31 # 2778 is_empty_range c a 31 1 0 e r 26 14 # 2779 is_empty_range c a 31 1 0 e r 0 26 # 2780 is_empty_range c a 31 1 0 e r 27 31 # 2781 is_empty_range c a 31 1 0 e r 0 30 # 2782 is_empty_range c a 31 1 0 f r 0 31 # 2783 is_empty_range c a 31 1 0 f r 21 6 # 2784 is_empty_range c a 31 1 0 f r 0 1 # 2785 is_empty_range c a 31 1 0 f r 8 31 # 2786 is_empty_range c a 31 1 0 f r 0 30 # 2787 is_empty_range c a 31 1 0 1 2 3 5 8 10 11 14 17 22 24 28 r 0 31 # 2788 is_empty_range c a 31 1 0 0 2 3 4 5 8 9 10 15 16 17 23 27 29 30 r 19 13 # 2789 is_empty_range c a 31 1 0 0 2 3 5 8 9 17 18 19 20 21 26 27 29 30 r 1 27 # 2790 is_empty_range c a 31 1 0 0 1 2 3 5 6 10 11 12 13 16 20 21 22 23 24 25 27 28 30 r 27 31 # 2791 is_empty_range c a 31 1 0 1 3 4 5 10 11 15 17 20 23 24 27 28 r 0 11 # 2792 is_empty_range c a 31 1 1 e r 0 31 # 2793 is_empty_range c a 31 1 1 e r 5 3 # 2794 is_empty_range c a 31 1 1 e r 0 29 # 2795 is_empty_range c a 31 1 1 e r 22 31 # 2796 is_empty_range c a 31 1 1 e r 0 20 # 2797 is_empty_range c a 31 1 1 f r 0 31 # 2798 is_empty_range c a 31 1 1 f r 29 3 # 2799 is_empty_range c a 31 1 1 f r 11 15 # 2800 is_empty_range c a 31 1 1 f r 20 31 # 2801 is_empty_range c a 31 1 1 f r 0 3 # 2802 is_empty_range c a 31 1 1 3 5 10 12 14 15 16 20 21 24 26 28 29 30 r 0 31 # 2803 is_empty_range c a 31 1 1 1 9 11 12 13 14 15 16 17 20 23 25 26 27 28 29 r 20 8 # 2804 is_empty_range c a 31 1 1 0 2 3 4 7 8 10 11 12 13 14 15 18 19 20 21 23 24 25 r 16 31 # 2805 is_empty_range c a 31 1 1 3 4 6 7 8 9 10 11 12 13 14 15 16 17 18 20 23 24 25 28 29 r 10 31 # 2806 is_empty_range c a 31 1 1 0 1 2 3 4 5 6 7 9 10 12 13 17 18 24 25 26 27 28 r 0 20 # 2807 is_empty_range c a 32 0 0 e r 0 32 # 2808 is_empty_range c a 32 0 0 e r 14 3 # 2809 is_empty_range c a 32 0 0 e r 0 8 # 2810 is_empty_range c a 32 0 0 e r 0 32 # 2811 is_empty_range c a 32 0 0 e r 0 7 # 2812 is_empty_range c a 32 0 0 f r 0 32 # 2813 is_empty_range c a 32 0 0 f r 24 11 # 2814 is_empty_range c a 32 0 0 f r 10 26 # 2815 is_empty_range c a 32 0 0 f r 24 32 # 2816 is_empty_range c a 32 0 0 f r 0 20 # 2817 is_empty_range c a 32 0 0 1 3 4 9 10 12 13 15 17 20 21 23 28 30 r 0 32 # 2818 is_empty_range c a 32 0 0 5 6 7 8 9 11 12 13 14 15 16 19 22 24 26 27 29 31 r 16 8 # 2819 is_empty_range c a 32 0 0 0 2 3 5 7 8 10 13 14 17 18 21 25 26 27 28 29 31 r 2 7 # 2820 is_empty_range c a 32 0 0 1 2 3 4 5 7 10 11 12 14 15 18 19 20 22 23 24 25 26 30 31 r 23 32 # 2821 is_empty_range c a 32 0 0 0 1 6 7 8 9 10 12 13 14 17 18 19 20 21 22 26 27 28 29 30 31 r 0 21 # 2822 is_empty_range c a 32 0 1 e r 0 32 # 2823 is_empty_range c a 32 0 1 e r 17 0 # 2824 is_empty_range c a 32 0 1 e r 17 23 # 2825 is_empty_range c a 32 0 1 e r 22 32 # 2826 is_empty_range c a 32 0 1 e r 0 31 # 2827 is_empty_range c a 32 0 1 f r 0 32 # 2828 is_empty_range c a 32 0 1 f r 15 1 # 2829 is_empty_range c a 32 0 1 f r 4 11 # 2830 is_empty_range c a 32 0 1 f r 13 32 # 2831 is_empty_range c a 32 0 1 f r 0 10 # 2832 is_empty_range c a 32 0 1 1 2 4 5 6 10 11 13 14 16 19 20 21 23 24 25 28 29 30 r 0 32 # 2833 is_empty_range c a 32 0 1 0 1 4 6 8 9 10 12 13 14 19 21 22 23 24 27 30 31 r 15 8 # 2834 is_empty_range c a 32 0 1 2 5 12 14 23 24 25 27 28 29 r 17 22 # 2835 is_empty_range c a 32 0 1 0 4 5 10 14 15 17 18 19 20 21 22 23 24 26 28 29 30 r 29 32 # 2836 is_empty_range c a 32 0 1 1 6 10 13 14 16 17 18 19 20 21 22 24 26 30 31 r 0 19 # 2837 is_empty_range c a 32 1 0 e r 0 32 # 2838 is_empty_range c a 32 1 0 e r 16 5 # 2839 is_empty_range c a 32 1 0 e r 3 5 # 2840 is_empty_range c a 32 1 0 e r 21 32 # 2841 is_empty_range c a 32 1 0 e r 0 9 # 2842 is_empty_range c a 32 1 0 f r 0 32 # 2843 is_empty_range c a 32 1 0 f r 15 7 # 2844 is_empty_range c a 32 1 0 f r 1 2 # 2845 is_empty_range c a 32 1 0 f r 16 32 # 2846 is_empty_range c a 32 1 0 f r 0 5 # 2847 is_empty_range c a 32 1 0 6 8 10 15 18 22 23 28 31 r 0 32 # 2848 is_empty_range c a 32 1 0 0 1 3 4 7 11 12 13 15 16 20 21 25 26 31 r 14 1 # 2849 is_empty_range c a 32 1 0 0 1 2 4 8 10 13 14 17 19 21 25 26 28 29 30 31 r 0 1 # 2850 is_empty_range c a 32 1 0 0 1 2 4 5 6 7 9 10 15 17 18 19 24 26 27 28 29 31 r 31 32 # 2851 is_empty_range c a 32 1 0 6 10 11 12 13 15 16 17 19 21 22 23 24 26 28 29 30 r 0 9 # 2852 is_empty_range c a 32 1 1 e r 0 32 # 2853 is_empty_range c a 32 1 1 e r 0 0 # 2854 is_empty_range c a 32 1 1 e r 9 31 # 2855 is_empty_range c a 32 1 1 e r 18 32 # 2856 is_empty_range c a 32 1 1 e r 0 18 # 2857 is_empty_range c a 32 1 1 f r 0 32 # 2858 is_empty_range c a 32 1 1 f r 14 1 # 2859 is_empty_range c a 32 1 1 f r 0 3 # 2860 is_empty_range c a 32 1 1 f r 27 32 # 2861 is_empty_range c a 32 1 1 f r 0 20 # 2862 is_empty_range c a 32 1 1 0 2 3 4 5 7 8 9 12 13 16 17 18 20 23 24 25 29 30 r 0 32 # 2863 is_empty_range c a 32 1 1 1 2 4 6 10 11 13 16 18 26 27 29 r 10 1 # 2864 is_empty_range c a 32 1 1 0 3 4 5 8 9 16 17 18 19 25 29 30 31 r 9 20 # 2865 is_empty_range c a 32 1 1 0 1 2 3 5 6 7 8 9 10 13 15 16 17 22 23 24 27 30 31 r 23 32 # 2866 is_empty_range c a 32 1 1 0 1 3 4 6 7 10 11 12 13 14 15 17 19 20 21 22 27 r 0 24 # 2867 is_empty_range c a 33 0 0 e r 0 33 # 2868 is_empty_range c a 33 0 0 e r 12 7 # 2869 is_empty_range c a 33 0 0 e r 2 5 # 2870 is_empty_range c a 33 0 0 e r 10 33 # 2871 is_empty_range c a 33 0 0 e r 0 22 # 2872 is_empty_range c a 33 0 0 f r 0 33 # 2873 is_empty_range c a 33 0 0 f r 31 4 # 2874 is_empty_range c a 33 0 0 f r 1 2 # 2875 is_empty_range c a 33 0 0 f r 11 33 # 2876 is_empty_range c a 33 0 0 f r 0 16 # 2877 is_empty_range c a 33 0 0 0 1 3 4 5 6 7 8 12 14 16 18 21 24 25 26 27 28 29 30 31 r 0 33 # 2878 is_empty_range c a 33 0 0 1 4 6 8 10 12 16 17 18 19 22 23 24 25 26 27 28 29 32 r 32 11 # 2879 is_empty_range c a 33 0 0 0 5 7 8 10 11 13 14 16 17 19 20 22 23 25 26 27 28 29 31 32 r 17 28 # 2880 is_empty_range c a 33 0 0 3 5 6 9 10 11 12 13 15 16 17 18 19 21 22 24 27 30 31 32 r 19 33 # 2881 is_empty_range c a 33 0 0 0 1 3 5 8 12 15 16 17 19 23 24 25 26 27 29 32 r 0 30 # 2882 is_empty_range c a 33 0 1 e r 0 33 # 2883 is_empty_range c a 33 0 1 e r 8 4 # 2884 is_empty_range c a 33 0 1 e r 9 24 # 2885 is_empty_range c a 33 0 1 e r 4 33 # 2886 is_empty_range c a 33 0 1 e r 0 30 # 2887 is_empty_range c a 33 0 1 f r 0 33 # 2888 is_empty_range c a 33 0 1 f r 18 9 # 2889 is_empty_range c a 33 0 1 f r 0 9 # 2890 is_empty_range c a 33 0 1 f r 11 33 # 2891 is_empty_range c a 33 0 1 f r 0 4 # 2892 is_empty_range c a 33 0 1 1 2 3 7 8 11 13 14 15 18 21 22 23 24 29 31 32 r 0 33 # 2893 is_empty_range c a 33 0 1 1 4 5 14 15 16 17 19 20 21 25 28 30 32 r 19 1 # 2894 is_empty_range c a 33 0 1 0 4 5 6 8 9 10 11 12 13 14 15 16 17 19 21 24 25 28 29 30 31 32 r 7 33 # 2895 is_empty_range c a 33 0 1 0 1 2 3 4 5 6 7 8 9 10 12 13 14 15 16 17 20 21 22 23 24 25 26 28 r 19 33 # 2896 is_empty_range c a 33 0 1 2 4 5 7 11 12 14 16 19 21 22 26 27 28 29 r 0 1 # 2897 is_empty_range c a 33 1 0 e r 0 33 # 2898 is_empty_range c a 33 1 0 e r 28 21 # 2899 is_empty_range c a 33 1 0 e r 3 18 # 2900 is_empty_range c a 33 1 0 e r 4 33 # 2901 is_empty_range c a 33 1 0 e r 0 19 # 2902 is_empty_range c a 33 1 0 f r 0 33 # 2903 is_empty_range c a 33 1 0 f r 10 9 # 2904 is_empty_range c a 33 1 0 f r 2 7 # 2905 is_empty_range c a 33 1 0 f r 10 33 # 2906 is_empty_range c a 33 1 0 f r 0 6 # 2907 is_empty_range c a 33 1 0 0 1 4 5 7 9 12 15 16 19 20 23 25 27 28 30 31 r 0 33 # 2908 is_empty_range c a 33 1 0 1 5 6 7 9 10 13 15 16 17 22 26 27 29 30 32 r 15 8 # 2909 is_empty_range c a 33 1 0 0 3 6 7 8 14 15 19 20 21 22 27 29 32 r 1 2 # 2910 is_empty_range c a 33 1 0 2 6 7 8 9 10 11 13 16 18 22 24 26 27 29 31 r 8 33 # 2911 is_empty_range c a 33 1 0 2 5 7 9 10 11 12 13 14 15 16 19 20 25 28 30 32 r 0 25 # 2912 is_empty_range c a 33 1 1 e r 0 33 # 2913 is_empty_range c a 33 1 1 e r 31 22 # 2914 is_empty_range c a 33 1 1 e r 6 33 # 2915 is_empty_range c a 33 1 1 e r 5 33 # 2916 is_empty_range c a 33 1 1 e r 0 28 # 2917 is_empty_range c a 33 1 1 f r 0 33 # 2918 is_empty_range c a 33 1 1 f r 9 0 # 2919 is_empty_range c a 33 1 1 f r 1 17 # 2920 is_empty_range c a 33 1 1 f r 23 33 # 2921 is_empty_range c a 33 1 1 f r 0 17 # 2922 is_empty_range c a 33 1 1 1 2 3 4 5 7 10 12 14 15 16 17 22 26 27 28 29 32 r 0 33 # 2923 is_empty_range c a 33 1 1 3 4 9 11 12 13 15 17 18 19 20 22 25 27 28 29 30 r 21 0 # 2924 is_empty_range c a 33 1 1 0 1 4 7 8 11 12 13 14 16 19 25 30 r 6 25 # 2925 is_empty_range c a 33 1 1 2 3 10 11 12 15 16 20 25 26 27 32 r 18 33 # 2926 is_empty_range c a 33 1 1 2 3 5 6 8 9 10 11 12 16 21 24 26 27 28 32 r 0 16 # 2927 is_empty_range c a 63 0 0 e r 0 63 # 2928 is_empty_range c a 63 0 0 e r 23 0 # 2929 is_empty_range c a 63 0 0 e r 43 44 # 2930 is_empty_range c a 63 0 0 e r 43 63 # 2931 is_empty_range c a 63 0 0 e r 0 0 # 2932 is_empty_range c a 63 0 0 f r 0 63 # 2933 is_empty_range c a 63 0 0 f r 1 0 # 2934 is_empty_range c a 63 0 0 f r 7 38 # 2935 is_empty_range c a 63 0 0 f r 59 63 # 2936 is_empty_range c a 63 0 0 f r 0 51 # 2937 is_empty_range c a 63 0 0 1 3 4 5 6 9 10 12 13 14 15 18 20 21 22 24 25 26 29 30 31 32 34 35 37 38 39 41 42 45 47 51 53 55 56 62 r 0 63 # 2938 is_empty_range c a 63 0 0 2 3 4 6 8 9 15 17 20 22 23 28 29 35 36 39 40 41 42 47 52 55 56 57 59 61 62 r 42 9 # 2939 is_empty_range c a 63 0 0 1 2 5 8 9 12 17 19 20 23 24 27 29 30 32 33 34 35 36 41 42 44 46 48 49 51 53 54 55 56 57 58 60 61 62 r 12 38 # 2940 is_empty_range c a 63 0 0 0 1 4 5 7 8 9 10 11 14 17 18 20 21 23 26 30 31 37 38 41 43 44 50 51 52 53 54 58 59 60 61 62 r 58 63 # 2941 is_empty_range c a 63 0 0 1 3 4 6 13 14 15 16 18 19 23 24 26 27 28 33 34 37 41 42 43 48 52 53 55 58 60 61 r 0 53 # 2942 is_empty_range c a 63 0 1 e r 0 63 # 2943 is_empty_range c a 63 0 1 e r 18 3 # 2944 is_empty_range c a 63 0 1 e r 0 1 # 2945 is_empty_range c a 63 0 1 e r 35 63 # 2946 is_empty_range c a 63 0 1 e r 0 4 # 2947 is_empty_range c a 63 0 1 f r 0 63 # 2948 is_empty_range c a 63 0 1 f r 63 44 # 2949 is_empty_range c a 63 0 1 f r 1 4 # 2950 is_empty_range c a 63 0 1 f r 54 63 # 2951 is_empty_range c a 63 0 1 f r 0 13 # 2952 is_empty_range c a 63 0 1 0 1 2 3 7 9 10 12 14 15 18 20 25 26 28 31 35 37 38 39 44 45 50 51 52 53 56 59 60 61 r 0 63 # 2953 is_empty_range c a 63 0 1 2 3 4 5 6 10 11 13 14 15 16 19 20 26 27 29 32 35 41 43 44 47 49 50 53 54 55 58 59 r 53 0 # 2954 is_empty_range c a 63 0 1 0 1 2 3 8 10 11 12 13 15 17 20 21 22 24 25 27 28 29 30 31 32 33 34 35 39 42 44 46 50 53 55 56 57 58 59 60 61 r 32 53 # 2955 is_empty_range c a 63 0 1 2 4 5 6 7 8 10 14 17 18 21 24 25 29 30 31 33 35 38 41 43 47 49 51 52 53 56 58 61 62 r 7 63 # 2956 is_empty_range c a 63 0 1 0 7 9 10 11 13 14 16 19 23 24 30 31 35 36 37 38 40 41 43 44 47 48 49 51 53 54 56 r 0 4 # 2957 is_empty_range c a 63 1 0 e r 0 63 # 2958 is_empty_range c a 63 1 0 e r 41 31 # 2959 is_empty_range c a 63 1 0 e r 33 34 # 2960 is_empty_range c a 63 1 0 e r 29 63 # 2961 is_empty_range c a 63 1 0 e r 0 46 # 2962 is_empty_range c a 63 1 0 f r 0 63 # 2963 is_empty_range c a 63 1 0 f r 41 16 # 2964 is_empty_range c a 63 1 0 f r 2 30 # 2965 is_empty_range c a 63 1 0 f r 37 63 # 2966 is_empty_range c a 63 1 0 f r 0 51 # 2967 is_empty_range c a 63 1 0 0 3 5 6 9 10 12 14 17 19 23 25 26 29 30 33 36 37 38 40 41 42 43 44 49 51 53 54 55 58 59 61 r 0 63 # 2968 is_empty_range c a 63 1 0 1 2 3 5 6 7 9 12 13 18 24 25 27 28 29 32 36 38 42 43 47 49 51 53 61 62 r 25 0 # 2969 is_empty_range c a 63 1 0 3 5 7 11 16 18 19 23 24 25 27 28 29 35 38 39 40 44 45 46 47 48 49 53 57 60 r 8 14 # 2970 is_empty_range c a 63 1 0 0 1 5 6 7 12 15 16 17 18 22 26 27 28 29 30 32 34 37 38 39 40 42 43 44 46 48 49 50 52 53 59 r 7 63 # 2971 is_empty_range c a 63 1 0 0 3 4 6 7 8 9 10 11 12 13 15 21 22 27 28 29 30 31 34 36 39 42 44 45 50 53 54 r 0 22 # 2972 is_empty_range c a 63 1 1 e r 0 63 # 2973 is_empty_range c a 63 1 1 e r 12 10 # 2974 is_empty_range c a 63 1 1 e r 24 26 # 2975 is_empty_range c a 63 1 1 e r 37 63 # 2976 is_empty_range c a 63 1 1 e r 0 53 # 2977 is_empty_range c a 63 1 1 f r 0 63 # 2978 is_empty_range c a 63 1 1 f r 28 22 # 2979 is_empty_range c a 63 1 1 f r 43 53 # 2980 is_empty_range c a 63 1 1 f r 46 63 # 2981 is_empty_range c a 63 1 1 f r 0 59 # 2982 is_empty_range c a 63 1 1 2 3 4 5 7 8 12 13 14 16 18 19 21 23 27 28 32 34 41 42 44 45 47 48 53 54 55 59 60 61 r 0 63 # 2983 is_empty_range c a 63 1 1 0 1 6 8 9 13 14 16 18 20 21 24 25 26 27 28 29 32 34 35 36 39 41 43 44 45 46 47 49 50 51 56 59 61 r 40 11 # 2984 is_empty_range c a 63 1 1 0 1 6 10 13 14 16 17 18 19 22 23 24 25 26 28 29 30 31 32 33 38 39 40 41 45 48 51 54 56 57 58 59 60 62 r 15 46 # 2985 is_empty_range c a 63 1 1 2 3 4 7 8 9 11 16 18 19 22 23 24 25 26 28 30 32 33 35 37 39 41 42 43 47 48 50 51 53 54 56 57 58 59 61 r 36 63 # 2986 is_empty_range c a 63 1 1 0 1 2 3 6 7 8 9 10 12 13 15 18 19 21 27 29 30 31 34 35 36 37 38 39 40 41 42 43 44 47 50 51 52 53 54 60 61 r 0 21 # 2987 is_empty_range c a 64 0 0 e r 0 64 # 2988 is_empty_range c a 64 0 0 e r 41 5 # 2989 is_empty_range c a 64 0 0 e r 15 24 # 2990 is_empty_range c a 64 0 0 e r 35 64 # 2991 is_empty_range c a 64 0 0 e r 0 51 # 2992 is_empty_range c a 64 0 0 f r 0 64 # 2993 is_empty_range c a 64 0 0 f r 41 28 # 2994 is_empty_range c a 64 0 0 f r 0 1 # 2995 is_empty_range c a 64 0 0 f r 12 64 # 2996 is_empty_range c a 64 0 0 f r 0 55 # 2997 is_empty_range c a 64 0 0 2 3 4 5 7 8 11 12 15 17 19 21 23 32 37 39 42 43 44 46 49 51 52 53 54 55 56 61 62 r 0 64 # 2998 is_empty_range c a 64 0 0 1 2 3 4 5 6 7 9 10 13 14 15 16 18 21 24 25 28 30 35 37 38 39 40 41 43 44 46 48 50 57 58 62 r 47 1 # 2999 is_empty_range c a 64 0 0 5 7 8 11 12 15 16 20 21 26 28 29 33 34 35 36 38 39 40 44 45 47 50 51 56 58 59 63 r 19 51 # 3000 is_empty_range c a 64 0 0 0 1 2 3 7 8 10 13 14 16 17 22 24 35 36 37 38 39 42 43 45 46 48 50 52 53 55 57 58 59 63 r 40 64 # 3001 is_empty_range c a 64 0 0 0 3 7 11 13 14 15 16 17 19 26 27 28 29 31 33 34 43 47 49 50 51 53 59 60 61 62 r 0 35 # 3002 is_empty_range c a 64 0 1 e r 0 64 # 3003 is_empty_range c a 64 0 1 e r 3 0 # 3004 is_empty_range c a 64 0 1 e r 34 40 # 3005 is_empty_range c a 64 0 1 e r 46 64 # 3006 is_empty_range c a 64 0 1 e r 0 44 # 3007 is_empty_range c a 64 0 1 f r 0 64 # 3008 is_empty_range c a 64 0 1 f r 21 19 # 3009 is_empty_range c a 64 0 1 f r 5 31 # 3010 is_empty_range c a 64 0 1 f r 44 64 # 3011 is_empty_range c a 64 0 1 f r 0 49 # 3012 is_empty_range c a 64 0 1 1 6 10 11 13 14 17 18 19 20 21 22 23 25 28 29 30 32 34 37 38 39 40 42 46 47 49 50 52 54 58 62 63 r 0 64 # 3013 is_empty_range c a 64 0 1 0 1 4 5 7 9 11 13 15 16 20 22 26 27 28 29 30 31 32 33 34 36 43 45 46 48 49 50 51 54 55 56 57 59 62 r 19 13 # 3014 is_empty_range c a 64 0 1 0 2 3 4 7 8 9 10 11 13 14 15 17 20 25 28 29 30 31 32 33 34 35 38 42 45 47 48 49 54 55 60 62 63 r 7 29 # 3015 is_empty_range c a 64 0 1 0 2 4 6 7 8 12 16 17 18 20 21 22 23 25 28 30 32 33 34 35 37 39 41 47 51 54 56 58 59 60 61 63 r 42 64 # 3016 is_empty_range c a 64 0 1 2 4 5 7 9 11 14 16 17 18 19 20 22 24 25 26 27 28 29 37 39 40 43 44 54 57 61 63 r 0 8 # 3017 is_empty_range c a 64 1 0 e r 0 64 # 3018 is_empty_range c a 64 1 0 e r 13 12 # 3019 is_empty_range c a 64 1 0 e r 6 8 # 3020 is_empty_range c a 64 1 0 e r 53 64 # 3021 is_empty_range c a 64 1 0 e r 0 24 # 3022 is_empty_range c a 64 1 0 f r 0 64 # 3023 is_empty_range c a 64 1 0 f r 16 14 # 3024 is_empty_range c a 64 1 0 f r 12 56 # 3025 is_empty_range c a 64 1 0 f r 35 64 # 3026 is_empty_range c a 64 1 0 f r 0 56 # 3027 is_empty_range c a 64 1 0 1 2 6 7 11 12 16 18 19 22 24 25 27 29 31 32 36 40 44 45 46 47 48 49 50 53 54 56 57 60 61 62 r 0 64 # 3028 is_empty_range c a 64 1 0 2 5 9 10 13 18 19 22 28 30 32 37 39 40 44 45 46 51 52 57 58 62 63 r 30 19 # 3029 is_empty_range c a 64 1 0 3 5 6 7 9 10 11 15 18 19 20 23 24 25 27 28 30 31 32 34 37 40 44 45 46 49 50 59 60 62 r 0 62 # 3030 is_empty_range c a 64 1 0 0 1 3 7 9 10 16 17 18 19 21 23 24 26 27 28 30 37 39 40 41 43 45 47 48 49 50 52 55 56 58 60 61 62 63 r 56 64 # 3031 is_empty_range c a 64 1 0 4 6 7 8 9 10 11 13 14 16 20 23 25 26 27 28 29 30 35 36 38 39 41 42 43 44 45 46 47 55 57 58 59 60 61 63 r 0 29 # 3032 is_empty_range c a 64 1 1 e r 0 64 # 3033 is_empty_range c a 64 1 1 e r 62 52 # 3034 is_empty_range c a 64 1 1 e r 3 4 # 3035 is_empty_range c a 64 1 1 e r 10 64 # 3036 is_empty_range c a 64 1 1 e r 0 60 # 3037 is_empty_range c a 64 1 1 f r 0 64 # 3038 is_empty_range c a 64 1 1 f r 10 7 # 3039 is_empty_range c a 64 1 1 f r 30 45 # 3040 is_empty_range c a 64 1 1 f r 9 64 # 3041 is_empty_range c a 64 1 1 f r 0 33 # 3042 is_empty_range c a 64 1 1 1 2 3 5 7 9 10 12 13 14 17 18 19 20 21 23 25 30 31 34 35 37 39 40 42 43 45 47 48 49 50 51 52 53 54 56 57 58 63 r 0 64 # 3043 is_empty_range c a 64 1 1 0 2 8 10 14 17 20 21 23 24 28 29 31 32 40 43 44 47 51 53 54 56 57 58 59 60 63 r 63 61 # 3044 is_empty_range c a 64 1 1 0 5 6 7 8 9 12 13 14 15 16 18 20 21 23 27 28 29 30 31 33 35 36 38 39 43 44 45 46 47 49 51 53 54 55 56 57 58 59 60 61 62 r 7 10 # 3045 is_empty_range c a 64 1 1 0 1 2 3 4 6 7 9 10 12 14 15 18 19 21 22 24 25 27 29 32 34 37 39 40 42 43 44 45 46 47 50 51 53 55 56 57 58 60 61 r 39 64 # 3046 is_empty_range c a 64 1 1 1 2 7 10 12 13 14 16 17 18 19 21 22 25 26 30 31 35 36 37 38 41 42 45 46 48 50 53 54 55 56 57 61 63 r 0 40 # 3047 is_empty_range c a 65 0 0 e r 0 65 # 3048 is_empty_range c a 65 0 0 e r 10 6 # 3049 is_empty_range c a 65 0 0 e r 48 55 # 3050 is_empty_range c a 65 0 0 e r 13 65 # 3051 is_empty_range c a 65 0 0 e r 0 8 # 3052 is_empty_range c a 65 0 0 f r 0 65 # 3053 is_empty_range c a 65 0 0 f r 46 41 # 3054 is_empty_range c a 65 0 0 f r 3 8 # 3055 is_empty_range c a 65 0 0 f r 50 65 # 3056 is_empty_range c a 65 0 0 f r 0 26 # 3057 is_empty_range c a 65 0 0 0 2 6 7 10 11 12 13 15 17 19 20 21 22 24 25 26 27 28 29 30 31 33 40 45 48 54 55 56 57 58 59 60 62 r 0 65 # 3058 is_empty_range c a 65 0 0 1 3 5 9 10 14 15 16 18 19 21 22 24 25 28 29 33 35 36 37 40 41 42 43 45 46 47 49 50 51 52 53 56 57 58 59 63 r 40 22 # 3059 is_empty_range c a 65 0 0 2 3 5 10 13 19 22 24 25 26 27 32 37 39 40 42 46 47 50 51 54 57 58 59 64 r 9 19 # 3060 is_empty_range c a 65 0 0 2 7 8 12 13 15 17 18 23 24 25 27 28 29 32 34 36 37 38 39 49 50 57 61 62 r 43 65 # 3061 is_empty_range c a 65 0 0 0 2 3 4 8 10 11 12 13 14 15 19 20 21 22 23 26 28 29 33 39 40 42 43 45 46 47 50 55 56 57 60 61 62 64 r 0 5 # 3062 is_empty_range c a 65 0 1 e r 0 65 # 3063 is_empty_range c a 65 0 1 e r 21 20 # 3064 is_empty_range c a 65 0 1 e r 14 28 # 3065 is_empty_range c a 65 0 1 e r 56 65 # 3066 is_empty_range c a 65 0 1 e r 0 4 # 3067 is_empty_range c a 65 0 1 f r 0 65 # 3068 is_empty_range c a 65 0 1 f r 35 11 # 3069 is_empty_range c a 65 0 1 f r 29 30 # 3070 is_empty_range c a 65 0 1 f r 55 65 # 3071 is_empty_range c a 65 0 1 f r 0 30 # 3072 is_empty_range c a 65 0 1 3 4 5 7 8 10 12 13 14 15 17 18 19 20 21 22 23 25 26 29 30 31 34 35 36 38 39 41 42 44 45 46 48 49 50 52 53 56 57 60 62 63 64 r 0 65 # 3073 is_empty_range c a 65 0 1 0 1 2 3 4 7 9 10 12 15 17 19 20 21 22 23 25 26 27 28 29 31 32 34 35 36 38 40 41 42 43 44 45 48 49 51 52 53 54 55 56 58 59 62 63 r 15 12 # 3074 is_empty_range c a 65 0 1 1 4 10 12 13 14 15 16 17 19 20 21 23 25 29 30 32 34 36 38 39 41 44 47 48 49 51 52 53 55 56 57 59 60 63 64 r 11 53 # 3075 is_empty_range c a 65 0 1 1 6 7 10 11 13 15 22 25 26 28 32 33 34 36 37 38 40 41 44 45 49 50 54 55 58 60 63 r 36 65 # 3076 is_empty_range c a 65 0 1 0 2 3 5 6 7 9 12 13 15 19 21 24 26 28 29 30 31 33 34 35 36 37 39 40 41 43 44 45 47 49 50 54 56 58 59 61 62 63 r 0 50 # 3077 is_empty_range c a 65 1 0 e r 0 65 # 3078 is_empty_range c a 65 1 0 e r 59 33 # 3079 is_empty_range c a 65 1 0 e r 16 24 # 3080 is_empty_range c a 65 1 0 e r 26 65 # 3081 is_empty_range c a 65 1 0 e r 0 39 # 3082 is_empty_range c a 65 1 0 f r 0 65 # 3083 is_empty_range c a 65 1 0 f r 46 8 # 3084 is_empty_range c a 65 1 0 f r 24 59 # 3085 is_empty_range c a 65 1 0 f r 14 65 # 3086 is_empty_range c a 65 1 0 f r 0 16 # 3087 is_empty_range c a 65 1 0 0 1 3 5 7 9 12 13 16 17 20 21 26 27 28 31 33 36 37 40 41 42 44 46 47 48 50 51 55 60 61 63 64 r 0 65 # 3088 is_empty_range c a 65 1 0 0 2 4 7 9 10 11 12 13 14 15 16 17 19 20 21 25 26 29 31 36 37 45 47 48 50 51 54 55 57 59 60 61 62 r 49 9 # 3089 is_empty_range c a 65 1 0 1 3 5 7 10 12 15 16 17 18 19 21 23 24 26 28 29 32 33 36 37 39 40 43 44 46 47 50 55 56 59 r 36 42 # 3090 is_empty_range c a 65 1 0 0 2 3 8 9 11 12 13 16 17 18 19 25 27 28 31 32 34 36 38 39 40 41 43 44 45 47 48 50 52 53 56 57 58 59 62 63 64 r 55 65 # 3091 is_empty_range c a 65 1 0 1 2 3 5 6 7 8 9 10 13 14 16 17 20 21 23 24 25 28 31 34 35 37 38 40 41 42 45 49 50 52 57 58 59 62 63 r 0 24 # 3092 is_empty_range c a 65 1 1 e r 0 65 # 3093 is_empty_range c a 65 1 1 e r 3 0 # 3094 is_empty_range c a 65 1 1 e r 21 60 # 3095 is_empty_range c a 65 1 1 e r 37 65 # 3096 is_empty_range c a 65 1 1 e r 0 36 # 3097 is_empty_range c a 65 1 1 f r 0 65 # 3098 is_empty_range c a 65 1 1 f r 40 34 # 3099 is_empty_range c a 65 1 1 f r 9 50 # 3100 is_empty_range c a 65 1 1 f r 15 65 # 3101 is_empty_range c a 65 1 1 f r 0 37 # 3102 is_empty_range c a 65 1 1 0 1 3 5 7 9 10 12 14 15 18 19 20 21 22 23 25 26 30 35 37 38 39 40 41 45 49 52 57 58 59 61 64 r 0 65 # 3103 is_empty_range c a 65 1 1 0 3 4 5 7 9 10 16 17 18 19 20 23 24 25 27 29 30 31 32 33 34 35 36 38 41 45 46 47 48 49 50 51 52 54 55 57 58 60 63 r 1 0 # 3104 is_empty_range c a 65 1 1 3 4 10 12 13 15 16 17 19 20 25 26 27 30 31 32 34 37 38 39 41 45 46 48 50 51 52 59 61 62 r 40 50 # 3105 is_empty_range c a 65 1 1 0 1 3 4 8 11 12 13 14 15 16 18 19 20 23 24 26 27 29 30 34 38 41 44 48 51 53 54 56 57 61 62 63 r 30 65 # 3106 is_empty_range c a 65 1 1 1 2 4 8 9 15 16 17 18 19 21 25 27 28 29 30 33 34 37 38 40 45 48 52 53 54 56 59 60 61 64 r 0 12 # 3107 is_empty_range c a 211 0 0 e r 0 211 # 3108 is_empty_range c a 211 0 0 e r 146 46 # 3109 is_empty_range c a 211 0 0 e r 86 96 # 3110 is_empty_range c a 211 0 0 e r 130 211 # 3111 is_empty_range c a 211 0 0 e r 0 172 # 3112 is_empty_range c a 211 0 0 f r 0 211 # 3113 is_empty_range c a 211 0 0 f r 150 106 # 3114 is_empty_range c a 211 0 0 f r 21 191 # 3115 is_empty_range c a 211 0 0 f r 87 211 # 3116 is_empty_range c a 211 0 0 f r 0 44 # 3117 is_empty_range c a 211 0 0 0 1 4 6 7 9 10 11 13 14 15 18 21 23 24 28 31 32 34 35 36 37 38 40 41 42 44 45 46 49 50 51 53 57 59 61 62 65 67 68 69 72 74 76 77 78 82 83 87 89 90 91 94 95 98 99 101 103 108 112 116 117 118 121 123 126 131 133 134 135 138 142 144 147 148 153 156 158 160 165 166 167 169 170 171 173 174 176 179 180 181 184 185 186 187 189 191 195 199 203 208 209 r 0 211 # 3118 is_empty_range c a 211 0 0 0 1 2 5 6 8 9 11 12 13 15 20 21 22 24 26 35 36 38 39 42 46 47 48 52 53 54 55 57 61 62 64 67 68 70 71 72 73 79 87 89 93 94 99 102 107 109 110 111 115 116 117 119 120 121 124 126 127 128 130 132 133 137 138 139 140 141 142 143 144 146 147 150 151 152 155 156 157 158 161 162 163 164 167 170 171 172 174 175 176 177 178 179 180 182 183 184 186 190 193 195 196 197 198 200 201 203 206 207 208 209 210 r 82 71 # 3119 is_empty_range c a 211 0 0 0 1 2 4 9 20 23 26 27 29 32 34 35 36 38 43 44 45 46 50 51 54 55 56 57 58 60 61 62 63 66 67 68 69 71 73 74 77 78 79 80 82 84 85 88 89 90 91 92 94 96 99 102 106 107 112 114 115 116 117 119 120 121 123 128 131 132 133 138 139 140 142 143 144 145 147 148 149 151 152 153 154 157 158 159 161 162 164 166 168 169 175 176 177 178 179 191 196 197 198 199 200 201 203 206 209 210 r 30 166 # 3120 is_empty_range c a 211 0 0 1 3 5 6 7 9 10 11 12 14 15 16 18 19 20 21 24 31 33 34 35 37 39 44 47 48 50 52 53 54 55 59 61 62 63 65 67 69 70 71 77 78 81 82 84 86 88 92 94 96 103 105 107 108 112 113 115 118 120 123 128 129 130 132 137 140 141 142 143 144 146 148 149 152 153 158 161 162 166 167 172 175 177 178 180 182 183 185 187 191 194 195 196 197 198 200 203 205 206 207 208 209 r 135 211 # 3121 is_empty_range c a 211 0 0 1 3 4 6 8 11 12 14 15 16 18 19 20 22 25 27 31 33 38 39 42 45 46 49 51 55 58 59 60 64 65 66 69 71 74 75 76 77 80 81 88 89 91 93 96 99 101 102 103 104 105 107 108 109 111 115 116 119 122 123 126 127 128 130 133 137 142 143 144 146 147 148 149 150 153 154 155 157 158 161 162 163 166 167 168 172 175 178 181 183 184 190 191 192 193 194 196 197 199 200 201 203 204 205 210 r 0 195 # 3122 is_empty_range c a 211 0 1 e r 0 211 # 3123 is_empty_range c a 211 0 1 e r 174 33 # 3124 is_empty_range c a 211 0 1 e r 0 19 # 3125 is_empty_range c a 211 0 1 e r 94 211 # 3126 is_empty_range c a 211 0 1 e r 0 58 # 3127 is_empty_range c a 211 0 1 f r 0 211 # 3128 is_empty_range c a 211 0 1 f r 136 53 # 3129 is_empty_range c a 211 0 1 f r 18 74 # 3130 is_empty_range c a 211 0 1 f r 50 211 # 3131 is_empty_range c a 211 0 1 f r 0 68 # 3132 is_empty_range c a 211 0 1 1 4 5 7 8 9 11 12 13 17 18 21 22 23 24 25 27 28 30 34 38 39 42 45 47 48 50 53 55 56 58 59 60 62 64 65 66 67 68 69 70 73 75 76 77 79 82 88 91 92 96 97 99 100 103 105 106 107 108 110 111 112 113 116 117 118 119 121 123 125 128 129 135 138 139 142 150 151 154 158 159 161 163 165 167 170 171 172 173 174 175 179 180 183 184 187 190 191 195 197 199 203 204 206 208 210 r 0 211 # 3133 is_empty_range c a 211 0 1 0 3 5 11 12 13 18 19 20 23 25 26 28 29 31 33 35 36 37 38 39 42 43 44 48 51 52 53 55 56 59 61 63 64 65 67 68 70 71 72 73 74 75 78 80 82 83 84 86 87 88 91 93 94 96 98 99 100 101 102 105 107 110 113 114 117 120 121 124 125 127 131 135 136 137 140 146 147 152 155 157 159 161 162 163 168 169 171 173 175 178 179 180 182 183 184 189 190 191 192 193 194 196 199 201 202 203 204 206 208 209 r 148 84 # 3134 is_empty_range c a 211 0 1 2 3 4 5 7 8 10 11 12 14 16 17 19 20 22 24 27 29 30 31 37 40 43 44 45 48 49 52 53 54 55 57 58 59 60 64 65 66 68 70 71 72 74 75 77 79 80 83 86 87 92 93 94 95 96 97 99 104 106 107 110 111 112 114 116 118 119 120 123 125 126 128 131 132 133 135 136 138 141 145 147 150 152 158 159 160 162 163 164 166 167 171 177 179 184 185 186 187 189 190 192 193 195 198 199 200 202 203 204 205 208 209 r 23 42 # 3135 is_empty_range c a 211 0 1 0 3 4 7 9 10 13 16 19 20 22 23 24 25 26 27 29 31 32 34 35 36 37 38 39 40 43 45 47 48 49 50 51 52 53 54 55 56 57 59 61 62 65 67 68 70 72 75 76 77 78 79 80 81 82 83 84 85 88 89 92 94 95 98 99 101 105 108 111 115 117 119 120 121 123 125 126 127 129 130 131 132 134 135 142 143 144 146 147 150 155 157 160 167 169 170 171 173 174 175 178 179 180 181 183 185 186 188 190 194 195 198 199 201 202 204 205 r 175 211 # 3136 is_empty_range c a 211 0 1 1 2 3 5 8 10 13 15 18 20 21 22 23 24 26 27 28 30 32 33 36 38 39 40 45 48 50 51 53 54 55 57 58 60 61 62 63 64 67 68 72 73 74 75 77 87 88 91 94 96 100 101 102 105 107 108 109 111 113 115 117 118 123 124 127 128 129 134 135 136 138 139 142 143 146 147 149 150 151 154 160 162 164 165 167 171 172 174 177 179 180 186 187 189 193 194 196 198 199 200 202 203 204 209 210 r 0 72 # 3137 is_empty_range c a 211 1 0 e r 0 211 # 3138 is_empty_range c a 211 1 0 e r 2 1 # 3139 is_empty_range c a 211 1 0 e r 30 55 # 3140 is_empty_range c a 211 1 0 e r 62 211 # 3141 is_empty_range c a 211 1 0 e r 0 138 # 3142 is_empty_range c a 211 1 0 f r 0 211 # 3143 is_empty_range c a 211 1 0 f r 107 31 # 3144 is_empty_range c a 211 1 0 f r 146 194 # 3145 is_empty_range c a 211 1 0 f r 17 211 # 3146 is_empty_range c a 211 1 0 f r 0 23 # 3147 is_empty_range c a 211 1 0 0 1 2 5 11 12 13 15 18 20 22 26 30 31 37 38 41 43 44 45 46 48 49 50 51 53 57 58 63 64 65 68 69 70 72 75 76 78 79 81 82 85 86 87 88 89 93 96 99 102 111 112 120 122 125 127 129 130 131 133 135 136 137 140 141 143 144 148 149 151 154 159 162 163 164 167 168 169 171 173 174 178 179 182 185 186 187 191 192 195 197 198 200 204 206 208 r 0 211 # 3148 is_empty_range c a 211 1 0 1 2 3 5 6 7 8 11 12 13 15 19 20 21 24 25 26 27 28 31 34 36 39 40 41 42 43 44 45 47 49 50 52 53 56 60 61 64 66 67 68 70 73 75 76 77 78 79 80 81 84 85 86 90 96 102 103 104 106 107 108 109 110 111 113 116 118 119 120 121 123 125 127 128 132 135 136 137 139 140 145 147 148 150 151 152 154 156 157 159 161 165 166 167 168 170 172 174 175 176 178 179 181 182 186 189 191 192 193 195 198 200 201 202 204 207 208 210 r 15 5 # 3149 is_empty_range c a 211 1 0 0 1 2 5 6 9 11 12 17 18 19 22 23 24 25 26 28 29 30 31 32 33 34 36 37 38 39 41 42 46 49 51 54 58 61 68 74 76 77 78 79 82 83 84 86 88 89 90 94 95 102 103 104 105 108 112 114 115 116 117 119 120 125 127 131 132 135 137 140 141 143 144 147 149 152 153 156 157 159 161 162 166 167 168 171 172 173 174 175 178 179 180 182 183 184 187 189 190 192 194 196 197 199 200 201 202 203 206 207 208 209 r 22 38 # 3150 is_empty_range c a 211 1 0 1 2 3 5 9 11 13 14 19 23 27 28 30 32 33 36 41 43 45 46 47 50 51 55 57 58 61 64 65 69 70 72 73 76 78 81 83 84 85 86 88 90 91 95 96 97 100 102 105 106 109 110 111 113 114 116 118 120 121 124 125 127 129 132 133 134 136 142 143 145 147 152 153 155 156 157 158 166 168 171 174 175 177 178 182 187 188 193 194 195 196 197 198 199 200 202 204 209 210 r 127 211 # 3151 is_empty_range c a 211 1 0 2 4 7 9 11 14 16 17 19 21 25 27 28 30 31 32 33 36 37 40 44 46 47 48 49 50 52 56 57 59 62 63 64 67 69 71 73 75 77 78 80 83 84 85 87 88 89 97 99 101 102 103 104 105 106 107 108 111 112 113 114 115 116 119 121 122 123 126 127 128 132 135 137 138 141 144 148 149 152 154 155 157 158 162 166 167 169 170 171 172 178 183 186 187 189 191 192 194 196 197 199 200 202 205 206 207 209 r 0 82 # 3152 is_empty_range c a 211 1 1 e r 0 211 # 3153 is_empty_range c a 211 1 1 e r 127 33 # 3154 is_empty_range c a 211 1 1 e r 162 190 # 3155 is_empty_range c a 211 1 1 e r 37 211 # 3156 is_empty_range c a 211 1 1 e r 0 158 # 3157 is_empty_range c a 211 1 1 f r 0 211 # 3158 is_empty_range c a 211 1 1 f r 94 82 # 3159 is_empty_range c a 211 1 1 f r 51 179 # 3160 is_empty_range c a 211 1 1 f r 140 211 # 3161 is_empty_range c a 211 1 1 f r 0 161 # 3162 is_empty_range c a 211 1 1 0 2 10 11 13 14 15 16 19 20 22 24 26 28 30 32 33 34 38 39 40 42 43 45 46 47 48 50 51 53 58 59 60 61 63 64 68 69 70 71 73 74 75 78 80 81 85 86 87 88 89 90 91 92 95 96 97 98 99 100 101 104 106 108 109 110 114 115 116 118 119 122 123 124 126 128 129 131 132 133 134 136 137 138 139 140 144 145 147 149 150 151 154 156 158 159 161 163 164 167 172 173 176 177 180 181 182 185 190 195 196 197 198 202 203 204 207 208 209 210 r 0 211 # 3163 is_empty_range c a 211 1 1 0 1 2 3 5 8 9 12 13 14 15 16 17 18 21 24 26 27 30 33 37 38 42 45 48 50 56 58 60 61 63 65 67 71 72 77 78 81 82 86 87 89 93 95 97 98 99 102 104 106 109 110 111 112 113 115 116 117 118 120 122 124 125 128 131 132 135 136 137 140 144 147 152 155 157 159 160 161 162 163 169 170 171 172 173 175 177 178 179 184 185 186 187 190 192 193 197 205 207 208 210 r 13 6 # 3164 is_empty_range c a 211 1 1 0 1 2 3 4 5 7 8 9 10 11 12 14 15 16 19 20 21 23 25 26 27 28 30 31 35 37 38 39 41 42 45 47 50 59 60 61 62 63 66 67 68 69 70 72 74 80 82 83 85 87 89 90 91 92 94 96 97 98 99 100 101 103 110 112 113 116 117 118 119 121 122 125 127 128 130 131 133 134 138 139 140 141 142 144 146 148 149 154 155 158 160 163 167 168 174 176 177 178 179 183 184 185 186 190 191 192 194 196 200 201 202 205 206 207 208 210 r 59 151 # 3165 is_empty_range c a 211 1 1 0 3 4 5 11 13 15 17 18 19 20 23 24 26 28 29 31 33 34 38 39 42 43 53 56 57 58 59 60 62 64 65 71 75 77 79 81 82 83 97 98 99 103 104 105 108 109 110 113 114 115 121 122 123 127 130 132 135 137 138 141 143 144 146 148 150 155 156 157 158 159 161 164 165 166 169 171 172 173 174 175 177 181 183 185 186 189 191 192 193 194 195 197 198 199 200 202 203 205 206 207 208 r 26 211 # 3166 is_empty_range c a 211 1 1 1 3 6 7 10 12 13 14 16 17 19 22 23 25 26 28 30 32 34 36 37 42 44 45 46 47 48 52 56 58 59 61 66 70 72 74 75 79 80 81 86 88 94 96 97 98 99 103 104 106 108 114 116 117 118 119 121 122 125 126 129 131 133 134 136 139 140 141 143 148 150 153 154 155 156 157 158 162 163 164 165 166 167 170 171 173 174 178 180 181 183 184 186 188 189 190 192 193 195 198 199 200 201 202 203 204 205 207 r 0 20 # 3167 is_empty_range c a 224 0 0 e r 0 224 # 3168 is_empty_range c a 224 0 0 e r 96 6 # 3169 is_empty_range c a 224 0 0 e r 130 216 # 3170 is_empty_range c a 224 0 0 e r 90 224 # 3171 is_empty_range c a 224 0 0 e r 0 205 # 3172 is_empty_range c a 224 0 0 f r 0 224 # 3173 is_empty_range c a 224 0 0 f r 77 26 # 3174 is_empty_range c a 224 0 0 f r 217 223 # 3175 is_empty_range c a 224 0 0 f r 159 224 # 3176 is_empty_range c a 224 0 0 f r 0 36 # 3177 is_empty_range c a 224 0 0 0 1 4 6 7 9 10 11 14 15 18 20 21 23 26 27 33 38 39 41 42 43 44 45 48 50 51 52 54 56 57 61 63 64 65 66 69 71 72 73 75 76 77 79 82 85 86 88 93 94 96 97 98 100 101 103 104 105 107 108 109 111 112 116 117 118 119 122 125 126 128 130 131 133 134 136 140 141 143 144 145 147 148 150 151 153 155 156 158 159 160 161 162 164 166 168 169 170 171 172 174 175 178 179 182 183 186 187 188 189 190 194 196 198 199 201 206 209 211 214 216 217 219 223 r 0 224 # 3178 is_empty_range c a 224 0 0 0 1 3 5 7 8 9 11 15 16 17 18 21 22 27 30 34 35 38 39 42 43 50 51 52 56 57 63 64 66 67 68 69 70 72 73 77 78 79 80 81 82 83 87 89 93 97 100 102 103 105 107 108 110 111 112 113 114 122 123 126 130 131 134 135 137 142 144 145 148 149 150 153 154 156 157 158 161 163 165 167 168 169 170 173 176 177 179 180 182 183 184 185 187 188 194 202 203 206 207 210 211 212 213 214 215 216 218 219 220 221 222 r 191 143 # 3179 is_empty_range c a 224 0 0 0 1 3 5 8 11 13 16 17 18 19 20 21 29 32 33 36 38 39 40 44 45 46 47 48 49 53 54 55 56 61 62 64 65 66 67 69 70 72 74 75 76 77 78 79 83 84 86 87 88 94 97 99 108 116 120 121 122 126 131 132 136 137 138 139 140 141 145 146 150 154 155 156 157 162 163 164 167 168 169 171 172 173 178 179 180 182 184 185 187 191 192 194 195 197 198 200 203 204 205 212 214 215 216 218 220 221 223 r 140 213 # 3180 is_empty_range c a 224 0 0 0 1 2 5 6 7 8 9 10 14 16 18 19 21 22 23 25 26 32 34 38 41 42 44 45 46 47 49 55 59 60 61 62 63 65 66 67 69 72 74 75 76 77 80 81 82 86 87 88 92 98 102 103 105 106 108 110 111 114 115 116 117 121 122 127 131 132 134 138 140 142 143 144 145 146 147 148 155 157 159 161 162 164 168 171 172 174 175 180 181 182 183 184 186 191 192 194 195 196 199 200 201 207 208 209 213 218 r 6 224 # 3181 is_empty_range c a 224 0 0 3 4 8 9 10 11 14 15 16 19 20 21 22 23 24 28 29 31 33 34 36 38 39 42 44 47 48 49 52 55 56 57 59 60 61 62 66 68 71 72 73 75 77 78 80 82 83 84 86 87 94 95 96 100 103 105 106 107 108 109 111 112 113 114 115 117 121 122 123 127 128 129 131 133 134 135 136 137 138 139 140 141 142 143 144 145 148 149 150 152 156 157 159 161 162 163 164 165 167 168 170 171 173 176 177 179 180 183 184 187 190 191 193 195 196 197 198 199 205 206 207 208 210 211 213 214 218 219 220 221 223 r 0 108 # 3182 is_empty_range c a 224 0 1 e r 0 224 # 3183 is_empty_range c a 224 0 1 e r 17 3 # 3184 is_empty_range c a 224 0 1 e r 26 28 # 3185 is_empty_range c a 224 0 1 e r 22 224 # 3186 is_empty_range c a 224 0 1 e r 0 59 # 3187 is_empty_range c a 224 0 1 f r 0 224 # 3188 is_empty_range c a 224 0 1 f r 144 1 # 3189 is_empty_range c a 224 0 1 f r 20 26 # 3190 is_empty_range c a 224 0 1 f r 27 224 # 3191 is_empty_range c a 224 0 1 f r 0 203 # 3192 is_empty_range c a 224 0 1 3 10 11 16 18 19 21 22 24 28 29 30 35 36 38 40 41 45 46 51 54 58 61 62 63 66 68 69 70 71 75 76 77 78 82 83 85 87 91 94 95 96 97 103 104 106 107 109 110 111 112 113 114 116 120 121 129 130 131 133 134 138 139 141 142 144 145 146 147 153 154 155 158 159 161 163 164 168 171 177 179 181 184 188 190 192 195 196 198 200 203 205 207 208 211 213 215 216 217 219 220 222 223 r 0 224 # 3193 is_empty_range c a 224 0 1 0 2 4 5 6 8 13 15 17 18 25 28 31 33 36 38 39 40 43 44 46 49 50 51 55 56 58 59 60 62 65 67 70 71 73 74 77 78 79 80 84 85 87 90 91 95 97 98 99 100 102 105 106 107 108 109 110 111 115 116 118 120 124 126 129 133 134 135 136 137 138 143 144 146 147 148 150 151 152 154 155 156 157 159 160 161 163 164 165 166 168 170 172 174 175 176 177 179 184 189 193 196 197 198 201 202 204 205 207 209 211 213 214 215 219 220 221 r 65 37 # 3194 is_empty_range c a 224 0 1 0 4 5 7 11 12 13 16 17 19 20 21 22 24 25 29 30 34 37 39 41 44 45 46 48 54 57 59 60 62 65 66 67 68 71 72 73 75 76 77 79 84 85 86 87 88 90 91 93 95 98 100 103 109 110 111 115 117 118 121 123 125 126 127 131 132 134 135 136 140 147 150 151 152 156 160 161 165 169 170 172 173 177 179 180 182 183 189 190 192 193 194 195 196 200 201 203 204 205 208 209 211 212 214 218 219 221 223 r 28 155 # 3195 is_empty_range c a 224 0 1 0 1 4 11 12 16 19 20 21 22 23 24 26 36 37 38 39 40 42 43 46 48 51 54 58 59 60 61 62 73 74 75 77 79 81 82 83 84 88 91 95 96 97 98 99 100 109 111 112 114 115 116 119 122 123 124 125 128 131 132 133 135 136 137 140 141 142 145 147 148 150 152 155 157 161 162 163 166 168 170 171 173 175 178 180 182 183 184 186 188 189 190 192 193 196 198 199 200 202 205 206 207 209 218 222 223 r 17 224 # 3196 is_empty_range c a 224 0 1 0 4 6 8 10 11 15 16 17 19 23 25 26 27 28 29 30 31 34 37 38 44 45 47 48 49 50 59 62 65 66 67 68 71 72 73 75 76 77 78 79 80 83 84 85 87 88 89 90 92 93 94 100 101 103 104 105 106 107 108 109 110 115 117 118 120 121 123 124 128 129 131 132 133 134 135 137 138 141 142 143 146 149 150 151 152 154 157 158 160 162 164 165 169 170 171 172 174 175 176 179 182 183 185 187 188 194 196 198 201 203 206 207 208 210 211 212 213 214 216 220 222 r 0 173 # 3197 is_empty_range c a 224 1 0 e r 0 224 # 3198 is_empty_range c a 224 1 0 e r 136 6 # 3199 is_empty_range c a 224 1 0 e r 17 223 # 3200 is_empty_range c a 224 1 0 e r 178 224 # 3201 is_empty_range c a 224 1 0 e r 0 121 # 3202 is_empty_range c a 224 1 0 f r 0 224 # 3203 is_empty_range c a 224 1 0 f r 208 115 # 3204 is_empty_range c a 224 1 0 f r 67 141 # 3205 is_empty_range c a 224 1 0 f r 208 224 # 3206 is_empty_range c a 224 1 0 f r 0 123 # 3207 is_empty_range c a 224 1 0 1 2 3 4 5 6 7 8 9 13 14 15 16 19 20 23 25 29 31 32 33 34 36 41 42 43 44 45 47 48 49 50 51 53 54 55 56 57 58 59 60 62 63 67 68 75 76 77 78 79 80 82 83 85 86 88 89 91 92 93 97 101 102 104 107 108 110 111 112 113 114 116 121 124 125 129 130 131 133 136 137 139 140 142 143 146 148 150 153 155 156 157 160 161 162 164 166 167 168 170 171 172 174 176 177 179 185 187 188 189 192 194 200 201 206 208 213 214 215 218 220 221 222 223 r 0 224 # 3208 is_empty_range c a 224 1 0 3 4 7 9 11 12 13 15 17 19 20 21 30 32 35 36 41 44 45 47 48 50 54 55 58 59 61 66 67 68 75 77 78 79 81 83 84 91 95 96 98 99 100 101 103 105 106 107 109 110 111 112 115 117 119 122 123 124 126 127 130 135 136 138 143 144 145 146 148 149 157 159 163 164 166 167 168 169 171 174 175 177 179 180 184 186 191 192 194 196 197 199 200 202 203 204 205 206 212 216 218 221 r 216 75 # 3209 is_empty_range c a 224 1 0 0 3 7 10 12 15 19 20 24 25 28 29 30 31 34 35 36 38 39 40 44 45 48 49 51 57 58 60 61 62 65 66 68 69 71 75 77 80 82 84 86 88 89 91 92 94 97 100 101 102 103 106 108 110 111 112 113 114 115 116 117 118 119 122 124 125 128 129 132 135 136 139 140 144 147 150 151 152 153 154 155 158 162 164 167 168 169 172 173 174 175 178 179 181 184 186 188 189 194 197 200 201 202 203 204 205 206 208 209 210 212 214 216 217 218 219 220 r 99 222 # 3210 is_empty_range c a 224 1 0 0 1 3 5 6 7 8 10 12 13 15 17 19 22 27 28 29 30 32 39 40 41 44 45 47 48 50 52 53 55 57 58 59 60 61 63 64 65 71 73 77 83 84 85 86 88 89 91 93 94 96 98 99 100 101 102 104 109 112 113 115 116 119 122 123 125 127 129 130 131 132 133 135 137 138 139 145 149 159 162 165 167 168 170 172 173 174 176 178 179 180 184 185 186 190 191 192 193 196 200 201 202 204 206 207 208 210 211 212 214 216 217 218 220 221 222 223 r 121 224 # 3211 is_empty_range c a 224 1 0 1 3 5 9 11 12 13 14 16 18 19 22 27 29 32 33 37 39 40 41 42 44 45 46 49 51 54 56 59 61 64 65 69 72 74 76 78 82 84 85 86 87 90 94 96 101 102 103 104 107 108 112 114 115 117 118 122 123 124 125 126 127 128 133 137 142 144 147 149 158 160 163 165 167 171 172 173 174 175 178 179 183 184 186 187 188 189 193 197 199 202 205 206 207 208 209 210 212 213 214 215 217 218 220 221 222 r 0 171 # 3212 is_empty_range c a 224 1 1 e r 0 224 # 3213 is_empty_range c a 224 1 1 e r 44 14 # 3214 is_empty_range c a 224 1 1 e r 0 34 # 3215 is_empty_range c a 224 1 1 e r 128 224 # 3216 is_empty_range c a 224 1 1 e r 0 62 # 3217 is_empty_range c a 224 1 1 f r 0 224 # 3218 is_empty_range c a 224 1 1 f r 134 13 # 3219 is_empty_range c a 224 1 1 f r 83 190 # 3220 is_empty_range c a 224 1 1 f r 186 224 # 3221 is_empty_range c a 224 1 1 f r 0 2 # 3222 is_empty_range c a 224 1 1 1 2 4 5 7 8 9 11 12 14 15 20 21 23 24 25 27 30 31 34 38 43 44 46 47 48 51 52 53 54 55 56 58 59 60 61 62 65 67 68 72 73 77 79 81 82 84 87 88 90 92 94 98 100 104 105 106 108 111 113 120 121 122 123 126 127 128 129 130 134 137 139 141 142 143 144 148 149 152 156 158 161 162 165 166 167 168 170 172 173 175 176 177 178 179 180 184 186 188 189 190 191 192 193 196 198 199 201 205 208 211 212 216 217 218 219 220 221 222 r 0 224 # 3223 is_empty_range c a 224 1 1 0 2 3 5 6 7 11 13 16 17 19 26 29 30 32 39 40 41 42 44 46 47 48 49 53 55 56 61 65 66 67 68 71 74 75 77 78 80 82 84 87 88 91 93 95 97 98 107 108 111 114 120 121 127 129 131 133 135 136 137 138 139 140 142 145 146 147 148 151 154 155 156 158 164 167 169 170 173 174 175 177 178 181 189 190 191 196 199 203 204 205 208 210 211 215 217 219 220 222 223 r 71 21 # 3224 is_empty_range c a 224 1 1 5 6 8 9 17 19 21 23 24 26 27 30 32 34 35 37 39 41 43 45 46 51 53 54 56 57 61 62 63 65 66 71 73 74 75 77 79 82 83 85 91 94 95 96 97 101 103 107 108 109 110 113 114 116 118 120 122 125 126 130 131 132 136 137 139 140 142 143 145 151 155 159 164 165 166 167 168 171 172 174 178 179 182 183 184 185 186 187 190 191 192 195 198 200 202 203 204 205 208 209 210 213 215 216 218 219 220 221 222 223 r 62 120 # 3225 is_empty_range c a 224 1 1 0 3 5 6 8 9 11 12 14 15 16 18 22 25 26 28 29 31 35 44 49 50 51 54 55 57 59 60 62 64 66 68 70 71 72 73 78 79 81 83 86 92 94 95 97 100 101 103 104 108 110 112 116 118 120 122 125 127 136 138 139 140 141 143 145 146 149 150 152 153 154 157 159 161 163 165 171 172 173 174 176 177 184 186 191 193 194 196 198 199 201 202 204 205 206 210 211 218 219 220 r 61 224 # 3226 is_empty_range c a 224 1 1 1 6 11 13 18 19 20 25 27 29 31 33 35 36 40 41 43 45 47 50 52 53 54 56 60 61 64 67 68 69 70 72 76 77 81 84 86 87 93 94 98 99 101 105 108 109 112 113 114 115 117 118 119 123 124 128 133 136 137 138 139 140 149 151 154 156 157 161 162 166 169 170 171 172 177 178 179 180 181 183 189 190 194 195 196 197 199 200 202 203 206 207 209 210 211 212 214 219 220 r 0 179 # 3227 is_empty_range c a 247 0 0 e r 0 247 # 3228 is_empty_range c a 247 0 0 e r 239 204 # 3229 is_empty_range c a 247 0 0 e r 16 29 # 3230 is_empty_range c a 247 0 0 e r 230 247 # 3231 is_empty_range c a 247 0 0 e r 0 165 # 3232 is_empty_range c a 247 0 0 f r 0 247 # 3233 is_empty_range c a 247 0 0 f r 192 14 # 3234 is_empty_range c a 247 0 0 f r 20 197 # 3235 is_empty_range c a 247 0 0 f r 124 247 # 3236 is_empty_range c a 247 0 0 f r 0 154 # 3237 is_empty_range c a 247 0 0 0 10 12 13 16 17 18 24 29 31 33 36 37 38 41 42 44 47 50 51 52 54 55 56 60 61 64 65 66 67 69 70 71 72 73 74 76 80 82 83 84 85 86 87 90 96 98 100 101 103 104 107 108 110 111 112 113 114 116 117 123 125 126 129 130 132 134 135 140 142 145 146 150 151 155 162 164 165 168 169 171 175 179 181 183 185 186 190 191 192 193 195 197 198 203 204 208 209 210 212 215 219 220 222 223 227 231 232 235 236 237 239 240 242 244 r 0 247 # 3238 is_empty_range c a 247 0 0 2 7 8 9 12 13 14 15 16 19 23 24 26 30 32 33 34 35 37 38 40 42 43 48 49 51 52 53 54 55 57 62 63 65 66 67 68 69 73 75 77 81 84 87 89 95 98 99 103 105 106 107 110 111 117 119 120 121 125 131 132 133 134 135 136 137 138 141 143 144 145 146 148 151 152 157 158 163 165 166 167 168 169 171 174 177 178 179 180 182 183 184 185 187 188 189 191 193 194 196 197 200 201 206 208 209 211 212 214 215 218 219 222 224 225 226 227 228 231 233 234 236 237 238 239 242 244 245 r 92 3 # 3239 is_empty_range c a 247 0 0 0 1 4 5 7 8 9 10 13 14 15 16 18 21 22 23 24 27 28 31 33 34 36 39 45 47 56 57 59 61 63 68 69 70 71 77 81 82 83 88 89 92 93 94 99 100 102 104 106 107 111 114 115 116 119 122 125 129 136 141 143 147 148 149 150 153 154 156 158 159 163 164 165 166 167 168 172 173 177 181 182 183 184 185 188 192 193 194 195 197 198 202 207 208 209 212 216 218 219 220 227 229 234 240 242 243 244 r 22 26 # 3240 is_empty_range c a 247 0 0 1 3 4 5 6 9 12 13 16 17 18 19 22 23 25 28 32 33 34 35 36 37 39 40 41 43 44 45 46 48 49 51 52 54 58 61 64 69 73 74 77 78 80 83 84 85 86 87 89 91 92 93 97 98 99 102 103 105 107 108 109 110 111 115 118 123 124 130 131 132 133 134 136 137 138 139 140 141 142 148 150 151 154 156 158 159 160 161 162 163 164 167 170 174 176 177 178 181 183 187 188 189 190 191 192 193 194 199 201 203 205 208 210 214 216 219 222 223 225 228 229 232 240 242 243 245 r 74 247 # 3241 is_empty_range c a 247 0 0 0 1 2 5 7 9 14 16 20 21 22 25 27 29 30 32 33 34 36 37 40 42 44 45 47 48 49 51 52 57 58 59 60 61 63 64 65 67 68 70 71 72 73 74 75 78 84 86 89 90 91 92 94 95 97 102 105 107 111 112 115 116 120 123 125 127 128 129 130 133 134 135 136 140 141 143 145 146 153 154 155 156 158 159 161 163 164 166 167 168 171 172 173 174 176 177 179 180 181 184 188 192 195 196 197 201 205 208 209 211 212 215 216 217 220 222 223 224 225 226 227 228 232 237 238 240 241 242 243 246 r 0 161 # 3242 is_empty_range c a 247 0 1 e r 0 247 # 3243 is_empty_range c a 247 0 1 e r 22 18 # 3244 is_empty_range c a 247 0 1 e r 28 34 # 3245 is_empty_range c a 247 0 1 e r 118 247 # 3246 is_empty_range c a 247 0 1 e r 0 39 # 3247 is_empty_range c a 247 0 1 f r 0 247 # 3248 is_empty_range c a 247 0 1 f r 146 71 # 3249 is_empty_range c a 247 0 1 f r 48 145 # 3250 is_empty_range c a 247 0 1 f r 5 247 # 3251 is_empty_range c a 247 0 1 f r 0 159 # 3252 is_empty_range c a 247 0 1 0 2 3 4 10 13 15 16 17 18 19 20 21 22 25 26 27 28 31 32 33 34 35 41 42 43 44 45 47 48 50 51 53 56 60 65 67 71 73 76 77 78 79 81 82 83 88 90 91 92 93 96 100 102 106 109 111 114 115 116 117 119 121 122 124 125 126 127 132 134 136 137 138 143 144 145 146 147 148 150 154 157 159 163 164 169 170 171 173 174 175 176 177 178 179 180 184 189 191 193 194 195 197 199 200 208 209 211 213 217 218 219 223 226 227 230 235 237 238 240 244 245 246 r 0 247 # 3253 is_empty_range c a 247 0 1 2 3 4 7 8 9 11 12 13 17 18 19 22 23 29 33 37 39 40 41 42 43 46 47 48 49 50 53 54 56 58 62 63 71 74 75 77 82 83 84 85 87 88 93 94 95 100 101 103 104 106 108 110 113 120 121 122 124 125 126 127 128 131 132 133 134 135 140 142 145 146 147 152 153 155 156 158 159 160 163 166 168 170 172 174 175 178 179 180 181 183 184 185 187 191 193 194 195 199 200 201 207 208 210 216 217 218 220 225 227 230 234 235 238 241 242 243 245 246 r 227 170 # 3254 is_empty_range c a 247 0 1 0 2 4 6 7 9 11 15 22 25 26 28 29 30 31 33 36 38 40 44 45 47 51 52 59 62 63 65 66 69 70 74 75 77 78 79 82 84 86 91 92 93 95 96 101 103 106 109 111 113 117 119 121 123 124 125 126 127 130 131 134 136 138 139 142 145 146 148 152 153 155 156 163 164 165 167 170 171 175 177 182 185 186 187 191 192 195 197 198 199 200 202 204 205 208 210 212 213 216 219 220 222 223 224 226 228 229 231 237 238 241 245 r 32 153 # 3255 is_empty_range c a 247 0 1 0 4 9 16 17 18 21 22 25 26 29 30 36 37 41 42 43 44 47 48 49 52 53 54 56 58 61 62 63 66 68 70 73 76 78 79 86 88 89 90 92 94 96 97 98 99 101 103 104 106 107 108 109 110 114 117 118 120 123 124 127 131 133 134 137 138 140 141 142 143 144 145 148 150 151 152 154 155 156 160 161 164 165 167 168 173 176 177 178 183 184 185 186 190 191 193 195 196 197 198 199 205 206 207 208 211 212 213 214 215 216 217 219 220 221 222 224 227 228 230 233 234 235 236 238 240 243 244 246 r 132 247 # 3256 is_empty_range c a 247 0 1 1 2 4 5 7 8 9 10 11 12 13 16 17 21 22 28 30 33 37 40 43 44 45 47 48 54 55 56 58 59 61 62 63 64 66 70 74 76 79 80 82 84 85 86 88 89 92 95 96 98 101 103 104 107 108 109 110 113 114 115 117 120 121 122 123 124 127 130 131 134 136 139 141 144 145 148 149 150 152 153 155 156 157 164 166 167 168 169 170 172 173 174 175 176 178 179 181 183 186 190 192 194 195 196 197 198 199 200 203 205 215 216 222 224 225 226 227 229 230 233 234 235 236 240 242 244 246 r 0 206 # 3257 is_empty_range c a 247 1 0 e r 0 247 # 3258 is_empty_range c a 247 1 0 e r 89 61 # 3259 is_empty_range c a 247 1 0 e r 70 107 # 3260 is_empty_range c a 247 1 0 e r 3 247 # 3261 is_empty_range c a 247 1 0 e r 0 158 # 3262 is_empty_range c a 247 1 0 f r 0 247 # 3263 is_empty_range c a 247 1 0 f r 25 3 # 3264 is_empty_range c a 247 1 0 f r 13 24 # 3265 is_empty_range c a 247 1 0 f r 227 247 # 3266 is_empty_range c a 247 1 0 f r 0 43 # 3267 is_empty_range c a 247 1 0 0 1 4 6 7 8 10 11 12 13 15 16 18 21 23 24 25 27 28 30 31 32 35 36 39 42 46 49 50 51 52 54 55 56 59 62 64 67 69 70 71 73 78 79 80 82 83 84 85 87 88 89 90 93 94 96 100 105 106 107 108 111 112 114 115 116 119 123 124 127 128 129 131 133 134 135 136 137 139 141 142 146 148 151 152 153 154 155 157 158 159 160 162 163 165 166 167 170 171 174 176 177 178 179 181 182 184 186 187 189 190 192 193 197 199 201 202 205 206 208 209 212 213 219 227 229 230 231 232 238 239 240 241 243 244 245 r 0 247 # 3268 is_empty_range c a 247 1 0 2 6 7 12 13 14 16 18 19 20 21 22 23 24 25 26 27 28 29 30 32 33 34 36 40 42 45 46 49 51 52 53 54 55 56 57 62 66 68 70 71 72 80 81 83 84 88 89 90 93 94 95 97 98 101 102 103 109 110 116 117 118 119 120 121 126 127 129 130 132 133 135 137 139 143 144 147 149 151 152 153 156 158 161 162 163 164 166 168 170 172 175 176 177 178 179 180 182 184 186 187 189 191 192 193 194 195 197 198 201 202 207 208 209 210 211 213 217 219 220 227 228 230 233 236 237 239 240 242 243 245 r 30 0 # 3269 is_empty_range c a 247 1 0 2 3 4 11 14 15 16 18 19 20 21 24 26 27 28 29 30 36 37 40 41 42 45 50 54 55 56 57 58 59 60 62 63 64 67 68 69 70 71 73 75 76 78 80 81 82 83 85 86 88 89 91 94 97 98 100 101 104 105 106 107 109 111 112 114 117 118 120 123 125 127 128 131 133 134 136 137 139 140 141 142 143 145 147 148 151 152 154 157 161 164 166 169 172 175 177 178 181 183 185 187 188 193 194 195 196 201 205 207 209 211 212 213 214 216 217 219 221 222 223 224 225 226 227 230 231 234 235 238 239 244 246 r 79 84 # 3270 is_empty_range c a 247 1 0 2 6 9 12 14 22 24 25 27 28 31 32 33 39 40 41 43 45 46 50 51 52 53 56 57 60 61 63 64 65 66 68 70 71 74 75 77 79 83 84 85 87 89 92 93 98 100 101 104 106 108 110 117 119 120 126 127 128 129 133 134 136 137 138 139 140 141 146 151 152 155 156 158 159 161 163 164 165 167 168 169 170 171 172 173 175 179 181 182 188 189 190 191 192 194 195 197 199 200 202 203 205 206 207 211 212 214 224 225 226 227 228 230 231 232 233 234 235 236 238 239 240 242 243 245 246 r 135 247 # 3271 is_empty_range c a 247 1 0 0 4 7 10 12 13 15 18 20 24 25 28 31 32 34 35 36 40 42 43 44 46 48 50 52 53 54 55 56 58 59 64 66 67 68 71 72 74 75 76 77 81 82 84 85 86 87 89 90 91 94 95 96 97 98 99 101 102 105 106 107 111 114 117 119 120 121 127 129 130 131 132 139 141 143 146 147 153 154 157 159 160 162 163 164 167 170 171 174 176 177 180 181 182 184 186 197 199 201 202 205 206 207 212 213 214 215 218 219 220 225 227 228 229 230 231 232 233 235 236 238 240 242 243 r 0 200 # 3272 is_empty_range c a 247 1 1 e r 0 247 # 3273 is_empty_range c a 247 1 1 e r 198 137 # 3274 is_empty_range c a 247 1 1 e r 18 148 # 3275 is_empty_range c a 247 1 1 e r 150 247 # 3276 is_empty_range c a 247 1 1 e r 0 161 # 3277 is_empty_range c a 247 1 1 f r 0 247 # 3278 is_empty_range c a 247 1 1 f r 144 113 # 3279 is_empty_range c a 247 1 1 f r 30 225 # 3280 is_empty_range c a 247 1 1 f r 180 247 # 3281 is_empty_range c a 247 1 1 f r 0 80 # 3282 is_empty_range c a 247 1 1 2 3 6 7 8 9 11 13 17 21 28 29 31 32 34 36 37 39 40 42 46 47 49 51 52 53 54 56 58 59 62 64 65 67 68 69 70 71 74 75 76 77 78 79 80 82 83 84 85 86 87 89 90 92 94 95 99 100 102 104 105 106 109 112 114 115 116 117 118 120 121 122 123 128 129 131 134 135 136 137 140 141 142 143 145 146 148 149 155 156 157 160 161 163 164 166 167 171 174 175 176 178 179 183 184 189 190 191 194 197 199 201 202 203 206 208 209 210 214 215 216 219 222 223 224 225 228 229 230 232 233 235 240 r 0 247 # 3283 is_empty_range c a 247 1 1 1 2 7 8 13 15 16 17 19 22 26 27 28 30 31 33 35 36 38 39 40 41 43 44 46 47 49 51 55 56 58 60 61 65 66 69 71 72 73 74 75 77 79 80 81 85 88 89 90 91 92 94 96 97 98 100 104 108 109 110 111 112 114 122 123 125 128 129 130 131 133 142 143 144 145 149 152 157 158 160 161 163 164 167 168 169 181 182 186 187 189 191 193 194 200 204 205 207 209 212 214 216 221 223 224 226 227 232 233 234 239 241 245 246 r 43 25 # 3284 is_empty_range c a 247 1 1 1 2 4 6 9 10 11 15 16 17 25 26 30 31 33 34 37 39 40 45 48 49 50 52 54 56 57 58 61 63 64 66 67 70 72 77 78 82 84 85 86 87 88 89 92 94 95 96 97 98 99 104 105 107 111 112 113 116 122 124 125 127 128 129 130 133 136 137 143 145 149 150 151 158 159 161 163 164 165 168 170 171 172 173 174 176 178 179 182 184 185 186 189 191 194 198 199 200 202 203 205 209 211 213 216 217 218 220 221 227 228 230 232 233 236 241 242 243 244 r 45 46 # 3285 is_empty_range c a 247 1 1 2 4 6 8 10 11 14 15 16 17 18 21 22 24 25 26 29 32 34 35 36 38 40 41 49 51 52 54 55 56 57 60 61 62 63 67 68 71 73 75 81 84 87 89 91 93 94 95 98 100 105 110 111 117 119 122 123 126 127 128 132 133 134 135 136 137 139 142 143 144 145 146 148 150 152 153 157 159 161 164 169 171 175 179 180 184 186 189 191 192 193 196 198 202 204 207 208 209 210 211 212 215 216 217 220 223 228 232 234 236 239 240 242 243 244 245 246 r 239 247 # 3286 is_empty_range c a 247 1 1 0 2 3 4 5 6 7 9 13 14 15 20 21 23 25 26 28 29 30 31 32 34 35 37 38 39 40 41 43 44 46 47 48 55 57 60 61 63 67 70 71 74 75 76 77 78 82 83 84 86 90 91 94 95 96 98 99 101 102 103 105 106 107 108 109 112 115 116 118 119 120 121 122 123 124 125 126 127 128 130 133 136 137 139 140 141 143 145 151 154 156 157 158 159 161 165 166 168 170 175 176 177 184 186 187 188 189 190 194 195 196 197 199 203 206 209 210 213 214 217 218 221 223 224 226 227 228 230 233 234 235 237 239 240 r 0 37 # 3287 is_empty_range c a 0 0 0 e r 0 0 # 3288 is_full_range c a 0 0 0 e r 0 0 # 3289 is_full_range c a 0 0 0 e r 0 0 # 3290 is_full_range c a 0 0 0 e r 0 0 # 3291 is_full_range c a 0 0 0 e r 0 0 # 3292 is_full_range c a 0 0 0 e r 0 0 # 3293 is_full_range c a 0 0 0 e r 0 0 # 3294 is_full_range c a 0 0 0 e r 0 0 # 3295 is_full_range c a 0 0 0 e r 0 0 # 3296 is_full_range c a 0 0 0 e r 0 0 # 3297 is_full_range c a 0 0 0 r 0 0 # 3298 is_full_range c a 0 0 0 r 0 0 # 3299 is_full_range c a 0 0 0 r 0 0 # 3300 is_full_range c a 0 0 0 r 0 0 # 3301 is_full_range c a 0 0 0 r 0 0 # 3302 is_full_range c a 0 0 1 e r 0 0 # 3303 is_full_range c a 0 0 1 e r 0 0 # 3304 is_full_range c a 0 0 1 e r 0 0 # 3305 is_full_range c a 0 0 1 e r 0 0 # 3306 is_full_range c a 0 0 1 e r 0 0 # 3307 is_full_range c a 0 0 1 e r 0 0 # 3308 is_full_range c a 0 0 1 e r 0 0 # 3309 is_full_range c a 0 0 1 e r 0 0 # 3310 is_full_range c a 0 0 1 e r 0 0 # 3311 is_full_range c a 0 0 1 e r 0 0 # 3312 is_full_range c a 0 0 1 r 0 0 # 3313 is_full_range c a 0 0 1 r 0 0 # 3314 is_full_range c a 0 0 1 r 0 0 # 3315 is_full_range c a 0 0 1 r 0 0 # 3316 is_full_range c a 0 0 1 r 0 0 # 3317 is_full_range c a 0 1 0 e r 0 0 # 3318 is_full_range c a 0 1 0 e r 0 0 # 3319 is_full_range c a 0 1 0 e r 0 0 # 3320 is_full_range c a 0 1 0 e r 0 0 # 3321 is_full_range c a 0 1 0 e r 0 0 # 3322 is_full_range c a 0 1 0 e r 0 0 # 3323 is_full_range c a 0 1 0 e r 0 0 # 3324 is_full_range c a 0 1 0 e r 0 0 # 3325 is_full_range c a 0 1 0 e r 0 0 # 3326 is_full_range c a 0 1 0 e r 0 0 # 3327 is_full_range c a 0 1 0 r 0 0 # 3328 is_full_range c a 0 1 0 r 0 0 # 3329 is_full_range c a 0 1 0 r 0 0 # 3330 is_full_range c a 0 1 0 r 0 0 # 3331 is_full_range c a 0 1 0 r 0 0 # 3332 is_full_range c a 0 1 1 e r 0 0 # 3333 is_full_range c a 0 1 1 e r 0 0 # 3334 is_full_range c a 0 1 1 e r 0 0 # 3335 is_full_range c a 0 1 1 e r 0 0 # 3336 is_full_range c a 0 1 1 e r 0 0 # 3337 is_full_range c a 0 1 1 e r 0 0 # 3338 is_full_range c a 0 1 1 e r 0 0 # 3339 is_full_range c a 0 1 1 e r 0 0 # 3340 is_full_range c a 0 1 1 e r 0 0 # 3341 is_full_range c a 0 1 1 e r 0 0 # 3342 is_full_range c a 0 1 1 r 0 0 # 3343 is_full_range c a 0 1 1 r 0 0 # 3344 is_full_range c a 0 1 1 r 0 0 # 3345 is_full_range c a 0 1 1 r 0 0 # 3346 is_full_range c a 0 1 1 r 0 0 # 3347 is_full_range c a 1 0 0 e r 0 1 # 3348 is_full_range c a 1 0 0 e r 0 0 # 3349 is_full_range c a 1 0 0 e r 0 1 # 3350 is_full_range c a 1 0 0 e r 0 1 # 3351 is_full_range c a 1 0 0 e r 0 1 # 3352 is_full_range c a 1 0 0 f r 0 1 # 3353 is_full_range c a 1 0 0 f r 1 0 # 3354 is_full_range c a 1 0 0 f r 0 0 # 3355 is_full_range c a 1 0 0 f r 0 1 # 3356 is_full_range c a 1 0 0 f r 0 1 # 3357 is_full_range c a 1 0 0 r 0 1 # 3358 is_full_range c a 1 0 0 0 r 1 0 # 3359 is_full_range c a 1 0 0 r 0 0 # 3360 is_full_range c a 1 0 0 0 r 0 1 # 3361 is_full_range c a 1 0 0 0 r 0 0 # 3362 is_full_range c a 1 0 1 e r 0 1 # 3363 is_full_range c a 1 0 1 e r 0 0 # 3364 is_full_range c a 1 0 1 e r 0 0 # 3365 is_full_range c a 1 0 1 e r 0 1 # 3366 is_full_range c a 1 0 1 e r 0 1 # 3367 is_full_range c a 1 0 1 f r 0 1 # 3368 is_full_range c a 1 0 1 f r 1 0 # 3369 is_full_range c a 1 0 1 f r 0 1 # 3370 is_full_range c a 1 0 1 f r 0 1 # 3371 is_full_range c a 1 0 1 f r 0 0 # 3372 is_full_range c a 1 0 1 0 r 0 1 # 3373 is_full_range c a 1 0 1 r 1 0 # 3374 is_full_range c a 1 0 1 r 0 1 # 3375 is_full_range c a 1 0 1 r 0 1 # 3376 is_full_range c a 1 0 1 0 r 0 0 # 3377 is_full_range c a 1 1 0 e r 0 1 # 3378 is_full_range c a 1 1 0 e r 1 0 # 3379 is_full_range c a 1 1 0 e r 0 0 # 3380 is_full_range c a 1 1 0 e r 0 1 # 3381 is_full_range c a 1 1 0 e r 0 1 # 3382 is_full_range c a 1 1 0 f r 0 1 # 3383 is_full_range c a 1 1 0 f r 1 0 # 3384 is_full_range c a 1 1 0 f r 0 1 # 3385 is_full_range c a 1 1 0 f r 0 1 # 3386 is_full_range c a 1 1 0 f r 0 0 # 3387 is_full_range c a 1 1 0 0 r 0 1 # 3388 is_full_range c a 1 1 0 0 r 0 0 # 3389 is_full_range c a 1 1 0 r 0 0 # 3390 is_full_range c a 1 1 0 0 r 0 1 # 3391 is_full_range c a 1 1 0 r 0 1 # 3392 is_full_range c a 1 1 1 e r 0 1 # 3393 is_full_range c a 1 1 1 e r 1 0 # 3394 is_full_range c a 1 1 1 e r 0 0 # 3395 is_full_range c a 1 1 1 e r 0 1 # 3396 is_full_range c a 1 1 1 e r 0 1 # 3397 is_full_range c a 1 1 1 f r 0 1 # 3398 is_full_range c a 1 1 1 f r 1 0 # 3399 is_full_range c a 1 1 1 f r 0 0 # 3400 is_full_range c a 1 1 1 f r 0 1 # 3401 is_full_range c a 1 1 1 f r 0 1 # 3402 is_full_range c a 1 1 1 r 0 1 # 3403 is_full_range c a 1 1 1 r 0 0 # 3404 is_full_range c a 1 1 1 0 r 0 0 # 3405 is_full_range c a 1 1 1 r 0 1 # 3406 is_full_range c a 1 1 1 0 r 0 1 # 3407 is_full_range c a 31 0 0 e r 0 31 # 3408 is_full_range c a 31 0 0 e r 17 9 # 3409 is_full_range c a 31 0 0 e r 0 27 # 3410 is_full_range c a 31 0 0 e r 28 31 # 3411 is_full_range c a 31 0 0 e r 0 18 # 3412 is_full_range c a 31 0 0 f r 0 31 # 3413 is_full_range c a 31 0 0 f r 18 9 # 3414 is_full_range c a 31 0 0 f r 12 13 # 3415 is_full_range c a 31 0 0 f r 10 31 # 3416 is_full_range c a 31 0 0 f r 0 30 # 3417 is_full_range c a 31 0 0 0 1 4 8 9 11 12 13 14 16 17 18 19 21 24 26 27 30 r 0 31 # 3418 is_full_range c a 31 0 0 1 2 4 6 7 8 9 11 12 14 15 16 17 18 19 20 21 25 29 r 27 5 # 3419 is_full_range c a 31 0 0 1 4 7 8 10 11 12 13 14 15 17 18 22 24 26 r 5 10 # 3420 is_full_range c a 31 0 0 0 4 6 7 8 9 10 11 12 13 15 19 21 24 25 26 27 29 r 24 31 # 3421 is_full_range c a 31 0 0 0 3 4 6 7 9 13 15 17 18 20 22 25 28 29 r 0 2 # 3422 is_full_range c a 31 0 1 e r 0 31 # 3423 is_full_range c a 31 0 1 e r 25 10 # 3424 is_full_range c a 31 0 1 e r 23 29 # 3425 is_full_range c a 31 0 1 e r 10 31 # 3426 is_full_range c a 31 0 1 e r 0 3 # 3427 is_full_range c a 31 0 1 f r 0 31 # 3428 is_full_range c a 31 0 1 f r 22 3 # 3429 is_full_range c a 31 0 1 f r 1 10 # 3430 is_full_range c a 31 0 1 f r 19 31 # 3431 is_full_range c a 31 0 1 f r 0 13 # 3432 is_full_range c a 31 0 1 0 1 6 9 10 11 12 16 17 21 24 25 26 27 r 0 31 # 3433 is_full_range c a 31 0 1 1 2 7 8 9 12 13 14 16 19 20 30 r 6 1 # 3434 is_full_range c a 31 0 1 0 2 3 5 6 11 12 14 16 17 20 21 25 26 27 r 3 7 # 3435 is_full_range c a 31 0 1 3 4 5 8 12 13 15 17 18 21 23 24 29 30 r 28 31 # 3436 is_full_range c a 31 0 1 0 2 3 4 5 7 13 14 16 17 18 19 20 22 26 27 29 30 r 0 11 # 3437 is_full_range c a 31 1 0 e r 0 31 # 3438 is_full_range c a 31 1 0 e r 20 17 # 3439 is_full_range c a 31 1 0 e r 16 31 # 3440 is_full_range c a 31 1 0 e r 29 31 # 3441 is_full_range c a 31 1 0 e r 0 27 # 3442 is_full_range c a 31 1 0 f r 0 31 # 3443 is_full_range c a 31 1 0 f r 14 2 # 3444 is_full_range c a 31 1 0 f r 1 4 # 3445 is_full_range c a 31 1 0 f r 28 31 # 3446 is_full_range c a 31 1 0 f r 0 25 # 3447 is_full_range c a 31 1 0 1 2 4 8 10 12 13 15 17 23 24 26 27 28 29 r 0 31 # 3448 is_full_range c a 31 1 0 1 2 3 6 7 10 12 13 14 15 17 19 21 24 25 26 27 28 29 30 r 15 8 # 3449 is_full_range c a 31 1 0 0 1 2 4 5 6 8 11 12 14 15 17 18 20 22 23 25 27 28 29 r 22 28 # 3450 is_full_range c a 31 1 0 2 4 5 13 14 15 16 18 21 23 26 27 28 30 r 0 31 # 3451 is_full_range c a 31 1 0 0 2 3 6 7 8 11 14 17 19 20 21 22 23 26 28 29 30 r 0 24 # 3452 is_full_range c a 31 1 1 e r 0 31 # 3453 is_full_range c a 31 1 1 e r 29 14 # 3454 is_full_range c a 31 1 1 e r 11 17 # 3455 is_full_range c a 31 1 1 e r 18 31 # 3456 is_full_range c a 31 1 1 e r 0 31 # 3457 is_full_range c a 31 1 1 f r 0 31 # 3458 is_full_range c a 31 1 1 f r 7 3 # 3459 is_full_range c a 31 1 1 f r 0 0 # 3460 is_full_range c a 31 1 1 f r 15 31 # 3461 is_full_range c a 31 1 1 f r 0 16 # 3462 is_full_range c a 31 1 1 0 5 7 8 9 10 13 14 16 17 19 20 21 22 27 28 29 30 r 0 31 # 3463 is_full_range c a 31 1 1 0 1 5 6 8 9 11 14 15 16 18 19 21 22 24 25 26 27 28 29 30 r 20 14 # 3464 is_full_range c a 31 1 1 2 6 7 9 11 12 13 14 16 17 19 21 22 24 25 27 28 r 2 4 # 3465 is_full_range c a 31 1 1 3 9 10 12 16 18 19 20 22 23 24 28 r 15 31 # 3466 is_full_range c a 31 1 1 0 1 3 4 10 14 16 17 18 19 21 25 26 30 r 0 3 # 3467 is_full_range c a 32 0 0 e r 0 32 # 3468 is_full_range c a 32 0 0 e r 1 0 # 3469 is_full_range c a 32 0 0 e r 18 22 # 3470 is_full_range c a 32 0 0 e r 25 32 # 3471 is_full_range c a 32 0 0 e r 0 16 # 3472 is_full_range c a 32 0 0 f r 0 32 # 3473 is_full_range c a 32 0 0 f r 25 22 # 3474 is_full_range c a 32 0 0 f r 2 7 # 3475 is_full_range c a 32 0 0 f r 9 32 # 3476 is_full_range c a 32 0 0 f r 0 4 # 3477 is_full_range c a 32 0 0 0 1 3 4 7 9 12 13 14 18 21 23 25 26 r 0 32 # 3478 is_full_range c a 32 0 0 1 2 3 6 7 13 14 17 18 19 20 21 22 24 25 27 29 r 29 4 # 3479 is_full_range c a 32 0 0 2 6 8 9 11 13 16 19 21 22 23 24 26 28 29 r 14 23 # 3480 is_full_range c a 32 0 0 0 1 7 8 9 10 13 14 16 19 22 24 25 28 29 31 r 1 32 # 3481 is_full_range c a 32 0 0 0 2 4 7 9 10 11 14 15 16 18 28 29 30 31 r 0 19 # 3482 is_full_range c a 32 0 1 e r 0 32 # 3483 is_full_range c a 32 0 1 e r 29 24 # 3484 is_full_range c a 32 0 1 e r 18 28 # 3485 is_full_range c a 32 0 1 e r 15 32 # 3486 is_full_range c a 32 0 1 e r 0 26 # 3487 is_full_range c a 32 0 1 f r 0 32 # 3488 is_full_range c a 32 0 1 f r 18 11 # 3489 is_full_range c a 32 0 1 f r 5 11 # 3490 is_full_range c a 32 0 1 f r 2 32 # 3491 is_full_range c a 32 0 1 f r 0 19 # 3492 is_full_range c a 32 0 1 0 5 6 7 8 18 19 20 21 22 25 r 0 32 # 3493 is_full_range c a 32 0 1 0 1 2 5 6 8 10 12 14 15 16 17 18 19 22 23 27 28 29 30 r 30 0 # 3494 is_full_range c a 32 0 1 0 1 3 6 8 9 10 11 12 13 14 16 18 19 25 29 30 r 24 31 # 3495 is_full_range c a 32 0 1 0 2 3 4 5 6 7 8 10 11 12 14 15 20 21 23 24 25 26 27 r 12 32 # 3496 is_full_range c a 32 0 1 4 8 14 16 19 20 22 23 24 25 26 31 r 0 5 # 3497 is_full_range c a 32 1 0 e r 0 32 # 3498 is_full_range c a 32 1 0 e r 17 4 # 3499 is_full_range c a 32 1 0 e r 0 0 # 3500 is_full_range c a 32 1 0 e r 10 32 # 3501 is_full_range c a 32 1 0 e r 0 12 # 3502 is_full_range c a 32 1 0 f r 0 32 # 3503 is_full_range c a 32 1 0 f r 3 0 # 3504 is_full_range c a 32 1 0 f r 10 11 # 3505 is_full_range c a 32 1 0 f r 9 32 # 3506 is_full_range c a 32 1 0 f r 0 15 # 3507 is_full_range c a 32 1 0 1 2 4 5 9 12 13 16 18 19 22 25 27 30 r 0 32 # 3508 is_full_range c a 32 1 0 1 2 7 9 13 16 21 22 23 24 25 27 31 r 5 1 # 3509 is_full_range c a 32 1 0 0 2 5 7 9 11 14 16 19 22 23 26 27 28 29 31 r 2 8 # 3510 is_full_range c a 32 1 0 1 2 3 4 8 9 10 11 13 15 17 18 24 29 31 r 4 32 # 3511 is_full_range c a 32 1 0 1 2 5 7 8 12 13 14 15 16 20 21 26 28 29 31 r 0 14 # 3512 is_full_range c a 32 1 1 e r 0 32 # 3513 is_full_range c a 32 1 1 e r 19 12 # 3514 is_full_range c a 32 1 1 e r 17 21 # 3515 is_full_range c a 32 1 1 e r 30 32 # 3516 is_full_range c a 32 1 1 e r 0 16 # 3517 is_full_range c a 32 1 1 f r 0 32 # 3518 is_full_range c a 32 1 1 f r 9 2 # 3519 is_full_range c a 32 1 1 f r 11 26 # 3520 is_full_range c a 32 1 1 f r 13 32 # 3521 is_full_range c a 32 1 1 f r 0 15 # 3522 is_full_range c a 32 1 1 2 11 13 14 15 16 17 19 22 24 25 26 27 28 30 r 0 32 # 3523 is_full_range c a 32 1 1 1 2 3 5 7 9 10 11 14 22 28 r 25 17 # 3524 is_full_range c a 32 1 1 1 5 9 10 13 15 17 22 23 24 28 29 31 r 0 12 # 3525 is_full_range c a 32 1 1 3 5 9 11 13 14 15 16 19 21 23 25 26 27 28 r 10 32 # 3526 is_full_range c a 32 1 1 0 3 4 8 9 10 12 13 15 16 19 21 24 25 29 30 r 0 18 # 3527 is_full_range c a 33 0 0 e r 0 33 # 3528 is_full_range c a 33 0 0 e r 17 4 # 3529 is_full_range c a 33 0 0 e r 12 32 # 3530 is_full_range c a 33 0 0 e r 28 33 # 3531 is_full_range c a 33 0 0 e r 0 31 # 3532 is_full_range c a 33 0 0 f r 0 33 # 3533 is_full_range c a 33 0 0 f r 13 4 # 3534 is_full_range c a 33 0 0 f r 0 19 # 3535 is_full_range c a 33 0 0 f r 23 33 # 3536 is_full_range c a 33 0 0 f r 0 17 # 3537 is_full_range c a 33 0 0 3 4 7 9 13 14 16 19 20 22 23 24 29 30 31 r 0 33 # 3538 is_full_range c a 33 0 0 0 4 5 6 10 13 14 15 17 18 19 20 22 23 24 27 29 r 22 5 # 3539 is_full_range c a 33 0 0 1 3 8 12 15 17 18 20 23 24 27 28 29 32 r 6 8 # 3540 is_full_range c a 33 0 0 0 4 5 6 8 10 11 12 14 15 19 21 24 26 28 31 32 r 12 33 # 3541 is_full_range c a 33 0 0 1 2 5 6 7 8 9 11 12 13 16 19 20 26 27 29 31 r 0 1 # 3542 is_full_range c a 33 0 1 e r 0 33 # 3543 is_full_range c a 33 0 1 e r 23 10 # 3544 is_full_range c a 33 0 1 e r 5 10 # 3545 is_full_range c a 33 0 1 e r 8 33 # 3546 is_full_range c a 33 0 1 e r 0 22 # 3547 is_full_range c a 33 0 1 f r 0 33 # 3548 is_full_range c a 33 0 1 f r 32 29 # 3549 is_full_range c a 33 0 1 f r 8 9 # 3550 is_full_range c a 33 0 1 f r 7 33 # 3551 is_full_range c a 33 0 1 f r 0 6 # 3552 is_full_range c a 33 0 1 0 1 4 5 7 9 12 17 22 25 27 r 0 33 # 3553 is_full_range c a 33 0 1 0 1 2 3 5 9 10 11 12 14 15 16 23 24 28 29 30 32 r 20 1 # 3554 is_full_range c a 33 0 1 0 1 4 7 10 11 17 18 20 22 24 25 26 28 29 30 31 r 1 19 # 3555 is_full_range c a 33 0 1 4 5 6 7 8 10 12 13 17 19 20 22 24 26 27 28 30 32 r 22 33 # 3556 is_full_range c a 33 0 1 0 2 3 5 6 9 10 11 12 19 26 27 28 30 31 32 r 0 24 # 3557 is_full_range c a 33 1 0 e r 0 33 # 3558 is_full_range c a 33 1 0 e r 25 4 # 3559 is_full_range c a 33 1 0 e r 9 11 # 3560 is_full_range c a 33 1 0 e r 6 33 # 3561 is_full_range c a 33 1 0 e r 0 22 # 3562 is_full_range c a 33 1 0 f r 0 33 # 3563 is_full_range c a 33 1 0 f r 27 0 # 3564 is_full_range c a 33 1 0 f r 3 11 # 3565 is_full_range c a 33 1 0 f r 2 33 # 3566 is_full_range c a 33 1 0 f r 0 6 # 3567 is_full_range c a 33 1 0 3 5 7 9 11 12 15 16 20 21 22 24 26 29 31 32 r 0 33 # 3568 is_full_range c a 33 1 0 1 5 10 12 13 17 20 22 26 27 29 30 31 32 r 3 1 # 3569 is_full_range c a 33 1 0 2 7 11 14 15 18 19 20 21 23 26 28 29 30 r 3 29 # 3570 is_full_range c a 33 1 0 0 1 3 4 7 8 9 10 11 15 16 19 20 21 24 27 28 29 30 r 17 33 # 3571 is_full_range c a 33 1 0 7 11 15 16 18 20 22 23 25 26 32 r 0 32 # 3572 is_full_range c a 33 1 1 e r 0 33 # 3573 is_full_range c a 33 1 1 e r 4 2 # 3574 is_full_range c a 33 1 1 e r 8 11 # 3575 is_full_range c a 33 1 1 e r 15 33 # 3576 is_full_range c a 33 1 1 e r 0 31 # 3577 is_full_range c a 33 1 1 f r 0 33 # 3578 is_full_range c a 33 1 1 f r 28 11 # 3579 is_full_range c a 33 1 1 f r 26 27 # 3580 is_full_range c a 33 1 1 f r 2 33 # 3581 is_full_range c a 33 1 1 f r 0 5 # 3582 is_full_range c a 33 1 1 2 3 4 7 9 10 13 22 24 28 29 30 31 r 0 33 # 3583 is_full_range c a 33 1 1 1 3 9 10 14 18 19 20 21 22 28 30 r 19 0 # 3584 is_full_range c a 33 1 1 0 1 2 5 6 8 12 15 18 19 20 21 24 28 29 30 32 r 2 24 # 3585 is_full_range c a 33 1 1 0 1 2 4 5 6 8 12 13 15 18 19 22 23 25 26 27 29 r 4 33 # 3586 is_full_range c a 33 1 1 0 3 5 6 7 9 10 11 14 16 18 19 20 22 23 24 28 29 30 31 r 0 28 # 3587 is_full_range c a 63 0 0 e r 0 63 # 3588 is_full_range c a 63 0 0 e r 11 7 # 3589 is_full_range c a 63 0 0 e r 7 10 # 3590 is_full_range c a 63 0 0 e r 37 63 # 3591 is_full_range c a 63 0 0 e r 0 1 # 3592 is_full_range c a 63 0 0 f r 0 63 # 3593 is_full_range c a 63 0 0 f r 31 29 # 3594 is_full_range c a 63 0 0 f r 36 55 # 3595 is_full_range c a 63 0 0 f r 9 63 # 3596 is_full_range c a 63 0 0 f r 0 37 # 3597 is_full_range c a 63 0 0 1 4 10 11 12 14 15 17 18 19 20 21 26 29 30 34 36 38 39 40 42 43 44 50 52 54 56 57 58 59 r 0 63 # 3598 is_full_range c a 63 0 0 0 1 6 11 13 15 17 18 20 21 23 24 25 26 27 32 34 36 37 38 43 44 45 50 53 55 56 57 58 61 62 r 59 38 # 3599 is_full_range c a 63 0 0 0 1 4 5 6 7 8 10 11 12 16 19 20 22 23 26 30 32 34 35 36 38 39 40 41 42 43 44 45 47 49 50 53 54 57 58 59 r 32 47 # 3600 is_full_range c a 63 0 0 0 1 2 4 5 12 14 18 22 24 25 29 32 33 34 36 38 40 42 44 45 46 48 49 50 52 53 55 56 57 60 61 r 8 63 # 3601 is_full_range c a 63 0 0 0 2 5 6 10 13 14 17 20 21 23 24 25 27 28 29 32 34 37 38 39 46 47 53 56 58 62 r 0 63 # 3602 is_full_range c a 63 0 1 e r 0 63 # 3603 is_full_range c a 63 0 1 e r 29 16 # 3604 is_full_range c a 63 0 1 e r 0 2 # 3605 is_full_range c a 63 0 1 e r 40 63 # 3606 is_full_range c a 63 0 1 e r 0 29 # 3607 is_full_range c a 63 0 1 f r 0 63 # 3608 is_full_range c a 63 0 1 f r 11 0 # 3609 is_full_range c a 63 0 1 f r 22 28 # 3610 is_full_range c a 63 0 1 f r 46 63 # 3611 is_full_range c a 63 0 1 f r 0 57 # 3612 is_full_range c a 63 0 1 0 2 7 8 9 10 11 13 18 19 23 24 25 26 27 28 31 32 34 38 41 44 46 48 49 50 51 54 57 62 r 0 63 # 3613 is_full_range c a 63 0 1 1 2 7 8 10 15 17 18 24 26 27 28 30 31 32 33 37 38 41 43 45 46 47 48 50 51 52 r 53 28 # 3614 is_full_range c a 63 0 1 0 1 2 3 4 7 8 12 13 16 20 21 22 23 25 27 29 31 32 34 37 42 45 46 49 50 51 52 54 55 58 59 61 62 r 15 27 # 3615 is_full_range c a 63 0 1 1 2 4 5 6 8 9 10 11 12 14 15 17 19 20 25 26 28 32 34 35 39 42 44 45 46 48 50 51 52 59 61 r 25 63 # 3616 is_full_range c a 63 0 1 1 5 7 12 14 15 16 17 19 20 21 22 24 30 31 35 37 38 39 40 43 46 48 50 51 52 53 55 59 60 62 r 0 13 # 3617 is_full_range c a 63 1 0 e r 0 63 # 3618 is_full_range c a 63 1 0 e r 4 0 # 3619 is_full_range c a 63 1 0 e r 53 63 # 3620 is_full_range c a 63 1 0 e r 21 63 # 3621 is_full_range c a 63 1 0 e r 0 41 # 3622 is_full_range c a 63 1 0 f r 0 63 # 3623 is_full_range c a 63 1 0 f r 13 10 # 3624 is_full_range c a 63 1 0 f r 2 22 # 3625 is_full_range c a 63 1 0 f r 2 63 # 3626 is_full_range c a 63 1 0 f r 0 27 # 3627 is_full_range c a 63 1 0 4 7 10 11 12 14 15 16 17 19 20 21 25 28 29 31 33 38 39 40 41 42 43 44 45 46 47 48 53 54 55 61 r 0 63 # 3628 is_full_range c a 63 1 0 0 1 3 5 6 8 9 11 12 14 16 18 20 21 23 25 28 29 30 31 32 34 35 37 44 46 47 48 49 51 53 54 55 57 60 61 r 4 1 # 3629 is_full_range c a 63 1 0 0 1 3 4 5 8 13 14 15 17 19 25 30 32 34 35 36 39 40 41 43 44 46 47 48 50 52 54 58 59 60 62 r 4 10 # 3630 is_full_range c a 63 1 0 0 1 2 5 6 7 8 9 10 12 13 16 17 20 22 26 27 29 34 35 36 37 38 39 40 43 47 51 52 53 58 59 60 r 54 63 # 3631 is_full_range c a 63 1 0 0 3 4 5 6 7 9 11 13 14 15 17 18 20 21 28 29 30 31 33 36 38 43 45 48 50 51 56 57 58 59 60 r 0 7 # 3632 is_full_range c a 63 1 1 e r 0 63 # 3633 is_full_range c a 63 1 1 e r 55 15 # 3634 is_full_range c a 63 1 1 e r 2 21 # 3635 is_full_range c a 63 1 1 e r 15 63 # 3636 is_full_range c a 63 1 1 e r 0 13 # 3637 is_full_range c a 63 1 1 f r 0 63 # 3638 is_full_range c a 63 1 1 f r 28 3 # 3639 is_full_range c a 63 1 1 f r 3 6 # 3640 is_full_range c a 63 1 1 f r 37 63 # 3641 is_full_range c a 63 1 1 f r 0 63 # 3642 is_full_range c a 63 1 1 1 2 4 8 9 10 12 15 16 17 18 20 22 23 24 25 27 29 33 34 37 38 40 42 44 45 47 48 52 55 57 58 59 60 61 r 0 63 # 3643 is_full_range c a 63 1 1 1 2 3 5 7 8 9 12 15 17 19 21 26 28 29 32 34 41 45 48 49 52 56 58 59 62 r 33 10 # 3644 is_full_range c a 63 1 1 0 1 6 7 8 11 12 13 14 15 16 17 18 23 25 28 29 31 32 36 39 40 42 43 45 46 48 49 50 53 55 56 57 59 60 62 r 0 0 # 3645 is_full_range c a 63 1 1 1 2 3 5 6 7 8 9 10 11 12 15 16 17 19 20 22 23 25 27 28 30 33 36 39 42 48 49 51 54 55 58 61 62 r 9 63 # 3646 is_full_range c a 63 1 1 0 3 4 6 8 10 12 14 15 18 19 20 24 26 28 29 30 31 36 38 40 41 42 47 48 49 53 54 62 r 0 11 # 3647 is_full_range c a 64 0 0 e r 0 64 # 3648 is_full_range c a 64 0 0 e r 29 24 # 3649 is_full_range c a 64 0 0 e r 35 44 # 3650 is_full_range c a 64 0 0 e r 30 64 # 3651 is_full_range c a 64 0 0 e r 0 5 # 3652 is_full_range c a 64 0 0 f r 0 64 # 3653 is_full_range c a 64 0 0 f r 0 0 # 3654 is_full_range c a 64 0 0 f r 16 43 # 3655 is_full_range c a 64 0 0 f r 30 64 # 3656 is_full_range c a 64 0 0 f r 0 20 # 3657 is_full_range c a 64 0 0 3 5 7 8 10 11 12 15 16 19 20 24 26 27 28 29 33 37 40 43 44 46 47 48 53 54 56 57 59 60 61 r 0 64 # 3658 is_full_range c a 64 0 0 2 3 5 10 11 12 13 14 15 16 20 22 23 25 26 28 32 35 40 43 44 46 47 49 58 59 60 r 63 8 # 3659 is_full_range c a 64 0 0 1 2 3 5 6 7 8 9 10 11 12 14 16 17 18 21 22 24 25 29 30 31 32 33 35 36 38 39 41 46 49 50 51 52 53 54 55 58 59 61 r 7 29 # 3660 is_full_range c a 64 0 0 3 4 5 6 9 10 13 15 16 17 18 19 20 23 24 25 28 29 33 36 37 38 40 42 49 50 51 54 56 58 59 r 41 64 # 3661 is_full_range c a 64 0 0 1 5 7 8 9 11 12 13 15 16 19 20 22 25 29 30 31 32 33 36 37 41 45 48 49 51 57 58 60 61 r 0 17 # 3662 is_full_range c a 64 0 1 e r 0 64 # 3663 is_full_range c a 64 0 1 e r 10 4 # 3664 is_full_range c a 64 0 1 e r 27 50 # 3665 is_full_range c a 64 0 1 e r 28 64 # 3666 is_full_range c a 64 0 1 e r 0 13 # 3667 is_full_range c a 64 0 1 f r 0 64 # 3668 is_full_range c a 64 0 1 f r 63 45 # 3669 is_full_range c a 64 0 1 f r 7 19 # 3670 is_full_range c a 64 0 1 f r 49 64 # 3671 is_full_range c a 64 0 1 f r 0 5 # 3672 is_full_range c a 64 0 1 0 4 6 7 13 14 15 16 18 22 26 27 28 30 32 34 37 39 40 41 48 49 50 51 53 59 r 0 64 # 3673 is_full_range c a 64 0 1 2 3 6 8 13 14 16 17 19 20 23 24 25 26 28 32 40 41 42 44 45 48 49 51 53 54 55 56 57 59 61 r 55 1 # 3674 is_full_range c a 64 0 1 3 4 5 6 7 9 10 11 13 15 16 17 18 20 23 26 28 29 39 40 45 46 47 48 49 53 58 59 60 r 37 40 # 3675 is_full_range c a 64 0 1 2 3 4 5 6 8 11 14 15 16 17 21 24 26 27 28 32 34 35 36 37 39 41 42 44 45 47 48 49 50 54 56 59 60 61 62 63 r 18 64 # 3676 is_full_range c a 64 0 1 0 2 3 4 5 8 9 11 12 15 17 19 22 23 24 26 29 35 37 41 45 51 52 53 54 55 57 59 60 61 63 r 0 5 # 3677 is_full_range c a 64 1 0 e r 0 64 # 3678 is_full_range c a 64 1 0 e r 8 0 # 3679 is_full_range c a 64 1 0 e r 12 22 # 3680 is_full_range c a 64 1 0 e r 5 64 # 3681 is_full_range c a 64 1 0 e r 0 39 # 3682 is_full_range c a 64 1 0 f r 0 64 # 3683 is_full_range c a 64 1 0 f r 26 25 # 3684 is_full_range c a 64 1 0 f r 1 3 # 3685 is_full_range c a 64 1 0 f r 58 64 # 3686 is_full_range c a 64 1 0 f r 0 1 # 3687 is_full_range c a 64 1 0 0 2 5 8 10 11 13 23 27 33 34 35 36 43 45 47 49 51 52 53 54 61 62 63 r 0 64 # 3688 is_full_range c a 64 1 0 0 2 4 6 8 12 17 18 20 21 22 23 24 28 31 32 36 38 39 41 45 46 47 48 49 50 51 53 54 56 58 59 62 r 24 16 # 3689 is_full_range c a 64 1 0 0 1 4 5 9 11 12 14 15 19 20 23 25 28 31 37 38 40 44 47 49 50 54 55 56 58 59 62 63 r 10 19 # 3690 is_full_range c a 64 1 0 0 1 2 3 6 7 8 9 12 13 14 15 16 18 19 20 21 23 24 25 27 29 30 32 36 39 40 41 43 53 57 59 60 61 63 r 21 64 # 3691 is_full_range c a 64 1 0 0 3 4 6 8 9 10 11 15 16 17 19 21 24 26 27 28 29 32 33 35 44 45 47 48 53 56 59 61 r 0 1 # 3692 is_full_range c a 64 1 1 e r 0 64 # 3693 is_full_range c a 64 1 1 e r 36 8 # 3694 is_full_range c a 64 1 1 e r 0 0 # 3695 is_full_range c a 64 1 1 e r 23 64 # 3696 is_full_range c a 64 1 1 e r 0 45 # 3697 is_full_range c a 64 1 1 f r 0 64 # 3698 is_full_range c a 64 1 1 f r 4 3 # 3699 is_full_range c a 64 1 1 f r 10 12 # 3700 is_full_range c a 64 1 1 f r 47 64 # 3701 is_full_range c a 64 1 1 f r 0 0 # 3702 is_full_range c a 64 1 1 1 3 6 8 13 14 17 18 19 20 24 25 26 28 29 30 31 32 34 36 37 38 39 40 41 44 45 46 48 49 51 52 55 57 59 60 62 63 r 0 64 # 3703 is_full_range c a 64 1 1 1 6 10 13 17 28 33 35 40 42 43 44 48 50 52 54 56 58 60 62 63 r 23 14 # 3704 is_full_range c a 64 1 1 0 1 2 3 7 11 12 15 18 20 21 23 27 29 31 33 34 35 38 39 41 42 45 46 47 49 50 51 52 54 55 56 57 58 59 60 62 r 4 47 # 3705 is_full_range c a 64 1 1 0 1 3 4 5 6 8 9 11 12 13 14 15 16 17 20 21 23 24 26 27 30 32 35 36 37 39 40 41 42 43 45 48 49 50 52 55 58 59 61 r 34 64 # 3706 is_full_range c a 64 1 1 0 2 3 5 6 8 10 11 12 13 14 15 16 19 23 24 27 28 29 30 31 32 33 36 38 39 40 42 43 48 49 53 54 58 60 61 62 63 r 0 52 # 3707 is_full_range c a 65 0 0 e r 0 65 # 3708 is_full_range c a 65 0 0 e r 35 10 # 3709 is_full_range c a 65 0 0 e r 1 31 # 3710 is_full_range c a 65 0 0 e r 37 65 # 3711 is_full_range c a 65 0 0 e r 0 18 # 3712 is_full_range c a 65 0 0 f r 0 65 # 3713 is_full_range c a 65 0 0 f r 19 13 # 3714 is_full_range c a 65 0 0 f r 15 20 # 3715 is_full_range c a 65 0 0 f r 0 65 # 3716 is_full_range c a 65 0 0 f r 0 15 # 3717 is_full_range c a 65 0 0 0 2 3 4 6 10 13 15 16 20 21 24 25 26 28 30 31 32 33 36 38 40 41 42 43 44 46 47 48 51 54 55 57 62 63 64 r 0 65 # 3718 is_full_range c a 65 0 0 2 3 6 8 9 10 12 13 14 16 17 20 22 23 24 25 26 28 29 35 40 42 43 44 45 46 47 52 54 55 57 60 62 64 r 27 13 # 3719 is_full_range c a 65 0 0 2 3 5 8 11 12 13 15 16 17 18 19 20 21 22 24 26 30 32 33 36 37 39 40 41 42 43 46 48 49 50 51 52 53 55 59 64 r 3 29 # 3720 is_full_range c a 65 0 0 0 2 5 7 10 18 19 20 21 23 26 27 32 34 35 36 37 38 41 42 43 48 51 53 55 59 60 61 62 63 64 r 51 65 # 3721 is_full_range c a 65 0 0 0 1 2 3 7 9 11 13 14 15 16 20 21 22 25 33 34 41 44 49 50 54 55 59 61 62 63 64 r 0 62 # 3722 is_full_range c a 65 0 1 e r 0 65 # 3723 is_full_range c a 65 0 1 e r 13 10 # 3724 is_full_range c a 65 0 1 e r 3 27 # 3725 is_full_range c a 65 0 1 e r 64 65 # 3726 is_full_range c a 65 0 1 e r 0 8 # 3727 is_full_range c a 65 0 1 f r 0 65 # 3728 is_full_range c a 65 0 1 f r 9 6 # 3729 is_full_range c a 65 0 1 f r 23 47 # 3730 is_full_range c a 65 0 1 f r 35 65 # 3731 is_full_range c a 65 0 1 f r 0 57 # 3732 is_full_range c a 65 0 1 0 4 5 6 7 8 12 13 14 15 17 18 19 20 25 26 29 30 31 36 39 40 41 42 43 45 46 47 48 49 50 54 57 58 60 61 r 0 65 # 3733 is_full_range c a 65 0 1 0 1 5 7 8 9 11 12 14 18 20 22 23 28 29 31 33 35 36 38 39 42 44 46 47 48 51 52 55 57 60 61 62 r 27 20 # 3734 is_full_range c a 65 0 1 1 2 3 5 6 8 11 12 13 15 20 22 24 28 33 36 37 38 39 44 45 46 50 53 57 58 61 64 r 14 22 # 3735 is_full_range c a 65 0 1 0 1 2 3 4 9 11 14 16 18 20 21 23 24 32 34 35 36 39 42 44 46 47 48 49 51 52 53 54 55 56 61 r 51 65 # 3736 is_full_range c a 65 0 1 1 2 3 4 5 7 15 16 19 20 22 24 26 28 30 38 39 40 43 45 46 52 56 58 59 60 63 64 r 0 5 # 3737 is_full_range c a 65 1 0 e r 0 65 # 3738 is_full_range c a 65 1 0 e r 61 36 # 3739 is_full_range c a 65 1 0 e r 29 30 # 3740 is_full_range c a 65 1 0 e r 2 65 # 3741 is_full_range c a 65 1 0 e r 0 24 # 3742 is_full_range c a 65 1 0 f r 0 65 # 3743 is_full_range c a 65 1 0 f r 65 2 # 3744 is_full_range c a 65 1 0 f r 16 24 # 3745 is_full_range c a 65 1 0 f r 42 65 # 3746 is_full_range c a 65 1 0 f r 0 7 # 3747 is_full_range c a 65 1 0 2 3 6 7 8 9 11 15 20 22 24 27 31 33 35 38 43 44 47 48 49 52 54 55 57 58 59 61 63 64 r 0 65 # 3748 is_full_range c a 65 1 0 0 1 4 5 6 10 11 12 13 15 17 18 19 20 21 23 25 26 29 33 34 36 37 42 46 47 49 50 53 54 55 56 57 60 61 62 64 r 26 25 # 3749 is_full_range c a 65 1 0 0 1 2 4 8 9 11 13 14 17 20 22 25 28 30 31 32 33 35 46 47 48 51 52 54 58 61 64 r 39 44 # 3750 is_full_range c a 65 1 0 2 3 7 8 10 11 17 19 23 24 28 29 30 33 34 35 36 38 39 40 41 45 47 49 51 53 57 58 60 61 63 r 58 65 # 3751 is_full_range c a 65 1 0 0 2 7 8 13 14 15 16 18 21 22 25 26 27 28 32 33 34 38 40 43 46 48 55 59 60 61 63 64 r 0 1 # 3752 is_full_range c a 65 1 1 e r 0 65 # 3753 is_full_range c a 65 1 1 e r 27 23 # 3754 is_full_range c a 65 1 1 e r 7 14 # 3755 is_full_range c a 65 1 1 e r 0 65 # 3756 is_full_range c a 65 1 1 e r 0 19 # 3757 is_full_range c a 65 1 1 f r 0 65 # 3758 is_full_range c a 65 1 1 f r 4 2 # 3759 is_full_range c a 65 1 1 f r 29 57 # 3760 is_full_range c a 65 1 1 f r 9 65 # 3761 is_full_range c a 65 1 1 f r 0 3 # 3762 is_full_range c a 65 1 1 2 3 7 8 9 12 17 18 19 22 23 24 25 26 28 30 35 36 37 38 39 40 44 46 51 52 55 56 59 63 64 r 0 65 # 3763 is_full_range c a 65 1 1 0 1 3 4 6 11 12 13 20 23 24 28 30 31 34 36 37 38 40 43 45 47 48 49 51 53 54 58 60 61 r 19 12 # 3764 is_full_range c a 65 1 1 0 1 2 4 7 8 14 15 16 18 20 21 23 24 25 27 30 36 37 41 42 45 50 51 54 55 58 60 61 62 r 0 15 # 3765 is_full_range c a 65 1 1 0 7 8 13 16 19 20 21 22 25 26 27 28 31 33 35 36 37 38 39 42 43 48 49 54 55 56 57 58 59 60 62 64 r 57 65 # 3766 is_full_range c a 65 1 1 1 4 5 6 7 10 11 13 15 17 18 19 20 21 22 23 24 25 26 27 29 31 32 33 35 36 42 43 46 49 52 55 56 58 62 r 0 7 # 3767 is_full_range c a 211 0 0 e r 0 211 # 3768 is_full_range c a 211 0 0 e r 180 70 # 3769 is_full_range c a 211 0 0 e r 36 61 # 3770 is_full_range c a 211 0 0 e r 99 211 # 3771 is_full_range c a 211 0 0 e r 0 138 # 3772 is_full_range c a 211 0 0 f r 0 211 # 3773 is_full_range c a 211 0 0 f r 2 1 # 3774 is_full_range c a 211 0 0 f r 7 54 # 3775 is_full_range c a 211 0 0 f r 96 211 # 3776 is_full_range c a 211 0 0 f r 0 76 # 3777 is_full_range c a 211 0 0 0 4 7 8 11 12 14 15 16 18 19 26 32 33 36 37 39 41 42 45 46 47 48 49 50 53 54 55 59 60 61 62 63 69 71 75 76 78 79 83 85 86 87 92 96 98 103 104 105 107 108 110 112 113 114 116 117 118 120 122 123 124 127 128 131 132 133 134 135 136 139 142 145 148 150 151 152 153 154 155 156 158 159 160 162 163 168 169 170 173 176 177 178 179 190 192 193 194 198 199 201 203 204 205 207 208 209 r 0 211 # 3778 is_full_range c a 211 0 0 2 3 4 7 8 9 10 11 12 13 14 16 18 19 20 21 23 25 26 28 29 30 31 33 34 36 37 39 40 42 44 45 46 47 49 50 54 55 57 59 60 61 62 64 65 66 67 68 69 74 76 77 83 86 87 90 93 94 95 97 98 100 102 103 105 110 111 112 114 116 117 118 121 122 125 127 133 135 136 140 143 146 149 152 154 156 160 162 165 169 172 173 176 178 182 183 185 190 191 192 193 196 198 202 204 205 206 207 r 45 31 # 3779 is_full_range c a 211 0 0 0 3 4 5 6 8 9 13 15 18 19 22 24 25 28 29 31 34 37 39 40 41 43 45 46 47 49 50 52 54 55 61 63 65 66 68 73 75 76 78 79 80 83 84 86 91 93 96 98 100 102 106 108 109 111 113 114 116 117 121 124 125 126 129 130 133 135 142 145 146 150 151 153 155 156 159 163 165 166 167 169 174 175 176 177 178 180 181 184 188 189 191 193 194 195 198 199 201 203 206 208 209 210 r 17 52 # 3780 is_full_range c a 211 0 0 0 5 11 12 16 18 19 21 23 24 26 29 30 32 34 36 37 38 45 46 48 49 52 53 57 58 60 61 62 63 69 71 73 74 75 77 81 82 86 87 89 91 92 93 94 95 97 99 100 101 102 105 106 107 111 112 116 117 119 120 122 125 127 128 129 130 131 133 134 135 137 138 139 142 144 146 147 149 150 151 153 155 157 158 160 161 162 164 165 168 172 175 179 182 183 184 186 189 190 191 192 193 196 198 199 200 201 202 207 208 209 r 51 211 # 3781 is_full_range c a 211 0 0 0 2 3 7 10 11 12 13 15 22 24 25 27 28 29 30 31 32 34 36 41 44 45 48 49 50 54 57 58 60 61 62 63 65 68 73 74 78 80 81 82 87 90 93 94 96 98 99 100 104 106 109 110 113 114 115 119 120 122 123 125 130 131 137 138 139 140 141 144 146 147 150 152 153 156 157 158 159 160 161 162 164 166 169 171 172 173 175 178 179 180 182 183 187 188 189 190 191 192 193 195 201 204 205 207 208 209 210 r 0 116 # 3782 is_full_range c a 211 0 1 e r 0 211 # 3783 is_full_range c a 211 0 1 e r 205 191 # 3784 is_full_range c a 211 0 1 e r 59 69 # 3785 is_full_range c a 211 0 1 e r 38 211 # 3786 is_full_range c a 211 0 1 e r 0 124 # 3787 is_full_range c a 211 0 1 f r 0 211 # 3788 is_full_range c a 211 0 1 f r 210 182 # 3789 is_full_range c a 211 0 1 f r 102 182 # 3790 is_full_range c a 211 0 1 f r 177 211 # 3791 is_full_range c a 211 0 1 f r 0 189 # 3792 is_full_range c a 211 0 1 0 3 4 9 10 11 12 14 15 17 19 21 24 28 30 31 32 34 35 36 39 42 43 44 45 46 47 48 50 54 55 60 63 64 65 66 72 83 86 87 92 93 94 96 97 98 99 100 103 104 105 109 110 111 112 119 121 124 126 128 129 131 133 134 136 137 138 140 142 143 144 148 149 152 156 158 159 160 162 170 172 173 174 178 179 180 181 183 185 188 190 191 192 193 197 198 199 200 202 203 205 209 r 0 211 # 3793 is_full_range c a 211 0 1 1 2 3 7 10 14 16 21 24 28 30 31 33 34 35 38 39 40 43 44 45 47 49 51 53 57 58 59 61 62 63 64 65 66 67 70 71 72 73 74 75 76 78 81 83 84 85 87 90 91 93 95 96 98 100 101 103 104 106 107 108 111 113 114 117 119 122 133 134 135 136 137 138 139 141 142 143 144 146 151 153 155 157 158 159 162 165 168 170 171 173 174 175 177 179 180 185 187 191 192 195 197 200 204 205 208 210 r 30 2 # 3794 is_full_range c a 211 0 1 6 7 8 12 14 16 17 19 21 22 24 26 29 31 32 33 34 37 39 41 43 45 47 48 49 50 52 53 55 61 64 66 67 68 69 70 72 75 77 78 80 81 84 85 90 91 93 94 95 97 98 100 101 105 110 114 117 118 119 123 126 127 129 130 131 132 135 137 139 142 143 145 147 148 152 153 154 157 158 159 161 162 167 169 171 172 174 179 181 184 188 190 193 194 195 196 197 198 200 202 203 204 205 207 208 210 r 10 23 # 3795 is_full_range c a 211 0 1 1 2 7 9 11 12 14 15 16 22 23 25 26 27 28 34 39 42 43 44 45 46 47 48 50 53 55 56 58 59 60 63 65 67 69 70 75 78 81 83 84 85 86 87 88 89 90 91 93 94 95 96 98 100 102 104 109 111 112 113 114 116 117 119 120 121 124 126 127 129 133 134 137 139 140 141 142 143 144 145 147 148 151 153 154 157 159 160 161 163 164 165 167 168 169 170 171 172 174 175 177 179 181 182 183 184 185 188 189 190 192 197 204 205 206 207 208 210 r 38 211 # 3796 is_full_range c a 211 0 1 1 5 6 8 9 10 11 12 16 17 20 21 22 23 24 25 26 27 29 31 33 35 36 37 39 40 41 43 45 46 50 55 57 58 60 61 64 73 74 75 77 78 79 81 83 85 86 88 90 94 96 97 98 101 103 104 106 109 111 113 114 115 120 122 126 131 133 134 137 139 141 142 143 145 146 147 149 153 154 155 158 159 160 162 165 166 167 168 170 172 173 176 177 179 180 181 184 185 186 189 194 195 197 198 199 200 201 203 204 207 209 210 r 0 43 # 3797 is_full_range c a 211 1 0 e r 0 211 # 3798 is_full_range c a 211 1 0 e r 196 134 # 3799 is_full_range c a 211 1 0 e r 1 44 # 3800 is_full_range c a 211 1 0 e r 177 211 # 3801 is_full_range c a 211 1 0 e r 0 38 # 3802 is_full_range c a 211 1 0 f r 0 211 # 3803 is_full_range c a 211 1 0 f r 82 5 # 3804 is_full_range c a 211 1 0 f r 86 144 # 3805 is_full_range c a 211 1 0 f r 177 211 # 3806 is_full_range c a 211 1 0 f r 0 67 # 3807 is_full_range c a 211 1 0 1 4 7 9 10 14 15 17 19 20 21 23 24 30 33 34 35 38 42 44 45 47 50 54 56 58 59 63 66 67 68 72 73 74 75 76 77 78 81 83 87 88 89 90 94 95 96 97 98 99 101 104 105 106 107 108 109 110 115 116 117 118 119 120 121 122 125 128 129 131 132 135 138 140 141 142 149 150 151 152 153 155 156 159 162 164 165 170 172 173 174 177 179 180 182 183 185 186 189 191 193 196 197 198 201 204 209 r 0 211 # 3808 is_full_range c a 211 1 0 2 3 4 5 6 9 10 13 14 15 16 17 18 19 21 24 25 26 28 29 37 38 39 40 41 43 46 51 53 55 61 62 63 65 67 68 70 71 72 74 76 78 80 81 82 84 90 91 97 100 101 103 105 107 114 115 117 119 121 122 123 127 128 131 133 134 135 136 138 140 141 142 143 146 147 150 151 154 155 156 157 158 159 162 163 164 165 166 167 170 171 173 174 175 177 179 182 184 189 191 193 194 196 197 198 199 201 202 203 204 205 207 208 209 210 r 29 13 # 3809 is_full_range c a 211 1 0 1 2 3 4 7 8 11 24 27 28 29 30 33 37 41 42 43 47 48 49 52 54 55 56 59 63 65 67 68 69 75 76 79 81 86 87 88 90 91 92 93 94 96 97 100 101 102 104 105 106 107 111 113 114 116 117 119 122 126 127 138 139 140 146 150 151 153 155 158 159 160 162 167 168 171 172 173 177 179 182 183 188 191 195 196 197 198 199 202 205 207 208 209 210 r 73 125 # 3810 is_full_range c a 211 1 0 0 1 2 7 11 16 20 21 23 26 28 30 31 34 35 36 41 42 43 44 47 48 49 51 53 54 55 56 57 58 59 60 61 62 65 66 67 68 76 77 83 85 86 88 89 91 93 94 95 96 97 98 99 101 103 105 106 107 111 112 113 114 115 116 117 123 126 130 131 135 136 138 140 144 147 149 151 154 155 156 158 159 160 161 162 168 169 170 174 176 178 179 182 184 188 191 197 198 200 202 203 204 205 r 129 211 # 3811 is_full_range c a 211 1 0 2 4 6 7 10 11 15 16 17 19 21 22 24 25 26 27 31 34 36 37 38 40 41 42 44 47 49 50 51 52 54 57 59 60 61 66 69 74 76 79 80 82 83 84 85 89 90 92 94 96 97 101 103 109 113 115 116 122 123 124 125 127 129 130 131 132 134 136 141 142 143 144 145 146 149 150 151 154 155 157 158 159 160 161 162 165 166 167 171 172 173 175 176 181 185 187 188 191 192 196 197 202 206 208 210 r 0 32 # 3812 is_full_range c a 211 1 1 e r 0 211 # 3813 is_full_range c a 211 1 1 e r 87 33 # 3814 is_full_range c a 211 1 1 e r 92 179 # 3815 is_full_range c a 211 1 1 e r 31 211 # 3816 is_full_range c a 211 1 1 e r 0 44 # 3817 is_full_range c a 211 1 1 f r 0 211 # 3818 is_full_range c a 211 1 1 f r 167 79 # 3819 is_full_range c a 211 1 1 f r 0 1 # 3820 is_full_range c a 211 1 1 f r 25 211 # 3821 is_full_range c a 211 1 1 f r 0 7 # 3822 is_full_range c a 211 1 1 5 10 11 12 13 15 16 18 22 23 26 29 30 31 34 36 38 40 41 42 43 46 50 51 52 53 54 55 57 59 60 63 68 70 71 73 74 75 76 77 81 83 84 86 87 88 90 91 92 94 96 98 99 100 102 103 105 106 109 110 111 112 114 115 117 118 123 124 125 129 131 133 134 135 136 137 138 140 141 142 143 144 145 150 151 152 154 157 158 160 167 171 172 174 175 176 184 185 186 187 188 189 191 192 193 197 199 200 202 203 204 206 207 208 r 0 211 # 3823 is_full_range c a 211 1 1 1 4 7 9 12 14 16 17 20 21 23 24 25 26 30 31 35 36 38 41 42 45 46 47 53 54 55 57 59 60 62 65 69 71 72 76 81 82 83 85 86 87 90 93 94 95 96 97 100 101 103 104 105 107 108 115 116 117 118 121 122 123 125 126 128 129 131 132 133 134 135 137 138 142 143 150 152 153 156 157 158 160 163 164 165 168 170 173 175 177 180 182 183 190 193 194 196 198 199 200 201 204 205 209 210 r 97 34 # 3824 is_full_range c a 211 1 1 0 2 3 4 5 8 10 11 14 15 17 18 21 23 27 29 31 33 34 36 38 39 40 44 47 48 49 52 56 57 60 66 72 73 75 76 77 78 79 80 81 83 86 90 91 92 93 97 98 99 101 102 104 107 109 110 111 112 113 114 117 118 119 120 121 122 123 124 125 126 127 128 129 130 132 133 134 141 144 146 148 149 151 153 154 156 157 159 161 164 166 167 168 169 171 172 173 175 177 180 181 184 185 187 188 189 190 192 196 201 204 205 208 209 r 170 197 # 3825 is_full_range c a 211 1 1 0 1 3 5 7 8 9 10 11 14 16 18 19 20 21 22 25 27 29 33 34 35 36 38 44 46 49 52 53 54 55 56 57 58 60 62 65 66 67 69 73 74 75 77 79 80 81 82 84 85 87 88 92 93 94 96 97 99 101 103 104 106 107 110 112 113 114 115 120 121 122 123 124 126 131 132 133 135 138 139 145 147 149 150 151 153 154 157 158 160 163 165 166 167 168 170 172 173 174 176 178 180 181 184 185 186 187 188 191 192 193 194 195 198 200 202 203 205 210 r 154 211 # 3826 is_full_range c a 211 1 1 1 2 3 4 6 7 8 11 14 15 16 19 20 22 25 26 29 30 32 35 36 39 40 41 42 46 47 48 50 51 55 59 61 63 65 66 76 79 80 82 84 86 88 90 91 94 95 96 97 100 101 104 105 106 107 120 123 124 126 127 128 129 130 131 132 135 137 139 141 143 145 146 147 150 151 152 154 155 157 160 164 165 168 169 171 172 173 174 175 177 178 179 181 182 184 185 186 190 192 194 195 197 199 200 201 202 204 205 210 r 0 202 # 3827 is_full_range c a 224 0 0 e r 0 224 # 3828 is_full_range c a 224 0 0 e r 120 72 # 3829 is_full_range c a 224 0 0 e r 3 9 # 3830 is_full_range c a 224 0 0 e r 127 224 # 3831 is_full_range c a 224 0 0 e r 0 15 # 3832 is_full_range c a 224 0 0 f r 0 224 # 3833 is_full_range c a 224 0 0 f r 199 59 # 3834 is_full_range c a 224 0 0 f r 76 177 # 3835 is_full_range c a 224 0 0 f r 131 224 # 3836 is_full_range c a 224 0 0 f r 0 28 # 3837 is_full_range c a 224 0 0 0 1 4 5 7 8 11 12 13 14 16 17 19 20 22 27 28 31 33 36 39 40 43 52 55 56 57 58 59 61 62 63 64 65 72 73 74 79 80 81 82 84 87 95 99 100 101 102 103 105 107 109 111 116 117 121 122 124 125 129 130 132 133 136 137 138 143 144 145 147 148 149 151 153 156 157 158 160 161 162 163 164 166 167 169 170 171 174 176 179 180 181 182 184 186 187 189 194 196 197 198 199 200 201 202 206 208 210 211 213 215 216 218 220 221 r 0 224 # 3838 is_full_range c a 224 0 0 2 3 5 6 8 9 10 11 13 15 18 19 20 21 22 23 29 30 31 34 35 37 39 42 43 46 47 55 56 57 58 61 62 63 65 69 71 72 74 76 78 80 82 84 88 90 92 93 97 98 99 102 104 105 106 109 110 114 115 116 117 119 124 131 137 138 140 142 143 144 146 147 151 152 153 154 155 160 161 170 172 173 175 179 180 181 184 187 188 191 193 194 198 199 200 201 202 204 207 209 210 212 214 216 217 219 221 223 r 25 20 # 3839 is_full_range c a 224 0 0 1 2 4 5 7 9 10 12 15 16 17 18 21 23 25 26 27 28 29 31 32 42 44 50 51 52 54 57 61 66 67 68 69 74 75 79 84 86 88 90 93 94 95 98 101 102 103 105 106 107 111 112 113 115 120 121 122 124 128 129 130 132 133 136 137 138 142 143 146 147 149 150 152 153 155 157 160 162 163 165 166 168 169 170 173 175 176 177 178 180 181 182 183 186 187 188 190 191 192 193 196 198 199 201 202 203 206 209 210 213 215 216 218 219 220 221 222 223 r 43 152 # 3840 is_full_range c a 224 0 0 2 4 6 7 12 14 15 16 18 19 21 24 25 26 28 30 31 32 35 36 38 39 40 41 43 46 48 55 60 63 64 68 73 75 76 77 78 79 82 83 84 86 88 91 93 94 98 99 103 104 105 107 108 110 112 113 114 117 118 120 124 125 126 131 132 133 135 137 138 146 150 152 153 154 155 156 158 160 162 163 164 170 171 172 175 176 177 179 185 186 189 196 197 198 200 203 204 205 206 208 213 215 216 218 222 223 r 210 224 # 3841 is_full_range c a 224 0 0 0 1 2 3 4 6 8 10 11 16 17 18 19 21 23 24 25 29 32 35 36 37 38 39 41 43 45 48 51 52 53 54 55 57 58 59 60 63 65 66 68 69 70 72 74 78 81 84 85 88 91 93 94 95 97 104 108 113 114 115 116 117 119 122 123 125 126 127 129 130 131 135 136 137 139 140 141 142 145 148 150 151 152 153 154 158 159 161 162 163 166 168 169 171 172 176 179 180 182 183 187 188 190 193 195 196 197 199 200 202 203 204 206 207 208 211 212 214 216 217 218 219 221 r 0 89 # 3842 is_full_range c a 224 0 1 e r 0 224 # 3843 is_full_range c a 224 0 1 e r 53 34 # 3844 is_full_range c a 224 0 1 e r 101 113 # 3845 is_full_range c a 224 0 1 e r 55 224 # 3846 is_full_range c a 224 0 1 e r 0 159 # 3847 is_full_range c a 224 0 1 f r 0 224 # 3848 is_full_range c a 224 0 1 f r 40 32 # 3849 is_full_range c a 224 0 1 f r 9 88 # 3850 is_full_range c a 224 0 1 f r 30 224 # 3851 is_full_range c a 224 0 1 f r 0 33 # 3852 is_full_range c a 224 0 1 3 4 6 8 9 10 11 12 13 15 16 17 20 21 22 27 28 31 32 33 34 35 38 41 44 47 54 56 61 64 66 67 68 69 72 74 75 76 77 81 83 84 87 91 93 95 96 98 99 102 104 105 106 107 108 110 114 116 118 120 123 124 126 127 128 129 130 131 133 135 138 140 141 143 147 148 156 159 162 163 164 165 166 170 171 174 176 181 182 183 188 189 190 193 196 197 198 199 202 203 204 205 209 210 211 213 214 215 218 221 222 r 0 224 # 3853 is_full_range c a 224 0 1 0 2 7 8 11 13 15 19 22 23 25 27 28 33 34 35 40 41 44 48 49 51 52 53 54 56 57 62 63 65 67 69 72 73 74 75 78 79 80 82 83 85 87 88 89 91 94 95 98 99 104 106 108 109 111 114 116 119 120 121 122 126 127 128 129 130 131 132 135 136 139 144 146 147 154 155 156 157 158 161 165 168 169 173 174 175 176 177 178 182 183 185 186 189 190 191 192 196 197 198 199 200 201 203 204 205 206 207 208 209 211 212 214 216 218 223 r 160 124 # 3854 is_full_range c a 224 0 1 1 2 3 4 5 6 7 8 9 10 11 13 15 16 18 20 21 22 23 27 29 30 32 33 36 43 45 47 54 55 56 58 59 61 63 64 65 67 69 71 75 77 78 82 83 84 85 86 88 89 92 93 95 96 97 98 100 101 105 106 107 108 109 112 113 115 116 119 121 122 124 127 128 129 131 132 134 137 139 140 143 148 149 150 151 153 158 162 164 165 166 167 168 170 171 172 176 177 180 185 187 190 191 192 193 196 199 202 204 209 210 211 215 217 218 221 223 r 77 79 # 3855 is_full_range c a 224 0 1 1 2 3 4 10 11 12 13 14 15 16 22 24 26 29 30 31 34 36 38 46 48 50 52 53 55 56 58 61 62 63 65 66 67 68 69 74 75 76 77 80 81 82 83 84 87 88 90 91 93 94 96 97 99 101 103 105 107 108 109 111 112 117 123 125 127 128 129 130 133 134 135 136 138 139 143 145 147 148 149 152 161 163 164 167 168 170 175 177 178 182 184 185 186 189 191 192 193 195 197 198 201 202 203 204 205 206 208 209 212 214 215 218 219 r 41 224 # 3856 is_full_range c a 224 0 1 0 2 3 9 12 14 16 20 26 27 28 31 32 34 36 37 38 39 40 41 43 49 50 52 54 57 58 62 65 66 68 69 71 72 76 77 78 82 84 85 86 88 89 92 94 97 98 99 101 102 108 112 114 116 117 118 119 122 124 125 126 127 129 130 131 132 133 136 137 139 140 141 143 149 150 151 153 155 156 158 160 161 163 164 166 167 170 174 175 176 178 179 181 182 184 185 187 190 194 196 197 198 199 201 203 204 206 207 209 210 211 212 215 217 219 222 223 r 0 70 # 3857 is_full_range c a 224 1 0 e r 0 224 # 3858 is_full_range c a 224 1 0 e r 138 74 # 3859 is_full_range c a 224 1 0 e r 38 220 # 3860 is_full_range c a 224 1 0 e r 86 224 # 3861 is_full_range c a 224 1 0 e r 0 62 # 3862 is_full_range c a 224 1 0 f r 0 224 # 3863 is_full_range c a 224 1 0 f r 169 97 # 3864 is_full_range c a 224 1 0 f r 7 13 # 3865 is_full_range c a 224 1 0 f r 168 224 # 3866 is_full_range c a 224 1 0 f r 0 202 # 3867 is_full_range c a 224 1 0 3 6 7 12 13 16 19 21 22 26 27 28 29 30 36 37 45 46 52 54 56 57 59 63 64 70 71 72 78 80 82 83 84 85 86 87 90 91 94 96 97 98 104 105 106 107 109 111 114 117 119 120 122 124 126 130 131 132 133 135 136 138 139 142 143 144 145 147 149 150 154 156 157 158 165 166 169 171 172 174 175 176 178 182 183 184 185 187 188 189 191 193 195 196 200 203 204 206 207 208 212 215 217 218 219 220 222 r 0 224 # 3868 is_full_range c a 224 1 0 6 8 11 12 15 16 17 19 20 21 22 24 25 30 31 33 35 40 41 43 45 46 47 50 54 55 57 63 66 67 68 77 79 84 85 87 88 89 93 94 97 99 100 104 105 106 108 110 111 117 120 121 126 127 129 130 136 138 139 141 142 143 144 153 155 159 162 163 168 169 172 173 175 178 180 182 186 187 190 191 192 193 197 198 199 200 201 204 208 210 211 212 216 220 221 222 r 187 123 # 3869 is_full_range c a 224 1 0 0 1 4 5 10 11 12 13 14 16 17 18 19 20 21 24 25 27 29 32 33 34 35 36 40 41 42 44 45 46 48 49 51 52 53 54 55 56 58 64 67 70 73 74 76 77 78 79 80 84 87 88 89 90 91 96 98 100 101 104 106 107 108 110 111 112 115 116 123 124 125 126 127 129 130 132 134 135 136 138 139 140 141 143 144 145 147 149 151 153 159 162 164 165 173 174 178 179 183 184 185 189 191 192 195 196 197 203 206 207 208 209 213 216 217 218 220 221 223 r 59 111 # 3870 is_full_range c a 224 1 0 2 3 7 15 16 18 20 21 27 28 29 30 32 33 40 41 42 45 46 49 50 54 55 56 59 60 63 64 68 69 70 71 72 78 79 80 81 85 89 90 92 95 96 97 99 100 101 102 103 105 107 110 114 115 117 118 120 121 122 123 125 126 127 128 129 130 132 139 140 142 143 144 145 146 147 148 149 152 155 157 158 159 160 161 163 165 167 169 171 174 177 179 181 184 185 188 191 192 193 194 198 199 202 203 204 205 206 211 212 213 215 220 222 223 r 75 224 # 3871 is_full_range c a 224 1 0 0 1 2 3 4 9 11 12 13 16 19 20 26 27 29 32 33 35 39 41 42 46 48 49 54 55 56 57 58 61 62 64 65 66 71 72 73 78 79 84 87 88 89 92 93 94 95 96 97 100 101 103 104 105 107 110 112 114 116 119 125 128 129 130 131 134 139 140 144 146 151 152 154 158 160 161 162 165 166 167 168 169 171 173 175 176 181 187 190 192 193 194 196 197 198 199 200 203 205 206 208 210 213 214 219 r 0 110 # 3872 is_full_range c a 224 1 1 e r 0 224 # 3873 is_full_range c a 224 1 1 e r 80 46 # 3874 is_full_range c a 224 1 1 e r 35 155 # 3875 is_full_range c a 224 1 1 e r 30 224 # 3876 is_full_range c a 224 1 1 e r 0 168 # 3877 is_full_range c a 224 1 1 f r 0 224 # 3878 is_full_range c a 224 1 1 f r 59 53 # 3879 is_full_range c a 224 1 1 f r 70 218 # 3880 is_full_range c a 224 1 1 f r 55 224 # 3881 is_full_range c a 224 1 1 f r 0 10 # 3882 is_full_range c a 224 1 1 0 1 2 9 10 14 16 18 19 21 22 23 25 27 29 30 33 35 37 40 42 44 45 46 51 54 55 57 59 60 62 64 69 70 72 73 74 75 76 80 81 82 85 86 88 92 94 95 96 97 98 100 101 102 103 108 109 111 115 119 120 124 130 131 132 134 136 138 139 140 142 144 147 150 152 154 155 156 157 159 161 162 165 166 168 171 172 176 177 184 186 187 190 193 194 195 200 201 203 205 207 208 209 211 213 216 218 221 222 223 r 0 224 # 3883 is_full_range c a 224 1 1 3 4 5 7 9 10 11 12 13 14 15 16 17 18 19 20 21 23 26 27 28 29 33 36 37 40 41 42 43 44 45 46 47 48 50 53 55 60 61 62 64 67 69 70 72 73 75 76 77 82 83 86 90 94 96 98 99 100 101 103 104 107 109 111 114 117 118 119 120 121 127 130 136 137 140 143 144 148 151 153 156 157 162 163 164 168 170 171 172 173 174 175 178 180 183 184 187 189 196 198 199 200 203 206 207 209 210 212 215 216 217 218 219 220 r 190 104 # 3884 is_full_range c a 224 1 1 1 6 7 11 12 13 14 15 16 17 20 21 22 23 24 25 28 32 34 36 39 40 41 42 43 45 46 49 50 52 53 54 55 61 62 65 66 67 70 71 73 74 75 76 81 84 88 89 90 92 93 94 95 97 98 99 101 102 104 107 108 110 114 116 119 122 124 125 131 133 138 140 141 142 145 146 151 156 158 160 163 167 168 171 175 179 182 183 184 185 187 192 195 196 198 199 200 201 202 203 206 208 209 213 216 217 218 222 223 r 72 91 # 3885 is_full_range c a 224 1 1 0 1 3 4 6 7 9 11 13 14 15 18 20 21 23 26 27 29 30 36 37 38 39 40 42 45 49 50 52 54 55 56 57 58 60 61 62 65 68 71 72 75 77 79 80 82 84 85 88 90 91 94 95 100 103 104 105 106 107 108 110 112 113 114 116 118 119 120 121 127 128 129 131 133 134 135 136 138 140 141 142 145 146 149 150 152 154 155 156 158 159 161 162 164 165 170 171 173 175 176 178 181 182 185 189 191 192 195 197 205 210 211 213 215 216 221 222 r 91 224 # 3886 is_full_range c a 224 1 1 3 5 7 9 10 12 14 16 17 19 23 25 28 29 31 32 33 34 36 40 42 43 45 48 49 52 53 54 58 60 63 69 70 72 73 76 77 78 79 82 84 85 86 89 90 92 93 97 99 104 105 106 107 109 111 118 119 122 127 128 129 133 134 137 138 139 140 142 144 148 152 157 158 160 162 165 167 168 170 171 172 173 175 177 180 181 183 184 185 186 188 189 190 191 193 195 196 197 199 202 204 208 209 211 213 214 216 217 218 219 220 221 222 r 0 90 # 3887 is_full_range c a 247 0 0 e r 0 247 # 3888 is_full_range c a 247 0 0 e r 185 98 # 3889 is_full_range c a 247 0 0 e r 24 98 # 3890 is_full_range c a 247 0 0 e r 87 247 # 3891 is_full_range c a 247 0 0 e r 0 62 # 3892 is_full_range c a 247 0 0 f r 0 247 # 3893 is_full_range c a 247 0 0 f r 117 20 # 3894 is_full_range c a 247 0 0 f r 11 76 # 3895 is_full_range c a 247 0 0 f r 200 247 # 3896 is_full_range c a 247 0 0 f r 0 107 # 3897 is_full_range c a 247 0 0 0 1 6 8 11 17 19 20 22 25 26 29 30 32 33 34 37 38 42 43 44 49 50 51 53 55 56 60 61 63 64 66 68 69 72 74 75 76 78 80 81 84 86 88 90 91 101 102 105 106 108 109 110 111 112 113 115 121 122 123 126 127 128 133 135 136 139 142 145 147 150 151 153 155 160 161 162 164 168 169 173 174 176 177 182 183 186 187 188 191 192 193 195 197 199 200 205 206 208 209 210 213 225 227 228 230 231 232 233 234 236 237 238 239 240 241 243 245 r 0 247 # 3898 is_full_range c a 247 0 0 0 2 3 4 8 9 12 13 16 24 26 27 28 29 32 35 37 38 40 42 45 46 50 52 54 55 56 58 62 66 67 69 71 73 75 76 80 82 83 84 87 88 95 96 98 99 102 103 106 108 111 112 114 115 116 118 119 121 122 123 126 127 128 129 130 133 138 140 143 146 149 150 151 152 153 154 155 157 158 160 161 162 164 166 168 170 171 172 174 176 177 180 187 196 198 199 200 201 202 205 206 208 211 212 213 216 217 221 223 225 231 235 238 242 r 189 114 # 3899 is_full_range c a 247 0 0 0 4 5 6 7 9 14 16 18 19 21 23 24 25 31 32 35 38 39 45 46 49 51 52 53 54 55 58 59 60 62 63 64 66 69 70 71 72 78 79 80 81 82 83 84 85 88 90 91 92 93 96 98 100 101 103 104 108 110 111 113 115 117 124 125 126 127 128 131 133 134 139 140 142 143 146 147 151 154 157 161 164 166 167 168 170 172 173 175 176 178 180 181 182 185 186 187 188 190 191 195 198 201 202 204 207 208 209 210 212 213 214 216 219 220 222 223 226 227 229 231 232 233 235 239 246 r 1 13 # 3900 is_full_range c a 247 0 0 4 6 9 10 13 16 20 22 24 26 30 31 36 38 42 46 48 50 52 53 54 55 58 59 60 61 65 66 68 70 72 73 74 80 82 84 88 90 91 94 95 97 107 108 109 110 113 114 122 123 124 125 128 129 131 132 133 137 138 139 140 141 143 144 147 148 149 154 159 161 162 164 168 171 173 174 177 179 180 183 184 187 188 189 190 191 192 193 195 197 198 202 203 204 205 206 208 212 216 217 225 226 227 229 230 231 233 236 240 241 242 246 r 225 247 # 3901 is_full_range c a 247 0 0 3 4 5 6 8 9 12 14 19 20 21 23 24 27 28 30 32 34 35 37 40 43 44 47 48 49 50 51 52 54 56 57 59 63 64 66 69 70 76 79 82 83 84 87 89 90 91 93 94 98 101 102 103 104 105 107 111 112 114 116 121 122 123 124 125 130 131 132 134 135 137 138 139 142 146 148 149 151 152 154 155 157 161 165 167 168 169 170 173 174 175 178 179 182 184 185 188 189 190 191 192 193 196 199 203 204 208 212 214 215 216 219 220 221 222 223 224 225 226 227 230 231 234 236 238 240 241 242 243 246 r 0 191 # 3902 is_full_range c a 247 0 1 e r 0 247 # 3903 is_full_range c a 247 0 1 e r 150 92 # 3904 is_full_range c a 247 0 1 e r 42 84 # 3905 is_full_range c a 247 0 1 e r 122 247 # 3906 is_full_range c a 247 0 1 e r 0 198 # 3907 is_full_range c a 247 0 1 f r 0 247 # 3908 is_full_range c a 247 0 1 f r 57 20 # 3909 is_full_range c a 247 0 1 f r 149 242 # 3910 is_full_range c a 247 0 1 f r 56 247 # 3911 is_full_range c a 247 0 1 f r 0 1 # 3912 is_full_range c a 247 0 1 0 1 5 6 10 11 14 15 16 18 19 21 24 25 30 33 35 36 40 41 45 46 49 51 52 53 55 56 57 61 63 64 65 66 67 71 75 79 82 86 87 91 93 94 96 97 99 102 104 111 112 114 116 117 126 127 129 130 131 133 138 139 140 143 144 147 151 152 153 157 159 160 162 165 166 169 173 177 179 181 184 185 188 189 191 192 198 199 201 203 204 205 207 209 210 211 212 214 215 216 219 221 224 225 228 230 234 235 236 238 240 241 243 244 r 0 247 # 3913 is_full_range c a 247 0 1 0 1 2 3 4 9 10 11 12 13 14 17 20 25 26 28 29 30 31 32 34 35 36 37 38 40 41 43 44 45 47 48 51 52 58 63 64 66 67 69 73 76 79 80 82 83 84 90 91 92 94 95 96 98 99 103 104 106 107 108 111 112 114 115 119 120 122 124 128 129 133 134 137 138 143 144 146 148 149 153 154 155 161 162 164 165 166 167 168 169 171 174 175 176 177 180 182 183 185 186 187 194 196 197 199 202 203 204 205 206 207 209 215 218 220 222 224 225 227 228 229 234 236 237 238 240 242 245 r 178 145 # 3914 is_full_range c a 247 0 1 2 3 8 10 12 14 15 17 18 19 20 22 25 26 32 35 36 37 40 42 43 45 46 47 48 49 50 51 54 57 58 59 63 64 66 70 73 74 75 76 77 78 83 84 88 89 95 96 103 106 109 110 111 113 117 118 120 121 123 125 126 128 130 132 136 138 139 142 146 147 148 150 151 154 155 157 162 166 168 171 172 173 180 182 184 185 187 189 191 192 193 194 197 198 199 201 202 204 206 208 209 214 215 217 218 219 220 223 229 232 234 235 236 239 241 243 245 246 r 110 177 # 3915 is_full_range c a 247 0 1 0 2 3 4 8 9 11 13 14 15 16 17 18 20 22 23 24 26 27 30 31 32 34 36 38 39 40 46 47 48 49 51 53 54 55 57 58 59 62 63 64 65 67 68 70 71 75 78 80 81 84 88 89 93 96 97 99 100 102 105 107 109 112 113 115 117 120 121 124 125 126 133 134 135 136 138 145 147 148 149 150 154 158 159 160 161 164 167 171 172 173 174 176 178 180 181 182 185 186 187 191 193 196 200 201 206 209 210 212 213 214 217 218 219 222 223 225 229 230 233 234 235 239 241 243 244 r 105 247 # 3916 is_full_range c a 247 0 1 0 2 4 5 6 7 8 12 13 16 20 21 22 23 24 26 30 33 34 37 40 43 45 49 50 51 52 53 54 56 57 58 61 62 63 65 66 67 72 73 76 77 78 79 80 82 83 85 88 90 92 93 94 97 99 101 103 105 108 109 111 114 115 117 118 121 126 127 130 131 132 134 137 138 140 141 150 152 154 156 160 162 163 164 165 168 169 170 171 172 176 178 179 180 183 184 188 189 190 193 198 201 202 206 207 208 210 212 215 216 221 222 224 226 228 234 236 240 242 243 244 246 r 0 46 # 3917 is_full_range c a 247 1 0 e r 0 247 # 3918 is_full_range c a 247 1 0 e r 246 0 # 3919 is_full_range c a 247 1 0 e r 49 237 # 3920 is_full_range c a 247 1 0 e r 211 247 # 3921 is_full_range c a 247 1 0 e r 0 63 # 3922 is_full_range c a 247 1 0 f r 0 247 # 3923 is_full_range c a 247 1 0 f r 121 95 # 3924 is_full_range c a 247 1 0 f r 9 19 # 3925 is_full_range c a 247 1 0 f r 52 247 # 3926 is_full_range c a 247 1 0 f r 0 149 # 3927 is_full_range c a 247 1 0 0 3 4 7 8 9 11 14 24 25 28 31 32 33 34 35 39 41 42 43 44 48 50 52 53 54 55 56 58 59 66 67 70 71 76 77 78 79 86 88 89 90 95 96 98 100 102 104 107 110 112 114 116 117 119 120 122 124 127 128 129 130 131 133 137 139 140 143 144 145 146 147 148 150 152 153 154 155 157 158 160 161 164 166 170 172 174 175 177 178 179 181 187 190 192 194 195 196 197 198 199 201 211 212 213 217 220 222 223 226 229 232 234 235 236 237 239 241 242 244 245 246 r 0 247 # 3928 is_full_range c a 247 1 0 1 2 3 4 7 8 9 11 15 16 17 19 24 27 30 31 32 33 35 36 37 39 40 41 42 45 46 48 52 53 54 55 57 58 59 65 66 68 70 71 73 75 76 78 80 82 83 84 90 91 92 94 95 97 103 104 105 106 107 108 109 111 112 113 115 117 119 122 123 124 125 126 128 130 136 137 139 140 142 143 146 147 149 150 153 155 160 161 165 166 168 169 173 175 177 178 180 181 182 184 188 191 193 194 195 196 197 198 200 202 210 213 215 217 221 223 224 228 230 231 232 233 234 235 242 243 246 r 154 34 # 3929 is_full_range c a 247 1 0 0 3 4 5 7 9 10 11 12 13 14 15 16 17 19 21 23 27 28 30 31 32 33 34 36 47 48 50 54 55 56 59 62 66 68 70 71 72 75 78 80 81 82 85 86 88 90 92 93 94 95 99 100 101 102 107 108 111 113 114 115 116 117 119 124 125 134 135 140 141 142 144 145 148 152 154 155 157 158 159 163 165 166 167 171 172 175 180 182 183 184 191 192 193 194 196 197 199 200 202 203 204 206 207 208 209 211 213 217 218 219 222 225 227 228 229 230 231 233 234 235 238 239 242 243 r 107 108 # 3930 is_full_range c a 247 1 0 1 2 3 4 5 7 16 22 23 25 26 29 30 31 34 38 39 43 44 45 46 47 51 52 58 59 62 63 64 65 66 68 69 73 78 79 80 83 85 86 87 89 91 96 98 99 103 104 105 108 111 113 115 116 118 122 126 128 132 133 135 136 137 139 140 145 147 151 155 156 157 159 161 164 165 166 167 172 173 174 175 176 178 180 189 190 191 192 195 196 201 202 204 205 207 213 215 217 219 222 225 226 230 231 233 234 236 241 242 243 244 246 r 104 247 # 3931 is_full_range c a 247 1 0 0 2 6 7 9 11 15 20 21 22 24 25 28 31 35 36 38 40 42 44 46 48 50 51 52 53 54 55 56 59 61 62 63 64 66 67 69 70 73 74 77 78 80 81 83 84 86 87 89 91 92 94 95 97 99 100 106 107 108 109 111 112 113 114 115 116 117 118 120 127 129 130 134 135 136 137 138 139 140 142 143 144 145 146 147 149 152 153 154 157 159 160 163 164 166 167 172 175 176 178 182 186 187 190 192 195 196 197 201 202 206 208 209 210 211 212 216 217 218 221 222 223 224 225 226 227 228 230 233 234 236 237 238 239 242 244 245 246 r 0 12 # 3932 is_full_range c a 247 1 1 e r 0 247 # 3933 is_full_range c a 247 1 1 e r 32 18 # 3934 is_full_range c a 247 1 1 e r 94 183 # 3935 is_full_range c a 247 1 1 e r 20 247 # 3936 is_full_range c a 247 1 1 e r 0 183 # 3937 is_full_range c a 247 1 1 f r 0 247 # 3938 is_full_range c a 247 1 1 f r 81 17 # 3939 is_full_range c a 247 1 1 f r 21 137 # 3940 is_full_range c a 247 1 1 f r 169 247 # 3941 is_full_range c a 247 1 1 f r 0 25 # 3942 is_full_range c a 247 1 1 2 4 6 7 9 10 11 17 20 21 22 24 25 26 28 29 34 36 37 39 41 42 43 45 46 47 48 51 52 54 55 57 60 61 63 64 67 68 70 75 78 84 87 88 89 91 93 94 96 97 99 101 103 105 106 107 108 109 113 114 116 119 122 123 131 133 134 135 137 138 140 142 145 146 149 151 153 155 157 158 159 162 163 164 165 166 168 169 170 171 173 176 178 181 183 184 185 191 192 195 200 205 206 210 213 216 217 218 222 223 224 226 228 229 230 231 234 237 238 239 243 r 0 247 # 3943 is_full_range c a 247 1 1 5 8 9 12 17 19 22 23 28 29 31 32 33 37 38 40 43 45 47 49 50 51 52 53 54 56 57 58 59 60 62 63 64 70 74 75 76 78 80 81 83 84 85 87 88 91 97 98 99 100 101 102 104 105 107 113 116 117 118 119 120 124 125 126 128 129 130 131 132 133 135 136 137 138 143 144 145 146 147 149 153 154 156 157 159 160 163 165 170 171 176 181 182 183 184 185 187 188 189 191 193 194 195 196 201 202 203 208 209 210 213 216 217 218 219 222 223 228 229 232 235 236 237 239 241 243 244 245 r 237 198 # 3944 is_full_range c a 247 1 1 3 4 5 12 14 16 17 22 24 25 26 27 30 32 33 35 36 40 42 43 44 45 47 48 49 51 60 62 68 70 71 72 74 75 78 79 81 82 83 89 90 92 93 94 97 99 102 104 107 108 110 111 113 114 117 118 119 120 121 122 123 124 125 126 128 132 133 134 143 145 147 148 151 159 160 161 163 164 165 169 171 173 175 176 177 179 180 181 185 187 189 190 192 193 196 198 202 204 207 209 212 213 216 217 218 220 221 222 223 224 227 228 229 230 231 233 237 238 239 242 r 44 237 # 3945 is_full_range c a 247 1 1 1 4 6 9 10 12 13 14 15 17 20 21 22 24 25 26 30 31 36 38 40 41 42 43 44 49 52 54 55 57 59 62 63 64 65 70 72 74 75 76 78 82 83 84 85 86 87 88 89 90 95 97 99 102 104 105 106 107 109 111 114 121 122 123 126 127 130 133 134 136 137 138 140 142 145 147 149 150 151 152 153 156 161 162 163 164 170 171 173 175 177 178 179 181 185 189 190 191 192 194 196 197 198 201 203 206 207 210 211 214 215 221 223 225 228 230 233 234 235 237 238 239 244 r 104 247 # 3946 is_full_range c a 247 1 1 0 5 7 8 9 11 14 17 19 20 21 23 25 29 33 34 35 37 38 40 42 43 45 47 48 49 51 52 53 54 56 60 61 62 65 66 67 68 69 72 77 80 81 82 84 85 86 87 88 91 92 96 99 100 101 103 104 105 108 109 114 117 118 120 123 128 129 131 132 134 135 138 139 140 144 146 149 152 153 157 158 159 160 162 164 167 168 170 171 172 175 176 177 178 180 183 185 194 196 197 203 204 206 207 209 210 214 218 219 222 223 224 225 228 230 231 232 234 236 237 243 244 r 0 80 # 3947 is_full_range c a 0 0 0 e r 0 0 # 3948 clear_range c a 0 0 0 e r 0 0 # 3949 clear_range c a 0 0 0 e r 0 0 # 3950 clear_range c a 0 0 0 e r 0 0 # 3951 clear_range c a 0 0 0 e r 0 0 # 3952 clear_range c a 0 0 0 e r 0 0 # 3953 clear_range c a 0 0 0 e r 0 0 # 3954 clear_range c a 0 0 0 e r 0 0 # 3955 clear_range c a 0 0 0 e r 0 0 # 3956 clear_range c a 0 0 0 e r 0 0 # 3957 clear_range c a 0 0 0 r 0 0 # 3958 clear_range c a 0 0 0 r 0 0 # 3959 clear_range c a 0 0 0 r 0 0 # 3960 clear_range c a 0 0 0 r 0 0 # 3961 clear_range c a 0 0 0 r 0 0 # 3962 clear_range c a 0 0 1 e r 0 0 # 3963 clear_range c a 0 0 1 e r 0 0 # 3964 clear_range c a 0 0 1 e r 0 0 # 3965 clear_range c a 0 0 1 e r 0 0 # 3966 clear_range c a 0 0 1 e r 0 0 # 3967 clear_range c a 0 0 1 e r 0 0 # 3968 clear_range c a 0 0 1 e r 0 0 # 3969 clear_range c a 0 0 1 e r 0 0 # 3970 clear_range c a 0 0 1 e r 0 0 # 3971 clear_range c a 0 0 1 e r 0 0 # 3972 clear_range c a 0 0 1 r 0 0 # 3973 clear_range c a 0 0 1 r 0 0 # 3974 clear_range c a 0 0 1 r 0 0 # 3975 clear_range c a 0 0 1 r 0 0 # 3976 clear_range c a 0 0 1 r 0 0 # 3977 clear_range c a 0 1 0 e r 0 0 # 3978 clear_range c a 0 1 0 e r 0 0 # 3979 clear_range c a 0 1 0 e r 0 0 # 3980 clear_range c a 0 1 0 e r 0 0 # 3981 clear_range c a 0 1 0 e r 0 0 # 3982 clear_range c a 0 1 0 e r 0 0 # 3983 clear_range c a 0 1 0 e r 0 0 # 3984 clear_range c a 0 1 0 e r 0 0 # 3985 clear_range c a 0 1 0 e r 0 0 # 3986 clear_range c a 0 1 0 e r 0 0 # 3987 clear_range c a 0 1 0 r 0 0 # 3988 clear_range c a 0 1 0 r 0 0 # 3989 clear_range c a 0 1 0 r 0 0 # 3990 clear_range c a 0 1 0 r 0 0 # 3991 clear_range c a 0 1 0 r 0 0 # 3992 clear_range c a 0 1 1 e r 0 0 # 3993 clear_range c a 0 1 1 e r 0 0 # 3994 clear_range c a 0 1 1 e r 0 0 # 3995 clear_range c a 0 1 1 e r 0 0 # 3996 clear_range c a 0 1 1 e r 0 0 # 3997 clear_range c a 0 1 1 e r 0 0 # 3998 clear_range c a 0 1 1 e r 0 0 # 3999 clear_range c a 0 1 1 e r 0 0 # 4000 clear_range c a 0 1 1 e r 0 0 # 4001 clear_range c a 0 1 1 e r 0 0 # 4002 clear_range c a 0 1 1 r 0 0 # 4003 clear_range c a 0 1 1 r 0 0 # 4004 clear_range c a 0 1 1 r 0 0 # 4005 clear_range c a 0 1 1 r 0 0 # 4006 clear_range c a 0 1 1 r 0 0 # 4007 clear_range c a 1 0 0 e r 0 1 # 4008 clear_range c a 1 0 0 e r 0 0 # 4009 clear_range c a 1 0 0 e r 0 1 # 4010 clear_range c a 1 0 0 e r 0 1 # 4011 clear_range c a 1 0 0 e r 0 0 # 4012 clear_range c a 1 0 0 f r 0 1 # 4013 clear_range c a 1 0 0 f r 0 0 # 4014 clear_range c a 1 0 0 f r 0 0 # 4015 clear_range c a 1 0 0 f r 0 1 # 4016 clear_range c a 1 0 0 f r 0 1 # 4017 clear_range c a 1 0 0 0 r 0 1 # 4018 clear_range c a 1 0 0 0 r 0 0 # 4019 clear_range c a 1 0 0 0 r 0 1 # 4020 clear_range c a 1 0 0 r 0 1 # 4021 clear_range c a 1 0 0 0 r 0 0 # 4022 clear_range c a 1 0 1 e r 0 1 # 4023 clear_range c a 1 0 1 e r 1 0 # 4024 clear_range c a 1 0 1 e r 0 1 # 4025 clear_range c a 1 0 1 e r 0 1 # 4026 clear_range c a 1 0 1 e r 0 1 # 4027 clear_range c a 1 0 1 f r 0 1 # 4028 clear_range c a 1 0 1 f r 0 0 # 4029 clear_range c a 1 0 1 f r 0 0 # 4030 clear_range c a 1 0 1 f r 0 1 # 4031 clear_range c a 1 0 1 f r 0 0 # 4032 clear_range c a 1 0 1 r 0 1 # 4033 clear_range c a 1 0 1 r 0 0 # 4034 clear_range c a 1 0 1 r 0 0 # 4035 clear_range c a 1 0 1 0 r 0 1 # 4036 clear_range c a 1 0 1 r 0 0 # 4037 clear_range c a 1 1 0 e r 0 1 # 4038 clear_range c a 1 1 0 e r 0 0 # 4039 clear_range c a 1 1 0 e r 0 1 # 4040 clear_range c a 1 1 0 e r 0 1 # 4041 clear_range c a 1 1 0 e r 0 0 # 4042 clear_range c a 1 1 0 f r 0 1 # 4043 clear_range c a 1 1 0 f r 1 0 # 4044 clear_range c a 1 1 0 f r 0 1 # 4045 clear_range c a 1 1 0 f r 0 1 # 4046 clear_range c a 1 1 0 f r 0 0 # 4047 clear_range c a 1 1 0 0 r 0 1 # 4048 clear_range c a 1 1 0 r 0 0 # 4049 clear_range c a 1 1 0 r 0 1 # 4050 clear_range c a 1 1 0 r 0 1 # 4051 clear_range c a 1 1 0 r 0 0 # 4052 clear_range c a 1 1 1 e r 0 1 # 4053 clear_range c a 1 1 1 e r 0 0 # 4054 clear_range c a 1 1 1 e r 0 0 # 4055 clear_range c a 1 1 1 e r 0 1 # 4056 clear_range c a 1 1 1 e r 0 0 # 4057 clear_range c a 1 1 1 f r 0 1 # 4058 clear_range c a 1 1 1 f r 0 0 # 4059 clear_range c a 1 1 1 f r 0 1 # 4060 clear_range c a 1 1 1 f r 0 1 # 4061 clear_range c a 1 1 1 f r 0 0 # 4062 clear_range c a 1 1 1 r 0 1 # 4063 clear_range c a 1 1 1 0 r 0 0 # 4064 clear_range c a 1 1 1 0 r 0 0 # 4065 clear_range c a 1 1 1 0 r 0 1 # 4066 clear_range c a 1 1 1 0 r 0 0 # 4067 clear_range c a 31 0 0 e r 0 31 # 4068 clear_range c a 31 0 0 e r 5 1 # 4069 clear_range c a 31 0 0 e r 0 28 # 4070 clear_range c a 31 0 0 e r 18 31 # 4071 clear_range c a 31 0 0 e r 0 5 # 4072 clear_range c a 31 0 0 f r 0 31 # 4073 clear_range c a 31 0 0 f r 19 3 # 4074 clear_range c a 31 0 0 f r 19 31 # 4075 clear_range c a 31 0 0 f r 23 31 # 4076 clear_range c a 31 0 0 f r 0 3 # 4077 clear_range c a 31 0 0 0 4 6 8 9 11 12 14 15 17 19 20 22 24 25 26 28 30 r 0 31 # 4078 clear_range c a 31 0 0 0 1 2 3 6 7 9 11 13 14 17 18 20 22 25 28 29 r 28 21 # 4079 clear_range c a 31 0 0 1 2 3 4 5 6 9 10 12 14 15 16 21 24 25 27 29 r 5 17 # 4080 clear_range c a 31 0 0 5 6 8 13 18 20 21 23 25 29 30 r 4 31 # 4081 clear_range c a 31 0 0 0 2 8 9 10 11 12 13 21 24 25 26 27 29 r 0 7 # 4082 clear_range c a 31 0 1 e r 0 31 # 4083 clear_range c a 31 0 1 e r 29 8 # 4084 clear_range c a 31 0 1 e r 22 28 # 4085 clear_range c a 31 0 1 e r 13 31 # 4086 clear_range c a 31 0 1 e r 0 17 # 4087 clear_range c a 31 0 1 f r 0 31 # 4088 clear_range c a 31 0 1 f r 19 0 # 4089 clear_range c a 31 0 1 f r 10 14 # 4090 clear_range c a 31 0 1 f r 26 31 # 4091 clear_range c a 31 0 1 f r 0 26 # 4092 clear_range c a 31 0 1 0 1 2 6 10 11 13 14 15 19 20 21 25 26 28 30 r 0 31 # 4093 clear_range c a 31 0 1 0 2 4 8 9 11 12 13 14 15 18 20 21 22 29 r 6 1 # 4094 clear_range c a 31 0 1 3 6 8 11 13 16 19 21 23 25 26 29 30 r 7 12 # 4095 clear_range c a 31 0 1 1 2 3 5 7 13 15 21 22 24 27 r 5 31 # 4096 clear_range c a 31 0 1 0 1 4 5 8 9 13 15 16 17 18 20 21 22 23 24 26 29 30 r 0 31 # 4097 clear_range c a 31 1 0 e r 0 31 # 4098 clear_range c a 31 1 0 e r 4 0 # 4099 clear_range c a 31 1 0 e r 0 26 # 4100 clear_range c a 31 1 0 e r 17 31 # 4101 clear_range c a 31 1 0 e r 0 27 # 4102 clear_range c a 31 1 0 f r 0 31 # 4103 clear_range c a 31 1 0 f r 21 15 # 4104 clear_range c a 31 1 0 f r 0 3 # 4105 clear_range c a 31 1 0 f r 21 31 # 4106 clear_range c a 31 1 0 f r 0 26 # 4107 clear_range c a 31 1 0 1 6 9 10 12 13 16 18 19 21 22 23 25 26 27 28 29 r 0 31 # 4108 clear_range c a 31 1 0 1 2 3 6 8 11 15 16 17 18 19 20 21 23 26 29 30 r 1 0 # 4109 clear_range c a 31 1 0 0 2 4 6 8 9 10 11 13 14 16 17 19 23 24 25 26 27 r 16 27 # 4110 clear_range c a 31 1 0 0 2 6 9 10 12 15 18 19 20 21 22 24 26 28 30 r 13 31 # 4111 clear_range c a 31 1 0 0 1 2 4 5 6 8 9 11 12 13 14 16 17 19 21 30 r 0 5 # 4112 clear_range c a 31 1 1 e r 0 31 # 4113 clear_range c a 31 1 1 e r 25 16 # 4114 clear_range c a 31 1 1 e r 19 29 # 4115 clear_range c a 31 1 1 e r 21 31 # 4116 clear_range c a 31 1 1 e r 0 13 # 4117 clear_range c a 31 1 1 f r 0 31 # 4118 clear_range c a 31 1 1 f r 23 16 # 4119 clear_range c a 31 1 1 f r 0 2 # 4120 clear_range c a 31 1 1 f r 15 31 # 4121 clear_range c a 31 1 1 f r 0 14 # 4122 clear_range c a 31 1 1 0 1 3 5 7 8 9 12 13 18 22 r 0 31 # 4123 clear_range c a 31 1 1 0 2 3 4 5 7 9 10 11 12 13 16 17 23 24 28 29 30 r 16 0 # 4124 clear_range c a 31 1 1 0 2 3 4 7 9 10 15 17 19 20 21 22 27 29 30 r 2 3 # 4125 clear_range c a 31 1 1 0 5 6 8 9 10 11 13 15 16 18 19 23 24 27 29 r 5 31 # 4126 clear_range c a 31 1 1 3 5 8 9 12 13 15 18 19 20 21 22 r 0 27 # 4127 clear_range c a 32 0 0 e r 0 32 # 4128 clear_range c a 32 0 0 e r 22 6 # 4129 clear_range c a 32 0 0 e r 13 24 # 4130 clear_range c a 32 0 0 e r 12 32 # 4131 clear_range c a 32 0 0 e r 0 25 # 4132 clear_range c a 32 0 0 f r 0 32 # 4133 clear_range c a 32 0 0 f r 2 0 # 4134 clear_range c a 32 0 0 f r 1 7 # 4135 clear_range c a 32 0 0 f r 22 32 # 4136 clear_range c a 32 0 0 f r 0 24 # 4137 clear_range c a 32 0 0 0 2 3 5 6 8 10 11 12 13 15 17 20 21 22 25 27 28 30 r 0 32 # 4138 clear_range c a 32 0 0 1 3 4 8 9 12 13 16 17 18 19 20 21 23 24 26 28 29 30 r 17 1 # 4139 clear_range c a 32 0 0 2 4 8 12 15 18 21 22 23 25 26 28 30 r 3 5 # 4140 clear_range c a 32 0 0 0 1 2 5 6 7 9 11 12 13 15 21 22 24 25 26 27 29 31 r 8 32 # 4141 clear_range c a 32 0 0 4 6 7 8 9 12 14 16 17 18 20 23 24 27 31 r 0 2 # 4142 clear_range c a 32 0 1 e r 0 32 # 4143 clear_range c a 32 0 1 e r 31 23 # 4144 clear_range c a 32 0 1 e r 0 2 # 4145 clear_range c a 32 0 1 e r 24 32 # 4146 clear_range c a 32 0 1 e r 0 20 # 4147 clear_range c a 32 0 1 f r 0 32 # 4148 clear_range c a 32 0 1 f r 3 1 # 4149 clear_range c a 32 0 1 f r 23 32 # 4150 clear_range c a 32 0 1 f r 23 32 # 4151 clear_range c a 32 0 1 f r 0 0 # 4152 clear_range c a 32 0 1 0 1 2 3 4 6 8 9 11 13 18 23 24 25 29 r 0 32 # 4153 clear_range c a 32 0 1 0 3 13 14 15 16 17 25 26 27 28 30 31 r 3 1 # 4154 clear_range c a 32 0 1 0 1 3 5 9 12 17 18 19 20 23 24 26 27 28 31 r 0 2 # 4155 clear_range c a 32 0 1 0 1 5 8 10 14 16 17 20 22 23 25 27 29 r 15 32 # 4156 clear_range c a 32 0 1 0 2 3 4 6 7 8 9 12 13 15 17 18 19 24 25 26 29 30 r 0 8 # 4157 clear_range c a 32 1 0 e r 0 32 # 4158 clear_range c a 32 1 0 e r 8 3 # 4159 clear_range c a 32 1 0 e r 12 15 # 4160 clear_range c a 32 1 0 e r 26 32 # 4161 clear_range c a 32 1 0 e r 0 7 # 4162 clear_range c a 32 1 0 f r 0 32 # 4163 clear_range c a 32 1 0 f r 21 13 # 4164 clear_range c a 32 1 0 f r 8 19 # 4165 clear_range c a 32 1 0 f r 24 32 # 4166 clear_range c a 32 1 0 f r 0 16 # 4167 clear_range c a 32 1 0 1 2 4 6 8 9 10 11 12 15 17 20 23 24 26 29 30 31 r 0 32 # 4168 clear_range c a 32 1 0 0 1 3 5 6 7 8 9 10 11 13 15 16 17 19 22 23 24 25 28 31 r 24 5 # 4169 clear_range c a 32 1 0 9 11 12 13 16 17 18 20 24 25 26 27 28 29 r 0 2 # 4170 clear_range c a 32 1 0 0 1 5 11 14 16 18 19 20 22 25 27 28 29 30 31 r 0 32 # 4171 clear_range c a 32 1 0 1 5 6 9 10 15 16 18 22 23 24 25 26 27 28 29 30 r 0 2 # 4172 clear_range c a 32 1 1 e r 0 32 # 4173 clear_range c a 32 1 1 e r 18 12 # 4174 clear_range c a 32 1 1 e r 0 4 # 4175 clear_range c a 32 1 1 e r 25 32 # 4176 clear_range c a 32 1 1 e r 0 17 # 4177 clear_range c a 32 1 1 f r 0 32 # 4178 clear_range c a 32 1 1 f r 12 3 # 4179 clear_range c a 32 1 1 f r 3 6 # 4180 clear_range c a 32 1 1 f r 0 32 # 4181 clear_range c a 32 1 1 f r 0 14 # 4182 clear_range c a 32 1 1 0 1 2 3 7 15 16 17 18 19 21 22 23 25 27 29 31 r 0 32 # 4183 clear_range c a 32 1 1 0 2 6 7 10 11 12 14 15 16 18 25 28 29 r 22 1 # 4184 clear_range c a 32 1 1 0 2 3 8 9 11 12 16 18 20 24 25 26 29 30 r 12 13 # 4185 clear_range c a 32 1 1 0 1 2 4 5 9 10 11 13 18 19 22 24 29 30 r 30 32 # 4186 clear_range c a 32 1 1 0 1 2 4 6 7 9 12 13 14 16 18 22 24 26 27 r 0 9 # 4187 clear_range c a 33 0 0 e r 0 33 # 4188 clear_range c a 33 0 0 e r 3 1 # 4189 clear_range c a 33 0 0 e r 2 11 # 4190 clear_range c a 33 0 0 e r 32 33 # 4191 clear_range c a 33 0 0 e r 0 3 # 4192 clear_range c a 33 0 0 f r 0 33 # 4193 clear_range c a 33 0 0 f r 28 3 # 4194 clear_range c a 33 0 0 f r 16 30 # 4195 clear_range c a 33 0 0 f r 9 33 # 4196 clear_range c a 33 0 0 f r 0 8 # 4197 clear_range c a 33 0 0 0 1 5 7 8 9 12 14 16 17 18 19 20 21 26 27 30 31 r 0 33 # 4198 clear_range c a 33 0 0 2 3 4 6 7 8 9 10 12 14 15 16 17 19 21 23 24 26 28 29 30 r 11 1 # 4199 clear_range c a 33 0 0 0 1 2 3 4 5 8 9 12 14 15 16 17 18 20 28 29 30 31 32 r 15 22 # 4200 clear_range c a 33 0 0 0 1 2 3 5 7 10 13 15 16 20 21 22 26 29 30 31 r 10 33 # 4201 clear_range c a 33 0 0 0 1 4 5 6 7 9 10 12 13 14 15 17 18 20 22 23 25 26 28 30 31 r 0 1 # 4202 clear_range c a 33 0 1 e r 0 33 # 4203 clear_range c a 33 0 1 e r 3 1 # 4204 clear_range c a 33 0 1 e r 5 7 # 4205 clear_range c a 33 0 1 e r 0 33 # 4206 clear_range c a 33 0 1 e r 0 10 # 4207 clear_range c a 33 0 1 f r 0 33 # 4208 clear_range c a 33 0 1 f r 20 3 # 4209 clear_range c a 33 0 1 f r 12 27 # 4210 clear_range c a 33 0 1 f r 6 33 # 4211 clear_range c a 33 0 1 f r 0 9 # 4212 clear_range c a 33 0 1 0 1 2 4 5 6 7 8 10 11 13 14 16 18 19 22 23 25 26 28 30 32 r 0 33 # 4213 clear_range c a 33 0 1 0 1 2 3 4 5 6 7 13 14 15 16 17 20 21 22 23 24 26 28 31 r 21 5 # 4214 clear_range c a 33 0 1 0 1 3 5 7 10 11 13 15 16 18 19 21 24 25 26 27 28 29 31 32 r 6 9 # 4215 clear_range c a 33 0 1 5 6 9 10 13 18 19 23 29 31 32 r 10 33 # 4216 clear_range c a 33 0 1 2 4 6 7 8 10 12 13 16 17 18 20 22 23 24 26 29 r 0 13 # 4217 clear_range c a 33 1 0 e r 0 33 # 4218 clear_range c a 33 1 0 e r 14 5 # 4219 clear_range c a 33 1 0 e r 6 22 # 4220 clear_range c a 33 1 0 e r 26 33 # 4221 clear_range c a 33 1 0 e r 0 0 # 4222 clear_range c a 33 1 0 f r 0 33 # 4223 clear_range c a 33 1 0 f r 11 6 # 4224 clear_range c a 33 1 0 f r 7 29 # 4225 clear_range c a 33 1 0 f r 2 33 # 4226 clear_range c a 33 1 0 f r 0 4 # 4227 clear_range c a 33 1 0 4 6 9 10 11 13 14 15 17 22 26 27 29 31 r 0 33 # 4228 clear_range c a 33 1 0 0 2 10 13 14 17 19 20 21 24 25 30 r 30 14 # 4229 clear_range c a 33 1 0 0 3 5 6 7 8 12 14 18 19 21 23 27 28 31 r 8 12 # 4230 clear_range c a 33 1 0 0 3 5 7 8 9 13 14 15 17 19 20 21 23 24 25 29 r 26 33 # 4231 clear_range c a 33 1 0 0 1 2 4 6 8 11 19 21 22 25 27 29 32 r 0 23 # 4232 clear_range c a 33 1 1 e r 0 33 # 4233 clear_range c a 33 1 1 e r 23 10 # 4234 clear_range c a 33 1 1 e r 17 28 # 4235 clear_range c a 33 1 1 e r 0 33 # 4236 clear_range c a 33 1 1 e r 0 9 # 4237 clear_range c a 33 1 1 f r 0 33 # 4238 clear_range c a 33 1 1 f r 0 0 # 4239 clear_range c a 33 1 1 f r 0 9 # 4240 clear_range c a 33 1 1 f r 18 33 # 4241 clear_range c a 33 1 1 f r 0 2 # 4242 clear_range c a 33 1 1 3 6 7 8 10 12 18 19 24 30 31 r 0 33 # 4243 clear_range c a 33 1 1 2 3 5 6 8 11 12 13 16 20 21 30 31 32 r 20 1 # 4244 clear_range c a 33 1 1 0 6 9 10 12 14 15 17 20 21 22 27 28 31 32 r 0 0 # 4245 clear_range c a 33 1 1 0 6 7 10 13 15 16 18 22 25 26 28 29 30 31 32 r 20 33 # 4246 clear_range c a 33 1 1 0 2 3 5 9 11 12 13 14 15 18 19 20 22 23 25 26 29 r 0 17 # 4247 clear_range c a 63 0 0 e r 0 63 # 4248 clear_range c a 63 0 0 e r 31 21 # 4249 clear_range c a 63 0 0 e r 23 47 # 4250 clear_range c a 63 0 0 e r 17 63 # 4251 clear_range c a 63 0 0 e r 0 61 # 4252 clear_range c a 63 0 0 f r 0 63 # 4253 clear_range c a 63 0 0 f r 51 43 # 4254 clear_range c a 63 0 0 f r 12 13 # 4255 clear_range c a 63 0 0 f r 58 63 # 4256 clear_range c a 63 0 0 f r 0 51 # 4257 clear_range c a 63 0 0 0 1 2 3 4 5 7 8 9 12 13 18 19 21 22 26 27 30 33 35 37 38 42 45 46 47 49 50 51 52 56 58 60 61 62 r 0 63 # 4258 clear_range c a 63 0 0 0 1 3 5 6 9 11 14 15 16 17 18 22 23 24 25 26 28 29 30 31 34 35 39 42 43 44 45 46 50 51 52 53 54 55 56 58 61 r 34 9 # 4259 clear_range c a 63 0 0 0 4 6 8 9 10 11 15 18 20 22 26 28 30 31 32 35 38 40 41 47 48 51 52 56 57 58 r 43 63 # 4260 clear_range c a 63 0 0 3 5 6 8 10 12 13 15 16 17 18 21 22 24 26 28 30 34 35 36 37 38 39 40 41 43 45 46 48 50 51 53 57 59 r 46 63 # 4261 clear_range c a 63 0 0 0 3 4 6 7 10 11 12 15 16 17 18 20 21 22 23 24 26 28 30 36 37 42 44 46 47 49 51 52 53 54 55 57 58 59 61 r 0 8 # 4262 clear_range c a 63 0 1 e r 0 63 # 4263 clear_range c a 63 0 1 e r 23 2 # 4264 clear_range c a 63 0 1 e r 30 61 # 4265 clear_range c a 63 0 1 e r 44 63 # 4266 clear_range c a 63 0 1 e r 0 46 # 4267 clear_range c a 63 0 1 f r 0 63 # 4268 clear_range c a 63 0 1 f r 18 14 # 4269 clear_range c a 63 0 1 f r 30 52 # 4270 clear_range c a 63 0 1 f r 35 63 # 4271 clear_range c a 63 0 1 f r 0 14 # 4272 clear_range c a 63 0 1 0 4 5 7 8 11 14 19 23 26 28 30 31 39 40 41 42 43 45 47 49 50 51 54 57 58 60 61 r 0 63 # 4273 clear_range c a 63 0 1 2 3 8 9 11 15 16 18 19 21 23 26 27 31 32 34 37 38 40 44 45 47 49 51 52 53 54 60 61 r 0 0 # 4274 clear_range c a 63 0 1 0 1 2 3 4 6 7 8 10 11 14 16 17 19 21 23 25 26 28 29 30 31 32 34 36 37 43 44 47 48 49 50 52 53 56 58 59 62 r 6 34 # 4275 clear_range c a 63 0 1 0 2 3 4 6 9 10 11 12 13 14 15 20 21 25 27 28 30 32 33 35 36 40 43 44 45 46 50 51 52 57 59 r 27 63 # 4276 clear_range c a 63 0 1 1 4 6 7 8 9 10 11 12 13 16 19 23 25 26 30 31 32 33 34 35 37 38 40 41 42 43 44 46 47 50 51 52 54 55 59 60 r 0 56 # 4277 clear_range c a 63 1 0 e r 0 63 # 4278 clear_range c a 63 1 0 e r 37 25 # 4279 clear_range c a 63 1 0 e r 0 0 # 4280 clear_range c a 63 1 0 e r 23 63 # 4281 clear_range c a 63 1 0 e r 0 12 # 4282 clear_range c a 63 1 0 f r 0 63 # 4283 clear_range c a 63 1 0 f r 18 14 # 4284 clear_range c a 63 1 0 f r 8 12 # 4285 clear_range c a 63 1 0 f r 59 63 # 4286 clear_range c a 63 1 0 f r 0 55 # 4287 clear_range c a 63 1 0 1 3 4 5 6 7 10 12 15 17 19 24 27 31 32 35 38 39 40 43 44 49 50 54 56 58 60 r 0 63 # 4288 clear_range c a 63 1 0 0 1 2 3 5 7 8 9 12 13 14 15 16 17 18 25 27 28 29 33 35 36 37 38 39 40 41 44 47 52 53 54 56 61 62 r 28 6 # 4289 clear_range c a 63 1 0 2 3 6 8 10 11 12 13 16 17 19 20 21 25 27 28 30 32 35 36 37 39 42 43 44 45 47 48 50 54 r 5 25 # 4290 clear_range c a 63 1 0 0 2 3 6 7 9 10 13 14 15 18 19 22 24 26 28 30 33 35 38 42 45 47 52 54 55 56 57 58 61 62 r 38 63 # 4291 clear_range c a 63 1 0 0 2 3 7 8 12 14 16 18 20 21 23 24 27 30 31 34 35 36 38 39 40 41 43 46 48 49 50 51 53 57 60 61 r 0 3 # 4292 clear_range c a 63 1 1 e r 0 63 # 4293 clear_range c a 63 1 1 e r 57 38 # 4294 clear_range c a 63 1 1 e r 15 23 # 4295 clear_range c a 63 1 1 e r 31 63 # 4296 clear_range c a 63 1 1 e r 0 21 # 4297 clear_range c a 63 1 1 f r 0 63 # 4298 clear_range c a 63 1 1 f r 7 1 # 4299 clear_range c a 63 1 1 f r 27 51 # 4300 clear_range c a 63 1 1 f r 34 63 # 4301 clear_range c a 63 1 1 f r 0 48 # 4302 clear_range c a 63 1 1 0 2 3 5 7 8 9 10 11 12 15 17 19 21 24 25 29 30 33 36 37 40 45 47 48 53 54 59 60 r 0 63 # 4303 clear_range c a 63 1 1 2 3 6 7 11 12 14 18 19 20 21 22 23 25 28 29 30 34 35 36 37 41 42 43 44 45 50 53 56 57 58 59 60 62 r 19 6 # 4304 clear_range c a 63 1 1 0 1 2 3 12 14 17 21 22 23 24 25 26 28 29 31 32 34 37 38 39 41 42 43 45 47 48 49 51 52 54 56 57 58 59 60 61 r 5 56 # 4305 clear_range c a 63 1 1 2 4 7 12 14 16 17 19 20 21 22 23 25 30 34 36 40 41 42 45 46 48 51 52 56 57 58 61 62 r 52 63 # 4306 clear_range c a 63 1 1 4 5 6 8 10 13 15 17 18 20 22 23 25 29 31 34 37 38 39 41 44 45 47 53 55 56 57 60 62 r 0 17 # 4307 clear_range c a 64 0 0 e r 0 64 # 4308 clear_range c a 64 0 0 e r 23 8 # 4309 clear_range c a 64 0 0 e r 31 52 # 4310 clear_range c a 64 0 0 e r 54 64 # 4311 clear_range c a 64 0 0 e r 0 5 # 4312 clear_range c a 64 0 0 f r 0 64 # 4313 clear_range c a 64 0 0 f r 43 33 # 4314 clear_range c a 64 0 0 f r 2 29 # 4315 clear_range c a 64 0 0 f r 43 64 # 4316 clear_range c a 64 0 0 f r 0 34 # 4317 clear_range c a 64 0 0 1 2 3 5 7 8 9 11 13 14 17 20 21 23 25 26 30 33 36 39 41 43 46 47 50 55 57 58 61 62 r 0 64 # 4318 clear_range c a 64 0 0 0 2 4 7 8 9 10 13 15 19 20 23 27 32 34 37 40 42 43 44 46 49 50 55 56 57 58 61 62 63 r 14 11 # 4319 clear_range c a 64 0 0 1 3 11 13 14 18 21 30 31 34 38 39 42 43 45 50 51 54 55 56 60 61 63 r 1 58 # 4320 clear_range c a 64 0 0 1 5 8 9 10 14 16 19 23 25 26 27 28 29 30 32 34 40 42 44 45 47 49 50 51 53 54 55 56 59 r 10 64 # 4321 clear_range c a 64 0 0 4 5 8 9 11 13 16 19 22 23 24 25 32 33 34 35 36 39 41 42 44 46 48 51 53 54 56 57 59 61 r 0 19 # 4322 clear_range c a 64 0 1 e r 0 64 # 4323 clear_range c a 64 0 1 e r 63 8 # 4324 clear_range c a 64 0 1 e r 0 0 # 4325 clear_range c a 64 0 1 e r 18 64 # 4326 clear_range c a 64 0 1 e r 0 5 # 4327 clear_range c a 64 0 1 f r 0 64 # 4328 clear_range c a 64 0 1 f r 6 0 # 4329 clear_range c a 64 0 1 f r 2 10 # 4330 clear_range c a 64 0 1 f r 27 64 # 4331 clear_range c a 64 0 1 f r 0 53 # 4332 clear_range c a 64 0 1 1 2 3 5 10 12 13 14 15 19 20 22 23 26 28 33 36 38 40 41 42 43 44 45 46 49 55 57 62 r 0 64 # 4333 clear_range c a 64 0 1 2 4 5 7 10 12 17 19 20 21 22 24 26 27 28 29 35 37 38 39 42 44 49 52 54 56 57 60 61 62 63 r 54 41 # 4334 clear_range c a 64 0 1 0 1 3 8 10 12 17 18 22 23 24 25 26 27 28 30 31 35 36 37 40 42 43 45 46 47 48 49 56 58 59 60 61 r 14 16 # 4335 clear_range c a 64 0 1 0 1 2 5 9 12 16 20 22 23 25 26 27 28 29 30 31 32 37 38 39 40 41 43 46 47 48 51 52 53 56 58 59 61 62 r 33 64 # 4336 clear_range c a 64 0 1 0 1 3 10 11 13 14 15 16 17 18 19 21 22 24 26 27 29 30 32 34 36 38 40 43 46 48 53 54 59 62 r 0 53 # 4337 clear_range c a 64 1 0 e r 0 64 # 4338 clear_range c a 64 1 0 e r 53 1 # 4339 clear_range c a 64 1 0 e r 0 13 # 4340 clear_range c a 64 1 0 e r 25 64 # 4341 clear_range c a 64 1 0 e r 0 41 # 4342 clear_range c a 64 1 0 f r 0 64 # 4343 clear_range c a 64 1 0 f r 3 1 # 4344 clear_range c a 64 1 0 f r 1 29 # 4345 clear_range c a 64 1 0 f r 54 64 # 4346 clear_range c a 64 1 0 f r 0 48 # 4347 clear_range c a 64 1 0 0 6 10 11 12 13 15 16 18 19 20 24 26 27 28 29 31 35 36 40 42 44 47 48 51 53 54 57 59 60 61 62 r 0 64 # 4348 clear_range c a 64 1 0 1 2 7 12 13 17 19 23 25 26 31 34 35 36 38 40 42 43 45 48 52 54 55 57 59 61 63 r 7 5 # 4349 clear_range c a 64 1 0 1 2 5 7 8 9 10 11 13 16 18 19 22 24 25 28 30 33 35 36 37 38 39 40 41 42 43 51 52 55 59 60 r 0 12 # 4350 clear_range c a 64 1 0 2 3 4 6 7 10 11 12 20 21 22 24 25 27 29 30 31 32 34 35 36 38 40 41 45 46 50 52 53 55 56 57 58 60 63 r 54 64 # 4351 clear_range c a 64 1 0 0 1 2 8 9 11 13 15 16 18 19 20 22 23 26 27 28 30 31 33 35 38 43 48 51 52 54 55 56 57 58 59 r 0 9 # 4352 clear_range c a 64 1 1 e r 0 64 # 4353 clear_range c a 64 1 1 e r 59 5 # 4354 clear_range c a 64 1 1 e r 15 34 # 4355 clear_range c a 64 1 1 e r 51 64 # 4356 clear_range c a 64 1 1 e r 0 51 # 4357 clear_range c a 64 1 1 f r 0 64 # 4358 clear_range c a 64 1 1 f r 37 29 # 4359 clear_range c a 64 1 1 f r 36 47 # 4360 clear_range c a 64 1 1 f r 27 64 # 4361 clear_range c a 64 1 1 f r 0 23 # 4362 clear_range c a 64 1 1 0 1 3 6 7 9 10 15 16 17 19 21 22 28 30 36 40 41 42 49 54 55 56 60 62 63 r 0 64 # 4363 clear_range c a 64 1 1 0 3 4 5 7 8 13 14 15 17 19 22 23 28 31 32 33 34 35 40 41 46 47 50 53 55 57 r 19 2 # 4364 clear_range c a 64 1 1 1 2 3 4 5 8 9 10 11 12 13 15 17 18 19 20 22 23 24 28 29 30 33 34 36 38 39 41 42 44 45 48 52 55 56 57 59 60 62 r 20 62 # 4365 clear_range c a 64 1 1 0 3 4 5 7 10 11 15 16 18 21 23 29 33 34 36 38 40 41 45 46 49 50 51 52 54 58 59 63 r 19 64 # 4366 clear_range c a 64 1 1 1 3 4 5 7 9 10 12 14 15 16 17 20 21 22 25 26 27 28 30 34 36 43 46 48 50 51 52 54 57 63 r 0 52 # 4367 clear_range c a 65 0 0 e r 0 65 # 4368 clear_range c a 65 0 0 e r 5 3 # 4369 clear_range c a 65 0 0 e r 50 63 # 4370 clear_range c a 65 0 0 e r 16 65 # 4371 clear_range c a 65 0 0 e r 0 62 # 4372 clear_range c a 65 0 0 f r 0 65 # 4373 clear_range c a 65 0 0 f r 21 14 # 4374 clear_range c a 65 0 0 f r 4 53 # 4375 clear_range c a 65 0 0 f r 51 65 # 4376 clear_range c a 65 0 0 f r 0 1 # 4377 clear_range c a 65 0 0 0 1 7 9 11 12 16 17 18 23 24 25 28 29 30 31 35 38 39 42 44 45 47 48 53 54 58 63 64 r 0 65 # 4378 clear_range c a 65 0 0 0 1 4 5 7 8 9 10 11 14 16 17 18 20 22 26 27 28 31 33 34 35 36 38 41 45 46 47 48 49 51 55 56 59 60 61 62 63 64 r 2 0 # 4379 clear_range c a 65 0 0 2 3 5 7 8 10 11 13 17 18 20 21 22 23 24 25 26 27 30 31 32 33 34 43 45 46 47 48 49 50 51 52 53 54 57 59 61 62 63 64 r 19 36 # 4380 clear_range c a 65 0 0 3 4 5 8 11 14 16 20 21 22 23 25 26 29 31 33 35 36 37 39 40 41 48 49 50 51 52 54 55 57 59 60 61 63 64 r 52 65 # 4381 clear_range c a 65 0 0 0 2 5 7 8 9 10 12 13 15 17 20 22 25 26 27 28 29 30 31 37 42 44 45 48 50 51 52 53 58 60 61 62 r 0 27 # 4382 clear_range c a 65 0 1 e r 0 65 # 4383 clear_range c a 65 0 1 e r 48 35 # 4384 clear_range c a 65 0 1 e r 0 2 # 4385 clear_range c a 65 0 1 e r 34 65 # 4386 clear_range c a 65 0 1 e r 0 31 # 4387 clear_range c a 65 0 1 f r 0 65 # 4388 clear_range c a 65 0 1 f r 3 2 # 4389 clear_range c a 65 0 1 f r 47 50 # 4390 clear_range c a 65 0 1 f r 41 65 # 4391 clear_range c a 65 0 1 f r 0 5 # 4392 clear_range c a 65 0 1 0 2 5 7 8 9 10 11 12 13 14 15 17 19 22 24 26 27 30 32 33 34 37 38 40 41 43 44 46 49 51 54 55 57 58 59 60 61 63 r 0 65 # 4393 clear_range c a 65 0 1 0 1 2 3 4 6 7 8 10 19 23 26 27 29 32 35 36 38 39 40 41 43 44 45 48 49 56 60 61 62 63 r 59 21 # 4394 clear_range c a 65 0 1 5 6 8 14 15 18 19 20 26 27 28 32 33 34 35 36 37 39 41 43 44 45 52 53 55 58 60 62 r 3 16 # 4395 clear_range c a 65 0 1 0 1 2 3 4 6 7 9 11 13 18 20 25 27 33 34 37 38 39 40 42 44 46 48 49 50 51 57 59 62 63 r 64 65 # 4396 clear_range c a 65 0 1 0 1 2 3 4 5 7 11 12 14 15 17 19 21 22 23 29 32 35 38 39 40 42 44 51 54 55 56 57 59 60 61 r 0 9 # 4397 clear_range c a 65 1 0 e r 0 65 # 4398 clear_range c a 65 1 0 e r 21 12 # 4399 clear_range c a 65 1 0 e r 8 12 # 4400 clear_range c a 65 1 0 e r 20 65 # 4401 clear_range c a 65 1 0 e r 0 42 # 4402 clear_range c a 65 1 0 f r 0 65 # 4403 clear_range c a 65 1 0 f r 1 0 # 4404 clear_range c a 65 1 0 f r 22 41 # 4405 clear_range c a 65 1 0 f r 55 65 # 4406 clear_range c a 65 1 0 f r 0 13 # 4407 clear_range c a 65 1 0 2 6 7 8 10 13 14 15 20 24 25 26 28 30 31 32 33 35 36 38 39 40 41 44 46 47 53 54 56 57 58 63 r 0 65 # 4408 clear_range c a 65 1 0 0 1 4 6 7 10 11 13 17 18 20 22 26 27 28 29 30 31 32 35 38 39 42 43 45 48 50 52 53 54 55 57 58 61 64 r 19 2 # 4409 clear_range c a 65 1 0 1 2 7 11 12 14 20 22 23 24 25 27 28 29 30 33 34 35 36 37 38 41 46 47 48 50 53 56 57 62 63 64 r 2 47 # 4410 clear_range c a 65 1 0 0 4 6 7 8 10 11 12 13 14 17 18 19 21 22 23 26 30 32 34 36 37 39 40 42 43 47 51 54 56 58 59 60 61 r 15 65 # 4411 clear_range c a 65 1 0 0 2 5 6 7 8 9 12 13 14 17 18 22 26 27 28 30 31 35 38 39 43 44 45 48 49 50 54 55 56 57 58 59 60 62 64 r 0 59 # 4412 clear_range c a 65 1 1 e r 0 65 # 4413 clear_range c a 65 1 1 e r 31 5 # 4414 clear_range c a 65 1 1 e r 14 42 # 4415 clear_range c a 65 1 1 e r 12 65 # 4416 clear_range c a 65 1 1 e r 0 46 # 4417 clear_range c a 65 1 1 f r 0 65 # 4418 clear_range c a 65 1 1 f r 23 19 # 4419 clear_range c a 65 1 1 f r 43 44 # 4420 clear_range c a 65 1 1 f r 48 65 # 4421 clear_range c a 65 1 1 f r 0 63 # 4422 clear_range c a 65 1 1 0 4 5 6 7 8 9 12 14 15 16 17 26 28 32 33 34 35 37 38 40 42 43 44 45 46 47 48 50 51 52 55 56 60 61 62 63 r 0 65 # 4423 clear_range c a 65 1 1 0 1 2 3 4 6 7 8 9 10 11 12 19 20 25 28 30 31 33 34 36 37 39 40 41 42 43 47 48 49 50 51 52 57 58 63 r 23 18 # 4424 clear_range c a 65 1 1 6 8 10 11 12 15 17 18 19 20 21 22 24 27 29 30 31 32 33 34 37 39 42 44 46 48 49 51 52 53 55 57 59 r 11 29 # 4425 clear_range c a 65 1 1 4 7 10 13 14 16 17 18 20 22 23 24 29 31 35 36 37 38 41 42 43 44 47 49 54 58 59 60 62 64 r 35 65 # 4426 clear_range c a 65 1 1 1 4 7 12 16 17 19 21 22 24 25 26 27 33 34 37 38 42 44 49 51 52 55 58 60 62 63 r 0 20 # 4427 clear_range c a 211 0 0 e r 0 211 # 4428 clear_range c a 211 0 0 e r 161 3 # 4429 clear_range c a 211 0 0 e r 11 16 # 4430 clear_range c a 211 0 0 e r 148 211 # 4431 clear_range c a 211 0 0 e r 0 82 # 4432 clear_range c a 211 0 0 f r 0 211 # 4433 clear_range c a 211 0 0 f r 201 101 # 4434 clear_range c a 211 0 0 f r 53 93 # 4435 clear_range c a 211 0 0 f r 136 211 # 4436 clear_range c a 211 0 0 f r 0 132 # 4437 clear_range c a 211 0 0 0 1 2 3 4 5 8 10 11 12 15 18 19 20 22 23 26 27 28 36 37 38 39 41 45 47 49 55 56 58 59 60 65 66 69 71 73 74 75 79 81 82 83 86 92 98 99 100 101 104 108 109 110 111 112 113 114 118 119 120 121 122 123 126 127 128 129 131 132 133 138 141 143 144 145 147 149 150 152 153 159 160 161 162 163 164 165 169 171 172 173 174 176 177 180 182 183 184 185 189 193 194 196 201 203 204 205 208 209 210 r 0 211 # 4438 clear_range c a 211 0 0 0 3 8 10 11 12 13 14 15 16 26 27 29 33 37 38 41 43 46 51 52 53 58 59 63 65 67 68 72 76 78 80 83 85 86 87 89 90 91 95 97 98 100 103 104 105 108 110 111 113 115 116 119 122 123 126 127 128 129 130 131 134 135 140 142 146 147 148 150 152 153 156 158 159 161 162 163 165 166 167 170 173 175 178 180 181 182 183 186 188 189 192 197 199 203 205 207 r 37 19 # 4439 clear_range c a 211 0 0 1 3 4 5 6 7 10 11 16 18 19 20 24 25 26 29 32 33 35 36 37 38 41 43 45 49 51 58 59 61 64 70 71 73 75 76 77 78 79 80 82 84 86 88 90 91 96 98 100 102 103 106 109 111 112 115 116 117 118 121 123 125 127 129 131 134 135 136 137 139 142 144 150 151 154 157 160 161 164 167 169 170 171 173 175 176 180 182 183 184 185 188 189 190 191 192 195 196 197 199 202 203 204 205 206 207 r 31 95 # 4440 clear_range c a 211 0 0 2 3 4 5 6 7 8 11 12 14 16 17 18 19 21 22 25 26 27 38 39 40 42 44 45 46 49 51 52 58 59 60 64 65 67 68 70 71 72 73 75 76 81 83 85 87 91 92 93 97 106 108 111 112 113 114 118 119 122 125 126 127 128 131 132 136 139 141 142 144 145 146 148 149 150 153 154 156 160 164 165 166 167 168 170 174 175 177 182 183 184 187 188 191 192 193 195 197 198 201 202 205 208 209 210 r 198 211 # 4441 clear_range c a 211 0 0 0 2 3 4 6 7 8 9 10 11 12 13 14 16 17 18 21 22 23 24 28 29 30 31 33 34 36 37 39 40 46 48 55 63 64 67 69 70 71 78 80 82 83 86 87 88 92 93 95 97 98 99 100 102 103 104 110 113 115 116 118 119 120 122 127 128 129 130 131 134 136 143 144 145 146 147 148 149 150 151 153 155 156 158 159 161 162 163 167 168 169 172 173 175 178 181 183 186 188 189 195 196 197 198 201 202 204 205 210 r 0 151 # 4442 clear_range c a 211 0 1 e r 0 211 # 4443 clear_range c a 211 0 1 e r 133 100 # 4444 clear_range c a 211 0 1 e r 36 47 # 4445 clear_range c a 211 0 1 e r 23 211 # 4446 clear_range c a 211 0 1 e r 0 118 # 4447 clear_range c a 211 0 1 f r 0 211 # 4448 clear_range c a 211 0 1 f r 25 8 # 4449 clear_range c a 211 0 1 f r 0 2 # 4450 clear_range c a 211 0 1 f r 62 211 # 4451 clear_range c a 211 0 1 f r 0 99 # 4452 clear_range c a 211 0 1 0 2 3 5 7 8 9 12 13 14 18 21 23 24 27 30 32 33 34 36 38 42 44 45 50 51 53 54 58 59 60 61 62 63 64 65 66 67 69 74 76 82 83 85 86 87 88 89 91 92 95 98 99 101 103 105 106 111 112 115 118 122 124 128 130 138 140 144 145 147 151 156 157 159 160 164 166 167 168 172 173 174 179 180 181 184 185 187 189 193 194 199 200 201 203 207 208 209 210 r 0 211 # 4453 clear_range c a 211 0 1 0 3 5 10 11 12 14 16 19 23 24 25 27 28 29 33 35 36 37 41 45 46 50 56 57 58 59 60 65 67 68 74 75 79 80 85 92 97 99 103 104 105 106 109 115 117 119 122 124 126 129 137 138 139 140 144 145 146 147 148 150 152 153 154 155 158 162 163 164 172 179 180 184 185 190 191 193 194 196 200 201 203 205 209 r 149 27 # 4454 clear_range c a 211 0 1 0 1 2 3 4 8 10 11 13 14 15 17 18 24 25 26 32 34 35 36 39 41 43 44 50 51 52 58 59 62 64 65 67 69 71 72 73 75 77 81 83 88 92 94 95 98 100 103 105 108 109 110 111 112 114 115 116 120 121 122 123 124 126 128 129 130 131 132 133 136 137 138 140 141 144 147 148 149 151 152 153 154 155 157 158 160 161 162 163 164 166 169 170 174 176 179 182 183 185 186 187 188 189 191 196 198 201 203 r 20 42 # 4455 clear_range c a 211 0 1 1 8 9 10 11 13 14 15 16 17 21 22 23 25 27 29 30 32 34 36 37 40 47 49 51 52 55 57 58 60 62 64 65 66 68 70 71 75 76 77 78 79 82 87 88 89 91 96 97 98 99 101 103 105 107 110 111 113 115 116 118 119 121 122 123 125 128 129 130 132 134 135 138 139 140 141 142 144 145 147 149 150 151 152 154 162 163 164 165 166 169 170 171 172 173 175 176 184 186 190 191 192 194 195 197 198 200 201 203 204 205 209 210 r 9 211 # 4456 clear_range c a 211 0 1 1 3 5 7 9 11 14 15 16 17 19 20 21 25 26 27 28 29 32 33 35 36 38 39 42 43 45 46 49 52 53 54 56 57 58 59 62 67 68 69 70 73 75 76 77 80 83 86 87 88 89 90 93 94 95 96 97 98 99 100 101 102 104 106 110 112 114 115 117 118 120 121 122 125 128 129 131 132 134 137 138 139 141 142 143 144 145 146 148 149 150 151 152 153 156 157 158 160 161 166 167 169 172 175 185 187 188 193 194 196 197 200 201 202 203 207 208 209 r 0 25 # 4457 clear_range c a 211 1 0 e r 0 211 # 4458 clear_range c a 211 1 0 e r 174 50 # 4459 clear_range c a 211 1 0 e r 4 9 # 4460 clear_range c a 211 1 0 e r 103 211 # 4461 clear_range c a 211 1 0 e r 0 112 # 4462 clear_range c a 211 1 0 f r 0 211 # 4463 clear_range c a 211 1 0 f r 27 20 # 4464 clear_range c a 211 1 0 f r 73 127 # 4465 clear_range c a 211 1 0 f r 41 211 # 4466 clear_range c a 211 1 0 f r 0 211 # 4467 clear_range c a 211 1 0 1 2 4 6 7 8 10 12 14 16 18 19 20 23 30 31 33 37 41 46 48 51 52 55 56 57 60 62 67 69 70 71 72 74 75 76 77 79 83 84 85 86 87 88 91 92 94 99 103 104 106 107 112 113 115 116 118 119 120 121 123 127 128 129 132 133 135 139 141 144 145 146 147 149 150 152 155 156 157 158 159 162 167 169 171 172 173 175 178 179 180 182 183 184 186 188 192 194 195 198 199 200 202 203 204 r 0 211 # 4468 clear_range c a 211 1 0 1 6 7 11 14 16 18 19 22 23 27 28 29 30 35 36 38 40 44 47 50 51 52 53 54 55 56 58 59 60 61 62 64 67 68 70 71 72 77 79 81 82 83 84 86 87 88 89 91 96 97 99 102 103 107 108 109 110 112 113 119 120 121 122 125 126 128 131 134 135 138 141 142 143 144 145 147 149 150 153 154 155 156 157 158 160 167 168 177 182 183 184 186 187 189 192 193 194 200 201 205 209 210 r 150 130 # 4469 clear_range c a 211 1 0 0 1 2 4 5 8 9 11 13 14 15 20 21 22 26 27 29 30 31 32 33 35 36 37 39 41 43 44 46 48 50 52 54 56 57 59 60 62 63 66 67 68 69 70 72 76 78 82 84 85 86 87 88 89 90 91 93 94 96 97 99 100 105 106 109 110 111 113 116 117 118 119 120 121 122 125 126 133 134 135 136 137 141 142 143 144 146 149 152 153 156 158 163 166 168 175 176 179 181 183 184 185 188 189 190 198 200 202 203 204 206 r 187 194 # 4470 clear_range c a 211 1 0 0 1 2 4 7 9 13 14 15 18 19 21 23 24 25 29 32 34 35 36 38 41 42 43 44 45 46 50 51 55 57 59 60 61 65 69 72 75 76 77 78 81 82 83 86 87 89 90 91 92 95 97 100 101 102 103 104 107 111 115 116 118 119 121 122 123 126 130 131 132 133 134 135 138 140 145 148 156 158 159 161 162 164 165 168 170 171 172 173 174 176 179 181 182 183 184 187 190 191 193 197 207 209 210 r 102 211 # 4471 clear_range c a 211 1 0 0 1 2 3 4 5 12 13 14 16 18 22 23 26 27 30 31 33 34 36 38 39 46 49 50 51 54 55 56 58 59 60 61 62 65 68 73 74 75 76 77 78 80 81 86 87 88 89 90 91 93 94 95 96 99 100 106 109 110 112 115 118 121 122 123 124 125 126 127 129 133 135 136 138 141 144 145 150 151 153 156 158 163 165 171 173 176 178 180 183 185 187 188 192 193 194 195 196 200 201 204 207 208 r 0 58 # 4472 clear_range c a 211 1 1 e r 0 211 # 4473 clear_range c a 211 1 1 e r 186 181 # 4474 clear_range c a 211 1 1 e r 128 164 # 4475 clear_range c a 211 1 1 e r 157 211 # 4476 clear_range c a 211 1 1 e r 0 16 # 4477 clear_range c a 211 1 1 f r 0 211 # 4478 clear_range c a 211 1 1 f r 52 9 # 4479 clear_range c a 211 1 1 f r 30 63 # 4480 clear_range c a 211 1 1 f r 176 211 # 4481 clear_range c a 211 1 1 f r 0 46 # 4482 clear_range c a 211 1 1 0 2 3 4 6 7 8 11 12 13 15 16 17 19 22 25 26 28 31 32 34 35 36 37 38 39 40 41 43 44 45 47 48 49 51 56 58 59 62 64 65 66 67 69 72 73 76 77 79 80 81 82 83 84 87 90 91 92 93 95 96 98 100 102 103 105 108 110 113 116 117 125 127 128 131 133 134 135 136 137 138 139 141 143 144 145 146 147 148 153 154 155 158 161 163 164 166 167 169 170 171 172 173 176 180 182 186 187 188 189 192 193 195 196 197 198 200 202 206 208 210 r 0 211 # 4483 clear_range c a 211 1 1 0 1 3 4 5 6 7 8 9 10 11 13 16 18 19 20 22 24 29 30 40 44 46 47 48 49 50 51 53 57 59 62 63 64 69 70 72 73 74 75 77 78 82 83 86 88 92 95 97 99 100 103 106 107 110 111 112 113 118 120 121 122 123 126 127 130 131 132 134 135 136 138 139 140 141 142 143 144 147 148 149 151 152 153 154 157 158 161 163 164 166 167 168 169 170 171 174 176 177 180 183 185 187 188 191 192 193 194 195 196 197 198 199 200 204 207 209 r 19 14 # 4484 clear_range c a 211 1 1 2 7 8 10 13 18 19 20 22 23 24 25 28 30 32 34 36 38 39 41 43 45 46 47 48 49 50 51 53 54 55 56 57 59 64 67 71 73 74 75 77 78 80 81 83 84 85 86 88 92 94 96 100 101 103 105 106 107 108 113 115 116 119 120 121 123 125 127 131 134 135 137 138 142 144 147 148 149 151 152 153 155 156 157 158 159 162 164 165 168 169 171 177 178 180 182 183 186 187 189 190 192 193 194 195 196 198 199 202 204 206 209 r 59 143 # 4485 clear_range c a 211 1 1 1 3 4 9 12 15 19 20 21 25 29 31 32 33 34 37 38 39 40 44 45 47 49 50 55 56 57 60 61 62 64 65 66 68 69 73 74 76 79 81 83 85 86 88 89 92 94 97 98 99 100 101 104 106 108 109 112 113 114 117 120 121 122 125 126 127 128 129 130 131 132 136 137 138 139 140 142 143 145 147 148 149 150 152 153 154 157 158 160 161 162 164 166 167 169 175 182 183 185 187 188 190 192 193 194 195 197 198 200 202 204 205 209 r 30 211 # 4486 clear_range c a 211 1 1 2 4 5 7 17 18 21 22 23 24 25 28 29 30 31 32 33 35 36 37 38 39 40 41 46 49 50 51 54 57 60 63 65 66 67 70 74 75 76 81 82 83 85 86 87 88 92 97 99 103 105 106 109 111 112 119 120 121 123 125 128 132 137 139 140 141 142 143 147 148 149 150 151 152 154 155 156 157 159 161 162 167 169 170 172 176 177 180 181 185 188 189 190 192 193 194 195 198 202 204 205 206 207 208 209 r 0 7 # 4487 clear_range c a 224 0 0 e r 0 224 # 4488 clear_range c a 224 0 0 e r 93 90 # 4489 clear_range c a 224 0 0 e r 22 159 # 4490 clear_range c a 224 0 0 e r 71 224 # 4491 clear_range c a 224 0 0 e r 0 150 # 4492 clear_range c a 224 0 0 f r 0 224 # 4493 clear_range c a 224 0 0 f r 145 91 # 4494 clear_range c a 224 0 0 f r 1 63 # 4495 clear_range c a 224 0 0 f r 10 224 # 4496 clear_range c a 224 0 0 f r 0 23 # 4497 clear_range c a 224 0 0 1 3 4 5 9 12 15 20 24 25 26 29 31 32 33 34 35 36 37 38 40 42 43 44 45 46 47 49 53 54 55 56 57 60 61 63 65 68 71 72 74 75 77 78 79 80 81 83 84 86 90 92 93 94 96 98 99 100 102 103 105 106 107 108 113 116 118 120 123 128 129 131 134 135 137 141 142 143 144 146 147 148 149 150 155 156 159 161 162 163 165 167 168 169 170 171 172 173 174 175 176 177 179 183 184 187 188 189 190 193 195 196 197 199 200 202 203 209 210 211 216 217 219 220 r 0 224 # 4498 clear_range c a 224 0 0 2 7 8 9 10 15 19 20 21 24 25 27 30 31 32 33 41 42 43 46 48 54 58 60 61 63 64 66 68 70 73 76 78 79 83 84 86 87 89 92 93 94 95 97 102 106 109 110 111 114 115 117 118 119 120 123 126 130 132 134 135 136 137 140 145 147 148 150 152 155 157 159 163 164 166 170 173 175 176 177 178 179 180 181 183 186 187 191 193 194 196 197 198 200 205 208 211 215 216 221 223 r 38 4 # 4499 clear_range c a 224 0 0 1 2 3 4 5 9 11 15 16 17 22 23 24 26 27 29 30 33 37 38 39 40 44 45 47 51 52 53 54 57 60 62 66 67 69 73 74 75 76 78 80 81 84 86 90 91 92 93 97 98 99 100 103 106 109 112 113 114 115 116 117 118 121 127 132 133 136 138 140 142 143 144 147 154 155 156 160 161 162 163 164 165 167 169 173 174 179 180 184 185 186 187 191 194 197 198 200 202 205 207 209 213 216 219 220 221 222 r 18 64 # 4500 clear_range c a 224 0 0 0 2 3 4 5 6 8 12 16 20 21 22 23 24 25 26 27 29 30 31 32 34 35 37 40 42 43 44 45 47 49 50 52 53 55 57 58 59 60 62 63 64 69 77 78 79 81 82 84 86 89 90 91 93 94 100 101 102 105 108 119 122 126 128 130 131 133 134 136 138 140 142 146 147 148 150 151 152 155 156 159 163 167 168 171 175 178 181 185 188 189 190 196 199 200 201 202 207 208 210 212 216 217 219 223 r 182 224 # 4501 clear_range c a 224 0 0 0 2 4 5 6 7 8 10 13 15 16 18 19 20 21 22 23 25 27 29 30 33 35 36 38 39 40 41 45 46 49 52 54 59 62 68 71 72 73 74 77 78 79 80 81 82 85 86 89 94 96 98 99 100 101 103 104 109 110 112 113 114 116 118 121 122 123 125 127 129 130 131 132 134 135 136 137 138 140 141 143 144 147 148 149 152 153 154 156 159 161 162 165 166 167 168 169 171 172 173 174 175 176 177 178 179 180 182 183 185 187 190 193 194 195 196 197 198 200 201 203 204 205 206 207 208 209 211 212 214 219 220 r 0 29 # 4502 clear_range c a 224 0 1 e r 0 224 # 4503 clear_range c a 224 0 1 e r 164 62 # 4504 clear_range c a 224 0 1 e r 7 41 # 4505 clear_range c a 224 0 1 e r 164 224 # 4506 clear_range c a 224 0 1 e r 0 100 # 4507 clear_range c a 224 0 1 f r 0 224 # 4508 clear_range c a 224 0 1 f r 131 97 # 4509 clear_range c a 224 0 1 f r 3 102 # 4510 clear_range c a 224 0 1 f r 221 224 # 4511 clear_range c a 224 0 1 f r 0 187 # 4512 clear_range c a 224 0 1 0 2 3 4 5 6 8 9 10 11 14 16 17 18 19 20 21 23 25 27 29 30 34 35 37 39 40 41 42 43 45 48 50 51 52 57 59 60 61 62 65 67 68 70 73 75 77 82 84 89 90 92 93 94 96 97 98 99 101 103 105 106 107 108 111 116 117 122 131 134 135 137 138 139 141 142 143 146 147 148 152 153 154 158 159 160 162 163 164 165 166 167 168 170 173 174 175 177 178 181 182 184 186 188 189 195 198 200 201 202 204 205 206 208 209 212 214 215 216 217 220 221 222 223 r 0 224 # 4513 clear_range c a 224 0 1 2 3 4 5 8 9 10 11 12 13 17 18 20 22 23 27 28 30 32 33 34 36 38 39 41 42 43 47 48 51 52 54 55 57 58 61 62 63 64 65 67 68 70 73 75 77 78 80 81 83 85 86 87 88 89 92 93 95 96 97 98 99 101 102 104 107 108 109 111 112 114 118 122 123 125 126 127 128 130 131 133 135 136 137 138 139 140 142 143 144 145 146 149 150 160 163 164 165 166 167 169 170 173 174 175 176 177 179 180 181 185 186 187 191 194 197 199 200 202 205 208 211 213 215 216 217 218 219 222 223 r 157 120 # 4514 clear_range c a 224 0 1 1 2 3 4 5 7 9 10 12 13 14 16 18 19 21 22 24 26 27 28 30 33 34 36 38 39 40 41 43 48 52 54 55 57 62 63 64 65 66 67 68 69 70 71 72 74 76 79 81 84 88 89 90 92 93 94 95 97 98 100 103 104 106 108 114 116 117 118 119 120 121 122 123 125 126 127 128 131 132 133 134 135 137 144 146 147 151 154 155 158 160 163 166 167 168 169 170 174 176 179 180 181 182 185 186 187 189 192 193 196 197 198 199 200 201 205 206 212 214 216 217 218 r 42 64 # 4515 clear_range c a 224 0 1 0 1 2 3 4 5 6 13 15 18 19 20 21 22 23 26 27 28 29 32 35 36 37 43 45 54 55 57 60 61 62 63 65 66 68 72 73 74 75 76 80 81 82 85 87 88 89 90 91 92 93 94 95 96 97 99 100 101 102 103 104 105 106 107 113 114 116 120 123 124 125 126 127 128 129 131 132 139 143 148 150 151 152 153 155 156 159 161 163 165 167 169 170 171 175 176 177 178 179 181 183 184 185 186 187 193 195 196 197 198 200 201 202 203 206 209 210 218 219 223 r 13 224 # 4516 clear_range c a 224 0 1 0 3 5 7 8 15 17 19 21 23 24 29 30 34 35 36 38 39 40 41 42 47 49 50 51 54 56 57 60 68 69 71 72 76 83 84 85 86 87 88 90 91 92 96 97 98 99 100 101 102 103 107 108 109 111 114 117 118 121 123 125 128 129 132 136 144 146 148 149 150 152 158 162 164 165 166 169 170 171 176 177 178 179 180 181 182 186 187 188 192 193 194 196 198 201 203 210 213 214 215 218 219 220 223 r 0 59 # 4517 clear_range c a 224 1 0 e r 0 224 # 4518 clear_range c a 224 1 0 e r 166 149 # 4519 clear_range c a 224 1 0 e r 129 220 # 4520 clear_range c a 224 1 0 e r 103 224 # 4521 clear_range c a 224 1 0 e r 0 113 # 4522 clear_range c a 224 1 0 f r 0 224 # 4523 clear_range c a 224 1 0 f r 105 88 # 4524 clear_range c a 224 1 0 f r 48 94 # 4525 clear_range c a 224 1 0 f r 136 224 # 4526 clear_range c a 224 1 0 f r 0 170 # 4527 clear_range c a 224 1 0 1 2 3 4 7 8 15 18 22 23 24 25 26 27 28 29 32 35 36 37 38 39 41 43 45 46 47 48 49 52 55 58 60 62 63 64 67 71 73 74 82 84 87 92 93 95 97 100 101 104 105 106 109 110 111 113 114 116 122 126 127 128 131 137 139 140 142 144 145 146 147 148 149 154 155 156 157 158 159 161 162 163 165 166 167 168 170 171 172 173 175 178 182 183 184 185 186 191 193 195 196 198 199 200 201 202 203 204 208 210 211 213 214 218 219 220 221 222 r 0 224 # 4528 clear_range c a 224 1 0 0 3 4 6 7 9 13 19 20 21 22 25 28 30 31 34 36 37 38 40 42 47 49 52 54 58 59 60 61 62 70 71 72 76 77 81 82 85 91 92 96 97 99 102 104 106 108 109 110 112 114 115 121 125 126 127 130 131 133 134 137 138 140 142 144 148 149 150 152 154 156 160 168 170 171 172 175 176 177 178 179 180 181 182 183 184 185 186 187 191 193 195 196 197 199 200 201 202 203 205 208 216 221 223 r 47 14 # 4529 clear_range c a 224 1 0 0 3 6 8 12 13 14 19 22 23 24 27 29 33 35 36 39 40 43 46 47 48 50 52 53 54 55 58 59 62 63 64 66 67 70 72 74 76 77 79 81 82 84 85 87 89 90 91 93 94 96 97 102 103 104 105 107 108 114 117 119 120 121 122 124 125 127 128 129 132 133 135 136 140 141 142 146 147 149 150 152 153 154 155 156 159 160 161 163 164 166 168 170 171 173 175 178 179 181 184 185 186 187 190 193 195 197 205 209 212 214 217 219 221 222 r 19 64 # 4530 clear_range c a 224 1 0 3 4 8 9 13 17 18 19 22 23 25 26 29 31 33 34 38 44 45 46 48 49 53 54 55 56 57 58 63 66 68 69 70 72 74 75 76 77 79 80 82 85 86 88 89 90 94 95 96 97 99 100 101 103 105 106 108 109 110 113 114 115 116 117 119 120 122 124 125 126 127 128 130 131 138 139 141 143 144 146 147 148 151 152 154 155 157 158 161 164 165 166 168 169 173 174 176 177 178 179 180 182 183 184 185 188 190 191 192 195 196 199 203 206 208 209 211 213 214 216 218 221 r 87 224 # 4531 clear_range c a 224 1 0 0 4 6 11 13 14 16 17 18 19 22 23 28 29 30 31 33 35 37 39 41 43 48 52 58 61 62 64 67 69 70 71 74 75 80 81 82 83 87 88 90 91 92 93 95 97 98 100 104 105 109 110 111 112 113 114 115 116 117 118 119 121 122 124 126 127 129 131 133 135 136 139 141 142 143 144 145 146 147 148 149 151 159 160 161 162 165 171 174 176 177 178 179 182 183 184 185 190 193 195 196 197 198 202 203 205 206 209 211 213 214 216 220 223 r 0 140 # 4532 clear_range c a 224 1 1 e r 0 224 # 4533 clear_range c a 224 1 1 e r 165 39 # 4534 clear_range c a 224 1 1 e r 7 87 # 4535 clear_range c a 224 1 1 e r 40 224 # 4536 clear_range c a 224 1 1 e r 0 28 # 4537 clear_range c a 224 1 1 f r 0 224 # 4538 clear_range c a 224 1 1 f r 97 60 # 4539 clear_range c a 224 1 1 f r 102 108 # 4540 clear_range c a 224 1 1 f r 73 224 # 4541 clear_range c a 224 1 1 f r 0 199 # 4542 clear_range c a 224 1 1 0 1 3 11 12 16 18 19 21 22 23 24 25 26 33 34 35 38 39 40 43 44 45 47 49 50 51 52 54 55 57 58 59 62 63 64 65 70 71 72 74 77 79 80 81 82 83 87 92 95 97 98 99 101 102 103 107 109 110 112 113 117 118 122 123 124 126 128 129 132 133 137 139 144 145 150 151 152 153 154 155 156 159 161 163 164 171 172 173 174 175 178 179 180 181 182 183 186 188 193 195 200 203 207 208 210 211 214 215 216 217 219 221 r 0 224 # 4543 clear_range c a 224 1 1 3 4 5 7 10 12 16 17 19 21 22 24 25 27 28 29 33 34 36 39 40 41 45 46 47 48 50 53 54 55 56 58 60 62 65 68 69 71 72 73 75 78 81 83 84 86 89 90 93 94 95 98 100 103 104 106 108 109 110 112 114 117 118 119 121 123 124 130 132 133 135 137 140 141 146 147 149 150 151 152 155 157 158 159 161 164 165 166 168 173 174 177 179 180 181 183 185 186 187 188 189 190 194 196 197 199 200 201 204 206 209 212 213 216 217 218 219 220 221 r 1 0 # 4544 clear_range c a 224 1 1 1 2 3 4 5 6 7 8 9 11 14 15 16 17 19 20 22 23 24 25 26 28 29 32 33 36 39 41 43 46 47 48 50 51 53 54 56 57 58 59 61 64 65 66 67 71 72 73 74 80 86 87 88 90 93 94 96 99 100 101 102 103 104 106 107 108 111 114 115 116 117 118 119 123 125 133 134 135 137 138 143 144 148 152 154 159 160 161 163 164 166 169 170 173 175 177 180 181 183 186 187 188 190 193 195 201 202 203 204 206 208 211 212 213 214 217 218 221 222 r 53 188 # 4545 clear_range c a 224 1 1 1 2 3 6 8 9 10 11 12 13 14 16 17 21 26 27 28 29 32 33 37 38 40 42 43 45 47 48 49 52 53 55 58 62 63 65 68 69 70 71 73 75 76 77 78 79 82 84 88 95 101 102 103 104 106 111 112 114 115 116 118 119 122 123 124 126 127 128 129 132 135 136 137 139 142 144 145 146 148 149 164 165 166 168 172 176 178 179 183 185 187 192 193 194 195 197 200 201 203 204 205 207 210 211 214 215 218 219 220 223 r 36 224 # 4546 clear_range c a 224 1 1 0 3 4 5 6 12 14 15 17 19 20 23 26 27 30 32 35 36 37 41 47 48 49 50 51 54 55 59 60 63 65 66 68 69 70 72 75 77 78 83 84 85 89 93 95 101 103 105 106 107 108 109 114 115 119 123 125 127 129 130 132 135 138 141 147 148 149 150 157 159 164 165 169 172 173 174 182 184 186 188 194 197 200 201 202 203 204 205 209 210 211 213 218 222 223 r 0 45 # 4547 clear_range c a 247 0 0 e r 0 247 # 4548 clear_range c a 247 0 0 e r 59 10 # 4549 clear_range c a 247 0 0 e r 123 176 # 4550 clear_range c a 247 0 0 e r 179 247 # 4551 clear_range c a 247 0 0 e r 0 151 # 4552 clear_range c a 247 0 0 f r 0 247 # 4553 clear_range c a 247 0 0 f r 153 142 # 4554 clear_range c a 247 0 0 f r 30 93 # 4555 clear_range c a 247 0 0 f r 157 247 # 4556 clear_range c a 247 0 0 f r 0 1 # 4557 clear_range c a 247 0 0 0 2 3 5 8 9 12 13 14 17 18 19 20 21 23 25 27 35 37 38 40 43 47 48 50 51 54 55 58 59 63 64 65 66 67 68 69 71 73 74 76 77 79 81 82 85 88 89 95 98 99 100 102 104 106 107 109 110 111 112 113 116 118 119 121 123 125 126 127 128 129 130 131 132 135 136 137 138 140 141 143 144 147 148 149 152 153 157 160 161 163 165 166 168 169 170 171 172 174 175 176 177 179 180 181 183 184 189 190 192 194 196 197 198 199 201 204 206 207 213 217 219 222 225 228 232 233 235 236 238 240 244 245 246 r 0 247 # 4558 clear_range c a 247 0 0 3 4 6 8 9 10 12 13 14 15 16 19 21 22 23 24 25 28 29 36 38 39 43 46 48 54 58 63 64 65 67 68 69 70 75 80 81 86 88 89 90 91 92 94 95 96 97 99 100 107 108 109 112 113 114 118 119 122 124 125 126 127 128 130 131 132 133 137 140 142 143 146 148 149 155 158 159 160 162 163 165 166 167 168 172 173 175 180 181 182 187 188 189 190 191 195 198 200 202 205 207 209 212 213 217 219 220 221 222 227 228 233 234 235 236 241 244 245 246 r 36 22 # 4559 clear_range c a 247 0 0 1 4 5 6 7 8 9 10 12 14 15 18 19 20 23 24 25 27 28 31 33 36 37 39 40 41 42 43 45 46 49 52 54 55 59 60 61 62 64 66 67 69 71 72 74 78 81 82 85 86 87 90 93 94 96 101 105 106 110 111 113 114 115 117 118 119 122 123 125 129 131 133 135 136 137 142 143 144 145 146 148 149 156 157 158 160 162 164 166 167 170 171 173 174 176 177 178 179 183 185 188 189 190 191 193 194 196 197 198 201 202 203 204 205 207 210 211 214 215 217 220 224 227 236 240 244 r 96 229 # 4560 clear_range c a 247 0 0 0 1 3 6 8 9 10 14 19 20 21 22 25 27 29 30 31 32 34 36 37 38 39 40 44 46 48 51 53 55 56 57 60 63 64 66 69 75 76 83 89 90 91 93 94 97 98 101 102 103 106 109 110 111 113 114 115 119 122 123 126 129 130 131 132 133 136 143 146 147 151 155 156 159 162 163 164 167 169 171 172 173 178 179 183 184 185 186 189 191 194 197 199 200 201 202 203 204 206 207 209 210 211 214 217 218 219 220 223 227 230 231 233 234 235 236 237 238 240 241 244 r 25 247 # 4561 clear_range c a 247 0 0 2 3 6 7 8 10 11 12 13 14 15 16 17 18 19 21 24 25 27 29 30 33 35 38 40 41 44 48 54 58 61 62 64 68 69 70 71 72 73 77 78 82 83 84 86 87 88 89 91 92 95 96 97 99 100 102 105 106 108 109 110 111 114 115 116 117 118 119 120 122 123 124 126 127 128 130 131 133 135 136 141 148 151 152 153 155 158 161 162 163 164 166 169 170 171 172 176 177 178 179 185 190 191 193 194 195 196 204 206 207 209 213 214 216 217 218 221 222 225 229 230 231 236 239 241 244 246 r 0 146 # 4562 clear_range c a 247 0 1 e r 0 247 # 4563 clear_range c a 247 0 1 e r 87 83 # 4564 clear_range c a 247 0 1 e r 23 106 # 4565 clear_range c a 247 0 1 e r 227 247 # 4566 clear_range c a 247 0 1 e r 0 118 # 4567 clear_range c a 247 0 1 f r 0 247 # 4568 clear_range c a 247 0 1 f r 180 3 # 4569 clear_range c a 247 0 1 f r 37 196 # 4570 clear_range c a 247 0 1 f r 109 247 # 4571 clear_range c a 247 0 1 f r 0 232 # 4572 clear_range c a 247 0 1 1 2 3 4 5 7 9 10 14 17 18 19 20 21 23 24 26 27 28 29 30 37 39 41 43 47 53 54 56 57 58 59 60 61 62 66 67 68 69 72 73 76 77 78 80 90 93 101 102 108 110 111 112 116 117 125 126 127 130 132 133 134 136 138 139 140 141 142 143 144 146 147 148 150 152 154 157 159 160 163 164 165 167 170 171 173 174 177 178 181 186 187 188 189 190 191 193 194 196 200 205 208 210 211 215 217 218 220 221 224 227 228 229 230 231 232 237 238 239 242 243 244 246 r 0 247 # 4573 clear_range c a 247 0 1 2 3 9 10 11 12 13 14 15 16 18 19 21 22 24 27 28 29 32 34 36 38 39 40 41 42 43 45 51 53 57 58 64 66 68 71 75 77 78 79 83 85 86 89 90 91 96 98 100 103 104 105 106 108 109 110 112 114 117 118 119 120 122 124 126 130 132 136 137 138 139 140 141 142 143 145 146 148 149 151 153 155 159 160 162 164 166 167 169 171 174 175 177 183 185 186 187 191 192 196 199 201 202 203 205 207 209 211 213 214 215 216 219 220 221 222 226 228 232 234 236 238 244 r 108 38 # 4574 clear_range c a 247 0 1 0 1 3 4 5 8 12 15 18 19 23 24 25 26 28 30 31 35 37 42 43 44 45 46 49 51 53 54 58 60 61 65 67 71 72 73 74 75 76 77 80 81 84 86 88 90 91 93 94 96 100 102 103 105 106 110 115 116 120 121 123 124 127 129 130 133 134 135 136 137 140 144 145 150 151 154 159 167 168 171 172 173 176 178 179 180 181 182 185 186 187 190 191 193 195 198 200 201 203 204 208 211 219 220 221 222 224 225 226 229 232 233 238 240 243 244 245 r 35 75 # 4575 clear_range c a 247 0 1 0 2 3 6 9 10 11 14 19 21 22 23 24 25 26 27 30 31 32 33 34 35 41 43 47 49 50 51 68 70 75 76 82 83 84 87 88 92 93 95 97 99 103 104 107 108 109 110 113 114 115 118 120 125 127 128 129 130 131 133 134 142 145 147 148 150 151 152 157 160 161 164 165 166 169 170 173 174 180 183 184 189 191 192 193 195 196 197 199 200 204 206 208 209 210 211 214 215 216 219 221 222 223 226 229 233 238 241 244 r 51 247 # 4576 clear_range c a 247 0 1 0 1 2 3 5 6 7 8 9 12 15 17 21 22 24 25 26 27 31 34 35 36 37 38 39 40 41 45 47 48 49 51 52 53 56 60 61 64 66 67 69 70 71 72 76 77 78 79 80 82 86 88 91 92 93 94 95 96 97 98 100 101 105 106 108 109 110 112 113 114 116 117 119 121 124 127 130 134 136 138 139 141 149 152 153 154 155 157 159 162 164 165 166 167 169 173 174 175 176 181 182 186 187 191 192 195 200 201 202 204 205 207 208 209 210 212 213 218 219 220 223 224 225 226 228 230 231 233 235 237 238 240 241 242 243 246 r 0 10 # 4577 clear_range c a 247 1 0 e r 0 247 # 4578 clear_range c a 247 1 0 e r 64 16 # 4579 clear_range c a 247 1 0 e r 150 161 # 4580 clear_range c a 247 1 0 e r 10 247 # 4581 clear_range c a 247 1 0 e r 0 212 # 4582 clear_range c a 247 1 0 f r 0 247 # 4583 clear_range c a 247 1 0 f r 188 129 # 4584 clear_range c a 247 1 0 f r 11 148 # 4585 clear_range c a 247 1 0 f r 146 247 # 4586 clear_range c a 247 1 0 f r 0 244 # 4587 clear_range c a 247 1 0 0 2 3 6 7 9 13 14 15 17 18 19 20 22 26 27 28 29 30 31 34 36 37 39 43 46 47 49 50 52 54 56 57 59 61 62 63 71 72 74 76 77 79 81 85 86 88 89 92 94 96 98 99 100 101 102 103 111 115 117 120 121 123 127 128 130 133 135 138 140 144 149 152 153 157 162 164 165 170 173 174 179 181 184 185 186 188 189 190 194 197 199 203 206 207 208 210 214 217 218 220 221 223 227 229 230 232 236 238 239 240 241 244 246 r 0 247 # 4588 clear_range c a 247 1 0 1 2 4 6 7 8 10 13 15 16 19 22 23 25 28 31 33 38 40 41 42 44 45 51 52 54 57 58 59 61 62 63 64 68 70 71 74 75 79 80 81 82 83 86 87 89 90 91 92 93 94 95 101 102 103 105 106 107 110 111 113 114 115 117 119 122 124 125 126 128 135 137 138 139 141 142 147 149 151 152 154 155 156 157 159 161 165 167 168 169 171 172 176 177 178 179 182 184 185 187 188 189 190 191 195 196 197 199 200 201 202 206 207 208 209 210 213 214 215 218 223 224 225 227 229 232 234 242 244 245 r 119 88 # 4589 clear_range c a 247 1 0 1 2 3 4 7 8 11 12 14 15 19 21 22 23 24 26 27 28 32 34 35 36 38 39 40 41 42 45 47 48 49 52 55 56 57 58 59 64 68 69 72 73 74 76 79 81 91 92 94 95 96 102 105 106 109 110 111 112 115 116 117 122 124 125 127 132 134 138 139 141 142 144 147 150 151 152 153 155 156 158 160 161 162 163 168 172 173 174 175 177 178 181 184 187 188 190 191 193 194 198 200 202 203 206 210 211 215 216 217 218 219 221 222 225 226 227 229 230 231 233 234 238 239 240 241 242 r 9 16 # 4590 clear_range c a 247 1 0 0 1 3 5 8 9 11 12 15 17 18 19 20 21 22 23 25 26 27 29 30 32 34 41 45 46 47 49 52 54 57 58 60 61 62 63 65 66 67 68 73 75 76 78 87 93 95 96 98 99 100 102 108 109 113 114 115 119 120 121 124 125 128 131 132 134 136 139 141 144 145 149 151 153 156 158 159 160 161 166 167 168 170 171 173 176 177 178 183 187 188 189 190 191 192 196 197 201 204 205 206 207 208 212 215 216 218 219 221 222 224 225 226 227 228 229 232 233 234 235 236 238 240 242 243 244 245 246 r 207 247 # 4591 clear_range c a 247 1 0 1 2 3 14 19 20 23 26 30 31 33 34 35 39 43 44 45 46 53 55 56 60 62 63 64 65 66 68 69 70 78 79 81 83 84 85 86 87 88 90 91 93 94 96 98 99 101 103 104 108 110 115 116 118 119 121 122 123 124 128 132 135 136 137 139 142 151 152 154 155 156 159 160 163 164 165 166 167 168 169 170 171 173 175 176 177 181 184 186 187 188 191 192 193 195 198 205 208 210 211 216 218 219 225 226 227 229 230 234 236 238 239 240 242 243 244 245 r 0 7 # 4592 clear_range c a 247 1 1 e r 0 247 # 4593 clear_range c a 247 1 1 e r 189 186 # 4594 clear_range c a 247 1 1 e r 8 47 # 4595 clear_range c a 247 1 1 e r 157 247 # 4596 clear_range c a 247 1 1 e r 0 122 # 4597 clear_range c a 247 1 1 f r 0 247 # 4598 clear_range c a 247 1 1 f r 166 118 # 4599 clear_range c a 247 1 1 f r 10 214 # 4600 clear_range c a 247 1 1 f r 91 247 # 4601 clear_range c a 247 1 1 f r 0 210 # 4602 clear_range c a 247 1 1 0 1 3 4 7 8 10 12 17 18 19 20 23 24 26 27 30 36 37 40 41 42 43 47 50 54 56 57 61 65 66 67 69 72 76 80 86 89 92 93 94 96 97 100 101 102 103 105 109 112 113 118 119 127 128 129 131 133 135 136 137 138 142 146 147 149 150 151 152 153 154 162 163 170 171 172 173 176 180 183 188 190 191 192 193 194 198 200 201 203 204 207 208 209 211 212 214 216 217 218 226 229 230 232 234 235 236 240 241 243 245 r 0 247 # 4603 clear_range c a 247 1 1 0 1 2 6 7 8 10 12 13 15 16 18 19 23 25 26 29 32 34 36 37 39 40 42 43 46 48 49 51 52 54 57 59 60 61 62 63 65 69 75 77 80 83 84 85 86 88 95 96 101 102 104 110 111 112 113 114 115 116 117 119 121 123 124 126 127 128 132 134 135 136 137 139 142 145 149 150 151 152 155 156 158 159 162 164 165 168 169 174 178 179 181 183 184 185 186 187 191 192 197 198 199 200 203 204 205 210 212 215 218 219 220 224 225 226 227 229 230 237 238 240 241 242 243 246 r 110 68 # 4604 clear_range c a 247 1 1 0 3 4 5 6 7 8 9 11 12 15 16 17 20 21 24 26 30 32 35 37 38 40 41 45 48 49 50 51 56 57 64 65 68 70 74 75 78 81 83 84 86 87 90 91 92 95 97 99 104 108 110 112 114 115 116 117 118 121 125 128 129 131 133 137 138 140 141 142 143 145 146 147 148 149 154 155 159 161 162 163 164 170 179 180 181 185 195 196 200 201 203 205 207 208 209 210 211 212 213 215 216 217 221 222 225 229 230 232 236 237 238 239 240 241 242 244 r 67 140 # 4605 clear_range c a 247 1 1 0 1 3 4 5 7 9 12 14 15 16 18 21 23 24 25 26 30 37 38 39 40 42 44 45 50 56 58 60 61 64 65 70 72 73 74 76 78 80 81 82 86 89 93 96 97 98 101 104 106 107 109 110 112 113 115 116 120 121 122 124 126 129 130 131 134 137 138 139 141 144 145 147 148 151 153 155 163 166 167 168 169 170 172 174 175 176 177 179 181 182 183 184 186 187 188 193 194 195 196 197 198 199 200 201 203 206 211 212 215 216 218 219 222 223 224 225 226 227 228 229 230 231 232 234 236 237 239 240 241 242 243 244 246 r 1 247 # 4606 clear_range c a 247 1 1 3 4 6 7 9 10 12 13 15 19 21 22 25 28 29 33 38 39 41 45 47 49 50 53 54 55 57 60 61 62 66 67 68 69 73 74 75 78 79 83 85 86 87 88 91 92 96 99 100 101 107 108 110 111 112 113 114 115 116 118 119 120 121 122 123 127 128 130 131 133 135 137 138 139 140 142 143 145 146 151 154 155 156 157 158 159 163 165 167 170 172 173 177 178 179 182 183 184 186 187 191 192 193 194 196 201 202 204 205 208 210 213 218 219 220 222 223 228 237 242 243 246 r 0 131 # 4607 clear_range c a 0 0 0 e r 0 0 # 4608 fill_range c a 0 0 0 e r 0 0 # 4609 fill_range c a 0 0 0 e r 0 0 # 4610 fill_range c a 0 0 0 e r 0 0 # 4611 fill_range c a 0 0 0 e r 0 0 # 4612 fill_range c a 0 0 0 e r 0 0 # 4613 fill_range c a 0 0 0 e r 0 0 # 4614 fill_range c a 0 0 0 e r 0 0 # 4615 fill_range c a 0 0 0 e r 0 0 # 4616 fill_range c a 0 0 0 e r 0 0 # 4617 fill_range c a 0 0 0 r 0 0 # 4618 fill_range c a 0 0 0 r 0 0 # 4619 fill_range c a 0 0 0 r 0 0 # 4620 fill_range c a 0 0 0 r 0 0 # 4621 fill_range c a 0 0 0 r 0 0 # 4622 fill_range c a 0 0 1 e r 0 0 # 4623 fill_range c a 0 0 1 e r 0 0 # 4624 fill_range c a 0 0 1 e r 0 0 # 4625 fill_range c a 0 0 1 e r 0 0 # 4626 fill_range c a 0 0 1 e r 0 0 # 4627 fill_range c a 0 0 1 e r 0 0 # 4628 fill_range c a 0 0 1 e r 0 0 # 4629 fill_range c a 0 0 1 e r 0 0 # 4630 fill_range c a 0 0 1 e r 0 0 # 4631 fill_range c a 0 0 1 e r 0 0 # 4632 fill_range c a 0 0 1 r 0 0 # 4633 fill_range c a 0 0 1 r 0 0 # 4634 fill_range c a 0 0 1 r 0 0 # 4635 fill_range c a 0 0 1 r 0 0 # 4636 fill_range c a 0 0 1 r 0 0 # 4637 fill_range c a 0 1 0 e r 0 0 # 4638 fill_range c a 0 1 0 e r 0 0 # 4639 fill_range c a 0 1 0 e r 0 0 # 4640 fill_range c a 0 1 0 e r 0 0 # 4641 fill_range c a 0 1 0 e r 0 0 # 4642 fill_range c a 0 1 0 e r 0 0 # 4643 fill_range c a 0 1 0 e r 0 0 # 4644 fill_range c a 0 1 0 e r 0 0 # 4645 fill_range c a 0 1 0 e r 0 0 # 4646 fill_range c a 0 1 0 e r 0 0 # 4647 fill_range c a 0 1 0 r 0 0 # 4648 fill_range c a 0 1 0 r 0 0 # 4649 fill_range c a 0 1 0 r 0 0 # 4650 fill_range c a 0 1 0 r 0 0 # 4651 fill_range c a 0 1 0 r 0 0 # 4652 fill_range c a 0 1 1 e r 0 0 # 4653 fill_range c a 0 1 1 e r 0 0 # 4654 fill_range c a 0 1 1 e r 0 0 # 4655 fill_range c a 0 1 1 e r 0 0 # 4656 fill_range c a 0 1 1 e r 0 0 # 4657 fill_range c a 0 1 1 e r 0 0 # 4658 fill_range c a 0 1 1 e r 0 0 # 4659 fill_range c a 0 1 1 e r 0 0 # 4660 fill_range c a 0 1 1 e r 0 0 # 4661 fill_range c a 0 1 1 e r 0 0 # 4662 fill_range c a 0 1 1 r 0 0 # 4663 fill_range c a 0 1 1 r 0 0 # 4664 fill_range c a 0 1 1 r 0 0 # 4665 fill_range c a 0 1 1 r 0 0 # 4666 fill_range c a 0 1 1 r 0 0 # 4667 fill_range c a 1 0 0 e r 0 1 # 4668 fill_range c a 1 0 0 e r 0 0 # 4669 fill_range c a 1 0 0 e r 0 1 # 4670 fill_range c a 1 0 0 e r 0 1 # 4671 fill_range c a 1 0 0 e r 0 0 # 4672 fill_range c a 1 0 0 f r 0 1 # 4673 fill_range c a 1 0 0 f r 0 0 # 4674 fill_range c a 1 0 0 f r 0 0 # 4675 fill_range c a 1 0 0 f r 0 1 # 4676 fill_range c a 1 0 0 f r 0 0 # 4677 fill_range c a 1 0 0 0 r 0 1 # 4678 fill_range c a 1 0 0 0 r 1 0 # 4679 fill_range c a 1 0 0 0 r 0 1 # 4680 fill_range c a 1 0 0 0 r 0 1 # 4681 fill_range c a 1 0 0 r 0 0 # 4682 fill_range c a 1 0 1 e r 0 1 # 4683 fill_range c a 1 0 1 e r 0 0 # 4684 fill_range c a 1 0 1 e r 0 1 # 4685 fill_range c a 1 0 1 e r 0 1 # 4686 fill_range c a 1 0 1 e r 0 1 # 4687 fill_range c a 1 0 1 f r 0 1 # 4688 fill_range c a 1 0 1 f r 0 0 # 4689 fill_range c a 1 0 1 f r 0 1 # 4690 fill_range c a 1 0 1 f r 0 1 # 4691 fill_range c a 1 0 1 f r 0 1 # 4692 fill_range c a 1 0 1 r 0 1 # 4693 fill_range c a 1 0 1 0 r 1 0 # 4694 fill_range c a 1 0 1 0 r 0 0 # 4695 fill_range c a 1 0 1 r 0 1 # 4696 fill_range c a 1 0 1 r 0 0 # 4697 fill_range c a 1 1 0 e r 0 1 # 4698 fill_range c a 1 1 0 e r 0 0 # 4699 fill_range c a 1 1 0 e r 0 1 # 4700 fill_range c a 1 1 0 e r 0 1 # 4701 fill_range c a 1 1 0 e r 0 1 # 4702 fill_range c a 1 1 0 f r 0 1 # 4703 fill_range c a 1 1 0 f r 1 0 # 4704 fill_range c a 1 1 0 f r 0 1 # 4705 fill_range c a 1 1 0 f r 0 1 # 4706 fill_range c a 1 1 0 f r 0 0 # 4707 fill_range c a 1 1 0 0 r 0 1 # 4708 fill_range c a 1 1 0 r 0 0 # 4709 fill_range c a 1 1 0 0 r 0 1 # 4710 fill_range c a 1 1 0 r 0 1 # 4711 fill_range c a 1 1 0 0 r 0 1 # 4712 fill_range c a 1 1 1 e r 0 1 # 4713 fill_range c a 1 1 1 e r 1 0 # 4714 fill_range c a 1 1 1 e r 0 1 # 4715 fill_range c a 1 1 1 e r 0 1 # 4716 fill_range c a 1 1 1 e r 0 0 # 4717 fill_range c a 1 1 1 f r 0 1 # 4718 fill_range c a 1 1 1 f r 1 0 # 4719 fill_range c a 1 1 1 f r 0 1 # 4720 fill_range c a 1 1 1 f r 0 1 # 4721 fill_range c a 1 1 1 f r 0 1 # 4722 fill_range c a 1 1 1 r 0 1 # 4723 fill_range c a 1 1 1 r 0 0 # 4724 fill_range c a 1 1 1 0 r 0 1 # 4725 fill_range c a 1 1 1 r 0 1 # 4726 fill_range c a 1 1 1 r 0 1 # 4727 fill_range c a 31 0 0 e r 0 31 # 4728 fill_range c a 31 0 0 e r 18 14 # 4729 fill_range c a 31 0 0 e r 0 2 # 4730 fill_range c a 31 0 0 e r 5 31 # 4731 fill_range c a 31 0 0 e r 0 1 # 4732 fill_range c a 31 0 0 f r 0 31 # 4733 fill_range c a 31 0 0 f r 2 0 # 4734 fill_range c a 31 0 0 f r 26 30 # 4735 fill_range c a 31 0 0 f r 11 31 # 4736 fill_range c a 31 0 0 f r 0 1 # 4737 fill_range c a 31 0 0 0 1 2 3 7 8 9 13 15 21 23 28 30 r 0 31 # 4738 fill_range c a 31 0 0 0 3 5 8 9 10 13 16 17 18 21 25 26 28 r 8 3 # 4739 fill_range c a 31 0 0 0 1 2 3 4 7 8 9 11 13 14 16 17 18 21 22 24 26 27 29 r 0 9 # 4740 fill_range c a 31 0 0 1 3 6 8 11 13 14 18 20 21 24 26 27 28 29 r 5 31 # 4741 fill_range c a 31 0 0 0 1 2 5 6 12 13 14 18 r 0 9 # 4742 fill_range c a 31 0 1 e r 0 31 # 4743 fill_range c a 31 0 1 e r 23 7 # 4744 fill_range c a 31 0 1 e r 1 2 # 4745 fill_range c a 31 0 1 e r 13 31 # 4746 fill_range c a 31 0 1 e r 0 27 # 4747 fill_range c a 31 0 1 f r 0 31 # 4748 fill_range c a 31 0 1 f r 26 1 # 4749 fill_range c a 31 0 1 f r 2 22 # 4750 fill_range c a 31 0 1 f r 9 31 # 4751 fill_range c a 31 0 1 f r 0 0 # 4752 fill_range c a 31 0 1 0 1 7 9 11 16 17 18 22 24 26 27 29 r 0 31 # 4753 fill_range c a 31 0 1 1 2 3 4 5 7 10 14 15 18 19 20 25 27 r 14 12 # 4754 fill_range c a 31 0 1 1 2 4 5 6 8 10 12 13 14 19 20 22 23 24 25 27 30 r 9 10 # 4755 fill_range c a 31 0 1 0 1 3 4 7 9 10 11 15 16 18 21 22 25 26 27 28 r 7 31 # 4756 fill_range c a 31 0 1 2 4 8 12 13 16 18 21 23 24 26 27 28 30 r 0 11 # 4757 fill_range c a 31 1 0 e r 0 31 # 4758 fill_range c a 31 1 0 e r 28 9 # 4759 fill_range c a 31 1 0 e r 0 27 # 4760 fill_range c a 31 1 0 e r 19 31 # 4761 fill_range c a 31 1 0 e r 0 8 # 4762 fill_range c a 31 1 0 f r 0 31 # 4763 fill_range c a 31 1 0 f r 14 10 # 4764 fill_range c a 31 1 0 f r 1 6 # 4765 fill_range c a 31 1 0 f r 21 31 # 4766 fill_range c a 31 1 0 f r 0 8 # 4767 fill_range c a 31 1 0 0 1 3 5 7 8 9 10 12 13 15 16 17 18 19 26 28 30 r 0 31 # 4768 fill_range c a 31 1 0 0 1 3 6 7 8 9 10 12 14 17 21 22 28 29 r 28 8 # 4769 fill_range c a 31 1 0 0 2 3 5 6 8 10 14 15 16 17 19 20 21 23 25 26 27 29 30 r 17 20 # 4770 fill_range c a 31 1 0 0 1 2 3 4 5 8 9 10 13 16 19 20 22 25 26 27 28 29 r 1 31 # 4771 fill_range c a 31 1 0 0 1 3 4 5 7 9 11 12 13 15 17 20 22 30 r 0 20 # 4772 fill_range c a 31 1 1 e r 0 31 # 4773 fill_range c a 31 1 1 e r 3 0 # 4774 fill_range c a 31 1 1 e r 17 22 # 4775 fill_range c a 31 1 1 e r 16 31 # 4776 fill_range c a 31 1 1 e r 0 10 # 4777 fill_range c a 31 1 1 f r 0 31 # 4778 fill_range c a 31 1 1 f r 3 2 # 4779 fill_range c a 31 1 1 f r 10 20 # 4780 fill_range c a 31 1 1 f r 12 31 # 4781 fill_range c a 31 1 1 f r 0 0 # 4782 fill_range c a 31 1 1 0 1 5 6 10 11 12 13 17 19 20 21 23 24 25 26 27 28 30 r 0 31 # 4783 fill_range c a 31 1 1 0 1 7 8 9 10 11 12 13 14 15 17 20 22 23 25 26 28 29 30 r 26 22 # 4784 fill_range c a 31 1 1 9 10 11 12 13 15 18 21 22 23 25 26 28 r 5 11 # 4785 fill_range c a 31 1 1 0 1 4 6 7 9 10 12 13 14 16 18 19 20 21 23 25 26 27 30 r 12 31 # 4786 fill_range c a 31 1 1 0 1 2 3 6 7 9 12 14 15 18 21 23 24 26 27 28 r 0 26 # 4787 fill_range c a 32 0 0 e r 0 32 # 4788 fill_range c a 32 0 0 e r 21 19 # 4789 fill_range c a 32 0 0 e r 14 21 # 4790 fill_range c a 32 0 0 e r 21 32 # 4791 fill_range c a 32 0 0 e r 0 16 # 4792 fill_range c a 32 0 0 f r 0 32 # 4793 fill_range c a 32 0 0 f r 20 4 # 4794 fill_range c a 32 0 0 f r 15 18 # 4795 fill_range c a 32 0 0 f r 26 32 # 4796 fill_range c a 32 0 0 f r 0 31 # 4797 fill_range c a 32 0 0 0 1 2 6 12 13 19 21 22 23 24 25 26 29 r 0 32 # 4798 fill_range c a 32 0 0 1 3 7 14 15 16 17 18 20 21 23 24 28 30 r 23 13 # 4799 fill_range c a 32 0 0 1 4 5 6 10 11 13 14 17 19 20 22 23 24 25 27 29 30 31 r 4 15 # 4800 fill_range c a 32 0 0 1 5 6 7 8 10 11 12 13 14 16 18 19 21 22 23 26 28 29 30 r 30 32 # 4801 fill_range c a 32 0 0 6 8 9 11 14 15 19 25 28 29 r 0 20 # 4802 fill_range c a 32 0 1 e r 0 32 # 4803 fill_range c a 32 0 1 e r 25 23 # 4804 fill_range c a 32 0 1 e r 0 17 # 4805 fill_range c a 32 0 1 e r 30 32 # 4806 fill_range c a 32 0 1 e r 0 19 # 4807 fill_range c a 32 0 1 f r 0 32 # 4808 fill_range c a 32 0 1 f r 1 0 # 4809 fill_range c a 32 0 1 f r 0 2 # 4810 fill_range c a 32 0 1 f r 2 32 # 4811 fill_range c a 32 0 1 f r 0 23 # 4812 fill_range c a 32 0 1 0 1 2 5 7 9 13 17 20 21 24 26 29 30 31 r 0 32 # 4813 fill_range c a 32 0 1 0 1 4 5 8 9 10 12 17 18 20 21 22 23 25 28 31 r 15 4 # 4814 fill_range c a 32 0 1 3 4 6 7 9 11 13 14 15 16 17 18 19 20 24 28 29 30 r 8 21 # 4815 fill_range c a 32 0 1 0 1 2 3 7 9 12 15 18 19 21 22 23 24 25 26 27 29 r 1 32 # 4816 fill_range c a 32 0 1 1 2 5 6 9 10 11 13 14 16 17 18 20 21 23 24 26 28 30 r 0 22 # 4817 fill_range c a 32 1 0 e r 0 32 # 4818 fill_range c a 32 1 0 e r 6 2 # 4819 fill_range c a 32 1 0 e r 7 19 # 4820 fill_range c a 32 1 0 e r 27 32 # 4821 fill_range c a 32 1 0 e r 0 3 # 4822 fill_range c a 32 1 0 f r 0 32 # 4823 fill_range c a 32 1 0 f r 20 13 # 4824 fill_range c a 32 1 0 f r 11 13 # 4825 fill_range c a 32 1 0 f r 28 32 # 4826 fill_range c a 32 1 0 f r 0 1 # 4827 fill_range c a 32 1 0 0 5 9 10 11 12 14 20 26 28 29 30 31 r 0 32 # 4828 fill_range c a 32 1 0 0 7 10 12 13 14 18 22 23 25 26 29 r 7 1 # 4829 fill_range c a 32 1 0 0 1 2 4 6 7 8 9 10 11 14 21 22 27 28 29 31 r 2 29 # 4830 fill_range c a 32 1 0 0 1 2 3 4 5 7 9 10 12 14 16 19 21 23 24 27 28 31 r 8 32 # 4831 fill_range c a 32 1 0 0 1 2 3 7 9 10 11 12 14 15 16 19 20 22 23 24 25 26 27 28 29 30 31 r 0 24 # 4832 fill_range c a 32 1 1 e r 0 32 # 4833 fill_range c a 32 1 1 e r 13 7 # 4834 fill_range c a 32 1 1 e r 7 13 # 4835 fill_range c a 32 1 1 e r 30 32 # 4836 fill_range c a 32 1 1 e r 0 3 # 4837 fill_range c a 32 1 1 f r 0 32 # 4838 fill_range c a 32 1 1 f r 6 2 # 4839 fill_range c a 32 1 1 f r 22 30 # 4840 fill_range c a 32 1 1 f r 15 32 # 4841 fill_range c a 32 1 1 f r 0 11 # 4842 fill_range c a 32 1 1 3 4 6 9 10 11 12 13 14 15 16 17 19 20 22 23 25 29 30 31 r 0 32 # 4843 fill_range c a 32 1 1 2 4 5 6 9 12 14 15 19 20 22 26 27 29 30 31 r 14 0 # 4844 fill_range c a 32 1 1 3 4 5 6 7 14 15 17 25 27 29 30 31 r 9 15 # 4845 fill_range c a 32 1 1 0 1 4 6 8 10 12 18 19 20 21 22 23 24 26 27 28 29 30 31 r 20 32 # 4846 fill_range c a 32 1 1 2 3 8 9 13 14 15 17 23 26 r 0 24 # 4847 fill_range c a 33 0 0 e r 0 33 # 4848 fill_range c a 33 0 0 e r 9 6 # 4849 fill_range c a 33 0 0 e r 13 18 # 4850 fill_range c a 33 0 0 e r 0 33 # 4851 fill_range c a 33 0 0 e r 0 27 # 4852 fill_range c a 33 0 0 f r 0 33 # 4853 fill_range c a 33 0 0 f r 9 6 # 4854 fill_range c a 33 0 0 f r 0 4 # 4855 fill_range c a 33 0 0 f r 14 33 # 4856 fill_range c a 33 0 0 f r 0 2 # 4857 fill_range c a 33 0 0 1 5 6 7 10 14 15 19 24 25 26 27 29 30 31 32 r 0 33 # 4858 fill_range c a 33 0 0 0 2 3 4 5 6 8 10 11 16 18 26 29 30 32 r 18 8 # 4859 fill_range c a 33 0 0 0 1 2 8 9 10 12 16 18 19 20 22 23 26 27 29 30 32 r 6 10 # 4860 fill_range c a 33 0 0 3 4 5 6 8 9 11 12 13 14 15 16 17 19 21 22 25 26 27 29 30 31 32 r 28 33 # 4861 fill_range c a 33 0 0 1 5 7 8 9 10 11 12 14 19 21 22 24 27 28 30 r 0 19 # 4862 fill_range c a 33 0 1 e r 0 33 # 4863 fill_range c a 33 0 1 e r 16 9 # 4864 fill_range c a 33 0 1 e r 1 11 # 4865 fill_range c a 33 0 1 e r 11 33 # 4866 fill_range c a 33 0 1 e r 0 17 # 4867 fill_range c a 33 0 1 f r 0 33 # 4868 fill_range c a 33 0 1 f r 24 22 # 4869 fill_range c a 33 0 1 f r 6 22 # 4870 fill_range c a 33 0 1 f r 26 33 # 4871 fill_range c a 33 0 1 f r 0 24 # 4872 fill_range c a 33 0 1 0 1 2 4 6 8 9 10 13 17 18 19 21 22 25 28 29 30 31 32 r 0 33 # 4873 fill_range c a 33 0 1 0 1 4 5 7 8 9 13 14 15 17 20 21 22 23 25 28 30 31 r 9 2 # 4874 fill_range c a 33 0 1 2 3 5 7 8 9 11 15 16 17 18 19 21 24 27 28 29 31 r 17 27 # 4875 fill_range c a 33 0 1 0 1 4 6 7 8 11 15 19 20 21 23 26 28 31 r 12 33 # 4876 fill_range c a 33 0 1 2 5 9 10 11 12 15 18 19 20 23 24 28 30 32 r 0 0 # 4877 fill_range c a 33 1 0 e r 0 33 # 4878 fill_range c a 33 1 0 e r 25 4 # 4879 fill_range c a 33 1 0 e r 24 30 # 4880 fill_range c a 33 1 0 e r 10 33 # 4881 fill_range c a 33 1 0 e r 0 33 # 4882 fill_range c a 33 1 0 f r 0 33 # 4883 fill_range c a 33 1 0 f r 28 15 # 4884 fill_range c a 33 1 0 f r 12 13 # 4885 fill_range c a 33 1 0 f r 12 33 # 4886 fill_range c a 33 1 0 f r 0 9 # 4887 fill_range c a 33 1 0 1 2 5 7 8 10 11 13 19 22 23 26 27 28 r 0 33 # 4888 fill_range c a 33 1 0 0 1 2 3 10 12 14 16 22 23 26 27 28 30 31 32 r 26 25 # 4889 fill_range c a 33 1 0 2 3 4 6 10 11 16 20 21 30 31 r 5 6 # 4890 fill_range c a 33 1 0 4 8 9 10 12 16 20 21 22 23 26 28 30 31 32 r 0 33 # 4891 fill_range c a 33 1 0 3 4 6 7 9 10 11 12 13 17 20 21 22 23 27 29 30 31 r 0 25 # 4892 fill_range c a 33 1 1 e r 0 33 # 4893 fill_range c a 33 1 1 e r 14 7 # 4894 fill_range c a 33 1 1 e r 8 22 # 4895 fill_range c a 33 1 1 e r 25 33 # 4896 fill_range c a 33 1 1 e r 0 23 # 4897 fill_range c a 33 1 1 f r 0 33 # 4898 fill_range c a 33 1 1 f r 10 1 # 4899 fill_range c a 33 1 1 f r 0 27 # 4900 fill_range c a 33 1 1 f r 26 33 # 4901 fill_range c a 33 1 1 f r 0 25 # 4902 fill_range c a 33 1 1 1 3 6 7 9 12 13 15 16 17 19 22 23 25 26 27 31 32 r 0 33 # 4903 fill_range c a 33 1 1 0 8 9 11 14 16 17 18 19 20 21 24 26 27 29 30 r 13 9 # 4904 fill_range c a 33 1 1 2 3 5 6 7 10 11 12 14 15 17 19 21 22 28 29 30 r 22 26 # 4905 fill_range c a 33 1 1 1 2 9 12 14 15 16 20 21 22 24 27 28 30 r 15 33 # 4906 fill_range c a 33 1 1 0 1 3 6 7 8 9 10 13 14 15 16 17 18 19 20 21 24 25 27 29 30 31 r 0 20 # 4907 fill_range c a 63 0 0 e r 0 63 # 4908 fill_range c a 63 0 0 e r 46 32 # 4909 fill_range c a 63 0 0 e r 4 15 # 4910 fill_range c a 63 0 0 e r 48 63 # 4911 fill_range c a 63 0 0 e r 0 5 # 4912 fill_range c a 63 0 0 f r 0 63 # 4913 fill_range c a 63 0 0 f r 55 44 # 4914 fill_range c a 63 0 0 f r 0 2 # 4915 fill_range c a 63 0 0 f r 44 63 # 4916 fill_range c a 63 0 0 f r 0 34 # 4917 fill_range c a 63 0 0 0 3 4 6 8 14 15 18 23 24 25 28 31 32 33 34 35 38 39 40 44 48 50 51 52 53 54 56 57 58 r 0 63 # 4918 fill_range c a 63 0 0 1 2 3 6 11 12 13 14 18 20 21 24 28 29 31 32 34 35 36 37 41 47 53 54 56 59 61 62 r 58 27 # 4919 fill_range c a 63 0 0 0 1 3 5 6 7 12 14 16 18 19 21 22 23 30 31 34 37 39 40 41 43 46 48 49 52 53 58 59 60 61 62 r 47 52 # 4920 fill_range c a 63 0 0 2 4 7 8 9 11 12 13 14 15 17 21 22 23 31 32 34 35 36 38 46 47 50 53 55 57 58 r 4 63 # 4921 fill_range c a 63 0 0 0 6 7 8 10 12 13 14 15 17 19 20 21 23 27 28 29 30 31 32 40 47 49 52 53 57 58 61 r 0 47 # 4922 fill_range c a 63 0 1 e r 0 63 # 4923 fill_range c a 63 0 1 e r 57 15 # 4924 fill_range c a 63 0 1 e r 38 54 # 4925 fill_range c a 63 0 1 e r 25 63 # 4926 fill_range c a 63 0 1 e r 0 35 # 4927 fill_range c a 63 0 1 f r 0 63 # 4928 fill_range c a 63 0 1 f r 40 23 # 4929 fill_range c a 63 0 1 f r 9 25 # 4930 fill_range c a 63 0 1 f r 30 63 # 4931 fill_range c a 63 0 1 f r 0 30 # 4932 fill_range c a 63 0 1 0 5 6 8 9 12 14 18 19 20 21 24 26 28 29 31 33 35 36 39 41 43 47 49 52 53 54 55 57 60 r 0 63 # 4933 fill_range c a 63 0 1 2 4 7 10 14 16 17 18 19 21 22 27 29 34 38 39 41 43 47 48 49 50 52 53 54 55 58 61 62 r 13 0 # 4934 fill_range c a 63 0 1 0 1 2 3 4 5 7 10 12 13 15 16 17 19 20 22 23 29 36 37 38 41 42 43 44 46 47 50 51 52 53 54 55 59 60 61 62 r 28 47 # 4935 fill_range c a 63 0 1 1 2 3 4 7 8 10 12 13 18 21 23 26 27 30 32 33 35 37 40 43 44 45 50 51 54 59 60 r 31 63 # 4936 fill_range c a 63 0 1 1 3 5 6 13 14 15 16 18 20 21 22 26 27 28 30 32 34 37 38 42 43 46 48 49 51 52 54 55 57 58 61 r 0 63 # 4937 fill_range c a 63 1 0 e r 0 63 # 4938 fill_range c a 63 1 0 e r 18 7 # 4939 fill_range c a 63 1 0 e r 15 36 # 4940 fill_range c a 63 1 0 e r 28 63 # 4941 fill_range c a 63 1 0 e r 0 60 # 4942 fill_range c a 63 1 0 f r 0 63 # 4943 fill_range c a 63 1 0 f r 50 14 # 4944 fill_range c a 63 1 0 f r 1 3 # 4945 fill_range c a 63 1 0 f r 3 63 # 4946 fill_range c a 63 1 0 f r 0 7 # 4947 fill_range c a 63 1 0 0 1 2 3 4 6 7 9 10 11 12 13 15 17 21 22 23 24 26 27 28 29 31 32 34 35 37 39 42 44 48 50 53 54 57 61 r 0 63 # 4948 fill_range c a 63 1 0 1 3 5 9 11 12 13 14 16 19 20 21 22 25 30 33 35 36 37 40 41 46 48 49 51 52 54 56 58 60 62 r 24 11 # 4949 fill_range c a 63 1 0 1 4 5 6 7 16 17 19 20 22 27 28 32 33 35 36 38 39 40 41 45 48 49 51 60 62 r 11 34 # 4950 fill_range c a 63 1 0 1 2 3 5 6 9 10 14 17 19 20 21 25 27 29 30 31 32 33 36 38 41 42 43 44 45 46 54 55 59 r 56 63 # 4951 fill_range c a 63 1 0 1 5 6 8 9 11 15 16 20 22 24 26 27 28 30 34 35 37 39 40 42 44 45 49 50 53 54 55 57 58 61 62 r 0 40 # 4952 fill_range c a 63 1 1 e r 0 63 # 4953 fill_range c a 63 1 1 e r 37 21 # 4954 fill_range c a 63 1 1 e r 15 35 # 4955 fill_range c a 63 1 1 e r 2 63 # 4956 fill_range c a 63 1 1 e r 0 10 # 4957 fill_range c a 63 1 1 f r 0 63 # 4958 fill_range c a 63 1 1 f r 43 14 # 4959 fill_range c a 63 1 1 f r 48 57 # 4960 fill_range c a 63 1 1 f r 5 63 # 4961 fill_range c a 63 1 1 f r 0 52 # 4962 fill_range c a 63 1 1 1 3 4 7 8 9 10 12 13 15 16 18 20 22 23 24 29 31 32 33 35 36 37 38 39 40 41 44 45 47 48 50 51 53 54 56 57 58 60 61 r 0 63 # 4963 fill_range c a 63 1 1 0 1 2 3 4 7 10 11 12 13 15 16 18 19 20 27 32 33 35 37 39 40 43 45 46 47 50 52 54 56 57 61 62 r 39 35 # 4964 fill_range c a 63 1 1 0 1 3 5 6 7 9 15 16 17 18 22 24 26 27 28 29 31 32 33 34 36 41 43 44 45 46 47 48 49 54 58 r 32 47 # 4965 fill_range c a 63 1 1 1 2 3 6 8 9 11 17 19 21 23 24 25 29 32 36 38 40 41 45 46 47 51 52 53 54 55 58 59 r 38 63 # 4966 fill_range c a 63 1 1 0 2 3 4 5 7 8 11 13 14 15 18 20 21 22 25 27 32 35 36 39 40 41 42 44 46 47 48 49 51 55 59 60 61 r 0 22 # 4967 fill_range c a 64 0 0 e r 0 64 # 4968 fill_range c a 64 0 0 e r 36 3 # 4969 fill_range c a 64 0 0 e r 0 0 # 4970 fill_range c a 64 0 0 e r 14 64 # 4971 fill_range c a 64 0 0 e r 0 32 # 4972 fill_range c a 64 0 0 f r 0 64 # 4973 fill_range c a 64 0 0 f r 56 30 # 4974 fill_range c a 64 0 0 f r 42 59 # 4975 fill_range c a 64 0 0 f r 53 64 # 4976 fill_range c a 64 0 0 f r 0 12 # 4977 fill_range c a 64 0 0 0 2 3 4 5 9 13 20 21 23 26 28 30 31 33 36 37 38 39 40 43 44 45 50 55 56 58 61 63 r 0 64 # 4978 fill_range c a 64 0 0 0 1 4 8 9 11 12 13 15 19 20 24 26 32 33 34 35 39 41 42 43 45 46 47 51 52 53 58 59 60 61 63 r 53 18 # 4979 fill_range c a 64 0 0 1 3 4 7 9 10 12 13 14 16 20 21 22 23 24 25 26 27 30 31 34 36 41 42 43 44 47 48 51 54 55 58 59 60 61 62 r 31 32 # 4980 fill_range c a 64 0 0 0 1 2 5 7 8 14 15 17 20 22 23 25 26 27 37 40 41 46 47 52 53 55 56 58 59 63 r 22 64 # 4981 fill_range c a 64 0 0 0 2 4 7 8 9 11 12 15 18 20 21 23 24 30 33 34 38 39 40 42 43 46 47 48 53 55 56 57 62 63 r 0 61 # 4982 fill_range c a 64 0 1 e r 0 64 # 4983 fill_range c a 64 0 1 e r 47 30 # 4984 fill_range c a 64 0 1 e r 1 5 # 4985 fill_range c a 64 0 1 e r 4 64 # 4986 fill_range c a 64 0 1 e r 0 26 # 4987 fill_range c a 64 0 1 f r 0 64 # 4988 fill_range c a 64 0 1 f r 41 15 # 4989 fill_range c a 64 0 1 f r 4 5 # 4990 fill_range c a 64 0 1 f r 50 64 # 4991 fill_range c a 64 0 1 f r 0 4 # 4992 fill_range c a 64 0 1 1 3 5 6 7 9 10 14 18 19 24 26 28 30 31 34 37 39 40 43 44 48 50 54 56 60 r 0 64 # 4993 fill_range c a 64 0 1 0 2 4 7 8 9 10 11 14 15 17 19 21 25 26 30 34 36 41 47 49 50 51 52 53 54 56 57 58 59 60 r 14 10 # 4994 fill_range c a 64 0 1 0 1 8 10 13 15 16 17 18 19 21 23 24 27 28 30 31 36 38 39 40 41 44 51 52 53 54 55 58 60 61 63 r 23 46 # 4995 fill_range c a 64 0 1 1 2 5 7 9 13 14 15 17 21 24 26 29 30 31 32 33 36 38 39 43 44 46 48 50 52 54 55 57 59 60 61 r 12 64 # 4996 fill_range c a 64 0 1 0 1 4 6 7 8 9 10 15 17 18 21 22 24 25 26 27 30 31 35 36 37 38 39 40 41 42 46 47 48 49 54 56 57 r 0 36 # 4997 fill_range c a 64 1 0 e r 0 64 # 4998 fill_range c a 64 1 0 e r 23 9 # 4999 fill_range c a 64 1 0 e r 13 35 # 5000 fill_range c a 64 1 0 e r 37 64 # 5001 fill_range c a 64 1 0 e r 0 55 # 5002 fill_range c a 64 1 0 f r 0 64 # 5003 fill_range c a 64 1 0 f r 22 1 # 5004 fill_range c a 64 1 0 f r 1 2 # 5005 fill_range c a 64 1 0 f r 28 64 # 5006 fill_range c a 64 1 0 f r 0 26 # 5007 fill_range c a 64 1 0 1 4 5 6 12 15 16 17 21 22 23 24 25 27 30 31 36 37 41 42 43 46 47 51 53 54 55 56 58 60 61 63 r 0 64 # 5008 fill_range c a 64 1 0 0 1 3 4 5 7 10 11 13 14 15 17 19 20 22 23 29 32 37 39 40 47 49 50 52 56 57 58 60 61 r 61 18 # 5009 fill_range c a 64 1 0 0 1 6 7 8 14 16 17 18 19 21 22 24 28 29 31 33 35 38 40 44 46 51 56 58 59 61 62 63 r 10 17 # 5010 fill_range c a 64 1 0 0 1 2 3 5 6 7 9 11 13 15 16 17 18 19 20 21 23 25 26 34 35 36 37 40 41 43 45 46 49 53 55 57 59 61 63 r 34 64 # 5011 fill_range c a 64 1 0 1 2 6 7 9 12 13 14 16 18 19 21 26 27 29 30 31 32 33 34 35 37 38 39 40 42 43 45 48 50 54 57 59 60 62 63 r 0 58 # 5012 fill_range c a 64 1 1 e r 0 64 # 5013 fill_range c a 64 1 1 e r 15 6 # 5014 fill_range c a 64 1 1 e r 11 53 # 5015 fill_range c a 64 1 1 e r 10 64 # 5016 fill_range c a 64 1 1 e r 0 30 # 5017 fill_range c a 64 1 1 f r 0 64 # 5018 fill_range c a 64 1 1 f r 8 5 # 5019 fill_range c a 64 1 1 f r 50 55 # 5020 fill_range c a 64 1 1 f r 63 64 # 5021 fill_range c a 64 1 1 f r 0 2 # 5022 fill_range c a 64 1 1 0 1 3 4 5 7 8 9 11 14 15 19 21 22 23 27 28 29 31 34 37 39 40 41 42 43 46 48 49 52 56 59 61 63 r 0 64 # 5023 fill_range c a 64 1 1 2 7 8 10 12 13 14 15 16 18 19 24 25 26 27 30 31 32 33 35 36 37 38 39 40 41 43 44 45 51 52 54 57 59 r 13 6 # 5024 fill_range c a 64 1 1 1 4 9 11 15 17 23 25 27 28 33 37 39 40 41 45 46 48 50 52 53 55 56 58 59 60 62 63 r 10 23 # 5025 fill_range c a 64 1 1 1 3 5 7 9 10 15 16 18 19 21 23 30 35 37 38 42 43 44 46 47 49 50 51 54 55 57 59 63 r 30 64 # 5026 fill_range c a 64 1 1 2 6 7 10 14 15 17 22 24 25 26 28 29 34 36 39 40 41 47 49 51 56 58 59 60 61 r 0 55 # 5027 fill_range c a 65 0 0 e r 0 65 # 5028 fill_range c a 65 0 0 e r 43 25 # 5029 fill_range c a 65 0 0 e r 26 62 # 5030 fill_range c a 65 0 0 e r 63 65 # 5031 fill_range c a 65 0 0 e r 0 16 # 5032 fill_range c a 65 0 0 f r 0 65 # 5033 fill_range c a 65 0 0 f r 62 12 # 5034 fill_range c a 65 0 0 f r 14 15 # 5035 fill_range c a 65 0 0 f r 64 65 # 5036 fill_range c a 65 0 0 f r 0 18 # 5037 fill_range c a 65 0 0 3 5 7 10 13 17 25 27 28 29 30 35 40 42 44 49 50 51 53 55 56 57 58 59 60 61 63 r 0 65 # 5038 fill_range c a 65 0 0 1 3 5 6 8 12 13 14 15 20 28 32 33 36 38 39 44 46 48 50 54 55 56 58 59 62 r 25 12 # 5039 fill_range c a 65 0 0 4 5 6 8 12 16 17 19 20 21 22 27 28 29 33 34 36 37 40 41 42 43 45 48 49 50 52 53 54 55 56 58 59 62 r 2 6 # 5040 fill_range c a 65 0 0 0 5 10 12 13 16 19 21 23 25 26 27 28 29 31 33 35 36 37 39 40 43 45 47 49 50 52 56 58 59 62 r 26 65 # 5041 fill_range c a 65 0 0 1 4 6 9 11 12 13 14 15 17 18 19 20 21 23 24 27 28 29 32 33 34 35 36 41 42 45 47 53 57 60 61 r 0 23 # 5042 fill_range c a 65 0 1 e r 0 65 # 5043 fill_range c a 65 0 1 e r 39 34 # 5044 fill_range c a 65 0 1 e r 0 0 # 5045 fill_range c a 65 0 1 e r 35 65 # 5046 fill_range c a 65 0 1 e r 0 21 # 5047 fill_range c a 65 0 1 f r 0 65 # 5048 fill_range c a 65 0 1 f r 53 48 # 5049 fill_range c a 65 0 1 f r 4 30 # 5050 fill_range c a 65 0 1 f r 9 65 # 5051 fill_range c a 65 0 1 f r 0 16 # 5052 fill_range c a 65 0 1 1 3 6 7 8 9 10 11 13 14 15 18 20 21 22 24 27 28 29 30 32 33 44 45 50 51 52 53 55 56 57 58 59 r 0 65 # 5053 fill_range c a 65 0 1 0 2 4 7 9 10 14 16 17 19 22 23 25 27 29 35 37 38 39 40 41 46 48 50 52 53 55 57 58 59 61 62 63 r 37 35 # 5054 fill_range c a 65 0 1 0 2 3 5 7 8 13 15 17 18 21 27 29 30 34 35 40 41 44 45 46 48 49 50 52 53 55 57 58 59 61 62 63 r 17 42 # 5055 fill_range c a 65 0 1 2 3 4 5 8 9 11 12 14 15 16 17 19 20 22 23 24 25 26 28 29 30 32 33 35 36 39 42 44 47 49 50 52 53 54 55 57 62 r 39 65 # 5056 fill_range c a 65 0 1 2 3 4 7 9 11 12 16 19 21 25 26 29 31 34 37 38 39 40 42 43 44 48 51 53 56 58 r 0 64 # 5057 fill_range c a 65 1 0 e r 0 65 # 5058 fill_range c a 65 1 0 e r 18 2 # 5059 fill_range c a 65 1 0 e r 38 48 # 5060 fill_range c a 65 1 0 e r 0 65 # 5061 fill_range c a 65 1 0 e r 0 56 # 5062 fill_range c a 65 1 0 f r 0 65 # 5063 fill_range c a 65 1 0 f r 58 40 # 5064 fill_range c a 65 1 0 f r 16 36 # 5065 fill_range c a 65 1 0 f r 58 65 # 5066 fill_range c a 65 1 0 f r 0 60 # 5067 fill_range c a 65 1 0 1 4 5 9 11 13 17 19 20 22 23 25 31 33 35 39 41 42 43 45 47 48 49 50 55 57 58 59 64 r 0 65 # 5068 fill_range c a 65 1 0 0 4 6 8 10 11 12 13 14 18 19 25 27 29 30 38 40 41 46 47 49 50 51 55 57 59 60 62 r 49 14 # 5069 fill_range c a 65 1 0 0 1 5 6 7 10 12 13 15 16 17 18 19 20 21 23 26 27 28 31 32 39 40 45 48 50 51 52 56 59 62 64 r 16 29 # 5070 fill_range c a 65 1 0 1 5 6 7 9 12 17 18 19 24 25 26 28 32 33 34 36 37 39 40 41 45 46 47 48 49 50 53 55 56 60 62 63 r 49 65 # 5071 fill_range c a 65 1 0 1 3 4 5 9 17 19 20 21 23 28 29 30 32 33 34 35 36 41 42 43 44 46 51 53 54 55 58 61 63 64 r 0 17 # 5072 fill_range c a 65 1 1 e r 0 65 # 5073 fill_range c a 65 1 1 e r 52 12 # 5074 fill_range c a 65 1 1 e r 16 52 # 5075 fill_range c a 65 1 1 e r 51 65 # 5076 fill_range c a 65 1 1 e r 0 47 # 5077 fill_range c a 65 1 1 f r 0 65 # 5078 fill_range c a 65 1 1 f r 42 13 # 5079 fill_range c a 65 1 1 f r 10 12 # 5080 fill_range c a 65 1 1 f r 13 65 # 5081 fill_range c a 65 1 1 f r 0 24 # 5082 fill_range c a 65 1 1 1 3 4 6 7 9 13 14 15 16 17 23 26 28 29 32 33 34 35 37 38 40 42 43 44 45 46 47 49 51 53 54 55 56 57 59 61 r 0 65 # 5083 fill_range c a 65 1 1 1 2 3 4 6 7 8 9 10 11 13 16 18 19 20 22 23 24 25 28 30 33 36 37 39 40 42 44 45 46 47 50 52 54 55 60 64 r 34 7 # 5084 fill_range c a 65 1 1 0 1 2 3 5 6 7 8 9 11 12 13 14 16 19 22 23 29 30 32 33 36 37 38 39 40 42 43 46 48 52 54 55 59 62 63 r 46 51 # 5085 fill_range c a 65 1 1 0 3 4 5 7 9 10 11 12 13 14 15 16 18 19 20 25 28 29 30 31 32 33 34 35 36 38 39 42 43 45 46 48 49 50 51 55 56 57 59 61 62 64 r 25 65 # 5086 fill_range c a 65 1 1 1 2 4 6 16 18 21 22 24 27 28 34 35 36 39 40 41 44 46 47 48 54 55 56 58 59 60 63 64 r 0 4 # 5087 fill_range c a 211 0 0 e r 0 211 # 5088 fill_range c a 211 0 0 e r 34 27 # 5089 fill_range c a 211 0 0 e r 37 143 # 5090 fill_range c a 211 0 0 e r 197 211 # 5091 fill_range c a 211 0 0 e r 0 195 # 5092 fill_range c a 211 0 0 f r 0 211 # 5093 fill_range c a 211 0 0 f r 211 92 # 5094 fill_range c a 211 0 0 f r 19 23 # 5095 fill_range c a 211 0 0 f r 47 211 # 5096 fill_range c a 211 0 0 f r 0 15 # 5097 fill_range c a 211 0 0 2 5 6 8 11 14 17 21 22 23 25 27 29 30 32 33 34 36 37 38 39 46 47 50 53 55 56 57 59 66 67 69 70 72 74 76 77 79 83 84 85 86 87 90 91 92 95 96 98 99 101 104 106 107 109 110 111 114 116 117 118 120 121 123 124 125 126 127 129 130 131 134 136 137 140 141 143 148 150 151 152 154 155 158 159 163 164 170 171 173 174 175 178 181 184 185 190 191 192 196 197 198 201 203 204 207 r 0 211 # 5098 fill_range c a 211 0 0 0 6 8 11 12 13 16 17 23 24 25 27 29 33 34 37 38 40 42 43 49 50 56 57 60 66 68 69 70 71 73 74 75 76 81 82 83 86 92 93 95 100 104 106 107 108 113 114 117 118 122 123 126 130 132 133 134 135 137 138 139 140 141 144 146 150 152 155 156 160 162 163 173 176 180 182 184 188 189 190 191 196 197 198 205 206 r 106 5 # 5099 fill_range c a 211 0 0 4 5 7 9 11 13 14 16 18 20 23 24 25 26 29 30 33 34 36 41 43 49 53 54 56 57 59 60 66 67 68 71 74 75 76 77 78 80 89 93 94 97 99 101 102 103 105 107 108 111 112 113 114 118 119 121 123 124 127 129 130 131 133 135 136 137 138 141 144 146 147 148 149 150 152 153 154 160 165 168 169 170 172 173 174 175 177 178 179 186 187 192 194 199 205 206 208 209 r 55 143 # 5100 fill_range c a 211 0 0 0 2 3 8 9 12 16 20 21 23 24 25 29 30 36 37 38 39 40 42 43 44 46 47 48 50 51 55 57 59 60 63 64 67 71 72 74 76 77 79 82 84 89 91 94 95 96 98 100 103 104 105 107 108 110 111 112 116 117 118 119 120 121 122 125 129 130 133 135 136 138 139 140 142 143 144 147 149 150 152 153 156 157 158 160 161 162 163 164 165 166 167 169 178 179 181 182 186 189 191 192 194 197 199 200 201 203 204 208 r 57 211 # 5101 fill_range c a 211 0 0 0 2 4 5 6 7 8 10 11 13 15 16 19 21 22 25 26 29 30 33 34 35 36 38 39 40 41 44 45 46 47 50 54 58 59 62 63 65 66 67 69 70 71 72 75 76 78 80 82 83 84 88 92 95 96 97 98 100 101 104 107 108 109 113 117 118 122 123 126 129 130 131 132 133 135 137 138 140 141 142 144 146 149 150 152 153 158 161 164 165 166 168 169 172 174 175 179 185 186 189 190 191 194 197 200 201 202 207 208 r 0 161 # 5102 fill_range c a 211 0 1 e r 0 211 # 5103 fill_range c a 211 0 1 e r 80 8 # 5104 fill_range c a 211 0 1 e r 3 29 # 5105 fill_range c a 211 0 1 e r 161 211 # 5106 fill_range c a 211 0 1 e r 0 71 # 5107 fill_range c a 211 0 1 f r 0 211 # 5108 fill_range c a 211 0 1 f r 65 21 # 5109 fill_range c a 211 0 1 f r 21 42 # 5110 fill_range c a 211 0 1 f r 26 211 # 5111 fill_range c a 211 0 1 f r 0 185 # 5112 fill_range c a 211 0 1 0 2 6 10 12 13 15 17 21 23 24 25 26 27 32 34 39 40 43 46 47 50 51 52 54 55 56 58 60 64 66 68 70 71 74 75 76 77 79 80 82 83 84 86 87 88 89 90 91 96 97 103 104 105 108 109 111 114 116 117 118 119 120 121 125 128 129 130 131 133 134 136 138 139 143 146 148 149 150 151 152 154 158 159 162 163 165 168 169 173 174 175 176 177 178 179 180 181 182 183 185 187 190 191 192 193 194 197 198 200 201 202 204 205 206 207 208 209 210 r 0 211 # 5113 fill_range c a 211 0 1 0 1 3 10 13 14 17 19 20 24 27 28 31 33 35 37 38 39 41 42 44 45 46 47 48 50 51 60 61 63 64 65 66 67 69 70 71 72 73 76 79 82 83 85 87 89 93 97 99 100 101 102 104 105 106 111 112 113 114 116 120 121 122 125 126 127 128 129 130 131 132 133 135 136 139 140 142 146 148 149 150 151 152 153 156 157 159 160 163 164 165 166 167 168 169 170 171 175 176 177 179 180 183 185 186 187 188 190 191 194 196 199 201 202 203 205 206 208 r 156 60 # 5114 fill_range c a 211 0 1 0 1 4 7 8 9 12 13 18 20 21 22 23 24 26 29 32 34 36 37 39 40 41 42 43 44 46 49 59 61 65 66 67 68 70 71 73 74 76 77 81 82 83 87 88 89 90 93 94 95 96 98 99 100 102 103 105 109 110 111 112 113 114 115 118 120 122 128 129 131 134 135 137 138 139 140 141 142 145 147 148 150 151 152 153 157 158 160 162 164 165 166 167 168 169 170 172 174 178 180 181 184 185 186 187 192 196 199 204 207 208 r 104 149 # 5115 fill_range c a 211 0 1 1 4 6 9 10 11 14 15 16 20 21 22 23 25 26 27 31 34 35 36 37 40 42 44 45 47 49 50 51 53 54 55 56 57 60 61 62 65 67 68 72 74 76 77 80 86 88 91 100 101 102 103 104 107 112 115 116 119 120 121 122 125 126 127 130 132 133 135 138 139 140 142 143 144 146 148 149 151 152 153 155 156 157 158 161 162 167 168 171 176 178 179 181 182 183 184 186 187 189 194 195 196 197 198 203 204 205 206 207 208 209 210 r 55 211 # 5116 fill_range c a 211 0 1 0 1 3 4 6 8 10 12 18 19 24 26 27 29 31 34 36 38 39 40 44 45 46 48 49 53 54 57 63 64 67 68 72 73 74 75 77 80 82 85 89 90 91 94 96 98 100 102 105 107 108 111 112 116 117 118 121 123 126 127 128 129 131 135 140 141 143 144 145 147 149 151 152 153 154 155 157 158 160 164 166 168 170 171 174 179 181 182 183 184 186 189 190 191 193 198 200 201 203 207 208 r 0 126 # 5117 fill_range c a 211 1 0 e r 0 211 # 5118 fill_range c a 211 1 0 e r 205 85 # 5119 fill_range c a 211 1 0 e r 38 166 # 5120 fill_range c a 211 1 0 e r 57 211 # 5121 fill_range c a 211 1 0 e r 0 148 # 5122 fill_range c a 211 1 0 f r 0 211 # 5123 fill_range c a 211 1 0 f r 191 0 # 5124 fill_range c a 211 1 0 f r 6 58 # 5125 fill_range c a 211 1 0 f r 92 211 # 5126 fill_range c a 211 1 0 f r 0 67 # 5127 fill_range c a 211 1 0 0 2 5 6 8 12 15 16 17 18 20 21 23 24 26 27 29 32 34 37 38 41 42 45 48 49 50 51 52 53 59 60 63 64 67 71 73 75 76 77 79 80 81 84 85 86 92 93 97 99 100 101 102 104 106 107 111 113 116 118 120 125 126 127 130 133 134 135 137 138 140 145 153 154 155 156 157 162 164 170 175 177 178 179 182 183 185 189 191 196 197 199 200 205 207 208 r 0 211 # 5128 fill_range c a 211 1 0 0 1 3 8 10 14 15 16 19 23 24 25 27 28 31 33 36 37 38 39 40 41 45 51 52 54 55 58 60 61 62 63 64 67 73 74 75 76 77 78 84 95 96 97 98 103 104 107 110 111 112 117 118 119 120 124 127 129 130 136 137 138 139 141 142 143 145 147 148 150 151 153 154 158 159 161 166 169 172 173 175 176 177 178 179 183 186 187 188 189 190 191 192 193 198 199 200 201 203 204 205 206 207 208 210 r 46 2 # 5129 fill_range c a 211 1 0 1 3 4 7 10 12 14 16 19 20 21 22 24 25 28 31 32 33 34 35 40 42 43 46 48 51 55 60 63 65 69 70 71 73 74 75 77 80 81 82 87 88 90 92 97 98 100 101 103 106 107 108 109 110 111 112 113 115 118 119 120 121 123 124 125 129 130 132 137 138 140 141 143 144 145 146 153 159 167 173 176 177 178 179 181 183 184 186 188 192 194 196 200 201 202 204 206 r 21 110 # 5130 fill_range c a 211 1 0 0 7 8 9 10 13 15 17 19 20 21 22 23 27 28 29 33 34 35 37 38 39 40 41 44 46 47 50 51 53 54 55 56 58 59 63 64 65 66 68 69 71 74 76 77 83 84 87 90 91 93 96 98 99 100 101 102 105 106 108 109 110 113 114 119 120 121 124 125 126 127 130 133 134 135 143 146 148 151 153 154 156 157 159 163 164 165 166 170 171 174 175 176 177 179 180 187 189 190 192 195 197 199 202 203 209 210 r 36 211 # 5131 fill_range c a 211 1 0 4 5 8 10 11 12 13 14 15 16 18 22 23 24 32 33 34 35 36 38 39 40 41 43 44 46 47 50 51 52 53 54 55 59 61 64 66 67 68 69 71 72 73 79 80 82 83 85 86 87 88 89 92 93 94 96 97 99 100 101 104 105 106 107 110 111 114 115 121 122 124 126 127 129 131 132 133 136 140 144 145 146 147 151 153 157 158 159 160 162 163 168 169 170 172 173 174 175 176 177 178 181 183 184 185 186 188 189 191 193 195 197 199 208 209 210 r 0 123 # 5132 fill_range c a 211 1 1 e r 0 211 # 5133 fill_range c a 211 1 1 e r 116 83 # 5134 fill_range c a 211 1 1 e r 2 12 # 5135 fill_range c a 211 1 1 e r 31 211 # 5136 fill_range c a 211 1 1 e r 0 176 # 5137 fill_range c a 211 1 1 f r 0 211 # 5138 fill_range c a 211 1 1 f r 165 25 # 5139 fill_range c a 211 1 1 f r 12 26 # 5140 fill_range c a 211 1 1 f r 88 211 # 5141 fill_range c a 211 1 1 f r 0 131 # 5142 fill_range c a 211 1 1 0 1 3 4 5 6 10 12 13 14 15 16 18 19 20 21 22 23 24 27 29 31 32 33 34 35 36 37 38 41 42 44 46 47 48 49 50 51 52 53 55 57 58 60 63 66 69 70 71 76 78 79 81 82 87 92 93 97 98 99 100 102 104 105 107 110 113 114 115 116 117 121 123 125 127 128 129 134 140 142 143 145 146 148 151 152 153 154 156 161 162 163 164 165 168 169 170 171 173 174 178 180 183 187 191 197 202 203 204 205 209 210 r 0 211 # 5143 fill_range c a 211 1 1 0 2 3 6 8 10 12 14 15 16 17 19 21 22 23 24 25 28 30 31 33 34 35 37 39 43 44 46 47 50 53 55 57 60 68 69 73 79 80 81 83 84 85 86 90 94 95 101 102 103 104 105 109 110 111 112 114 116 117 118 122 123 124 125 129 130 131 134 139 142 143 144 145 147 148 151 152 154 158 159 160 162 164 165 166 172 173 176 177 183 184 187 190 192 194 195 197 200 202 203 210 r 110 68 # 5144 fill_range c a 211 1 1 1 2 5 6 11 13 17 19 20 21 26 27 30 34 37 38 39 42 43 45 48 54 55 56 60 62 64 65 66 67 68 69 70 72 78 80 81 82 88 89 90 91 92 95 97 98 99 100 103 104 106 108 109 110 111 112 116 117 118 119 122 124 129 131 134 136 137 138 139 141 142 151 152 155 158 159 162 163 164 167 170 171 173 174 178 180 181 187 188 196 197 198 199 201 202 203 205 207 209 r 30 36 # 5145 fill_range c a 211 1 1 3 4 5 6 7 11 12 13 15 16 22 23 25 28 32 33 36 40 41 42 43 44 46 48 50 52 53 56 58 59 60 64 65 66 67 70 73 78 80 81 82 84 85 86 92 94 95 97 102 103 105 106 107 109 111 118 119 120 121 122 125 127 129 131 133 135 136 138 143 145 146 147 148 149 151 152 158 159 165 169 171 173 175 181 183 187 188 193 194 195 196 197 198 200 205 206 207 r 40 211 # 5146 fill_range c a 211 1 1 3 4 5 6 7 8 13 16 18 19 20 21 23 24 26 27 28 29 33 36 37 39 41 44 46 47 48 50 53 59 61 63 64 69 71 76 77 78 79 81 83 84 85 87 88 90 94 95 96 100 101 102 106 109 110 111 114 116 117 119 123 126 132 134 136 137 139 142 143 144 147 150 151 152 153 154 159 160 161 163 166 168 172 173 175 177 179 182 183 185 189 191 192 194 196 197 199 201 204 205 206 r 0 38 # 5147 fill_range c a 224 0 0 e r 0 224 # 5148 fill_range c a 224 0 0 e r 157 28 # 5149 fill_range c a 224 0 0 e r 4 50 # 5150 fill_range c a 224 0 0 e r 80 224 # 5151 fill_range c a 224 0 0 e r 0 120 # 5152 fill_range c a 224 0 0 f r 0 224 # 5153 fill_range c a 224 0 0 f r 30 3 # 5154 fill_range c a 224 0 0 f r 2 165 # 5155 fill_range c a 224 0 0 f r 205 224 # 5156 fill_range c a 224 0 0 f r 0 169 # 5157 fill_range c a 224 0 0 1 2 3 4 6 7 8 9 11 12 14 16 18 21 24 25 26 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 45 46 47 48 49 53 54 56 57 58 59 60 61 62 63 65 74 76 79 81 83 84 86 87 89 90 91 94 95 99 101 102 103 105 109 112 113 115 118 120 124 129 130 131 132 133 134 136 137 139 140 141 145 147 148 149 151 153 156 157 158 160 161 163 164 169 171 173 175 176 177 178 179 180 181 182 184 186 187 193 195 196 201 203 204 205 206 207 218 219 220 222 223 r 0 224 # 5158 fill_range c a 224 0 0 0 2 3 4 7 10 15 16 17 18 20 22 24 25 28 31 34 36 40 41 42 43 46 48 49 50 51 53 55 57 60 61 66 68 69 70 72 73 78 80 81 84 85 89 90 92 94 96 97 98 100 101 102 103 104 107 108 111 114 115 119 120 121 123 126 127 128 129 131 136 137 139 140 144 148 150 151 155 158 163 164 165 166 167 172 173 174 175 177 178 181 182 183 186 187 188 192 194 197 199 201 203 204 205 206 208 209 212 215 216 218 219 220 221 r 136 53 # 5159 fill_range c a 224 0 0 0 1 6 7 9 10 12 13 14 17 18 19 20 21 22 24 25 29 32 33 38 39 41 42 45 46 47 48 49 52 54 55 58 62 68 71 75 77 79 80 81 87 88 92 93 94 95 99 100 101 102 103 104 106 111 113 115 117 120 121 122 123 124 126 127 128 130 132 133 135 143 145 148 149 150 151 152 156 159 165 167 168 169 173 176 177 178 180 181 185 186 188 190 192 194 196 199 205 206 207 209 212 213 214 215 217 222 r 38 174 # 5160 fill_range c a 224 0 0 0 3 5 7 9 10 12 17 18 20 22 24 27 29 30 35 37 38 41 42 44 45 48 50 51 52 53 55 56 57 58 60 61 62 65 67 68 72 73 75 76 77 79 82 84 87 88 91 94 95 98 99 101 104 105 107 108 109 110 113 114 120 121 122 124 125 129 131 132 135 137 138 139 140 141 143 144 145 151 159 161 165 173 176 178 179 180 182 184 188 189 190 192 194 195 199 200 201 202 204 206 208 211 212 214 216 218 221 222 r 107 224 # 5161 fill_range c a 224 0 0 3 4 7 9 13 15 17 18 19 20 22 24 26 27 28 30 36 37 38 39 43 45 46 47 48 49 50 51 52 53 55 56 58 59 61 63 65 67 70 71 72 74 77 79 80 82 83 84 85 86 87 90 91 94 97 99 102 103 104 105 108 112 113 115 116 117 118 121 122 123 125 128 129 131 133 134 136 140 141 142 144 147 149 150 151 152 153 155 156 157 161 163 164 166 168 170 173 174 175 178 181 183 184 185 186 190 191 194 195 196 197 199 207 211 212 214 215 217 219 222 r 0 181 # 5162 fill_range c a 224 0 1 e r 0 224 # 5163 fill_range c a 224 0 1 e r 157 85 # 5164 fill_range c a 224 0 1 e r 105 112 # 5165 fill_range c a 224 0 1 e r 136 224 # 5166 fill_range c a 224 0 1 e r 0 120 # 5167 fill_range c a 224 0 1 f r 0 224 # 5168 fill_range c a 224 0 1 f r 189 171 # 5169 fill_range c a 224 0 1 f r 90 101 # 5170 fill_range c a 224 0 1 f r 34 224 # 5171 fill_range c a 224 0 1 f r 0 75 # 5172 fill_range c a 224 0 1 1 3 4 6 8 10 11 12 14 15 18 19 20 22 23 24 27 30 31 34 38 40 43 44 46 48 50 51 52 53 54 55 58 59 60 62 63 64 65 69 70 73 74 77 78 79 81 82 84 88 89 96 97 100 106 114 115 116 117 120 122 124 126 127 130 131 135 136 137 141 142 143 144 146 147 149 154 156 157 158 159 160 161 162 170 171 176 178 182 183 185 186 188 189 191 192 198 199 200 201 205 210 212 213 216 221 r 0 224 # 5173 fill_range c a 224 0 1 0 2 4 5 7 9 11 12 13 14 15 17 19 21 24 25 26 29 34 36 40 41 43 46 47 48 50 52 53 54 55 56 61 62 63 64 65 67 68 69 71 72 73 74 76 78 79 80 81 83 84 86 88 89 90 92 95 97 98 100 104 105 106 107 109 110 114 116 117 118 120 122 124 125 128 129 133 134 136 137 143 144 149 150 151 153 156 157 158 160 162 163 164 165 167 168 170 172 176 178 181 183 184 185 190 193 196 199 200 202 203 204 207 208 210 215 216 217 220 222 r 8 0 # 5174 fill_range c a 224 0 1 0 12 14 15 17 19 20 24 26 28 31 32 33 37 39 40 41 43 45 46 47 48 51 53 58 60 63 65 67 69 72 73 75 76 78 79 80 82 87 88 91 93 94 95 97 99 100 101 104 105 113 115 117 119 121 122 123 127 129 130 132 134 135 139 143 145 146 147 148 150 151 152 154 156 162 164 166 168 172 173 177 178 181 185 186 190 192 194 195 196 197 199 200 201 202 203 206 207 209 212 214 215 219 220 221 r 10 34 # 5175 fill_range c a 224 0 1 2 5 9 12 13 15 19 21 24 27 28 29 30 31 33 35 37 38 39 45 49 52 53 54 59 62 63 66 67 69 70 71 74 78 80 82 83 85 87 89 90 91 93 94 97 101 103 110 112 113 116 118 121 126 127 131 136 137 138 140 141 142 143 144 145 146 147 149 151 152 153 158 159 163 164 165 168 170 171 179 181 182 184 185 190 191 192 197 198 200 201 202 207 208 209 210 214 219 220 r 88 224 # 5176 fill_range c a 224 0 1 0 1 3 4 5 6 7 8 9 10 13 17 18 19 21 23 27 28 29 30 31 32 35 38 39 41 43 46 47 49 50 51 52 56 57 60 63 64 65 66 67 68 69 70 74 75 76 77 78 79 80 81 82 86 89 90 93 95 96 98 99 100 101 102 105 107 108 110 111 113 115 116 117 120 121 124 125 127 128 131 137 143 146 153 154 156 157 158 159 162 164 166 170 171 172 174 176 177 180 181 182 184 187 191 192 195 199 200 203 204 206 208 210 211 216 217 221 r 0 177 # 5177 fill_range c a 224 1 0 e r 0 224 # 5178 fill_range c a 224 1 0 e r 96 19 # 5179 fill_range c a 224 1 0 e r 17 75 # 5180 fill_range c a 224 1 0 e r 186 224 # 5181 fill_range c a 224 1 0 e r 0 43 # 5182 fill_range c a 224 1 0 f r 0 224 # 5183 fill_range c a 224 1 0 f r 212 131 # 5184 fill_range c a 224 1 0 f r 8 31 # 5185 fill_range c a 224 1 0 f r 180 224 # 5186 fill_range c a 224 1 0 f r 0 192 # 5187 fill_range c a 224 1 0 2 3 5 7 9 10 11 12 15 18 19 20 22 26 29 31 37 41 45 47 49 50 51 55 56 58 60 62 66 67 69 71 72 73 78 79 81 82 83 87 92 94 96 98 99 102 104 105 106 109 111 113 114 115 118 119 120 121 125 126 127 129 130 131 132 133 135 136 140 141 144 145 147 149 150 151 152 153 156 160 163 164 165 166 167 170 174 175 177 178 180 181 183 184 185 187 192 193 195 196 199 200 203 204 205 206 207 208 209 211 212 213 214 216 220 r 0 224 # 5188 fill_range c a 224 1 0 1 3 4 5 6 7 10 11 13 14 16 22 26 28 30 31 32 33 34 35 36 37 38 39 42 45 46 47 49 51 55 56 58 61 64 71 72 75 77 78 79 80 82 84 86 87 88 89 92 93 94 98 99 104 105 108 111 112 114 115 116 117 119 120 121 122 123 125 127 128 132 133 134 135 136 137 141 143 146 150 152 153 154 156 159 161 164 165 166 168 170 172 177 179 182 185 186 189 190 191 192 194 197 198 201 205 207 208 209 211 215 217 219 220 223 r 49 27 # 5189 fill_range c a 224 1 0 1 4 5 8 13 15 16 17 20 21 27 28 29 32 33 35 36 37 39 45 48 50 51 53 54 55 58 65 66 67 68 70 71 72 73 76 77 78 87 88 89 90 100 105 106 107 111 112 113 116 119 122 123 124 128 129 131 132 133 137 139 141 142 145 146 151 154 156 157 159 160 161 163 164 165 166 168 172 173 174 176 177 178 180 186 190 191 194 195 197 199 200 203 205 208 210 211 212 216 217 219 222 r 0 0 # 5190 fill_range c a 224 1 0 3 9 11 16 18 23 28 32 33 35 39 41 42 46 51 52 53 54 58 60 62 63 64 65 66 70 71 73 76 77 78 84 86 88 89 91 94 99 100 103 105 108 110 114 116 117 118 119 120 122 123 127 128 129 131 133 134 136 138 142 143 144 151 153 154 155 158 160 165 166 167 171 172 174 175 176 179 182 183 185 186 187 189 192 193 196 199 200 201 202 203 204 207 208 209 210 213 215 216 218 219 220 223 r 164 224 # 5191 fill_range c a 224 1 0 0 2 3 5 6 11 12 13 14 15 16 17 18 21 27 30 32 37 39 41 42 44 50 51 52 57 59 61 63 67 69 71 76 77 78 80 81 82 83 84 88 89 92 93 98 99 102 103 104 106 108 109 110 111 113 114 116 118 119 123 128 132 133 134 137 138 140 141 146 148 149 151 153 154 158 166 169 170 173 175 179 180 181 182 184 185 186 187 189 191 192 193 194 197 198 199 202 203 206 207 208 210 211 213 214 216 217 219 222 r 0 43 # 5192 fill_range c a 224 1 1 e r 0 224 # 5193 fill_range c a 224 1 1 e r 115 112 # 5194 fill_range c a 224 1 1 e r 53 99 # 5195 fill_range c a 224 1 1 e r 21 224 # 5196 fill_range c a 224 1 1 e r 0 210 # 5197 fill_range c a 224 1 1 f r 0 224 # 5198 fill_range c a 224 1 1 f r 111 95 # 5199 fill_range c a 224 1 1 f r 2 4 # 5200 fill_range c a 224 1 1 f r 111 224 # 5201 fill_range c a 224 1 1 f r 0 48 # 5202 fill_range c a 224 1 1 0 4 6 7 11 15 17 19 20 21 24 29 30 32 34 35 36 37 38 39 42 43 44 46 47 49 50 52 55 56 57 58 61 62 65 68 74 76 77 80 84 85 87 88 94 95 98 103 111 112 113 116 117 119 120 122 124 125 126 127 128 129 133 135 137 138 143 145 148 149 151 154 155 156 157 158 159 160 164 165 166 168 169 170 171 174 175 179 181 182 184 185 187 188 190 191 192 194 195 197 198 200 201 204 208 209 211 212 213 215 216 217 218 221 r 0 224 # 5203 fill_range c a 224 1 1 2 3 5 6 8 10 11 14 19 21 22 23 24 29 32 42 43 45 47 50 55 56 57 60 61 62 63 65 66 67 70 71 72 73 74 76 77 78 81 82 83 86 89 91 92 94 95 97 98 101 103 104 105 107 108 110 112 113 116 117 120 121 123 125 126 128 130 131 134 135 138 141 142 145 146 148 150 151 153 154 156 158 159 160 161 162 165 168 169 170 172 174 177 178 180 186 188 189 191 192 193 194 195 196 199 203 204 208 209 210 211 215 217 220 221 222 r 192 174 # 5204 fill_range c a 224 1 1 3 9 10 11 13 14 15 16 19 21 22 23 24 25 27 30 31 32 34 35 36 37 40 42 44 45 47 48 50 53 54 59 60 69 77 78 81 86 87 88 89 90 91 95 97 98 99 100 102 103 104 112 113 114 117 120 123 126 127 129 130 131 133 134 141 142 144 145 146 148 150 152 156 159 160 161 162 164 165 167 169 171 172 175 180 182 184 186 189 192 194 195 198 199 204 205 208 209 211 215 217 219 220 221 223 r 54 129 # 5205 fill_range c a 224 1 1 0 1 4 5 6 8 10 12 13 14 16 19 21 22 23 24 25 26 28 30 31 35 36 37 39 47 49 50 51 52 53 55 56 59 62 63 65 66 68 69 73 74 76 85 88 89 92 97 98 100 102 106 108 110 111 112 113 116 118 119 126 127 129 130 133 134 138 139 140 142 146 148 150 151 152 156 157 158 160 161 162 163 164 167 168 170 171 172 173 177 179 182 184 190 191 194 196 199 200 202 205 206 208 212 214 216 218 219 220 221 222 r 93 224 # 5206 fill_range c a 224 1 1 0 4 7 8 9 11 13 14 15 19 21 24 27 30 32 34 35 38 40 41 44 47 48 49 50 52 54 55 56 57 62 64 65 68 69 70 71 72 75 76 77 78 79 82 84 85 86 88 90 92 94 95 97 98 100 101 103 104 105 106 107 111 112 115 119 120 121 123 125 127 128 130 131 134 136 137 138 144 145 146 148 151 155 157 163 164 166 167 169 173 174 177 178 180 181 185 186 187 188 192 193 194 195 197 199 200 201 205 206 207 208 209 211 212 213 214 217 221 r 0 121 # 5207 fill_range c a 247 0 0 e r 0 247 # 5208 fill_range c a 247 0 0 e r 63 58 # 5209 fill_range c a 247 0 0 e r 6 119 # 5210 fill_range c a 247 0 0 e r 11 247 # 5211 fill_range c a 247 0 0 e r 0 206 # 5212 fill_range c a 247 0 0 f r 0 247 # 5213 fill_range c a 247 0 0 f r 121 87 # 5214 fill_range c a 247 0 0 f r 49 117 # 5215 fill_range c a 247 0 0 f r 39 247 # 5216 fill_range c a 247 0 0 f r 0 61 # 5217 fill_range c a 247 0 0 0 1 2 3 5 8 9 10 11 12 13 15 17 19 20 21 23 24 25 27 28 31 34 35 36 38 39 40 41 43 44 45 46 52 53 55 56 58 59 60 61 62 63 66 68 69 70 71 74 79 80 81 83 88 90 91 93 94 98 99 101 102 103 106 108 111 115 116 117 118 119 121 122 124 126 127 128 129 130 133 134 135 137 142 143 144 147 150 151 153 160 164 171 172 174 175 176 178 180 181 184 187 188 189 191 192 193 195 199 200 201 202 203 206 208 209 210 212 213 214 215 218 220 221 222 223 224 226 227 228 230 231 232 234 236 237 239 240 243 245 r 0 247 # 5218 fill_range c a 247 0 0 0 3 6 8 11 12 14 15 19 23 24 27 28 35 36 38 39 40 42 43 44 48 49 50 51 54 56 58 62 63 64 66 68 69 71 72 73 75 77 78 80 81 87 91 92 94 96 97 98 99 102 107 110 117 119 121 122 125 126 128 129 132 134 137 138 139 141 142 146 147 150 151 153 155 156 157 160 161 162 163 166 167 169 171 172 176 178 180 181 185 188 189 190 192 195 196 198 204 207 208 213 214 215 217 218 220 221 222 225 230 233 234 238 240 242 243 244 246 r 9 8 # 5219 fill_range c a 247 0 0 0 1 5 6 9 10 12 14 15 16 22 25 27 28 29 32 34 37 38 40 42 44 45 47 50 52 53 54 56 58 59 64 67 68 71 72 79 80 83 88 90 97 101 103 107 108 109 111 112 113 114 116 119 122 123 124 130 131 133 134 140 141 143 148 149 155 156 160 161 162 164 165 166 168 169 170 171 172 174 176 178 179 180 181 182 187 188 191 194 196 197 198 199 200 201 202 205 206 215 217 218 221 222 223 225 228 234 235 237 242 243 244 r 26 105 # 5220 fill_range c a 247 0 0 5 9 12 13 14 16 20 21 22 24 26 27 28 30 32 37 38 40 41 42 43 44 45 46 50 51 53 65 67 68 71 75 76 80 86 88 89 90 95 97 101 102 104 107 108 109 111 115 116 119 121 122 129 130 131 133 137 140 141 145 146 148 150 153 154 157 158 159 160 161 162 165 166 167 168 170 172 174 176 177 179 180 185 186 187 188 189 190 191 193 194 195 196 197 198 200 201 202 203 204 205 207 209 210 214 215 218 221 222 223 225 226 228 230 231 233 234 237 239 240 243 246 r 20 247 # 5221 fill_range c a 247 0 0 0 2 3 5 6 7 8 10 11 12 13 19 21 22 23 24 26 28 29 40 42 43 44 46 48 51 54 56 57 58 59 60 61 63 65 68 69 70 71 72 73 75 79 80 81 82 85 88 91 94 98 100 101 102 103 106 107 108 110 111 113 115 116 117 119 120 121 126 129 130 133 135 138 140 147 149 150 152 155 159 160 164 165 172 173 174 175 178 181 182 184 189 192 193 194 195 196 200 201 202 205 207 211 213 218 219 228 230 233 234 235 236 240 241 244 r 0 238 # 5222 fill_range c a 247 0 1 e r 0 247 # 5223 fill_range c a 247 0 1 e r 126 107 # 5224 fill_range c a 247 0 1 e r 1 2 # 5225 fill_range c a 247 0 1 e r 199 247 # 5226 fill_range c a 247 0 1 e r 0 222 # 5227 fill_range c a 247 0 1 f r 0 247 # 5228 fill_range c a 247 0 1 f r 187 94 # 5229 fill_range c a 247 0 1 f r 93 145 # 5230 fill_range c a 247 0 1 f r 159 247 # 5231 fill_range c a 247 0 1 f r 0 180 # 5232 fill_range c a 247 0 1 1 8 9 11 13 17 20 21 24 25 28 31 32 33 37 38 43 44 53 54 56 57 58 59 61 62 64 66 67 68 72 75 76 77 78 83 89 92 93 94 95 98 100 101 102 103 108 110 112 114 118 119 125 126 129 130 132 136 137 138 139 142 144 145 146 149 150 152 154 157 158 159 164 167 172 174 178 179 181 184 185 188 190 192 195 196 197 199 201 203 207 208 210 211 212 213 215 216 217 219 220 222 223 229 231 232 233 234 236 239 242 245 r 0 247 # 5233 fill_range c a 247 0 1 1 2 3 4 5 6 10 11 12 13 14 15 16 17 20 21 22 27 31 32 33 34 35 36 37 46 48 50 51 53 56 60 63 65 68 69 70 71 72 80 83 84 87 88 89 91 93 95 96 97 100 103 105 106 107 108 111 112 113 114 115 118 120 122 124 126 127 133 134 135 137 138 145 146 149 150 152 153 155 158 159 160 161 162 164 165 168 170 172 173 174 175 176 177 184 185 190 193 195 196 197 199 200 201 203 204 206 207 208 213 214 216 218 220 221 223 224 225 226 227 228 230 231 242 243 245 r 16 7 # 5234 fill_range c a 247 0 1 3 4 6 7 14 16 17 18 19 23 26 28 29 30 35 37 38 39 43 45 48 52 53 54 57 58 60 61 64 65 68 69 74 75 78 82 84 85 88 91 92 93 94 95 96 101 102 105 107 108 113 114 116 118 127 129 131 132 135 136 138 139 140 141 144 146 147 151 152 155 156 157 158 160 162 163 164 166 167 168 170 174 179 180 182 183 184 186 187 189 190 193 195 197 198 199 203 204 208 209 211 216 218 220 221 222 224 225 228 229 233 236 237 239 240 241 243 244 245 r 23 62 # 5235 fill_range c a 247 0 1 1 4 7 8 10 11 12 16 19 20 23 24 26 27 28 30 31 36 38 40 41 43 44 47 48 49 51 52 53 54 55 60 64 66 68 69 70 71 74 76 77 79 80 81 82 83 84 88 89 91 93 98 100 101 104 105 106 107 108 111 112 115 116 117 118 119 120 122 126 130 133 134 136 137 138 139 142 144 146 149 153 154 155 159 160 161 164 167 170 172 173 174 175 176 177 180 186 187 188 191 193 194 196 200 202 203 204 206 207 209 211 213 215 216 218 219 223 224 226 227 228 231 233 234 237 239 240 241 242 245 r 149 247 # 5236 fill_range c a 247 0 1 1 3 5 12 18 19 20 22 23 24 26 30 31 36 37 38 41 45 47 48 50 51 53 54 57 58 59 60 61 65 66 68 73 74 75 76 78 79 81 82 83 84 87 90 95 98 100 102 108 110 113 115 117 118 121 122 123 124 132 136 137 138 140 141 142 145 147 148 151 152 153 154 155 159 160 161 162 163 164 167 169 172 173 176 177 178 179 180 182 183 186 188 192 195 196 198 199 201 204 205 207 210 212 215 216 219 220 221 223 224 226 227 228 230 233 234 236 240 242 244 r 0 84 # 5237 fill_range c a 247 1 0 e r 0 247 # 5238 fill_range c a 247 1 0 e r 68 22 # 5239 fill_range c a 247 1 0 e r 0 49 # 5240 fill_range c a 247 1 0 e r 101 247 # 5241 fill_range c a 247 1 0 e r 0 16 # 5242 fill_range c a 247 1 0 f r 0 247 # 5243 fill_range c a 247 1 0 f r 83 50 # 5244 fill_range c a 247 1 0 f r 9 27 # 5245 fill_range c a 247 1 0 f r 17 247 # 5246 fill_range c a 247 1 0 f r 0 55 # 5247 fill_range c a 247 1 0 2 3 7 8 9 13 14 15 18 19 24 25 26 28 32 35 36 37 38 40 42 43 45 46 49 51 52 53 55 56 60 61 62 64 65 67 68 72 75 79 81 82 84 85 87 91 93 96 97 98 99 105 107 109 112 114 115 117 121 123 124 125 126 127 128 129 133 134 135 137 139 140 141 145 148 149 150 158 162 165 167 168 169 172 173 174 175 176 179 180 184 186 188 189 190 191 193 196 197 201 202 205 209 210 214 216 218 221 224 225 226 228 230 232 233 236 237 238 241 243 244 246 r 0 247 # 5248 fill_range c a 247 1 0 0 1 2 4 6 9 11 13 14 15 16 17 20 21 22 23 25 28 29 33 34 38 39 43 47 48 49 51 52 54 56 59 60 61 64 65 66 69 70 71 75 76 77 78 79 80 81 86 90 92 94 95 97 98 99 100 101 105 108 109 110 111 112 116 117 122 124 125 126 127 128 129 130 131 132 138 141 142 146 147 152 153 154 156 157 160 163 167 168 169 170 172 173 174 175 177 178 180 182 183 185 187 189 192 193 194 202 203 205 206 209 210 213 216 221 224 226 227 228 229 231 233 234 236 237 238 240 241 242 244 245 246 r 6 3 # 5249 fill_range c a 247 1 0 1 2 5 6 7 8 9 10 11 13 14 16 18 19 22 24 25 27 28 31 35 38 39 42 45 46 47 49 50 51 52 55 57 58 60 64 66 67 68 69 70 71 73 79 80 83 84 85 86 89 93 94 97 99 102 103 104 108 109 111 112 113 114 115 117 118 119 120 128 129 132 135 136 139 141 146 147 148 149 150 151 154 155 156 159 161 168 169 170 175 176 178 179 181 183 186 188 189 190 192 195 196 197 199 202 203 204 206 208 209 212 213 218 221 223 224 225 226 227 228 236 238 239 241 244 245 246 r 37 166 # 5250 fill_range c a 247 1 0 4 7 9 11 13 15 16 18 21 25 26 29 30 31 35 36 38 42 43 44 46 47 48 49 51 52 53 58 59 61 62 64 67 68 70 73 79 81 82 86 87 89 90 91 93 97 99 100 106 108 111 115 116 117 118 120 121 122 124 126 127 128 129 130 131 136 138 140 144 145 146 147 148 149 150 153 154 163 165 170 172 175 176 179 183 185 186 187 190 191 194 195 196 197 201 203 205 206 210 211 212 218 219 220 221 222 231 233 234 235 236 238 240 241 245 246 r 14 247 # 5251 fill_range c a 247 1 0 1 3 4 5 7 11 12 13 14 16 19 20 23 29 30 32 37 39 41 42 46 48 49 50 51 54 56 57 58 59 60 61 63 65 68 69 71 73 75 77 80 86 89 92 93 94 95 96 100 101 104 105 108 109 110 111 112 114 117 118 119 121 122 124 125 129 130 134 139 140 142 143 145 147 150 151 153 155 156 159 163 164 165 166 172 173 176 177 180 181 184 188 189 193 194 196 197 199 201 204 209 210 212 213 217 218 222 223 225 226 227 228 230 235 236 237 239 240 245 246 r 0 62 # 5252 fill_range c a 247 1 1 e r 0 247 # 5253 fill_range c a 247 1 1 e r 209 84 # 5254 fill_range c a 247 1 1 e r 14 149 # 5255 fill_range c a 247 1 1 e r 135 247 # 5256 fill_range c a 247 1 1 e r 0 110 # 5257 fill_range c a 247 1 1 f r 0 247 # 5258 fill_range c a 247 1 1 f r 30 4 # 5259 fill_range c a 247 1 1 f r 6 30 # 5260 fill_range c a 247 1 1 f r 166 247 # 5261 fill_range c a 247 1 1 f r 0 37 # 5262 fill_range c a 247 1 1 1 2 4 7 9 10 11 13 16 23 25 26 28 30 31 36 37 38 39 40 41 42 44 46 48 49 50 53 55 56 59 60 61 62 63 72 75 76 79 81 83 84 85 86 87 88 89 90 91 92 94 96 97 98 99 101 105 106 107 108 110 113 114 116 117 119 120 121 123 129 132 134 137 140 141 144 147 149 151 152 153 154 157 160 161 162 163 165 170 174 176 179 180 181 182 183 184 185 186 187 188 191 194 197 198 199 201 203 204 205 207 209 210 213 214 217 221 222 223 225 228 232 235 237 238 239 242 243 245 r 0 247 # 5263 fill_range c a 247 1 1 0 1 3 6 9 11 13 15 16 17 18 19 21 23 25 26 29 31 32 33 34 37 38 39 40 42 44 45 46 47 48 49 51 52 53 54 55 56 57 60 61 63 64 67 70 71 81 83 84 86 87 90 92 95 97 98 99 100 102 104 105 106 110 112 113 115 120 122 123 124 125 128 130 131 132 133 135 136 139 141 144 145 149 150 154 155 160 162 164 167 170 171 177 178 179 182 183 184 185 186 189 190 193 194 196 197 198 201 203 204 205 208 210 212 213 214 215 216 217 220 221 222 223 224 227 231 232 233 234 235 236 240 242 245 r 239 161 # 5264 fill_range c a 247 1 1 1 7 9 11 14 15 17 18 19 20 22 24 27 29 31 35 36 37 38 40 42 43 44 45 46 49 52 54 55 58 59 60 61 62 71 72 74 75 77 79 80 81 83 85 86 87 90 93 94 95 100 101 103 106 114 117 119 121 122 123 124 125 126 127 128 129 131 132 133 135 139 141 143 147 148 154 157 160 161 162 164 168 169 172 174 175 176 178 179 180 182 184 185 187 188 189 194 196 201 202 205 207 208 209 210 211 213 214 215 216 218 222 223 225 226 230 231 242 243 244 245 246 r 7 12 # 5265 fill_range c a 247 1 1 0 2 3 9 10 11 13 15 16 17 22 25 30 33 35 37 38 39 41 42 43 45 46 48 50 51 52 53 56 57 58 61 63 65 67 71 74 75 77 79 82 83 87 89 91 92 93 97 98 99 102 103 104 105 107 108 109 110 112 113 119 122 127 130 131 132 133 135 136 137 138 139 140 141 142 143 144 146 148 152 153 155 157 158 165 167 168 169 170 172 173 176 178 179 181 182 184 189 190 191 193 195 196 197 198 200 202 206 209 210 211 212 213 215 218 219 221 222 223 224 226 230 231 232 233 239 242 243 245 246 r 68 247 # 5266 fill_range c a 247 1 1 1 2 3 5 6 9 10 11 13 14 16 19 20 21 22 23 26 27 29 30 31 33 34 35 36 37 40 41 43 44 45 49 51 52 54 56 57 60 70 71 73 74 76 78 80 83 86 91 93 95 96 98 100 101 104 106 107 110 112 119 121 122 123 124 125 126 127 129 130 134 137 138 139 141 143 145 147 148 149 152 159 160 166 167 168 169 170 172 175 178 182 183 187 189 192 193 194 196 197 199 204 208 209 215 217 219 221 224 226 227 230 231 232 233 234 235 241 242 244 245 r 0 31 # 5267 fill_range c a 0 0 0 e r 0 0 # 5268 ffs_range c a 0 0 0 e r 0 0 # 5269 ffs_range c a 0 0 0 e r 0 0 # 5270 ffs_range c a 0 0 0 e r 0 0 # 5271 ffs_range c a 0 0 0 e r 0 0 # 5272 ffs_range c a 0 0 0 e r 0 0 # 5273 ffs_range c a 0 0 0 e r 0 0 # 5274 ffs_range c a 0 0 0 e r 0 0 # 5275 ffs_range c a 0 0 0 e r 0 0 # 5276 ffs_range c a 0 0 0 e r 0 0 # 5277 ffs_range c a 0 0 0 r 0 0 # 5278 ffs_range c a 0 0 0 r 0 0 # 5279 ffs_range c a 0 0 0 r 0 0 # 5280 ffs_range c a 0 0 0 r 0 0 # 5281 ffs_range c a 0 0 0 r 0 0 # 5282 ffs_range c a 0 0 1 e r 0 0 # 5283 ffs_range c a 0 0 1 e r 0 0 # 5284 ffs_range c a 0 0 1 e r 0 0 # 5285 ffs_range c a 0 0 1 e r 0 0 # 5286 ffs_range c a 0 0 1 e r 0 0 # 5287 ffs_range c a 0 0 1 e r 0 0 # 5288 ffs_range c a 0 0 1 e r 0 0 # 5289 ffs_range c a 0 0 1 e r 0 0 # 5290 ffs_range c a 0 0 1 e r 0 0 # 5291 ffs_range c a 0 0 1 e r 0 0 # 5292 ffs_range c a 0 0 1 r 0 0 # 5293 ffs_range c a 0 0 1 r 0 0 # 5294 ffs_range c a 0 0 1 r 0 0 # 5295 ffs_range c a 0 0 1 r 0 0 # 5296 ffs_range c a 0 0 1 r 0 0 # 5297 ffs_range c a 0 1 0 e r 0 0 # 5298 ffs_range c a 0 1 0 e r 0 0 # 5299 ffs_range c a 0 1 0 e r 0 0 # 5300 ffs_range c a 0 1 0 e r 0 0 # 5301 ffs_range c a 0 1 0 e r 0 0 # 5302 ffs_range c a 0 1 0 e r 0 0 # 5303 ffs_range c a 0 1 0 e r 0 0 # 5304 ffs_range c a 0 1 0 e r 0 0 # 5305 ffs_range c a 0 1 0 e r 0 0 # 5306 ffs_range c a 0 1 0 e r 0 0 # 5307 ffs_range c a 0 1 0 r 0 0 # 5308 ffs_range c a 0 1 0 r 0 0 # 5309 ffs_range c a 0 1 0 r 0 0 # 5310 ffs_range c a 0 1 0 r 0 0 # 5311 ffs_range c a 0 1 0 r 0 0 # 5312 ffs_range c a 0 1 1 e r 0 0 # 5313 ffs_range c a 0 1 1 e r 0 0 # 5314 ffs_range c a 0 1 1 e r 0 0 # 5315 ffs_range c a 0 1 1 e r 0 0 # 5316 ffs_range c a 0 1 1 e r 0 0 # 5317 ffs_range c a 0 1 1 e r 0 0 # 5318 ffs_range c a 0 1 1 e r 0 0 # 5319 ffs_range c a 0 1 1 e r 0 0 # 5320 ffs_range c a 0 1 1 e r 0 0 # 5321 ffs_range c a 0 1 1 e r 0 0 # 5322 ffs_range c a 0 1 1 r 0 0 # 5323 ffs_range c a 0 1 1 r 0 0 # 5324 ffs_range c a 0 1 1 r 0 0 # 5325 ffs_range c a 0 1 1 r 0 0 # 5326 ffs_range c a 0 1 1 r 0 0 # 5327 ffs_range c a 1 0 0 e r 0 1 # 5328 ffs_range c a 1 0 0 e r 0 0 # 5329 ffs_range c a 1 0 0 e r 0 1 # 5330 ffs_range c a 1 0 0 e r 0 1 # 5331 ffs_range c a 1 0 0 e r 0 1 # 5332 ffs_range c a 1 0 0 f r 0 1 # 5333 ffs_range c a 1 0 0 f r 0 0 # 5334 ffs_range c a 1 0 0 f r 0 1 # 5335 ffs_range c a 1 0 0 f r 0 1 # 5336 ffs_range c a 1 0 0 f r 0 0 # 5337 ffs_range c a 1 0 0 0 r 0 1 # 5338 ffs_range c a 1 0 0 r 1 0 # 5339 ffs_range c a 1 0 0 r 0 1 # 5340 ffs_range c a 1 0 0 0 r 0 1 # 5341 ffs_range c a 1 0 0 0 r 0 0 # 5342 ffs_range c a 1 0 1 e r 0 1 # 5343 ffs_range c a 1 0 1 e r 1 0 # 5344 ffs_range c a 1 0 1 e r 0 0 # 5345 ffs_range c a 1 0 1 e r 0 1 # 5346 ffs_range c a 1 0 1 e r 0 0 # 5347 ffs_range c a 1 0 1 f r 0 1 # 5348 ffs_range c a 1 0 1 f r 1 0 # 5349 ffs_range c a 1 0 1 f r 0 0 # 5350 ffs_range c a 1 0 1 f r 0 1 # 5351 ffs_range c a 1 0 1 f r 0 0 # 5352 ffs_range c a 1 0 1 r 0 1 # 5353 ffs_range c a 1 0 1 r 0 0 # 5354 ffs_range c a 1 0 1 0 r 0 1 # 5355 ffs_range c a 1 0 1 r 0 1 # 5356 ffs_range c a 1 0 1 r 0 0 # 5357 ffs_range c a 1 1 0 e r 0 1 # 5358 ffs_range c a 1 1 0 e r 0 0 # 5359 ffs_range c a 1 1 0 e r 0 1 # 5360 ffs_range c a 1 1 0 e r 0 1 # 5361 ffs_range c a 1 1 0 e r 0 0 # 5362 ffs_range c a 1 1 0 f r 0 1 # 5363 ffs_range c a 1 1 0 f r 0 0 # 5364 ffs_range c a 1 1 0 f r 0 0 # 5365 ffs_range c a 1 1 0 f r 0 1 # 5366 ffs_range c a 1 1 0 f r 0 1 # 5367 ffs_range c a 1 1 0 r 0 1 # 5368 ffs_range c a 1 1 0 0 r 0 0 # 5369 ffs_range c a 1 1 0 0 r 0 0 # 5370 ffs_range c a 1 1 0 0 r 0 1 # 5371 ffs_range c a 1 1 0 0 r 0 0 # 5372 ffs_range c a 1 1 1 e r 0 1 # 5373 ffs_range c a 1 1 1 e r 0 0 # 5374 ffs_range c a 1 1 1 e r 0 1 # 5375 ffs_range c a 1 1 1 e r 0 1 # 5376 ffs_range c a 1 1 1 e r 0 0 # 5377 ffs_range c a 1 1 1 f r 0 1 # 5378 ffs_range c a 1 1 1 f r 0 0 # 5379 ffs_range c a 1 1 1 f r 0 0 # 5380 ffs_range c a 1 1 1 f r 0 1 # 5381 ffs_range c a 1 1 1 f r 0 0 # 5382 ffs_range c a 1 1 1 0 r 0 1 # 5383 ffs_range c a 1 1 1 r 1 0 # 5384 ffs_range c a 1 1 1 r 0 1 # 5385 ffs_range c a 1 1 1 0 r 0 1 # 5386 ffs_range c a 1 1 1 0 r 0 0 # 5387 ffs_range c a 31 0 0 e r 0 31 # 5388 ffs_range c a 31 0 0 e r 22 14 # 5389 ffs_range c a 31 0 0 e r 1 30 # 5390 ffs_range c a 31 0 0 e r 16 31 # 5391 ffs_range c a 31 0 0 e r 0 9 # 5392 ffs_range c a 31 0 0 f r 0 31 # 5393 ffs_range c a 31 0 0 f r 27 7 # 5394 ffs_range c a 31 0 0 f r 16 25 # 5395 ffs_range c a 31 0 0 f r 0 31 # 5396 ffs_range c a 31 0 0 f r 0 23 # 5397 ffs_range c a 31 0 0 3 4 5 7 9 14 17 22 24 26 30 r 0 31 # 5398 ffs_range c a 31 0 0 0 2 3 5 12 13 18 20 23 26 27 28 r 4 0 # 5399 ffs_range c a 31 0 0 1 4 8 9 10 11 15 16 17 20 27 28 r 15 19 # 5400 ffs_range c a 31 0 0 0 4 7 11 14 16 17 21 22 23 27 28 29 30 r 29 31 # 5401 ffs_range c a 31 0 0 2 4 9 10 11 12 13 15 16 18 21 22 30 r 0 11 # 5402 ffs_range c a 31 0 1 e r 0 31 # 5403 ffs_range c a 31 0 1 e r 19 12 # 5404 ffs_range c a 31 0 1 e r 1 6 # 5405 ffs_range c a 31 0 1 e r 30 31 # 5406 ffs_range c a 31 0 1 e r 0 0 # 5407 ffs_range c a 31 0 1 f r 0 31 # 5408 ffs_range c a 31 0 1 f r 5 4 # 5409 ffs_range c a 31 0 1 f r 5 6 # 5410 ffs_range c a 31 0 1 f r 25 31 # 5411 ffs_range c a 31 0 1 f r 0 18 # 5412 ffs_range c a 31 0 1 1 3 7 12 14 15 16 17 20 23 25 26 27 30 r 0 31 # 5413 ffs_range c a 31 0 1 0 3 4 5 6 7 8 10 12 15 17 20 21 22 23 24 25 27 29 30 r 23 13 # 5414 ffs_range c a 31 0 1 0 1 3 4 6 11 14 16 21 26 30 r 7 13 # 5415 ffs_range c a 31 0 1 1 3 4 6 7 8 9 11 12 13 14 18 20 22 29 30 r 29 31 # 5416 ffs_range c a 31 0 1 0 1 9 11 12 13 17 19 25 26 27 29 r 0 5 # 5417 ffs_range c a 31 1 0 e r 0 31 # 5418 ffs_range c a 31 1 0 e r 2 0 # 5419 ffs_range c a 31 1 0 e r 13 26 # 5420 ffs_range c a 31 1 0 e r 15 31 # 5421 ffs_range c a 31 1 0 e r 0 5 # 5422 ffs_range c a 31 1 0 f r 0 31 # 5423 ffs_range c a 31 1 0 f r 23 4 # 5424 ffs_range c a 31 1 0 f r 2 3 # 5425 ffs_range c a 31 1 0 f r 30 31 # 5426 ffs_range c a 31 1 0 f r 0 1 # 5427 ffs_range c a 31 1 0 0 1 3 4 5 6 10 11 12 13 17 18 20 24 25 27 28 29 r 0 31 # 5428 ffs_range c a 31 1 0 1 2 4 5 8 9 10 11 12 13 18 22 23 25 26 28 29 r 17 7 # 5429 ffs_range c a 31 1 0 1 2 3 6 7 9 10 11 12 13 16 17 20 22 23 25 29 r 0 0 # 5430 ffs_range c a 31 1 0 1 2 4 5 6 9 12 13 15 17 20 22 23 24 25 29 30 r 4 31 # 5431 ffs_range c a 31 1 0 0 1 2 5 6 7 13 16 17 18 19 20 21 23 24 25 27 28 r 0 11 # 5432 ffs_range c a 31 1 1 e r 0 31 # 5433 ffs_range c a 31 1 1 e r 12 3 # 5434 ffs_range c a 31 1 1 e r 9 28 # 5435 ffs_range c a 31 1 1 e r 13 31 # 5436 ffs_range c a 31 1 1 e r 0 24 # 5437 ffs_range c a 31 1 1 f r 0 31 # 5438 ffs_range c a 31 1 1 f r 29 5 # 5439 ffs_range c a 31 1 1 f r 0 1 # 5440 ffs_range c a 31 1 1 f r 21 31 # 5441 ffs_range c a 31 1 1 f r 0 0 # 5442 ffs_range c a 31 1 1 0 3 6 8 10 11 12 14 15 20 22 23 26 27 29 r 0 31 # 5443 ffs_range c a 31 1 1 2 4 5 7 8 10 11 16 17 21 24 25 27 r 2 0 # 5444 ffs_range c a 31 1 1 0 3 6 7 9 11 13 15 17 19 20 21 22 23 25 26 28 29 r 2 6 # 5445 ffs_range c a 31 1 1 0 1 4 6 7 8 10 11 12 13 14 15 17 18 20 22 23 26 29 r 28 31 # 5446 ffs_range c a 31 1 1 0 1 3 8 10 11 13 15 16 19 20 22 27 29 r 0 0 # 5447 ffs_range c a 32 0 0 e r 0 32 # 5448 ffs_range c a 32 0 0 e r 25 10 # 5449 ffs_range c a 32 0 0 e r 12 21 # 5450 ffs_range c a 32 0 0 e r 6 32 # 5451 ffs_range c a 32 0 0 e r 0 9 # 5452 ffs_range c a 32 0 0 f r 0 32 # 5453 ffs_range c a 32 0 0 f r 29 17 # 5454 ffs_range c a 32 0 0 f r 4 6 # 5455 ffs_range c a 32 0 0 f r 7 32 # 5456 ffs_range c a 32 0 0 f r 0 28 # 5457 ffs_range c a 32 0 0 0 1 3 5 6 7 8 9 13 17 19 22 25 28 29 31 r 0 32 # 5458 ffs_range c a 32 0 0 0 1 2 3 5 6 10 11 12 17 19 20 24 26 27 31 r 6 3 # 5459 ffs_range c a 32 0 0 0 2 3 4 7 12 13 19 20 26 27 29 30 r 14 31 # 5460 ffs_range c a 32 0 0 3 5 6 7 9 12 13 14 16 18 19 20 23 24 25 27 29 30 31 r 16 32 # 5461 ffs_range c a 32 0 0 1 4 5 9 12 13 16 20 21 23 31 r 0 17 # 5462 ffs_range c a 32 0 1 e r 0 32 # 5463 ffs_range c a 32 0 1 e r 18 4 # 5464 ffs_range c a 32 0 1 e r 1 23 # 5465 ffs_range c a 32 0 1 e r 17 32 # 5466 ffs_range c a 32 0 1 e r 0 19 # 5467 ffs_range c a 32 0 1 f r 0 32 # 5468 ffs_range c a 32 0 1 f r 10 5 # 5469 ffs_range c a 32 0 1 f r 1 4 # 5470 ffs_range c a 32 0 1 f r 15 32 # 5471 ffs_range c a 32 0 1 f r 0 10 # 5472 ffs_range c a 32 0 1 0 2 3 4 5 6 7 12 14 15 16 18 21 22 23 24 25 27 29 31 r 0 32 # 5473 ffs_range c a 32 0 1 2 3 5 6 9 10 11 13 14 17 19 20 22 23 24 28 29 r 17 12 # 5474 ffs_range c a 32 0 1 2 3 4 6 7 10 12 13 16 17 20 22 24 25 27 28 r 6 15 # 5475 ffs_range c a 32 0 1 1 4 5 6 7 8 10 12 16 17 18 19 26 27 28 29 30 31 r 14 32 # 5476 ffs_range c a 32 0 1 2 4 5 11 12 14 15 17 18 19 23 25 28 r 0 15 # 5477 ffs_range c a 32 1 0 e r 0 32 # 5478 ffs_range c a 32 1 0 e r 1 0 # 5479 ffs_range c a 32 1 0 e r 6 25 # 5480 ffs_range c a 32 1 0 e r 10 32 # 5481 ffs_range c a 32 1 0 e r 0 3 # 5482 ffs_range c a 32 1 0 f r 0 32 # 5483 ffs_range c a 32 1 0 f r 3 0 # 5484 ffs_range c a 32 1 0 f r 18 25 # 5485 ffs_range c a 32 1 0 f r 13 32 # 5486 ffs_range c a 32 1 0 f r 0 29 # 5487 ffs_range c a 32 1 0 0 1 4 5 6 10 12 16 17 21 22 26 27 30 31 r 0 32 # 5488 ffs_range c a 32 1 0 1 4 6 8 9 11 13 18 19 23 24 28 31 r 31 17 # 5489 ffs_range c a 32 1 0 2 3 5 6 7 9 10 11 15 17 19 23 24 25 27 28 30 r 24 28 # 5490 ffs_range c a 32 1 0 3 5 6 7 8 11 14 15 21 24 26 27 28 29 31 r 10 32 # 5491 ffs_range c a 32 1 0 0 1 3 4 6 9 11 15 17 18 23 28 31 r 0 22 # 5492 ffs_range c a 32 1 1 e r 0 32 # 5493 ffs_range c a 32 1 1 e r 17 1 # 5494 ffs_range c a 32 1 1 e r 2 4 # 5495 ffs_range c a 32 1 1 e r 13 32 # 5496 ffs_range c a 32 1 1 e r 0 7 # 5497 ffs_range c a 32 1 1 f r 0 32 # 5498 ffs_range c a 32 1 1 f r 5 2 # 5499 ffs_range c a 32 1 1 f r 1 4 # 5500 ffs_range c a 32 1 1 f r 30 32 # 5501 ffs_range c a 32 1 1 f r 0 22 # 5502 ffs_range c a 32 1 1 2 7 8 12 13 14 16 17 18 23 24 28 29 30 r 0 32 # 5503 ffs_range c a 32 1 1 1 3 5 6 11 17 18 19 21 22 25 28 r 8 4 # 5504 ffs_range c a 32 1 1 2 6 7 13 17 20 21 24 26 28 29 r 6 27 # 5505 ffs_range c a 32 1 1 0 2 3 5 6 7 10 11 12 14 15 17 18 19 21 22 23 25 26 27 28 29 31 r 23 32 # 5506 ffs_range c a 32 1 1 0 2 3 5 7 10 11 13 15 17 20 23 24 26 27 30 r 0 32 # 5507 ffs_range c a 33 0 0 e r 0 33 # 5508 ffs_range c a 33 0 0 e r 6 3 # 5509 ffs_range c a 33 0 0 e r 3 11 # 5510 ffs_range c a 33 0 0 e r 3 33 # 5511 ffs_range c a 33 0 0 e r 0 25 # 5512 ffs_range c a 33 0 0 f r 0 33 # 5513 ffs_range c a 33 0 0 f r 6 3 # 5514 ffs_range c a 33 0 0 f r 9 23 # 5515 ffs_range c a 33 0 0 f r 1 33 # 5516 ffs_range c a 33 0 0 f r 0 8 # 5517 ffs_range c a 33 0 0 0 1 3 4 5 6 9 13 14 15 16 18 19 20 23 24 28 31 32 r 0 33 # 5518 ffs_range c a 33 0 0 0 1 2 4 6 7 15 18 19 21 22 23 25 26 29 31 32 r 1 0 # 5519 ffs_range c a 33 0 0 0 1 6 7 8 9 15 16 17 18 19 21 23 24 27 28 29 31 r 17 20 # 5520 ffs_range c a 33 0 0 0 2 4 5 6 10 13 14 15 16 17 19 20 21 22 23 24 25 29 30 31 r 28 33 # 5521 ffs_range c a 33 0 0 2 4 5 9 12 14 16 17 18 19 21 22 23 25 26 27 28 29 30 r 0 3 # 5522 ffs_range c a 33 0 1 e r 0 33 # 5523 ffs_range c a 33 0 1 e r 14 10 # 5524 ffs_range c a 33 0 1 e r 22 29 # 5525 ffs_range c a 33 0 1 e r 14 33 # 5526 ffs_range c a 33 0 1 e r 0 26 # 5527 ffs_range c a 33 0 1 f r 0 33 # 5528 ffs_range c a 33 0 1 f r 32 26 # 5529 ffs_range c a 33 0 1 f r 2 12 # 5530 ffs_range c a 33 0 1 f r 4 33 # 5531 ffs_range c a 33 0 1 f r 0 6 # 5532 ffs_range c a 33 0 1 0 1 2 3 4 6 7 8 9 10 11 12 13 14 15 17 19 20 21 28 31 r 0 33 # 5533 ffs_range c a 33 0 1 1 4 5 7 8 10 12 14 15 16 17 18 20 22 24 27 28 r 13 12 # 5534 ffs_range c a 33 0 1 0 3 7 9 12 17 20 21 22 23 24 25 26 27 30 32 r 12 26 # 5535 ffs_range c a 33 0 1 3 4 9 10 12 13 14 16 25 26 27 28 29 30 r 24 33 # 5536 ffs_range c a 33 0 1 2 3 4 5 7 10 12 13 14 17 19 21 22 24 25 28 29 30 r 0 13 # 5537 ffs_range c a 33 1 0 e r 0 33 # 5538 ffs_range c a 33 1 0 e r 6 5 # 5539 ffs_range c a 33 1 0 e r 14 17 # 5540 ffs_range c a 33 1 0 e r 32 33 # 5541 ffs_range c a 33 1 0 e r 0 12 # 5542 ffs_range c a 33 1 0 f r 0 33 # 5543 ffs_range c a 33 1 0 f r 10 9 # 5544 ffs_range c a 33 1 0 f r 0 9 # 5545 ffs_range c a 33 1 0 f r 28 33 # 5546 ffs_range c a 33 1 0 f r 0 12 # 5547 ffs_range c a 33 1 0 2 3 4 6 7 11 12 15 16 17 19 20 21 24 27 30 32 r 0 33 # 5548 ffs_range c a 33 1 0 0 2 4 6 8 12 15 17 18 21 22 25 26 27 28 30 31 r 11 10 # 5549 ffs_range c a 33 1 0 1 2 3 4 9 10 13 14 16 17 28 29 30 32 r 19 32 # 5550 ffs_range c a 33 1 0 0 2 4 5 6 7 8 9 10 12 13 14 19 20 21 24 25 28 29 30 r 18 33 # 5551 ffs_range c a 33 1 0 0 1 2 3 4 5 7 10 14 15 17 18 19 21 22 28 29 31 32 r 0 31 # 5552 ffs_range c a 33 1 1 e r 0 33 # 5553 ffs_range c a 33 1 1 e r 27 4 # 5554 ffs_range c a 33 1 1 e r 0 4 # 5555 ffs_range c a 33 1 1 e r 28 33 # 5556 ffs_range c a 33 1 1 e r 0 17 # 5557 ffs_range c a 33 1 1 f r 0 33 # 5558 ffs_range c a 33 1 1 f r 15 10 # 5559 ffs_range c a 33 1 1 f r 3 9 # 5560 ffs_range c a 33 1 1 f r 21 33 # 5561 ffs_range c a 33 1 1 f r 0 11 # 5562 ffs_range c a 33 1 1 0 1 2 3 6 8 10 12 13 14 17 19 22 24 26 28 31 32 r 0 33 # 5563 ffs_range c a 33 1 1 3 5 9 12 14 16 17 18 20 23 26 28 29 r 20 17 # 5564 ffs_range c a 33 1 1 1 2 3 9 11 12 13 14 16 17 19 21 22 23 24 28 30 32 r 10 17 # 5565 ffs_range c a 33 1 1 1 3 6 7 8 9 10 12 13 14 16 17 19 20 21 22 26 27 30 r 8 33 # 5566 ffs_range c a 33 1 1 1 2 4 5 8 9 11 15 16 19 21 24 26 27 28 r 0 14 # 5567 ffs_range c a 63 0 0 e r 0 63 # 5568 ffs_range c a 63 0 0 e r 55 34 # 5569 ffs_range c a 63 0 0 e r 38 46 # 5570 ffs_range c a 63 0 0 e r 48 63 # 5571 ffs_range c a 63 0 0 e r 0 0 # 5572 ffs_range c a 63 0 0 f r 0 63 # 5573 ffs_range c a 63 0 0 f r 12 6 # 5574 ffs_range c a 63 0 0 f r 2 63 # 5575 ffs_range c a 63 0 0 f r 27 63 # 5576 ffs_range c a 63 0 0 f r 0 32 # 5577 ffs_range c a 63 0 0 0 1 4 5 10 12 13 14 16 17 20 21 24 25 34 42 44 46 47 49 52 53 54 55 56 58 59 r 0 63 # 5578 ffs_range c a 63 0 0 0 1 2 3 4 8 9 12 13 14 15 17 19 20 21 22 23 24 25 26 27 29 30 32 33 35 37 39 46 53 54 55 56 57 58 60 61 62 r 39 38 # 5579 ffs_range c a 63 0 0 0 2 3 5 7 13 14 15 16 17 18 19 20 21 22 23 24 29 34 35 38 40 41 42 44 45 46 47 48 49 50 51 52 53 55 57 60 62 r 38 51 # 5580 ffs_range c a 63 0 0 0 1 2 3 4 6 7 9 12 14 15 16 17 18 19 21 22 24 31 34 36 37 38 40 43 44 46 47 49 54 56 57 58 r 27 63 # 5581 ffs_range c a 63 0 0 4 7 8 9 15 16 17 21 22 24 25 29 31 32 33 34 35 36 38 39 43 46 49 50 52 53 54 55 56 60 61 62 r 0 10 # 5582 ffs_range c a 63 0 1 e r 0 63 # 5583 ffs_range c a 63 0 1 e r 14 10 # 5584 ffs_range c a 63 0 1 e r 0 4 # 5585 ffs_range c a 63 0 1 e r 52 63 # 5586 ffs_range c a 63 0 1 e r 0 16 # 5587 ffs_range c a 63 0 1 f r 0 63 # 5588 ffs_range c a 63 0 1 f r 51 0 # 5589 ffs_range c a 63 0 1 f r 24 38 # 5590 ffs_range c a 63 0 1 f r 19 63 # 5591 ffs_range c a 63 0 1 f r 0 39 # 5592 ffs_range c a 63 0 1 1 2 4 5 6 7 8 9 10 11 12 15 18 19 21 22 23 24 26 27 28 29 34 37 38 41 44 48 51 53 54 58 r 0 63 # 5593 ffs_range c a 63 0 1 0 3 4 5 6 7 9 11 12 13 15 17 23 25 26 27 28 29 31 34 37 39 42 47 51 52 54 58 62 r 50 34 # 5594 ffs_range c a 63 0 1 0 6 7 11 13 15 18 19 20 21 22 24 26 29 30 31 35 38 39 40 41 44 45 48 49 50 51 52 53 55 r 11 48 # 5595 ffs_range c a 63 0 1 0 2 5 11 12 14 15 17 18 21 22 23 24 28 30 31 32 33 35 39 40 42 43 44 45 48 50 52 53 55 56 57 59 60 61 r 2 63 # 5596 ffs_range c a 63 0 1 0 1 2 5 6 9 10 14 16 17 19 20 21 22 23 25 28 29 31 32 33 34 35 36 37 40 42 44 45 48 49 51 52 53 56 57 58 59 60 61 62 r 0 52 # 5597 ffs_range c a 63 1 0 e r 0 63 # 5598 ffs_range c a 63 1 0 e r 46 30 # 5599 ffs_range c a 63 1 0 e r 12 32 # 5600 ffs_range c a 63 1 0 e r 12 63 # 5601 ffs_range c a 63 1 0 e r 0 14 # 5602 ffs_range c a 63 1 0 f r 0 63 # 5603 ffs_range c a 63 1 0 f r 47 3 # 5604 ffs_range c a 63 1 0 f r 18 53 # 5605 ffs_range c a 63 1 0 f r 7 63 # 5606 ffs_range c a 63 1 0 f r 0 14 # 5607 ffs_range c a 63 1 0 5 7 8 9 11 12 13 14 15 16 19 22 23 28 33 34 35 36 38 40 41 43 44 45 47 49 50 51 53 54 58 62 r 0 63 # 5608 ffs_range c a 63 1 0 0 2 3 7 10 11 13 20 22 24 28 29 31 36 37 39 42 43 47 48 49 50 51 53 54 58 59 60 62 r 51 5 # 5609 ffs_range c a 63 1 0 1 2 4 5 6 8 9 17 18 20 27 30 34 39 41 46 50 52 54 55 56 57 58 59 r 0 6 # 5610 ffs_range c a 63 1 0 1 3 6 10 11 15 16 17 20 22 23 25 27 29 30 31 32 33 38 39 40 41 42 44 46 47 51 52 54 57 58 59 60 61 r 37 63 # 5611 ffs_range c a 63 1 0 0 1 3 6 10 12 13 15 18 20 21 23 24 26 27 30 31 34 35 36 37 39 41 43 44 46 47 48 49 51 52 53 54 60 61 r 0 60 # 5612 ffs_range c a 63 1 1 e r 0 63 # 5613 ffs_range c a 63 1 1 e r 25 0 # 5614 ffs_range c a 63 1 1 e r 6 16 # 5615 ffs_range c a 63 1 1 e r 1 63 # 5616 ffs_range c a 63 1 1 e r 0 40 # 5617 ffs_range c a 63 1 1 f r 0 63 # 5618 ffs_range c a 63 1 1 f r 16 3 # 5619 ffs_range c a 63 1 1 f r 31 44 # 5620 ffs_range c a 63 1 1 f r 13 63 # 5621 ffs_range c a 63 1 1 f r 0 48 # 5622 ffs_range c a 63 1 1 0 2 3 5 8 10 11 12 13 16 17 23 29 30 33 34 35 36 38 40 41 44 45 46 47 48 50 52 55 59 r 0 63 # 5623 ffs_range c a 63 1 1 1 4 5 9 10 11 12 13 14 16 21 25 29 31 32 33 34 38 39 42 43 45 47 49 51 52 53 54 55 56 59 61 62 r 4 1 # 5624 ffs_range c a 63 1 1 0 2 3 5 7 8 10 11 12 13 15 19 22 23 24 25 26 29 30 33 35 36 39 40 42 47 48 49 50 51 54 55 57 59 60 62 r 10 33 # 5625 ffs_range c a 63 1 1 1 3 7 9 11 14 15 16 17 22 24 26 30 31 35 36 37 38 40 45 48 50 52 53 58 59 60 r 4 63 # 5626 ffs_range c a 63 1 1 0 1 2 4 6 7 8 9 12 14 15 16 17 18 19 23 24 25 27 29 30 32 34 35 36 38 39 42 44 45 47 51 52 53 54 55 56 r 0 49 # 5627 ffs_range c a 64 0 0 e r 0 64 # 5628 ffs_range c a 64 0 0 e r 27 22 # 5629 ffs_range c a 64 0 0 e r 14 20 # 5630 ffs_range c a 64 0 0 e r 62 64 # 5631 ffs_range c a 64 0 0 e r 0 50 # 5632 ffs_range c a 64 0 0 f r 0 64 # 5633 ffs_range c a 64 0 0 f r 40 35 # 5634 ffs_range c a 64 0 0 f r 3 22 # 5635 ffs_range c a 64 0 0 f r 16 64 # 5636 ffs_range c a 64 0 0 f r 0 28 # 5637 ffs_range c a 64 0 0 1 2 3 6 7 10 11 12 15 17 20 22 23 24 26 28 29 32 34 35 36 37 38 41 43 44 46 50 52 53 54 57 58 60 r 0 64 # 5638 ffs_range c a 64 0 0 0 3 6 12 14 15 16 22 25 26 27 28 31 32 33 35 39 40 41 42 45 49 50 52 53 54 57 60 61 63 r 55 19 # 5639 ffs_range c a 64 0 0 0 4 5 7 9 10 11 12 13 14 15 17 20 21 26 27 28 29 31 32 33 34 35 36 38 40 41 43 44 45 46 48 50 51 53 54 55 57 60 61 62 63 r 36 47 # 5640 ffs_range c a 64 0 0 0 3 4 7 10 11 13 23 24 26 27 28 30 31 32 33 35 37 38 41 43 45 46 47 52 53 57 61 62 r 36 64 # 5641 ffs_range c a 64 0 0 4 5 6 7 11 15 16 17 19 20 21 22 23 29 31 37 38 43 45 46 50 53 57 58 60 61 r 0 37 # 5642 ffs_range c a 64 0 1 e r 0 64 # 5643 ffs_range c a 64 0 1 e r 9 2 # 5644 ffs_range c a 64 0 1 e r 27 29 # 5645 ffs_range c a 64 0 1 e r 17 64 # 5646 ffs_range c a 64 0 1 e r 0 3 # 5647 ffs_range c a 64 0 1 f r 0 64 # 5648 ffs_range c a 64 0 1 f r 5 1 # 5649 ffs_range c a 64 0 1 f r 12 29 # 5650 ffs_range c a 64 0 1 f r 41 64 # 5651 ffs_range c a 64 0 1 f r 0 30 # 5652 ffs_range c a 64 0 1 0 2 3 8 9 10 11 14 18 19 20 21 24 26 27 32 36 38 39 42 43 44 45 48 51 52 53 54 55 57 58 59 61 62 63 r 0 64 # 5653 ffs_range c a 64 0 1 3 4 5 6 7 10 13 17 18 21 23 24 25 28 32 37 39 43 45 46 49 50 51 52 53 54 55 56 59 60 r 42 9 # 5654 ffs_range c a 64 0 1 0 5 6 7 8 9 11 13 14 16 17 19 20 22 23 25 30 32 34 41 42 43 44 45 47 52 55 57 62 r 5 64 # 5655 ffs_range c a 64 0 1 0 2 3 4 6 7 11 13 15 17 20 24 26 27 28 29 36 38 40 42 43 46 47 49 54 56 57 59 60 r 58 64 # 5656 ffs_range c a 64 0 1 0 3 5 6 7 8 9 11 18 19 22 23 24 25 26 28 29 30 31 34 35 38 39 42 43 44 48 51 52 54 56 57 58 59 60 61 62 r 0 23 # 5657 ffs_range c a 64 1 0 e r 0 64 # 5658 ffs_range c a 64 1 0 e r 44 43 # 5659 ffs_range c a 64 1 0 e r 28 32 # 5660 ffs_range c a 64 1 0 e r 53 64 # 5661 ffs_range c a 64 1 0 e r 0 43 # 5662 ffs_range c a 64 1 0 f r 0 64 # 5663 ffs_range c a 64 1 0 f r 53 33 # 5664 ffs_range c a 64 1 0 f r 15 29 # 5665 ffs_range c a 64 1 0 f r 5 64 # 5666 ffs_range c a 64 1 0 f r 0 23 # 5667 ffs_range c a 64 1 0 1 4 9 14 16 21 23 25 27 28 29 30 31 32 35 36 37 38 43 48 49 50 52 54 59 61 62 r 0 64 # 5668 ffs_range c a 64 1 0 2 3 5 7 9 10 11 13 15 16 20 22 23 24 25 26 28 29 35 39 45 47 48 49 51 52 54 55 57 58 60 r 58 38 # 5669 ffs_range c a 64 1 0 0 6 7 8 9 12 18 19 20 21 22 23 27 28 31 32 33 37 38 40 42 43 44 45 53 57 61 62 r 15 16 # 5670 ffs_range c a 64 1 0 1 4 6 7 9 10 11 13 14 20 21 23 26 28 32 33 34 35 36 37 38 40 42 43 45 47 49 51 52 54 56 57 59 60 61 62 63 r 14 64 # 5671 ffs_range c a 64 1 0 0 1 2 4 5 8 10 11 12 15 16 18 21 23 25 26 28 29 31 32 33 35 36 38 39 40 41 42 47 49 51 52 54 57 58 60 63 r 0 50 # 5672 ffs_range c a 64 1 1 e r 0 64 # 5673 ffs_range c a 64 1 1 e r 64 47 # 5674 ffs_range c a 64 1 1 e r 48 58 # 5675 ffs_range c a 64 1 1 e r 1 64 # 5676 ffs_range c a 64 1 1 e r 0 53 # 5677 ffs_range c a 64 1 1 f r 0 64 # 5678 ffs_range c a 64 1 1 f r 9 8 # 5679 ffs_range c a 64 1 1 f r 34 55 # 5680 ffs_range c a 64 1 1 f r 11 64 # 5681 ffs_range c a 64 1 1 f r 0 63 # 5682 ffs_range c a 64 1 1 2 4 5 9 10 12 14 17 19 21 22 23 24 25 26 28 30 32 33 34 35 38 39 41 44 46 48 52 54 55 57 61 62 r 0 64 # 5683 ffs_range c a 64 1 1 0 1 7 8 11 12 13 15 17 18 21 23 24 26 29 30 35 37 41 43 44 45 46 47 48 49 52 55 56 60 62 r 30 5 # 5684 ffs_range c a 64 1 1 1 2 3 7 10 11 13 14 18 19 21 22 25 26 31 35 36 37 38 39 41 42 44 45 46 49 50 52 53 54 56 57 58 60 r 26 43 # 5685 ffs_range c a 64 1 1 0 2 3 5 16 19 20 22 23 24 25 26 28 29 30 31 33 34 35 36 42 43 44 47 48 49 50 51 53 58 61 r 51 64 # 5686 ffs_range c a 64 1 1 6 7 9 10 13 16 17 18 19 23 25 27 29 32 33 34 37 40 42 46 49 51 54 55 57 58 60 62 63 r 0 40 # 5687 ffs_range c a 65 0 0 e r 0 65 # 5688 ffs_range c a 65 0 0 e r 46 23 # 5689 ffs_range c a 65 0 0 e r 2 37 # 5690 ffs_range c a 65 0 0 e r 32 65 # 5691 ffs_range c a 65 0 0 e r 0 52 # 5692 ffs_range c a 65 0 0 f r 0 65 # 5693 ffs_range c a 65 0 0 f r 0 0 # 5694 ffs_range c a 65 0 0 f r 31 54 # 5695 ffs_range c a 65 0 0 f r 53 65 # 5696 ffs_range c a 65 0 0 f r 0 32 # 5697 ffs_range c a 65 0 0 5 6 7 8 9 11 13 15 16 18 19 21 22 24 25 31 33 35 36 38 40 44 45 47 48 49 52 54 55 56 61 62 63 r 0 65 # 5698 ffs_range c a 65 0 0 1 4 5 8 9 11 13 14 19 20 21 22 25 26 27 28 29 32 33 34 35 38 45 46 47 49 52 60 61 63 r 17 12 # 5699 ffs_range c a 65 0 0 0 4 5 6 8 9 10 11 12 13 16 18 20 21 23 24 27 28 29 31 33 35 37 40 43 46 48 49 51 52 53 54 55 59 60 61 62 r 27 40 # 5700 ffs_range c a 65 0 0 0 1 4 5 6 8 14 15 16 17 18 19 20 21 23 24 25 26 29 32 33 34 36 37 38 39 40 42 44 45 47 49 52 53 55 56 60 61 62 63 64 r 13 65 # 5701 ffs_range c a 65 0 0 6 8 10 11 14 15 16 17 20 22 25 26 29 30 31 34 36 37 38 39 41 42 45 48 49 50 51 52 54 57 58 59 60 61 63 r 0 11 # 5702 ffs_range c a 65 0 1 e r 0 65 # 5703 ffs_range c a 65 0 1 e r 33 21 # 5704 ffs_range c a 65 0 1 e r 5 43 # 5705 ffs_range c a 65 0 1 e r 23 65 # 5706 ffs_range c a 65 0 1 e r 0 21 # 5707 ffs_range c a 65 0 1 f r 0 65 # 5708 ffs_range c a 65 0 1 f r 0 0 # 5709 ffs_range c a 65 0 1 f r 9 16 # 5710 ffs_range c a 65 0 1 f r 45 65 # 5711 ffs_range c a 65 0 1 f r 0 43 # 5712 ffs_range c a 65 0 1 2 4 5 6 7 9 10 12 13 14 16 18 21 28 29 30 32 33 35 36 38 41 43 44 48 49 50 52 54 56 57 58 60 61 62 63 r 0 65 # 5713 ffs_range c a 65 0 1 1 4 6 7 8 9 12 13 15 16 18 19 22 26 28 29 30 33 34 38 42 48 51 52 53 60 r 43 10 # 5714 ffs_range c a 65 0 1 0 1 2 4 8 11 13 19 21 23 24 28 30 33 34 36 37 39 41 42 43 44 45 46 50 51 55 56 57 62 64 r 2 4 # 5715 ffs_range c a 65 0 1 0 1 3 7 8 10 12 16 18 19 21 22 23 24 26 34 36 39 40 42 43 44 47 48 51 52 54 55 56 59 60 61 r 1 65 # 5716 ffs_range c a 65 0 1 0 1 2 4 5 6 7 9 10 11 13 14 15 16 17 20 22 25 30 31 37 38 39 40 41 44 49 50 52 53 54 56 58 60 64 r 0 27 # 5717 ffs_range c a 65 1 0 e r 0 65 # 5718 ffs_range c a 65 1 0 e r 13 2 # 5719 ffs_range c a 65 1 0 e r 9 25 # 5720 ffs_range c a 65 1 0 e r 25 65 # 5721 ffs_range c a 65 1 0 e r 0 23 # 5722 ffs_range c a 65 1 0 f r 0 65 # 5723 ffs_range c a 65 1 0 f r 29 3 # 5724 ffs_range c a 65 1 0 f r 9 13 # 5725 ffs_range c a 65 1 0 f r 47 65 # 5726 ffs_range c a 65 1 0 f r 0 62 # 5727 ffs_range c a 65 1 0 0 3 4 6 7 8 9 12 13 14 17 18 19 25 26 27 28 29 30 31 36 40 42 43 45 47 48 49 53 55 58 60 64 r 0 65 # 5728 ffs_range c a 65 1 0 0 3 4 5 6 8 9 10 11 14 16 19 20 23 24 25 26 28 31 32 33 34 36 37 38 39 40 42 43 44 45 47 48 49 50 51 52 53 54 55 56 57 59 60 61 63 r 51 48 # 5729 ffs_range c a 65 1 0 1 2 3 4 6 7 10 13 16 18 19 20 21 23 24 25 30 31 33 34 38 39 40 41 44 46 48 49 51 57 58 59 62 63 r 39 63 # 5730 ffs_range c a 65 1 0 1 2 4 5 8 9 12 13 17 18 19 21 24 25 27 29 30 31 32 33 34 35 36 42 46 47 49 50 51 61 63 64 r 0 65 # 5731 ffs_range c a 65 1 0 0 2 3 4 7 9 10 12 14 15 16 18 20 22 24 25 27 28 29 31 33 34 39 42 45 46 49 50 54 55 57 58 60 r 0 50 # 5732 ffs_range c a 65 1 1 e r 0 65 # 5733 ffs_range c a 65 1 1 e r 38 21 # 5734 ffs_range c a 65 1 1 e r 8 43 # 5735 ffs_range c a 65 1 1 e r 21 65 # 5736 ffs_range c a 65 1 1 e r 0 49 # 5737 ffs_range c a 65 1 1 f r 0 65 # 5738 ffs_range c a 65 1 1 f r 61 37 # 5739 ffs_range c a 65 1 1 f r 38 56 # 5740 ffs_range c a 65 1 1 f r 25 65 # 5741 ffs_range c a 65 1 1 f r 0 26 # 5742 ffs_range c a 65 1 1 1 2 5 6 7 8 10 11 12 13 15 18 20 22 24 29 31 33 34 35 36 37 38 39 40 41 42 43 44 46 48 49 50 51 52 54 55 56 59 62 63 r 0 65 # 5743 ffs_range c a 65 1 1 0 7 10 11 12 13 15 16 18 22 23 24 25 26 28 29 30 34 36 40 42 43 47 48 51 52 54 57 58 59 63 64 r 57 19 # 5744 ffs_range c a 65 1 1 1 2 3 4 5 6 10 12 15 16 17 18 20 23 24 25 27 29 30 31 32 33 34 35 36 39 40 43 45 46 50 52 55 56 57 58 60 61 63 r 11 15 # 5745 ffs_range c a 65 1 1 1 2 8 10 12 18 21 23 24 25 27 29 31 34 35 36 40 42 44 45 46 50 51 53 54 55 56 58 63 64 r 56 65 # 5746 ffs_range c a 65 1 1 0 2 3 4 7 8 9 10 11 15 18 21 22 25 27 28 30 32 33 35 37 40 42 43 46 47 48 49 50 52 53 56 57 62 63 64 r 0 53 # 5747 ffs_range c a 211 0 0 e r 0 211 # 5748 ffs_range c a 211 0 0 e r 132 123 # 5749 ffs_range c a 211 0 0 e r 128 145 # 5750 ffs_range c a 211 0 0 e r 114 211 # 5751 ffs_range c a 211 0 0 e r 0 0 # 5752 ffs_range c a 211 0 0 f r 0 211 # 5753 ffs_range c a 211 0 0 f r 83 19 # 5754 ffs_range c a 211 0 0 f r 72 88 # 5755 ffs_range c a 211 0 0 f r 18 211 # 5756 ffs_range c a 211 0 0 f r 0 10 # 5757 ffs_range c a 211 0 0 0 2 3 4 5 11 12 14 15 17 23 25 28 29 31 37 39 41 42 43 45 46 47 48 49 50 51 54 55 57 60 61 65 66 67 68 70 71 72 73 74 77 78 80 81 85 87 88 89 91 92 93 104 106 108 109 110 111 112 113 114 116 119 120 121 122 123 126 127 128 134 136 138 139 141 143 144 147 148 150 151 153 155 158 159 160 161 165 166 169 170 171 174 176 177 178 179 181 183 185 187 190 193 195 196 198 200 201 205 206 208 209 r 0 211 # 5758 ffs_range c a 211 0 0 2 4 5 6 7 9 14 15 18 19 21 23 27 31 32 33 34 35 36 37 39 40 41 43 46 47 48 49 50 51 52 54 59 61 64 66 71 73 74 75 77 78 80 81 83 85 87 89 91 92 93 94 97 98 99 102 103 105 106 107 108 109 111 112 114 118 119 123 127 130 131 132 134 137 139 140 141 142 143 147 148 151 152 153 154 159 160 161 162 163 165 167 168 169 170 171 172 174 175 176 178 179 182 185 187 189 190 192 193 196 197 198 199 200 201 202 205 208 210 r 193 64 # 5759 ffs_range c a 211 0 0 0 1 2 6 7 9 10 11 13 14 15 16 18 19 22 23 24 26 27 31 36 39 42 45 50 53 60 61 64 65 66 67 70 73 74 75 78 79 80 81 84 85 89 90 101 102 103 104 105 106 109 110 112 115 116 117 118 120 121 124 125 126 129 130 131 132 133 134 135 136 138 141 143 145 146 148 149 151 153 154 156 157 158 160 162 163 165 167 173 175 176 178 179 180 186 189 190 191 193 194 199 200 201 205 206 208 209 210 r 93 156 # 5760 ffs_range c a 211 0 0 2 3 11 12 13 18 22 25 28 30 32 33 37 40 41 43 44 45 50 51 54 55 58 61 62 67 69 72 73 75 76 79 80 82 84 85 86 88 89 90 92 93 94 98 102 104 105 107 109 110 112 115 118 121 122 127 128 131 132 133 135 136 142 144 146 147 148 149 152 153 157 158 166 168 170 172 176 181 182 184 191 192 193 194 195 197 201 205 206 210 r 169 211 # 5761 ffs_range c a 211 0 0 0 3 4 5 6 7 10 11 13 14 16 18 23 26 27 29 30 33 35 36 38 39 40 41 42 43 45 53 55 59 60 67 68 70 72 73 76 77 78 82 83 85 89 96 97 99 100 103 105 108 110 111 114 115 119 122 124 126 127 130 132 133 136 137 138 140 141 147 151 152 155 156 158 160 161 163 164 165 170 172 174 176 178 180 182 183 184 186 187 189 193 194 198 199 201 206 207 208 209 r 0 25 # 5762 ffs_range c a 211 0 1 e r 0 211 # 5763 ffs_range c a 211 0 1 e r 63 22 # 5764 ffs_range c a 211 0 1 e r 11 111 # 5765 ffs_range c a 211 0 1 e r 31 211 # 5766 ffs_range c a 211 0 1 e r 0 128 # 5767 ffs_range c a 211 0 1 f r 0 211 # 5768 ffs_range c a 211 0 1 f r 65 55 # 5769 ffs_range c a 211 0 1 f r 1 36 # 5770 ffs_range c a 211 0 1 f r 23 211 # 5771 ffs_range c a 211 0 1 f r 0 141 # 5772 ffs_range c a 211 0 1 3 6 7 8 12 16 18 20 25 27 32 33 36 37 39 41 43 44 47 48 51 52 53 54 55 58 59 60 64 66 67 69 70 71 72 74 75 76 78 79 80 81 84 88 90 92 94 95 96 97 98 100 101 102 104 105 107 108 109 111 112 113 115 117 118 121 122 123 125 126 127 134 136 137 138 139 140 142 143 145 146 147 148 149 151 152 153 154 155 156 157 158 166 169 175 177 178 179 180 181 182 184 185 187 188 190 191 192 196 198 199 200 206 207 209 210 r 0 211 # 5773 ffs_range c a 211 0 1 1 2 3 4 5 9 13 14 15 16 19 21 22 27 28 30 32 34 35 39 40 41 44 49 51 55 56 57 58 59 60 62 63 64 65 66 69 70 72 74 77 78 79 80 82 85 86 88 89 90 91 93 94 96 104 106 109 111 112 113 116 118 119 120 121 124 127 128 129 130 136 139 140 141 142 143 144 147 152 153 154 155 159 163 164 165 166 167 168 170 171 173 174 175 176 178 180 182 183 185 188 189 193 194 197 201 203 204 206 207 208 r 164 98 # 5774 ffs_range c a 211 0 1 2 3 4 6 7 8 11 13 17 18 22 23 25 26 27 28 32 35 36 38 39 42 43 45 46 47 48 49 50 51 53 54 56 59 60 61 62 63 66 69 71 73 74 75 76 77 78 79 81 82 83 84 88 91 94 97 98 99 100 101 102 104 105 107 110 111 112 114 115 116 117 119 122 123 124 125 128 129 131 132 135 136 137 138 141 146 151 152 157 158 160 161 163 165 166 168 169 170 171 175 178 179 185 186 187 188 190 195 196 197 198 199 200 201 202 204 205 206 209 r 41 96 # 5775 ffs_range c a 211 0 1 0 1 2 3 4 9 10 11 14 18 25 28 31 35 36 37 40 41 42 45 47 52 54 55 61 62 63 64 66 67 69 70 72 73 74 76 79 80 81 89 90 91 93 94 99 105 106 107 110 111 116 117 118 120 121 125 126 127 129 131 133 136 139 140 142 144 146 147 149 150 155 158 159 162 164 166 167 168 170 171 172 173 174 175 177 178 179 181 182 183 184 186 188 189 190 191 192 193 195 196 198 199 200 203 206 209 r 77 211 # 5776 ffs_range c a 211 0 1 2 4 5 6 9 13 20 21 23 29 31 32 33 35 36 37 40 41 42 44 46 49 50 52 55 56 57 59 61 62 64 65 68 70 71 74 75 76 77 80 81 85 87 89 90 91 92 93 96 97 98 99 101 107 109 111 112 113 115 117 118 119 120 121 122 123 124 132 133 134 143 145 146 147 148 149 150 151 152 153 154 155 157 162 165 169 170 171 174 177 180 181 183 184 187 189 194 198 199 200 201 202 206 207 209 r 0 42 # 5777 ffs_range c a 211 1 0 e r 0 211 # 5778 ffs_range c a 211 1 0 e r 58 56 # 5779 ffs_range c a 211 1 0 e r 52 176 # 5780 ffs_range c a 211 1 0 e r 51 211 # 5781 ffs_range c a 211 1 0 e r 0 73 # 5782 ffs_range c a 211 1 0 f r 0 211 # 5783 ffs_range c a 211 1 0 f r 60 21 # 5784 ffs_range c a 211 1 0 f r 127 140 # 5785 ffs_range c a 211 1 0 f r 92 211 # 5786 ffs_range c a 211 1 0 f r 0 9 # 5787 ffs_range c a 211 1 0 0 1 2 4 5 7 8 9 13 15 16 17 18 19 20 22 23 24 27 28 30 33 34 37 40 45 49 56 57 58 61 62 64 65 66 68 69 71 73 75 76 81 83 85 87 91 95 97 99 100 101 102 104 105 109 110 111 112 114 116 121 123 126 129 132 134 138 139 141 142 144 145 146 147 148 149 152 153 155 157 159 160 161 163 168 172 173 174 175 176 178 179 189 192 195 196 200 201 202 203 204 206 208 209 r 0 211 # 5788 ffs_range c a 211 1 0 3 5 6 7 9 11 13 17 18 19 21 22 26 27 29 31 32 33 36 41 43 47 50 51 52 53 54 56 57 60 61 62 63 68 69 73 74 75 78 81 84 86 87 90 91 93 94 95 97 98 100 102 105 108 110 114 115 117 118 119 121 122 123 124 130 132 137 138 140 141 142 144 145 148 149 152 153 154 158 159 160 163 164 165 169 172 174 175 176 177 179 180 182 183 185 187 189 190 196 197 198 200 202 205 208 r 58 26 # 5789 ffs_range c a 211 1 0 4 6 7 11 12 13 14 19 21 23 24 25 26 28 32 33 35 39 41 42 46 47 48 49 50 51 52 53 54 55 56 57 59 61 62 64 66 68 73 75 78 83 86 88 89 90 92 93 98 100 101 104 105 106 109 110 113 115 118 121 123 124 125 130 134 137 138 142 143 147 148 150 151 154 158 159 160 161 163 164 168 169 170 173 175 177 178 179 181 182 183 185 187 190 192 195 201 202 203 204 206 207 208 209 210 r 27 37 # 5790 ffs_range c a 211 1 0 0 1 2 3 9 12 14 16 18 19 21 23 24 26 27 29 32 33 37 38 39 40 43 44 48 53 54 57 58 59 60 63 65 66 67 68 69 72 73 75 76 79 80 82 83 85 88 95 99 100 101 103 104 105 106 107 109 111 114 115 122 123 124 125 126 133 135 137 138 139 140 142 144 145 148 152 155 162 163 165 166 167 168 171 172 176 177 178 179 185 187 191 192 193 196 198 199 200 202 204 206 207 209 210 r 161 211 # 5791 ffs_range c a 211 1 0 0 2 5 13 14 16 17 19 23 24 26 28 30 31 32 35 37 39 41 43 48 49 56 57 59 62 64 68 69 73 74 75 76 79 80 81 87 89 90 91 95 96 99 102 103 105 106 112 116 117 120 121 125 130 132 133 136 137 141 145 148 149 150 151 152 156 160 162 163 165 168 169 170 175 177 178 180 181 184 186 187 188 191 192 193 194 196 198 199 200 204 205 207 208 r 0 63 # 5792 ffs_range c a 211 1 1 e r 0 211 # 5793 ffs_range c a 211 1 1 e r 90 47 # 5794 ffs_range c a 211 1 1 e r 80 100 # 5795 ffs_range c a 211 1 1 e r 178 211 # 5796 ffs_range c a 211 1 1 e r 0 128 # 5797 ffs_range c a 211 1 1 f r 0 211 # 5798 ffs_range c a 211 1 1 f r 198 196 # 5799 ffs_range c a 211 1 1 f r 161 166 # 5800 ffs_range c a 211 1 1 f r 119 211 # 5801 ffs_range c a 211 1 1 f r 0 18 # 5802 ffs_range c a 211 1 1 1 2 5 10 11 13 14 15 20 23 26 29 30 31 32 33 34 35 36 39 40 41 42 43 44 45 46 51 52 53 54 56 63 66 80 81 83 84 86 87 88 91 92 94 96 97 98 101 105 106 108 110 111 115 116 118 120 121 123 131 133 136 137 138 139 141 145 150 155 156 157 158 162 166 169 170 172 174 178 179 180 183 184 185 186 188 189 190 193 194 195 196 197 198 200 201 202 203 205 207 209 210 r 0 211 # 5803 ffs_range c a 211 1 1 0 3 6 7 11 12 20 23 24 25 26 27 29 30 35 36 37 41 45 46 48 50 51 52 54 55 57 58 60 61 62 65 66 68 70 73 74 75 76 79 80 82 87 89 91 92 93 95 96 99 100 101 104 106 107 108 114 115 116 118 119 121 122 123 124 126 127 130 136 138 140 142 144 145 149 152 155 156 158 160 161 163 165 170 172 173 176 177 178 179 180 183 184 185 186 187 189 190 192 199 200 204 205 206 207 209 210 r 189 81 # 5804 ffs_range c a 211 1 1 1 4 6 9 11 15 16 21 24 25 26 27 28 29 31 32 33 35 37 40 44 46 47 48 61 64 66 70 72 73 74 75 77 78 81 83 85 87 89 92 94 95 96 97 98 100 101 102 103 104 105 111 113 115 116 117 118 121 122 126 129 130 132 133 134 136 138 140 142 143 146 151 154 155 156 157 159 160 163 168 169 176 178 180 182 185 188 189 191 194 195 196 197 198 200 202 204 206 207 208 r 27 197 # 5805 ffs_range c a 211 1 1 1 4 7 8 10 12 13 14 15 16 18 23 24 26 31 32 34 35 36 38 39 41 42 45 51 52 53 54 55 56 57 60 63 64 66 67 69 70 71 73 75 76 77 81 86 88 90 91 92 94 95 97 98 99 100 102 107 111 115 116 119 122 125 126 127 128 129 130 133 134 137 139 141 142 143 147 149 150 151 152 159 160 166 167 170 171 172 173 177 179 180 181 182 183 185 187 189 190 195 198 199 201 204 205 206 207 208 209 210 r 162 211 # 5806 ffs_range c a 211 1 1 0 5 7 9 10 11 15 16 20 21 22 23 24 26 27 30 32 34 36 44 45 48 49 50 51 52 54 55 56 58 60 62 63 64 65 67 69 72 74 75 80 81 83 85 90 92 93 96 97 100 102 103 104 105 108 109 111 112 113 114 116 118 121 122 124 126 127 129 130 131 133 134 138 140 143 144 146 147 149 150 151 153 156 157 158 160 161 164 165 166 169 170 172 174 175 177 178 179 180 181 182 190 193 194 196 197 207 210 r 0 191 # 5807 ffs_range c a 224 0 0 e r 0 224 # 5808 ffs_range c a 224 0 0 e r 116 98 # 5809 ffs_range c a 224 0 0 e r 22 71 # 5810 ffs_range c a 224 0 0 e r 35 224 # 5811 ffs_range c a 224 0 0 e r 0 140 # 5812 ffs_range c a 224 0 0 f r 0 224 # 5813 ffs_range c a 224 0 0 f r 209 37 # 5814 ffs_range c a 224 0 0 f r 83 149 # 5815 ffs_range c a 224 0 0 f r 32 224 # 5816 ffs_range c a 224 0 0 f r 0 116 # 5817 ffs_range c a 224 0 0 0 3 5 6 7 8 12 13 16 18 19 23 27 29 30 31 33 34 35 36 37 39 41 45 46 51 52 53 55 57 58 59 60 62 66 70 74 75 76 80 81 82 83 84 86 90 91 92 93 98 100 101 102 103 104 105 106 107 109 112 114 116 117 118 119 121 122 126 127 136 137 140 143 144 149 152 154 156 158 160 165 168 169 170 171 175 176 177 179 180 181 186 188 189 191 192 193 194 196 198 201 204 205 207 209 210 212 214 218 222 r 0 224 # 5818 ffs_range c a 224 0 0 1 2 3 5 7 9 13 15 16 17 19 21 23 25 26 27 29 30 32 33 37 39 40 45 47 48 50 51 53 54 55 56 57 58 60 61 62 63 67 70 71 72 79 80 81 82 84 85 87 92 93 94 100 103 104 105 106 114 116 122 125 126 127 128 131 132 133 135 139 140 142 143 144 145 147 148 152 153 154 156 157 159 165 167 169 175 178 180 181 182 183 184 185 187 188 189 193 194 196 200 201 202 205 209 210 212 215 217 218 219 220 223 r 86 2 # 5819 ffs_range c a 224 0 0 3 4 9 11 13 14 15 17 19 20 21 22 24 25 26 27 28 29 30 34 35 39 41 42 44 49 51 52 59 64 68 69 71 72 73 75 77 79 80 81 82 83 87 89 90 91 93 95 97 99 100 102 103 106 107 110 115 116 122 128 129 131 135 136 138 142 143 144 147 148 149 150 151 153 157 158 160 162 163 164 166 167 168 172 174 175 176 178 181 183 184 185 187 188 191 192 194 195 196 198 200 202 203 204 205 206 209 210 211 217 220 223 r 46 79 # 5820 ffs_range c a 224 0 0 4 7 12 13 15 17 19 20 21 22 25 26 31 32 33 35 37 38 39 40 43 44 45 49 54 55 56 60 61 63 64 65 66 69 72 73 75 77 79 81 83 86 88 89 90 91 92 94 96 97 98 101 102 104 108 109 112 113 116 119 123 128 130 133 134 135 142 146 150 151 154 155 156 159 163 166 167 168 169 170 173 174 175 176 178 180 181 185 189 190 191 195 203 208 210 213 214 215 216 217 220 222 223 r 73 224 # 5821 ffs_range c a 224 0 0 1 2 3 6 7 8 9 10 11 14 15 16 19 20 22 23 26 27 29 31 35 44 45 47 50 52 53 56 57 58 60 62 66 67 68 72 74 75 77 79 82 84 87 91 92 96 99 100 102 103 104 105 108 109 117 119 122 124 125 129 131 134 136 138 139 141 142 146 147 149 151 157 158 161 163 166 169 170 171 172 173 175 177 178 179 180 182 186 187 188 193 195 196 198 200 201 203 204 206 212 214 216 217 218 219 223 r 0 196 # 5822 ffs_range c a 224 0 1 e r 0 224 # 5823 ffs_range c a 224 0 1 e r 40 15 # 5824 ffs_range c a 224 0 1 e r 24 70 # 5825 ffs_range c a 224 0 1 e r 207 224 # 5826 ffs_range c a 224 0 1 e r 0 58 # 5827 ffs_range c a 224 0 1 f r 0 224 # 5828 ffs_range c a 224 0 1 f r 32 11 # 5829 ffs_range c a 224 0 1 f r 27 48 # 5830 ffs_range c a 224 0 1 f r 43 224 # 5831 ffs_range c a 224 0 1 f r 0 197 # 5832 ffs_range c a 224 0 1 1 2 3 7 9 10 11 12 15 16 17 18 21 22 23 25 29 32 37 39 42 44 45 48 50 53 55 57 58 59 60 63 64 69 70 71 73 74 75 76 79 83 84 85 88 91 92 94 95 96 98 101 102 104 105 109 111 117 118 119 121 122 128 130 131 133 135 136 137 139 140 141 142 151 155 156 160 161 163 164 165 166 168 171 177 178 179 180 184 185 186 190 191 194 195 197 201 203 205 207 212 213 214 216 217 218 219 220 221 222 r 0 224 # 5833 ffs_range c a 224 0 1 1 3 4 5 8 9 11 12 14 16 18 22 23 25 26 28 29 32 33 35 37 40 41 43 45 46 47 49 58 62 64 69 70 72 73 75 76 78 80 82 84 86 88 90 92 93 94 95 99 101 103 104 105 106 107 108 109 111 113 117 118 119 121 124 125 126 133 136 139 142 143 145 147 148 150 153 154 156 157 158 160 162 168 169 170 173 175 176 177 179 183 185 188 191 192 194 205 207 209 210 211 212 213 216 217 219 220 221 223 r 76 11 # 5834 ffs_range c a 224 0 1 0 1 2 4 6 8 11 13 14 15 17 18 19 20 21 22 24 25 29 30 33 34 36 37 38 39 42 44 54 56 60 62 64 65 66 67 68 69 70 74 76 78 80 89 90 93 94 96 97 99 100 101 105 110 111 115 117 119 120 123 133 134 135 136 139 142 143 146 147 148 150 151 152 154 156 157 158 162 163 165 166 167 168 170 172 173 180 182 183 184 185 187 188 192 196 199 200 205 206 209 210 213 215 217 218 221 r 30 178 # 5835 ffs_range c a 224 0 1 0 2 3 5 7 10 11 12 14 15 16 21 23 25 26 27 31 34 35 40 43 48 49 51 52 53 54 57 58 59 62 63 64 65 68 69 70 71 75 76 77 78 80 83 87 91 92 95 96 97 98 99 100 101 102 104 106 107 109 113 115 119 120 121 125 128 131 132 133 135 138 141 142 143 144 145 147 149 150 152 154 157 161 164 167 168 169 171 172 174 175 178 179 182 184 185 187 188 189 191 192 196 199 201 202 208 209 211 216 217 219 220 222 r 16 224 # 5836 ffs_range c a 224 0 1 0 1 2 5 6 10 11 12 14 15 17 19 20 22 23 24 29 32 34 36 37 38 41 43 44 46 48 49 51 53 54 59 61 62 64 65 66 67 69 71 73 74 78 83 85 87 89 94 99 101 103 104 108 113 115 116 119 121 123 127 128 129 131 132 133 134 135 137 138 139 143 147 148 149 150 152 154 156 160 161 163 164 167 170 172 176 177 179 180 182 183 184 185 190 194 195 196 198 199 200 201 203 205 207 210 212 213 214 216 218 219 220 221 223 r 0 200 # 5837 ffs_range c a 224 1 0 e r 0 224 # 5838 ffs_range c a 224 1 0 e r 44 22 # 5839 ffs_range c a 224 1 0 e r 136 224 # 5840 ffs_range c a 224 1 0 e r 90 224 # 5841 ffs_range c a 224 1 0 e r 0 199 # 5842 ffs_range c a 224 1 0 f r 0 224 # 5843 ffs_range c a 224 1 0 f r 170 26 # 5844 ffs_range c a 224 1 0 f r 42 75 # 5845 ffs_range c a 224 1 0 f r 105 224 # 5846 ffs_range c a 224 1 0 f r 0 98 # 5847 ffs_range c a 224 1 0 0 2 4 7 9 12 15 16 19 22 24 30 32 33 34 35 37 40 41 42 51 52 53 54 55 59 60 62 65 68 69 70 72 73 74 79 80 81 83 84 88 89 90 92 93 94 96 98 100 101 102 103 104 105 106 107 110 111 114 115 116 120 122 123 125 127 129 132 134 137 139 142 143 146 148 149 150 151 153 154 156 157 159 160 161 163 167 169 170 171 172 176 178 179 186 187 190 194 195 198 199 200 201 203 205 210 212 214 215 216 217 218 219 221 223 r 0 224 # 5848 ffs_range c a 224 1 0 2 3 5 8 9 11 12 13 18 19 20 21 22 24 25 28 29 32 34 38 39 42 46 47 50 53 54 55 56 59 60 62 63 64 65 67 70 71 72 73 79 80 81 82 83 84 85 86 88 91 92 94 99 100 102 103 107 109 112 118 126 127 128 131 132 134 138 139 140 143 144 148 153 155 156 158 159 167 170 172 175 176 180 181 182 189 191 193 195 196 197 198 201 202 204 207 208 213 214 215 217 219 220 222 r 200 78 # 5849 ffs_range c a 224 1 0 0 2 3 4 5 7 10 13 14 19 20 21 22 25 26 29 33 34 35 36 38 40 41 42 45 46 47 48 50 51 52 53 56 57 58 59 60 61 64 67 68 69 71 72 73 74 76 77 78 79 80 81 82 83 85 88 91 96 108 110 111 113 114 115 116 118 119 120 122 123 124 125 130 131 132 137 138 141 148 150 151 153 154 156 157 158 161 164 166 169 170 174 175 176 179 182 183 184 187 189 190 191 192 195 196 199 203 204 206 207 208 209 210 216 218 221 r 48 124 # 5850 ffs_range c a 224 1 0 0 1 4 5 10 12 13 15 16 20 22 23 24 26 29 32 33 34 35 39 48 51 52 58 59 61 64 69 71 76 77 78 79 82 83 87 90 91 94 95 96 100 104 105 106 107 110 111 112 113 114 116 123 124 126 129 130 133 134 136 140 142 143 145 146 148 150 153 157 158 159 160 165 166 172 182 183 185 188 189 191 195 199 200 201 203 205 208 209 210 212 217 218 220 221 r 81 224 # 5851 ffs_range c a 224 1 0 0 2 5 12 13 16 17 21 22 23 26 28 29 30 31 33 35 36 37 38 42 43 45 48 49 51 52 54 57 58 60 61 62 63 64 66 67 68 69 73 75 76 77 78 79 80 82 84 85 86 95 96 97 98 99 100 101 102 103 104 106 107 108 109 110 111 115 117 119 121 122 123 126 127 130 131 133 134 136 137 139 142 143 144 145 146 147 148 149 150 152 153 155 156 157 158 161 163 168 169 175 177 178 180 181 182 183 185 186 188 189 190 193 195 197 200 201 202 205 208 210 211 212 214 218 221 222 223 r 0 155 # 5852 ffs_range c a 224 1 1 e r 0 224 # 5853 ffs_range c a 224 1 1 e r 92 18 # 5854 ffs_range c a 224 1 1 e r 9 12 # 5855 ffs_range c a 224 1 1 e r 155 224 # 5856 ffs_range c a 224 1 1 e r 0 184 # 5857 ffs_range c a 224 1 1 f r 0 224 # 5858 ffs_range c a 224 1 1 f r 218 181 # 5859 ffs_range c a 224 1 1 f r 189 211 # 5860 ffs_range c a 224 1 1 f r 205 224 # 5861 ffs_range c a 224 1 1 f r 0 79 # 5862 ffs_range c a 224 1 1 0 1 2 4 5 8 9 10 12 19 20 25 29 32 34 35 37 38 40 41 44 45 46 50 55 56 57 60 61 62 63 65 66 67 68 69 73 74 76 77 78 79 81 83 84 85 86 87 88 91 94 95 98 99 101 103 104 109 111 112 113 115 118 122 123 124 125 127 130 135 136 141 144 145 146 148 149 152 155 157 158 160 161 162 168 169 170 172 173 176 178 179 184 186 187 189 195 196 197 198 201 202 204 206 208 211 212 216 220 221 r 0 224 # 5863 ffs_range c a 224 1 1 1 4 6 8 11 12 16 20 21 22 23 24 27 29 31 32 33 36 37 38 39 42 45 46 50 52 53 55 57 58 59 62 65 66 68 72 73 74 76 80 82 83 84 86 89 90 91 93 94 96 97 98 99 101 103 104 105 107 109 112 114 115 116 117 122 123 124 125 127 128 129 131 132 133 134 135 136 138 140 143 144 146 147 151 157 159 160 161 162 163 165 166 169 173 179 183 184 185 187 188 189 190 193 195 196 197 200 201 203 204 205 208 210 212 215 217 218 220 221 222 r 72 22 # 5864 ffs_range c a 224 1 1 1 2 4 5 8 9 11 16 18 23 25 26 34 36 38 39 41 42 46 47 48 51 52 54 57 59 61 64 66 67 70 71 75 76 77 78 81 87 89 90 92 93 94 95 97 98 99 103 104 105 107 108 113 115 117 118 120 122 123 125 127 128 131 132 133 134 135 136 141 142 143 147 152 154 158 159 160 162 165 168 169 170 175 176 177 178 179 180 181 183 186 188 189 194 195 200 201 202 205 208 211 216 218 222 223 r 22 93 # 5865 ffs_range c a 224 1 1 0 8 9 12 13 16 17 18 22 24 26 27 29 30 32 37 38 41 44 45 46 47 48 50 51 52 53 55 56 57 58 60 61 63 65 67 68 69 70 72 74 75 78 80 81 83 86 89 90 92 94 98 99 101 105 107 109 112 116 118 122 124 125 126 127 128 129 130 132 137 139 140 144 145 146 147 151 152 155 156 157 158 159 160 161 164 165 166 169 170 174 176 180 181 182 183 186 191 199 202 203 204 205 207 209 210 212 213 215 217 223 r 146 224 # 5866 ffs_range c a 224 1 1 0 1 5 7 8 10 11 14 18 21 22 26 27 28 29 30 31 32 33 34 36 39 40 41 42 45 47 48 54 55 57 60 62 65 66 69 72 73 76 77 79 81 83 86 87 90 91 93 95 96 98 102 106 107 110 111 113 114 120 125 126 129 130 134 136 139 140 142 143 148 149 150 151 152 154 157 159 160 164 165 166 175 176 177 179 184 186 190 194 198 199 200 202 206 208 210 214 216 217 220 222 r 0 30 # 5867 ffs_range c a 247 0 0 e r 0 247 # 5868 ffs_range c a 247 0 0 e r 208 6 # 5869 ffs_range c a 247 0 0 e r 87 240 # 5870 ffs_range c a 247 0 0 e r 241 247 # 5871 ffs_range c a 247 0 0 e r 0 104 # 5872 ffs_range c a 247 0 0 f r 0 247 # 5873 ffs_range c a 247 0 0 f r 54 16 # 5874 ffs_range c a 247 0 0 f r 11 242 # 5875 ffs_range c a 247 0 0 f r 17 247 # 5876 ffs_range c a 247 0 0 f r 0 16 # 5877 ffs_range c a 247 0 0 2 6 7 10 12 17 18 21 23 24 26 28 29 31 35 36 38 40 41 42 45 46 47 48 49 52 53 57 58 59 60 62 64 67 68 71 75 77 78 79 80 84 86 89 94 96 99 100 101 105 108 112 113 114 115 117 118 119 120 126 128 130 131 135 137 139 141 143 146 147 149 152 153 154 156 157 158 159 161 163 165 166 169 171 172 173 174 178 179 186 190 191 194 197 198 199 200 206 207 208 209 210 211 216 217 218 221 223 231 232 233 236 239 240 242 244 245 246 r 0 247 # 5878 ffs_range c a 247 0 0 0 1 6 11 13 17 18 19 20 22 23 28 31 33 34 35 36 37 40 41 45 46 47 48 49 50 51 53 56 57 58 59 62 63 64 65 66 67 72 73 74 76 77 80 84 85 86 87 88 89 90 92 93 95 98 99 106 110 112 113 114 115 116 118 121 122 125 127 130 131 132 136 140 142 145 147 149 152 154 157 163 164 167 168 169 172 174 176 181 182 183 184 190 191 192 193 194 197 200 202 203 204 205 206 207 208 210 212 213 215 219 220 221 223 224 230 231 232 234 235 237 240 243 245 246 r 141 53 # 5879 ffs_range c a 247 0 0 4 5 7 9 11 14 15 16 19 20 22 24 25 26 27 28 30 31 43 44 45 46 47 49 54 56 57 59 60 62 65 66 67 69 71 78 79 83 84 87 92 94 98 99 103 104 105 112 113 120 121 122 123 124 126 128 129 130 135 137 139 140 143 148 150 151 153 154 157 160 162 163 164 166 168 171 172 174 175 176 177 179 182 183 185 186 190 192 195 196 199 201 202 209 211 214 216 217 218 221 222 225 227 229 230 231 234 235 236 238 240 246 r 156 181 # 5880 ffs_range c a 247 0 0 0 1 4 6 7 8 9 10 13 14 15 16 17 18 19 20 22 23 24 28 29 31 32 35 36 37 39 40 47 48 50 51 52 53 54 55 58 62 64 66 67 71 72 73 76 79 80 82 88 90 91 93 96 98 100 103 106 108 111 113 115 120 121 124 127 128 130 132 136 139 141 143 144 145 146 149 151 152 153 155 157 159 164 165 168 169 172 173 178 179 182 184 185 186 188 191 192 193 195 197 200 202 206 207 208 209 211 212 215 219 220 222 223 227 228 229 231 236 240 241 243 244 245 246 r 145 247 # 5881 ffs_range c a 247 0 0 0 3 4 7 9 10 12 13 15 19 20 21 23 25 26 28 29 30 31 32 33 35 37 38 39 40 43 46 47 48 50 51 52 58 59 60 61 62 63 64 66 67 70 72 73 74 77 80 81 83 85 88 91 94 95 97 98 99 101 102 104 105 106 108 109 110 111 112 113 114 116 118 119 120 122 123 125 126 127 129 130 131 132 133 134 136 137 138 140 143 145 146 149 150 151 152 153 154 157 159 160 162 163 164 165 167 169 174 175 177 179 180 182 183 184 185 188 189 191 192 195 196 197 198 200 201 202 205 207 208 210 212 215 219 221 222 224 227 228 229 231 232 234 236 239 240 244 r 0 22 # 5882 ffs_range c a 247 0 1 e r 0 247 # 5883 ffs_range c a 247 0 1 e r 70 59 # 5884 ffs_range c a 247 0 1 e r 63 226 # 5885 ffs_range c a 247 0 1 e r 119 247 # 5886 ffs_range c a 247 0 1 e r 0 38 # 5887 ffs_range c a 247 0 1 f r 0 247 # 5888 ffs_range c a 247 0 1 f r 111 70 # 5889 ffs_range c a 247 0 1 f r 58 64 # 5890 ffs_range c a 247 0 1 f r 121 247 # 5891 ffs_range c a 247 0 1 f r 0 204 # 5892 ffs_range c a 247 0 1 0 1 2 3 4 5 7 8 9 10 11 12 13 15 18 20 21 22 28 29 31 36 37 39 42 45 47 49 52 53 54 58 60 62 66 71 72 75 78 79 81 84 85 94 95 96 97 101 102 103 106 108 109 112 115 117 118 119 122 123 124 125 126 127 131 134 137 138 144 145 146 148 149 150 153 154 156 157 160 161 162 164 165 166 169 170 171 172 175 178 181 183 184 187 189 190 193 196 198 200 201 203 204 206 208 209 211 212 213 214 215 217 219 220 222 226 228 229 231 233 234 238 239 242 243 245 246 r 0 247 # 5893 ffs_range c a 247 0 1 0 1 5 7 9 12 14 16 17 20 21 22 23 24 26 27 29 30 33 34 35 36 38 39 43 49 56 60 67 70 71 74 75 76 80 81 85 86 87 88 91 92 93 95 96 97 98 101 103 105 106 109 110 112 114 115 116 117 118 119 122 123 124 126 127 129 131 132 133 136 138 139 141 143 144 145 146 147 148 149 150 151 153 154 157 159 160 161 162 163 171 174 177 180 183 187 190 195 196 197 198 202 204 205 206 209 213 216 220 221 225 226 229 231 235 237 239 240 241 242 246 r 117 99 # 5894 ffs_range c a 247 0 1 0 1 2 3 5 7 8 9 11 15 18 21 24 25 26 27 30 32 37 40 41 43 44 45 46 48 49 50 54 59 60 61 63 65 66 67 68 72 73 75 76 79 80 84 85 86 89 90 92 94 96 97 99 101 104 105 107 108 109 111 113 116 124 126 127 131 133 134 138 140 145 147 149 153 154 158 159 160 163 167 168 171 172 173 174 175 176 178 179 183 184 188 190 192 195 196 197 198 199 200 201 203 204 206 208 209 212 213 215 217 219 220 223 224 225 226 227 228 231 233 238 240 242 243 246 r 75 85 # 5895 ffs_range c a 247 0 1 4 5 7 8 9 10 14 16 17 18 20 23 27 29 34 41 43 50 51 52 53 54 60 62 64 65 69 70 72 78 79 80 82 85 86 87 88 89 91 97 98 101 102 104 108 112 113 114 116 117 118 119 120 122 125 126 127 128 129 137 138 142 143 145 147 150 155 158 160 161 165 166 167 168 169 170 173 179 180 184 185 188 189 191 192 193 196 198 199 201 203 204 208 209 211 212 214 215 218 225 231 233 237 241 242 245 r 243 247 # 5896 ffs_range c a 247 0 1 2 4 5 6 8 10 11 12 14 16 20 21 24 26 27 31 37 39 42 43 45 48 49 50 51 52 56 60 61 62 69 75 77 81 85 86 87 91 97 98 99 100 103 104 105 106 109 111 112 113 117 119 122 124 125 126 128 129 130 136 138 144 145 148 149 151 153 155 156 159 163 165 168 170 177 178 179 180 182 183 186 188 190 195 196 197 199 203 204 205 208 215 216 218 219 220 221 225 228 229 231 234 237 239 241 243 244 245 r 0 140 # 5897 ffs_range c a 247 1 0 e r 0 247 # 5898 ffs_range c a 247 1 0 e r 213 7 # 5899 ffs_range c a 247 1 0 e r 1 19 # 5900 ffs_range c a 247 1 0 e r 0 247 # 5901 ffs_range c a 247 1 0 e r 0 128 # 5902 ffs_range c a 247 1 0 f r 0 247 # 5903 ffs_range c a 247 1 0 f r 177 105 # 5904 ffs_range c a 247 1 0 f r 7 39 # 5905 ffs_range c a 247 1 0 f r 226 247 # 5906 ffs_range c a 247 1 0 f r 0 139 # 5907 ffs_range c a 247 1 0 3 4 5 6 7 8 10 14 18 19 20 25 27 30 31 34 37 44 46 48 49 51 57 59 60 62 66 67 69 70 74 75 76 77 79 82 83 84 90 92 93 94 98 101 102 103 105 106 108 109 114 116 118 120 121 126 127 128 129 132 134 137 138 139 140 144 146 147 150 154 155 156 161 162 163 164 165 169 175 176 178 180 181 183 186 187 188 191 192 194 195 196 202 204 207 210 212 216 217 221 224 227 228 231 232 235 237 238 239 241 r 0 247 # 5908 ffs_range c a 247 1 0 0 2 4 6 7 13 14 16 18 19 20 21 23 24 26 30 32 34 35 36 37 38 41 42 43 44 45 46 49 51 53 54 56 57 58 62 64 65 66 67 68 69 72 78 79 80 82 84 86 87 89 94 97 101 102 106 107 109 112 114 115 116 117 118 119 120 123 124 128 130 133 134 139 141 144 147 150 151 152 154 155 160 162 163 165 169 174 176 177 179 181 182 183 185 186 187 189 191 194 196 198 202 203 204 211 214 215 219 221 222 223 224 225 227 233 238 239 240 242 244 r 201 33 # 5909 ffs_range c a 247 1 0 0 1 4 10 11 12 15 19 22 24 28 33 34 38 39 40 43 44 45 49 52 54 55 56 60 61 62 64 65 70 72 77 78 81 82 85 87 89 91 92 95 97 99 100 103 104 105 107 109 111 112 117 119 120 121 122 123 125 126 127 128 130 131 136 137 140 141 143 145 146 147 148 151 152 154 157 158 159 161 162 163 164 166 167 168 171 172 173 176 178 179 180 182 183 184 185 186 187 188 189 190 192 193 194 195 196 197 198 199 202 208 212 215 218 221 223 226 231 232 234 235 240 242 243 244 245 246 r 17 38 # 5910 ffs_range c a 247 1 0 4 6 10 11 12 15 19 20 21 22 25 26 28 29 30 35 36 39 41 42 47 48 49 50 53 54 55 56 57 59 60 62 63 66 68 73 75 77 78 79 81 83 84 86 87 88 91 92 94 96 97 99 100 101 102 104 106 107 109 110 111 114 116 117 118 119 123 124 127 128 129 130 131 133 140 144 145 146 148 149 151 153 154 156 159 160 161 162 164 166 167 169 173 174 175 176 177 181 183 186 188 191 195 196 197 198 200 202 205 207 209 211 213 214 215 217 220 221 222 232 235 236 237 238 243 246 r 18 247 # 5911 ffs_range c a 247 1 0 0 3 7 11 12 13 14 16 19 23 24 25 26 29 33 35 36 38 40 41 43 44 47 48 49 50 51 54 58 62 64 65 67 69 72 73 75 76 79 82 86 87 88 92 93 94 95 96 97 98 100 102 103 104 106 107 108 110 111 115 116 118 119 120 121 124 125 127 128 129 131 134 136 137 140 141 145 151 153 156 157 159 160 161 162 163 165 167 173 174 175 176 180 181 183 184 185 193 196 200 201 202 204 205 207 209 211 212 214 215 219 220 222 223 228 229 231 232 235 236 237 238 240 243 244 r 0 72 # 5912 ffs_range c a 247 1 1 e r 0 247 # 5913 ffs_range c a 247 1 1 e r 17 0 # 5914 ffs_range c a 247 1 1 e r 37 162 # 5915 ffs_range c a 247 1 1 e r 154 247 # 5916 ffs_range c a 247 1 1 e r 0 192 # 5917 ffs_range c a 247 1 1 f r 0 247 # 5918 ffs_range c a 247 1 1 f r 213 169 # 5919 ffs_range c a 247 1 1 f r 18 66 # 5920 ffs_range c a 247 1 1 f r 55 247 # 5921 ffs_range c a 247 1 1 f r 0 96 # 5922 ffs_range c a 247 1 1 0 3 4 5 6 7 9 10 12 14 15 18 19 30 31 32 34 39 42 45 46 47 49 50 51 56 58 59 60 61 62 65 66 74 75 77 78 79 81 83 85 87 89 90 91 92 93 95 96 99 100 101 104 108 110 125 129 133 136 137 138 139 140 141 145 146 150 151 152 154 159 160 161 165 166 169 173 174 175 176 179 180 182 184 185 186 188 191 192 198 199 203 205 209 212 213 214 215 216 218 219 220 222 223 224 227 228 230 231 232 233 234 236 240 241 242 243 244 246 r 0 247 # 5923 ffs_range c a 247 1 1 1 2 4 5 6 8 10 11 12 13 15 16 18 19 21 23 24 26 27 28 30 34 35 37 40 42 43 46 47 48 49 50 52 55 56 58 59 63 64 65 66 68 70 71 73 74 75 77 78 81 82 86 87 89 90 91 93 94 96 98 99 100 106 108 109 110 114 115 116 117 118 123 125 126 129 133 136 138 139 141 143 147 148 152 158 159 160 161 164 165 166 167 169 170 175 177 178 180 181 182 183 186 187 189 190 192 194 196 201 202 203 205 207 208 211 215 218 219 221 223 224 227 228 229 231 232 233 234 235 236 238 239 241 243 245 r 186 87 # 5924 ffs_range c a 247 1 1 1 2 3 5 6 9 11 14 16 17 21 22 26 28 30 33 38 39 42 46 49 50 51 52 56 57 58 59 61 63 64 68 70 71 73 75 84 86 87 89 90 91 92 93 94 97 98 101 103 105 106 107 108 116 118 120 121 123 124 129 132 133 137 138 142 143 144 146 147 149 152 153 156 158 162 164 165 168 170 172 173 174 176 177 180 182 183 188 189 197 198 201 206 209 210 213 215 218 219 223 224 225 226 227 228 229 233 235 239 243 r 2 58 # 5925 ffs_range c a 247 1 1 1 3 4 6 7 9 11 12 13 15 18 20 21 22 24 26 28 29 33 40 41 43 45 46 47 49 53 54 57 58 60 62 66 67 68 69 71 72 73 74 76 78 82 83 85 87 88 92 94 96 98 104 105 107 110 111 112 113 115 117 118 120 121 122 123 126 127 128 129 133 134 136 138 140 141 142 144 154 156 157 159 160 161 164 165 170 171 173 177 181 182 185 186 187 188 190 191 193 194 196 198 200 205 206 208 210 211 213 220 222 225 226 232 233 234 237 238 240 241 245 246 r 176 247 # 5926 ffs_range c a 247 1 1 6 7 10 11 12 15 19 20 21 22 23 24 28 29 35 36 39 40 42 43 44 45 46 49 50 52 53 55 58 63 64 65 69 71 74 78 81 82 84 85 87 91 93 94 96 98 99 102 103 105 107 109 111 112 113 116 120 121 131 135 136 137 138 140 141 142 144 146 147 148 153 154 155 158 159 163 165 166 168 169 170 172 173 174 175 176 177 178 179 183 185 191 192 193 194 196 197 198 202 205 206 208 209 210 212 217 218 221 223 224 225 228 229 230 233 235 236 238 239 241 245 r 0 129 # 5927 ffs_range c a 0 0 0 e r 0 0 # 5928 ffc_range c a 0 0 0 e r 0 0 # 5929 ffc_range c a 0 0 0 e r 0 0 # 5930 ffc_range c a 0 0 0 e r 0 0 # 5931 ffc_range c a 0 0 0 e r 0 0 # 5932 ffc_range c a 0 0 0 e r 0 0 # 5933 ffc_range c a 0 0 0 e r 0 0 # 5934 ffc_range c a 0 0 0 e r 0 0 # 5935 ffc_range c a 0 0 0 e r 0 0 # 5936 ffc_range c a 0 0 0 e r 0 0 # 5937 ffc_range c a 0 0 0 r 0 0 # 5938 ffc_range c a 0 0 0 r 0 0 # 5939 ffc_range c a 0 0 0 r 0 0 # 5940 ffc_range c a 0 0 0 r 0 0 # 5941 ffc_range c a 0 0 0 r 0 0 # 5942 ffc_range c a 0 0 1 e r 0 0 # 5943 ffc_range c a 0 0 1 e r 0 0 # 5944 ffc_range c a 0 0 1 e r 0 0 # 5945 ffc_range c a 0 0 1 e r 0 0 # 5946 ffc_range c a 0 0 1 e r 0 0 # 5947 ffc_range c a 0 0 1 e r 0 0 # 5948 ffc_range c a 0 0 1 e r 0 0 # 5949 ffc_range c a 0 0 1 e r 0 0 # 5950 ffc_range c a 0 0 1 e r 0 0 # 5951 ffc_range c a 0 0 1 e r 0 0 # 5952 ffc_range c a 0 0 1 r 0 0 # 5953 ffc_range c a 0 0 1 r 0 0 # 5954 ffc_range c a 0 0 1 r 0 0 # 5955 ffc_range c a 0 0 1 r 0 0 # 5956 ffc_range c a 0 0 1 r 0 0 # 5957 ffc_range c a 0 1 0 e r 0 0 # 5958 ffc_range c a 0 1 0 e r 0 0 # 5959 ffc_range c a 0 1 0 e r 0 0 # 5960 ffc_range c a 0 1 0 e r 0 0 # 5961 ffc_range c a 0 1 0 e r 0 0 # 5962 ffc_range c a 0 1 0 e r 0 0 # 5963 ffc_range c a 0 1 0 e r 0 0 # 5964 ffc_range c a 0 1 0 e r 0 0 # 5965 ffc_range c a 0 1 0 e r 0 0 # 5966 ffc_range c a 0 1 0 e r 0 0 # 5967 ffc_range c a 0 1 0 r 0 0 # 5968 ffc_range c a 0 1 0 r 0 0 # 5969 ffc_range c a 0 1 0 r 0 0 # 5970 ffc_range c a 0 1 0 r 0 0 # 5971 ffc_range c a 0 1 0 r 0 0 # 5972 ffc_range c a 0 1 1 e r 0 0 # 5973 ffc_range c a 0 1 1 e r 0 0 # 5974 ffc_range c a 0 1 1 e r 0 0 # 5975 ffc_range c a 0 1 1 e r 0 0 # 5976 ffc_range c a 0 1 1 e r 0 0 # 5977 ffc_range c a 0 1 1 e r 0 0 # 5978 ffc_range c a 0 1 1 e r 0 0 # 5979 ffc_range c a 0 1 1 e r 0 0 # 5980 ffc_range c a 0 1 1 e r 0 0 # 5981 ffc_range c a 0 1 1 e r 0 0 # 5982 ffc_range c a 0 1 1 r 0 0 # 5983 ffc_range c a 0 1 1 r 0 0 # 5984 ffc_range c a 0 1 1 r 0 0 # 5985 ffc_range c a 0 1 1 r 0 0 # 5986 ffc_range c a 0 1 1 r 0 0 # 5987 ffc_range c a 1 0 0 e r 0 1 # 5988 ffc_range c a 1 0 0 e r 1 0 # 5989 ffc_range c a 1 0 0 e r 0 1 # 5990 ffc_range c a 1 0 0 e r 0 1 # 5991 ffc_range c a 1 0 0 e r 0 0 # 5992 ffc_range c a 1 0 0 f r 0 1 # 5993 ffc_range c a 1 0 0 f r 1 0 # 5994 ffc_range c a 1 0 0 f r 0 1 # 5995 ffc_range c a 1 0 0 f r 0 1 # 5996 ffc_range c a 1 0 0 f r 0 0 # 5997 ffc_range c a 1 0 0 r 0 1 # 5998 ffc_range c a 1 0 0 0 r 0 0 # 5999 ffc_range c a 1 0 0 0 r 0 1 # 6000 ffc_range c a 1 0 0 r 0 1 # 6001 ffc_range c a 1 0 0 0 r 0 0 # 6002 ffc_range c a 1 0 1 e r 0 1 # 6003 ffc_range c a 1 0 1 e r 1 0 # 6004 ffc_range c a 1 0 1 e r 0 1 # 6005 ffc_range c a 1 0 1 e r 0 1 # 6006 ffc_range c a 1 0 1 e r 0 0 # 6007 ffc_range c a 1 0 1 f r 0 1 # 6008 ffc_range c a 1 0 1 f r 1 0 # 6009 ffc_range c a 1 0 1 f r 0 1 # 6010 ffc_range c a 1 0 1 f r 0 1 # 6011 ffc_range c a 1 0 1 f r 0 1 # 6012 ffc_range c a 1 0 1 0 r 0 1 # 6013 ffc_range c a 1 0 1 r 0 0 # 6014 ffc_range c a 1 0 1 r 0 1 # 6015 ffc_range c a 1 0 1 r 0 1 # 6016 ffc_range c a 1 0 1 r 0 1 # 6017 ffc_range c a 1 1 0 e r 0 1 # 6018 ffc_range c a 1 1 0 e r 1 0 # 6019 ffc_range c a 1 1 0 e r 0 0 # 6020 ffc_range c a 1 1 0 e r 0 1 # 6021 ffc_range c a 1 1 0 e r 0 0 # 6022 ffc_range c a 1 1 0 f r 0 1 # 6023 ffc_range c a 1 1 0 f r 1 0 # 6024 ffc_range c a 1 1 0 f r 0 1 # 6025 ffc_range c a 1 1 0 f r 0 1 # 6026 ffc_range c a 1 1 0 f r 0 0 # 6027 ffc_range c a 1 1 0 0 r 0 1 # 6028 ffc_range c a 1 1 0 0 r 1 0 # 6029 ffc_range c a 1 1 0 r 0 1 # 6030 ffc_range c a 1 1 0 0 r 0 1 # 6031 ffc_range c a 1 1 0 r 0 0 # 6032 ffc_range c a 1 1 1 e r 0 1 # 6033 ffc_range c a 1 1 1 e r 0 0 # 6034 ffc_range c a 1 1 1 e r 0 0 # 6035 ffc_range c a 1 1 1 e r 0 1 # 6036 ffc_range c a 1 1 1 e r 0 0 # 6037 ffc_range c a 1 1 1 f r 0 1 # 6038 ffc_range c a 1 1 1 f r 0 0 # 6039 ffc_range c a 1 1 1 f r 0 1 # 6040 ffc_range c a 1 1 1 f r 0 1 # 6041 ffc_range c a 1 1 1 f r 0 1 # 6042 ffc_range c a 1 1 1 r 0 1 # 6043 ffc_range c a 1 1 1 0 r 0 0 # 6044 ffc_range c a 1 1 1 r 0 1 # 6045 ffc_range c a 1 1 1 r 0 1 # 6046 ffc_range c a 1 1 1 r 0 1 # 6047 ffc_range c a 31 0 0 e r 0 31 # 6048 ffc_range c a 31 0 0 e r 22 11 # 6049 ffc_range c a 31 0 0 e r 26 28 # 6050 ffc_range c a 31 0 0 e r 18 31 # 6051 ffc_range c a 31 0 0 e r 0 19 # 6052 ffc_range c a 31 0 0 f r 0 31 # 6053 ffc_range c a 31 0 0 f r 31 29 # 6054 ffc_range c a 31 0 0 f r 26 27 # 6055 ffc_range c a 31 0 0 f r 28 31 # 6056 ffc_range c a 31 0 0 f r 0 26 # 6057 ffc_range c a 31 0 0 0 1 2 3 4 6 9 14 15 17 23 25 26 27 29 r 0 31 # 6058 ffc_range c a 31 0 0 7 8 12 13 18 20 21 22 28 29 30 r 18 3 # 6059 ffc_range c a 31 0 0 0 2 5 7 9 11 13 16 17 19 21 23 24 26 27 29 r 5 7 # 6060 ffc_range c a 31 0 0 1 6 8 9 11 12 13 15 19 22 23 24 25 27 30 r 6 31 # 6061 ffc_range c a 31 0 0 6 8 10 11 14 16 17 26 27 28 29 30 r 0 25 # 6062 ffc_range c a 31 0 1 e r 0 31 # 6063 ffc_range c a 31 0 1 e r 16 15 # 6064 ffc_range c a 31 0 1 e r 13 16 # 6065 ffc_range c a 31 0 1 e r 14 31 # 6066 ffc_range c a 31 0 1 e r 0 17 # 6067 ffc_range c a 31 0 1 f r 0 31 # 6068 ffc_range c a 31 0 1 f r 28 12 # 6069 ffc_range c a 31 0 1 f r 0 26 # 6070 ffc_range c a 31 0 1 f r 12 31 # 6071 ffc_range c a 31 0 1 f r 0 16 # 6072 ffc_range c a 31 0 1 3 5 7 10 11 12 13 14 15 16 17 19 21 25 26 28 29 r 0 31 # 6073 ffc_range c a 31 0 1 0 2 3 4 5 9 12 15 18 19 20 21 23 26 27 28 29 30 r 18 16 # 6074 ffc_range c a 31 0 1 0 1 2 6 7 8 9 10 20 22 23 25 26 27 28 29 30 r 1 5 # 6075 ffc_range c a 31 0 1 0 1 3 4 6 7 8 9 10 14 15 16 18 19 21 24 26 27 30 r 26 31 # 6076 ffc_range c a 31 0 1 1 2 5 6 8 9 10 13 17 19 20 22 24 25 27 29 30 r 0 14 # 6077 ffc_range c a 31 1 0 e r 0 31 # 6078 ffc_range c a 31 1 0 e r 6 2 # 6079 ffc_range c a 31 1 0 e r 3 19 # 6080 ffc_range c a 31 1 0 e r 22 31 # 6081 ffc_range c a 31 1 0 e r 0 5 # 6082 ffc_range c a 31 1 0 f r 0 31 # 6083 ffc_range c a 31 1 0 f r 13 0 # 6084 ffc_range c a 31 1 0 f r 0 9 # 6085 ffc_range c a 31 1 0 f r 9 31 # 6086 ffc_range c a 31 1 0 f r 0 6 # 6087 ffc_range c a 31 1 0 0 1 2 4 6 7 8 9 12 21 22 24 26 30 r 0 31 # 6088 ffc_range c a 31 1 0 2 3 6 8 9 12 13 14 18 19 20 22 25 26 27 30 r 28 14 # 6089 ffc_range c a 31 1 0 0 1 3 5 6 10 14 15 16 17 18 22 25 26 27 29 30 r 4 19 # 6090 ffc_range c a 31 1 0 3 7 11 14 15 21 22 23 24 27 29 30 r 13 31 # 6091 ffc_range c a 31 1 0 0 1 5 6 7 10 15 16 17 19 20 21 22 23 26 27 29 r 0 27 # 6092 ffc_range c a 31 1 1 e r 0 31 # 6093 ffc_range c a 31 1 1 e r 22 4 # 6094 ffc_range c a 31 1 1 e r 6 19 # 6095 ffc_range c a 31 1 1 e r 17 31 # 6096 ffc_range c a 31 1 1 e r 0 29 # 6097 ffc_range c a 31 1 1 f r 0 31 # 6098 ffc_range c a 31 1 1 f r 29 22 # 6099 ffc_range c a 31 1 1 f r 16 22 # 6100 ffc_range c a 31 1 1 f r 19 31 # 6101 ffc_range c a 31 1 1 f r 0 9 # 6102 ffc_range c a 31 1 1 1 2 4 7 10 11 12 13 15 17 21 23 25 26 27 28 29 r 0 31 # 6103 ffc_range c a 31 1 1 1 6 8 9 10 12 13 14 15 17 18 21 22 24 25 26 27 29 r 28 26 # 6104 ffc_range c a 31 1 1 3 4 6 7 10 15 17 20 23 29 r 15 26 # 6105 ffc_range c a 31 1 1 1 3 4 7 8 9 14 19 21 23 25 r 8 31 # 6106 ffc_range c a 31 1 1 1 2 3 4 6 7 8 15 16 17 18 20 22 23 27 29 r 0 12 # 6107 ffc_range c a 32 0 0 e r 0 32 # 6108 ffc_range c a 32 0 0 e r 18 1 # 6109 ffc_range c a 32 0 0 e r 19 29 # 6110 ffc_range c a 32 0 0 e r 7 32 # 6111 ffc_range c a 32 0 0 e r 0 27 # 6112 ffc_range c a 32 0 0 f r 0 32 # 6113 ffc_range c a 32 0 0 f r 23 5 # 6114 ffc_range c a 32 0 0 f r 14 26 # 6115 ffc_range c a 32 0 0 f r 22 32 # 6116 ffc_range c a 32 0 0 f r 0 31 # 6117 ffc_range c a 32 0 0 4 7 8 10 12 13 16 17 18 20 21 22 26 29 30 31 r 0 32 # 6118 ffc_range c a 32 0 0 0 2 3 4 6 7 8 11 13 14 17 20 22 25 26 27 28 29 31 r 19 14 # 6119 ffc_range c a 32 0 0 0 2 5 6 7 8 11 12 13 14 20 21 24 28 30 31 r 2 3 # 6120 ffc_range c a 32 0 0 1 2 4 6 11 12 13 19 20 21 22 23 25 27 28 30 31 r 23 32 # 6121 ffc_range c a 32 0 0 2 3 4 12 15 16 18 19 21 22 25 26 28 29 30 r 0 28 # 6122 ffc_range c a 32 0 1 e r 0 32 # 6123 ffc_range c a 32 0 1 e r 21 10 # 6124 ffc_range c a 32 0 1 e r 1 3 # 6125 ffc_range c a 32 0 1 e r 17 32 # 6126 ffc_range c a 32 0 1 e r 0 26 # 6127 ffc_range c a 32 0 1 f r 0 32 # 6128 ffc_range c a 32 0 1 f r 27 3 # 6129 ffc_range c a 32 0 1 f r 4 16 # 6130 ffc_range c a 32 0 1 f r 11 32 # 6131 ffc_range c a 32 0 1 f r 0 15 # 6132 ffc_range c a 32 0 1 5 6 7 8 9 11 12 13 14 15 17 23 25 29 30 31 r 0 32 # 6133 ffc_range c a 32 0 1 1 3 4 5 6 7 8 9 10 11 12 13 14 16 19 20 21 22 23 27 29 30 31 r 18 12 # 6134 ffc_range c a 32 0 1 1 2 4 5 7 8 9 10 11 15 17 20 21 24 25 27 30 31 r 4 8 # 6135 ffc_range c a 32 0 1 2 5 7 8 9 11 13 14 15 17 18 19 21 24 25 26 28 29 r 23 32 # 6136 ffc_range c a 32 0 1 0 1 3 7 8 11 17 18 24 25 27 28 29 31 r 0 32 # 6137 ffc_range c a 32 1 0 e r 0 32 # 6138 ffc_range c a 32 1 0 e r 2 0 # 6139 ffc_range c a 32 1 0 e r 7 25 # 6140 ffc_range c a 32 1 0 e r 31 32 # 6141 ffc_range c a 32 1 0 e r 0 27 # 6142 ffc_range c a 32 1 0 f r 0 32 # 6143 ffc_range c a 32 1 0 f r 1 0 # 6144 ffc_range c a 32 1 0 f r 1 2 # 6145 ffc_range c a 32 1 0 f r 21 32 # 6146 ffc_range c a 32 1 0 f r 0 21 # 6147 ffc_range c a 32 1 0 1 5 6 7 8 10 11 12 13 14 15 16 17 19 21 22 23 24 27 29 30 31 r 0 32 # 6148 ffc_range c a 32 1 0 1 3 4 6 7 8 11 14 16 17 18 20 21 23 25 26 27 30 31 r 23 10 # 6149 ffc_range c a 32 1 0 0 2 3 4 5 8 10 12 13 15 18 21 23 24 25 28 29 30 31 r 3 13 # 6150 ffc_range c a 32 1 0 3 4 5 9 11 12 16 17 20 22 24 25 30 31 r 12 32 # 6151 ffc_range c a 32 1 0 1 4 5 6 7 9 10 11 14 15 16 17 18 19 20 21 22 23 27 r 0 25 # 6152 ffc_range c a 32 1 1 e r 0 32 # 6153 ffc_range c a 32 1 1 e r 24 6 # 6154 ffc_range c a 32 1 1 e r 12 22 # 6155 ffc_range c a 32 1 1 e r 23 32 # 6156 ffc_range c a 32 1 1 e r 0 28 # 6157 ffc_range c a 32 1 1 f r 0 32 # 6158 ffc_range c a 32 1 1 f r 27 22 # 6159 ffc_range c a 32 1 1 f r 6 18 # 6160 ffc_range c a 32 1 1 f r 21 32 # 6161 ffc_range c a 32 1 1 f r 0 7 # 6162 ffc_range c a 32 1 1 0 2 3 5 6 11 12 14 15 16 18 19 21 22 23 24 25 26 27 28 30 31 r 0 32 # 6163 ffc_range c a 32 1 1 0 7 8 9 15 16 18 22 25 29 r 8 2 # 6164 ffc_range c a 32 1 1 0 1 2 5 7 11 16 17 18 19 22 24 27 28 29 30 r 2 14 # 6165 ffc_range c a 32 1 1 0 3 5 7 9 11 13 15 16 17 21 22 23 24 26 27 28 31 r 26 32 # 6166 ffc_range c a 32 1 1 0 1 2 3 5 8 9 11 14 16 19 20 22 24 28 31 r 0 0 # 6167 ffc_range c a 33 0 0 e r 0 33 # 6168 ffc_range c a 33 0 0 e r 5 3 # 6169 ffc_range c a 33 0 0 e r 8 9 # 6170 ffc_range c a 33 0 0 e r 29 33 # 6171 ffc_range c a 33 0 0 e r 0 21 # 6172 ffc_range c a 33 0 0 f r 0 33 # 6173 ffc_range c a 33 0 0 f r 28 8 # 6174 ffc_range c a 33 0 0 f r 4 8 # 6175 ffc_range c a 33 0 0 f r 32 33 # 6176 ffc_range c a 33 0 0 f r 0 21 # 6177 ffc_range c a 33 0 0 0 1 3 5 6 8 12 13 20 23 24 26 27 r 0 33 # 6178 ffc_range c a 33 0 0 0 3 5 7 9 10 12 13 14 19 20 22 25 26 27 29 30 31 r 21 9 # 6179 ffc_range c a 33 0 0 4 5 6 8 9 15 17 18 20 23 24 26 27 31 32 r 11 30 # 6180 ffc_range c a 33 0 0 0 1 4 7 9 15 17 18 19 22 24 25 26 27 28 30 r 29 33 # 6181 ffc_range c a 33 0 0 0 1 4 5 10 11 13 16 17 19 22 23 24 27 28 29 31 32 r 0 16 # 6182 ffc_range c a 33 0 1 e r 0 33 # 6183 ffc_range c a 33 0 1 e r 12 6 # 6184 ffc_range c a 33 0 1 e r 5 30 # 6185 ffc_range c a 33 0 1 e r 6 33 # 6186 ffc_range c a 33 0 1 e r 0 29 # 6187 ffc_range c a 33 0 1 f r 0 33 # 6188 ffc_range c a 33 0 1 f r 30 8 # 6189 ffc_range c a 33 0 1 f r 16 18 # 6190 ffc_range c a 33 0 1 f r 30 33 # 6191 ffc_range c a 33 0 1 f r 0 13 # 6192 ffc_range c a 33 0 1 1 3 4 5 6 8 9 10 12 13 14 16 17 18 19 21 22 23 24 25 26 27 28 29 31 32 r 0 33 # 6193 ffc_range c a 33 0 1 0 1 3 4 5 7 8 9 10 11 12 13 14 16 18 19 21 22 25 26 29 30 32 r 27 12 # 6194 ffc_range c a 33 0 1 6 8 9 12 13 15 20 23 26 27 30 31 32 r 1 3 # 6195 ffc_range c a 33 0 1 2 3 5 7 8 9 11 13 15 20 21 23 24 25 27 28 29 30 r 22 33 # 6196 ffc_range c a 33 0 1 1 2 3 4 5 6 9 10 11 12 15 16 18 20 21 28 30 r 0 16 # 6197 ffc_range c a 33 1 0 e r 0 33 # 6198 ffc_range c a 33 1 0 e r 13 2 # 6199 ffc_range c a 33 1 0 e r 0 7 # 6200 ffc_range c a 33 1 0 e r 18 33 # 6201 ffc_range c a 33 1 0 e r 0 6 # 6202 ffc_range c a 33 1 0 f r 0 33 # 6203 ffc_range c a 33 1 0 f r 32 3 # 6204 ffc_range c a 33 1 0 f r 6 8 # 6205 ffc_range c a 33 1 0 f r 20 33 # 6206 ffc_range c a 33 1 0 f r 0 8 # 6207 ffc_range c a 33 1 0 0 1 7 8 9 11 12 15 16 17 18 19 20 22 23 25 27 28 29 30 32 r 0 33 # 6208 ffc_range c a 33 1 0 1 2 5 7 8 10 12 13 14 16 17 19 20 23 26 r 31 27 # 6209 ffc_range c a 33 1 0 1 4 11 14 20 21 22 24 29 31 32 r 1 4 # 6210 ffc_range c a 33 1 0 0 2 3 8 11 12 15 18 22 23 24 25 27 29 r 24 33 # 6211 ffc_range c a 33 1 0 1 2 4 6 9 10 11 12 13 15 18 21 25 27 28 29 30 r 0 22 # 6212 ffc_range c a 33 1 1 e r 0 33 # 6213 ffc_range c a 33 1 1 e r 2 1 # 6214 ffc_range c a 33 1 1 e r 10 13 # 6215 ffc_range c a 33 1 1 e r 23 33 # 6216 ffc_range c a 33 1 1 e r 0 2 # 6217 ffc_range c a 33 1 1 f r 0 33 # 6218 ffc_range c a 33 1 1 f r 31 4 # 6219 ffc_range c a 33 1 1 f r 7 16 # 6220 ffc_range c a 33 1 1 f r 13 33 # 6221 ffc_range c a 33 1 1 f r 0 4 # 6222 ffc_range c a 33 1 1 0 1 3 5 6 7 11 12 15 16 17 18 21 24 25 26 28 31 r 0 33 # 6223 ffc_range c a 33 1 1 0 1 2 3 4 6 7 8 9 10 13 16 17 18 19 20 21 23 24 25 26 27 29 32 r 6 1 # 6224 ffc_range c a 33 1 1 5 7 13 15 16 19 20 23 24 28 30 32 r 6 18 # 6225 ffc_range c a 33 1 1 1 5 7 10 14 18 21 23 24 25 31 r 2 33 # 6226 ffc_range c a 33 1 1 0 1 2 6 10 12 13 17 19 23 24 25 28 29 31 32 r 0 33 # 6227 ffc_range c a 63 0 0 e r 0 63 # 6228 ffc_range c a 63 0 0 e r 47 28 # 6229 ffc_range c a 63 0 0 e r 11 42 # 6230 ffc_range c a 63 0 0 e r 6 63 # 6231 ffc_range c a 63 0 0 e r 0 39 # 6232 ffc_range c a 63 0 0 f r 0 63 # 6233 ffc_range c a 63 0 0 f r 22 15 # 6234 ffc_range c a 63 0 0 f r 5 21 # 6235 ffc_range c a 63 0 0 f r 29 63 # 6236 ffc_range c a 63 0 0 f r 0 50 # 6237 ffc_range c a 63 0 0 0 1 2 6 7 9 10 11 13 14 15 19 20 22 25 26 27 30 33 34 35 36 37 38 40 41 42 45 47 49 50 51 52 53 59 60 62 r 0 63 # 6238 ffc_range c a 63 0 0 2 3 6 12 14 15 18 22 23 24 27 29 30 31 34 36 38 40 42 43 44 46 48 49 50 53 57 58 59 60 61 r 45 20 # 6239 ffc_range c a 63 0 0 1 3 4 6 9 10 11 12 14 16 18 19 20 21 22 23 24 25 26 27 29 30 32 36 37 38 39 40 41 42 44 46 47 48 49 50 52 53 55 57 59 60 r 38 58 # 6240 ffc_range c a 63 0 0 4 7 9 10 11 12 13 17 21 22 27 28 29 30 34 36 37 38 39 40 41 42 46 47 53 54 55 57 58 60 r 34 63 # 6241 ffc_range c a 63 0 0 0 7 11 14 15 16 17 19 20 21 22 24 26 27 28 31 33 35 37 38 40 44 45 48 51 56 59 61 r 0 6 # 6242 ffc_range c a 63 0 1 e r 0 63 # 6243 ffc_range c a 63 0 1 e r 7 5 # 6244 ffc_range c a 63 0 1 e r 6 48 # 6245 ffc_range c a 63 0 1 e r 38 63 # 6246 ffc_range c a 63 0 1 e r 0 31 # 6247 ffc_range c a 63 0 1 f r 0 63 # 6248 ffc_range c a 63 0 1 f r 49 28 # 6249 ffc_range c a 63 0 1 f r 1 34 # 6250 ffc_range c a 63 0 1 f r 45 63 # 6251 ffc_range c a 63 0 1 f r 0 5 # 6252 ffc_range c a 63 0 1 2 4 8 9 10 15 16 17 18 23 24 27 28 32 34 36 38 42 43 44 47 48 52 55 56 57 59 61 r 0 63 # 6253 ffc_range c a 63 0 1 1 3 4 5 9 12 14 17 18 19 20 26 28 29 30 32 34 38 39 41 42 45 46 47 48 50 52 54 55 56 57 59 60 61 r 55 9 # 6254 ffc_range c a 63 0 1 1 3 4 7 11 14 15 19 22 24 25 26 27 28 30 34 36 38 39 40 42 43 45 46 47 48 52 56 59 60 r 3 19 # 6255 ffc_range c a 63 0 1 1 4 7 12 16 18 19 20 22 24 25 27 29 30 32 34 36 41 45 46 47 49 50 53 54 55 56 58 61 62 r 55 63 # 6256 ffc_range c a 63 0 1 0 1 3 4 5 6 8 10 13 18 19 22 24 25 27 30 32 35 40 42 43 45 47 52 54 56 62 r 0 19 # 6257 ffc_range c a 63 1 0 e r 0 63 # 6258 ffc_range c a 63 1 0 e r 32 29 # 6259 ffc_range c a 63 1 0 e r 24 63 # 6260 ffc_range c a 63 1 0 e r 20 63 # 6261 ffc_range c a 63 1 0 e r 0 44 # 6262 ffc_range c a 63 1 0 f r 0 63 # 6263 ffc_range c a 63 1 0 f r 58 15 # 6264 ffc_range c a 63 1 0 f r 0 1 # 6265 ffc_range c a 63 1 0 f r 27 63 # 6266 ffc_range c a 63 1 0 f r 0 0 # 6267 ffc_range c a 63 1 0 0 1 3 4 5 7 13 14 15 17 20 21 22 24 25 26 29 32 33 35 36 37 39 40 41 45 47 48 49 50 51 52 53 55 57 59 60 61 r 0 63 # 6268 ffc_range c a 63 1 0 0 6 9 11 15 18 19 21 26 31 32 33 41 47 48 50 51 53 57 58 r 15 13 # 6269 ffc_range c a 63 1 0 0 1 5 6 10 11 12 20 21 23 24 25 27 29 33 34 35 36 37 38 39 40 41 42 43 46 48 50 59 r 1 2 # 6270 ffc_range c a 63 1 0 2 3 5 6 8 9 11 12 13 14 16 18 19 21 23 25 27 29 30 33 35 36 39 41 42 43 44 48 49 52 53 56 58 59 61 r 33 63 # 6271 ffc_range c a 63 1 0 0 1 2 3 6 7 8 10 11 12 13 15 16 17 18 19 24 29 32 37 38 41 44 47 50 51 53 54 60 61 62 r 0 2 # 6272 ffc_range c a 63 1 1 e r 0 63 # 6273 ffc_range c a 63 1 1 e r 58 2 # 6274 ffc_range c a 63 1 1 e r 19 32 # 6275 ffc_range c a 63 1 1 e r 53 63 # 6276 ffc_range c a 63 1 1 e r 0 60 # 6277 ffc_range c a 63 1 1 f r 0 63 # 6278 ffc_range c a 63 1 1 f r 2 1 # 6279 ffc_range c a 63 1 1 f r 5 16 # 6280 ffc_range c a 63 1 1 f r 47 63 # 6281 ffc_range c a 63 1 1 f r 0 57 # 6282 ffc_range c a 63 1 1 0 3 5 6 7 8 9 12 13 14 15 18 21 22 24 25 26 29 30 31 34 35 37 38 41 44 48 50 52 53 54 55 56 57 59 60 62 r 0 63 # 6283 ffc_range c a 63 1 1 0 2 3 4 5 7 11 13 19 21 24 27 28 29 30 31 33 34 35 38 39 40 43 45 47 49 51 52 53 54 61 r 5 1 # 6284 ffc_range c a 63 1 1 0 5 6 7 9 13 18 22 23 24 25 26 27 32 33 36 41 43 44 45 50 52 59 60 61 62 r 3 4 # 6285 ffc_range c a 63 1 1 3 4 8 11 12 15 17 18 19 20 25 26 28 29 30 32 33 35 37 44 45 49 50 54 55 57 58 61 62 r 51 63 # 6286 ffc_range c a 63 1 1 0 6 7 8 10 11 12 18 21 23 26 27 28 29 31 32 33 34 37 38 40 41 43 48 50 54 55 57 58 60 r 0 6 # 6287 ffc_range c a 64 0 0 e r 0 64 # 6288 ffc_range c a 64 0 0 e r 2 1 # 6289 ffc_range c a 64 0 0 e r 0 1 # 6290 ffc_range c a 64 0 0 e r 16 64 # 6291 ffc_range c a 64 0 0 e r 0 27 # 6292 ffc_range c a 64 0 0 f r 0 64 # 6293 ffc_range c a 64 0 0 f r 1 0 # 6294 ffc_range c a 64 0 0 f r 2 5 # 6295 ffc_range c a 64 0 0 f r 62 64 # 6296 ffc_range c a 64 0 0 f r 0 62 # 6297 ffc_range c a 64 0 0 2 3 4 5 8 10 13 14 15 16 18 19 21 24 25 27 30 31 32 33 34 35 37 42 44 45 47 50 51 52 55 56 57 r 0 64 # 6298 ffc_range c a 64 0 0 1 3 4 8 10 11 14 17 20 23 25 29 30 32 33 35 38 40 41 42 43 44 45 49 50 56 57 58 60 61 62 r 15 7 # 6299 ffc_range c a 64 0 0 6 9 11 13 17 18 19 21 22 24 26 27 28 29 30 32 38 39 43 44 45 48 50 51 52 53 55 58 60 63 r 3 55 # 6300 ffc_range c a 64 0 0 4 5 6 8 9 12 14 15 17 18 20 21 22 25 26 27 28 29 30 32 34 35 41 42 49 50 51 52 53 58 61 r 62 64 # 6301 ffc_range c a 64 0 0 3 4 6 7 10 11 14 17 21 22 23 24 25 31 32 33 40 44 46 51 52 54 55 57 59 61 r 0 6 # 6302 ffc_range c a 64 0 1 e r 0 64 # 6303 ffc_range c a 64 0 1 e r 28 10 # 6304 ffc_range c a 64 0 1 e r 0 3 # 6305 ffc_range c a 64 0 1 e r 26 64 # 6306 ffc_range c a 64 0 1 e r 0 19 # 6307 ffc_range c a 64 0 1 f r 0 64 # 6308 ffc_range c a 64 0 1 f r 36 27 # 6309 ffc_range c a 64 0 1 f r 21 24 # 6310 ffc_range c a 64 0 1 f r 0 64 # 6311 ffc_range c a 64 0 1 f r 0 23 # 6312 ffc_range c a 64 0 1 2 4 5 7 13 14 18 20 22 23 24 28 30 31 33 36 37 42 43 45 46 47 48 49 51 54 55 56 63 r 0 64 # 6313 ffc_range c a 64 0 1 1 3 4 8 9 10 12 13 15 16 17 18 19 21 22 24 26 31 33 34 37 40 42 43 51 52 54 55 57 59 60 61 62 r 0 0 # 6314 ffc_range c a 64 0 1 1 3 7 9 11 14 17 18 20 22 25 27 31 33 34 39 41 46 49 50 52 53 54 56 59 60 61 62 63 r 17 44 # 6315 ffc_range c a 64 0 1 2 3 4 5 6 9 10 16 18 19 21 23 24 30 31 33 34 36 38 41 42 43 45 51 52 53 55 57 63 r 28 64 # 6316 ffc_range c a 64 0 1 0 2 5 6 8 9 10 11 14 16 17 19 22 27 28 30 31 35 38 41 42 44 45 46 47 48 51 52 56 57 58 59 60 61 r 0 37 # 6317 ffc_range c a 64 1 0 e r 0 64 # 6318 ffc_range c a 64 1 0 e r 35 11 # 6319 ffc_range c a 64 1 0 e r 46 64 # 6320 ffc_range c a 64 1 0 e r 9 64 # 6321 ffc_range c a 64 1 0 e r 0 4 # 6322 ffc_range c a 64 1 0 f r 0 64 # 6323 ffc_range c a 64 1 0 f r 17 0 # 6324 ffc_range c a 64 1 0 f r 25 31 # 6325 ffc_range c a 64 1 0 f r 40 64 # 6326 ffc_range c a 64 1 0 f r 0 16 # 6327 ffc_range c a 64 1 0 0 1 2 5 6 7 8 10 11 14 15 16 19 21 22 23 24 25 26 27 28 29 30 33 34 35 37 40 44 45 47 51 59 60 r 0 64 # 6328 ffc_range c a 64 1 0 3 4 5 7 8 11 15 16 17 21 22 28 29 30 33 34 36 39 40 44 45 46 47 48 54 55 56 58 59 61 r 52 31 # 6329 ffc_range c a 64 1 0 0 3 7 10 13 14 15 16 19 22 26 27 28 29 30 36 37 41 42 43 44 45 46 47 52 54 56 57 62 63 r 2 7 # 6330 ffc_range c a 64 1 0 4 5 8 11 12 16 18 19 20 21 25 28 30 31 32 37 38 44 45 46 47 49 53 55 56 57 58 59 61 62 63 r 42 64 # 6331 ffc_range c a 64 1 0 7 8 9 14 16 17 18 19 22 26 29 34 35 36 39 40 41 45 46 47 48 50 52 54 56 57 58 61 62 63 r 0 33 # 6332 ffc_range c a 64 1 1 e r 0 64 # 6333 ffc_range c a 64 1 1 e r 11 3 # 6334 ffc_range c a 64 1 1 e r 36 53 # 6335 ffc_range c a 64 1 1 e r 22 64 # 6336 ffc_range c a 64 1 1 e r 0 28 # 6337 ffc_range c a 64 1 1 f r 0 64 # 6338 ffc_range c a 64 1 1 f r 47 40 # 6339 ffc_range c a 64 1 1 f r 0 5 # 6340 ffc_range c a 64 1 1 f r 13 64 # 6341 ffc_range c a 64 1 1 f r 0 3 # 6342 ffc_range c a 64 1 1 0 4 5 8 9 11 12 13 15 17 19 21 22 24 28 29 30 31 32 35 37 40 41 44 51 53 57 58 60 61 62 63 r 0 64 # 6343 ffc_range c a 64 1 1 2 3 4 7 11 12 16 21 23 24 27 28 34 39 40 42 43 44 45 47 49 51 52 53 54 55 56 59 61 63 r 0 0 # 6344 ffc_range c a 64 1 1 1 3 8 13 14 16 17 19 22 23 26 30 31 32 34 37 38 41 42 44 45 46 51 54 55 56 57 61 r 12 30 # 6345 ffc_range c a 64 1 1 0 1 2 7 8 10 11 12 14 15 21 28 29 34 35 36 38 40 44 47 48 49 51 52 55 56 57 59 60 61 r 27 64 # 6346 ffc_range c a 64 1 1 1 3 4 5 8 9 10 13 14 17 18 19 21 22 28 30 31 34 36 39 43 46 47 49 51 52 56 58 60 61 r 0 63 # 6347 ffc_range c a 65 0 0 e r 0 65 # 6348 ffc_range c a 65 0 0 e r 65 58 # 6349 ffc_range c a 65 0 0 e r 23 25 # 6350 ffc_range c a 65 0 0 e r 40 65 # 6351 ffc_range c a 65 0 0 e r 0 23 # 6352 ffc_range c a 65 0 0 f r 0 65 # 6353 ffc_range c a 65 0 0 f r 40 12 # 6354 ffc_range c a 65 0 0 f r 1 35 # 6355 ffc_range c a 65 0 0 f r 31 65 # 6356 ffc_range c a 65 0 0 f r 0 38 # 6357 ffc_range c a 65 0 0 1 2 5 7 8 9 12 13 15 17 19 20 23 24 25 26 29 30 31 32 33 36 37 39 40 41 43 44 45 46 48 50 52 58 59 61 62 64 r 0 65 # 6358 ffc_range c a 65 0 0 1 4 7 13 14 16 19 20 21 25 28 29 30 31 36 40 41 43 48 49 51 55 57 63 64 r 15 9 # 6359 ffc_range c a 65 0 0 1 2 3 4 7 8 9 12 13 15 17 18 21 22 23 25 26 28 30 34 36 38 39 40 43 45 47 48 53 54 56 57 58 59 62 63 64 r 41 46 # 6360 ffc_range c a 65 0 0 0 3 7 8 9 12 13 14 15 17 18 19 20 21 25 28 30 31 32 33 34 35 38 42 43 46 47 49 51 52 53 56 57 58 59 61 62 64 r 21 65 # 6361 ffc_range c a 65 0 0 6 10 12 13 16 20 23 25 26 32 33 34 39 40 43 45 49 50 55 57 61 62 r 0 36 # 6362 ffc_range c a 65 0 1 e r 0 65 # 6363 ffc_range c a 65 0 1 e r 21 1 # 6364 ffc_range c a 65 0 1 e r 8 25 # 6365 ffc_range c a 65 0 1 e r 36 65 # 6366 ffc_range c a 65 0 1 e r 0 0 # 6367 ffc_range c a 65 0 1 f r 0 65 # 6368 ffc_range c a 65 0 1 f r 41 37 # 6369 ffc_range c a 65 0 1 f r 15 44 # 6370 ffc_range c a 65 0 1 f r 5 65 # 6371 ffc_range c a 65 0 1 f r 0 42 # 6372 ffc_range c a 65 0 1 0 1 2 4 5 6 8 9 11 13 14 16 20 25 29 31 33 36 38 39 41 42 43 44 47 48 51 52 53 58 59 61 62 63 64 r 0 65 # 6373 ffc_range c a 65 0 1 2 4 5 6 7 10 11 12 14 16 20 21 22 25 31 37 39 42 44 48 49 50 51 53 54 55 56 60 61 62 r 65 36 # 6374 ffc_range c a 65 0 1 0 4 7 9 11 12 14 16 17 19 21 23 24 26 27 28 29 30 33 34 35 38 39 40 43 44 48 49 52 56 57 60 62 r 9 12 # 6375 ffc_range c a 65 0 1 0 5 6 7 11 13 15 16 17 18 21 22 23 24 25 26 29 31 33 39 40 41 42 43 44 46 48 49 50 52 55 58 59 62 63 r 1 65 # 6376 ffc_range c a 65 0 1 1 2 3 4 7 10 12 13 14 17 18 19 25 26 27 28 31 32 33 34 35 39 46 47 48 49 50 54 57 61 64 r 0 34 # 6377 ffc_range c a 65 1 0 e r 0 65 # 6378 ffc_range c a 65 1 0 e r 26 11 # 6379 ffc_range c a 65 1 0 e r 18 43 # 6380 ffc_range c a 65 1 0 e r 39 65 # 6381 ffc_range c a 65 1 0 e r 0 58 # 6382 ffc_range c a 65 1 0 f r 0 65 # 6383 ffc_range c a 65 1 0 f r 36 1 # 6384 ffc_range c a 65 1 0 f r 29 46 # 6385 ffc_range c a 65 1 0 f r 9 65 # 6386 ffc_range c a 65 1 0 f r 0 4 # 6387 ffc_range c a 65 1 0 1 5 6 11 12 15 16 18 19 23 24 27 28 29 30 32 34 35 36 37 42 43 44 46 47 48 49 53 54 56 59 61 62 63 r 0 65 # 6388 ffc_range c a 65 1 0 0 1 6 7 9 10 11 12 14 15 16 17 18 19 20 22 30 33 34 35 39 42 43 44 45 46 47 48 49 51 52 54 56 58 60 61 64 r 61 57 # 6389 ffc_range c a 65 1 0 1 2 4 5 7 8 9 10 12 14 19 20 21 22 24 25 26 29 30 31 32 34 35 38 42 43 44 45 48 49 51 52 55 57 59 60 63 64 r 13 15 # 6390 ffc_range c a 65 1 0 1 4 5 7 8 9 12 14 15 22 26 27 28 32 33 34 35 37 38 40 43 44 46 50 51 53 55 57 58 64 r 32 65 # 6391 ffc_range c a 65 1 0 4 6 9 13 16 17 20 24 26 28 29 31 33 35 36 37 40 41 43 44 45 47 48 50 51 52 55 56 57 58 60 63 r 0 2 # 6392 ffc_range c a 65 1 1 e r 0 65 # 6393 ffc_range c a 65 1 1 e r 56 53 # 6394 ffc_range c a 65 1 1 e r 1 20 # 6395 ffc_range c a 65 1 1 e r 5 65 # 6396 ffc_range c a 65 1 1 e r 0 25 # 6397 ffc_range c a 65 1 1 f r 0 65 # 6398 ffc_range c a 65 1 1 f r 38 16 # 6399 ffc_range c a 65 1 1 f r 19 39 # 6400 ffc_range c a 65 1 1 f r 58 65 # 6401 ffc_range c a 65 1 1 f r 0 42 # 6402 ffc_range c a 65 1 1 1 4 6 7 8 10 11 12 13 16 17 19 20 21 22 25 27 28 30 33 34 40 43 44 45 47 49 52 54 60 61 64 r 0 65 # 6403 ffc_range c a 65 1 1 1 3 4 6 8 9 13 14 15 18 19 21 23 25 26 36 37 39 40 41 43 44 46 48 49 52 53 55 59 60 63 64 r 51 38 # 6404 ffc_range c a 65 1 1 0 2 3 6 12 13 14 16 19 20 21 22 23 26 30 32 36 41 42 44 46 48 51 52 54 56 57 58 61 62 r 0 0 # 6405 ffc_range c a 65 1 1 2 4 5 9 10 11 12 15 19 22 27 28 31 36 37 44 45 46 47 50 52 54 56 58 59 62 63 r 6 65 # 6406 ffc_range c a 65 1 1 2 3 4 8 9 11 12 15 16 17 19 24 25 27 28 29 30 31 33 34 37 38 40 42 43 44 46 47 49 50 53 54 56 58 61 63 64 r 0 3 # 6407 ffc_range c a 211 0 0 e r 0 211 # 6408 ffc_range c a 211 0 0 e r 181 156 # 6409 ffc_range c a 211 0 0 e r 3 143 # 6410 ffc_range c a 211 0 0 e r 197 211 # 6411 ffc_range c a 211 0 0 e r 0 203 # 6412 ffc_range c a 211 0 0 f r 0 211 # 6413 ffc_range c a 211 0 0 f r 175 173 # 6414 ffc_range c a 211 0 0 f r 2 65 # 6415 ffc_range c a 211 0 0 f r 124 211 # 6416 ffc_range c a 211 0 0 f r 0 138 # 6417 ffc_range c a 211 0 0 0 2 3 4 6 10 12 13 16 18 19 20 21 23 25 28 31 32 34 36 38 40 41 42 43 44 48 51 53 57 58 64 66 67 68 69 70 71 73 74 76 78 79 83 84 85 88 90 92 94 95 96 103 105 106 109 110 111 112 115 117 120 122 123 124 125 127 129 135 138 139 140 141 143 145 146 147 148 151 152 155 157 158 160 161 162 167 170 175 178 179 180 182 183 184 186 187 189 192 194 196 197 201 202 208 209 r 0 211 # 6418 ffc_range c a 211 0 0 0 3 4 6 7 8 11 13 14 16 17 18 19 20 21 22 24 25 26 28 29 30 32 35 36 37 38 43 48 49 51 52 53 55 56 59 60 63 66 69 70 71 74 75 77 80 83 85 89 92 96 98 103 104 106 109 110 114 115 121 122 125 126 130 132 135 137 138 139 140 141 142 144 145 149 150 151 152 154 155 157 159 161 166 167 169 172 174 175 178 179 181 182 185 187 191 193 194 195 197 199 200 201 203 207 208 210 r 93 53 # 6419 ffc_range c a 211 0 0 0 4 6 8 9 10 12 14 15 16 18 19 20 23 24 26 29 30 34 37 42 44 46 47 48 49 50 51 54 56 58 63 64 68 69 72 74 75 76 77 79 83 86 88 89 93 95 101 102 104 106 107 111 112 113 119 121 124 128 129 136 139 140 141 142 143 144 146 147 148 150 151 156 157 158 159 160 162 166 168 169 171 172 173 174 177 179 182 183 184 189 195 196 198 199 202 203 209 r 1 13 # 6420 ffc_range c a 211 0 0 3 5 8 9 10 14 17 18 19 21 22 23 28 29 30 32 33 36 37 38 39 40 41 42 43 45 47 48 52 56 59 65 66 67 68 69 70 71 73 74 75 76 81 82 85 86 91 93 94 95 96 97 98 99 102 103 106 107 108 114 115 119 120 121 124 126 127 129 130 131 134 136 139 140 141 142 143 145 146 149 151 152 153 160 161 165 166 176 177 178 180 183 184 188 190 191 193 194 195 196 197 200 201 202 204 205 206 207 208 209 r 49 211 # 6421 ffc_range c a 211 0 0 0 2 3 4 5 7 9 11 12 14 15 28 31 32 33 34 35 36 38 44 47 48 49 52 53 56 57 59 61 62 64 65 67 69 73 74 75 77 78 80 83 84 85 86 87 88 90 91 93 95 96 98 101 102 103 104 106 107 109 112 113 114 115 116 117 118 121 123 124 125 126 127 131 133 139 140 143 146 147 149 151 152 153 155 156 158 159 160 162 167 169 170 173 181 184 185 187 188 190 191 192 194 195 196 198 202 206 207 208 r 0 171 # 6422 ffc_range c a 211 0 1 e r 0 211 # 6423 ffc_range c a 211 0 1 e r 193 124 # 6424 ffc_range c a 211 0 1 e r 21 62 # 6425 ffc_range c a 211 0 1 e r 39 211 # 6426 ffc_range c a 211 0 1 e r 0 189 # 6427 ffc_range c a 211 0 1 f r 0 211 # 6428 ffc_range c a 211 0 1 f r 189 115 # 6429 ffc_range c a 211 0 1 f r 146 176 # 6430 ffc_range c a 211 0 1 f r 8 211 # 6431 ffc_range c a 211 0 1 f r 0 167 # 6432 ffc_range c a 211 0 1 1 7 8 14 16 20 22 23 25 28 30 34 35 41 43 44 47 48 49 50 52 53 56 57 58 59 60 64 65 66 71 73 74 77 78 80 81 82 83 84 88 89 91 99 100 101 103 104 110 111 114 115 116 117 119 120 121 122 125 126 127 131 133 134 138 143 144 146 147 152 154 158 160 163 167 168 169 173 174 176 177 180 181 183 184 188 190 192 196 197 198 200 202 204 205 206 207 209 r 0 211 # 6433 ffc_range c a 211 0 1 1 2 4 5 6 7 8 9 10 12 13 14 15 16 18 22 25 31 32 35 37 38 39 40 43 45 46 49 51 52 60 61 63 72 73 76 77 80 81 82 83 86 87 88 95 96 97 100 101 102 103 106 111 114 115 116 117 118 121 122 123 128 129 130 131 133 134 135 137 141 143 146 147 148 154 155 156 159 162 163 166 167 169 172 173 175 176 177 178 179 183 184 186 187 188 191 192 194 196 199 205 208 r 173 146 # 6434 ffc_range c a 211 0 1 2 3 7 8 10 14 15 17 19 24 26 27 28 30 34 35 36 39 40 46 47 50 51 52 54 56 57 62 63 64 65 67 69 70 73 75 78 80 81 84 86 87 92 93 96 97 99 100 101 103 104 105 106 110 111 113 118 120 122 123 127 128 130 131 134 136 138 140 145 147 152 154 155 158 160 161 165 166 172 173 174 179 180 182 184 185 190 191 193 195 196 197 198 202 205 206 207 208 r 78 210 # 6435 ffc_range c a 211 0 1 4 5 6 9 10 12 15 17 19 20 21 23 24 25 26 30 31 32 38 39 40 43 44 45 46 48 51 53 56 58 60 61 65 66 68 69 71 74 77 78 79 82 83 84 87 90 92 94 96 97 98 99 101 102 103 105 106 107 108 109 110 112 115 116 117 118 121 124 127 128 130 133 135 136 139 140 143 144 145 146 148 149 150 157 162 169 172 173 175 176 179 181 183 185 187 188 189 191 195 197 199 201 204 205 207 210 r 91 211 # 6436 ffc_range c a 211 0 1 1 3 4 5 9 11 12 13 16 17 21 22 24 25 26 29 31 32 33 34 38 39 40 42 43 48 49 52 54 55 57 59 61 62 66 67 68 69 70 71 73 74 75 76 78 79 84 87 88 89 90 94 95 96 98 99 101 104 107 110 111 112 114 120 122 124 125 127 133 134 138 139 141 144 146 148 150 151 153 156 157 158 159 163 166 167 168 169 172 173 175 182 183 187 188 190 192 194 196 197 198 199 200 202 203 207 208 209 r 0 177 # 6437 ffc_range c a 211 1 0 e r 0 211 # 6438 ffc_range c a 211 1 0 e r 118 23 # 6439 ffc_range c a 211 1 0 e r 20 37 # 6440 ffc_range c a 211 1 0 e r 68 211 # 6441 ffc_range c a 211 1 0 e r 0 35 # 6442 ffc_range c a 211 1 0 f r 0 211 # 6443 ffc_range c a 211 1 0 f r 161 145 # 6444 ffc_range c a 211 1 0 f r 55 108 # 6445 ffc_range c a 211 1 0 f r 169 211 # 6446 ffc_range c a 211 1 0 f r 0 159 # 6447 ffc_range c a 211 1 0 0 1 2 3 4 5 7 11 12 13 14 15 16 17 18 19 22 23 24 29 30 32 33 34 39 40 41 43 44 46 49 52 55 59 64 66 68 69 71 72 73 74 76 78 82 85 86 87 90 91 97 98 100 102 103 104 105 107 113 114 115 116 117 118 120 121 125 126 127 128 129 130 131 133 136 137 139 140 148 150 151 155 159 162 163 166 168 171 172 173 176 177 178 179 181 182 183 186 188 192 201 205 208 r 0 211 # 6448 ffc_range c a 211 1 0 1 5 7 8 14 16 17 18 21 22 23 25 27 28 33 34 35 36 39 40 41 43 45 48 50 53 56 59 60 67 69 70 73 75 76 77 78 79 81 85 86 90 92 94 95 97 98 99 100 101 104 106 107 109 110 112 114 116 117 123 124 126 129 131 132 136 141 142 143 145 148 149 151 153 154 155 157 160 163 164 165 167 168 173 175 176 178 187 189 193 200 202 205 210 r 82 52 # 6449 ffc_range c a 211 1 0 3 4 5 9 10 11 12 13 17 19 20 21 23 29 35 39 42 46 51 54 56 57 58 60 62 64 65 69 70 71 72 73 74 76 77 78 80 81 85 86 88 89 90 91 92 95 98 99 101 102 104 105 107 110 114 115 121 126 127 128 129 130 132 133 135 137 139 144 147 148 151 155 156 158 159 161 164 165 166 168 171 172 173 175 176 177 178 179 181 182 183 185 186 189 192 193 194 197 198 201 204 205 206 207 209 r 0 46 # 6450 ffc_range c a 211 1 0 5 7 9 10 11 12 16 17 18 19 20 21 22 23 24 27 28 29 33 35 37 38 39 40 42 43 44 47 48 49 50 51 52 54 55 56 57 58 59 60 64 65 68 69 71 73 77 78 80 81 83 85 86 88 91 92 95 97 99 100 102 107 108 110 111 118 120 121 125 127 130 132 136 137 139 143 145 147 149 150 151 152 156 157 161 162 166 169 170 171 175 177 179 180 182 183 184 187 188 193 195 204 205 209 210 r 71 211 # 6451 ffc_range c a 211 1 0 1 2 3 4 6 7 8 9 12 13 16 18 20 21 22 24 25 26 28 29 31 34 36 37 40 41 42 43 45 46 49 50 52 54 58 63 64 68 69 70 71 73 75 76 83 84 88 91 93 94 96 97 98 99 100 101 102 108 109 111 112 113 114 115 118 119 120 122 125 128 132 133 134 137 138 139 140 142 143 145 152 157 159 161 164 166 167 170 171 172 173 174 175 176 180 181 182 183 186 187 190 194 195 198 199 200 201 202 203 204 206 207 208 r 0 5 # 6452 ffc_range c a 211 1 1 e r 0 211 # 6453 ffc_range c a 211 1 1 e r 157 7 # 6454 ffc_range c a 211 1 1 e r 96 137 # 6455 ffc_range c a 211 1 1 e r 190 211 # 6456 ffc_range c a 211 1 1 e r 0 9 # 6457 ffc_range c a 211 1 1 f r 0 211 # 6458 ffc_range c a 211 1 1 f r 175 118 # 6459 ffc_range c a 211 1 1 f r 133 196 # 6460 ffc_range c a 211 1 1 f r 157 211 # 6461 ffc_range c a 211 1 1 f r 0 210 # 6462 ffc_range c a 211 1 1 1 2 3 5 6 8 11 12 13 14 15 20 24 25 26 28 35 40 43 47 48 49 51 54 55 57 61 62 67 72 73 74 84 89 92 94 99 100 101 103 104 108 110 111 112 115 117 119 120 121 123 124 129 132 133 134 135 136 139 140 142 143 144 146 149 150 152 155 157 159 160 161 163 166 172 173 174 177 178 180 181 182 184 185 188 193 195 196 197 202 203 205 207 r 0 211 # 6463 ffc_range c a 211 1 1 1 2 3 4 5 6 8 10 12 13 16 18 20 22 23 24 25 30 33 36 38 40 41 42 44 46 48 49 50 52 53 55 59 60 61 64 66 68 69 70 72 73 74 75 76 77 79 80 81 83 84 88 89 90 91 92 96 98 101 102 104 105 107 108 111 113 117 120 124 125 126 129 130 131 132 133 135 136 139 140 141 142 144 146 147 151 152 158 161 164 167 168 169 170 171 172 173 176 181 185 186 189 190 191 192 195 196 198 199 201 202 203 209 210 r 94 40 # 6464 ffc_range c a 211 1 1 0 2 3 4 6 7 9 11 12 16 18 19 20 21 25 26 29 30 32 33 35 38 39 40 42 43 52 54 59 67 68 69 70 71 73 74 75 76 82 84 85 86 90 92 94 96 97 100 104 105 106 107 111 112 115 117 118 121 122 123 125 127 128 131 132 133 134 135 136 137 138 139 142 143 144 145 146 147 148 149 152 155 158 159 160 162 163 165 167 168 170 171 173 174 176 177 179 181 182 188 191 192 195 196 197 198 199 201 202 203 204 205 206 r 46 206 # 6465 ffc_range c a 211 1 1 5 7 9 18 20 23 25 27 28 30 33 34 35 36 37 38 39 40 44 45 46 49 50 53 54 55 56 59 62 63 65 66 67 68 69 70 71 72 75 78 79 80 81 82 84 85 86 91 92 94 95 96 97 98 99 101 105 107 108 110 111 112 113 115 116 119 120 122 124 127 131 133 135 136 138 139 140 141 142 143 145 149 151 153 155 157 158 159 163 165 166 167 169 170 171 172 174 179 180 181 182 184 189 190 191 194 197 200 204 206 210 r 37 211 # 6466 ffc_range c a 211 1 1 0 1 2 3 4 5 6 8 9 10 13 14 15 21 22 24 28 30 31 33 36 39 42 43 45 46 47 48 49 50 52 53 54 55 59 60 62 63 64 67 68 69 77 80 82 83 84 88 89 92 93 95 97 98 99 103 104 107 112 113 115 117 118 122 128 133 139 140 143 147 151 152 153 155 157 160 161 162 164 165 166 167 169 170 173 175 177 178 179 183 185 186 190 194 197 199 200 201 204 205 r 0 100 # 6467 ffc_range c a 224 0 0 e r 0 224 # 6468 ffc_range c a 224 0 0 e r 183 174 # 6469 ffc_range c a 224 0 0 e r 134 169 # 6470 ffc_range c a 224 0 0 e r 19 224 # 6471 ffc_range c a 224 0 0 e r 0 207 # 6472 ffc_range c a 224 0 0 f r 0 224 # 6473 ffc_range c a 224 0 0 f r 3 1 # 6474 ffc_range c a 224 0 0 f r 49 169 # 6475 ffc_range c a 224 0 0 f r 155 224 # 6476 ffc_range c a 224 0 0 f r 0 56 # 6477 ffc_range c a 224 0 0 2 3 6 7 14 15 16 17 20 22 24 29 30 31 33 34 37 41 42 47 49 52 55 57 59 63 68 69 70 73 74 75 77 78 79 80 81 82 83 86 87 89 91 93 97 98 101 103 104 106 107 110 111 113 114 115 121 123 124 125 131 133 134 135 137 138 141 143 147 148 149 152 154 155 159 161 162 163 164 165 166 167 169 171 173 175 177 178 179 180 181 183 186 187 191 192 194 195 196 198 203 205 206 208 211 213 214 215 216 217 218 220 223 r 0 224 # 6478 ffc_range c a 224 0 0 2 4 6 7 8 10 11 12 15 16 17 20 23 24 27 29 30 31 32 33 35 38 39 40 42 43 44 47 49 53 54 59 60 62 63 64 66 68 72 75 76 77 78 80 83 87 88 91 92 94 95 98 100 102 103 105 106 108 109 113 115 117 118 122 123 125 126 127 129 132 133 136 138 139 143 145 146 147 150 151 152 153 154 156 159 166 168 171 172 174 175 178 179 180 181 183 184 186 188 191 192 193 197 198 199 201 202 205 207 209 212 213 214 217 218 219 222 223 r 145 121 # 6479 ffc_range c a 224 0 0 3 5 6 8 15 16 17 18 19 21 22 24 25 26 27 28 32 38 40 41 43 45 46 48 50 53 54 56 57 59 60 61 62 63 66 69 70 72 76 77 79 82 83 85 87 89 90 92 93 95 96 100 102 103 105 106 108 112 116 117 120 121 122 123 124 126 127 133 135 136 139 140 141 143 144 145 146 147 148 151 154 155 156 158 160 161 162 164 165 167 169 170 171 174 177 180 181 188 189 192 194 195 197 198 200 201 206 207 208 211 213 215 218 219 r 21 42 # 6480 ffc_range c a 224 0 0 1 5 7 9 11 12 21 22 24 26 28 33 34 35 36 38 39 42 46 47 48 51 55 56 57 59 61 63 66 68 69 74 75 77 81 84 87 89 91 93 94 95 96 97 99 100 102 104 105 106 111 113 117 118 119 122 123 125 126 128 130 131 132 133 134 136 137 138 142 143 144 146 148 149 150 153 155 158 160 161 162 164 165 166 167 168 169 170 172 173 175 182 183 184 188 190 193 194 196 197 199 200 203 206 208 209 210 211 214 216 218 220 222 r 153 224 # 6481 ffc_range c a 224 0 0 0 1 2 3 4 5 6 8 13 16 20 21 22 26 27 32 35 36 39 40 41 43 44 45 48 49 50 51 53 55 58 59 65 68 69 71 73 74 76 77 78 79 80 82 85 91 95 97 101 102 103 104 105 107 108 109 114 115 117 123 124 126 131 134 137 138 139 140 144 147 152 153 155 157 161 165 166 168 169 171 173 175 177 178 182 190 194 197 198 203 205 206 207 209 211 214 218 219 220 221 223 r 0 150 # 6482 ffc_range c a 224 0 1 e r 0 224 # 6483 ffc_range c a 224 0 1 e r 138 13 # 6484 ffc_range c a 224 0 1 e r 110 201 # 6485 ffc_range c a 224 0 1 e r 217 224 # 6486 ffc_range c a 224 0 1 e r 0 139 # 6487 ffc_range c a 224 0 1 f r 0 224 # 6488 ffc_range c a 224 0 1 f r 103 59 # 6489 ffc_range c a 224 0 1 f r 131 204 # 6490 ffc_range c a 224 0 1 f r 49 224 # 6491 ffc_range c a 224 0 1 f r 0 40 # 6492 ffc_range c a 224 0 1 0 3 5 6 7 8 13 14 17 18 23 24 25 26 27 30 32 33 34 36 37 38 39 43 50 51 54 57 59 62 63 65 68 75 76 77 79 82 83 84 89 90 92 93 96 97 99 100 101 105 107 108 110 112 113 114 118 120 121 122 123 124 127 129 130 134 135 137 138 141 146 147 148 151 154 155 156 157 158 159 160 164 165 166 167 168 169 173 174 175 178 179 180 181 182 187 189 190 202 203 206 208 211 215 216 218 221 223 r 0 224 # 6493 ffc_range c a 224 0 1 0 1 7 8 12 14 15 16 18 21 22 25 27 29 30 32 34 36 39 41 42 44 45 46 47 48 49 50 52 53 54 56 62 66 68 69 70 72 73 75 76 79 83 85 92 94 96 102 106 108 110 111 112 114 118 120 122 125 126 130 131 132 134 136 137 144 146 147 148 149 152 154 157 158 160 163 164 166 167 171 172 173 175 178 179 180 183 184 187 192 193 194 195 196 197 201 202 207 209 210 215 216 217 218 219 223 r 65 37 # 6494 ffc_range c a 224 0 1 0 5 6 10 15 16 17 20 21 23 24 32 33 38 39 40 44 45 50 53 54 58 59 60 64 65 66 72 75 77 79 81 82 83 84 85 89 91 93 98 99 100 101 102 103 107 109 112 115 119 121 122 123 126 127 129 130 132 133 134 138 142 143 144 146 148 149 152 153 154 157 159 160 161 162 164 165 166 167 169 171 174 176 178 181 182 184 185 188 189 190 192 193 194 196 197 201 203 205 206 209 210 211 212 215 217 218 219 221 r 15 19 # 6495 ffc_range c a 224 0 1 0 1 5 7 9 10 12 15 17 20 23 25 26 27 28 29 31 32 33 34 38 39 40 41 43 44 45 46 48 49 50 53 55 56 57 58 59 60 66 67 68 69 70 71 74 76 78 79 83 86 89 90 94 95 96 99 103 108 109 115 116 122 123 124 127 128 129 133 134 135 139 143 144 146 147 148 149 151 154 155 156 158 159 162 165 172 173 175 177 178 179 180 182 184 185 188 189 194 197 198 202 212 215 217 220 223 r 166 224 # 6496 ffc_range c a 224 0 1 2 6 7 11 12 13 14 19 20 21 22 27 28 31 32 36 37 43 54 55 57 61 63 70 71 72 74 77 78 79 81 83 85 86 87 88 90 95 96 100 102 103 105 107 108 109 110 112 117 118 121 125 127 132 136 139 142 146 147 149 150 152 154 155 158 160 162 165 166 169 171 175 179 180 183 184 186 189 190 192 194 198 199 202 203 207 208 209 210 211 213 218 219 220 222 223 r 0 132 # 6497 ffc_range c a 224 1 0 e r 0 224 # 6498 ffc_range c a 224 1 0 e r 12 3 # 6499 ffc_range c a 224 1 0 e r 11 22 # 6500 ffc_range c a 224 1 0 e r 193 224 # 6501 ffc_range c a 224 1 0 e r 0 12 # 6502 ffc_range c a 224 1 0 f r 0 224 # 6503 ffc_range c a 224 1 0 f r 220 152 # 6504 ffc_range c a 224 1 0 f r 1 32 # 6505 ffc_range c a 224 1 0 f r 197 224 # 6506 ffc_range c a 224 1 0 f r 0 224 # 6507 ffc_range c a 224 1 0 0 2 3 4 7 8 9 12 13 16 19 20 21 22 25 26 27 30 36 37 39 40 41 44 46 47 48 49 52 54 55 57 58 60 62 64 65 66 67 68 70 74 75 76 77 78 80 82 84 85 87 92 94 95 97 98 99 101 103 104 106 107 111 112 116 117 121 122 123 125 126 128 133 137 138 139 142 146 150 153 156 158 159 160 163 165 167 168 170 175 176 179 183 185 191 192 193 194 196 201 202 203 206 211 212 213 214 216 217 218 219 222 223 r 0 224 # 6508 ffc_range c a 224 1 0 1 6 7 10 11 12 13 21 22 23 24 25 26 29 31 32 34 36 37 38 41 43 45 47 50 53 58 59 61 66 69 70 75 77 78 81 82 83 87 88 89 90 92 94 96 97 98 99 101 103 105 106 107 108 109 111 114 115 116 117 118 119 120 121 123 124 127 128 130 135 138 139 141 142 143 145 146 147 148 149 150 151 153 154 160 161 162 168 169 171 172 174 179 181 182 183 184 188 194 195 197 200 201 203 205 211 216 217 218 222 223 r 88 10 # 6509 ffc_range c a 224 1 0 1 2 3 5 8 9 11 13 15 16 17 18 21 22 28 29 30 32 33 37 38 43 45 47 48 57 58 60 61 62 63 67 68 69 77 79 81 84 85 86 88 89 90 91 93 94 95 97 98 100 102 104 105 106 107 108 110 111 112 115 116 119 123 126 127 129 130 132 133 135 136 138 141 144 145 147 149 150 151 155 158 159 160 161 162 163 166 168 170 174 179 181 183 185 186 187 195 196 197 198 199 201 202 203 204 205 206 208 210 214 217 219 221 222 r 185 208 # 6510 ffc_range c a 224 1 0 4 5 6 7 9 10 13 14 16 17 18 19 22 23 24 25 27 29 31 32 34 35 37 38 39 40 41 45 48 57 59 61 74 75 81 82 83 84 88 89 90 92 94 95 96 100 101 102 105 106 107 108 112 115 117 120 122 123 124 125 126 127 132 134 136 137 138 139 140 143 145 146 147 148 151 154 158 159 160 163 166 168 169 171 173 174 175 176 177 178 179 182 183 184 185 186 189 191 193 194 195 196 197 199 200 201 202 203 204 205 206 207 208 210 212 213 214 217 218 219 220 221 222 r 14 224 # 6511 ffc_range c a 224 1 0 1 2 5 6 7 8 9 10 11 12 14 17 18 19 20 23 26 28 30 33 34 37 40 42 44 45 46 47 48 49 50 51 54 56 57 58 59 60 61 65 66 67 68 74 76 77 79 83 84 88 89 91 92 97 102 103 104 105 106 107 111 113 114 117 118 120 121 123 126 127 131 132 133 136 140 141 144 145 147 148 151 154 155 156 157 158 160 161 163 164 165 167 170 171 175 177 178 180 184 185 186 187 188 189 191 192 195 197 204 205 207 212 214 217 222 r 0 97 # 6512 ffc_range c a 224 1 1 e r 0 224 # 6513 ffc_range c a 224 1 1 e r 0 0 # 6514 ffc_range c a 224 1 1 e r 87 127 # 6515 ffc_range c a 224 1 1 e r 181 224 # 6516 ffc_range c a 224 1 1 e r 0 3 # 6517 ffc_range c a 224 1 1 f r 0 224 # 6518 ffc_range c a 224 1 1 f r 7 5 # 6519 ffc_range c a 224 1 1 f r 8 98 # 6520 ffc_range c a 224 1 1 f r 158 224 # 6521 ffc_range c a 224 1 1 f r 0 151 # 6522 ffc_range c a 224 1 1 1 3 4 5 6 8 10 14 15 18 19 22 23 24 26 31 33 34 36 37 38 40 41 42 44 45 50 52 53 55 57 58 59 62 63 64 65 66 67 68 69 71 77 78 81 82 83 84 86 89 91 92 95 98 99 101 102 103 105 108 109 110 111 112 113 114 117 118 121 125 138 139 141 142 144 145 146 148 150 153 154 155 156 159 161 163 164 165 171 174 177 179 183 185 187 189 190 191 197 198 200 201 208 209 213 214 216 219 222 223 r 0 224 # 6523 ffc_range c a 224 1 1 0 4 5 6 7 8 9 13 14 16 19 20 23 24 25 26 30 32 34 35 38 41 43 44 46 52 53 55 56 57 62 65 66 67 69 70 71 72 76 78 80 82 83 85 86 88 90 93 94 95 96 97 98 99 101 102 106 107 108 109 111 113 114 115 116 117 119 120 127 128 130 132 133 134 136 139 148 151 152 153 155 157 158 161 162 164 167 168 169 173 174 175 177 181 184 185 187 188 191 193 195 197 198 202 203 209 210 211 213 216 220 223 r 10 8 # 6524 ffc_range c a 224 1 1 0 1 3 5 6 8 10 12 14 20 22 23 24 25 28 29 30 31 32 38 40 44 46 47 48 51 52 54 58 59 61 62 66 67 68 70 72 74 75 76 77 78 79 82 84 86 87 88 90 91 93 96 97 99 104 107 109 110 111 114 115 116 117 118 119 121 122 124 125 126 127 128 133 134 136 138 141 142 145 148 150 151 153 156 158 159 160 171 177 178 181 183 185 186 189 190 191 195 197 198 199 202 204 205 206 208 209 210 211 213 214 215 216 217 219 220 222 r 14 195 # 6525 ffc_range c a 224 1 1 0 1 2 3 4 7 8 10 11 12 15 17 18 20 22 25 28 29 30 31 32 33 34 35 36 38 39 40 43 44 45 46 48 50 51 52 53 57 58 60 61 63 66 68 71 72 73 74 75 76 77 79 82 84 85 86 88 89 90 95 96 97 99 101 102 105 108 109 110 111 113 116 117 118 120 121 122 129 131 135 137 139 140 142 143 144 147 149 151 152 155 159 163 164 165 166 167 169 170 173 178 185 187 190 192 195 196 197 198 200 201 202 204 205 207 211 212 213 216 219 220 221 223 r 107 224 # 6526 ffc_range c a 224 1 1 0 1 3 5 6 9 10 13 14 15 17 18 21 23 26 28 29 33 35 37 39 40 47 51 56 58 60 62 64 69 72 73 74 78 79 82 83 84 89 90 93 94 98 102 107 108 110 112 114 116 118 121 122 124 125 126 130 132 134 135 136 138 139 140 142 144 145 146 147 149 150 152 153 154 155 157 159 161 163 165 166 169 171 178 181 182 184 185 188 189 190 191 192 194 197 198 200 201 203 205 210 211 213 215 216 217 219 220 222 r 0 10 # 6527 ffc_range c a 247 0 0 e r 0 247 # 6528 ffc_range c a 247 0 0 e r 158 44 # 6529 ffc_range c a 247 0 0 e r 36 204 # 6530 ffc_range c a 247 0 0 e r 144 247 # 6531 ffc_range c a 247 0 0 e r 0 97 # 6532 ffc_range c a 247 0 0 f r 0 247 # 6533 ffc_range c a 247 0 0 f r 97 44 # 6534 ffc_range c a 247 0 0 f r 1 2 # 6535 ffc_range c a 247 0 0 f r 187 247 # 6536 ffc_range c a 247 0 0 f r 0 102 # 6537 ffc_range c a 247 0 0 0 3 8 11 13 15 16 17 20 21 25 26 27 30 31 32 33 34 35 39 42 43 46 49 50 51 52 53 56 57 59 61 62 64 65 71 72 73 74 78 85 86 88 89 92 95 97 105 106 107 111 112 113 118 121 125 128 130 131 132 137 139 142 146 147 149 150 151 152 154 155 160 163 164 167 170 171 172 176 178 181 182 183 185 186 187 191 192 194 195 196 197 198 204 205 206 207 209 210 211 212 213 214 216 217 224 225 226 227 228 229 233 234 236 237 238 241 244 245 r 0 247 # 6538 ffc_range c a 247 0 0 0 1 2 4 13 14 15 17 18 20 21 30 33 34 36 40 41 44 47 48 51 52 53 54 58 59 60 61 69 70 72 77 80 81 83 84 88 89 91 92 93 94 98 99 102 104 106 110 113 118 119 122 125 131 132 134 136 137 138 139 140 147 148 150 154 155 164 166 168 171 172 173 177 180 181 182 187 188 192 195 196 199 200 201 202 203 205 207 208 210 211 213 215 218 219 220 221 223 225 226 228 229 230 231 232 233 236 237 238 241 243 244 246 r 164 146 # 6539 ffc_range c a 247 0 0 1 2 5 6 7 8 10 11 13 15 17 18 19 20 23 25 27 28 30 33 34 35 36 37 38 39 40 41 45 47 48 49 50 53 55 56 57 58 59 61 62 63 64 65 67 72 73 74 76 77 79 80 81 84 86 87 89 90 93 97 98 99 100 103 109 112 115 116 118 122 123 125 126 127 128 129 130 131 134 135 139 140 141 142 143 148 152 154 155 157 158 159 160 162 164 168 169 170 171 172 173 175 177 181 182 183 184 185 186 188 189 191 193 195 197 200 202 207 209 211 213 214 216 217 218 221 223 224 226 229 230 231 233 237 239 240 246 r 5 41 # 6540 ffc_range c a 247 0 0 1 4 8 9 10 11 12 13 17 18 20 22 24 26 28 32 33 34 35 36 39 42 44 46 48 51 52 55 56 59 60 63 66 68 78 80 83 84 85 86 89 94 95 96 97 98 100 102 106 107 109 112 113 114 115 116 117 120 122 124 125 126 127 129 133 134 135 137 138 139 140 142 143 145 148 149 150 154 157 158 159 160 163 166 171 172 174 175 179 180 181 187 188 191 192 193 194 195 196 200 201 203 204 205 206 209 212 213 216 217 219 221 222 228 229 230 231 233 234 236 238 241 244 245 246 r 207 247 # 6541 ffc_range c a 247 0 0 0 2 4 6 8 9 10 11 12 13 14 16 17 18 19 22 23 30 33 34 37 38 40 41 44 46 48 52 54 56 58 61 62 63 65 67 70 74 78 80 81 82 83 85 87 88 92 93 96 97 103 107 108 109 111 112 114 116 119 125 126 128 133 135 137 138 139 140 142 143 144 146 147 148 150 152 154 157 160 161 162 164 168 171 172 173 175 180 186 187 188 190 191 193 196 197 199 201 202 204 208 209 212 213 214 217 220 224 225 227 228 229 230 232 233 234 236 237 238 239 240 243 r 0 215 # 6542 ffc_range c a 247 0 1 e r 0 247 # 6543 ffc_range c a 247 0 1 e r 146 29 # 6544 ffc_range c a 247 0 1 e r 30 40 # 6545 ffc_range c a 247 0 1 e r 69 247 # 6546 ffc_range c a 247 0 1 e r 0 84 # 6547 ffc_range c a 247 0 1 f r 0 247 # 6548 ffc_range c a 247 0 1 f r 61 53 # 6549 ffc_range c a 247 0 1 f r 178 216 # 6550 ffc_range c a 247 0 1 f r 163 247 # 6551 ffc_range c a 247 0 1 f r 0 59 # 6552 ffc_range c a 247 0 1 0 1 2 6 9 12 14 16 18 19 20 22 25 28 29 30 32 34 36 37 38 40 41 42 43 45 46 48 49 50 51 53 55 56 58 61 62 65 68 70 71 75 78 81 82 84 88 90 92 93 96 97 99 102 104 107 108 111 115 117 120 123 125 128 129 132 134 135 137 138 141 145 147 149 150 155 157 161 162 167 169 170 171 172 176 177 178 180 181 182 187 189 191 192 195 196 198 201 202 204 206 207 208 209 211 212 214 216 220 221 222 223 224 226 227 228 230 233 234 241 242 243 245 r 0 247 # 6553 ffc_range c a 247 0 1 7 9 10 11 14 15 17 19 21 22 25 28 32 33 34 35 38 40 41 44 49 51 52 55 56 57 59 61 63 64 65 66 67 69 72 73 74 75 77 79 80 82 84 85 87 88 89 90 91 93 94 96 97 100 101 103 104 109 111 113 115 116 117 118 119 120 122 125 128 129 130 131 137 139 140 141 142 143 144 146 147 149 151 155 156 157 159 161 163 165 167 168 169 171 174 177 178 179 182 183 184 185 187 188 189 192 193 195 196 198 199 202 203 206 207 209 210 211 217 218 220 225 235 236 238 239 241 242 243 246 r 84 1 # 6554 ffc_range c a 247 0 1 0 1 2 6 8 12 13 14 17 18 20 21 22 24 26 27 34 35 36 37 39 41 42 44 45 46 47 49 52 54 56 60 61 62 64 65 67 68 69 74 79 81 82 83 84 85 87 89 90 92 93 94 95 100 101 106 107 108 109 111 112 114 115 122 126 127 128 130 131 135 136 137 138 140 143 144 147 148 149 154 155 156 157 163 164 166 167 172 173 177 180 181 182 186 187 192 193 195 197 198 199 201 204 206 207 211 213 219 220 221 223 224 226 227 230 231 233 237 239 242 245 246 r 19 24 # 6555 ffc_range c a 247 0 1 1 2 4 5 10 11 12 13 15 17 20 24 25 26 27 28 29 32 34 35 36 45 48 49 50 51 62 63 64 65 66 67 68 69 73 74 76 78 81 83 84 86 88 91 92 94 96 97 99 100 103 107 108 113 119 121 122 125 126 128 129 133 135 137 138 142 143 144 145 146 151 154 155 157 158 159 160 164 165 166 168 169 172 175 180 184 186 187 188 189 190 191 194 197 200 201 202 203 206 209 210 223 224 226 230 231 233 234 235 236 242 243 r 8 247 # 6556 ffc_range c a 247 0 1 0 4 5 6 8 9 10 15 17 18 21 22 23 26 27 28 30 32 34 36 37 38 39 40 41 49 50 51 52 54 56 57 58 59 61 63 64 65 67 68 70 74 76 77 78 80 81 83 90 92 95 97 98 99 101 103 107 112 116 119 120 123 124 125 126 127 128 129 130 132 135 136 138 139 140 143 144 146 148 151 152 153 155 156 158 159 160 161 163 165 166 167 169 170 171 172 174 175 176 177 179 181 184 185 186 187 189 190 194 195 196 197 198 201 204 205 207 208 211 213 215 216 218 220 224 227 229 230 231 232 235 239 240 241 242 244 r 0 56 # 6557 ffc_range c a 247 1 0 e r 0 247 # 6558 ffc_range c a 247 1 0 e r 75 32 # 6559 ffc_range c a 247 1 0 e r 64 231 # 6560 ffc_range c a 247 1 0 e r 219 247 # 6561 ffc_range c a 247 1 0 e r 0 138 # 6562 ffc_range c a 247 1 0 f r 0 247 # 6563 ffc_range c a 247 1 0 f r 98 97 # 6564 ffc_range c a 247 1 0 f r 71 155 # 6565 ffc_range c a 247 1 0 f r 212 247 # 6566 ffc_range c a 247 1 0 f r 0 89 # 6567 ffc_range c a 247 1 0 1 3 6 8 11 16 22 23 25 28 30 36 37 38 39 42 44 45 46 47 49 50 51 53 54 55 62 63 65 68 70 72 73 74 75 76 83 86 87 89 91 93 94 95 96 97 98 99 101 103 104 105 106 110 111 112 113 114 115 117 118 119 120 121 122 123 124 126 127 129 130 131 132 134 138 139 140 141 142 144 145 147 150 156 157 160 165 166 167 169 172 174 176 182 183 184 185 186 187 188 191 195 198 199 203 205 209 210 211 213 215 216 218 219 220 221 225 227 228 229 230 235 237 240 243 244 245 246 r 0 247 # 6568 ffc_range c a 247 1 0 0 2 4 5 6 9 12 15 16 20 21 22 24 25 27 28 30 31 38 40 42 43 44 45 46 49 50 52 53 55 56 57 59 63 64 65 67 68 69 71 74 75 79 82 87 89 90 91 92 95 96 97 98 99 100 102 103 105 106 107 111 112 116 121 125 126 129 132 136 140 141 142 143 146 148 150 151 153 156 158 160 161 163 165 168 169 171 175 176 178 180 181 183 184 185 188 190 191 194 196 198 199 202 203 204 208 210 215 217 226 228 229 231 232 234 235 240 242 243 244 246 r 226 5 # 6569 ffc_range c a 247 1 0 3 5 7 8 9 11 14 18 20 23 24 26 29 31 32 33 36 37 39 41 42 43 48 50 51 54 58 59 65 66 68 69 72 73 74 75 83 84 85 90 91 94 95 97 98 100 107 108 109 117 119 120 122 124 125 130 134 135 136 141 142 143 145 146 147 148 150 151 152 155 159 160 162 165 166 168 170 174 177 181 182 187 188 189 194 195 197 198 201 206 207 210 211 213 215 217 219 220 221 226 227 228 229 230 232 234 235 236 237 238 240 241 244 245 246 r 90 134 # 6570 ffc_range c a 247 1 0 1 2 6 7 9 10 12 13 14 16 17 20 21 25 28 34 35 37 39 42 45 47 48 49 51 53 55 56 58 60 62 63 66 67 70 71 73 74 75 76 78 79 83 85 87 91 92 94 96 97 99 100 101 102 104 105 109 113 117 119 121 122 123 125 127 130 133 134 138 139 141 144 146 150 153 155 157 158 159 161 163 166 167 168 169 170 171 172 173 178 179 180 181 185 187 189 190 191 192 196 199 201 202 203 204 208 211 212 219 224 225 227 229 230 231 232 234 235 236 244 246 r 117 247 # 6571 ffc_range c a 247 1 0 0 2 4 6 7 10 11 12 13 14 15 19 20 21 25 26 29 34 36 40 43 44 48 49 52 53 54 55 59 61 62 65 66 69 70 71 74 81 82 83 86 87 88 90 92 93 94 99 102 103 106 107 108 111 113 114 115 117 118 122 127 128 129 135 136 138 140 141 143 144 146 150 151 152 153 154 158 162 163 164 165 170 171 174 176 177 178 181 187 188 190 192 193 194 195 196 199 200 202 203 204 205 207 208 209 211 212 216 217 218 221 222 224 225 226 231 234 238 243 244 r 0 25 # 6572 ffc_range c a 247 1 1 e r 0 247 # 6573 ffc_range c a 247 1 1 e r 175 159 # 6574 ffc_range c a 247 1 1 e r 37 132 # 6575 ffc_range c a 247 1 1 e r 19 247 # 6576 ffc_range c a 247 1 1 e r 0 32 # 6577 ffc_range c a 247 1 1 f r 0 247 # 6578 ffc_range c a 247 1 1 f r 184 74 # 6579 ffc_range c a 247 1 1 f r 6 11 # 6580 ffc_range c a 247 1 1 f r 225 247 # 6581 ffc_range c a 247 1 1 f r 0 142 # 6582 ffc_range c a 247 1 1 0 1 2 5 6 7 8 9 12 15 16 20 22 23 24 26 33 34 35 36 38 39 42 44 46 47 48 50 53 58 60 62 67 68 70 72 73 76 79 80 84 85 86 89 90 92 94 96 99 100 101 104 105 106 107 111 113 117 118 119 120 122 123 124 125 126 127 128 130 131 135 136 138 143 144 152 154 155 156 157 158 159 161 162 164 165 167 171 174 176 178 182 185 186 188 189 191 197 201 203 205 210 211 214 215 217 219 220 221 222 226 230 231 232 237 240 244 r 0 247 # 6583 ffc_range c a 247 1 1 0 2 3 4 5 6 10 11 12 14 15 17 21 22 23 24 26 28 30 31 33 34 36 37 38 41 42 44 45 48 50 51 53 54 56 57 58 59 60 61 62 64 65 66 67 68 69 74 76 78 79 80 82 86 89 92 94 95 97 98 101 102 103 105 108 110 111 112 113 114 115 117 122 124 126 127 129 131 132 133 134 135 136 139 144 150 151 152 154 155 156 157 158 160 161 162 164 165 167 168 169 172 173 174 175 177 179 181 189 190 192 193 194 195 198 200 202 203 205 206 207 208 213 214 215 217 219 220 221 223 224 225 226 229 230 232 233 238 243 r 212 73 # 6584 ffc_range c a 247 1 1 0 1 3 9 11 13 14 16 18 21 22 23 27 28 30 31 37 38 39 40 42 44 45 47 48 53 54 55 63 64 65 68 69 70 73 74 82 83 85 87 88 89 93 102 103 106 107 108 112 113 114 116 119 121 123 127 128 129 133 148 149 150 155 156 157 158 159 163 167 168 170 172 176 177 178 179 180 181 184 185 187 188 193 194 195 199 200 203 204 205 207 208 209 210 212 214 215 217 221 223 224 227 228 229 230 236 239 244 245 246 r 32 143 # 6585 ffc_range c a 247 1 1 1 5 7 13 14 19 20 29 31 32 33 35 36 37 38 40 42 45 46 54 55 56 61 63 64 65 66 68 69 70 71 72 74 77 78 80 81 82 88 89 90 91 92 94 95 97 100 101 102 103 105 106 107 108 109 111 112 113 117 118 120 121 123 127 129 130 131 132 133 134 136 137 138 139 145 147 150 152 154 158 159 161 162 163 164 167 170 171 174 175 176 180 182 183 184 185 186 189 190 192 193 195 197 198 200 201 204 207 208 209 215 216 222 224 228 230 231 232 233 235 237 238 239 243 244 245 246 r 65 247 # 6586 ffc_range c a 247 1 1 0 1 2 5 8 9 11 12 14 15 18 21 23 25 28 30 31 33 34 36 38 39 42 45 47 53 55 56 57 58 60 61 64 66 67 68 71 72 76 78 80 82 83 84 85 86 87 88 89 91 92 94 95 96 97 101 103 105 111 114 117 119 122 124 125 126 127 131 133 134 135 137 138 139 142 143 144 145 147 150 151 152 153 155 158 159 160 161 162 164 166 169 170 171 173 177 179 182 184 189 192 195 196 198 201 202 203 204 212 214 215 217 219 220 221 223 224 225 226 227 229 230 231 232 233 234 237 238 239 241 245 246 r 0 42 # 6587 ffc_range c a 0 0 0 e r 0 0 # 6588 population_range c a 0 0 0 e r 0 0 # 6589 population_range c a 0 0 0 e r 0 0 # 6590 population_range c a 0 0 0 e r 0 0 # 6591 population_range c a 0 0 0 e r 0 0 # 6592 population_range c a 0 0 0 e r 0 0 # 6593 population_range c a 0 0 0 e r 0 0 # 6594 population_range c a 0 0 0 e r 0 0 # 6595 population_range c a 0 0 0 e r 0 0 # 6596 population_range c a 0 0 0 e r 0 0 # 6597 population_range c a 0 0 0 r 0 0 # 6598 population_range c a 0 0 0 r 0 0 # 6599 population_range c a 0 0 0 r 0 0 # 6600 population_range c a 0 0 0 r 0 0 # 6601 population_range c a 0 0 0 r 0 0 # 6602 population_range c a 0 0 1 e r 0 0 # 6603 population_range c a 0 0 1 e r 0 0 # 6604 population_range c a 0 0 1 e r 0 0 # 6605 population_range c a 0 0 1 e r 0 0 # 6606 population_range c a 0 0 1 e r 0 0 # 6607 population_range c a 0 0 1 e r 0 0 # 6608 population_range c a 0 0 1 e r 0 0 # 6609 population_range c a 0 0 1 e r 0 0 # 6610 population_range c a 0 0 1 e r 0 0 # 6611 population_range c a 0 0 1 e r 0 0 # 6612 population_range c a 0 0 1 r 0 0 # 6613 population_range c a 0 0 1 r 0 0 # 6614 population_range c a 0 0 1 r 0 0 # 6615 population_range c a 0 0 1 r 0 0 # 6616 population_range c a 0 0 1 r 0 0 # 6617 population_range c a 0 1 0 e r 0 0 # 6618 population_range c a 0 1 0 e r 0 0 # 6619 population_range c a 0 1 0 e r 0 0 # 6620 population_range c a 0 1 0 e r 0 0 # 6621 population_range c a 0 1 0 e r 0 0 # 6622 population_range c a 0 1 0 e r 0 0 # 6623 population_range c a 0 1 0 e r 0 0 # 6624 population_range c a 0 1 0 e r 0 0 # 6625 population_range c a 0 1 0 e r 0 0 # 6626 population_range c a 0 1 0 e r 0 0 # 6627 population_range c a 0 1 0 r 0 0 # 6628 population_range c a 0 1 0 r 0 0 # 6629 population_range c a 0 1 0 r 0 0 # 6630 population_range c a 0 1 0 r 0 0 # 6631 population_range c a 0 1 0 r 0 0 # 6632 population_range c a 0 1 1 e r 0 0 # 6633 population_range c a 0 1 1 e r 0 0 # 6634 population_range c a 0 1 1 e r 0 0 # 6635 population_range c a 0 1 1 e r 0 0 # 6636 population_range c a 0 1 1 e r 0 0 # 6637 population_range c a 0 1 1 e r 0 0 # 6638 population_range c a 0 1 1 e r 0 0 # 6639 population_range c a 0 1 1 e r 0 0 # 6640 population_range c a 0 1 1 e r 0 0 # 6641 population_range c a 0 1 1 e r 0 0 # 6642 population_range c a 0 1 1 r 0 0 # 6643 population_range c a 0 1 1 r 0 0 # 6644 population_range c a 0 1 1 r 0 0 # 6645 population_range c a 0 1 1 r 0 0 # 6646 population_range c a 0 1 1 r 0 0 # 6647 population_range c a 1 0 0 e r 0 1 # 6648 population_range c a 1 0 0 e r 0 0 # 6649 population_range c a 1 0 0 e r 0 0 # 6650 population_range c a 1 0 0 e r 0 1 # 6651 population_range c a 1 0 0 e r 0 1 # 6652 population_range c a 1 0 0 f r 0 1 # 6653 population_range c a 1 0 0 f r 0 0 # 6654 population_range c a 1 0 0 f r 0 0 # 6655 population_range c a 1 0 0 f r 0 1 # 6656 population_range c a 1 0 0 f r 0 0 # 6657 population_range c a 1 0 0 0 r 0 1 # 6658 population_range c a 1 0 0 0 r 1 0 # 6659 population_range c a 1 0 0 0 r 0 0 # 6660 population_range c a 1 0 0 0 r 0 1 # 6661 population_range c a 1 0 0 r 0 0 # 6662 population_range c a 1 0 1 e r 0 1 # 6663 population_range c a 1 0 1 e r 1 0 # 6664 population_range c a 1 0 1 e r 0 0 # 6665 population_range c a 1 0 1 e r 0 1 # 6666 population_range c a 1 0 1 e r 0 0 # 6667 population_range c a 1 0 1 f r 0 1 # 6668 population_range c a 1 0 1 f r 0 0 # 6669 population_range c a 1 0 1 f r 0 0 # 6670 population_range c a 1 0 1 f r 0 1 # 6671 population_range c a 1 0 1 f r 0 0 # 6672 population_range c a 1 0 1 r 0 1 # 6673 population_range c a 1 0 1 0 r 1 0 # 6674 population_range c a 1 0 1 0 r 0 1 # 6675 population_range c a 1 0 1 0 r 0 1 # 6676 population_range c a 1 0 1 r 0 1 # 6677 population_range c a 1 1 0 e r 0 1 # 6678 population_range c a 1 1 0 e r 0 0 # 6679 population_range c a 1 1 0 e r 0 1 # 6680 population_range c a 1 1 0 e r 0 1 # 6681 population_range c a 1 1 0 e r 0 0 # 6682 population_range c a 1 1 0 f r 0 1 # 6683 population_range c a 1 1 0 f r 0 0 # 6684 population_range c a 1 1 0 f r 0 1 # 6685 population_range c a 1 1 0 f r 0 1 # 6686 population_range c a 1 1 0 f r 0 0 # 6687 population_range c a 1 1 0 r 0 1 # 6688 population_range c a 1 1 0 r 0 0 # 6689 population_range c a 1 1 0 r 0 1 # 6690 population_range c a 1 1 0 0 r 0 1 # 6691 population_range c a 1 1 0 0 r 0 1 # 6692 population_range c a 1 1 1 e r 0 1 # 6693 population_range c a 1 1 1 e r 0 0 # 6694 population_range c a 1 1 1 e r 0 0 # 6695 population_range c a 1 1 1 e r 0 1 # 6696 population_range c a 1 1 1 e r 0 0 # 6697 population_range c a 1 1 1 f r 0 1 # 6698 population_range c a 1 1 1 f r 0 0 # 6699 population_range c a 1 1 1 f r 0 0 # 6700 population_range c a 1 1 1 f r 0 1 # 6701 population_range c a 1 1 1 f r 0 1 # 6702 population_range c a 1 1 1 0 r 0 1 # 6703 population_range c a 1 1 1 r 0 0 # 6704 population_range c a 1 1 1 r 0 0 # 6705 population_range c a 1 1 1 r 0 1 # 6706 population_range c a 1 1 1 0 r 0 1 # 6707 population_range c a 31 0 0 e r 0 31 # 6708 population_range c a 31 0 0 e r 26 20 # 6709 population_range c a 31 0 0 e r 21 24 # 6710 population_range c a 31 0 0 e r 12 31 # 6711 population_range c a 31 0 0 e r 0 25 # 6712 population_range c a 31 0 0 f r 0 31 # 6713 population_range c a 31 0 0 f r 3 2 # 6714 population_range c a 31 0 0 f r 13 21 # 6715 population_range c a 31 0 0 f r 19 31 # 6716 population_range c a 31 0 0 f r 0 16 # 6717 population_range c a 31 0 0 0 1 3 4 7 8 9 10 13 14 15 21 22 25 26 28 r 0 31 # 6718 population_range c a 31 0 0 0 2 3 4 5 7 8 9 10 13 15 17 19 23 26 27 29 r 15 11 # 6719 population_range c a 31 0 0 0 1 3 6 12 14 16 18 19 20 26 28 r 5 6 # 6720 population_range c a 31 0 0 0 1 3 4 5 10 11 15 18 19 20 22 28 29 30 r 26 31 # 6721 population_range c a 31 0 0 0 4 5 6 9 10 16 17 19 25 26 28 29 30 r 0 21 # 6722 population_range c a 31 0 1 e r 0 31 # 6723 population_range c a 31 0 1 e r 2 1 # 6724 population_range c a 31 0 1 e r 8 10 # 6725 population_range c a 31 0 1 e r 2 31 # 6726 population_range c a 31 0 1 e r 0 0 # 6727 population_range c a 31 0 1 f r 0 31 # 6728 population_range c a 31 0 1 f r 1 0 # 6729 population_range c a 31 0 1 f r 12 13 # 6730 population_range c a 31 0 1 f r 10 31 # 6731 population_range c a 31 0 1 f r 0 18 # 6732 population_range c a 31 0 1 0 1 3 4 6 8 10 12 13 15 24 25 26 28 r 0 31 # 6733 population_range c a 31 0 1 0 5 7 8 11 16 17 21 22 23 24 29 r 21 0 # 6734 population_range c a 31 0 1 0 1 2 3 4 5 6 9 10 15 16 21 23 28 30 r 13 28 # 6735 population_range c a 31 0 1 0 1 3 4 5 6 8 10 11 12 13 14 16 19 23 25 26 27 28 29 r 29 31 # 6736 population_range c a 31 0 1 0 2 3 5 7 9 10 11 12 13 15 16 17 18 20 29 r 0 1 # 6737 population_range c a 31 1 0 e r 0 31 # 6738 population_range c a 31 1 0 e r 23 7 # 6739 population_range c a 31 1 0 e r 1 7 # 6740 population_range c a 31 1 0 e r 27 31 # 6741 population_range c a 31 1 0 e r 0 27 # 6742 population_range c a 31 1 0 f r 0 31 # 6743 population_range c a 31 1 0 f r 3 0 # 6744 population_range c a 31 1 0 f r 20 31 # 6745 population_range c a 31 1 0 f r 9 31 # 6746 population_range c a 31 1 0 f r 0 15 # 6747 population_range c a 31 1 0 2 4 5 6 7 8 12 13 16 17 18 19 20 21 25 27 r 0 31 # 6748 population_range c a 31 1 0 0 1 3 4 5 6 7 8 9 12 14 15 16 18 19 21 23 28 29 r 24 23 # 6749 population_range c a 31 1 0 0 1 3 5 6 9 12 16 19 20 22 28 30 r 17 19 # 6750 population_range c a 31 1 0 0 3 4 5 7 9 10 13 15 18 19 24 27 29 30 r 30 31 # 6751 population_range c a 31 1 0 0 3 6 7 9 12 13 16 17 18 22 23 24 25 26 27 28 29 r 0 0 # 6752 population_range c a 31 1 1 e r 0 31 # 6753 population_range c a 31 1 1 e r 11 3 # 6754 population_range c a 31 1 1 e r 0 2 # 6755 population_range c a 31 1 1 e r 19 31 # 6756 population_range c a 31 1 1 e r 0 4 # 6757 population_range c a 31 1 1 f r 0 31 # 6758 population_range c a 31 1 1 f r 12 9 # 6759 population_range c a 31 1 1 f r 1 23 # 6760 population_range c a 31 1 1 f r 0 31 # 6761 population_range c a 31 1 1 f r 0 15 # 6762 population_range c a 31 1 1 0 1 3 4 6 8 9 12 17 19 21 22 24 r 0 31 # 6763 population_range c a 31 1 1 2 3 6 9 10 11 13 15 17 19 22 24 26 28 30 r 2 1 # 6764 population_range c a 31 1 1 0 1 2 4 7 8 11 18 19 20 22 25 26 28 29 30 r 12 17 # 6765 population_range c a 31 1 1 0 1 2 3 5 6 8 9 10 14 21 22 24 26 27 30 r 0 31 # 6766 population_range c a 31 1 1 1 2 5 6 8 9 10 14 15 16 20 21 23 28 r 0 9 # 6767 population_range c a 32 0 0 e r 0 32 # 6768 population_range c a 32 0 0 e r 3 0 # 6769 population_range c a 32 0 0 e r 16 19 # 6770 population_range c a 32 0 0 e r 21 32 # 6771 population_range c a 32 0 0 e r 0 3 # 6772 population_range c a 32 0 0 f r 0 32 # 6773 population_range c a 32 0 0 f r 30 29 # 6774 population_range c a 32 0 0 f r 2 4 # 6775 population_range c a 32 0 0 f r 6 32 # 6776 population_range c a 32 0 0 f r 0 14 # 6777 population_range c a 32 0 0 2 4 7 9 13 14 18 20 22 25 26 27 29 31 r 0 32 # 6778 population_range c a 32 0 0 2 3 6 7 11 16 18 19 20 23 26 27 28 r 15 14 # 6779 population_range c a 32 0 0 1 2 3 4 7 11 12 13 15 16 17 19 20 23 27 29 31 r 5 14 # 6780 population_range c a 32 0 0 0 2 3 7 10 18 19 22 23 24 31 r 18 32 # 6781 population_range c a 32 0 0 1 5 6 7 8 12 13 14 16 18 19 22 23 24 28 30 31 r 0 28 # 6782 population_range c a 32 0 1 e r 0 32 # 6783 population_range c a 32 0 1 e r 2 1 # 6784 population_range c a 32 0 1 e r 0 1 # 6785 population_range c a 32 0 1 e r 13 32 # 6786 population_range c a 32 0 1 e r 0 20 # 6787 population_range c a 32 0 1 f r 0 32 # 6788 population_range c a 32 0 1 f r 31 24 # 6789 population_range c a 32 0 1 f r 5 12 # 6790 population_range c a 32 0 1 f r 9 32 # 6791 population_range c a 32 0 1 f r 0 30 # 6792 population_range c a 32 0 1 0 6 7 9 10 11 13 16 18 20 26 28 29 30 31 r 0 32 # 6793 population_range c a 32 0 1 3 4 13 14 17 21 26 29 30 31 r 17 13 # 6794 population_range c a 32 0 1 3 4 5 7 10 12 13 14 19 20 21 22 24 27 28 r 18 22 # 6795 population_range c a 32 0 1 3 5 8 9 11 17 23 28 29 r 23 32 # 6796 population_range c a 32 0 1 0 2 10 11 12 15 19 20 21 22 28 29 30 r 0 9 # 6797 population_range c a 32 1 0 e r 0 32 # 6798 population_range c a 32 1 0 e r 28 10 # 6799 population_range c a 32 1 0 e r 4 23 # 6800 population_range c a 32 1 0 e r 1 32 # 6801 population_range c a 32 1 0 e r 0 16 # 6802 population_range c a 32 1 0 f r 0 32 # 6803 population_range c a 32 1 0 f r 24 2 # 6804 population_range c a 32 1 0 f r 0 7 # 6805 population_range c a 32 1 0 f r 2 32 # 6806 population_range c a 32 1 0 f r 0 7 # 6807 population_range c a 32 1 0 0 2 4 7 9 10 11 14 16 19 22 23 26 28 30 r 0 32 # 6808 population_range c a 32 1 0 0 2 3 4 5 8 11 12 15 17 19 20 26 28 29 30 31 r 6 3 # 6809 population_range c a 32 1 0 3 4 12 13 16 18 20 23 28 29 30 r 1 3 # 6810 population_range c a 32 1 0 1 3 4 5 12 14 18 19 23 28 r 17 32 # 6811 population_range c a 32 1 0 0 3 5 6 7 13 14 15 16 17 18 19 21 25 27 30 r 0 1 # 6812 population_range c a 32 1 1 e r 0 32 # 6813 population_range c a 32 1 1 e r 28 26 # 6814 population_range c a 32 1 1 e r 2 9 # 6815 population_range c a 32 1 1 e r 10 32 # 6816 population_range c a 32 1 1 e r 0 18 # 6817 population_range c a 32 1 1 f r 0 32 # 6818 population_range c a 32 1 1 f r 1 0 # 6819 population_range c a 32 1 1 f r 8 25 # 6820 population_range c a 32 1 1 f r 10 32 # 6821 population_range c a 32 1 1 f r 0 8 # 6822 population_range c a 32 1 1 0 3 6 8 12 14 17 18 20 23 25 27 r 0 32 # 6823 population_range c a 32 1 1 0 2 4 5 9 10 13 16 18 19 20 22 23 26 27 29 30 r 27 15 # 6824 population_range c a 32 1 1 2 3 4 6 7 8 12 14 15 16 19 22 28 29 r 0 31 # 6825 population_range c a 32 1 1 1 2 7 8 12 14 16 18 19 20 21 23 26 29 30 31 r 9 32 # 6826 population_range c a 32 1 1 1 2 3 5 6 7 10 13 15 16 19 20 22 26 27 31 r 0 29 # 6827 population_range c a 33 0 0 e r 0 33 # 6828 population_range c a 33 0 0 e r 1 0 # 6829 population_range c a 33 0 0 e r 19 20 # 6830 population_range c a 33 0 0 e r 4 33 # 6831 population_range c a 33 0 0 e r 0 20 # 6832 population_range c a 33 0 0 f r 0 33 # 6833 population_range c a 33 0 0 f r 18 16 # 6834 population_range c a 33 0 0 f r 9 15 # 6835 population_range c a 33 0 0 f r 10 33 # 6836 population_range c a 33 0 0 f r 0 11 # 6837 population_range c a 33 0 0 0 1 5 7 8 10 13 14 15 19 23 24 30 r 0 33 # 6838 population_range c a 33 0 0 4 9 14 15 17 19 21 22 26 27 32 r 2 0 # 6839 population_range c a 33 0 0 1 2 3 5 12 13 15 19 20 21 22 23 24 25 28 29 32 r 8 15 # 6840 population_range c a 33 0 0 1 3 5 6 8 9 10 14 15 17 18 20 21 22 25 27 28 29 30 31 32 r 7 33 # 6841 population_range c a 33 0 0 0 1 2 3 6 8 9 10 11 12 14 15 16 19 20 21 24 26 29 31 32 r 0 11 # 6842 population_range c a 33 0 1 e r 0 33 # 6843 population_range c a 33 0 1 e r 18 7 # 6844 population_range c a 33 0 1 e r 3 4 # 6845 population_range c a 33 0 1 e r 18 33 # 6846 population_range c a 33 0 1 e r 0 4 # 6847 population_range c a 33 0 1 f r 0 33 # 6848 population_range c a 33 0 1 f r 25 23 # 6849 population_range c a 33 0 1 f r 1 2 # 6850 population_range c a 33 0 1 f r 26 33 # 6851 population_range c a 33 0 1 f r 0 29 # 6852 population_range c a 33 0 1 2 3 4 5 6 8 10 11 12 13 14 16 18 19 20 25 27 32 r 0 33 # 6853 population_range c a 33 0 1 2 4 8 11 12 13 14 16 17 20 21 23 24 26 28 32 r 4 0 # 6854 population_range c a 33 0 1 0 2 6 9 11 13 14 15 16 17 19 20 21 22 24 28 30 31 32 r 12 26 # 6855 population_range c a 33 0 1 0 2 8 11 13 14 16 17 18 19 23 25 26 27 28 29 30 31 32 r 20 33 # 6856 population_range c a 33 0 1 0 4 6 7 8 10 11 12 13 14 15 16 18 20 23 25 28 30 31 32 r 0 3 # 6857 population_range c a 33 1 0 e r 0 33 # 6858 population_range c a 33 1 0 e r 7 2 # 6859 population_range c a 33 1 0 e r 5 11 # 6860 population_range c a 33 1 0 e r 23 33 # 6861 population_range c a 33 1 0 e r 0 5 # 6862 population_range c a 33 1 0 f r 0 33 # 6863 population_range c a 33 1 0 f r 24 18 # 6864 population_range c a 33 1 0 f r 8 11 # 6865 population_range c a 33 1 0 f r 25 33 # 6866 population_range c a 33 1 0 f r 0 15 # 6867 population_range c a 33 1 0 7 9 10 11 12 15 20 21 22 23 27 28 29 30 r 0 33 # 6868 population_range c a 33 1 0 2 3 4 7 9 10 11 13 14 16 19 22 23 24 25 26 27 28 29 30 r 32 31 # 6869 population_range c a 33 1 0 6 8 9 12 13 14 16 17 19 20 24 28 r 16 22 # 6870 population_range c a 33 1 0 0 2 11 15 16 21 22 23 24 28 31 32 r 8 33 # 6871 population_range c a 33 1 0 0 1 5 6 7 9 10 11 12 13 17 22 23 24 26 29 32 r 0 32 # 6872 population_range c a 33 1 1 e r 0 33 # 6873 population_range c a 33 1 1 e r 28 17 # 6874 population_range c a 33 1 1 e r 2 7 # 6875 population_range c a 33 1 1 e r 14 33 # 6876 population_range c a 33 1 1 e r 0 20 # 6877 population_range c a 33 1 1 f r 0 33 # 6878 population_range c a 33 1 1 f r 19 1 # 6879 population_range c a 33 1 1 f r 3 8 # 6880 population_range c a 33 1 1 f r 14 33 # 6881 population_range c a 33 1 1 f r 0 6 # 6882 population_range c a 33 1 1 0 2 4 6 7 8 9 11 14 16 20 21 22 23 24 26 28 29 31 r 0 33 # 6883 population_range c a 33 1 1 5 10 11 15 17 20 22 24 27 28 30 32 r 31 16 # 6884 population_range c a 33 1 1 3 5 6 8 9 10 11 13 15 16 18 22 31 32 r 23 33 # 6885 population_range c a 33 1 1 7 8 9 11 12 13 15 17 18 20 21 22 26 27 28 30 r 19 33 # 6886 population_range c a 33 1 1 0 1 2 3 4 5 6 7 9 10 11 12 13 14 17 21 23 24 28 29 30 r 0 31 # 6887 population_range c a 63 0 0 e r 0 63 # 6888 population_range c a 63 0 0 e r 21 4 # 6889 population_range c a 63 0 0 e r 30 41 # 6890 population_range c a 63 0 0 e r 46 63 # 6891 population_range c a 63 0 0 e r 0 36 # 6892 population_range c a 63 0 0 f r 0 63 # 6893 population_range c a 63 0 0 f r 63 17 # 6894 population_range c a 63 0 0 f r 0 2 # 6895 population_range c a 63 0 0 f r 23 63 # 6896 population_range c a 63 0 0 f r 0 31 # 6897 population_range c a 63 0 0 3 4 6 10 11 12 15 16 17 22 27 31 32 33 34 35 38 39 40 41 43 45 46 48 49 50 53 54 55 56 58 60 62 r 0 63 # 6898 population_range c a 63 0 0 0 1 2 7 14 15 17 19 25 26 34 39 41 42 43 45 46 47 48 50 54 55 56 57 60 61 62 r 3 0 # 6899 population_range c a 63 0 0 1 3 10 12 13 17 18 19 22 24 28 33 38 40 42 43 45 46 47 48 49 55 57 61 62 r 1 7 # 6900 population_range c a 63 0 0 1 3 4 5 15 16 19 20 23 24 25 26 27 28 30 33 34 36 40 41 42 43 45 46 47 50 58 60 61 62 r 55 63 # 6901 population_range c a 63 0 0 0 1 5 6 7 8 10 13 15 19 20 21 22 24 25 26 27 28 30 34 37 42 43 45 46 47 51 52 55 57 58 61 62 r 0 26 # 6902 population_range c a 63 0 1 e r 0 63 # 6903 population_range c a 63 0 1 e r 3 2 # 6904 population_range c a 63 0 1 e r 20 49 # 6905 population_range c a 63 0 1 e r 50 63 # 6906 population_range c a 63 0 1 e r 0 28 # 6907 population_range c a 63 0 1 f r 0 63 # 6908 population_range c a 63 0 1 f r 49 7 # 6909 population_range c a 63 0 1 f r 43 63 # 6910 population_range c a 63 0 1 f r 53 63 # 6911 population_range c a 63 0 1 f r 0 2 # 6912 population_range c a 63 0 1 0 5 11 15 16 17 18 20 21 22 24 26 27 30 32 37 38 39 42 43 45 46 48 50 51 53 54 56 57 61 r 0 63 # 6913 population_range c a 63 0 1 2 5 8 10 11 12 13 16 17 19 21 22 23 24 25 26 29 30 33 34 35 38 40 41 43 44 45 47 48 50 54 57 58 60 62 r 7 4 # 6914 population_range c a 63 0 1 0 1 2 4 6 7 9 10 12 13 14 16 18 25 27 28 30 31 33 36 40 42 43 45 48 52 53 56 57 58 59 61 62 r 0 4 # 6915 population_range c a 63 0 1 2 4 8 10 11 12 13 14 17 21 24 27 31 37 45 46 47 48 52 53 54 55 59 61 r 0 63 # 6916 population_range c a 63 0 1 1 3 5 7 8 10 13 14 16 18 19 20 21 22 24 26 33 35 40 42 45 46 48 49 51 52 53 55 60 61 62 r 0 24 # 6917 population_range c a 63 1 0 e r 0 63 # 6918 population_range c a 63 1 0 e r 19 12 # 6919 population_range c a 63 1 0 e r 0 4 # 6920 population_range c a 63 1 0 e r 48 63 # 6921 population_range c a 63 1 0 e r 0 53 # 6922 population_range c a 63 1 0 f r 0 63 # 6923 population_range c a 63 1 0 f r 17 10 # 6924 population_range c a 63 1 0 f r 5 10 # 6925 population_range c a 63 1 0 f r 13 63 # 6926 population_range c a 63 1 0 f r 0 48 # 6927 population_range c a 63 1 0 0 3 6 7 10 11 13 16 21 25 26 27 28 30 31 34 35 36 37 38 42 43 46 51 53 r 0 63 # 6928 population_range c a 63 1 0 0 1 3 7 8 9 10 13 15 17 20 21 22 25 26 27 33 35 37 40 42 46 47 48 51 53 55 56 58 60 62 r 43 23 # 6929 population_range c a 63 1 0 1 2 3 5 6 7 8 9 10 11 12 13 14 16 17 19 22 23 24 26 31 34 35 39 42 45 46 48 56 58 60 62 r 9 54 # 6930 population_range c a 63 1 0 0 1 2 5 6 7 8 10 11 12 14 18 19 20 24 25 26 28 29 30 32 34 35 38 39 40 41 42 43 44 46 48 49 52 53 54 55 57 60 61 62 r 25 63 # 6931 population_range c a 63 1 0 3 4 6 7 8 11 12 15 17 21 23 24 29 30 31 34 36 39 40 41 42 43 46 48 49 50 52 53 55 57 59 60 62 r 0 61 # 6932 population_range c a 63 1 1 e r 0 63 # 6933 population_range c a 63 1 1 e r 44 16 # 6934 population_range c a 63 1 1 e r 51 58 # 6935 population_range c a 63 1 1 e r 45 63 # 6936 population_range c a 63 1 1 e r 0 24 # 6937 population_range c a 63 1 1 f r 0 63 # 6938 population_range c a 63 1 1 f r 61 10 # 6939 population_range c a 63 1 1 f r 10 40 # 6940 population_range c a 63 1 1 f r 42 63 # 6941 population_range c a 63 1 1 f r 0 4 # 6942 population_range c a 63 1 1 1 4 6 7 10 11 12 13 14 15 17 18 19 21 23 24 25 26 28 31 33 37 41 44 45 46 48 49 52 53 54 57 58 r 0 63 # 6943 population_range c a 63 1 1 3 4 6 8 9 11 12 14 17 20 24 27 28 29 33 34 35 37 39 40 41 42 43 45 48 49 50 51 52 54 55 56 58 59 60 61 62 r 17 13 # 6944 population_range c a 63 1 1 0 2 3 5 6 8 9 11 13 14 15 16 17 18 20 21 23 26 35 41 44 47 48 51 53 54 55 56 57 60 r 19 57 # 6945 population_range c a 63 1 1 0 2 3 4 9 11 13 14 15 18 19 21 22 23 24 26 28 32 35 37 39 42 43 47 48 50 53 56 58 59 60 61 r 50 63 # 6946 population_range c a 63 1 1 1 3 5 6 7 10 11 12 15 16 19 20 23 24 25 26 28 29 32 33 34 37 39 41 45 47 50 52 55 57 60 r 0 40 # 6947 population_range c a 64 0 0 e r 0 64 # 6948 population_range c a 64 0 0 e r 25 11 # 6949 population_range c a 64 0 0 e r 6 10 # 6950 population_range c a 64 0 0 e r 49 64 # 6951 population_range c a 64 0 0 e r 0 43 # 6952 population_range c a 64 0 0 f r 0 64 # 6953 population_range c a 64 0 0 f r 44 37 # 6954 population_range c a 64 0 0 f r 10 57 # 6955 population_range c a 64 0 0 f r 24 64 # 6956 population_range c a 64 0 0 f r 0 50 # 6957 population_range c a 64 0 0 0 1 8 9 11 12 15 16 17 22 24 26 27 29 32 33 34 38 40 41 43 49 50 53 54 57 59 60 61 r 0 64 # 6958 population_range c a 64 0 0 0 1 2 9 10 11 18 19 20 21 24 26 27 31 33 37 38 39 41 42 43 47 48 50 51 53 54 57 58 59 62 r 1 0 # 6959 population_range c a 64 0 0 0 1 2 3 4 7 8 9 13 16 17 19 20 21 22 23 25 33 35 37 38 41 43 44 45 47 48 51 54 55 57 58 59 63 r 17 24 # 6960 population_range c a 64 0 0 0 4 5 8 11 13 15 16 17 18 24 25 26 28 29 30 33 34 36 40 41 44 45 46 48 49 50 54 62 63 r 47 64 # 6961 population_range c a 64 0 0 0 2 4 8 11 13 14 16 17 18 20 21 22 25 26 27 28 29 30 32 33 34 35 37 43 47 51 53 55 56 57 59 60 63 r 0 52 # 6962 population_range c a 64 0 1 e r 0 64 # 6963 population_range c a 64 0 1 e r 9 0 # 6964 population_range c a 64 0 1 e r 32 40 # 6965 population_range c a 64 0 1 e r 12 64 # 6966 population_range c a 64 0 1 e r 0 7 # 6967 population_range c a 64 0 1 f r 0 64 # 6968 population_range c a 64 0 1 f r 59 34 # 6969 population_range c a 64 0 1 f r 0 3 # 6970 population_range c a 64 0 1 f r 9 64 # 6971 population_range c a 64 0 1 f r 0 33 # 6972 population_range c a 64 0 1 0 4 7 8 10 11 12 16 18 19 20 21 22 26 28 31 32 33 34 40 41 42 46 48 50 53 54 56 57 58 59 60 63 r 0 64 # 6973 population_range c a 64 0 1 3 4 6 7 9 11 13 18 19 20 21 23 25 26 32 35 36 41 43 44 45 46 48 49 50 51 54 55 57 60 61 62 63 r 50 35 # 6974 population_range c a 64 0 1 3 4 5 6 10 12 13 15 16 17 18 19 20 22 24 25 26 27 30 31 34 37 39 43 46 49 51 52 55 56 63 r 19 21 # 6975 population_range c a 64 0 1 3 4 9 10 13 14 15 16 17 18 20 21 25 26 27 28 29 32 33 34 35 39 40 41 42 44 45 46 47 48 49 51 52 53 54 56 57 59 61 62 r 36 64 # 6976 population_range c a 64 0 1 0 2 4 5 7 8 10 11 13 14 16 19 21 26 32 36 37 39 41 43 44 47 48 49 52 53 58 61 62 r 0 43 # 6977 population_range c a 64 1 0 e r 0 64 # 6978 population_range c a 64 1 0 e r 23 4 # 6979 population_range c a 64 1 0 e r 50 59 # 6980 population_range c a 64 1 0 e r 34 64 # 6981 population_range c a 64 1 0 e r 0 36 # 6982 population_range c a 64 1 0 f r 0 64 # 6983 population_range c a 64 1 0 f r 34 18 # 6984 population_range c a 64 1 0 f r 25 53 # 6985 population_range c a 64 1 0 f r 48 64 # 6986 population_range c a 64 1 0 f r 0 29 # 6987 population_range c a 64 1 0 3 4 5 6 7 9 12 13 14 15 18 19 20 22 23 25 26 27 28 29 33 36 37 39 40 43 47 48 51 52 54 55 57 58 63 r 0 64 # 6988 population_range c a 64 1 0 1 2 3 4 6 7 8 11 12 13 14 15 23 24 25 26 35 38 40 43 45 46 47 50 51 58 60 62 r 33 9 # 6989 population_range c a 64 1 0 1 2 3 5 8 11 13 14 19 20 21 23 28 29 30 31 32 33 34 35 36 39 40 41 43 44 48 49 51 53 54 55 58 59 60 61 62 63 r 0 38 # 6990 population_range c a 64 1 0 0 4 5 8 9 10 13 14 16 19 26 28 31 32 33 34 35 36 39 42 45 46 51 52 54 56 57 58 59 r 26 64 # 6991 population_range c a 64 1 0 1 2 3 6 10 13 14 15 17 19 20 21 23 27 28 30 34 35 36 37 41 42 43 44 45 46 48 50 52 56 60 61 62 r 0 34 # 6992 population_range c a 64 1 1 e r 0 64 # 6993 population_range c a 64 1 1 e r 45 8 # 6994 population_range c a 64 1 1 e r 4 7 # 6995 population_range c a 64 1 1 e r 25 64 # 6996 population_range c a 64 1 1 e r 0 64 # 6997 population_range c a 64 1 1 f r 0 64 # 6998 population_range c a 64 1 1 f r 6 1 # 6999 population_range c a 64 1 1 f r 28 29 # 7000 population_range c a 64 1 1 f r 1 64 # 7001 population_range c a 64 1 1 f r 0 56 # 7002 population_range c a 64 1 1 0 1 2 4 9 10 11 12 14 15 19 20 21 22 24 25 26 27 30 32 33 35 36 37 38 41 47 48 49 50 51 52 54 55 57 58 59 60 61 62 63 r 0 64 # 7003 population_range c a 64 1 1 0 2 3 5 7 8 9 13 14 16 17 18 19 21 22 23 24 25 27 28 30 32 38 39 44 46 47 48 49 52 54 56 59 60 61 63 r 1 0 # 7004 population_range c a 64 1 1 1 2 4 7 8 15 17 18 21 22 23 24 25 26 27 28 32 35 36 37 38 41 42 43 47 51 61 r 0 4 # 7005 population_range c a 64 1 1 1 2 3 6 10 11 12 13 16 17 20 21 24 25 26 31 34 35 36 37 40 41 42 43 44 47 48 49 50 51 58 59 62 63 r 8 64 # 7006 population_range c a 64 1 1 2 4 7 10 18 19 20 23 27 30 31 32 33 34 36 41 42 43 47 48 49 50 56 57 61 62 63 r 0 42 # 7007 population_range c a 65 0 0 e r 0 65 # 7008 population_range c a 65 0 0 e r 6 3 # 7009 population_range c a 65 0 0 e r 33 64 # 7010 population_range c a 65 0 0 e r 32 65 # 7011 population_range c a 65 0 0 e r 0 44 # 7012 population_range c a 65 0 0 f r 0 65 # 7013 population_range c a 65 0 0 f r 54 30 # 7014 population_range c a 65 0 0 f r 34 40 # 7015 population_range c a 65 0 0 f r 57 65 # 7016 population_range c a 65 0 0 f r 0 52 # 7017 population_range c a 65 0 0 0 2 3 7 8 9 10 11 12 13 14 15 16 17 18 19 25 26 28 31 33 34 35 37 39 40 42 43 45 46 48 52 58 60 61 62 64 r 0 65 # 7018 population_range c a 65 0 0 0 1 3 7 8 10 11 12 17 19 21 23 24 25 27 28 29 30 32 33 37 38 40 41 42 43 47 49 50 52 55 56 57 59 r 47 34 # 7019 population_range c a 65 0 0 3 6 8 10 13 15 16 21 22 27 29 31 33 34 38 39 40 45 47 51 54 55 56 58 61 63 64 r 7 30 # 7020 population_range c a 65 0 0 0 2 3 8 10 11 16 17 19 21 23 26 27 29 35 36 37 40 41 46 47 49 50 51 52 55 56 58 59 63 r 54 65 # 7021 population_range c a 65 0 0 0 3 4 6 7 8 13 15 19 21 24 25 28 29 30 31 33 34 35 37 38 39 40 45 47 50 54 58 62 r 0 36 # 7022 population_range c a 65 0 1 e r 0 65 # 7023 population_range c a 65 0 1 e r 31 29 # 7024 population_range c a 65 0 1 e r 12 41 # 7025 population_range c a 65 0 1 e r 5 65 # 7026 population_range c a 65 0 1 e r 0 1 # 7027 population_range c a 65 0 1 f r 0 65 # 7028 population_range c a 65 0 1 f r 40 21 # 7029 population_range c a 65 0 1 f r 1 8 # 7030 population_range c a 65 0 1 f r 37 65 # 7031 population_range c a 65 0 1 f r 0 36 # 7032 population_range c a 65 0 1 0 3 4 5 6 7 10 14 16 20 21 22 23 25 26 27 28 30 31 32 34 35 37 39 40 44 45 46 50 52 54 57 63 64 r 0 65 # 7033 population_range c a 65 0 1 0 1 3 6 7 13 14 16 17 20 21 23 24 25 28 30 31 32 34 38 39 40 43 49 52 53 55 56 58 59 60 61 62 63 r 19 18 # 7034 population_range c a 65 0 1 0 1 2 3 4 7 8 12 14 15 16 17 19 21 22 25 26 28 31 36 37 38 39 42 43 45 46 51 52 53 56 58 59 60 61 r 11 34 # 7035 population_range c a 65 0 1 0 1 3 4 5 6 7 10 11 12 14 15 17 19 20 26 28 29 30 31 32 35 38 40 41 43 44 46 49 50 51 55 56 59 64 r 13 65 # 7036 population_range c a 65 0 1 0 1 3 5 7 8 10 12 15 17 19 20 23 24 25 28 29 31 32 33 34 36 40 42 47 52 53 55 61 r 0 59 # 7037 population_range c a 65 1 0 e r 0 65 # 7038 population_range c a 65 1 0 e r 50 41 # 7039 population_range c a 65 1 0 e r 1 51 # 7040 population_range c a 65 1 0 e r 14 65 # 7041 population_range c a 65 1 0 e r 0 25 # 7042 population_range c a 65 1 0 f r 0 65 # 7043 population_range c a 65 1 0 f r 5 0 # 7044 population_range c a 65 1 0 f r 38 60 # 7045 population_range c a 65 1 0 f r 52 65 # 7046 population_range c a 65 1 0 f r 0 64 # 7047 population_range c a 65 1 0 0 1 4 6 8 10 12 14 16 18 19 20 22 33 36 39 40 43 48 50 53 54 55 59 60 63 r 0 65 # 7048 population_range c a 65 1 0 0 4 7 11 12 13 15 16 17 19 20 24 26 29 33 35 36 37 38 40 43 45 46 47 48 50 51 52 53 54 57 58 59 60 62 64 r 29 5 # 7049 population_range c a 65 1 0 0 5 6 7 8 10 11 13 14 15 16 17 18 20 21 22 23 24 26 33 34 35 38 40 48 51 54 56 59 60 61 64 r 26 30 # 7050 population_range c a 65 1 0 2 3 7 8 10 11 17 19 20 21 23 26 27 28 29 30 34 35 36 38 40 41 44 45 46 48 49 51 52 56 58 59 61 62 63 r 18 65 # 7051 population_range c a 65 1 0 0 1 3 5 7 10 11 12 13 14 16 17 18 20 22 23 26 29 32 34 39 40 42 43 45 49 55 58 59 62 64 r 0 0 # 7052 population_range c a 65 1 1 e r 0 65 # 7053 population_range c a 65 1 1 e r 12 3 # 7054 population_range c a 65 1 1 e r 16 47 # 7055 population_range c a 65 1 1 e r 31 65 # 7056 population_range c a 65 1 1 e r 0 63 # 7057 population_range c a 65 1 1 f r 0 65 # 7058 population_range c a 65 1 1 f r 10 8 # 7059 population_range c a 65 1 1 f r 39 55 # 7060 population_range c a 65 1 1 f r 7 65 # 7061 population_range c a 65 1 1 f r 0 22 # 7062 population_range c a 65 1 1 1 2 3 7 8 9 11 16 17 21 22 26 27 28 30 35 36 38 39 42 43 44 45 48 49 50 52 53 59 60 61 r 0 65 # 7063 population_range c a 65 1 1 3 5 7 8 9 11 13 14 15 16 17 18 19 21 22 23 25 26 30 31 32 33 34 36 37 39 40 41 44 47 49 51 52 54 57 59 r 49 46 # 7064 population_range c a 65 1 1 2 3 5 9 10 12 13 14 15 16 19 20 25 26 27 28 35 37 39 41 42 44 45 48 49 51 52 53 56 59 61 62 63 r 15 37 # 7065 population_range c a 65 1 1 1 2 5 7 8 9 12 13 14 15 16 17 18 22 24 27 28 35 37 38 40 43 48 50 52 54 56 57 59 61 62 63 r 20 65 # 7066 population_range c a 65 1 1 0 1 3 4 5 8 10 12 13 14 18 19 20 21 22 24 26 27 32 35 37 43 44 48 51 54 56 57 58 62 64 r 0 15 # 7067 population_range c a 211 0 0 e r 0 211 # 7068 population_range c a 211 0 0 e r 183 28 # 7069 population_range c a 211 0 0 e r 40 72 # 7070 population_range c a 211 0 0 e r 156 211 # 7071 population_range c a 211 0 0 e r 0 117 # 7072 population_range c a 211 0 0 f r 0 211 # 7073 population_range c a 211 0 0 f r 106 46 # 7074 population_range c a 211 0 0 f r 30 47 # 7075 population_range c a 211 0 0 f r 19 211 # 7076 population_range c a 211 0 0 f r 0 142 # 7077 population_range c a 211 0 0 1 4 5 6 7 8 10 11 12 13 17 18 21 23 24 26 29 30 32 34 35 36 37 39 42 43 50 52 55 57 59 60 63 66 68 75 76 77 79 80 83 85 86 87 88 90 91 93 94 95 100 101 105 106 113 115 118 120 121 122 124 125 127 129 131 132 133 139 141 143 145 146 147 149 152 156 157 161 167 168 169 170 172 179 183 184 185 187 189 190 191 192 196 197 200 202 204 205 206 209 r 0 211 # 7078 population_range c a 211 0 0 6 7 8 9 10 11 12 14 15 16 17 23 26 29 30 31 42 44 45 47 48 52 56 57 58 60 63 64 65 69 71 74 78 80 83 84 85 86 88 89 90 93 95 96 97 99 100 101 102 105 106 107 108 109 110 111 112 115 119 121 124 125 127 128 129 130 131 135 140 142 143 144 146 148 149 152 153 154 155 156 158 159 160 162 164 169 176 179 181 185 189 190 193 194 196 197 198 200 202 203 204 207 208 209 210 r 132 109 # 7079 population_range c a 211 0 0 0 2 3 10 11 14 18 21 23 25 26 27 28 29 31 32 34 36 37 38 39 41 42 43 45 46 47 49 51 52 54 57 61 62 65 66 67 68 69 70 72 73 74 76 77 80 83 84 90 91 93 106 109 110 116 117 118 121 122 126 127 131 132 133 134 137 138 139 140 141 145 146 149 150 151 153 155 156 158 160 163 164 168 170 171 174 175 176 177 181 183 184 186 187 188 189 196 199 200 203 204 206 207 209 r 74 106 # 7080 population_range c a 211 0 0 1 2 3 4 6 7 8 10 14 15 16 17 18 21 22 23 25 26 28 29 36 38 41 42 43 45 46 47 49 51 55 56 59 61 63 65 66 67 69 71 72 74 76 77 83 84 85 86 87 90 95 98 105 108 109 110 115 116 118 120 122 124 125 126 127 129 132 133 134 136 138 140 141 142 145 149 151 160 161 162 163 165 168 170 171 175 178 179 182 183 184 185 187 195 197 198 201 203 207 208 r 67 211 # 7081 population_range c a 211 0 0 0 3 5 6 10 12 13 15 16 19 20 22 24 26 27 28 31 32 33 35 36 39 45 47 48 50 51 52 53 55 56 58 59 60 65 69 71 73 74 80 83 85 86 88 89 90 91 95 97 98 99 100 103 104 108 109 110 115 117 118 120 121 122 123 126 127 128 129 130 131 132 134 135 136 142 143 144 151 154 155 156 157 158 159 161 164 167 169 171 177 178 179 182 183 184 185 186 189 191 192 193 195 196 197 200 201 204 205 206 208 209 r 0 153 # 7082 population_range c a 211 0 1 e r 0 211 # 7083 population_range c a 211 0 1 e r 98 76 # 7084 population_range c a 211 0 1 e r 110 203 # 7085 population_range c a 211 0 1 e r 40 211 # 7086 population_range c a 211 0 1 e r 0 109 # 7087 population_range c a 211 0 1 f r 0 211 # 7088 population_range c a 211 0 1 f r 49 10 # 7089 population_range c a 211 0 1 f r 25 73 # 7090 population_range c a 211 0 1 f r 0 211 # 7091 population_range c a 211 0 1 f r 0 66 # 7092 population_range c a 211 0 1 1 2 4 6 7 8 9 11 12 16 17 18 19 20 21 22 25 26 29 31 32 34 37 40 44 45 46 47 48 49 50 52 54 55 57 59 60 61 62 65 66 67 72 73 74 76 77 81 82 85 87 88 89 90 92 93 94 95 97 98 99 101 103 104 105 108 109 110 112 113 116 117 119 124 129 132 133 135 136 137 140 142 146 148 149 150 154 157 158 159 160 163 164 165 166 167 168 169 173 174 177 178 180 181 182 183 184 189 198 199 206 209 210 r 0 211 # 7093 population_range c a 211 0 1 0 3 5 7 11 13 15 16 17 18 19 20 21 25 27 32 33 36 40 45 46 48 49 51 52 53 55 56 57 58 59 60 63 66 68 70 71 72 74 75 77 79 80 82 85 87 88 90 91 95 96 98 99 100 101 104 109 113 114 116 119 123 124 125 126 129 133 134 138 139 140 141 142 144 145 146 147 148 150 152 158 159 160 162 164 165 166 168 169 170 171 172 173 175 176 177 178 179 183 184 185 187 188 190 191 192 193 195 198 201 203 204 205 206 207 208 r 172 68 # 7094 population_range c a 211 0 1 0 1 2 5 7 10 12 14 18 20 21 27 28 30 33 34 35 38 39 40 43 44 45 50 51 52 56 57 60 62 65 66 67 69 70 73 76 77 78 81 85 86 87 92 94 95 97 98 99 103 105 106 108 109 110 113 115 116 118 122 124 129 131 133 135 136 139 142 143 147 148 153 157 159 160 161 165 169 170 171 172 173 177 183 185 186 187 188 190 194 195 197 198 199 200 201 203 204 205 206 208 210 r 66 121 # 7095 population_range c a 211 0 1 1 4 6 8 10 18 20 21 23 24 25 26 27 28 29 30 31 32 33 35 40 43 44 45 50 51 52 54 55 58 59 62 67 69 70 75 79 80 81 82 83 88 92 94 96 98 101 103 105 106 107 109 110 111 112 114 116 118 119 124 128 130 135 136 137 138 140 141 143 145 149 151 153 154 155 160 162 165 168 170 171 173 174 176 178 181 182 184 185 187 189 193 194 195 196 199 200 201 202 204 205 206 207 r 188 211 # 7096 population_range c a 211 0 1 2 7 11 16 17 19 20 22 23 25 26 27 29 31 34 36 40 42 44 46 51 52 54 56 58 62 63 65 71 72 75 76 77 83 84 85 87 90 91 93 94 95 96 97 101 111 112 113 114 115 116 117 123 125 126 128 129 130 132 133 134 135 139 140 141 142 143 149 151 153 155 156 159 163 166 167 170 172 174 176 178 183 184 185 186 187 188 192 193 195 196 198 202 204 205 206 207 209 r 0 154 # 7097 population_range c a 211 1 0 e r 0 211 # 7098 population_range c a 211 1 0 e r 18 4 # 7099 population_range c a 211 1 0 e r 46 146 # 7100 population_range c a 211 1 0 e r 150 211 # 7101 population_range c a 211 1 0 e r 0 128 # 7102 population_range c a 211 1 0 f r 0 211 # 7103 population_range c a 211 1 0 f r 174 29 # 7104 population_range c a 211 1 0 f r 0 1 # 7105 population_range c a 211 1 0 f r 116 211 # 7106 population_range c a 211 1 0 f r 0 34 # 7107 population_range c a 211 1 0 0 1 2 3 5 7 12 16 17 18 19 21 22 23 25 27 28 30 31 33 34 39 40 42 43 44 46 47 48 49 50 52 53 57 58 61 66 67 68 70 71 72 73 76 79 81 84 85 88 90 94 95 96 97 98 99 100 103 105 111 113 116 117 119 122 125 129 130 135 138 139 140 142 144 146 147 148 154 155 157 159 160 164 168 171 181 182 183 186 194 196 199 201 202 203 204 208 209 210 r 0 211 # 7108 population_range c a 211 1 0 2 4 8 12 13 16 18 19 20 22 23 27 30 32 33 34 36 37 38 39 42 46 48 51 52 54 56 59 66 70 71 72 73 75 77 79 82 84 86 88 92 93 100 107 109 110 111 115 116 119 120 121 122 123 124 128 129 130 133 134 135 139 142 144 147 148 149 151 152 154 155 156 159 160 161 164 166 168 171 172 176 177 179 180 181 182 183 185 186 190 198 200 203 204 205 207 208 210 r 168 105 # 7109 population_range c a 211 1 0 0 1 3 4 5 6 7 8 11 12 17 20 21 23 25 27 28 30 32 35 38 39 41 42 47 49 52 54 55 58 60 61 62 63 65 71 74 75 76 81 83 86 87 88 89 90 91 93 95 96 97 99 101 102 105 109 113 115 123 125 127 128 129 130 131 133 135 137 138 139 143 145 146 147 152 153 155 157 158 161 163 164 165 166 169 170 171 174 175 176 177 178 180 182 183 184 185 186 188 189 190 192 193 196 197 198 200 201 203 204 206 207 208 r 4 170 # 7110 population_range c a 211 1 0 0 1 2 3 6 8 9 10 11 14 17 18 19 21 22 24 25 30 33 35 36 37 38 39 40 41 42 45 47 48 50 51 53 56 57 59 63 74 75 76 78 79 80 82 87 89 90 91 95 96 97 98 102 103 106 108 109 113 114 123 124 125 128 130 132 136 138 139 140 141 144 145 146 150 152 153 156 157 158 161 162 163 165 169 170 172 175 181 182 184 186 187 188 189 193 195 196 198 201 205 209 210 r 0 211 # 7111 population_range c a 211 1 0 0 1 2 3 5 9 11 12 13 14 15 17 18 19 20 23 25 27 34 35 38 39 42 43 46 49 51 54 55 59 60 61 62 65 67 71 72 74 75 76 79 81 82 85 89 92 94 98 99 104 108 109 111 115 117 119 124 127 128 130 132 135 137 141 143 145 146 147 149 150 151 156 157 161 162 166 167 168 170 172 176 178 181 183 184 185 186 187 191 193 194 197 202 210 r 0 110 # 7112 population_range c a 211 1 1 e r 0 211 # 7113 population_range c a 211 1 1 e r 91 63 # 7114 population_range c a 211 1 1 e r 20 41 # 7115 population_range c a 211 1 1 e r 164 211 # 7116 population_range c a 211 1 1 e r 0 93 # 7117 population_range c a 211 1 1 f r 0 211 # 7118 population_range c a 211 1 1 f r 184 70 # 7119 population_range c a 211 1 1 f r 193 202 # 7120 population_range c a 211 1 1 f r 8 211 # 7121 population_range c a 211 1 1 f r 0 50 # 7122 population_range c a 211 1 1 5 6 7 8 10 12 14 16 17 18 23 24 27 28 29 30 31 35 36 38 39 40 41 46 49 51 53 54 58 61 63 64 65 66 67 68 70 71 76 77 78 80 83 87 90 91 92 95 96 98 99 100 101 102 103 105 108 110 111 114 115 116 117 122 124 127 128 130 135 137 143 144 145 148 149 150 153 157 158 159 160 161 165 166 167 168 174 178 182 183 188 191 192 193 196 198 199 203 204 208 209 210 r 0 211 # 7123 population_range c a 211 1 1 4 5 8 9 10 11 12 13 14 15 16 18 19 20 22 23 24 26 28 29 30 37 39 40 42 44 45 47 48 51 52 55 56 58 59 61 62 63 67 69 70 72 74 75 78 80 82 84 88 95 96 97 104 107 114 116 117 118 119 121 125 127 129 131 132 133 135 136 137 138 141 142 143 146 147 149 150 151 152 153 155 156 158 164 165 166 167 168 169 171 172 174 175 176 177 178 181 182 184 188 190 191 193 196 200 201 203 206 207 208 209 r 161 98 # 7124 population_range c a 211 1 1 1 4 5 10 15 16 17 18 19 22 25 27 29 32 33 34 35 38 39 41 43 44 45 46 47 51 52 57 59 60 61 67 70 71 72 74 75 77 78 79 84 85 89 90 94 95 97 98 99 101 102 105 107 108 109 111 113 115 116 117 123 126 127 129 130 132 133 134 136 137 139 140 141 142 144 145 148 150 152 159 165 166 168 169 170 171 172 173 176 178 180 181 182 183 184 185 186 194 195 198 201 204 205 206 209 210 r 7 117 # 7125 population_range c a 211 1 1 0 1 3 4 5 6 10 11 15 17 23 25 27 28 33 36 38 40 42 43 44 46 48 49 50 55 56 58 59 60 66 68 69 76 78 79 81 82 83 84 87 88 90 91 93 95 98 100 102 104 107 111 112 115 116 117 118 121 123 124 128 131 132 134 135 138 139 140 142 143 144 146 149 150 156 157 161 167 168 169 170 175 176 177 179 180 184 185 189 190 191 192 194 198 201 202 205 207 208 209 210 r 69 211 # 7126 population_range c a 211 1 1 2 6 7 9 12 14 16 17 18 19 23 25 26 28 29 34 36 41 42 46 47 50 51 52 58 60 62 65 66 69 72 74 75 76 78 79 80 81 82 83 87 92 94 101 102 105 107 110 113 115 116 117 118 122 123 124 125 127 129 131 132 134 135 138 141 142 143 144 145 147 148 151 154 156 160 161 162 163 165 166 169 170 171 172 173 176 177 183 184 186 187 188 190 191 192 193 196 198 200 201 202 203 210 r 0 168 # 7127 population_range c a 224 0 0 e r 0 224 # 7128 population_range c a 224 0 0 e r 175 167 # 7129 population_range c a 224 0 0 e r 52 86 # 7130 population_range c a 224 0 0 e r 30 224 # 7131 population_range c a 224 0 0 e r 0 52 # 7132 population_range c a 224 0 0 f r 0 224 # 7133 population_range c a 224 0 0 f r 204 21 # 7134 population_range c a 224 0 0 f r 3 188 # 7135 population_range c a 224 0 0 f r 93 224 # 7136 population_range c a 224 0 0 f r 0 165 # 7137 population_range c a 224 0 0 1 2 4 5 6 7 9 10 11 13 15 17 21 23 25 29 30 31 33 36 37 40 43 46 47 51 54 55 58 60 61 64 66 67 70 72 75 76 77 78 81 82 85 87 88 91 96 98 100 101 102 103 105 106 107 108 114 115 116 117 118 119 121 122 126 128 129 130 131 132 133 134 135 136 138 139 140 142 145 148 151 155 156 159 160 162 163 164 165 166 167 169 172 174 178 179 182 183 184 187 188 189 190 191 192 193 195 196 198 199 200 203 204 205 207 210 211 212 213 215 217 218 220 221 222 223 r 0 224 # 7138 population_range c a 224 0 0 0 2 3 4 6 7 8 9 10 12 16 18 19 22 23 25 28 30 31 32 33 39 41 45 47 50 51 52 54 58 59 61 62 66 67 69 70 71 72 74 79 80 81 82 83 85 87 88 90 92 94 96 101 102 105 106 109 112 113 116 117 119 121 125 126 129 131 132 138 139 141 144 145 146 147 148 149 152 153 156 158 164 165 168 173 176 178 179 182 186 187 188 191 192 197 198 200 201 204 205 212 214 216 220 223 r 30 18 # 7139 population_range c a 224 0 0 3 6 7 8 9 10 14 16 17 18 20 22 24 25 26 28 29 31 32 33 34 37 39 40 43 44 45 48 50 51 52 53 54 55 56 57 59 62 65 66 68 72 73 75 76 77 83 86 88 89 90 93 94 95 97 101 102 110 112 113 115 122 123 124 125 128 129 130 134 135 136 137 139 141 144 145 152 155 156 157 159 161 162 163 165 166 168 173 176 177 179 181 183 185 186 189 190 191 192 193 194 196 197 198 201 202 204 206 208 213 216 217 218 220 221 223 r 13 76 # 7140 population_range c a 224 0 0 4 7 8 9 10 11 13 14 15 18 20 21 24 29 31 33 42 43 45 46 49 50 51 52 55 56 57 58 60 65 66 69 70 71 73 74 76 77 78 79 80 81 82 90 91 92 95 97 100 104 105 106 107 108 109 110 112 113 114 118 121 125 128 129 130 131 132 134 135 137 138 139 148 150 152 157 158 159 161 162 164 165 171 172 173 175 177 179 180 183 184 185 189 191 192 193 195 196 197 198 203 204 206 212 215 219 222 r 47 224 # 7141 population_range c a 224 0 0 1 4 8 15 16 17 18 20 21 26 27 28 36 37 39 41 42 43 46 47 49 52 53 54 56 57 58 59 60 64 65 67 68 69 72 75 76 78 84 87 88 90 91 92 96 97 99 100 101 102 111 112 113 114 115 118 120 121 123 124 127 130 131 133 136 137 138 146 148 149 150 151 153 157 159 162 164 166 167 169 171 172 173 174 176 177 178 179 180 185 186 187 188 190 191 196 199 201 202 204 205 207 208 212 213 214 216 219 220 221 222 r 0 110 # 7142 population_range c a 224 0 1 e r 0 224 # 7143 population_range c a 224 0 1 e r 212 130 # 7144 population_range c a 224 0 1 e r 94 115 # 7145 population_range c a 224 0 1 e r 83 224 # 7146 population_range c a 224 0 1 e r 0 133 # 7147 population_range c a 224 0 1 f r 0 224 # 7148 population_range c a 224 0 1 f r 205 116 # 7149 population_range c a 224 0 1 f r 19 75 # 7150 population_range c a 224 0 1 f r 210 224 # 7151 population_range c a 224 0 1 f r 0 105 # 7152 population_range c a 224 0 1 0 1 3 5 6 8 9 13 14 16 18 19 20 21 22 25 28 30 31 34 38 41 43 44 46 47 48 49 50 51 52 54 55 60 62 64 65 66 71 73 81 82 83 85 86 87 90 93 94 96 99 100 101 102 104 106 108 110 111 113 114 115 116 117 122 123 126 128 131 133 138 139 140 141 142 143 145 146 148 152 154 156 157 159 161 162 163 164 167 168 170 173 175 176 178 179 184 189 191 192 193 194 199 200 203 205 206 209 211 213 214 215 216 221 222 r 0 224 # 7153 population_range c a 224 0 1 0 1 2 3 4 6 7 8 10 14 15 20 23 24 25 28 30 32 35 36 38 40 42 44 48 49 50 51 54 57 58 59 64 65 67 69 73 74 78 80 82 84 85 87 88 90 91 92 95 99 101 103 104 108 111 112 114 119 120 122 124 128 129 133 137 140 141 142 143 145 147 149 150 153 154 156 157 158 159 160 162 167 168 169 170 171 172 173 174 176 177 180 181 182 183 184 187 189 196 197 199 200 202 203 209 210 212 216 221 222 223 r 220 43 # 7154 population_range c a 224 0 1 1 4 6 9 10 11 15 16 19 20 23 24 25 26 27 28 29 30 31 32 35 39 44 45 49 51 53 54 56 57 59 60 62 63 67 69 70 71 72 75 77 80 81 84 86 87 89 91 94 95 98 99 100 102 103 104 105 106 107 108 109 112 113 114 119 121 122 123 124 128 131 132 134 139 141 144 146 148 149 152 153 154 155 160 161 162 164 165 166 171 173 174 176 177 178 179 180 182 185 187 190 193 194 196 197 199 201 202 203 205 214 215 217 219 222 223 r 32 134 # 7155 population_range c a 224 0 1 0 5 7 9 10 11 14 18 21 23 24 25 27 29 32 33 34 36 40 41 42 45 46 47 50 51 56 57 58 62 65 66 69 72 78 79 80 81 82 88 90 92 93 94 96 97 98 99 100 103 104 105 106 108 109 111 112 113 114 120 122 123 124 125 127 130 133 134 136 137 139 140 141 143 144 147 148 149 151 152 153 154 155 156 158 160 169 170 172 176 177 179 181 182 184 185 190 192 196 197 200 202 203 204 207 208 209 210 213 214 216 218 220 222 r 100 224 # 7156 population_range c a 224 0 1 1 5 7 9 10 11 13 14 15 16 19 21 22 23 27 28 29 30 32 35 36 37 38 40 43 45 46 47 50 55 56 57 58 59 60 62 64 67 71 72 74 75 77 78 79 81 83 87 90 91 92 93 97 103 104 106 109 111 112 114 115 116 118 121 125 126 127 128 129 131 133 134 137 138 139 140 142 143 144 146 147 148 149 150 155 156 158 159 161 162 163 164 165 167 168 170 171 176 178 179 180 181 182 188 190 191 193 194 195 197 198 201 202 203 206 208 209 210 211 212 213 217 220 r 0 210 # 7157 population_range c a 224 1 0 e r 0 224 # 7158 population_range c a 224 1 0 e r 23 13 # 7159 population_range c a 224 1 0 e r 71 121 # 7160 population_range c a 224 1 0 e r 211 224 # 7161 population_range c a 224 1 0 e r 0 82 # 7162 population_range c a 224 1 0 f r 0 224 # 7163 population_range c a 224 1 0 f r 9 6 # 7164 population_range c a 224 1 0 f r 70 176 # 7165 population_range c a 224 1 0 f r 141 224 # 7166 population_range c a 224 1 0 f r 0 76 # 7167 population_range c a 224 1 0 0 3 5 6 10 11 12 14 23 25 26 28 29 30 31 33 34 35 36 37 40 43 44 46 50 51 52 54 55 56 59 61 63 64 66 67 68 71 72 74 75 76 77 78 81 83 84 85 86 87 90 91 94 97 104 107 108 110 112 115 118 119 121 122 123 124 125 126 128 130 132 134 135 136 137 139 142 144 147 150 151 152 154 155 157 159 160 163 164 165 167 168 169 176 177 180 181 183 185 186 187 188 190 191 192 193 195 196 197 198 199 200 204 205 206 209 210 212 213 216 219 220 221 223 r 0 224 # 7168 population_range c a 224 1 0 0 1 2 3 4 5 6 7 8 11 12 17 18 20 22 23 24 25 26 27 28 30 31 33 34 36 37 39 41 44 45 46 48 49 51 54 60 63 67 70 74 76 79 81 86 88 89 90 93 97 102 105 106 113 114 116 117 118 119 120 121 123 124 125 127 129 131 135 137 142 145 146 148 149 150 152 156 157 160 161 166 167 171 172 175 179 183 185 188 189 190 191 192 196 202 204 207 210 211 212 214 218 221 r 185 127 # 7169 population_range c a 224 1 0 0 1 2 3 4 7 8 11 13 18 24 25 26 28 29 30 31 32 33 34 35 38 41 43 44 45 46 48 49 52 53 54 55 56 57 58 59 60 61 64 69 70 71 72 73 74 75 76 77 78 79 85 88 90 94 96 98 105 106 108 109 110 114 115 117 119 124 126 128 130 131 132 133 136 138 139 141 142 143 144 145 146 148 149 151 153 155 159 160 162 163 169 170 171 172 173 175 176 178 184 185 189 191 194 197 198 199 200 201 202 203 204 210 211 212 215 217 218 219 220 222 223 r 105 214 # 7170 population_range c a 224 1 0 1 4 6 7 9 10 11 17 18 20 23 24 25 26 27 28 33 34 37 43 44 46 47 49 52 53 54 55 56 57 58 59 61 63 64 65 67 68 69 72 73 74 75 77 78 79 80 82 83 84 85 86 87 88 93 96 97 100 101 102 103 105 107 108 117 121 122 123 130 134 135 139 140 141 145 146 147 148 149 152 156 160 162 164 165 166 167 170 171 175 177 178 179 180 183 184 186 187 188 191 192 196 200 204 212 215 216 218 219 220 222 r 217 224 # 7171 population_range c a 224 1 0 1 5 7 8 10 12 14 15 18 19 20 22 23 25 26 28 30 34 35 37 38 41 42 44 45 49 51 54 55 57 60 62 64 66 67 69 71 73 76 78 79 82 83 84 85 86 88 89 90 91 93 94 95 97 98 99 100 102 105 106 107 109 110 111 113 114 116 117 118 119 120 121 123 126 127 129 139 140 142 145 152 153 159 161 162 164 166 168 170 171 172 173 174 178 179 180 183 184 188 190 191 193 200 202 203 205 207 210 212 213 214 215 218 220 221 223 r 0 142 # 7172 population_range c a 224 1 1 e r 0 224 # 7173 population_range c a 224 1 1 e r 83 21 # 7174 population_range c a 224 1 1 e r 19 178 # 7175 population_range c a 224 1 1 e r 58 224 # 7176 population_range c a 224 1 1 e r 0 193 # 7177 population_range c a 224 1 1 f r 0 224 # 7178 population_range c a 224 1 1 f r 210 189 # 7179 population_range c a 224 1 1 f r 135 152 # 7180 population_range c a 224 1 1 f r 191 224 # 7181 population_range c a 224 1 1 f r 0 106 # 7182 population_range c a 224 1 1 0 4 6 7 9 11 12 13 15 16 18 19 20 22 24 26 27 33 39 41 43 44 45 46 47 52 54 55 56 60 61 64 65 66 67 70 71 74 75 78 79 80 82 83 84 85 89 90 91 92 95 97 98 99 104 107 108 110 111 113 117 118 119 120 122 123 124 125 126 127 128 130 132 134 135 138 142 143 147 149 160 161 163 167 170 171 172 173 174 175 178 179 183 185 186 187 190 191 194 196 207 209 210 211 215 220 223 r 0 224 # 7183 population_range c a 224 1 1 0 3 5 6 7 8 14 15 17 18 19 20 24 25 26 33 35 36 38 39 42 43 44 45 46 48 49 50 51 52 54 55 57 59 60 61 64 65 68 72 78 79 81 82 85 86 87 90 92 94 95 96 99 100 103 104 105 107 109 110 111 112 113 114 115 117 118 119 124 126 127 128 130 131 132 134 137 139 140 143 146 147 150 151 152 154 155 156 157 159 162 163 167 169 173 175 177 179 182 185 188 189 190 191 192 193 194 199 201 203 204 206 211 213 215 216 217 r 181 41 # 7184 population_range c a 224 1 1 0 2 4 6 9 10 12 17 19 20 21 25 27 32 34 35 36 37 38 41 42 44 46 49 50 52 57 59 61 66 68 69 70 72 73 74 75 76 77 78 80 81 83 85 87 88 89 90 92 94 96 97 98 99 100 101 108 110 111 115 117 118 121 122 127 130 131 132 133 137 138 140 141 142 144 146 149 151 154 155 156 158 159 160 162 163 167 170 172 173 175 179 181 183 184 187 188 190 191 192 193 197 198 200 201 202 203 204 206 208 211 212 213 214 215 218 222 r 25 43 # 7185 population_range c a 224 1 1 4 7 10 12 13 16 18 22 26 29 30 31 37 39 42 44 46 47 48 49 52 53 54 58 59 61 62 63 67 69 71 72 75 76 77 78 79 80 81 83 84 88 90 93 96 97 101 102 111 113 114 116 117 119 122 126 128 132 134 136 139 140 141 142 143 145 148 149 151 158 160 162 163 164 165 166 175 179 182 184 186 188 189 190 191 192 193 195 196 200 201 205 206 212 214 216 217 218 219 220 222 223 r 55 224 # 7186 population_range c a 224 1 1 2 3 4 6 8 9 10 12 14 16 18 26 27 28 29 30 33 34 35 37 39 40 43 46 49 51 53 54 55 56 57 59 60 63 66 67 68 70 71 72 79 81 82 83 84 85 86 87 88 90 92 93 98 100 101 102 103 104 106 108 116 118 119 121 124 125 127 134 136 137 138 139 143 145 148 152 154 155 158 160 161 162 163 165 167 168 169 170 173 175 176 179 180 183 184 185 190 191 194 199 207 208 210 211 212 213 215 216 217 221 r 0 116 # 7187 population_range c a 247 0 0 e r 0 247 # 7188 population_range c a 247 0 0 e r 113 59 # 7189 population_range c a 247 0 0 e r 43 106 # 7190 population_range c a 247 0 0 e r 147 247 # 7191 population_range c a 247 0 0 e r 0 150 # 7192 population_range c a 247 0 0 f r 0 247 # 7193 population_range c a 247 0 0 f r 20 4 # 7194 population_range c a 247 0 0 f r 59 88 # 7195 population_range c a 247 0 0 f r 241 247 # 7196 population_range c a 247 0 0 f r 0 195 # 7197 population_range c a 247 0 0 1 3 4 6 7 8 9 10 11 13 14 18 22 23 25 26 28 29 30 32 41 42 43 44 45 46 49 50 51 53 54 57 58 62 64 66 68 69 72 75 79 80 81 82 84 85 86 88 90 92 93 95 98 102 104 105 120 123 124 125 132 134 135 137 141 142 143 147 149 152 153 154 155 156 159 160 161 163 164 166 170 171 174 175 176 177 178 180 183 184 186 187 188 189 190 191 192 194 195 197 198 199 201 203 206 207 209 211 213 214 218 221 224 226 229 231 232 233 234 235 236 237 238 240 243 244 245 r 0 247 # 7198 population_range c a 247 0 0 4 5 6 8 9 14 15 16 18 19 22 23 26 29 33 34 36 37 38 39 40 41 43 45 46 49 51 54 57 58 59 60 64 66 67 68 71 73 74 75 76 77 78 83 85 87 88 89 90 93 94 98 100 102 105 107 111 114 115 117 118 120 121 122 124 127 128 131 132 136 137 140 144 150 155 156 157 158 159 162 166 169 170 174 176 178 179 180 181 183 185 186 188 189 194 195 196 199 203 204 205 211 213 214 217 218 220 221 226 227 228 230 237 238 244 246 r 29 8 # 7199 population_range c a 247 0 0 0 1 3 5 6 8 9 11 12 16 17 21 22 23 26 27 31 32 33 34 36 37 38 40 41 43 45 46 48 50 54 55 56 57 58 59 60 62 63 65 69 70 72 74 77 78 79 83 84 86 87 88 89 90 91 93 94 95 99 101 106 111 112 113 114 115 116 117 118 119 120 122 125 127 130 133 134 135 140 141 143 145 146 148 149 154 157 159 161 163 164 165 166 169 170 172 173 176 178 179 184 185 186 188 190 199 203 205 209 210 214 215 217 222 226 227 231 233 234 235 237 238 239 240 241 r 1 173 # 7200 population_range c a 247 0 0 1 3 5 7 8 9 11 13 16 18 19 22 24 25 27 29 31 32 33 36 37 38 40 45 47 50 52 54 59 61 63 65 68 70 74 75 78 82 84 85 86 88 92 93 96 98 100 102 104 105 106 107 108 109 114 118 120 121 123 124 125 129 130 131 133 136 139 140 141 145 150 154 155 156 163 166 168 170 171 172 174 178 179 180 182 183 184 185 186 187 190 192 196 198 201 204 206 208 210 212 213 215 216 220 222 223 224 225 230 231 232 235 237 242 r 155 247 # 7201 population_range c a 247 0 0 0 1 3 6 7 16 21 23 24 29 33 34 35 37 38 40 42 44 46 48 50 57 59 61 63 64 66 68 70 71 72 73 76 78 79 80 81 82 84 88 89 92 93 95 96 99 100 101 102 104 106 107 108 109 111 112 115 116 117 119 120 121 123 125 126 128 129 131 132 135 136 139 141 142 143 146 148 149 150 151 152 156 158 159 162 164 165 166 167 170 173 175 176 179 182 183 189 191 194 195 197 198 202 203 206 208 211 213 214 215 219 221 230 231 232 233 234 235 237 243 246 r 0 140 # 7202 population_range c a 247 0 1 e r 0 247 # 7203 population_range c a 247 0 1 e r 63 62 # 7204 population_range c a 247 0 1 e r 41 83 # 7205 population_range c a 247 0 1 e r 219 247 # 7206 population_range c a 247 0 1 e r 0 104 # 7207 population_range c a 247 0 1 f r 0 247 # 7208 population_range c a 247 0 1 f r 91 7 # 7209 population_range c a 247 0 1 f r 87 99 # 7210 population_range c a 247 0 1 f r 135 247 # 7211 population_range c a 247 0 1 f r 0 6 # 7212 population_range c a 247 0 1 0 1 2 3 4 5 6 8 9 10 13 14 15 17 18 19 20 25 26 27 29 30 32 33 35 36 37 39 40 41 42 44 45 48 50 51 54 55 57 59 64 66 67 74 80 82 84 85 86 88 90 92 95 96 100 101 102 103 105 107 109 111 119 120 124 125 129 130 131 132 134 140 144 145 147 148 149 150 151 156 158 163 164 170 172 174 175 176 178 179 181 182 183 184 185 186 187 189 191 194 196 197 202 208 209 211 212 214 215 217 218 219 221 223 226 231 232 236 238 246 r 0 247 # 7213 population_range c a 247 0 1 0 1 2 5 6 13 14 19 20 21 25 26 27 30 31 35 38 40 42 44 45 49 52 53 54 57 59 60 61 62 66 67 68 69 74 78 81 82 84 86 89 90 92 93 96 99 103 104 105 106 107 109 112 114 116 118 119 121 125 126 131 132 139 141 143 145 147 150 151 152 156 158 160 162 164 166 168 170 175 177 178 179 180 181 182 183 184 187 188 192 194 196 197 198 199 201 202 203 204 206 208 210 211 213 214 216 219 220 223 224 229 231 232 234 235 238 240 241 244 r 160 146 # 7214 population_range c a 247 0 1 0 2 4 5 6 7 8 11 12 13 14 15 16 21 27 28 29 30 31 33 34 36 37 39 42 48 49 52 53 54 62 63 65 66 67 68 70 72 74 76 77 79 80 81 84 86 87 88 89 91 94 97 100 102 103 104 106 107 110 114 116 123 124 127 128 129 131 132 133 134 135 137 139 143 145 146 150 151 152 154 157 160 161 163 164 168 169 174 175 177 178 179 181 182 183 184 185 188 189 190 192 196 197 198 199 200 201 202 203 205 206 207 208 209 210 213 216 217 218 220 221 222 226 228 229 230 231 232 233 234 236 239 243 r 23 86 # 7215 population_range c a 247 0 1 2 6 7 9 10 12 14 15 18 19 21 22 23 25 26 27 28 29 30 33 35 38 39 44 50 51 53 54 56 57 59 60 62 67 68 69 70 71 73 78 79 80 81 82 83 84 89 91 92 96 98 101 103 104 105 107 110 111 112 114 115 116 124 128 130 135 137 138 141 146 148 152 153 157 158 161 162 163 166 167 169 173 174 175 177 178 180 183 185 188 190 195 196 197 199 200 201 206 207 208 209 210 211 214 215 217 221 222 229 231 233 235 236 238 239 241 242 243 245 r 1 247 # 7216 population_range c a 247 0 1 0 1 3 4 9 11 13 14 15 17 18 21 27 29 31 33 34 36 41 43 44 45 46 48 49 50 54 55 56 57 58 59 60 62 64 65 67 69 71 72 73 75 76 78 79 80 81 82 84 85 87 88 90 93 94 96 101 102 104 106 108 109 111 112 115 116 117 119 120 124 125 126 127 130 133 134 137 138 140 141 142 148 149 150 151 152 155 158 160 161 162 164 165 166 174 175 176 177 178 179 180 181 182 183 186 188 190 191 193 195 196 197 201 203 206 207 209 210 211 212 214 215 216 220 231 233 234 237 244 r 0 185 # 7217 population_range c a 247 1 0 e r 0 247 # 7218 population_range c a 247 1 0 e r 90 80 # 7219 population_range c a 247 1 0 e r 0 2 # 7220 population_range c a 247 1 0 e r 41 247 # 7221 population_range c a 247 1 0 e r 0 13 # 7222 population_range c a 247 1 0 f r 0 247 # 7223 population_range c a 247 1 0 f r 32 26 # 7224 population_range c a 247 1 0 f r 13 26 # 7225 population_range c a 247 1 0 f r 214 247 # 7226 population_range c a 247 1 0 f r 0 59 # 7227 population_range c a 247 1 0 0 3 7 8 9 13 14 15 16 17 19 20 23 24 26 28 29 30 33 35 37 40 41 42 49 53 55 57 59 60 63 65 66 68 70 71 72 76 78 82 84 85 88 89 91 93 94 96 98 99 100 101 102 103 105 110 111 117 118 120 121 123 124 125 133 134 136 138 143 144 150 151 154 155 159 160 161 162 164 165 166 167 171 172 174 175 176 183 184 186 187 188 190 191 192 193 194 195 196 197 199 201 202 208 209 213 214 215 216 217 218 219 220 221 223 226 232 233 234 237 240 241 243 244 246 r 0 247 # 7228 population_range c a 247 1 0 0 2 5 6 10 12 14 17 18 21 22 24 25 26 27 28 30 32 33 34 35 37 39 45 47 48 51 58 59 60 61 63 66 67 69 70 71 73 75 76 77 79 81 82 83 84 86 88 89 91 92 93 99 101 102 104 105 107 108 109 110 111 114 116 117 118 120 121 124 125 126 127 128 129 130 132 134 135 137 138 140 141 145 146 147 148 153 154 157 160 161 162 163 166 167 169 175 178 180 182 184 185 189 190 192 193 194 197 199 202 203 204 206 208 210 212 214 215 219 220 222 223 224 225 226 228 230 232 233 235 237 241 242 246 r 68 20 # 7229 population_range c a 247 1 0 2 9 11 12 15 16 19 26 27 29 31 35 36 37 42 44 46 47 48 52 53 54 55 57 58 59 63 65 69 71 76 78 79 82 85 89 91 93 94 95 98 99 100 102 104 107 110 111 112 113 118 119 121 122 123 124 125 128 131 132 135 137 138 139 141 142 147 148 150 153 154 155 156 159 160 162 163 164 165 166 168 169 171 172 177 180 187 188 190 191 192 194 195 197 198 200 203 206 207 213 215 217 218 224 226 229 230 233 234 235 237 238 239 241 242 243 244 r 39 172 # 7230 population_range c a 247 1 0 3 5 6 7 8 10 11 12 14 15 17 27 28 30 31 34 35 38 39 40 41 42 43 44 45 46 51 53 55 57 59 60 62 64 65 71 72 73 74 75 76 80 81 84 85 86 87 90 92 93 94 95 96 99 100 102 103 105 106 109 111 112 113 119 120 123 126 128 129 131 135 136 141 143 147 148 149 150 155 156 157 159 160 162 164 167 169 170 171 174 175 176 178 181 182 183 186 189 194 198 199 200 201 202 207 208 211 214 215 216 219 221 223 225 227 230 234 236 239 240 241 242 r 194 247 # 7231 population_range c a 247 1 0 0 1 4 7 9 10 11 12 14 16 17 18 19 20 22 23 26 27 28 30 31 32 35 36 37 38 40 42 43 44 45 46 47 48 49 50 51 52 53 58 60 61 63 65 67 68 72 75 78 79 80 81 82 83 87 88 90 96 97 99 100 101 103 104 108 111 112 113 114 117 119 125 126 136 137 139 140 141 143 144 147 149 150 152 154 157 158 159 163 164 166 167 173 175 177 178 181 182 185 186 187 188 189 193 195 198 200 202 203 205 206 208 209 210 212 213 214 216 217 219 220 221 223 225 226 227 228 229 231 232 233 234 236 237 238 239 240 241 242 243 244 245 r 0 246 # 7232 population_range c a 247 1 1 e r 0 247 # 7233 population_range c a 247 1 1 e r 53 48 # 7234 population_range c a 247 1 1 e r 43 210 # 7235 population_range c a 247 1 1 e r 104 247 # 7236 population_range c a 247 1 1 e r 0 41 # 7237 population_range c a 247 1 1 f r 0 247 # 7238 population_range c a 247 1 1 f r 55 26 # 7239 population_range c a 247 1 1 f r 53 154 # 7240 population_range c a 247 1 1 f r 89 247 # 7241 population_range c a 247 1 1 f r 0 144 # 7242 population_range c a 247 1 1 0 1 2 3 4 7 9 11 12 14 17 19 21 22 23 29 32 33 37 39 40 41 42 46 51 54 58 59 61 63 64 65 68 69 73 74 75 77 79 82 84 85 86 88 89 92 93 95 96 97 102 103 105 106 107 108 109 110 113 114 116 117 119 121 122 126 128 130 132 133 136 139 142 143 145 146 147 150 151 153 155 156 158 159 161 165 169 170 172 173 176 180 181 183 184 186 187 188 189 190 195 197 200 202 203 206 207 215 216 217 218 219 220 222 224 227 232 234 235 236 237 238 244 245 r 0 247 # 7243 population_range c a 247 1 1 0 1 5 7 9 10 14 15 18 21 24 26 29 30 31 35 36 37 38 40 41 42 45 49 50 51 52 53 55 59 60 62 70 72 73 74 76 77 78 80 83 87 88 89 90 91 92 96 97 98 99 100 101 103 104 105 107 108 109 111 113 114 115 118 119 120 121 122 123 125 127 128 130 131 134 137 140 141 144 145 147 150 153 156 157 163 164 165 167 168 169 171 172 177 179 182 183 187 188 189 193 194 195 196 198 199 200 202 203 204 209 210 211 213 217 221 223 224 226 228 229 231 232 233 235 237 238 241 243 244 245 r 123 96 # 7244 population_range c a 247 1 1 0 2 3 4 5 9 13 17 20 21 22 23 26 27 28 32 35 37 39 40 42 43 47 49 52 53 55 58 62 64 65 66 68 70 72 73 77 82 85 87 91 92 93 94 95 96 97 98 99 101 103 104 105 110 111 112 119 120 121 124 127 131 133 134 137 139 142 144 146 148 150 154 155 156 158 163 164 165 166 168 172 174 176 177 178 181 182 183 185 186 190 191 192 193 195 196 199 200 201 203 207 209 211 212 214 215 219 220 221 223 224 225 227 229 230 235 236 238 244 r 138 145 # 7245 population_range c a 247 1 1 1 2 8 10 11 15 16 17 18 20 22 23 24 25 26 29 30 31 32 33 37 38 41 42 43 46 49 51 54 57 60 63 70 73 75 76 77 78 80 83 84 87 88 89 91 93 97 98 100 101 102 106 109 110 111 113 114 120 121 122 126 127 129 135 139 142 143 145 148 150 151 153 155 157 160 161 162 164 168 169 172 173 176 178 179 180 182 185 186 188 190 191 193 194 196 198 199 200 201 202 203 204 207 208 209 211 214 215 217 222 223 224 225 226 227 229 230 232 233 235 236 239 241 243 246 r 54 247 # 7246 population_range c a 247 1 1 1 2 3 5 6 8 9 11 13 16 18 19 20 25 27 31 33 34 36 37 38 41 43 44 45 47 52 53 54 56 58 63 67 69 71 72 73 74 75 76 77 78 79 83 85 90 91 95 96 97 98 99 100 102 103 106 107 110 111 112 114 115 117 121 123 125 127 130 133 134 135 137 138 139 141 143 144 146 150 153 156 157 160 169 172 173 175 176 178 180 181 182 183 184 185 188 189 190 191 195 196 199 205 206 209 212 217 218 219 220 221 222 224 225 226 227 230 231 232 235 239 241 242 243 244 r 0 135 # 7247 population_range c a 0 0 0 e b 0 0 0 e # 7248 is_equal c a 0 0 0 e b 0 0 0 e # 7249 is_equal c a 0 0 0 e b 0 0 0 e # 7250 is_equal c a 0 0 0 e b 0 0 0 e # 7251 is_equal c a 0 0 0 e b 0 0 0 e # 7252 is_equal c a 0 0 0 e b 0 0 0 # 7253 is_equal c a 0 0 0 e b 0 0 0 e # 7254 is_equal c a 0 0 0 e b 0 0 0 e # 7255 is_equal c a 0 0 0 e b 0 0 0 e # 7256 is_equal c a 0 0 0 e b 0 0 0 e # 7257 is_equal c a 0 0 0 e b 0 0 0 e # 7258 is_equal c a 0 0 0 e b 0 0 0 # 7259 is_equal c a 0 0 0 b 0 0 0 # 7260 is_equal c a 0 0 0 b 0 0 0 e # 7261 is_equal c a 0 0 0 b 0 0 0 # 7262 is_equal c a 0 0 0 b 0 0 0 e # 7263 is_equal c a 0 0 0 b 0 0 0 # 7264 is_equal c a 0 0 0 b 0 0 0 # 7265 is_equal c a 0 0 0 e b 0 0 0 e # 7266 is_equal c a 0 0 0 e b 0 0 1 e # 7267 is_equal c a 0 0 0 e b 0 0 0 e # 7268 is_equal c a 0 0 0 e b 0 0 1 e # 7269 is_equal c a 0 0 0 e b 0 0 0 e # 7270 is_equal c a 0 0 0 e b 0 0 1 # 7271 is_equal c a 0 0 0 e b 0 0 0 e # 7272 is_equal c a 0 0 0 e b 0 0 1 e # 7273 is_equal c a 0 0 0 e b 0 0 0 e # 7274 is_equal c a 0 0 0 e b 0 0 1 e # 7275 is_equal c a 0 0 0 e b 0 0 0 e # 7276 is_equal c a 0 0 0 e b 0 0 1 # 7277 is_equal c a 0 0 0 b 0 0 0 # 7278 is_equal c a 0 0 0 b 0 0 1 e # 7279 is_equal c a 0 0 0 b 0 0 0 # 7280 is_equal c a 0 0 0 b 0 0 1 e # 7281 is_equal c a 0 0 0 b 0 0 0 # 7282 is_equal c a 0 0 0 b 0 0 1 # 7283 is_equal c a 0 0 0 e b 0 0 0 e # 7284 is_equal c a 0 0 0 e b 0 1 0 e # 7285 is_equal c a 0 0 0 e b 0 0 0 e # 7286 is_equal c a 0 0 0 e b 0 1 0 e # 7287 is_equal c a 0 0 0 e b 0 0 0 e # 7288 is_equal c a 0 0 0 e b 0 1 0 # 7289 is_equal c a 0 0 0 e b 0 0 0 e # 7290 is_equal c a 0 0 0 e b 0 1 0 e # 7291 is_equal c a 0 0 0 e b 0 0 0 e # 7292 is_equal c a 0 0 0 e b 0 1 0 e # 7293 is_equal c a 0 0 0 e b 0 0 0 e # 7294 is_equal c a 0 0 0 e b 0 1 0 # 7295 is_equal c a 0 0 0 b 0 0 0 # 7296 is_equal c a 0 0 0 b 0 1 0 e # 7297 is_equal c a 0 0 0 b 0 0 0 # 7298 is_equal c a 0 0 0 b 0 1 0 e # 7299 is_equal c a 0 0 0 b 0 0 0 # 7300 is_equal c a 0 0 0 b 0 1 0 # 7301 is_equal c a 0 0 0 e b 0 0 0 e # 7302 is_equal c a 0 0 0 e b 0 1 1 e # 7303 is_equal c a 0 0 0 e b 0 0 0 e # 7304 is_equal c a 0 0 0 e b 0 1 1 e # 7305 is_equal c a 0 0 0 e b 0 0 0 e # 7306 is_equal c a 0 0 0 e b 0 1 1 # 7307 is_equal c a 0 0 0 e b 0 0 0 e # 7308 is_equal c a 0 0 0 e b 0 1 1 e # 7309 is_equal c a 0 0 0 e b 0 0 0 e # 7310 is_equal c a 0 0 0 e b 0 1 1 e # 7311 is_equal c a 0 0 0 e b 0 0 0 e # 7312 is_equal c a 0 0 0 e b 0 1 1 # 7313 is_equal c a 0 0 0 b 0 0 0 # 7314 is_equal c a 0 0 0 b 0 1 1 e # 7315 is_equal c a 0 0 0 b 0 0 0 # 7316 is_equal c a 0 0 0 b 0 1 1 e # 7317 is_equal c a 0 0 0 b 0 0 0 # 7318 is_equal c a 0 0 0 b 0 1 1 # 7319 is_equal c a 0 0 1 e b 0 0 1 e # 7320 is_equal c a 0 0 1 e b 0 0 0 e # 7321 is_equal c a 0 0 1 e b 0 0 1 e # 7322 is_equal c a 0 0 1 e b 0 0 0 e # 7323 is_equal c a 0 0 1 e b 0 0 1 e # 7324 is_equal c a 0 0 1 e b 0 0 0 # 7325 is_equal c a 0 0 1 e b 0 0 1 e # 7326 is_equal c a 0 0 1 e b 0 0 0 e # 7327 is_equal c a 0 0 1 e b 0 0 1 e # 7328 is_equal c a 0 0 1 e b 0 0 0 e # 7329 is_equal c a 0 0 1 e b 0 0 1 e # 7330 is_equal c a 0 0 1 e b 0 0 0 # 7331 is_equal c a 0 0 1 b 0 0 1 # 7332 is_equal c a 0 0 1 b 0 0 0 e # 7333 is_equal c a 0 0 1 b 0 0 1 # 7334 is_equal c a 0 0 1 b 0 0 0 e # 7335 is_equal c a 0 0 1 b 0 0 1 # 7336 is_equal c a 0 0 1 b 0 0 0 # 7337 is_equal c a 0 0 1 e b 0 0 1 e # 7338 is_equal c a 0 0 1 e b 0 0 1 e # 7339 is_equal c a 0 0 1 e b 0 0 1 e # 7340 is_equal c a 0 0 1 e b 0 0 1 e # 7341 is_equal c a 0 0 1 e b 0 0 1 e # 7342 is_equal c a 0 0 1 e b 0 0 1 # 7343 is_equal c a 0 0 1 e b 0 0 1 e # 7344 is_equal c a 0 0 1 e b 0 0 1 e # 7345 is_equal c a 0 0 1 e b 0 0 1 e # 7346 is_equal c a 0 0 1 e b 0 0 1 e # 7347 is_equal c a 0 0 1 e b 0 0 1 e # 7348 is_equal c a 0 0 1 e b 0 0 1 # 7349 is_equal c a 0 0 1 b 0 0 1 # 7350 is_equal c a 0 0 1 b 0 0 1 e # 7351 is_equal c a 0 0 1 b 0 0 1 # 7352 is_equal c a 0 0 1 b 0 0 1 e # 7353 is_equal c a 0 0 1 b 0 0 1 # 7354 is_equal c a 0 0 1 b 0 0 1 # 7355 is_equal c a 0 0 1 e b 0 0 1 e # 7356 is_equal c a 0 0 1 e b 0 1 0 e # 7357 is_equal c a 0 0 1 e b 0 0 1 e # 7358 is_equal c a 0 0 1 e b 0 1 0 e # 7359 is_equal c a 0 0 1 e b 0 0 1 e # 7360 is_equal c a 0 0 1 e b 0 1 0 # 7361 is_equal c a 0 0 1 e b 0 0 1 e # 7362 is_equal c a 0 0 1 e b 0 1 0 e # 7363 is_equal c a 0 0 1 e b 0 0 1 e # 7364 is_equal c a 0 0 1 e b 0 1 0 e # 7365 is_equal c a 0 0 1 e b 0 0 1 e # 7366 is_equal c a 0 0 1 e b 0 1 0 # 7367 is_equal c a 0 0 1 b 0 0 1 # 7368 is_equal c a 0 0 1 b 0 1 0 e # 7369 is_equal c a 0 0 1 b 0 0 1 # 7370 is_equal c a 0 0 1 b 0 1 0 e # 7371 is_equal c a 0 0 1 b 0 0 1 # 7372 is_equal c a 0 0 1 b 0 1 0 # 7373 is_equal c a 0 0 1 e b 0 0 1 e # 7374 is_equal c a 0 0 1 e b 0 1 1 e # 7375 is_equal c a 0 0 1 e b 0 0 1 e # 7376 is_equal c a 0 0 1 e b 0 1 1 e # 7377 is_equal c a 0 0 1 e b 0 0 1 e # 7378 is_equal c a 0 0 1 e b 0 1 1 # 7379 is_equal c a 0 0 1 e b 0 0 1 e # 7380 is_equal c a 0 0 1 e b 0 1 1 e # 7381 is_equal c a 0 0 1 e b 0 0 1 e # 7382 is_equal c a 0 0 1 e b 0 1 1 e # 7383 is_equal c a 0 0 1 e b 0 0 1 e # 7384 is_equal c a 0 0 1 e b 0 1 1 # 7385 is_equal c a 0 0 1 b 0 0 1 # 7386 is_equal c a 0 0 1 b 0 1 1 e # 7387 is_equal c a 0 0 1 b 0 0 1 # 7388 is_equal c a 0 0 1 b 0 1 1 e # 7389 is_equal c a 0 0 1 b 0 0 1 # 7390 is_equal c a 0 0 1 b 0 1 1 # 7391 is_equal c a 0 1 0 e b 0 1 0 e # 7392 is_equal c a 0 1 0 e b 0 0 0 e # 7393 is_equal c a 0 1 0 e b 0 1 0 e # 7394 is_equal c a 0 1 0 e b 0 0 0 e # 7395 is_equal c a 0 1 0 e b 0 1 0 e # 7396 is_equal c a 0 1 0 e b 0 0 0 # 7397 is_equal c a 0 1 0 e b 0 1 0 e # 7398 is_equal c a 0 1 0 e b 0 0 0 e # 7399 is_equal c a 0 1 0 e b 0 1 0 e # 7400 is_equal c a 0 1 0 e b 0 0 0 e # 7401 is_equal c a 0 1 0 e b 0 1 0 e # 7402 is_equal c a 0 1 0 e b 0 0 0 # 7403 is_equal c a 0 1 0 b 0 1 0 # 7404 is_equal c a 0 1 0 b 0 0 0 e # 7405 is_equal c a 0 1 0 b 0 1 0 # 7406 is_equal c a 0 1 0 b 0 0 0 e # 7407 is_equal c a 0 1 0 b 0 1 0 # 7408 is_equal c a 0 1 0 b 0 0 0 # 7409 is_equal c a 0 1 0 e b 0 1 0 e # 7410 is_equal c a 0 1 0 e b 0 0 1 e # 7411 is_equal c a 0 1 0 e b 0 1 0 e # 7412 is_equal c a 0 1 0 e b 0 0 1 e # 7413 is_equal c a 0 1 0 e b 0 1 0 e # 7414 is_equal c a 0 1 0 e b 0 0 1 # 7415 is_equal c a 0 1 0 e b 0 1 0 e # 7416 is_equal c a 0 1 0 e b 0 0 1 e # 7417 is_equal c a 0 1 0 e b 0 1 0 e # 7418 is_equal c a 0 1 0 e b 0 0 1 e # 7419 is_equal c a 0 1 0 e b 0 1 0 e # 7420 is_equal c a 0 1 0 e b 0 0 1 # 7421 is_equal c a 0 1 0 b 0 1 0 # 7422 is_equal c a 0 1 0 b 0 0 1 e # 7423 is_equal c a 0 1 0 b 0 1 0 # 7424 is_equal c a 0 1 0 b 0 0 1 e # 7425 is_equal c a 0 1 0 b 0 1 0 # 7426 is_equal c a 0 1 0 b 0 0 1 # 7427 is_equal c a 0 1 0 e b 0 1 0 e # 7428 is_equal c a 0 1 0 e b 0 1 0 e # 7429 is_equal c a 0 1 0 e b 0 1 0 e # 7430 is_equal c a 0 1 0 e b 0 1 0 e # 7431 is_equal c a 0 1 0 e b 0 1 0 e # 7432 is_equal c a 0 1 0 e b 0 1 0 # 7433 is_equal c a 0 1 0 e b 0 1 0 e # 7434 is_equal c a 0 1 0 e b 0 1 0 e # 7435 is_equal c a 0 1 0 e b 0 1 0 e # 7436 is_equal c a 0 1 0 e b 0 1 0 e # 7437 is_equal c a 0 1 0 e b 0 1 0 e # 7438 is_equal c a 0 1 0 e b 0 1 0 # 7439 is_equal c a 0 1 0 b 0 1 0 # 7440 is_equal c a 0 1 0 b 0 1 0 e # 7441 is_equal c a 0 1 0 b 0 1 0 # 7442 is_equal c a 0 1 0 b 0 1 0 e # 7443 is_equal c a 0 1 0 b 0 1 0 # 7444 is_equal c a 0 1 0 b 0 1 0 # 7445 is_equal c a 0 1 0 e b 0 1 0 e # 7446 is_equal c a 0 1 0 e b 0 1 1 e # 7447 is_equal c a 0 1 0 e b 0 1 0 e # 7448 is_equal c a 0 1 0 e b 0 1 1 e # 7449 is_equal c a 0 1 0 e b 0 1 0 e # 7450 is_equal c a 0 1 0 e b 0 1 1 # 7451 is_equal c a 0 1 0 e b 0 1 0 e # 7452 is_equal c a 0 1 0 e b 0 1 1 e # 7453 is_equal c a 0 1 0 e b 0 1 0 e # 7454 is_equal c a 0 1 0 e b 0 1 1 e # 7455 is_equal c a 0 1 0 e b 0 1 0 e # 7456 is_equal c a 0 1 0 e b 0 1 1 # 7457 is_equal c a 0 1 0 b 0 1 0 # 7458 is_equal c a 0 1 0 b 0 1 1 e # 7459 is_equal c a 0 1 0 b 0 1 0 # 7460 is_equal c a 0 1 0 b 0 1 1 e # 7461 is_equal c a 0 1 0 b 0 1 0 # 7462 is_equal c a 0 1 0 b 0 1 1 # 7463 is_equal c a 0 1 1 e b 0 1 1 e # 7464 is_equal c a 0 1 1 e b 0 0 0 e # 7465 is_equal c a 0 1 1 e b 0 1 1 e # 7466 is_equal c a 0 1 1 e b 0 0 0 e # 7467 is_equal c a 0 1 1 e b 0 1 1 e # 7468 is_equal c a 0 1 1 e b 0 0 0 # 7469 is_equal c a 0 1 1 e b 0 1 1 e # 7470 is_equal c a 0 1 1 e b 0 0 0 e # 7471 is_equal c a 0 1 1 e b 0 1 1 e # 7472 is_equal c a 0 1 1 e b 0 0 0 e # 7473 is_equal c a 0 1 1 e b 0 1 1 e # 7474 is_equal c a 0 1 1 e b 0 0 0 # 7475 is_equal c a 0 1 1 b 0 1 1 # 7476 is_equal c a 0 1 1 b 0 0 0 e # 7477 is_equal c a 0 1 1 b 0 1 1 # 7478 is_equal c a 0 1 1 b 0 0 0 e # 7479 is_equal c a 0 1 1 b 0 1 1 # 7480 is_equal c a 0 1 1 b 0 0 0 # 7481 is_equal c a 0 1 1 e b 0 1 1 e # 7482 is_equal c a 0 1 1 e b 0 0 1 e # 7483 is_equal c a 0 1 1 e b 0 1 1 e # 7484 is_equal c a 0 1 1 e b 0 0 1 e # 7485 is_equal c a 0 1 1 e b 0 1 1 e # 7486 is_equal c a 0 1 1 e b 0 0 1 # 7487 is_equal c a 0 1 1 e b 0 1 1 e # 7488 is_equal c a 0 1 1 e b 0 0 1 e # 7489 is_equal c a 0 1 1 e b 0 1 1 e # 7490 is_equal c a 0 1 1 e b 0 0 1 e # 7491 is_equal c a 0 1 1 e b 0 1 1 e # 7492 is_equal c a 0 1 1 e b 0 0 1 # 7493 is_equal c a 0 1 1 b 0 1 1 # 7494 is_equal c a 0 1 1 b 0 0 1 e # 7495 is_equal c a 0 1 1 b 0 1 1 # 7496 is_equal c a 0 1 1 b 0 0 1 e # 7497 is_equal c a 0 1 1 b 0 1 1 # 7498 is_equal c a 0 1 1 b 0 0 1 # 7499 is_equal c a 0 1 1 e b 0 1 1 e # 7500 is_equal c a 0 1 1 e b 0 1 0 e # 7501 is_equal c a 0 1 1 e b 0 1 1 e # 7502 is_equal c a 0 1 1 e b 0 1 0 e # 7503 is_equal c a 0 1 1 e b 0 1 1 e # 7504 is_equal c a 0 1 1 e b 0 1 0 # 7505 is_equal c a 0 1 1 e b 0 1 1 e # 7506 is_equal c a 0 1 1 e b 0 1 0 e # 7507 is_equal c a 0 1 1 e b 0 1 1 e # 7508 is_equal c a 0 1 1 e b 0 1 0 e # 7509 is_equal c a 0 1 1 e b 0 1 1 e # 7510 is_equal c a 0 1 1 e b 0 1 0 # 7511 is_equal c a 0 1 1 b 0 1 1 # 7512 is_equal c a 0 1 1 b 0 1 0 e # 7513 is_equal c a 0 1 1 b 0 1 1 # 7514 is_equal c a 0 1 1 b 0 1 0 e # 7515 is_equal c a 0 1 1 b 0 1 1 # 7516 is_equal c a 0 1 1 b 0 1 0 # 7517 is_equal c a 0 1 1 e b 0 1 1 e # 7518 is_equal c a 0 1 1 e b 0 1 1 e # 7519 is_equal c a 0 1 1 e b 0 1 1 e # 7520 is_equal c a 0 1 1 e b 0 1 1 e # 7521 is_equal c a 0 1 1 e b 0 1 1 e # 7522 is_equal c a 0 1 1 e b 0 1 1 # 7523 is_equal c a 0 1 1 e b 0 1 1 e # 7524 is_equal c a 0 1 1 e b 0 1 1 e # 7525 is_equal c a 0 1 1 e b 0 1 1 e # 7526 is_equal c a 0 1 1 e b 0 1 1 e # 7527 is_equal c a 0 1 1 e b 0 1 1 e # 7528 is_equal c a 0 1 1 e b 0 1 1 # 7529 is_equal c a 0 1 1 b 0 1 1 # 7530 is_equal c a 0 1 1 b 0 1 1 e # 7531 is_equal c a 0 1 1 b 0 1 1 # 7532 is_equal c a 0 1 1 b 0 1 1 e # 7533 is_equal c a 0 1 1 b 0 1 1 # 7534 is_equal c a 0 1 1 b 0 1 1 # 7535 is_equal c a 1 0 0 e b 1 0 0 e # 7536 is_equal c a 1 0 0 e b 1 0 0 e # 7537 is_equal c a 1 0 0 e b 1 0 0 e # 7538 is_equal c a 1 0 0 e b 1 0 0 f # 7539 is_equal c a 1 0 0 e b 1 0 0 e # 7540 is_equal c a 1 0 0 e b 1 0 0 0 # 7541 is_equal c a 1 0 0 f b 1 0 0 f # 7542 is_equal c a 1 0 0 f b 1 0 0 e # 7543 is_equal c a 1 0 0 f b 1 0 0 f # 7544 is_equal c a 1 0 0 f b 1 0 0 f # 7545 is_equal c a 1 0 0 f b 1 0 0 f # 7546 is_equal c a 1 0 0 f b 1 0 0 # 7547 is_equal c a 1 0 0 b 1 0 0 # 7548 is_equal c a 1 0 0 b 1 0 0 e # 7549 is_equal c a 1 0 0 0 b 1 0 0 0 # 7550 is_equal c a 1 0 0 0 b 1 0 0 f # 7551 is_equal c a 1 0 0 b 1 0 0 # 7552 is_equal c a 1 0 0 b 1 0 0 0 # 7553 is_equal c a 1 0 0 e b 1 0 0 e # 7554 is_equal c a 1 0 0 e b 1 0 1 e # 7555 is_equal c a 1 0 0 e b 1 0 0 e # 7556 is_equal c a 1 0 0 e b 1 0 1 f # 7557 is_equal c a 1 0 0 e b 1 0 0 e # 7558 is_equal c a 1 0 0 e b 1 0 1 0 # 7559 is_equal c a 1 0 0 f b 1 0 0 f # 7560 is_equal c a 1 0 0 f b 1 0 1 e # 7561 is_equal c a 1 0 0 f b 1 0 0 f # 7562 is_equal c a 1 0 0 f b 1 0 1 f # 7563 is_equal c a 1 0 0 f b 1 0 0 f # 7564 is_equal c a 1 0 0 f b 1 0 1 # 7565 is_equal c a 1 0 0 0 b 1 0 0 0 # 7566 is_equal c a 1 0 0 0 b 1 0 1 e # 7567 is_equal c a 1 0 0 0 b 1 0 0 0 # 7568 is_equal c a 1 0 0 0 b 1 0 1 f # 7569 is_equal c a 1 0 0 0 b 1 0 0 0 # 7570 is_equal c a 1 0 0 0 b 1 0 1 # 7571 is_equal c a 1 0 0 e b 1 0 0 e # 7572 is_equal c a 1 0 0 e b 1 1 0 e # 7573 is_equal c a 1 0 0 e b 1 0 0 e # 7574 is_equal c a 1 0 0 e b 1 1 0 f # 7575 is_equal c a 1 0 0 e b 1 0 0 e # 7576 is_equal c a 1 0 0 e b 1 1 0 # 7577 is_equal c a 1 0 0 f b 1 0 0 f # 7578 is_equal c a 1 0 0 f b 1 1 0 e # 7579 is_equal c a 1 0 0 f b 1 0 0 f # 7580 is_equal c a 1 0 0 f b 1 1 0 f # 7581 is_equal c a 1 0 0 f b 1 0 0 f # 7582 is_equal c a 1 0 0 f b 1 1 0 0 # 7583 is_equal c a 1 0 0 b 1 0 0 # 7584 is_equal c a 1 0 0 b 1 1 0 e # 7585 is_equal c a 1 0 0 0 b 1 0 0 0 # 7586 is_equal c a 1 0 0 0 b 1 1 0 f # 7587 is_equal c a 1 0 0 0 b 1 0 0 0 # 7588 is_equal c a 1 0 0 0 b 1 1 0 0 # 7589 is_equal c a 1 0 0 e b 1 0 0 e # 7590 is_equal c a 1 0 0 e b 1 1 1 e # 7591 is_equal c a 1 0 0 e b 1 0 0 e # 7592 is_equal c a 1 0 0 e b 1 1 1 f # 7593 is_equal c a 1 0 0 e b 1 0 0 e # 7594 is_equal c a 1 0 0 e b 1 1 1 0 # 7595 is_equal c a 1 0 0 f b 1 0 0 f # 7596 is_equal c a 1 0 0 f b 1 1 1 e # 7597 is_equal c a 1 0 0 f b 1 0 0 f # 7598 is_equal c a 1 0 0 f b 1 1 1 f # 7599 is_equal c a 1 0 0 f b 1 0 0 f # 7600 is_equal c a 1 0 0 f b 1 1 1 # 7601 is_equal c a 1 0 0 0 b 1 0 0 0 # 7602 is_equal c a 1 0 0 0 b 1 1 1 e # 7603 is_equal c a 1 0 0 b 1 0 0 # 7604 is_equal c a 1 0 0 b 1 1 1 f # 7605 is_equal c a 1 0 0 0 b 1 0 0 0 # 7606 is_equal c a 1 0 0 0 b 1 1 1 # 7607 is_equal c a 1 0 1 e b 1 0 1 e # 7608 is_equal c a 1 0 1 e b 1 0 0 e # 7609 is_equal c a 1 0 1 e b 1 0 1 e # 7610 is_equal c a 1 0 1 e b 1 0 0 f # 7611 is_equal c a 1 0 1 e b 1 0 1 e # 7612 is_equal c a 1 0 1 e b 1 0 0 0 # 7613 is_equal c a 1 0 1 f b 1 0 1 f # 7614 is_equal c a 1 0 1 f b 1 0 0 e # 7615 is_equal c a 1 0 1 f b 1 0 1 f # 7616 is_equal c a 1 0 1 f b 1 0 0 f # 7617 is_equal c a 1 0 1 f b 1 0 1 f # 7618 is_equal c a 1 0 1 f b 1 0 0 0 # 7619 is_equal c a 1 0 1 b 1 0 1 # 7620 is_equal c a 1 0 1 b 1 0 0 e # 7621 is_equal c a 1 0 1 0 b 1 0 1 0 # 7622 is_equal c a 1 0 1 0 b 1 0 0 f # 7623 is_equal c a 1 0 1 b 1 0 1 # 7624 is_equal c a 1 0 1 b 1 0 0 0 # 7625 is_equal c a 1 0 1 e b 1 0 1 e # 7626 is_equal c a 1 0 1 e b 1 0 1 e # 7627 is_equal c a 1 0 1 e b 1 0 1 e # 7628 is_equal c a 1 0 1 e b 1 0 1 f # 7629 is_equal c a 1 0 1 e b 1 0 1 e # 7630 is_equal c a 1 0 1 e b 1 0 1 # 7631 is_equal c a 1 0 1 f b 1 0 1 f # 7632 is_equal c a 1 0 1 f b 1 0 1 e # 7633 is_equal c a 1 0 1 f b 1 0 1 f # 7634 is_equal c a 1 0 1 f b 1 0 1 f # 7635 is_equal c a 1 0 1 f b 1 0 1 f # 7636 is_equal c a 1 0 1 f b 1 0 1 # 7637 is_equal c a 1 0 1 b 1 0 1 # 7638 is_equal c a 1 0 1 b 1 0 1 e # 7639 is_equal c a 1 0 1 b 1 0 1 # 7640 is_equal c a 1 0 1 b 1 0 1 f # 7641 is_equal c a 1 0 1 0 b 1 0 1 0 # 7642 is_equal c a 1 0 1 0 b 1 0 1 # 7643 is_equal c a 1 0 1 e b 1 0 1 e # 7644 is_equal c a 1 0 1 e b 1 1 0 e # 7645 is_equal c a 1 0 1 e b 1 0 1 e # 7646 is_equal c a 1 0 1 e b 1 1 0 f # 7647 is_equal c a 1 0 1 e b 1 0 1 e # 7648 is_equal c a 1 0 1 e b 1 1 0 # 7649 is_equal c a 1 0 1 f b 1 0 1 f # 7650 is_equal c a 1 0 1 f b 1 1 0 e # 7651 is_equal c a 1 0 1 f b 1 0 1 f # 7652 is_equal c a 1 0 1 f b 1 1 0 f # 7653 is_equal c a 1 0 1 f b 1 0 1 f # 7654 is_equal c a 1 0 1 f b 1 1 0 0 # 7655 is_equal c a 1 0 1 0 b 1 0 1 0 # 7656 is_equal c a 1 0 1 0 b 1 1 0 e # 7657 is_equal c a 1 0 1 b 1 0 1 # 7658 is_equal c a 1 0 1 b 1 1 0 f # 7659 is_equal c a 1 0 1 0 b 1 0 1 0 # 7660 is_equal c a 1 0 1 0 b 1 1 0 0 # 7661 is_equal c a 1 0 1 e b 1 0 1 e # 7662 is_equal c a 1 0 1 e b 1 1 1 e # 7663 is_equal c a 1 0 1 e b 1 0 1 e # 7664 is_equal c a 1 0 1 e b 1 1 1 f # 7665 is_equal c a 1 0 1 e b 1 0 1 e # 7666 is_equal c a 1 0 1 e b 1 1 1 0 # 7667 is_equal c a 1 0 1 f b 1 0 1 f # 7668 is_equal c a 1 0 1 f b 1 1 1 e # 7669 is_equal c a 1 0 1 f b 1 0 1 f # 7670 is_equal c a 1 0 1 f b 1 1 1 f # 7671 is_equal c a 1 0 1 f b 1 0 1 f # 7672 is_equal c a 1 0 1 f b 1 1 1 # 7673 is_equal c a 1 0 1 b 1 0 1 # 7674 is_equal c a 1 0 1 b 1 1 1 e # 7675 is_equal c a 1 0 1 b 1 0 1 # 7676 is_equal c a 1 0 1 b 1 1 1 f # 7677 is_equal c a 1 0 1 b 1 0 1 # 7678 is_equal c a 1 0 1 b 1 1 1 # 7679 is_equal c a 1 1 0 e b 1 1 0 e # 7680 is_equal c a 1 1 0 e b 1 0 0 e # 7681 is_equal c a 1 1 0 e b 1 1 0 e # 7682 is_equal c a 1 1 0 e b 1 0 0 f # 7683 is_equal c a 1 1 0 e b 1 1 0 e # 7684 is_equal c a 1 1 0 e b 1 0 0 # 7685 is_equal c a 1 1 0 f b 1 1 0 f # 7686 is_equal c a 1 1 0 f b 1 0 0 e # 7687 is_equal c a 1 1 0 f b 1 1 0 f # 7688 is_equal c a 1 1 0 f b 1 0 0 f # 7689 is_equal c a 1 1 0 f b 1 1 0 f # 7690 is_equal c a 1 1 0 f b 1 0 0 # 7691 is_equal c a 1 1 0 0 b 1 1 0 0 # 7692 is_equal c a 1 1 0 0 b 1 0 0 e # 7693 is_equal c a 1 1 0 b 1 1 0 # 7694 is_equal c a 1 1 0 b 1 0 0 f # 7695 is_equal c a 1 1 0 b 1 1 0 # 7696 is_equal c a 1 1 0 b 1 0 0 0 # 7697 is_equal c a 1 1 0 e b 1 1 0 e # 7698 is_equal c a 1 1 0 e b 1 0 1 e # 7699 is_equal c a 1 1 0 e b 1 1 0 e # 7700 is_equal c a 1 1 0 e b 1 0 1 f # 7701 is_equal c a 1 1 0 e b 1 1 0 e # 7702 is_equal c a 1 1 0 e b 1 0 1 # 7703 is_equal c a 1 1 0 f b 1 1 0 f # 7704 is_equal c a 1 1 0 f b 1 0 1 e # 7705 is_equal c a 1 1 0 f b 1 1 0 f # 7706 is_equal c a 1 1 0 f b 1 0 1 f # 7707 is_equal c a 1 1 0 f b 1 1 0 f # 7708 is_equal c a 1 1 0 f b 1 0 1 # 7709 is_equal c a 1 1 0 0 b 1 1 0 0 # 7710 is_equal c a 1 1 0 0 b 1 0 1 e # 7711 is_equal c a 1 1 0 0 b 1 1 0 0 # 7712 is_equal c a 1 1 0 0 b 1 0 1 f # 7713 is_equal c a 1 1 0 b 1 1 0 # 7714 is_equal c a 1 1 0 b 1 0 1 0 # 7715 is_equal c a 1 1 0 e b 1 1 0 e # 7716 is_equal c a 1 1 0 e b 1 1 0 e # 7717 is_equal c a 1 1 0 e b 1 1 0 e # 7718 is_equal c a 1 1 0 e b 1 1 0 f # 7719 is_equal c a 1 1 0 e b 1 1 0 e # 7720 is_equal c a 1 1 0 e b 1 1 0 # 7721 is_equal c a 1 1 0 f b 1 1 0 f # 7722 is_equal c a 1 1 0 f b 1 1 0 e # 7723 is_equal c a 1 1 0 f b 1 1 0 f # 7724 is_equal c a 1 1 0 f b 1 1 0 f # 7725 is_equal c a 1 1 0 f b 1 1 0 f # 7726 is_equal c a 1 1 0 f b 1 1 0 0 # 7727 is_equal c a 1 1 0 b 1 1 0 # 7728 is_equal c a 1 1 0 b 1 1 0 e # 7729 is_equal c a 1 1 0 0 b 1 1 0 0 # 7730 is_equal c a 1 1 0 0 b 1 1 0 f # 7731 is_equal c a 1 1 0 b 1 1 0 # 7732 is_equal c a 1 1 0 b 1 1 0 # 7733 is_equal c a 1 1 0 e b 1 1 0 e # 7734 is_equal c a 1 1 0 e b 1 1 1 e # 7735 is_equal c a 1 1 0 e b 1 1 0 e # 7736 is_equal c a 1 1 0 e b 1 1 1 f # 7737 is_equal c a 1 1 0 e b 1 1 0 e # 7738 is_equal c a 1 1 0 e b 1 1 1 # 7739 is_equal c a 1 1 0 f b 1 1 0 f # 7740 is_equal c a 1 1 0 f b 1 1 1 e # 7741 is_equal c a 1 1 0 f b 1 1 0 f # 7742 is_equal c a 1 1 0 f b 1 1 1 f # 7743 is_equal c a 1 1 0 f b 1 1 0 f # 7744 is_equal c a 1 1 0 f b 1 1 1 0 # 7745 is_equal c a 1 1 0 b 1 1 0 # 7746 is_equal c a 1 1 0 b 1 1 1 e # 7747 is_equal c a 1 1 0 0 b 1 1 0 0 # 7748 is_equal c a 1 1 0 0 b 1 1 1 f # 7749 is_equal c a 1 1 0 b 1 1 0 # 7750 is_equal c a 1 1 0 b 1 1 1 # 7751 is_equal c a 1 1 1 e b 1 1 1 e # 7752 is_equal c a 1 1 1 e b 1 0 0 e # 7753 is_equal c a 1 1 1 e b 1 1 1 e # 7754 is_equal c a 1 1 1 e b 1 0 0 f # 7755 is_equal c a 1 1 1 e b 1 1 1 e # 7756 is_equal c a 1 1 1 e b 1 0 0 0 # 7757 is_equal c a 1 1 1 f b 1 1 1 f # 7758 is_equal c a 1 1 1 f b 1 0 0 e # 7759 is_equal c a 1 1 1 f b 1 1 1 f # 7760 is_equal c a 1 1 1 f b 1 0 0 f # 7761 is_equal c a 1 1 1 f b 1 1 1 f # 7762 is_equal c a 1 1 1 f b 1 0 0 # 7763 is_equal c a 1 1 1 b 1 1 1 # 7764 is_equal c a 1 1 1 b 1 0 0 e # 7765 is_equal c a 1 1 1 b 1 1 1 # 7766 is_equal c a 1 1 1 b 1 0 0 f # 7767 is_equal c a 1 1 1 0 b 1 1 1 0 # 7768 is_equal c a 1 1 1 0 b 1 0 0 0 # 7769 is_equal c a 1 1 1 e b 1 1 1 e # 7770 is_equal c a 1 1 1 e b 1 0 1 e # 7771 is_equal c a 1 1 1 e b 1 1 1 e # 7772 is_equal c a 1 1 1 e b 1 0 1 f # 7773 is_equal c a 1 1 1 e b 1 1 1 e # 7774 is_equal c a 1 1 1 e b 1 0 1 0 # 7775 is_equal c a 1 1 1 f b 1 1 1 f # 7776 is_equal c a 1 1 1 f b 1 0 1 e # 7777 is_equal c a 1 1 1 f b 1 1 1 f # 7778 is_equal c a 1 1 1 f b 1 0 1 f # 7779 is_equal c a 1 1 1 f b 1 1 1 f # 7780 is_equal c a 1 1 1 f b 1 0 1 0 # 7781 is_equal c a 1 1 1 0 b 1 1 1 0 # 7782 is_equal c a 1 1 1 0 b 1 0 1 e # 7783 is_equal c a 1 1 1 b 1 1 1 # 7784 is_equal c a 1 1 1 b 1 0 1 f # 7785 is_equal c a 1 1 1 b 1 1 1 # 7786 is_equal c a 1 1 1 b 1 0 1 # 7787 is_equal c a 1 1 1 e b 1 1 1 e # 7788 is_equal c a 1 1 1 e b 1 1 0 e # 7789 is_equal c a 1 1 1 e b 1 1 1 e # 7790 is_equal c a 1 1 1 e b 1 1 0 f # 7791 is_equal c a 1 1 1 e b 1 1 1 e # 7792 is_equal c a 1 1 1 e b 1 1 0 # 7793 is_equal c a 1 1 1 f b 1 1 1 f # 7794 is_equal c a 1 1 1 f b 1 1 0 e # 7795 is_equal c a 1 1 1 f b 1 1 1 f # 7796 is_equal c a 1 1 1 f b 1 1 0 f # 7797 is_equal c a 1 1 1 f b 1 1 1 f # 7798 is_equal c a 1 1 1 f b 1 1 0 0 # 7799 is_equal c a 1 1 1 0 b 1 1 1 0 # 7800 is_equal c a 1 1 1 0 b 1 1 0 e # 7801 is_equal c a 1 1 1 0 b 1 1 1 0 # 7802 is_equal c a 1 1 1 0 b 1 1 0 f # 7803 is_equal c a 1 1 1 b 1 1 1 # 7804 is_equal c a 1 1 1 b 1 1 0 # 7805 is_equal c a 1 1 1 e b 1 1 1 e # 7806 is_equal c a 1 1 1 e b 1 1 1 e # 7807 is_equal c a 1 1 1 e b 1 1 1 e # 7808 is_equal c a 1 1 1 e b 1 1 1 f # 7809 is_equal c a 1 1 1 e b 1 1 1 e # 7810 is_equal c a 1 1 1 e b 1 1 1 0 # 7811 is_equal c a 1 1 1 f b 1 1 1 f # 7812 is_equal c a 1 1 1 f b 1 1 1 e # 7813 is_equal c a 1 1 1 f b 1 1 1 f # 7814 is_equal c a 1 1 1 f b 1 1 1 f # 7815 is_equal c a 1 1 1 f b 1 1 1 f # 7816 is_equal c a 1 1 1 f b 1 1 1 0 # 7817 is_equal c a 1 1 1 b 1 1 1 # 7818 is_equal c a 1 1 1 b 1 1 1 e # 7819 is_equal c a 1 1 1 b 1 1 1 # 7820 is_equal c a 1 1 1 b 1 1 1 f # 7821 is_equal c a 1 1 1 0 b 1 1 1 0 # 7822 is_equal c a 1 1 1 0 b 1 1 1 # 7823 is_equal c a 31 0 0 e b 31 0 0 e # 7824 is_equal c a 31 0 0 e b 31 0 0 e # 7825 is_equal c a 31 0 0 e b 31 0 0 e # 7826 is_equal c a 31 0 0 e b 31 0 0 f # 7827 is_equal c a 31 0 0 e b 31 0 0 e # 7828 is_equal c a 31 0 0 e b 31 0 0 1 3 4 6 7 8 10 13 17 18 21 23 26 28 29 30 # 7829 is_equal c a 31 0 0 f b 31 0 0 f # 7830 is_equal c a 31 0 0 f b 31 0 0 e # 7831 is_equal c a 31 0 0 f b 31 0 0 f # 7832 is_equal c a 31 0 0 f b 31 0 0 f # 7833 is_equal c a 31 0 0 f b 31 0 0 f # 7834 is_equal c a 31 0 0 f b 31 0 0 1 3 4 5 6 11 12 15 18 19 20 23 24 25 26 28 # 7835 is_equal c a 31 0 0 0 3 4 6 8 10 11 16 18 19 23 26 28 30 b 31 0 0 0 3 4 6 8 10 11 16 18 19 23 26 28 30 # 7836 is_equal c a 31 0 0 0 3 4 6 8 10 11 16 18 19 23 26 28 30 b 31 0 0 e # 7837 is_equal c a 31 0 0 0 3 6 7 10 11 12 15 16 17 18 19 20 22 23 24 26 29 30 b 31 0 0 0 3 6 7 10 11 12 15 16 17 18 19 20 22 23 24 26 29 30 # 7838 is_equal c a 31 0 0 0 3 6 7 10 11 12 15 16 17 18 19 20 22 23 24 26 29 30 b 31 0 0 f # 7839 is_equal c a 31 0 0 4 5 7 8 9 10 11 17 19 20 21 22 23 24 26 27 29 30 b 31 0 0 4 5 7 8 9 10 11 17 19 20 21 22 23 24 26 27 29 30 # 7840 is_equal c a 31 0 0 4 5 7 8 9 10 11 17 19 20 21 22 23 24 26 27 29 30 b 31 0 0 0 3 5 8 9 11 15 16 19 22 25 26 29 # 7841 is_equal c a 31 0 0 e b 31 0 0 e # 7842 is_equal c a 31 0 0 e b 31 0 1 e # 7843 is_equal c a 31 0 0 e b 31 0 0 e # 7844 is_equal c a 31 0 0 e b 31 0 1 f # 7845 is_equal c a 31 0 0 e b 31 0 0 e # 7846 is_equal c a 31 0 0 e b 31 0 1 1 10 12 14 15 16 17 19 21 28 30 # 7847 is_equal c a 31 0 0 f b 31 0 0 f # 7848 is_equal c a 31 0 0 f b 31 0 1 e # 7849 is_equal c a 31 0 0 f b 31 0 0 f # 7850 is_equal c a 31 0 0 f b 31 0 1 f # 7851 is_equal c a 31 0 0 f b 31 0 0 f # 7852 is_equal c a 31 0 0 f b 31 0 1 5 6 7 10 11 13 16 18 19 20 21 25 26 27 28 29 # 7853 is_equal c a 31 0 0 0 2 4 7 8 9 14 15 18 21 27 28 b 31 0 0 0 2 4 7 8 9 14 15 18 21 27 28 # 7854 is_equal c a 31 0 0 0 2 4 7 8 9 14 15 18 21 27 28 b 31 0 1 e # 7855 is_equal c a 31 0 0 0 5 6 7 9 11 13 14 19 20 24 27 29 b 31 0 0 0 5 6 7 9 11 13 14 19 20 24 27 29 # 7856 is_equal c a 31 0 0 0 5 6 7 9 11 13 14 19 20 24 27 29 b 31 0 1 f # 7857 is_equal c a 31 0 0 3 6 8 9 10 11 13 14 15 20 21 24 25 26 30 b 31 0 0 3 6 8 9 10 11 13 14 15 20 21 24 25 26 30 # 7858 is_equal c a 31 0 0 3 6 8 9 10 11 13 14 15 20 21 24 25 26 30 b 31 0 1 0 1 3 6 7 9 10 11 13 14 17 18 20 21 22 24 25 26 30 # 7859 is_equal c a 31 0 0 e b 31 0 0 e # 7860 is_equal c a 31 0 0 e b 31 1 0 e # 7861 is_equal c a 31 0 0 e b 31 0 0 e # 7862 is_equal c a 31 0 0 e b 31 1 0 f # 7863 is_equal c a 31 0 0 e b 31 0 0 e # 7864 is_equal c a 31 0 0 e b 31 1 0 5 8 10 11 12 13 14 16 17 20 23 26 28 # 7865 is_equal c a 31 0 0 f b 31 0 0 f # 7866 is_equal c a 31 0 0 f b 31 1 0 e # 7867 is_equal c a 31 0 0 f b 31 0 0 f # 7868 is_equal c a 31 0 0 f b 31 1 0 f # 7869 is_equal c a 31 0 0 f b 31 0 0 f # 7870 is_equal c a 31 0 0 f b 31 1 0 1 2 3 9 12 17 18 19 20 23 24 25 26 28 30 # 7871 is_equal c a 31 0 0 1 5 6 7 9 11 12 16 20 21 22 23 27 29 b 31 0 0 1 5 6 7 9 11 12 16 20 21 22 23 27 29 # 7872 is_equal c a 31 0 0 1 5 6 7 9 11 12 16 20 21 22 23 27 29 b 31 1 0 e # 7873 is_equal c a 31 0 0 1 2 3 4 5 7 10 12 14 17 19 20 23 24 25 29 30 b 31 0 0 1 2 3 4 5 7 10 12 14 17 19 20 23 24 25 29 30 # 7874 is_equal c a 31 0 0 1 2 3 4 5 7 10 12 14 17 19 20 23 24 25 29 30 b 31 1 0 f # 7875 is_equal c a 31 0 0 0 1 2 4 5 6 11 13 14 17 18 19 20 24 26 28 29 b 31 0 0 0 1 2 4 5 6 11 13 14 17 18 19 20 24 26 28 29 # 7876 is_equal c a 31 0 0 0 1 2 4 5 6 11 13 14 17 18 19 20 24 26 28 29 b 31 1 0 3 6 7 8 11 14 15 18 22 23 27 # 7877 is_equal c a 31 0 0 e b 31 0 0 e # 7878 is_equal c a 31 0 0 e b 31 1 1 e # 7879 is_equal c a 31 0 0 e b 31 0 0 e # 7880 is_equal c a 31 0 0 e b 31 1 1 f # 7881 is_equal c a 31 0 0 e b 31 0 0 e # 7882 is_equal c a 31 0 0 e b 31 1 1 0 1 2 3 4 6 7 9 10 14 16 20 21 24 25 26 27 28 30 # 7883 is_equal c a 31 0 0 f b 31 0 0 f # 7884 is_equal c a 31 0 0 f b 31 1 1 e # 7885 is_equal c a 31 0 0 f b 31 0 0 f # 7886 is_equal c a 31 0 0 f b 31 1 1 f # 7887 is_equal c a 31 0 0 f b 31 0 0 f # 7888 is_equal c a 31 0 0 f b 31 1 1 0 1 2 4 5 7 10 12 13 16 17 18 19 20 25 28 # 7889 is_equal c a 31 0 0 0 2 5 9 10 11 13 15 16 19 20 21 22 25 27 28 29 30 b 31 0 0 0 2 5 9 10 11 13 15 16 19 20 21 22 25 27 28 29 30 # 7890 is_equal c a 31 0 0 0 2 5 9 10 11 13 15 16 19 20 21 22 25 27 28 29 30 b 31 1 1 e # 7891 is_equal c a 31 0 0 0 2 3 4 5 11 12 16 18 19 21 22 23 25 28 b 31 0 0 0 2 3 4 5 11 12 16 18 19 21 22 23 25 28 # 7892 is_equal c a 31 0 0 0 2 3 4 5 11 12 16 18 19 21 22 23 25 28 b 31 1 1 f # 7893 is_equal c a 31 0 0 1 4 6 7 12 14 20 22 24 25 26 29 b 31 0 0 1 4 6 7 12 14 20 22 24 25 26 29 # 7894 is_equal c a 31 0 0 1 4 6 7 12 14 20 22 24 25 26 29 b 31 1 1 0 1 2 5 9 10 11 12 14 16 17 18 19 20 22 25 26 29 30 # 7895 is_equal c a 31 0 1 e b 31 0 1 e # 7896 is_equal c a 31 0 1 e b 31 0 0 e # 7897 is_equal c a 31 0 1 e b 31 0 1 e # 7898 is_equal c a 31 0 1 e b 31 0 0 f # 7899 is_equal c a 31 0 1 e b 31 0 1 e # 7900 is_equal c a 31 0 1 e b 31 0 0 1 2 3 5 7 9 12 13 14 15 17 18 20 21 23 26 27 29 30 # 7901 is_equal c a 31 0 1 f b 31 0 1 f # 7902 is_equal c a 31 0 1 f b 31 0 0 e # 7903 is_equal c a 31 0 1 f b 31 0 1 f # 7904 is_equal c a 31 0 1 f b 31 0 0 f # 7905 is_equal c a 31 0 1 f b 31 0 1 f # 7906 is_equal c a 31 0 1 f b 31 0 0 0 1 4 6 7 9 11 13 14 17 19 25 30 # 7907 is_equal c a 31 0 1 0 5 7 9 11 14 15 16 19 20 24 25 26 b 31 0 1 0 5 7 9 11 14 15 16 19 20 24 25 26 # 7908 is_equal c a 31 0 1 0 5 7 9 11 14 15 16 19 20 24 25 26 b 31 0 0 e # 7909 is_equal c a 31 0 1 1 2 3 4 6 7 8 9 11 17 18 19 20 29 30 b 31 0 1 1 2 3 4 6 7 8 9 11 17 18 19 20 29 30 # 7910 is_equal c a 31 0 1 1 2 3 4 6 7 8 9 11 17 18 19 20 29 30 b 31 0 0 f # 7911 is_equal c a 31 0 1 0 1 4 5 7 8 10 12 14 16 17 19 20 22 24 26 28 29 30 b 31 0 1 0 1 4 5 7 8 10 12 14 16 17 19 20 22 24 26 28 29 30 # 7912 is_equal c a 31 0 1 0 1 4 5 7 8 10 12 14 16 17 19 20 22 24 26 28 29 30 b 31 0 0 1 3 9 11 12 13 14 17 18 20 24 # 7913 is_equal c a 31 0 1 e b 31 0 1 e # 7914 is_equal c a 31 0 1 e b 31 0 1 e # 7915 is_equal c a 31 0 1 e b 31 0 1 e # 7916 is_equal c a 31 0 1 e b 31 0 1 f # 7917 is_equal c a 31 0 1 e b 31 0 1 e # 7918 is_equal c a 31 0 1 e b 31 0 1 0 1 2 3 7 10 13 14 15 17 21 22 23 24 26 27 # 7919 is_equal c a 31 0 1 f b 31 0 1 f # 7920 is_equal c a 31 0 1 f b 31 0 1 e # 7921 is_equal c a 31 0 1 f b 31 0 1 f # 7922 is_equal c a 31 0 1 f b 31 0 1 f # 7923 is_equal c a 31 0 1 f b 31 0 1 f # 7924 is_equal c a 31 0 1 f b 31 0 1 2 3 4 8 11 12 14 17 18 19 21 22 23 25 26 30 # 7925 is_equal c a 31 0 1 0 2 3 5 6 7 8 11 14 15 16 18 19 20 22 23 24 25 26 29 b 31 0 1 0 2 3 5 6 7 8 11 14 15 16 18 19 20 22 23 24 25 26 29 # 7926 is_equal c a 31 0 1 0 2 3 5 6 7 8 11 14 15 16 18 19 20 22 23 24 25 26 29 b 31 0 1 e # 7927 is_equal c a 31 0 1 0 2 3 4 5 6 8 10 17 18 22 25 26 27 28 29 b 31 0 1 0 2 3 4 5 6 8 10 17 18 22 25 26 27 28 29 # 7928 is_equal c a 31 0 1 0 2 3 4 5 6 8 10 17 18 22 25 26 27 28 29 b 31 0 1 f # 7929 is_equal c a 31 0 1 0 3 7 8 9 13 14 16 20 21 25 28 30 b 31 0 1 0 3 7 8 9 13 14 16 20 21 25 28 30 # 7930 is_equal c a 31 0 1 0 3 7 8 9 13 14 16 20 21 25 28 30 b 31 0 1 0 1 2 3 4 7 9 11 13 15 16 17 20 24 29 30 # 7931 is_equal c a 31 0 1 e b 31 0 1 e # 7932 is_equal c a 31 0 1 e b 31 1 0 e # 7933 is_equal c a 31 0 1 e b 31 0 1 e # 7934 is_equal c a 31 0 1 e b 31 1 0 f # 7935 is_equal c a 31 0 1 e b 31 0 1 e # 7936 is_equal c a 31 0 1 e b 31 1 0 2 12 14 17 18 19 20 21 23 24 25 27 30 # 7937 is_equal c a 31 0 1 f b 31 0 1 f # 7938 is_equal c a 31 0 1 f b 31 1 0 e # 7939 is_equal c a 31 0 1 f b 31 0 1 f # 7940 is_equal c a 31 0 1 f b 31 1 0 f # 7941 is_equal c a 31 0 1 f b 31 0 1 f # 7942 is_equal c a 31 0 1 f b 31 1 0 0 1 2 3 8 9 10 11 12 14 16 18 19 21 22 24 25 26 27 28 29 30 # 7943 is_equal c a 31 0 1 0 1 2 3 4 5 8 11 12 13 16 17 19 22 24 27 b 31 0 1 0 1 2 3 4 5 8 11 12 13 16 17 19 22 24 27 # 7944 is_equal c a 31 0 1 0 1 2 3 4 5 8 11 12 13 16 17 19 22 24 27 b 31 1 0 e # 7945 is_equal c a 31 0 1 1 3 4 8 10 11 13 15 16 18 19 23 25 27 b 31 0 1 1 3 4 8 10 11 13 15 16 18 19 23 25 27 # 7946 is_equal c a 31 0 1 1 3 4 8 10 11 13 15 16 18 19 23 25 27 b 31 1 0 f # 7947 is_equal c a 31 0 1 0 2 3 5 6 7 8 10 11 12 13 14 15 16 18 19 20 21 23 26 28 30 b 31 0 1 0 2 3 5 6 7 8 10 11 12 13 14 15 16 18 19 20 21 23 26 28 30 # 7948 is_equal c a 31 0 1 0 2 3 5 6 7 8 10 11 12 13 14 15 16 18 19 20 21 23 26 28 30 b 31 1 0 1 9 12 23 25 26 27 # 7949 is_equal c a 31 0 1 e b 31 0 1 e # 7950 is_equal c a 31 0 1 e b 31 1 1 e # 7951 is_equal c a 31 0 1 e b 31 0 1 e # 7952 is_equal c a 31 0 1 e b 31 1 1 f # 7953 is_equal c a 31 0 1 e b 31 0 1 e # 7954 is_equal c a 31 0 1 e b 31 1 1 0 2 4 8 10 12 16 17 18 21 22 28 29 30 # 7955 is_equal c a 31 0 1 f b 31 0 1 f # 7956 is_equal c a 31 0 1 f b 31 1 1 e # 7957 is_equal c a 31 0 1 f b 31 0 1 f # 7958 is_equal c a 31 0 1 f b 31 1 1 f # 7959 is_equal c a 31 0 1 f b 31 0 1 f # 7960 is_equal c a 31 0 1 f b 31 1 1 0 2 6 7 9 10 12 14 17 24 25 26 27 28 30 # 7961 is_equal c a 31 0 1 0 1 3 4 5 6 7 8 9 12 13 16 20 21 22 26 b 31 0 1 0 1 3 4 5 6 7 8 9 12 13 16 20 21 22 26 # 7962 is_equal c a 31 0 1 0 1 3 4 5 6 7 8 9 12 13 16 20 21 22 26 b 31 1 1 e # 7963 is_equal c a 31 0 1 0 2 3 6 7 11 17 18 19 20 21 23 25 26 27 30 b 31 0 1 0 2 3 6 7 11 17 18 19 20 21 23 25 26 27 30 # 7964 is_equal c a 31 0 1 0 2 3 6 7 11 17 18 19 20 21 23 25 26 27 30 b 31 1 1 f # 7965 is_equal c a 31 0 1 1 2 4 6 7 8 11 12 13 16 19 20 21 23 26 27 30 b 31 0 1 1 2 4 6 7 8 11 12 13 16 19 20 21 23 26 27 30 # 7966 is_equal c a 31 0 1 1 2 4 6 7 8 11 12 13 16 19 20 21 23 26 27 30 b 31 1 1 0 2 3 5 6 8 10 14 17 18 20 21 23 24 25 26 27 30 # 7967 is_equal c a 31 1 0 e b 31 1 0 e # 7968 is_equal c a 31 1 0 e b 31 0 0 e # 7969 is_equal c a 31 1 0 e b 31 1 0 e # 7970 is_equal c a 31 1 0 e b 31 0 0 f # 7971 is_equal c a 31 1 0 e b 31 1 0 e # 7972 is_equal c a 31 1 0 e b 31 0 0 0 1 2 3 4 5 6 10 11 12 14 16 17 18 20 21 22 23 24 26 27 28 30 # 7973 is_equal c a 31 1 0 f b 31 1 0 f # 7974 is_equal c a 31 1 0 f b 31 0 0 e # 7975 is_equal c a 31 1 0 f b 31 1 0 f # 7976 is_equal c a 31 1 0 f b 31 0 0 f # 7977 is_equal c a 31 1 0 f b 31 1 0 f # 7978 is_equal c a 31 1 0 f b 31 0 0 0 1 3 4 6 8 11 12 13 16 19 20 21 22 23 24 28 29 # 7979 is_equal c a 31 1 0 0 1 2 4 5 7 8 13 14 15 16 18 19 21 23 24 25 28 b 31 1 0 0 1 2 4 5 7 8 13 14 15 16 18 19 21 23 24 25 28 # 7980 is_equal c a 31 1 0 0 1 2 4 5 7 8 13 14 15 16 18 19 21 23 24 25 28 b 31 0 0 e # 7981 is_equal c a 31 1 0 1 3 4 7 8 9 10 13 15 16 17 18 20 21 22 23 24 25 27 29 b 31 1 0 1 3 4 7 8 9 10 13 15 16 17 18 20 21 22 23 24 25 27 29 # 7982 is_equal c a 31 1 0 1 3 4 7 8 9 10 13 15 16 17 18 20 21 22 23 24 25 27 29 b 31 0 0 f # 7983 is_equal c a 31 1 0 0 1 2 3 5 8 9 14 16 17 20 23 24 27 28 29 b 31 1 0 0 1 2 3 5 8 9 14 16 17 20 23 24 27 28 29 # 7984 is_equal c a 31 1 0 0 1 2 3 5 8 9 14 16 17 20 23 24 27 28 29 b 31 0 0 0 1 3 6 9 10 11 13 14 16 18 21 22 23 24 27 28 # 7985 is_equal c a 31 1 0 e b 31 1 0 e # 7986 is_equal c a 31 1 0 e b 31 0 1 e # 7987 is_equal c a 31 1 0 e b 31 1 0 e # 7988 is_equal c a 31 1 0 e b 31 0 1 f # 7989 is_equal c a 31 1 0 e b 31 1 0 e # 7990 is_equal c a 31 1 0 e b 31 0 1 0 1 2 5 7 11 12 14 18 19 21 22 24 26 27 29 # 7991 is_equal c a 31 1 0 f b 31 1 0 f # 7992 is_equal c a 31 1 0 f b 31 0 1 e # 7993 is_equal c a 31 1 0 f b 31 1 0 f # 7994 is_equal c a 31 1 0 f b 31 0 1 f # 7995 is_equal c a 31 1 0 f b 31 1 0 f # 7996 is_equal c a 31 1 0 f b 31 0 1 0 1 6 7 13 20 25 28 30 # 7997 is_equal c a 31 1 0 0 8 9 10 13 14 15 19 21 23 26 27 30 b 31 1 0 0 8 9 10 13 14 15 19 21 23 26 27 30 # 7998 is_equal c a 31 1 0 0 8 9 10 13 14 15 19 21 23 26 27 30 b 31 0 1 e # 7999 is_equal c a 31 1 0 2 3 4 11 14 16 17 19 23 25 26 28 30 b 31 1 0 2 3 4 11 14 16 17 19 23 25 26 28 30 # 8000 is_equal c a 31 1 0 2 3 4 11 14 16 17 19 23 25 26 28 30 b 31 0 1 f # 8001 is_equal c a 31 1 0 1 2 3 4 8 10 11 12 14 17 18 20 21 22 23 26 27 30 b 31 1 0 1 2 3 4 8 10 11 12 14 17 18 20 21 22 23 26 27 30 # 8002 is_equal c a 31 1 0 1 2 3 4 8 10 11 12 14 17 18 20 21 22 23 26 27 30 b 31 0 1 0 1 2 3 4 6 7 10 13 14 15 17 20 23 24 25 26 27 29 # 8003 is_equal c a 31 1 0 e b 31 1 0 e # 8004 is_equal c a 31 1 0 e b 31 1 0 e # 8005 is_equal c a 31 1 0 e b 31 1 0 e # 8006 is_equal c a 31 1 0 e b 31 1 0 f # 8007 is_equal c a 31 1 0 e b 31 1 0 e # 8008 is_equal c a 31 1 0 e b 31 1 0 0 1 3 4 6 7 8 11 12 14 16 17 18 26 29 30 # 8009 is_equal c a 31 1 0 f b 31 1 0 f # 8010 is_equal c a 31 1 0 f b 31 1 0 e # 8011 is_equal c a 31 1 0 f b 31 1 0 f # 8012 is_equal c a 31 1 0 f b 31 1 0 f # 8013 is_equal c a 31 1 0 f b 31 1 0 f # 8014 is_equal c a 31 1 0 f b 31 1 0 1 2 4 6 10 12 17 21 22 23 26 27 28 29 # 8015 is_equal c a 31 1 0 1 5 7 9 10 12 14 16 17 18 21 23 26 27 b 31 1 0 1 5 7 9 10 12 14 16 17 18 21 23 26 27 # 8016 is_equal c a 31 1 0 1 5 7 9 10 12 14 16 17 18 21 23 26 27 b 31 1 0 e # 8017 is_equal c a 31 1 0 2 3 4 5 7 10 11 12 16 18 21 24 25 27 29 b 31 1 0 2 3 4 5 7 10 11 12 16 18 21 24 25 27 29 # 8018 is_equal c a 31 1 0 2 3 4 5 7 10 11 12 16 18 21 24 25 27 29 b 31 1 0 f # 8019 is_equal c a 31 1 0 0 1 3 4 8 14 15 18 19 20 30 b 31 1 0 0 1 3 4 8 14 15 18 19 20 30 # 8020 is_equal c a 31 1 0 0 1 3 4 8 14 15 18 19 20 30 b 31 1 0 3 4 5 8 9 10 15 16 18 22 24 25 26 # 8021 is_equal c a 31 1 0 e b 31 1 0 e # 8022 is_equal c a 31 1 0 e b 31 1 1 e # 8023 is_equal c a 31 1 0 e b 31 1 0 e # 8024 is_equal c a 31 1 0 e b 31 1 1 f # 8025 is_equal c a 31 1 0 e b 31 1 0 e # 8026 is_equal c a 31 1 0 e b 31 1 1 0 2 3 5 6 7 9 10 11 12 13 14 15 16 18 20 21 22 24 25 27 # 8027 is_equal c a 31 1 0 f b 31 1 0 f # 8028 is_equal c a 31 1 0 f b 31 1 1 e # 8029 is_equal c a 31 1 0 f b 31 1 0 f # 8030 is_equal c a 31 1 0 f b 31 1 1 f # 8031 is_equal c a 31 1 0 f b 31 1 0 f # 8032 is_equal c a 31 1 0 f b 31 1 1 1 2 3 5 6 9 11 12 14 15 16 26 28 # 8033 is_equal c a 31 1 0 0 3 4 6 9 13 16 17 18 19 23 27 29 b 31 1 0 0 3 4 6 9 13 16 17 18 19 23 27 29 # 8034 is_equal c a 31 1 0 0 3 4 6 9 13 16 17 18 19 23 27 29 b 31 1 1 e # 8035 is_equal c a 31 1 0 1 2 4 5 7 9 11 15 16 19 20 21 25 26 27 28 29 b 31 1 0 1 2 4 5 7 9 11 15 16 19 20 21 25 26 27 28 29 # 8036 is_equal c a 31 1 0 1 2 4 5 7 9 11 15 16 19 20 21 25 26 27 28 29 b 31 1 1 f # 8037 is_equal c a 31 1 0 1 2 5 6 9 10 14 15 23 26 30 b 31 1 0 1 2 5 6 9 10 14 15 23 26 30 # 8038 is_equal c a 31 1 0 1 2 5 6 9 10 14 15 23 26 30 b 31 1 1 2 3 4 5 6 11 12 14 15 16 19 24 25 26 28 # 8039 is_equal c a 31 1 1 e b 31 1 1 e # 8040 is_equal c a 31 1 1 e b 31 0 0 e # 8041 is_equal c a 31 1 1 e b 31 1 1 e # 8042 is_equal c a 31 1 1 e b 31 0 0 f # 8043 is_equal c a 31 1 1 e b 31 1 1 e # 8044 is_equal c a 31 1 1 e b 31 0 0 1 2 5 7 8 9 10 11 17 21 22 24 29 30 # 8045 is_equal c a 31 1 1 f b 31 1 1 f # 8046 is_equal c a 31 1 1 f b 31 0 0 e # 8047 is_equal c a 31 1 1 f b 31 1 1 f # 8048 is_equal c a 31 1 1 f b 31 0 0 f # 8049 is_equal c a 31 1 1 f b 31 1 1 f # 8050 is_equal c a 31 1 1 f b 31 0 0 0 1 2 6 7 10 12 14 16 18 19 20 21 22 24 26 28 29 30 # 8051 is_equal c a 31 1 1 0 2 4 6 7 8 10 11 14 15 16 19 20 22 24 25 26 28 29 b 31 1 1 0 2 4 6 7 8 10 11 14 15 16 19 20 22 24 25 26 28 29 # 8052 is_equal c a 31 1 1 0 2 4 6 7 8 10 11 14 15 16 19 20 22 24 25 26 28 29 b 31 0 0 e # 8053 is_equal c a 31 1 1 2 3 4 6 7 8 11 12 13 14 16 17 18 19 20 29 30 b 31 1 1 2 3 4 6 7 8 11 12 13 14 16 17 18 19 20 29 30 # 8054 is_equal c a 31 1 1 2 3 4 6 7 8 11 12 13 14 16 17 18 19 20 29 30 b 31 0 0 f # 8055 is_equal c a 31 1 1 0 2 5 7 8 11 14 15 16 17 18 19 20 21 23 25 27 28 b 31 1 1 0 2 5 7 8 11 14 15 16 17 18 19 20 21 23 25 27 28 # 8056 is_equal c a 31 1 1 0 2 5 7 8 11 14 15 16 17 18 19 20 21 23 25 27 28 b 31 0 0 0 4 7 9 14 15 17 18 21 24 26 27 29 # 8057 is_equal c a 31 1 1 e b 31 1 1 e # 8058 is_equal c a 31 1 1 e b 31 0 1 e # 8059 is_equal c a 31 1 1 e b 31 1 1 e # 8060 is_equal c a 31 1 1 e b 31 0 1 f # 8061 is_equal c a 31 1 1 e b 31 1 1 e # 8062 is_equal c a 31 1 1 e b 31 0 1 0 5 6 7 8 9 12 13 15 17 18 22 23 26 29 # 8063 is_equal c a 31 1 1 f b 31 1 1 f # 8064 is_equal c a 31 1 1 f b 31 0 1 e # 8065 is_equal c a 31 1 1 f b 31 1 1 f # 8066 is_equal c a 31 1 1 f b 31 0 1 f # 8067 is_equal c a 31 1 1 f b 31 1 1 f # 8068 is_equal c a 31 1 1 f b 31 0 1 2 3 5 8 10 11 16 18 20 23 24 28 30 # 8069 is_equal c a 31 1 1 2 4 6 9 13 17 19 21 22 24 26 29 30 b 31 1 1 2 4 6 9 13 17 19 21 22 24 26 29 30 # 8070 is_equal c a 31 1 1 2 4 6 9 13 17 19 21 22 24 26 29 30 b 31 0 1 e # 8071 is_equal c a 31 1 1 0 2 6 7 9 11 13 15 17 23 25 b 31 1 1 0 2 6 7 9 11 13 15 17 23 25 # 8072 is_equal c a 31 1 1 0 2 6 7 9 11 13 15 17 23 25 b 31 0 1 f # 8073 is_equal c a 31 1 1 1 8 10 11 12 13 14 17 18 21 22 26 27 28 b 31 1 1 1 8 10 11 12 13 14 17 18 21 22 26 27 28 # 8074 is_equal c a 31 1 1 1 8 10 11 12 13 14 17 18 21 22 26 27 28 b 31 0 1 0 4 5 6 8 10 11 13 14 15 16 17 24 25 30 # 8075 is_equal c a 31 1 1 e b 31 1 1 e # 8076 is_equal c a 31 1 1 e b 31 1 0 e # 8077 is_equal c a 31 1 1 e b 31 1 1 e # 8078 is_equal c a 31 1 1 e b 31 1 0 f # 8079 is_equal c a 31 1 1 e b 31 1 1 e # 8080 is_equal c a 31 1 1 e b 31 1 0 1 3 6 7 10 11 12 14 18 19 20 25 27 29 # 8081 is_equal c a 31 1 1 f b 31 1 1 f # 8082 is_equal c a 31 1 1 f b 31 1 0 e # 8083 is_equal c a 31 1 1 f b 31 1 1 f # 8084 is_equal c a 31 1 1 f b 31 1 0 f # 8085 is_equal c a 31 1 1 f b 31 1 1 f # 8086 is_equal c a 31 1 1 f b 31 1 0 0 1 2 3 5 6 7 10 14 15 16 18 19 22 25 26 29 30 # 8087 is_equal c a 31 1 1 1 4 7 8 9 10 11 13 14 15 16 18 20 21 27 28 b 31 1 1 1 4 7 8 9 10 11 13 14 15 16 18 20 21 27 28 # 8088 is_equal c a 31 1 1 1 4 7 8 9 10 11 13 14 15 16 18 20 21 27 28 b 31 1 0 e # 8089 is_equal c a 31 1 1 1 2 3 4 7 10 12 13 15 17 19 23 24 25 26 27 28 b 31 1 1 1 2 3 4 7 10 12 13 15 17 19 23 24 25 26 27 28 # 8090 is_equal c a 31 1 1 1 2 3 4 7 10 12 13 15 17 19 23 24 25 26 27 28 b 31 1 0 f # 8091 is_equal c a 31 1 1 5 6 8 10 13 15 20 21 22 24 25 27 28 29 30 b 31 1 1 5 6 8 10 13 15 20 21 22 24 25 27 28 29 30 # 8092 is_equal c a 31 1 1 5 6 8 10 13 15 20 21 22 24 25 27 28 29 30 b 31 1 0 1 3 5 6 8 14 17 18 19 20 21 24 26 27 28 30 # 8093 is_equal c a 31 1 1 e b 31 1 1 e # 8094 is_equal c a 31 1 1 e b 31 1 1 e # 8095 is_equal c a 31 1 1 e b 31 1 1 e # 8096 is_equal c a 31 1 1 e b 31 1 1 f # 8097 is_equal c a 31 1 1 e b 31 1 1 e # 8098 is_equal c a 31 1 1 e b 31 1 1 2 3 4 5 6 8 9 10 13 14 15 17 18 20 21 22 23 24 25 26 27 28 # 8099 is_equal c a 31 1 1 f b 31 1 1 f # 8100 is_equal c a 31 1 1 f b 31 1 1 e # 8101 is_equal c a 31 1 1 f b 31 1 1 f # 8102 is_equal c a 31 1 1 f b 31 1 1 f # 8103 is_equal c a 31 1 1 f b 31 1 1 f # 8104 is_equal c a 31 1 1 f b 31 1 1 1 6 7 9 11 14 16 17 22 25 28 30 # 8105 is_equal c a 31 1 1 4 5 10 11 12 14 18 19 20 22 24 25 26 28 30 b 31 1 1 4 5 10 11 12 14 18 19 20 22 24 25 26 28 30 # 8106 is_equal c a 31 1 1 4 5 10 11 12 14 18 19 20 22 24 25 26 28 30 b 31 1 1 e # 8107 is_equal c a 31 1 1 0 5 6 7 10 14 15 16 18 23 25 26 27 28 29 30 b 31 1 1 0 5 6 7 10 14 15 16 18 23 25 26 27 28 29 30 # 8108 is_equal c a 31 1 1 0 5 6 7 10 14 15 16 18 23 25 26 27 28 29 30 b 31 1 1 f # 8109 is_equal c a 31 1 1 0 2 4 5 9 17 19 21 22 25 27 28 30 b 31 1 1 0 2 4 5 9 17 19 21 22 25 27 28 30 # 8110 is_equal c a 31 1 1 0 2 4 5 9 17 19 21 22 25 27 28 30 b 31 1 1 1 2 3 5 6 7 8 9 12 13 14 16 17 19 22 23 25 # 8111 is_equal c a 32 0 0 e b 32 0 0 e # 8112 is_equal c a 32 0 0 e b 32 0 0 e # 8113 is_equal c a 32 0 0 e b 32 0 0 e # 8114 is_equal c a 32 0 0 e b 32 0 0 f # 8115 is_equal c a 32 0 0 e b 32 0 0 e # 8116 is_equal c a 32 0 0 e b 32 0 0 0 2 3 4 5 6 7 8 10 13 15 16 20 23 24 25 26 30 # 8117 is_equal c a 32 0 0 f b 32 0 0 f # 8118 is_equal c a 32 0 0 f b 32 0 0 e # 8119 is_equal c a 32 0 0 f b 32 0 0 f # 8120 is_equal c a 32 0 0 f b 32 0 0 f # 8121 is_equal c a 32 0 0 f b 32 0 0 f # 8122 is_equal c a 32 0 0 f b 32 0 0 0 1 5 11 12 13 14 15 16 17 19 26 27 28 29 31 # 8123 is_equal c a 32 0 0 1 3 4 8 9 11 13 16 17 21 22 23 25 26 28 30 b 32 0 0 1 3 4 8 9 11 13 16 17 21 22 23 25 26 28 30 # 8124 is_equal c a 32 0 0 1 3 4 8 9 11 13 16 17 21 22 23 25 26 28 30 b 32 0 0 e # 8125 is_equal c a 32 0 0 0 3 4 6 11 13 18 19 21 24 26 29 30 b 32 0 0 0 3 4 6 11 13 18 19 21 24 26 29 30 # 8126 is_equal c a 32 0 0 0 3 4 6 11 13 18 19 21 24 26 29 30 b 32 0 0 f # 8127 is_equal c a 32 0 0 0 1 3 7 11 13 14 15 17 21 22 25 26 27 b 32 0 0 0 1 3 7 11 13 14 15 17 21 22 25 26 27 # 8128 is_equal c a 32 0 0 0 1 3 7 11 13 14 15 17 21 22 25 26 27 b 32 0 0 3 4 6 8 10 12 13 14 16 18 21 23 27 28 29 # 8129 is_equal c a 32 0 0 e b 32 0 0 e # 8130 is_equal c a 32 0 0 e b 32 0 1 e # 8131 is_equal c a 32 0 0 e b 32 0 0 e # 8132 is_equal c a 32 0 0 e b 32 0 1 f # 8133 is_equal c a 32 0 0 e b 32 0 0 e # 8134 is_equal c a 32 0 0 e b 32 0 1 1 3 5 15 16 20 21 24 25 27 29 30 31 # 8135 is_equal c a 32 0 0 f b 32 0 0 f # 8136 is_equal c a 32 0 0 f b 32 0 1 e # 8137 is_equal c a 32 0 0 f b 32 0 0 f # 8138 is_equal c a 32 0 0 f b 32 0 1 f # 8139 is_equal c a 32 0 0 f b 32 0 0 f # 8140 is_equal c a 32 0 0 f b 32 0 1 0 2 3 5 9 10 17 18 21 22 24 30 # 8141 is_equal c a 32 0 0 1 3 4 7 9 13 14 15 16 22 24 25 31 b 32 0 0 1 3 4 7 9 13 14 15 16 22 24 25 31 # 8142 is_equal c a 32 0 0 1 3 4 7 9 13 14 15 16 22 24 25 31 b 32 0 1 e # 8143 is_equal c a 32 0 0 1 3 5 6 8 10 11 13 14 17 19 22 23 28 29 b 32 0 0 1 3 5 6 8 10 11 13 14 17 19 22 23 28 29 # 8144 is_equal c a 32 0 0 1 3 5 6 8 10 11 13 14 17 19 22 23 28 29 b 32 0 1 f # 8145 is_equal c a 32 0 0 1 3 8 12 13 16 17 18 21 26 30 31 b 32 0 0 1 3 8 12 13 16 17 18 21 26 30 31 # 8146 is_equal c a 32 0 0 1 3 8 12 13 16 17 18 21 26 30 31 b 32 0 1 0 1 5 6 7 8 9 11 12 13 15 16 19 23 24 28 29 30 31 # 8147 is_equal c a 32 0 0 e b 32 0 0 e # 8148 is_equal c a 32 0 0 e b 32 1 0 e # 8149 is_equal c a 32 0 0 e b 32 0 0 e # 8150 is_equal c a 32 0 0 e b 32 1 0 f # 8151 is_equal c a 32 0 0 e b 32 0 0 e # 8152 is_equal c a 32 0 0 e b 32 1 0 0 5 8 11 14 15 16 18 19 20 22 23 24 25 26 27 28 29 31 # 8153 is_equal c a 32 0 0 f b 32 0 0 f # 8154 is_equal c a 32 0 0 f b 32 1 0 e # 8155 is_equal c a 32 0 0 f b 32 0 0 f # 8156 is_equal c a 32 0 0 f b 32 1 0 f # 8157 is_equal c a 32 0 0 f b 32 0 0 f # 8158 is_equal c a 32 0 0 f b 32 1 0 1 3 4 6 7 8 10 12 13 16 19 20 23 29 31 # 8159 is_equal c a 32 0 0 0 2 4 5 7 8 9 11 12 15 16 17 20 21 25 27 28 29 30 b 32 0 0 0 2 4 5 7 8 9 11 12 15 16 17 20 21 25 27 28 29 30 # 8160 is_equal c a 32 0 0 0 2 4 5 7 8 9 11 12 15 16 17 20 21 25 27 28 29 30 b 32 1 0 e # 8161 is_equal c a 32 0 0 1 2 11 12 14 15 23 25 26 27 28 29 31 b 32 0 0 1 2 11 12 14 15 23 25 26 27 28 29 31 # 8162 is_equal c a 32 0 0 1 2 11 12 14 15 23 25 26 27 28 29 31 b 32 1 0 f # 8163 is_equal c a 32 0 0 3 4 7 8 9 10 11 13 14 16 17 18 22 23 25 26 27 30 31 b 32 0 0 3 4 7 8 9 10 11 13 14 16 17 18 22 23 25 26 27 30 31 # 8164 is_equal c a 32 0 0 3 4 7 8 9 10 11 13 14 16 17 18 22 23 25 26 27 30 31 b 32 1 0 0 2 4 7 10 14 17 19 20 22 27 28 30 # 8165 is_equal c a 32 0 0 e b 32 0 0 e # 8166 is_equal c a 32 0 0 e b 32 1 1 e # 8167 is_equal c a 32 0 0 e b 32 0 0 e # 8168 is_equal c a 32 0 0 e b 32 1 1 f # 8169 is_equal c a 32 0 0 e b 32 0 0 e # 8170 is_equal c a 32 0 0 e b 32 1 1 1 2 6 8 9 10 13 15 16 17 18 19 22 23 24 27 31 # 8171 is_equal c a 32 0 0 f b 32 0 0 f # 8172 is_equal c a 32 0 0 f b 32 1 1 e # 8173 is_equal c a 32 0 0 f b 32 0 0 f # 8174 is_equal c a 32 0 0 f b 32 1 1 f # 8175 is_equal c a 32 0 0 f b 32 0 0 f # 8176 is_equal c a 32 0 0 f b 32 1 1 0 4 6 7 8 9 10 12 14 17 19 22 26 27 30 # 8177 is_equal c a 32 0 0 2 6 9 10 11 13 15 17 18 19 20 21 22 24 25 30 31 b 32 0 0 2 6 9 10 11 13 15 17 18 19 20 21 22 24 25 30 31 # 8178 is_equal c a 32 0 0 2 6 9 10 11 13 15 17 18 19 20 21 22 24 25 30 31 b 32 1 1 e # 8179 is_equal c a 32 0 0 0 1 2 5 6 8 13 15 16 19 25 26 27 29 31 b 32 0 0 0 1 2 5 6 8 13 15 16 19 25 26 27 29 31 # 8180 is_equal c a 32 0 0 0 1 2 5 6 8 13 15 16 19 25 26 27 29 31 b 32 1 1 f # 8181 is_equal c a 32 0 0 3 5 9 10 11 12 16 17 23 26 28 b 32 0 0 3 5 9 10 11 12 16 17 23 26 28 # 8182 is_equal c a 32 0 0 3 5 9 10 11 12 16 17 23 26 28 b 32 1 1 0 1 4 6 9 10 11 17 19 21 22 25 26 28 30 31 # 8183 is_equal c a 32 0 1 e b 32 0 1 e # 8184 is_equal c a 32 0 1 e b 32 0 0 e # 8185 is_equal c a 32 0 1 e b 32 0 1 e # 8186 is_equal c a 32 0 1 e b 32 0 0 f # 8187 is_equal c a 32 0 1 e b 32 0 1 e # 8188 is_equal c a 32 0 1 e b 32 0 0 1 2 3 5 7 10 11 12 14 16 22 23 24 25 26 27 29 30 # 8189 is_equal c a 32 0 1 f b 32 0 1 f # 8190 is_equal c a 32 0 1 f b 32 0 0 e # 8191 is_equal c a 32 0 1 f b 32 0 1 f # 8192 is_equal c a 32 0 1 f b 32 0 0 f # 8193 is_equal c a 32 0 1 f b 32 0 1 f # 8194 is_equal c a 32 0 1 f b 32 0 0 0 1 5 6 7 8 9 10 11 12 13 14 15 19 21 24 27 31 # 8195 is_equal c a 32 0 1 0 1 4 7 8 11 12 14 16 18 22 23 24 26 b 32 0 1 0 1 4 7 8 11 12 14 16 18 22 23 24 26 # 8196 is_equal c a 32 0 1 0 1 4 7 8 11 12 14 16 18 22 23 24 26 b 32 0 0 e # 8197 is_equal c a 32 0 1 2 4 6 7 8 10 11 12 13 14 15 16 17 18 21 24 26 28 29 30 b 32 0 1 2 4 6 7 8 10 11 12 13 14 15 16 17 18 21 24 26 28 29 30 # 8198 is_equal c a 32 0 1 2 4 6 7 8 10 11 12 13 14 15 16 17 18 21 24 26 28 29 30 b 32 0 0 f # 8199 is_equal c a 32 0 1 1 6 8 9 10 11 13 14 16 17 18 21 22 25 26 27 28 29 b 32 0 1 1 6 8 9 10 11 13 14 16 17 18 21 22 25 26 27 28 29 # 8200 is_equal c a 32 0 1 1 6 8 9 10 11 13 14 16 17 18 21 22 25 26 27 28 29 b 32 0 0 0 1 6 9 11 12 13 15 16 17 20 22 24 25 27 28 30 31 # 8201 is_equal c a 32 0 1 e b 32 0 1 e # 8202 is_equal c a 32 0 1 e b 32 0 1 e # 8203 is_equal c a 32 0 1 e b 32 0 1 e # 8204 is_equal c a 32 0 1 e b 32 0 1 f # 8205 is_equal c a 32 0 1 e b 32 0 1 e # 8206 is_equal c a 32 0 1 e b 32 0 1 4 5 6 8 9 10 12 15 18 20 21 23 25 30 # 8207 is_equal c a 32 0 1 f b 32 0 1 f # 8208 is_equal c a 32 0 1 f b 32 0 1 e # 8209 is_equal c a 32 0 1 f b 32 0 1 f # 8210 is_equal c a 32 0 1 f b 32 0 1 f # 8211 is_equal c a 32 0 1 f b 32 0 1 f # 8212 is_equal c a 32 0 1 f b 32 0 1 0 2 3 5 7 8 11 13 15 18 19 22 23 26 28 29 30 31 # 8213 is_equal c a 32 0 1 1 2 4 5 9 11 12 13 15 18 20 21 24 26 27 29 b 32 0 1 1 2 4 5 9 11 12 13 15 18 20 21 24 26 27 29 # 8214 is_equal c a 32 0 1 1 2 4 5 9 11 12 13 15 18 20 21 24 26 27 29 b 32 0 1 e # 8215 is_equal c a 32 0 1 0 2 6 12 13 18 20 21 23 26 28 30 31 b 32 0 1 0 2 6 12 13 18 20 21 23 26 28 30 31 # 8216 is_equal c a 32 0 1 0 2 6 12 13 18 20 21 23 26 28 30 31 b 32 0 1 f # 8217 is_equal c a 32 0 1 1 3 7 14 16 18 19 22 23 28 b 32 0 1 1 3 7 14 16 18 19 22 23 28 # 8218 is_equal c a 32 0 1 1 3 7 14 16 18 19 22 23 28 b 32 0 1 2 3 4 6 8 9 10 11 16 18 21 23 27 28 29 31 # 8219 is_equal c a 32 0 1 e b 32 0 1 e # 8220 is_equal c a 32 0 1 e b 32 1 0 e # 8221 is_equal c a 32 0 1 e b 32 0 1 e # 8222 is_equal c a 32 0 1 e b 32 1 0 f # 8223 is_equal c a 32 0 1 e b 32 0 1 e # 8224 is_equal c a 32 0 1 e b 32 1 0 2 3 9 11 13 16 18 20 24 25 28 31 # 8225 is_equal c a 32 0 1 f b 32 0 1 f # 8226 is_equal c a 32 0 1 f b 32 1 0 e # 8227 is_equal c a 32 0 1 f b 32 0 1 f # 8228 is_equal c a 32 0 1 f b 32 1 0 f # 8229 is_equal c a 32 0 1 f b 32 0 1 f # 8230 is_equal c a 32 0 1 f b 32 1 0 0 2 4 9 11 16 18 19 22 26 28 # 8231 is_equal c a 32 0 1 2 7 8 9 13 14 15 16 17 18 21 22 23 24 27 28 b 32 0 1 2 7 8 9 13 14 15 16 17 18 21 22 23 24 27 28 # 8232 is_equal c a 32 0 1 2 7 8 9 13 14 15 16 17 18 21 22 23 24 27 28 b 32 1 0 e # 8233 is_equal c a 32 0 1 0 1 5 6 8 10 11 13 14 16 17 18 24 27 28 30 31 b 32 0 1 0 1 5 6 8 10 11 13 14 16 17 18 24 27 28 30 31 # 8234 is_equal c a 32 0 1 0 1 5 6 8 10 11 13 14 16 17 18 24 27 28 30 31 b 32 1 0 f # 8235 is_equal c a 32 0 1 2 3 5 6 9 11 14 16 17 21 22 26 28 29 30 b 32 0 1 2 3 5 6 9 11 14 16 17 21 22 26 28 29 30 # 8236 is_equal c a 32 0 1 2 3 5 6 9 11 14 16 17 21 22 26 28 29 30 b 32 1 0 1 2 3 4 5 8 12 15 16 17 20 23 31 # 8237 is_equal c a 32 0 1 e b 32 0 1 e # 8238 is_equal c a 32 0 1 e b 32 1 1 e # 8239 is_equal c a 32 0 1 e b 32 0 1 e # 8240 is_equal c a 32 0 1 e b 32 1 1 f # 8241 is_equal c a 32 0 1 e b 32 0 1 e # 8242 is_equal c a 32 0 1 e b 32 1 1 2 6 8 9 13 16 19 20 21 22 25 27 29 30 # 8243 is_equal c a 32 0 1 f b 32 0 1 f # 8244 is_equal c a 32 0 1 f b 32 1 1 e # 8245 is_equal c a 32 0 1 f b 32 0 1 f # 8246 is_equal c a 32 0 1 f b 32 1 1 f # 8247 is_equal c a 32 0 1 f b 32 0 1 f # 8248 is_equal c a 32 0 1 f b 32 1 1 1 2 3 7 9 11 12 13 14 15 19 23 25 26 28 29 30 # 8249 is_equal c a 32 0 1 0 1 7 9 11 14 15 16 18 21 23 24 30 b 32 0 1 0 1 7 9 11 14 15 16 18 21 23 24 30 # 8250 is_equal c a 32 0 1 0 1 7 9 11 14 15 16 18 21 23 24 30 b 32 1 1 e # 8251 is_equal c a 32 0 1 0 1 2 5 6 7 8 10 12 14 15 16 17 20 21 22 26 27 29 b 32 0 1 0 1 2 5 6 7 8 10 12 14 15 16 17 20 21 22 26 27 29 # 8252 is_equal c a 32 0 1 0 1 2 5 6 7 8 10 12 14 15 16 17 20 21 22 26 27 29 b 32 1 1 f # 8253 is_equal c a 32 0 1 0 2 5 6 7 9 15 16 17 19 20 27 28 29 31 b 32 0 1 0 2 5 6 7 9 15 16 17 19 20 27 28 29 31 # 8254 is_equal c a 32 0 1 0 2 5 6 7 9 15 16 17 19 20 27 28 29 31 b 32 1 1 0 2 4 5 8 11 12 13 14 15 21 23 24 25 26 27 30 # 8255 is_equal c a 32 1 0 e b 32 1 0 e # 8256 is_equal c a 32 1 0 e b 32 0 0 e # 8257 is_equal c a 32 1 0 e b 32 1 0 e # 8258 is_equal c a 32 1 0 e b 32 0 0 f # 8259 is_equal c a 32 1 0 e b 32 1 0 e # 8260 is_equal c a 32 1 0 e b 32 0 0 0 1 2 3 4 5 6 14 15 16 18 27 28 29 # 8261 is_equal c a 32 1 0 f b 32 1 0 f # 8262 is_equal c a 32 1 0 f b 32 0 0 e # 8263 is_equal c a 32 1 0 f b 32 1 0 f # 8264 is_equal c a 32 1 0 f b 32 0 0 f # 8265 is_equal c a 32 1 0 f b 32 1 0 f # 8266 is_equal c a 32 1 0 f b 32 0 0 0 1 4 6 8 10 11 12 13 14 15 17 18 22 25 28 30 31 # 8267 is_equal c a 32 1 0 1 6 7 8 9 10 11 13 15 19 20 21 24 27 28 30 b 32 1 0 1 6 7 8 9 10 11 13 15 19 20 21 24 27 28 30 # 8268 is_equal c a 32 1 0 1 6 7 8 9 10 11 13 15 19 20 21 24 27 28 30 b 32 0 0 e # 8269 is_equal c a 32 1 0 1 2 5 7 8 10 14 15 16 21 22 29 30 31 b 32 1 0 1 2 5 7 8 10 14 15 16 21 22 29 30 31 # 8270 is_equal c a 32 1 0 1 2 5 7 8 10 14 15 16 21 22 29 30 31 b 32 0 0 f # 8271 is_equal c a 32 1 0 0 1 4 5 9 10 13 15 16 17 23 25 26 27 28 29 30 31 b 32 1 0 0 1 4 5 9 10 13 15 16 17 23 25 26 27 28 29 30 31 # 8272 is_equal c a 32 1 0 0 1 4 5 9 10 13 15 16 17 23 25 26 27 28 29 30 31 b 32 0 0 1 2 4 6 7 13 17 19 21 22 23 24 25 26 31 # 8273 is_equal c a 32 1 0 e b 32 1 0 e # 8274 is_equal c a 32 1 0 e b 32 0 1 e # 8275 is_equal c a 32 1 0 e b 32 1 0 e # 8276 is_equal c a 32 1 0 e b 32 0 1 f # 8277 is_equal c a 32 1 0 e b 32 1 0 e # 8278 is_equal c a 32 1 0 e b 32 0 1 5 7 9 11 13 14 15 16 18 19 21 22 26 27 28 29 30 # 8279 is_equal c a 32 1 0 f b 32 1 0 f # 8280 is_equal c a 32 1 0 f b 32 0 1 e # 8281 is_equal c a 32 1 0 f b 32 1 0 f # 8282 is_equal c a 32 1 0 f b 32 0 1 f # 8283 is_equal c a 32 1 0 f b 32 1 0 f # 8284 is_equal c a 32 1 0 f b 32 0 1 2 3 5 7 8 9 16 20 21 22 30 31 # 8285 is_equal c a 32 1 0 0 1 3 4 5 6 8 10 12 13 15 17 20 21 22 26 27 28 29 30 b 32 1 0 0 1 3 4 5 6 8 10 12 13 15 17 20 21 22 26 27 28 29 30 # 8286 is_equal c a 32 1 0 0 1 3 4 5 6 8 10 12 13 15 17 20 21 22 26 27 28 29 30 b 32 0 1 e # 8287 is_equal c a 32 1 0 6 7 13 14 15 18 21 23 24 26 27 28 b 32 1 0 6 7 13 14 15 18 21 23 24 26 27 28 # 8288 is_equal c a 32 1 0 6 7 13 14 15 18 21 23 24 26 27 28 b 32 0 1 f # 8289 is_equal c a 32 1 0 0 1 2 3 4 6 8 10 12 13 16 18 20 22 23 25 26 29 30 31 b 32 1 0 0 1 2 3 4 6 8 10 12 13 16 18 20 22 23 25 26 29 30 31 # 8290 is_equal c a 32 1 0 0 1 2 3 4 6 8 10 12 13 16 18 20 22 23 25 26 29 30 31 b 32 0 1 0 1 2 3 5 9 10 12 13 14 15 18 20 21 24 25 26 27 28 29 30 31 # 8291 is_equal c a 32 1 0 e b 32 1 0 e # 8292 is_equal c a 32 1 0 e b 32 1 0 e # 8293 is_equal c a 32 1 0 e b 32 1 0 e # 8294 is_equal c a 32 1 0 e b 32 1 0 f # 8295 is_equal c a 32 1 0 e b 32 1 0 e # 8296 is_equal c a 32 1 0 e b 32 1 0 1 3 4 5 6 8 9 12 15 16 22 23 26 29 31 # 8297 is_equal c a 32 1 0 f b 32 1 0 f # 8298 is_equal c a 32 1 0 f b 32 1 0 e # 8299 is_equal c a 32 1 0 f b 32 1 0 f # 8300 is_equal c a 32 1 0 f b 32 1 0 f # 8301 is_equal c a 32 1 0 f b 32 1 0 f # 8302 is_equal c a 32 1 0 f b 32 1 0 0 1 3 9 10 11 12 13 14 15 20 21 26 27 29 # 8303 is_equal c a 32 1 0 0 1 5 7 10 13 16 18 19 22 23 24 25 26 28 30 b 32 1 0 0 1 5 7 10 13 16 18 19 22 23 24 25 26 28 30 # 8304 is_equal c a 32 1 0 0 1 5 7 10 13 16 18 19 22 23 24 25 26 28 30 b 32 1 0 e # 8305 is_equal c a 32 1 0 2 3 7 11 12 15 16 18 20 21 23 30 31 b 32 1 0 2 3 7 11 12 15 16 18 20 21 23 30 31 # 8306 is_equal c a 32 1 0 2 3 7 11 12 15 16 18 20 21 23 30 31 b 32 1 0 f # 8307 is_equal c a 32 1 0 0 3 4 5 6 9 10 17 18 20 22 24 30 b 32 1 0 0 3 4 5 6 9 10 17 18 20 22 24 30 # 8308 is_equal c a 32 1 0 0 3 4 5 6 9 10 17 18 20 22 24 30 b 32 1 0 0 5 6 7 8 9 10 12 14 17 18 19 21 24 25 28 30 31 # 8309 is_equal c a 32 1 0 e b 32 1 0 e # 8310 is_equal c a 32 1 0 e b 32 1 1 e # 8311 is_equal c a 32 1 0 e b 32 1 0 e # 8312 is_equal c a 32 1 0 e b 32 1 1 f # 8313 is_equal c a 32 1 0 e b 32 1 0 e # 8314 is_equal c a 32 1 0 e b 32 1 1 0 1 4 5 7 8 11 15 17 18 19 20 21 23 24 25 27 29 # 8315 is_equal c a 32 1 0 f b 32 1 0 f # 8316 is_equal c a 32 1 0 f b 32 1 1 e # 8317 is_equal c a 32 1 0 f b 32 1 0 f # 8318 is_equal c a 32 1 0 f b 32 1 1 f # 8319 is_equal c a 32 1 0 f b 32 1 0 f # 8320 is_equal c a 32 1 0 f b 32 1 1 0 1 2 3 4 5 6 11 12 21 22 23 26 27 30 # 8321 is_equal c a 32 1 0 0 1 3 4 7 8 10 11 12 17 18 19 21 22 23 24 26 28 29 31 b 32 1 0 0 1 3 4 7 8 10 11 12 17 18 19 21 22 23 24 26 28 29 31 # 8322 is_equal c a 32 1 0 0 1 3 4 7 8 10 11 12 17 18 19 21 22 23 24 26 28 29 31 b 32 1 1 e # 8323 is_equal c a 32 1 0 1 4 5 7 9 13 14 15 19 22 24 25 29 31 b 32 1 0 1 4 5 7 9 13 14 15 19 22 24 25 29 31 # 8324 is_equal c a 32 1 0 1 4 5 7 9 13 14 15 19 22 24 25 29 31 b 32 1 1 f # 8325 is_equal c a 32 1 0 0 1 3 7 9 10 11 12 13 17 22 23 24 29 31 b 32 1 0 0 1 3 7 9 10 11 12 13 17 22 23 24 29 31 # 8326 is_equal c a 32 1 0 0 1 3 7 9 10 11 12 13 17 22 23 24 29 31 b 32 1 1 1 2 3 6 7 9 11 13 15 16 20 21 23 25 29 31 # 8327 is_equal c a 32 1 1 e b 32 1 1 e # 8328 is_equal c a 32 1 1 e b 32 0 0 e # 8329 is_equal c a 32 1 1 e b 32 1 1 e # 8330 is_equal c a 32 1 1 e b 32 0 0 f # 8331 is_equal c a 32 1 1 e b 32 1 1 e # 8332 is_equal c a 32 1 1 e b 32 0 0 2 3 5 7 9 10 11 12 13 14 15 17 20 22 26 27 28 30 # 8333 is_equal c a 32 1 1 f b 32 1 1 f # 8334 is_equal c a 32 1 1 f b 32 0 0 e # 8335 is_equal c a 32 1 1 f b 32 1 1 f # 8336 is_equal c a 32 1 1 f b 32 0 0 f # 8337 is_equal c a 32 1 1 f b 32 1 1 f # 8338 is_equal c a 32 1 1 f b 32 0 0 1 3 5 6 7 8 10 11 13 14 15 16 17 19 22 23 25 28 30 # 8339 is_equal c a 32 1 1 0 4 7 8 15 18 19 20 21 25 26 29 30 b 32 1 1 0 4 7 8 15 18 19 20 21 25 26 29 30 # 8340 is_equal c a 32 1 1 0 4 7 8 15 18 19 20 21 25 26 29 30 b 32 0 0 e # 8341 is_equal c a 32 1 1 0 2 3 4 6 8 10 11 13 14 15 17 21 23 24 28 31 b 32 1 1 0 2 3 4 6 8 10 11 13 14 15 17 21 23 24 28 31 # 8342 is_equal c a 32 1 1 0 2 3 4 6 8 10 11 13 14 15 17 21 23 24 28 31 b 32 0 0 f # 8343 is_equal c a 32 1 1 0 2 3 5 8 9 12 16 17 18 20 23 25 26 b 32 1 1 0 2 3 5 8 9 12 16 17 18 20 23 25 26 # 8344 is_equal c a 32 1 1 0 2 3 5 8 9 12 16 17 18 20 23 25 26 b 32 0 0 0 9 10 12 13 14 15 16 17 20 21 24 26 28 30 # 8345 is_equal c a 32 1 1 e b 32 1 1 e # 8346 is_equal c a 32 1 1 e b 32 0 1 e # 8347 is_equal c a 32 1 1 e b 32 1 1 e # 8348 is_equal c a 32 1 1 e b 32 0 1 f # 8349 is_equal c a 32 1 1 e b 32 1 1 e # 8350 is_equal c a 32 1 1 e b 32 0 1 0 2 4 8 10 11 13 14 15 21 22 24 25 26 27 29 # 8351 is_equal c a 32 1 1 f b 32 1 1 f # 8352 is_equal c a 32 1 1 f b 32 0 1 e # 8353 is_equal c a 32 1 1 f b 32 1 1 f # 8354 is_equal c a 32 1 1 f b 32 0 1 f # 8355 is_equal c a 32 1 1 f b 32 1 1 f # 8356 is_equal c a 32 1 1 f b 32 0 1 1 2 3 9 11 12 14 16 18 20 21 22 23 24 25 26 28 29 30 31 # 8357 is_equal c a 32 1 1 0 2 4 9 10 11 12 13 15 16 17 18 19 20 21 22 25 26 28 31 b 32 1 1 0 2 4 9 10 11 12 13 15 16 17 18 19 20 21 22 25 26 28 31 # 8358 is_equal c a 32 1 1 0 2 4 9 10 11 12 13 15 16 17 18 19 20 21 22 25 26 28 31 b 32 0 1 e # 8359 is_equal c a 32 1 1 0 2 3 6 7 9 10 12 13 14 15 16 17 18 19 20 21 25 29 30 b 32 1 1 0 2 3 6 7 9 10 12 13 14 15 16 17 18 19 20 21 25 29 30 # 8360 is_equal c a 32 1 1 0 2 3 6 7 9 10 12 13 14 15 16 17 18 19 20 21 25 29 30 b 32 0 1 f # 8361 is_equal c a 32 1 1 0 1 7 9 10 11 12 13 14 15 16 18 19 21 22 23 24 26 29 30 b 32 1 1 0 1 7 9 10 11 12 13 14 15 16 18 19 21 22 23 24 26 29 30 # 8362 is_equal c a 32 1 1 0 1 7 9 10 11 12 13 14 15 16 18 19 21 22 23 24 26 29 30 b 32 0 1 0 2 5 7 8 10 11 14 16 17 18 20 21 22 23 25 27 28 30 31 # 8363 is_equal c a 32 1 1 e b 32 1 1 e # 8364 is_equal c a 32 1 1 e b 32 1 0 e # 8365 is_equal c a 32 1 1 e b 32 1 1 e # 8366 is_equal c a 32 1 1 e b 32 1 0 f # 8367 is_equal c a 32 1 1 e b 32 1 1 e # 8368 is_equal c a 32 1 1 e b 32 1 0 1 3 4 5 6 7 8 10 12 13 15 22 23 26 29 31 # 8369 is_equal c a 32 1 1 f b 32 1 1 f # 8370 is_equal c a 32 1 1 f b 32 1 0 e # 8371 is_equal c a 32 1 1 f b 32 1 1 f # 8372 is_equal c a 32 1 1 f b 32 1 0 f # 8373 is_equal c a 32 1 1 f b 32 1 1 f # 8374 is_equal c a 32 1 1 f b 32 1 0 1 2 5 6 9 10 15 16 20 23 25 27 28 30 # 8375 is_equal c a 32 1 1 1 3 4 7 9 11 14 15 16 17 19 22 23 25 26 29 31 b 32 1 1 1 3 4 7 9 11 14 15 16 17 19 22 23 25 26 29 31 # 8376 is_equal c a 32 1 1 1 3 4 7 9 11 14 15 16 17 19 22 23 25 26 29 31 b 32 1 0 e # 8377 is_equal c a 32 1 1 0 1 5 7 8 9 11 14 18 20 21 24 25 28 29 30 b 32 1 1 0 1 5 7 8 9 11 14 18 20 21 24 25 28 29 30 # 8378 is_equal c a 32 1 1 0 1 5 7 8 9 11 14 18 20 21 24 25 28 29 30 b 32 1 0 f # 8379 is_equal c a 32 1 1 0 2 7 9 10 12 13 14 17 18 19 21 24 25 27 28 31 b 32 1 1 0 2 7 9 10 12 13 14 17 18 19 21 24 25 27 28 31 # 8380 is_equal c a 32 1 1 0 2 7 9 10 12 13 14 17 18 19 21 24 25 27 28 31 b 32 1 0 0 4 7 16 21 22 26 28 30 31 # 8381 is_equal c a 32 1 1 e b 32 1 1 e # 8382 is_equal c a 32 1 1 e b 32 1 1 e # 8383 is_equal c a 32 1 1 e b 32 1 1 e # 8384 is_equal c a 32 1 1 e b 32 1 1 f # 8385 is_equal c a 32 1 1 e b 32 1 1 e # 8386 is_equal c a 32 1 1 e b 32 1 1 2 4 7 9 11 12 13 15 16 17 23 28 30 # 8387 is_equal c a 32 1 1 f b 32 1 1 f # 8388 is_equal c a 32 1 1 f b 32 1 1 e # 8389 is_equal c a 32 1 1 f b 32 1 1 f # 8390 is_equal c a 32 1 1 f b 32 1 1 f # 8391 is_equal c a 32 1 1 f b 32 1 1 f # 8392 is_equal c a 32 1 1 f b 32 1 1 1 5 7 13 17 19 21 22 23 26 29 31 # 8393 is_equal c a 32 1 1 0 1 4 6 8 10 15 17 18 20 21 24 26 b 32 1 1 0 1 4 6 8 10 15 17 18 20 21 24 26 # 8394 is_equal c a 32 1 1 0 1 4 6 8 10 15 17 18 20 21 24 26 b 32 1 1 e # 8395 is_equal c a 32 1 1 1 3 8 9 13 14 16 17 18 19 26 27 30 31 b 32 1 1 1 3 8 9 13 14 16 17 18 19 26 27 30 31 # 8396 is_equal c a 32 1 1 1 3 8 9 13 14 16 17 18 19 26 27 30 31 b 32 1 1 f # 8397 is_equal c a 32 1 1 2 4 5 6 7 8 14 16 17 20 21 22 24 25 31 b 32 1 1 2 4 5 6 7 8 14 16 17 20 21 22 24 25 31 # 8398 is_equal c a 32 1 1 2 4 5 6 7 8 14 16 17 20 21 22 24 25 31 b 32 1 1 0 1 3 4 5 6 7 9 13 14 16 17 18 19 20 21 23 24 28 30 # 8399 is_equal c a 33 0 0 e b 33 0 0 e # 8400 is_equal c a 33 0 0 e b 33 0 0 e # 8401 is_equal c a 33 0 0 e b 33 0 0 e # 8402 is_equal c a 33 0 0 e b 33 0 0 f # 8403 is_equal c a 33 0 0 e b 33 0 0 e # 8404 is_equal c a 33 0 0 e b 33 0 0 5 8 9 10 12 13 16 20 23 24 26 27 28 29 # 8405 is_equal c a 33 0 0 f b 33 0 0 f # 8406 is_equal c a 33 0 0 f b 33 0 0 e # 8407 is_equal c a 33 0 0 f b 33 0 0 f # 8408 is_equal c a 33 0 0 f b 33 0 0 f # 8409 is_equal c a 33 0 0 f b 33 0 0 f # 8410 is_equal c a 33 0 0 f b 33 0 0 1 5 8 9 10 11 16 17 23 25 26 31 # 8411 is_equal c a 33 0 0 0 2 3 4 5 6 8 9 10 16 19 20 23 24 26 28 29 31 32 b 33 0 0 0 2 3 4 5 6 8 9 10 16 19 20 23 24 26 28 29 31 32 # 8412 is_equal c a 33 0 0 0 2 3 4 5 6 8 9 10 16 19 20 23 24 26 28 29 31 32 b 33 0 0 e # 8413 is_equal c a 33 0 0 1 2 4 7 8 9 10 12 14 16 17 19 21 22 23 24 26 27 28 29 30 31 32 b 33 0 0 1 2 4 7 8 9 10 12 14 16 17 19 21 22 23 24 26 27 28 29 30 31 32 # 8414 is_equal c a 33 0 0 1 2 4 7 8 9 10 12 14 16 17 19 21 22 23 24 26 27 28 29 30 31 32 b 33 0 0 f # 8415 is_equal c a 33 0 0 2 3 6 9 11 12 13 15 16 19 21 22 23 24 25 31 32 b 33 0 0 2 3 6 9 11 12 13 15 16 19 21 22 23 24 25 31 32 # 8416 is_equal c a 33 0 0 2 3 6 9 11 12 13 15 16 19 21 22 23 24 25 31 32 b 33 0 0 0 1 6 8 9 15 16 19 21 25 26 27 29 30 # 8417 is_equal c a 33 0 0 e b 33 0 0 e # 8418 is_equal c a 33 0 0 e b 33 0 1 e # 8419 is_equal c a 33 0 0 e b 33 0 0 e # 8420 is_equal c a 33 0 0 e b 33 0 1 f # 8421 is_equal c a 33 0 0 e b 33 0 0 e # 8422 is_equal c a 33 0 0 e b 33 0 1 0 1 2 4 8 9 10 15 16 17 19 26 27 28 29 31 32 # 8423 is_equal c a 33 0 0 f b 33 0 0 f # 8424 is_equal c a 33 0 0 f b 33 0 1 e # 8425 is_equal c a 33 0 0 f b 33 0 0 f # 8426 is_equal c a 33 0 0 f b 33 0 1 f # 8427 is_equal c a 33 0 0 f b 33 0 0 f # 8428 is_equal c a 33 0 0 f b 33 0 1 3 4 5 6 8 10 12 14 15 16 17 20 21 28 32 # 8429 is_equal c a 33 0 0 0 3 5 7 8 9 10 12 14 16 20 21 22 24 28 29 30 b 33 0 0 0 3 5 7 8 9 10 12 14 16 20 21 22 24 28 29 30 # 8430 is_equal c a 33 0 0 0 3 5 7 8 9 10 12 14 16 20 21 22 24 28 29 30 b 33 0 1 e # 8431 is_equal c a 33 0 0 2 4 5 11 13 14 15 19 21 22 23 24 27 29 30 31 b 33 0 0 2 4 5 11 13 14 15 19 21 22 23 24 27 29 30 31 # 8432 is_equal c a 33 0 0 2 4 5 11 13 14 15 19 21 22 23 24 27 29 30 31 b 33 0 1 f # 8433 is_equal c a 33 0 0 0 2 6 7 8 9 12 14 15 16 17 20 21 23 29 30 31 b 33 0 0 0 2 6 7 8 9 12 14 15 16 17 20 21 23 29 30 31 # 8434 is_equal c a 33 0 0 0 2 6 7 8 9 12 14 15 16 17 20 21 23 29 30 31 b 33 0 1 0 2 5 6 15 17 18 21 22 24 26 27 29 31 # 8435 is_equal c a 33 0 0 e b 33 0 0 e # 8436 is_equal c a 33 0 0 e b 33 1 0 e # 8437 is_equal c a 33 0 0 e b 33 0 0 e # 8438 is_equal c a 33 0 0 e b 33 1 0 f # 8439 is_equal c a 33 0 0 e b 33 0 0 e # 8440 is_equal c a 33 0 0 e b 33 1 0 0 2 3 6 7 10 11 12 13 16 17 18 20 24 27 28 30 31 32 # 8441 is_equal c a 33 0 0 f b 33 0 0 f # 8442 is_equal c a 33 0 0 f b 33 1 0 e # 8443 is_equal c a 33 0 0 f b 33 0 0 f # 8444 is_equal c a 33 0 0 f b 33 1 0 f # 8445 is_equal c a 33 0 0 f b 33 0 0 f # 8446 is_equal c a 33 0 0 f b 33 1 0 0 2 3 5 7 8 10 11 16 17 18 23 24 25 26 28 30 31 32 # 8447 is_equal c a 33 0 0 0 1 3 10 12 15 17 20 23 24 26 29 b 33 0 0 0 1 3 10 12 15 17 20 23 24 26 29 # 8448 is_equal c a 33 0 0 0 1 3 10 12 15 17 20 23 24 26 29 b 33 1 0 e # 8449 is_equal c a 33 0 0 0 2 4 6 7 10 12 14 16 19 22 23 28 29 30 31 b 33 0 0 0 2 4 6 7 10 12 14 16 19 22 23 28 29 30 31 # 8450 is_equal c a 33 0 0 0 2 4 6 7 10 12 14 16 19 22 23 28 29 30 31 b 33 1 0 f # 8451 is_equal c a 33 0 0 2 3 5 6 8 13 14 17 18 19 20 21 30 31 32 b 33 0 0 2 3 5 6 8 13 14 17 18 19 20 21 30 31 32 # 8452 is_equal c a 33 0 0 2 3 5 6 8 13 14 17 18 19 20 21 30 31 32 b 33 1 0 0 3 5 7 8 9 11 12 13 14 15 16 17 18 19 20 24 25 26 32 # 8453 is_equal c a 33 0 0 e b 33 0 0 e # 8454 is_equal c a 33 0 0 e b 33 1 1 e # 8455 is_equal c a 33 0 0 e b 33 0 0 e # 8456 is_equal c a 33 0 0 e b 33 1 1 f # 8457 is_equal c a 33 0 0 e b 33 0 0 e # 8458 is_equal c a 33 0 0 e b 33 1 1 1 8 9 10 12 13 15 17 18 19 23 24 25 28 29 32 # 8459 is_equal c a 33 0 0 f b 33 0 0 f # 8460 is_equal c a 33 0 0 f b 33 1 1 e # 8461 is_equal c a 33 0 0 f b 33 0 0 f # 8462 is_equal c a 33 0 0 f b 33 1 1 f # 8463 is_equal c a 33 0 0 f b 33 0 0 f # 8464 is_equal c a 33 0 0 f b 33 1 1 0 1 4 7 9 10 12 13 14 15 19 20 22 23 24 26 28 31 32 # 8465 is_equal c a 33 0 0 2 3 5 8 9 11 15 17 18 19 20 21 23 25 26 27 30 31 32 b 33 0 0 2 3 5 8 9 11 15 17 18 19 20 21 23 25 26 27 30 31 32 # 8466 is_equal c a 33 0 0 2 3 5 8 9 11 15 17 18 19 20 21 23 25 26 27 30 31 32 b 33 1 1 e # 8467 is_equal c a 33 0 0 0 1 3 6 7 8 11 12 15 20 22 23 26 27 29 31 b 33 0 0 0 1 3 6 7 8 11 12 15 20 22 23 26 27 29 31 # 8468 is_equal c a 33 0 0 0 1 3 6 7 8 11 12 15 20 22 23 26 27 29 31 b 33 1 1 f # 8469 is_equal c a 33 0 0 0 1 2 5 6 7 9 10 11 15 16 22 23 26 27 28 29 31 32 b 33 0 0 0 1 2 5 6 7 9 10 11 15 16 22 23 26 27 28 29 31 32 # 8470 is_equal c a 33 0 0 0 1 2 5 6 7 9 10 11 15 16 22 23 26 27 28 29 31 32 b 33 1 1 1 3 4 7 8 9 15 16 17 18 19 20 21 24 27 28 29 31 32 # 8471 is_equal c a 33 0 1 e b 33 0 1 e # 8472 is_equal c a 33 0 1 e b 33 0 0 e # 8473 is_equal c a 33 0 1 e b 33 0 1 e # 8474 is_equal c a 33 0 1 e b 33 0 0 f # 8475 is_equal c a 33 0 1 e b 33 0 1 e # 8476 is_equal c a 33 0 1 e b 33 0 0 0 1 2 3 5 6 11 12 15 18 19 20 21 22 23 26 28 29 31 32 # 8477 is_equal c a 33 0 1 f b 33 0 1 f # 8478 is_equal c a 33 0 1 f b 33 0 0 e # 8479 is_equal c a 33 0 1 f b 33 0 1 f # 8480 is_equal c a 33 0 1 f b 33 0 0 f # 8481 is_equal c a 33 0 1 f b 33 0 1 f # 8482 is_equal c a 33 0 1 f b 33 0 0 1 2 4 6 8 11 12 16 19 20 24 27 28 31 32 # 8483 is_equal c a 33 0 1 2 3 4 5 12 13 15 18 20 24 26 28 29 b 33 0 1 2 3 4 5 12 13 15 18 20 24 26 28 29 # 8484 is_equal c a 33 0 1 2 3 4 5 12 13 15 18 20 24 26 28 29 b 33 0 0 e # 8485 is_equal c a 33 0 1 0 1 3 5 7 9 10 13 15 16 17 21 23 24 27 28 29 30 31 32 b 33 0 1 0 1 3 5 7 9 10 13 15 16 17 21 23 24 27 28 29 30 31 32 # 8486 is_equal c a 33 0 1 0 1 3 5 7 9 10 13 15 16 17 21 23 24 27 28 29 30 31 32 b 33 0 0 f # 8487 is_equal c a 33 0 1 1 3 4 7 8 10 11 12 13 15 17 19 20 22 24 29 31 32 b 33 0 1 1 3 4 7 8 10 11 12 13 15 17 19 20 22 24 29 31 32 # 8488 is_equal c a 33 0 1 1 3 4 7 8 10 11 12 13 15 17 19 20 22 24 29 31 32 b 33 0 0 1 2 3 4 6 12 15 16 18 22 23 28 29 32 # 8489 is_equal c a 33 0 1 e b 33 0 1 e # 8490 is_equal c a 33 0 1 e b 33 0 1 e # 8491 is_equal c a 33 0 1 e b 33 0 1 e # 8492 is_equal c a 33 0 1 e b 33 0 1 f # 8493 is_equal c a 33 0 1 e b 33 0 1 e # 8494 is_equal c a 33 0 1 e b 33 0 1 0 1 2 4 6 8 12 13 16 19 23 25 26 29 32 # 8495 is_equal c a 33 0 1 f b 33 0 1 f # 8496 is_equal c a 33 0 1 f b 33 0 1 e # 8497 is_equal c a 33 0 1 f b 33 0 1 f # 8498 is_equal c a 33 0 1 f b 33 0 1 f # 8499 is_equal c a 33 0 1 f b 33 0 1 f # 8500 is_equal c a 33 0 1 f b 33 0 1 0 1 2 4 5 6 7 10 13 14 15 17 19 25 26 28 29 31 32 # 8501 is_equal c a 33 0 1 0 3 10 13 14 18 19 20 28 30 31 32 b 33 0 1 0 3 10 13 14 18 19 20 28 30 31 32 # 8502 is_equal c a 33 0 1 0 3 10 13 14 18 19 20 28 30 31 32 b 33 0 1 e # 8503 is_equal c a 33 0 1 1 2 3 4 10 14 15 17 19 21 23 27 30 31 32 b 33 0 1 1 2 3 4 10 14 15 17 19 21 23 27 30 31 32 # 8504 is_equal c a 33 0 1 1 2 3 4 10 14 15 17 19 21 23 27 30 31 32 b 33 0 1 f # 8505 is_equal c a 33 0 1 0 1 2 6 7 10 11 13 20 22 24 25 26 27 29 30 32 b 33 0 1 0 1 2 6 7 10 11 13 20 22 24 25 26 27 29 30 32 # 8506 is_equal c a 33 0 1 0 1 2 6 7 10 11 13 20 22 24 25 26 27 29 30 32 b 33 0 1 0 2 5 6 8 9 10 13 14 15 17 18 19 20 21 24 26 32 # 8507 is_equal c a 33 0 1 e b 33 0 1 e # 8508 is_equal c a 33 0 1 e b 33 1 0 e # 8509 is_equal c a 33 0 1 e b 33 0 1 e # 8510 is_equal c a 33 0 1 e b 33 1 0 f # 8511 is_equal c a 33 0 1 e b 33 0 1 e # 8512 is_equal c a 33 0 1 e b 33 1 0 1 2 3 4 6 7 12 14 15 18 20 22 26 28 31 # 8513 is_equal c a 33 0 1 f b 33 0 1 f # 8514 is_equal c a 33 0 1 f b 33 1 0 e # 8515 is_equal c a 33 0 1 f b 33 0 1 f # 8516 is_equal c a 33 0 1 f b 33 1 0 f # 8517 is_equal c a 33 0 1 f b 33 0 1 f # 8518 is_equal c a 33 0 1 f b 33 1 0 1 3 4 6 7 8 10 12 13 14 16 17 19 20 21 24 25 28 30 # 8519 is_equal c a 33 0 1 1 2 3 4 5 6 8 11 13 14 17 20 21 23 24 25 26 28 29 32 b 33 0 1 1 2 3 4 5 6 8 11 13 14 17 20 21 23 24 25 26 28 29 32 # 8520 is_equal c a 33 0 1 1 2 3 4 5 6 8 11 13 14 17 20 21 23 24 25 26 28 29 32 b 33 1 0 e # 8521 is_equal c a 33 0 1 2 7 10 15 17 18 20 21 23 28 29 32 b 33 0 1 2 7 10 15 17 18 20 21 23 28 29 32 # 8522 is_equal c a 33 0 1 2 7 10 15 17 18 20 21 23 28 29 32 b 33 1 0 f # 8523 is_equal c a 33 0 1 1 3 5 7 8 12 14 15 17 18 19 23 24 25 26 27 30 31 b 33 0 1 1 3 5 7 8 12 14 15 17 18 19 23 24 25 26 27 30 31 # 8524 is_equal c a 33 0 1 1 3 5 7 8 12 14 15 17 18 19 23 24 25 26 27 30 31 b 33 1 0 0 1 2 3 4 5 6 8 12 15 16 20 21 23 24 27 28 31 # 8525 is_equal c a 33 0 1 e b 33 0 1 e # 8526 is_equal c a 33 0 1 e b 33 1 1 e # 8527 is_equal c a 33 0 1 e b 33 0 1 e # 8528 is_equal c a 33 0 1 e b 33 1 1 f # 8529 is_equal c a 33 0 1 e b 33 0 1 e # 8530 is_equal c a 33 0 1 e b 33 1 1 0 1 3 4 5 6 9 15 17 18 21 23 26 27 29 32 # 8531 is_equal c a 33 0 1 f b 33 0 1 f # 8532 is_equal c a 33 0 1 f b 33 1 1 e # 8533 is_equal c a 33 0 1 f b 33 0 1 f # 8534 is_equal c a 33 0 1 f b 33 1 1 f # 8535 is_equal c a 33 0 1 f b 33 0 1 f # 8536 is_equal c a 33 0 1 f b 33 1 1 2 4 5 7 9 14 18 20 21 22 23 25 29 30 31 # 8537 is_equal c a 33 0 1 0 1 3 6 8 10 14 15 18 21 22 25 28 31 b 33 0 1 0 1 3 6 8 10 14 15 18 21 22 25 28 31 # 8538 is_equal c a 33 0 1 0 1 3 6 8 10 14 15 18 21 22 25 28 31 b 33 1 1 e # 8539 is_equal c a 33 0 1 0 2 3 6 7 9 11 12 15 19 24 28 29 31 b 33 0 1 0 2 3 6 7 9 11 12 15 19 24 28 29 31 # 8540 is_equal c a 33 0 1 0 2 3 6 7 9 11 12 15 19 24 28 29 31 b 33 1 1 f # 8541 is_equal c a 33 0 1 1 2 5 6 11 12 19 21 22 23 24 26 27 28 29 31 b 33 0 1 1 2 5 6 11 12 19 21 22 23 24 26 27 28 29 31 # 8542 is_equal c a 33 0 1 1 2 5 6 11 12 19 21 22 23 24 26 27 28 29 31 b 33 1 1 2 6 7 8 9 11 13 18 19 21 22 23 24 25 27 31 32 # 8543 is_equal c a 33 1 0 e b 33 1 0 e # 8544 is_equal c a 33 1 0 e b 33 0 0 e # 8545 is_equal c a 33 1 0 e b 33 1 0 e # 8546 is_equal c a 33 1 0 e b 33 0 0 f # 8547 is_equal c a 33 1 0 e b 33 1 0 e # 8548 is_equal c a 33 1 0 e b 33 0 0 3 5 10 12 18 21 25 26 27 29 30 # 8549 is_equal c a 33 1 0 f b 33 1 0 f # 8550 is_equal c a 33 1 0 f b 33 0 0 e # 8551 is_equal c a 33 1 0 f b 33 1 0 f # 8552 is_equal c a 33 1 0 f b 33 0 0 f # 8553 is_equal c a 33 1 0 f b 33 1 0 f # 8554 is_equal c a 33 1 0 f b 33 0 0 0 2 3 4 9 13 14 15 16 17 21 22 24 27 29 # 8555 is_equal c a 33 1 0 2 3 4 6 10 14 16 21 23 25 26 b 33 1 0 2 3 4 6 10 14 16 21 23 25 26 # 8556 is_equal c a 33 1 0 2 3 4 6 10 14 16 21 23 25 26 b 33 0 0 e # 8557 is_equal c a 33 1 0 3 5 7 10 11 14 15 16 21 22 24 25 26 30 31 b 33 1 0 3 5 7 10 11 14 15 16 21 22 24 25 26 30 31 # 8558 is_equal c a 33 1 0 3 5 7 10 11 14 15 16 21 22 24 25 26 30 31 b 33 0 0 f # 8559 is_equal c a 33 1 0 0 1 2 3 4 10 11 12 13 17 18 20 23 24 30 32 b 33 1 0 0 1 2 3 4 10 11 12 13 17 18 20 23 24 30 32 # 8560 is_equal c a 33 1 0 0 1 2 3 4 10 11 12 13 17 18 20 23 24 30 32 b 33 0 0 1 2 3 12 13 14 15 17 19 22 23 25 26 27 28 30 # 8561 is_equal c a 33 1 0 e b 33 1 0 e # 8562 is_equal c a 33 1 0 e b 33 0 1 e # 8563 is_equal c a 33 1 0 e b 33 1 0 e # 8564 is_equal c a 33 1 0 e b 33 0 1 f # 8565 is_equal c a 33 1 0 e b 33 1 0 e # 8566 is_equal c a 33 1 0 e b 33 0 1 0 4 5 6 7 10 12 14 15 16 21 22 24 26 31 # 8567 is_equal c a 33 1 0 f b 33 1 0 f # 8568 is_equal c a 33 1 0 f b 33 0 1 e # 8569 is_equal c a 33 1 0 f b 33 1 0 f # 8570 is_equal c a 33 1 0 f b 33 0 1 f # 8571 is_equal c a 33 1 0 f b 33 1 0 f # 8572 is_equal c a 33 1 0 f b 33 0 1 0 3 4 8 9 15 17 23 25 27 # 8573 is_equal c a 33 1 0 3 4 5 6 8 10 12 13 14 18 19 20 21 25 26 29 30 31 b 33 1 0 3 4 5 6 8 10 12 13 14 18 19 20 21 25 26 29 30 31 # 8574 is_equal c a 33 1 0 3 4 5 6 8 10 12 13 14 18 19 20 21 25 26 29 30 31 b 33 0 1 e # 8575 is_equal c a 33 1 0 2 13 14 16 19 20 21 22 23 26 29 30 31 b 33 1 0 2 13 14 16 19 20 21 22 23 26 29 30 31 # 8576 is_equal c a 33 1 0 2 13 14 16 19 20 21 22 23 26 29 30 31 b 33 0 1 f # 8577 is_equal c a 33 1 0 0 5 6 7 11 12 13 14 16 19 21 23 24 25 27 30 32 b 33 1 0 0 5 6 7 11 12 13 14 16 19 21 23 24 25 27 30 32 # 8578 is_equal c a 33 1 0 0 5 6 7 11 12 13 14 16 19 21 23 24 25 27 30 32 b 33 0 1 6 9 13 15 17 23 24 25 28 29 # 8579 is_equal c a 33 1 0 e b 33 1 0 e # 8580 is_equal c a 33 1 0 e b 33 1 0 e # 8581 is_equal c a 33 1 0 e b 33 1 0 e # 8582 is_equal c a 33 1 0 e b 33 1 0 f # 8583 is_equal c a 33 1 0 e b 33 1 0 e # 8584 is_equal c a 33 1 0 e b 33 1 0 1 3 4 5 10 12 13 14 15 17 18 19 21 22 28 29 32 # 8585 is_equal c a 33 1 0 f b 33 1 0 f # 8586 is_equal c a 33 1 0 f b 33 1 0 e # 8587 is_equal c a 33 1 0 f b 33 1 0 f # 8588 is_equal c a 33 1 0 f b 33 1 0 f # 8589 is_equal c a 33 1 0 f b 33 1 0 f # 8590 is_equal c a 33 1 0 f b 33 1 0 0 1 3 5 7 8 9 11 12 15 18 22 23 25 26 29 30 32 # 8591 is_equal c a 33 1 0 4 5 7 10 11 12 14 18 19 20 21 23 24 27 29 30 31 b 33 1 0 4 5 7 10 11 12 14 18 19 20 21 23 24 27 29 30 31 # 8592 is_equal c a 33 1 0 4 5 7 10 11 12 14 18 19 20 21 23 24 27 29 30 31 b 33 1 0 e # 8593 is_equal c a 33 1 0 0 3 4 11 13 16 17 19 22 23 24 27 32 b 33 1 0 0 3 4 11 13 16 17 19 22 23 24 27 32 # 8594 is_equal c a 33 1 0 0 3 4 11 13 16 17 19 22 23 24 27 32 b 33 1 0 f # 8595 is_equal c a 33 1 0 0 2 4 6 7 8 11 12 13 14 15 17 18 19 21 22 23 24 25 30 32 b 33 1 0 0 2 4 6 7 8 11 12 13 14 15 17 18 19 21 22 23 24 25 30 32 # 8596 is_equal c a 33 1 0 0 2 4 6 7 8 11 12 13 14 15 17 18 19 21 22 23 24 25 30 32 b 33 1 0 0 1 3 6 7 8 10 14 15 23 24 30 # 8597 is_equal c a 33 1 0 e b 33 1 0 e # 8598 is_equal c a 33 1 0 e b 33 1 1 e # 8599 is_equal c a 33 1 0 e b 33 1 0 e # 8600 is_equal c a 33 1 0 e b 33 1 1 f # 8601 is_equal c a 33 1 0 e b 33 1 0 e # 8602 is_equal c a 33 1 0 e b 33 1 1 2 3 4 5 6 10 11 12 13 17 18 19 20 21 24 25 26 28 30 # 8603 is_equal c a 33 1 0 f b 33 1 0 f # 8604 is_equal c a 33 1 0 f b 33 1 1 e # 8605 is_equal c a 33 1 0 f b 33 1 0 f # 8606 is_equal c a 33 1 0 f b 33 1 1 f # 8607 is_equal c a 33 1 0 f b 33 1 0 f # 8608 is_equal c a 33 1 0 f b 33 1 1 4 5 6 8 9 13 14 15 18 20 23 25 27 29 31 32 # 8609 is_equal c a 33 1 0 0 2 3 4 7 9 10 12 13 14 16 17 21 22 23 25 28 31 32 b 33 1 0 0 2 3 4 7 9 10 12 13 14 16 17 21 22 23 25 28 31 32 # 8610 is_equal c a 33 1 0 0 2 3 4 7 9 10 12 13 14 16 17 21 22 23 25 28 31 32 b 33 1 1 e # 8611 is_equal c a 33 1 0 2 4 6 7 10 12 13 15 17 20 22 23 24 25 26 30 32 b 33 1 0 2 4 6 7 10 12 13 15 17 20 22 23 24 25 26 30 32 # 8612 is_equal c a 33 1 0 2 4 6 7 10 12 13 15 17 20 22 23 24 25 26 30 32 b 33 1 1 f # 8613 is_equal c a 33 1 0 0 1 2 4 5 6 8 11 12 14 15 18 19 20 23 25 27 28 29 30 32 b 33 1 0 0 1 2 4 5 6 8 11 12 14 15 18 19 20 23 25 27 28 29 30 32 # 8614 is_equal c a 33 1 0 0 1 2 4 5 6 8 11 12 14 15 18 19 20 23 25 27 28 29 30 32 b 33 1 1 0 1 2 3 5 7 14 16 17 22 23 24 26 31 32 # 8615 is_equal c a 33 1 1 e b 33 1 1 e # 8616 is_equal c a 33 1 1 e b 33 0 0 e # 8617 is_equal c a 33 1 1 e b 33 1 1 e # 8618 is_equal c a 33 1 1 e b 33 0 0 f # 8619 is_equal c a 33 1 1 e b 33 1 1 e # 8620 is_equal c a 33 1 1 e b 33 0 0 0 1 3 8 9 10 11 12 14 16 18 21 22 23 26 27 28 29 30 31 32 # 8621 is_equal c a 33 1 1 f b 33 1 1 f # 8622 is_equal c a 33 1 1 f b 33 0 0 e # 8623 is_equal c a 33 1 1 f b 33 1 1 f # 8624 is_equal c a 33 1 1 f b 33 0 0 f # 8625 is_equal c a 33 1 1 f b 33 1 1 f # 8626 is_equal c a 33 1 1 f b 33 0 0 1 2 4 7 13 15 16 18 21 22 23 24 25 26 27 31 # 8627 is_equal c a 33 1 1 3 5 7 9 10 12 13 16 17 18 20 21 24 25 26 29 31 32 b 33 1 1 3 5 7 9 10 12 13 16 17 18 20 21 24 25 26 29 31 32 # 8628 is_equal c a 33 1 1 3 5 7 9 10 12 13 16 17 18 20 21 24 25 26 29 31 32 b 33 0 0 e # 8629 is_equal c a 33 1 1 0 1 3 7 9 10 11 12 14 15 21 24 26 27 28 29 30 31 32 b 33 1 1 0 1 3 7 9 10 11 12 14 15 21 24 26 27 28 29 30 31 32 # 8630 is_equal c a 33 1 1 0 1 3 7 9 10 11 12 14 15 21 24 26 27 28 29 30 31 32 b 33 0 0 f # 8631 is_equal c a 33 1 1 4 6 9 11 15 16 17 19 20 21 22 24 27 30 32 b 33 1 1 4 6 9 11 15 16 17 19 20 21 22 24 27 30 32 # 8632 is_equal c a 33 1 1 4 6 9 11 15 16 17 19 20 21 22 24 27 30 32 b 33 0 0 0 1 4 5 10 11 13 16 19 20 21 26 28 31 # 8633 is_equal c a 33 1 1 e b 33 1 1 e # 8634 is_equal c a 33 1 1 e b 33 0 1 e # 8635 is_equal c a 33 1 1 e b 33 1 1 e # 8636 is_equal c a 33 1 1 e b 33 0 1 f # 8637 is_equal c a 33 1 1 e b 33 1 1 e # 8638 is_equal c a 33 1 1 e b 33 0 1 0 2 3 4 7 9 13 15 16 17 18 19 22 23 24 26 28 29 32 # 8639 is_equal c a 33 1 1 f b 33 1 1 f # 8640 is_equal c a 33 1 1 f b 33 0 1 e # 8641 is_equal c a 33 1 1 f b 33 1 1 f # 8642 is_equal c a 33 1 1 f b 33 0 1 f # 8643 is_equal c a 33 1 1 f b 33 1 1 f # 8644 is_equal c a 33 1 1 f b 33 0 1 2 3 5 9 10 11 12 13 14 15 17 19 20 22 24 25 26 27 30 31 32 # 8645 is_equal c a 33 1 1 1 5 8 14 16 17 18 19 22 25 26 27 29 31 32 b 33 1 1 1 5 8 14 16 17 18 19 22 25 26 27 29 31 32 # 8646 is_equal c a 33 1 1 1 5 8 14 16 17 18 19 22 25 26 27 29 31 32 b 33 0 1 e # 8647 is_equal c a 33 1 1 0 4 5 8 9 10 12 13 14 16 17 18 20 23 28 b 33 1 1 0 4 5 8 9 10 12 13 14 16 17 18 20 23 28 # 8648 is_equal c a 33 1 1 0 4 5 8 9 10 12 13 14 16 17 18 20 23 28 b 33 0 1 f # 8649 is_equal c a 33 1 1 0 1 3 6 7 9 10 12 15 18 19 20 21 24 25 26 30 b 33 1 1 0 1 3 6 7 9 10 12 15 18 19 20 21 24 25 26 30 # 8650 is_equal c a 33 1 1 0 1 3 6 7 9 10 12 15 18 19 20 21 24 25 26 30 b 33 0 1 0 1 2 4 5 6 7 9 10 11 13 14 15 16 17 18 20 21 23 24 25 26 30 # 8651 is_equal c a 33 1 1 e b 33 1 1 e # 8652 is_equal c a 33 1 1 e b 33 1 0 e # 8653 is_equal c a 33 1 1 e b 33 1 1 e # 8654 is_equal c a 33 1 1 e b 33 1 0 f # 8655 is_equal c a 33 1 1 e b 33 1 1 e # 8656 is_equal c a 33 1 1 e b 33 1 0 0 1 2 4 5 6 7 9 10 12 13 14 20 23 25 28 29 30 31 32 # 8657 is_equal c a 33 1 1 f b 33 1 1 f # 8658 is_equal c a 33 1 1 f b 33 1 0 e # 8659 is_equal c a 33 1 1 f b 33 1 1 f # 8660 is_equal c a 33 1 1 f b 33 1 0 f # 8661 is_equal c a 33 1 1 f b 33 1 1 f # 8662 is_equal c a 33 1 1 f b 33 1 0 0 6 7 10 11 15 16 17 18 19 24 25 # 8663 is_equal c a 33 1 1 0 1 2 3 4 5 7 11 12 13 15 16 20 21 22 26 28 30 32 b 33 1 1 0 1 2 3 4 5 7 11 12 13 15 16 20 21 22 26 28 30 32 # 8664 is_equal c a 33 1 1 0 1 2 3 4 5 7 11 12 13 15 16 20 21 22 26 28 30 32 b 33 1 0 e # 8665 is_equal c a 33 1 1 0 2 4 5 6 7 8 9 10 11 14 15 16 17 20 21 22 24 29 31 b 33 1 1 0 2 4 5 6 7 8 9 10 11 14 15 16 17 20 21 22 24 29 31 # 8666 is_equal c a 33 1 1 0 2 4 5 6 7 8 9 10 11 14 15 16 17 20 21 22 24 29 31 b 33 1 0 f # 8667 is_equal c a 33 1 1 0 2 3 5 6 8 9 14 16 19 21 22 25 26 27 29 b 33 1 1 0 2 3 5 6 8 9 14 16 19 21 22 25 26 27 29 # 8668 is_equal c a 33 1 1 0 2 3 5 6 8 9 14 16 19 21 22 25 26 27 29 b 33 1 0 1 2 4 5 6 10 11 15 16 18 19 20 23 27 31 # 8669 is_equal c a 33 1 1 e b 33 1 1 e # 8670 is_equal c a 33 1 1 e b 33 1 1 e # 8671 is_equal c a 33 1 1 e b 33 1 1 e # 8672 is_equal c a 33 1 1 e b 33 1 1 f # 8673 is_equal c a 33 1 1 e b 33 1 1 e # 8674 is_equal c a 33 1 1 e b 33 1 1 0 1 3 4 5 8 12 15 18 19 21 22 23 25 27 29 32 # 8675 is_equal c a 33 1 1 f b 33 1 1 f # 8676 is_equal c a 33 1 1 f b 33 1 1 e # 8677 is_equal c a 33 1 1 f b 33 1 1 f # 8678 is_equal c a 33 1 1 f b 33 1 1 f # 8679 is_equal c a 33 1 1 f b 33 1 1 f # 8680 is_equal c a 33 1 1 f b 33 1 1 2 4 6 7 8 10 11 13 15 16 17 19 20 21 22 23 25 28 32 # 8681 is_equal c a 33 1 1 1 4 7 11 14 22 24 25 29 30 b 33 1 1 1 4 7 11 14 22 24 25 29 30 # 8682 is_equal c a 33 1 1 1 4 7 11 14 22 24 25 29 30 b 33 1 1 e # 8683 is_equal c a 33 1 1 1 3 8 10 11 12 16 17 18 20 23 26 30 31 b 33 1 1 1 3 8 10 11 12 16 17 18 20 23 26 30 31 # 8684 is_equal c a 33 1 1 1 3 8 10 11 12 16 17 18 20 23 26 30 31 b 33 1 1 f # 8685 is_equal c a 33 1 1 0 1 2 6 9 11 13 14 16 21 22 23 24 25 28 30 31 b 33 1 1 0 1 2 6 9 11 13 14 16 21 22 23 24 25 28 30 31 # 8686 is_equal c a 33 1 1 0 1 2 6 9 11 13 14 16 21 22 23 24 25 28 30 31 b 33 1 1 0 1 2 3 4 7 8 9 11 12 13 14 15 17 20 23 24 25 28 30 # 8687 is_equal c a 63 0 0 e b 63 0 0 e # 8688 is_equal c a 63 0 0 e b 63 0 0 e # 8689 is_equal c a 63 0 0 e b 63 0 0 e # 8690 is_equal c a 63 0 0 e b 63 0 0 f # 8691 is_equal c a 63 0 0 e b 63 0 0 e # 8692 is_equal c a 63 0 0 e b 63 0 0 0 3 4 6 7 8 11 14 16 18 21 25 26 28 30 31 32 33 34 35 39 40 41 42 45 48 50 54 57 58 61 # 8693 is_equal c a 63 0 0 f b 63 0 0 f # 8694 is_equal c a 63 0 0 f b 63 0 0 e # 8695 is_equal c a 63 0 0 f b 63 0 0 f # 8696 is_equal c a 63 0 0 f b 63 0 0 f # 8697 is_equal c a 63 0 0 f b 63 0 0 f # 8698 is_equal c a 63 0 0 f b 63 0 0 1 2 3 4 7 10 11 12 17 19 20 21 22 27 28 31 32 34 35 36 38 40 41 42 43 47 48 49 50 51 52 56 57 59 61 62 # 8699 is_equal c a 63 0 0 1 2 4 7 9 10 14 15 17 18 20 22 25 26 27 28 30 36 37 39 40 43 45 46 47 48 49 50 52 53 54 60 61 62 b 63 0 0 1 2 4 7 9 10 14 15 17 18 20 22 25 26 27 28 30 36 37 39 40 43 45 46 47 48 49 50 52 53 54 60 61 62 # 8700 is_equal c a 63 0 0 1 2 4 7 9 10 14 15 17 18 20 22 25 26 27 28 30 36 37 39 40 43 45 46 47 48 49 50 52 53 54 60 61 62 b 63 0 0 e # 8701 is_equal c a 63 0 0 3 5 6 8 11 12 14 19 23 24 25 26 28 29 30 35 38 39 42 44 46 48 50 62 b 63 0 0 3 5 6 8 11 12 14 19 23 24 25 26 28 29 30 35 38 39 42 44 46 48 50 62 # 8702 is_equal c a 63 0 0 3 5 6 8 11 12 14 19 23 24 25 26 28 29 30 35 38 39 42 44 46 48 50 62 b 63 0 0 f # 8703 is_equal c a 63 0 0 0 1 4 7 8 9 10 12 14 19 20 21 22 23 27 29 30 32 33 34 35 38 42 44 45 47 48 49 50 51 53 54 55 56 62 b 63 0 0 0 1 4 7 8 9 10 12 14 19 20 21 22 23 27 29 30 32 33 34 35 38 42 44 45 47 48 49 50 51 53 54 55 56 62 # 8704 is_equal c a 63 0 0 0 1 4 7 8 9 10 12 14 19 20 21 22 23 27 29 30 32 33 34 35 38 42 44 45 47 48 49 50 51 53 54 55 56 62 b 63 0 0 0 3 4 5 8 9 10 12 13 14 15 16 20 23 27 28 31 32 33 36 37 38 39 40 41 42 43 45 49 50 53 54 60 61 62 # 8705 is_equal c a 63 0 0 e b 63 0 0 e # 8706 is_equal c a 63 0 0 e b 63 0 1 e # 8707 is_equal c a 63 0 0 e b 63 0 0 e # 8708 is_equal c a 63 0 0 e b 63 0 1 f # 8709 is_equal c a 63 0 0 e b 63 0 0 e # 8710 is_equal c a 63 0 0 e b 63 0 1 1 3 6 12 13 14 17 18 20 21 25 26 27 30 31 34 35 36 37 38 48 50 51 55 58 59 60 62 # 8711 is_equal c a 63 0 0 f b 63 0 0 f # 8712 is_equal c a 63 0 0 f b 63 0 1 e # 8713 is_equal c a 63 0 0 f b 63 0 0 f # 8714 is_equal c a 63 0 0 f b 63 0 1 f # 8715 is_equal c a 63 0 0 f b 63 0 0 f # 8716 is_equal c a 63 0 0 f b 63 0 1 0 1 2 3 6 7 8 9 11 15 17 18 22 28 29 30 31 33 34 35 38 39 41 42 43 47 51 55 56 57 59 62 # 8717 is_equal c a 63 0 0 0 1 3 5 6 9 13 14 17 18 22 24 26 27 28 29 31 32 33 34 36 37 41 42 43 46 47 49 50 51 52 53 55 58 b 63 0 0 0 1 3 5 6 9 13 14 17 18 22 24 26 27 28 29 31 32 33 34 36 37 41 42 43 46 47 49 50 51 52 53 55 58 # 8718 is_equal c a 63 0 0 0 1 3 5 6 9 13 14 17 18 22 24 26 27 28 29 31 32 33 34 36 37 41 42 43 46 47 49 50 51 52 53 55 58 b 63 0 1 e # 8719 is_equal c a 63 0 0 5 6 7 9 13 15 17 18 20 21 22 23 24 26 29 31 33 36 40 41 44 45 48 50 51 52 53 54 55 56 61 b 63 0 0 5 6 7 9 13 15 17 18 20 21 22 23 24 26 29 31 33 36 40 41 44 45 48 50 51 52 53 54 55 56 61 # 8720 is_equal c a 63 0 0 5 6 7 9 13 15 17 18 20 21 22 23 24 26 29 31 33 36 40 41 44 45 48 50 51 52 53 54 55 56 61 b 63 0 1 f # 8721 is_equal c a 63 0 0 0 5 8 10 11 12 13 18 21 22 24 26 28 31 32 33 34 36 38 40 41 43 45 46 47 49 51 52 56 57 58 59 b 63 0 0 0 5 8 10 11 12 13 18 21 22 24 26 28 31 32 33 34 36 38 40 41 43 45 46 47 49 51 52 56 57 58 59 # 8722 is_equal c a 63 0 0 0 5 8 10 11 12 13 18 21 22 24 26 28 31 32 33 34 36 38 40 41 43 45 46 47 49 51 52 56 57 58 59 b 63 0 1 3 4 5 8 10 12 13 15 16 18 19 22 23 24 25 27 29 31 32 33 34 35 36 42 46 48 49 50 53 54 56 58 # 8723 is_equal c a 63 0 0 e b 63 0 0 e # 8724 is_equal c a 63 0 0 e b 63 1 0 e # 8725 is_equal c a 63 0 0 e b 63 0 0 e # 8726 is_equal c a 63 0 0 e b 63 1 0 f # 8727 is_equal c a 63 0 0 e b 63 0 0 e # 8728 is_equal c a 63 0 0 e b 63 1 0 1 4 6 8 13 15 16 18 19 21 22 23 24 26 28 29 30 31 32 33 35 37 38 42 43 44 45 47 50 51 52 53 55 58 59 61 62 # 8729 is_equal c a 63 0 0 f b 63 0 0 f # 8730 is_equal c a 63 0 0 f b 63 1 0 e # 8731 is_equal c a 63 0 0 f b 63 0 0 f # 8732 is_equal c a 63 0 0 f b 63 1 0 f # 8733 is_equal c a 63 0 0 f b 63 0 0 f # 8734 is_equal c a 63 0 0 f b 63 1 0 1 3 6 7 14 15 16 17 18 20 22 23 24 26 27 30 31 33 34 37 39 40 41 42 45 47 48 49 51 56 58 60 61 62 # 8735 is_equal c a 63 0 0 0 1 2 4 6 7 10 11 12 14 15 17 19 21 23 25 26 27 30 34 36 37 38 41 43 46 49 51 52 53 56 58 60 61 62 b 63 0 0 0 1 2 4 6 7 10 11 12 14 15 17 19 21 23 25 26 27 30 34 36 37 38 41 43 46 49 51 52 53 56 58 60 61 62 # 8736 is_equal c a 63 0 0 0 1 2 4 6 7 10 11 12 14 15 17 19 21 23 25 26 27 30 34 36 37 38 41 43 46 49 51 52 53 56 58 60 61 62 b 63 1 0 e # 8737 is_equal c a 63 0 0 0 2 7 8 9 10 11 15 22 24 25 28 30 31 33 34 35 39 42 44 48 51 52 55 57 58 59 61 62 b 63 0 0 0 2 7 8 9 10 11 15 22 24 25 28 30 31 33 34 35 39 42 44 48 51 52 55 57 58 59 61 62 # 8738 is_equal c a 63 0 0 0 2 7 8 9 10 11 15 22 24 25 28 30 31 33 34 35 39 42 44 48 51 52 55 57 58 59 61 62 b 63 1 0 f # 8739 is_equal c a 63 0 0 0 1 2 4 5 6 7 10 11 13 14 16 18 19 23 26 29 32 33 34 35 36 37 38 42 45 46 49 50 51 54 55 57 59 60 b 63 0 0 0 1 2 4 5 6 7 10 11 13 14 16 18 19 23 26 29 32 33 34 35 36 37 38 42 45 46 49 50 51 54 55 57 59 60 # 8740 is_equal c a 63 0 0 0 1 2 4 5 6 7 10 11 13 14 16 18 19 23 26 29 32 33 34 35 36 37 38 42 45 46 49 50 51 54 55 57 59 60 b 63 1 0 2 5 6 7 8 10 12 13 19 20 22 24 26 27 31 32 34 36 37 38 39 41 45 46 47 49 50 54 56 60 61 62 # 8741 is_equal c a 63 0 0 e b 63 0 0 e # 8742 is_equal c a 63 0 0 e b 63 1 1 e # 8743 is_equal c a 63 0 0 e b 63 0 0 e # 8744 is_equal c a 63 0 0 e b 63 1 1 f # 8745 is_equal c a 63 0 0 e b 63 0 0 e # 8746 is_equal c a 63 0 0 e b 63 1 1 1 2 3 4 5 6 7 11 12 14 15 16 17 21 22 23 24 29 31 32 35 38 39 40 42 43 44 47 49 52 55 56 59 62 # 8747 is_equal c a 63 0 0 f b 63 0 0 f # 8748 is_equal c a 63 0 0 f b 63 1 1 e # 8749 is_equal c a 63 0 0 f b 63 0 0 f # 8750 is_equal c a 63 0 0 f b 63 1 1 f # 8751 is_equal c a 63 0 0 f b 63 0 0 f # 8752 is_equal c a 63 0 0 f b 63 1 1 1 4 7 9 11 12 13 15 19 22 26 28 30 32 34 35 36 38 39 42 48 49 54 56 57 58 59 60 61 # 8753 is_equal c a 63 0 0 0 1 3 4 5 6 7 9 10 11 15 17 18 19 22 23 24 27 30 35 36 38 42 44 47 50 56 57 60 62 b 63 0 0 0 1 3 4 5 6 7 9 10 11 15 17 18 19 22 23 24 27 30 35 36 38 42 44 47 50 56 57 60 62 # 8754 is_equal c a 63 0 0 0 1 3 4 5 6 7 9 10 11 15 17 18 19 22 23 24 27 30 35 36 38 42 44 47 50 56 57 60 62 b 63 1 1 e # 8755 is_equal c a 63 0 0 5 6 7 8 10 13 14 17 18 19 22 23 25 27 28 30 31 32 40 41 42 43 44 50 51 52 53 54 56 60 b 63 0 0 5 6 7 8 10 13 14 17 18 19 22 23 25 27 28 30 31 32 40 41 42 43 44 50 51 52 53 54 56 60 # 8756 is_equal c a 63 0 0 5 6 7 8 10 13 14 17 18 19 22 23 25 27 28 30 31 32 40 41 42 43 44 50 51 52 53 54 56 60 b 63 1 1 f # 8757 is_equal c a 63 0 0 0 1 2 4 5 8 10 11 14 15 16 18 19 20 21 22 27 28 29 31 34 38 39 40 41 42 45 48 49 51 52 57 61 b 63 0 0 0 1 2 4 5 8 10 11 14 15 16 18 19 20 21 22 27 28 29 31 34 38 39 40 41 42 45 48 49 51 52 57 61 # 8758 is_equal c a 63 0 0 0 1 2 4 5 8 10 11 14 15 16 18 19 20 21 22 27 28 29 31 34 38 39 40 41 42 45 48 49 51 52 57 61 b 63 1 1 0 1 5 8 9 10 13 16 18 19 21 22 25 26 27 34 35 37 38 39 40 41 44 45 46 54 55 56 57 58 # 8759 is_equal c a 63 0 1 e b 63 0 1 e # 8760 is_equal c a 63 0 1 e b 63 0 0 e # 8761 is_equal c a 63 0 1 e b 63 0 1 e # 8762 is_equal c a 63 0 1 e b 63 0 0 f # 8763 is_equal c a 63 0 1 e b 63 0 1 e # 8764 is_equal c a 63 0 1 e b 63 0 0 0 1 4 7 13 15 17 18 19 22 28 30 34 39 40 46 47 49 54 56 57 58 61 62 # 8765 is_equal c a 63 0 1 f b 63 0 1 f # 8766 is_equal c a 63 0 1 f b 63 0 0 e # 8767 is_equal c a 63 0 1 f b 63 0 1 f # 8768 is_equal c a 63 0 1 f b 63 0 0 f # 8769 is_equal c a 63 0 1 f b 63 0 1 f # 8770 is_equal c a 63 0 1 f b 63 0 0 0 2 3 4 9 10 11 14 15 17 19 20 21 22 25 27 30 31 32 33 34 38 39 40 41 42 44 49 54 55 56 58 60 61 # 8771 is_equal c a 63 0 1 1 3 6 9 11 12 13 14 16 17 18 21 22 24 28 33 35 39 43 49 52 54 55 56 57 59 61 b 63 0 1 1 3 6 9 11 12 13 14 16 17 18 21 22 24 28 33 35 39 43 49 52 54 55 56 57 59 61 # 8772 is_equal c a 63 0 1 1 3 6 9 11 12 13 14 16 17 18 21 22 24 28 33 35 39 43 49 52 54 55 56 57 59 61 b 63 0 0 e # 8773 is_equal c a 63 0 1 2 4 9 10 14 16 17 18 20 22 23 25 26 27 29 31 33 34 35 39 43 44 45 47 48 50 52 53 55 56 58 60 62 b 63 0 1 2 4 9 10 14 16 17 18 20 22 23 25 26 27 29 31 33 34 35 39 43 44 45 47 48 50 52 53 55 56 58 60 62 # 8774 is_equal c a 63 0 1 2 4 9 10 14 16 17 18 20 22 23 25 26 27 29 31 33 34 35 39 43 44 45 47 48 50 52 53 55 56 58 60 62 b 63 0 0 f # 8775 is_equal c a 63 0 1 2 6 8 11 14 15 18 19 20 21 22 23 24 26 34 35 36 39 40 41 43 46 48 49 51 52 54 55 57 59 60 b 63 0 1 2 6 8 11 14 15 18 19 20 21 22 23 24 26 34 35 36 39 40 41 43 46 48 49 51 52 54 55 57 59 60 # 8776 is_equal c a 63 0 1 2 6 8 11 14 15 18 19 20 21 22 23 24 26 34 35 36 39 40 41 43 46 48 49 51 52 54 55 57 59 60 b 63 0 0 1 2 6 10 12 16 19 21 27 29 31 32 36 37 39 48 49 51 52 53 55 56 57 58 60 62 # 8777 is_equal c a 63 0 1 e b 63 0 1 e # 8778 is_equal c a 63 0 1 e b 63 0 1 e # 8779 is_equal c a 63 0 1 e b 63 0 1 e # 8780 is_equal c a 63 0 1 e b 63 0 1 f # 8781 is_equal c a 63 0 1 e b 63 0 1 e # 8782 is_equal c a 63 0 1 e b 63 0 1 3 8 11 12 13 16 18 19 22 25 27 30 31 32 33 34 37 39 41 42 44 46 47 48 49 55 57 59 62 # 8783 is_equal c a 63 0 1 f b 63 0 1 f # 8784 is_equal c a 63 0 1 f b 63 0 1 e # 8785 is_equal c a 63 0 1 f b 63 0 1 f # 8786 is_equal c a 63 0 1 f b 63 0 1 f # 8787 is_equal c a 63 0 1 f b 63 0 1 f # 8788 is_equal c a 63 0 1 f b 63 0 1 6 8 9 12 13 15 16 21 22 24 26 27 28 29 31 33 35 41 42 44 47 48 50 53 58 59 62 # 8789 is_equal c a 63 0 1 4 5 11 12 13 15 16 17 18 19 20 24 25 27 28 29 30 34 38 39 42 45 47 48 49 50 51 54 58 60 61 62 b 63 0 1 4 5 11 12 13 15 16 17 18 19 20 24 25 27 28 29 30 34 38 39 42 45 47 48 49 50 51 54 58 60 61 62 # 8790 is_equal c a 63 0 1 4 5 11 12 13 15 16 17 18 19 20 24 25 27 28 29 30 34 38 39 42 45 47 48 49 50 51 54 58 60 61 62 b 63 0 1 e # 8791 is_equal c a 63 0 1 1 5 7 10 11 12 13 14 15 17 18 23 26 27 31 33 35 36 38 39 40 42 43 45 47 48 50 54 55 56 57 58 62 b 63 0 1 1 5 7 10 11 12 13 14 15 17 18 23 26 27 31 33 35 36 38 39 40 42 43 45 47 48 50 54 55 56 57 58 62 # 8792 is_equal c a 63 0 1 1 5 7 10 11 12 13 14 15 17 18 23 26 27 31 33 35 36 38 39 40 42 43 45 47 48 50 54 55 56 57 58 62 b 63 0 1 f # 8793 is_equal c a 63 0 1 0 4 5 7 8 9 10 12 14 15 18 20 21 23 24 27 29 30 32 34 35 36 37 38 39 40 41 43 50 54 55 56 58 61 b 63 0 1 0 4 5 7 8 9 10 12 14 15 18 20 21 23 24 27 29 30 32 34 35 36 37 38 39 40 41 43 50 54 55 56 58 61 # 8794 is_equal c a 63 0 1 0 4 5 7 8 9 10 12 14 15 18 20 21 23 24 27 29 30 32 34 35 36 37 38 39 40 41 43 50 54 55 56 58 61 b 63 0 1 7 8 9 11 15 16 18 20 23 24 25 26 28 29 30 32 33 37 40 42 43 44 46 47 48 52 55 57 58 60 61 # 8795 is_equal c a 63 0 1 e b 63 0 1 e # 8796 is_equal c a 63 0 1 e b 63 1 0 e # 8797 is_equal c a 63 0 1 e b 63 0 1 e # 8798 is_equal c a 63 0 1 e b 63 1 0 f # 8799 is_equal c a 63 0 1 e b 63 0 1 e # 8800 is_equal c a 63 0 1 e b 63 1 0 0 1 2 3 4 5 9 12 15 17 18 19 22 24 25 27 28 29 32 35 37 38 39 44 46 47 49 50 51 53 54 56 61 62 # 8801 is_equal c a 63 0 1 f b 63 0 1 f # 8802 is_equal c a 63 0 1 f b 63 1 0 e # 8803 is_equal c a 63 0 1 f b 63 0 1 f # 8804 is_equal c a 63 0 1 f b 63 1 0 f # 8805 is_equal c a 63 0 1 f b 63 0 1 f # 8806 is_equal c a 63 0 1 f b 63 1 0 0 3 6 8 9 11 12 13 14 15 17 19 22 23 24 26 29 32 33 37 38 39 40 42 43 45 48 49 56 58 60 62 # 8807 is_equal c a 63 0 1 0 2 5 8 11 12 18 19 23 24 29 30 32 33 34 36 38 39 40 42 44 45 46 51 52 53 55 57 58 59 60 61 b 63 0 1 0 2 5 8 11 12 18 19 23 24 29 30 32 33 34 36 38 39 40 42 44 45 46 51 52 53 55 57 58 59 60 61 # 8808 is_equal c a 63 0 1 0 2 5 8 11 12 18 19 23 24 29 30 32 33 34 36 38 39 40 42 44 45 46 51 52 53 55 57 58 59 60 61 b 63 1 0 e # 8809 is_equal c a 63 0 1 0 1 4 7 9 10 11 12 13 16 17 18 19 20 24 28 30 31 33 34 39 40 43 44 45 46 47 48 49 50 51 53 55 57 62 b 63 0 1 0 1 4 7 9 10 11 12 13 16 17 18 19 20 24 28 30 31 33 34 39 40 43 44 45 46 47 48 49 50 51 53 55 57 62 # 8810 is_equal c a 63 0 1 0 1 4 7 9 10 11 12 13 16 17 18 19 20 24 28 30 31 33 34 39 40 43 44 45 46 47 48 49 50 51 53 55 57 62 b 63 1 0 f # 8811 is_equal c a 63 0 1 0 2 4 6 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 28 29 31 32 34 35 37 39 40 42 43 45 46 50 53 56 57 59 60 61 b 63 0 1 0 2 4 6 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 28 29 31 32 34 35 37 39 40 42 43 45 46 50 53 56 57 59 60 61 # 8812 is_equal c a 63 0 1 0 2 4 6 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 28 29 31 32 34 35 37 39 40 42 43 45 46 50 53 56 57 59 60 61 b 63 1 0 0 1 6 8 9 10 11 13 17 19 26 27 28 29 31 32 33 37 40 42 46 51 52 55 56 58 59 60 # 8813 is_equal c a 63 0 1 e b 63 0 1 e # 8814 is_equal c a 63 0 1 e b 63 1 1 e # 8815 is_equal c a 63 0 1 e b 63 0 1 e # 8816 is_equal c a 63 0 1 e b 63 1 1 f # 8817 is_equal c a 63 0 1 e b 63 0 1 e # 8818 is_equal c a 63 0 1 e b 63 1 1 0 2 3 4 5 7 8 9 10 11 14 15 16 17 18 19 20 22 23 26 27 31 32 34 36 39 42 43 44 47 50 52 53 54 56 57 60 61 # 8819 is_equal c a 63 0 1 f b 63 0 1 f # 8820 is_equal c a 63 0 1 f b 63 1 1 e # 8821 is_equal c a 63 0 1 f b 63 0 1 f # 8822 is_equal c a 63 0 1 f b 63 1 1 f # 8823 is_equal c a 63 0 1 f b 63 0 1 f # 8824 is_equal c a 63 0 1 f b 63 1 1 0 1 4 5 6 7 11 13 17 18 19 20 21 22 24 27 38 43 45 46 47 48 49 50 51 52 56 57 60 61 62 # 8825 is_equal c a 63 0 1 7 8 9 11 14 17 21 22 23 24 30 31 35 36 37 38 39 40 44 46 48 49 50 52 53 57 58 59 61 b 63 0 1 7 8 9 11 14 17 21 22 23 24 30 31 35 36 37 38 39 40 44 46 48 49 50 52 53 57 58 59 61 # 8826 is_equal c a 63 0 1 7 8 9 11 14 17 21 22 23 24 30 31 35 36 37 38 39 40 44 46 48 49 50 52 53 57 58 59 61 b 63 1 1 e # 8827 is_equal c a 63 0 1 0 1 2 3 4 6 10 15 18 19 20 24 29 30 32 33 34 35 37 40 42 46 47 49 53 54 55 56 62 b 63 0 1 0 1 2 3 4 6 10 15 18 19 20 24 29 30 32 33 34 35 37 40 42 46 47 49 53 54 55 56 62 # 8828 is_equal c a 63 0 1 0 1 2 3 4 6 10 15 18 19 20 24 29 30 32 33 34 35 37 40 42 46 47 49 53 54 55 56 62 b 63 1 1 f # 8829 is_equal c a 63 0 1 2 3 7 10 11 12 14 15 16 20 21 23 24 28 29 31 32 33 34 39 40 42 43 44 48 49 50 51 52 53 55 57 b 63 0 1 2 3 7 10 11 12 14 15 16 20 21 23 24 28 29 31 32 33 34 39 40 42 43 44 48 49 50 51 52 53 55 57 # 8830 is_equal c a 63 0 1 2 3 7 10 11 12 14 15 16 20 21 23 24 28 29 31 32 33 34 39 40 42 43 44 48 49 50 51 52 53 55 57 b 63 1 1 3 4 7 9 10 11 12 18 19 20 21 23 26 27 28 30 32 35 36 37 38 39 40 41 42 44 46 48 49 51 52 53 56 58 59 60 61 62 # 8831 is_equal c a 63 1 0 e b 63 1 0 e # 8832 is_equal c a 63 1 0 e b 63 0 0 e # 8833 is_equal c a 63 1 0 e b 63 1 0 e # 8834 is_equal c a 63 1 0 e b 63 0 0 f # 8835 is_equal c a 63 1 0 e b 63 1 0 e # 8836 is_equal c a 63 1 0 e b 63 0 0 0 3 4 5 6 7 8 9 10 12 14 15 17 19 21 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 45 47 48 49 50 52 54 55 57 # 8837 is_equal c a 63 1 0 f b 63 1 0 f # 8838 is_equal c a 63 1 0 f b 63 0 0 e # 8839 is_equal c a 63 1 0 f b 63 1 0 f # 8840 is_equal c a 63 1 0 f b 63 0 0 f # 8841 is_equal c a 63 1 0 f b 63 1 0 f # 8842 is_equal c a 63 1 0 f b 63 0 0 7 8 10 12 13 14 15 16 17 19 21 22 24 25 26 29 31 33 36 37 39 46 51 54 56 57 60 61 62 # 8843 is_equal c a 63 1 0 0 1 4 5 6 7 12 13 16 17 19 21 22 24 26 27 29 30 32 34 37 42 49 50 51 52 53 62 b 63 1 0 0 1 4 5 6 7 12 13 16 17 19 21 22 24 26 27 29 30 32 34 37 42 49 50 51 52 53 62 # 8844 is_equal c a 63 1 0 0 1 4 5 6 7 12 13 16 17 19 21 22 24 26 27 29 30 32 34 37 42 49 50 51 52 53 62 b 63 0 0 e # 8845 is_equal c a 63 1 0 0 1 4 6 11 13 15 18 20 24 25 26 28 30 31 36 38 42 43 46 47 50 52 54 55 57 58 61 b 63 1 0 0 1 4 6 11 13 15 18 20 24 25 26 28 30 31 36 38 42 43 46 47 50 52 54 55 57 58 61 # 8846 is_equal c a 63 1 0 0 1 4 6 11 13 15 18 20 24 25 26 28 30 31 36 38 42 43 46 47 50 52 54 55 57 58 61 b 63 0 0 f # 8847 is_equal c a 63 1 0 0 2 3 5 6 9 13 15 17 18 19 20 22 24 25 27 31 32 33 34 36 37 38 40 42 43 44 46 48 49 50 51 53 57 59 62 b 63 1 0 0 2 3 5 6 9 13 15 17 18 19 20 22 24 25 27 31 32 33 34 36 37 38 40 42 43 44 46 48 49 50 51 53 57 59 62 # 8848 is_equal c a 63 1 0 0 2 3 5 6 9 13 15 17 18 19 20 22 24 25 27 31 32 33 34 36 37 38 40 42 43 44 46 48 49 50 51 53 57 59 62 b 63 0 0 2 7 10 15 18 19 20 23 24 25 27 29 34 35 36 38 39 40 41 44 46 48 49 57 58 59 # 8849 is_equal c a 63 1 0 e b 63 1 0 e # 8850 is_equal c a 63 1 0 e b 63 0 1 e # 8851 is_equal c a 63 1 0 e b 63 1 0 e # 8852 is_equal c a 63 1 0 e b 63 0 1 f # 8853 is_equal c a 63 1 0 e b 63 1 0 e # 8854 is_equal c a 63 1 0 e b 63 0 1 0 1 9 10 12 16 21 22 23 25 26 31 32 33 37 38 40 41 42 43 44 46 47 48 54 55 57 60 61 # 8855 is_equal c a 63 1 0 f b 63 1 0 f # 8856 is_equal c a 63 1 0 f b 63 0 1 e # 8857 is_equal c a 63 1 0 f b 63 1 0 f # 8858 is_equal c a 63 1 0 f b 63 0 1 f # 8859 is_equal c a 63 1 0 f b 63 1 0 f # 8860 is_equal c a 63 1 0 f b 63 0 1 0 2 4 5 13 17 18 19 22 27 32 34 38 39 40 41 42 43 44 48 49 50 53 55 57 58 59 # 8861 is_equal c a 63 1 0 0 1 4 5 7 10 12 13 14 16 17 20 21 22 23 25 27 28 29 31 37 39 40 41 43 44 45 47 48 51 53 55 56 57 58 59 60 61 62 b 63 1 0 0 1 4 5 7 10 12 13 14 16 17 20 21 22 23 25 27 28 29 31 37 39 40 41 43 44 45 47 48 51 53 55 56 57 58 59 60 61 62 # 8862 is_equal c a 63 1 0 0 1 4 5 7 10 12 13 14 16 17 20 21 22 23 25 27 28 29 31 37 39 40 41 43 44 45 47 48 51 53 55 56 57 58 59 60 61 62 b 63 0 1 e # 8863 is_equal c a 63 1 0 3 4 5 6 8 9 10 11 12 13 15 17 22 23 24 25 26 27 29 31 33 35 36 39 42 44 45 48 49 50 51 52 54 55 57 58 59 b 63 1 0 3 4 5 6 8 9 10 11 12 13 15 17 22 23 24 25 26 27 29 31 33 35 36 39 42 44 45 48 49 50 51 52 54 55 57 58 59 # 8864 is_equal c a 63 1 0 3 4 5 6 8 9 10 11 12 13 15 17 22 23 24 25 26 27 29 31 33 35 36 39 42 44 45 48 49 50 51 52 54 55 57 58 59 b 63 0 1 f # 8865 is_equal c a 63 1 0 0 1 2 3 4 8 14 15 16 17 18 19 20 22 23 25 29 30 31 32 33 34 37 38 42 43 45 46 49 52 54 58 b 63 1 0 0 1 2 3 4 8 14 15 16 17 18 19 20 22 23 25 29 30 31 32 33 34 37 38 42 43 45 46 49 52 54 58 # 8866 is_equal c a 63 1 0 0 1 2 3 4 8 14 15 16 17 18 19 20 22 23 25 29 30 31 32 33 34 37 38 42 43 45 46 49 52 54 58 b 63 0 1 0 7 8 9 11 14 15 16 19 21 22 23 24 26 28 30 31 35 37 38 42 43 45 49 51 54 56 58 60 61 # 8867 is_equal c a 63 1 0 e b 63 1 0 e # 8868 is_equal c a 63 1 0 e b 63 1 0 e # 8869 is_equal c a 63 1 0 e b 63 1 0 e # 8870 is_equal c a 63 1 0 e b 63 1 0 f # 8871 is_equal c a 63 1 0 e b 63 1 0 e # 8872 is_equal c a 63 1 0 e b 63 1 0 4 6 7 8 10 12 13 14 15 16 17 19 23 25 26 27 28 29 30 31 32 35 36 38 41 42 45 48 51 52 53 54 56 58 61 # 8873 is_equal c a 63 1 0 f b 63 1 0 f # 8874 is_equal c a 63 1 0 f b 63 1 0 e # 8875 is_equal c a 63 1 0 f b 63 1 0 f # 8876 is_equal c a 63 1 0 f b 63 1 0 f # 8877 is_equal c a 63 1 0 f b 63 1 0 f # 8878 is_equal c a 63 1 0 f b 63 1 0 2 3 5 6 7 10 11 12 13 14 18 23 25 26 27 28 29 33 36 37 41 44 46 48 49 50 53 54 56 57 59 62 # 8879 is_equal c a 63 1 0 0 7 8 17 23 24 26 27 28 30 32 33 34 39 40 41 43 49 50 51 52 55 56 58 60 62 b 63 1 0 0 7 8 17 23 24 26 27 28 30 32 33 34 39 40 41 43 49 50 51 52 55 56 58 60 62 # 8880 is_equal c a 63 1 0 0 7 8 17 23 24 26 27 28 30 32 33 34 39 40 41 43 49 50 51 52 55 56 58 60 62 b 63 1 0 e # 8881 is_equal c a 63 1 0 0 2 4 5 6 7 8 9 10 11 12 16 17 19 20 21 23 24 25 26 28 31 32 33 36 39 40 43 44 45 47 48 49 51 52 53 54 55 58 60 62 b 63 1 0 0 2 4 5 6 7 8 9 10 11 12 16 17 19 20 21 23 24 25 26 28 31 32 33 36 39 40 43 44 45 47 48 49 51 52 53 54 55 58 60 62 # 8882 is_equal c a 63 1 0 0 2 4 5 6 7 8 9 10 11 12 16 17 19 20 21 23 24 25 26 28 31 32 33 36 39 40 43 44 45 47 48 49 51 52 53 54 55 58 60 62 b 63 1 0 f # 8883 is_equal c a 63 1 0 3 7 14 15 16 17 19 20 23 24 25 26 27 28 29 30 36 40 41 42 45 48 49 50 51 52 55 58 61 b 63 1 0 3 7 14 15 16 17 19 20 23 24 25 26 27 28 29 30 36 40 41 42 45 48 49 50 51 52 55 58 61 # 8884 is_equal c a 63 1 0 3 7 14 15 16 17 19 20 23 24 25 26 27 28 29 30 36 40 41 42 45 48 49 50 51 52 55 58 61 b 63 1 0 1 2 3 4 7 10 12 14 15 18 19 24 25 26 28 29 30 32 36 37 39 44 47 48 50 52 55 58 61 62 # 8885 is_equal c a 63 1 0 e b 63 1 0 e # 8886 is_equal c a 63 1 0 e b 63 1 1 e # 8887 is_equal c a 63 1 0 e b 63 1 0 e # 8888 is_equal c a 63 1 0 e b 63 1 1 f # 8889 is_equal c a 63 1 0 e b 63 1 0 e # 8890 is_equal c a 63 1 0 e b 63 1 1 0 4 6 7 8 11 12 13 15 18 19 23 24 25 26 27 28 29 30 31 32 33 35 38 39 40 42 43 46 47 48 49 51 53 54 55 57 58 60 61 # 8891 is_equal c a 63 1 0 f b 63 1 0 f # 8892 is_equal c a 63 1 0 f b 63 1 1 e # 8893 is_equal c a 63 1 0 f b 63 1 0 f # 8894 is_equal c a 63 1 0 f b 63 1 1 f # 8895 is_equal c a 63 1 0 f b 63 1 0 f # 8896 is_equal c a 63 1 0 f b 63 1 1 0 1 2 3 4 6 7 10 11 14 16 18 19 20 22 23 24 25 26 28 30 33 37 39 42 43 46 48 49 51 58 60 61 62 # 8897 is_equal c a 63 1 0 0 1 2 5 7 9 10 11 14 15 17 19 20 21 25 26 29 34 35 38 40 44 46 47 50 52 58 59 61 b 63 1 0 0 1 2 5 7 9 10 11 14 15 17 19 20 21 25 26 29 34 35 38 40 44 46 47 50 52 58 59 61 # 8898 is_equal c a 63 1 0 0 1 2 5 7 9 10 11 14 15 17 19 20 21 25 26 29 34 35 38 40 44 46 47 50 52 58 59 61 b 63 1 1 e # 8899 is_equal c a 63 1 0 0 2 7 9 13 17 20 21 22 23 26 27 28 29 32 34 39 40 41 44 45 46 50 53 55 57 58 59 60 61 b 63 1 0 0 2 7 9 13 17 20 21 22 23 26 27 28 29 32 34 39 40 41 44 45 46 50 53 55 57 58 59 60 61 # 8900 is_equal c a 63 1 0 0 2 7 9 13 17 20 21 22 23 26 27 28 29 32 34 39 40 41 44 45 46 50 53 55 57 58 59 60 61 b 63 1 1 f # 8901 is_equal c a 63 1 0 0 4 5 6 8 9 10 12 15 16 17 18 23 24 26 27 29 31 32 33 35 37 40 41 45 50 51 52 54 56 59 62 b 63 1 0 0 4 5 6 8 9 10 12 15 16 17 18 23 24 26 27 29 31 32 33 35 37 40 41 45 50 51 52 54 56 59 62 # 8902 is_equal c a 63 1 0 0 4 5 6 8 9 10 12 15 16 17 18 23 24 26 27 29 31 32 33 35 37 40 41 45 50 51 52 54 56 59 62 b 63 1 1 3 4 7 8 12 14 16 18 20 24 25 26 27 28 30 40 41 42 44 45 46 47 49 52 54 55 58 60 61 # 8903 is_equal c a 63 1 1 e b 63 1 1 e # 8904 is_equal c a 63 1 1 e b 63 0 0 e # 8905 is_equal c a 63 1 1 e b 63 1 1 e # 8906 is_equal c a 63 1 1 e b 63 0 0 f # 8907 is_equal c a 63 1 1 e b 63 1 1 e # 8908 is_equal c a 63 1 1 e b 63 0 0 2 4 6 8 17 19 20 21 23 25 26 28 29 30 31 33 35 36 39 40 44 45 48 49 50 51 52 54 57 58 60 61 # 8909 is_equal c a 63 1 1 f b 63 1 1 f # 8910 is_equal c a 63 1 1 f b 63 0 0 e # 8911 is_equal c a 63 1 1 f b 63 1 1 f # 8912 is_equal c a 63 1 1 f b 63 0 0 f # 8913 is_equal c a 63 1 1 f b 63 1 1 f # 8914 is_equal c a 63 1 1 f b 63 0 0 0 2 3 5 8 9 10 11 13 15 18 22 23 24 25 27 32 33 36 37 38 39 41 42 43 46 47 48 52 54 56 60 61 62 # 8915 is_equal c a 63 1 1 1 3 4 8 11 12 15 17 18 20 25 26 27 28 30 34 35 40 41 42 50 55 60 b 63 1 1 1 3 4 8 11 12 15 17 18 20 25 26 27 28 30 34 35 40 41 42 50 55 60 # 8916 is_equal c a 63 1 1 1 3 4 8 11 12 15 17 18 20 25 26 27 28 30 34 35 40 41 42 50 55 60 b 63 0 0 e # 8917 is_equal c a 63 1 1 0 3 4 5 8 13 15 17 18 22 23 24 28 29 30 31 34 39 40 41 45 47 51 52 54 55 58 60 61 b 63 1 1 0 3 4 5 8 13 15 17 18 22 23 24 28 29 30 31 34 39 40 41 45 47 51 52 54 55 58 60 61 # 8918 is_equal c a 63 1 1 0 3 4 5 8 13 15 17 18 22 23 24 28 29 30 31 34 39 40 41 45 47 51 52 54 55 58 60 61 b 63 0 0 f # 8919 is_equal c a 63 1 1 1 5 6 8 9 11 15 16 23 24 26 29 30 31 32 35 40 41 44 47 48 52 55 56 60 b 63 1 1 1 5 6 8 9 11 15 16 23 24 26 29 30 31 32 35 40 41 44 47 48 52 55 56 60 # 8920 is_equal c a 63 1 1 1 5 6 8 9 11 15 16 23 24 26 29 30 31 32 35 40 41 44 47 48 52 55 56 60 b 63 0 0 0 1 3 5 6 7 8 9 10 11 12 17 18 19 20 22 23 27 29 30 31 32 34 37 38 39 41 42 46 47 48 50 51 52 53 55 56 57 58 61 # 8921 is_equal c a 63 1 1 e b 63 1 1 e # 8922 is_equal c a 63 1 1 e b 63 0 1 e # 8923 is_equal c a 63 1 1 e b 63 1 1 e # 8924 is_equal c a 63 1 1 e b 63 0 1 f # 8925 is_equal c a 63 1 1 e b 63 1 1 e # 8926 is_equal c a 63 1 1 e b 63 0 1 2 5 12 13 15 16 17 18 22 25 27 29 30 33 34 35 36 39 40 41 43 45 46 49 50 51 53 55 57 59 60 # 8927 is_equal c a 63 1 1 f b 63 1 1 f # 8928 is_equal c a 63 1 1 f b 63 0 1 e # 8929 is_equal c a 63 1 1 f b 63 1 1 f # 8930 is_equal c a 63 1 1 f b 63 0 1 f # 8931 is_equal c a 63 1 1 f b 63 1 1 f # 8932 is_equal c a 63 1 1 f b 63 0 1 0 3 5 6 8 9 10 11 14 16 19 20 21 26 28 31 32 33 34 37 42 43 44 45 47 50 51 55 60 61 # 8933 is_equal c a 63 1 1 0 4 5 6 9 12 13 17 22 24 26 30 32 35 39 42 43 47 49 50 51 53 56 58 60 61 b 63 1 1 0 4 5 6 9 12 13 17 22 24 26 30 32 35 39 42 43 47 49 50 51 53 56 58 60 61 # 8934 is_equal c a 63 1 1 0 4 5 6 9 12 13 17 22 24 26 30 32 35 39 42 43 47 49 50 51 53 56 58 60 61 b 63 0 1 e # 8935 is_equal c a 63 1 1 0 1 2 3 6 7 10 12 14 15 16 17 18 19 20 25 26 27 29 32 34 35 37 38 39 41 49 53 55 56 58 61 b 63 1 1 0 1 2 3 6 7 10 12 14 15 16 17 18 19 20 25 26 27 29 32 34 35 37 38 39 41 49 53 55 56 58 61 # 8936 is_equal c a 63 1 1 0 1 2 3 6 7 10 12 14 15 16 17 18 19 20 25 26 27 29 32 34 35 37 38 39 41 49 53 55 56 58 61 b 63 0 1 f # 8937 is_equal c a 63 1 1 0 3 4 6 7 8 9 13 14 15 16 17 22 26 29 30 35 36 38 39 41 43 44 46 47 48 50 52 53 56 58 61 62 b 63 1 1 0 3 4 6 7 8 9 13 14 15 16 17 22 26 29 30 35 36 38 39 41 43 44 46 47 48 50 52 53 56 58 61 62 # 8938 is_equal c a 63 1 1 0 3 4 6 7 8 9 13 14 15 16 17 22 26 29 30 35 36 38 39 41 43 44 46 47 48 50 52 53 56 58 61 62 b 63 0 1 0 3 5 10 13 15 16 17 18 20 21 22 24 26 28 29 32 33 36 37 42 55 62 # 8939 is_equal c a 63 1 1 e b 63 1 1 e # 8940 is_equal c a 63 1 1 e b 63 1 0 e # 8941 is_equal c a 63 1 1 e b 63 1 1 e # 8942 is_equal c a 63 1 1 e b 63 1 0 f # 8943 is_equal c a 63 1 1 e b 63 1 1 e # 8944 is_equal c a 63 1 1 e b 63 1 0 2 4 5 6 8 10 14 15 19 20 23 24 25 26 28 30 32 33 34 35 36 37 38 39 40 41 47 48 52 53 55 60 62 # 8945 is_equal c a 63 1 1 f b 63 1 1 f # 8946 is_equal c a 63 1 1 f b 63 1 0 e # 8947 is_equal c a 63 1 1 f b 63 1 1 f # 8948 is_equal c a 63 1 1 f b 63 1 0 f # 8949 is_equal c a 63 1 1 f b 63 1 1 f # 8950 is_equal c a 63 1 1 f b 63 1 0 4 7 10 11 14 16 18 22 24 25 26 28 29 33 36 37 38 40 41 42 45 46 50 51 52 55 61 # 8951 is_equal c a 63 1 1 2 3 5 6 7 8 9 10 12 13 14 18 22 24 25 26 29 30 31 33 35 40 43 44 48 52 54 55 57 58 60 61 b 63 1 1 2 3 5 6 7 8 9 10 12 13 14 18 22 24 25 26 29 30 31 33 35 40 43 44 48 52 54 55 57 58 60 61 # 8952 is_equal c a 63 1 1 2 3 5 6 7 8 9 10 12 13 14 18 22 24 25 26 29 30 31 33 35 40 43 44 48 52 54 55 57 58 60 61 b 63 1 0 e # 8953 is_equal c a 63 1 1 0 2 3 4 5 8 10 11 15 19 22 23 24 25 26 29 40 47 48 52 55 56 58 60 62 b 63 1 1 0 2 3 4 5 8 10 11 15 19 22 23 24 25 26 29 40 47 48 52 55 56 58 60 62 # 8954 is_equal c a 63 1 1 0 2 3 4 5 8 10 11 15 19 22 23 24 25 26 29 40 47 48 52 55 56 58 60 62 b 63 1 0 f # 8955 is_equal c a 63 1 1 1 4 5 6 8 12 13 16 17 18 20 23 25 26 27 28 30 31 32 33 35 36 40 41 42 44 46 47 49 50 54 57 59 60 61 62 b 63 1 1 1 4 5 6 8 12 13 16 17 18 20 23 25 26 27 28 30 31 32 33 35 36 40 41 42 44 46 47 49 50 54 57 59 60 61 62 # 8956 is_equal c a 63 1 1 1 4 5 6 8 12 13 16 17 18 20 23 25 26 27 28 30 31 32 33 35 36 40 41 42 44 46 47 49 50 54 57 59 60 61 62 b 63 1 0 0 1 3 4 5 8 9 10 12 19 21 22 23 33 35 36 37 40 42 45 46 47 50 51 54 55 56 57 58 62 # 8957 is_equal c a 63 1 1 e b 63 1 1 e # 8958 is_equal c a 63 1 1 e b 63 1 1 e # 8959 is_equal c a 63 1 1 e b 63 1 1 e # 8960 is_equal c a 63 1 1 e b 63 1 1 f # 8961 is_equal c a 63 1 1 e b 63 1 1 e # 8962 is_equal c a 63 1 1 e b 63 1 1 1 4 6 8 9 10 13 17 19 21 22 24 25 28 33 34 36 37 39 40 45 46 47 48 49 50 52 54 57 58 61 62 # 8963 is_equal c a 63 1 1 f b 63 1 1 f # 8964 is_equal c a 63 1 1 f b 63 1 1 e # 8965 is_equal c a 63 1 1 f b 63 1 1 f # 8966 is_equal c a 63 1 1 f b 63 1 1 f # 8967 is_equal c a 63 1 1 f b 63 1 1 f # 8968 is_equal c a 63 1 1 f b 63 1 1 0 1 2 4 6 7 12 19 20 21 24 28 30 31 32 33 35 37 41 42 43 44 49 50 54 56 58 59 61 62 # 8969 is_equal c a 63 1 1 4 6 14 15 16 17 18 23 25 31 32 34 36 37 38 41 42 43 45 50 51 55 57 58 b 63 1 1 4 6 14 15 16 17 18 23 25 31 32 34 36 37 38 41 42 43 45 50 51 55 57 58 # 8970 is_equal c a 63 1 1 4 6 14 15 16 17 18 23 25 31 32 34 36 37 38 41 42 43 45 50 51 55 57 58 b 63 1 1 e # 8971 is_equal c a 63 1 1 0 1 5 7 11 12 16 17 21 22 23 24 25 26 30 32 33 34 36 37 41 43 44 45 47 51 54 57 58 60 62 b 63 1 1 0 1 5 7 11 12 16 17 21 22 23 24 25 26 30 32 33 34 36 37 41 43 44 45 47 51 54 57 58 60 62 # 8972 is_equal c a 63 1 1 0 1 5 7 11 12 16 17 21 22 23 24 25 26 30 32 33 34 36 37 41 43 44 45 47 51 54 57 58 60 62 b 63 1 1 f # 8973 is_equal c a 63 1 1 0 6 7 8 10 11 13 14 19 20 21 22 23 24 26 32 33 34 37 38 39 41 42 43 44 45 46 47 50 51 53 54 57 58 59 60 61 b 63 1 1 0 6 7 8 10 11 13 14 19 20 21 22 23 24 26 32 33 34 37 38 39 41 42 43 44 45 46 47 50 51 53 54 57 58 59 60 61 # 8974 is_equal c a 63 1 1 0 6 7 8 10 11 13 14 19 20 21 22 23 24 26 32 33 34 37 38 39 41 42 43 44 45 46 47 50 51 53 54 57 58 59 60 61 b 63 1 1 0 1 3 4 5 6 7 9 10 11 12 14 15 16 18 19 20 22 23 24 26 29 30 33 36 43 44 46 48 52 53 55 59 60 61 # 8975 is_equal c a 64 0 0 e b 64 0 0 e # 8976 is_equal c a 64 0 0 e b 64 0 0 e # 8977 is_equal c a 64 0 0 e b 64 0 0 e # 8978 is_equal c a 64 0 0 e b 64 0 0 f # 8979 is_equal c a 64 0 0 e b 64 0 0 e # 8980 is_equal c a 64 0 0 e b 64 0 0 1 3 4 5 8 9 11 13 14 15 19 23 24 25 27 28 30 37 41 43 44 45 46 53 57 58 60 61 # 8981 is_equal c a 64 0 0 f b 64 0 0 f # 8982 is_equal c a 64 0 0 f b 64 0 0 e # 8983 is_equal c a 64 0 0 f b 64 0 0 f # 8984 is_equal c a 64 0 0 f b 64 0 0 f # 8985 is_equal c a 64 0 0 f b 64 0 0 f # 8986 is_equal c a 64 0 0 f b 64 0 0 1 3 5 6 7 8 10 11 13 14 18 19 20 22 25 26 28 32 33 36 39 42 43 45 47 48 51 52 55 61 62 # 8987 is_equal c a 64 0 0 0 2 3 6 7 8 10 13 17 19 21 22 23 24 28 30 31 33 35 38 40 41 42 43 44 47 48 50 53 54 58 61 62 63 b 64 0 0 0 2 3 6 7 8 10 13 17 19 21 22 23 24 28 30 31 33 35 38 40 41 42 43 44 47 48 50 53 54 58 61 62 63 # 8988 is_equal c a 64 0 0 0 2 3 6 7 8 10 13 17 19 21 22 23 24 28 30 31 33 35 38 40 41 42 43 44 47 48 50 53 54 58 61 62 63 b 64 0 0 e # 8989 is_equal c a 64 0 0 0 2 4 5 6 8 9 12 13 15 22 23 26 27 29 30 31 33 36 37 38 39 40 43 44 45 46 49 50 51 55 56 58 61 63 b 64 0 0 0 2 4 5 6 8 9 12 13 15 22 23 26 27 29 30 31 33 36 37 38 39 40 43 44 45 46 49 50 51 55 56 58 61 63 # 8990 is_equal c a 64 0 0 0 2 4 5 6 8 9 12 13 15 22 23 26 27 29 30 31 33 36 37 38 39 40 43 44 45 46 49 50 51 55 56 58 61 63 b 64 0 0 f # 8991 is_equal c a 64 0 0 0 3 5 9 10 13 15 16 19 20 21 22 23 26 27 30 31 32 34 40 42 47 49 50 52 53 54 57 63 b 64 0 0 0 3 5 9 10 13 15 16 19 20 21 22 23 26 27 30 31 32 34 40 42 47 49 50 52 53 54 57 63 # 8992 is_equal c a 64 0 0 0 3 5 9 10 13 15 16 19 20 21 22 23 26 27 30 31 32 34 40 42 47 49 50 52 53 54 57 63 b 64 0 0 3 5 9 10 15 16 18 19 21 22 24 26 31 32 34 37 38 40 41 42 44 46 47 48 49 50 52 53 54 55 56 57 63 # 8993 is_equal c a 64 0 0 e b 64 0 0 e # 8994 is_equal c a 64 0 0 e b 64 0 1 e # 8995 is_equal c a 64 0 0 e b 64 0 0 e # 8996 is_equal c a 64 0 0 e b 64 0 1 f # 8997 is_equal c a 64 0 0 e b 64 0 0 e # 8998 is_equal c a 64 0 0 e b 64 0 1 0 5 6 8 9 11 14 24 25 26 35 38 40 42 44 45 49 50 54 60 61 62 # 8999 is_equal c a 64 0 0 f b 64 0 0 f # 9000 is_equal c a 64 0 0 f b 64 0 1 e # 9001 is_equal c a 64 0 0 f b 64 0 0 f # 9002 is_equal c a 64 0 0 f b 64 0 1 f # 9003 is_equal c a 64 0 0 f b 64 0 0 f # 9004 is_equal c a 64 0 0 f b 64 0 1 2 3 5 6 9 10 12 14 15 17 22 23 24 28 29 30 33 34 35 36 37 40 41 42 43 45 46 48 50 53 54 56 58 59 # 9005 is_equal c a 64 0 0 3 9 10 11 12 13 16 18 20 21 22 23 24 26 28 30 33 35 38 39 41 42 44 45 46 47 53 62 63 b 64 0 0 3 9 10 11 12 13 16 18 20 21 22 23 24 26 28 30 33 35 38 39 41 42 44 45 46 47 53 62 63 # 9006 is_equal c a 64 0 0 3 9 10 11 12 13 16 18 20 21 22 23 24 26 28 30 33 35 38 39 41 42 44 45 46 47 53 62 63 b 64 0 1 e # 9007 is_equal c a 64 0 0 1 2 3 5 6 7 8 13 15 18 19 22 23 27 28 30 31 33 34 35 38 40 41 42 44 45 51 54 55 56 58 60 61 63 b 64 0 0 1 2 3 5 6 7 8 13 15 18 19 22 23 27 28 30 31 33 34 35 38 40 41 42 44 45 51 54 55 56 58 60 61 63 # 9008 is_equal c a 64 0 0 1 2 3 5 6 7 8 13 15 18 19 22 23 27 28 30 31 33 34 35 38 40 41 42 44 45 51 54 55 56 58 60 61 63 b 64 0 1 f # 9009 is_equal c a 64 0 0 0 2 4 7 14 15 16 18 21 26 27 30 31 33 37 38 39 40 44 46 49 50 51 53 55 57 58 61 63 b 64 0 0 0 2 4 7 14 15 16 18 21 26 27 30 31 33 37 38 39 40 44 46 49 50 51 53 55 57 58 61 63 # 9010 is_equal c a 64 0 0 0 2 4 7 14 15 16 18 21 26 27 30 31 33 37 38 39 40 44 46 49 50 51 53 55 57 58 61 63 b 64 0 1 1 2 3 5 9 10 11 12 13 19 21 22 24 26 27 30 31 33 35 36 37 39 40 41 42 43 44 48 49 51 53 59 60 61 # 9011 is_equal c a 64 0 0 e b 64 0 0 e # 9012 is_equal c a 64 0 0 e b 64 1 0 e # 9013 is_equal c a 64 0 0 e b 64 0 0 e # 9014 is_equal c a 64 0 0 e b 64 1 0 f # 9015 is_equal c a 64 0 0 e b 64 0 0 e # 9016 is_equal c a 64 0 0 e b 64 1 0 0 1 2 4 7 11 12 13 15 18 19 23 24 26 27 30 33 34 38 40 43 45 47 50 51 53 54 58 59 60 61 63 # 9017 is_equal c a 64 0 0 f b 64 0 0 f # 9018 is_equal c a 64 0 0 f b 64 1 0 e # 9019 is_equal c a 64 0 0 f b 64 0 0 f # 9020 is_equal c a 64 0 0 f b 64 1 0 f # 9021 is_equal c a 64 0 0 f b 64 0 0 f # 9022 is_equal c a 64 0 0 f b 64 1 0 0 1 6 7 8 10 11 12 14 18 19 21 23 26 27 30 45 46 47 49 50 51 54 55 57 58 59 61 62 # 9023 is_equal c a 64 0 0 0 2 4 6 8 9 10 12 19 23 26 27 28 29 31 35 36 41 42 45 46 47 51 52 53 54 58 b 64 0 0 0 2 4 6 8 9 10 12 19 23 26 27 28 29 31 35 36 41 42 45 46 47 51 52 53 54 58 # 9024 is_equal c a 64 0 0 0 2 4 6 8 9 10 12 19 23 26 27 28 29 31 35 36 41 42 45 46 47 51 52 53 54 58 b 64 1 0 e # 9025 is_equal c a 64 0 0 1 4 5 6 8 14 15 23 24 26 27 28 32 33 35 36 40 41 42 44 45 46 50 51 52 56 60 61 62 63 b 64 0 0 1 4 5 6 8 14 15 23 24 26 27 28 32 33 35 36 40 41 42 44 45 46 50 51 52 56 60 61 62 63 # 9026 is_equal c a 64 0 0 1 4 5 6 8 14 15 23 24 26 27 28 32 33 35 36 40 41 42 44 45 46 50 51 52 56 60 61 62 63 b 64 1 0 f # 9027 is_equal c a 64 0 0 0 2 3 5 8 9 11 12 15 16 17 18 19 23 24 25 28 31 33 35 36 37 39 40 41 45 48 50 51 54 56 58 59 60 61 b 64 0 0 0 2 3 5 8 9 11 12 15 16 17 18 19 23 24 25 28 31 33 35 36 37 39 40 41 45 48 50 51 54 56 58 59 60 61 # 9028 is_equal c a 64 0 0 0 2 3 5 8 9 11 12 15 16 17 18 19 23 24 25 28 31 33 35 36 37 39 40 41 45 48 50 51 54 56 58 59 60 61 b 64 1 0 0 1 3 4 6 10 12 14 15 16 17 18 20 21 23 26 27 35 36 37 42 44 46 47 49 50 55 56 57 58 59 61 # 9029 is_equal c a 64 0 0 e b 64 0 0 e # 9030 is_equal c a 64 0 0 e b 64 1 1 e # 9031 is_equal c a 64 0 0 e b 64 0 0 e # 9032 is_equal c a 64 0 0 e b 64 1 1 f # 9033 is_equal c a 64 0 0 e b 64 0 0 e # 9034 is_equal c a 64 0 0 e b 64 1 1 5 6 7 10 12 13 16 20 21 22 24 25 27 28 29 33 34 35 36 40 42 43 49 54 59 60 61 # 9035 is_equal c a 64 0 0 f b 64 0 0 f # 9036 is_equal c a 64 0 0 f b 64 1 1 e # 9037 is_equal c a 64 0 0 f b 64 0 0 f # 9038 is_equal c a 64 0 0 f b 64 1 1 f # 9039 is_equal c a 64 0 0 f b 64 0 0 f # 9040 is_equal c a 64 0 0 f b 64 1 1 0 1 2 3 8 13 14 15 19 20 21 23 26 31 34 35 36 37 39 41 43 46 47 49 50 52 56 59 61 62 63 # 9041 is_equal c a 64 0 0 1 4 5 7 9 10 11 14 15 17 18 22 23 26 27 29 30 31 32 36 37 40 43 44 46 49 50 51 52 54 56 57 59 60 62 b 64 0 0 1 4 5 7 9 10 11 14 15 17 18 22 23 26 27 29 30 31 32 36 37 40 43 44 46 49 50 51 52 54 56 57 59 60 62 # 9042 is_equal c a 64 0 0 1 4 5 7 9 10 11 14 15 17 18 22 23 26 27 29 30 31 32 36 37 40 43 44 46 49 50 51 52 54 56 57 59 60 62 b 64 1 1 e # 9043 is_equal c a 64 0 0 1 2 4 6 8 12 14 16 19 20 21 23 24 25 26 30 31 33 38 40 42 43 48 51 53 54 56 58 60 61 62 b 64 0 0 1 2 4 6 8 12 14 16 19 20 21 23 24 25 26 30 31 33 38 40 42 43 48 51 53 54 56 58 60 61 62 # 9044 is_equal c a 64 0 0 1 2 4 6 8 12 14 16 19 20 21 23 24 25 26 30 31 33 38 40 42 43 48 51 53 54 56 58 60 61 62 b 64 1 1 f # 9045 is_equal c a 64 0 0 0 2 8 10 12 14 15 16 18 24 27 28 31 32 34 36 40 42 44 48 49 50 51 57 61 63 b 64 0 0 0 2 8 10 12 14 15 16 18 24 27 28 31 32 34 36 40 42 44 48 49 50 51 57 61 63 # 9046 is_equal c a 64 0 0 0 2 8 10 12 14 15 16 18 24 27 28 31 32 34 36 40 42 44 48 49 50 51 57 61 63 b 64 1 1 3 4 5 10 11 12 19 21 23 25 27 28 29 30 31 32 33 34 35 36 39 40 42 46 47 48 53 55 57 # 9047 is_equal c a 64 0 1 e b 64 0 1 e # 9048 is_equal c a 64 0 1 e b 64 0 0 e # 9049 is_equal c a 64 0 1 e b 64 0 1 e # 9050 is_equal c a 64 0 1 e b 64 0 0 f # 9051 is_equal c a 64 0 1 e b 64 0 1 e # 9052 is_equal c a 64 0 1 e b 64 0 0 3 4 6 8 9 10 13 14 19 21 23 25 26 27 33 38 39 41 43 44 48 49 50 51 54 55 57 58 59 60 # 9053 is_equal c a 64 0 1 f b 64 0 1 f # 9054 is_equal c a 64 0 1 f b 64 0 0 e # 9055 is_equal c a 64 0 1 f b 64 0 1 f # 9056 is_equal c a 64 0 1 f b 64 0 0 f # 9057 is_equal c a 64 0 1 f b 64 0 1 f # 9058 is_equal c a 64 0 1 f b 64 0 0 1 2 7 9 10 11 12 13 15 16 18 20 26 28 30 31 32 36 37 38 40 41 43 44 48 50 52 53 54 55 57 59 60 61 62 63 # 9059 is_equal c a 64 0 1 6 8 9 10 11 16 17 18 20 25 28 32 34 36 39 43 44 45 47 48 49 51 53 54 55 58 b 64 0 1 6 8 9 10 11 16 17 18 20 25 28 32 34 36 39 43 44 45 47 48 49 51 53 54 55 58 # 9060 is_equal c a 64 0 1 6 8 9 10 11 16 17 18 20 25 28 32 34 36 39 43 44 45 47 48 49 51 53 54 55 58 b 64 0 0 e # 9061 is_equal c a 64 0 1 0 4 5 9 18 19 21 22 23 25 26 27 28 30 31 32 38 39 41 43 45 46 47 49 50 52 53 58 60 61 b 64 0 1 0 4 5 9 18 19 21 22 23 25 26 27 28 30 31 32 38 39 41 43 45 46 47 49 50 52 53 58 60 61 # 9062 is_equal c a 64 0 1 0 4 5 9 18 19 21 22 23 25 26 27 28 30 31 32 38 39 41 43 45 46 47 49 50 52 53 58 60 61 b 64 0 0 f # 9063 is_equal c a 64 0 1 2 3 4 5 6 8 10 13 16 18 19 20 26 30 31 32 33 34 35 37 38 41 44 45 46 47 48 49 50 51 55 58 59 60 61 b 64 0 1 2 3 4 5 6 8 10 13 16 18 19 20 26 30 31 32 33 34 35 37 38 41 44 45 46 47 48 49 50 51 55 58 59 60 61 # 9064 is_equal c a 64 0 1 2 3 4 5 6 8 10 13 16 18 19 20 26 30 31 32 33 34 35 37 38 41 44 45 46 47 48 49 50 51 55 58 59 60 61 b 64 0 0 3 4 9 10 13 16 19 21 22 23 25 26 30 31 33 34 38 40 42 45 46 47 50 51 53 54 55 59 60 61 62 # 9065 is_equal c a 64 0 1 e b 64 0 1 e # 9066 is_equal c a 64 0 1 e b 64 0 1 e # 9067 is_equal c a 64 0 1 e b 64 0 1 e # 9068 is_equal c a 64 0 1 e b 64 0 1 f # 9069 is_equal c a 64 0 1 e b 64 0 1 e # 9070 is_equal c a 64 0 1 e b 64 0 1 0 1 2 6 8 10 13 15 19 20 22 24 25 28 30 31 35 36 37 38 39 41 43 46 47 48 51 57 58 63 # 9071 is_equal c a 64 0 1 f b 64 0 1 f # 9072 is_equal c a 64 0 1 f b 64 0 1 e # 9073 is_equal c a 64 0 1 f b 64 0 1 f # 9074 is_equal c a 64 0 1 f b 64 0 1 f # 9075 is_equal c a 64 0 1 f b 64 0 1 f # 9076 is_equal c a 64 0 1 f b 64 0 1 0 3 6 7 10 11 12 13 16 17 22 26 28 29 31 33 34 35 37 38 41 43 44 45 47 48 49 51 53 58 63 # 9077 is_equal c a 64 0 1 0 2 5 6 7 8 9 10 12 16 21 22 23 25 28 29 31 33 35 36 37 38 40 42 43 44 47 48 49 50 52 53 55 57 60 61 b 64 0 1 0 2 5 6 7 8 9 10 12 16 21 22 23 25 28 29 31 33 35 36 37 38 40 42 43 44 47 48 49 50 52 53 55 57 60 61 # 9078 is_equal c a 64 0 1 0 2 5 6 7 8 9 10 12 16 21 22 23 25 28 29 31 33 35 36 37 38 40 42 43 44 47 48 49 50 52 53 55 57 60 61 b 64 0 1 e # 9079 is_equal c a 64 0 1 0 1 4 5 6 7 9 13 14 15 17 20 25 26 27 32 34 35 37 39 40 41 43 44 46 51 52 53 55 57 58 59 b 64 0 1 0 1 4 5 6 7 9 13 14 15 17 20 25 26 27 32 34 35 37 39 40 41 43 44 46 51 52 53 55 57 58 59 # 9080 is_equal c a 64 0 1 0 1 4 5 6 7 9 13 14 15 17 20 25 26 27 32 34 35 37 39 40 41 43 44 46 51 52 53 55 57 58 59 b 64 0 1 f # 9081 is_equal c a 64 0 1 0 1 2 4 12 15 16 17 18 20 28 30 33 34 37 38 39 42 44 50 55 56 57 59 61 63 b 64 0 1 0 1 2 4 12 15 16 17 18 20 28 30 33 34 37 38 39 42 44 50 55 56 57 59 61 63 # 9082 is_equal c a 64 0 1 0 1 2 4 12 15 16 17 18 20 28 30 33 34 37 38 39 42 44 50 55 56 57 59 61 63 b 64 0 1 0 1 2 3 4 5 6 8 9 10 11 13 15 18 19 20 23 25 28 29 32 35 36 39 40 41 42 44 45 46 49 50 51 54 55 59 60 63 # 9083 is_equal c a 64 0 1 e b 64 0 1 e # 9084 is_equal c a 64 0 1 e b 64 1 0 e # 9085 is_equal c a 64 0 1 e b 64 0 1 e # 9086 is_equal c a 64 0 1 e b 64 1 0 f # 9087 is_equal c a 64 0 1 e b 64 0 1 e # 9088 is_equal c a 64 0 1 e b 64 1 0 0 1 3 5 6 8 11 14 15 17 18 19 22 23 24 25 26 27 33 34 36 37 38 43 44 51 52 53 56 61 62 63 # 9089 is_equal c a 64 0 1 f b 64 0 1 f # 9090 is_equal c a 64 0 1 f b 64 1 0 e # 9091 is_equal c a 64 0 1 f b 64 0 1 f # 9092 is_equal c a 64 0 1 f b 64 1 0 f # 9093 is_equal c a 64 0 1 f b 64 0 1 f # 9094 is_equal c a 64 0 1 f b 64 1 0 0 1 5 6 7 11 13 15 19 21 25 26 27 29 33 34 35 36 37 38 39 40 42 48 49 52 53 54 55 56 57 58 63 # 9095 is_equal c a 64 0 1 0 2 3 4 5 6 7 8 9 12 13 14 15 18 21 23 25 27 29 30 32 33 34 35 36 37 38 39 42 45 47 48 50 52 62 b 64 0 1 0 2 3 4 5 6 7 8 9 12 13 14 15 18 21 23 25 27 29 30 32 33 34 35 36 37 38 39 42 45 47 48 50 52 62 # 9096 is_equal c a 64 0 1 0 2 3 4 5 6 7 8 9 12 13 14 15 18 21 23 25 27 29 30 32 33 34 35 36 37 38 39 42 45 47 48 50 52 62 b 64 1 0 e # 9097 is_equal c a 64 0 1 1 6 7 8 9 11 12 13 14 15 16 17 18 19 20 24 25 26 27 31 35 36 38 43 44 46 47 48 49 50 51 52 55 57 58 59 61 62 63 b 64 0 1 1 6 7 8 9 11 12 13 14 15 16 17 18 19 20 24 25 26 27 31 35 36 38 43 44 46 47 48 49 50 51 52 55 57 58 59 61 62 63 # 9098 is_equal c a 64 0 1 1 6 7 8 9 11 12 13 14 15 16 17 18 19 20 24 25 26 27 31 35 36 38 43 44 46 47 48 49 50 51 52 55 57 58 59 61 62 63 b 64 1 0 f # 9099 is_equal c a 64 0 1 6 7 10 20 21 22 24 25 28 30 32 36 38 41 42 43 48 49 50 51 52 53 57 58 61 63 b 64 0 1 6 7 10 20 21 22 24 25 28 30 32 36 38 41 42 43 48 49 50 51 52 53 57 58 61 63 # 9100 is_equal c a 64 0 1 6 7 10 20 21 22 24 25 28 30 32 36 38 41 42 43 48 49 50 51 52 53 57 58 61 63 b 64 1 0 1 3 7 8 9 10 14 15 18 19 21 23 24 26 27 28 30 35 42 43 46 47 48 50 54 57 62 63 # 9101 is_equal c a 64 0 1 e b 64 0 1 e # 9102 is_equal c a 64 0 1 e b 64 1 1 e # 9103 is_equal c a 64 0 1 e b 64 0 1 e # 9104 is_equal c a 64 0 1 e b 64 1 1 f # 9105 is_equal c a 64 0 1 e b 64 0 1 e # 9106 is_equal c a 64 0 1 e b 64 1 1 1 2 3 7 10 11 12 14 15 16 18 20 21 22 24 25 26 31 34 35 38 39 41 42 45 46 49 50 51 52 55 57 59 61 63 # 9107 is_equal c a 64 0 1 f b 64 0 1 f # 9108 is_equal c a 64 0 1 f b 64 1 1 e # 9109 is_equal c a 64 0 1 f b 64 0 1 f # 9110 is_equal c a 64 0 1 f b 64 1 1 f # 9111 is_equal c a 64 0 1 f b 64 0 1 f # 9112 is_equal c a 64 0 1 f b 64 1 1 2 3 5 6 7 8 9 11 15 17 18 21 23 24 25 26 28 31 34 35 38 43 47 50 51 54 56 57 58 59 60 62 # 9113 is_equal c a 64 0 1 0 4 8 9 10 14 15 16 17 18 19 21 25 26 29 30 31 36 37 39 42 43 44 45 47 48 50 52 53 56 58 61 b 64 0 1 0 4 8 9 10 14 15 16 17 18 19 21 25 26 29 30 31 36 37 39 42 43 44 45 47 48 50 52 53 56 58 61 # 9114 is_equal c a 64 0 1 0 4 8 9 10 14 15 16 17 18 19 21 25 26 29 30 31 36 37 39 42 43 44 45 47 48 50 52 53 56 58 61 b 64 1 1 e # 9115 is_equal c a 64 0 1 2 7 8 11 13 21 22 25 27 28 29 33 34 37 39 41 42 44 46 47 51 53 54 55 56 61 62 b 64 0 1 2 7 8 11 13 21 22 25 27 28 29 33 34 37 39 41 42 44 46 47 51 53 54 55 56 61 62 # 9116 is_equal c a 64 0 1 2 7 8 11 13 21 22 25 27 28 29 33 34 37 39 41 42 44 46 47 51 53 54 55 56 61 62 b 64 1 1 f # 9117 is_equal c a 64 0 1 0 2 3 6 7 8 9 11 12 13 14 17 20 23 24 25 27 29 35 36 38 39 40 41 43 44 49 50 52 53 54 55 56 58 63 b 64 0 1 0 2 3 6 7 8 9 11 12 13 14 17 20 23 24 25 27 29 35 36 38 39 40 41 43 44 49 50 52 53 54 55 56 58 63 # 9118 is_equal c a 64 0 1 0 2 3 6 7 8 9 11 12 13 14 17 20 23 24 25 27 29 35 36 38 39 40 41 43 44 49 50 52 53 54 55 56 58 63 b 64 1 1 0 1 2 4 7 9 10 12 14 22 24 25 27 28 29 30 31 32 35 36 38 41 42 45 49 50 51 53 54 61 # 9119 is_equal c a 64 1 0 e b 64 1 0 e # 9120 is_equal c a 64 1 0 e b 64 0 0 e # 9121 is_equal c a 64 1 0 e b 64 1 0 e # 9122 is_equal c a 64 1 0 e b 64 0 0 f # 9123 is_equal c a 64 1 0 e b 64 1 0 e # 9124 is_equal c a 64 1 0 e b 64 0 0 2 4 5 6 9 11 12 13 15 16 17 18 20 21 22 25 26 27 28 29 30 33 34 36 37 38 40 42 43 46 50 51 57 60 62 # 9125 is_equal c a 64 1 0 f b 64 1 0 f # 9126 is_equal c a 64 1 0 f b 64 0 0 e # 9127 is_equal c a 64 1 0 f b 64 1 0 f # 9128 is_equal c a 64 1 0 f b 64 0 0 f # 9129 is_equal c a 64 1 0 f b 64 1 0 f # 9130 is_equal c a 64 1 0 f b 64 0 0 1 2 3 4 5 7 8 10 15 16 18 20 21 22 24 25 26 27 29 32 35 37 38 40 44 45 47 49 51 52 53 55 56 57 58 60 62 # 9131 is_equal c a 64 1 0 0 4 5 7 9 12 13 16 17 19 20 22 23 25 26 29 30 32 33 35 36 37 38 40 42 43 47 50 51 52 54 57 58 62 b 64 1 0 0 4 5 7 9 12 13 16 17 19 20 22 23 25 26 29 30 32 33 35 36 37 38 40 42 43 47 50 51 52 54 57 58 62 # 9132 is_equal c a 64 1 0 0 4 5 7 9 12 13 16 17 19 20 22 23 25 26 29 30 32 33 35 36 37 38 40 42 43 47 50 51 52 54 57 58 62 b 64 0 0 e # 9133 is_equal c a 64 1 0 6 8 9 15 16 17 18 19 23 27 28 29 33 34 37 38 40 41 45 46 48 49 53 54 59 b 64 1 0 6 8 9 15 16 17 18 19 23 27 28 29 33 34 37 38 40 41 45 46 48 49 53 54 59 # 9134 is_equal c a 64 1 0 6 8 9 15 16 17 18 19 23 27 28 29 33 34 37 38 40 41 45 46 48 49 53 54 59 b 64 0 0 f # 9135 is_equal c a 64 1 0 1 2 4 5 6 8 10 12 13 14 15 18 19 21 28 29 30 32 33 34 36 38 40 41 42 43 47 48 50 51 53 55 57 60 62 b 64 1 0 1 2 4 5 6 8 10 12 13 14 15 18 19 21 28 29 30 32 33 34 36 38 40 41 42 43 47 48 50 51 53 55 57 60 62 # 9136 is_equal c a 64 1 0 1 2 4 5 6 8 10 12 13 14 15 18 19 21 28 29 30 32 33 34 36 38 40 41 42 43 47 48 50 51 53 55 57 60 62 b 64 0 0 2 3 4 5 7 8 12 13 17 19 20 21 22 24 25 26 27 29 37 38 39 43 47 49 50 52 53 54 55 56 57 58 59 60 61 63 # 9137 is_equal c a 64 1 0 e b 64 1 0 e # 9138 is_equal c a 64 1 0 e b 64 0 1 e # 9139 is_equal c a 64 1 0 e b 64 1 0 e # 9140 is_equal c a 64 1 0 e b 64 0 1 f # 9141 is_equal c a 64 1 0 e b 64 1 0 e # 9142 is_equal c a 64 1 0 e b 64 0 1 1 4 8 9 13 15 16 19 20 22 23 26 27 30 31 37 41 43 45 48 49 50 51 52 53 54 59 60 63 # 9143 is_equal c a 64 1 0 f b 64 1 0 f # 9144 is_equal c a 64 1 0 f b 64 0 1 e # 9145 is_equal c a 64 1 0 f b 64 1 0 f # 9146 is_equal c a 64 1 0 f b 64 0 1 f # 9147 is_equal c a 64 1 0 f b 64 1 0 f # 9148 is_equal c a 64 1 0 f b 64 0 1 1 3 5 7 9 10 11 16 19 20 24 26 28 33 35 38 39 42 43 44 47 49 50 52 53 54 55 57 61 # 9149 is_equal c a 64 1 0 1 3 5 6 9 14 15 17 20 21 22 24 27 28 29 32 33 35 36 41 43 49 50 51 52 53 56 57 59 60 61 b 64 1 0 1 3 5 6 9 14 15 17 20 21 22 24 27 28 29 32 33 35 36 41 43 49 50 51 52 53 56 57 59 60 61 # 9150 is_equal c a 64 1 0 1 3 5 6 9 14 15 17 20 21 22 24 27 28 29 32 33 35 36 41 43 49 50 51 52 53 56 57 59 60 61 b 64 0 1 e # 9151 is_equal c a 64 1 0 0 1 5 6 7 8 10 11 12 15 16 18 19 20 23 24 25 26 27 28 33 34 35 36 37 38 40 41 43 44 45 46 47 49 50 52 53 55 56 58 60 61 62 b 64 1 0 0 1 5 6 7 8 10 11 12 15 16 18 19 20 23 24 25 26 27 28 33 34 35 36 37 38 40 41 43 44 45 46 47 49 50 52 53 55 56 58 60 61 62 # 9152 is_equal c a 64 1 0 0 1 5 6 7 8 10 11 12 15 16 18 19 20 23 24 25 26 27 28 33 34 35 36 37 38 40 41 43 44 45 46 47 49 50 52 53 55 56 58 60 61 62 b 64 0 1 f # 9153 is_equal c a 64 1 0 0 1 4 6 7 8 11 14 15 16 17 18 19 20 22 25 26 28 29 32 33 34 35 36 37 39 41 42 43 45 46 48 49 52 54 56 57 58 59 60 63 b 64 1 0 0 1 4 6 7 8 11 14 15 16 17 18 19 20 22 25 26 28 29 32 33 34 35 36 37 39 41 42 43 45 46 48 49 52 54 56 57 58 59 60 63 # 9154 is_equal c a 64 1 0 0 1 4 6 7 8 11 14 15 16 17 18 19 20 22 25 26 28 29 32 33 34 35 36 37 39 41 42 43 45 46 48 49 52 54 56 57 58 59 60 63 b 64 0 1 0 2 3 6 7 9 10 12 14 15 17 22 26 28 31 33 34 35 37 40 42 43 44 45 47 48 49 51 52 53 61 62 63 # 9155 is_equal c a 64 1 0 e b 64 1 0 e # 9156 is_equal c a 64 1 0 e b 64 1 0 e # 9157 is_equal c a 64 1 0 e b 64 1 0 e # 9158 is_equal c a 64 1 0 e b 64 1 0 f # 9159 is_equal c a 64 1 0 e b 64 1 0 e # 9160 is_equal c a 64 1 0 e b 64 1 0 0 1 2 3 10 15 18 23 25 27 28 30 32 33 36 37 38 41 42 43 45 46 49 50 51 52 54 59 # 9161 is_equal c a 64 1 0 f b 64 1 0 f # 9162 is_equal c a 64 1 0 f b 64 1 0 e # 9163 is_equal c a 64 1 0 f b 64 1 0 f # 9164 is_equal c a 64 1 0 f b 64 1 0 f # 9165 is_equal c a 64 1 0 f b 64 1 0 f # 9166 is_equal c a 64 1 0 f b 64 1 0 1 2 4 5 6 11 13 15 16 17 18 19 21 25 27 29 32 34 35 36 40 41 44 51 55 57 60 61 62 63 # 9167 is_equal c a 64 1 0 0 1 2 3 8 9 10 11 15 16 20 21 22 26 29 30 33 35 36 37 38 39 41 42 43 44 45 47 49 50 52 53 54 59 62 63 b 64 1 0 0 1 2 3 8 9 10 11 15 16 20 21 22 26 29 30 33 35 36 37 38 39 41 42 43 44 45 47 49 50 52 53 54 59 62 63 # 9168 is_equal c a 64 1 0 0 1 2 3 8 9 10 11 15 16 20 21 22 26 29 30 33 35 36 37 38 39 41 42 43 44 45 47 49 50 52 53 54 59 62 63 b 64 1 0 e # 9169 is_equal c a 64 1 0 4 9 12 13 14 16 17 18 20 21 22 28 31 33 38 42 44 45 46 47 48 49 51 52 53 55 59 60 61 62 b 64 1 0 4 9 12 13 14 16 17 18 20 21 22 28 31 33 38 42 44 45 46 47 48 49 51 52 53 55 59 60 61 62 # 9170 is_equal c a 64 1 0 4 9 12 13 14 16 17 18 20 21 22 28 31 33 38 42 44 45 46 47 48 49 51 52 53 55 59 60 61 62 b 64 1 0 f # 9171 is_equal c a 64 1 0 2 3 4 5 8 9 10 11 12 13 14 16 17 20 24 25 27 28 30 33 34 43 44 47 49 53 56 57 58 60 61 62 b 64 1 0 2 3 4 5 8 9 10 11 12 13 14 16 17 20 24 25 27 28 30 33 34 43 44 47 49 53 56 57 58 60 61 62 # 9172 is_equal c a 64 1 0 2 3 4 5 8 9 10 11 12 13 14 16 17 20 24 25 27 28 30 33 34 43 44 47 49 53 56 57 58 60 61 62 b 64 1 0 0 1 2 4 6 13 15 18 19 22 23 25 28 30 31 32 34 35 36 37 40 42 45 47 51 52 54 55 61 # 9173 is_equal c a 64 1 0 e b 64 1 0 e # 9174 is_equal c a 64 1 0 e b 64 1 1 e # 9175 is_equal c a 64 1 0 e b 64 1 0 e # 9176 is_equal c a 64 1 0 e b 64 1 1 f # 9177 is_equal c a 64 1 0 e b 64 1 0 e # 9178 is_equal c a 64 1 0 e b 64 1 1 4 5 7 13 15 16 17 19 22 23 25 27 28 32 33 34 35 36 38 39 43 44 45 47 49 50 51 55 57 58 62 63 # 9179 is_equal c a 64 1 0 f b 64 1 0 f # 9180 is_equal c a 64 1 0 f b 64 1 1 e # 9181 is_equal c a 64 1 0 f b 64 1 0 f # 9182 is_equal c a 64 1 0 f b 64 1 1 f # 9183 is_equal c a 64 1 0 f b 64 1 0 f # 9184 is_equal c a 64 1 0 f b 64 1 1 1 2 3 4 6 8 11 13 14 15 16 19 20 21 22 24 26 27 28 29 30 31 32 33 34 35 37 39 42 43 47 48 49 50 51 52 53 55 58 59 61 62 # 9185 is_equal c a 64 1 0 1 2 3 4 6 8 11 12 13 14 15 16 17 18 19 20 23 24 26 28 29 30 32 33 35 36 37 39 41 42 45 48 50 52 55 56 59 b 64 1 0 1 2 3 4 6 8 11 12 13 14 15 16 17 18 19 20 23 24 26 28 29 30 32 33 35 36 37 39 41 42 45 48 50 52 55 56 59 # 9186 is_equal c a 64 1 0 1 2 3 4 6 8 11 12 13 14 15 16 17 18 19 20 23 24 26 28 29 30 32 33 35 36 37 39 41 42 45 48 50 52 55 56 59 b 64 1 1 e # 9187 is_equal c a 64 1 0 0 3 5 6 7 8 13 15 20 21 23 25 27 29 33 35 36 37 38 39 42 43 46 47 48 51 53 54 55 56 58 59 60 b 64 1 0 0 3 5 6 7 8 13 15 20 21 23 25 27 29 33 35 36 37 38 39 42 43 46 47 48 51 53 54 55 56 58 59 60 # 9188 is_equal c a 64 1 0 0 3 5 6 7 8 13 15 20 21 23 25 27 29 33 35 36 37 38 39 42 43 46 47 48 51 53 54 55 56 58 59 60 b 64 1 1 f # 9189 is_equal c a 64 1 0 2 5 6 7 8 9 10 14 16 19 20 22 23 26 28 29 30 31 33 35 38 41 42 43 45 47 48 49 50 51 52 53 54 58 59 61 62 63 b 64 1 0 2 5 6 7 8 9 10 14 16 19 20 22 23 26 28 29 30 31 33 35 38 41 42 43 45 47 48 49 50 51 52 53 54 58 59 61 62 63 # 9190 is_equal c a 64 1 0 2 5 6 7 8 9 10 14 16 19 20 22 23 26 28 29 30 31 33 35 38 41 42 43 45 47 48 49 50 51 52 53 54 58 59 61 62 63 b 64 1 1 2 3 5 7 8 11 12 13 14 15 17 18 20 21 22 23 25 26 27 28 29 30 33 35 36 37 40 41 43 44 46 49 50 52 53 55 56 58 62 # 9191 is_equal c a 64 1 1 e b 64 1 1 e # 9192 is_equal c a 64 1 1 e b 64 0 0 e # 9193 is_equal c a 64 1 1 e b 64 1 1 e # 9194 is_equal c a 64 1 1 e b 64 0 0 f # 9195 is_equal c a 64 1 1 e b 64 1 1 e # 9196 is_equal c a 64 1 1 e b 64 0 0 1 3 4 5 7 8 9 10 13 14 15 16 23 24 27 28 31 33 34 35 38 42 43 46 47 48 52 53 57 59 60 61 62 # 9197 is_equal c a 64 1 1 f b 64 1 1 f # 9198 is_equal c a 64 1 1 f b 64 0 0 e # 9199 is_equal c a 64 1 1 f b 64 1 1 f # 9200 is_equal c a 64 1 1 f b 64 0 0 f # 9201 is_equal c a 64 1 1 f b 64 1 1 f # 9202 is_equal c a 64 1 1 f b 64 0 0 0 1 5 7 10 11 12 13 14 15 18 19 24 25 27 28 31 34 35 38 39 40 41 42 44 48 51 53 56 57 59 61 63 # 9203 is_equal c a 64 1 1 2 3 4 5 6 7 8 11 12 15 16 18 22 23 26 27 28 30 32 33 34 35 36 37 39 41 42 45 46 47 49 51 52 53 54 58 60 61 b 64 1 1 2 3 4 5 6 7 8 11 12 15 16 18 22 23 26 27 28 30 32 33 34 35 36 37 39 41 42 45 46 47 49 51 52 53 54 58 60 61 # 9204 is_equal c a 64 1 1 2 3 4 5 6 7 8 11 12 15 16 18 22 23 26 27 28 30 32 33 34 35 36 37 39 41 42 45 46 47 49 51 52 53 54 58 60 61 b 64 0 0 e # 9205 is_equal c a 64 1 1 5 6 9 10 11 12 13 14 17 18 20 21 22 25 27 29 31 33 35 39 40 41 42 43 44 46 49 50 52 54 55 58 59 62 63 b 64 1 1 5 6 9 10 11 12 13 14 17 18 20 21 22 25 27 29 31 33 35 39 40 41 42 43 44 46 49 50 52 54 55 58 59 62 63 # 9206 is_equal c a 64 1 1 5 6 9 10 11 12 13 14 17 18 20 21 22 25 27 29 31 33 35 39 40 41 42 43 44 46 49 50 52 54 55 58 59 62 63 b 64 0 0 f # 9207 is_equal c a 64 1 1 1 3 5 6 8 10 12 13 14 16 18 19 20 21 22 24 25 26 29 30 32 35 37 39 46 48 49 50 51 52 53 54 55 57 58 59 60 61 b 64 1 1 1 3 5 6 8 10 12 13 14 16 18 19 20 21 22 24 25 26 29 30 32 35 37 39 46 48 49 50 51 52 53 54 55 57 58 59 60 61 # 9208 is_equal c a 64 1 1 1 3 5 6 8 10 12 13 14 16 18 19 20 21 22 24 25 26 29 30 32 35 37 39 46 48 49 50 51 52 53 54 55 57 58 59 60 61 b 64 0 0 3 5 6 7 8 18 21 22 23 24 25 27 28 29 33 35 37 38 42 43 44 46 48 49 51 52 54 55 58 60 61 62 # 9209 is_equal c a 64 1 1 e b 64 1 1 e # 9210 is_equal c a 64 1 1 e b 64 0 1 e # 9211 is_equal c a 64 1 1 e b 64 1 1 e # 9212 is_equal c a 64 1 1 e b 64 0 1 f # 9213 is_equal c a 64 1 1 e b 64 1 1 e # 9214 is_equal c a 64 1 1 e b 64 0 1 0 2 5 6 8 11 12 14 20 25 26 28 29 30 31 33 34 37 38 43 47 48 49 50 51 55 61 62 # 9215 is_equal c a 64 1 1 f b 64 1 1 f # 9216 is_equal c a 64 1 1 f b 64 0 1 e # 9217 is_equal c a 64 1 1 f b 64 1 1 f # 9218 is_equal c a 64 1 1 f b 64 0 1 f # 9219 is_equal c a 64 1 1 f b 64 1 1 f # 9220 is_equal c a 64 1 1 f b 64 0 1 0 1 2 4 5 6 7 9 10 11 15 18 19 20 21 23 25 28 30 33 34 35 36 38 41 42 43 46 47 48 50 51 54 55 56 57 59 # 9221 is_equal c a 64 1 1 1 7 10 11 12 14 15 16 17 18 20 23 26 27 28 29 31 32 33 37 39 42 44 45 47 49 55 56 58 59 61 62 b 64 1 1 1 7 10 11 12 14 15 16 17 18 20 23 26 27 28 29 31 32 33 37 39 42 44 45 47 49 55 56 58 59 61 62 # 9222 is_equal c a 64 1 1 1 7 10 11 12 14 15 16 17 18 20 23 26 27 28 29 31 32 33 37 39 42 44 45 47 49 55 56 58 59 61 62 b 64 0 1 e # 9223 is_equal c a 64 1 1 0 1 2 3 4 6 7 14 15 19 20 21 22 23 24 25 28 35 38 39 40 43 44 46 49 52 54 55 56 58 59 60 63 b 64 1 1 0 1 2 3 4 6 7 14 15 19 20 21 22 23 24 25 28 35 38 39 40 43 44 46 49 52 54 55 56 58 59 60 63 # 9224 is_equal c a 64 1 1 0 1 2 3 4 6 7 14 15 19 20 21 22 23 24 25 28 35 38 39 40 43 44 46 49 52 54 55 56 58 59 60 63 b 64 0 1 f # 9225 is_equal c a 64 1 1 0 1 2 4 5 7 10 11 12 20 22 23 24 25 27 29 30 33 36 37 39 41 42 43 47 48 49 57 58 59 61 62 63 b 64 1 1 0 1 2 4 5 7 10 11 12 20 22 23 24 25 27 29 30 33 36 37 39 41 42 43 47 48 49 57 58 59 61 62 63 # 9226 is_equal c a 64 1 1 0 1 2 4 5 7 10 11 12 20 22 23 24 25 27 29 30 33 36 37 39 41 42 43 47 48 49 57 58 59 61 62 63 b 64 0 1 5 8 13 18 19 20 21 22 23 24 25 26 28 29 33 37 38 40 45 46 47 51 54 57 61 63 # 9227 is_equal c a 64 1 1 e b 64 1 1 e # 9228 is_equal c a 64 1 1 e b 64 1 0 e # 9229 is_equal c a 64 1 1 e b 64 1 1 e # 9230 is_equal c a 64 1 1 e b 64 1 0 f # 9231 is_equal c a 64 1 1 e b 64 1 1 e # 9232 is_equal c a 64 1 1 e b 64 1 0 1 3 4 7 8 9 11 13 14 15 18 19 20 21 25 27 29 30 31 32 33 34 35 39 40 41 42 44 45 48 49 51 52 54 59 61 62 # 9233 is_equal c a 64 1 1 f b 64 1 1 f # 9234 is_equal c a 64 1 1 f b 64 1 0 e # 9235 is_equal c a 64 1 1 f b 64 1 1 f # 9236 is_equal c a 64 1 1 f b 64 1 0 f # 9237 is_equal c a 64 1 1 f b 64 1 1 f # 9238 is_equal c a 64 1 1 f b 64 1 0 0 1 4 5 7 12 13 15 16 17 18 21 22 25 27 28 29 31 32 35 38 39 40 42 43 44 46 47 53 54 56 59 62 63 # 9239 is_equal c a 64 1 1 0 2 4 6 8 9 11 13 15 17 19 20 23 26 27 28 29 30 31 32 35 36 39 43 45 47 48 49 50 52 53 57 60 61 63 b 64 1 1 0 2 4 6 8 9 11 13 15 17 19 20 23 26 27 28 29 30 31 32 35 36 39 43 45 47 48 49 50 52 53 57 60 61 63 # 9240 is_equal c a 64 1 1 0 2 4 6 8 9 11 13 15 17 19 20 23 26 27 28 29 30 31 32 35 36 39 43 45 47 48 49 50 52 53 57 60 61 63 b 64 1 0 e # 9241 is_equal c a 64 1 1 1 4 5 9 10 11 12 14 18 22 23 25 27 28 29 30 32 34 35 36 38 40 41 42 43 45 47 50 51 53 54 55 56 58 59 63 b 64 1 1 1 4 5 9 10 11 12 14 18 22 23 25 27 28 29 30 32 34 35 36 38 40 41 42 43 45 47 50 51 53 54 55 56 58 59 63 # 9242 is_equal c a 64 1 1 1 4 5 9 10 11 12 14 18 22 23 25 27 28 29 30 32 34 35 36 38 40 41 42 43 45 47 50 51 53 54 55 56 58 59 63 b 64 1 0 f # 9243 is_equal c a 64 1 1 0 2 3 5 6 8 9 12 14 15 16 17 18 20 22 24 25 27 30 31 32 33 34 37 38 40 41 52 54 57 b 64 1 1 0 2 3 5 6 8 9 12 14 15 16 17 18 20 22 24 25 27 30 31 32 33 34 37 38 40 41 52 54 57 # 9244 is_equal c a 64 1 1 0 2 3 5 6 8 9 12 14 15 16 17 18 20 22 24 25 27 30 31 32 33 34 37 38 40 41 52 54 57 b 64 1 0 3 4 6 7 11 12 13 14 16 18 19 20 25 26 27 33 36 40 42 43 45 49 50 54 55 56 58 60 62 # 9245 is_equal c a 64 1 1 e b 64 1 1 e # 9246 is_equal c a 64 1 1 e b 64 1 1 e # 9247 is_equal c a 64 1 1 e b 64 1 1 e # 9248 is_equal c a 64 1 1 e b 64 1 1 f # 9249 is_equal c a 64 1 1 e b 64 1 1 e # 9250 is_equal c a 64 1 1 e b 64 1 1 0 1 2 3 5 7 10 11 13 14 15 16 17 21 28 31 34 37 39 50 51 54 55 56 60 61 63 # 9251 is_equal c a 64 1 1 f b 64 1 1 f # 9252 is_equal c a 64 1 1 f b 64 1 1 e # 9253 is_equal c a 64 1 1 f b 64 1 1 f # 9254 is_equal c a 64 1 1 f b 64 1 1 f # 9255 is_equal c a 64 1 1 f b 64 1 1 f # 9256 is_equal c a 64 1 1 f b 64 1 1 0 1 4 5 6 10 12 13 14 19 20 22 24 26 28 31 33 36 40 42 43 47 48 50 51 52 53 56 58 59 62 63 # 9257 is_equal c a 64 1 1 2 6 8 10 11 12 14 15 16 18 21 22 25 27 31 35 36 39 40 42 43 46 48 50 53 55 56 57 60 61 b 64 1 1 2 6 8 10 11 12 14 15 16 18 21 22 25 27 31 35 36 39 40 42 43 46 48 50 53 55 56 57 60 61 # 9258 is_equal c a 64 1 1 2 6 8 10 11 12 14 15 16 18 21 22 25 27 31 35 36 39 40 42 43 46 48 50 53 55 56 57 60 61 b 64 1 1 e # 9259 is_equal c a 64 1 1 1 4 5 7 8 9 14 16 18 22 23 24 27 31 33 36 37 38 39 40 44 45 46 50 51 52 53 54 55 57 58 59 62 63 b 64 1 1 1 4 5 7 8 9 14 16 18 22 23 24 27 31 33 36 37 38 39 40 44 45 46 50 51 52 53 54 55 57 58 59 62 63 # 9260 is_equal c a 64 1 1 1 4 5 7 8 9 14 16 18 22 23 24 27 31 33 36 37 38 39 40 44 45 46 50 51 52 53 54 55 57 58 59 62 63 b 64 1 1 f # 9261 is_equal c a 64 1 1 2 3 4 5 6 7 9 10 12 13 14 19 21 22 24 28 29 31 34 37 38 39 40 41 42 43 44 45 47 50 53 54 58 59 62 b 64 1 1 2 3 4 5 6 7 9 10 12 13 14 19 21 22 24 28 29 31 34 37 38 39 40 41 42 43 44 45 47 50 53 54 58 59 62 # 9262 is_equal c a 64 1 1 2 3 4 5 6 7 9 10 12 13 14 19 21 22 24 28 29 31 34 37 38 39 40 41 42 43 44 45 47 50 53 54 58 59 62 b 64 1 1 1 2 3 4 5 8 16 18 21 22 25 30 31 33 37 38 41 42 43 48 50 51 53 56 57 58 61 62 63 # 9263 is_equal c a 65 0 0 e b 65 0 0 e # 9264 is_equal c a 65 0 0 e b 65 0 0 e # 9265 is_equal c a 65 0 0 e b 65 0 0 e # 9266 is_equal c a 65 0 0 e b 65 0 0 f # 9267 is_equal c a 65 0 0 e b 65 0 0 e # 9268 is_equal c a 65 0 0 e b 65 0 0 0 5 7 8 10 13 14 17 20 21 22 23 24 25 28 31 32 34 40 41 42 44 45 48 49 50 51 53 54 56 59 61 # 9269 is_equal c a 65 0 0 f b 65 0 0 f # 9270 is_equal c a 65 0 0 f b 65 0 0 e # 9271 is_equal c a 65 0 0 f b 65 0 0 f # 9272 is_equal c a 65 0 0 f b 65 0 0 f # 9273 is_equal c a 65 0 0 f b 65 0 0 f # 9274 is_equal c a 65 0 0 f b 65 0 0 2 3 4 6 7 9 10 13 16 18 21 25 26 31 32 34 37 39 40 41 42 44 47 51 55 58 59 62 64 # 9275 is_equal c a 65 0 0 0 1 3 4 5 7 8 9 10 13 14 16 18 20 22 23 25 27 28 29 30 31 33 34 36 39 40 45 46 50 52 53 56 57 59 62 63 b 65 0 0 0 1 3 4 5 7 8 9 10 13 14 16 18 20 22 23 25 27 28 29 30 31 33 34 36 39 40 45 46 50 52 53 56 57 59 62 63 # 9276 is_equal c a 65 0 0 0 1 3 4 5 7 8 9 10 13 14 16 18 20 22 23 25 27 28 29 30 31 33 34 36 39 40 45 46 50 52 53 56 57 59 62 63 b 65 0 0 e # 9277 is_equal c a 65 0 0 3 4 6 9 10 12 13 14 16 21 25 26 28 29 30 33 34 37 38 39 40 46 49 50 51 52 53 55 56 57 59 60 62 63 b 65 0 0 3 4 6 9 10 12 13 14 16 21 25 26 28 29 30 33 34 37 38 39 40 46 49 50 51 52 53 55 56 57 59 60 62 63 # 9278 is_equal c a 65 0 0 3 4 6 9 10 12 13 14 16 21 25 26 28 29 30 33 34 37 38 39 40 46 49 50 51 52 53 55 56 57 59 60 62 63 b 65 0 0 f # 9279 is_equal c a 65 0 0 0 3 4 9 10 11 12 15 16 19 22 24 25 28 31 33 37 38 39 40 41 43 45 48 49 54 56 58 59 63 b 65 0 0 0 3 4 9 10 11 12 15 16 19 22 24 25 28 31 33 37 38 39 40 41 43 45 48 49 54 56 58 59 63 # 9280 is_equal c a 65 0 0 0 3 4 9 10 11 12 15 16 19 22 24 25 28 31 33 37 38 39 40 41 43 45 48 49 54 56 58 59 63 b 65 0 0 0 3 6 8 9 10 13 17 18 20 24 26 28 29 31 33 34 35 37 39 41 43 44 45 46 48 49 50 51 52 55 57 60 61 62 63 64 # 9281 is_equal c a 65 0 0 e b 65 0 0 e # 9282 is_equal c a 65 0 0 e b 65 0 1 e # 9283 is_equal c a 65 0 0 e b 65 0 0 e # 9284 is_equal c a 65 0 0 e b 65 0 1 f # 9285 is_equal c a 65 0 0 e b 65 0 0 e # 9286 is_equal c a 65 0 0 e b 65 0 1 0 1 2 4 5 6 7 9 10 12 16 20 22 23 24 25 28 31 39 40 43 45 49 50 51 54 55 60 61 63 64 # 9287 is_equal c a 65 0 0 f b 65 0 0 f # 9288 is_equal c a 65 0 0 f b 65 0 1 e # 9289 is_equal c a 65 0 0 f b 65 0 0 f # 9290 is_equal c a 65 0 0 f b 65 0 1 f # 9291 is_equal c a 65 0 0 f b 65 0 0 f # 9292 is_equal c a 65 0 0 f b 65 0 1 3 5 6 7 11 12 13 18 19 20 21 25 26 27 29 30 31 35 40 41 45 46 47 48 49 50 51 55 58 59 61 64 # 9293 is_equal c a 65 0 0 0 4 5 6 10 11 13 14 16 17 18 22 25 26 27 30 36 38 40 41 44 46 47 52 54 56 57 60 b 65 0 0 0 4 5 6 10 11 13 14 16 17 18 22 25 26 27 30 36 38 40 41 44 46 47 52 54 56 57 60 # 9294 is_equal c a 65 0 0 0 4 5 6 10 11 13 14 16 17 18 22 25 26 27 30 36 38 40 41 44 46 47 52 54 56 57 60 b 65 0 1 e # 9295 is_equal c a 65 0 0 0 1 5 8 9 10 12 13 16 17 20 23 24 26 27 28 31 32 33 36 37 38 39 40 41 42 43 46 50 52 53 57 61 64 b 65 0 0 0 1 5 8 9 10 12 13 16 17 20 23 24 26 27 28 31 32 33 36 37 38 39 40 41 42 43 46 50 52 53 57 61 64 # 9296 is_equal c a 65 0 0 0 1 5 8 9 10 12 13 16 17 20 23 24 26 27 28 31 32 33 36 37 38 39 40 41 42 43 46 50 52 53 57 61 64 b 65 0 1 f # 9297 is_equal c a 65 0 0 0 1 2 3 6 9 10 11 12 15 16 17 18 19 24 25 27 29 30 35 36 41 43 45 46 48 49 52 53 55 56 57 60 62 64 b 65 0 0 0 1 2 3 6 9 10 11 12 15 16 17 18 19 24 25 27 29 30 35 36 41 43 45 46 48 49 52 53 55 56 57 60 62 64 # 9298 is_equal c a 65 0 0 0 1 2 3 6 9 10 11 12 15 16 17 18 19 24 25 27 29 30 35 36 41 43 45 46 48 49 52 53 55 56 57 60 62 64 b 65 0 1 2 3 6 8 9 10 11 12 13 14 15 17 18 19 22 24 25 28 30 31 32 33 34 36 37 38 39 40 43 47 50 51 52 55 58 60 61 63 64 # 9299 is_equal c a 65 0 0 e b 65 0 0 e # 9300 is_equal c a 65 0 0 e b 65 1 0 e # 9301 is_equal c a 65 0 0 e b 65 0 0 e # 9302 is_equal c a 65 0 0 e b 65 1 0 f # 9303 is_equal c a 65 0 0 e b 65 0 0 e # 9304 is_equal c a 65 0 0 e b 65 1 0 0 1 2 3 4 8 10 12 15 18 19 23 26 28 29 31 32 33 37 38 42 43 44 46 49 50 51 54 55 56 57 60 # 9305 is_equal c a 65 0 0 f b 65 0 0 f # 9306 is_equal c a 65 0 0 f b 65 1 0 e # 9307 is_equal c a 65 0 0 f b 65 0 0 f # 9308 is_equal c a 65 0 0 f b 65 1 0 f # 9309 is_equal c a 65 0 0 f b 65 0 0 f # 9310 is_equal c a 65 0 0 f b 65 1 0 0 1 2 3 4 6 9 12 14 15 17 18 19 20 21 23 24 25 26 30 31 33 34 35 37 39 40 43 44 53 56 57 58 59 61 62 64 # 9311 is_equal c a 65 0 0 0 4 5 9 13 14 15 16 17 19 27 29 30 33 34 36 37 40 41 42 49 51 53 54 59 62 63 b 65 0 0 0 4 5 9 13 14 15 16 17 19 27 29 30 33 34 36 37 40 41 42 49 51 53 54 59 62 63 # 9312 is_equal c a 65 0 0 0 4 5 9 13 14 15 16 17 19 27 29 30 33 34 36 37 40 41 42 49 51 53 54 59 62 63 b 65 1 0 e # 9313 is_equal c a 65 0 0 0 3 4 6 10 11 12 16 17 18 20 22 24 26 27 29 34 35 36 37 40 42 43 44 47 49 53 54 55 57 58 59 60 63 64 b 65 0 0 0 3 4 6 10 11 12 16 17 18 20 22 24 26 27 29 34 35 36 37 40 42 43 44 47 49 53 54 55 57 58 59 60 63 64 # 9314 is_equal c a 65 0 0 0 3 4 6 10 11 12 16 17 18 20 22 24 26 27 29 34 35 36 37 40 42 43 44 47 49 53 54 55 57 58 59 60 63 64 b 65 1 0 f # 9315 is_equal c a 65 0 0 1 2 3 5 6 7 8 9 10 12 13 15 16 17 19 26 28 29 31 32 33 34 36 37 39 40 43 45 46 49 51 53 58 59 62 b 65 0 0 1 2 3 5 6 7 8 9 10 12 13 15 16 17 19 26 28 29 31 32 33 34 36 37 39 40 43 45 46 49 51 53 58 59 62 # 9316 is_equal c a 65 0 0 1 2 3 5 6 7 8 9 10 12 13 15 16 17 19 26 28 29 31 32 33 34 36 37 39 40 43 45 46 49 51 53 58 59 62 b 65 1 0 0 1 3 6 7 10 14 17 20 21 24 29 33 35 36 40 42 43 44 49 52 53 55 57 58 59 60 # 9317 is_equal c a 65 0 0 e b 65 0 0 e # 9318 is_equal c a 65 0 0 e b 65 1 1 e # 9319 is_equal c a 65 0 0 e b 65 0 0 e # 9320 is_equal c a 65 0 0 e b 65 1 1 f # 9321 is_equal c a 65 0 0 e b 65 0 0 e # 9322 is_equal c a 65 0 0 e b 65 1 1 0 1 5 6 7 9 10 11 13 15 18 20 22 23 25 26 27 29 32 34 37 39 40 42 43 45 46 47 49 55 58 59 61 # 9323 is_equal c a 65 0 0 f b 65 0 0 f # 9324 is_equal c a 65 0 0 f b 65 1 1 e # 9325 is_equal c a 65 0 0 f b 65 0 0 f # 9326 is_equal c a 65 0 0 f b 65 1 1 f # 9327 is_equal c a 65 0 0 f b 65 0 0 f # 9328 is_equal c a 65 0 0 f b 65 1 1 0 1 2 3 10 14 16 19 20 23 24 25 27 34 36 38 39 40 41 45 46 47 50 51 54 60 61 62 63 # 9329 is_equal c a 65 0 0 0 2 5 9 15 19 21 22 23 31 32 38 39 42 43 44 48 49 50 53 55 57 58 59 62 64 b 65 0 0 0 2 5 9 15 19 21 22 23 31 32 38 39 42 43 44 48 49 50 53 55 57 58 59 62 64 # 9330 is_equal c a 65 0 0 0 2 5 9 15 19 21 22 23 31 32 38 39 42 43 44 48 49 50 53 55 57 58 59 62 64 b 65 1 1 e # 9331 is_equal c a 65 0 0 0 1 6 7 11 12 13 14 15 16 19 21 24 25 28 29 31 33 35 37 38 44 45 47 51 53 54 56 58 63 b 65 0 0 0 1 6 7 11 12 13 14 15 16 19 21 24 25 28 29 31 33 35 37 38 44 45 47 51 53 54 56 58 63 # 9332 is_equal c a 65 0 0 0 1 6 7 11 12 13 14 15 16 19 21 24 25 28 29 31 33 35 37 38 44 45 47 51 53 54 56 58 63 b 65 1 1 f # 9333 is_equal c a 65 0 0 1 2 6 7 10 12 14 16 18 19 23 25 27 29 31 32 33 38 39 40 41 45 46 50 51 52 54 55 58 59 61 63 64 b 65 0 0 1 2 6 7 10 12 14 16 18 19 23 25 27 29 31 32 33 38 39 40 41 45 46 50 51 52 54 55 58 59 61 63 64 # 9334 is_equal c a 65 0 0 1 2 6 7 10 12 14 16 18 19 23 25 27 29 31 32 33 38 39 40 41 45 46 50 51 52 54 55 58 59 61 63 64 b 65 1 1 0 3 5 6 7 12 14 17 19 20 23 24 27 28 30 35 38 41 42 46 47 50 51 54 56 62 63 64 # 9335 is_equal c a 65 0 1 e b 65 0 1 e # 9336 is_equal c a 65 0 1 e b 65 0 0 e # 9337 is_equal c a 65 0 1 e b 65 0 1 e # 9338 is_equal c a 65 0 1 e b 65 0 0 f # 9339 is_equal c a 65 0 1 e b 65 0 1 e # 9340 is_equal c a 65 0 1 e b 65 0 0 1 2 3 9 10 11 12 13 14 15 16 17 20 21 25 26 27 28 29 30 33 34 35 40 43 46 50 55 56 58 59 60 62 # 9341 is_equal c a 65 0 1 f b 65 0 1 f # 9342 is_equal c a 65 0 1 f b 65 0 0 e # 9343 is_equal c a 65 0 1 f b 65 0 1 f # 9344 is_equal c a 65 0 1 f b 65 0 0 f # 9345 is_equal c a 65 0 1 f b 65 0 1 f # 9346 is_equal c a 65 0 1 f b 65 0 0 0 4 5 9 10 12 14 15 17 19 21 22 23 24 26 32 33 34 35 36 37 40 42 43 44 46 49 50 51 52 53 54 55 58 59 60 # 9347 is_equal c a 65 0 1 0 3 5 6 7 9 11 13 16 22 23 27 28 29 31 33 34 35 37 39 41 42 43 44 48 49 50 53 54 59 62 63 b 65 0 1 0 3 5 6 7 9 11 13 16 22 23 27 28 29 31 33 34 35 37 39 41 42 43 44 48 49 50 53 54 59 62 63 # 9348 is_equal c a 65 0 1 0 3 5 6 7 9 11 13 16 22 23 27 28 29 31 33 34 35 37 39 41 42 43 44 48 49 50 53 54 59 62 63 b 65 0 0 e # 9349 is_equal c a 65 0 1 2 4 5 6 7 8 9 10 19 21 23 27 28 30 32 33 34 35 38 44 45 46 47 50 51 54 62 64 b 65 0 1 2 4 5 6 7 8 9 10 19 21 23 27 28 30 32 33 34 35 38 44 45 46 47 50 51 54 62 64 # 9350 is_equal c a 65 0 1 2 4 5 6 7 8 9 10 19 21 23 27 28 30 32 33 34 35 38 44 45 46 47 50 51 54 62 64 b 65 0 0 f # 9351 is_equal c a 65 0 1 0 1 4 5 9 10 11 12 13 15 16 17 20 21 22 23 24 29 31 32 33 37 38 39 40 41 42 44 45 47 48 49 50 51 53 54 56 58 60 61 63 64 b 65 0 1 0 1 4 5 9 10 11 12 13 15 16 17 20 21 22 23 24 29 31 32 33 37 38 39 40 41 42 44 45 47 48 49 50 51 53 54 56 58 60 61 63 64 # 9352 is_equal c a 65 0 1 0 1 4 5 9 10 11 12 13 15 16 17 20 21 22 23 24 29 31 32 33 37 38 39 40 41 42 44 45 47 48 49 50 51 53 54 56 58 60 61 63 64 b 65 0 0 4 5 6 7 8 11 12 14 15 19 21 22 31 40 41 42 43 44 45 49 54 55 59 60 61 62 # 9353 is_equal c a 65 0 1 e b 65 0 1 e # 9354 is_equal c a 65 0 1 e b 65 0 1 e # 9355 is_equal c a 65 0 1 e b 65 0 1 e # 9356 is_equal c a 65 0 1 e b 65 0 1 f # 9357 is_equal c a 65 0 1 e b 65 0 1 e # 9358 is_equal c a 65 0 1 e b 65 0 1 1 2 4 5 7 8 9 10 11 13 14 18 21 22 23 25 26 27 28 29 32 33 34 35 36 37 39 40 42 45 46 50 51 53 54 56 59 61 64 # 9359 is_equal c a 65 0 1 f b 65 0 1 f # 9360 is_equal c a 65 0 1 f b 65 0 1 e # 9361 is_equal c a 65 0 1 f b 65 0 1 f # 9362 is_equal c a 65 0 1 f b 65 0 1 f # 9363 is_equal c a 65 0 1 f b 65 0 1 f # 9364 is_equal c a 65 0 1 f b 65 0 1 0 1 2 3 5 6 7 10 15 18 20 24 26 27 28 31 34 35 36 37 42 44 50 52 54 55 56 57 59 61 # 9365 is_equal c a 65 0 1 3 4 5 9 11 12 13 16 17 18 20 21 23 25 26 31 32 33 34 37 38 39 40 41 42 43 44 45 46 48 49 50 52 53 55 56 60 61 b 65 0 1 3 4 5 9 11 12 13 16 17 18 20 21 23 25 26 31 32 33 34 37 38 39 40 41 42 43 44 45 46 48 49 50 52 53 55 56 60 61 # 9366 is_equal c a 65 0 1 3 4 5 9 11 12 13 16 17 18 20 21 23 25 26 31 32 33 34 37 38 39 40 41 42 43 44 45 46 48 49 50 52 53 55 56 60 61 b 65 0 1 e # 9367 is_equal c a 65 0 1 0 1 2 3 4 5 6 7 8 11 13 16 17 19 22 29 30 32 33 36 40 41 44 45 46 48 49 51 53 55 57 58 59 61 b 65 0 1 0 1 2 3 4 5 6 7 8 11 13 16 17 19 22 29 30 32 33 36 40 41 44 45 46 48 49 51 53 55 57 58 59 61 # 9368 is_equal c a 65 0 1 0 1 2 3 4 5 6 7 8 11 13 16 17 19 22 29 30 32 33 36 40 41 44 45 46 48 49 51 53 55 57 58 59 61 b 65 0 1 f # 9369 is_equal c a 65 0 1 0 1 3 4 5 6 7 8 9 11 12 13 15 18 20 21 23 24 30 36 37 38 39 40 42 43 47 48 50 51 55 56 57 64 b 65 0 1 0 1 3 4 5 6 7 8 9 11 12 13 15 18 20 21 23 24 30 36 37 38 39 40 42 43 47 48 50 51 55 56 57 64 # 9370 is_equal c a 65 0 1 0 1 3 4 5 6 7 8 9 11 12 13 15 18 20 21 23 24 30 36 37 38 39 40 42 43 47 48 50 51 55 56 57 64 b 65 0 1 0 1 2 3 4 5 6 10 11 12 18 19 20 21 22 25 26 27 32 34 35 36 37 38 41 45 46 47 48 50 51 57 59 61 64 # 9371 is_equal c a 65 0 1 e b 65 0 1 e # 9372 is_equal c a 65 0 1 e b 65 1 0 e # 9373 is_equal c a 65 0 1 e b 65 0 1 e # 9374 is_equal c a 65 0 1 e b 65 1 0 f # 9375 is_equal c a 65 0 1 e b 65 0 1 e # 9376 is_equal c a 65 0 1 e b 65 1 0 1 2 3 4 7 8 10 13 15 18 19 24 26 28 29 31 32 34 35 36 38 39 40 41 43 45 46 47 48 49 50 54 55 56 57 59 60 61 62 63 # 9377 is_equal c a 65 0 1 f b 65 0 1 f # 9378 is_equal c a 65 0 1 f b 65 1 0 e # 9379 is_equal c a 65 0 1 f b 65 0 1 f # 9380 is_equal c a 65 0 1 f b 65 1 0 f # 9381 is_equal c a 65 0 1 f b 65 0 1 f # 9382 is_equal c a 65 0 1 f b 65 1 0 0 1 3 6 9 10 13 16 17 20 24 25 27 28 29 32 33 39 40 42 44 46 47 48 50 51 52 55 58 59 # 9383 is_equal c a 65 0 1 0 4 9 13 15 16 23 24 28 29 31 33 41 42 43 44 47 48 49 50 56 57 59 61 62 63 64 b 65 0 1 0 4 9 13 15 16 23 24 28 29 31 33 41 42 43 44 47 48 49 50 56 57 59 61 62 63 64 # 9384 is_equal c a 65 0 1 0 4 9 13 15 16 23 24 28 29 31 33 41 42 43 44 47 48 49 50 56 57 59 61 62 63 64 b 65 1 0 e # 9385 is_equal c a 65 0 1 1 3 5 6 8 9 10 13 14 16 21 26 35 39 40 44 47 49 50 51 52 55 57 59 63 64 b 65 0 1 1 3 5 6 8 9 10 13 14 16 21 26 35 39 40 44 47 49 50 51 52 55 57 59 63 64 # 9386 is_equal c a 65 0 1 1 3 5 6 8 9 10 13 14 16 21 26 35 39 40 44 47 49 50 51 52 55 57 59 63 64 b 65 1 0 f # 9387 is_equal c a 65 0 1 1 3 6 9 11 22 25 26 27 28 29 30 32 37 38 39 40 42 45 46 47 51 55 56 58 59 61 b 65 0 1 1 3 6 9 11 22 25 26 27 28 29 30 32 37 38 39 40 42 45 46 47 51 55 56 58 59 61 # 9388 is_equal c a 65 0 1 1 3 6 9 11 22 25 26 27 28 29 30 32 37 38 39 40 42 45 46 47 51 55 56 58 59 61 b 65 1 0 0 2 3 5 6 10 13 14 16 18 20 21 23 24 27 28 32 33 36 37 38 41 42 46 48 49 50 51 52 53 54 55 57 58 59 # 9389 is_equal c a 65 0 1 e b 65 0 1 e # 9390 is_equal c a 65 0 1 e b 65 1 1 e # 9391 is_equal c a 65 0 1 e b 65 0 1 e # 9392 is_equal c a 65 0 1 e b 65 1 1 f # 9393 is_equal c a 65 0 1 e b 65 0 1 e # 9394 is_equal c a 65 0 1 e b 65 1 1 0 1 2 3 6 8 10 16 19 20 23 27 28 29 30 32 33 40 42 46 52 53 56 57 58 59 60 61 63 64 # 9395 is_equal c a 65 0 1 f b 65 0 1 f # 9396 is_equal c a 65 0 1 f b 65 1 1 e # 9397 is_equal c a 65 0 1 f b 65 0 1 f # 9398 is_equal c a 65 0 1 f b 65 1 1 f # 9399 is_equal c a 65 0 1 f b 65 0 1 f # 9400 is_equal c a 65 0 1 f b 65 1 1 1 3 7 9 13 14 15 19 20 21 22 23 24 25 26 27 28 29 30 32 33 37 38 39 43 44 46 48 51 52 54 55 56 57 59 # 9401 is_equal c a 65 0 1 0 2 6 7 8 9 10 11 12 13 14 15 18 21 23 28 29 30 31 35 36 39 42 43 46 48 49 50 52 55 56 57 59 62 63 64 b 65 0 1 0 2 6 7 8 9 10 11 12 13 14 15 18 21 23 28 29 30 31 35 36 39 42 43 46 48 49 50 52 55 56 57 59 62 63 64 # 9402 is_equal c a 65 0 1 0 2 6 7 8 9 10 11 12 13 14 15 18 21 23 28 29 30 31 35 36 39 42 43 46 48 49 50 52 55 56 57 59 62 63 64 b 65 1 1 e # 9403 is_equal c a 65 0 1 0 2 4 11 13 14 16 17 23 24 27 30 32 35 36 37 38 42 43 45 48 49 50 51 52 54 55 56 58 60 64 b 65 0 1 0 2 4 11 13 14 16 17 23 24 27 30 32 35 36 37 38 42 43 45 48 49 50 51 52 54 55 56 58 60 64 # 9404 is_equal c a 65 0 1 0 2 4 11 13 14 16 17 23 24 27 30 32 35 36 37 38 42 43 45 48 49 50 51 52 54 55 56 58 60 64 b 65 1 1 f # 9405 is_equal c a 65 0 1 0 2 3 7 11 12 13 14 15 16 17 18 20 26 27 28 30 31 32 33 34 35 36 38 40 41 43 44 45 46 48 50 52 53 54 57 58 61 63 b 65 0 1 0 2 3 7 11 12 13 14 15 16 17 18 20 26 27 28 30 31 32 33 34 35 36 38 40 41 43 44 45 46 48 50 52 53 54 57 58 61 63 # 9406 is_equal c a 65 0 1 0 2 3 7 11 12 13 14 15 16 17 18 20 26 27 28 30 31 32 33 34 35 36 38 40 41 43 44 45 46 48 50 52 53 54 57 58 61 63 b 65 1 1 1 3 4 5 6 7 8 9 11 12 13 14 16 19 20 23 25 26 29 30 31 32 34 35 36 37 39 40 41 42 44 45 46 47 48 49 51 53 54 55 57 59 60 61 63 # 9407 is_equal c a 65 1 0 e b 65 1 0 e # 9408 is_equal c a 65 1 0 e b 65 0 0 e # 9409 is_equal c a 65 1 0 e b 65 1 0 e # 9410 is_equal c a 65 1 0 e b 65 0 0 f # 9411 is_equal c a 65 1 0 e b 65 1 0 e # 9412 is_equal c a 65 1 0 e b 65 0 0 3 4 6 7 10 11 12 13 14 15 17 19 20 24 27 28 29 30 31 34 37 39 40 42 43 45 46 48 52 53 54 55 59 62 63 64 # 9413 is_equal c a 65 1 0 f b 65 1 0 f # 9414 is_equal c a 65 1 0 f b 65 0 0 e # 9415 is_equal c a 65 1 0 f b 65 1 0 f # 9416 is_equal c a 65 1 0 f b 65 0 0 f # 9417 is_equal c a 65 1 0 f b 65 1 0 f # 9418 is_equal c a 65 1 0 f b 65 0 0 0 3 4 5 6 8 9 12 13 17 20 21 22 23 25 27 28 29 30 31 33 35 36 39 40 41 43 44 46 50 51 54 55 58 59 62 # 9419 is_equal c a 65 1 0 4 11 18 19 22 25 26 27 28 31 32 33 36 37 38 44 45 46 47 48 49 50 53 54 56 60 b 65 1 0 4 11 18 19 22 25 26 27 28 31 32 33 36 37 38 44 45 46 47 48 49 50 53 54 56 60 # 9420 is_equal c a 65 1 0 4 11 18 19 22 25 26 27 28 31 32 33 36 37 38 44 45 46 47 48 49 50 53 54 56 60 b 65 0 0 e # 9421 is_equal c a 65 1 0 0 1 3 4 5 9 10 11 12 13 14 16 18 20 25 27 29 32 35 38 41 43 44 47 48 51 55 58 62 63 64 b 65 1 0 0 1 3 4 5 9 10 11 12 13 14 16 18 20 25 27 29 32 35 38 41 43 44 47 48 51 55 58 62 63 64 # 9422 is_equal c a 65 1 0 0 1 3 4 5 9 10 11 12 13 14 16 18 20 25 27 29 32 35 38 41 43 44 47 48 51 55 58 62 63 64 b 65 0 0 f # 9423 is_equal c a 65 1 0 0 1 2 4 6 7 8 9 10 16 17 18 21 23 24 25 26 28 29 30 31 32 33 37 40 41 42 43 53 56 58 59 61 63 64 b 65 1 0 0 1 2 4 6 7 8 9 10 16 17 18 21 23 24 25 26 28 29 30 31 32 33 37 40 41 42 43 53 56 58 59 61 63 64 # 9424 is_equal c a 65 1 0 0 1 2 4 6 7 8 9 10 16 17 18 21 23 24 25 26 28 29 30 31 32 33 37 40 41 42 43 53 56 58 59 61 63 64 b 65 0 0 0 3 4 5 7 8 11 12 16 17 18 19 20 22 25 27 30 31 32 33 34 35 36 40 41 43 45 52 54 55 56 58 60 61 63 64 # 9425 is_equal c a 65 1 0 e b 65 1 0 e # 9426 is_equal c a 65 1 0 e b 65 0 1 e # 9427 is_equal c a 65 1 0 e b 65 1 0 e # 9428 is_equal c a 65 1 0 e b 65 0 1 f # 9429 is_equal c a 65 1 0 e b 65 1 0 e # 9430 is_equal c a 65 1 0 e b 65 0 1 0 4 5 6 7 9 10 12 14 18 19 20 21 22 24 25 26 27 29 33 36 38 41 42 47 48 51 54 57 60 61 62 63 64 # 9431 is_equal c a 65 1 0 f b 65 1 0 f # 9432 is_equal c a 65 1 0 f b 65 0 1 e # 9433 is_equal c a 65 1 0 f b 65 1 0 f # 9434 is_equal c a 65 1 0 f b 65 0 1 f # 9435 is_equal c a 65 1 0 f b 65 1 0 f # 9436 is_equal c a 65 1 0 f b 65 0 1 2 3 6 8 12 16 17 18 19 20 23 25 26 29 30 31 32 33 36 39 40 41 45 46 47 48 50 51 52 54 56 # 9437 is_equal c a 65 1 0 0 4 6 7 8 15 17 20 21 25 27 29 30 31 40 42 43 44 45 46 47 48 51 52 53 54 56 58 61 b 65 1 0 0 4 6 7 8 15 17 20 21 25 27 29 30 31 40 42 43 44 45 46 47 48 51 52 53 54 56 58 61 # 9438 is_equal c a 65 1 0 0 4 6 7 8 15 17 20 21 25 27 29 30 31 40 42 43 44 45 46 47 48 51 52 53 54 56 58 61 b 65 0 1 e # 9439 is_equal c a 65 1 0 1 2 3 4 5 8 11 14 16 19 21 22 23 24 25 27 29 30 31 33 36 37 38 43 45 49 50 51 53 54 56 58 59 60 61 62 64 b 65 1 0 1 2 3 4 5 8 11 14 16 19 21 22 23 24 25 27 29 30 31 33 36 37 38 43 45 49 50 51 53 54 56 58 59 60 61 62 64 # 9440 is_equal c a 65 1 0 1 2 3 4 5 8 11 14 16 19 21 22 23 24 25 27 29 30 31 33 36 37 38 43 45 49 50 51 53 54 56 58 59 60 61 62 64 b 65 0 1 f # 9441 is_equal c a 65 1 0 1 4 5 6 10 12 13 14 16 17 18 19 20 23 26 30 34 38 39 40 42 43 45 53 55 58 60 61 62 b 65 1 0 1 4 5 6 10 12 13 14 16 17 18 19 20 23 26 30 34 38 39 40 42 43 45 53 55 58 60 61 62 # 9442 is_equal c a 65 1 0 1 4 5 6 10 12 13 14 16 17 18 19 20 23 26 30 34 38 39 40 42 43 45 53 55 58 60 61 62 b 65 0 1 0 1 2 5 7 8 9 13 14 18 19 21 23 24 25 27 28 29 34 35 36 37 38 39 40 46 47 49 50 51 53 54 56 58 60 62 # 9443 is_equal c a 65 1 0 e b 65 1 0 e # 9444 is_equal c a 65 1 0 e b 65 1 0 e # 9445 is_equal c a 65 1 0 e b 65 1 0 e # 9446 is_equal c a 65 1 0 e b 65 1 0 f # 9447 is_equal c a 65 1 0 e b 65 1 0 e # 9448 is_equal c a 65 1 0 e b 65 1 0 0 3 6 7 9 11 12 16 18 19 20 22 29 30 31 34 35 36 38 42 46 49 52 54 57 58 59 60 61 62 63 # 9449 is_equal c a 65 1 0 f b 65 1 0 f # 9450 is_equal c a 65 1 0 f b 65 1 0 e # 9451 is_equal c a 65 1 0 f b 65 1 0 f # 9452 is_equal c a 65 1 0 f b 65 1 0 f # 9453 is_equal c a 65 1 0 f b 65 1 0 f # 9454 is_equal c a 65 1 0 f b 65 1 0 1 2 3 7 9 13 14 22 25 26 27 29 31 32 34 38 39 43 44 46 48 50 51 52 53 55 58 59 62 63 # 9455 is_equal c a 65 1 0 0 2 5 6 8 13 14 15 17 22 25 26 27 28 29 31 32 36 37 38 39 43 44 46 50 52 54 57 58 59 62 b 65 1 0 0 2 5 6 8 13 14 15 17 22 25 26 27 28 29 31 32 36 37 38 39 43 44 46 50 52 54 57 58 59 62 # 9456 is_equal c a 65 1 0 0 2 5 6 8 13 14 15 17 22 25 26 27 28 29 31 32 36 37 38 39 43 44 46 50 52 54 57 58 59 62 b 65 1 0 e # 9457 is_equal c a 65 1 0 0 1 3 7 8 10 11 16 17 20 22 25 26 27 33 35 37 39 42 43 48 50 51 52 53 59 60 63 b 65 1 0 0 1 3 7 8 10 11 16 17 20 22 25 26 27 33 35 37 39 42 43 48 50 51 52 53 59 60 63 # 9458 is_equal c a 65 1 0 0 1 3 7 8 10 11 16 17 20 22 25 26 27 33 35 37 39 42 43 48 50 51 52 53 59 60 63 b 65 1 0 f # 9459 is_equal c a 65 1 0 0 1 3 10 11 14 15 18 20 22 23 24 25 26 29 33 35 37 39 40 42 44 48 51 52 54 55 56 58 63 b 65 1 0 0 1 3 10 11 14 15 18 20 22 23 24 25 26 29 33 35 37 39 40 42 44 48 51 52 54 55 56 58 63 # 9460 is_equal c a 65 1 0 0 1 3 10 11 14 15 18 20 22 23 24 25 26 29 33 35 37 39 40 42 44 48 51 52 54 55 56 58 63 b 65 1 0 0 2 4 5 7 8 9 10 13 15 17 18 19 20 21 22 24 25 30 32 33 34 36 42 43 45 46 47 48 49 51 54 59 60 62 64 # 9461 is_equal c a 65 1 0 e b 65 1 0 e # 9462 is_equal c a 65 1 0 e b 65 1 1 e # 9463 is_equal c a 65 1 0 e b 65 1 0 e # 9464 is_equal c a 65 1 0 e b 65 1 1 f # 9465 is_equal c a 65 1 0 e b 65 1 0 e # 9466 is_equal c a 65 1 0 e b 65 1 1 0 1 2 3 7 8 9 10 11 12 13 14 17 18 20 22 24 26 27 30 33 35 36 38 39 41 42 45 46 47 48 49 52 53 54 55 57 58 59 61 63 # 9467 is_equal c a 65 1 0 f b 65 1 0 f # 9468 is_equal c a 65 1 0 f b 65 1 1 e # 9469 is_equal c a 65 1 0 f b 65 1 0 f # 9470 is_equal c a 65 1 0 f b 65 1 1 f # 9471 is_equal c a 65 1 0 f b 65 1 0 f # 9472 is_equal c a 65 1 0 f b 65 1 1 1 3 9 10 16 17 19 21 24 30 31 32 34 36 38 42 43 44 46 47 48 53 54 55 56 64 # 9473 is_equal c a 65 1 0 1 2 3 4 9 11 12 13 14 20 24 25 26 31 34 35 36 37 40 43 45 47 49 58 63 64 b 65 1 0 1 2 3 4 9 11 12 13 14 20 24 25 26 31 34 35 36 37 40 43 45 47 49 58 63 64 # 9474 is_equal c a 65 1 0 1 2 3 4 9 11 12 13 14 20 24 25 26 31 34 35 36 37 40 43 45 47 49 58 63 64 b 65 1 1 e # 9475 is_equal c a 65 1 0 0 1 2 3 4 6 9 10 13 14 15 17 19 22 23 28 29 31 32 33 34 35 37 39 40 43 45 46 48 52 55 56 61 64 b 65 1 0 0 1 2 3 4 6 9 10 13 14 15 17 19 22 23 28 29 31 32 33 34 35 37 39 40 43 45 46 48 52 55 56 61 64 # 9476 is_equal c a 65 1 0 0 1 2 3 4 6 9 10 13 14 15 17 19 22 23 28 29 31 32 33 34 35 37 39 40 43 45 46 48 52 55 56 61 64 b 65 1 1 f # 9477 is_equal c a 65 1 0 0 1 2 3 5 8 10 11 14 15 19 20 24 25 26 27 29 32 34 38 40 44 48 49 50 54 58 59 62 64 b 65 1 0 0 1 2 3 5 8 10 11 14 15 19 20 24 25 26 27 29 32 34 38 40 44 48 49 50 54 58 59 62 64 # 9478 is_equal c a 65 1 0 0 1 2 3 5 8 10 11 14 15 19 20 24 25 26 27 29 32 34 38 40 44 48 49 50 54 58 59 62 64 b 65 1 1 0 1 7 8 9 10 11 13 14 15 16 20 22 25 26 27 28 30 31 35 36 37 38 40 43 46 50 52 53 54 56 57 63 # 9479 is_equal c a 65 1 1 e b 65 1 1 e # 9480 is_equal c a 65 1 1 e b 65 0 0 e # 9481 is_equal c a 65 1 1 e b 65 1 1 e # 9482 is_equal c a 65 1 1 e b 65 0 0 f # 9483 is_equal c a 65 1 1 e b 65 1 1 e # 9484 is_equal c a 65 1 1 e b 65 0 0 5 6 7 9 12 13 14 16 18 19 25 26 27 29 31 34 37 40 42 43 45 47 50 51 55 58 61 # 9485 is_equal c a 65 1 1 f b 65 1 1 f # 9486 is_equal c a 65 1 1 f b 65 0 0 e # 9487 is_equal c a 65 1 1 f b 65 1 1 f # 9488 is_equal c a 65 1 1 f b 65 0 0 f # 9489 is_equal c a 65 1 1 f b 65 1 1 f # 9490 is_equal c a 65 1 1 f b 65 0 0 1 2 7 10 13 14 15 16 17 19 23 24 25 26 27 28 35 37 39 40 42 45 51 52 55 58 60 # 9491 is_equal c a 65 1 1 0 2 3 4 5 6 8 10 13 14 15 17 18 19 22 23 26 28 30 31 33 36 42 43 45 46 48 49 51 54 58 60 61 62 64 b 65 1 1 0 2 3 4 5 6 8 10 13 14 15 17 18 19 22 23 26 28 30 31 33 36 42 43 45 46 48 49 51 54 58 60 61 62 64 # 9492 is_equal c a 65 1 1 0 2 3 4 5 6 8 10 13 14 15 17 18 19 22 23 26 28 30 31 33 36 42 43 45 46 48 49 51 54 58 60 61 62 64 b 65 0 0 e # 9493 is_equal c a 65 1 1 2 3 4 13 14 15 17 20 21 22 24 26 27 30 31 32 35 36 37 38 39 40 47 51 55 58 59 64 b 65 1 1 2 3 4 13 14 15 17 20 21 22 24 26 27 30 31 32 35 36 37 38 39 40 47 51 55 58 59 64 # 9494 is_equal c a 65 1 1 2 3 4 13 14 15 17 20 21 22 24 26 27 30 31 32 35 36 37 38 39 40 47 51 55 58 59 64 b 65 0 0 f # 9495 is_equal c a 65 1 1 0 1 2 3 4 5 6 8 9 10 13 15 16 18 20 21 22 23 24 28 29 31 32 33 34 35 36 39 42 43 44 47 48 51 53 54 60 61 63 64 b 65 1 1 0 1 2 3 4 5 6 8 9 10 13 15 16 18 20 21 22 23 24 28 29 31 32 33 34 35 36 39 42 43 44 47 48 51 53 54 60 61 63 64 # 9496 is_equal c a 65 1 1 0 1 2 3 4 5 6 8 9 10 13 15 16 18 20 21 22 23 24 28 29 31 32 33 34 35 36 39 42 43 44 47 48 51 53 54 60 61 63 64 b 65 0 0 3 4 7 9 10 11 13 14 15 21 22 27 28 30 31 32 34 37 39 40 47 48 49 50 51 52 53 55 56 57 58 59 61 62 63 64 # 9497 is_equal c a 65 1 1 e b 65 1 1 e # 9498 is_equal c a 65 1 1 e b 65 0 1 e # 9499 is_equal c a 65 1 1 e b 65 1 1 e # 9500 is_equal c a 65 1 1 e b 65 0 1 f # 9501 is_equal c a 65 1 1 e b 65 1 1 e # 9502 is_equal c a 65 1 1 e b 65 0 1 4 8 9 10 11 13 14 16 17 27 28 30 32 34 35 36 43 47 48 49 52 53 57 62 64 # 9503 is_equal c a 65 1 1 f b 65 1 1 f # 9504 is_equal c a 65 1 1 f b 65 0 1 e # 9505 is_equal c a 65 1 1 f b 65 1 1 f # 9506 is_equal c a 65 1 1 f b 65 0 1 f # 9507 is_equal c a 65 1 1 f b 65 1 1 f # 9508 is_equal c a 65 1 1 f b 65 0 1 0 4 5 6 9 10 11 13 14 15 17 18 25 26 27 32 33 35 36 40 44 45 48 53 54 55 56 57 58 # 9509 is_equal c a 65 1 1 0 4 5 8 11 12 14 15 16 19 22 25 26 30 32 33 34 35 36 37 39 42 44 45 47 49 50 51 53 56 58 60 61 62 63 64 b 65 1 1 0 4 5 8 11 12 14 15 16 19 22 25 26 30 32 33 34 35 36 37 39 42 44 45 47 49 50 51 53 56 58 60 61 62 63 64 # 9510 is_equal c a 65 1 1 0 4 5 8 11 12 14 15 16 19 22 25 26 30 32 33 34 35 36 37 39 42 44 45 47 49 50 51 53 56 58 60 61 62 63 64 b 65 0 1 e # 9511 is_equal c a 65 1 1 1 4 6 8 11 14 17 20 21 22 24 26 27 28 29 33 34 37 38 42 43 44 45 46 48 50 51 53 54 56 57 59 60 61 64 b 65 1 1 1 4 6 8 11 14 17 20 21 22 24 26 27 28 29 33 34 37 38 42 43 44 45 46 48 50 51 53 54 56 57 59 60 61 64 # 9512 is_equal c a 65 1 1 1 4 6 8 11 14 17 20 21 22 24 26 27 28 29 33 34 37 38 42 43 44 45 46 48 50 51 53 54 56 57 59 60 61 64 b 65 0 1 f # 9513 is_equal c a 65 1 1 1 2 4 6 13 14 15 17 20 21 23 27 28 29 30 33 34 36 40 41 47 49 51 52 54 56 60 61 62 64 b 65 1 1 1 2 4 6 13 14 15 17 20 21 23 27 28 29 30 33 34 36 40 41 47 49 51 52 54 56 60 61 62 64 # 9514 is_equal c a 65 1 1 1 2 4 6 13 14 15 17 20 21 23 27 28 29 30 33 34 36 40 41 47 49 51 52 54 56 60 61 62 64 b 65 0 1 1 2 3 5 6 7 11 12 15 16 18 20 22 29 31 33 34 35 36 37 38 44 45 48 50 51 53 55 61 63 64 # 9515 is_equal c a 65 1 1 e b 65 1 1 e # 9516 is_equal c a 65 1 1 e b 65 1 0 e # 9517 is_equal c a 65 1 1 e b 65 1 1 e # 9518 is_equal c a 65 1 1 e b 65 1 0 f # 9519 is_equal c a 65 1 1 e b 65 1 1 e # 9520 is_equal c a 65 1 1 e b 65 1 0 0 2 3 6 8 13 15 20 24 25 32 33 34 35 37 39 41 43 45 47 49 52 53 55 56 57 59 63 # 9521 is_equal c a 65 1 1 f b 65 1 1 f # 9522 is_equal c a 65 1 1 f b 65 1 0 e # 9523 is_equal c a 65 1 1 f b 65 1 1 f # 9524 is_equal c a 65 1 1 f b 65 1 0 f # 9525 is_equal c a 65 1 1 f b 65 1 1 f # 9526 is_equal c a 65 1 1 f b 65 1 0 1 2 5 10 12 13 14 16 17 19 26 27 28 29 31 32 36 37 40 43 44 47 49 50 51 52 56 57 60 61 # 9527 is_equal c a 65 1 1 0 1 8 21 25 29 31 33 35 37 41 43 45 46 50 51 52 56 61 63 64 b 65 1 1 0 1 8 21 25 29 31 33 35 37 41 43 45 46 50 51 52 56 61 63 64 # 9528 is_equal c a 65 1 1 0 1 8 21 25 29 31 33 35 37 41 43 45 46 50 51 52 56 61 63 64 b 65 1 0 e # 9529 is_equal c a 65 1 1 0 2 3 4 6 8 9 10 11 12 14 15 17 18 20 24 25 26 27 28 31 32 35 36 41 43 46 48 49 50 51 55 58 60 62 63 64 b 65 1 1 0 2 3 4 6 8 9 10 11 12 14 15 17 18 20 24 25 26 27 28 31 32 35 36 41 43 46 48 49 50 51 55 58 60 62 63 64 # 9530 is_equal c a 65 1 1 0 2 3 4 6 8 9 10 11 12 14 15 17 18 20 24 25 26 27 28 31 32 35 36 41 43 46 48 49 50 51 55 58 60 62 63 64 b 65 1 0 f # 9531 is_equal c a 65 1 1 3 4 5 7 10 19 20 26 29 31 33 34 35 36 38 39 41 43 45 46 47 50 52 53 54 57 58 59 61 62 63 64 b 65 1 1 3 4 5 7 10 19 20 26 29 31 33 34 35 36 38 39 41 43 45 46 47 50 52 53 54 57 58 59 61 62 63 64 # 9532 is_equal c a 65 1 1 3 4 5 7 10 19 20 26 29 31 33 34 35 36 38 39 41 43 45 46 47 50 52 53 54 57 58 59 61 62 63 64 b 65 1 0 0 1 6 8 11 15 16 17 18 19 20 24 26 27 29 30 34 35 36 39 40 41 42 44 47 50 51 52 55 56 58 62 63 64 # 9533 is_equal c a 65 1 1 e b 65 1 1 e # 9534 is_equal c a 65 1 1 e b 65 1 1 e # 9535 is_equal c a 65 1 1 e b 65 1 1 e # 9536 is_equal c a 65 1 1 e b 65 1 1 f # 9537 is_equal c a 65 1 1 e b 65 1 1 e # 9538 is_equal c a 65 1 1 e b 65 1 1 0 1 4 7 8 9 10 13 15 16 20 24 25 26 28 33 34 36 37 38 39 40 41 43 45 46 53 54 58 60 62 64 # 9539 is_equal c a 65 1 1 f b 65 1 1 f # 9540 is_equal c a 65 1 1 f b 65 1 1 e # 9541 is_equal c a 65 1 1 f b 65 1 1 f # 9542 is_equal c a 65 1 1 f b 65 1 1 f # 9543 is_equal c a 65 1 1 f b 65 1 1 f # 9544 is_equal c a 65 1 1 f b 65 1 1 2 5 10 11 12 13 18 22 23 25 26 28 29 34 35 37 39 41 42 44 45 50 51 55 61 63 # 9545 is_equal c a 65 1 1 1 2 4 7 9 10 14 18 19 20 21 24 27 28 30 32 33 35 37 38 40 41 42 43 47 48 51 53 57 58 60 61 63 64 b 65 1 1 1 2 4 7 9 10 14 18 19 20 21 24 27 28 30 32 33 35 37 38 40 41 42 43 47 48 51 53 57 58 60 61 63 64 # 9546 is_equal c a 65 1 1 1 2 4 7 9 10 14 18 19 20 21 24 27 28 30 32 33 35 37 38 40 41 42 43 47 48 51 53 57 58 60 61 63 64 b 65 1 1 e # 9547 is_equal c a 65 1 1 0 1 2 3 4 6 7 9 11 14 15 16 17 18 20 22 23 25 26 29 30 32 33 35 38 39 40 46 48 49 50 51 54 58 59 61 63 64 b 65 1 1 0 1 2 3 4 6 7 9 11 14 15 16 17 18 20 22 23 25 26 29 30 32 33 35 38 39 40 46 48 49 50 51 54 58 59 61 63 64 # 9548 is_equal c a 65 1 1 0 1 2 3 4 6 7 9 11 14 15 16 17 18 20 22 23 25 26 29 30 32 33 35 38 39 40 46 48 49 50 51 54 58 59 61 63 64 b 65 1 1 f # 9549 is_equal c a 65 1 1 0 1 5 7 11 14 17 18 19 23 24 27 28 31 32 33 34 36 40 42 44 45 46 50 51 52 54 55 61 62 64 b 65 1 1 0 1 5 7 11 14 17 18 19 23 24 27 28 31 32 33 34 36 40 42 44 45 46 50 51 52 54 55 61 62 64 # 9550 is_equal c a 65 1 1 0 1 5 7 11 14 17 18 19 23 24 27 28 31 32 33 34 36 40 42 44 45 46 50 51 52 54 55 61 62 64 b 65 1 1 0 1 5 6 7 8 10 12 13 14 16 17 20 21 22 25 26 28 31 33 41 42 44 45 46 47 48 51 53 54 55 56 57 59 60 62 # 9551 is_equal c a 211 0 0 e b 211 0 0 e # 9552 is_equal c a 211 0 0 e b 211 0 0 e # 9553 is_equal c a 211 0 0 e b 211 0 0 e # 9554 is_equal c a 211 0 0 e b 211 0 0 f # 9555 is_equal c a 211 0 0 e b 211 0 0 e # 9556 is_equal c a 211 0 0 e b 211 0 0 1 2 4 5 6 7 8 10 13 15 17 18 20 21 23 24 26 29 30 32 34 35 37 38 41 42 43 44 45 46 47 48 49 51 54 56 58 59 61 66 67 69 70 71 73 74 76 77 79 82 83 84 87 88 90 94 96 97 103 104 107 108 112 115 116 117 118 119 123 124 125 128 130 132 133 135 140 141 142 143 146 147 149 150 151 153 155 156 157 159 162 163 166 168 170 171 174 176 177 179 182 183 186 188 190 193 195 197 199 201 202 206 # 9557 is_equal c a 211 0 0 f b 211 0 0 f # 9558 is_equal c a 211 0 0 f b 211 0 0 e # 9559 is_equal c a 211 0 0 f b 211 0 0 f # 9560 is_equal c a 211 0 0 f b 211 0 0 f # 9561 is_equal c a 211 0 0 f b 211 0 0 f # 9562 is_equal c a 211 0 0 f b 211 0 0 0 1 2 4 12 14 15 17 18 20 21 25 27 28 29 30 31 32 33 35 38 40 42 43 45 46 47 49 52 53 54 58 61 64 66 68 69 70 71 73 74 75 77 78 79 84 88 90 94 96 97 98 99 100 102 103 105 106 107 110 111 112 115 116 117 119 123 125 128 129 130 133 135 139 140 142 148 150 152 154 159 163 165 167 169 170 171 173 175 176 177 178 179 181 183 189 191 193 196 197 200 201 204 205 206 207 209 210 # 9563 is_equal c a 211 0 0 0 1 2 3 6 7 8 9 12 14 17 18 20 21 22 28 30 31 33 39 44 46 47 54 55 56 57 58 59 61 64 65 66 71 72 73 74 77 79 81 85 87 88 90 94 97 99 100 101 103 107 109 112 113 114 115 116 118 119 121 122 123 124 125 126 130 135 136 141 142 143 144 145 146 148 149 152 155 156 158 160 161 162 163 166 168 170 171 174 175 177 180 181 182 183 184 185 187 191 194 195 196 197 200 204 207 209 b 211 0 0 0 1 2 3 6 7 8 9 12 14 17 18 20 21 22 28 30 31 33 39 44 46 47 54 55 56 57 58 59 61 64 65 66 71 72 73 74 77 79 81 85 87 88 90 94 97 99 100 101 103 107 109 112 113 114 115 116 118 119 121 122 123 124 125 126 130 135 136 141 142 143 144 145 146 148 149 152 155 156 158 160 161 162 163 166 168 170 171 174 175 177 180 181 182 183 184 185 187 191 194 195 196 197 200 204 207 209 # 9564 is_equal c a 211 0 0 0 1 2 3 6 7 8 9 12 14 17 18 20 21 22 28 30 31 33 39 44 46 47 54 55 56 57 58 59 61 64 65 66 71 72 73 74 77 79 81 85 87 88 90 94 97 99 100 101 103 107 109 112 113 114 115 116 118 119 121 122 123 124 125 126 130 135 136 141 142 143 144 145 146 148 149 152 155 156 158 160 161 162 163 166 168 170 171 174 175 177 180 181 182 183 184 185 187 191 194 195 196 197 200 204 207 209 b 211 0 0 e # 9565 is_equal c a 211 0 0 2 5 6 10 12 15 17 19 20 25 31 32 34 37 38 39 40 41 42 43 49 57 58 63 64 68 69 70 71 72 73 74 75 80 81 82 86 90 92 97 98 100 101 104 107 109 112 114 115 119 120 123 124 125 129 130 132 134 139 141 143 146 147 148 151 152 153 155 157 158 159 160 161 164 165 166 173 175 179 180 181 182 183 184 186 188 189 191 198 199 200 205 206 207 210 b 211 0 0 2 5 6 10 12 15 17 19 20 25 31 32 34 37 38 39 40 41 42 43 49 57 58 63 64 68 69 70 71 72 73 74 75 80 81 82 86 90 92 97 98 100 101 104 107 109 112 114 115 119 120 123 124 125 129 130 132 134 139 141 143 146 147 148 151 152 153 155 157 158 159 160 161 164 165 166 173 175 179 180 181 182 183 184 186 188 189 191 198 199 200 205 206 207 210 # 9566 is_equal c a 211 0 0 2 5 6 10 12 15 17 19 20 25 31 32 34 37 38 39 40 41 42 43 49 57 58 63 64 68 69 70 71 72 73 74 75 80 81 82 86 90 92 97 98 100 101 104 107 109 112 114 115 119 120 123 124 125 129 130 132 134 139 141 143 146 147 148 151 152 153 155 157 158 159 160 161 164 165 166 173 175 179 180 181 182 183 184 186 188 189 191 198 199 200 205 206 207 210 b 211 0 0 f # 9567 is_equal c a 211 0 0 5 6 8 9 10 14 15 16 17 18 20 22 23 24 26 28 31 32 33 38 40 42 44 46 49 50 52 53 55 59 60 62 63 66 67 69 70 73 74 75 77 79 82 92 94 96 97 98 100 101 102 103 104 106 107 110 111 112 113 116 118 120 122 123 124 125 128 130 135 136 138 140 141 142 143 148 149 150 151 153 154 155 157 162 164 167 168 170 171 173 174 175 177 179 180 182 184 189 190 191 192 195 196 197 205 207 208 210 b 211 0 0 5 6 8 9 10 14 15 16 17 18 20 22 23 24 26 28 31 32 33 38 40 42 44 46 49 50 52 53 55 59 60 62 63 66 67 69 70 73 74 75 77 79 82 92 94 96 97 98 100 101 102 103 104 106 107 110 111 112 113 116 118 120 122 123 124 125 128 130 135 136 138 140 141 142 143 148 149 150 151 153 154 155 157 162 164 167 168 170 171 173 174 175 177 179 180 182 184 189 190 191 192 195 196 197 205 207 208 210 # 9568 is_equal c a 211 0 0 5 6 8 9 10 14 15 16 17 18 20 22 23 24 26 28 31 32 33 38 40 42 44 46 49 50 52 53 55 59 60 62 63 66 67 69 70 73 74 75 77 79 82 92 94 96 97 98 100 101 102 103 104 106 107 110 111 112 113 116 118 120 122 123 124 125 128 130 135 136 138 140 141 142 143 148 149 150 151 153 154 155 157 162 164 167 168 170 171 173 174 175 177 179 180 182 184 189 190 191 192 195 196 197 205 207 208 210 b 211 0 0 0 1 4 5 10 15 19 21 22 23 25 28 29 30 31 37 39 40 44 45 48 49 50 52 53 56 57 59 62 63 64 68 69 71 73 82 83 89 91 94 96 97 98 99 100 102 103 104 105 109 110 111 113 114 115 117 119 120 121 123 127 129 130 131 134 138 139 140 141 142 144 146 150 152 156 159 161 162 163 165 166 167 169 170 173 179 180 182 183 184 186 187 188 190 193 194 195 196 197 198 199 200 201 205 207 209 # 9569 is_equal c a 211 0 0 e b 211 0 0 e # 9570 is_equal c a 211 0 0 e b 211 0 1 e # 9571 is_equal c a 211 0 0 e b 211 0 0 e # 9572 is_equal c a 211 0 0 e b 211 0 1 f # 9573 is_equal c a 211 0 0 e b 211 0 0 e # 9574 is_equal c a 211 0 0 e b 211 0 1 0 3 5 6 9 10 11 13 14 15 17 18 22 23 24 27 28 31 32 33 39 42 47 51 52 53 55 57 60 61 62 63 66 67 68 70 71 72 73 77 78 83 85 86 87 90 92 93 100 103 105 106 108 109 110 111 114 116 117 120 122 123 127 129 130 134 135 136 137 139 140 142 145 146 149 150 153 157 159 160 162 165 168 171 172 173 176 177 178 180 181 182 184 186 187 189 190 193 194 195 196 197 199 202 205 208 # 9575 is_equal c a 211 0 0 f b 211 0 0 f # 9576 is_equal c a 211 0 0 f b 211 0 1 e # 9577 is_equal c a 211 0 0 f b 211 0 0 f # 9578 is_equal c a 211 0 0 f b 211 0 1 f # 9579 is_equal c a 211 0 0 f b 211 0 0 f # 9580 is_equal c a 211 0 0 f b 211 0 1 0 1 4 6 7 8 9 11 14 15 16 17 19 21 26 30 34 35 36 37 38 40 43 46 48 52 53 54 57 58 59 60 61 64 65 67 68 69 73 75 76 79 80 83 85 86 88 89 91 94 102 108 112 118 120 121 122 125 126 127 132 133 134 135 139 140 143 144 145 146 148 149 150 151 152 153 156 159 160 167 168 169 170 176 178 179 180 182 183 186 187 188 190 191 192 196 197 198 199 201 203 204 206 207 208 209 210 # 9581 is_equal c a 211 0 0 0 2 9 13 15 16 18 19 20 22 31 35 36 37 40 41 42 44 46 47 49 50 53 54 55 61 63 65 66 68 70 71 74 76 77 80 83 84 86 89 90 91 92 94 95 97 101 102 103 105 108 109 111 113 114 119 122 125 127 128 130 133 135 136 137 139 140 141 142 143 144 147 148 149 150 152 154 157 159 163 166 171 172 173 174 175 178 180 182 183 184 185 188 189 192 196 201 204 209 210 b 211 0 0 0 2 9 13 15 16 18 19 20 22 31 35 36 37 40 41 42 44 46 47 49 50 53 54 55 61 63 65 66 68 70 71 74 76 77 80 83 84 86 89 90 91 92 94 95 97 101 102 103 105 108 109 111 113 114 119 122 125 127 128 130 133 135 136 137 139 140 141 142 143 144 147 148 149 150 152 154 157 159 163 166 171 172 173 174 175 178 180 182 183 184 185 188 189 192 196 201 204 209 210 # 9582 is_equal c a 211 0 0 0 2 9 13 15 16 18 19 20 22 31 35 36 37 40 41 42 44 46 47 49 50 53 54 55 61 63 65 66 68 70 71 74 76 77 80 83 84 86 89 90 91 92 94 95 97 101 102 103 105 108 109 111 113 114 119 122 125 127 128 130 133 135 136 137 139 140 141 142 143 144 147 148 149 150 152 154 157 159 163 166 171 172 173 174 175 178 180 182 183 184 185 188 189 192 196 201 204 209 210 b 211 0 1 e # 9583 is_equal c a 211 0 0 2 6 7 9 10 12 14 15 17 19 22 23 24 28 30 32 33 34 37 38 41 42 45 47 48 49 50 52 53 55 56 59 60 62 64 65 66 69 70 71 72 73 81 84 85 87 91 92 95 98 99 100 101 102 103 105 106 107 111 113 114 115 118 119 120 122 124 127 130 132 139 141 142 143 145 146 147 148 150 151 152 156 160 162 163 164 165 169 171 173 175 176 178 179 180 181 185 186 187 191 192 193 194 196 197 198 200 201 202 204 207 208 b 211 0 0 2 6 7 9 10 12 14 15 17 19 22 23 24 28 30 32 33 34 37 38 41 42 45 47 48 49 50 52 53 55 56 59 60 62 64 65 66 69 70 71 72 73 81 84 85 87 91 92 95 98 99 100 101 102 103 105 106 107 111 113 114 115 118 119 120 122 124 127 130 132 139 141 142 143 145 146 147 148 150 151 152 156 160 162 163 164 165 169 171 173 175 176 178 179 180 181 185 186 187 191 192 193 194 196 197 198 200 201 202 204 207 208 # 9584 is_equal c a 211 0 0 2 6 7 9 10 12 14 15 17 19 22 23 24 28 30 32 33 34 37 38 41 42 45 47 48 49 50 52 53 55 56 59 60 62 64 65 66 69 70 71 72 73 81 84 85 87 91 92 95 98 99 100 101 102 103 105 106 107 111 113 114 115 118 119 120 122 124 127 130 132 139 141 142 143 145 146 147 148 150 151 152 156 160 162 163 164 165 169 171 173 175 176 178 179 180 181 185 186 187 191 192 193 194 196 197 198 200 201 202 204 207 208 b 211 0 1 f # 9585 is_equal c a 211 0 0 1 2 3 5 6 8 11 14 15 17 19 22 23 26 28 30 33 38 40 44 46 48 50 52 53 56 58 59 63 65 67 69 73 74 75 76 77 79 84 85 86 87 88 90 92 98 99 103 104 106 107 108 109 110 120 122 123 124 125 126 129 131 133 134 136 139 143 144 145 146 147 148 151 153 156 161 163 166 168 173 174 177 183 185 186 190 191 195 196 200 201 202 205 207 208 209 b 211 0 0 1 2 3 5 6 8 11 14 15 17 19 22 23 26 28 30 33 38 40 44 46 48 50 52 53 56 58 59 63 65 67 69 73 74 75 76 77 79 84 85 86 87 88 90 92 98 99 103 104 106 107 108 109 110 120 122 123 124 125 126 129 131 133 134 136 139 143 144 145 146 147 148 151 153 156 161 163 166 168 173 174 177 183 185 186 190 191 195 196 200 201 202 205 207 208 209 # 9586 is_equal c a 211 0 0 1 2 3 5 6 8 11 14 15 17 19 22 23 26 28 30 33 38 40 44 46 48 50 52 53 56 58 59 63 65 67 69 73 74 75 76 77 79 84 85 86 87 88 90 92 98 99 103 104 106 107 108 109 110 120 122 123 124 125 126 129 131 133 134 136 139 143 144 145 146 147 148 151 153 156 161 163 166 168 173 174 177 183 185 186 190 191 195 196 200 201 202 205 207 208 209 b 211 0 1 0 2 3 4 6 8 13 14 19 22 24 26 27 29 32 33 34 35 37 38 40 42 44 45 46 54 56 57 58 59 60 63 67 68 70 71 72 73 75 79 81 83 84 87 90 91 93 94 95 100 105 107 108 113 116 117 118 120 121 124 125 127 129 131 137 141 142 146 148 149 150 151 153 156 157 163 164 165 171 175 177 180 181 184 185 187 188 189 194 199 200 201 203 205 206 207 208 209 # 9587 is_equal c a 211 0 0 e b 211 0 0 e # 9588 is_equal c a 211 0 0 e b 211 1 0 e # 9589 is_equal c a 211 0 0 e b 211 0 0 e # 9590 is_equal c a 211 0 0 e b 211 1 0 f # 9591 is_equal c a 211 0 0 e b 211 0 0 e # 9592 is_equal c a 211 0 0 e b 211 1 0 1 2 3 4 5 7 9 11 13 14 16 17 18 19 20 21 23 25 27 28 33 34 36 41 42 45 46 48 49 52 57 63 68 69 71 75 79 81 85 86 87 89 90 91 95 96 97 99 101 102 103 106 108 113 114 116 122 123 124 126 127 131 132 134 137 138 146 147 148 156 158 159 162 164 166 172 173 174 175 177 178 179 183 186 188 189 193 194 199 200 201 203 204 206 209 # 9593 is_equal c a 211 0 0 f b 211 0 0 f # 9594 is_equal c a 211 0 0 f b 211 1 0 e # 9595 is_equal c a 211 0 0 f b 211 0 0 f # 9596 is_equal c a 211 0 0 f b 211 1 0 f # 9597 is_equal c a 211 0 0 f b 211 0 0 f # 9598 is_equal c a 211 0 0 f b 211 1 0 1 5 7 8 10 11 12 13 14 15 23 25 26 27 28 30 34 35 37 38 41 43 44 45 46 52 53 56 59 60 64 65 68 69 72 73 76 78 79 80 83 85 87 90 91 92 93 96 98 99 104 106 107 108 110 112 115 118 120 121 123 124 125 127 129 130 131 133 134 137 138 141 142 143 144 145 146 149 150 152 156 161 162 163 164 165 166 168 169 170 171 172 174 175 177 178 179 180 181 183 184 185 187 191 198 199 201 202 205 206 207 208 209 210 # 9599 is_equal c a 211 0 0 0 1 3 4 5 6 7 10 11 12 17 23 26 29 30 38 40 41 43 45 47 48 49 52 53 57 58 59 60 61 64 68 70 75 81 82 85 86 87 88 91 93 94 99 100 105 107 109 110 113 114 115 116 118 119 120 124 128 129 131 133 135 137 139 143 145 146 147 149 150 152 154 155 156 159 162 167 168 169 173 176 182 188 190 191 192 193 196 197 198 199 203 205 207 209 b 211 0 0 0 1 3 4 5 6 7 10 11 12 17 23 26 29 30 38 40 41 43 45 47 48 49 52 53 57 58 59 60 61 64 68 70 75 81 82 85 86 87 88 91 93 94 99 100 105 107 109 110 113 114 115 116 118 119 120 124 128 129 131 133 135 137 139 143 145 146 147 149 150 152 154 155 156 159 162 167 168 169 173 176 182 188 190 191 192 193 196 197 198 199 203 205 207 209 # 9600 is_equal c a 211 0 0 0 1 3 4 5 6 7 10 11 12 17 23 26 29 30 38 40 41 43 45 47 48 49 52 53 57 58 59 60 61 64 68 70 75 81 82 85 86 87 88 91 93 94 99 100 105 107 109 110 113 114 115 116 118 119 120 124 128 129 131 133 135 137 139 143 145 146 147 149 150 152 154 155 156 159 162 167 168 169 173 176 182 188 190 191 192 193 196 197 198 199 203 205 207 209 b 211 1 0 e # 9601 is_equal c a 211 0 0 0 1 2 3 7 9 10 12 14 15 18 20 22 23 24 25 26 27 29 30 32 33 38 39 41 42 43 45 46 47 49 54 57 58 59 60 61 62 64 66 68 69 71 74 75 76 77 80 81 84 86 89 90 92 93 94 95 99 102 103 104 105 107 108 109 110 111 112 115 116 118 120 121 122 123 124 128 129 134 135 138 141 145 146 148 149 150 151 152 154 155 156 159 160 164 167 168 169 172 175 181 185 189 193 195 196 197 198 199 200 202 204 207 208 209 b 211 0 0 0 1 2 3 7 9 10 12 14 15 18 20 22 23 24 25 26 27 29 30 32 33 38 39 41 42 43 45 46 47 49 54 57 58 59 60 61 62 64 66 68 69 71 74 75 76 77 80 81 84 86 89 90 92 93 94 95 99 102 103 104 105 107 108 109 110 111 112 115 116 118 120 121 122 123 124 128 129 134 135 138 141 145 146 148 149 150 151 152 154 155 156 159 160 164 167 168 169 172 175 181 185 189 193 195 196 197 198 199 200 202 204 207 208 209 # 9602 is_equal c a 211 0 0 0 1 2 3 7 9 10 12 14 15 18 20 22 23 24 25 26 27 29 30 32 33 38 39 41 42 43 45 46 47 49 54 57 58 59 60 61 62 64 66 68 69 71 74 75 76 77 80 81 84 86 89 90 92 93 94 95 99 102 103 104 105 107 108 109 110 111 112 115 116 118 120 121 122 123 124 128 129 134 135 138 141 145 146 148 149 150 151 152 154 155 156 159 160 164 167 168 169 172 175 181 185 189 193 195 196 197 198 199 200 202 204 207 208 209 b 211 1 0 f # 9603 is_equal c a 211 0 0 1 3 7 8 11 13 16 19 20 21 22 26 29 30 31 34 35 36 41 43 44 45 47 49 52 54 57 58 59 63 64 66 70 71 72 74 75 79 81 82 85 87 91 92 93 94 97 98 99 100 101 102 103 105 106 107 110 111 113 114 119 120 121 122 124 125 126 127 128 129 130 131 132 134 140 143 144 148 149 154 157 160 161 162 163 165 167 169 171 174 176 178 182 183 184 185 186 188 191 194 195 201 203 206 207 208 209 b 211 0 0 1 3 7 8 11 13 16 19 20 21 22 26 29 30 31 34 35 36 41 43 44 45 47 49 52 54 57 58 59 63 64 66 70 71 72 74 75 79 81 82 85 87 91 92 93 94 97 98 99 100 101 102 103 105 106 107 110 111 113 114 119 120 121 122 124 125 126 127 128 129 130 131 132 134 140 143 144 148 149 154 157 160 161 162 163 165 167 169 171 174 176 178 182 183 184 185 186 188 191 194 195 201 203 206 207 208 209 # 9604 is_equal c a 211 0 0 1 3 7 8 11 13 16 19 20 21 22 26 29 30 31 34 35 36 41 43 44 45 47 49 52 54 57 58 59 63 64 66 70 71 72 74 75 79 81 82 85 87 91 92 93 94 97 98 99 100 101 102 103 105 106 107 110 111 113 114 119 120 121 122 124 125 126 127 128 129 130 131 132 134 140 143 144 148 149 154 157 160 161 162 163 165 167 169 171 174 176 178 182 183 184 185 186 188 191 194 195 201 203 206 207 208 209 b 211 1 0 1 3 4 6 7 13 17 18 19 24 25 27 28 29 31 32 33 34 35 37 38 39 43 45 46 48 49 55 57 58 59 60 61 62 63 64 65 67 68 70 73 74 75 76 77 80 82 83 84 86 88 89 91 92 97 103 107 109 120 121 123 124 125 128 129 131 132 133 134 139 140 141 144 148 149 150 151 152 155 156 157 158 159 162 166 167 168 169 170 171 172 174 175 176 185 186 189 191 193 195 198 201 202 203 205 206 207 209 # 9605 is_equal c a 211 0 0 e b 211 0 0 e # 9606 is_equal c a 211 0 0 e b 211 1 1 e # 9607 is_equal c a 211 0 0 e b 211 0 0 e # 9608 is_equal c a 211 0 0 e b 211 1 1 f # 9609 is_equal c a 211 0 0 e b 211 0 0 e # 9610 is_equal c a 211 0 0 e b 211 1 1 0 2 4 8 11 12 15 16 17 18 20 21 23 24 26 27 28 29 31 32 34 35 36 38 39 42 44 46 47 48 49 51 54 56 57 61 67 70 71 72 75 76 78 79 80 81 82 85 86 90 91 93 95 97 98 99 100 102 103 104 105 107 114 115 116 117 118 121 123 124 125 127 128 130 131 132 135 137 139 141 142 145 150 151 152 155 157 158 159 162 163 164 166 174 176 178 184 185 187 188 189 190 191 193 194 196 197 198 200 202 205 206 208 210 # 9611 is_equal c a 211 0 0 f b 211 0 0 f # 9612 is_equal c a 211 0 0 f b 211 1 1 e # 9613 is_equal c a 211 0 0 f b 211 0 0 f # 9614 is_equal c a 211 0 0 f b 211 1 1 f # 9615 is_equal c a 211 0 0 f b 211 0 0 f # 9616 is_equal c a 211 0 0 f b 211 1 1 1 3 4 5 7 8 10 11 12 14 19 23 24 29 31 32 33 34 35 36 37 43 44 45 50 51 52 54 55 56 59 61 62 64 66 70 71 72 74 77 78 79 81 82 87 88 89 90 91 92 93 95 99 100 106 107 109 111 115 116 117 118 120 121 123 125 127 128 129 131 132 133 140 141 144 147 149 151 152 153 154 158 160 163 167 168 169 171 176 185 187 192 196 197 199 203 204 205 207 209 # 9617 is_equal c a 211 0 0 0 3 8 9 11 12 13 16 17 18 19 25 26 29 31 32 33 34 38 46 49 50 51 52 61 64 66 68 70 72 73 74 75 77 79 80 82 83 86 87 88 93 98 100 101 102 104 105 108 109 112 116 119 120 122 126 128 129 130 134 139 141 144 145 146 147 148 149 151 154 155 156 157 159 161 163 167 168 169 170 171 176 177 179 180 181 182 185 190 191 194 195 198 200 204 206 207 210 b 211 0 0 0 3 8 9 11 12 13 16 17 18 19 25 26 29 31 32 33 34 38 46 49 50 51 52 61 64 66 68 70 72 73 74 75 77 79 80 82 83 86 87 88 93 98 100 101 102 104 105 108 109 112 116 119 120 122 126 128 129 130 134 139 141 144 145 146 147 148 149 151 154 155 156 157 159 161 163 167 168 169 170 171 176 177 179 180 181 182 185 190 191 194 195 198 200 204 206 207 210 # 9618 is_equal c a 211 0 0 0 3 8 9 11 12 13 16 17 18 19 25 26 29 31 32 33 34 38 46 49 50 51 52 61 64 66 68 70 72 73 74 75 77 79 80 82 83 86 87 88 93 98 100 101 102 104 105 108 109 112 116 119 120 122 126 128 129 130 134 139 141 144 145 146 147 148 149 151 154 155 156 157 159 161 163 167 168 169 170 171 176 177 179 180 181 182 185 190 191 194 195 198 200 204 206 207 210 b 211 1 1 e # 9619 is_equal c a 211 0 0 1 3 8 9 11 13 14 17 18 20 22 27 28 29 30 32 35 41 42 44 45 46 47 48 49 51 57 65 67 69 72 74 76 77 79 81 83 85 87 89 90 91 92 101 102 103 104 105 107 108 109 110 112 114 116 118 120 121 123 125 127 129 132 135 137 138 139 140 143 144 147 153 155 157 159 160 161 163 164 165 168 171 172 174 176 177 182 187 189 193 194 198 200 201 202 205 206 208 b 211 0 0 1 3 8 9 11 13 14 17 18 20 22 27 28 29 30 32 35 41 42 44 45 46 47 48 49 51 57 65 67 69 72 74 76 77 79 81 83 85 87 89 90 91 92 101 102 103 104 105 107 108 109 110 112 114 116 118 120 121 123 125 127 129 132 135 137 138 139 140 143 144 147 153 155 157 159 160 161 163 164 165 168 171 172 174 176 177 182 187 189 193 194 198 200 201 202 205 206 208 # 9620 is_equal c a 211 0 0 1 3 8 9 11 13 14 17 18 20 22 27 28 29 30 32 35 41 42 44 45 46 47 48 49 51 57 65 67 69 72 74 76 77 79 81 83 85 87 89 90 91 92 101 102 103 104 105 107 108 109 110 112 114 116 118 120 121 123 125 127 129 132 135 137 138 139 140 143 144 147 153 155 157 159 160 161 163 164 165 168 171 172 174 176 177 182 187 189 193 194 198 200 201 202 205 206 208 b 211 1 1 f # 9621 is_equal c a 211 0 0 0 1 4 6 7 8 11 12 13 14 19 22 23 24 26 27 29 32 33 34 35 39 40 41 42 43 44 45 49 50 51 52 53 55 58 62 63 64 66 68 71 72 74 75 78 79 81 84 85 86 87 89 92 95 96 99 102 104 105 107 110 114 115 117 118 122 124 128 129 133 134 135 136 137 138 139 141 144 148 150 152 153 154 155 159 165 168 173 174 176 179 180 183 184 188 189 194 195 198 200 202 203 204 207 208 209 210 b 211 0 0 0 1 4 6 7 8 11 12 13 14 19 22 23 24 26 27 29 32 33 34 35 39 40 41 42 43 44 45 49 50 51 52 53 55 58 62 63 64 66 68 71 72 74 75 78 79 81 84 85 86 87 89 92 95 96 99 102 104 105 107 110 114 115 117 118 122 124 128 129 133 134 135 136 137 138 139 141 144 148 150 152 153 154 155 159 165 168 173 174 176 179 180 183 184 188 189 194 195 198 200 202 203 204 207 208 209 210 # 9622 is_equal c a 211 0 0 0 1 4 6 7 8 11 12 13 14 19 22 23 24 26 27 29 32 33 34 35 39 40 41 42 43 44 45 49 50 51 52 53 55 58 62 63 64 66 68 71 72 74 75 78 79 81 84 85 86 87 89 92 95 96 99 102 104 105 107 110 114 115 117 118 122 124 128 129 133 134 135 136 137 138 139 141 144 148 150 152 153 154 155 159 165 168 173 174 176 179 180 183 184 188 189 194 195 198 200 202 203 204 207 208 209 210 b 211 1 1 1 4 5 6 8 12 13 14 19 20 21 22 23 24 27 28 29 30 32 34 35 40 41 43 44 48 49 51 53 54 57 58 60 61 62 63 64 66 68 71 72 73 74 75 77 78 80 82 85 88 90 91 94 96 97 99 100 101 102 103 104 105 106 108 109 110 112 113 114 118 120 122 123 124 125 127 129 130 132 133 135 136 140 141 142 143 144 145 148 149 151 154 157 159 160 165 168 170 171 173 174 181 183 185 187 188 189 191 193 195 198 200 201 206 207 208 # 9623 is_equal c a 211 0 1 e b 211 0 1 e # 9624 is_equal c a 211 0 1 e b 211 0 0 e # 9625 is_equal c a 211 0 1 e b 211 0 1 e # 9626 is_equal c a 211 0 1 e b 211 0 0 f # 9627 is_equal c a 211 0 1 e b 211 0 1 e # 9628 is_equal c a 211 0 1 e b 211 0 0 0 2 3 4 5 6 8 9 10 12 13 14 15 18 19 23 24 25 27 29 32 35 36 39 40 43 44 45 46 50 52 55 56 57 58 62 64 67 72 73 75 76 78 79 80 81 83 85 86 89 90 91 93 95 96 97 98 102 103 104 106 107 108 109 110 112 115 116 117 120 121 123 124 125 126 127 128 129 131 132 134 135 136 137 138 142 144 147 151 153 154 156 157 158 160 163 166 170 171 172 173 174 175 176 180 181 190 191 192 194 196 199 200 202 203 204 205 206 207 208 # 9629 is_equal c a 211 0 1 f b 211 0 1 f # 9630 is_equal c a 211 0 1 f b 211 0 0 e # 9631 is_equal c a 211 0 1 f b 211 0 1 f # 9632 is_equal c a 211 0 1 f b 211 0 0 f # 9633 is_equal c a 211 0 1 f b 211 0 1 f # 9634 is_equal c a 211 0 1 f b 211 0 0 0 1 3 5 7 8 9 11 12 13 14 15 21 24 25 26 27 28 30 31 34 35 41 43 44 45 46 50 53 54 55 56 57 58 59 60 61 62 66 68 70 71 73 74 76 77 82 83 86 93 98 100 101 104 106 107 110 111 113 115 118 120 122 123 127 128 130 131 135 137 138 139 141 143 145 147 151 152 153 154 155 158 159 160 161 162 164 165 168 169 172 173 174 176 178 179 180 182 183 185 186 194 197 198 200 201 203 204 206 208 209 # 9635 is_equal c a 211 0 1 0 3 7 8 9 13 16 22 23 24 26 29 30 34 35 36 38 39 43 44 45 47 48 52 53 55 62 64 65 67 69 70 71 76 77 79 83 86 87 88 89 91 93 95 96 97 98 99 100 102 103 104 107 108 110 112 113 117 120 125 129 133 138 140 141 143 144 145 148 149 151 153 154 155 158 159 163 166 168 169 170 171 172 174 176 178 179 184 188 191 193 194 195 197 200 201 206 208 209 210 b 211 0 1 0 3 7 8 9 13 16 22 23 24 26 29 30 34 35 36 38 39 43 44 45 47 48 52 53 55 62 64 65 67 69 70 71 76 77 79 83 86 87 88 89 91 93 95 96 97 98 99 100 102 103 104 107 108 110 112 113 117 120 125 129 133 138 140 141 143 144 145 148 149 151 153 154 155 158 159 163 166 168 169 170 171 172 174 176 178 179 184 188 191 193 194 195 197 200 201 206 208 209 210 # 9636 is_equal c a 211 0 1 0 3 7 8 9 13 16 22 23 24 26 29 30 34 35 36 38 39 43 44 45 47 48 52 53 55 62 64 65 67 69 70 71 76 77 79 83 86 87 88 89 91 93 95 96 97 98 99 100 102 103 104 107 108 110 112 113 117 120 125 129 133 138 140 141 143 144 145 148 149 151 153 154 155 158 159 163 166 168 169 170 171 172 174 176 178 179 184 188 191 193 194 195 197 200 201 206 208 209 210 b 211 0 0 e # 9637 is_equal c a 211 0 1 0 1 4 5 6 8 9 10 11 13 16 20 24 25 27 30 34 37 38 40 41 42 48 49 50 51 56 57 60 62 64 65 68 72 74 76 78 79 81 83 84 85 86 87 94 101 102 106 108 109 111 112 113 114 115 117 118 119 120 124 126 131 135 136 146 147 148 149 150 151 152 155 158 159 162 163 164 168 169 170 174 176 177 179 181 182 187 190 191 192 193 194 198 200 201 202 206 209 210 b 211 0 1 0 1 4 5 6 8 9 10 11 13 16 20 24 25 27 30 34 37 38 40 41 42 48 49 50 51 56 57 60 62 64 65 68 72 74 76 78 79 81 83 84 85 86 87 94 101 102 106 108 109 111 112 113 114 115 117 118 119 120 124 126 131 135 136 146 147 148 149 150 151 152 155 158 159 162 163 164 168 169 170 174 176 177 179 181 182 187 190 191 192 193 194 198 200 201 202 206 209 210 # 9638 is_equal c a 211 0 1 0 1 4 5 6 8 9 10 11 13 16 20 24 25 27 30 34 37 38 40 41 42 48 49 50 51 56 57 60 62 64 65 68 72 74 76 78 79 81 83 84 85 86 87 94 101 102 106 108 109 111 112 113 114 115 117 118 119 120 124 126 131 135 136 146 147 148 149 150 151 152 155 158 159 162 163 164 168 169 170 174 176 177 179 181 182 187 190 191 192 193 194 198 200 201 202 206 209 210 b 211 0 0 f # 9639 is_equal c a 211 0 1 0 1 2 5 7 9 10 15 16 18 19 21 22 23 27 30 35 37 38 39 40 44 45 47 50 51 55 56 57 63 64 65 66 68 71 72 73 74 75 78 79 83 84 85 87 88 89 90 95 100 103 106 107 111 112 113 114 115 116 118 119 121 125 127 129 131 134 136 140 141 143 144 145 146 147 149 150 154 155 161 166 167 168 171 172 174 175 177 179 183 186 187 188 191 192 193 196 199 200 203 204 208 209 b 211 0 1 0 1 2 5 7 9 10 15 16 18 19 21 22 23 27 30 35 37 38 39 40 44 45 47 50 51 55 56 57 63 64 65 66 68 71 72 73 74 75 78 79 83 84 85 87 88 89 90 95 100 103 106 107 111 112 113 114 115 116 118 119 121 125 127 129 131 134 136 140 141 143 144 145 146 147 149 150 154 155 161 166 167 168 171 172 174 175 177 179 183 186 187 188 191 192 193 196 199 200 203 204 208 209 # 9640 is_equal c a 211 0 1 0 1 2 5 7 9 10 15 16 18 19 21 22 23 27 30 35 37 38 39 40 44 45 47 50 51 55 56 57 63 64 65 66 68 71 72 73 74 75 78 79 83 84 85 87 88 89 90 95 100 103 106 107 111 112 113 114 115 116 118 119 121 125 127 129 131 134 136 140 141 143 144 145 146 147 149 150 154 155 161 166 167 168 171 172 174 175 177 179 183 186 187 188 191 192 193 196 199 200 203 204 208 209 b 211 0 0 4 5 10 14 15 18 22 23 25 27 28 32 33 34 38 39 40 41 46 47 48 49 50 53 55 56 57 58 59 63 64 73 82 83 84 85 86 87 88 89 91 93 94 96 98 100 102 106 107 108 109 113 116 118 119 122 125 126 130 132 135 136 138 141 142 144 145 146 147 149 150 154 157 158 162 163 164 166 167 169 171 172 173 175 176 177 178 180 182 183 184 185 190 191 192 194 195 196 197 201 202 204 206 207 209 210 # 9641 is_equal c a 211 0 1 e b 211 0 1 e # 9642 is_equal c a 211 0 1 e b 211 0 1 e # 9643 is_equal c a 211 0 1 e b 211 0 1 e # 9644 is_equal c a 211 0 1 e b 211 0 1 f # 9645 is_equal c a 211 0 1 e b 211 0 1 e # 9646 is_equal c a 211 0 1 e b 211 0 1 0 2 3 8 9 11 13 18 19 20 22 23 25 26 27 29 30 32 33 37 38 41 42 43 44 48 49 50 53 55 56 58 59 61 67 70 71 73 74 75 77 80 82 84 87 88 89 90 91 92 93 97 98 99 100 101 104 110 112 114 115 116 117 120 123 125 126 127 129 132 133 134 135 137 142 144 146 150 152 155 158 159 165 168 169 170 172 173 174 175 177 179 183 184 186 187 188 189 190 191 192 193 196 198 199 201 206 207 208 # 9647 is_equal c a 211 0 1 f b 211 0 1 f # 9648 is_equal c a 211 0 1 f b 211 0 1 e # 9649 is_equal c a 211 0 1 f b 211 0 1 f # 9650 is_equal c a 211 0 1 f b 211 0 1 f # 9651 is_equal c a 211 0 1 f b 211 0 1 f # 9652 is_equal c a 211 0 1 f b 211 0 1 2 8 9 10 11 12 13 16 17 18 19 20 21 25 27 28 31 32 45 46 49 53 54 55 56 57 58 65 66 67 71 72 73 76 77 78 80 82 86 87 89 91 92 93 96 99 101 102 104 105 107 108 110 111 113 114 115 117 118 119 120 122 123 127 129 130 131 132 133 135 136 137 139 140 149 153 154 159 160 162 163 165 167 168 169 170 171 175 176 183 187 188 189 191 197 199 200 202 205 # 9653 is_equal c a 211 0 1 0 1 2 3 6 9 10 11 12 13 18 22 23 24 25 27 29 32 36 40 43 45 50 51 52 53 54 56 57 60 61 62 65 66 70 73 75 76 77 79 81 82 83 84 89 90 92 94 98 99 100 101 102 104 106 108 115 116 117 120 123 124 128 130 132 133 134 135 137 140 141 144 145 147 149 150 152 154 155 156 158 161 162 164 165 173 174 176 177 178 180 181 183 188 190 193 194 197 198 199 203 206 207 209 b 211 0 1 0 1 2 3 6 9 10 11 12 13 18 22 23 24 25 27 29 32 36 40 43 45 50 51 52 53 54 56 57 60 61 62 65 66 70 73 75 76 77 79 81 82 83 84 89 90 92 94 98 99 100 101 102 104 106 108 115 116 117 120 123 124 128 130 132 133 134 135 137 140 141 144 145 147 149 150 152 154 155 156 158 161 162 164 165 173 174 176 177 178 180 181 183 188 190 193 194 197 198 199 203 206 207 209 # 9654 is_equal c a 211 0 1 0 1 2 3 6 9 10 11 12 13 18 22 23 24 25 27 29 32 36 40 43 45 50 51 52 53 54 56 57 60 61 62 65 66 70 73 75 76 77 79 81 82 83 84 89 90 92 94 98 99 100 101 102 104 106 108 115 116 117 120 123 124 128 130 132 133 134 135 137 140 141 144 145 147 149 150 152 154 155 156 158 161 162 164 165 173 174 176 177 178 180 181 183 188 190 193 194 197 198 199 203 206 207 209 b 211 0 1 e # 9655 is_equal c a 211 0 1 0 1 2 3 7 8 9 14 15 16 17 19 21 24 27 28 31 33 35 37 41 43 47 49 50 51 52 53 55 58 60 61 62 63 64 66 71 73 77 79 80 82 83 87 88 90 93 99 101 103 104 105 108 109 111 112 114 116 118 121 122 123 124 126 128 133 134 136 138 139 140 142 143 144 147 148 154 156 157 158 161 162 163 164 165 168 171 172 173 174 175 178 181 183 186 187 189 191 192 194 196 198 199 200 202 203 205 206 207 209 210 b 211 0 1 0 1 2 3 7 8 9 14 15 16 17 19 21 24 27 28 31 33 35 37 41 43 47 49 50 51 52 53 55 58 60 61 62 63 64 66 71 73 77 79 80 82 83 87 88 90 93 99 101 103 104 105 108 109 111 112 114 116 118 121 122 123 124 126 128 133 134 136 138 139 140 142 143 144 147 148 154 156 157 158 161 162 163 164 165 168 171 172 173 174 175 178 181 183 186 187 189 191 192 194 196 198 199 200 202 203 205 206 207 209 210 # 9656 is_equal c a 211 0 1 0 1 2 3 7 8 9 14 15 16 17 19 21 24 27 28 31 33 35 37 41 43 47 49 50 51 52 53 55 58 60 61 62 63 64 66 71 73 77 79 80 82 83 87 88 90 93 99 101 103 104 105 108 109 111 112 114 116 118 121 122 123 124 126 128 133 134 136 138 139 140 142 143 144 147 148 154 156 157 158 161 162 163 164 165 168 171 172 173 174 175 178 181 183 186 187 189 191 192 194 196 198 199 200 202 203 205 206 207 209 210 b 211 0 1 f # 9657 is_equal c a 211 0 1 0 1 4 5 7 12 13 16 17 19 20 21 22 23 24 25 26 27 28 29 30 31 37 39 40 41 43 44 45 48 49 51 52 53 54 55 56 57 59 63 65 67 69 72 73 75 77 80 82 83 85 89 90 91 94 95 99 101 104 105 108 111 112 117 118 119 120 121 122 125 126 131 139 140 141 142 143 147 152 156 158 160 161 162 166 167 168 170 171 174 175 176 179 181 185 186 194 195 196 198 200 203 204 205 206 207 210 b 211 0 1 0 1 4 5 7 12 13 16 17 19 20 21 22 23 24 25 26 27 28 29 30 31 37 39 40 41 43 44 45 48 49 51 52 53 54 55 56 57 59 63 65 67 69 72 73 75 77 80 82 83 85 89 90 91 94 95 99 101 104 105 108 111 112 117 118 119 120 121 122 125 126 131 139 140 141 142 143 147 152 156 158 160 161 162 166 167 168 170 171 174 175 176 179 181 185 186 194 195 196 198 200 203 204 205 206 207 210 # 9658 is_equal c a 211 0 1 0 1 4 5 7 12 13 16 17 19 20 21 22 23 24 25 26 27 28 29 30 31 37 39 40 41 43 44 45 48 49 51 52 53 54 55 56 57 59 63 65 67 69 72 73 75 77 80 82 83 85 89 90 91 94 95 99 101 104 105 108 111 112 117 118 119 120 121 122 125 126 131 139 140 141 142 143 147 152 156 158 160 161 162 166 167 168 170 171 174 175 176 179 181 185 186 194 195 196 198 200 203 204 205 206 207 210 b 211 0 1 0 2 5 6 7 8 12 13 14 15 18 19 26 27 30 33 35 38 40 41 42 43 44 45 46 49 52 54 56 57 60 61 64 65 70 75 82 84 85 87 89 90 92 94 98 99 100 103 104 105 106 110 111 112 113 114 115 119 123 124 128 131 132 133 134 135 136 137 138 140 141 143 147 148 149 150 151 154 156 158 159 160 162 170 172 174 183 184 187 188 190 192 193 194 198 201 202 205 206 207 210 # 9659 is_equal c a 211 0 1 e b 211 0 1 e # 9660 is_equal c a 211 0 1 e b 211 1 0 e # 9661 is_equal c a 211 0 1 e b 211 0 1 e # 9662 is_equal c a 211 0 1 e b 211 1 0 f # 9663 is_equal c a 211 0 1 e b 211 0 1 e # 9664 is_equal c a 211 0 1 e b 211 1 0 0 1 3 4 7 9 10 11 12 13 14 16 17 23 25 26 31 34 36 37 40 42 45 46 48 49 50 53 55 56 58 60 64 65 66 67 68 70 71 72 73 75 76 77 80 81 82 84 85 86 87 89 91 95 97 98 101 103 104 106 110 113 114 116 117 119 120 122 123 124 126 129 130 136 138 140 141 142 143 151 152 154 155 157 159 160 164 165 170 171 172 174 176 178 180 181 183 186 187 191 192 193 197 198 199 200 201 202 203 205 208 # 9665 is_equal c a 211 0 1 f b 211 0 1 f # 9666 is_equal c a 211 0 1 f b 211 1 0 e # 9667 is_equal c a 211 0 1 f b 211 0 1 f # 9668 is_equal c a 211 0 1 f b 211 1 0 f # 9669 is_equal c a 211 0 1 f b 211 0 1 f # 9670 is_equal c a 211 0 1 f b 211 1 0 0 2 5 10 15 16 18 19 24 26 27 29 31 35 37 38 41 42 49 50 51 54 56 57 59 60 61 62 63 64 66 69 70 74 75 76 78 81 82 83 85 86 88 92 95 96 99 100 101 108 111 114 115 117 118 120 122 123 126 133 134 135 138 139 142 143 144 145 150 152 156 160 161 162 163 165 166 167 168 169 170 173 177 178 179 183 184 185 187 189 190 193 195 197 198 200 202 203 207 208 209 210 # 9671 is_equal c a 211 0 1 8 11 12 13 15 19 20 21 22 23 27 30 32 33 34 39 41 42 44 46 55 57 58 59 60 63 65 66 67 70 71 73 74 75 76 77 82 83 84 86 90 92 94 97 101 103 104 106 107 109 111 114 116 119 120 123 124 127 129 131 132 133 136 142 143 144 145 146 152 153 155 156 157 158 162 164 166 167 168 169 171 174 176 177 178 184 185 186 187 189 191 192 195 196 197 198 200 206 208 210 b 211 0 1 8 11 12 13 15 19 20 21 22 23 27 30 32 33 34 39 41 42 44 46 55 57 58 59 60 63 65 66 67 70 71 73 74 75 76 77 82 83 84 86 90 92 94 97 101 103 104 106 107 109 111 114 116 119 120 123 124 127 129 131 132 133 136 142 143 144 145 146 152 153 155 156 157 158 162 164 166 167 168 169 171 174 176 177 178 184 185 186 187 189 191 192 195 196 197 198 200 206 208 210 # 9672 is_equal c a 211 0 1 8 11 12 13 15 19 20 21 22 23 27 30 32 33 34 39 41 42 44 46 55 57 58 59 60 63 65 66 67 70 71 73 74 75 76 77 82 83 84 86 90 92 94 97 101 103 104 106 107 109 111 114 116 119 120 123 124 127 129 131 132 133 136 142 143 144 145 146 152 153 155 156 157 158 162 164 166 167 168 169 171 174 176 177 178 184 185 186 187 189 191 192 195 196 197 198 200 206 208 210 b 211 1 0 e # 9673 is_equal c a 211 0 1 1 4 5 7 10 14 16 17 20 22 24 26 34 35 38 39 40 41 43 44 47 48 51 52 54 55 56 57 59 61 63 66 67 68 70 71 74 77 81 87 89 90 91 92 95 96 98 99 100 102 103 104 110 111 113 117 120 123 124 125 126 127 128 130 131 132 133 134 135 137 138 139 141 142 143 144 147 149 153 154 157 164 165 166 168 169 170 172 173 176 181 184 186 189 190 193 194 196 197 199 200 205 206 b 211 0 1 1 4 5 7 10 14 16 17 20 22 24 26 34 35 38 39 40 41 43 44 47 48 51 52 54 55 56 57 59 61 63 66 67 68 70 71 74 77 81 87 89 90 91 92 95 96 98 99 100 102 103 104 110 111 113 117 120 123 124 125 126 127 128 130 131 132 133 134 135 137 138 139 141 142 143 144 147 149 153 154 157 164 165 166 168 169 170 172 173 176 181 184 186 189 190 193 194 196 197 199 200 205 206 # 9674 is_equal c a 211 0 1 1 4 5 7 10 14 16 17 20 22 24 26 34 35 38 39 40 41 43 44 47 48 51 52 54 55 56 57 59 61 63 66 67 68 70 71 74 77 81 87 89 90 91 92 95 96 98 99 100 102 103 104 110 111 113 117 120 123 124 125 126 127 128 130 131 132 133 134 135 137 138 139 141 142 143 144 147 149 153 154 157 164 165 166 168 169 170 172 173 176 181 184 186 189 190 193 194 196 197 199 200 205 206 b 211 1 0 f # 9675 is_equal c a 211 0 1 2 3 6 8 9 12 14 17 18 22 23 26 27 28 32 36 37 38 40 41 42 43 45 46 49 50 51 52 54 56 57 59 62 64 66 70 71 73 74 75 77 79 81 82 85 86 88 92 94 97 98 99 101 102 103 104 109 111 112 118 121 122 125 126 127 129 131 132 136 137 138 139 140 141 142 145 146 150 151 154 155 157 159 161 165 166 167 168 170 171 173 175 176 177 179 181 182 183 185 186 187 191 193 196 197 199 202 203 205 206 207 208 209 210 b 211 0 1 2 3 6 8 9 12 14 17 18 22 23 26 27 28 32 36 37 38 40 41 42 43 45 46 49 50 51 52 54 56 57 59 62 64 66 70 71 73 74 75 77 79 81 82 85 86 88 92 94 97 98 99 101 102 103 104 109 111 112 118 121 122 125 126 127 129 131 132 136 137 138 139 140 141 142 145 146 150 151 154 155 157 159 161 165 166 167 168 170 171 173 175 176 177 179 181 182 183 185 186 187 191 193 196 197 199 202 203 205 206 207 208 209 210 # 9676 is_equal c a 211 0 1 2 3 6 8 9 12 14 17 18 22 23 26 27 28 32 36 37 38 40 41 42 43 45 46 49 50 51 52 54 56 57 59 62 64 66 70 71 73 74 75 77 79 81 82 85 86 88 92 94 97 98 99 101 102 103 104 109 111 112 118 121 122 125 126 127 129 131 132 136 137 138 139 140 141 142 145 146 150 151 154 155 157 159 161 165 166 167 168 170 171 173 175 176 177 179 181 182 183 185 186 187 191 193 196 197 199 202 203 205 206 207 208 209 210 b 211 1 0 1 2 8 10 11 12 13 16 18 19 20 23 31 35 36 37 39 41 42 43 44 45 49 51 53 54 55 59 60 61 62 64 67 68 78 81 83 84 87 89 90 96 97 99 101 102 103 104 106 108 109 110 112 114 119 123 124 125 131 143 147 148 149 150 154 155 156 160 161 163 164 165 169 170 172 176 177 179 180 182 184 185 187 189 191 194 198 200 201 202 203 204 207 209 # 9677 is_equal c a 211 0 1 e b 211 0 1 e # 9678 is_equal c a 211 0 1 e b 211 1 1 e # 9679 is_equal c a 211 0 1 e b 211 0 1 e # 9680 is_equal c a 211 0 1 e b 211 1 1 f # 9681 is_equal c a 211 0 1 e b 211 0 1 e # 9682 is_equal c a 211 0 1 e b 211 1 1 3 6 7 8 9 11 13 14 15 16 17 18 20 23 25 30 31 32 34 36 37 43 45 48 50 51 52 54 59 60 62 63 70 71 72 73 76 77 79 82 83 85 87 89 92 96 97 98 99 102 109 115 117 119 121 125 126 127 128 129 130 131 133 135 136 137 140 141 142 143 146 147 148 150 154 157 159 160 162 163 166 168 169 171 172 174 175 178 180 182 183 184 185 187 188 189 190 191 193 194 195 198 202 204 205 209 210 # 9683 is_equal c a 211 0 1 f b 211 0 1 f # 9684 is_equal c a 211 0 1 f b 211 1 1 e # 9685 is_equal c a 211 0 1 f b 211 0 1 f # 9686 is_equal c a 211 0 1 f b 211 1 1 f # 9687 is_equal c a 211 0 1 f b 211 0 1 f # 9688 is_equal c a 211 0 1 f b 211 1 1 0 2 3 5 8 12 15 17 18 19 22 24 26 28 29 30 31 33 34 38 40 41 42 43 45 47 48 51 56 58 60 61 65 66 67 71 73 74 75 76 79 81 82 83 87 92 93 94 96 99 100 101 102 104 105 107 108 109 112 115 117 118 119 126 127 128 130 131 132 133 135 136 139 141 143 145 146 147 148 149 150 151 155 157 158 161 162 164 166 168 171 174 175 177 179 180 182 187 189 192 194 197 198 203 204 207 209 210 # 9689 is_equal c a 211 0 1 2 3 4 6 7 9 10 11 12 14 16 19 20 26 28 29 31 34 35 37 38 39 40 41 42 44 45 46 47 49 50 51 53 55 58 63 65 66 67 68 70 73 74 76 77 78 79 80 81 82 84 86 88 89 93 95 96 97 98 101 102 103 104 105 106 108 109 112 114 116 117 118 119 120 123 124 125 126 127 128 134 135 137 139 140 141 143 148 149 151 153 154 156 158 160 162 165 167 168 169 170 171 172 177 178 180 183 185 187 194 195 196 197 198 199 200 204 205 206 208 210 b 211 0 1 2 3 4 6 7 9 10 11 12 14 16 19 20 26 28 29 31 34 35 37 38 39 40 41 42 44 45 46 47 49 50 51 53 55 58 63 65 66 67 68 70 73 74 76 77 78 79 80 81 82 84 86 88 89 93 95 96 97 98 101 102 103 104 105 106 108 109 112 114 116 117 118 119 120 123 124 125 126 127 128 134 135 137 139 140 141 143 148 149 151 153 154 156 158 160 162 165 167 168 169 170 171 172 177 178 180 183 185 187 194 195 196 197 198 199 200 204 205 206 208 210 # 9690 is_equal c a 211 0 1 2 3 4 6 7 9 10 11 12 14 16 19 20 26 28 29 31 34 35 37 38 39 40 41 42 44 45 46 47 49 50 51 53 55 58 63 65 66 67 68 70 73 74 76 77 78 79 80 81 82 84 86 88 89 93 95 96 97 98 101 102 103 104 105 106 108 109 112 114 116 117 118 119 120 123 124 125 126 127 128 134 135 137 139 140 141 143 148 149 151 153 154 156 158 160 162 165 167 168 169 170 171 172 177 178 180 183 185 187 194 195 196 197 198 199 200 204 205 206 208 210 b 211 1 1 e # 9691 is_equal c a 211 0 1 1 2 4 5 6 7 9 11 13 14 16 17 21 22 23 25 26 27 28 32 34 35 38 39 42 43 45 47 49 51 54 55 57 58 60 63 64 66 68 69 75 76 77 78 83 84 86 89 92 93 95 98 99 103 110 111 114 116 117 121 124 125 128 134 135 136 140 142 144 145 147 149 151 152 153 155 157 160 162 164 165 167 169 171 176 177 180 181 183 185 186 187 188 189 191 196 197 200 201 204 206 207 b 211 0 1 1 2 4 5 6 7 9 11 13 14 16 17 21 22 23 25 26 27 28 32 34 35 38 39 42 43 45 47 49 51 54 55 57 58 60 63 64 66 68 69 75 76 77 78 83 84 86 89 92 93 95 98 99 103 110 111 114 116 117 121 124 125 128 134 135 136 140 142 144 145 147 149 151 152 153 155 157 160 162 164 165 167 169 171 176 177 180 181 183 185 186 187 188 189 191 196 197 200 201 204 206 207 # 9692 is_equal c a 211 0 1 1 2 4 5 6 7 9 11 13 14 16 17 21 22 23 25 26 27 28 32 34 35 38 39 42 43 45 47 49 51 54 55 57 58 60 63 64 66 68 69 75 76 77 78 83 84 86 89 92 93 95 98 99 103 110 111 114 116 117 121 124 125 128 134 135 136 140 142 144 145 147 149 151 152 153 155 157 160 162 164 165 167 169 171 176 177 180 181 183 185 186 187 188 189 191 196 197 200 201 204 206 207 b 211 1 1 f # 9693 is_equal c a 211 0 1 0 1 2 3 5 8 10 12 14 18 21 22 24 27 35 37 39 44 46 47 48 49 51 57 58 59 63 65 66 67 70 71 72 74 77 81 83 85 87 90 91 95 96 98 104 106 108 113 117 119 120 121 122 130 131 132 133 137 138 142 144 146 148 151 157 158 159 162 163 167 170 173 174 176 177 178 179 182 184 186 189 191 194 195 199 203 b 211 0 1 0 1 2 3 5 8 10 12 14 18 21 22 24 27 35 37 39 44 46 47 48 49 51 57 58 59 63 65 66 67 70 71 72 74 77 81 83 85 87 90 91 95 96 98 104 106 108 113 117 119 120 121 122 130 131 132 133 137 138 142 144 146 148 151 157 158 159 162 163 167 170 173 174 176 177 178 179 182 184 186 189 191 194 195 199 203 # 9694 is_equal c a 211 0 1 0 1 2 3 5 8 10 12 14 18 21 22 24 27 35 37 39 44 46 47 48 49 51 57 58 59 63 65 66 67 70 71 72 74 77 81 83 85 87 90 91 95 96 98 104 106 108 113 117 119 120 121 122 130 131 132 133 137 138 142 144 146 148 151 157 158 159 162 163 167 170 173 174 176 177 178 179 182 184 186 189 191 194 195 199 203 b 211 1 1 1 3 4 5 6 7 9 11 12 14 15 16 17 19 21 22 24 26 31 33 34 37 39 40 42 43 44 47 49 50 51 53 56 58 60 64 66 69 73 74 79 82 83 84 87 88 89 91 93 98 99 101 103 104 108 109 111 112 114 115 116 117 118 119 120 122 127 128 130 131 134 137 138 140 143 144 145 146 147 148 149 150 151 153 155 157 158 159 160 161 162 164 165 168 170 173 176 177 178 179 180 181 182 183 186 187 188 190 191 193 197 198 200 202 205 206 208 209 # 9695 is_equal c a 211 1 0 e b 211 1 0 e # 9696 is_equal c a 211 1 0 e b 211 0 0 e # 9697 is_equal c a 211 1 0 e b 211 1 0 e # 9698 is_equal c a 211 1 0 e b 211 0 0 f # 9699 is_equal c a 211 1 0 e b 211 1 0 e # 9700 is_equal c a 211 1 0 e b 211 0 0 0 3 4 5 7 8 9 11 14 16 17 19 20 21 22 25 26 27 28 29 33 37 38 40 42 43 44 45 48 49 54 55 56 57 59 61 63 66 67 69 71 74 78 79 83 88 89 92 96 103 104 106 107 108 109 110 111 112 114 116 118 119 123 124 127 128 130 131 132 134 135 137 138 141 145 146 147 149 150 153 155 157 158 161 164 165 166 168 169 170 173 174 175 176 177 178 180 182 183 186 187 188 189 198 201 203 204 207 208 210 # 9701 is_equal c a 211 1 0 f b 211 1 0 f # 9702 is_equal c a 211 1 0 f b 211 0 0 e # 9703 is_equal c a 211 1 0 f b 211 1 0 f # 9704 is_equal c a 211 1 0 f b 211 0 0 f # 9705 is_equal c a 211 1 0 f b 211 1 0 f # 9706 is_equal c a 211 1 0 f b 211 0 0 0 1 2 3 5 6 8 12 13 14 19 24 26 27 29 30 32 34 35 37 41 42 44 46 48 50 56 61 63 66 67 72 74 75 76 78 80 81 82 86 87 89 91 92 93 94 97 100 101 102 103 105 106 107 109 111 112 115 117 118 119 120 122 123 124 129 130 132 133 137 139 140 141 142 144 145 148 151 152 154 155 156 158 159 161 166 167 169 170 172 174 175 180 181 184 187 188 190 192 193 194 197 199 200 204 205 210 # 9707 is_equal c a 211 1 0 0 5 6 7 8 9 10 12 13 17 18 20 24 28 29 30 31 36 37 39 40 42 43 44 51 52 53 55 57 58 60 61 62 63 69 70 73 77 81 83 84 85 86 89 90 92 93 95 96 97 100 103 105 109 110 111 112 114 115 119 121 122 123 124 126 127 128 130 131 134 135 137 139 140 144 147 148 150 151 153 154 156 157 158 159 161 162 163 167 169 172 173 174 175 177 178 179 182 183 185 188 193 194 195 199 201 204 205 206 208 209 b 211 1 0 0 5 6 7 8 9 10 12 13 17 18 20 24 28 29 30 31 36 37 39 40 42 43 44 51 52 53 55 57 58 60 61 62 63 69 70 73 77 81 83 84 85 86 89 90 92 93 95 96 97 100 103 105 109 110 111 112 114 115 119 121 122 123 124 126 127 128 130 131 134 135 137 139 140 144 147 148 150 151 153 154 156 157 158 159 161 162 163 167 169 172 173 174 175 177 178 179 182 183 185 188 193 194 195 199 201 204 205 206 208 209 # 9708 is_equal c a 211 1 0 0 5 6 7 8 9 10 12 13 17 18 20 24 28 29 30 31 36 37 39 40 42 43 44 51 52 53 55 57 58 60 61 62 63 69 70 73 77 81 83 84 85 86 89 90 92 93 95 96 97 100 103 105 109 110 111 112 114 115 119 121 122 123 124 126 127 128 130 131 134 135 137 139 140 144 147 148 150 151 153 154 156 157 158 159 161 162 163 167 169 172 173 174 175 177 178 179 182 183 185 188 193 194 195 199 201 204 205 206 208 209 b 211 0 0 e # 9709 is_equal c a 211 1 0 6 7 9 10 13 15 17 22 25 27 28 30 34 35 38 39 41 43 44 45 46 48 50 51 52 57 58 59 61 63 65 66 67 71 73 74 75 80 81 85 86 87 88 89 90 91 92 93 94 95 96 98 100 104 108 110 113 114 115 116 117 118 128 129 130 131 134 136 138 140 142 145 148 149 150 155 157 160 162 163 164 165 167 169 171 175 179 181 183 185 186 187 190 192 193 195 196 198 201 203 206 208 b 211 1 0 6 7 9 10 13 15 17 22 25 27 28 30 34 35 38 39 41 43 44 45 46 48 50 51 52 57 58 59 61 63 65 66 67 71 73 74 75 80 81 85 86 87 88 89 90 91 92 93 94 95 96 98 100 104 108 110 113 114 115 116 117 118 128 129 130 131 134 136 138 140 142 145 148 149 150 155 157 160 162 163 164 165 167 169 171 175 179 181 183 185 186 187 190 192 193 195 196 198 201 203 206 208 # 9710 is_equal c a 211 1 0 6 7 9 10 13 15 17 22 25 27 28 30 34 35 38 39 41 43 44 45 46 48 50 51 52 57 58 59 61 63 65 66 67 71 73 74 75 80 81 85 86 87 88 89 90 91 92 93 94 95 96 98 100 104 108 110 113 114 115 116 117 118 128 129 130 131 134 136 138 140 142 145 148 149 150 155 157 160 162 163 164 165 167 169 171 175 179 181 183 185 186 187 190 192 193 195 196 198 201 203 206 208 b 211 0 0 f # 9711 is_equal c a 211 1 0 2 8 9 12 15 17 18 21 22 24 29 30 31 32 33 37 38 40 41 43 45 46 48 50 53 54 56 58 61 62 66 67 68 70 71 75 80 82 83 84 85 87 89 91 92 94 97 98 101 103 105 107 108 109 111 112 114 115 117 118 119 120 122 123 125 126 127 129 131 132 133 137 140 141 143 145 146 147 148 149 150 151 152 153 154 157 159 160 161 162 163 164 169 170 171 172 173 174 176 179 182 184 185 186 194 195 199 200 201 202 203 204 206 207 208 210 b 211 1 0 2 8 9 12 15 17 18 21 22 24 29 30 31 32 33 37 38 40 41 43 45 46 48 50 53 54 56 58 61 62 66 67 68 70 71 75 80 82 83 84 85 87 89 91 92 94 97 98 101 103 105 107 108 109 111 112 114 115 117 118 119 120 122 123 125 126 127 129 131 132 133 137 140 141 143 145 146 147 148 149 150 151 152 153 154 157 159 160 161 162 163 164 169 170 171 172 173 174 176 179 182 184 185 186 194 195 199 200 201 202 203 204 206 207 208 210 # 9712 is_equal c a 211 1 0 2 8 9 12 15 17 18 21 22 24 29 30 31 32 33 37 38 40 41 43 45 46 48 50 53 54 56 58 61 62 66 67 68 70 71 75 80 82 83 84 85 87 89 91 92 94 97 98 101 103 105 107 108 109 111 112 114 115 117 118 119 120 122 123 125 126 127 129 131 132 133 137 140 141 143 145 146 147 148 149 150 151 152 153 154 157 159 160 161 162 163 164 169 170 171 172 173 174 176 179 182 184 185 186 194 195 199 200 201 202 203 204 206 207 208 210 b 211 0 0 2 5 7 12 13 15 17 18 19 20 21 22 24 27 29 30 33 34 35 36 38 39 40 44 45 48 53 54 62 65 67 69 70 71 77 80 81 82 84 85 87 89 92 94 99 102 104 106 108 111 112 115 116 117 118 122 124 125 126 128 129 130 133 134 135 136 139 140 141 142 143 144 147 148 153 154 156 157 159 160 162 163 165 166 171 172 174 175 178 182 183 185 187 188 189 190 193 198 199 200 201 202 203 206 207 208 209 # 9713 is_equal c a 211 1 0 e b 211 1 0 e # 9714 is_equal c a 211 1 0 e b 211 0 1 e # 9715 is_equal c a 211 1 0 e b 211 1 0 e # 9716 is_equal c a 211 1 0 e b 211 0 1 f # 9717 is_equal c a 211 1 0 e b 211 1 0 e # 9718 is_equal c a 211 1 0 e b 211 0 1 1 8 10 13 14 15 18 19 21 22 23 24 26 27 28 30 35 37 38 41 42 43 44 45 46 47 50 51 53 54 56 58 59 60 61 65 67 68 71 74 75 78 79 80 81 84 87 88 90 91 93 95 96 100 101 103 104 106 108 109 110 111 112 114 115 116 120 127 128 129 131 133 134 137 138 139 140 141 142 143 145 147 149 153 154 157 160 161 162 164 165 166 173 174 176 179 181 183 184 185 187 188 189 191 192 194 195 196 197 198 202 205 206 207 210 # 9719 is_equal c a 211 1 0 f b 211 1 0 f # 9720 is_equal c a 211 1 0 f b 211 0 1 e # 9721 is_equal c a 211 1 0 f b 211 1 0 f # 9722 is_equal c a 211 1 0 f b 211 0 1 f # 9723 is_equal c a 211 1 0 f b 211 1 0 f # 9724 is_equal c a 211 1 0 f b 211 0 1 0 6 11 13 14 15 16 17 18 20 22 25 28 29 31 33 35 36 37 38 43 46 47 48 49 51 52 56 57 58 59 60 62 65 68 72 73 75 76 77 78 79 80 82 83 92 94 95 101 102 105 108 111 115 116 117 120 121 122 123 125 126 129 130 131 132 134 138 143 144 145 146 147 155 157 160 161 163 166 167 169 171 172 173 174 175 177 179 181 183 184 185 186 188 189 190 191 192 193 199 201 202 204 205 206 208 # 9725 is_equal c a 211 1 0 2 6 9 11 12 17 18 21 22 24 25 27 29 31 33 34 37 38 39 40 42 43 47 54 56 63 67 70 75 76 77 78 79 83 86 88 90 92 99 100 101 102 108 113 114 115 117 122 123 124 125 130 133 135 137 140 149 150 151 154 157 159 163 165 166 167 170 172 174 175 176 183 184 185 188 189 195 199 200 204 207 208 209 b 211 1 0 2 6 9 11 12 17 18 21 22 24 25 27 29 31 33 34 37 38 39 40 42 43 47 54 56 63 67 70 75 76 77 78 79 83 86 88 90 92 99 100 101 102 108 113 114 115 117 122 123 124 125 130 133 135 137 140 149 150 151 154 157 159 163 165 166 167 170 172 174 175 176 183 184 185 188 189 195 199 200 204 207 208 209 # 9726 is_equal c a 211 1 0 2 6 9 11 12 17 18 21 22 24 25 27 29 31 33 34 37 38 39 40 42 43 47 54 56 63 67 70 75 76 77 78 79 83 86 88 90 92 99 100 101 102 108 113 114 115 117 122 123 124 125 130 133 135 137 140 149 150 151 154 157 159 163 165 166 167 170 172 174 175 176 183 184 185 188 189 195 199 200 204 207 208 209 b 211 0 1 e # 9727 is_equal c a 211 1 0 2 4 5 8 13 14 18 19 20 26 29 30 34 39 41 43 44 45 49 54 56 57 58 60 62 63 64 68 69 72 75 78 79 82 83 84 85 87 89 90 93 98 99 101 103 106 107 108 109 110 112 113 115 119 123 128 133 135 137 138 140 142 143 145 147 149 150 151 153 154 155 160 161 162 163 165 166 167 168 170 171 172 173 176 177 178 180 181 184 188 190 195 200 203 205 206 207 208 209 b 211 1 0 2 4 5 8 13 14 18 19 20 26 29 30 34 39 41 43 44 45 49 54 56 57 58 60 62 63 64 68 69 72 75 78 79 82 83 84 85 87 89 90 93 98 99 101 103 106 107 108 109 110 112 113 115 119 123 128 133 135 137 138 140 142 143 145 147 149 150 151 153 154 155 160 161 162 163 165 166 167 168 170 171 172 173 176 177 178 180 181 184 188 190 195 200 203 205 206 207 208 209 # 9728 is_equal c a 211 1 0 2 4 5 8 13 14 18 19 20 26 29 30 34 39 41 43 44 45 49 54 56 57 58 60 62 63 64 68 69 72 75 78 79 82 83 84 85 87 89 90 93 98 99 101 103 106 107 108 109 110 112 113 115 119 123 128 133 135 137 138 140 142 143 145 147 149 150 151 153 154 155 160 161 162 163 165 166 167 168 170 171 172 173 176 177 178 180 181 184 188 190 195 200 203 205 206 207 208 209 b 211 0 1 f # 9729 is_equal c a 211 1 0 0 1 5 7 9 11 13 15 17 19 21 25 28 32 33 34 36 41 44 45 49 51 52 60 61 62 63 64 67 68 70 71 75 76 77 80 83 84 85 89 90 91 92 94 95 96 97 99 102 103 104 106 107 109 113 118 119 121 122 123 126 130 131 132 133 134 136 143 145 147 156 158 161 165 166 169 170 171 174 175 176 180 181 182 186 187 191 195 197 199 200 201 202 205 209 b 211 1 0 0 1 5 7 9 11 13 15 17 19 21 25 28 32 33 34 36 41 44 45 49 51 52 60 61 62 63 64 67 68 70 71 75 76 77 80 83 84 85 89 90 91 92 94 95 96 97 99 102 103 104 106 107 109 113 118 119 121 122 123 126 130 131 132 133 134 136 143 145 147 156 158 161 165 166 169 170 171 174 175 176 180 181 182 186 187 191 195 197 199 200 201 202 205 209 # 9730 is_equal c a 211 1 0 0 1 5 7 9 11 13 15 17 19 21 25 28 32 33 34 36 41 44 45 49 51 52 60 61 62 63 64 67 68 70 71 75 76 77 80 83 84 85 89 90 91 92 94 95 96 97 99 102 103 104 106 107 109 113 118 119 121 122 123 126 130 131 132 133 134 136 143 145 147 156 158 161 165 166 169 170 171 174 175 176 180 181 182 186 187 191 195 197 199 200 201 202 205 209 b 211 0 1 1 3 4 7 8 9 11 13 15 23 26 27 28 29 34 36 39 41 42 43 46 47 49 50 51 55 61 63 68 69 75 77 78 79 80 81 82 84 86 88 90 91 94 96 97 98 99 100 101 107 109 110 112 114 115 116 117 121 126 127 129 130 131 132 133 135 138 139 144 146 147 148 153 154 156 157 167 168 169 170 174 177 180 182 186 191 193 194 195 202 203 207 # 9731 is_equal c a 211 1 0 e b 211 1 0 e # 9732 is_equal c a 211 1 0 e b 211 1 0 e # 9733 is_equal c a 211 1 0 e b 211 1 0 e # 9734 is_equal c a 211 1 0 e b 211 1 0 f # 9735 is_equal c a 211 1 0 e b 211 1 0 e # 9736 is_equal c a 211 1 0 e b 211 1 0 1 5 8 10 11 12 13 14 15 16 17 22 23 24 27 28 29 31 32 33 35 37 45 46 48 52 55 56 58 59 62 63 64 66 68 70 72 80 81 85 89 93 98 100 101 103 104 105 109 112 113 114 116 117 118 119 120 121 124 125 132 133 135 136 137 141 142 144 153 154 156 161 162 164 167 169 171 174 176 178 180 182 183 188 189 190 192 193 194 195 198 200 206 208 # 9737 is_equal c a 211 1 0 f b 211 1 0 f # 9738 is_equal c a 211 1 0 f b 211 1 0 e # 9739 is_equal c a 211 1 0 f b 211 1 0 f # 9740 is_equal c a 211 1 0 f b 211 1 0 f # 9741 is_equal c a 211 1 0 f b 211 1 0 f # 9742 is_equal c a 211 1 0 f b 211 1 0 1 4 5 6 10 11 13 15 16 17 18 20 21 22 25 26 27 28 34 39 40 45 48 49 50 52 54 57 64 66 68 70 71 72 74 75 81 82 86 87 89 93 94 96 97 98 99 100 101 103 106 107 108 109 110 111 112 113 117 120 121 122 125 126 128 129 131 133 135 139 142 146 150 152 153 154 156 157 158 159 163 164 165 166 172 174 175 179 180 182 183 185 191 193 194 196 197 198 199 200 201 203 206 207 208 # 9743 is_equal c a 211 1 0 1 7 8 9 10 11 13 14 15 22 24 26 28 30 32 34 36 38 40 41 44 45 46 50 51 52 53 55 56 59 64 66 69 70 72 74 77 78 79 82 85 86 91 93 96 97 98 100 101 102 104 105 106 109 110 111 113 114 116 117 118 119 121 122 123 124 125 126 127 128 129 131 136 138 140 141 146 153 156 158 159 160 162 165 166 169 170 175 179 180 188 191 192 198 200 201 202 204 209 b 211 1 0 1 7 8 9 10 11 13 14 15 22 24 26 28 30 32 34 36 38 40 41 44 45 46 50 51 52 53 55 56 59 64 66 69 70 72 74 77 78 79 82 85 86 91 93 96 97 98 100 101 102 104 105 106 109 110 111 113 114 116 117 118 119 121 122 123 124 125 126 127 128 129 131 136 138 140 141 146 153 156 158 159 160 162 165 166 169 170 175 179 180 188 191 192 198 200 201 202 204 209 # 9744 is_equal c a 211 1 0 1 7 8 9 10 11 13 14 15 22 24 26 28 30 32 34 36 38 40 41 44 45 46 50 51 52 53 55 56 59 64 66 69 70 72 74 77 78 79 82 85 86 91 93 96 97 98 100 101 102 104 105 106 109 110 111 113 114 116 117 118 119 121 122 123 124 125 126 127 128 129 131 136 138 140 141 146 153 156 158 159 160 162 165 166 169 170 175 179 180 188 191 192 198 200 201 202 204 209 b 211 1 0 e # 9745 is_equal c a 211 1 0 4 5 6 8 10 13 14 17 19 20 21 24 25 26 29 30 32 34 35 37 38 39 41 43 44 47 50 54 56 57 58 61 62 64 65 68 72 73 74 75 76 78 80 84 86 87 88 89 90 93 94 98 101 104 107 108 109 110 114 116 118 119 121 123 124 129 131 132 133 135 137 140 142 144 147 148 153 154 156 161 164 165 166 168 170 172 174 175 176 178 179 180 184 187 189 191 192 193 194 195 196 197 199 204 205 207 210 b 211 1 0 4 5 6 8 10 13 14 17 19 20 21 24 25 26 29 30 32 34 35 37 38 39 41 43 44 47 50 54 56 57 58 61 62 64 65 68 72 73 74 75 76 78 80 84 86 87 88 89 90 93 94 98 101 104 107 108 109 110 114 116 118 119 121 123 124 129 131 132 133 135 137 140 142 144 147 148 153 154 156 161 164 165 166 168 170 172 174 175 176 178 179 180 184 187 189 191 192 193 194 195 196 197 199 204 205 207 210 # 9746 is_equal c a 211 1 0 4 5 6 8 10 13 14 17 19 20 21 24 25 26 29 30 32 34 35 37 38 39 41 43 44 47 50 54 56 57 58 61 62 64 65 68 72 73 74 75 76 78 80 84 86 87 88 89 90 93 94 98 101 104 107 108 109 110 114 116 118 119 121 123 124 129 131 132 133 135 137 140 142 144 147 148 153 154 156 161 164 165 166 168 170 172 174 175 176 178 179 180 184 187 189 191 192 193 194 195 196 197 199 204 205 207 210 b 211 1 0 f # 9747 is_equal c a 211 1 0 0 2 6 8 9 10 12 13 15 16 19 20 22 25 26 27 30 32 33 36 38 39 40 41 43 44 45 47 49 54 57 59 60 62 63 64 66 67 68 69 70 71 73 76 77 78 79 80 83 84 85 88 89 91 96 101 103 104 105 106 107 108 109 110 113 116 117 118 119 120 125 129 130 131 132 133 135 136 142 143 150 152 154 159 160 162 163 167 168 169 176 177 178 181 182 183 185 187 188 189 190 191 192 194 196 201 202 205 206 208 209 210 b 211 1 0 0 2 6 8 9 10 12 13 15 16 19 20 22 25 26 27 30 32 33 36 38 39 40 41 43 44 45 47 49 54 57 59 60 62 63 64 66 67 68 69 70 71 73 76 77 78 79 80 83 84 85 88 89 91 96 101 103 104 105 106 107 108 109 110 113 116 117 118 119 120 125 129 130 131 132 133 135 136 142 143 150 152 154 159 160 162 163 167 168 169 176 177 178 181 182 183 185 187 188 189 190 191 192 194 196 201 202 205 206 208 209 210 # 9748 is_equal c a 211 1 0 0 2 6 8 9 10 12 13 15 16 19 20 22 25 26 27 30 32 33 36 38 39 40 41 43 44 45 47 49 54 57 59 60 62 63 64 66 67 68 69 70 71 73 76 77 78 79 80 83 84 85 88 89 91 96 101 103 104 105 106 107 108 109 110 113 116 117 118 119 120 125 129 130 131 132 133 135 136 142 143 150 152 154 159 160 162 163 167 168 169 176 177 178 181 182 183 185 187 188 189 190 191 192 194 196 201 202 205 206 208 209 210 b 211 1 0 0 2 3 4 9 12 13 19 20 22 25 27 29 36 37 38 40 41 42 43 44 45 46 52 53 56 57 58 60 62 64 68 70 71 75 79 80 83 85 86 89 97 98 104 105 109 113 114 115 117 118 119 120 124 125 126 128 130 131 132 133 135 136 137 139 140 141 143 144 146 149 154 155 159 160 161 162 163 164 166 167 170 173 177 180 181 182 183 186 188 191 194 196 197 198 201 202 203 204 205 207 208 209 # 9749 is_equal c a 211 1 0 e b 211 1 0 e # 9750 is_equal c a 211 1 0 e b 211 1 1 e # 9751 is_equal c a 211 1 0 e b 211 1 0 e # 9752 is_equal c a 211 1 0 e b 211 1 1 f # 9753 is_equal c a 211 1 0 e b 211 1 0 e # 9754 is_equal c a 211 1 0 e b 211 1 1 0 3 4 5 6 8 9 10 11 14 17 19 24 27 32 33 34 37 38 40 42 43 44 45 47 49 50 51 54 56 60 61 66 67 69 71 74 75 76 78 81 83 84 86 87 88 90 92 94 96 97 100 101 103 104 106 107 108 109 112 113 114 115 116 117 119 124 126 127 131 132 134 135 136 137 138 140 142 143 145 148 149 150 151 157 159 161 162 165 167 168 171 172 175 176 177 179 180 182 185 186 187 188 190 197 199 200 201 202 203 206 209 210 # 9755 is_equal c a 211 1 0 f b 211 1 0 f # 9756 is_equal c a 211 1 0 f b 211 1 1 e # 9757 is_equal c a 211 1 0 f b 211 1 0 f # 9758 is_equal c a 211 1 0 f b 211 1 1 f # 9759 is_equal c a 211 1 0 f b 211 1 0 f # 9760 is_equal c a 211 1 0 f b 211 1 1 2 3 4 5 6 7 8 11 13 15 22 23 24 26 27 29 30 31 32 33 35 41 43 44 45 46 48 52 55 56 57 58 60 61 62 63 67 68 69 72 75 80 81 83 85 87 88 92 96 97 100 101 102 103 105 106 109 110 111 112 114 115 116 118 119 126 130 131 134 138 139 141 142 144 147 148 150 153 154 155 157 159 161 162 166 167 168 169 170 172 174 175 176 177 178 179 182 183 185 186 187 189 190 191 192 196 199 203 204 206 207 # 9761 is_equal c a 211 1 0 1 6 8 9 12 13 14 16 17 18 19 24 26 27 28 33 35 36 39 41 45 46 48 49 50 56 58 60 62 64 67 68 69 70 72 73 74 76 77 79 80 83 84 85 90 93 94 96 99 102 103 105 109 115 120 122 126 128 130 131 133 134 135 136 138 140 144 145 147 149 151 156 157 158 161 163 164 168 170 171 172 174 176 180 181 186 187 191 193 195 197 202 205 206 210 b 211 1 0 1 6 8 9 12 13 14 16 17 18 19 24 26 27 28 33 35 36 39 41 45 46 48 49 50 56 58 60 62 64 67 68 69 70 72 73 74 76 77 79 80 83 84 85 90 93 94 96 99 102 103 105 109 115 120 122 126 128 130 131 133 134 135 136 138 140 144 145 147 149 151 156 157 158 161 163 164 168 170 171 172 174 176 180 181 186 187 191 193 195 197 202 205 206 210 # 9762 is_equal c a 211 1 0 1 6 8 9 12 13 14 16 17 18 19 24 26 27 28 33 35 36 39 41 45 46 48 49 50 56 58 60 62 64 67 68 69 70 72 73 74 76 77 79 80 83 84 85 90 93 94 96 99 102 103 105 109 115 120 122 126 128 130 131 133 134 135 136 138 140 144 145 147 149 151 156 157 158 161 163 164 168 170 171 172 174 176 180 181 186 187 191 193 195 197 202 205 206 210 b 211 1 1 e # 9763 is_equal c a 211 1 0 2 8 9 10 11 12 13 15 19 20 21 22 23 25 26 27 28 29 34 35 36 37 39 40 42 43 45 46 47 51 52 54 56 57 58 59 60 63 64 65 66 67 68 69 70 71 73 76 79 81 82 84 85 86 87 88 89 90 102 104 106 107 108 110 112 113 114 115 116 118 121 122 126 128 129 130 131 133 138 139 140 141 143 145 146 149 150 151 152 153 155 157 159 160 162 164 168 171 175 178 179 180 181 182 183 185 186 187 188 190 191 193 197 198 201 202 207 208 210 b 211 1 0 2 8 9 10 11 12 13 15 19 20 21 22 23 25 26 27 28 29 34 35 36 37 39 40 42 43 45 46 47 51 52 54 56 57 58 59 60 63 64 65 66 67 68 69 70 71 73 76 79 81 82 84 85 86 87 88 89 90 102 104 106 107 108 110 112 113 114 115 116 118 121 122 126 128 129 130 131 133 138 139 140 141 143 145 146 149 150 151 152 153 155 157 159 160 162 164 168 171 175 178 179 180 181 182 183 185 186 187 188 190 191 193 197 198 201 202 207 208 210 # 9764 is_equal c a 211 1 0 2 8 9 10 11 12 13 15 19 20 21 22 23 25 26 27 28 29 34 35 36 37 39 40 42 43 45 46 47 51 52 54 56 57 58 59 60 63 64 65 66 67 68 69 70 71 73 76 79 81 82 84 85 86 87 88 89 90 102 104 106 107 108 110 112 113 114 115 116 118 121 122 126 128 129 130 131 133 138 139 140 141 143 145 146 149 150 151 152 153 155 157 159 160 162 164 168 171 175 178 179 180 181 182 183 185 186 187 188 190 191 193 197 198 201 202 207 208 210 b 211 1 1 f # 9765 is_equal c a 211 1 0 0 1 2 5 8 10 11 12 13 14 16 17 20 24 25 26 27 29 30 32 34 37 38 39 41 42 45 46 50 53 54 56 57 58 60 61 63 69 71 72 76 78 82 83 85 88 92 93 98 108 110 112 113 116 119 120 121 123 124 126 128 129 130 132 133 134 138 141 144 145 147 149 150 151 152 153 154 155 157 161 162 164 165 166 168 169 170 172 174 175 176 178 181 184 185 188 190 193 194 197 198 200 201 202 203 204 205 206 207 208 209 b 211 1 0 0 1 2 5 8 10 11 12 13 14 16 17 20 24 25 26 27 29 30 32 34 37 38 39 41 42 45 46 50 53 54 56 57 58 60 61 63 69 71 72 76 78 82 83 85 88 92 93 98 108 110 112 113 116 119 120 121 123 124 126 128 129 130 132 133 134 138 141 144 145 147 149 150 151 152 153 154 155 157 161 162 164 165 166 168 169 170 172 174 175 176 178 181 184 185 188 190 193 194 197 198 200 201 202 203 204 205 206 207 208 209 # 9766 is_equal c a 211 1 0 0 1 2 5 8 10 11 12 13 14 16 17 20 24 25 26 27 29 30 32 34 37 38 39 41 42 45 46 50 53 54 56 57 58 60 61 63 69 71 72 76 78 82 83 85 88 92 93 98 108 110 112 113 116 119 120 121 123 124 126 128 129 130 132 133 134 138 141 144 145 147 149 150 151 152 153 154 155 157 161 162 164 165 166 168 169 170 172 174 175 176 178 181 184 185 188 190 193 194 197 198 200 201 202 203 204 205 206 207 208 209 b 211 1 1 6 12 13 17 19 20 21 22 24 25 27 28 29 31 33 35 42 47 49 50 51 52 53 55 56 57 58 60 61 64 65 66 67 71 72 74 76 79 82 83 86 87 91 93 96 101 102 105 107 109 110 111 112 113 114 119 120 121 122 124 125 126 127 129 130 131 132 133 134 135 136 138 141 144 145 149 153 154 156 157 158 160 161 162 164 165 167 171 173 174 176 178 182 183 185 186 189 192 194 195 198 199 200 202 205 206 207 209 # 9767 is_equal c a 211 1 1 e b 211 1 1 e # 9768 is_equal c a 211 1 1 e b 211 0 0 e # 9769 is_equal c a 211 1 1 e b 211 1 1 e # 9770 is_equal c a 211 1 1 e b 211 0 0 f # 9771 is_equal c a 211 1 1 e b 211 1 1 e # 9772 is_equal c a 211 1 1 e b 211 0 0 1 2 5 10 16 19 21 22 24 27 28 29 32 36 37 38 40 41 42 45 49 51 53 61 64 65 66 67 68 71 73 74 76 78 81 83 84 88 89 90 94 97 99 101 102 104 105 106 107 109 112 115 116 119 121 123 129 134 136 137 138 140 142 144 145 147 150 151 155 156 157 159 161 163 164 167 173 174 176 177 178 181 183 184 185 186 187 189 190 191 192 194 195 196 198 201 203 204 207 # 9773 is_equal c a 211 1 1 f b 211 1 1 f # 9774 is_equal c a 211 1 1 f b 211 0 0 e # 9775 is_equal c a 211 1 1 f b 211 1 1 f # 9776 is_equal c a 211 1 1 f b 211 0 0 f # 9777 is_equal c a 211 1 1 f b 211 1 1 f # 9778 is_equal c a 211 1 1 f b 211 0 0 0 1 2 3 4 7 8 11 13 14 15 18 19 20 21 23 24 26 27 28 33 37 38 47 48 52 53 55 59 61 63 64 65 66 69 70 71 75 76 77 80 81 82 83 84 86 87 90 91 92 94 95 97 98 99 100 101 104 105 106 107 119 122 124 125 127 130 132 135 136 138 140 141 142 146 147 148 149 150 153 154 155 157 158 159 161 164 165 167 169 172 174 176 178 179 181 182 183 185 186 187 188 189 190 191 196 201 206 208 209 # 9779 is_equal c a 211 1 1 3 4 5 6 7 8 10 11 12 14 18 20 21 22 27 28 29 37 42 44 45 46 47 49 52 54 56 59 61 62 63 67 69 70 71 73 75 76 78 82 84 85 86 87 92 96 98 99 101 102 104 105 107 112 114 115 118 119 120 123 124 126 128 129 132 134 135 138 140 142 143 144 145 146 151 152 154 156 157 158 159 160 163 164 165 166 167 169 171 174 178 180 181 183 188 191 192 193 196 199 200 201 202 205 207 b 211 1 1 3 4 5 6 7 8 10 11 12 14 18 20 21 22 27 28 29 37 42 44 45 46 47 49 52 54 56 59 61 62 63 67 69 70 71 73 75 76 78 82 84 85 86 87 92 96 98 99 101 102 104 105 107 112 114 115 118 119 120 123 124 126 128 129 132 134 135 138 140 142 143 144 145 146 151 152 154 156 157 158 159 160 163 164 165 166 167 169 171 174 178 180 181 183 188 191 192 193 196 199 200 201 202 205 207 # 9780 is_equal c a 211 1 1 3 4 5 6 7 8 10 11 12 14 18 20 21 22 27 28 29 37 42 44 45 46 47 49 52 54 56 59 61 62 63 67 69 70 71 73 75 76 78 82 84 85 86 87 92 96 98 99 101 102 104 105 107 112 114 115 118 119 120 123 124 126 128 129 132 134 135 138 140 142 143 144 145 146 151 152 154 156 157 158 159 160 163 164 165 166 167 169 171 174 178 180 181 183 188 191 192 193 196 199 200 201 202 205 207 b 211 0 0 e # 9781 is_equal c a 211 1 1 2 3 4 5 8 10 11 15 23 24 25 30 32 37 38 44 48 52 53 56 58 59 60 61 63 65 67 68 69 71 76 77 78 79 83 84 85 87 90 94 99 102 103 104 107 109 110 117 118 121 122 123 124 125 128 132 134 135 136 138 139 141 145 146 147 148 149 153 156 158 159 160 161 162 163 165 166 167 169 170 172 174 177 182 183 188 190 191 193 194 196 197 200 202 203 204 205 210 b 211 1 1 2 3 4 5 8 10 11 15 23 24 25 30 32 37 38 44 48 52 53 56 58 59 60 61 63 65 67 68 69 71 76 77 78 79 83 84 85 87 90 94 99 102 103 104 107 109 110 117 118 121 122 123 124 125 128 132 134 135 136 138 139 141 145 146 147 148 149 153 156 158 159 160 161 162 163 165 166 167 169 170 172 174 177 182 183 188 190 191 193 194 196 197 200 202 203 204 205 210 # 9782 is_equal c a 211 1 1 2 3 4 5 8 10 11 15 23 24 25 30 32 37 38 44 48 52 53 56 58 59 60 61 63 65 67 68 69 71 76 77 78 79 83 84 85 87 90 94 99 102 103 104 107 109 110 117 118 121 122 123 124 125 128 132 134 135 136 138 139 141 145 146 147 148 149 153 156 158 159 160 161 162 163 165 166 167 169 170 172 174 177 182 183 188 190 191 193 194 196 197 200 202 203 204 205 210 b 211 0 0 f # 9783 is_equal c a 211 1 1 0 1 2 3 7 8 9 10 11 12 13 16 18 19 20 22 23 26 27 28 30 31 33 34 35 38 42 46 47 48 49 50 51 53 55 58 60 61 64 67 68 71 72 75 76 77 78 80 81 83 84 85 86 87 94 95 96 98 105 108 110 113 115 116 118 119 120 123 124 125 126 129 130 131 134 135 138 139 141 143 144 145 146 149 151 152 153 154 155 156 157 159 160 162 164 165 166 167 168 169 170 172 177 178 179 180 182 183 185 187 188 189 190 191 192 193 194 195 197 198 200 201 202 203 207 b 211 1 1 0 1 2 3 7 8 9 10 11 12 13 16 18 19 20 22 23 26 27 28 30 31 33 34 35 38 42 46 47 48 49 50 51 53 55 58 60 61 64 67 68 71 72 75 76 77 78 80 81 83 84 85 86 87 94 95 96 98 105 108 110 113 115 116 118 119 120 123 124 125 126 129 130 131 134 135 138 139 141 143 144 145 146 149 151 152 153 154 155 156 157 159 160 162 164 165 166 167 168 169 170 172 177 178 179 180 182 183 185 187 188 189 190 191 192 193 194 195 197 198 200 201 202 203 207 # 9784 is_equal c a 211 1 1 0 1 2 3 7 8 9 10 11 12 13 16 18 19 20 22 23 26 27 28 30 31 33 34 35 38 42 46 47 48 49 50 51 53 55 58 60 61 64 67 68 71 72 75 76 77 78 80 81 83 84 85 86 87 94 95 96 98 105 108 110 113 115 116 118 119 120 123 124 125 126 129 130 131 134 135 138 139 141 143 144 145 146 149 151 152 153 154 155 156 157 159 160 162 164 165 166 167 168 169 170 172 177 178 179 180 182 183 185 187 188 189 190 191 192 193 194 195 197 198 200 201 202 203 207 b 211 0 0 0 1 3 4 5 7 8 9 10 12 13 15 19 22 25 29 30 33 34 36 39 45 46 51 52 53 54 56 63 68 69 70 71 76 78 80 82 85 86 91 93 95 97 98 101 103 108 114 115 117 118 119 120 122 127 128 136 138 139 140 144 146 148 149 151 153 155 157 158 160 162 164 165 166 167 172 173 176 178 179 181 182 183 184 186 189 195 198 199 200 202 204 206 207 208 209 210 # 9785 is_equal c a 211 1 1 e b 211 1 1 e # 9786 is_equal c a 211 1 1 e b 211 0 1 e # 9787 is_equal c a 211 1 1 e b 211 1 1 e # 9788 is_equal c a 211 1 1 e b 211 0 1 f # 9789 is_equal c a 211 1 1 e b 211 1 1 e # 9790 is_equal c a 211 1 1 e b 211 0 1 1 2 4 7 8 11 12 13 15 16 17 19 21 22 23 24 26 27 29 30 31 33 37 39 41 42 43 46 51 52 53 54 55 57 63 64 75 76 79 82 87 89 91 92 94 95 96 97 102 103 104 109 111 115 116 117 119 121 122 129 131 134 135 139 140 141 142 146 147 150 151 153 157 158 159 162 163 166 167 168 170 171 173 174 177 179 183 185 189 191 193 194 195 198 200 201 202 203 204 205 208 209 210 # 9791 is_equal c a 211 1 1 f b 211 1 1 f # 9792 is_equal c a 211 1 1 f b 211 0 1 e # 9793 is_equal c a 211 1 1 f b 211 1 1 f # 9794 is_equal c a 211 1 1 f b 211 0 1 f # 9795 is_equal c a 211 1 1 f b 211 1 1 f # 9796 is_equal c a 211 1 1 f b 211 0 1 4 8 11 12 16 17 20 21 23 24 27 30 31 32 34 36 38 40 43 44 45 47 48 50 59 60 64 66 68 69 70 71 72 74 75 76 77 79 83 84 88 90 91 92 96 98 99 100 101 102 103 105 106 108 110 112 116 118 119 120 121 123 125 128 131 134 136 137 138 139 140 141 142 143 144 147 148 149 151 152 153 155 156 157 159 160 162 164 165 166 167 176 178 185 190 192 193 194 195 199 200 201 205 210 # 9797 is_equal c a 211 1 1 0 1 2 3 5 7 9 10 11 12 16 17 18 19 20 21 26 27 35 43 44 45 47 48 50 51 54 55 57 58 59 60 64 66 67 68 72 73 77 81 82 83 85 86 87 88 90 91 92 93 94 97 101 102 104 105 106 108 109 111 112 114 118 120 121 122 123 124 125 128 129 130 132 134 138 144 145 146 149 162 163 164 165 171 173 176 177 180 181 182 185 187 189 191 194 195 201 203 209 b 211 1 1 0 1 2 3 5 7 9 10 11 12 16 17 18 19 20 21 26 27 35 43 44 45 47 48 50 51 54 55 57 58 59 60 64 66 67 68 72 73 77 81 82 83 85 86 87 88 90 91 92 93 94 97 101 102 104 105 106 108 109 111 112 114 118 120 121 122 123 124 125 128 129 130 132 134 138 144 145 146 149 162 163 164 165 171 173 176 177 180 181 182 185 187 189 191 194 195 201 203 209 # 9798 is_equal c a 211 1 1 0 1 2 3 5 7 9 10 11 12 16 17 18 19 20 21 26 27 35 43 44 45 47 48 50 51 54 55 57 58 59 60 64 66 67 68 72 73 77 81 82 83 85 86 87 88 90 91 92 93 94 97 101 102 104 105 106 108 109 111 112 114 118 120 121 122 123 124 125 128 129 130 132 134 138 144 145 146 149 162 163 164 165 171 173 176 177 180 181 182 185 187 189 191 194 195 201 203 209 b 211 0 1 e # 9799 is_equal c a 211 1 1 1 6 8 9 10 19 20 23 24 25 27 29 32 33 34 35 36 37 39 40 41 47 48 49 50 51 53 54 55 56 58 59 63 66 70 74 76 79 81 82 84 85 87 88 90 92 96 102 103 104 108 111 113 116 117 119 121 122 126 127 131 132 133 134 137 138 143 145 147 148 149 150 152 153 154 155 156 158 160 166 167 169 170 171 174 176 179 180 182 183 184 185 186 187 189 191 192 193 198 201 203 205 209 210 b 211 1 1 1 6 8 9 10 19 20 23 24 25 27 29 32 33 34 35 36 37 39 40 41 47 48 49 50 51 53 54 55 56 58 59 63 66 70 74 76 79 81 82 84 85 87 88 90 92 96 102 103 104 108 111 113 116 117 119 121 122 126 127 131 132 133 134 137 138 143 145 147 148 149 150 152 153 154 155 156 158 160 166 167 169 170 171 174 176 179 180 182 183 184 185 186 187 189 191 192 193 198 201 203 205 209 210 # 9800 is_equal c a 211 1 1 1 6 8 9 10 19 20 23 24 25 27 29 32 33 34 35 36 37 39 40 41 47 48 49 50 51 53 54 55 56 58 59 63 66 70 74 76 79 81 82 84 85 87 88 90 92 96 102 103 104 108 111 113 116 117 119 121 122 126 127 131 132 133 134 137 138 143 145 147 148 149 150 152 153 154 155 156 158 160 166 167 169 170 171 174 176 179 180 182 183 184 185 186 187 189 191 192 193 198 201 203 205 209 210 b 211 0 1 f # 9801 is_equal c a 211 1 1 1 2 3 4 5 6 7 8 11 15 16 17 18 21 24 28 31 34 36 37 39 41 42 43 47 51 52 53 55 57 59 60 62 64 65 67 68 69 70 71 73 74 75 78 79 81 82 84 85 87 88 89 90 91 93 94 95 96 98 99 102 103 108 113 114 115 116 118 119 120 121 124 127 128 129 130 134 135 136 139 140 142 143 145 146 148 149 151 152 153 155 158 161 163 166 168 169 170 171 173 174 175 176 177 179 180 181 182 183 185 186 187 189 190 191 194 195 196 197 198 199 200 201 202 204 207 209 b 211 1 1 1 2 3 4 5 6 7 8 11 15 16 17 18 21 24 28 31 34 36 37 39 41 42 43 47 51 52 53 55 57 59 60 62 64 65 67 68 69 70 71 73 74 75 78 79 81 82 84 85 87 88 89 90 91 93 94 95 96 98 99 102 103 108 113 114 115 116 118 119 120 121 124 127 128 129 130 134 135 136 139 140 142 143 145 146 148 149 151 152 153 155 158 161 163 166 168 169 170 171 173 174 175 176 177 179 180 181 182 183 185 186 187 189 190 191 194 195 196 197 198 199 200 201 202 204 207 209 # 9802 is_equal c a 211 1 1 1 2 3 4 5 6 7 8 11 15 16 17 18 21 24 28 31 34 36 37 39 41 42 43 47 51 52 53 55 57 59 60 62 64 65 67 68 69 70 71 73 74 75 78 79 81 82 84 85 87 88 89 90 91 93 94 95 96 98 99 102 103 108 113 114 115 116 118 119 120 121 124 127 128 129 130 134 135 136 139 140 142 143 145 146 148 149 151 152 153 155 158 161 163 166 168 169 170 171 173 174 175 176 177 179 180 181 182 183 185 186 187 189 190 191 194 195 196 197 198 199 200 201 202 204 207 209 b 211 0 1 0 3 4 7 8 10 11 12 14 22 26 28 30 31 32 33 35 37 38 39 42 43 44 47 48 49 54 55 56 60 61 63 64 65 66 68 69 71 73 74 75 78 82 83 86 88 90 91 93 94 96 97 100 101 103 104 106 108 109 110 115 116 118 119 120 121 122 123 124 125 128 129 130 131 134 136 137 139 140 143 144 145 146 147 149 150 153 156 158 159 161 163 166 168 171 172 173 174 176 181 183 184 185 186 189 193 195 196 198 199 200 202 204 206 207 208 210 # 9803 is_equal c a 211 1 1 e b 211 1 1 e # 9804 is_equal c a 211 1 1 e b 211 1 0 e # 9805 is_equal c a 211 1 1 e b 211 1 1 e # 9806 is_equal c a 211 1 1 e b 211 1 0 f # 9807 is_equal c a 211 1 1 e b 211 1 1 e # 9808 is_equal c a 211 1 1 e b 211 1 0 3 4 6 9 10 11 15 18 23 25 26 27 28 29 30 31 34 36 37 38 40 43 44 46 48 49 50 54 56 57 59 60 62 63 64 65 67 68 69 70 76 78 79 81 82 83 85 88 89 90 93 97 98 100 101 102 106 107 108 109 110 112 113 114 115 116 120 122 124 130 131 135 136 137 138 140 142 145 147 148 149 151 152 155 156 157 163 164 170 172 173 174 175 178 180 183 184 185 186 187 191 192 196 197 198 201 202 203 204 206 208 209 210 # 9809 is_equal c a 211 1 1 f b 211 1 1 f # 9810 is_equal c a 211 1 1 f b 211 1 0 e # 9811 is_equal c a 211 1 1 f b 211 1 1 f # 9812 is_equal c a 211 1 1 f b 211 1 0 f # 9813 is_equal c a 211 1 1 f b 211 1 1 f # 9814 is_equal c a 211 1 1 f b 211 1 0 0 3 5 6 10 12 14 17 19 20 23 25 26 28 29 35 37 39 45 46 47 48 51 52 53 54 55 56 57 59 60 61 67 69 70 71 72 73 74 76 77 79 80 81 83 84 86 87 88 91 92 93 94 98 99 100 101 103 104 107 109 113 114 117 118 120 122 123 125 132 133 135 137 141 142 143 144 145 152 155 157 159 160 161 162 163 166 167 168 173 176 177 180 181 182 183 186 187 188 190 191 192 193 194 196 197 199 200 205 208 209 # 9815 is_equal c a 211 1 1 0 1 13 15 16 19 21 26 29 30 31 32 36 37 38 42 43 46 49 51 52 53 55 64 65 66 68 69 70 71 72 74 76 81 82 87 89 91 93 94 95 96 97 104 106 108 110 112 113 116 117 123 126 127 128 133 134 137 138 139 140 143 145 149 150 151 153 154 160 161 162 164 165 172 175 177 179 180 181 182 183 184 188 189 191 192 194 195 196 200 202 204 209 210 b 211 1 1 0 1 13 15 16 19 21 26 29 30 31 32 36 37 38 42 43 46 49 51 52 53 55 64 65 66 68 69 70 71 72 74 76 81 82 87 89 91 93 94 95 96 97 104 106 108 110 112 113 116 117 123 126 127 128 133 134 137 138 139 140 143 145 149 150 151 153 154 160 161 162 164 165 172 175 177 179 180 181 182 183 184 188 189 191 192 194 195 196 200 202 204 209 210 # 9816 is_equal c a 211 1 1 0 1 13 15 16 19 21 26 29 30 31 32 36 37 38 42 43 46 49 51 52 53 55 64 65 66 68 69 70 71 72 74 76 81 82 87 89 91 93 94 95 96 97 104 106 108 110 112 113 116 117 123 126 127 128 133 134 137 138 139 140 143 145 149 150 151 153 154 160 161 162 164 165 172 175 177 179 180 181 182 183 184 188 189 191 192 194 195 196 200 202 204 209 210 b 211 1 0 e # 9817 is_equal c a 211 1 1 1 2 4 6 7 9 11 12 13 14 15 16 18 23 25 27 29 30 32 34 36 39 41 42 43 44 45 46 49 50 51 53 55 56 57 59 60 64 66 68 71 74 77 78 79 82 83 88 89 91 93 95 96 99 100 101 102 105 107 110 111 112 113 114 116 119 121 122 125 129 131 132 133 136 137 140 143 145 146 153 154 155 156 166 172 173 174 176 177 179 181 183 184 187 188 189 190 194 195 196 197 198 199 206 207 210 b 211 1 1 1 2 4 6 7 9 11 12 13 14 15 16 18 23 25 27 29 30 32 34 36 39 41 42 43 44 45 46 49 50 51 53 55 56 57 59 60 64 66 68 71 74 77 78 79 82 83 88 89 91 93 95 96 99 100 101 102 105 107 110 111 112 113 114 116 119 121 122 125 129 131 132 133 136 137 140 143 145 146 153 154 155 156 166 172 173 174 176 177 179 181 183 184 187 188 189 190 194 195 196 197 198 199 206 207 210 # 9818 is_equal c a 211 1 1 1 2 4 6 7 9 11 12 13 14 15 16 18 23 25 27 29 30 32 34 36 39 41 42 43 44 45 46 49 50 51 53 55 56 57 59 60 64 66 68 71 74 77 78 79 82 83 88 89 91 93 95 96 99 100 101 102 105 107 110 111 112 113 114 116 119 121 122 125 129 131 132 133 136 137 140 143 145 146 153 154 155 156 166 172 173 174 176 177 179 181 183 184 187 188 189 190 194 195 196 197 198 199 206 207 210 b 211 1 0 f # 9819 is_equal c a 211 1 1 0 1 4 5 6 8 9 12 13 15 18 20 22 25 31 33 36 38 39 44 45 46 49 50 52 53 54 56 58 59 60 62 68 73 76 78 81 82 84 85 86 89 91 95 96 97 99 100 101 104 105 106 107 109 112 114 115 121 125 134 135 137 138 140 141 142 143 145 146 149 150 152 154 155 159 160 163 164 166 169 170 172 173 175 177 179 180 183 184 186 189 190 198 199 200 202 203 206 207 b 211 1 1 0 1 4 5 6 8 9 12 13 15 18 20 22 25 31 33 36 38 39 44 45 46 49 50 52 53 54 56 58 59 60 62 68 73 76 78 81 82 84 85 86 89 91 95 96 97 99 100 101 104 105 106 107 109 112 114 115 121 125 134 135 137 138 140 141 142 143 145 146 149 150 152 154 155 159 160 163 164 166 169 170 172 173 175 177 179 180 183 184 186 189 190 198 199 200 202 203 206 207 # 9820 is_equal c a 211 1 1 0 1 4 5 6 8 9 12 13 15 18 20 22 25 31 33 36 38 39 44 45 46 49 50 52 53 54 56 58 59 60 62 68 73 76 78 81 82 84 85 86 89 91 95 96 97 99 100 101 104 105 106 107 109 112 114 115 121 125 134 135 137 138 140 141 142 143 145 146 149 150 152 154 155 159 160 163 164 166 169 170 172 173 175 177 179 180 183 184 186 189 190 198 199 200 202 203 206 207 b 211 1 0 1 2 3 4 5 6 7 9 10 11 14 15 16 21 23 25 26 27 28 29 32 37 39 40 43 44 46 48 50 51 54 57 60 61 65 66 68 72 73 75 79 82 83 84 85 87 88 89 92 93 94 95 97 101 102 107 110 111 112 113 114 116 117 120 121 122 125 127 128 129 132 133 134 138 139 140 141 142 146 150 153 154 155 156 158 159 161 163 164 170 172 173 174 177 178 179 182 185 187 188 189 190 192 193 195 199 200 202 203 204 205 209 210 # 9821 is_equal c a 211 1 1 e b 211 1 1 e # 9822 is_equal c a 211 1 1 e b 211 1 1 e # 9823 is_equal c a 211 1 1 e b 211 1 1 e # 9824 is_equal c a 211 1 1 e b 211 1 1 f # 9825 is_equal c a 211 1 1 e b 211 1 1 e # 9826 is_equal c a 211 1 1 e b 211 1 1 0 2 4 5 7 8 11 16 17 18 21 24 28 32 34 35 36 39 40 41 42 45 46 48 50 57 58 61 62 68 69 70 72 73 74 76 80 82 86 87 89 91 92 93 95 102 103 104 107 108 109 111 112 113 121 123 124 126 128 136 139 142 146 147 148 151 152 154 155 156 157 158 159 163 164 168 172 173 179 182 184 185 187 188 190 192 194 196 198 199 200 202 203 208 # 9827 is_equal c a 211 1 1 f b 211 1 1 f # 9828 is_equal c a 211 1 1 f b 211 1 1 e # 9829 is_equal c a 211 1 1 f b 211 1 1 f # 9830 is_equal c a 211 1 1 f b 211 1 1 f # 9831 is_equal c a 211 1 1 f b 211 1 1 f # 9832 is_equal c a 211 1 1 f b 211 1 1 1 3 4 6 7 10 11 12 14 16 17 19 20 21 22 24 26 28 30 34 36 37 45 46 48 51 52 53 55 57 64 66 67 69 71 73 74 75 76 77 79 80 83 85 86 87 88 90 91 92 95 96 98 107 108 110 111 112 114 116 117 119 122 124 127 131 132 136 139 140 141 142 143 145 148 149 150 152 153 154 155 156 160 161 163 166 167 168 170 171 174 178 179 181 185 186 190 191 194 196 197 199 200 202 204 205 206 207 210 # 9833 is_equal c a 211 1 1 3 4 6 15 17 19 20 21 22 26 28 32 33 34 36 37 38 40 41 42 47 49 50 52 56 58 59 60 62 63 64 65 67 68 69 71 72 76 77 79 80 81 85 86 92 94 95 98 99 102 104 105 106 108 109 112 113 114 117 118 119 122 123 125 126 127 130 132 134 138 142 145 146 147 149 151 154 155 159 160 163 164 165 171 172 175 176 178 183 184 185 189 190 195 199 200 201 202 204 207 208 b 211 1 1 3 4 6 15 17 19 20 21 22 26 28 32 33 34 36 37 38 40 41 42 47 49 50 52 56 58 59 60 62 63 64 65 67 68 69 71 72 76 77 79 80 81 85 86 92 94 95 98 99 102 104 105 106 108 109 112 113 114 117 118 119 122 123 125 126 127 130 132 134 138 142 145 146 147 149 151 154 155 159 160 163 164 165 171 172 175 176 178 183 184 185 189 190 195 199 200 201 202 204 207 208 # 9834 is_equal c a 211 1 1 3 4 6 15 17 19 20 21 22 26 28 32 33 34 36 37 38 40 41 42 47 49 50 52 56 58 59 60 62 63 64 65 67 68 69 71 72 76 77 79 80 81 85 86 92 94 95 98 99 102 104 105 106 108 109 112 113 114 117 118 119 122 123 125 126 127 130 132 134 138 142 145 146 147 149 151 154 155 159 160 163 164 165 171 172 175 176 178 183 184 185 189 190 195 199 200 201 202 204 207 208 b 211 1 1 e # 9835 is_equal c a 211 1 1 2 3 5 11 12 13 14 15 16 18 19 21 23 24 25 27 31 32 33 34 36 38 39 40 42 44 45 47 50 52 55 56 60 61 63 64 65 69 71 76 77 80 81 82 83 85 86 90 92 93 95 96 97 100 101 103 104 105 107 113 115 116 118 121 122 124 127 130 131 134 136 140 142 146 148 149 150 152 153 154 157 159 162 163 165 166 168 170 171 172 173 174 177 178 180 181 183 184 190 191 192 193 198 200 201 204 206 b 211 1 1 2 3 5 11 12 13 14 15 16 18 19 21 23 24 25 27 31 32 33 34 36 38 39 40 42 44 45 47 50 52 55 56 60 61 63 64 65 69 71 76 77 80 81 82 83 85 86 90 92 93 95 96 97 100 101 103 104 105 107 113 115 116 118 121 122 124 127 130 131 134 136 140 142 146 148 149 150 152 153 154 157 159 162 163 165 166 168 170 171 172 173 174 177 178 180 181 183 184 190 191 192 193 198 200 201 204 206 # 9836 is_equal c a 211 1 1 2 3 5 11 12 13 14 15 16 18 19 21 23 24 25 27 31 32 33 34 36 38 39 40 42 44 45 47 50 52 55 56 60 61 63 64 65 69 71 76 77 80 81 82 83 85 86 90 92 93 95 96 97 100 101 103 104 105 107 113 115 116 118 121 122 124 127 130 131 134 136 140 142 146 148 149 150 152 153 154 157 159 162 163 165 166 168 170 171 172 173 174 177 178 180 181 183 184 190 191 192 193 198 200 201 204 206 b 211 1 1 f # 9837 is_equal c a 211 1 1 2 3 4 9 13 14 15 19 20 24 28 29 30 31 32 33 34 35 36 40 42 47 48 49 50 51 52 55 56 61 64 67 68 71 72 73 82 84 88 90 91 96 98 99 100 103 105 107 109 110 113 114 117 118 119 121 122 123 128 130 131 134 135 142 143 145 146 147 148 149 150 153 155 156 158 159 160 161 166 167 171 172 176 179 181 182 183 184 187 188 193 194 195 197 198 199 201 205 206 209 210 b 211 1 1 2 3 4 9 13 14 15 19 20 24 28 29 30 31 32 33 34 35 36 40 42 47 48 49 50 51 52 55 56 61 64 67 68 71 72 73 82 84 88 90 91 96 98 99 100 103 105 107 109 110 113 114 117 118 119 121 122 123 128 130 131 134 135 142 143 145 146 147 148 149 150 153 155 156 158 159 160 161 166 167 171 172 176 179 181 182 183 184 187 188 193 194 195 197 198 199 201 205 206 209 210 # 9838 is_equal c a 211 1 1 2 3 4 9 13 14 15 19 20 24 28 29 30 31 32 33 34 35 36 40 42 47 48 49 50 51 52 55 56 61 64 67 68 71 72 73 82 84 88 90 91 96 98 99 100 103 105 107 109 110 113 114 117 118 119 121 122 123 128 130 131 134 135 142 143 145 146 147 148 149 150 153 155 156 158 159 160 161 166 167 171 172 176 179 181 182 183 184 187 188 193 194 195 197 198 199 201 205 206 209 210 b 211 1 1 0 1 2 4 6 8 10 12 13 15 17 18 19 21 24 28 31 35 40 42 43 46 47 50 54 56 59 61 63 64 65 66 68 70 71 72 73 78 80 81 82 83 84 85 87 89 91 93 96 98 99 101 104 105 110 111 113 114 116 118 119 120 122 126 129 130 131 132 135 137 139 141 142 144 145 146 148 149 151 155 158 159 161 162 167 168 169 170 172 174 178 184 185 191 195 197 198 202 204 206 208 209 # 9839 is_equal c a 224 0 0 e b 224 0 0 e # 9840 is_equal c a 224 0 0 e b 224 0 0 e # 9841 is_equal c a 224 0 0 e b 224 0 0 e # 9842 is_equal c a 224 0 0 e b 224 0 0 f # 9843 is_equal c a 224 0 0 e b 224 0 0 e # 9844 is_equal c a 224 0 0 e b 224 0 0 2 3 4 6 8 13 14 18 19 20 25 26 27 28 29 32 33 34 35 37 41 42 43 46 47 48 49 51 53 55 56 58 59 60 61 63 64 66 70 72 76 79 81 82 83 84 86 87 90 93 98 100 101 102 103 111 115 118 119 120 125 126 127 129 134 135 138 139 140 142 143 146 147 149 150 155 159 160 161 164 175 178 179 180 181 185 186 187 188 190 191 197 198 199 200 207 208 210 211 214 215 216 217 218 219 221 222 223 # 9845 is_equal c a 224 0 0 f b 224 0 0 f # 9846 is_equal c a 224 0 0 f b 224 0 0 e # 9847 is_equal c a 224 0 0 f b 224 0 0 f # 9848 is_equal c a 224 0 0 f b 224 0 0 f # 9849 is_equal c a 224 0 0 f b 224 0 0 f # 9850 is_equal c a 224 0 0 f b 224 0 0 2 3 5 6 8 9 10 16 18 20 21 23 24 26 29 36 37 38 39 40 44 45 46 49 50 52 53 54 55 57 62 63 64 67 69 70 74 78 79 82 83 85 86 87 88 89 94 98 99 101 102 103 104 105 106 109 110 113 115 116 119 121 122 123 124 125 126 129 132 135 136 138 140 141 142 144 146 147 150 151 153 156 158 159 161 165 166 168 169 171 172 175 178 179 180 181 182 183 188 189 192 193 201 205 207 208 210 211 214 215 216 217 218 220 222 223 # 9851 is_equal c a 224 0 0 0 4 5 6 8 10 11 14 16 18 19 20 21 22 23 24 25 27 28 29 30 31 33 35 36 40 41 47 48 50 51 53 55 57 58 60 63 65 66 70 74 80 82 83 86 87 89 91 93 94 95 96 97 98 101 102 104 106 108 110 112 113 118 124 127 130 131 132 133 135 139 140 143 144 145 146 149 150 151 156 158 160 161 162 163 164 166 167 170 174 177 178 179 180 182 184 185 190 193 194 196 197 200 202 204 205 206 208 209 211 213 214 215 216 220 222 b 224 0 0 0 4 5 6 8 10 11 14 16 18 19 20 21 22 23 24 25 27 28 29 30 31 33 35 36 40 41 47 48 50 51 53 55 57 58 60 63 65 66 70 74 80 82 83 86 87 89 91 93 94 95 96 97 98 101 102 104 106 108 110 112 113 118 124 127 130 131 132 133 135 139 140 143 144 145 146 149 150 151 156 158 160 161 162 163 164 166 167 170 174 177 178 179 180 182 184 185 190 193 194 196 197 200 202 204 205 206 208 209 211 213 214 215 216 220 222 # 9852 is_equal c a 224 0 0 0 4 5 6 8 10 11 14 16 18 19 20 21 22 23 24 25 27 28 29 30 31 33 35 36 40 41 47 48 50 51 53 55 57 58 60 63 65 66 70 74 80 82 83 86 87 89 91 93 94 95 96 97 98 101 102 104 106 108 110 112 113 118 124 127 130 131 132 133 135 139 140 143 144 145 146 149 150 151 156 158 160 161 162 163 164 166 167 170 174 177 178 179 180 182 184 185 190 193 194 196 197 200 202 204 205 206 208 209 211 213 214 215 216 220 222 b 224 0 0 e # 9853 is_equal c a 224 0 0 0 1 2 3 5 10 11 12 13 15 16 19 22 24 26 27 28 29 31 34 35 45 49 51 56 60 61 64 65 69 70 71 75 76 82 84 86 89 90 92 94 95 98 101 103 104 106 107 108 112 114 118 119 121 126 128 129 130 132 135 136 138 139 140 141 142 145 146 147 149 150 151 152 154 156 157 158 159 160 161 163 164 165 167 171 181 186 187 190 193 194 196 198 199 200 202 203 204 208 209 210 212 213 214 215 217 218 221 222 b 224 0 0 0 1 2 3 5 10 11 12 13 15 16 19 22 24 26 27 28 29 31 34 35 45 49 51 56 60 61 64 65 69 70 71 75 76 82 84 86 89 90 92 94 95 98 101 103 104 106 107 108 112 114 118 119 121 126 128 129 130 132 135 136 138 139 140 141 142 145 146 147 149 150 151 152 154 156 157 158 159 160 161 163 164 165 167 171 181 186 187 190 193 194 196 198 199 200 202 203 204 208 209 210 212 213 214 215 217 218 221 222 # 9854 is_equal c a 224 0 0 0 1 2 3 5 10 11 12 13 15 16 19 22 24 26 27 28 29 31 34 35 45 49 51 56 60 61 64 65 69 70 71 75 76 82 84 86 89 90 92 94 95 98 101 103 104 106 107 108 112 114 118 119 121 126 128 129 130 132 135 136 138 139 140 141 142 145 146 147 149 150 151 152 154 156 157 158 159 160 161 163 164 165 167 171 181 186 187 190 193 194 196 198 199 200 202 203 204 208 209 210 212 213 214 215 217 218 221 222 b 224 0 0 f # 9855 is_equal c a 224 0 0 0 1 2 5 7 10 12 15 19 22 25 26 28 29 30 33 34 35 38 39 40 41 42 43 46 48 51 52 58 61 62 63 65 67 70 72 73 78 79 80 82 83 84 86 88 89 94 95 96 98 100 101 103 105 106 107 108 109 110 111 112 113 115 118 123 124 126 127 128 129 130 131 135 138 142 146 148 149 150 154 156 157 158 159 161 163 165 166 167 169 170 171 173 174 177 178 180 181 182 184 185 186 187 189 191 192 193 194 196 197 198 200 201 203 204 210 213 214 218 219 222 223 b 224 0 0 0 1 2 5 7 10 12 15 19 22 25 26 28 29 30 33 34 35 38 39 40 41 42 43 46 48 51 52 58 61 62 63 65 67 70 72 73 78 79 80 82 83 84 86 88 89 94 95 96 98 100 101 103 105 106 107 108 109 110 111 112 113 115 118 123 124 126 127 128 129 130 131 135 138 142 146 148 149 150 154 156 157 158 159 161 163 165 166 167 169 170 171 173 174 177 178 180 181 182 184 185 186 187 189 191 192 193 194 196 197 198 200 201 203 204 210 213 214 218 219 222 223 # 9856 is_equal c a 224 0 0 0 1 2 5 7 10 12 15 19 22 25 26 28 29 30 33 34 35 38 39 40 41 42 43 46 48 51 52 58 61 62 63 65 67 70 72 73 78 79 80 82 83 84 86 88 89 94 95 96 98 100 101 103 105 106 107 108 109 110 111 112 113 115 118 123 124 126 127 128 129 130 131 135 138 142 146 148 149 150 154 156 157 158 159 161 163 165 166 167 169 170 171 173 174 177 178 180 181 182 184 185 186 187 189 191 192 193 194 196 197 198 200 201 203 204 210 213 214 218 219 222 223 b 224 0 0 1 4 6 7 10 14 15 16 17 18 19 21 23 26 28 29 32 33 34 35 36 37 38 40 44 48 52 53 56 58 59 62 64 65 67 72 73 74 76 78 79 85 86 90 91 92 93 95 96 97 98 101 102 103 104 105 107 108 110 112 114 117 119 122 123 126 136 137 138 139 141 144 146 150 152 153 156 160 161 162 171 173 177 182 183 188 189 192 194 195 199 200 203 205 208 209 210 211 213 214 218 220 222 223 # 9857 is_equal c a 224 0 0 e b 224 0 0 e # 9858 is_equal c a 224 0 0 e b 224 0 1 e # 9859 is_equal c a 224 0 0 e b 224 0 0 e # 9860 is_equal c a 224 0 0 e b 224 0 1 f # 9861 is_equal c a 224 0 0 e b 224 0 0 e # 9862 is_equal c a 224 0 0 e b 224 0 1 2 3 4 5 6 11 12 13 15 18 19 21 23 24 25 26 27 29 30 31 34 35 39 40 41 42 43 44 45 50 52 55 58 60 61 65 67 69 70 72 74 78 79 80 81 83 84 86 88 89 90 91 93 94 95 96 100 102 103 104 105 109 110 111 112 114 115 116 118 121 123 124 127 129 133 135 136 139 142 145 146 149 150 152 153 157 159 160 163 166 168 174 175 176 177 180 181 182 184 185 186 188 190 192 196 199 200 201 204 205 207 208 213 214 216 217 218 219 221 223 # 9863 is_equal c a 224 0 0 f b 224 0 0 f # 9864 is_equal c a 224 0 0 f b 224 0 1 e # 9865 is_equal c a 224 0 0 f b 224 0 0 f # 9866 is_equal c a 224 0 0 f b 224 0 1 f # 9867 is_equal c a 224 0 0 f b 224 0 0 f # 9868 is_equal c a 224 0 0 f b 224 0 1 0 1 3 5 7 9 12 16 17 18 20 21 22 23 24 25 29 35 37 38 39 41 45 46 49 50 52 53 54 55 56 58 62 63 64 65 67 68 70 73 75 76 80 83 87 88 92 93 94 96 99 100 102 103 106 107 108 109 111 113 117 121 124 126 127 128 131 134 135 136 138 139 141 143 144 145 147 148 149 153 154 158 160 162 164 165 166 167 169 170 171 172 177 181 182 183 187 188 190 191 192 193 194 195 196 197 198 199 200 202 204 206 207 208 213 215 217 220 223 # 9869 is_equal c a 224 0 0 7 8 9 16 17 18 20 22 24 26 27 28 29 30 34 37 40 41 42 48 50 51 53 54 57 60 62 63 67 69 72 73 74 78 81 82 83 85 87 88 89 90 93 95 97 98 99 100 101 103 104 105 111 114 115 122 129 132 135 137 139 141 147 149 150 151 153 156 158 164 165 169 170 171 175 176 182 186 188 189 193 194 195 196 200 202 204 208 209 210 211 213 216 218 219 222 223 b 224 0 0 7 8 9 16 17 18 20 22 24 26 27 28 29 30 34 37 40 41 42 48 50 51 53 54 57 60 62 63 67 69 72 73 74 78 81 82 83 85 87 88 89 90 93 95 97 98 99 100 101 103 104 105 111 114 115 122 129 132 135 137 139 141 147 149 150 151 153 156 158 164 165 169 170 171 175 176 182 186 188 189 193 194 195 196 200 202 204 208 209 210 211 213 216 218 219 222 223 # 9870 is_equal c a 224 0 0 7 8 9 16 17 18 20 22 24 26 27 28 29 30 34 37 40 41 42 48 50 51 53 54 57 60 62 63 67 69 72 73 74 78 81 82 83 85 87 88 89 90 93 95 97 98 99 100 101 103 104 105 111 114 115 122 129 132 135 137 139 141 147 149 150 151 153 156 158 164 165 169 170 171 175 176 182 186 188 189 193 194 195 196 200 202 204 208 209 210 211 213 216 218 219 222 223 b 224 0 1 e # 9871 is_equal c a 224 0 0 1 2 3 4 5 7 11 13 19 20 21 23 25 26 27 29 37 40 41 44 45 46 49 50 52 55 57 58 60 62 66 67 73 74 75 76 79 87 89 95 96 99 101 103 105 106 109 111 115 116 121 122 123 124 127 129 130 131 132 133 134 136 141 143 145 149 150 151 152 155 156 157 160 163 165 166 170 171 174 176 178 182 183 184 186 187 190 195 198 199 200 201 202 203 204 207 208 211 212 214 215 216 217 220 222 b 224 0 0 1 2 3 4 5 7 11 13 19 20 21 23 25 26 27 29 37 40 41 44 45 46 49 50 52 55 57 58 60 62 66 67 73 74 75 76 79 87 89 95 96 99 101 103 105 106 109 111 115 116 121 122 123 124 127 129 130 131 132 133 134 136 141 143 145 149 150 151 152 155 156 157 160 163 165 166 170 171 174 176 178 182 183 184 186 187 190 195 198 199 200 201 202 203 204 207 208 211 212 214 215 216 217 220 222 # 9872 is_equal c a 224 0 0 1 2 3 4 5 7 11 13 19 20 21 23 25 26 27 29 37 40 41 44 45 46 49 50 52 55 57 58 60 62 66 67 73 74 75 76 79 87 89 95 96 99 101 103 105 106 109 111 115 116 121 122 123 124 127 129 130 131 132 133 134 136 141 143 145 149 150 151 152 155 156 157 160 163 165 166 170 171 174 176 178 182 183 184 186 187 190 195 198 199 200 201 202 203 204 207 208 211 212 214 215 216 217 220 222 b 224 0 1 f # 9873 is_equal c a 224 0 0 0 1 3 6 7 8 10 11 12 14 15 16 18 21 25 30 31 34 37 44 46 47 48 49 55 57 64 66 70 72 74 75 76 77 78 81 82 83 86 87 92 93 94 95 97 98 101 102 104 105 107 111 113 114 115 117 121 122 125 127 128 132 134 135 136 138 140 141 143 144 146 150 151 152 153 156 157 159 160 163 164 166 167 168 169 172 173 175 178 179 181 182 186 188 190 191 192 194 197 200 202 211 212 213 218 220 221 b 224 0 0 0 1 3 6 7 8 10 11 12 14 15 16 18 21 25 30 31 34 37 44 46 47 48 49 55 57 64 66 70 72 74 75 76 77 78 81 82 83 86 87 92 93 94 95 97 98 101 102 104 105 107 111 113 114 115 117 121 122 125 127 128 132 134 135 136 138 140 141 143 144 146 150 151 152 153 156 157 159 160 163 164 166 167 168 169 172 173 175 178 179 181 182 186 188 190 191 192 194 197 200 202 211 212 213 218 220 221 # 9874 is_equal c a 224 0 0 0 1 3 6 7 8 10 11 12 14 15 16 18 21 25 30 31 34 37 44 46 47 48 49 55 57 64 66 70 72 74 75 76 77 78 81 82 83 86 87 92 93 94 95 97 98 101 102 104 105 107 111 113 114 115 117 121 122 125 127 128 132 134 135 136 138 140 141 143 144 146 150 151 152 153 156 157 159 160 163 164 166 167 168 169 172 173 175 178 179 181 182 186 188 190 191 192 194 197 200 202 211 212 213 218 220 221 b 224 0 1 0 2 6 7 8 11 12 13 16 17 19 20 21 23 27 28 31 32 35 36 38 40 45 46 48 49 52 53 55 56 57 58 59 62 63 64 66 67 68 69 73 74 75 76 77 78 80 82 84 87 90 92 93 95 98 101 102 103 104 105 106 109 110 112 113 114 115 118 119 120 121 123 124 125 126 130 131 134 138 139 141 142 144 145 148 150 151 156 158 160 162 164 165 170 172 173 174 175 176 177 178 179 181 185 186 191 192 195 197 200 202 203 205 206 207 208 209 210 211 212 215 220 221 223 # 9875 is_equal c a 224 0 0 e b 224 0 0 e # 9876 is_equal c a 224 0 0 e b 224 1 0 e # 9877 is_equal c a 224 0 0 e b 224 0 0 e # 9878 is_equal c a 224 0 0 e b 224 1 0 f # 9879 is_equal c a 224 0 0 e b 224 0 0 e # 9880 is_equal c a 224 0 0 e b 224 1 0 1 2 5 6 9 12 16 19 21 22 23 25 27 28 29 30 31 35 39 41 45 46 48 50 53 56 63 64 65 66 70 71 76 77 78 79 81 85 86 90 92 97 98 99 101 102 104 105 106 107 108 109 110 114 115 117 121 122 123 132 133 134 135 136 137 138 139 140 141 145 147 148 151 154 155 159 160 163 166 169 171 172 173 176 178 180 187 188 190 191 192 193 198 200 203 205 206 207 209 213 214 215 217 218 # 9881 is_equal c a 224 0 0 f b 224 0 0 f # 9882 is_equal c a 224 0 0 f b 224 1 0 e # 9883 is_equal c a 224 0 0 f b 224 0 0 f # 9884 is_equal c a 224 0 0 f b 224 1 0 f # 9885 is_equal c a 224 0 0 f b 224 0 0 f # 9886 is_equal c a 224 0 0 f b 224 1 0 1 2 3 4 5 7 9 10 11 13 14 15 16 18 19 21 22 23 24 28 30 33 36 41 42 43 44 45 48 54 55 56 59 60 61 63 64 68 70 73 74 78 80 82 85 88 90 91 94 96 97 98 99 102 103 105 107 109 113 114 115 116 117 118 119 121 123 127 129 130 131 133 134 135 136 137 140 141 142 144 146 149 151 152 153 154 156 161 162 163 164 165 168 169 170 171 172 174 176 177 178 180 183 184 187 188 191 194 196 198 199 203 204 207 212 213 215 217 218 221 223 # 9887 is_equal c a 224 0 0 1 2 5 6 12 13 17 18 20 22 25 28 29 31 32 35 36 40 41 43 44 45 50 52 53 55 57 60 61 64 67 68 69 72 73 75 79 80 84 85 88 89 90 92 93 94 95 98 101 102 104 105 109 114 118 119 123 126 127 128 133 134 136 141 142 143 146 148 149 151 153 154 155 157 158 161 162 163 164 165 166 167 171 174 176 177 178 183 187 199 200 201 202 203 204 205 207 211 212 213 214 221 222 223 b 224 0 0 1 2 5 6 12 13 17 18 20 22 25 28 29 31 32 35 36 40 41 43 44 45 50 52 53 55 57 60 61 64 67 68 69 72 73 75 79 80 84 85 88 89 90 92 93 94 95 98 101 102 104 105 109 114 118 119 123 126 127 128 133 134 136 141 142 143 146 148 149 151 153 154 155 157 158 161 162 163 164 165 166 167 171 174 176 177 178 183 187 199 200 201 202 203 204 205 207 211 212 213 214 221 222 223 # 9888 is_equal c a 224 0 0 1 2 5 6 12 13 17 18 20 22 25 28 29 31 32 35 36 40 41 43 44 45 50 52 53 55 57 60 61 64 67 68 69 72 73 75 79 80 84 85 88 89 90 92 93 94 95 98 101 102 104 105 109 114 118 119 123 126 127 128 133 134 136 141 142 143 146 148 149 151 153 154 155 157 158 161 162 163 164 165 166 167 171 174 176 177 178 183 187 199 200 201 202 203 204 205 207 211 212 213 214 221 222 223 b 224 1 0 e # 9889 is_equal c a 224 0 0 2 3 6 8 9 11 12 13 14 17 20 21 22 23 27 31 32 34 36 37 39 40 41 42 46 47 49 50 52 53 56 57 58 62 63 64 65 67 69 74 75 76 78 81 85 86 89 90 91 93 94 97 98 99 100 104 105 109 110 111 112 116 118 120 125 127 128 130 131 132 133 134 135 136 141 143 145 149 150 153 155 156 157 159 162 165 168 170 175 178 181 182 183 184 186 187 190 191 195 198 200 201 204 205 210 211 212 214 215 216 219 220 222 b 224 0 0 2 3 6 8 9 11 12 13 14 17 20 21 22 23 27 31 32 34 36 37 39 40 41 42 46 47 49 50 52 53 56 57 58 62 63 64 65 67 69 74 75 76 78 81 85 86 89 90 91 93 94 97 98 99 100 104 105 109 110 111 112 116 118 120 125 127 128 130 131 132 133 134 135 136 141 143 145 149 150 153 155 156 157 159 162 165 168 170 175 178 181 182 183 184 186 187 190 191 195 198 200 201 204 205 210 211 212 214 215 216 219 220 222 # 9890 is_equal c a 224 0 0 2 3 6 8 9 11 12 13 14 17 20 21 22 23 27 31 32 34 36 37 39 40 41 42 46 47 49 50 52 53 56 57 58 62 63 64 65 67 69 74 75 76 78 81 85 86 89 90 91 93 94 97 98 99 100 104 105 109 110 111 112 116 118 120 125 127 128 130 131 132 133 134 135 136 141 143 145 149 150 153 155 156 157 159 162 165 168 170 175 178 181 182 183 184 186 187 190 191 195 198 200 201 204 205 210 211 212 214 215 216 219 220 222 b 224 1 0 f # 9891 is_equal c a 224 0 0 0 1 2 3 5 8 9 10 11 14 15 17 23 24 25 26 28 29 30 31 32 33 34 36 37 38 40 41 44 46 48 50 52 56 58 59 60 61 62 63 66 69 70 73 78 80 81 83 85 88 91 92 93 94 97 98 99 103 105 107 110 114 115 118 125 126 127 128 129 130 133 135 136 137 139 143 144 151 152 153 155 156 158 162 165 168 169 171 174 176 180 181 184 185 190 192 193 194 196 200 201 207 209 212 214 215 222 b 224 0 0 0 1 2 3 5 8 9 10 11 14 15 17 23 24 25 26 28 29 30 31 32 33 34 36 37 38 40 41 44 46 48 50 52 56 58 59 60 61 62 63 66 69 70 73 78 80 81 83 85 88 91 92 93 94 97 98 99 103 105 107 110 114 115 118 125 126 127 128 129 130 133 135 136 137 139 143 144 151 152 153 155 156 158 162 165 168 169 171 174 176 180 181 184 185 190 192 193 194 196 200 201 207 209 212 214 215 222 # 9892 is_equal c a 224 0 0 0 1 2 3 5 8 9 10 11 14 15 17 23 24 25 26 28 29 30 31 32 33 34 36 37 38 40 41 44 46 48 50 52 56 58 59 60 61 62 63 66 69 70 73 78 80 81 83 85 88 91 92 93 94 97 98 99 103 105 107 110 114 115 118 125 126 127 128 129 130 133 135 136 137 139 143 144 151 152 153 155 156 158 162 165 168 169 171 174 176 180 181 184 185 190 192 193 194 196 200 201 207 209 212 214 215 222 b 224 1 0 0 1 3 5 8 9 11 12 13 14 16 18 19 20 22 23 24 25 33 34 35 36 38 39 40 42 43 45 48 51 52 54 58 60 62 65 66 68 69 70 71 73 74 75 80 81 85 86 89 90 91 92 93 103 106 107 108 111 118 119 120 121 122 123 124 125 129 130 136 137 139 144 145 146 148 149 151 152 153 154 155 156 158 160 161 162 164 165 166 167 168 169 173 174 176 177 178 179 180 182 183 185 188 191 197 198 200 206 208 209 210 211 213 217 218 223 # 9893 is_equal c a 224 0 0 e b 224 0 0 e # 9894 is_equal c a 224 0 0 e b 224 1 1 e # 9895 is_equal c a 224 0 0 e b 224 0 0 e # 9896 is_equal c a 224 0 0 e b 224 1 1 f # 9897 is_equal c a 224 0 0 e b 224 0 0 e # 9898 is_equal c a 224 0 0 e b 224 1 1 1 2 3 4 5 6 7 11 12 15 20 21 22 24 25 26 28 35 38 39 40 41 42 45 49 50 52 53 54 55 56 57 59 64 67 68 70 74 78 79 80 81 82 83 84 85 87 89 91 93 95 97 98 99 100 101 106 107 108 109 111 112 115 117 119 120 121 123 124 125 126 127 129 130 132 134 135 136 138 139 143 144 145 146 147 148 150 151 154 155 156 157 158 160 161 162 165 173 176 179 181 183 186 188 189 190 191 192 193 197 198 199 200 201 204 205 206 208 209 212 213 216 217 219 220 222 # 9899 is_equal c a 224 0 0 f b 224 0 0 f # 9900 is_equal c a 224 0 0 f b 224 1 1 e # 9901 is_equal c a 224 0 0 f b 224 0 0 f # 9902 is_equal c a 224 0 0 f b 224 1 1 f # 9903 is_equal c a 224 0 0 f b 224 0 0 f # 9904 is_equal c a 224 0 0 f b 224 1 1 0 1 2 4 7 13 14 16 17 18 19 20 21 23 24 25 26 27 28 31 33 37 38 39 45 46 48 51 60 65 67 70 71 72 75 77 82 83 84 88 89 93 94 95 98 99 100 101 102 104 105 108 109 116 117 119 120 121 123 124 125 126 131 133 136 137 139 140 141 143 145 148 149 151 152 154 158 159 160 161 162 164 167 169 170 171 172 174 178 180 183 184 185 189 190 192 193 194 195 196 198 201 206 207 209 212 213 215 216 218 221 222 # 9905 is_equal c a 224 0 0 0 3 4 6 7 11 13 14 15 16 19 21 23 27 29 33 34 37 39 42 43 45 46 50 52 56 57 58 60 62 64 65 68 69 70 71 73 74 75 78 79 80 81 83 85 86 89 90 93 97 100 103 105 106 107 109 112 113 114 117 118 119 120 121 125 127 128 129 135 139 140 141 143 144 146 149 155 157 158 159 160 164 165 169 172 174 176 177 178 179 180 181 185 187 188 190 191 201 202 203 205 207 208 210 214 215 216 217 219 223 b 224 0 0 0 3 4 6 7 11 13 14 15 16 19 21 23 27 29 33 34 37 39 42 43 45 46 50 52 56 57 58 60 62 64 65 68 69 70 71 73 74 75 78 79 80 81 83 85 86 89 90 93 97 100 103 105 106 107 109 112 113 114 117 118 119 120 121 125 127 128 129 135 139 140 141 143 144 146 149 155 157 158 159 160 164 165 169 172 174 176 177 178 179 180 181 185 187 188 190 191 201 202 203 205 207 208 210 214 215 216 217 219 223 # 9906 is_equal c a 224 0 0 0 3 4 6 7 11 13 14 15 16 19 21 23 27 29 33 34 37 39 42 43 45 46 50 52 56 57 58 60 62 64 65 68 69 70 71 73 74 75 78 79 80 81 83 85 86 89 90 93 97 100 103 105 106 107 109 112 113 114 117 118 119 120 121 125 127 128 129 135 139 140 141 143 144 146 149 155 157 158 159 160 164 165 169 172 174 176 177 178 179 180 181 185 187 188 190 191 201 202 203 205 207 208 210 214 215 216 217 219 223 b 224 1 1 e # 9907 is_equal c a 224 0 0 1 2 3 9 12 13 18 20 21 23 24 25 27 28 29 30 32 33 35 41 42 44 46 48 49 50 51 53 56 57 59 60 61 63 64 66 67 68 74 76 79 82 83 86 87 90 93 94 95 97 98 100 102 104 105 107 109 110 113 116 123 126 127 129 136 137 140 142 144 145 146 147 151 153 155 160 161 162 164 167 169 172 173 175 176 178 182 183 184 186 188 190 191 192 194 195 196 198 199 205 208 216 218 219 b 224 0 0 1 2 3 9 12 13 18 20 21 23 24 25 27 28 29 30 32 33 35 41 42 44 46 48 49 50 51 53 56 57 59 60 61 63 64 66 67 68 74 76 79 82 83 86 87 90 93 94 95 97 98 100 102 104 105 107 109 110 113 116 123 126 127 129 136 137 140 142 144 145 146 147 151 153 155 160 161 162 164 167 169 172 173 175 176 178 182 183 184 186 188 190 191 192 194 195 196 198 199 205 208 216 218 219 # 9908 is_equal c a 224 0 0 1 2 3 9 12 13 18 20 21 23 24 25 27 28 29 30 32 33 35 41 42 44 46 48 49 50 51 53 56 57 59 60 61 63 64 66 67 68 74 76 79 82 83 86 87 90 93 94 95 97 98 100 102 104 105 107 109 110 113 116 123 126 127 129 136 137 140 142 144 145 146 147 151 153 155 160 161 162 164 167 169 172 173 175 176 178 182 183 184 186 188 190 191 192 194 195 196 198 199 205 208 216 218 219 b 224 1 1 f # 9909 is_equal c a 224 0 0 0 3 4 6 8 9 11 12 13 15 16 17 21 22 24 25 26 30 32 34 35 36 37 39 40 41 42 45 48 50 51 53 56 58 59 60 61 63 66 68 69 70 71 72 73 76 78 80 81 84 85 88 91 92 93 96 99 102 103 105 107 109 112 113 114 116 118 119 125 126 132 133 135 136 137 138 140 142 145 146 148 149 150 154 155 157 158 159 160 163 165 166 169 170 173 174 175 177 178 180 181 182 185 186 187 188 189 190 191 193 196 198 200 206 207 208 209 211 212 214 217 219 220 222 b 224 0 0 0 3 4 6 8 9 11 12 13 15 16 17 21 22 24 25 26 30 32 34 35 36 37 39 40 41 42 45 48 50 51 53 56 58 59 60 61 63 66 68 69 70 71 72 73 76 78 80 81 84 85 88 91 92 93 96 99 102 103 105 107 109 112 113 114 116 118 119 125 126 132 133 135 136 137 138 140 142 145 146 148 149 150 154 155 157 158 159 160 163 165 166 169 170 173 174 175 177 178 180 181 182 185 186 187 188 189 190 191 193 196 198 200 206 207 208 209 211 212 214 217 219 220 222 # 9910 is_equal c a 224 0 0 0 3 4 6 8 9 11 12 13 15 16 17 21 22 24 25 26 30 32 34 35 36 37 39 40 41 42 45 48 50 51 53 56 58 59 60 61 63 66 68 69 70 71 72 73 76 78 80 81 84 85 88 91 92 93 96 99 102 103 105 107 109 112 113 114 116 118 119 125 126 132 133 135 136 137 138 140 142 145 146 148 149 150 154 155 157 158 159 160 163 165 166 169 170 173 174 175 177 178 180 181 182 185 186 187 188 189 190 191 193 196 198 200 206 207 208 209 211 212 214 217 219 220 222 b 224 1 1 2 3 8 9 10 12 13 14 15 16 18 19 21 23 24 25 26 27 28 30 32 33 38 47 48 49 50 52 53 54 56 57 59 62 63 64 68 69 71 73 75 78 86 89 90 93 97 99 100 101 102 104 106 108 109 110 115 116 118 119 121 124 125 126 128 134 137 138 143 144 145 153 154 156 157 158 159 160 161 165 167 168 170 172 174 178 179 180 186 188 189 191 192 195 197 198 200 201 203 207 208 211 212 213 216 218 219 221 222 223 # 9911 is_equal c a 224 0 1 e b 224 0 1 e # 9912 is_equal c a 224 0 1 e b 224 0 0 e # 9913 is_equal c a 224 0 1 e b 224 0 1 e # 9914 is_equal c a 224 0 1 e b 224 0 0 f # 9915 is_equal c a 224 0 1 e b 224 0 1 e # 9916 is_equal c a 224 0 1 e b 224 0 0 2 3 4 5 7 9 10 11 13 17 19 20 21 23 25 26 28 29 32 35 37 38 39 41 43 44 45 46 47 48 50 51 52 58 60 62 63 64 66 67 68 69 70 72 82 84 86 87 88 91 92 93 94 97 100 102 105 106 107 110 111 112 113 115 117 118 121 122 124 125 126 134 135 137 138 141 144 146 149 151 152 155 157 158 159 162 163 164 165 166 167 171 173 174 175 177 179 180 181 182 185 188 192 194 196 197 201 204 207 209 210 211 215 217 220 222 223 # 9917 is_equal c a 224 0 1 f b 224 0 1 f # 9918 is_equal c a 224 0 1 f b 224 0 0 e # 9919 is_equal c a 224 0 1 f b 224 0 1 f # 9920 is_equal c a 224 0 1 f b 224 0 0 f # 9921 is_equal c a 224 0 1 f b 224 0 1 f # 9922 is_equal c a 224 0 1 f b 224 0 0 0 1 3 5 7 8 12 13 15 18 19 20 22 25 26 30 34 35 36 39 40 41 45 47 48 50 51 52 53 54 56 57 64 67 68 69 73 74 75 78 80 81 83 84 88 89 90 94 95 96 97 98 100 102 104 105 110 115 117 122 123 126 130 132 133 135 136 137 140 142 147 148 149 152 156 157 158 165 166 167 168 171 173 174 175 178 180 182 183 184 185 188 190 192 194 195 197 198 199 200 202 205 208 210 211 212 214 215 220 221 222 # 9923 is_equal c a 224 0 1 1 8 10 11 12 15 16 18 19 20 21 22 25 26 28 29 30 34 35 36 44 45 47 50 51 53 55 56 57 59 60 61 62 65 67 68 69 73 74 76 80 84 87 89 92 95 97 98 102 103 105 106 110 113 114 119 120 121 123 125 126 129 130 131 134 135 137 140 141 142 144 146 148 151 152 153 158 159 160 162 164 165 166 170 174 176 177 178 179 184 185 192 195 198 199 200 201 203 209 210 214 218 219 222 b 224 0 1 1 8 10 11 12 15 16 18 19 20 21 22 25 26 28 29 30 34 35 36 44 45 47 50 51 53 55 56 57 59 60 61 62 65 67 68 69 73 74 76 80 84 87 89 92 95 97 98 102 103 105 106 110 113 114 119 120 121 123 125 126 129 130 131 134 135 137 140 141 142 144 146 148 151 152 153 158 159 160 162 164 165 166 170 174 176 177 178 179 184 185 192 195 198 199 200 201 203 209 210 214 218 219 222 # 9924 is_equal c a 224 0 1 1 8 10 11 12 15 16 18 19 20 21 22 25 26 28 29 30 34 35 36 44 45 47 50 51 53 55 56 57 59 60 61 62 65 67 68 69 73 74 76 80 84 87 89 92 95 97 98 102 103 105 106 110 113 114 119 120 121 123 125 126 129 130 131 134 135 137 140 141 142 144 146 148 151 152 153 158 159 160 162 164 165 166 170 174 176 177 178 179 184 185 192 195 198 199 200 201 203 209 210 214 218 219 222 b 224 0 0 e # 9925 is_equal c a 224 0 1 0 2 3 4 5 6 7 8 9 10 11 13 16 18 20 21 24 26 29 30 33 36 37 40 41 44 45 46 47 48 49 51 53 54 56 57 58 60 61 62 65 66 68 70 71 76 77 79 80 82 85 86 88 89 90 91 95 101 103 105 106 108 112 113 114 115 116 121 123 126 127 128 129 132 133 134 136 137 141 142 143 144 145 146 150 155 156 157 158 160 162 163 165 167 168 169 171 174 177 178 181 182 184 187 189 193 196 201 203 206 207 209 211 219 222 223 b 224 0 1 0 2 3 4 5 6 7 8 9 10 11 13 16 18 20 21 24 26 29 30 33 36 37 40 41 44 45 46 47 48 49 51 53 54 56 57 58 60 61 62 65 66 68 70 71 76 77 79 80 82 85 86 88 89 90 91 95 101 103 105 106 108 112 113 114 115 116 121 123 126 127 128 129 132 133 134 136 137 141 142 143 144 145 146 150 155 156 157 158 160 162 163 165 167 168 169 171 174 177 178 181 182 184 187 189 193 196 201 203 206 207 209 211 219 222 223 # 9926 is_equal c a 224 0 1 0 2 3 4 5 6 7 8 9 10 11 13 16 18 20 21 24 26 29 30 33 36 37 40 41 44 45 46 47 48 49 51 53 54 56 57 58 60 61 62 65 66 68 70 71 76 77 79 80 82 85 86 88 89 90 91 95 101 103 105 106 108 112 113 114 115 116 121 123 126 127 128 129 132 133 134 136 137 141 142 143 144 145 146 150 155 156 157 158 160 162 163 165 167 168 169 171 174 177 178 181 182 184 187 189 193 196 201 203 206 207 209 211 219 222 223 b 224 0 0 f # 9927 is_equal c a 224 0 1 4 5 6 7 8 10 12 13 14 18 19 23 24 25 26 29 30 31 32 34 35 36 37 38 39 40 42 43 45 46 47 49 50 51 54 55 56 62 65 66 68 69 71 81 83 85 86 89 91 94 95 97 100 102 103 104 107 108 109 112 113 115 116 117 120 121 122 125 126 127 128 130 131 132 133 134 140 141 142 143 144 146 149 150 152 153 155 156 158 159 160 161 164 166 170 173 176 177 178 180 183 185 186 187 190 194 195 197 199 201 203 204 205 206 207 208 209 210 211 219 220 223 b 224 0 1 4 5 6 7 8 10 12 13 14 18 19 23 24 25 26 29 30 31 32 34 35 36 37 38 39 40 42 43 45 46 47 49 50 51 54 55 56 62 65 66 68 69 71 81 83 85 86 89 91 94 95 97 100 102 103 104 107 108 109 112 113 115 116 117 120 121 122 125 126 127 128 130 131 132 133 134 140 141 142 143 144 146 149 150 152 153 155 156 158 159 160 161 164 166 170 173 176 177 178 180 183 185 186 187 190 194 195 197 199 201 203 204 205 206 207 208 209 210 211 219 220 223 # 9928 is_equal c a 224 0 1 4 5 6 7 8 10 12 13 14 18 19 23 24 25 26 29 30 31 32 34 35 36 37 38 39 40 42 43 45 46 47 49 50 51 54 55 56 62 65 66 68 69 71 81 83 85 86 89 91 94 95 97 100 102 103 104 107 108 109 112 113 115 116 117 120 121 122 125 126 127 128 130 131 132 133 134 140 141 142 143 144 146 149 150 152 153 155 156 158 159 160 161 164 166 170 173 176 177 178 180 183 185 186 187 190 194 195 197 199 201 203 204 205 206 207 208 209 210 211 219 220 223 b 224 0 0 1 2 3 4 6 7 10 11 13 14 15 17 18 19 23 25 26 28 29 32 35 38 39 40 42 47 49 53 55 57 58 60 62 63 66 67 68 70 71 72 76 78 82 83 85 87 88 91 92 94 96 97 99 101 102 105 110 111 112 114 118 120 126 129 130 132 133 134 136 138 140 141 143 145 146 147 149 151 153 155 158 161 162 164 165 166 168 169 170 171 173 175 176 181 183 185 187 188 196 198 199 200 202 208 209 210 213 214 215 216 218 219 220 221 222 # 9929 is_equal c a 224 0 1 e b 224 0 1 e # 9930 is_equal c a 224 0 1 e b 224 0 1 e # 9931 is_equal c a 224 0 1 e b 224 0 1 e # 9932 is_equal c a 224 0 1 e b 224 0 1 f # 9933 is_equal c a 224 0 1 e b 224 0 1 e # 9934 is_equal c a 224 0 1 e b 224 0 1 2 4 7 8 9 14 15 17 19 20 22 24 27 31 32 33 34 42 44 45 48 49 50 52 53 54 55 59 61 64 66 68 69 70 71 73 76 77 78 80 81 82 83 85 87 89 91 92 93 94 97 98 100 105 106 107 108 115 117 119 120 121 124 126 129 130 131 133 136 137 141 142 143 147 148 149 150 151 152 155 156 159 160 162 166 167 171 175 176 177 178 179 180 183 184 185 186 188 191 192 195 196 197 198 199 202 204 207 209 213 216 218 219 220 222 # 9935 is_equal c a 224 0 1 f b 224 0 1 f # 9936 is_equal c a 224 0 1 f b 224 0 1 e # 9937 is_equal c a 224 0 1 f b 224 0 1 f # 9938 is_equal c a 224 0 1 f b 224 0 1 f # 9939 is_equal c a 224 0 1 f b 224 0 1 f # 9940 is_equal c a 224 0 1 f b 224 0 1 0 1 4 8 10 11 13 14 15 16 18 22 23 26 28 30 34 36 38 39 40 42 46 48 49 50 51 53 54 55 57 58 59 61 63 64 67 68 69 71 74 75 76 77 80 86 89 92 93 95 101 103 106 107 112 113 118 119 126 127 128 135 136 138 139 140 143 145 147 149 151 153 154 157 162 163 164 166 167 168 170 171 172 173 174 175 176 177 178 179 180 182 184 185 186 188 189 197 201 202 204 205 207 208 209 210 211 214 217 219 220 221 # 9941 is_equal c a 224 0 1 2 3 5 6 7 8 9 11 12 14 19 20 22 24 27 30 31 32 33 36 39 41 42 46 47 48 49 51 56 58 60 61 63 64 65 69 71 72 73 74 75 77 78 80 83 84 85 87 95 97 100 101 104 108 110 111 114 116 117 118 124 125 127 129 132 133 134 136 138 139 142 143 144 147 150 151 157 159 160 161 162 165 166 168 169 175 176 177 178 180 181 182 186 188 189 191 192 196 198 199 200 205 208 209 211 212 215 216 217 219 220 221 223 b 224 0 1 2 3 5 6 7 8 9 11 12 14 19 20 22 24 27 30 31 32 33 36 39 41 42 46 47 48 49 51 56 58 60 61 63 64 65 69 71 72 73 74 75 77 78 80 83 84 85 87 95 97 100 101 104 108 110 111 114 116 117 118 124 125 127 129 132 133 134 136 138 139 142 143 144 147 150 151 157 159 160 161 162 165 166 168 169 175 176 177 178 180 181 182 186 188 189 191 192 196 198 199 200 205 208 209 211 212 215 216 217 219 220 221 223 # 9942 is_equal c a 224 0 1 2 3 5 6 7 8 9 11 12 14 19 20 22 24 27 30 31 32 33 36 39 41 42 46 47 48 49 51 56 58 60 61 63 64 65 69 71 72 73 74 75 77 78 80 83 84 85 87 95 97 100 101 104 108 110 111 114 116 117 118 124 125 127 129 132 133 134 136 138 139 142 143 144 147 150 151 157 159 160 161 162 165 166 168 169 175 176 177 178 180 181 182 186 188 189 191 192 196 198 199 200 205 208 209 211 212 215 216 217 219 220 221 223 b 224 0 1 e # 9943 is_equal c a 224 0 1 0 1 2 3 4 5 6 7 8 14 18 20 25 29 30 33 36 39 40 41 45 46 47 49 50 51 52 56 57 62 63 68 69 70 71 72 75 78 80 81 83 84 85 87 88 89 95 96 97 98 99 100 101 102 108 110 111 112 114 115 117 118 120 123 124 125 126 127 129 130 132 133 134 135 142 144 145 148 150 152 155 156 158 160 161 162 163 164 166 168 170 172 173 174 175 180 181 182 183 186 189 190 192 195 196 197 199 201 202 203 204 205 206 208 209 211 212 219 220 223 b 224 0 1 0 1 2 3 4 5 6 7 8 14 18 20 25 29 30 33 36 39 40 41 45 46 47 49 50 51 52 56 57 62 63 68 69 70 71 72 75 78 80 81 83 84 85 87 88 89 95 96 97 98 99 100 101 102 108 110 111 112 114 115 117 118 120 123 124 125 126 127 129 130 132 133 134 135 142 144 145 148 150 152 155 156 158 160 161 162 163 164 166 168 170 172 173 174 175 180 181 182 183 186 189 190 192 195 196 197 199 201 202 203 204 205 206 208 209 211 212 219 220 223 # 9944 is_equal c a 224 0 1 0 1 2 3 4 5 6 7 8 14 18 20 25 29 30 33 36 39 40 41 45 46 47 49 50 51 52 56 57 62 63 68 69 70 71 72 75 78 80 81 83 84 85 87 88 89 95 96 97 98 99 100 101 102 108 110 111 112 114 115 117 118 120 123 124 125 126 127 129 130 132 133 134 135 142 144 145 148 150 152 155 156 158 160 161 162 163 164 166 168 170 172 173 174 175 180 181 182 183 186 189 190 192 195 196 197 199 201 202 203 204 205 206 208 209 211 212 219 220 223 b 224 0 1 f # 9945 is_equal c a 224 0 1 0 1 3 4 5 7 8 10 13 14 16 18 19 22 23 24 26 27 28 33 35 36 37 38 41 42 44 45 46 48 49 55 56 58 60 62 67 68 74 75 81 82 84 87 88 91 94 95 98 102 103 104 106 107 108 112 113 114 115 118 119 121 122 123 125 126 127 128 132 133 137 141 142 144 147 148 149 150 152 153 157 158 162 166 167 172 173 174 175 177 178 180 181 183 185 187 188 195 196 199 201 204 209 212 213 216 220 221 222 b 224 0 1 0 1 3 4 5 7 8 10 13 14 16 18 19 22 23 24 26 27 28 33 35 36 37 38 41 42 44 45 46 48 49 55 56 58 60 62 67 68 74 75 81 82 84 87 88 91 94 95 98 102 103 104 106 107 108 112 113 114 115 118 119 121 122 123 125 126 127 128 132 133 137 141 142 144 147 148 149 150 152 153 157 158 162 166 167 172 173 174 175 177 178 180 181 183 185 187 188 195 196 199 201 204 209 212 213 216 220 221 222 # 9946 is_equal c a 224 0 1 0 1 3 4 5 7 8 10 13 14 16 18 19 22 23 24 26 27 28 33 35 36 37 38 41 42 44 45 46 48 49 55 56 58 60 62 67 68 74 75 81 82 84 87 88 91 94 95 98 102 103 104 106 107 108 112 113 114 115 118 119 121 122 123 125 126 127 128 132 133 137 141 142 144 147 148 149 150 152 153 157 158 162 166 167 172 173 174 175 177 178 180 181 183 185 187 188 195 196 199 201 204 209 212 213 216 220 221 222 b 224 0 1 2 3 6 7 11 12 13 15 16 17 20 22 24 25 26 27 28 29 30 31 32 33 34 37 39 41 42 44 45 48 50 52 53 54 55 56 57 58 60 61 63 64 69 70 71 72 73 76 78 80 81 82 83 84 85 86 88 89 90 91 96 97 105 106 107 109 112 118 120 121 125 126 130 131 132 135 137 138 140 142 144 145 146 149 150 152 154 156 158 160 161 165 167 168 172 173 174 175 176 177 180 183 184 187 188 193 194 195 198 200 201 202 203 204 205 206 207 208 211 212 213 214 215 216 219 220 221 # 9947 is_equal c a 224 0 1 e b 224 0 1 e # 9948 is_equal c a 224 0 1 e b 224 1 0 e # 9949 is_equal c a 224 0 1 e b 224 0 1 e # 9950 is_equal c a 224 0 1 e b 224 1 0 f # 9951 is_equal c a 224 0 1 e b 224 0 1 e # 9952 is_equal c a 224 0 1 e b 224 1 0 3 4 5 7 8 9 10 11 12 13 14 20 21 22 23 26 27 29 31 34 35 37 38 40 43 48 50 51 53 54 55 58 61 63 65 66 67 68 71 72 73 74 77 78 82 83 85 86 90 91 95 98 100 103 105 106 107 108 109 116 118 120 121 122 128 130 132 133 136 139 140 144 145 146 147 149 150 151 152 153 155 160 162 165 166 169 173 176 178 179 180 181 182 183 184 186 188 190 194 195 197 198 199 200 202 204 207 208 210 211 213 216 218 219 221 223 # 9953 is_equal c a 224 0 1 f b 224 0 1 f # 9954 is_equal c a 224 0 1 f b 224 1 0 e # 9955 is_equal c a 224 0 1 f b 224 0 1 f # 9956 is_equal c a 224 0 1 f b 224 1 0 f # 9957 is_equal c a 224 0 1 f b 224 0 1 f # 9958 is_equal c a 224 0 1 f b 224 1 0 2 3 4 5 7 8 10 11 12 14 15 16 21 22 25 26 27 28 30 31 34 40 43 44 45 47 49 51 52 54 57 58 59 61 62 63 65 68 70 71 72 73 76 77 80 83 84 87 90 92 93 96 98 99 100 103 105 108 110 111 112 114 115 118 119 121 124 126 128 131 132 133 134 136 137 138 139 141 142 145 147 148 149 152 153 154 157 158 164 165 166 167 168 169 172 174 175 176 178 179 183 184 192 193 194 195 196 199 201 203 206 209 211 212 213 214 215 220 221 222 # 9959 is_equal c a 224 0 1 1 5 6 8 11 15 18 24 26 29 30 31 32 34 35 36 37 39 41 42 43 45 46 47 50 51 52 55 56 59 62 63 65 66 68 71 73 74 75 76 78 80 81 83 84 86 87 88 89 90 91 94 95 97 99 102 103 105 106 109 110 116 117 120 121 126 127 130 131 132 133 134 137 138 139 140 141 142 144 146 147 149 152 153 159 160 161 162 164 165 166 168 170 173 174 178 182 184 186 188 190 193 194 195 197 202 206 208 209 210 212 213 214 215 216 217 219 b 224 0 1 1 5 6 8 11 15 18 24 26 29 30 31 32 34 35 36 37 39 41 42 43 45 46 47 50 51 52 55 56 59 62 63 65 66 68 71 73 74 75 76 78 80 81 83 84 86 87 88 89 90 91 94 95 97 99 102 103 105 106 109 110 116 117 120 121 126 127 130 131 132 133 134 137 138 139 140 141 142 144 146 147 149 152 153 159 160 161 162 164 165 166 168 170 173 174 178 182 184 186 188 190 193 194 195 197 202 206 208 209 210 212 213 214 215 216 217 219 # 9960 is_equal c a 224 0 1 1 5 6 8 11 15 18 24 26 29 30 31 32 34 35 36 37 39 41 42 43 45 46 47 50 51 52 55 56 59 62 63 65 66 68 71 73 74 75 76 78 80 81 83 84 86 87 88 89 90 91 94 95 97 99 102 103 105 106 109 110 116 117 120 121 126 127 130 131 132 133 134 137 138 139 140 141 142 144 146 147 149 152 153 159 160 161 162 164 165 166 168 170 173 174 178 182 184 186 188 190 193 194 195 197 202 206 208 209 210 212 213 214 215 216 217 219 b 224 1 0 e # 9961 is_equal c a 224 0 1 0 4 5 6 8 10 12 14 15 17 27 28 31 32 33 35 37 38 41 42 49 50 51 53 55 58 60 61 62 63 64 70 71 76 77 78 80 81 82 84 88 89 91 92 95 96 97 98 99 101 102 103 105 108 112 114 115 116 117 118 120 123 124 125 126 127 128 129 130 134 135 138 142 144 147 152 155 159 160 164 171 172 175 176 177 180 181 182 183 189 193 194 195 196 201 204 205 206 207 208 210 211 213 216 217 218 220 222 b 224 0 1 0 4 5 6 8 10 12 14 15 17 27 28 31 32 33 35 37 38 41 42 49 50 51 53 55 58 60 61 62 63 64 70 71 76 77 78 80 81 82 84 88 89 91 92 95 96 97 98 99 101 102 103 105 108 112 114 115 116 117 118 120 123 124 125 126 127 128 129 130 134 135 138 142 144 147 152 155 159 160 164 171 172 175 176 177 180 181 182 183 189 193 194 195 196 201 204 205 206 207 208 210 211 213 216 217 218 220 222 # 9962 is_equal c a 224 0 1 0 4 5 6 8 10 12 14 15 17 27 28 31 32 33 35 37 38 41 42 49 50 51 53 55 58 60 61 62 63 64 70 71 76 77 78 80 81 82 84 88 89 91 92 95 96 97 98 99 101 102 103 105 108 112 114 115 116 117 118 120 123 124 125 126 127 128 129 130 134 135 138 142 144 147 152 155 159 160 164 171 172 175 176 177 180 181 182 183 189 193 194 195 196 201 204 205 206 207 208 210 211 213 216 217 218 220 222 b 224 1 0 f # 9963 is_equal c a 224 0 1 1 6 7 10 13 14 15 17 18 19 20 23 28 31 33 37 42 45 47 48 53 55 56 58 59 60 62 63 65 68 69 70 72 73 74 78 82 83 85 86 89 90 93 96 97 98 99 101 102 104 105 106 108 109 118 119 120 121 122 126 128 129 130 132 133 134 136 137 138 139 143 145 147 148 149 151 152 156 157 159 160 166 168 169 170 172 176 179 181 182 187 189 190 191 193 195 202 205 206 209 211 212 215 216 217 218 219 220 221 222 b 224 0 1 1 6 7 10 13 14 15 17 18 19 20 23 28 31 33 37 42 45 47 48 53 55 56 58 59 60 62 63 65 68 69 70 72 73 74 78 82 83 85 86 89 90 93 96 97 98 99 101 102 104 105 106 108 109 118 119 120 121 122 126 128 129 130 132 133 134 136 137 138 139 143 145 147 148 149 151 152 156 157 159 160 166 168 169 170 172 176 179 181 182 187 189 190 191 193 195 202 205 206 209 211 212 215 216 217 218 219 220 221 222 # 9964 is_equal c a 224 0 1 1 6 7 10 13 14 15 17 18 19 20 23 28 31 33 37 42 45 47 48 53 55 56 58 59 60 62 63 65 68 69 70 72 73 74 78 82 83 85 86 89 90 93 96 97 98 99 101 102 104 105 106 108 109 118 119 120 121 122 126 128 129 130 132 133 134 136 137 138 139 143 145 147 148 149 151 152 156 157 159 160 166 168 169 170 172 176 179 181 182 187 189 190 191 193 195 202 205 206 209 211 212 215 216 217 218 219 220 221 222 b 224 1 0 0 3 4 8 9 12 14 19 20 21 22 25 28 32 33 35 37 39 40 41 43 44 45 49 51 55 57 59 61 65 67 68 69 70 73 76 78 81 83 85 86 88 89 92 93 94 96 98 99 100 101 104 106 107 108 109 110 112 114 115 116 117 119 120 121 122 124 125 126 127 128 129 130 131 133 138 141 142 143 145 146 150 153 154 156 159 162 163 166 167 168 169 171 172 173 174 176 177 183 188 189 190 191 193 194 196 197 199 200 202 203 205 206 208 212 213 217 218 219 220 221 222 223 # 9965 is_equal c a 224 0 1 e b 224 0 1 e # 9966 is_equal c a 224 0 1 e b 224 1 1 e # 9967 is_equal c a 224 0 1 e b 224 0 1 e # 9968 is_equal c a 224 0 1 e b 224 1 1 f # 9969 is_equal c a 224 0 1 e b 224 0 1 e # 9970 is_equal c a 224 0 1 e b 224 1 1 1 5 9 10 11 12 13 14 18 21 22 23 24 25 26 29 31 33 35 36 37 39 40 42 45 46 47 49 51 52 56 58 60 65 68 69 72 73 74 76 77 78 79 80 82 86 89 90 94 95 102 105 108 112 113 114 117 118 119 120 121 127 128 129 130 131 133 135 137 138 142 143 145 148 149 151 152 155 156 157 158 161 163 165 167 171 172 173 174 175 176 177 180 181 183 186 187 191 193 195 196 197 198 201 202 204 205 207 208 209 211 215 216 218 220 222 223 # 9971 is_equal c a 224 0 1 f b 224 0 1 f # 9972 is_equal c a 224 0 1 f b 224 1 1 e # 9973 is_equal c a 224 0 1 f b 224 0 1 f # 9974 is_equal c a 224 0 1 f b 224 1 1 f # 9975 is_equal c a 224 0 1 f b 224 0 1 f # 9976 is_equal c a 224 0 1 f b 224 1 1 2 3 7 12 15 19 20 21 23 27 30 31 32 33 34 37 39 44 46 48 50 51 54 55 56 58 61 62 65 67 68 69 71 73 80 84 86 87 89 90 91 93 95 96 97 98 103 104 105 106 108 111 112 113 114 115 116 117 118 120 121 124 125 129 130 131 134 137 141 142 144 145 147 148 149 151 152 153 154 158 159 161 162 165 166 167 170 171 173 174 175 176 178 179 181 182 183 184 185 188 194 195 196 198 200 201 203 204 206 207 209 210 211 212 214 218 220 221 # 9977 is_equal c a 224 0 1 4 5 6 8 9 15 17 19 23 26 32 33 34 36 38 42 43 44 49 51 53 55 56 58 60 62 63 67 68 72 75 76 77 78 79 80 82 83 84 86 87 88 89 91 93 97 100 101 102 103 108 111 112 113 114 115 118 119 121 122 124 126 128 130 131 133 134 135 140 142 145 147 149 150 152 154 155 156 157 159 162 163 166 167 168 170 172 173 174 176 178 179 181 187 189 190 191 194 195 196 197 199 203 211 212 213 214 219 220 221 222 b 224 0 1 4 5 6 8 9 15 17 19 23 26 32 33 34 36 38 42 43 44 49 51 53 55 56 58 60 62 63 67 68 72 75 76 77 78 79 80 82 83 84 86 87 88 89 91 93 97 100 101 102 103 108 111 112 113 114 115 118 119 121 122 124 126 128 130 131 133 134 135 140 142 145 147 149 150 152 154 155 156 157 159 162 163 166 167 168 170 172 173 174 176 178 179 181 187 189 190 191 194 195 196 197 199 203 211 212 213 214 219 220 221 222 # 9978 is_equal c a 224 0 1 4 5 6 8 9 15 17 19 23 26 32 33 34 36 38 42 43 44 49 51 53 55 56 58 60 62 63 67 68 72 75 76 77 78 79 80 82 83 84 86 87 88 89 91 93 97 100 101 102 103 108 111 112 113 114 115 118 119 121 122 124 126 128 130 131 133 134 135 140 142 145 147 149 150 152 154 155 156 157 159 162 163 166 167 168 170 172 173 174 176 178 179 181 187 189 190 191 194 195 196 197 199 203 211 212 213 214 219 220 221 222 b 224 1 1 e # 9979 is_equal c a 224 0 1 1 2 4 7 8 10 12 14 17 18 20 21 22 23 25 26 28 34 35 36 38 39 40 41 46 47 49 51 52 53 54 55 56 57 59 61 68 73 74 75 76 77 81 84 87 88 90 94 96 98 100 101 102 104 105 106 107 108 110 115 117 118 122 124 126 128 129 130 132 133 134 136 137 139 142 147 152 154 156 157 158 160 161 162 164 165 166 167 170 171 173 175 177 178 180 182 183 184 185 188 190 191 193 196 201 202 203 204 206 207 208 209 211 214 217 218 221 b 224 0 1 1 2 4 7 8 10 12 14 17 18 20 21 22 23 25 26 28 34 35 36 38 39 40 41 46 47 49 51 52 53 54 55 56 57 59 61 68 73 74 75 76 77 81 84 87 88 90 94 96 98 100 101 102 104 105 106 107 108 110 115 117 118 122 124 126 128 129 130 132 133 134 136 137 139 142 147 152 154 156 157 158 160 161 162 164 165 166 167 170 171 173 175 177 178 180 182 183 184 185 188 190 191 193 196 201 202 203 204 206 207 208 209 211 214 217 218 221 # 9980 is_equal c a 224 0 1 1 2 4 7 8 10 12 14 17 18 20 21 22 23 25 26 28 34 35 36 38 39 40 41 46 47 49 51 52 53 54 55 56 57 59 61 68 73 74 75 76 77 81 84 87 88 90 94 96 98 100 101 102 104 105 106 107 108 110 115 117 118 122 124 126 128 129 130 132 133 134 136 137 139 142 147 152 154 156 157 158 160 161 162 164 165 166 167 170 171 173 175 177 178 180 182 183 184 185 188 190 191 193 196 201 202 203 204 206 207 208 209 211 214 217 218 221 b 224 1 1 f # 9981 is_equal c a 224 0 1 0 2 4 5 6 8 9 11 12 14 15 18 19 20 21 22 24 25 26 27 29 34 41 42 44 45 48 50 51 52 53 54 55 56 57 58 60 67 68 69 70 71 72 73 75 76 78 79 80 81 83 84 87 90 91 95 96 97 98 100 101 104 105 111 113 114 118 121 123 125 126 129 130 134 136 137 138 141 144 145 146 147 149 151 152 153 154 156 157 163 169 170 172 173 174 175 176 177 178 182 185 187 189 191 193 194 195 196 201 202 204 205 206 207 209 211 212 216 217 220 223 b 224 0 1 0 2 4 5 6 8 9 11 12 14 15 18 19 20 21 22 24 25 26 27 29 34 41 42 44 45 48 50 51 52 53 54 55 56 57 58 60 67 68 69 70 71 72 73 75 76 78 79 80 81 83 84 87 90 91 95 96 97 98 100 101 104 105 111 113 114 118 121 123 125 126 129 130 134 136 137 138 141 144 145 146 147 149 151 152 153 154 156 157 163 169 170 172 173 174 175 176 177 178 182 185 187 189 191 193 194 195 196 201 202 204 205 206 207 209 211 212 216 217 220 223 # 9982 is_equal c a 224 0 1 0 2 4 5 6 8 9 11 12 14 15 18 19 20 21 22 24 25 26 27 29 34 41 42 44 45 48 50 51 52 53 54 55 56 57 58 60 67 68 69 70 71 72 73 75 76 78 79 80 81 83 84 87 90 91 95 96 97 98 100 101 104 105 111 113 114 118 121 123 125 126 129 130 134 136 137 138 141 144 145 146 147 149 151 152 153 154 156 157 163 169 170 172 173 174 175 176 177 178 182 185 187 189 191 193 194 195 196 201 202 204 205 206 207 209 211 212 216 217 220 223 b 224 1 1 2 4 5 7 8 11 12 14 16 19 21 26 28 32 33 35 36 37 38 39 41 42 45 46 51 52 56 58 59 60 61 63 64 65 67 68 70 71 73 76 77 78 81 82 86 93 94 100 103 110 111 113 114 115 116 117 121 122 123 125 127 129 131 134 135 136 140 141 143 144 146 147 148 149 152 153 154 156 159 160 162 164 165 166 167 173 175 176 177 178 179 180 181 183 184 186 187 190 192 193 194 195 196 197 198 200 204 205 207 208 209 210 211 212 215 218 219 220 # 9983 is_equal c a 224 1 0 e b 224 1 0 e # 9984 is_equal c a 224 1 0 e b 224 0 0 e # 9985 is_equal c a 224 1 0 e b 224 1 0 e # 9986 is_equal c a 224 1 0 e b 224 0 0 f # 9987 is_equal c a 224 1 0 e b 224 1 0 e # 9988 is_equal c a 224 1 0 e b 224 0 0 3 4 5 7 9 18 23 24 26 27 28 31 32 34 35 38 39 40 41 42 46 47 49 51 53 54 57 58 59 62 64 65 66 69 70 72 73 74 79 81 82 84 85 86 87 88 89 90 92 93 95 96 98 101 103 104 108 110 111 113 115 118 120 121 123 124 125 126 127 129 131 132 133 134 135 136 137 138 139 141 142 143 144 146 149 152 153 155 156 158 160 161 163 164 165 167 168 177 179 180 181 184 185 187 189 192 193 194 195 196 199 200 201 206 207 210 214 217 220 221 222 223 # 9989 is_equal c a 224 1 0 f b 224 1 0 f # 9990 is_equal c a 224 1 0 f b 224 0 0 e # 9991 is_equal c a 224 1 0 f b 224 1 0 f # 9992 is_equal c a 224 1 0 f b 224 0 0 f # 9993 is_equal c a 224 1 0 f b 224 1 0 f # 9994 is_equal c a 224 1 0 f b 224 0 0 1 2 6 10 12 16 17 19 26 29 31 33 34 35 37 38 41 42 43 47 49 50 52 54 56 57 59 60 61 62 64 65 66 67 68 69 71 72 74 75 76 78 79 80 81 83 87 89 90 93 101 107 110 116 117 122 123 127 128 130 137 139 140 144 145 146 147 148 152 155 158 160 161 164 165 166 168 171 172 173 174 175 176 177 178 179 180 182 183 186 187 188 191 193 194 196 197 198 200 203 208 210 211 213 214 215 218 219 220 222 # 9995 is_equal c a 224 1 0 0 1 3 11 12 13 14 15 16 17 18 20 24 27 28 29 31 32 33 36 37 38 41 43 44 46 47 52 53 55 57 58 59 60 62 64 66 67 68 73 76 77 78 84 85 88 92 93 94 95 97 98 103 104 105 106 107 108 109 113 114 116 120 121 122 124 125 127 128 129 131 133 134 137 140 143 147 149 154 157 160 165 167 168 169 170 176 177 181 183 187 192 197 198 200 201 202 203 208 209 212 213 217 221 222 b 224 1 0 0 1 3 11 12 13 14 15 16 17 18 20 24 27 28 29 31 32 33 36 37 38 41 43 44 46 47 52 53 55 57 58 59 60 62 64 66 67 68 73 76 77 78 84 85 88 92 93 94 95 97 98 103 104 105 106 107 108 109 113 114 116 120 121 122 124 125 127 128 129 131 133 134 137 140 143 147 149 154 157 160 165 167 168 169 170 176 177 181 183 187 192 197 198 200 201 202 203 208 209 212 213 217 221 222 # 9996 is_equal c a 224 1 0 0 1 3 11 12 13 14 15 16 17 18 20 24 27 28 29 31 32 33 36 37 38 41 43 44 46 47 52 53 55 57 58 59 60 62 64 66 67 68 73 76 77 78 84 85 88 92 93 94 95 97 98 103 104 105 106 107 108 109 113 114 116 120 121 122 124 125 127 128 129 131 133 134 137 140 143 147 149 154 157 160 165 167 168 169 170 176 177 181 183 187 192 197 198 200 201 202 203 208 209 212 213 217 221 222 b 224 0 0 e # 9997 is_equal c a 224 1 0 3 6 7 9 10 11 12 15 17 20 21 22 23 24 27 33 35 38 39 40 41 42 43 45 46 47 48 56 57 59 63 65 68 71 72 73 74 76 77 78 79 83 85 88 91 92 93 94 98 101 104 106 107 109 110 111 112 113 114 116 118 120 121 123 124 126 129 130 131 132 135 136 138 140 143 150 154 155 157 159 160 161 162 167 168 169 171 174 175 176 181 183 186 187 189 190 192 193 194 197 199 200 202 204 207 208 209 210 212 214 215 216 217 218 220 222 223 b 224 1 0 3 6 7 9 10 11 12 15 17 20 21 22 23 24 27 33 35 38 39 40 41 42 43 45 46 47 48 56 57 59 63 65 68 71 72 73 74 76 77 78 79 83 85 88 91 92 93 94 98 101 104 106 107 109 110 111 112 113 114 116 118 120 121 123 124 126 129 130 131 132 135 136 138 140 143 150 154 155 157 159 160 161 162 167 168 169 171 174 175 176 181 183 186 187 189 190 192 193 194 197 199 200 202 204 207 208 209 210 212 214 215 216 217 218 220 222 223 # 9998 is_equal c a 224 1 0 3 6 7 9 10 11 12 15 17 20 21 22 23 24 27 33 35 38 39 40 41 42 43 45 46 47 48 56 57 59 63 65 68 71 72 73 74 76 77 78 79 83 85 88 91 92 93 94 98 101 104 106 107 109 110 111 112 113 114 116 118 120 121 123 124 126 129 130 131 132 135 136 138 140 143 150 154 155 157 159 160 161 162 167 168 169 171 174 175 176 181 183 186 187 189 190 192 193 194 197 199 200 202 204 207 208 209 210 212 214 215 216 217 218 220 222 223 b 224 0 0 f # 9999 is_equal c a 224 1 0 2 8 10 11 12 18 19 20 21 22 23 25 30 32 33 34 38 39 40 41 42 46 48 49 51 54 55 62 65 72 74 77 78 82 83 84 85 86 87 88 94 95 99 101 104 105 106 108 110 112 113 121 122 123 125 126 127 128 129 130 132 134 135 137 139 141 143 144 148 149 150 152 153 157 160 162 163 164 165 167 168 169 170 171 172 174 176 178 182 185 186 187 188 191 192 194 195 198 199 200 201 202 203 204 205 207 209 211 213 215 216 219 220 221 222 223 b 224 1 0 2 8 10 11 12 18 19 20 21 22 23 25 30 32 33 34 38 39 40 41 42 46 48 49 51 54 55 62 65 72 74 77 78 82 83 84 85 86 87 88 94 95 99 101 104 105 106 108 110 112 113 121 122 123 125 126 127 128 129 130 132 134 135 137 139 141 143 144 148 149 150 152 153 157 160 162 163 164 165 167 168 169 170 171 172 174 176 178 182 185 186 187 188 191 192 194 195 198 199 200 201 202 203 204 205 207 209 211 213 215 216 219 220 221 222 223 # 10000 is_equal c a 224 1 0 2 8 10 11 12 18 19 20 21 22 23 25 30 32 33 34 38 39 40 41 42 46 48 49 51 54 55 62 65 72 74 77 78 82 83 84 85 86 87 88 94 95 99 101 104 105 106 108 110 112 113 121 122 123 125 126 127 128 129 130 132 134 135 137 139 141 143 144 148 149 150 152 153 157 160 162 163 164 165 167 168 169 170 171 172 174 176 178 182 185 186 187 188 191 192 194 195 198 199 200 201 202 203 204 205 207 209 211 213 215 216 219 220 221 222 223 b 224 0 0 0 1 2 4 7 10 13 14 15 16 18 24 25 27 30 32 34 35 36 37 38 41 44 47 48 49 51 55 58 59 60 63 64 65 66 67 68 69 73 74 77 78 79 80 82 84 87 88 89 90 93 96 97 99 100 101 105 107 108 110 111 112 113 116 119 123 129 132 137 138 141 145 146 151 154 155 156 158 162 163 164 170 171 172 174 176 177 178 180 182 184 185 187 188 193 200 203 208 210 211 213 217 218 220 222 # 10001 is_equal c a 224 1 0 e b 224 1 0 e # 10002 is_equal c a 224 1 0 e b 224 0 1 e # 10003 is_equal c a 224 1 0 e b 224 1 0 e # 10004 is_equal c a 224 1 0 e b 224 0 1 f # 10005 is_equal c a 224 1 0 e b 224 1 0 e # 10006 is_equal c a 224 1 0 e b 224 0 1 1 2 6 10 11 19 20 21 24 26 27 29 31 32 33 39 42 43 44 49 52 54 55 56 57 60 61 62 64 66 67 70 71 72 74 76 78 81 82 85 88 89 94 96 97 100 101 103 108 109 112 114 116 117 118 119 120 124 128 129 130 131 132 133 134 137 139 140 141 143 145 148 150 151 154 158 163 167 169 170 172 173 175 176 177 179 180 182 185 186 187 192 193 197 201 202 204 205 207 208 210 211 212 213 217 219 221 # 10007 is_equal c a 224 1 0 f b 224 1 0 f # 10008 is_equal c a 224 1 0 f b 224 0 1 e # 10009 is_equal c a 224 1 0 f b 224 1 0 f # 10010 is_equal c a 224 1 0 f b 224 0 1 f # 10011 is_equal c a 224 1 0 f b 224 1 0 f # 10012 is_equal c a 224 1 0 f b 224 0 1 0 1 2 3 7 15 16 18 19 20 21 22 24 28 30 31 33 34 35 38 41 42 43 45 46 54 57 58 61 63 64 65 70 71 75 79 80 82 84 85 86 88 89 90 92 93 94 95 96 98 100 101 102 103 106 107 108 109 114 119 123 126 128 129 135 136 139 141 143 145 146 147 150 151 152 153 154 155 159 161 163 165 169 170 172 179 180 181 184 188 189 191 193 194 195 196 198 199 201 205 206 208 209 211 212 213 215 216 217 219 222 223 # 10013 is_equal c a 224 1 0 2 3 4 5 6 7 8 11 13 16 17 18 19 22 24 28 29 31 34 36 37 39 42 43 46 48 49 54 56 58 63 66 71 72 73 74 77 78 80 82 83 84 85 88 89 90 94 95 96 97 103 107 108 109 110 111 113 114 115 117 120 122 124 125 126 127 128 131 132 133 134 138 141 142 144 145 148 149 150 151 154 157 159 161 162 163 164 165 174 175 179 181 182 183 185 187 188 189 190 191 192 193 194 195 196 199 201 203 206 208 209 212 216 217 219 220 221 222 223 b 224 1 0 2 3 4 5 6 7 8 11 13 16 17 18 19 22 24 28 29 31 34 36 37 39 42 43 46 48 49 54 56 58 63 66 71 72 73 74 77 78 80 82 83 84 85 88 89 90 94 95 96 97 103 107 108 109 110 111 113 114 115 117 120 122 124 125 126 127 128 131 132 133 134 138 141 142 144 145 148 149 150 151 154 157 159 161 162 163 164 165 174 175 179 181 182 183 185 187 188 189 190 191 192 193 194 195 196 199 201 203 206 208 209 212 216 217 219 220 221 222 223 # 10014 is_equal c a 224 1 0 2 3 4 5 6 7 8 11 13 16 17 18 19 22 24 28 29 31 34 36 37 39 42 43 46 48 49 54 56 58 63 66 71 72 73 74 77 78 80 82 83 84 85 88 89 90 94 95 96 97 103 107 108 109 110 111 113 114 115 117 120 122 124 125 126 127 128 131 132 133 134 138 141 142 144 145 148 149 150 151 154 157 159 161 162 163 164 165 174 175 179 181 182 183 185 187 188 189 190 191 192 193 194 195 196 199 201 203 206 208 209 212 216 217 219 220 221 222 223 b 224 0 1 e # 10015 is_equal c a 224 1 0 0 1 2 4 8 9 13 14 16 18 19 25 28 29 32 34 35 36 39 42 43 45 48 52 53 54 56 58 62 63 64 65 66 67 69 71 74 75 80 81 82 83 84 85 87 88 92 95 97 98 99 100 102 104 105 107 109 112 113 115 116 117 118 119 121 122 129 133 134 135 136 138 139 147 149 150 152 153 154 156 157 158 160 161 164 167 170 171 173 174 175 178 179 185 188 191 193 198 199 200 201 204 206 208 209 210 211 217 218 220 b 224 1 0 0 1 2 4 8 9 13 14 16 18 19 25 28 29 32 34 35 36 39 42 43 45 48 52 53 54 56 58 62 63 64 65 66 67 69 71 74 75 80 81 82 83 84 85 87 88 92 95 97 98 99 100 102 104 105 107 109 112 113 115 116 117 118 119 121 122 129 133 134 135 136 138 139 147 149 150 152 153 154 156 157 158 160 161 164 167 170 171 173 174 175 178 179 185 188 191 193 198 199 200 201 204 206 208 209 210 211 217 218 220 # 10016 is_equal c a 224 1 0 0 1 2 4 8 9 13 14 16 18 19 25 28 29 32 34 35 36 39 42 43 45 48 52 53 54 56 58 62 63 64 65 66 67 69 71 74 75 80 81 82 83 84 85 87 88 92 95 97 98 99 100 102 104 105 107 109 112 113 115 116 117 118 119 121 122 129 133 134 135 136 138 139 147 149 150 152 153 154 156 157 158 160 161 164 167 170 171 173 174 175 178 179 185 188 191 193 198 199 200 201 204 206 208 209 210 211 217 218 220 b 224 0 1 f # 10017 is_equal c a 224 1 0 4 7 9 10 11 13 15 16 18 19 23 24 26 27 31 32 33 35 45 48 52 53 55 56 58 61 64 66 67 68 72 73 74 76 78 79 80 81 84 87 88 89 92 95 96 98 99 100 103 105 107 110 111 113 115 117 118 120 121 123 125 133 135 136 137 138 139 142 147 151 153 154 155 156 161 162 163 166 172 174 176 179 180 181 182 183 185 186 188 189 192 199 200 201 203 204 207 208 209 210 213 215 221 222 223 b 224 1 0 4 7 9 10 11 13 15 16 18 19 23 24 26 27 31 32 33 35 45 48 52 53 55 56 58 61 64 66 67 68 72 73 74 76 78 79 80 81 84 87 88 89 92 95 96 98 99 100 103 105 107 110 111 113 115 117 118 120 121 123 125 133 135 136 137 138 139 142 147 151 153 154 155 156 161 162 163 166 172 174 176 179 180 181 182 183 185 186 188 189 192 199 200 201 203 204 207 208 209 210 213 215 221 222 223 # 10018 is_equal c a 224 1 0 4 7 9 10 11 13 15 16 18 19 23 24 26 27 31 32 33 35 45 48 52 53 55 56 58 61 64 66 67 68 72 73 74 76 78 79 80 81 84 87 88 89 92 95 96 98 99 100 103 105 107 110 111 113 115 117 118 120 121 123 125 133 135 136 137 138 139 142 147 151 153 154 155 156 161 162 163 166 172 174 176 179 180 181 182 183 185 186 188 189 192 199 200 201 203 204 207 208 209 210 213 215 221 222 223 b 224 0 1 0 4 5 12 17 18 19 20 22 24 25 26 27 28 29 30 31 35 36 40 41 42 43 51 52 53 56 57 59 60 63 64 65 66 67 74 78 79 82 85 86 88 90 91 92 94 97 102 104 105 106 108 109 110 113 114 116 118 119 120 121 126 128 130 132 133 134 137 138 140 141 142 143 145 150 151 152 156 158 159 160 161 162 165 166 167 169 175 177 180 183 184 185 189 192 194 196 197 201 202 203 205 206 208 210 211 214 217 218 219 220 221 223 # 10019 is_equal c a 224 1 0 e b 224 1 0 e # 10020 is_equal c a 224 1 0 e b 224 1 0 e # 10021 is_equal c a 224 1 0 e b 224 1 0 e # 10022 is_equal c a 224 1 0 e b 224 1 0 f # 10023 is_equal c a 224 1 0 e b 224 1 0 e # 10024 is_equal c a 224 1 0 e b 224 1 0 1 2 4 6 8 14 17 18 19 21 23 24 25 26 27 28 29 32 35 36 38 39 40 42 45 47 50 51 55 58 64 65 66 69 71 75 76 77 78 81 84 85 88 93 96 98 101 103 110 112 113 114 115 116 119 120 121 122 124 127 128 130 136 137 138 139 140 143 146 148 150 151 152 153 154 155 160 162 163 164 168 171 172 173 174 177 186 187 188 192 195 196 197 199 201 202 203 204 205 208 209 210 211 213 215 218 219 220 223 # 10025 is_equal c a 224 1 0 f b 224 1 0 f # 10026 is_equal c a 224 1 0 f b 224 1 0 e # 10027 is_equal c a 224 1 0 f b 224 1 0 f # 10028 is_equal c a 224 1 0 f b 224 1 0 f # 10029 is_equal c a 224 1 0 f b 224 1 0 f # 10030 is_equal c a 224 1 0 f b 224 1 0 0 1 4 5 9 12 21 24 25 27 29 31 32 33 35 36 37 40 44 45 46 50 53 54 56 58 65 69 73 74 76 77 82 85 86 89 91 93 95 97 98 99 103 105 106 108 110 111 112 115 120 121 126 127 129 130 131 135 139 140 142 143 144 146 147 148 149 151 152 153 154 157 160 165 167 169 170 173 174 175 177 178 179 180 182 185 186 188 189 190 191 195 196 197 200 203 204 206 209 211 213 215 216 # 10031 is_equal c a 224 1 0 5 6 7 8 10 11 12 13 15 16 18 24 26 27 28 29 33 34 35 38 40 41 44 45 47 51 52 54 55 56 57 58 59 60 62 64 65 66 69 70 71 77 78 84 87 88 89 91 94 97 98 100 101 105 108 110 112 114 121 126 130 131 137 138 141 142 143 145 147 149 154 155 156 157 159 162 164 166 168 169 170 172 173 176 177 178 179 183 184 186 189 194 195 196 197 199 200 201 202 203 204 208 213 218 219 b 224 1 0 5 6 7 8 10 11 12 13 15 16 18 24 26 27 28 29 33 34 35 38 40 41 44 45 47 51 52 54 55 56 57 58 59 60 62 64 65 66 69 70 71 77 78 84 87 88 89 91 94 97 98 100 101 105 108 110 112 114 121 126 130 131 137 138 141 142 143 145 147 149 154 155 156 157 159 162 164 166 168 169 170 172 173 176 177 178 179 183 184 186 189 194 195 196 197 199 200 201 202 203 204 208 213 218 219 # 10032 is_equal c a 224 1 0 5 6 7 8 10 11 12 13 15 16 18 24 26 27 28 29 33 34 35 38 40 41 44 45 47 51 52 54 55 56 57 58 59 60 62 64 65 66 69 70 71 77 78 84 87 88 89 91 94 97 98 100 101 105 108 110 112 114 121 126 130 131 137 138 141 142 143 145 147 149 154 155 156 157 159 162 164 166 168 169 170 172 173 176 177 178 179 183 184 186 189 194 195 196 197 199 200 201 202 203 204 208 213 218 219 b 224 1 0 e # 10033 is_equal c a 224 1 0 0 5 8 14 16 18 23 24 26 27 29 33 34 36 37 38 41 42 43 45 51 52 53 54 57 59 60 61 62 63 64 65 67 68 71 74 75 77 78 79 82 83 85 87 89 92 95 97 98 99 100 101 102 105 106 108 109 111 113 114 115 116 118 124 125 127 130 133 134 136 137 138 140 147 148 149 153 154 155 158 159 160 161 163 164 167 168 171 172 173 174 175 178 182 184 185 191 193 194 200 202 203 205 206 209 210 212 214 215 220 221 b 224 1 0 0 5 8 14 16 18 23 24 26 27 29 33 34 36 37 38 41 42 43 45 51 52 53 54 57 59 60 61 62 63 64 65 67 68 71 74 75 77 78 79 82 83 85 87 89 92 95 97 98 99 100 101 102 105 106 108 109 111 113 114 115 116 118 124 125 127 130 133 134 136 137 138 140 147 148 149 153 154 155 158 159 160 161 163 164 167 168 171 172 173 174 175 178 182 184 185 191 193 194 200 202 203 205 206 209 210 212 214 215 220 221 # 10034 is_equal c a 224 1 0 0 5 8 14 16 18 23 24 26 27 29 33 34 36 37 38 41 42 43 45 51 52 53 54 57 59 60 61 62 63 64 65 67 68 71 74 75 77 78 79 82 83 85 87 89 92 95 97 98 99 100 101 102 105 106 108 109 111 113 114 115 116 118 124 125 127 130 133 134 136 137 138 140 147 148 149 153 154 155 158 159 160 161 163 164 167 168 171 172 173 174 175 178 182 184 185 191 193 194 200 202 203 205 206 209 210 212 214 215 220 221 b 224 1 0 f # 10035 is_equal c a 224 1 0 0 2 4 7 8 10 11 15 20 23 24 25 27 28 29 31 34 40 44 45 47 48 51 52 54 59 62 63 64 65 69 72 73 74 75 77 78 81 85 86 87 89 90 101 102 104 106 109 110 111 112 113 116 117 118 120 121 122 125 126 130 131 133 134 135 137 139 140 141 142 144 145 146 147 148 149 151 153 155 156 163 164 166 169 170 171 172 173 175 176 178 179 180 182 190 191 192 193 194 195 198 201 204 205 212 213 214 215 217 219 221 222 b 224 1 0 0 2 4 7 8 10 11 15 20 23 24 25 27 28 29 31 34 40 44 45 47 48 51 52 54 59 62 63 64 65 69 72 73 74 75 77 78 81 85 86 87 89 90 101 102 104 106 109 110 111 112 113 116 117 118 120 121 122 125 126 130 131 133 134 135 137 139 140 141 142 144 145 146 147 148 149 151 153 155 156 163 164 166 169 170 171 172 173 175 176 178 179 180 182 190 191 192 193 194 195 198 201 204 205 212 213 214 215 217 219 221 222 # 10036 is_equal c a 224 1 0 0 2 4 7 8 10 11 15 20 23 24 25 27 28 29 31 34 40 44 45 47 48 51 52 54 59 62 63 64 65 69 72 73 74 75 77 78 81 85 86 87 89 90 101 102 104 106 109 110 111 112 113 116 117 118 120 121 122 125 126 130 131 133 134 135 137 139 140 141 142 144 145 146 147 148 149 151 153 155 156 163 164 166 169 170 171 172 173 175 176 178 179 180 182 190 191 192 193 194 195 198 201 204 205 212 213 214 215 217 219 221 222 b 224 1 0 0 2 4 5 6 8 10 11 16 18 19 22 23 25 27 28 31 32 35 37 42 44 46 47 48 49 54 55 58 60 61 70 71 72 73 76 79 80 81 82 84 85 86 89 92 93 94 95 97 99 104 105 106 107 108 109 110 111 112 113 115 116 118 120 123 126 131 133 134 137 140 144 145 147 148 150 151 152 154 155 156 159 160 161 162 165 166 167 173 174 176 177 179 182 183 184 186 188 191 194 195 196 197 198 200 202 206 207 210 211 214 216 217 218 219 222 # 10037 is_equal c a 224 1 0 e b 224 1 0 e # 10038 is_equal c a 224 1 0 e b 224 1 1 e # 10039 is_equal c a 224 1 0 e b 224 1 0 e # 10040 is_equal c a 224 1 0 e b 224 1 1 f # 10041 is_equal c a 224 1 0 e b 224 1 0 e # 10042 is_equal c a 224 1 0 e b 224 1 1 1 5 6 9 10 13 15 19 20 22 23 24 25 26 28 30 33 34 35 36 37 40 42 43 46 54 56 57 58 59 70 72 75 76 77 81 83 84 87 89 90 94 95 96 100 102 104 105 108 109 110 112 114 115 116 118 119 121 123 126 128 130 134 138 142 144 145 146 148 149 153 154 155 157 158 160 161 162 165 166 167 171 172 173 174 175 176 177 179 180 181 182 184 185 186 188 189 191 192 195 196 197 198 201 202 204 205 207 208 211 214 215 217 220 221 222 223 # 10043 is_equal c a 224 1 0 f b 224 1 0 f # 10044 is_equal c a 224 1 0 f b 224 1 1 e # 10045 is_equal c a 224 1 0 f b 224 1 0 f # 10046 is_equal c a 224 1 0 f b 224 1 1 f # 10047 is_equal c a 224 1 0 f b 224 1 0 f # 10048 is_equal c a 224 1 0 f b 224 1 1 0 2 3 7 16 17 18 21 23 24 26 27 29 30 36 40 42 43 44 47 48 54 56 57 60 61 65 66 69 70 71 73 74 81 83 86 93 94 95 96 99 102 103 105 109 110 111 112 115 116 120 121 122 123 124 126 128 129 137 138 139 140 141 143 144 145 146 147 149 150 152 153 157 158 160 162 164 166 169 173 174 176 177 180 184 185 186 188 189 191 194 197 198 199 202 203 204 205 207 208 209 210 212 214 215 217 219 220 221 222 # 10049 is_equal c a 224 1 0 0 1 2 5 7 10 14 15 17 23 26 30 33 34 35 36 37 38 41 49 50 51 53 54 55 59 60 62 65 66 68 69 70 71 75 76 77 80 81 84 85 89 94 95 96 97 99 102 103 106 109 112 113 114 115 116 121 122 123 124 126 127 130 131 134 135 136 139 141 145 149 152 155 156 157 158 159 162 163 164 166 167 168 169 170 172 173 174 176 181 182 185 186 187 188 189 190 193 194 197 198 200 201 202 204 205 206 207 210 211 213 214 216 217 219 220 222 223 b 224 1 0 0 1 2 5 7 10 14 15 17 23 26 30 33 34 35 36 37 38 41 49 50 51 53 54 55 59 60 62 65 66 68 69 70 71 75 76 77 80 81 84 85 89 94 95 96 97 99 102 103 106 109 112 113 114 115 116 121 122 123 124 126 127 130 131 134 135 136 139 141 145 149 152 155 156 157 158 159 162 163 164 166 167 168 169 170 172 173 174 176 181 182 185 186 187 188 189 190 193 194 197 198 200 201 202 204 205 206 207 210 211 213 214 216 217 219 220 222 223 # 10050 is_equal c a 224 1 0 0 1 2 5 7 10 14 15 17 23 26 30 33 34 35 36 37 38 41 49 50 51 53 54 55 59 60 62 65 66 68 69 70 71 75 76 77 80 81 84 85 89 94 95 96 97 99 102 103 106 109 112 113 114 115 116 121 122 123 124 126 127 130 131 134 135 136 139 141 145 149 152 155 156 157 158 159 162 163 164 166 167 168 169 170 172 173 174 176 181 182 185 186 187 188 189 190 193 194 197 198 200 201 202 204 205 206 207 210 211 213 214 216 217 219 220 222 223 b 224 1 1 e # 10051 is_equal c a 224 1 0 1 4 6 8 10 11 13 16 22 23 26 27 28 29 30 31 32 38 40 41 43 44 45 47 49 50 52 53 56 59 60 62 63 67 73 75 77 78 79 81 85 86 88 89 91 93 94 95 97 98 99 102 104 108 112 114 117 118 120 123 125 126 128 132 134 135 142 144 145 146 148 149 153 156 158 159 160 162 165 167 168 172 174 175 177 180 181 182 186 189 190 192 193 194 196 197 199 201 207 209 213 215 219 220 222 223 b 224 1 0 1 4 6 8 10 11 13 16 22 23 26 27 28 29 30 31 32 38 40 41 43 44 45 47 49 50 52 53 56 59 60 62 63 67 73 75 77 78 79 81 85 86 88 89 91 93 94 95 97 98 99 102 104 108 112 114 117 118 120 123 125 126 128 132 134 135 142 144 145 146 148 149 153 156 158 159 160 162 165 167 168 172 174 175 177 180 181 182 186 189 190 192 193 194 196 197 199 201 207 209 213 215 219 220 222 223 # 10052 is_equal c a 224 1 0 1 4 6 8 10 11 13 16 22 23 26 27 28 29 30 31 32 38 40 41 43 44 45 47 49 50 52 53 56 59 60 62 63 67 73 75 77 78 79 81 85 86 88 89 91 93 94 95 97 98 99 102 104 108 112 114 117 118 120 123 125 126 128 132 134 135 142 144 145 146 148 149 153 156 158 159 160 162 165 167 168 172 174 175 177 180 181 182 186 189 190 192 193 194 196 197 199 201 207 209 213 215 219 220 222 223 b 224 1 1 f # 10053 is_equal c a 224 1 0 1 3 4 5 6 8 9 10 16 17 18 20 23 25 26 28 29 33 36 37 39 40 45 46 48 50 52 58 60 65 66 68 71 73 74 75 76 77 82 83 84 88 89 91 93 96 97 98 101 103 104 106 108 110 112 113 115 118 122 123 129 130 132 133 135 137 143 145 146 147 149 150 151 153 155 157 158 160 161 162 163 164 167 169 172 173 178 179 180 181 184 185 186 188 189 190 192 193 196 197 201 202 206 207 209 210 212 214 215 217 218 219 220 221 b 224 1 0 1 3 4 5 6 8 9 10 16 17 18 20 23 25 26 28 29 33 36 37 39 40 45 46 48 50 52 58 60 65 66 68 71 73 74 75 76 77 82 83 84 88 89 91 93 96 97 98 101 103 104 106 108 110 112 113 115 118 122 123 129 130 132 133 135 137 143 145 146 147 149 150 151 153 155 157 158 160 161 162 163 164 167 169 172 173 178 179 180 181 184 185 186 188 189 190 192 193 196 197 201 202 206 207 209 210 212 214 215 217 218 219 220 221 # 10054 is_equal c a 224 1 0 1 3 4 5 6 8 9 10 16 17 18 20 23 25 26 28 29 33 36 37 39 40 45 46 48 50 52 58 60 65 66 68 71 73 74 75 76 77 82 83 84 88 89 91 93 96 97 98 101 103 104 106 108 110 112 113 115 118 122 123 129 130 132 133 135 137 143 145 146 147 149 150 151 153 155 157 158 160 161 162 163 164 167 169 172 173 178 179 180 181 184 185 186 188 189 190 192 193 196 197 201 202 206 207 209 210 212 214 215 217 218 219 220 221 b 224 1 1 1 2 6 7 11 12 14 16 18 19 20 23 26 27 31 35 36 37 38 42 45 51 52 53 54 55 57 58 63 64 67 71 75 76 77 80 81 83 86 87 89 91 96 97 103 104 105 106 107 110 112 117 119 120 123 124 125 127 128 132 133 134 135 136 137 140 142 143 144 145 148 149 150 151 154 157 161 162 164 165 169 170 175 177 180 183 184 185 188 190 194 195 199 200 204 205 208 210 212 213 216 217 218 219 # 10055 is_equal c a 224 1 1 e b 224 1 1 e # 10056 is_equal c a 224 1 1 e b 224 0 0 e # 10057 is_equal c a 224 1 1 e b 224 1 1 e # 10058 is_equal c a 224 1 1 e b 224 0 0 f # 10059 is_equal c a 224 1 1 e b 224 1 1 e # 10060 is_equal c a 224 1 1 e b 224 0 0 0 4 5 6 7 10 11 12 15 16 17 20 21 22 23 25 26 27 32 33 35 36 39 40 42 43 44 49 50 53 55 56 58 59 60 61 63 64 65 69 71 74 76 78 79 80 81 84 88 93 95 97 99 100 101 102 108 111 112 115 116 117 119 120 121 127 129 130 131 132 136 137 139 140 141 143 145 146 149 150 152 154 156 157 159 160 161 162 166 168 171 172 173 174 177 179 180 184 186 189 191 192 196 198 199 202 204 205 206 212 213 214 218 # 10061 is_equal c a 224 1 1 f b 224 1 1 f # 10062 is_equal c a 224 1 1 f b 224 0 0 e # 10063 is_equal c a 224 1 1 f b 224 1 1 f # 10064 is_equal c a 224 1 1 f b 224 0 0 f # 10065 is_equal c a 224 1 1 f b 224 1 1 f # 10066 is_equal c a 224 1 1 f b 224 0 0 0 1 2 3 5 7 12 13 14 18 19 24 26 28 30 31 33 34 35 36 41 44 46 47 49 50 51 56 58 59 60 61 62 64 65 66 67 68 70 74 75 76 77 78 80 81 82 83 89 92 100 102 104 105 108 110 113 115 116 117 120 121 122 126 128 130 131 134 138 139 143 145 148 149 150 154 155 156 157 161 163 166 167 169 170 171 174 178 179 180 184 187 191 195 196 198 204 205 206 207 209 210 214 216 217 218 223 # 10067 is_equal c a 224 1 1 0 1 2 5 6 9 10 11 12 13 14 16 17 19 26 27 30 32 33 34 38 39 41 42 44 45 46 48 53 54 55 56 57 60 62 63 64 68 69 72 73 74 76 77 78 80 82 89 90 92 95 96 99 101 104 106 109 110 113 114 117 118 120 122 123 124 125 126 127 130 131 132 135 136 137 140 143 144 150 151 152 154 155 158 159 160 161 162 163 169 171 172 173 174 175 180 181 187 188 189 190 192 193 195 197 201 204 207 208 209 211 212 213 219 b 224 1 1 0 1 2 5 6 9 10 11 12 13 14 16 17 19 26 27 30 32 33 34 38 39 41 42 44 45 46 48 53 54 55 56 57 60 62 63 64 68 69 72 73 74 76 77 78 80 82 89 90 92 95 96 99 101 104 106 109 110 113 114 117 118 120 122 123 124 125 126 127 130 131 132 135 136 137 140 143 144 150 151 152 154 155 158 159 160 161 162 163 169 171 172 173 174 175 180 181 187 188 189 190 192 193 195 197 201 204 207 208 209 211 212 213 219 # 10068 is_equal c a 224 1 1 0 1 2 5 6 9 10 11 12 13 14 16 17 19 26 27 30 32 33 34 38 39 41 42 44 45 46 48 53 54 55 56 57 60 62 63 64 68 69 72 73 74 76 77 78 80 82 89 90 92 95 96 99 101 104 106 109 110 113 114 117 118 120 122 123 124 125 126 127 130 131 132 135 136 137 140 143 144 150 151 152 154 155 158 159 160 161 162 163 169 171 172 173 174 175 180 181 187 188 189 190 192 193 195 197 201 204 207 208 209 211 212 213 219 b 224 0 0 e # 10069 is_equal c a 224 1 1 1 6 7 11 12 13 14 15 16 18 21 22 23 25 26 27 32 34 36 37 41 44 47 48 53 54 55 56 57 58 60 61 62 63 65 68 69 70 72 73 74 75 78 79 81 83 84 87 88 91 93 94 95 96 101 102 104 108 114 116 119 120 122 123 125 126 129 130 131 132 135 136 137 139 140 142 144 145 147 149 155 156 157 158 160 161 162 163 166 168 170 171 172 173 175 176 177 181 182 183 185 188 191 194 196 197 198 199 201 202 203 204 205 206 207 208 213 214 216 218 219 220 222 b 224 1 1 1 6 7 11 12 13 14 15 16 18 21 22 23 25 26 27 32 34 36 37 41 44 47 48 53 54 55 56 57 58 60 61 62 63 65 68 69 70 72 73 74 75 78 79 81 83 84 87 88 91 93 94 95 96 101 102 104 108 114 116 119 120 122 123 125 126 129 130 131 132 135 136 137 139 140 142 144 145 147 149 155 156 157 158 160 161 162 163 166 168 170 171 172 173 175 176 177 181 182 183 185 188 191 194 196 197 198 199 201 202 203 204 205 206 207 208 213 214 216 218 219 220 222 # 10070 is_equal c a 224 1 1 1 6 7 11 12 13 14 15 16 18 21 22 23 25 26 27 32 34 36 37 41 44 47 48 53 54 55 56 57 58 60 61 62 63 65 68 69 70 72 73 74 75 78 79 81 83 84 87 88 91 93 94 95 96 101 102 104 108 114 116 119 120 122 123 125 126 129 130 131 132 135 136 137 139 140 142 144 145 147 149 155 156 157 158 160 161 162 163 166 168 170 171 172 173 175 176 177 181 182 183 185 188 191 194 196 197 198 199 201 202 203 204 205 206 207 208 213 214 216 218 219 220 222 b 224 0 0 f # 10071 is_equal c a 224 1 1 0 1 2 4 9 11 12 13 14 15 17 18 20 21 22 23 25 26 28 29 30 31 32 35 36 45 47 48 51 54 55 56 57 59 60 61 62 63 65 66 70 71 72 73 76 77 78 79 80 82 85 86 88 91 94 95 97 99 101 102 103 104 107 108 110 111 113 115 116 119 121 122 123 125 128 129 132 133 135 138 140 141 144 147 148 149 150 152 153 154 155 156 159 161 162 163 164 166 167 168 174 175 176 177 178 179 180 182 185 187 189 190 191 192 193 194 196 199 200 201 205 208 209 210 211 213 215 216 217 218 220 b 224 1 1 0 1 2 4 9 11 12 13 14 15 17 18 20 21 22 23 25 26 28 29 30 31 32 35 36 45 47 48 51 54 55 56 57 59 60 61 62 63 65 66 70 71 72 73 76 77 78 79 80 82 85 86 88 91 94 95 97 99 101 102 103 104 107 108 110 111 113 115 116 119 121 122 123 125 128 129 132 133 135 138 140 141 144 147 148 149 150 152 153 154 155 156 159 161 162 163 164 166 167 168 174 175 176 177 178 179 180 182 185 187 189 190 191 192 193 194 196 199 200 201 205 208 209 210 211 213 215 216 217 218 220 # 10072 is_equal c a 224 1 1 0 1 2 4 9 11 12 13 14 15 17 18 20 21 22 23 25 26 28 29 30 31 32 35 36 45 47 48 51 54 55 56 57 59 60 61 62 63 65 66 70 71 72 73 76 77 78 79 80 82 85 86 88 91 94 95 97 99 101 102 103 104 107 108 110 111 113 115 116 119 121 122 123 125 128 129 132 133 135 138 140 141 144 147 148 149 150 152 153 154 155 156 159 161 162 163 164 166 167 168 174 175 176 177 178 179 180 182 185 187 189 190 191 192 193 194 196 199 200 201 205 208 209 210 211 213 215 216 217 218 220 b 224 0 0 1 2 6 10 13 14 16 17 18 20 23 24 25 27 31 34 35 36 37 39 46 48 49 50 51 52 53 55 56 57 58 61 63 66 67 70 74 75 76 77 78 79 81 84 85 87 88 91 94 96 99 100 104 106 107 109 111 112 113 116 117 119 120 122 124 126 127 128 130 131 132 134 135 136 137 139 140 141 142 143 144 145 147 148 150 151 152 154 155 156 157 158 159 160 162 163 164 165 168 169 171 172 175 177 178 179 181 182 185 189 193 196 197 198 200 203 205 206 207 209 210 211 214 215 218 219 223 # 10073 is_equal c a 224 1 1 e b 224 1 1 e # 10074 is_equal c a 224 1 1 e b 224 0 1 e # 10075 is_equal c a 224 1 1 e b 224 1 1 e # 10076 is_equal c a 224 1 1 e b 224 0 1 f # 10077 is_equal c a 224 1 1 e b 224 1 1 e # 10078 is_equal c a 224 1 1 e b 224 0 1 2 3 5 7 8 9 10 15 17 18 19 21 23 24 28 29 30 31 33 34 36 39 43 44 46 47 50 51 54 56 60 66 68 70 74 76 77 81 85 86 87 92 93 102 103 104 105 110 111 113 115 116 117 118 123 125 127 129 131 133 134 135 136 137 142 143 146 152 153 155 156 157 158 161 162 163 164 165 166 167 168 170 173 175 177 178 182 189 190 191 192 193 195 198 201 203 204 205 206 207 208 209 215 216 217 220 221 222 223 # 10079 is_equal c a 224 1 1 f b 224 1 1 f # 10080 is_equal c a 224 1 1 f b 224 0 1 e # 10081 is_equal c a 224 1 1 f b 224 1 1 f # 10082 is_equal c a 224 1 1 f b 224 0 1 f # 10083 is_equal c a 224 1 1 f b 224 1 1 f # 10084 is_equal c a 224 1 1 f b 224 0 1 0 2 4 9 11 12 13 14 16 18 19 20 22 23 24 25 27 28 31 32 34 36 38 39 41 42 44 45 46 47 50 52 55 57 60 61 63 67 68 69 70 72 73 75 76 78 80 82 84 89 90 92 94 95 98 101 104 105 107 109 111 116 117 118 121 127 128 130 131 139 141 142 143 148 153 154 155 157 164 166 168 169 172 173 175 177 181 182 183 184 186 191 192 193 195 197 200 202 203 206 207 209 210 211 212 213 214 218 219 220 # 10085 is_equal c a 224 1 1 0 1 4 7 8 15 19 20 24 26 30 34 35 36 38 39 43 46 47 48 50 51 54 57 58 59 61 63 64 66 67 71 72 73 74 77 78 79 80 81 82 84 85 86 88 93 94 97 98 99 102 103 105 112 114 115 116 117 119 121 122 124 125 126 128 129 130 131 133 134 138 139 144 147 149 152 154 155 157 163 164 171 172 173 177 179 180 181 183 186 187 188 190 198 199 200 202 206 207 210 212 213 218 220 221 222 b 224 1 1 0 1 4 7 8 15 19 20 24 26 30 34 35 36 38 39 43 46 47 48 50 51 54 57 58 59 61 63 64 66 67 71 72 73 74 77 78 79 80 81 82 84 85 86 88 93 94 97 98 99 102 103 105 112 114 115 116 117 119 121 122 124 125 126 128 129 130 131 133 134 138 139 144 147 149 152 154 155 157 163 164 171 172 173 177 179 180 181 183 186 187 188 190 198 199 200 202 206 207 210 212 213 218 220 221 222 # 10086 is_equal c a 224 1 1 0 1 4 7 8 15 19 20 24 26 30 34 35 36 38 39 43 46 47 48 50 51 54 57 58 59 61 63 64 66 67 71 72 73 74 77 78 79 80 81 82 84 85 86 88 93 94 97 98 99 102 103 105 112 114 115 116 117 119 121 122 124 125 126 128 129 130 131 133 134 138 139 144 147 149 152 154 155 157 163 164 171 172 173 177 179 180 181 183 186 187 188 190 198 199 200 202 206 207 210 212 213 218 220 221 222 b 224 0 1 e # 10087 is_equal c a 224 1 1 1 2 3 5 6 9 10 11 13 14 15 16 19 21 23 26 27 29 32 33 36 37 39 40 42 43 44 46 47 48 49 50 52 55 58 59 60 63 66 67 70 72 73 75 77 78 80 81 82 83 84 85 86 89 92 94 96 97 102 104 105 106 108 109 111 114 118 122 124 125 127 128 129 132 133 135 136 139 141 142 143 144 145 150 154 158 159 160 163 165 166 172 175 176 180 181 182 187 188 190 191 192 193 194 195 196 197 199 200 203 204 205 206 207 210 211 213 215 217 219 222 223 b 224 1 1 1 2 3 5 6 9 10 11 13 14 15 16 19 21 23 26 27 29 32 33 36 37 39 40 42 43 44 46 47 48 49 50 52 55 58 59 60 63 66 67 70 72 73 75 77 78 80 81 82 83 84 85 86 89 92 94 96 97 102 104 105 106 108 109 111 114 118 122 124 125 127 128 129 132 133 135 136 139 141 142 143 144 145 150 154 158 159 160 163 165 166 172 175 176 180 181 182 187 188 190 191 192 193 194 195 196 197 199 200 203 204 205 206 207 210 211 213 215 217 219 222 223 # 10088 is_equal c a 224 1 1 1 2 3 5 6 9 10 11 13 14 15 16 19 21 23 26 27 29 32 33 36 37 39 40 42 43 44 46 47 48 49 50 52 55 58 59 60 63 66 67 70 72 73 75 77 78 80 81 82 83 84 85 86 89 92 94 96 97 102 104 105 106 108 109 111 114 118 122 124 125 127 128 129 132 133 135 136 139 141 142 143 144 145 150 154 158 159 160 163 165 166 172 175 176 180 181 182 187 188 190 191 192 193 194 195 196 197 199 200 203 204 205 206 207 210 211 213 215 217 219 222 223 b 224 0 1 f # 10089 is_equal c a 224 1 1 2 3 6 8 19 20 21 25 27 29 30 33 35 36 38 39 40 46 47 48 50 51 52 54 61 62 63 64 67 68 71 72 73 77 79 81 82 85 86 88 89 90 92 93 94 95 100 101 103 104 105 106 107 108 110 111 113 117 118 120 121 122 123 124 125 126 130 134 135 137 138 139 141 142 144 146 149 150 152 155 157 162 164 165 168 171 179 182 184 187 189 194 196 198 199 200 201 202 206 207 208 214 216 219 221 223 b 224 1 1 2 3 6 8 19 20 21 25 27 29 30 33 35 36 38 39 40 46 47 48 50 51 52 54 61 62 63 64 67 68 71 72 73 77 79 81 82 85 86 88 89 90 92 93 94 95 100 101 103 104 105 106 107 108 110 111 113 117 118 120 121 122 123 124 125 126 130 134 135 137 138 139 141 142 144 146 149 150 152 155 157 162 164 165 168 171 179 182 184 187 189 194 196 198 199 200 201 202 206 207 208 214 216 219 221 223 # 10090 is_equal c a 224 1 1 2 3 6 8 19 20 21 25 27 29 30 33 35 36 38 39 40 46 47 48 50 51 52 54 61 62 63 64 67 68 71 72 73 77 79 81 82 85 86 88 89 90 92 93 94 95 100 101 103 104 105 106 107 108 110 111 113 117 118 120 121 122 123 124 125 126 130 134 135 137 138 139 141 142 144 146 149 150 152 155 157 162 164 165 168 171 179 182 184 187 189 194 196 198 199 200 201 202 206 207 208 214 216 219 221 223 b 224 0 1 0 3 4 5 6 7 8 12 14 18 19 20 23 24 26 27 30 32 33 35 36 37 38 39 46 47 48 50 51 52 55 56 58 59 66 69 71 72 73 76 77 79 84 85 89 91 93 94 95 97 99 100 101 102 103 104 105 107 108 109 113 114 115 116 121 122 123 124 125 126 127 128 130 131 135 137 138 142 143 145 146 155 157 158 161 165 167 171 174 175 178 180 182 183 184 186 189 190 192 194 195 196 198 200 201 206 208 209 210 213 218 221 222 # 10091 is_equal c a 224 1 1 e b 224 1 1 e # 10092 is_equal c a 224 1 1 e b 224 1 0 e # 10093 is_equal c a 224 1 1 e b 224 1 1 e # 10094 is_equal c a 224 1 1 e b 224 1 0 f # 10095 is_equal c a 224 1 1 e b 224 1 1 e # 10096 is_equal c a 224 1 1 e b 224 1 0 1 5 6 8 14 17 18 19 20 23 24 31 33 34 35 36 37 39 40 41 42 45 46 47 50 52 56 57 58 62 63 64 65 66 67 68 69 71 72 75 77 78 79 82 84 86 88 90 92 93 94 95 96 97 100 101 107 111 112 116 117 118 119 121 122 125 126 128 130 133 134 135 138 139 140 142 144 146 149 151 152 154 157 159 163 166 167 168 169 170 171 172 173 175 176 182 183 184 185 187 188 189 190 192 196 198 199 201 202 205 206 210 212 213 216 217 219 # 10097 is_equal c a 224 1 1 f b 224 1 1 f # 10098 is_equal c a 224 1 1 f b 224 1 0 e # 10099 is_equal c a 224 1 1 f b 224 1 1 f # 10100 is_equal c a 224 1 1 f b 224 1 0 f # 10101 is_equal c a 224 1 1 f b 224 1 1 f # 10102 is_equal c a 224 1 1 f b 224 1 0 0 1 2 3 5 6 9 10 11 12 13 15 16 19 20 21 23 24 25 29 30 35 39 40 41 42 43 44 46 47 53 55 57 59 61 62 63 66 67 69 72 75 77 79 81 84 85 89 90 91 92 93 94 97 98 99 100 103 104 109 111 112 113 115 117 118 119 121 122 124 125 128 130 132 135 136 137 138 140 142 143 144 148 154 158 160 161 162 163 164 165 167 168 170 172 173 175 177 181 182 183 187 188 189 190 192 193 195 196 197 202 203 206 207 208 209 210 212 213 214 215 218 219 221 223 # 10103 is_equal c a 224 1 1 1 2 6 7 8 9 10 12 14 15 17 20 23 25 26 27 28 30 35 36 40 42 43 44 45 46 48 53 55 56 58 60 62 64 66 67 72 73 76 78 80 82 84 87 88 89 91 93 99 100 105 106 109 110 111 112 113 115 118 121 123 124 128 129 130 134 135 136 137 138 140 141 143 146 147 148 150 156 157 158 160 161 162 163 164 165 166 167 168 169 171 175 176 178 179 180 181 184 185 186 187 188 191 194 202 203 204 206 207 208 210 214 218 220 b 224 1 1 1 2 6 7 8 9 10 12 14 15 17 20 23 25 26 27 28 30 35 36 40 42 43 44 45 46 48 53 55 56 58 60 62 64 66 67 72 73 76 78 80 82 84 87 88 89 91 93 99 100 105 106 109 110 111 112 113 115 118 121 123 124 128 129 130 134 135 136 137 138 140 141 143 146 147 148 150 156 157 158 160 161 162 163 164 165 166 167 168 169 171 175 176 178 179 180 181 184 185 186 187 188 191 194 202 203 204 206 207 208 210 214 218 220 # 10104 is_equal c a 224 1 1 1 2 6 7 8 9 10 12 14 15 17 20 23 25 26 27 28 30 35 36 40 42 43 44 45 46 48 53 55 56 58 60 62 64 66 67 72 73 76 78 80 82 84 87 88 89 91 93 99 100 105 106 109 110 111 112 113 115 118 121 123 124 128 129 130 134 135 136 137 138 140 141 143 146 147 148 150 156 157 158 160 161 162 163 164 165 166 167 168 169 171 175 176 178 179 180 181 184 185 186 187 188 191 194 202 203 204 206 207 208 210 214 218 220 b 224 1 0 e # 10105 is_equal c a 224 1 1 1 3 5 6 7 9 16 18 19 20 24 26 27 29 31 32 33 34 37 39 40 41 42 44 47 50 52 53 55 58 59 61 62 64 66 69 70 71 72 73 75 77 79 80 82 83 88 91 93 95 97 99 100 102 103 105 108 109 111 116 117 118 125 127 128 129 131 132 137 138 139 140 141 142 146 147 149 152 153 154 156 158 164 165 167 168 170 171 173 174 176 177 181 182 184 185 186 187 189 194 195 198 199 201 202 203 204 205 207 209 210 211 212 213 215 219 220 221 b 224 1 1 1 3 5 6 7 9 16 18 19 20 24 26 27 29 31 32 33 34 37 39 40 41 42 44 47 50 52 53 55 58 59 61 62 64 66 69 70 71 72 73 75 77 79 80 82 83 88 91 93 95 97 99 100 102 103 105 108 109 111 116 117 118 125 127 128 129 131 132 137 138 139 140 141 142 146 147 149 152 153 154 156 158 164 165 167 168 170 171 173 174 176 177 181 182 184 185 186 187 189 194 195 198 199 201 202 203 204 205 207 209 210 211 212 213 215 219 220 221 # 10106 is_equal c a 224 1 1 1 3 5 6 7 9 16 18 19 20 24 26 27 29 31 32 33 34 37 39 40 41 42 44 47 50 52 53 55 58 59 61 62 64 66 69 70 71 72 73 75 77 79 80 82 83 88 91 93 95 97 99 100 102 103 105 108 109 111 116 117 118 125 127 128 129 131 132 137 138 139 140 141 142 146 147 149 152 153 154 156 158 164 165 167 168 170 171 173 174 176 177 181 182 184 185 186 187 189 194 195 198 199 201 202 203 204 205 207 209 210 211 212 213 215 219 220 221 b 224 1 0 f # 10107 is_equal c a 224 1 1 1 7 11 12 13 14 17 21 22 23 26 29 32 33 34 36 38 40 43 45 47 48 49 50 52 53 55 57 59 60 61 63 68 70 72 73 75 76 78 79 81 82 83 84 86 90 92 98 100 101 102 104 105 107 111 112 114 115 116 117 118 119 120 121 123 127 128 130 131 133 135 136 137 138 140 142 143 144 145 146 149 152 153 155 157 158 161 162 163 166 168 171 172 174 177 178 179 185 188 189 190 192 193 194 196 197 199 201 202 203 205 207 208 212 213 217 218 220 b 224 1 1 1 7 11 12 13 14 17 21 22 23 26 29 32 33 34 36 38 40 43 45 47 48 49 50 52 53 55 57 59 60 61 63 68 70 72 73 75 76 78 79 81 82 83 84 86 90 92 98 100 101 102 104 105 107 111 112 114 115 116 117 118 119 120 121 123 127 128 130 131 133 135 136 137 138 140 142 143 144 145 146 149 152 153 155 157 158 161 162 163 166 168 171 172 174 177 178 179 185 188 189 190 192 193 194 196 197 199 201 202 203 205 207 208 212 213 217 218 220 # 10108 is_equal c a 224 1 1 1 7 11 12 13 14 17 21 22 23 26 29 32 33 34 36 38 40 43 45 47 48 49 50 52 53 55 57 59 60 61 63 68 70 72 73 75 76 78 79 81 82 83 84 86 90 92 98 100 101 102 104 105 107 111 112 114 115 116 117 118 119 120 121 123 127 128 130 131 133 135 136 137 138 140 142 143 144 145 146 149 152 153 155 157 158 161 162 163 166 168 171 172 174 177 178 179 185 188 189 190 192 193 194 196 197 199 201 202 203 205 207 208 212 213 217 218 220 b 224 1 0 2 11 13 15 17 20 21 22 28 29 30 35 36 37 39 40 41 42 44 50 51 55 56 57 58 59 60 61 65 66 67 70 72 73 74 75 76 77 78 81 83 91 99 105 108 112 113 117 121 125 126 128 132 134 141 142 144 146 147 148 152 153 154 156 157 158 159 161 167 169 171 172 175 176 178 179 182 185 186 187 190 191 193 194 195 198 199 202 204 207 209 211 219 220 # 10109 is_equal c a 224 1 1 e b 224 1 1 e # 10110 is_equal c a 224 1 1 e b 224 1 1 e # 10111 is_equal c a 224 1 1 e b 224 1 1 e # 10112 is_equal c a 224 1 1 e b 224 1 1 f # 10113 is_equal c a 224 1 1 e b 224 1 1 e # 10114 is_equal c a 224 1 1 e b 224 1 1 4 8 9 10 11 15 17 18 22 23 28 29 31 33 36 37 38 39 40 41 43 45 46 48 50 52 53 57 60 61 64 65 66 67 69 72 73 75 76 77 79 85 87 89 92 95 99 100 101 102 103 104 106 107 110 111 112 114 119 122 124 128 129 130 131 132 133 135 138 141 148 149 154 156 157 160 165 167 168 169 172 174 175 176 180 181 182 184 187 189 194 195 197 198 200 201 202 203 206 208 210 211 212 214 215 216 218 221 222 223 # 10115 is_equal c a 224 1 1 f b 224 1 1 f # 10116 is_equal c a 224 1 1 f b 224 1 1 e # 10117 is_equal c a 224 1 1 f b 224 1 1 f # 10118 is_equal c a 224 1 1 f b 224 1 1 f # 10119 is_equal c a 224 1 1 f b 224 1 1 f # 10120 is_equal c a 224 1 1 f b 224 1 1 2 3 5 6 8 9 13 15 18 20 21 23 25 27 28 29 30 33 35 40 41 44 45 47 49 51 52 54 55 57 58 60 62 67 69 70 72 74 77 79 80 81 82 83 86 87 92 94 98 99 101 106 107 110 112 114 116 117 118 122 125 127 130 131 135 136 137 138 139 141 148 150 152 153 156 157 163 164 166 169 171 172 173 174 175 176 179 180 181 183 184 185 186 188 190 193 198 199 202 203 204 205 206 207 210 214 215 216 217 219 222 223 # 10121 is_equal c a 224 1 1 2 3 5 6 7 8 10 11 13 14 16 17 18 21 24 25 26 27 28 29 30 33 34 35 37 44 46 47 49 51 54 57 60 61 64 66 70 72 74 75 76 77 78 80 81 82 85 87 88 89 90 91 92 96 98 100 102 104 105 108 109 110 112 113 114 116 119 120 122 123 124 125 127 129 130 131 133 137 138 140 142 143 147 148 150 151 152 157 159 160 162 164 168 170 171 172 175 176 177 178 179 181 183 185 187 188 189 192 194 195 204 205 207 211 212 213 214 216 218 219 220 223 b 224 1 1 2 3 5 6 7 8 10 11 13 14 16 17 18 21 24 25 26 27 28 29 30 33 34 35 37 44 46 47 49 51 54 57 60 61 64 66 70 72 74 75 76 77 78 80 81 82 85 87 88 89 90 91 92 96 98 100 102 104 105 108 109 110 112 113 114 116 119 120 122 123 124 125 127 129 130 131 133 137 138 140 142 143 147 148 150 151 152 157 159 160 162 164 168 170 171 172 175 176 177 178 179 181 183 185 187 188 189 192 194 195 204 205 207 211 212 213 214 216 218 219 220 223 # 10122 is_equal c a 224 1 1 2 3 5 6 7 8 10 11 13 14 16 17 18 21 24 25 26 27 28 29 30 33 34 35 37 44 46 47 49 51 54 57 60 61 64 66 70 72 74 75 76 77 78 80 81 82 85 87 88 89 90 91 92 96 98 100 102 104 105 108 109 110 112 113 114 116 119 120 122 123 124 125 127 129 130 131 133 137 138 140 142 143 147 148 150 151 152 157 159 160 162 164 168 170 171 172 175 176 177 178 179 181 183 185 187 188 189 192 194 195 204 205 207 211 212 213 214 216 218 219 220 223 b 224 1 1 e # 10123 is_equal c a 224 1 1 0 1 2 6 7 8 9 10 12 17 18 20 21 22 23 24 25 27 29 30 31 32 33 35 37 38 40 41 42 43 44 45 46 48 49 50 52 53 55 57 58 59 61 62 64 65 68 69 71 72 74 75 77 79 80 84 85 89 91 92 93 96 98 99 102 105 106 107 110 114 116 117 118 120 123 125 129 131 134 135 136 137 142 143 150 155 158 163 169 170 173 175 179 180 184 186 187 188 189 193 195 196 197 200 202 203 204 205 206 209 210 215 216 218 219 223 b 224 1 1 0 1 2 6 7 8 9 10 12 17 18 20 21 22 23 24 25 27 29 30 31 32 33 35 37 38 40 41 42 43 44 45 46 48 49 50 52 53 55 57 58 59 61 62 64 65 68 69 71 72 74 75 77 79 80 84 85 89 91 92 93 96 98 99 102 105 106 107 110 114 116 117 118 120 123 125 129 131 134 135 136 137 142 143 150 155 158 163 169 170 173 175 179 180 184 186 187 188 189 193 195 196 197 200 202 203 204 205 206 209 210 215 216 218 219 223 # 10124 is_equal c a 224 1 1 0 1 2 6 7 8 9 10 12 17 18 20 21 22 23 24 25 27 29 30 31 32 33 35 37 38 40 41 42 43 44 45 46 48 49 50 52 53 55 57 58 59 61 62 64 65 68 69 71 72 74 75 77 79 80 84 85 89 91 92 93 96 98 99 102 105 106 107 110 114 116 117 118 120 123 125 129 131 134 135 136 137 142 143 150 155 158 163 169 170 173 175 179 180 184 186 187 188 189 193 195 196 197 200 202 203 204 205 206 209 210 215 216 218 219 223 b 224 1 1 f # 10125 is_equal c a 224 1 1 5 7 8 10 11 13 15 16 18 19 22 24 25 26 31 32 33 34 35 38 40 41 43 44 45 46 48 49 54 57 58 59 60 61 62 63 64 65 66 69 70 71 72 74 76 77 78 79 83 84 86 88 89 91 92 94 96 98 103 104 107 108 110 112 115 120 121 123 128 129 131 133 134 136 138 139 140 141 143 144 145 146 148 150 151 154 155 156 157 158 160 166 168 169 171 173 174 177 178 181 183 186 189 190 194 196 198 199 201 202 203 204 205 208 210 215 217 218 219 220 221 222 223 b 224 1 1 5 7 8 10 11 13 15 16 18 19 22 24 25 26 31 32 33 34 35 38 40 41 43 44 45 46 48 49 54 57 58 59 60 61 62 63 64 65 66 69 70 71 72 74 76 77 78 79 83 84 86 88 89 91 92 94 96 98 103 104 107 108 110 112 115 120 121 123 128 129 131 133 134 136 138 139 140 141 143 144 145 146 148 150 151 154 155 156 157 158 160 166 168 169 171 173 174 177 178 181 183 186 189 190 194 196 198 199 201 202 203 204 205 208 210 215 217 218 219 220 221 222 223 # 10126 is_equal c a 224 1 1 5 7 8 10 11 13 15 16 18 19 22 24 25 26 31 32 33 34 35 38 40 41 43 44 45 46 48 49 54 57 58 59 60 61 62 63 64 65 66 69 70 71 72 74 76 77 78 79 83 84 86 88 89 91 92 94 96 98 103 104 107 108 110 112 115 120 121 123 128 129 131 133 134 136 138 139 140 141 143 144 145 146 148 150 151 154 155 156 157 158 160 166 168 169 171 173 174 177 178 181 183 186 189 190 194 196 198 199 201 202 203 204 205 208 210 215 217 218 219 220 221 222 223 b 224 1 1 0 1 3 11 12 15 16 17 18 19 22 23 25 27 30 36 37 38 39 40 42 43 44 46 49 52 56 57 62 64 66 68 69 71 74 75 76 77 79 81 85 86 89 90 91 93 95 96 99 101 102 105 108 109 112 113 114 119 122 123 124 125 126 127 130 133 134 135 136 138 139 142 144 145 146 151 162 163 165 171 172 175 176 181 182 183 184 188 189 190 193 194 195 196 200 201 203 204 205 207 208 209 216 217 218 220 222 # 10127 is_equal c a 247 0 0 e b 247 0 0 e # 10128 is_equal c a 247 0 0 e b 247 0 0 e # 10129 is_equal c a 247 0 0 e b 247 0 0 e # 10130 is_equal c a 247 0 0 e b 247 0 0 f # 10131 is_equal c a 247 0 0 e b 247 0 0 e # 10132 is_equal c a 247 0 0 e b 247 0 0 1 3 5 8 10 11 14 17 18 19 23 25 30 31 32 34 37 39 42 43 44 46 49 50 51 52 54 59 66 67 70 71 72 75 76 78 81 85 89 91 93 95 96 97 102 103 104 106 107 108 109 112 115 117 119 120 121 125 126 128 130 131 132 133 134 137 144 145 148 149 151 153 155 160 164 166 168 172 173 174 175 176 177 179 180 182 187 189 190 192 194 195 197 200 201 202 203 204 205 207 208 209 210 213 214 216 217 220 222 223 226 227 229 232 234 239 241 244 246 # 10133 is_equal c a 247 0 0 f b 247 0 0 f # 10134 is_equal c a 247 0 0 f b 247 0 0 e # 10135 is_equal c a 247 0 0 f b 247 0 0 f # 10136 is_equal c a 247 0 0 f b 247 0 0 f # 10137 is_equal c a 247 0 0 f b 247 0 0 f # 10138 is_equal c a 247 0 0 f b 247 0 0 0 4 6 7 8 11 12 15 17 18 19 22 24 25 26 28 29 34 36 37 38 39 42 43 44 46 49 50 51 53 54 56 57 59 60 61 63 65 68 71 72 74 75 76 77 78 80 81 82 84 85 86 87 88 90 92 93 96 97 99 100 101 102 103 104 105 107 108 110 111 113 116 117 119 125 129 130 132 133 135 137 142 143 149 152 154 159 163 166 167 170 172 173 178 181 182 185 187 188 189 193 195 197 202 203 207 208 209 211 212 216 217 219 220 221 226 227 231 232 234 237 240 243 244 # 10139 is_equal c a 247 0 0 0 2 3 4 6 8 11 12 13 14 15 16 20 23 25 28 29 30 32 33 35 40 42 43 45 47 49 51 53 54 55 56 60 62 63 66 70 72 73 74 75 76 78 79 82 83 84 85 86 87 92 98 99 107 108 110 113 116 120 123 124 125 126 128 129 134 136 137 142 143 145 150 151 152 154 155 156 157 158 159 163 164 169 170 173 175 176 179 180 181 182 183 185 186 189 191 192 193 194 195 196 197 200 202 203 204 205 206 207 209 210 212 213 219 220 221 222 223 225 226 228 229 230 238 239 241 245 b 247 0 0 0 2 3 4 6 8 11 12 13 14 15 16 20 23 25 28 29 30 32 33 35 40 42 43 45 47 49 51 53 54 55 56 60 62 63 66 70 72 73 74 75 76 78 79 82 83 84 85 86 87 92 98 99 107 108 110 113 116 120 123 124 125 126 128 129 134 136 137 142 143 145 150 151 152 154 155 156 157 158 159 163 164 169 170 173 175 176 179 180 181 182 183 185 186 189 191 192 193 194 195 196 197 200 202 203 204 205 206 207 209 210 212 213 219 220 221 222 223 225 226 228 229 230 238 239 241 245 # 10140 is_equal c a 247 0 0 0 2 3 4 6 8 11 12 13 14 15 16 20 23 25 28 29 30 32 33 35 40 42 43 45 47 49 51 53 54 55 56 60 62 63 66 70 72 73 74 75 76 78 79 82 83 84 85 86 87 92 98 99 107 108 110 113 116 120 123 124 125 126 128 129 134 136 137 142 143 145 150 151 152 154 155 156 157 158 159 163 164 169 170 173 175 176 179 180 181 182 183 185 186 189 191 192 193 194 195 196 197 200 202 203 204 205 206 207 209 210 212 213 219 220 221 222 223 225 226 228 229 230 238 239 241 245 b 247 0 0 e # 10141 is_equal c a 247 0 0 0 2 3 5 6 9 10 11 13 15 17 21 24 26 28 29 30 31 33 34 37 38 39 41 43 44 45 46 47 48 53 54 57 59 60 62 64 66 71 73 74 75 76 77 78 79 86 87 90 96 98 100 102 103 104 105 106 107 109 111 113 115 116 117 118 123 124 125 127 131 134 136 137 140 141 150 151 152 155 157 158 160 161 166 170 172 173 174 178 179 180 181 182 184 188 189 190 191 192 196 200 202 203 205 207 210 211 212 215 216 217 219 220 221 222 223 226 227 228 232 233 235 236 238 239 240 242 243 244 246 b 247 0 0 0 2 3 5 6 9 10 11 13 15 17 21 24 26 28 29 30 31 33 34 37 38 39 41 43 44 45 46 47 48 53 54 57 59 60 62 64 66 71 73 74 75 76 77 78 79 86 87 90 96 98 100 102 103 104 105 106 107 109 111 113 115 116 117 118 123 124 125 127 131 134 136 137 140 141 150 151 152 155 157 158 160 161 166 170 172 173 174 178 179 180 181 182 184 188 189 190 191 192 196 200 202 203 205 207 210 211 212 215 216 217 219 220 221 222 223 226 227 228 232 233 235 236 238 239 240 242 243 244 246 # 10142 is_equal c a 247 0 0 0 2 3 5 6 9 10 11 13 15 17 21 24 26 28 29 30 31 33 34 37 38 39 41 43 44 45 46 47 48 53 54 57 59 60 62 64 66 71 73 74 75 76 77 78 79 86 87 90 96 98 100 102 103 104 105 106 107 109 111 113 115 116 117 118 123 124 125 127 131 134 136 137 140 141 150 151 152 155 157 158 160 161 166 170 172 173 174 178 179 180 181 182 184 188 189 190 191 192 196 200 202 203 205 207 210 211 212 215 216 217 219 220 221 222 223 226 227 228 232 233 235 236 238 239 240 242 243 244 246 b 247 0 0 f # 10143 is_equal c a 247 0 0 0 2 4 5 7 10 15 16 18 19 22 27 29 30 31 32 33 35 36 37 38 39 44 45 47 50 52 54 55 56 57 58 59 60 61 62 63 66 72 74 75 82 84 85 88 92 96 97 98 101 102 105 107 108 109 112 114 115 116 117 119 121 126 131 135 136 137 138 139 141 150 154 156 158 160 165 171 173 177 178 181 182 184 185 186 187 189 190 192 194 196 198 203 205 207 208 209 211 212 215 216 224 226 227 229 231 233 234 235 236 237 240 241 243 244 245 b 247 0 0 0 2 4 5 7 10 15 16 18 19 22 27 29 30 31 32 33 35 36 37 38 39 44 45 47 50 52 54 55 56 57 58 59 60 61 62 63 66 72 74 75 82 84 85 88 92 96 97 98 101 102 105 107 108 109 112 114 115 116 117 119 121 126 131 135 136 137 138 139 141 150 154 156 158 160 165 171 173 177 178 181 182 184 185 186 187 189 190 192 194 196 198 203 205 207 208 209 211 212 215 216 224 226 227 229 231 233 234 235 236 237 240 241 243 244 245 # 10144 is_equal c a 247 0 0 0 2 4 5 7 10 15 16 18 19 22 27 29 30 31 32 33 35 36 37 38 39 44 45 47 50 52 54 55 56 57 58 59 60 61 62 63 66 72 74 75 82 84 85 88 92 96 97 98 101 102 105 107 108 109 112 114 115 116 117 119 121 126 131 135 136 137 138 139 141 150 154 156 158 160 165 171 173 177 178 181 182 184 185 186 187 189 190 192 194 196 198 203 205 207 208 209 211 212 215 216 224 226 227 229 231 233 234 235 236 237 240 241 243 244 245 b 247 0 0 0 2 4 6 7 9 10 11 16 17 20 22 25 26 27 28 29 31 34 35 36 37 38 40 41 46 47 49 59 60 61 62 65 70 72 73 79 81 85 86 88 91 95 96 100 102 103 106 107 110 111 112 113 116 118 119 120 122 125 129 130 132 133 134 136 137 138 141 144 148 153 154 155 156 157 160 162 163 165 166 168 169 170 171 172 173 177 178 180 182 189 190 194 195 197 198 199 200 201 202 203 204 208 211 215 216 217 218 220 221 232 235 236 238 239 240 242 244 246 # 10145 is_equal c a 247 0 0 e b 247 0 0 e # 10146 is_equal c a 247 0 0 e b 247 0 1 e # 10147 is_equal c a 247 0 0 e b 247 0 0 e # 10148 is_equal c a 247 0 0 e b 247 0 1 f # 10149 is_equal c a 247 0 0 e b 247 0 0 e # 10150 is_equal c a 247 0 0 e b 247 0 1 2 3 5 7 8 9 10 14 15 18 19 22 23 26 29 31 37 42 43 45 47 50 52 53 58 64 65 66 67 71 73 74 75 76 78 79 80 83 85 86 89 90 92 94 95 96 97 98 101 103 104 106 107 110 112 114 117 118 120 121 122 123 124 125 127 128 133 134 137 138 139 141 142 144 145 148 150 151 152 153 155 156 157 158 159 162 165 166 167 168 169 171 177 178 180 183 185 186 187 188 189 190 191 193 195 196 198 200 204 205 206 209 210 213 216 223 224 225 226 227 229 232 233 234 235 237 238 239 241 243 244 245 # 10151 is_equal c a 247 0 0 f b 247 0 0 f # 10152 is_equal c a 247 0 0 f b 247 0 1 e # 10153 is_equal c a 247 0 0 f b 247 0 0 f # 10154 is_equal c a 247 0 0 f b 247 0 1 f # 10155 is_equal c a 247 0 0 f b 247 0 0 f # 10156 is_equal c a 247 0 0 f b 247 0 1 2 3 4 5 7 8 10 11 12 13 14 15 16 17 18 24 26 27 28 29 30 33 36 37 39 44 47 49 53 54 56 59 64 65 66 67 68 69 73 74 77 78 79 80 84 85 86 87 90 91 97 100 101 102 104 105 108 110 111 112 115 118 119 121 123 125 127 128 129 131 134 136 139 140 143 144 145 147 148 150 152 156 157 158 159 160 168 169 171 173 174 181 182 186 189 190 192 196 197 198 199 200 202 204 205 206 208 209 210 212 213 214 217 219 224 225 226 227 228 229 230 231 233 236 237 238 239 240 241 243 244 # 10157 is_equal c a 247 0 0 1 2 7 10 12 13 15 18 20 21 23 24 25 26 27 28 31 33 35 37 38 40 41 42 43 44 45 46 47 49 52 53 54 55 56 57 58 61 64 65 69 70 72 79 80 81 82 83 84 85 88 90 94 97 99 100 103 104 105 108 109 110 111 112 113 114 116 118 119 121 123 125 126 127 128 131 132 133 134 137 138 140 141 144 146 147 149 150 151 152 153 154 156 157 159 161 162 163 165 167 168 172 173 174 175 177 179 180 182 183 189 195 196 197 198 199 206 207 212 215 216 217 219 223 224 225 226 227 228 229 233 235 236 238 240 243 245 246 b 247 0 0 1 2 7 10 12 13 15 18 20 21 23 24 25 26 27 28 31 33 35 37 38 40 41 42 43 44 45 46 47 49 52 53 54 55 56 57 58 61 64 65 69 70 72 79 80 81 82 83 84 85 88 90 94 97 99 100 103 104 105 108 109 110 111 112 113 114 116 118 119 121 123 125 126 127 128 131 132 133 134 137 138 140 141 144 146 147 149 150 151 152 153 154 156 157 159 161 162 163 165 167 168 172 173 174 175 177 179 180 182 183 189 195 196 197 198 199 206 207 212 215 216 217 219 223 224 225 226 227 228 229 233 235 236 238 240 243 245 246 # 10158 is_equal c a 247 0 0 1 2 7 10 12 13 15 18 20 21 23 24 25 26 27 28 31 33 35 37 38 40 41 42 43 44 45 46 47 49 52 53 54 55 56 57 58 61 64 65 69 70 72 79 80 81 82 83 84 85 88 90 94 97 99 100 103 104 105 108 109 110 111 112 113 114 116 118 119 121 123 125 126 127 128 131 132 133 134 137 138 140 141 144 146 147 149 150 151 152 153 154 156 157 159 161 162 163 165 167 168 172 173 174 175 177 179 180 182 183 189 195 196 197 198 199 206 207 212 215 216 217 219 223 224 225 226 227 228 229 233 235 236 238 240 243 245 246 b 247 0 1 e # 10159 is_equal c a 247 0 0 2 4 6 7 9 10 11 12 13 15 21 24 26 27 28 29 36 40 43 45 46 47 48 54 56 57 58 59 63 64 65 66 67 68 71 74 75 80 81 83 88 92 95 98 101 103 105 106 107 110 112 116 119 120 121 128 129 130 132 133 136 137 142 144 145 149 152 154 155 156 157 159 160 162 163 169 170 172 174 175 179 183 184 185 186 187 188 190 191 192 193 194 195 196 201 202 206 207 208 210 211 212 214 215 217 218 228 231 235 236 238 241 246 b 247 0 0 2 4 6 7 9 10 11 12 13 15 21 24 26 27 28 29 36 40 43 45 46 47 48 54 56 57 58 59 63 64 65 66 67 68 71 74 75 80 81 83 88 92 95 98 101 103 105 106 107 110 112 116 119 120 121 128 129 130 132 133 136 137 142 144 145 149 152 154 155 156 157 159 160 162 163 169 170 172 174 175 179 183 184 185 186 187 188 190 191 192 193 194 195 196 201 202 206 207 208 210 211 212 214 215 217 218 228 231 235 236 238 241 246 # 10160 is_equal c a 247 0 0 2 4 6 7 9 10 11 12 13 15 21 24 26 27 28 29 36 40 43 45 46 47 48 54 56 57 58 59 63 64 65 66 67 68 71 74 75 80 81 83 88 92 95 98 101 103 105 106 107 110 112 116 119 120 121 128 129 130 132 133 136 137 142 144 145 149 152 154 155 156 157 159 160 162 163 169 170 172 174 175 179 183 184 185 186 187 188 190 191 192 193 194 195 196 201 202 206 207 208 210 211 212 214 215 217 218 228 231 235 236 238 241 246 b 247 0 1 f # 10161 is_equal c a 247 0 0 2 3 4 6 11 12 13 15 23 24 28 29 33 34 37 39 41 44 45 50 52 55 56 59 62 65 66 67 68 73 76 77 78 79 81 85 90 92 93 94 96 97 99 100 101 104 105 111 112 113 114 116 119 120 123 133 135 137 139 141 142 144 145 147 148 149 150 151 155 156 157 159 161 164 165 168 169 171 172 173 175 176 177 178 179 180 184 185 188 189 191 192 193 197 198 200 201 203 204 206 207 209 211 213 215 216 219 221 222 223 224 233 238 240 245 b 247 0 0 2 3 4 6 11 12 13 15 23 24 28 29 33 34 37 39 41 44 45 50 52 55 56 59 62 65 66 67 68 73 76 77 78 79 81 85 90 92 93 94 96 97 99 100 101 104 105 111 112 113 114 116 119 120 123 133 135 137 139 141 142 144 145 147 148 149 150 151 155 156 157 159 161 164 165 168 169 171 172 173 175 176 177 178 179 180 184 185 188 189 191 192 193 197 198 200 201 203 204 206 207 209 211 213 215 216 219 221 222 223 224 233 238 240 245 # 10162 is_equal c a 247 0 0 2 3 4 6 11 12 13 15 23 24 28 29 33 34 37 39 41 44 45 50 52 55 56 59 62 65 66 67 68 73 76 77 78 79 81 85 90 92 93 94 96 97 99 100 101 104 105 111 112 113 114 116 119 120 123 133 135 137 139 141 142 144 145 147 148 149 150 151 155 156 157 159 161 164 165 168 169 171 172 173 175 176 177 178 179 180 184 185 188 189 191 192 193 197 198 200 201 203 204 206 207 209 211 213 215 216 219 221 222 223 224 233 238 240 245 b 247 0 1 2 5 6 10 11 15 17 18 19 22 23 28 29 30 35 39 40 45 46 47 48 49 50 51 54 56 57 58 60 61 62 66 68 73 74 75 77 78 80 81 83 85 87 88 91 98 102 103 104 106 109 110 111 112 113 114 115 116 118 119 120 122 124 126 129 131 132 134 135 136 137 139 140 142 143 145 146 149 154 155 159 161 162 164 165 167 168 169 170 171 172 173 174 176 181 182 184 188 189 197 201 204 206 208 210 211 212 215 216 217 219 220 221 225 226 227 229 231 232 233 235 239 241 242 # 10163 is_equal c a 247 0 0 e b 247 0 0 e # 10164 is_equal c a 247 0 0 e b 247 1 0 e # 10165 is_equal c a 247 0 0 e b 247 0 0 e # 10166 is_equal c a 247 0 0 e b 247 1 0 f # 10167 is_equal c a 247 0 0 e b 247 0 0 e # 10168 is_equal c a 247 0 0 e b 247 1 0 2 5 6 12 14 15 17 19 21 27 28 29 34 38 39 40 43 46 47 50 53 54 57 59 60 63 64 65 67 70 72 73 78 80 81 82 84 85 86 87 88 89 90 97 99 101 104 105 110 113 115 118 121 122 123 126 131 134 140 142 144 150 151 156 158 159 160 162 163 164 165 167 169 172 175 177 179 180 182 184 186 188 189 192 195 196 197 198 205 207 208 209 210 211 213 214 215 216 217 219 221 225 229 231 233 235 236 237 238 239 240 241 # 10169 is_equal c a 247 0 0 f b 247 0 0 f # 10170 is_equal c a 247 0 0 f b 247 1 0 e # 10171 is_equal c a 247 0 0 f b 247 0 0 f # 10172 is_equal c a 247 0 0 f b 247 1 0 f # 10173 is_equal c a 247 0 0 f b 247 0 0 f # 10174 is_equal c a 247 0 0 f b 247 1 0 2 4 5 8 12 14 15 16 17 20 25 26 30 31 32 37 38 40 43 44 48 49 50 51 52 58 59 60 62 64 65 66 68 69 71 72 73 75 77 80 82 83 86 87 89 94 97 99 101 102 104 111 112 114 116 117 118 123 124 126 127 128 130 133 134 136 138 140 144 145 146 148 149 150 154 155 157 158 161 162 163 164 165 167 170 171 178 179 180 184 190 191 193 194 195 196 198 199 201 202 203 204 208 209 211 214 216 219 222 223 224 226 227 228 230 233 239 241 242 243 245 # 10175 is_equal c a 247 0 0 0 1 2 3 5 6 8 10 11 12 16 19 21 29 30 32 38 41 45 46 47 48 50 54 55 56 61 62 66 67 71 73 82 83 84 85 87 89 90 92 93 94 96 100 101 105 106 107 111 112 115 117 119 120 125 126 129 130 132 134 140 141 145 147 148 149 153 154 156 157 158 160 162 164 166 167 168 169 171 172 173 175 178 182 184 185 186 187 189 190 193 194 195 198 202 207 208 209 210 211 213 218 219 221 224 225 227 231 232 238 241 243 244 245 246 b 247 0 0 0 1 2 3 5 6 8 10 11 12 16 19 21 29 30 32 38 41 45 46 47 48 50 54 55 56 61 62 66 67 71 73 82 83 84 85 87 89 90 92 93 94 96 100 101 105 106 107 111 112 115 117 119 120 125 126 129 130 132 134 140 141 145 147 148 149 153 154 156 157 158 160 162 164 166 167 168 169 171 172 173 175 178 182 184 185 186 187 189 190 193 194 195 198 202 207 208 209 210 211 213 218 219 221 224 225 227 231 232 238 241 243 244 245 246 # 10176 is_equal c a 247 0 0 0 1 2 3 5 6 8 10 11 12 16 19 21 29 30 32 38 41 45 46 47 48 50 54 55 56 61 62 66 67 71 73 82 83 84 85 87 89 90 92 93 94 96 100 101 105 106 107 111 112 115 117 119 120 125 126 129 130 132 134 140 141 145 147 148 149 153 154 156 157 158 160 162 164 166 167 168 169 171 172 173 175 178 182 184 185 186 187 189 190 193 194 195 198 202 207 208 209 210 211 213 218 219 221 224 225 227 231 232 238 241 243 244 245 246 b 247 1 0 e # 10177 is_equal c a 247 0 0 2 5 7 8 11 12 13 14 15 16 20 21 23 27 28 29 30 33 35 36 37 38 39 48 49 53 55 56 57 58 59 60 61 63 64 65 66 67 68 72 73 74 75 80 81 82 88 89 91 92 93 94 100 101 103 104 106 109 112 114 118 123 124 125 129 130 137 139 140 141 143 146 147 148 149 151 152 154 155 159 163 165 166 167 168 170 171 175 176 179 181 182 185 187 189 190 192 196 199 200 204 205 206 207 210 211 214 220 221 222 223 229 230 239 240 242 244 245 246 b 247 0 0 2 5 7 8 11 12 13 14 15 16 20 21 23 27 28 29 30 33 35 36 37 38 39 48 49 53 55 56 57 58 59 60 61 63 64 65 66 67 68 72 73 74 75 80 81 82 88 89 91 92 93 94 100 101 103 104 106 109 112 114 118 123 124 125 129 130 137 139 140 141 143 146 147 148 149 151 152 154 155 159 163 165 166 167 168 170 171 175 176 179 181 182 185 187 189 190 192 196 199 200 204 205 206 207 210 211 214 220 221 222 223 229 230 239 240 242 244 245 246 # 10178 is_equal c a 247 0 0 2 5 7 8 11 12 13 14 15 16 20 21 23 27 28 29 30 33 35 36 37 38 39 48 49 53 55 56 57 58 59 60 61 63 64 65 66 67 68 72 73 74 75 80 81 82 88 89 91 92 93 94 100 101 103 104 106 109 112 114 118 123 124 125 129 130 137 139 140 141 143 146 147 148 149 151 152 154 155 159 163 165 166 167 168 170 171 175 176 179 181 182 185 187 189 190 192 196 199 200 204 205 206 207 210 211 214 220 221 222 223 229 230 239 240 242 244 245 246 b 247 1 0 f # 10179 is_equal c a 247 0 0 0 1 2 4 5 7 9 16 17 18 22 27 28 29 31 32 35 37 38 39 40 43 44 45 47 48 52 54 56 57 59 60 61 62 63 66 67 69 71 73 74 80 81 83 89 90 93 95 96 101 103 104 108 109 111 112 113 114 120 122 125 129 132 133 136 138 139 143 149 150 153 154 156 158 159 160 163 164 165 167 169 170 177 178 179 181 183 184 188 189 191 193 196 197 199 200 201 203 205 207 208 210 214 216 218 225 226 227 229 230 232 237 238 241 243 244 246 b 247 0 0 0 1 2 4 5 7 9 16 17 18 22 27 28 29 31 32 35 37 38 39 40 43 44 45 47 48 52 54 56 57 59 60 61 62 63 66 67 69 71 73 74 80 81 83 89 90 93 95 96 101 103 104 108 109 111 112 113 114 120 122 125 129 132 133 136 138 139 143 149 150 153 154 156 158 159 160 163 164 165 167 169 170 177 178 179 181 183 184 188 189 191 193 196 197 199 200 201 203 205 207 208 210 214 216 218 225 226 227 229 230 232 237 238 241 243 244 246 # 10180 is_equal c a 247 0 0 0 1 2 4 5 7 9 16 17 18 22 27 28 29 31 32 35 37 38 39 40 43 44 45 47 48 52 54 56 57 59 60 61 62 63 66 67 69 71 73 74 80 81 83 89 90 93 95 96 101 103 104 108 109 111 112 113 114 120 122 125 129 132 133 136 138 139 143 149 150 153 154 156 158 159 160 163 164 165 167 169 170 177 178 179 181 183 184 188 189 191 193 196 197 199 200 201 203 205 207 208 210 214 216 218 225 226 227 229 230 232 237 238 241 243 244 246 b 247 1 0 0 1 2 4 5 12 15 17 21 26 27 30 31 33 36 37 38 39 40 41 43 46 49 50 52 54 56 57 59 62 63 64 66 67 68 69 70 71 72 73 74 75 79 84 86 87 89 90 91 93 96 98 99 101 102 103 104 105 106 110 111 112 115 117 118 119 120 125 131 134 135 136 137 142 147 149 150 155 157 158 159 163 166 168 169 170 173 175 176 177 178 180 184 185 186 187 188 189 190 195 197 200 201 202 204 206 207 208 209 210 211 214 215 217 218 220 221 222 224 226 230 233 235 236 238 239 241 242 245 # 10181 is_equal c a 247 0 0 e b 247 0 0 e # 10182 is_equal c a 247 0 0 e b 247 1 1 e # 10183 is_equal c a 247 0 0 e b 247 0 0 e # 10184 is_equal c a 247 0 0 e b 247 1 1 f # 10185 is_equal c a 247 0 0 e b 247 0 0 e # 10186 is_equal c a 247 0 0 e b 247 1 1 0 1 4 7 10 11 12 14 15 21 25 27 29 31 32 33 36 40 42 43 44 45 46 50 51 53 56 66 68 71 72 74 78 80 83 88 89 90 93 94 98 100 104 106 107 108 109 113 115 117 120 121 122 123 124 128 130 131 136 140 141 142 146 147 150 153 157 158 160 161 162 166 167 169 172 174 176 177 178 180 181 182 184 185 187 188 191 192 197 199 200 201 203 206 208 209 210 211 212 215 217 218 220 221 222 223 227 230 234 237 238 240 243 244 245 246 # 10187 is_equal c a 247 0 0 f b 247 0 0 f # 10188 is_equal c a 247 0 0 f b 247 1 1 e # 10189 is_equal c a 247 0 0 f b 247 0 0 f # 10190 is_equal c a 247 0 0 f b 247 1 1 f # 10191 is_equal c a 247 0 0 f b 247 0 0 f # 10192 is_equal c a 247 0 0 f b 247 1 1 3 6 8 9 10 19 20 22 26 29 31 33 35 39 41 45 46 47 50 52 54 56 57 58 59 62 63 64 69 71 72 73 75 78 79 80 82 83 84 85 87 90 91 94 96 98 100 101 102 103 104 106 110 112 113 114 115 116 118 123 124 125 127 130 133 134 135 137 139 142 145 147 149 151 154 159 162 163 165 166 168 169 171 181 183 185 187 189 191 192 198 201 206 208 210 217 220 221 223 225 226 227 228 229 230 232 234 235 236 237 239 244 245 246 # 10193 is_equal c a 247 0 0 0 1 5 6 11 13 14 15 16 19 20 23 25 26 27 29 30 34 35 37 43 48 49 50 51 55 56 58 61 62 63 64 65 66 68 69 70 71 74 75 76 85 89 90 92 93 95 96 97 98 99 100 101 102 104 107 108 109 111 112 117 118 120 121 122 124 127 130 132 134 135 136 138 139 140 141 142 143 147 148 151 159 160 162 163 164 165 166 167 168 171 174 175 178 180 181 186 187 188 191 192 200 201 204 208 209 210 211 212 216 218 219 220 224 225 226 231 232 233 235 236 239 244 245 246 b 247 0 0 0 1 5 6 11 13 14 15 16 19 20 23 25 26 27 29 30 34 35 37 43 48 49 50 51 55 56 58 61 62 63 64 65 66 68 69 70 71 74 75 76 85 89 90 92 93 95 96 97 98 99 100 101 102 104 107 108 109 111 112 117 118 120 121 122 124 127 130 132 134 135 136 138 139 140 141 142 143 147 148 151 159 160 162 163 164 165 166 167 168 171 174 175 178 180 181 186 187 188 191 192 200 201 204 208 209 210 211 212 216 218 219 220 224 225 226 231 232 233 235 236 239 244 245 246 # 10194 is_equal c a 247 0 0 0 1 5 6 11 13 14 15 16 19 20 23 25 26 27 29 30 34 35 37 43 48 49 50 51 55 56 58 61 62 63 64 65 66 68 69 70 71 74 75 76 85 89 90 92 93 95 96 97 98 99 100 101 102 104 107 108 109 111 112 117 118 120 121 122 124 127 130 132 134 135 136 138 139 140 141 142 143 147 148 151 159 160 162 163 164 165 166 167 168 171 174 175 178 180 181 186 187 188 191 192 200 201 204 208 209 210 211 212 216 218 219 220 224 225 226 231 232 233 235 236 239 244 245 246 b 247 1 1 e # 10195 is_equal c a 247 0 0 1 2 4 6 9 12 14 15 17 20 21 22 26 27 29 31 32 34 37 38 39 41 47 48 49 51 55 56 60 61 62 63 65 67 68 69 72 73 74 76 79 80 81 82 85 89 90 92 93 94 95 96 98 102 104 106 107 108 110 111 113 115 116 119 121 123 124 126 129 130 131 132 133 134 135 137 138 139 140 141 142 144 145 146 151 153 154 155 156 157 168 171 178 179 183 184 186 187 188 192 193 194 195 196 199 200 201 202 206 211 212 213 214 215 216 218 219 220 224 227 228 229 230 231 232 233 238 239 240 241 242 244 b 247 0 0 1 2 4 6 9 12 14 15 17 20 21 22 26 27 29 31 32 34 37 38 39 41 47 48 49 51 55 56 60 61 62 63 65 67 68 69 72 73 74 76 79 80 81 82 85 89 90 92 93 94 95 96 98 102 104 106 107 108 110 111 113 115 116 119 121 123 124 126 129 130 131 132 133 134 135 137 138 139 140 141 142 144 145 146 151 153 154 155 156 157 168 171 178 179 183 184 186 187 188 192 193 194 195 196 199 200 201 202 206 211 212 213 214 215 216 218 219 220 224 227 228 229 230 231 232 233 238 239 240 241 242 244 # 10196 is_equal c a 247 0 0 1 2 4 6 9 12 14 15 17 20 21 22 26 27 29 31 32 34 37 38 39 41 47 48 49 51 55 56 60 61 62 63 65 67 68 69 72 73 74 76 79 80 81 82 85 89 90 92 93 94 95 96 98 102 104 106 107 108 110 111 113 115 116 119 121 123 124 126 129 130 131 132 133 134 135 137 138 139 140 141 142 144 145 146 151 153 154 155 156 157 168 171 178 179 183 184 186 187 188 192 193 194 195 196 199 200 201 202 206 211 212 213 214 215 216 218 219 220 224 227 228 229 230 231 232 233 238 239 240 241 242 244 b 247 1 1 f # 10197 is_equal c a 247 0 0 0 1 2 3 4 9 10 12 13 15 16 19 22 25 26 27 30 33 34 40 42 43 44 45 47 49 50 51 54 57 59 62 63 65 69 70 72 73 74 75 76 78 79 82 84 85 86 88 90 93 95 96 104 107 108 109 110 114 117 118 119 120 121 124 127 128 130 132 135 136 137 139 140 144 145 146 147 148 150 151 155 156 158 159 160 161 162 163 169 171 175 177 178 181 182 183 186 187 188 190 191 193 197 198 200 201 205 207 208 214 217 222 224 226 229 230 232 234 236 237 239 242 244 245 246 b 247 0 0 0 1 2 3 4 9 10 12 13 15 16 19 22 25 26 27 30 33 34 40 42 43 44 45 47 49 50 51 54 57 59 62 63 65 69 70 72 73 74 75 76 78 79 82 84 85 86 88 90 93 95 96 104 107 108 109 110 114 117 118 119 120 121 124 127 128 130 132 135 136 137 139 140 144 145 146 147 148 150 151 155 156 158 159 160 161 162 163 169 171 175 177 178 181 182 183 186 187 188 190 191 193 197 198 200 201 205 207 208 214 217 222 224 226 229 230 232 234 236 237 239 242 244 245 246 # 10198 is_equal c a 247 0 0 0 1 2 3 4 9 10 12 13 15 16 19 22 25 26 27 30 33 34 40 42 43 44 45 47 49 50 51 54 57 59 62 63 65 69 70 72 73 74 75 76 78 79 82 84 85 86 88 90 93 95 96 104 107 108 109 110 114 117 118 119 120 121 124 127 128 130 132 135 136 137 139 140 144 145 146 147 148 150 151 155 156 158 159 160 161 162 163 169 171 175 177 178 181 182 183 186 187 188 190 191 193 197 198 200 201 205 207 208 214 217 222 224 226 229 230 232 234 236 237 239 242 244 245 246 b 247 1 1 1 4 5 8 9 11 14 15 16 17 18 20 21 23 24 25 26 28 29 31 33 36 37 38 40 44 47 50 52 54 55 57 61 63 64 65 67 68 71 72 73 75 76 77 80 83 84 86 90 91 93 94 96 100 103 109 113 118 119 120 121 124 126 129 130 134 135 136 138 139 143 147 148 150 154 155 159 163 164 166 168 169 173 175 177 178 179 184 188 189 196 197 198 200 202 203 204 205 206 208 211 212 213 215 216 217 218 219 220 222 224 226 230 231 232 233 234 235 236 237 238 244 245 246 # 10199 is_equal c a 247 0 1 e b 247 0 1 e # 10200 is_equal c a 247 0 1 e b 247 0 0 e # 10201 is_equal c a 247 0 1 e b 247 0 1 e # 10202 is_equal c a 247 0 1 e b 247 0 0 f # 10203 is_equal c a 247 0 1 e b 247 0 1 e # 10204 is_equal c a 247 0 1 e b 247 0 0 0 1 2 3 4 6 8 9 13 20 21 26 29 32 35 36 37 39 40 41 45 47 48 49 51 52 55 56 61 62 69 70 72 76 77 79 80 82 84 87 88 89 92 94 96 98 99 101 104 105 107 108 109 110 113 114 121 122 125 126 127 129 130 131 136 137 139 143 146 147 148 152 154 157 159 162 163 168 169 175 176 178 182 184 186 189 191 194 195 196 199 203 204 206 207 208 209 213 214 218 219 223 224 229 231 236 238 239 240 242 245 # 10205 is_equal c a 247 0 1 f b 247 0 1 f # 10206 is_equal c a 247 0 1 f b 247 0 0 e # 10207 is_equal c a 247 0 1 f b 247 0 1 f # 10208 is_equal c a 247 0 1 f b 247 0 0 f # 10209 is_equal c a 247 0 1 f b 247 0 1 f # 10210 is_equal c a 247 0 1 f b 247 0 0 0 4 6 10 11 12 13 14 16 18 28 29 30 34 35 36 37 39 42 43 45 51 52 53 54 55 59 64 69 71 74 75 76 78 80 82 85 89 93 94 98 99 102 103 106 108 109 110 113 114 116 118 119 123 127 128 129 130 133 135 139 140 141 144 146 148 149 153 155 157 158 160 161 162 163 166 167 168 169 170 171 172 174 175 176 177 179 181 183 184 185 190 192 193 197 199 200 201 202 203 205 206 207 209 210 211 212 213 214 216 218 225 226 228 231 234 236 246 # 10211 is_equal c a 247 0 1 0 4 5 6 11 13 15 16 18 22 23 24 27 29 30 34 38 40 44 47 48 49 55 56 57 58 60 61 62 63 64 68 69 70 71 73 81 82 83 86 87 89 93 98 103 105 106 107 111 112 116 120 122 125 126 127 129 131 133 134 135 136 137 138 139 140 142 143 144 147 152 153 154 156 157 160 161 163 164 166 167 168 170 171 172 174 176 180 182 183 185 188 189 190 192 195 196 199 200 202 204 205 206 208 210 211 212 217 218 219 221 225 226 227 230 231 232 238 240 241 242 246 b 247 0 1 0 4 5 6 11 13 15 16 18 22 23 24 27 29 30 34 38 40 44 47 48 49 55 56 57 58 60 61 62 63 64 68 69 70 71 73 81 82 83 86 87 89 93 98 103 105 106 107 111 112 116 120 122 125 126 127 129 131 133 134 135 136 137 138 139 140 142 143 144 147 152 153 154 156 157 160 161 163 164 166 167 168 170 171 172 174 176 180 182 183 185 188 189 190 192 195 196 199 200 202 204 205 206 208 210 211 212 217 218 219 221 225 226 227 230 231 232 238 240 241 242 246 # 10212 is_equal c a 247 0 1 0 4 5 6 11 13 15 16 18 22 23 24 27 29 30 34 38 40 44 47 48 49 55 56 57 58 60 61 62 63 64 68 69 70 71 73 81 82 83 86 87 89 93 98 103 105 106 107 111 112 116 120 122 125 126 127 129 131 133 134 135 136 137 138 139 140 142 143 144 147 152 153 154 156 157 160 161 163 164 166 167 168 170 171 172 174 176 180 182 183 185 188 189 190 192 195 196 199 200 202 204 205 206 208 210 211 212 217 218 219 221 225 226 227 230 231 232 238 240 241 242 246 b 247 0 0 e # 10213 is_equal c a 247 0 1 4 6 7 9 10 17 18 19 20 22 24 28 29 32 33 34 35 36 37 38 40 41 42 43 48 49 51 53 58 61 64 66 67 68 69 71 74 75 77 80 85 87 93 94 95 96 97 98 99 101 102 103 106 107 109 113 114 115 118 119 123 124 125 126 127 128 130 133 135 137 139 140 141 145 147 150 151 152 153 155 156 158 159 160 161 162 166 167 173 174 175 176 178 179 180 182 189 192 198 199 200 202 205 206 207 208 209 210 211 213 215 216 222 224 228 230 231 232 233 234 236 237 239 240 243 244 245 246 b 247 0 1 4 6 7 9 10 17 18 19 20 22 24 28 29 32 33 34 35 36 37 38 40 41 42 43 48 49 51 53 58 61 64 66 67 68 69 71 74 75 77 80 85 87 93 94 95 96 97 98 99 101 102 103 106 107 109 113 114 115 118 119 123 124 125 126 127 128 130 133 135 137 139 140 141 145 147 150 151 152 153 155 156 158 159 160 161 162 166 167 173 174 175 176 178 179 180 182 189 192 198 199 200 202 205 206 207 208 209 210 211 213 215 216 222 224 228 230 231 232 233 234 236 237 239 240 243 244 245 246 # 10214 is_equal c a 247 0 1 4 6 7 9 10 17 18 19 20 22 24 28 29 32 33 34 35 36 37 38 40 41 42 43 48 49 51 53 58 61 64 66 67 68 69 71 74 75 77 80 85 87 93 94 95 96 97 98 99 101 102 103 106 107 109 113 114 115 118 119 123 124 125 126 127 128 130 133 135 137 139 140 141 145 147 150 151 152 153 155 156 158 159 160 161 162 166 167 173 174 175 176 178 179 180 182 189 192 198 199 200 202 205 206 207 208 209 210 211 213 215 216 222 224 228 230 231 232 233 234 236 237 239 240 243 244 245 246 b 247 0 0 f # 10215 is_equal c a 247 0 1 0 2 4 7 13 15 16 18 21 23 24 25 27 28 31 36 40 41 42 44 47 48 50 51 54 55 58 59 60 62 64 65 67 69 70 73 74 76 77 78 79 81 82 85 87 90 91 97 98 99 101 103 104 107 114 115 116 120 124 131 133 134 136 137 138 142 144 145 147 149 150 151 152 155 156 157 158 159 162 163 164 166 167 169 171 173 176 178 179 181 182 186 187 188 189 190 193 194 197 199 200 205 206 209 212 214 215 217 218 220 221 222 223 224 225 227 228 230 231 232 236 237 238 240 241 242 b 247 0 1 0 2 4 7 13 15 16 18 21 23 24 25 27 28 31 36 40 41 42 44 47 48 50 51 54 55 58 59 60 62 64 65 67 69 70 73 74 76 77 78 79 81 82 85 87 90 91 97 98 99 101 103 104 107 114 115 116 120 124 131 133 134 136 137 138 142 144 145 147 149 150 151 152 155 156 157 158 159 162 163 164 166 167 169 171 173 176 178 179 181 182 186 187 188 189 190 193 194 197 199 200 205 206 209 212 214 215 217 218 220 221 222 223 224 225 227 228 230 231 232 236 237 238 240 241 242 # 10216 is_equal c a 247 0 1 0 2 4 7 13 15 16 18 21 23 24 25 27 28 31 36 40 41 42 44 47 48 50 51 54 55 58 59 60 62 64 65 67 69 70 73 74 76 77 78 79 81 82 85 87 90 91 97 98 99 101 103 104 107 114 115 116 120 124 131 133 134 136 137 138 142 144 145 147 149 150 151 152 155 156 157 158 159 162 163 164 166 167 169 171 173 176 178 179 181 182 186 187 188 189 190 193 194 197 199 200 205 206 209 212 214 215 217 218 220 221 222 223 224 225 227 228 230 231 232 236 237 238 240 241 242 b 247 0 0 0 4 6 7 9 13 14 16 22 25 27 29 31 32 33 35 38 40 42 44 45 46 47 48 50 52 53 54 55 56 57 58 60 61 63 64 66 67 68 69 71 72 75 76 77 78 79 81 83 84 85 86 87 88 89 90 91 92 96 100 101 103 106 109 111 114 117 118 121 125 126 127 128 131 133 134 137 138 139 140 141 147 148 153 154 155 158 160 163 164 170 175 176 177 178 179 183 184 185 186 190 192 195 196 197 198 200 201 202 206 209 210 211 212 214 215 219 220 222 223 224 227 228 231 235 239 240 243 246 # 10217 is_equal c a 247 0 1 e b 247 0 1 e # 10218 is_equal c a 247 0 1 e b 247 0 1 e # 10219 is_equal c a 247 0 1 e b 247 0 1 e # 10220 is_equal c a 247 0 1 e b 247 0 1 f # 10221 is_equal c a 247 0 1 e b 247 0 1 e # 10222 is_equal c a 247 0 1 e b 247 0 1 0 1 4 5 8 9 10 11 12 15 16 17 18 19 23 28 29 31 33 36 37 38 39 41 42 46 48 49 56 57 58 59 61 62 63 64 65 68 69 72 73 75 83 84 85 87 89 90 91 92 93 94 95 96 102 103 106 107 108 110 112 114 115 118 119 121 122 125 126 128 130 132 136 138 141 142 145 146 147 148 149 155 156 159 160 161 166 168 169 170 172 178 183 184 185 186 187 189 190 192 193 194 198 203 204 205 211 212 213 216 221 222 224 226 228 230 232 235 239 240 241 244 245 246 # 10223 is_equal c a 247 0 1 f b 247 0 1 f # 10224 is_equal c a 247 0 1 f b 247 0 1 e # 10225 is_equal c a 247 0 1 f b 247 0 1 f # 10226 is_equal c a 247 0 1 f b 247 0 1 f # 10227 is_equal c a 247 0 1 f b 247 0 1 f # 10228 is_equal c a 247 0 1 f b 247 0 1 0 6 7 11 13 15 16 17 18 19 20 23 25 27 28 30 33 34 35 37 38 43 45 52 58 60 61 62 64 67 69 73 77 78 79 81 85 87 91 93 95 98 99 103 107 109 110 112 114 116 120 121 123 124 126 128 129 130 135 136 139 146 150 153 155 162 163 168 169 173 174 175 176 177 181 182 184 185 189 190 192 193 197 198 199 200 201 203 204 205 206 207 208 209 211 212 213 215 216 217 220 222 223 225 227 228 229 230 232 233 235 236 239 241 242 244 # 10229 is_equal c a 247 0 1 0 2 3 4 6 7 8 9 10 13 15 16 19 21 23 24 25 26 28 29 38 40 41 42 44 45 47 49 50 52 53 55 56 58 59 64 65 66 68 69 71 72 75 77 78 80 82 83 88 91 92 95 98 100 103 104 105 107 108 111 112 116 117 118 119 121 122 127 130 132 136 137 139 140 141 143 145 146 148 149 152 153 154 158 159 161 166 170 174 175 177 180 182 185 186 187 189 191 192 193 194 195 197 200 202 204 205 206 208 210 212 213 214 216 217 218 219 222 225 230 232 233 234 237 238 240 242 243 245 246 b 247 0 1 0 2 3 4 6 7 8 9 10 13 15 16 19 21 23 24 25 26 28 29 38 40 41 42 44 45 47 49 50 52 53 55 56 58 59 64 65 66 68 69 71 72 75 77 78 80 82 83 88 91 92 95 98 100 103 104 105 107 108 111 112 116 117 118 119 121 122 127 130 132 136 137 139 140 141 143 145 146 148 149 152 153 154 158 159 161 166 170 174 175 177 180 182 185 186 187 189 191 192 193 194 195 197 200 202 204 205 206 208 210 212 213 214 216 217 218 219 222 225 230 232 233 234 237 238 240 242 243 245 246 # 10230 is_equal c a 247 0 1 0 2 3 4 6 7 8 9 10 13 15 16 19 21 23 24 25 26 28 29 38 40 41 42 44 45 47 49 50 52 53 55 56 58 59 64 65 66 68 69 71 72 75 77 78 80 82 83 88 91 92 95 98 100 103 104 105 107 108 111 112 116 117 118 119 121 122 127 130 132 136 137 139 140 141 143 145 146 148 149 152 153 154 158 159 161 166 170 174 175 177 180 182 185 186 187 189 191 192 193 194 195 197 200 202 204 205 206 208 210 212 213 214 216 217 218 219 222 225 230 232 233 234 237 238 240 242 243 245 246 b 247 0 1 e # 10231 is_equal c a 247 0 1 0 2 3 4 6 8 12 13 16 17 21 22 23 24 27 28 30 31 32 33 34 35 38 39 40 43 49 51 52 54 55 56 59 64 66 68 69 71 74 75 76 80 81 83 89 90 91 96 101 103 105 106 109 110 112 114 115 119 122 123 124 126 130 131 138 142 143 144 145 146 151 158 159 160 161 162 164 166 170 171 172 174 175 177 178 180 185 186 187 190 193 196 200 203 204 205 207 208 211 212 213 217 219 222 223 224 226 227 228 232 233 236 237 241 243 244 b 247 0 1 0 2 3 4 6 8 12 13 16 17 21 22 23 24 27 28 30 31 32 33 34 35 38 39 40 43 49 51 52 54 55 56 59 64 66 68 69 71 74 75 76 80 81 83 89 90 91 96 101 103 105 106 109 110 112 114 115 119 122 123 124 126 130 131 138 142 143 144 145 146 151 158 159 160 161 162 164 166 170 171 172 174 175 177 178 180 185 186 187 190 193 196 200 203 204 205 207 208 211 212 213 217 219 222 223 224 226 227 228 232 233 236 237 241 243 244 # 10232 is_equal c a 247 0 1 0 2 3 4 6 8 12 13 16 17 21 22 23 24 27 28 30 31 32 33 34 35 38 39 40 43 49 51 52 54 55 56 59 64 66 68 69 71 74 75 76 80 81 83 89 90 91 96 101 103 105 106 109 110 112 114 115 119 122 123 124 126 130 131 138 142 143 144 145 146 151 158 159 160 161 162 164 166 170 171 172 174 175 177 178 180 185 186 187 190 193 196 200 203 204 205 207 208 211 212 213 217 219 222 223 224 226 227 228 232 233 236 237 241 243 244 b 247 0 1 f # 10233 is_equal c a 247 0 1 3 4 5 6 7 8 10 11 15 16 17 18 20 21 22 24 25 27 28 29 31 33 34 37 41 42 43 50 51 53 56 57 60 66 67 69 70 71 72 73 74 80 83 84 85 87 92 93 98 99 101 102 104 108 109 110 116 117 118 122 124 130 131 133 134 138 139 143 144 145 146 147 148 149 151 153 157 159 163 168 169 173 176 178 179 182 185 186 188 191 192 193 194 195 197 200 201 202 204 205 206 207 209 210 212 214 217 218 220 221 223 224 225 226 227 228 231 233 236 240 241 242 243 245 b 247 0 1 3 4 5 6 7 8 10 11 15 16 17 18 20 21 22 24 25 27 28 29 31 33 34 37 41 42 43 50 51 53 56 57 60 66 67 69 70 71 72 73 74 80 83 84 85 87 92 93 98 99 101 102 104 108 109 110 116 117 118 122 124 130 131 133 134 138 139 143 144 145 146 147 148 149 151 153 157 159 163 168 169 173 176 178 179 182 185 186 188 191 192 193 194 195 197 200 201 202 204 205 206 207 209 210 212 214 217 218 220 221 223 224 225 226 227 228 231 233 236 240 241 242 243 245 # 10234 is_equal c a 247 0 1 3 4 5 6 7 8 10 11 15 16 17 18 20 21 22 24 25 27 28 29 31 33 34 37 41 42 43 50 51 53 56 57 60 66 67 69 70 71 72 73 74 80 83 84 85 87 92 93 98 99 101 102 104 108 109 110 116 117 118 122 124 130 131 133 134 138 139 143 144 145 146 147 148 149 151 153 157 159 163 168 169 173 176 178 179 182 185 186 188 191 192 193 194 195 197 200 201 202 204 205 206 207 209 210 212 214 217 218 220 221 223 224 225 226 227 228 231 233 236 240 241 242 243 245 b 247 0 1 0 2 5 8 10 11 14 17 18 19 20 22 25 26 29 34 35 38 40 41 42 45 46 47 48 49 51 52 59 60 61 66 67 69 72 78 80 83 84 88 89 91 92 93 94 97 99 100 102 103 104 107 108 111 112 114 115 116 117 119 120 121 124 126 127 129 130 133 137 139 140 142 143 144 147 149 150 154 156 161 162 163 164 167 168 170 171 172 173 174 175 178 179 180 181 182 184 185 186 187 189 190 191 192 193 194 195 196 197 198 199 201 202 205 207 208 211 218 221 224 225 226 227 228 229 230 233 234 235 238 240 244 245 # 10235 is_equal c a 247 0 1 e b 247 0 1 e # 10236 is_equal c a 247 0 1 e b 247 1 0 e # 10237 is_equal c a 247 0 1 e b 247 0 1 e # 10238 is_equal c a 247 0 1 e b 247 1 0 f # 10239 is_equal c a 247 0 1 e b 247 0 1 e # 10240 is_equal c a 247 0 1 e b 247 1 0 0 6 7 9 10 11 12 14 16 19 20 21 22 24 25 26 27 28 29 31 33 35 37 39 40 42 44 46 47 48 49 50 51 52 61 62 63 64 69 71 73 75 78 83 84 85 89 90 91 92 93 94 95 96 101 104 105 108 110 112 115 117 119 120 121 122 123 124 126 127 128 130 131 132 135 136 137 138 139 141 143 144 146 149 150 151 152 153 154 155 159 160 162 163 164 167 170 171 173 174 179 182 188 189 191 195 196 197 198 203 205 206 207 210 211 212 216 217 218 219 222 223 224 226 227 231 232 239 240 242 243 244 # 10241 is_equal c a 247 0 1 f b 247 0 1 f # 10242 is_equal c a 247 0 1 f b 247 1 0 e # 10243 is_equal c a 247 0 1 f b 247 0 1 f # 10244 is_equal c a 247 0 1 f b 247 1 0 f # 10245 is_equal c a 247 0 1 f b 247 0 1 f # 10246 is_equal c a 247 0 1 f b 247 1 0 0 2 3 4 8 9 11 12 13 14 15 16 20 21 22 23 24 25 26 27 28 30 32 33 37 38 42 44 45 47 50 53 55 56 58 60 61 62 63 64 67 68 74 79 80 83 84 85 86 87 89 94 102 103 104 105 107 109 110 111 112 113 114 115 116 117 118 119 120 121 127 129 131 134 135 138 141 144 149 152 153 156 157 158 160 163 166 167 168 169 172 173 177 178 179 180 182 183 186 189 190 195 196 199 201 202 203 207 211 212 214 216 217 220 222 223 225 226 230 232 233 237 239 241 242 246 # 10247 is_equal c a 247 0 1 3 4 7 8 10 12 13 16 18 20 21 22 27 28 29 31 32 33 34 35 38 40 41 44 45 46 47 48 51 53 61 65 67 70 71 72 75 80 81 82 83 84 88 89 91 93 95 96 98 99 100 101 102 103 108 109 110 112 113 116 117 118 119 120 122 124 125 127 129 130 132 133 134 135 139 144 145 146 147 148 150 151 152 154 155 159 163 164 166 168 172 173 175 176 178 179 180 184 188 189 191 192 193 194 195 196 197 199 202 206 207 208 209 210 214 216 218 220 223 224 226 227 230 231 232 233 235 238 239 240 241 244 b 247 0 1 3 4 7 8 10 12 13 16 18 20 21 22 27 28 29 31 32 33 34 35 38 40 41 44 45 46 47 48 51 53 61 65 67 70 71 72 75 80 81 82 83 84 88 89 91 93 95 96 98 99 100 101 102 103 108 109 110 112 113 116 117 118 119 120 122 124 125 127 129 130 132 133 134 135 139 144 145 146 147 148 150 151 152 154 155 159 163 164 166 168 172 173 175 176 178 179 180 184 188 189 191 192 193 194 195 196 197 199 202 206 207 208 209 210 214 216 218 220 223 224 226 227 230 231 232 233 235 238 239 240 241 244 # 10248 is_equal c a 247 0 1 3 4 7 8 10 12 13 16 18 20 21 22 27 28 29 31 32 33 34 35 38 40 41 44 45 46 47 48 51 53 61 65 67 70 71 72 75 80 81 82 83 84 88 89 91 93 95 96 98 99 100 101 102 103 108 109 110 112 113 116 117 118 119 120 122 124 125 127 129 130 132 133 134 135 139 144 145 146 147 148 150 151 152 154 155 159 163 164 166 168 172 173 175 176 178 179 180 184 188 189 191 192 193 194 195 196 197 199 202 206 207 208 209 210 214 216 218 220 223 224 226 227 230 231 232 233 235 238 239 240 241 244 b 247 1 0 e # 10249 is_equal c a 247 0 1 0 1 4 6 7 10 12 13 15 16 17 18 19 22 26 30 32 35 36 42 45 46 47 48 49 50 56 58 61 62 67 69 71 72 73 76 79 81 85 86 88 89 90 92 93 94 96 100 103 105 108 113 114 115 117 120 122 123 125 126 130 132 136 138 139 140 144 145 148 149 150 153 155 156 158 161 164 165 167 170 174 178 179 181 183 184 185 187 188 193 194 199 202 203 205 207 208 210 214 216 219 220 221 227 229 230 231 232 233 234 240 241 242 245 246 b 247 0 1 0 1 4 6 7 10 12 13 15 16 17 18 19 22 26 30 32 35 36 42 45 46 47 48 49 50 56 58 61 62 67 69 71 72 73 76 79 81 85 86 88 89 90 92 93 94 96 100 103 105 108 113 114 115 117 120 122 123 125 126 130 132 136 138 139 140 144 145 148 149 150 153 155 156 158 161 164 165 167 170 174 178 179 181 183 184 185 187 188 193 194 199 202 203 205 207 208 210 214 216 219 220 221 227 229 230 231 232 233 234 240 241 242 245 246 # 10250 is_equal c a 247 0 1 0 1 4 6 7 10 12 13 15 16 17 18 19 22 26 30 32 35 36 42 45 46 47 48 49 50 56 58 61 62 67 69 71 72 73 76 79 81 85 86 88 89 90 92 93 94 96 100 103 105 108 113 114 115 117 120 122 123 125 126 130 132 136 138 139 140 144 145 148 149 150 153 155 156 158 161 164 165 167 170 174 178 179 181 183 184 185 187 188 193 194 199 202 203 205 207 208 210 214 216 219 220 221 227 229 230 231 232 233 234 240 241 242 245 246 b 247 1 0 f # 10251 is_equal c a 247 0 1 6 8 9 10 11 13 16 20 21 24 26 28 29 31 32 33 37 38 39 40 41 42 46 53 58 67 70 72 74 76 77 78 83 85 87 90 91 92 94 96 100 101 102 103 105 108 109 113 116 117 126 128 129 132 136 138 139 142 143 148 150 152 153 159 161 165 166 170 171 172 173 175 177 181 183 184 185 189 192 193 194 195 199 200 203 205 206 208 209 210 211 212 214 215 220 222 223 225 226 227 229 233 234 236 237 238 239 240 241 242 243 244 245 246 b 247 0 1 6 8 9 10 11 13 16 20 21 24 26 28 29 31 32 33 37 38 39 40 41 42 46 53 58 67 70 72 74 76 77 78 83 85 87 90 91 92 94 96 100 101 102 103 105 108 109 113 116 117 126 128 129 132 136 138 139 142 143 148 150 152 153 159 161 165 166 170 171 172 173 175 177 181 183 184 185 189 192 193 194 195 199 200 203 205 206 208 209 210 211 212 214 215 220 222 223 225 226 227 229 233 234 236 237 238 239 240 241 242 243 244 245 246 # 10252 is_equal c a 247 0 1 6 8 9 10 11 13 16 20 21 24 26 28 29 31 32 33 37 38 39 40 41 42 46 53 58 67 70 72 74 76 77 78 83 85 87 90 91 92 94 96 100 101 102 103 105 108 109 113 116 117 126 128 129 132 136 138 139 142 143 148 150 152 153 159 161 165 166 170 171 172 173 175 177 181 183 184 185 189 192 193 194 195 199 200 203 205 206 208 209 210 211 212 214 215 220 222 223 225 226 227 229 233 234 236 237 238 239 240 241 242 243 244 245 246 b 247 1 0 1 2 3 4 6 7 8 12 14 15 16 17 18 20 21 23 25 28 30 33 34 37 38 42 43 44 45 46 47 48 49 50 51 52 57 66 67 69 73 76 78 81 85 88 89 90 91 95 96 98 99 100 105 107 111 113 115 117 120 121 125 127 128 130 131 135 137 138 139 142 143 144 148 149 150 151 152 153 154 155 156 158 159 161 162 163 165 166 167 168 170 171 172 173 174 175 180 181 182 183 184 185 186 187 189 191 192 194 199 200 202 203 205 208 209 210 211 212 213 214 215 216 219 221 222 223 228 231 232 234 235 240 243 244 245 # 10253 is_equal c a 247 0 1 e b 247 0 1 e # 10254 is_equal c a 247 0 1 e b 247 1 1 e # 10255 is_equal c a 247 0 1 e b 247 0 1 e # 10256 is_equal c a 247 0 1 e b 247 1 1 f # 10257 is_equal c a 247 0 1 e b 247 0 1 e # 10258 is_equal c a 247 0 1 e b 247 1 1 0 2 3 4 5 7 9 10 11 12 15 17 18 20 21 22 24 25 27 28 31 32 35 37 40 43 44 46 49 52 55 57 61 62 64 69 70 73 79 81 82 83 86 90 91 92 93 95 97 99 101 103 104 105 106 115 116 121 124 125 127 129 130 131 132 133 134 135 136 137 139 143 144 145 149 150 151 152 153 156 157 165 166 167 168 170 171 172 174 178 179 180 181 183 184 185 189 190 191 192 193 196 199 202 204 206 208 209 210 211 217 218 219 222 225 226 229 231 233 234 235 237 242 243 244 # 10259 is_equal c a 247 0 1 f b 247 0 1 f # 10260 is_equal c a 247 0 1 f b 247 1 1 e # 10261 is_equal c a 247 0 1 f b 247 0 1 f # 10262 is_equal c a 247 0 1 f b 247 1 1 f # 10263 is_equal c a 247 0 1 f b 247 0 1 f # 10264 is_equal c a 247 0 1 f b 247 1 1 0 2 3 4 8 10 12 13 14 17 24 25 27 29 30 33 35 37 42 43 45 49 50 51 55 56 57 58 60 61 62 63 64 66 68 70 73 75 77 79 80 81 82 83 85 86 88 89 90 93 96 99 100 104 106 111 114 117 118 119 120 125 129 136 138 140 143 147 150 151 152 155 157 159 160 162 163 164 167 168 169 171 174 175 176 179 182 187 188 191 192 194 195 196 197 198 199 200 202 204 206 208 212 216 217 218 219 224 227 230 233 238 239 240 243 244 245 246 # 10265 is_equal c a 247 0 1 2 4 6 7 9 16 18 22 26 28 32 34 35 36 38 41 42 43 50 51 52 53 56 59 60 61 63 64 67 68 70 73 74 75 76 81 84 85 87 89 90 91 92 94 95 103 108 109 110 112 117 120 121 123 127 129 130 131 134 135 136 138 139 140 141 142 143 144 150 155 157 159 160 162 164 165 166 167 168 169 170 171 172 173 174 175 177 178 179 181 183 184 186 191 192 195 198 203 205 206 208 209 216 218 224 226 228 229 231 233 234 236 237 238 239 243 244 245 b 247 0 1 2 4 6 7 9 16 18 22 26 28 32 34 35 36 38 41 42 43 50 51 52 53 56 59 60 61 63 64 67 68 70 73 74 75 76 81 84 85 87 89 90 91 92 94 95 103 108 109 110 112 117 120 121 123 127 129 130 131 134 135 136 138 139 140 141 142 143 144 150 155 157 159 160 162 164 165 166 167 168 169 170 171 172 173 174 175 177 178 179 181 183 184 186 191 192 195 198 203 205 206 208 209 216 218 224 226 228 229 231 233 234 236 237 238 239 243 244 245 # 10266 is_equal c a 247 0 1 2 4 6 7 9 16 18 22 26 28 32 34 35 36 38 41 42 43 50 51 52 53 56 59 60 61 63 64 67 68 70 73 74 75 76 81 84 85 87 89 90 91 92 94 95 103 108 109 110 112 117 120 121 123 127 129 130 131 134 135 136 138 139 140 141 142 143 144 150 155 157 159 160 162 164 165 166 167 168 169 170 171 172 173 174 175 177 178 179 181 183 184 186 191 192 195 198 203 205 206 208 209 216 218 224 226 228 229 231 233 234 236 237 238 239 243 244 245 b 247 1 1 e # 10267 is_equal c a 247 0 1 0 1 3 5 7 8 9 10 14 16 23 24 27 29 31 32 33 34 36 39 40 41 42 45 46 52 53 57 60 63 67 68 70 71 73 75 79 80 81 85 86 87 92 93 94 95 98 99 100 101 102 105 107 110 111 113 115 116 120 121 127 128 130 134 135 137 138 139 142 143 148 149 152 153 154 158 160 161 162 166 167 169 171 174 175 178 182 183 185 187 192 193 198 199 202 204 205 208 212 216 220 223 225 226 227 229 230 231 233 236 239 240 241 242 246 b 247 0 1 0 1 3 5 7 8 9 10 14 16 23 24 27 29 31 32 33 34 36 39 40 41 42 45 46 52 53 57 60 63 67 68 70 71 73 75 79 80 81 85 86 87 92 93 94 95 98 99 100 101 102 105 107 110 111 113 115 116 120 121 127 128 130 134 135 137 138 139 142 143 148 149 152 153 154 158 160 161 162 166 167 169 171 174 175 178 182 183 185 187 192 193 198 199 202 204 205 208 212 216 220 223 225 226 227 229 230 231 233 236 239 240 241 242 246 # 10268 is_equal c a 247 0 1 0 1 3 5 7 8 9 10 14 16 23 24 27 29 31 32 33 34 36 39 40 41 42 45 46 52 53 57 60 63 67 68 70 71 73 75 79 80 81 85 86 87 92 93 94 95 98 99 100 101 102 105 107 110 111 113 115 116 120 121 127 128 130 134 135 137 138 139 142 143 148 149 152 153 154 158 160 161 162 166 167 169 171 174 175 178 182 183 185 187 192 193 198 199 202 204 205 208 212 216 220 223 225 226 227 229 230 231 233 236 239 240 241 242 246 b 247 1 1 f # 10269 is_equal c a 247 0 1 1 2 6 8 9 11 14 16 17 19 20 21 24 28 29 30 31 33 35 43 44 49 52 53 54 58 60 61 64 65 69 70 71 74 75 76 77 80 81 84 86 89 90 93 94 96 99 102 109 112 113 114 115 117 119 123 127 128 129 130 131 132 133 137 138 139 140 142 143 145 146 151 152 154 155 156 158 160 161 163 164 165 167 168 170 171 173 174 175 177 179 182 184 185 187 193 195 196 197 198 199 200 201 202 205 207 208 210 212 213 215 216 217 218 220 221 224 225 232 233 234 236 240 242 243 246 b 247 0 1 1 2 6 8 9 11 14 16 17 19 20 21 24 28 29 30 31 33 35 43 44 49 52 53 54 58 60 61 64 65 69 70 71 74 75 76 77 80 81 84 86 89 90 93 94 96 99 102 109 112 113 114 115 117 119 123 127 128 129 130 131 132 133 137 138 139 140 142 143 145 146 151 152 154 155 156 158 160 161 163 164 165 167 168 170 171 173 174 175 177 179 182 184 185 187 193 195 196 197 198 199 200 201 202 205 207 208 210 212 213 215 216 217 218 220 221 224 225 232 233 234 236 240 242 243 246 # 10270 is_equal c a 247 0 1 1 2 6 8 9 11 14 16 17 19 20 21 24 28 29 30 31 33 35 43 44 49 52 53 54 58 60 61 64 65 69 70 71 74 75 76 77 80 81 84 86 89 90 93 94 96 99 102 109 112 113 114 115 117 119 123 127 128 129 130 131 132 133 137 138 139 140 142 143 145 146 151 152 154 155 156 158 160 161 163 164 165 167 168 170 171 173 174 175 177 179 182 184 185 187 193 195 196 197 198 199 200 201 202 205 207 208 210 212 213 215 216 217 218 220 221 224 225 232 233 234 236 240 242 243 246 b 247 1 1 1 3 4 9 11 13 14 15 16 17 18 20 22 24 26 27 28 33 34 39 41 43 44 46 49 50 52 55 56 58 60 62 63 65 67 68 69 72 73 74 77 78 79 81 85 87 91 94 95 96 99 100 101 103 104 108 112 113 114 119 120 121 122 124 125 126 127 128 130 131 134 137 138 142 145 147 149 156 159 160 162 164 165 166 168 169 170 171 173 175 176 177 181 183 185 189 194 196 197 199 200 202 204 205 207 208 209 210 212 215 217 219 220 224 227 229 234 238 239 240 241 243 246 # 10271 is_equal c a 247 1 0 e b 247 1 0 e # 10272 is_equal c a 247 1 0 e b 247 0 0 e # 10273 is_equal c a 247 1 0 e b 247 1 0 e # 10274 is_equal c a 247 1 0 e b 247 0 0 f # 10275 is_equal c a 247 1 0 e b 247 1 0 e # 10276 is_equal c a 247 1 0 e b 247 0 0 0 2 3 4 9 10 11 13 15 16 17 18 20 23 27 28 29 30 31 32 33 34 35 41 43 44 45 46 47 48 49 50 51 52 54 57 60 61 62 63 64 65 66 67 68 69 72 73 74 75 76 77 79 84 86 89 91 92 94 95 98 109 110 111 115 116 117 119 120 121 122 123 125 126 130 131 132 135 136 139 142 144 145 148 149 151 154 155 157 161 163 166 167 168 170 173 174 176 178 179 180 182 184 185 187 191 193 194 195 197 198 200 201 206 210 212 213 214 219 220 221 222 224 226 227 229 233 234 235 236 240 242 243 244 245 # 10277 is_equal c a 247 1 0 f b 247 1 0 f # 10278 is_equal c a 247 1 0 f b 247 0 0 e # 10279 is_equal c a 247 1 0 f b 247 1 0 f # 10280 is_equal c a 247 1 0 f b 247 0 0 f # 10281 is_equal c a 247 1 0 f b 247 1 0 f # 10282 is_equal c a 247 1 0 f b 247 0 0 2 4 5 9 12 13 14 18 22 23 25 26 28 29 34 36 40 41 42 43 44 45 50 51 52 54 57 60 61 62 63 65 69 70 73 79 80 84 86 88 90 91 93 94 96 97 98 99 100 107 108 109 111 113 115 117 121 122 124 125 126 128 129 133 134 141 142 144 147 149 152 154 156 157 158 159 160 163 165 169 170 173 174 176 182 183 184 185 187 188 192 193 196 197 198 199 200 208 209 215 216 217 218 219 224 225 227 228 230 232 234 235 236 239 240 241 242 244 # 10283 is_equal c a 247 1 0 0 1 2 3 6 9 10 11 14 15 16 17 18 19 20 21 24 25 28 29 31 32 34 35 36 37 39 42 43 44 45 46 47 48 49 50 52 53 54 55 56 58 59 62 63 64 65 66 67 70 71 72 73 74 75 77 80 82 85 92 95 96 100 103 104 106 110 114 115 117 118 122 123 126 128 130 131 134 136 137 138 140 141 142 150 151 153 154 155 160 164 166 167 169 174 175 176 177 182 183 185 186 187 191 192 193 195 197 198 200 202 206 211 215 221 225 226 227 228 229 232 233 234 237 238 239 240 242 244 b 247 1 0 0 1 2 3 6 9 10 11 14 15 16 17 18 19 20 21 24 25 28 29 31 32 34 35 36 37 39 42 43 44 45 46 47 48 49 50 52 53 54 55 56 58 59 62 63 64 65 66 67 70 71 72 73 74 75 77 80 82 85 92 95 96 100 103 104 106 110 114 115 117 118 122 123 126 128 130 131 134 136 137 138 140 141 142 150 151 153 154 155 160 164 166 167 169 174 175 176 177 182 183 185 186 187 191 192 193 195 197 198 200 202 206 211 215 221 225 226 227 228 229 232 233 234 237 238 239 240 242 244 # 10284 is_equal c a 247 1 0 0 1 2 3 6 9 10 11 14 15 16 17 18 19 20 21 24 25 28 29 31 32 34 35 36 37 39 42 43 44 45 46 47 48 49 50 52 53 54 55 56 58 59 62 63 64 65 66 67 70 71 72 73 74 75 77 80 82 85 92 95 96 100 103 104 106 110 114 115 117 118 122 123 126 128 130 131 134 136 137 138 140 141 142 150 151 153 154 155 160 164 166 167 169 174 175 176 177 182 183 185 186 187 191 192 193 195 197 198 200 202 206 211 215 221 225 226 227 228 229 232 233 234 237 238 239 240 242 244 b 247 0 0 e # 10285 is_equal c a 247 1 0 0 2 4 6 8 9 11 13 14 15 16 17 18 27 32 33 34 35 37 43 46 49 50 51 55 56 58 59 60 61 63 64 65 66 68 70 72 78 79 80 81 84 85 86 87 89 90 92 93 95 96 99 102 107 110 112 114 115 116 117 118 125 126 128 134 135 138 139 141 144 147 148 152 153 154 157 158 160 161 162 165 167 168 170 174 180 182 185 186 187 194 195 196 199 200 207 208 209 211 217 219 223 224 226 227 228 230 231 234 235 236 238 239 244 245 246 b 247 1 0 0 2 4 6 8 9 11 13 14 15 16 17 18 27 32 33 34 35 37 43 46 49 50 51 55 56 58 59 60 61 63 64 65 66 68 70 72 78 79 80 81 84 85 86 87 89 90 92 93 95 96 99 102 107 110 112 114 115 116 117 118 125 126 128 134 135 138 139 141 144 147 148 152 153 154 157 158 160 161 162 165 167 168 170 174 180 182 185 186 187 194 195 196 199 200 207 208 209 211 217 219 223 224 226 227 228 230 231 234 235 236 238 239 244 245 246 # 10286 is_equal c a 247 1 0 0 2 4 6 8 9 11 13 14 15 16 17 18 27 32 33 34 35 37 43 46 49 50 51 55 56 58 59 60 61 63 64 65 66 68 70 72 78 79 80 81 84 85 86 87 89 90 92 93 95 96 99 102 107 110 112 114 115 116 117 118 125 126 128 134 135 138 139 141 144 147 148 152 153 154 157 158 160 161 162 165 167 168 170 174 180 182 185 186 187 194 195 196 199 200 207 208 209 211 217 219 223 224 226 227 228 230 231 234 235 236 238 239 244 245 246 b 247 0 0 f # 10287 is_equal c a 247 1 0 1 3 5 10 14 15 16 18 19 20 22 23 24 29 32 35 37 39 42 45 50 52 53 54 55 56 58 62 63 64 66 67 68 70 73 74 75 76 79 80 83 84 87 91 92 93 94 97 100 104 107 109 110 112 113 114 115 118 119 120 123 128 129 130 131 132 135 137 138 139 140 143 146 147 148 149 151 152 153 157 158 164 165 168 172 176 177 178 180 183 185 186 187 189 190 191 195 196 197 199 203 204 207 212 214 217 218 219 220 221 222 223 226 230 232 235 236 237 240 241 243 246 b 247 1 0 1 3 5 10 14 15 16 18 19 20 22 23 24 29 32 35 37 39 42 45 50 52 53 54 55 56 58 62 63 64 66 67 68 70 73 74 75 76 79 80 83 84 87 91 92 93 94 97 100 104 107 109 110 112 113 114 115 118 119 120 123 128 129 130 131 132 135 137 138 139 140 143 146 147 148 149 151 152 153 157 158 164 165 168 172 176 177 178 180 183 185 186 187 189 190 191 195 196 197 199 203 204 207 212 214 217 218 219 220 221 222 223 226 230 232 235 236 237 240 241 243 246 # 10288 is_equal c a 247 1 0 1 3 5 10 14 15 16 18 19 20 22 23 24 29 32 35 37 39 42 45 50 52 53 54 55 56 58 62 63 64 66 67 68 70 73 74 75 76 79 80 83 84 87 91 92 93 94 97 100 104 107 109 110 112 113 114 115 118 119 120 123 128 129 130 131 132 135 137 138 139 140 143 146 147 148 149 151 152 153 157 158 164 165 168 172 176 177 178 180 183 185 186 187 189 190 191 195 196 197 199 203 204 207 212 214 217 218 219 220 221 222 223 226 230 232 235 236 237 240 241 243 246 b 247 0 0 2 5 6 15 17 19 23 27 29 30 31 33 36 38 41 42 43 46 47 48 50 52 55 58 59 61 62 64 66 67 69 71 72 73 74 77 78 81 82 84 85 91 96 100 103 106 107 109 110 111 112 113 114 115 116 121 122 123 126 127 132 136 138 139 141 142 143 144 145 146 148 149 150 152 153 155 156 158 162 164 171 174 176 178 179 185 188 190 193 194 196 198 200 205 211 212 213 215 216 219 220 221 224 225 227 231 235 237 239 240 241 242 243 244 246 # 10289 is_equal c a 247 1 0 e b 247 1 0 e # 10290 is_equal c a 247 1 0 e b 247 0 1 e # 10291 is_equal c a 247 1 0 e b 247 1 0 e # 10292 is_equal c a 247 1 0 e b 247 0 1 f # 10293 is_equal c a 247 1 0 e b 247 1 0 e # 10294 is_equal c a 247 1 0 e b 247 0 1 0 1 2 5 6 7 8 9 12 14 15 16 19 20 21 23 24 26 27 29 32 34 38 42 44 47 48 50 56 57 60 61 63 66 67 68 69 70 71 73 75 78 79 80 84 85 86 88 90 91 92 98 101 103 104 106 107 108 110 111 112 115 119 120 121 122 123 126 127 128 129 130 132 134 135 136 137 138 139 141 142 146 148 166 169 170 173 174 175 176 177 179 180 181 184 186 188 189 190 191 195 196 198 199 200 201 204 207 208 211 213 217 218 219 220 222 224 226 229 232 233 234 235 240 241 243 244 # 10295 is_equal c a 247 1 0 f b 247 1 0 f # 10296 is_equal c a 247 1 0 f b 247 0 1 e # 10297 is_equal c a 247 1 0 f b 247 1 0 f # 10298 is_equal c a 247 1 0 f b 247 0 1 f # 10299 is_equal c a 247 1 0 f b 247 1 0 f # 10300 is_equal c a 247 1 0 f b 247 0 1 0 2 3 6 7 10 11 12 13 16 22 23 25 26 28 31 32 34 36 37 40 41 42 43 44 46 50 51 52 53 54 55 56 57 59 61 66 68 69 71 72 74 75 76 77 80 83 85 86 88 89 90 91 92 95 96 97 99 100 101 102 103 106 107 109 114 117 118 120 121 127 129 130 135 136 138 141 146 147 149 151 155 156 157 158 160 162 164 166 167 168 169 171 172 173 183 184 185 187 188 191 192 194 195 196 197 198 199 200 201 202 204 206 207 208 209 211 213 214 216 219 221 222 225 226 228 229 232 233 234 237 239 240 241 242 244 245 246 # 10301 is_equal c a 247 1 0 0 1 3 6 7 8 10 15 18 19 20 23 26 35 36 37 38 42 43 44 48 50 52 55 57 59 61 62 63 66 67 69 71 77 82 83 84 85 86 88 90 93 101 105 106 107 108 110 111 112 113 114 116 117 118 119 121 123 124 125 127 129 132 133 134 135 137 138 140 141 143 149 150 151 152 156 157 161 162 164 165 169 172 173 176 182 184 186 187 190 191 193 194 195 199 201 203 205 209 210 211 213 214 215 217 218 220 221 227 230 231 234 235 237 240 241 243 244 246 b 247 1 0 0 1 3 6 7 8 10 15 18 19 20 23 26 35 36 37 38 42 43 44 48 50 52 55 57 59 61 62 63 66 67 69 71 77 82 83 84 85 86 88 90 93 101 105 106 107 108 110 111 112 113 114 116 117 118 119 121 123 124 125 127 129 132 133 134 135 137 138 140 141 143 149 150 151 152 156 157 161 162 164 165 169 172 173 176 182 184 186 187 190 191 193 194 195 199 201 203 205 209 210 211 213 214 215 217 218 220 221 227 230 231 234 235 237 240 241 243 244 246 # 10302 is_equal c a 247 1 0 0 1 3 6 7 8 10 15 18 19 20 23 26 35 36 37 38 42 43 44 48 50 52 55 57 59 61 62 63 66 67 69 71 77 82 83 84 85 86 88 90 93 101 105 106 107 108 110 111 112 113 114 116 117 118 119 121 123 124 125 127 129 132 133 134 135 137 138 140 141 143 149 150 151 152 156 157 161 162 164 165 169 172 173 176 182 184 186 187 190 191 193 194 195 199 201 203 205 209 210 211 213 214 215 217 218 220 221 227 230 231 234 235 237 240 241 243 244 246 b 247 0 1 e # 10303 is_equal c a 247 1 0 0 1 2 4 6 8 9 11 13 14 18 19 20 21 24 27 28 29 30 31 32 35 36 38 39 42 43 45 46 47 49 50 52 53 55 57 60 64 65 67 68 70 72 73 74 76 77 78 80 81 83 84 85 86 87 88 91 98 100 101 106 109 113 116 119 122 123 124 125 132 133 134 138 139 143 145 146 151 152 153 154 155 156 157 158 162 166 167 168 170 172 174 175 177 179 183 186 189 190 193 194 195 198 200 201 203 206 207 209 211 213 214 215 222 225 229 230 232 234 235 236 237 238 240 242 245 b 247 1 0 0 1 2 4 6 8 9 11 13 14 18 19 20 21 24 27 28 29 30 31 32 35 36 38 39 42 43 45 46 47 49 50 52 53 55 57 60 64 65 67 68 70 72 73 74 76 77 78 80 81 83 84 85 86 87 88 91 98 100 101 106 109 113 116 119 122 123 124 125 132 133 134 138 139 143 145 146 151 152 153 154 155 156 157 158 162 166 167 168 170 172 174 175 177 179 183 186 189 190 193 194 195 198 200 201 203 206 207 209 211 213 214 215 222 225 229 230 232 234 235 236 237 238 240 242 245 # 10304 is_equal c a 247 1 0 0 1 2 4 6 8 9 11 13 14 18 19 20 21 24 27 28 29 30 31 32 35 36 38 39 42 43 45 46 47 49 50 52 53 55 57 60 64 65 67 68 70 72 73 74 76 77 78 80 81 83 84 85 86 87 88 91 98 100 101 106 109 113 116 119 122 123 124 125 132 133 134 138 139 143 145 146 151 152 153 154 155 156 157 158 162 166 167 168 170 172 174 175 177 179 183 186 189 190 193 194 195 198 200 201 203 206 207 209 211 213 214 215 222 225 229 230 232 234 235 236 237 238 240 242 245 b 247 0 1 f # 10305 is_equal c a 247 1 0 2 3 6 7 9 11 12 14 16 17 19 20 21 22 23 24 25 26 27 29 31 32 33 34 37 39 41 42 44 46 47 49 50 52 53 55 56 58 59 60 61 62 63 64 69 70 71 72 73 75 77 78 79 80 81 82 83 86 93 97 98 99 100 101 103 105 107 108 111 112 114 116 118 120 121 122 124 126 129 133 134 135 138 140 142 143 144 145 149 150 152 154 155 156 157 159 161 163 166 167 168 169 172 175 176 181 188 189 192 196 202 204 206 207 208 210 214 215 216 218 219 223 224 225 230 232 233 234 235 237 239 240 244 245 246 b 247 1 0 2 3 6 7 9 11 12 14 16 17 19 20 21 22 23 24 25 26 27 29 31 32 33 34 37 39 41 42 44 46 47 49 50 52 53 55 56 58 59 60 61 62 63 64 69 70 71 72 73 75 77 78 79 80 81 82 83 86 93 97 98 99 100 101 103 105 107 108 111 112 114 116 118 120 121 122 124 126 129 133 134 135 138 140 142 143 144 145 149 150 152 154 155 156 157 159 161 163 166 167 168 169 172 175 176 181 188 189 192 196 202 204 206 207 208 210 214 215 216 218 219 223 224 225 230 232 233 234 235 237 239 240 244 245 246 # 10306 is_equal c a 247 1 0 2 3 6 7 9 11 12 14 16 17 19 20 21 22 23 24 25 26 27 29 31 32 33 34 37 39 41 42 44 46 47 49 50 52 53 55 56 58 59 60 61 62 63 64 69 70 71 72 73 75 77 78 79 80 81 82 83 86 93 97 98 99 100 101 103 105 107 108 111 112 114 116 118 120 121 122 124 126 129 133 134 135 138 140 142 143 144 145 149 150 152 154 155 156 157 159 161 163 166 167 168 169 172 175 176 181 188 189 192 196 202 204 206 207 208 210 214 215 216 218 219 223 224 225 230 232 233 234 235 237 239 240 244 245 246 b 247 0 1 0 2 6 8 10 12 18 19 20 21 23 24 25 26 27 28 29 30 31 33 35 37 41 42 48 53 55 56 58 59 61 62 64 65 68 74 75 80 81 82 83 84 85 86 87 89 90 92 94 95 100 101 102 104 105 106 108 110 111 112 114 115 117 119 120 123 124 126 129 130 132 133 135 140 141 143 145 147 148 149 150 153 155 157 159 160 161 162 163 164 168 169 170 171 172 173 176 177 179 180 181 184 190 193 197 205 208 209 210 211 212 214 215 216 218 220 221 222 224 225 228 229 230 236 237 238 239 240 241 244 # 10307 is_equal c a 247 1 0 e b 247 1 0 e # 10308 is_equal c a 247 1 0 e b 247 1 0 e # 10309 is_equal c a 247 1 0 e b 247 1 0 e # 10310 is_equal c a 247 1 0 e b 247 1 0 f # 10311 is_equal c a 247 1 0 e b 247 1 0 e # 10312 is_equal c a 247 1 0 e b 247 1 0 0 1 3 6 7 9 11 14 15 17 19 20 22 23 24 29 30 33 35 37 38 40 41 45 46 47 48 50 51 54 56 57 58 60 61 62 64 65 67 68 69 71 72 73 74 76 77 78 79 81 82 83 90 92 95 97 98 100 103 104 106 107 109 112 115 116 120 121 123 125 127 128 133 136 141 142 143 144 145 146 147 150 154 155 158 160 162 164 165 166 167 169 172 173 175 176 180 182 183 184 185 186 190 191 192 195 197 198 199 200 201 203 204 205 207 209 211 214 216 217 218 221 223 226 227 233 237 239 240 241 242 245 246 # 10313 is_equal c a 247 1 0 f b 247 1 0 f # 10314 is_equal c a 247 1 0 f b 247 1 0 e # 10315 is_equal c a 247 1 0 f b 247 1 0 f # 10316 is_equal c a 247 1 0 f b 247 1 0 f # 10317 is_equal c a 247 1 0 f b 247 1 0 f # 10318 is_equal c a 247 1 0 f b 247 1 0 2 4 6 7 8 12 13 14 17 19 23 24 26 28 30 31 32 33 35 39 41 44 49 53 60 63 65 68 69 72 73 74 75 79 81 84 85 86 88 90 91 92 93 95 96 97 99 100 101 103 104 105 106 114 117 118 120 121 122 123 124 126 138 139 140 141 146 147 148 149 150 151 152 153 154 158 159 160 163 164 165 169 170 172 174 177 180 183 187 188 190 197 199 200 203 204 210 212 214 215 218 222 223 224 227 228 229 230 231 233 235 237 241 242 243 245 246 # 10319 is_equal c a 247 1 0 0 1 2 3 6 8 9 10 11 12 14 15 16 17 19 20 21 22 25 29 31 32 33 34 37 38 40 41 43 45 47 48 49 50 51 52 53 55 56 59 62 65 66 67 68 69 70 72 75 77 78 79 81 82 85 91 92 99 105 107 110 111 112 118 119 120 121 122 123 128 129 132 133 134 136 137 141 146 147 148 150 151 153 154 155 161 162 164 165 166 168 169 170 171 172 173 177 183 186 187 188 189 192 198 199 201 202 204 206 210 211 212 214 216 219 221 222 226 228 229 231 236 237 239 242 243 b 247 1 0 0 1 2 3 6 8 9 10 11 12 14 15 16 17 19 20 21 22 25 29 31 32 33 34 37 38 40 41 43 45 47 48 49 50 51 52 53 55 56 59 62 65 66 67 68 69 70 72 75 77 78 79 81 82 85 91 92 99 105 107 110 111 112 118 119 120 121 122 123 128 129 132 133 134 136 137 141 146 147 148 150 151 153 154 155 161 162 164 165 166 168 169 170 171 172 173 177 183 186 187 188 189 192 198 199 201 202 204 206 210 211 212 214 216 219 221 222 226 228 229 231 236 237 239 242 243 # 10320 is_equal c a 247 1 0 0 1 2 3 6 8 9 10 11 12 14 15 16 17 19 20 21 22 25 29 31 32 33 34 37 38 40 41 43 45 47 48 49 50 51 52 53 55 56 59 62 65 66 67 68 69 70 72 75 77 78 79 81 82 85 91 92 99 105 107 110 111 112 118 119 120 121 122 123 128 129 132 133 134 136 137 141 146 147 148 150 151 153 154 155 161 162 164 165 166 168 169 170 171 172 173 177 183 186 187 188 189 192 198 199 201 202 204 206 210 211 212 214 216 219 221 222 226 228 229 231 236 237 239 242 243 b 247 1 0 e # 10321 is_equal c a 247 1 0 1 3 6 7 11 16 17 19 20 23 24 25 27 29 30 32 36 40 41 44 45 47 48 49 50 56 57 58 60 61 62 63 68 71 73 74 78 81 82 83 84 85 87 88 93 95 98 99 100 102 105 107 110 111 113 114 116 117 122 127 128 130 131 132 134 135 138 140 141 145 148 149 150 153 154 155 156 157 159 163 164 166 167 168 169 171 173 175 176 177 179 181 182 183 184 185 187 188 189 191 193 194 195 197 198 200 205 207 210 211 213 214 218 227 231 232 233 236 240 241 244 245 246 b 247 1 0 1 3 6 7 11 16 17 19 20 23 24 25 27 29 30 32 36 40 41 44 45 47 48 49 50 56 57 58 60 61 62 63 68 71 73 74 78 81 82 83 84 85 87 88 93 95 98 99 100 102 105 107 110 111 113 114 116 117 122 127 128 130 131 132 134 135 138 140 141 145 148 149 150 153 154 155 156 157 159 163 164 166 167 168 169 171 173 175 176 177 179 181 182 183 184 185 187 188 189 191 193 194 195 197 198 200 205 207 210 211 213 214 218 227 231 232 233 236 240 241 244 245 246 # 10322 is_equal c a 247 1 0 1 3 6 7 11 16 17 19 20 23 24 25 27 29 30 32 36 40 41 44 45 47 48 49 50 56 57 58 60 61 62 63 68 71 73 74 78 81 82 83 84 85 87 88 93 95 98 99 100 102 105 107 110 111 113 114 116 117 122 127 128 130 131 132 134 135 138 140 141 145 148 149 150 153 154 155 156 157 159 163 164 166 167 168 169 171 173 175 176 177 179 181 182 183 184 185 187 188 189 191 193 194 195 197 198 200 205 207 210 211 213 214 218 227 231 232 233 236 240 241 244 245 246 b 247 1 0 f # 10323 is_equal c a 247 1 0 2 6 7 8 9 11 13 16 20 21 24 32 33 34 37 39 40 41 42 43 44 45 47 49 50 52 55 56 57 62 65 67 69 70 78 79 81 82 83 86 89 90 91 95 97 98 99 102 103 104 108 111 114 115 116 117 120 121 127 129 131 134 136 137 138 151 153 155 158 163 164 165 168 170 172 174 176 177 181 183 184 186 187 188 189 192 193 195 196 197 199 202 204 205 207 208 209 210 212 215 216 218 219 220 223 224 225 226 227 228 229 235 237 238 239 240 241 243 244 246 b 247 1 0 2 6 7 8 9 11 13 16 20 21 24 32 33 34 37 39 40 41 42 43 44 45 47 49 50 52 55 56 57 62 65 67 69 70 78 79 81 82 83 86 89 90 91 95 97 98 99 102 103 104 108 111 114 115 116 117 120 121 127 129 131 134 136 137 138 151 153 155 158 163 164 165 168 170 172 174 176 177 181 183 184 186 187 188 189 192 193 195 196 197 199 202 204 205 207 208 209 210 212 215 216 218 219 220 223 224 225 226 227 228 229 235 237 238 239 240 241 243 244 246 # 10324 is_equal c a 247 1 0 2 6 7 8 9 11 13 16 20 21 24 32 33 34 37 39 40 41 42 43 44 45 47 49 50 52 55 56 57 62 65 67 69 70 78 79 81 82 83 86 89 90 91 95 97 98 99 102 103 104 108 111 114 115 116 117 120 121 127 129 131 134 136 137 138 151 153 155 158 163 164 165 168 170 172 174 176 177 181 183 184 186 187 188 189 192 193 195 196 197 199 202 204 205 207 208 209 210 212 215 216 218 219 220 223 224 225 226 227 228 229 235 237 238 239 240 241 243 244 246 b 247 1 0 0 1 4 5 6 7 8 14 16 18 19 20 21 23 24 26 27 30 31 35 36 38 39 40 43 44 48 53 56 60 63 65 66 68 69 71 72 74 75 76 80 82 86 93 95 100 101 103 105 106 107 109 111 115 116 117 118 123 125 126 127 128 131 132 134 137 139 140 141 142 145 146 147 148 149 153 154 155 157 160 161 163 167 171 181 183 187 189 192 193 195 198 199 200 202 205 206 207 210 212 216 217 220 221 224 225 233 235 236 238 241 242 245 246 # 10325 is_equal c a 247 1 0 e b 247 1 0 e # 10326 is_equal c a 247 1 0 e b 247 1 1 e # 10327 is_equal c a 247 1 0 e b 247 1 0 e # 10328 is_equal c a 247 1 0 e b 247 1 1 f # 10329 is_equal c a 247 1 0 e b 247 1 0 e # 10330 is_equal c a 247 1 0 e b 247 1 1 1 6 7 9 11 12 13 18 21 22 25 27 28 30 32 34 36 37 41 44 45 46 47 48 54 55 56 57 58 59 61 65 66 68 70 74 75 78 80 93 94 95 96 100 102 103 104 106 108 109 111 113 115 117 121 122 123 125 126 130 131 132 134 135 136 137 139 140 141 142 144 146 147 151 152 154 157 158 164 167 169 170 173 174 177 179 180 181 182 183 185 188 190 192 194 195 196 198 201 202 203 204 205 206 212 217 218 221 222 223 225 226 230 233 235 239 244 245 246 # 10331 is_equal c a 247 1 0 f b 247 1 0 f # 10332 is_equal c a 247 1 0 f b 247 1 1 e # 10333 is_equal c a 247 1 0 f b 247 1 0 f # 10334 is_equal c a 247 1 0 f b 247 1 1 f # 10335 is_equal c a 247 1 0 f b 247 1 0 f # 10336 is_equal c a 247 1 0 f b 247 1 1 0 1 6 9 10 11 12 16 18 19 20 21 22 23 27 30 38 39 41 42 46 47 50 53 54 55 58 61 62 63 64 68 69 71 72 75 77 78 79 81 83 86 87 89 91 92 93 94 95 97 99 100 101 102 103 104 106 109 111 113 114 115 116 117 118 120 121 124 134 137 138 139 143 144 146 147 148 149 151 152 153 155 158 160 162 165 167 170 171 174 177 180 181 184 188 190 191 195 197 198 199 200 201 202 204 205 206 208 210 214 216 218 219 222 223 224 225 226 228 229 230 231 232 233 235 240 242 245 246 # 10337 is_equal c a 247 1 0 1 3 5 6 8 9 17 19 21 23 27 28 33 35 36 37 39 40 41 49 51 52 53 54 58 63 65 68 69 73 74 75 79 81 82 83 87 88 90 92 94 98 99 103 104 109 110 111 113 114 115 117 118 119 121 123 128 129 131 133 134 139 140 152 153 156 157 158 159 160 162 163 168 169 171 173 176 177 178 180 182 183 188 189 190 191 193 194 197 198 199 200 202 203 204 205 207 208 211 212 213 214 217 220 222 225 226 228 229 232 235 237 238 239 242 246 b 247 1 0 1 3 5 6 8 9 17 19 21 23 27 28 33 35 36 37 39 40 41 49 51 52 53 54 58 63 65 68 69 73 74 75 79 81 82 83 87 88 90 92 94 98 99 103 104 109 110 111 113 114 115 117 118 119 121 123 128 129 131 133 134 139 140 152 153 156 157 158 159 160 162 163 168 169 171 173 176 177 178 180 182 183 188 189 190 191 193 194 197 198 199 200 202 203 204 205 207 208 211 212 213 214 217 220 222 225 226 228 229 232 235 237 238 239 242 246 # 10338 is_equal c a 247 1 0 1 3 5 6 8 9 17 19 21 23 27 28 33 35 36 37 39 40 41 49 51 52 53 54 58 63 65 68 69 73 74 75 79 81 82 83 87 88 90 92 94 98 99 103 104 109 110 111 113 114 115 117 118 119 121 123 128 129 131 133 134 139 140 152 153 156 157 158 159 160 162 163 168 169 171 173 176 177 178 180 182 183 188 189 190 191 193 194 197 198 199 200 202 203 204 205 207 208 211 212 213 214 217 220 222 225 226 228 229 232 235 237 238 239 242 246 b 247 1 1 e # 10339 is_equal c a 247 1 0 3 5 6 7 8 14 15 24 28 29 30 34 35 36 37 39 41 48 50 52 53 54 57 58 60 61 63 64 66 67 70 74 76 78 79 80 81 82 84 85 86 88 89 93 99 103 104 107 110 112 113 114 115 117 118 122 123 127 129 130 131 133 134 137 139 142 144 145 146 149 150 151 154 155 156 158 161 163 164 165 167 168 169 170 173 178 179 182 183 184 185 186 187 189 190 191 192 194 203 204 205 206 209 211 214 217 218 219 220 221 222 223 225 229 230 231 232 234 235 237 239 241 242 243 245 246 b 247 1 0 3 5 6 7 8 14 15 24 28 29 30 34 35 36 37 39 41 48 50 52 53 54 57 58 60 61 63 64 66 67 70 74 76 78 79 80 81 82 84 85 86 88 89 93 99 103 104 107 110 112 113 114 115 117 118 122 123 127 129 130 131 133 134 137 139 142 144 145 146 149 150 151 154 155 156 158 161 163 164 165 167 168 169 170 173 178 179 182 183 184 185 186 187 189 190 191 192 194 203 204 205 206 209 211 214 217 218 219 220 221 222 223 225 229 230 231 232 234 235 237 239 241 242 243 245 246 # 10340 is_equal c a 247 1 0 3 5 6 7 8 14 15 24 28 29 30 34 35 36 37 39 41 48 50 52 53 54 57 58 60 61 63 64 66 67 70 74 76 78 79 80 81 82 84 85 86 88 89 93 99 103 104 107 110 112 113 114 115 117 118 122 123 127 129 130 131 133 134 137 139 142 144 145 146 149 150 151 154 155 156 158 161 163 164 165 167 168 169 170 173 178 179 182 183 184 185 186 187 189 190 191 192 194 203 204 205 206 209 211 214 217 218 219 220 221 222 223 225 229 230 231 232 234 235 237 239 241 242 243 245 246 b 247 1 1 f # 10341 is_equal c a 247 1 0 0 1 2 3 4 5 6 9 10 11 17 20 21 22 23 25 32 35 41 43 45 47 49 52 57 59 60 61 63 64 65 66 69 70 71 72 73 74 76 81 82 83 85 87 88 89 90 91 94 98 99 102 105 106 111 114 115 117 118 119 120 121 122 126 127 128 130 132 133 134 136 137 138 143 145 146 147 148 149 150 151 152 154 156 157 159 166 170 171 172 174 177 178 180 181 182 183 185 188 189 191 193 195 197 199 202 204 205 207 208 211 214 218 219 221 222 223 224 226 227 230 231 232 234 239 240 241 242 244 246 b 247 1 0 0 1 2 3 4 5 6 9 10 11 17 20 21 22 23 25 32 35 41 43 45 47 49 52 57 59 60 61 63 64 65 66 69 70 71 72 73 74 76 81 82 83 85 87 88 89 90 91 94 98 99 102 105 106 111 114 115 117 118 119 120 121 122 126 127 128 130 132 133 134 136 137 138 143 145 146 147 148 149 150 151 152 154 156 157 159 166 170 171 172 174 177 178 180 181 182 183 185 188 189 191 193 195 197 199 202 204 205 207 208 211 214 218 219 221 222 223 224 226 227 230 231 232 234 239 240 241 242 244 246 # 10342 is_equal c a 247 1 0 0 1 2 3 4 5 6 9 10 11 17 20 21 22 23 25 32 35 41 43 45 47 49 52 57 59 60 61 63 64 65 66 69 70 71 72 73 74 76 81 82 83 85 87 88 89 90 91 94 98 99 102 105 106 111 114 115 117 118 119 120 121 122 126 127 128 130 132 133 134 136 137 138 143 145 146 147 148 149 150 151 152 154 156 157 159 166 170 171 172 174 177 178 180 181 182 183 185 188 189 191 193 195 197 199 202 204 205 207 208 211 214 218 219 221 222 223 224 226 227 230 231 232 234 239 240 241 242 244 246 b 247 1 1 1 4 7 12 13 14 19 20 21 23 24 29 30 32 34 35 36 37 41 44 46 48 51 53 56 57 60 62 63 64 67 69 71 72 73 75 77 78 82 84 86 87 92 93 95 97 98 99 100 101 102 103 104 107 112 114 115 116 117 118 120 121 122 123 124 125 128 135 136 137 138 139 143 146 154 158 159 160 163 164 165 166 167 169 170 171 174 175 176 178 179 180 184 186 187 188 189 190 199 201 203 207 208 210 211 212 215 218 221 222 223 228 233 234 235 236 238 239 240 241 243 244 245 246 # 10343 is_equal c a 247 1 1 e b 247 1 1 e # 10344 is_equal c a 247 1 1 e b 247 0 0 e # 10345 is_equal c a 247 1 1 e b 247 1 1 e # 10346 is_equal c a 247 1 1 e b 247 0 0 f # 10347 is_equal c a 247 1 1 e b 247 1 1 e # 10348 is_equal c a 247 1 1 e b 247 0 0 1 3 7 9 11 13 15 17 18 19 20 22 23 29 30 31 32 34 36 40 49 56 58 61 65 66 67 69 74 75 76 77 80 81 82 84 86 87 88 90 94 101 102 103 106 109 110 112 113 114 115 116 119 120 122 124 125 126 127 131 132 134 136 142 144 146 147 148 150 151 152 153 155 157 158 159 168 169 176 179 180 181 182 183 184 185 186 188 190 192 196 197 200 201 202 207 208 209 210 211 212 214 218 220 221 222 223 226 227 235 237 238 240 242 244 245 246 # 10349 is_equal c a 247 1 1 f b 247 1 1 f # 10350 is_equal c a 247 1 1 f b 247 0 0 e # 10351 is_equal c a 247 1 1 f b 247 1 1 f # 10352 is_equal c a 247 1 1 f b 247 0 0 f # 10353 is_equal c a 247 1 1 f b 247 1 1 f # 10354 is_equal c a 247 1 1 f b 247 0 0 2 3 6 7 8 9 10 11 16 18 19 20 21 24 25 28 29 33 42 44 46 47 48 49 50 51 52 54 55 58 62 66 67 70 71 72 73 75 78 79 81 82 84 85 86 88 89 94 97 99 102 105 112 114 115 116 117 119 120 121 123 124 125 128 129 131 132 138 140 142 143 145 146 149 152 153 155 156 157 161 164 165 166 170 171 172 173 174 178 179 184 186 187 191 192 193 195 197 199 201 202 204 208 214 216 217 220 222 223 226 227 231 234 235 236 239 240 244 245 246 # 10355 is_equal c a 247 1 1 0 1 2 4 7 8 10 12 13 14 20 21 23 24 25 26 27 28 29 30 31 32 33 39 40 41 43 44 48 49 51 52 53 56 59 62 64 66 68 69 71 72 73 75 77 79 81 82 84 86 87 88 90 93 96 98 99 101 104 105 107 108 110 113 115 116 118 119 122 123 128 130 131 135 138 140 141 144 145 147 149 151 154 155 156 158 159 161 162 163 165 166 167 169 172 173 174 176 177 179 180 181 182 188 190 193 194 195 196 197 198 201 202 204 206 209 212 214 215 216 222 223 224 225 227 230 231 233 235 237 239 240 241 243 246 b 247 1 1 0 1 2 4 7 8 10 12 13 14 20 21 23 24 25 26 27 28 29 30 31 32 33 39 40 41 43 44 48 49 51 52 53 56 59 62 64 66 68 69 71 72 73 75 77 79 81 82 84 86 87 88 90 93 96 98 99 101 104 105 107 108 110 113 115 116 118 119 122 123 128 130 131 135 138 140 141 144 145 147 149 151 154 155 156 158 159 161 162 163 165 166 167 169 172 173 174 176 177 179 180 181 182 188 190 193 194 195 196 197 198 201 202 204 206 209 212 214 215 216 222 223 224 225 227 230 231 233 235 237 239 240 241 243 246 # 10356 is_equal c a 247 1 1 0 1 2 4 7 8 10 12 13 14 20 21 23 24 25 26 27 28 29 30 31 32 33 39 40 41 43 44 48 49 51 52 53 56 59 62 64 66 68 69 71 72 73 75 77 79 81 82 84 86 87 88 90 93 96 98 99 101 104 105 107 108 110 113 115 116 118 119 122 123 128 130 131 135 138 140 141 144 145 147 149 151 154 155 156 158 159 161 162 163 165 166 167 169 172 173 174 176 177 179 180 181 182 188 190 193 194 195 196 197 198 201 202 204 206 209 212 214 215 216 222 223 224 225 227 230 231 233 235 237 239 240 241 243 246 b 247 0 0 e # 10357 is_equal c a 247 1 1 0 2 4 7 9 11 14 16 17 18 19 20 21 23 24 26 32 34 35 39 41 42 43 45 47 49 50 52 53 58 59 66 67 70 71 77 79 80 86 88 89 95 96 98 100 102 104 106 110 111 115 116 122 123 124 127 128 130 131 132 133 134 135 137 138 139 140 141 142 147 148 152 154 155 158 160 161 162 164 165 168 170 171 173 176 179 180 181 182 183 185 186 187 189 190 193 194 196 197 199 205 206 210 213 215 216 220 222 226 231 232 233 235 239 240 242 246 b 247 1 1 0 2 4 7 9 11 14 16 17 18 19 20 21 23 24 26 32 34 35 39 41 42 43 45 47 49 50 52 53 58 59 66 67 70 71 77 79 80 86 88 89 95 96 98 100 102 104 106 110 111 115 116 122 123 124 127 128 130 131 132 133 134 135 137 138 139 140 141 142 147 148 152 154 155 158 160 161 162 164 165 168 170 171 173 176 179 180 181 182 183 185 186 187 189 190 193 194 196 197 199 205 206 210 213 215 216 220 222 226 231 232 233 235 239 240 242 246 # 10358 is_equal c a 247 1 1 0 2 4 7 9 11 14 16 17 18 19 20 21 23 24 26 32 34 35 39 41 42 43 45 47 49 50 52 53 58 59 66 67 70 71 77 79 80 86 88 89 95 96 98 100 102 104 106 110 111 115 116 122 123 124 127 128 130 131 132 133 134 135 137 138 139 140 141 142 147 148 152 154 155 158 160 161 162 164 165 168 170 171 173 176 179 180 181 182 183 185 186 187 189 190 193 194 196 197 199 205 206 210 213 215 216 220 222 226 231 232 233 235 239 240 242 246 b 247 0 0 f # 10359 is_equal c a 247 1 1 3 5 7 9 10 11 13 16 17 19 21 22 27 30 31 32 37 39 40 42 45 46 47 48 50 52 53 54 56 57 61 65 66 68 71 72 73 75 76 77 78 79 81 86 89 90 91 92 96 98 99 100 101 104 105 107 108 110 111 115 116 117 119 120 122 123 125 129 131 132 133 135 137 138 141 143 149 152 153 156 157 158 160 163 164 165 166 168 169 170 172 173 174 179 181 184 185 186 187 188 189 190 192 195 196 197 199 200 202 205 206 207 210 211 212 214 215 217 219 224 225 227 228 229 234 237 239 240 241 242 243 245 246 b 247 1 1 3 5 7 9 10 11 13 16 17 19 21 22 27 30 31 32 37 39 40 42 45 46 47 48 50 52 53 54 56 57 61 65 66 68 71 72 73 75 76 77 78 79 81 86 89 90 91 92 96 98 99 100 101 104 105 107 108 110 111 115 116 117 119 120 122 123 125 129 131 132 133 135 137 138 141 143 149 152 153 156 157 158 160 163 164 165 166 168 169 170 172 173 174 179 181 184 185 186 187 188 189 190 192 195 196 197 199 200 202 205 206 207 210 211 212 214 215 217 219 224 225 227 228 229 234 237 239 240 241 242 243 245 246 # 10360 is_equal c a 247 1 1 3 5 7 9 10 11 13 16 17 19 21 22 27 30 31 32 37 39 40 42 45 46 47 48 50 52 53 54 56 57 61 65 66 68 71 72 73 75 76 77 78 79 81 86 89 90 91 92 96 98 99 100 101 104 105 107 108 110 111 115 116 117 119 120 122 123 125 129 131 132 133 135 137 138 141 143 149 152 153 156 157 158 160 163 164 165 166 168 169 170 172 173 174 179 181 184 185 186 187 188 189 190 192 195 196 197 199 200 202 205 206 207 210 211 212 214 215 217 219 224 225 227 228 229 234 237 239 240 241 242 243 245 246 b 247 0 0 4 5 6 9 10 13 14 15 18 19 20 21 22 23 24 25 27 31 32 33 35 39 40 45 51 54 55 58 64 66 68 71 73 75 76 77 79 82 84 85 87 88 93 94 97 98 99 100 102 105 107 108 110 111 112 113 115 116 117 118 119 123 124 125 128 131 132 133 135 136 138 139 140 141 142 143 144 146 147 152 153 155 156 158 160 168 170 171 173 174 176 177 181 182 183 185 186 189 190 192 193 194 200 206 209 212 219 220 222 223 225 227 228 229 231 233 234 237 238 240 242 246 # 10361 is_equal c a 247 1 1 e b 247 1 1 e # 10362 is_equal c a 247 1 1 e b 247 0 1 e # 10363 is_equal c a 247 1 1 e b 247 1 1 e # 10364 is_equal c a 247 1 1 e b 247 0 1 f # 10365 is_equal c a 247 1 1 e b 247 1 1 e # 10366 is_equal c a 247 1 1 e b 247 0 1 0 1 4 7 8 10 13 14 15 16 18 20 21 27 28 29 30 31 33 37 38 40 41 42 44 47 48 51 52 54 56 59 60 62 65 66 67 68 69 70 71 72 73 74 82 84 85 86 87 90 92 93 94 95 96 98 101 103 107 109 110 111 113 116 120 123 124 126 127 128 131 134 135 136 145 146 149 150 154 157 158 164 168 169 170 171 173 175 176 179 181 186 187 188 189 190 192 194 195 197 200 201 203 204 205 206 207 208 209 210 212 213 214 218 221 226 227 230 231 234 236 237 238 239 240 241 243 244 245 246 # 10367 is_equal c a 247 1 1 f b 247 1 1 f # 10368 is_equal c a 247 1 1 f b 247 0 1 e # 10369 is_equal c a 247 1 1 f b 247 1 1 f # 10370 is_equal c a 247 1 1 f b 247 0 1 f # 10371 is_equal c a 247 1 1 f b 247 1 1 f # 10372 is_equal c a 247 1 1 f b 247 0 1 0 2 4 5 6 7 9 10 11 14 19 21 22 24 32 35 38 39 41 42 44 45 46 48 49 52 53 55 57 59 61 62 67 68 69 71 72 75 76 79 85 86 87 88 90 92 93 94 97 98 99 100 102 103 104 107 108 109 110 111 113 115 116 118 122 126 129 135 136 137 138 139 142 143 145 150 151 152 155 156 157 160 161 162 163 166 168 169 173 175 176 177 178 180 181 182 183 186 190 191 193 194 195 196 197 199 200 203 205 206 209 210 213 215 216 217 218 221 231 232 233 234 236 237 238 241 242 243 245 246 # 10373 is_equal c a 247 1 1 1 2 3 6 7 8 10 14 17 19 20 22 23 24 25 26 27 29 31 32 35 36 38 39 40 41 46 47 50 51 53 54 57 58 59 64 65 69 72 75 76 78 79 82 83 85 87 88 92 93 96 97 98 100 102 104 111 112 114 115 118 125 126 128 129 130 132 134 135 136 140 141 147 150 151 155 157 158 160 161 162 163 165 167 169 171 175 176 177 183 184 190 194 201 203 205 207 208 209 214 216 218 220 221 222 225 226 230 232 237 240 242 244 245 246 b 247 1 1 1 2 3 6 7 8 10 14 17 19 20 22 23 24 25 26 27 29 31 32 35 36 38 39 40 41 46 47 50 51 53 54 57 58 59 64 65 69 72 75 76 78 79 82 83 85 87 88 92 93 96 97 98 100 102 104 111 112 114 115 118 125 126 128 129 130 132 134 135 136 140 141 147 150 151 155 157 158 160 161 162 163 165 167 169 171 175 176 177 183 184 190 194 201 203 205 207 208 209 214 216 218 220 221 222 225 226 230 232 237 240 242 244 245 246 # 10374 is_equal c a 247 1 1 1 2 3 6 7 8 10 14 17 19 20 22 23 24 25 26 27 29 31 32 35 36 38 39 40 41 46 47 50 51 53 54 57 58 59 64 65 69 72 75 76 78 79 82 83 85 87 88 92 93 96 97 98 100 102 104 111 112 114 115 118 125 126 128 129 130 132 134 135 136 140 141 147 150 151 155 157 158 160 161 162 163 165 167 169 171 175 176 177 183 184 190 194 201 203 205 207 208 209 214 216 218 220 221 222 225 226 230 232 237 240 242 244 245 246 b 247 0 1 e # 10375 is_equal c a 247 1 1 0 2 8 9 15 17 18 19 21 22 23 27 34 35 36 42 44 45 48 51 52 54 56 61 62 63 64 65 66 67 68 69 73 74 76 77 78 79 82 86 88 89 92 95 96 97 99 100 101 104 105 106 107 108 109 115 116 118 122 123 124 125 126 127 128 130 131 132 133 135 136 139 141 143 145 147 148 152 155 157 165 166 171 175 177 178 185 187 188 189 190 191 192 196 200 201 202 206 209 210 211 212 216 217 219 222 225 226 230 231 232 233 238 239 240 242 243 244 b 247 1 1 0 2 8 9 15 17 18 19 21 22 23 27 34 35 36 42 44 45 48 51 52 54 56 61 62 63 64 65 66 67 68 69 73 74 76 77 78 79 82 86 88 89 92 95 96 97 99 100 101 104 105 106 107 108 109 115 116 118 122 123 124 125 126 127 128 130 131 132 133 135 136 139 141 143 145 147 148 152 155 157 165 166 171 175 177 178 185 187 188 189 190 191 192 196 200 201 202 206 209 210 211 212 216 217 219 222 225 226 230 231 232 233 238 239 240 242 243 244 # 10376 is_equal c a 247 1 1 0 2 8 9 15 17 18 19 21 22 23 27 34 35 36 42 44 45 48 51 52 54 56 61 62 63 64 65 66 67 68 69 73 74 76 77 78 79 82 86 88 89 92 95 96 97 99 100 101 104 105 106 107 108 109 115 116 118 122 123 124 125 126 127 128 130 131 132 133 135 136 139 141 143 145 147 148 152 155 157 165 166 171 175 177 178 185 187 188 189 190 191 192 196 200 201 202 206 209 210 211 212 216 217 219 222 225 226 230 231 232 233 238 239 240 242 243 244 b 247 0 1 f # 10377 is_equal c a 247 1 1 0 1 2 5 7 10 11 13 14 16 18 20 21 22 24 27 31 35 37 38 39 40 41 42 44 46 47 48 49 50 51 52 53 55 58 59 60 62 67 68 71 75 76 78 79 81 83 84 85 86 90 92 93 94 96 98 99 100 102 103 104 106 108 109 113 117 119 122 125 128 131 132 134 135 136 137 139 142 143 147 149 151 154 158 160 161 162 163 165 166 167 169 170 171 173 174 175 176 180 181 182 185 186 187 190 193 195 196 198 203 209 212 214 219 220 225 227 229 235 236 237 238 240 242 243 244 b 247 1 1 0 1 2 5 7 10 11 13 14 16 18 20 21 22 24 27 31 35 37 38 39 40 41 42 44 46 47 48 49 50 51 52 53 55 58 59 60 62 67 68 71 75 76 78 79 81 83 84 85 86 90 92 93 94 96 98 99 100 102 103 104 106 108 109 113 117 119 122 125 128 131 132 134 135 136 137 139 142 143 147 149 151 154 158 160 161 162 163 165 166 167 169 170 171 173 174 175 176 180 181 182 185 186 187 190 193 195 196 198 203 209 212 214 219 220 225 227 229 235 236 237 238 240 242 243 244 # 10378 is_equal c a 247 1 1 0 1 2 5 7 10 11 13 14 16 18 20 21 22 24 27 31 35 37 38 39 40 41 42 44 46 47 48 49 50 51 52 53 55 58 59 60 62 67 68 71 75 76 78 79 81 83 84 85 86 90 92 93 94 96 98 99 100 102 103 104 106 108 109 113 117 119 122 125 128 131 132 134 135 136 137 139 142 143 147 149 151 154 158 160 161 162 163 165 166 167 169 170 171 173 174 175 176 180 181 182 185 186 187 190 193 195 196 198 203 209 212 214 219 220 225 227 229 235 236 237 238 240 242 243 244 b 247 0 1 1 4 5 6 8 9 10 11 13 15 17 18 19 21 22 23 29 31 32 33 35 36 39 42 43 44 45 48 54 55 56 58 65 69 70 71 73 76 77 81 82 83 84 85 87 90 91 92 96 97 98 100 101 102 103 109 110 111 114 120 123 129 130 131 132 133 134 139 140 142 144 146 147 148 153 155 164 168 169 170 171 173 175 178 179 183 185 186 190 191 192 194 195 196 198 199 201 203 204 205 206 207 208 209 210 218 220 221 223 228 233 234 237 242 243 244 # 10379 is_equal c a 247 1 1 e b 247 1 1 e # 10380 is_equal c a 247 1 1 e b 247 1 0 e # 10381 is_equal c a 247 1 1 e b 247 1 1 e # 10382 is_equal c a 247 1 1 e b 247 1 0 f # 10383 is_equal c a 247 1 1 e b 247 1 1 e # 10384 is_equal c a 247 1 1 e b 247 1 0 0 1 4 6 7 8 9 12 13 15 18 20 21 22 25 27 28 29 31 32 35 36 37 40 41 42 43 46 47 49 53 55 56 57 58 59 61 65 66 68 70 71 75 76 80 81 84 85 87 88 89 92 93 96 98 100 104 105 106 107 108 110 111 115 117 118 120 123 125 127 129 133 134 137 144 145 148 153 155 156 158 162 163 164 165 169 170 171 172 175 177 178 180 182 185 189 190 191 193 194 196 198 201 202 206 207 208 209 210 211 213 215 216 217 220 223 228 229 231 232 235 236 238 239 241 242 243 246 # 10385 is_equal c a 247 1 1 f b 247 1 1 f # 10386 is_equal c a 247 1 1 f b 247 1 0 e # 10387 is_equal c a 247 1 1 f b 247 1 1 f # 10388 is_equal c a 247 1 1 f b 247 1 0 f # 10389 is_equal c a 247 1 1 f b 247 1 1 f # 10390 is_equal c a 247 1 1 f b 247 1 0 1 4 5 6 7 9 10 12 13 14 15 16 18 19 23 26 28 29 30 31 32 35 36 42 43 45 46 49 50 52 56 58 61 64 65 66 67 72 73 76 78 79 80 81 83 85 87 92 93 94 95 96 97 98 102 106 107 110 117 119 121 124 125 127 128 131 133 135 137 138 139 141 143 145 147 148 149 151 152 153 155 156 158 160 161 164 165 166 168 169 170 174 175 176 179 180 181 182 183 184 185 190 199 203 204 207 209 212 215 217 219 220 222 224 227 228 229 230 234 238 239 244 245 # 10391 is_equal c a 247 1 1 0 3 5 6 7 16 17 19 21 22 26 27 32 33 34 37 39 40 44 45 46 48 51 55 56 57 58 61 64 66 72 73 76 78 83 84 85 87 88 93 94 95 97 100 102 103 107 111 112 113 114 115 116 118 121 122 123 124 126 127 129 134 135 138 139 142 145 146 147 148 149 152 156 157 159 160 161 167 169 170 171 173 180 181 182 183 187 189 190 192 194 195 197 198 199 200 202 206 207 219 222 223 224 225 226 228 229 231 234 237 239 240 244 245 246 b 247 1 1 0 3 5 6 7 16 17 19 21 22 26 27 32 33 34 37 39 40 44 45 46 48 51 55 56 57 58 61 64 66 72 73 76 78 83 84 85 87 88 93 94 95 97 100 102 103 107 111 112 113 114 115 116 118 121 122 123 124 126 127 129 134 135 138 139 142 145 146 147 148 149 152 156 157 159 160 161 167 169 170 171 173 180 181 182 183 187 189 190 192 194 195 197 198 199 200 202 206 207 219 222 223 224 225 226 228 229 231 234 237 239 240 244 245 246 # 10392 is_equal c a 247 1 1 0 3 5 6 7 16 17 19 21 22 26 27 32 33 34 37 39 40 44 45 46 48 51 55 56 57 58 61 64 66 72 73 76 78 83 84 85 87 88 93 94 95 97 100 102 103 107 111 112 113 114 115 116 118 121 122 123 124 126 127 129 134 135 138 139 142 145 146 147 148 149 152 156 157 159 160 161 167 169 170 171 173 180 181 182 183 187 189 190 192 194 195 197 198 199 200 202 206 207 219 222 223 224 225 226 228 229 231 234 237 239 240 244 245 246 b 247 1 0 e # 10393 is_equal c a 247 1 1 3 5 6 9 11 14 19 20 21 23 24 25 29 30 31 34 35 36 37 41 43 44 53 54 58 59 61 62 64 67 71 73 74 76 77 78 82 83 84 85 88 92 94 95 96 97 98 99 102 103 106 109 110 111 112 114 115 120 121 123 126 127 129 130 131 133 138 139 142 144 145 149 151 152 153 154 155 158 161 164 165 166 167 169 170 174 177 180 181 184 188 190 191 193 196 199 201 206 207 211 213 216 217 219 222 223 227 228 230 231 235 236 238 239 241 242 243 244 246 b 247 1 1 3 5 6 9 11 14 19 20 21 23 24 25 29 30 31 34 35 36 37 41 43 44 53 54 58 59 61 62 64 67 71 73 74 76 77 78 82 83 84 85 88 92 94 95 96 97 98 99 102 103 106 109 110 111 112 114 115 120 121 123 126 127 129 130 131 133 138 139 142 144 145 149 151 152 153 154 155 158 161 164 165 166 167 169 170 174 177 180 181 184 188 190 191 193 196 199 201 206 207 211 213 216 217 219 222 223 227 228 230 231 235 236 238 239 241 242 243 244 246 # 10394 is_equal c a 247 1 1 3 5 6 9 11 14 19 20 21 23 24 25 29 30 31 34 35 36 37 41 43 44 53 54 58 59 61 62 64 67 71 73 74 76 77 78 82 83 84 85 88 92 94 95 96 97 98 99 102 103 106 109 110 111 112 114 115 120 121 123 126 127 129 130 131 133 138 139 142 144 145 149 151 152 153 154 155 158 161 164 165 166 167 169 170 174 177 180 181 184 188 190 191 193 196 199 201 206 207 211 213 216 217 219 222 223 227 228 230 231 235 236 238 239 241 242 243 244 246 b 247 1 0 f # 10395 is_equal c a 247 1 1 0 4 5 7 8 11 13 14 18 21 22 25 28 29 33 34 40 43 48 49 50 52 53 56 57 58 61 62 63 64 65 66 70 71 72 74 75 76 79 82 84 86 87 91 100 108 109 110 111 113 117 118 119 123 125 127 129 132 133 134 138 139 141 142 144 146 149 150 151 152 154 157 159 160 163 165 169 172 174 176 177 178 179 181 182 186 187 190 192 193 194 195 196 201 202 203 205 211 212 213 218 219 220 221 224 227 229 230 231 232 233 234 238 239 241 242 244 246 b 247 1 1 0 4 5 7 8 11 13 14 18 21 22 25 28 29 33 34 40 43 48 49 50 52 53 56 57 58 61 62 63 64 65 66 70 71 72 74 75 76 79 82 84 86 87 91 100 108 109 110 111 113 117 118 119 123 125 127 129 132 133 134 138 139 141 142 144 146 149 150 151 152 154 157 159 160 163 165 169 172 174 176 177 178 179 181 182 186 187 190 192 193 194 195 196 201 202 203 205 211 212 213 218 219 220 221 224 227 229 230 231 232 233 234 238 239 241 242 244 246 # 10396 is_equal c a 247 1 1 0 4 5 7 8 11 13 14 18 21 22 25 28 29 33 34 40 43 48 49 50 52 53 56 57 58 61 62 63 64 65 66 70 71 72 74 75 76 79 82 84 86 87 91 100 108 109 110 111 113 117 118 119 123 125 127 129 132 133 134 138 139 141 142 144 146 149 150 151 152 154 157 159 160 163 165 169 172 174 176 177 178 179 181 182 186 187 190 192 193 194 195 196 201 202 203 205 211 212 213 218 219 220 221 224 227 229 230 231 232 233 234 238 239 241 242 244 246 b 247 1 0 1 2 4 6 9 10 11 13 14 16 17 18 22 24 25 28 29 30 32 33 34 37 38 40 47 52 54 57 58 60 61 62 65 66 67 69 73 77 81 82 84 85 86 88 94 95 96 97 100 101 102 103 107 109 111 112 114 115 116 117 118 119 124 127 129 131 133 134 135 138 141 146 148 149 150 154 157 158 159 160 162 165 169 170 171 172 174 177 180 182 184 186 189 190 192 193 197 198 199 200 201 203 204 206 210 212 213 214 215 217 218 219 221 222 224 226 230 231 234 236 237 238 241 242 245 246 # 10397 is_equal c a 247 1 1 e b 247 1 1 e # 10398 is_equal c a 247 1 1 e b 247 1 1 e # 10399 is_equal c a 247 1 1 e b 247 1 1 e # 10400 is_equal c a 247 1 1 e b 247 1 1 f # 10401 is_equal c a 247 1 1 e b 247 1 1 e # 10402 is_equal c a 247 1 1 e b 247 1 1 0 1 2 5 7 8 9 11 13 14 18 21 23 24 25 26 29 32 34 35 38 39 42 45 46 49 50 51 54 57 58 59 60 61 62 63 65 66 68 72 74 75 79 82 83 84 85 87 88 89 90 91 92 93 94 98 100 102 103 104 106 108 112 114 124 125 130 133 137 141 143 144 148 149 151 153 156 157 158 160 161 162 165 166 167 168 170 172 175 176 177 179 180 181 182 183 185 188 189 191 192 197 198 201 205 213 215 216 218 219 224 225 227 228 231 233 235 239 240 241 244 246 # 10403 is_equal c a 247 1 1 f b 247 1 1 f # 10404 is_equal c a 247 1 1 f b 247 1 1 e # 10405 is_equal c a 247 1 1 f b 247 1 1 f # 10406 is_equal c a 247 1 1 f b 247 1 1 f # 10407 is_equal c a 247 1 1 f b 247 1 1 f # 10408 is_equal c a 247 1 1 f b 247 1 1 0 1 2 6 7 9 13 18 20 22 23 26 31 35 36 38 41 43 44 45 47 49 51 53 54 57 58 59 62 63 64 66 67 68 71 73 74 76 77 79 80 82 85 86 87 89 90 91 96 100 107 109 110 113 115 116 118 120 122 124 127 128 129 133 134 136 140 145 146 149 156 157 158 159 160 163 164 165 167 169 173 175 176 179 181 185 186 188 189 190 192 195 197 198 200 202 204 207 208 209 210 211 213 215 216 218 220 221 222 223 226 229 230 233 234 236 238 239 241 242 243 244 # 10409 is_equal c a 247 1 1 3 6 8 12 16 17 19 20 21 22 23 25 27 29 31 33 34 35 37 41 45 46 47 48 50 51 53 55 56 57 58 60 63 66 67 69 70 71 72 75 78 79 80 81 82 84 86 87 89 90 91 92 94 97 98 99 100 101 105 107 108 110 111 114 116 117 119 120 122 123 125 126 127 128 129 130 132 134 136 139 140 141 142 145 146 148 155 158 159 161 164 166 167 168 169 170 171 172 173 178 180 181 182 185 192 193 194 195 198 201 204 205 206 209 212 215 217 220 221 222 223 224 225 226 229 230 231 232 235 238 239 240 243 244 245 246 b 247 1 1 3 6 8 12 16 17 19 20 21 22 23 25 27 29 31 33 34 35 37 41 45 46 47 48 50 51 53 55 56 57 58 60 63 66 67 69 70 71 72 75 78 79 80 81 82 84 86 87 89 90 91 92 94 97 98 99 100 101 105 107 108 110 111 114 116 117 119 120 122 123 125 126 127 128 129 130 132 134 136 139 140 141 142 145 146 148 155 158 159 161 164 166 167 168 169 170 171 172 173 178 180 181 182 185 192 193 194 195 198 201 204 205 206 209 212 215 217 220 221 222 223 224 225 226 229 230 231 232 235 238 239 240 243 244 245 246 # 10410 is_equal c a 247 1 1 3 6 8 12 16 17 19 20 21 22 23 25 27 29 31 33 34 35 37 41 45 46 47 48 50 51 53 55 56 57 58 60 63 66 67 69 70 71 72 75 78 79 80 81 82 84 86 87 89 90 91 92 94 97 98 99 100 101 105 107 108 110 111 114 116 117 119 120 122 123 125 126 127 128 129 130 132 134 136 139 140 141 142 145 146 148 155 158 159 161 164 166 167 168 169 170 171 172 173 178 180 181 182 185 192 193 194 195 198 201 204 205 206 209 212 215 217 220 221 222 223 224 225 226 229 230 231 232 235 238 239 240 243 244 245 246 b 247 1 1 e # 10411 is_equal c a 247 1 1 0 11 14 20 21 23 24 25 26 29 34 35 36 39 40 41 42 47 48 49 50 52 56 58 60 62 64 65 66 72 76 77 78 80 81 82 83 90 93 94 96 97 98 100 103 105 108 110 111 113 114 116 117 118 122 123 125 126 127 129 132 133 136 137 138 139 140 142 146 150 151 152 153 159 165 166 167 168 170 171 172 174 176 177 184 185 189 193 194 196 199 200 203 204 207 209 212 214 215 220 221 222 224 225 226 227 230 236 238 239 244 b 247 1 1 0 11 14 20 21 23 24 25 26 29 34 35 36 39 40 41 42 47 48 49 50 52 56 58 60 62 64 65 66 72 76 77 78 80 81 82 83 90 93 94 96 97 98 100 103 105 108 110 111 113 114 116 117 118 122 123 125 126 127 129 132 133 136 137 138 139 140 142 146 150 151 152 153 159 165 166 167 168 170 171 172 174 176 177 184 185 189 193 194 196 199 200 203 204 207 209 212 214 215 220 221 222 224 225 226 227 230 236 238 239 244 # 10412 is_equal c a 247 1 1 0 11 14 20 21 23 24 25 26 29 34 35 36 39 40 41 42 47 48 49 50 52 56 58 60 62 64 65 66 72 76 77 78 80 81 82 83 90 93 94 96 97 98 100 103 105 108 110 111 113 114 116 117 118 122 123 125 126 127 129 132 133 136 137 138 139 140 142 146 150 151 152 153 159 165 166 167 168 170 171 172 174 176 177 184 185 189 193 194 196 199 200 203 204 207 209 212 214 215 220 221 222 224 225 226 227 230 236 238 239 244 b 247 1 1 f # 10413 is_equal c a 247 1 1 0 2 5 7 8 11 13 15 17 18 24 25 26 27 32 33 34 36 38 40 45 46 49 50 51 59 60 66 68 69 70 73 74 76 77 78 80 81 85 87 89 91 93 95 96 98 99 100 101 104 105 106 108 109 110 112 113 114 116 118 119 120 122 126 128 129 130 131 132 134 137 138 139 141 144 152 154 156 157 159 160 164 166 167 169 170 171 172 174 176 178 180 182 183 184 187 189 190 191 195 196 198 199 201 202 205 206 209 216 219 221 222 227 228 230 233 234 235 239 241 242 244 246 b 247 1 1 0 2 5 7 8 11 13 15 17 18 24 25 26 27 32 33 34 36 38 40 45 46 49 50 51 59 60 66 68 69 70 73 74 76 77 78 80 81 85 87 89 91 93 95 96 98 99 100 101 104 105 106 108 109 110 112 113 114 116 118 119 120 122 126 128 129 130 131 132 134 137 138 139 141 144 152 154 156 157 159 160 164 166 167 169 170 171 172 174 176 178 180 182 183 184 187 189 190 191 195 196 198 199 201 202 205 206 209 216 219 221 222 227 228 230 233 234 235 239 241 242 244 246 # 10414 is_equal c a 247 1 1 0 2 5 7 8 11 13 15 17 18 24 25 26 27 32 33 34 36 38 40 45 46 49 50 51 59 60 66 68 69 70 73 74 76 77 78 80 81 85 87 89 91 93 95 96 98 99 100 101 104 105 106 108 109 110 112 113 114 116 118 119 120 122 126 128 129 130 131 132 134 137 138 139 141 144 152 154 156 157 159 160 164 166 167 169 170 171 172 174 176 178 180 182 183 184 187 189 190 191 195 196 198 199 201 202 205 206 209 216 219 221 222 227 228 230 233 234 235 239 241 242 244 246 b 247 1 1 0 1 2 3 4 5 6 10 15 16 17 19 21 25 27 28 31 38 39 41 42 43 49 51 52 54 58 60 63 64 65 68 69 72 75 77 79 80 83 84 86 88 89 90 96 97 98 99 100 105 107 109 110 114 116 117 118 120 121 122 124 126 127 129 130 131 135 137 138 139 140 142 143 144 145 148 149 150 151 152 153 155 158 159 161 162 163 171 172 174 178 181 183 184 185 186 191 193 197 198 203 207 208 210 211 214 216 217 218 222 226 229 230 231 234 235 236 239 240 242 244 245 246 # 10415 is_equal c a 0 0 0 e b 0 0 0 e # 10416 is_subset c a 0 0 0 e b 0 0 0 e # 10417 is_subset c a 0 0 0 e b 0 0 0 e # 10418 is_subset c a 0 0 0 e b 0 0 0 e # 10419 is_subset c a 0 0 0 e b 0 0 0 e # 10420 is_subset c a 0 0 0 e b 0 0 0 # 10421 is_subset c a 0 0 0 e b 0 0 0 e # 10422 is_subset c a 0 0 0 e b 0 0 0 e # 10423 is_subset c a 0 0 0 e b 0 0 0 e # 10424 is_subset c a 0 0 0 e b 0 0 0 e # 10425 is_subset c a 0 0 0 e b 0 0 0 e # 10426 is_subset c a 0 0 0 e b 0 0 0 # 10427 is_subset c a 0 0 0 b 0 0 0 # 10428 is_subset c a 0 0 0 b 0 0 0 e # 10429 is_subset c a 0 0 0 b 0 0 0 # 10430 is_subset c a 0 0 0 b 0 0 0 e # 10431 is_subset c a 0 0 0 b 0 0 0 # 10432 is_subset c a 0 0 0 b 0 0 0 # 10433 is_subset c a 0 0 0 e b 0 0 0 e # 10434 is_subset c a 0 0 0 e b 0 0 1 e # 10435 is_subset c a 0 0 0 e b 0 0 0 e # 10436 is_subset c a 0 0 0 e b 0 0 1 e # 10437 is_subset c a 0 0 0 e b 0 0 0 e # 10438 is_subset c a 0 0 0 e b 0 0 1 # 10439 is_subset c a 0 0 0 e b 0 0 0 e # 10440 is_subset c a 0 0 0 e b 0 0 1 e # 10441 is_subset c a 0 0 0 e b 0 0 0 e # 10442 is_subset c a 0 0 0 e b 0 0 1 e # 10443 is_subset c a 0 0 0 e b 0 0 0 e # 10444 is_subset c a 0 0 0 e b 0 0 1 # 10445 is_subset c a 0 0 0 b 0 0 0 # 10446 is_subset c a 0 0 0 b 0 0 1 e # 10447 is_subset c a 0 0 0 b 0 0 0 # 10448 is_subset c a 0 0 0 b 0 0 1 e # 10449 is_subset c a 0 0 0 b 0 0 0 # 10450 is_subset c a 0 0 0 b 0 0 1 # 10451 is_subset c a 0 0 0 e b 0 0 0 e # 10452 is_subset c a 0 0 0 e b 0 1 0 e # 10453 is_subset c a 0 0 0 e b 0 0 0 e # 10454 is_subset c a 0 0 0 e b 0 1 0 e # 10455 is_subset c a 0 0 0 e b 0 0 0 e # 10456 is_subset c a 0 0 0 e b 0 1 0 # 10457 is_subset c a 0 0 0 e b 0 0 0 e # 10458 is_subset c a 0 0 0 e b 0 1 0 e # 10459 is_subset c a 0 0 0 e b 0 0 0 e # 10460 is_subset c a 0 0 0 e b 0 1 0 e # 10461 is_subset c a 0 0 0 e b 0 0 0 e # 10462 is_subset c a 0 0 0 e b 0 1 0 # 10463 is_subset c a 0 0 0 b 0 0 0 # 10464 is_subset c a 0 0 0 b 0 1 0 e # 10465 is_subset c a 0 0 0 b 0 0 0 # 10466 is_subset c a 0 0 0 b 0 1 0 e # 10467 is_subset c a 0 0 0 b 0 0 0 # 10468 is_subset c a 0 0 0 b 0 1 0 # 10469 is_subset c a 0 0 0 e b 0 0 0 e # 10470 is_subset c a 0 0 0 e b 0 1 1 e # 10471 is_subset c a 0 0 0 e b 0 0 0 e # 10472 is_subset c a 0 0 0 e b 0 1 1 e # 10473 is_subset c a 0 0 0 e b 0 0 0 e # 10474 is_subset c a 0 0 0 e b 0 1 1 # 10475 is_subset c a 0 0 0 e b 0 0 0 e # 10476 is_subset c a 0 0 0 e b 0 1 1 e # 10477 is_subset c a 0 0 0 e b 0 0 0 e # 10478 is_subset c a 0 0 0 e b 0 1 1 e # 10479 is_subset c a 0 0 0 e b 0 0 0 e # 10480 is_subset c a 0 0 0 e b 0 1 1 # 10481 is_subset c a 0 0 0 b 0 0 0 # 10482 is_subset c a 0 0 0 b 0 1 1 e # 10483 is_subset c a 0 0 0 b 0 0 0 # 10484 is_subset c a 0 0 0 b 0 1 1 e # 10485 is_subset c a 0 0 0 b 0 0 0 # 10486 is_subset c a 0 0 0 b 0 1 1 # 10487 is_subset c a 0 0 1 e b 0 0 1 e # 10488 is_subset c a 0 0 1 e b 0 0 0 e # 10489 is_subset c a 0 0 1 e b 0 0 1 e # 10490 is_subset c a 0 0 1 e b 0 0 0 e # 10491 is_subset c a 0 0 1 e b 0 0 1 e # 10492 is_subset c a 0 0 1 e b 0 0 0 # 10493 is_subset c a 0 0 1 e b 0 0 1 e # 10494 is_subset c a 0 0 1 e b 0 0 0 e # 10495 is_subset c a 0 0 1 e b 0 0 1 e # 10496 is_subset c a 0 0 1 e b 0 0 0 e # 10497 is_subset c a 0 0 1 e b 0 0 1 e # 10498 is_subset c a 0 0 1 e b 0 0 0 # 10499 is_subset c a 0 0 1 b 0 0 1 # 10500 is_subset c a 0 0 1 b 0 0 0 e # 10501 is_subset c a 0 0 1 b 0 0 1 # 10502 is_subset c a 0 0 1 b 0 0 0 e # 10503 is_subset c a 0 0 1 b 0 0 1 # 10504 is_subset c a 0 0 1 b 0 0 0 # 10505 is_subset c a 0 0 1 e b 0 0 1 e # 10506 is_subset c a 0 0 1 e b 0 0 1 e # 10507 is_subset c a 0 0 1 e b 0 0 1 e # 10508 is_subset c a 0 0 1 e b 0 0 1 e # 10509 is_subset c a 0 0 1 e b 0 0 1 e # 10510 is_subset c a 0 0 1 e b 0 0 1 # 10511 is_subset c a 0 0 1 e b 0 0 1 e # 10512 is_subset c a 0 0 1 e b 0 0 1 e # 10513 is_subset c a 0 0 1 e b 0 0 1 e # 10514 is_subset c a 0 0 1 e b 0 0 1 e # 10515 is_subset c a 0 0 1 e b 0 0 1 e # 10516 is_subset c a 0 0 1 e b 0 0 1 # 10517 is_subset c a 0 0 1 b 0 0 1 # 10518 is_subset c a 0 0 1 b 0 0 1 e # 10519 is_subset c a 0 0 1 b 0 0 1 # 10520 is_subset c a 0 0 1 b 0 0 1 e # 10521 is_subset c a 0 0 1 b 0 0 1 # 10522 is_subset c a 0 0 1 b 0 0 1 # 10523 is_subset c a 0 0 1 e b 0 0 1 e # 10524 is_subset c a 0 0 1 e b 0 1 0 e # 10525 is_subset c a 0 0 1 e b 0 0 1 e # 10526 is_subset c a 0 0 1 e b 0 1 0 e # 10527 is_subset c a 0 0 1 e b 0 0 1 e # 10528 is_subset c a 0 0 1 e b 0 1 0 # 10529 is_subset c a 0 0 1 e b 0 0 1 e # 10530 is_subset c a 0 0 1 e b 0 1 0 e # 10531 is_subset c a 0 0 1 e b 0 0 1 e # 10532 is_subset c a 0 0 1 e b 0 1 0 e # 10533 is_subset c a 0 0 1 e b 0 0 1 e # 10534 is_subset c a 0 0 1 e b 0 1 0 # 10535 is_subset c a 0 0 1 b 0 0 1 # 10536 is_subset c a 0 0 1 b 0 1 0 e # 10537 is_subset c a 0 0 1 b 0 0 1 # 10538 is_subset c a 0 0 1 b 0 1 0 e # 10539 is_subset c a 0 0 1 b 0 0 1 # 10540 is_subset c a 0 0 1 b 0 1 0 # 10541 is_subset c a 0 0 1 e b 0 0 1 e # 10542 is_subset c a 0 0 1 e b 0 1 1 e # 10543 is_subset c a 0 0 1 e b 0 0 1 e # 10544 is_subset c a 0 0 1 e b 0 1 1 e # 10545 is_subset c a 0 0 1 e b 0 0 1 e # 10546 is_subset c a 0 0 1 e b 0 1 1 # 10547 is_subset c a 0 0 1 e b 0 0 1 e # 10548 is_subset c a 0 0 1 e b 0 1 1 e # 10549 is_subset c a 0 0 1 e b 0 0 1 e # 10550 is_subset c a 0 0 1 e b 0 1 1 e # 10551 is_subset c a 0 0 1 e b 0 0 1 e # 10552 is_subset c a 0 0 1 e b 0 1 1 # 10553 is_subset c a 0 0 1 b 0 0 1 # 10554 is_subset c a 0 0 1 b 0 1 1 e # 10555 is_subset c a 0 0 1 b 0 0 1 # 10556 is_subset c a 0 0 1 b 0 1 1 e # 10557 is_subset c a 0 0 1 b 0 0 1 # 10558 is_subset c a 0 0 1 b 0 1 1 # 10559 is_subset c a 0 1 0 e b 0 1 0 e # 10560 is_subset c a 0 1 0 e b 0 0 0 e # 10561 is_subset c a 0 1 0 e b 0 1 0 e # 10562 is_subset c a 0 1 0 e b 0 0 0 e # 10563 is_subset c a 0 1 0 e b 0 1 0 e # 10564 is_subset c a 0 1 0 e b 0 0 0 # 10565 is_subset c a 0 1 0 e b 0 1 0 e # 10566 is_subset c a 0 1 0 e b 0 0 0 e # 10567 is_subset c a 0 1 0 e b 0 1 0 e # 10568 is_subset c a 0 1 0 e b 0 0 0 e # 10569 is_subset c a 0 1 0 e b 0 1 0 e # 10570 is_subset c a 0 1 0 e b 0 0 0 # 10571 is_subset c a 0 1 0 b 0 1 0 # 10572 is_subset c a 0 1 0 b 0 0 0 e # 10573 is_subset c a 0 1 0 b 0 1 0 # 10574 is_subset c a 0 1 0 b 0 0 0 e # 10575 is_subset c a 0 1 0 b 0 1 0 # 10576 is_subset c a 0 1 0 b 0 0 0 # 10577 is_subset c a 0 1 0 e b 0 1 0 e # 10578 is_subset c a 0 1 0 e b 0 0 1 e # 10579 is_subset c a 0 1 0 e b 0 1 0 e # 10580 is_subset c a 0 1 0 e b 0 0 1 e # 10581 is_subset c a 0 1 0 e b 0 1 0 e # 10582 is_subset c a 0 1 0 e b 0 0 1 # 10583 is_subset c a 0 1 0 e b 0 1 0 e # 10584 is_subset c a 0 1 0 e b 0 0 1 e # 10585 is_subset c a 0 1 0 e b 0 1 0 e # 10586 is_subset c a 0 1 0 e b 0 0 1 e # 10587 is_subset c a 0 1 0 e b 0 1 0 e # 10588 is_subset c a 0 1 0 e b 0 0 1 # 10589 is_subset c a 0 1 0 b 0 1 0 # 10590 is_subset c a 0 1 0 b 0 0 1 e # 10591 is_subset c a 0 1 0 b 0 1 0 # 10592 is_subset c a 0 1 0 b 0 0 1 e # 10593 is_subset c a 0 1 0 b 0 1 0 # 10594 is_subset c a 0 1 0 b 0 0 1 # 10595 is_subset c a 0 1 0 e b 0 1 0 e # 10596 is_subset c a 0 1 0 e b 0 1 0 e # 10597 is_subset c a 0 1 0 e b 0 1 0 e # 10598 is_subset c a 0 1 0 e b 0 1 0 e # 10599 is_subset c a 0 1 0 e b 0 1 0 e # 10600 is_subset c a 0 1 0 e b 0 1 0 # 10601 is_subset c a 0 1 0 e b 0 1 0 e # 10602 is_subset c a 0 1 0 e b 0 1 0 e # 10603 is_subset c a 0 1 0 e b 0 1 0 e # 10604 is_subset c a 0 1 0 e b 0 1 0 e # 10605 is_subset c a 0 1 0 e b 0 1 0 e # 10606 is_subset c a 0 1 0 e b 0 1 0 # 10607 is_subset c a 0 1 0 b 0 1 0 # 10608 is_subset c a 0 1 0 b 0 1 0 e # 10609 is_subset c a 0 1 0 b 0 1 0 # 10610 is_subset c a 0 1 0 b 0 1 0 e # 10611 is_subset c a 0 1 0 b 0 1 0 # 10612 is_subset c a 0 1 0 b 0 1 0 # 10613 is_subset c a 0 1 0 e b 0 1 0 e # 10614 is_subset c a 0 1 0 e b 0 1 1 e # 10615 is_subset c a 0 1 0 e b 0 1 0 e # 10616 is_subset c a 0 1 0 e b 0 1 1 e # 10617 is_subset c a 0 1 0 e b 0 1 0 e # 10618 is_subset c a 0 1 0 e b 0 1 1 # 10619 is_subset c a 0 1 0 e b 0 1 0 e # 10620 is_subset c a 0 1 0 e b 0 1 1 e # 10621 is_subset c a 0 1 0 e b 0 1 0 e # 10622 is_subset c a 0 1 0 e b 0 1 1 e # 10623 is_subset c a 0 1 0 e b 0 1 0 e # 10624 is_subset c a 0 1 0 e b 0 1 1 # 10625 is_subset c a 0 1 0 b 0 1 0 # 10626 is_subset c a 0 1 0 b 0 1 1 e # 10627 is_subset c a 0 1 0 b 0 1 0 # 10628 is_subset c a 0 1 0 b 0 1 1 e # 10629 is_subset c a 0 1 0 b 0 1 0 # 10630 is_subset c a 0 1 0 b 0 1 1 # 10631 is_subset c a 0 1 1 e b 0 1 1 e # 10632 is_subset c a 0 1 1 e b 0 0 0 e # 10633 is_subset c a 0 1 1 e b 0 1 1 e # 10634 is_subset c a 0 1 1 e b 0 0 0 e # 10635 is_subset c a 0 1 1 e b 0 1 1 e # 10636 is_subset c a 0 1 1 e b 0 0 0 # 10637 is_subset c a 0 1 1 e b 0 1 1 e # 10638 is_subset c a 0 1 1 e b 0 0 0 e # 10639 is_subset c a 0 1 1 e b 0 1 1 e # 10640 is_subset c a 0 1 1 e b 0 0 0 e # 10641 is_subset c a 0 1 1 e b 0 1 1 e # 10642 is_subset c a 0 1 1 e b 0 0 0 # 10643 is_subset c a 0 1 1 b 0 1 1 # 10644 is_subset c a 0 1 1 b 0 0 0 e # 10645 is_subset c a 0 1 1 b 0 1 1 # 10646 is_subset c a 0 1 1 b 0 0 0 e # 10647 is_subset c a 0 1 1 b 0 1 1 # 10648 is_subset c a 0 1 1 b 0 0 0 # 10649 is_subset c a 0 1 1 e b 0 1 1 e # 10650 is_subset c a 0 1 1 e b 0 0 1 e # 10651 is_subset c a 0 1 1 e b 0 1 1 e # 10652 is_subset c a 0 1 1 e b 0 0 1 e # 10653 is_subset c a 0 1 1 e b 0 1 1 e # 10654 is_subset c a 0 1 1 e b 0 0 1 # 10655 is_subset c a 0 1 1 e b 0 1 1 e # 10656 is_subset c a 0 1 1 e b 0 0 1 e # 10657 is_subset c a 0 1 1 e b 0 1 1 e # 10658 is_subset c a 0 1 1 e b 0 0 1 e # 10659 is_subset c a 0 1 1 e b 0 1 1 e # 10660 is_subset c a 0 1 1 e b 0 0 1 # 10661 is_subset c a 0 1 1 b 0 1 1 # 10662 is_subset c a 0 1 1 b 0 0 1 e # 10663 is_subset c a 0 1 1 b 0 1 1 # 10664 is_subset c a 0 1 1 b 0 0 1 e # 10665 is_subset c a 0 1 1 b 0 1 1 # 10666 is_subset c a 0 1 1 b 0 0 1 # 10667 is_subset c a 0 1 1 e b 0 1 1 e # 10668 is_subset c a 0 1 1 e b 0 1 0 e # 10669 is_subset c a 0 1 1 e b 0 1 1 e # 10670 is_subset c a 0 1 1 e b 0 1 0 e # 10671 is_subset c a 0 1 1 e b 0 1 1 e # 10672 is_subset c a 0 1 1 e b 0 1 0 # 10673 is_subset c a 0 1 1 e b 0 1 1 e # 10674 is_subset c a 0 1 1 e b 0 1 0 e # 10675 is_subset c a 0 1 1 e b 0 1 1 e # 10676 is_subset c a 0 1 1 e b 0 1 0 e # 10677 is_subset c a 0 1 1 e b 0 1 1 e # 10678 is_subset c a 0 1 1 e b 0 1 0 # 10679 is_subset c a 0 1 1 b 0 1 1 # 10680 is_subset c a 0 1 1 b 0 1 0 e # 10681 is_subset c a 0 1 1 b 0 1 1 # 10682 is_subset c a 0 1 1 b 0 1 0 e # 10683 is_subset c a 0 1 1 b 0 1 1 # 10684 is_subset c a 0 1 1 b 0 1 0 # 10685 is_subset c a 0 1 1 e b 0 1 1 e # 10686 is_subset c a 0 1 1 e b 0 1 1 e # 10687 is_subset c a 0 1 1 e b 0 1 1 e # 10688 is_subset c a 0 1 1 e b 0 1 1 e # 10689 is_subset c a 0 1 1 e b 0 1 1 e # 10690 is_subset c a 0 1 1 e b 0 1 1 # 10691 is_subset c a 0 1 1 e b 0 1 1 e # 10692 is_subset c a 0 1 1 e b 0 1 1 e # 10693 is_subset c a 0 1 1 e b 0 1 1 e # 10694 is_subset c a 0 1 1 e b 0 1 1 e # 10695 is_subset c a 0 1 1 e b 0 1 1 e # 10696 is_subset c a 0 1 1 e b 0 1 1 # 10697 is_subset c a 0 1 1 b 0 1 1 # 10698 is_subset c a 0 1 1 b 0 1 1 e # 10699 is_subset c a 0 1 1 b 0 1 1 # 10700 is_subset c a 0 1 1 b 0 1 1 e # 10701 is_subset c a 0 1 1 b 0 1 1 # 10702 is_subset c a 0 1 1 b 0 1 1 # 10703 is_subset c a 1 0 0 e b 1 0 0 e # 10704 is_subset c a 1 0 0 e b 1 0 0 e # 10705 is_subset c a 1 0 0 e b 1 0 0 e # 10706 is_subset c a 1 0 0 e b 1 0 0 f # 10707 is_subset c a 1 0 0 e b 1 0 0 e # 10708 is_subset c a 1 0 0 e b 1 0 0 0 # 10709 is_subset c a 1 0 0 f b 1 0 0 f # 10710 is_subset c a 1 0 0 f b 1 0 0 e # 10711 is_subset c a 1 0 0 f b 1 0 0 f # 10712 is_subset c a 1 0 0 f b 1 0 0 f # 10713 is_subset c a 1 0 0 f b 1 0 0 f # 10714 is_subset c a 1 0 0 f b 1 0 0 # 10715 is_subset c a 1 0 0 0 b 1 0 0 0 # 10716 is_subset c a 1 0 0 0 b 1 0 0 e # 10717 is_subset c a 1 0 0 0 b 1 0 0 0 # 10718 is_subset c a 1 0 0 0 b 1 0 0 f # 10719 is_subset c a 1 0 0 0 b 1 0 0 0 # 10720 is_subset c a 1 0 0 0 b 1 0 0 0 # 10721 is_subset c a 1 0 0 e b 1 0 0 e # 10722 is_subset c a 1 0 0 e b 1 0 1 e # 10723 is_subset c a 1 0 0 e b 1 0 0 e # 10724 is_subset c a 1 0 0 e b 1 0 1 f # 10725 is_subset c a 1 0 0 e b 1 0 0 e # 10726 is_subset c a 1 0 0 e b 1 0 1 0 # 10727 is_subset c a 1 0 0 f b 1 0 0 f # 10728 is_subset c a 1 0 0 f b 1 0 1 e # 10729 is_subset c a 1 0 0 f b 1 0 0 f # 10730 is_subset c a 1 0 0 f b 1 0 1 f # 10731 is_subset c a 1 0 0 f b 1 0 0 f # 10732 is_subset c a 1 0 0 f b 1 0 1 # 10733 is_subset c a 1 0 0 b 1 0 0 # 10734 is_subset c a 1 0 0 b 1 0 1 e # 10735 is_subset c a 1 0 0 b 1 0 0 # 10736 is_subset c a 1 0 0 b 1 0 1 f # 10737 is_subset c a 1 0 0 b 1 0 0 # 10738 is_subset c a 1 0 0 b 1 0 1 0 # 10739 is_subset c a 1 0 0 e b 1 0 0 e # 10740 is_subset c a 1 0 0 e b 1 1 0 e # 10741 is_subset c a 1 0 0 e b 1 0 0 e # 10742 is_subset c a 1 0 0 e b 1 1 0 f # 10743 is_subset c a 1 0 0 e b 1 0 0 e # 10744 is_subset c a 1 0 0 e b 1 1 0 0 # 10745 is_subset c a 1 0 0 f b 1 0 0 f # 10746 is_subset c a 1 0 0 f b 1 1 0 e # 10747 is_subset c a 1 0 0 f b 1 0 0 f # 10748 is_subset c a 1 0 0 f b 1 1 0 f # 10749 is_subset c a 1 0 0 f b 1 0 0 f # 10750 is_subset c a 1 0 0 f b 1 1 0 # 10751 is_subset c a 1 0 0 0 b 1 0 0 0 # 10752 is_subset c a 1 0 0 0 b 1 1 0 e # 10753 is_subset c a 1 0 0 0 b 1 0 0 0 # 10754 is_subset c a 1 0 0 0 b 1 1 0 f # 10755 is_subset c a 1 0 0 b 1 0 0 # 10756 is_subset c a 1 0 0 b 1 1 0 # 10757 is_subset c a 1 0 0 e b 1 0 0 e # 10758 is_subset c a 1 0 0 e b 1 1 1 e # 10759 is_subset c a 1 0 0 e b 1 0 0 e # 10760 is_subset c a 1 0 0 e b 1 1 1 f # 10761 is_subset c a 1 0 0 e b 1 0 0 e # 10762 is_subset c a 1 0 0 e b 1 1 1 # 10763 is_subset c a 1 0 0 f b 1 0 0 f # 10764 is_subset c a 1 0 0 f b 1 1 1 e # 10765 is_subset c a 1 0 0 f b 1 0 0 f # 10766 is_subset c a 1 0 0 f b 1 1 1 f # 10767 is_subset c a 1 0 0 f b 1 0 0 f # 10768 is_subset c a 1 0 0 f b 1 1 1 # 10769 is_subset c a 1 0 0 b 1 0 0 # 10770 is_subset c a 1 0 0 b 1 1 1 e # 10771 is_subset c a 1 0 0 0 b 1 0 0 0 # 10772 is_subset c a 1 0 0 0 b 1 1 1 f # 10773 is_subset c a 1 0 0 0 b 1 0 0 0 # 10774 is_subset c a 1 0 0 0 b 1 1 1 0 # 10775 is_subset c a 1 0 1 e b 1 0 1 e # 10776 is_subset c a 1 0 1 e b 1 0 0 e # 10777 is_subset c a 1 0 1 e b 1 0 1 e # 10778 is_subset c a 1 0 1 e b 1 0 0 f # 10779 is_subset c a 1 0 1 e b 1 0 1 e # 10780 is_subset c a 1 0 1 e b 1 0 0 # 10781 is_subset c a 1 0 1 f b 1 0 1 f # 10782 is_subset c a 1 0 1 f b 1 0 0 e # 10783 is_subset c a 1 0 1 f b 1 0 1 f # 10784 is_subset c a 1 0 1 f b 1 0 0 f # 10785 is_subset c a 1 0 1 f b 1 0 1 f # 10786 is_subset c a 1 0 1 f b 1 0 0 # 10787 is_subset c a 1 0 1 0 b 1 0 1 0 # 10788 is_subset c a 1 0 1 0 b 1 0 0 e # 10789 is_subset c a 1 0 1 0 b 1 0 1 0 # 10790 is_subset c a 1 0 1 0 b 1 0 0 f # 10791 is_subset c a 1 0 1 0 b 1 0 1 0 # 10792 is_subset c a 1 0 1 0 b 1 0 0 # 10793 is_subset c a 1 0 1 e b 1 0 1 e # 10794 is_subset c a 1 0 1 e b 1 0 1 e # 10795 is_subset c a 1 0 1 e b 1 0 1 e # 10796 is_subset c a 1 0 1 e b 1 0 1 f # 10797 is_subset c a 1 0 1 e b 1 0 1 e # 10798 is_subset c a 1 0 1 e b 1 0 1 # 10799 is_subset c a 1 0 1 f b 1 0 1 f # 10800 is_subset c a 1 0 1 f b 1 0 1 e # 10801 is_subset c a 1 0 1 f b 1 0 1 f # 10802 is_subset c a 1 0 1 f b 1 0 1 f # 10803 is_subset c a 1 0 1 f b 1 0 1 f # 10804 is_subset c a 1 0 1 f b 1 0 1 0 # 10805 is_subset c a 1 0 1 0 b 1 0 1 0 # 10806 is_subset c a 1 0 1 0 b 1 0 1 e # 10807 is_subset c a 1 0 1 b 1 0 1 # 10808 is_subset c a 1 0 1 b 1 0 1 f # 10809 is_subset c a 1 0 1 0 b 1 0 1 0 # 10810 is_subset c a 1 0 1 0 b 1 0 1 0 # 10811 is_subset c a 1 0 1 e b 1 0 1 e # 10812 is_subset c a 1 0 1 e b 1 1 0 e # 10813 is_subset c a 1 0 1 e b 1 0 1 e # 10814 is_subset c a 1 0 1 e b 1 1 0 f # 10815 is_subset c a 1 0 1 e b 1 0 1 e # 10816 is_subset c a 1 0 1 e b 1 1 0 # 10817 is_subset c a 1 0 1 f b 1 0 1 f # 10818 is_subset c a 1 0 1 f b 1 1 0 e # 10819 is_subset c a 1 0 1 f b 1 0 1 f # 10820 is_subset c a 1 0 1 f b 1 1 0 f # 10821 is_subset c a 1 0 1 f b 1 0 1 f # 10822 is_subset c a 1 0 1 f b 1 1 0 0 # 10823 is_subset c a 1 0 1 0 b 1 0 1 0 # 10824 is_subset c a 1 0 1 0 b 1 1 0 e # 10825 is_subset c a 1 0 1 b 1 0 1 # 10826 is_subset c a 1 0 1 b 1 1 0 f # 10827 is_subset c a 1 0 1 b 1 0 1 # 10828 is_subset c a 1 0 1 b 1 1 0 # 10829 is_subset c a 1 0 1 e b 1 0 1 e # 10830 is_subset c a 1 0 1 e b 1 1 1 e # 10831 is_subset c a 1 0 1 e b 1 0 1 e # 10832 is_subset c a 1 0 1 e b 1 1 1 f # 10833 is_subset c a 1 0 1 e b 1 0 1 e # 10834 is_subset c a 1 0 1 e b 1 1 1 # 10835 is_subset c a 1 0 1 f b 1 0 1 f # 10836 is_subset c a 1 0 1 f b 1 1 1 e # 10837 is_subset c a 1 0 1 f b 1 0 1 f # 10838 is_subset c a 1 0 1 f b 1 1 1 f # 10839 is_subset c a 1 0 1 f b 1 0 1 f # 10840 is_subset c a 1 0 1 f b 1 1 1 # 10841 is_subset c a 1 0 1 b 1 0 1 # 10842 is_subset c a 1 0 1 b 1 1 1 e # 10843 is_subset c a 1 0 1 0 b 1 0 1 0 # 10844 is_subset c a 1 0 1 0 b 1 1 1 f # 10845 is_subset c a 1 0 1 0 b 1 0 1 0 # 10846 is_subset c a 1 0 1 0 b 1 1 1 0 # 10847 is_subset c a 1 1 0 e b 1 1 0 e # 10848 is_subset c a 1 1 0 e b 1 0 0 e # 10849 is_subset c a 1 1 0 e b 1 1 0 e # 10850 is_subset c a 1 1 0 e b 1 0 0 f # 10851 is_subset c a 1 1 0 e b 1 1 0 e # 10852 is_subset c a 1 1 0 e b 1 0 0 # 10853 is_subset c a 1 1 0 f b 1 1 0 f # 10854 is_subset c a 1 1 0 f b 1 0 0 e # 10855 is_subset c a 1 1 0 f b 1 1 0 f # 10856 is_subset c a 1 1 0 f b 1 0 0 f # 10857 is_subset c a 1 1 0 f b 1 1 0 f # 10858 is_subset c a 1 1 0 f b 1 0 0 # 10859 is_subset c a 1 1 0 b 1 1 0 # 10860 is_subset c a 1 1 0 b 1 0 0 e # 10861 is_subset c a 1 1 0 b 1 1 0 # 10862 is_subset c a 1 1 0 b 1 0 0 f # 10863 is_subset c a 1 1 0 b 1 1 0 # 10864 is_subset c a 1 1 0 b 1 0 0 0 # 10865 is_subset c a 1 1 0 e b 1 1 0 e # 10866 is_subset c a 1 1 0 e b 1 0 1 e # 10867 is_subset c a 1 1 0 e b 1 1 0 e # 10868 is_subset c a 1 1 0 e b 1 0 1 f # 10869 is_subset c a 1 1 0 e b 1 1 0 e # 10870 is_subset c a 1 1 0 e b 1 0 1 # 10871 is_subset c a 1 1 0 f b 1 1 0 f # 10872 is_subset c a 1 1 0 f b 1 0 1 e # 10873 is_subset c a 1 1 0 f b 1 1 0 f # 10874 is_subset c a 1 1 0 f b 1 0 1 f # 10875 is_subset c a 1 1 0 f b 1 1 0 f # 10876 is_subset c a 1 1 0 f b 1 0 1 0 # 10877 is_subset c a 1 1 0 b 1 1 0 # 10878 is_subset c a 1 1 0 b 1 0 1 e # 10879 is_subset c a 1 1 0 b 1 1 0 # 10880 is_subset c a 1 1 0 b 1 0 1 f # 10881 is_subset c a 1 1 0 b 1 1 0 # 10882 is_subset c a 1 1 0 b 1 0 1 # 10883 is_subset c a 1 1 0 e b 1 1 0 e # 10884 is_subset c a 1 1 0 e b 1 1 0 e # 10885 is_subset c a 1 1 0 e b 1 1 0 e # 10886 is_subset c a 1 1 0 e b 1 1 0 f # 10887 is_subset c a 1 1 0 e b 1 1 0 e # 10888 is_subset c a 1 1 0 e b 1 1 0 0 # 10889 is_subset c a 1 1 0 f b 1 1 0 f # 10890 is_subset c a 1 1 0 f b 1 1 0 e # 10891 is_subset c a 1 1 0 f b 1 1 0 f # 10892 is_subset c a 1 1 0 f b 1 1 0 f # 10893 is_subset c a 1 1 0 f b 1 1 0 f # 10894 is_subset c a 1 1 0 f b 1 1 0 0 # 10895 is_subset c a 1 1 0 0 b 1 1 0 0 # 10896 is_subset c a 1 1 0 0 b 1 1 0 e # 10897 is_subset c a 1 1 0 0 b 1 1 0 0 # 10898 is_subset c a 1 1 0 0 b 1 1 0 f # 10899 is_subset c a 1 1 0 b 1 1 0 # 10900 is_subset c a 1 1 0 b 1 1 0 0 # 10901 is_subset c a 1 1 0 e b 1 1 0 e # 10902 is_subset c a 1 1 0 e b 1 1 1 e # 10903 is_subset c a 1 1 0 e b 1 1 0 e # 10904 is_subset c a 1 1 0 e b 1 1 1 f # 10905 is_subset c a 1 1 0 e b 1 1 0 e # 10906 is_subset c a 1 1 0 e b 1 1 1 # 10907 is_subset c a 1 1 0 f b 1 1 0 f # 10908 is_subset c a 1 1 0 f b 1 1 1 e # 10909 is_subset c a 1 1 0 f b 1 1 0 f # 10910 is_subset c a 1 1 0 f b 1 1 1 f # 10911 is_subset c a 1 1 0 f b 1 1 0 f # 10912 is_subset c a 1 1 0 f b 1 1 1 # 10913 is_subset c a 1 1 0 b 1 1 0 # 10914 is_subset c a 1 1 0 b 1 1 1 e # 10915 is_subset c a 1 1 0 b 1 1 0 # 10916 is_subset c a 1 1 0 b 1 1 1 f # 10917 is_subset c a 1 1 0 0 b 1 1 0 0 # 10918 is_subset c a 1 1 0 0 b 1 1 1 0 # 10919 is_subset c a 1 1 1 e b 1 1 1 e # 10920 is_subset c a 1 1 1 e b 1 0 0 e # 10921 is_subset c a 1 1 1 e b 1 1 1 e # 10922 is_subset c a 1 1 1 e b 1 0 0 f # 10923 is_subset c a 1 1 1 e b 1 1 1 e # 10924 is_subset c a 1 1 1 e b 1 0 0 0 # 10925 is_subset c a 1 1 1 f b 1 1 1 f # 10926 is_subset c a 1 1 1 f b 1 0 0 e # 10927 is_subset c a 1 1 1 f b 1 1 1 f # 10928 is_subset c a 1 1 1 f b 1 0 0 f # 10929 is_subset c a 1 1 1 f b 1 1 1 f # 10930 is_subset c a 1 1 1 f b 1 0 0 # 10931 is_subset c a 1 1 1 0 b 1 1 1 0 # 10932 is_subset c a 1 1 1 0 b 1 0 0 e # 10933 is_subset c a 1 1 1 b 1 1 1 # 10934 is_subset c a 1 1 1 b 1 0 0 f # 10935 is_subset c a 1 1 1 b 1 1 1 # 10936 is_subset c a 1 1 1 b 1 0 0 0 # 10937 is_subset c a 1 1 1 e b 1 1 1 e # 10938 is_subset c a 1 1 1 e b 1 0 1 e # 10939 is_subset c a 1 1 1 e b 1 1 1 e # 10940 is_subset c a 1 1 1 e b 1 0 1 f # 10941 is_subset c a 1 1 1 e b 1 1 1 e # 10942 is_subset c a 1 1 1 e b 1 0 1 # 10943 is_subset c a 1 1 1 f b 1 1 1 f # 10944 is_subset c a 1 1 1 f b 1 0 1 e # 10945 is_subset c a 1 1 1 f b 1 1 1 f # 10946 is_subset c a 1 1 1 f b 1 0 1 f # 10947 is_subset c a 1 1 1 f b 1 1 1 f # 10948 is_subset c a 1 1 1 f b 1 0 1 # 10949 is_subset c a 1 1 1 b 1 1 1 # 10950 is_subset c a 1 1 1 b 1 0 1 e # 10951 is_subset c a 1 1 1 b 1 1 1 # 10952 is_subset c a 1 1 1 b 1 0 1 f # 10953 is_subset c a 1 1 1 0 b 1 1 1 0 # 10954 is_subset c a 1 1 1 0 b 1 0 1 0 # 10955 is_subset c a 1 1 1 e b 1 1 1 e # 10956 is_subset c a 1 1 1 e b 1 1 0 e # 10957 is_subset c a 1 1 1 e b 1 1 1 e # 10958 is_subset c a 1 1 1 e b 1 1 0 f # 10959 is_subset c a 1 1 1 e b 1 1 1 e # 10960 is_subset c a 1 1 1 e b 1 1 0 # 10961 is_subset c a 1 1 1 f b 1 1 1 f # 10962 is_subset c a 1 1 1 f b 1 1 0 e # 10963 is_subset c a 1 1 1 f b 1 1 1 f # 10964 is_subset c a 1 1 1 f b 1 1 0 f # 10965 is_subset c a 1 1 1 f b 1 1 1 f # 10966 is_subset c a 1 1 1 f b 1 1 0 # 10967 is_subset c a 1 1 1 b 1 1 1 # 10968 is_subset c a 1 1 1 b 1 1 0 e # 10969 is_subset c a 1 1 1 0 b 1 1 1 0 # 10970 is_subset c a 1 1 1 0 b 1 1 0 f # 10971 is_subset c a 1 1 1 0 b 1 1 1 0 # 10972 is_subset c a 1 1 1 0 b 1 1 0 0 # 10973 is_subset c a 1 1 1 e b 1 1 1 e # 10974 is_subset c a 1 1 1 e b 1 1 1 e # 10975 is_subset c a 1 1 1 e b 1 1 1 e # 10976 is_subset c a 1 1 1 e b 1 1 1 f # 10977 is_subset c a 1 1 1 e b 1 1 1 e # 10978 is_subset c a 1 1 1 e b 1 1 1 0 # 10979 is_subset c a 1 1 1 f b 1 1 1 f # 10980 is_subset c a 1 1 1 f b 1 1 1 e # 10981 is_subset c a 1 1 1 f b 1 1 1 f # 10982 is_subset c a 1 1 1 f b 1 1 1 f # 10983 is_subset c a 1 1 1 f b 1 1 1 f # 10984 is_subset c a 1 1 1 f b 1 1 1 # 10985 is_subset c a 1 1 1 0 b 1 1 1 0 # 10986 is_subset c a 1 1 1 0 b 1 1 1 e # 10987 is_subset c a 1 1 1 0 b 1 1 1 0 # 10988 is_subset c a 1 1 1 0 b 1 1 1 f # 10989 is_subset c a 1 1 1 b 1 1 1 # 10990 is_subset c a 1 1 1 b 1 1 1 # 10991 is_subset c a 31 0 0 e b 31 0 0 e # 10992 is_subset c a 31 0 0 e b 31 0 0 e # 10993 is_subset c a 31 0 0 e b 31 0 0 e # 10994 is_subset c a 31 0 0 e b 31 0 0 f # 10995 is_subset c a 31 0 0 e b 31 0 0 e # 10996 is_subset c a 31 0 0 e b 31 0 0 0 1 2 5 6 7 8 9 12 14 16 17 21 23 24 27 29 30 # 10997 is_subset c a 31 0 0 f b 31 0 0 f # 10998 is_subset c a 31 0 0 f b 31 0 0 e # 10999 is_subset c a 31 0 0 f b 31 0 0 f # 11000 is_subset c a 31 0 0 f b 31 0 0 f # 11001 is_subset c a 31 0 0 f b 31 0 0 f # 11002 is_subset c a 31 0 0 f b 31 0 0 0 2 4 7 10 11 15 18 19 21 26 28 29 # 11003 is_subset c a 31 0 0 0 2 3 4 7 8 10 11 12 16 19 20 22 24 27 b 31 0 0 0 2 3 4 7 8 10 11 12 16 19 20 22 24 27 # 11004 is_subset c a 31 0 0 0 2 3 4 7 8 10 11 12 16 19 20 22 24 27 b 31 0 0 e # 11005 is_subset c a 31 0 0 0 3 5 8 9 10 14 15 16 19 21 22 23 30 b 31 0 0 0 3 5 8 9 10 14 15 16 19 21 22 23 30 # 11006 is_subset c a 31 0 0 0 3 5 8 9 10 14 15 16 19 21 22 23 30 b 31 0 0 f # 11007 is_subset c a 31 0 0 1 2 5 6 7 10 11 12 13 14 15 16 17 19 23 24 25 29 30 b 31 0 0 1 2 5 6 7 10 11 12 13 14 15 16 17 19 23 24 25 29 30 # 11008 is_subset c a 31 0 0 1 2 5 6 7 10 11 12 13 14 15 16 17 19 23 24 25 29 30 b 31 0 0 0 1 2 5 6 7 10 13 14 16 17 18 22 24 25 28 # 11009 is_subset c a 31 0 0 e b 31 0 0 e # 11010 is_subset c a 31 0 0 e b 31 0 1 e # 11011 is_subset c a 31 0 0 e b 31 0 0 e # 11012 is_subset c a 31 0 0 e b 31 0 1 f # 11013 is_subset c a 31 0 0 e b 31 0 0 e # 11014 is_subset c a 31 0 0 e b 31 0 1 0 1 3 5 6 10 12 13 19 20 21 22 23 24 25 27 28 29 # 11015 is_subset c a 31 0 0 f b 31 0 0 f # 11016 is_subset c a 31 0 0 f b 31 0 1 e # 11017 is_subset c a 31 0 0 f b 31 0 0 f # 11018 is_subset c a 31 0 0 f b 31 0 1 f # 11019 is_subset c a 31 0 0 f b 31 0 0 f # 11020 is_subset c a 31 0 0 f b 31 0 1 1 4 8 9 12 13 14 18 20 21 23 28 30 # 11021 is_subset c a 31 0 0 1 3 4 5 11 15 16 17 18 20 21 22 23 27 b 31 0 0 1 3 4 5 11 15 16 17 18 20 21 22 23 27 # 11022 is_subset c a 31 0 0 1 3 4 5 11 15 16 17 18 20 21 22 23 27 b 31 0 1 e # 11023 is_subset c a 31 0 0 0 2 3 7 8 9 11 13 16 17 20 21 26 27 28 b 31 0 0 0 2 3 7 8 9 11 13 16 17 20 21 26 27 28 # 11024 is_subset c a 31 0 0 0 2 3 7 8 9 11 13 16 17 20 21 26 27 28 b 31 0 1 f # 11025 is_subset c a 31 0 0 1 5 7 8 13 14 15 16 17 18 19 21 23 25 26 29 30 b 31 0 0 1 5 7 8 13 14 15 16 17 18 19 21 23 25 26 29 30 # 11026 is_subset c a 31 0 0 1 5 7 8 13 14 15 16 17 18 19 21 23 25 26 29 30 b 31 0 1 0 1 2 4 5 6 7 9 11 14 16 19 20 23 25 26 27 29 # 11027 is_subset c a 31 0 0 e b 31 0 0 e # 11028 is_subset c a 31 0 0 e b 31 1 0 e # 11029 is_subset c a 31 0 0 e b 31 0 0 e # 11030 is_subset c a 31 0 0 e b 31 1 0 f # 11031 is_subset c a 31 0 0 e b 31 0 0 e # 11032 is_subset c a 31 0 0 e b 31 1 0 3 8 10 11 12 13 16 17 19 20 21 23 26 27 28 # 11033 is_subset c a 31 0 0 f b 31 0 0 f # 11034 is_subset c a 31 0 0 f b 31 1 0 e # 11035 is_subset c a 31 0 0 f b 31 0 0 f # 11036 is_subset c a 31 0 0 f b 31 1 0 f # 11037 is_subset c a 31 0 0 f b 31 0 0 f # 11038 is_subset c a 31 0 0 f b 31 1 0 1 2 3 7 8 9 10 11 12 13 16 18 19 22 24 26 27 28 # 11039 is_subset c a 31 0 0 4 6 7 9 10 12 15 17 18 19 20 22 24 27 29 30 b 31 0 0 4 6 7 9 10 12 15 17 18 19 20 22 24 27 29 30 # 11040 is_subset c a 31 0 0 4 6 7 9 10 12 15 17 18 19 20 22 24 27 29 30 b 31 1 0 e # 11041 is_subset c a 31 0 0 3 5 10 12 14 15 16 17 18 19 20 21 22 23 24 25 27 29 30 b 31 0 0 3 5 10 12 14 15 16 17 18 19 20 21 22 23 24 25 27 29 30 # 11042 is_subset c a 31 0 0 3 5 10 12 14 15 16 17 18 19 20 21 22 23 24 25 27 29 30 b 31 1 0 f # 11043 is_subset c a 31 0 0 0 2 5 6 7 8 10 16 18 19 20 21 23 24 27 28 b 31 0 0 0 2 5 6 7 8 10 16 18 19 20 21 23 24 27 28 # 11044 is_subset c a 31 0 0 0 2 5 6 7 8 10 16 18 19 20 21 23 24 27 28 b 31 1 0 3 4 6 7 11 13 15 16 18 21 22 24 26 29 30 # 11045 is_subset c a 31 0 0 e b 31 0 0 e # 11046 is_subset c a 31 0 0 e b 31 1 1 e # 11047 is_subset c a 31 0 0 e b 31 0 0 e # 11048 is_subset c a 31 0 0 e b 31 1 1 f # 11049 is_subset c a 31 0 0 e b 31 0 0 e # 11050 is_subset c a 31 0 0 e b 31 1 1 0 3 5 6 8 9 10 11 14 18 19 20 21 22 27 30 # 11051 is_subset c a 31 0 0 f b 31 0 0 f # 11052 is_subset c a 31 0 0 f b 31 1 1 e # 11053 is_subset c a 31 0 0 f b 31 0 0 f # 11054 is_subset c a 31 0 0 f b 31 1 1 f # 11055 is_subset c a 31 0 0 f b 31 0 0 f # 11056 is_subset c a 31 0 0 f b 31 1 1 1 3 6 9 11 13 14 16 19 23 24 25 27 30 # 11057 is_subset c a 31 0 0 7 8 9 11 13 14 15 16 19 20 23 25 26 27 30 b 31 0 0 7 8 9 11 13 14 15 16 19 20 23 25 26 27 30 # 11058 is_subset c a 31 0 0 7 8 9 11 13 14 15 16 19 20 23 25 26 27 30 b 31 1 1 e # 11059 is_subset c a 31 0 0 0 1 2 11 12 14 17 18 20 28 29 b 31 0 0 0 1 2 11 12 14 17 18 20 28 29 # 11060 is_subset c a 31 0 0 0 1 2 11 12 14 17 18 20 28 29 b 31 1 1 f # 11061 is_subset c a 31 0 0 1 3 4 5 8 9 10 11 14 15 16 17 18 19 21 23 25 27 28 b 31 0 0 1 3 4 5 8 9 10 11 14 15 16 17 18 19 21 23 25 27 28 # 11062 is_subset c a 31 0 0 1 3 4 5 8 9 10 11 14 15 16 17 18 19 21 23 25 27 28 b 31 1 1 3 9 14 17 22 24 25 26 27 30 # 11063 is_subset c a 31 0 1 e b 31 0 1 e # 11064 is_subset c a 31 0 1 e b 31 0 0 e # 11065 is_subset c a 31 0 1 e b 31 0 1 e # 11066 is_subset c a 31 0 1 e b 31 0 0 f # 11067 is_subset c a 31 0 1 e b 31 0 1 e # 11068 is_subset c a 31 0 1 e b 31 0 0 0 3 4 5 6 8 9 13 15 17 25 27 30 # 11069 is_subset c a 31 0 1 f b 31 0 1 f # 11070 is_subset c a 31 0 1 f b 31 0 0 e # 11071 is_subset c a 31 0 1 f b 31 0 1 f # 11072 is_subset c a 31 0 1 f b 31 0 0 f # 11073 is_subset c a 31 0 1 f b 31 0 1 f # 11074 is_subset c a 31 0 1 f b 31 0 0 1 3 4 6 7 9 14 16 17 18 20 26 28 # 11075 is_subset c a 31 0 1 2 4 7 11 12 13 14 16 18 19 23 24 25 26 28 29 30 b 31 0 1 2 4 7 11 12 13 14 16 18 19 23 24 25 26 28 29 30 # 11076 is_subset c a 31 0 1 2 4 7 11 12 13 14 16 18 19 23 24 25 26 28 29 30 b 31 0 0 e # 11077 is_subset c a 31 0 1 2 5 6 9 10 12 13 15 17 18 22 24 25 26 28 29 30 b 31 0 1 2 5 6 9 10 12 13 15 17 18 22 24 25 26 28 29 30 # 11078 is_subset c a 31 0 1 2 5 6 9 10 12 13 15 17 18 22 24 25 26 28 29 30 b 31 0 0 f # 11079 is_subset c a 31 0 1 2 3 5 7 11 14 16 17 20 27 30 b 31 0 1 2 3 5 7 11 14 16 17 20 27 30 # 11080 is_subset c a 31 0 1 2 3 5 7 11 14 16 17 20 27 30 b 31 0 0 4 6 7 15 17 18 20 22 24 25 27 29 # 11081 is_subset c a 31 0 1 e b 31 0 1 e # 11082 is_subset c a 31 0 1 e b 31 0 1 e # 11083 is_subset c a 31 0 1 e b 31 0 1 e # 11084 is_subset c a 31 0 1 e b 31 0 1 f # 11085 is_subset c a 31 0 1 e b 31 0 1 e # 11086 is_subset c a 31 0 1 e b 31 0 1 0 2 3 6 7 8 9 11 13 16 21 24 26 29 30 # 11087 is_subset c a 31 0 1 f b 31 0 1 f # 11088 is_subset c a 31 0 1 f b 31 0 1 e # 11089 is_subset c a 31 0 1 f b 31 0 1 f # 11090 is_subset c a 31 0 1 f b 31 0 1 f # 11091 is_subset c a 31 0 1 f b 31 0 1 f # 11092 is_subset c a 31 0 1 f b 31 0 1 1 2 6 8 9 11 15 18 19 20 21 22 27 28 29 30 # 11093 is_subset c a 31 0 1 0 1 2 10 12 17 20 23 24 27 30 b 31 0 1 0 1 2 10 12 17 20 23 24 27 30 # 11094 is_subset c a 31 0 1 0 1 2 10 12 17 20 23 24 27 30 b 31 0 1 e # 11095 is_subset c a 31 0 1 2 5 6 7 9 10 12 14 16 17 18 19 20 21 23 24 25 26 28 b 31 0 1 2 5 6 7 9 10 12 14 16 17 18 19 20 21 23 24 25 26 28 # 11096 is_subset c a 31 0 1 2 5 6 7 9 10 12 14 16 17 18 19 20 21 23 24 25 26 28 b 31 0 1 f # 11097 is_subset c a 31 0 1 2 3 4 5 7 10 11 14 16 17 19 24 25 28 30 b 31 0 1 2 3 4 5 7 10 11 14 16 17 19 24 25 28 30 # 11098 is_subset c a 31 0 1 2 3 4 5 7 10 11 14 16 17 19 24 25 28 30 b 31 0 1 1 2 3 4 5 7 8 9 10 11 15 18 20 23 27 29 # 11099 is_subset c a 31 0 1 e b 31 0 1 e # 11100 is_subset c a 31 0 1 e b 31 1 0 e # 11101 is_subset c a 31 0 1 e b 31 0 1 e # 11102 is_subset c a 31 0 1 e b 31 1 0 f # 11103 is_subset c a 31 0 1 e b 31 0 1 e # 11104 is_subset c a 31 0 1 e b 31 1 0 0 1 3 4 5 7 8 10 11 13 22 24 28 30 # 11105 is_subset c a 31 0 1 f b 31 0 1 f # 11106 is_subset c a 31 0 1 f b 31 1 0 e # 11107 is_subset c a 31 0 1 f b 31 0 1 f # 11108 is_subset c a 31 0 1 f b 31 1 0 f # 11109 is_subset c a 31 0 1 f b 31 0 1 f # 11110 is_subset c a 31 0 1 f b 31 1 0 0 1 4 6 9 11 15 17 18 19 20 22 26 27 29 30 # 11111 is_subset c a 31 0 1 1 2 3 4 12 13 14 15 18 23 25 30 b 31 0 1 1 2 3 4 12 13 14 15 18 23 25 30 # 11112 is_subset c a 31 0 1 1 2 3 4 12 13 14 15 18 23 25 30 b 31 1 0 e # 11113 is_subset c a 31 0 1 2 6 8 10 13 14 15 16 18 20 21 23 27 29 30 b 31 0 1 2 6 8 10 13 14 15 16 18 20 21 23 27 29 30 # 11114 is_subset c a 31 0 1 2 6 8 10 13 14 15 16 18 20 21 23 27 29 30 b 31 1 0 f # 11115 is_subset c a 31 0 1 0 2 5 6 7 8 10 11 13 14 16 19 24 25 b 31 0 1 0 2 5 6 7 8 10 11 13 14 16 19 24 25 # 11116 is_subset c a 31 0 1 0 2 5 6 7 8 10 11 13 14 16 19 24 25 b 31 1 0 2 4 5 7 8 9 10 11 13 14 15 18 20 22 23 24 25 28 29 30 # 11117 is_subset c a 31 0 1 e b 31 0 1 e # 11118 is_subset c a 31 0 1 e b 31 1 1 e # 11119 is_subset c a 31 0 1 e b 31 0 1 e # 11120 is_subset c a 31 0 1 e b 31 1 1 f # 11121 is_subset c a 31 0 1 e b 31 0 1 e # 11122 is_subset c a 31 0 1 e b 31 1 1 2 3 5 9 13 14 15 18 19 20 22 23 25 27 28 # 11123 is_subset c a 31 0 1 f b 31 0 1 f # 11124 is_subset c a 31 0 1 f b 31 1 1 e # 11125 is_subset c a 31 0 1 f b 31 0 1 f # 11126 is_subset c a 31 0 1 f b 31 1 1 f # 11127 is_subset c a 31 0 1 f b 31 0 1 f # 11128 is_subset c a 31 0 1 f b 31 1 1 0 3 4 5 6 7 9 11 14 16 17 19 20 22 23 24 29 30 # 11129 is_subset c a 31 0 1 3 4 6 7 8 9 18 19 22 24 26 b 31 0 1 3 4 6 7 8 9 18 19 22 24 26 # 11130 is_subset c a 31 0 1 3 4 6 7 8 9 18 19 22 24 26 b 31 1 1 e # 11131 is_subset c a 31 0 1 0 1 2 3 4 5 6 7 8 9 10 12 16 17 19 20 25 26 27 b 31 0 1 0 1 2 3 4 5 6 7 8 9 10 12 16 17 19 20 25 26 27 # 11132 is_subset c a 31 0 1 0 1 2 3 4 5 6 7 8 9 10 12 16 17 19 20 25 26 27 b 31 1 1 f # 11133 is_subset c a 31 0 1 0 3 4 7 8 10 14 15 16 18 19 23 24 25 26 27 b 31 0 1 0 3 4 7 8 10 14 15 16 18 19 23 24 25 26 27 # 11134 is_subset c a 31 0 1 0 3 4 7 8 10 14 15 16 18 19 23 24 25 26 27 b 31 1 1 2 3 5 8 9 10 12 14 15 18 19 20 23 29 30 # 11135 is_subset c a 31 1 0 e b 31 1 0 e # 11136 is_subset c a 31 1 0 e b 31 0 0 e # 11137 is_subset c a 31 1 0 e b 31 1 0 e # 11138 is_subset c a 31 1 0 e b 31 0 0 f # 11139 is_subset c a 31 1 0 e b 31 1 0 e # 11140 is_subset c a 31 1 0 e b 31 0 0 0 3 4 7 9 10 11 12 14 15 21 22 23 24 25 30 # 11141 is_subset c a 31 1 0 f b 31 1 0 f # 11142 is_subset c a 31 1 0 f b 31 0 0 e # 11143 is_subset c a 31 1 0 f b 31 1 0 f # 11144 is_subset c a 31 1 0 f b 31 0 0 f # 11145 is_subset c a 31 1 0 f b 31 1 0 f # 11146 is_subset c a 31 1 0 f b 31 0 0 3 5 14 15 16 26 28 # 11147 is_subset c a 31 1 0 0 1 2 3 4 5 11 12 13 14 15 16 17 22 23 24 25 26 28 30 b 31 1 0 0 1 2 3 4 5 11 12 13 14 15 16 17 22 23 24 25 26 28 30 # 11148 is_subset c a 31 1 0 0 1 2 3 4 5 11 12 13 14 15 16 17 22 23 24 25 26 28 30 b 31 0 0 e # 11149 is_subset c a 31 1 0 0 1 2 3 4 5 6 10 11 13 14 15 16 17 21 22 25 27 28 b 31 1 0 0 1 2 3 4 5 6 10 11 13 14 15 16 17 21 22 25 27 28 # 11150 is_subset c a 31 1 0 0 1 2 3 4 5 6 10 11 13 14 15 16 17 21 22 25 27 28 b 31 0 0 f # 11151 is_subset c a 31 1 0 5 7 9 12 14 15 16 17 20 21 28 29 30 b 31 1 0 5 7 9 12 14 15 16 17 20 21 28 29 30 # 11152 is_subset c a 31 1 0 5 7 9 12 14 15 16 17 20 21 28 29 30 b 31 0 0 2 3 4 5 6 7 9 12 15 18 19 21 22 26 27 29 # 11153 is_subset c a 31 1 0 e b 31 1 0 e # 11154 is_subset c a 31 1 0 e b 31 0 1 e # 11155 is_subset c a 31 1 0 e b 31 1 0 e # 11156 is_subset c a 31 1 0 e b 31 0 1 f # 11157 is_subset c a 31 1 0 e b 31 1 0 e # 11158 is_subset c a 31 1 0 e b 31 0 1 0 8 12 13 14 15 17 18 21 23 26 27 28 29 # 11159 is_subset c a 31 1 0 f b 31 1 0 f # 11160 is_subset c a 31 1 0 f b 31 0 1 e # 11161 is_subset c a 31 1 0 f b 31 1 0 f # 11162 is_subset c a 31 1 0 f b 31 0 1 f # 11163 is_subset c a 31 1 0 f b 31 1 0 f # 11164 is_subset c a 31 1 0 f b 31 0 1 2 3 4 7 9 12 16 21 25 26 28 29 30 # 11165 is_subset c a 31 1 0 1 2 4 6 7 11 13 15 16 18 19 20 21 29 b 31 1 0 1 2 4 6 7 11 13 15 16 18 19 20 21 29 # 11166 is_subset c a 31 1 0 1 2 4 6 7 11 13 15 16 18 19 20 21 29 b 31 0 1 e # 11167 is_subset c a 31 1 0 1 2 3 4 8 9 10 11 14 15 18 21 22 23 26 27 29 30 b 31 1 0 1 2 3 4 8 9 10 11 14 15 18 21 22 23 26 27 29 30 # 11168 is_subset c a 31 1 0 1 2 3 4 8 9 10 11 14 15 18 21 22 23 26 27 29 30 b 31 0 1 f # 11169 is_subset c a 31 1 0 0 1 2 3 4 8 10 11 14 16 19 20 22 24 25 b 31 1 0 0 1 2 3 4 8 10 11 14 16 19 20 22 24 25 # 11170 is_subset c a 31 1 0 0 1 2 3 4 8 10 11 14 16 19 20 22 24 25 b 31 0 1 5 8 9 13 15 16 19 21 23 27 28 29 # 11171 is_subset c a 31 1 0 e b 31 1 0 e # 11172 is_subset c a 31 1 0 e b 31 1 0 e # 11173 is_subset c a 31 1 0 e b 31 1 0 e # 11174 is_subset c a 31 1 0 e b 31 1 0 f # 11175 is_subset c a 31 1 0 e b 31 1 0 e # 11176 is_subset c a 31 1 0 e b 31 1 0 2 3 5 7 9 11 15 17 19 20 21 23 25 26 28 29 30 # 11177 is_subset c a 31 1 0 f b 31 1 0 f # 11178 is_subset c a 31 1 0 f b 31 1 0 e # 11179 is_subset c a 31 1 0 f b 31 1 0 f # 11180 is_subset c a 31 1 0 f b 31 1 0 f # 11181 is_subset c a 31 1 0 f b 31 1 0 f # 11182 is_subset c a 31 1 0 f b 31 1 0 1 2 5 10 12 15 16 18 19 21 23 26 27 29 30 # 11183 is_subset c a 31 1 0 0 1 2 3 5 7 8 9 10 12 14 16 17 19 22 24 27 29 30 b 31 1 0 0 1 2 3 5 7 8 9 10 12 14 16 17 19 22 24 27 29 30 # 11184 is_subset c a 31 1 0 0 1 2 3 5 7 8 9 10 12 14 16 17 19 22 24 27 29 30 b 31 1 0 e # 11185 is_subset c a 31 1 0 1 2 4 5 6 7 8 9 11 13 14 15 16 17 20 21 24 25 27 30 b 31 1 0 1 2 4 5 6 7 8 9 11 13 14 15 16 17 20 21 24 25 27 30 # 11186 is_subset c a 31 1 0 1 2 4 5 6 7 8 9 11 13 14 15 16 17 20 21 24 25 27 30 b 31 1 0 f # 11187 is_subset c a 31 1 0 2 3 5 7 12 15 16 17 20 22 25 26 28 b 31 1 0 2 3 5 7 12 15 16 17 20 22 25 26 28 # 11188 is_subset c a 31 1 0 2 3 5 7 12 15 16 17 20 22 25 26 28 b 31 1 0 4 5 6 7 9 11 12 18 19 21 22 25 28 30 # 11189 is_subset c a 31 1 0 e b 31 1 0 e # 11190 is_subset c a 31 1 0 e b 31 1 1 e # 11191 is_subset c a 31 1 0 e b 31 1 0 e # 11192 is_subset c a 31 1 0 e b 31 1 1 f # 11193 is_subset c a 31 1 0 e b 31 1 0 e # 11194 is_subset c a 31 1 0 e b 31 1 1 1 2 4 5 10 12 14 16 17 19 22 23 26 27 30 # 11195 is_subset c a 31 1 0 f b 31 1 0 f # 11196 is_subset c a 31 1 0 f b 31 1 1 e # 11197 is_subset c a 31 1 0 f b 31 1 0 f # 11198 is_subset c a 31 1 0 f b 31 1 1 f # 11199 is_subset c a 31 1 0 f b 31 1 0 f # 11200 is_subset c a 31 1 0 f b 31 1 1 2 3 5 7 11 13 15 20 22 24 27 28 29 30 # 11201 is_subset c a 31 1 0 4 9 10 13 14 18 20 25 26 28 29 30 b 31 1 0 4 9 10 13 14 18 20 25 26 28 29 30 # 11202 is_subset c a 31 1 0 4 9 10 13 14 18 20 25 26 28 29 30 b 31 1 1 e # 11203 is_subset c a 31 1 0 0 5 6 7 9 10 15 16 21 22 23 24 25 26 29 b 31 1 0 0 5 6 7 9 10 15 16 21 22 23 24 25 26 29 # 11204 is_subset c a 31 1 0 0 5 6 7 9 10 15 16 21 22 23 24 25 26 29 b 31 1 1 f # 11205 is_subset c a 31 1 0 2 3 4 8 13 17 18 19 27 28 30 b 31 1 0 2 3 4 8 13 17 18 19 27 28 30 # 11206 is_subset c a 31 1 0 2 3 4 8 13 17 18 19 27 28 30 b 31 1 1 1 2 3 4 8 9 14 16 17 21 22 23 27 28 29 30 # 11207 is_subset c a 31 1 1 e b 31 1 1 e # 11208 is_subset c a 31 1 1 e b 31 0 0 e # 11209 is_subset c a 31 1 1 e b 31 1 1 e # 11210 is_subset c a 31 1 1 e b 31 0 0 f # 11211 is_subset c a 31 1 1 e b 31 1 1 e # 11212 is_subset c a 31 1 1 e b 31 0 0 1 2 5 6 7 8 12 14 17 19 20 22 23 25 26 28 29 # 11213 is_subset c a 31 1 1 f b 31 1 1 f # 11214 is_subset c a 31 1 1 f b 31 0 0 e # 11215 is_subset c a 31 1 1 f b 31 1 1 f # 11216 is_subset c a 31 1 1 f b 31 0 0 f # 11217 is_subset c a 31 1 1 f b 31 1 1 f # 11218 is_subset c a 31 1 1 f b 31 0 0 4 7 9 10 15 16 23 24 26 29 30 # 11219 is_subset c a 31 1 1 3 7 8 9 10 14 17 19 21 22 24 29 b 31 1 1 3 7 8 9 10 14 17 19 21 22 24 29 # 11220 is_subset c a 31 1 1 3 7 8 9 10 14 17 19 21 22 24 29 b 31 0 0 e # 11221 is_subset c a 31 1 1 0 2 3 8 12 13 14 15 17 19 22 26 27 28 29 b 31 1 1 0 2 3 8 12 13 14 15 17 19 22 26 27 28 29 # 11222 is_subset c a 31 1 1 0 2 3 8 12 13 14 15 17 19 22 26 27 28 29 b 31 0 0 f # 11223 is_subset c a 31 1 1 0 1 3 6 7 11 12 14 15 16 17 19 20 21 22 25 28 29 30 b 31 1 1 0 1 3 6 7 11 12 14 15 16 17 19 20 21 22 25 28 29 30 # 11224 is_subset c a 31 1 1 0 1 3 6 7 11 12 14 15 16 17 19 20 21 22 25 28 29 30 b 31 0 0 1 5 10 11 14 18 19 21 22 23 25 27 30 # 11225 is_subset c a 31 1 1 e b 31 1 1 e # 11226 is_subset c a 31 1 1 e b 31 0 1 e # 11227 is_subset c a 31 1 1 e b 31 1 1 e # 11228 is_subset c a 31 1 1 e b 31 0 1 f # 11229 is_subset c a 31 1 1 e b 31 1 1 e # 11230 is_subset c a 31 1 1 e b 31 0 1 0 4 5 9 13 14 15 16 18 19 20 21 22 23 28 # 11231 is_subset c a 31 1 1 f b 31 1 1 f # 11232 is_subset c a 31 1 1 f b 31 0 1 e # 11233 is_subset c a 31 1 1 f b 31 1 1 f # 11234 is_subset c a 31 1 1 f b 31 0 1 f # 11235 is_subset c a 31 1 1 f b 31 1 1 f # 11236 is_subset c a 31 1 1 f b 31 0 1 0 1 2 5 6 7 8 9 10 13 16 17 19 20 23 24 25 26 28 30 # 11237 is_subset c a 31 1 1 0 4 6 9 12 14 16 19 21 23 26 27 b 31 1 1 0 4 6 9 12 14 16 19 21 23 26 27 # 11238 is_subset c a 31 1 1 0 4 6 9 12 14 16 19 21 23 26 27 b 31 0 1 e # 11239 is_subset c a 31 1 1 1 2 7 11 13 14 16 18 21 22 25 27 29 b 31 1 1 1 2 7 11 13 14 16 18 21 22 25 27 29 # 11240 is_subset c a 31 1 1 1 2 7 11 13 14 16 18 21 22 25 27 29 b 31 0 1 f # 11241 is_subset c a 31 1 1 1 3 5 9 10 12 14 19 20 26 28 29 30 b 31 1 1 1 3 5 9 10 12 14 19 20 26 28 29 30 # 11242 is_subset c a 31 1 1 1 3 5 9 10 12 14 19 20 26 28 29 30 b 31 0 1 4 6 7 10 11 14 15 17 20 21 22 23 26 27 28 30 # 11243 is_subset c a 31 1 1 e b 31 1 1 e # 11244 is_subset c a 31 1 1 e b 31 1 0 e # 11245 is_subset c a 31 1 1 e b 31 1 1 e # 11246 is_subset c a 31 1 1 e b 31 1 0 f # 11247 is_subset c a 31 1 1 e b 31 1 1 e # 11248 is_subset c a 31 1 1 e b 31 1 0 1 4 7 8 9 11 13 18 24 26 # 11249 is_subset c a 31 1 1 f b 31 1 1 f # 11250 is_subset c a 31 1 1 f b 31 1 0 e # 11251 is_subset c a 31 1 1 f b 31 1 1 f # 11252 is_subset c a 31 1 1 f b 31 1 0 f # 11253 is_subset c a 31 1 1 f b 31 1 1 f # 11254 is_subset c a 31 1 1 f b 31 1 0 0 5 7 8 11 15 17 19 20 21 24 25 29 # 11255 is_subset c a 31 1 1 0 2 5 6 8 9 10 11 14 16 17 18 19 20 21 22 23 25 27 28 29 b 31 1 1 0 2 5 6 8 9 10 11 14 16 17 18 19 20 21 22 23 25 27 28 29 # 11256 is_subset c a 31 1 1 0 2 5 6 8 9 10 11 14 16 17 18 19 20 21 22 23 25 27 28 29 b 31 1 0 e # 11257 is_subset c a 31 1 1 0 4 6 9 11 14 15 17 19 22 24 25 26 28 29 30 b 31 1 1 0 4 6 9 11 14 15 17 19 22 24 25 26 28 29 30 # 11258 is_subset c a 31 1 1 0 4 6 9 11 14 15 17 19 22 24 25 26 28 29 30 b 31 1 0 f # 11259 is_subset c a 31 1 1 0 1 2 3 4 6 7 9 13 16 18 19 20 21 22 24 25 26 29 30 b 31 1 1 0 1 2 3 4 6 7 9 13 16 18 19 20 21 22 24 25 26 29 30 # 11260 is_subset c a 31 1 1 0 1 2 3 4 6 7 9 13 16 18 19 20 21 22 24 25 26 29 30 b 31 1 0 1 2 8 10 12 14 15 17 18 20 21 23 26 27 28 29 30 # 11261 is_subset c a 31 1 1 e b 31 1 1 e # 11262 is_subset c a 31 1 1 e b 31 1 1 e # 11263 is_subset c a 31 1 1 e b 31 1 1 e # 11264 is_subset c a 31 1 1 e b 31 1 1 f # 11265 is_subset c a 31 1 1 e b 31 1 1 e # 11266 is_subset c a 31 1 1 e b 31 1 1 0 2 4 5 8 9 11 13 14 17 19 21 30 # 11267 is_subset c a 31 1 1 f b 31 1 1 f # 11268 is_subset c a 31 1 1 f b 31 1 1 e # 11269 is_subset c a 31 1 1 f b 31 1 1 f # 11270 is_subset c a 31 1 1 f b 31 1 1 f # 11271 is_subset c a 31 1 1 f b 31 1 1 f # 11272 is_subset c a 31 1 1 f b 31 1 1 1 2 4 5 6 9 15 17 18 21 23 25 27 29 30 # 11273 is_subset c a 31 1 1 3 6 8 9 10 12 15 16 18 19 20 21 23 27 28 30 b 31 1 1 3 6 8 9 10 12 15 16 18 19 20 21 23 27 28 30 # 11274 is_subset c a 31 1 1 3 6 8 9 10 12 15 16 18 19 20 21 23 27 28 30 b 31 1 1 e # 11275 is_subset c a 31 1 1 1 4 9 12 13 14 15 22 26 b 31 1 1 1 4 9 12 13 14 15 22 26 # 11276 is_subset c a 31 1 1 1 4 9 12 13 14 15 22 26 b 31 1 1 f # 11277 is_subset c a 31 1 1 1 3 4 5 6 9 10 11 12 13 14 15 19 20 22 24 30 b 31 1 1 1 3 4 5 6 9 10 11 12 13 14 15 19 20 22 24 30 # 11278 is_subset c a 31 1 1 1 3 4 5 6 9 10 11 12 13 14 15 19 20 22 24 30 b 31 1 1 0 3 6 7 9 10 12 13 14 16 18 19 20 25 27 29 # 11279 is_subset c a 32 0 0 e b 32 0 0 e # 11280 is_subset c a 32 0 0 e b 32 0 0 e # 11281 is_subset c a 32 0 0 e b 32 0 0 e # 11282 is_subset c a 32 0 0 e b 32 0 0 f # 11283 is_subset c a 32 0 0 e b 32 0 0 e # 11284 is_subset c a 32 0 0 e b 32 0 0 2 3 4 5 6 7 10 11 13 14 15 16 17 20 21 22 24 25 26 27 28 29 # 11285 is_subset c a 32 0 0 f b 32 0 0 f # 11286 is_subset c a 32 0 0 f b 32 0 0 e # 11287 is_subset c a 32 0 0 f b 32 0 0 f # 11288 is_subset c a 32 0 0 f b 32 0 0 f # 11289 is_subset c a 32 0 0 f b 32 0 0 f # 11290 is_subset c a 32 0 0 f b 32 0 0 1 4 5 11 12 13 15 16 17 19 20 23 24 25 27 28 29 31 # 11291 is_subset c a 32 0 0 0 3 7 8 10 11 17 19 20 21 22 23 24 26 28 31 b 32 0 0 0 3 7 8 10 11 17 19 20 21 22 23 24 26 28 31 # 11292 is_subset c a 32 0 0 0 3 7 8 10 11 17 19 20 21 22 23 24 26 28 31 b 32 0 0 e # 11293 is_subset c a 32 0 0 0 1 5 7 9 10 11 16 17 19 22 25 26 31 b 32 0 0 0 1 5 7 9 10 11 16 17 19 22 25 26 31 # 11294 is_subset c a 32 0 0 0 1 5 7 9 10 11 16 17 19 22 25 26 31 b 32 0 0 f # 11295 is_subset c a 32 0 0 0 1 7 9 11 13 17 19 20 25 26 b 32 0 0 0 1 7 9 11 13 17 19 20 25 26 # 11296 is_subset c a 32 0 0 0 1 7 9 11 13 17 19 20 25 26 b 32 0 0 0 1 5 7 8 9 11 13 15 18 20 22 23 25 29 30 # 11297 is_subset c a 32 0 0 e b 32 0 0 e # 11298 is_subset c a 32 0 0 e b 32 0 1 e # 11299 is_subset c a 32 0 0 e b 32 0 0 e # 11300 is_subset c a 32 0 0 e b 32 0 1 f # 11301 is_subset c a 32 0 0 e b 32 0 0 e # 11302 is_subset c a 32 0 0 e b 32 0 1 0 2 3 4 5 6 7 8 10 12 13 18 21 23 24 25 28 29 # 11303 is_subset c a 32 0 0 f b 32 0 0 f # 11304 is_subset c a 32 0 0 f b 32 0 1 e # 11305 is_subset c a 32 0 0 f b 32 0 0 f # 11306 is_subset c a 32 0 0 f b 32 0 1 f # 11307 is_subset c a 32 0 0 f b 32 0 0 f # 11308 is_subset c a 32 0 0 f b 32 0 1 6 7 9 12 14 16 17 20 21 22 23 29 30 # 11309 is_subset c a 32 0 0 0 2 5 7 12 15 17 18 20 21 25 30 b 32 0 0 0 2 5 7 12 15 17 18 20 21 25 30 # 11310 is_subset c a 32 0 0 0 2 5 7 12 15 17 18 20 21 25 30 b 32 0 1 e # 11311 is_subset c a 32 0 0 1 2 3 5 6 7 12 13 16 18 22 26 27 29 31 b 32 0 0 1 2 3 5 6 7 12 13 16 18 22 26 27 29 31 # 11312 is_subset c a 32 0 0 1 2 3 5 6 7 12 13 16 18 22 26 27 29 31 b 32 0 1 f # 11313 is_subset c a 32 0 0 0 1 2 4 5 10 14 15 17 19 23 27 29 30 31 b 32 0 0 0 1 2 4 5 10 14 15 17 19 23 27 29 30 31 # 11314 is_subset c a 32 0 0 0 1 2 4 5 10 14 15 17 19 23 27 29 30 31 b 32 0 1 0 1 3 4 8 10 13 15 16 17 18 20 21 25 # 11315 is_subset c a 32 0 0 e b 32 0 0 e # 11316 is_subset c a 32 0 0 e b 32 1 0 e # 11317 is_subset c a 32 0 0 e b 32 0 0 e # 11318 is_subset c a 32 0 0 e b 32 1 0 f # 11319 is_subset c a 32 0 0 e b 32 0 0 e # 11320 is_subset c a 32 0 0 e b 32 1 0 1 2 6 9 11 12 13 14 15 17 20 21 22 23 27 28 29 # 11321 is_subset c a 32 0 0 f b 32 0 0 f # 11322 is_subset c a 32 0 0 f b 32 1 0 e # 11323 is_subset c a 32 0 0 f b 32 0 0 f # 11324 is_subset c a 32 0 0 f b 32 1 0 f # 11325 is_subset c a 32 0 0 f b 32 0 0 f # 11326 is_subset c a 32 0 0 f b 32 1 0 0 2 3 5 7 8 9 10 11 13 14 15 16 23 24 25 26 27 28 29 31 # 11327 is_subset c a 32 0 0 2 3 5 6 8 9 12 16 17 18 22 25 28 29 31 b 32 0 0 2 3 5 6 8 9 12 16 17 18 22 25 28 29 31 # 11328 is_subset c a 32 0 0 2 3 5 6 8 9 12 16 17 18 22 25 28 29 31 b 32 1 0 e # 11329 is_subset c a 32 0 0 1 2 3 4 7 9 10 11 16 20 25 26 27 30 31 b 32 0 0 1 2 3 4 7 9 10 11 16 20 25 26 27 30 31 # 11330 is_subset c a 32 0 0 1 2 3 4 7 9 10 11 16 20 25 26 27 30 31 b 32 1 0 f # 11331 is_subset c a 32 0 0 1 5 6 9 11 13 14 20 21 22 24 25 30 b 32 0 0 1 5 6 9 11 13 14 20 21 22 24 25 30 # 11332 is_subset c a 32 0 0 1 5 6 9 11 13 14 20 21 22 24 25 30 b 32 1 0 0 2 5 6 7 8 11 15 16 17 19 20 26 28 29 30 31 # 11333 is_subset c a 32 0 0 e b 32 0 0 e # 11334 is_subset c a 32 0 0 e b 32 1 1 e # 11335 is_subset c a 32 0 0 e b 32 0 0 e # 11336 is_subset c a 32 0 0 e b 32 1 1 f # 11337 is_subset c a 32 0 0 e b 32 0 0 e # 11338 is_subset c a 32 0 0 e b 32 1 1 1 2 5 8 9 14 19 23 24 27 28 # 11339 is_subset c a 32 0 0 f b 32 0 0 f # 11340 is_subset c a 32 0 0 f b 32 1 1 e # 11341 is_subset c a 32 0 0 f b 32 0 0 f # 11342 is_subset c a 32 0 0 f b 32 1 1 f # 11343 is_subset c a 32 0 0 f b 32 0 0 f # 11344 is_subset c a 32 0 0 f b 32 1 1 0 2 5 6 8 9 11 15 16 18 20 22 23 26 30 # 11345 is_subset c a 32 0 0 0 2 3 5 8 9 14 15 16 17 19 20 22 25 26 27 28 29 31 b 32 0 0 0 2 3 5 8 9 14 15 16 17 19 20 22 25 26 27 28 29 31 # 11346 is_subset c a 32 0 0 0 2 3 5 8 9 14 15 16 17 19 20 22 25 26 27 28 29 31 b 32 1 1 e # 11347 is_subset c a 32 0 0 2 3 5 6 7 8 11 12 14 15 16 18 19 21 23 26 b 32 0 0 2 3 5 6 7 8 11 12 14 15 16 18 19 21 23 26 # 11348 is_subset c a 32 0 0 2 3 5 6 7 8 11 12 14 15 16 18 19 21 23 26 b 32 1 1 f # 11349 is_subset c a 32 0 0 0 1 4 7 10 12 13 14 15 16 17 18 23 24 27 28 29 31 b 32 0 0 0 1 4 7 10 12 13 14 15 16 17 18 23 24 27 28 29 31 # 11350 is_subset c a 32 0 0 0 1 4 7 10 12 13 14 15 16 17 18 23 24 27 28 29 31 b 32 1 1 0 1 3 4 8 10 11 12 13 15 19 21 22 29 31 # 11351 is_subset c a 32 0 1 e b 32 0 1 e # 11352 is_subset c a 32 0 1 e b 32 0 0 e # 11353 is_subset c a 32 0 1 e b 32 0 1 e # 11354 is_subset c a 32 0 1 e b 32 0 0 f # 11355 is_subset c a 32 0 1 e b 32 0 1 e # 11356 is_subset c a 32 0 1 e b 32 0 0 1 2 6 9 10 15 16 17 18 20 21 25 26 27 30 31 # 11357 is_subset c a 32 0 1 f b 32 0 1 f # 11358 is_subset c a 32 0 1 f b 32 0 0 e # 11359 is_subset c a 32 0 1 f b 32 0 1 f # 11360 is_subset c a 32 0 1 f b 32 0 0 f # 11361 is_subset c a 32 0 1 f b 32 0 1 f # 11362 is_subset c a 32 0 1 f b 32 0 0 4 6 9 10 11 14 15 17 20 21 22 25 26 27 29 30 # 11363 is_subset c a 32 0 1 2 3 4 5 9 10 11 13 14 17 18 20 30 b 32 0 1 2 3 4 5 9 10 11 13 14 17 18 20 30 # 11364 is_subset c a 32 0 1 2 3 4 5 9 10 11 13 14 17 18 20 30 b 32 0 0 e # 11365 is_subset c a 32 0 1 0 1 3 4 5 6 8 9 10 11 12 13 16 20 21 22 23 25 27 31 b 32 0 1 0 1 3 4 5 6 8 9 10 11 12 13 16 20 21 22 23 25 27 31 # 11366 is_subset c a 32 0 1 0 1 3 4 5 6 8 9 10 11 12 13 16 20 21 22 23 25 27 31 b 32 0 0 f # 11367 is_subset c a 32 0 1 1 2 5 8 13 14 15 16 19 22 23 28 29 b 32 0 1 1 2 5 8 13 14 15 16 19 22 23 28 29 # 11368 is_subset c a 32 0 1 1 2 5 8 13 14 15 16 19 22 23 28 29 b 32 0 0 3 4 5 7 11 13 14 18 21 23 24 25 27 29 30 31 # 11369 is_subset c a 32 0 1 e b 32 0 1 e # 11370 is_subset c a 32 0 1 e b 32 0 1 e # 11371 is_subset c a 32 0 1 e b 32 0 1 e # 11372 is_subset c a 32 0 1 e b 32 0 1 f # 11373 is_subset c a 32 0 1 e b 32 0 1 e # 11374 is_subset c a 32 0 1 e b 32 0 1 0 2 3 6 7 8 9 10 11 12 16 18 20 21 22 23 24 26 28 29 31 # 11375 is_subset c a 32 0 1 f b 32 0 1 f # 11376 is_subset c a 32 0 1 f b 32 0 1 e # 11377 is_subset c a 32 0 1 f b 32 0 1 f # 11378 is_subset c a 32 0 1 f b 32 0 1 f # 11379 is_subset c a 32 0 1 f b 32 0 1 f # 11380 is_subset c a 32 0 1 f b 32 0 1 2 3 5 6 8 11 12 14 15 16 17 18 19 20 21 22 26 29 # 11381 is_subset c a 32 0 1 3 4 5 6 7 12 19 21 26 27 29 b 32 0 1 3 4 5 6 7 12 19 21 26 27 29 # 11382 is_subset c a 32 0 1 3 4 5 6 7 12 19 21 26 27 29 b 32 0 1 e # 11383 is_subset c a 32 0 1 6 7 12 13 14 16 17 20 21 22 24 30 31 b 32 0 1 6 7 12 13 14 16 17 20 21 22 24 30 31 # 11384 is_subset c a 32 0 1 6 7 12 13 14 16 17 20 21 22 24 30 31 b 32 0 1 f # 11385 is_subset c a 32 0 1 0 1 2 5 7 9 10 12 13 14 15 16 17 18 19 20 21 23 26 27 28 29 31 b 32 0 1 0 1 2 5 7 9 10 12 13 14 15 16 17 18 19 20 21 23 26 27 28 29 31 # 11386 is_subset c a 32 0 1 0 1 2 5 7 9 10 12 13 14 15 16 17 18 19 20 21 23 26 27 28 29 31 b 32 0 1 0 3 5 6 7 8 9 11 18 19 22 24 25 27 29 30 # 11387 is_subset c a 32 0 1 e b 32 0 1 e # 11388 is_subset c a 32 0 1 e b 32 1 0 e # 11389 is_subset c a 32 0 1 e b 32 0 1 e # 11390 is_subset c a 32 0 1 e b 32 1 0 f # 11391 is_subset c a 32 0 1 e b 32 0 1 e # 11392 is_subset c a 32 0 1 e b 32 1 0 3 5 6 8 10 15 16 18 20 22 25 27 28 29 30 31 # 11393 is_subset c a 32 0 1 f b 32 0 1 f # 11394 is_subset c a 32 0 1 f b 32 1 0 e # 11395 is_subset c a 32 0 1 f b 32 0 1 f # 11396 is_subset c a 32 0 1 f b 32 1 0 f # 11397 is_subset c a 32 0 1 f b 32 0 1 f # 11398 is_subset c a 32 0 1 f b 32 1 0 2 6 7 8 9 13 14 17 19 25 27 28 30 31 # 11399 is_subset c a 32 0 1 1 3 6 7 8 9 12 15 16 17 18 22 25 27 30 31 b 32 0 1 1 3 6 7 8 9 12 15 16 17 18 22 25 27 30 31 # 11400 is_subset c a 32 0 1 1 3 6 7 8 9 12 15 16 17 18 22 25 27 30 31 b 32 1 0 e # 11401 is_subset c a 32 0 1 4 7 9 10 11 12 14 15 17 19 21 23 24 25 26 29 30 b 32 0 1 4 7 9 10 11 12 14 15 17 19 21 23 24 25 26 29 30 # 11402 is_subset c a 32 0 1 4 7 9 10 11 12 14 15 17 19 21 23 24 25 26 29 30 b 32 1 0 f # 11403 is_subset c a 32 0 1 2 3 4 6 7 9 10 13 15 16 21 25 26 27 28 29 31 b 32 0 1 2 3 4 6 7 9 10 13 15 16 21 25 26 27 28 29 31 # 11404 is_subset c a 32 0 1 2 3 4 6 7 9 10 13 15 16 21 25 26 27 28 29 31 b 32 1 0 2 3 4 5 6 7 9 11 12 15 16 17 20 21 22 24 25 26 31 # 11405 is_subset c a 32 0 1 e b 32 0 1 e # 11406 is_subset c a 32 0 1 e b 32 1 1 e # 11407 is_subset c a 32 0 1 e b 32 0 1 e # 11408 is_subset c a 32 0 1 e b 32 1 1 f # 11409 is_subset c a 32 0 1 e b 32 0 1 e # 11410 is_subset c a 32 0 1 e b 32 1 1 2 5 7 8 11 12 13 14 15 16 19 20 22 23 25 27 29 31 # 11411 is_subset c a 32 0 1 f b 32 0 1 f # 11412 is_subset c a 32 0 1 f b 32 1 1 e # 11413 is_subset c a 32 0 1 f b 32 0 1 f # 11414 is_subset c a 32 0 1 f b 32 1 1 f # 11415 is_subset c a 32 0 1 f b 32 0 1 f # 11416 is_subset c a 32 0 1 f b 32 1 1 2 4 7 8 9 11 12 14 15 20 23 26 27 # 11417 is_subset c a 32 0 1 2 4 8 9 11 12 13 17 18 19 22 23 24 25 26 27 28 b 32 0 1 2 4 8 9 11 12 13 17 18 19 22 23 24 25 26 27 28 # 11418 is_subset c a 32 0 1 2 4 8 9 11 12 13 17 18 19 22 23 24 25 26 27 28 b 32 1 1 e # 11419 is_subset c a 32 0 1 0 2 4 6 7 8 11 13 16 20 29 30 b 32 0 1 0 2 4 6 7 8 11 13 16 20 29 30 # 11420 is_subset c a 32 0 1 0 2 4 6 7 8 11 13 16 20 29 30 b 32 1 1 f # 11421 is_subset c a 32 0 1 1 2 4 5 6 7 8 10 14 16 18 19 20 23 24 25 28 29 b 32 0 1 1 2 4 5 6 7 8 10 14 16 18 19 20 23 24 25 28 29 # 11422 is_subset c a 32 0 1 1 2 4 5 6 7 8 10 14 16 18 19 20 23 24 25 28 29 b 32 1 1 0 3 4 6 7 8 9 13 14 17 18 19 22 24 27 29 30 31 # 11423 is_subset c a 32 1 0 e b 32 1 0 e # 11424 is_subset c a 32 1 0 e b 32 0 0 e # 11425 is_subset c a 32 1 0 e b 32 1 0 e # 11426 is_subset c a 32 1 0 e b 32 0 0 f # 11427 is_subset c a 32 1 0 e b 32 1 0 e # 11428 is_subset c a 32 1 0 e b 32 0 0 2 4 7 14 15 17 18 19 20 21 23 24 25 26 28 29 31 # 11429 is_subset c a 32 1 0 f b 32 1 0 f # 11430 is_subset c a 32 1 0 f b 32 0 0 e # 11431 is_subset c a 32 1 0 f b 32 1 0 f # 11432 is_subset c a 32 1 0 f b 32 0 0 f # 11433 is_subset c a 32 1 0 f b 32 1 0 f # 11434 is_subset c a 32 1 0 f b 32 0 0 1 7 8 9 13 15 16 17 18 19 20 21 22 23 24 26 # 11435 is_subset c a 32 1 0 1 2 3 5 8 9 10 11 12 13 14 16 19 21 26 27 28 31 b 32 1 0 1 2 3 5 8 9 10 11 12 13 14 16 19 21 26 27 28 31 # 11436 is_subset c a 32 1 0 1 2 3 5 8 9 10 11 12 13 14 16 19 21 26 27 28 31 b 32 0 0 e # 11437 is_subset c a 32 1 0 0 1 2 4 7 8 10 11 16 18 22 23 24 26 27 28 29 30 31 b 32 1 0 0 1 2 4 7 8 10 11 16 18 22 23 24 26 27 28 29 30 31 # 11438 is_subset c a 32 1 0 0 1 2 4 7 8 10 11 16 18 22 23 24 26 27 28 29 30 31 b 32 0 0 f # 11439 is_subset c a 32 1 0 0 2 3 4 6 7 8 11 12 13 15 19 20 22 23 24 b 32 1 0 0 2 3 4 6 7 8 11 12 13 15 19 20 22 23 24 # 11440 is_subset c a 32 1 0 0 2 3 4 6 7 8 11 12 13 15 19 20 22 23 24 b 32 0 0 0 4 8 9 11 13 14 15 16 19 24 25 26 29 30 31 # 11441 is_subset c a 32 1 0 e b 32 1 0 e # 11442 is_subset c a 32 1 0 e b 32 0 1 e # 11443 is_subset c a 32 1 0 e b 32 1 0 e # 11444 is_subset c a 32 1 0 e b 32 0 1 f # 11445 is_subset c a 32 1 0 e b 32 1 0 e # 11446 is_subset c a 32 1 0 e b 32 0 1 3 5 9 10 11 12 13 14 15 16 21 22 24 31 # 11447 is_subset c a 32 1 0 f b 32 1 0 f # 11448 is_subset c a 32 1 0 f b 32 0 1 e # 11449 is_subset c a 32 1 0 f b 32 1 0 f # 11450 is_subset c a 32 1 0 f b 32 0 1 f # 11451 is_subset c a 32 1 0 f b 32 1 0 f # 11452 is_subset c a 32 1 0 f b 32 0 1 1 2 3 7 10 11 12 13 14 15 16 22 24 29 30 31 # 11453 is_subset c a 32 1 0 1 2 3 4 6 9 12 13 15 17 21 22 23 27 28 30 b 32 1 0 1 2 3 4 6 9 12 13 15 17 21 22 23 27 28 30 # 11454 is_subset c a 32 1 0 1 2 3 4 6 9 12 13 15 17 21 22 23 27 28 30 b 32 0 1 e # 11455 is_subset c a 32 1 0 0 1 3 4 10 14 15 19 21 22 25 29 30 b 32 1 0 0 1 3 4 10 14 15 19 21 22 25 29 30 # 11456 is_subset c a 32 1 0 0 1 3 4 10 14 15 19 21 22 25 29 30 b 32 0 1 f # 11457 is_subset c a 32 1 0 0 3 4 8 12 16 18 19 21 23 24 25 26 27 28 29 b 32 1 0 0 3 4 8 12 16 18 19 21 23 24 25 26 27 28 29 # 11458 is_subset c a 32 1 0 0 3 4 8 12 16 18 19 21 23 24 25 26 27 28 29 b 32 0 1 0 3 4 6 7 8 12 13 14 15 17 18 19 24 27 # 11459 is_subset c a 32 1 0 e b 32 1 0 e # 11460 is_subset c a 32 1 0 e b 32 1 0 e # 11461 is_subset c a 32 1 0 e b 32 1 0 e # 11462 is_subset c a 32 1 0 e b 32 1 0 f # 11463 is_subset c a 32 1 0 e b 32 1 0 e # 11464 is_subset c a 32 1 0 e b 32 1 0 0 2 3 4 5 6 7 13 16 17 21 25 26 30 # 11465 is_subset c a 32 1 0 f b 32 1 0 f # 11466 is_subset c a 32 1 0 f b 32 1 0 e # 11467 is_subset c a 32 1 0 f b 32 1 0 f # 11468 is_subset c a 32 1 0 f b 32 1 0 f # 11469 is_subset c a 32 1 0 f b 32 1 0 f # 11470 is_subset c a 32 1 0 f b 32 1 0 0 1 3 4 8 9 10 11 12 13 16 17 18 23 24 28 29 # 11471 is_subset c a 32 1 0 0 1 4 5 6 7 10 14 16 18 20 23 24 26 30 b 32 1 0 0 1 4 5 6 7 10 14 16 18 20 23 24 26 30 # 11472 is_subset c a 32 1 0 0 1 4 5 6 7 10 14 16 18 20 23 24 26 30 b 32 1 0 e # 11473 is_subset c a 32 1 0 2 4 6 8 9 10 12 14 15 16 17 19 20 21 23 27 28 30 b 32 1 0 2 4 6 8 9 10 12 14 15 16 17 19 20 21 23 27 28 30 # 11474 is_subset c a 32 1 0 2 4 6 8 9 10 12 14 15 16 17 19 20 21 23 27 28 30 b 32 1 0 f # 11475 is_subset c a 32 1 0 1 6 9 10 13 17 18 23 24 27 28 b 32 1 0 1 6 9 10 13 17 18 23 24 27 28 # 11476 is_subset c a 32 1 0 1 6 9 10 13 17 18 23 24 27 28 b 32 1 0 1 2 5 6 10 11 13 14 15 16 17 22 24 27 28 29 30 # 11477 is_subset c a 32 1 0 e b 32 1 0 e # 11478 is_subset c a 32 1 0 e b 32 1 1 e # 11479 is_subset c a 32 1 0 e b 32 1 0 e # 11480 is_subset c a 32 1 0 e b 32 1 1 f # 11481 is_subset c a 32 1 0 e b 32 1 0 e # 11482 is_subset c a 32 1 0 e b 32 1 1 1 2 3 7 8 9 10 12 13 14 15 16 18 20 21 22 23 28 30 # 11483 is_subset c a 32 1 0 f b 32 1 0 f # 11484 is_subset c a 32 1 0 f b 32 1 1 e # 11485 is_subset c a 32 1 0 f b 32 1 0 f # 11486 is_subset c a 32 1 0 f b 32 1 1 f # 11487 is_subset c a 32 1 0 f b 32 1 0 f # 11488 is_subset c a 32 1 0 f b 32 1 1 3 4 6 7 15 21 22 23 28 29 30 # 11489 is_subset c a 32 1 0 1 2 5 7 9 12 13 16 17 18 20 21 22 23 29 31 b 32 1 0 1 2 5 7 9 12 13 16 17 18 20 21 22 23 29 31 # 11490 is_subset c a 32 1 0 1 2 5 7 9 12 13 16 17 18 20 21 22 23 29 31 b 32 1 1 e # 11491 is_subset c a 32 1 0 0 5 9 10 12 14 15 17 18 19 21 22 23 26 b 32 1 0 0 5 9 10 12 14 15 17 18 19 21 22 23 26 # 11492 is_subset c a 32 1 0 0 5 9 10 12 14 15 17 18 19 21 22 23 26 b 32 1 1 f # 11493 is_subset c a 32 1 0 0 2 6 7 9 11 14 16 17 20 23 24 27 28 29 31 b 32 1 0 0 2 6 7 9 11 14 16 17 20 23 24 27 28 29 31 # 11494 is_subset c a 32 1 0 0 2 6 7 9 11 14 16 17 20 23 24 27 28 29 31 b 32 1 1 1 2 5 11 12 15 16 17 19 22 23 24 26 28 # 11495 is_subset c a 32 1 1 e b 32 1 1 e # 11496 is_subset c a 32 1 1 e b 32 0 0 e # 11497 is_subset c a 32 1 1 e b 32 1 1 e # 11498 is_subset c a 32 1 1 e b 32 0 0 f # 11499 is_subset c a 32 1 1 e b 32 1 1 e # 11500 is_subset c a 32 1 1 e b 32 0 0 2 4 5 6 12 14 15 20 26 28 30 31 # 11501 is_subset c a 32 1 1 f b 32 1 1 f # 11502 is_subset c a 32 1 1 f b 32 0 0 e # 11503 is_subset c a 32 1 1 f b 32 1 1 f # 11504 is_subset c a 32 1 1 f b 32 0 0 f # 11505 is_subset c a 32 1 1 f b 32 1 1 f # 11506 is_subset c a 32 1 1 f b 32 0 0 6 7 8 11 12 15 17 21 22 23 25 28 29 # 11507 is_subset c a 32 1 1 1 2 3 5 6 10 11 14 15 19 21 23 24 25 27 28 b 32 1 1 1 2 3 5 6 10 11 14 15 19 21 23 24 25 27 28 # 11508 is_subset c a 32 1 1 1 2 3 5 6 10 11 14 15 19 21 23 24 25 27 28 b 32 0 0 e # 11509 is_subset c a 32 1 1 6 9 11 14 15 16 21 23 24 25 26 29 30 b 32 1 1 6 9 11 14 15 16 21 23 24 25 26 29 30 # 11510 is_subset c a 32 1 1 6 9 11 14 15 16 21 23 24 25 26 29 30 b 32 0 0 f # 11511 is_subset c a 32 1 1 1 2 5 6 7 10 11 12 13 15 16 17 20 21 23 24 25 27 28 29 b 32 1 1 1 2 5 6 7 10 11 12 13 15 16 17 20 21 23 24 25 27 28 29 # 11512 is_subset c a 32 1 1 1 2 5 6 7 10 11 12 13 15 16 17 20 21 23 24 25 27 28 29 b 32 0 0 0 2 5 6 7 9 13 16 17 18 19 20 21 22 24 25 27 28 29 31 # 11513 is_subset c a 32 1 1 e b 32 1 1 e # 11514 is_subset c a 32 1 1 e b 32 0 1 e # 11515 is_subset c a 32 1 1 e b 32 1 1 e # 11516 is_subset c a 32 1 1 e b 32 0 1 f # 11517 is_subset c a 32 1 1 e b 32 1 1 e # 11518 is_subset c a 32 1 1 e b 32 0 1 1 3 4 7 8 9 12 14 15 17 18 19 20 21 23 24 25 26 27 28 29 30 # 11519 is_subset c a 32 1 1 f b 32 1 1 f # 11520 is_subset c a 32 1 1 f b 32 0 1 e # 11521 is_subset c a 32 1 1 f b 32 1 1 f # 11522 is_subset c a 32 1 1 f b 32 0 1 f # 11523 is_subset c a 32 1 1 f b 32 1 1 f # 11524 is_subset c a 32 1 1 f b 32 0 1 0 1 3 5 6 8 9 10 11 13 14 15 17 18 22 25 26 28 29 30 31 # 11525 is_subset c a 32 1 1 0 1 3 4 9 11 12 13 16 23 26 27 29 30 31 b 32 1 1 0 1 3 4 9 11 12 13 16 23 26 27 29 30 31 # 11526 is_subset c a 32 1 1 0 1 3 4 9 11 12 13 16 23 26 27 29 30 31 b 32 0 1 e # 11527 is_subset c a 32 1 1 0 2 6 7 11 13 15 17 19 21 31 b 32 1 1 0 2 6 7 11 13 15 17 19 21 31 # 11528 is_subset c a 32 1 1 0 2 6 7 11 13 15 17 19 21 31 b 32 0 1 f # 11529 is_subset c a 32 1 1 3 4 6 7 8 10 11 14 16 20 21 22 26 31 b 32 1 1 3 4 6 7 8 10 11 14 16 20 21 22 26 31 # 11530 is_subset c a 32 1 1 3 4 6 7 8 10 11 14 16 20 21 22 26 31 b 32 0 1 0 1 2 5 8 12 14 15 17 18 20 21 22 23 24 28 29 # 11531 is_subset c a 32 1 1 e b 32 1 1 e # 11532 is_subset c a 32 1 1 e b 32 1 0 e # 11533 is_subset c a 32 1 1 e b 32 1 1 e # 11534 is_subset c a 32 1 1 e b 32 1 0 f # 11535 is_subset c a 32 1 1 e b 32 1 1 e # 11536 is_subset c a 32 1 1 e b 32 1 0 0 2 6 8 9 11 15 19 21 22 26 30 # 11537 is_subset c a 32 1 1 f b 32 1 1 f # 11538 is_subset c a 32 1 1 f b 32 1 0 e # 11539 is_subset c a 32 1 1 f b 32 1 1 f # 11540 is_subset c a 32 1 1 f b 32 1 0 f # 11541 is_subset c a 32 1 1 f b 32 1 1 f # 11542 is_subset c a 32 1 1 f b 32 1 0 0 1 2 3 5 8 9 10 11 12 14 16 17 20 24 26 30 # 11543 is_subset c a 32 1 1 1 6 9 13 16 17 19 20 21 23 26 27 28 29 30 31 b 32 1 1 1 6 9 13 16 17 19 20 21 23 26 27 28 29 30 31 # 11544 is_subset c a 32 1 1 1 6 9 13 16 17 19 20 21 23 26 27 28 29 30 31 b 32 1 0 e # 11545 is_subset c a 32 1 1 3 4 7 8 13 17 20 21 26 27 28 29 30 b 32 1 1 3 4 7 8 13 17 20 21 26 27 28 29 30 # 11546 is_subset c a 32 1 1 3 4 7 8 13 17 20 21 26 27 28 29 30 b 32 1 0 f # 11547 is_subset c a 32 1 1 3 4 5 6 7 10 11 12 17 18 20 22 23 25 26 28 29 30 31 b 32 1 1 3 4 5 6 7 10 11 12 17 18 20 22 23 25 26 28 29 30 31 # 11548 is_subset c a 32 1 1 3 4 5 6 7 10 11 12 17 18 20 22 23 25 26 28 29 30 31 b 32 1 0 2 5 6 9 14 15 17 19 20 22 24 25 26 27 28 29 30 # 11549 is_subset c a 32 1 1 e b 32 1 1 e # 11550 is_subset c a 32 1 1 e b 32 1 1 e # 11551 is_subset c a 32 1 1 e b 32 1 1 e # 11552 is_subset c a 32 1 1 e b 32 1 1 f # 11553 is_subset c a 32 1 1 e b 32 1 1 e # 11554 is_subset c a 32 1 1 e b 32 1 1 1 2 3 4 5 7 8 12 13 16 17 19 20 23 26 30 31 # 11555 is_subset c a 32 1 1 f b 32 1 1 f # 11556 is_subset c a 32 1 1 f b 32 1 1 e # 11557 is_subset c a 32 1 1 f b 32 1 1 f # 11558 is_subset c a 32 1 1 f b 32 1 1 f # 11559 is_subset c a 32 1 1 f b 32 1 1 f # 11560 is_subset c a 32 1 1 f b 32 1 1 3 5 6 7 15 17 18 20 21 25 31 # 11561 is_subset c a 32 1 1 0 1 2 3 5 6 7 8 10 12 15 17 20 25 26 27 29 30 31 b 32 1 1 0 1 2 3 5 6 7 8 10 12 15 17 20 25 26 27 29 30 31 # 11562 is_subset c a 32 1 1 0 1 2 3 5 6 7 8 10 12 15 17 20 25 26 27 29 30 31 b 32 1 1 e # 11563 is_subset c a 32 1 1 0 2 5 6 9 11 13 14 15 16 18 19 20 22 25 27 28 29 30 b 32 1 1 0 2 5 6 9 11 13 14 15 16 18 19 20 22 25 27 28 29 30 # 11564 is_subset c a 32 1 1 0 2 5 6 9 11 13 14 15 16 18 19 20 22 25 27 28 29 30 b 32 1 1 f # 11565 is_subset c a 32 1 1 1 2 3 4 5 6 7 8 10 13 14 15 17 18 19 21 23 26 30 31 b 32 1 1 1 2 3 4 5 6 7 8 10 13 14 15 17 18 19 21 23 26 30 31 # 11566 is_subset c a 32 1 1 1 2 3 4 5 6 7 8 10 13 14 15 17 18 19 21 23 26 30 31 b 32 1 1 2 3 5 6 7 9 12 19 20 22 24 26 28 # 11567 is_subset c a 33 0 0 e b 33 0 0 e # 11568 is_subset c a 33 0 0 e b 33 0 0 e # 11569 is_subset c a 33 0 0 e b 33 0 0 e # 11570 is_subset c a 33 0 0 e b 33 0 0 f # 11571 is_subset c a 33 0 0 e b 33 0 0 e # 11572 is_subset c a 33 0 0 e b 33 0 0 0 4 10 12 15 17 18 22 24 25 26 27 # 11573 is_subset c a 33 0 0 f b 33 0 0 f # 11574 is_subset c a 33 0 0 f b 33 0 0 e # 11575 is_subset c a 33 0 0 f b 33 0 0 f # 11576 is_subset c a 33 0 0 f b 33 0 0 f # 11577 is_subset c a 33 0 0 f b 33 0 0 f # 11578 is_subset c a 33 0 0 f b 33 0 0 3 4 5 6 10 11 12 13 16 17 18 20 21 24 26 27 29 31 # 11579 is_subset c a 33 0 0 0 1 3 4 7 9 10 15 16 18 19 20 22 23 24 25 27 b 33 0 0 0 1 3 4 7 9 10 15 16 18 19 20 22 23 24 25 27 # 11580 is_subset c a 33 0 0 0 1 3 4 7 9 10 15 16 18 19 20 22 23 24 25 27 b 33 0 0 e # 11581 is_subset c a 33 0 0 0 1 2 5 6 8 11 14 15 17 18 20 21 26 27 28 29 30 31 32 b 33 0 0 0 1 2 5 6 8 11 14 15 17 18 20 21 26 27 28 29 30 31 32 # 11582 is_subset c a 33 0 0 0 1 2 5 6 8 11 14 15 17 18 20 21 26 27 28 29 30 31 32 b 33 0 0 f # 11583 is_subset c a 33 0 0 0 1 3 4 6 7 8 9 12 14 15 19 20 21 24 25 27 28 29 30 31 32 b 33 0 0 0 1 3 4 6 7 8 9 12 14 15 19 20 21 24 25 27 28 29 30 31 32 # 11584 is_subset c a 33 0 0 0 1 3 4 6 7 8 9 12 14 15 19 20 21 24 25 27 28 29 30 31 32 b 33 0 0 0 1 2 4 5 9 11 12 13 14 15 17 18 21 25 28 31 # 11585 is_subset c a 33 0 0 e b 33 0 0 e # 11586 is_subset c a 33 0 0 e b 33 0 1 e # 11587 is_subset c a 33 0 0 e b 33 0 0 e # 11588 is_subset c a 33 0 0 e b 33 0 1 f # 11589 is_subset c a 33 0 0 e b 33 0 0 e # 11590 is_subset c a 33 0 0 e b 33 0 1 0 2 3 4 6 7 8 9 11 12 15 17 18 20 23 25 26 27 28 30 31 32 # 11591 is_subset c a 33 0 0 f b 33 0 0 f # 11592 is_subset c a 33 0 0 f b 33 0 1 e # 11593 is_subset c a 33 0 0 f b 33 0 0 f # 11594 is_subset c a 33 0 0 f b 33 0 1 f # 11595 is_subset c a 33 0 0 f b 33 0 0 f # 11596 is_subset c a 33 0 0 f b 33 0 1 0 1 4 8 9 13 15 16 17 18 21 22 23 24 26 29 30 32 # 11597 is_subset c a 33 0 0 1 3 5 9 15 23 29 30 31 32 b 33 0 0 1 3 5 9 15 23 29 30 31 32 # 11598 is_subset c a 33 0 0 1 3 5 9 15 23 29 30 31 32 b 33 0 1 e # 11599 is_subset c a 33 0 0 1 2 6 7 8 9 14 15 18 19 21 22 23 24 27 31 b 33 0 0 1 2 6 7 8 9 14 15 18 19 21 22 23 24 27 31 # 11600 is_subset c a 33 0 0 1 2 6 7 8 9 14 15 18 19 21 22 23 24 27 31 b 33 0 1 f # 11601 is_subset c a 33 0 0 3 4 7 8 9 11 13 15 16 19 22 24 26 28 32 b 33 0 0 3 4 7 8 9 11 13 15 16 19 22 24 26 28 32 # 11602 is_subset c a 33 0 0 3 4 7 8 9 11 13 15 16 19 22 24 26 28 32 b 33 0 1 0 2 4 5 8 10 11 12 13 14 15 16 17 21 22 23 26 27 28 30 31 32 # 11603 is_subset c a 33 0 0 e b 33 0 0 e # 11604 is_subset c a 33 0 0 e b 33 1 0 e # 11605 is_subset c a 33 0 0 e b 33 0 0 e # 11606 is_subset c a 33 0 0 e b 33 1 0 f # 11607 is_subset c a 33 0 0 e b 33 0 0 e # 11608 is_subset c a 33 0 0 e b 33 1 0 5 7 8 11 14 15 16 17 20 22 25 26 27 28 29 30 32 # 11609 is_subset c a 33 0 0 f b 33 0 0 f # 11610 is_subset c a 33 0 0 f b 33 1 0 e # 11611 is_subset c a 33 0 0 f b 33 0 0 f # 11612 is_subset c a 33 0 0 f b 33 1 0 f # 11613 is_subset c a 33 0 0 f b 33 0 0 f # 11614 is_subset c a 33 0 0 f b 33 1 0 4 7 8 9 12 14 15 16 18 21 22 24 25 27 30 31 32 # 11615 is_subset c a 33 0 0 1 2 5 8 10 13 14 15 20 21 23 27 28 29 30 32 b 33 0 0 1 2 5 8 10 13 14 15 20 21 23 27 28 29 30 32 # 11616 is_subset c a 33 0 0 1 2 5 8 10 13 14 15 20 21 23 27 28 29 30 32 b 33 1 0 e # 11617 is_subset c a 33 0 0 1 4 10 13 14 15 18 20 22 23 24 26 27 30 31 32 b 33 0 0 1 4 10 13 14 15 18 20 22 23 24 26 27 30 31 32 # 11618 is_subset c a 33 0 0 1 4 10 13 14 15 18 20 22 23 24 26 27 30 31 32 b 33 1 0 f # 11619 is_subset c a 33 0 0 0 1 2 6 7 12 13 14 16 18 21 22 23 24 25 26 29 32 b 33 0 0 0 1 2 6 7 12 13 14 16 18 21 22 23 24 25 26 29 32 # 11620 is_subset c a 33 0 0 0 1 2 6 7 12 13 14 16 18 21 22 23 24 25 26 29 32 b 33 1 0 1 2 3 4 5 8 9 11 12 14 17 20 23 25 27 28 29 30 32 # 11621 is_subset c a 33 0 0 e b 33 0 0 e # 11622 is_subset c a 33 0 0 e b 33 1 1 e # 11623 is_subset c a 33 0 0 e b 33 0 0 e # 11624 is_subset c a 33 0 0 e b 33 1 1 f # 11625 is_subset c a 33 0 0 e b 33 0 0 e # 11626 is_subset c a 33 0 0 e b 33 1 1 0 1 2 5 7 10 11 13 17 19 21 22 23 25 26 27 28 30 # 11627 is_subset c a 33 0 0 f b 33 0 0 f # 11628 is_subset c a 33 0 0 f b 33 1 1 e # 11629 is_subset c a 33 0 0 f b 33 0 0 f # 11630 is_subset c a 33 0 0 f b 33 1 1 f # 11631 is_subset c a 33 0 0 f b 33 0 0 f # 11632 is_subset c a 33 0 0 f b 33 1 1 1 6 7 12 14 16 18 19 21 22 24 25 27 28 29 32 # 11633 is_subset c a 33 0 0 0 1 7 9 10 11 14 15 16 19 21 27 28 30 b 33 0 0 0 1 7 9 10 11 14 15 16 19 21 27 28 30 # 11634 is_subset c a 33 0 0 0 1 7 9 10 11 14 15 16 19 21 27 28 30 b 33 1 1 e # 11635 is_subset c a 33 0 0 0 1 2 5 6 7 9 11 14 15 16 19 20 21 27 28 29 30 31 b 33 0 0 0 1 2 5 6 7 9 11 14 15 16 19 20 21 27 28 29 30 31 # 11636 is_subset c a 33 0 0 0 1 2 5 6 7 9 11 14 15 16 19 20 21 27 28 29 30 31 b 33 1 1 f # 11637 is_subset c a 33 0 0 0 2 4 5 6 7 9 11 14 15 16 17 18 19 20 22 24 25 28 30 b 33 0 0 0 2 4 5 6 7 9 11 14 15 16 17 18 19 20 22 24 25 28 30 # 11638 is_subset c a 33 0 0 0 2 4 5 6 7 9 11 14 15 16 17 18 19 20 22 24 25 28 30 b 33 1 1 0 1 4 6 7 11 15 18 19 23 25 26 27 28 31 # 11639 is_subset c a 33 0 1 e b 33 0 1 e # 11640 is_subset c a 33 0 1 e b 33 0 0 e # 11641 is_subset c a 33 0 1 e b 33 0 1 e # 11642 is_subset c a 33 0 1 e b 33 0 0 f # 11643 is_subset c a 33 0 1 e b 33 0 1 e # 11644 is_subset c a 33 0 1 e b 33 0 0 0 3 4 5 10 12 13 14 15 16 19 20 23 24 26 29 32 # 11645 is_subset c a 33 0 1 f b 33 0 1 f # 11646 is_subset c a 33 0 1 f b 33 0 0 e # 11647 is_subset c a 33 0 1 f b 33 0 1 f # 11648 is_subset c a 33 0 1 f b 33 0 0 f # 11649 is_subset c a 33 0 1 f b 33 0 1 f # 11650 is_subset c a 33 0 1 f b 33 0 0 0 2 3 4 6 7 10 11 13 14 15 16 17 18 21 24 26 28 31 # 11651 is_subset c a 33 0 1 3 7 8 11 12 13 14 15 16 17 18 23 25 26 27 31 32 b 33 0 1 3 7 8 11 12 13 14 15 16 17 18 23 25 26 27 31 32 # 11652 is_subset c a 33 0 1 3 7 8 11 12 13 14 15 16 17 18 23 25 26 27 31 32 b 33 0 0 e # 11653 is_subset c a 33 0 1 1 3 4 6 8 11 13 16 17 22 23 24 25 28 29 32 b 33 0 1 1 3 4 6 8 11 13 16 17 22 23 24 25 28 29 32 # 11654 is_subset c a 33 0 1 1 3 4 6 8 11 13 16 17 22 23 24 25 28 29 32 b 33 0 0 f # 11655 is_subset c a 33 0 1 0 2 4 5 9 10 13 17 18 19 20 21 22 24 27 28 29 30 31 b 33 0 1 0 2 4 5 9 10 13 17 18 19 20 21 22 24 27 28 29 30 31 # 11656 is_subset c a 33 0 1 0 2 4 5 9 10 13 17 18 19 20 21 22 24 27 28 29 30 31 b 33 0 0 5 6 9 10 14 15 17 18 19 22 23 24 25 27 28 30 # 11657 is_subset c a 33 0 1 e b 33 0 1 e # 11658 is_subset c a 33 0 1 e b 33 0 1 e # 11659 is_subset c a 33 0 1 e b 33 0 1 e # 11660 is_subset c a 33 0 1 e b 33 0 1 f # 11661 is_subset c a 33 0 1 e b 33 0 1 e # 11662 is_subset c a 33 0 1 e b 33 0 1 1 2 3 9 10 11 12 13 15 19 21 26 27 32 # 11663 is_subset c a 33 0 1 f b 33 0 1 f # 11664 is_subset c a 33 0 1 f b 33 0 1 e # 11665 is_subset c a 33 0 1 f b 33 0 1 f # 11666 is_subset c a 33 0 1 f b 33 0 1 f # 11667 is_subset c a 33 0 1 f b 33 0 1 f # 11668 is_subset c a 33 0 1 f b 33 0 1 3 4 5 7 8 10 13 14 15 16 17 18 19 26 31 32 # 11669 is_subset c a 33 0 1 0 2 3 4 5 6 7 8 15 20 21 22 26 27 28 31 32 b 33 0 1 0 2 3 4 5 6 7 8 15 20 21 22 26 27 28 31 32 # 11670 is_subset c a 33 0 1 0 2 3 4 5 6 7 8 15 20 21 22 26 27 28 31 32 b 33 0 1 e # 11671 is_subset c a 33 0 1 1 2 3 5 6 7 10 12 13 14 19 20 26 27 28 29 30 31 b 33 0 1 1 2 3 5 6 7 10 12 13 14 19 20 26 27 28 29 30 31 # 11672 is_subset c a 33 0 1 1 2 3 5 6 7 10 12 13 14 19 20 26 27 28 29 30 31 b 33 0 1 f # 11673 is_subset c a 33 0 1 1 2 4 5 7 8 9 10 11 12 13 14 15 17 18 19 22 23 25 27 31 b 33 0 1 1 2 4 5 7 8 9 10 11 12 13 14 15 17 18 19 22 23 25 27 31 # 11674 is_subset c a 33 0 1 1 2 4 5 7 8 9 10 11 12 13 14 15 17 18 19 22 23 25 27 31 b 33 0 1 4 6 7 8 9 11 12 15 17 19 20 21 22 23 25 27 31 # 11675 is_subset c a 33 0 1 e b 33 0 1 e # 11676 is_subset c a 33 0 1 e b 33 1 0 e # 11677 is_subset c a 33 0 1 e b 33 0 1 e # 11678 is_subset c a 33 0 1 e b 33 1 0 f # 11679 is_subset c a 33 0 1 e b 33 0 1 e # 11680 is_subset c a 33 0 1 e b 33 1 0 0 3 5 6 7 9 10 11 16 19 21 26 28 29 30 32 # 11681 is_subset c a 33 0 1 f b 33 0 1 f # 11682 is_subset c a 33 0 1 f b 33 1 0 e # 11683 is_subset c a 33 0 1 f b 33 0 1 f # 11684 is_subset c a 33 0 1 f b 33 1 0 f # 11685 is_subset c a 33 0 1 f b 33 0 1 f # 11686 is_subset c a 33 0 1 f b 33 1 0 6 8 9 10 13 17 18 21 24 25 28 29 # 11687 is_subset c a 33 0 1 0 2 3 6 7 8 11 12 13 15 18 20 23 24 25 26 30 31 32 b 33 0 1 0 2 3 6 7 8 11 12 13 15 18 20 23 24 25 26 30 31 32 # 11688 is_subset c a 33 0 1 0 2 3 6 7 8 11 12 13 15 18 20 23 24 25 26 30 31 32 b 33 1 0 e # 11689 is_subset c a 33 0 1 1 2 3 4 5 6 9 11 12 13 16 17 23 25 27 31 b 33 0 1 1 2 3 4 5 6 9 11 12 13 16 17 23 25 27 31 # 11690 is_subset c a 33 0 1 1 2 3 4 5 6 9 11 12 13 16 17 23 25 27 31 b 33 1 0 f # 11691 is_subset c a 33 0 1 1 5 6 8 9 11 13 14 19 20 24 25 26 27 29 31 32 b 33 0 1 1 5 6 8 9 11 13 14 19 20 24 25 26 27 29 31 32 # 11692 is_subset c a 33 0 1 1 5 6 8 9 11 13 14 19 20 24 25 26 27 29 31 32 b 33 1 0 7 8 14 15 16 20 21 23 24 27 30 31 32 # 11693 is_subset c a 33 0 1 e b 33 0 1 e # 11694 is_subset c a 33 0 1 e b 33 1 1 e # 11695 is_subset c a 33 0 1 e b 33 0 1 e # 11696 is_subset c a 33 0 1 e b 33 1 1 f # 11697 is_subset c a 33 0 1 e b 33 0 1 e # 11698 is_subset c a 33 0 1 e b 33 1 1 0 2 5 7 9 10 11 13 14 15 18 23 24 27 28 30 31 # 11699 is_subset c a 33 0 1 f b 33 0 1 f # 11700 is_subset c a 33 0 1 f b 33 1 1 e # 11701 is_subset c a 33 0 1 f b 33 0 1 f # 11702 is_subset c a 33 0 1 f b 33 1 1 f # 11703 is_subset c a 33 0 1 f b 33 0 1 f # 11704 is_subset c a 33 0 1 f b 33 1 1 0 2 3 4 5 6 8 9 10 13 14 15 16 17 21 22 25 28 30 32 # 11705 is_subset c a 33 0 1 0 2 3 7 9 12 14 15 18 22 24 26 32 b 33 0 1 0 2 3 7 9 12 14 15 18 22 24 26 32 # 11706 is_subset c a 33 0 1 0 2 3 7 9 12 14 15 18 22 24 26 32 b 33 1 1 e # 11707 is_subset c a 33 0 1 1 2 5 6 9 11 12 13 16 17 21 23 24 25 26 30 31 b 33 0 1 1 2 5 6 9 11 12 13 16 17 21 23 24 25 26 30 31 # 11708 is_subset c a 33 0 1 1 2 5 6 9 11 12 13 16 17 21 23 24 25 26 30 31 b 33 1 1 f # 11709 is_subset c a 33 0 1 0 2 3 4 7 10 16 17 18 26 27 29 30 32 b 33 0 1 0 2 3 4 7 10 16 17 18 26 27 29 30 32 # 11710 is_subset c a 33 0 1 0 2 3 4 7 10 16 17 18 26 27 29 30 32 b 33 1 1 0 2 3 4 5 8 9 10 13 14 16 18 20 22 26 32 # 11711 is_subset c a 33 1 0 e b 33 1 0 e # 11712 is_subset c a 33 1 0 e b 33 0 0 e # 11713 is_subset c a 33 1 0 e b 33 1 0 e # 11714 is_subset c a 33 1 0 e b 33 0 0 f # 11715 is_subset c a 33 1 0 e b 33 1 0 e # 11716 is_subset c a 33 1 0 e b 33 0 0 2 4 5 7 8 11 13 15 16 17 18 21 22 23 24 25 27 29 30 32 # 11717 is_subset c a 33 1 0 f b 33 1 0 f # 11718 is_subset c a 33 1 0 f b 33 0 0 e # 11719 is_subset c a 33 1 0 f b 33 1 0 f # 11720 is_subset c a 33 1 0 f b 33 0 0 f # 11721 is_subset c a 33 1 0 f b 33 1 0 f # 11722 is_subset c a 33 1 0 f b 33 0 0 1 2 4 8 9 10 13 16 18 19 21 27 29 30 31 32 # 11723 is_subset c a 33 1 0 0 2 6 10 12 14 16 17 19 21 22 23 25 26 28 29 30 31 32 b 33 1 0 0 2 6 10 12 14 16 17 19 21 22 23 25 26 28 29 30 31 32 # 11724 is_subset c a 33 1 0 0 2 6 10 12 14 16 17 19 21 22 23 25 26 28 29 30 31 32 b 33 0 0 e # 11725 is_subset c a 33 1 0 0 1 3 4 5 8 16 17 19 20 22 23 26 27 29 30 31 32 b 33 1 0 0 1 3 4 5 8 16 17 19 20 22 23 26 27 29 30 31 32 # 11726 is_subset c a 33 1 0 0 1 3 4 5 8 16 17 19 20 22 23 26 27 29 30 31 32 b 33 0 0 f # 11727 is_subset c a 33 1 0 1 2 7 9 11 12 14 15 16 17 18 20 21 23 24 27 31 b 33 1 0 1 2 7 9 11 12 14 15 16 17 18 20 21 23 24 27 31 # 11728 is_subset c a 33 1 0 1 2 7 9 11 12 14 15 16 17 18 20 21 23 24 27 31 b 33 0 0 4 6 7 9 10 11 12 13 14 15 16 19 20 22 24 26 27 28 29 # 11729 is_subset c a 33 1 0 e b 33 1 0 e # 11730 is_subset c a 33 1 0 e b 33 0 1 e # 11731 is_subset c a 33 1 0 e b 33 1 0 e # 11732 is_subset c a 33 1 0 e b 33 0 1 f # 11733 is_subset c a 33 1 0 e b 33 1 0 e # 11734 is_subset c a 33 1 0 e b 33 0 1 0 1 3 4 5 7 8 10 15 16 17 20 21 # 11735 is_subset c a 33 1 0 f b 33 1 0 f # 11736 is_subset c a 33 1 0 f b 33 0 1 e # 11737 is_subset c a 33 1 0 f b 33 1 0 f # 11738 is_subset c a 33 1 0 f b 33 0 1 f # 11739 is_subset c a 33 1 0 f b 33 1 0 f # 11740 is_subset c a 33 1 0 f b 33 0 1 0 2 3 4 5 9 10 11 14 16 18 19 20 23 27 28 29 31 32 # 11741 is_subset c a 33 1 0 2 3 4 5 7 8 15 17 18 19 21 23 26 27 30 31 32 b 33 1 0 2 3 4 5 7 8 15 17 18 19 21 23 26 27 30 31 32 # 11742 is_subset c a 33 1 0 2 3 4 5 7 8 15 17 18 19 21 23 26 27 30 31 32 b 33 0 1 e # 11743 is_subset c a 33 1 0 0 1 2 3 5 7 9 11 12 15 16 17 19 21 22 24 25 26 28 29 31 b 33 1 0 0 1 2 3 5 7 9 11 12 15 16 17 19 21 22 24 25 26 28 29 31 # 11744 is_subset c a 33 1 0 0 1 2 3 5 7 9 11 12 15 16 17 19 21 22 24 25 26 28 29 31 b 33 0 1 f # 11745 is_subset c a 33 1 0 2 4 7 8 10 11 13 14 16 17 18 19 20 22 23 25 26 27 32 b 33 1 0 2 4 7 8 10 11 13 14 16 17 18 19 20 22 23 25 26 27 32 # 11746 is_subset c a 33 1 0 2 4 7 8 10 11 13 14 16 17 18 19 20 22 23 25 26 27 32 b 33 0 1 1 2 3 5 10 18 20 21 22 23 25 27 29 30 # 11747 is_subset c a 33 1 0 e b 33 1 0 e # 11748 is_subset c a 33 1 0 e b 33 1 0 e # 11749 is_subset c a 33 1 0 e b 33 1 0 e # 11750 is_subset c a 33 1 0 e b 33 1 0 f # 11751 is_subset c a 33 1 0 e b 33 1 0 e # 11752 is_subset c a 33 1 0 e b 33 1 0 0 2 3 4 10 11 12 13 14 15 16 18 19 21 23 27 29 32 # 11753 is_subset c a 33 1 0 f b 33 1 0 f # 11754 is_subset c a 33 1 0 f b 33 1 0 e # 11755 is_subset c a 33 1 0 f b 33 1 0 f # 11756 is_subset c a 33 1 0 f b 33 1 0 f # 11757 is_subset c a 33 1 0 f b 33 1 0 f # 11758 is_subset c a 33 1 0 f b 33 1 0 1 2 5 6 7 8 11 14 15 20 22 23 25 # 11759 is_subset c a 33 1 0 0 1 2 3 4 6 8 10 13 14 15 16 22 23 24 25 29 30 32 b 33 1 0 0 1 2 3 4 6 8 10 13 14 15 16 22 23 24 25 29 30 32 # 11760 is_subset c a 33 1 0 0 1 2 3 4 6 8 10 13 14 15 16 22 23 24 25 29 30 32 b 33 1 0 e # 11761 is_subset c a 33 1 0 3 4 5 6 10 15 16 29 30 31 32 b 33 1 0 3 4 5 6 10 15 16 29 30 31 32 # 11762 is_subset c a 33 1 0 3 4 5 6 10 15 16 29 30 31 32 b 33 1 0 f # 11763 is_subset c a 33 1 0 1 2 4 6 9 10 11 13 14 15 16 18 22 23 24 25 28 29 32 b 33 1 0 1 2 4 6 9 10 11 13 14 15 16 18 22 23 24 25 28 29 32 # 11764 is_subset c a 33 1 0 1 2 4 6 9 10 11 13 14 15 16 18 22 23 24 25 28 29 32 b 33 1 0 1 3 5 9 10 12 15 19 24 25 27 29 31 # 11765 is_subset c a 33 1 0 e b 33 1 0 e # 11766 is_subset c a 33 1 0 e b 33 1 1 e # 11767 is_subset c a 33 1 0 e b 33 1 0 e # 11768 is_subset c a 33 1 0 e b 33 1 1 f # 11769 is_subset c a 33 1 0 e b 33 1 0 e # 11770 is_subset c a 33 1 0 e b 33 1 1 0 1 2 3 10 11 12 13 17 19 21 22 24 26 27 28 29 31 32 # 11771 is_subset c a 33 1 0 f b 33 1 0 f # 11772 is_subset c a 33 1 0 f b 33 1 1 e # 11773 is_subset c a 33 1 0 f b 33 1 0 f # 11774 is_subset c a 33 1 0 f b 33 1 1 f # 11775 is_subset c a 33 1 0 f b 33 1 0 f # 11776 is_subset c a 33 1 0 f b 33 1 1 1 3 4 6 9 12 14 15 16 17 19 20 21 22 24 27 28 30 31 32 # 11777 is_subset c a 33 1 0 1 2 3 4 8 9 12 15 16 17 19 20 21 22 24 25 26 28 29 32 b 33 1 0 1 2 3 4 8 9 12 15 16 17 19 20 21 22 24 25 26 28 29 32 # 11778 is_subset c a 33 1 0 1 2 3 4 8 9 12 15 16 17 19 20 21 22 24 25 26 28 29 32 b 33 1 1 e # 11779 is_subset c a 33 1 0 1 3 5 7 9 10 11 12 14 15 16 17 18 19 20 21 22 23 24 25 26 27 30 b 33 1 0 1 3 5 7 9 10 11 12 14 15 16 17 18 19 20 21 22 23 24 25 26 27 30 # 11780 is_subset c a 33 1 0 1 3 5 7 9 10 11 12 14 15 16 17 18 19 20 21 22 23 24 25 26 27 30 b 33 1 1 f # 11781 is_subset c a 33 1 0 4 6 9 11 12 14 15 18 21 24 27 28 29 b 33 1 0 4 6 9 11 12 14 15 18 21 24 27 28 29 # 11782 is_subset c a 33 1 0 4 6 9 11 12 14 15 18 21 24 27 28 29 b 33 1 1 0 2 7 8 10 12 14 17 18 19 21 22 25 28 29 30 31 # 11783 is_subset c a 33 1 1 e b 33 1 1 e # 11784 is_subset c a 33 1 1 e b 33 0 0 e # 11785 is_subset c a 33 1 1 e b 33 1 1 e # 11786 is_subset c a 33 1 1 e b 33 0 0 f # 11787 is_subset c a 33 1 1 e b 33 1 1 e # 11788 is_subset c a 33 1 1 e b 33 0 0 0 1 7 9 10 11 14 16 17 18 19 20 24 25 28 30 # 11789 is_subset c a 33 1 1 f b 33 1 1 f # 11790 is_subset c a 33 1 1 f b 33 0 0 e # 11791 is_subset c a 33 1 1 f b 33 1 1 f # 11792 is_subset c a 33 1 1 f b 33 0 0 f # 11793 is_subset c a 33 1 1 f b 33 1 1 f # 11794 is_subset c a 33 1 1 f b 33 0 0 1 2 3 4 6 7 9 12 13 15 19 20 21 23 25 26 27 28 30 31 32 # 11795 is_subset c a 33 1 1 0 1 2 4 5 8 9 11 13 15 17 18 21 22 24 25 27 28 30 32 b 33 1 1 0 1 2 4 5 8 9 11 13 15 17 18 21 22 24 25 27 28 30 32 # 11796 is_subset c a 33 1 1 0 1 2 4 5 8 9 11 13 15 17 18 21 22 24 25 27 28 30 32 b 33 0 0 e # 11797 is_subset c a 33 1 1 0 1 2 3 6 10 12 13 14 15 16 19 21 24 26 b 33 1 1 0 1 2 3 6 10 12 13 14 15 16 19 21 24 26 # 11798 is_subset c a 33 1 1 0 1 2 3 6 10 12 13 14 15 16 19 21 24 26 b 33 0 0 f # 11799 is_subset c a 33 1 1 0 4 5 6 13 14 15 17 19 22 23 27 29 32 b 33 1 1 0 4 5 6 13 14 15 17 19 22 23 27 29 32 # 11800 is_subset c a 33 1 1 0 4 5 6 13 14 15 17 19 22 23 27 29 32 b 33 0 0 0 1 2 6 7 8 10 11 13 14 15 16 17 20 21 22 25 26 27 30 31 32 # 11801 is_subset c a 33 1 1 e b 33 1 1 e # 11802 is_subset c a 33 1 1 e b 33 0 1 e # 11803 is_subset c a 33 1 1 e b 33 1 1 e # 11804 is_subset c a 33 1 1 e b 33 0 1 f # 11805 is_subset c a 33 1 1 e b 33 1 1 e # 11806 is_subset c a 33 1 1 e b 33 0 1 0 7 9 10 11 12 13 14 15 18 24 26 29 # 11807 is_subset c a 33 1 1 f b 33 1 1 f # 11808 is_subset c a 33 1 1 f b 33 0 1 e # 11809 is_subset c a 33 1 1 f b 33 1 1 f # 11810 is_subset c a 33 1 1 f b 33 0 1 f # 11811 is_subset c a 33 1 1 f b 33 1 1 f # 11812 is_subset c a 33 1 1 f b 33 0 1 0 1 2 3 14 15 17 21 23 25 28 29 31 32 # 11813 is_subset c a 33 1 1 1 3 4 8 9 11 17 18 21 22 23 25 26 29 31 b 33 1 1 1 3 4 8 9 11 17 18 21 22 23 25 26 29 31 # 11814 is_subset c a 33 1 1 1 3 4 8 9 11 17 18 21 22 23 25 26 29 31 b 33 0 1 e # 11815 is_subset c a 33 1 1 0 4 5 6 9 10 14 15 20 22 23 27 28 31 32 b 33 1 1 0 4 5 6 9 10 14 15 20 22 23 27 28 31 32 # 11816 is_subset c a 33 1 1 0 4 5 6 9 10 14 15 20 22 23 27 28 31 32 b 33 0 1 f # 11817 is_subset c a 33 1 1 0 1 3 4 5 6 7 8 14 15 18 19 21 22 23 25 26 29 32 b 33 1 1 0 1 3 4 5 6 7 8 14 15 18 19 21 22 23 25 26 29 32 # 11818 is_subset c a 33 1 1 0 1 3 4 5 6 7 8 14 15 18 19 21 22 23 25 26 29 32 b 33 0 1 0 2 3 5 6 7 8 13 14 15 16 22 26 27 30 32 # 11819 is_subset c a 33 1 1 e b 33 1 1 e # 11820 is_subset c a 33 1 1 e b 33 1 0 e # 11821 is_subset c a 33 1 1 e b 33 1 1 e # 11822 is_subset c a 33 1 1 e b 33 1 0 f # 11823 is_subset c a 33 1 1 e b 33 1 1 e # 11824 is_subset c a 33 1 1 e b 33 1 0 1 2 4 5 7 8 11 13 14 15 20 21 22 24 25 26 29 30 31 32 # 11825 is_subset c a 33 1 1 f b 33 1 1 f # 11826 is_subset c a 33 1 1 f b 33 1 0 e # 11827 is_subset c a 33 1 1 f b 33 1 1 f # 11828 is_subset c a 33 1 1 f b 33 1 0 f # 11829 is_subset c a 33 1 1 f b 33 1 1 f # 11830 is_subset c a 33 1 1 f b 33 1 0 0 2 3 5 6 7 8 9 11 13 15 17 18 19 21 22 24 25 26 27 28 29 30 31 32 # 11831 is_subset c a 33 1 1 1 8 10 11 14 17 18 20 21 22 23 24 25 26 29 31 b 33 1 1 1 8 10 11 14 17 18 20 21 22 23 24 25 26 29 31 # 11832 is_subset c a 33 1 1 1 8 10 11 14 17 18 20 21 22 23 24 25 26 29 31 b 33 1 0 e # 11833 is_subset c a 33 1 1 0 2 7 8 9 12 14 15 17 18 20 22 23 27 28 31 b 33 1 1 0 2 7 8 9 12 14 15 17 18 20 22 23 27 28 31 # 11834 is_subset c a 33 1 1 0 2 7 8 9 12 14 15 17 18 20 22 23 27 28 31 b 33 1 0 f # 11835 is_subset c a 33 1 1 2 3 4 5 6 7 8 10 12 13 14 15 17 18 19 20 21 24 28 30 32 b 33 1 1 2 3 4 5 6 7 8 10 12 13 14 15 17 18 19 20 21 24 28 30 32 # 11836 is_subset c a 33 1 1 2 3 4 5 6 7 8 10 12 13 14 15 17 18 19 20 21 24 28 30 32 b 33 1 0 0 1 2 4 7 9 10 11 12 13 15 16 18 19 20 22 23 24 25 26 28 29 32 # 11837 is_subset c a 33 1 1 e b 33 1 1 e # 11838 is_subset c a 33 1 1 e b 33 1 1 e # 11839 is_subset c a 33 1 1 e b 33 1 1 e # 11840 is_subset c a 33 1 1 e b 33 1 1 f # 11841 is_subset c a 33 1 1 e b 33 1 1 e # 11842 is_subset c a 33 1 1 e b 33 1 1 0 1 2 5 6 8 9 11 13 14 15 16 19 22 25 26 # 11843 is_subset c a 33 1 1 f b 33 1 1 f # 11844 is_subset c a 33 1 1 f b 33 1 1 e # 11845 is_subset c a 33 1 1 f b 33 1 1 f # 11846 is_subset c a 33 1 1 f b 33 1 1 f # 11847 is_subset c a 33 1 1 f b 33 1 1 f # 11848 is_subset c a 33 1 1 f b 33 1 1 0 1 2 3 8 11 12 16 18 21 24 25 28 29 30 31 # 11849 is_subset c a 33 1 1 0 1 2 8 9 11 13 14 15 16 17 19 22 24 27 32 b 33 1 1 0 1 2 8 9 11 13 14 15 16 17 19 22 24 27 32 # 11850 is_subset c a 33 1 1 0 1 2 8 9 11 13 14 15 16 17 19 22 24 27 32 b 33 1 1 e # 11851 is_subset c a 33 1 1 1 4 5 7 12 14 15 16 17 21 23 24 25 26 32 b 33 1 1 1 4 5 7 12 14 15 16 17 21 23 24 25 26 32 # 11852 is_subset c a 33 1 1 1 4 5 7 12 14 15 16 17 21 23 24 25 26 32 b 33 1 1 f # 11853 is_subset c a 33 1 1 1 2 5 9 11 12 14 16 17 18 19 21 22 24 25 27 29 30 31 32 b 33 1 1 1 2 5 9 11 12 14 16 17 18 19 21 22 24 25 27 29 30 31 32 # 11854 is_subset c a 33 1 1 1 2 5 9 11 12 14 16 17 18 19 21 22 24 25 27 29 30 31 32 b 33 1 1 0 1 3 5 10 11 14 21 22 25 28 31 # 11855 is_subset c a 63 0 0 e b 63 0 0 e # 11856 is_subset c a 63 0 0 e b 63 0 0 e # 11857 is_subset c a 63 0 0 e b 63 0 0 e # 11858 is_subset c a 63 0 0 e b 63 0 0 f # 11859 is_subset c a 63 0 0 e b 63 0 0 e # 11860 is_subset c a 63 0 0 e b 63 0 0 1 2 5 7 8 12 14 16 18 19 21 22 27 30 31 33 35 36 37 38 39 40 41 43 51 54 55 59 62 # 11861 is_subset c a 63 0 0 f b 63 0 0 f # 11862 is_subset c a 63 0 0 f b 63 0 0 e # 11863 is_subset c a 63 0 0 f b 63 0 0 f # 11864 is_subset c a 63 0 0 f b 63 0 0 f # 11865 is_subset c a 63 0 0 f b 63 0 0 f # 11866 is_subset c a 63 0 0 f b 63 0 0 0 4 5 7 8 10 11 12 16 17 20 21 23 25 29 31 32 35 37 38 40 41 43 44 45 46 47 48 51 53 57 58 59 61 62 # 11867 is_subset c a 63 0 0 4 5 8 9 10 11 12 13 14 15 16 18 21 22 23 25 26 27 29 30 31 33 36 38 39 41 42 44 48 50 52 53 56 57 59 60 61 62 b 63 0 0 4 5 8 9 10 11 12 13 14 15 16 18 21 22 23 25 26 27 29 30 31 33 36 38 39 41 42 44 48 50 52 53 56 57 59 60 61 62 # 11868 is_subset c a 63 0 0 4 5 8 9 10 11 12 13 14 15 16 18 21 22 23 25 26 27 29 30 31 33 36 38 39 41 42 44 48 50 52 53 56 57 59 60 61 62 b 63 0 0 e # 11869 is_subset c a 63 0 0 0 1 2 4 6 7 8 9 10 14 15 16 17 18 20 21 24 27 36 39 43 46 49 50 52 56 57 59 61 b 63 0 0 0 1 2 4 6 7 8 9 10 14 15 16 17 18 20 21 24 27 36 39 43 46 49 50 52 56 57 59 61 # 11870 is_subset c a 63 0 0 0 1 2 4 6 7 8 9 10 14 15 16 17 18 20 21 24 27 36 39 43 46 49 50 52 56 57 59 61 b 63 0 0 f # 11871 is_subset c a 63 0 0 0 2 6 10 12 13 14 17 18 22 23 24 25 27 29 33 34 37 38 39 42 43 45 47 48 59 61 b 63 0 0 0 2 6 10 12 13 14 17 18 22 23 24 25 27 29 33 34 37 38 39 42 43 45 47 48 59 61 # 11872 is_subset c a 63 0 0 0 2 6 10 12 13 14 17 18 22 23 24 25 27 29 33 34 37 38 39 42 43 45 47 48 59 61 b 63 0 0 0 1 4 6 7 10 12 13 14 15 17 18 19 22 23 28 31 32 33 34 35 36 37 38 42 45 47 48 55 56 57 59 60 61 62 # 11873 is_subset c a 63 0 0 e b 63 0 0 e # 11874 is_subset c a 63 0 0 e b 63 0 1 e # 11875 is_subset c a 63 0 0 e b 63 0 0 e # 11876 is_subset c a 63 0 0 e b 63 0 1 f # 11877 is_subset c a 63 0 0 e b 63 0 0 e # 11878 is_subset c a 63 0 0 e b 63 0 1 0 2 3 5 6 7 10 11 13 14 18 19 20 22 23 25 26 28 29 30 31 33 34 35 38 39 40 41 47 48 50 53 55 58 60 61 62 # 11879 is_subset c a 63 0 0 f b 63 0 0 f # 11880 is_subset c a 63 0 0 f b 63 0 1 e # 11881 is_subset c a 63 0 0 f b 63 0 0 f # 11882 is_subset c a 63 0 0 f b 63 0 1 f # 11883 is_subset c a 63 0 0 f b 63 0 0 f # 11884 is_subset c a 63 0 0 f b 63 0 1 1 2 3 6 7 8 12 13 14 15 16 17 18 24 25 28 31 32 33 34 37 41 44 49 50 51 54 56 58 59 61 62 # 11885 is_subset c a 63 0 0 1 2 3 6 8 9 10 11 15 18 20 21 24 26 27 28 29 32 36 38 40 41 44 45 48 50 51 53 54 57 58 60 62 b 63 0 0 1 2 3 6 8 9 10 11 15 18 20 21 24 26 27 28 29 32 36 38 40 41 44 45 48 50 51 53 54 57 58 60 62 # 11886 is_subset c a 63 0 0 1 2 3 6 8 9 10 11 15 18 20 21 24 26 27 28 29 32 36 38 40 41 44 45 48 50 51 53 54 57 58 60 62 b 63 0 1 e # 11887 is_subset c a 63 0 0 0 1 6 7 9 11 12 17 18 19 20 21 22 25 27 28 29 30 31 35 36 38 40 43 44 45 46 47 49 50 52 53 54 56 57 59 60 62 b 63 0 0 0 1 6 7 9 11 12 17 18 19 20 21 22 25 27 28 29 30 31 35 36 38 40 43 44 45 46 47 49 50 52 53 54 56 57 59 60 62 # 11888 is_subset c a 63 0 0 0 1 6 7 9 11 12 17 18 19 20 21 22 25 27 28 29 30 31 35 36 38 40 43 44 45 46 47 49 50 52 53 54 56 57 59 60 62 b 63 0 1 f # 11889 is_subset c a 63 0 0 1 7 9 10 13 19 23 29 33 34 35 37 38 39 40 41 42 46 47 51 52 53 57 58 59 b 63 0 0 1 7 9 10 13 19 23 29 33 34 35 37 38 39 40 41 42 46 47 51 52 53 57 58 59 # 11890 is_subset c a 63 0 0 1 7 9 10 13 19 23 29 33 34 35 37 38 39 40 41 42 46 47 51 52 53 57 58 59 b 63 0 1 0 1 2 3 5 6 7 8 10 11 12 14 15 16 17 20 22 23 24 25 26 29 30 32 33 36 37 50 51 52 53 54 57 58 59 60 61 62 # 11891 is_subset c a 63 0 0 e b 63 0 0 e # 11892 is_subset c a 63 0 0 e b 63 1 0 e # 11893 is_subset c a 63 0 0 e b 63 0 0 e # 11894 is_subset c a 63 0 0 e b 63 1 0 f # 11895 is_subset c a 63 0 0 e b 63 0 0 e # 11896 is_subset c a 63 0 0 e b 63 1 0 0 3 7 8 12 16 17 18 19 20 21 22 27 29 30 31 34 35 40 41 43 45 46 47 48 49 50 51 52 54 55 56 58 61 # 11897 is_subset c a 63 0 0 f b 63 0 0 f # 11898 is_subset c a 63 0 0 f b 63 1 0 e # 11899 is_subset c a 63 0 0 f b 63 0 0 f # 11900 is_subset c a 63 0 0 f b 63 1 0 f # 11901 is_subset c a 63 0 0 f b 63 0 0 f # 11902 is_subset c a 63 0 0 f b 63 1 0 0 4 6 7 9 11 12 14 15 17 18 20 23 26 28 29 30 32 33 34 35 37 38 39 40 42 43 44 45 46 48 52 53 55 57 59 60 # 11903 is_subset c a 63 0 0 0 4 11 13 14 16 18 20 21 23 24 27 29 31 32 33 35 37 39 42 46 48 49 51 52 53 54 55 58 59 60 62 b 63 0 0 0 4 11 13 14 16 18 20 21 23 24 27 29 31 32 33 35 37 39 42 46 48 49 51 52 53 54 55 58 59 60 62 # 11904 is_subset c a 63 0 0 0 4 11 13 14 16 18 20 21 23 24 27 29 31 32 33 35 37 39 42 46 48 49 51 52 53 54 55 58 59 60 62 b 63 1 0 e # 11905 is_subset c a 63 0 0 0 3 4 5 6 11 12 13 14 17 18 21 22 26 27 30 33 34 36 37 38 41 42 44 45 46 51 56 59 b 63 0 0 0 3 4 5 6 11 12 13 14 17 18 21 22 26 27 30 33 34 36 37 38 41 42 44 45 46 51 56 59 # 11906 is_subset c a 63 0 0 0 3 4 5 6 11 12 13 14 17 18 21 22 26 27 30 33 34 36 37 38 41 42 44 45 46 51 56 59 b 63 1 0 f # 11907 is_subset c a 63 0 0 0 6 8 9 12 14 15 16 19 20 21 22 24 26 27 28 29 30 31 34 37 38 40 43 44 46 48 51 54 55 57 58 60 61 62 b 63 0 0 0 6 8 9 12 14 15 16 19 20 21 22 24 26 27 28 29 30 31 34 37 38 40 43 44 46 48 51 54 55 57 58 60 61 62 # 11908 is_subset c a 63 0 0 0 6 8 9 12 14 15 16 19 20 21 22 24 26 27 28 29 30 31 34 37 38 40 43 44 46 48 51 54 55 57 58 60 61 62 b 63 1 0 0 1 2 5 7 8 9 11 12 13 16 17 20 21 23 26 28 31 35 37 38 40 41 43 44 45 46 50 56 58 59 60 62 # 11909 is_subset c a 63 0 0 e b 63 0 0 e # 11910 is_subset c a 63 0 0 e b 63 1 1 e # 11911 is_subset c a 63 0 0 e b 63 0 0 e # 11912 is_subset c a 63 0 0 e b 63 1 1 f # 11913 is_subset c a 63 0 0 e b 63 0 0 e # 11914 is_subset c a 63 0 0 e b 63 1 1 1 6 7 9 11 12 13 14 19 20 21 25 29 30 31 32 34 37 39 40 42 43 45 46 47 50 51 52 58 59 61 # 11915 is_subset c a 63 0 0 f b 63 0 0 f # 11916 is_subset c a 63 0 0 f b 63 1 1 e # 11917 is_subset c a 63 0 0 f b 63 0 0 f # 11918 is_subset c a 63 0 0 f b 63 1 1 f # 11919 is_subset c a 63 0 0 f b 63 0 0 f # 11920 is_subset c a 63 0 0 f b 63 1 1 0 1 9 10 13 16 19 21 23 25 26 27 28 31 33 35 37 39 40 44 46 47 48 50 56 59 60 61 62 # 11921 is_subset c a 63 0 0 1 5 8 9 10 11 12 14 15 17 18 19 21 23 24 27 30 34 35 39 40 41 42 43 45 48 51 54 56 57 62 b 63 0 0 1 5 8 9 10 11 12 14 15 17 18 19 21 23 24 27 30 34 35 39 40 41 42 43 45 48 51 54 56 57 62 # 11922 is_subset c a 63 0 0 1 5 8 9 10 11 12 14 15 17 18 19 21 23 24 27 30 34 35 39 40 41 42 43 45 48 51 54 56 57 62 b 63 1 1 e # 11923 is_subset c a 63 0 0 4 5 7 8 10 12 14 21 22 23 24 25 26 30 31 32 34 39 40 41 43 46 47 48 50 53 54 56 57 58 61 62 b 63 0 0 4 5 7 8 10 12 14 21 22 23 24 25 26 30 31 32 34 39 40 41 43 46 47 48 50 53 54 56 57 58 61 62 # 11924 is_subset c a 63 0 0 4 5 7 8 10 12 14 21 22 23 24 25 26 30 31 32 34 39 40 41 43 46 47 48 50 53 54 56 57 58 61 62 b 63 1 1 f # 11925 is_subset c a 63 0 0 0 2 6 9 10 15 17 18 21 23 24 28 31 35 36 37 40 43 44 45 46 49 50 51 52 55 56 57 b 63 0 0 0 2 6 9 10 15 17 18 21 23 24 28 31 35 36 37 40 43 44 45 46 49 50 51 52 55 56 57 # 11926 is_subset c a 63 0 0 0 2 6 9 10 15 17 18 21 23 24 28 31 35 36 37 40 43 44 45 46 49 50 51 52 55 56 57 b 63 1 1 0 1 3 7 9 12 13 15 18 21 22 24 25 28 29 31 32 33 37 38 39 42 47 49 50 51 52 53 54 55 58 # 11927 is_subset c a 63 0 1 e b 63 0 1 e # 11928 is_subset c a 63 0 1 e b 63 0 0 e # 11929 is_subset c a 63 0 1 e b 63 0 1 e # 11930 is_subset c a 63 0 1 e b 63 0 0 f # 11931 is_subset c a 63 0 1 e b 63 0 1 e # 11932 is_subset c a 63 0 1 e b 63 0 0 2 4 7 8 9 10 12 13 15 18 24 25 29 30 34 36 38 39 41 44 45 46 49 51 53 54 58 59 60 # 11933 is_subset c a 63 0 1 f b 63 0 1 f # 11934 is_subset c a 63 0 1 f b 63 0 0 e # 11935 is_subset c a 63 0 1 f b 63 0 1 f # 11936 is_subset c a 63 0 1 f b 63 0 0 f # 11937 is_subset c a 63 0 1 f b 63 0 1 f # 11938 is_subset c a 63 0 1 f b 63 0 0 1 4 5 7 8 12 13 17 18 19 22 24 27 29 30 32 34 35 36 38 39 40 41 43 44 46 49 51 58 59 61 # 11939 is_subset c a 63 0 1 0 3 5 13 15 17 18 24 25 30 32 33 34 35 36 40 41 44 45 48 51 53 56 57 58 b 63 0 1 0 3 5 13 15 17 18 24 25 30 32 33 34 35 36 40 41 44 45 48 51 53 56 57 58 # 11940 is_subset c a 63 0 1 0 3 5 13 15 17 18 24 25 30 32 33 34 35 36 40 41 44 45 48 51 53 56 57 58 b 63 0 0 e # 11941 is_subset c a 63 0 1 5 8 10 12 13 14 17 18 21 22 23 24 25 27 29 31 33 34 35 36 39 40 43 44 46 49 50 51 53 56 57 60 61 b 63 0 1 5 8 10 12 13 14 17 18 21 22 23 24 25 27 29 31 33 34 35 36 39 40 43 44 46 49 50 51 53 56 57 60 61 # 11942 is_subset c a 63 0 1 5 8 10 12 13 14 17 18 21 22 23 24 25 27 29 31 33 34 35 36 39 40 43 44 46 49 50 51 53 56 57 60 61 b 63 0 0 f # 11943 is_subset c a 63 0 1 1 4 5 7 9 12 16 17 22 23 25 26 27 28 29 30 34 36 38 40 42 43 44 45 46 48 50 53 55 56 59 60 b 63 0 1 1 4 5 7 9 12 16 17 22 23 25 26 27 28 29 30 34 36 38 40 42 43 44 45 46 48 50 53 55 56 59 60 # 11944 is_subset c a 63 0 1 1 4 5 7 9 12 16 17 22 23 25 26 27 28 29 30 34 36 38 40 42 43 44 45 46 48 50 53 55 56 59 60 b 63 0 0 1 3 4 6 9 10 12 13 16 20 22 23 25 28 29 30 33 37 39 40 43 46 48 50 51 53 54 55 56 57 58 59 60 61 # 11945 is_subset c a 63 0 1 e b 63 0 1 e # 11946 is_subset c a 63 0 1 e b 63 0 1 e # 11947 is_subset c a 63 0 1 e b 63 0 1 e # 11948 is_subset c a 63 0 1 e b 63 0 1 f # 11949 is_subset c a 63 0 1 e b 63 0 1 e # 11950 is_subset c a 63 0 1 e b 63 0 1 1 6 12 13 16 19 20 22 23 24 25 26 27 30 31 36 38 40 42 43 45 49 52 53 55 56 57 58 61 62 # 11951 is_subset c a 63 0 1 f b 63 0 1 f # 11952 is_subset c a 63 0 1 f b 63 0 1 e # 11953 is_subset c a 63 0 1 f b 63 0 1 f # 11954 is_subset c a 63 0 1 f b 63 0 1 f # 11955 is_subset c a 63 0 1 f b 63 0 1 f # 11956 is_subset c a 63 0 1 f b 63 0 1 0 6 7 11 15 16 17 18 20 21 22 23 24 25 26 27 30 31 32 35 36 38 39 42 43 44 46 47 49 52 53 56 57 59 62 # 11957 is_subset c a 63 0 1 1 6 8 11 12 13 14 15 16 18 21 23 24 27 28 29 30 33 35 40 41 43 44 47 48 50 51 54 56 57 58 59 60 61 b 63 0 1 1 6 8 11 12 13 14 15 16 18 21 23 24 27 28 29 30 33 35 40 41 43 44 47 48 50 51 54 56 57 58 59 60 61 # 11958 is_subset c a 63 0 1 1 6 8 11 12 13 14 15 16 18 21 23 24 27 28 29 30 33 35 40 41 43 44 47 48 50 51 54 56 57 58 59 60 61 b 63 0 1 e # 11959 is_subset c a 63 0 1 1 2 6 7 8 9 11 17 21 22 24 25 27 28 30 31 32 33 36 37 38 39 40 42 44 45 47 48 49 51 57 58 59 61 62 b 63 0 1 1 2 6 7 8 9 11 17 21 22 24 25 27 28 30 31 32 33 36 37 38 39 40 42 44 45 47 48 49 51 57 58 59 61 62 # 11960 is_subset c a 63 0 1 1 2 6 7 8 9 11 17 21 22 24 25 27 28 30 31 32 33 36 37 38 39 40 42 44 45 47 48 49 51 57 58 59 61 62 b 63 0 1 f # 11961 is_subset c a 63 0 1 1 4 7 8 9 14 18 20 21 22 25 28 32 34 35 36 39 40 41 42 45 46 47 49 50 52 53 55 57 60 62 b 63 0 1 1 4 7 8 9 14 18 20 21 22 25 28 32 34 35 36 39 40 41 42 45 46 47 49 50 52 53 55 57 60 62 # 11962 is_subset c a 63 0 1 1 4 7 8 9 14 18 20 21 22 25 28 32 34 35 36 39 40 41 42 45 46 47 49 50 52 53 55 57 60 62 b 63 0 1 0 1 3 4 5 8 12 17 19 20 23 24 25 26 28 30 31 34 37 38 39 43 47 49 50 53 54 55 56 57 59 62 # 11963 is_subset c a 63 0 1 e b 63 0 1 e # 11964 is_subset c a 63 0 1 e b 63 1 0 e # 11965 is_subset c a 63 0 1 e b 63 0 1 e # 11966 is_subset c a 63 0 1 e b 63 1 0 f # 11967 is_subset c a 63 0 1 e b 63 0 1 e # 11968 is_subset c a 63 0 1 e b 63 1 0 0 1 2 4 5 6 7 8 11 12 13 15 20 23 26 28 31 32 35 36 38 39 42 44 46 48 50 51 52 56 58 59 60 62 # 11969 is_subset c a 63 0 1 f b 63 0 1 f # 11970 is_subset c a 63 0 1 f b 63 1 0 e # 11971 is_subset c a 63 0 1 f b 63 0 1 f # 11972 is_subset c a 63 0 1 f b 63 1 0 f # 11973 is_subset c a 63 0 1 f b 63 0 1 f # 11974 is_subset c a 63 0 1 f b 63 1 0 0 1 2 3 4 6 7 8 9 10 11 12 14 18 19 23 24 25 26 27 28 35 36 37 38 40 43 44 47 48 50 60 61 62 # 11975 is_subset c a 63 0 1 2 4 5 6 8 10 11 19 20 21 25 26 28 32 35 40 44 48 49 51 53 55 56 59 60 62 b 63 0 1 2 4 5 6 8 10 11 19 20 21 25 26 28 32 35 40 44 48 49 51 53 55 56 59 60 62 # 11976 is_subset c a 63 0 1 2 4 5 6 8 10 11 19 20 21 25 26 28 32 35 40 44 48 49 51 53 55 56 59 60 62 b 63 1 0 e # 11977 is_subset c a 63 0 1 1 4 5 8 9 13 14 15 16 18 19 20 21 23 25 26 31 33 36 37 39 41 42 43 44 45 46 47 49 50 54 55 57 59 62 b 63 0 1 1 4 5 8 9 13 14 15 16 18 19 20 21 23 25 26 31 33 36 37 39 41 42 43 44 45 46 47 49 50 54 55 57 59 62 # 11978 is_subset c a 63 0 1 1 4 5 8 9 13 14 15 16 18 19 20 21 23 25 26 31 33 36 37 39 41 42 43 44 45 46 47 49 50 54 55 57 59 62 b 63 1 0 f # 11979 is_subset c a 63 0 1 0 2 3 4 5 7 10 14 16 17 19 21 22 25 27 29 30 33 37 38 39 41 42 43 45 47 48 49 50 51 52 53 55 56 57 58 60 61 62 b 63 0 1 0 2 3 4 5 7 10 14 16 17 19 21 22 25 27 29 30 33 37 38 39 41 42 43 45 47 48 49 50 51 52 53 55 56 57 58 60 61 62 # 11980 is_subset c a 63 0 1 0 2 3 4 5 7 10 14 16 17 19 21 22 25 27 29 30 33 37 38 39 41 42 43 45 47 48 49 50 51 52 53 55 56 57 58 60 61 62 b 63 1 0 0 2 4 5 7 8 9 10 11 13 14 17 22 27 32 35 37 40 42 43 44 45 48 50 52 53 54 55 58 62 # 11981 is_subset c a 63 0 1 e b 63 0 1 e # 11982 is_subset c a 63 0 1 e b 63 1 1 e # 11983 is_subset c a 63 0 1 e b 63 0 1 e # 11984 is_subset c a 63 0 1 e b 63 1 1 f # 11985 is_subset c a 63 0 1 e b 63 0 1 e # 11986 is_subset c a 63 0 1 e b 63 1 1 1 3 4 5 8 9 11 12 14 16 21 22 26 27 28 31 32 33 34 35 36 43 44 47 48 50 51 53 55 59 61 62 # 11987 is_subset c a 63 0 1 f b 63 0 1 f # 11988 is_subset c a 63 0 1 f b 63 1 1 e # 11989 is_subset c a 63 0 1 f b 63 0 1 f # 11990 is_subset c a 63 0 1 f b 63 1 1 f # 11991 is_subset c a 63 0 1 f b 63 0 1 f # 11992 is_subset c a 63 0 1 f b 63 1 1 1 2 6 7 8 11 12 14 15 18 20 21 23 24 25 27 30 31 32 33 37 41 42 45 46 49 50 56 60 62 # 11993 is_subset c a 63 0 1 0 4 6 11 12 14 16 18 20 25 26 28 32 33 34 35 36 40 43 44 45 46 49 50 54 57 58 59 b 63 0 1 0 4 6 11 12 14 16 18 20 25 26 28 32 33 34 35 36 40 43 44 45 46 49 50 54 57 58 59 # 11994 is_subset c a 63 0 1 0 4 6 11 12 14 16 18 20 25 26 28 32 33 34 35 36 40 43 44 45 46 49 50 54 57 58 59 b 63 1 1 e # 11995 is_subset c a 63 0 1 5 6 7 8 10 12 13 19 20 22 24 25 27 29 31 32 38 39 41 44 45 46 52 57 59 62 b 63 0 1 5 6 7 8 10 12 13 19 20 22 24 25 27 29 31 32 38 39 41 44 45 46 52 57 59 62 # 11996 is_subset c a 63 0 1 5 6 7 8 10 12 13 19 20 22 24 25 27 29 31 32 38 39 41 44 45 46 52 57 59 62 b 63 1 1 f # 11997 is_subset c a 63 0 1 1 3 5 6 9 10 11 12 13 14 17 18 20 22 24 25 27 29 30 31 32 36 40 42 43 44 45 46 48 49 50 52 53 54 55 59 b 63 0 1 1 3 5 6 9 10 11 12 13 14 17 18 20 22 24 25 27 29 30 31 32 36 40 42 43 44 45 46 48 49 50 52 53 54 55 59 # 11998 is_subset c a 63 0 1 1 3 5 6 9 10 11 12 13 14 17 18 20 22 24 25 27 29 30 31 32 36 40 42 43 44 45 46 48 49 50 52 53 54 55 59 b 63 1 1 2 6 7 10 11 14 17 19 20 21 25 26 28 30 32 33 34 36 37 38 40 41 46 48 49 51 52 53 58 62 # 11999 is_subset c a 63 1 0 e b 63 1 0 e # 12000 is_subset c a 63 1 0 e b 63 0 0 e # 12001 is_subset c a 63 1 0 e b 63 1 0 e # 12002 is_subset c a 63 1 0 e b 63 0 0 f # 12003 is_subset c a 63 1 0 e b 63 1 0 e # 12004 is_subset c a 63 1 0 e b 63 0 0 10 13 15 16 19 21 22 23 27 28 29 30 31 37 38 39 41 43 44 46 47 48 49 51 52 54 56 # 12005 is_subset c a 63 1 0 f b 63 1 0 f # 12006 is_subset c a 63 1 0 f b 63 0 0 e # 12007 is_subset c a 63 1 0 f b 63 1 0 f # 12008 is_subset c a 63 1 0 f b 63 0 0 f # 12009 is_subset c a 63 1 0 f b 63 1 0 f # 12010 is_subset c a 63 1 0 f b 63 0 0 2 3 4 5 6 7 9 10 11 14 17 18 20 22 24 26 29 30 31 33 34 36 37 40 44 45 47 48 54 58 59 61 62 # 12011 is_subset c a 63 1 0 0 1 2 4 5 6 8 9 11 12 15 17 18 19 23 24 25 26 27 29 30 32 33 34 35 36 37 38 40 44 45 48 50 51 54 58 59 61 b 63 1 0 0 1 2 4 5 6 8 9 11 12 15 17 18 19 23 24 25 26 27 29 30 32 33 34 35 36 37 38 40 44 45 48 50 51 54 58 59 61 # 12012 is_subset c a 63 1 0 0 1 2 4 5 6 8 9 11 12 15 17 18 19 23 24 25 26 27 29 30 32 33 34 35 36 37 38 40 44 45 48 50 51 54 58 59 61 b 63 0 0 e # 12013 is_subset c a 63 1 0 0 3 6 7 8 14 16 17 19 21 22 23 26 30 32 36 37 38 39 45 46 48 55 57 59 b 63 1 0 0 3 6 7 8 14 16 17 19 21 22 23 26 30 32 36 37 38 39 45 46 48 55 57 59 # 12014 is_subset c a 63 1 0 0 3 6 7 8 14 16 17 19 21 22 23 26 30 32 36 37 38 39 45 46 48 55 57 59 b 63 0 0 f # 12015 is_subset c a 63 1 0 1 2 3 4 5 6 8 9 10 13 15 16 17 21 26 28 30 37 38 40 42 47 49 51 52 53 55 60 61 62 b 63 1 0 1 2 3 4 5 6 8 9 10 13 15 16 17 21 26 28 30 37 38 40 42 47 49 51 52 53 55 60 61 62 # 12016 is_subset c a 63 1 0 1 2 3 4 5 6 8 9 10 13 15 16 17 21 26 28 30 37 38 40 42 47 49 51 52 53 55 60 61 62 b 63 0 0 2 4 5 7 8 9 10 12 13 14 15 17 19 20 21 23 26 29 34 40 41 42 43 44 45 46 48 56 58 62 # 12017 is_subset c a 63 1 0 e b 63 1 0 e # 12018 is_subset c a 63 1 0 e b 63 0 1 e # 12019 is_subset c a 63 1 0 e b 63 1 0 e # 12020 is_subset c a 63 1 0 e b 63 0 1 f # 12021 is_subset c a 63 1 0 e b 63 1 0 e # 12022 is_subset c a 63 1 0 e b 63 0 1 0 2 3 4 5 7 8 10 11 14 18 19 22 23 26 32 33 36 39 40 42 43 44 45 47 50 51 53 54 55 56 57 60 62 # 12023 is_subset c a 63 1 0 f b 63 1 0 f # 12024 is_subset c a 63 1 0 f b 63 0 1 e # 12025 is_subset c a 63 1 0 f b 63 1 0 f # 12026 is_subset c a 63 1 0 f b 63 0 1 f # 12027 is_subset c a 63 1 0 f b 63 1 0 f # 12028 is_subset c a 63 1 0 f b 63 0 1 0 2 6 9 12 14 15 16 17 25 27 28 29 31 34 35 36 37 40 41 49 50 51 52 53 54 56 58 59 62 # 12029 is_subset c a 63 1 0 0 1 2 3 4 10 11 12 13 14 17 18 19 20 21 22 23 24 26 27 28 30 31 34 36 38 40 42 43 45 47 48 50 53 60 61 b 63 1 0 0 1 2 3 4 10 11 12 13 14 17 18 19 20 21 22 23 24 26 27 28 30 31 34 36 38 40 42 43 45 47 48 50 53 60 61 # 12030 is_subset c a 63 1 0 0 1 2 3 4 10 11 12 13 14 17 18 19 20 21 22 23 24 26 27 28 30 31 34 36 38 40 42 43 45 47 48 50 53 60 61 b 63 0 1 e # 12031 is_subset c a 63 1 0 3 5 6 7 8 10 11 12 13 14 19 21 23 25 26 28 29 30 33 35 36 38 46 47 49 50 51 52 54 57 58 60 62 b 63 1 0 3 5 6 7 8 10 11 12 13 14 19 21 23 25 26 28 29 30 33 35 36 38 46 47 49 50 51 52 54 57 58 60 62 # 12032 is_subset c a 63 1 0 3 5 6 7 8 10 11 12 13 14 19 21 23 25 26 28 29 30 33 35 36 38 46 47 49 50 51 52 54 57 58 60 62 b 63 0 1 f # 12033 is_subset c a 63 1 0 6 7 8 10 12 14 16 17 19 20 24 26 27 28 30 32 33 38 40 41 42 43 45 47 48 50 51 52 54 55 57 58 62 b 63 1 0 6 7 8 10 12 14 16 17 19 20 24 26 27 28 30 32 33 38 40 41 42 43 45 47 48 50 51 52 54 55 57 58 62 # 12034 is_subset c a 63 1 0 6 7 8 10 12 14 16 17 19 20 24 26 27 28 30 32 33 38 40 41 42 43 45 47 48 50 51 52 54 55 57 58 62 b 63 0 1 3 4 5 6 8 9 12 13 14 15 16 18 21 23 26 27 28 30 32 33 35 36 37 40 42 43 45 46 48 50 55 56 57 58 59 61 # 12035 is_subset c a 63 1 0 e b 63 1 0 e # 12036 is_subset c a 63 1 0 e b 63 1 0 e # 12037 is_subset c a 63 1 0 e b 63 1 0 e # 12038 is_subset c a 63 1 0 e b 63 1 0 f # 12039 is_subset c a 63 1 0 e b 63 1 0 e # 12040 is_subset c a 63 1 0 e b 63 1 0 0 1 3 6 7 10 11 12 13 14 16 18 19 20 23 24 26 27 30 35 36 38 40 41 43 45 46 49 51 54 56 58 60 61 62 # 12041 is_subset c a 63 1 0 f b 63 1 0 f # 12042 is_subset c a 63 1 0 f b 63 1 0 e # 12043 is_subset c a 63 1 0 f b 63 1 0 f # 12044 is_subset c a 63 1 0 f b 63 1 0 f # 12045 is_subset c a 63 1 0 f b 63 1 0 f # 12046 is_subset c a 63 1 0 f b 63 1 0 2 3 6 7 8 10 11 12 13 14 17 20 21 22 24 27 30 31 32 33 34 36 38 39 40 41 42 43 44 49 52 56 57 60 # 12047 is_subset c a 63 1 0 0 1 2 3 4 6 7 9 10 12 14 18 19 23 25 27 28 30 31 33 34 37 39 40 43 46 47 48 49 50 51 52 53 54 56 57 58 59 61 62 b 63 1 0 0 1 2 3 4 6 7 9 10 12 14 18 19 23 25 27 28 30 31 33 34 37 39 40 43 46 47 48 49 50 51 52 53 54 56 57 58 59 61 62 # 12048 is_subset c a 63 1 0 0 1 2 3 4 6 7 9 10 12 14 18 19 23 25 27 28 30 31 33 34 37 39 40 43 46 47 48 49 50 51 52 53 54 56 57 58 59 61 62 b 63 1 0 e # 12049 is_subset c a 63 1 0 0 1 6 8 10 11 12 14 15 16 19 22 23 25 26 29 32 33 34 36 37 38 39 40 41 42 43 44 47 48 49 50 53 55 57 59 60 61 62 b 63 1 0 0 1 6 8 10 11 12 14 15 16 19 22 23 25 26 29 32 33 34 36 37 38 39 40 41 42 43 44 47 48 49 50 53 55 57 59 60 61 62 # 12050 is_subset c a 63 1 0 0 1 6 8 10 11 12 14 15 16 19 22 23 25 26 29 32 33 34 36 37 38 39 40 41 42 43 44 47 48 49 50 53 55 57 59 60 61 62 b 63 1 0 f # 12051 is_subset c a 63 1 0 2 3 13 14 16 17 21 26 31 32 33 37 38 39 44 45 46 47 48 49 50 51 52 56 57 58 61 62 b 63 1 0 2 3 13 14 16 17 21 26 31 32 33 37 38 39 44 45 46 47 48 49 50 51 52 56 57 58 61 62 # 12052 is_subset c a 63 1 0 2 3 13 14 16 17 21 26 31 32 33 37 38 39 44 45 46 47 48 49 50 51 52 56 57 58 61 62 b 63 1 0 1 3 6 8 10 13 14 15 17 18 20 22 25 27 30 31 34 35 36 37 40 41 42 44 45 48 50 51 52 58 60 61 # 12053 is_subset c a 63 1 0 e b 63 1 0 e # 12054 is_subset c a 63 1 0 e b 63 1 1 e # 12055 is_subset c a 63 1 0 e b 63 1 0 e # 12056 is_subset c a 63 1 0 e b 63 1 1 f # 12057 is_subset c a 63 1 0 e b 63 1 0 e # 12058 is_subset c a 63 1 0 e b 63 1 1 0 1 2 3 4 5 6 8 9 10 11 12 13 15 18 25 27 28 31 35 36 39 42 44 45 49 50 51 55 57 58 59 60 61 62 # 12059 is_subset c a 63 1 0 f b 63 1 0 f # 12060 is_subset c a 63 1 0 f b 63 1 1 e # 12061 is_subset c a 63 1 0 f b 63 1 0 f # 12062 is_subset c a 63 1 0 f b 63 1 1 f # 12063 is_subset c a 63 1 0 f b 63 1 0 f # 12064 is_subset c a 63 1 0 f b 63 1 1 5 7 9 10 12 13 14 17 18 19 20 23 25 28 32 35 37 38 40 41 42 45 46 47 49 50 52 53 56 57 58 59 # 12065 is_subset c a 63 1 0 0 1 2 3 4 5 6 9 11 14 15 16 18 21 23 24 26 27 30 32 33 35 39 41 42 45 47 51 52 53 54 55 56 57 60 62 b 63 1 0 0 1 2 3 4 5 6 9 11 14 15 16 18 21 23 24 26 27 30 32 33 35 39 41 42 45 47 51 52 53 54 55 56 57 60 62 # 12066 is_subset c a 63 1 0 0 1 2 3 4 5 6 9 11 14 15 16 18 21 23 24 26 27 30 32 33 35 39 41 42 45 47 51 52 53 54 55 56 57 60 62 b 63 1 1 e # 12067 is_subset c a 63 1 0 0 3 4 5 7 10 11 12 15 16 18 21 24 25 26 28 31 33 34 36 38 39 40 41 42 43 45 47 51 53 55 56 57 59 62 b 63 1 0 0 3 4 5 7 10 11 12 15 16 18 21 24 25 26 28 31 33 34 36 38 39 40 41 42 43 45 47 51 53 55 56 57 59 62 # 12068 is_subset c a 63 1 0 0 3 4 5 7 10 11 12 15 16 18 21 24 25 26 28 31 33 34 36 38 39 40 41 42 43 45 47 51 53 55 56 57 59 62 b 63 1 1 f # 12069 is_subset c a 63 1 0 0 2 3 4 6 7 9 10 11 12 13 15 17 24 27 28 29 39 41 42 44 47 49 52 53 54 55 58 59 b 63 1 0 0 2 3 4 6 7 9 10 11 12 13 15 17 24 27 28 29 39 41 42 44 47 49 52 53 54 55 58 59 # 12070 is_subset c a 63 1 0 0 2 3 4 6 7 9 10 11 12 13 15 17 24 27 28 29 39 41 42 44 47 49 52 53 54 55 58 59 b 63 1 1 2 3 4 6 7 8 9 11 12 13 15 16 17 18 20 21 23 24 26 27 28 29 34 36 37 39 40 41 42 43 45 48 50 51 54 56 57 60 61 62 # 12071 is_subset c a 63 1 1 e b 63 1 1 e # 12072 is_subset c a 63 1 1 e b 63 0 0 e # 12073 is_subset c a 63 1 1 e b 63 1 1 e # 12074 is_subset c a 63 1 1 e b 63 0 0 f # 12075 is_subset c a 63 1 1 e b 63 1 1 e # 12076 is_subset c a 63 1 1 e b 63 0 0 2 3 5 6 7 8 9 10 13 14 15 16 18 19 20 21 22 23 24 29 30 33 40 42 44 45 46 47 49 51 52 54 56 58 59 61 # 12077 is_subset c a 63 1 1 f b 63 1 1 f # 12078 is_subset c a 63 1 1 f b 63 0 0 e # 12079 is_subset c a 63 1 1 f b 63 1 1 f # 12080 is_subset c a 63 1 1 f b 63 0 0 f # 12081 is_subset c a 63 1 1 f b 63 1 1 f # 12082 is_subset c a 63 1 1 f b 63 0 0 2 3 4 5 8 9 10 12 13 16 17 18 19 20 22 24 26 27 29 31 34 43 45 48 52 54 55 57 58 59 62 # 12083 is_subset c a 63 1 1 0 2 3 4 7 8 9 11 16 17 18 21 25 26 32 36 37 39 40 41 43 45 50 51 53 55 56 61 62 b 63 1 1 0 2 3 4 7 8 9 11 16 17 18 21 25 26 32 36 37 39 40 41 43 45 50 51 53 55 56 61 62 # 12084 is_subset c a 63 1 1 0 2 3 4 7 8 9 11 16 17 18 21 25 26 32 36 37 39 40 41 43 45 50 51 53 55 56 61 62 b 63 0 0 e # 12085 is_subset c a 63 1 1 2 3 5 7 14 15 16 19 22 27 28 30 31 33 34 35 37 38 39 43 48 49 50 53 55 57 58 59 61 62 b 63 1 1 2 3 5 7 14 15 16 19 22 27 28 30 31 33 34 35 37 38 39 43 48 49 50 53 55 57 58 59 61 62 # 12086 is_subset c a 63 1 1 2 3 5 7 14 15 16 19 22 27 28 30 31 33 34 35 37 38 39 43 48 49 50 53 55 57 58 59 61 62 b 63 0 0 f # 12087 is_subset c a 63 1 1 0 2 4 5 7 8 11 12 13 16 19 20 23 26 28 32 34 35 36 38 39 40 42 43 45 46 51 53 54 55 59 60 61 b 63 1 1 0 2 4 5 7 8 11 12 13 16 19 20 23 26 28 32 34 35 36 38 39 40 42 43 45 46 51 53 54 55 59 60 61 # 12088 is_subset c a 63 1 1 0 2 4 5 7 8 11 12 13 16 19 20 23 26 28 32 34 35 36 38 39 40 42 43 45 46 51 53 54 55 59 60 61 b 63 0 0 0 3 5 6 10 12 13 20 22 23 30 32 35 39 40 42 43 48 49 50 51 52 53 54 58 59 60 61 # 12089 is_subset c a 63 1 1 e b 63 1 1 e # 12090 is_subset c a 63 1 1 e b 63 0 1 e # 12091 is_subset c a 63 1 1 e b 63 1 1 e # 12092 is_subset c a 63 1 1 e b 63 0 1 f # 12093 is_subset c a 63 1 1 e b 63 1 1 e # 12094 is_subset c a 63 1 1 e b 63 0 1 2 4 6 9 13 15 22 23 26 28 29 34 35 37 39 40 41 42 43 44 46 48 51 54 55 56 59 61 # 12095 is_subset c a 63 1 1 f b 63 1 1 f # 12096 is_subset c a 63 1 1 f b 63 0 1 e # 12097 is_subset c a 63 1 1 f b 63 1 1 f # 12098 is_subset c a 63 1 1 f b 63 0 1 f # 12099 is_subset c a 63 1 1 f b 63 1 1 f # 12100 is_subset c a 63 1 1 f b 63 0 1 1 5 6 8 9 11 12 13 15 17 21 24 25 28 30 33 34 35 36 37 38 39 40 43 44 45 46 48 50 51 55 56 57 59 60 # 12101 is_subset c a 63 1 1 3 6 7 14 15 18 21 24 26 27 33 35 38 39 40 43 44 46 47 51 53 56 60 61 62 b 63 1 1 3 6 7 14 15 18 21 24 26 27 33 35 38 39 40 43 44 46 47 51 53 56 60 61 62 # 12102 is_subset c a 63 1 1 3 6 7 14 15 18 21 24 26 27 33 35 38 39 40 43 44 46 47 51 53 56 60 61 62 b 63 0 1 e # 12103 is_subset c a 63 1 1 1 3 5 6 9 10 12 13 15 17 18 21 22 23 24 27 30 33 35 36 41 42 43 44 45 46 48 49 50 51 53 54 57 59 61 b 63 1 1 1 3 5 6 9 10 12 13 15 17 18 21 22 23 24 27 30 33 35 36 41 42 43 44 45 46 48 49 50 51 53 54 57 59 61 # 12104 is_subset c a 63 1 1 1 3 5 6 9 10 12 13 15 17 18 21 22 23 24 27 30 33 35 36 41 42 43 44 45 46 48 49 50 51 53 54 57 59 61 b 63 0 1 f # 12105 is_subset c a 63 1 1 1 2 4 5 7 10 13 14 15 17 18 21 26 29 31 32 37 42 43 44 45 46 49 50 51 52 57 59 60 61 62 b 63 1 1 1 2 4 5 7 10 13 14 15 17 18 21 26 29 31 32 37 42 43 44 45 46 49 50 51 52 57 59 60 61 62 # 12106 is_subset c a 63 1 1 1 2 4 5 7 10 13 14 15 17 18 21 26 29 31 32 37 42 43 44 45 46 49 50 51 52 57 59 60 61 62 b 63 0 1 3 5 7 9 10 11 12 14 16 19 22 24 25 26 27 28 29 30 35 37 38 44 47 48 49 50 51 53 56 62 # 12107 is_subset c a 63 1 1 e b 63 1 1 e # 12108 is_subset c a 63 1 1 e b 63 1 0 e # 12109 is_subset c a 63 1 1 e b 63 1 1 e # 12110 is_subset c a 63 1 1 e b 63 1 0 f # 12111 is_subset c a 63 1 1 e b 63 1 1 e # 12112 is_subset c a 63 1 1 e b 63 1 0 0 2 4 5 9 10 12 13 14 15 16 17 19 20 24 25 29 31 35 36 37 41 42 44 45 46 47 52 53 54 55 59 60 62 # 12113 is_subset c a 63 1 1 f b 63 1 1 f # 12114 is_subset c a 63 1 1 f b 63 1 0 e # 12115 is_subset c a 63 1 1 f b 63 1 1 f # 12116 is_subset c a 63 1 1 f b 63 1 0 f # 12117 is_subset c a 63 1 1 f b 63 1 1 f # 12118 is_subset c a 63 1 1 f b 63 1 0 1 4 5 7 10 11 14 16 18 20 23 24 26 27 31 33 34 35 36 38 40 41 42 45 46 48 50 51 52 53 54 55 57 58 59 62 # 12119 is_subset c a 63 1 1 1 2 4 7 10 11 13 15 16 17 19 20 23 24 26 27 29 30 31 32 35 36 37 38 39 41 42 43 49 50 56 57 60 b 63 1 1 1 2 4 7 10 11 13 15 16 17 19 20 23 24 26 27 29 30 31 32 35 36 37 38 39 41 42 43 49 50 56 57 60 # 12120 is_subset c a 63 1 1 1 2 4 7 10 11 13 15 16 17 19 20 23 24 26 27 29 30 31 32 35 36 37 38 39 41 42 43 49 50 56 57 60 b 63 1 0 e # 12121 is_subset c a 63 1 1 0 1 2 3 5 8 11 12 15 16 18 19 20 26 29 30 32 34 38 40 41 42 52 56 58 59 b 63 1 1 0 1 2 3 5 8 11 12 15 16 18 19 20 26 29 30 32 34 38 40 41 42 52 56 58 59 # 12122 is_subset c a 63 1 1 0 1 2 3 5 8 11 12 15 16 18 19 20 26 29 30 32 34 38 40 41 42 52 56 58 59 b 63 1 0 f # 12123 is_subset c a 63 1 1 0 1 5 6 9 11 13 15 17 18 20 22 26 33 34 35 37 39 40 41 42 46 47 49 54 55 57 58 59 b 63 1 1 0 1 5 6 9 11 13 15 17 18 20 22 26 33 34 35 37 39 40 41 42 46 47 49 54 55 57 58 59 # 12124 is_subset c a 63 1 1 0 1 5 6 9 11 13 15 17 18 20 22 26 33 34 35 37 39 40 41 42 46 47 49 54 55 57 58 59 b 63 1 0 0 4 5 6 7 8 10 11 12 14 15 16 17 18 22 24 25 27 28 29 31 32 35 37 51 54 58 60 62 # 12125 is_subset c a 63 1 1 e b 63 1 1 e # 12126 is_subset c a 63 1 1 e b 63 1 1 e # 12127 is_subset c a 63 1 1 e b 63 1 1 e # 12128 is_subset c a 63 1 1 e b 63 1 1 f # 12129 is_subset c a 63 1 1 e b 63 1 1 e # 12130 is_subset c a 63 1 1 e b 63 1 1 0 1 3 8 10 12 13 17 18 19 22 27 29 30 33 34 35 39 40 41 43 44 45 46 49 51 52 57 59 61 62 # 12131 is_subset c a 63 1 1 f b 63 1 1 f # 12132 is_subset c a 63 1 1 f b 63 1 1 e # 12133 is_subset c a 63 1 1 f b 63 1 1 f # 12134 is_subset c a 63 1 1 f b 63 1 1 f # 12135 is_subset c a 63 1 1 f b 63 1 1 f # 12136 is_subset c a 63 1 1 f b 63 1 1 0 1 2 3 6 8 9 11 12 14 16 21 22 23 27 28 30 31 33 34 37 38 40 42 43 45 46 50 51 54 56 57 59 62 # 12137 is_subset c a 63 1 1 2 3 4 6 7 9 10 11 13 14 15 16 19 20 21 24 26 27 28 30 32 33 37 40 48 49 50 51 52 54 55 56 57 58 59 60 61 62 b 63 1 1 2 3 4 6 7 9 10 11 13 14 15 16 19 20 21 24 26 27 28 30 32 33 37 40 48 49 50 51 52 54 55 56 57 58 59 60 61 62 # 12138 is_subset c a 63 1 1 2 3 4 6 7 9 10 11 13 14 15 16 19 20 21 24 26 27 28 30 32 33 37 40 48 49 50 51 52 54 55 56 57 58 59 60 61 62 b 63 1 1 e # 12139 is_subset c a 63 1 1 0 4 6 10 11 14 15 17 18 19 22 25 26 27 28 29 30 34 35 39 40 41 46 49 51 52 54 57 59 60 b 63 1 1 0 4 6 10 11 14 15 17 18 19 22 25 26 27 28 29 30 34 35 39 40 41 46 49 51 52 54 57 59 60 # 12140 is_subset c a 63 1 1 0 4 6 10 11 14 15 17 18 19 22 25 26 27 28 29 30 34 35 39 40 41 46 49 51 52 54 57 59 60 b 63 1 1 f # 12141 is_subset c a 63 1 1 0 3 4 5 7 11 13 14 15 16 19 21 22 23 25 26 30 32 33 35 36 37 40 41 42 45 49 51 52 53 56 60 62 b 63 1 1 0 3 4 5 7 11 13 14 15 16 19 21 22 23 25 26 30 32 33 35 36 37 40 41 42 45 49 51 52 53 56 60 62 # 12142 is_subset c a 63 1 1 0 3 4 5 7 11 13 14 15 16 19 21 22 23 25 26 30 32 33 35 36 37 40 41 42 45 49 51 52 53 56 60 62 b 63 1 1 4 5 6 8 12 13 14 17 18 19 20 21 25 26 27 28 29 33 36 39 40 41 43 44 47 49 50 52 58 # 12143 is_subset c a 64 0 0 e b 64 0 0 e # 12144 is_subset c a 64 0 0 e b 64 0 0 e # 12145 is_subset c a 64 0 0 e b 64 0 0 e # 12146 is_subset c a 64 0 0 e b 64 0 0 f # 12147 is_subset c a 64 0 0 e b 64 0 0 e # 12148 is_subset c a 64 0 0 e b 64 0 0 2 3 4 7 8 9 10 11 12 14 15 17 18 19 20 23 24 26 27 28 32 34 35 36 39 43 44 46 50 52 56 60 61 62 # 12149 is_subset c a 64 0 0 f b 64 0 0 f # 12150 is_subset c a 64 0 0 f b 64 0 0 e # 12151 is_subset c a 64 0 0 f b 64 0 0 f # 12152 is_subset c a 64 0 0 f b 64 0 0 f # 12153 is_subset c a 64 0 0 f b 64 0 0 f # 12154 is_subset c a 64 0 0 f b 64 0 0 1 4 5 6 11 12 13 18 21 22 26 27 31 33 34 37 39 41 42 44 45 46 49 51 52 54 55 57 58 59 # 12155 is_subset c a 64 0 0 2 3 7 8 11 14 19 20 22 24 25 26 30 31 32 36 37 39 41 46 47 48 50 51 53 54 56 57 58 62 b 64 0 0 2 3 7 8 11 14 19 20 22 24 25 26 30 31 32 36 37 39 41 46 47 48 50 51 53 54 56 57 58 62 # 12156 is_subset c a 64 0 0 2 3 7 8 11 14 19 20 22 24 25 26 30 31 32 36 37 39 41 46 47 48 50 51 53 54 56 57 58 62 b 64 0 0 e # 12157 is_subset c a 64 0 0 0 2 3 7 9 11 14 19 23 27 28 31 32 36 37 38 40 45 46 47 50 51 54 55 56 57 61 63 b 64 0 0 0 2 3 7 9 11 14 19 23 27 28 31 32 36 37 38 40 45 46 47 50 51 54 55 56 57 61 63 # 12158 is_subset c a 64 0 0 0 2 3 7 9 11 14 19 23 27 28 31 32 36 37 38 40 45 46 47 50 51 54 55 56 57 61 63 b 64 0 0 f # 12159 is_subset c a 64 0 0 0 1 3 4 6 7 11 14 15 17 19 22 26 28 29 31 32 33 34 36 37 40 44 46 51 52 53 55 57 60 61 63 b 64 0 0 0 1 3 4 6 7 11 14 15 17 19 22 26 28 29 31 32 33 34 36 37 40 44 46 51 52 53 55 57 60 61 63 # 12160 is_subset c a 64 0 0 0 1 3 4 6 7 11 14 15 17 19 22 26 28 29 31 32 33 34 36 37 40 44 46 51 52 53 55 57 60 61 63 b 64 0 0 0 1 3 4 7 8 9 10 11 13 14 15 18 21 24 25 26 27 28 29 30 32 33 35 47 49 51 52 55 57 58 59 60 61 63 # 12161 is_subset c a 64 0 0 e b 64 0 0 e # 12162 is_subset c a 64 0 0 e b 64 0 1 e # 12163 is_subset c a 64 0 0 e b 64 0 0 e # 12164 is_subset c a 64 0 0 e b 64 0 1 f # 12165 is_subset c a 64 0 0 e b 64 0 0 e # 12166 is_subset c a 64 0 0 e b 64 0 1 0 1 2 6 8 9 10 15 20 21 24 27 28 29 30 31 34 35 36 37 40 42 43 45 46 47 50 52 54 55 57 60 # 12167 is_subset c a 64 0 0 f b 64 0 0 f # 12168 is_subset c a 64 0 0 f b 64 0 1 e # 12169 is_subset c a 64 0 0 f b 64 0 0 f # 12170 is_subset c a 64 0 0 f b 64 0 1 f # 12171 is_subset c a 64 0 0 f b 64 0 0 f # 12172 is_subset c a 64 0 0 f b 64 0 1 0 2 4 6 7 9 10 11 12 14 16 17 18 19 20 25 26 31 36 41 43 45 48 49 50 51 55 59 61 62 63 # 12173 is_subset c a 64 0 0 3 4 5 7 8 10 18 19 20 22 25 27 28 29 30 31 34 35 38 39 40 41 45 52 53 54 56 57 59 60 62 b 64 0 0 3 4 5 7 8 10 18 19 20 22 25 27 28 29 30 31 34 35 38 39 40 41 45 52 53 54 56 57 59 60 62 # 12174 is_subset c a 64 0 0 3 4 5 7 8 10 18 19 20 22 25 27 28 29 30 31 34 35 38 39 40 41 45 52 53 54 56 57 59 60 62 b 64 0 1 e # 12175 is_subset c a 64 0 0 0 1 3 4 6 7 10 12 14 16 19 22 26 29 33 36 42 44 45 46 47 48 55 56 58 63 b 64 0 0 0 1 3 4 6 7 10 12 14 16 19 22 26 29 33 36 42 44 45 46 47 48 55 56 58 63 # 12176 is_subset c a 64 0 0 0 1 3 4 6 7 10 12 14 16 19 22 26 29 33 36 42 44 45 46 47 48 55 56 58 63 b 64 0 1 f # 12177 is_subset c a 64 0 0 1 4 8 10 12 13 15 16 17 21 23 28 29 31 36 37 38 39 40 41 43 44 46 47 52 56 57 58 61 63 b 64 0 0 1 4 8 10 12 13 15 16 17 21 23 28 29 31 36 37 38 39 40 41 43 44 46 47 52 56 57 58 61 63 # 12178 is_subset c a 64 0 0 1 4 8 10 12 13 15 16 17 21 23 28 29 31 36 37 38 39 40 41 43 44 46 47 52 56 57 58 61 63 b 64 0 1 1 12 14 16 18 19 20 22 24 25 26 28 33 34 35 37 39 41 46 47 50 52 53 54 55 57 61 # 12179 is_subset c a 64 0 0 e b 64 0 0 e # 12180 is_subset c a 64 0 0 e b 64 1 0 e # 12181 is_subset c a 64 0 0 e b 64 0 0 e # 12182 is_subset c a 64 0 0 e b 64 1 0 f # 12183 is_subset c a 64 0 0 e b 64 0 0 e # 12184 is_subset c a 64 0 0 e b 64 1 0 0 7 12 13 20 22 24 26 28 30 31 33 34 35 39 40 41 44 45 46 48 51 56 58 59 63 # 12185 is_subset c a 64 0 0 f b 64 0 0 f # 12186 is_subset c a 64 0 0 f b 64 1 0 e # 12187 is_subset c a 64 0 0 f b 64 0 0 f # 12188 is_subset c a 64 0 0 f b 64 1 0 f # 12189 is_subset c a 64 0 0 f b 64 0 0 f # 12190 is_subset c a 64 0 0 f b 64 1 0 2 3 4 6 8 9 10 11 12 13 14 15 16 18 20 22 23 25 27 29 30 31 33 34 36 38 39 41 42 45 46 49 50 52 53 54 56 59 62 63 # 12191 is_subset c a 64 0 0 4 5 8 9 10 12 13 14 15 17 20 22 24 28 32 35 37 40 41 44 48 49 50 51 52 53 55 57 58 60 63 b 64 0 0 4 5 8 9 10 12 13 14 15 17 20 22 24 28 32 35 37 40 41 44 48 49 50 51 52 53 55 57 58 60 63 # 12192 is_subset c a 64 0 0 4 5 8 9 10 12 13 14 15 17 20 22 24 28 32 35 37 40 41 44 48 49 50 51 52 53 55 57 58 60 63 b 64 1 0 e # 12193 is_subset c a 64 0 0 0 1 4 5 8 9 10 14 18 22 24 25 26 27 30 31 35 36 37 39 40 43 44 45 51 57 59 62 b 64 0 0 0 1 4 5 8 9 10 14 18 22 24 25 26 27 30 31 35 36 37 39 40 43 44 45 51 57 59 62 # 12194 is_subset c a 64 0 0 0 1 4 5 8 9 10 14 18 22 24 25 26 27 30 31 35 36 37 39 40 43 44 45 51 57 59 62 b 64 1 0 f # 12195 is_subset c a 64 0 0 1 4 5 13 14 15 16 18 20 21 22 24 26 28 29 30 32 34 37 38 39 43 45 46 49 50 51 52 53 55 58 59 60 61 63 b 64 0 0 1 4 5 13 14 15 16 18 20 21 22 24 26 28 29 30 32 34 37 38 39 43 45 46 49 50 51 52 53 55 58 59 60 61 63 # 12196 is_subset c a 64 0 0 1 4 5 13 14 15 16 18 20 21 22 24 26 28 29 30 32 34 37 38 39 43 45 46 49 50 51 52 53 55 58 59 60 61 63 b 64 1 0 0 1 4 6 8 11 17 19 20 21 22 23 24 25 26 27 30 33 34 37 38 39 40 42 44 46 47 50 51 52 53 54 55 57 58 59 61 # 12197 is_subset c a 64 0 0 e b 64 0 0 e # 12198 is_subset c a 64 0 0 e b 64 1 1 e # 12199 is_subset c a 64 0 0 e b 64 0 0 e # 12200 is_subset c a 64 0 0 e b 64 1 1 f # 12201 is_subset c a 64 0 0 e b 64 0 0 e # 12202 is_subset c a 64 0 0 e b 64 1 1 0 2 3 4 6 7 8 9 13 23 26 27 28 31 33 34 37 40 41 42 43 44 47 48 49 51 54 55 56 58 59 60 61 # 12203 is_subset c a 64 0 0 f b 64 0 0 f # 12204 is_subset c a 64 0 0 f b 64 1 1 e # 12205 is_subset c a 64 0 0 f b 64 0 0 f # 12206 is_subset c a 64 0 0 f b 64 1 1 f # 12207 is_subset c a 64 0 0 f b 64 0 0 f # 12208 is_subset c a 64 0 0 f b 64 1 1 0 2 4 6 7 8 10 11 12 14 17 19 22 24 26 30 32 34 35 36 37 39 43 47 49 51 54 55 56 57 62 # 12209 is_subset c a 64 0 0 0 1 2 7 8 9 10 12 14 18 20 21 24 25 26 30 31 33 35 37 39 46 47 48 49 52 53 54 55 56 57 59 61 62 b 64 0 0 0 1 2 7 8 9 10 12 14 18 20 21 24 25 26 30 31 33 35 37 39 46 47 48 49 52 53 54 55 56 57 59 61 62 # 12210 is_subset c a 64 0 0 0 1 2 7 8 9 10 12 14 18 20 21 24 25 26 30 31 33 35 37 39 46 47 48 49 52 53 54 55 56 57 59 61 62 b 64 1 1 e # 12211 is_subset c a 64 0 0 0 3 5 6 7 8 13 16 18 21 23 26 27 29 35 41 42 43 44 45 49 50 51 52 54 56 57 58 60 b 64 0 0 0 3 5 6 7 8 13 16 18 21 23 26 27 29 35 41 42 43 44 45 49 50 51 52 54 56 57 58 60 # 12212 is_subset c a 64 0 0 0 3 5 6 7 8 13 16 18 21 23 26 27 29 35 41 42 43 44 45 49 50 51 52 54 56 57 58 60 b 64 1 1 f # 12213 is_subset c a 64 0 0 0 1 2 3 4 9 11 12 13 16 20 21 22 24 25 26 28 30 31 32 33 34 35 37 40 41 43 44 45 49 50 52 53 54 58 60 61 63 b 64 0 0 0 1 2 3 4 9 11 12 13 16 20 21 22 24 25 26 28 30 31 32 33 34 35 37 40 41 43 44 45 49 50 52 53 54 58 60 61 63 # 12214 is_subset c a 64 0 0 0 1 2 3 4 9 11 12 13 16 20 21 22 24 25 26 28 30 31 32 33 34 35 37 40 41 43 44 45 49 50 52 53 54 58 60 61 63 b 64 1 1 1 2 3 4 7 9 10 11 12 19 23 24 31 33 37 44 45 49 51 53 55 57 61 63 # 12215 is_subset c a 64 0 1 e b 64 0 1 e # 12216 is_subset c a 64 0 1 e b 64 0 0 e # 12217 is_subset c a 64 0 1 e b 64 0 1 e # 12218 is_subset c a 64 0 1 e b 64 0 0 f # 12219 is_subset c a 64 0 1 e b 64 0 1 e # 12220 is_subset c a 64 0 1 e b 64 0 0 0 1 3 5 7 9 12 13 16 17 19 21 22 23 27 31 33 34 35 38 39 41 42 44 46 51 52 56 57 61 # 12221 is_subset c a 64 0 1 f b 64 0 1 f # 12222 is_subset c a 64 0 1 f b 64 0 0 e # 12223 is_subset c a 64 0 1 f b 64 0 1 f # 12224 is_subset c a 64 0 1 f b 64 0 0 f # 12225 is_subset c a 64 0 1 f b 64 0 1 f # 12226 is_subset c a 64 0 1 f b 64 0 0 3 4 5 6 8 9 10 11 13 16 17 19 21 25 27 29 31 32 34 35 37 38 41 43 53 54 55 56 60 61 63 # 12227 is_subset c a 64 0 1 2 3 4 5 11 12 16 17 18 20 22 23 24 26 27 30 38 39 40 42 43 44 47 49 50 53 54 57 58 59 61 63 b 64 0 1 2 3 4 5 11 12 16 17 18 20 22 23 24 26 27 30 38 39 40 42 43 44 47 49 50 53 54 57 58 59 61 63 # 12228 is_subset c a 64 0 1 2 3 4 5 11 12 16 17 18 20 22 23 24 26 27 30 38 39 40 42 43 44 47 49 50 53 54 57 58 59 61 63 b 64 0 0 e # 12229 is_subset c a 64 0 1 4 7 9 10 14 17 18 19 20 21 22 24 25 27 28 30 31 32 33 35 37 38 39 40 41 42 43 45 48 51 52 55 57 58 59 62 b 64 0 1 4 7 9 10 14 17 18 19 20 21 22 24 25 27 28 30 31 32 33 35 37 38 39 40 41 42 43 45 48 51 52 55 57 58 59 62 # 12230 is_subset c a 64 0 1 4 7 9 10 14 17 18 19 20 21 22 24 25 27 28 30 31 32 33 35 37 38 39 40 41 42 43 45 48 51 52 55 57 58 59 62 b 64 0 0 f # 12231 is_subset c a 64 0 1 3 7 10 14 16 19 21 23 24 26 27 28 29 34 36 39 40 44 46 47 48 53 54 57 59 63 b 64 0 1 3 7 10 14 16 19 21 23 24 26 27 28 29 34 36 39 40 44 46 47 48 53 54 57 59 63 # 12232 is_subset c a 64 0 1 3 7 10 14 16 19 21 23 24 26 27 28 29 34 36 39 40 44 46 47 48 53 54 57 59 63 b 64 0 0 0 3 4 5 6 7 12 14 16 18 21 23 25 26 27 29 30 33 34 35 36 37 38 39 40 41 43 47 48 49 52 53 54 57 59 60 61 62 63 # 12233 is_subset c a 64 0 1 e b 64 0 1 e # 12234 is_subset c a 64 0 1 e b 64 0 1 e # 12235 is_subset c a 64 0 1 e b 64 0 1 e # 12236 is_subset c a 64 0 1 e b 64 0 1 f # 12237 is_subset c a 64 0 1 e b 64 0 1 e # 12238 is_subset c a 64 0 1 e b 64 0 1 0 1 2 3 4 5 6 7 8 9 11 13 14 15 16 20 22 24 25 27 28 30 31 33 34 35 38 43 44 46 47 49 53 54 56 58 59 61 62 63 # 12239 is_subset c a 64 0 1 f b 64 0 1 f # 12240 is_subset c a 64 0 1 f b 64 0 1 e # 12241 is_subset c a 64 0 1 f b 64 0 1 f # 12242 is_subset c a 64 0 1 f b 64 0 1 f # 12243 is_subset c a 64 0 1 f b 64 0 1 f # 12244 is_subset c a 64 0 1 f b 64 0 1 1 2 3 7 8 11 12 17 18 20 21 22 23 24 25 26 29 31 33 34 35 40 41 42 46 50 51 53 54 58 59 61 62 63 # 12245 is_subset c a 64 0 1 0 1 5 6 7 8 9 14 16 17 19 23 24 25 26 27 28 29 30 31 32 40 41 44 46 47 48 50 53 56 59 61 62 b 64 0 1 0 1 5 6 7 8 9 14 16 17 19 23 24 25 26 27 28 29 30 31 32 40 41 44 46 47 48 50 53 56 59 61 62 # 12246 is_subset c a 64 0 1 0 1 5 6 7 8 9 14 16 17 19 23 24 25 26 27 28 29 30 31 32 40 41 44 46 47 48 50 53 56 59 61 62 b 64 0 1 e # 12247 is_subset c a 64 0 1 2 4 5 6 7 8 10 11 13 16 18 22 24 25 28 30 32 33 34 36 40 44 45 46 47 48 49 57 58 60 61 63 b 64 0 1 2 4 5 6 7 8 10 11 13 16 18 22 24 25 28 30 32 33 34 36 40 44 45 46 47 48 49 57 58 60 61 63 # 12248 is_subset c a 64 0 1 2 4 5 6 7 8 10 11 13 16 18 22 24 25 28 30 32 33 34 36 40 44 45 46 47 48 49 57 58 60 61 63 b 64 0 1 f # 12249 is_subset c a 64 0 1 4 6 8 9 10 11 12 14 15 18 22 23 26 30 31 32 34 36 37 38 40 41 45 50 51 52 53 55 60 63 b 64 0 1 4 6 8 9 10 11 12 14 15 18 22 23 26 30 31 32 34 36 37 38 40 41 45 50 51 52 53 55 60 63 # 12250 is_subset c a 64 0 1 4 6 8 9 10 11 12 14 15 18 22 23 26 30 31 32 34 36 37 38 40 41 45 50 51 52 53 55 60 63 b 64 0 1 4 6 7 8 9 12 14 16 17 18 23 24 25 27 28 30 32 33 34 35 41 46 47 48 49 53 56 59 60 61 63 # 12251 is_subset c a 64 0 1 e b 64 0 1 e # 12252 is_subset c a 64 0 1 e b 64 1 0 e # 12253 is_subset c a 64 0 1 e b 64 0 1 e # 12254 is_subset c a 64 0 1 e b 64 1 0 f # 12255 is_subset c a 64 0 1 e b 64 0 1 e # 12256 is_subset c a 64 0 1 e b 64 1 0 0 1 5 7 8 9 11 14 16 18 21 25 26 28 31 33 34 35 36 38 43 46 48 49 50 52 54 56 57 58 59 60 61 # 12257 is_subset c a 64 0 1 f b 64 0 1 f # 12258 is_subset c a 64 0 1 f b 64 1 0 e # 12259 is_subset c a 64 0 1 f b 64 0 1 f # 12260 is_subset c a 64 0 1 f b 64 1 0 f # 12261 is_subset c a 64 0 1 f b 64 0 1 f # 12262 is_subset c a 64 0 1 f b 64 1 0 0 2 4 5 6 8 12 14 15 16 17 19 20 22 23 24 25 26 27 28 32 34 35 36 37 39 44 47 49 57 59 63 # 12263 is_subset c a 64 0 1 0 2 3 5 6 7 12 13 14 15 16 20 25 27 29 30 31 34 35 38 39 40 48 49 51 53 54 55 56 59 60 62 b 64 0 1 0 2 3 5 6 7 12 13 14 15 16 20 25 27 29 30 31 34 35 38 39 40 48 49 51 53 54 55 56 59 60 62 # 12264 is_subset c a 64 0 1 0 2 3 5 6 7 12 13 14 15 16 20 25 27 29 30 31 34 35 38 39 40 48 49 51 53 54 55 56 59 60 62 b 64 1 0 e # 12265 is_subset c a 64 0 1 0 1 2 5 7 8 12 13 16 17 19 20 22 23 26 29 30 33 35 37 38 42 43 47 49 50 52 53 54 56 57 58 61 62 63 b 64 0 1 0 1 2 5 7 8 12 13 16 17 19 20 22 23 26 29 30 33 35 37 38 42 43 47 49 50 52 53 54 56 57 58 61 62 63 # 12266 is_subset c a 64 0 1 0 1 2 5 7 8 12 13 16 17 19 20 22 23 26 29 30 33 35 37 38 42 43 47 49 50 52 53 54 56 57 58 61 62 63 b 64 1 0 f # 12267 is_subset c a 64 0 1 2 3 4 8 11 13 14 15 17 18 20 21 22 23 24 25 28 29 33 37 40 41 47 51 54 55 57 60 b 64 0 1 2 3 4 8 11 13 14 15 17 18 20 21 22 23 24 25 28 29 33 37 40 41 47 51 54 55 57 60 # 12268 is_subset c a 64 0 1 2 3 4 8 11 13 14 15 17 18 20 21 22 23 24 25 28 29 33 37 40 41 47 51 54 55 57 60 b 64 1 0 1 3 5 8 10 12 15 17 18 19 21 22 23 24 25 26 27 30 31 34 35 40 45 47 50 51 55 58 59 60 61 62 # 12269 is_subset c a 64 0 1 e b 64 0 1 e # 12270 is_subset c a 64 0 1 e b 64 1 1 e # 12271 is_subset c a 64 0 1 e b 64 0 1 e # 12272 is_subset c a 64 0 1 e b 64 1 1 f # 12273 is_subset c a 64 0 1 e b 64 0 1 e # 12274 is_subset c a 64 0 1 e b 64 1 1 1 2 3 6 7 11 13 14 15 17 19 21 22 23 26 29 30 32 33 35 36 38 40 43 46 47 50 55 56 57 60 61 62 # 12275 is_subset c a 64 0 1 f b 64 0 1 f # 12276 is_subset c a 64 0 1 f b 64 1 1 e # 12277 is_subset c a 64 0 1 f b 64 0 1 f # 12278 is_subset c a 64 0 1 f b 64 1 1 f # 12279 is_subset c a 64 0 1 f b 64 0 1 f # 12280 is_subset c a 64 0 1 f b 64 1 1 0 1 3 7 8 9 10 13 16 18 20 22 23 26 27 29 31 32 33 34 35 37 38 40 41 42 43 44 47 48 50 52 53 55 58 60 63 # 12281 is_subset c a 64 0 1 2 3 5 7 8 10 12 15 16 19 22 24 25 26 27 31 32 34 35 36 38 39 40 41 43 48 49 51 53 55 56 58 59 60 62 63 b 64 0 1 2 3 5 7 8 10 12 15 16 19 22 24 25 26 27 31 32 34 35 36 38 39 40 41 43 48 49 51 53 55 56 58 59 60 62 63 # 12282 is_subset c a 64 0 1 2 3 5 7 8 10 12 15 16 19 22 24 25 26 27 31 32 34 35 36 38 39 40 41 43 48 49 51 53 55 56 58 59 60 62 63 b 64 1 1 e # 12283 is_subset c a 64 0 1 2 4 5 8 12 13 14 15 17 18 19 20 22 23 24 26 27 28 32 34 35 36 37 39 42 45 47 48 49 51 55 56 58 60 62 63 b 64 0 1 2 4 5 8 12 13 14 15 17 18 19 20 22 23 24 26 27 28 32 34 35 36 37 39 42 45 47 48 49 51 55 56 58 60 62 63 # 12284 is_subset c a 64 0 1 2 4 5 8 12 13 14 15 17 18 19 20 22 23 24 26 27 28 32 34 35 36 37 39 42 45 47 48 49 51 55 56 58 60 62 63 b 64 1 1 f # 12285 is_subset c a 64 0 1 5 7 12 13 15 16 17 19 20 21 22 23 25 27 28 29 30 34 35 36 38 42 45 47 48 49 50 51 52 53 55 56 57 58 59 60 61 b 64 0 1 5 7 12 13 15 16 17 19 20 21 22 23 25 27 28 29 30 34 35 36 38 42 45 47 48 49 50 51 52 53 55 56 57 58 59 60 61 # 12286 is_subset c a 64 0 1 5 7 12 13 15 16 17 19 20 21 22 23 25 27 28 29 30 34 35 36 38 42 45 47 48 49 50 51 52 53 55 56 57 58 59 60 61 b 64 1 1 0 3 7 8 9 11 12 13 14 15 17 20 21 23 24 28 29 30 31 32 33 34 39 41 42 44 45 46 48 51 53 54 56 58 59 60 62 63 # 12287 is_subset c a 64 1 0 e b 64 1 0 e # 12288 is_subset c a 64 1 0 e b 64 0 0 e # 12289 is_subset c a 64 1 0 e b 64 1 0 e # 12290 is_subset c a 64 1 0 e b 64 0 0 f # 12291 is_subset c a 64 1 0 e b 64 1 0 e # 12292 is_subset c a 64 1 0 e b 64 0 0 1 3 5 6 8 9 10 11 12 13 14 15 18 19 22 24 25 27 30 31 38 40 41 42 43 45 47 51 52 54 61 63 # 12293 is_subset c a 64 1 0 f b 64 1 0 f # 12294 is_subset c a 64 1 0 f b 64 0 0 e # 12295 is_subset c a 64 1 0 f b 64 1 0 f # 12296 is_subset c a 64 1 0 f b 64 0 0 f # 12297 is_subset c a 64 1 0 f b 64 1 0 f # 12298 is_subset c a 64 1 0 f b 64 0 0 1 4 6 7 8 9 10 12 17 18 21 22 25 26 27 28 32 33 34 35 36 38 39 41 43 44 45 50 51 61 62 # 12299 is_subset c a 64 1 0 4 9 12 14 16 18 19 20 25 26 27 29 31 33 37 39 40 41 42 43 45 46 47 49 50 54 55 57 58 59 62 63 b 64 1 0 4 9 12 14 16 18 19 20 25 26 27 29 31 33 37 39 40 41 42 43 45 46 47 49 50 54 55 57 58 59 62 63 # 12300 is_subset c a 64 1 0 4 9 12 14 16 18 19 20 25 26 27 29 31 33 37 39 40 41 42 43 45 46 47 49 50 54 55 57 58 59 62 63 b 64 0 0 e # 12301 is_subset c a 64 1 0 2 3 10 13 16 18 20 22 25 26 27 28 29 32 34 36 40 42 46 48 50 51 52 53 54 57 58 60 62 63 b 64 1 0 2 3 10 13 16 18 20 22 25 26 27 28 29 32 34 36 40 42 46 48 50 51 52 53 54 57 58 60 62 63 # 12302 is_subset c a 64 1 0 2 3 10 13 16 18 20 22 25 26 27 28 29 32 34 36 40 42 46 48 50 51 52 53 54 57 58 60 62 63 b 64 0 0 f # 12303 is_subset c a 64 1 0 0 1 2 3 8 9 14 15 16 17 18 19 21 22 23 24 25 32 36 37 39 40 41 43 46 47 48 49 50 53 56 57 58 61 62 b 64 1 0 0 1 2 3 8 9 14 15 16 17 18 19 21 22 23 24 25 32 36 37 39 40 41 43 46 47 48 49 50 53 56 57 58 61 62 # 12304 is_subset c a 64 1 0 0 1 2 3 8 9 14 15 16 17 18 19 21 22 23 24 25 32 36 37 39 40 41 43 46 47 48 49 50 53 56 57 58 61 62 b 64 0 0 3 4 5 6 7 8 9 10 13 17 18 19 20 25 26 28 30 32 35 37 40 44 45 48 53 54 55 56 57 59 61 62 63 # 12305 is_subset c a 64 1 0 e b 64 1 0 e # 12306 is_subset c a 64 1 0 e b 64 0 1 e # 12307 is_subset c a 64 1 0 e b 64 1 0 e # 12308 is_subset c a 64 1 0 e b 64 0 1 f # 12309 is_subset c a 64 1 0 e b 64 1 0 e # 12310 is_subset c a 64 1 0 e b 64 0 1 2 6 12 13 14 15 19 23 24 25 26 28 29 31 32 33 39 41 44 48 50 51 52 54 55 57 58 59 62 # 12311 is_subset c a 64 1 0 f b 64 1 0 f # 12312 is_subset c a 64 1 0 f b 64 0 1 e # 12313 is_subset c a 64 1 0 f b 64 1 0 f # 12314 is_subset c a 64 1 0 f b 64 0 1 f # 12315 is_subset c a 64 1 0 f b 64 1 0 f # 12316 is_subset c a 64 1 0 f b 64 0 1 2 4 10 12 13 20 22 25 27 32 33 34 38 40 42 46 47 48 51 52 54 58 62 # 12317 is_subset c a 64 1 0 1 2 6 7 8 9 12 15 16 17 19 20 24 26 29 31 32 35 36 38 39 40 43 44 45 46 47 50 52 54 58 59 62 63 b 64 1 0 1 2 6 7 8 9 12 15 16 17 19 20 24 26 29 31 32 35 36 38 39 40 43 44 45 46 47 50 52 54 58 59 62 63 # 12318 is_subset c a 64 1 0 1 2 6 7 8 9 12 15 16 17 19 20 24 26 29 31 32 35 36 38 39 40 43 44 45 46 47 50 52 54 58 59 62 63 b 64 0 1 e # 12319 is_subset c a 64 1 0 1 2 5 6 12 13 18 19 20 21 29 31 32 39 41 44 45 46 47 49 50 52 55 56 57 60 61 63 b 64 1 0 1 2 5 6 12 13 18 19 20 21 29 31 32 39 41 44 45 46 47 49 50 52 55 56 57 60 61 63 # 12320 is_subset c a 64 1 0 1 2 5 6 12 13 18 19 20 21 29 31 32 39 41 44 45 46 47 49 50 52 55 56 57 60 61 63 b 64 0 1 f # 12321 is_subset c a 64 1 0 2 3 4 6 10 11 13 14 15 16 17 21 25 28 29 30 33 35 39 40 41 42 44 45 48 49 50 55 57 60 62 63 b 64 1 0 2 3 4 6 10 11 13 14 15 16 17 21 25 28 29 30 33 35 39 40 41 42 44 45 48 49 50 55 57 60 62 63 # 12322 is_subset c a 64 1 0 2 3 4 6 10 11 13 14 15 16 17 21 25 28 29 30 33 35 39 40 41 42 44 45 48 49 50 55 57 60 62 63 b 64 0 1 2 3 4 7 11 12 13 15 16 18 20 26 28 29 31 34 39 41 42 44 47 48 50 51 52 56 61 63 # 12323 is_subset c a 64 1 0 e b 64 1 0 e # 12324 is_subset c a 64 1 0 e b 64 1 0 e # 12325 is_subset c a 64 1 0 e b 64 1 0 e # 12326 is_subset c a 64 1 0 e b 64 1 0 f # 12327 is_subset c a 64 1 0 e b 64 1 0 e # 12328 is_subset c a 64 1 0 e b 64 1 0 0 5 7 8 9 11 13 15 16 18 19 20 21 22 26 32 34 37 39 40 41 42 48 49 52 54 56 57 58 59 61 # 12329 is_subset c a 64 1 0 f b 64 1 0 f # 12330 is_subset c a 64 1 0 f b 64 1 0 e # 12331 is_subset c a 64 1 0 f b 64 1 0 f # 12332 is_subset c a 64 1 0 f b 64 1 0 f # 12333 is_subset c a 64 1 0 f b 64 1 0 f # 12334 is_subset c a 64 1 0 f b 64 1 0 1 3 4 5 6 7 11 12 17 18 20 21 22 23 24 26 29 30 31 32 34 35 36 38 40 43 44 45 48 50 51 56 58 # 12335 is_subset c a 64 1 0 0 3 4 7 9 12 13 16 20 21 23 24 28 29 32 33 35 36 41 42 43 44 47 49 50 54 56 58 60 62 63 b 64 1 0 0 3 4 7 9 12 13 16 20 21 23 24 28 29 32 33 35 36 41 42 43 44 47 49 50 54 56 58 60 62 63 # 12336 is_subset c a 64 1 0 0 3 4 7 9 12 13 16 20 21 23 24 28 29 32 33 35 36 41 42 43 44 47 49 50 54 56 58 60 62 63 b 64 1 0 e # 12337 is_subset c a 64 1 0 0 2 3 4 7 10 11 14 15 17 19 23 25 32 37 39 40 42 44 49 50 52 57 58 62 b 64 1 0 0 2 3 4 7 10 11 14 15 17 19 23 25 32 37 39 40 42 44 49 50 52 57 58 62 # 12338 is_subset c a 64 1 0 0 2 3 4 7 10 11 14 15 17 19 23 25 32 37 39 40 42 44 49 50 52 57 58 62 b 64 1 0 f # 12339 is_subset c a 64 1 0 0 1 2 4 6 7 8 9 11 13 14 17 18 22 25 26 27 29 32 33 39 42 45 46 47 48 49 51 55 58 59 62 63 b 64 1 0 0 1 2 4 6 7 8 9 11 13 14 17 18 22 25 26 27 29 32 33 39 42 45 46 47 48 49 51 55 58 59 62 63 # 12340 is_subset c a 64 1 0 0 1 2 4 6 7 8 9 11 13 14 17 18 22 25 26 27 29 32 33 39 42 45 46 47 48 49 51 55 58 59 62 63 b 64 1 0 4 5 10 12 13 15 16 18 20 23 24 26 27 29 30 31 37 40 42 43 44 46 47 48 50 52 59 60 62 # 12341 is_subset c a 64 1 0 e b 64 1 0 e # 12342 is_subset c a 64 1 0 e b 64 1 1 e # 12343 is_subset c a 64 1 0 e b 64 1 0 e # 12344 is_subset c a 64 1 0 e b 64 1 1 f # 12345 is_subset c a 64 1 0 e b 64 1 0 e # 12346 is_subset c a 64 1 0 e b 64 1 1 0 1 4 5 6 7 9 10 12 14 15 16 17 19 21 23 24 25 26 27 33 36 38 39 40 41 43 46 49 50 52 55 56 57 58 61 63 # 12347 is_subset c a 64 1 0 f b 64 1 0 f # 12348 is_subset c a 64 1 0 f b 64 1 1 e # 12349 is_subset c a 64 1 0 f b 64 1 0 f # 12350 is_subset c a 64 1 0 f b 64 1 1 f # 12351 is_subset c a 64 1 0 f b 64 1 0 f # 12352 is_subset c a 64 1 0 f b 64 1 1 0 1 8 9 12 13 16 18 19 20 21 23 24 26 31 33 35 36 37 38 39 40 43 45 46 49 50 51 52 54 55 56 57 59 61 62 63 # 12353 is_subset c a 64 1 0 8 9 10 11 13 15 16 18 20 31 32 33 37 38 39 41 42 43 44 46 50 52 54 56 58 59 60 61 62 63 b 64 1 0 8 9 10 11 13 15 16 18 20 31 32 33 37 38 39 41 42 43 44 46 50 52 54 56 58 59 60 61 62 63 # 12354 is_subset c a 64 1 0 8 9 10 11 13 15 16 18 20 31 32 33 37 38 39 41 42 43 44 46 50 52 54 56 58 59 60 61 62 63 b 64 1 1 e # 12355 is_subset c a 64 1 0 0 1 3 4 5 6 8 9 13 14 15 17 18 21 22 23 24 26 27 29 32 33 36 38 41 42 44 45 48 50 52 53 55 58 59 60 62 63 b 64 1 0 0 1 3 4 5 6 8 9 13 14 15 17 18 21 22 23 24 26 27 29 32 33 36 38 41 42 44 45 48 50 52 53 55 58 59 60 62 63 # 12356 is_subset c a 64 1 0 0 1 3 4 5 6 8 9 13 14 15 17 18 21 22 23 24 26 27 29 32 33 36 38 41 42 44 45 48 50 52 53 55 58 59 60 62 63 b 64 1 1 f # 12357 is_subset c a 64 1 0 0 3 5 7 8 11 16 19 21 22 24 27 28 30 31 33 35 36 37 38 39 40 41 42 48 49 50 52 53 54 55 57 58 59 62 63 b 64 1 0 0 3 5 7 8 11 16 19 21 22 24 27 28 30 31 33 35 36 37 38 39 40 41 42 48 49 50 52 53 54 55 57 58 59 62 63 # 12358 is_subset c a 64 1 0 0 3 5 7 8 11 16 19 21 22 24 27 28 30 31 33 35 36 37 38 39 40 41 42 48 49 50 52 53 54 55 57 58 59 62 63 b 64 1 1 2 4 7 11 12 13 15 16 20 21 24 25 29 30 31 33 37 39 42 45 47 49 52 53 55 56 57 58 60 61 63 # 12359 is_subset c a 64 1 1 e b 64 1 1 e # 12360 is_subset c a 64 1 1 e b 64 0 0 e # 12361 is_subset c a 64 1 1 e b 64 1 1 e # 12362 is_subset c a 64 1 1 e b 64 0 0 f # 12363 is_subset c a 64 1 1 e b 64 1 1 e # 12364 is_subset c a 64 1 1 e b 64 0 0 0 1 3 4 6 8 10 15 16 17 18 19 27 29 30 36 37 39 42 43 46 48 49 53 54 59 60 62 # 12365 is_subset c a 64 1 1 f b 64 1 1 f # 12366 is_subset c a 64 1 1 f b 64 0 0 e # 12367 is_subset c a 64 1 1 f b 64 1 1 f # 12368 is_subset c a 64 1 1 f b 64 0 0 f # 12369 is_subset c a 64 1 1 f b 64 1 1 f # 12370 is_subset c a 64 1 1 f b 64 0 0 0 2 7 10 11 17 18 21 22 23 24 27 28 31 32 35 38 39 40 42 44 46 49 50 51 53 57 61 62 # 12371 is_subset c a 64 1 1 3 4 5 6 9 10 14 19 21 24 25 26 28 29 31 32 33 34 35 36 41 42 46 47 48 52 53 54 55 58 b 64 1 1 3 4 5 6 9 10 14 19 21 24 25 26 28 29 31 32 33 34 35 36 41 42 46 47 48 52 53 54 55 58 # 12372 is_subset c a 64 1 1 3 4 5 6 9 10 14 19 21 24 25 26 28 29 31 32 33 34 35 36 41 42 46 47 48 52 53 54 55 58 b 64 0 0 e # 12373 is_subset c a 64 1 1 1 2 3 7 9 11 17 18 20 24 28 29 31 32 34 36 38 39 42 43 47 49 51 53 56 57 58 59 62 b 64 1 1 1 2 3 7 9 11 17 18 20 24 28 29 31 32 34 36 38 39 42 43 47 49 51 53 56 57 58 59 62 # 12374 is_subset c a 64 1 1 1 2 3 7 9 11 17 18 20 24 28 29 31 32 34 36 38 39 42 43 47 49 51 53 56 57 58 59 62 b 64 0 0 f # 12375 is_subset c a 64 1 1 0 1 4 8 10 15 17 18 19 21 24 25 29 31 32 33 35 37 38 41 43 45 51 55 57 59 60 61 62 b 64 1 1 0 1 4 8 10 15 17 18 19 21 24 25 29 31 32 33 35 37 38 41 43 45 51 55 57 59 60 61 62 # 12376 is_subset c a 64 1 1 0 1 4 8 10 15 17 18 19 21 24 25 29 31 32 33 35 37 38 41 43 45 51 55 57 59 60 61 62 b 64 0 0 0 9 12 13 14 16 20 21 26 29 30 31 32 33 37 38 40 41 42 44 45 46 47 49 50 51 52 56 59 60 62 63 # 12377 is_subset c a 64 1 1 e b 64 1 1 e # 12378 is_subset c a 64 1 1 e b 64 0 1 e # 12379 is_subset c a 64 1 1 e b 64 1 1 e # 12380 is_subset c a 64 1 1 e b 64 0 1 f # 12381 is_subset c a 64 1 1 e b 64 1 1 e # 12382 is_subset c a 64 1 1 e b 64 0 1 4 5 6 7 8 9 11 12 13 16 19 20 22 24 27 28 30 31 32 33 35 36 39 41 42 44 46 47 48 49 54 56 58 59 60 61 62 63 # 12383 is_subset c a 64 1 1 f b 64 1 1 f # 12384 is_subset c a 64 1 1 f b 64 0 1 e # 12385 is_subset c a 64 1 1 f b 64 1 1 f # 12386 is_subset c a 64 1 1 f b 64 0 1 f # 12387 is_subset c a 64 1 1 f b 64 1 1 f # 12388 is_subset c a 64 1 1 f b 64 0 1 0 3 4 5 6 8 10 12 17 18 19 21 26 28 29 31 32 33 35 36 38 40 41 42 46 47 48 49 50 52 53 58 62 # 12389 is_subset c a 64 1 1 0 2 3 4 5 8 10 11 13 14 16 18 19 23 24 26 27 28 29 31 37 38 39 40 41 42 44 45 46 47 49 50 51 52 55 56 58 61 63 b 64 1 1 0 2 3 4 5 8 10 11 13 14 16 18 19 23 24 26 27 28 29 31 37 38 39 40 41 42 44 45 46 47 49 50 51 52 55 56 58 61 63 # 12390 is_subset c a 64 1 1 0 2 3 4 5 8 10 11 13 14 16 18 19 23 24 26 27 28 29 31 37 38 39 40 41 42 44 45 46 47 49 50 51 52 55 56 58 61 63 b 64 0 1 e # 12391 is_subset c a 64 1 1 1 5 8 10 13 16 17 19 21 23 27 29 30 33 34 35 36 39 40 46 49 50 51 52 54 55 56 58 59 60 b 64 1 1 1 5 8 10 13 16 17 19 21 23 27 29 30 33 34 35 36 39 40 46 49 50 51 52 54 55 56 58 59 60 # 12392 is_subset c a 64 1 1 1 5 8 10 13 16 17 19 21 23 27 29 30 33 34 35 36 39 40 46 49 50 51 52 54 55 56 58 59 60 b 64 0 1 f # 12393 is_subset c a 64 1 1 4 5 7 11 12 13 16 19 20 21 22 28 29 30 34 39 40 41 42 43 44 45 47 51 55 56 57 58 59 60 61 b 64 1 1 4 5 7 11 12 13 16 19 20 21 22 28 29 30 34 39 40 41 42 43 44 45 47 51 55 56 57 58 59 60 61 # 12394 is_subset c a 64 1 1 4 5 7 11 12 13 16 19 20 21 22 28 29 30 34 39 40 41 42 43 44 45 47 51 55 56 57 58 59 60 61 b 64 0 1 0 2 6 9 10 11 12 14 15 16 18 22 25 26 28 30 31 33 34 35 37 39 40 42 48 52 58 60 61 62 # 12395 is_subset c a 64 1 1 e b 64 1 1 e # 12396 is_subset c a 64 1 1 e b 64 1 0 e # 12397 is_subset c a 64 1 1 e b 64 1 1 e # 12398 is_subset c a 64 1 1 e b 64 1 0 f # 12399 is_subset c a 64 1 1 e b 64 1 1 e # 12400 is_subset c a 64 1 1 e b 64 1 0 0 1 4 7 8 9 13 17 21 22 23 25 28 31 33 38 39 43 44 45 48 49 52 56 59 60 61 63 # 12401 is_subset c a 64 1 1 f b 64 1 1 f # 12402 is_subset c a 64 1 1 f b 64 1 0 e # 12403 is_subset c a 64 1 1 f b 64 1 1 f # 12404 is_subset c a 64 1 1 f b 64 1 0 f # 12405 is_subset c a 64 1 1 f b 64 1 1 f # 12406 is_subset c a 64 1 1 f b 64 1 0 0 1 3 6 7 10 12 13 14 15 16 18 22 24 29 31 33 34 35 36 37 42 45 46 47 48 49 54 55 59 60 61 62 # 12407 is_subset c a 64 1 1 0 1 3 4 5 7 8 12 15 17 20 24 25 27 28 29 31 32 37 40 41 43 44 45 46 50 52 54 55 61 62 63 b 64 1 1 0 1 3 4 5 7 8 12 15 17 20 24 25 27 28 29 31 32 37 40 41 43 44 45 46 50 52 54 55 61 62 63 # 12408 is_subset c a 64 1 1 0 1 3 4 5 7 8 12 15 17 20 24 25 27 28 29 31 32 37 40 41 43 44 45 46 50 52 54 55 61 62 63 b 64 1 0 e # 12409 is_subset c a 64 1 1 5 6 8 11 12 14 16 17 18 19 20 21 25 28 31 32 33 36 39 41 44 46 47 49 52 53 56 57 58 59 62 b 64 1 1 5 6 8 11 12 14 16 17 18 19 20 21 25 28 31 32 33 36 39 41 44 46 47 49 52 53 56 57 58 59 62 # 12410 is_subset c a 64 1 1 5 6 8 11 12 14 16 17 18 19 20 21 25 28 31 32 33 36 39 41 44 46 47 49 52 53 56 57 58 59 62 b 64 1 0 f # 12411 is_subset c a 64 1 1 2 6 7 8 11 12 14 21 22 24 26 28 29 30 31 32 33 36 39 40 41 42 43 45 46 47 48 56 58 61 b 64 1 1 2 6 7 8 11 12 14 21 22 24 26 28 29 30 31 32 33 36 39 40 41 42 43 45 46 47 48 56 58 61 # 12412 is_subset c a 64 1 1 2 6 7 8 11 12 14 21 22 24 26 28 29 30 31 32 33 36 39 40 41 42 43 45 46 47 48 56 58 61 b 64 1 0 0 1 2 3 4 6 7 9 11 14 16 18 22 24 25 26 27 28 31 32 33 35 38 40 44 45 46 47 49 51 52 54 55 57 58 60 61 62 63 # 12413 is_subset c a 64 1 1 e b 64 1 1 e # 12414 is_subset c a 64 1 1 e b 64 1 1 e # 12415 is_subset c a 64 1 1 e b 64 1 1 e # 12416 is_subset c a 64 1 1 e b 64 1 1 f # 12417 is_subset c a 64 1 1 e b 64 1 1 e # 12418 is_subset c a 64 1 1 e b 64 1 1 0 2 4 5 6 7 8 9 11 12 16 17 18 19 20 21 22 24 27 30 32 33 34 35 41 44 45 46 47 49 50 52 53 54 59 60 61 63 # 12419 is_subset c a 64 1 1 f b 64 1 1 f # 12420 is_subset c a 64 1 1 f b 64 1 1 e # 12421 is_subset c a 64 1 1 f b 64 1 1 f # 12422 is_subset c a 64 1 1 f b 64 1 1 f # 12423 is_subset c a 64 1 1 f b 64 1 1 f # 12424 is_subset c a 64 1 1 f b 64 1 1 0 1 5 6 7 8 9 11 12 14 16 17 18 19 23 24 29 32 33 36 41 43 44 45 47 48 49 50 53 54 58 59 61 63 # 12425 is_subset c a 64 1 1 0 1 4 6 15 17 19 20 24 25 27 28 29 30 31 36 38 39 41 43 46 47 49 50 54 55 58 61 62 63 b 64 1 1 0 1 4 6 15 17 19 20 24 25 27 28 29 30 31 36 38 39 41 43 46 47 49 50 54 55 58 61 62 63 # 12426 is_subset c a 64 1 1 0 1 4 6 15 17 19 20 24 25 27 28 29 30 31 36 38 39 41 43 46 47 49 50 54 55 58 61 62 63 b 64 1 1 e # 12427 is_subset c a 64 1 1 3 5 6 7 8 10 12 18 19 20 21 22 23 25 28 31 34 35 37 38 41 42 43 47 48 49 51 52 54 55 56 57 59 61 62 63 b 64 1 1 3 5 6 7 8 10 12 18 19 20 21 22 23 25 28 31 34 35 37 38 41 42 43 47 48 49 51 52 54 55 56 57 59 61 62 63 # 12428 is_subset c a 64 1 1 3 5 6 7 8 10 12 18 19 20 21 22 23 25 28 31 34 35 37 38 41 42 43 47 48 49 51 52 54 55 56 57 59 61 62 63 b 64 1 1 f # 12429 is_subset c a 64 1 1 1 2 3 4 5 7 10 11 12 15 17 19 22 26 29 33 36 40 42 47 49 50 51 52 53 54 57 58 60 61 62 b 64 1 1 1 2 3 4 5 7 10 11 12 15 17 19 22 26 29 33 36 40 42 47 49 50 51 52 53 54 57 58 60 61 62 # 12430 is_subset c a 64 1 1 1 2 3 4 5 7 10 11 12 15 17 19 22 26 29 33 36 40 42 47 49 50 51 52 53 54 57 58 60 61 62 b 64 1 1 0 3 4 5 6 8 9 10 15 16 17 18 19 20 21 23 24 25 28 30 31 32 34 36 37 38 39 40 41 45 48 49 52 57 58 61 # 12431 is_subset c a 65 0 0 e b 65 0 0 e # 12432 is_subset c a 65 0 0 e b 65 0 0 e # 12433 is_subset c a 65 0 0 e b 65 0 0 e # 12434 is_subset c a 65 0 0 e b 65 0 0 f # 12435 is_subset c a 65 0 0 e b 65 0 0 e # 12436 is_subset c a 65 0 0 e b 65 0 0 0 2 3 4 5 6 7 8 10 11 15 19 20 21 24 26 30 32 35 39 40 42 43 44 46 47 48 50 51 56 58 60 61 # 12437 is_subset c a 65 0 0 f b 65 0 0 f # 12438 is_subset c a 65 0 0 f b 65 0 0 e # 12439 is_subset c a 65 0 0 f b 65 0 0 f # 12440 is_subset c a 65 0 0 f b 65 0 0 f # 12441 is_subset c a 65 0 0 f b 65 0 0 f # 12442 is_subset c a 65 0 0 f b 65 0 0 0 3 4 6 9 10 11 12 13 16 18 23 25 27 29 31 33 34 35 37 39 45 50 51 55 56 57 58 60 61 64 # 12443 is_subset c a 65 0 0 2 3 5 7 9 10 16 18 20 21 23 26 28 29 31 34 35 36 44 45 46 47 49 50 51 52 54 56 58 61 63 b 65 0 0 2 3 5 7 9 10 16 18 20 21 23 26 28 29 31 34 35 36 44 45 46 47 49 50 51 52 54 56 58 61 63 # 12444 is_subset c a 65 0 0 2 3 5 7 9 10 16 18 20 21 23 26 28 29 31 34 35 36 44 45 46 47 49 50 51 52 54 56 58 61 63 b 65 0 0 e # 12445 is_subset c a 65 0 0 3 4 8 9 11 12 13 15 16 20 21 22 26 28 29 30 33 37 38 41 44 45 46 47 48 51 55 56 59 61 64 b 65 0 0 3 4 8 9 11 12 13 15 16 20 21 22 26 28 29 30 33 37 38 41 44 45 46 47 48 51 55 56 59 61 64 # 12446 is_subset c a 65 0 0 3 4 8 9 11 12 13 15 16 20 21 22 26 28 29 30 33 37 38 41 44 45 46 47 48 51 55 56 59 61 64 b 65 0 0 f # 12447 is_subset c a 65 0 0 0 1 5 6 15 16 18 19 20 21 22 24 27 28 29 30 32 34 37 38 39 44 48 52 54 55 56 58 61 62 63 b 65 0 0 0 1 5 6 15 16 18 19 20 21 22 24 27 28 29 30 32 34 37 38 39 44 48 52 54 55 56 58 61 62 63 # 12448 is_subset c a 65 0 0 0 1 5 6 15 16 18 19 20 21 22 24 27 28 29 30 32 34 37 38 39 44 48 52 54 55 56 58 61 62 63 b 65 0 0 0 2 3 4 5 9 10 11 12 16 17 20 22 23 30 33 36 37 38 39 41 42 46 49 51 54 56 58 62 63 # 12449 is_subset c a 65 0 0 e b 65 0 0 e # 12450 is_subset c a 65 0 0 e b 65 0 1 e # 12451 is_subset c a 65 0 0 e b 65 0 0 e # 12452 is_subset c a 65 0 0 e b 65 0 1 f # 12453 is_subset c a 65 0 0 e b 65 0 0 e # 12454 is_subset c a 65 0 0 e b 65 0 1 2 5 6 7 8 11 12 15 16 21 25 26 27 28 29 34 35 38 39 40 41 42 43 46 49 50 51 52 62 63 64 # 12455 is_subset c a 65 0 0 f b 65 0 0 f # 12456 is_subset c a 65 0 0 f b 65 0 1 e # 12457 is_subset c a 65 0 0 f b 65 0 0 f # 12458 is_subset c a 65 0 0 f b 65 0 1 f # 12459 is_subset c a 65 0 0 f b 65 0 0 f # 12460 is_subset c a 65 0 0 f b 65 0 1 0 2 5 6 8 9 10 14 19 20 23 24 25 28 29 30 33 34 35 36 37 38 39 41 43 44 45 49 50 55 56 59 63 # 12461 is_subset c a 65 0 0 0 1 3 4 12 13 14 16 18 19 21 22 23 24 25 28 31 33 34 35 36 37 41 42 43 44 45 51 52 54 55 60 61 63 b 65 0 0 0 1 3 4 12 13 14 16 18 19 21 22 23 24 25 28 31 33 34 35 36 37 41 42 43 44 45 51 52 54 55 60 61 63 # 12462 is_subset c a 65 0 0 0 1 3 4 12 13 14 16 18 19 21 22 23 24 25 28 31 33 34 35 36 37 41 42 43 44 45 51 52 54 55 60 61 63 b 65 0 1 e # 12463 is_subset c a 65 0 0 0 1 3 5 8 11 12 13 15 17 18 19 20 21 22 23 26 27 29 32 33 36 37 38 39 40 41 42 43 44 46 47 49 50 51 52 53 54 55 56 57 58 62 b 65 0 0 0 1 3 5 8 11 12 13 15 17 18 19 20 21 22 23 26 27 29 32 33 36 37 38 39 40 41 42 43 44 46 47 49 50 51 52 53 54 55 56 57 58 62 # 12464 is_subset c a 65 0 0 0 1 3 5 8 11 12 13 15 17 18 19 20 21 22 23 26 27 29 32 33 36 37 38 39 40 41 42 43 44 46 47 49 50 51 52 53 54 55 56 57 58 62 b 65 0 1 f # 12465 is_subset c a 65 0 0 9 10 11 12 13 14 16 17 20 23 25 27 28 32 33 34 37 39 40 43 50 52 55 58 60 61 62 63 64 b 65 0 0 9 10 11 12 13 14 16 17 20 23 25 27 28 32 33 34 37 39 40 43 50 52 55 58 60 61 62 63 64 # 12466 is_subset c a 65 0 0 9 10 11 12 13 14 16 17 20 23 25 27 28 32 33 34 37 39 40 43 50 52 55 58 60 61 62 63 64 b 65 0 1 2 4 5 10 11 13 15 16 17 18 19 20 21 31 32 36 37 38 40 42 48 51 52 56 57 58 62 # 12467 is_subset c a 65 0 0 e b 65 0 0 e # 12468 is_subset c a 65 0 0 e b 65 1 0 e # 12469 is_subset c a 65 0 0 e b 65 0 0 e # 12470 is_subset c a 65 0 0 e b 65 1 0 f # 12471 is_subset c a 65 0 0 e b 65 0 0 e # 12472 is_subset c a 65 0 0 e b 65 1 0 1 3 5 6 7 8 11 12 13 14 16 17 21 24 25 26 27 28 31 32 33 34 36 37 41 44 46 47 49 51 52 53 60 61 63 64 # 12473 is_subset c a 65 0 0 f b 65 0 0 f # 12474 is_subset c a 65 0 0 f b 65 1 0 e # 12475 is_subset c a 65 0 0 f b 65 0 0 f # 12476 is_subset c a 65 0 0 f b 65 1 0 f # 12477 is_subset c a 65 0 0 f b 65 0 0 f # 12478 is_subset c a 65 0 0 f b 65 1 0 2 4 6 7 8 12 14 15 17 18 22 23 24 25 27 30 34 36 38 40 42 43 44 46 52 57 60 61 62 # 12479 is_subset c a 65 0 0 0 1 4 5 6 9 10 11 15 16 17 18 19 20 23 25 26 28 30 32 34 35 36 37 38 41 43 45 46 47 49 50 52 56 57 58 59 61 b 65 0 0 0 1 4 5 6 9 10 11 15 16 17 18 19 20 23 25 26 28 30 32 34 35 36 37 38 41 43 45 46 47 49 50 52 56 57 58 59 61 # 12480 is_subset c a 65 0 0 0 1 4 5 6 9 10 11 15 16 17 18 19 20 23 25 26 28 30 32 34 35 36 37 38 41 43 45 46 47 49 50 52 56 57 58 59 61 b 65 1 0 e # 12481 is_subset c a 65 0 0 0 1 3 4 5 7 11 15 17 18 29 30 32 33 35 36 38 39 40 41 42 43 46 49 50 51 54 55 56 62 63 b 65 0 0 0 1 3 4 5 7 11 15 17 18 29 30 32 33 35 36 38 39 40 41 42 43 46 49 50 51 54 55 56 62 63 # 12482 is_subset c a 65 0 0 0 1 3 4 5 7 11 15 17 18 29 30 32 33 35 36 38 39 40 41 42 43 46 49 50 51 54 55 56 62 63 b 65 1 0 f # 12483 is_subset c a 65 0 0 0 1 2 5 8 10 14 17 18 19 20 21 25 30 33 34 35 36 39 41 43 46 48 49 51 53 54 55 59 60 61 64 b 65 0 0 0 1 2 5 8 10 14 17 18 19 20 21 25 30 33 34 35 36 39 41 43 46 48 49 51 53 54 55 59 60 61 64 # 12484 is_subset c a 65 0 0 0 1 2 5 8 10 14 17 18 19 20 21 25 30 33 34 35 36 39 41 43 46 48 49 51 53 54 55 59 60 61 64 b 65 1 0 1 3 9 11 12 13 14 15 19 21 23 26 28 30 36 38 42 45 51 53 54 55 57 58 60 61 62 # 12485 is_subset c a 65 0 0 e b 65 0 0 e # 12486 is_subset c a 65 0 0 e b 65 1 1 e # 12487 is_subset c a 65 0 0 e b 65 0 0 e # 12488 is_subset c a 65 0 0 e b 65 1 1 f # 12489 is_subset c a 65 0 0 e b 65 0 0 e # 12490 is_subset c a 65 0 0 e b 65 1 1 1 3 7 9 10 12 16 18 19 20 21 23 24 25 26 27 28 29 32 34 36 38 40 41 42 43 53 55 56 57 58 59 60 61 63 # 12491 is_subset c a 65 0 0 f b 65 0 0 f # 12492 is_subset c a 65 0 0 f b 65 1 1 e # 12493 is_subset c a 65 0 0 f b 65 0 0 f # 12494 is_subset c a 65 0 0 f b 65 1 1 f # 12495 is_subset c a 65 0 0 f b 65 0 0 f # 12496 is_subset c a 65 0 0 f b 65 1 1 1 4 5 7 8 11 12 13 17 18 21 28 29 30 31 32 35 37 38 45 46 47 48 49 51 53 55 64 # 12497 is_subset c a 65 0 0 0 3 5 7 8 9 11 12 16 18 19 20 21 25 26 27 28 30 31 32 37 41 42 46 48 49 51 52 53 54 57 60 63 64 b 65 0 0 0 3 5 7 8 9 11 12 16 18 19 20 21 25 26 27 28 30 31 32 37 41 42 46 48 49 51 52 53 54 57 60 63 64 # 12498 is_subset c a 65 0 0 0 3 5 7 8 9 11 12 16 18 19 20 21 25 26 27 28 30 31 32 37 41 42 46 48 49 51 52 53 54 57 60 63 64 b 65 1 1 e # 12499 is_subset c a 65 0 0 0 1 2 6 7 11 12 14 15 16 21 22 24 28 29 30 32 33 34 37 44 45 46 47 51 56 62 b 65 0 0 0 1 2 6 7 11 12 14 15 16 21 22 24 28 29 30 32 33 34 37 44 45 46 47 51 56 62 # 12500 is_subset c a 65 0 0 0 1 2 6 7 11 12 14 15 16 21 22 24 28 29 30 32 33 34 37 44 45 46 47 51 56 62 b 65 1 1 f # 12501 is_subset c a 65 0 0 0 1 2 3 4 14 15 17 19 23 24 25 28 29 30 31 33 34 36 38 40 42 44 45 48 50 52 54 55 60 b 65 0 0 0 1 2 3 4 14 15 17 19 23 24 25 28 29 30 31 33 34 36 38 40 42 44 45 48 50 52 54 55 60 # 12502 is_subset c a 65 0 0 0 1 2 3 4 14 15 17 19 23 24 25 28 29 30 31 33 34 36 38 40 42 44 45 48 50 52 54 55 60 b 65 1 1 1 3 4 5 8 9 11 12 14 17 19 20 24 25 29 30 31 32 33 34 35 36 40 43 44 45 48 49 51 53 56 58 61 63 64 # 12503 is_subset c a 65 0 1 e b 65 0 1 e # 12504 is_subset c a 65 0 1 e b 65 0 0 e # 12505 is_subset c a 65 0 1 e b 65 0 1 e # 12506 is_subset c a 65 0 1 e b 65 0 0 f # 12507 is_subset c a 65 0 1 e b 65 0 1 e # 12508 is_subset c a 65 0 1 e b 65 0 0 1 4 5 12 13 15 21 23 24 25 27 31 32 33 35 36 37 41 44 45 48 49 50 52 55 57 59 60 61 62 63 64 # 12509 is_subset c a 65 0 1 f b 65 0 1 f # 12510 is_subset c a 65 0 1 f b 65 0 0 e # 12511 is_subset c a 65 0 1 f b 65 0 1 f # 12512 is_subset c a 65 0 1 f b 65 0 0 f # 12513 is_subset c a 65 0 1 f b 65 0 1 f # 12514 is_subset c a 65 0 1 f b 65 0 0 0 1 2 3 6 8 13 16 17 18 21 22 25 28 31 35 40 41 42 44 47 51 54 58 59 61 62 63 # 12515 is_subset c a 65 0 1 2 3 4 5 8 9 11 13 15 17 18 20 22 25 26 31 32 35 37 39 40 42 43 46 47 49 53 56 58 60 62 63 b 65 0 1 2 3 4 5 8 9 11 13 15 17 18 20 22 25 26 31 32 35 37 39 40 42 43 46 47 49 53 56 58 60 62 63 # 12516 is_subset c a 65 0 1 2 3 4 5 8 9 11 13 15 17 18 20 22 25 26 31 32 35 37 39 40 42 43 46 47 49 53 56 58 60 62 63 b 65 0 0 e # 12517 is_subset c a 65 0 1 2 4 5 8 10 11 12 15 16 18 19 20 25 26 28 29 30 33 34 35 37 41 46 48 49 50 51 55 59 60 64 b 65 0 1 2 4 5 8 10 11 12 15 16 18 19 20 25 26 28 29 30 33 34 35 37 41 46 48 49 50 51 55 59 60 64 # 12518 is_subset c a 65 0 1 2 4 5 8 10 11 12 15 16 18 19 20 25 26 28 29 30 33 34 35 37 41 46 48 49 50 51 55 59 60 64 b 65 0 0 f # 12519 is_subset c a 65 0 1 0 3 5 8 10 18 19 20 21 22 23 24 25 26 33 35 40 42 44 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 64 b 65 0 1 0 3 5 8 10 18 19 20 21 22 23 24 25 26 33 35 40 42 44 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 64 # 12520 is_subset c a 65 0 1 0 3 5 8 10 18 19 20 21 22 23 24 25 26 33 35 40 42 44 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 64 b 65 0 0 3 4 5 6 8 16 19 20 21 23 24 26 28 32 33 35 36 39 40 44 45 46 47 48 49 51 52 53 54 55 60 # 12521 is_subset c a 65 0 1 e b 65 0 1 e # 12522 is_subset c a 65 0 1 e b 65 0 1 e # 12523 is_subset c a 65 0 1 e b 65 0 1 e # 12524 is_subset c a 65 0 1 e b 65 0 1 f # 12525 is_subset c a 65 0 1 e b 65 0 1 e # 12526 is_subset c a 65 0 1 e b 65 0 1 0 2 3 5 6 7 8 9 10 11 12 14 15 16 17 18 19 21 23 24 25 26 30 31 33 34 35 37 38 40 41 45 48 49 52 53 55 57 59 61 62 63 64 # 12527 is_subset c a 65 0 1 f b 65 0 1 f # 12528 is_subset c a 65 0 1 f b 65 0 1 e # 12529 is_subset c a 65 0 1 f b 65 0 1 f # 12530 is_subset c a 65 0 1 f b 65 0 1 f # 12531 is_subset c a 65 0 1 f b 65 0 1 f # 12532 is_subset c a 65 0 1 f b 65 0 1 0 1 4 5 8 9 10 11 12 13 14 15 17 18 19 24 27 28 31 32 33 35 41 44 49 53 54 56 58 59 62 # 12533 is_subset c a 65 0 1 0 2 6 8 9 11 13 16 17 18 19 21 22 23 24 25 29 30 32 34 36 37 38 40 43 45 49 50 51 52 53 54 55 57 59 60 63 64 b 65 0 1 0 2 6 8 9 11 13 16 17 18 19 21 22 23 24 25 29 30 32 34 36 37 38 40 43 45 49 50 51 52 53 54 55 57 59 60 63 64 # 12534 is_subset c a 65 0 1 0 2 6 8 9 11 13 16 17 18 19 21 22 23 24 25 29 30 32 34 36 37 38 40 43 45 49 50 51 52 53 54 55 57 59 60 63 64 b 65 0 1 e # 12535 is_subset c a 65 0 1 5 6 7 9 10 14 17 19 24 27 28 29 30 34 37 39 40 42 43 45 47 50 51 52 56 57 59 60 63 b 65 0 1 5 6 7 9 10 14 17 19 24 27 28 29 30 34 37 39 40 42 43 45 47 50 51 52 56 57 59 60 63 # 12536 is_subset c a 65 0 1 5 6 7 9 10 14 17 19 24 27 28 29 30 34 37 39 40 42 43 45 47 50 51 52 56 57 59 60 63 b 65 0 1 f # 12537 is_subset c a 65 0 1 0 2 3 4 7 12 14 16 17 18 22 23 24 25 26 28 29 30 31 34 35 36 38 40 42 44 46 47 49 50 53 56 59 60 62 64 b 65 0 1 0 2 3 4 7 12 14 16 17 18 22 23 24 25 26 28 29 30 31 34 35 36 38 40 42 44 46 47 49 50 53 56 59 60 62 64 # 12538 is_subset c a 65 0 1 0 2 3 4 7 12 14 16 17 18 22 23 24 25 26 28 29 30 31 34 35 36 38 40 42 44 46 47 49 50 53 56 59 60 62 64 b 65 0 1 2 3 7 8 9 12 14 18 20 21 22 23 25 26 27 31 34 35 41 42 43 45 48 50 51 53 54 55 57 59 60 61 62 # 12539 is_subset c a 65 0 1 e b 65 0 1 e # 12540 is_subset c a 65 0 1 e b 65 1 0 e # 12541 is_subset c a 65 0 1 e b 65 0 1 e # 12542 is_subset c a 65 0 1 e b 65 1 0 f # 12543 is_subset c a 65 0 1 e b 65 0 1 e # 12544 is_subset c a 65 0 1 e b 65 1 0 0 2 3 4 7 10 11 12 14 15 17 19 21 29 30 32 35 36 39 40 42 44 45 48 49 52 53 57 58 59 62 64 # 12545 is_subset c a 65 0 1 f b 65 0 1 f # 12546 is_subset c a 65 0 1 f b 65 1 0 e # 12547 is_subset c a 65 0 1 f b 65 0 1 f # 12548 is_subset c a 65 0 1 f b 65 1 0 f # 12549 is_subset c a 65 0 1 f b 65 0 1 f # 12550 is_subset c a 65 0 1 f b 65 1 0 2 3 4 5 8 9 11 16 17 18 22 23 24 29 31 35 36 37 39 40 44 45 46 47 48 49 51 52 53 54 55 59 61 62 63 # 12551 is_subset c a 65 0 1 1 4 5 9 22 23 24 25 27 28 29 30 31 32 35 39 41 43 44 46 48 50 51 53 54 56 57 58 59 60 61 62 63 b 65 0 1 1 4 5 9 22 23 24 25 27 28 29 30 31 32 35 39 41 43 44 46 48 50 51 53 54 56 57 58 59 60 61 62 63 # 12552 is_subset c a 65 0 1 1 4 5 9 22 23 24 25 27 28 29 30 31 32 35 39 41 43 44 46 48 50 51 53 54 56 57 58 59 60 61 62 63 b 65 1 0 e # 12553 is_subset c a 65 0 1 0 4 6 11 13 14 15 16 17 19 22 25 30 32 34 37 38 39 42 43 45 49 51 55 57 59 61 63 b 65 0 1 0 4 6 11 13 14 15 16 17 19 22 25 30 32 34 37 38 39 42 43 45 49 51 55 57 59 61 63 # 12554 is_subset c a 65 0 1 0 4 6 11 13 14 15 16 17 19 22 25 30 32 34 37 38 39 42 43 45 49 51 55 57 59 61 63 b 65 1 0 f # 12555 is_subset c a 65 0 1 2 3 5 7 8 9 13 14 17 19 25 26 29 30 35 37 38 39 40 47 49 50 51 53 55 56 60 61 62 b 65 0 1 2 3 5 7 8 9 13 14 17 19 25 26 29 30 35 37 38 39 40 47 49 50 51 53 55 56 60 61 62 # 12556 is_subset c a 65 0 1 2 3 5 7 8 9 13 14 17 19 25 26 29 30 35 37 38 39 40 47 49 50 51 53 55 56 60 61 62 b 65 1 0 1 2 3 4 5 6 7 9 11 13 16 18 19 20 22 23 24 25 26 27 28 31 33 34 35 36 37 38 39 40 42 45 46 47 50 51 52 54 55 57 61 64 # 12557 is_subset c a 65 0 1 e b 65 0 1 e # 12558 is_subset c a 65 0 1 e b 65 1 1 e # 12559 is_subset c a 65 0 1 e b 65 0 1 e # 12560 is_subset c a 65 0 1 e b 65 1 1 f # 12561 is_subset c a 65 0 1 e b 65 0 1 e # 12562 is_subset c a 65 0 1 e b 65 1 1 3 6 7 9 10 12 13 16 21 22 25 26 30 32 36 38 41 43 44 45 47 50 51 53 55 56 59 64 # 12563 is_subset c a 65 0 1 f b 65 0 1 f # 12564 is_subset c a 65 0 1 f b 65 1 1 e # 12565 is_subset c a 65 0 1 f b 65 0 1 f # 12566 is_subset c a 65 0 1 f b 65 1 1 f # 12567 is_subset c a 65 0 1 f b 65 0 1 f # 12568 is_subset c a 65 0 1 f b 65 1 1 0 2 5 12 14 17 18 19 21 22 23 24 25 30 32 33 36 37 38 42 44 45 47 48 50 52 53 54 55 59 60 62 63 64 # 12569 is_subset c a 65 0 1 2 5 6 7 8 12 15 18 21 22 23 31 35 39 40 41 45 47 51 53 55 57 59 61 62 63 64 b 65 0 1 2 5 6 7 8 12 15 18 21 22 23 31 35 39 40 41 45 47 51 53 55 57 59 61 62 63 64 # 12570 is_subset c a 65 0 1 2 5 6 7 8 12 15 18 21 22 23 31 35 39 40 41 45 47 51 53 55 57 59 61 62 63 64 b 65 1 1 e # 12571 is_subset c a 65 0 1 3 4 6 7 8 12 14 16 18 19 20 23 24 29 31 33 34 36 39 40 41 45 46 50 52 55 57 59 60 61 b 65 0 1 3 4 6 7 8 12 14 16 18 19 20 23 24 29 31 33 34 36 39 40 41 45 46 50 52 55 57 59 60 61 # 12572 is_subset c a 65 0 1 3 4 6 7 8 12 14 16 18 19 20 23 24 29 31 33 34 36 39 40 41 45 46 50 52 55 57 59 60 61 b 65 1 1 f # 12573 is_subset c a 65 0 1 1 3 9 10 12 13 14 16 20 21 22 23 27 28 29 33 34 35 38 39 41 44 47 48 49 50 51 52 53 55 57 58 60 b 65 0 1 1 3 9 10 12 13 14 16 20 21 22 23 27 28 29 33 34 35 38 39 41 44 47 48 49 50 51 52 53 55 57 58 60 # 12574 is_subset c a 65 0 1 1 3 9 10 12 13 14 16 20 21 22 23 27 28 29 33 34 35 38 39 41 44 47 48 49 50 51 52 53 55 57 58 60 b 65 1 1 1 2 3 4 7 8 9 11 14 15 18 19 20 21 23 24 26 28 29 30 32 35 36 37 38 39 40 42 43 46 47 48 49 50 51 53 54 57 60 62 63 64 # 12575 is_subset c a 65 1 0 e b 65 1 0 e # 12576 is_subset c a 65 1 0 e b 65 0 0 e # 12577 is_subset c a 65 1 0 e b 65 1 0 e # 12578 is_subset c a 65 1 0 e b 65 0 0 f # 12579 is_subset c a 65 1 0 e b 65 1 0 e # 12580 is_subset c a 65 1 0 e b 65 0 0 1 2 7 11 13 14 15 16 17 19 20 21 25 28 29 32 33 34 37 38 39 47 48 49 50 51 52 53 55 56 61 62 64 # 12581 is_subset c a 65 1 0 f b 65 1 0 f # 12582 is_subset c a 65 1 0 f b 65 0 0 e # 12583 is_subset c a 65 1 0 f b 65 1 0 f # 12584 is_subset c a 65 1 0 f b 65 0 0 f # 12585 is_subset c a 65 1 0 f b 65 1 0 f # 12586 is_subset c a 65 1 0 f b 65 0 0 5 6 7 10 11 12 13 14 15 16 19 20 24 25 26 27 28 29 33 34 35 36 38 40 41 42 44 45 49 51 53 56 57 58 60 62 # 12587 is_subset c a 65 1 0 2 3 6 7 10 11 21 22 24 29 31 34 35 36 38 39 40 42 44 49 51 52 56 57 58 60 62 64 b 65 1 0 2 3 6 7 10 11 21 22 24 29 31 34 35 36 38 39 40 42 44 49 51 52 56 57 58 60 62 64 # 12588 is_subset c a 65 1 0 2 3 6 7 10 11 21 22 24 29 31 34 35 36 38 39 40 42 44 49 51 52 56 57 58 60 62 64 b 65 0 0 e # 12589 is_subset c a 65 1 0 0 4 6 11 12 15 16 20 21 23 24 25 26 27 28 30 34 36 37 38 40 42 43 44 47 49 52 53 54 55 57 58 60 62 64 b 65 1 0 0 4 6 11 12 15 16 20 21 23 24 25 26 27 28 30 34 36 37 38 40 42 43 44 47 49 52 53 54 55 57 58 60 62 64 # 12590 is_subset c a 65 1 0 0 4 6 11 12 15 16 20 21 23 24 25 26 27 28 30 34 36 37 38 40 42 43 44 47 49 52 53 54 55 57 58 60 62 64 b 65 0 0 f # 12591 is_subset c a 65 1 0 1 4 5 8 9 10 11 13 16 17 19 20 24 29 31 32 33 34 35 43 44 45 47 49 50 52 53 54 55 59 61 b 65 1 0 1 4 5 8 9 10 11 13 16 17 19 20 24 29 31 32 33 34 35 43 44 45 47 49 50 52 53 54 55 59 61 # 12592 is_subset c a 65 1 0 1 4 5 8 9 10 11 13 16 17 19 20 24 29 31 32 33 34 35 43 44 45 47 49 50 52 53 54 55 59 61 b 65 0 0 2 3 6 7 9 10 12 13 14 15 17 18 20 21 22 23 25 27 31 32 36 38 41 46 47 49 51 54 55 58 60 64 # 12593 is_subset c a 65 1 0 e b 65 1 0 e # 12594 is_subset c a 65 1 0 e b 65 0 1 e # 12595 is_subset c a 65 1 0 e b 65 1 0 e # 12596 is_subset c a 65 1 0 e b 65 0 1 f # 12597 is_subset c a 65 1 0 e b 65 1 0 e # 12598 is_subset c a 65 1 0 e b 65 0 1 0 1 4 5 9 10 12 13 14 17 18 19 20 21 23 25 26 27 28 31 32 33 34 35 36 39 43 47 48 50 51 53 54 55 56 59 60 61 63 64 # 12599 is_subset c a 65 1 0 f b 65 1 0 f # 12600 is_subset c a 65 1 0 f b 65 0 1 e # 12601 is_subset c a 65 1 0 f b 65 1 0 f # 12602 is_subset c a 65 1 0 f b 65 0 1 f # 12603 is_subset c a 65 1 0 f b 65 1 0 f # 12604 is_subset c a 65 1 0 f b 65 0 1 2 3 4 5 7 12 13 16 19 20 24 27 28 29 30 40 42 46 48 50 51 56 58 61 62 63 # 12605 is_subset c a 65 1 0 0 5 7 8 9 13 15 16 17 22 23 33 34 35 36 37 38 39 40 45 46 47 48 51 52 54 56 57 59 61 63 64 b 65 1 0 0 5 7 8 9 13 15 16 17 22 23 33 34 35 36 37 38 39 40 45 46 47 48 51 52 54 56 57 59 61 63 64 # 12606 is_subset c a 65 1 0 0 5 7 8 9 13 15 16 17 22 23 33 34 35 36 37 38 39 40 45 46 47 48 51 52 54 56 57 59 61 63 64 b 65 0 1 e # 12607 is_subset c a 65 1 0 0 1 2 3 4 5 6 9 12 14 16 17 18 19 20 22 23 24 25 26 27 28 29 30 31 33 34 36 37 40 41 43 46 49 53 54 55 56 57 58 59 60 62 b 65 1 0 0 1 2 3 4 5 6 9 12 14 16 17 18 19 20 22 23 24 25 26 27 28 29 30 31 33 34 36 37 40 41 43 46 49 53 54 55 56 57 58 59 60 62 # 12608 is_subset c a 65 1 0 0 1 2 3 4 5 6 9 12 14 16 17 18 19 20 22 23 24 25 26 27 28 29 30 31 33 34 36 37 40 41 43 46 49 53 54 55 56 57 58 59 60 62 b 65 0 1 f # 12609 is_subset c a 65 1 0 0 2 4 7 8 9 12 13 14 15 16 17 19 20 22 23 24 26 29 30 31 33 36 37 39 40 41 42 43 44 45 46 47 48 49 50 51 54 56 58 63 b 65 1 0 0 2 4 7 8 9 12 13 14 15 16 17 19 20 22 23 24 26 29 30 31 33 36 37 39 40 41 42 43 44 45 46 47 48 49 50 51 54 56 58 63 # 12610 is_subset c a 65 1 0 0 2 4 7 8 9 12 13 14 15 16 17 19 20 22 23 24 26 29 30 31 33 36 37 39 40 41 42 43 44 45 46 47 48 49 50 51 54 56 58 63 b 65 0 1 0 4 5 7 8 9 10 11 12 15 18 19 20 22 24 25 26 29 30 31 33 36 37 39 40 42 44 47 50 54 57 58 59 60 61 62 64 # 12611 is_subset c a 65 1 0 e b 65 1 0 e # 12612 is_subset c a 65 1 0 e b 65 1 0 e # 12613 is_subset c a 65 1 0 e b 65 1 0 e # 12614 is_subset c a 65 1 0 e b 65 1 0 f # 12615 is_subset c a 65 1 0 e b 65 1 0 e # 12616 is_subset c a 65 1 0 e b 65 1 0 1 2 3 5 6 7 11 15 17 19 20 21 23 24 25 26 28 31 33 34 35 36 37 40 41 42 47 48 51 53 55 56 61 63 64 # 12617 is_subset c a 65 1 0 f b 65 1 0 f # 12618 is_subset c a 65 1 0 f b 65 1 0 e # 12619 is_subset c a 65 1 0 f b 65 1 0 f # 12620 is_subset c a 65 1 0 f b 65 1 0 f # 12621 is_subset c a 65 1 0 f b 65 1 0 f # 12622 is_subset c a 65 1 0 f b 65 1 0 4 5 7 8 9 11 12 14 16 17 18 21 25 26 27 29 30 31 34 36 39 40 41 42 43 44 45 47 51 52 60 61 # 12623 is_subset c a 65 1 0 4 5 8 12 14 17 19 20 24 25 27 28 30 32 34 35 39 40 41 43 44 46 52 53 57 62 b 65 1 0 4 5 8 12 14 17 19 20 24 25 27 28 30 32 34 35 39 40 41 43 44 46 52 53 57 62 # 12624 is_subset c a 65 1 0 4 5 8 12 14 17 19 20 24 25 27 28 30 32 34 35 39 40 41 43 44 46 52 53 57 62 b 65 1 0 e # 12625 is_subset c a 65 1 0 1 2 3 5 7 10 11 14 16 19 20 21 24 25 26 29 30 31 32 34 43 44 47 53 54 59 62 64 b 65 1 0 1 2 3 5 7 10 11 14 16 19 20 21 24 25 26 29 30 31 32 34 43 44 47 53 54 59 62 64 # 12626 is_subset c a 65 1 0 1 2 3 5 7 10 11 14 16 19 20 21 24 25 26 29 30 31 32 34 43 44 47 53 54 59 62 64 b 65 1 0 f # 12627 is_subset c a 65 1 0 0 1 2 3 4 8 10 11 13 15 17 19 23 24 29 30 32 33 35 37 38 40 41 44 45 47 49 50 51 54 56 62 b 65 1 0 0 1 2 3 4 8 10 11 13 15 17 19 23 24 29 30 32 33 35 37 38 40 41 44 45 47 49 50 51 54 56 62 # 12628 is_subset c a 65 1 0 0 1 2 3 4 8 10 11 13 15 17 19 23 24 29 30 32 33 35 37 38 40 41 44 45 47 49 50 51 54 56 62 b 65 1 0 0 1 2 3 4 6 7 10 12 13 14 16 17 18 20 21 25 26 27 29 32 35 36 37 38 41 43 48 51 53 54 55 57 58 59 60 63 64 # 12629 is_subset c a 65 1 0 e b 65 1 0 e # 12630 is_subset c a 65 1 0 e b 65 1 1 e # 12631 is_subset c a 65 1 0 e b 65 1 0 e # 12632 is_subset c a 65 1 0 e b 65 1 1 f # 12633 is_subset c a 65 1 0 e b 65 1 0 e # 12634 is_subset c a 65 1 0 e b 65 1 1 0 1 3 4 5 6 9 10 15 16 18 21 22 23 25 26 27 33 34 35 36 37 39 40 44 45 50 52 53 56 60 61 62 63 64 # 12635 is_subset c a 65 1 0 f b 65 1 0 f # 12636 is_subset c a 65 1 0 f b 65 1 1 e # 12637 is_subset c a 65 1 0 f b 65 1 0 f # 12638 is_subset c a 65 1 0 f b 65 1 1 f # 12639 is_subset c a 65 1 0 f b 65 1 0 f # 12640 is_subset c a 65 1 0 f b 65 1 1 0 1 3 6 7 8 10 11 15 17 18 25 30 34 35 36 37 38 39 40 42 44 47 48 49 54 55 57 58 59 61 62 # 12641 is_subset c a 65 1 0 0 3 4 6 11 14 17 18 19 20 23 25 26 28 30 31 32 34 35 36 40 44 45 46 48 51 52 58 60 61 63 b 65 1 0 0 3 4 6 11 14 17 18 19 20 23 25 26 28 30 31 32 34 35 36 40 44 45 46 48 51 52 58 60 61 63 # 12642 is_subset c a 65 1 0 0 3 4 6 11 14 17 18 19 20 23 25 26 28 30 31 32 34 35 36 40 44 45 46 48 51 52 58 60 61 63 b 65 1 1 e # 12643 is_subset c a 65 1 0 3 4 5 9 10 15 17 18 19 23 25 26 29 30 31 35 37 39 40 42 47 50 51 52 54 57 58 59 61 62 63 b 65 1 0 3 4 5 9 10 15 17 18 19 23 25 26 29 30 31 35 37 39 40 42 47 50 51 52 54 57 58 59 61 62 63 # 12644 is_subset c a 65 1 0 3 4 5 9 10 15 17 18 19 23 25 26 29 30 31 35 37 39 40 42 47 50 51 52 54 57 58 59 61 62 63 b 65 1 1 f # 12645 is_subset c a 65 1 0 1 2 4 6 10 11 13 14 15 16 17 21 22 25 26 31 34 36 37 42 43 44 45 47 48 49 50 52 53 59 60 61 62 63 b 65 1 0 1 2 4 6 10 11 13 14 15 16 17 21 22 25 26 31 34 36 37 42 43 44 45 47 48 49 50 52 53 59 60 61 62 63 # 12646 is_subset c a 65 1 0 1 2 4 6 10 11 13 14 15 16 17 21 22 25 26 31 34 36 37 42 43 44 45 47 48 49 50 52 53 59 60 61 62 63 b 65 1 1 0 2 3 4 6 7 9 10 13 14 16 18 20 22 23 24 25 26 27 28 29 30 32 33 35 38 40 41 42 45 48 50 51 52 53 54 56 62 # 12647 is_subset c a 65 1 1 e b 65 1 1 e # 12648 is_subset c a 65 1 1 e b 65 0 0 e # 12649 is_subset c a 65 1 1 e b 65 1 1 e # 12650 is_subset c a 65 1 1 e b 65 0 0 f # 12651 is_subset c a 65 1 1 e b 65 1 1 e # 12652 is_subset c a 65 1 1 e b 65 0 0 1 4 5 8 9 10 15 16 19 20 21 25 26 28 29 30 32 34 35 39 40 45 46 53 54 55 56 59 61 62 # 12653 is_subset c a 65 1 1 f b 65 1 1 f # 12654 is_subset c a 65 1 1 f b 65 0 0 e # 12655 is_subset c a 65 1 1 f b 65 1 1 f # 12656 is_subset c a 65 1 1 f b 65 0 0 f # 12657 is_subset c a 65 1 1 f b 65 1 1 f # 12658 is_subset c a 65 1 1 f b 65 0 0 0 3 6 7 8 11 13 15 16 19 21 23 29 31 32 33 34 37 45 50 55 56 58 59 62 # 12659 is_subset c a 65 1 1 0 1 2 3 4 8 9 10 11 12 13 14 16 18 20 21 24 29 30 33 38 41 42 44 45 46 47 49 56 57 59 60 64 b 65 1 1 0 1 2 3 4 8 9 10 11 12 13 14 16 18 20 21 24 29 30 33 38 41 42 44 45 46 47 49 56 57 59 60 64 # 12660 is_subset c a 65 1 1 0 1 2 3 4 8 9 10 11 12 13 14 16 18 20 21 24 29 30 33 38 41 42 44 45 46 47 49 56 57 59 60 64 b 65 0 0 e # 12661 is_subset c a 65 1 1 1 3 4 13 14 15 19 20 21 23 28 29 33 38 39 40 41 44 49 50 54 55 56 59 61 62 63 b 65 1 1 1 3 4 13 14 15 19 20 21 23 28 29 33 38 39 40 41 44 49 50 54 55 56 59 61 62 63 # 12662 is_subset c a 65 1 1 1 3 4 13 14 15 19 20 21 23 28 29 33 38 39 40 41 44 49 50 54 55 56 59 61 62 63 b 65 0 0 f # 12663 is_subset c a 65 1 1 1 2 3 4 6 7 8 9 10 11 13 15 16 17 20 30 35 36 37 38 39 40 42 48 49 50 51 52 54 56 58 59 60 63 64 b 65 1 1 1 2 3 4 6 7 8 9 10 11 13 15 16 17 20 30 35 36 37 38 39 40 42 48 49 50 51 52 54 56 58 59 60 63 64 # 12664 is_subset c a 65 1 1 1 2 3 4 6 7 8 9 10 11 13 15 16 17 20 30 35 36 37 38 39 40 42 48 49 50 51 52 54 56 58 59 60 63 64 b 65 0 0 0 1 2 3 4 5 6 9 10 11 14 15 18 19 23 26 27 28 29 30 31 32 33 38 39 42 44 47 48 50 52 56 58 59 60 61 63 # 12665 is_subset c a 65 1 1 e b 65 1 1 e # 12666 is_subset c a 65 1 1 e b 65 0 1 e # 12667 is_subset c a 65 1 1 e b 65 1 1 e # 12668 is_subset c a 65 1 1 e b 65 0 1 f # 12669 is_subset c a 65 1 1 e b 65 1 1 e # 12670 is_subset c a 65 1 1 e b 65 0 1 0 2 4 5 8 9 15 16 17 18 22 25 27 37 38 40 45 50 51 52 53 55 57 58 59 60 62 64 # 12671 is_subset c a 65 1 1 f b 65 1 1 f # 12672 is_subset c a 65 1 1 f b 65 0 1 e # 12673 is_subset c a 65 1 1 f b 65 1 1 f # 12674 is_subset c a 65 1 1 f b 65 0 1 f # 12675 is_subset c a 65 1 1 f b 65 1 1 f # 12676 is_subset c a 65 1 1 f b 65 0 1 1 4 5 9 10 11 15 16 18 19 21 24 25 28 29 32 33 34 35 38 39 41 42 43 44 46 47 49 50 51 53 56 59 61 63 # 12677 is_subset c a 65 1 1 1 2 3 4 5 11 18 21 23 28 30 32 33 35 37 39 41 42 43 45 46 49 50 51 52 53 54 57 59 64 b 65 1 1 1 2 3 4 5 11 18 21 23 28 30 32 33 35 37 39 41 42 43 45 46 49 50 51 52 53 54 57 59 64 # 12678 is_subset c a 65 1 1 1 2 3 4 5 11 18 21 23 28 30 32 33 35 37 39 41 42 43 45 46 49 50 51 52 53 54 57 59 64 b 65 0 1 e # 12679 is_subset c a 65 1 1 1 7 13 15 18 20 21 22 23 25 27 28 30 34 35 36 38 39 41 43 44 45 46 48 50 51 54 55 58 60 62 64 b 65 1 1 1 7 13 15 18 20 21 22 23 25 27 28 30 34 35 36 38 39 41 43 44 45 46 48 50 51 54 55 58 60 62 64 # 12680 is_subset c a 65 1 1 1 7 13 15 18 20 21 22 23 25 27 28 30 34 35 36 38 39 41 43 44 45 46 48 50 51 54 55 58 60 62 64 b 65 0 1 f # 12681 is_subset c a 65 1 1 1 3 4 7 8 9 12 13 18 19 21 23 27 29 30 31 32 36 37 40 41 42 46 47 48 50 55 56 57 58 59 62 64 b 65 1 1 1 3 4 7 8 9 12 13 18 19 21 23 27 29 30 31 32 36 37 40 41 42 46 47 48 50 55 56 57 58 59 62 64 # 12682 is_subset c a 65 1 1 1 3 4 7 8 9 12 13 18 19 21 23 27 29 30 31 32 36 37 40 41 42 46 47 48 50 55 56 57 58 59 62 64 b 65 0 1 1 3 4 5 6 7 8 12 17 18 23 27 28 29 33 36 37 39 44 45 46 47 48 52 53 56 57 58 59 63 # 12683 is_subset c a 65 1 1 e b 65 1 1 e # 12684 is_subset c a 65 1 1 e b 65 1 0 e # 12685 is_subset c a 65 1 1 e b 65 1 1 e # 12686 is_subset c a 65 1 1 e b 65 1 0 f # 12687 is_subset c a 65 1 1 e b 65 1 1 e # 12688 is_subset c a 65 1 1 e b 65 1 0 4 6 8 9 10 11 12 13 14 26 27 29 31 33 35 43 47 48 50 52 59 60 61 62 64 # 12689 is_subset c a 65 1 1 f b 65 1 1 f # 12690 is_subset c a 65 1 1 f b 65 1 0 e # 12691 is_subset c a 65 1 1 f b 65 1 1 f # 12692 is_subset c a 65 1 1 f b 65 1 0 f # 12693 is_subset c a 65 1 1 f b 65 1 1 f # 12694 is_subset c a 65 1 1 f b 65 1 0 3 5 6 7 9 10 11 13 14 15 16 17 18 19 23 24 26 27 29 30 31 34 35 37 39 40 42 43 46 47 50 51 52 54 56 61 63 # 12695 is_subset c a 65 1 1 3 4 6 8 9 10 13 14 15 16 17 18 20 25 26 30 32 35 40 42 44 45 47 48 50 51 54 55 56 57 62 b 65 1 1 3 4 6 8 9 10 13 14 15 16 17 18 20 25 26 30 32 35 40 42 44 45 47 48 50 51 54 55 56 57 62 # 12696 is_subset c a 65 1 1 3 4 6 8 9 10 13 14 15 16 17 18 20 25 26 30 32 35 40 42 44 45 47 48 50 51 54 55 56 57 62 b 65 1 0 e # 12697 is_subset c a 65 1 1 2 4 7 9 10 13 15 16 19 22 23 24 27 28 32 34 36 42 43 47 48 49 50 51 52 53 54 55 58 60 64 b 65 1 1 2 4 7 9 10 13 15 16 19 22 23 24 27 28 32 34 36 42 43 47 48 49 50 51 52 53 54 55 58 60 64 # 12698 is_subset c a 65 1 1 2 4 7 9 10 13 15 16 19 22 23 24 27 28 32 34 36 42 43 47 48 49 50 51 52 53 54 55 58 60 64 b 65 1 0 f # 12699 is_subset c a 65 1 1 1 2 6 7 11 12 15 18 23 25 29 32 33 34 37 41 44 45 46 49 51 53 56 57 58 59 60 63 b 65 1 1 1 2 6 7 11 12 15 18 23 25 29 32 33 34 37 41 44 45 46 49 51 53 56 57 58 59 60 63 # 12700 is_subset c a 65 1 1 1 2 6 7 11 12 15 18 23 25 29 32 33 34 37 41 44 45 46 49 51 53 56 57 58 59 60 63 b 65 1 0 4 5 7 9 10 11 12 13 17 18 28 30 32 35 37 38 40 45 46 47 48 49 52 53 54 56 58 59 60 62 63 64 # 12701 is_subset c a 65 1 1 e b 65 1 1 e # 12702 is_subset c a 65 1 1 e b 65 1 1 e # 12703 is_subset c a 65 1 1 e b 65 1 1 e # 12704 is_subset c a 65 1 1 e b 65 1 1 f # 12705 is_subset c a 65 1 1 e b 65 1 1 e # 12706 is_subset c a 65 1 1 e b 65 1 1 1 2 7 8 9 11 12 16 17 19 21 22 23 27 30 31 32 33 37 41 42 46 51 52 53 57 59 62 64 # 12707 is_subset c a 65 1 1 f b 65 1 1 f # 12708 is_subset c a 65 1 1 f b 65 1 1 e # 12709 is_subset c a 65 1 1 f b 65 1 1 f # 12710 is_subset c a 65 1 1 f b 65 1 1 f # 12711 is_subset c a 65 1 1 f b 65 1 1 f # 12712 is_subset c a 65 1 1 f b 65 1 1 1 6 9 10 11 12 15 17 18 22 24 25 26 28 29 32 34 35 36 41 45 47 48 52 54 55 58 62 64 # 12713 is_subset c a 65 1 1 2 3 8 9 10 12 16 18 19 21 23 24 27 30 31 32 34 36 38 40 42 43 44 47 48 50 51 52 53 54 55 57 58 59 64 b 65 1 1 2 3 8 9 10 12 16 18 19 21 23 24 27 30 31 32 34 36 38 40 42 43 44 47 48 50 51 52 53 54 55 57 58 59 64 # 12714 is_subset c a 65 1 1 2 3 8 9 10 12 16 18 19 21 23 24 27 30 31 32 34 36 38 40 42 43 44 47 48 50 51 52 53 54 55 57 58 59 64 b 65 1 1 e # 12715 is_subset c a 65 1 1 2 7 10 12 15 18 20 21 22 23 27 28 29 30 33 34 36 40 41 42 45 47 50 53 55 57 58 61 63 b 65 1 1 2 7 10 12 15 18 20 21 22 23 27 28 29 30 33 34 36 40 41 42 45 47 50 53 55 57 58 61 63 # 12716 is_subset c a 65 1 1 2 7 10 12 15 18 20 21 22 23 27 28 29 30 33 34 36 40 41 42 45 47 50 53 55 57 58 61 63 b 65 1 1 f # 12717 is_subset c a 65 1 1 5 9 10 13 14 15 16 17 18 21 22 23 25 30 31 35 36 42 45 47 48 51 52 54 58 59 60 64 b 65 1 1 5 9 10 13 14 15 16 17 18 21 22 23 25 30 31 35 36 42 45 47 48 51 52 54 58 59 60 64 # 12718 is_subset c a 65 1 1 5 9 10 13 14 15 16 17 18 21 22 23 25 30 31 35 36 42 45 47 48 51 52 54 58 59 60 64 b 65 1 1 0 2 4 9 11 14 16 17 20 21 24 26 28 30 33 34 36 41 45 46 48 50 54 57 60 62 # 12719 is_subset c a 211 0 0 e b 211 0 0 e # 12720 is_subset c a 211 0 0 e b 211 0 0 e # 12721 is_subset c a 211 0 0 e b 211 0 0 e # 12722 is_subset c a 211 0 0 e b 211 0 0 f # 12723 is_subset c a 211 0 0 e b 211 0 0 e # 12724 is_subset c a 211 0 0 e b 211 0 0 1 3 6 8 10 11 15 16 17 20 21 22 25 27 28 29 30 32 34 35 36 37 41 43 45 46 48 54 59 70 71 73 74 75 76 77 78 82 84 85 86 87 90 91 95 99 100 101 104 107 108 112 114 117 119 120 122 124 125 129 130 132 134 135 136 139 141 142 144 145 146 150 152 153 154 156 158 161 162 163 165 166 167 168 170 172 173 174 175 179 180 184 186 187 188 189 190 193 195 197 198 202 205 207 210 # 12725 is_subset c a 211 0 0 f b 211 0 0 f # 12726 is_subset c a 211 0 0 f b 211 0 0 e # 12727 is_subset c a 211 0 0 f b 211 0 0 f # 12728 is_subset c a 211 0 0 f b 211 0 0 f # 12729 is_subset c a 211 0 0 f b 211 0 0 f # 12730 is_subset c a 211 0 0 f b 211 0 0 0 1 4 5 8 11 12 16 21 23 24 25 26 27 33 34 35 41 46 47 48 49 52 54 55 57 59 61 62 63 64 65 66 68 73 74 79 81 86 87 91 101 102 103 104 107 108 109 110 114 115 117 119 121 123 125 126 127 130 131 133 137 142 143 146 147 150 155 160 165 169 170 171 172 174 176 177 180 182 185 186 187 191 192 197 198 199 202 204 205 206 207 # 12731 is_subset c a 211 0 0 1 2 3 5 6 7 13 16 19 20 21 24 27 28 29 30 33 34 35 36 37 38 40 41 44 45 46 47 49 51 52 53 59 63 68 71 73 75 76 77 78 80 83 88 92 93 94 95 96 99 100 101 102 103 104 106 107 109 110 112 114 116 118 119 120 122 124 125 127 129 130 133 138 140 141 142 143 145 147 148 149 150 151 153 156 157 163 165 168 170 171 173 174 184 186 187 189 190 191 194 197 198 201 204 206 210 b 211 0 0 1 2 3 5 6 7 13 16 19 20 21 24 27 28 29 30 33 34 35 36 37 38 40 41 44 45 46 47 49 51 52 53 59 63 68 71 73 75 76 77 78 80 83 88 92 93 94 95 96 99 100 101 102 103 104 106 107 109 110 112 114 116 118 119 120 122 124 125 127 129 130 133 138 140 141 142 143 145 147 148 149 150 151 153 156 157 163 165 168 170 171 173 174 184 186 187 189 190 191 194 197 198 201 204 206 210 # 12732 is_subset c a 211 0 0 1 2 3 5 6 7 13 16 19 20 21 24 27 28 29 30 33 34 35 36 37 38 40 41 44 45 46 47 49 51 52 53 59 63 68 71 73 75 76 77 78 80 83 88 92 93 94 95 96 99 100 101 102 103 104 106 107 109 110 112 114 116 118 119 120 122 124 125 127 129 130 133 138 140 141 142 143 145 147 148 149 150 151 153 156 157 163 165 168 170 171 173 174 184 186 187 189 190 191 194 197 198 201 204 206 210 b 211 0 0 e # 12733 is_subset c a 211 0 0 0 1 2 4 6 8 9 13 15 18 21 22 23 25 26 27 35 36 39 41 43 44 48 50 52 59 60 61 63 65 66 70 71 76 77 78 82 84 85 86 89 91 92 93 94 95 97 99 103 105 108 110 112 115 119 121 122 123 125 126 127 128 130 135 137 140 141 143 145 147 149 150 155 158 159 160 161 164 173 174 175 176 178 181 182 183 186 188 189 193 194 197 198 202 203 205 206 209 b 211 0 0 0 1 2 4 6 8 9 13 15 18 21 22 23 25 26 27 35 36 39 41 43 44 48 50 52 59 60 61 63 65 66 70 71 76 77 78 82 84 85 86 89 91 92 93 94 95 97 99 103 105 108 110 112 115 119 121 122 123 125 126 127 128 130 135 137 140 141 143 145 147 149 150 155 158 159 160 161 164 173 174 175 176 178 181 182 183 186 188 189 193 194 197 198 202 203 205 206 209 # 12734 is_subset c a 211 0 0 0 1 2 4 6 8 9 13 15 18 21 22 23 25 26 27 35 36 39 41 43 44 48 50 52 59 60 61 63 65 66 70 71 76 77 78 82 84 85 86 89 91 92 93 94 95 97 99 103 105 108 110 112 115 119 121 122 123 125 126 127 128 130 135 137 140 141 143 145 147 149 150 155 158 159 160 161 164 173 174 175 176 178 181 182 183 186 188 189 193 194 197 198 202 203 205 206 209 b 211 0 0 f # 12735 is_subset c a 211 0 0 1 4 6 9 10 11 13 15 16 20 21 23 24 25 26 29 30 31 32 33 34 35 37 39 40 43 44 45 46 47 52 53 55 56 59 61 62 64 65 66 68 73 76 81 82 84 88 89 92 95 96 99 100 105 106 107 108 113 114 115 119 121 123 125 126 129 130 131 135 136 137 138 139 141 144 148 149 152 157 160 164 165 167 168 169 170 171 172 175 176 177 179 180 182 183 184 189 190 194 195 196 197 198 199 200 202 203 204 206 b 211 0 0 1 4 6 9 10 11 13 15 16 20 21 23 24 25 26 29 30 31 32 33 34 35 37 39 40 43 44 45 46 47 52 53 55 56 59 61 62 64 65 66 68 73 76 81 82 84 88 89 92 95 96 99 100 105 106 107 108 113 114 115 119 121 123 125 126 129 130 131 135 136 137 138 139 141 144 148 149 152 157 160 164 165 167 168 169 170 171 172 175 176 177 179 180 182 183 184 189 190 194 195 196 197 198 199 200 202 203 204 206 # 12736 is_subset c a 211 0 0 1 4 6 9 10 11 13 15 16 20 21 23 24 25 26 29 30 31 32 33 34 35 37 39 40 43 44 45 46 47 52 53 55 56 59 61 62 64 65 66 68 73 76 81 82 84 88 89 92 95 96 99 100 105 106 107 108 113 114 115 119 121 123 125 126 129 130 131 135 136 137 138 139 141 144 148 149 152 157 160 164 165 167 168 169 170 171 172 175 176 177 179 180 182 183 184 189 190 194 195 196 197 198 199 200 202 203 204 206 b 211 0 0 1 4 7 8 10 11 13 14 16 17 19 20 21 23 25 26 27 28 29 32 36 37 39 42 43 50 51 54 55 58 61 65 66 68 73 74 75 78 79 80 81 82 83 86 87 88 90 94 95 100 101 102 104 105 106 108 109 110 111 112 113 114 120 122 124 128 129 130 131 132 134 137 138 140 141 142 143 145 147 149 150 152 153 154 155 158 161 162 163 165 168 170 171 172 173 174 179 182 184 185 186 188 189 192 195 197 200 203 204 208 209 # 12737 is_subset c a 211 0 0 e b 211 0 0 e # 12738 is_subset c a 211 0 0 e b 211 0 1 e # 12739 is_subset c a 211 0 0 e b 211 0 0 e # 12740 is_subset c a 211 0 0 e b 211 0 1 f # 12741 is_subset c a 211 0 0 e b 211 0 0 e # 12742 is_subset c a 211 0 0 e b 211 0 1 1 4 5 8 10 16 18 21 22 24 26 30 33 34 36 38 39 40 44 45 48 50 56 58 59 60 66 68 71 72 73 75 77 80 81 82 92 93 98 100 103 104 109 110 112 113 116 117 121 122 123 127 129 130 134 136 138 139 141 143 145 148 149 150 151 153 154 155 156 158 161 162 164 165 166 167 170 173 175 176 177 183 184 186 187 188 189 191 196 200 201 202 203 204 206 207 208 209 # 12743 is_subset c a 211 0 0 f b 211 0 0 f # 12744 is_subset c a 211 0 0 f b 211 0 1 e # 12745 is_subset c a 211 0 0 f b 211 0 0 f # 12746 is_subset c a 211 0 0 f b 211 0 1 f # 12747 is_subset c a 211 0 0 f b 211 0 0 f # 12748 is_subset c a 211 0 0 f b 211 0 1 2 8 10 11 12 13 16 17 22 31 35 37 38 40 41 43 44 45 46 47 48 50 52 53 54 57 58 63 67 73 74 75 76 77 78 79 81 82 84 85 86 87 88 89 91 92 93 94 100 101 102 103 104 105 106 107 108 109 110 113 114 117 121 125 126 127 131 133 134 136 137 140 142 144 149 150 151 153 155 156 158 160 161 164 166 167 171 173 177 178 179 181 183 184 185 186 187 188 189 190 191 192 194 195 197 199 200 201 202 204 205 206 208 209 210 # 12749 is_subset c a 211 0 0 1 9 11 12 14 16 17 18 19 20 21 27 30 32 34 37 38 39 40 41 42 43 45 52 53 57 60 61 62 63 65 67 68 71 75 76 77 80 82 83 88 89 90 91 92 93 94 95 96 98 100 103 105 106 109 110 113 115 116 117 119 120 122 125 127 133 135 137 139 140 145 148 151 152 155 157 158 159 160 162 167 169 170 174 175 177 178 182 187 188 191 192 195 196 197 198 199 200 204 205 207 208 b 211 0 0 1 9 11 12 14 16 17 18 19 20 21 27 30 32 34 37 38 39 40 41 42 43 45 52 53 57 60 61 62 63 65 67 68 71 75 76 77 80 82 83 88 89 90 91 92 93 94 95 96 98 100 103 105 106 109 110 113 115 116 117 119 120 122 125 127 133 135 137 139 140 145 148 151 152 155 157 158 159 160 162 167 169 170 174 175 177 178 182 187 188 191 192 195 196 197 198 199 200 204 205 207 208 # 12750 is_subset c a 211 0 0 1 9 11 12 14 16 17 18 19 20 21 27 30 32 34 37 38 39 40 41 42 43 45 52 53 57 60 61 62 63 65 67 68 71 75 76 77 80 82 83 88 89 90 91 92 93 94 95 96 98 100 103 105 106 109 110 113 115 116 117 119 120 122 125 127 133 135 137 139 140 145 148 151 152 155 157 158 159 160 162 167 169 170 174 175 177 178 182 187 188 191 192 195 196 197 198 199 200 204 205 207 208 b 211 0 1 e # 12751 is_subset c a 211 0 0 3 4 6 7 12 13 14 15 17 18 20 22 24 25 26 27 28 29 34 36 37 42 45 47 48 49 51 53 56 62 63 64 65 67 68 71 72 78 83 85 86 87 92 95 96 98 99 100 102 103 104 105 110 111 114 115 117 118 120 122 123 128 131 133 134 136 137 143 147 148 151 154 155 161 162 163 164 165 167 168 169 171 172 173 174 176 179 182 183 184 185 186 188 195 197 198 199 201 202 204 205 206 207 208 210 b 211 0 0 3 4 6 7 12 13 14 15 17 18 20 22 24 25 26 27 28 29 34 36 37 42 45 47 48 49 51 53 56 62 63 64 65 67 68 71 72 78 83 85 86 87 92 95 96 98 99 100 102 103 104 105 110 111 114 115 117 118 120 122 123 128 131 133 134 136 137 143 147 148 151 154 155 161 162 163 164 165 167 168 169 171 172 173 174 176 179 182 183 184 185 186 188 195 197 198 199 201 202 204 205 206 207 208 210 # 12752 is_subset c a 211 0 0 3 4 6 7 12 13 14 15 17 18 20 22 24 25 26 27 28 29 34 36 37 42 45 47 48 49 51 53 56 62 63 64 65 67 68 71 72 78 83 85 86 87 92 95 96 98 99 100 102 103 104 105 110 111 114 115 117 118 120 122 123 128 131 133 134 136 137 143 147 148 151 154 155 161 162 163 164 165 167 168 169 171 172 173 174 176 179 182 183 184 185 186 188 195 197 198 199 201 202 204 205 206 207 208 210 b 211 0 1 f # 12753 is_subset c a 211 0 0 1 2 7 9 11 13 16 18 19 20 21 22 24 25 28 33 34 35 39 41 42 46 48 49 52 54 57 58 59 63 65 67 69 70 72 73 74 77 78 79 84 86 87 89 90 91 92 97 98 100 101 102 103 105 106 107 108 109 110 112 115 118 119 120 121 123 124 125 128 130 131 132 133 134 136 137 141 142 147 149 152 153 155 156 157 158 159 160 161 162 163 165 169 170 171 172 175 176 177 178 180 182 188 191 192 194 196 198 203 204 205 206 207 208 209 210 b 211 0 0 1 2 7 9 11 13 16 18 19 20 21 22 24 25 28 33 34 35 39 41 42 46 48 49 52 54 57 58 59 63 65 67 69 70 72 73 74 77 78 79 84 86 87 89 90 91 92 97 98 100 101 102 103 105 106 107 108 109 110 112 115 118 119 120 121 123 124 125 128 130 131 132 133 134 136 137 141 142 147 149 152 153 155 156 157 158 159 160 161 162 163 165 169 170 171 172 175 176 177 178 180 182 188 191 192 194 196 198 203 204 205 206 207 208 209 210 # 12754 is_subset c a 211 0 0 1 2 7 9 11 13 16 18 19 20 21 22 24 25 28 33 34 35 39 41 42 46 48 49 52 54 57 58 59 63 65 67 69 70 72 73 74 77 78 79 84 86 87 89 90 91 92 97 98 100 101 102 103 105 106 107 108 109 110 112 115 118 119 120 121 123 124 125 128 130 131 132 133 134 136 137 141 142 147 149 152 153 155 156 157 158 159 160 161 162 163 165 169 170 171 172 175 176 177 178 180 182 188 191 192 194 196 198 203 204 205 206 207 208 209 210 b 211 0 1 1 2 3 5 8 10 11 13 14 15 16 18 20 22 23 25 26 27 28 30 33 35 36 39 40 41 42 44 45 47 51 54 55 58 60 61 65 70 73 74 79 81 82 83 86 87 88 91 93 95 97 98 99 101 102 103 104 105 108 109 110 112 113 120 123 125 126 127 129 131 132 137 138 141 142 147 149 150 156 157 160 161 165 166 169 170 171 175 176 177 178 181 183 184 185 187 188 193 194 197 198 199 200 201 202 207 208 209 # 12755 is_subset c a 211 0 0 e b 211 0 0 e # 12756 is_subset c a 211 0 0 e b 211 1 0 e # 12757 is_subset c a 211 0 0 e b 211 0 0 e # 12758 is_subset c a 211 0 0 e b 211 1 0 f # 12759 is_subset c a 211 0 0 e b 211 0 0 e # 12760 is_subset c a 211 0 0 e b 211 1 0 1 2 4 7 9 11 13 14 15 17 18 23 24 25 26 27 28 29 30 32 33 37 40 45 46 47 48 49 53 54 55 56 57 58 60 61 62 63 67 72 81 84 87 92 93 100 102 103 104 108 109 110 111 112 115 116 117 118 121 122 124 125 126 129 130 136 137 138 140 141 143 144 145 146 147 148 149 150 152 153 155 156 158 161 162 163 167 172 173 175 176 178 179 180 181 183 185 188 194 199 201 202 204 207 210 # 12761 is_subset c a 211 0 0 f b 211 0 0 f # 12762 is_subset c a 211 0 0 f b 211 1 0 e # 12763 is_subset c a 211 0 0 f b 211 0 0 f # 12764 is_subset c a 211 0 0 f b 211 1 0 f # 12765 is_subset c a 211 0 0 f b 211 0 0 f # 12766 is_subset c a 211 0 0 f b 211 1 0 1 5 6 7 8 15 16 19 20 22 25 26 31 33 35 36 37 39 41 42 43 46 48 50 51 52 53 56 58 63 64 67 69 71 72 75 76 84 87 88 90 94 96 101 102 107 108 112 113 115 117 119 123 124 128 130 133 137 139 141 143 144 145 146 147 148 150 151 152 154 157 158 161 163 165 167 168 169 170 171 172 173 174 176 177 180 183 184 191 192 193 196 197 199 201 202 204 205 206 207 # 12767 is_subset c a 211 0 0 1 2 5 7 9 11 12 19 20 22 23 26 28 29 32 34 38 40 43 45 46 47 50 51 52 54 56 57 58 59 60 66 67 69 72 73 76 79 80 81 82 83 85 88 89 93 94 95 97 99 101 106 108 115 119 121 123 124 127 129 130 131 132 133 141 142 143 144 145 149 151 153 154 161 163 164 168 169 170 174 178 179 181 182 183 184 185 186 187 188 193 198 199 203 204 208 209 b 211 0 0 1 2 5 7 9 11 12 19 20 22 23 26 28 29 32 34 38 40 43 45 46 47 50 51 52 54 56 57 58 59 60 66 67 69 72 73 76 79 80 81 82 83 85 88 89 93 94 95 97 99 101 106 108 115 119 121 123 124 127 129 130 131 132 133 141 142 143 144 145 149 151 153 154 161 163 164 168 169 170 174 178 179 181 182 183 184 185 186 187 188 193 198 199 203 204 208 209 # 12768 is_subset c a 211 0 0 1 2 5 7 9 11 12 19 20 22 23 26 28 29 32 34 38 40 43 45 46 47 50 51 52 54 56 57 58 59 60 66 67 69 72 73 76 79 80 81 82 83 85 88 89 93 94 95 97 99 101 106 108 115 119 121 123 124 127 129 130 131 132 133 141 142 143 144 145 149 151 153 154 161 163 164 168 169 170 174 178 179 181 182 183 184 185 186 187 188 193 198 199 203 204 208 209 b 211 1 0 e # 12769 is_subset c a 211 0 0 0 1 3 4 6 7 9 13 14 21 24 25 30 37 38 39 40 45 46 49 50 51 52 54 56 58 60 62 64 66 69 70 72 78 83 84 87 88 91 92 97 98 99 100 101 102 103 104 106 108 109 110 111 113 114 115 118 119 120 121 122 125 126 127 128 129 131 136 138 139 142 145 147 150 151 161 163 165 169 170 173 174 175 178 179 180 182 183 184 188 189 190 191 194 195 196 197 198 200 201 202 204 205 210 b 211 0 0 0 1 3 4 6 7 9 13 14 21 24 25 30 37 38 39 40 45 46 49 50 51 52 54 56 58 60 62 64 66 69 70 72 78 83 84 87 88 91 92 97 98 99 100 101 102 103 104 106 108 109 110 111 113 114 115 118 119 120 121 122 125 126 127 128 129 131 136 138 139 142 145 147 150 151 161 163 165 169 170 173 174 175 178 179 180 182 183 184 188 189 190 191 194 195 196 197 198 200 201 202 204 205 210 # 12770 is_subset c a 211 0 0 0 1 3 4 6 7 9 13 14 21 24 25 30 37 38 39 40 45 46 49 50 51 52 54 56 58 60 62 64 66 69 70 72 78 83 84 87 88 91 92 97 98 99 100 101 102 103 104 106 108 109 110 111 113 114 115 118 119 120 121 122 125 126 127 128 129 131 136 138 139 142 145 147 150 151 161 163 165 169 170 173 174 175 178 179 180 182 183 184 188 189 190 191 194 195 196 197 198 200 201 202 204 205 210 b 211 1 0 f # 12771 is_subset c a 211 0 0 0 1 2 3 4 5 8 11 12 19 23 29 37 39 41 42 43 47 48 49 53 55 57 59 61 63 64 65 68 69 71 73 74 75 79 81 83 84 86 89 90 91 92 94 95 96 97 98 99 100 102 105 106 111 113 114 118 121 124 125 126 127 128 129 130 131 134 137 138 143 145 150 151 152 155 158 161 162 165 166 168 169 170 175 177 179 182 185 187 190 192 193 194 196 197 198 199 200 201 204 205 208 210 b 211 0 0 0 1 2 3 4 5 8 11 12 19 23 29 37 39 41 42 43 47 48 49 53 55 57 59 61 63 64 65 68 69 71 73 74 75 79 81 83 84 86 89 90 91 92 94 95 96 97 98 99 100 102 105 106 111 113 114 118 121 124 125 126 127 128 129 130 131 134 137 138 143 145 150 151 152 155 158 161 162 165 166 168 169 170 175 177 179 182 185 187 190 192 193 194 196 197 198 199 200 201 204 205 208 210 # 12772 is_subset c a 211 0 0 0 1 2 3 4 5 8 11 12 19 23 29 37 39 41 42 43 47 48 49 53 55 57 59 61 63 64 65 68 69 71 73 74 75 79 81 83 84 86 89 90 91 92 94 95 96 97 98 99 100 102 105 106 111 113 114 118 121 124 125 126 127 128 129 130 131 134 137 138 143 145 150 151 152 155 158 161 162 165 166 168 169 170 175 177 179 182 185 187 190 192 193 194 196 197 198 199 200 201 204 205 208 210 b 211 1 0 1 2 5 6 7 8 9 10 12 13 16 18 19 21 23 24 27 29 30 31 33 35 37 38 40 41 42 43 44 47 48 50 52 55 56 57 58 61 62 63 66 67 75 76 78 79 80 83 84 85 88 90 92 93 96 97 101 103 105 106 111 112 113 114 115 116 119 121 122 124 126 127 130 131 135 140 141 143 144 147 149 150 151 152 153 156 160 162 164 167 168 169 172 173 175 177 178 179 181 182 186 188 189 190 191 193 195 197 198 199 200 203 205 206 207 209 # 12773 is_subset c a 211 0 0 e b 211 0 0 e # 12774 is_subset c a 211 0 0 e b 211 1 1 e # 12775 is_subset c a 211 0 0 e b 211 0 0 e # 12776 is_subset c a 211 0 0 e b 211 1 1 f # 12777 is_subset c a 211 0 0 e b 211 0 0 e # 12778 is_subset c a 211 0 0 e b 211 1 1 0 4 6 9 11 13 17 20 21 22 27 28 29 31 33 38 45 46 48 49 50 52 54 55 56 58 59 62 63 70 71 75 77 79 80 81 83 86 88 89 91 94 96 97 98 101 102 103 107 109 110 112 114 116 117 118 123 124 130 133 135 136 137 150 151 157 158 159 160 166 171 172 173 174 179 180 185 187 188 190 191 192 193 194 195 197 199 201 204 208 209 210 # 12779 is_subset c a 211 0 0 f b 211 0 0 f # 12780 is_subset c a 211 0 0 f b 211 1 1 e # 12781 is_subset c a 211 0 0 f b 211 0 0 f # 12782 is_subset c a 211 0 0 f b 211 1 1 f # 12783 is_subset c a 211 0 0 f b 211 0 0 f # 12784 is_subset c a 211 0 0 f b 211 1 1 0 3 4 7 9 11 14 16 17 18 19 23 25 28 33 37 38 39 40 42 44 45 46 47 48 50 52 53 54 56 58 62 63 67 72 75 76 78 79 80 82 83 85 86 89 90 91 92 93 94 97 98 99 102 103 104 106 107 108 112 118 119 120 123 132 136 140 141 142 143 147 149 153 155 157 160 162 163 164 168 170 173 179 181 183 184 185 186 187 189 196 198 199 200 201 204 206 207 208 209 210 # 12785 is_subset c a 211 0 0 1 2 5 10 11 12 14 15 18 23 25 28 30 33 34 35 36 39 42 44 45 49 51 53 55 56 57 58 59 61 63 64 67 68 69 70 72 75 77 78 80 85 86 88 89 92 93 94 95 98 104 105 106 108 109 110 113 114 115 116 117 120 121 122 123 124 125 126 130 132 134 135 137 139 140 141 144 147 148 149 151 152 153 155 156 159 160 161 163 166 168 169 171 172 173 174 175 178 180 181 182 183 184 187 188 189 190 192 195 197 200 201 203 204 206 209 b 211 0 0 1 2 5 10 11 12 14 15 18 23 25 28 30 33 34 35 36 39 42 44 45 49 51 53 55 56 57 58 59 61 63 64 67 68 69 70 72 75 77 78 80 85 86 88 89 92 93 94 95 98 104 105 106 108 109 110 113 114 115 116 117 120 121 122 123 124 125 126 130 132 134 135 137 139 140 141 144 147 148 149 151 152 153 155 156 159 160 161 163 166 168 169 171 172 173 174 175 178 180 181 182 183 184 187 188 189 190 192 195 197 200 201 203 204 206 209 # 12786 is_subset c a 211 0 0 1 2 5 10 11 12 14 15 18 23 25 28 30 33 34 35 36 39 42 44 45 49 51 53 55 56 57 58 59 61 63 64 67 68 69 70 72 75 77 78 80 85 86 88 89 92 93 94 95 98 104 105 106 108 109 110 113 114 115 116 117 120 121 122 123 124 125 126 130 132 134 135 137 139 140 141 144 147 148 149 151 152 153 155 156 159 160 161 163 166 168 169 171 172 173 174 175 178 180 181 182 183 184 187 188 189 190 192 195 197 200 201 203 204 206 209 b 211 1 1 e # 12787 is_subset c a 211 0 0 1 4 5 6 8 16 18 21 22 24 25 27 31 32 33 35 36 37 39 42 43 44 46 47 48 49 54 59 60 61 62 63 64 65 67 68 69 76 79 80 81 84 86 88 89 90 91 92 93 96 97 99 100 101 103 108 111 113 117 120 122 123 127 130 133 138 140 141 142 144 147 149 154 155 156 158 160 163 165 167 175 177 178 179 180 182 185 189 191 193 194 195 196 198 199 200 203 205 206 207 208 209 210 b 211 0 0 1 4 5 6 8 16 18 21 22 24 25 27 31 32 33 35 36 37 39 42 43 44 46 47 48 49 54 59 60 61 62 63 64 65 67 68 69 76 79 80 81 84 86 88 89 90 91 92 93 96 97 99 100 101 103 108 111 113 117 120 122 123 127 130 133 138 140 141 142 144 147 149 154 155 156 158 160 163 165 167 175 177 178 179 180 182 185 189 191 193 194 195 196 198 199 200 203 205 206 207 208 209 210 # 12788 is_subset c a 211 0 0 1 4 5 6 8 16 18 21 22 24 25 27 31 32 33 35 36 37 39 42 43 44 46 47 48 49 54 59 60 61 62 63 64 65 67 68 69 76 79 80 81 84 86 88 89 90 91 92 93 96 97 99 100 101 103 108 111 113 117 120 122 123 127 130 133 138 140 141 142 144 147 149 154 155 156 158 160 163 165 167 175 177 178 179 180 182 185 189 191 193 194 195 196 198 199 200 203 205 206 207 208 209 210 b 211 1 1 f # 12789 is_subset c a 211 0 0 0 2 4 5 7 8 11 12 14 15 18 24 27 28 31 34 36 39 40 41 42 43 45 46 49 50 51 54 55 58 63 68 71 74 77 78 79 80 81 82 83 84 85 86 88 89 90 92 97 98 102 104 105 106 109 112 115 116 119 120 123 125 127 128 131 132 135 136 141 142 145 146 153 155 156 157 158 165 169 170 171 172 173 175 176 179 183 186 187 189 193 194 195 196 197 200 204 205 207 208 209 210 b 211 0 0 0 2 4 5 7 8 11 12 14 15 18 24 27 28 31 34 36 39 40 41 42 43 45 46 49 50 51 54 55 58 63 68 71 74 77 78 79 80 81 82 83 84 85 86 88 89 90 92 97 98 102 104 105 106 109 112 115 116 119 120 123 125 127 128 131 132 135 136 141 142 145 146 153 155 156 157 158 165 169 170 171 172 173 175 176 179 183 186 187 189 193 194 195 196 197 200 204 205 207 208 209 210 # 12790 is_subset c a 211 0 0 0 2 4 5 7 8 11 12 14 15 18 24 27 28 31 34 36 39 40 41 42 43 45 46 49 50 51 54 55 58 63 68 71 74 77 78 79 80 81 82 83 84 85 86 88 89 90 92 97 98 102 104 105 106 109 112 115 116 119 120 123 125 127 128 131 132 135 136 141 142 145 146 153 155 156 157 158 165 169 170 171 172 173 175 176 179 183 186 187 189 193 194 195 196 197 200 204 205 207 208 209 210 b 211 1 1 2 8 10 12 13 14 16 17 18 20 21 22 24 25 26 27 28 32 34 36 38 39 40 41 42 44 45 46 47 48 49 51 52 54 55 56 57 59 61 62 63 65 68 69 71 72 80 82 83 84 85 87 88 89 91 92 94 98 102 103 107 109 110 113 115 116 117 118 119 120 122 123 124 125 127 128 135 137 138 139 141 143 144 145 146 147 152 154 156 159 161 163 164 166 169 171 173 176 178 180 184 186 187 188 190 193 198 199 200 205 206 207 209 # 12791 is_subset c a 211 0 1 e b 211 0 1 e # 12792 is_subset c a 211 0 1 e b 211 0 0 e # 12793 is_subset c a 211 0 1 e b 211 0 1 e # 12794 is_subset c a 211 0 1 e b 211 0 0 f # 12795 is_subset c a 211 0 1 e b 211 0 1 e # 12796 is_subset c a 211 0 1 e b 211 0 0 0 2 4 7 8 9 16 17 19 20 24 26 27 29 30 32 33 34 35 36 38 39 43 44 45 47 52 53 55 56 62 65 69 71 74 75 77 78 79 82 84 87 88 89 97 98 99 100 101 102 103 105 106 107 108 109 112 114 115 116 117 118 119 120 123 124 125 135 139 140 141 143 145 146 148 149 151 153 154 158 159 163 164 168 169 171 172 174 177 178 180 185 186 187 189 190 191 193 197 200 201 202 203 205 207 # 12797 is_subset c a 211 0 1 f b 211 0 1 f # 12798 is_subset c a 211 0 1 f b 211 0 0 e # 12799 is_subset c a 211 0 1 f b 211 0 1 f # 12800 is_subset c a 211 0 1 f b 211 0 0 f # 12801 is_subset c a 211 0 1 f b 211 0 1 f # 12802 is_subset c a 211 0 1 f b 211 0 0 1 7 8 9 10 13 14 17 18 20 21 23 24 27 28 29 30 31 32 36 37 39 40 41 43 44 47 53 57 58 59 60 61 62 63 66 71 74 75 76 78 79 80 87 90 91 93 94 95 97 100 101 107 108 110 111 112 116 117 118 119 121 122 123 125 126 127 132 133 134 137 143 152 156 157 162 165 168 169 170 171 172 173 174 178 179 181 186 190 191 192 193 194 195 206 207 # 12803 is_subset c a 211 0 1 0 2 4 7 8 9 10 16 17 18 25 29 30 34 35 36 38 40 41 42 46 49 51 53 55 56 58 59 61 65 67 74 76 77 78 80 83 86 87 88 89 90 94 95 98 100 102 103 104 107 111 114 115 116 117 118 119 121 123 124 125 126 130 131 132 134 136 140 144 146 147 148 149 150 158 160 164 166 167 168 171 172 174 175 176 177 178 179 180 181 184 185 186 188 190 191 192 195 196 198 199 204 206 209 b 211 0 1 0 2 4 7 8 9 10 16 17 18 25 29 30 34 35 36 38 40 41 42 46 49 51 53 55 56 58 59 61 65 67 74 76 77 78 80 83 86 87 88 89 90 94 95 98 100 102 103 104 107 111 114 115 116 117 118 119 121 123 124 125 126 130 131 132 134 136 140 144 146 147 148 149 150 158 160 164 166 167 168 171 172 174 175 176 177 178 179 180 181 184 185 186 188 190 191 192 195 196 198 199 204 206 209 # 12804 is_subset c a 211 0 1 0 2 4 7 8 9 10 16 17 18 25 29 30 34 35 36 38 40 41 42 46 49 51 53 55 56 58 59 61 65 67 74 76 77 78 80 83 86 87 88 89 90 94 95 98 100 102 103 104 107 111 114 115 116 117 118 119 121 123 124 125 126 130 131 132 134 136 140 144 146 147 148 149 150 158 160 164 166 167 168 171 172 174 175 176 177 178 179 180 181 184 185 186 188 190 191 192 195 196 198 199 204 206 209 b 211 0 0 e # 12805 is_subset c a 211 0 1 7 9 11 12 13 15 18 20 21 22 24 28 29 31 33 35 37 38 44 45 46 49 50 52 56 57 58 60 65 68 69 70 78 82 83 84 87 88 91 93 94 95 96 102 104 106 107 108 111 112 114 115 118 120 121 124 126 130 131 133 136 137 139 141 142 144 145 150 151 155 159 162 163 165 168 170 173 174 178 179 180 181 182 183 184 185 186 191 192 194 197 202 203 205 206 207 209 b 211 0 1 7 9 11 12 13 15 18 20 21 22 24 28 29 31 33 35 37 38 44 45 46 49 50 52 56 57 58 60 65 68 69 70 78 82 83 84 87 88 91 93 94 95 96 102 104 106 107 108 111 112 114 115 118 120 121 124 126 130 131 133 136 137 139 141 142 144 145 150 151 155 159 162 163 165 168 170 173 174 178 179 180 181 182 183 184 185 186 191 192 194 197 202 203 205 206 207 209 # 12806 is_subset c a 211 0 1 7 9 11 12 13 15 18 20 21 22 24 28 29 31 33 35 37 38 44 45 46 49 50 52 56 57 58 60 65 68 69 70 78 82 83 84 87 88 91 93 94 95 96 102 104 106 107 108 111 112 114 115 118 120 121 124 126 130 131 133 136 137 139 141 142 144 145 150 151 155 159 162 163 165 168 170 173 174 178 179 180 181 182 183 184 185 186 191 192 194 197 202 203 205 206 207 209 b 211 0 0 f # 12807 is_subset c a 211 0 1 0 3 6 7 13 14 15 16 17 21 22 24 25 27 28 29 31 34 35 36 37 38 43 46 49 51 52 55 61 63 66 67 69 71 73 74 75 78 79 82 84 85 86 91 93 94 96 97 100 101 102 105 107 111 112 114 115 117 118 119 122 123 125 128 129 131 135 138 140 147 151 152 155 156 157 159 161 163 165 166 169 170 171 172 177 179 180 181 183 184 185 186 187 188 189 190 192 195 196 200 203 204 205 209 210 b 211 0 1 0 3 6 7 13 14 15 16 17 21 22 24 25 27 28 29 31 34 35 36 37 38 43 46 49 51 52 55 61 63 66 67 69 71 73 74 75 78 79 82 84 85 86 91 93 94 96 97 100 101 102 105 107 111 112 114 115 117 118 119 122 123 125 128 129 131 135 138 140 147 151 152 155 156 157 159 161 163 165 166 169 170 171 172 177 179 180 181 183 184 185 186 187 188 189 190 192 195 196 200 203 204 205 209 210 # 12808 is_subset c a 211 0 1 0 3 6 7 13 14 15 16 17 21 22 24 25 27 28 29 31 34 35 36 37 38 43 46 49 51 52 55 61 63 66 67 69 71 73 74 75 78 79 82 84 85 86 91 93 94 96 97 100 101 102 105 107 111 112 114 115 117 118 119 122 123 125 128 129 131 135 138 140 147 151 152 155 156 157 159 161 163 165 166 169 170 171 172 177 179 180 181 183 184 185 186 187 188 189 190 192 195 196 200 203 204 205 209 210 b 211 0 0 6 9 12 14 15 17 19 20 21 22 23 25 27 30 31 32 34 36 37 38 39 40 41 43 47 49 50 53 55 57 58 59 60 63 64 66 69 72 73 77 81 82 83 84 85 86 88 89 90 91 95 96 101 102 103 104 108 110 122 124 127 128 129 132 135 136 139 140 141 145 146 147 152 154 155 156 158 159 162 164 168 169 171 172 177 182 183 184 185 186 191 192 197 198 200 202 204 206 207 209 # 12809 is_subset c a 211 0 1 e b 211 0 1 e # 12810 is_subset c a 211 0 1 e b 211 0 1 e # 12811 is_subset c a 211 0 1 e b 211 0 1 e # 12812 is_subset c a 211 0 1 e b 211 0 1 f # 12813 is_subset c a 211 0 1 e b 211 0 1 e # 12814 is_subset c a 211 0 1 e b 211 0 1 7 8 9 10 11 15 16 18 19 22 23 24 27 31 32 33 37 38 41 43 45 46 47 49 50 51 53 57 59 61 62 64 66 68 69 70 72 75 78 79 81 83 84 85 86 88 90 92 93 94 95 96 97 98 99 101 104 105 110 111 114 117 120 122 123 125 126 128 129 133 136 137 138 140 141 145 147 148 149 151 154 155 158 159 163 164 165 167 169 170 172 174 175 178 179 181 182 183 188 192 193 194 195 199 203 204 206 207 209 210 # 12815 is_subset c a 211 0 1 f b 211 0 1 f # 12816 is_subset c a 211 0 1 f b 211 0 1 e # 12817 is_subset c a 211 0 1 f b 211 0 1 f # 12818 is_subset c a 211 0 1 f b 211 0 1 f # 12819 is_subset c a 211 0 1 f b 211 0 1 f # 12820 is_subset c a 211 0 1 f b 211 0 1 0 1 2 4 6 10 13 15 17 20 21 22 23 24 25 26 27 29 30 34 36 37 38 39 41 44 45 47 48 49 51 52 53 54 55 56 57 62 63 64 73 74 76 79 88 89 90 92 93 95 97 101 102 103 104 105 107 111 112 113 117 118 121 122 124 127 131 134 135 137 138 139 142 146 149 150 151 152 155 156 158 159 160 162 164 169 171 176 178 179 181 182 185 187 189 190 193 194 195 197 199 200 202 204 206 208 209 # 12821 is_subset c a 211 0 1 3 4 6 7 8 9 10 14 16 17 20 21 24 26 29 30 33 35 38 39 44 46 47 55 56 61 62 64 65 72 74 75 76 77 79 80 81 85 94 98 100 101 102 105 108 109 111 114 115 118 120 122 124 125 126 127 134 135 137 140 142 144 145 146 149 150 151 153 156 157 161 163 166 167 170 171 172 173 175 176 178 181 183 186 191 192 193 194 197 198 201 203 204 205 206 207 208 209 b 211 0 1 3 4 6 7 8 9 10 14 16 17 20 21 24 26 29 30 33 35 38 39 44 46 47 55 56 61 62 64 65 72 74 75 76 77 79 80 81 85 94 98 100 101 102 105 108 109 111 114 115 118 120 122 124 125 126 127 134 135 137 140 142 144 145 146 149 150 151 153 156 157 161 163 166 167 170 171 172 173 175 176 178 181 183 186 191 192 193 194 197 198 201 203 204 205 206 207 208 209 # 12822 is_subset c a 211 0 1 3 4 6 7 8 9 10 14 16 17 20 21 24 26 29 30 33 35 38 39 44 46 47 55 56 61 62 64 65 72 74 75 76 77 79 80 81 85 94 98 100 101 102 105 108 109 111 114 115 118 120 122 124 125 126 127 134 135 137 140 142 144 145 146 149 150 151 153 156 157 161 163 166 167 170 171 172 173 175 176 178 181 183 186 191 192 193 194 197 198 201 203 204 205 206 207 208 209 b 211 0 1 e # 12823 is_subset c a 211 0 1 3 4 5 6 10 13 16 20 22 23 25 28 30 31 32 34 35 37 38 39 41 45 46 50 51 52 53 54 56 58 61 64 66 69 70 71 72 76 78 80 81 83 84 85 90 91 92 94 95 96 97 100 103 106 108 109 110 113 116 118 120 121 122 123 125 126 128 129 130 131 133 134 135 137 141 142 143 144 145 147 149 152 154 155 157 160 161 163 164 165 166 168 169 170 172 175 178 179 187 188 190 191 194 198 199 201 207 208 210 b 211 0 1 3 4 5 6 10 13 16 20 22 23 25 28 30 31 32 34 35 37 38 39 41 45 46 50 51 52 53 54 56 58 61 64 66 69 70 71 72 76 78 80 81 83 84 85 90 91 92 94 95 96 97 100 103 106 108 109 110 113 116 118 120 121 122 123 125 126 128 129 130 131 133 134 135 137 141 142 143 144 145 147 149 152 154 155 157 160 161 163 164 165 166 168 169 170 172 175 178 179 187 188 190 191 194 198 199 201 207 208 210 # 12824 is_subset c a 211 0 1 3 4 5 6 10 13 16 20 22 23 25 28 30 31 32 34 35 37 38 39 41 45 46 50 51 52 53 54 56 58 61 64 66 69 70 71 72 76 78 80 81 83 84 85 90 91 92 94 95 96 97 100 103 106 108 109 110 113 116 118 120 121 122 123 125 126 128 129 130 131 133 134 135 137 141 142 143 144 145 147 149 152 154 155 157 160 161 163 164 165 166 168 169 170 172 175 178 179 187 188 190 191 194 198 199 201 207 208 210 b 211 0 1 f # 12825 is_subset c a 211 0 1 1 2 3 6 7 10 11 12 14 20 22 26 30 31 32 33 40 43 47 49 55 58 59 61 64 65 66 69 70 75 77 78 79 80 85 86 87 88 89 90 92 94 95 97 99 100 101 103 105 106 107 108 110 111 112 113 114 116 117 119 120 121 123 126 128 131 134 139 140 141 142 143 144 145 146 147 148 151 153 154 156 157 158 159 160 162 164 166 167 168 169 170 171 172 173 174 175 177 178 180 182 184 185 186 187 189 190 192 193 194 195 198 201 205 207 208 b 211 0 1 1 2 3 6 7 10 11 12 14 20 22 26 30 31 32 33 40 43 47 49 55 58 59 61 64 65 66 69 70 75 77 78 79 80 85 86 87 88 89 90 92 94 95 97 99 100 101 103 105 106 107 108 110 111 112 113 114 116 117 119 120 121 123 126 128 131 134 139 140 141 142 143 144 145 146 147 148 151 153 154 156 157 158 159 160 162 164 166 167 168 169 170 171 172 173 174 175 177 178 180 182 184 185 186 187 189 190 192 193 194 195 198 201 205 207 208 # 12826 is_subset c a 211 0 1 1 2 3 6 7 10 11 12 14 20 22 26 30 31 32 33 40 43 47 49 55 58 59 61 64 65 66 69 70 75 77 78 79 80 85 86 87 88 89 90 92 94 95 97 99 100 101 103 105 106 107 108 110 111 112 113 114 116 117 119 120 121 123 126 128 131 134 139 140 141 142 143 144 145 146 147 148 151 153 154 156 157 158 159 160 162 164 166 167 168 169 170 171 172 173 174 175 177 178 180 182 184 185 186 187 189 190 192 193 194 195 198 201 205 207 208 b 211 0 1 0 3 5 6 11 14 18 19 20 21 22 25 26 28 29 33 35 36 40 41 45 47 51 57 58 60 62 64 67 69 70 72 77 78 83 84 85 88 89 90 91 96 97 98 100 101 103 105 106 108 109 110 118 119 121 122 123 125 126 127 128 129 132 133 136 138 139 141 143 148 152 159 165 167 168 170 172 173 174 178 182 186 187 189 190 191 194 195 196 198 199 200 203 206 207 209 # 12827 is_subset c a 211 0 1 e b 211 0 1 e # 12828 is_subset c a 211 0 1 e b 211 1 0 e # 12829 is_subset c a 211 0 1 e b 211 0 1 e # 12830 is_subset c a 211 0 1 e b 211 1 0 f # 12831 is_subset c a 211 0 1 e b 211 0 1 e # 12832 is_subset c a 211 0 1 e b 211 1 0 0 1 5 10 11 12 14 21 23 25 26 29 30 32 34 36 37 43 44 47 48 49 51 53 54 55 57 58 59 60 61 62 64 65 66 67 68 71 72 74 76 81 83 87 90 93 94 100 104 106 107 108 111 113 114 115 118 119 120 122 123 125 127 130 131 132 135 138 140 141 144 145 146 147 149 150 151 153 154 159 160 162 163 166 167 168 171 174 177 179 180 181 182 183 184 185 188 189 190 191 192 193 196 199 200 201 207 209 # 12833 is_subset c a 211 0 1 f b 211 0 1 f # 12834 is_subset c a 211 0 1 f b 211 1 0 e # 12835 is_subset c a 211 0 1 f b 211 0 1 f # 12836 is_subset c a 211 0 1 f b 211 1 0 f # 12837 is_subset c a 211 0 1 f b 211 0 1 f # 12838 is_subset c a 211 0 1 f b 211 1 0 1 5 6 7 8 10 11 15 22 26 28 29 30 31 33 35 36 37 38 39 42 43 44 45 46 50 51 52 56 60 65 68 72 73 75 76 80 81 86 88 90 91 95 96 97 98 99 100 102 103 109 110 112 113 114 120 122 126 128 129 131 134 138 139 140 143 145 146 147 152 158 161 163 167 169 170 173 175 176 178 180 182 186 187 188 193 194 195 199 203 206 208 209 210 # 12839 is_subset c a 211 0 1 1 3 5 6 10 11 12 13 14 17 18 19 23 25 26 27 31 33 34 35 36 37 40 42 43 45 47 48 50 51 53 54 55 56 57 58 63 66 67 68 71 72 74 76 77 78 79 81 82 83 84 85 86 90 91 92 93 95 98 105 108 113 114 115 116 117 122 123 126 128 129 130 133 135 136 137 139 143 146 148 155 156 159 161 162 164 167 170 171 172 174 178 180 182 184 185 186 187 194 196 200 203 207 208 209 b 211 0 1 1 3 5 6 10 11 12 13 14 17 18 19 23 25 26 27 31 33 34 35 36 37 40 42 43 45 47 48 50 51 53 54 55 56 57 58 63 66 67 68 71 72 74 76 77 78 79 81 82 83 84 85 86 90 91 92 93 95 98 105 108 113 114 115 116 117 122 123 126 128 129 130 133 135 136 137 139 143 146 148 155 156 159 161 162 164 167 170 171 172 174 178 180 182 184 185 186 187 194 196 200 203 207 208 209 # 12840 is_subset c a 211 0 1 1 3 5 6 10 11 12 13 14 17 18 19 23 25 26 27 31 33 34 35 36 37 40 42 43 45 47 48 50 51 53 54 55 56 57 58 63 66 67 68 71 72 74 76 77 78 79 81 82 83 84 85 86 90 91 92 93 95 98 105 108 113 114 115 116 117 122 123 126 128 129 130 133 135 136 137 139 143 146 148 155 156 159 161 162 164 167 170 171 172 174 178 180 182 184 185 186 187 194 196 200 203 207 208 209 b 211 1 0 e # 12841 is_subset c a 211 0 1 3 4 6 7 9 11 13 14 16 18 20 21 22 23 25 26 28 29 30 34 37 38 39 40 42 43 44 45 47 50 53 54 55 56 57 60 62 65 67 70 72 73 75 76 77 80 86 87 94 95 96 98 100 101 102 104 105 107 108 109 111 113 114 117 119 121 123 125 126 129 130 131 132 135 137 138 141 142 143 144 145 147 148 149 150 152 153 154 155 156 157 161 165 166 167 169 171 172 174 177 180 189 191 192 193 194 197 199 200 202 204 205 206 207 208 b 211 0 1 3 4 6 7 9 11 13 14 16 18 20 21 22 23 25 26 28 29 30 34 37 38 39 40 42 43 44 45 47 50 53 54 55 56 57 60 62 65 67 70 72 73 75 76 77 80 86 87 94 95 96 98 100 101 102 104 105 107 108 109 111 113 114 117 119 121 123 125 126 129 130 131 132 135 137 138 141 142 143 144 145 147 148 149 150 152 153 154 155 156 157 161 165 166 167 169 171 172 174 177 180 189 191 192 193 194 197 199 200 202 204 205 206 207 208 # 12842 is_subset c a 211 0 1 3 4 6 7 9 11 13 14 16 18 20 21 22 23 25 26 28 29 30 34 37 38 39 40 42 43 44 45 47 50 53 54 55 56 57 60 62 65 67 70 72 73 75 76 77 80 86 87 94 95 96 98 100 101 102 104 105 107 108 109 111 113 114 117 119 121 123 125 126 129 130 131 132 135 137 138 141 142 143 144 145 147 148 149 150 152 153 154 155 156 157 161 165 166 167 169 171 172 174 177 180 189 191 192 193 194 197 199 200 202 204 205 206 207 208 b 211 1 0 f # 12843 is_subset c a 211 0 1 1 2 3 4 10 12 16 19 20 21 22 24 25 27 29 30 31 32 33 34 35 36 38 40 41 42 43 45 46 54 56 58 61 63 64 66 67 68 69 71 73 75 76 78 80 86 89 90 91 92 94 96 99 102 103 108 110 111 112 117 118 119 120 121 122 126 128 132 133 134 138 139 140 142 143 144 145 146 148 149 151 153 155 158 162 165 172 174 177 178 180 181 182 184 186 189 190 191 193 197 198 199 200 202 203 204 205 207 208 209 b 211 0 1 1 2 3 4 10 12 16 19 20 21 22 24 25 27 29 30 31 32 33 34 35 36 38 40 41 42 43 45 46 54 56 58 61 63 64 66 67 68 69 71 73 75 76 78 80 86 89 90 91 92 94 96 99 102 103 108 110 111 112 117 118 119 120 121 122 126 128 132 133 134 138 139 140 142 143 144 145 146 148 149 151 153 155 158 162 165 172 174 177 178 180 181 182 184 186 189 190 191 193 197 198 199 200 202 203 204 205 207 208 209 # 12844 is_subset c a 211 0 1 1 2 3 4 10 12 16 19 20 21 22 24 25 27 29 30 31 32 33 34 35 36 38 40 41 42 43 45 46 54 56 58 61 63 64 66 67 68 69 71 73 75 76 78 80 86 89 90 91 92 94 96 99 102 103 108 110 111 112 117 118 119 120 121 122 126 128 132 133 134 138 139 140 142 143 144 145 146 148 149 151 153 155 158 162 165 172 174 177 178 180 181 182 184 186 189 190 191 193 197 198 199 200 202 203 204 205 207 208 209 b 211 1 0 0 1 3 4 6 8 9 11 15 16 17 18 20 23 24 26 27 29 32 35 36 39 41 42 47 49 53 54 57 59 60 63 64 66 67 68 70 71 73 75 77 78 80 82 83 85 87 88 90 91 92 93 94 95 97 98 101 103 104 105 110 115 119 120 122 123 126 127 129 130 132 135 136 137 140 141 142 145 147 149 150 152 156 158 161 162 165 168 169 170 171 172 178 179 181 185 191 195 197 198 199 200 201 202 205 206 207 209 210 # 12845 is_subset c a 211 0 1 e b 211 0 1 e # 12846 is_subset c a 211 0 1 e b 211 1 1 e # 12847 is_subset c a 211 0 1 e b 211 0 1 e # 12848 is_subset c a 211 0 1 e b 211 1 1 f # 12849 is_subset c a 211 0 1 e b 211 0 1 e # 12850 is_subset c a 211 0 1 e b 211 1 1 0 3 4 7 8 9 11 13 16 19 20 21 22 25 27 29 30 31 33 34 39 41 42 43 45 54 55 56 57 58 60 66 67 68 69 70 72 78 79 80 82 85 88 89 90 91 93 95 97 98 99 100 103 104 106 108 109 111 112 116 117 118 119 120 121 124 125 127 128 129 130 131 136 138 139 142 146 148 149 151 153 154 162 163 168 170 173 175 176 179 180 181 182 185 186 187 188 189 194 195 196 198 199 201 202 203 204 206 207 208 210 # 12851 is_subset c a 211 0 1 f b 211 0 1 f # 12852 is_subset c a 211 0 1 f b 211 1 1 e # 12853 is_subset c a 211 0 1 f b 211 0 1 f # 12854 is_subset c a 211 0 1 f b 211 1 1 f # 12855 is_subset c a 211 0 1 f b 211 0 1 f # 12856 is_subset c a 211 0 1 f b 211 1 1 0 4 6 7 9 10 15 16 17 18 19 21 22 24 28 29 31 32 33 34 35 36 37 40 42 44 47 48 55 57 61 69 70 75 76 77 78 79 80 82 87 89 91 93 95 96 104 105 108 111 114 115 116 118 119 120 122 125 129 131 133 135 136 137 139 140 141 144 147 148 150 151 152 157 159 160 161 162 163 164 165 166 167 168 170 171 176 177 178 181 187 189 190 191 192 194 195 197 198 201 202 203 204 206 207 208 209 # 12857 is_subset c a 211 0 1 1 4 5 6 7 9 12 13 15 18 19 20 21 22 24 25 28 30 34 37 38 40 42 43 45 46 47 49 50 51 57 58 62 63 64 66 67 69 71 74 75 78 81 83 85 86 87 88 89 93 95 98 99 102 103 104 106 107 108 109 113 114 115 116 117 119 120 121 123 124 125 126 128 129 130 133 134 137 141 143 144 146 147 150 152 155 156 158 159 161 163 164 166 167 168 172 173 175 179 182 191 193 195 196 198 199 200 203 204 205 209 210 b 211 0 1 1 4 5 6 7 9 12 13 15 18 19 20 21 22 24 25 28 30 34 37 38 40 42 43 45 46 47 49 50 51 57 58 62 63 64 66 67 69 71 74 75 78 81 83 85 86 87 88 89 93 95 98 99 102 103 104 106 107 108 109 113 114 115 116 117 119 120 121 123 124 125 126 128 129 130 133 134 137 141 143 144 146 147 150 152 155 156 158 159 161 163 164 166 167 168 172 173 175 179 182 191 193 195 196 198 199 200 203 204 205 209 210 # 12858 is_subset c a 211 0 1 1 4 5 6 7 9 12 13 15 18 19 20 21 22 24 25 28 30 34 37 38 40 42 43 45 46 47 49 50 51 57 58 62 63 64 66 67 69 71 74 75 78 81 83 85 86 87 88 89 93 95 98 99 102 103 104 106 107 108 109 113 114 115 116 117 119 120 121 123 124 125 126 128 129 130 133 134 137 141 143 144 146 147 150 152 155 156 158 159 161 163 164 166 167 168 172 173 175 179 182 191 193 195 196 198 199 200 203 204 205 209 210 b 211 1 1 e # 12859 is_subset c a 211 0 1 0 2 4 8 9 10 12 14 15 18 22 23 25 31 32 36 37 38 42 44 45 50 51 52 53 54 55 56 60 61 66 69 70 71 73 76 77 78 81 82 83 84 85 86 87 88 90 91 95 96 99 100 101 102 104 105 108 110 111 112 113 114 115 117 123 124 126 128 131 134 135 139 140 142 143 144 145 148 149 150 156 158 160 163 166 167 168 170 172 173 175 176 177 179 180 185 190 191 193 194 195 197 198 199 205 206 207 210 b 211 0 1 0 2 4 8 9 10 12 14 15 18 22 23 25 31 32 36 37 38 42 44 45 50 51 52 53 54 55 56 60 61 66 69 70 71 73 76 77 78 81 82 83 84 85 86 87 88 90 91 95 96 99 100 101 102 104 105 108 110 111 112 113 114 115 117 123 124 126 128 131 134 135 139 140 142 143 144 145 148 149 150 156 158 160 163 166 167 168 170 172 173 175 176 177 179 180 185 190 191 193 194 195 197 198 199 205 206 207 210 # 12860 is_subset c a 211 0 1 0 2 4 8 9 10 12 14 15 18 22 23 25 31 32 36 37 38 42 44 45 50 51 52 53 54 55 56 60 61 66 69 70 71 73 76 77 78 81 82 83 84 85 86 87 88 90 91 95 96 99 100 101 102 104 105 108 110 111 112 113 114 115 117 123 124 126 128 131 134 135 139 140 142 143 144 145 148 149 150 156 158 160 163 166 167 168 170 172 173 175 176 177 179 180 185 190 191 193 194 195 197 198 199 205 206 207 210 b 211 1 1 f # 12861 is_subset c a 211 0 1 2 4 5 6 8 10 11 12 13 14 15 17 21 22 23 26 28 29 30 33 34 36 37 38 39 40 41 42 43 44 45 47 48 49 52 53 54 57 60 62 66 70 73 74 75 78 86 87 91 92 93 97 99 102 103 105 106 107 109 110 111 112 116 118 127 129 131 134 135 139 142 144 147 148 152 155 156 157 158 160 164 168 169 171 176 177 182 183 184 186 187 189 192 193 194 195 197 198 199 200 202 203 208 210 b 211 0 1 2 4 5 6 8 10 11 12 13 14 15 17 21 22 23 26 28 29 30 33 34 36 37 38 39 40 41 42 43 44 45 47 48 49 52 53 54 57 60 62 66 70 73 74 75 78 86 87 91 92 93 97 99 102 103 105 106 107 109 110 111 112 116 118 127 129 131 134 135 139 142 144 147 148 152 155 156 157 158 160 164 168 169 171 176 177 182 183 184 186 187 189 192 193 194 195 197 198 199 200 202 203 208 210 # 12862 is_subset c a 211 0 1 2 4 5 6 8 10 11 12 13 14 15 17 21 22 23 26 28 29 30 33 34 36 37 38 39 40 41 42 43 44 45 47 48 49 52 53 54 57 60 62 66 70 73 74 75 78 86 87 91 92 93 97 99 102 103 105 106 107 109 110 111 112 116 118 127 129 131 134 135 139 142 144 147 148 152 155 156 157 158 160 164 168 169 171 176 177 182 183 184 186 187 189 192 193 194 195 197 198 199 200 202 203 208 210 b 211 1 1 1 4 5 7 8 9 12 14 15 16 17 18 19 20 21 22 23 25 26 27 28 33 36 37 39 40 41 42 43 45 48 50 51 53 55 56 59 60 61 62 64 66 67 71 74 75 83 84 85 87 89 92 94 95 96 97 98 103 104 105 106 109 110 111 113 116 117 118 119 120 123 124 125 126 127 128 129 131 132 134 135 138 139 141 143 144 145 146 148 149 151 153 154 156 157 160 161 163 167 168 173 174 175 176 177 179 180 181 182 184 185 186 188 190 191 196 197 201 202 203 204 205 206 207 208 210 # 12863 is_subset c a 211 1 0 e b 211 1 0 e # 12864 is_subset c a 211 1 0 e b 211 0 0 e # 12865 is_subset c a 211 1 0 e b 211 1 0 e # 12866 is_subset c a 211 1 0 e b 211 0 0 f # 12867 is_subset c a 211 1 0 e b 211 1 0 e # 12868 is_subset c a 211 1 0 e b 211 0 0 0 2 4 5 8 9 12 13 14 16 17 18 22 25 26 27 30 37 38 39 46 49 51 59 62 63 64 67 70 71 72 76 78 80 84 85 86 87 88 90 93 97 104 106 107 108 109 111 112 113 114 115 117 118 120 122 126 129 130 131 135 136 138 141 144 146 148 149 150 151 153 158 159 161 162 167 168 171 173 175 176 179 180 181 182 184 186 187 188 189 190 191 192 195 196 197 198 205 208 209 # 12869 is_subset c a 211 1 0 f b 211 1 0 f # 12870 is_subset c a 211 1 0 f b 211 0 0 e # 12871 is_subset c a 211 1 0 f b 211 1 0 f # 12872 is_subset c a 211 1 0 f b 211 0 0 f # 12873 is_subset c a 211 1 0 f b 211 1 0 f # 12874 is_subset c a 211 1 0 f b 211 0 0 0 1 5 6 9 13 14 17 19 21 23 29 30 32 33 36 38 41 42 43 44 45 48 49 51 52 53 54 55 56 57 60 63 65 66 67 69 71 72 73 76 77 78 81 84 87 89 90 92 94 97 99 100 102 106 108 109 110 112 114 117 119 120 122 123 124 125 126 128 131 132 133 140 142 143 147 150 152 153 154 156 157 158 159 161 163 164 165 168 169 171 172 174 176 177 184 186 187 191 193 194 196 197 198 199 200 202 203 209 # 12875 is_subset c a 211 1 0 0 1 2 4 6 7 8 11 12 16 19 23 24 25 29 30 32 33 34 35 37 38 41 42 46 48 49 50 58 59 68 70 73 78 81 83 85 87 89 90 91 95 97 100 101 102 104 106 107 111 113 117 119 120 121 125 126 127 133 134 135 138 139 140 144 145 146 148 149 152 153 154 157 158 159 160 168 171 173 174 176 177 178 180 182 183 184 185 186 189 193 194 197 198 199 202 203 204 205 207 b 211 1 0 0 1 2 4 6 7 8 11 12 16 19 23 24 25 29 30 32 33 34 35 37 38 41 42 46 48 49 50 58 59 68 70 73 78 81 83 85 87 89 90 91 95 97 100 101 102 104 106 107 111 113 117 119 120 121 125 126 127 133 134 135 138 139 140 144 145 146 148 149 152 153 154 157 158 159 160 168 171 173 174 176 177 178 180 182 183 184 185 186 189 193 194 197 198 199 202 203 204 205 207 # 12876 is_subset c a 211 1 0 0 1 2 4 6 7 8 11 12 16 19 23 24 25 29 30 32 33 34 35 37 38 41 42 46 48 49 50 58 59 68 70 73 78 81 83 85 87 89 90 91 95 97 100 101 102 104 106 107 111 113 117 119 120 121 125 126 127 133 134 135 138 139 140 144 145 146 148 149 152 153 154 157 158 159 160 168 171 173 174 176 177 178 180 182 183 184 185 186 189 193 194 197 198 199 202 203 204 205 207 b 211 0 0 e # 12877 is_subset c a 211 1 0 3 5 6 7 9 11 14 15 16 17 18 19 20 21 23 24 26 27 28 30 31 32 34 37 39 40 41 42 46 47 49 50 52 54 55 57 63 64 67 70 76 83 86 87 91 92 94 96 97 99 103 104 105 107 109 110 112 116 121 125 126 127 128 130 136 138 141 142 146 150 151 152 157 162 163 165 166 169 170 171 172 174 176 177 178 180 181 183 190 191 192 198 199 202 204 205 206 207 209 210 b 211 1 0 3 5 6 7 9 11 14 15 16 17 18 19 20 21 23 24 26 27 28 30 31 32 34 37 39 40 41 42 46 47 49 50 52 54 55 57 63 64 67 70 76 83 86 87 91 92 94 96 97 99 103 104 105 107 109 110 112 116 121 125 126 127 128 130 136 138 141 142 146 150 151 152 157 162 163 165 166 169 170 171 172 174 176 177 178 180 181 183 190 191 192 198 199 202 204 205 206 207 209 210 # 12878 is_subset c a 211 1 0 3 5 6 7 9 11 14 15 16 17 18 19 20 21 23 24 26 27 28 30 31 32 34 37 39 40 41 42 46 47 49 50 52 54 55 57 63 64 67 70 76 83 86 87 91 92 94 96 97 99 103 104 105 107 109 110 112 116 121 125 126 127 128 130 136 138 141 142 146 150 151 152 157 162 163 165 166 169 170 171 172 174 176 177 178 180 181 183 190 191 192 198 199 202 204 205 206 207 209 210 b 211 0 0 f # 12879 is_subset c a 211 1 0 1 5 6 7 11 12 13 17 18 23 25 26 29 31 32 38 45 46 47 48 49 53 55 56 58 64 65 66 67 68 69 73 74 75 76 77 78 79 83 84 85 87 90 91 92 96 99 100 101 104 106 107 109 110 111 112 115 117 118 119 121 122 124 126 127 128 130 131 134 136 137 140 142 143 144 146 151 156 157 164 166 167 169 170 171 173 174 175 179 180 182 184 189 190 192 194 195 197 199 200 202 203 206 207 208 210 b 211 1 0 1 5 6 7 11 12 13 17 18 23 25 26 29 31 32 38 45 46 47 48 49 53 55 56 58 64 65 66 67 68 69 73 74 75 76 77 78 79 83 84 85 87 90 91 92 96 99 100 101 104 106 107 109 110 111 112 115 117 118 119 121 122 124 126 127 128 130 131 134 136 137 140 142 143 144 146 151 156 157 164 166 167 169 170 171 173 174 175 179 180 182 184 189 190 192 194 195 197 199 200 202 203 206 207 208 210 # 12880 is_subset c a 211 1 0 1 5 6 7 11 12 13 17 18 23 25 26 29 31 32 38 45 46 47 48 49 53 55 56 58 64 65 66 67 68 69 73 74 75 76 77 78 79 83 84 85 87 90 91 92 96 99 100 101 104 106 107 109 110 111 112 115 117 118 119 121 122 124 126 127 128 130 131 134 136 137 140 142 143 144 146 151 156 157 164 166 167 169 170 171 173 174 175 179 180 182 184 189 190 192 194 195 197 199 200 202 203 206 207 208 210 b 211 0 0 0 1 2 6 7 10 11 14 16 17 18 24 25 27 28 29 30 31 33 34 35 36 37 38 41 43 46 47 49 51 52 53 55 57 62 63 64 65 66 67 68 69 71 72 73 74 77 79 81 85 87 89 91 92 94 95 97 98 99 100 102 103 105 107 110 111 115 116 117 118 121 132 137 139 142 148 149 150 152 154 156 158 160 162 163 164 167 169 170 174 175 176 179 184 187 188 191 194 196 199 201 208 210 # 12881 is_subset c a 211 1 0 e b 211 1 0 e # 12882 is_subset c a 211 1 0 e b 211 0 1 e # 12883 is_subset c a 211 1 0 e b 211 1 0 e # 12884 is_subset c a 211 1 0 e b 211 0 1 f # 12885 is_subset c a 211 1 0 e b 211 1 0 e # 12886 is_subset c a 211 1 0 e b 211 0 1 0 1 6 9 11 13 14 15 17 18 21 22 23 26 27 30 33 35 38 39 42 43 47 51 55 56 58 59 60 65 66 67 68 69 70 74 75 76 80 81 84 85 87 90 92 93 96 99 101 102 103 105 106 110 112 114 115 116 118 120 125 126 129 130 131 132 133 134 136 137 138 140 141 142 143 145 146 149 153 154 155 156 158 161 164 166 167 169 172 179 180 181 184 185 186 187 189 191 192 193 195 198 199 202 204 206 # 12887 is_subset c a 211 1 0 f b 211 1 0 f # 12888 is_subset c a 211 1 0 f b 211 0 1 e # 12889 is_subset c a 211 1 0 f b 211 1 0 f # 12890 is_subset c a 211 1 0 f b 211 0 1 f # 12891 is_subset c a 211 1 0 f b 211 1 0 f # 12892 is_subset c a 211 1 0 f b 211 0 1 2 3 5 6 9 10 12 13 14 15 18 19 20 22 26 27 28 33 34 35 36 37 38 39 41 45 46 47 49 50 51 52 53 56 58 59 62 63 65 66 67 68 69 70 75 78 85 88 90 92 93 95 96 98 99 100 101 102 108 110 112 115 117 122 130 133 134 138 140 141 142 147 149 150 151 152 153 154 156 162 163 165 167 174 175 179 180 183 188 189 190 193 194 195 196 198 203 207 209 210 # 12893 is_subset c a 211 1 0 4 5 6 7 10 11 12 14 17 22 24 26 27 28 29 30 33 34 35 36 38 40 41 42 43 45 48 50 52 53 55 58 59 60 61 64 65 70 72 73 78 80 81 83 84 85 86 87 89 90 92 97 98 99 100 101 103 107 108 109 111 112 113 114 116 117 119 120 123 124 125 127 130 132 133 137 140 141 146 152 155 158 159 160 163 165 167 169 173 174 175 177 179 184 185 186 189 190 191 194 195 196 197 198 200 202 207 210 b 211 1 0 4 5 6 7 10 11 12 14 17 22 24 26 27 28 29 30 33 34 35 36 38 40 41 42 43 45 48 50 52 53 55 58 59 60 61 64 65 70 72 73 78 80 81 83 84 85 86 87 89 90 92 97 98 99 100 101 103 107 108 109 111 112 113 114 116 117 119 120 123 124 125 127 130 132 133 137 140 141 146 152 155 158 159 160 163 165 167 169 173 174 175 177 179 184 185 186 189 190 191 194 195 196 197 198 200 202 207 210 # 12894 is_subset c a 211 1 0 4 5 6 7 10 11 12 14 17 22 24 26 27 28 29 30 33 34 35 36 38 40 41 42 43 45 48 50 52 53 55 58 59 60 61 64 65 70 72 73 78 80 81 83 84 85 86 87 89 90 92 97 98 99 100 101 103 107 108 109 111 112 113 114 116 117 119 120 123 124 125 127 130 132 133 137 140 141 146 152 155 158 159 160 163 165 167 169 173 174 175 177 179 184 185 186 189 190 191 194 195 196 197 198 200 202 207 210 b 211 0 1 e # 12895 is_subset c a 211 1 0 1 3 4 5 6 12 14 17 19 20 22 23 24 29 31 32 34 35 38 39 40 42 43 44 45 48 51 52 53 54 55 57 59 60 62 64 68 71 74 77 81 82 84 85 87 88 90 92 94 95 96 99 101 102 103 104 105 108 109 114 117 119 121 128 129 132 135 138 139 143 144 145 146 148 153 154 155 159 161 166 168 169 173 174 176 177 178 179 181 184 187 188 190 196 198 199 202 203 205 207 208 210 b 211 1 0 1 3 4 5 6 12 14 17 19 20 22 23 24 29 31 32 34 35 38 39 40 42 43 44 45 48 51 52 53 54 55 57 59 60 62 64 68 71 74 77 81 82 84 85 87 88 90 92 94 95 96 99 101 102 103 104 105 108 109 114 117 119 121 128 129 132 135 138 139 143 144 145 146 148 153 154 155 159 161 166 168 169 173 174 176 177 178 179 181 184 187 188 190 196 198 199 202 203 205 207 208 210 # 12896 is_subset c a 211 1 0 1 3 4 5 6 12 14 17 19 20 22 23 24 29 31 32 34 35 38 39 40 42 43 44 45 48 51 52 53 54 55 57 59 60 62 64 68 71 74 77 81 82 84 85 87 88 90 92 94 95 96 99 101 102 103 104 105 108 109 114 117 119 121 128 129 132 135 138 139 143 144 145 146 148 153 154 155 159 161 166 168 169 173 174 176 177 178 179 181 184 187 188 190 196 198 199 202 203 205 207 208 210 b 211 0 1 f # 12897 is_subset c a 211 1 0 2 3 4 6 7 8 10 12 14 16 19 20 21 22 23 24 25 27 28 30 31 32 33 34 35 36 37 38 39 41 43 44 45 47 50 51 54 57 59 61 62 64 65 66 67 69 70 71 73 74 76 77 83 84 85 86 87 88 90 93 94 95 96 97 98 102 103 105 108 109 110 113 114 115 116 117 118 119 121 124 127 128 130 132 133 136 137 138 140 142 145 148 151 153 157 158 161 162 163 164 167 169 173 175 176 177 180 181 184 185 188 199 202 203 206 210 b 211 1 0 2 3 4 6 7 8 10 12 14 16 19 20 21 22 23 24 25 27 28 30 31 32 33 34 35 36 37 38 39 41 43 44 45 47 50 51 54 57 59 61 62 64 65 66 67 69 70 71 73 74 76 77 83 84 85 86 87 88 90 93 94 95 96 97 98 102 103 105 108 109 110 113 114 115 116 117 118 119 121 124 127 128 130 132 133 136 137 138 140 142 145 148 151 153 157 158 161 162 163 164 167 169 173 175 176 177 180 181 184 185 188 199 202 203 206 210 # 12898 is_subset c a 211 1 0 2 3 4 6 7 8 10 12 14 16 19 20 21 22 23 24 25 27 28 30 31 32 33 34 35 36 37 38 39 41 43 44 45 47 50 51 54 57 59 61 62 64 65 66 67 69 70 71 73 74 76 77 83 84 85 86 87 88 90 93 94 95 96 97 98 102 103 105 108 109 110 113 114 115 116 117 118 119 121 124 127 128 130 132 133 136 137 138 140 142 145 148 151 153 157 158 161 162 163 164 167 169 173 175 176 177 180 181 184 185 188 199 202 203 206 210 b 211 0 1 6 7 12 14 16 18 19 20 22 23 24 26 27 30 31 32 33 38 40 42 43 44 45 47 48 49 51 55 58 59 61 62 64 65 67 71 72 74 77 80 81 82 84 88 92 95 97 98 104 106 107 109 112 115 116 117 120 121 122 123 124 126 130 131 132 134 137 139 140 141 142 144 147 153 157 166 167 168 170 171 172 173 175 178 180 181 182 184 185 188 189 190 193 194 195 198 200 202 203 206 208 210 # 12899 is_subset c a 211 1 0 e b 211 1 0 e # 12900 is_subset c a 211 1 0 e b 211 1 0 e # 12901 is_subset c a 211 1 0 e b 211 1 0 e # 12902 is_subset c a 211 1 0 e b 211 1 0 f # 12903 is_subset c a 211 1 0 e b 211 1 0 e # 12904 is_subset c a 211 1 0 e b 211 1 0 0 2 3 5 7 8 12 14 16 19 21 22 23 24 26 28 31 32 34 36 38 39 40 42 44 45 46 47 50 51 52 53 54 55 56 59 60 61 62 66 68 69 70 73 74 76 77 78 81 85 89 92 94 95 96 102 105 106 108 109 110 113 115 116 117 121 122 127 128 132 134 135 141 142 143 144 146 147 148 154 156 157 159 161 162 165 167 177 181 182 185 186 187 188 190 193 195 197 198 199 203 204 209 210 # 12905 is_subset c a 211 1 0 f b 211 1 0 f # 12906 is_subset c a 211 1 0 f b 211 1 0 e # 12907 is_subset c a 211 1 0 f b 211 1 0 f # 12908 is_subset c a 211 1 0 f b 211 1 0 f # 12909 is_subset c a 211 1 0 f b 211 1 0 f # 12910 is_subset c a 211 1 0 f b 211 1 0 0 1 2 4 7 9 10 14 16 17 19 20 21 22 23 26 27 28 29 31 34 36 39 40 44 47 49 54 55 56 57 58 59 60 62 65 66 68 71 73 77 78 82 83 84 85 86 87 88 89 90 92 93 94 98 100 101 104 105 107 111 112 114 115 116 117 118 119 120 121 123 124 125 129 130 132 135 136 137 138 154 159 165 166 168 169 170 172 174 176 178 180 182 184 185 188 189 195 199 204 205 206 207 209 # 12911 is_subset c a 211 1 0 0 1 2 4 5 6 7 8 9 11 12 13 15 16 17 18 19 24 27 29 30 32 33 34 35 36 38 41 44 45 46 47 48 49 50 53 54 57 58 59 60 61 63 64 65 66 67 71 73 74 76 77 78 79 80 81 82 84 85 87 88 90 91 93 94 96 100 106 107 109 110 113 117 121 122 123 124 125 127 129 133 134 136 143 144 145 146 148 150 153 157 159 160 161 162 163 165 169 170 178 182 183 186 187 191 192 194 198 201 202 203 204 206 209 b 211 1 0 0 1 2 4 5 6 7 8 9 11 12 13 15 16 17 18 19 24 27 29 30 32 33 34 35 36 38 41 44 45 46 47 48 49 50 53 54 57 58 59 60 61 63 64 65 66 67 71 73 74 76 77 78 79 80 81 82 84 85 87 88 90 91 93 94 96 100 106 107 109 110 113 117 121 122 123 124 125 127 129 133 134 136 143 144 145 146 148 150 153 157 159 160 161 162 163 165 169 170 178 182 183 186 187 191 192 194 198 201 202 203 204 206 209 # 12912 is_subset c a 211 1 0 0 1 2 4 5 6 7 8 9 11 12 13 15 16 17 18 19 24 27 29 30 32 33 34 35 36 38 41 44 45 46 47 48 49 50 53 54 57 58 59 60 61 63 64 65 66 67 71 73 74 76 77 78 79 80 81 82 84 85 87 88 90 91 93 94 96 100 106 107 109 110 113 117 121 122 123 124 125 127 129 133 134 136 143 144 145 146 148 150 153 157 159 160 161 162 163 165 169 170 178 182 183 186 187 191 192 194 198 201 202 203 204 206 209 b 211 1 0 e # 12913 is_subset c a 211 1 0 0 3 6 8 9 10 11 12 14 19 20 22 28 30 31 35 36 41 45 46 47 50 51 53 55 56 57 59 63 65 66 69 70 72 73 74 76 78 80 81 85 86 88 91 93 94 95 96 99 101 104 106 107 108 109 114 115 117 119 120 121 122 125 129 131 132 133 135 136 137 138 139 140 141 145 147 148 149 150 151 153 155 157 159 165 166 168 169 170 172 174 177 178 179 180 181 182 185 187 188 190 192 196 199 203 204 205 207 208 210 b 211 1 0 0 3 6 8 9 10 11 12 14 19 20 22 28 30 31 35 36 41 45 46 47 50 51 53 55 56 57 59 63 65 66 69 70 72 73 74 76 78 80 81 85 86 88 91 93 94 95 96 99 101 104 106 107 108 109 114 115 117 119 120 121 122 125 129 131 132 133 135 136 137 138 139 140 141 145 147 148 149 150 151 153 155 157 159 165 166 168 169 170 172 174 177 178 179 180 181 182 185 187 188 190 192 196 199 203 204 205 207 208 210 # 12914 is_subset c a 211 1 0 0 3 6 8 9 10 11 12 14 19 20 22 28 30 31 35 36 41 45 46 47 50 51 53 55 56 57 59 63 65 66 69 70 72 73 74 76 78 80 81 85 86 88 91 93 94 95 96 99 101 104 106 107 108 109 114 115 117 119 120 121 122 125 129 131 132 133 135 136 137 138 139 140 141 145 147 148 149 150 151 153 155 157 159 165 166 168 169 170 172 174 177 178 179 180 181 182 185 187 188 190 192 196 199 203 204 205 207 208 210 b 211 1 0 f # 12915 is_subset c a 211 1 0 0 1 2 3 5 9 11 12 15 17 20 21 23 24 27 30 35 39 41 43 45 46 47 50 56 57 58 61 62 63 65 66 71 72 73 74 77 78 79 81 83 85 86 88 89 90 91 92 93 94 95 96 100 101 102 103 105 106 107 109 110 111 112 118 121 124 125 129 130 133 134 135 137 138 139 140 141 142 143 147 148 157 158 159 163 166 167 169 170 172 176 177 181 182 183 186 187 188 189 190 193 201 202 205 206 208 210 b 211 1 0 0 1 2 3 5 9 11 12 15 17 20 21 23 24 27 30 35 39 41 43 45 46 47 50 56 57 58 61 62 63 65 66 71 72 73 74 77 78 79 81 83 85 86 88 89 90 91 92 93 94 95 96 100 101 102 103 105 106 107 109 110 111 112 118 121 124 125 129 130 133 134 135 137 138 139 140 141 142 143 147 148 157 158 159 163 166 167 169 170 172 176 177 181 182 183 186 187 188 189 190 193 201 202 205 206 208 210 # 12916 is_subset c a 211 1 0 0 1 2 3 5 9 11 12 15 17 20 21 23 24 27 30 35 39 41 43 45 46 47 50 56 57 58 61 62 63 65 66 71 72 73 74 77 78 79 81 83 85 86 88 89 90 91 92 93 94 95 96 100 101 102 103 105 106 107 109 110 111 112 118 121 124 125 129 130 133 134 135 137 138 139 140 141 142 143 147 148 157 158 159 163 166 167 169 170 172 176 177 181 182 183 186 187 188 189 190 193 201 202 205 206 208 210 b 211 1 0 0 3 5 6 8 10 12 13 14 19 20 24 29 30 32 34 37 38 39 41 43 44 45 47 49 50 51 56 59 64 66 68 75 78 79 81 82 84 85 86 87 90 91 92 93 94 95 97 98 104 105 110 113 114 116 117 118 120 121 122 123 124 125 127 128 131 132 133 137 138 139 141 143 146 148 149 151 152 154 160 161 165 166 167 168 169 170 173 174 175 177 180 181 183 185 187 189 190 191 195 196 198 199 201 202 203 204 205 206 207 208 209 # 12917 is_subset c a 211 1 0 e b 211 1 0 e # 12918 is_subset c a 211 1 0 e b 211 1 1 e # 12919 is_subset c a 211 1 0 e b 211 1 0 e # 12920 is_subset c a 211 1 0 e b 211 1 1 f # 12921 is_subset c a 211 1 0 e b 211 1 0 e # 12922 is_subset c a 211 1 0 e b 211 1 1 0 1 3 4 6 7 8 9 10 11 13 16 17 19 20 21 22 23 24 25 27 28 30 31 36 38 39 41 44 45 46 47 49 52 55 56 57 59 64 65 66 67 69 70 71 76 77 78 80 82 83 84 86 87 88 92 93 94 95 96 98 103 104 106 107 109 118 122 126 128 129 130 134 135 136 137 138 140 141 142 146 147 149 151 153 155 160 162 165 168 169 171 172 177 178 179 180 182 183 186 187 189 193 194 195 196 197 198 200 203 204 # 12923 is_subset c a 211 1 0 f b 211 1 0 f # 12924 is_subset c a 211 1 0 f b 211 1 1 e # 12925 is_subset c a 211 1 0 f b 211 1 0 f # 12926 is_subset c a 211 1 0 f b 211 1 1 f # 12927 is_subset c a 211 1 0 f b 211 1 0 f # 12928 is_subset c a 211 1 0 f b 211 1 1 4 6 8 9 10 13 15 18 19 25 29 30 33 34 35 37 40 42 43 44 46 49 51 53 54 55 59 61 64 65 68 69 70 73 78 79 83 84 86 88 89 92 94 95 102 106 107 108 112 113 115 117 120 122 123 124 126 128 130 131 132 136 140 141 142 144 145 148 150 151 152 154 155 156 157 159 162 164 166 170 172 173 174 175 176 177 178 179 181 182 185 188 189 190 193 194 195 196 197 200 202 203 206 207 209 210 # 12929 is_subset c a 211 1 0 0 4 6 7 8 9 10 13 14 16 17 18 20 22 23 28 31 32 33 36 39 43 46 47 48 49 51 52 56 57 58 59 62 63 64 67 68 69 70 74 75 77 78 80 81 83 85 87 88 90 91 94 96 102 103 104 105 106 108 110 113 115 116 118 120 124 126 127 128 132 133 136 138 140 142 146 148 149 150 154 156 158 159 160 165 166 167 168 169 171 174 175 176 177 178 180 181 182 183 184 185 187 191 193 195 198 204 210 b 211 1 0 0 4 6 7 8 9 10 13 14 16 17 18 20 22 23 28 31 32 33 36 39 43 46 47 48 49 51 52 56 57 58 59 62 63 64 67 68 69 70 74 75 77 78 80 81 83 85 87 88 90 91 94 96 102 103 104 105 106 108 110 113 115 116 118 120 124 126 127 128 132 133 136 138 140 142 146 148 149 150 154 156 158 159 160 165 166 167 168 169 171 174 175 176 177 178 180 181 182 183 184 185 187 191 193 195 198 204 210 # 12930 is_subset c a 211 1 0 0 4 6 7 8 9 10 13 14 16 17 18 20 22 23 28 31 32 33 36 39 43 46 47 48 49 51 52 56 57 58 59 62 63 64 67 68 69 70 74 75 77 78 80 81 83 85 87 88 90 91 94 96 102 103 104 105 106 108 110 113 115 116 118 120 124 126 127 128 132 133 136 138 140 142 146 148 149 150 154 156 158 159 160 165 166 167 168 169 171 174 175 176 177 178 180 181 182 183 184 185 187 191 193 195 198 204 210 b 211 1 1 e # 12931 is_subset c a 211 1 0 0 1 2 3 4 5 7 8 11 12 13 15 17 19 21 23 26 27 28 30 31 33 34 36 37 38 39 42 47 49 50 53 55 58 61 62 63 64 65 66 67 68 69 74 77 79 80 81 84 88 90 93 94 97 98 100 104 106 109 110 111 112 115 116 120 122 123 124 125 128 130 131 132 134 137 138 139 140 141 142 143 144 145 146 147 153 156 158 160 161 164 166 168 169 171 173 176 182 183 185 190 193 194 197 198 201 202 203 204 207 208 209 b 211 1 0 0 1 2 3 4 5 7 8 11 12 13 15 17 19 21 23 26 27 28 30 31 33 34 36 37 38 39 42 47 49 50 53 55 58 61 62 63 64 65 66 67 68 69 74 77 79 80 81 84 88 90 93 94 97 98 100 104 106 109 110 111 112 115 116 120 122 123 124 125 128 130 131 132 134 137 138 139 140 141 142 143 144 145 146 147 153 156 158 160 161 164 166 168 169 171 173 176 182 183 185 190 193 194 197 198 201 202 203 204 207 208 209 # 12932 is_subset c a 211 1 0 0 1 2 3 4 5 7 8 11 12 13 15 17 19 21 23 26 27 28 30 31 33 34 36 37 38 39 42 47 49 50 53 55 58 61 62 63 64 65 66 67 68 69 74 77 79 80 81 84 88 90 93 94 97 98 100 104 106 109 110 111 112 115 116 120 122 123 124 125 128 130 131 132 134 137 138 139 140 141 142 143 144 145 146 147 153 156 158 160 161 164 166 168 169 171 173 176 182 183 185 190 193 194 197 198 201 202 203 204 207 208 209 b 211 1 1 f # 12933 is_subset c a 211 1 0 4 6 7 8 10 11 13 14 15 16 20 23 25 30 31 34 37 40 41 44 45 47 49 50 55 56 57 63 66 67 68 71 75 77 78 79 81 83 84 85 87 88 89 92 93 94 96 97 99 101 102 107 110 111 112 115 117 118 120 123 129 131 135 136 137 139 140 142 143 146 147 149 150 151 154 155 156 157 158 160 166 172 173 178 181 183 190 191 192 196 199 200 201 204 206 207 208 209 b 211 1 0 4 6 7 8 10 11 13 14 15 16 20 23 25 30 31 34 37 40 41 44 45 47 49 50 55 56 57 63 66 67 68 71 75 77 78 79 81 83 84 85 87 88 89 92 93 94 96 97 99 101 102 107 110 111 112 115 117 118 120 123 129 131 135 136 137 139 140 142 143 146 147 149 150 151 154 155 156 157 158 160 166 172 173 178 181 183 190 191 192 196 199 200 201 204 206 207 208 209 # 12934 is_subset c a 211 1 0 4 6 7 8 10 11 13 14 15 16 20 23 25 30 31 34 37 40 41 44 45 47 49 50 55 56 57 63 66 67 68 71 75 77 78 79 81 83 84 85 87 88 89 92 93 94 96 97 99 101 102 107 110 111 112 115 117 118 120 123 129 131 135 136 137 139 140 142 143 146 147 149 150 151 154 155 156 157 158 160 166 172 173 178 181 183 190 191 192 196 199 200 201 204 206 207 208 209 b 211 1 1 0 1 2 3 7 9 10 13 14 15 16 17 19 20 21 22 24 26 27 29 34 35 39 40 47 50 51 53 58 60 62 65 67 68 69 70 71 72 76 77 79 81 82 83 84 86 87 89 94 95 96 98 99 100 101 102 103 107 110 113 119 121 124 127 129 130 132 133 135 137 138 139 141 143 144 146 148 150 151 152 155 157 158 159 160 161 164 165 168 171 174 176 177 178 179 180 181 182 183 184 186 188 189 191 192 193 195 196 197 199 201 202 203 209 210 # 12935 is_subset c a 211 1 1 e b 211 1 1 e # 12936 is_subset c a 211 1 1 e b 211 0 0 e # 12937 is_subset c a 211 1 1 e b 211 1 1 e # 12938 is_subset c a 211 1 1 e b 211 0 0 f # 12939 is_subset c a 211 1 1 e b 211 1 1 e # 12940 is_subset c a 211 1 1 e b 211 0 0 1 2 4 5 8 10 11 13 14 16 17 18 20 23 24 25 26 27 28 29 30 32 33 36 37 38 39 40 47 52 53 54 57 60 62 63 67 68 69 70 71 75 76 77 78 79 80 83 84 89 90 93 94 96 99 102 103 108 111 114 116 117 118 119 120 121 123 124 127 129 130 131 133 135 136 137 138 139 142 143 144 145 148 153 155 156 157 158 160 165 166 168 169 171 174 175 176 177 179 181 184 185 187 188 191 192 194 195 197 199 200 202 204 205 207 208 209 # 12941 is_subset c a 211 1 1 f b 211 1 1 f # 12942 is_subset c a 211 1 1 f b 211 0 0 e # 12943 is_subset c a 211 1 1 f b 211 1 1 f # 12944 is_subset c a 211 1 1 f b 211 0 0 f # 12945 is_subset c a 211 1 1 f b 211 1 1 f # 12946 is_subset c a 211 1 1 f b 211 0 0 0 1 2 6 11 12 13 14 15 17 20 21 25 28 30 31 32 36 38 49 50 53 55 56 57 59 61 65 66 68 70 72 73 74 75 82 83 86 89 90 92 94 98 100 101 102 103 104 105 106 107 115 117 118 119 120 121 123 125 127 130 133 135 137 138 139 143 144 150 155 157 158 159 161 163 166 167 169 170 171 173 175 177 179 183 185 186 187 188 189 193 195 197 198 199 200 201 203 204 205 206 208 # 12947 is_subset c a 211 1 1 2 4 5 7 8 12 13 15 18 19 30 31 32 35 37 38 39 41 43 44 45 46 52 53 54 57 58 59 62 64 80 81 82 83 85 86 87 88 89 94 99 101 103 105 106 108 110 111 113 115 116 121 122 126 127 128 132 133 134 137 138 141 143 144 145 149 150 152 153 154 157 158 159 160 163 167 169 171 172 177 178 180 181 182 183 184 185 187 188 190 191 192 194 195 197 198 199 200 201 203 205 207 208 b 211 1 1 2 4 5 7 8 12 13 15 18 19 30 31 32 35 37 38 39 41 43 44 45 46 52 53 54 57 58 59 62 64 80 81 82 83 85 86 87 88 89 94 99 101 103 105 106 108 110 111 113 115 116 121 122 126 127 128 132 133 134 137 138 141 143 144 145 149 150 152 153 154 157 158 159 160 163 167 169 171 172 177 178 180 181 182 183 184 185 187 188 190 191 192 194 195 197 198 199 200 201 203 205 207 208 # 12948 is_subset c a 211 1 1 2 4 5 7 8 12 13 15 18 19 30 31 32 35 37 38 39 41 43 44 45 46 52 53 54 57 58 59 62 64 80 81 82 83 85 86 87 88 89 94 99 101 103 105 106 108 110 111 113 115 116 121 122 126 127 128 132 133 134 137 138 141 143 144 145 149 150 152 153 154 157 158 159 160 163 167 169 171 172 177 178 180 181 182 183 184 185 187 188 190 191 192 194 195 197 198 199 200 201 203 205 207 208 b 211 0 0 e # 12949 is_subset c a 211 1 1 0 3 4 7 8 10 11 16 18 21 22 25 28 29 31 32 33 34 35 36 38 39 40 41 42 43 47 48 55 57 58 60 63 66 68 69 72 73 75 77 78 79 80 84 85 86 88 89 90 95 96 97 98 99 100 105 112 113 114 115 117 120 122 124 125 126 127 128 129 130 131 133 136 137 138 142 147 149 150 151 153 156 159 161 164 165 166 167 169 170 171 173 174 175 180 185 187 188 189 190 192 194 195 196 197 200 206 210 b 211 1 1 0 3 4 7 8 10 11 16 18 21 22 25 28 29 31 32 33 34 35 36 38 39 40 41 42 43 47 48 55 57 58 60 63 66 68 69 72 73 75 77 78 79 80 84 85 86 88 89 90 95 96 97 98 99 100 105 112 113 114 115 117 120 122 124 125 126 127 128 129 130 131 133 136 137 138 142 147 149 150 151 153 156 159 161 164 165 166 167 169 170 171 173 174 175 180 185 187 188 189 190 192 194 195 196 197 200 206 210 # 12950 is_subset c a 211 1 1 0 3 4 7 8 10 11 16 18 21 22 25 28 29 31 32 33 34 35 36 38 39 40 41 42 43 47 48 55 57 58 60 63 66 68 69 72 73 75 77 78 79 80 84 85 86 88 89 90 95 96 97 98 99 100 105 112 113 114 115 117 120 122 124 125 126 127 128 129 130 131 133 136 137 138 142 147 149 150 151 153 156 159 161 164 165 166 167 169 170 171 173 174 175 180 185 187 188 189 190 192 194 195 196 197 200 206 210 b 211 0 0 f # 12951 is_subset c a 211 1 1 1 3 9 10 12 17 18 19 20 22 23 24 26 28 33 34 35 36 38 41 42 43 45 48 51 52 54 55 57 58 63 64 67 68 71 73 74 75 76 79 80 82 83 84 86 89 92 93 95 97 98 103 108 109 111 113 114 115 119 121 124 133 135 136 137 138 139 143 146 147 148 149 151 152 153 158 160 162 164 166 167 168 169 170 177 180 181 183 187 188 189 191 194 197 200 201 202 206 207 209 210 b 211 1 1 1 3 9 10 12 17 18 19 20 22 23 24 26 28 33 34 35 36 38 41 42 43 45 48 51 52 54 55 57 58 63 64 67 68 71 73 74 75 76 79 80 82 83 84 86 89 92 93 95 97 98 103 108 109 111 113 114 115 119 121 124 133 135 136 137 138 139 143 146 147 148 149 151 152 153 158 160 162 164 166 167 168 169 170 177 180 181 183 187 188 189 191 194 197 200 201 202 206 207 209 210 # 12952 is_subset c a 211 1 1 1 3 9 10 12 17 18 19 20 22 23 24 26 28 33 34 35 36 38 41 42 43 45 48 51 52 54 55 57 58 63 64 67 68 71 73 74 75 76 79 80 82 83 84 86 89 92 93 95 97 98 103 108 109 111 113 114 115 119 121 124 133 135 136 137 138 139 143 146 147 148 149 151 152 153 158 160 162 164 166 167 168 169 170 177 180 181 183 187 188 189 191 194 197 200 201 202 206 207 209 210 b 211 0 0 1 3 5 7 8 15 16 18 21 23 25 27 28 30 36 39 40 41 45 46 49 50 51 52 56 57 59 63 68 69 71 74 75 77 78 80 81 83 84 85 87 88 90 92 94 96 98 99 100 101 107 112 115 117 118 119 121 123 127 129 130 132 134 136 142 144 148 155 156 158 162 164 165 166 168 170 172 174 175 176 178 179 180 182 184 188 189 190 194 197 198 200 202 203 204 205 207 # 12953 is_subset c a 211 1 1 e b 211 1 1 e # 12954 is_subset c a 211 1 1 e b 211 0 1 e # 12955 is_subset c a 211 1 1 e b 211 1 1 e # 12956 is_subset c a 211 1 1 e b 211 0 1 f # 12957 is_subset c a 211 1 1 e b 211 1 1 e # 12958 is_subset c a 211 1 1 e b 211 0 1 1 3 5 6 7 9 10 11 15 19 21 23 24 27 29 31 32 33 39 41 42 43 46 47 51 53 54 58 59 63 64 65 71 74 75 77 79 80 81 82 84 88 90 91 92 94 95 99 100 101 102 104 105 106 108 111 114 116 118 120 121 123 127 128 129 130 133 134 136 137 138 143 144 148 149 150 151 152 155 156 157 158 159 160 165 166 167 168 169 171 173 174 175 176 177 179 180 183 184 185 186 187 188 190 191 192 193 194 196 197 199 201 202 203 206 # 12959 is_subset c a 211 1 1 f b 211 1 1 f # 12960 is_subset c a 211 1 1 f b 211 0 1 e # 12961 is_subset c a 211 1 1 f b 211 1 1 f # 12962 is_subset c a 211 1 1 f b 211 0 1 f # 12963 is_subset c a 211 1 1 f b 211 1 1 f # 12964 is_subset c a 211 1 1 f b 211 0 1 1 2 4 5 6 7 8 15 18 20 21 22 27 28 30 33 34 35 37 38 42 43 44 54 56 57 59 63 64 66 68 70 72 74 76 78 80 84 86 87 89 90 91 98 100 102 104 105 106 107 109 110 112 115 116 119 122 126 127 132 134 135 136 137 138 141 145 147 149 150 152 153 154 156 157 161 162 169 171 172 173 175 176 178 181 182 184 185 186 187 191 193 194 198 199 203 205 206 209 # 12965 is_subset c a 211 1 1 1 3 4 5 9 10 12 13 19 20 23 24 26 27 29 31 32 33 34 36 38 40 41 43 45 47 49 50 51 54 55 58 59 62 63 65 67 68 71 73 74 75 79 82 87 88 90 92 93 96 97 99 102 105 107 109 112 114 116 119 120 122 123 128 130 132 133 134 137 138 139 140 143 144 148 149 151 154 155 157 158 161 162 164 166 169 170 174 175 180 181 182 184 185 186 188 189 190 192 193 194 195 198 199 201 202 205 207 209 210 b 211 1 1 1 3 4 5 9 10 12 13 19 20 23 24 26 27 29 31 32 33 34 36 38 40 41 43 45 47 49 50 51 54 55 58 59 62 63 65 67 68 71 73 74 75 79 82 87 88 90 92 93 96 97 99 102 105 107 109 112 114 116 119 120 122 123 128 130 132 133 134 137 138 139 140 143 144 148 149 151 154 155 157 158 161 162 164 166 169 170 174 175 180 181 182 184 185 186 188 189 190 192 193 194 195 198 199 201 202 205 207 209 210 # 12966 is_subset c a 211 1 1 1 3 4 5 9 10 12 13 19 20 23 24 26 27 29 31 32 33 34 36 38 40 41 43 45 47 49 50 51 54 55 58 59 62 63 65 67 68 71 73 74 75 79 82 87 88 90 92 93 96 97 99 102 105 107 109 112 114 116 119 120 122 123 128 130 132 133 134 137 138 139 140 143 144 148 149 151 154 155 157 158 161 162 164 166 169 170 174 175 180 181 182 184 185 186 188 189 190 192 193 194 195 198 199 201 202 205 207 209 210 b 211 0 1 e # 12967 is_subset c a 211 1 1 1 2 4 5 11 13 17 19 22 23 25 32 34 35 36 38 40 45 46 48 49 51 54 55 57 58 59 66 68 69 70 71 76 77 78 79 80 82 84 86 89 91 94 95 96 97 100 106 109 113 114 117 118 119 120 121 122 123 125 126 128 129 130 131 133 134 135 137 139 143 146 147 148 149 150 151 152 153 154 162 163 165 167 168 169 170 174 175 177 178 180 181 185 186 187 191 194 195 199 200 206 207 209 b 211 1 1 1 2 4 5 11 13 17 19 22 23 25 32 34 35 36 38 40 45 46 48 49 51 54 55 57 58 59 66 68 69 70 71 76 77 78 79 80 82 84 86 89 91 94 95 96 97 100 106 109 113 114 117 118 119 120 121 122 123 125 126 128 129 130 131 133 134 135 137 139 143 146 147 148 149 150 151 152 153 154 162 163 165 167 168 169 170 174 175 177 178 180 181 185 186 187 191 194 195 199 200 206 207 209 # 12968 is_subset c a 211 1 1 1 2 4 5 11 13 17 19 22 23 25 32 34 35 36 38 40 45 46 48 49 51 54 55 57 58 59 66 68 69 70 71 76 77 78 79 80 82 84 86 89 91 94 95 96 97 100 106 109 113 114 117 118 119 120 121 122 123 125 126 128 129 130 131 133 134 135 137 139 143 146 147 148 149 150 151 152 153 154 162 163 165 167 168 169 170 174 175 177 178 180 181 185 186 187 191 194 195 199 200 206 207 209 b 211 0 1 f # 12969 is_subset c a 211 1 1 0 2 4 5 7 12 14 15 16 19 22 24 27 32 34 35 36 38 40 41 43 48 49 50 51 53 57 59 61 63 64 66 67 73 74 75 79 82 86 89 91 92 94 95 96 98 100 101 104 107 108 109 110 112 113 114 118 119 121 122 126 128 129 131 132 133 137 140 142 143 146 147 148 149 150 152 153 154 157 161 164 165 166 168 170 172 173 180 182 183 184 186 191 193 194 197 198 200 201 202 203 204 205 206 207 b 211 1 1 0 2 4 5 7 12 14 15 16 19 22 24 27 32 34 35 36 38 40 41 43 48 49 50 51 53 57 59 61 63 64 66 67 73 74 75 79 82 86 89 91 92 94 95 96 98 100 101 104 107 108 109 110 112 113 114 118 119 121 122 126 128 129 131 132 133 137 140 142 143 146 147 148 149 150 152 153 154 157 161 164 165 166 168 170 172 173 180 182 183 184 186 191 193 194 197 198 200 201 202 203 204 205 206 207 # 12970 is_subset c a 211 1 1 0 2 4 5 7 12 14 15 16 19 22 24 27 32 34 35 36 38 40 41 43 48 49 50 51 53 57 59 61 63 64 66 67 73 74 75 79 82 86 89 91 92 94 95 96 98 100 101 104 107 108 109 110 112 113 114 118 119 121 122 126 128 129 131 132 133 137 140 142 143 146 147 148 149 150 152 153 154 157 161 164 165 166 168 170 172 173 180 182 183 184 186 191 193 194 197 198 200 201 202 203 204 205 206 207 b 211 0 1 2 3 6 7 8 12 13 19 23 26 28 31 32 34 36 37 38 39 45 46 47 48 52 53 61 71 72 75 78 80 83 85 86 87 88 90 94 95 99 100 101 105 108 110 111 115 116 119 120 124 129 130 132 134 135 142 143 146 148 151 152 153 157 158 159 160 161 162 163 165 166 168 170 173 175 181 184 185 186 188 190 191 193 196 198 199 201 203 205 206 207 208 210 # 12971 is_subset c a 211 1 1 e b 211 1 1 e # 12972 is_subset c a 211 1 1 e b 211 1 0 e # 12973 is_subset c a 211 1 1 e b 211 1 1 e # 12974 is_subset c a 211 1 1 e b 211 1 0 f # 12975 is_subset c a 211 1 1 e b 211 1 1 e # 12976 is_subset c a 211 1 1 e b 211 1 0 3 5 7 8 9 10 13 14 15 18 20 23 24 26 27 30 31 32 33 36 37 38 39 40 41 46 47 49 53 54 56 57 58 60 61 62 63 64 66 67 69 72 73 74 76 77 82 83 85 86 89 92 96 101 102 103 105 110 111 112 113 114 117 119 120 121 125 126 128 130 132 133 136 138 140 141 143 144 145 148 149 152 153 154 157 158 161 162 164 165 166 169 170 172 173 176 177 178 179 181 184 190 192 194 195 199 201 203 204 205 207 208 210 # 12977 is_subset c a 211 1 1 f b 211 1 1 f # 12978 is_subset c a 211 1 1 f b 211 1 0 e # 12979 is_subset c a 211 1 1 f b 211 1 1 f # 12980 is_subset c a 211 1 1 f b 211 1 0 f # 12981 is_subset c a 211 1 1 f b 211 1 1 f # 12982 is_subset c a 211 1 1 f b 211 1 0 2 4 6 10 11 14 15 16 19 26 30 33 34 37 38 39 41 42 48 49 52 53 54 57 60 62 65 66 67 68 69 74 75 76 78 80 82 83 84 89 90 93 94 95 96 97 99 101 102 103 105 106 107 108 109 111 112 114 115 116 119 120 121 124 125 126 128 135 136 137 138 139 140 142 143 145 146 149 152 155 160 164 165 167 168 169 170 173 175 176 177 178 179 180 183 184 185 186 189 193 194 196 197 198 200 201 202 206 209 # 12983 is_subset c a 211 1 1 4 6 9 10 11 13 15 18 19 22 23 24 26 29 31 32 33 34 35 37 39 40 41 44 45 49 51 54 58 59 62 65 68 71 73 76 81 83 84 85 91 94 95 96 99 100 105 107 109 111 112 114 115 119 121 122 123 124 125 126 127 128 129 130 131 134 135 136 138 141 142 145 146 147 148 150 152 153 155 158 161 163 164 167 168 175 176 178 179 180 181 183 185 186 187 189 193 196 197 199 200 201 202 204 206 207 208 209 210 b 211 1 1 4 6 9 10 11 13 15 18 19 22 23 24 26 29 31 32 33 34 35 37 39 40 41 44 45 49 51 54 58 59 62 65 68 71 73 76 81 83 84 85 91 94 95 96 99 100 105 107 109 111 112 114 115 119 121 122 123 124 125 126 127 128 129 130 131 134 135 136 138 141 142 145 146 147 148 150 152 153 155 158 161 163 164 167 168 175 176 178 179 180 181 183 185 186 187 189 193 196 197 199 200 201 202 204 206 207 208 209 210 # 12984 is_subset c a 211 1 1 4 6 9 10 11 13 15 18 19 22 23 24 26 29 31 32 33 34 35 37 39 40 41 44 45 49 51 54 58 59 62 65 68 71 73 76 81 83 84 85 91 94 95 96 99 100 105 107 109 111 112 114 115 119 121 122 123 124 125 126 127 128 129 130 131 134 135 136 138 141 142 145 146 147 148 150 152 153 155 158 161 163 164 167 168 175 176 178 179 180 181 183 185 186 187 189 193 196 197 199 200 201 202 204 206 207 208 209 210 b 211 1 0 e # 12985 is_subset c a 211 1 1 0 4 7 8 9 15 19 22 32 33 34 35 37 38 39 40 45 47 48 49 50 53 54 58 59 61 62 64 65 66 67 68 69 70 71 72 76 77 79 80 81 83 84 85 87 90 91 93 94 95 97 98 100 101 102 103 108 111 114 119 121 123 124 126 129 132 134 135 136 139 140 144 149 151 152 153 154 158 159 162 163 164 165 166 171 172 173 175 176 177 186 188 191 192 194 197 198 203 204 205 206 207 209 b 211 1 1 0 4 7 8 9 15 19 22 32 33 34 35 37 38 39 40 45 47 48 49 50 53 54 58 59 61 62 64 65 66 67 68 69 70 71 72 76 77 79 80 81 83 84 85 87 90 91 93 94 95 97 98 100 101 102 103 108 111 114 119 121 123 124 126 129 132 134 135 136 139 140 144 149 151 152 153 154 158 159 162 163 164 165 166 171 172 173 175 176 177 186 188 191 192 194 197 198 203 204 205 206 207 209 # 12986 is_subset c a 211 1 1 0 4 7 8 9 15 19 22 32 33 34 35 37 38 39 40 45 47 48 49 50 53 54 58 59 61 62 64 65 66 67 68 69 70 71 72 76 77 79 80 81 83 84 85 87 90 91 93 94 95 97 98 100 101 102 103 108 111 114 119 121 123 124 126 129 132 134 135 136 139 140 144 149 151 152 153 154 158 159 162 163 164 165 166 171 172 173 175 176 177 186 188 191 192 194 197 198 203 204 205 206 207 209 b 211 1 0 f # 12987 is_subset c a 211 1 1 0 2 4 6 8 11 13 14 15 16 17 18 21 22 24 25 26 27 29 36 39 40 41 42 44 45 46 47 48 49 51 52 55 56 58 63 64 65 66 73 74 76 77 78 85 86 88 89 90 92 94 95 97 99 103 105 108 110 115 116 119 126 127 131 132 133 134 136 137 142 143 146 148 151 153 155 156 158 162 164 165 167 168 169 171 173 174 175 179 180 181 182 189 190 191 193 197 198 200 203 205 206 209 b 211 1 1 0 2 4 6 8 11 13 14 15 16 17 18 21 22 24 25 26 27 29 36 39 40 41 42 44 45 46 47 48 49 51 52 55 56 58 63 64 65 66 73 74 76 77 78 85 86 88 89 90 92 94 95 97 99 103 105 108 110 115 116 119 126 127 131 132 133 134 136 137 142 143 146 148 151 153 155 156 158 162 164 165 167 168 169 171 173 174 175 179 180 181 182 189 190 191 193 197 198 200 203 205 206 209 # 12988 is_subset c a 211 1 1 0 2 4 6 8 11 13 14 15 16 17 18 21 22 24 25 26 27 29 36 39 40 41 42 44 45 46 47 48 49 51 52 55 56 58 63 64 65 66 73 74 76 77 78 85 86 88 89 90 92 94 95 97 99 103 105 108 110 115 116 119 126 127 131 132 133 134 136 137 142 143 146 148 151 153 155 156 158 162 164 165 167 168 169 171 173 174 175 179 180 181 182 189 190 191 193 197 198 200 203 205 206 209 b 211 1 0 1 5 6 7 9 12 16 19 20 23 24 26 28 29 30 31 35 36 40 41 43 45 47 50 52 55 57 58 60 61 64 65 66 67 68 71 73 74 75 76 78 79 80 81 83 84 90 93 96 99 100 102 105 107 108 109 110 111 112 115 116 117 121 123 124 125 126 127 132 134 135 136 138 139 141 142 143 146 147 149 151 152 153 155 156 158 160 162 165 168 175 177 178 179 180 181 183 184 185 186 189 190 192 194 198 200 204 205 206 208 209 210 # 12989 is_subset c a 211 1 1 e b 211 1 1 e # 12990 is_subset c a 211 1 1 e b 211 1 1 e # 12991 is_subset c a 211 1 1 e b 211 1 1 e # 12992 is_subset c a 211 1 1 e b 211 1 1 f # 12993 is_subset c a 211 1 1 e b 211 1 1 e # 12994 is_subset c a 211 1 1 e b 211 1 1 0 1 3 6 7 8 10 14 15 18 19 20 25 28 29 32 33 37 41 42 43 45 46 47 48 49 51 53 55 56 61 62 64 69 70 71 72 74 75 77 78 80 84 86 87 88 92 94 95 98 99 100 101 103 106 108 110 111 112 113 114 115 117 121 122 124 125 126 128 129 131 132 133 134 135 136 139 140 142 143 145 147 148 149 151 152 155 156 159 162 163 165 166 172 173 174 175 176 178 181 185 186 188 192 195 196 200 208 210 # 12995 is_subset c a 211 1 1 f b 211 1 1 f # 12996 is_subset c a 211 1 1 f b 211 1 1 e # 12997 is_subset c a 211 1 1 f b 211 1 1 f # 12998 is_subset c a 211 1 1 f b 211 1 1 f # 12999 is_subset c a 211 1 1 f b 211 1 1 f # 13000 is_subset c a 211 1 1 f b 211 1 1 3 5 6 7 8 9 10 12 15 17 18 22 23 24 29 30 31 32 34 45 46 47 48 49 56 57 58 61 64 65 66 71 73 75 76 78 79 81 82 83 87 88 89 92 94 95 97 98 99 102 103 106 111 115 117 118 120 121 122 125 127 128 130 132 133 134 137 138 139 141 143 145 147 148 154 155 158 161 164 167 170 177 179 180 184 186 187 188 189 193 197 201 202 206 208 # 13001 is_subset c a 211 1 1 0 1 2 9 10 14 15 16 17 18 21 23 26 27 29 32 34 36 37 38 39 40 44 47 50 51 56 62 63 64 69 73 74 79 82 83 91 92 94 95 96 97 100 101 102 104 105 106 108 113 115 119 120 121 123 124 126 127 129 130 132 133 134 137 138 140 141 142 144 148 149 150 151 154 156 159 164 165 166 168 170 171 173 177 178 179 181 182 183 187 188 189 190 192 194 195 199 200 202 205 206 207 208 209 210 b 211 1 1 0 1 2 9 10 14 15 16 17 18 21 23 26 27 29 32 34 36 37 38 39 40 44 47 50 51 56 62 63 64 69 73 74 79 82 83 91 92 94 95 96 97 100 101 102 104 105 106 108 113 115 119 120 121 123 124 126 127 129 130 132 133 134 137 138 140 141 142 144 148 149 150 151 154 156 159 164 165 166 168 170 171 173 177 178 179 181 182 183 187 188 189 190 192 194 195 199 200 202 205 206 207 208 209 210 # 13002 is_subset c a 211 1 1 0 1 2 9 10 14 15 16 17 18 21 23 26 27 29 32 34 36 37 38 39 40 44 47 50 51 56 62 63 64 69 73 74 79 82 83 91 92 94 95 96 97 100 101 102 104 105 106 108 113 115 119 120 121 123 124 126 127 129 130 132 133 134 137 138 140 141 142 144 148 149 150 151 154 156 159 164 165 166 168 170 171 173 177 178 179 181 182 183 187 188 189 190 192 194 195 199 200 202 205 206 207 208 209 210 b 211 1 1 e # 13003 is_subset c a 211 1 1 4 5 6 7 8 10 13 17 18 20 22 24 25 27 28 29 31 33 36 37 38 39 41 43 44 45 47 52 55 57 58 59 60 62 71 73 74 75 78 79 80 83 85 86 87 90 92 93 95 96 97 102 103 105 106 107 108 109 110 111 112 113 116 120 121 124 125 127 128 129 130 133 136 137 139 140 141 143 144 145 147 150 151 157 158 160 161 162 163 164 167 169 171 172 173 174 175 176 177 183 184 185 188 190 193 197 198 200 209 210 b 211 1 1 4 5 6 7 8 10 13 17 18 20 22 24 25 27 28 29 31 33 36 37 38 39 41 43 44 45 47 52 55 57 58 59 60 62 71 73 74 75 78 79 80 83 85 86 87 90 92 93 95 96 97 102 103 105 106 107 108 109 110 111 112 113 116 120 121 124 125 127 128 129 130 133 136 137 139 140 141 143 144 145 147 150 151 157 158 160 161 162 163 164 167 169 171 172 173 174 175 176 177 183 184 185 188 190 193 197 198 200 209 210 # 13004 is_subset c a 211 1 1 4 5 6 7 8 10 13 17 18 20 22 24 25 27 28 29 31 33 36 37 38 39 41 43 44 45 47 52 55 57 58 59 60 62 71 73 74 75 78 79 80 83 85 86 87 90 92 93 95 96 97 102 103 105 106 107 108 109 110 111 112 113 116 120 121 124 125 127 128 129 130 133 136 137 139 140 141 143 144 145 147 150 151 157 158 160 161 162 163 164 167 169 171 172 173 174 175 176 177 183 184 185 188 190 193 197 198 200 209 210 b 211 1 1 f # 13005 is_subset c a 211 1 1 0 2 3 5 6 7 10 11 13 15 16 18 22 23 24 26 29 30 32 33 34 36 37 38 41 43 45 50 53 59 60 62 63 65 68 72 73 74 78 79 80 81 84 88 89 90 91 93 94 95 96 97 99 101 106 107 108 109 110 112 113 114 115 118 121 122 123 124 125 126 127 128 129 130 131 132 137 140 141 142 144 148 150 151 153 154 167 169 172 173 174 175 177 181 184 185 186 189 191 193 195 197 198 199 201 202 204 205 206 208 210 b 211 1 1 0 2 3 5 6 7 10 11 13 15 16 18 22 23 24 26 29 30 32 33 34 36 37 38 41 43 45 50 53 59 60 62 63 65 68 72 73 74 78 79 80 81 84 88 89 90 91 93 94 95 96 97 99 101 106 107 108 109 110 112 113 114 115 118 121 122 123 124 125 126 127 128 129 130 131 132 137 140 141 142 144 148 150 151 153 154 167 169 172 173 174 175 177 181 184 185 186 189 191 193 195 197 198 199 201 202 204 205 206 208 210 # 13006 is_subset c a 211 1 1 0 2 3 5 6 7 10 11 13 15 16 18 22 23 24 26 29 30 32 33 34 36 37 38 41 43 45 50 53 59 60 62 63 65 68 72 73 74 78 79 80 81 84 88 89 90 91 93 94 95 96 97 99 101 106 107 108 109 110 112 113 114 115 118 121 122 123 124 125 126 127 128 129 130 131 132 137 140 141 142 144 148 150 151 153 154 167 169 172 173 174 175 177 181 184 185 186 189 191 193 195 197 198 199 201 202 204 205 206 208 210 b 211 1 1 0 2 4 5 10 14 16 18 20 21 24 28 31 32 35 37 38 39 40 41 45 46 47 49 52 53 54 55 57 64 65 66 67 69 70 72 73 74 75 76 77 78 82 85 86 87 88 90 92 96 102 105 108 110 112 113 118 120 121 125 126 130 131 132 133 135 136 140 141 142 144 146 148 149 152 153 154 155 156 157 161 164 165 170 171 173 176 179 180 181 183 184 186 187 189 191 192 193 194 195 196 199 200 202 204 207 208 209 210 # 13007 is_subset c a 224 0 0 e b 224 0 0 e # 13008 is_subset c a 224 0 0 e b 224 0 0 e # 13009 is_subset c a 224 0 0 e b 224 0 0 e # 13010 is_subset c a 224 0 0 e b 224 0 0 f # 13011 is_subset c a 224 0 0 e b 224 0 0 e # 13012 is_subset c a 224 0 0 e b 224 0 0 0 1 2 4 7 15 25 26 29 32 34 35 37 38 39 44 48 49 53 54 55 57 59 60 63 64 65 66 68 69 74 76 79 80 81 84 85 86 88 92 97 98 100 101 102 103 108 109 111 112 113 114 116 117 118 121 122 123 127 131 134 135 136 140 141 143 149 150 152 153 156 157 161 167 173 175 176 178 181 182 186 190 193 194 195 198 199 200 203 204 206 207 208 209 213 214 215 217 222 223 # 13013 is_subset c a 224 0 0 f b 224 0 0 f # 13014 is_subset c a 224 0 0 f b 224 0 0 e # 13015 is_subset c a 224 0 0 f b 224 0 0 f # 13016 is_subset c a 224 0 0 f b 224 0 0 f # 13017 is_subset c a 224 0 0 f b 224 0 0 f # 13018 is_subset c a 224 0 0 f b 224 0 0 1 2 7 8 10 11 12 13 14 15 17 19 20 22 26 27 28 29 30 31 32 33 35 37 38 39 41 42 44 49 54 55 56 58 61 63 65 66 67 68 69 70 71 72 75 76 78 82 85 89 90 92 98 99 101 102 108 110 111 113 115 117 119 120 121 125 126 129 131 135 136 138 140 141 145 147 148 150 153 154 155 156 157 159 161 162 163 165 166 167 169 173 175 176 177 178 179 181 183 184 188 189 195 198 199 200 202 210 215 217 221 222 223 # 13019 is_subset c a 224 0 0 2 4 7 8 11 12 13 15 21 23 25 27 28 30 32 33 34 35 37 39 41 42 43 46 47 51 53 54 55 56 58 59 60 61 62 63 65 66 67 68 70 71 72 73 74 76 77 83 87 88 90 91 92 93 94 97 100 101 103 104 107 109 111 113 117 124 126 128 129 130 131 132 133 134 135 141 145 146 147 148 150 151 152 155 157 160 161 163 164 166 168 170 172 173 174 176 177 183 185 186 187 188 189 191 192 193 194 195 200 201 202 203 204 207 212 213 221 222 b 224 0 0 2 4 7 8 11 12 13 15 21 23 25 27 28 30 32 33 34 35 37 39 41 42 43 46 47 51 53 54 55 56 58 59 60 61 62 63 65 66 67 68 70 71 72 73 74 76 77 83 87 88 90 91 92 93 94 97 100 101 103 104 107 109 111 113 117 124 126 128 129 130 131 132 133 134 135 141 145 146 147 148 150 151 152 155 157 160 161 163 164 166 168 170 172 173 174 176 177 183 185 186 187 188 189 191 192 193 194 195 200 201 202 203 204 207 212 213 221 222 # 13020 is_subset c a 224 0 0 2 4 7 8 11 12 13 15 21 23 25 27 28 30 32 33 34 35 37 39 41 42 43 46 47 51 53 54 55 56 58 59 60 61 62 63 65 66 67 68 70 71 72 73 74 76 77 83 87 88 90 91 92 93 94 97 100 101 103 104 107 109 111 113 117 124 126 128 129 130 131 132 133 134 135 141 145 146 147 148 150 151 152 155 157 160 161 163 164 166 168 170 172 173 174 176 177 183 185 186 187 188 189 191 192 193 194 195 200 201 202 203 204 207 212 213 221 222 b 224 0 0 e # 13021 is_subset c a 224 0 0 0 1 6 7 10 12 13 18 23 25 26 27 29 30 32 35 36 38 40 41 42 43 44 45 46 49 51 52 53 56 65 71 72 74 75 77 78 79 85 86 91 93 95 96 100 101 103 104 105 108 110 112 114 117 118 119 120 122 128 129 133 136 137 138 141 142 146 147 150 152 153 154 155 156 159 160 161 166 169 170 174 175 176 180 183 184 186 187 189 190 192 193 194 197 199 200 204 205 206 207 210 212 215 216 217 218 220 222 223 b 224 0 0 0 1 6 7 10 12 13 18 23 25 26 27 29 30 32 35 36 38 40 41 42 43 44 45 46 49 51 52 53 56 65 71 72 74 75 77 78 79 85 86 91 93 95 96 100 101 103 104 105 108 110 112 114 117 118 119 120 122 128 129 133 136 137 138 141 142 146 147 150 152 153 154 155 156 159 160 161 166 169 170 174 175 176 180 183 184 186 187 189 190 192 193 194 197 199 200 204 205 206 207 210 212 215 216 217 218 220 222 223 # 13022 is_subset c a 224 0 0 0 1 6 7 10 12 13 18 23 25 26 27 29 30 32 35 36 38 40 41 42 43 44 45 46 49 51 52 53 56 65 71 72 74 75 77 78 79 85 86 91 93 95 96 100 101 103 104 105 108 110 112 114 117 118 119 120 122 128 129 133 136 137 138 141 142 146 147 150 152 153 154 155 156 159 160 161 166 169 170 174 175 176 180 183 184 186 187 189 190 192 193 194 197 199 200 204 205 206 207 210 212 215 216 217 218 220 222 223 b 224 0 0 f # 13023 is_subset c a 224 0 0 1 2 3 4 6 8 9 10 12 13 18 19 20 22 26 28 30 33 35 42 44 45 46 49 51 52 53 60 62 63 66 67 68 71 72 73 75 76 77 78 80 83 85 86 87 88 91 92 94 96 97 101 103 104 105 106 107 108 109 110 112 116 118 119 120 122 123 129 130 136 138 139 140 141 143 148 153 155 159 161 163 165 166 168 169 170 171 172 174 176 181 182 183 184 186 188 190 191 194 196 197 198 199 200 201 202 203 204 205 206 207 211 214 215 217 220 b 224 0 0 1 2 3 4 6 8 9 10 12 13 18 19 20 22 26 28 30 33 35 42 44 45 46 49 51 52 53 60 62 63 66 67 68 71 72 73 75 76 77 78 80 83 85 86 87 88 91 92 94 96 97 101 103 104 105 106 107 108 109 110 112 116 118 119 120 122 123 129 130 136 138 139 140 141 143 148 153 155 159 161 163 165 166 168 169 170 171 172 174 176 181 182 183 184 186 188 190 191 194 196 197 198 199 200 201 202 203 204 205 206 207 211 214 215 217 220 # 13024 is_subset c a 224 0 0 1 2 3 4 6 8 9 10 12 13 18 19 20 22 26 28 30 33 35 42 44 45 46 49 51 52 53 60 62 63 66 67 68 71 72 73 75 76 77 78 80 83 85 86 87 88 91 92 94 96 97 101 103 104 105 106 107 108 109 110 112 116 118 119 120 122 123 129 130 136 138 139 140 141 143 148 153 155 159 161 163 165 166 168 169 170 171 172 174 176 181 182 183 184 186 188 190 191 194 196 197 198 199 200 201 202 203 204 205 206 207 211 214 215 217 220 b 224 0 0 1 2 4 14 15 16 19 22 23 24 27 31 33 37 38 39 41 42 43 45 46 47 50 51 53 54 57 59 61 62 63 64 69 70 71 72 73 74 76 80 82 85 86 88 92 93 95 98 101 104 105 106 107 109 116 118 119 122 128 130 134 139 142 143 144 147 148 154 155 156 157 162 166 167 168 169 176 178 179 180 182 184 185 186 187 188 191 193 195 198 202 203 204 206 207 208 209 214 217 219 220 222 # 13025 is_subset c a 224 0 0 e b 224 0 0 e # 13026 is_subset c a 224 0 0 e b 224 0 1 e # 13027 is_subset c a 224 0 0 e b 224 0 0 e # 13028 is_subset c a 224 0 0 e b 224 0 1 f # 13029 is_subset c a 224 0 0 e b 224 0 0 e # 13030 is_subset c a 224 0 0 e b 224 0 1 3 4 7 10 12 13 14 16 18 20 21 22 25 30 31 32 34 36 40 43 44 47 48 50 51 52 53 56 58 60 61 66 68 71 72 73 75 77 80 83 85 87 91 95 96 100 101 103 104 105 109 110 115 116 117 118 121 123 125 126 130 132 133 134 135 136 138 141 142 143 144 146 147 151 154 155 157 160 161 162 163 164 165 166 167 169 170 171 173 174 176 180 181 182 185 189 190 192 193 195 199 200 206 208 211 217 218 219 221 # 13031 is_subset c a 224 0 0 f b 224 0 0 f # 13032 is_subset c a 224 0 0 f b 224 0 1 e # 13033 is_subset c a 224 0 0 f b 224 0 0 f # 13034 is_subset c a 224 0 0 f b 224 0 1 f # 13035 is_subset c a 224 0 0 f b 224 0 0 f # 13036 is_subset c a 224 0 0 f b 224 0 1 0 1 2 4 6 7 8 12 16 17 22 23 25 27 28 29 30 33 34 37 41 42 43 49 50 51 57 59 60 66 67 68 73 75 77 81 83 85 87 88 90 92 94 95 98 100 101 102 103 104 105 106 108 109 110 112 113 114 116 120 121 122 125 127 131 133 134 136 137 139 140 142 143 145 147 151 155 157 161 164 166 167 171 174 175 177 178 179 182 183 184 186 187 192 193 194 195 197 199 200 201 202 207 209 210 211 214 215 216 217 218 219 220 223 # 13037 is_subset c a 224 0 0 2 3 6 10 11 12 13 14 16 20 23 26 28 32 33 35 37 41 44 45 46 47 52 56 57 61 62 63 64 65 66 67 68 73 74 76 77 82 84 85 86 87 88 92 93 95 96 98 99 103 104 106 107 110 111 112 113 115 116 119 121 122 124 127 129 130 131 134 136 137 138 140 141 143 144 145 148 149 152 154 159 161 162 165 166 167 169 172 177 178 180 182 185 186 187 188 190 193 194 196 201 202 203 205 208 210 212 214 217 b 224 0 0 2 3 6 10 11 12 13 14 16 20 23 26 28 32 33 35 37 41 44 45 46 47 52 56 57 61 62 63 64 65 66 67 68 73 74 76 77 82 84 85 86 87 88 92 93 95 96 98 99 103 104 106 107 110 111 112 113 115 116 119 121 122 124 127 129 130 131 134 136 137 138 140 141 143 144 145 148 149 152 154 159 161 162 165 166 167 169 172 177 178 180 182 185 186 187 188 190 193 194 196 201 202 203 205 208 210 212 214 217 # 13038 is_subset c a 224 0 0 2 3 6 10 11 12 13 14 16 20 23 26 28 32 33 35 37 41 44 45 46 47 52 56 57 61 62 63 64 65 66 67 68 73 74 76 77 82 84 85 86 87 88 92 93 95 96 98 99 103 104 106 107 110 111 112 113 115 116 119 121 122 124 127 129 130 131 134 136 137 138 140 141 143 144 145 148 149 152 154 159 161 162 165 166 167 169 172 177 178 180 182 185 186 187 188 190 193 194 196 201 202 203 205 208 210 212 214 217 b 224 0 1 e # 13039 is_subset c a 224 0 0 2 3 4 7 9 10 12 14 15 16 17 19 22 26 30 31 33 34 37 39 40 43 44 46 47 48 49 54 56 58 60 61 62 64 65 68 69 71 72 74 75 76 79 81 82 83 85 91 97 98 99 101 102 108 109 110 112 113 116 119 120 121 122 123 127 128 129 130 132 134 136 138 139 140 141 143 144 145 146 151 154 155 156 158 159 164 166 167 170 175 180 181 188 189 190 191 197 199 203 204 205 206 208 210 211 214 215 216 218 221 223 b 224 0 0 2 3 4 7 9 10 12 14 15 16 17 19 22 26 30 31 33 34 37 39 40 43 44 46 47 48 49 54 56 58 60 61 62 64 65 68 69 71 72 74 75 76 79 81 82 83 85 91 97 98 99 101 102 108 109 110 112 113 116 119 120 121 122 123 127 128 129 130 132 134 136 138 139 140 141 143 144 145 146 151 154 155 156 158 159 164 166 167 170 175 180 181 188 189 190 191 197 199 203 204 205 206 208 210 211 214 215 216 218 221 223 # 13040 is_subset c a 224 0 0 2 3 4 7 9 10 12 14 15 16 17 19 22 26 30 31 33 34 37 39 40 43 44 46 47 48 49 54 56 58 60 61 62 64 65 68 69 71 72 74 75 76 79 81 82 83 85 91 97 98 99 101 102 108 109 110 112 113 116 119 120 121 122 123 127 128 129 130 132 134 136 138 139 140 141 143 144 145 146 151 154 155 156 158 159 164 166 167 170 175 180 181 188 189 190 191 197 199 203 204 205 206 208 210 211 214 215 216 218 221 223 b 224 0 1 f # 13041 is_subset c a 224 0 0 1 3 4 5 6 10 12 13 15 16 18 21 22 24 25 26 28 30 32 34 35 36 37 38 40 41 43 44 45 46 47 49 50 51 53 54 56 57 58 59 60 61 63 64 66 67 68 69 71 72 73 74 76 77 79 80 82 85 86 96 99 100 102 103 105 107 108 110 112 113 114 115 119 120 124 125 127 129 134 136 139 140 145 147 149 150 154 158 160 162 164 165 166 167 168 171 172 173 175 176 177 178 182 183 184 186 187 188 189 191 194 196 197 198 199 200 202 203 205 206 207 208 212 213 214 215 217 218 220 222 b 224 0 0 1 3 4 5 6 10 12 13 15 16 18 21 22 24 25 26 28 30 32 34 35 36 37 38 40 41 43 44 45 46 47 49 50 51 53 54 56 57 58 59 60 61 63 64 66 67 68 69 71 72 73 74 76 77 79 80 82 85 86 96 99 100 102 103 105 107 108 110 112 113 114 115 119 120 124 125 127 129 134 136 139 140 145 147 149 150 154 158 160 162 164 165 166 167 168 171 172 173 175 176 177 178 182 183 184 186 187 188 189 191 194 196 197 198 199 200 202 203 205 206 207 208 212 213 214 215 217 218 220 222 # 13042 is_subset c a 224 0 0 1 3 4 5 6 10 12 13 15 16 18 21 22 24 25 26 28 30 32 34 35 36 37 38 40 41 43 44 45 46 47 49 50 51 53 54 56 57 58 59 60 61 63 64 66 67 68 69 71 72 73 74 76 77 79 80 82 85 86 96 99 100 102 103 105 107 108 110 112 113 114 115 119 120 124 125 127 129 134 136 139 140 145 147 149 150 154 158 160 162 164 165 166 167 168 171 172 173 175 176 177 178 182 183 184 186 187 188 189 191 194 196 197 198 199 200 202 203 205 206 207 208 212 213 214 215 217 218 220 222 b 224 0 1 1 2 4 5 7 15 16 17 19 20 30 31 37 38 42 44 49 51 52 53 56 57 63 64 65 66 67 68 69 74 76 78 80 81 83 84 87 89 92 93 95 96 98 99 102 103 104 105 106 107 108 109 110 111 112 114 116 119 120 123 125 126 127 128 130 132 133 134 137 140 146 148 151 152 153 154 155 158 160 161 162 163 165 167 168 172 173 174 177 181 182 183 185 186 187 189 192 194 196 199 200 201 204 206 212 221 222 # 13043 is_subset c a 224 0 0 e b 224 0 0 e # 13044 is_subset c a 224 0 0 e b 224 1 0 e # 13045 is_subset c a 224 0 0 e b 224 0 0 e # 13046 is_subset c a 224 0 0 e b 224 1 0 f # 13047 is_subset c a 224 0 0 e b 224 0 0 e # 13048 is_subset c a 224 0 0 e b 224 1 0 1 4 5 6 7 13 15 17 21 22 23 27 29 30 32 34 35 37 39 40 41 42 44 47 51 53 54 57 60 62 63 64 65 67 69 70 72 73 74 79 80 81 82 83 84 87 89 92 95 97 98 99 100 106 113 115 117 118 119 124 125 129 130 134 135 137 139 147 150 151 152 155 159 162 163 165 166 167 169 170 171 175 176 177 178 179 181 182 185 187 191 192 194 197 199 200 205 211 213 214 215 216 220 221 # 13049 is_subset c a 224 0 0 f b 224 0 0 f # 13050 is_subset c a 224 0 0 f b 224 1 0 e # 13051 is_subset c a 224 0 0 f b 224 0 0 f # 13052 is_subset c a 224 0 0 f b 224 1 0 f # 13053 is_subset c a 224 0 0 f b 224 0 0 f # 13054 is_subset c a 224 0 0 f b 224 1 0 2 3 5 7 9 11 12 14 16 18 19 21 22 26 27 31 32 35 37 38 40 43 44 46 49 51 52 54 57 59 60 61 63 64 65 66 68 69 70 71 72 73 74 75 77 79 80 81 83 84 86 92 93 94 95 96 97 99 101 102 104 110 111 114 116 117 118 120 121 123 124 126 131 133 139 140 142 144 147 153 155 161 163 164 166 168 170 171 172 173 175 177 178 180 182 184 185 189 190 191 193 200 203 205 206 209 210 213 214 216 217 219 220 222 # 13055 is_subset c a 224 0 0 3 4 5 7 9 10 11 13 15 16 19 20 23 25 26 27 28 32 33 34 36 40 41 42 44 49 53 57 61 62 65 66 68 69 71 72 75 76 77 80 81 82 85 86 87 88 92 94 96 98 99 102 104 110 114 115 118 120 122 123 125 129 131 135 136 140 142 144 145 146 149 150 151 152 153 154 157 158 159 160 164 165 167 169 172 175 178 181 186 187 189 190 196 197 201 205 210 211 212 214 216 217 219 223 b 224 0 0 3 4 5 7 9 10 11 13 15 16 19 20 23 25 26 27 28 32 33 34 36 40 41 42 44 49 53 57 61 62 65 66 68 69 71 72 75 76 77 80 81 82 85 86 87 88 92 94 96 98 99 102 104 110 114 115 118 120 122 123 125 129 131 135 136 140 142 144 145 146 149 150 151 152 153 154 157 158 159 160 164 165 167 169 172 175 178 181 186 187 189 190 196 197 201 205 210 211 212 214 216 217 219 223 # 13056 is_subset c a 224 0 0 3 4 5 7 9 10 11 13 15 16 19 20 23 25 26 27 28 32 33 34 36 40 41 42 44 49 53 57 61 62 65 66 68 69 71 72 75 76 77 80 81 82 85 86 87 88 92 94 96 98 99 102 104 110 114 115 118 120 122 123 125 129 131 135 136 140 142 144 145 146 149 150 151 152 153 154 157 158 159 160 164 165 167 169 172 175 178 181 186 187 189 190 196 197 201 205 210 211 212 214 216 217 219 223 b 224 1 0 e # 13057 is_subset c a 224 0 0 1 2 6 7 8 13 14 15 16 17 19 23 25 26 27 31 32 36 37 39 41 42 44 45 47 49 50 51 54 57 60 61 63 67 69 70 71 72 73 75 79 82 86 87 92 96 97 100 101 103 104 108 109 113 114 115 117 119 120 121 122 123 128 130 131 133 137 140 141 142 144 146 150 153 158 160 162 166 167 172 174 175 176 177 178 179 181 184 186 188 189 191 195 196 198 202 205 211 216 219 220 221 222 b 224 0 0 1 2 6 7 8 13 14 15 16 17 19 23 25 26 27 31 32 36 37 39 41 42 44 45 47 49 50 51 54 57 60 61 63 67 69 70 71 72 73 75 79 82 86 87 92 96 97 100 101 103 104 108 109 113 114 115 117 119 120 121 122 123 128 130 131 133 137 140 141 142 144 146 150 153 158 160 162 166 167 172 174 175 176 177 178 179 181 184 186 188 189 191 195 196 198 202 205 211 216 219 220 221 222 # 13058 is_subset c a 224 0 0 1 2 6 7 8 13 14 15 16 17 19 23 25 26 27 31 32 36 37 39 41 42 44 45 47 49 50 51 54 57 60 61 63 67 69 70 71 72 73 75 79 82 86 87 92 96 97 100 101 103 104 108 109 113 114 115 117 119 120 121 122 123 128 130 131 133 137 140 141 142 144 146 150 153 158 160 162 166 167 172 174 175 176 177 178 179 181 184 186 188 189 191 195 196 198 202 205 211 216 219 220 221 222 b 224 1 0 f # 13059 is_subset c a 224 0 0 2 4 5 6 8 9 10 12 13 14 17 18 22 30 31 32 33 35 38 41 42 43 44 45 47 48 54 55 59 60 63 64 65 68 70 73 75 76 78 80 82 84 88 89 90 92 95 97 105 110 111 112 115 116 118 119 121 127 129 130 134 135 138 140 141 143 145 146 149 150 152 154 156 157 158 159 160 161 163 166 167 168 169 171 173 174 175 177 178 179 181 185 187 188 190 191 194 195 196 198 199 201 202 203 204 205 208 210 215 217 218 221 222 223 b 224 0 0 2 4 5 6 8 9 10 12 13 14 17 18 22 30 31 32 33 35 38 41 42 43 44 45 47 48 54 55 59 60 63 64 65 68 70 73 75 76 78 80 82 84 88 89 90 92 95 97 105 110 111 112 115 116 118 119 121 127 129 130 134 135 138 140 141 143 145 146 149 150 152 154 156 157 158 159 160 161 163 166 167 168 169 171 173 174 175 177 178 179 181 185 187 188 190 191 194 195 196 198 199 201 202 203 204 205 208 210 215 217 218 221 222 223 # 13060 is_subset c a 224 0 0 2 4 5 6 8 9 10 12 13 14 17 18 22 30 31 32 33 35 38 41 42 43 44 45 47 48 54 55 59 60 63 64 65 68 70 73 75 76 78 80 82 84 88 89 90 92 95 97 105 110 111 112 115 116 118 119 121 127 129 130 134 135 138 140 141 143 145 146 149 150 152 154 156 157 158 159 160 161 163 166 167 168 169 171 173 174 175 177 178 179 181 185 187 188 190 191 194 195 196 198 199 201 202 203 204 205 208 210 215 217 218 221 222 223 b 224 1 0 1 2 5 8 13 14 15 17 19 20 21 24 28 36 37 38 39 40 44 45 48 50 51 54 55 56 59 60 62 64 66 67 69 72 73 75 76 77 84 88 89 91 94 95 96 97 98 99 104 105 107 109 111 112 115 116 117 123 124 126 128 132 133 134 135 139 141 142 145 146 147 148 152 153 154 156 157 158 159 163 166 167 168 170 172 180 181 186 189 193 195 202 204 206 208 209 212 213 214 217 218 219 220 # 13061 is_subset c a 224 0 0 e b 224 0 0 e # 13062 is_subset c a 224 0 0 e b 224 1 1 e # 13063 is_subset c a 224 0 0 e b 224 0 0 e # 13064 is_subset c a 224 0 0 e b 224 1 1 f # 13065 is_subset c a 224 0 0 e b 224 0 0 e # 13066 is_subset c a 224 0 0 e b 224 1 1 1 3 4 5 8 9 10 11 13 14 15 16 22 23 26 28 29 30 31 32 34 35 36 37 39 40 42 44 45 47 49 51 53 54 55 65 66 68 71 76 82 85 87 91 92 94 97 98 103 105 110 112 113 114 119 120 121 126 127 131 132 133 137 138 139 146 147 152 153 154 158 159 160 162 163 164 166 168 169 176 181 184 186 188 189 191 192 193 195 201 205 206 207 211 212 213 215 216 217 218 219 220 223 # 13067 is_subset c a 224 0 0 f b 224 0 0 f # 13068 is_subset c a 224 0 0 f b 224 1 1 e # 13069 is_subset c a 224 0 0 f b 224 0 0 f # 13070 is_subset c a 224 0 0 f b 224 1 1 f # 13071 is_subset c a 224 0 0 f b 224 0 0 f # 13072 is_subset c a 224 0 0 f b 224 1 1 1 2 6 7 8 26 30 31 33 35 36 37 38 39 41 46 47 48 52 56 60 62 74 76 77 79 83 84 85 87 89 90 93 94 98 101 102 103 105 108 112 113 115 118 119 121 122 124 125 126 127 128 129 132 138 140 142 143 144 145 146 149 151 156 159 160 161 163 165 166 167 169 172 173 175 176 180 181 184 186 187 188 189 190 191 192 195 198 201 202 204 205 207 209 213 214 219 222 # 13073 is_subset c a 224 0 0 0 4 5 6 7 8 11 14 15 18 19 21 25 27 30 40 44 46 48 49 50 51 52 55 56 57 58 61 63 64 65 66 71 72 73 75 76 78 79 81 82 83 86 89 93 96 98 104 106 107 108 109 110 111 112 114 116 117 119 120 121 124 125 126 127 128 132 134 135 136 137 138 139 140 142 143 144 145 146 147 148 150 154 156 159 160 161 163 168 170 171 172 173 175 180 182 186 188 191 193 194 198 201 202 206 207 208 211 212 213 218 220 b 224 0 0 0 4 5 6 7 8 11 14 15 18 19 21 25 27 30 40 44 46 48 49 50 51 52 55 56 57 58 61 63 64 65 66 71 72 73 75 76 78 79 81 82 83 86 89 93 96 98 104 106 107 108 109 110 111 112 114 116 117 119 120 121 124 125 126 127 128 132 134 135 136 137 138 139 140 142 143 144 145 146 147 148 150 154 156 159 160 161 163 168 170 171 172 173 175 180 182 186 188 191 193 194 198 201 202 206 207 208 211 212 213 218 220 # 13074 is_subset c a 224 0 0 0 4 5 6 7 8 11 14 15 18 19 21 25 27 30 40 44 46 48 49 50 51 52 55 56 57 58 61 63 64 65 66 71 72 73 75 76 78 79 81 82 83 86 89 93 96 98 104 106 107 108 109 110 111 112 114 116 117 119 120 121 124 125 126 127 128 132 134 135 136 137 138 139 140 142 143 144 145 146 147 148 150 154 156 159 160 161 163 168 170 171 172 173 175 180 182 186 188 191 193 194 198 201 202 206 207 208 211 212 213 218 220 b 224 1 1 e # 13075 is_subset c a 224 0 0 2 6 7 9 11 14 16 17 20 21 22 26 28 31 32 36 39 40 42 44 49 50 53 54 55 57 58 59 62 64 68 69 71 74 75 76 82 83 85 88 92 95 96 97 99 100 101 103 104 106 107 108 110 112 113 114 118 120 123 124 125 126 127 128 129 131 132 133 134 135 137 142 145 147 150 157 158 160 163 165 167 168 169 171 175 176 177 180 184 185 186 188 189 190 191 195 197 198 199 200 202 208 209 210 211 216 218 219 220 221 b 224 0 0 2 6 7 9 11 14 16 17 20 21 22 26 28 31 32 36 39 40 42 44 49 50 53 54 55 57 58 59 62 64 68 69 71 74 75 76 82 83 85 88 92 95 96 97 99 100 101 103 104 106 107 108 110 112 113 114 118 120 123 124 125 126 127 128 129 131 132 133 134 135 137 142 145 147 150 157 158 160 163 165 167 168 169 171 175 176 177 180 184 185 186 188 189 190 191 195 197 198 199 200 202 208 209 210 211 216 218 219 220 221 # 13076 is_subset c a 224 0 0 2 6 7 9 11 14 16 17 20 21 22 26 28 31 32 36 39 40 42 44 49 50 53 54 55 57 58 59 62 64 68 69 71 74 75 76 82 83 85 88 92 95 96 97 99 100 101 103 104 106 107 108 110 112 113 114 118 120 123 124 125 126 127 128 129 131 132 133 134 135 137 142 145 147 150 157 158 160 163 165 167 168 169 171 175 176 177 180 184 185 186 188 189 190 191 195 197 198 199 200 202 208 209 210 211 216 218 219 220 221 b 224 1 1 f # 13077 is_subset c a 224 0 0 0 1 2 4 5 7 8 13 14 17 19 20 21 22 23 25 26 34 37 41 42 43 45 47 49 50 52 53 55 59 61 63 66 70 72 79 83 84 85 86 88 92 93 98 102 104 106 108 110 111 112 114 115 116 117 119 121 124 125 127 128 132 134 135 136 137 138 141 146 151 152 153 154 155 158 160 162 164 165 168 170 174 176 177 178 180 181 183 184 186 188 190 192 193 194 196 198 199 201 203 205 208 209 210 211 212 214 215 218 220 221 222 223 b 224 0 0 0 1 2 4 5 7 8 13 14 17 19 20 21 22 23 25 26 34 37 41 42 43 45 47 49 50 52 53 55 59 61 63 66 70 72 79 83 84 85 86 88 92 93 98 102 104 106 108 110 111 112 114 115 116 117 119 121 124 125 127 128 132 134 135 136 137 138 141 146 151 152 153 154 155 158 160 162 164 165 168 170 174 176 177 178 180 181 183 184 186 188 190 192 193 194 196 198 199 201 203 205 208 209 210 211 212 214 215 218 220 221 222 223 # 13078 is_subset c a 224 0 0 0 1 2 4 5 7 8 13 14 17 19 20 21 22 23 25 26 34 37 41 42 43 45 47 49 50 52 53 55 59 61 63 66 70 72 79 83 84 85 86 88 92 93 98 102 104 106 108 110 111 112 114 115 116 117 119 121 124 125 127 128 132 134 135 136 137 138 141 146 151 152 153 154 155 158 160 162 164 165 168 170 174 176 177 178 180 181 183 184 186 188 190 192 193 194 196 198 199 201 203 205 208 209 210 211 212 214 215 218 220 221 222 223 b 224 1 1 1 4 6 11 15 18 23 24 27 28 29 30 32 33 34 35 37 40 44 48 49 50 62 65 66 70 72 74 75 76 77 80 82 85 86 87 91 92 95 99 104 105 106 108 110 111 113 115 116 118 120 123 124 126 128 130 132 138 140 141 144 145 150 152 153 154 155 157 158 160 161 163 165 170 173 175 176 177 179 180 183 187 188 190 191 194 195 197 199 201 204 205 207 209 210 213 217 223 # 13079 is_subset c a 224 0 1 e b 224 0 1 e # 13080 is_subset c a 224 0 1 e b 224 0 0 e # 13081 is_subset c a 224 0 1 e b 224 0 1 e # 13082 is_subset c a 224 0 1 e b 224 0 0 f # 13083 is_subset c a 224 0 1 e b 224 0 1 e # 13084 is_subset c a 224 0 1 e b 224 0 0 0 1 4 5 8 10 11 15 22 26 29 32 33 35 37 41 42 48 50 51 52 53 58 59 61 62 64 74 75 76 79 80 82 83 86 89 91 92 94 96 98 99 100 104 106 107 108 115 119 120 122 123 124 125 128 129 131 133 134 135 137 138 142 143 145 147 149 150 153 154 155 161 164 170 175 177 178 179 181 182 183 184 185 186 190 193 194 198 200 202 204 208 215 217 221 222 # 13085 is_subset c a 224 0 1 f b 224 0 1 f # 13086 is_subset c a 224 0 1 f b 224 0 0 e # 13087 is_subset c a 224 0 1 f b 224 0 1 f # 13088 is_subset c a 224 0 1 f b 224 0 0 f # 13089 is_subset c a 224 0 1 f b 224 0 1 f # 13090 is_subset c a 224 0 1 f b 224 0 0 0 1 2 6 8 9 11 12 13 15 16 17 20 21 24 26 27 29 32 34 36 39 41 42 44 47 48 49 50 51 56 57 60 61 62 64 66 67 68 75 77 78 81 83 84 85 87 88 90 93 94 97 98 100 104 105 108 109 110 112 115 116 119 120 128 130 131 132 135 138 139 141 144 146 147 148 150 151 152 153 157 158 164 166 167 168 169 170 172 174 175 176 177 178 179 182 185 187 188 190 191 192 196 199 203 204 205 206 208 211 212 213 216 217 219 220 222 223 # 13091 is_subset c a 224 0 1 1 5 6 11 15 16 17 18 19 20 23 24 27 28 30 33 36 38 39 40 42 43 44 46 49 51 54 56 59 61 62 63 64 67 68 70 71 72 73 74 77 78 80 83 84 87 91 94 96 97 99 101 102 103 104 107 111 112 113 114 119 120 121 122 126 129 131 132 133 134 135 138 139 140 142 145 146 148 151 152 153 154 157 159 160 161 162 163 164 168 170 173 174 175 177 187 188 189 190 191 192 193 197 198 199 201 203 207 209 211 213 214 215 216 218 219 221 222 b 224 0 1 1 5 6 11 15 16 17 18 19 20 23 24 27 28 30 33 36 38 39 40 42 43 44 46 49 51 54 56 59 61 62 63 64 67 68 70 71 72 73 74 77 78 80 83 84 87 91 94 96 97 99 101 102 103 104 107 111 112 113 114 119 120 121 122 126 129 131 132 133 134 135 138 139 140 142 145 146 148 151 152 153 154 157 159 160 161 162 163 164 168 170 173 174 175 177 187 188 189 190 191 192 193 197 198 199 201 203 207 209 211 213 214 215 216 218 219 221 222 # 13092 is_subset c a 224 0 1 1 5 6 11 15 16 17 18 19 20 23 24 27 28 30 33 36 38 39 40 42 43 44 46 49 51 54 56 59 61 62 63 64 67 68 70 71 72 73 74 77 78 80 83 84 87 91 94 96 97 99 101 102 103 104 107 111 112 113 114 119 120 121 122 126 129 131 132 133 134 135 138 139 140 142 145 146 148 151 152 153 154 157 159 160 161 162 163 164 168 170 173 174 175 177 187 188 189 190 191 192 193 197 198 199 201 203 207 209 211 213 214 215 216 218 219 221 222 b 224 0 0 e # 13093 is_subset c a 224 0 1 2 3 6 11 12 13 14 18 19 20 21 23 26 27 28 29 32 33 37 38 39 41 43 44 50 55 56 58 59 61 64 71 73 74 75 76 77 82 84 88 89 92 95 96 97 101 105 108 109 110 112 113 114 115 117 120 122 123 124 126 127 133 134 135 136 139 142 145 146 147 148 151 152 153 154 155 157 158 162 164 165 167 171 172 174 175 177 178 179 181 182 183 184 186 190 192 193 194 195 196 200 201 202 205 207 208 210 216 217 222 b 224 0 1 2 3 6 11 12 13 14 18 19 20 21 23 26 27 28 29 32 33 37 38 39 41 43 44 50 55 56 58 59 61 64 71 73 74 75 76 77 82 84 88 89 92 95 96 97 101 105 108 109 110 112 113 114 115 117 120 122 123 124 126 127 133 134 135 136 139 142 145 146 147 148 151 152 153 154 155 157 158 162 164 165 167 171 172 174 175 177 178 179 181 182 183 184 186 190 192 193 194 195 196 200 201 202 205 207 208 210 216 217 222 # 13094 is_subset c a 224 0 1 2 3 6 11 12 13 14 18 19 20 21 23 26 27 28 29 32 33 37 38 39 41 43 44 50 55 56 58 59 61 64 71 73 74 75 76 77 82 84 88 89 92 95 96 97 101 105 108 109 110 112 113 114 115 117 120 122 123 124 126 127 133 134 135 136 139 142 145 146 147 148 151 152 153 154 155 157 158 162 164 165 167 171 172 174 175 177 178 179 181 182 183 184 186 190 192 193 194 195 196 200 201 202 205 207 208 210 216 217 222 b 224 0 0 f # 13095 is_subset c a 224 0 1 0 1 2 3 4 6 7 9 11 12 13 14 15 16 20 23 25 27 29 32 34 35 36 37 40 41 43 45 46 50 52 57 60 62 64 65 68 69 70 71 73 74 75 76 77 80 82 83 86 87 91 92 93 96 97 98 101 103 104 105 106 107 108 111 112 116 118 119 120 122 126 127 129 131 132 133 134 136 137 143 144 145 151 155 156 158 162 164 165 166 167 169 171 174 177 178 183 184 185 187 190 191 193 196 197 200 202 204 205 206 208 210 211 212 214 219 222 223 b 224 0 1 0 1 2 3 4 6 7 9 11 12 13 14 15 16 20 23 25 27 29 32 34 35 36 37 40 41 43 45 46 50 52 57 60 62 64 65 68 69 70 71 73 74 75 76 77 80 82 83 86 87 91 92 93 96 97 98 101 103 104 105 106 107 108 111 112 116 118 119 120 122 126 127 129 131 132 133 134 136 137 143 144 145 151 155 156 158 162 164 165 166 167 169 171 174 177 178 183 184 185 187 190 191 193 196 197 200 202 204 205 206 208 210 211 212 214 219 222 223 # 13096 is_subset c a 224 0 1 0 1 2 3 4 6 7 9 11 12 13 14 15 16 20 23 25 27 29 32 34 35 36 37 40 41 43 45 46 50 52 57 60 62 64 65 68 69 70 71 73 74 75 76 77 80 82 83 86 87 91 92 93 96 97 98 101 103 104 105 106 107 108 111 112 116 118 119 120 122 126 127 129 131 132 133 134 136 137 143 144 145 151 155 156 158 162 164 165 166 167 169 171 174 177 178 183 184 185 187 190 191 193 196 197 200 202 204 205 206 208 210 211 212 214 219 222 223 b 224 0 0 1 3 4 5 7 12 15 16 18 22 23 24 31 33 34 37 39 41 42 44 46 47 48 49 54 55 59 60 62 63 67 71 74 76 77 78 79 80 82 83 85 86 87 90 92 93 95 98 99 100 104 107 112 119 124 128 129 130 131 135 136 137 138 142 143 144 145 151 152 154 155 156 158 159 161 162 168 170 173 176 179 180 181 182 183 185 188 194 195 202 203 205 207 209 210 213 215 217 218 222 223 # 13097 is_subset c a 224 0 1 e b 224 0 1 e # 13098 is_subset c a 224 0 1 e b 224 0 1 e # 13099 is_subset c a 224 0 1 e b 224 0 1 e # 13100 is_subset c a 224 0 1 e b 224 0 1 f # 13101 is_subset c a 224 0 1 e b 224 0 1 e # 13102 is_subset c a 224 0 1 e b 224 0 1 2 3 4 8 11 14 15 17 19 20 26 28 32 33 35 37 38 39 40 42 44 45 46 47 48 50 51 52 54 55 56 57 61 62 64 65 66 67 68 69 70 71 73 74 75 76 77 78 79 81 82 83 84 85 86 87 91 93 94 95 96 97 98 99 100 101 104 107 110 111 112 113 114 115 117 118 119 121 122 124 125 127 128 130 131 134 136 142 145 147 150 151 157 159 161 162 163 165 167 168 169 174 176 180 181 183 187 190 195 198 201 202 205 206 210 211 213 214 215 219 220 # 13103 is_subset c a 224 0 1 f b 224 0 1 f # 13104 is_subset c a 224 0 1 f b 224 0 1 e # 13105 is_subset c a 224 0 1 f b 224 0 1 f # 13106 is_subset c a 224 0 1 f b 224 0 1 f # 13107 is_subset c a 224 0 1 f b 224 0 1 f # 13108 is_subset c a 224 0 1 f b 224 0 1 0 2 3 4 5 8 9 10 11 12 13 15 16 17 18 20 21 22 27 28 32 35 36 37 39 40 41 42 44 45 47 48 50 51 53 55 57 58 61 62 68 70 71 73 76 77 78 79 81 82 83 84 88 90 96 97 98 99 101 103 105 106 109 110 111 112 113 115 116 117 119 124 125 126 129 131 133 135 139 142 144 147 149 150 154 155 156 157 160 161 165 167 170 171 172 173 175 176 177 178 180 181 182 183 184 185 186 187 188 193 194 195 197 198 199 201 205 206 209 210 219 220 221 223 # 13109 is_subset c a 224 0 1 0 2 6 7 10 11 13 15 16 17 18 22 23 26 31 33 35 39 40 43 45 46 48 49 52 54 57 58 59 60 61 62 64 65 69 71 73 74 75 77 78 84 86 89 90 92 93 94 95 96 97 99 100 102 103 105 106 107 108 109 110 114 115 116 117 124 126 127 130 131 132 133 134 135 136 137 138 141 142 143 146 149 151 153 154 157 158 161 163 166 169 170 171 175 176 178 182 185 186 187 188 189 193 195 200 201 205 208 210 212 213 214 216 218 219 222 223 b 224 0 1 0 2 6 7 10 11 13 15 16 17 18 22 23 26 31 33 35 39 40 43 45 46 48 49 52 54 57 58 59 60 61 62 64 65 69 71 73 74 75 77 78 84 86 89 90 92 93 94 95 96 97 99 100 102 103 105 106 107 108 109 110 114 115 116 117 124 126 127 130 131 132 133 134 135 136 137 138 141 142 143 146 149 151 153 154 157 158 161 163 166 169 170 171 175 176 178 182 185 186 187 188 189 193 195 200 201 205 208 210 212 213 214 216 218 219 222 223 # 13110 is_subset c a 224 0 1 0 2 6 7 10 11 13 15 16 17 18 22 23 26 31 33 35 39 40 43 45 46 48 49 52 54 57 58 59 60 61 62 64 65 69 71 73 74 75 77 78 84 86 89 90 92 93 94 95 96 97 99 100 102 103 105 106 107 108 109 110 114 115 116 117 124 126 127 130 131 132 133 134 135 136 137 138 141 142 143 146 149 151 153 154 157 158 161 163 166 169 170 171 175 176 178 182 185 186 187 188 189 193 195 200 201 205 208 210 212 213 214 216 218 219 222 223 b 224 0 1 e # 13111 is_subset c a 224 0 1 0 2 5 6 8 9 10 12 14 15 17 18 21 26 28 29 31 33 34 35 36 37 39 40 47 51 52 53 54 57 58 59 60 61 62 64 65 66 67 70 74 75 76 77 78 82 84 85 88 91 93 96 103 104 106 107 109 110 113 114 116 119 121 122 123 124 126 130 131 134 137 138 139 140 141 144 145 147 149 150 151 152 153 158 159 160 161 162 164 165 168 171 174 179 185 186 187 189 196 197 198 199 203 204 208 209 210 214 215 218 219 223 b 224 0 1 0 2 5 6 8 9 10 12 14 15 17 18 21 26 28 29 31 33 34 35 36 37 39 40 47 51 52 53 54 57 58 59 60 61 62 64 65 66 67 70 74 75 76 77 78 82 84 85 88 91 93 96 103 104 106 107 109 110 113 114 116 119 121 122 123 124 126 130 131 134 137 138 139 140 141 144 145 147 149 150 151 152 153 158 159 160 161 162 164 165 168 171 174 179 185 186 187 189 196 197 198 199 203 204 208 209 210 214 215 218 219 223 # 13112 is_subset c a 224 0 1 0 2 5 6 8 9 10 12 14 15 17 18 21 26 28 29 31 33 34 35 36 37 39 40 47 51 52 53 54 57 58 59 60 61 62 64 65 66 67 70 74 75 76 77 78 82 84 85 88 91 93 96 103 104 106 107 109 110 113 114 116 119 121 122 123 124 126 130 131 134 137 138 139 140 141 144 145 147 149 150 151 152 153 158 159 160 161 162 164 165 168 171 174 179 185 186 187 189 196 197 198 199 203 204 208 209 210 214 215 218 219 223 b 224 0 1 f # 13113 is_subset c a 224 0 1 1 4 9 13 16 18 20 24 25 29 30 31 39 41 45 46 52 53 54 55 56 59 60 62 65 66 67 70 71 72 76 77 78 84 87 89 90 92 94 97 99 100 102 103 104 105 107 108 110 114 116 121 122 125 126 127 130 132 133 136 137 139 143 144 148 150 151 155 157 158 159 161 163 164 165 168 169 171 172 174 175 176 177 181 183 185 186 187 188 189 191 192 193 194 195 204 205 206 207 208 213 215 221 b 224 0 1 1 4 9 13 16 18 20 24 25 29 30 31 39 41 45 46 52 53 54 55 56 59 60 62 65 66 67 70 71 72 76 77 78 84 87 89 90 92 94 97 99 100 102 103 104 105 107 108 110 114 116 121 122 125 126 127 130 132 133 136 137 139 143 144 148 150 151 155 157 158 159 161 163 164 165 168 169 171 172 174 175 176 177 181 183 185 186 187 188 189 191 192 193 194 195 204 205 206 207 208 213 215 221 # 13114 is_subset c a 224 0 1 1 4 9 13 16 18 20 24 25 29 30 31 39 41 45 46 52 53 54 55 56 59 60 62 65 66 67 70 71 72 76 77 78 84 87 89 90 92 94 97 99 100 102 103 104 105 107 108 110 114 116 121 122 125 126 127 130 132 133 136 137 139 143 144 148 150 151 155 157 158 159 161 163 164 165 168 169 171 172 174 175 176 177 181 183 185 186 187 188 189 191 192 193 194 195 204 205 206 207 208 213 215 221 b 224 0 1 0 4 7 8 9 11 12 14 15 17 19 20 21 25 27 28 29 31 32 34 35 36 38 39 41 42 43 45 46 47 48 49 52 53 54 55 56 58 59 60 61 62 63 65 66 75 79 81 83 84 86 87 89 90 92 93 98 99 100 104 105 106 107 108 110 116 120 122 123 126 127 129 132 133 135 138 140 141 142 145 146 147 152 153 154 157 158 159 160 162 163 167 168 171 172 173 176 180 183 187 192 194 195 196 198 199 200 201 202 203 204 206 207 208 211 212 213 214 218 219 222 # 13115 is_subset c a 224 0 1 e b 224 0 1 e # 13116 is_subset c a 224 0 1 e b 224 1 0 e # 13117 is_subset c a 224 0 1 e b 224 0 1 e # 13118 is_subset c a 224 0 1 e b 224 1 0 f # 13119 is_subset c a 224 0 1 e b 224 0 1 e # 13120 is_subset c a 224 0 1 e b 224 1 0 0 1 3 5 6 8 9 10 11 13 14 19 20 24 26 28 29 31 32 33 34 36 37 38 39 40 41 42 44 45 46 47 48 50 51 52 58 62 64 65 66 67 75 76 78 79 81 82 86 87 90 91 92 93 94 95 96 97 101 105 111 114 115 117 119 122 123 125 126 131 133 136 137 138 141 142 143 145 147 148 149 150 151 154 155 157 159 160 161 164 165 166 167 170 171 173 175 176 177 179 180 182 184 185 187 189 190 194 196 198 200 201 204 205 207 208 209 210 211 212 215 217 218 219 223 # 13121 is_subset c a 224 0 1 f b 224 0 1 f # 13122 is_subset c a 224 0 1 f b 224 1 0 e # 13123 is_subset c a 224 0 1 f b 224 0 1 f # 13124 is_subset c a 224 0 1 f b 224 1 0 f # 13125 is_subset c a 224 0 1 f b 224 0 1 f # 13126 is_subset c a 224 0 1 f b 224 1 0 0 1 3 10 15 16 17 18 19 21 22 23 24 28 29 31 32 36 37 38 39 41 44 47 50 51 53 54 55 60 62 63 64 66 67 69 70 73 74 79 80 82 83 85 86 88 90 91 92 93 94 95 97 102 103 105 107 109 110 113 115 121 124 126 127 128 132 135 137 138 139 140 147 148 153 156 159 160 161 163 165 166 167 168 170 171 172 173 177 178 183 184 185 186 187 190 192 197 198 201 204 205 206 208 209 211 212 213 214 215 216 217 218 220 221 222 223 # 13127 is_subset c a 224 0 1 3 7 8 9 11 12 13 14 15 16 18 19 22 25 26 28 29 36 37 39 40 43 48 50 52 53 54 55 57 60 64 65 66 67 69 73 74 75 80 82 84 85 88 89 90 91 96 97 98 100 102 105 107 109 111 112 115 117 120 123 125 128 130 131 132 133 137 139 141 142 147 149 151 153 154 155 162 164 168 169 173 174 175 181 183 187 188 189 192 195 197 200 201 202 204 205 206 207 211 213 214 215 218 220 221 223 b 224 0 1 3 7 8 9 11 12 13 14 15 16 18 19 22 25 26 28 29 36 37 39 40 43 48 50 52 53 54 55 57 60 64 65 66 67 69 73 74 75 80 82 84 85 88 89 90 91 96 97 98 100 102 105 107 109 111 112 115 117 120 123 125 128 130 131 132 133 137 139 141 142 147 149 151 153 154 155 162 164 168 169 173 174 175 181 183 187 188 189 192 195 197 200 201 202 204 205 206 207 211 213 214 215 218 220 221 223 # 13128 is_subset c a 224 0 1 3 7 8 9 11 12 13 14 15 16 18 19 22 25 26 28 29 36 37 39 40 43 48 50 52 53 54 55 57 60 64 65 66 67 69 73 74 75 80 82 84 85 88 89 90 91 96 97 98 100 102 105 107 109 111 112 115 117 120 123 125 128 130 131 132 133 137 139 141 142 147 149 151 153 154 155 162 164 168 169 173 174 175 181 183 187 188 189 192 195 197 200 201 202 204 205 206 207 211 213 214 215 218 220 221 223 b 224 1 0 e # 13129 is_subset c a 224 0 1 1 2 3 4 7 10 11 13 14 15 18 19 23 24 27 29 30 32 33 35 40 43 46 47 48 50 52 55 57 59 64 66 68 70 71 72 74 76 79 80 83 85 86 87 90 91 93 98 100 103 104 105 109 112 119 122 123 125 127 131 132 134 137 138 139 140 143 144 145 147 149 150 151 152 154 158 159 162 164 166 169 172 173 174 175 176 178 179 180 182 183 184 188 193 199 200 201 203 206 212 213 215 217 220 221 b 224 0 1 1 2 3 4 7 10 11 13 14 15 18 19 23 24 27 29 30 32 33 35 40 43 46 47 48 50 52 55 57 59 64 66 68 70 71 72 74 76 79 80 83 85 86 87 90 91 93 98 100 103 104 105 109 112 119 122 123 125 127 131 132 134 137 138 139 140 143 144 145 147 149 150 151 152 154 158 159 162 164 166 169 172 173 174 175 176 178 179 180 182 183 184 188 193 199 200 201 203 206 212 213 215 217 220 221 # 13130 is_subset c a 224 0 1 1 2 3 4 7 10 11 13 14 15 18 19 23 24 27 29 30 32 33 35 40 43 46 47 48 50 52 55 57 59 64 66 68 70 71 72 74 76 79 80 83 85 86 87 90 91 93 98 100 103 104 105 109 112 119 122 123 125 127 131 132 134 137 138 139 140 143 144 145 147 149 150 151 152 154 158 159 162 164 166 169 172 173 174 175 176 178 179 180 182 183 184 188 193 199 200 201 203 206 212 213 215 217 220 221 b 224 1 0 f # 13131 is_subset c a 224 0 1 0 1 2 8 12 13 14 17 18 20 24 25 26 27 28 34 37 38 41 42 44 45 48 50 51 57 61 62 66 67 69 71 72 75 76 77 79 80 84 85 86 88 91 95 96 101 103 104 106 107 109 110 114 115 116 117 119 121 122 123 124 127 128 129 130 131 132 134 135 136 137 138 139 140 143 144 145 146 147 148 151 152 154 155 158 161 163 164 166 167 168 170 171 172 173 174 175 176 177 179 180 181 182 183 186 187 188 189 190 191 194 197 201 204 205 206 207 208 210 211 214 215 216 217 219 222 223 b 224 0 1 0 1 2 8 12 13 14 17 18 20 24 25 26 27 28 34 37 38 41 42 44 45 48 50 51 57 61 62 66 67 69 71 72 75 76 77 79 80 84 85 86 88 91 95 96 101 103 104 106 107 109 110 114 115 116 117 119 121 122 123 124 127 128 129 130 131 132 134 135 136 137 138 139 140 143 144 145 146 147 148 151 152 154 155 158 161 163 164 166 167 168 170 171 172 173 174 175 176 177 179 180 181 182 183 186 187 188 189 190 191 194 197 201 204 205 206 207 208 210 211 214 215 216 217 219 222 223 # 13132 is_subset c a 224 0 1 0 1 2 8 12 13 14 17 18 20 24 25 26 27 28 34 37 38 41 42 44 45 48 50 51 57 61 62 66 67 69 71 72 75 76 77 79 80 84 85 86 88 91 95 96 101 103 104 106 107 109 110 114 115 116 117 119 121 122 123 124 127 128 129 130 131 132 134 135 136 137 138 139 140 143 144 145 146 147 148 151 152 154 155 158 161 163 164 166 167 168 170 171 172 173 174 175 176 177 179 180 181 182 183 186 187 188 189 190 191 194 197 201 204 205 206 207 208 210 211 214 215 216 217 219 222 223 b 224 1 0 0 1 5 6 7 8 9 10 11 12 13 14 15 19 20 22 23 24 26 28 33 34 35 36 45 47 49 50 52 53 55 56 59 60 61 63 64 65 66 67 71 72 77 79 84 85 87 89 90 91 92 93 94 95 96 97 98 100 101 103 105 106 107 108 110 114 119 122 125 129 130 132 139 143 144 145 149 153 154 156 157 158 160 162 163 164 165 167 169 170 171 174 178 182 185 186 187 188 189 191 193 194 195 196 198 201 202 203 205 208 210 213 214 215 216 217 218 221 223 # 13133 is_subset c a 224 0 1 e b 224 0 1 e # 13134 is_subset c a 224 0 1 e b 224 1 1 e # 13135 is_subset c a 224 0 1 e b 224 0 1 e # 13136 is_subset c a 224 0 1 e b 224 1 1 f # 13137 is_subset c a 224 0 1 e b 224 0 1 e # 13138 is_subset c a 224 0 1 e b 224 1 1 0 1 2 3 5 8 11 12 15 16 21 22 24 25 26 28 29 30 31 32 33 34 37 38 41 45 51 54 57 59 60 62 63 66 67 69 70 71 72 74 76 80 81 82 85 87 88 89 90 95 96 100 103 104 106 107 110 113 115 116 117 118 119 120 124 127 128 129 131 133 135 136 138 140 141 142 144 147 152 153 154 155 157 158 159 160 162 163 164 166 167 168 169 171 177 178 179 180 182 183 185 188 201 202 203 206 207 208 209 211 214 215 219 221 223 # 13139 is_subset c a 224 0 1 f b 224 0 1 f # 13140 is_subset c a 224 0 1 f b 224 1 1 e # 13141 is_subset c a 224 0 1 f b 224 0 1 f # 13142 is_subset c a 224 0 1 f b 224 1 1 f # 13143 is_subset c a 224 0 1 f b 224 0 1 f # 13144 is_subset c a 224 0 1 f b 224 1 1 0 1 5 6 7 8 9 12 14 15 18 19 20 21 22 24 25 28 29 31 32 33 36 37 38 39 40 43 44 46 48 49 51 54 58 59 60 62 63 65 66 68 69 71 73 76 78 79 80 84 86 87 88 89 90 91 93 95 96 99 101 103 104 105 107 112 113 114 115 117 118 120 121 122 128 129 130 132 137 139 141 142 144 145 149 152 156 157 159 164 165 166 168 169 172 174 176 178 182 183 184 187 188 189 190 194 198 201 202 205 206 208 210 212 216 219 221 # 13145 is_subset c a 224 0 1 1 2 6 7 11 13 14 17 21 22 23 25 26 28 29 30 32 33 34 39 40 41 44 49 52 55 66 68 71 72 73 74 75 78 82 84 87 88 89 91 93 96 97 98 99 104 106 108 109 110 113 114 117 119 120 122 123 130 132 134 135 136 137 138 139 140 141 147 149 150 151 153 154 156 158 160 161 162 163 171 173 175 176 177 183 184 187 188 189 191 192 193 195 197 199 202 203 205 208 209 213 214 216 219 223 b 224 0 1 1 2 6 7 11 13 14 17 21 22 23 25 26 28 29 30 32 33 34 39 40 41 44 49 52 55 66 68 71 72 73 74 75 78 82 84 87 88 89 91 93 96 97 98 99 104 106 108 109 110 113 114 117 119 120 122 123 130 132 134 135 136 137 138 139 140 141 147 149 150 151 153 154 156 158 160 161 162 163 171 173 175 176 177 183 184 187 188 189 191 192 193 195 197 199 202 203 205 208 209 213 214 216 219 223 # 13146 is_subset c a 224 0 1 1 2 6 7 11 13 14 17 21 22 23 25 26 28 29 30 32 33 34 39 40 41 44 49 52 55 66 68 71 72 73 74 75 78 82 84 87 88 89 91 93 96 97 98 99 104 106 108 109 110 113 114 117 119 120 122 123 130 132 134 135 136 137 138 139 140 141 147 149 150 151 153 154 156 158 160 161 162 163 171 173 175 176 177 183 184 187 188 189 191 192 193 195 197 199 202 203 205 208 209 213 214 216 219 223 b 224 1 1 e # 13147 is_subset c a 224 0 1 1 2 3 4 6 8 11 13 16 17 19 24 27 28 29 30 32 33 35 39 40 42 47 48 49 50 54 56 59 60 63 65 68 69 71 74 76 79 83 84 92 95 97 101 102 103 105 109 110 111 114 115 119 120 121 125 129 130 131 132 133 134 136 137 138 140 141 143 144 146 153 154 156 158 161 165 166 168 171 173 174 176 177 178 182 186 187 188 189 191 192 197 201 203 204 205 206 207 208 209 211 212 213 b 224 0 1 1 2 3 4 6 8 11 13 16 17 19 24 27 28 29 30 32 33 35 39 40 42 47 48 49 50 54 56 59 60 63 65 68 69 71 74 76 79 83 84 92 95 97 101 102 103 105 109 110 111 114 115 119 120 121 125 129 130 131 132 133 134 136 137 138 140 141 143 144 146 153 154 156 158 161 165 166 168 171 173 174 176 177 178 182 186 187 188 189 191 192 197 201 203 204 205 206 207 208 209 211 212 213 # 13148 is_subset c a 224 0 1 1 2 3 4 6 8 11 13 16 17 19 24 27 28 29 30 32 33 35 39 40 42 47 48 49 50 54 56 59 60 63 65 68 69 71 74 76 79 83 84 92 95 97 101 102 103 105 109 110 111 114 115 119 120 121 125 129 130 131 132 133 134 136 137 138 140 141 143 144 146 153 154 156 158 161 165 166 168 171 173 174 176 177 178 182 186 187 188 189 191 192 197 201 203 204 205 206 207 208 209 211 212 213 b 224 1 1 f # 13149 is_subset c a 224 0 1 0 5 6 7 8 10 11 13 15 17 18 20 22 24 25 29 30 34 35 37 38 42 47 51 52 53 55 56 57 62 63 65 67 68 70 72 73 74 75 78 79 80 81 82 83 84 85 86 87 88 94 95 98 100 101 102 104 108 110 113 116 117 121 122 123 125 126 127 131 133 135 137 142 144 145 146 147 148 149 152 153 154 155 156 157 158 159 161 162 164 169 170 171 172 175 177 178 180 181 182 183 184 185 186 187 190 191 193 197 198 199 201 205 207 208 211 213 216 218 220 221 222 b 224 0 1 0 5 6 7 8 10 11 13 15 17 18 20 22 24 25 29 30 34 35 37 38 42 47 51 52 53 55 56 57 62 63 65 67 68 70 72 73 74 75 78 79 80 81 82 83 84 85 86 87 88 94 95 98 100 101 102 104 108 110 113 116 117 121 122 123 125 126 127 131 133 135 137 142 144 145 146 147 148 149 152 153 154 155 156 157 158 159 161 162 164 169 170 171 172 175 177 178 180 181 182 183 184 185 186 187 190 191 193 197 198 199 201 205 207 208 211 213 216 218 220 221 222 # 13150 is_subset c a 224 0 1 0 5 6 7 8 10 11 13 15 17 18 20 22 24 25 29 30 34 35 37 38 42 47 51 52 53 55 56 57 62 63 65 67 68 70 72 73 74 75 78 79 80 81 82 83 84 85 86 87 88 94 95 98 100 101 102 104 108 110 113 116 117 121 122 123 125 126 127 131 133 135 137 142 144 145 146 147 148 149 152 153 154 155 156 157 158 159 161 162 164 169 170 171 172 175 177 178 180 181 182 183 184 185 186 187 190 191 193 197 198 199 201 205 207 208 211 213 216 218 220 221 222 b 224 1 1 2 3 4 5 9 10 11 12 16 17 19 20 21 24 26 27 28 29 30 32 33 35 37 39 40 42 44 46 47 48 50 51 52 53 55 57 58 60 61 62 63 65 66 67 68 70 72 73 74 75 76 77 79 82 85 88 89 90 91 92 102 104 105 106 107 108 110 111 112 113 115 116 119 124 125 129 131 132 134 135 136 137 138 139 141 142 144 145 149 151 152 153 155 156 157 158 159 162 164 165 167 168 177 178 179 181 182 184 185 188 192 194 196 199 200 201 202 204 210 211 213 215 216 220 221 222 # 13151 is_subset c a 224 1 0 e b 224 1 0 e # 13152 is_subset c a 224 1 0 e b 224 0 0 e # 13153 is_subset c a 224 1 0 e b 224 1 0 e # 13154 is_subset c a 224 1 0 e b 224 0 0 f # 13155 is_subset c a 224 1 0 e b 224 1 0 e # 13156 is_subset c a 224 1 0 e b 224 0 0 2 4 6 8 9 10 11 15 19 20 21 22 23 27 29 34 36 37 38 39 40 42 44 45 46 50 53 54 56 61 62 63 66 69 70 71 73 75 76 79 80 83 84 87 89 91 92 93 98 99 101 102 105 109 111 112 114 115 116 118 122 126 127 128 129 134 135 140 143 144 146 147 148 149 150 153 154 157 160 161 162 164 168 170 171 172 174 175 176 177 178 179 180 181 183 184 189 190 191 196 198 199 200 203 204 206 208 209 211 214 216 219 220 222 # 13157 is_subset c a 224 1 0 f b 224 1 0 f # 13158 is_subset c a 224 1 0 f b 224 0 0 e # 13159 is_subset c a 224 1 0 f b 224 1 0 f # 13160 is_subset c a 224 1 0 f b 224 0 0 f # 13161 is_subset c a 224 1 0 f b 224 1 0 f # 13162 is_subset c a 224 1 0 f b 224 0 0 0 2 3 4 5 7 9 10 11 13 17 18 19 21 23 24 25 26 27 28 29 31 35 37 38 40 45 47 48 50 51 53 54 56 57 59 60 61 65 68 69 70 71 75 77 86 87 89 90 92 95 97 100 104 106 110 112 113 114 115 117 118 120 121 122 124 128 129 131 133 134 137 138 141 142 144 145 147 148 152 154 155 161 163 167 171 174 175 178 179 184 188 189 190 193 195 197 198 201 203 206 209 211 213 215 217 220 221 222 # 13163 is_subset c a 224 1 0 0 5 6 7 8 9 10 14 15 18 23 25 27 28 31 32 34 37 40 41 42 43 46 47 48 51 52 53 54 55 57 58 62 63 64 65 68 70 75 76 78 79 80 81 82 84 91 92 94 97 98 102 103 104 106 107 109 110 112 114 116 118 120 124 125 126 128 129 139 141 143 145 150 151 161 162 166 167 168 169 170 171 172 173 174 176 178 180 181 185 189 190 192 194 196 197 198 200 201 203 204 207 208 210 211 214 216 218 221 222 b 224 1 0 0 5 6 7 8 9 10 14 15 18 23 25 27 28 31 32 34 37 40 41 42 43 46 47 48 51 52 53 54 55 57 58 62 63 64 65 68 70 75 76 78 79 80 81 82 84 91 92 94 97 98 102 103 104 106 107 109 110 112 114 116 118 120 124 125 126 128 129 139 141 143 145 150 151 161 162 166 167 168 169 170 171 172 173 174 176 178 180 181 185 189 190 192 194 196 197 198 200 201 203 204 207 208 210 211 214 216 218 221 222 # 13164 is_subset c a 224 1 0 0 5 6 7 8 9 10 14 15 18 23 25 27 28 31 32 34 37 40 41 42 43 46 47 48 51 52 53 54 55 57 58 62 63 64 65 68 70 75 76 78 79 80 81 82 84 91 92 94 97 98 102 103 104 106 107 109 110 112 114 116 118 120 124 125 126 128 129 139 141 143 145 150 151 161 162 166 167 168 169 170 171 172 173 174 176 178 180 181 185 189 190 192 194 196 197 198 200 201 203 204 207 208 210 211 214 216 218 221 222 b 224 0 0 e # 13165 is_subset c a 224 1 0 1 2 3 5 9 10 14 17 19 24 28 30 32 37 38 39 40 41 42 44 45 46 48 49 55 56 57 59 61 62 66 67 68 71 74 77 78 80 81 82 83 86 90 93 94 95 100 101 102 105 107 108 115 118 119 120 121 123 124 125 126 134 135 138 142 143 147 148 150 153 156 158 162 163 164 165 168 175 177 178 181 182 183 184 187 189 191 194 195 196 199 201 203 204 205 206 209 210 211 212 216 217 220 223 b 224 1 0 1 2 3 5 9 10 14 17 19 24 28 30 32 37 38 39 40 41 42 44 45 46 48 49 55 56 57 59 61 62 66 67 68 71 74 77 78 80 81 82 83 86 90 93 94 95 100 101 102 105 107 108 115 118 119 120 121 123 124 125 126 134 135 138 142 143 147 148 150 153 156 158 162 163 164 165 168 175 177 178 181 182 183 184 187 189 191 194 195 196 199 201 203 204 205 206 209 210 211 212 216 217 220 223 # 13166 is_subset c a 224 1 0 1 2 3 5 9 10 14 17 19 24 28 30 32 37 38 39 40 41 42 44 45 46 48 49 55 56 57 59 61 62 66 67 68 71 74 77 78 80 81 82 83 86 90 93 94 95 100 101 102 105 107 108 115 118 119 120 121 123 124 125 126 134 135 138 142 143 147 148 150 153 156 158 162 163 164 165 168 175 177 178 181 182 183 184 187 189 191 194 195 196 199 201 203 204 205 206 209 210 211 212 216 217 220 223 b 224 0 0 f # 13167 is_subset c a 224 1 0 0 1 2 3 6 7 8 10 11 12 13 16 20 21 22 26 28 29 32 37 38 41 45 46 49 50 51 52 53 56 59 61 64 70 71 74 75 77 78 79 80 81 82 86 91 92 94 95 96 100 104 106 108 109 111 112 113 117 118 119 121 128 129 130 131 138 141 143 144 149 150 151 152 154 156 158 159 160 161 162 167 171 174 176 177 180 183 184 187 190 193 194 195 199 201 203 206 210 212 213 215 217 218 219 221 223 b 224 1 0 0 1 2 3 6 7 8 10 11 12 13 16 20 21 22 26 28 29 32 37 38 41 45 46 49 50 51 52 53 56 59 61 64 70 71 74 75 77 78 79 80 81 82 86 91 92 94 95 96 100 104 106 108 109 111 112 113 117 118 119 121 128 129 130 131 138 141 143 144 149 150 151 152 154 156 158 159 160 161 162 167 171 174 176 177 180 183 184 187 190 193 194 195 199 201 203 206 210 212 213 215 217 218 219 221 223 # 13168 is_subset c a 224 1 0 0 1 2 3 6 7 8 10 11 12 13 16 20 21 22 26 28 29 32 37 38 41 45 46 49 50 51 52 53 56 59 61 64 70 71 74 75 77 78 79 80 81 82 86 91 92 94 95 96 100 104 106 108 109 111 112 113 117 118 119 121 128 129 130 131 138 141 143 144 149 150 151 152 154 156 158 159 160 161 162 167 171 174 176 177 180 183 184 187 190 193 194 195 199 201 203 206 210 212 213 215 217 218 219 221 223 b 224 0 0 0 1 5 6 7 8 11 12 15 16 17 19 20 22 25 26 28 31 33 36 40 41 45 48 49 51 54 57 58 64 66 67 68 72 73 74 81 82 84 85 86 88 89 93 94 97 98 99 100 103 104 108 109 110 113 114 116 117 118 119 120 122 123 124 125 133 137 138 141 143 148 150 151 153 154 156 157 158 161 162 163 164 167 168 172 173 176 177 178 179 181 182 183 184 189 190 191 192 195 196 197 198 199 200 201 203 204 205 207 208 210 211 212 214 215 216 217 220 221 223 # 13169 is_subset c a 224 1 0 e b 224 1 0 e # 13170 is_subset c a 224 1 0 e b 224 0 1 e # 13171 is_subset c a 224 1 0 e b 224 1 0 e # 13172 is_subset c a 224 1 0 e b 224 0 1 f # 13173 is_subset c a 224 1 0 e b 224 1 0 e # 13174 is_subset c a 224 1 0 e b 224 0 1 1 2 6 12 13 14 15 17 18 22 26 29 31 32 34 36 37 38 46 49 50 53 54 55 56 61 62 64 65 67 68 70 75 76 81 82 84 87 88 90 93 94 96 98 99 101 103 105 106 109 110 112 114 115 116 119 120 123 131 133 134 135 137 139 140 141 143 149 153 155 159 160 161 162 163 164 165 166 169 170 172 174 178 179 183 186 187 188 191 194 196 202 204 205 206 209 211 214 215 216 217 218 219 222 223 # 13175 is_subset c a 224 1 0 f b 224 1 0 f # 13176 is_subset c a 224 1 0 f b 224 0 1 e # 13177 is_subset c a 224 1 0 f b 224 1 0 f # 13178 is_subset c a 224 1 0 f b 224 0 1 f # 13179 is_subset c a 224 1 0 f b 224 1 0 f # 13180 is_subset c a 224 1 0 f b 224 0 1 2 4 6 8 9 10 11 13 14 15 16 20 23 24 26 30 31 32 33 35 43 49 50 54 56 57 65 67 69 73 75 76 77 80 82 83 84 85 89 90 91 93 94 95 96 98 99 100 104 105 106 107 116 118 129 133 134 137 139 140 141 144 146 147 148 152 153 154 156 157 158 160 161 162 164 165 169 174 176 177 179 181 184 185 186 187 188 191 196 197 201 202 203 205 208 209 211 212 215 217 221 223 # 13181 is_subset c a 224 1 0 0 1 3 5 7 10 11 14 20 25 26 27 30 32 36 37 43 44 50 52 56 62 64 66 67 71 72 74 75 76 80 83 84 85 87 89 91 95 96 98 100 101 103 106 112 113 114 116 120 122 124 129 130 132 133 134 137 138 139 140 142 143 145 152 155 156 157 160 161 163 164 169 170 173 174 176 178 180 183 184 185 188 189 190 192 195 196 198 199 201 203 204 207 209 213 214 215 216 222 223 b 224 1 0 0 1 3 5 7 10 11 14 20 25 26 27 30 32 36 37 43 44 50 52 56 62 64 66 67 71 72 74 75 76 80 83 84 85 87 89 91 95 96 98 100 101 103 106 112 113 114 116 120 122 124 129 130 132 133 134 137 138 139 140 142 143 145 152 155 156 157 160 161 163 164 169 170 173 174 176 178 180 183 184 185 188 189 190 192 195 196 198 199 201 203 204 207 209 213 214 215 216 222 223 # 13182 is_subset c a 224 1 0 0 1 3 5 7 10 11 14 20 25 26 27 30 32 36 37 43 44 50 52 56 62 64 66 67 71 72 74 75 76 80 83 84 85 87 89 91 95 96 98 100 101 103 106 112 113 114 116 120 122 124 129 130 132 133 134 137 138 139 140 142 143 145 152 155 156 157 160 161 163 164 169 170 173 174 176 178 180 183 184 185 188 189 190 192 195 196 198 199 201 203 204 207 209 213 214 215 216 222 223 b 224 0 1 e # 13183 is_subset c a 224 1 0 2 4 5 8 10 11 12 14 17 20 24 25 26 29 31 33 34 35 36 40 45 46 47 48 51 52 53 55 56 58 59 62 65 67 68 69 71 72 73 76 77 79 83 85 86 87 88 89 90 92 93 94 100 101 103 109 110 111 114 127 129 135 136 137 140 143 144 145 147 149 151 153 154 155 156 161 162 163 166 169 170 173 175 176 177 178 180 184 186 187 188 191 194 196 198 202 203 205 206 208 209 210 212 214 215 217 218 b 224 1 0 2 4 5 8 10 11 12 14 17 20 24 25 26 29 31 33 34 35 36 40 45 46 47 48 51 52 53 55 56 58 59 62 65 67 68 69 71 72 73 76 77 79 83 85 86 87 88 89 90 92 93 94 100 101 103 109 110 111 114 127 129 135 136 137 140 143 144 145 147 149 151 153 154 155 156 161 162 163 166 169 170 173 175 176 177 178 180 184 186 187 188 191 194 196 198 202 203 205 206 208 209 210 212 214 215 217 218 # 13184 is_subset c a 224 1 0 2 4 5 8 10 11 12 14 17 20 24 25 26 29 31 33 34 35 36 40 45 46 47 48 51 52 53 55 56 58 59 62 65 67 68 69 71 72 73 76 77 79 83 85 86 87 88 89 90 92 93 94 100 101 103 109 110 111 114 127 129 135 136 137 140 143 144 145 147 149 151 153 154 155 156 161 162 163 166 169 170 173 175 176 177 178 180 184 186 187 188 191 194 196 198 202 203 205 206 208 209 210 212 214 215 217 218 b 224 0 1 f # 13185 is_subset c a 224 1 0 0 1 2 3 5 7 10 11 15 23 24 28 30 31 33 34 35 38 39 41 43 45 46 48 50 53 57 58 59 62 63 66 67 68 69 73 74 75 76 77 79 80 81 84 85 86 89 91 93 100 101 104 114 117 118 119 121 123 124 125 130 134 135 136 137 139 141 143 145 148 153 154 156 158 159 160 163 164 165 166 168 173 176 177 178 182 184 185 186 187 188 190 191 192 193 194 195 196 197 199 201 205 206 208 209 210 214 218 220 221 222 223 b 224 1 0 0 1 2 3 5 7 10 11 15 23 24 28 30 31 33 34 35 38 39 41 43 45 46 48 50 53 57 58 59 62 63 66 67 68 69 73 74 75 76 77 79 80 81 84 85 86 89 91 93 100 101 104 114 117 118 119 121 123 124 125 130 134 135 136 137 139 141 143 145 148 153 154 156 158 159 160 163 164 165 166 168 173 176 177 178 182 184 185 186 187 188 190 191 192 193 194 195 196 197 199 201 205 206 208 209 210 214 218 220 221 222 223 # 13186 is_subset c a 224 1 0 0 1 2 3 5 7 10 11 15 23 24 28 30 31 33 34 35 38 39 41 43 45 46 48 50 53 57 58 59 62 63 66 67 68 69 73 74 75 76 77 79 80 81 84 85 86 89 91 93 100 101 104 114 117 118 119 121 123 124 125 130 134 135 136 137 139 141 143 145 148 153 154 156 158 159 160 163 164 165 166 168 173 176 177 178 182 184 185 186 187 188 190 191 192 193 194 195 196 197 199 201 205 206 208 209 210 214 218 220 221 222 223 b 224 0 1 0 1 2 3 5 6 7 8 20 22 23 24 25 27 30 32 34 37 40 44 45 47 49 51 54 55 56 58 62 64 65 66 70 72 74 81 88 90 92 94 95 97 99 100 101 103 105 109 110 112 114 115 116 119 120 121 122 125 127 133 135 136 139 143 144 146 147 148 151 155 159 160 161 164 168 172 173 181 183 188 189 191 192 195 196 197 199 201 203 204 208 209 210 213 214 215 # 13187 is_subset c a 224 1 0 e b 224 1 0 e # 13188 is_subset c a 224 1 0 e b 224 1 0 e # 13189 is_subset c a 224 1 0 e b 224 1 0 e # 13190 is_subset c a 224 1 0 e b 224 1 0 f # 13191 is_subset c a 224 1 0 e b 224 1 0 e # 13192 is_subset c a 224 1 0 e b 224 1 0 0 1 3 4 6 7 10 11 12 17 18 19 20 21 25 26 27 36 44 46 47 50 54 56 57 63 64 65 67 68 72 74 76 80 82 85 86 88 89 90 96 97 99 101 103 108 109 110 111 113 114 115 116 117 119 120 121 125 126 131 132 133 134 136 139 144 147 151 153 155 157 158 159 162 164 167 168 169 170 171 176 177 178 179 182 183 187 190 192 194 195 196 198 199 202 204 206 208 209 214 216 219 220 221 223 # 13193 is_subset c a 224 1 0 f b 224 1 0 f # 13194 is_subset c a 224 1 0 f b 224 1 0 e # 13195 is_subset c a 224 1 0 f b 224 1 0 f # 13196 is_subset c a 224 1 0 f b 224 1 0 f # 13197 is_subset c a 224 1 0 f b 224 1 0 f # 13198 is_subset c a 224 1 0 f b 224 1 0 7 8 9 13 14 16 19 20 23 24 25 26 27 28 30 34 35 37 38 40 41 42 44 45 47 49 50 54 56 57 59 60 62 65 67 68 71 73 74 76 78 79 81 83 84 87 88 89 90 91 93 95 97 98 101 102 104 105 106 107 109 110 111 113 114 123 124 125 128 130 131 133 136 138 140 141 144 146 147 148 152 154 155 159 160 161 162 163 164 168 170 171 172 173 175 178 179 180 181 187 188 190 193 197 198 199 200 202 203 205 206 207 210 211 213 215 217 218 219 223 # 13199 is_subset c a 224 1 0 1 2 4 5 7 10 11 16 21 24 27 28 29 30 31 32 33 35 37 39 44 45 46 47 53 54 56 59 61 62 64 69 70 72 74 75 77 79 81 83 88 93 94 97 100 102 103 104 105 108 109 112 116 117 118 121 122 123 124 126 130 132 133 134 135 136 139 141 145 147 151 156 160 163 164 166 167 168 173 174 179 181 182 183 186 187 188 191 192 193 194 195 197 201 202 204 206 208 213 214 215 217 218 219 221 222 b 224 1 0 1 2 4 5 7 10 11 16 21 24 27 28 29 30 31 32 33 35 37 39 44 45 46 47 53 54 56 59 61 62 64 69 70 72 74 75 77 79 81 83 88 93 94 97 100 102 103 104 105 108 109 112 116 117 118 121 122 123 124 126 130 132 133 134 135 136 139 141 145 147 151 156 160 163 164 166 167 168 173 174 179 181 182 183 186 187 188 191 192 193 194 195 197 201 202 204 206 208 213 214 215 217 218 219 221 222 # 13200 is_subset c a 224 1 0 1 2 4 5 7 10 11 16 21 24 27 28 29 30 31 32 33 35 37 39 44 45 46 47 53 54 56 59 61 62 64 69 70 72 74 75 77 79 81 83 88 93 94 97 100 102 103 104 105 108 109 112 116 117 118 121 122 123 124 126 130 132 133 134 135 136 139 141 145 147 151 156 160 163 164 166 167 168 173 174 179 181 182 183 186 187 188 191 192 193 194 195 197 201 202 204 206 208 213 214 215 217 218 219 221 222 b 224 1 0 e # 13201 is_subset c a 224 1 0 0 2 3 9 10 13 17 19 20 22 23 26 27 29 36 38 41 43 44 45 48 49 55 56 58 61 65 66 67 69 71 72 73 74 75 76 77 80 81 82 83 86 87 88 93 94 95 97 98 99 100 101 103 104 106 110 111 113 114 117 121 122 123 127 130 131 134 135 139 140 142 143 145 147 149 151 152 156 157 159 161 162 165 167 169 171 174 175 176 178 184 185 188 189 191 192 195 197 198 200 208 210 212 214 215 216 219 220 221 222 223 b 224 1 0 0 2 3 9 10 13 17 19 20 22 23 26 27 29 36 38 41 43 44 45 48 49 55 56 58 61 65 66 67 69 71 72 73 74 75 76 77 80 81 82 83 86 87 88 93 94 95 97 98 99 100 101 103 104 106 110 111 113 114 117 121 122 123 127 130 131 134 135 139 140 142 143 145 147 149 151 152 156 157 159 161 162 165 167 169 171 174 175 176 178 184 185 188 189 191 192 195 197 198 200 208 210 212 214 215 216 219 220 221 222 223 # 13202 is_subset c a 224 1 0 0 2 3 9 10 13 17 19 20 22 23 26 27 29 36 38 41 43 44 45 48 49 55 56 58 61 65 66 67 69 71 72 73 74 75 76 77 80 81 82 83 86 87 88 93 94 95 97 98 99 100 101 103 104 106 110 111 113 114 117 121 122 123 127 130 131 134 135 139 140 142 143 145 147 149 151 152 156 157 159 161 162 165 167 169 171 174 175 176 178 184 185 188 189 191 192 195 197 198 200 208 210 212 214 215 216 219 220 221 222 223 b 224 1 0 f # 13203 is_subset c a 224 1 0 2 6 8 10 12 14 15 16 17 19 20 23 25 26 31 32 33 35 40 41 43 46 47 48 50 51 54 55 56 57 61 63 64 66 68 73 77 83 86 88 90 92 95 96 98 102 103 107 109 110 112 117 118 121 122 125 126 127 129 131 135 136 137 138 139 141 144 145 146 148 149 150 151 152 153 156 159 161 162 163 166 167 168 170 174 177 178 179 180 181 182 183 191 193 200 202 203 204 205 208 209 211 212 214 217 219 221 222 223 b 224 1 0 2 6 8 10 12 14 15 16 17 19 20 23 25 26 31 32 33 35 40 41 43 46 47 48 50 51 54 55 56 57 61 63 64 66 68 73 77 83 86 88 90 92 95 96 98 102 103 107 109 110 112 117 118 121 122 125 126 127 129 131 135 136 137 138 139 141 144 145 146 148 149 150 151 152 153 156 159 161 162 163 166 167 168 170 174 177 178 179 180 181 182 183 191 193 200 202 203 204 205 208 209 211 212 214 217 219 221 222 223 # 13204 is_subset c a 224 1 0 2 6 8 10 12 14 15 16 17 19 20 23 25 26 31 32 33 35 40 41 43 46 47 48 50 51 54 55 56 57 61 63 64 66 68 73 77 83 86 88 90 92 95 96 98 102 103 107 109 110 112 117 118 121 122 125 126 127 129 131 135 136 137 138 139 141 144 145 146 148 149 150 151 152 153 156 159 161 162 163 166 167 168 170 174 177 178 179 180 181 182 183 191 193 200 202 203 204 205 208 209 211 212 214 217 219 221 222 223 b 224 1 0 0 3 5 9 12 17 20 21 24 25 28 35 37 40 42 44 46 48 50 51 57 58 59 61 63 65 66 67 68 69 73 74 77 78 81 84 85 86 88 91 93 94 95 96 98 101 102 103 104 105 108 113 114 120 121 125 130 131 133 134 136 139 140 141 142 144 145 149 152 153 154 156 163 164 166 167 168 171 174 181 182 184 188 189 190 193 194 197 198 199 202 203 204 205 209 210 211 212 214 216 218 219 221 222 223 # 13205 is_subset c a 224 1 0 e b 224 1 0 e # 13206 is_subset c a 224 1 0 e b 224 1 1 e # 13207 is_subset c a 224 1 0 e b 224 1 0 e # 13208 is_subset c a 224 1 0 e b 224 1 1 f # 13209 is_subset c a 224 1 0 e b 224 1 0 e # 13210 is_subset c a 224 1 0 e b 224 1 1 0 1 2 3 4 5 6 9 13 14 15 20 22 23 24 25 26 29 32 35 39 40 41 45 47 49 53 56 58 60 61 63 65 68 69 71 75 77 78 79 83 85 86 87 89 92 93 94 95 101 103 105 106 107 108 109 110 112 114 117 120 122 125 127 129 132 133 135 136 137 138 140 142 143 144 145 146 147 148 152 154 155 156 158 161 162 164 165 168 169 170 171 173 180 181 182 184 185 187 191 193 194 195 196 199 202 203 206 207 208 210 212 213 214 215 218 219 220 223 # 13211 is_subset c a 224 1 0 f b 224 1 0 f # 13212 is_subset c a 224 1 0 f b 224 1 1 e # 13213 is_subset c a 224 1 0 f b 224 1 0 f # 13214 is_subset c a 224 1 0 f b 224 1 1 f # 13215 is_subset c a 224 1 0 f b 224 1 0 f # 13216 is_subset c a 224 1 0 f b 224 1 1 2 4 7 8 9 10 13 14 15 16 17 19 20 22 24 25 26 27 30 32 33 34 35 37 38 40 49 58 60 61 62 63 65 66 67 68 70 71 72 74 76 80 81 82 84 88 90 91 93 94 95 100 102 103 104 105 107 109 117 118 122 123 125 127 129 130 133 136 141 143 145 147 148 149 150 153 155 156 157 159 160 166 168 170 174 182 183 185 187 188 189 190 194 195 196 199 200 202 203 205 207 209 210 212 213 216 217 220 222 # 13217 is_subset c a 224 1 0 1 5 6 7 8 9 10 12 18 20 21 23 24 25 28 30 32 33 34 36 37 39 40 43 44 46 47 48 49 51 52 53 57 58 60 61 62 63 64 65 72 74 76 77 79 80 81 85 86 87 88 89 91 92 94 97 98 99 102 104 105 106 107 108 111 112 113 116 119 121 123 127 131 132 134 137 140 141 143 144 147 148 149 151 152 153 154 160 161 163 167 168 171 174 175 176 178 179 182 185 186 190 192 194 198 200 203 204 206 207 208 209 212 214 216 217 218 221 b 224 1 0 1 5 6 7 8 9 10 12 18 20 21 23 24 25 28 30 32 33 34 36 37 39 40 43 44 46 47 48 49 51 52 53 57 58 60 61 62 63 64 65 72 74 76 77 79 80 81 85 86 87 88 89 91 92 94 97 98 99 102 104 105 106 107 108 111 112 113 116 119 121 123 127 131 132 134 137 140 141 143 144 147 148 149 151 152 153 154 160 161 163 167 168 171 174 175 176 178 179 182 185 186 190 192 194 198 200 203 204 206 207 208 209 212 214 216 217 218 221 # 13218 is_subset c a 224 1 0 1 5 6 7 8 9 10 12 18 20 21 23 24 25 28 30 32 33 34 36 37 39 40 43 44 46 47 48 49 51 52 53 57 58 60 61 62 63 64 65 72 74 76 77 79 80 81 85 86 87 88 89 91 92 94 97 98 99 102 104 105 106 107 108 111 112 113 116 119 121 123 127 131 132 134 137 140 141 143 144 147 148 149 151 152 153 154 160 161 163 167 168 171 174 175 176 178 179 182 185 186 190 192 194 198 200 203 204 206 207 208 209 212 214 216 217 218 221 b 224 1 1 e # 13219 is_subset c a 224 1 0 0 4 6 8 12 15 17 20 23 27 28 29 30 31 35 36 39 40 41 43 46 47 50 52 56 59 62 64 67 68 69 71 72 73 74 77 82 84 85 86 89 91 93 95 97 98 99 100 102 103 104 110 112 114 118 119 122 123 125 126 128 132 135 136 138 139 140 141 143 147 148 150 154 155 157 161 162 163 164 165 166 167 169 170 175 180 184 186 192 195 198 199 200 204 208 209 211 212 213 214 215 217 218 219 b 224 1 0 0 4 6 8 12 15 17 20 23 27 28 29 30 31 35 36 39 40 41 43 46 47 50 52 56 59 62 64 67 68 69 71 72 73 74 77 82 84 85 86 89 91 93 95 97 98 99 100 102 103 104 110 112 114 118 119 122 123 125 126 128 132 135 136 138 139 140 141 143 147 148 150 154 155 157 161 162 163 164 165 166 167 169 170 175 180 184 186 192 195 198 199 200 204 208 209 211 212 213 214 215 217 218 219 # 13220 is_subset c a 224 1 0 0 4 6 8 12 15 17 20 23 27 28 29 30 31 35 36 39 40 41 43 46 47 50 52 56 59 62 64 67 68 69 71 72 73 74 77 82 84 85 86 89 91 93 95 97 98 99 100 102 103 104 110 112 114 118 119 122 123 125 126 128 132 135 136 138 139 140 141 143 147 148 150 154 155 157 161 162 163 164 165 166 167 169 170 175 180 184 186 192 195 198 199 200 204 208 209 211 212 213 214 215 217 218 219 b 224 1 1 f # 13221 is_subset c a 224 1 0 0 1 3 4 5 6 7 9 13 17 20 28 30 33 36 41 42 43 47 52 53 54 55 56 57 59 63 65 66 68 70 72 74 76 79 80 81 84 85 87 88 89 93 98 102 104 105 106 107 108 110 111 113 116 117 118 119 120 123 125 127 128 132 133 134 135 136 137 139 143 145 152 153 155 157 158 160 161 162 163 164 165 167 168 169 173 176 177 178 180 181 183 184 185 186 190 193 196 197 199 200 201 203 204 205 210 215 216 217 221 222 223 b 224 1 0 0 1 3 4 5 6 7 9 13 17 20 28 30 33 36 41 42 43 47 52 53 54 55 56 57 59 63 65 66 68 70 72 74 76 79 80 81 84 85 87 88 89 93 98 102 104 105 106 107 108 110 111 113 116 117 118 119 120 123 125 127 128 132 133 134 135 136 137 139 143 145 152 153 155 157 158 160 161 162 163 164 165 167 168 169 173 176 177 178 180 181 183 184 185 186 190 193 196 197 199 200 201 203 204 205 210 215 216 217 221 222 223 # 13222 is_subset c a 224 1 0 0 1 3 4 5 6 7 9 13 17 20 28 30 33 36 41 42 43 47 52 53 54 55 56 57 59 63 65 66 68 70 72 74 76 79 80 81 84 85 87 88 89 93 98 102 104 105 106 107 108 110 111 113 116 117 118 119 120 123 125 127 128 132 133 134 135 136 137 139 143 145 152 153 155 157 158 160 161 162 163 164 165 167 168 169 173 176 177 178 180 181 183 184 185 186 190 193 196 197 199 200 201 203 204 205 210 215 216 217 221 222 223 b 224 1 1 0 4 5 7 10 14 15 19 20 22 23 25 27 28 30 31 39 40 41 42 45 46 47 51 52 54 57 62 63 64 67 68 70 71 73 74 75 77 79 81 82 83 90 91 92 93 96 97 99 103 104 109 111 112 113 114 117 118 119 122 126 128 130 134 136 138 145 146 147 148 150 152 154 156 159 160 162 164 165 166 167 169 171 172 173 176 178 179 180 181 183 185 186 187 190 192 193 195 196 198 200 203 205 207 208 210 211 212 213 216 220 221 222 223 # 13223 is_subset c a 224 1 1 e b 224 1 1 e # 13224 is_subset c a 224 1 1 e b 224 0 0 e # 13225 is_subset c a 224 1 1 e b 224 1 1 e # 13226 is_subset c a 224 1 1 e b 224 0 0 f # 13227 is_subset c a 224 1 1 e b 224 1 1 e # 13228 is_subset c a 224 1 1 e b 224 0 0 0 2 5 6 9 11 12 13 14 15 16 19 21 26 29 32 34 38 39 42 46 48 54 55 56 57 60 61 62 63 67 68 70 72 73 74 75 77 82 83 84 85 86 87 88 95 96 98 99 100 101 105 107 108 109 110 111 113 114 120 121 122 123 124 125 126 127 133 134 135 136 140 147 148 149 150 153 156 160 161 163 166 170 172 174 175 178 180 181 182 186 192 193 197 198 199 203 204 205 206 209 214 215 217 219 220 221 223 # 13229 is_subset c a 224 1 1 f b 224 1 1 f # 13230 is_subset c a 224 1 1 f b 224 0 0 e # 13231 is_subset c a 224 1 1 f b 224 1 1 f # 13232 is_subset c a 224 1 1 f b 224 0 0 f # 13233 is_subset c a 224 1 1 f b 224 1 1 f # 13234 is_subset c a 224 1 1 f b 224 0 0 0 3 6 7 8 9 10 12 13 14 19 22 23 24 26 27 28 30 31 32 34 36 38 41 42 45 46 47 48 50 53 60 62 64 65 66 67 69 71 75 76 77 78 79 81 83 84 85 89 94 98 103 106 109 111 112 113 115 116 117 118 122 123 124 126 128 129 130 133 134 135 137 139 141 142 144 146 147 148 149 153 158 162 165 167 170 171 173 175 176 178 179 181 183 184 185 188 189 190 193 194 195 197 198 199 201 202 203 204 206 207 210 211 216 217 218 219 220 221 # 13235 is_subset c a 224 1 1 0 1 4 11 13 14 15 18 19 20 23 24 26 27 29 30 32 35 37 39 40 41 42 44 48 51 53 59 62 67 69 70 74 76 79 81 82 83 87 89 91 92 94 96 100 104 106 107 110 111 112 114 116 121 122 125 126 133 134 138 139 140 141 142 143 145 147 154 158 160 162 168 171 173 176 177 179 181 184 186 188 189 190 192 194 196 198 199 200 201 202 203 204 207 208 209 210 212 214 215 217 218 221 222 b 224 1 1 0 1 4 11 13 14 15 18 19 20 23 24 26 27 29 30 32 35 37 39 40 41 42 44 48 51 53 59 62 67 69 70 74 76 79 81 82 83 87 89 91 92 94 96 100 104 106 107 110 111 112 114 116 121 122 125 126 133 134 138 139 140 141 142 143 145 147 154 158 160 162 168 171 173 176 177 179 181 184 186 188 189 190 192 194 196 198 199 200 201 202 203 204 207 208 209 210 212 214 215 217 218 221 222 # 13236 is_subset c a 224 1 1 0 1 4 11 13 14 15 18 19 20 23 24 26 27 29 30 32 35 37 39 40 41 42 44 48 51 53 59 62 67 69 70 74 76 79 81 82 83 87 89 91 92 94 96 100 104 106 107 110 111 112 114 116 121 122 125 126 133 134 138 139 140 141 142 143 145 147 154 158 160 162 168 171 173 176 177 179 181 184 186 188 189 190 192 194 196 198 199 200 201 202 203 204 207 208 209 210 212 214 215 217 218 221 222 b 224 0 0 e # 13237 is_subset c a 224 1 1 2 4 9 13 16 17 19 23 24 26 29 30 33 34 35 37 39 40 41 44 47 49 50 51 56 58 59 61 67 69 72 73 75 77 78 79 80 81 84 85 87 90 91 92 97 99 100 101 102 103 106 107 109 113 114 116 121 126 127 131 132 134 136 141 142 143 144 145 147 148 154 155 156 157 161 165 166 169 170 171 172 173 176 177 179 183 184 187 189 192 194 198 199 201 202 204 206 207 208 209 213 214 216 221 222 b 224 1 1 2 4 9 13 16 17 19 23 24 26 29 30 33 34 35 37 39 40 41 44 47 49 50 51 56 58 59 61 67 69 72 73 75 77 78 79 80 81 84 85 87 90 91 92 97 99 100 101 102 103 106 107 109 113 114 116 121 126 127 131 132 134 136 141 142 143 144 145 147 148 154 155 156 157 161 165 166 169 170 171 172 173 176 177 179 183 184 187 189 192 194 198 199 201 202 204 206 207 208 209 213 214 216 221 222 # 13238 is_subset c a 224 1 1 2 4 9 13 16 17 19 23 24 26 29 30 33 34 35 37 39 40 41 44 47 49 50 51 56 58 59 61 67 69 72 73 75 77 78 79 80 81 84 85 87 90 91 92 97 99 100 101 102 103 106 107 109 113 114 116 121 126 127 131 132 134 136 141 142 143 144 145 147 148 154 155 156 157 161 165 166 169 170 171 172 173 176 177 179 183 184 187 189 192 194 198 199 201 202 204 206 207 208 209 213 214 216 221 222 b 224 0 0 f # 13239 is_subset c a 224 1 1 2 3 4 5 6 8 10 11 12 14 15 18 19 20 21 23 25 27 28 29 31 34 38 40 41 43 47 50 55 57 58 59 60 62 64 65 66 69 70 74 75 76 80 82 87 88 90 91 92 93 94 95 97 99 102 103 104 105 106 107 110 113 114 115 116 118 119 120 122 123 125 126 127 131 132 134 135 137 138 139 140 141 148 151 152 154 155 156 157 158 164 172 173 174 178 184 187 189 191 193 195 197 200 202 203 208 210 212 213 215 217 220 221 223 b 224 1 1 2 3 4 5 6 8 10 11 12 14 15 18 19 20 21 23 25 27 28 29 31 34 38 40 41 43 47 50 55 57 58 59 60 62 64 65 66 69 70 74 75 76 80 82 87 88 90 91 92 93 94 95 97 99 102 103 104 105 106 107 110 113 114 115 116 118 119 120 122 123 125 126 127 131 132 134 135 137 138 139 140 141 148 151 152 154 155 156 157 158 164 172 173 174 178 184 187 189 191 193 195 197 200 202 203 208 210 212 213 215 217 220 221 223 # 13240 is_subset c a 224 1 1 2 3 4 5 6 8 10 11 12 14 15 18 19 20 21 23 25 27 28 29 31 34 38 40 41 43 47 50 55 57 58 59 60 62 64 65 66 69 70 74 75 76 80 82 87 88 90 91 92 93 94 95 97 99 102 103 104 105 106 107 110 113 114 115 116 118 119 120 122 123 125 126 127 131 132 134 135 137 138 139 140 141 148 151 152 154 155 156 157 158 164 172 173 174 178 184 187 189 191 193 195 197 200 202 203 208 210 212 213 215 217 220 221 223 b 224 0 0 2 3 8 9 11 13 21 22 24 26 31 32 35 36 37 40 45 49 50 52 53 54 55 57 61 63 65 66 67 72 73 75 76 77 80 82 83 84 85 86 88 89 90 91 92 93 94 95 96 97 98 103 105 106 108 110 111 112 114 115 117 118 119 120 121 122 124 125 128 130 132 138 140 141 148 151 152 155 157 161 162 165 166 169 170 171 173 175 177 180 181 182 183 186 187 188 189 192 193 196 198 200 205 207 210 213 # 13241 is_subset c a 224 1 1 e b 224 1 1 e # 13242 is_subset c a 224 1 1 e b 224 0 1 e # 13243 is_subset c a 224 1 1 e b 224 1 1 e # 13244 is_subset c a 224 1 1 e b 224 0 1 f # 13245 is_subset c a 224 1 1 e b 224 1 1 e # 13246 is_subset c a 224 1 1 e b 224 0 1 1 6 8 9 10 12 13 14 17 18 19 20 27 28 29 30 32 34 36 37 40 42 45 46 47 48 51 52 53 54 58 61 62 65 66 70 74 75 79 80 81 82 83 84 85 86 87 89 91 92 93 96 97 98 103 104 108 109 111 112 113 115 116 118 119 121 122 124 125 126 127 128 129 130 134 136 141 144 145 149 151 152 155 158 160 161 167 168 169 172 173 174 178 179 184 185 187 188 189 191 192 193 195 197 198 200 202 205 206 207 208 209 213 216 217 219 220 222 # 13247 is_subset c a 224 1 1 f b 224 1 1 f # 13248 is_subset c a 224 1 1 f b 224 0 1 e # 13249 is_subset c a 224 1 1 f b 224 1 1 f # 13250 is_subset c a 224 1 1 f b 224 0 1 f # 13251 is_subset c a 224 1 1 f b 224 1 1 f # 13252 is_subset c a 224 1 1 f b 224 0 1 1 4 6 8 10 13 14 16 21 22 24 25 26 29 30 31 32 36 37 38 39 41 43 44 46 47 48 58 59 61 63 65 68 74 76 77 81 82 83 88 89 91 92 93 94 95 100 104 106 107 111 113 114 115 119 122 123 125 126 127 130 132 134 135 136 137 141 143 144 146 147 148 149 150 151 153 154 155 156 157 162 163 164 165 166 167 168 172 173 175 178 181 183 184 187 189 201 202 204 209 210 211 212 213 217 220 222 # 13253 is_subset c a 224 1 1 0 2 3 4 9 10 13 14 15 16 17 19 20 21 23 24 27 28 31 32 34 35 36 37 38 40 41 42 44 45 46 47 48 53 57 61 62 65 68 70 71 72 73 74 75 76 77 79 81 83 84 85 87 88 89 92 94 96 97 98 99 101 104 106 107 110 111 113 114 116 122 124 126 127 129 131 132 133 134 135 137 138 139 141 142 143 144 145 150 151 152 153 155 159 161 164 171 174 175 179 180 182 183 188 189 192 193 194 195 199 200 201 202 205 207 208 209 210 211 213 217 218 220 222 223 b 224 1 1 0 2 3 4 9 10 13 14 15 16 17 19 20 21 23 24 27 28 31 32 34 35 36 37 38 40 41 42 44 45 46 47 48 53 57 61 62 65 68 70 71 72 73 74 75 76 77 79 81 83 84 85 87 88 89 92 94 96 97 98 99 101 104 106 107 110 111 113 114 116 122 124 126 127 129 131 132 133 134 135 137 138 139 141 142 143 144 145 150 151 152 153 155 159 161 164 171 174 175 179 180 182 183 188 189 192 193 194 195 199 200 201 202 205 207 208 209 210 211 213 217 218 220 222 223 # 13254 is_subset c a 224 1 1 0 2 3 4 9 10 13 14 15 16 17 19 20 21 23 24 27 28 31 32 34 35 36 37 38 40 41 42 44 45 46 47 48 53 57 61 62 65 68 70 71 72 73 74 75 76 77 79 81 83 84 85 87 88 89 92 94 96 97 98 99 101 104 106 107 110 111 113 114 116 122 124 126 127 129 131 132 133 134 135 137 138 139 141 142 143 144 145 150 151 152 153 155 159 161 164 171 174 175 179 180 182 183 188 189 192 193 194 195 199 200 201 202 205 207 208 209 210 211 213 217 218 220 222 223 b 224 0 1 e # 13255 is_subset c a 224 1 1 0 1 2 6 9 10 11 13 14 16 17 19 20 21 24 26 27 28 29 30 31 32 33 34 37 38 39 40 41 42 44 45 46 48 49 51 52 53 61 62 64 65 66 67 68 69 70 71 74 77 78 79 80 82 85 86 87 90 93 94 95 96 98 99 101 102 103 105 106 109 112 114 117 118 120 121 122 124 125 127 130 132 133 138 139 140 143 145 147 148 151 154 156 162 164 165 166 172 173 176 178 180 183 190 191 192 195 199 200 201 202 206 208 209 210 212 213 217 218 219 221 222 223 b 224 1 1 0 1 2 6 9 10 11 13 14 16 17 19 20 21 24 26 27 28 29 30 31 32 33 34 37 38 39 40 41 42 44 45 46 48 49 51 52 53 61 62 64 65 66 67 68 69 70 71 74 77 78 79 80 82 85 86 87 90 93 94 95 96 98 99 101 102 103 105 106 109 112 114 117 118 120 121 122 124 125 127 130 132 133 138 139 140 143 145 147 148 151 154 156 162 164 165 166 172 173 176 178 180 183 190 191 192 195 199 200 201 202 206 208 209 210 212 213 217 218 219 221 222 223 # 13256 is_subset c a 224 1 1 0 1 2 6 9 10 11 13 14 16 17 19 20 21 24 26 27 28 29 30 31 32 33 34 37 38 39 40 41 42 44 45 46 48 49 51 52 53 61 62 64 65 66 67 68 69 70 71 74 77 78 79 80 82 85 86 87 90 93 94 95 96 98 99 101 102 103 105 106 109 112 114 117 118 120 121 122 124 125 127 130 132 133 138 139 140 143 145 147 148 151 154 156 162 164 165 166 172 173 176 178 180 183 190 191 192 195 199 200 201 202 206 208 209 210 212 213 217 218 219 221 222 223 b 224 0 1 f # 13257 is_subset c a 224 1 1 2 3 5 8 10 12 18 22 25 29 31 35 37 38 39 41 45 46 48 49 50 54 57 58 59 60 64 65 66 67 68 69 70 72 74 75 76 79 84 85 86 87 88 89 90 91 102 103 106 108 112 113 114 116 117 119 120 122 125 127 129 130 132 133 138 140 143 147 148 149 150 151 152 154 159 164 165 166 169 173 174 180 182 183 184 185 189 190 191 192 194 195 196 197 201 203 204 207 208 209 211 212 214 215 218 219 220 221 223 b 224 1 1 2 3 5 8 10 12 18 22 25 29 31 35 37 38 39 41 45 46 48 49 50 54 57 58 59 60 64 65 66 67 68 69 70 72 74 75 76 79 84 85 86 87 88 89 90 91 102 103 106 108 112 113 114 116 117 119 120 122 125 127 129 130 132 133 138 140 143 147 148 149 150 151 152 154 159 164 165 166 169 173 174 180 182 183 184 185 189 190 191 192 194 195 196 197 201 203 204 207 208 209 211 212 214 215 218 219 220 221 223 # 13258 is_subset c a 224 1 1 2 3 5 8 10 12 18 22 25 29 31 35 37 38 39 41 45 46 48 49 50 54 57 58 59 60 64 65 66 67 68 69 70 72 74 75 76 79 84 85 86 87 88 89 90 91 102 103 106 108 112 113 114 116 117 119 120 122 125 127 129 130 132 133 138 140 143 147 148 149 150 151 152 154 159 164 165 166 169 173 174 180 182 183 184 185 189 190 191 192 194 195 196 197 201 203 204 207 208 209 211 212 214 215 218 219 220 221 223 b 224 0 1 2 7 8 9 11 13 14 17 18 21 24 27 29 30 33 34 41 42 43 45 46 47 48 49 51 52 53 55 56 57 58 61 62 63 64 67 68 71 74 75 76 77 78 79 80 82 84 87 88 89 92 93 100 101 104 105 106 107 108 109 110 112 114 115 116 118 119 123 127 128 129 130 131 132 135 138 139 140 143 144 146 147 148 149 151 153 154 166 167 168 169 170 171 174 176 177 178 180 183 188 189 190 192 193 194 197 201 202 203 205 206 207 209 213 215 217 221 222 # 13259 is_subset c a 224 1 1 e b 224 1 1 e # 13260 is_subset c a 224 1 1 e b 224 1 0 e # 13261 is_subset c a 224 1 1 e b 224 1 1 e # 13262 is_subset c a 224 1 1 e b 224 1 0 f # 13263 is_subset c a 224 1 1 e b 224 1 1 e # 13264 is_subset c a 224 1 1 e b 224 1 0 0 1 2 6 7 9 10 13 15 16 17 20 22 26 27 29 32 34 39 41 43 44 45 46 48 49 50 51 53 55 56 61 63 64 68 71 74 78 79 82 83 85 86 92 93 95 97 99 101 102 103 105 106 109 111 114 118 120 122 123 126 132 138 140 145 146 147 152 154 155 156 157 159 160 161 163 165 167 168 169 171 175 177 179 181 184 187 188 189 190 191 192 194 196 198 199 202 204 209 211 214 216 219 220 221 222 223 # 13265 is_subset c a 224 1 1 f b 224 1 1 f # 13266 is_subset c a 224 1 1 f b 224 1 0 e # 13267 is_subset c a 224 1 1 f b 224 1 1 f # 13268 is_subset c a 224 1 1 f b 224 1 0 f # 13269 is_subset c a 224 1 1 f b 224 1 1 f # 13270 is_subset c a 224 1 1 f b 224 1 0 1 2 4 5 10 11 13 15 16 20 22 23 24 25 27 28 32 35 37 39 40 41 42 44 45 47 49 50 53 55 56 57 58 59 60 62 63 64 66 70 73 74 76 77 78 80 81 82 83 84 85 86 88 89 91 92 94 95 96 97 98 99 100 101 104 105 108 110 111 114 117 118 121 122 125 127 130 134 135 140 142 144 145 151 157 159 160 164 165 167 169 171 172 175 176 177 178 180 184 185 186 188 190 191 192 194 200 201 203 204 205 206 207 209 213 214 216 219 220 # 13271 is_subset c a 224 1 1 0 2 3 4 7 9 10 12 17 18 20 22 23 24 27 28 29 36 37 38 39 40 41 43 46 49 50 51 53 54 56 58 59 63 65 66 68 69 71 72 75 76 85 86 89 90 92 96 98 99 101 103 105 106 110 111 112 113 116 117 120 122 123 124 125 127 129 132 133 136 138 140 141 143 144 147 149 150 153 154 155 156 158 159 165 166 169 170 173 177 178 179 181 183 184 186 191 192 193 194 195 196 197 201 202 203 204 211 213 215 216 220 221 b 224 1 1 0 2 3 4 7 9 10 12 17 18 20 22 23 24 27 28 29 36 37 38 39 40 41 43 46 49 50 51 53 54 56 58 59 63 65 66 68 69 71 72 75 76 85 86 89 90 92 96 98 99 101 103 105 106 110 111 112 113 116 117 120 122 123 124 125 127 129 132 133 136 138 140 141 143 144 147 149 150 153 154 155 156 158 159 165 166 169 170 173 177 178 179 181 183 184 186 191 192 193 194 195 196 197 201 202 203 204 211 213 215 216 220 221 # 13272 is_subset c a 224 1 1 0 2 3 4 7 9 10 12 17 18 20 22 23 24 27 28 29 36 37 38 39 40 41 43 46 49 50 51 53 54 56 58 59 63 65 66 68 69 71 72 75 76 85 86 89 90 92 96 98 99 101 103 105 106 110 111 112 113 116 117 120 122 123 124 125 127 129 132 133 136 138 140 141 143 144 147 149 150 153 154 155 156 158 159 165 166 169 170 173 177 178 179 181 183 184 186 191 192 193 194 195 196 197 201 202 203 204 211 213 215 216 220 221 b 224 1 0 e # 13273 is_subset c a 224 1 1 0 3 4 5 8 11 12 13 16 17 18 24 25 26 28 30 31 34 38 39 40 42 43 45 46 48 49 53 54 57 58 60 61 62 65 66 68 69 71 75 78 79 83 85 87 88 89 90 91 92 93 95 96 99 101 103 105 111 112 113 114 116 118 121 123 124 126 127 128 131 133 134 135 136 140 141 143 146 148 149 150 151 152 153 154 155 157 158 163 165 166 169 170 171 172 174 176 177 180 183 186 187 190 191 192 194 195 197 200 201 206 207 208 211 213 215 219 220 222 b 224 1 1 0 3 4 5 8 11 12 13 16 17 18 24 25 26 28 30 31 34 38 39 40 42 43 45 46 48 49 53 54 57 58 60 61 62 65 66 68 69 71 75 78 79 83 85 87 88 89 90 91 92 93 95 96 99 101 103 105 111 112 113 114 116 118 121 123 124 126 127 128 131 133 134 135 136 140 141 143 146 148 149 150 151 152 153 154 155 157 158 163 165 166 169 170 171 172 174 176 177 180 183 186 187 190 191 192 194 195 197 200 201 206 207 208 211 213 215 219 220 222 # 13274 is_subset c a 224 1 1 0 3 4 5 8 11 12 13 16 17 18 24 25 26 28 30 31 34 38 39 40 42 43 45 46 48 49 53 54 57 58 60 61 62 65 66 68 69 71 75 78 79 83 85 87 88 89 90 91 92 93 95 96 99 101 103 105 111 112 113 114 116 118 121 123 124 126 127 128 131 133 134 135 136 140 141 143 146 148 149 150 151 152 153 154 155 157 158 163 165 166 169 170 171 172 174 176 177 180 183 186 187 190 191 192 194 195 197 200 201 206 207 208 211 213 215 219 220 222 b 224 1 0 f # 13275 is_subset c a 224 1 1 0 1 3 4 5 8 9 10 11 13 14 16 18 23 24 25 26 29 30 31 32 34 35 39 42 43 44 45 46 47 49 51 53 54 57 58 59 60 61 62 63 65 66 69 71 79 81 82 83 85 87 88 89 90 91 92 94 95 97 100 101 103 105 107 110 111 113 114 115 116 117 118 119 120 122 123 124 125 126 128 130 133 135 136 137 138 139 141 142 144 147 149 150 153 156 157 158 162 169 172 173 174 179 181 183 184 185 188 189 190 191 193 195 197 199 200 206 207 210 211 215 217 219 220 222 b 224 1 1 0 1 3 4 5 8 9 10 11 13 14 16 18 23 24 25 26 29 30 31 32 34 35 39 42 43 44 45 46 47 49 51 53 54 57 58 59 60 61 62 63 65 66 69 71 79 81 82 83 85 87 88 89 90 91 92 94 95 97 100 101 103 105 107 110 111 113 114 115 116 117 118 119 120 122 123 124 125 126 128 130 133 135 136 137 138 139 141 142 144 147 149 150 153 156 157 158 162 169 172 173 174 179 181 183 184 185 188 189 190 191 193 195 197 199 200 206 207 210 211 215 217 219 220 222 # 13276 is_subset c a 224 1 1 0 1 3 4 5 8 9 10 11 13 14 16 18 23 24 25 26 29 30 31 32 34 35 39 42 43 44 45 46 47 49 51 53 54 57 58 59 60 61 62 63 65 66 69 71 79 81 82 83 85 87 88 89 90 91 92 94 95 97 100 101 103 105 107 110 111 113 114 115 116 117 118 119 120 122 123 124 125 126 128 130 133 135 136 137 138 139 141 142 144 147 149 150 153 156 157 158 162 169 172 173 174 179 181 183 184 185 188 189 190 191 193 195 197 199 200 206 207 210 211 215 217 219 220 222 b 224 1 0 3 6 7 8 9 15 16 19 20 21 22 24 28 30 32 33 35 38 42 44 47 48 49 50 51 52 53 58 60 61 62 64 70 71 72 73 75 78 83 88 90 91 95 96 97 101 102 104 107 108 109 111 114 115 116 119 120 121 122 125 128 131 136 143 144 146 147 148 149 150 151 152 153 156 158 160 164 165 166 169 170 171 174 176 179 182 186 187 188 189 191 192 193 195 196 197 199 200 202 204 206 207 208 210 212 213 214 216 217 219 220 221 223 # 13277 is_subset c a 224 1 1 e b 224 1 1 e # 13278 is_subset c a 224 1 1 e b 224 1 1 e # 13279 is_subset c a 224 1 1 e b 224 1 1 e # 13280 is_subset c a 224 1 1 e b 224 1 1 f # 13281 is_subset c a 224 1 1 e b 224 1 1 e # 13282 is_subset c a 224 1 1 e b 224 1 1 0 1 4 5 7 8 11 12 15 16 19 20 22 23 26 27 28 30 31 32 35 36 37 39 40 41 42 43 44 47 49 52 56 59 61 65 69 73 77 79 81 85 86 87 88 89 90 92 94 96 100 101 102 104 106 107 108 110 112 113 114 116 117 119 120 121 123 126 130 133 134 135 136 137 138 139 141 144 149 151 152 154 155 156 157 161 162 164 165 167 168 170 171 175 176 177 179 181 182 185 187 191 193 196 197 198 201 204 205 207 209 210 211 212 213 215 218 219 220 222 # 13283 is_subset c a 224 1 1 f b 224 1 1 f # 13284 is_subset c a 224 1 1 f b 224 1 1 e # 13285 is_subset c a 224 1 1 f b 224 1 1 f # 13286 is_subset c a 224 1 1 f b 224 1 1 f # 13287 is_subset c a 224 1 1 f b 224 1 1 f # 13288 is_subset c a 224 1 1 f b 224 1 1 1 2 3 4 5 7 9 12 13 16 17 19 20 22 24 25 27 28 29 32 35 36 37 38 40 42 46 49 50 51 53 61 62 65 68 69 70 73 74 76 77 78 80 81 86 87 88 94 98 99 106 109 111 113 115 117 118 122 124 125 126 127 128 129 130 134 136 137 138 143 144 146 149 151 156 159 160 164 165 166 167 168 170 172 175 176 178 182 183 184 186 187 190 193 194 196 198 199 200 201 202 203 207 211 212 215 219 220 # 13289 is_subset c a 224 1 1 4 6 7 9 11 13 14 15 17 21 23 25 26 28 33 38 39 42 43 47 49 51 52 53 58 62 63 67 68 70 72 74 76 81 85 86 87 88 89 92 97 98 100 101 103 106 108 110 112 113 114 116 117 119 120 121 123 125 126 127 129 130 132 135 136 139 141 144 146 147 153 154 155 157 159 160 163 164 165 166 167 168 169 170 172 174 175 176 177 178 182 183 184 185 186 188 191 192 193 195 196 198 199 201 209 210 211 214 218 219 220 222 b 224 1 1 4 6 7 9 11 13 14 15 17 21 23 25 26 28 33 38 39 42 43 47 49 51 52 53 58 62 63 67 68 70 72 74 76 81 85 86 87 88 89 92 97 98 100 101 103 106 108 110 112 113 114 116 117 119 120 121 123 125 126 127 129 130 132 135 136 139 141 144 146 147 153 154 155 157 159 160 163 164 165 166 167 168 169 170 172 174 175 176 177 178 182 183 184 185 186 188 191 192 193 195 196 198 199 201 209 210 211 214 218 219 220 222 # 13290 is_subset c a 224 1 1 4 6 7 9 11 13 14 15 17 21 23 25 26 28 33 38 39 42 43 47 49 51 52 53 58 62 63 67 68 70 72 74 76 81 85 86 87 88 89 92 97 98 100 101 103 106 108 110 112 113 114 116 117 119 120 121 123 125 126 127 129 130 132 135 136 139 141 144 146 147 153 154 155 157 159 160 163 164 165 166 167 168 169 170 172 174 175 176 177 178 182 183 184 185 186 188 191 192 193 195 196 198 199 201 209 210 211 214 218 219 220 222 b 224 1 1 e # 13291 is_subset c a 224 1 1 3 5 6 7 8 9 10 11 17 21 22 23 26 28 30 31 32 33 34 36 37 38 39 40 41 42 43 45 48 49 50 52 53 57 59 62 65 68 70 73 75 76 77 79 80 84 86 91 95 97 98 99 101 103 104 105 108 109 111 112 115 116 117 123 124 125 127 130 131 137 138 140 141 143 146 149 150 151 157 159 163 164 165 168 169 170 171 172 173 178 179 181 182 183 186 187 191 193 194 196 197 199 200 202 203 207 210 211 215 216 218 219 220 222 b 224 1 1 3 5 6 7 8 9 10 11 17 21 22 23 26 28 30 31 32 33 34 36 37 38 39 40 41 42 43 45 48 49 50 52 53 57 59 62 65 68 70 73 75 76 77 79 80 84 86 91 95 97 98 99 101 103 104 105 108 109 111 112 115 116 117 123 124 125 127 130 131 137 138 140 141 143 146 149 150 151 157 159 163 164 165 168 169 170 171 172 173 178 179 181 182 183 186 187 191 193 194 196 197 199 200 202 203 207 210 211 215 216 218 219 220 222 # 13292 is_subset c a 224 1 1 3 5 6 7 8 9 10 11 17 21 22 23 26 28 30 31 32 33 34 36 37 38 39 40 41 42 43 45 48 49 50 52 53 57 59 62 65 68 70 73 75 76 77 79 80 84 86 91 95 97 98 99 101 103 104 105 108 109 111 112 115 116 117 123 124 125 127 130 131 137 138 140 141 143 146 149 150 151 157 159 163 164 165 168 169 170 171 172 173 178 179 181 182 183 186 187 191 193 194 196 197 199 200 202 203 207 210 211 215 216 218 219 220 222 b 224 1 1 f # 13293 is_subset c a 224 1 1 5 9 13 15 17 19 21 22 25 28 29 33 35 36 37 40 41 42 43 44 45 46 48 54 55 57 58 60 65 68 69 70 72 75 81 82 83 85 87 88 90 91 92 97 98 100 101 102 103 106 107 111 114 115 116 119 120 123 124 125 130 132 134 136 137 138 140 145 146 151 152 153 154 155 157 159 164 168 170 171 172 173 176 178 180 181 183 184 185 186 188 196 197 198 199 202 205 210 211 213 214 215 216 219 220 b 224 1 1 5 9 13 15 17 19 21 22 25 28 29 33 35 36 37 40 41 42 43 44 45 46 48 54 55 57 58 60 65 68 69 70 72 75 81 82 83 85 87 88 90 91 92 97 98 100 101 102 103 106 107 111 114 115 116 119 120 123 124 125 130 132 134 136 137 138 140 145 146 151 152 153 154 155 157 159 164 168 170 171 172 173 176 178 180 181 183 184 185 186 188 196 197 198 199 202 205 210 211 213 214 215 216 219 220 # 13294 is_subset c a 224 1 1 5 9 13 15 17 19 21 22 25 28 29 33 35 36 37 40 41 42 43 44 45 46 48 54 55 57 58 60 65 68 69 70 72 75 81 82 83 85 87 88 90 91 92 97 98 100 101 102 103 106 107 111 114 115 116 119 120 123 124 125 130 132 134 136 137 138 140 145 146 151 152 153 154 155 157 159 164 168 170 171 172 173 176 178 180 181 183 184 185 186 188 196 197 198 199 202 205 210 211 213 214 215 216 219 220 b 224 1 1 0 1 3 4 8 13 14 24 25 29 30 34 40 41 43 44 48 49 50 54 55 56 60 66 67 68 71 73 74 76 79 82 85 88 89 90 91 95 96 98 99 101 103 104 106 107 111 112 117 118 120 123 124 125 126 128 133 136 138 140 144 146 151 152 153 154 155 157 162 163 166 169 170 173 174 178 179 180 182 183 184 185 186 189 190 191 193 195 198 199 201 202 203 204 205 210 213 217 218 219 220 221 222 # 13295 is_subset c a 247 0 0 e b 247 0 0 e # 13296 is_subset c a 247 0 0 e b 247 0 0 e # 13297 is_subset c a 247 0 0 e b 247 0 0 e # 13298 is_subset c a 247 0 0 e b 247 0 0 f # 13299 is_subset c a 247 0 0 e b 247 0 0 e # 13300 is_subset c a 247 0 0 e b 247 0 0 0 4 6 8 9 11 12 13 14 15 16 17 20 22 25 28 29 30 31 35 43 46 50 51 52 53 56 58 59 61 62 63 64 65 66 69 70 75 78 79 80 81 82 85 86 90 91 93 94 96 98 99 101 103 104 105 106 109 113 114 115 116 120 124 127 128 130 132 135 137 139 140 141 142 144 145 147 152 153 155 156 157 159 162 167 169 171 178 180 182 183 184 187 189 190 193 194 195 196 197 200 201 207 208 211 212 213 214 215 218 222 225 228 229 232 233 234 238 240 245 # 13301 is_subset c a 247 0 0 f b 247 0 0 f # 13302 is_subset c a 247 0 0 f b 247 0 0 e # 13303 is_subset c a 247 0 0 f b 247 0 0 f # 13304 is_subset c a 247 0 0 f b 247 0 0 f # 13305 is_subset c a 247 0 0 f b 247 0 0 f # 13306 is_subset c a 247 0 0 f b 247 0 0 2 3 6 7 8 9 11 13 15 16 18 19 21 22 23 24 26 29 31 34 35 36 37 38 39 40 41 42 44 47 49 50 51 52 53 54 55 56 57 58 60 63 64 66 67 70 76 77 80 81 83 84 85 87 88 92 93 95 98 99 100 101 102 106 107 109 111 112 114 115 120 121 122 123 126 127 129 135 136 138 141 145 146 147 151 153 154 155 159 161 162 163 168 170 171 173 175 176 178 180 181 183 184 185 186 190 191 193 195 197 201 204 207 208 209 212 215 219 222 223 227 229 230 232 234 235 236 238 241 242 # 13307 is_subset c a 247 0 0 0 1 3 5 6 7 8 9 11 14 15 16 17 18 19 20 21 28 29 30 31 34 35 36 37 38 39 40 42 43 46 53 55 57 61 63 66 68 71 72 73 74 78 79 80 81 84 85 87 91 94 95 96 97 98 99 103 107 108 109 110 111 112 113 115 116 118 120 121 128 130 135 136 147 148 149 151 152 156 157 158 159 160 161 162 167 168 169 172 173 174 177 180 183 184 185 187 192 194 196 200 201 202 203 207 210 212 215 216 217 218 222 224 225 229 230 233 235 238 239 240 241 243 244 245 246 b 247 0 0 0 1 3 5 6 7 8 9 11 14 15 16 17 18 19 20 21 28 29 30 31 34 35 36 37 38 39 40 42 43 46 53 55 57 61 63 66 68 71 72 73 74 78 79 80 81 84 85 87 91 94 95 96 97 98 99 103 107 108 109 110 111 112 113 115 116 118 120 121 128 130 135 136 147 148 149 151 152 156 157 158 159 160 161 162 167 168 169 172 173 174 177 180 183 184 185 187 192 194 196 200 201 202 203 207 210 212 215 216 217 218 222 224 225 229 230 233 235 238 239 240 241 243 244 245 246 # 13308 is_subset c a 247 0 0 0 1 3 5 6 7 8 9 11 14 15 16 17 18 19 20 21 28 29 30 31 34 35 36 37 38 39 40 42 43 46 53 55 57 61 63 66 68 71 72 73 74 78 79 80 81 84 85 87 91 94 95 96 97 98 99 103 107 108 109 110 111 112 113 115 116 118 120 121 128 130 135 136 147 148 149 151 152 156 157 158 159 160 161 162 167 168 169 172 173 174 177 180 183 184 185 187 192 194 196 200 201 202 203 207 210 212 215 216 217 218 222 224 225 229 230 233 235 238 239 240 241 243 244 245 246 b 247 0 0 e # 13309 is_subset c a 247 0 0 0 1 2 4 5 8 10 12 15 16 17 19 21 22 23 24 27 29 30 32 34 35 38 40 41 43 45 46 48 49 51 52 53 54 59 61 63 66 67 68 69 71 73 74 75 78 86 87 89 90 91 92 94 96 99 101 102 103 107 108 112 114 115 116 118 122 124 125 126 133 135 137 138 141 142 143 145 146 149 151 155 160 161 162 163 164 166 168 170 173 175 179 180 181 185 188 189 190 191 193 194 200 204 205 208 209 211 213 215 223 225 226 230 232 234 235 236 239 242 243 b 247 0 0 0 1 2 4 5 8 10 12 15 16 17 19 21 22 23 24 27 29 30 32 34 35 38 40 41 43 45 46 48 49 51 52 53 54 59 61 63 66 67 68 69 71 73 74 75 78 86 87 89 90 91 92 94 96 99 101 102 103 107 108 112 114 115 116 118 122 124 125 126 133 135 137 138 141 142 143 145 146 149 151 155 160 161 162 163 164 166 168 170 173 175 179 180 181 185 188 189 190 191 193 194 200 204 205 208 209 211 213 215 223 225 226 230 232 234 235 236 239 242 243 # 13310 is_subset c a 247 0 0 0 1 2 4 5 8 10 12 15 16 17 19 21 22 23 24 27 29 30 32 34 35 38 40 41 43 45 46 48 49 51 52 53 54 59 61 63 66 67 68 69 71 73 74 75 78 86 87 89 90 91 92 94 96 99 101 102 103 107 108 112 114 115 116 118 122 124 125 126 133 135 137 138 141 142 143 145 146 149 151 155 160 161 162 163 164 166 168 170 173 175 179 180 181 185 188 189 190 191 193 194 200 204 205 208 209 211 213 215 223 225 226 230 232 234 235 236 239 242 243 b 247 0 0 f # 13311 is_subset c a 247 0 0 0 1 2 4 5 7 10 11 12 16 17 19 20 21 22 23 26 27 28 29 32 34 35 40 43 45 49 52 54 55 56 57 58 60 62 64 65 67 68 69 71 72 73 77 78 79 88 90 91 92 93 101 104 105 106 109 111 112 116 118 119 120 125 126 127 134 139 141 142 145 146 147 150 152 154 156 157 158 162 163 164 166 167 168 170 179 180 183 185 186 188 189 190 191 194 195 196 197 198 199 201 205 206 207 208 210 211 212 213 216 218 219 222 223 224 226 227 229 230 234 235 236 237 239 242 b 247 0 0 0 1 2 4 5 7 10 11 12 16 17 19 20 21 22 23 26 27 28 29 32 34 35 40 43 45 49 52 54 55 56 57 58 60 62 64 65 67 68 69 71 72 73 77 78 79 88 90 91 92 93 101 104 105 106 109 111 112 116 118 119 120 125 126 127 134 139 141 142 145 146 147 150 152 154 156 157 158 162 163 164 166 167 168 170 179 180 183 185 186 188 189 190 191 194 195 196 197 198 199 201 205 206 207 208 210 211 212 213 216 218 219 222 223 224 226 227 229 230 234 235 236 237 239 242 # 13312 is_subset c a 247 0 0 0 1 2 4 5 7 10 11 12 16 17 19 20 21 22 23 26 27 28 29 32 34 35 40 43 45 49 52 54 55 56 57 58 60 62 64 65 67 68 69 71 72 73 77 78 79 88 90 91 92 93 101 104 105 106 109 111 112 116 118 119 120 125 126 127 134 139 141 142 145 146 147 150 152 154 156 157 158 162 163 164 166 167 168 170 179 180 183 185 186 188 189 190 191 194 195 196 197 198 199 201 205 206 207 208 210 211 212 213 216 218 219 222 223 224 226 227 229 230 234 235 236 237 239 242 b 247 0 0 1 3 5 6 7 8 10 11 14 15 16 17 18 19 20 21 23 26 27 28 29 31 32 34 35 37 38 39 40 41 42 50 55 56 58 61 63 66 67 69 70 72 74 75 76 80 82 88 89 90 91 92 94 96 97 99 100 101 103 105 106 109 110 111 113 115 118 121 124 126 127 130 133 134 135 136 137 140 143 146 147 148 149 150 154 157 159 161 162 164 165 167 168 172 175 176 178 179 180 181 184 186 191 199 200 203 204 205 206 207 210 214 216 217 218 220 221 228 229 231 233 234 236 240 244 # 13313 is_subset c a 247 0 0 e b 247 0 0 e # 13314 is_subset c a 247 0 0 e b 247 0 1 e # 13315 is_subset c a 247 0 0 e b 247 0 0 e # 13316 is_subset c a 247 0 0 e b 247 0 1 f # 13317 is_subset c a 247 0 0 e b 247 0 0 e # 13318 is_subset c a 247 0 0 e b 247 0 1 0 1 4 9 10 11 12 15 16 18 19 23 30 31 37 38 39 40 42 43 44 46 47 48 50 52 53 55 59 60 62 64 65 66 68 69 76 77 78 79 81 84 88 89 90 91 93 95 96 102 104 106 109 111 114 116 119 120 122 127 128 132 134 135 136 139 142 143 144 145 146 147 148 150 151 152 153 160 161 162 163 166 167 168 169 170 173 174 177 185 186 187 189 192 195 196 197 198 199 200 201 202 204 205 206 208 210 212 214 216 217 220 221 225 227 228 230 231 233 236 239 240 243 # 13319 is_subset c a 247 0 0 f b 247 0 0 f # 13320 is_subset c a 247 0 0 f b 247 0 1 e # 13321 is_subset c a 247 0 0 f b 247 0 0 f # 13322 is_subset c a 247 0 0 f b 247 0 1 f # 13323 is_subset c a 247 0 0 f b 247 0 0 f # 13324 is_subset c a 247 0 0 f b 247 0 1 1 2 3 4 5 8 9 10 11 12 14 16 18 19 21 23 24 25 30 31 37 40 45 46 49 51 52 53 54 57 58 59 61 63 65 68 69 70 72 73 74 76 77 78 80 81 84 85 86 88 89 90 92 95 97 102 105 106 108 109 110 112 113 114 116 117 118 119 120 121 123 125 126 127 128 130 133 134 135 137 138 141 142 144 145 146 147 148 150 151 159 163 164 165 166 168 169 170 178 179 180 181 182 183 184 189 191 192 194 195 197 203 204 205 207 210 211 212 213 214 215 216 224 229 230 231 232 234 235 237 238 241 # 13325 is_subset c a 247 0 0 1 3 5 8 9 10 15 18 20 21 22 24 25 26 31 33 34 36 38 39 41 45 47 50 51 52 53 55 56 57 59 61 62 64 66 67 68 69 70 71 72 75 76 77 78 81 84 91 95 96 98 103 104 105 106 107 108 109 110 116 117 118 122 130 131 132 134 137 143 145 148 149 151 155 156 157 158 161 162 163 164 165 169 171 172 173 174 176 178 179 182 184 190 192 193 195 197 199 200 201 202 203 204 205 207 209 214 215 219 224 225 228 229 238 239 243 244 246 b 247 0 0 1 3 5 8 9 10 15 18 20 21 22 24 25 26 31 33 34 36 38 39 41 45 47 50 51 52 53 55 56 57 59 61 62 64 66 67 68 69 70 71 72 75 76 77 78 81 84 91 95 96 98 103 104 105 106 107 108 109 110 116 117 118 122 130 131 132 134 137 143 145 148 149 151 155 156 157 158 161 162 163 164 165 169 171 172 173 174 176 178 179 182 184 190 192 193 195 197 199 200 201 202 203 204 205 207 209 214 215 219 224 225 228 229 238 239 243 244 246 # 13326 is_subset c a 247 0 0 1 3 5 8 9 10 15 18 20 21 22 24 25 26 31 33 34 36 38 39 41 45 47 50 51 52 53 55 56 57 59 61 62 64 66 67 68 69 70 71 72 75 76 77 78 81 84 91 95 96 98 103 104 105 106 107 108 109 110 116 117 118 122 130 131 132 134 137 143 145 148 149 151 155 156 157 158 161 162 163 164 165 169 171 172 173 174 176 178 179 182 184 190 192 193 195 197 199 200 201 202 203 204 205 207 209 214 215 219 224 225 228 229 238 239 243 244 246 b 247 0 1 e # 13327 is_subset c a 247 0 0 3 4 9 10 11 12 13 17 21 25 28 29 30 31 34 36 38 41 43 45 47 48 49 52 53 56 57 60 63 64 68 69 70 71 72 73 74 76 78 80 82 83 84 86 87 91 92 93 94 95 99 101 102 103 104 105 107 113 114 117 128 131 134 139 142 143 145 147 148 149 153 154 158 159 160 162 164 165 166 169 171 174 175 178 180 181 182 184 185 186 187 188 189 190 191 193 194 196 197 198 200 201 202 205 208 209 210 211 212 215 217 218 220 221 222 223 224 225 227 228 229 230 232 233 234 236 237 238 239 240 242 243 244 245 246 b 247 0 0 3 4 9 10 11 12 13 17 21 25 28 29 30 31 34 36 38 41 43 45 47 48 49 52 53 56 57 60 63 64 68 69 70 71 72 73 74 76 78 80 82 83 84 86 87 91 92 93 94 95 99 101 102 103 104 105 107 113 114 117 128 131 134 139 142 143 145 147 148 149 153 154 158 159 160 162 164 165 166 169 171 174 175 178 180 181 182 184 185 186 187 188 189 190 191 193 194 196 197 198 200 201 202 205 208 209 210 211 212 215 217 218 220 221 222 223 224 225 227 228 229 230 232 233 234 236 237 238 239 240 242 243 244 245 246 # 13328 is_subset c a 247 0 0 3 4 9 10 11 12 13 17 21 25 28 29 30 31 34 36 38 41 43 45 47 48 49 52 53 56 57 60 63 64 68 69 70 71 72 73 74 76 78 80 82 83 84 86 87 91 92 93 94 95 99 101 102 103 104 105 107 113 114 117 128 131 134 139 142 143 145 147 148 149 153 154 158 159 160 162 164 165 166 169 171 174 175 178 180 181 182 184 185 186 187 188 189 190 191 193 194 196 197 198 200 201 202 205 208 209 210 211 212 215 217 218 220 221 222 223 224 225 227 228 229 230 232 233 234 236 237 238 239 240 242 243 244 245 246 b 247 0 1 f # 13329 is_subset c a 247 0 0 1 4 7 8 10 11 13 14 15 16 17 22 26 29 31 32 33 35 36 37 39 42 49 50 51 53 54 55 57 59 60 63 65 66 71 72 73 78 79 92 93 99 101 102 104 105 110 111 112 115 116 120 121 122 123 127 128 129 130 133 136 137 142 143 144 146 147 148 151 154 155 156 157 158 159 160 161 162 169 171 174 176 177 181 185 188 189 191 192 194 196 201 202 203 205 209 210 211 212 213 216 218 219 222 225 229 231 232 234 238 239 245 246 b 247 0 0 1 4 7 8 10 11 13 14 15 16 17 22 26 29 31 32 33 35 36 37 39 42 49 50 51 53 54 55 57 59 60 63 65 66 71 72 73 78 79 92 93 99 101 102 104 105 110 111 112 115 116 120 121 122 123 127 128 129 130 133 136 137 142 143 144 146 147 148 151 154 155 156 157 158 159 160 161 162 169 171 174 176 177 181 185 188 189 191 192 194 196 201 202 203 205 209 210 211 212 213 216 218 219 222 225 229 231 232 234 238 239 245 246 # 13330 is_subset c a 247 0 0 1 4 7 8 10 11 13 14 15 16 17 22 26 29 31 32 33 35 36 37 39 42 49 50 51 53 54 55 57 59 60 63 65 66 71 72 73 78 79 92 93 99 101 102 104 105 110 111 112 115 116 120 121 122 123 127 128 129 130 133 136 137 142 143 144 146 147 148 151 154 155 156 157 158 159 160 161 162 169 171 174 176 177 181 185 188 189 191 192 194 196 201 202 203 205 209 210 211 212 213 216 218 219 222 225 229 231 232 234 238 239 245 246 b 247 0 1 2 4 5 7 9 11 15 17 18 19 20 21 22 23 28 29 33 34 35 36 37 38 40 44 49 52 54 58 61 64 67 72 73 75 77 80 81 82 83 85 86 87 88 89 90 92 94 95 96 98 99 100 103 104 105 106 110 114 117 120 124 129 133 134 137 139 140 144 146 147 149 151 153 155 156 157 160 161 162 163 164 165 169 172 174 175 176 178 179 181 182 183 184 186 187 191 193 194 195 196 200 202 203 204 206 207 208 210 213 217 218 227 228 229 231 233 234 238 240 241 242 246 # 13331 is_subset c a 247 0 0 e b 247 0 0 e # 13332 is_subset c a 247 0 0 e b 247 1 0 e # 13333 is_subset c a 247 0 0 e b 247 0 0 e # 13334 is_subset c a 247 0 0 e b 247 1 0 f # 13335 is_subset c a 247 0 0 e b 247 0 0 e # 13336 is_subset c a 247 0 0 e b 247 1 0 0 2 5 6 7 12 15 19 20 21 22 24 28 29 31 32 33 34 36 37 40 41 43 45 46 47 54 56 58 59 61 64 66 67 73 76 77 81 82 84 85 86 87 93 94 99 100 101 102 103 109 114 116 117 121 122 123 124 128 129 130 131 133 134 135 140 141 142 144 145 146 147 148 151 152 153 154 155 157 158 160 161 164 165 170 173 174 176 177 180 183 186 187 189 191 192 193 195 196 198 199 200 201 205 208 209 210 211 214 215 218 219 222 223 224 225 226 227 229 230 233 234 235 236 239 240 241 246 # 13337 is_subset c a 247 0 0 f b 247 0 0 f # 13338 is_subset c a 247 0 0 f b 247 1 0 e # 13339 is_subset c a 247 0 0 f b 247 0 0 f # 13340 is_subset c a 247 0 0 f b 247 1 0 f # 13341 is_subset c a 247 0 0 f b 247 0 0 f # 13342 is_subset c a 247 0 0 f b 247 1 0 0 1 2 4 5 7 8 10 11 12 16 18 19 26 29 32 34 35 37 38 42 43 44 47 48 50 54 55 59 61 64 65 66 68 69 76 79 80 86 87 88 90 92 95 101 105 106 109 111 113 115 116 118 119 121 122 124 128 129 133 134 135 136 138 139 142 143 144 147 150 151 152 153 155 157 160 161 164 166 168 169 174 176 180 181 183 184 185 186 187 188 189 192 193 194 196 197 198 199 200 202 203 204 205 207 210 214 216 217 219 220 225 226 228 229 230 233 236 237 242 243 245 246 # 13343 is_subset c a 247 0 0 5 7 8 10 13 15 19 21 22 23 27 28 30 32 35 36 37 38 39 43 48 49 51 52 54 55 58 61 65 68 69 75 76 77 79 82 84 88 93 96 97 98 99 100 101 105 106 111 112 113 118 120 123 125 128 133 134 135 137 139 140 142 143 147 148 149 153 156 157 158 161 162 164 165 172 181 182 183 189 190 192 193 194 195 198 199 200 203 205 207 209 211 213 215 217 220 221 222 223 224 225 231 232 233 234 237 239 240 245 b 247 0 0 5 7 8 10 13 15 19 21 22 23 27 28 30 32 35 36 37 38 39 43 48 49 51 52 54 55 58 61 65 68 69 75 76 77 79 82 84 88 93 96 97 98 99 100 101 105 106 111 112 113 118 120 123 125 128 133 134 135 137 139 140 142 143 147 148 149 153 156 157 158 161 162 164 165 172 181 182 183 189 190 192 193 194 195 198 199 200 203 205 207 209 211 213 215 217 220 221 222 223 224 225 231 232 233 234 237 239 240 245 # 13344 is_subset c a 247 0 0 5 7 8 10 13 15 19 21 22 23 27 28 30 32 35 36 37 38 39 43 48 49 51 52 54 55 58 61 65 68 69 75 76 77 79 82 84 88 93 96 97 98 99 100 101 105 106 111 112 113 118 120 123 125 128 133 134 135 137 139 140 142 143 147 148 149 153 156 157 158 161 162 164 165 172 181 182 183 189 190 192 193 194 195 198 199 200 203 205 207 209 211 213 215 217 220 221 222 223 224 225 231 232 233 234 237 239 240 245 b 247 1 0 e # 13345 is_subset c a 247 0 0 0 1 10 14 16 20 23 24 25 32 33 37 38 39 40 44 45 46 47 50 58 59 60 63 65 67 69 73 74 76 77 78 81 82 83 85 87 89 90 94 96 101 102 103 105 106 108 109 112 114 119 122 124 125 126 127 132 138 146 147 148 151 152 159 160 163 164 167 168 169 171 173 175 177 179 181 182 183 187 188 189 190 191 193 195 197 198 200 203 204 206 211 214 215 216 218 219 220 225 227 228 236 238 241 243 245 b 247 0 0 0 1 10 14 16 20 23 24 25 32 33 37 38 39 40 44 45 46 47 50 58 59 60 63 65 67 69 73 74 76 77 78 81 82 83 85 87 89 90 94 96 101 102 103 105 106 108 109 112 114 119 122 124 125 126 127 132 138 146 147 148 151 152 159 160 163 164 167 168 169 171 173 175 177 179 181 182 183 187 188 189 190 191 193 195 197 198 200 203 204 206 211 214 215 216 218 219 220 225 227 228 236 238 241 243 245 # 13346 is_subset c a 247 0 0 0 1 10 14 16 20 23 24 25 32 33 37 38 39 40 44 45 46 47 50 58 59 60 63 65 67 69 73 74 76 77 78 81 82 83 85 87 89 90 94 96 101 102 103 105 106 108 109 112 114 119 122 124 125 126 127 132 138 146 147 148 151 152 159 160 163 164 167 168 169 171 173 175 177 179 181 182 183 187 188 189 190 191 193 195 197 198 200 203 204 206 211 214 215 216 218 219 220 225 227 228 236 238 241 243 245 b 247 1 0 f # 13347 is_subset c a 247 0 0 0 3 5 10 12 13 17 18 19 20 22 24 25 26 28 29 30 31 32 34 36 37 38 45 46 47 48 49 50 51 52 53 55 60 63 69 70 74 75 78 81 84 85 86 88 90 91 94 95 99 103 105 106 107 109 110 111 112 114 116 117 118 119 122 123 124 125 126 130 135 137 138 139 140 141 144 146 147 149 150 151 153 155 156 162 163 165 166 167 168 169 171 173 179 180 182 190 191 192 194 197 198 200 206 207 208 210 211 212 213 214 216 218 220 224 226 229 230 235 236 238 241 b 247 0 0 0 3 5 10 12 13 17 18 19 20 22 24 25 26 28 29 30 31 32 34 36 37 38 45 46 47 48 49 50 51 52 53 55 60 63 69 70 74 75 78 81 84 85 86 88 90 91 94 95 99 103 105 106 107 109 110 111 112 114 116 117 118 119 122 123 124 125 126 130 135 137 138 139 140 141 144 146 147 149 150 151 153 155 156 162 163 165 166 167 168 169 171 173 179 180 182 190 191 192 194 197 198 200 206 207 208 210 211 212 213 214 216 218 220 224 226 229 230 235 236 238 241 # 13348 is_subset c a 247 0 0 0 3 5 10 12 13 17 18 19 20 22 24 25 26 28 29 30 31 32 34 36 37 38 45 46 47 48 49 50 51 52 53 55 60 63 69 70 74 75 78 81 84 85 86 88 90 91 94 95 99 103 105 106 107 109 110 111 112 114 116 117 118 119 122 123 124 125 126 130 135 137 138 139 140 141 144 146 147 149 150 151 153 155 156 162 163 165 166 167 168 169 171 173 179 180 182 190 191 192 194 197 198 200 206 207 208 210 211 212 213 214 216 218 220 224 226 229 230 235 236 238 241 b 247 1 0 3 5 7 8 9 15 22 23 24 25 26 30 31 32 33 34 35 36 38 42 43 45 47 49 51 56 60 62 65 67 68 74 75 78 79 85 86 90 93 94 95 98 102 103 105 106 107 109 113 114 115 116 117 120 121 122 124 128 129 130 135 141 142 144 145 147 148 151 156 162 163 164 165 167 169 172 174 175 178 180 182 184 188 189 190 193 194 195 196 198 199 204 208 210 212 213 214 215 216 219 222 224 225 227 230 231 232 235 236 237 242 244 245 # 13349 is_subset c a 247 0 0 e b 247 0 0 e # 13350 is_subset c a 247 0 0 e b 247 1 1 e # 13351 is_subset c a 247 0 0 e b 247 0 0 e # 13352 is_subset c a 247 0 0 e b 247 1 1 f # 13353 is_subset c a 247 0 0 e b 247 0 0 e # 13354 is_subset c a 247 0 0 e b 247 1 1 0 1 3 5 6 7 8 9 13 16 18 19 21 23 26 27 30 35 37 39 40 41 43 45 49 50 52 55 56 57 58 61 62 63 65 66 68 71 72 73 74 76 77 78 79 80 81 83 84 85 86 87 88 90 93 96 97 98 99 106 113 114 117 118 121 124 125 126 128 129 131 133 135 136 137 143 146 147 149 150 152 154 155 157 159 160 162 169 171 173 179 184 187 190 192 193 194 200 201 204 205 206 209 211 215 216 218 219 220 221 223 224 225 229 230 232 233 235 236 239 242 244 245 # 13355 is_subset c a 247 0 0 f b 247 0 0 f # 13356 is_subset c a 247 0 0 f b 247 1 1 e # 13357 is_subset c a 247 0 0 f b 247 0 0 f # 13358 is_subset c a 247 0 0 f b 247 1 1 f # 13359 is_subset c a 247 0 0 f b 247 0 0 f # 13360 is_subset c a 247 0 0 f b 247 1 1 0 3 6 9 10 11 18 19 25 26 27 28 29 33 35 39 42 44 46 47 48 49 50 51 55 56 58 59 63 66 67 68 70 71 76 83 85 88 94 95 96 97 99 100 102 104 106 108 109 110 114 115 120 124 126 127 130 132 134 136 138 141 142 143 145 147 149 150 151 156 160 161 166 168 169 170 172 174 184 185 186 187 188 189 190 191 192 196 198 202 204 205 206 209 210 214 215 216 217 218 219 220 221 222 223 225 227 229 234 236 238 242 243 244 245 246 # 13361 is_subset c a 247 0 0 0 3 7 12 14 16 18 22 24 27 29 31 33 34 35 38 39 40 41 46 47 49 51 56 58 59 62 63 65 66 67 68 71 73 75 76 77 78 80 81 83 87 88 90 92 93 96 98 99 100 105 106 108 109 110 112 113 115 117 118 120 121 122 123 124 126 127 128 129 133 134 135 136 137 138 141 142 144 150 153 154 157 158 159 160 168 170 172 173 174 175 177 178 181 182 185 186 187 188 189 190 191 195 198 200 201 202 203 205 207 208 211 213 215 216 220 226 227 228 229 231 232 237 238 239 242 243 b 247 0 0 0 3 7 12 14 16 18 22 24 27 29 31 33 34 35 38 39 40 41 46 47 49 51 56 58 59 62 63 65 66 67 68 71 73 75 76 77 78 80 81 83 87 88 90 92 93 96 98 99 100 105 106 108 109 110 112 113 115 117 118 120 121 122 123 124 126 127 128 129 133 134 135 136 137 138 141 142 144 150 153 154 157 158 159 160 168 170 172 173 174 175 177 178 181 182 185 186 187 188 189 190 191 195 198 200 201 202 203 205 207 208 211 213 215 216 220 226 227 228 229 231 232 237 238 239 242 243 # 13362 is_subset c a 247 0 0 0 3 7 12 14 16 18 22 24 27 29 31 33 34 35 38 39 40 41 46 47 49 51 56 58 59 62 63 65 66 67 68 71 73 75 76 77 78 80 81 83 87 88 90 92 93 96 98 99 100 105 106 108 109 110 112 113 115 117 118 120 121 122 123 124 126 127 128 129 133 134 135 136 137 138 141 142 144 150 153 154 157 158 159 160 168 170 172 173 174 175 177 178 181 182 185 186 187 188 189 190 191 195 198 200 201 202 203 205 207 208 211 213 215 216 220 226 227 228 229 231 232 237 238 239 242 243 b 247 1 1 e # 13363 is_subset c a 247 0 0 0 1 2 4 6 7 8 10 11 13 15 16 17 19 20 22 23 24 26 27 34 35 37 38 40 41 42 44 47 48 49 50 51 53 54 56 57 58 62 63 65 66 67 68 69 71 72 74 75 80 84 87 91 92 94 102 103 104 105 106 110 116 117 121 125 127 129 131 134 135 140 141 142 146 147 151 154 155 158 159 161 162 168 169 170 171 172 173 174 175 176 177 178 180 182 184 185 186 189 191 192 193 195 197 208 211 219 220 221 222 223 224 225 226 228 230 232 233 235 237 240 241 246 b 247 0 0 0 1 2 4 6 7 8 10 11 13 15 16 17 19 20 22 23 24 26 27 34 35 37 38 40 41 42 44 47 48 49 50 51 53 54 56 57 58 62 63 65 66 67 68 69 71 72 74 75 80 84 87 91 92 94 102 103 104 105 106 110 116 117 121 125 127 129 131 134 135 140 141 142 146 147 151 154 155 158 159 161 162 168 169 170 171 172 173 174 175 176 177 178 180 182 184 185 186 189 191 192 193 195 197 208 211 219 220 221 222 223 224 225 226 228 230 232 233 235 237 240 241 246 # 13364 is_subset c a 247 0 0 0 1 2 4 6 7 8 10 11 13 15 16 17 19 20 22 23 24 26 27 34 35 37 38 40 41 42 44 47 48 49 50 51 53 54 56 57 58 62 63 65 66 67 68 69 71 72 74 75 80 84 87 91 92 94 102 103 104 105 106 110 116 117 121 125 127 129 131 134 135 140 141 142 146 147 151 154 155 158 159 161 162 168 169 170 171 172 173 174 175 176 177 178 180 182 184 185 186 189 191 192 193 195 197 208 211 219 220 221 222 223 224 225 226 228 230 232 233 235 237 240 241 246 b 247 1 1 f # 13365 is_subset c a 247 0 0 0 1 3 4 5 8 11 14 17 18 20 21 24 29 30 32 34 38 39 40 42 44 45 46 47 49 53 54 56 62 63 64 65 67 70 72 73 76 80 81 82 86 88 90 91 92 93 94 99 100 102 103 108 109 111 115 116 117 123 127 128 129 131 134 135 136 137 139 140 141 144 145 147 148 149 151 153 154 161 163 165 166 168 170 171 172 174 175 178 179 180 181 182 184 185 186 187 189 191 192 194 195 197 204 207 209 210 212 213 214 215 216 218 221 227 231 232 233 234 236 242 245 246 b 247 0 0 0 1 3 4 5 8 11 14 17 18 20 21 24 29 30 32 34 38 39 40 42 44 45 46 47 49 53 54 56 62 63 64 65 67 70 72 73 76 80 81 82 86 88 90 91 92 93 94 99 100 102 103 108 109 111 115 116 117 123 127 128 129 131 134 135 136 137 139 140 141 144 145 147 148 149 151 153 154 161 163 165 166 168 170 171 172 174 175 178 179 180 181 182 184 185 186 187 189 191 192 194 195 197 204 207 209 210 212 213 214 215 216 218 221 227 231 232 233 234 236 242 245 246 # 13366 is_subset c a 247 0 0 0 1 3 4 5 8 11 14 17 18 20 21 24 29 30 32 34 38 39 40 42 44 45 46 47 49 53 54 56 62 63 64 65 67 70 72 73 76 80 81 82 86 88 90 91 92 93 94 99 100 102 103 108 109 111 115 116 117 123 127 128 129 131 134 135 136 137 139 140 141 144 145 147 148 149 151 153 154 161 163 165 166 168 170 171 172 174 175 178 179 180 181 182 184 185 186 187 189 191 192 194 195 197 204 207 209 210 212 213 214 215 216 218 221 227 231 232 233 234 236 242 245 246 b 247 1 1 2 3 4 5 7 9 13 14 19 23 24 25 26 27 29 30 31 32 33 34 35 38 39 41 42 43 44 45 51 52 53 54 55 56 57 58 61 67 68 69 70 72 73 75 78 79 80 83 84 86 87 88 90 94 95 98 105 106 107 109 113 117 118 121 122 123 125 127 128 130 132 135 138 142 143 145 146 148 149 150 152 157 158 160 161 163 165 166 167 171 172 173 174 175 176 177 179 180 183 184 185 186 187 189 192 193 196 197 205 208 209 212 213 215 216 218 221 222 224 225 226 228 229 230 233 234 235 236 237 239 240 241 243 244 # 13367 is_subset c a 247 0 1 e b 247 0 1 e # 13368 is_subset c a 247 0 1 e b 247 0 0 e # 13369 is_subset c a 247 0 1 e b 247 0 1 e # 13370 is_subset c a 247 0 1 e b 247 0 0 f # 13371 is_subset c a 247 0 1 e b 247 0 1 e # 13372 is_subset c a 247 0 1 e b 247 0 0 0 1 3 4 6 8 9 10 12 13 18 21 22 23 24 25 28 29 30 31 34 38 41 42 43 44 50 51 53 54 55 56 57 59 60 64 66 68 70 71 73 74 75 76 81 83 84 85 86 88 91 92 93 94 96 97 98 99 102 105 108 109 110 112 113 116 117 118 119 122 123 124 125 127 130 131 132 135 137 141 142 144 145 146 147 148 149 150 152 153 155 157 158 159 160 161 162 163 165 166 168 169 170 172 175 178 180 181 182 183 184 185 186 188 189 191 192 193 195 196 199 202 204 208 210 211 214 215 217 220 222 228 229 231 235 236 240 241 243 245 246 # 13373 is_subset c a 247 0 1 f b 247 0 1 f # 13374 is_subset c a 247 0 1 f b 247 0 0 e # 13375 is_subset c a 247 0 1 f b 247 0 1 f # 13376 is_subset c a 247 0 1 f b 247 0 0 f # 13377 is_subset c a 247 0 1 f b 247 0 1 f # 13378 is_subset c a 247 0 1 f b 247 0 0 0 1 5 7 9 11 14 16 18 19 20 22 24 25 26 27 29 30 34 35 36 37 38 40 42 44 45 46 47 52 54 55 58 59 61 63 64 66 67 69 71 77 78 82 84 86 88 89 93 94 97 101 103 104 105 106 108 109 110 116 118 119 123 127 128 129 133 138 143 144 145 147 150 151 152 157 158 162 163 164 170 171 172 175 177 178 179 180 181 183 184 185 186 188 189 190 193 197 198 199 200 203 204 205 207 208 210 211 212 215 219 223 226 227 229 233 234 235 236 238 239 240 241 243 244 245 246 # 13379 is_subset c a 247 0 1 4 5 7 9 10 11 16 19 21 22 24 26 29 31 34 38 41 43 45 47 49 50 51 52 56 57 58 60 63 64 67 68 72 73 74 76 80 81 83 85 88 90 97 100 101 103 104 107 108 111 113 115 117 120 122 124 126 128 129 131 132 133 134 140 142 147 149 150 153 154 155 156 159 161 162 164 165 166 169 171 175 176 188 189 201 203 205 209 210 214 215 218 223 225 226 227 233 235 237 239 240 246 b 247 0 1 4 5 7 9 10 11 16 19 21 22 24 26 29 31 34 38 41 43 45 47 49 50 51 52 56 57 58 60 63 64 67 68 72 73 74 76 80 81 83 85 88 90 97 100 101 103 104 107 108 111 113 115 117 120 122 124 126 128 129 131 132 133 134 140 142 147 149 150 153 154 155 156 159 161 162 164 165 166 169 171 175 176 188 189 201 203 205 209 210 214 215 218 223 225 226 227 233 235 237 239 240 246 # 13380 is_subset c a 247 0 1 4 5 7 9 10 11 16 19 21 22 24 26 29 31 34 38 41 43 45 47 49 50 51 52 56 57 58 60 63 64 67 68 72 73 74 76 80 81 83 85 88 90 97 100 101 103 104 107 108 111 113 115 117 120 122 124 126 128 129 131 132 133 134 140 142 147 149 150 153 154 155 156 159 161 162 164 165 166 169 171 175 176 188 189 201 203 205 209 210 214 215 218 223 225 226 227 233 235 237 239 240 246 b 247 0 0 e # 13381 is_subset c a 247 0 1 0 1 2 4 6 7 8 9 10 12 14 16 18 19 20 23 26 28 31 32 35 36 37 38 40 42 43 44 45 49 54 55 56 57 59 61 62 67 69 71 74 77 78 80 81 82 85 88 91 96 99 101 102 103 105 107 108 109 111 112 113 116 118 120 124 125 126 127 130 131 133 134 135 137 140 141 142 143 144 148 150 151 152 154 155 157 158 160 165 166 167 168 170 171 173 174 175 179 180 182 183 184 185 186 189 190 193 194 196 197 199 202 205 209 216 218 222 225 226 231 235 237 239 240 241 244 245 246 b 247 0 1 0 1 2 4 6 7 8 9 10 12 14 16 18 19 20 23 26 28 31 32 35 36 37 38 40 42 43 44 45 49 54 55 56 57 59 61 62 67 69 71 74 77 78 80 81 82 85 88 91 96 99 101 102 103 105 107 108 109 111 112 113 116 118 120 124 125 126 127 130 131 133 134 135 137 140 141 142 143 144 148 150 151 152 154 155 157 158 160 165 166 167 168 170 171 173 174 175 179 180 182 183 184 185 186 189 190 193 194 196 197 199 202 205 209 216 218 222 225 226 231 235 237 239 240 241 244 245 246 # 13382 is_subset c a 247 0 1 0 1 2 4 6 7 8 9 10 12 14 16 18 19 20 23 26 28 31 32 35 36 37 38 40 42 43 44 45 49 54 55 56 57 59 61 62 67 69 71 74 77 78 80 81 82 85 88 91 96 99 101 102 103 105 107 108 109 111 112 113 116 118 120 124 125 126 127 130 131 133 134 135 137 140 141 142 143 144 148 150 151 152 154 155 157 158 160 165 166 167 168 170 171 173 174 175 179 180 182 183 184 185 186 189 190 193 194 196 197 199 202 205 209 216 218 222 225 226 231 235 237 239 240 241 244 245 246 b 247 0 0 f # 13383 is_subset c a 247 0 1 0 4 5 11 12 16 17 18 19 22 25 26 28 29 31 33 36 37 40 41 43 45 48 49 50 53 54 55 56 57 60 67 69 72 74 75 79 83 85 87 88 89 93 94 101 102 103 105 106 108 113 114 115 116 118 122 124 125 126 128 130 138 143 146 147 148 152 154 155 157 158 161 165 166 168 169 170 175 176 178 179 180 182 184 185 187 191 192 193 198 202 203 204 208 214 216 226 227 228 231 232 234 235 236 242 243 244 245 b 247 0 1 0 4 5 11 12 16 17 18 19 22 25 26 28 29 31 33 36 37 40 41 43 45 48 49 50 53 54 55 56 57 60 67 69 72 74 75 79 83 85 87 88 89 93 94 101 102 103 105 106 108 113 114 115 116 118 122 124 125 126 128 130 138 143 146 147 148 152 154 155 157 158 161 165 166 168 169 170 175 176 178 179 180 182 184 185 187 191 192 193 198 202 203 204 208 214 216 226 227 228 231 232 234 235 236 242 243 244 245 # 13384 is_subset c a 247 0 1 0 4 5 11 12 16 17 18 19 22 25 26 28 29 31 33 36 37 40 41 43 45 48 49 50 53 54 55 56 57 60 67 69 72 74 75 79 83 85 87 88 89 93 94 101 102 103 105 106 108 113 114 115 116 118 122 124 125 126 128 130 138 143 146 147 148 152 154 155 157 158 161 165 166 168 169 170 175 176 178 179 180 182 184 185 187 191 192 193 198 202 203 204 208 214 216 226 227 228 231 232 234 235 236 242 243 244 245 b 247 0 0 0 4 5 9 10 11 12 15 21 23 25 26 28 29 32 33 34 35 36 38 41 43 46 47 48 52 53 54 56 57 61 62 64 65 67 68 75 76 77 78 79 81 84 88 89 90 92 93 94 95 96 98 99 102 103 104 107 110 113 114 115 122 125 128 130 133 137 138 140 141 142 144 145 147 148 149 153 155 156 157 158 159 160 161 164 166 169 170 173 177 182 183 188 190 191 196 198 199 200 205 206 207 209 211 213 214 215 220 225 226 228 231 232 238 239 242 243 246 # 13385 is_subset c a 247 0 1 e b 247 0 1 e # 13386 is_subset c a 247 0 1 e b 247 0 1 e # 13387 is_subset c a 247 0 1 e b 247 0 1 e # 13388 is_subset c a 247 0 1 e b 247 0 1 f # 13389 is_subset c a 247 0 1 e b 247 0 1 e # 13390 is_subset c a 247 0 1 e b 247 0 1 1 2 3 6 7 8 9 11 12 13 15 16 17 20 23 24 28 29 32 34 37 38 40 50 52 53 54 55 64 72 73 74 77 78 81 82 84 85 91 92 93 94 95 98 99 100 103 105 108 110 113 114 115 119 120 121 123 124 128 131 132 134 138 140 141 142 145 147 150 151 154 155 156 159 160 162 163 164 165 166 169 170 173 175 176 177 178 181 184 185 187 189 191 194 196 197 198 201 203 204 205 206 207 208 209 210 211 212 215 217 220 221 223 228 229 232 233 236 239 242 246 # 13391 is_subset c a 247 0 1 f b 247 0 1 f # 13392 is_subset c a 247 0 1 f b 247 0 1 e # 13393 is_subset c a 247 0 1 f b 247 0 1 f # 13394 is_subset c a 247 0 1 f b 247 0 1 f # 13395 is_subset c a 247 0 1 f b 247 0 1 f # 13396 is_subset c a 247 0 1 f b 247 0 1 0 4 6 7 8 9 11 12 16 18 22 24 25 26 33 39 41 42 44 46 47 48 49 54 57 59 60 61 62 66 67 68 70 71 73 77 80 81 82 83 84 89 90 93 94 95 97 98 106 109 110 112 115 116 118 121 123 124 126 128 130 132 133 134 138 139 144 146 147 148 149 152 153 154 155 156 157 159 165 167 170 171 172 173 175 178 181 182 184 185 187 189 190 191 192 193 194 196 198 200 201 204 205 208 209 210 212 215 217 219 226 228 229 230 231 236 239 244 245 # 13397 is_subset c a 247 0 1 0 2 3 4 5 9 12 13 18 19 24 26 32 34 35 40 41 42 43 44 48 49 50 54 55 56 59 60 61 63 64 66 70 73 75 76 79 82 83 85 86 89 92 95 96 98 100 101 102 103 105 106 111 114 115 116 124 125 126 127 128 129 130 131 132 133 134 136 137 138 140 141 145 149 151 153 156 158 159 161 163 164 168 169 170 171 172 173 176 177 180 181 183 184 185 187 188 193 195 205 206 208 210 216 217 218 219 220 227 228 229 230 232 234 236 237 239 240 245 b 247 0 1 0 2 3 4 5 9 12 13 18 19 24 26 32 34 35 40 41 42 43 44 48 49 50 54 55 56 59 60 61 63 64 66 70 73 75 76 79 82 83 85 86 89 92 95 96 98 100 101 102 103 105 106 111 114 115 116 124 125 126 127 128 129 130 131 132 133 134 136 137 138 140 141 145 149 151 153 156 158 159 161 163 164 168 169 170 171 172 173 176 177 180 181 183 184 185 187 188 193 195 205 206 208 210 216 217 218 219 220 227 228 229 230 232 234 236 237 239 240 245 # 13398 is_subset c a 247 0 1 0 2 3 4 5 9 12 13 18 19 24 26 32 34 35 40 41 42 43 44 48 49 50 54 55 56 59 60 61 63 64 66 70 73 75 76 79 82 83 85 86 89 92 95 96 98 100 101 102 103 105 106 111 114 115 116 124 125 126 127 128 129 130 131 132 133 134 136 137 138 140 141 145 149 151 153 156 158 159 161 163 164 168 169 170 171 172 173 176 177 180 181 183 184 185 187 188 193 195 205 206 208 210 216 217 218 219 220 227 228 229 230 232 234 236 237 239 240 245 b 247 0 1 e # 13399 is_subset c a 247 0 1 5 6 7 10 13 15 16 18 19 25 27 31 32 33 36 37 38 41 44 45 49 51 53 54 55 56 58 59 60 61 62 64 65 66 68 69 70 72 74 76 77 78 80 82 85 93 94 95 96 99 103 105 108 110 111 112 113 116 117 118 121 124 127 128 129 130 131 134 135 140 141 143 144 145 148 150 151 157 160 166 167 168 170 171 174 175 176 179 182 183 186 187 195 196 198 200 201 203 204 205 206 207 210 211 212 216 219 220 224 225 227 229 231 232 234 235 237 238 239 244 245 b 247 0 1 5 6 7 10 13 15 16 18 19 25 27 31 32 33 36 37 38 41 44 45 49 51 53 54 55 56 58 59 60 61 62 64 65 66 68 69 70 72 74 76 77 78 80 82 85 93 94 95 96 99 103 105 108 110 111 112 113 116 117 118 121 124 127 128 129 130 131 134 135 140 141 143 144 145 148 150 151 157 160 166 167 168 170 171 174 175 176 179 182 183 186 187 195 196 198 200 201 203 204 205 206 207 210 211 212 216 219 220 224 225 227 229 231 232 234 235 237 238 239 244 245 # 13400 is_subset c a 247 0 1 5 6 7 10 13 15 16 18 19 25 27 31 32 33 36 37 38 41 44 45 49 51 53 54 55 56 58 59 60 61 62 64 65 66 68 69 70 72 74 76 77 78 80 82 85 93 94 95 96 99 103 105 108 110 111 112 113 116 117 118 121 124 127 128 129 130 131 134 135 140 141 143 144 145 148 150 151 157 160 166 167 168 170 171 174 175 176 179 182 183 186 187 195 196 198 200 201 203 204 205 206 207 210 211 212 216 219 220 224 225 227 229 231 232 234 235 237 238 239 244 245 b 247 0 1 f # 13401 is_subset c a 247 0 1 0 2 3 6 9 10 11 12 13 15 17 18 21 22 23 27 32 33 34 37 38 40 43 45 46 47 49 50 51 52 53 54 58 59 60 63 66 69 70 71 74 79 83 87 90 93 94 95 97 100 103 104 107 108 109 110 111 112 114 118 119 121 123 124 126 127 129 131 133 134 135 138 139 141 142 144 145 151 153 154 155 156 158 163 166 167 168 169 170 171 173 176 177 178 179 182 188 192 193 196 197 199 200 201 202 204 205 206 208 209 211 216 217 218 219 224 226 227 230 235 240 241 245 246 b 247 0 1 0 2 3 6 9 10 11 12 13 15 17 18 21 22 23 27 32 33 34 37 38 40 43 45 46 47 49 50 51 52 53 54 58 59 60 63 66 69 70 71 74 79 83 87 90 93 94 95 97 100 103 104 107 108 109 110 111 112 114 118 119 121 123 124 126 127 129 131 133 134 135 138 139 141 142 144 145 151 153 154 155 156 158 163 166 167 168 169 170 171 173 176 177 178 179 182 188 192 193 196 197 199 200 201 202 204 205 206 208 209 211 216 217 218 219 224 226 227 230 235 240 241 245 246 # 13402 is_subset c a 247 0 1 0 2 3 6 9 10 11 12 13 15 17 18 21 22 23 27 32 33 34 37 38 40 43 45 46 47 49 50 51 52 53 54 58 59 60 63 66 69 70 71 74 79 83 87 90 93 94 95 97 100 103 104 107 108 109 110 111 112 114 118 119 121 123 124 126 127 129 131 133 134 135 138 139 141 142 144 145 151 153 154 155 156 158 163 166 167 168 169 170 171 173 176 177 178 179 182 188 192 193 196 197 199 200 201 202 204 205 206 208 209 211 216 217 218 219 224 226 227 230 235 240 241 245 246 b 247 0 1 0 1 3 5 6 7 8 10 11 12 13 17 18 21 22 23 24 25 26 28 29 30 31 34 35 37 39 42 50 51 63 64 65 68 69 71 73 77 78 80 81 85 89 90 93 96 97 98 99 100 101 102 103 104 105 108 110 111 113 114 116 118 119 121 123 124 125 127 137 139 142 145 146 147 149 150 151 152 154 159 161 162 163 164 166 168 172 173 174 175 176 177 178 179 180 181 182 186 187 188 192 194 195 196 197 199 202 205 213 214 215 217 220 221 223 226 230 231 232 233 236 240 241 243 244 246 # 13403 is_subset c a 247 0 1 e b 247 0 1 e # 13404 is_subset c a 247 0 1 e b 247 1 0 e # 13405 is_subset c a 247 0 1 e b 247 0 1 e # 13406 is_subset c a 247 0 1 e b 247 1 0 f # 13407 is_subset c a 247 0 1 e b 247 0 1 e # 13408 is_subset c a 247 0 1 e b 247 1 0 1 4 6 7 8 10 11 12 14 15 16 17 20 21 22 23 29 32 34 35 36 37 38 41 44 47 49 53 55 57 59 61 66 67 69 71 73 77 79 81 83 84 86 90 91 94 97 99 100 101 104 105 106 111 112 113 114 115 117 118 121 123 127 129 131 132 133 135 136 137 141 146 147 149 151 152 156 157 158 159 162 166 172 173 174 176 177 180 182 183 184 186 187 189 190 191 193 194 195 196 197 201 202 206 209 210 211 213 214 217 220 221 224 227 230 233 234 235 241 243 244 # 13409 is_subset c a 247 0 1 f b 247 0 1 f # 13410 is_subset c a 247 0 1 f b 247 1 0 e # 13411 is_subset c a 247 0 1 f b 247 0 1 f # 13412 is_subset c a 247 0 1 f b 247 1 0 f # 13413 is_subset c a 247 0 1 f b 247 0 1 f # 13414 is_subset c a 247 0 1 f b 247 1 0 0 1 2 4 5 6 7 9 13 15 16 17 19 21 22 23 25 28 30 31 33 37 39 40 46 50 51 53 55 56 57 59 63 65 66 67 68 70 71 72 73 74 75 77 79 82 83 86 88 90 92 94 97 98 99 101 102 103 104 105 106 108 113 115 118 120 121 123 126 127 129 130 131 132 134 137 138 139 140 141 144 148 153 155 159 162 163 164 167 170 174 176 177 181 182 184 189 191 192 194 195 196 198 199 201 203 204 205 206 207 208 214 217 218 219 220 222 223 224 228 232 233 234 235 236 237 238 239 241 242 243 245 # 13415 is_subset c a 247 0 1 0 1 3 5 8 9 10 12 13 14 15 16 18 19 21 22 23 25 26 28 29 30 31 35 37 40 41 43 44 46 47 48 49 50 51 52 53 54 57 58 60 61 65 67 68 70 71 76 80 83 86 87 89 95 97 99 102 103 104 107 109 113 119 120 122 124 129 133 138 139 144 146 148 150 151 152 153 155 158 159 166 168 169 172 174 175 176 177 179 180 183 185 187 192 193 194 195 197 201 208 209 210 211 212 214 218 220 222 225 228 229 230 232 234 235 240 243 244 b 247 0 1 0 1 3 5 8 9 10 12 13 14 15 16 18 19 21 22 23 25 26 28 29 30 31 35 37 40 41 43 44 46 47 48 49 50 51 52 53 54 57 58 60 61 65 67 68 70 71 76 80 83 86 87 89 95 97 99 102 103 104 107 109 113 119 120 122 124 129 133 138 139 144 146 148 150 151 152 153 155 158 159 166 168 169 172 174 175 176 177 179 180 183 185 187 192 193 194 195 197 201 208 209 210 211 212 214 218 220 222 225 228 229 230 232 234 235 240 243 244 # 13416 is_subset c a 247 0 1 0 1 3 5 8 9 10 12 13 14 15 16 18 19 21 22 23 25 26 28 29 30 31 35 37 40 41 43 44 46 47 48 49 50 51 52 53 54 57 58 60 61 65 67 68 70 71 76 80 83 86 87 89 95 97 99 102 103 104 107 109 113 119 120 122 124 129 133 138 139 144 146 148 150 151 152 153 155 158 159 166 168 169 172 174 175 176 177 179 180 183 185 187 192 193 194 195 197 201 208 209 210 211 212 214 218 220 222 225 228 229 230 232 234 235 240 243 244 b 247 1 0 e # 13417 is_subset c a 247 0 1 0 5 7 8 16 19 20 26 30 32 33 34 35 36 38 39 40 41 43 48 49 51 55 56 60 61 64 67 73 77 78 81 83 85 89 90 91 92 95 97 99 101 104 106 107 109 111 112 117 118 120 124 125 128 129 132 134 136 137 141 142 150 152 154 157 158 160 161 162 166 170 171 173 174 178 179 180 181 182 185 186 187 188 189 192 194 196 197 198 199 202 203 205 211 215 216 218 219 223 229 231 233 235 236 237 239 240 242 244 246 b 247 0 1 0 5 7 8 16 19 20 26 30 32 33 34 35 36 38 39 40 41 43 48 49 51 55 56 60 61 64 67 73 77 78 81 83 85 89 90 91 92 95 97 99 101 104 106 107 109 111 112 117 118 120 124 125 128 129 132 134 136 137 141 142 150 152 154 157 158 160 161 162 166 170 171 173 174 178 179 180 181 182 185 186 187 188 189 192 194 196 197 198 199 202 203 205 211 215 216 218 219 223 229 231 233 235 236 237 239 240 242 244 246 # 13418 is_subset c a 247 0 1 0 5 7 8 16 19 20 26 30 32 33 34 35 36 38 39 40 41 43 48 49 51 55 56 60 61 64 67 73 77 78 81 83 85 89 90 91 92 95 97 99 101 104 106 107 109 111 112 117 118 120 124 125 128 129 132 134 136 137 141 142 150 152 154 157 158 160 161 162 166 170 171 173 174 178 179 180 181 182 185 186 187 188 189 192 194 196 197 198 199 202 203 205 211 215 216 218 219 223 229 231 233 235 236 237 239 240 242 244 246 b 247 1 0 f # 13419 is_subset c a 247 0 1 0 1 2 5 6 9 11 14 15 16 17 19 20 22 23 26 31 38 39 44 47 49 54 56 57 58 60 64 65 66 67 68 70 72 74 76 81 86 89 93 100 101 102 106 107 108 111 112 113 121 122 123 124 130 134 135 136 137 138 139 140 141 142 143 144 147 148 149 152 158 159 160 164 165 167 168 169 170 171 172 174 175 176 177 178 180 182 185 186 187 189 190 194 199 201 202 206 209 210 212 214 217 219 223 224 226 227 228 230 231 233 235 238 239 240 241 242 243 245 b 247 0 1 0 1 2 5 6 9 11 14 15 16 17 19 20 22 23 26 31 38 39 44 47 49 54 56 57 58 60 64 65 66 67 68 70 72 74 76 81 86 89 93 100 101 102 106 107 108 111 112 113 121 122 123 124 130 134 135 136 137 138 139 140 141 142 143 144 147 148 149 152 158 159 160 164 165 167 168 169 170 171 172 174 175 176 177 178 180 182 185 186 187 189 190 194 199 201 202 206 209 210 212 214 217 219 223 224 226 227 228 230 231 233 235 238 239 240 241 242 243 245 # 13420 is_subset c a 247 0 1 0 1 2 5 6 9 11 14 15 16 17 19 20 22 23 26 31 38 39 44 47 49 54 56 57 58 60 64 65 66 67 68 70 72 74 76 81 86 89 93 100 101 102 106 107 108 111 112 113 121 122 123 124 130 134 135 136 137 138 139 140 141 142 143 144 147 148 149 152 158 159 160 164 165 167 168 169 170 171 172 174 175 176 177 178 180 182 185 186 187 189 190 194 199 201 202 206 209 210 212 214 217 219 223 224 226 227 228 230 231 233 235 238 239 240 241 242 243 245 b 247 1 0 0 2 3 4 7 9 10 13 17 18 19 21 22 23 24 25 26 27 28 29 31 36 37 38 41 43 44 45 47 48 50 51 53 54 56 57 59 60 61 63 65 68 72 73 75 76 77 78 80 81 84 89 93 95 96 98 100 102 103 105 108 110 111 112 114 115 116 123 125 127 131 132 134 138 139 142 144 145 150 152 156 157 161 164 165 166 171 172 173 175 176 179 180 181 183 185 191 193 194 196 197 199 201 202 204 205 206 213 216 217 218 222 224 225 226 227 228 230 231 232 235 239 241 243 244 245 # 13421 is_subset c a 247 0 1 e b 247 0 1 e # 13422 is_subset c a 247 0 1 e b 247 1 1 e # 13423 is_subset c a 247 0 1 e b 247 0 1 e # 13424 is_subset c a 247 0 1 e b 247 1 1 f # 13425 is_subset c a 247 0 1 e b 247 0 1 e # 13426 is_subset c a 247 0 1 e b 247 1 1 1 2 3 4 6 9 11 14 18 20 21 23 28 32 35 36 37 39 40 41 42 45 46 47 48 50 51 55 56 57 59 60 61 63 66 67 70 73 76 79 80 84 85 88 91 94 96 97 102 106 110 117 118 121 122 125 126 130 131 132 133 136 138 141 142 143 147 148 149 150 152 153 154 156 157 158 161 162 164 166 167 171 173 174 186 187 188 189 192 199 200 202 203 205 207 209 210 212 214 216 219 222 223 224 228 229 235 237 240 242 243 244 245 246 # 13427 is_subset c a 247 0 1 f b 247 0 1 f # 13428 is_subset c a 247 0 1 f b 247 1 1 e # 13429 is_subset c a 247 0 1 f b 247 0 1 f # 13430 is_subset c a 247 0 1 f b 247 1 1 f # 13431 is_subset c a 247 0 1 f b 247 0 1 f # 13432 is_subset c a 247 0 1 f b 247 1 1 0 5 9 10 11 12 13 14 16 18 19 21 23 25 26 28 29 32 34 38 39 41 44 47 48 52 53 58 60 61 62 63 65 67 71 73 74 78 80 83 85 87 88 89 90 91 92 93 94 99 100 101 104 106 108 109 111 113 116 117 119 120 122 123 124 125 133 134 135 141 142 144 146 151 153 154 156 157 158 159 163 164 165 166 169 171 172 176 178 183 185 187 188 190 192 195 197 198 199 200 203 204 205 207 208 215 217 218 221 222 224 226 229 230 234 241 242 243 246 # 13433 is_subset c a 247 0 1 0 4 7 10 12 13 15 17 18 19 24 27 32 33 37 42 43 46 47 49 50 51 55 56 58 60 63 65 68 69 70 71 73 74 75 77 78 79 80 81 82 85 87 89 93 96 98 101 104 109 112 114 115 117 118 119 120 124 126 127 128 129 132 133 134 135 137 139 140 141 143 144 145 146 148 149 150 151 152 155 156 157 158 159 160 161 162 164 165 167 168 170 171 173 176 179 180 182 183 184 186 189 191 192 196 197 199 205 206 212 218 219 220 222 223 228 229 232 233 234 236 239 240 241 244 246 b 247 0 1 0 4 7 10 12 13 15 17 18 19 24 27 32 33 37 42 43 46 47 49 50 51 55 56 58 60 63 65 68 69 70 71 73 74 75 77 78 79 80 81 82 85 87 89 93 96 98 101 104 109 112 114 115 117 118 119 120 124 126 127 128 129 132 133 134 135 137 139 140 141 143 144 145 146 148 149 150 151 152 155 156 157 158 159 160 161 162 164 165 167 168 170 171 173 176 179 180 182 183 184 186 189 191 192 196 197 199 205 206 212 218 219 220 222 223 228 229 232 233 234 236 239 240 241 244 246 # 13434 is_subset c a 247 0 1 0 4 7 10 12 13 15 17 18 19 24 27 32 33 37 42 43 46 47 49 50 51 55 56 58 60 63 65 68 69 70 71 73 74 75 77 78 79 80 81 82 85 87 89 93 96 98 101 104 109 112 114 115 117 118 119 120 124 126 127 128 129 132 133 134 135 137 139 140 141 143 144 145 146 148 149 150 151 152 155 156 157 158 159 160 161 162 164 165 167 168 170 171 173 176 179 180 182 183 184 186 189 191 192 196 197 199 205 206 212 218 219 220 222 223 228 229 232 233 234 236 239 240 241 244 246 b 247 1 1 e # 13435 is_subset c a 247 0 1 1 2 4 6 8 10 19 20 21 23 25 27 28 29 30 33 34 37 38 39 40 44 45 46 48 49 51 52 54 60 62 65 66 72 73 74 75 81 87 88 89 91 92 96 97 98 102 104 105 109 110 111 112 114 115 116 118 119 121 125 128 130 133 134 138 139 141 143 146 148 149 152 153 155 157 161 163 164 170 171 174 175 176 177 179 185 187 188 190 191 194 196 197 202 204 205 207 210 211 212 216 218 219 220 221 222 226 231 232 235 238 239 240 241 242 243 244 245 b 247 0 1 1 2 4 6 8 10 19 20 21 23 25 27 28 29 30 33 34 37 38 39 40 44 45 46 48 49 51 52 54 60 62 65 66 72 73 74 75 81 87 88 89 91 92 96 97 98 102 104 105 109 110 111 112 114 115 116 118 119 121 125 128 130 133 134 138 139 141 143 146 148 149 152 153 155 157 161 163 164 170 171 174 175 176 177 179 185 187 188 190 191 194 196 197 202 204 205 207 210 211 212 216 218 219 220 221 222 226 231 232 235 238 239 240 241 242 243 244 245 # 13436 is_subset c a 247 0 1 1 2 4 6 8 10 19 20 21 23 25 27 28 29 30 33 34 37 38 39 40 44 45 46 48 49 51 52 54 60 62 65 66 72 73 74 75 81 87 88 89 91 92 96 97 98 102 104 105 109 110 111 112 114 115 116 118 119 121 125 128 130 133 134 138 139 141 143 146 148 149 152 153 155 157 161 163 164 170 171 174 175 176 177 179 185 187 188 190 191 194 196 197 202 204 205 207 210 211 212 216 218 219 220 221 222 226 231 232 235 238 239 240 241 242 243 244 245 b 247 1 1 f # 13437 is_subset c a 247 0 1 0 3 7 8 9 10 11 13 16 17 21 23 24 25 26 27 28 29 31 34 35 36 38 43 45 46 48 50 53 56 57 59 60 61 62 63 65 66 67 68 72 73 74 76 77 78 79 83 89 92 95 97 98 106 109 111 113 114 115 119 121 122 130 131 132 136 138 140 144 146 148 150 152 153 157 158 160 163 164 166 168 169 170 171 172 173 174 175 177 179 185 190 192 196 198 200 201 203 204 206 207 210 214 215 216 222 226 229 230 233 240 242 245 246 b 247 0 1 0 3 7 8 9 10 11 13 16 17 21 23 24 25 26 27 28 29 31 34 35 36 38 43 45 46 48 50 53 56 57 59 60 61 62 63 65 66 67 68 72 73 74 76 77 78 79 83 89 92 95 97 98 106 109 111 113 114 115 119 121 122 130 131 132 136 138 140 144 146 148 150 152 153 157 158 160 163 164 166 168 169 170 171 172 173 174 175 177 179 185 190 192 196 198 200 201 203 204 206 207 210 214 215 216 222 226 229 230 233 240 242 245 246 # 13438 is_subset c a 247 0 1 0 3 7 8 9 10 11 13 16 17 21 23 24 25 26 27 28 29 31 34 35 36 38 43 45 46 48 50 53 56 57 59 60 61 62 63 65 66 67 68 72 73 74 76 77 78 79 83 89 92 95 97 98 106 109 111 113 114 115 119 121 122 130 131 132 136 138 140 144 146 148 150 152 153 157 158 160 163 164 166 168 169 170 171 172 173 174 175 177 179 185 190 192 196 198 200 201 203 204 206 207 210 214 215 216 222 226 229 230 233 240 242 245 246 b 247 1 1 1 3 6 7 8 12 14 16 17 18 19 23 24 26 28 35 36 38 39 40 46 52 55 56 57 58 59 63 64 65 66 67 69 70 72 73 74 78 80 81 82 83 91 92 93 94 96 97 101 102 104 106 108 109 110 111 112 113 114 116 118 120 122 125 126 130 131 136 139 142 143 144 145 147 148 149 151 156 158 163 164 165 166 167 170 171 172 173 174 175 176 177 178 179 180 181 185 186 188 190 192 195 198 199 200 201 204 207 209 212 213 216 219 220 223 226 227 228 229 232 233 234 235 241 242 244 # 13439 is_subset c a 247 1 0 e b 247 1 0 e # 13440 is_subset c a 247 1 0 e b 247 0 0 e # 13441 is_subset c a 247 1 0 e b 247 1 0 e # 13442 is_subset c a 247 1 0 e b 247 0 0 f # 13443 is_subset c a 247 1 0 e b 247 1 0 e # 13444 is_subset c a 247 1 0 e b 247 0 0 0 2 6 7 8 10 12 14 17 19 21 23 24 29 30 33 34 36 39 40 43 44 47 49 50 56 57 58 62 63 68 69 70 71 72 75 77 78 79 81 83 90 91 92 95 96 97 99 102 107 108 109 110 112 113 115 117 119 121 123 125 126 128 134 135 137 138 140 141 142 143 144 146 149 150 151 152 154 157 158 160 164 170 173 174 175 177 179 180 183 184 188 191 192 193 197 198 202 203 205 206 209 213 214 215 216 219 221 222 224 226 227 231 232 234 236 238 241 242 243 244 245 246 # 13445 is_subset c a 247 1 0 f b 247 1 0 f # 13446 is_subset c a 247 1 0 f b 247 0 0 e # 13447 is_subset c a 247 1 0 f b 247 1 0 f # 13448 is_subset c a 247 1 0 f b 247 0 0 f # 13449 is_subset c a 247 1 0 f b 247 1 0 f # 13450 is_subset c a 247 1 0 f b 247 0 0 0 1 2 3 5 6 7 12 13 14 15 16 21 22 23 25 28 30 33 35 36 37 41 42 43 44 45 46 47 48 54 55 58 59 60 61 63 64 65 66 67 68 70 71 73 74 77 80 82 84 85 86 87 89 90 91 92 94 95 97 98 99 100 101 102 105 107 108 109 111 114 115 116 117 118 120 121 123 126 127 128 129 130 131 133 135 136 137 138 143 144 146 147 149 150 152 158 160 161 165 170 171 172 173 174 175 182 183 184 185 190 192 194 196 198 200 203 207 208 209 211 213 214 216 226 229 230 234 235 236 241 243 244 # 13451 is_subset c a 247 1 0 0 1 2 3 5 7 9 10 11 14 16 21 22 23 25 29 30 35 37 39 42 43 44 45 49 50 51 52 53 56 57 58 63 64 65 66 71 74 77 78 79 80 81 82 84 86 88 90 92 95 96 101 103 107 109 110 111 112 113 116 118 119 120 121 123 124 125 126 127 131 133 134 135 137 138 140 141 143 145 151 152 153 154 155 156 158 160 162 163 165 166 167 168 171 173 175 176 177 179 180 181 182 183 184 185 186 187 189 190 191 193 194 195 196 197 198 201 204 205 215 218 221 223 224 226 229 230 232 234 236 238 240 242 243 244 246 b 247 1 0 0 1 2 3 5 7 9 10 11 14 16 21 22 23 25 29 30 35 37 39 42 43 44 45 49 50 51 52 53 56 57 58 63 64 65 66 71 74 77 78 79 80 81 82 84 86 88 90 92 95 96 101 103 107 109 110 111 112 113 116 118 119 120 121 123 124 125 126 127 131 133 134 135 137 138 140 141 143 145 151 152 153 154 155 156 158 160 162 163 165 166 167 168 171 173 175 176 177 179 180 181 182 183 184 185 186 187 189 190 191 193 194 195 196 197 198 201 204 205 215 218 221 223 224 226 229 230 232 234 236 238 240 242 243 244 246 # 13452 is_subset c a 247 1 0 0 1 2 3 5 7 9 10 11 14 16 21 22 23 25 29 30 35 37 39 42 43 44 45 49 50 51 52 53 56 57 58 63 64 65 66 71 74 77 78 79 80 81 82 84 86 88 90 92 95 96 101 103 107 109 110 111 112 113 116 118 119 120 121 123 124 125 126 127 131 133 134 135 137 138 140 141 143 145 151 152 153 154 155 156 158 160 162 163 165 166 167 168 171 173 175 176 177 179 180 181 182 183 184 185 186 187 189 190 191 193 194 195 196 197 198 201 204 205 215 218 221 223 224 226 229 230 232 234 236 238 240 242 243 244 246 b 247 0 0 e # 13453 is_subset c a 247 1 0 1 2 3 9 11 12 14 16 17 20 21 25 28 29 32 34 36 38 39 40 42 43 44 47 49 52 53 54 56 58 59 62 65 66 69 73 77 78 79 80 84 86 87 88 92 94 97 99 100 101 102 104 106 108 109 111 112 113 115 117 118 122 124 125 128 129 130 131 132 133 137 138 140 141 142 143 144 146 147 151 152 153 154 156 158 161 164 166 167 174 177 179 183 188 190 192 193 194 195 198 199 200 201 206 207 208 209 213 215 217 220 221 222 223 224 225 226 233 234 235 236 239 241 243 244 246 b 247 1 0 1 2 3 9 11 12 14 16 17 20 21 25 28 29 32 34 36 38 39 40 42 43 44 47 49 52 53 54 56 58 59 62 65 66 69 73 77 78 79 80 84 86 87 88 92 94 97 99 100 101 102 104 106 108 109 111 112 113 115 117 118 122 124 125 128 129 130 131 132 133 137 138 140 141 142 143 144 146 147 151 152 153 154 156 158 161 164 166 167 174 177 179 183 188 190 192 193 194 195 198 199 200 201 206 207 208 209 213 215 217 220 221 222 223 224 225 226 233 234 235 236 239 241 243 244 246 # 13454 is_subset c a 247 1 0 1 2 3 9 11 12 14 16 17 20 21 25 28 29 32 34 36 38 39 40 42 43 44 47 49 52 53 54 56 58 59 62 65 66 69 73 77 78 79 80 84 86 87 88 92 94 97 99 100 101 102 104 106 108 109 111 112 113 115 117 118 122 124 125 128 129 130 131 132 133 137 138 140 141 142 143 144 146 147 151 152 153 154 156 158 161 164 166 167 174 177 179 183 188 190 192 193 194 195 198 199 200 201 206 207 208 209 213 215 217 220 221 222 223 224 225 226 233 234 235 236 239 241 243 244 246 b 247 0 0 f # 13455 is_subset c a 247 1 0 3 6 9 10 11 12 16 17 18 19 20 23 24 27 29 30 31 32 34 37 39 44 45 46 47 48 49 50 51 53 54 57 60 63 65 66 67 68 70 72 74 75 76 78 79 81 84 86 87 89 91 93 94 95 96 97 98 102 104 107 108 112 113 114 115 118 123 124 127 128 132 133 137 140 141 142 143 144 146 147 148 152 153 155 157 160 161 163 164 165 168 170 171 174 175 176 178 179 180 183 185 187 189 190 192 198 200 202 204 205 207 210 212 214 218 219 221 226 227 228 231 232 235 236 238 240 241 246 b 247 1 0 3 6 9 10 11 12 16 17 18 19 20 23 24 27 29 30 31 32 34 37 39 44 45 46 47 48 49 50 51 53 54 57 60 63 65 66 67 68 70 72 74 75 76 78 79 81 84 86 87 89 91 93 94 95 96 97 98 102 104 107 108 112 113 114 115 118 123 124 127 128 132 133 137 140 141 142 143 144 146 147 148 152 153 155 157 160 161 163 164 165 168 170 171 174 175 176 178 179 180 183 185 187 189 190 192 198 200 202 204 205 207 210 212 214 218 219 221 226 227 228 231 232 235 236 238 240 241 246 # 13456 is_subset c a 247 1 0 3 6 9 10 11 12 16 17 18 19 20 23 24 27 29 30 31 32 34 37 39 44 45 46 47 48 49 50 51 53 54 57 60 63 65 66 67 68 70 72 74 75 76 78 79 81 84 86 87 89 91 93 94 95 96 97 98 102 104 107 108 112 113 114 115 118 123 124 127 128 132 133 137 140 141 142 143 144 146 147 148 152 153 155 157 160 161 163 164 165 168 170 171 174 175 176 178 179 180 183 185 187 189 190 192 198 200 202 204 205 207 210 212 214 218 219 221 226 227 228 231 232 235 236 238 240 241 246 b 247 0 0 0 1 2 5 6 7 13 16 17 19 20 21 22 23 24 25 29 30 32 33 34 39 40 41 42 43 44 47 49 50 51 52 53 54 56 58 61 66 67 68 70 72 73 75 77 84 86 87 88 90 94 95 96 97 98 102 106 110 111 112 114 115 116 117 119 124 127 129 131 134 135 136 137 139 142 144 145 146 147 150 151 152 155 156 158 161 162 163 165 166 167 168 169 170 173 174 175 177 178 179 182 184 185 189 190 191 192 193 194 196 197 199 200 203 204 205 206 208 209 211 215 219 222 224 225 226 227 229 233 236 238 240 245 # 13457 is_subset c a 247 1 0 e b 247 1 0 e # 13458 is_subset c a 247 1 0 e b 247 0 1 e # 13459 is_subset c a 247 1 0 e b 247 1 0 e # 13460 is_subset c a 247 1 0 e b 247 0 1 f # 13461 is_subset c a 247 1 0 e b 247 1 0 e # 13462 is_subset c a 247 1 0 e b 247 0 1 0 2 4 5 8 9 10 11 13 15 17 18 20 26 28 30 31 32 38 41 43 44 46 47 49 52 53 58 60 62 64 66 68 69 70 76 77 80 81 83 85 86 87 89 90 91 93 98 99 101 103 104 106 107 110 112 114 117 119 120 122 123 128 129 131 132 133 134 135 137 139 140 142 143 144 145 148 149 151 152 153 154 157 158 159 160 162 163 164 165 169 170 173 176 177 178 179 180 182 183 186 189 192 195 197 199 200 205 206 208 209 212 213 218 219 220 223 224 225 226 227 230 233 235 236 238 240 242 243 # 13463 is_subset c a 247 1 0 f b 247 1 0 f # 13464 is_subset c a 247 1 0 f b 247 0 1 e # 13465 is_subset c a 247 1 0 f b 247 1 0 f # 13466 is_subset c a 247 1 0 f b 247 0 1 f # 13467 is_subset c a 247 1 0 f b 247 1 0 f # 13468 is_subset c a 247 1 0 f b 247 0 1 0 2 3 8 9 11 13 14 15 17 19 22 23 26 30 32 33 34 36 38 39 42 43 44 45 49 51 54 55 57 59 61 63 64 67 69 70 71 73 77 79 80 81 82 83 84 85 86 88 89 92 93 95 96 103 104 105 106 108 118 122 124 125 126 127 131 132 133 134 135 137 141 142 146 147 151 152 153 154 155 156 157 158 164 166 168 170 172 174 176 178 180 182 183 185 188 190 194 197 198 200 201 202 203 207 208 211 214 215 218 221 222 223 224 230 233 240 241 244 245 246 # 13469 is_subset c a 247 1 0 2 4 5 7 8 9 12 13 16 17 21 22 24 25 26 27 28 29 30 31 32 33 35 36 37 41 42 45 46 48 50 53 54 55 56 58 61 64 65 66 67 68 73 74 75 76 79 80 83 85 86 87 89 91 92 93 94 95 96 97 98 99 101 102 103 104 105 107 109 110 111 112 114 117 119 120 121 123 124 126 127 129 131 132 134 135 138 140 141 143 144 150 155 156 158 163 164 166 167 173 177 179 184 185 187 191 193 194 199 200 201 204 205 209 211 213 216 217 220 221 222 224 225 226 229 230 232 236 237 238 240 241 244 246 b 247 1 0 2 4 5 7 8 9 12 13 16 17 21 22 24 25 26 27 28 29 30 31 32 33 35 36 37 41 42 45 46 48 50 53 54 55 56 58 61 64 65 66 67 68 73 74 75 76 79 80 83 85 86 87 89 91 92 93 94 95 96 97 98 99 101 102 103 104 105 107 109 110 111 112 114 117 119 120 121 123 124 126 127 129 131 132 134 135 138 140 141 143 144 150 155 156 158 163 164 166 167 173 177 179 184 185 187 191 193 194 199 200 201 204 205 209 211 213 216 217 220 221 222 224 225 226 229 230 232 236 237 238 240 241 244 246 # 13470 is_subset c a 247 1 0 2 4 5 7 8 9 12 13 16 17 21 22 24 25 26 27 28 29 30 31 32 33 35 36 37 41 42 45 46 48 50 53 54 55 56 58 61 64 65 66 67 68 73 74 75 76 79 80 83 85 86 87 89 91 92 93 94 95 96 97 98 99 101 102 103 104 105 107 109 110 111 112 114 117 119 120 121 123 124 126 127 129 131 132 134 135 138 140 141 143 144 150 155 156 158 163 164 166 167 173 177 179 184 185 187 191 193 194 199 200 201 204 205 209 211 213 216 217 220 221 222 224 225 226 229 230 232 236 237 238 240 241 244 246 b 247 0 1 e # 13471 is_subset c a 247 1 0 3 6 7 11 12 14 15 17 19 20 26 27 30 31 35 36 40 41 45 47 48 49 51 53 55 58 59 61 63 65 66 70 71 75 77 80 81 84 85 88 93 95 96 99 102 103 104 107 109 112 114 115 120 121 122 129 131 134 136 142 144 145 149 154 155 159 162 163 164 165 166 168 170 172 175 177 178 182 183 184 186 188 191 192 194 196 197 198 199 200 201 203 205 210 211 212 213 214 215 217 218 219 222 223 225 233 237 238 239 241 242 244 245 246 b 247 1 0 3 6 7 11 12 14 15 17 19 20 26 27 30 31 35 36 40 41 45 47 48 49 51 53 55 58 59 61 63 65 66 70 71 75 77 80 81 84 85 88 93 95 96 99 102 103 104 107 109 112 114 115 120 121 122 129 131 134 136 142 144 145 149 154 155 159 162 163 164 165 166 168 170 172 175 177 178 182 183 184 186 188 191 192 194 196 197 198 199 200 201 203 205 210 211 212 213 214 215 217 218 219 222 223 225 233 237 238 239 241 242 244 245 246 # 13472 is_subset c a 247 1 0 3 6 7 11 12 14 15 17 19 20 26 27 30 31 35 36 40 41 45 47 48 49 51 53 55 58 59 61 63 65 66 70 71 75 77 80 81 84 85 88 93 95 96 99 102 103 104 107 109 112 114 115 120 121 122 129 131 134 136 142 144 145 149 154 155 159 162 163 164 165 166 168 170 172 175 177 178 182 183 184 186 188 191 192 194 196 197 198 199 200 201 203 205 210 211 212 213 214 215 217 218 219 222 223 225 233 237 238 239 241 242 244 245 246 b 247 0 1 f # 13473 is_subset c a 247 1 0 0 1 2 3 6 8 9 10 14 15 18 19 20 21 22 23 24 25 26 28 29 31 32 34 37 43 47 48 50 51 53 54 56 57 59 60 61 63 64 66 68 70 72 77 82 85 86 90 92 94 95 96 97 99 107 109 112 114 116 117 120 122 123 124 125 126 127 128 132 133 137 140 142 143 144 145 146 147 148 151 152 153 154 155 156 157 158 162 163 164 170 171 172 173 174 175 176 177 181 184 185 188 189 190 191 193 194 196 200 203 204 205 207 208 209 211 212 218 221 223 224 226 227 230 232 234 235 239 241 242 246 b 247 1 0 0 1 2 3 6 8 9 10 14 15 18 19 20 21 22 23 24 25 26 28 29 31 32 34 37 43 47 48 50 51 53 54 56 57 59 60 61 63 64 66 68 70 72 77 82 85 86 90 92 94 95 96 97 99 107 109 112 114 116 117 120 122 123 124 125 126 127 128 132 133 137 140 142 143 144 145 146 147 148 151 152 153 154 155 156 157 158 162 163 164 170 171 172 173 174 175 176 177 181 184 185 188 189 190 191 193 194 196 200 203 204 205 207 208 209 211 212 218 221 223 224 226 227 230 232 234 235 239 241 242 246 # 13474 is_subset c a 247 1 0 0 1 2 3 6 8 9 10 14 15 18 19 20 21 22 23 24 25 26 28 29 31 32 34 37 43 47 48 50 51 53 54 56 57 59 60 61 63 64 66 68 70 72 77 82 85 86 90 92 94 95 96 97 99 107 109 112 114 116 117 120 122 123 124 125 126 127 128 132 133 137 140 142 143 144 145 146 147 148 151 152 153 154 155 156 157 158 162 163 164 170 171 172 173 174 175 176 177 181 184 185 188 189 190 191 193 194 196 200 203 204 205 207 208 209 211 212 218 221 223 224 226 227 230 232 234 235 239 241 242 246 b 247 0 1 0 1 2 3 5 7 10 12 19 20 21 23 26 29 32 33 35 36 38 40 41 43 45 47 50 51 54 58 59 67 68 71 73 74 75 79 80 82 83 87 88 90 92 94 95 96 97 98 99 102 104 105 108 109 111 112 113 114 120 122 124 125 128 131 132 133 135 136 137 139 146 147 152 154 155 159 160 162 170 171 172 176 180 181 183 187 189 190 193 194 195 197 198 201 206 208 213 215 217 218 219 222 223 225 228 230 234 235 236 237 241 242 243 244 246 # 13475 is_subset c a 247 1 0 e b 247 1 0 e # 13476 is_subset c a 247 1 0 e b 247 1 0 e # 13477 is_subset c a 247 1 0 e b 247 1 0 e # 13478 is_subset c a 247 1 0 e b 247 1 0 f # 13479 is_subset c a 247 1 0 e b 247 1 0 e # 13480 is_subset c a 247 1 0 e b 247 1 0 0 1 3 5 6 10 11 14 16 17 19 20 21 22 25 27 30 35 37 41 43 45 47 48 50 51 53 54 55 58 59 60 64 65 67 68 73 74 75 76 78 79 80 86 87 88 89 90 94 95 96 97 98 99 102 103 105 106 107 110 111 112 116 118 120 121 122 124 125 127 128 130 132 133 135 136 137 138 139 141 142 144 146 147 149 154 156 157 159 162 163 164 166 167 169 170 171 172 173 175 176 177 180 181 182 184 185 186 187 188 190 191 193 194 196 197 200 201 202 203 204 207 209 211 212 215 216 217 218 219 222 223 225 228 231 236 237 238 239 240 242 243 # 13481 is_subset c a 247 1 0 f b 247 1 0 f # 13482 is_subset c a 247 1 0 f b 247 1 0 e # 13483 is_subset c a 247 1 0 f b 247 1 0 f # 13484 is_subset c a 247 1 0 f b 247 1 0 f # 13485 is_subset c a 247 1 0 f b 247 1 0 f # 13486 is_subset c a 247 1 0 f b 247 1 0 5 6 8 9 13 14 18 19 20 21 22 23 24 25 26 30 31 35 36 39 40 41 44 45 46 50 53 55 56 63 64 66 67 68 70 71 72 73 75 76 77 78 81 83 84 85 86 88 90 92 93 100 101 102 103 104 107 111 113 118 122 126 127 128 129 131 132 135 137 138 139 143 144 145 149 150 151 153 154 155 157 158 160 163 165 166 167 168 169 170 172 175 183 186 187 188 189 191 193 195 198 200 203 204 205 206 207 211 212 213 214 216 217 219 220 221 222 223 224 226 232 233 235 236 238 239 240 242 243 244 # 13487 is_subset c a 247 1 0 0 2 3 4 5 6 7 8 9 10 11 15 19 21 22 24 25 26 27 28 31 32 34 35 37 38 40 44 45 47 49 50 52 53 54 55 56 57 58 59 62 63 64 65 66 72 73 75 77 78 79 81 85 86 88 89 90 91 92 93 94 95 97 98 99 105 106 107 109 111 113 115 116 120 123 124 126 129 133 134 137 139 141 142 143 146 150 156 158 159 160 166 167 168 169 170 172 173 176 180 182 186 188 189 191 193 194 196 197 199 200 201 204 205 206 207 215 216 220 226 228 229 231 232 233 235 236 237 241 243 244 245 246 b 247 1 0 0 2 3 4 5 6 7 8 9 10 11 15 19 21 22 24 25 26 27 28 31 32 34 35 37 38 40 44 45 47 49 50 52 53 54 55 56 57 58 59 62 63 64 65 66 72 73 75 77 78 79 81 85 86 88 89 90 91 92 93 94 95 97 98 99 105 106 107 109 111 113 115 116 120 123 124 126 129 133 134 137 139 141 142 143 146 150 156 158 159 160 166 167 168 169 170 172 173 176 180 182 186 188 189 191 193 194 196 197 199 200 201 204 205 206 207 215 216 220 226 228 229 231 232 233 235 236 237 241 243 244 245 246 # 13488 is_subset c a 247 1 0 0 2 3 4 5 6 7 8 9 10 11 15 19 21 22 24 25 26 27 28 31 32 34 35 37 38 40 44 45 47 49 50 52 53 54 55 56 57 58 59 62 63 64 65 66 72 73 75 77 78 79 81 85 86 88 89 90 91 92 93 94 95 97 98 99 105 106 107 109 111 113 115 116 120 123 124 126 129 133 134 137 139 141 142 143 146 150 156 158 159 160 166 167 168 169 170 172 173 176 180 182 186 188 189 191 193 194 196 197 199 200 201 204 205 206 207 215 216 220 226 228 229 231 232 233 235 236 237 241 243 244 245 246 b 247 1 0 e # 13489 is_subset c a 247 1 0 0 2 8 9 11 12 17 18 19 20 21 23 24 27 31 32 35 36 37 39 41 42 44 45 46 48 51 53 54 56 58 60 64 67 69 70 71 72 74 75 77 78 84 85 86 87 89 91 96 97 100 101 102 103 105 107 108 111 112 113 115 116 118 119 120 121 122 129 130 132 133 136 137 141 143 145 146 155 156 157 160 162 164 165 166 167 168 169 171 172 173 174 176 177 179 181 183 184 185 186 187 188 190 193 194 196 197 200 206 207 210 212 215 216 217 218 219 221 223 228 230 231 232 236 237 239 245 b 247 1 0 0 2 8 9 11 12 17 18 19 20 21 23 24 27 31 32 35 36 37 39 41 42 44 45 46 48 51 53 54 56 58 60 64 67 69 70 71 72 74 75 77 78 84 85 86 87 89 91 96 97 100 101 102 103 105 107 108 111 112 113 115 116 118 119 120 121 122 129 130 132 133 136 137 141 143 145 146 155 156 157 160 162 164 165 166 167 168 169 171 172 173 174 176 177 179 181 183 184 185 186 187 188 190 193 194 196 197 200 206 207 210 212 215 216 217 218 219 221 223 228 230 231 232 236 237 239 245 # 13490 is_subset c a 247 1 0 0 2 8 9 11 12 17 18 19 20 21 23 24 27 31 32 35 36 37 39 41 42 44 45 46 48 51 53 54 56 58 60 64 67 69 70 71 72 74 75 77 78 84 85 86 87 89 91 96 97 100 101 102 103 105 107 108 111 112 113 115 116 118 119 120 121 122 129 130 132 133 136 137 141 143 145 146 155 156 157 160 162 164 165 166 167 168 169 171 172 173 174 176 177 179 181 183 184 185 186 187 188 190 193 194 196 197 200 206 207 210 212 215 216 217 218 219 221 223 228 230 231 232 236 237 239 245 b 247 1 0 f # 13491 is_subset c a 247 1 0 1 2 4 5 7 9 10 12 18 19 21 22 24 26 28 37 38 40 41 42 46 47 48 49 50 51 53 56 57 58 59 62 63 64 66 67 69 72 74 76 77 83 84 85 87 88 90 93 94 97 99 100 101 102 103 105 107 109 111 113 114 116 120 121 122 124 125 127 128 129 130 131 133 134 135 138 139 142 145 146 147 149 152 155 156 157 158 159 160 166 167 169 170 171 172 173 176 177 180 181 183 184 185 186 187 188 190 191 192 194 197 198 199 200 201 202 203 205 206 208 211 212 213 214 215 216 217 218 219 221 222 224 225 228 235 238 b 247 1 0 1 2 4 5 7 9 10 12 18 19 21 22 24 26 28 37 38 40 41 42 46 47 48 49 50 51 53 56 57 58 59 62 63 64 66 67 69 72 74 76 77 83 84 85 87 88 90 93 94 97 99 100 101 102 103 105 107 109 111 113 114 116 120 121 122 124 125 127 128 129 130 131 133 134 135 138 139 142 145 146 147 149 152 155 156 157 158 159 160 166 167 169 170 171 172 173 176 177 180 181 183 184 185 186 187 188 190 191 192 194 197 198 199 200 201 202 203 205 206 208 211 212 213 214 215 216 217 218 219 221 222 224 225 228 235 238 # 13492 is_subset c a 247 1 0 1 2 4 5 7 9 10 12 18 19 21 22 24 26 28 37 38 40 41 42 46 47 48 49 50 51 53 56 57 58 59 62 63 64 66 67 69 72 74 76 77 83 84 85 87 88 90 93 94 97 99 100 101 102 103 105 107 109 111 113 114 116 120 121 122 124 125 127 128 129 130 131 133 134 135 138 139 142 145 146 147 149 152 155 156 157 158 159 160 166 167 169 170 171 172 173 176 177 180 181 183 184 185 186 187 188 190 191 192 194 197 198 199 200 201 202 203 205 206 208 211 212 213 214 215 216 217 218 219 221 222 224 225 228 235 238 b 247 1 0 1 9 10 11 12 16 20 21 23 25 27 31 33 35 36 37 40 42 44 46 48 50 52 57 58 59 62 63 64 67 69 71 72 75 82 84 86 88 89 92 94 95 96 98 99 102 106 107 108 113 114 121 124 127 128 130 133 135 138 139 140 145 149 150 151 152 154 155 156 159 162 163 164 166 168 169 171 174 178 179 181 182 184 185 186 187 188 192 195 196 198 199 202 203 204 205 211 212 213 214 215 216 217 218 219 224 225 226 227 229 230 231 235 237 240 243 246 # 13493 is_subset c a 247 1 0 e b 247 1 0 e # 13494 is_subset c a 247 1 0 e b 247 1 1 e # 13495 is_subset c a 247 1 0 e b 247 1 0 e # 13496 is_subset c a 247 1 0 e b 247 1 1 f # 13497 is_subset c a 247 1 0 e b 247 1 0 e # 13498 is_subset c a 247 1 0 e b 247 1 1 2 3 4 5 7 8 9 10 13 15 17 20 25 26 29 31 33 34 35 36 37 38 39 40 41 44 49 52 53 54 56 61 63 64 65 66 67 68 69 71 72 73 75 78 82 88 89 90 92 97 100 101 107 108 112 113 117 118 120 121 122 123 124 131 133 135 137 140 141 143 144 145 146 148 149 150 151 153 154 156 157 158 163 164 165 169 172 173 176 178 179 180 182 185 186 188 189 192 193 194 195 199 201 204 205 206 207 208 210 211 212 213 221 224 228 233 234 235 238 240 243 245 # 13499 is_subset c a 247 1 0 f b 247 1 0 f # 13500 is_subset c a 247 1 0 f b 247 1 1 e # 13501 is_subset c a 247 1 0 f b 247 1 0 f # 13502 is_subset c a 247 1 0 f b 247 1 1 f # 13503 is_subset c a 247 1 0 f b 247 1 0 f # 13504 is_subset c a 247 1 0 f b 247 1 1 0 2 3 4 5 7 9 11 12 13 14 16 17 19 21 22 23 24 27 30 32 33 37 39 40 41 42 43 45 51 55 57 58 59 60 61 63 67 69 70 71 73 74 75 77 79 81 82 83 86 87 88 90 91 93 94 95 97 98 99 100 101 102 107 109 110 111 112 113 114 115 116 118 119 120 122 125 126 127 128 129 130 134 135 136 137 138 140 141 144 147 148 150 151 152 153 154 157 160 161 162 170 174 175 176 178 187 189 190 191 192 193 198 199 200 201 202 203 205 206 207 208 209 213 214 216 220 223 224 226 228 229 230 231 233 234 235 236 237 238 239 243 244 245 # 13505 is_subset c a 247 1 0 0 5 7 8 9 10 11 12 13 14 15 17 19 20 22 24 25 26 28 29 30 31 32 36 37 39 40 42 43 44 45 48 49 53 54 55 56 57 59 62 66 68 69 71 73 76 77 80 81 82 84 85 87 88 89 90 92 93 94 96 98 99 102 103 106 107 115 117 118 126 128 129 133 134 137 141 142 143 146 147 148 152 153 154 156 157 159 160 161 162 164 165 166 167 168 175 177 178 181 182 184 185 186 187 188 191 192 195 197 198 202 207 209 211 212 215 217 221 225 226 227 228 229 231 232 236 237 239 240 241 242 243 245 b 247 1 0 0 5 7 8 9 10 11 12 13 14 15 17 19 20 22 24 25 26 28 29 30 31 32 36 37 39 40 42 43 44 45 48 49 53 54 55 56 57 59 62 66 68 69 71 73 76 77 80 81 82 84 85 87 88 89 90 92 93 94 96 98 99 102 103 106 107 115 117 118 126 128 129 133 134 137 141 142 143 146 147 148 152 153 154 156 157 159 160 161 162 164 165 166 167 168 175 177 178 181 182 184 185 186 187 188 191 192 195 197 198 202 207 209 211 212 215 217 221 225 226 227 228 229 231 232 236 237 239 240 241 242 243 245 # 13506 is_subset c a 247 1 0 0 5 7 8 9 10 11 12 13 14 15 17 19 20 22 24 25 26 28 29 30 31 32 36 37 39 40 42 43 44 45 48 49 53 54 55 56 57 59 62 66 68 69 71 73 76 77 80 81 82 84 85 87 88 89 90 92 93 94 96 98 99 102 103 106 107 115 117 118 126 128 129 133 134 137 141 142 143 146 147 148 152 153 154 156 157 159 160 161 162 164 165 166 167 168 175 177 178 181 182 184 185 186 187 188 191 192 195 197 198 202 207 209 211 212 215 217 221 225 226 227 228 229 231 232 236 237 239 240 241 242 243 245 b 247 1 1 e # 13507 is_subset c a 247 1 0 0 1 2 5 6 9 14 18 19 21 26 28 29 30 31 32 33 36 38 40 42 45 46 47 49 52 53 54 56 57 59 60 63 64 65 66 67 68 69 70 71 72 73 79 81 85 88 89 93 98 100 101 103 104 105 109 110 111 115 117 119 120 121 123 125 127 128 131 133 134 135 136 143 145 146 147 150 152 156 159 160 161 162 163 164 165 166 167 171 173 175 176 178 184 185 186 187 190 191 193 194 196 197 201 202 203 204 206 207 208 210 212 214 215 217 223 224 227 229 230 231 232 233 235 240 243 244 b 247 1 0 0 1 2 5 6 9 14 18 19 21 26 28 29 30 31 32 33 36 38 40 42 45 46 47 49 52 53 54 56 57 59 60 63 64 65 66 67 68 69 70 71 72 73 79 81 85 88 89 93 98 100 101 103 104 105 109 110 111 115 117 119 120 121 123 125 127 128 131 133 134 135 136 143 145 146 147 150 152 156 159 160 161 162 163 164 165 166 167 171 173 175 176 178 184 185 186 187 190 191 193 194 196 197 201 202 203 204 206 207 208 210 212 214 215 217 223 224 227 229 230 231 232 233 235 240 243 244 # 13508 is_subset c a 247 1 0 0 1 2 5 6 9 14 18 19 21 26 28 29 30 31 32 33 36 38 40 42 45 46 47 49 52 53 54 56 57 59 60 63 64 65 66 67 68 69 70 71 72 73 79 81 85 88 89 93 98 100 101 103 104 105 109 110 111 115 117 119 120 121 123 125 127 128 131 133 134 135 136 143 145 146 147 150 152 156 159 160 161 162 163 164 165 166 167 171 173 175 176 178 184 185 186 187 190 191 193 194 196 197 201 202 203 204 206 207 208 210 212 214 215 217 223 224 227 229 230 231 232 233 235 240 243 244 b 247 1 1 f # 13509 is_subset c a 247 1 0 1 2 3 7 9 11 13 14 15 16 17 21 22 23 30 31 33 35 36 37 38 41 43 44 46 47 51 52 56 57 58 62 63 71 73 76 78 82 86 89 96 97 98 100 102 104 107 108 112 114 116 117 119 121 123 125 129 130 133 134 139 140 144 145 146 148 153 154 155 156 161 162 164 166 167 168 169 170 174 177 178 179 180 186 187 191 193 195 197 198 200 201 202 205 206 212 213 214 215 216 217 218 220 227 230 233 234 237 238 239 243 246 b 247 1 0 1 2 3 7 9 11 13 14 15 16 17 21 22 23 30 31 33 35 36 37 38 41 43 44 46 47 51 52 56 57 58 62 63 71 73 76 78 82 86 89 96 97 98 100 102 104 107 108 112 114 116 117 119 121 123 125 129 130 133 134 139 140 144 145 146 148 153 154 155 156 161 162 164 166 167 168 169 170 174 177 178 179 180 186 187 191 193 195 197 198 200 201 202 205 206 212 213 214 215 216 217 218 220 227 230 233 234 237 238 239 243 246 # 13510 is_subset c a 247 1 0 1 2 3 7 9 11 13 14 15 16 17 21 22 23 30 31 33 35 36 37 38 41 43 44 46 47 51 52 56 57 58 62 63 71 73 76 78 82 86 89 96 97 98 100 102 104 107 108 112 114 116 117 119 121 123 125 129 130 133 134 139 140 144 145 146 148 153 154 155 156 161 162 164 166 167 168 169 170 174 177 178 179 180 186 187 191 193 195 197 198 200 201 202 205 206 212 213 214 215 216 217 218 220 227 230 233 234 237 238 239 243 246 b 247 1 1 1 2 3 4 6 12 13 16 17 25 26 36 40 41 43 44 45 47 48 49 52 53 54 56 57 58 59 60 64 65 67 68 69 70 71 72 75 77 79 81 85 86 88 89 91 93 94 104 105 107 109 110 111 115 119 122 123 125 127 129 131 132 135 138 139 141 142 143 144 146 148 149 153 155 156 157 159 161 162 165 169 171 172 173 175 178 179 183 187 189 190 191 192 193 195 196 201 202 204 206 207 208 209 210 211 214 216 219 222 223 225 226 227 231 235 236 238 241 246 # 13511 is_subset c a 247 1 1 e b 247 1 1 e # 13512 is_subset c a 247 1 1 e b 247 0 0 e # 13513 is_subset c a 247 1 1 e b 247 1 1 e # 13514 is_subset c a 247 1 1 e b 247 0 0 f # 13515 is_subset c a 247 1 1 e b 247 1 1 e # 13516 is_subset c a 247 1 1 e b 247 0 0 0 3 4 5 6 7 9 10 17 21 23 24 28 29 31 33 34 35 36 38 44 45 46 48 50 52 55 56 57 61 63 64 65 66 67 71 72 73 75 76 77 78 81 82 84 85 87 88 89 92 94 95 97 98 99 101 102 104 105 106 108 109 110 112 113 115 116 117 121 122 125 126 127 129 130 131 132 134 137 138 140 141 142 143 144 148 149 150 152 153 154 155 157 158 159 162 164 165 166 168 169 170 171 172 173 176 177 178 179 180 181 183 184 186 188 192 193 194 195 196 203 205 208 211 213 216 219 220 221 223 224 226 228 230 231 232 234 235 236 239 240 245 246 # 13517 is_subset c a 247 1 1 f b 247 1 1 f # 13518 is_subset c a 247 1 1 f b 247 0 0 e # 13519 is_subset c a 247 1 1 f b 247 1 1 f # 13520 is_subset c a 247 1 1 f b 247 0 0 f # 13521 is_subset c a 247 1 1 f b 247 1 1 f # 13522 is_subset c a 247 1 1 f b 247 0 0 4 5 6 7 8 9 12 13 15 18 22 26 27 29 31 32 33 34 35 36 37 38 40 42 44 45 49 50 51 53 56 57 60 61 63 66 68 70 71 72 75 79 82 83 84 87 91 93 94 95 96 98 99 100 101 102 103 105 107 109 110 111 112 113 114 115 116 117 118 123 125 133 136 137 141 144 147 150 151 152 157 159 161 163 164 167 171 173 176 177 178 181 182 189 191 192 194 196 197 202 203 208 216 217 218 220 223 224 227 230 231 232 233 234 237 241 245 246 # 13523 is_subset c a 247 1 1 1 2 3 4 7 8 9 10 11 12 14 15 17 19 20 24 26 28 29 32 35 37 44 45 48 49 51 54 55 56 57 62 64 65 66 68 70 72 73 74 75 76 77 79 80 81 83 86 87 91 92 94 97 98 99 105 108 109 111 112 113 114 115 117 118 120 123 124 127 129 130 131 135 137 140 141 142 145 147 152 155 156 158 159 161 162 163 164 165 166 168 174 175 179 180 181 183 186 187 188 190 193 196 200 201 202 205 206 207 213 220 222 223 227 228 229 231 232 234 237 238 239 243 245 b 247 1 1 1 2 3 4 7 8 9 10 11 12 14 15 17 19 20 24 26 28 29 32 35 37 44 45 48 49 51 54 55 56 57 62 64 65 66 68 70 72 73 74 75 76 77 79 80 81 83 86 87 91 92 94 97 98 99 105 108 109 111 112 113 114 115 117 118 120 123 124 127 129 130 131 135 137 140 141 142 145 147 152 155 156 158 159 161 162 163 164 165 166 168 174 175 179 180 181 183 186 187 188 190 193 196 200 201 202 205 206 207 213 220 222 223 227 228 229 231 232 234 237 238 239 243 245 # 13524 is_subset c a 247 1 1 1 2 3 4 7 8 9 10 11 12 14 15 17 19 20 24 26 28 29 32 35 37 44 45 48 49 51 54 55 56 57 62 64 65 66 68 70 72 73 74 75 76 77 79 80 81 83 86 87 91 92 94 97 98 99 105 108 109 111 112 113 114 115 117 118 120 123 124 127 129 130 131 135 137 140 141 142 145 147 152 155 156 158 159 161 162 163 164 165 166 168 174 175 179 180 181 183 186 187 188 190 193 196 200 201 202 205 206 207 213 220 222 223 227 228 229 231 232 234 237 238 239 243 245 b 247 0 0 e # 13525 is_subset c a 247 1 1 2 3 4 7 9 13 14 16 19 20 22 23 24 28 30 32 34 35 36 38 41 42 43 44 45 46 47 50 53 57 58 59 63 64 66 67 68 70 71 73 74 77 79 80 81 82 84 86 87 88 90 92 95 97 98 101 103 105 107 108 109 110 111 112 113 116 117 119 124 131 132 133 134 136 143 144 147 149 150 151 156 157 161 164 166 168 170 171 174 176 183 184 185 188 189 190 191 192 193 197 198 199 201 202 203 205 207 209 211 214 215 219 220 222 223 239 241 242 245 b 247 1 1 2 3 4 7 9 13 14 16 19 20 22 23 24 28 30 32 34 35 36 38 41 42 43 44 45 46 47 50 53 57 58 59 63 64 66 67 68 70 71 73 74 77 79 80 81 82 84 86 87 88 90 92 95 97 98 101 103 105 107 108 109 110 111 112 113 116 117 119 124 131 132 133 134 136 143 144 147 149 150 151 156 157 161 164 166 168 170 171 174 176 183 184 185 188 189 190 191 192 193 197 198 199 201 202 203 205 207 209 211 214 215 219 220 222 223 239 241 242 245 # 13526 is_subset c a 247 1 1 2 3 4 7 9 13 14 16 19 20 22 23 24 28 30 32 34 35 36 38 41 42 43 44 45 46 47 50 53 57 58 59 63 64 66 67 68 70 71 73 74 77 79 80 81 82 84 86 87 88 90 92 95 97 98 101 103 105 107 108 109 110 111 112 113 116 117 119 124 131 132 133 134 136 143 144 147 149 150 151 156 157 161 164 166 168 170 171 174 176 183 184 185 188 189 190 191 192 193 197 198 199 201 202 203 205 207 209 211 214 215 219 220 222 223 239 241 242 245 b 247 0 0 f # 13527 is_subset c a 247 1 1 2 7 9 11 12 16 17 18 22 27 28 32 34 35 36 38 40 43 44 45 48 50 54 55 56 58 59 60 62 64 65 67 68 70 71 72 74 76 78 79 80 81 82 85 88 90 91 92 93 95 96 97 99 102 103 104 105 107 111 118 120 121 122 124 128 129 133 135 136 137 138 139 142 144 146 147 148 149 154 158 160 161 162 164 165 167 168 169 170 171 173 175 176 178 179 183 186 187 189 192 194 195 197 199 200 202 204 207 208 210 213 214 215 217 218 219 220 224 225 227 228 229 230 231 232 233 235 238 240 241 242 244 245 b 247 1 1 2 7 9 11 12 16 17 18 22 27 28 32 34 35 36 38 40 43 44 45 48 50 54 55 56 58 59 60 62 64 65 67 68 70 71 72 74 76 78 79 80 81 82 85 88 90 91 92 93 95 96 97 99 102 103 104 105 107 111 118 120 121 122 124 128 129 133 135 136 137 138 139 142 144 146 147 148 149 154 158 160 161 162 164 165 167 168 169 170 171 173 175 176 178 179 183 186 187 189 192 194 195 197 199 200 202 204 207 208 210 213 214 215 217 218 219 220 224 225 227 228 229 230 231 232 233 235 238 240 241 242 244 245 # 13528 is_subset c a 247 1 1 2 7 9 11 12 16 17 18 22 27 28 32 34 35 36 38 40 43 44 45 48 50 54 55 56 58 59 60 62 64 65 67 68 70 71 72 74 76 78 79 80 81 82 85 88 90 91 92 93 95 96 97 99 102 103 104 105 107 111 118 120 121 122 124 128 129 133 135 136 137 138 139 142 144 146 147 148 149 154 158 160 161 162 164 165 167 168 169 170 171 173 175 176 178 179 183 186 187 189 192 194 195 197 199 200 202 204 207 208 210 213 214 215 217 218 219 220 224 225 227 228 229 230 231 232 233 235 238 240 241 242 244 245 b 247 0 0 0 1 3 5 6 7 9 12 13 15 16 19 20 21 22 25 27 29 30 32 36 42 48 51 55 57 59 60 64 66 67 68 69 71 75 76 79 80 81 82 86 87 88 91 92 93 95 97 99 100 101 102 104 107 108 109 111 112 114 117 121 127 129 130 133 134 136 139 141 144 146 150 151 152 156 157 161 162 163 164 165 167 169 171 173 178 179 181 182 186 187 191 193 194 195 196 198 199 200 202 205 206 207 209 210 211 212 213 223 225 226 232 233 234 235 236 237 238 240 242 243 246 # 13529 is_subset c a 247 1 1 e b 247 1 1 e # 13530 is_subset c a 247 1 1 e b 247 0 1 e # 13531 is_subset c a 247 1 1 e b 247 1 1 e # 13532 is_subset c a 247 1 1 e b 247 0 1 f # 13533 is_subset c a 247 1 1 e b 247 1 1 e # 13534 is_subset c a 247 1 1 e b 247 0 1 3 4 5 7 13 14 15 16 17 19 20 23 24 25 26 27 30 31 32 33 34 35 36 37 39 41 43 44 47 48 49 51 53 54 56 57 58 60 61 62 63 64 65 68 69 71 72 73 74 75 78 82 85 86 89 97 98 99 100 102 103 105 106 108 110 112 113 114 115 119 121 123 125 126 129 132 134 137 138 143 146 147 148 150 151 152 154 156 157 158 162 164 165 166 167 171 172 173 174 176 177 178 179 180 181 182 183 184 187 189 191 195 196 197 198 204 205 206 207 208 209 210 211 214 216 217 220 221 222 230 231 233 236 237 239 240 244 246 # 13535 is_subset c a 247 1 1 f b 247 1 1 f # 13536 is_subset c a 247 1 1 f b 247 0 1 e # 13537 is_subset c a 247 1 1 f b 247 1 1 f # 13538 is_subset c a 247 1 1 f b 247 0 1 f # 13539 is_subset c a 247 1 1 f b 247 1 1 f # 13540 is_subset c a 247 1 1 f b 247 0 1 0 3 6 10 11 13 19 25 26 29 36 38 41 42 43 44 48 49 53 54 58 59 63 64 68 70 72 73 75 78 82 84 86 88 89 93 95 99 100 103 104 108 112 114 115 116 117 119 120 121 123 126 127 128 130 131 132 133 135 137 138 142 144 146 151 152 154 156 157 159 161 162 164 166 169 170 171 173 174 177 178 181 186 189 191 192 195 199 203 206 209 210 211 212 214 216 217 218 220 223 225 226 227 228 230 232 234 235 236 237 240 242 244 245 246 # 13541 is_subset c a 247 1 1 0 1 5 6 9 10 12 14 15 16 18 19 20 21 24 25 28 30 31 32 38 41 42 43 44 45 46 47 48 49 50 51 52 55 58 60 61 63 65 67 69 71 72 73 74 75 76 77 78 79 80 81 82 83 85 87 93 94 95 96 98 101 102 103 104 105 106 107 114 119 120 122 125 127 136 138 140 142 143 144 145 147 149 150 153 154 156 159 161 163 164 165 166 167 169 171 174 176 181 184 186 191 193 194 196 197 200 201 204 207 208 209 211 212 213 216 218 220 228 229 230 231 233 234 239 241 242 243 b 247 1 1 0 1 5 6 9 10 12 14 15 16 18 19 20 21 24 25 28 30 31 32 38 41 42 43 44 45 46 47 48 49 50 51 52 55 58 60 61 63 65 67 69 71 72 73 74 75 76 77 78 79 80 81 82 83 85 87 93 94 95 96 98 101 102 103 104 105 106 107 114 119 120 122 125 127 136 138 140 142 143 144 145 147 149 150 153 154 156 159 161 163 164 165 166 167 169 171 174 176 181 184 186 191 193 194 196 197 200 201 204 207 208 209 211 212 213 216 218 220 228 229 230 231 233 234 239 241 242 243 # 13542 is_subset c a 247 1 1 0 1 5 6 9 10 12 14 15 16 18 19 20 21 24 25 28 30 31 32 38 41 42 43 44 45 46 47 48 49 50 51 52 55 58 60 61 63 65 67 69 71 72 73 74 75 76 77 78 79 80 81 82 83 85 87 93 94 95 96 98 101 102 103 104 105 106 107 114 119 120 122 125 127 136 138 140 142 143 144 145 147 149 150 153 154 156 159 161 163 164 165 166 167 169 171 174 176 181 184 186 191 193 194 196 197 200 201 204 207 208 209 211 212 213 216 218 220 228 229 230 231 233 234 239 241 242 243 b 247 0 1 e # 13543 is_subset c a 247 1 1 1 3 4 5 9 10 11 12 14 16 17 20 21 22 23 25 26 30 31 34 38 39 40 42 43 44 47 49 52 55 60 61 65 66 72 73 74 75 78 79 80 82 83 84 86 89 90 92 93 96 98 100 101 103 104 106 108 109 111 119 125 128 131 133 138 140 141 142 147 148 149 150 151 153 156 157 158 159 160 165 167 170 173 177 180 181 184 186 187 192 193 195 196 197 198 201 204 205 206 208 211 213 217 218 222 229 230 232 234 237 238 244 246 b 247 1 1 1 3 4 5 9 10 11 12 14 16 17 20 21 22 23 25 26 30 31 34 38 39 40 42 43 44 47 49 52 55 60 61 65 66 72 73 74 75 78 79 80 82 83 84 86 89 90 92 93 96 98 100 101 103 104 106 108 109 111 119 125 128 131 133 138 140 141 142 147 148 149 150 151 153 156 157 158 159 160 165 167 170 173 177 180 181 184 186 187 192 193 195 196 197 198 201 204 205 206 208 211 213 217 218 222 229 230 232 234 237 238 244 246 # 13544 is_subset c a 247 1 1 1 3 4 5 9 10 11 12 14 16 17 20 21 22 23 25 26 30 31 34 38 39 40 42 43 44 47 49 52 55 60 61 65 66 72 73 74 75 78 79 80 82 83 84 86 89 90 92 93 96 98 100 101 103 104 106 108 109 111 119 125 128 131 133 138 140 141 142 147 148 149 150 151 153 156 157 158 159 160 165 167 170 173 177 180 181 184 186 187 192 193 195 196 197 198 201 204 205 206 208 211 213 217 218 222 229 230 232 234 237 238 244 246 b 247 0 1 f # 13545 is_subset c a 247 1 1 2 3 4 8 9 12 14 19 23 24 25 26 28 30 31 32 33 34 35 36 39 40 41 42 43 45 49 51 53 60 63 65 66 70 72 73 76 77 78 80 81 82 84 88 89 91 93 94 95 96 97 98 99 101 104 107 111 115 116 117 119 120 121 122 125 126 128 129 131 132 135 136 137 138 140 150 151 153 155 158 164 167 170 175 176 177 179 182 184 190 191 193 194 198 199 201 202 203 206 207 210 213 214 218 219 221 223 224 228 230 233 239 243 b 247 1 1 2 3 4 8 9 12 14 19 23 24 25 26 28 30 31 32 33 34 35 36 39 40 41 42 43 45 49 51 53 60 63 65 66 70 72 73 76 77 78 80 81 82 84 88 89 91 93 94 95 96 97 98 99 101 104 107 111 115 116 117 119 120 121 122 125 126 128 129 131 132 135 136 137 138 140 150 151 153 155 158 164 167 170 175 176 177 179 182 184 190 191 193 194 198 199 201 202 203 206 207 210 213 214 218 219 221 223 224 228 230 233 239 243 # 13546 is_subset c a 247 1 1 2 3 4 8 9 12 14 19 23 24 25 26 28 30 31 32 33 34 35 36 39 40 41 42 43 45 49 51 53 60 63 65 66 70 72 73 76 77 78 80 81 82 84 88 89 91 93 94 95 96 97 98 99 101 104 107 111 115 116 117 119 120 121 122 125 126 128 129 131 132 135 136 137 138 140 150 151 153 155 158 164 167 170 175 176 177 179 182 184 190 191 193 194 198 199 201 202 203 206 207 210 213 214 218 219 221 223 224 228 230 233 239 243 b 247 0 1 0 4 6 7 8 16 18 20 21 22 26 28 29 30 34 36 37 39 41 42 43 47 49 52 53 54 58 59 61 63 69 70 71 72 73 74 75 77 78 79 80 82 83 85 91 93 94 95 99 102 103 105 106 108 109 111 114 116 118 120 122 125 127 128 130 132 133 135 136 141 144 145 146 147 149 151 155 156 158 159 160 161 163 164 166 167 168 171 172 175 178 179 182 183 185 186 189 192 193 195 197 198 199 201 202 207 208 210 215 219 221 224 225 227 228 230 231 233 235 238 240 242 244 # 13547 is_subset c a 247 1 1 e b 247 1 1 e # 13548 is_subset c a 247 1 1 e b 247 1 0 e # 13549 is_subset c a 247 1 1 e b 247 1 1 e # 13550 is_subset c a 247 1 1 e b 247 1 0 f # 13551 is_subset c a 247 1 1 e b 247 1 1 e # 13552 is_subset c a 247 1 1 e b 247 1 0 1 2 5 6 7 9 13 16 18 19 20 24 25 28 29 32 34 36 37 40 41 42 44 46 47 48 51 52 53 55 56 57 58 59 60 63 64 67 69 72 75 76 79 80 81 82 84 87 90 92 96 97 100 102 103 104 109 112 113 114 115 117 118 121 122 123 125 128 129 130 133 135 136 137 140 141 142 143 144 146 147 149 151 152 154 158 159 160 161 165 169 170 173 174 177 179 181 184 192 193 194 197 198 199 200 201 204 207 208 209 210 214 218 219 221 224 226 229 231 232 235 236 237 238 239 243 244 245 # 13553 is_subset c a 247 1 1 f b 247 1 1 f # 13554 is_subset c a 247 1 1 f b 247 1 0 e # 13555 is_subset c a 247 1 1 f b 247 1 1 f # 13556 is_subset c a 247 1 1 f b 247 1 0 f # 13557 is_subset c a 247 1 1 f b 247 1 1 f # 13558 is_subset c a 247 1 1 f b 247 1 0 4 6 8 9 17 19 20 22 24 26 27 28 29 32 35 36 38 39 42 46 47 50 54 56 58 59 62 64 66 68 69 71 75 76 83 84 88 91 96 98 101 105 107 109 111 112 113 114 115 116 117 119 122 123 124 125 126 129 130 132 134 135 138 139 140 143 144 146 147 149 150 158 159 160 161 163 166 167 169 172 173 175 178 181 182 183 186 187 189 193 195 196 197 200 201 202 203 204 206 208 209 210 211 213 214 215 216 217 221 222 223 224 226 227 231 234 236 243 244 # 13559 is_subset c a 247 1 1 0 1 2 5 8 9 12 14 15 16 17 18 19 20 25 26 28 29 30 31 32 33 36 37 38 42 44 45 48 53 54 55 56 61 64 66 69 70 71 73 75 76 77 80 81 82 84 85 87 89 91 92 96 98 101 102 104 107 108 109 111 112 115 116 117 118 120 121 122 126 129 130 131 132 133 135 136 137 138 139 140 141 142 143 146 154 155 156 157 160 162 163 164 166 167 168 170 171 173 175 178 179 180 184 185 187 188 189 190 192 193 195 197 198 201 202 203 204 206 208 209 213 214 216 217 218 220 221 222 223 224 226 229 231 232 234 235 236 239 241 245 246 b 247 1 1 0 1 2 5 8 9 12 14 15 16 17 18 19 20 25 26 28 29 30 31 32 33 36 37 38 42 44 45 48 53 54 55 56 61 64 66 69 70 71 73 75 76 77 80 81 82 84 85 87 89 91 92 96 98 101 102 104 107 108 109 111 112 115 116 117 118 120 121 122 126 129 130 131 132 133 135 136 137 138 139 140 141 142 143 146 154 155 156 157 160 162 163 164 166 167 168 170 171 173 175 178 179 180 184 185 187 188 189 190 192 193 195 197 198 201 202 203 204 206 208 209 213 214 216 217 218 220 221 222 223 224 226 229 231 232 234 235 236 239 241 245 246 # 13560 is_subset c a 247 1 1 0 1 2 5 8 9 12 14 15 16 17 18 19 20 25 26 28 29 30 31 32 33 36 37 38 42 44 45 48 53 54 55 56 61 64 66 69 70 71 73 75 76 77 80 81 82 84 85 87 89 91 92 96 98 101 102 104 107 108 109 111 112 115 116 117 118 120 121 122 126 129 130 131 132 133 135 136 137 138 139 140 141 142 143 146 154 155 156 157 160 162 163 164 166 167 168 170 171 173 175 178 179 180 184 185 187 188 189 190 192 193 195 197 198 201 202 203 204 206 208 209 213 214 216 217 218 220 221 222 223 224 226 229 231 232 234 235 236 239 241 245 246 b 247 1 0 e # 13561 is_subset c a 247 1 1 1 2 3 4 5 6 8 9 11 13 15 16 17 18 20 22 23 26 27 28 29 30 32 34 35 37 39 40 42 43 46 49 50 52 56 59 64 66 67 68 70 71 72 73 74 77 79 84 85 86 87 88 90 92 93 100 102 105 106 107 110 111 118 120 121 123 124 125 127 129 134 135 136 138 140 141 145 150 155 158 159 162 165 169 170 171 172 175 177 179 185 187 192 194 198 201 203 205 206 207 210 211 212 216 217 218 222 223 224 225 228 229 230 232 235 236 238 240 244 246 b 247 1 1 1 2 3 4 5 6 8 9 11 13 15 16 17 18 20 22 23 26 27 28 29 30 32 34 35 37 39 40 42 43 46 49 50 52 56 59 64 66 67 68 70 71 72 73 74 77 79 84 85 86 87 88 90 92 93 100 102 105 106 107 110 111 118 120 121 123 124 125 127 129 134 135 136 138 140 141 145 150 155 158 159 162 165 169 170 171 172 175 177 179 185 187 192 194 198 201 203 205 206 207 210 211 212 216 217 218 222 223 224 225 228 229 230 232 235 236 238 240 244 246 # 13562 is_subset c a 247 1 1 1 2 3 4 5 6 8 9 11 13 15 16 17 18 20 22 23 26 27 28 29 30 32 34 35 37 39 40 42 43 46 49 50 52 56 59 64 66 67 68 70 71 72 73 74 77 79 84 85 86 87 88 90 92 93 100 102 105 106 107 110 111 118 120 121 123 124 125 127 129 134 135 136 138 140 141 145 150 155 158 159 162 165 169 170 171 172 175 177 179 185 187 192 194 198 201 203 205 206 207 210 211 212 216 217 218 222 223 224 225 228 229 230 232 235 236 238 240 244 246 b 247 1 0 f # 13563 is_subset c a 247 1 1 0 2 3 6 10 13 15 18 23 24 25 29 32 33 37 38 41 42 43 46 47 48 49 52 53 55 59 61 64 66 67 69 71 74 75 76 77 78 82 85 87 89 90 91 92 93 94 97 99 101 102 103 105 106 108 109 110 114 115 119 122 123 125 127 129 130 131 132 133 134 136 137 138 140 142 144 148 149 151 152 154 156 158 161 166 169 170 174 176 178 179 180 182 183 185 190 191 192 196 198 200 202 204 205 207 210 215 220 223 224 227 228 229 231 234 239 240 242 244 b 247 1 1 0 2 3 6 10 13 15 18 23 24 25 29 32 33 37 38 41 42 43 46 47 48 49 52 53 55 59 61 64 66 67 69 71 74 75 76 77 78 82 85 87 89 90 91 92 93 94 97 99 101 102 103 105 106 108 109 110 114 115 119 122 123 125 127 129 130 131 132 133 134 136 137 138 140 142 144 148 149 151 152 154 156 158 161 166 169 170 174 176 178 179 180 182 183 185 190 191 192 196 198 200 202 204 205 207 210 215 220 223 224 227 228 229 231 234 239 240 242 244 # 13564 is_subset c a 247 1 1 0 2 3 6 10 13 15 18 23 24 25 29 32 33 37 38 41 42 43 46 47 48 49 52 53 55 59 61 64 66 67 69 71 74 75 76 77 78 82 85 87 89 90 91 92 93 94 97 99 101 102 103 105 106 108 109 110 114 115 119 122 123 125 127 129 130 131 132 133 134 136 137 138 140 142 144 148 149 151 152 154 156 158 161 166 169 170 174 176 178 179 180 182 183 185 190 191 192 196 198 200 202 204 205 207 210 215 220 223 224 227 228 229 231 234 239 240 242 244 b 247 1 0 0 1 2 6 12 14 15 16 18 20 22 24 28 29 31 35 39 41 42 45 48 49 50 51 53 56 57 59 61 62 63 66 67 68 72 74 77 80 82 84 87 88 89 90 92 93 98 100 103 104 106 112 115 116 117 118 119 120 121 123 124 125 131 132 133 134 135 137 138 142 143 144 146 147 153 155 159 160 161 162 164 167 172 175 179 180 181 182 183 184 186 188 190 192 193 194 195 198 202 206 207 208 210 213 216 219 220 223 230 231 233 235 238 240 241 242 # 13565 is_subset c a 247 1 1 e b 247 1 1 e # 13566 is_subset c a 247 1 1 e b 247 1 1 e # 13567 is_subset c a 247 1 1 e b 247 1 1 e # 13568 is_subset c a 247 1 1 e b 247 1 1 f # 13569 is_subset c a 247 1 1 e b 247 1 1 e # 13570 is_subset c a 247 1 1 e b 247 1 1 1 2 8 9 10 13 20 21 23 26 27 28 29 32 36 37 40 42 43 45 47 49 51 53 54 55 56 57 58 59 60 61 62 66 67 75 81 83 86 91 95 96 98 103 105 106 107 112 113 117 118 123 125 126 131 132 133 134 136 138 139 140 143 144 145 148 150 155 157 161 164 165 172 173 174 175 176 178 181 182 183 184 185 186 188 190 192 193 194 195 196 200 201 202 204 205 208 210 212 213 215 216 219 220 221 223 224 225 227 229 231 236 237 238 239 240 241 243 245 246 # 13571 is_subset c a 247 1 1 f b 247 1 1 f # 13572 is_subset c a 247 1 1 f b 247 1 1 e # 13573 is_subset c a 247 1 1 f b 247 1 1 f # 13574 is_subset c a 247 1 1 f b 247 1 1 f # 13575 is_subset c a 247 1 1 f b 247 1 1 f # 13576 is_subset c a 247 1 1 f b 247 1 1 3 7 14 16 17 18 19 20 21 22 23 24 27 28 30 32 33 40 41 42 44 46 47 49 50 56 57 58 59 61 64 66 67 68 69 71 72 74 75 76 77 82 83 84 87 90 91 92 93 95 97 98 100 103 108 109 115 117 118 119 120 123 125 126 127 128 131 132 133 136 137 139 140 141 145 147 148 149 151 153 154 155 156 158 160 163 165 166 168 171 173 174 175 176 181 183 184 185 186 187 189 198 199 200 201 202 204 205 206 208 210 214 217 219 223 224 228 229 232 233 234 235 236 237 239 242 243 245 # 13577 is_subset c a 247 1 1 0 1 5 6 7 8 12 19 21 23 26 27 28 29 31 32 33 35 36 37 38 39 42 46 47 48 49 50 52 53 63 66 67 69 70 71 73 74 75 77 80 83 85 86 87 88 92 95 96 98 101 107 108 109 110 111 112 118 120 124 125 127 128 134 135 136 137 139 140 143 144 145 146 149 153 154 155 156 158 159 160 161 162 163 165 166 168 170 172 175 178 179 185 190 191 193 194 195 196 197 198 200 201 202 203 207 210 211 212 217 218 220 221 224 226 229 230 232 233 234 239 240 243 244 245 b 247 1 1 0 1 5 6 7 8 12 19 21 23 26 27 28 29 31 32 33 35 36 37 38 39 42 46 47 48 49 50 52 53 63 66 67 69 70 71 73 74 75 77 80 83 85 86 87 88 92 95 96 98 101 107 108 109 110 111 112 118 120 124 125 127 128 134 135 136 137 139 140 143 144 145 146 149 153 154 155 156 158 159 160 161 162 163 165 166 168 170 172 175 178 179 185 190 191 193 194 195 196 197 198 200 201 202 203 207 210 211 212 217 218 220 221 224 226 229 230 232 233 234 239 240 243 244 245 # 13578 is_subset c a 247 1 1 0 1 5 6 7 8 12 19 21 23 26 27 28 29 31 32 33 35 36 37 38 39 42 46 47 48 49 50 52 53 63 66 67 69 70 71 73 74 75 77 80 83 85 86 87 88 92 95 96 98 101 107 108 109 110 111 112 118 120 124 125 127 128 134 135 136 137 139 140 143 144 145 146 149 153 154 155 156 158 159 160 161 162 163 165 166 168 170 172 175 178 179 185 190 191 193 194 195 196 197 198 200 201 202 203 207 210 211 212 217 218 220 221 224 226 229 230 232 233 234 239 240 243 244 245 b 247 1 1 e # 13579 is_subset c a 247 1 1 0 5 6 7 8 10 12 13 15 16 18 22 26 28 30 31 32 39 40 41 43 44 46 48 49 50 55 56 59 60 62 63 67 68 70 71 73 78 80 84 85 86 87 91 94 95 97 98 102 103 107 108 109 111 113 114 116 117 119 121 122 123 124 125 126 128 130 132 133 139 141 142 143 145 148 149 151 154 156 158 159 160 161 162 163 167 168 169 170 172 177 179 181 182 183 184 185 187 190 193 195 196 197 199 200 202 204 206 207 208 210 212 213 215 216 217 218 219 221 223 229 231 235 238 241 242 244 b 247 1 1 0 5 6 7 8 10 12 13 15 16 18 22 26 28 30 31 32 39 40 41 43 44 46 48 49 50 55 56 59 60 62 63 67 68 70 71 73 78 80 84 85 86 87 91 94 95 97 98 102 103 107 108 109 111 113 114 116 117 119 121 122 123 124 125 126 128 130 132 133 139 141 142 143 145 148 149 151 154 156 158 159 160 161 162 163 167 168 169 170 172 177 179 181 182 183 184 185 187 190 193 195 196 197 199 200 202 204 206 207 208 210 212 213 215 216 217 218 219 221 223 229 231 235 238 241 242 244 # 13580 is_subset c a 247 1 1 0 5 6 7 8 10 12 13 15 16 18 22 26 28 30 31 32 39 40 41 43 44 46 48 49 50 55 56 59 60 62 63 67 68 70 71 73 78 80 84 85 86 87 91 94 95 97 98 102 103 107 108 109 111 113 114 116 117 119 121 122 123 124 125 126 128 130 132 133 139 141 142 143 145 148 149 151 154 156 158 159 160 161 162 163 167 168 169 170 172 177 179 181 182 183 184 185 187 190 193 195 196 197 199 200 202 204 206 207 208 210 212 213 215 216 217 218 219 221 223 229 231 235 238 241 242 244 b 247 1 1 f # 13581 is_subset c a 247 1 1 0 3 4 6 7 8 12 15 17 23 24 26 30 32 34 35 36 37 41 42 44 46 48 50 52 54 55 56 57 60 62 63 64 65 68 69 70 72 73 75 76 79 80 84 87 88 91 92 93 94 96 98 101 102 103 104 106 107 108 109 110 113 114 115 118 120 121 124 125 126 127 129 132 133 135 139 148 150 153 154 156 157 158 160 162 163 166 171 173 175 177 180 181 182 184 185 187 188 191 192 193 194 195 199 200 201 204 205 206 210 214 219 220 222 227 228 229 231 232 233 234 235 236 237 242 244 246 b 247 1 1 0 3 4 6 7 8 12 15 17 23 24 26 30 32 34 35 36 37 41 42 44 46 48 50 52 54 55 56 57 60 62 63 64 65 68 69 70 72 73 75 76 79 80 84 87 88 91 92 93 94 96 98 101 102 103 104 106 107 108 109 110 113 114 115 118 120 121 124 125 126 127 129 132 133 135 139 148 150 153 154 156 157 158 160 162 163 166 171 173 175 177 180 181 182 184 185 187 188 191 192 193 194 195 199 200 201 204 205 206 210 214 219 220 222 227 228 229 231 232 233 234 235 236 237 242 244 246 # 13582 is_subset c a 247 1 1 0 3 4 6 7 8 12 15 17 23 24 26 30 32 34 35 36 37 41 42 44 46 48 50 52 54 55 56 57 60 62 63 64 65 68 69 70 72 73 75 76 79 80 84 87 88 91 92 93 94 96 98 101 102 103 104 106 107 108 109 110 113 114 115 118 120 121 124 125 126 127 129 132 133 135 139 148 150 153 154 156 157 158 160 162 163 166 171 173 175 177 180 181 182 184 185 187 188 191 192 193 194 195 199 200 201 204 205 206 210 214 219 220 222 227 228 229 231 232 233 234 235 236 237 242 244 246 b 247 1 1 0 1 2 3 6 7 8 11 15 18 20 21 22 26 27 28 31 34 35 36 37 38 39 40 42 44 45 50 53 56 59 60 61 62 65 66 68 69 71 72 73 74 75 76 78 81 83 85 94 97 98 101 102 104 105 107 111 112 113 116 117 118 122 124 126 129 130 131 132 133 135 136 138 139 140 141 142 143 144 148 150 152 154 155 156 157 161 162 164 166 168 169 172 178 180 181 182 191 194 196 197 198 200 202 206 207 208 209 212 214 215 216 219 220 221 222 225 227 228 234 235 236 237 238 240 242 243 244 245 246 # 13583 is_subset c a 0 0 0 e b 0 0 0 e # 13584 assign c a 0 0 0 e b 0 0 0 e # 13585 assign c a 0 0 0 e b 0 0 0 e # 13586 assign c a 0 0 0 e b 0 0 0 e # 13587 assign c a 0 0 0 e b 0 0 0 e # 13588 assign c a 0 0 0 e b 0 0 0 # 13589 assign c a 0 0 0 e b 0 0 0 e # 13590 assign c a 0 0 0 e b 0 0 0 e # 13591 assign c a 0 0 0 e b 0 0 0 e # 13592 assign c a 0 0 0 e b 0 0 0 e # 13593 assign c a 0 0 0 e b 0 0 0 e # 13594 assign c a 0 0 0 e b 0 0 0 # 13595 assign c a 0 0 0 b 0 0 0 # 13596 assign c a 0 0 0 b 0 0 0 e # 13597 assign c a 0 0 0 b 0 0 0 # 13598 assign c a 0 0 0 b 0 0 0 e # 13599 assign c a 0 0 0 b 0 0 0 # 13600 assign c a 0 0 0 b 0 0 0 # 13601 assign c a 0 0 0 e b 0 0 0 e # 13602 assign c a 0 0 0 e b 0 0 1 e # 13603 assign c a 0 0 0 e b 0 0 0 e # 13604 assign c a 0 0 0 e b 0 0 1 e # 13605 assign c a 0 0 0 e b 0 0 0 e # 13606 assign c a 0 0 0 e b 0 0 1 # 13607 assign c a 0 0 0 e b 0 0 0 e # 13608 assign c a 0 0 0 e b 0 0 1 e # 13609 assign c a 0 0 0 e b 0 0 0 e # 13610 assign c a 0 0 0 e b 0 0 1 e # 13611 assign c a 0 0 0 e b 0 0 0 e # 13612 assign c a 0 0 0 e b 0 0 1 # 13613 assign c a 0 0 0 b 0 0 0 # 13614 assign c a 0 0 0 b 0 0 1 e # 13615 assign c a 0 0 0 b 0 0 0 # 13616 assign c a 0 0 0 b 0 0 1 e # 13617 assign c a 0 0 0 b 0 0 0 # 13618 assign c a 0 0 0 b 0 0 1 # 13619 assign c a 0 0 0 e b 0 0 0 e # 13620 assign c a 0 0 0 e b 0 1 0 e # 13621 assign c a 0 0 0 e b 0 0 0 e # 13622 assign c a 0 0 0 e b 0 1 0 e # 13623 assign c a 0 0 0 e b 0 0 0 e # 13624 assign c a 0 0 0 e b 0 1 0 # 13625 assign c a 0 0 0 e b 0 0 0 e # 13626 assign c a 0 0 0 e b 0 1 0 e # 13627 assign c a 0 0 0 e b 0 0 0 e # 13628 assign c a 0 0 0 e b 0 1 0 e # 13629 assign c a 0 0 0 e b 0 0 0 e # 13630 assign c a 0 0 0 e b 0 1 0 # 13631 assign c a 0 0 0 b 0 0 0 # 13632 assign c a 0 0 0 b 0 1 0 e # 13633 assign c a 0 0 0 b 0 0 0 # 13634 assign c a 0 0 0 b 0 1 0 e # 13635 assign c a 0 0 0 b 0 0 0 # 13636 assign c a 0 0 0 b 0 1 0 # 13637 assign c a 0 0 0 e b 0 0 0 e # 13638 assign c a 0 0 0 e b 0 1 1 e # 13639 assign c a 0 0 0 e b 0 0 0 e # 13640 assign c a 0 0 0 e b 0 1 1 e # 13641 assign c a 0 0 0 e b 0 0 0 e # 13642 assign c a 0 0 0 e b 0 1 1 # 13643 assign c a 0 0 0 e b 0 0 0 e # 13644 assign c a 0 0 0 e b 0 1 1 e # 13645 assign c a 0 0 0 e b 0 0 0 e # 13646 assign c a 0 0 0 e b 0 1 1 e # 13647 assign c a 0 0 0 e b 0 0 0 e # 13648 assign c a 0 0 0 e b 0 1 1 # 13649 assign c a 0 0 0 b 0 0 0 # 13650 assign c a 0 0 0 b 0 1 1 e # 13651 assign c a 0 0 0 b 0 0 0 # 13652 assign c a 0 0 0 b 0 1 1 e # 13653 assign c a 0 0 0 b 0 0 0 # 13654 assign c a 0 0 0 b 0 1 1 # 13655 assign c a 0 0 1 e b 0 0 1 e # 13656 assign c a 0 0 1 e b 0 0 0 e # 13657 assign c a 0 0 1 e b 0 0 1 e # 13658 assign c a 0 0 1 e b 0 0 0 e # 13659 assign c a 0 0 1 e b 0 0 1 e # 13660 assign c a 0 0 1 e b 0 0 0 # 13661 assign c a 0 0 1 e b 0 0 1 e # 13662 assign c a 0 0 1 e b 0 0 0 e # 13663 assign c a 0 0 1 e b 0 0 1 e # 13664 assign c a 0 0 1 e b 0 0 0 e # 13665 assign c a 0 0 1 e b 0 0 1 e # 13666 assign c a 0 0 1 e b 0 0 0 # 13667 assign c a 0 0 1 b 0 0 1 # 13668 assign c a 0 0 1 b 0 0 0 e # 13669 assign c a 0 0 1 b 0 0 1 # 13670 assign c a 0 0 1 b 0 0 0 e # 13671 assign c a 0 0 1 b 0 0 1 # 13672 assign c a 0 0 1 b 0 0 0 # 13673 assign c a 0 0 1 e b 0 0 1 e # 13674 assign c a 0 0 1 e b 0 0 1 e # 13675 assign c a 0 0 1 e b 0 0 1 e # 13676 assign c a 0 0 1 e b 0 0 1 e # 13677 assign c a 0 0 1 e b 0 0 1 e # 13678 assign c a 0 0 1 e b 0 0 1 # 13679 assign c a 0 0 1 e b 0 0 1 e # 13680 assign c a 0 0 1 e b 0 0 1 e # 13681 assign c a 0 0 1 e b 0 0 1 e # 13682 assign c a 0 0 1 e b 0 0 1 e # 13683 assign c a 0 0 1 e b 0 0 1 e # 13684 assign c a 0 0 1 e b 0 0 1 # 13685 assign c a 0 0 1 b 0 0 1 # 13686 assign c a 0 0 1 b 0 0 1 e # 13687 assign c a 0 0 1 b 0 0 1 # 13688 assign c a 0 0 1 b 0 0 1 e # 13689 assign c a 0 0 1 b 0 0 1 # 13690 assign c a 0 0 1 b 0 0 1 # 13691 assign c a 0 0 1 e b 0 0 1 e # 13692 assign c a 0 0 1 e b 0 1 0 e # 13693 assign c a 0 0 1 e b 0 0 1 e # 13694 assign c a 0 0 1 e b 0 1 0 e # 13695 assign c a 0 0 1 e b 0 0 1 e # 13696 assign c a 0 0 1 e b 0 1 0 # 13697 assign c a 0 0 1 e b 0 0 1 e # 13698 assign c a 0 0 1 e b 0 1 0 e # 13699 assign c a 0 0 1 e b 0 0 1 e # 13700 assign c a 0 0 1 e b 0 1 0 e # 13701 assign c a 0 0 1 e b 0 0 1 e # 13702 assign c a 0 0 1 e b 0 1 0 # 13703 assign c a 0 0 1 b 0 0 1 # 13704 assign c a 0 0 1 b 0 1 0 e # 13705 assign c a 0 0 1 b 0 0 1 # 13706 assign c a 0 0 1 b 0 1 0 e # 13707 assign c a 0 0 1 b 0 0 1 # 13708 assign c a 0 0 1 b 0 1 0 # 13709 assign c a 0 0 1 e b 0 0 1 e # 13710 assign c a 0 0 1 e b 0 1 1 e # 13711 assign c a 0 0 1 e b 0 0 1 e # 13712 assign c a 0 0 1 e b 0 1 1 e # 13713 assign c a 0 0 1 e b 0 0 1 e # 13714 assign c a 0 0 1 e b 0 1 1 # 13715 assign c a 0 0 1 e b 0 0 1 e # 13716 assign c a 0 0 1 e b 0 1 1 e # 13717 assign c a 0 0 1 e b 0 0 1 e # 13718 assign c a 0 0 1 e b 0 1 1 e # 13719 assign c a 0 0 1 e b 0 0 1 e # 13720 assign c a 0 0 1 e b 0 1 1 # 13721 assign c a 0 0 1 b 0 0 1 # 13722 assign c a 0 0 1 b 0 1 1 e # 13723 assign c a 0 0 1 b 0 0 1 # 13724 assign c a 0 0 1 b 0 1 1 e # 13725 assign c a 0 0 1 b 0 0 1 # 13726 assign c a 0 0 1 b 0 1 1 # 13727 assign c a 0 1 0 e b 0 1 0 e # 13728 assign c a 0 1 0 e b 0 0 0 e # 13729 assign c a 0 1 0 e b 0 1 0 e # 13730 assign c a 0 1 0 e b 0 0 0 e # 13731 assign c a 0 1 0 e b 0 1 0 e # 13732 assign c a 0 1 0 e b 0 0 0 # 13733 assign c a 0 1 0 e b 0 1 0 e # 13734 assign c a 0 1 0 e b 0 0 0 e # 13735 assign c a 0 1 0 e b 0 1 0 e # 13736 assign c a 0 1 0 e b 0 0 0 e # 13737 assign c a 0 1 0 e b 0 1 0 e # 13738 assign c a 0 1 0 e b 0 0 0 # 13739 assign c a 0 1 0 b 0 1 0 # 13740 assign c a 0 1 0 b 0 0 0 e # 13741 assign c a 0 1 0 b 0 1 0 # 13742 assign c a 0 1 0 b 0 0 0 e # 13743 assign c a 0 1 0 b 0 1 0 # 13744 assign c a 0 1 0 b 0 0 0 # 13745 assign c a 0 1 0 e b 0 1 0 e # 13746 assign c a 0 1 0 e b 0 0 1 e # 13747 assign c a 0 1 0 e b 0 1 0 e # 13748 assign c a 0 1 0 e b 0 0 1 e # 13749 assign c a 0 1 0 e b 0 1 0 e # 13750 assign c a 0 1 0 e b 0 0 1 # 13751 assign c a 0 1 0 e b 0 1 0 e # 13752 assign c a 0 1 0 e b 0 0 1 e # 13753 assign c a 0 1 0 e b 0 1 0 e # 13754 assign c a 0 1 0 e b 0 0 1 e # 13755 assign c a 0 1 0 e b 0 1 0 e # 13756 assign c a 0 1 0 e b 0 0 1 # 13757 assign c a 0 1 0 b 0 1 0 # 13758 assign c a 0 1 0 b 0 0 1 e # 13759 assign c a 0 1 0 b 0 1 0 # 13760 assign c a 0 1 0 b 0 0 1 e # 13761 assign c a 0 1 0 b 0 1 0 # 13762 assign c a 0 1 0 b 0 0 1 # 13763 assign c a 0 1 0 e b 0 1 0 e # 13764 assign c a 0 1 0 e b 0 1 0 e # 13765 assign c a 0 1 0 e b 0 1 0 e # 13766 assign c a 0 1 0 e b 0 1 0 e # 13767 assign c a 0 1 0 e b 0 1 0 e # 13768 assign c a 0 1 0 e b 0 1 0 # 13769 assign c a 0 1 0 e b 0 1 0 e # 13770 assign c a 0 1 0 e b 0 1 0 e # 13771 assign c a 0 1 0 e b 0 1 0 e # 13772 assign c a 0 1 0 e b 0 1 0 e # 13773 assign c a 0 1 0 e b 0 1 0 e # 13774 assign c a 0 1 0 e b 0 1 0 # 13775 assign c a 0 1 0 b 0 1 0 # 13776 assign c a 0 1 0 b 0 1 0 e # 13777 assign c a 0 1 0 b 0 1 0 # 13778 assign c a 0 1 0 b 0 1 0 e # 13779 assign c a 0 1 0 b 0 1 0 # 13780 assign c a 0 1 0 b 0 1 0 # 13781 assign c a 0 1 0 e b 0 1 0 e # 13782 assign c a 0 1 0 e b 0 1 1 e # 13783 assign c a 0 1 0 e b 0 1 0 e # 13784 assign c a 0 1 0 e b 0 1 1 e # 13785 assign c a 0 1 0 e b 0 1 0 e # 13786 assign c a 0 1 0 e b 0 1 1 # 13787 assign c a 0 1 0 e b 0 1 0 e # 13788 assign c a 0 1 0 e b 0 1 1 e # 13789 assign c a 0 1 0 e b 0 1 0 e # 13790 assign c a 0 1 0 e b 0 1 1 e # 13791 assign c a 0 1 0 e b 0 1 0 e # 13792 assign c a 0 1 0 e b 0 1 1 # 13793 assign c a 0 1 0 b 0 1 0 # 13794 assign c a 0 1 0 b 0 1 1 e # 13795 assign c a 0 1 0 b 0 1 0 # 13796 assign c a 0 1 0 b 0 1 1 e # 13797 assign c a 0 1 0 b 0 1 0 # 13798 assign c a 0 1 0 b 0 1 1 # 13799 assign c a 0 1 1 e b 0 1 1 e # 13800 assign c a 0 1 1 e b 0 0 0 e # 13801 assign c a 0 1 1 e b 0 1 1 e # 13802 assign c a 0 1 1 e b 0 0 0 e # 13803 assign c a 0 1 1 e b 0 1 1 e # 13804 assign c a 0 1 1 e b 0 0 0 # 13805 assign c a 0 1 1 e b 0 1 1 e # 13806 assign c a 0 1 1 e b 0 0 0 e # 13807 assign c a 0 1 1 e b 0 1 1 e # 13808 assign c a 0 1 1 e b 0 0 0 e # 13809 assign c a 0 1 1 e b 0 1 1 e # 13810 assign c a 0 1 1 e b 0 0 0 # 13811 assign c a 0 1 1 b 0 1 1 # 13812 assign c a 0 1 1 b 0 0 0 e # 13813 assign c a 0 1 1 b 0 1 1 # 13814 assign c a 0 1 1 b 0 0 0 e # 13815 assign c a 0 1 1 b 0 1 1 # 13816 assign c a 0 1 1 b 0 0 0 # 13817 assign c a 0 1 1 e b 0 1 1 e # 13818 assign c a 0 1 1 e b 0 0 1 e # 13819 assign c a 0 1 1 e b 0 1 1 e # 13820 assign c a 0 1 1 e b 0 0 1 e # 13821 assign c a 0 1 1 e b 0 1 1 e # 13822 assign c a 0 1 1 e b 0 0 1 # 13823 assign c a 0 1 1 e b 0 1 1 e # 13824 assign c a 0 1 1 e b 0 0 1 e # 13825 assign c a 0 1 1 e b 0 1 1 e # 13826 assign c a 0 1 1 e b 0 0 1 e # 13827 assign c a 0 1 1 e b 0 1 1 e # 13828 assign c a 0 1 1 e b 0 0 1 # 13829 assign c a 0 1 1 b 0 1 1 # 13830 assign c a 0 1 1 b 0 0 1 e # 13831 assign c a 0 1 1 b 0 1 1 # 13832 assign c a 0 1 1 b 0 0 1 e # 13833 assign c a 0 1 1 b 0 1 1 # 13834 assign c a 0 1 1 b 0 0 1 # 13835 assign c a 0 1 1 e b 0 1 1 e # 13836 assign c a 0 1 1 e b 0 1 0 e # 13837 assign c a 0 1 1 e b 0 1 1 e # 13838 assign c a 0 1 1 e b 0 1 0 e # 13839 assign c a 0 1 1 e b 0 1 1 e # 13840 assign c a 0 1 1 e b 0 1 0 # 13841 assign c a 0 1 1 e b 0 1 1 e # 13842 assign c a 0 1 1 e b 0 1 0 e # 13843 assign c a 0 1 1 e b 0 1 1 e # 13844 assign c a 0 1 1 e b 0 1 0 e # 13845 assign c a 0 1 1 e b 0 1 1 e # 13846 assign c a 0 1 1 e b 0 1 0 # 13847 assign c a 0 1 1 b 0 1 1 # 13848 assign c a 0 1 1 b 0 1 0 e # 13849 assign c a 0 1 1 b 0 1 1 # 13850 assign c a 0 1 1 b 0 1 0 e # 13851 assign c a 0 1 1 b 0 1 1 # 13852 assign c a 0 1 1 b 0 1 0 # 13853 assign c a 0 1 1 e b 0 1 1 e # 13854 assign c a 0 1 1 e b 0 1 1 e # 13855 assign c a 0 1 1 e b 0 1 1 e # 13856 assign c a 0 1 1 e b 0 1 1 e # 13857 assign c a 0 1 1 e b 0 1 1 e # 13858 assign c a 0 1 1 e b 0 1 1 # 13859 assign c a 0 1 1 e b 0 1 1 e # 13860 assign c a 0 1 1 e b 0 1 1 e # 13861 assign c a 0 1 1 e b 0 1 1 e # 13862 assign c a 0 1 1 e b 0 1 1 e # 13863 assign c a 0 1 1 e b 0 1 1 e # 13864 assign c a 0 1 1 e b 0 1 1 # 13865 assign c a 0 1 1 b 0 1 1 # 13866 assign c a 0 1 1 b 0 1 1 e # 13867 assign c a 0 1 1 b 0 1 1 # 13868 assign c a 0 1 1 b 0 1 1 e # 13869 assign c a 0 1 1 b 0 1 1 # 13870 assign c a 0 1 1 b 0 1 1 # 13871 assign c a 1 0 0 e b 1 0 0 e # 13872 assign c a 1 0 0 e b 1 0 0 e # 13873 assign c a 1 0 0 e b 1 0 0 e # 13874 assign c a 1 0 0 e b 1 0 0 f # 13875 assign c a 1 0 0 e b 1 0 0 e # 13876 assign c a 1 0 0 e b 1 0 0 # 13877 assign c a 1 0 0 f b 1 0 0 f # 13878 assign c a 1 0 0 f b 1 0 0 e # 13879 assign c a 1 0 0 f b 1 0 0 f # 13880 assign c a 1 0 0 f b 1 0 0 f # 13881 assign c a 1 0 0 f b 1 0 0 f # 13882 assign c a 1 0 0 f b 1 0 0 # 13883 assign c a 1 0 0 0 b 1 0 0 0 # 13884 assign c a 1 0 0 0 b 1 0 0 e # 13885 assign c a 1 0 0 b 1 0 0 # 13886 assign c a 1 0 0 b 1 0 0 f # 13887 assign c a 1 0 0 0 b 1 0 0 0 # 13888 assign c a 1 0 0 0 b 1 0 0 0 # 13889 assign c a 1 0 0 e b 1 0 0 e # 13890 assign c a 1 0 0 e b 1 0 1 e # 13891 assign c a 1 0 0 e b 1 0 0 e # 13892 assign c a 1 0 0 e b 1 0 1 f # 13893 assign c a 1 0 0 e b 1 0 0 e # 13894 assign c a 1 0 0 e b 1 0 1 # 13895 assign c a 1 0 0 f b 1 0 0 f # 13896 assign c a 1 0 0 f b 1 0 1 e # 13897 assign c a 1 0 0 f b 1 0 0 f # 13898 assign c a 1 0 0 f b 1 0 1 f # 13899 assign c a 1 0 0 f b 1 0 0 f # 13900 assign c a 1 0 0 f b 1 0 1 # 13901 assign c a 1 0 0 0 b 1 0 0 0 # 13902 assign c a 1 0 0 0 b 1 0 1 e # 13903 assign c a 1 0 0 0 b 1 0 0 0 # 13904 assign c a 1 0 0 0 b 1 0 1 f # 13905 assign c a 1 0 0 0 b 1 0 0 0 # 13906 assign c a 1 0 0 0 b 1 0 1 0 # 13907 assign c a 1 0 0 e b 1 0 0 e # 13908 assign c a 1 0 0 e b 1 1 0 e # 13909 assign c a 1 0 0 e b 1 0 0 e # 13910 assign c a 1 0 0 e b 1 1 0 f # 13911 assign c a 1 0 0 e b 1 0 0 e # 13912 assign c a 1 0 0 e b 1 1 0 0 # 13913 assign c a 1 0 0 f b 1 0 0 f # 13914 assign c a 1 0 0 f b 1 1 0 e # 13915 assign c a 1 0 0 f b 1 0 0 f # 13916 assign c a 1 0 0 f b 1 1 0 f # 13917 assign c a 1 0 0 f b 1 0 0 f # 13918 assign c a 1 0 0 f b 1 1 0 0 # 13919 assign c a 1 0 0 b 1 0 0 # 13920 assign c a 1 0 0 b 1 1 0 e # 13921 assign c a 1 0 0 b 1 0 0 # 13922 assign c a 1 0 0 b 1 1 0 f # 13923 assign c a 1 0 0 b 1 0 0 # 13924 assign c a 1 0 0 b 1 1 0 0 # 13925 assign c a 1 0 0 e b 1 0 0 e # 13926 assign c a 1 0 0 e b 1 1 1 e # 13927 assign c a 1 0 0 e b 1 0 0 e # 13928 assign c a 1 0 0 e b 1 1 1 f # 13929 assign c a 1 0 0 e b 1 0 0 e # 13930 assign c a 1 0 0 e b 1 1 1 # 13931 assign c a 1 0 0 f b 1 0 0 f # 13932 assign c a 1 0 0 f b 1 1 1 e # 13933 assign c a 1 0 0 f b 1 0 0 f # 13934 assign c a 1 0 0 f b 1 1 1 f # 13935 assign c a 1 0 0 f b 1 0 0 f # 13936 assign c a 1 0 0 f b 1 1 1 # 13937 assign c a 1 0 0 0 b 1 0 0 0 # 13938 assign c a 1 0 0 0 b 1 1 1 e # 13939 assign c a 1 0 0 b 1 0 0 # 13940 assign c a 1 0 0 b 1 1 1 f # 13941 assign c a 1 0 0 b 1 0 0 # 13942 assign c a 1 0 0 b 1 1 1 # 13943 assign c a 1 0 1 e b 1 0 1 e # 13944 assign c a 1 0 1 e b 1 0 0 e # 13945 assign c a 1 0 1 e b 1 0 1 e # 13946 assign c a 1 0 1 e b 1 0 0 f # 13947 assign c a 1 0 1 e b 1 0 1 e # 13948 assign c a 1 0 1 e b 1 0 0 # 13949 assign c a 1 0 1 f b 1 0 1 f # 13950 assign c a 1 0 1 f b 1 0 0 e # 13951 assign c a 1 0 1 f b 1 0 1 f # 13952 assign c a 1 0 1 f b 1 0 0 f # 13953 assign c a 1 0 1 f b 1 0 1 f # 13954 assign c a 1 0 1 f b 1 0 0 0 # 13955 assign c a 1 0 1 b 1 0 1 # 13956 assign c a 1 0 1 b 1 0 0 e # 13957 assign c a 1 0 1 0 b 1 0 1 0 # 13958 assign c a 1 0 1 0 b 1 0 0 f # 13959 assign c a 1 0 1 0 b 1 0 1 0 # 13960 assign c a 1 0 1 0 b 1 0 0 # 13961 assign c a 1 0 1 e b 1 0 1 e # 13962 assign c a 1 0 1 e b 1 0 1 e # 13963 assign c a 1 0 1 e b 1 0 1 e # 13964 assign c a 1 0 1 e b 1 0 1 f # 13965 assign c a 1 0 1 e b 1 0 1 e # 13966 assign c a 1 0 1 e b 1 0 1 0 # 13967 assign c a 1 0 1 f b 1 0 1 f # 13968 assign c a 1 0 1 f b 1 0 1 e # 13969 assign c a 1 0 1 f b 1 0 1 f # 13970 assign c a 1 0 1 f b 1 0 1 f # 13971 assign c a 1 0 1 f b 1 0 1 f # 13972 assign c a 1 0 1 f b 1 0 1 # 13973 assign c a 1 0 1 b 1 0 1 # 13974 assign c a 1 0 1 b 1 0 1 e # 13975 assign c a 1 0 1 0 b 1 0 1 0 # 13976 assign c a 1 0 1 0 b 1 0 1 f # 13977 assign c a 1 0 1 0 b 1 0 1 0 # 13978 assign c a 1 0 1 0 b 1 0 1 # 13979 assign c a 1 0 1 e b 1 0 1 e # 13980 assign c a 1 0 1 e b 1 1 0 e # 13981 assign c a 1 0 1 e b 1 0 1 e # 13982 assign c a 1 0 1 e b 1 1 0 f # 13983 assign c a 1 0 1 e b 1 0 1 e # 13984 assign c a 1 0 1 e b 1 1 0 # 13985 assign c a 1 0 1 f b 1 0 1 f # 13986 assign c a 1 0 1 f b 1 1 0 e # 13987 assign c a 1 0 1 f b 1 0 1 f # 13988 assign c a 1 0 1 f b 1 1 0 f # 13989 assign c a 1 0 1 f b 1 0 1 f # 13990 assign c a 1 0 1 f b 1 1 0 0 # 13991 assign c a 1 0 1 0 b 1 0 1 0 # 13992 assign c a 1 0 1 0 b 1 1 0 e # 13993 assign c a 1 0 1 b 1 0 1 # 13994 assign c a 1 0 1 b 1 1 0 f # 13995 assign c a 1 0 1 0 b 1 0 1 0 # 13996 assign c a 1 0 1 0 b 1 1 0 # 13997 assign c a 1 0 1 e b 1 0 1 e # 13998 assign c a 1 0 1 e b 1 1 1 e # 13999 assign c a 1 0 1 e b 1 0 1 e # 14000 assign c a 1 0 1 e b 1 1 1 f # 14001 assign c a 1 0 1 e b 1 0 1 e # 14002 assign c a 1 0 1 e b 1 1 1 # 14003 assign c a 1 0 1 f b 1 0 1 f # 14004 assign c a 1 0 1 f b 1 1 1 e # 14005 assign c a 1 0 1 f b 1 0 1 f # 14006 assign c a 1 0 1 f b 1 1 1 f # 14007 assign c a 1 0 1 f b 1 0 1 f # 14008 assign c a 1 0 1 f b 1 1 1 0 # 14009 assign c a 1 0 1 b 1 0 1 # 14010 assign c a 1 0 1 b 1 1 1 e # 14011 assign c a 1 0 1 0 b 1 0 1 0 # 14012 assign c a 1 0 1 0 b 1 1 1 f # 14013 assign c a 1 0 1 0 b 1 0 1 0 # 14014 assign c a 1 0 1 0 b 1 1 1 0 # 14015 assign c a 1 1 0 e b 1 1 0 e # 14016 assign c a 1 1 0 e b 1 0 0 e # 14017 assign c a 1 1 0 e b 1 1 0 e # 14018 assign c a 1 1 0 e b 1 0 0 f # 14019 assign c a 1 1 0 e b 1 1 0 e # 14020 assign c a 1 1 0 e b 1 0 0 0 # 14021 assign c a 1 1 0 f b 1 1 0 f # 14022 assign c a 1 1 0 f b 1 0 0 e # 14023 assign c a 1 1 0 f b 1 1 0 f # 14024 assign c a 1 1 0 f b 1 0 0 f # 14025 assign c a 1 1 0 f b 1 1 0 f # 14026 assign c a 1 1 0 f b 1 0 0 # 14027 assign c a 1 1 0 b 1 1 0 # 14028 assign c a 1 1 0 b 1 0 0 e # 14029 assign c a 1 1 0 0 b 1 1 0 0 # 14030 assign c a 1 1 0 0 b 1 0 0 f # 14031 assign c a 1 1 0 b 1 1 0 # 14032 assign c a 1 1 0 b 1 0 0 0 # 14033 assign c a 1 1 0 e b 1 1 0 e # 14034 assign c a 1 1 0 e b 1 0 1 e # 14035 assign c a 1 1 0 e b 1 1 0 e # 14036 assign c a 1 1 0 e b 1 0 1 f # 14037 assign c a 1 1 0 e b 1 1 0 e # 14038 assign c a 1 1 0 e b 1 0 1 0 # 14039 assign c a 1 1 0 f b 1 1 0 f # 14040 assign c a 1 1 0 f b 1 0 1 e # 14041 assign c a 1 1 0 f b 1 1 0 f # 14042 assign c a 1 1 0 f b 1 0 1 f # 14043 assign c a 1 1 0 f b 1 1 0 f # 14044 assign c a 1 1 0 f b 1 0 1 0 # 14045 assign c a 1 1 0 0 b 1 1 0 0 # 14046 assign c a 1 1 0 0 b 1 0 1 e # 14047 assign c a 1 1 0 b 1 1 0 # 14048 assign c a 1 1 0 b 1 0 1 f # 14049 assign c a 1 1 0 0 b 1 1 0 0 # 14050 assign c a 1 1 0 0 b 1 0 1 0 # 14051 assign c a 1 1 0 e b 1 1 0 e # 14052 assign c a 1 1 0 e b 1 1 0 e # 14053 assign c a 1 1 0 e b 1 1 0 e # 14054 assign c a 1 1 0 e b 1 1 0 f # 14055 assign c a 1 1 0 e b 1 1 0 e # 14056 assign c a 1 1 0 e b 1 1 0 # 14057 assign c a 1 1 0 f b 1 1 0 f # 14058 assign c a 1 1 0 f b 1 1 0 e # 14059 assign c a 1 1 0 f b 1 1 0 f # 14060 assign c a 1 1 0 f b 1 1 0 f # 14061 assign c a 1 1 0 f b 1 1 0 f # 14062 assign c a 1 1 0 f b 1 1 0 # 14063 assign c a 1 1 0 0 b 1 1 0 0 # 14064 assign c a 1 1 0 0 b 1 1 0 e # 14065 assign c a 1 1 0 0 b 1 1 0 0 # 14066 assign c a 1 1 0 0 b 1 1 0 f # 14067 assign c a 1 1 0 b 1 1 0 # 14068 assign c a 1 1 0 b 1 1 0 0 # 14069 assign c a 1 1 0 e b 1 1 0 e # 14070 assign c a 1 1 0 e b 1 1 1 e # 14071 assign c a 1 1 0 e b 1 1 0 e # 14072 assign c a 1 1 0 e b 1 1 1 f # 14073 assign c a 1 1 0 e b 1 1 0 e # 14074 assign c a 1 1 0 e b 1 1 1 # 14075 assign c a 1 1 0 f b 1 1 0 f # 14076 assign c a 1 1 0 f b 1 1 1 e # 14077 assign c a 1 1 0 f b 1 1 0 f # 14078 assign c a 1 1 0 f b 1 1 1 f # 14079 assign c a 1 1 0 f b 1 1 0 f # 14080 assign c a 1 1 0 f b 1 1 1 0 # 14081 assign c a 1 1 0 0 b 1 1 0 0 # 14082 assign c a 1 1 0 0 b 1 1 1 e # 14083 assign c a 1 1 0 b 1 1 0 # 14084 assign c a 1 1 0 b 1 1 1 f # 14085 assign c a 1 1 0 b 1 1 0 # 14086 assign c a 1 1 0 b 1 1 1 0 # 14087 assign c a 1 1 1 e b 1 1 1 e # 14088 assign c a 1 1 1 e b 1 0 0 e # 14089 assign c a 1 1 1 e b 1 1 1 e # 14090 assign c a 1 1 1 e b 1 0 0 f # 14091 assign c a 1 1 1 e b 1 1 1 e # 14092 assign c a 1 1 1 e b 1 0 0 0 # 14093 assign c a 1 1 1 f b 1 1 1 f # 14094 assign c a 1 1 1 f b 1 0 0 e # 14095 assign c a 1 1 1 f b 1 1 1 f # 14096 assign c a 1 1 1 f b 1 0 0 f # 14097 assign c a 1 1 1 f b 1 1 1 f # 14098 assign c a 1 1 1 f b 1 0 0 0 # 14099 assign c a 1 1 1 b 1 1 1 # 14100 assign c a 1 1 1 b 1 0 0 e # 14101 assign c a 1 1 1 b 1 1 1 # 14102 assign c a 1 1 1 b 1 0 0 f # 14103 assign c a 1 1 1 0 b 1 1 1 0 # 14104 assign c a 1 1 1 0 b 1 0 0 # 14105 assign c a 1 1 1 e b 1 1 1 e # 14106 assign c a 1 1 1 e b 1 0 1 e # 14107 assign c a 1 1 1 e b 1 1 1 e # 14108 assign c a 1 1 1 e b 1 0 1 f # 14109 assign c a 1 1 1 e b 1 1 1 e # 14110 assign c a 1 1 1 e b 1 0 1 # 14111 assign c a 1 1 1 f b 1 1 1 f # 14112 assign c a 1 1 1 f b 1 0 1 e # 14113 assign c a 1 1 1 f b 1 1 1 f # 14114 assign c a 1 1 1 f b 1 0 1 f # 14115 assign c a 1 1 1 f b 1 1 1 f # 14116 assign c a 1 1 1 f b 1 0 1 0 # 14117 assign c a 1 1 1 0 b 1 1 1 0 # 14118 assign c a 1 1 1 0 b 1 0 1 e # 14119 assign c a 1 1 1 0 b 1 1 1 0 # 14120 assign c a 1 1 1 0 b 1 0 1 f # 14121 assign c a 1 1 1 b 1 1 1 # 14122 assign c a 1 1 1 b 1 0 1 # 14123 assign c a 1 1 1 e b 1 1 1 e # 14124 assign c a 1 1 1 e b 1 1 0 e # 14125 assign c a 1 1 1 e b 1 1 1 e # 14126 assign c a 1 1 1 e b 1 1 0 f # 14127 assign c a 1 1 1 e b 1 1 1 e # 14128 assign c a 1 1 1 e b 1 1 0 0 # 14129 assign c a 1 1 1 f b 1 1 1 f # 14130 assign c a 1 1 1 f b 1 1 0 e # 14131 assign c a 1 1 1 f b 1 1 1 f # 14132 assign c a 1 1 1 f b 1 1 0 f # 14133 assign c a 1 1 1 f b 1 1 1 f # 14134 assign c a 1 1 1 f b 1 1 0 # 14135 assign c a 1 1 1 0 b 1 1 1 0 # 14136 assign c a 1 1 1 0 b 1 1 0 e # 14137 assign c a 1 1 1 0 b 1 1 1 0 # 14138 assign c a 1 1 1 0 b 1 1 0 f # 14139 assign c a 1 1 1 0 b 1 1 1 0 # 14140 assign c a 1 1 1 0 b 1 1 0 0 # 14141 assign c a 1 1 1 e b 1 1 1 e # 14142 assign c a 1 1 1 e b 1 1 1 e # 14143 assign c a 1 1 1 e b 1 1 1 e # 14144 assign c a 1 1 1 e b 1 1 1 f # 14145 assign c a 1 1 1 e b 1 1 1 e # 14146 assign c a 1 1 1 e b 1 1 1 # 14147 assign c a 1 1 1 f b 1 1 1 f # 14148 assign c a 1 1 1 f b 1 1 1 e # 14149 assign c a 1 1 1 f b 1 1 1 f # 14150 assign c a 1 1 1 f b 1 1 1 f # 14151 assign c a 1 1 1 f b 1 1 1 f # 14152 assign c a 1 1 1 f b 1 1 1 # 14153 assign c a 1 1 1 b 1 1 1 # 14154 assign c a 1 1 1 b 1 1 1 e # 14155 assign c a 1 1 1 b 1 1 1 # 14156 assign c a 1 1 1 b 1 1 1 f # 14157 assign c a 1 1 1 b 1 1 1 # 14158 assign c a 1 1 1 b 1 1 1 # 14159 assign c a 31 0 0 e b 31 0 0 e # 14160 assign c a 31 0 0 e b 31 0 0 e # 14161 assign c a 31 0 0 e b 31 0 0 e # 14162 assign c a 31 0 0 e b 31 0 0 f # 14163 assign c a 31 0 0 e b 31 0 0 e # 14164 assign c a 31 0 0 e b 31 0 0 1 3 4 6 7 10 11 12 14 16 18 19 20 21 25 26 27 29 # 14165 assign c a 31 0 0 f b 31 0 0 f # 14166 assign c a 31 0 0 f b 31 0 0 e # 14167 assign c a 31 0 0 f b 31 0 0 f # 14168 assign c a 31 0 0 f b 31 0 0 f # 14169 assign c a 31 0 0 f b 31 0 0 f # 14170 assign c a 31 0 0 f b 31 0 0 0 1 3 4 5 9 13 14 15 16 18 20 22 24 25 27 30 # 14171 assign c a 31 0 0 1 3 4 8 10 11 12 14 15 19 21 22 23 24 25 26 27 30 b 31 0 0 1 3 4 8 10 11 12 14 15 19 21 22 23 24 25 26 27 30 # 14172 assign c a 31 0 0 1 3 4 8 10 11 12 14 15 19 21 22 23 24 25 26 27 30 b 31 0 0 e # 14173 assign c a 31 0 0 4 5 6 10 12 15 16 17 20 23 25 26 27 29 30 b 31 0 0 4 5 6 10 12 15 16 17 20 23 25 26 27 29 30 # 14174 assign c a 31 0 0 4 5 6 10 12 15 16 17 20 23 25 26 27 29 30 b 31 0 0 f # 14175 assign c a 31 0 0 0 2 5 11 13 16 17 20 21 23 24 27 28 30 b 31 0 0 0 2 5 11 13 16 17 20 21 23 24 27 28 30 # 14176 assign c a 31 0 0 0 2 5 11 13 16 17 20 21 23 24 27 28 30 b 31 0 0 1 2 3 4 6 8 10 12 13 14 16 17 18 19 20 25 26 28 # 14177 assign c a 31 0 0 e b 31 0 0 e # 14178 assign c a 31 0 0 e b 31 0 1 e # 14179 assign c a 31 0 0 e b 31 0 0 e # 14180 assign c a 31 0 0 e b 31 0 1 f # 14181 assign c a 31 0 0 e b 31 0 0 e # 14182 assign c a 31 0 0 e b 31 0 1 2 3 6 7 10 11 13 15 20 21 22 25 27 28 29 # 14183 assign c a 31 0 0 f b 31 0 0 f # 14184 assign c a 31 0 0 f b 31 0 1 e # 14185 assign c a 31 0 0 f b 31 0 0 f # 14186 assign c a 31 0 0 f b 31 0 1 f # 14187 assign c a 31 0 0 f b 31 0 0 f # 14188 assign c a 31 0 0 f b 31 0 1 0 3 5 6 8 10 11 12 13 15 19 22 23 24 25 27 30 # 14189 assign c a 31 0 0 1 5 8 9 11 12 14 15 18 20 22 23 24 25 27 29 30 b 31 0 0 1 5 8 9 11 12 14 15 18 20 22 23 24 25 27 29 30 # 14190 assign c a 31 0 0 1 5 8 9 11 12 14 15 18 20 22 23 24 25 27 29 30 b 31 0 1 e # 14191 assign c a 31 0 0 0 1 2 4 5 6 8 9 10 11 12 14 16 19 21 22 24 25 26 28 29 b 31 0 0 0 1 2 4 5 6 8 9 10 11 12 14 16 19 21 22 24 25 26 28 29 # 14192 assign c a 31 0 0 0 1 2 4 5 6 8 9 10 11 12 14 16 19 21 22 24 25 26 28 29 b 31 0 1 f # 14193 assign c a 31 0 0 0 3 6 7 10 11 14 15 16 17 19 21 22 24 25 28 29 b 31 0 0 0 3 6 7 10 11 14 15 16 17 19 21 22 24 25 28 29 # 14194 assign c a 31 0 0 0 3 6 7 10 11 14 15 16 17 19 21 22 24 25 28 29 b 31 0 1 2 4 5 7 9 10 12 14 15 17 18 21 23 24 25 26 27 28 29 # 14195 assign c a 31 0 0 e b 31 0 0 e # 14196 assign c a 31 0 0 e b 31 1 0 e # 14197 assign c a 31 0 0 e b 31 0 0 e # 14198 assign c a 31 0 0 e b 31 1 0 f # 14199 assign c a 31 0 0 e b 31 0 0 e # 14200 assign c a 31 0 0 e b 31 1 0 3 6 9 11 12 13 14 16 17 20 23 26 29 30 # 14201 assign c a 31 0 0 f b 31 0 0 f # 14202 assign c a 31 0 0 f b 31 1 0 e # 14203 assign c a 31 0 0 f b 31 0 0 f # 14204 assign c a 31 0 0 f b 31 1 0 f # 14205 assign c a 31 0 0 f b 31 0 0 f # 14206 assign c a 31 0 0 f b 31 1 0 2 4 8 9 10 12 17 18 19 20 23 25 27 28 # 14207 assign c a 31 0 0 3 5 6 9 11 12 13 15 18 19 21 23 25 28 29 30 b 31 0 0 3 5 6 9 11 12 13 15 18 19 21 23 25 28 29 30 # 14208 assign c a 31 0 0 3 5 6 9 11 12 13 15 18 19 21 23 25 28 29 30 b 31 1 0 e # 14209 assign c a 31 0 0 5 7 12 13 14 15 17 18 21 26 b 31 0 0 5 7 12 13 14 15 17 18 21 26 # 14210 assign c a 31 0 0 5 7 12 13 14 15 17 18 21 26 b 31 1 0 f # 14211 assign c a 31 0 0 0 1 8 9 12 15 16 19 23 25 27 29 b 31 0 0 0 1 8 9 12 15 16 19 23 25 27 29 # 14212 assign c a 31 0 0 0 1 8 9 12 15 16 19 23 25 27 29 b 31 1 0 1 2 3 4 9 10 11 12 14 16 18 19 20 24 26 27 28 29 30 # 14213 assign c a 31 0 0 e b 31 0 0 e # 14214 assign c a 31 0 0 e b 31 1 1 e # 14215 assign c a 31 0 0 e b 31 0 0 e # 14216 assign c a 31 0 0 e b 31 1 1 f # 14217 assign c a 31 0 0 e b 31 0 0 e # 14218 assign c a 31 0 0 e b 31 1 1 1 2 4 5 7 10 11 13 14 15 16 18 19 20 21 24 25 28 # 14219 assign c a 31 0 0 f b 31 0 0 f # 14220 assign c a 31 0 0 f b 31 1 1 e # 14221 assign c a 31 0 0 f b 31 0 0 f # 14222 assign c a 31 0 0 f b 31 1 1 f # 14223 assign c a 31 0 0 f b 31 0 0 f # 14224 assign c a 31 0 0 f b 31 1 1 3 4 7 9 10 12 13 15 16 17 19 20 26 27 # 14225 assign c a 31 0 0 0 5 6 11 13 16 17 18 20 22 23 25 26 29 b 31 0 0 0 5 6 11 13 16 17 18 20 22 23 25 26 29 # 14226 assign c a 31 0 0 0 5 6 11 13 16 17 18 20 22 23 25 26 29 b 31 1 1 e # 14227 assign c a 31 0 0 0 2 4 5 8 9 10 11 13 14 17 19 20 22 23 24 25 28 30 b 31 0 0 0 2 4 5 8 9 10 11 13 14 17 19 20 22 23 24 25 28 30 # 14228 assign c a 31 0 0 0 2 4 5 8 9 10 11 13 14 17 19 20 22 23 24 25 28 30 b 31 1 1 f # 14229 assign c a 31 0 0 0 1 2 4 6 12 13 20 21 23 24 25 28 29 30 b 31 0 0 0 1 2 4 6 12 13 20 21 23 24 25 28 29 30 # 14230 assign c a 31 0 0 0 1 2 4 6 12 13 20 21 23 24 25 28 29 30 b 31 1 1 0 1 2 4 8 9 11 15 16 22 25 28 # 14231 assign c a 31 0 1 e b 31 0 1 e # 14232 assign c a 31 0 1 e b 31 0 0 e # 14233 assign c a 31 0 1 e b 31 0 1 e # 14234 assign c a 31 0 1 e b 31 0 0 f # 14235 assign c a 31 0 1 e b 31 0 1 e # 14236 assign c a 31 0 1 e b 31 0 0 0 1 4 7 12 13 16 17 18 21 23 25 27 28 # 14237 assign c a 31 0 1 f b 31 0 1 f # 14238 assign c a 31 0 1 f b 31 0 0 e # 14239 assign c a 31 0 1 f b 31 0 1 f # 14240 assign c a 31 0 1 f b 31 0 0 f # 14241 assign c a 31 0 1 f b 31 0 1 f # 14242 assign c a 31 0 1 f b 31 0 0 3 5 10 13 14 15 16 17 24 29 30 # 14243 assign c a 31 0 1 0 4 6 7 10 11 14 17 18 22 23 24 28 b 31 0 1 0 4 6 7 10 11 14 17 18 22 23 24 28 # 14244 assign c a 31 0 1 0 4 6 7 10 11 14 17 18 22 23 24 28 b 31 0 0 e # 14245 assign c a 31 0 1 1 3 5 6 9 13 15 16 20 21 24 25 26 28 29 b 31 0 1 1 3 5 6 9 13 15 16 20 21 24 25 26 28 29 # 14246 assign c a 31 0 1 1 3 5 6 9 13 15 16 20 21 24 25 26 28 29 b 31 0 0 f # 14247 assign c a 31 0 1 1 2 5 6 7 8 9 10 13 16 17 18 22 23 25 26 29 30 b 31 0 1 1 2 5 6 7 8 9 10 13 16 17 18 22 23 25 26 29 30 # 14248 assign c a 31 0 1 1 2 5 6 7 8 9 10 13 16 17 18 22 23 25 26 29 30 b 31 0 0 0 2 3 4 5 6 8 9 11 15 16 20 21 22 23 25 27 30 # 14249 assign c a 31 0 1 e b 31 0 1 e # 14250 assign c a 31 0 1 e b 31 0 1 e # 14251 assign c a 31 0 1 e b 31 0 1 e # 14252 assign c a 31 0 1 e b 31 0 1 f # 14253 assign c a 31 0 1 e b 31 0 1 e # 14254 assign c a 31 0 1 e b 31 0 1 0 1 2 3 6 7 9 13 14 16 17 18 19 20 21 22 24 25 26 27 28 # 14255 assign c a 31 0 1 f b 31 0 1 f # 14256 assign c a 31 0 1 f b 31 0 1 e # 14257 assign c a 31 0 1 f b 31 0 1 f # 14258 assign c a 31 0 1 f b 31 0 1 f # 14259 assign c a 31 0 1 f b 31 0 1 f # 14260 assign c a 31 0 1 f b 31 0 1 0 1 3 5 6 8 9 10 13 14 15 17 20 27 # 14261 assign c a 31 0 1 2 4 11 12 14 16 17 18 22 23 25 26 30 b 31 0 1 2 4 11 12 14 16 17 18 22 23 25 26 30 # 14262 assign c a 31 0 1 2 4 11 12 14 16 17 18 22 23 25 26 30 b 31 0 1 e # 14263 assign c a 31 0 1 1 2 3 4 6 8 10 12 16 17 21 22 25 27 29 30 b 31 0 1 1 2 3 4 6 8 10 12 16 17 21 22 25 27 29 30 # 14264 assign c a 31 0 1 1 2 3 4 6 8 10 12 16 17 21 22 25 27 29 30 b 31 0 1 f # 14265 assign c a 31 0 1 0 1 4 5 9 11 12 18 19 20 22 23 24 25 28 29 b 31 0 1 0 1 4 5 9 11 12 18 19 20 22 23 24 25 28 29 # 14266 assign c a 31 0 1 0 1 4 5 9 11 12 18 19 20 22 23 24 25 28 29 b 31 0 1 0 1 2 6 7 8 10 11 16 19 21 27 # 14267 assign c a 31 0 1 e b 31 0 1 e # 14268 assign c a 31 0 1 e b 31 1 0 e # 14269 assign c a 31 0 1 e b 31 0 1 e # 14270 assign c a 31 0 1 e b 31 1 0 f # 14271 assign c a 31 0 1 e b 31 0 1 e # 14272 assign c a 31 0 1 e b 31 1 0 0 2 4 6 12 13 14 16 19 23 24 27 28 29 30 # 14273 assign c a 31 0 1 f b 31 0 1 f # 14274 assign c a 31 0 1 f b 31 1 0 e # 14275 assign c a 31 0 1 f b 31 0 1 f # 14276 assign c a 31 0 1 f b 31 1 0 f # 14277 assign c a 31 0 1 f b 31 0 1 f # 14278 assign c a 31 0 1 f b 31 1 0 0 1 2 3 4 6 8 10 13 16 18 20 22 23 24 26 27 28 29 30 # 14279 assign c a 31 0 1 0 1 2 3 6 7 11 14 15 16 18 27 29 30 b 31 0 1 0 1 2 3 6 7 11 14 15 16 18 27 29 30 # 14280 assign c a 31 0 1 0 1 2 3 6 7 11 14 15 16 18 27 29 30 b 31 1 0 e # 14281 assign c a 31 0 1 1 3 5 6 7 8 9 11 13 14 16 20 21 23 24 25 27 30 b 31 0 1 1 3 5 6 7 8 9 11 13 14 16 20 21 23 24 25 27 30 # 14282 assign c a 31 0 1 1 3 5 6 7 8 9 11 13 14 16 20 21 23 24 25 27 30 b 31 1 0 f # 14283 assign c a 31 0 1 0 1 3 5 8 10 11 12 17 18 21 22 24 25 26 27 29 b 31 0 1 0 1 3 5 8 10 11 12 17 18 21 22 24 25 26 27 29 # 14284 assign c a 31 0 1 0 1 3 5 8 10 11 12 17 18 21 22 24 25 26 27 29 b 31 1 0 1 2 3 5 8 9 12 13 14 16 17 23 24 27 28 # 14285 assign c a 31 0 1 e b 31 0 1 e # 14286 assign c a 31 0 1 e b 31 1 1 e # 14287 assign c a 31 0 1 e b 31 0 1 e # 14288 assign c a 31 0 1 e b 31 1 1 f # 14289 assign c a 31 0 1 e b 31 0 1 e # 14290 assign c a 31 0 1 e b 31 1 1 2 4 5 6 9 11 12 14 17 18 19 20 21 23 24 25 27 28 29 30 # 14291 assign c a 31 0 1 f b 31 0 1 f # 14292 assign c a 31 0 1 f b 31 1 1 e # 14293 assign c a 31 0 1 f b 31 0 1 f # 14294 assign c a 31 0 1 f b 31 1 1 f # 14295 assign c a 31 0 1 f b 31 0 1 f # 14296 assign c a 31 0 1 f b 31 1 1 0 2 4 5 6 9 10 13 15 17 19 20 23 25 26 28 29 # 14297 assign c a 31 0 1 0 1 3 4 5 6 9 10 13 14 15 17 20 21 27 30 b 31 0 1 0 1 3 4 5 6 9 10 13 14 15 17 20 21 27 30 # 14298 assign c a 31 0 1 0 1 3 4 5 6 9 10 13 14 15 17 20 21 27 30 b 31 1 1 e # 14299 assign c a 31 0 1 0 3 6 9 11 12 14 15 16 19 23 24 25 27 30 b 31 0 1 0 3 6 9 11 12 14 15 16 19 23 24 25 27 30 # 14300 assign c a 31 0 1 0 3 6 9 11 12 14 15 16 19 23 24 25 27 30 b 31 1 1 f # 14301 assign c a 31 0 1 1 2 4 8 9 10 11 12 15 17 21 22 23 24 25 27 28 29 b 31 0 1 1 2 4 8 9 10 11 12 15 17 21 22 23 24 25 27 28 29 # 14302 assign c a 31 0 1 1 2 4 8 9 10 11 12 15 17 21 22 23 24 25 27 28 29 b 31 1 1 5 6 7 9 10 12 14 15 16 17 19 20 22 23 27 29 # 14303 assign c a 31 1 0 e b 31 1 0 e # 14304 assign c a 31 1 0 e b 31 0 0 e # 14305 assign c a 31 1 0 e b 31 1 0 e # 14306 assign c a 31 1 0 e b 31 0 0 f # 14307 assign c a 31 1 0 e b 31 1 0 e # 14308 assign c a 31 1 0 e b 31 0 0 0 2 4 5 6 7 9 10 17 20 21 22 23 24 27 28 # 14309 assign c a 31 1 0 f b 31 1 0 f # 14310 assign c a 31 1 0 f b 31 0 0 e # 14311 assign c a 31 1 0 f b 31 1 0 f # 14312 assign c a 31 1 0 f b 31 0 0 f # 14313 assign c a 31 1 0 f b 31 1 0 f # 14314 assign c a 31 1 0 f b 31 0 0 0 1 3 4 6 7 9 10 11 18 19 21 22 24 27 29 # 14315 assign c a 31 1 0 0 2 3 5 6 7 9 10 12 13 14 17 22 24 26 27 29 30 b 31 1 0 0 2 3 5 6 7 9 10 12 13 14 17 22 24 26 27 29 30 # 14316 assign c a 31 1 0 0 2 3 5 6 7 9 10 12 13 14 17 22 24 26 27 29 30 b 31 0 0 e # 14317 assign c a 31 1 0 2 5 11 15 16 19 20 22 28 29 b 31 1 0 2 5 11 15 16 19 20 22 28 29 # 14318 assign c a 31 1 0 2 5 11 15 16 19 20 22 28 29 b 31 0 0 f # 14319 assign c a 31 1 0 2 3 4 5 8 11 12 13 17 18 23 24 25 26 27 29 b 31 1 0 2 3 4 5 8 11 12 13 17 18 23 24 25 26 27 29 # 14320 assign c a 31 1 0 2 3 4 5 8 11 12 13 17 18 23 24 25 26 27 29 b 31 0 0 0 4 5 6 8 10 11 12 14 16 17 22 23 25 26 29 # 14321 assign c a 31 1 0 e b 31 1 0 e # 14322 assign c a 31 1 0 e b 31 0 1 e # 14323 assign c a 31 1 0 e b 31 1 0 e # 14324 assign c a 31 1 0 e b 31 0 1 f # 14325 assign c a 31 1 0 e b 31 1 0 e # 14326 assign c a 31 1 0 e b 31 0 1 0 2 5 8 13 15 16 21 24 25 30 # 14327 assign c a 31 1 0 f b 31 1 0 f # 14328 assign c a 31 1 0 f b 31 0 1 e # 14329 assign c a 31 1 0 f b 31 1 0 f # 14330 assign c a 31 1 0 f b 31 0 1 f # 14331 assign c a 31 1 0 f b 31 1 0 f # 14332 assign c a 31 1 0 f b 31 0 1 1 3 4 6 8 10 12 14 15 20 21 22 24 25 26 28 30 # 14333 assign c a 31 1 0 1 3 4 5 6 8 13 16 18 21 24 25 27 28 30 b 31 1 0 1 3 4 5 6 8 13 16 18 21 24 25 27 28 30 # 14334 assign c a 31 1 0 1 3 4 5 6 8 13 16 18 21 24 25 27 28 30 b 31 0 1 e # 14335 assign c a 31 1 0 7 8 9 13 15 16 17 22 23 24 25 26 27 28 30 b 31 1 0 7 8 9 13 15 16 17 22 23 24 25 26 27 28 30 # 14336 assign c a 31 1 0 7 8 9 13 15 16 17 22 23 24 25 26 27 28 30 b 31 0 1 f # 14337 assign c a 31 1 0 0 1 5 8 10 11 13 16 18 20 21 22 24 25 27 29 30 b 31 1 0 0 1 5 8 10 11 13 16 18 20 21 22 24 25 27 29 30 # 14338 assign c a 31 1 0 0 1 5 8 10 11 13 16 18 20 21 22 24 25 27 29 30 b 31 0 1 1 3 7 8 10 11 12 17 18 20 21 24 26 27 28 29 30 # 14339 assign c a 31 1 0 e b 31 1 0 e # 14340 assign c a 31 1 0 e b 31 1 0 e # 14341 assign c a 31 1 0 e b 31 1 0 e # 14342 assign c a 31 1 0 e b 31 1 0 f # 14343 assign c a 31 1 0 e b 31 1 0 e # 14344 assign c a 31 1 0 e b 31 1 0 1 3 5 8 9 10 11 12 15 16 18 20 21 22 24 25 26 27 28 29 30 # 14345 assign c a 31 1 0 f b 31 1 0 f # 14346 assign c a 31 1 0 f b 31 1 0 e # 14347 assign c a 31 1 0 f b 31 1 0 f # 14348 assign c a 31 1 0 f b 31 1 0 f # 14349 assign c a 31 1 0 f b 31 1 0 f # 14350 assign c a 31 1 0 f b 31 1 0 0 3 4 7 8 9 10 11 12 14 15 18 21 24 27 28 30 # 14351 assign c a 31 1 0 0 1 3 12 13 15 19 20 22 24 26 27 29 b 31 1 0 0 1 3 12 13 15 19 20 22 24 26 27 29 # 14352 assign c a 31 1 0 0 1 3 12 13 15 19 20 22 24 26 27 29 b 31 1 0 e # 14353 assign c a 31 1 0 1 2 7 8 9 11 12 17 18 23 27 28 b 31 1 0 1 2 7 8 9 11 12 17 18 23 27 28 # 14354 assign c a 31 1 0 1 2 7 8 9 11 12 17 18 23 27 28 b 31 1 0 f # 14355 assign c a 31 1 0 0 6 13 15 18 20 21 22 26 28 30 b 31 1 0 0 6 13 15 18 20 21 22 26 28 30 # 14356 assign c a 31 1 0 0 6 13 15 18 20 21 22 26 28 30 b 31 1 0 0 1 2 6 8 10 11 12 13 16 17 23 26 27 # 14357 assign c a 31 1 0 e b 31 1 0 e # 14358 assign c a 31 1 0 e b 31 1 1 e # 14359 assign c a 31 1 0 e b 31 1 0 e # 14360 assign c a 31 1 0 e b 31 1 1 f # 14361 assign c a 31 1 0 e b 31 1 0 e # 14362 assign c a 31 1 0 e b 31 1 1 3 5 6 7 8 10 11 12 13 16 17 18 21 25 29 30 # 14363 assign c a 31 1 0 f b 31 1 0 f # 14364 assign c a 31 1 0 f b 31 1 1 e # 14365 assign c a 31 1 0 f b 31 1 0 f # 14366 assign c a 31 1 0 f b 31 1 1 f # 14367 assign c a 31 1 0 f b 31 1 0 f # 14368 assign c a 31 1 0 f b 31 1 1 0 3 4 7 8 9 10 11 12 14 17 18 21 22 23 25 27 # 14369 assign c a 31 1 0 1 2 5 6 8 10 11 14 16 17 24 26 27 28 b 31 1 0 1 2 5 6 8 10 11 14 16 17 24 26 27 28 # 14370 assign c a 31 1 0 1 2 5 6 8 10 11 14 16 17 24 26 27 28 b 31 1 1 e # 14371 assign c a 31 1 0 1 2 5 7 8 9 10 11 12 16 18 23 25 29 b 31 1 0 1 2 5 7 8 9 10 11 12 16 18 23 25 29 # 14372 assign c a 31 1 0 1 2 5 7 8 9 10 11 12 16 18 23 25 29 b 31 1 1 f # 14373 assign c a 31 1 0 0 1 7 10 13 14 15 16 17 18 22 24 26 27 28 b 31 1 0 0 1 7 10 13 14 15 16 17 18 22 24 26 27 28 # 14374 assign c a 31 1 0 0 1 7 10 13 14 15 16 17 18 22 24 26 27 28 b 31 1 1 0 2 3 8 9 12 14 15 17 21 23 25 28 29 30 # 14375 assign c a 31 1 1 e b 31 1 1 e # 14376 assign c a 31 1 1 e b 31 0 0 e # 14377 assign c a 31 1 1 e b 31 1 1 e # 14378 assign c a 31 1 1 e b 31 0 0 f # 14379 assign c a 31 1 1 e b 31 1 1 e # 14380 assign c a 31 1 1 e b 31 0 0 2 4 6 9 11 12 13 14 16 17 18 21 22 23 27 30 # 14381 assign c a 31 1 1 f b 31 1 1 f # 14382 assign c a 31 1 1 f b 31 0 0 e # 14383 assign c a 31 1 1 f b 31 1 1 f # 14384 assign c a 31 1 1 f b 31 0 0 f # 14385 assign c a 31 1 1 f b 31 1 1 f # 14386 assign c a 31 1 1 f b 31 0 0 0 1 2 7 8 9 12 13 16 17 21 25 26 27 28 30 # 14387 assign c a 31 1 1 0 1 3 5 11 12 19 23 24 25 27 28 29 b 31 1 1 0 1 3 5 11 12 19 23 24 25 27 28 29 # 14388 assign c a 31 1 1 0 1 3 5 11 12 19 23 24 25 27 28 29 b 31 0 0 e # 14389 assign c a 31 1 1 0 1 2 3 5 6 10 16 17 18 19 23 27 b 31 1 1 0 1 2 3 5 6 10 16 17 18 19 23 27 # 14390 assign c a 31 1 1 0 1 2 3 5 6 10 16 17 18 19 23 27 b 31 0 0 f # 14391 assign c a 31 1 1 0 1 3 6 7 9 10 11 15 17 18 25 26 28 29 30 b 31 1 1 0 1 3 6 7 9 10 11 15 17 18 25 26 28 29 30 # 14392 assign c a 31 1 1 0 1 3 6 7 9 10 11 15 17 18 25 26 28 29 30 b 31 0 0 0 1 3 5 7 10 11 12 13 22 23 24 25 28 # 14393 assign c a 31 1 1 e b 31 1 1 e # 14394 assign c a 31 1 1 e b 31 0 1 e # 14395 assign c a 31 1 1 e b 31 1 1 e # 14396 assign c a 31 1 1 e b 31 0 1 f # 14397 assign c a 31 1 1 e b 31 1 1 e # 14398 assign c a 31 1 1 e b 31 0 1 0 2 4 5 6 7 8 11 15 16 18 20 23 25 27 28 29 # 14399 assign c a 31 1 1 f b 31 1 1 f # 14400 assign c a 31 1 1 f b 31 0 1 e # 14401 assign c a 31 1 1 f b 31 1 1 f # 14402 assign c a 31 1 1 f b 31 0 1 f # 14403 assign c a 31 1 1 f b 31 1 1 f # 14404 assign c a 31 1 1 f b 31 0 1 3 4 6 7 12 13 17 19 20 21 22 23 25 26 28 29 30 # 14405 assign c a 31 1 1 1 4 5 7 8 9 10 13 14 15 17 19 20 22 24 25 28 b 31 1 1 1 4 5 7 8 9 10 13 14 15 17 19 20 22 24 25 28 # 14406 assign c a 31 1 1 1 4 5 7 8 9 10 13 14 15 17 19 20 22 24 25 28 b 31 0 1 e # 14407 assign c a 31 1 1 0 2 5 7 8 10 11 12 13 14 15 16 19 21 22 23 24 25 28 30 b 31 1 1 0 2 5 7 8 10 11 12 13 14 15 16 19 21 22 23 24 25 28 30 # 14408 assign c a 31 1 1 0 2 5 7 8 10 11 12 13 14 15 16 19 21 22 23 24 25 28 30 b 31 0 1 f # 14409 assign c a 31 1 1 0 1 2 3 4 7 9 10 13 14 16 19 20 22 24 25 26 30 b 31 1 1 0 1 2 3 4 7 9 10 13 14 16 19 20 22 24 25 26 30 # 14410 assign c a 31 1 1 0 1 2 3 4 7 9 10 13 14 16 19 20 22 24 25 26 30 b 31 0 1 1 2 4 6 7 10 11 12 13 14 18 20 21 22 24 25 # 14411 assign c a 31 1 1 e b 31 1 1 e # 14412 assign c a 31 1 1 e b 31 1 0 e # 14413 assign c a 31 1 1 e b 31 1 1 e # 14414 assign c a 31 1 1 e b 31 1 0 f # 14415 assign c a 31 1 1 e b 31 1 1 e # 14416 assign c a 31 1 1 e b 31 1 0 2 3 8 9 12 16 18 19 21 22 23 24 25 28 29 # 14417 assign c a 31 1 1 f b 31 1 1 f # 14418 assign c a 31 1 1 f b 31 1 0 e # 14419 assign c a 31 1 1 f b 31 1 1 f # 14420 assign c a 31 1 1 f b 31 1 0 f # 14421 assign c a 31 1 1 f b 31 1 1 f # 14422 assign c a 31 1 1 f b 31 1 0 4 5 6 9 10 11 12 13 15 16 17 18 19 21 22 24 30 # 14423 assign c a 31 1 1 0 5 6 9 14 16 19 20 23 25 27 29 b 31 1 1 0 5 6 9 14 16 19 20 23 25 27 29 # 14424 assign c a 31 1 1 0 5 6 9 14 16 19 20 23 25 27 29 b 31 1 0 e # 14425 assign c a 31 1 1 2 3 5 6 7 11 12 17 18 20 22 23 24 25 27 29 b 31 1 1 2 3 5 6 7 11 12 17 18 20 22 23 24 25 27 29 # 14426 assign c a 31 1 1 2 3 5 6 7 11 12 17 18 20 22 23 24 25 27 29 b 31 1 0 f # 14427 assign c a 31 1 1 0 2 4 5 7 8 9 10 11 12 16 20 21 22 23 24 25 26 28 29 30 b 31 1 1 0 2 4 5 7 8 9 10 11 12 16 20 21 22 23 24 25 26 28 29 30 # 14428 assign c a 31 1 1 0 2 4 5 7 8 9 10 11 12 16 20 21 22 23 24 25 26 28 29 30 b 31 1 0 0 2 4 7 10 12 17 20 24 # 14429 assign c a 31 1 1 e b 31 1 1 e # 14430 assign c a 31 1 1 e b 31 1 1 e # 14431 assign c a 31 1 1 e b 31 1 1 e # 14432 assign c a 31 1 1 e b 31 1 1 f # 14433 assign c a 31 1 1 e b 31 1 1 e # 14434 assign c a 31 1 1 e b 31 1 1 0 1 2 4 6 8 9 12 14 16 18 21 22 23 24 25 29 30 # 14435 assign c a 31 1 1 f b 31 1 1 f # 14436 assign c a 31 1 1 f b 31 1 1 e # 14437 assign c a 31 1 1 f b 31 1 1 f # 14438 assign c a 31 1 1 f b 31 1 1 f # 14439 assign c a 31 1 1 f b 31 1 1 f # 14440 assign c a 31 1 1 f b 31 1 1 2 7 10 17 20 23 26 27 29 # 14441 assign c a 31 1 1 0 8 9 12 13 16 18 21 22 23 25 26 27 29 b 31 1 1 0 8 9 12 13 16 18 21 22 23 25 26 27 29 # 14442 assign c a 31 1 1 0 8 9 12 13 16 18 21 22 23 25 26 27 29 b 31 1 1 e # 14443 assign c a 31 1 1 1 2 6 7 8 9 10 12 13 14 16 17 18 21 22 25 29 30 b 31 1 1 1 2 6 7 8 9 10 12 13 14 16 17 18 21 22 25 29 30 # 14444 assign c a 31 1 1 1 2 6 7 8 9 10 12 13 14 16 17 18 21 22 25 29 30 b 31 1 1 f # 14445 assign c a 31 1 1 0 1 5 8 9 11 12 13 14 15 16 17 18 19 20 21 22 25 b 31 1 1 0 1 5 8 9 11 12 13 14 15 16 17 18 19 20 21 22 25 # 14446 assign c a 31 1 1 0 1 5 8 9 11 12 13 14 15 16 17 18 19 20 21 22 25 b 31 1 1 2 4 6 9 14 17 20 23 24 28 29 # 14447 assign c a 32 0 0 e b 32 0 0 e # 14448 assign c a 32 0 0 e b 32 0 0 e # 14449 assign c a 32 0 0 e b 32 0 0 e # 14450 assign c a 32 0 0 e b 32 0 0 f # 14451 assign c a 32 0 0 e b 32 0 0 e # 14452 assign c a 32 0 0 e b 32 0 0 0 5 7 8 9 13 15 16 17 20 21 23 24 25 27 # 14453 assign c a 32 0 0 f b 32 0 0 f # 14454 assign c a 32 0 0 f b 32 0 0 e # 14455 assign c a 32 0 0 f b 32 0 0 f # 14456 assign c a 32 0 0 f b 32 0 0 f # 14457 assign c a 32 0 0 f b 32 0 0 f # 14458 assign c a 32 0 0 f b 32 0 0 0 1 2 6 10 11 12 13 14 15 16 19 21 23 25 26 27 28 31 # 14459 assign c a 32 0 0 2 3 4 5 7 9 10 12 15 16 18 19 22 23 24 25 26 27 30 31 b 32 0 0 2 3 4 5 7 9 10 12 15 16 18 19 22 23 24 25 26 27 30 31 # 14460 assign c a 32 0 0 2 3 4 5 7 9 10 12 15 16 18 19 22 23 24 25 26 27 30 31 b 32 0 0 e # 14461 assign c a 32 0 0 0 1 4 5 7 8 11 12 14 16 20 22 23 25 26 27 28 30 31 b 32 0 0 0 1 4 5 7 8 11 12 14 16 20 22 23 25 26 27 28 30 31 # 14462 assign c a 32 0 0 0 1 4 5 7 8 11 12 14 16 20 22 23 25 26 27 28 30 31 b 32 0 0 f # 14463 assign c a 32 0 0 3 4 5 6 7 8 11 12 15 16 17 18 21 23 24 25 26 27 31 b 32 0 0 3 4 5 6 7 8 11 12 15 16 17 18 21 23 24 25 26 27 31 # 14464 assign c a 32 0 0 3 4 5 6 7 8 11 12 15 16 17 18 21 23 24 25 26 27 31 b 32 0 0 0 1 2 3 5 8 9 11 15 21 24 25 26 30 # 14465 assign c a 32 0 0 e b 32 0 0 e # 14466 assign c a 32 0 0 e b 32 0 1 e # 14467 assign c a 32 0 0 e b 32 0 0 e # 14468 assign c a 32 0 0 e b 32 0 1 f # 14469 assign c a 32 0 0 e b 32 0 0 e # 14470 assign c a 32 0 0 e b 32 0 1 1 2 3 11 12 13 14 18 19 20 21 22 23 24 25 26 29 30 31 # 14471 assign c a 32 0 0 f b 32 0 0 f # 14472 assign c a 32 0 0 f b 32 0 1 e # 14473 assign c a 32 0 0 f b 32 0 0 f # 14474 assign c a 32 0 0 f b 32 0 1 f # 14475 assign c a 32 0 0 f b 32 0 0 f # 14476 assign c a 32 0 0 f b 32 0 1 0 1 5 6 7 9 12 15 18 21 24 26 30 31 # 14477 assign c a 32 0 0 5 8 9 10 11 12 14 18 19 22 23 25 27 30 b 32 0 0 5 8 9 10 11 12 14 18 19 22 23 25 27 30 # 14478 assign c a 32 0 0 5 8 9 10 11 12 14 18 19 22 23 25 27 30 b 32 0 1 e # 14479 assign c a 32 0 0 0 1 2 3 4 7 8 10 11 15 16 18 20 21 26 27 28 29 b 32 0 0 0 1 2 3 4 7 8 10 11 15 16 18 20 21 26 27 28 29 # 14480 assign c a 32 0 0 0 1 2 3 4 7 8 10 11 15 16 18 20 21 26 27 28 29 b 32 0 1 f # 14481 assign c a 32 0 0 0 3 5 6 11 12 13 14 15 23 24 27 29 31 b 32 0 0 0 3 5 6 11 12 13 14 15 23 24 27 29 31 # 14482 assign c a 32 0 0 0 3 5 6 11 12 13 14 15 23 24 27 29 31 b 32 0 1 0 1 2 4 6 7 8 10 11 14 15 16 20 21 22 23 29 # 14483 assign c a 32 0 0 e b 32 0 0 e # 14484 assign c a 32 0 0 e b 32 1 0 e # 14485 assign c a 32 0 0 e b 32 0 0 e # 14486 assign c a 32 0 0 e b 32 1 0 f # 14487 assign c a 32 0 0 e b 32 0 0 e # 14488 assign c a 32 0 0 e b 32 1 0 2 4 5 7 9 10 11 13 14 16 17 18 19 20 21 23 25 28 29 30 # 14489 assign c a 32 0 0 f b 32 0 0 f # 14490 assign c a 32 0 0 f b 32 1 0 e # 14491 assign c a 32 0 0 f b 32 0 0 f # 14492 assign c a 32 0 0 f b 32 1 0 f # 14493 assign c a 32 0 0 f b 32 0 0 f # 14494 assign c a 32 0 0 f b 32 1 0 3 5 6 8 13 14 16 18 19 22 26 29 # 14495 assign c a 32 0 0 1 4 6 8 10 11 16 18 20 21 22 24 25 29 30 31 b 32 0 0 1 4 6 8 10 11 16 18 20 21 22 24 25 29 30 31 # 14496 assign c a 32 0 0 1 4 6 8 10 11 16 18 20 21 22 24 25 29 30 31 b 32 1 0 e # 14497 assign c a 32 0 0 0 3 9 11 14 16 17 18 20 22 23 26 27 29 b 32 0 0 0 3 9 11 14 16 17 18 20 22 23 26 27 29 # 14498 assign c a 32 0 0 0 3 9 11 14 16 17 18 20 22 23 26 27 29 b 32 1 0 f # 14499 assign c a 32 0 0 0 1 2 4 6 9 11 17 18 19 22 23 24 25 27 29 b 32 0 0 0 1 2 4 6 9 11 17 18 19 22 23 24 25 27 29 # 14500 assign c a 32 0 0 0 1 2 4 6 9 11 17 18 19 22 23 24 25 27 29 b 32 1 0 0 2 3 5 7 8 12 13 15 16 18 20 21 22 27 29 # 14501 assign c a 32 0 0 e b 32 0 0 e # 14502 assign c a 32 0 0 e b 32 1 1 e # 14503 assign c a 32 0 0 e b 32 0 0 e # 14504 assign c a 32 0 0 e b 32 1 1 f # 14505 assign c a 32 0 0 e b 32 0 0 e # 14506 assign c a 32 0 0 e b 32 1 1 0 2 7 8 9 13 16 19 23 24 25 26 30 # 14507 assign c a 32 0 0 f b 32 0 0 f # 14508 assign c a 32 0 0 f b 32 1 1 e # 14509 assign c a 32 0 0 f b 32 0 0 f # 14510 assign c a 32 0 0 f b 32 1 1 f # 14511 assign c a 32 0 0 f b 32 0 0 f # 14512 assign c a 32 0 0 f b 32 1 1 0 1 2 3 4 6 7 8 12 13 14 15 18 20 21 23 24 25 29 30 31 # 14513 assign c a 32 0 0 0 1 2 3 4 5 7 9 15 17 20 22 23 26 27 29 30 31 b 32 0 0 0 1 2 3 4 5 7 9 15 17 20 22 23 26 27 29 30 31 # 14514 assign c a 32 0 0 0 1 2 3 4 5 7 9 15 17 20 22 23 26 27 29 30 31 b 32 1 1 e # 14515 assign c a 32 0 0 1 2 4 7 8 9 15 18 20 21 28 29 b 32 0 0 1 2 4 7 8 9 15 18 20 21 28 29 # 14516 assign c a 32 0 0 1 2 4 7 8 9 15 18 20 21 28 29 b 32 1 1 f # 14517 assign c a 32 0 0 0 2 9 10 11 15 16 19 23 24 27 29 b 32 0 0 0 2 9 10 11 15 16 19 23 24 27 29 # 14518 assign c a 32 0 0 0 2 9 10 11 15 16 19 23 24 27 29 b 32 1 1 0 2 4 6 8 9 10 14 15 16 18 20 21 27 # 14519 assign c a 32 0 1 e b 32 0 1 e # 14520 assign c a 32 0 1 e b 32 0 0 e # 14521 assign c a 32 0 1 e b 32 0 1 e # 14522 assign c a 32 0 1 e b 32 0 0 f # 14523 assign c a 32 0 1 e b 32 0 1 e # 14524 assign c a 32 0 1 e b 32 0 0 0 1 2 5 6 8 9 11 14 16 17 18 20 21 22 27 28 30 # 14525 assign c a 32 0 1 f b 32 0 1 f # 14526 assign c a 32 0 1 f b 32 0 0 e # 14527 assign c a 32 0 1 f b 32 0 1 f # 14528 assign c a 32 0 1 f b 32 0 0 f # 14529 assign c a 32 0 1 f b 32 0 1 f # 14530 assign c a 32 0 1 f b 32 0 0 1 2 3 5 6 11 12 14 15 16 17 19 20 22 26 28 29 30 # 14531 assign c a 32 0 1 0 1 2 5 7 9 10 12 13 15 18 20 21 24 27 30 b 32 0 1 0 1 2 5 7 9 10 12 13 15 18 20 21 24 27 30 # 14532 assign c a 32 0 1 0 1 2 5 7 9 10 12 13 15 18 20 21 24 27 30 b 32 0 0 e # 14533 assign c a 32 0 1 0 1 4 5 8 10 11 12 14 16 18 22 24 26 29 b 32 0 1 0 1 4 5 8 10 11 12 14 16 18 22 24 26 29 # 14534 assign c a 32 0 1 0 1 4 5 8 10 11 12 14 16 18 22 24 26 29 b 32 0 0 f # 14535 assign c a 32 0 1 0 1 2 3 4 7 8 11 12 16 17 18 19 21 23 24 29 30 b 32 0 1 0 1 2 3 4 7 8 11 12 16 17 18 19 21 23 24 29 30 # 14536 assign c a 32 0 1 0 1 2 3 4 7 8 11 12 16 17 18 19 21 23 24 29 30 b 32 0 0 0 1 3 5 9 10 11 15 18 25 26 27 29 30 # 14537 assign c a 32 0 1 e b 32 0 1 e # 14538 assign c a 32 0 1 e b 32 0 1 e # 14539 assign c a 32 0 1 e b 32 0 1 e # 14540 assign c a 32 0 1 e b 32 0 1 f # 14541 assign c a 32 0 1 e b 32 0 1 e # 14542 assign c a 32 0 1 e b 32 0 1 0 2 4 11 12 13 14 15 17 20 21 22 24 31 # 14543 assign c a 32 0 1 f b 32 0 1 f # 14544 assign c a 32 0 1 f b 32 0 1 e # 14545 assign c a 32 0 1 f b 32 0 1 f # 14546 assign c a 32 0 1 f b 32 0 1 f # 14547 assign c a 32 0 1 f b 32 0 1 f # 14548 assign c a 32 0 1 f b 32 0 1 4 5 6 9 11 12 13 14 15 16 19 24 27 28 29 30 # 14549 assign c a 32 0 1 2 4 6 15 16 17 18 20 21 23 25 26 28 29 b 32 0 1 2 4 6 15 16 17 18 20 21 23 25 26 28 29 # 14550 assign c a 32 0 1 2 4 6 15 16 17 18 20 21 23 25 26 28 29 b 32 0 1 e # 14551 assign c a 32 0 1 0 2 3 4 5 12 13 18 23 25 26 28 30 31 b 32 0 1 0 2 3 4 5 12 13 18 23 25 26 28 30 31 # 14552 assign c a 32 0 1 0 2 3 4 5 12 13 18 23 25 26 28 30 31 b 32 0 1 f # 14553 assign c a 32 0 1 0 1 2 4 5 6 7 12 13 14 18 20 23 27 28 29 30 b 32 0 1 0 1 2 4 5 6 7 12 13 14 18 20 23 27 28 29 30 # 14554 assign c a 32 0 1 0 1 2 4 5 6 7 12 13 14 18 20 23 27 28 29 30 b 32 0 1 0 2 5 7 8 9 11 12 13 18 20 21 23 26 27 29 # 14555 assign c a 32 0 1 e b 32 0 1 e # 14556 assign c a 32 0 1 e b 32 1 0 e # 14557 assign c a 32 0 1 e b 32 0 1 e # 14558 assign c a 32 0 1 e b 32 1 0 f # 14559 assign c a 32 0 1 e b 32 0 1 e # 14560 assign c a 32 0 1 e b 32 1 0 2 3 6 9 12 13 18 19 21 22 25 27 28 29 31 # 14561 assign c a 32 0 1 f b 32 0 1 f # 14562 assign c a 32 0 1 f b 32 1 0 e # 14563 assign c a 32 0 1 f b 32 0 1 f # 14564 assign c a 32 0 1 f b 32 1 0 f # 14565 assign c a 32 0 1 f b 32 0 1 f # 14566 assign c a 32 0 1 f b 32 1 0 1 2 3 6 10 12 14 17 19 20 25 27 28 30 # 14567 assign c a 32 0 1 1 2 3 5 7 9 15 16 17 19 20 21 22 28 b 32 0 1 1 2 3 5 7 9 15 16 17 19 20 21 22 28 # 14568 assign c a 32 0 1 1 2 3 5 7 9 15 16 17 19 20 21 22 28 b 32 1 0 e # 14569 assign c a 32 0 1 0 2 6 7 10 17 23 25 28 29 31 b 32 0 1 0 2 6 7 10 17 23 25 28 29 31 # 14570 assign c a 32 0 1 0 2 6 7 10 17 23 25 28 29 31 b 32 1 0 f # 14571 assign c a 32 0 1 3 4 7 11 12 13 17 19 20 21 22 24 26 27 28 30 b 32 0 1 3 4 7 11 12 13 17 19 20 21 22 24 26 27 28 30 # 14572 assign c a 32 0 1 3 4 7 11 12 13 17 19 20 21 22 24 26 27 28 30 b 32 1 0 0 1 2 7 8 9 10 11 12 16 17 19 20 29 30 # 14573 assign c a 32 0 1 e b 32 0 1 e # 14574 assign c a 32 0 1 e b 32 1 1 e # 14575 assign c a 32 0 1 e b 32 0 1 e # 14576 assign c a 32 0 1 e b 32 1 1 f # 14577 assign c a 32 0 1 e b 32 0 1 e # 14578 assign c a 32 0 1 e b 32 1 1 0 1 2 6 9 11 12 15 18 19 20 24 25 26 28 31 # 14579 assign c a 32 0 1 f b 32 0 1 f # 14580 assign c a 32 0 1 f b 32 1 1 e # 14581 assign c a 32 0 1 f b 32 0 1 f # 14582 assign c a 32 0 1 f b 32 1 1 f # 14583 assign c a 32 0 1 f b 32 0 1 f # 14584 assign c a 32 0 1 f b 32 1 1 2 5 6 7 8 9 10 11 13 14 15 17 18 23 24 27 28 29 31 # 14585 assign c a 32 0 1 0 9 10 11 12 13 18 19 22 25 28 29 31 b 32 0 1 0 9 10 11 12 13 18 19 22 25 28 29 31 # 14586 assign c a 32 0 1 0 9 10 11 12 13 18 19 22 25 28 29 31 b 32 1 1 e # 14587 assign c a 32 0 1 1 3 4 6 9 10 12 14 16 17 18 20 21 22 24 25 26 28 29 31 b 32 0 1 1 3 4 6 9 10 12 14 16 17 18 20 21 22 24 25 26 28 29 31 # 14588 assign c a 32 0 1 1 3 4 6 9 10 12 14 16 17 18 20 21 22 24 25 26 28 29 31 b 32 1 1 f # 14589 assign c a 32 0 1 0 2 3 4 5 6 8 9 10 13 14 16 17 19 25 26 27 28 29 30 31 b 32 0 1 0 2 3 4 5 6 8 9 10 13 14 16 17 19 25 26 27 28 29 30 31 # 14590 assign c a 32 0 1 0 2 3 4 5 6 8 9 10 13 14 16 17 19 25 26 27 28 29 30 31 b 32 1 1 1 6 9 10 11 12 15 17 19 20 21 22 24 25 27 28 # 14591 assign c a 32 1 0 e b 32 1 0 e # 14592 assign c a 32 1 0 e b 32 0 0 e # 14593 assign c a 32 1 0 e b 32 1 0 e # 14594 assign c a 32 1 0 e b 32 0 0 f # 14595 assign c a 32 1 0 e b 32 1 0 e # 14596 assign c a 32 1 0 e b 32 0 0 0 1 2 5 6 7 8 10 11 12 16 17 18 19 20 21 24 28 29 30 31 # 14597 assign c a 32 1 0 f b 32 1 0 f # 14598 assign c a 32 1 0 f b 32 0 0 e # 14599 assign c a 32 1 0 f b 32 1 0 f # 14600 assign c a 32 1 0 f b 32 0 0 f # 14601 assign c a 32 1 0 f b 32 1 0 f # 14602 assign c a 32 1 0 f b 32 0 0 0 5 7 10 14 17 19 20 21 25 26 27 29 30 # 14603 assign c a 32 1 0 1 4 5 8 10 13 14 15 18 22 24 25 30 31 b 32 1 0 1 4 5 8 10 13 14 15 18 22 24 25 30 31 # 14604 assign c a 32 1 0 1 4 5 8 10 13 14 15 18 22 24 25 30 31 b 32 0 0 e # 14605 assign c a 32 1 0 4 5 6 7 8 9 15 16 17 21 22 24 26 30 31 b 32 1 0 4 5 6 7 8 9 15 16 17 21 22 24 26 30 31 # 14606 assign c a 32 1 0 4 5 6 7 8 9 15 16 17 21 22 24 26 30 31 b 32 0 0 f # 14607 assign c a 32 1 0 0 2 3 4 5 6 7 11 12 13 14 15 16 18 19 21 23 24 25 b 32 1 0 0 2 3 4 5 6 7 11 12 13 14 15 16 18 19 21 23 24 25 # 14608 assign c a 32 1 0 0 2 3 4 5 6 7 11 12 13 14 15 16 18 19 21 23 24 25 b 32 0 0 2 4 5 8 9 11 12 16 19 21 22 24 26 29 31 # 14609 assign c a 32 1 0 e b 32 1 0 e # 14610 assign c a 32 1 0 e b 32 0 1 e # 14611 assign c a 32 1 0 e b 32 1 0 e # 14612 assign c a 32 1 0 e b 32 0 1 f # 14613 assign c a 32 1 0 e b 32 1 0 e # 14614 assign c a 32 1 0 e b 32 0 1 5 6 8 10 11 12 16 17 24 29 # 14615 assign c a 32 1 0 f b 32 1 0 f # 14616 assign c a 32 1 0 f b 32 0 1 e # 14617 assign c a 32 1 0 f b 32 1 0 f # 14618 assign c a 32 1 0 f b 32 0 1 f # 14619 assign c a 32 1 0 f b 32 1 0 f # 14620 assign c a 32 1 0 f b 32 0 1 1 2 3 4 6 7 8 9 13 14 18 19 20 23 25 26 27 28 # 14621 assign c a 32 1 0 0 1 2 3 5 8 9 10 12 13 14 17 20 22 25 27 b 32 1 0 0 1 2 3 5 8 9 10 12 13 14 17 20 22 25 27 # 14622 assign c a 32 1 0 0 1 2 3 5 8 9 10 12 13 14 17 20 22 25 27 b 32 0 1 e # 14623 assign c a 32 1 0 2 3 9 10 12 13 15 17 22 28 29 30 b 32 1 0 2 3 9 10 12 13 15 17 22 28 29 30 # 14624 assign c a 32 1 0 2 3 9 10 12 13 15 17 22 28 29 30 b 32 0 1 f # 14625 assign c a 32 1 0 0 1 7 10 12 18 20 21 22 23 27 b 32 1 0 0 1 7 10 12 18 20 21 22 23 27 # 14626 assign c a 32 1 0 0 1 7 10 12 18 20 21 22 23 27 b 32 0 1 0 4 5 6 9 10 13 14 15 17 20 23 24 25 26 27 28 31 # 14627 assign c a 32 1 0 e b 32 1 0 e # 14628 assign c a 32 1 0 e b 32 1 0 e # 14629 assign c a 32 1 0 e b 32 1 0 e # 14630 assign c a 32 1 0 e b 32 1 0 f # 14631 assign c a 32 1 0 e b 32 1 0 e # 14632 assign c a 32 1 0 e b 32 1 0 0 1 3 4 7 9 11 12 13 16 17 18 20 21 23 24 26 27 28 29 30 # 14633 assign c a 32 1 0 f b 32 1 0 f # 14634 assign c a 32 1 0 f b 32 1 0 e # 14635 assign c a 32 1 0 f b 32 1 0 f # 14636 assign c a 32 1 0 f b 32 1 0 f # 14637 assign c a 32 1 0 f b 32 1 0 f # 14638 assign c a 32 1 0 f b 32 1 0 0 1 9 12 13 14 17 18 20 24 25 27 28 29 31 # 14639 assign c a 32 1 0 0 4 5 6 9 10 12 13 14 16 17 18 21 22 24 26 27 30 b 32 1 0 0 4 5 6 9 10 12 13 14 16 17 18 21 22 24 26 27 30 # 14640 assign c a 32 1 0 0 4 5 6 9 10 12 13 14 16 17 18 21 22 24 26 27 30 b 32 1 0 e # 14641 assign c a 32 1 0 0 1 3 4 11 15 16 17 20 23 24 26 27 28 29 b 32 1 0 0 1 3 4 11 15 16 17 20 23 24 26 27 28 29 # 14642 assign c a 32 1 0 0 1 3 4 11 15 16 17 20 23 24 26 27 28 29 b 32 1 0 f # 14643 assign c a 32 1 0 0 1 4 6 8 11 14 18 20 23 24 26 29 30 31 b 32 1 0 0 1 4 6 8 11 14 18 20 23 24 26 29 30 31 # 14644 assign c a 32 1 0 0 1 4 6 8 11 14 18 20 23 24 26 29 30 31 b 32 1 0 0 3 4 6 11 12 16 18 19 22 24 26 27 29 30 # 14645 assign c a 32 1 0 e b 32 1 0 e # 14646 assign c a 32 1 0 e b 32 1 1 e # 14647 assign c a 32 1 0 e b 32 1 0 e # 14648 assign c a 32 1 0 e b 32 1 1 f # 14649 assign c a 32 1 0 e b 32 1 0 e # 14650 assign c a 32 1 0 e b 32 1 1 0 2 3 4 5 9 11 13 16 17 21 22 23 26 27 29 # 14651 assign c a 32 1 0 f b 32 1 0 f # 14652 assign c a 32 1 0 f b 32 1 1 e # 14653 assign c a 32 1 0 f b 32 1 0 f # 14654 assign c a 32 1 0 f b 32 1 1 f # 14655 assign c a 32 1 0 f b 32 1 0 f # 14656 assign c a 32 1 0 f b 32 1 1 2 8 9 13 16 17 18 19 20 21 22 25 28 30 # 14657 assign c a 32 1 0 0 1 2 3 4 7 8 9 12 13 14 17 20 23 25 30 31 b 32 1 0 0 1 2 3 4 7 8 9 12 13 14 17 20 23 25 30 31 # 14658 assign c a 32 1 0 0 1 2 3 4 7 8 9 12 13 14 17 20 23 25 30 31 b 32 1 1 e # 14659 assign c a 32 1 0 0 1 2 3 4 6 7 12 14 18 20 24 25 26 28 29 31 b 32 1 0 0 1 2 3 4 6 7 12 14 18 20 24 25 26 28 29 31 # 14660 assign c a 32 1 0 0 1 2 3 4 6 7 12 14 18 20 24 25 26 28 29 31 b 32 1 1 f # 14661 assign c a 32 1 0 2 4 5 9 14 15 20 23 26 28 b 32 1 0 2 4 5 9 14 15 20 23 26 28 # 14662 assign c a 32 1 0 2 4 5 9 14 15 20 23 26 28 b 32 1 1 2 9 10 11 14 15 16 18 19 20 23 24 27 28 # 14663 assign c a 32 1 1 e b 32 1 1 e # 14664 assign c a 32 1 1 e b 32 0 0 e # 14665 assign c a 32 1 1 e b 32 1 1 e # 14666 assign c a 32 1 1 e b 32 0 0 f # 14667 assign c a 32 1 1 e b 32 1 1 e # 14668 assign c a 32 1 1 e b 32 0 0 0 3 4 5 8 12 14 15 17 21 26 28 31 # 14669 assign c a 32 1 1 f b 32 1 1 f # 14670 assign c a 32 1 1 f b 32 0 0 e # 14671 assign c a 32 1 1 f b 32 1 1 f # 14672 assign c a 32 1 1 f b 32 0 0 f # 14673 assign c a 32 1 1 f b 32 1 1 f # 14674 assign c a 32 1 1 f b 32 0 0 1 2 4 7 9 12 14 18 19 21 22 23 25 29 31 # 14675 assign c a 32 1 1 0 1 2 3 6 7 9 10 13 14 19 22 23 28 29 31 b 32 1 1 0 1 2 3 6 7 9 10 13 14 19 22 23 28 29 31 # 14676 assign c a 32 1 1 0 1 2 3 6 7 9 10 13 14 19 22 23 28 29 31 b 32 0 0 e # 14677 assign c a 32 1 1 0 3 4 6 7 9 12 13 14 19 22 23 31 b 32 1 1 0 3 4 6 7 9 12 13 14 19 22 23 31 # 14678 assign c a 32 1 1 0 3 4 6 7 9 12 13 14 19 22 23 31 b 32 0 0 f # 14679 assign c a 32 1 1 0 1 2 4 5 9 10 12 13 16 17 20 24 26 27 28 30 31 b 32 1 1 0 1 2 4 5 9 10 12 13 16 17 20 24 26 27 28 30 31 # 14680 assign c a 32 1 1 0 1 2 4 5 9 10 12 13 16 17 20 24 26 27 28 30 31 b 32 0 0 0 1 3 4 5 9 12 13 15 16 17 19 20 23 24 26 27 29 30 # 14681 assign c a 32 1 1 e b 32 1 1 e # 14682 assign c a 32 1 1 e b 32 0 1 e # 14683 assign c a 32 1 1 e b 32 1 1 e # 14684 assign c a 32 1 1 e b 32 0 1 f # 14685 assign c a 32 1 1 e b 32 1 1 e # 14686 assign c a 32 1 1 e b 32 0 1 0 1 4 5 6 8 13 15 16 18 19 20 21 23 26 27 28 29 31 # 14687 assign c a 32 1 1 f b 32 1 1 f # 14688 assign c a 32 1 1 f b 32 0 1 e # 14689 assign c a 32 1 1 f b 32 1 1 f # 14690 assign c a 32 1 1 f b 32 0 1 f # 14691 assign c a 32 1 1 f b 32 1 1 f # 14692 assign c a 32 1 1 f b 32 0 1 0 1 5 6 10 13 15 18 31 # 14693 assign c a 32 1 1 3 6 7 9 11 12 13 14 16 18 20 22 24 25 26 27 29 30 31 b 32 1 1 3 6 7 9 11 12 13 14 16 18 20 22 24 25 26 27 29 30 31 # 14694 assign c a 32 1 1 3 6 7 9 11 12 13 14 16 18 20 22 24 25 26 27 29 30 31 b 32 0 1 e # 14695 assign c a 32 1 1 3 4 6 9 10 11 12 13 15 17 18 19 21 23 24 25 26 28 29 30 b 32 1 1 3 4 6 9 10 11 12 13 15 17 18 19 21 23 24 25 26 28 29 30 # 14696 assign c a 32 1 1 3 4 6 9 10 11 12 13 15 17 18 19 21 23 24 25 26 28 29 30 b 32 0 1 f # 14697 assign c a 32 1 1 4 11 14 17 19 21 22 24 25 27 28 b 32 1 1 4 11 14 17 19 21 22 24 25 27 28 # 14698 assign c a 32 1 1 4 11 14 17 19 21 22 24 25 27 28 b 32 0 1 0 1 3 4 5 11 12 13 16 17 21 24 25 26 30 # 14699 assign c a 32 1 1 e b 32 1 1 e # 14700 assign c a 32 1 1 e b 32 1 0 e # 14701 assign c a 32 1 1 e b 32 1 1 e # 14702 assign c a 32 1 1 e b 32 1 0 f # 14703 assign c a 32 1 1 e b 32 1 1 e # 14704 assign c a 32 1 1 e b 32 1 0 0 3 5 7 13 14 17 19 20 21 23 24 29 30 # 14705 assign c a 32 1 1 f b 32 1 1 f # 14706 assign c a 32 1 1 f b 32 1 0 e # 14707 assign c a 32 1 1 f b 32 1 1 f # 14708 assign c a 32 1 1 f b 32 1 0 f # 14709 assign c a 32 1 1 f b 32 1 1 f # 14710 assign c a 32 1 1 f b 32 1 0 5 9 10 11 14 15 18 26 27 29 31 # 14711 assign c a 32 1 1 1 3 4 7 9 10 11 13 14 15 17 19 20 21 27 29 31 b 32 1 1 1 3 4 7 9 10 11 13 14 15 17 19 20 21 27 29 31 # 14712 assign c a 32 1 1 1 3 4 7 9 10 11 13 14 15 17 19 20 21 27 29 31 b 32 1 0 e # 14713 assign c a 32 1 1 0 1 3 5 6 8 13 16 17 19 23 24 25 27 28 29 30 31 b 32 1 1 0 1 3 5 6 8 13 16 17 19 23 24 25 27 28 29 30 31 # 14714 assign c a 32 1 1 0 1 3 5 6 8 13 16 17 19 23 24 25 27 28 29 30 31 b 32 1 0 f # 14715 assign c a 32 1 1 0 3 4 7 8 9 10 11 12 16 17 23 25 26 27 28 29 30 b 32 1 1 0 3 4 7 8 9 10 11 12 16 17 23 25 26 27 28 29 30 # 14716 assign c a 32 1 1 0 3 4 7 8 9 10 11 12 16 17 23 25 26 27 28 29 30 b 32 1 0 0 3 5 6 8 9 12 13 14 15 19 20 21 22 23 25 26 29 30 # 14717 assign c a 32 1 1 e b 32 1 1 e # 14718 assign c a 32 1 1 e b 32 1 1 e # 14719 assign c a 32 1 1 e b 32 1 1 e # 14720 assign c a 32 1 1 e b 32 1 1 f # 14721 assign c a 32 1 1 e b 32 1 1 e # 14722 assign c a 32 1 1 e b 32 1 1 0 6 7 8 9 11 12 14 16 18 21 23 26 27 29 # 14723 assign c a 32 1 1 f b 32 1 1 f # 14724 assign c a 32 1 1 f b 32 1 1 e # 14725 assign c a 32 1 1 f b 32 1 1 f # 14726 assign c a 32 1 1 f b 32 1 1 f # 14727 assign c a 32 1 1 f b 32 1 1 f # 14728 assign c a 32 1 1 f b 32 1 1 0 1 2 9 15 16 19 21 22 23 25 26 27 30 # 14729 assign c a 32 1 1 1 2 5 6 7 8 9 10 11 14 15 16 18 21 22 23 25 26 27 28 29 b 32 1 1 1 2 5 6 7 8 9 10 11 14 15 16 18 21 22 23 25 26 27 28 29 # 14730 assign c a 32 1 1 1 2 5 6 7 8 9 10 11 14 15 16 18 21 22 23 25 26 27 28 29 b 32 1 1 e # 14731 assign c a 32 1 1 2 3 7 10 11 12 13 14 15 17 19 22 23 24 25 26 27 31 b 32 1 1 2 3 7 10 11 12 13 14 15 17 19 22 23 24 25 26 27 31 # 14732 assign c a 32 1 1 2 3 7 10 11 12 13 14 15 17 19 22 23 24 25 26 27 31 b 32 1 1 f # 14733 assign c a 32 1 1 0 1 2 3 6 7 8 9 10 11 12 14 17 19 22 25 27 30 31 b 32 1 1 0 1 2 3 6 7 8 9 10 11 12 14 17 19 22 25 27 30 31 # 14734 assign c a 32 1 1 0 1 2 3 6 7 8 9 10 11 12 14 17 19 22 25 27 30 31 b 32 1 1 2 3 4 5 6 8 9 11 13 16 17 21 23 24 25 27 30 31 # 14735 assign c a 33 0 0 e b 33 0 0 e # 14736 assign c a 33 0 0 e b 33 0 0 e # 14737 assign c a 33 0 0 e b 33 0 0 e # 14738 assign c a 33 0 0 e b 33 0 0 f # 14739 assign c a 33 0 0 e b 33 0 0 e # 14740 assign c a 33 0 0 e b 33 0 0 0 1 2 4 5 6 7 10 11 19 21 22 24 27 30 # 14741 assign c a 33 0 0 f b 33 0 0 f # 14742 assign c a 33 0 0 f b 33 0 0 e # 14743 assign c a 33 0 0 f b 33 0 0 f # 14744 assign c a 33 0 0 f b 33 0 0 f # 14745 assign c a 33 0 0 f b 33 0 0 f # 14746 assign c a 33 0 0 f b 33 0 0 1 4 6 7 11 12 16 18 19 20 21 22 25 26 29 30 31 32 # 14747 assign c a 33 0 0 0 4 8 15 18 20 21 23 24 25 27 28 31 b 33 0 0 0 4 8 15 18 20 21 23 24 25 27 28 31 # 14748 assign c a 33 0 0 0 4 8 15 18 20 21 23 24 25 27 28 31 b 33 0 0 e # 14749 assign c a 33 0 0 0 1 5 7 11 12 13 14 15 16 18 19 20 21 23 24 28 30 31 b 33 0 0 0 1 5 7 11 12 13 14 15 16 18 19 20 21 23 24 28 30 31 # 14750 assign c a 33 0 0 0 1 5 7 11 12 13 14 15 16 18 19 20 21 23 24 28 30 31 b 33 0 0 f # 14751 assign c a 33 0 0 2 7 8 10 11 13 16 20 21 23 25 26 27 30 31 32 b 33 0 0 2 7 8 10 11 13 16 20 21 23 25 26 27 30 31 32 # 14752 assign c a 33 0 0 2 7 8 10 11 13 16 20 21 23 25 26 27 30 31 32 b 33 0 0 0 1 6 7 8 9 10 11 16 17 19 24 25 26 28 31 # 14753 assign c a 33 0 0 e b 33 0 0 e # 14754 assign c a 33 0 0 e b 33 0 1 e # 14755 assign c a 33 0 0 e b 33 0 0 e # 14756 assign c a 33 0 0 e b 33 0 1 f # 14757 assign c a 33 0 0 e b 33 0 0 e # 14758 assign c a 33 0 0 e b 33 0 1 1 2 3 4 5 6 7 8 10 12 14 15 16 17 19 20 21 22 23 26 27 28 29 32 # 14759 assign c a 33 0 0 f b 33 0 0 f # 14760 assign c a 33 0 0 f b 33 0 1 e # 14761 assign c a 33 0 0 f b 33 0 0 f # 14762 assign c a 33 0 0 f b 33 0 1 f # 14763 assign c a 33 0 0 f b 33 0 0 f # 14764 assign c a 33 0 0 f b 33 0 1 1 2 4 6 11 14 15 16 17 18 20 21 22 24 25 26 27 31 # 14765 assign c a 33 0 0 2 3 10 11 12 13 15 16 17 19 20 21 22 23 24 27 28 32 b 33 0 0 2 3 10 11 12 13 15 16 17 19 20 21 22 23 24 27 28 32 # 14766 assign c a 33 0 0 2 3 10 11 12 13 15 16 17 19 20 21 22 23 24 27 28 32 b 33 0 1 e # 14767 assign c a 33 0 0 1 2 6 9 11 14 16 23 24 26 29 30 31 32 b 33 0 0 1 2 6 9 11 14 16 23 24 26 29 30 31 32 # 14768 assign c a 33 0 0 1 2 6 9 11 14 16 23 24 26 29 30 31 32 b 33 0 1 f # 14769 assign c a 33 0 0 0 5 6 7 9 15 16 17 19 20 21 22 24 25 26 27 28 30 31 32 b 33 0 0 0 5 6 7 9 15 16 17 19 20 21 22 24 25 26 27 28 30 31 32 # 14770 assign c a 33 0 0 0 5 6 7 9 15 16 17 19 20 21 22 24 25 26 27 28 30 31 32 b 33 0 1 0 2 3 5 6 7 11 12 16 19 21 27 28 30 31 32 # 14771 assign c a 33 0 0 e b 33 0 0 e # 14772 assign c a 33 0 0 e b 33 1 0 e # 14773 assign c a 33 0 0 e b 33 0 0 e # 14774 assign c a 33 0 0 e b 33 1 0 f # 14775 assign c a 33 0 0 e b 33 0 0 e # 14776 assign c a 33 0 0 e b 33 1 0 0 1 2 3 4 5 6 9 10 11 14 15 16 18 19 20 27 28 31 32 # 14777 assign c a 33 0 0 f b 33 0 0 f # 14778 assign c a 33 0 0 f b 33 1 0 e # 14779 assign c a 33 0 0 f b 33 0 0 f # 14780 assign c a 33 0 0 f b 33 1 0 f # 14781 assign c a 33 0 0 f b 33 0 0 f # 14782 assign c a 33 0 0 f b 33 1 0 2 5 6 8 9 12 22 23 24 25 26 27 30 31 32 # 14783 assign c a 33 0 0 0 3 5 6 10 12 14 15 19 22 23 24 25 28 29 b 33 0 0 0 3 5 6 10 12 14 15 19 22 23 24 25 28 29 # 14784 assign c a 33 0 0 0 3 5 6 10 12 14 15 19 22 23 24 25 28 29 b 33 1 0 e # 14785 assign c a 33 0 0 0 3 4 5 6 8 10 11 13 18 19 21 22 23 24 26 27 28 31 b 33 0 0 0 3 4 5 6 8 10 11 13 18 19 21 22 23 24 26 27 28 31 # 14786 assign c a 33 0 0 0 3 4 5 6 8 10 11 13 18 19 21 22 23 24 26 27 28 31 b 33 1 0 f # 14787 assign c a 33 0 0 0 5 7 8 11 12 13 17 20 23 26 30 32 b 33 0 0 0 5 7 8 11 12 13 17 20 23 26 30 32 # 14788 assign c a 33 0 0 0 5 7 8 11 12 13 17 20 23 26 30 32 b 33 1 0 1 4 6 8 9 10 12 14 15 16 18 21 23 25 27 28 30 # 14789 assign c a 33 0 0 e b 33 0 0 e # 14790 assign c a 33 0 0 e b 33 1 1 e # 14791 assign c a 33 0 0 e b 33 0 0 e # 14792 assign c a 33 0 0 e b 33 1 1 f # 14793 assign c a 33 0 0 e b 33 0 0 e # 14794 assign c a 33 0 0 e b 33 1 1 1 3 4 6 11 17 18 19 21 24 29 30 31 # 14795 assign c a 33 0 0 f b 33 0 0 f # 14796 assign c a 33 0 0 f b 33 1 1 e # 14797 assign c a 33 0 0 f b 33 0 0 f # 14798 assign c a 33 0 0 f b 33 1 1 f # 14799 assign c a 33 0 0 f b 33 0 0 f # 14800 assign c a 33 0 0 f b 33 1 1 0 1 4 5 6 7 9 11 13 14 15 16 17 23 24 25 28 30 31 # 14801 assign c a 33 0 0 3 7 9 12 14 15 19 20 22 23 24 26 30 32 b 33 0 0 3 7 9 12 14 15 19 20 22 23 24 26 30 32 # 14802 assign c a 33 0 0 3 7 9 12 14 15 19 20 22 23 24 26 30 32 b 33 1 1 e # 14803 assign c a 33 0 0 2 4 5 6 7 10 13 14 15 17 18 19 20 21 22 23 27 29 30 b 33 0 0 2 4 5 6 7 10 13 14 15 17 18 19 20 21 22 23 27 29 30 # 14804 assign c a 33 0 0 2 4 5 6 7 10 13 14 15 17 18 19 20 21 22 23 27 29 30 b 33 1 1 f # 14805 assign c a 33 0 0 0 1 2 3 4 5 6 16 19 20 28 29 31 32 b 33 0 0 0 1 2 3 4 5 6 16 19 20 28 29 31 32 # 14806 assign c a 33 0 0 0 1 2 3 4 5 6 16 19 20 28 29 31 32 b 33 1 1 2 6 7 8 9 11 13 14 15 17 18 20 21 22 28 29 # 14807 assign c a 33 0 1 e b 33 0 1 e # 14808 assign c a 33 0 1 e b 33 0 0 e # 14809 assign c a 33 0 1 e b 33 0 1 e # 14810 assign c a 33 0 1 e b 33 0 0 f # 14811 assign c a 33 0 1 e b 33 0 1 e # 14812 assign c a 33 0 1 e b 33 0 0 2 3 5 10 14 22 24 27 28 32 # 14813 assign c a 33 0 1 f b 33 0 1 f # 14814 assign c a 33 0 1 f b 33 0 0 e # 14815 assign c a 33 0 1 f b 33 0 1 f # 14816 assign c a 33 0 1 f b 33 0 0 f # 14817 assign c a 33 0 1 f b 33 0 1 f # 14818 assign c a 33 0 1 f b 33 0 0 1 6 7 11 12 13 14 16 20 21 25 26 27 30 # 14819 assign c a 33 0 1 0 1 2 5 6 7 10 11 13 14 15 18 20 21 22 23 24 26 b 33 0 1 0 1 2 5 6 7 10 11 13 14 15 18 20 21 22 23 24 26 # 14820 assign c a 33 0 1 0 1 2 5 6 7 10 11 13 14 15 18 20 21 22 23 24 26 b 33 0 0 e # 14821 assign c a 33 0 1 1 2 3 7 14 15 16 19 20 22 26 27 28 29 30 31 32 b 33 0 1 1 2 3 7 14 15 16 19 20 22 26 27 28 29 30 31 32 # 14822 assign c a 33 0 1 1 2 3 7 14 15 16 19 20 22 26 27 28 29 30 31 32 b 33 0 0 f # 14823 assign c a 33 0 1 0 1 8 9 10 11 14 15 16 17 18 20 24 26 27 29 30 31 32 b 33 0 1 0 1 8 9 10 11 14 15 16 17 18 20 24 26 27 29 30 31 32 # 14824 assign c a 33 0 1 0 1 8 9 10 11 14 15 16 17 18 20 24 26 27 29 30 31 32 b 33 0 0 0 4 5 6 9 10 11 12 13 14 15 18 19 20 22 23 25 # 14825 assign c a 33 0 1 e b 33 0 1 e # 14826 assign c a 33 0 1 e b 33 0 1 e # 14827 assign c a 33 0 1 e b 33 0 1 e # 14828 assign c a 33 0 1 e b 33 0 1 f # 14829 assign c a 33 0 1 e b 33 0 1 e # 14830 assign c a 33 0 1 e b 33 0 1 1 4 5 6 7 8 9 10 12 13 14 15 16 17 18 19 21 24 26 28 30 32 # 14831 assign c a 33 0 1 f b 33 0 1 f # 14832 assign c a 33 0 1 f b 33 0 1 e # 14833 assign c a 33 0 1 f b 33 0 1 f # 14834 assign c a 33 0 1 f b 33 0 1 f # 14835 assign c a 33 0 1 f b 33 0 1 f # 14836 assign c a 33 0 1 f b 33 0 1 0 2 3 7 9 10 11 12 13 14 15 17 20 32 # 14837 assign c a 33 0 1 1 3 6 8 9 11 12 19 20 21 25 27 29 30 32 b 33 0 1 1 3 6 8 9 11 12 19 20 21 25 27 29 30 32 # 14838 assign c a 33 0 1 1 3 6 8 9 11 12 19 20 21 25 27 29 30 32 b 33 0 1 e # 14839 assign c a 33 0 1 0 5 9 10 14 15 16 17 19 21 23 25 27 28 29 30 31 32 b 33 0 1 0 5 9 10 14 15 16 17 19 21 23 25 27 28 29 30 31 32 # 14840 assign c a 33 0 1 0 5 9 10 14 15 16 17 19 21 23 25 27 28 29 30 31 32 b 33 0 1 f # 14841 assign c a 33 0 1 0 1 3 6 11 14 16 17 18 21 22 24 25 26 27 29 30 32 b 33 0 1 0 1 3 6 11 14 16 17 18 21 22 24 25 26 27 29 30 32 # 14842 assign c a 33 0 1 0 1 3 6 11 14 16 17 18 21 22 24 25 26 27 29 30 32 b 33 0 1 0 2 6 7 8 9 11 12 13 14 15 20 23 25 28 29 30 31 32 # 14843 assign c a 33 0 1 e b 33 0 1 e # 14844 assign c a 33 0 1 e b 33 1 0 e # 14845 assign c a 33 0 1 e b 33 0 1 e # 14846 assign c a 33 0 1 e b 33 1 0 f # 14847 assign c a 33 0 1 e b 33 0 1 e # 14848 assign c a 33 0 1 e b 33 1 0 0 5 6 9 11 12 15 17 18 19 20 21 23 24 25 26 27 28 30 31 32 # 14849 assign c a 33 0 1 f b 33 0 1 f # 14850 assign c a 33 0 1 f b 33 1 0 e # 14851 assign c a 33 0 1 f b 33 0 1 f # 14852 assign c a 33 0 1 f b 33 1 0 f # 14853 assign c a 33 0 1 f b 33 0 1 f # 14854 assign c a 33 0 1 f b 33 1 0 0 1 2 3 4 7 10 11 12 13 16 20 27 28 29 31 32 # 14855 assign c a 33 0 1 1 2 3 5 8 9 13 17 19 21 22 24 25 27 30 31 b 33 0 1 1 2 3 5 8 9 13 17 19 21 22 24 25 27 30 31 # 14856 assign c a 33 0 1 1 2 3 5 8 9 13 17 19 21 22 24 25 27 30 31 b 33 1 0 e # 14857 assign c a 33 0 1 0 2 3 4 6 7 10 16 21 23 27 29 b 33 0 1 0 2 3 4 6 7 10 16 21 23 27 29 # 14858 assign c a 33 0 1 0 2 3 4 6 7 10 16 21 23 27 29 b 33 1 0 f # 14859 assign c a 33 0 1 5 6 8 10 12 15 16 17 19 23 28 29 30 31 b 33 0 1 5 6 8 10 12 15 16 17 19 23 28 29 30 31 # 14860 assign c a 33 0 1 5 6 8 10 12 15 16 17 19 23 28 29 30 31 b 33 1 0 5 7 8 9 12 14 15 16 17 18 19 20 21 24 25 26 27 28 29 30 # 14861 assign c a 33 0 1 e b 33 0 1 e # 14862 assign c a 33 0 1 e b 33 1 1 e # 14863 assign c a 33 0 1 e b 33 0 1 e # 14864 assign c a 33 0 1 e b 33 1 1 f # 14865 assign c a 33 0 1 e b 33 0 1 e # 14866 assign c a 33 0 1 e b 33 1 1 2 4 5 9 11 12 19 20 21 22 23 24 25 26 27 28 32 # 14867 assign c a 33 0 1 f b 33 0 1 f # 14868 assign c a 33 0 1 f b 33 1 1 e # 14869 assign c a 33 0 1 f b 33 0 1 f # 14870 assign c a 33 0 1 f b 33 1 1 f # 14871 assign c a 33 0 1 f b 33 0 1 f # 14872 assign c a 33 0 1 f b 33 1 1 1 3 5 7 9 10 11 14 15 16 17 18 20 21 23 24 25 29 30 # 14873 assign c a 33 0 1 2 4 5 6 7 9 11 12 15 17 18 24 27 29 31 b 33 0 1 2 4 5 6 7 9 11 12 15 17 18 24 27 29 31 # 14874 assign c a 33 0 1 2 4 5 6 7 9 11 12 15 17 18 24 27 29 31 b 33 1 1 e # 14875 assign c a 33 0 1 0 3 5 9 10 13 14 17 18 19 21 22 23 25 28 30 31 32 b 33 0 1 0 3 5 9 10 13 14 17 18 19 21 22 23 25 28 30 31 32 # 14876 assign c a 33 0 1 0 3 5 9 10 13 14 17 18 19 21 22 23 25 28 30 31 32 b 33 1 1 f # 14877 assign c a 33 0 1 1 4 7 9 12 13 14 15 16 17 18 19 20 21 24 25 28 30 31 b 33 0 1 1 4 7 9 12 13 14 15 16 17 18 19 20 21 24 25 28 30 31 # 14878 assign c a 33 0 1 1 4 7 9 12 13 14 15 16 17 18 19 20 21 24 25 28 30 31 b 33 1 1 3 4 7 8 11 15 18 19 22 24 26 29 # 14879 assign c a 33 1 0 e b 33 1 0 e # 14880 assign c a 33 1 0 e b 33 0 0 e # 14881 assign c a 33 1 0 e b 33 1 0 e # 14882 assign c a 33 1 0 e b 33 0 0 f # 14883 assign c a 33 1 0 e b 33 1 0 e # 14884 assign c a 33 1 0 e b 33 0 0 0 2 3 5 6 7 12 14 16 17 18 20 21 22 23 24 27 28 29 32 # 14885 assign c a 33 1 0 f b 33 1 0 f # 14886 assign c a 33 1 0 f b 33 0 0 e # 14887 assign c a 33 1 0 f b 33 1 0 f # 14888 assign c a 33 1 0 f b 33 0 0 f # 14889 assign c a 33 1 0 f b 33 1 0 f # 14890 assign c a 33 1 0 f b 33 0 0 3 7 8 9 10 11 13 14 16 18 19 21 22 25 27 28 29 30 # 14891 assign c a 33 1 0 3 6 8 9 10 11 12 13 14 15 16 19 21 23 24 26 27 30 31 b 33 1 0 3 6 8 9 10 11 12 13 14 15 16 19 21 23 24 26 27 30 31 # 14892 assign c a 33 1 0 3 6 8 9 10 11 12 13 14 15 16 19 21 23 24 26 27 30 31 b 33 0 0 e # 14893 assign c a 33 1 0 1 2 3 6 8 9 10 11 13 14 15 17 19 22 25 26 28 30 b 33 1 0 1 2 3 6 8 9 10 11 13 14 15 17 19 22 25 26 28 30 # 14894 assign c a 33 1 0 1 2 3 6 8 9 10 11 13 14 15 17 19 22 25 26 28 30 b 33 0 0 f # 14895 assign c a 33 1 0 0 1 2 4 5 8 10 11 13 21 22 23 24 26 29 32 b 33 1 0 0 1 2 4 5 8 10 11 13 21 22 23 24 26 29 32 # 14896 assign c a 33 1 0 0 1 2 4 5 8 10 11 13 21 22 23 24 26 29 32 b 33 0 0 2 4 7 15 16 17 18 19 20 21 22 23 24 25 27 30 31 32 # 14897 assign c a 33 1 0 e b 33 1 0 e # 14898 assign c a 33 1 0 e b 33 0 1 e # 14899 assign c a 33 1 0 e b 33 1 0 e # 14900 assign c a 33 1 0 e b 33 0 1 f # 14901 assign c a 33 1 0 e b 33 1 0 e # 14902 assign c a 33 1 0 e b 33 0 1 1 2 3 5 6 8 10 12 13 15 16 19 24 26 28 # 14903 assign c a 33 1 0 f b 33 1 0 f # 14904 assign c a 33 1 0 f b 33 0 1 e # 14905 assign c a 33 1 0 f b 33 1 0 f # 14906 assign c a 33 1 0 f b 33 0 1 f # 14907 assign c a 33 1 0 f b 33 1 0 f # 14908 assign c a 33 1 0 f b 33 0 1 0 2 3 6 11 12 13 14 19 20 21 22 25 27 29 32 # 14909 assign c a 33 1 0 1 4 5 6 7 8 9 10 11 13 15 18 22 25 29 32 b 33 1 0 1 4 5 6 7 8 9 10 11 13 15 18 22 25 29 32 # 14910 assign c a 33 1 0 1 4 5 6 7 8 9 10 11 13 15 18 22 25 29 32 b 33 0 1 e # 14911 assign c a 33 1 0 1 4 10 12 13 14 16 17 20 21 22 25 26 27 30 31 b 33 1 0 1 4 10 12 13 14 16 17 20 21 22 25 26 27 30 31 # 14912 assign c a 33 1 0 1 4 10 12 13 14 16 17 20 21 22 25 26 27 30 31 b 33 0 1 f # 14913 assign c a 33 1 0 1 2 3 6 12 15 16 17 18 19 22 24 25 26 28 31 b 33 1 0 1 2 3 6 12 15 16 17 18 19 22 24 25 26 28 31 # 14914 assign c a 33 1 0 1 2 3 6 12 15 16 17 18 19 22 24 25 26 28 31 b 33 0 1 1 2 3 4 7 9 10 11 13 14 16 17 18 19 20 22 23 24 28 30 # 14915 assign c a 33 1 0 e b 33 1 0 e # 14916 assign c a 33 1 0 e b 33 1 0 e # 14917 assign c a 33 1 0 e b 33 1 0 e # 14918 assign c a 33 1 0 e b 33 1 0 f # 14919 assign c a 33 1 0 e b 33 1 0 e # 14920 assign c a 33 1 0 e b 33 1 0 0 2 3 4 5 7 8 11 14 17 18 20 21 23 25 26 27 28 29 30 31 # 14921 assign c a 33 1 0 f b 33 1 0 f # 14922 assign c a 33 1 0 f b 33 1 0 e # 14923 assign c a 33 1 0 f b 33 1 0 f # 14924 assign c a 33 1 0 f b 33 1 0 f # 14925 assign c a 33 1 0 f b 33 1 0 f # 14926 assign c a 33 1 0 f b 33 1 0 0 1 2 3 5 6 7 8 9 12 14 20 23 24 26 27 # 14927 assign c a 33 1 0 3 6 10 11 16 17 19 21 22 24 25 26 29 b 33 1 0 3 6 10 11 16 17 19 21 22 24 25 26 29 # 14928 assign c a 33 1 0 3 6 10 11 16 17 19 21 22 24 25 26 29 b 33 1 0 e # 14929 assign c a 33 1 0 0 5 6 7 8 9 13 14 15 16 17 19 20 21 22 23 25 29 30 b 33 1 0 0 5 6 7 8 9 13 14 15 16 17 19 20 21 22 23 25 29 30 # 14930 assign c a 33 1 0 0 5 6 7 8 9 13 14 15 16 17 19 20 21 22 23 25 29 30 b 33 1 0 f # 14931 assign c a 33 1 0 1 2 3 5 6 8 9 11 12 14 15 16 17 18 21 22 26 27 b 33 1 0 1 2 3 5 6 8 9 11 12 14 15 16 17 18 21 22 26 27 # 14932 assign c a 33 1 0 1 2 3 5 6 8 9 11 12 14 15 16 17 18 21 22 26 27 b 33 1 0 0 2 3 5 6 11 14 15 21 23 24 26 28 30 31 32 # 14933 assign c a 33 1 0 e b 33 1 0 e # 14934 assign c a 33 1 0 e b 33 1 1 e # 14935 assign c a 33 1 0 e b 33 1 0 e # 14936 assign c a 33 1 0 e b 33 1 1 f # 14937 assign c a 33 1 0 e b 33 1 0 e # 14938 assign c a 33 1 0 e b 33 1 1 6 7 8 9 10 11 12 13 15 20 21 24 25 28 29 # 14939 assign c a 33 1 0 f b 33 1 0 f # 14940 assign c a 33 1 0 f b 33 1 1 e # 14941 assign c a 33 1 0 f b 33 1 0 f # 14942 assign c a 33 1 0 f b 33 1 1 f # 14943 assign c a 33 1 0 f b 33 1 0 f # 14944 assign c a 33 1 0 f b 33 1 1 0 1 2 4 6 7 9 14 15 16 18 19 20 22 23 26 28 29 30 32 # 14945 assign c a 33 1 0 0 1 4 6 7 8 10 13 14 15 17 18 19 21 23 25 28 29 32 b 33 1 0 0 1 4 6 7 8 10 13 14 15 17 18 19 21 23 25 28 29 32 # 14946 assign c a 33 1 0 0 1 4 6 7 8 10 13 14 15 17 18 19 21 23 25 28 29 32 b 33 1 1 e # 14947 assign c a 33 1 0 0 1 3 6 7 9 10 11 12 13 15 21 22 26 b 33 1 0 0 1 3 6 7 9 10 11 12 13 15 21 22 26 # 14948 assign c a 33 1 0 0 1 3 6 7 9 10 11 12 13 15 21 22 26 b 33 1 1 f # 14949 assign c a 33 1 0 0 2 3 4 7 10 12 13 14 15 16 17 19 20 21 23 24 25 29 31 32 b 33 1 0 0 2 3 4 7 10 12 13 14 15 16 17 19 20 21 23 24 25 29 31 32 # 14950 assign c a 33 1 0 0 2 3 4 7 10 12 13 14 15 16 17 19 20 21 23 24 25 29 31 32 b 33 1 1 1 2 3 5 8 11 14 16 17 18 21 28 # 14951 assign c a 33 1 1 e b 33 1 1 e # 14952 assign c a 33 1 1 e b 33 0 0 e # 14953 assign c a 33 1 1 e b 33 1 1 e # 14954 assign c a 33 1 1 e b 33 0 0 f # 14955 assign c a 33 1 1 e b 33 1 1 e # 14956 assign c a 33 1 1 e b 33 0 0 1 2 7 9 10 11 12 17 18 21 22 23 25 26 27 29 32 # 14957 assign c a 33 1 1 f b 33 1 1 f # 14958 assign c a 33 1 1 f b 33 0 0 e # 14959 assign c a 33 1 1 f b 33 1 1 f # 14960 assign c a 33 1 1 f b 33 0 0 f # 14961 assign c a 33 1 1 f b 33 1 1 f # 14962 assign c a 33 1 1 f b 33 0 0 1 4 5 6 7 8 9 10 16 17 19 24 26 27 28 30 32 # 14963 assign c a 33 1 1 1 2 4 5 8 10 11 12 13 14 15 17 19 21 22 23 25 26 27 28 30 31 32 b 33 1 1 1 2 4 5 8 10 11 12 13 14 15 17 19 21 22 23 25 26 27 28 30 31 32 # 14964 assign c a 33 1 1 1 2 4 5 8 10 11 12 13 14 15 17 19 21 22 23 25 26 27 28 30 31 32 b 33 0 0 e # 14965 assign c a 33 1 1 0 2 3 7 8 10 11 13 16 18 19 20 21 23 24 25 28 32 b 33 1 1 0 2 3 7 8 10 11 13 16 18 19 20 21 23 24 25 28 32 # 14966 assign c a 33 1 1 0 2 3 7 8 10 11 13 16 18 19 20 21 23 24 25 28 32 b 33 0 0 f # 14967 assign c a 33 1 1 0 4 10 11 12 14 15 17 18 20 21 23 26 27 28 31 b 33 1 1 0 4 10 11 12 14 15 17 18 20 21 23 26 27 28 31 # 14968 assign c a 33 1 1 0 4 10 11 12 14 15 17 18 20 21 23 26 27 28 31 b 33 0 0 0 1 3 14 15 17 18 19 21 23 24 25 27 # 14969 assign c a 33 1 1 e b 33 1 1 e # 14970 assign c a 33 1 1 e b 33 0 1 e # 14971 assign c a 33 1 1 e b 33 1 1 e # 14972 assign c a 33 1 1 e b 33 0 1 f # 14973 assign c a 33 1 1 e b 33 1 1 e # 14974 assign c a 33 1 1 e b 33 0 1 0 5 7 9 10 12 13 14 15 16 17 18 19 20 21 22 23 25 29 30 31 32 # 14975 assign c a 33 1 1 f b 33 1 1 f # 14976 assign c a 33 1 1 f b 33 0 1 e # 14977 assign c a 33 1 1 f b 33 1 1 f # 14978 assign c a 33 1 1 f b 33 0 1 f # 14979 assign c a 33 1 1 f b 33 1 1 f # 14980 assign c a 33 1 1 f b 33 0 1 4 7 9 12 19 20 23 24 25 26 27 29 30 31 # 14981 assign c a 33 1 1 1 2 5 6 9 13 14 17 19 20 22 23 29 32 b 33 1 1 1 2 5 6 9 13 14 17 19 20 22 23 29 32 # 14982 assign c a 33 1 1 1 2 5 6 9 13 14 17 19 20 22 23 29 32 b 33 0 1 e # 14983 assign c a 33 1 1 1 4 5 7 9 10 11 12 16 17 20 25 29 31 32 b 33 1 1 1 4 5 7 9 10 11 12 16 17 20 25 29 31 32 # 14984 assign c a 33 1 1 1 4 5 7 9 10 11 12 16 17 20 25 29 31 32 b 33 0 1 f # 14985 assign c a 33 1 1 0 1 2 3 11 13 14 20 22 24 26 27 28 30 31 b 33 1 1 0 1 2 3 11 13 14 20 22 24 26 27 28 30 31 # 14986 assign c a 33 1 1 0 1 2 3 11 13 14 20 22 24 26 27 28 30 31 b 33 0 1 0 1 2 6 8 9 10 12 14 15 16 18 23 24 26 29 30 31 32 # 14987 assign c a 33 1 1 e b 33 1 1 e # 14988 assign c a 33 1 1 e b 33 1 0 e # 14989 assign c a 33 1 1 e b 33 1 1 e # 14990 assign c a 33 1 1 e b 33 1 0 f # 14991 assign c a 33 1 1 e b 33 1 1 e # 14992 assign c a 33 1 1 e b 33 1 0 0 2 4 7 9 11 14 15 17 18 21 25 26 28 29 30 31 32 # 14993 assign c a 33 1 1 f b 33 1 1 f # 14994 assign c a 33 1 1 f b 33 1 0 e # 14995 assign c a 33 1 1 f b 33 1 1 f # 14996 assign c a 33 1 1 f b 33 1 0 f # 14997 assign c a 33 1 1 f b 33 1 1 f # 14998 assign c a 33 1 1 f b 33 1 0 0 2 4 5 6 9 10 11 12 13 14 15 16 18 20 22 23 26 27 29 30 # 14999 assign c a 33 1 1 0 1 3 4 5 6 7 8 9 12 17 19 20 22 23 25 28 30 31 b 33 1 1 0 1 3 4 5 6 7 8 9 12 17 19 20 22 23 25 28 30 31 # 15000 assign c a 33 1 1 0 1 3 4 5 6 7 8 9 12 17 19 20 22 23 25 28 30 31 b 33 1 0 e # 15001 assign c a 33 1 1 0 1 2 3 4 5 9 14 15 16 18 19 21 24 30 b 33 1 1 0 1 2 3 4 5 9 14 15 16 18 19 21 24 30 # 15002 assign c a 33 1 1 0 1 2 3 4 5 9 14 15 16 18 19 21 24 30 b 33 1 0 f # 15003 assign c a 33 1 1 0 1 2 6 8 10 12 13 14 17 18 23 24 25 26 30 b 33 1 1 0 1 2 6 8 10 12 13 14 17 18 23 24 25 26 30 # 15004 assign c a 33 1 1 0 1 2 6 8 10 12 13 14 17 18 23 24 25 26 30 b 33 1 0 0 1 2 6 7 8 10 11 19 20 22 26 28 30 31 32 # 15005 assign c a 33 1 1 e b 33 1 1 e # 15006 assign c a 33 1 1 e b 33 1 1 e # 15007 assign c a 33 1 1 e b 33 1 1 e # 15008 assign c a 33 1 1 e b 33 1 1 f # 15009 assign c a 33 1 1 e b 33 1 1 e # 15010 assign c a 33 1 1 e b 33 1 1 1 3 4 6 8 12 13 18 20 22 27 28 29 30 32 # 15011 assign c a 33 1 1 f b 33 1 1 f # 15012 assign c a 33 1 1 f b 33 1 1 e # 15013 assign c a 33 1 1 f b 33 1 1 f # 15014 assign c a 33 1 1 f b 33 1 1 f # 15015 assign c a 33 1 1 f b 33 1 1 f # 15016 assign c a 33 1 1 f b 33 1 1 2 4 8 9 14 19 20 21 24 27 28 29 30 32 # 15017 assign c a 33 1 1 0 1 2 6 7 8 13 14 17 19 21 22 24 25 27 28 29 30 31 b 33 1 1 0 1 2 6 7 8 13 14 17 19 21 22 24 25 27 28 29 30 31 # 15018 assign c a 33 1 1 0 1 2 6 7 8 13 14 17 19 21 22 24 25 27 28 29 30 31 b 33 1 1 e # 15019 assign c a 33 1 1 0 2 5 6 7 8 10 11 12 14 15 16 17 18 19 20 22 23 24 26 27 29 31 b 33 1 1 0 2 5 6 7 8 10 11 12 14 15 16 17 18 19 20 22 23 24 26 27 29 31 # 15020 assign c a 33 1 1 0 2 5 6 7 8 10 11 12 14 15 16 17 18 19 20 22 23 24 26 27 29 31 b 33 1 1 f # 15021 assign c a 33 1 1 0 3 6 11 14 19 22 23 26 28 29 30 31 b 33 1 1 0 3 6 11 14 19 22 23 26 28 29 30 31 # 15022 assign c a 33 1 1 0 3 6 11 14 19 22 23 26 28 29 30 31 b 33 1 1 5 6 7 11 13 14 15 17 18 19 21 23 24 25 26 27 30 31 32 # 15023 assign c a 63 0 0 e b 63 0 0 e # 15024 assign c a 63 0 0 e b 63 0 0 e # 15025 assign c a 63 0 0 e b 63 0 0 e # 15026 assign c a 63 0 0 e b 63 0 0 f # 15027 assign c a 63 0 0 e b 63 0 0 e # 15028 assign c a 63 0 0 e b 63 0 0 4 5 6 9 10 11 12 17 18 21 22 23 24 25 28 34 37 38 39 41 42 45 46 47 48 49 50 52 53 56 57 58 60 61 62 # 15029 assign c a 63 0 0 f b 63 0 0 f # 15030 assign c a 63 0 0 f b 63 0 0 e # 15031 assign c a 63 0 0 f b 63 0 0 f # 15032 assign c a 63 0 0 f b 63 0 0 f # 15033 assign c a 63 0 0 f b 63 0 0 f # 15034 assign c a 63 0 0 f b 63 0 0 3 4 6 7 8 9 11 12 14 15 18 19 21 22 23 25 27 28 30 32 35 38 40 43 44 45 46 50 51 53 55 56 57 58 62 # 15035 assign c a 63 0 0 1 2 10 13 14 19 20 27 28 29 34 35 36 39 40 41 43 44 47 48 49 50 54 55 56 59 60 61 b 63 0 0 1 2 10 13 14 19 20 27 28 29 34 35 36 39 40 41 43 44 47 48 49 50 54 55 56 59 60 61 # 15036 assign c a 63 0 0 1 2 10 13 14 19 20 27 28 29 34 35 36 39 40 41 43 44 47 48 49 50 54 55 56 59 60 61 b 63 0 0 e # 15037 assign c a 63 0 0 5 13 14 17 19 21 22 24 26 27 29 31 33 34 38 39 40 44 49 51 56 57 58 59 60 62 b 63 0 0 5 13 14 17 19 21 22 24 26 27 29 31 33 34 38 39 40 44 49 51 56 57 58 59 60 62 # 15038 assign c a 63 0 0 5 13 14 17 19 21 22 24 26 27 29 31 33 34 38 39 40 44 49 51 56 57 58 59 60 62 b 63 0 0 f # 15039 assign c a 63 0 0 0 1 2 10 14 15 16 17 19 21 24 27 28 29 31 32 37 38 39 41 43 46 48 54 55 56 58 59 60 62 b 63 0 0 0 1 2 10 14 15 16 17 19 21 24 27 28 29 31 32 37 38 39 41 43 46 48 54 55 56 58 59 60 62 # 15040 assign c a 63 0 0 0 1 2 10 14 15 16 17 19 21 24 27 28 29 31 32 37 38 39 41 43 46 48 54 55 56 58 59 60 62 b 63 0 0 0 3 4 5 6 7 10 11 12 14 15 17 21 26 30 32 35 37 44 47 53 54 55 57 58 59 60 61 62 # 15041 assign c a 63 0 0 e b 63 0 0 e # 15042 assign c a 63 0 0 e b 63 0 1 e # 15043 assign c a 63 0 0 e b 63 0 0 e # 15044 assign c a 63 0 0 e b 63 0 1 f # 15045 assign c a 63 0 0 e b 63 0 0 e # 15046 assign c a 63 0 0 e b 63 0 1 0 6 7 8 11 13 16 17 18 20 23 24 25 26 28 29 31 32 33 36 39 40 41 42 43 44 45 47 48 49 51 58 60 # 15047 assign c a 63 0 0 f b 63 0 0 f # 15048 assign c a 63 0 0 f b 63 0 1 e # 15049 assign c a 63 0 0 f b 63 0 0 f # 15050 assign c a 63 0 0 f b 63 0 1 f # 15051 assign c a 63 0 0 f b 63 0 0 f # 15052 assign c a 63 0 0 f b 63 0 1 0 1 4 5 6 7 9 12 14 17 18 19 24 25 28 31 33 36 41 42 43 53 54 56 60 61 # 15053 assign c a 63 0 0 1 3 4 5 6 7 8 9 10 11 12 17 18 19 21 22 24 26 28 29 32 33 34 35 36 37 38 39 40 42 43 44 48 54 55 57 60 61 62 b 63 0 0 1 3 4 5 6 7 8 9 10 11 12 17 18 19 21 22 24 26 28 29 32 33 34 35 36 37 38 39 40 42 43 44 48 54 55 57 60 61 62 # 15054 assign c a 63 0 0 1 3 4 5 6 7 8 9 10 11 12 17 18 19 21 22 24 26 28 29 32 33 34 35 36 37 38 39 40 42 43 44 48 54 55 57 60 61 62 b 63 0 1 e # 15055 assign c a 63 0 0 0 1 2 5 9 10 15 17 18 20 23 24 25 28 29 30 32 33 34 39 40 44 45 47 53 56 57 60 62 b 63 0 0 0 1 2 5 9 10 15 17 18 20 23 24 25 28 29 30 32 33 34 39 40 44 45 47 53 56 57 60 62 # 15056 assign c a 63 0 0 0 1 2 5 9 10 15 17 18 20 23 24 25 28 29 30 32 33 34 39 40 44 45 47 53 56 57 60 62 b 63 0 1 f # 15057 assign c a 63 0 0 2 3 4 7 9 10 11 13 14 18 19 20 21 23 25 27 28 29 30 33 34 35 38 40 41 46 47 49 52 53 56 57 60 62 b 63 0 0 2 3 4 7 9 10 11 13 14 18 19 20 21 23 25 27 28 29 30 33 34 35 38 40 41 46 47 49 52 53 56 57 60 62 # 15058 assign c a 63 0 0 2 3 4 7 9 10 11 13 14 18 19 20 21 23 25 27 28 29 30 33 34 35 38 40 41 46 47 49 52 53 56 57 60 62 b 63 0 1 0 2 3 5 6 7 8 12 15 16 21 24 26 28 29 30 31 33 34 35 36 37 38 39 41 45 46 50 54 55 57 60 # 15059 assign c a 63 0 0 e b 63 0 0 e # 15060 assign c a 63 0 0 e b 63 1 0 e # 15061 assign c a 63 0 0 e b 63 0 0 e # 15062 assign c a 63 0 0 e b 63 1 0 f # 15063 assign c a 63 0 0 e b 63 0 0 e # 15064 assign c a 63 0 0 e b 63 1 0 0 1 3 4 10 11 12 14 16 17 24 25 28 29 30 31 32 36 37 38 41 42 45 46 47 48 51 52 55 57 62 # 15065 assign c a 63 0 0 f b 63 0 0 f # 15066 assign c a 63 0 0 f b 63 1 0 e # 15067 assign c a 63 0 0 f b 63 0 0 f # 15068 assign c a 63 0 0 f b 63 1 0 f # 15069 assign c a 63 0 0 f b 63 0 0 f # 15070 assign c a 63 0 0 f b 63 1 0 1 3 6 7 8 10 12 15 17 18 24 28 29 31 33 34 35 38 40 42 43 44 48 52 53 54 55 59 60 62 # 15071 assign c a 63 0 0 2 7 9 11 12 13 15 16 17 20 22 23 24 27 29 30 31 32 36 39 41 42 43 46 52 55 56 57 59 62 b 63 0 0 2 7 9 11 12 13 15 16 17 20 22 23 24 27 29 30 31 32 36 39 41 42 43 46 52 55 56 57 59 62 # 15072 assign c a 63 0 0 2 7 9 11 12 13 15 16 17 20 22 23 24 27 29 30 31 32 36 39 41 42 43 46 52 55 56 57 59 62 b 63 1 0 e # 15073 assign c a 63 0 0 1 2 3 8 9 11 13 14 15 19 21 23 28 29 35 36 41 43 44 45 46 49 52 53 57 58 59 60 61 b 63 0 0 1 2 3 8 9 11 13 14 15 19 21 23 28 29 35 36 41 43 44 45 46 49 52 53 57 58 59 60 61 # 15074 assign c a 63 0 0 1 2 3 8 9 11 13 14 15 19 21 23 28 29 35 36 41 43 44 45 46 49 52 53 57 58 59 60 61 b 63 1 0 f # 15075 assign c a 63 0 0 4 5 6 9 10 12 13 16 18 20 21 22 24 25 26 27 28 29 31 33 36 37 38 40 42 45 46 50 53 56 b 63 0 0 4 5 6 9 10 12 13 16 18 20 21 22 24 25 26 27 28 29 31 33 36 37 38 40 42 45 46 50 53 56 # 15076 assign c a 63 0 0 4 5 6 9 10 12 13 16 18 20 21 22 24 25 26 27 28 29 31 33 36 37 38 40 42 45 46 50 53 56 b 63 1 0 0 2 3 4 5 6 10 11 13 14 15 22 23 24 26 28 30 31 32 33 34 35 38 39 40 41 42 44 45 46 48 50 52 53 55 60 62 # 15077 assign c a 63 0 0 e b 63 0 0 e # 15078 assign c a 63 0 0 e b 63 1 1 e # 15079 assign c a 63 0 0 e b 63 0 0 e # 15080 assign c a 63 0 0 e b 63 1 1 f # 15081 assign c a 63 0 0 e b 63 0 0 e # 15082 assign c a 63 0 0 e b 63 1 1 1 2 8 17 19 21 22 28 29 32 34 37 38 42 45 46 47 48 56 57 58 59 60 # 15083 assign c a 63 0 0 f b 63 0 0 f # 15084 assign c a 63 0 0 f b 63 1 1 e # 15085 assign c a 63 0 0 f b 63 0 0 f # 15086 assign c a 63 0 0 f b 63 1 1 f # 15087 assign c a 63 0 0 f b 63 0 0 f # 15088 assign c a 63 0 0 f b 63 1 1 1 2 3 5 7 9 11 14 15 17 21 22 23 24 25 26 28 30 32 33 34 36 38 39 42 44 49 50 51 52 53 55 56 61 62 # 15089 assign c a 63 0 0 1 2 3 6 11 13 19 21 24 25 30 31 33 35 36 43 45 51 53 56 57 59 62 b 63 0 0 1 2 3 6 11 13 19 21 24 25 30 31 33 35 36 43 45 51 53 56 57 59 62 # 15090 assign c a 63 0 0 1 2 3 6 11 13 19 21 24 25 30 31 33 35 36 43 45 51 53 56 57 59 62 b 63 1 1 e # 15091 assign c a 63 0 0 7 8 9 11 14 15 16 19 20 22 24 25 26 27 28 30 33 34 35 41 44 47 48 51 52 54 55 57 58 60 62 b 63 0 0 7 8 9 11 14 15 16 19 20 22 24 25 26 27 28 30 33 34 35 41 44 47 48 51 52 54 55 57 58 60 62 # 15092 assign c a 63 0 0 7 8 9 11 14 15 16 19 20 22 24 25 26 27 28 30 33 34 35 41 44 47 48 51 52 54 55 57 58 60 62 b 63 1 1 f # 15093 assign c a 63 0 0 4 5 6 8 10 13 14 16 18 20 23 27 29 31 33 34 36 37 38 39 41 43 44 45 46 49 50 52 54 56 59 61 62 b 63 0 0 4 5 6 8 10 13 14 16 18 20 23 27 29 31 33 34 36 37 38 39 41 43 44 45 46 49 50 52 54 56 59 61 62 # 15094 assign c a 63 0 0 4 5 6 8 10 13 14 16 18 20 23 27 29 31 33 34 36 37 38 39 41 43 44 45 46 49 50 52 54 56 59 61 62 b 63 1 1 0 1 2 8 12 16 19 21 22 23 24 26 27 28 29 31 35 36 37 41 42 46 47 48 50 51 53 54 55 57 58 # 15095 assign c a 63 0 1 e b 63 0 1 e # 15096 assign c a 63 0 1 e b 63 0 0 e # 15097 assign c a 63 0 1 e b 63 0 1 e # 15098 assign c a 63 0 1 e b 63 0 0 f # 15099 assign c a 63 0 1 e b 63 0 1 e # 15100 assign c a 63 0 1 e b 63 0 0 0 2 3 5 7 9 10 16 19 20 22 23 24 28 29 30 31 33 34 36 39 41 45 46 49 51 53 54 55 60 61 # 15101 assign c a 63 0 1 f b 63 0 1 f # 15102 assign c a 63 0 1 f b 63 0 0 e # 15103 assign c a 63 0 1 f b 63 0 1 f # 15104 assign c a 63 0 1 f b 63 0 0 f # 15105 assign c a 63 0 1 f b 63 0 1 f # 15106 assign c a 63 0 1 f b 63 0 0 1 3 5 6 8 9 10 13 16 18 19 21 22 25 26 27 28 29 33 34 35 37 40 42 46 51 53 56 59 60 # 15107 assign c a 63 0 1 4 6 12 15 16 17 19 20 25 26 28 33 34 36 37 41 42 43 45 46 48 51 53 55 57 58 b 63 0 1 4 6 12 15 16 17 19 20 25 26 28 33 34 36 37 41 42 43 45 46 48 51 53 55 57 58 # 15108 assign c a 63 0 1 4 6 12 15 16 17 19 20 25 26 28 33 34 36 37 41 42 43 45 46 48 51 53 55 57 58 b 63 0 0 e # 15109 assign c a 63 0 1 0 3 5 15 16 18 19 20 21 22 23 25 26 30 31 34 35 40 42 44 45 46 47 49 52 55 57 59 62 b 63 0 1 0 3 5 15 16 18 19 20 21 22 23 25 26 30 31 34 35 40 42 44 45 46 47 49 52 55 57 59 62 # 15110 assign c a 63 0 1 0 3 5 15 16 18 19 20 21 22 23 25 26 30 31 34 35 40 42 44 45 46 47 49 52 55 57 59 62 b 63 0 0 f # 15111 assign c a 63 0 1 0 1 2 4 6 8 12 15 16 20 21 23 27 28 29 30 32 34 35 36 37 39 40 42 43 44 46 49 50 52 55 56 57 58 60 61 62 b 63 0 1 0 1 2 4 6 8 12 15 16 20 21 23 27 28 29 30 32 34 35 36 37 39 40 42 43 44 46 49 50 52 55 56 57 58 60 61 62 # 15112 assign c a 63 0 1 0 1 2 4 6 8 12 15 16 20 21 23 27 28 29 30 32 34 35 36 37 39 40 42 43 44 46 49 50 52 55 56 57 58 60 61 62 b 63 0 0 0 2 4 5 6 7 8 10 11 12 13 19 27 29 30 33 34 38 40 41 42 43 44 48 52 53 57 58 59 60 61 62 # 15113 assign c a 63 0 1 e b 63 0 1 e # 15114 assign c a 63 0 1 e b 63 0 1 e # 15115 assign c a 63 0 1 e b 63 0 1 e # 15116 assign c a 63 0 1 e b 63 0 1 f # 15117 assign c a 63 0 1 e b 63 0 1 e # 15118 assign c a 63 0 1 e b 63 0 1 0 2 4 8 9 11 12 13 14 15 16 19 21 23 26 27 28 30 31 32 33 35 36 39 42 45 47 50 51 55 56 58 59 60 61 62 # 15119 assign c a 63 0 1 f b 63 0 1 f # 15120 assign c a 63 0 1 f b 63 0 1 e # 15121 assign c a 63 0 1 f b 63 0 1 f # 15122 assign c a 63 0 1 f b 63 0 1 f # 15123 assign c a 63 0 1 f b 63 0 1 f # 15124 assign c a 63 0 1 f b 63 0 1 0 2 3 6 8 12 13 15 17 18 19 24 25 26 27 29 34 35 36 37 39 45 46 47 48 49 50 52 55 56 58 62 # 15125 assign c a 63 0 1 1 2 4 5 7 9 10 13 18 19 25 26 27 28 32 34 35 36 42 43 46 47 49 51 53 54 57 61 62 b 63 0 1 1 2 4 5 7 9 10 13 18 19 25 26 27 28 32 34 35 36 42 43 46 47 49 51 53 54 57 61 62 # 15126 assign c a 63 0 1 1 2 4 5 7 9 10 13 18 19 25 26 27 28 32 34 35 36 42 43 46 47 49 51 53 54 57 61 62 b 63 0 1 e # 15127 assign c a 63 0 1 1 2 3 4 5 9 10 11 14 15 16 17 23 24 26 28 29 31 32 33 34 35 36 38 41 43 46 47 53 60 61 b 63 0 1 1 2 3 4 5 9 10 11 14 15 16 17 23 24 26 28 29 31 32 33 34 35 36 38 41 43 46 47 53 60 61 # 15128 assign c a 63 0 1 1 2 3 4 5 9 10 11 14 15 16 17 23 24 26 28 29 31 32 33 34 35 36 38 41 43 46 47 53 60 61 b 63 0 1 f # 15129 assign c a 63 0 1 0 1 4 5 7 11 12 14 15 16 17 23 24 25 27 28 29 32 34 40 41 43 47 49 51 52 53 55 57 58 60 61 62 b 63 0 1 0 1 4 5 7 11 12 14 15 16 17 23 24 25 27 28 29 32 34 40 41 43 47 49 51 52 53 55 57 58 60 61 62 # 15130 assign c a 63 0 1 0 1 4 5 7 11 12 14 15 16 17 23 24 25 27 28 29 32 34 40 41 43 47 49 51 52 53 55 57 58 60 61 62 b 63 0 1 2 3 4 10 11 13 18 19 23 24 26 28 29 30 33 35 36 37 41 43 44 45 48 49 53 56 57 58 59 60 61 # 15131 assign c a 63 0 1 e b 63 0 1 e # 15132 assign c a 63 0 1 e b 63 1 0 e # 15133 assign c a 63 0 1 e b 63 0 1 e # 15134 assign c a 63 0 1 e b 63 1 0 f # 15135 assign c a 63 0 1 e b 63 0 1 e # 15136 assign c a 63 0 1 e b 63 1 0 0 2 3 5 7 10 11 13 16 18 19 20 26 28 29 30 31 33 34 35 36 43 47 48 49 50 54 55 57 # 15137 assign c a 63 0 1 f b 63 0 1 f # 15138 assign c a 63 0 1 f b 63 1 0 e # 15139 assign c a 63 0 1 f b 63 0 1 f # 15140 assign c a 63 0 1 f b 63 1 0 f # 15141 assign c a 63 0 1 f b 63 0 1 f # 15142 assign c a 63 0 1 f b 63 1 0 0 5 6 7 10 11 12 15 18 19 20 21 23 27 28 29 33 34 35 36 37 39 42 44 46 49 50 52 54 56 60 61 62 # 15143 assign c a 63 0 1 1 2 3 5 9 11 12 13 14 21 25 26 27 28 30 31 33 34 35 36 41 45 46 47 49 51 52 53 57 b 63 0 1 1 2 3 5 9 11 12 13 14 21 25 26 27 28 30 31 33 34 35 36 41 45 46 47 49 51 52 53 57 # 15144 assign c a 63 0 1 1 2 3 5 9 11 12 13 14 21 25 26 27 28 30 31 33 34 35 36 41 45 46 47 49 51 52 53 57 b 63 1 0 e # 15145 assign c a 63 0 1 0 5 6 7 10 11 12 13 15 18 21 26 28 29 30 31 33 36 37 39 42 47 48 50 51 52 56 58 59 62 b 63 0 1 0 5 6 7 10 11 12 13 15 18 21 26 28 29 30 31 33 36 37 39 42 47 48 50 51 52 56 58 59 62 # 15146 assign c a 63 0 1 0 5 6 7 10 11 12 13 15 18 21 26 28 29 30 31 33 36 37 39 42 47 48 50 51 52 56 58 59 62 b 63 1 0 f # 15147 assign c a 63 0 1 2 3 5 10 11 12 16 19 21 23 24 25 27 28 29 30 33 35 36 37 38 41 43 48 49 52 53 55 57 58 60 61 62 b 63 0 1 2 3 5 10 11 12 16 19 21 23 24 25 27 28 29 30 33 35 36 37 38 41 43 48 49 52 53 55 57 58 60 61 62 # 15148 assign c a 63 0 1 2 3 5 10 11 12 16 19 21 23 24 25 27 28 29 30 33 35 36 37 38 41 43 48 49 52 53 55 57 58 60 61 62 b 63 1 0 3 6 9 10 14 17 18 19 20 22 23 24 25 26 29 31 33 34 37 38 39 40 41 43 44 50 52 53 55 56 60 61 62 # 15149 assign c a 63 0 1 e b 63 0 1 e # 15150 assign c a 63 0 1 e b 63 1 1 e # 15151 assign c a 63 0 1 e b 63 0 1 e # 15152 assign c a 63 0 1 e b 63 1 1 f # 15153 assign c a 63 0 1 e b 63 0 1 e # 15154 assign c a 63 0 1 e b 63 1 1 1 2 3 4 6 7 10 14 15 17 18 19 20 21 22 26 27 30 36 37 38 41 43 46 47 51 55 56 59 60 # 15155 assign c a 63 0 1 f b 63 0 1 f # 15156 assign c a 63 0 1 f b 63 1 1 e # 15157 assign c a 63 0 1 f b 63 0 1 f # 15158 assign c a 63 0 1 f b 63 1 1 f # 15159 assign c a 63 0 1 f b 63 0 1 f # 15160 assign c a 63 0 1 f b 63 1 1 0 1 2 4 5 7 13 14 16 18 19 20 24 25 26 27 32 34 35 36 37 38 43 44 46 47 48 49 50 51 52 55 58 59 # 15161 assign c a 63 0 1 1 2 4 5 6 7 11 13 14 16 17 19 20 21 22 23 24 26 27 28 30 32 33 35 36 38 40 43 48 50 51 53 58 59 61 b 63 0 1 1 2 4 5 6 7 11 13 14 16 17 19 20 21 22 23 24 26 27 28 30 32 33 35 36 38 40 43 48 50 51 53 58 59 61 # 15162 assign c a 63 0 1 1 2 4 5 6 7 11 13 14 16 17 19 20 21 22 23 24 26 27 28 30 32 33 35 36 38 40 43 48 50 51 53 58 59 61 b 63 1 1 e # 15163 assign c a 63 0 1 1 2 4 6 8 11 13 15 16 17 18 20 21 22 24 27 28 33 40 41 44 46 49 50 53 57 59 60 61 b 63 0 1 1 2 4 6 8 11 13 15 16 17 18 20 21 22 24 27 28 33 40 41 44 46 49 50 53 57 59 60 61 # 15164 assign c a 63 0 1 1 2 4 6 8 11 13 15 16 17 18 20 21 22 24 27 28 33 40 41 44 46 49 50 53 57 59 60 61 b 63 1 1 f # 15165 assign c a 63 0 1 1 2 4 6 8 9 12 13 17 22 23 25 28 30 31 32 35 36 39 41 42 44 47 49 51 52 54 58 59 61 62 b 63 0 1 1 2 4 6 8 9 12 13 17 22 23 25 28 30 31 32 35 36 39 41 42 44 47 49 51 52 54 58 59 61 62 # 15166 assign c a 63 0 1 1 2 4 6 8 9 12 13 17 22 23 25 28 30 31 32 35 36 39 41 42 44 47 49 51 52 54 58 59 61 62 b 63 1 1 4 5 6 7 10 11 13 17 18 19 20 22 25 31 33 36 40 41 43 44 49 53 54 55 56 60 61 # 15167 assign c a 63 1 0 e b 63 1 0 e # 15168 assign c a 63 1 0 e b 63 0 0 e # 15169 assign c a 63 1 0 e b 63 1 0 e # 15170 assign c a 63 1 0 e b 63 0 0 f # 15171 assign c a 63 1 0 e b 63 1 0 e # 15172 assign c a 63 1 0 e b 63 0 0 1 2 3 4 6 8 9 11 12 13 19 22 27 32 35 36 38 39 42 45 47 49 50 51 53 54 55 58 59 60 # 15173 assign c a 63 1 0 f b 63 1 0 f # 15174 assign c a 63 1 0 f b 63 0 0 e # 15175 assign c a 63 1 0 f b 63 1 0 f # 15176 assign c a 63 1 0 f b 63 0 0 f # 15177 assign c a 63 1 0 f b 63 1 0 f # 15178 assign c a 63 1 0 f b 63 0 0 0 1 4 5 8 9 14 17 24 25 27 29 30 32 34 38 43 47 48 49 57 58 59 61 62 # 15179 assign c a 63 1 0 2 3 4 5 6 7 9 11 13 16 17 18 19 28 31 32 33 34 35 36 38 43 44 47 50 51 55 57 b 63 1 0 2 3 4 5 6 7 9 11 13 16 17 18 19 28 31 32 33 34 35 36 38 43 44 47 50 51 55 57 # 15180 assign c a 63 1 0 2 3 4 5 6 7 9 11 13 16 17 18 19 28 31 32 33 34 35 36 38 43 44 47 50 51 55 57 b 63 0 0 e # 15181 assign c a 63 1 0 2 3 6 7 8 9 10 11 12 15 16 17 19 21 22 25 28 29 30 33 35 37 38 40 41 43 45 46 50 51 52 53 54 56 58 59 62 b 63 1 0 2 3 6 7 8 9 10 11 12 15 16 17 19 21 22 25 28 29 30 33 35 37 38 40 41 43 45 46 50 51 52 53 54 56 58 59 62 # 15182 assign c a 63 1 0 2 3 6 7 8 9 10 11 12 15 16 17 19 21 22 25 28 29 30 33 35 37 38 40 41 43 45 46 50 51 52 53 54 56 58 59 62 b 63 0 0 f # 15183 assign c a 63 1 0 0 3 6 7 10 12 13 14 15 18 19 21 22 24 28 29 31 32 33 34 36 37 43 44 46 48 49 51 52 55 56 57 59 61 62 b 63 1 0 0 3 6 7 10 12 13 14 15 18 19 21 22 24 28 29 31 32 33 34 36 37 43 44 46 48 49 51 52 55 56 57 59 61 62 # 15184 assign c a 63 1 0 0 3 6 7 10 12 13 14 15 18 19 21 22 24 28 29 31 32 33 34 36 37 43 44 46 48 49 51 52 55 56 57 59 61 62 b 63 0 0 2 3 7 8 11 13 14 15 17 18 20 22 24 25 26 27 31 32 34 36 37 43 45 46 47 48 49 52 54 55 56 57 58 62 # 15185 assign c a 63 1 0 e b 63 1 0 e # 15186 assign c a 63 1 0 e b 63 0 1 e # 15187 assign c a 63 1 0 e b 63 1 0 e # 15188 assign c a 63 1 0 e b 63 0 1 f # 15189 assign c a 63 1 0 e b 63 1 0 e # 15190 assign c a 63 1 0 e b 63 0 1 2 3 5 6 7 10 12 13 14 16 17 18 20 21 23 24 25 29 33 36 39 40 46 47 48 49 51 52 55 57 58 59 60 # 15191 assign c a 63 1 0 f b 63 1 0 f # 15192 assign c a 63 1 0 f b 63 0 1 e # 15193 assign c a 63 1 0 f b 63 1 0 f # 15194 assign c a 63 1 0 f b 63 0 1 f # 15195 assign c a 63 1 0 f b 63 1 0 f # 15196 assign c a 63 1 0 f b 63 0 1 0 4 5 6 7 9 11 14 17 21 22 25 32 33 34 35 36 37 38 40 41 43 47 48 49 52 53 54 56 57 61 62 # 15197 assign c a 63 1 0 1 2 3 4 6 7 9 19 20 22 25 26 29 32 33 39 40 41 42 47 48 49 50 51 54 55 57 62 b 63 1 0 1 2 3 4 6 7 9 19 20 22 25 26 29 32 33 39 40 41 42 47 48 49 50 51 54 55 57 62 # 15198 assign c a 63 1 0 1 2 3 4 6 7 9 19 20 22 25 26 29 32 33 39 40 41 42 47 48 49 50 51 54 55 57 62 b 63 0 1 e # 15199 assign c a 63 1 0 3 4 5 7 8 9 10 11 15 16 18 19 20 22 23 26 27 28 30 32 34 35 38 39 42 44 47 48 51 54 55 56 57 58 59 61 62 b 63 1 0 3 4 5 7 8 9 10 11 15 16 18 19 20 22 23 26 27 28 30 32 34 35 38 39 42 44 47 48 51 54 55 56 57 58 59 61 62 # 15200 assign c a 63 1 0 3 4 5 7 8 9 10 11 15 16 18 19 20 22 23 26 27 28 30 32 34 35 38 39 42 44 47 48 51 54 55 56 57 58 59 61 62 b 63 0 1 f # 15201 assign c a 63 1 0 2 4 6 7 10 11 15 17 21 22 25 28 32 39 40 41 42 49 50 53 54 55 57 62 b 63 1 0 2 4 6 7 10 11 15 17 21 22 25 28 32 39 40 41 42 49 50 53 54 55 57 62 # 15202 assign c a 63 1 0 2 4 6 7 10 11 15 17 21 22 25 28 32 39 40 41 42 49 50 53 54 55 57 62 b 63 0 1 0 1 5 6 8 9 11 12 13 16 17 21 26 27 30 32 33 34 36 37 41 45 46 48 50 54 55 58 59 60 # 15203 assign c a 63 1 0 e b 63 1 0 e # 15204 assign c a 63 1 0 e b 63 1 0 e # 15205 assign c a 63 1 0 e b 63 1 0 e # 15206 assign c a 63 1 0 e b 63 1 0 f # 15207 assign c a 63 1 0 e b 63 1 0 e # 15208 assign c a 63 1 0 e b 63 1 0 0 3 7 8 12 13 16 19 20 22 24 27 28 29 31 33 34 39 48 49 51 53 61 62 # 15209 assign c a 63 1 0 f b 63 1 0 f # 15210 assign c a 63 1 0 f b 63 1 0 e # 15211 assign c a 63 1 0 f b 63 1 0 f # 15212 assign c a 63 1 0 f b 63 1 0 f # 15213 assign c a 63 1 0 f b 63 1 0 f # 15214 assign c a 63 1 0 f b 63 1 0 1 2 3 4 5 7 9 11 13 16 17 18 21 22 24 26 31 33 34 36 40 46 47 51 57 59 61 62 # 15215 assign c a 63 1 0 0 1 2 3 4 9 12 13 15 17 20 21 26 28 31 34 35 37 39 40 41 43 44 46 52 53 60 61 b 63 1 0 0 1 2 3 4 9 12 13 15 17 20 21 26 28 31 34 35 37 39 40 41 43 44 46 52 53 60 61 # 15216 assign c a 63 1 0 0 1 2 3 4 9 12 13 15 17 20 21 26 28 31 34 35 37 39 40 41 43 44 46 52 53 60 61 b 63 1 0 e # 15217 assign c a 63 1 0 0 1 2 3 5 8 9 12 13 15 22 23 24 28 29 30 31 32 33 34 36 38 42 43 46 48 50 52 53 54 55 b 63 1 0 0 1 2 3 5 8 9 12 13 15 22 23 24 28 29 30 31 32 33 34 36 38 42 43 46 48 50 52 53 54 55 # 15218 assign c a 63 1 0 0 1 2 3 5 8 9 12 13 15 22 23 24 28 29 30 31 32 33 34 36 38 42 43 46 48 50 52 53 54 55 b 63 1 0 f # 15219 assign c a 63 1 0 1 3 4 8 9 11 12 14 24 25 26 27 28 29 32 34 35 36 38 39 44 46 47 51 52 53 54 56 57 59 60 61 62 b 63 1 0 1 3 4 8 9 11 12 14 24 25 26 27 28 29 32 34 35 36 38 39 44 46 47 51 52 53 54 56 57 59 60 61 62 # 15220 assign c a 63 1 0 1 3 4 8 9 11 12 14 24 25 26 27 28 29 32 34 35 36 38 39 44 46 47 51 52 53 54 56 57 59 60 61 62 b 63 1 0 0 2 7 8 9 11 13 14 17 18 19 20 21 22 24 25 26 32 34 35 36 38 39 40 42 46 49 52 55 59 60 61 62 # 15221 assign c a 63 1 0 e b 63 1 0 e # 15222 assign c a 63 1 0 e b 63 1 1 e # 15223 assign c a 63 1 0 e b 63 1 0 e # 15224 assign c a 63 1 0 e b 63 1 1 f # 15225 assign c a 63 1 0 e b 63 1 0 e # 15226 assign c a 63 1 0 e b 63 1 1 2 5 7 8 9 10 15 16 19 21 24 25 27 30 31 35 37 38 40 42 44 46 48 52 53 54 55 56 58 # 15227 assign c a 63 1 0 f b 63 1 0 f # 15228 assign c a 63 1 0 f b 63 1 1 e # 15229 assign c a 63 1 0 f b 63 1 0 f # 15230 assign c a 63 1 0 f b 63 1 1 f # 15231 assign c a 63 1 0 f b 63 1 0 f # 15232 assign c a 63 1 0 f b 63 1 1 0 1 2 3 5 7 8 9 10 11 12 14 18 19 21 22 25 26 27 30 33 35 37 38 40 41 46 47 50 51 53 54 55 56 57 62 # 15233 assign c a 63 1 0 0 2 3 4 5 6 7 9 11 14 16 19 22 24 25 26 30 33 36 43 44 45 47 49 50 51 52 54 55 57 60 62 b 63 1 0 0 2 3 4 5 6 7 9 11 14 16 19 22 24 25 26 30 33 36 43 44 45 47 49 50 51 52 54 55 57 60 62 # 15234 assign c a 63 1 0 0 2 3 4 5 6 7 9 11 14 16 19 22 24 25 26 30 33 36 43 44 45 47 49 50 51 52 54 55 57 60 62 b 63 1 1 e # 15235 assign c a 63 1 0 2 3 4 6 16 21 24 29 31 32 35 39 40 41 45 46 47 48 52 53 55 57 60 61 b 63 1 0 2 3 4 6 16 21 24 29 31 32 35 39 40 41 45 46 47 48 52 53 55 57 60 61 # 15236 assign c a 63 1 0 2 3 4 6 16 21 24 29 31 32 35 39 40 41 45 46 47 48 52 53 55 57 60 61 b 63 1 1 f # 15237 assign c a 63 1 0 0 1 2 3 6 9 10 11 12 14 15 17 19 20 23 24 28 31 35 39 41 47 49 50 53 55 57 60 61 62 b 63 1 0 0 1 2 3 6 9 10 11 12 14 15 17 19 20 23 24 28 31 35 39 41 47 49 50 53 55 57 60 61 62 # 15238 assign c a 63 1 0 0 1 2 3 6 9 10 11 12 14 15 17 19 20 23 24 28 31 35 39 41 47 49 50 53 55 57 60 61 62 b 63 1 1 1 3 5 10 12 13 14 15 20 22 23 24 26 27 29 30 31 32 34 37 39 43 45 46 50 52 53 54 57 59 60 # 15239 assign c a 63 1 1 e b 63 1 1 e # 15240 assign c a 63 1 1 e b 63 0 0 e # 15241 assign c a 63 1 1 e b 63 1 1 e # 15242 assign c a 63 1 1 e b 63 0 0 f # 15243 assign c a 63 1 1 e b 63 1 1 e # 15244 assign c a 63 1 1 e b 63 0 0 1 3 12 16 21 23 27 28 29 32 33 36 40 41 42 43 46 48 50 51 53 54 57 60 61 62 # 15245 assign c a 63 1 1 f b 63 1 1 f # 15246 assign c a 63 1 1 f b 63 0 0 e # 15247 assign c a 63 1 1 f b 63 1 1 f # 15248 assign c a 63 1 1 f b 63 0 0 f # 15249 assign c a 63 1 1 f b 63 1 1 f # 15250 assign c a 63 1 1 f b 63 0 0 1 2 3 4 12 18 20 21 22 25 26 28 29 34 36 41 45 50 51 53 55 56 57 60 62 # 15251 assign c a 63 1 1 1 2 5 6 7 9 11 12 13 17 21 23 24 29 30 33 34 35 36 37 38 40 41 42 43 44 48 53 59 b 63 1 1 1 2 5 6 7 9 11 12 13 17 21 23 24 29 30 33 34 35 36 37 38 40 41 42 43 44 48 53 59 # 15252 assign c a 63 1 1 1 2 5 6 7 9 11 12 13 17 21 23 24 29 30 33 34 35 36 37 38 40 41 42 43 44 48 53 59 b 63 0 0 e # 15253 assign c a 63 1 1 0 3 4 8 11 14 15 19 20 22 24 26 28 30 33 37 38 41 42 43 45 47 49 50 52 53 54 55 59 60 61 b 63 1 1 0 3 4 8 11 14 15 19 20 22 24 26 28 30 33 37 38 41 42 43 45 47 49 50 52 53 54 55 59 60 61 # 15254 assign c a 63 1 1 0 3 4 8 11 14 15 19 20 22 24 26 28 30 33 37 38 41 42 43 45 47 49 50 52 53 54 55 59 60 61 b 63 0 0 f # 15255 assign c a 63 1 1 1 2 3 8 12 14 15 16 17 18 20 24 25 26 27 29 31 32 33 35 37 41 42 45 50 52 54 56 b 63 1 1 1 2 3 8 12 14 15 16 17 18 20 24 25 26 27 29 31 32 33 35 37 41 42 45 50 52 54 56 # 15256 assign c a 63 1 1 1 2 3 8 12 14 15 16 17 18 20 24 25 26 27 29 31 32 33 35 37 41 42 45 50 52 54 56 b 63 0 0 0 2 3 4 5 10 11 12 13 21 23 24 25 26 28 31 32 34 35 36 40 42 43 44 48 49 50 51 52 53 54 56 57 58 59 62 # 15257 assign c a 63 1 1 e b 63 1 1 e # 15258 assign c a 63 1 1 e b 63 0 1 e # 15259 assign c a 63 1 1 e b 63 1 1 e # 15260 assign c a 63 1 1 e b 63 0 1 f # 15261 assign c a 63 1 1 e b 63 1 1 e # 15262 assign c a 63 1 1 e b 63 0 1 2 7 9 10 12 13 14 15 16 17 18 19 21 23 26 29 30 31 33 34 35 36 38 43 46 48 49 50 55 56 62 # 15263 assign c a 63 1 1 f b 63 1 1 f # 15264 assign c a 63 1 1 f b 63 0 1 e # 15265 assign c a 63 1 1 f b 63 1 1 f # 15266 assign c a 63 1 1 f b 63 0 1 f # 15267 assign c a 63 1 1 f b 63 1 1 f # 15268 assign c a 63 1 1 f b 63 0 1 0 1 2 3 4 8 9 10 11 13 14 15 16 18 20 22 23 24 34 36 38 43 45 46 50 52 53 55 57 58 59 62 # 15269 assign c a 63 1 1 0 2 6 7 8 10 11 12 13 14 19 20 23 24 26 29 35 36 39 40 42 43 45 47 48 49 50 51 54 56 58 b 63 1 1 0 2 6 7 8 10 11 12 13 14 19 20 23 24 26 29 35 36 39 40 42 43 45 47 48 49 50 51 54 56 58 # 15270 assign c a 63 1 1 0 2 6 7 8 10 11 12 13 14 19 20 23 24 26 29 35 36 39 40 42 43 45 47 48 49 50 51 54 56 58 b 63 0 1 e # 15271 assign c a 63 1 1 0 1 2 3 4 7 9 10 14 17 21 23 25 27 29 34 36 38 40 41 42 45 47 48 49 54 55 58 61 62 b 63 1 1 0 1 2 3 4 7 9 10 14 17 21 23 25 27 29 34 36 38 40 41 42 45 47 48 49 54 55 58 61 62 # 15272 assign c a 63 1 1 0 1 2 3 4 7 9 10 14 17 21 23 25 27 29 34 36 38 40 41 42 45 47 48 49 54 55 58 61 62 b 63 0 1 f # 15273 assign c a 63 1 1 0 2 3 4 5 6 8 9 10 12 13 14 15 18 19 20 22 23 24 26 29 30 32 33 35 36 39 40 42 43 44 45 46 49 53 55 57 59 60 62 b 63 1 1 0 2 3 4 5 6 8 9 10 12 13 14 15 18 19 20 22 23 24 26 29 30 32 33 35 36 39 40 42 43 44 45 46 49 53 55 57 59 60 62 # 15274 assign c a 63 1 1 0 2 3 4 5 6 8 9 10 12 13 14 15 18 19 20 22 23 24 26 29 30 32 33 35 36 39 40 42 43 44 45 46 49 53 55 57 59 60 62 b 63 0 1 0 1 3 4 6 15 17 18 19 21 22 25 27 28 29 30 32 36 38 42 43 44 45 48 50 53 55 56 57 58 59 60 61 # 15275 assign c a 63 1 1 e b 63 1 1 e # 15276 assign c a 63 1 1 e b 63 1 0 e # 15277 assign c a 63 1 1 e b 63 1 1 e # 15278 assign c a 63 1 1 e b 63 1 0 f # 15279 assign c a 63 1 1 e b 63 1 1 e # 15280 assign c a 63 1 1 e b 63 1 0 1 3 4 5 6 7 10 11 13 16 17 19 26 29 31 32 33 34 36 37 39 42 44 46 47 50 51 52 56 58 59 60 62 # 15281 assign c a 63 1 1 f b 63 1 1 f # 15282 assign c a 63 1 1 f b 63 1 0 e # 15283 assign c a 63 1 1 f b 63 1 1 f # 15284 assign c a 63 1 1 f b 63 1 0 f # 15285 assign c a 63 1 1 f b 63 1 1 f # 15286 assign c a 63 1 1 f b 63 1 0 0 4 6 7 9 10 11 12 14 15 16 19 21 23 26 29 33 36 44 46 47 48 50 53 55 59 # 15287 assign c a 63 1 1 2 3 5 6 7 12 13 15 16 17 22 23 24 25 27 29 31 32 33 36 38 40 42 43 44 47 49 50 53 56 57 59 61 62 b 63 1 1 2 3 5 6 7 12 13 15 16 17 22 23 24 25 27 29 31 32 33 36 38 40 42 43 44 47 49 50 53 56 57 59 61 62 # 15288 assign c a 63 1 1 2 3 5 6 7 12 13 15 16 17 22 23 24 25 27 29 31 32 33 36 38 40 42 43 44 47 49 50 53 56 57 59 61 62 b 63 1 0 e # 15289 assign c a 63 1 1 1 3 4 5 6 7 9 10 12 13 14 15 17 18 19 23 25 29 30 31 32 34 36 42 49 55 58 59 61 62 b 63 1 1 1 3 4 5 6 7 9 10 12 13 14 15 17 18 19 23 25 29 30 31 32 34 36 42 49 55 58 59 61 62 # 15290 assign c a 63 1 1 1 3 4 5 6 7 9 10 12 13 14 15 17 18 19 23 25 29 30 31 32 34 36 42 49 55 58 59 61 62 b 63 1 0 f # 15291 assign c a 63 1 1 2 3 7 8 12 13 19 20 21 22 23 26 28 29 32 34 38 40 45 46 47 55 56 57 59 60 61 b 63 1 1 2 3 7 8 12 13 19 20 21 22 23 26 28 29 32 34 38 40 45 46 47 55 56 57 59 60 61 # 15292 assign c a 63 1 1 2 3 7 8 12 13 19 20 21 22 23 26 28 29 32 34 38 40 45 46 47 55 56 57 59 60 61 b 63 1 0 0 1 3 6 7 11 12 15 16 17 20 21 23 24 26 27 29 30 31 32 34 36 37 38 39 42 48 51 53 54 55 57 58 59 61 62 # 15293 assign c a 63 1 1 e b 63 1 1 e # 15294 assign c a 63 1 1 e b 63 1 1 e # 15295 assign c a 63 1 1 e b 63 1 1 e # 15296 assign c a 63 1 1 e b 63 1 1 f # 15297 assign c a 63 1 1 e b 63 1 1 e # 15298 assign c a 63 1 1 e b 63 1 1 1 2 4 5 7 9 11 13 14 16 18 19 20 21 23 28 30 31 33 35 37 38 39 40 43 44 47 48 51 53 55 57 59 62 # 15299 assign c a 63 1 1 f b 63 1 1 f # 15300 assign c a 63 1 1 f b 63 1 1 e # 15301 assign c a 63 1 1 f b 63 1 1 f # 15302 assign c a 63 1 1 f b 63 1 1 f # 15303 assign c a 63 1 1 f b 63 1 1 f # 15304 assign c a 63 1 1 f b 63 1 1 1 10 14 18 19 20 21 23 24 26 27 28 30 34 35 36 37 38 41 43 44 49 52 53 54 55 57 58 59 61 # 15305 assign c a 63 1 1 2 5 9 10 12 14 16 17 19 22 25 26 29 30 31 32 33 34 36 38 41 42 44 47 49 50 51 53 54 55 56 57 59 60 61 62 b 63 1 1 2 5 9 10 12 14 16 17 19 22 25 26 29 30 31 32 33 34 36 38 41 42 44 47 49 50 51 53 54 55 56 57 59 60 61 62 # 15306 assign c a 63 1 1 2 5 9 10 12 14 16 17 19 22 25 26 29 30 31 32 33 34 36 38 41 42 44 47 49 50 51 53 54 55 56 57 59 60 61 62 b 63 1 1 e # 15307 assign c a 63 1 1 0 1 2 3 5 6 7 13 14 17 18 19 21 22 23 25 28 32 33 36 40 41 42 44 45 47 48 50 51 53 54 55 56 59 b 63 1 1 0 1 2 3 5 6 7 13 14 17 18 19 21 22 23 25 28 32 33 36 40 41 42 44 45 47 48 50 51 53 54 55 56 59 # 15308 assign c a 63 1 1 0 1 2 3 5 6 7 13 14 17 18 19 21 22 23 25 28 32 33 36 40 41 42 44 45 47 48 50 51 53 54 55 56 59 b 63 1 1 f # 15309 assign c a 63 1 1 2 3 5 7 8 9 11 12 15 16 17 18 19 21 22 23 24 28 29 30 35 41 45 46 48 49 51 54 58 60 b 63 1 1 2 3 5 7 8 9 11 12 15 16 17 18 19 21 22 23 24 28 29 30 35 41 45 46 48 49 51 54 58 60 # 15310 assign c a 63 1 1 2 3 5 7 8 9 11 12 15 16 17 18 19 21 22 23 24 28 29 30 35 41 45 46 48 49 51 54 58 60 b 63 1 1 1 2 3 7 8 10 11 12 13 14 15 17 24 25 28 29 30 31 32 34 36 38 40 41 43 44 46 49 50 54 56 58 59 60 62 # 15311 assign c a 64 0 0 e b 64 0 0 e # 15312 assign c a 64 0 0 e b 64 0 0 e # 15313 assign c a 64 0 0 e b 64 0 0 e # 15314 assign c a 64 0 0 e b 64 0 0 f # 15315 assign c a 64 0 0 e b 64 0 0 e # 15316 assign c a 64 0 0 e b 64 0 0 0 1 2 3 4 6 9 10 11 12 14 15 17 18 19 21 22 23 24 27 29 31 32 34 35 37 38 39 40 41 42 43 44 46 56 57 59 60 61 62 63 # 15317 assign c a 64 0 0 f b 64 0 0 f # 15318 assign c a 64 0 0 f b 64 0 0 e # 15319 assign c a 64 0 0 f b 64 0 0 f # 15320 assign c a 64 0 0 f b 64 0 0 f # 15321 assign c a 64 0 0 f b 64 0 0 f # 15322 assign c a 64 0 0 f b 64 0 0 0 1 4 7 9 10 14 15 16 20 22 27 28 30 31 36 37 39 40 44 45 46 47 51 52 55 57 58 61 63 # 15323 assign c a 64 0 0 0 1 3 4 5 6 9 10 11 12 13 14 16 17 19 21 22 23 24 25 29 32 33 36 37 38 39 40 41 42 43 45 48 51 53 54 55 56 57 60 62 b 64 0 0 0 1 3 4 5 6 9 10 11 12 13 14 16 17 19 21 22 23 24 25 29 32 33 36 37 38 39 40 41 42 43 45 48 51 53 54 55 56 57 60 62 # 15324 assign c a 64 0 0 0 1 3 4 5 6 9 10 11 12 13 14 16 17 19 21 22 23 24 25 29 32 33 36 37 38 39 40 41 42 43 45 48 51 53 54 55 56 57 60 62 b 64 0 0 e # 15325 assign c a 64 0 0 1 2 3 4 5 6 7 8 9 10 12 14 16 17 19 20 22 23 26 27 28 29 31 32 34 35 37 38 40 41 43 44 47 49 50 52 53 54 56 57 59 60 61 62 b 64 0 0 1 2 3 4 5 6 7 8 9 10 12 14 16 17 19 20 22 23 26 27 28 29 31 32 34 35 37 38 40 41 43 44 47 49 50 52 53 54 56 57 59 60 61 62 # 15326 assign c a 64 0 0 1 2 3 4 5 6 7 8 9 10 12 14 16 17 19 20 22 23 26 27 28 29 31 32 34 35 37 38 40 41 43 44 47 49 50 52 53 54 56 57 59 60 61 62 b 64 0 0 f # 15327 assign c a 64 0 0 1 3 4 5 6 7 8 11 12 13 15 20 22 23 25 26 27 28 31 33 34 35 36 37 38 43 44 45 46 48 50 51 53 54 55 56 57 58 b 64 0 0 1 3 4 5 6 7 8 11 12 13 15 20 22 23 25 26 27 28 31 33 34 35 36 37 38 43 44 45 46 48 50 51 53 54 55 56 57 58 # 15328 assign c a 64 0 0 1 3 4 5 6 7 8 11 12 13 15 20 22 23 25 26 27 28 31 33 34 35 36 37 38 43 44 45 46 48 50 51 53 54 55 56 57 58 b 64 0 0 0 3 4 14 17 19 20 22 24 26 28 30 31 32 35 37 38 39 46 47 49 50 53 54 57 59 62 63 # 15329 assign c a 64 0 0 e b 64 0 0 e # 15330 assign c a 64 0 0 e b 64 0 1 e # 15331 assign c a 64 0 0 e b 64 0 0 e # 15332 assign c a 64 0 0 e b 64 0 1 f # 15333 assign c a 64 0 0 e b 64 0 0 e # 15334 assign c a 64 0 0 e b 64 0 1 2 3 4 5 6 8 10 12 18 19 22 28 36 38 39 40 43 44 45 49 51 55 56 57 60 61 62 # 15335 assign c a 64 0 0 f b 64 0 0 f # 15336 assign c a 64 0 0 f b 64 0 1 e # 15337 assign c a 64 0 0 f b 64 0 0 f # 15338 assign c a 64 0 0 f b 64 0 1 f # 15339 assign c a 64 0 0 f b 64 0 0 f # 15340 assign c a 64 0 0 f b 64 0 1 0 1 2 3 5 6 7 10 13 14 15 16 17 18 21 23 24 27 36 40 49 50 52 53 55 57 59 61 62 # 15341 assign c a 64 0 0 0 2 3 8 9 11 12 13 16 17 18 19 20 25 28 30 31 33 34 35 37 40 41 43 46 49 50 52 54 58 61 62 63 b 64 0 0 0 2 3 8 9 11 12 13 16 17 18 19 20 25 28 30 31 33 34 35 37 40 41 43 46 49 50 52 54 58 61 62 63 # 15342 assign c a 64 0 0 0 2 3 8 9 11 12 13 16 17 18 19 20 25 28 30 31 33 34 35 37 40 41 43 46 49 50 52 54 58 61 62 63 b 64 0 1 e # 15343 assign c a 64 0 0 0 1 2 4 8 9 14 15 16 17 19 23 25 26 27 28 29 30 32 33 34 38 40 42 46 53 55 56 58 61 62 63 b 64 0 0 0 1 2 4 8 9 14 15 16 17 19 23 25 26 27 28 29 30 32 33 34 38 40 42 46 53 55 56 58 61 62 63 # 15344 assign c a 64 0 0 0 1 2 4 8 9 14 15 16 17 19 23 25 26 27 28 29 30 32 33 34 38 40 42 46 53 55 56 58 61 62 63 b 64 0 1 f # 15345 assign c a 64 0 0 0 1 4 7 8 12 14 15 19 20 21 22 23 24 25 28 31 32 33 35 37 38 39 40 43 45 46 47 50 52 53 54 55 56 59 62 b 64 0 0 0 1 4 7 8 12 14 15 19 20 21 22 23 24 25 28 31 32 33 35 37 38 39 40 43 45 46 47 50 52 53 54 55 56 59 62 # 15346 assign c a 64 0 0 0 1 4 7 8 12 14 15 19 20 21 22 23 24 25 28 31 32 33 35 37 38 39 40 43 45 46 47 50 52 53 54 55 56 59 62 b 64 0 1 4 7 8 9 10 12 15 16 19 22 25 27 31 33 37 44 45 48 52 53 56 57 60 61 # 15347 assign c a 64 0 0 e b 64 0 0 e # 15348 assign c a 64 0 0 e b 64 1 0 e # 15349 assign c a 64 0 0 e b 64 0 0 e # 15350 assign c a 64 0 0 e b 64 1 0 f # 15351 assign c a 64 0 0 e b 64 0 0 e # 15352 assign c a 64 0 0 e b 64 1 0 0 2 7 8 9 10 12 14 15 16 18 22 25 26 28 29 30 33 34 35 39 43 44 46 48 49 50 51 53 56 57 58 60 62 # 15353 assign c a 64 0 0 f b 64 0 0 f # 15354 assign c a 64 0 0 f b 64 1 0 e # 15355 assign c a 64 0 0 f b 64 0 0 f # 15356 assign c a 64 0 0 f b 64 1 0 f # 15357 assign c a 64 0 0 f b 64 0 0 f # 15358 assign c a 64 0 0 f b 64 1 0 1 4 5 9 11 13 16 19 23 28 30 31 36 37 40 41 44 45 46 49 53 55 57 59 62 63 # 15359 assign c a 64 0 0 0 2 3 6 10 11 12 13 16 17 18 20 25 27 31 32 34 36 37 38 40 41 43 45 48 49 51 53 54 59 61 62 b 64 0 0 0 2 3 6 10 11 12 13 16 17 18 20 25 27 31 32 34 36 37 38 40 41 43 45 48 49 51 53 54 59 61 62 # 15360 assign c a 64 0 0 0 2 3 6 10 11 12 13 16 17 18 20 25 27 31 32 34 36 37 38 40 41 43 45 48 49 51 53 54 59 61 62 b 64 1 0 e # 15361 assign c a 64 0 0 8 9 14 18 19 20 21 27 29 30 34 35 36 38 39 40 44 45 46 49 50 52 54 55 56 57 58 59 60 61 b 64 0 0 8 9 14 18 19 20 21 27 29 30 34 35 36 38 39 40 44 45 46 49 50 52 54 55 56 57 58 59 60 61 # 15362 assign c a 64 0 0 8 9 14 18 19 20 21 27 29 30 34 35 36 38 39 40 44 45 46 49 50 52 54 55 56 57 58 59 60 61 b 64 1 0 f # 15363 assign c a 64 0 0 3 6 9 10 12 13 20 25 28 29 30 31 33 34 35 37 39 40 42 43 44 46 48 50 51 52 53 55 56 57 59 60 61 62 63 b 64 0 0 3 6 9 10 12 13 20 25 28 29 30 31 33 34 35 37 39 40 42 43 44 46 48 50 51 52 53 55 56 57 59 60 61 62 63 # 15364 assign c a 64 0 0 3 6 9 10 12 13 20 25 28 29 30 31 33 34 35 37 39 40 42 43 44 46 48 50 51 52 53 55 56 57 59 60 61 62 63 b 64 1 0 0 1 2 5 6 9 10 13 14 27 29 30 32 33 34 36 37 39 40 45 46 47 49 51 55 56 57 58 60 61 62 # 15365 assign c a 64 0 0 e b 64 0 0 e # 15366 assign c a 64 0 0 e b 64 1 1 e # 15367 assign c a 64 0 0 e b 64 0 0 e # 15368 assign c a 64 0 0 e b 64 1 1 f # 15369 assign c a 64 0 0 e b 64 0 0 e # 15370 assign c a 64 0 0 e b 64 1 1 1 2 8 15 18 19 20 23 27 28 34 35 37 38 43 44 45 46 47 49 50 55 57 58 62 # 15371 assign c a 64 0 0 f b 64 0 0 f # 15372 assign c a 64 0 0 f b 64 1 1 e # 15373 assign c a 64 0 0 f b 64 0 0 f # 15374 assign c a 64 0 0 f b 64 1 1 f # 15375 assign c a 64 0 0 f b 64 0 0 f # 15376 assign c a 64 0 0 f b 64 1 1 1 3 4 8 9 15 18 19 23 24 30 31 33 34 35 39 40 44 45 47 50 51 54 58 59 60 62 63 # 15377 assign c a 64 0 0 1 2 3 6 8 10 13 19 21 23 25 26 27 29 30 31 32 33 34 39 40 43 45 49 51 52 54 55 57 58 59 60 61 62 63 b 64 0 0 1 2 3 6 8 10 13 19 21 23 25 26 27 29 30 31 32 33 34 39 40 43 45 49 51 52 54 55 57 58 59 60 61 62 63 # 15378 assign c a 64 0 0 1 2 3 6 8 10 13 19 21 23 25 26 27 29 30 31 32 33 34 39 40 43 45 49 51 52 54 55 57 58 59 60 61 62 63 b 64 1 1 e # 15379 assign c a 64 0 0 0 1 2 7 8 9 10 11 12 15 17 18 19 22 23 25 26 27 28 29 30 31 33 35 38 39 41 42 43 46 49 57 60 b 64 0 0 0 1 2 7 8 9 10 11 12 15 17 18 19 22 23 25 26 27 28 29 30 31 33 35 38 39 41 42 43 46 49 57 60 # 15380 assign c a 64 0 0 0 1 2 7 8 9 10 11 12 15 17 18 19 22 23 25 26 27 28 29 30 31 33 35 38 39 41 42 43 46 49 57 60 b 64 1 1 f # 15381 assign c a 64 0 0 0 1 2 5 11 12 15 17 21 22 23 24 28 29 30 31 33 34 35 39 41 42 45 48 49 50 51 53 54 57 58 60 62 b 64 0 0 0 1 2 5 11 12 15 17 21 22 23 24 28 29 30 31 33 34 35 39 41 42 45 48 49 50 51 53 54 57 58 60 62 # 15382 assign c a 64 0 0 0 1 2 5 11 12 15 17 21 22 23 24 28 29 30 31 33 34 35 39 41 42 45 48 49 50 51 53 54 57 58 60 62 b 64 1 1 1 2 3 6 7 8 10 14 16 17 20 21 22 24 27 28 30 33 34 35 37 43 44 46 47 48 51 53 54 58 60 61 62 # 15383 assign c a 64 0 1 e b 64 0 1 e # 15384 assign c a 64 0 1 e b 64 0 0 e # 15385 assign c a 64 0 1 e b 64 0 1 e # 15386 assign c a 64 0 1 e b 64 0 0 f # 15387 assign c a 64 0 1 e b 64 0 1 e # 15388 assign c a 64 0 1 e b 64 0 0 0 1 5 7 9 11 14 16 17 18 19 20 21 26 29 30 35 36 37 38 40 44 45 48 51 53 55 56 63 # 15389 assign c a 64 0 1 f b 64 0 1 f # 15390 assign c a 64 0 1 f b 64 0 0 e # 15391 assign c a 64 0 1 f b 64 0 1 f # 15392 assign c a 64 0 1 f b 64 0 0 f # 15393 assign c a 64 0 1 f b 64 0 1 f # 15394 assign c a 64 0 1 f b 64 0 0 0 1 2 3 4 6 7 8 13 14 19 21 22 28 29 32 33 35 38 42 43 44 45 46 50 52 53 54 56 58 59 61 # 15395 assign c a 64 0 1 0 4 6 10 13 14 17 18 21 24 32 33 34 35 36 38 40 41 42 44 45 46 49 51 53 57 58 62 b 64 0 1 0 4 6 10 13 14 17 18 21 24 32 33 34 35 36 38 40 41 42 44 45 46 49 51 53 57 58 62 # 15396 assign c a 64 0 1 0 4 6 10 13 14 17 18 21 24 32 33 34 35 36 38 40 41 42 44 45 46 49 51 53 57 58 62 b 64 0 0 e # 15397 assign c a 64 0 1 0 2 3 4 5 7 8 11 13 15 16 17 18 20 22 23 24 28 31 32 34 35 38 40 41 43 44 45 46 47 50 52 53 55 57 58 59 60 62 63 b 64 0 1 0 2 3 4 5 7 8 11 13 15 16 17 18 20 22 23 24 28 31 32 34 35 38 40 41 43 44 45 46 47 50 52 53 55 57 58 59 60 62 63 # 15398 assign c a 64 0 1 0 2 3 4 5 7 8 11 13 15 16 17 18 20 22 23 24 28 31 32 34 35 38 40 41 43 44 45 46 47 50 52 53 55 57 58 59 60 62 63 b 64 0 0 f # 15399 assign c a 64 0 1 0 4 6 14 15 16 17 18 20 23 24 26 27 28 29 30 31 35 39 40 41 42 43 45 46 47 48 49 51 52 53 54 55 56 57 58 59 61 63 b 64 0 1 0 4 6 14 15 16 17 18 20 23 24 26 27 28 29 30 31 35 39 40 41 42 43 45 46 47 48 49 51 52 53 54 55 56 57 58 59 61 63 # 15400 assign c a 64 0 1 0 4 6 14 15 16 17 18 20 23 24 26 27 28 29 30 31 35 39 40 41 42 43 45 46 47 48 49 51 52 53 54 55 56 57 58 59 61 63 b 64 0 0 0 1 2 4 7 10 17 18 20 21 23 27 28 29 30 31 32 35 36 37 39 40 44 45 47 48 51 55 56 57 58 59 60 62 63 # 15401 assign c a 64 0 1 e b 64 0 1 e # 15402 assign c a 64 0 1 e b 64 0 1 e # 15403 assign c a 64 0 1 e b 64 0 1 e # 15404 assign c a 64 0 1 e b 64 0 1 f # 15405 assign c a 64 0 1 e b 64 0 1 e # 15406 assign c a 64 0 1 e b 64 0 1 0 3 4 5 6 7 11 13 14 18 20 25 29 33 36 37 39 42 45 46 49 50 51 55 57 59 60 63 # 15407 assign c a 64 0 1 f b 64 0 1 f # 15408 assign c a 64 0 1 f b 64 0 1 e # 15409 assign c a 64 0 1 f b 64 0 1 f # 15410 assign c a 64 0 1 f b 64 0 1 f # 15411 assign c a 64 0 1 f b 64 0 1 f # 15412 assign c a 64 0 1 f b 64 0 1 3 6 7 8 9 12 13 14 16 17 19 20 21 22 25 26 31 32 34 36 37 38 39 40 43 45 46 47 48 50 51 52 53 54 56 57 58 61 62 63 # 15413 assign c a 64 0 1 1 9 10 11 12 13 14 17 22 31 33 35 36 37 38 40 41 44 45 46 48 55 56 57 61 63 b 64 0 1 1 9 10 11 12 13 14 17 22 31 33 35 36 37 38 40 41 44 45 46 48 55 56 57 61 63 # 15414 assign c a 64 0 1 1 9 10 11 12 13 14 17 22 31 33 35 36 37 38 40 41 44 45 46 48 55 56 57 61 63 b 64 0 1 e # 15415 assign c a 64 0 1 1 4 6 10 13 14 15 19 21 24 25 29 30 31 36 38 40 41 42 43 44 45 46 47 48 50 52 54 55 56 58 60 61 b 64 0 1 1 4 6 10 13 14 15 19 21 24 25 29 30 31 36 38 40 41 42 43 44 45 46 47 48 50 52 54 55 56 58 60 61 # 15416 assign c a 64 0 1 1 4 6 10 13 14 15 19 21 24 25 29 30 31 36 38 40 41 42 43 44 45 46 47 48 50 52 54 55 56 58 60 61 b 64 0 1 f # 15417 assign c a 64 0 1 1 2 6 9 11 12 14 15 17 20 21 23 29 30 31 32 36 38 41 43 46 47 48 49 51 52 54 56 59 62 b 64 0 1 1 2 6 9 11 12 14 15 17 20 21 23 29 30 31 32 36 38 41 43 46 47 48 49 51 52 54 56 59 62 # 15418 assign c a 64 0 1 1 2 6 9 11 12 14 15 17 20 21 23 29 30 31 32 36 38 41 43 46 47 48 49 51 52 54 56 59 62 b 64 0 1 0 1 2 3 5 6 8 11 14 17 24 25 29 30 31 32 33 34 36 37 38 40 46 47 50 51 52 54 55 59 62 # 15419 assign c a 64 0 1 e b 64 0 1 e # 15420 assign c a 64 0 1 e b 64 1 0 e # 15421 assign c a 64 0 1 e b 64 0 1 e # 15422 assign c a 64 0 1 e b 64 1 0 f # 15423 assign c a 64 0 1 e b 64 0 1 e # 15424 assign c a 64 0 1 e b 64 1 0 6 10 11 13 14 15 17 23 24 25 27 31 32 33 34 35 36 37 40 41 44 47 48 49 54 55 58 60 # 15425 assign c a 64 0 1 f b 64 0 1 f # 15426 assign c a 64 0 1 f b 64 1 0 e # 15427 assign c a 64 0 1 f b 64 0 1 f # 15428 assign c a 64 0 1 f b 64 1 0 f # 15429 assign c a 64 0 1 f b 64 0 1 f # 15430 assign c a 64 0 1 f b 64 1 0 0 3 4 5 7 8 9 13 17 19 22 24 25 26 27 28 31 33 34 41 42 43 44 46 48 50 52 53 54 55 57 58 60 61 # 15431 assign c a 64 0 1 0 2 4 16 18 19 22 23 29 30 33 37 38 39 41 42 43 47 48 49 50 54 55 56 58 60 61 62 b 64 0 1 0 2 4 16 18 19 22 23 29 30 33 37 38 39 41 42 43 47 48 49 50 54 55 56 58 60 61 62 # 15432 assign c a 64 0 1 0 2 4 16 18 19 22 23 29 30 33 37 38 39 41 42 43 47 48 49 50 54 55 56 58 60 61 62 b 64 1 0 e # 15433 assign c a 64 0 1 3 12 15 19 20 22 23 25 29 30 31 34 38 39 40 43 44 45 46 48 49 51 53 55 56 57 60 61 63 b 64 0 1 3 12 15 19 20 22 23 25 29 30 31 34 38 39 40 43 44 45 46 48 49 51 53 55 56 57 60 61 63 # 15434 assign c a 64 0 1 3 12 15 19 20 22 23 25 29 30 31 34 38 39 40 43 44 45 46 48 49 51 53 55 56 57 60 61 63 b 64 1 0 f # 15435 assign c a 64 0 1 1 3 7 8 9 10 14 17 19 20 21 23 25 26 28 31 33 34 39 40 44 46 50 52 54 57 58 59 61 62 b 64 0 1 1 3 7 8 9 10 14 17 19 20 21 23 25 26 28 31 33 34 39 40 44 46 50 52 54 57 58 59 61 62 # 15436 assign c a 64 0 1 1 3 7 8 9 10 14 17 19 20 21 23 25 26 28 31 33 34 39 40 44 46 50 52 54 57 58 59 61 62 b 64 1 0 0 1 2 3 4 6 7 8 12 14 15 16 17 19 25 28 30 31 33 34 37 41 42 43 46 47 50 53 54 55 56 59 60 62 # 15437 assign c a 64 0 1 e b 64 0 1 e # 15438 assign c a 64 0 1 e b 64 1 1 e # 15439 assign c a 64 0 1 e b 64 0 1 e # 15440 assign c a 64 0 1 e b 64 1 1 f # 15441 assign c a 64 0 1 e b 64 0 1 e # 15442 assign c a 64 0 1 e b 64 1 1 3 5 6 9 11 14 16 18 21 22 30 31 32 35 36 41 45 46 49 51 52 56 57 58 61 62 63 # 15443 assign c a 64 0 1 f b 64 0 1 f # 15444 assign c a 64 0 1 f b 64 1 1 e # 15445 assign c a 64 0 1 f b 64 0 1 f # 15446 assign c a 64 0 1 f b 64 1 1 f # 15447 assign c a 64 0 1 f b 64 0 1 f # 15448 assign c a 64 0 1 f b 64 1 1 0 2 3 4 9 10 11 12 13 16 17 19 21 23 24 27 28 30 31 32 33 34 35 38 39 41 42 43 48 50 55 58 60 61 # 15449 assign c a 64 0 1 0 4 8 12 14 15 16 17 18 20 24 26 30 32 34 35 40 42 44 45 47 54 56 57 58 59 61 b 64 0 1 0 4 8 12 14 15 16 17 18 20 24 26 30 32 34 35 40 42 44 45 47 54 56 57 58 59 61 # 15450 assign c a 64 0 1 0 4 8 12 14 15 16 17 18 20 24 26 30 32 34 35 40 42 44 45 47 54 56 57 58 59 61 b 64 1 1 e # 15451 assign c a 64 0 1 0 1 5 6 7 9 12 13 16 18 20 21 22 23 24 26 29 30 32 34 36 37 40 41 45 46 50 53 54 55 57 60 61 62 63 b 64 0 1 0 1 5 6 7 9 12 13 16 18 20 21 22 23 24 26 29 30 32 34 36 37 40 41 45 46 50 53 54 55 57 60 61 62 63 # 15452 assign c a 64 0 1 0 1 5 6 7 9 12 13 16 18 20 21 22 23 24 26 29 30 32 34 36 37 40 41 45 46 50 53 54 55 57 60 61 62 63 b 64 1 1 f # 15453 assign c a 64 0 1 2 7 8 9 12 14 15 16 17 19 20 22 23 24 27 32 34 35 36 38 39 43 44 46 51 54 56 59 60 61 b 64 0 1 2 7 8 9 12 14 15 16 17 19 20 22 23 24 27 32 34 35 36 38 39 43 44 46 51 54 56 59 60 61 # 15454 assign c a 64 0 1 2 7 8 9 12 14 15 16 17 19 20 22 23 24 27 32 34 35 36 38 39 43 44 46 51 54 56 59 60 61 b 64 1 1 3 6 7 8 9 10 11 13 16 17 22 23 24 26 27 28 32 33 37 38 40 41 42 46 48 50 52 53 55 60 61 # 15455 assign c a 64 1 0 e b 64 1 0 e # 15456 assign c a 64 1 0 e b 64 0 0 e # 15457 assign c a 64 1 0 e b 64 1 0 e # 15458 assign c a 64 1 0 e b 64 0 0 f # 15459 assign c a 64 1 0 e b 64 1 0 e # 15460 assign c a 64 1 0 e b 64 0 0 1 2 3 4 5 6 7 9 10 11 13 16 19 21 23 24 25 26 27 28 33 34 35 36 37 38 40 41 45 49 51 52 53 55 56 60 61 62 # 15461 assign c a 64 1 0 f b 64 1 0 f # 15462 assign c a 64 1 0 f b 64 0 0 e # 15463 assign c a 64 1 0 f b 64 1 0 f # 15464 assign c a 64 1 0 f b 64 0 0 f # 15465 assign c a 64 1 0 f b 64 1 0 f # 15466 assign c a 64 1 0 f b 64 0 0 0 1 4 5 6 7 8 9 10 12 14 15 17 18 20 22 24 26 27 29 30 31 38 39 41 43 45 46 47 48 49 51 52 55 56 59 60 62 # 15467 assign c a 64 1 0 0 2 3 4 5 6 7 8 10 13 16 18 19 20 25 30 32 33 35 38 41 43 44 45 46 49 51 53 55 56 57 b 64 1 0 0 2 3 4 5 6 7 8 10 13 16 18 19 20 25 30 32 33 35 38 41 43 44 45 46 49 51 53 55 56 57 # 15468 assign c a 64 1 0 0 2 3 4 5 6 7 8 10 13 16 18 19 20 25 30 32 33 35 38 41 43 44 45 46 49 51 53 55 56 57 b 64 0 0 e # 15469 assign c a 64 1 0 0 1 4 5 6 8 12 14 20 21 23 24 26 28 30 31 33 36 37 38 39 41 49 50 56 60 63 b 64 1 0 0 1 4 5 6 8 12 14 20 21 23 24 26 28 30 31 33 36 37 38 39 41 49 50 56 60 63 # 15470 assign c a 64 1 0 0 1 4 5 6 8 12 14 20 21 23 24 26 28 30 31 33 36 37 38 39 41 49 50 56 60 63 b 64 0 0 f # 15471 assign c a 64 1 0 5 6 7 8 10 14 15 17 19 20 21 22 23 24 27 28 30 31 32 33 36 39 43 44 45 46 47 48 50 51 53 57 58 59 61 62 b 64 1 0 5 6 7 8 10 14 15 17 19 20 21 22 23 24 27 28 30 31 32 33 36 39 43 44 45 46 47 48 50 51 53 57 58 59 61 62 # 15472 assign c a 64 1 0 5 6 7 8 10 14 15 17 19 20 21 22 23 24 27 28 30 31 32 33 36 39 43 44 45 46 47 48 50 51 53 57 58 59 61 62 b 64 0 0 0 2 3 5 6 7 9 10 11 12 13 14 15 17 19 21 22 23 24 25 26 27 28 29 32 33 36 37 40 43 46 47 48 50 53 55 56 57 58 60 62 63 # 15473 assign c a 64 1 0 e b 64 1 0 e # 15474 assign c a 64 1 0 e b 64 0 1 e # 15475 assign c a 64 1 0 e b 64 1 0 e # 15476 assign c a 64 1 0 e b 64 0 1 f # 15477 assign c a 64 1 0 e b 64 1 0 e # 15478 assign c a 64 1 0 e b 64 0 1 5 9 11 12 13 14 15 21 23 24 28 31 32 35 37 45 47 49 51 52 53 54 58 59 60 62 # 15479 assign c a 64 1 0 f b 64 1 0 f # 15480 assign c a 64 1 0 f b 64 0 1 e # 15481 assign c a 64 1 0 f b 64 1 0 f # 15482 assign c a 64 1 0 f b 64 0 1 f # 15483 assign c a 64 1 0 f b 64 1 0 f # 15484 assign c a 64 1 0 f b 64 0 1 0 3 4 5 9 10 11 12 17 18 21 22 23 24 25 26 27 28 29 31 32 33 34 35 39 40 43 44 45 46 48 49 50 52 54 55 57 61 62 # 15485 assign c a 64 1 0 1 3 4 5 6 7 10 13 14 15 16 17 24 25 26 29 30 31 34 37 39 40 44 47 52 54 55 57 59 62 63 b 64 1 0 1 3 4 5 6 7 10 13 14 15 16 17 24 25 26 29 30 31 34 37 39 40 44 47 52 54 55 57 59 62 63 # 15486 assign c a 64 1 0 1 3 4 5 6 7 10 13 14 15 16 17 24 25 26 29 30 31 34 37 39 40 44 47 52 54 55 57 59 62 63 b 64 0 1 e # 15487 assign c a 64 1 0 0 1 5 9 10 13 14 18 20 21 22 23 24 26 33 35 36 37 39 41 43 44 50 53 55 56 57 62 63 b 64 1 0 0 1 5 9 10 13 14 18 20 21 22 23 24 26 33 35 36 37 39 41 43 44 50 53 55 56 57 62 63 # 15488 assign c a 64 1 0 0 1 5 9 10 13 14 18 20 21 22 23 24 26 33 35 36 37 39 41 43 44 50 53 55 56 57 62 63 b 64 0 1 f # 15489 assign c a 64 1 0 3 4 5 6 8 11 15 16 17 19 20 22 23 27 28 29 30 31 34 36 37 38 39 41 43 45 46 48 49 55 58 61 63 b 64 1 0 3 4 5 6 8 11 15 16 17 19 20 22 23 27 28 29 30 31 34 36 37 38 39 41 43 45 46 48 49 55 58 61 63 # 15490 assign c a 64 1 0 3 4 5 6 8 11 15 16 17 19 20 22 23 27 28 29 30 31 34 36 37 38 39 41 43 45 46 48 49 55 58 61 63 b 64 0 1 0 2 3 5 6 8 12 13 15 16 17 20 24 26 29 36 37 38 39 42 46 50 52 54 55 56 59 63 # 15491 assign c a 64 1 0 e b 64 1 0 e # 15492 assign c a 64 1 0 e b 64 1 0 e # 15493 assign c a 64 1 0 e b 64 1 0 e # 15494 assign c a 64 1 0 e b 64 1 0 f # 15495 assign c a 64 1 0 e b 64 1 0 e # 15496 assign c a 64 1 0 e b 64 1 0 0 3 7 10 11 12 13 14 17 19 20 22 23 24 25 26 29 30 34 35 38 39 40 41 42 43 44 45 47 49 50 52 53 55 56 57 58 60 61 # 15497 assign c a 64 1 0 f b 64 1 0 f # 15498 assign c a 64 1 0 f b 64 1 0 e # 15499 assign c a 64 1 0 f b 64 1 0 f # 15500 assign c a 64 1 0 f b 64 1 0 f # 15501 assign c a 64 1 0 f b 64 1 0 f # 15502 assign c a 64 1 0 f b 64 1 0 3 4 6 7 8 10 11 14 15 16 17 19 22 25 28 29 30 31 34 36 39 40 44 46 47 48 50 52 54 58 59 61 62 63 # 15503 assign c a 64 1 0 1 3 5 6 11 14 16 18 20 21 22 24 30 32 36 41 43 45 50 54 56 57 62 b 64 1 0 1 3 5 6 11 14 16 18 20 21 22 24 30 32 36 41 43 45 50 54 56 57 62 # 15504 assign c a 64 1 0 1 3 5 6 11 14 16 18 20 21 22 24 30 32 36 41 43 45 50 54 56 57 62 b 64 1 0 e # 15505 assign c a 64 1 0 0 3 5 6 7 8 10 14 15 16 20 21 23 24 25 29 33 34 35 36 37 38 39 41 48 51 53 54 56 57 58 60 62 b 64 1 0 0 3 5 6 7 8 10 14 15 16 20 21 23 24 25 29 33 34 35 36 37 38 39 41 48 51 53 54 56 57 58 60 62 # 15506 assign c a 64 1 0 0 3 5 6 7 8 10 14 15 16 20 21 23 24 25 29 33 34 35 36 37 38 39 41 48 51 53 54 56 57 58 60 62 b 64 1 0 f # 15507 assign c a 64 1 0 1 2 4 5 7 9 11 12 13 14 15 19 25 26 29 34 37 39 40 41 43 47 48 49 53 54 56 57 58 59 60 b 64 1 0 1 2 4 5 7 9 11 12 13 14 15 19 25 26 29 34 37 39 40 41 43 47 48 49 53 54 56 57 58 59 60 # 15508 assign c a 64 1 0 1 2 4 5 7 9 11 12 13 14 15 19 25 26 29 34 37 39 40 41 43 47 48 49 53 54 56 57 58 59 60 b 64 1 0 0 3 5 6 7 10 11 12 14 15 20 22 23 25 26 27 28 31 33 34 35 38 39 40 42 44 45 47 48 51 52 54 55 58 60 62 # 15509 assign c a 64 1 0 e b 64 1 0 e # 15510 assign c a 64 1 0 e b 64 1 1 e # 15511 assign c a 64 1 0 e b 64 1 0 e # 15512 assign c a 64 1 0 e b 64 1 1 f # 15513 assign c a 64 1 0 e b 64 1 0 e # 15514 assign c a 64 1 0 e b 64 1 1 0 1 2 5 7 11 13 14 19 20 21 22 25 34 40 41 43 44 47 48 50 51 53 55 56 57 61 # 15515 assign c a 64 1 0 f b 64 1 0 f # 15516 assign c a 64 1 0 f b 64 1 1 e # 15517 assign c a 64 1 0 f b 64 1 0 f # 15518 assign c a 64 1 0 f b 64 1 1 f # 15519 assign c a 64 1 0 f b 64 1 0 f # 15520 assign c a 64 1 0 f b 64 1 1 2 6 12 15 16 18 24 25 29 30 31 33 35 38 39 40 42 43 44 46 47 49 51 52 53 54 55 59 61 62 63 # 15521 assign c a 64 1 0 0 1 3 6 7 8 9 10 12 23 24 26 30 35 36 37 38 39 40 43 44 48 52 53 54 57 58 59 61 62 63 b 64 1 0 0 1 3 6 7 8 9 10 12 23 24 26 30 35 36 37 38 39 40 43 44 48 52 53 54 57 58 59 61 62 63 # 15522 assign c a 64 1 0 0 1 3 6 7 8 9 10 12 23 24 26 30 35 36 37 38 39 40 43 44 48 52 53 54 57 58 59 61 62 63 b 64 1 1 e # 15523 assign c a 64 1 0 6 7 8 10 11 12 13 14 15 18 21 22 24 27 30 34 35 37 38 40 42 43 45 47 51 53 59 60 61 b 64 1 0 6 7 8 10 11 12 13 14 15 18 21 22 24 27 30 34 35 37 38 40 42 43 45 47 51 53 59 60 61 # 15524 assign c a 64 1 0 6 7 8 10 11 12 13 14 15 18 21 22 24 27 30 34 35 37 38 40 42 43 45 47 51 53 59 60 61 b 64 1 1 f # 15525 assign c a 64 1 0 1 2 3 4 5 6 7 9 11 12 13 14 17 19 20 24 27 30 31 33 36 38 39 42 46 47 50 52 54 55 56 60 62 b 64 1 0 1 2 3 4 5 6 7 9 11 12 13 14 17 19 20 24 27 30 31 33 36 38 39 42 46 47 50 52 54 55 56 60 62 # 15526 assign c a 64 1 0 1 2 3 4 5 6 7 9 11 12 13 14 17 19 20 24 27 30 31 33 36 38 39 42 46 47 50 52 54 55 56 60 62 b 64 1 1 4 8 9 10 13 15 19 20 22 24 26 28 29 30 36 37 38 39 40 41 44 45 47 49 50 51 53 55 56 59 60 62 # 15527 assign c a 64 1 1 e b 64 1 1 e # 15528 assign c a 64 1 1 e b 64 0 0 e # 15529 assign c a 64 1 1 e b 64 1 1 e # 15530 assign c a 64 1 1 e b 64 0 0 f # 15531 assign c a 64 1 1 e b 64 1 1 e # 15532 assign c a 64 1 1 e b 64 0 0 6 7 8 11 12 14 17 21 24 25 27 31 32 33 34 35 36 37 38 39 42 44 47 49 51 53 56 60 61 62 # 15533 assign c a 64 1 1 f b 64 1 1 f # 15534 assign c a 64 1 1 f b 64 0 0 e # 15535 assign c a 64 1 1 f b 64 1 1 f # 15536 assign c a 64 1 1 f b 64 0 0 f # 15537 assign c a 64 1 1 f b 64 1 1 f # 15538 assign c a 64 1 1 f b 64 0 0 1 4 8 12 13 15 16 17 18 20 21 22 23 28 30 34 36 40 41 42 44 47 50 53 55 56 57 58 59 60 61 # 15539 assign c a 64 1 1 0 3 4 5 7 8 11 12 13 14 16 17 18 22 24 25 27 28 29 31 33 36 37 39 40 42 43 46 49 51 52 55 57 58 60 62 b 64 1 1 0 3 4 5 7 8 11 12 13 14 16 17 18 22 24 25 27 28 29 31 33 36 37 39 40 42 43 46 49 51 52 55 57 58 60 62 # 15540 assign c a 64 1 1 0 3 4 5 7 8 11 12 13 14 16 17 18 22 24 25 27 28 29 31 33 36 37 39 40 42 43 46 49 51 52 55 57 58 60 62 b 64 0 0 e # 15541 assign c a 64 1 1 0 2 3 5 10 11 12 13 14 15 16 18 19 20 21 22 24 25 26 28 29 30 31 34 38 39 41 42 44 45 49 52 53 54 55 56 59 61 62 b 64 1 1 0 2 3 5 10 11 12 13 14 15 16 18 19 20 21 22 24 25 26 28 29 30 31 34 38 39 41 42 44 45 49 52 53 54 55 56 59 61 62 # 15542 assign c a 64 1 1 0 2 3 5 10 11 12 13 14 15 16 18 19 20 21 22 24 25 26 28 29 30 31 34 38 39 41 42 44 45 49 52 53 54 55 56 59 61 62 b 64 0 0 f # 15543 assign c a 64 1 1 2 3 4 5 6 9 13 14 15 16 17 18 19 20 21 23 25 28 30 32 33 36 38 40 44 47 52 53 54 56 58 60 61 62 b 64 1 1 2 3 4 5 6 9 13 14 15 16 17 18 19 20 21 23 25 28 30 32 33 36 38 40 44 47 52 53 54 56 58 60 61 62 # 15544 assign c a 64 1 1 2 3 4 5 6 9 13 14 15 16 17 18 19 20 21 23 25 28 30 32 33 36 38 40 44 47 52 53 54 56 58 60 61 62 b 64 0 0 0 1 2 5 6 8 10 11 13 14 15 18 21 23 28 30 31 33 37 38 43 47 50 51 54 55 56 59 61 63 # 15545 assign c a 64 1 1 e b 64 1 1 e # 15546 assign c a 64 1 1 e b 64 0 1 e # 15547 assign c a 64 1 1 e b 64 1 1 e # 15548 assign c a 64 1 1 e b 64 0 1 f # 15549 assign c a 64 1 1 e b 64 1 1 e # 15550 assign c a 64 1 1 e b 64 0 1 0 1 4 5 6 7 10 11 14 15 16 17 18 23 24 26 30 32 35 38 39 42 43 44 46 49 50 53 55 59 # 15551 assign c a 64 1 1 f b 64 1 1 f # 15552 assign c a 64 1 1 f b 64 0 1 e # 15553 assign c a 64 1 1 f b 64 1 1 f # 15554 assign c a 64 1 1 f b 64 0 1 f # 15555 assign c a 64 1 1 f b 64 1 1 f # 15556 assign c a 64 1 1 f b 64 0 1 1 3 4 5 12 14 15 21 23 25 26 27 28 32 35 37 39 40 41 43 45 46 47 51 53 54 57 62 # 15557 assign c a 64 1 1 0 4 5 7 8 9 10 12 14 16 19 20 25 26 29 30 33 34 36 40 41 42 43 45 46 48 51 53 55 59 61 62 63 b 64 1 1 0 4 5 7 8 9 10 12 14 16 19 20 25 26 29 30 33 34 36 40 41 42 43 45 46 48 51 53 55 59 61 62 63 # 15558 assign c a 64 1 1 0 4 5 7 8 9 10 12 14 16 19 20 25 26 29 30 33 34 36 40 41 42 43 45 46 48 51 53 55 59 61 62 63 b 64 0 1 e # 15559 assign c a 64 1 1 0 1 2 3 4 7 9 10 11 12 13 14 15 16 18 20 24 30 32 33 35 38 41 46 49 50 52 54 55 56 58 61 62 b 64 1 1 0 1 2 3 4 7 9 10 11 12 13 14 15 16 18 20 24 30 32 33 35 38 41 46 49 50 52 54 55 56 58 61 62 # 15560 assign c a 64 1 1 0 1 2 3 4 7 9 10 11 12 13 14 15 16 18 20 24 30 32 33 35 38 41 46 49 50 52 54 55 56 58 61 62 b 64 0 1 f # 15561 assign c a 64 1 1 0 1 6 7 9 11 15 16 19 22 25 27 28 31 33 34 35 37 38 39 40 41 43 45 46 48 49 53 54 55 56 58 63 b 64 1 1 0 1 6 7 9 11 15 16 19 22 25 27 28 31 33 34 35 37 38 39 40 41 43 45 46 48 49 53 54 55 56 58 63 # 15562 assign c a 64 1 1 0 1 6 7 9 11 15 16 19 22 25 27 28 31 33 34 35 37 38 39 40 41 43 45 46 48 49 53 54 55 56 58 63 b 64 0 1 3 4 7 9 10 12 14 15 17 19 20 21 23 27 31 32 33 35 37 40 42 43 44 45 48 49 50 51 52 55 56 57 58 62 63 # 15563 assign c a 64 1 1 e b 64 1 1 e # 15564 assign c a 64 1 1 e b 64 1 0 e # 15565 assign c a 64 1 1 e b 64 1 1 e # 15566 assign c a 64 1 1 e b 64 1 0 f # 15567 assign c a 64 1 1 e b 64 1 1 e # 15568 assign c a 64 1 1 e b 64 1 0 2 6 9 12 13 20 21 23 25 26 27 29 30 34 35 36 37 40 41 43 45 47 55 59 63 # 15569 assign c a 64 1 1 f b 64 1 1 f # 15570 assign c a 64 1 1 f b 64 1 0 e # 15571 assign c a 64 1 1 f b 64 1 1 f # 15572 assign c a 64 1 1 f b 64 1 0 f # 15573 assign c a 64 1 1 f b 64 1 1 f # 15574 assign c a 64 1 1 f b 64 1 0 0 2 6 8 10 15 16 17 19 22 23 24 27 29 30 32 34 36 39 40 43 44 45 46 49 51 57 59 60 61 63 # 15575 assign c a 64 1 1 1 2 6 8 11 12 13 16 17 20 21 22 24 25 28 29 32 34 36 37 39 40 41 43 44 45 47 49 53 54 56 58 59 61 63 b 64 1 1 1 2 6 8 11 12 13 16 17 20 21 22 24 25 28 29 32 34 36 37 39 40 41 43 44 45 47 49 53 54 56 58 59 61 63 # 15576 assign c a 64 1 1 1 2 6 8 11 12 13 16 17 20 21 22 24 25 28 29 32 34 36 37 39 40 41 43 44 45 47 49 53 54 56 58 59 61 63 b 64 1 0 e # 15577 assign c a 64 1 1 3 4 5 6 7 10 12 14 18 19 21 22 25 27 28 29 30 31 32 33 34 35 36 37 38 40 41 43 47 48 51 55 58 59 62 b 64 1 1 3 4 5 6 7 10 12 14 18 19 21 22 25 27 28 29 30 31 32 33 34 35 36 37 38 40 41 43 47 48 51 55 58 59 62 # 15578 assign c a 64 1 1 3 4 5 6 7 10 12 14 18 19 21 22 25 27 28 29 30 31 32 33 34 35 36 37 38 40 41 43 47 48 51 55 58 59 62 b 64 1 0 f # 15579 assign c a 64 1 1 1 4 7 9 10 11 16 17 23 24 25 26 29 31 32 33 36 37 40 41 42 47 49 51 54 59 61 62 63 b 64 1 1 1 4 7 9 10 11 16 17 23 24 25 26 29 31 32 33 36 37 40 41 42 47 49 51 54 59 61 62 63 # 15580 assign c a 64 1 1 1 4 7 9 10 11 16 17 23 24 25 26 29 31 32 33 36 37 40 41 42 47 49 51 54 59 61 62 63 b 64 1 0 0 3 4 5 6 7 8 9 10 11 14 15 18 20 21 22 31 33 34 36 37 40 44 47 48 52 54 57 58 59 62 63 # 15581 assign c a 64 1 1 e b 64 1 1 e # 15582 assign c a 64 1 1 e b 64 1 1 e # 15583 assign c a 64 1 1 e b 64 1 1 e # 15584 assign c a 64 1 1 e b 64 1 1 f # 15585 assign c a 64 1 1 e b 64 1 1 e # 15586 assign c a 64 1 1 e b 64 1 1 3 7 8 9 16 17 18 19 22 23 25 27 28 32 33 35 37 38 39 40 44 45 48 52 54 56 58 59 60 # 15587 assign c a 64 1 1 f b 64 1 1 f # 15588 assign c a 64 1 1 f b 64 1 1 e # 15589 assign c a 64 1 1 f b 64 1 1 f # 15590 assign c a 64 1 1 f b 64 1 1 f # 15591 assign c a 64 1 1 f b 64 1 1 f # 15592 assign c a 64 1 1 f b 64 1 1 7 8 9 12 13 14 15 16 19 22 24 25 29 30 31 36 37 39 40 41 43 46 49 51 55 57 59 60 63 # 15593 assign c a 64 1 1 0 1 3 5 6 8 9 10 13 14 15 16 17 18 19 22 27 28 29 30 31 34 35 37 40 43 44 46 47 50 52 53 54 55 58 60 61 b 64 1 1 0 1 3 5 6 8 9 10 13 14 15 16 17 18 19 22 27 28 29 30 31 34 35 37 40 43 44 46 47 50 52 53 54 55 58 60 61 # 15594 assign c a 64 1 1 0 1 3 5 6 8 9 10 13 14 15 16 17 18 19 22 27 28 29 30 31 34 35 37 40 43 44 46 47 50 52 53 54 55 58 60 61 b 64 1 1 e # 15595 assign c a 64 1 1 3 4 5 7 8 9 10 11 12 14 16 18 19 21 22 24 25 26 27 28 29 33 36 38 39 41 42 48 50 52 53 54 55 58 63 b 64 1 1 3 4 5 7 8 9 10 11 12 14 16 18 19 21 22 24 25 26 27 28 29 33 36 38 39 41 42 48 50 52 53 54 55 58 63 # 15596 assign c a 64 1 1 3 4 5 7 8 9 10 11 12 14 16 18 19 21 22 24 25 26 27 28 29 33 36 38 39 41 42 48 50 52 53 54 55 58 63 b 64 1 1 f # 15597 assign c a 64 1 1 1 2 5 6 8 9 10 11 20 24 26 28 30 32 33 34 36 37 38 39 42 43 44 45 46 50 52 54 56 58 59 60 61 63 b 64 1 1 1 2 5 6 8 9 10 11 20 24 26 28 30 32 33 34 36 37 38 39 42 43 44 45 46 50 52 54 56 58 59 60 61 63 # 15598 assign c a 64 1 1 1 2 5 6 8 9 10 11 20 24 26 28 30 32 33 34 36 37 38 39 42 43 44 45 46 50 52 54 56 58 59 60 61 63 b 64 1 1 0 1 2 3 4 5 10 11 13 17 18 22 23 24 26 27 29 31 32 34 35 38 41 43 44 45 48 49 50 51 54 56 57 60 61 63 # 15599 assign c a 65 0 0 e b 65 0 0 e # 15600 assign c a 65 0 0 e b 65 0 0 e # 15601 assign c a 65 0 0 e b 65 0 0 e # 15602 assign c a 65 0 0 e b 65 0 0 f # 15603 assign c a 65 0 0 e b 65 0 0 e # 15604 assign c a 65 0 0 e b 65 0 0 1 6 7 13 14 15 16 17 18 21 22 24 25 28 29 31 32 33 35 38 39 40 44 47 48 50 53 55 56 57 60 61 # 15605 assign c a 65 0 0 f b 65 0 0 f # 15606 assign c a 65 0 0 f b 65 0 0 e # 15607 assign c a 65 0 0 f b 65 0 0 f # 15608 assign c a 65 0 0 f b 65 0 0 f # 15609 assign c a 65 0 0 f b 65 0 0 f # 15610 assign c a 65 0 0 f b 65 0 0 0 2 8 9 11 12 14 19 20 22 23 24 27 28 29 31 33 35 37 41 44 46 52 53 54 55 59 61 62 63 64 # 15611 assign c a 65 0 0 0 1 3 4 7 8 9 10 11 13 15 17 20 24 26 29 34 36 39 40 41 42 44 48 49 51 52 53 54 55 57 59 62 63 64 b 65 0 0 0 1 3 4 7 8 9 10 11 13 15 17 20 24 26 29 34 36 39 40 41 42 44 48 49 51 52 53 54 55 57 59 62 63 64 # 15612 assign c a 65 0 0 0 1 3 4 7 8 9 10 11 13 15 17 20 24 26 29 34 36 39 40 41 42 44 48 49 51 52 53 54 55 57 59 62 63 64 b 65 0 0 e # 15613 assign c a 65 0 0 0 2 4 5 7 9 10 11 12 13 14 15 18 22 24 25 26 28 29 31 34 35 36 38 40 43 45 46 47 51 52 55 57 58 59 60 62 63 b 65 0 0 0 2 4 5 7 9 10 11 12 13 14 15 18 22 24 25 26 28 29 31 34 35 36 38 40 43 45 46 47 51 52 55 57 58 59 60 62 63 # 15614 assign c a 65 0 0 0 2 4 5 7 9 10 11 12 13 14 15 18 22 24 25 26 28 29 31 34 35 36 38 40 43 45 46 47 51 52 55 57 58 59 60 62 63 b 65 0 0 f # 15615 assign c a 65 0 0 0 1 3 4 5 6 9 10 12 13 14 17 19 20 21 22 23 24 25 26 28 29 30 32 38 42 49 52 55 57 58 59 60 61 64 b 65 0 0 0 1 3 4 5 6 9 10 12 13 14 17 19 20 21 22 23 24 25 26 28 29 30 32 38 42 49 52 55 57 58 59 60 61 64 # 15616 assign c a 65 0 0 0 1 3 4 5 6 9 10 12 13 14 17 19 20 21 22 23 24 25 26 28 29 30 32 38 42 49 52 55 57 58 59 60 61 64 b 65 0 0 0 1 4 5 6 11 12 13 20 21 22 23 24 25 27 29 30 32 33 34 35 36 37 38 40 43 47 48 51 53 56 57 59 60 61 63 64 # 15617 assign c a 65 0 0 e b 65 0 0 e # 15618 assign c a 65 0 0 e b 65 0 1 e # 15619 assign c a 65 0 0 e b 65 0 0 e # 15620 assign c a 65 0 0 e b 65 0 1 f # 15621 assign c a 65 0 0 e b 65 0 0 e # 15622 assign c a 65 0 0 e b 65 0 1 0 1 2 3 4 5 6 10 11 12 14 16 18 19 20 23 26 28 29 31 32 38 40 44 45 46 47 52 53 58 62 # 15623 assign c a 65 0 0 f b 65 0 0 f # 15624 assign c a 65 0 0 f b 65 0 1 e # 15625 assign c a 65 0 0 f b 65 0 0 f # 15626 assign c a 65 0 0 f b 65 0 1 f # 15627 assign c a 65 0 0 f b 65 0 0 f # 15628 assign c a 65 0 0 f b 65 0 1 1 2 3 7 9 10 12 13 14 18 20 22 24 25 26 28 30 32 36 37 40 42 45 46 49 50 52 54 55 57 60 61 62 63 # 15629 assign c a 65 0 0 3 4 6 10 11 12 15 16 18 21 22 23 24 26 27 29 31 33 34 38 40 41 43 44 45 47 52 55 56 58 63 b 65 0 0 3 4 6 10 11 12 15 16 18 21 22 23 24 26 27 29 31 33 34 38 40 41 43 44 45 47 52 55 56 58 63 # 15630 assign c a 65 0 0 3 4 6 10 11 12 15 16 18 21 22 23 24 26 27 29 31 33 34 38 40 41 43 44 45 47 52 55 56 58 63 b 65 0 1 e # 15631 assign c a 65 0 0 0 5 9 15 16 17 18 21 23 24 25 28 31 32 33 36 37 38 40 41 42 46 47 49 51 54 60 61 63 64 b 65 0 0 0 5 9 15 16 17 18 21 23 24 25 28 31 32 33 36 37 38 40 41 42 46 47 49 51 54 60 61 63 64 # 15632 assign c a 65 0 0 0 5 9 15 16 17 18 21 23 24 25 28 31 32 33 36 37 38 40 41 42 46 47 49 51 54 60 61 63 64 b 65 0 1 f # 15633 assign c a 65 0 0 0 2 4 7 14 18 19 21 28 29 34 36 40 42 44 48 54 55 56 57 59 60 61 b 65 0 0 0 2 4 7 14 18 19 21 28 29 34 36 40 42 44 48 54 55 56 57 59 60 61 # 15634 assign c a 65 0 0 0 2 4 7 14 18 19 21 28 29 34 36 40 42 44 48 54 55 56 57 59 60 61 b 65 0 1 4 10 11 12 14 17 19 20 22 23 25 26 28 29 33 34 37 44 45 46 48 51 55 56 59 61 63 # 15635 assign c a 65 0 0 e b 65 0 0 e # 15636 assign c a 65 0 0 e b 65 1 0 e # 15637 assign c a 65 0 0 e b 65 0 0 e # 15638 assign c a 65 0 0 e b 65 1 0 f # 15639 assign c a 65 0 0 e b 65 0 0 e # 15640 assign c a 65 0 0 e b 65 1 0 0 1 2 3 7 9 10 12 13 15 20 23 24 28 29 30 31 32 33 34 36 42 43 46 48 50 52 55 56 57 59 60 63 64 # 15641 assign c a 65 0 0 f b 65 0 0 f # 15642 assign c a 65 0 0 f b 65 1 0 e # 15643 assign c a 65 0 0 f b 65 0 0 f # 15644 assign c a 65 0 0 f b 65 1 0 f # 15645 assign c a 65 0 0 f b 65 0 0 f # 15646 assign c a 65 0 0 f b 65 1 0 2 4 6 7 9 11 12 13 14 16 20 21 25 29 31 35 36 37 38 40 44 46 47 49 50 52 54 57 58 59 60 64 # 15647 assign c a 65 0 0 0 2 3 8 9 11 12 15 17 18 21 22 24 27 28 29 30 31 32 36 37 38 40 43 45 47 48 53 54 55 58 60 61 63 b 65 0 0 0 2 3 8 9 11 12 15 17 18 21 22 24 27 28 29 30 31 32 36 37 38 40 43 45 47 48 53 54 55 58 60 61 63 # 15648 assign c a 65 0 0 0 2 3 8 9 11 12 15 17 18 21 22 24 27 28 29 30 31 32 36 37 38 40 43 45 47 48 53 54 55 58 60 61 63 b 65 1 0 e # 15649 assign c a 65 0 0 0 2 3 4 6 8 10 11 12 14 16 17 19 20 23 25 26 28 29 31 36 39 40 42 43 44 45 46 48 52 58 62 63 64 b 65 0 0 0 2 3 4 6 8 10 11 12 14 16 17 19 20 23 25 26 28 29 31 36 39 40 42 43 44 45 46 48 52 58 62 63 64 # 15650 assign c a 65 0 0 0 2 3 4 6 8 10 11 12 14 16 17 19 20 23 25 26 28 29 31 36 39 40 42 43 44 45 46 48 52 58 62 63 64 b 65 1 0 f # 15651 assign c a 65 0 0 1 2 3 5 7 8 13 15 17 18 19 22 23 24 29 30 31 32 33 37 41 42 44 45 47 48 49 50 51 53 54 56 57 60 62 63 b 65 0 0 1 2 3 5 7 8 13 15 17 18 19 22 23 24 29 30 31 32 33 37 41 42 44 45 47 48 49 50 51 53 54 56 57 60 62 63 # 15652 assign c a 65 0 0 1 2 3 5 7 8 13 15 17 18 19 22 23 24 29 30 31 32 33 37 41 42 44 45 47 48 49 50 51 53 54 56 57 60 62 63 b 65 1 0 2 4 5 6 8 11 16 18 19 21 22 25 27 28 32 33 34 36 37 38 39 40 45 46 49 51 52 53 54 56 59 # 15653 assign c a 65 0 0 e b 65 0 0 e # 15654 assign c a 65 0 0 e b 65 1 1 e # 15655 assign c a 65 0 0 e b 65 0 0 e # 15656 assign c a 65 0 0 e b 65 1 1 f # 15657 assign c a 65 0 0 e b 65 0 0 e # 15658 assign c a 65 0 0 e b 65 1 1 1 4 7 8 9 11 12 13 17 20 24 26 28 29 30 32 37 41 42 44 46 49 53 56 59 62 63 # 15659 assign c a 65 0 0 f b 65 0 0 f # 15660 assign c a 65 0 0 f b 65 1 1 e # 15661 assign c a 65 0 0 f b 65 0 0 f # 15662 assign c a 65 0 0 f b 65 1 1 f # 15663 assign c a 65 0 0 f b 65 0 0 f # 15664 assign c a 65 0 0 f b 65 1 1 2 4 6 7 9 10 12 14 15 16 17 23 24 26 29 30 31 33 34 36 37 40 42 44 50 51 52 54 55 56 57 59 60 61 62 64 # 15665 assign c a 65 0 0 0 1 2 5 7 8 9 12 13 14 16 17 24 26 27 28 31 32 38 39 45 46 48 50 52 60 61 63 64 b 65 0 0 0 1 2 5 7 8 9 12 13 14 16 17 24 26 27 28 31 32 38 39 45 46 48 50 52 60 61 63 64 # 15666 assign c a 65 0 0 0 1 2 5 7 8 9 12 13 14 16 17 24 26 27 28 31 32 38 39 45 46 48 50 52 60 61 63 64 b 65 1 1 e # 15667 assign c a 65 0 0 1 3 4 10 19 20 21 24 25 27 28 29 30 32 33 35 37 39 44 46 48 51 52 55 57 58 60 62 63 b 65 0 0 1 3 4 10 19 20 21 24 25 27 28 29 30 32 33 35 37 39 44 46 48 51 52 55 57 58 60 62 63 # 15668 assign c a 65 0 0 1 3 4 10 19 20 21 24 25 27 28 29 30 32 33 35 37 39 44 46 48 51 52 55 57 58 60 62 63 b 65 1 1 f # 15669 assign c a 65 0 0 1 2 3 7 8 9 10 12 15 18 19 20 21 24 29 30 32 35 36 37 38 39 42 44 54 55 56 57 60 61 62 63 b 65 0 0 1 2 3 7 8 9 10 12 15 18 19 20 21 24 29 30 32 35 36 37 38 39 42 44 54 55 56 57 60 61 62 63 # 15670 assign c a 65 0 0 1 2 3 7 8 9 10 12 15 18 19 20 21 24 29 30 32 35 36 37 38 39 42 44 54 55 56 57 60 61 62 63 b 65 1 1 1 3 7 9 10 12 13 14 19 20 22 23 24 25 26 27 28 29 31 33 34 35 36 38 41 42 44 45 47 48 49 50 51 54 57 58 60 64 # 15671 assign c a 65 0 1 e b 65 0 1 e # 15672 assign c a 65 0 1 e b 65 0 0 e # 15673 assign c a 65 0 1 e b 65 0 1 e # 15674 assign c a 65 0 1 e b 65 0 0 f # 15675 assign c a 65 0 1 e b 65 0 1 e # 15676 assign c a 65 0 1 e b 65 0 0 2 3 6 7 8 10 11 12 13 14 15 17 19 20 23 25 27 28 29 30 32 33 34 36 37 39 41 42 43 44 46 49 51 53 54 55 58 60 62 63 # 15677 assign c a 65 0 1 f b 65 0 1 f # 15678 assign c a 65 0 1 f b 65 0 0 e # 15679 assign c a 65 0 1 f b 65 0 1 f # 15680 assign c a 65 0 1 f b 65 0 0 f # 15681 assign c a 65 0 1 f b 65 0 1 f # 15682 assign c a 65 0 1 f b 65 0 0 0 3 6 8 9 12 14 15 16 17 22 23 24 26 29 30 31 32 33 34 37 38 40 42 44 50 51 52 53 55 59 60 61 62 63 64 # 15683 assign c a 65 0 1 6 7 11 12 13 14 16 17 18 19 21 24 27 28 30 32 34 36 37 39 41 42 43 44 45 47 50 51 52 55 57 58 61 62 b 65 0 1 6 7 11 12 13 14 16 17 18 19 21 24 27 28 30 32 34 36 37 39 41 42 43 44 45 47 50 51 52 55 57 58 61 62 # 15684 assign c a 65 0 1 6 7 11 12 13 14 16 17 18 19 21 24 27 28 30 32 34 36 37 39 41 42 43 44 45 47 50 51 52 55 57 58 61 62 b 65 0 0 e # 15685 assign c a 65 0 1 0 1 2 4 5 6 7 8 9 12 14 16 17 20 22 23 26 31 32 35 38 40 42 43 45 50 52 55 56 59 61 62 b 65 0 1 0 1 2 4 5 6 7 8 9 12 14 16 17 20 22 23 26 31 32 35 38 40 42 43 45 50 52 55 56 59 61 62 # 15686 assign c a 65 0 1 0 1 2 4 5 6 7 8 9 12 14 16 17 20 22 23 26 31 32 35 38 40 42 43 45 50 52 55 56 59 61 62 b 65 0 0 f # 15687 assign c a 65 0 1 2 3 5 6 8 9 10 12 14 19 20 23 29 31 34 35 39 44 46 47 48 49 50 51 54 55 56 58 63 64 b 65 0 1 2 3 5 6 8 9 10 12 14 19 20 23 29 31 34 35 39 44 46 47 48 49 50 51 54 55 56 58 63 64 # 15688 assign c a 65 0 1 2 3 5 6 8 9 10 12 14 19 20 23 29 31 34 35 39 44 46 47 48 49 50 51 54 55 56 58 63 64 b 65 0 0 0 2 4 5 6 7 9 10 11 12 13 14 15 17 18 19 21 23 24 25 26 28 29 30 31 33 35 36 38 41 43 46 47 49 50 51 56 59 62 # 15689 assign c a 65 0 1 e b 65 0 1 e # 15690 assign c a 65 0 1 e b 65 0 1 e # 15691 assign c a 65 0 1 e b 65 0 1 e # 15692 assign c a 65 0 1 e b 65 0 1 f # 15693 assign c a 65 0 1 e b 65 0 1 e # 15694 assign c a 65 0 1 e b 65 0 1 3 5 6 9 10 11 12 13 17 18 19 22 23 24 25 28 29 30 34 35 37 38 39 40 41 42 43 45 47 48 50 57 59 63 # 15695 assign c a 65 0 1 f b 65 0 1 f # 15696 assign c a 65 0 1 f b 65 0 1 e # 15697 assign c a 65 0 1 f b 65 0 1 f # 15698 assign c a 65 0 1 f b 65 0 1 f # 15699 assign c a 65 0 1 f b 65 0 1 f # 15700 assign c a 65 0 1 f b 65 0 1 2 9 10 13 17 18 19 23 24 27 31 32 34 36 39 44 46 49 53 55 56 57 58 63 64 # 15701 assign c a 65 0 1 4 6 7 8 10 16 17 19 22 26 27 29 30 31 32 35 36 37 38 41 42 46 50 51 52 53 56 57 60 61 63 b 65 0 1 4 6 7 8 10 16 17 19 22 26 27 29 30 31 32 35 36 37 38 41 42 46 50 51 52 53 56 57 60 61 63 # 15702 assign c a 65 0 1 4 6 7 8 10 16 17 19 22 26 27 29 30 31 32 35 36 37 38 41 42 46 50 51 52 53 56 57 60 61 63 b 65 0 1 e # 15703 assign c a 65 0 1 2 6 7 12 14 18 20 23 25 28 30 32 33 34 35 37 38 40 42 43 44 45 51 53 54 55 62 64 b 65 0 1 2 6 7 12 14 18 20 23 25 28 30 32 33 34 35 37 38 40 42 43 44 45 51 53 54 55 62 64 # 15704 assign c a 65 0 1 2 6 7 12 14 18 20 23 25 28 30 32 33 34 35 37 38 40 42 43 44 45 51 53 54 55 62 64 b 65 0 1 f # 15705 assign c a 65 0 1 0 3 5 6 8 9 12 14 16 17 18 19 21 23 25 28 31 32 33 35 40 41 42 43 49 50 51 52 55 56 57 59 61 63 64 b 65 0 1 0 3 5 6 8 9 12 14 16 17 18 19 21 23 25 28 31 32 33 35 40 41 42 43 49 50 51 52 55 56 57 59 61 63 64 # 15706 assign c a 65 0 1 0 3 5 6 8 9 12 14 16 17 18 19 21 23 25 28 31 32 33 35 40 41 42 43 49 50 51 52 55 56 57 59 61 63 64 b 65 0 1 0 1 11 13 14 16 17 19 22 23 24 25 27 33 35 37 38 40 46 47 48 50 53 56 58 59 60 63 # 15707 assign c a 65 0 1 e b 65 0 1 e # 15708 assign c a 65 0 1 e b 65 1 0 e # 15709 assign c a 65 0 1 e b 65 0 1 e # 15710 assign c a 65 0 1 e b 65 1 0 f # 15711 assign c a 65 0 1 e b 65 0 1 e # 15712 assign c a 65 0 1 e b 65 1 0 0 1 4 5 9 12 17 18 20 21 24 30 32 34 35 38 42 44 50 54 57 58 59 64 # 15713 assign c a 65 0 1 f b 65 0 1 f # 15714 assign c a 65 0 1 f b 65 1 0 e # 15715 assign c a 65 0 1 f b 65 0 1 f # 15716 assign c a 65 0 1 f b 65 1 0 f # 15717 assign c a 65 0 1 f b 65 0 1 f # 15718 assign c a 65 0 1 f b 65 1 0 0 1 2 4 9 11 13 16 18 21 22 24 25 28 29 30 31 32 33 35 37 39 41 42 43 44 47 48 49 50 51 52 53 55 57 58 61 64 # 15719 assign c a 65 0 1 0 1 6 7 9 10 11 12 15 18 20 21 22 24 26 27 28 30 34 36 37 40 42 43 44 46 48 49 51 58 61 62 63 64 b 65 0 1 0 1 6 7 9 10 11 12 15 18 20 21 22 24 26 27 28 30 34 36 37 40 42 43 44 46 48 49 51 58 61 62 63 64 # 15720 assign c a 65 0 1 0 1 6 7 9 10 11 12 15 18 20 21 22 24 26 27 28 30 34 36 37 40 42 43 44 46 48 49 51 58 61 62 63 64 b 65 1 0 e # 15721 assign c a 65 0 1 0 2 3 4 5 7 8 10 12 13 15 19 23 29 31 33 34 35 36 38 39 41 44 45 50 51 52 56 57 58 59 60 61 62 63 64 b 65 0 1 0 2 3 4 5 7 8 10 12 13 15 19 23 29 31 33 34 35 36 38 39 41 44 45 50 51 52 56 57 58 59 60 61 62 63 64 # 15722 assign c a 65 0 1 0 2 3 4 5 7 8 10 12 13 15 19 23 29 31 33 34 35 36 38 39 41 44 45 50 51 52 56 57 58 59 60 61 62 63 64 b 65 1 0 f # 15723 assign c a 65 0 1 0 1 2 3 4 5 7 9 13 14 15 16 18 19 20 22 23 24 25 27 28 30 33 36 37 40 41 42 45 46 49 52 53 54 55 56 58 60 61 62 64 b 65 0 1 0 1 2 3 4 5 7 9 13 14 15 16 18 19 20 22 23 24 25 27 28 30 33 36 37 40 41 42 45 46 49 52 53 54 55 56 58 60 61 62 64 # 15724 assign c a 65 0 1 0 1 2 3 4 5 7 9 13 14 15 16 18 19 20 22 23 24 25 27 28 30 33 36 37 40 41 42 45 46 49 52 53 54 55 56 58 60 61 62 64 b 65 1 0 1 2 7 9 12 13 16 17 19 20 22 29 31 32 35 36 37 38 42 46 48 51 52 53 54 58 60 63 64 # 15725 assign c a 65 0 1 e b 65 0 1 e # 15726 assign c a 65 0 1 e b 65 1 1 e # 15727 assign c a 65 0 1 e b 65 0 1 e # 15728 assign c a 65 0 1 e b 65 1 1 f # 15729 assign c a 65 0 1 e b 65 0 1 e # 15730 assign c a 65 0 1 e b 65 1 1 1 2 4 6 8 9 12 13 15 16 17 18 19 20 21 24 25 27 28 29 30 32 34 36 38 39 42 44 47 49 50 52 55 56 57 58 59 60 64 # 15731 assign c a 65 0 1 f b 65 0 1 f # 15732 assign c a 65 0 1 f b 65 1 1 e # 15733 assign c a 65 0 1 f b 65 0 1 f # 15734 assign c a 65 0 1 f b 65 1 1 f # 15735 assign c a 65 0 1 f b 65 0 1 f # 15736 assign c a 65 0 1 f b 65 1 1 1 2 3 4 7 10 11 12 13 14 15 16 18 20 27 28 29 30 31 32 34 36 37 46 49 50 53 54 57 59 60 61 62 # 15737 assign c a 65 0 1 0 1 3 5 7 13 14 16 19 20 21 22 23 25 26 28 30 31 35 37 38 42 43 45 46 47 50 53 55 56 57 58 59 61 64 b 65 0 1 0 1 3 5 7 13 14 16 19 20 21 22 23 25 26 28 30 31 35 37 38 42 43 45 46 47 50 53 55 56 57 58 59 61 64 # 15738 assign c a 65 0 1 0 1 3 5 7 13 14 16 19 20 21 22 23 25 26 28 30 31 35 37 38 42 43 45 46 47 50 53 55 56 57 58 59 61 64 b 65 1 1 e # 15739 assign c a 65 0 1 0 3 4 5 6 8 9 11 12 14 18 19 22 26 28 31 34 37 38 39 42 44 45 47 48 50 52 53 54 57 60 61 b 65 0 1 0 3 4 5 6 8 9 11 12 14 18 19 22 26 28 31 34 37 38 39 42 44 45 47 48 50 52 53 54 57 60 61 # 15740 assign c a 65 0 1 0 3 4 5 6 8 9 11 12 14 18 19 22 26 28 31 34 37 38 39 42 44 45 47 48 50 52 53 54 57 60 61 b 65 1 1 f # 15741 assign c a 65 0 1 0 1 3 4 7 10 11 12 13 14 16 18 22 24 25 29 30 32 34 36 39 40 42 43 44 45 46 47 49 51 53 55 56 63 b 65 0 1 0 1 3 4 7 10 11 12 13 14 16 18 22 24 25 29 30 32 34 36 39 40 42 43 44 45 46 47 49 51 53 55 56 63 # 15742 assign c a 65 0 1 0 1 3 4 7 10 11 12 13 14 16 18 22 24 25 29 30 32 34 36 39 40 42 43 44 45 46 47 49 51 53 55 56 63 b 65 1 1 3 4 13 14 17 20 24 26 28 29 30 33 37 40 41 42 44 47 49 54 56 58 59 # 15743 assign c a 65 1 0 e b 65 1 0 e # 15744 assign c a 65 1 0 e b 65 0 0 e # 15745 assign c a 65 1 0 e b 65 1 0 e # 15746 assign c a 65 1 0 e b 65 0 0 f # 15747 assign c a 65 1 0 e b 65 1 0 e # 15748 assign c a 65 1 0 e b 65 0 0 0 1 2 7 8 9 10 13 14 16 17 18 20 24 28 29 30 31 32 33 35 36 37 38 39 41 43 46 49 50 51 52 55 56 57 59 60 62 # 15749 assign c a 65 1 0 f b 65 1 0 f # 15750 assign c a 65 1 0 f b 65 0 0 e # 15751 assign c a 65 1 0 f b 65 1 0 f # 15752 assign c a 65 1 0 f b 65 0 0 f # 15753 assign c a 65 1 0 f b 65 1 0 f # 15754 assign c a 65 1 0 f b 65 0 0 0 3 8 9 10 11 12 15 18 19 21 22 25 26 27 30 32 38 44 47 48 49 50 52 55 58 59 60 61 63 64 # 15755 assign c a 65 1 0 3 5 7 8 9 18 19 20 21 22 24 25 28 32 33 36 37 38 39 40 44 48 50 51 53 56 57 58 59 b 65 1 0 3 5 7 8 9 18 19 20 21 22 24 25 28 32 33 36 37 38 39 40 44 48 50 51 53 56 57 58 59 # 15756 assign c a 65 1 0 3 5 7 8 9 18 19 20 21 22 24 25 28 32 33 36 37 38 39 40 44 48 50 51 53 56 57 58 59 b 65 0 0 e # 15757 assign c a 65 1 0 0 1 2 3 4 5 6 8 9 15 20 21 23 25 27 29 30 31 32 33 34 36 38 39 41 43 45 46 47 53 55 56 57 59 60 62 b 65 1 0 0 1 2 3 4 5 6 8 9 15 20 21 23 25 27 29 30 31 32 33 34 36 38 39 41 43 45 46 47 53 55 56 57 59 60 62 # 15758 assign c a 65 1 0 0 1 2 3 4 5 6 8 9 15 20 21 23 25 27 29 30 31 32 33 34 36 38 39 41 43 45 46 47 53 55 56 57 59 60 62 b 65 0 0 f # 15759 assign c a 65 1 0 0 1 4 5 6 7 9 11 12 16 20 24 29 30 31 32 33 36 37 40 44 46 48 50 51 59 62 63 b 65 1 0 0 1 4 5 6 7 9 11 12 16 20 24 29 30 31 32 33 36 37 40 44 46 48 50 51 59 62 63 # 15760 assign c a 65 1 0 0 1 4 5 6 7 9 11 12 16 20 24 29 30 31 32 33 36 37 40 44 46 48 50 51 59 62 63 b 65 0 0 0 3 4 6 8 10 12 17 18 19 21 23 25 26 27 28 29 30 31 34 36 40 42 43 44 45 46 48 49 52 54 57 58 60 61 62 # 15761 assign c a 65 1 0 e b 65 1 0 e # 15762 assign c a 65 1 0 e b 65 0 1 e # 15763 assign c a 65 1 0 e b 65 1 0 e # 15764 assign c a 65 1 0 e b 65 0 1 f # 15765 assign c a 65 1 0 e b 65 1 0 e # 15766 assign c a 65 1 0 e b 65 0 1 0 1 2 6 7 9 10 12 19 25 28 29 30 32 33 34 35 37 38 42 44 45 46 49 51 53 55 57 60 62 63 64 # 15767 assign c a 65 1 0 f b 65 1 0 f # 15768 assign c a 65 1 0 f b 65 0 1 e # 15769 assign c a 65 1 0 f b 65 1 0 f # 15770 assign c a 65 1 0 f b 65 0 1 f # 15771 assign c a 65 1 0 f b 65 1 0 f # 15772 assign c a 65 1 0 f b 65 0 1 1 5 6 7 9 10 12 13 14 15 17 19 24 25 27 30 31 32 36 37 40 42 43 45 48 49 52 53 54 55 56 58 60 61 63 64 # 15773 assign c a 65 1 0 2 4 7 12 13 17 20 22 24 27 29 30 31 33 35 37 38 39 43 44 45 48 49 51 56 58 61 63 b 65 1 0 2 4 7 12 13 17 20 22 24 27 29 30 31 33 35 37 38 39 43 44 45 48 49 51 56 58 61 63 # 15774 assign c a 65 1 0 2 4 7 12 13 17 20 22 24 27 29 30 31 33 35 37 38 39 43 44 45 48 49 51 56 58 61 63 b 65 0 1 e # 15775 assign c a 65 1 0 0 1 2 3 4 6 7 8 9 10 16 17 18 21 22 23 24 27 29 32 33 34 37 40 42 44 45 46 48 49 50 52 53 54 55 56 61 62 63 64 b 65 1 0 0 1 2 3 4 6 7 8 9 10 16 17 18 21 22 23 24 27 29 32 33 34 37 40 42 44 45 46 48 49 50 52 53 54 55 56 61 62 63 64 # 15776 assign c a 65 1 0 0 1 2 3 4 6 7 8 9 10 16 17 18 21 22 23 24 27 29 32 33 34 37 40 42 44 45 46 48 49 50 52 53 54 55 56 61 62 63 64 b 65 0 1 f # 15777 assign c a 65 1 0 0 3 4 6 13 15 18 23 24 25 26 27 29 33 34 37 38 40 42 44 45 49 50 51 53 54 56 57 60 61 b 65 1 0 0 3 4 6 13 15 18 23 24 25 26 27 29 33 34 37 38 40 42 44 45 49 50 51 53 54 56 57 60 61 # 15778 assign c a 65 1 0 0 3 4 6 13 15 18 23 24 25 26 27 29 33 34 37 38 40 42 44 45 49 50 51 53 54 56 57 60 61 b 65 0 1 1 2 4 7 8 10 11 12 15 21 22 23 24 26 27 28 29 32 33 37 43 44 45 46 49 52 55 56 61 62 63 64 # 15779 assign c a 65 1 0 e b 65 1 0 e # 15780 assign c a 65 1 0 e b 65 1 0 e # 15781 assign c a 65 1 0 e b 65 1 0 e # 15782 assign c a 65 1 0 e b 65 1 0 f # 15783 assign c a 65 1 0 e b 65 1 0 e # 15784 assign c a 65 1 0 e b 65 1 0 2 3 4 12 13 15 17 18 19 23 24 25 26 27 28 29 31 34 36 38 45 48 52 53 55 56 61 63 # 15785 assign c a 65 1 0 f b 65 1 0 f # 15786 assign c a 65 1 0 f b 65 1 0 e # 15787 assign c a 65 1 0 f b 65 1 0 f # 15788 assign c a 65 1 0 f b 65 1 0 f # 15789 assign c a 65 1 0 f b 65 1 0 f # 15790 assign c a 65 1 0 f b 65 1 0 3 7 8 9 10 11 14 16 20 21 23 25 29 30 31 36 37 39 42 43 44 45 50 51 54 55 56 62 64 # 15791 assign c a 65 1 0 1 6 8 11 12 13 14 16 17 18 19 20 21 22 27 29 31 32 33 34 37 38 41 42 43 44 45 48 49 51 52 55 56 57 58 59 60 62 63 b 65 1 0 1 6 8 11 12 13 14 16 17 18 19 20 21 22 27 29 31 32 33 34 37 38 41 42 43 44 45 48 49 51 52 55 56 57 58 59 60 62 63 # 15792 assign c a 65 1 0 1 6 8 11 12 13 14 16 17 18 19 20 21 22 27 29 31 32 33 34 37 38 41 42 43 44 45 48 49 51 52 55 56 57 58 59 60 62 63 b 65 1 0 e # 15793 assign c a 65 1 0 0 1 4 5 6 7 8 9 11 12 13 14 15 17 18 19 20 21 22 23 25 27 30 34 35 38 39 42 47 49 50 52 54 58 59 60 61 62 63 b 65 1 0 0 1 4 5 6 7 8 9 11 12 13 14 15 17 18 19 20 21 22 23 25 27 30 34 35 38 39 42 47 49 50 52 54 58 59 60 61 62 63 # 15794 assign c a 65 1 0 0 1 4 5 6 7 8 9 11 12 13 14 15 17 18 19 20 21 22 23 25 27 30 34 35 38 39 42 47 49 50 52 54 58 59 60 61 62 63 b 65 1 0 f # 15795 assign c a 65 1 0 0 1 2 4 5 7 9 11 12 13 15 16 18 21 23 24 26 27 29 31 32 36 37 41 44 45 50 51 54 59 61 62 63 64 b 65 1 0 0 1 2 4 5 7 9 11 12 13 15 16 18 21 23 24 26 27 29 31 32 36 37 41 44 45 50 51 54 59 61 62 63 64 # 15796 assign c a 65 1 0 0 1 2 4 5 7 9 11 12 13 15 16 18 21 23 24 26 27 29 31 32 36 37 41 44 45 50 51 54 59 61 62 63 64 b 65 1 0 0 2 3 4 7 8 9 11 13 14 16 17 18 19 21 23 27 28 30 31 32 33 34 35 37 40 41 43 44 47 48 50 57 60 63 # 15797 assign c a 65 1 0 e b 65 1 0 e # 15798 assign c a 65 1 0 e b 65 1 1 e # 15799 assign c a 65 1 0 e b 65 1 0 e # 15800 assign c a 65 1 0 e b 65 1 1 f # 15801 assign c a 65 1 0 e b 65 1 0 e # 15802 assign c a 65 1 0 e b 65 1 1 2 4 6 7 8 9 10 11 13 14 15 18 19 20 23 24 25 26 30 32 33 34 35 37 38 40 41 44 46 48 49 50 51 56 58 60 61 62 63 64 # 15803 assign c a 65 1 0 f b 65 1 0 f # 15804 assign c a 65 1 0 f b 65 1 1 e # 15805 assign c a 65 1 0 f b 65 1 0 f # 15806 assign c a 65 1 0 f b 65 1 1 f # 15807 assign c a 65 1 0 f b 65 1 0 f # 15808 assign c a 65 1 0 f b 65 1 1 1 4 5 6 7 8 13 14 16 17 18 19 22 28 29 32 33 34 37 40 41 42 45 51 55 58 62 64 # 15809 assign c a 65 1 0 0 1 4 5 7 8 9 14 16 17 18 19 20 21 24 25 26 27 28 30 31 32 35 37 38 41 42 43 45 52 53 54 55 56 57 58 59 61 b 65 1 0 0 1 4 5 7 8 9 14 16 17 18 19 20 21 24 25 26 27 28 30 31 32 35 37 38 41 42 43 45 52 53 54 55 56 57 58 59 61 # 15810 assign c a 65 1 0 0 1 4 5 7 8 9 14 16 17 18 19 20 21 24 25 26 27 28 30 31 32 35 37 38 41 42 43 45 52 53 54 55 56 57 58 59 61 b 65 1 1 e # 15811 assign c a 65 1 0 0 2 4 5 6 7 8 9 12 13 14 16 19 21 24 26 28 29 30 34 37 40 41 42 43 45 46 51 53 55 56 57 59 60 64 b 65 1 0 0 2 4 5 6 7 8 9 12 13 14 16 19 21 24 26 28 29 30 34 37 40 41 42 43 45 46 51 53 55 56 57 59 60 64 # 15812 assign c a 65 1 0 0 2 4 5 6 7 8 9 12 13 14 16 19 21 24 26 28 29 30 34 37 40 41 42 43 45 46 51 53 55 56 57 59 60 64 b 65 1 1 f # 15813 assign c a 65 1 0 4 6 9 10 11 12 15 16 17 24 27 30 31 32 33 34 35 37 39 40 42 44 45 48 49 50 52 55 56 57 58 62 b 65 1 0 4 6 9 10 11 12 15 16 17 24 27 30 31 32 33 34 35 37 39 40 42 44 45 48 49 50 52 55 56 57 58 62 # 15814 assign c a 65 1 0 4 6 9 10 11 12 15 16 17 24 27 30 31 32 33 34 35 37 39 40 42 44 45 48 49 50 52 55 56 57 58 62 b 65 1 1 0 1 2 3 5 6 12 13 16 17 22 23 24 30 33 35 36 37 42 43 47 48 49 58 59 60 61 62 64 # 15815 assign c a 65 1 1 e b 65 1 1 e # 15816 assign c a 65 1 1 e b 65 0 0 e # 15817 assign c a 65 1 1 e b 65 1 1 e # 15818 assign c a 65 1 1 e b 65 0 0 f # 15819 assign c a 65 1 1 e b 65 1 1 e # 15820 assign c a 65 1 1 e b 65 0 0 5 7 11 12 14 15 17 19 23 25 26 27 28 30 35 36 37 38 45 47 48 49 50 53 54 56 57 59 60 # 15821 assign c a 65 1 1 f b 65 1 1 f # 15822 assign c a 65 1 1 f b 65 0 0 e # 15823 assign c a 65 1 1 f b 65 1 1 f # 15824 assign c a 65 1 1 f b 65 0 0 f # 15825 assign c a 65 1 1 f b 65 1 1 f # 15826 assign c a 65 1 1 f b 65 0 0 0 3 5 7 9 15 16 19 21 22 25 29 30 31 34 35 37 39 40 41 42 43 44 46 47 48 50 52 53 56 57 58 61 63 # 15827 assign c a 65 1 1 0 2 3 4 6 7 9 10 11 12 13 15 16 17 18 19 22 23 24 25 27 30 32 33 35 37 39 40 44 45 47 48 51 52 54 55 60 62 b 65 1 1 0 2 3 4 6 7 9 10 11 12 13 15 16 17 18 19 22 23 24 25 27 30 32 33 35 37 39 40 44 45 47 48 51 52 54 55 60 62 # 15828 assign c a 65 1 1 0 2 3 4 6 7 9 10 11 12 13 15 16 17 18 19 22 23 24 25 27 30 32 33 35 37 39 40 44 45 47 48 51 52 54 55 60 62 b 65 0 0 e # 15829 assign c a 65 1 1 0 3 4 6 7 8 10 11 12 13 18 21 22 23 26 27 28 30 31 34 36 37 40 43 44 45 46 49 50 51 52 54 55 56 58 59 60 61 62 b 65 1 1 0 3 4 6 7 8 10 11 12 13 18 21 22 23 26 27 28 30 31 34 36 37 40 43 44 45 46 49 50 51 52 54 55 56 58 59 60 61 62 # 15830 assign c a 65 1 1 0 3 4 6 7 8 10 11 12 13 18 21 22 23 26 27 28 30 31 34 36 37 40 43 44 45 46 49 50 51 52 54 55 56 58 59 60 61 62 b 65 0 0 f # 15831 assign c a 65 1 1 0 2 4 7 8 10 14 16 18 21 23 24 25 28 29 30 33 34 35 38 39 40 41 43 48 50 51 53 54 55 56 59 60 64 b 65 1 1 0 2 4 7 8 10 14 16 18 21 23 24 25 28 29 30 33 34 35 38 39 40 41 43 48 50 51 53 54 55 56 59 60 64 # 15832 assign c a 65 1 1 0 2 4 7 8 10 14 16 18 21 23 24 25 28 29 30 33 34 35 38 39 40 41 43 48 50 51 53 54 55 56 59 60 64 b 65 0 0 3 8 11 12 13 14 15 17 23 24 26 27 29 30 31 37 38 44 45 48 50 52 54 56 57 60 62 63 64 # 15833 assign c a 65 1 1 e b 65 1 1 e # 15834 assign c a 65 1 1 e b 65 0 1 e # 15835 assign c a 65 1 1 e b 65 1 1 e # 15836 assign c a 65 1 1 e b 65 0 1 f # 15837 assign c a 65 1 1 e b 65 1 1 e # 15838 assign c a 65 1 1 e b 65 0 1 6 8 11 13 15 16 17 18 20 24 30 31 32 35 36 40 41 44 45 47 49 53 54 55 57 59 62 63 # 15839 assign c a 65 1 1 f b 65 1 1 f # 15840 assign c a 65 1 1 f b 65 0 1 e # 15841 assign c a 65 1 1 f b 65 1 1 f # 15842 assign c a 65 1 1 f b 65 0 1 f # 15843 assign c a 65 1 1 f b 65 1 1 f # 15844 assign c a 65 1 1 f b 65 0 1 1 3 5 8 9 11 12 15 16 19 22 25 27 31 35 37 40 41 42 43 46 48 49 51 55 56 57 61 63 # 15845 assign c a 65 1 1 0 1 3 5 8 10 11 12 14 15 17 19 20 21 22 23 26 29 33 34 35 36 38 40 41 43 44 46 48 49 51 52 53 54 57 58 59 62 63 b 65 1 1 0 1 3 5 8 10 11 12 14 15 17 19 20 21 22 23 26 29 33 34 35 36 38 40 41 43 44 46 48 49 51 52 53 54 57 58 59 62 63 # 15846 assign c a 65 1 1 0 1 3 5 8 10 11 12 14 15 17 19 20 21 22 23 26 29 33 34 35 36 38 40 41 43 44 46 48 49 51 52 53 54 57 58 59 62 63 b 65 0 1 e # 15847 assign c a 65 1 1 0 1 2 4 8 9 12 13 15 18 20 23 24 32 34 35 36 37 39 40 41 43 44 47 48 51 53 56 57 58 60 63 64 b 65 1 1 0 1 2 4 8 9 12 13 15 18 20 23 24 32 34 35 36 37 39 40 41 43 44 47 48 51 53 56 57 58 60 63 64 # 15848 assign c a 65 1 1 0 1 2 4 8 9 12 13 15 18 20 23 24 32 34 35 36 37 39 40 41 43 44 47 48 51 53 56 57 58 60 63 64 b 65 0 1 f # 15849 assign c a 65 1 1 1 2 4 5 7 8 9 15 16 17 21 25 27 32 34 35 36 37 38 39 40 44 45 48 50 55 57 60 61 62 63 b 65 1 1 1 2 4 5 7 8 9 15 16 17 21 25 27 32 34 35 36 37 38 39 40 44 45 48 50 55 57 60 61 62 63 # 15850 assign c a 65 1 1 1 2 4 5 7 8 9 15 16 17 21 25 27 32 34 35 36 37 38 39 40 44 45 48 50 55 57 60 61 62 63 b 65 0 1 0 1 3 4 6 7 8 10 15 19 20 21 22 23 26 29 30 32 33 34 37 39 40 45 47 49 52 54 56 57 58 62 # 15851 assign c a 65 1 1 e b 65 1 1 e # 15852 assign c a 65 1 1 e b 65 1 0 e # 15853 assign c a 65 1 1 e b 65 1 1 e # 15854 assign c a 65 1 1 e b 65 1 0 f # 15855 assign c a 65 1 1 e b 65 1 1 e # 15856 assign c a 65 1 1 e b 65 1 0 0 1 2 5 9 10 11 13 18 19 22 24 26 28 29 30 31 32 33 35 37 39 40 42 45 51 52 53 55 57 60 62 63 64 # 15857 assign c a 65 1 1 f b 65 1 1 f # 15858 assign c a 65 1 1 f b 65 1 0 e # 15859 assign c a 65 1 1 f b 65 1 1 f # 15860 assign c a 65 1 1 f b 65 1 0 f # 15861 assign c a 65 1 1 f b 65 1 1 f # 15862 assign c a 65 1 1 f b 65 1 0 1 3 6 7 8 9 10 11 15 16 18 19 20 22 23 24 26 27 30 36 39 42 43 44 46 48 52 55 57 58 59 61 63 # 15863 assign c a 65 1 1 0 2 3 5 7 9 11 12 13 17 21 22 24 25 26 28 30 31 32 33 34 37 38 39 40 42 43 46 47 54 55 56 59 60 62 63 64 b 65 1 1 0 2 3 5 7 9 11 12 13 17 21 22 24 25 26 28 30 31 32 33 34 37 38 39 40 42 43 46 47 54 55 56 59 60 62 63 64 # 15864 assign c a 65 1 1 0 2 3 5 7 9 11 12 13 17 21 22 24 25 26 28 30 31 32 33 34 37 38 39 40 42 43 46 47 54 55 56 59 60 62 63 64 b 65 1 0 e # 15865 assign c a 65 1 1 1 4 10 13 14 16 18 20 21 28 33 34 38 39 40 41 43 45 50 52 53 54 58 62 63 b 65 1 1 1 4 10 13 14 16 18 20 21 28 33 34 38 39 40 41 43 45 50 52 53 54 58 62 63 # 15866 assign c a 65 1 1 1 4 10 13 14 16 18 20 21 28 33 34 38 39 40 41 43 45 50 52 53 54 58 62 63 b 65 1 0 f # 15867 assign c a 65 1 1 0 1 2 4 6 8 9 10 11 14 15 18 20 21 24 25 26 27 33 38 41 42 43 45 46 50 56 60 62 b 65 1 1 0 1 2 4 6 8 9 10 11 14 15 18 20 21 24 25 26 27 33 38 41 42 43 45 46 50 56 60 62 # 15868 assign c a 65 1 1 0 1 2 4 6 8 9 10 11 14 15 18 20 21 24 25 26 27 33 38 41 42 43 45 46 50 56 60 62 b 65 1 0 2 3 7 12 13 17 18 19 22 27 28 32 34 36 39 45 46 47 49 51 55 58 60 62 63 64 # 15869 assign c a 65 1 1 e b 65 1 1 e # 15870 assign c a 65 1 1 e b 65 1 1 e # 15871 assign c a 65 1 1 e b 65 1 1 e # 15872 assign c a 65 1 1 e b 65 1 1 f # 15873 assign c a 65 1 1 e b 65 1 1 e # 15874 assign c a 65 1 1 e b 65 1 1 0 3 7 8 9 12 13 14 15 17 19 20 21 24 25 27 30 32 36 37 40 42 43 45 46 47 48 49 50 51 52 53 55 56 57 58 63 64 # 15875 assign c a 65 1 1 f b 65 1 1 f # 15876 assign c a 65 1 1 f b 65 1 1 e # 15877 assign c a 65 1 1 f b 65 1 1 f # 15878 assign c a 65 1 1 f b 65 1 1 f # 15879 assign c a 65 1 1 f b 65 1 1 f # 15880 assign c a 65 1 1 f b 65 1 1 0 5 7 8 9 11 12 14 15 18 20 22 26 27 28 29 32 33 34 36 39 41 42 43 45 46 47 50 51 52 53 58 59 60 63 # 15881 assign c a 65 1 1 3 4 6 7 9 12 20 27 28 32 33 35 38 39 43 45 47 50 52 56 57 59 60 61 63 64 b 65 1 1 3 4 6 7 9 12 20 27 28 32 33 35 38 39 43 45 47 50 52 56 57 59 60 61 63 64 # 15882 assign c a 65 1 1 3 4 6 7 9 12 20 27 28 32 33 35 38 39 43 45 47 50 52 56 57 59 60 61 63 64 b 65 1 1 e # 15883 assign c a 65 1 1 0 3 8 10 13 14 15 16 17 18 24 27 28 29 30 35 36 37 39 40 44 45 47 48 50 52 54 55 57 58 60 61 62 b 65 1 1 0 3 8 10 13 14 15 16 17 18 24 27 28 29 30 35 36 37 39 40 44 45 47 48 50 52 54 55 57 58 60 61 62 # 15884 assign c a 65 1 1 0 3 8 10 13 14 15 16 17 18 24 27 28 29 30 35 36 37 39 40 44 45 47 48 50 52 54 55 57 58 60 61 62 b 65 1 1 f # 15885 assign c a 65 1 1 3 6 7 10 12 17 19 20 23 26 30 35 36 38 40 42 43 44 49 51 54 55 56 60 62 64 b 65 1 1 3 6 7 10 12 17 19 20 23 26 30 35 36 38 40 42 43 44 49 51 54 55 56 60 62 64 # 15886 assign c a 65 1 1 3 6 7 10 12 17 19 20 23 26 30 35 36 38 40 42 43 44 49 51 54 55 56 60 62 64 b 65 1 1 2 3 4 5 6 8 9 11 13 18 19 20 21 22 25 27 28 30 31 32 34 35 41 44 46 47 48 50 51 60 61 63 # 15887 assign c a 211 0 0 e b 211 0 0 e # 15888 assign c a 211 0 0 e b 211 0 0 e # 15889 assign c a 211 0 0 e b 211 0 0 e # 15890 assign c a 211 0 0 e b 211 0 0 f # 15891 assign c a 211 0 0 e b 211 0 0 e # 15892 assign c a 211 0 0 e b 211 0 0 0 2 4 6 11 12 14 16 18 20 22 29 30 33 34 37 38 39 40 41 42 43 48 50 51 53 54 55 56 62 63 65 66 67 68 69 71 72 74 75 76 79 81 83 84 86 87 88 91 92 94 97 99 101 102 104 107 108 113 118 120 123 125 127 128 130 136 137 138 139 142 143 146 147 149 154 155 160 163 164 165 167 168 171 172 174 176 177 180 183 184 186 188 190 197 198 199 200 202 203 204 205 206 207 210 # 15893 assign c a 211 0 0 f b 211 0 0 f # 15894 assign c a 211 0 0 f b 211 0 0 e # 15895 assign c a 211 0 0 f b 211 0 0 f # 15896 assign c a 211 0 0 f b 211 0 0 f # 15897 assign c a 211 0 0 f b 211 0 0 f # 15898 assign c a 211 0 0 f b 211 0 0 1 4 5 6 8 10 12 14 15 18 28 31 33 35 36 42 47 48 52 53 54 57 59 61 62 63 66 69 70 71 75 76 78 79 80 86 91 92 96 98 104 107 108 109 110 111 116 117 118 119 122 124 126 127 130 131 132 135 136 138 139 141 143 145 148 151 152 153 155 157 159 164 165 171 173 175 177 180 183 187 189 191 193 196 197 198 199 201 202 203 204 206 208 # 15899 assign c a 211 0 0 0 1 2 3 7 8 11 12 15 18 20 21 22 23 26 27 29 32 33 34 35 38 39 42 44 45 49 51 52 54 56 58 59 71 72 75 78 84 87 88 90 92 93 95 97 99 100 101 102 103 105 110 111 112 115 116 117 118 122 123 126 127 128 131 134 135 139 140 142 143 144 145 146 148 150 151 152 153 154 156 157 159 161 162 163 164 165 166 168 169 170 171 173 175 176 180 183 191 194 196 197 199 200 202 203 206 207 b 211 0 0 0 1 2 3 7 8 11 12 15 18 20 21 22 23 26 27 29 32 33 34 35 38 39 42 44 45 49 51 52 54 56 58 59 71 72 75 78 84 87 88 90 92 93 95 97 99 100 101 102 103 105 110 111 112 115 116 117 118 122 123 126 127 128 131 134 135 139 140 142 143 144 145 146 148 150 151 152 153 154 156 157 159 161 162 163 164 165 166 168 169 170 171 173 175 176 180 183 191 194 196 197 199 200 202 203 206 207 # 15900 assign c a 211 0 0 0 1 2 3 7 8 11 12 15 18 20 21 22 23 26 27 29 32 33 34 35 38 39 42 44 45 49 51 52 54 56 58 59 71 72 75 78 84 87 88 90 92 93 95 97 99 100 101 102 103 105 110 111 112 115 116 117 118 122 123 126 127 128 131 134 135 139 140 142 143 144 145 146 148 150 151 152 153 154 156 157 159 161 162 163 164 165 166 168 169 170 171 173 175 176 180 183 191 194 196 197 199 200 202 203 206 207 b 211 0 0 e # 15901 assign c a 211 0 0 1 2 3 8 9 10 11 12 13 14 16 17 18 19 22 25 29 30 31 32 33 34 37 38 40 43 46 49 51 52 57 58 59 60 61 63 64 66 69 70 71 74 75 76 77 81 82 84 86 88 89 90 91 92 95 96 99 102 104 105 107 111 124 125 127 129 130 133 134 139 140 141 142 143 144 148 149 150 154 156 158 161 162 163 165 167 168 169 170 171 172 173 174 175 177 180 182 183 185 190 191 192 194 202 205 206 207 208 b 211 0 0 1 2 3 8 9 10 11 12 13 14 16 17 18 19 22 25 29 30 31 32 33 34 37 38 40 43 46 49 51 52 57 58 59 60 61 63 64 66 69 70 71 74 75 76 77 81 82 84 86 88 89 90 91 92 95 96 99 102 104 105 107 111 124 125 127 129 130 133 134 139 140 141 142 143 144 148 149 150 154 156 158 161 162 163 165 167 168 169 170 171 172 173 174 175 177 180 182 183 185 190 191 192 194 202 205 206 207 208 # 15902 assign c a 211 0 0 1 2 3 8 9 10 11 12 13 14 16 17 18 19 22 25 29 30 31 32 33 34 37 38 40 43 46 49 51 52 57 58 59 60 61 63 64 66 69 70 71 74 75 76 77 81 82 84 86 88 89 90 91 92 95 96 99 102 104 105 107 111 124 125 127 129 130 133 134 139 140 141 142 143 144 148 149 150 154 156 158 161 162 163 165 167 168 169 170 171 172 173 174 175 177 180 182 183 185 190 191 192 194 202 205 206 207 208 b 211 0 0 f # 15903 assign c a 211 0 0 4 6 8 9 11 12 13 14 16 18 20 24 25 27 28 32 33 34 35 41 46 48 49 50 51 53 56 59 60 61 62 63 64 65 66 70 71 75 76 79 81 82 83 84 87 88 89 90 91 92 93 94 95 97 99 104 105 107 108 110 113 114 116 119 120 123 124 128 129 132 133 134 135 137 142 143 144 145 147 148 149 150 151 154 158 160 161 162 163 164 166 170 171 174 183 185 186 187 189 192 196 197 198 203 204 208 209 b 211 0 0 4 6 8 9 11 12 13 14 16 18 20 24 25 27 28 32 33 34 35 41 46 48 49 50 51 53 56 59 60 61 62 63 64 65 66 70 71 75 76 79 81 82 83 84 87 88 89 90 91 92 93 94 95 97 99 104 105 107 108 110 113 114 116 119 120 123 124 128 129 132 133 134 135 137 142 143 144 145 147 148 149 150 151 154 158 160 161 162 163 164 166 170 171 174 183 185 186 187 189 192 196 197 198 203 204 208 209 # 15904 assign c a 211 0 0 4 6 8 9 11 12 13 14 16 18 20 24 25 27 28 32 33 34 35 41 46 48 49 50 51 53 56 59 60 61 62 63 64 65 66 70 71 75 76 79 81 82 83 84 87 88 89 90 91 92 93 94 95 97 99 104 105 107 108 110 113 114 116 119 120 123 124 128 129 132 133 134 135 137 142 143 144 145 147 148 149 150 151 154 158 160 161 162 163 164 166 170 171 174 183 185 186 187 189 192 196 197 198 203 204 208 209 b 211 0 0 1 2 3 5 6 8 9 10 15 16 18 20 25 26 30 31 33 34 35 37 42 43 44 46 47 48 49 50 52 54 57 58 59 61 63 66 67 68 72 82 84 85 87 90 91 92 101 102 106 107 108 109 110 113 115 117 118 119 121 122 124 126 130 131 133 137 140 142 144 152 154 155 159 160 162 163 167 169 172 175 177 179 180 181 183 185 186 187 190 192 193 196 197 201 205 207 208 209 # 15905 assign c a 211 0 0 e b 211 0 0 e # 15906 assign c a 211 0 0 e b 211 0 1 e # 15907 assign c a 211 0 0 e b 211 0 0 e # 15908 assign c a 211 0 0 e b 211 0 1 f # 15909 assign c a 211 0 0 e b 211 0 0 e # 15910 assign c a 211 0 0 e b 211 0 1 0 1 2 3 5 6 7 10 14 15 19 20 26 28 29 30 31 32 41 42 43 45 47 49 50 52 53 54 57 58 60 62 63 64 66 68 70 73 74 75 78 79 82 85 86 87 90 92 93 94 95 97 101 104 108 109 110 113 115 116 118 120 121 123 124 126 129 131 132 133 135 138 141 142 143 144 146 147 149 150 154 156 157 160 161 163 164 168 170 173 176 182 183 184 185 186 187 194 196 198 199 200 201 204 205 206 207 # 15911 assign c a 211 0 0 f b 211 0 0 f # 15912 assign c a 211 0 0 f b 211 0 1 e # 15913 assign c a 211 0 0 f b 211 0 0 f # 15914 assign c a 211 0 0 f b 211 0 1 f # 15915 assign c a 211 0 0 f b 211 0 0 f # 15916 assign c a 211 0 0 f b 211 0 1 0 2 5 7 9 13 15 16 17 18 19 20 21 24 28 29 30 33 34 39 41 43 45 46 48 49 50 51 52 55 57 61 62 63 64 65 69 70 71 74 75 76 77 79 80 83 85 87 89 91 92 93 94 96 97 98 99 100 101 102 104 107 110 111 112 114 116 120 123 129 131 132 133 135 138 139 140 142 143 144 146 147 148 151 152 153 156 157 160 161 164 168 169 170 171 173 174 177 178 179 180 182 183 184 186 187 188 191 195 196 199 202 203 204 205 # 15917 assign c a 211 0 0 2 9 10 11 12 15 17 25 27 29 30 31 33 35 41 45 50 51 52 53 54 56 65 70 74 75 77 79 81 84 86 87 88 93 94 95 96 97 99 103 104 106 107 109 110 111 112 115 116 118 119 122 123 125 126 128 129 133 135 136 137 138 140 141 142 143 144 146 147 149 151 154 155 157 159 160 163 166 169 172 175 176 181 183 186 187 188 190 191 192 193 194 195 197 199 200 201 205 207 209 b 211 0 0 2 9 10 11 12 15 17 25 27 29 30 31 33 35 41 45 50 51 52 53 54 56 65 70 74 75 77 79 81 84 86 87 88 93 94 95 96 97 99 103 104 106 107 109 110 111 112 115 116 118 119 122 123 125 126 128 129 133 135 136 137 138 140 141 142 143 144 146 147 149 151 154 155 157 159 160 163 166 169 172 175 176 181 183 186 187 188 190 191 192 193 194 195 197 199 200 201 205 207 209 # 15918 assign c a 211 0 0 2 9 10 11 12 15 17 25 27 29 30 31 33 35 41 45 50 51 52 53 54 56 65 70 74 75 77 79 81 84 86 87 88 93 94 95 96 97 99 103 104 106 107 109 110 111 112 115 116 118 119 122 123 125 126 128 129 133 135 136 137 138 140 141 142 143 144 146 147 149 151 154 155 157 159 160 163 166 169 172 175 176 181 183 186 187 188 190 191 192 193 194 195 197 199 200 201 205 207 209 b 211 0 1 e # 15919 assign c a 211 0 0 0 1 3 5 6 7 8 10 12 13 15 17 20 21 22 25 32 33 36 41 42 44 47 49 51 52 53 55 56 57 59 60 61 63 64 68 70 73 74 80 83 85 86 89 92 96 97 98 99 101 102 103 104 105 106 108 110 111 112 114 116 121 122 126 129 130 132 133 135 136 138 139 141 142 144 147 148 149 152 154 155 156 162 163 165 166 167 169 170 171 174 176 179 181 188 190 191 192 194 195 197 198 199 201 203 208 209 b 211 0 0 0 1 3 5 6 7 8 10 12 13 15 17 20 21 22 25 32 33 36 41 42 44 47 49 51 52 53 55 56 57 59 60 61 63 64 68 70 73 74 80 83 85 86 89 92 96 97 98 99 101 102 103 104 105 106 108 110 111 112 114 116 121 122 126 129 130 132 133 135 136 138 139 141 142 144 147 148 149 152 154 155 156 162 163 165 166 167 169 170 171 174 176 179 181 188 190 191 192 194 195 197 198 199 201 203 208 209 # 15920 assign c a 211 0 0 0 1 3 5 6 7 8 10 12 13 15 17 20 21 22 25 32 33 36 41 42 44 47 49 51 52 53 55 56 57 59 60 61 63 64 68 70 73 74 80 83 85 86 89 92 96 97 98 99 101 102 103 104 105 106 108 110 111 112 114 116 121 122 126 129 130 132 133 135 136 138 139 141 142 144 147 148 149 152 154 155 156 162 163 165 166 167 169 170 171 174 176 179 181 188 190 191 192 194 195 197 198 199 201 203 208 209 b 211 0 1 f # 15921 assign c a 211 0 0 1 2 3 5 6 7 8 10 11 14 16 20 21 22 23 30 31 34 35 37 38 41 42 44 45 46 47 49 52 56 57 58 63 64 65 66 68 69 70 71 73 79 82 84 88 90 92 93 94 95 96 97 99 101 102 103 104 109 110 111 113 114 115 120 130 131 133 134 136 140 147 148 149 150 152 154 156 160 162 165 168 169 170 171 173 175 178 179 181 188 189 194 195 198 201 203 204 206 207 208 210 b 211 0 0 1 2 3 5 6 7 8 10 11 14 16 20 21 22 23 30 31 34 35 37 38 41 42 44 45 46 47 49 52 56 57 58 63 64 65 66 68 69 70 71 73 79 82 84 88 90 92 93 94 95 96 97 99 101 102 103 104 109 110 111 113 114 115 120 130 131 133 134 136 140 147 148 149 150 152 154 156 160 162 165 168 169 170 171 173 175 178 179 181 188 189 194 195 198 201 203 204 206 207 208 210 # 15922 assign c a 211 0 0 1 2 3 5 6 7 8 10 11 14 16 20 21 22 23 30 31 34 35 37 38 41 42 44 45 46 47 49 52 56 57 58 63 64 65 66 68 69 70 71 73 79 82 84 88 90 92 93 94 95 96 97 99 101 102 103 104 109 110 111 113 114 115 120 130 131 133 134 136 140 147 148 149 150 152 154 156 160 162 165 168 169 170 171 173 175 178 179 181 188 189 194 195 198 201 203 204 206 207 208 210 b 211 0 1 5 6 7 8 9 13 14 16 21 24 25 26 27 28 30 32 34 37 38 39 40 44 47 49 51 52 53 56 59 60 61 62 65 66 69 72 73 75 76 77 78 80 84 85 86 87 88 91 97 98 99 100 102 103 106 109 110 112 114 115 116 117 118 119 120 122 124 125 126 127 128 129 130 131 133 138 139 140 142 143 144 145 146 147 149 150 152 154 155 158 165 166 168 169 171 174 175 176 177 178 180 182 183 184 185 190 192 194 195 196 197 199 200 201 202 203 204 205 206 207 208 209 # 15923 assign c a 211 0 0 e b 211 0 0 e # 15924 assign c a 211 0 0 e b 211 1 0 e # 15925 assign c a 211 0 0 e b 211 0 0 e # 15926 assign c a 211 0 0 e b 211 1 0 f # 15927 assign c a 211 0 0 e b 211 0 0 e # 15928 assign c a 211 0 0 e b 211 1 0 0 6 7 10 11 12 13 14 15 16 17 19 20 22 23 25 26 28 30 31 32 35 38 39 42 45 48 49 51 58 60 64 68 72 74 78 82 84 86 88 89 90 93 94 95 100 104 106 107 111 112 116 118 120 122 125 127 132 133 134 135 136 138 140 141 143 147 148 149 151 154 155 158 159 160 163 164 165 167 173 179 181 182 183 185 186 187 188 189 190 191 197 199 201 206 207 208 210 # 15929 assign c a 211 0 0 f b 211 0 0 f # 15930 assign c a 211 0 0 f b 211 1 0 e # 15931 assign c a 211 0 0 f b 211 0 0 f # 15932 assign c a 211 0 0 f b 211 1 0 f # 15933 assign c a 211 0 0 f b 211 0 0 f # 15934 assign c a 211 0 0 f b 211 1 0 4 7 10 11 12 15 20 21 25 28 29 30 34 36 39 40 42 43 46 47 48 49 51 52 53 54 56 58 59 60 61 67 68 69 70 71 72 73 81 86 90 94 100 102 103 107 108 109 111 112 113 116 117 122 123 124 125 128 129 131 134 135 136 138 139 142 144 145 147 148 149 161 168 169 173 176 177 179 180 181 185 186 190 193 194 195 199 205 206 208 209 # 15935 assign c a 211 0 0 0 1 2 4 5 6 8 17 20 21 22 27 31 32 35 41 42 43 44 48 49 50 51 52 53 57 60 61 63 65 66 68 70 76 77 78 79 81 82 87 88 89 91 93 94 95 97 101 102 103 106 109 110 111 113 114 115 116 118 119 121 122 123 124 125 128 129 130 132 133 140 148 151 154 155 160 161 162 163 164 165 166 167 172 173 174 176 179 181 182 183 184 186 188 189 191 192 195 198 200 202 203 204 207 208 209 210 b 211 0 0 0 1 2 4 5 6 8 17 20 21 22 27 31 32 35 41 42 43 44 48 49 50 51 52 53 57 60 61 63 65 66 68 70 76 77 78 79 81 82 87 88 89 91 93 94 95 97 101 102 103 106 109 110 111 113 114 115 116 118 119 121 122 123 124 125 128 129 130 132 133 140 148 151 154 155 160 161 162 163 164 165 166 167 172 173 174 176 179 181 182 183 184 186 188 189 191 192 195 198 200 202 203 204 207 208 209 210 # 15936 assign c a 211 0 0 0 1 2 4 5 6 8 17 20 21 22 27 31 32 35 41 42 43 44 48 49 50 51 52 53 57 60 61 63 65 66 68 70 76 77 78 79 81 82 87 88 89 91 93 94 95 97 101 102 103 106 109 110 111 113 114 115 116 118 119 121 122 123 124 125 128 129 130 132 133 140 148 151 154 155 160 161 162 163 164 165 166 167 172 173 174 176 179 181 182 183 184 186 188 189 191 192 195 198 200 202 203 204 207 208 209 210 b 211 1 0 e # 15937 assign c a 211 0 0 3 5 6 7 8 9 12 14 16 22 26 32 33 36 40 42 43 44 45 47 50 51 52 53 58 59 60 63 64 65 67 68 71 72 74 75 77 78 79 81 82 84 86 89 90 94 96 98 99 100 102 103 105 106 107 108 114 115 117 119 120 123 134 135 137 138 139 145 147 148 149 150 152 157 158 159 160 164 168 174 175 178 180 181 182 183 187 188 190 191 192 193 195 197 203 204 206 209 210 b 211 0 0 3 5 6 7 8 9 12 14 16 22 26 32 33 36 40 42 43 44 45 47 50 51 52 53 58 59 60 63 64 65 67 68 71 72 74 75 77 78 79 81 82 84 86 89 90 94 96 98 99 100 102 103 105 106 107 108 114 115 117 119 120 123 134 135 137 138 139 145 147 148 149 150 152 157 158 159 160 164 168 174 175 178 180 181 182 183 187 188 190 191 192 193 195 197 203 204 206 209 210 # 15938 assign c a 211 0 0 3 5 6 7 8 9 12 14 16 22 26 32 33 36 40 42 43 44 45 47 50 51 52 53 58 59 60 63 64 65 67 68 71 72 74 75 77 78 79 81 82 84 86 89 90 94 96 98 99 100 102 103 105 106 107 108 114 115 117 119 120 123 134 135 137 138 139 145 147 148 149 150 152 157 158 159 160 164 168 174 175 178 180 181 182 183 187 188 190 191 192 193 195 197 203 204 206 209 210 b 211 1 0 f # 15939 assign c a 211 0 0 1 4 5 6 7 8 11 16 18 19 25 26 27 29 31 33 36 40 41 46 47 48 50 52 55 58 63 67 68 73 74 79 80 83 84 85 86 90 92 93 95 98 100 102 106 108 111 112 113 114 115 118 119 120 121 123 124 126 128 129 131 136 137 138 139 142 143 146 147 148 149 151 153 154 161 166 167 169 170 171 174 175 176 179 181 182 183 184 185 186 187 194 195 196 197 198 200 204 205 207 209 210 b 211 0 0 1 4 5 6 7 8 11 16 18 19 25 26 27 29 31 33 36 40 41 46 47 48 50 52 55 58 63 67 68 73 74 79 80 83 84 85 86 90 92 93 95 98 100 102 106 108 111 112 113 114 115 118 119 120 121 123 124 126 128 129 131 136 137 138 139 142 143 146 147 148 149 151 153 154 161 166 167 169 170 171 174 175 176 179 181 182 183 184 185 186 187 194 195 196 197 198 200 204 205 207 209 210 # 15940 assign c a 211 0 0 1 4 5 6 7 8 11 16 18 19 25 26 27 29 31 33 36 40 41 46 47 48 50 52 55 58 63 67 68 73 74 79 80 83 84 85 86 90 92 93 95 98 100 102 106 108 111 112 113 114 115 118 119 120 121 123 124 126 128 129 131 136 137 138 139 142 143 146 147 148 149 151 153 154 161 166 167 169 170 171 174 175 176 179 181 182 183 184 185 186 187 194 195 196 197 198 200 204 205 207 209 210 b 211 1 0 0 1 2 5 8 9 10 18 19 22 23 25 29 32 34 38 42 43 44 46 47 48 49 50 53 55 56 61 67 70 71 72 73 76 79 82 83 84 86 87 88 90 95 96 97 98 101 102 103 108 109 118 120 121 125 128 132 136 137 138 139 140 143 145 147 153 154 155 156 158 159 160 162 163 164 167 168 170 171 174 175 177 178 179 184 187 188 191 192 195 196 197 198 199 200 201 207 210 # 15941 assign c a 211 0 0 e b 211 0 0 e # 15942 assign c a 211 0 0 e b 211 1 1 e # 15943 assign c a 211 0 0 e b 211 0 0 e # 15944 assign c a 211 0 0 e b 211 1 1 f # 15945 assign c a 211 0 0 e b 211 0 0 e # 15946 assign c a 211 0 0 e b 211 1 1 1 3 4 5 8 10 14 15 17 18 19 20 24 25 26 28 32 35 37 39 44 47 50 51 52 57 58 62 64 66 67 68 70 74 76 84 86 87 89 91 92 93 94 95 97 98 101 103 106 111 113 117 119 120 123 127 130 131 132 136 140 141 144 147 149 150 154 155 156 160 162 163 164 166 167 168 170 171 174 176 181 187 188 189 191 196 198 199 200 201 206 207 208 209 # 15947 assign c a 211 0 0 f b 211 0 0 f # 15948 assign c a 211 0 0 f b 211 1 1 e # 15949 assign c a 211 0 0 f b 211 0 0 f # 15950 assign c a 211 0 0 f b 211 1 1 f # 15951 assign c a 211 0 0 f b 211 0 0 f # 15952 assign c a 211 0 0 f b 211 1 1 1 2 3 6 9 11 12 13 17 20 22 30 36 38 39 40 42 43 44 50 52 54 56 58 59 63 64 65 67 68 69 70 71 73 74 78 79 80 84 86 87 90 91 92 94 95 96 97 98 99 100 102 105 111 112 115 116 120 123 125 126 128 131 132 137 138 139 140 141 142 143 149 153 154 155 156 157 159 161 162 165 167 168 171 175 177 178 179 180 186 187 188 190 192 197 198 202 204 # 15953 assign c a 211 0 0 1 3 4 5 6 7 8 9 10 11 12 16 19 20 21 22 27 28 29 30 37 39 40 42 43 48 51 54 55 56 59 63 64 69 72 76 77 78 79 81 87 88 89 90 93 94 99 100 101 103 104 105 107 108 111 113 117 122 123 125 126 127 128 130 131 134 138 139 140 142 143 147 149 151 156 159 160 161 162 165 172 176 177 180 181 182 183 188 189 191 192 195 197 199 201 202 206 208 210 b 211 0 0 1 3 4 5 6 7 8 9 10 11 12 16 19 20 21 22 27 28 29 30 37 39 40 42 43 48 51 54 55 56 59 63 64 69 72 76 77 78 79 81 87 88 89 90 93 94 99 100 101 103 104 105 107 108 111 113 117 122 123 125 126 127 128 130 131 134 138 139 140 142 143 147 149 151 156 159 160 161 162 165 172 176 177 180 181 182 183 188 189 191 192 195 197 199 201 202 206 208 210 # 15954 assign c a 211 0 0 1 3 4 5 6 7 8 9 10 11 12 16 19 20 21 22 27 28 29 30 37 39 40 42 43 48 51 54 55 56 59 63 64 69 72 76 77 78 79 81 87 88 89 90 93 94 99 100 101 103 104 105 107 108 111 113 117 122 123 125 126 127 128 130 131 134 138 139 140 142 143 147 149 151 156 159 160 161 162 165 172 176 177 180 181 182 183 188 189 191 192 195 197 199 201 202 206 208 210 b 211 1 1 e # 15955 assign c a 211 0 0 0 2 3 7 9 10 12 15 23 24 29 30 32 33 34 36 43 45 46 47 49 51 55 56 57 60 62 63 64 65 67 68 72 73 76 77 79 80 82 84 87 91 92 94 95 96 97 98 99 101 104 109 114 117 119 121 122 124 126 127 129 130 131 132 136 137 138 142 143 144 146 150 151 152 153 155 158 159 160 161 162 163 165 167 168 172 173 174 177 178 179 181 182 187 199 200 201 204 206 209 b 211 0 0 0 2 3 7 9 10 12 15 23 24 29 30 32 33 34 36 43 45 46 47 49 51 55 56 57 60 62 63 64 65 67 68 72 73 76 77 79 80 82 84 87 91 92 94 95 96 97 98 99 101 104 109 114 117 119 121 122 124 126 127 129 130 131 132 136 137 138 142 143 144 146 150 151 152 153 155 158 159 160 161 162 163 165 167 168 172 173 174 177 178 179 181 182 187 199 200 201 204 206 209 # 15956 assign c a 211 0 0 0 2 3 7 9 10 12 15 23 24 29 30 32 33 34 36 43 45 46 47 49 51 55 56 57 60 62 63 64 65 67 68 72 73 76 77 79 80 82 84 87 91 92 94 95 96 97 98 99 101 104 109 114 117 119 121 122 124 126 127 129 130 131 132 136 137 138 142 143 144 146 150 151 152 153 155 158 159 160 161 162 163 165 167 168 172 173 174 177 178 179 181 182 187 199 200 201 204 206 209 b 211 1 1 f # 15957 assign c a 211 0 0 3 4 6 7 8 14 15 16 19 20 22 24 31 32 33 34 35 37 40 41 42 47 48 49 50 51 53 56 57 60 61 63 64 67 68 69 71 72 73 75 77 78 80 81 82 88 89 90 91 92 94 95 96 98 99 101 102 103 104 106 109 110 112 113 116 117 118 119 120 121 122 123 125 126 127 128 130 136 138 139 141 143 145 148 149 151 152 154 155 158 160 161 165 166 167 168 169 170 172 176 178 179 184 187 188 191 192 193 202 203 205 209 b 211 0 0 3 4 6 7 8 14 15 16 19 20 22 24 31 32 33 34 35 37 40 41 42 47 48 49 50 51 53 56 57 60 61 63 64 67 68 69 71 72 73 75 77 78 80 81 82 88 89 90 91 92 94 95 96 98 99 101 102 103 104 106 109 110 112 113 116 117 118 119 120 121 122 123 125 126 127 128 130 136 138 139 141 143 145 148 149 151 152 154 155 158 160 161 165 166 167 168 169 170 172 176 178 179 184 187 188 191 192 193 202 203 205 209 # 15958 assign c a 211 0 0 3 4 6 7 8 14 15 16 19 20 22 24 31 32 33 34 35 37 40 41 42 47 48 49 50 51 53 56 57 60 61 63 64 67 68 69 71 72 73 75 77 78 80 81 82 88 89 90 91 92 94 95 96 98 99 101 102 103 104 106 109 110 112 113 116 117 118 119 120 121 122 123 125 126 127 128 130 136 138 139 141 143 145 148 149 151 152 154 155 158 160 161 165 166 167 168 169 170 172 176 178 179 184 187 188 191 192 193 202 203 205 209 b 211 1 1 0 2 4 5 7 8 9 12 13 14 15 17 19 22 24 25 30 32 35 37 38 40 41 42 44 49 51 54 56 58 60 63 64 65 68 70 71 76 77 78 83 86 88 89 90 91 97 98 102 104 106 107 108 112 113 116 118 119 120 124 125 127 128 132 134 135 138 140 142 143 144 146 147 149 150 154 155 158 166 167 168 169 171 172 175 176 178 181 182 184 188 192 193 199 201 202 207 208 # 15959 assign c a 211 0 1 e b 211 0 1 e # 15960 assign c a 211 0 1 e b 211 0 0 e # 15961 assign c a 211 0 1 e b 211 0 1 e # 15962 assign c a 211 0 1 e b 211 0 0 f # 15963 assign c a 211 0 1 e b 211 0 1 e # 15964 assign c a 211 0 1 e b 211 0 0 0 1 2 4 6 10 13 14 16 18 19 20 22 23 24 25 27 28 30 31 33 38 39 40 43 48 52 53 56 57 59 63 65 67 68 69 71 73 74 75 76 78 79 85 86 89 90 91 97 100 101 102 105 106 108 109 114 118 119 121 123 125 128 130 133 134 135 137 140 142 143 144 145 150 151 152 157 158 162 167 171 172 174 175 176 180 182 183 184 186 189 194 196 199 200 202 203 204 205 206 207 209 210 # 15965 assign c a 211 0 1 f b 211 0 1 f # 15966 assign c a 211 0 1 f b 211 0 0 e # 15967 assign c a 211 0 1 f b 211 0 1 f # 15968 assign c a 211 0 1 f b 211 0 0 f # 15969 assign c a 211 0 1 f b 211 0 1 f # 15970 assign c a 211 0 1 f b 211 0 0 2 3 4 6 8 9 10 12 13 16 18 19 22 23 24 25 26 27 29 30 32 33 35 39 41 44 46 47 48 52 55 56 57 60 62 63 64 66 68 69 71 72 75 76 77 78 79 86 90 92 94 95 96 97 98 100 103 104 105 106 107 108 110 112 113 118 119 120 123 124 127 128 131 132 133 140 141 144 145 146 152 153 155 156 157 158 159 161 162 163 164 169 172 173 174 175 176 180 181 182 183 186 188 189 192 197 198 199 205 206 210 # 15971 assign c a 211 0 1 1 2 5 7 8 12 13 20 23 24 26 27 28 30 34 35 38 40 42 43 44 52 53 55 58 62 63 64 65 70 73 74 76 78 80 82 83 85 87 91 92 95 97 99 102 103 104 105 107 109 111 114 124 125 126 127 128 130 131 133 134 136 137 139 140 141 142 145 146 148 149 150 154 156 157 159 160 161 162 164 166 174 175 182 183 193 194 197 198 199 203 204 207 208 209 b 211 0 1 1 2 5 7 8 12 13 20 23 24 26 27 28 30 34 35 38 40 42 43 44 52 53 55 58 62 63 64 65 70 73 74 76 78 80 82 83 85 87 91 92 95 97 99 102 103 104 105 107 109 111 114 124 125 126 127 128 130 131 133 134 136 137 139 140 141 142 145 146 148 149 150 154 156 157 159 160 161 162 164 166 174 175 182 183 193 194 197 198 199 203 204 207 208 209 # 15972 assign c a 211 0 1 1 2 5 7 8 12 13 20 23 24 26 27 28 30 34 35 38 40 42 43 44 52 53 55 58 62 63 64 65 70 73 74 76 78 80 82 83 85 87 91 92 95 97 99 102 103 104 105 107 109 111 114 124 125 126 127 128 130 131 133 134 136 137 139 140 141 142 145 146 148 149 150 154 156 157 159 160 161 162 164 166 174 175 182 183 193 194 197 198 199 203 204 207 208 209 b 211 0 0 e # 15973 assign c a 211 0 1 1 2 7 8 9 11 14 15 16 19 20 21 26 29 30 32 33 34 39 42 43 44 45 49 51 52 56 58 62 63 68 71 72 74 75 83 84 85 87 89 91 93 94 95 97 101 105 110 112 115 117 118 119 120 122 126 127 130 131 132 137 138 141 142 147 150 151 155 156 164 165 166 167 168 171 176 180 181 186 188 190 192 194 195 198 200 204 206 207 208 209 210 b 211 0 1 1 2 7 8 9 11 14 15 16 19 20 21 26 29 30 32 33 34 39 42 43 44 45 49 51 52 56 58 62 63 68 71 72 74 75 83 84 85 87 89 91 93 94 95 97 101 105 110 112 115 117 118 119 120 122 126 127 130 131 132 137 138 141 142 147 150 151 155 156 164 165 166 167 168 171 176 180 181 186 188 190 192 194 195 198 200 204 206 207 208 209 210 # 15974 assign c a 211 0 1 1 2 7 8 9 11 14 15 16 19 20 21 26 29 30 32 33 34 39 42 43 44 45 49 51 52 56 58 62 63 68 71 72 74 75 83 84 85 87 89 91 93 94 95 97 101 105 110 112 115 117 118 119 120 122 126 127 130 131 132 137 138 141 142 147 150 151 155 156 164 165 166 167 168 171 176 180 181 186 188 190 192 194 195 198 200 204 206 207 208 209 210 b 211 0 0 f # 15975 assign c a 211 0 1 0 1 3 5 6 7 10 11 16 17 18 20 24 25 26 27 28 29 30 31 32 33 34 36 37 42 43 44 46 47 49 53 54 56 57 58 59 60 61 63 64 68 69 70 73 74 77 79 80 85 87 88 90 95 102 104 105 106 108 109 110 111 114 115 118 119 120 124 125 129 130 132 134 135 137 139 140 142 145 146 147 149 150 155 156 157 161 162 165 167 169 170 172 181 182 188 189 192 194 196 198 201 202 206 208 209 210 b 211 0 1 0 1 3 5 6 7 10 11 16 17 18 20 24 25 26 27 28 29 30 31 32 33 34 36 37 42 43 44 46 47 49 53 54 56 57 58 59 60 61 63 64 68 69 70 73 74 77 79 80 85 87 88 90 95 102 104 105 106 108 109 110 111 114 115 118 119 120 124 125 129 130 132 134 135 137 139 140 142 145 146 147 149 150 155 156 157 161 162 165 167 169 170 172 181 182 188 189 192 194 196 198 201 202 206 208 209 210 # 15976 assign c a 211 0 1 0 1 3 5 6 7 10 11 16 17 18 20 24 25 26 27 28 29 30 31 32 33 34 36 37 42 43 44 46 47 49 53 54 56 57 58 59 60 61 63 64 68 69 70 73 74 77 79 80 85 87 88 90 95 102 104 105 106 108 109 110 111 114 115 118 119 120 124 125 129 130 132 134 135 137 139 140 142 145 146 147 149 150 155 156 157 161 162 165 167 169 170 172 181 182 188 189 192 194 196 198 201 202 206 208 209 210 b 211 0 0 0 1 2 5 6 8 9 10 15 17 18 19 24 25 33 34 36 37 38 39 40 41 45 46 48 49 53 54 55 57 59 66 69 72 73 76 78 79 81 84 85 88 89 93 94 95 97 99 100 101 102 103 104 106 107 108 109 110 112 113 114 116 118 119 120 121 124 125 126 127 128 130 132 133 135 140 143 149 152 154 155 157 158 160 162 163 165 166 170 174 175 178 179 184 186 188 189 191 194 197 198 200 201 202 204 205 208 # 15977 assign c a 211 0 1 e b 211 0 1 e # 15978 assign c a 211 0 1 e b 211 0 1 e # 15979 assign c a 211 0 1 e b 211 0 1 e # 15980 assign c a 211 0 1 e b 211 0 1 f # 15981 assign c a 211 0 1 e b 211 0 1 e # 15982 assign c a 211 0 1 e b 211 0 1 2 10 15 17 18 19 20 21 22 24 26 29 30 31 33 35 36 37 40 45 47 48 50 51 53 55 57 59 60 61 64 65 67 70 72 74 79 80 82 84 85 88 90 91 97 98 99 101 103 107 108 110 111 112 114 115 118 120 121 125 127 128 131 133 134 135 136 138 139 140 144 148 150 154 155 160 161 164 167 169 173 174 177 178 181 182 187 188 189 192 194 196 197 200 201 204 206 209 # 15983 assign c a 211 0 1 f b 211 0 1 f # 15984 assign c a 211 0 1 f b 211 0 1 e # 15985 assign c a 211 0 1 f b 211 0 1 f # 15986 assign c a 211 0 1 f b 211 0 1 f # 15987 assign c a 211 0 1 f b 211 0 1 f # 15988 assign c a 211 0 1 f b 211 0 1 1 3 5 9 10 11 12 14 16 17 20 22 24 25 30 31 33 34 35 36 37 40 41 43 45 46 48 52 54 55 57 58 61 64 65 68 70 71 73 74 75 76 77 78 79 83 84 85 86 87 88 89 93 94 96 97 98 99 102 103 106 109 115 118 120 122 126 127 130 131 132 134 136 137 138 142 143 144 146 149 150 154 156 157 164 166 167 169 170 171 172 173 175 176 178 180 181 182 185 186 188 190 191 196 197 198 199 200 201 202 203 204 207 # 15989 assign c a 211 0 1 3 7 8 9 11 13 20 23 27 28 29 32 36 37 39 41 42 43 45 47 49 53 54 60 61 62 63 65 67 68 69 70 74 75 78 79 80 82 85 86 90 92 97 101 103 106 107 108 109 110 111 113 114 115 116 117 119 120 121 123 127 131 133 134 135 137 138 139 140 141 142 145 146 155 156 157 158 161 162 163 164 165 166 167 169 170 173 175 179 180 183 184 185 186 187 188 191 194 196 202 203 204 206 208 209 b 211 0 1 3 7 8 9 11 13 20 23 27 28 29 32 36 37 39 41 42 43 45 47 49 53 54 60 61 62 63 65 67 68 69 70 74 75 78 79 80 82 85 86 90 92 97 101 103 106 107 108 109 110 111 113 114 115 116 117 119 120 121 123 127 131 133 134 135 137 138 139 140 141 142 145 146 155 156 157 158 161 162 163 164 165 166 167 169 170 173 175 179 180 183 184 185 186 187 188 191 194 196 202 203 204 206 208 209 # 15990 assign c a 211 0 1 3 7 8 9 11 13 20 23 27 28 29 32 36 37 39 41 42 43 45 47 49 53 54 60 61 62 63 65 67 68 69 70 74 75 78 79 80 82 85 86 90 92 97 101 103 106 107 108 109 110 111 113 114 115 116 117 119 120 121 123 127 131 133 134 135 137 138 139 140 141 142 145 146 155 156 157 158 161 162 163 164 165 166 167 169 170 173 175 179 180 183 184 185 186 187 188 191 194 196 202 203 204 206 208 209 b 211 0 1 e # 15991 assign c a 211 0 1 2 5 8 9 10 11 13 16 17 18 21 23 24 26 29 30 31 33 35 36 39 41 44 45 46 47 48 49 52 53 55 57 60 63 66 68 69 70 72 74 75 77 78 82 85 86 88 90 91 94 95 96 98 99 101 102 105 107 111 112 118 121 122 123 124 125 126 127 129 131 132 137 139 141 142 144 145 151 152 154 155 158 163 164 167 170 174 179 181 187 188 191 194 196 200 201 202 203 207 208 209 210 b 211 0 1 2 5 8 9 10 11 13 16 17 18 21 23 24 26 29 30 31 33 35 36 39 41 44 45 46 47 48 49 52 53 55 57 60 63 66 68 69 70 72 74 75 77 78 82 85 86 88 90 91 94 95 96 98 99 101 102 105 107 111 112 118 121 122 123 124 125 126 127 129 131 132 137 139 141 142 144 145 151 152 154 155 158 163 164 167 170 174 179 181 187 188 191 194 196 200 201 202 203 207 208 209 210 # 15992 assign c a 211 0 1 2 5 8 9 10 11 13 16 17 18 21 23 24 26 29 30 31 33 35 36 39 41 44 45 46 47 48 49 52 53 55 57 60 63 66 68 69 70 72 74 75 77 78 82 85 86 88 90 91 94 95 96 98 99 101 102 105 107 111 112 118 121 122 123 124 125 126 127 129 131 132 137 139 141 142 144 145 151 152 154 155 158 163 164 167 170 174 179 181 187 188 191 194 196 200 201 202 203 207 208 209 210 b 211 0 1 f # 15993 assign c a 211 0 1 1 3 7 12 13 16 19 22 24 27 28 30 32 33 34 39 40 42 43 46 47 48 50 51 52 53 55 56 57 58 59 60 61 63 64 70 72 73 74 77 79 82 84 87 88 90 91 94 95 99 100 103 106 111 116 117 119 122 124 125 128 129 131 132 136 138 139 140 142 144 145 146 148 151 152 153 156 157 158 159 160 161 163 165 166 169 172 173 175 176 179 182 186 190 191 194 195 197 199 205 208 b 211 0 1 1 3 7 12 13 16 19 22 24 27 28 30 32 33 34 39 40 42 43 46 47 48 50 51 52 53 55 56 57 58 59 60 61 63 64 70 72 73 74 77 79 82 84 87 88 90 91 94 95 99 100 103 106 111 116 117 119 122 124 125 128 129 131 132 136 138 139 140 142 144 145 146 148 151 152 153 156 157 158 159 160 161 163 165 166 169 172 173 175 176 179 182 186 190 191 194 195 197 199 205 208 # 15994 assign c a 211 0 1 1 3 7 12 13 16 19 22 24 27 28 30 32 33 34 39 40 42 43 46 47 48 50 51 52 53 55 56 57 58 59 60 61 63 64 70 72 73 74 77 79 82 84 87 88 90 91 94 95 99 100 103 106 111 116 117 119 122 124 125 128 129 131 132 136 138 139 140 142 144 145 146 148 151 152 153 156 157 158 159 160 161 163 165 166 169 172 173 175 176 179 182 186 190 191 194 195 197 199 205 208 b 211 0 1 1 2 3 7 9 10 16 17 18 19 22 23 24 25 28 29 32 34 36 38 41 42 43 44 45 47 48 57 59 61 68 77 78 80 82 84 86 88 94 95 96 98 100 102 103 104 105 107 108 111 112 113 115 117 118 122 124 128 130 132 133 136 137 140 141 143 144 147 151 152 153 158 160 161 162 164 166 168 170 171 174 175 176 178 180 182 186 187 188 189 190 192 193 194 195 196 197 199 202 203 205 206 208 209 # 15995 assign c a 211 0 1 e b 211 0 1 e # 15996 assign c a 211 0 1 e b 211 1 0 e # 15997 assign c a 211 0 1 e b 211 0 1 e # 15998 assign c a 211 0 1 e b 211 1 0 f # 15999 assign c a 211 0 1 e b 211 0 1 e # 16000 assign c a 211 0 1 e b 211 1 0 0 1 5 7 10 11 13 14 15 16 17 19 22 24 26 29 30 32 35 36 37 38 40 41 44 51 52 53 55 59 60 61 63 65 66 69 70 72 74 76 77 78 87 88 89 90 91 92 93 95 96 100 101 102 103 107 111 115 116 117 119 120 125 127 129 132 133 134 135 138 139 142 143 144 146 147 153 154 155 156 158 160 161 163 164 166 168 169 172 175 176 177 181 182 183 184 187 188 191 193 198 199 200 203 204 206 207 # 16001 assign c a 211 0 1 f b 211 0 1 f # 16002 assign c a 211 0 1 f b 211 1 0 e # 16003 assign c a 211 0 1 f b 211 0 1 f # 16004 assign c a 211 0 1 f b 211 1 0 f # 16005 assign c a 211 0 1 f b 211 0 1 f # 16006 assign c a 211 0 1 f b 211 1 0 0 2 6 11 15 17 20 21 22 23 28 29 32 34 36 37 41 43 45 47 49 52 53 54 59 61 69 70 71 72 73 76 77 78 80 83 86 88 93 95 97 99 100 102 103 107 113 114 115 117 121 123 124 125 126 128 131 132 133 134 135 138 142 143 144 145 146 148 149 152 153 156 158 159 160 161 162 164 165 170 171 172 174 175 178 179 186 188 194 198 199 200 203 204 208 # 16007 assign c a 211 0 1 1 5 7 8 9 13 15 17 20 21 22 24 25 26 28 31 33 35 36 37 38 39 42 43 47 48 49 51 52 53 55 56 59 60 61 62 64 67 68 72 76 77 79 80 83 85 86 88 89 91 92 93 94 101 102 105 107 108 109 110 115 116 117 119 120 122 123 125 127 128 130 133 134 136 140 142 146 152 154 156 158 159 160 161 163 164 169 170 173 174 175 177 180 181 182 183 184 185 186 187 188 189 190 191 192 194 195 196 202 210 b 211 0 1 1 5 7 8 9 13 15 17 20 21 22 24 25 26 28 31 33 35 36 37 38 39 42 43 47 48 49 51 52 53 55 56 59 60 61 62 64 67 68 72 76 77 79 80 83 85 86 88 89 91 92 93 94 101 102 105 107 108 109 110 115 116 117 119 120 122 123 125 127 128 130 133 134 136 140 142 146 152 154 156 158 159 160 161 163 164 169 170 173 174 175 177 180 181 182 183 184 185 186 187 188 189 190 191 192 194 195 196 202 210 # 16008 assign c a 211 0 1 1 5 7 8 9 13 15 17 20 21 22 24 25 26 28 31 33 35 36 37 38 39 42 43 47 48 49 51 52 53 55 56 59 60 61 62 64 67 68 72 76 77 79 80 83 85 86 88 89 91 92 93 94 101 102 105 107 108 109 110 115 116 117 119 120 122 123 125 127 128 130 133 134 136 140 142 146 152 154 156 158 159 160 161 163 164 169 170 173 174 175 177 180 181 182 183 184 185 186 187 188 189 190 191 192 194 195 196 202 210 b 211 1 0 e # 16009 assign c a 211 0 1 2 3 6 9 12 13 14 15 18 19 23 25 27 29 30 32 33 39 41 42 45 47 50 51 54 55 57 58 60 61 62 63 64 66 67 68 70 73 74 75 76 78 79 82 83 84 86 87 89 92 94 95 96 97 98 99 103 107 108 110 112 113 119 121 122 125 126 128 129 133 137 140 143 145 148 149 152 158 162 165 166 167 168 170 171 172 177 178 181 185 190 191 195 200 202 203 204 206 209 b 211 0 1 2 3 6 9 12 13 14 15 18 19 23 25 27 29 30 32 33 39 41 42 45 47 50 51 54 55 57 58 60 61 62 63 64 66 67 68 70 73 74 75 76 78 79 82 83 84 86 87 89 92 94 95 96 97 98 99 103 107 108 110 112 113 119 121 122 125 126 128 129 133 137 140 143 145 148 149 152 158 162 165 166 167 168 170 171 172 177 178 181 185 190 191 195 200 202 203 204 206 209 # 16010 assign c a 211 0 1 2 3 6 9 12 13 14 15 18 19 23 25 27 29 30 32 33 39 41 42 45 47 50 51 54 55 57 58 60 61 62 63 64 66 67 68 70 73 74 75 76 78 79 82 83 84 86 87 89 92 94 95 96 97 98 99 103 107 108 110 112 113 119 121 122 125 126 128 129 133 137 140 143 145 148 149 152 158 162 165 166 167 168 170 171 172 177 178 181 185 190 191 195 200 202 203 204 206 209 b 211 1 0 f # 16011 assign c a 211 0 1 0 1 2 3 4 5 9 13 15 17 21 24 25 29 30 31 32 33 34 35 36 45 48 49 50 52 55 57 59 60 61 62 64 65 70 72 74 78 79 81 85 87 89 92 94 96 97 98 101 102 104 105 106 111 117 119 121 122 124 125 126 127 128 129 133 134 136 138 139 140 141 142 145 146 147 148 149 152 155 158 159 160 161 164 165 166 167 169 170 172 174 178 184 185 186 189 192 194 195 197 199 204 208 b 211 0 1 0 1 2 3 4 5 9 13 15 17 21 24 25 29 30 31 32 33 34 35 36 45 48 49 50 52 55 57 59 60 61 62 64 65 70 72 74 78 79 81 85 87 89 92 94 96 97 98 101 102 104 105 106 111 117 119 121 122 124 125 126 127 128 129 133 134 136 138 139 140 141 142 145 146 147 148 149 152 155 158 159 160 161 164 165 166 167 169 170 172 174 178 184 185 186 189 192 194 195 197 199 204 208 # 16012 assign c a 211 0 1 0 1 2 3 4 5 9 13 15 17 21 24 25 29 30 31 32 33 34 35 36 45 48 49 50 52 55 57 59 60 61 62 64 65 70 72 74 78 79 81 85 87 89 92 94 96 97 98 101 102 104 105 106 111 117 119 121 122 124 125 126 127 128 129 133 134 136 138 139 140 141 142 145 146 147 148 149 152 155 158 159 160 161 164 165 166 167 169 170 172 174 178 184 185 186 189 192 194 195 197 199 204 208 b 211 1 0 1 2 4 5 12 13 15 17 22 23 28 29 30 32 33 34 35 36 38 42 45 47 48 52 56 58 59 61 62 63 64 65 66 67 68 69 70 73 74 75 76 78 79 80 83 84 86 88 89 96 97 98 99 100 101 103 104 106 108 112 116 118 119 120 126 129 132 133 137 138 142 144 145 146 147 149 150 152 153 154 158 159 163 167 171 172 173 176 177 180 181 183 184 188 191 192 193 194 199 200 202 203 205 208 210 # 16013 assign c a 211 0 1 e b 211 0 1 e # 16014 assign c a 211 0 1 e b 211 1 1 e # 16015 assign c a 211 0 1 e b 211 0 1 e # 16016 assign c a 211 0 1 e b 211 1 1 f # 16017 assign c a 211 0 1 e b 211 0 1 e # 16018 assign c a 211 0 1 e b 211 1 1 0 6 7 9 12 15 17 20 21 22 25 26 27 28 31 32 33 37 40 41 42 43 44 45 46 48 49 50 52 53 54 55 56 57 58 59 60 63 64 65 66 68 70 71 72 75 82 83 84 85 86 87 89 92 93 95 96 101 105 107 108 109 113 116 118 120 122 123 125 126 130 131 133 135 136 137 138 139 140 141 142 143 144 147 150 152 153 156 159 160 162 163 165 166 167 168 170 173 176 177 180 182 183 184 186 187 188 190 191 192 194 195 198 200 201 202 206 208 210 # 16019 assign c a 211 0 1 f b 211 0 1 f # 16020 assign c a 211 0 1 f b 211 1 1 e # 16021 assign c a 211 0 1 f b 211 0 1 f # 16022 assign c a 211 0 1 f b 211 1 1 f # 16023 assign c a 211 0 1 f b 211 0 1 f # 16024 assign c a 211 0 1 f b 211 1 1 0 2 3 6 10 12 14 15 16 18 21 22 23 26 27 30 32 33 34 37 39 40 42 43 44 45 46 47 49 51 52 54 55 57 58 59 62 63 65 68 69 71 74 77 79 80 82 84 85 88 90 91 92 93 94 95 96 99 100 101 104 108 109 110 111 113 115 117 120 123 126 130 132 134 135 136 139 140 144 145 150 152 153 155 157 159 164 165 172 173 175 177 179 181 183 184 185 186 188 190 191 198 200 201 202 203 204 208 209 # 16025 assign c a 211 0 1 1 2 4 7 10 12 17 18 19 20 21 22 23 24 25 27 28 29 32 33 37 39 42 44 53 56 59 65 66 67 70 71 72 73 74 78 79 80 81 84 86 87 88 89 90 94 95 96 98 100 101 106 107 108 109 111 112 113 115 117 118 120 121 122 124 127 128 131 133 135 136 139 140 141 143 144 145 147 148 151 152 153 155 157 158 168 169 170 171 172 177 179 181 182 184 185 188 190 191 192 193 195 197 202 204 206 207 210 b 211 0 1 1 2 4 7 10 12 17 18 19 20 21 22 23 24 25 27 28 29 32 33 37 39 42 44 53 56 59 65 66 67 70 71 72 73 74 78 79 80 81 84 86 87 88 89 90 94 95 96 98 100 101 106 107 108 109 111 112 113 115 117 118 120 121 122 124 127 128 131 133 135 136 139 140 141 143 144 145 147 148 151 152 153 155 157 158 168 169 170 171 172 177 179 181 182 184 185 188 190 191 192 193 195 197 202 204 206 207 210 # 16026 assign c a 211 0 1 1 2 4 7 10 12 17 18 19 20 21 22 23 24 25 27 28 29 32 33 37 39 42 44 53 56 59 65 66 67 70 71 72 73 74 78 79 80 81 84 86 87 88 89 90 94 95 96 98 100 101 106 107 108 109 111 112 113 115 117 118 120 121 122 124 127 128 131 133 135 136 139 140 141 143 144 145 147 148 151 152 153 155 157 158 168 169 170 171 172 177 179 181 182 184 185 188 190 191 192 193 195 197 202 204 206 207 210 b 211 1 1 e # 16027 assign c a 211 0 1 0 1 2 3 4 5 7 10 13 14 17 21 25 36 40 41 42 44 45 47 48 49 51 52 53 56 57 58 62 63 65 66 70 73 74 75 76 78 79 82 83 88 89 90 93 94 95 96 97 102 108 110 111 112 113 114 116 118 119 121 124 130 132 134 135 136 139 140 142 143 144 145 147 148 150 154 157 158 159 164 167 168 170 171 172 174 175 178 180 181 184 191 192 194 195 196 198 200 204 205 209 b 211 0 1 0 1 2 3 4 5 7 10 13 14 17 21 25 36 40 41 42 44 45 47 48 49 51 52 53 56 57 58 62 63 65 66 70 73 74 75 76 78 79 82 83 88 89 90 93 94 95 96 97 102 108 110 111 112 113 114 116 118 119 121 124 130 132 134 135 136 139 140 142 143 144 145 147 148 150 154 157 158 159 164 167 168 170 171 172 174 175 178 180 181 184 191 192 194 195 196 198 200 204 205 209 # 16028 assign c a 211 0 1 0 1 2 3 4 5 7 10 13 14 17 21 25 36 40 41 42 44 45 47 48 49 51 52 53 56 57 58 62 63 65 66 70 73 74 75 76 78 79 82 83 88 89 90 93 94 95 96 97 102 108 110 111 112 113 114 116 118 119 121 124 130 132 134 135 136 139 140 142 143 144 145 147 148 150 154 157 158 159 164 167 168 170 171 172 174 175 178 180 181 184 191 192 194 195 196 198 200 204 205 209 b 211 1 1 f # 16029 assign c a 211 0 1 0 1 2 4 6 9 12 13 16 21 23 24 26 27 28 29 31 32 34 36 37 38 40 45 46 47 52 53 55 58 59 62 63 64 65 70 74 75 76 77 78 80 81 82 83 84 85 86 87 90 92 93 97 98 99 101 103 104 105 107 108 111 113 114 115 116 118 120 121 122 123 124 132 135 137 138 140 142 145 154 155 159 164 170 172 173 175 177 179 180 181 182 184 185 191 192 195 196 197 203 204 205 206 208 b 211 0 1 0 1 2 4 6 9 12 13 16 21 23 24 26 27 28 29 31 32 34 36 37 38 40 45 46 47 52 53 55 58 59 62 63 64 65 70 74 75 76 77 78 80 81 82 83 84 85 86 87 90 92 93 97 98 99 101 103 104 105 107 108 111 113 114 115 116 118 120 121 122 123 124 132 135 137 138 140 142 145 154 155 159 164 170 172 173 175 177 179 180 181 182 184 185 191 192 195 196 197 203 204 205 206 208 # 16030 assign c a 211 0 1 0 1 2 4 6 9 12 13 16 21 23 24 26 27 28 29 31 32 34 36 37 38 40 45 46 47 52 53 55 58 59 62 63 64 65 70 74 75 76 77 78 80 81 82 83 84 85 86 87 90 92 93 97 98 99 101 103 104 105 107 108 111 113 114 115 116 118 120 121 122 123 124 132 135 137 138 140 142 145 154 155 159 164 170 172 173 175 177 179 180 181 182 184 185 191 192 195 196 197 203 204 205 206 208 b 211 1 1 0 1 3 4 9 10 12 15 22 25 27 28 29 32 35 36 37 41 45 46 50 51 52 53 56 57 59 64 65 66 67 70 71 78 79 81 84 85 87 89 90 91 93 96 98 101 103 107 108 110 116 117 120 121 123 124 125 127 128 130 135 136 138 140 142 143 144 147 151 153 154 162 163 168 170 172 176 177 179 182 183 185 187 191 192 197 202 203 204 208 209 # 16031 assign c a 211 1 0 e b 211 1 0 e # 16032 assign c a 211 1 0 e b 211 0 0 e # 16033 assign c a 211 1 0 e b 211 1 0 e # 16034 assign c a 211 1 0 e b 211 0 0 f # 16035 assign c a 211 1 0 e b 211 1 0 e # 16036 assign c a 211 1 0 e b 211 0 0 3 8 9 13 14 15 17 26 27 31 32 33 34 37 39 40 41 44 46 47 51 52 53 54 55 57 58 59 61 63 64 67 69 70 71 72 76 81 84 87 88 89 90 92 95 98 99 101 102 103 105 109 110 111 112 113 114 115 118 124 125 126 129 130 133 135 136 137 138 139 140 141 142 143 144 145 146 147 148 152 153 155 158 159 161 163 164 165 168 171 174 175 176 178 179 180 183 184 185 186 189 192 197 198 199 202 204 207 208 210 # 16037 assign c a 211 1 0 f b 211 1 0 f # 16038 assign c a 211 1 0 f b 211 0 0 e # 16039 assign c a 211 1 0 f b 211 1 0 f # 16040 assign c a 211 1 0 f b 211 0 0 f # 16041 assign c a 211 1 0 f b 211 1 0 f # 16042 assign c a 211 1 0 f b 211 0 0 0 1 2 3 4 5 6 8 13 14 15 18 20 22 24 26 27 32 35 38 40 42 43 46 47 48 50 51 52 53 54 55 57 59 60 61 63 65 66 67 69 70 71 73 74 75 77 82 83 85 86 87 88 90 91 94 95 99 102 105 109 110 111 113 114 115 116 118 120 121 123 125 126 127 131 132 135 136 144 145 147 149 152 155 157 158 159 162 163 165 166 170 171 172 175 179 181 182 187 189 190 195 199 200 202 203 205 207 209 # 16043 assign c a 211 1 0 0 1 4 5 7 8 12 13 14 18 21 26 28 29 30 31 34 36 39 40 41 43 44 48 49 50 52 53 54 58 59 62 63 64 65 67 70 74 75 76 79 81 84 85 86 91 92 93 95 96 97 99 109 110 111 112 114 115 117 118 119 125 126 127 128 130 131 132 137 139 140 142 144 145 147 150 151 154 155 157 158 159 161 162 164 169 174 176 177 181 183 191 192 194 195 196 201 202 203 210 b 211 1 0 0 1 4 5 7 8 12 13 14 18 21 26 28 29 30 31 34 36 39 40 41 43 44 48 49 50 52 53 54 58 59 62 63 64 65 67 70 74 75 76 79 81 84 85 86 91 92 93 95 96 97 99 109 110 111 112 114 115 117 118 119 125 126 127 128 130 131 132 137 139 140 142 144 145 147 150 151 154 155 157 158 159 161 162 164 169 174 176 177 181 183 191 192 194 195 196 201 202 203 210 # 16044 assign c a 211 1 0 0 1 4 5 7 8 12 13 14 18 21 26 28 29 30 31 34 36 39 40 41 43 44 48 49 50 52 53 54 58 59 62 63 64 65 67 70 74 75 76 79 81 84 85 86 91 92 93 95 96 97 99 109 110 111 112 114 115 117 118 119 125 126 127 128 130 131 132 137 139 140 142 144 145 147 150 151 154 155 157 158 159 161 162 164 169 174 176 177 181 183 191 192 194 195 196 201 202 203 210 b 211 0 0 e # 16045 assign c a 211 1 0 0 2 4 6 10 17 18 19 21 24 25 29 30 33 34 37 39 40 42 47 48 52 53 55 56 57 60 62 66 75 77 78 82 90 92 94 95 96 100 101 104 105 108 109 110 113 116 117 118 123 124 126 127 128 133 134 136 137 138 139 140 141 142 146 150 152 155 158 160 162 164 167 172 174 176 178 180 181 182 183 184 186 188 189 190 191 194 196 198 200 202 203 204 205 207 b 211 1 0 0 2 4 6 10 17 18 19 21 24 25 29 30 33 34 37 39 40 42 47 48 52 53 55 56 57 60 62 66 75 77 78 82 90 92 94 95 96 100 101 104 105 108 109 110 113 116 117 118 123 124 126 127 128 133 134 136 137 138 139 140 141 142 146 150 152 155 158 160 162 164 167 172 174 176 178 180 181 182 183 184 186 188 189 190 191 194 196 198 200 202 203 204 205 207 # 16046 assign c a 211 1 0 0 2 4 6 10 17 18 19 21 24 25 29 30 33 34 37 39 40 42 47 48 52 53 55 56 57 60 62 66 75 77 78 82 90 92 94 95 96 100 101 104 105 108 109 110 113 116 117 118 123 124 126 127 128 133 134 136 137 138 139 140 141 142 146 150 152 155 158 160 162 164 167 172 174 176 178 180 181 182 183 184 186 188 189 190 191 194 196 198 200 202 203 204 205 207 b 211 0 0 f # 16047 assign c a 211 1 0 1 2 4 8 11 13 14 15 16 18 20 23 25 26 34 36 37 38 39 41 43 44 50 53 55 56 58 62 63 64 66 67 69 71 72 73 77 78 79 81 83 84 87 88 90 92 93 94 95 97 98 99 100 105 106 108 109 112 114 116 119 120 122 123 124 125 126 128 129 130 131 132 138 141 142 143 145 149 152 155 160 162 163 164 169 170 171 172 174 178 180 182 183 185 186 187 190 193 199 204 206 207 209 b 211 1 0 1 2 4 8 11 13 14 15 16 18 20 23 25 26 34 36 37 38 39 41 43 44 50 53 55 56 58 62 63 64 66 67 69 71 72 73 77 78 79 81 83 84 87 88 90 92 93 94 95 97 98 99 100 105 106 108 109 112 114 116 119 120 122 123 124 125 126 128 129 130 131 132 138 141 142 143 145 149 152 155 160 162 163 164 169 170 171 172 174 178 180 182 183 185 186 187 190 193 199 204 206 207 209 # 16048 assign c a 211 1 0 1 2 4 8 11 13 14 15 16 18 20 23 25 26 34 36 37 38 39 41 43 44 50 53 55 56 58 62 63 64 66 67 69 71 72 73 77 78 79 81 83 84 87 88 90 92 93 94 95 97 98 99 100 105 106 108 109 112 114 116 119 120 122 123 124 125 126 128 129 130 131 132 138 141 142 143 145 149 152 155 160 162 163 164 169 170 171 172 174 178 180 182 183 185 186 187 190 193 199 204 206 207 209 b 211 0 0 4 9 11 14 16 18 20 22 24 27 28 32 33 34 36 38 40 44 46 47 48 49 51 52 55 57 58 63 70 72 73 74 75 78 79 81 82 85 87 88 90 91 92 94 95 96 100 101 102 103 104 106 108 109 112 113 115 116 117 118 119 120 121 122 123 125 126 127 129 132 133 135 140 142 143 146 148 151 153 154 156 159 161 164 168 169 170 171 175 176 179 180 182 183 188 189 192 194 196 198 199 204 205 207 # 16049 assign c a 211 1 0 e b 211 1 0 e # 16050 assign c a 211 1 0 e b 211 0 1 e # 16051 assign c a 211 1 0 e b 211 1 0 e # 16052 assign c a 211 1 0 e b 211 0 1 f # 16053 assign c a 211 1 0 e b 211 1 0 e # 16054 assign c a 211 1 0 e b 211 0 1 0 1 3 5 7 8 10 15 17 20 21 22 24 25 26 27 28 31 34 35 39 40 44 46 50 54 60 63 64 66 68 71 72 74 75 76 77 81 83 87 88 89 90 101 102 105 106 108 113 115 117 119 120 123 124 125 129 131 134 135 137 138 142 147 149 150 155 161 163 167 172 174 176 180 181 185 190 197 199 204 206 209 210 # 16055 assign c a 211 1 0 f b 211 1 0 f # 16056 assign c a 211 1 0 f b 211 0 1 e # 16057 assign c a 211 1 0 f b 211 1 0 f # 16058 assign c a 211 1 0 f b 211 0 1 f # 16059 assign c a 211 1 0 f b 211 1 0 f # 16060 assign c a 211 1 0 f b 211 0 1 1 3 5 6 7 10 11 12 13 14 17 20 21 24 25 26 29 30 31 32 38 40 41 43 44 46 48 51 53 56 59 62 64 67 68 71 73 75 76 79 80 81 82 84 86 91 92 94 100 101 102 104 107 108 110 111 113 115 116 121 126 127 128 130 131 133 134 135 138 140 143 145 146 150 151 153 154 155 157 159 160 162 165 167 168 169 171 173 174 175 176 177 178 181 182 183 184 185 187 188 189 190 191 193 194 195 198 203 205 208 210 # 16061 assign c a 211 1 0 0 2 3 4 5 7 10 12 13 15 18 19 20 22 24 25 26 28 30 31 32 33 35 37 38 39 40 41 43 47 48 51 60 62 67 69 70 72 73 74 78 80 84 88 89 90 93 94 95 102 103 105 107 111 112 115 116 117 119 120 121 124 126 127 131 132 134 135 136 137 138 141 143 146 149 151 152 155 156 158 160 162 165 168 170 171 173 174 175 177 179 180 182 183 184 185 187 190 191 193 195 196 197 207 b 211 1 0 0 2 3 4 5 7 10 12 13 15 18 19 20 22 24 25 26 28 30 31 32 33 35 37 38 39 40 41 43 47 48 51 60 62 67 69 70 72 73 74 78 80 84 88 89 90 93 94 95 102 103 105 107 111 112 115 116 117 119 120 121 124 126 127 131 132 134 135 136 137 138 141 143 146 149 151 152 155 156 158 160 162 165 168 170 171 173 174 175 177 179 180 182 183 184 185 187 190 191 193 195 196 197 207 # 16062 assign c a 211 1 0 0 2 3 4 5 7 10 12 13 15 18 19 20 22 24 25 26 28 30 31 32 33 35 37 38 39 40 41 43 47 48 51 60 62 67 69 70 72 73 74 78 80 84 88 89 90 93 94 95 102 103 105 107 111 112 115 116 117 119 120 121 124 126 127 131 132 134 135 136 137 138 141 143 146 149 151 152 155 156 158 160 162 165 168 170 171 173 174 175 177 179 180 182 183 184 185 187 190 191 193 195 196 197 207 b 211 0 1 e # 16063 assign c a 211 1 0 0 1 3 4 7 10 12 13 14 15 17 19 21 23 24 25 26 27 34 36 40 41 42 43 44 45 46 48 51 52 53 54 55 56 57 58 59 61 63 74 76 77 79 80 81 82 83 86 89 92 96 100 101 106 110 112 113 118 120 121 122 123 126 128 131 133 135 137 138 139 141 142 144 146 147 155 156 160 161 164 166 169 170 171 172 173 174 175 177 178 179 183 184 186 188 189 190 192 194 196 197 198 200 201 202 203 204 205 207 208 210 b 211 1 0 0 1 3 4 7 10 12 13 14 15 17 19 21 23 24 25 26 27 34 36 40 41 42 43 44 45 46 48 51 52 53 54 55 56 57 58 59 61 63 74 76 77 79 80 81 82 83 86 89 92 96 100 101 106 110 112 113 118 120 121 122 123 126 128 131 133 135 137 138 139 141 142 144 146 147 155 156 160 161 164 166 169 170 171 172 173 174 175 177 178 179 183 184 186 188 189 190 192 194 196 197 198 200 201 202 203 204 205 207 208 210 # 16064 assign c a 211 1 0 0 1 3 4 7 10 12 13 14 15 17 19 21 23 24 25 26 27 34 36 40 41 42 43 44 45 46 48 51 52 53 54 55 56 57 58 59 61 63 74 76 77 79 80 81 82 83 86 89 92 96 100 101 106 110 112 113 118 120 121 122 123 126 128 131 133 135 137 138 139 141 142 144 146 147 155 156 160 161 164 166 169 170 171 172 173 174 175 177 178 179 183 184 186 188 189 190 192 194 196 197 198 200 201 202 203 204 205 207 208 210 b 211 0 1 f # 16065 assign c a 211 1 0 0 2 3 7 10 11 13 15 16 19 20 22 23 24 25 27 28 30 31 32 33 37 38 41 43 44 45 48 49 51 54 57 61 62 64 66 67 69 71 73 74 78 84 86 89 91 92 95 96 97 98 100 104 110 111 116 117 119 120 121 122 123 125 126 128 130 131 132 134 135 136 140 142 144 149 152 157 158 161 162 165 166 176 177 178 179 180 183 187 190 191 193 195 196 201 202 203 207 209 210 b 211 1 0 0 2 3 7 10 11 13 15 16 19 20 22 23 24 25 27 28 30 31 32 33 37 38 41 43 44 45 48 49 51 54 57 61 62 64 66 67 69 71 73 74 78 84 86 89 91 92 95 96 97 98 100 104 110 111 116 117 119 120 121 122 123 125 126 128 130 131 132 134 135 136 140 142 144 149 152 157 158 161 162 165 166 176 177 178 179 180 183 187 190 191 193 195 196 201 202 203 207 209 210 # 16066 assign c a 211 1 0 0 2 3 7 10 11 13 15 16 19 20 22 23 24 25 27 28 30 31 32 33 37 38 41 43 44 45 48 49 51 54 57 61 62 64 66 67 69 71 73 74 78 84 86 89 91 92 95 96 97 98 100 104 110 111 116 117 119 120 121 122 123 125 126 128 130 131 132 134 135 136 140 142 144 149 152 157 158 161 162 165 166 176 177 178 179 180 183 187 190 191 193 195 196 201 202 203 207 209 210 b 211 0 1 4 5 6 12 15 17 18 19 21 22 24 25 27 30 32 34 36 38 40 44 45 48 51 52 55 57 58 61 62 63 65 71 72 73 75 76 77 79 80 81 82 83 85 86 88 89 90 91 92 93 94 96 99 100 101 102 103 104 106 107 110 115 127 128 129 130 131 132 133 134 135 137 138 139 141 142 143 147 149 150 151 152 154 162 165 167 171 176 177 180 182 183 185 186 187 191 195 196 197 201 203 205 208 # 16067 assign c a 211 1 0 e b 211 1 0 e # 16068 assign c a 211 1 0 e b 211 1 0 e # 16069 assign c a 211 1 0 e b 211 1 0 e # 16070 assign c a 211 1 0 e b 211 1 0 f # 16071 assign c a 211 1 0 e b 211 1 0 e # 16072 assign c a 211 1 0 e b 211 1 0 1 8 11 12 13 15 16 20 23 24 26 27 28 33 34 37 38 44 45 47 50 52 56 59 60 61 63 64 65 68 70 74 79 80 84 85 86 88 91 94 98 101 102 103 105 107 109 110 111 112 115 120 122 124 125 126 128 129 130 132 133 136 137 140 143 144 145 149 154 157 158 160 161 162 163 164 167 169 170 171 174 176 180 181 187 188 190 191 192 193 195 196 197 203 204 205 206 207 210 # 16073 assign c a 211 1 0 f b 211 1 0 f # 16074 assign c a 211 1 0 f b 211 1 0 e # 16075 assign c a 211 1 0 f b 211 1 0 f # 16076 assign c a 211 1 0 f b 211 1 0 f # 16077 assign c a 211 1 0 f b 211 1 0 f # 16078 assign c a 211 1 0 f b 211 1 0 4 5 6 7 8 10 14 15 17 19 21 22 23 24 25 26 32 33 34 35 36 37 38 42 44 45 48 49 51 52 54 55 57 61 62 64 65 68 70 72 73 74 75 76 79 82 84 85 86 87 88 92 94 95 102 106 108 110 111 112 113 121 127 131 132 135 136 144 145 146 148 150 154 155 158 159 160 162 169 170 171 172 175 176 177 179 187 188 189 190 193 194 195 198 199 201 202 204 205 207 208 209 210 # 16079 assign c a 211 1 0 1 3 5 6 8 9 15 16 17 18 20 21 24 27 30 35 39 41 47 53 55 56 57 58 62 64 65 67 70 74 76 79 80 81 84 85 87 88 89 90 91 93 96 97 99 106 108 111 118 119 121 122 123 124 132 133 134 137 141 143 145 151 154 155 156 157 161 162 164 165 168 169 170 172 175 180 181 183 185 186 188 190 194 198 199 201 203 206 207 208 b 211 1 0 1 3 5 6 8 9 15 16 17 18 20 21 24 27 30 35 39 41 47 53 55 56 57 58 62 64 65 67 70 74 76 79 80 81 84 85 87 88 89 90 91 93 96 97 99 106 108 111 118 119 121 122 123 124 132 133 134 137 141 143 145 151 154 155 156 157 161 162 164 165 168 169 170 172 175 180 181 183 185 186 188 190 194 198 199 201 203 206 207 208 # 16080 assign c a 211 1 0 1 3 5 6 8 9 15 16 17 18 20 21 24 27 30 35 39 41 47 53 55 56 57 58 62 64 65 67 70 74 76 79 80 81 84 85 87 88 89 90 91 93 96 97 99 106 108 111 118 119 121 122 123 124 132 133 134 137 141 143 145 151 154 155 156 157 161 162 164 165 168 169 170 172 175 180 181 183 185 186 188 190 194 198 199 201 203 206 207 208 b 211 1 0 e # 16081 assign c a 211 1 0 0 3 4 6 11 12 13 14 16 17 19 24 25 28 29 30 36 37 38 41 43 44 45 47 48 50 52 53 56 57 58 61 62 63 64 66 67 69 70 72 77 81 83 84 85 87 88 94 97 98 99 100 101 105 106 110 111 114 118 119 120 123 127 130 131 133 136 138 140 141 142 143 144 145 148 151 154 155 156 157 158 159 161 162 164 166 168 169 170 171 172 173 174 175 177 178 183 184 185 186 188 189 194 196 197 198 199 200 202 207 b 211 1 0 0 3 4 6 11 12 13 14 16 17 19 24 25 28 29 30 36 37 38 41 43 44 45 47 48 50 52 53 56 57 58 61 62 63 64 66 67 69 70 72 77 81 83 84 85 87 88 94 97 98 99 100 101 105 106 110 111 114 118 119 120 123 127 130 131 133 136 138 140 141 142 143 144 145 148 151 154 155 156 157 158 159 161 162 164 166 168 169 170 171 172 173 174 175 177 178 183 184 185 186 188 189 194 196 197 198 199 200 202 207 # 16082 assign c a 211 1 0 0 3 4 6 11 12 13 14 16 17 19 24 25 28 29 30 36 37 38 41 43 44 45 47 48 50 52 53 56 57 58 61 62 63 64 66 67 69 70 72 77 81 83 84 85 87 88 94 97 98 99 100 101 105 106 110 111 114 118 119 120 123 127 130 131 133 136 138 140 141 142 143 144 145 148 151 154 155 156 157 158 159 161 162 164 166 168 169 170 171 172 173 174 175 177 178 183 184 185 186 188 189 194 196 197 198 199 200 202 207 b 211 1 0 f # 16083 assign c a 211 1 0 0 7 9 11 13 15 16 19 20 21 25 26 27 29 33 34 35 37 39 40 41 45 49 50 52 54 55 58 59 63 64 65 66 68 70 71 72 77 78 79 81 82 85 87 90 91 93 94 96 98 99 100 101 102 103 107 109 111 112 114 115 118 123 125 132 134 136 138 142 143 144 145 146 149 150 151 153 154 155 156 161 162 165 166 168 169 179 180 186 190 191 192 200 201 205 207 208 209 210 b 211 1 0 0 7 9 11 13 15 16 19 20 21 25 26 27 29 33 34 35 37 39 40 41 45 49 50 52 54 55 58 59 63 64 65 66 68 70 71 72 77 78 79 81 82 85 87 90 91 93 94 96 98 99 100 101 102 103 107 109 111 112 114 115 118 123 125 132 134 136 138 142 143 144 145 146 149 150 151 153 154 155 156 161 162 165 166 168 169 179 180 186 190 191 192 200 201 205 207 208 209 210 # 16084 assign c a 211 1 0 0 7 9 11 13 15 16 19 20 21 25 26 27 29 33 34 35 37 39 40 41 45 49 50 52 54 55 58 59 63 64 65 66 68 70 71 72 77 78 79 81 82 85 87 90 91 93 94 96 98 99 100 101 102 103 107 109 111 112 114 115 118 123 125 132 134 136 138 142 143 144 145 146 149 150 151 153 154 155 156 161 162 165 166 168 169 179 180 186 190 191 192 200 201 205 207 208 209 210 b 211 1 0 0 7 8 11 13 15 17 20 22 23 24 25 27 28 31 32 33 34 38 40 45 46 47 56 57 58 59 63 68 70 72 73 74 76 77 78 80 85 86 89 91 93 94 97 98 99 101 103 104 108 110 111 115 116 120 121 125 126 127 128 129 130 138 140 144 145 147 149 155 158 160 162 164 165 166 170 172 175 177 181 182 183 186 187 189 193 194 195 196 197 201 202 206 208 210 # 16085 assign c a 211 1 0 e b 211 1 0 e # 16086 assign c a 211 1 0 e b 211 1 1 e # 16087 assign c a 211 1 0 e b 211 1 0 e # 16088 assign c a 211 1 0 e b 211 1 1 f # 16089 assign c a 211 1 0 e b 211 1 0 e # 16090 assign c a 211 1 0 e b 211 1 1 2 5 11 14 17 18 19 20 21 22 24 25 28 29 32 34 38 39 40 42 44 45 46 53 54 56 57 58 59 60 63 67 68 69 71 74 75 76 77 82 85 86 88 92 93 98 103 104 106 107 108 109 114 115 116 119 120 121 123 124 126 128 129 130 137 138 140 142 148 149 151 152 154 155 156 157 159 160 164 165 168 170 171 172 176 177 178 179 180 181 182 183 185 186 192 193 196 197 198 204 207 210 # 16091 assign c a 211 1 0 f b 211 1 0 f # 16092 assign c a 211 1 0 f b 211 1 1 e # 16093 assign c a 211 1 0 f b 211 1 0 f # 16094 assign c a 211 1 0 f b 211 1 1 f # 16095 assign c a 211 1 0 f b 211 1 0 f # 16096 assign c a 211 1 0 f b 211 1 1 0 2 3 4 5 9 10 13 14 15 17 18 19 23 25 28 31 32 34 36 38 40 42 45 47 48 50 53 54 55 56 58 59 60 62 66 68 69 70 71 77 79 80 81 84 87 94 95 96 97 103 104 107 110 114 117 119 121 123 124 125 126 127 128 134 136 140 146 147 149 150 152 155 157 159 161 163 166 173 175 178 181 182 183 186 192 193 196 201 202 203 204 206 209 210 # 16097 assign c a 211 1 0 0 1 2 3 5 7 9 11 12 13 14 15 16 20 23 26 27 28 29 31 32 35 37 38 40 41 44 47 49 53 54 55 57 58 62 67 69 72 74 75 76 78 83 86 90 91 92 93 94 98 99 102 104 105 108 110 112 114 115 116 117 119 122 123 124 125 128 130 133 136 137 138 139 140 142 143 144 145 146 148 151 154 156 158 159 161 163 164 165 169 177 178 179 182 183 185 189 191 192 193 194 197 198 199 200 205 206 207 208 210 b 211 1 0 0 1 2 3 5 7 9 11 12 13 14 15 16 20 23 26 27 28 29 31 32 35 37 38 40 41 44 47 49 53 54 55 57 58 62 67 69 72 74 75 76 78 83 86 90 91 92 93 94 98 99 102 104 105 108 110 112 114 115 116 117 119 122 123 124 125 128 130 133 136 137 138 139 140 142 143 144 145 146 148 151 154 156 158 159 161 163 164 165 169 177 178 179 182 183 185 189 191 192 193 194 197 198 199 200 205 206 207 208 210 # 16098 assign c a 211 1 0 0 1 2 3 5 7 9 11 12 13 14 15 16 20 23 26 27 28 29 31 32 35 37 38 40 41 44 47 49 53 54 55 57 58 62 67 69 72 74 75 76 78 83 86 90 91 92 93 94 98 99 102 104 105 108 110 112 114 115 116 117 119 122 123 124 125 128 130 133 136 137 138 139 140 142 143 144 145 146 148 151 154 156 158 159 161 163 164 165 169 177 178 179 182 183 185 189 191 192 193 194 197 198 199 200 205 206 207 208 210 b 211 1 1 e # 16099 assign c a 211 1 0 0 1 2 3 5 6 7 8 9 11 12 13 22 23 24 25 26 27 32 36 38 39 42 43 47 48 52 55 56 57 58 62 71 72 74 75 77 78 81 85 88 90 91 93 95 96 97 101 103 105 106 107 108 109 110 112 114 115 119 120 121 122 124 127 128 129 132 135 138 140 141 142 143 145 146 149 152 155 156 157 159 161 162 167 169 172 175 177 179 180 181 182 183 186 190 191 192 193 194 198 199 203 206 207 b 211 1 0 0 1 2 3 5 6 7 8 9 11 12 13 22 23 24 25 26 27 32 36 38 39 42 43 47 48 52 55 56 57 58 62 71 72 74 75 77 78 81 85 88 90 91 93 95 96 97 101 103 105 106 107 108 109 110 112 114 115 119 120 121 122 124 127 128 129 132 135 138 140 141 142 143 145 146 149 152 155 156 157 159 161 162 167 169 172 175 177 179 180 181 182 183 186 190 191 192 193 194 198 199 203 206 207 # 16100 assign c a 211 1 0 0 1 2 3 5 6 7 8 9 11 12 13 22 23 24 25 26 27 32 36 38 39 42 43 47 48 52 55 56 57 58 62 71 72 74 75 77 78 81 85 88 90 91 93 95 96 97 101 103 105 106 107 108 109 110 112 114 115 119 120 121 122 124 127 128 129 132 135 138 140 141 142 143 145 146 149 152 155 156 157 159 161 162 167 169 172 175 177 179 180 181 182 183 186 190 191 192 193 194 198 199 203 206 207 b 211 1 1 f # 16101 assign c a 211 1 0 4 5 11 14 15 18 21 25 29 30 31 37 38 41 43 47 48 50 54 55 58 59 61 62 63 64 69 70 72 76 77 78 80 81 82 86 87 88 89 90 91 92 93 94 95 97 98 99 100 101 103 104 107 113 115 118 121 124 125 126 128 129 130 131 132 134 135 136 139 141 143 144 145 151 152 153 154 155 156 157 158 159 160 161 162 163 165 167 168 169 170 172 176 177 178 180 182 183 184 185 186 187 188 189 191 192 194 195 196 198 199 201 203 205 b 211 1 0 4 5 11 14 15 18 21 25 29 30 31 37 38 41 43 47 48 50 54 55 58 59 61 62 63 64 69 70 72 76 77 78 80 81 82 86 87 88 89 90 91 92 93 94 95 97 98 99 100 101 103 104 107 113 115 118 121 124 125 126 128 129 130 131 132 134 135 136 139 141 143 144 145 151 152 153 154 155 156 157 158 159 160 161 162 163 165 167 168 169 170 172 176 177 178 180 182 183 184 185 186 187 188 189 191 192 194 195 196 198 199 201 203 205 # 16102 assign c a 211 1 0 4 5 11 14 15 18 21 25 29 30 31 37 38 41 43 47 48 50 54 55 58 59 61 62 63 64 69 70 72 76 77 78 80 81 82 86 87 88 89 90 91 92 93 94 95 97 98 99 100 101 103 104 107 113 115 118 121 124 125 126 128 129 130 131 132 134 135 136 139 141 143 144 145 151 152 153 154 155 156 157 158 159 160 161 162 163 165 167 168 169 170 172 176 177 178 180 182 183 184 185 186 187 188 189 191 192 194 195 196 198 199 201 203 205 b 211 1 1 9 10 12 13 15 16 18 19 20 21 23 24 28 30 32 34 36 37 38 40 42 43 45 52 53 54 55 59 60 61 63 65 67 68 69 71 73 74 75 76 81 82 84 85 88 89 91 92 95 97 98 100 109 110 111 112 115 117 118 120 122 124 130 131 132 135 139 141 142 143 146 147 149 150 152 153 154 155 158 159 160 161 162 164 165 169 171 172 174 176 178 181 182 184 186 188 189 192 193 194 195 196 201 203 205 210 # 16103 assign c a 211 1 1 e b 211 1 1 e # 16104 assign c a 211 1 1 e b 211 0 0 e # 16105 assign c a 211 1 1 e b 211 1 1 e # 16106 assign c a 211 1 1 e b 211 0 0 f # 16107 assign c a 211 1 1 e b 211 1 1 e # 16108 assign c a 211 1 1 e b 211 0 0 0 3 5 6 7 8 9 10 12 13 16 17 18 20 22 23 24 25 27 30 31 32 34 35 37 38 39 40 41 43 44 47 49 53 56 59 60 61 62 63 65 66 68 71 73 74 75 77 78 80 81 82 84 85 86 87 89 90 92 93 96 97 98 99 102 103 104 106 110 114 117 119 120 121 123 124 125 126 128 129 132 133 134 135 137 139 141 143 147 150 151 154 157 158 159 161 164 168 169 172 173 174 179 180 182 184 187 190 191 197 198 202 205 207 208 209 # 16109 assign c a 211 1 1 f b 211 1 1 f # 16110 assign c a 211 1 1 f b 211 0 0 e # 16111 assign c a 211 1 1 f b 211 1 1 f # 16112 assign c a 211 1 1 f b 211 0 0 f # 16113 assign c a 211 1 1 f b 211 1 1 f # 16114 assign c a 211 1 1 f b 211 0 0 0 1 3 4 5 7 8 9 10 11 12 13 14 17 18 19 22 26 29 30 32 33 36 37 39 41 44 46 49 52 54 56 57 58 60 65 66 70 71 76 78 80 82 83 85 88 92 93 94 96 97 104 105 106 107 108 111 112 113 114 116 120 121 122 124 125 126 127 128 130 132 134 135 136 138 139 140 141 142 143 144 145 146 147 154 160 168 169 171 172 175 178 179 180 181 185 186 190 194 195 197 200 201 202 203 206 207 208 209 210 # 16115 assign c a 211 1 1 0 1 4 8 9 11 14 16 17 18 20 21 23 25 26 28 31 36 37 38 41 43 46 48 49 50 51 53 55 56 58 60 63 64 69 70 71 72 76 78 79 81 83 84 85 90 91 92 94 96 98 99 101 102 106 108 109 110 111 114 118 119 120 121 122 124 125 126 127 128 129 130 132 136 138 140 141 146 147 154 156 157 158 159 160 161 163 165 167 168 169 171 172 173 175 178 179 180 182 183 185 192 193 194 201 203 204 205 206 207 209 210 b 211 1 1 0 1 4 8 9 11 14 16 17 18 20 21 23 25 26 28 31 36 37 38 41 43 46 48 49 50 51 53 55 56 58 60 63 64 69 70 71 72 76 78 79 81 83 84 85 90 91 92 94 96 98 99 101 102 106 108 109 110 111 114 118 119 120 121 122 124 125 126 127 128 129 130 132 136 138 140 141 146 147 154 156 157 158 159 160 161 163 165 167 168 169 171 172 173 175 178 179 180 182 183 185 192 193 194 201 203 204 205 206 207 209 210 # 16116 assign c a 211 1 1 0 1 4 8 9 11 14 16 17 18 20 21 23 25 26 28 31 36 37 38 41 43 46 48 49 50 51 53 55 56 58 60 63 64 69 70 71 72 76 78 79 81 83 84 85 90 91 92 94 96 98 99 101 102 106 108 109 110 111 114 118 119 120 121 122 124 125 126 127 128 129 130 132 136 138 140 141 146 147 154 156 157 158 159 160 161 163 165 167 168 169 171 172 173 175 178 179 180 182 183 185 192 193 194 201 203 204 205 206 207 209 210 b 211 0 0 e # 16117 assign c a 211 1 1 0 1 2 3 7 8 15 16 18 20 21 22 23 25 26 28 31 33 34 35 38 40 42 44 45 46 49 50 52 54 57 58 61 63 64 66 69 70 73 75 76 84 87 96 97 98 100 101 103 105 106 111 112 113 117 119 120 121 127 132 133 136 138 140 146 147 153 157 159 161 162 166 172 173 174 175 177 178 182 184 186 190 193 194 195 198 199 200 202 203 205 206 210 b 211 1 1 0 1 2 3 7 8 15 16 18 20 21 22 23 25 26 28 31 33 34 35 38 40 42 44 45 46 49 50 52 54 57 58 61 63 64 66 69 70 73 75 76 84 87 96 97 98 100 101 103 105 106 111 112 113 117 119 120 121 127 132 133 136 138 140 146 147 153 157 159 161 162 166 172 173 174 175 177 178 182 184 186 190 193 194 195 198 199 200 202 203 205 206 210 # 16118 assign c a 211 1 1 0 1 2 3 7 8 15 16 18 20 21 22 23 25 26 28 31 33 34 35 38 40 42 44 45 46 49 50 52 54 57 58 61 63 64 66 69 70 73 75 76 84 87 96 97 98 100 101 103 105 106 111 112 113 117 119 120 121 127 132 133 136 138 140 146 147 153 157 159 161 162 166 172 173 174 175 177 178 182 184 186 190 193 194 195 198 199 200 202 203 205 206 210 b 211 0 0 f # 16119 assign c a 211 1 1 0 1 2 4 5 7 9 10 11 12 13 15 17 18 19 20 22 23 25 27 29 30 31 32 33 36 39 42 46 47 49 50 52 53 54 59 62 65 66 67 70 71 72 73 74 76 77 78 80 81 83 87 88 89 90 94 99 100 102 105 106 108 109 113 115 118 121 122 125 126 127 130 131 132 139 140 141 144 145 150 153 154 156 157 159 161 162 166 167 168 170 171 176 177 178 181 182 184 185 186 188 194 195 196 199 200 203 205 209 210 b 211 1 1 0 1 2 4 5 7 9 10 11 12 13 15 17 18 19 20 22 23 25 27 29 30 31 32 33 36 39 42 46 47 49 50 52 53 54 59 62 65 66 67 70 71 72 73 74 76 77 78 80 81 83 87 88 89 90 94 99 100 102 105 106 108 109 113 115 118 121 122 125 126 127 130 131 132 139 140 141 144 145 150 153 154 156 157 159 161 162 166 167 168 170 171 176 177 178 181 182 184 185 186 188 194 195 196 199 200 203 205 209 210 # 16120 assign c a 211 1 1 0 1 2 4 5 7 9 10 11 12 13 15 17 18 19 20 22 23 25 27 29 30 31 32 33 36 39 42 46 47 49 50 52 53 54 59 62 65 66 67 70 71 72 73 74 76 77 78 80 81 83 87 88 89 90 94 99 100 102 105 106 108 109 113 115 118 121 122 125 126 127 130 131 132 139 140 141 144 145 150 153 154 156 157 159 161 162 166 167 168 170 171 176 177 178 181 182 184 185 186 188 194 195 196 199 200 203 205 209 210 b 211 0 0 0 1 7 8 12 13 14 16 18 19 24 25 30 35 36 37 38 39 42 43 45 50 51 52 54 58 59 60 61 62 66 67 69 70 72 73 76 77 82 84 85 86 87 90 93 94 97 102 104 106 107 110 111 112 113 116 117 122 123 124 125 129 130 131 132 133 135 138 139 141 142 144 145 146 147 148 156 158 165 169 171 172 173 174 176 177 179 180 184 185 186 187 189 193 194 196 197 198 199 200 202 203 205 # 16121 assign c a 211 1 1 e b 211 1 1 e # 16122 assign c a 211 1 1 e b 211 0 1 e # 16123 assign c a 211 1 1 e b 211 1 1 e # 16124 assign c a 211 1 1 e b 211 0 1 f # 16125 assign c a 211 1 1 e b 211 1 1 e # 16126 assign c a 211 1 1 e b 211 0 1 1 2 3 4 6 8 9 10 12 14 17 20 21 22 23 24 25 26 31 34 36 37 38 42 44 45 46 48 51 60 61 65 66 67 68 72 74 75 76 77 79 81 85 86 90 94 97 99 101 105 108 110 111 118 119 121 123 129 132 133 134 135 136 137 143 144 145 151 153 157 158 162 165 167 168 172 173 174 176 178 181 182 183 184 187 191 192 194 195 198 199 200 206 209 210 # 16127 assign c a 211 1 1 f b 211 1 1 f # 16128 assign c a 211 1 1 f b 211 0 1 e # 16129 assign c a 211 1 1 f b 211 1 1 f # 16130 assign c a 211 1 1 f b 211 0 1 f # 16131 assign c a 211 1 1 f b 211 1 1 f # 16132 assign c a 211 1 1 f b 211 0 1 0 1 2 3 6 10 12 15 16 18 19 22 23 24 26 28 31 33 35 39 40 42 43 44 46 48 49 51 54 58 60 61 62 64 66 68 70 71 73 78 79 80 81 82 85 87 90 93 100 105 107 108 110 111 113 117 119 120 122 127 128 129 131 134 135 138 140 143 147 149 152 156 157 158 159 160 162 164 165 167 171 172 174 175 176 178 184 185 187 188 190 191 192 197 201 203 206 208 209 # 16133 assign c a 211 1 1 1 2 4 5 6 8 11 13 15 16 20 21 22 23 26 30 31 33 36 38 39 40 41 42 43 44 46 47 48 49 51 52 56 58 60 61 62 64 67 70 73 75 77 78 80 81 82 83 87 88 89 92 94 99 101 103 104 106 107 115 116 117 118 120 121 122 125 126 127 128 130 133 135 137 138 139 143 145 146 148 150 153 154 155 157 162 167 170 171 172 174 179 180 184 189 190 191 192 193 197 198 201 203 204 205 209 b 211 1 1 1 2 4 5 6 8 11 13 15 16 20 21 22 23 26 30 31 33 36 38 39 40 41 42 43 44 46 47 48 49 51 52 56 58 60 61 62 64 67 70 73 75 77 78 80 81 82 83 87 88 89 92 94 99 101 103 104 106 107 115 116 117 118 120 121 122 125 126 127 128 130 133 135 137 138 139 143 145 146 148 150 153 154 155 157 162 167 170 171 172 174 179 180 184 189 190 191 192 193 197 198 201 203 204 205 209 # 16134 assign c a 211 1 1 1 2 4 5 6 8 11 13 15 16 20 21 22 23 26 30 31 33 36 38 39 40 41 42 43 44 46 47 48 49 51 52 56 58 60 61 62 64 67 70 73 75 77 78 80 81 82 83 87 88 89 92 94 99 101 103 104 106 107 115 116 117 118 120 121 122 125 126 127 128 130 133 135 137 138 139 143 145 146 148 150 153 154 155 157 162 167 170 171 172 174 179 180 184 189 190 191 192 193 197 198 201 203 204 205 209 b 211 0 1 e # 16135 assign c a 211 1 1 1 2 3 4 8 9 12 14 16 20 21 23 24 26 28 29 32 35 37 40 41 42 43 46 47 48 51 53 61 62 63 66 67 68 69 70 71 72 73 75 78 80 82 83 84 88 89 92 95 97 98 100 101 103 105 106 107 109 110 111 112 113 114 115 120 121 122 123 124 125 126 128 130 131 134 135 136 147 157 158 161 163 164 165 167 169 171 174 175 176 178 180 182 183 184 185 187 188 189 192 195 197 198 199 200 201 202 205 208 b 211 1 1 1 2 3 4 8 9 12 14 16 20 21 23 24 26 28 29 32 35 37 40 41 42 43 46 47 48 51 53 61 62 63 66 67 68 69 70 71 72 73 75 78 80 82 83 84 88 89 92 95 97 98 100 101 103 105 106 107 109 110 111 112 113 114 115 120 121 122 123 124 125 126 128 130 131 134 135 136 147 157 158 161 163 164 165 167 169 171 174 175 176 178 180 182 183 184 185 187 188 189 192 195 197 198 199 200 201 202 205 208 # 16136 assign c a 211 1 1 1 2 3 4 8 9 12 14 16 20 21 23 24 26 28 29 32 35 37 40 41 42 43 46 47 48 51 53 61 62 63 66 67 68 69 70 71 72 73 75 78 80 82 83 84 88 89 92 95 97 98 100 101 103 105 106 107 109 110 111 112 113 114 115 120 121 122 123 124 125 126 128 130 131 134 135 136 147 157 158 161 163 164 165 167 169 171 174 175 176 178 180 182 183 184 185 187 188 189 192 195 197 198 199 200 201 202 205 208 b 211 0 1 f # 16137 assign c a 211 1 1 0 1 3 6 9 10 11 12 14 16 17 19 23 24 26 27 31 32 33 34 36 37 38 40 41 42 44 45 46 47 48 53 54 57 61 66 68 69 70 71 73 76 81 82 83 84 85 87 88 91 93 95 97 100 101 102 104 106 109 110 111 112 113 114 120 121 123 124 126 129 132 135 136 143 144 149 150 152 153 155 157 159 160 161 163 165 166 167 168 169 176 177 178 180 183 185 186 187 188 189 190 191 192 194 195 196 198 199 203 204 206 209 210 b 211 1 1 0 1 3 6 9 10 11 12 14 16 17 19 23 24 26 27 31 32 33 34 36 37 38 40 41 42 44 45 46 47 48 53 54 57 61 66 68 69 70 71 73 76 81 82 83 84 85 87 88 91 93 95 97 100 101 102 104 106 109 110 111 112 113 114 120 121 123 124 126 129 132 135 136 143 144 149 150 152 153 155 157 159 160 161 163 165 166 167 168 169 176 177 178 180 183 185 186 187 188 189 190 191 192 194 195 196 198 199 203 204 206 209 210 # 16138 assign c a 211 1 1 0 1 3 6 9 10 11 12 14 16 17 19 23 24 26 27 31 32 33 34 36 37 38 40 41 42 44 45 46 47 48 53 54 57 61 66 68 69 70 71 73 76 81 82 83 84 85 87 88 91 93 95 97 100 101 102 104 106 109 110 111 112 113 114 120 121 123 124 126 129 132 135 136 143 144 149 150 152 153 155 157 159 160 161 163 165 166 167 168 169 176 177 178 180 183 185 186 187 188 189 190 191 192 194 195 196 198 199 203 204 206 209 210 b 211 0 1 0 3 4 5 7 8 10 13 16 17 19 23 25 26 27 28 29 31 32 33 34 35 36 40 42 43 48 52 58 60 63 65 66 67 71 74 75 76 78 79 80 82 83 84 86 87 89 95 98 99 102 103 104 105 106 108 109 111 112 115 118 119 121 123 125 126 127 130 131 132 134 138 142 146 147 148 149 150 152 159 160 161 166 167 168 169 170 171 173 175 178 180 181 182 183 186 187 188 193 194 195 197 199 200 202 206 207 209 # 16139 assign c a 211 1 1 e b 211 1 1 e # 16140 assign c a 211 1 1 e b 211 1 0 e # 16141 assign c a 211 1 1 e b 211 1 1 e # 16142 assign c a 211 1 1 e b 211 1 0 f # 16143 assign c a 211 1 1 e b 211 1 1 e # 16144 assign c a 211 1 1 e b 211 1 0 4 5 8 10 12 13 18 24 27 28 32 33 34 36 37 38 39 41 42 44 46 49 51 53 57 60 61 62 63 64 67 71 76 77 80 81 82 83 84 87 88 91 93 94 95 97 98 99 102 104 106 110 111 113 114 115 116 118 119 120 122 123 125 126 127 128 129 130 131 132 133 135 136 141 143 144 146 147 149 150 152 153 158 160 161 163 165 166 168 169 170 172 173 175 177 179 180 182 183 184 186 189 190 192 193 196 198 199 206 207 # 16145 assign c a 211 1 1 f b 211 1 1 f # 16146 assign c a 211 1 1 f b 211 1 0 e # 16147 assign c a 211 1 1 f b 211 1 1 f # 16148 assign c a 211 1 1 f b 211 1 0 f # 16149 assign c a 211 1 1 f b 211 1 1 f # 16150 assign c a 211 1 1 f b 211 1 0 1 3 4 5 6 9 10 11 12 13 15 16 18 20 22 23 24 26 28 30 31 34 35 37 40 43 46 47 48 51 52 54 57 58 61 67 69 72 74 76 77 79 81 82 83 84 90 93 94 95 98 101 102 105 109 111 114 116 118 119 120 121 124 127 128 129 132 136 137 138 140 144 145 146 149 151 153 161 162 164 166 167 169 171 173 176 177 178 179 180 182 187 188 189 193 194 197 200 201 204 205 208 # 16151 assign c a 211 1 1 3 4 5 9 10 11 13 15 16 20 22 25 26 27 29 31 33 34 37 38 39 40 42 49 50 53 54 55 59 61 62 63 65 67 68 69 70 71 73 75 76 77 78 80 81 82 85 86 87 90 91 93 94 95 96 97 98 100 101 110 111 112 113 116 119 120 122 123 126 130 133 134 135 139 142 145 146 147 150 151 152 153 154 157 158 159 167 170 171 172 175 178 179 180 181 182 183 184 185 187 190 191 192 193 199 200 201 202 203 206 207 208 209 210 b 211 1 1 3 4 5 9 10 11 13 15 16 20 22 25 26 27 29 31 33 34 37 38 39 40 42 49 50 53 54 55 59 61 62 63 65 67 68 69 70 71 73 75 76 77 78 80 81 82 85 86 87 90 91 93 94 95 96 97 98 100 101 110 111 112 113 116 119 120 122 123 126 130 133 134 135 139 142 145 146 147 150 151 152 153 154 157 158 159 167 170 171 172 175 178 179 180 181 182 183 184 185 187 190 191 192 193 199 200 201 202 203 206 207 208 209 210 # 16152 assign c a 211 1 1 3 4 5 9 10 11 13 15 16 20 22 25 26 27 29 31 33 34 37 38 39 40 42 49 50 53 54 55 59 61 62 63 65 67 68 69 70 71 73 75 76 77 78 80 81 82 85 86 87 90 91 93 94 95 96 97 98 100 101 110 111 112 113 116 119 120 122 123 126 130 133 134 135 139 142 145 146 147 150 151 152 153 154 157 158 159 167 170 171 172 175 178 179 180 181 182 183 184 185 187 190 191 192 193 199 200 201 202 203 206 207 208 209 210 b 211 1 0 e # 16153 assign c a 211 1 1 0 1 3 8 14 18 21 22 23 26 28 30 31 35 36 37 42 44 45 46 48 49 55 56 57 58 59 61 63 65 68 69 70 71 73 75 81 82 83 85 87 88 90 95 97 99 101 102 103 104 106 108 109 110 112 114 115 118 120 121 122 124 128 129 132 136 137 138 139 140 142 143 144 145 146 149 150 153 154 158 161 162 163 165 167 168 170 171 172 173 174 175 176 182 183 185 189 190 192 197 201 203 204 206 208 209 210 b 211 1 1 0 1 3 8 14 18 21 22 23 26 28 30 31 35 36 37 42 44 45 46 48 49 55 56 57 58 59 61 63 65 68 69 70 71 73 75 81 82 83 85 87 88 90 95 97 99 101 102 103 104 106 108 109 110 112 114 115 118 120 121 122 124 128 129 132 136 137 138 139 140 142 143 144 145 146 149 150 153 154 158 161 162 163 165 167 168 170 171 172 173 174 175 176 182 183 185 189 190 192 197 201 203 204 206 208 209 210 # 16154 assign c a 211 1 1 0 1 3 8 14 18 21 22 23 26 28 30 31 35 36 37 42 44 45 46 48 49 55 56 57 58 59 61 63 65 68 69 70 71 73 75 81 82 83 85 87 88 90 95 97 99 101 102 103 104 106 108 109 110 112 114 115 118 120 121 122 124 128 129 132 136 137 138 139 140 142 143 144 145 146 149 150 153 154 158 161 162 163 165 167 168 170 171 172 173 174 175 176 182 183 185 189 190 192 197 201 203 204 206 208 209 210 b 211 1 0 f # 16155 assign c a 211 1 1 0 3 6 7 9 10 11 12 16 20 22 23 25 27 28 31 32 33 39 41 42 46 47 48 52 53 55 56 57 58 59 63 65 71 73 75 78 79 81 84 85 87 89 90 91 94 97 98 99 102 103 106 111 113 116 122 123 125 127 128 135 137 139 141 142 143 144 148 149 150 153 154 155 161 163 165 166 167 168 169 170 172 173 176 177 178 179 180 181 182 183 185 186 187 191 193 194 201 204 205 206 207 209 b 211 1 1 0 3 6 7 9 10 11 12 16 20 22 23 25 27 28 31 32 33 39 41 42 46 47 48 52 53 55 56 57 58 59 63 65 71 73 75 78 79 81 84 85 87 89 90 91 94 97 98 99 102 103 106 111 113 116 122 123 125 127 128 135 137 139 141 142 143 144 148 149 150 153 154 155 161 163 165 166 167 168 169 170 172 173 176 177 178 179 180 181 182 183 185 186 187 191 193 194 201 204 205 206 207 209 # 16156 assign c a 211 1 1 0 3 6 7 9 10 11 12 16 20 22 23 25 27 28 31 32 33 39 41 42 46 47 48 52 53 55 56 57 58 59 63 65 71 73 75 78 79 81 84 85 87 89 90 91 94 97 98 99 102 103 106 111 113 116 122 123 125 127 128 135 137 139 141 142 143 144 148 149 150 153 154 155 161 163 165 166 167 168 169 170 172 173 176 177 178 179 180 181 182 183 185 186 187 191 193 194 201 204 205 206 207 209 b 211 1 0 4 6 7 8 13 15 17 19 24 25 27 29 31 33 34 37 39 41 43 44 45 46 49 50 51 58 59 63 64 69 71 72 73 78 79 81 82 84 85 86 89 90 91 92 94 95 96 105 106 107 108 110 114 119 122 124 125 127 131 132 133 137 138 141 142 143 146 147 148 150 152 153 155 156 157 158 167 171 173 174 177 181 182 184 188 190 192 193 195 197 198 199 201 202 203 204 205 210 # 16157 assign c a 211 1 1 e b 211 1 1 e # 16158 assign c a 211 1 1 e b 211 1 1 e # 16159 assign c a 211 1 1 e b 211 1 1 e # 16160 assign c a 211 1 1 e b 211 1 1 f # 16161 assign c a 211 1 1 e b 211 1 1 e # 16162 assign c a 211 1 1 e b 211 1 1 0 2 3 5 7 8 14 16 17 18 19 21 22 23 24 25 29 31 34 40 41 43 48 56 58 66 67 70 72 76 79 80 81 82 83 84 87 88 89 91 95 96 100 103 104 105 106 107 111 114 116 124 125 127 129 130 134 137 138 143 144 146 147 148 151 152 153 155 156 157 163 164 166 169 170 171 174 176 177 180 183 185 187 188 189 193 194 197 198 199 200 202 204 206 210 # 16163 assign c a 211 1 1 f b 211 1 1 f # 16164 assign c a 211 1 1 f b 211 1 1 e # 16165 assign c a 211 1 1 f b 211 1 1 f # 16166 assign c a 211 1 1 f b 211 1 1 f # 16167 assign c a 211 1 1 f b 211 1 1 f # 16168 assign c a 211 1 1 f b 211 1 1 1 3 4 7 12 13 19 21 22 23 26 27 30 31 32 34 35 36 38 40 42 43 48 55 58 59 61 62 68 72 75 80 81 85 86 87 88 89 90 94 95 96 98 99 100 103 104 106 108 111 113 116 119 120 121 128 131 132 136 138 139 142 143 147 150 153 154 155 159 161 162 166 171 172 174 175 177 178 179 181 183 184 186 187 188 190 193 196 198 200 201 207 210 # 16169 assign c a 211 1 1 0 3 4 5 6 7 10 11 13 15 16 18 21 22 23 24 25 27 29 31 32 33 34 35 38 39 40 41 42 44 45 49 50 51 52 55 57 59 61 62 64 68 71 73 74 76 78 83 84 85 86 91 93 95 97 103 109 110 111 114 116 118 120 123 125 126 127 128 132 136 137 138 140 141 142 144 145 146 147 149 151 152 153 154 156 157 158 159 163 164 165 168 169 170 172 173 174 175 178 179 182 185 188 191 192 193 194 196 198 201 202 203 205 206 207 210 b 211 1 1 0 3 4 5 6 7 10 11 13 15 16 18 21 22 23 24 25 27 29 31 32 33 34 35 38 39 40 41 42 44 45 49 50 51 52 55 57 59 61 62 64 68 71 73 74 76 78 83 84 85 86 91 93 95 97 103 109 110 111 114 116 118 120 123 125 126 127 128 132 136 137 138 140 141 142 144 145 146 147 149 151 152 153 154 156 157 158 159 163 164 165 168 169 170 172 173 174 175 178 179 182 185 188 191 192 193 194 196 198 201 202 203 205 206 207 210 # 16170 assign c a 211 1 1 0 3 4 5 6 7 10 11 13 15 16 18 21 22 23 24 25 27 29 31 32 33 34 35 38 39 40 41 42 44 45 49 50 51 52 55 57 59 61 62 64 68 71 73 74 76 78 83 84 85 86 91 93 95 97 103 109 110 111 114 116 118 120 123 125 126 127 128 132 136 137 138 140 141 142 144 145 146 147 149 151 152 153 154 156 157 158 159 163 164 165 168 169 170 172 173 174 175 178 179 182 185 188 191 192 193 194 196 198 201 202 203 205 206 207 210 b 211 1 1 e # 16171 assign c a 211 1 1 1 3 4 8 9 11 14 15 16 18 21 29 30 31 34 36 37 38 39 40 42 45 48 50 52 54 56 60 64 65 66 67 68 69 71 72 74 76 78 79 81 86 88 91 92 93 95 96 99 100 101 103 108 113 114 115 119 120 121 122 125 129 130 132 135 136 137 139 142 143 145 146 149 151 152 157 162 164 165 167 168 170 171 172 173 174 178 179 182 187 188 189 193 194 196 197 199 202 204 206 208 b 211 1 1 1 3 4 8 9 11 14 15 16 18 21 29 30 31 34 36 37 38 39 40 42 45 48 50 52 54 56 60 64 65 66 67 68 69 71 72 74 76 78 79 81 86 88 91 92 93 95 96 99 100 101 103 108 113 114 115 119 120 121 122 125 129 130 132 135 136 137 139 142 143 145 146 149 151 152 157 162 164 165 167 168 170 171 172 173 174 178 179 182 187 188 189 193 194 196 197 199 202 204 206 208 # 16172 assign c a 211 1 1 1 3 4 8 9 11 14 15 16 18 21 29 30 31 34 36 37 38 39 40 42 45 48 50 52 54 56 60 64 65 66 67 68 69 71 72 74 76 78 79 81 86 88 91 92 93 95 96 99 100 101 103 108 113 114 115 119 120 121 122 125 129 130 132 135 136 137 139 142 143 145 146 149 151 152 157 162 164 165 167 168 170 171 172 173 174 178 179 182 187 188 189 193 194 196 197 199 202 204 206 208 b 211 1 1 f # 16173 assign c a 211 1 1 1 2 3 7 11 12 18 19 20 21 22 24 29 30 31 33 35 36 37 38 40 41 42 43 46 48 49 51 52 55 57 59 61 63 64 65 66 67 68 70 71 73 75 81 83 84 85 86 88 89 92 93 95 96 97 103 105 106 107 109 112 113 115 116 119 122 126 127 131 132 133 134 139 141 144 145 146 147 148 150 152 153 155 156 158 160 162 163 165 167 169 171 172 173 174 175 177 178 181 182 183 186 188 189 190 191 193 194 195 199 201 204 210 b 211 1 1 1 2 3 7 11 12 18 19 20 21 22 24 29 30 31 33 35 36 37 38 40 41 42 43 46 48 49 51 52 55 57 59 61 63 64 65 66 67 68 70 71 73 75 81 83 84 85 86 88 89 92 93 95 96 97 103 105 106 107 109 112 113 115 116 119 122 126 127 131 132 133 134 139 141 144 145 146 147 148 150 152 153 155 156 158 160 162 163 165 167 169 171 172 173 174 175 177 178 181 182 183 186 188 189 190 191 193 194 195 199 201 204 210 # 16174 assign c a 211 1 1 1 2 3 7 11 12 18 19 20 21 22 24 29 30 31 33 35 36 37 38 40 41 42 43 46 48 49 51 52 55 57 59 61 63 64 65 66 67 68 70 71 73 75 81 83 84 85 86 88 89 92 93 95 96 97 103 105 106 107 109 112 113 115 116 119 122 126 127 131 132 133 134 139 141 144 145 146 147 148 150 152 153 155 156 158 160 162 163 165 167 169 171 172 173 174 175 177 178 181 182 183 186 188 189 190 191 193 194 195 199 201 204 210 b 211 1 1 0 1 3 5 6 7 9 10 14 15 16 19 23 25 26 31 33 34 35 38 39 44 47 49 50 51 53 54 55 56 57 59 60 62 65 66 67 69 70 73 74 79 81 82 83 84 86 87 89 90 93 95 99 106 108 109 112 113 115 117 118 119 120 122 127 128 129 132 133 134 136 138 139 141 142 144 152 154 155 156 157 158 159 160 162 163 164 165 166 167 169 170 171 172 173 175 176 177 180 183 184 186 191 192 194 195 196 197 198 202 206 208 # 16175 assign c a 224 0 0 e b 224 0 0 e # 16176 assign c a 224 0 0 e b 224 0 0 e # 16177 assign c a 224 0 0 e b 224 0 0 e # 16178 assign c a 224 0 0 e b 224 0 0 f # 16179 assign c a 224 0 0 e b 224 0 0 e # 16180 assign c a 224 0 0 e b 224 0 0 0 1 2 3 7 9 12 17 19 21 22 23 24 25 26 28 29 30 31 32 33 34 36 42 43 44 49 51 53 56 58 59 62 63 65 68 70 72 73 75 76 77 81 82 83 84 87 88 90 91 92 93 94 95 100 101 102 103 104 105 106 107 108 110 112 113 115 117 120 123 124 126 129 130 132 133 134 135 136 137 140 142 143 145 146 147 148 151 156 158 161 164 166 170 172 173 176 177 181 183 185 187 188 193 195 200 202 203 205 207 208 209 212 213 214 215 218 222 223 # 16181 assign c a 224 0 0 f b 224 0 0 f # 16182 assign c a 224 0 0 f b 224 0 0 e # 16183 assign c a 224 0 0 f b 224 0 0 f # 16184 assign c a 224 0 0 f b 224 0 0 f # 16185 assign c a 224 0 0 f b 224 0 0 f # 16186 assign c a 224 0 0 f b 224 0 0 0 2 4 6 7 8 10 11 14 18 19 21 22 23 24 25 29 33 35 38 39 40 42 44 45 46 47 50 51 53 56 57 58 60 61 63 64 65 66 69 71 75 77 78 79 81 83 84 85 86 87 88 89 92 93 95 96 98 99 102 107 111 113 116 119 121 123 125 126 129 132 134 139 140 141 144 145 146 147 151 153 154 155 158 159 166 167 168 169 170 171 172 179 180 181 183 186 187 188 189 190 191 192 193 197 199 200 202 203 205 207 211 213 214 215 217 218 219 222 # 16187 assign c a 224 0 0 2 3 6 8 10 14 15 16 18 19 21 22 23 26 27 28 29 32 36 37 39 42 43 44 45 46 51 54 55 56 58 59 64 67 69 71 74 77 78 79 82 85 89 90 94 95 96 98 103 104 106 108 109 112 114 116 117 118 120 121 122 124 127 128 129 130 131 134 135 137 142 144 146 147 149 150 153 154 157 159 160 162 165 167 171 172 175 176 182 183 192 194 197 199 201 202 204 207 208 209 210 211 213 214 217 218 219 b 224 0 0 2 3 6 8 10 14 15 16 18 19 21 22 23 26 27 28 29 32 36 37 39 42 43 44 45 46 51 54 55 56 58 59 64 67 69 71 74 77 78 79 82 85 89 90 94 95 96 98 103 104 106 108 109 112 114 116 117 118 120 121 122 124 127 128 129 130 131 134 135 137 142 144 146 147 149 150 153 154 157 159 160 162 165 167 171 172 175 176 182 183 192 194 197 199 201 202 204 207 208 209 210 211 213 214 217 218 219 # 16188 assign c a 224 0 0 2 3 6 8 10 14 15 16 18 19 21 22 23 26 27 28 29 32 36 37 39 42 43 44 45 46 51 54 55 56 58 59 64 67 69 71 74 77 78 79 82 85 89 90 94 95 96 98 103 104 106 108 109 112 114 116 117 118 120 121 122 124 127 128 129 130 131 134 135 137 142 144 146 147 149 150 153 154 157 159 160 162 165 167 171 172 175 176 182 183 192 194 197 199 201 202 204 207 208 209 210 211 213 214 217 218 219 b 224 0 0 e # 16189 assign c a 224 0 0 0 1 4 5 6 9 10 12 15 16 18 20 22 25 26 27 33 38 39 41 44 45 46 47 48 49 51 53 55 56 58 59 61 63 64 65 66 69 73 74 77 81 83 84 85 88 93 95 99 100 105 106 107 108 113 114 115 120 121 122 123 124 126 130 132 134 135 137 138 139 141 143 144 146 148 150 153 155 156 160 162 165 167 168 170 173 175 177 179 181 184 185 187 189 192 194 201 202 203 204 205 206 208 209 212 213 214 215 216 220 221 223 b 224 0 0 0 1 4 5 6 9 10 12 15 16 18 20 22 25 26 27 33 38 39 41 44 45 46 47 48 49 51 53 55 56 58 59 61 63 64 65 66 69 73 74 77 81 83 84 85 88 93 95 99 100 105 106 107 108 113 114 115 120 121 122 123 124 126 130 132 134 135 137 138 139 141 143 144 146 148 150 153 155 156 160 162 165 167 168 170 173 175 177 179 181 184 185 187 189 192 194 201 202 203 204 205 206 208 209 212 213 214 215 216 220 221 223 # 16190 assign c a 224 0 0 0 1 4 5 6 9 10 12 15 16 18 20 22 25 26 27 33 38 39 41 44 45 46 47 48 49 51 53 55 56 58 59 61 63 64 65 66 69 73 74 77 81 83 84 85 88 93 95 99 100 105 106 107 108 113 114 115 120 121 122 123 124 126 130 132 134 135 137 138 139 141 143 144 146 148 150 153 155 156 160 162 165 167 168 170 173 175 177 179 181 184 185 187 189 192 194 201 202 203 204 205 206 208 209 212 213 214 215 216 220 221 223 b 224 0 0 f # 16191 assign c a 224 0 0 0 5 7 8 10 11 14 20 23 25 26 32 33 34 36 41 43 46 47 52 53 58 59 60 66 67 69 71 72 73 74 76 77 81 82 83 84 89 93 94 96 101 104 106 107 108 119 121 123 125 129 130 131 132 136 139 140 142 144 146 148 152 154 158 159 160 161 162 163 168 170 171 172 173 175 178 179 184 186 189 192 196 198 199 200 201 202 203 204 206 207 209 210 211 212 215 218 219 b 224 0 0 0 5 7 8 10 11 14 20 23 25 26 32 33 34 36 41 43 46 47 52 53 58 59 60 66 67 69 71 72 73 74 76 77 81 82 83 84 89 93 94 96 101 104 106 107 108 119 121 123 125 129 130 131 132 136 139 140 142 144 146 148 152 154 158 159 160 161 162 163 168 170 171 172 173 175 178 179 184 186 189 192 196 198 199 200 201 202 203 204 206 207 209 210 211 212 215 218 219 # 16192 assign c a 224 0 0 0 5 7 8 10 11 14 20 23 25 26 32 33 34 36 41 43 46 47 52 53 58 59 60 66 67 69 71 72 73 74 76 77 81 82 83 84 89 93 94 96 101 104 106 107 108 119 121 123 125 129 130 131 132 136 139 140 142 144 146 148 152 154 158 159 160 161 162 163 168 170 171 172 173 175 178 179 184 186 189 192 196 198 199 200 201 202 203 204 206 207 209 210 211 212 215 218 219 b 224 0 0 1 2 5 6 9 12 13 16 19 21 23 26 27 28 38 39 41 42 44 46 47 51 53 54 55 57 58 63 64 65 67 69 70 71 72 73 74 75 76 77 78 80 86 87 89 90 91 92 94 95 97 98 99 100 102 103 105 106 109 110 112 114 116 117 118 121 125 127 128 129 130 131 133 134 135 137 138 139 140 141 143 144 146 147 148 149 150 152 154 163 167 170 171 174 177 178 180 181 182 183 185 189 190 193 197 201 206 207 208 209 211 212 215 217 222 223 # 16193 assign c a 224 0 0 e b 224 0 0 e # 16194 assign c a 224 0 0 e b 224 0 1 e # 16195 assign c a 224 0 0 e b 224 0 0 e # 16196 assign c a 224 0 0 e b 224 0 1 f # 16197 assign c a 224 0 0 e b 224 0 0 e # 16198 assign c a 224 0 0 e b 224 0 1 4 6 10 11 12 15 17 19 20 21 22 24 26 28 29 30 31 32 35 36 40 41 42 43 47 49 50 52 53 55 58 59 60 61 62 63 66 67 68 71 74 75 76 79 84 85 86 88 89 91 92 94 96 97 99 102 104 108 109 111 112 113 115 124 129 131 133 135 141 144 148 150 151 152 155 156 157 162 163 166 167 168 171 175 176 179 180 181 182 183 185 186 187 188 189 194 195 197 198 200 204 207 208 211 214 215 217 218 219 220 221 # 16199 assign c a 224 0 0 f b 224 0 0 f # 16200 assign c a 224 0 0 f b 224 0 1 e # 16201 assign c a 224 0 0 f b 224 0 0 f # 16202 assign c a 224 0 0 f b 224 0 1 f # 16203 assign c a 224 0 0 f b 224 0 0 f # 16204 assign c a 224 0 0 f b 224 0 1 3 4 6 7 12 14 15 16 18 20 21 23 25 26 28 33 34 36 37 41 42 43 45 46 50 51 53 54 55 56 57 58 59 63 69 70 75 78 80 81 83 84 86 87 89 90 91 93 97 98 102 103 104 106 108 109 110 116 118 120 121 122 124 126 127 131 132 134 135 136 139 141 143 145 146 147 148 149 151 152 156 157 159 161 162 168 169 172 174 175 177 178 180 183 189 191 192 193 197 198 200 201 202 205 207 208 210 211 212 216 217 221 # 16205 assign c a 224 0 0 0 1 4 6 10 11 15 16 18 19 20 22 24 26 29 30 31 32 37 38 39 41 43 45 46 52 54 55 56 59 61 62 66 67 69 71 72 73 76 78 80 81 82 87 88 90 93 94 95 101 103 104 105 107 108 109 111 112 116 119 120 125 129 130 131 132 134 135 136 137 138 139 140 142 143 145 150 152 154 155 159 160 163 164 167 170 175 179 180 183 186 187 188 191 192 193 197 201 202 203 205 206 207 209 210 215 216 217 219 221 223 b 224 0 0 0 1 4 6 10 11 15 16 18 19 20 22 24 26 29 30 31 32 37 38 39 41 43 45 46 52 54 55 56 59 61 62 66 67 69 71 72 73 76 78 80 81 82 87 88 90 93 94 95 101 103 104 105 107 108 109 111 112 116 119 120 125 129 130 131 132 134 135 136 137 138 139 140 142 143 145 150 152 154 155 159 160 163 164 167 170 175 179 180 183 186 187 188 191 192 193 197 201 202 203 205 206 207 209 210 215 216 217 219 221 223 # 16206 assign c a 224 0 0 0 1 4 6 10 11 15 16 18 19 20 22 24 26 29 30 31 32 37 38 39 41 43 45 46 52 54 55 56 59 61 62 66 67 69 71 72 73 76 78 80 81 82 87 88 90 93 94 95 101 103 104 105 107 108 109 111 112 116 119 120 125 129 130 131 132 134 135 136 137 138 139 140 142 143 145 150 152 154 155 159 160 163 164 167 170 175 179 180 183 186 187 188 191 192 193 197 201 202 203 205 206 207 209 210 215 216 217 219 221 223 b 224 0 1 e # 16207 assign c a 224 0 0 0 1 4 5 6 8 10 13 15 16 19 20 21 22 23 24 27 29 30 32 35 39 40 44 47 48 49 50 56 57 59 60 63 64 65 66 67 68 69 70 71 74 76 78 80 81 82 86 87 88 89 90 91 95 96 98 99 101 102 105 106 107 108 109 111 115 116 118 119 121 124 125 127 130 133 134 135 137 138 143 144 145 146 153 154 156 159 160 164 169 170 171 174 175 179 180 181 188 189 191 192 193 195 203 204 205 206 212 214 216 218 220 221 223 b 224 0 0 0 1 4 5 6 8 10 13 15 16 19 20 21 22 23 24 27 29 30 32 35 39 40 44 47 48 49 50 56 57 59 60 63 64 65 66 67 68 69 70 71 74 76 78 80 81 82 86 87 88 89 90 91 95 96 98 99 101 102 105 106 107 108 109 111 115 116 118 119 121 124 125 127 130 133 134 135 137 138 143 144 145 146 153 154 156 159 160 164 169 170 171 174 175 179 180 181 188 189 191 192 193 195 203 204 205 206 212 214 216 218 220 221 223 # 16208 assign c a 224 0 0 0 1 4 5 6 8 10 13 15 16 19 20 21 22 23 24 27 29 30 32 35 39 40 44 47 48 49 50 56 57 59 60 63 64 65 66 67 68 69 70 71 74 76 78 80 81 82 86 87 88 89 90 91 95 96 98 99 101 102 105 106 107 108 109 111 115 116 118 119 121 124 125 127 130 133 134 135 137 138 143 144 145 146 153 154 156 159 160 164 169 170 171 174 175 179 180 181 188 189 191 192 193 195 203 204 205 206 212 214 216 218 220 221 223 b 224 0 1 f # 16209 assign c a 224 0 0 0 2 3 4 8 9 11 12 13 17 18 22 23 24 27 29 30 33 37 38 41 44 45 51 52 54 56 60 61 64 65 67 71 77 79 80 81 83 87 93 94 99 102 103 104 106 108 110 111 114 115 116 117 118 121 122 123 124 128 132 134 135 137 143 144 146 150 151 154 156 157 159 161 162 164 165 168 169 170 172 175 176 179 180 181 182 189 191 192 195 197 200 202 203 204 209 212 216 217 218 220 221 223 b 224 0 0 0 2 3 4 8 9 11 12 13 17 18 22 23 24 27 29 30 33 37 38 41 44 45 51 52 54 56 60 61 64 65 67 71 77 79 80 81 83 87 93 94 99 102 103 104 106 108 110 111 114 115 116 117 118 121 122 123 124 128 132 134 135 137 143 144 146 150 151 154 156 157 159 161 162 164 165 168 169 170 172 175 176 179 180 181 182 189 191 192 195 197 200 202 203 204 209 212 216 217 218 220 221 223 # 16210 assign c a 224 0 0 0 2 3 4 8 9 11 12 13 17 18 22 23 24 27 29 30 33 37 38 41 44 45 51 52 54 56 60 61 64 65 67 71 77 79 80 81 83 87 93 94 99 102 103 104 106 108 110 111 114 115 116 117 118 121 122 123 124 128 132 134 135 137 143 144 146 150 151 154 156 157 159 161 162 164 165 168 169 170 172 175 176 179 180 181 182 189 191 192 195 197 200 202 203 204 209 212 216 217 218 220 221 223 b 224 0 1 1 4 5 6 8 11 12 13 17 20 21 23 24 26 27 30 32 34 35 36 37 39 42 43 45 47 48 49 50 51 52 55 56 58 59 60 63 64 67 69 70 77 82 84 86 88 89 91 93 95 97 98 99 100 103 104 105 109 110 111 112 113 115 120 121 122 124 129 130 136 137 138 141 145 147 148 150 151 153 155 159 163 170 171 175 180 187 188 190 192 196 197 198 199 201 202 203 205 209 210 213 214 215 217 218 221 222 # 16211 assign c a 224 0 0 e b 224 0 0 e # 16212 assign c a 224 0 0 e b 224 1 0 e # 16213 assign c a 224 0 0 e b 224 0 0 e # 16214 assign c a 224 0 0 e b 224 1 0 f # 16215 assign c a 224 0 0 e b 224 0 0 e # 16216 assign c a 224 0 0 e b 224 1 0 3 6 7 8 9 10 12 14 18 19 22 23 25 27 28 31 32 33 34 36 37 39 40 45 46 47 51 52 54 56 59 60 61 62 63 65 68 69 73 74 75 76 77 81 86 88 90 91 92 93 94 98 102 105 107 109 111 112 114 115 116 117 120 123 124 125 130 132 134 139 140 143 144 146 147 149 157 158 159 164 169 170 176 177 178 180 184 185 190 191 192 194 195 198 199 201 205 206 208 209 210 211 212 214 215 216 218 220 221 # 16217 assign c a 224 0 0 f b 224 0 0 f # 16218 assign c a 224 0 0 f b 224 1 0 e # 16219 assign c a 224 0 0 f b 224 0 0 f # 16220 assign c a 224 0 0 f b 224 1 0 f # 16221 assign c a 224 0 0 f b 224 0 0 f # 16222 assign c a 224 0 0 f b 224 1 0 3 4 6 7 11 12 15 16 17 19 22 24 25 26 27 28 29 31 34 35 36 38 39 40 42 43 44 45 47 48 49 50 59 62 64 65 67 70 71 72 74 75 82 83 84 87 90 91 92 93 95 96 97 98 99 102 104 105 106 108 110 112 113 114 116 120 123 126 132 134 135 136 137 139 143 149 150 153 154 155 157 159 164 165 167 168 169 170 171 173 174 178 179 182 183 185 186 187 188 190 191 192 193 196 199 201 202 204 205 206 209 210 211 213 214 215 216 217 218 219 220 222 223 # 16223 assign c a 224 0 0 1 7 9 12 14 15 16 17 18 20 22 23 25 30 31 35 36 41 42 44 47 49 51 54 55 56 58 61 62 63 67 68 69 72 73 75 77 78 79 80 81 82 86 88 89 92 94 96 102 106 107 108 109 110 111 112 114 115 116 117 119 120 121 122 123 125 127 131 132 140 143 144 146 147 149 152 155 158 159 160 162 163 164 169 170 173 175 177 178 180 182 183 184 185 186 189 195 197 199 200 201 204 205 208 209 210 211 215 219 220 b 224 0 0 1 7 9 12 14 15 16 17 18 20 22 23 25 30 31 35 36 41 42 44 47 49 51 54 55 56 58 61 62 63 67 68 69 72 73 75 77 78 79 80 81 82 86 88 89 92 94 96 102 106 107 108 109 110 111 112 114 115 116 117 119 120 121 122 123 125 127 131 132 140 143 144 146 147 149 152 155 158 159 160 162 163 164 169 170 173 175 177 178 180 182 183 184 185 186 189 195 197 199 200 201 204 205 208 209 210 211 215 219 220 # 16224 assign c a 224 0 0 1 7 9 12 14 15 16 17 18 20 22 23 25 30 31 35 36 41 42 44 47 49 51 54 55 56 58 61 62 63 67 68 69 72 73 75 77 78 79 80 81 82 86 88 89 92 94 96 102 106 107 108 109 110 111 112 114 115 116 117 119 120 121 122 123 125 127 131 132 140 143 144 146 147 149 152 155 158 159 160 162 163 164 169 170 173 175 177 178 180 182 183 184 185 186 189 195 197 199 200 201 204 205 208 209 210 211 215 219 220 b 224 1 0 e # 16225 assign c a 224 0 0 0 1 4 7 9 14 18 19 20 22 24 25 27 29 30 32 35 36 37 38 42 43 44 48 50 51 52 53 56 57 60 63 65 66 68 69 75 76 79 80 82 84 86 87 90 95 101 104 105 107 109 111 112 115 118 119 120 121 122 127 130 131 137 138 144 145 150 152 153 157 158 159 161 165 166 167 169 171 173 175 176 177 185 188 191 193 195 198 199 200 201 202 204 210 211 212 214 215 219 220 221 222 b 224 0 0 0 1 4 7 9 14 18 19 20 22 24 25 27 29 30 32 35 36 37 38 42 43 44 48 50 51 52 53 56 57 60 63 65 66 68 69 75 76 79 80 82 84 86 87 90 95 101 104 105 107 109 111 112 115 118 119 120 121 122 127 130 131 137 138 144 145 150 152 153 157 158 159 161 165 166 167 169 171 173 175 176 177 185 188 191 193 195 198 199 200 201 202 204 210 211 212 214 215 219 220 221 222 # 16226 assign c a 224 0 0 0 1 4 7 9 14 18 19 20 22 24 25 27 29 30 32 35 36 37 38 42 43 44 48 50 51 52 53 56 57 60 63 65 66 68 69 75 76 79 80 82 84 86 87 90 95 101 104 105 107 109 111 112 115 118 119 120 121 122 127 130 131 137 138 144 145 150 152 153 157 158 159 161 165 166 167 169 171 173 175 176 177 185 188 191 193 195 198 199 200 201 202 204 210 211 212 214 215 219 220 221 222 b 224 1 0 f # 16227 assign c a 224 0 0 3 4 6 7 9 10 11 15 16 18 21 23 25 26 28 29 30 35 38 39 41 42 43 44 46 47 51 53 54 56 58 62 64 65 70 72 73 75 76 77 78 81 83 84 88 89 90 91 93 96 97 99 105 108 109 110 112 114 115 123 124 125 126 127 128 130 131 132 136 139 142 145 147 152 155 159 160 162 163 166 168 172 174 177 182 184 186 192 194 197 198 201 209 210 211 213 214 217 219 221 222 b 224 0 0 3 4 6 7 9 10 11 15 16 18 21 23 25 26 28 29 30 35 38 39 41 42 43 44 46 47 51 53 54 56 58 62 64 65 70 72 73 75 76 77 78 81 83 84 88 89 90 91 93 96 97 99 105 108 109 110 112 114 115 123 124 125 126 127 128 130 131 132 136 139 142 145 147 152 155 159 160 162 163 166 168 172 174 177 182 184 186 192 194 197 198 201 209 210 211 213 214 217 219 221 222 # 16228 assign c a 224 0 0 3 4 6 7 9 10 11 15 16 18 21 23 25 26 28 29 30 35 38 39 41 42 43 44 46 47 51 53 54 56 58 62 64 65 70 72 73 75 76 77 78 81 83 84 88 89 90 91 93 96 97 99 105 108 109 110 112 114 115 123 124 125 126 127 128 130 131 132 136 139 142 145 147 152 155 159 160 162 163 166 168 172 174 177 182 184 186 192 194 197 198 201 209 210 211 213 214 217 219 221 222 b 224 1 0 0 1 4 6 10 14 15 16 17 20 25 26 27 28 29 31 32 33 35 36 37 42 43 45 48 49 50 51 54 55 57 58 59 60 62 63 64 65 66 67 68 72 73 74 76 78 83 84 86 87 89 90 93 96 99 100 102 105 106 110 111 112 113 114 115 117 118 120 121 122 125 129 130 131 133 135 136 138 140 141 143 144 147 152 154 158 160 161 164 165 166 167 169 171 172 173 174 179 181 185 186 189 190 198 199 202 204 206 208 210 214 217 218 221 222 223 # 16229 assign c a 224 0 0 e b 224 0 0 e # 16230 assign c a 224 0 0 e b 224 1 1 e # 16231 assign c a 224 0 0 e b 224 0 0 e # 16232 assign c a 224 0 0 e b 224 1 1 f # 16233 assign c a 224 0 0 e b 224 0 0 e # 16234 assign c a 224 0 0 e b 224 1 1 3 4 6 12 14 15 17 18 19 20 21 26 27 30 31 32 34 38 39 40 43 46 47 48 49 50 51 53 55 57 58 61 65 66 67 70 72 80 81 84 85 88 90 93 95 96 100 102 106 107 108 109 111 112 113 115 116 117 121 122 123 124 127 129 134 135 136 138 139 145 147 149 151 152 155 157 158 159 160 164 165 166 167 169 171 172 173 176 177 180 181 182 184 189 193 194 195 196 197 198 205 206 207 208 209 212 214 215 216 221 222 # 16235 assign c a 224 0 0 f b 224 0 0 f # 16236 assign c a 224 0 0 f b 224 1 1 e # 16237 assign c a 224 0 0 f b 224 0 0 f # 16238 assign c a 224 0 0 f b 224 1 1 f # 16239 assign c a 224 0 0 f b 224 0 0 f # 16240 assign c a 224 0 0 f b 224 1 1 7 9 11 13 14 16 17 18 19 21 23 24 25 29 30 31 35 37 39 41 42 43 44 47 49 51 52 53 54 55 56 57 58 60 61 64 69 71 74 76 77 78 80 82 83 85 88 91 93 98 103 105 106 108 109 111 114 115 119 120 121 122 123 125 127 129 131 135 138 143 144 146 152 153 156 163 164 165 170 171 172 174 175 176 177 180 183 185 189 190 191 196 197 198 201 202 205 207 209 213 215 217 219 220 223 # 16241 assign c a 224 0 0 1 4 5 6 8 9 10 11 14 15 20 21 24 27 28 29 30 32 33 34 35 36 39 42 43 44 45 46 47 48 51 53 57 58 59 61 64 65 66 67 71 76 79 81 82 83 86 87 89 90 91 92 93 94 96 97 101 103 104 105 106 107 108 110 112 113 119 121 123 124 127 129 131 133 140 142 143 147 150 151 154 156 160 161 162 164 166 168 170 171 172 173 176 177 183 185 189 192 194 196 197 198 199 202 206 208 210 213 214 215 216 220 221 223 b 224 0 0 1 4 5 6 8 9 10 11 14 15 20 21 24 27 28 29 30 32 33 34 35 36 39 42 43 44 45 46 47 48 51 53 57 58 59 61 64 65 66 67 71 76 79 81 82 83 86 87 89 90 91 92 93 94 96 97 101 103 104 105 106 107 108 110 112 113 119 121 123 124 127 129 131 133 140 142 143 147 150 151 154 156 160 161 162 164 166 168 170 171 172 173 176 177 183 185 189 192 194 196 197 198 199 202 206 208 210 213 214 215 216 220 221 223 # 16242 assign c a 224 0 0 1 4 5 6 8 9 10 11 14 15 20 21 24 27 28 29 30 32 33 34 35 36 39 42 43 44 45 46 47 48 51 53 57 58 59 61 64 65 66 67 71 76 79 81 82 83 86 87 89 90 91 92 93 94 96 97 101 103 104 105 106 107 108 110 112 113 119 121 123 124 127 129 131 133 140 142 143 147 150 151 154 156 160 161 162 164 166 168 170 171 172 173 176 177 183 185 189 192 194 196 197 198 199 202 206 208 210 213 214 215 216 220 221 223 b 224 1 1 e # 16243 assign c a 224 0 0 4 5 9 11 14 17 19 20 22 23 24 26 27 28 32 33 35 36 37 38 40 42 43 44 45 48 49 55 58 60 62 64 67 68 70 71 72 73 74 76 77 78 79 80 81 83 86 87 88 89 92 93 94 95 98 101 102 104 105 106 107 108 113 115 119 121 124 127 128 129 132 136 139 140 141 145 146 147 150 154 155 156 157 158 160 162 163 175 180 182 185 188 190 191 195 196 197 201 205 209 210 212 213 214 216 217 218 223 b 224 0 0 4 5 9 11 14 17 19 20 22 23 24 26 27 28 32 33 35 36 37 38 40 42 43 44 45 48 49 55 58 60 62 64 67 68 70 71 72 73 74 76 77 78 79 80 81 83 86 87 88 89 92 93 94 95 98 101 102 104 105 106 107 108 113 115 119 121 124 127 128 129 132 136 139 140 141 145 146 147 150 154 155 156 157 158 160 162 163 175 180 182 185 188 190 191 195 196 197 201 205 209 210 212 213 214 216 217 218 223 # 16244 assign c a 224 0 0 4 5 9 11 14 17 19 20 22 23 24 26 27 28 32 33 35 36 37 38 40 42 43 44 45 48 49 55 58 60 62 64 67 68 70 71 72 73 74 76 77 78 79 80 81 83 86 87 88 89 92 93 94 95 98 101 102 104 105 106 107 108 113 115 119 121 124 127 128 129 132 136 139 140 141 145 146 147 150 154 155 156 157 158 160 162 163 175 180 182 185 188 190 191 195 196 197 201 205 209 210 212 213 214 216 217 218 223 b 224 1 1 f # 16245 assign c a 224 0 0 0 1 2 3 6 7 8 14 15 17 20 22 26 28 31 32 33 34 37 43 44 46 48 51 55 56 59 62 66 67 70 72 75 76 77 78 79 83 84 85 88 89 93 94 95 97 99 103 104 106 107 109 111 113 115 116 117 119 120 121 123 124 126 130 132 135 136 140 141 142 144 147 149 153 156 157 162 163 164 166 170 173 174 177 178 179 180 182 189 198 199 203 206 209 211 215 217 218 219 220 b 224 0 0 0 1 2 3 6 7 8 14 15 17 20 22 26 28 31 32 33 34 37 43 44 46 48 51 55 56 59 62 66 67 70 72 75 76 77 78 79 83 84 85 88 89 93 94 95 97 99 103 104 106 107 109 111 113 115 116 117 119 120 121 123 124 126 130 132 135 136 140 141 142 144 147 149 153 156 157 162 163 164 166 170 173 174 177 178 179 180 182 189 198 199 203 206 209 211 215 217 218 219 220 # 16246 assign c a 224 0 0 0 1 2 3 6 7 8 14 15 17 20 22 26 28 31 32 33 34 37 43 44 46 48 51 55 56 59 62 66 67 70 72 75 76 77 78 79 83 84 85 88 89 93 94 95 97 99 103 104 106 107 109 111 113 115 116 117 119 120 121 123 124 126 130 132 135 136 140 141 142 144 147 149 153 156 157 162 163 164 166 170 173 174 177 178 179 180 182 189 198 199 203 206 209 211 215 217 218 219 220 b 224 1 1 0 1 4 8 9 11 12 17 19 20 27 28 31 33 34 36 38 39 40 41 42 43 48 51 52 53 57 62 65 66 70 73 75 76 79 80 82 83 90 92 93 94 96 97 99 103 108 109 111 114 116 118 119 120 121 123 126 132 136 137 139 141 142 143 144 145 147 150 151 152 154 156 157 158 159 161 165 169 171 172 174 175 177 179 182 186 193 194 195 199 201 202 203 205 206 207 208 210 211 215 216 217 222 223 # 16247 assign c a 224 0 1 e b 224 0 1 e # 16248 assign c a 224 0 1 e b 224 0 0 e # 16249 assign c a 224 0 1 e b 224 0 1 e # 16250 assign c a 224 0 1 e b 224 0 0 f # 16251 assign c a 224 0 1 e b 224 0 1 e # 16252 assign c a 224 0 1 e b 224 0 0 2 3 4 6 7 9 10 11 13 14 16 17 25 27 30 32 33 37 39 40 42 45 48 49 50 51 55 56 57 58 60 61 62 63 64 65 68 69 71 74 78 79 82 84 87 88 89 90 91 92 93 94 96 97 98 99 100 101 103 108 112 114 116 117 119 120 122 123 124 127 129 132 133 137 138 140 142 143 144 152 153 155 159 161 164 166 170 172 173 174 178 179 180 187 188 189 190 192 193 194 195 197 199 202 203 204 205 210 211 212 215 216 217 218 219 # 16253 assign c a 224 0 1 f b 224 0 1 f # 16254 assign c a 224 0 1 f b 224 0 0 e # 16255 assign c a 224 0 1 f b 224 0 1 f # 16256 assign c a 224 0 1 f b 224 0 0 f # 16257 assign c a 224 0 1 f b 224 0 1 f # 16258 assign c a 224 0 1 f b 224 0 0 2 3 4 6 9 12 13 14 15 17 18 19 20 22 23 25 27 29 30 31 32 33 34 35 39 43 45 46 48 49 51 55 57 60 63 65 66 67 69 71 73 74 75 76 77 80 81 85 86 88 90 92 97 99 100 101 108 110 111 113 114 116 117 118 121 122 126 132 133 134 136 137 138 139 142 143 145 148 150 153 154 156 157 158 160 163 164 167 170 171 172 173 177 180 184 186 187 188 189 191 192 193 194 195 196 198 200 201 202 204 206 213 220 221 223 # 16259 assign c a 224 0 1 2 4 5 6 8 9 10 11 13 14 16 18 22 23 26 31 37 38 40 41 43 48 50 53 54 55 57 59 61 63 65 66 67 68 69 73 75 76 77 79 82 83 85 86 87 88 90 94 95 96 97 98 99 100 104 105 107 108 109 110 111 113 114 115 116 118 119 120 122 123 124 125 126 127 128 131 132 133 134 135 138 140 145 146 147 149 150 153 155 156 157 158 159 164 166 168 169 170 171 173 174 176 177 180 182 183 184 185 186 187 188 189 192 193 194 195 197 202 203 205 208 209 210 211 212 214 215 217 218 222 b 224 0 1 2 4 5 6 8 9 10 11 13 14 16 18 22 23 26 31 37 38 40 41 43 48 50 53 54 55 57 59 61 63 65 66 67 68 69 73 75 76 77 79 82 83 85 86 87 88 90 94 95 96 97 98 99 100 104 105 107 108 109 110 111 113 114 115 116 118 119 120 122 123 124 125 126 127 128 131 132 133 134 135 138 140 145 146 147 149 150 153 155 156 157 158 159 164 166 168 169 170 171 173 174 176 177 180 182 183 184 185 186 187 188 189 192 193 194 195 197 202 203 205 208 209 210 211 212 214 215 217 218 222 # 16260 assign c a 224 0 1 2 4 5 6 8 9 10 11 13 14 16 18 22 23 26 31 37 38 40 41 43 48 50 53 54 55 57 59 61 63 65 66 67 68 69 73 75 76 77 79 82 83 85 86 87 88 90 94 95 96 97 98 99 100 104 105 107 108 109 110 111 113 114 115 116 118 119 120 122 123 124 125 126 127 128 131 132 133 134 135 138 140 145 146 147 149 150 153 155 156 157 158 159 164 166 168 169 170 171 173 174 176 177 180 182 183 184 185 186 187 188 189 192 193 194 195 197 202 203 205 208 209 210 211 212 214 215 217 218 222 b 224 0 0 e # 16261 assign c a 224 0 1 1 3 5 6 7 9 10 12 13 14 15 16 18 19 20 22 26 27 28 29 31 32 33 34 36 37 39 40 41 43 44 46 47 48 51 52 56 58 63 64 67 68 70 71 80 81 82 83 84 86 87 89 91 93 94 96 97 98 99 101 102 103 104 109 110 113 114 116 117 120 125 128 133 137 138 139 140 142 145 146 148 149 150 151 153 155 156 157 158 159 165 166 168 171 172 174 177 180 186 189 193 194 196 197 198 199 207 209 210 211 216 218 219 221 b 224 0 1 1 3 5 6 7 9 10 12 13 14 15 16 18 19 20 22 26 27 28 29 31 32 33 34 36 37 39 40 41 43 44 46 47 48 51 52 56 58 63 64 67 68 70 71 80 81 82 83 84 86 87 89 91 93 94 96 97 98 99 101 102 103 104 109 110 113 114 116 117 120 125 128 133 137 138 139 140 142 145 146 148 149 150 151 153 155 156 157 158 159 165 166 168 171 172 174 177 180 186 189 193 194 196 197 198 199 207 209 210 211 216 218 219 221 # 16262 assign c a 224 0 1 1 3 5 6 7 9 10 12 13 14 15 16 18 19 20 22 26 27 28 29 31 32 33 34 36 37 39 40 41 43 44 46 47 48 51 52 56 58 63 64 67 68 70 71 80 81 82 83 84 86 87 89 91 93 94 96 97 98 99 101 102 103 104 109 110 113 114 116 117 120 125 128 133 137 138 139 140 142 145 146 148 149 150 151 153 155 156 157 158 159 165 166 168 171 172 174 177 180 186 189 193 194 196 197 198 199 207 209 210 211 216 218 219 221 b 224 0 0 f # 16263 assign c a 224 0 1 0 2 5 9 10 11 20 21 22 24 25 28 29 30 33 34 35 36 39 40 41 42 46 48 50 52 53 54 55 56 61 62 63 64 65 66 69 72 78 81 82 84 85 89 90 91 92 93 94 96 98 104 105 106 111 115 116 117 122 125 126 129 130 131 135 137 141 143 144 146 147 151 152 154 156 157 158 162 163 164 166 167 169 171 172 173 175 178 181 188 192 196 197 199 200 201 202 203 204 207 211 213 216 217 218 219 220 223 b 224 0 1 0 2 5 9 10 11 20 21 22 24 25 28 29 30 33 34 35 36 39 40 41 42 46 48 50 52 53 54 55 56 61 62 63 64 65 66 69 72 78 81 82 84 85 89 90 91 92 93 94 96 98 104 105 106 111 115 116 117 122 125 126 129 130 131 135 137 141 143 144 146 147 151 152 154 156 157 158 162 163 164 166 167 169 171 172 173 175 178 181 188 192 196 197 199 200 201 202 203 204 207 211 213 216 217 218 219 220 223 # 16264 assign c a 224 0 1 0 2 5 9 10 11 20 21 22 24 25 28 29 30 33 34 35 36 39 40 41 42 46 48 50 52 53 54 55 56 61 62 63 64 65 66 69 72 78 81 82 84 85 89 90 91 92 93 94 96 98 104 105 106 111 115 116 117 122 125 126 129 130 131 135 137 141 143 144 146 147 151 152 154 156 157 158 162 163 164 166 167 169 171 172 173 175 178 181 188 192 196 197 199 200 201 202 203 204 207 211 213 216 217 218 219 220 223 b 224 0 0 0 1 4 5 7 8 13 15 17 18 20 22 23 24 25 26 27 28 30 31 32 33 35 36 37 40 41 42 44 50 52 53 54 55 57 58 60 63 66 70 73 74 79 80 82 84 85 88 89 90 91 94 95 96 99 100 101 103 104 105 107 109 110 111 112 113 115 116 117 120 124 125 133 136 139 141 142 144 149 150 151 155 159 160 161 162 164 166 168 169 171 172 175 176 187 188 189 191 192 195 196 201 205 206 213 214 215 218 # 16265 assign c a 224 0 1 e b 224 0 1 e # 16266 assign c a 224 0 1 e b 224 0 1 e # 16267 assign c a 224 0 1 e b 224 0 1 e # 16268 assign c a 224 0 1 e b 224 0 1 f # 16269 assign c a 224 0 1 e b 224 0 1 e # 16270 assign c a 224 0 1 e b 224 0 1 0 1 4 6 14 16 18 20 21 25 27 29 31 33 38 40 42 44 45 46 48 49 50 51 52 53 56 57 61 63 65 67 76 78 79 80 82 83 86 88 90 92 93 96 97 99 103 104 105 106 107 108 109 110 111 113 114 115 116 117 119 120 121 123 124 125 127 128 129 130 133 134 135 136 137 138 139 140 142 143 146 149 152 153 155 156 157 158 159 162 163 165 166 168 170 171 172 173 174 181 182 185 188 190 192 193 194 196 197 199 202 208 209 210 212 213 214 216 220 222 # 16271 assign c a 224 0 1 f b 224 0 1 f # 16272 assign c a 224 0 1 f b 224 0 1 e # 16273 assign c a 224 0 1 f b 224 0 1 f # 16274 assign c a 224 0 1 f b 224 0 1 f # 16275 assign c a 224 0 1 f b 224 0 1 f # 16276 assign c a 224 0 1 f b 224 0 1 1 2 7 8 10 11 12 15 23 24 25 30 31 32 33 36 37 39 42 43 44 46 48 49 51 53 54 55 56 60 63 65 68 70 72 73 76 77 78 79 80 82 85 89 90 91 94 97 98 101 105 106 108 111 112 113 114 115 116 119 120 121 122 125 126 128 130 135 136 139 140 148 149 151 152 154 155 156 157 159 162 168 172 173 174 178 179 181 182 183 185 186 190 191 192 193 198 200 201 202 203 204 205 207 210 213 218 219 220 221 222 223 # 16277 assign c a 224 0 1 0 1 2 5 8 12 13 18 22 23 24 25 26 27 35 37 39 41 44 45 50 51 53 58 59 60 64 65 68 69 71 72 73 75 76 77 78 80 81 82 86 87 88 89 90 94 96 97 99 100 101 102 105 108 111 112 116 117 119 120 123 124 125 127 128 129 131 135 139 140 141 142 143 145 148 149 150 151 154 155 157 158 160 162 167 168 170 178 181 184 185 188 191 194 195 196 198 200 202 203 204 208 210 211 212 215 217 221 222 223 b 224 0 1 0 1 2 5 8 12 13 18 22 23 24 25 26 27 35 37 39 41 44 45 50 51 53 58 59 60 64 65 68 69 71 72 73 75 76 77 78 80 81 82 86 87 88 89 90 94 96 97 99 100 101 102 105 108 111 112 116 117 119 120 123 124 125 127 128 129 131 135 139 140 141 142 143 145 148 149 150 151 154 155 157 158 160 162 167 168 170 178 181 184 185 188 191 194 195 196 198 200 202 203 204 208 210 211 212 215 217 221 222 223 # 16278 assign c a 224 0 1 0 1 2 5 8 12 13 18 22 23 24 25 26 27 35 37 39 41 44 45 50 51 53 58 59 60 64 65 68 69 71 72 73 75 76 77 78 80 81 82 86 87 88 89 90 94 96 97 99 100 101 102 105 108 111 112 116 117 119 120 123 124 125 127 128 129 131 135 139 140 141 142 143 145 148 149 150 151 154 155 157 158 160 162 167 168 170 178 181 184 185 188 191 194 195 196 198 200 202 203 204 208 210 211 212 215 217 221 222 223 b 224 0 1 e # 16279 assign c a 224 0 1 1 2 3 7 8 10 11 12 16 19 20 21 22 23 24 25 28 30 31 33 34 40 43 44 45 47 49 51 52 54 55 58 59 61 62 63 64 65 67 69 78 83 84 86 87 88 89 90 92 93 94 96 100 101 102 108 110 111 112 114 115 116 117 118 119 121 122 124 125 126 127 132 137 138 141 148 149 150 152 153 154 156 160 163 164 165 166 168 169 173 174 175 176 178 179 181 183 184 187 188 189 193 195 196 199 200 201 211 213 214 219 220 b 224 0 1 1 2 3 7 8 10 11 12 16 19 20 21 22 23 24 25 28 30 31 33 34 40 43 44 45 47 49 51 52 54 55 58 59 61 62 63 64 65 67 69 78 83 84 86 87 88 89 90 92 93 94 96 100 101 102 108 110 111 112 114 115 116 117 118 119 121 122 124 125 126 127 132 137 138 141 148 149 150 152 153 154 156 160 163 164 165 166 168 169 173 174 175 176 178 179 181 183 184 187 188 189 193 195 196 199 200 201 211 213 214 219 220 # 16280 assign c a 224 0 1 1 2 3 7 8 10 11 12 16 19 20 21 22 23 24 25 28 30 31 33 34 40 43 44 45 47 49 51 52 54 55 58 59 61 62 63 64 65 67 69 78 83 84 86 87 88 89 90 92 93 94 96 100 101 102 108 110 111 112 114 115 116 117 118 119 121 122 124 125 126 127 132 137 138 141 148 149 150 152 153 154 156 160 163 164 165 166 168 169 173 174 175 176 178 179 181 183 184 187 188 189 193 195 196 199 200 201 211 213 214 219 220 b 224 0 1 f # 16281 assign c a 224 0 1 1 3 4 6 7 9 11 13 15 16 17 20 23 25 26 30 33 39 41 45 49 50 52 56 58 60 61 62 63 64 70 71 75 79 81 82 86 89 99 100 102 104 105 106 110 111 113 114 117 118 119 122 123 127 128 129 130 131 133 134 136 137 142 145 146 147 148 149 152 156 166 167 172 174 177 178 179 180 183 184 187 188 189 194 196 199 200 201 204 206 209 214 216 218 219 220 b 224 0 1 1 3 4 6 7 9 11 13 15 16 17 20 23 25 26 30 33 39 41 45 49 50 52 56 58 60 61 62 63 64 70 71 75 79 81 82 86 89 99 100 102 104 105 106 110 111 113 114 117 118 119 122 123 127 128 129 130 131 133 134 136 137 142 145 146 147 148 149 152 156 166 167 172 174 177 178 179 180 183 184 187 188 189 194 196 199 200 201 204 206 209 214 216 218 219 220 # 16282 assign c a 224 0 1 1 3 4 6 7 9 11 13 15 16 17 20 23 25 26 30 33 39 41 45 49 50 52 56 58 60 61 62 63 64 70 71 75 79 81 82 86 89 99 100 102 104 105 106 110 111 113 114 117 118 119 122 123 127 128 129 130 131 133 134 136 137 142 145 146 147 148 149 152 156 166 167 172 174 177 178 179 180 183 184 187 188 189 194 196 199 200 201 204 206 209 214 216 218 219 220 b 224 0 1 0 1 2 8 9 10 11 15 20 22 23 25 26 28 30 31 35 36 37 38 39 40 41 42 45 50 52 53 58 60 63 64 66 67 69 71 75 79 80 83 84 85 86 89 90 91 94 96 97 98 99 102 103 104 106 107 108 109 110 111 113 116 118 119 121 122 124 125 126 127 128 129 130 133 135 136 137 138 139 140 141 144 145 151 152 155 157 158 160 163 165 166 168 169 170 171 172 174 178 179 180 182 183 184 185 186 188 190 191 192 194 196 197 199 200 204 206 208 209 211 218 220 221 222 223 # 16283 assign c a 224 0 1 e b 224 0 1 e # 16284 assign c a 224 0 1 e b 224 1 0 e # 16285 assign c a 224 0 1 e b 224 0 1 e # 16286 assign c a 224 0 1 e b 224 1 0 f # 16287 assign c a 224 0 1 e b 224 0 1 e # 16288 assign c a 224 0 1 e b 224 1 0 0 1 2 3 6 8 10 11 12 13 15 16 17 21 22 25 26 27 29 30 33 35 41 44 45 46 48 50 51 55 58 59 60 65 68 69 70 72 73 74 76 77 78 81 83 85 92 94 95 100 102 103 107 112 113 116 117 118 120 121 123 126 127 130 133 135 138 140 142 143 146 148 149 151 152 153 154 158 159 160 161 164 166 167 168 169 171 172 176 179 181 182 183 184 188 190 191 194 195 196 197 198 199 200 203 204 205 206 207 211 214 216 217 218 219 221 # 16289 assign c a 224 0 1 f b 224 0 1 f # 16290 assign c a 224 0 1 f b 224 1 0 e # 16291 assign c a 224 0 1 f b 224 0 1 f # 16292 assign c a 224 0 1 f b 224 1 0 f # 16293 assign c a 224 0 1 f b 224 0 1 f # 16294 assign c a 224 0 1 f b 224 1 0 0 3 8 9 10 11 12 13 14 19 21 24 26 28 30 31 32 34 36 38 39 41 42 44 46 48 49 52 53 55 56 59 60 61 62 63 65 67 68 70 72 75 76 78 79 82 84 87 88 90 91 93 94 95 96 98 99 100 102 103 104 107 108 110 111 112 113 115 118 120 121 124 128 129 136 137 143 144 145 146 153 154 155 156 157 159 160 161 164 166 167 172 173 175 178 179 180 182 183 185 186 188 190 191 196 198 199 200 204 205 211 212 214 215 216 217 219 223 # 16295 assign c a 224 0 1 1 2 4 5 7 9 12 14 15 16 17 18 21 24 25 26 28 34 37 38 40 42 44 50 51 54 57 58 62 63 66 67 69 73 74 75 79 80 82 84 85 86 88 89 92 94 96 97 100 107 109 110 113 120 121 123 127 129 133 134 135 136 137 138 140 141 142 143 147 149 152 153 155 157 158 159 160 163 164 165 166 167 168 171 174 175 177 178 179 180 181 184 185 187 188 190 191 192 193 194 195 196 198 199 200 202 206 207 209 210 212 214 220 b 224 0 1 1 2 4 5 7 9 12 14 15 16 17 18 21 24 25 26 28 34 37 38 40 42 44 50 51 54 57 58 62 63 66 67 69 73 74 75 79 80 82 84 85 86 88 89 92 94 96 97 100 107 109 110 113 120 121 123 127 129 133 134 135 136 137 138 140 141 142 143 147 149 152 153 155 157 158 159 160 163 164 165 166 167 168 171 174 175 177 178 179 180 181 184 185 187 188 190 191 192 193 194 195 196 198 199 200 202 206 207 209 210 212 214 220 # 16296 assign c a 224 0 1 1 2 4 5 7 9 12 14 15 16 17 18 21 24 25 26 28 34 37 38 40 42 44 50 51 54 57 58 62 63 66 67 69 73 74 75 79 80 82 84 85 86 88 89 92 94 96 97 100 107 109 110 113 120 121 123 127 129 133 134 135 136 137 138 140 141 142 143 147 149 152 153 155 157 158 159 160 163 164 165 166 167 168 171 174 175 177 178 179 180 181 184 185 187 188 190 191 192 193 194 195 196 198 199 200 202 206 207 209 210 212 214 220 b 224 1 0 e # 16297 assign c a 224 0 1 1 5 9 10 11 13 14 15 17 21 22 23 27 31 33 34 35 36 39 42 43 44 46 49 50 52 56 60 61 62 65 69 73 77 78 79 80 83 84 87 88 90 91 93 95 96 97 98 100 102 105 107 108 111 112 113 114 115 120 123 125 126 128 129 130 131 132 134 138 140 148 149 150 153 155 156 160 161 163 167 168 172 173 174 175 180 182 186 187 193 195 196 197 198 199 200 203 206 207 210 213 214 215 216 217 218 220 222 b 224 0 1 1 5 9 10 11 13 14 15 17 21 22 23 27 31 33 34 35 36 39 42 43 44 46 49 50 52 56 60 61 62 65 69 73 77 78 79 80 83 84 87 88 90 91 93 95 96 97 98 100 102 105 107 108 111 112 113 114 115 120 123 125 126 128 129 130 131 132 134 138 140 148 149 150 153 155 156 160 161 163 167 168 172 173 174 175 180 182 186 187 193 195 196 197 198 199 200 203 206 207 210 213 214 215 216 217 218 220 222 # 16298 assign c a 224 0 1 1 5 9 10 11 13 14 15 17 21 22 23 27 31 33 34 35 36 39 42 43 44 46 49 50 52 56 60 61 62 65 69 73 77 78 79 80 83 84 87 88 90 91 93 95 96 97 98 100 102 105 107 108 111 112 113 114 115 120 123 125 126 128 129 130 131 132 134 138 140 148 149 150 153 155 156 160 161 163 167 168 172 173 174 175 180 182 186 187 193 195 196 197 198 199 200 203 206 207 210 213 214 215 216 217 218 220 222 b 224 1 0 f # 16299 assign c a 224 0 1 0 2 3 5 6 8 9 10 13 14 15 16 17 20 21 23 24 25 27 30 32 33 35 36 37 39 40 42 44 45 46 47 48 51 53 55 56 57 58 59 60 61 63 64 66 69 74 77 80 81 82 89 92 94 96 97 98 100 102 103 105 107 110 113 114 115 117 118 119 120 122 123 124 125 127 128 135 136 137 138 141 142 144 145 148 150 151 153 156 157 158 159 160 165 170 171 172 173 175 176 178 180 181 184 185 187 190 192 193 194 196 198 200 201 202 203 204 208 210 214 216 220 222 b 224 0 1 0 2 3 5 6 8 9 10 13 14 15 16 17 20 21 23 24 25 27 30 32 33 35 36 37 39 40 42 44 45 46 47 48 51 53 55 56 57 58 59 60 61 63 64 66 69 74 77 80 81 82 89 92 94 96 97 98 100 102 103 105 107 110 113 114 115 117 118 119 120 122 123 124 125 127 128 135 136 137 138 141 142 144 145 148 150 151 153 156 157 158 159 160 165 170 171 172 173 175 176 178 180 181 184 185 187 190 192 193 194 196 198 200 201 202 203 204 208 210 214 216 220 222 # 16300 assign c a 224 0 1 0 2 3 5 6 8 9 10 13 14 15 16 17 20 21 23 24 25 27 30 32 33 35 36 37 39 40 42 44 45 46 47 48 51 53 55 56 57 58 59 60 61 63 64 66 69 74 77 80 81 82 89 92 94 96 97 98 100 102 103 105 107 110 113 114 115 117 118 119 120 122 123 124 125 127 128 135 136 137 138 141 142 144 145 148 150 151 153 156 157 158 159 160 165 170 171 172 173 175 176 178 180 181 184 185 187 190 192 193 194 196 198 200 201 202 203 204 208 210 214 216 220 222 b 224 1 0 1 2 3 10 11 16 18 20 22 23 24 28 30 31 33 34 35 38 41 43 45 49 50 53 54 58 61 63 67 71 73 74 75 76 83 86 87 88 89 94 95 96 98 100 101 104 109 110 111 115 116 118 122 123 124 125 126 130 133 134 138 139 143 144 145 146 149 150 151 152 153 155 159 160 161 162 164 165 168 170 172 174 177 178 179 181 182 184 190 193 196 197 198 199 201 202 203 205 207 208 210 214 216 217 223 # 16301 assign c a 224 0 1 e b 224 0 1 e # 16302 assign c a 224 0 1 e b 224 1 1 e # 16303 assign c a 224 0 1 e b 224 0 1 e # 16304 assign c a 224 0 1 e b 224 1 1 f # 16305 assign c a 224 0 1 e b 224 0 1 e # 16306 assign c a 224 0 1 e b 224 1 1 1 4 6 8 9 12 13 14 15 17 18 19 21 22 23 24 28 29 32 33 34 35 36 37 38 39 40 43 44 48 50 53 55 62 63 65 66 69 72 74 75 76 79 80 82 87 88 91 92 94 96 97 101 102 105 107 109 110 112 113 116 117 118 119 122 125 129 130 131 132 133 135 137 138 139 140 141 142 143 146 149 153 154 155 156 163 164 165 166 168 169 172 176 178 179 181 184 187 190 191 192 194 195 196 197 199 200 204 206 208 211 213 217 219 223 # 16307 assign c a 224 0 1 f b 224 0 1 f # 16308 assign c a 224 0 1 f b 224 1 1 e # 16309 assign c a 224 0 1 f b 224 0 1 f # 16310 assign c a 224 0 1 f b 224 1 1 f # 16311 assign c a 224 0 1 f b 224 0 1 f # 16312 assign c a 224 0 1 f b 224 1 1 2 4 5 7 12 13 14 15 18 19 24 25 28 29 32 33 34 35 36 38 40 41 42 43 44 48 51 53 56 57 58 59 61 64 67 74 76 78 80 85 86 87 88 90 93 94 99 101 102 103 105 106 107 109 112 113 116 119 120 121 122 124 125 126 128 130 133 136 140 141 142 143 144 147 150 153 158 161 162 163 164 167 169 172 173 175 177 178 179 182 183 187 188 189 192 194 199 200 203 205 207 208 211 212 214 215 216 217 218 219 220 221 222 223 # 16313 assign c a 224 0 1 1 3 6 8 10 15 16 17 18 21 24 26 27 29 32 33 37 42 44 45 47 48 51 53 55 56 58 62 64 65 68 69 74 79 80 82 83 86 89 91 92 94 95 101 103 104 109 118 119 120 122 123 125 126 127 130 131 132 134 135 136 140 144 145 146 148 151 152 153 154 156 157 158 159 161 162 168 171 172 173 174 175 176 177 178 179 182 183 185 187 188 190 191 193 195 198 199 200 202 203 205 206 209 210 211 212 213 214 217 b 224 0 1 1 3 6 8 10 15 16 17 18 21 24 26 27 29 32 33 37 42 44 45 47 48 51 53 55 56 58 62 64 65 68 69 74 79 80 82 83 86 89 91 92 94 95 101 103 104 109 118 119 120 122 123 125 126 127 130 131 132 134 135 136 140 144 145 146 148 151 152 153 154 156 157 158 159 161 162 168 171 172 173 174 175 176 177 178 179 182 183 185 187 188 190 191 193 195 198 199 200 202 203 205 206 209 210 211 212 213 214 217 # 16314 assign c a 224 0 1 1 3 6 8 10 15 16 17 18 21 24 26 27 29 32 33 37 42 44 45 47 48 51 53 55 56 58 62 64 65 68 69 74 79 80 82 83 86 89 91 92 94 95 101 103 104 109 118 119 120 122 123 125 126 127 130 131 132 134 135 136 140 144 145 146 148 151 152 153 154 156 157 158 159 161 162 168 171 172 173 174 175 176 177 178 179 182 183 185 187 188 190 191 193 195 198 199 200 202 203 205 206 209 210 211 212 213 214 217 b 224 1 1 e # 16315 assign c a 224 0 1 0 4 7 8 9 10 12 13 18 21 22 23 24 25 26 27 32 33 35 36 37 38 39 40 41 42 46 47 48 49 54 57 61 62 63 66 68 71 75 76 77 78 79 80 82 85 87 88 89 93 95 97 101 102 103 104 107 111 115 117 118 121 122 123 124 125 126 128 136 137 138 139 140 142 144 148 150 153 156 159 160 161 172 174 175 182 183 186 187 188 190 191 193 195 197 199 202 204 205 208 209 210 213 220 b 224 0 1 0 4 7 8 9 10 12 13 18 21 22 23 24 25 26 27 32 33 35 36 37 38 39 40 41 42 46 47 48 49 54 57 61 62 63 66 68 71 75 76 77 78 79 80 82 85 87 88 89 93 95 97 101 102 103 104 107 111 115 117 118 121 122 123 124 125 126 128 136 137 138 139 140 142 144 148 150 153 156 159 160 161 172 174 175 182 183 186 187 188 190 191 193 195 197 199 202 204 205 208 209 210 213 220 # 16316 assign c a 224 0 1 0 4 7 8 9 10 12 13 18 21 22 23 24 25 26 27 32 33 35 36 37 38 39 40 41 42 46 47 48 49 54 57 61 62 63 66 68 71 75 76 77 78 79 80 82 85 87 88 89 93 95 97 101 102 103 104 107 111 115 117 118 121 122 123 124 125 126 128 136 137 138 139 140 142 144 148 150 153 156 159 160 161 172 174 175 182 183 186 187 188 190 191 193 195 197 199 202 204 205 208 209 210 213 220 b 224 1 1 f # 16317 assign c a 224 0 1 3 8 10 11 13 14 16 17 18 19 21 23 25 26 27 32 35 36 37 39 42 45 46 47 50 51 54 55 57 58 59 60 61 63 66 74 75 76 77 78 81 83 87 88 91 93 94 95 100 101 102 104 105 106 107 108 109 111 113 114 115 121 123 124 125 127 129 141 143 144 145 149 151 152 153 155 156 157 158 160 164 165 166 171 173 176 177 179 180 181 182 183 184 186 190 191 192 197 198 199 204 205 206 207 208 210 211 214 215 216 217 219 222 223 b 224 0 1 3 8 10 11 13 14 16 17 18 19 21 23 25 26 27 32 35 36 37 39 42 45 46 47 50 51 54 55 57 58 59 60 61 63 66 74 75 76 77 78 81 83 87 88 91 93 94 95 100 101 102 104 105 106 107 108 109 111 113 114 115 121 123 124 125 127 129 141 143 144 145 149 151 152 153 155 156 157 158 160 164 165 166 171 173 176 177 179 180 181 182 183 184 186 190 191 192 197 198 199 204 205 206 207 208 210 211 214 215 216 217 219 222 223 # 16318 assign c a 224 0 1 3 8 10 11 13 14 16 17 18 19 21 23 25 26 27 32 35 36 37 39 42 45 46 47 50 51 54 55 57 58 59 60 61 63 66 74 75 76 77 78 81 83 87 88 91 93 94 95 100 101 102 104 105 106 107 108 109 111 113 114 115 121 123 124 125 127 129 141 143 144 145 149 151 152 153 155 156 157 158 160 164 165 166 171 173 176 177 179 180 181 182 183 184 186 190 191 192 197 198 199 204 205 206 207 208 210 211 214 215 216 217 219 222 223 b 224 1 1 3 9 10 12 13 15 16 17 18 21 24 25 27 28 30 35 36 37 40 42 43 44 45 46 47 48 49 52 54 57 62 63 64 65 67 68 69 70 72 73 75 76 77 78 79 80 84 85 86 87 88 92 93 94 95 96 98 99 101 110 114 117 128 129 132 136 137 140 142 144 146 147 149 153 154 155 157 160 161 163 165 166 168 170 171 172 175 176 177 178 180 181 182 184 187 189 192 193 195 196 200 201 203 210 214 215 216 218 222 # 16319 assign c a 224 1 0 e b 224 1 0 e # 16320 assign c a 224 1 0 e b 224 0 0 e # 16321 assign c a 224 1 0 e b 224 1 0 e # 16322 assign c a 224 1 0 e b 224 0 0 f # 16323 assign c a 224 1 0 e b 224 1 0 e # 16324 assign c a 224 1 0 e b 224 0 0 0 3 10 11 12 16 18 19 20 21 22 23 25 27 34 35 36 40 43 44 45 51 54 55 57 58 59 61 62 63 65 66 69 70 71 74 75 77 79 81 82 87 89 90 91 92 93 96 98 99 101 102 105 107 108 109 110 111 112 116 117 120 123 124 125 127 128 130 133 134 135 138 144 145 146 147 153 154 161 162 163 164 168 171 172 173 175 177 178 179 183 184 190 191 193 194 199 201 202 204 206 209 212 215 216 220 # 16325 assign c a 224 1 0 f b 224 1 0 f # 16326 assign c a 224 1 0 f b 224 0 0 e # 16327 assign c a 224 1 0 f b 224 1 0 f # 16328 assign c a 224 1 0 f b 224 0 0 f # 16329 assign c a 224 1 0 f b 224 1 0 f # 16330 assign c a 224 1 0 f b 224 0 0 1 2 7 10 11 12 13 15 16 19 20 21 22 23 26 28 30 31 36 37 39 42 47 48 49 50 51 55 56 58 60 61 63 65 67 68 69 70 72 73 74 77 79 80 81 82 86 88 89 90 92 95 97 98 100 101 102 103 104 106 113 115 118 119 121 124 125 128 131 136 140 141 143 144 145 146 147 149 150 151 158 160 163 165 169 171 173 174 176 177 183 184 185 190 191 193 194 195 196 199 200 201 202 204 205 206 207 208 209 213 215 217 219 220 221 222 # 16331 assign c a 224 1 0 0 1 3 4 5 6 7 9 12 14 18 20 21 24 25 27 28 29 31 32 33 35 38 39 40 43 47 49 52 53 54 55 61 62 63 66 67 68 70 71 72 77 78 79 80 83 84 88 89 90 91 92 93 94 97 99 102 103 107 108 110 111 116 117 118 119 120 121 122 123 125 126 127 130 131 134 135 136 137 138 139 141 143 145 148 151 152 153 154 156 157 160 161 162 165 168 170 171 174 175 177 181 184 186 188 189 190 191 192 193 197 198 201 203 205 206 207 208 213 215 216 219 222 b 224 1 0 0 1 3 4 5 6 7 9 12 14 18 20 21 24 25 27 28 29 31 32 33 35 38 39 40 43 47 49 52 53 54 55 61 62 63 66 67 68 70 71 72 77 78 79 80 83 84 88 89 90 91 92 93 94 97 99 102 103 107 108 110 111 116 117 118 119 120 121 122 123 125 126 127 130 131 134 135 136 137 138 139 141 143 145 148 151 152 153 154 156 157 160 161 162 165 168 170 171 174 175 177 181 184 186 188 189 190 191 192 193 197 198 201 203 205 206 207 208 213 215 216 219 222 # 16332 assign c a 224 1 0 0 1 3 4 5 6 7 9 12 14 18 20 21 24 25 27 28 29 31 32 33 35 38 39 40 43 47 49 52 53 54 55 61 62 63 66 67 68 70 71 72 77 78 79 80 83 84 88 89 90 91 92 93 94 97 99 102 103 107 108 110 111 116 117 118 119 120 121 122 123 125 126 127 130 131 134 135 136 137 138 139 141 143 145 148 151 152 153 154 156 157 160 161 162 165 168 170 171 174 175 177 181 184 186 188 189 190 191 192 193 197 198 201 203 205 206 207 208 213 215 216 219 222 b 224 0 0 e # 16333 assign c a 224 1 0 0 2 6 7 9 10 12 13 15 19 21 22 24 32 34 36 37 39 40 43 45 46 47 49 52 54 55 57 58 59 63 64 71 72 73 74 75 76 78 79 86 87 89 90 96 97 98 103 105 106 107 109 110 111 112 116 119 123 124 125 126 127 128 129 131 132 134 137 139 140 142 143 144 149 151 153 156 159 162 164 165 168 169 172 175 176 181 182 184 186 187 188 189 196 197 198 199 200 203 204 207 208 209 210 213 214 218 222 223 b 224 1 0 0 2 6 7 9 10 12 13 15 19 21 22 24 32 34 36 37 39 40 43 45 46 47 49 52 54 55 57 58 59 63 64 71 72 73 74 75 76 78 79 86 87 89 90 96 97 98 103 105 106 107 109 110 111 112 116 119 123 124 125 126 127 128 129 131 132 134 137 139 140 142 143 144 149 151 153 156 159 162 164 165 168 169 172 175 176 181 182 184 186 187 188 189 196 197 198 199 200 203 204 207 208 209 210 213 214 218 222 223 # 16334 assign c a 224 1 0 0 2 6 7 9 10 12 13 15 19 21 22 24 32 34 36 37 39 40 43 45 46 47 49 52 54 55 57 58 59 63 64 71 72 73 74 75 76 78 79 86 87 89 90 96 97 98 103 105 106 107 109 110 111 112 116 119 123 124 125 126 127 128 129 131 132 134 137 139 140 142 143 144 149 151 153 156 159 162 164 165 168 169 172 175 176 181 182 184 186 187 188 189 196 197 198 199 200 203 204 207 208 209 210 213 214 218 222 223 b 224 0 0 f # 16335 assign c a 224 1 0 0 3 7 8 9 10 11 14 16 17 20 22 24 25 26 31 32 33 34 35 38 40 41 44 45 47 48 49 54 55 56 60 63 65 66 69 70 73 76 77 79 80 81 85 92 93 96 97 98 99 100 105 106 108 111 114 118 119 120 123 124 125 126 127 128 129 130 133 134 135 136 140 143 144 153 154 156 157 160 161 162 163 164 165 166 167 169 171 174 176 178 180 186 189 190 192 193 195 197 198 199 200 201 202 205 206 209 211 213 215 217 219 220 221 223 b 224 1 0 0 3 7 8 9 10 11 14 16 17 20 22 24 25 26 31 32 33 34 35 38 40 41 44 45 47 48 49 54 55 56 60 63 65 66 69 70 73 76 77 79 80 81 85 92 93 96 97 98 99 100 105 106 108 111 114 118 119 120 123 124 125 126 127 128 129 130 133 134 135 136 140 143 144 153 154 156 157 160 161 162 163 164 165 166 167 169 171 174 176 178 180 186 189 190 192 193 195 197 198 199 200 201 202 205 206 209 211 213 215 217 219 220 221 223 # 16336 assign c a 224 1 0 0 3 7 8 9 10 11 14 16 17 20 22 24 25 26 31 32 33 34 35 38 40 41 44 45 47 48 49 54 55 56 60 63 65 66 69 70 73 76 77 79 80 81 85 92 93 96 97 98 99 100 105 106 108 111 114 118 119 120 123 124 125 126 127 128 129 130 133 134 135 136 140 143 144 153 154 156 157 160 161 162 163 164 165 166 167 169 171 174 176 178 180 186 189 190 192 193 195 197 198 199 200 201 202 205 206 209 211 213 215 217 219 220 221 223 b 224 0 0 0 2 5 6 8 9 10 13 15 16 17 18 20 21 24 25 27 28 29 30 33 34 35 36 37 42 43 46 50 54 56 59 60 65 66 68 70 75 76 77 78 79 81 83 84 85 87 89 90 93 95 96 99 100 101 102 106 109 111 112 114 115 118 119 122 123 126 128 129 131 132 134 137 138 139 140 141 143 147 150 151 152 153 158 161 162 165 166 167 168 171 173 174 175 178 179 181 185 187 190 193 194 196 199 200 201 202 204 205 207 208 210 214 215 222 223 # 16337 assign c a 224 1 0 e b 224 1 0 e # 16338 assign c a 224 1 0 e b 224 0 1 e # 16339 assign c a 224 1 0 e b 224 1 0 e # 16340 assign c a 224 1 0 e b 224 0 1 f # 16341 assign c a 224 1 0 e b 224 1 0 e # 16342 assign c a 224 1 0 e b 224 0 1 1 10 11 14 16 17 18 19 20 22 24 26 28 29 30 34 35 36 38 39 40 41 42 43 44 45 47 48 49 50 51 54 56 57 62 63 64 66 68 69 77 80 81 82 85 88 89 90 96 97 98 99 100 104 105 106 109 112 117 118 120 124 125 126 127 128 130 132 133 134 136 138 144 145 146 148 149 151 153 156 160 161 162 164 165 166 167 169 170 171 172 175 178 180 185 189 190 191 192 193 195 199 204 205 206 208 209 210 211 215 217 219 221 222 # 16343 assign c a 224 1 0 f b 224 1 0 f # 16344 assign c a 224 1 0 f b 224 0 1 e # 16345 assign c a 224 1 0 f b 224 1 0 f # 16346 assign c a 224 1 0 f b 224 0 1 f # 16347 assign c a 224 1 0 f b 224 1 0 f # 16348 assign c a 224 1 0 f b 224 0 1 0 2 4 6 7 8 11 19 20 22 25 27 28 29 30 31 33 34 35 37 38 43 45 46 47 52 54 55 58 61 62 64 65 68 70 72 78 79 84 87 89 91 92 97 98 102 103 104 105 107 110 111 112 113 114 119 121 123 124 125 131 132 134 137 143 149 151 152 153 154 155 158 159 162 164 166 167 171 173 174 175 176 183 185 186 187 189 190 191 194 195 196 197 198 200 205 210 212 213 216 218 220 221 222 # 16349 assign c a 224 1 0 1 4 6 7 8 9 11 12 16 17 18 19 20 23 28 30 33 35 38 39 41 42 53 55 56 59 60 63 65 66 68 69 72 76 77 78 79 83 84 86 87 88 90 91 94 95 96 97 99 101 105 107 108 110 111 114 116 119 120 124 126 127 128 130 132 133 134 136 143 148 149 150 154 156 157 158 159 160 161 163 164 165 170 171 172 174 176 182 183 184 185 186 187 189 192 193 196 197 198 199 201 202 203 208 209 210 211 213 214 217 218 219 220 b 224 1 0 1 4 6 7 8 9 11 12 16 17 18 19 20 23 28 30 33 35 38 39 41 42 53 55 56 59 60 63 65 66 68 69 72 76 77 78 79 83 84 86 87 88 90 91 94 95 96 97 99 101 105 107 108 110 111 114 116 119 120 124 126 127 128 130 132 133 134 136 143 148 149 150 154 156 157 158 159 160 161 163 164 165 170 171 172 174 176 182 183 184 185 186 187 189 192 193 196 197 198 199 201 202 203 208 209 210 211 213 214 217 218 219 220 # 16350 assign c a 224 1 0 1 4 6 7 8 9 11 12 16 17 18 19 20 23 28 30 33 35 38 39 41 42 53 55 56 59 60 63 65 66 68 69 72 76 77 78 79 83 84 86 87 88 90 91 94 95 96 97 99 101 105 107 108 110 111 114 116 119 120 124 126 127 128 130 132 133 134 136 143 148 149 150 154 156 157 158 159 160 161 163 164 165 170 171 172 174 176 182 183 184 185 186 187 189 192 193 196 197 198 199 201 202 203 208 209 210 211 213 214 217 218 219 220 b 224 0 1 e # 16351 assign c a 224 1 0 1 2 3 4 5 6 7 8 9 10 14 15 16 18 21 23 26 28 30 33 35 36 38 39 40 41 45 51 52 53 58 62 63 65 66 67 69 70 72 73 75 76 77 80 81 83 84 85 88 90 92 95 97 98 99 100 101 102 104 107 109 117 120 122 123 124 125 126 128 129 130 131 133 137 138 139 142 143 144 147 148 149 151 152 153 154 155 156 158 159 161 162 163 164 165 166 168 169 175 178 186 188 189 191 192 193 194 195 196 197 199 200 201 202 203 204 206 208 209 210 211 216 218 221 b 224 1 0 1 2 3 4 5 6 7 8 9 10 14 15 16 18 21 23 26 28 30 33 35 36 38 39 40 41 45 51 52 53 58 62 63 65 66 67 69 70 72 73 75 76 77 80 81 83 84 85 88 90 92 95 97 98 99 100 101 102 104 107 109 117 120 122 123 124 125 126 128 129 130 131 133 137 138 139 142 143 144 147 148 149 151 152 153 154 155 156 158 159 161 162 163 164 165 166 168 169 175 178 186 188 189 191 192 193 194 195 196 197 199 200 201 202 203 204 206 208 209 210 211 216 218 221 # 16352 assign c a 224 1 0 1 2 3 4 5 6 7 8 9 10 14 15 16 18 21 23 26 28 30 33 35 36 38 39 40 41 45 51 52 53 58 62 63 65 66 67 69 70 72 73 75 76 77 80 81 83 84 85 88 90 92 95 97 98 99 100 101 102 104 107 109 117 120 122 123 124 125 126 128 129 130 131 133 137 138 139 142 143 144 147 148 149 151 152 153 154 155 156 158 159 161 162 163 164 165 166 168 169 175 178 186 188 189 191 192 193 194 195 196 197 199 200 201 202 203 204 206 208 209 210 211 216 218 221 b 224 0 1 f # 16353 assign c a 224 1 0 0 3 4 5 6 7 9 10 12 13 14 15 16 17 18 19 21 26 30 33 36 37 40 41 42 43 44 45 48 53 58 61 62 63 64 65 68 69 70 71 72 77 78 79 85 86 87 88 89 92 93 96 97 98 99 100 101 102 106 109 113 114 115 117 118 120 121 122 123 124 127 130 132 133 134 136 137 138 140 142 144 145 148 149 150 151 152 153 155 157 158 159 160 161 163 164 165 167 168 169 170 173 174 177 178 180 181 182 183 184 186 189 192 195 202 203 206 207 209 210 213 219 221 222 b 224 1 0 0 3 4 5 6 7 9 10 12 13 14 15 16 17 18 19 21 26 30 33 36 37 40 41 42 43 44 45 48 53 58 61 62 63 64 65 68 69 70 71 72 77 78 79 85 86 87 88 89 92 93 96 97 98 99 100 101 102 106 109 113 114 115 117 118 120 121 122 123 124 127 130 132 133 134 136 137 138 140 142 144 145 148 149 150 151 152 153 155 157 158 159 160 161 163 164 165 167 168 169 170 173 174 177 178 180 181 182 183 184 186 189 192 195 202 203 206 207 209 210 213 219 221 222 # 16354 assign c a 224 1 0 0 3 4 5 6 7 9 10 12 13 14 15 16 17 18 19 21 26 30 33 36 37 40 41 42 43 44 45 48 53 58 61 62 63 64 65 68 69 70 71 72 77 78 79 85 86 87 88 89 92 93 96 97 98 99 100 101 102 106 109 113 114 115 117 118 120 121 122 123 124 127 130 132 133 134 136 137 138 140 142 144 145 148 149 150 151 152 153 155 157 158 159 160 161 163 164 165 167 168 169 170 173 174 177 178 180 181 182 183 184 186 189 192 195 202 203 206 207 209 210 213 219 221 222 b 224 0 1 3 4 5 6 9 10 13 15 16 21 23 25 27 28 31 32 34 37 38 41 42 43 44 49 50 51 55 57 59 61 62 65 66 70 71 73 74 75 79 80 85 87 88 89 90 93 94 95 99 100 102 105 108 109 111 112 113 116 117 119 121 123 124 125 126 129 134 136 137 138 139 140 142 143 144 147 151 153 154 156 161 162 163 164 167 170 173 174 179 180 181 188 189 192 194 195 196 198 201 203 204 208 209 210 214 215 216 221 222 223 # 16355 assign c a 224 1 0 e b 224 1 0 e # 16356 assign c a 224 1 0 e b 224 1 0 e # 16357 assign c a 224 1 0 e b 224 1 0 e # 16358 assign c a 224 1 0 e b 224 1 0 f # 16359 assign c a 224 1 0 e b 224 1 0 e # 16360 assign c a 224 1 0 e b 224 1 0 0 1 2 3 4 6 11 12 13 15 16 20 21 26 29 34 36 37 38 39 42 53 54 55 57 61 62 63 64 65 67 68 70 72 73 74 76 77 78 82 83 84 86 89 90 91 92 94 95 99 100 103 104 105 107 108 109 116 119 122 123 124 126 127 128 130 141 142 143 146 147 150 151 152 153 154 159 160 164 165 166 167 171 173 179 180 183 188 189 193 194 195 196 198 199 200 202 203 208 209 211 213 215 216 217 219 221 223 # 16361 assign c a 224 1 0 f b 224 1 0 f # 16362 assign c a 224 1 0 f b 224 1 0 e # 16363 assign c a 224 1 0 f b 224 1 0 f # 16364 assign c a 224 1 0 f b 224 1 0 f # 16365 assign c a 224 1 0 f b 224 1 0 f # 16366 assign c a 224 1 0 f b 224 1 0 0 1 2 5 8 13 14 16 17 18 20 22 23 27 28 29 31 32 36 37 39 40 41 45 46 48 49 51 56 57 59 60 61 64 65 66 67 70 72 74 77 78 82 83 84 93 94 99 100 103 107 109 110 111 113 115 117 119 121 125 126 127 129 130 134 135 136 142 147 149 150 152 154 157 159 160 162 163 164 165 166 167 170 172 173 174 179 187 188 189 191 192 194 195 199 200 206 207 208 209 210 213 215 217 220 221 222 223 # 16367 assign c a 224 1 0 1 3 5 6 7 9 11 14 15 17 20 21 23 24 25 28 32 33 36 37 40 41 44 48 50 51 53 54 55 56 57 61 62 65 68 69 71 73 76 78 79 80 82 89 90 91 94 95 101 103 105 109 115 116 117 121 122 123 125 126 127 131 132 133 136 137 138 139 140 144 145 150 151 153 154 155 156 157 158 162 166 169 171 175 179 180 182 184 185 187 188 190 191 192 193 197 198 199 200 201 202 203 205 206 207 212 214 215 216 219 220 222 223 b 224 1 0 1 3 5 6 7 9 11 14 15 17 20 21 23 24 25 28 32 33 36 37 40 41 44 48 50 51 53 54 55 56 57 61 62 65 68 69 71 73 76 78 79 80 82 89 90 91 94 95 101 103 105 109 115 116 117 121 122 123 125 126 127 131 132 133 136 137 138 139 140 144 145 150 151 153 154 155 156 157 158 162 166 169 171 175 179 180 182 184 185 187 188 190 191 192 193 197 198 199 200 201 202 203 205 206 207 212 214 215 216 219 220 222 223 # 16368 assign c a 224 1 0 1 3 5 6 7 9 11 14 15 17 20 21 23 24 25 28 32 33 36 37 40 41 44 48 50 51 53 54 55 56 57 61 62 65 68 69 71 73 76 78 79 80 82 89 90 91 94 95 101 103 105 109 115 116 117 121 122 123 125 126 127 131 132 133 136 137 138 139 140 144 145 150 151 153 154 155 156 157 158 162 166 169 171 175 179 180 182 184 185 187 188 190 191 192 193 197 198 199 200 201 202 203 205 206 207 212 214 215 216 219 220 222 223 b 224 1 0 e # 16369 assign c a 224 1 0 1 3 4 6 7 10 11 13 15 17 19 22 24 26 27 28 29 30 32 35 36 37 39 42 43 44 46 52 53 54 55 57 58 59 61 66 71 72 73 74 75 77 78 82 85 91 93 95 99 100 102 105 107 108 114 115 116 120 121 125 127 128 131 132 136 139 140 142 144 145 146 147 148 151 152 153 154 160 161 163 164 167 168 170 171 172 173 174 175 177 181 186 187 189 192 193 194 195 198 200 202 203 205 207 208 209 212 216 221 223 b 224 1 0 1 3 4 6 7 10 11 13 15 17 19 22 24 26 27 28 29 30 32 35 36 37 39 42 43 44 46 52 53 54 55 57 58 59 61 66 71 72 73 74 75 77 78 82 85 91 93 95 99 100 102 105 107 108 114 115 116 120 121 125 127 128 131 132 136 139 140 142 144 145 146 147 148 151 152 153 154 160 161 163 164 167 168 170 171 172 173 174 175 177 181 186 187 189 192 193 194 195 198 200 202 203 205 207 208 209 212 216 221 223 # 16370 assign c a 224 1 0 1 3 4 6 7 10 11 13 15 17 19 22 24 26 27 28 29 30 32 35 36 37 39 42 43 44 46 52 53 54 55 57 58 59 61 66 71 72 73 74 75 77 78 82 85 91 93 95 99 100 102 105 107 108 114 115 116 120 121 125 127 128 131 132 136 139 140 142 144 145 146 147 148 151 152 153 154 160 161 163 164 167 168 170 171 172 173 174 175 177 181 186 187 189 192 193 194 195 198 200 202 203 205 207 208 209 212 216 221 223 b 224 1 0 f # 16371 assign c a 224 1 0 2 3 4 6 8 9 12 13 14 15 16 20 21 22 24 25 26 28 32 33 34 37 38 40 42 43 44 45 46 47 48 51 52 53 55 56 57 59 62 63 65 67 68 71 72 74 75 76 77 79 81 82 84 85 87 88 92 97 101 103 106 111 112 113 114 115 116 119 120 121 123 127 129 132 133 135 139 142 145 148 149 151 152 153 157 161 162 164 168 172 173 174 176 177 178 179 180 185 186 188 189 190 192 193 197 198 201 204 206 207 209 211 213 216 218 219 221 222 223 b 224 1 0 2 3 4 6 8 9 12 13 14 15 16 20 21 22 24 25 26 28 32 33 34 37 38 40 42 43 44 45 46 47 48 51 52 53 55 56 57 59 62 63 65 67 68 71 72 74 75 76 77 79 81 82 84 85 87 88 92 97 101 103 106 111 112 113 114 115 116 119 120 121 123 127 129 132 133 135 139 142 145 148 149 151 152 153 157 161 162 164 168 172 173 174 176 177 178 179 180 185 186 188 189 190 192 193 197 198 201 204 206 207 209 211 213 216 218 219 221 222 223 # 16372 assign c a 224 1 0 2 3 4 6 8 9 12 13 14 15 16 20 21 22 24 25 26 28 32 33 34 37 38 40 42 43 44 45 46 47 48 51 52 53 55 56 57 59 62 63 65 67 68 71 72 74 75 76 77 79 81 82 84 85 87 88 92 97 101 103 106 111 112 113 114 115 116 119 120 121 123 127 129 132 133 135 139 142 145 148 149 151 152 153 157 161 162 164 168 172 173 174 176 177 178 179 180 185 186 188 189 190 192 193 197 198 201 204 206 207 209 211 213 216 218 219 221 222 223 b 224 1 0 0 6 10 14 15 18 22 25 27 28 30 31 32 35 39 42 43 44 45 46 47 51 52 57 58 60 61 63 64 65 66 71 74 79 80 81 82 83 86 87 88 89 91 92 93 94 95 96 99 100 102 104 107 108 109 110 111 114 115 116 117 119 120 121 122 128 131 132 133 134 135 138 143 144 147 148 149 151 152 156 159 160 161 163 164 166 168 170 172 174 175 178 188 189 190 191 192 194 196 197 198 199 204 208 209 210 213 215 217 218 220 221 223 # 16373 assign c a 224 1 0 e b 224 1 0 e # 16374 assign c a 224 1 0 e b 224 1 1 e # 16375 assign c a 224 1 0 e b 224 1 0 e # 16376 assign c a 224 1 0 e b 224 1 1 f # 16377 assign c a 224 1 0 e b 224 1 0 e # 16378 assign c a 224 1 0 e b 224 1 1 5 9 10 12 13 15 16 18 22 23 25 28 29 34 38 39 41 44 45 46 47 48 49 50 53 54 55 56 59 60 61 66 67 68 69 70 73 76 78 79 81 82 83 84 85 86 87 90 96 99 100 101 104 105 106 107 109 111 112 114 115 117 118 119 121 122 126 128 131 137 138 140 144 145 148 149 151 152 155 156 160 163 164 170 172 173 174 175 176 177 179 180 182 183 184 186 188 189 190 196 197 198 200 203 209 213 214 215 217 219 220 # 16379 assign c a 224 1 0 f b 224 1 0 f # 16380 assign c a 224 1 0 f b 224 1 1 e # 16381 assign c a 224 1 0 f b 224 1 0 f # 16382 assign c a 224 1 0 f b 224 1 1 f # 16383 assign c a 224 1 0 f b 224 1 0 f # 16384 assign c a 224 1 0 f b 224 1 1 0 1 2 4 6 7 8 13 14 15 16 18 19 21 22 24 28 29 30 31 32 35 36 37 39 41 43 44 47 48 50 51 53 57 58 60 62 63 64 66 67 70 76 77 78 79 81 82 83 86 87 89 90 93 97 102 104 106 107 108 109 114 115 117 118 119 120 121 122 123 124 127 132 134 136 137 139 141 142 143 144 145 146 148 149 151 154 157 159 161 166 167 168 169 170 172 173 175 176 179 183 184 186 190 191 192 194 197 200 201 202 204 208 212 213 214 215 216 217 218 221 222 # 16385 assign c a 224 1 0 1 3 4 5 8 10 12 14 15 16 18 19 20 21 23 24 31 33 35 36 37 40 42 43 44 45 53 58 59 60 63 65 66 67 68 71 72 75 77 79 82 83 88 93 95 96 98 100 103 104 105 106 108 109 110 113 115 117 119 120 125 127 129 133 135 143 145 149 153 154 156 161 162 164 168 169 171 172 173 174 176 178 180 182 185 186 188 190 193 194 195 199 200 201 202 203 204 205 208 209 210 211 217 218 b 224 1 0 1 3 4 5 8 10 12 14 15 16 18 19 20 21 23 24 31 33 35 36 37 40 42 43 44 45 53 58 59 60 63 65 66 67 68 71 72 75 77 79 82 83 88 93 95 96 98 100 103 104 105 106 108 109 110 113 115 117 119 120 125 127 129 133 135 143 145 149 153 154 156 161 162 164 168 169 171 172 173 174 176 178 180 182 185 186 188 190 193 194 195 199 200 201 202 203 204 205 208 209 210 211 217 218 # 16386 assign c a 224 1 0 1 3 4 5 8 10 12 14 15 16 18 19 20 21 23 24 31 33 35 36 37 40 42 43 44 45 53 58 59 60 63 65 66 67 68 71 72 75 77 79 82 83 88 93 95 96 98 100 103 104 105 106 108 109 110 113 115 117 119 120 125 127 129 133 135 143 145 149 153 154 156 161 162 164 168 169 171 172 173 174 176 178 180 182 185 186 188 190 193 194 195 199 200 201 202 203 204 205 208 209 210 211 217 218 b 224 1 1 e # 16387 assign c a 224 1 0 5 13 14 16 19 20 27 28 29 31 33 35 37 39 41 43 45 46 52 53 54 56 58 59 62 64 71 73 75 76 78 80 82 84 86 87 88 89 90 91 92 95 96 97 99 101 102 104 108 110 114 116 117 119 122 124 128 129 132 134 135 137 141 142 143 145 149 151 152 153 155 157 160 161 163 164 166 169 170 172 178 179 182 186 190 192 195 197 199 200 203 204 207 208 210 212 215 216 219 220 223 b 224 1 0 5 13 14 16 19 20 27 28 29 31 33 35 37 39 41 43 45 46 52 53 54 56 58 59 62 64 71 73 75 76 78 80 82 84 86 87 88 89 90 91 92 95 96 97 99 101 102 104 108 110 114 116 117 119 122 124 128 129 132 134 135 137 141 142 143 145 149 151 152 153 155 157 160 161 163 164 166 169 170 172 178 179 182 186 190 192 195 197 199 200 203 204 207 208 210 212 215 216 219 220 223 # 16388 assign c a 224 1 0 5 13 14 16 19 20 27 28 29 31 33 35 37 39 41 43 45 46 52 53 54 56 58 59 62 64 71 73 75 76 78 80 82 84 86 87 88 89 90 91 92 95 96 97 99 101 102 104 108 110 114 116 117 119 122 124 128 129 132 134 135 137 141 142 143 145 149 151 152 153 155 157 160 161 163 164 166 169 170 172 178 179 182 186 190 192 195 197 199 200 203 204 207 208 210 212 215 216 219 220 223 b 224 1 1 f # 16389 assign c a 224 1 0 2 3 6 9 13 17 18 24 25 28 32 33 38 39 42 43 47 49 51 54 55 60 61 62 63 64 67 70 71 72 73 76 77 80 82 83 84 85 86 91 94 95 97 98 99 101 102 103 108 110 111 112 113 114 115 116 117 119 121 122 124 125 128 131 134 135 140 141 143 144 145 146 148 149 151 152 155 157 159 161 162 163 164 165 169 170 171 172 174 178 179 182 184 186 191 192 194 195 200 203 204 207 208 210 212 213 215 218 219 220 222 223 b 224 1 0 2 3 6 9 13 17 18 24 25 28 32 33 38 39 42 43 47 49 51 54 55 60 61 62 63 64 67 70 71 72 73 76 77 80 82 83 84 85 86 91 94 95 97 98 99 101 102 103 108 110 111 112 113 114 115 116 117 119 121 122 124 125 128 131 134 135 140 141 143 144 145 146 148 149 151 152 155 157 159 161 162 163 164 165 169 170 171 172 174 178 179 182 184 186 191 192 194 195 200 203 204 207 208 210 212 213 215 218 219 220 222 223 # 16390 assign c a 224 1 0 2 3 6 9 13 17 18 24 25 28 32 33 38 39 42 43 47 49 51 54 55 60 61 62 63 64 67 70 71 72 73 76 77 80 82 83 84 85 86 91 94 95 97 98 99 101 102 103 108 110 111 112 113 114 115 116 117 119 121 122 124 125 128 131 134 135 140 141 143 144 145 146 148 149 151 152 155 157 159 161 162 163 164 165 169 170 171 172 174 178 179 182 184 186 191 192 194 195 200 203 204 207 208 210 212 213 215 218 219 220 222 223 b 224 1 1 1 2 3 4 7 8 9 10 12 13 15 18 19 22 23 24 25 26 27 28 29 32 35 38 42 46 47 48 49 50 61 62 63 64 65 66 70 71 72 74 76 77 80 81 82 85 86 87 90 92 93 95 96 100 102 103 104 105 108 110 111 113 115 116 118 119 120 121 123 125 126 131 134 137 138 141 143 145 146 149 153 154 155 156 157 159 160 161 162 165 166 167 168 173 175 176 178 180 184 187 189 190 193 194 195 200 201 205 206 208 209 211 213 217 218 219 220 221 222 # 16391 assign c a 224 1 1 e b 224 1 1 e # 16392 assign c a 224 1 1 e b 224 0 0 e # 16393 assign c a 224 1 1 e b 224 1 1 e # 16394 assign c a 224 1 1 e b 224 0 0 f # 16395 assign c a 224 1 1 e b 224 1 1 e # 16396 assign c a 224 1 1 e b 224 0 0 1 2 3 9 11 14 19 21 22 23 24 25 26 27 28 29 30 33 35 38 39 43 44 48 49 52 55 59 60 67 68 70 72 74 75 76 79 80 83 84 85 87 88 89 90 91 95 96 97 98 99 100 101 102 103 104 105 107 109 113 114 115 118 121 123 125 126 127 128 129 130 131 132 133 135 136 137 139 140 141 143 144 146 148 149 150 152 159 161 162 163 164 166 171 173 174 175 176 177 179 180 181 182 183 191 194 198 199 200 202 203 204 205 206 207 208 210 211 213 214 216 217 218 223 # 16397 assign c a 224 1 1 f b 224 1 1 f # 16398 assign c a 224 1 1 f b 224 0 0 e # 16399 assign c a 224 1 1 f b 224 1 1 f # 16400 assign c a 224 1 1 f b 224 0 0 f # 16401 assign c a 224 1 1 f b 224 1 1 f # 16402 assign c a 224 1 1 f b 224 0 0 0 1 5 6 9 17 18 19 20 21 23 24 28 34 35 37 39 42 43 44 50 51 52 54 55 57 58 62 63 64 66 70 71 72 73 74 77 78 81 84 86 89 90 91 94 95 96 97 100 102 103 105 108 109 110 111 112 115 116 119 121 122 129 130 132 133 134 138 141 143 146 147 148 149 150 151 152 153 157 158 160 161 162 163 165 166 167 168 169 175 176 177 178 179 180 181 182 183 187 191 193 194 195 196 197 198 199 201 202 203 206 213 215 217 221 # 16403 assign c a 224 1 1 0 4 5 8 14 15 16 18 19 22 24 26 28 30 31 32 33 35 36 39 40 41 44 46 47 48 49 50 51 56 59 60 63 65 69 71 73 79 81 82 86 88 90 91 94 95 98 100 104 105 106 108 114 115 116 118 119 120 121 122 126 127 128 129 131 133 141 142 143 144 147 148 151 154 155 156 157 158 160 161 164 168 169 170 172 174 175 176 179 180 181 182 185 187 188 191 193 194 195 199 201 206 208 211 215 216 217 218 219 220 b 224 1 1 0 4 5 8 14 15 16 18 19 22 24 26 28 30 31 32 33 35 36 39 40 41 44 46 47 48 49 50 51 56 59 60 63 65 69 71 73 79 81 82 86 88 90 91 94 95 98 100 104 105 106 108 114 115 116 118 119 120 121 122 126 127 128 129 131 133 141 142 143 144 147 148 151 154 155 156 157 158 160 161 164 168 169 170 172 174 175 176 179 180 181 182 185 187 188 191 193 194 195 199 201 206 208 211 215 216 217 218 219 220 # 16404 assign c a 224 1 1 0 4 5 8 14 15 16 18 19 22 24 26 28 30 31 32 33 35 36 39 40 41 44 46 47 48 49 50 51 56 59 60 63 65 69 71 73 79 81 82 86 88 90 91 94 95 98 100 104 105 106 108 114 115 116 118 119 120 121 122 126 127 128 129 131 133 141 142 143 144 147 148 151 154 155 156 157 158 160 161 164 168 169 170 172 174 175 176 179 180 181 182 185 187 188 191 193 194 195 199 201 206 208 211 215 216 217 218 219 220 b 224 0 0 e # 16405 assign c a 224 1 1 0 4 10 11 12 13 17 19 26 32 33 34 35 37 39 42 44 46 49 50 54 55 56 57 58 62 69 71 72 73 75 77 80 82 84 85 90 91 92 94 95 96 100 101 103 104 105 106 107 108 111 118 119 120 124 127 128 129 131 132 133 134 136 137 140 141 146 147 148 151 152 153 155 157 158 160 162 165 166 170 173 174 175 177 178 187 190 191 192 193 196 200 202 205 207 211 214 215 216 b 224 1 1 0 4 10 11 12 13 17 19 26 32 33 34 35 37 39 42 44 46 49 50 54 55 56 57 58 62 69 71 72 73 75 77 80 82 84 85 90 91 92 94 95 96 100 101 103 104 105 106 107 108 111 118 119 120 124 127 128 129 131 132 133 134 136 137 140 141 146 147 148 151 152 153 155 157 158 160 162 165 166 170 173 174 175 177 178 187 190 191 192 193 196 200 202 205 207 211 214 215 216 # 16406 assign c a 224 1 1 0 4 10 11 12 13 17 19 26 32 33 34 35 37 39 42 44 46 49 50 54 55 56 57 58 62 69 71 72 73 75 77 80 82 84 85 90 91 92 94 95 96 100 101 103 104 105 106 107 108 111 118 119 120 124 127 128 129 131 132 133 134 136 137 140 141 146 147 148 151 152 153 155 157 158 160 162 165 166 170 173 174 175 177 178 187 190 191 192 193 196 200 202 205 207 211 214 215 216 b 224 0 0 f # 16407 assign c a 224 1 1 1 5 10 12 19 20 22 23 27 28 33 36 37 38 39 44 45 46 49 53 55 58 59 60 61 64 65 66 68 71 72 73 75 76 77 78 79 80 86 88 89 91 92 93 97 98 114 115 116 117 119 121 122 126 127 129 131 135 136 138 140 142 144 145 146 147 150 151 152 153 156 157 160 161 162 163 166 168 169 170 172 173 174 175 177 179 180 182 183 184 187 189 191 192 194 195 197 201 202 204 209 212 215 217 218 219 220 222 b 224 1 1 1 5 10 12 19 20 22 23 27 28 33 36 37 38 39 44 45 46 49 53 55 58 59 60 61 64 65 66 68 71 72 73 75 76 77 78 79 80 86 88 89 91 92 93 97 98 114 115 116 117 119 121 122 126 127 129 131 135 136 138 140 142 144 145 146 147 150 151 152 153 156 157 160 161 162 163 166 168 169 170 172 173 174 175 177 179 180 182 183 184 187 189 191 192 194 195 197 201 202 204 209 212 215 217 218 219 220 222 # 16408 assign c a 224 1 1 1 5 10 12 19 20 22 23 27 28 33 36 37 38 39 44 45 46 49 53 55 58 59 60 61 64 65 66 68 71 72 73 75 76 77 78 79 80 86 88 89 91 92 93 97 98 114 115 116 117 119 121 122 126 127 129 131 135 136 138 140 142 144 145 146 147 150 151 152 153 156 157 160 161 162 163 166 168 169 170 172 173 174 175 177 179 180 182 183 184 187 189 191 192 194 195 197 201 202 204 209 212 215 217 218 219 220 222 b 224 0 0 1 3 5 7 8 9 13 14 15 17 18 23 24 27 28 32 33 41 42 43 44 46 49 50 51 52 55 56 57 58 61 62 64 65 66 71 74 75 76 77 81 82 87 91 94 95 97 99 100 101 102 104 105 107 110 111 113 115 117 118 119 122 125 127 129 134 136 137 143 145 146 147 148 150 152 154 158 159 160 164 165 166 167 168 173 175 176 179 180 182 184 185 186 187 188 189 190 191 193 195 196 198 199 200 201 204 205 206 211 212 216 219 220 222 # 16409 assign c a 224 1 1 e b 224 1 1 e # 16410 assign c a 224 1 1 e b 224 0 1 e # 16411 assign c a 224 1 1 e b 224 1 1 e # 16412 assign c a 224 1 1 e b 224 0 1 f # 16413 assign c a 224 1 1 e b 224 1 1 e # 16414 assign c a 224 1 1 e b 224 0 1 4 5 7 8 9 10 11 12 13 15 18 20 22 23 24 26 27 29 30 31 34 38 40 41 42 43 44 46 48 49 50 55 56 57 58 60 61 62 63 64 65 74 76 77 78 82 83 84 86 87 90 91 93 94 96 101 103 106 109 110 111 113 116 118 120 121 123 124 127 129 131 132 133 134 137 143 144 145 146 147 148 149 151 152 154 155 156 157 158 160 164 165 166 168 170 173 174 176 177 179 180 181 183 186 187 189 191 203 207 209 210 212 215 218 219 222 223 # 16415 assign c a 224 1 1 f b 224 1 1 f # 16416 assign c a 224 1 1 f b 224 0 1 e # 16417 assign c a 224 1 1 f b 224 1 1 f # 16418 assign c a 224 1 1 f b 224 0 1 f # 16419 assign c a 224 1 1 f b 224 1 1 f # 16420 assign c a 224 1 1 f b 224 0 1 0 2 7 8 9 10 11 14 15 17 20 21 27 29 30 33 35 37 38 39 40 41 42 45 47 48 49 50 51 52 59 63 64 65 68 71 72 77 78 79 80 81 82 83 85 87 89 90 91 92 93 94 95 96 104 106 107 109 110 111 112 113 114 115 116 117 118 120 123 125 126 129 130 131 133 137 139 140 142 144 147 150 152 154 157 160 167 169 172 174 175 176 178 181 184 189 190 191 193 197 199 201 204 205 207 210 211 212 214 215 216 221 223 # 16421 assign c a 224 1 1 0 7 9 12 13 14 15 16 17 18 19 21 22 26 27 29 33 34 35 40 41 42 43 45 46 48 54 56 59 61 63 65 66 67 72 73 74 76 77 78 82 84 86 87 88 90 92 93 96 106 109 110 114 116 117 119 121 124 125 126 127 129 131 133 135 141 142 143 145 148 153 156 161 162 163 166 167 169 171 172 177 178 183 185 189 190 193 195 196 197 198 200 201 203 205 210 211 212 217 218 221 222 223 b 224 1 1 0 7 9 12 13 14 15 16 17 18 19 21 22 26 27 29 33 34 35 40 41 42 43 45 46 48 54 56 59 61 63 65 66 67 72 73 74 76 77 78 82 84 86 87 88 90 92 93 96 106 109 110 114 116 117 119 121 124 125 126 127 129 131 133 135 141 142 143 145 148 153 156 161 162 163 166 167 169 171 172 177 178 183 185 189 190 193 195 196 197 198 200 201 203 205 210 211 212 217 218 221 222 223 # 16422 assign c a 224 1 1 0 7 9 12 13 14 15 16 17 18 19 21 22 26 27 29 33 34 35 40 41 42 43 45 46 48 54 56 59 61 63 65 66 67 72 73 74 76 77 78 82 84 86 87 88 90 92 93 96 106 109 110 114 116 117 119 121 124 125 126 127 129 131 133 135 141 142 143 145 148 153 156 161 162 163 166 167 169 171 172 177 178 183 185 189 190 193 195 196 197 198 200 201 203 205 210 211 212 217 218 221 222 223 b 224 0 1 e # 16423 assign c a 224 1 1 2 5 6 8 11 12 13 21 22 23 25 27 30 31 33 35 36 38 40 43 44 45 51 55 56 57 58 60 61 64 65 70 74 78 79 80 83 85 86 88 90 91 95 99 100 104 106 112 113 116 117 118 121 123 126 127 128 130 131 132 133 134 135 137 139 142 143 147 149 151 152 153 155 158 162 165 166 167 168 171 172 174 175 176 178 179 182 183 186 189 190 191 193 195 196 201 208 211 212 213 214 215 217 219 220 222 223 b 224 1 1 2 5 6 8 11 12 13 21 22 23 25 27 30 31 33 35 36 38 40 43 44 45 51 55 56 57 58 60 61 64 65 70 74 78 79 80 83 85 86 88 90 91 95 99 100 104 106 112 113 116 117 118 121 123 126 127 128 130 131 132 133 134 135 137 139 142 143 147 149 151 152 153 155 158 162 165 166 167 168 171 172 174 175 176 178 179 182 183 186 189 190 191 193 195 196 201 208 211 212 213 214 215 217 219 220 222 223 # 16424 assign c a 224 1 1 2 5 6 8 11 12 13 21 22 23 25 27 30 31 33 35 36 38 40 43 44 45 51 55 56 57 58 60 61 64 65 70 74 78 79 80 83 85 86 88 90 91 95 99 100 104 106 112 113 116 117 118 121 123 126 127 128 130 131 132 133 134 135 137 139 142 143 147 149 151 152 153 155 158 162 165 166 167 168 171 172 174 175 176 178 179 182 183 186 189 190 191 193 195 196 201 208 211 212 213 214 215 217 219 220 222 223 b 224 0 1 f # 16425 assign c a 224 1 1 0 1 2 3 7 9 10 11 14 15 18 21 24 25 27 28 29 30 31 32 34 36 37 38 39 40 41 42 43 45 46 47 48 49 50 52 54 55 56 57 58 59 60 62 63 64 65 67 68 70 92 95 99 100 103 104 105 107 109 111 112 113 116 117 118 123 124 125 126 131 133 134 136 145 146 148 149 151 153 154 156 157 159 160 161 162 165 166 169 171 173 174 175 177 178 183 186 188 191 195 198 199 203 207 210 211 212 218 220 221 b 224 1 1 0 1 2 3 7 9 10 11 14 15 18 21 24 25 27 28 29 30 31 32 34 36 37 38 39 40 41 42 43 45 46 47 48 49 50 52 54 55 56 57 58 59 60 62 63 64 65 67 68 70 92 95 99 100 103 104 105 107 109 111 112 113 116 117 118 123 124 125 126 131 133 134 136 145 146 148 149 151 153 154 156 157 159 160 161 162 165 166 169 171 173 174 175 177 178 183 186 188 191 195 198 199 203 207 210 211 212 218 220 221 # 16426 assign c a 224 1 1 0 1 2 3 7 9 10 11 14 15 18 21 24 25 27 28 29 30 31 32 34 36 37 38 39 40 41 42 43 45 46 47 48 49 50 52 54 55 56 57 58 59 60 62 63 64 65 67 68 70 92 95 99 100 103 104 105 107 109 111 112 113 116 117 118 123 124 125 126 131 133 134 136 145 146 148 149 151 153 154 156 157 159 160 161 162 165 166 169 171 173 174 175 177 178 183 186 188 191 195 198 199 203 207 210 211 212 218 220 221 b 224 0 1 1 2 5 9 11 13 20 21 22 26 31 38 39 42 44 46 48 52 54 56 60 61 62 63 67 68 70 71 72 73 75 76 78 79 80 83 84 85 86 90 93 95 96 97 98 99 101 102 103 104 106 107 108 109 113 115 116 120 124 125 127 130 131 134 135 136 138 142 144 147 149 150 157 159 160 161 168 169 170 171 173 176 177 178 180 181 182 187 188 189 191 192 193 199 202 203 204 206 207 209 212 214 220 221 223 # 16427 assign c a 224 1 1 e b 224 1 1 e # 16428 assign c a 224 1 1 e b 224 1 0 e # 16429 assign c a 224 1 1 e b 224 1 1 e # 16430 assign c a 224 1 1 e b 224 1 0 f # 16431 assign c a 224 1 1 e b 224 1 1 e # 16432 assign c a 224 1 1 e b 224 1 0 0 1 2 3 6 7 8 9 11 14 15 22 23 28 29 31 32 34 35 36 37 38 40 44 45 49 50 51 52 53 54 56 58 59 62 63 66 69 70 71 72 73 75 76 78 81 82 85 86 88 89 92 96 98 99 100 102 103 106 108 109 110 111 113 115 117 120 121 122 123 125 127 129 130 133 135 137 139 140 142 144 149 150 151 152 153 154 155 156 157 158 159 160 161 164 169 177 178 179 181 182 194 196 201 202 203 204 206 208 209 213 214 215 217 219 # 16433 assign c a 224 1 1 f b 224 1 1 f # 16434 assign c a 224 1 1 f b 224 1 0 e # 16435 assign c a 224 1 1 f b 224 1 1 f # 16436 assign c a 224 1 1 f b 224 1 0 f # 16437 assign c a 224 1 1 f b 224 1 1 f # 16438 assign c a 224 1 1 f b 224 1 0 0 2 3 4 8 11 16 17 18 20 21 24 25 27 29 37 38 40 41 45 46 48 49 50 52 54 56 57 60 61 63 65 67 69 72 73 74 76 77 80 82 83 85 88 89 90 92 95 96 97 98 100 101 102 103 104 105 106 108 110 111 112 113 114 116 117 118 120 122 124 127 131 134 135 137 143 145 148 149 150 151 153 157 158 160 167 168 169 170 175 178 181 182 183 187 188 191 193 195 196 198 199 201 204 208 212 216 217 219 220 222 # 16439 assign c a 224 1 1 1 7 8 11 12 15 16 17 19 21 23 24 26 27 28 33 35 36 37 38 39 41 42 48 49 50 52 56 57 59 62 63 66 69 72 74 77 80 82 84 85 86 88 92 95 96 99 103 104 109 110 111 115 120 121 122 124 127 128 129 130 135 139 141 142 147 148 149 152 154 155 156 159 167 168 169 170 172 174 176 181 182 183 185 186 191 195 196 197 198 199 201 205 207 209 215 218 219 222 223 b 224 1 1 1 7 8 11 12 15 16 17 19 21 23 24 26 27 28 33 35 36 37 38 39 41 42 48 49 50 52 56 57 59 62 63 66 69 72 74 77 80 82 84 85 86 88 92 95 96 99 103 104 109 110 111 115 120 121 122 124 127 128 129 130 135 139 141 142 147 148 149 152 154 155 156 159 167 168 169 170 172 174 176 181 182 183 185 186 191 195 196 197 198 199 201 205 207 209 215 218 219 222 223 # 16440 assign c a 224 1 1 1 7 8 11 12 15 16 17 19 21 23 24 26 27 28 33 35 36 37 38 39 41 42 48 49 50 52 56 57 59 62 63 66 69 72 74 77 80 82 84 85 86 88 92 95 96 99 103 104 109 110 111 115 120 121 122 124 127 128 129 130 135 139 141 142 147 148 149 152 154 155 156 159 167 168 169 170 172 174 176 181 182 183 185 186 191 195 196 197 198 199 201 205 207 209 215 218 219 222 223 b 224 1 0 e # 16441 assign c a 224 1 1 0 1 2 3 4 5 6 8 9 11 12 13 14 16 18 20 22 25 27 30 31 33 34 35 36 39 41 42 44 45 46 50 52 53 54 56 59 62 63 65 66 69 70 71 72 73 77 78 79 81 82 85 88 89 92 96 97 100 102 103 107 111 112 114 118 121 122 125 128 129 131 134 135 136 137 139 141 142 145 146 147 150 153 154 155 156 158 159 162 163 164 167 169 170 171 172 174 177 182 183 184 185 187 188 192 194 195 196 198 202 204 205 206 208 210 211 213 214 220 221 222 223 b 224 1 1 0 1 2 3 4 5 6 8 9 11 12 13 14 16 18 20 22 25 27 30 31 33 34 35 36 39 41 42 44 45 46 50 52 53 54 56 59 62 63 65 66 69 70 71 72 73 77 78 79 81 82 85 88 89 92 96 97 100 102 103 107 111 112 114 118 121 122 125 128 129 131 134 135 136 137 139 141 142 145 146 147 150 153 154 155 156 158 159 162 163 164 167 169 170 171 172 174 177 182 183 184 185 187 188 192 194 195 196 198 202 204 205 206 208 210 211 213 214 220 221 222 223 # 16442 assign c a 224 1 1 0 1 2 3 4 5 6 8 9 11 12 13 14 16 18 20 22 25 27 30 31 33 34 35 36 39 41 42 44 45 46 50 52 53 54 56 59 62 63 65 66 69 70 71 72 73 77 78 79 81 82 85 88 89 92 96 97 100 102 103 107 111 112 114 118 121 122 125 128 129 131 134 135 136 137 139 141 142 145 146 147 150 153 154 155 156 158 159 162 163 164 167 169 170 171 172 174 177 182 183 184 185 187 188 192 194 195 196 198 202 204 205 206 208 210 211 213 214 220 221 222 223 b 224 1 0 f # 16443 assign c a 224 1 1 0 1 2 3 6 7 8 9 11 12 15 17 18 19 20 24 25 26 33 44 45 46 48 49 53 54 55 59 60 61 64 65 66 68 69 70 76 79 81 85 87 89 90 92 94 98 103 104 105 107 109 111 113 115 116 117 118 120 121 122 126 127 128 129 130 135 137 138 139 142 143 144 145 146 147 148 149 150 152 153 154 157 160 162 163 164 166 168 169 172 173 175 176 178 179 181 186 187 190 191 193 194 196 197 199 200 201 203 204 205 206 207 211 213 215 216 220 b 224 1 1 0 1 2 3 6 7 8 9 11 12 15 17 18 19 20 24 25 26 33 44 45 46 48 49 53 54 55 59 60 61 64 65 66 68 69 70 76 79 81 85 87 89 90 92 94 98 103 104 105 107 109 111 113 115 116 117 118 120 121 122 126 127 128 129 130 135 137 138 139 142 143 144 145 146 147 148 149 150 152 153 154 157 160 162 163 164 166 168 169 172 173 175 176 178 179 181 186 187 190 191 193 194 196 197 199 200 201 203 204 205 206 207 211 213 215 216 220 # 16444 assign c a 224 1 1 0 1 2 3 6 7 8 9 11 12 15 17 18 19 20 24 25 26 33 44 45 46 48 49 53 54 55 59 60 61 64 65 66 68 69 70 76 79 81 85 87 89 90 92 94 98 103 104 105 107 109 111 113 115 116 117 118 120 121 122 126 127 128 129 130 135 137 138 139 142 143 144 145 146 147 148 149 150 152 153 154 157 160 162 163 164 166 168 169 172 173 175 176 178 179 181 186 187 190 191 193 194 196 197 199 200 201 203 204 205 206 207 211 213 215 216 220 b 224 1 0 5 7 8 9 10 12 16 17 21 22 26 27 28 29 33 36 37 42 44 47 48 49 50 53 54 55 57 58 60 61 62 63 64 68 69 70 73 74 75 78 80 81 82 84 85 89 90 92 95 96 97 99 100 103 105 106 109 110 114 117 119 120 122 123 124 126 128 129 131 134 137 138 139 141 142 143 145 148 149 151 152 154 155 163 164 165 168 172 176 178 179 181 186 187 188 192 194 195 204 205 206 207 213 214 215 217 219 220 221 223 # 16445 assign c a 224 1 1 e b 224 1 1 e # 16446 assign c a 224 1 1 e b 224 1 1 e # 16447 assign c a 224 1 1 e b 224 1 1 e # 16448 assign c a 224 1 1 e b 224 1 1 f # 16449 assign c a 224 1 1 e b 224 1 1 e # 16450 assign c a 224 1 1 e b 224 1 1 3 5 6 7 11 14 16 18 21 22 29 32 33 39 40 41 42 43 47 48 51 55 56 57 59 60 63 65 67 68 69 71 72 74 75 76 78 80 83 85 86 88 89 91 93 95 97 101 105 107 111 113 114 115 116 117 119 120 122 126 127 128 134 135 137 138 139 142 143 145 146 149 153 155 160 161 162 167 169 171 176 178 181 182 183 184 188 189 191 192 195 196 198 202 203 208 209 210 211 212 213 214 215 216 219 221 223 # 16451 assign c a 224 1 1 f b 224 1 1 f # 16452 assign c a 224 1 1 f b 224 1 1 e # 16453 assign c a 224 1 1 f b 224 1 1 f # 16454 assign c a 224 1 1 f b 224 1 1 f # 16455 assign c a 224 1 1 f b 224 1 1 f # 16456 assign c a 224 1 1 f b 224 1 1 0 1 2 3 5 6 7 8 9 13 14 16 17 19 20 21 22 23 25 28 29 31 32 35 38 42 43 44 45 47 48 55 57 59 60 61 62 68 70 79 80 81 84 85 93 94 98 99 101 103 108 109 111 113 116 117 118 121 124 126 129 131 132 134 135 136 139 141 142 143 144 147 149 150 152 154 155 156 157 160 163 164 166 167 168 170 171 173 174 177 178 179 180 181 183 186 192 193 194 195 196 197 198 199 200 201 202 204 210 215 219 220 221 222 # 16457 assign c a 224 1 1 1 4 5 7 8 9 10 14 15 16 17 20 21 25 30 31 33 35 36 37 38 39 40 41 45 48 49 50 51 52 56 60 63 65 66 68 69 70 74 75 77 78 79 80 81 82 84 85 86 87 93 95 96 98 99 100 101 105 108 111 112 115 117 118 119 122 123 134 135 141 144 150 151 152 153 157 158 159 163 164 166 169 170 171 172 173 175 177 178 179 181 182 184 186 189 190 191 194 195 199 201 202 204 206 209 211 212 215 219 223 b 224 1 1 1 4 5 7 8 9 10 14 15 16 17 20 21 25 30 31 33 35 36 37 38 39 40 41 45 48 49 50 51 52 56 60 63 65 66 68 69 70 74 75 77 78 79 80 81 82 84 85 86 87 93 95 96 98 99 100 101 105 108 111 112 115 117 118 119 122 123 134 135 141 144 150 151 152 153 157 158 159 163 164 166 169 170 171 172 173 175 177 178 179 181 182 184 186 189 190 191 194 195 199 201 202 204 206 209 211 212 215 219 223 # 16458 assign c a 224 1 1 1 4 5 7 8 9 10 14 15 16 17 20 21 25 30 31 33 35 36 37 38 39 40 41 45 48 49 50 51 52 56 60 63 65 66 68 69 70 74 75 77 78 79 80 81 82 84 85 86 87 93 95 96 98 99 100 101 105 108 111 112 115 117 118 119 122 123 134 135 141 144 150 151 152 153 157 158 159 163 164 166 169 170 171 172 173 175 177 178 179 181 182 184 186 189 190 191 194 195 199 201 202 204 206 209 211 212 215 219 223 b 224 1 1 e # 16459 assign c a 224 1 1 2 3 4 5 6 8 9 11 15 17 18 23 24 25 28 29 33 35 36 39 41 42 43 46 47 49 51 53 57 58 60 62 68 76 82 83 87 92 94 95 96 97 99 103 104 105 110 111 112 113 114 118 119 120 125 128 129 130 135 136 140 142 143 144 145 148 150 151 155 157 162 163 165 166 170 173 177 178 180 181 184 189 191 192 198 199 201 203 205 207 212 213 214 215 221 b 224 1 1 2 3 4 5 6 8 9 11 15 17 18 23 24 25 28 29 33 35 36 39 41 42 43 46 47 49 51 53 57 58 60 62 68 76 82 83 87 92 94 95 96 97 99 103 104 105 110 111 112 113 114 118 119 120 125 128 129 130 135 136 140 142 143 144 145 148 150 151 155 157 162 163 165 166 170 173 177 178 180 181 184 189 191 192 198 199 201 203 205 207 212 213 214 215 221 # 16460 assign c a 224 1 1 2 3 4 5 6 8 9 11 15 17 18 23 24 25 28 29 33 35 36 39 41 42 43 46 47 49 51 53 57 58 60 62 68 76 82 83 87 92 94 95 96 97 99 103 104 105 110 111 112 113 114 118 119 120 125 128 129 130 135 136 140 142 143 144 145 148 150 151 155 157 162 163 165 166 170 173 177 178 180 181 184 189 191 192 198 199 201 203 205 207 212 213 214 215 221 b 224 1 1 f # 16461 assign c a 224 1 1 0 1 2 4 5 6 11 12 13 14 18 21 26 27 30 32 33 35 39 40 41 42 43 44 45 51 53 55 62 67 68 69 70 72 73 75 76 80 81 82 83 86 87 91 92 93 95 97 98 99 100 103 105 106 107 111 112 114 117 119 120 122 123 126 127 130 132 136 140 143 144 148 151 152 154 156 160 161 162 163 168 172 173 175 176 178 179 180 182 183 185 189 192 195 200 201 202 203 205 206 209 212 217 218 220 222 b 224 1 1 0 1 2 4 5 6 11 12 13 14 18 21 26 27 30 32 33 35 39 40 41 42 43 44 45 51 53 55 62 67 68 69 70 72 73 75 76 80 81 82 83 86 87 91 92 93 95 97 98 99 100 103 105 106 107 111 112 114 117 119 120 122 123 126 127 130 132 136 140 143 144 148 151 152 154 156 160 161 162 163 168 172 173 175 176 178 179 180 182 183 185 189 192 195 200 201 202 203 205 206 209 212 217 218 220 222 # 16462 assign c a 224 1 1 0 1 2 4 5 6 11 12 13 14 18 21 26 27 30 32 33 35 39 40 41 42 43 44 45 51 53 55 62 67 68 69 70 72 73 75 76 80 81 82 83 86 87 91 92 93 95 97 98 99 100 103 105 106 107 111 112 114 117 119 120 122 123 126 127 130 132 136 140 143 144 148 151 152 154 156 160 161 162 163 168 172 173 175 176 178 179 180 182 183 185 189 192 195 200 201 202 203 205 206 209 212 217 218 220 222 b 224 1 1 1 3 5 9 11 12 16 17 18 19 23 29 30 31 32 34 36 38 44 45 46 47 48 49 50 55 58 59 61 62 64 65 66 67 69 73 74 76 78 79 81 84 85 91 92 95 98 99 103 105 106 109 111 112 113 115 116 119 120 121 122 123 125 126 127 129 133 135 136 141 142 143 144 146 148 149 152 155 157 158 160 162 163 164 166 167 169 170 171 172 173 174 178 179 184 185 187 188 189 196 198 201 202 203 204 205 211 212 213 214 215 218 222 # 16463 assign c a 247 0 0 e b 247 0 0 e # 16464 assign c a 247 0 0 e b 247 0 0 e # 16465 assign c a 247 0 0 e b 247 0 0 e # 16466 assign c a 247 0 0 e b 247 0 0 f # 16467 assign c a 247 0 0 e b 247 0 0 e # 16468 assign c a 247 0 0 e b 247 0 0 0 2 5 6 7 8 9 10 11 14 15 16 19 20 24 26 27 32 34 36 38 39 41 43 44 47 48 49 51 53 57 59 61 62 64 65 67 70 76 77 78 80 87 89 91 97 102 106 108 109 110 111 113 114 115 119 121 122 123 127 128 129 132 134 138 147 148 149 150 151 152 153 154 157 158 160 163 167 168 169 171 173 175 176 177 178 179 181 182 184 192 193 194 199 201 202 203 206 209 211 212 213 214 215 218 219 220 223 226 227 230 231 232 233 238 240 243 # 16469 assign c a 247 0 0 f b 247 0 0 f # 16470 assign c a 247 0 0 f b 247 0 0 e # 16471 assign c a 247 0 0 f b 247 0 0 f # 16472 assign c a 247 0 0 f b 247 0 0 f # 16473 assign c a 247 0 0 f b 247 0 0 f # 16474 assign c a 247 0 0 f b 247 0 0 0 1 3 4 5 6 12 13 14 16 17 18 20 26 27 28 29 32 33 36 38 42 45 46 47 49 52 54 56 57 59 60 61 64 66 67 68 69 73 75 76 78 80 81 82 83 85 94 95 96 97 98 99 100 101 102 104 106 107 108 109 110 111 112 113 114 117 118 119 121 123 125 126 128 134 136 137 144 145 148 153 155 156 157 162 163 164 165 169 170 171 172 175 177 180 181 182 184 185 186 188 190 192 193 196 197 198 200 201 203 206 210 215 220 222 226 229 232 233 234 237 238 240 242 244 # 16475 assign c a 247 0 0 1 2 3 6 7 8 10 11 12 13 16 21 22 23 24 26 29 31 32 34 37 45 46 48 49 52 55 56 61 63 64 70 71 72 73 75 76 79 81 85 88 90 96 98 100 103 105 106 108 109 110 112 115 116 117 119 121 126 127 128 131 132 134 138 141 144 145 147 148 150 151 155 156 158 159 160 161 162 163 167 168 169 170 172 174 175 177 178 181 183 184 185 186 187 188 191 195 196 197 198 199 200 201 205 207 208 209 210 212 215 216 219 220 221 222 227 228 229 230 231 232 233 235 236 238 239 241 244 245 246 b 247 0 0 1 2 3 6 7 8 10 11 12 13 16 21 22 23 24 26 29 31 32 34 37 45 46 48 49 52 55 56 61 63 64 70 71 72 73 75 76 79 81 85 88 90 96 98 100 103 105 106 108 109 110 112 115 116 117 119 121 126 127 128 131 132 134 138 141 144 145 147 148 150 151 155 156 158 159 160 161 162 163 167 168 169 170 172 174 175 177 178 181 183 184 185 186 187 188 191 195 196 197 198 199 200 201 205 207 208 209 210 212 215 216 219 220 221 222 227 228 229 230 231 232 233 235 236 238 239 241 244 245 246 # 16476 assign c a 247 0 0 1 2 3 6 7 8 10 11 12 13 16 21 22 23 24 26 29 31 32 34 37 45 46 48 49 52 55 56 61 63 64 70 71 72 73 75 76 79 81 85 88 90 96 98 100 103 105 106 108 109 110 112 115 116 117 119 121 126 127 128 131 132 134 138 141 144 145 147 148 150 151 155 156 158 159 160 161 162 163 167 168 169 170 172 174 175 177 178 181 183 184 185 186 187 188 191 195 196 197 198 199 200 201 205 207 208 209 210 212 215 216 219 220 221 222 227 228 229 230 231 232 233 235 236 238 239 241 244 245 246 b 247 0 0 e # 16477 assign c a 247 0 0 0 3 4 6 8 9 11 12 15 18 22 24 25 26 28 29 31 33 34 39 41 42 47 48 50 52 53 54 55 56 57 58 60 63 64 65 69 71 72 73 77 78 79 80 81 83 84 85 87 88 92 95 97 98 99 102 113 114 116 120 122 123 124 131 132 134 135 136 140 141 144 146 148 150 151 152 153 154 155 159 160 161 168 169 171 172 173 175 180 187 193 194 198 205 206 207 213 214 215 216 217 221 222 223 224 228 229 230 231 239 243 245 246 b 247 0 0 0 3 4 6 8 9 11 12 15 18 22 24 25 26 28 29 31 33 34 39 41 42 47 48 50 52 53 54 55 56 57 58 60 63 64 65 69 71 72 73 77 78 79 80 81 83 84 85 87 88 92 95 97 98 99 102 113 114 116 120 122 123 124 131 132 134 135 136 140 141 144 146 148 150 151 152 153 154 155 159 160 161 168 169 171 172 173 175 180 187 193 194 198 205 206 207 213 214 215 216 217 221 222 223 224 228 229 230 231 239 243 245 246 # 16478 assign c a 247 0 0 0 3 4 6 8 9 11 12 15 18 22 24 25 26 28 29 31 33 34 39 41 42 47 48 50 52 53 54 55 56 57 58 60 63 64 65 69 71 72 73 77 78 79 80 81 83 84 85 87 88 92 95 97 98 99 102 113 114 116 120 122 123 124 131 132 134 135 136 140 141 144 146 148 150 151 152 153 154 155 159 160 161 168 169 171 172 173 175 180 187 193 194 198 205 206 207 213 214 215 216 217 221 222 223 224 228 229 230 231 239 243 245 246 b 247 0 0 f # 16479 assign c a 247 0 0 1 3 9 11 12 14 15 16 18 20 23 24 25 26 27 29 32 33 36 37 38 40 42 44 45 48 50 51 58 62 66 68 69 71 72 75 80 81 82 88 90 92 93 94 97 100 101 102 103 107 108 109 110 112 113 114 115 120 122 123 125 126 127 128 130 131 133 135 137 138 139 140 141 144 149 150 153 154 155 156 157 158 159 161 163 164 165 166 167 168 169 170 171 176 177 180 184 187 189 191 192 193 194 196 197 199 200 202 204 205 207 208 209 210 214 216 217 218 220 223 229 237 238 239 240 241 b 247 0 0 1 3 9 11 12 14 15 16 18 20 23 24 25 26 27 29 32 33 36 37 38 40 42 44 45 48 50 51 58 62 66 68 69 71 72 75 80 81 82 88 90 92 93 94 97 100 101 102 103 107 108 109 110 112 113 114 115 120 122 123 125 126 127 128 130 131 133 135 137 138 139 140 141 144 149 150 153 154 155 156 157 158 159 161 163 164 165 166 167 168 169 170 171 176 177 180 184 187 189 191 192 193 194 196 197 199 200 202 204 205 207 208 209 210 214 216 217 218 220 223 229 237 238 239 240 241 # 16480 assign c a 247 0 0 1 3 9 11 12 14 15 16 18 20 23 24 25 26 27 29 32 33 36 37 38 40 42 44 45 48 50 51 58 62 66 68 69 71 72 75 80 81 82 88 90 92 93 94 97 100 101 102 103 107 108 109 110 112 113 114 115 120 122 123 125 126 127 128 130 131 133 135 137 138 139 140 141 144 149 150 153 154 155 156 157 158 159 161 163 164 165 166 167 168 169 170 171 176 177 180 184 187 189 191 192 193 194 196 197 199 200 202 204 205 207 208 209 210 214 216 217 218 220 223 229 237 238 239 240 241 b 247 0 0 3 5 7 9 11 13 15 17 20 23 28 29 30 32 37 39 40 42 47 52 53 55 57 62 64 66 69 74 75 76 77 78 81 84 85 87 89 91 93 98 102 103 104 106 107 110 111 119 122 126 127 131 132 133 139 140 142 144 147 148 149 150 151 155 156 160 161 162 164 166 168 174 180 181 185 186 188 191 195 196 199 203 204 205 213 215 220 221 228 230 232 235 238 240 242 # 16481 assign c a 247 0 0 e b 247 0 0 e # 16482 assign c a 247 0 0 e b 247 0 1 e # 16483 assign c a 247 0 0 e b 247 0 0 e # 16484 assign c a 247 0 0 e b 247 0 1 f # 16485 assign c a 247 0 0 e b 247 0 0 e # 16486 assign c a 247 0 0 e b 247 0 1 0 1 2 4 7 8 9 11 12 13 14 15 16 21 23 24 25 26 29 30 31 32 36 37 39 40 41 42 45 48 49 50 63 64 65 67 69 72 74 76 79 80 85 86 87 93 97 98 99 100 103 104 105 106 107 110 112 114 118 120 122 124 132 133 135 136 139 140 145 146 147 149 152 155 156 157 161 162 164 165 169 171 172 173 176 180 183 184 185 186 188 190 194 198 199 200 202 203 204 207 209 210 215 220 222 224 225 226 230 232 233 235 236 237 242 243 244 246 # 16487 assign c a 247 0 0 f b 247 0 0 f # 16488 assign c a 247 0 0 f b 247 0 1 e # 16489 assign c a 247 0 0 f b 247 0 0 f # 16490 assign c a 247 0 0 f b 247 0 1 f # 16491 assign c a 247 0 0 f b 247 0 0 f # 16492 assign c a 247 0 0 f b 247 0 1 1 3 4 6 9 13 18 22 23 24 26 27 31 33 34 37 38 40 41 42 43 44 48 51 52 54 55 59 60 61 63 64 67 68 69 71 72 74 75 76 78 79 82 84 86 88 90 91 94 96 97 99 100 101 103 106 109 110 111 113 115 120 122 124 125 128 129 131 133 134 135 136 138 141 144 145 147 148 149 151 152 154 155 156 159 163 168 170 171 176 177 179 180 182 183 184 185 187 189 193 197 198 199 202 203 204 206 207 210 212 214 221 222 224 226 227 228 229 230 233 234 235 237 238 239 243 244 # 16493 assign c a 247 0 0 1 2 3 4 6 9 12 20 23 25 26 28 30 31 32 33 34 35 41 42 45 46 47 49 51 54 55 57 59 60 62 63 64 65 66 70 71 75 77 79 80 81 82 86 98 100 104 106 113 114 117 118 119 120 122 124 126 129 130 133 138 139 140 141 144 146 148 149 151 159 165 166 167 170 178 180 185 187 189 190 191 196 197 201 203 205 207 212 213 216 217 220 222 226 229 230 231 232 234 238 240 242 244 246 b 247 0 0 1 2 3 4 6 9 12 20 23 25 26 28 30 31 32 33 34 35 41 42 45 46 47 49 51 54 55 57 59 60 62 63 64 65 66 70 71 75 77 79 80 81 82 86 98 100 104 106 113 114 117 118 119 120 122 124 126 129 130 133 138 139 140 141 144 146 148 149 151 159 165 166 167 170 178 180 185 187 189 190 191 196 197 201 203 205 207 212 213 216 217 220 222 226 229 230 231 232 234 238 240 242 244 246 # 16494 assign c a 247 0 0 1 2 3 4 6 9 12 20 23 25 26 28 30 31 32 33 34 35 41 42 45 46 47 49 51 54 55 57 59 60 62 63 64 65 66 70 71 75 77 79 80 81 82 86 98 100 104 106 113 114 117 118 119 120 122 124 126 129 130 133 138 139 140 141 144 146 148 149 151 159 165 166 167 170 178 180 185 187 189 190 191 196 197 201 203 205 207 212 213 216 217 220 222 226 229 230 231 232 234 238 240 242 244 246 b 247 0 1 e # 16495 assign c a 247 0 0 0 2 3 6 8 14 18 23 24 25 26 28 29 38 40 47 48 52 53 55 57 60 62 64 66 68 69 72 73 74 80 85 87 88 90 91 92 93 94 95 96 97 98 99 105 106 107 111 112 113 115 117 118 121 122 125 126 128 129 134 135 137 138 139 140 142 143 144 146 148 150 153 155 156 162 163 164 166 169 173 174 177 178 185 187 191 192 194 195 196 197 199 200 201 204 207 208 212 213 214 215 216 217 218 224 229 232 233 236 237 239 241 243 245 246 b 247 0 0 0 2 3 6 8 14 18 23 24 25 26 28 29 38 40 47 48 52 53 55 57 60 62 64 66 68 69 72 73 74 80 85 87 88 90 91 92 93 94 95 96 97 98 99 105 106 107 111 112 113 115 117 118 121 122 125 126 128 129 134 135 137 138 139 140 142 143 144 146 148 150 153 155 156 162 163 164 166 169 173 174 177 178 185 187 191 192 194 195 196 197 199 200 201 204 207 208 212 213 214 215 216 217 218 224 229 232 233 236 237 239 241 243 245 246 # 16496 assign c a 247 0 0 0 2 3 6 8 14 18 23 24 25 26 28 29 38 40 47 48 52 53 55 57 60 62 64 66 68 69 72 73 74 80 85 87 88 90 91 92 93 94 95 96 97 98 99 105 106 107 111 112 113 115 117 118 121 122 125 126 128 129 134 135 137 138 139 140 142 143 144 146 148 150 153 155 156 162 163 164 166 169 173 174 177 178 185 187 191 192 194 195 196 197 199 200 201 204 207 208 212 213 214 215 216 217 218 224 229 232 233 236 237 239 241 243 245 246 b 247 0 1 f # 16497 assign c a 247 0 0 1 2 6 7 9 11 17 18 19 20 21 23 25 31 35 36 37 38 39 40 42 44 45 46 47 48 49 50 51 52 53 54 55 56 63 64 74 81 83 84 86 87 91 92 93 94 98 99 103 104 105 107 111 114 116 117 120 121 123 124 125 127 130 131 132 133 134 136 137 141 143 145 147 148 149 151 152 155 157 158 159 160 163 169 170 171 174 175 178 179 181 182 186 187 188 189 190 191 194 195 197 199 200 206 207 209 210 211 212 214 216 217 219 220 221 222 223 226 227 229 233 235 239 243 244 b 247 0 0 1 2 6 7 9 11 17 18 19 20 21 23 25 31 35 36 37 38 39 40 42 44 45 46 47 48 49 50 51 52 53 54 55 56 63 64 74 81 83 84 86 87 91 92 93 94 98 99 103 104 105 107 111 114 116 117 120 121 123 124 125 127 130 131 132 133 134 136 137 141 143 145 147 148 149 151 152 155 157 158 159 160 163 169 170 171 174 175 178 179 181 182 186 187 188 189 190 191 194 195 197 199 200 206 207 209 210 211 212 214 216 217 219 220 221 222 223 226 227 229 233 235 239 243 244 # 16498 assign c a 247 0 0 1 2 6 7 9 11 17 18 19 20 21 23 25 31 35 36 37 38 39 40 42 44 45 46 47 48 49 50 51 52 53 54 55 56 63 64 74 81 83 84 86 87 91 92 93 94 98 99 103 104 105 107 111 114 116 117 120 121 123 124 125 127 130 131 132 133 134 136 137 141 143 145 147 148 149 151 152 155 157 158 159 160 163 169 170 171 174 175 178 179 181 182 186 187 188 189 190 191 194 195 197 199 200 206 207 209 210 211 212 214 216 217 219 220 221 222 223 226 227 229 233 235 239 243 244 b 247 0 1 6 8 10 12 13 14 17 18 19 23 25 29 30 31 35 36 38 40 41 42 43 44 45 46 48 49 52 53 57 58 59 60 61 62 64 66 67 69 72 74 75 77 80 83 85 87 90 92 93 95 96 98 101 102 105 108 109 110 116 120 121 122 123 124 126 127 128 133 134 135 136 140 141 142 146 148 149 150 152 155 156 157 161 162 163 164 166 168 169 170 171 172 173 174 177 179 180 183 184 185 188 189 190 192 193 197 198 199 200 201 202 203 204 205 209 212 213 214 215 224 225 226 228 229 231 232 233 234 235 236 237 238 240 243 244 # 16499 assign c a 247 0 0 e b 247 0 0 e # 16500 assign c a 247 0 0 e b 247 1 0 e # 16501 assign c a 247 0 0 e b 247 0 0 e # 16502 assign c a 247 0 0 e b 247 1 0 f # 16503 assign c a 247 0 0 e b 247 0 0 e # 16504 assign c a 247 0 0 e b 247 1 0 1 2 3 5 7 8 9 12 16 19 22 24 25 26 27 28 33 35 36 38 39 45 46 49 53 54 56 57 58 59 63 65 66 69 71 72 74 77 78 80 82 83 85 88 93 95 98 99 104 106 107 109 111 112 114 121 122 123 126 127 128 129 130 132 135 136 138 139 140 142 143 144 145 149 150 151 153 154 155 158 161 164 165 166 167 169 170 172 173 175 176 178 179 181 182 183 186 187 188 189 190 199 201 202 204 206 208 209 211 212 214 216 218 219 221 222 223 227 228 230 233 236 238 239 242 # 16505 assign c a 247 0 0 f b 247 0 0 f # 16506 assign c a 247 0 0 f b 247 1 0 e # 16507 assign c a 247 0 0 f b 247 0 0 f # 16508 assign c a 247 0 0 f b 247 1 0 f # 16509 assign c a 247 0 0 f b 247 0 0 f # 16510 assign c a 247 0 0 f b 247 1 0 1 3 6 7 8 11 13 14 15 21 26 28 30 35 36 38 39 40 41 42 44 45 46 47 51 52 53 54 57 58 61 63 65 66 68 71 74 76 77 81 82 85 87 88 90 92 100 101 102 104 105 107 108 109 115 117 118 121 122 129 130 132 133 135 136 137 138 139 140 141 142 149 150 151 152 154 155 156 164 165 166 167 168 169 171 172 174 175 176 183 184 186 188 190 192 195 201 202 203 205 206 210 212 218 220 221 223 224 225 229 231 232 234 237 238 239 241 243 245 # 16511 assign c a 247 0 0 0 3 7 12 14 15 19 20 22 23 25 26 29 30 31 32 34 36 39 40 41 43 46 47 48 50 51 53 54 55 56 57 59 62 64 65 66 67 69 70 72 75 76 78 79 82 83 86 87 90 91 92 93 95 96 97 98 100 102 103 104 106 108 112 113 119 120 123 125 126 128 130 131 132 133 135 139 140 143 146 147 148 150 155 156 157 158 159 161 165 167 170 171 172 173 174 177 180 182 185 188 192 193 194 196 199 200 201 202 203 204 205 209 210 212 214 218 222 224 225 226 227 230 231 233 234 237 238 239 240 243 244 b 247 0 0 0 3 7 12 14 15 19 20 22 23 25 26 29 30 31 32 34 36 39 40 41 43 46 47 48 50 51 53 54 55 56 57 59 62 64 65 66 67 69 70 72 75 76 78 79 82 83 86 87 90 91 92 93 95 96 97 98 100 102 103 104 106 108 112 113 119 120 123 125 126 128 130 131 132 133 135 139 140 143 146 147 148 150 155 156 157 158 159 161 165 167 170 171 172 173 174 177 180 182 185 188 192 193 194 196 199 200 201 202 203 204 205 209 210 212 214 218 222 224 225 226 227 230 231 233 234 237 238 239 240 243 244 # 16512 assign c a 247 0 0 0 3 7 12 14 15 19 20 22 23 25 26 29 30 31 32 34 36 39 40 41 43 46 47 48 50 51 53 54 55 56 57 59 62 64 65 66 67 69 70 72 75 76 78 79 82 83 86 87 90 91 92 93 95 96 97 98 100 102 103 104 106 108 112 113 119 120 123 125 126 128 130 131 132 133 135 139 140 143 146 147 148 150 155 156 157 158 159 161 165 167 170 171 172 173 174 177 180 182 185 188 192 193 194 196 199 200 201 202 203 204 205 209 210 212 214 218 222 224 225 226 227 230 231 233 234 237 238 239 240 243 244 b 247 1 0 e # 16513 assign c a 247 0 0 1 3 6 7 9 10 13 14 17 18 21 24 25 26 28 30 32 33 38 39 41 44 46 47 48 49 52 53 58 61 64 65 66 68 69 74 76 79 81 82 83 87 88 93 94 95 102 103 104 106 107 108 112 116 117 119 121 122 125 127 129 136 138 139 142 144 146 147 148 150 153 154 155 158 159 160 168 170 172 173 174 175 177 178 181 187 189 190 193 194 195 198 200 201 203 204 206 208 209 213 214 215 217 218 219 220 221 224 225 226 229 231 232 233 234 235 241 243 244 246 b 247 0 0 1 3 6 7 9 10 13 14 17 18 21 24 25 26 28 30 32 33 38 39 41 44 46 47 48 49 52 53 58 61 64 65 66 68 69 74 76 79 81 82 83 87 88 93 94 95 102 103 104 106 107 108 112 116 117 119 121 122 125 127 129 136 138 139 142 144 146 147 148 150 153 154 155 158 159 160 168 170 172 173 174 175 177 178 181 187 189 190 193 194 195 198 200 201 203 204 206 208 209 213 214 215 217 218 219 220 221 224 225 226 229 231 232 233 234 235 241 243 244 246 # 16514 assign c a 247 0 0 1 3 6 7 9 10 13 14 17 18 21 24 25 26 28 30 32 33 38 39 41 44 46 47 48 49 52 53 58 61 64 65 66 68 69 74 76 79 81 82 83 87 88 93 94 95 102 103 104 106 107 108 112 116 117 119 121 122 125 127 129 136 138 139 142 144 146 147 148 150 153 154 155 158 159 160 168 170 172 173 174 175 177 178 181 187 189 190 193 194 195 198 200 201 203 204 206 208 209 213 214 215 217 218 219 220 221 224 225 226 229 231 232 233 234 235 241 243 244 246 b 247 1 0 f # 16515 assign c a 247 0 0 0 2 3 6 9 14 17 18 22 24 26 33 34 35 37 39 40 41 47 52 53 54 55 57 59 62 63 65 67 68 69 70 71 73 75 77 81 82 84 85 86 88 90 92 93 94 96 99 101 102 103 104 108 109 110 112 113 116 118 119 120 121 122 124 125 126 127 129 130 131 132 133 135 136 137 139 140 141 143 144 145 149 151 152 159 161 164 165 167 168 170 171 173 174 176 177 178 179 180 181 182 183 188 191 193 196 198 199 200 201 202 204 206 215 216 219 220 222 225 226 227 229 230 234 236 237 238 242 243 244 b 247 0 0 0 2 3 6 9 14 17 18 22 24 26 33 34 35 37 39 40 41 47 52 53 54 55 57 59 62 63 65 67 68 69 70 71 73 75 77 81 82 84 85 86 88 90 92 93 94 96 99 101 102 103 104 108 109 110 112 113 116 118 119 120 121 122 124 125 126 127 129 130 131 132 133 135 136 137 139 140 141 143 144 145 149 151 152 159 161 164 165 167 168 170 171 173 174 176 177 178 179 180 181 182 183 188 191 193 196 198 199 200 201 202 204 206 215 216 219 220 222 225 226 227 229 230 234 236 237 238 242 243 244 # 16516 assign c a 247 0 0 0 2 3 6 9 14 17 18 22 24 26 33 34 35 37 39 40 41 47 52 53 54 55 57 59 62 63 65 67 68 69 70 71 73 75 77 81 82 84 85 86 88 90 92 93 94 96 99 101 102 103 104 108 109 110 112 113 116 118 119 120 121 122 124 125 126 127 129 130 131 132 133 135 136 137 139 140 141 143 144 145 149 151 152 159 161 164 165 167 168 170 171 173 174 176 177 178 179 180 181 182 183 188 191 193 196 198 199 200 201 202 204 206 215 216 219 220 222 225 226 227 229 230 234 236 237 238 242 243 244 b 247 1 0 0 1 2 4 10 12 13 17 20 21 27 31 35 37 39 40 43 44 45 46 50 53 57 59 61 62 67 68 69 70 71 72 74 75 76 77 80 81 82 84 86 88 93 94 100 101 103 105 106 108 110 111 114 116 117 118 119 120 121 122 124 125 126 128 129 131 132 133 134 136 137 144 146 148 151 156 157 158 159 160 162 163 164 165 167 168 169 172 174 175 176 179 180 182 184 185 186 187 188 189 190 191 192 193 194 195 196 198 199 200 201 202 203 205 206 209 210 213 214 216 217 218 219 221 222 225 228 230 231 233 234 235 236 237 238 239 240 241 244 245 # 16517 assign c a 247 0 0 e b 247 0 0 e # 16518 assign c a 247 0 0 e b 247 1 1 e # 16519 assign c a 247 0 0 e b 247 0 0 e # 16520 assign c a 247 0 0 e b 247 1 1 f # 16521 assign c a 247 0 0 e b 247 0 0 e # 16522 assign c a 247 0 0 e b 247 1 1 1 6 7 8 9 11 12 14 15 16 17 18 20 23 26 29 30 31 32 34 35 36 37 38 40 41 49 50 54 55 56 57 59 60 62 63 64 65 66 68 70 74 75 76 81 82 83 85 87 88 89 90 91 92 93 95 100 102 104 105 107 108 113 114 115 116 118 121 125 126 127 128 131 133 134 136 138 139 140 142 145 146 147 149 151 153 154 155 157 158 163 166 167 169 170 173 176 181 182 183 184 185 186 188 189 190 192 193 194 197 199 200 201 202 204 206 208 210 213 214 215 216 217 219 221 222 224 225 226 228 229 230 231 232 233 235 237 241 242 244 245 # 16523 assign c a 247 0 0 f b 247 0 0 f # 16524 assign c a 247 0 0 f b 247 1 1 e # 16525 assign c a 247 0 0 f b 247 0 0 f # 16526 assign c a 247 0 0 f b 247 1 1 f # 16527 assign c a 247 0 0 f b 247 0 0 f # 16528 assign c a 247 0 0 f b 247 1 1 2 4 5 8 11 14 17 19 23 24 26 28 30 32 34 35 37 39 41 42 44 45 46 48 52 56 58 59 60 63 64 65 66 68 72 74 75 80 82 84 86 87 89 93 94 96 97 99 100 101 102 103 104 105 106 111 112 115 119 121 124 126 128 131 132 134 135 136 137 141 143 144 145 146 153 154 155 156 157 159 160 161 162 163 164 165 166 167 168 172 175 177 181 182 184 185 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 206 207 214 218 219 221 222 226 229 230 232 233 238 240 242 245 # 16529 assign c a 247 0 0 0 3 4 8 9 11 13 14 16 17 18 19 21 22 23 24 26 27 28 29 33 37 39 40 41 42 43 44 45 48 54 55 56 57 58 62 63 66 67 68 70 71 73 74 75 76 79 81 82 83 85 86 88 89 90 93 94 95 96 97 99 102 103 104 106 107 108 114 115 117 118 121 123 129 131 134 136 138 140 142 143 144 145 146 149 150 151 154 155 156 161 165 166 167 169 176 177 178 180 184 189 190 191 192 193 195 196 197 198 200 202 203 204 205 207 208 209 211 213 214 216 218 220 223 226 229 230 233 235 236 238 239 241 243 244 b 247 0 0 0 3 4 8 9 11 13 14 16 17 18 19 21 22 23 24 26 27 28 29 33 37 39 40 41 42 43 44 45 48 54 55 56 57 58 62 63 66 67 68 70 71 73 74 75 76 79 81 82 83 85 86 88 89 90 93 94 95 96 97 99 102 103 104 106 107 108 114 115 117 118 121 123 129 131 134 136 138 140 142 143 144 145 146 149 150 151 154 155 156 161 165 166 167 169 176 177 178 180 184 189 190 191 192 193 195 196 197 198 200 202 203 204 205 207 208 209 211 213 214 216 218 220 223 226 229 230 233 235 236 238 239 241 243 244 # 16530 assign c a 247 0 0 0 3 4 8 9 11 13 14 16 17 18 19 21 22 23 24 26 27 28 29 33 37 39 40 41 42 43 44 45 48 54 55 56 57 58 62 63 66 67 68 70 71 73 74 75 76 79 81 82 83 85 86 88 89 90 93 94 95 96 97 99 102 103 104 106 107 108 114 115 117 118 121 123 129 131 134 136 138 140 142 143 144 145 146 149 150 151 154 155 156 161 165 166 167 169 176 177 178 180 184 189 190 191 192 193 195 196 197 198 200 202 203 204 205 207 208 209 211 213 214 216 218 220 223 226 229 230 233 235 236 238 239 241 243 244 b 247 1 1 e # 16531 assign c a 247 0 0 0 1 2 4 8 9 13 15 18 20 22 23 24 25 27 28 29 34 36 38 39 41 43 44 45 48 51 52 54 55 57 58 60 62 68 70 71 74 76 79 80 81 82 83 85 86 87 88 89 92 93 94 98 101 103 104 105 106 107 110 111 113 114 115 116 118 122 125 126 127 128 130 140 147 148 151 155 157 162 163 164 165 166 167 171 173 175 178 179 180 182 184 186 187 191 192 193 195 196 198 200 206 208 209 211 212 214 215 216 217 218 219 221 222 224 227 228 229 234 236 237 238 239 242 244 245 b 247 0 0 0 1 2 4 8 9 13 15 18 20 22 23 24 25 27 28 29 34 36 38 39 41 43 44 45 48 51 52 54 55 57 58 60 62 68 70 71 74 76 79 80 81 82 83 85 86 87 88 89 92 93 94 98 101 103 104 105 106 107 110 111 113 114 115 116 118 122 125 126 127 128 130 140 147 148 151 155 157 162 163 164 165 166 167 171 173 175 178 179 180 182 184 186 187 191 192 193 195 196 198 200 206 208 209 211 212 214 215 216 217 218 219 221 222 224 227 228 229 234 236 237 238 239 242 244 245 # 16532 assign c a 247 0 0 0 1 2 4 8 9 13 15 18 20 22 23 24 25 27 28 29 34 36 38 39 41 43 44 45 48 51 52 54 55 57 58 60 62 68 70 71 74 76 79 80 81 82 83 85 86 87 88 89 92 93 94 98 101 103 104 105 106 107 110 111 113 114 115 116 118 122 125 126 127 128 130 140 147 148 151 155 157 162 163 164 165 166 167 171 173 175 178 179 180 182 184 186 187 191 192 193 195 196 198 200 206 208 209 211 212 214 215 216 217 218 219 221 222 224 227 228 229 234 236 237 238 239 242 244 245 b 247 1 1 f # 16533 assign c a 247 0 0 0 1 2 3 5 7 8 9 10 11 13 15 17 18 19 20 22 23 24 30 31 32 33 34 36 38 39 40 41 42 44 45 48 50 52 53 55 56 57 60 61 63 64 65 73 74 76 79 86 93 95 96 99 100 101 103 104 105 107 109 111 113 114 117 118 122 124 125 127 129 130 132 133 136 141 142 145 146 147 148 149 152 153 154 155 156 158 162 163 165 169 170 171 173 175 176 178 179 180 181 182 183 184 185 186 187 188 189 195 197 199 201 203 204 205 206 208 209 211 212 214 215 216 217 218 219 220 223 226 227 229 231 232 233 234 235 236 237 239 242 244 245 246 b 247 0 0 0 1 2 3 5 7 8 9 10 11 13 15 17 18 19 20 22 23 24 30 31 32 33 34 36 38 39 40 41 42 44 45 48 50 52 53 55 56 57 60 61 63 64 65 73 74 76 79 86 93 95 96 99 100 101 103 104 105 107 109 111 113 114 117 118 122 124 125 127 129 130 132 133 136 141 142 145 146 147 148 149 152 153 154 155 156 158 162 163 165 169 170 171 173 175 176 178 179 180 181 182 183 184 185 186 187 188 189 195 197 199 201 203 204 205 206 208 209 211 212 214 215 216 217 218 219 220 223 226 227 229 231 232 233 234 235 236 237 239 242 244 245 246 # 16534 assign c a 247 0 0 0 1 2 3 5 7 8 9 10 11 13 15 17 18 19 20 22 23 24 30 31 32 33 34 36 38 39 40 41 42 44 45 48 50 52 53 55 56 57 60 61 63 64 65 73 74 76 79 86 93 95 96 99 100 101 103 104 105 107 109 111 113 114 117 118 122 124 125 127 129 130 132 133 136 141 142 145 146 147 148 149 152 153 154 155 156 158 162 163 165 169 170 171 173 175 176 178 179 180 181 182 183 184 185 186 187 188 189 195 197 199 201 203 204 205 206 208 209 211 212 214 215 216 217 218 219 220 223 226 227 229 231 232 233 234 235 236 237 239 242 244 245 246 b 247 1 1 0 1 2 3 5 6 12 14 17 19 21 25 26 27 29 30 34 35 37 39 41 44 45 46 48 49 52 59 61 62 63 65 66 67 68 70 72 74 75 79 84 85 86 90 93 95 96 97 98 99 101 104 108 112 114 115 117 120 122 126 129 133 134 136 137 138 139 141 142 145 147 149 152 154 157 159 161 163 165 168 174 175 176 181 182 184 185 189 191 192 194 198 200 201 202 203 205 206 210 211 212 213 214 215 219 221 222 225 227 237 238 239 # 16535 assign c a 247 0 1 e b 247 0 1 e # 16536 assign c a 247 0 1 e b 247 0 0 e # 16537 assign c a 247 0 1 e b 247 0 1 e # 16538 assign c a 247 0 1 e b 247 0 0 f # 16539 assign c a 247 0 1 e b 247 0 1 e # 16540 assign c a 247 0 1 e b 247 0 0 0 1 2 3 6 7 8 9 14 16 17 18 21 22 23 24 28 29 32 36 37 40 42 43 44 45 47 48 50 51 52 53 54 55 61 62 64 65 66 67 68 71 72 74 75 76 79 82 85 87 89 91 93 96 99 102 104 106 107 108 112 114 116 120 121 122 124 126 127 130 131 132 136 139 140 141 142 143 144 145 147 148 149 151 158 159 160 161 162 166 170 172 173 174 175 176 178 179 180 182 186 187 188 189 190 193 194 195 197 198 199 201 202 204 205 207 214 215 218 221 222 223 224 225 228 230 231 233 236 240 241 244 # 16541 assign c a 247 0 1 f b 247 0 1 f # 16542 assign c a 247 0 1 f b 247 0 0 e # 16543 assign c a 247 0 1 f b 247 0 1 f # 16544 assign c a 247 0 1 f b 247 0 0 f # 16545 assign c a 247 0 1 f b 247 0 1 f # 16546 assign c a 247 0 1 f b 247 0 0 1 3 4 7 12 13 15 19 21 22 23 25 27 28 30 34 38 39 40 43 44 45 46 49 50 51 52 53 56 57 58 61 62 65 66 67 69 71 72 73 74 75 79 85 87 88 91 95 96 100 101 103 104 105 106 110 111 115 117 118 123 125 128 129 130 131 132 133 134 135 136 137 138 141 143 145 147 151 155 157 160 163 166 169 170 172 176 177 180 184 185 188 189 191 193 194 196 198 202 203 204 205 207 208 211 212 215 217 219 220 221 222 223 228 230 232 240 242 243 244 246 # 16547 assign c a 247 0 1 1 4 5 6 7 11 14 15 18 19 20 22 23 26 31 33 34 35 36 37 38 41 43 45 46 47 49 51 54 55 56 57 61 71 73 74 75 76 79 81 82 85 88 90 94 95 98 99 103 107 108 109 110 111 112 113 116 117 118 119 121 125 127 131 132 133 135 137 138 139 140 141 142 143 144 147 150 154 155 161 164 165 168 171 174 176 179 180 186 187 188 197 198 199 200 201 202 207 208 209 210 212 214 216 217 219 222 223 224 229 232 233 237 240 242 243 244 b 247 0 1 1 4 5 6 7 11 14 15 18 19 20 22 23 26 31 33 34 35 36 37 38 41 43 45 46 47 49 51 54 55 56 57 61 71 73 74 75 76 79 81 82 85 88 90 94 95 98 99 103 107 108 109 110 111 112 113 116 117 118 119 121 125 127 131 132 133 135 137 138 139 140 141 142 143 144 147 150 154 155 161 164 165 168 171 174 176 179 180 186 187 188 197 198 199 200 201 202 207 208 209 210 212 214 216 217 219 222 223 224 229 232 233 237 240 242 243 244 # 16548 assign c a 247 0 1 1 4 5 6 7 11 14 15 18 19 20 22 23 26 31 33 34 35 36 37 38 41 43 45 46 47 49 51 54 55 56 57 61 71 73 74 75 76 79 81 82 85 88 90 94 95 98 99 103 107 108 109 110 111 112 113 116 117 118 119 121 125 127 131 132 133 135 137 138 139 140 141 142 143 144 147 150 154 155 161 164 165 168 171 174 176 179 180 186 187 188 197 198 199 200 201 202 207 208 209 210 212 214 216 217 219 222 223 224 229 232 233 237 240 242 243 244 b 247 0 0 e # 16549 assign c a 247 0 1 0 5 8 9 18 19 20 21 22 24 26 28 30 31 32 37 40 41 43 45 47 50 53 54 56 57 58 59 62 63 64 65 67 68 69 72 73 76 77 81 82 83 84 87 89 90 97 102 107 109 111 112 113 114 117 119 120 121 125 126 127 129 131 133 135 137 138 141 144 145 146 148 149 151 152 159 161 162 163 164 165 167 168 173 176 178 179 181 182 186 187 191 192 195 197 198 199 204 205 206 207 208 215 218 219 222 227 229 230 233 234 236 237 238 239 242 243 244 246 b 247 0 1 0 5 8 9 18 19 20 21 22 24 26 28 30 31 32 37 40 41 43 45 47 50 53 54 56 57 58 59 62 63 64 65 67 68 69 72 73 76 77 81 82 83 84 87 89 90 97 102 107 109 111 112 113 114 117 119 120 121 125 126 127 129 131 133 135 137 138 141 144 145 146 148 149 151 152 159 161 162 163 164 165 167 168 173 176 178 179 181 182 186 187 191 192 195 197 198 199 204 205 206 207 208 215 218 219 222 227 229 230 233 234 236 237 238 239 242 243 244 246 # 16550 assign c a 247 0 1 0 5 8 9 18 19 20 21 22 24 26 28 30 31 32 37 40 41 43 45 47 50 53 54 56 57 58 59 62 63 64 65 67 68 69 72 73 76 77 81 82 83 84 87 89 90 97 102 107 109 111 112 113 114 117 119 120 121 125 126 127 129 131 133 135 137 138 141 144 145 146 148 149 151 152 159 161 162 163 164 165 167 168 173 176 178 179 181 182 186 187 191 192 195 197 198 199 204 205 206 207 208 215 218 219 222 227 229 230 233 234 236 237 238 239 242 243 244 246 b 247 0 0 f # 16551 assign c a 247 0 1 1 5 6 7 10 11 13 14 15 17 18 21 24 25 27 28 29 31 33 35 36 39 42 43 45 46 47 49 51 52 53 55 56 61 63 64 65 67 68 69 70 73 75 78 79 81 82 84 86 88 90 91 94 101 102 103 104 106 108 118 120 121 125 126 130 135 136 137 142 143 144 148 149 151 152 153 155 156 159 163 164 165 166 168 169 170 173 176 179 181 184 185 188 189 192 193 195 196 197 200 202 204 205 206 207 210 211 215 216 219 221 224 225 226 227 228 231 233 236 237 245 b 247 0 1 1 5 6 7 10 11 13 14 15 17 18 21 24 25 27 28 29 31 33 35 36 39 42 43 45 46 47 49 51 52 53 55 56 61 63 64 65 67 68 69 70 73 75 78 79 81 82 84 86 88 90 91 94 101 102 103 104 106 108 118 120 121 125 126 130 135 136 137 142 143 144 148 149 151 152 153 155 156 159 163 164 165 166 168 169 170 173 176 179 181 184 185 188 189 192 193 195 196 197 200 202 204 205 206 207 210 211 215 216 219 221 224 225 226 227 228 231 233 236 237 245 # 16552 assign c a 247 0 1 1 5 6 7 10 11 13 14 15 17 18 21 24 25 27 28 29 31 33 35 36 39 42 43 45 46 47 49 51 52 53 55 56 61 63 64 65 67 68 69 70 73 75 78 79 81 82 84 86 88 90 91 94 101 102 103 104 106 108 118 120 121 125 126 130 135 136 137 142 143 144 148 149 151 152 153 155 156 159 163 164 165 166 168 169 170 173 176 179 181 184 185 188 189 192 193 195 196 197 200 202 204 205 206 207 210 211 215 216 219 221 224 225 226 227 228 231 233 236 237 245 b 247 0 0 2 5 6 7 8 9 10 11 13 14 17 19 20 24 25 26 29 30 31 32 33 36 39 40 41 44 46 52 53 54 56 57 58 59 60 62 63 65 67 70 74 76 78 80 82 85 86 88 89 93 96 100 106 108 109 114 115 116 117 119 120 123 128 129 130 131 135 138 142 143 144 145 146 147 148 152 153 157 158 160 164 165 166 169 171 174 176 177 178 179 180 183 185 186 188 189 190 191 193 194 195 196 197 199 200 201 202 204 206 207 209 210 213 214 216 217 218 220 221 223 224 226 232 234 235 236 238 239 241 244 246 # 16553 assign c a 247 0 1 e b 247 0 1 e # 16554 assign c a 247 0 1 e b 247 0 1 e # 16555 assign c a 247 0 1 e b 247 0 1 e # 16556 assign c a 247 0 1 e b 247 0 1 f # 16557 assign c a 247 0 1 e b 247 0 1 e # 16558 assign c a 247 0 1 e b 247 0 1 2 3 4 5 7 10 11 12 15 17 18 25 26 27 28 29 30 33 36 40 43 45 46 47 50 51 52 59 66 67 68 69 71 74 75 79 80 82 83 84 86 87 90 91 95 96 97 98 99 100 101 102 106 107 108 111 112 114 115 117 118 119 120 121 122 124 125 127 128 129 131 132 136 139 140 141 142 143 144 152 154 155 157 158 160 163 168 169 170 173 177 178 180 182 183 184 186 187 189 192 196 197 198 199 200 201 206 207 209 213 215 218 219 220 223 224 225 227 228 231 232 233 234 237 242 243 245 246 # 16559 assign c a 247 0 1 f b 247 0 1 f # 16560 assign c a 247 0 1 f b 247 0 1 e # 16561 assign c a 247 0 1 f b 247 0 1 f # 16562 assign c a 247 0 1 f b 247 0 1 f # 16563 assign c a 247 0 1 f b 247 0 1 f # 16564 assign c a 247 0 1 f b 247 0 1 0 2 3 5 8 10 13 14 16 17 20 21 22 28 30 31 33 34 35 36 38 40 41 42 44 45 47 48 49 51 52 53 59 60 62 66 67 68 69 72 74 80 82 83 86 87 88 90 92 94 96 97 99 100 101 105 106 107 110 112 113 114 117 118 119 121 126 128 129 130 131 132 135 138 141 142 144 145 147 148 150 154 156 158 159 161 164 165 168 169 170 172 174 179 180 183 184 185 187 191 192 193 195 196 199 201 205 206 207 210 211 212 213 214 215 216 220 221 223 224 225 226 227 229 231 232 233 234 236 237 239 240 241 242 243 244 245 # 16565 assign c a 247 0 1 0 2 5 6 7 8 9 10 11 12 13 15 16 17 18 20 23 26 29 30 33 34 36 37 39 40 43 44 45 47 48 50 52 56 57 60 62 63 64 65 67 68 69 71 73 76 77 78 81 82 83 89 90 91 92 93 94 95 96 98 99 102 103 106 107 109 112 116 117 118 119 121 122 124 125 127 130 131 133 134 135 136 137 138 140 142 143 144 148 154 159 160 162 164 165 166 167 169 172 173 174 175 181 182 183 185 186 187 190 191 193 199 200 201 203 204 206 207 209 211 212 213 214 215 216 217 218 219 220 222 226 227 230 233 235 238 239 242 243 246 b 247 0 1 0 2 5 6 7 8 9 10 11 12 13 15 16 17 18 20 23 26 29 30 33 34 36 37 39 40 43 44 45 47 48 50 52 56 57 60 62 63 64 65 67 68 69 71 73 76 77 78 81 82 83 89 90 91 92 93 94 95 96 98 99 102 103 106 107 109 112 116 117 118 119 121 122 124 125 127 130 131 133 134 135 136 137 138 140 142 143 144 148 154 159 160 162 164 165 166 167 169 172 173 174 175 181 182 183 185 186 187 190 191 193 199 200 201 203 204 206 207 209 211 212 213 214 215 216 217 218 219 220 222 226 227 230 233 235 238 239 242 243 246 # 16566 assign c a 247 0 1 0 2 5 6 7 8 9 10 11 12 13 15 16 17 18 20 23 26 29 30 33 34 36 37 39 40 43 44 45 47 48 50 52 56 57 60 62 63 64 65 67 68 69 71 73 76 77 78 81 82 83 89 90 91 92 93 94 95 96 98 99 102 103 106 107 109 112 116 117 118 119 121 122 124 125 127 130 131 133 134 135 136 137 138 140 142 143 144 148 154 159 160 162 164 165 166 167 169 172 173 174 175 181 182 183 185 186 187 190 191 193 199 200 201 203 204 206 207 209 211 212 213 214 215 216 217 218 219 220 222 226 227 230 233 235 238 239 242 243 246 b 247 0 1 e # 16567 assign c a 247 0 1 0 2 3 6 7 10 12 14 17 18 21 23 25 26 28 31 33 34 35 37 39 42 43 45 47 48 49 52 53 56 57 59 61 62 63 64 65 67 68 69 70 71 73 74 75 76 78 79 82 87 89 90 92 97 99 100 102 103 104 105 106 107 112 114 115 116 118 119 121 123 125 129 137 138 139 144 145 147 150 152 156 157 158 160 162 164 165 168 170 172 174 175 177 178 182 184 187 193 194 196 199 200 203 204 206 207 212 214 215 216 221 222 223 224 225 227 228 229 230 231 235 238 239 240 243 244 245 b 247 0 1 0 2 3 6 7 10 12 14 17 18 21 23 25 26 28 31 33 34 35 37 39 42 43 45 47 48 49 52 53 56 57 59 61 62 63 64 65 67 68 69 70 71 73 74 75 76 78 79 82 87 89 90 92 97 99 100 102 103 104 105 106 107 112 114 115 116 118 119 121 123 125 129 137 138 139 144 145 147 150 152 156 157 158 160 162 164 165 168 170 172 174 175 177 178 182 184 187 193 194 196 199 200 203 204 206 207 212 214 215 216 221 222 223 224 225 227 228 229 230 231 235 238 239 240 243 244 245 # 16568 assign c a 247 0 1 0 2 3 6 7 10 12 14 17 18 21 23 25 26 28 31 33 34 35 37 39 42 43 45 47 48 49 52 53 56 57 59 61 62 63 64 65 67 68 69 70 71 73 74 75 76 78 79 82 87 89 90 92 97 99 100 102 103 104 105 106 107 112 114 115 116 118 119 121 123 125 129 137 138 139 144 145 147 150 152 156 157 158 160 162 164 165 168 170 172 174 175 177 178 182 184 187 193 194 196 199 200 203 204 206 207 212 214 215 216 221 222 223 224 225 227 228 229 230 231 235 238 239 240 243 244 245 b 247 0 1 f # 16569 assign c a 247 0 1 0 2 4 5 7 10 13 14 15 16 19 20 21 22 26 29 30 32 33 34 35 39 40 43 46 54 55 56 58 61 62 65 66 67 70 71 72 74 77 79 81 83 84 85 87 90 91 93 94 95 97 98 99 101 102 104 105 106 108 112 113 114 115 116 118 120 121 122 125 126 127 128 129 130 134 137 138 139 140 143 146 147 148 149 151 154 155 157 158 160 161 162 165 166 169 173 176 179 181 183 184 186 189 195 196 200 201 202 206 208 212 213 214 215 217 219 221 222 223 224 226 227 228 229 231 232 234 236 237 238 239 240 241 243 244 246 b 247 0 1 0 2 4 5 7 10 13 14 15 16 19 20 21 22 26 29 30 32 33 34 35 39 40 43 46 54 55 56 58 61 62 65 66 67 70 71 72 74 77 79 81 83 84 85 87 90 91 93 94 95 97 98 99 101 102 104 105 106 108 112 113 114 115 116 118 120 121 122 125 126 127 128 129 130 134 137 138 139 140 143 146 147 148 149 151 154 155 157 158 160 161 162 165 166 169 173 176 179 181 183 184 186 189 195 196 200 201 202 206 208 212 213 214 215 217 219 221 222 223 224 226 227 228 229 231 232 234 236 237 238 239 240 241 243 244 246 # 16570 assign c a 247 0 1 0 2 4 5 7 10 13 14 15 16 19 20 21 22 26 29 30 32 33 34 35 39 40 43 46 54 55 56 58 61 62 65 66 67 70 71 72 74 77 79 81 83 84 85 87 90 91 93 94 95 97 98 99 101 102 104 105 106 108 112 113 114 115 116 118 120 121 122 125 126 127 128 129 130 134 137 138 139 140 143 146 147 148 149 151 154 155 157 158 160 161 162 165 166 169 173 176 179 181 183 184 186 189 195 196 200 201 202 206 208 212 213 214 215 217 219 221 222 223 224 226 227 228 229 231 232 234 236 237 238 239 240 241 243 244 246 b 247 0 1 0 1 3 5 6 8 11 12 15 16 17 18 20 22 23 25 28 31 33 35 36 39 41 42 44 47 49 55 59 60 61 62 64 69 71 72 73 75 77 78 80 81 82 85 89 92 94 98 99 102 106 109 110 111 112 113 115 116 121 122 123 125 127 130 131 132 133 134 135 137 140 145 147 149 152 153 156 157 158 159 161 162 165 167 168 169 173 174 179 181 184 185 186 188 189 195 196 197 198 199 201 203 204 208 209 210 214 216 218 219 222 223 226 231 236 237 242 243 244 # 16571 assign c a 247 0 1 e b 247 0 1 e # 16572 assign c a 247 0 1 e b 247 1 0 e # 16573 assign c a 247 0 1 e b 247 0 1 e # 16574 assign c a 247 0 1 e b 247 1 0 f # 16575 assign c a 247 0 1 e b 247 0 1 e # 16576 assign c a 247 0 1 e b 247 1 0 0 1 2 7 8 9 10 15 16 17 19 20 24 25 26 27 28 30 33 34 35 38 39 43 44 45 46 48 53 54 56 57 58 59 61 63 64 68 72 74 77 78 79 80 86 88 89 92 94 95 96 98 100 102 104 105 106 107 109 110 114 115 116 117 119 121 122 125 126 127 129 134 135 136 137 138 140 141 142 145 148 149 150 153 155 156 158 162 163 166 169 170 171 172 173 176 179 182 183 188 190 193 195 197 200 205 206 212 216 217 218 219 220 221 227 229 233 234 235 239 240 241 244 246 # 16577 assign c a 247 0 1 f b 247 0 1 f # 16578 assign c a 247 0 1 f b 247 1 0 e # 16579 assign c a 247 0 1 f b 247 0 1 f # 16580 assign c a 247 0 1 f b 247 1 0 f # 16581 assign c a 247 0 1 f b 247 0 1 f # 16582 assign c a 247 0 1 f b 247 1 0 0 6 7 8 12 14 15 16 18 19 20 23 24 25 26 28 31 32 33 35 36 37 38 39 41 43 45 46 47 49 50 52 53 55 56 59 60 61 62 65 68 79 80 83 85 86 88 91 93 95 96 97 99 100 104 106 108 111 113 114 115 116 117 118 119 125 132 134 135 136 139 140 141 144 146 147 148 149 153 154 156 157 158 161 162 168 169 171 172 173 174 175 176 177 178 179 180 185 186 187 188 193 194 195 201 213 215 216 218 219 220 221 224 228 229 230 234 235 239 241 242 243 244 246 # 16583 assign c a 247 0 1 1 7 9 10 11 13 14 15 20 21 22 25 29 30 31 32 36 37 38 41 43 44 46 47 48 52 53 54 56 64 67 71 73 74 80 82 83 85 86 91 92 93 94 95 98 100 105 106 107 109 113 114 115 116 117 119 121 122 125 127 132 134 139 141 143 144 146 151 152 156 157 164 166 168 172 173 175 176 181 182 184 186 187 188 192 193 195 196 199 201 202 210 211 213 216 219 220 225 228 230 233 234 235 239 240 241 242 243 244 b 247 0 1 1 7 9 10 11 13 14 15 20 21 22 25 29 30 31 32 36 37 38 41 43 44 46 47 48 52 53 54 56 64 67 71 73 74 80 82 83 85 86 91 92 93 94 95 98 100 105 106 107 109 113 114 115 116 117 119 121 122 125 127 132 134 139 141 143 144 146 151 152 156 157 164 166 168 172 173 175 176 181 182 184 186 187 188 192 193 195 196 199 201 202 210 211 213 216 219 220 225 228 230 233 234 235 239 240 241 242 243 244 # 16584 assign c a 247 0 1 1 7 9 10 11 13 14 15 20 21 22 25 29 30 31 32 36 37 38 41 43 44 46 47 48 52 53 54 56 64 67 71 73 74 80 82 83 85 86 91 92 93 94 95 98 100 105 106 107 109 113 114 115 116 117 119 121 122 125 127 132 134 139 141 143 144 146 151 152 156 157 164 166 168 172 173 175 176 181 182 184 186 187 188 192 193 195 196 199 201 202 210 211 213 216 219 220 225 228 230 233 234 235 239 240 241 242 243 244 b 247 1 0 e # 16585 assign c a 247 0 1 0 1 3 5 6 7 9 12 13 16 19 20 22 25 28 33 35 36 38 40 41 42 43 44 46 47 48 52 54 55 60 61 62 63 64 65 66 67 70 73 74 76 77 78 79 83 84 86 90 92 95 97 99 102 103 105 108 110 112 115 119 121 127 129 130 131 133 134 136 138 139 141 142 144 146 151 153 155 157 158 159 162 163 165 167 168 169 170 172 173 174 175 176 177 180 181 185 186 187 188 189 194 196 199 203 204 206 207 208 209 211 212 213 216 218 219 220 222 224 225 226 227 230 241 243 244 245 b 247 0 1 0 1 3 5 6 7 9 12 13 16 19 20 22 25 28 33 35 36 38 40 41 42 43 44 46 47 48 52 54 55 60 61 62 63 64 65 66 67 70 73 74 76 77 78 79 83 84 86 90 92 95 97 99 102 103 105 108 110 112 115 119 121 127 129 130 131 133 134 136 138 139 141 142 144 146 151 153 155 157 158 159 162 163 165 167 168 169 170 172 173 174 175 176 177 180 181 185 186 187 188 189 194 196 199 203 204 206 207 208 209 211 212 213 216 218 219 220 222 224 225 226 227 230 241 243 244 245 # 16586 assign c a 247 0 1 0 1 3 5 6 7 9 12 13 16 19 20 22 25 28 33 35 36 38 40 41 42 43 44 46 47 48 52 54 55 60 61 62 63 64 65 66 67 70 73 74 76 77 78 79 83 84 86 90 92 95 97 99 102 103 105 108 110 112 115 119 121 127 129 130 131 133 134 136 138 139 141 142 144 146 151 153 155 157 158 159 162 163 165 167 168 169 170 172 173 174 175 176 177 180 181 185 186 187 188 189 194 196 199 203 204 206 207 208 209 211 212 213 216 218 219 220 222 224 225 226 227 230 241 243 244 245 b 247 1 0 f # 16587 assign c a 247 0 1 0 1 3 4 5 6 9 10 12 14 16 18 20 22 25 26 28 30 31 33 36 38 40 41 43 44 47 48 50 52 53 54 58 60 62 66 68 69 71 73 74 80 82 84 86 88 90 91 92 93 98 99 102 103 107 108 110 112 113 114 115 117 121 124 125 126 127 130 132 133 135 138 139 140 141 143 147 149 150 152 154 156 160 162 163 165 166 173 175 177 179 184 185 186 187 190 192 193 195 196 197 201 202 203 204 205 208 209 218 219 221 224 225 228 229 230 232 234 235 243 244 245 b 247 0 1 0 1 3 4 5 6 9 10 12 14 16 18 20 22 25 26 28 30 31 33 36 38 40 41 43 44 47 48 50 52 53 54 58 60 62 66 68 69 71 73 74 80 82 84 86 88 90 91 92 93 98 99 102 103 107 108 110 112 113 114 115 117 121 124 125 126 127 130 132 133 135 138 139 140 141 143 147 149 150 152 154 156 160 162 163 165 166 173 175 177 179 184 185 186 187 190 192 193 195 196 197 201 202 203 204 205 208 209 218 219 221 224 225 228 229 230 232 234 235 243 244 245 # 16588 assign c a 247 0 1 0 1 3 4 5 6 9 10 12 14 16 18 20 22 25 26 28 30 31 33 36 38 40 41 43 44 47 48 50 52 53 54 58 60 62 66 68 69 71 73 74 80 82 84 86 88 90 91 92 93 98 99 102 103 107 108 110 112 113 114 115 117 121 124 125 126 127 130 132 133 135 138 139 140 141 143 147 149 150 152 154 156 160 162 163 165 166 173 175 177 179 184 185 186 187 190 192 193 195 196 197 201 202 203 204 205 208 209 218 219 221 224 225 228 229 230 232 234 235 243 244 245 b 247 1 0 4 6 7 8 9 13 15 16 17 18 22 24 26 27 29 30 31 35 38 40 42 47 48 49 54 55 57 58 59 60 61 63 64 65 66 68 69 70 71 73 77 80 81 83 86 87 88 89 91 93 94 96 97 98 99 100 101 102 103 104 108 109 111 112 113 114 117 118 122 123 125 130 133 136 137 138 139 140 142 143 146 149 150 151 153 154 155 159 160 164 166 167 170 171 172 173 174 175 177 180 184 185 191 192 193 195 197 198 201 207 208 209 211 212 214 215 219 220 221 222 224 225 227 228 229 232 233 234 237 238 240 242 243 244 245 246 # 16589 assign c a 247 0 1 e b 247 0 1 e # 16590 assign c a 247 0 1 e b 247 1 1 e # 16591 assign c a 247 0 1 e b 247 0 1 e # 16592 assign c a 247 0 1 e b 247 1 1 f # 16593 assign c a 247 0 1 e b 247 0 1 e # 16594 assign c a 247 0 1 e b 247 1 1 3 4 6 8 9 10 11 12 13 18 19 20 21 22 23 24 25 26 28 29 31 34 36 37 38 39 42 47 48 58 59 61 62 63 65 66 68 69 70 73 76 77 79 81 83 84 85 89 91 92 98 99 101 105 106 108 112 115 124 125 126 127 129 130 134 135 136 137 139 141 142 148 150 152 154 155 156 157 158 161 162 163 164 165 166 167 168 170 171 173 176 178 179 180 181 182 183 185 186 191 194 196 197 199 201 202 203 204 205 207 218 219 220 222 223 225 228 233 234 236 238 242 243 244 # 16595 assign c a 247 0 1 f b 247 0 1 f # 16596 assign c a 247 0 1 f b 247 1 1 e # 16597 assign c a 247 0 1 f b 247 0 1 f # 16598 assign c a 247 0 1 f b 247 1 1 f # 16599 assign c a 247 0 1 f b 247 0 1 f # 16600 assign c a 247 0 1 f b 247 1 1 1 2 3 6 8 10 16 19 21 22 23 26 27 31 34 35 40 41 45 46 47 50 51 52 53 54 57 59 62 63 64 68 69 71 72 73 75 76 77 78 81 84 89 91 94 95 96 99 100 101 102 103 104 105 106 107 108 109 112 113 115 117 119 120 121 122 123 124 126 127 128 131 132 135 140 141 143 145 147 148 149 151 154 156 157 160 161 163 164 165 166 168 171 172 173 174 176 179 180 181 182 184 186 187 192 195 197 201 204 205 206 207 209 210 212 214 215 216 217 220 221 223 225 226 228 230 231 232 233 235 236 237 240 243 244 # 16601 assign c a 247 0 1 0 1 2 3 4 5 7 8 10 12 15 19 25 26 27 37 40 42 43 45 46 47 50 54 55 56 57 58 62 64 65 66 67 68 69 71 73 74 75 76 77 80 82 85 88 89 90 91 93 95 96 98 105 108 109 111 112 116 118 119 121 122 123 124 126 129 130 131 132 139 141 142 145 146 149 150 151 152 153 154 156 158 161 168 169 172 179 180 182 183 188 190 193 197 198 200 202 203 204 207 209 210 216 218 219 220 223 225 227 228 231 232 234 235 237 238 239 240 243 244 245 b 247 0 1 0 1 2 3 4 5 7 8 10 12 15 19 25 26 27 37 40 42 43 45 46 47 50 54 55 56 57 58 62 64 65 66 67 68 69 71 73 74 75 76 77 80 82 85 88 89 90 91 93 95 96 98 105 108 109 111 112 116 118 119 121 122 123 124 126 129 130 131 132 139 141 142 145 146 149 150 151 152 153 154 156 158 161 168 169 172 179 180 182 183 188 190 193 197 198 200 202 203 204 207 209 210 216 218 219 220 223 225 227 228 231 232 234 235 237 238 239 240 243 244 245 # 16602 assign c a 247 0 1 0 1 2 3 4 5 7 8 10 12 15 19 25 26 27 37 40 42 43 45 46 47 50 54 55 56 57 58 62 64 65 66 67 68 69 71 73 74 75 76 77 80 82 85 88 89 90 91 93 95 96 98 105 108 109 111 112 116 118 119 121 122 123 124 126 129 130 131 132 139 141 142 145 146 149 150 151 152 153 154 156 158 161 168 169 172 179 180 182 183 188 190 193 197 198 200 202 203 204 207 209 210 216 218 219 220 223 225 227 228 231 232 234 235 237 238 239 240 243 244 245 b 247 1 1 e # 16603 assign c a 247 0 1 0 3 4 5 7 9 12 13 14 16 17 19 24 25 26 27 28 29 31 32 33 34 35 38 39 42 43 45 48 49 52 53 54 55 56 57 58 59 62 65 67 68 72 77 78 79 84 85 87 88 92 94 96 98 99 100 103 104 111 117 121 124 127 130 132 134 135 136 139 142 143 144 145 148 149 150 151 157 159 164 171 172 174 175 179 182 183 187 188 189 190 195 197 199 201 202 205 209 211 212 216 217 219 222 223 224 226 234 237 238 239 240 243 244 245 b 247 0 1 0 3 4 5 7 9 12 13 14 16 17 19 24 25 26 27 28 29 31 32 33 34 35 38 39 42 43 45 48 49 52 53 54 55 56 57 58 59 62 65 67 68 72 77 78 79 84 85 87 88 92 94 96 98 99 100 103 104 111 117 121 124 127 130 132 134 135 136 139 142 143 144 145 148 149 150 151 157 159 164 171 172 174 175 179 182 183 187 188 189 190 195 197 199 201 202 205 209 211 212 216 217 219 222 223 224 226 234 237 238 239 240 243 244 245 # 16604 assign c a 247 0 1 0 3 4 5 7 9 12 13 14 16 17 19 24 25 26 27 28 29 31 32 33 34 35 38 39 42 43 45 48 49 52 53 54 55 56 57 58 59 62 65 67 68 72 77 78 79 84 85 87 88 92 94 96 98 99 100 103 104 111 117 121 124 127 130 132 134 135 136 139 142 143 144 145 148 149 150 151 157 159 164 171 172 174 175 179 182 183 187 188 189 190 195 197 199 201 202 205 209 211 212 216 217 219 222 223 224 226 234 237 238 239 240 243 244 245 b 247 1 1 f # 16605 assign c a 247 0 1 0 1 2 7 8 9 10 13 15 17 19 20 22 23 27 31 32 33 37 40 41 44 45 46 48 50 51 52 53 56 57 60 63 65 67 68 70 71 74 77 78 81 82 86 89 90 93 95 96 98 100 101 106 107 109 110 111 113 115 117 119 120 122 127 128 131 132 133 136 138 140 141 142 144 149 154 161 162 164 166 167 169 170 172 173 174 175 182 183 184 188 189 192 194 196 202 203 205 206 209 210 211 213 217 219 221 225 226 229 231 234 236 238 241 242 243 244 b 247 0 1 0 1 2 7 8 9 10 13 15 17 19 20 22 23 27 31 32 33 37 40 41 44 45 46 48 50 51 52 53 56 57 60 63 65 67 68 70 71 74 77 78 81 82 86 89 90 93 95 96 98 100 101 106 107 109 110 111 113 115 117 119 120 122 127 128 131 132 133 136 138 140 141 142 144 149 154 161 162 164 166 167 169 170 172 173 174 175 182 183 184 188 189 192 194 196 202 203 205 206 209 210 211 213 217 219 221 225 226 229 231 234 236 238 241 242 243 244 # 16606 assign c a 247 0 1 0 1 2 7 8 9 10 13 15 17 19 20 22 23 27 31 32 33 37 40 41 44 45 46 48 50 51 52 53 56 57 60 63 65 67 68 70 71 74 77 78 81 82 86 89 90 93 95 96 98 100 101 106 107 109 110 111 113 115 117 119 120 122 127 128 131 132 133 136 138 140 141 142 144 149 154 161 162 164 166 167 169 170 172 173 174 175 182 183 184 188 189 192 194 196 202 203 205 206 209 210 211 213 217 219 221 225 226 229 231 234 236 238 241 242 243 244 b 247 1 1 0 2 3 4 5 7 10 12 13 14 16 21 29 35 36 38 40 41 42 45 46 48 50 52 54 56 61 65 71 75 76 79 80 83 84 85 86 87 90 94 95 98 100 104 105 106 107 110 113 114 116 117 118 121 122 123 125 126 127 129 133 135 136 138 140 150 151 154 155 157 158 161 162 163 164 166 168 170 172 174 176 178 180 181 188 189 190 192 193 195 196 197 199 201 205 206 207 209 211 212 215 216 219 230 231 235 238 241 245 # 16607 assign c a 247 1 0 e b 247 1 0 e # 16608 assign c a 247 1 0 e b 247 0 0 e # 16609 assign c a 247 1 0 e b 247 1 0 e # 16610 assign c a 247 1 0 e b 247 0 0 f # 16611 assign c a 247 1 0 e b 247 1 0 e # 16612 assign c a 247 1 0 e b 247 0 0 2 3 4 9 11 13 14 17 18 22 23 24 25 27 29 31 33 34 35 37 39 40 41 43 44 49 55 58 59 62 63 66 69 72 73 76 78 82 83 84 85 86 89 91 92 93 94 98 99 101 104 106 107 108 110 112 113 116 117 118 120 121 123 124 125 126 129 131 132 133 137 142 144 145 146 147 148 150 151 158 159 162 163 165 168 169 170 172 174 175 178 180 181 184 185 186 189 190 193 195 196 197 199 200 201 203 205 206 207 213 214 217 219 220 225 227 228 230 233 235 236 237 238 242 243 245 246 # 16613 assign c a 247 1 0 f b 247 1 0 f # 16614 assign c a 247 1 0 f b 247 0 0 e # 16615 assign c a 247 1 0 f b 247 1 0 f # 16616 assign c a 247 1 0 f b 247 0 0 f # 16617 assign c a 247 1 0 f b 247 1 0 f # 16618 assign c a 247 1 0 f b 247 0 0 0 1 4 5 6 10 14 15 16 17 18 19 20 21 22 33 34 36 38 39 40 41 44 46 47 49 52 54 58 59 60 61 64 65 66 69 73 74 76 77 80 81 83 84 89 92 93 95 96 100 101 102 106 110 111 112 114 115 117 119 120 121 123 124 125 126 128 129 130 131 132 136 138 140 143 144 145 146 148 151 154 155 157 160 164 165 166 167 170 171 172 174 175 178 180 183 184 186 187 188 191 192 197 207 208 210 220 223 224 230 231 232 237 238 240 241 242 246 # 16619 assign c a 247 1 0 0 1 2 4 9 10 11 16 17 18 21 24 30 33 35 37 39 40 42 46 48 49 50 52 53 54 57 58 59 61 62 63 64 66 73 74 75 77 80 83 89 91 92 96 98 101 102 103 104 105 106 108 111 112 113 115 117 120 121 124 125 126 127 128 129 130 132 133 135 138 140 142 143 146 147 151 152 155 158 161 162 163 166 167 168 169 171 175 176 179 181 182 188 190 192 196 197 200 201 203 204 205 206 207 208 210 212 213 214 218 220 223 224 225 227 228 229 241 242 244 245 246 b 247 1 0 0 1 2 4 9 10 11 16 17 18 21 24 30 33 35 37 39 40 42 46 48 49 50 52 53 54 57 58 59 61 62 63 64 66 73 74 75 77 80 83 89 91 92 96 98 101 102 103 104 105 106 108 111 112 113 115 117 120 121 124 125 126 127 128 129 130 132 133 135 138 140 142 143 146 147 151 152 155 158 161 162 163 166 167 168 169 171 175 176 179 181 182 188 190 192 196 197 200 201 203 204 205 206 207 208 210 212 213 214 218 220 223 224 225 227 228 229 241 242 244 245 246 # 16620 assign c a 247 1 0 0 1 2 4 9 10 11 16 17 18 21 24 30 33 35 37 39 40 42 46 48 49 50 52 53 54 57 58 59 61 62 63 64 66 73 74 75 77 80 83 89 91 92 96 98 101 102 103 104 105 106 108 111 112 113 115 117 120 121 124 125 126 127 128 129 130 132 133 135 138 140 142 143 146 147 151 152 155 158 161 162 163 166 167 168 169 171 175 176 179 181 182 188 190 192 196 197 200 201 203 204 205 206 207 208 210 212 213 214 218 220 223 224 225 227 228 229 241 242 244 245 246 b 247 0 0 e # 16621 assign c a 247 1 0 0 4 5 6 7 8 10 11 13 14 15 19 20 22 23 24 25 26 28 31 32 33 34 35 36 37 39 48 51 52 54 55 59 60 61 62 63 65 69 70 71 75 76 79 80 82 83 84 86 87 88 90 91 93 94 95 98 99 101 102 103 105 109 115 116 118 119 120 121 122 124 126 128 129 131 132 133 134 136 138 140 142 144 148 151 153 155 165 166 169 170 173 175 177 180 181 184 185 188 192 193 196 198 199 200 201 204 205 209 210 214 217 221 224 225 226 229 232 233 235 237 239 243 244 b 247 1 0 0 4 5 6 7 8 10 11 13 14 15 19 20 22 23 24 25 26 28 31 32 33 34 35 36 37 39 48 51 52 54 55 59 60 61 62 63 65 69 70 71 75 76 79 80 82 83 84 86 87 88 90 91 93 94 95 98 99 101 102 103 105 109 115 116 118 119 120 121 122 124 126 128 129 131 132 133 134 136 138 140 142 144 148 151 153 155 165 166 169 170 173 175 177 180 181 184 185 188 192 193 196 198 199 200 201 204 205 209 210 214 217 221 224 225 226 229 232 233 235 237 239 243 244 # 16622 assign c a 247 1 0 0 4 5 6 7 8 10 11 13 14 15 19 20 22 23 24 25 26 28 31 32 33 34 35 36 37 39 48 51 52 54 55 59 60 61 62 63 65 69 70 71 75 76 79 80 82 83 84 86 87 88 90 91 93 94 95 98 99 101 102 103 105 109 115 116 118 119 120 121 122 124 126 128 129 131 132 133 134 136 138 140 142 144 148 151 153 155 165 166 169 170 173 175 177 180 181 184 185 188 192 193 196 198 199 200 201 204 205 209 210 214 217 221 224 225 226 229 232 233 235 237 239 243 244 b 247 0 0 f # 16623 assign c a 247 1 0 2 4 5 6 9 11 18 20 21 22 23 32 34 36 37 38 40 41 45 46 49 50 51 54 55 56 57 58 59 64 66 67 73 74 75 76 79 81 82 83 85 88 92 93 95 99 100 101 105 106 111 115 116 117 118 119 122 124 128 129 130 134 135 137 139 140 144 145 146 147 148 149 154 156 159 160 164 165 167 168 169 170 171 174 175 177 178 180 182 184 185 187 188 189 191 193 196 197 200 201 203 206 209 210 212 215 217 220 221 224 225 226 228 229 230 232 238 239 242 244 246 b 247 1 0 2 4 5 6 9 11 18 20 21 22 23 32 34 36 37 38 40 41 45 46 49 50 51 54 55 56 57 58 59 64 66 67 73 74 75 76 79 81 82 83 85 88 92 93 95 99 100 101 105 106 111 115 116 117 118 119 122 124 128 129 130 134 135 137 139 140 144 145 146 147 148 149 154 156 159 160 164 165 167 168 169 170 171 174 175 177 178 180 182 184 185 187 188 189 191 193 196 197 200 201 203 206 209 210 212 215 217 220 221 224 225 226 228 229 230 232 238 239 242 244 246 # 16624 assign c a 247 1 0 2 4 5 6 9 11 18 20 21 22 23 32 34 36 37 38 40 41 45 46 49 50 51 54 55 56 57 58 59 64 66 67 73 74 75 76 79 81 82 83 85 88 92 93 95 99 100 101 105 106 111 115 116 117 118 119 122 124 128 129 130 134 135 137 139 140 144 145 146 147 148 149 154 156 159 160 164 165 167 168 169 170 171 174 175 177 178 180 182 184 185 187 188 189 191 193 196 197 200 201 203 206 209 210 212 215 217 220 221 224 225 226 228 229 230 232 238 239 242 244 246 b 247 0 0 6 7 10 11 13 14 15 16 17 19 21 22 24 29 33 34 35 37 38 45 47 48 50 53 54 56 57 60 61 62 63 65 66 67 71 72 80 82 84 85 87 88 89 92 93 96 98 100 102 103 104 106 108 110 111 113 114 121 122 124 130 132 133 134 136 137 138 139 143 147 148 149 150 153 154 156 158 160 162 165 166 168 169 170 171 174 176 177 179 180 184 187 192 194 195 196 197 199 202 203 204 207 210 212 215 217 218 219 223 225 226 228 233 234 238 239 240 241 244 245 # 16625 assign c a 247 1 0 e b 247 1 0 e # 16626 assign c a 247 1 0 e b 247 0 1 e # 16627 assign c a 247 1 0 e b 247 1 0 e # 16628 assign c a 247 1 0 e b 247 0 1 f # 16629 assign c a 247 1 0 e b 247 1 0 e # 16630 assign c a 247 1 0 e b 247 0 1 1 2 4 6 7 8 9 10 15 16 18 19 20 21 22 23 24 25 28 29 32 34 35 36 38 41 42 43 44 47 48 50 51 53 54 55 57 60 61 63 67 68 71 72 74 75 78 82 83 85 86 87 88 89 90 91 92 95 96 97 98 104 109 111 114 115 119 122 124 127 132 133 134 136 137 138 140 144 147 148 149 150 153 156 157 158 160 162 163 164 167 169 173 174 175 178 179 180 181 184 185 187 190 192 193 195 198 199 203 206 209 212 213 214 219 220 224 225 229 230 231 238 239 240 243 # 16631 assign c a 247 1 0 f b 247 1 0 f # 16632 assign c a 247 1 0 f b 247 0 1 e # 16633 assign c a 247 1 0 f b 247 1 0 f # 16634 assign c a 247 1 0 f b 247 0 1 f # 16635 assign c a 247 1 0 f b 247 1 0 f # 16636 assign c a 247 1 0 f b 247 0 1 0 3 5 7 8 9 10 11 13 14 15 19 20 21 22 23 24 30 32 34 36 38 39 41 42 44 45 48 49 50 51 52 53 56 57 58 61 62 64 65 67 68 70 74 78 81 82 83 90 93 94 100 101 102 106 107 108 110 111 113 114 115 119 120 124 125 129 130 131 132 133 137 138 139 141 142 143 144 145 149 152 154 155 159 160 162 163 165 166 168 169 172 175 177 179 181 187 189 195 201 202 205 207 208 209 210 214 215 219 221 223 225 228 229 230 235 237 243 246 # 16637 assign c a 247 1 0 0 3 4 10 11 13 14 18 19 20 21 23 25 29 30 35 37 39 40 42 45 46 48 49 51 53 54 55 56 58 59 60 61 67 69 70 73 78 80 85 96 97 101 103 104 105 110 112 113 114 116 117 121 125 126 128 133 134 135 136 141 144 147 149 152 153 154 155 156 157 161 162 164 165 167 168 169 170 172 174 175 176 178 179 181 183 184 186 190 191 192 193 195 197 202 204 205 206 207 208 209 210 212 216 218 221 222 224 228 229 230 233 234 237 238 241 242 244 245 246 b 247 1 0 0 3 4 10 11 13 14 18 19 20 21 23 25 29 30 35 37 39 40 42 45 46 48 49 51 53 54 55 56 58 59 60 61 67 69 70 73 78 80 85 96 97 101 103 104 105 110 112 113 114 116 117 121 125 126 128 133 134 135 136 141 144 147 149 152 153 154 155 156 157 161 162 164 165 167 168 169 170 172 174 175 176 178 179 181 183 184 186 190 191 192 193 195 197 202 204 205 206 207 208 209 210 212 216 218 221 222 224 228 229 230 233 234 237 238 241 242 244 245 246 # 16638 assign c a 247 1 0 0 3 4 10 11 13 14 18 19 20 21 23 25 29 30 35 37 39 40 42 45 46 48 49 51 53 54 55 56 58 59 60 61 67 69 70 73 78 80 85 96 97 101 103 104 105 110 112 113 114 116 117 121 125 126 128 133 134 135 136 141 144 147 149 152 153 154 155 156 157 161 162 164 165 167 168 169 170 172 174 175 176 178 179 181 183 184 186 190 191 192 193 195 197 202 204 205 206 207 208 209 210 212 216 218 221 222 224 228 229 230 233 234 237 238 241 242 244 245 246 b 247 0 1 e # 16639 assign c a 247 1 0 0 2 3 4 5 6 11 15 19 20 22 24 26 27 29 30 35 39 41 43 44 45 49 51 53 55 58 59 61 68 69 73 74 76 78 79 82 83 86 87 89 90 91 93 95 97 103 107 108 110 112 113 115 117 118 119 120 125 126 127 131 132 133 134 135 138 140 141 142 143 144 145 146 148 150 151 152 154 157 159 161 162 163 165 166 167 169 170 172 173 174 175 176 177 179 184 186 187 190 191 192 194 197 200 202 203 204 205 206 207 209 211 213 214 215 217 218 219 220 221 222 223 229 230 231 232 233 234 235 238 239 242 243 245 246 b 247 1 0 0 2 3 4 5 6 11 15 19 20 22 24 26 27 29 30 35 39 41 43 44 45 49 51 53 55 58 59 61 68 69 73 74 76 78 79 82 83 86 87 89 90 91 93 95 97 103 107 108 110 112 113 115 117 118 119 120 125 126 127 131 132 133 134 135 138 140 141 142 143 144 145 146 148 150 151 152 154 157 159 161 162 163 165 166 167 169 170 172 173 174 175 176 177 179 184 186 187 190 191 192 194 197 200 202 203 204 205 206 207 209 211 213 214 215 217 218 219 220 221 222 223 229 230 231 232 233 234 235 238 239 242 243 245 246 # 16640 assign c a 247 1 0 0 2 3 4 5 6 11 15 19 20 22 24 26 27 29 30 35 39 41 43 44 45 49 51 53 55 58 59 61 68 69 73 74 76 78 79 82 83 86 87 89 90 91 93 95 97 103 107 108 110 112 113 115 117 118 119 120 125 126 127 131 132 133 134 135 138 140 141 142 143 144 145 146 148 150 151 152 154 157 159 161 162 163 165 166 167 169 170 172 173 174 175 176 177 179 184 186 187 190 191 192 194 197 200 202 203 204 205 206 207 209 211 213 214 215 217 218 219 220 221 222 223 229 230 231 232 233 234 235 238 239 242 243 245 246 b 247 0 1 f # 16641 assign c a 247 1 0 0 2 3 8 9 10 13 16 17 18 19 24 25 27 28 29 31 35 36 37 40 42 45 47 48 50 52 54 55 56 58 59 62 63 66 70 72 75 77 78 81 82 84 85 87 90 93 95 96 97 101 103 105 106 107 108 109 112 114 115 118 119 120 121 130 131 134 135 137 138 140 142 144 145 149 151 152 156 158 160 164 165 167 168 172 173 174 175 176 179 181 182 183 188 189 190 191 193 196 197 199 209 211 214 215 217 218 220 221 222 224 226 227 228 229 233 235 236 237 243 244 245 246 b 247 1 0 0 2 3 8 9 10 13 16 17 18 19 24 25 27 28 29 31 35 36 37 40 42 45 47 48 50 52 54 55 56 58 59 62 63 66 70 72 75 77 78 81 82 84 85 87 90 93 95 96 97 101 103 105 106 107 108 109 112 114 115 118 119 120 121 130 131 134 135 137 138 140 142 144 145 149 151 152 156 158 160 164 165 167 168 172 173 174 175 176 179 181 182 183 188 189 190 191 193 196 197 199 209 211 214 215 217 218 220 221 222 224 226 227 228 229 233 235 236 237 243 244 245 246 # 16642 assign c a 247 1 0 0 2 3 8 9 10 13 16 17 18 19 24 25 27 28 29 31 35 36 37 40 42 45 47 48 50 52 54 55 56 58 59 62 63 66 70 72 75 77 78 81 82 84 85 87 90 93 95 96 97 101 103 105 106 107 108 109 112 114 115 118 119 120 121 130 131 134 135 137 138 140 142 144 145 149 151 152 156 158 160 164 165 167 168 172 173 174 175 176 179 181 182 183 188 189 190 191 193 196 197 199 209 211 214 215 217 218 220 221 222 224 226 227 228 229 233 235 236 237 243 244 245 246 b 247 0 1 1 2 4 9 11 12 15 16 19 22 23 24 26 27 29 32 34 35 36 39 41 42 43 44 46 47 48 51 52 54 56 57 60 61 62 63 64 65 66 67 70 72 73 75 78 79 80 82 83 84 85 87 90 93 94 97 98 99 100 101 103 105 106 107 109 110 112 113 114 115 119 120 123 127 128 131 132 133 134 137 139 140 141 142 143 144 145 149 151 154 155 156 159 161 162 164 165 166 168 170 173 175 176 177 180 184 186 187 191 196 199 200 203 206 210 211 212 213 215 219 220 221 222 228 229 230 235 236 239 240 242 # 16643 assign c a 247 1 0 e b 247 1 0 e # 16644 assign c a 247 1 0 e b 247 1 0 e # 16645 assign c a 247 1 0 e b 247 1 0 e # 16646 assign c a 247 1 0 e b 247 1 0 f # 16647 assign c a 247 1 0 e b 247 1 0 e # 16648 assign c a 247 1 0 e b 247 1 0 2 5 6 8 10 12 13 18 22 27 30 31 32 33 38 41 42 44 45 46 49 50 51 53 54 55 56 60 63 65 66 67 68 69 73 74 76 77 80 84 87 89 93 94 96 97 99 100 109 110 114 117 119 120 121 123 124 129 131 135 136 137 139 140 143 145 147 148 150 151 154 155 159 160 161 162 165 166 167 168 170 175 177 178 181 182 185 187 188 189 191 192 195 198 199 201 203 205 206 208 209 210 211 212 213 217 218 220 223 224 225 226 227 228 229 230 232 235 244 245 246 # 16649 assign c a 247 1 0 f b 247 1 0 f # 16650 assign c a 247 1 0 f b 247 1 0 e # 16651 assign c a 247 1 0 f b 247 1 0 f # 16652 assign c a 247 1 0 f b 247 1 0 f # 16653 assign c a 247 1 0 f b 247 1 0 f # 16654 assign c a 247 1 0 f b 247 1 0 1 2 3 4 8 11 13 14 15 16 19 20 21 27 31 32 34 35 40 43 46 48 49 50 51 52 55 56 57 58 60 63 66 67 68 69 73 75 83 85 86 89 92 93 96 99 101 103 104 105 106 108 109 110 115 118 119 120 123 125 128 129 130 132 134 135 136 137 139 140 143 144 146 148 149 150 151 154 156 158 159 161 164 167 168 169 170 171 174 176 184 185 186 187 189 190 193 194 197 200 202 203 204 205 209 210 214 215 217 218 220 222 225 226 227 228 230 232 233 236 237 238 239 241 243 246 # 16655 assign c a 247 1 0 3 5 6 9 15 19 20 22 23 24 25 28 29 33 35 36 43 44 45 46 48 50 51 53 54 58 61 62 63 64 66 68 69 70 74 76 77 78 79 80 81 82 85 86 87 91 94 96 97 98 99 100 104 106 107 108 110 111 113 115 116 118 120 124 127 128 130 131 132 133 134 137 141 144 145 148 149 150 151 153 154 155 158 160 162 165 166 167 168 170 171 175 176 177 179 180 182 183 185 186 189 190 191 193 195 196 200 203 204 205 206 207 208 210 212 215 224 225 227 229 233 235 236 238 240 242 244 b 247 1 0 3 5 6 9 15 19 20 22 23 24 25 28 29 33 35 36 43 44 45 46 48 50 51 53 54 58 61 62 63 64 66 68 69 70 74 76 77 78 79 80 81 82 85 86 87 91 94 96 97 98 99 100 104 106 107 108 110 111 113 115 116 118 120 124 127 128 130 131 132 133 134 137 141 144 145 148 149 150 151 153 154 155 158 160 162 165 166 167 168 170 171 175 176 177 179 180 182 183 185 186 189 190 191 193 195 196 200 203 204 205 206 207 208 210 212 215 224 225 227 229 233 235 236 238 240 242 244 # 16656 assign c a 247 1 0 3 5 6 9 15 19 20 22 23 24 25 28 29 33 35 36 43 44 45 46 48 50 51 53 54 58 61 62 63 64 66 68 69 70 74 76 77 78 79 80 81 82 85 86 87 91 94 96 97 98 99 100 104 106 107 108 110 111 113 115 116 118 120 124 127 128 130 131 132 133 134 137 141 144 145 148 149 150 151 153 154 155 158 160 162 165 166 167 168 170 171 175 176 177 179 180 182 183 185 186 189 190 191 193 195 196 200 203 204 205 206 207 208 210 212 215 224 225 227 229 233 235 236 238 240 242 244 b 247 1 0 e # 16657 assign c a 247 1 0 1 2 3 7 10 11 12 13 15 16 17 19 20 22 27 29 32 35 38 39 40 41 42 45 48 49 51 54 59 60 63 64 66 68 70 71 73 75 76 77 79 81 83 84 88 91 92 95 96 98 99 100 101 102 103 104 105 106 108 109 112 113 114 115 119 120 122 123 124 127 130 133 136 137 138 140 141 142 143 144 145 147 148 149 150 151 153 156 157 162 163 164 165 167 168 169 171 172 173 174 175 176 178 179 180 181 185 188 189 190 192 193 195 196 197 198 199 200 201 202 203 204 207 208 211 212 213 214 216 218 219 221 224 225 228 229 232 233 235 237 238 240 242 243 245 b 247 1 0 1 2 3 7 10 11 12 13 15 16 17 19 20 22 27 29 32 35 38 39 40 41 42 45 48 49 51 54 59 60 63 64 66 68 70 71 73 75 76 77 79 81 83 84 88 91 92 95 96 98 99 100 101 102 103 104 105 106 108 109 112 113 114 115 119 120 122 123 124 127 130 133 136 137 138 140 141 142 143 144 145 147 148 149 150 151 153 156 157 162 163 164 165 167 168 169 171 172 173 174 175 176 178 179 180 181 185 188 189 190 192 193 195 196 197 198 199 200 201 202 203 204 207 208 211 212 213 214 216 218 219 221 224 225 228 229 232 233 235 237 238 240 242 243 245 # 16658 assign c a 247 1 0 1 2 3 7 10 11 12 13 15 16 17 19 20 22 27 29 32 35 38 39 40 41 42 45 48 49 51 54 59 60 63 64 66 68 70 71 73 75 76 77 79 81 83 84 88 91 92 95 96 98 99 100 101 102 103 104 105 106 108 109 112 113 114 115 119 120 122 123 124 127 130 133 136 137 138 140 141 142 143 144 145 147 148 149 150 151 153 156 157 162 163 164 165 167 168 169 171 172 173 174 175 176 178 179 180 181 185 188 189 190 192 193 195 196 197 198 199 200 201 202 203 204 207 208 211 212 213 214 216 218 219 221 224 225 228 229 232 233 235 237 238 240 242 243 245 b 247 1 0 f # 16659 assign c a 247 1 0 4 6 7 9 11 14 15 17 21 22 23 24 26 27 29 31 33 34 35 37 38 39 43 46 47 50 51 53 54 59 61 64 70 71 72 74 76 77 78 80 81 84 88 89 90 91 96 97 102 104 105 107 113 114 118 119 120 121 122 126 131 132 135 137 138 139 143 145 149 152 154 155 156 160 161 165 169 171 177 178 179 180 182 184 185 187 189 191 193 195 196 197 200 202 203 204 211 212 215 216 217 218 220 225 226 232 235 236 237 244 245 b 247 1 0 4 6 7 9 11 14 15 17 21 22 23 24 26 27 29 31 33 34 35 37 38 39 43 46 47 50 51 53 54 59 61 64 70 71 72 74 76 77 78 80 81 84 88 89 90 91 96 97 102 104 105 107 113 114 118 119 120 121 122 126 131 132 135 137 138 139 143 145 149 152 154 155 156 160 161 165 169 171 177 178 179 180 182 184 185 187 189 191 193 195 196 197 200 202 203 204 211 212 215 216 217 218 220 225 226 232 235 236 237 244 245 # 16660 assign c a 247 1 0 4 6 7 9 11 14 15 17 21 22 23 24 26 27 29 31 33 34 35 37 38 39 43 46 47 50 51 53 54 59 61 64 70 71 72 74 76 77 78 80 81 84 88 89 90 91 96 97 102 104 105 107 113 114 118 119 120 121 122 126 131 132 135 137 138 139 143 145 149 152 154 155 156 160 161 165 169 171 177 178 179 180 182 184 185 187 189 191 193 195 196 197 200 202 203 204 211 212 215 216 217 218 220 225 226 232 235 236 237 244 245 b 247 1 0 0 1 3 5 7 9 10 13 14 15 16 18 21 22 23 24 26 28 29 31 33 34 35 37 38 39 40 48 50 52 54 55 56 57 59 60 61 67 69 70 73 74 75 77 79 81 90 91 95 96 98 99 103 105 106 107 108 110 113 115 117 118 121 125 129 131 134 135 137 138 140 142 146 147 148 149 152 153 154 157 158 159 160 161 167 168 171 172 178 182 184 186 193 194 195 196 198 199 200 202 204 206 209 210 211 212 214 215 216 217 221 222 223 225 226 229 234 235 236 241 242 245 # 16661 assign c a 247 1 0 e b 247 1 0 e # 16662 assign c a 247 1 0 e b 247 1 1 e # 16663 assign c a 247 1 0 e b 247 1 0 e # 16664 assign c a 247 1 0 e b 247 1 1 f # 16665 assign c a 247 1 0 e b 247 1 0 e # 16666 assign c a 247 1 0 e b 247 1 1 1 2 3 4 6 7 8 9 14 15 21 22 25 30 31 34 36 37 38 39 40 44 46 48 50 54 55 60 61 63 65 68 72 73 74 77 78 82 83 84 88 89 90 92 93 96 97 98 99 100 103 105 107 108 109 111 113 114 118 120 122 123 126 128 129 131 132 134 137 138 140 145 146 147 149 150 153 154 155 156 157 159 160 162 163 164 165 166 168 169 170 171 173 176 180 184 186 187 190 192 193 194 195 196 197 200 201 204 206 207 208 209 211 213 214 217 219 222 223 225 226 227 228 229 231 232 233 235 237 238 239 240 242 244 245 # 16667 assign c a 247 1 0 f b 247 1 0 f # 16668 assign c a 247 1 0 f b 247 1 1 e # 16669 assign c a 247 1 0 f b 247 1 0 f # 16670 assign c a 247 1 0 f b 247 1 1 f # 16671 assign c a 247 1 0 f b 247 1 0 f # 16672 assign c a 247 1 0 f b 247 1 1 1 2 3 4 5 6 7 9 10 12 13 14 15 16 19 20 22 23 25 28 30 32 33 35 36 38 39 41 45 50 52 53 54 55 56 59 60 62 63 66 67 69 70 71 74 75 79 80 82 84 85 87 89 94 95 96 97 98 101 102 103 104 105 106 110 111 113 116 117 120 121 122 125 127 129 131 132 134 135 137 138 141 143 144 145 147 148 151 156 157 160 161 164 170 171 177 181 184 185 186 187 193 194 197 199 202 206 207 208 209 210 212 214 215 216 217 218 222 226 227 230 231 235 236 237 238 239 240 241 242 243 244 245 # 16673 assign c a 247 1 0 0 4 8 9 10 15 16 17 19 27 29 33 34 37 39 40 43 44 45 46 51 53 55 56 58 63 64 69 71 73 74 75 77 79 81 82 83 88 90 98 99 101 102 104 105 108 109 111 112 114 118 123 124 125 130 133 134 135 144 145 151 152 153 154 156 158 159 161 163 166 167 168 169 174 179 181 184 186 187 190 191 194 195 196 198 199 201 203 205 207 209 210 211 212 214 215 217 219 222 225 229 230 231 232 234 237 240 b 247 1 0 0 4 8 9 10 15 16 17 19 27 29 33 34 37 39 40 43 44 45 46 51 53 55 56 58 63 64 69 71 73 74 75 77 79 81 82 83 88 90 98 99 101 102 104 105 108 109 111 112 114 118 123 124 125 130 133 134 135 144 145 151 152 153 154 156 158 159 161 163 166 167 168 169 174 179 181 184 186 187 190 191 194 195 196 198 199 201 203 205 207 209 210 211 212 214 215 217 219 222 225 229 230 231 232 234 237 240 # 16674 assign c a 247 1 0 0 4 8 9 10 15 16 17 19 27 29 33 34 37 39 40 43 44 45 46 51 53 55 56 58 63 64 69 71 73 74 75 77 79 81 82 83 88 90 98 99 101 102 104 105 108 109 111 112 114 118 123 124 125 130 133 134 135 144 145 151 152 153 154 156 158 159 161 163 166 167 168 169 174 179 181 184 186 187 190 191 194 195 196 198 199 201 203 205 207 209 210 211 212 214 215 217 219 222 225 229 230 231 232 234 237 240 b 247 1 1 e # 16675 assign c a 247 1 0 0 1 2 3 5 6 7 9 10 11 12 13 14 15 16 17 22 23 26 27 28 30 31 33 34 36 37 42 45 48 49 50 51 53 54 56 57 59 60 64 66 67 68 69 70 73 74 76 78 80 86 88 89 90 91 96 97 98 99 100 101 104 106 107 112 113 114 116 119 122 123 124 126 127 129 132 133 135 136 138 140 141 142 143 144 145 146 147 150 151 152 153 155 156 158 164 165 167 171 174 175 177 178 185 189 191 193 196 197 200 201 205 208 209 210 211 215 216 218 222 223 226 228 230 231 232 233 236 238 239 241 242 243 244 245 246 b 247 1 0 0 1 2 3 5 6 7 9 10 11 12 13 14 15 16 17 22 23 26 27 28 30 31 33 34 36 37 42 45 48 49 50 51 53 54 56 57 59 60 64 66 67 68 69 70 73 74 76 78 80 86 88 89 90 91 96 97 98 99 100 101 104 106 107 112 113 114 116 119 122 123 124 126 127 129 132 133 135 136 138 140 141 142 143 144 145 146 147 150 151 152 153 155 156 158 164 165 167 171 174 175 177 178 185 189 191 193 196 197 200 201 205 208 209 210 211 215 216 218 222 223 226 228 230 231 232 233 236 238 239 241 242 243 244 245 246 # 16676 assign c a 247 1 0 0 1 2 3 5 6 7 9 10 11 12 13 14 15 16 17 22 23 26 27 28 30 31 33 34 36 37 42 45 48 49 50 51 53 54 56 57 59 60 64 66 67 68 69 70 73 74 76 78 80 86 88 89 90 91 96 97 98 99 100 101 104 106 107 112 113 114 116 119 122 123 124 126 127 129 132 133 135 136 138 140 141 142 143 144 145 146 147 150 151 152 153 155 156 158 164 165 167 171 174 175 177 178 185 189 191 193 196 197 200 201 205 208 209 210 211 215 216 218 222 223 226 228 230 231 232 233 236 238 239 241 242 243 244 245 246 b 247 1 1 f # 16677 assign c a 247 1 0 0 2 4 7 8 10 13 14 16 17 18 20 22 23 24 25 27 28 31 32 34 35 38 40 46 50 52 53 57 61 62 64 65 69 70 71 75 76 77 82 84 85 86 88 89 90 91 92 93 95 96 99 101 102 103 106 107 111 112 113 114 115 116 117 119 120 121 122 124 125 131 134 135 136 137 138 139 141 142 144 145 146 147 150 154 155 157 159 161 162 163 165 166 168 173 174 176 177 180 184 189 191 192 194 200 201 202 204 206 210 212 217 218 219 221 228 229 230 231 232 236 238 240 241 244 245 246 b 247 1 0 0 2 4 7 8 10 13 14 16 17 18 20 22 23 24 25 27 28 31 32 34 35 38 40 46 50 52 53 57 61 62 64 65 69 70 71 75 76 77 82 84 85 86 88 89 90 91 92 93 95 96 99 101 102 103 106 107 111 112 113 114 115 116 117 119 120 121 122 124 125 131 134 135 136 137 138 139 141 142 144 145 146 147 150 154 155 157 159 161 162 163 165 166 168 173 174 176 177 180 184 189 191 192 194 200 201 202 204 206 210 212 217 218 219 221 228 229 230 231 232 236 238 240 241 244 245 246 # 16678 assign c a 247 1 0 0 2 4 7 8 10 13 14 16 17 18 20 22 23 24 25 27 28 31 32 34 35 38 40 46 50 52 53 57 61 62 64 65 69 70 71 75 76 77 82 84 85 86 88 89 90 91 92 93 95 96 99 101 102 103 106 107 111 112 113 114 115 116 117 119 120 121 122 124 125 131 134 135 136 137 138 139 141 142 144 145 146 147 150 154 155 157 159 161 162 163 165 166 168 173 174 176 177 180 184 189 191 192 194 200 201 202 204 206 210 212 217 218 219 221 228 229 230 231 232 236 238 240 241 244 245 246 b 247 1 1 1 2 5 6 8 9 10 12 13 16 17 18 20 21 23 24 25 28 33 34 36 38 39 41 44 46 47 50 51 54 60 61 62 64 66 68 69 72 74 75 76 80 84 86 87 88 91 92 93 94 95 97 102 104 105 106 107 112 114 115 116 118 120 121 123 124 128 129 130 133 134 136 137 139 144 145 146 147 149 152 154 155 156 159 165 166 167 168 169 170 171 179 180 182 183 184 185 187 189 191 192 193 196 197 200 205 206 207 208 211 212 214 215 219 220 221 222 223 224 225 228 230 231 232 238 240 244 245 # 16679 assign c a 247 1 1 e b 247 1 1 e # 16680 assign c a 247 1 1 e b 247 0 0 e # 16681 assign c a 247 1 1 e b 247 1 1 e # 16682 assign c a 247 1 1 e b 247 0 0 f # 16683 assign c a 247 1 1 e b 247 1 1 e # 16684 assign c a 247 1 1 e b 247 0 0 2 5 11 13 14 16 18 19 20 22 23 24 30 31 35 37 38 39 40 42 45 51 54 56 58 61 63 65 66 69 73 74 75 76 78 79 82 83 85 91 93 94 98 99 107 110 111 113 114 115 116 120 121 122 125 126 127 129 130 132 134 136 143 146 148 151 152 154 157 162 164 165 166 167 169 170 171 174 177 178 180 182 183 184 185 187 188 189 194 199 203 207 208 209 211 214 215 218 219 223 224 225 229 231 232 233 234 236 237 239 240 241 242 244 245 # 16685 assign c a 247 1 1 f b 247 1 1 f # 16686 assign c a 247 1 1 f b 247 0 0 e # 16687 assign c a 247 1 1 f b 247 1 1 f # 16688 assign c a 247 1 1 f b 247 0 0 f # 16689 assign c a 247 1 1 f b 247 1 1 f # 16690 assign c a 247 1 1 f b 247 0 0 4 5 7 8 12 15 18 19 21 24 25 27 28 32 35 37 38 39 45 47 48 52 53 55 56 57 58 59 60 61 62 63 67 70 71 73 75 76 77 78 79 82 84 86 87 89 92 94 96 98 100 101 104 105 108 109 116 118 119 123 124 127 128 132 133 134 135 136 137 139 140 144 145 152 153 155 156 157 158 159 160 163 165 166 168 169 171 173 177 178 179 184 185 187 190 192 193 196 198 199 202 203 204 206 208 209 212 215 217 218 219 220 221 223 224 225 226 227 228 229 230 232 233 234 235 236 237 239 240 241 243 245 246 # 16691 assign c a 247 1 1 2 11 13 14 16 19 26 27 30 31 32 36 37 38 40 41 44 45 46 47 50 51 52 55 56 58 60 61 63 69 72 73 75 76 78 81 85 88 91 92 93 97 100 101 102 103 104 106 109 110 111 112 113 116 119 120 121 123 124 125 126 127 128 137 138 139 140 142 146 148 150 155 158 160 162 164 165 168 171 172 177 182 184 185 190 191 192 195 197 198 200 203 206 207 211 212 213 215 216 217 224 226 229 230 233 234 235 237 238 239 241 242 244 245 b 247 1 1 2 11 13 14 16 19 26 27 30 31 32 36 37 38 40 41 44 45 46 47 50 51 52 55 56 58 60 61 63 69 72 73 75 76 78 81 85 88 91 92 93 97 100 101 102 103 104 106 109 110 111 112 113 116 119 120 121 123 124 125 126 127 128 137 138 139 140 142 146 148 150 155 158 160 162 164 165 168 171 172 177 182 184 185 190 191 192 195 197 198 200 203 206 207 211 212 213 215 216 217 224 226 229 230 233 234 235 237 238 239 241 242 244 245 # 16692 assign c a 247 1 1 2 11 13 14 16 19 26 27 30 31 32 36 37 38 40 41 44 45 46 47 50 51 52 55 56 58 60 61 63 69 72 73 75 76 78 81 85 88 91 92 93 97 100 101 102 103 104 106 109 110 111 112 113 116 119 120 121 123 124 125 126 127 128 137 138 139 140 142 146 148 150 155 158 160 162 164 165 168 171 172 177 182 184 185 190 191 192 195 197 198 200 203 206 207 211 212 213 215 216 217 224 226 229 230 233 234 235 237 238 239 241 242 244 245 b 247 0 0 e # 16693 assign c a 247 1 1 0 1 2 4 8 9 14 17 22 24 25 28 30 31 32 33 35 37 40 43 44 49 51 57 58 60 61 63 64 65 66 72 73 77 78 79 80 82 84 86 89 90 92 95 96 98 102 105 106 107 108 110 112 113 114 118 119 122 123 124 126 127 129 131 133 135 136 137 138 139 141 144 145 146 150 151 152 153 154 155 159 161 162 164 165 167 168 169 172 173 174 176 178 180 181 182 183 184 185 186 187 190 192 194 195 201 202 203 204 205 210 212 213 215 217 218 219 224 226 230 231 233 234 236 238 239 b 247 1 1 0 1 2 4 8 9 14 17 22 24 25 28 30 31 32 33 35 37 40 43 44 49 51 57 58 60 61 63 64 65 66 72 73 77 78 79 80 82 84 86 89 90 92 95 96 98 102 105 106 107 108 110 112 113 114 118 119 122 123 124 126 127 129 131 133 135 136 137 138 139 141 144 145 146 150 151 152 153 154 155 159 161 162 164 165 167 168 169 172 173 174 176 178 180 181 182 183 184 185 186 187 190 192 194 195 201 202 203 204 205 210 212 213 215 217 218 219 224 226 230 231 233 234 236 238 239 # 16694 assign c a 247 1 1 0 1 2 4 8 9 14 17 22 24 25 28 30 31 32 33 35 37 40 43 44 49 51 57 58 60 61 63 64 65 66 72 73 77 78 79 80 82 84 86 89 90 92 95 96 98 102 105 106 107 108 110 112 113 114 118 119 122 123 124 126 127 129 131 133 135 136 137 138 139 141 144 145 146 150 151 152 153 154 155 159 161 162 164 165 167 168 169 172 173 174 176 178 180 181 182 183 184 185 186 187 190 192 194 195 201 202 203 204 205 210 212 213 215 217 218 219 224 226 230 231 233 234 236 238 239 b 247 0 0 f # 16695 assign c a 247 1 1 0 2 4 6 7 9 10 11 14 16 17 18 20 22 23 24 26 28 32 34 35 36 37 38 40 41 52 54 56 57 58 59 64 67 68 69 71 72 73 74 75 79 80 81 82 83 85 88 89 90 94 95 98 101 103 104 106 107 108 110 111 112 113 116 117 119 120 123 124 126 129 130 131 132 133 134 137 139 140 142 143 144 147 148 149 151 153 154 155 156 157 161 164 165 166 168 171 173 174 177 180 181 182 183 185 186 190 191 197 199 201 202 203 204 207 215 216 223 225 226 227 228 230 231 234 235 236 237 238 242 243 245 b 247 1 1 0 2 4 6 7 9 10 11 14 16 17 18 20 22 23 24 26 28 32 34 35 36 37 38 40 41 52 54 56 57 58 59 64 67 68 69 71 72 73 74 75 79 80 81 82 83 85 88 89 90 94 95 98 101 103 104 106 107 108 110 111 112 113 116 117 119 120 123 124 126 129 130 131 132 133 134 137 139 140 142 143 144 147 148 149 151 153 154 155 156 157 161 164 165 166 168 171 173 174 177 180 181 182 183 185 186 190 191 197 199 201 202 203 204 207 215 216 223 225 226 227 228 230 231 234 235 236 237 238 242 243 245 # 16696 assign c a 247 1 1 0 2 4 6 7 9 10 11 14 16 17 18 20 22 23 24 26 28 32 34 35 36 37 38 40 41 52 54 56 57 58 59 64 67 68 69 71 72 73 74 75 79 80 81 82 83 85 88 89 90 94 95 98 101 103 104 106 107 108 110 111 112 113 116 117 119 120 123 124 126 129 130 131 132 133 134 137 139 140 142 143 144 147 148 149 151 153 154 155 156 157 161 164 165 166 168 171 173 174 177 180 181 182 183 185 186 190 191 197 199 201 202 203 204 207 215 216 223 225 226 227 228 230 231 234 235 236 237 238 242 243 245 b 247 0 0 2 3 4 5 12 13 14 15 18 21 23 26 27 28 29 32 35 37 39 41 42 44 45 47 49 51 52 54 55 56 57 58 59 64 65 67 68 70 73 75 76 77 78 80 84 87 88 90 92 94 95 98 100 103 105 106 107 108 109 114 115 116 118 119 120 123 124 126 127 132 133 136 142 144 145 147 152 153 156 160 161 162 163 165 166 170 172 173 174 175 176 180 181 182 184 186 187 193 194 195 196 197 198 201 202 203 205 206 211 215 218 219 220 221 224 226 227 229 232 233 236 239 241 242 243 246 # 16697 assign c a 247 1 1 e b 247 1 1 e # 16698 assign c a 247 1 1 e b 247 0 1 e # 16699 assign c a 247 1 1 e b 247 1 1 e # 16700 assign c a 247 1 1 e b 247 0 1 f # 16701 assign c a 247 1 1 e b 247 1 1 e # 16702 assign c a 247 1 1 e b 247 0 1 0 1 3 4 6 14 15 16 17 21 22 25 27 28 29 30 31 32 35 36 40 42 44 47 49 50 51 53 55 57 58 60 63 64 65 66 69 70 71 76 78 81 82 83 84 88 90 91 92 93 96 98 99 101 102 103 106 108 109 111 112 114 115 116 118 119 121 124 125 126 129 135 136 138 144 146 147 149 151 152 153 156 157 158 160 162 164 165 166 167 169 173 174 176 177 180 181 184 185 186 187 188 189 190 193 194 196 197 199 200 206 208 209 210 211 212 216 219 223 224 225 227 228 230 232 234 246 # 16703 assign c a 247 1 1 f b 247 1 1 f # 16704 assign c a 247 1 1 f b 247 0 1 e # 16705 assign c a 247 1 1 f b 247 1 1 f # 16706 assign c a 247 1 1 f b 247 0 1 f # 16707 assign c a 247 1 1 f b 247 1 1 f # 16708 assign c a 247 1 1 f b 247 0 1 1 2 4 7 10 11 14 15 17 19 21 23 27 28 29 34 36 39 40 42 43 44 45 46 48 50 55 56 59 61 63 65 71 72 74 76 77 78 79 80 81 82 84 86 87 88 91 93 94 95 96 97 99 102 104 105 106 107 108 111 114 116 117 118 123 126 127 130 131 132 133 134 136 137 139 141 146 147 149 151 153 154 157 163 168 169 173 174 175 178 179 182 185 186 188 190 191 192 194 198 202 203 204 208 210 213 214 215 217 226 227 228 229 231 232 234 235 236 239 242 243 244 245 246 # 16709 assign c a 247 1 1 2 3 4 6 7 8 10 11 12 15 18 21 22 23 25 26 28 29 35 38 41 42 47 48 51 53 54 55 56 57 59 60 63 64 65 66 68 69 72 74 75 76 78 80 81 83 84 86 87 89 90 101 102 103 105 106 109 110 111 112 114 115 116 117 118 120 121 125 128 129 130 132 138 140 143 144 150 151 152 156 157 158 159 160 163 164 168 169 170 171 176 177 178 179 182 184 187 188 190 191 192 193 195 197 198 200 201 202 204 207 210 211 212 213 214 216 219 220 221 222 224 228 230 231 232 233 234 235 238 239 240 246 b 247 1 1 2 3 4 6 7 8 10 11 12 15 18 21 22 23 25 26 28 29 35 38 41 42 47 48 51 53 54 55 56 57 59 60 63 64 65 66 68 69 72 74 75 76 78 80 81 83 84 86 87 89 90 101 102 103 105 106 109 110 111 112 114 115 116 117 118 120 121 125 128 129 130 132 138 140 143 144 150 151 152 156 157 158 159 160 163 164 168 169 170 171 176 177 178 179 182 184 187 188 190 191 192 193 195 197 198 200 201 202 204 207 210 211 212 213 214 216 219 220 221 222 224 228 230 231 232 233 234 235 238 239 240 246 # 16710 assign c a 247 1 1 2 3 4 6 7 8 10 11 12 15 18 21 22 23 25 26 28 29 35 38 41 42 47 48 51 53 54 55 56 57 59 60 63 64 65 66 68 69 72 74 75 76 78 80 81 83 84 86 87 89 90 101 102 103 105 106 109 110 111 112 114 115 116 117 118 120 121 125 128 129 130 132 138 140 143 144 150 151 152 156 157 158 159 160 163 164 168 169 170 171 176 177 178 179 182 184 187 188 190 191 192 193 195 197 198 200 201 202 204 207 210 211 212 213 214 216 219 220 221 222 224 228 230 231 232 233 234 235 238 239 240 246 b 247 0 1 e # 16711 assign c a 247 1 1 1 4 6 11 13 15 16 18 19 25 26 27 30 33 34 35 37 40 41 45 48 50 52 54 55 58 59 60 63 65 66 67 68 71 72 74 78 81 82 87 88 89 91 93 94 95 96 97 98 100 101 103 107 110 111 112 113 118 122 123 125 126 127 129 132 133 136 137 138 141 144 145 147 151 152 154 156 157 161 162 170 171 174 180 183 184 185 187 188 195 196 197 202 203 204 205 207 212 213 215 216 217 221 222 224 227 230 231 232 233 234 236 237 241 242 244 b 247 1 1 1 4 6 11 13 15 16 18 19 25 26 27 30 33 34 35 37 40 41 45 48 50 52 54 55 58 59 60 63 65 66 67 68 71 72 74 78 81 82 87 88 89 91 93 94 95 96 97 98 100 101 103 107 110 111 112 113 118 122 123 125 126 127 129 132 133 136 137 138 141 144 145 147 151 152 154 156 157 161 162 170 171 174 180 183 184 185 187 188 195 196 197 202 203 204 205 207 212 213 215 216 217 221 222 224 227 230 231 232 233 234 236 237 241 242 244 # 16712 assign c a 247 1 1 1 4 6 11 13 15 16 18 19 25 26 27 30 33 34 35 37 40 41 45 48 50 52 54 55 58 59 60 63 65 66 67 68 71 72 74 78 81 82 87 88 89 91 93 94 95 96 97 98 100 101 103 107 110 111 112 113 118 122 123 125 126 127 129 132 133 136 137 138 141 144 145 147 151 152 154 156 157 161 162 170 171 174 180 183 184 185 187 188 195 196 197 202 203 204 205 207 212 213 215 216 217 221 222 224 227 230 231 232 233 234 236 237 241 242 244 b 247 0 1 f # 16713 assign c a 247 1 1 2 3 6 7 9 13 15 18 19 21 23 26 27 30 31 33 34 35 38 39 42 43 44 46 51 53 59 63 64 66 68 69 70 73 74 77 78 79 85 86 87 91 93 94 97 98 99 100 101 103 104 107 108 109 110 114 117 120 121 124 125 126 127 128 129 130 137 140 141 142 143 149 150 154 157 159 163 165 167 168 175 176 177 179 180 185 187 188 189 190 192 199 200 201 205 207 208 210 211 212 214 218 219 221 224 226 228 231 233 236 237 239 243 244 b 247 1 1 2 3 6 7 9 13 15 18 19 21 23 26 27 30 31 33 34 35 38 39 42 43 44 46 51 53 59 63 64 66 68 69 70 73 74 77 78 79 85 86 87 91 93 94 97 98 99 100 101 103 104 107 108 109 110 114 117 120 121 124 125 126 127 128 129 130 137 140 141 142 143 149 150 154 157 159 163 165 167 168 175 176 177 179 180 185 187 188 189 190 192 199 200 201 205 207 208 210 211 212 214 218 219 221 224 226 228 231 233 236 237 239 243 244 # 16714 assign c a 247 1 1 2 3 6 7 9 13 15 18 19 21 23 26 27 30 31 33 34 35 38 39 42 43 44 46 51 53 59 63 64 66 68 69 70 73 74 77 78 79 85 86 87 91 93 94 97 98 99 100 101 103 104 107 108 109 110 114 117 120 121 124 125 126 127 128 129 130 137 140 141 142 143 149 150 154 157 159 163 165 167 168 175 176 177 179 180 185 187 188 189 190 192 199 200 201 205 207 208 210 211 212 214 218 219 221 224 226 228 231 233 236 237 239 243 244 b 247 0 1 0 1 3 5 8 9 12 15 16 20 21 22 23 28 29 31 32 33 34 35 36 39 40 41 42 43 47 48 49 51 52 53 55 57 61 69 70 73 75 77 78 81 82 84 91 93 94 95 96 98 100 101 102 104 108 109 110 112 113 114 115 117 121 123 130 133 134 138 141 142 147 151 154 155 156 160 162 165 166 168 169 170 175 176 177 178 181 192 195 196 199 200 204 205 207 211 213 215 216 218 220 222 223 224 226 227 230 233 234 236 238 240 242 243 244 246 # 16715 assign c a 247 1 1 e b 247 1 1 e # 16716 assign c a 247 1 1 e b 247 1 0 e # 16717 assign c a 247 1 1 e b 247 1 1 e # 16718 assign c a 247 1 1 e b 247 1 0 f # 16719 assign c a 247 1 1 e b 247 1 1 e # 16720 assign c a 247 1 1 e b 247 1 0 0 1 2 4 8 11 12 16 21 24 27 29 34 38 40 41 43 45 49 50 52 53 54 59 61 63 64 66 68 69 70 72 76 78 82 83 85 87 89 90 96 98 99 100 101 103 106 108 109 115 116 117 118 121 122 123 125 130 134 135 136 137 138 139 140 142 143 144 146 147 148 150 153 156 157 158 159 161 163 164 166 167 169 171 174 175 176 177 178 179 181 185 186 188 189 196 197 199 200 201 202 203 205 206 207 208 209 210 211 213 215 216 222 223 224 225 227 228 230 231 233 234 236 237 243 245 246 # 16721 assign c a 247 1 1 f b 247 1 1 f # 16722 assign c a 247 1 1 f b 247 1 0 e # 16723 assign c a 247 1 1 f b 247 1 1 f # 16724 assign c a 247 1 1 f b 247 1 0 f # 16725 assign c a 247 1 1 f b 247 1 1 f # 16726 assign c a 247 1 1 f b 247 1 0 0 4 5 8 10 15 17 18 19 20 24 25 26 27 28 29 30 31 35 36 37 39 40 47 49 50 60 64 65 67 69 72 73 74 77 79 80 82 84 86 88 91 92 93 94 95 99 100 101 103 104 107 109 110 113 114 117 118 119 122 124 125 126 128 131 133 134 141 142 143 144 147 150 153 154 157 158 163 166 167 168 173 175 177 178 179 181 183 184 185 188 190 191 192 194 196 197 198 199 200 205 207 208 211 213 214 215 216 217 221 223 227 228 230 231 233 235 236 240 241 243 244 246 # 16727 assign c a 247 1 1 3 9 10 12 13 15 18 20 22 25 26 31 34 35 36 42 43 45 46 47 49 50 53 54 57 58 59 60 61 62 65 69 71 74 82 84 86 89 92 94 99 101 102 106 108 110 113 114 117 118 122 124 128 129 131 132 136 138 139 140 141 142 145 146 147 149 151 153 157 158 160 163 165 166 169 170 171 173 175 176 177 178 180 181 183 184 189 190 191 193 194 195 196 197 198 199 201 202 203 204 206 207 209 210 211 212 214 215 216 219 221 222 224 225 227 230 231 233 234 236 237 238 240 241 b 247 1 1 3 9 10 12 13 15 18 20 22 25 26 31 34 35 36 42 43 45 46 47 49 50 53 54 57 58 59 60 61 62 65 69 71 74 82 84 86 89 92 94 99 101 102 106 108 110 113 114 117 118 122 124 128 129 131 132 136 138 139 140 141 142 145 146 147 149 151 153 157 158 160 163 165 166 169 170 171 173 175 176 177 178 180 181 183 184 189 190 191 193 194 195 196 197 198 199 201 202 203 204 206 207 209 210 211 212 214 215 216 219 221 222 224 225 227 230 231 233 234 236 237 238 240 241 # 16728 assign c a 247 1 1 3 9 10 12 13 15 18 20 22 25 26 31 34 35 36 42 43 45 46 47 49 50 53 54 57 58 59 60 61 62 65 69 71 74 82 84 86 89 92 94 99 101 102 106 108 110 113 114 117 118 122 124 128 129 131 132 136 138 139 140 141 142 145 146 147 149 151 153 157 158 160 163 165 166 169 170 171 173 175 176 177 178 180 181 183 184 189 190 191 193 194 195 196 197 198 199 201 202 203 204 206 207 209 210 211 212 214 215 216 219 221 222 224 225 227 230 231 233 234 236 237 238 240 241 b 247 1 0 e # 16729 assign c a 247 1 1 0 3 4 6 9 13 14 16 17 20 23 24 30 32 35 36 38 46 49 51 53 54 56 58 60 62 63 64 68 70 72 74 76 79 81 82 83 84 85 86 87 89 91 94 95 96 99 100 102 103 105 106 111 118 129 130 133 134 135 136 137 138 139 142 143 147 148 151 153 155 156 157 160 162 165 166 167 168 169 170 173 175 176 179 180 181 182 190 192 193 195 198 201 203 204 205 207 209 211 212 218 219 220 221 222 223 226 227 228 229 232 233 237 239 240 241 242 244 245 246 b 247 1 1 0 3 4 6 9 13 14 16 17 20 23 24 30 32 35 36 38 46 49 51 53 54 56 58 60 62 63 64 68 70 72 74 76 79 81 82 83 84 85 86 87 89 91 94 95 96 99 100 102 103 105 106 111 118 129 130 133 134 135 136 137 138 139 142 143 147 148 151 153 155 156 157 160 162 165 166 167 168 169 170 173 175 176 179 180 181 182 190 192 193 195 198 201 203 204 205 207 209 211 212 218 219 220 221 222 223 226 227 228 229 232 233 237 239 240 241 242 244 245 246 # 16730 assign c a 247 1 1 0 3 4 6 9 13 14 16 17 20 23 24 30 32 35 36 38 46 49 51 53 54 56 58 60 62 63 64 68 70 72 74 76 79 81 82 83 84 85 86 87 89 91 94 95 96 99 100 102 103 105 106 111 118 129 130 133 134 135 136 137 138 139 142 143 147 148 151 153 155 156 157 160 162 165 166 167 168 169 170 173 175 176 179 180 181 182 190 192 193 195 198 201 203 204 205 207 209 211 212 218 219 220 221 222 223 226 227 228 229 232 233 237 239 240 241 242 244 245 246 b 247 1 0 f # 16731 assign c a 247 1 1 8 9 10 11 12 13 14 17 19 23 24 25 26 28 29 33 34 35 36 37 38 39 40 41 44 46 58 60 62 64 65 66 67 68 69 70 72 74 75 76 77 78 79 80 84 85 86 89 90 93 101 102 105 107 110 114 117 119 120 122 124 128 129 130 132 134 135 138 139 141 143 147 149 150 152 153 155 157 160 162 164 165 167 168 170 173 175 177 178 181 182 187 189 190 191 193 195 197 198 201 202 203 204 206 207 209 211 212 217 218 219 220 221 222 223 224 226 229 230 231 232 233 234 237 240 241 246 b 247 1 1 8 9 10 11 12 13 14 17 19 23 24 25 26 28 29 33 34 35 36 37 38 39 40 41 44 46 58 60 62 64 65 66 67 68 69 70 72 74 75 76 77 78 79 80 84 85 86 89 90 93 101 102 105 107 110 114 117 119 120 122 124 128 129 130 132 134 135 138 139 141 143 147 149 150 152 153 155 157 160 162 164 165 167 168 170 173 175 177 178 181 182 187 189 190 191 193 195 197 198 201 202 203 204 206 207 209 211 212 217 218 219 220 221 222 223 224 226 229 230 231 232 233 234 237 240 241 246 # 16732 assign c a 247 1 1 8 9 10 11 12 13 14 17 19 23 24 25 26 28 29 33 34 35 36 37 38 39 40 41 44 46 58 60 62 64 65 66 67 68 69 70 72 74 75 76 77 78 79 80 84 85 86 89 90 93 101 102 105 107 110 114 117 119 120 122 124 128 129 130 132 134 135 138 139 141 143 147 149 150 152 153 155 157 160 162 164 165 167 168 170 173 175 177 178 181 182 187 189 190 191 193 195 197 198 201 202 203 204 206 207 209 211 212 217 218 219 220 221 222 223 224 226 229 230 231 232 233 234 237 240 241 246 b 247 1 0 0 2 4 5 7 10 11 12 13 16 21 22 23 24 25 28 29 30 31 32 33 35 38 39 40 41 42 43 44 47 50 51 53 54 60 63 66 67 68 69 70 71 72 74 75 76 77 78 81 83 87 89 93 101 105 108 112 113 116 117 121 122 123 124 127 128 134 135 140 141 142 143 149 150 151 152 153 157 161 162 163 165 166 167 169 172 174 176 178 179 180 181 182 183 184 188 189 190 193 194 195 196 197 200 201 204 206 207 208 210 211 215 216 217 219 221 222 223 224 225 226 228 230 232 234 235 236 237 238 244 245 # 16733 assign c a 247 1 1 e b 247 1 1 e # 16734 assign c a 247 1 1 e b 247 1 1 e # 16735 assign c a 247 1 1 e b 247 1 1 e # 16736 assign c a 247 1 1 e b 247 1 1 f # 16737 assign c a 247 1 1 e b 247 1 1 e # 16738 assign c a 247 1 1 e b 247 1 1 0 2 4 5 7 10 11 13 14 15 16 17 18 19 20 22 24 30 31 32 35 37 38 39 42 43 52 57 58 59 62 63 64 66 70 71 72 73 77 78 79 82 83 84 90 91 92 93 94 95 96 98 100 101 102 103 104 107 110 111 112 113 114 115 118 119 121 124 126 127 128 129 130 131 132 133 134 135 138 139 140 142 143 148 153 156 158 159 161 164 169 174 175 176 180 182 186 188 189 190 192 194 195 196 197 200 201 204 207 208 211 212 213 219 220 223 224 225 227 228 229 230 231 236 237 239 242 # 16739 assign c a 247 1 1 f b 247 1 1 f # 16740 assign c a 247 1 1 f b 247 1 1 e # 16741 assign c a 247 1 1 f b 247 1 1 f # 16742 assign c a 247 1 1 f b 247 1 1 f # 16743 assign c a 247 1 1 f b 247 1 1 f # 16744 assign c a 247 1 1 f b 247 1 1 0 1 2 3 4 6 9 10 12 13 15 17 19 20 22 23 26 27 28 31 32 35 36 44 45 49 50 53 54 55 57 60 61 63 64 65 66 67 69 70 71 77 79 80 82 83 85 86 87 88 91 92 93 94 95 98 99 101 103 105 106 112 117 119 121 122 124 128 129 130 132 135 139 140 141 142 143 144 149 152 153 154 157 158 160 161 162 163 166 172 174 175 179 180 183 185 187 188 189 191 192 194 195 196 200 201 203 204 206 208 209 211 215 217 218 220 224 227 228 229 230 232 235 236 237 239 240 244 245 # 16745 assign c a 247 1 1 1 3 5 7 8 9 11 14 15 19 23 25 27 28 33 35 36 37 38 39 43 44 46 47 50 51 54 55 56 59 60 61 62 63 66 68 70 72 76 80 82 84 85 86 87 88 91 94 95 96 98 99 100 101 103 105 109 111 115 118 120 122 123 124 125 126 129 132 134 140 141 145 147 148 149 150 151 153 154 155 156 159 161 163 169 170 172 174 177 178 180 181 182 184 185 187 189 190 193 195 197 199 204 205 207 208 211 216 221 222 223 224 228 229 230 232 234 235 238 240 241 246 b 247 1 1 1 3 5 7 8 9 11 14 15 19 23 25 27 28 33 35 36 37 38 39 43 44 46 47 50 51 54 55 56 59 60 61 62 63 66 68 70 72 76 80 82 84 85 86 87 88 91 94 95 96 98 99 100 101 103 105 109 111 115 118 120 122 123 124 125 126 129 132 134 140 141 145 147 148 149 150 151 153 154 155 156 159 161 163 169 170 172 174 177 178 180 181 182 184 185 187 189 190 193 195 197 199 204 205 207 208 211 216 221 222 223 224 228 229 230 232 234 235 238 240 241 246 # 16746 assign c a 247 1 1 1 3 5 7 8 9 11 14 15 19 23 25 27 28 33 35 36 37 38 39 43 44 46 47 50 51 54 55 56 59 60 61 62 63 66 68 70 72 76 80 82 84 85 86 87 88 91 94 95 96 98 99 100 101 103 105 109 111 115 118 120 122 123 124 125 126 129 132 134 140 141 145 147 148 149 150 151 153 154 155 156 159 161 163 169 170 172 174 177 178 180 181 182 184 185 187 189 190 193 195 197 199 204 205 207 208 211 216 221 222 223 224 228 229 230 232 234 235 238 240 241 246 b 247 1 1 e # 16747 assign c a 247 1 1 1 2 5 7 8 15 18 19 20 21 22 23 24 25 27 28 29 30 32 33 34 35 36 37 38 39 42 43 44 46 47 48 49 50 52 53 57 62 64 67 71 72 74 76 77 80 82 86 87 91 92 93 94 95 99 101 102 105 106 108 110 111 112 113 115 118 120 121 124 129 131 132 137 143 144 146 148 149 150 152 153 154 155 159 160 161 162 163 165 166 167 168 172 175 176 178 179 180 181 183 184 187 189 190 195 200 201 202 205 210 212 214 215 218 219 223 224 225 228 229 230 231 232 233 235 236 239 240 243 b 247 1 1 1 2 5 7 8 15 18 19 20 21 22 23 24 25 27 28 29 30 32 33 34 35 36 37 38 39 42 43 44 46 47 48 49 50 52 53 57 62 64 67 71 72 74 76 77 80 82 86 87 91 92 93 94 95 99 101 102 105 106 108 110 111 112 113 115 118 120 121 124 129 131 132 137 143 144 146 148 149 150 152 153 154 155 159 160 161 162 163 165 166 167 168 172 175 176 178 179 180 181 183 184 187 189 190 195 200 201 202 205 210 212 214 215 218 219 223 224 225 228 229 230 231 232 233 235 236 239 240 243 # 16748 assign c a 247 1 1 1 2 5 7 8 15 18 19 20 21 22 23 24 25 27 28 29 30 32 33 34 35 36 37 38 39 42 43 44 46 47 48 49 50 52 53 57 62 64 67 71 72 74 76 77 80 82 86 87 91 92 93 94 95 99 101 102 105 106 108 110 111 112 113 115 118 120 121 124 129 131 132 137 143 144 146 148 149 150 152 153 154 155 159 160 161 162 163 165 166 167 168 172 175 176 178 179 180 181 183 184 187 189 190 195 200 201 202 205 210 212 214 215 218 219 223 224 225 228 229 230 231 232 233 235 236 239 240 243 b 247 1 1 f # 16749 assign c a 247 1 1 0 1 3 4 5 7 8 15 16 17 19 20 21 23 26 28 30 31 32 33 34 35 36 38 40 41 42 43 45 46 48 51 52 56 58 59 60 62 63 65 66 70 75 78 84 85 86 87 89 90 91 93 94 95 96 98 100 101 105 107 108 114 117 118 120 121 123 126 128 129 131 133 135 136 139 140 141 150 151 154 155 156 157 158 163 166 168 170 171 172 174 178 179 180 181 182 185 186 187 189 191 193 194 195 197 200 202 203 205 207 209 210 212 214 215 217 218 219 220 222 225 230 232 233 236 237 240 241 242 b 247 1 1 0 1 3 4 5 7 8 15 16 17 19 20 21 23 26 28 30 31 32 33 34 35 36 38 40 41 42 43 45 46 48 51 52 56 58 59 60 62 63 65 66 70 75 78 84 85 86 87 89 90 91 93 94 95 96 98 100 101 105 107 108 114 117 118 120 121 123 126 128 129 131 133 135 136 139 140 141 150 151 154 155 156 157 158 163 166 168 170 171 172 174 178 179 180 181 182 185 186 187 189 191 193 194 195 197 200 202 203 205 207 209 210 212 214 215 217 218 219 220 222 225 230 232 233 236 237 240 241 242 # 16750 assign c a 247 1 1 0 1 3 4 5 7 8 15 16 17 19 20 21 23 26 28 30 31 32 33 34 35 36 38 40 41 42 43 45 46 48 51 52 56 58 59 60 62 63 65 66 70 75 78 84 85 86 87 89 90 91 93 94 95 96 98 100 101 105 107 108 114 117 118 120 121 123 126 128 129 131 133 135 136 139 140 141 150 151 154 155 156 157 158 163 166 168 170 171 172 174 178 179 180 181 182 185 186 187 189 191 193 194 195 197 200 202 203 205 207 209 210 212 214 215 217 218 219 220 222 225 230 232 233 236 237 240 241 242 b 247 1 1 0 4 5 9 11 13 15 16 19 20 24 26 28 30 32 34 35 38 39 43 45 46 56 58 60 61 62 63 65 67 70 72 77 78 81 82 83 88 90 91 93 95 96 97 98 99 104 105 106 107 108 109 111 112 114 117 122 124 127 129 130 131 136 139 141 142 143 144 149 150 151 152 153 155 158 159 162 163 164 167 168 171 174 176 178 180 182 183 186 188 189 193 195 198 199 200 202 205 212 215 216 220 221 222 224 225 227 229 230 233 234 235 236 238 244 245 # 16751 assign c a 0 0 0 e b 0 0 0 e # 16752 union c a 0 0 0 e b 0 0 0 e # 16753 union c a 0 0 0 e b 0 0 0 e # 16754 union c a 0 0 0 e b 0 0 0 e # 16755 union c a 0 0 0 e b 0 0 0 e # 16756 union c a 0 0 0 e b 0 0 0 # 16757 union c a 0 0 0 e b 0 0 0 e # 16758 union c a 0 0 0 e b 0 0 0 e # 16759 union c a 0 0 0 e b 0 0 0 e # 16760 union c a 0 0 0 e b 0 0 0 e # 16761 union c a 0 0 0 e b 0 0 0 e # 16762 union c a 0 0 0 e b 0 0 0 # 16763 union c a 0 0 0 b 0 0 0 # 16764 union c a 0 0 0 b 0 0 0 e # 16765 union c a 0 0 0 b 0 0 0 # 16766 union c a 0 0 0 b 0 0 0 e # 16767 union c a 0 0 0 b 0 0 0 # 16768 union c a 0 0 0 b 0 0 0 # 16769 union c a 0 0 0 e b 0 0 0 e # 16770 union c a 0 0 0 e b 0 0 1 e # 16771 union c a 0 0 0 e b 0 0 0 e # 16772 union c a 0 0 0 e b 0 0 1 e # 16773 union c a 0 0 0 e b 0 0 0 e # 16774 union c a 0 0 0 e b 0 0 1 # 16775 union c a 0 0 0 e b 0 0 0 e # 16776 union c a 0 0 0 e b 0 0 1 e # 16777 union c a 0 0 0 e b 0 0 0 e # 16778 union c a 0 0 0 e b 0 0 1 e # 16779 union c a 0 0 0 e b 0 0 0 e # 16780 union c a 0 0 0 e b 0 0 1 # 16781 union c a 0 0 0 b 0 0 0 # 16782 union c a 0 0 0 b 0 0 1 e # 16783 union c a 0 0 0 b 0 0 0 # 16784 union c a 0 0 0 b 0 0 1 e # 16785 union c a 0 0 0 b 0 0 0 # 16786 union c a 0 0 0 b 0 0 1 # 16787 union c a 0 0 0 e b 0 0 0 e # 16788 union c a 0 0 0 e b 0 1 0 e # 16789 union c a 0 0 0 e b 0 0 0 e # 16790 union c a 0 0 0 e b 0 1 0 e # 16791 union c a 0 0 0 e b 0 0 0 e # 16792 union c a 0 0 0 e b 0 1 0 # 16793 union c a 0 0 0 e b 0 0 0 e # 16794 union c a 0 0 0 e b 0 1 0 e # 16795 union c a 0 0 0 e b 0 0 0 e # 16796 union c a 0 0 0 e b 0 1 0 e # 16797 union c a 0 0 0 e b 0 0 0 e # 16798 union c a 0 0 0 e b 0 1 0 # 16799 union c a 0 0 0 b 0 0 0 # 16800 union c a 0 0 0 b 0 1 0 e # 16801 union c a 0 0 0 b 0 0 0 # 16802 union c a 0 0 0 b 0 1 0 e # 16803 union c a 0 0 0 b 0 0 0 # 16804 union c a 0 0 0 b 0 1 0 # 16805 union c a 0 0 0 e b 0 0 0 e # 16806 union c a 0 0 0 e b 0 1 1 e # 16807 union c a 0 0 0 e b 0 0 0 e # 16808 union c a 0 0 0 e b 0 1 1 e # 16809 union c a 0 0 0 e b 0 0 0 e # 16810 union c a 0 0 0 e b 0 1 1 # 16811 union c a 0 0 0 e b 0 0 0 e # 16812 union c a 0 0 0 e b 0 1 1 e # 16813 union c a 0 0 0 e b 0 0 0 e # 16814 union c a 0 0 0 e b 0 1 1 e # 16815 union c a 0 0 0 e b 0 0 0 e # 16816 union c a 0 0 0 e b 0 1 1 # 16817 union c a 0 0 0 b 0 0 0 # 16818 union c a 0 0 0 b 0 1 1 e # 16819 union c a 0 0 0 b 0 0 0 # 16820 union c a 0 0 0 b 0 1 1 e # 16821 union c a 0 0 0 b 0 0 0 # 16822 union c a 0 0 0 b 0 1 1 # 16823 union c a 0 0 1 e b 0 0 1 e # 16824 union c a 0 0 1 e b 0 0 0 e # 16825 union c a 0 0 1 e b 0 0 1 e # 16826 union c a 0 0 1 e b 0 0 0 e # 16827 union c a 0 0 1 e b 0 0 1 e # 16828 union c a 0 0 1 e b 0 0 0 # 16829 union c a 0 0 1 e b 0 0 1 e # 16830 union c a 0 0 1 e b 0 0 0 e # 16831 union c a 0 0 1 e b 0 0 1 e # 16832 union c a 0 0 1 e b 0 0 0 e # 16833 union c a 0 0 1 e b 0 0 1 e # 16834 union c a 0 0 1 e b 0 0 0 # 16835 union c a 0 0 1 b 0 0 1 # 16836 union c a 0 0 1 b 0 0 0 e # 16837 union c a 0 0 1 b 0 0 1 # 16838 union c a 0 0 1 b 0 0 0 e # 16839 union c a 0 0 1 b 0 0 1 # 16840 union c a 0 0 1 b 0 0 0 # 16841 union c a 0 0 1 e b 0 0 1 e # 16842 union c a 0 0 1 e b 0 0 1 e # 16843 union c a 0 0 1 e b 0 0 1 e # 16844 union c a 0 0 1 e b 0 0 1 e # 16845 union c a 0 0 1 e b 0 0 1 e # 16846 union c a 0 0 1 e b 0 0 1 # 16847 union c a 0 0 1 e b 0 0 1 e # 16848 union c a 0 0 1 e b 0 0 1 e # 16849 union c a 0 0 1 e b 0 0 1 e # 16850 union c a 0 0 1 e b 0 0 1 e # 16851 union c a 0 0 1 e b 0 0 1 e # 16852 union c a 0 0 1 e b 0 0 1 # 16853 union c a 0 0 1 b 0 0 1 # 16854 union c a 0 0 1 b 0 0 1 e # 16855 union c a 0 0 1 b 0 0 1 # 16856 union c a 0 0 1 b 0 0 1 e # 16857 union c a 0 0 1 b 0 0 1 # 16858 union c a 0 0 1 b 0 0 1 # 16859 union c a 0 0 1 e b 0 0 1 e # 16860 union c a 0 0 1 e b 0 1 0 e # 16861 union c a 0 0 1 e b 0 0 1 e # 16862 union c a 0 0 1 e b 0 1 0 e # 16863 union c a 0 0 1 e b 0 0 1 e # 16864 union c a 0 0 1 e b 0 1 0 # 16865 union c a 0 0 1 e b 0 0 1 e # 16866 union c a 0 0 1 e b 0 1 0 e # 16867 union c a 0 0 1 e b 0 0 1 e # 16868 union c a 0 0 1 e b 0 1 0 e # 16869 union c a 0 0 1 e b 0 0 1 e # 16870 union c a 0 0 1 e b 0 1 0 # 16871 union c a 0 0 1 b 0 0 1 # 16872 union c a 0 0 1 b 0 1 0 e # 16873 union c a 0 0 1 b 0 0 1 # 16874 union c a 0 0 1 b 0 1 0 e # 16875 union c a 0 0 1 b 0 0 1 # 16876 union c a 0 0 1 b 0 1 0 # 16877 union c a 0 0 1 e b 0 0 1 e # 16878 union c a 0 0 1 e b 0 1 1 e # 16879 union c a 0 0 1 e b 0 0 1 e # 16880 union c a 0 0 1 e b 0 1 1 e # 16881 union c a 0 0 1 e b 0 0 1 e # 16882 union c a 0 0 1 e b 0 1 1 # 16883 union c a 0 0 1 e b 0 0 1 e # 16884 union c a 0 0 1 e b 0 1 1 e # 16885 union c a 0 0 1 e b 0 0 1 e # 16886 union c a 0 0 1 e b 0 1 1 e # 16887 union c a 0 0 1 e b 0 0 1 e # 16888 union c a 0 0 1 e b 0 1 1 # 16889 union c a 0 0 1 b 0 0 1 # 16890 union c a 0 0 1 b 0 1 1 e # 16891 union c a 0 0 1 b 0 0 1 # 16892 union c a 0 0 1 b 0 1 1 e # 16893 union c a 0 0 1 b 0 0 1 # 16894 union c a 0 0 1 b 0 1 1 # 16895 union c a 0 1 0 e b 0 1 0 e # 16896 union c a 0 1 0 e b 0 0 0 e # 16897 union c a 0 1 0 e b 0 1 0 e # 16898 union c a 0 1 0 e b 0 0 0 e # 16899 union c a 0 1 0 e b 0 1 0 e # 16900 union c a 0 1 0 e b 0 0 0 # 16901 union c a 0 1 0 e b 0 1 0 e # 16902 union c a 0 1 0 e b 0 0 0 e # 16903 union c a 0 1 0 e b 0 1 0 e # 16904 union c a 0 1 0 e b 0 0 0 e # 16905 union c a 0 1 0 e b 0 1 0 e # 16906 union c a 0 1 0 e b 0 0 0 # 16907 union c a 0 1 0 b 0 1 0 # 16908 union c a 0 1 0 b 0 0 0 e # 16909 union c a 0 1 0 b 0 1 0 # 16910 union c a 0 1 0 b 0 0 0 e # 16911 union c a 0 1 0 b 0 1 0 # 16912 union c a 0 1 0 b 0 0 0 # 16913 union c a 0 1 0 e b 0 1 0 e # 16914 union c a 0 1 0 e b 0 0 1 e # 16915 union c a 0 1 0 e b 0 1 0 e # 16916 union c a 0 1 0 e b 0 0 1 e # 16917 union c a 0 1 0 e b 0 1 0 e # 16918 union c a 0 1 0 e b 0 0 1 # 16919 union c a 0 1 0 e b 0 1 0 e # 16920 union c a 0 1 0 e b 0 0 1 e # 16921 union c a 0 1 0 e b 0 1 0 e # 16922 union c a 0 1 0 e b 0 0 1 e # 16923 union c a 0 1 0 e b 0 1 0 e # 16924 union c a 0 1 0 e b 0 0 1 # 16925 union c a 0 1 0 b 0 1 0 # 16926 union c a 0 1 0 b 0 0 1 e # 16927 union c a 0 1 0 b 0 1 0 # 16928 union c a 0 1 0 b 0 0 1 e # 16929 union c a 0 1 0 b 0 1 0 # 16930 union c a 0 1 0 b 0 0 1 # 16931 union c a 0 1 0 e b 0 1 0 e # 16932 union c a 0 1 0 e b 0 1 0 e # 16933 union c a 0 1 0 e b 0 1 0 e # 16934 union c a 0 1 0 e b 0 1 0 e # 16935 union c a 0 1 0 e b 0 1 0 e # 16936 union c a 0 1 0 e b 0 1 0 # 16937 union c a 0 1 0 e b 0 1 0 e # 16938 union c a 0 1 0 e b 0 1 0 e # 16939 union c a 0 1 0 e b 0 1 0 e # 16940 union c a 0 1 0 e b 0 1 0 e # 16941 union c a 0 1 0 e b 0 1 0 e # 16942 union c a 0 1 0 e b 0 1 0 # 16943 union c a 0 1 0 b 0 1 0 # 16944 union c a 0 1 0 b 0 1 0 e # 16945 union c a 0 1 0 b 0 1 0 # 16946 union c a 0 1 0 b 0 1 0 e # 16947 union c a 0 1 0 b 0 1 0 # 16948 union c a 0 1 0 b 0 1 0 # 16949 union c a 0 1 0 e b 0 1 0 e # 16950 union c a 0 1 0 e b 0 1 1 e # 16951 union c a 0 1 0 e b 0 1 0 e # 16952 union c a 0 1 0 e b 0 1 1 e # 16953 union c a 0 1 0 e b 0 1 0 e # 16954 union c a 0 1 0 e b 0 1 1 # 16955 union c a 0 1 0 e b 0 1 0 e # 16956 union c a 0 1 0 e b 0 1 1 e # 16957 union c a 0 1 0 e b 0 1 0 e # 16958 union c a 0 1 0 e b 0 1 1 e # 16959 union c a 0 1 0 e b 0 1 0 e # 16960 union c a 0 1 0 e b 0 1 1 # 16961 union c a 0 1 0 b 0 1 0 # 16962 union c a 0 1 0 b 0 1 1 e # 16963 union c a 0 1 0 b 0 1 0 # 16964 union c a 0 1 0 b 0 1 1 e # 16965 union c a 0 1 0 b 0 1 0 # 16966 union c a 0 1 0 b 0 1 1 # 16967 union c a 0 1 1 e b 0 1 1 e # 16968 union c a 0 1 1 e b 0 0 0 e # 16969 union c a 0 1 1 e b 0 1 1 e # 16970 union c a 0 1 1 e b 0 0 0 e # 16971 union c a 0 1 1 e b 0 1 1 e # 16972 union c a 0 1 1 e b 0 0 0 # 16973 union c a 0 1 1 e b 0 1 1 e # 16974 union c a 0 1 1 e b 0 0 0 e # 16975 union c a 0 1 1 e b 0 1 1 e # 16976 union c a 0 1 1 e b 0 0 0 e # 16977 union c a 0 1 1 e b 0 1 1 e # 16978 union c a 0 1 1 e b 0 0 0 # 16979 union c a 0 1 1 b 0 1 1 # 16980 union c a 0 1 1 b 0 0 0 e # 16981 union c a 0 1 1 b 0 1 1 # 16982 union c a 0 1 1 b 0 0 0 e # 16983 union c a 0 1 1 b 0 1 1 # 16984 union c a 0 1 1 b 0 0 0 # 16985 union c a 0 1 1 e b 0 1 1 e # 16986 union c a 0 1 1 e b 0 0 1 e # 16987 union c a 0 1 1 e b 0 1 1 e # 16988 union c a 0 1 1 e b 0 0 1 e # 16989 union c a 0 1 1 e b 0 1 1 e # 16990 union c a 0 1 1 e b 0 0 1 # 16991 union c a 0 1 1 e b 0 1 1 e # 16992 union c a 0 1 1 e b 0 0 1 e # 16993 union c a 0 1 1 e b 0 1 1 e # 16994 union c a 0 1 1 e b 0 0 1 e # 16995 union c a 0 1 1 e b 0 1 1 e # 16996 union c a 0 1 1 e b 0 0 1 # 16997 union c a 0 1 1 b 0 1 1 # 16998 union c a 0 1 1 b 0 0 1 e # 16999 union c a 0 1 1 b 0 1 1 # 17000 union c a 0 1 1 b 0 0 1 e # 17001 union c a 0 1 1 b 0 1 1 # 17002 union c a 0 1 1 b 0 0 1 # 17003 union c a 0 1 1 e b 0 1 1 e # 17004 union c a 0 1 1 e b 0 1 0 e # 17005 union c a 0 1 1 e b 0 1 1 e # 17006 union c a 0 1 1 e b 0 1 0 e # 17007 union c a 0 1 1 e b 0 1 1 e # 17008 union c a 0 1 1 e b 0 1 0 # 17009 union c a 0 1 1 e b 0 1 1 e # 17010 union c a 0 1 1 e b 0 1 0 e # 17011 union c a 0 1 1 e b 0 1 1 e # 17012 union c a 0 1 1 e b 0 1 0 e # 17013 union c a 0 1 1 e b 0 1 1 e # 17014 union c a 0 1 1 e b 0 1 0 # 17015 union c a 0 1 1 b 0 1 1 # 17016 union c a 0 1 1 b 0 1 0 e # 17017 union c a 0 1 1 b 0 1 1 # 17018 union c a 0 1 1 b 0 1 0 e # 17019 union c a 0 1 1 b 0 1 1 # 17020 union c a 0 1 1 b 0 1 0 # 17021 union c a 0 1 1 e b 0 1 1 e # 17022 union c a 0 1 1 e b 0 1 1 e # 17023 union c a 0 1 1 e b 0 1 1 e # 17024 union c a 0 1 1 e b 0 1 1 e # 17025 union c a 0 1 1 e b 0 1 1 e # 17026 union c a 0 1 1 e b 0 1 1 # 17027 union c a 0 1 1 e b 0 1 1 e # 17028 union c a 0 1 1 e b 0 1 1 e # 17029 union c a 0 1 1 e b 0 1 1 e # 17030 union c a 0 1 1 e b 0 1 1 e # 17031 union c a 0 1 1 e b 0 1 1 e # 17032 union c a 0 1 1 e b 0 1 1 # 17033 union c a 0 1 1 b 0 1 1 # 17034 union c a 0 1 1 b 0 1 1 e # 17035 union c a 0 1 1 b 0 1 1 # 17036 union c a 0 1 1 b 0 1 1 e # 17037 union c a 0 1 1 b 0 1 1 # 17038 union c a 0 1 1 b 0 1 1 # 17039 union c a 1 0 0 e b 1 0 0 e # 17040 union c a 1 0 0 e b 1 0 0 e # 17041 union c a 1 0 0 e b 1 0 0 e # 17042 union c a 1 0 0 e b 1 0 0 f # 17043 union c a 1 0 0 e b 1 0 0 e # 17044 union c a 1 0 0 e b 1 0 0 0 # 17045 union c a 1 0 0 f b 1 0 0 f # 17046 union c a 1 0 0 f b 1 0 0 e # 17047 union c a 1 0 0 f b 1 0 0 f # 17048 union c a 1 0 0 f b 1 0 0 f # 17049 union c a 1 0 0 f b 1 0 0 f # 17050 union c a 1 0 0 f b 1 0 0 0 # 17051 union c a 1 0 0 0 b 1 0 0 0 # 17052 union c a 1 0 0 0 b 1 0 0 e # 17053 union c a 1 0 0 b 1 0 0 # 17054 union c a 1 0 0 b 1 0 0 f # 17055 union c a 1 0 0 0 b 1 0 0 0 # 17056 union c a 1 0 0 0 b 1 0 0 # 17057 union c a 1 0 0 e b 1 0 0 e # 17058 union c a 1 0 0 e b 1 0 1 e # 17059 union c a 1 0 0 e b 1 0 0 e # 17060 union c a 1 0 0 e b 1 0 1 f # 17061 union c a 1 0 0 e b 1 0 0 e # 17062 union c a 1 0 0 e b 1 0 1 0 # 17063 union c a 1 0 0 f b 1 0 0 f # 17064 union c a 1 0 0 f b 1 0 1 e # 17065 union c a 1 0 0 f b 1 0 0 f # 17066 union c a 1 0 0 f b 1 0 1 f # 17067 union c a 1 0 0 f b 1 0 0 f # 17068 union c a 1 0 0 f b 1 0 1 # 17069 union c a 1 0 0 b 1 0 0 # 17070 union c a 1 0 0 b 1 0 1 e # 17071 union c a 1 0 0 0 b 1 0 0 0 # 17072 union c a 1 0 0 0 b 1 0 1 f # 17073 union c a 1 0 0 b 1 0 0 # 17074 union c a 1 0 0 b 1 0 1 # 17075 union c a 1 0 0 e b 1 0 0 e # 17076 union c a 1 0 0 e b 1 1 0 e # 17077 union c a 1 0 0 e b 1 0 0 e # 17078 union c a 1 0 0 e b 1 1 0 f # 17079 union c a 1 0 0 e b 1 0 0 e # 17080 union c a 1 0 0 e b 1 1 0 # 17081 union c a 1 0 0 f b 1 0 0 f # 17082 union c a 1 0 0 f b 1 1 0 e # 17083 union c a 1 0 0 f b 1 0 0 f # 17084 union c a 1 0 0 f b 1 1 0 f # 17085 union c a 1 0 0 f b 1 0 0 f # 17086 union c a 1 0 0 f b 1 1 0 # 17087 union c a 1 0 0 b 1 0 0 # 17088 union c a 1 0 0 b 1 1 0 e # 17089 union c a 1 0 0 0 b 1 0 0 0 # 17090 union c a 1 0 0 0 b 1 1 0 f # 17091 union c a 1 0 0 0 b 1 0 0 0 # 17092 union c a 1 0 0 0 b 1 1 0 # 17093 union c a 1 0 0 e b 1 0 0 e # 17094 union c a 1 0 0 e b 1 1 1 e # 17095 union c a 1 0 0 e b 1 0 0 e # 17096 union c a 1 0 0 e b 1 1 1 f # 17097 union c a 1 0 0 e b 1 0 0 e # 17098 union c a 1 0 0 e b 1 1 1 0 # 17099 union c a 1 0 0 f b 1 0 0 f # 17100 union c a 1 0 0 f b 1 1 1 e # 17101 union c a 1 0 0 f b 1 0 0 f # 17102 union c a 1 0 0 f b 1 1 1 f # 17103 union c a 1 0 0 f b 1 0 0 f # 17104 union c a 1 0 0 f b 1 1 1 # 17105 union c a 1 0 0 b 1 0 0 # 17106 union c a 1 0 0 b 1 1 1 e # 17107 union c a 1 0 0 0 b 1 0 0 0 # 17108 union c a 1 0 0 0 b 1 1 1 f # 17109 union c a 1 0 0 b 1 0 0 # 17110 union c a 1 0 0 b 1 1 1 # 17111 union c a 1 0 1 e b 1 0 1 e # 17112 union c a 1 0 1 e b 1 0 0 e # 17113 union c a 1 0 1 e b 1 0 1 e # 17114 union c a 1 0 1 e b 1 0 0 f # 17115 union c a 1 0 1 e b 1 0 1 e # 17116 union c a 1 0 1 e b 1 0 0 # 17117 union c a 1 0 1 f b 1 0 1 f # 17118 union c a 1 0 1 f b 1 0 0 e # 17119 union c a 1 0 1 f b 1 0 1 f # 17120 union c a 1 0 1 f b 1 0 0 f # 17121 union c a 1 0 1 f b 1 0 1 f # 17122 union c a 1 0 1 f b 1 0 0 0 # 17123 union c a 1 0 1 0 b 1 0 1 0 # 17124 union c a 1 0 1 0 b 1 0 0 e # 17125 union c a 1 0 1 0 b 1 0 1 0 # 17126 union c a 1 0 1 0 b 1 0 0 f # 17127 union c a 1 0 1 0 b 1 0 1 0 # 17128 union c a 1 0 1 0 b 1 0 0 0 # 17129 union c a 1 0 1 e b 1 0 1 e # 17130 union c a 1 0 1 e b 1 0 1 e # 17131 union c a 1 0 1 e b 1 0 1 e # 17132 union c a 1 0 1 e b 1 0 1 f # 17133 union c a 1 0 1 e b 1 0 1 e # 17134 union c a 1 0 1 e b 1 0 1 0 # 17135 union c a 1 0 1 f b 1 0 1 f # 17136 union c a 1 0 1 f b 1 0 1 e # 17137 union c a 1 0 1 f b 1 0 1 f # 17138 union c a 1 0 1 f b 1 0 1 f # 17139 union c a 1 0 1 f b 1 0 1 f # 17140 union c a 1 0 1 f b 1 0 1 0 # 17141 union c a 1 0 1 0 b 1 0 1 0 # 17142 union c a 1 0 1 0 b 1 0 1 e # 17143 union c a 1 0 1 0 b 1 0 1 0 # 17144 union c a 1 0 1 0 b 1 0 1 f # 17145 union c a 1 0 1 0 b 1 0 1 0 # 17146 union c a 1 0 1 0 b 1 0 1 0 # 17147 union c a 1 0 1 e b 1 0 1 e # 17148 union c a 1 0 1 e b 1 1 0 e # 17149 union c a 1 0 1 e b 1 0 1 e # 17150 union c a 1 0 1 e b 1 1 0 f # 17151 union c a 1 0 1 e b 1 0 1 e # 17152 union c a 1 0 1 e b 1 1 0 # 17153 union c a 1 0 1 f b 1 0 1 f # 17154 union c a 1 0 1 f b 1 1 0 e # 17155 union c a 1 0 1 f b 1 0 1 f # 17156 union c a 1 0 1 f b 1 1 0 f # 17157 union c a 1 0 1 f b 1 0 1 f # 17158 union c a 1 0 1 f b 1 1 0 0 # 17159 union c a 1 0 1 0 b 1 0 1 0 # 17160 union c a 1 0 1 0 b 1 1 0 e # 17161 union c a 1 0 1 b 1 0 1 # 17162 union c a 1 0 1 b 1 1 0 f # 17163 union c a 1 0 1 0 b 1 0 1 0 # 17164 union c a 1 0 1 0 b 1 1 0 # 17165 union c a 1 0 1 e b 1 0 1 e # 17166 union c a 1 0 1 e b 1 1 1 e # 17167 union c a 1 0 1 e b 1 0 1 e # 17168 union c a 1 0 1 e b 1 1 1 f # 17169 union c a 1 0 1 e b 1 0 1 e # 17170 union c a 1 0 1 e b 1 1 1 0 # 17171 union c a 1 0 1 f b 1 0 1 f # 17172 union c a 1 0 1 f b 1 1 1 e # 17173 union c a 1 0 1 f b 1 0 1 f # 17174 union c a 1 0 1 f b 1 1 1 f # 17175 union c a 1 0 1 f b 1 0 1 f # 17176 union c a 1 0 1 f b 1 1 1 # 17177 union c a 1 0 1 0 b 1 0 1 0 # 17178 union c a 1 0 1 0 b 1 1 1 e # 17179 union c a 1 0 1 0 b 1 0 1 0 # 17180 union c a 1 0 1 0 b 1 1 1 f # 17181 union c a 1 0 1 b 1 0 1 # 17182 union c a 1 0 1 b 1 1 1 0 # 17183 union c a 1 1 0 e b 1 1 0 e # 17184 union c a 1 1 0 e b 1 0 0 e # 17185 union c a 1 1 0 e b 1 1 0 e # 17186 union c a 1 1 0 e b 1 0 0 f # 17187 union c a 1 1 0 e b 1 1 0 e # 17188 union c a 1 1 0 e b 1 0 0 # 17189 union c a 1 1 0 f b 1 1 0 f # 17190 union c a 1 1 0 f b 1 0 0 e # 17191 union c a 1 1 0 f b 1 1 0 f # 17192 union c a 1 1 0 f b 1 0 0 f # 17193 union c a 1 1 0 f b 1 1 0 f # 17194 union c a 1 1 0 f b 1 0 0 # 17195 union c a 1 1 0 b 1 1 0 # 17196 union c a 1 1 0 b 1 0 0 e # 17197 union c a 1 1 0 b 1 1 0 # 17198 union c a 1 1 0 b 1 0 0 f # 17199 union c a 1 1 0 b 1 1 0 # 17200 union c a 1 1 0 b 1 0 0 0 # 17201 union c a 1 1 0 e b 1 1 0 e # 17202 union c a 1 1 0 e b 1 0 1 e # 17203 union c a 1 1 0 e b 1 1 0 e # 17204 union c a 1 1 0 e b 1 0 1 f # 17205 union c a 1 1 0 e b 1 1 0 e # 17206 union c a 1 1 0 e b 1 0 1 0 # 17207 union c a 1 1 0 f b 1 1 0 f # 17208 union c a 1 1 0 f b 1 0 1 e # 17209 union c a 1 1 0 f b 1 1 0 f # 17210 union c a 1 1 0 f b 1 0 1 f # 17211 union c a 1 1 0 f b 1 1 0 f # 17212 union c a 1 1 0 f b 1 0 1 0 # 17213 union c a 1 1 0 0 b 1 1 0 0 # 17214 union c a 1 1 0 0 b 1 0 1 e # 17215 union c a 1 1 0 0 b 1 1 0 0 # 17216 union c a 1 1 0 0 b 1 0 1 f # 17217 union c a 1 1 0 b 1 1 0 # 17218 union c a 1 1 0 b 1 0 1 0 # 17219 union c a 1 1 0 e b 1 1 0 e # 17220 union c a 1 1 0 e b 1 1 0 e # 17221 union c a 1 1 0 e b 1 1 0 e # 17222 union c a 1 1 0 e b 1 1 0 f # 17223 union c a 1 1 0 e b 1 1 0 e # 17224 union c a 1 1 0 e b 1 1 0 0 # 17225 union c a 1 1 0 f b 1 1 0 f # 17226 union c a 1 1 0 f b 1 1 0 e # 17227 union c a 1 1 0 f b 1 1 0 f # 17228 union c a 1 1 0 f b 1 1 0 f # 17229 union c a 1 1 0 f b 1 1 0 f # 17230 union c a 1 1 0 f b 1 1 0 # 17231 union c a 1 1 0 b 1 1 0 # 17232 union c a 1 1 0 b 1 1 0 e # 17233 union c a 1 1 0 b 1 1 0 # 17234 union c a 1 1 0 b 1 1 0 f # 17235 union c a 1 1 0 b 1 1 0 # 17236 union c a 1 1 0 b 1 1 0 # 17237 union c a 1 1 0 e b 1 1 0 e # 17238 union c a 1 1 0 e b 1 1 1 e # 17239 union c a 1 1 0 e b 1 1 0 e # 17240 union c a 1 1 0 e b 1 1 1 f # 17241 union c a 1 1 0 e b 1 1 0 e # 17242 union c a 1 1 0 e b 1 1 1 # 17243 union c a 1 1 0 f b 1 1 0 f # 17244 union c a 1 1 0 f b 1 1 1 e # 17245 union c a 1 1 0 f b 1 1 0 f # 17246 union c a 1 1 0 f b 1 1 1 f # 17247 union c a 1 1 0 f b 1 1 0 f # 17248 union c a 1 1 0 f b 1 1 1 # 17249 union c a 1 1 0 b 1 1 0 # 17250 union c a 1 1 0 b 1 1 1 e # 17251 union c a 1 1 0 b 1 1 0 # 17252 union c a 1 1 0 b 1 1 1 f # 17253 union c a 1 1 0 0 b 1 1 0 0 # 17254 union c a 1 1 0 0 b 1 1 1 # 17255 union c a 1 1 1 e b 1 1 1 e # 17256 union c a 1 1 1 e b 1 0 0 e # 17257 union c a 1 1 1 e b 1 1 1 e # 17258 union c a 1 1 1 e b 1 0 0 f # 17259 union c a 1 1 1 e b 1 1 1 e # 17260 union c a 1 1 1 e b 1 0 0 0 # 17261 union c a 1 1 1 f b 1 1 1 f # 17262 union c a 1 1 1 f b 1 0 0 e # 17263 union c a 1 1 1 f b 1 1 1 f # 17264 union c a 1 1 1 f b 1 0 0 f # 17265 union c a 1 1 1 f b 1 1 1 f # 17266 union c a 1 1 1 f b 1 0 0 0 # 17267 union c a 1 1 1 0 b 1 1 1 0 # 17268 union c a 1 1 1 0 b 1 0 0 e # 17269 union c a 1 1 1 0 b 1 1 1 0 # 17270 union c a 1 1 1 0 b 1 0 0 f # 17271 union c a 1 1 1 0 b 1 1 1 0 # 17272 union c a 1 1 1 0 b 1 0 0 # 17273 union c a 1 1 1 e b 1 1 1 e # 17274 union c a 1 1 1 e b 1 0 1 e # 17275 union c a 1 1 1 e b 1 1 1 e # 17276 union c a 1 1 1 e b 1 0 1 f # 17277 union c a 1 1 1 e b 1 1 1 e # 17278 union c a 1 1 1 e b 1 0 1 # 17279 union c a 1 1 1 f b 1 1 1 f # 17280 union c a 1 1 1 f b 1 0 1 e # 17281 union c a 1 1 1 f b 1 1 1 f # 17282 union c a 1 1 1 f b 1 0 1 f # 17283 union c a 1 1 1 f b 1 1 1 f # 17284 union c a 1 1 1 f b 1 0 1 0 # 17285 union c a 1 1 1 0 b 1 1 1 0 # 17286 union c a 1 1 1 0 b 1 0 1 e # 17287 union c a 1 1 1 0 b 1 1 1 0 # 17288 union c a 1 1 1 0 b 1 0 1 f # 17289 union c a 1 1 1 b 1 1 1 # 17290 union c a 1 1 1 b 1 0 1 0 # 17291 union c a 1 1 1 e b 1 1 1 e # 17292 union c a 1 1 1 e b 1 1 0 e # 17293 union c a 1 1 1 e b 1 1 1 e # 17294 union c a 1 1 1 e b 1 1 0 f # 17295 union c a 1 1 1 e b 1 1 1 e # 17296 union c a 1 1 1 e b 1 1 0 # 17297 union c a 1 1 1 f b 1 1 1 f # 17298 union c a 1 1 1 f b 1 1 0 e # 17299 union c a 1 1 1 f b 1 1 1 f # 17300 union c a 1 1 1 f b 1 1 0 f # 17301 union c a 1 1 1 f b 1 1 1 f # 17302 union c a 1 1 1 f b 1 1 0 # 17303 union c a 1 1 1 0 b 1 1 1 0 # 17304 union c a 1 1 1 0 b 1 1 0 e # 17305 union c a 1 1 1 b 1 1 1 # 17306 union c a 1 1 1 b 1 1 0 f # 17307 union c a 1 1 1 b 1 1 1 # 17308 union c a 1 1 1 b 1 1 0 # 17309 union c a 1 1 1 e b 1 1 1 e # 17310 union c a 1 1 1 e b 1 1 1 e # 17311 union c a 1 1 1 e b 1 1 1 e # 17312 union c a 1 1 1 e b 1 1 1 f # 17313 union c a 1 1 1 e b 1 1 1 e # 17314 union c a 1 1 1 e b 1 1 1 0 # 17315 union c a 1 1 1 f b 1 1 1 f # 17316 union c a 1 1 1 f b 1 1 1 e # 17317 union c a 1 1 1 f b 1 1 1 f # 17318 union c a 1 1 1 f b 1 1 1 f # 17319 union c a 1 1 1 f b 1 1 1 f # 17320 union c a 1 1 1 f b 1 1 1 # 17321 union c a 1 1 1 0 b 1 1 1 0 # 17322 union c a 1 1 1 0 b 1 1 1 e # 17323 union c a 1 1 1 b 1 1 1 # 17324 union c a 1 1 1 b 1 1 1 f # 17325 union c a 1 1 1 0 b 1 1 1 0 # 17326 union c a 1 1 1 0 b 1 1 1 0 # 17327 union c a 31 0 0 e b 31 0 0 e # 17328 union c a 31 0 0 e b 31 0 0 e # 17329 union c a 31 0 0 e b 31 0 0 e # 17330 union c a 31 0 0 e b 31 0 0 f # 17331 union c a 31 0 0 e b 31 0 0 e # 17332 union c a 31 0 0 e b 31 0 0 0 1 6 7 9 10 11 14 16 20 21 22 25 26 27 30 # 17333 union c a 31 0 0 f b 31 0 0 f # 17334 union c a 31 0 0 f b 31 0 0 e # 17335 union c a 31 0 0 f b 31 0 0 f # 17336 union c a 31 0 0 f b 31 0 0 f # 17337 union c a 31 0 0 f b 31 0 0 f # 17338 union c a 31 0 0 f b 31 0 0 3 4 5 6 7 9 13 16 17 18 20 21 22 24 25 26 27 28 30 # 17339 union c a 31 0 0 1 3 4 6 8 10 11 12 13 17 18 19 20 21 22 23 24 26 27 30 b 31 0 0 1 3 4 6 8 10 11 12 13 17 18 19 20 21 22 23 24 26 27 30 # 17340 union c a 31 0 0 1 3 4 6 8 10 11 12 13 17 18 19 20 21 22 23 24 26 27 30 b 31 0 0 e # 17341 union c a 31 0 0 0 3 5 7 9 10 12 14 15 16 17 18 19 21 25 29 30 b 31 0 0 0 3 5 7 9 10 12 14 15 16 17 18 19 21 25 29 30 # 17342 union c a 31 0 0 0 3 5 7 9 10 12 14 15 16 17 18 19 21 25 29 30 b 31 0 0 f # 17343 union c a 31 0 0 3 4 5 11 13 14 16 20 21 22 25 26 27 29 30 b 31 0 0 3 4 5 11 13 14 16 20 21 22 25 26 27 29 30 # 17344 union c a 31 0 0 3 4 5 11 13 14 16 20 21 22 25 26 27 29 30 b 31 0 0 0 2 3 5 7 9 10 12 13 17 19 20 22 24 25 27 # 17345 union c a 31 0 0 e b 31 0 0 e # 17346 union c a 31 0 0 e b 31 0 1 e # 17347 union c a 31 0 0 e b 31 0 0 e # 17348 union c a 31 0 0 e b 31 0 1 f # 17349 union c a 31 0 0 e b 31 0 0 e # 17350 union c a 31 0 0 e b 31 0 1 1 3 4 7 8 9 10 12 14 16 18 19 22 25 26 27 29 # 17351 union c a 31 0 0 f b 31 0 0 f # 17352 union c a 31 0 0 f b 31 0 1 e # 17353 union c a 31 0 0 f b 31 0 0 f # 17354 union c a 31 0 0 f b 31 0 1 f # 17355 union c a 31 0 0 f b 31 0 0 f # 17356 union c a 31 0 0 f b 31 0 1 0 1 2 3 4 6 9 11 12 13 14 16 18 19 22 23 25 26 29 30 # 17357 union c a 31 0 0 0 2 3 6 7 8 9 10 11 12 13 14 15 17 18 22 24 25 28 29 b 31 0 0 0 2 3 6 7 8 9 10 11 12 13 14 15 17 18 22 24 25 28 29 # 17358 union c a 31 0 0 0 2 3 6 7 8 9 10 11 12 13 14 15 17 18 22 24 25 28 29 b 31 0 1 e # 17359 union c a 31 0 0 0 3 4 5 8 11 12 15 16 18 19 20 22 24 25 26 28 29 b 31 0 0 0 3 4 5 8 11 12 15 16 18 19 20 22 24 25 26 28 29 # 17360 union c a 31 0 0 0 3 4 5 8 11 12 15 16 18 19 20 22 24 25 26 28 29 b 31 0 1 f # 17361 union c a 31 0 0 0 2 4 6 10 11 16 17 19 20 22 25 27 29 b 31 0 0 0 2 4 6 10 11 16 17 19 20 22 25 27 29 # 17362 union c a 31 0 0 0 2 4 6 10 11 16 17 19 20 22 25 27 29 b 31 0 1 2 3 6 7 8 9 10 11 13 16 18 19 22 23 24 25 26 29 30 # 17363 union c a 31 0 0 e b 31 0 0 e # 17364 union c a 31 0 0 e b 31 1 0 e # 17365 union c a 31 0 0 e b 31 0 0 e # 17366 union c a 31 0 0 e b 31 1 0 f # 17367 union c a 31 0 0 e b 31 0 0 e # 17368 union c a 31 0 0 e b 31 1 0 2 6 8 9 10 11 13 14 15 16 19 21 22 25 27 28 30 # 17369 union c a 31 0 0 f b 31 0 0 f # 17370 union c a 31 0 0 f b 31 1 0 e # 17371 union c a 31 0 0 f b 31 0 0 f # 17372 union c a 31 0 0 f b 31 1 0 f # 17373 union c a 31 0 0 f b 31 0 0 f # 17374 union c a 31 0 0 f b 31 1 0 3 4 5 6 8 9 12 15 17 21 25 26 28 29 # 17375 union c a 31 0 0 2 6 7 9 10 11 12 17 18 19 21 22 23 25 27 28 30 b 31 0 0 2 6 7 9 10 11 12 17 18 19 21 22 23 25 27 28 30 # 17376 union c a 31 0 0 2 6 7 9 10 11 12 17 18 19 21 22 23 25 27 28 30 b 31 1 0 e # 17377 union c a 31 0 0 1 2 3 6 15 16 19 20 22 25 26 28 b 31 0 0 1 2 3 6 15 16 19 20 22 25 26 28 # 17378 union c a 31 0 0 1 2 3 6 15 16 19 20 22 25 26 28 b 31 1 0 f # 17379 union c a 31 0 0 2 3 4 6 8 11 13 16 17 18 19 20 21 27 28 29 30 b 31 0 0 2 3 4 6 8 11 13 16 17 18 19 20 21 27 28 29 30 # 17380 union c a 31 0 0 2 3 4 6 8 11 13 16 17 18 19 20 21 27 28 29 30 b 31 1 0 2 6 8 10 11 12 13 15 16 18 19 21 26 27 30 # 17381 union c a 31 0 0 e b 31 0 0 e # 17382 union c a 31 0 0 e b 31 1 1 e # 17383 union c a 31 0 0 e b 31 0 0 e # 17384 union c a 31 0 0 e b 31 1 1 f # 17385 union c a 31 0 0 e b 31 0 0 e # 17386 union c a 31 0 0 e b 31 1 1 0 1 2 3 4 6 12 14 15 18 23 24 25 26 27 30 # 17387 union c a 31 0 0 f b 31 0 0 f # 17388 union c a 31 0 0 f b 31 1 1 e # 17389 union c a 31 0 0 f b 31 0 0 f # 17390 union c a 31 0 0 f b 31 1 1 f # 17391 union c a 31 0 0 f b 31 0 0 f # 17392 union c a 31 0 0 f b 31 1 1 1 2 4 5 10 16 20 21 22 23 25 26 29 30 # 17393 union c a 31 0 0 1 2 3 4 5 6 8 12 13 14 16 18 22 24 25 26 28 29 b 31 0 0 1 2 3 4 5 6 8 12 13 14 16 18 22 24 25 26 28 29 # 17394 union c a 31 0 0 1 2 3 4 5 6 8 12 13 14 16 18 22 24 25 26 28 29 b 31 1 1 e # 17395 union c a 31 0 0 1 2 4 5 8 9 10 12 13 14 16 18 23 25 26 27 28 29 30 b 31 0 0 1 2 4 5 8 9 10 12 13 14 16 18 23 25 26 27 28 29 30 # 17396 union c a 31 0 0 1 2 4 5 8 9 10 12 13 14 16 18 23 25 26 27 28 29 30 b 31 1 1 f # 17397 union c a 31 0 0 1 2 3 4 5 6 9 11 14 15 17 18 22 24 25 26 28 29 b 31 0 0 1 2 3 4 5 6 9 11 14 15 17 18 22 24 25 26 28 29 # 17398 union c a 31 0 0 1 2 3 4 5 6 9 11 14 15 17 18 22 24 25 26 28 29 b 31 1 1 3 6 8 9 10 13 15 18 19 20 21 23 24 26 28 29 30 # 17399 union c a 31 0 1 e b 31 0 1 e # 17400 union c a 31 0 1 e b 31 0 0 e # 17401 union c a 31 0 1 e b 31 0 1 e # 17402 union c a 31 0 1 e b 31 0 0 f # 17403 union c a 31 0 1 e b 31 0 1 e # 17404 union c a 31 0 1 e b 31 0 0 7 9 10 11 13 14 16 18 19 20 21 23 24 26 27 29 30 # 17405 union c a 31 0 1 f b 31 0 1 f # 17406 union c a 31 0 1 f b 31 0 0 e # 17407 union c a 31 0 1 f b 31 0 1 f # 17408 union c a 31 0 1 f b 31 0 0 f # 17409 union c a 31 0 1 f b 31 0 1 f # 17410 union c a 31 0 1 f b 31 0 0 0 1 2 3 8 13 15 16 17 18 19 20 21 22 23 26 28 # 17411 union c a 31 0 1 0 3 4 5 6 10 11 12 13 16 20 21 23 25 27 28 29 b 31 0 1 0 3 4 5 6 10 11 12 13 16 20 21 23 25 27 28 29 # 17412 union c a 31 0 1 0 3 4 5 6 10 11 12 13 16 20 21 23 25 27 28 29 b 31 0 0 e # 17413 union c a 31 0 1 0 7 8 9 10 11 15 19 24 26 27 29 30 b 31 0 1 0 7 8 9 10 11 15 19 24 26 27 29 30 # 17414 union c a 31 0 1 0 7 8 9 10 11 15 19 24 26 27 29 30 b 31 0 0 f # 17415 union c a 31 0 1 0 4 5 6 7 9 13 17 19 21 23 28 b 31 0 1 0 4 5 6 7 9 13 17 19 21 23 28 # 17416 union c a 31 0 1 0 4 5 6 7 9 13 17 19 21 23 28 b 31 0 0 0 2 7 8 9 14 16 17 18 19 21 22 23 29 30 # 17417 union c a 31 0 1 e b 31 0 1 e # 17418 union c a 31 0 1 e b 31 0 1 e # 17419 union c a 31 0 1 e b 31 0 1 e # 17420 union c a 31 0 1 e b 31 0 1 f # 17421 union c a 31 0 1 e b 31 0 1 e # 17422 union c a 31 0 1 e b 31 0 1 0 5 8 10 12 14 17 19 20 21 22 23 27 28 # 17423 union c a 31 0 1 f b 31 0 1 f # 17424 union c a 31 0 1 f b 31 0 1 e # 17425 union c a 31 0 1 f b 31 0 1 f # 17426 union c a 31 0 1 f b 31 0 1 f # 17427 union c a 31 0 1 f b 31 0 1 f # 17428 union c a 31 0 1 f b 31 0 1 0 2 3 4 5 8 9 12 13 15 17 20 23 25 29 30 # 17429 union c a 31 0 1 2 5 6 7 8 9 11 18 19 21 22 25 26 27 b 31 0 1 2 5 6 7 8 9 11 18 19 21 22 25 26 27 # 17430 union c a 31 0 1 2 5 6 7 8 9 11 18 19 21 22 25 26 27 b 31 0 1 e # 17431 union c a 31 0 1 1 3 4 5 7 8 10 11 12 14 16 18 21 23 29 30 b 31 0 1 1 3 4 5 7 8 10 11 12 14 16 18 21 23 29 30 # 17432 union c a 31 0 1 1 3 4 5 7 8 10 11 12 14 16 18 21 23 29 30 b 31 0 1 f # 17433 union c a 31 0 1 0 1 2 3 4 5 8 13 17 19 23 24 25 30 b 31 0 1 0 1 2 3 4 5 8 13 17 19 23 24 25 30 # 17434 union c a 31 0 1 0 1 2 3 4 5 8 13 17 19 23 24 25 30 b 31 0 1 2 3 4 5 8 9 10 12 13 14 18 20 22 23 27 28 29 30 # 17435 union c a 31 0 1 e b 31 0 1 e # 17436 union c a 31 0 1 e b 31 1 0 e # 17437 union c a 31 0 1 e b 31 0 1 e # 17438 union c a 31 0 1 e b 31 1 0 f # 17439 union c a 31 0 1 e b 31 0 1 e # 17440 union c a 31 0 1 e b 31 1 0 0 1 2 3 4 5 9 11 12 17 19 20 21 25 26 28 30 # 17441 union c a 31 0 1 f b 31 0 1 f # 17442 union c a 31 0 1 f b 31 1 0 e # 17443 union c a 31 0 1 f b 31 0 1 f # 17444 union c a 31 0 1 f b 31 1 0 f # 17445 union c a 31 0 1 f b 31 0 1 f # 17446 union c a 31 0 1 f b 31 1 0 0 2 3 6 7 8 9 11 12 13 18 19 20 21 27 29 30 # 17447 union c a 31 0 1 0 3 4 5 6 7 8 9 11 12 13 14 22 23 24 26 29 b 31 0 1 0 3 4 5 6 7 8 9 11 12 13 14 22 23 24 26 29 # 17448 union c a 31 0 1 0 3 4 5 6 7 8 9 11 12 13 14 22 23 24 26 29 b 31 1 0 e # 17449 union c a 31 0 1 1 2 4 5 6 8 9 10 13 15 16 17 18 20 22 23 24 26 28 30 b 31 0 1 1 2 4 5 6 8 9 10 13 15 16 17 18 20 22 23 24 26 28 30 # 17450 union c a 31 0 1 1 2 4 5 6 8 9 10 13 15 16 17 18 20 22 23 24 26 28 30 b 31 1 0 f # 17451 union c a 31 0 1 7 8 12 14 17 20 21 24 25 29 30 b 31 0 1 7 8 12 14 17 20 21 24 25 29 30 # 17452 union c a 31 0 1 7 8 12 14 17 20 21 24 25 29 30 b 31 1 0 0 5 6 8 9 10 12 13 17 18 19 20 25 # 17453 union c a 31 0 1 e b 31 0 1 e # 17454 union c a 31 0 1 e b 31 1 1 e # 17455 union c a 31 0 1 e b 31 0 1 e # 17456 union c a 31 0 1 e b 31 1 1 f # 17457 union c a 31 0 1 e b 31 0 1 e # 17458 union c a 31 0 1 e b 31 1 1 2 4 5 10 11 12 13 14 17 18 19 20 23 24 28 29 30 # 17459 union c a 31 0 1 f b 31 0 1 f # 17460 union c a 31 0 1 f b 31 1 1 e # 17461 union c a 31 0 1 f b 31 0 1 f # 17462 union c a 31 0 1 f b 31 1 1 f # 17463 union c a 31 0 1 f b 31 0 1 f # 17464 union c a 31 0 1 f b 31 1 1 0 2 6 8 9 11 12 14 16 17 19 21 22 26 27 28 29 # 17465 union c a 31 0 1 0 1 5 7 8 13 17 18 23 24 26 27 29 b 31 0 1 0 1 5 7 8 13 17 18 23 24 26 27 29 # 17466 union c a 31 0 1 0 1 5 7 8 13 17 18 23 24 26 27 29 b 31 1 1 e # 17467 union c a 31 0 1 1 3 4 7 8 10 12 13 14 17 18 22 28 29 b 31 0 1 1 3 4 7 8 10 12 13 14 17 18 22 28 29 # 17468 union c a 31 0 1 1 3 4 7 8 10 12 13 14 17 18 22 28 29 b 31 1 1 f # 17469 union c a 31 0 1 1 2 4 9 11 12 15 18 19 22 23 24 25 26 28 29 30 b 31 0 1 1 2 4 9 11 12 15 18 19 22 23 24 25 26 28 29 30 # 17470 union c a 31 0 1 1 2 4 9 11 12 15 18 19 22 23 24 25 26 28 29 30 b 31 1 1 0 1 2 5 6 7 9 11 13 17 21 22 23 24 25 26 28 29 30 # 17471 union c a 31 1 0 e b 31 1 0 e # 17472 union c a 31 1 0 e b 31 0 0 e # 17473 union c a 31 1 0 e b 31 1 0 e # 17474 union c a 31 1 0 e b 31 0 0 f # 17475 union c a 31 1 0 e b 31 1 0 e # 17476 union c a 31 1 0 e b 31 0 0 0 1 2 3 5 6 8 10 11 12 16 18 19 21 22 24 25 28 # 17477 union c a 31 1 0 f b 31 1 0 f # 17478 union c a 31 1 0 f b 31 0 0 e # 17479 union c a 31 1 0 f b 31 1 0 f # 17480 union c a 31 1 0 f b 31 0 0 f # 17481 union c a 31 1 0 f b 31 1 0 f # 17482 union c a 31 1 0 f b 31 0 0 2 5 7 8 9 11 12 13 16 19 20 22 25 26 30 # 17483 union c a 31 1 0 0 1 2 6 7 11 17 18 19 20 21 22 27 28 29 b 31 1 0 0 1 2 6 7 11 17 18 19 20 21 22 27 28 29 # 17484 union c a 31 1 0 0 1 2 6 7 11 17 18 19 20 21 22 27 28 29 b 31 0 0 e # 17485 union c a 31 1 0 0 4 5 7 8 9 11 12 13 16 17 19 20 22 23 29 30 b 31 1 0 0 4 5 7 8 9 11 12 13 16 17 19 20 22 23 29 30 # 17486 union c a 31 1 0 0 4 5 7 8 9 11 12 13 16 17 19 20 22 23 29 30 b 31 0 0 f # 17487 union c a 31 1 0 2 3 5 6 7 8 9 11 12 13 14 16 17 19 20 21 22 23 25 26 29 b 31 1 0 2 3 5 6 7 8 9 11 12 13 14 16 17 19 20 21 22 23 25 26 29 # 17488 union c a 31 1 0 2 3 5 6 7 8 9 11 12 13 14 16 17 19 20 21 22 23 25 26 29 b 31 0 0 4 5 7 8 9 10 12 13 15 16 19 22 23 25 26 27 28 29 # 17489 union c a 31 1 0 e b 31 1 0 e # 17490 union c a 31 1 0 e b 31 0 1 e # 17491 union c a 31 1 0 e b 31 1 0 e # 17492 union c a 31 1 0 e b 31 0 1 f # 17493 union c a 31 1 0 e b 31 1 0 e # 17494 union c a 31 1 0 e b 31 0 1 3 6 7 9 10 11 12 13 15 16 17 19 20 22 23 24 26 27 29 # 17495 union c a 31 1 0 f b 31 1 0 f # 17496 union c a 31 1 0 f b 31 0 1 e # 17497 union c a 31 1 0 f b 31 1 0 f # 17498 union c a 31 1 0 f b 31 0 1 f # 17499 union c a 31 1 0 f b 31 1 0 f # 17500 union c a 31 1 0 f b 31 0 1 0 2 3 4 6 7 9 10 13 16 19 21 24 25 27 # 17501 union c a 31 1 0 1 2 6 8 9 10 11 13 17 18 20 21 22 24 25 27 29 b 31 1 0 1 2 6 8 9 10 11 13 17 18 20 21 22 24 25 27 29 # 17502 union c a 31 1 0 1 2 6 8 9 10 11 13 17 18 20 21 22 24 25 27 29 b 31 0 1 e # 17503 union c a 31 1 0 0 3 4 6 9 12 13 14 19 23 29 30 b 31 1 0 0 3 4 6 9 12 13 14 19 23 29 30 # 17504 union c a 31 1 0 0 3 4 6 9 12 13 14 19 23 29 30 b 31 0 1 f # 17505 union c a 31 1 0 2 7 8 9 10 11 12 13 14 18 20 22 24 25 26 29 b 31 1 0 2 7 8 9 10 11 12 13 14 18 20 22 24 25 26 29 # 17506 union c a 31 1 0 2 7 8 9 10 11 12 13 14 18 20 22 24 25 26 29 b 31 0 1 0 3 4 5 15 16 18 22 23 25 27 30 # 17507 union c a 31 1 0 e b 31 1 0 e # 17508 union c a 31 1 0 e b 31 1 0 e # 17509 union c a 31 1 0 e b 31 1 0 e # 17510 union c a 31 1 0 e b 31 1 0 f # 17511 union c a 31 1 0 e b 31 1 0 e # 17512 union c a 31 1 0 e b 31 1 0 5 7 9 11 12 13 15 16 17 19 20 21 22 23 24 25 27 30 # 17513 union c a 31 1 0 f b 31 1 0 f # 17514 union c a 31 1 0 f b 31 1 0 e # 17515 union c a 31 1 0 f b 31 1 0 f # 17516 union c a 31 1 0 f b 31 1 0 f # 17517 union c a 31 1 0 f b 31 1 0 f # 17518 union c a 31 1 0 f b 31 1 0 0 1 2 3 5 7 13 14 15 16 19 22 25 27 29 30 # 17519 union c a 31 1 0 0 1 2 3 5 9 11 12 15 17 19 21 22 23 24 27 28 30 b 31 1 0 0 1 2 3 5 9 11 12 15 17 19 21 22 23 24 27 28 30 # 17520 union c a 31 1 0 0 1 2 3 5 9 11 12 15 17 19 21 22 23 24 27 28 30 b 31 1 0 e # 17521 union c a 31 1 0 0 3 7 9 12 13 14 15 16 17 19 22 23 28 30 b 31 1 0 0 3 7 9 12 13 14 15 16 17 19 22 23 28 30 # 17522 union c a 31 1 0 0 3 7 9 12 13 14 15 16 17 19 22 23 28 30 b 31 1 0 f # 17523 union c a 31 1 0 0 1 5 6 7 9 12 13 15 16 17 19 22 24 25 27 28 29 30 b 31 1 0 0 1 5 6 7 9 12 13 15 16 17 19 22 24 25 27 28 29 30 # 17524 union c a 31 1 0 0 1 5 6 7 9 12 13 15 16 17 19 22 24 25 27 28 29 30 b 31 1 0 0 1 4 6 7 9 11 21 22 23 24 25 27 28 30 # 17525 union c a 31 1 0 e b 31 1 0 e # 17526 union c a 31 1 0 e b 31 1 1 e # 17527 union c a 31 1 0 e b 31 1 0 e # 17528 union c a 31 1 0 e b 31 1 1 f # 17529 union c a 31 1 0 e b 31 1 0 e # 17530 union c a 31 1 0 e b 31 1 1 0 1 3 4 6 7 8 9 11 16 18 19 20 21 22 23 24 25 26 28 # 17531 union c a 31 1 0 f b 31 1 0 f # 17532 union c a 31 1 0 f b 31 1 1 e # 17533 union c a 31 1 0 f b 31 1 0 f # 17534 union c a 31 1 0 f b 31 1 1 f # 17535 union c a 31 1 0 f b 31 1 0 f # 17536 union c a 31 1 0 f b 31 1 1 0 3 5 6 8 11 12 13 16 17 19 20 22 24 25 28 29 30 # 17537 union c a 31 1 0 1 6 10 13 16 18 20 21 24 25 26 28 29 b 31 1 0 1 6 10 13 16 18 20 21 24 25 26 28 29 # 17538 union c a 31 1 0 1 6 10 13 16 18 20 21 24 25 26 28 29 b 31 1 1 e # 17539 union c a 31 1 0 1 4 5 8 9 14 15 17 19 20 22 25 27 28 b 31 1 0 1 4 5 8 9 14 15 17 19 20 22 25 27 28 # 17540 union c a 31 1 0 1 4 5 8 9 14 15 17 19 20 22 25 27 28 b 31 1 1 f # 17541 union c a 31 1 0 0 1 2 4 6 9 10 11 15 16 21 23 29 30 b 31 1 0 0 1 2 4 6 9 10 11 15 16 21 23 29 30 # 17542 union c a 31 1 0 0 1 2 4 6 9 10 11 15 16 21 23 29 30 b 31 1 1 1 3 4 5 6 9 12 13 14 15 19 20 23 24 25 29 # 17543 union c a 31 1 1 e b 31 1 1 e # 17544 union c a 31 1 1 e b 31 0 0 e # 17545 union c a 31 1 1 e b 31 1 1 e # 17546 union c a 31 1 1 e b 31 0 0 f # 17547 union c a 31 1 1 e b 31 1 1 e # 17548 union c a 31 1 1 e b 31 0 0 1 2 5 6 7 9 10 12 13 15 21 22 23 24 25 28 # 17549 union c a 31 1 1 f b 31 1 1 f # 17550 union c a 31 1 1 f b 31 0 0 e # 17551 union c a 31 1 1 f b 31 1 1 f # 17552 union c a 31 1 1 f b 31 0 0 f # 17553 union c a 31 1 1 f b 31 1 1 f # 17554 union c a 31 1 1 f b 31 0 0 1 3 5 6 11 13 14 15 20 21 23 24 25 26 27 28 # 17555 union c a 31 1 1 2 4 5 6 7 8 11 12 14 15 18 19 20 21 23 24 26 27 29 b 31 1 1 2 4 5 6 7 8 11 12 14 15 18 19 20 21 23 24 26 27 29 # 17556 union c a 31 1 1 2 4 5 6 7 8 11 12 14 15 18 19 20 21 23 24 26 27 29 b 31 0 0 e # 17557 union c a 31 1 1 0 2 3 4 5 6 7 8 15 16 18 19 21 24 26 28 29 30 b 31 1 1 0 2 3 4 5 6 7 8 15 16 18 19 21 24 26 28 29 30 # 17558 union c a 31 1 1 0 2 3 4 5 6 7 8 15 16 18 19 21 24 26 28 29 30 b 31 0 0 f # 17559 union c a 31 1 1 2 9 11 13 14 16 19 20 24 25 b 31 1 1 2 9 11 13 14 16 19 20 24 25 # 17560 union c a 31 1 1 2 9 11 13 14 16 19 20 24 25 b 31 0 0 0 2 4 6 7 8 9 17 18 20 21 22 24 28 29 30 # 17561 union c a 31 1 1 e b 31 1 1 e # 17562 union c a 31 1 1 e b 31 0 1 e # 17563 union c a 31 1 1 e b 31 1 1 e # 17564 union c a 31 1 1 e b 31 0 1 f # 17565 union c a 31 1 1 e b 31 1 1 e # 17566 union c a 31 1 1 e b 31 0 1 0 2 4 7 8 12 13 14 17 18 19 20 21 22 24 26 # 17567 union c a 31 1 1 f b 31 1 1 f # 17568 union c a 31 1 1 f b 31 0 1 e # 17569 union c a 31 1 1 f b 31 1 1 f # 17570 union c a 31 1 1 f b 31 0 1 f # 17571 union c a 31 1 1 f b 31 1 1 f # 17572 union c a 31 1 1 f b 31 0 1 1 2 3 4 7 9 11 14 15 16 17 18 19 20 21 23 24 25 26 28 # 17573 union c a 31 1 1 1 3 4 5 8 9 10 11 13 16 18 20 21 22 23 25 26 27 28 29 b 31 1 1 1 3 4 5 8 9 10 11 13 16 18 20 21 22 23 25 26 27 28 29 # 17574 union c a 31 1 1 1 3 4 5 8 9 10 11 13 16 18 20 21 22 23 25 26 27 28 29 b 31 0 1 e # 17575 union c a 31 1 1 0 1 2 3 4 10 12 13 14 15 16 17 18 20 21 23 25 26 27 28 29 b 31 1 1 0 1 2 3 4 10 12 13 14 15 16 17 18 20 21 23 25 26 27 28 29 # 17576 union c a 31 1 1 0 1 2 3 4 10 12 13 14 15 16 17 18 20 21 23 25 26 27 28 29 b 31 0 1 f # 17577 union c a 31 1 1 0 1 2 3 6 7 8 10 12 13 14 15 17 18 19 20 21 22 23 24 25 26 27 28 b 31 1 1 0 1 2 3 6 7 8 10 12 13 14 15 17 18 19 20 21 22 23 24 25 26 27 28 # 17578 union c a 31 1 1 0 1 2 3 6 7 8 10 12 13 14 15 17 18 19 20 21 22 23 24 25 26 27 28 b 31 0 1 4 5 8 11 13 14 17 20 23 26 28 # 17579 union c a 31 1 1 e b 31 1 1 e # 17580 union c a 31 1 1 e b 31 1 0 e # 17581 union c a 31 1 1 e b 31 1 1 e # 17582 union c a 31 1 1 e b 31 1 0 f # 17583 union c a 31 1 1 e b 31 1 1 e # 17584 union c a 31 1 1 e b 31 1 0 2 3 6 7 10 12 13 18 19 22 26 27 # 17585 union c a 31 1 1 f b 31 1 1 f # 17586 union c a 31 1 1 f b 31 1 0 e # 17587 union c a 31 1 1 f b 31 1 1 f # 17588 union c a 31 1 1 f b 31 1 0 f # 17589 union c a 31 1 1 f b 31 1 1 f # 17590 union c a 31 1 1 f b 31 1 0 0 1 2 4 7 8 9 10 11 12 13 19 20 21 22 23 26 27 # 17591 union c a 31 1 1 1 3 4 5 7 14 15 20 21 23 25 26 b 31 1 1 1 3 4 5 7 14 15 20 21 23 25 26 # 17592 union c a 31 1 1 1 3 4 5 7 14 15 20 21 23 25 26 b 31 1 0 e # 17593 union c a 31 1 1 2 7 8 9 12 13 15 18 19 21 25 29 30 b 31 1 1 2 7 8 9 12 13 15 18 19 21 25 29 30 # 17594 union c a 31 1 1 2 7 8 9 12 13 15 18 19 21 25 29 30 b 31 1 0 f # 17595 union c a 31 1 1 0 1 2 3 10 11 14 15 16 18 20 21 22 25 26 27 28 29 30 b 31 1 1 0 1 2 3 10 11 14 15 16 18 20 21 22 25 26 27 28 29 30 # 17596 union c a 31 1 1 0 1 2 3 10 11 14 15 16 18 20 21 22 25 26 27 28 29 30 b 31 1 0 0 1 3 4 5 8 10 11 12 14 15 18 19 21 23 24 26 27 # 17597 union c a 31 1 1 e b 31 1 1 e # 17598 union c a 31 1 1 e b 31 1 1 e # 17599 union c a 31 1 1 e b 31 1 1 e # 17600 union c a 31 1 1 e b 31 1 1 f # 17601 union c a 31 1 1 e b 31 1 1 e # 17602 union c a 31 1 1 e b 31 1 1 0 2 3 5 6 8 13 15 18 19 20 25 28 29 30 # 17603 union c a 31 1 1 f b 31 1 1 f # 17604 union c a 31 1 1 f b 31 1 1 e # 17605 union c a 31 1 1 f b 31 1 1 f # 17606 union c a 31 1 1 f b 31 1 1 f # 17607 union c a 31 1 1 f b 31 1 1 f # 17608 union c a 31 1 1 f b 31 1 1 0 1 2 3 6 7 11 14 21 22 23 25 26 28 29 # 17609 union c a 31 1 1 0 1 2 4 7 8 10 12 16 17 18 23 24 25 26 28 29 b 31 1 1 0 1 2 4 7 8 10 12 16 17 18 23 24 25 26 28 29 # 17610 union c a 31 1 1 0 1 2 4 7 8 10 12 16 17 18 23 24 25 26 28 29 b 31 1 1 e # 17611 union c a 31 1 1 3 5 8 9 12 14 17 18 20 22 23 25 26 29 30 b 31 1 1 3 5 8 9 12 14 17 18 20 22 23 25 26 29 30 # 17612 union c a 31 1 1 3 5 8 9 12 14 17 18 20 22 23 25 26 29 30 b 31 1 1 f # 17613 union c a 31 1 1 0 3 4 7 9 12 13 15 16 17 18 20 23 24 25 26 29 b 31 1 1 0 3 4 7 9 12 13 15 16 17 18 20 23 24 25 26 29 # 17614 union c a 31 1 1 0 3 4 7 9 12 13 15 16 17 18 20 23 24 25 26 29 b 31 1 1 1 2 4 6 7 9 10 11 13 16 21 24 27 28 29 # 17615 union c a 32 0 0 e b 32 0 0 e # 17616 union c a 32 0 0 e b 32 0 0 e # 17617 union c a 32 0 0 e b 32 0 0 e # 17618 union c a 32 0 0 e b 32 0 0 f # 17619 union c a 32 0 0 e b 32 0 0 e # 17620 union c a 32 0 0 e b 32 0 0 1 2 3 4 6 8 11 12 14 16 18 21 22 23 24 26 27 29 30 31 # 17621 union c a 32 0 0 f b 32 0 0 f # 17622 union c a 32 0 0 f b 32 0 0 e # 17623 union c a 32 0 0 f b 32 0 0 f # 17624 union c a 32 0 0 f b 32 0 0 f # 17625 union c a 32 0 0 f b 32 0 0 f # 17626 union c a 32 0 0 f b 32 0 0 0 1 2 3 7 8 9 10 11 12 13 15 16 21 26 29 # 17627 union c a 32 0 0 0 1 2 8 9 11 12 13 14 15 19 24 26 27 b 32 0 0 0 1 2 8 9 11 12 13 14 15 19 24 26 27 # 17628 union c a 32 0 0 0 1 2 8 9 11 12 13 14 15 19 24 26 27 b 32 0 0 e # 17629 union c a 32 0 0 3 5 8 9 12 16 19 20 23 24 26 27 28 29 31 b 32 0 0 3 5 8 9 12 16 19 20 23 24 26 27 28 29 31 # 17630 union c a 32 0 0 3 5 8 9 12 16 19 20 23 24 26 27 28 29 31 b 32 0 0 f # 17631 union c a 32 0 0 1 2 3 5 8 9 10 13 14 15 17 18 24 25 27 28 30 b 32 0 0 1 2 3 5 8 9 10 13 14 15 17 18 24 25 27 28 30 # 17632 union c a 32 0 0 1 2 3 5 8 9 10 13 14 15 17 18 24 25 27 28 30 b 32 0 0 2 3 6 8 9 10 12 18 19 20 21 23 24 27 28 # 17633 union c a 32 0 0 e b 32 0 0 e # 17634 union c a 32 0 0 e b 32 0 1 e # 17635 union c a 32 0 0 e b 32 0 0 e # 17636 union c a 32 0 0 e b 32 0 1 f # 17637 union c a 32 0 0 e b 32 0 0 e # 17638 union c a 32 0 0 e b 32 0 1 0 2 5 8 10 12 13 14 19 22 24 27 29 # 17639 union c a 32 0 0 f b 32 0 0 f # 17640 union c a 32 0 0 f b 32 0 1 e # 17641 union c a 32 0 0 f b 32 0 0 f # 17642 union c a 32 0 0 f b 32 0 1 f # 17643 union c a 32 0 0 f b 32 0 0 f # 17644 union c a 32 0 0 f b 32 0 1 0 5 6 7 9 11 12 15 16 18 20 21 22 23 24 26 28 30 31 # 17645 union c a 32 0 0 3 6 11 13 14 17 20 23 29 31 b 32 0 0 3 6 11 13 14 17 20 23 29 31 # 17646 union c a 32 0 0 3 6 11 13 14 17 20 23 29 31 b 32 0 1 e # 17647 union c a 32 0 0 1 2 6 7 8 10 13 16 17 18 21 23 27 29 30 31 b 32 0 0 1 2 6 7 8 10 13 16 17 18 21 23 27 29 30 31 # 17648 union c a 32 0 0 1 2 6 7 8 10 13 16 17 18 21 23 27 29 30 31 b 32 0 1 f # 17649 union c a 32 0 0 0 4 6 7 8 9 10 11 18 19 21 25 27 29 30 b 32 0 0 0 4 6 7 8 9 10 11 18 19 21 25 27 29 30 # 17650 union c a 32 0 0 0 4 6 7 8 9 10 11 18 19 21 25 27 29 30 b 32 0 1 1 7 10 11 12 14 16 17 18 19 20 25 27 28 29 30 # 17651 union c a 32 0 0 e b 32 0 0 e # 17652 union c a 32 0 0 e b 32 1 0 e # 17653 union c a 32 0 0 e b 32 0 0 e # 17654 union c a 32 0 0 e b 32 1 0 f # 17655 union c a 32 0 0 e b 32 0 0 e # 17656 union c a 32 0 0 e b 32 1 0 0 2 4 5 10 11 12 13 16 20 21 22 23 24 25 26 28 29 30 31 # 17657 union c a 32 0 0 f b 32 0 0 f # 17658 union c a 32 0 0 f b 32 1 0 e # 17659 union c a 32 0 0 f b 32 0 0 f # 17660 union c a 32 0 0 f b 32 1 0 f # 17661 union c a 32 0 0 f b 32 0 0 f # 17662 union c a 32 0 0 f b 32 1 0 7 8 10 13 14 18 19 22 25 26 31 # 17663 union c a 32 0 0 0 1 2 7 8 9 12 14 16 20 22 24 26 28 31 b 32 0 0 0 1 2 7 8 9 12 14 16 20 22 24 26 28 31 # 17664 union c a 32 0 0 0 1 2 7 8 9 12 14 16 20 22 24 26 28 31 b 32 1 0 e # 17665 union c a 32 0 0 4 5 7 8 9 11 13 14 18 21 22 25 26 31 b 32 0 0 4 5 7 8 9 11 13 14 18 21 22 25 26 31 # 17666 union c a 32 0 0 4 5 7 8 9 11 13 14 18 21 22 25 26 31 b 32 1 0 f # 17667 union c a 32 0 0 1 5 6 8 10 13 14 15 17 19 23 26 27 31 b 32 0 0 1 5 6 8 10 13 14 15 17 19 23 26 27 31 # 17668 union c a 32 0 0 1 5 6 8 10 13 14 15 17 19 23 26 27 31 b 32 1 0 0 1 6 9 11 12 15 16 17 18 20 21 26 27 30 # 17669 union c a 32 0 0 e b 32 0 0 e # 17670 union c a 32 0 0 e b 32 1 1 e # 17671 union c a 32 0 0 e b 32 0 0 e # 17672 union c a 32 0 0 e b 32 1 1 f # 17673 union c a 32 0 0 e b 32 0 0 e # 17674 union c a 32 0 0 e b 32 1 1 1 2 3 5 6 7 12 13 15 16 17 19 20 22 24 25 26 29 30 31 # 17675 union c a 32 0 0 f b 32 0 0 f # 17676 union c a 32 0 0 f b 32 1 1 e # 17677 union c a 32 0 0 f b 32 0 0 f # 17678 union c a 32 0 0 f b 32 1 1 f # 17679 union c a 32 0 0 f b 32 0 0 f # 17680 union c a 32 0 0 f b 32 1 1 0 1 3 6 7 8 11 15 17 18 21 22 23 24 25 29 30 # 17681 union c a 32 0 0 0 4 5 7 10 12 16 18 20 21 23 26 27 29 b 32 0 0 0 4 5 7 10 12 16 18 20 21 23 26 27 29 # 17682 union c a 32 0 0 0 4 5 7 10 12 16 18 20 21 23 26 27 29 b 32 1 1 e # 17683 union c a 32 0 0 5 7 13 14 16 17 18 19 21 22 23 25 26 27 28 b 32 0 0 5 7 13 14 16 17 18 19 21 22 23 25 26 27 28 # 17684 union c a 32 0 0 5 7 13 14 16 17 18 19 21 22 23 25 26 27 28 b 32 1 1 f # 17685 union c a 32 0 0 0 1 2 6 7 10 11 12 13 15 18 19 21 22 23 25 26 29 31 b 32 0 0 0 1 2 6 7 10 11 12 13 15 18 19 21 22 23 25 26 29 31 # 17686 union c a 32 0 0 0 1 2 6 7 10 11 12 13 15 18 19 21 22 23 25 26 29 31 b 32 1 1 0 6 7 9 10 12 16 19 22 23 26 # 17687 union c a 32 0 1 e b 32 0 1 e # 17688 union c a 32 0 1 e b 32 0 0 e # 17689 union c a 32 0 1 e b 32 0 1 e # 17690 union c a 32 0 1 e b 32 0 0 f # 17691 union c a 32 0 1 e b 32 0 1 e # 17692 union c a 32 0 1 e b 32 0 0 0 1 4 10 12 16 17 20 22 24 25 26 # 17693 union c a 32 0 1 f b 32 0 1 f # 17694 union c a 32 0 1 f b 32 0 0 e # 17695 union c a 32 0 1 f b 32 0 1 f # 17696 union c a 32 0 1 f b 32 0 0 f # 17697 union c a 32 0 1 f b 32 0 1 f # 17698 union c a 32 0 1 f b 32 0 0 0 1 3 5 7 8 11 12 13 15 17 20 22 23 26 27 28 30 31 # 17699 union c a 32 0 1 2 3 6 8 10 11 12 14 16 17 18 19 21 22 25 27 30 31 b 32 0 1 2 3 6 8 10 11 12 14 16 17 18 19 21 22 25 27 30 31 # 17700 union c a 32 0 1 2 3 6 8 10 11 12 14 16 17 18 19 21 22 25 27 30 31 b 32 0 0 e # 17701 union c a 32 0 1 0 2 3 4 5 8 11 13 16 22 24 25 30 31 b 32 0 1 0 2 3 4 5 8 11 13 16 22 24 25 30 31 # 17702 union c a 32 0 1 0 2 3 4 5 8 11 13 16 22 24 25 30 31 b 32 0 0 f # 17703 union c a 32 0 1 0 1 2 6 11 13 17 19 25 28 31 b 32 0 1 0 1 2 6 11 13 17 19 25 28 31 # 17704 union c a 32 0 1 0 1 2 6 11 13 17 19 25 28 31 b 32 0 0 3 4 9 11 12 13 14 16 18 19 20 23 24 25 27 29 30 # 17705 union c a 32 0 1 e b 32 0 1 e # 17706 union c a 32 0 1 e b 32 0 1 e # 17707 union c a 32 0 1 e b 32 0 1 e # 17708 union c a 32 0 1 e b 32 0 1 f # 17709 union c a 32 0 1 e b 32 0 1 e # 17710 union c a 32 0 1 e b 32 0 1 1 7 9 11 16 19 22 30 31 # 17711 union c a 32 0 1 f b 32 0 1 f # 17712 union c a 32 0 1 f b 32 0 1 e # 17713 union c a 32 0 1 f b 32 0 1 f # 17714 union c a 32 0 1 f b 32 0 1 f # 17715 union c a 32 0 1 f b 32 0 1 f # 17716 union c a 32 0 1 f b 32 0 1 2 4 7 9 10 11 14 18 19 20 21 23 24 25 30 # 17717 union c a 32 0 1 0 1 2 7 8 12 16 21 24 25 27 b 32 0 1 0 1 2 7 8 12 16 21 24 25 27 # 17718 union c a 32 0 1 0 1 2 7 8 12 16 21 24 25 27 b 32 0 1 e # 17719 union c a 32 0 1 2 3 4 6 7 8 10 12 14 16 17 18 20 25 27 29 31 b 32 0 1 2 3 4 6 7 8 10 12 14 16 17 18 20 25 27 29 31 # 17720 union c a 32 0 1 2 3 4 6 7 8 10 12 14 16 17 18 20 25 27 29 31 b 32 0 1 f # 17721 union c a 32 0 1 1 2 5 6 7 8 9 11 18 19 20 25 27 28 30 b 32 0 1 1 2 5 6 7 8 9 11 18 19 20 25 27 28 30 # 17722 union c a 32 0 1 1 2 5 6 7 8 9 11 18 19 20 25 27 28 30 b 32 0 1 1 2 3 5 6 8 14 15 16 18 20 22 23 25 26 30 31 # 17723 union c a 32 0 1 e b 32 0 1 e # 17724 union c a 32 0 1 e b 32 1 0 e # 17725 union c a 32 0 1 e b 32 0 1 e # 17726 union c a 32 0 1 e b 32 1 0 f # 17727 union c a 32 0 1 e b 32 0 1 e # 17728 union c a 32 0 1 e b 32 1 0 2 3 7 8 12 13 14 15 17 20 21 24 25 31 # 17729 union c a 32 0 1 f b 32 0 1 f # 17730 union c a 32 0 1 f b 32 1 0 e # 17731 union c a 32 0 1 f b 32 0 1 f # 17732 union c a 32 0 1 f b 32 1 0 f # 17733 union c a 32 0 1 f b 32 0 1 f # 17734 union c a 32 0 1 f b 32 1 0 0 3 4 5 6 10 13 14 15 18 22 26 27 # 17735 union c a 32 0 1 1 4 6 7 11 15 19 20 21 22 23 25 26 27 28 30 b 32 0 1 1 4 6 7 11 15 19 20 21 22 23 25 26 27 28 30 # 17736 union c a 32 0 1 1 4 6 7 11 15 19 20 21 22 23 25 26 27 28 30 b 32 1 0 e # 17737 union c a 32 0 1 2 3 6 7 8 10 14 15 16 18 21 30 31 b 32 0 1 2 3 6 7 8 10 14 15 16 18 21 30 31 # 17738 union c a 32 0 1 2 3 6 7 8 10 14 15 16 18 21 30 31 b 32 1 0 f # 17739 union c a 32 0 1 1 2 3 5 6 8 9 12 15 16 19 20 21 24 25 26 28 29 b 32 0 1 1 2 3 5 6 8 9 12 15 16 19 20 21 24 25 26 28 29 # 17740 union c a 32 0 1 1 2 3 5 6 8 9 12 15 16 19 20 21 24 25 26 28 29 b 32 1 0 0 1 3 4 7 9 13 14 15 16 18 19 20 23 29 30 # 17741 union c a 32 0 1 e b 32 0 1 e # 17742 union c a 32 0 1 e b 32 1 1 e # 17743 union c a 32 0 1 e b 32 0 1 e # 17744 union c a 32 0 1 e b 32 1 1 f # 17745 union c a 32 0 1 e b 32 0 1 e # 17746 union c a 32 0 1 e b 32 1 1 0 4 7 20 21 25 27 28 30 # 17747 union c a 32 0 1 f b 32 0 1 f # 17748 union c a 32 0 1 f b 32 1 1 e # 17749 union c a 32 0 1 f b 32 0 1 f # 17750 union c a 32 0 1 f b 32 1 1 f # 17751 union c a 32 0 1 f b 32 0 1 f # 17752 union c a 32 0 1 f b 32 1 1 2 4 7 8 11 12 13 18 22 27 31 # 17753 union c a 32 0 1 4 8 9 11 12 13 14 17 18 20 22 24 29 31 b 32 0 1 4 8 9 11 12 13 14 17 18 20 22 24 29 31 # 17754 union c a 32 0 1 4 8 9 11 12 13 14 17 18 20 22 24 29 31 b 32 1 1 e # 17755 union c a 32 0 1 3 4 7 9 10 11 12 13 15 17 22 24 25 28 29 31 b 32 0 1 3 4 7 9 10 11 12 13 15 17 22 24 25 28 29 31 # 17756 union c a 32 0 1 3 4 7 9 10 11 12 13 15 17 22 24 25 28 29 31 b 32 1 1 f # 17757 union c a 32 0 1 2 4 9 12 17 18 19 23 25 31 b 32 0 1 2 4 9 12 17 18 19 23 25 31 # 17758 union c a 32 0 1 2 4 9 12 17 18 19 23 25 31 b 32 1 1 0 2 3 4 11 12 13 17 19 21 22 23 25 27 30 # 17759 union c a 32 1 0 e b 32 1 0 e # 17760 union c a 32 1 0 e b 32 0 0 e # 17761 union c a 32 1 0 e b 32 1 0 e # 17762 union c a 32 1 0 e b 32 0 0 f # 17763 union c a 32 1 0 e b 32 1 0 e # 17764 union c a 32 1 0 e b 32 0 0 0 1 4 5 6 12 14 19 20 21 22 24 28 30 # 17765 union c a 32 1 0 f b 32 1 0 f # 17766 union c a 32 1 0 f b 32 0 0 e # 17767 union c a 32 1 0 f b 32 1 0 f # 17768 union c a 32 1 0 f b 32 0 0 f # 17769 union c a 32 1 0 f b 32 1 0 f # 17770 union c a 32 1 0 f b 32 0 0 0 2 3 5 8 10 11 12 16 17 19 20 23 24 25 28 30 31 # 17771 union c a 32 1 0 0 1 2 3 4 7 8 10 11 12 16 17 19 23 25 28 31 b 32 1 0 0 1 2 3 4 7 8 10 11 12 16 17 19 23 25 28 31 # 17772 union c a 32 1 0 0 1 2 3 4 7 8 10 11 12 16 17 19 23 25 28 31 b 32 0 0 e # 17773 union c a 32 1 0 2 6 9 10 12 14 15 16 17 18 23 24 25 26 27 30 31 b 32 1 0 2 6 9 10 12 14 15 16 17 18 23 24 25 26 27 30 31 # 17774 union c a 32 1 0 2 6 9 10 12 14 15 16 17 18 23 24 25 26 27 30 31 b 32 0 0 f # 17775 union c a 32 1 0 2 3 4 5 8 11 14 18 19 20 21 23 24 26 27 28 30 b 32 1 0 2 3 4 5 8 11 14 18 19 20 21 23 24 26 27 28 30 # 17776 union c a 32 1 0 2 3 4 5 8 11 14 18 19 20 21 23 24 26 27 28 30 b 32 0 0 0 1 3 4 6 8 12 13 14 15 18 22 24 25 29 30 # 17777 union c a 32 1 0 e b 32 1 0 e # 17778 union c a 32 1 0 e b 32 0 1 e # 17779 union c a 32 1 0 e b 32 1 0 e # 17780 union c a 32 1 0 e b 32 0 1 f # 17781 union c a 32 1 0 e b 32 1 0 e # 17782 union c a 32 1 0 e b 32 0 1 0 1 2 5 6 15 16 17 18 21 23 24 25 27 28 # 17783 union c a 32 1 0 f b 32 1 0 f # 17784 union c a 32 1 0 f b 32 0 1 e # 17785 union c a 32 1 0 f b 32 1 0 f # 17786 union c a 32 1 0 f b 32 0 1 f # 17787 union c a 32 1 0 f b 32 1 0 f # 17788 union c a 32 1 0 f b 32 0 1 2 3 5 6 7 10 12 18 23 24 25 26 27 # 17789 union c a 32 1 0 3 8 10 12 14 15 17 19 20 21 22 23 24 25 26 28 29 30 b 32 1 0 3 8 10 12 14 15 17 19 20 21 22 23 24 25 26 28 29 30 # 17790 union c a 32 1 0 3 8 10 12 14 15 17 19 20 21 22 23 24 25 26 28 29 30 b 32 0 1 e # 17791 union c a 32 1 0 1 5 6 7 9 11 14 15 24 25 26 27 28 b 32 1 0 1 5 6 7 9 11 14 15 24 25 26 27 28 # 17792 union c a 32 1 0 1 5 6 7 9 11 14 15 24 25 26 27 28 b 32 0 1 f # 17793 union c a 32 1 0 1 2 3 5 6 7 8 10 11 12 13 14 15 19 25 29 30 31 b 32 1 0 1 2 3 5 6 7 8 10 11 12 13 14 15 19 25 29 30 31 # 17794 union c a 32 1 0 1 2 3 5 6 7 8 10 11 12 13 14 15 19 25 29 30 31 b 32 0 1 0 2 6 7 8 9 10 13 15 16 17 21 22 23 24 29 # 17795 union c a 32 1 0 e b 32 1 0 e # 17796 union c a 32 1 0 e b 32 1 0 e # 17797 union c a 32 1 0 e b 32 1 0 e # 17798 union c a 32 1 0 e b 32 1 0 f # 17799 union c a 32 1 0 e b 32 1 0 e # 17800 union c a 32 1 0 e b 32 1 0 1 3 6 9 10 11 16 17 18 20 21 22 26 27 29 31 # 17801 union c a 32 1 0 f b 32 1 0 f # 17802 union c a 32 1 0 f b 32 1 0 e # 17803 union c a 32 1 0 f b 32 1 0 f # 17804 union c a 32 1 0 f b 32 1 0 f # 17805 union c a 32 1 0 f b 32 1 0 f # 17806 union c a 32 1 0 f b 32 1 0 0 1 6 8 12 13 14 15 16 17 18 20 21 22 25 28 29 31 # 17807 union c a 32 1 0 1 3 4 5 7 14 15 17 20 22 26 27 29 30 31 b 32 1 0 1 3 4 5 7 14 15 17 20 22 26 27 29 30 31 # 17808 union c a 32 1 0 1 3 4 5 7 14 15 17 20 22 26 27 29 30 31 b 32 1 0 e # 17809 union c a 32 1 0 0 1 3 4 5 6 10 12 13 16 17 18 19 21 22 23 25 26 28 b 32 1 0 0 1 3 4 5 6 10 12 13 16 17 18 19 21 22 23 25 26 28 # 17810 union c a 32 1 0 0 1 3 4 5 6 10 12 13 16 17 18 19 21 22 23 25 26 28 b 32 1 0 f # 17811 union c a 32 1 0 1 5 6 7 9 11 13 16 17 18 20 21 22 23 24 25 29 30 31 b 32 1 0 1 5 6 7 9 11 13 16 17 18 20 21 22 23 24 25 29 30 31 # 17812 union c a 32 1 0 1 5 6 7 9 11 13 16 17 18 20 21 22 23 24 25 29 30 31 b 32 1 0 3 6 8 9 12 13 14 16 17 18 20 21 25 26 27 28 29 # 17813 union c a 32 1 0 e b 32 1 0 e # 17814 union c a 32 1 0 e b 32 1 1 e # 17815 union c a 32 1 0 e b 32 1 0 e # 17816 union c a 32 1 0 e b 32 1 1 f # 17817 union c a 32 1 0 e b 32 1 0 e # 17818 union c a 32 1 0 e b 32 1 1 1 4 5 6 7 8 11 15 16 17 19 20 21 24 26 27 30 # 17819 union c a 32 1 0 f b 32 1 0 f # 17820 union c a 32 1 0 f b 32 1 1 e # 17821 union c a 32 1 0 f b 32 1 0 f # 17822 union c a 32 1 0 f b 32 1 1 f # 17823 union c a 32 1 0 f b 32 1 0 f # 17824 union c a 32 1 0 f b 32 1 1 2 5 9 10 11 12 14 15 18 19 21 26 28 29 30 31 # 17825 union c a 32 1 0 1 4 6 9 12 13 17 20 22 24 25 26 28 29 31 b 32 1 0 1 4 6 9 12 13 17 20 22 24 25 26 28 29 31 # 17826 union c a 32 1 0 1 4 6 9 12 13 17 20 22 24 25 26 28 29 31 b 32 1 1 e # 17827 union c a 32 1 0 0 1 3 8 10 11 13 15 16 19 20 21 23 24 25 28 29 b 32 1 0 0 1 3 8 10 11 13 15 16 19 20 21 23 24 25 28 29 # 17828 union c a 32 1 0 0 1 3 8 10 11 13 15 16 19 20 21 23 24 25 28 29 b 32 1 1 f # 17829 union c a 32 1 0 1 3 8 9 12 15 16 18 19 22 25 26 27 28 b 32 1 0 1 3 8 9 12 15 16 18 19 22 25 26 27 28 # 17830 union c a 32 1 0 1 3 8 9 12 15 16 18 19 22 25 26 27 28 b 32 1 1 1 2 6 9 10 13 19 23 25 26 27 # 17831 union c a 32 1 1 e b 32 1 1 e # 17832 union c a 32 1 1 e b 32 0 0 e # 17833 union c a 32 1 1 e b 32 1 1 e # 17834 union c a 32 1 1 e b 32 0 0 f # 17835 union c a 32 1 1 e b 32 1 1 e # 17836 union c a 32 1 1 e b 32 0 0 0 2 5 7 8 10 14 15 18 19 21 22 23 24 26 28 29 30 31 # 17837 union c a 32 1 1 f b 32 1 1 f # 17838 union c a 32 1 1 f b 32 0 0 e # 17839 union c a 32 1 1 f b 32 1 1 f # 17840 union c a 32 1 1 f b 32 0 0 f # 17841 union c a 32 1 1 f b 32 1 1 f # 17842 union c a 32 1 1 f b 32 0 0 1 2 3 8 11 12 14 19 21 22 26 30 31 # 17843 union c a 32 1 1 1 3 5 6 12 13 17 19 20 21 27 28 30 31 b 32 1 1 1 3 5 6 12 13 17 19 20 21 27 28 30 31 # 17844 union c a 32 1 1 1 3 5 6 12 13 17 19 20 21 27 28 30 31 b 32 0 0 e # 17845 union c a 32 1 1 2 3 5 7 10 11 15 18 19 23 24 25 26 29 31 b 32 1 1 2 3 5 7 10 11 15 18 19 23 24 25 26 29 31 # 17846 union c a 32 1 1 2 3 5 7 10 11 15 18 19 23 24 25 26 29 31 b 32 0 0 f # 17847 union c a 32 1 1 0 2 4 5 6 9 11 14 15 16 17 18 21 24 26 27 30 b 32 1 1 0 2 4 5 6 9 11 14 15 16 17 18 21 24 26 27 30 # 17848 union c a 32 1 1 0 2 4 5 6 9 11 14 15 16 17 18 21 24 26 27 30 b 32 0 0 6 7 9 10 11 13 14 16 18 22 24 28 29 # 17849 union c a 32 1 1 e b 32 1 1 e # 17850 union c a 32 1 1 e b 32 0 1 e # 17851 union c a 32 1 1 e b 32 1 1 e # 17852 union c a 32 1 1 e b 32 0 1 f # 17853 union c a 32 1 1 e b 32 1 1 e # 17854 union c a 32 1 1 e b 32 0 1 1 2 3 6 7 9 10 11 12 13 15 19 20 22 23 24 29 30 31 # 17855 union c a 32 1 1 f b 32 1 1 f # 17856 union c a 32 1 1 f b 32 0 1 e # 17857 union c a 32 1 1 f b 32 1 1 f # 17858 union c a 32 1 1 f b 32 0 1 f # 17859 union c a 32 1 1 f b 32 1 1 f # 17860 union c a 32 1 1 f b 32 0 1 0 2 4 5 8 11 12 13 14 18 21 25 26 # 17861 union c a 32 1 1 0 1 3 4 5 8 9 11 12 13 18 19 22 25 26 27 30 b 32 1 1 0 1 3 4 5 8 9 11 12 13 18 19 22 25 26 27 30 # 17862 union c a 32 1 1 0 1 3 4 5 8 9 11 12 13 18 19 22 25 26 27 30 b 32 0 1 e # 17863 union c a 32 1 1 3 5 8 9 11 12 15 16 18 19 20 21 23 26 27 28 29 30 31 b 32 1 1 3 5 8 9 11 12 15 16 18 19 20 21 23 26 27 28 29 30 31 # 17864 union c a 32 1 1 3 5 8 9 11 12 15 16 18 19 20 21 23 26 27 28 29 30 31 b 32 0 1 f # 17865 union c a 32 1 1 2 4 6 7 9 11 13 14 16 17 19 21 22 23 26 27 29 30 b 32 1 1 2 4 6 7 9 11 13 14 16 17 19 21 22 23 26 27 29 30 # 17866 union c a 32 1 1 2 4 6 7 9 11 13 14 16 17 19 21 22 23 26 27 29 30 b 32 0 1 0 1 2 3 5 6 7 8 10 12 13 15 17 18 19 22 23 24 25 26 29 30 # 17867 union c a 32 1 1 e b 32 1 1 e # 17868 union c a 32 1 1 e b 32 1 0 e # 17869 union c a 32 1 1 e b 32 1 1 e # 17870 union c a 32 1 1 e b 32 1 0 f # 17871 union c a 32 1 1 e b 32 1 1 e # 17872 union c a 32 1 1 e b 32 1 0 0 1 6 9 13 15 16 18 20 21 22 23 24 25 26 29 30 # 17873 union c a 32 1 1 f b 32 1 1 f # 17874 union c a 32 1 1 f b 32 1 0 e # 17875 union c a 32 1 1 f b 32 1 1 f # 17876 union c a 32 1 1 f b 32 1 0 f # 17877 union c a 32 1 1 f b 32 1 1 f # 17878 union c a 32 1 1 f b 32 1 0 3 7 9 11 12 13 14 17 18 19 20 21 22 25 26 27 31 # 17879 union c a 32 1 1 0 1 2 8 9 11 12 13 15 16 17 18 20 21 22 25 27 30 31 b 32 1 1 0 1 2 8 9 11 12 13 15 16 17 18 20 21 22 25 27 30 31 # 17880 union c a 32 1 1 0 1 2 8 9 11 12 13 15 16 17 18 20 21 22 25 27 30 31 b 32 1 0 e # 17881 union c a 32 1 1 1 6 10 11 14 15 17 19 20 28 b 32 1 1 1 6 10 11 14 15 17 19 20 28 # 17882 union c a 32 1 1 1 6 10 11 14 15 17 19 20 28 b 32 1 0 f # 17883 union c a 32 1 1 1 2 5 6 8 9 12 17 24 25 26 27 28 b 32 1 1 1 2 5 6 8 9 12 17 24 25 26 27 28 # 17884 union c a 32 1 1 1 2 5 6 8 9 12 17 24 25 26 27 28 b 32 1 0 1 2 4 6 7 10 12 16 17 18 22 24 25 27 # 17885 union c a 32 1 1 e b 32 1 1 e # 17886 union c a 32 1 1 e b 32 1 1 e # 17887 union c a 32 1 1 e b 32 1 1 e # 17888 union c a 32 1 1 e b 32 1 1 f # 17889 union c a 32 1 1 e b 32 1 1 e # 17890 union c a 32 1 1 e b 32 1 1 1 2 5 6 7 9 10 14 17 20 22 23 24 25 26 30 31 # 17891 union c a 32 1 1 f b 32 1 1 f # 17892 union c a 32 1 1 f b 32 1 1 e # 17893 union c a 32 1 1 f b 32 1 1 f # 17894 union c a 32 1 1 f b 32 1 1 f # 17895 union c a 32 1 1 f b 32 1 1 f # 17896 union c a 32 1 1 f b 32 1 1 1 3 4 10 12 13 14 18 26 27 28 30 31 # 17897 union c a 32 1 1 2 3 7 8 9 11 12 13 14 17 18 19 23 24 25 26 29 31 b 32 1 1 2 3 7 8 9 11 12 13 14 17 18 19 23 24 25 26 29 31 # 17898 union c a 32 1 1 2 3 7 8 9 11 12 13 14 17 18 19 23 24 25 26 29 31 b 32 1 1 e # 17899 union c a 32 1 1 0 2 5 8 10 11 13 14 15 16 17 19 20 21 22 23 24 29 30 b 32 1 1 0 2 5 8 10 11 13 14 15 16 17 19 20 21 22 23 24 29 30 # 17900 union c a 32 1 1 0 2 5 8 10 11 13 14 15 16 17 19 20 21 22 23 24 29 30 b 32 1 1 f # 17901 union c a 32 1 1 0 1 2 4 5 6 7 9 11 12 14 20 22 23 24 26 27 28 29 31 b 32 1 1 0 1 2 4 5 6 7 9 11 12 14 20 22 23 24 26 27 28 29 31 # 17902 union c a 32 1 1 0 1 2 4 5 6 7 9 11 12 14 20 22 23 24 26 27 28 29 31 b 32 1 1 0 1 4 8 9 11 17 18 20 21 23 24 26 27 29 30 31 # 17903 union c a 33 0 0 e b 33 0 0 e # 17904 union c a 33 0 0 e b 33 0 0 e # 17905 union c a 33 0 0 e b 33 0 0 e # 17906 union c a 33 0 0 e b 33 0 0 f # 17907 union c a 33 0 0 e b 33 0 0 e # 17908 union c a 33 0 0 e b 33 0 0 0 3 4 5 7 9 11 13 15 17 20 23 24 25 26 27 28 29 30 31 # 17909 union c a 33 0 0 f b 33 0 0 f # 17910 union c a 33 0 0 f b 33 0 0 e # 17911 union c a 33 0 0 f b 33 0 0 f # 17912 union c a 33 0 0 f b 33 0 0 f # 17913 union c a 33 0 0 f b 33 0 0 f # 17914 union c a 33 0 0 f b 33 0 0 1 2 5 6 10 11 12 15 16 17 22 24 25 27 28 30 # 17915 union c a 33 0 0 0 1 2 3 6 7 8 9 10 16 18 21 25 28 29 30 31 32 b 33 0 0 0 1 2 3 6 7 8 9 10 16 18 21 25 28 29 30 31 32 # 17916 union c a 33 0 0 0 1 2 3 6 7 8 9 10 16 18 21 25 28 29 30 31 32 b 33 0 0 e # 17917 union c a 33 0 0 1 3 4 6 7 8 13 15 17 20 21 22 23 26 28 29 32 b 33 0 0 1 3 4 6 7 8 13 15 17 20 21 22 23 26 28 29 32 # 17918 union c a 33 0 0 1 3 4 6 7 8 13 15 17 20 21 22 23 26 28 29 32 b 33 0 0 f # 17919 union c a 33 0 0 3 4 6 10 12 13 14 20 22 29 31 32 b 33 0 0 3 4 6 10 12 13 14 20 22 29 31 32 # 17920 union c a 33 0 0 3 4 6 10 12 13 14 20 22 29 31 32 b 33 0 0 0 1 2 3 7 8 9 11 13 14 15 18 19 20 21 25 26 27 29 30 31 # 17921 union c a 33 0 0 e b 33 0 0 e # 17922 union c a 33 0 0 e b 33 0 1 e # 17923 union c a 33 0 0 e b 33 0 0 e # 17924 union c a 33 0 0 e b 33 0 1 f # 17925 union c a 33 0 0 e b 33 0 0 e # 17926 union c a 33 0 0 e b 33 0 1 0 1 2 5 9 10 12 14 17 27 # 17927 union c a 33 0 0 f b 33 0 0 f # 17928 union c a 33 0 0 f b 33 0 1 e # 17929 union c a 33 0 0 f b 33 0 0 f # 17930 union c a 33 0 0 f b 33 0 1 f # 17931 union c a 33 0 0 f b 33 0 0 f # 17932 union c a 33 0 0 f b 33 0 1 1 2 4 7 8 9 10 14 17 19 21 23 27 28 29 32 # 17933 union c a 33 0 0 2 4 5 7 8 9 11 12 15 16 19 20 22 23 24 25 26 27 28 29 b 33 0 0 2 4 5 7 8 9 11 12 15 16 19 20 22 23 24 25 26 27 28 29 # 17934 union c a 33 0 0 2 4 5 7 8 9 11 12 15 16 19 20 22 23 24 25 26 27 28 29 b 33 0 1 e # 17935 union c a 33 0 0 1 3 6 9 10 11 13 14 15 16 17 20 22 25 29 30 b 33 0 0 1 3 6 9 10 11 13 14 15 16 17 20 22 25 29 30 # 17936 union c a 33 0 0 1 3 6 9 10 11 13 14 15 16 17 20 22 25 29 30 b 33 0 1 f # 17937 union c a 33 0 0 2 5 6 7 8 9 11 12 13 14 15 17 19 20 21 23 26 30 32 b 33 0 0 2 5 6 7 8 9 11 12 13 14 15 17 19 20 21 23 26 30 32 # 17938 union c a 33 0 0 2 5 6 7 8 9 11 12 13 14 15 17 19 20 21 23 26 30 32 b 33 0 1 1 4 7 10 12 13 14 15 17 18 21 22 23 24 25 26 28 # 17939 union c a 33 0 0 e b 33 0 0 e # 17940 union c a 33 0 0 e b 33 1 0 e # 17941 union c a 33 0 0 e b 33 0 0 e # 17942 union c a 33 0 0 e b 33 1 0 f # 17943 union c a 33 0 0 e b 33 0 0 e # 17944 union c a 33 0 0 e b 33 1 0 1 3 9 12 15 17 18 21 22 24 30 31 # 17945 union c a 33 0 0 f b 33 0 0 f # 17946 union c a 33 0 0 f b 33 1 0 e # 17947 union c a 33 0 0 f b 33 0 0 f # 17948 union c a 33 0 0 f b 33 1 0 f # 17949 union c a 33 0 0 f b 33 0 0 f # 17950 union c a 33 0 0 f b 33 1 0 1 3 4 5 7 11 12 15 17 19 20 21 22 23 24 25 28 30 31 # 17951 union c a 33 0 0 1 4 5 6 9 11 14 15 17 18 20 21 23 25 27 30 31 b 33 0 0 1 4 5 6 9 11 14 15 17 18 20 21 23 25 27 30 31 # 17952 union c a 33 0 0 1 4 5 6 9 11 14 15 17 18 20 21 23 25 27 30 31 b 33 1 0 e # 17953 union c a 33 0 0 1 4 5 6 10 13 14 21 26 27 b 33 0 0 1 4 5 6 10 13 14 21 26 27 # 17954 union c a 33 0 0 1 4 5 6 10 13 14 21 26 27 b 33 1 0 f # 17955 union c a 33 0 0 1 5 7 9 12 13 14 17 18 21 22 23 24 25 26 28 30 b 33 0 0 1 5 7 9 12 13 14 17 18 21 22 23 24 25 26 28 30 # 17956 union c a 33 0 0 1 5 7 9 12 13 14 17 18 21 22 23 24 25 26 28 30 b 33 1 0 0 1 2 3 5 17 18 22 27 28 29 31 # 17957 union c a 33 0 0 e b 33 0 0 e # 17958 union c a 33 0 0 e b 33 1 1 e # 17959 union c a 33 0 0 e b 33 0 0 e # 17960 union c a 33 0 0 e b 33 1 1 f # 17961 union c a 33 0 0 e b 33 0 0 e # 17962 union c a 33 0 0 e b 33 1 1 0 1 2 3 4 5 6 10 11 12 13 14 16 18 22 25 28 30 31 # 17963 union c a 33 0 0 f b 33 0 0 f # 17964 union c a 33 0 0 f b 33 1 1 e # 17965 union c a 33 0 0 f b 33 0 0 f # 17966 union c a 33 0 0 f b 33 1 1 f # 17967 union c a 33 0 0 f b 33 0 0 f # 17968 union c a 33 0 0 f b 33 1 1 1 4 5 6 7 10 15 18 22 23 24 26 28 29 30 32 # 17969 union c a 33 0 0 0 1 3 4 9 10 12 14 18 19 21 22 24 27 29 32 b 33 0 0 0 1 3 4 9 10 12 14 18 19 21 22 24 27 29 32 # 17970 union c a 33 0 0 0 1 3 4 9 10 12 14 18 19 21 22 24 27 29 32 b 33 1 1 e # 17971 union c a 33 0 0 0 1 2 5 6 7 8 10 12 14 17 19 20 21 22 28 29 31 32 b 33 0 0 0 1 2 5 6 7 8 10 12 14 17 19 20 21 22 28 29 31 32 # 17972 union c a 33 0 0 0 1 2 5 6 7 8 10 12 14 17 19 20 21 22 28 29 31 32 b 33 1 1 f # 17973 union c a 33 0 0 2 5 6 8 12 13 14 15 17 21 22 23 26 27 28 29 30 31 b 33 0 0 2 5 6 8 12 13 14 15 17 21 22 23 26 27 28 29 30 31 # 17974 union c a 33 0 0 2 5 6 8 12 13 14 15 17 21 22 23 26 27 28 29 30 31 b 33 1 1 0 2 3 6 8 12 14 15 16 17 20 22 23 25 26 29 30 32 # 17975 union c a 33 0 1 e b 33 0 1 e # 17976 union c a 33 0 1 e b 33 0 0 e # 17977 union c a 33 0 1 e b 33 0 1 e # 17978 union c a 33 0 1 e b 33 0 0 f # 17979 union c a 33 0 1 e b 33 0 1 e # 17980 union c a 33 0 1 e b 33 0 0 1 3 4 5 7 9 10 12 13 15 16 17 25 26 27 29 30 31 32 # 17981 union c a 33 0 1 f b 33 0 1 f # 17982 union c a 33 0 1 f b 33 0 0 e # 17983 union c a 33 0 1 f b 33 0 1 f # 17984 union c a 33 0 1 f b 33 0 0 f # 17985 union c a 33 0 1 f b 33 0 1 f # 17986 union c a 33 0 1 f b 33 0 0 1 2 3 5 8 9 10 12 13 15 17 19 22 23 25 28 # 17987 union c a 33 0 1 0 3 5 8 9 13 14 19 22 24 29 30 32 b 33 0 1 0 3 5 8 9 13 14 19 22 24 29 30 32 # 17988 union c a 33 0 1 0 3 5 8 9 13 14 19 22 24 29 30 32 b 33 0 0 e # 17989 union c a 33 0 1 3 4 5 6 7 8 11 12 16 17 18 20 24 25 26 27 28 30 31 b 33 0 1 3 4 5 6 7 8 11 12 16 17 18 20 24 25 26 27 28 30 31 # 17990 union c a 33 0 1 3 4 5 6 7 8 11 12 16 17 18 20 24 25 26 27 28 30 31 b 33 0 0 f # 17991 union c a 33 0 1 1 3 4 5 6 7 9 10 11 14 19 20 22 23 25 30 31 b 33 0 1 1 3 4 5 6 7 9 10 11 14 19 20 22 23 25 30 31 # 17992 union c a 33 0 1 1 3 4 5 6 7 9 10 11 14 19 20 22 23 25 30 31 b 33 0 0 1 4 7 10 11 12 18 19 21 23 25 27 28 31 32 # 17993 union c a 33 0 1 e b 33 0 1 e # 17994 union c a 33 0 1 e b 33 0 1 e # 17995 union c a 33 0 1 e b 33 0 1 e # 17996 union c a 33 0 1 e b 33 0 1 f # 17997 union c a 33 0 1 e b 33 0 1 e # 17998 union c a 33 0 1 e b 33 0 1 2 3 4 6 7 9 10 11 12 19 24 25 26 29 31 # 17999 union c a 33 0 1 f b 33 0 1 f # 18000 union c a 33 0 1 f b 33 0 1 e # 18001 union c a 33 0 1 f b 33 0 1 f # 18002 union c a 33 0 1 f b 33 0 1 f # 18003 union c a 33 0 1 f b 33 0 1 f # 18004 union c a 33 0 1 f b 33 0 1 0 2 5 6 8 9 12 16 18 20 21 23 24 25 26 27 28 29 31 # 18005 union c a 33 0 1 2 5 11 12 14 20 21 24 27 30 31 32 b 33 0 1 2 5 11 12 14 20 21 24 27 30 31 32 # 18006 union c a 33 0 1 2 5 11 12 14 20 21 24 27 30 31 32 b 33 0 1 e # 18007 union c a 33 0 1 0 1 3 5 6 7 8 9 10 14 15 17 21 26 27 29 30 31 32 b 33 0 1 0 1 3 5 6 7 8 9 10 14 15 17 21 26 27 29 30 31 32 # 18008 union c a 33 0 1 0 1 3 5 6 7 8 9 10 14 15 17 21 26 27 29 30 31 32 b 33 0 1 f # 18009 union c a 33 0 1 1 2 4 5 9 10 11 13 17 18 22 25 26 27 28 29 30 b 33 0 1 1 2 4 5 9 10 11 13 17 18 22 25 26 27 28 29 30 # 18010 union c a 33 0 1 1 2 4 5 9 10 11 13 17 18 22 25 26 27 28 29 30 b 33 0 1 0 4 5 6 8 9 10 12 14 15 17 18 20 22 25 27 32 # 18011 union c a 33 0 1 e b 33 0 1 e # 18012 union c a 33 0 1 e b 33 1 0 e # 18013 union c a 33 0 1 e b 33 0 1 e # 18014 union c a 33 0 1 e b 33 1 0 f # 18015 union c a 33 0 1 e b 33 0 1 e # 18016 union c a 33 0 1 e b 33 1 0 0 1 2 4 9 11 14 19 21 22 23 24 25 29 # 18017 union c a 33 0 1 f b 33 0 1 f # 18018 union c a 33 0 1 f b 33 1 0 e # 18019 union c a 33 0 1 f b 33 0 1 f # 18020 union c a 33 0 1 f b 33 1 0 f # 18021 union c a 33 0 1 f b 33 0 1 f # 18022 union c a 33 0 1 f b 33 1 0 1 4 5 6 7 13 14 15 16 19 22 24 26 28 30 31 32 # 18023 union c a 33 0 1 2 3 5 7 8 9 11 14 15 19 21 24 25 28 32 b 33 0 1 2 3 5 7 8 9 11 14 15 19 21 24 25 28 32 # 18024 union c a 33 0 1 2 3 5 7 8 9 11 14 15 19 21 24 25 28 32 b 33 1 0 e # 18025 union c a 33 0 1 2 3 5 6 8 9 10 13 14 15 20 21 23 24 26 28 30 31 b 33 0 1 2 3 5 6 8 9 10 13 14 15 20 21 23 24 26 28 30 31 # 18026 union c a 33 0 1 2 3 5 6 8 9 10 13 14 15 20 21 23 24 26 28 30 31 b 33 1 0 f # 18027 union c a 33 0 1 0 1 2 3 4 6 7 8 9 11 12 14 23 26 29 30 32 b 33 0 1 0 1 2 3 4 6 7 8 9 11 12 14 23 26 29 30 32 # 18028 union c a 33 0 1 0 1 2 3 4 6 7 8 9 11 12 14 23 26 29 30 32 b 33 1 0 0 2 4 7 8 9 10 11 12 13 17 18 20 21 22 26 30 32 # 18029 union c a 33 0 1 e b 33 0 1 e # 18030 union c a 33 0 1 e b 33 1 1 e # 18031 union c a 33 0 1 e b 33 0 1 e # 18032 union c a 33 0 1 e b 33 1 1 f # 18033 union c a 33 0 1 e b 33 0 1 e # 18034 union c a 33 0 1 e b 33 1 1 0 2 4 5 6 7 9 10 13 14 16 20 21 22 24 29 30 31 # 18035 union c a 33 0 1 f b 33 0 1 f # 18036 union c a 33 0 1 f b 33 1 1 e # 18037 union c a 33 0 1 f b 33 0 1 f # 18038 union c a 33 0 1 f b 33 1 1 f # 18039 union c a 33 0 1 f b 33 0 1 f # 18040 union c a 33 0 1 f b 33 1 1 0 2 5 6 10 13 17 19 20 21 22 23 25 27 28 31 # 18041 union c a 33 0 1 2 3 5 7 8 9 10 11 14 15 16 17 18 19 20 21 22 23 24 25 26 30 32 b 33 0 1 2 3 5 7 8 9 10 11 14 15 16 17 18 19 20 21 22 23 24 25 26 30 32 # 18042 union c a 33 0 1 2 3 5 7 8 9 10 11 14 15 16 17 18 19 20 21 22 23 24 25 26 30 32 b 33 1 1 e # 18043 union c a 33 0 1 2 4 5 7 8 9 12 15 16 17 18 19 20 22 23 25 27 28 29 b 33 0 1 2 4 5 7 8 9 12 15 16 17 18 19 20 22 23 25 27 28 29 # 18044 union c a 33 0 1 2 4 5 7 8 9 12 15 16 17 18 19 20 22 23 25 27 28 29 b 33 1 1 f # 18045 union c a 33 0 1 1 4 6 7 10 11 13 14 16 24 26 28 30 32 b 33 0 1 1 4 6 7 10 11 13 14 16 24 26 28 30 32 # 18046 union c a 33 0 1 1 4 6 7 10 11 13 14 16 24 26 28 30 32 b 33 1 1 0 2 5 6 7 8 11 13 14 15 17 18 19 23 25 28 29 31 # 18047 union c a 33 1 0 e b 33 1 0 e # 18048 union c a 33 1 0 e b 33 0 0 e # 18049 union c a 33 1 0 e b 33 1 0 e # 18050 union c a 33 1 0 e b 33 0 0 f # 18051 union c a 33 1 0 e b 33 1 0 e # 18052 union c a 33 1 0 e b 33 0 0 1 2 4 8 14 18 20 22 23 24 26 27 28 30 # 18053 union c a 33 1 0 f b 33 1 0 f # 18054 union c a 33 1 0 f b 33 0 0 e # 18055 union c a 33 1 0 f b 33 1 0 f # 18056 union c a 33 1 0 f b 33 0 0 f # 18057 union c a 33 1 0 f b 33 1 0 f # 18058 union c a 33 1 0 f b 33 0 0 0 1 6 7 8 10 15 16 17 18 20 21 23 26 27 29 31 32 # 18059 union c a 33 1 0 0 2 5 7 8 10 11 12 13 14 15 18 20 21 22 25 31 32 b 33 1 0 0 2 5 7 8 10 11 12 13 14 15 18 20 21 22 25 31 32 # 18060 union c a 33 1 0 0 2 5 7 8 10 11 12 13 14 15 18 20 21 22 25 31 32 b 33 0 0 e # 18061 union c a 33 1 0 2 3 5 6 7 8 9 10 12 13 14 16 20 22 23 24 26 28 29 31 b 33 1 0 2 3 5 6 7 8 9 10 12 13 14 16 20 22 23 24 26 28 29 31 # 18062 union c a 33 1 0 2 3 5 6 7 8 9 10 12 13 14 16 20 22 23 24 26 28 29 31 b 33 0 0 f # 18063 union c a 33 1 0 1 2 3 4 5 6 8 11 16 17 20 25 28 b 33 1 0 1 2 3 4 5 6 8 11 16 17 20 25 28 # 18064 union c a 33 1 0 1 2 3 4 5 6 8 11 16 17 20 25 28 b 33 0 0 2 3 4 6 8 12 13 14 15 18 19 22 24 27 28 31 32 # 18065 union c a 33 1 0 e b 33 1 0 e # 18066 union c a 33 1 0 e b 33 0 1 e # 18067 union c a 33 1 0 e b 33 1 0 e # 18068 union c a 33 1 0 e b 33 0 1 f # 18069 union c a 33 1 0 e b 33 1 0 e # 18070 union c a 33 1 0 e b 33 0 1 1 2 3 4 5 9 12 14 15 17 19 20 21 23 24 26 28 29 31 32 # 18071 union c a 33 1 0 f b 33 1 0 f # 18072 union c a 33 1 0 f b 33 0 1 e # 18073 union c a 33 1 0 f b 33 1 0 f # 18074 union c a 33 1 0 f b 33 0 1 f # 18075 union c a 33 1 0 f b 33 1 0 f # 18076 union c a 33 1 0 f b 33 0 1 0 1 3 5 7 8 9 10 12 13 15 19 20 22 26 27 28 29 30 31 32 # 18077 union c a 33 1 0 1 2 3 5 6 8 12 13 14 15 17 18 19 20 21 24 26 27 28 29 30 b 33 1 0 1 2 3 5 6 8 12 13 14 15 17 18 19 20 21 24 26 27 28 29 30 # 18078 union c a 33 1 0 1 2 3 5 6 8 12 13 14 15 17 18 19 20 21 24 26 27 28 29 30 b 33 0 1 e # 18079 union c a 33 1 0 0 2 3 5 9 12 14 16 17 19 20 22 25 28 30 32 b 33 1 0 0 2 3 5 9 12 14 16 17 19 20 22 25 28 30 32 # 18080 union c a 33 1 0 0 2 3 5 9 12 14 16 17 19 20 22 25 28 30 32 b 33 0 1 f # 18081 union c a 33 1 0 2 4 6 7 8 9 11 12 13 14 17 19 20 21 23 24 26 31 b 33 1 0 2 4 6 7 8 9 11 12 13 14 17 19 20 21 23 24 26 31 # 18082 union c a 33 1 0 2 4 6 7 8 9 11 12 13 14 17 19 20 21 23 24 26 31 b 33 0 1 3 4 5 7 10 14 16 20 25 30 # 18083 union c a 33 1 0 e b 33 1 0 e # 18084 union c a 33 1 0 e b 33 1 0 e # 18085 union c a 33 1 0 e b 33 1 0 e # 18086 union c a 33 1 0 e b 33 1 0 f # 18087 union c a 33 1 0 e b 33 1 0 e # 18088 union c a 33 1 0 e b 33 1 0 4 6 10 12 16 17 24 25 28 29 30 # 18089 union c a 33 1 0 f b 33 1 0 f # 18090 union c a 33 1 0 f b 33 1 0 e # 18091 union c a 33 1 0 f b 33 1 0 f # 18092 union c a 33 1 0 f b 33 1 0 f # 18093 union c a 33 1 0 f b 33 1 0 f # 18094 union c a 33 1 0 f b 33 1 0 2 3 6 8 12 13 14 18 19 20 21 22 23 25 26 28 29 30 31 # 18095 union c a 33 1 0 0 1 2 3 4 6 8 10 11 14 17 21 22 24 27 28 31 32 b 33 1 0 0 1 2 3 4 6 8 10 11 14 17 21 22 24 27 28 31 32 # 18096 union c a 33 1 0 0 1 2 3 4 6 8 10 11 14 17 21 22 24 27 28 31 32 b 33 1 0 e # 18097 union c a 33 1 0 0 1 2 4 5 6 7 8 9 12 13 14 16 17 18 19 20 22 23 24 26 27 28 29 30 31 b 33 1 0 0 1 2 4 5 6 7 8 9 12 13 14 16 17 18 19 20 22 23 24 26 27 28 29 30 31 # 18098 union c a 33 1 0 0 1 2 4 5 6 7 8 9 12 13 14 16 17 18 19 20 22 23 24 26 27 28 29 30 31 b 33 1 0 f # 18099 union c a 33 1 0 0 1 3 4 6 7 12 13 15 16 18 20 21 24 29 30 31 32 b 33 1 0 0 1 3 4 6 7 12 13 15 16 18 20 21 24 29 30 31 32 # 18100 union c a 33 1 0 0 1 3 4 6 7 12 13 15 16 18 20 21 24 29 30 31 32 b 33 1 0 1 2 5 6 7 10 13 15 17 18 20 22 31 # 18101 union c a 33 1 0 e b 33 1 0 e # 18102 union c a 33 1 0 e b 33 1 1 e # 18103 union c a 33 1 0 e b 33 1 0 e # 18104 union c a 33 1 0 e b 33 1 1 f # 18105 union c a 33 1 0 e b 33 1 0 e # 18106 union c a 33 1 0 e b 33 1 1 2 9 10 11 12 13 15 17 18 19 20 21 25 26 27 31 32 # 18107 union c a 33 1 0 f b 33 1 0 f # 18108 union c a 33 1 0 f b 33 1 1 e # 18109 union c a 33 1 0 f b 33 1 0 f # 18110 union c a 33 1 0 f b 33 1 1 f # 18111 union c a 33 1 0 f b 33 1 0 f # 18112 union c a 33 1 0 f b 33 1 1 0 1 2 6 9 13 14 15 16 18 19 20 21 24 26 30 # 18113 union c a 33 1 0 0 1 2 4 6 10 12 13 17 21 26 27 b 33 1 0 0 1 2 4 6 10 12 13 17 21 26 27 # 18114 union c a 33 1 0 0 1 2 4 6 10 12 13 17 21 26 27 b 33 1 1 e # 18115 union c a 33 1 0 1 3 4 5 9 12 13 14 15 16 19 21 23 24 28 29 30 32 b 33 1 0 1 3 4 5 9 12 13 14 15 16 19 21 23 24 28 29 30 32 # 18116 union c a 33 1 0 1 3 4 5 9 12 13 14 15 16 19 21 23 24 28 29 30 32 b 33 1 1 f # 18117 union c a 33 1 0 0 1 2 3 7 10 13 17 18 19 21 22 25 28 31 b 33 1 0 0 1 2 3 7 10 13 17 18 19 21 22 25 28 31 # 18118 union c a 33 1 0 0 1 2 3 7 10 13 17 18 19 21 22 25 28 31 b 33 1 1 2 3 4 5 8 11 12 13 14 15 16 17 18 19 20 23 24 25 30 31 32 # 18119 union c a 33 1 1 e b 33 1 1 e # 18120 union c a 33 1 1 e b 33 0 0 e # 18121 union c a 33 1 1 e b 33 1 1 e # 18122 union c a 33 1 1 e b 33 0 0 f # 18123 union c a 33 1 1 e b 33 1 1 e # 18124 union c a 33 1 1 e b 33 0 0 1 4 5 6 9 12 13 15 16 20 23 24 27 30 31 32 # 18125 union c a 33 1 1 f b 33 1 1 f # 18126 union c a 33 1 1 f b 33 0 0 e # 18127 union c a 33 1 1 f b 33 1 1 f # 18128 union c a 33 1 1 f b 33 0 0 f # 18129 union c a 33 1 1 f b 33 1 1 f # 18130 union c a 33 1 1 f b 33 0 0 1 2 3 4 7 8 11 12 14 15 16 18 19 22 23 24 25 27 29 30 31 32 # 18131 union c a 33 1 1 0 1 2 4 5 9 12 15 16 20 23 24 27 29 30 32 b 33 1 1 0 1 2 4 5 9 12 15 16 20 23 24 27 29 30 32 # 18132 union c a 33 1 1 0 1 2 4 5 9 12 15 16 20 23 24 27 29 30 32 b 33 0 0 e # 18133 union c a 33 1 1 0 1 2 4 6 7 10 11 13 14 15 18 19 23 24 26 27 28 31 32 b 33 1 1 0 1 2 4 6 7 10 11 13 14 15 18 19 23 24 26 27 28 31 32 # 18134 union c a 33 1 1 0 1 2 4 6 7 10 11 13 14 15 18 19 23 24 26 27 28 31 32 b 33 0 0 f # 18135 union c a 33 1 1 2 4 5 6 8 9 10 14 15 19 20 21 24 28 29 31 b 33 1 1 2 4 5 6 8 9 10 14 15 19 20 21 24 28 29 31 # 18136 union c a 33 1 1 2 4 5 6 8 9 10 14 15 19 20 21 24 28 29 31 b 33 0 0 6 10 11 14 15 16 17 18 19 21 22 25 32 # 18137 union c a 33 1 1 e b 33 1 1 e # 18138 union c a 33 1 1 e b 33 0 1 e # 18139 union c a 33 1 1 e b 33 1 1 e # 18140 union c a 33 1 1 e b 33 0 1 f # 18141 union c a 33 1 1 e b 33 1 1 e # 18142 union c a 33 1 1 e b 33 0 1 0 1 4 11 15 16 19 20 21 23 24 28 29 30 31 # 18143 union c a 33 1 1 f b 33 1 1 f # 18144 union c a 33 1 1 f b 33 0 1 e # 18145 union c a 33 1 1 f b 33 1 1 f # 18146 union c a 33 1 1 f b 33 0 1 f # 18147 union c a 33 1 1 f b 33 1 1 f # 18148 union c a 33 1 1 f b 33 0 1 1 3 6 7 8 9 10 13 19 22 23 24 26 29 30 32 # 18149 union c a 33 1 1 3 5 6 7 8 9 11 13 18 19 21 24 25 26 27 28 b 33 1 1 3 5 6 7 8 9 11 13 18 19 21 24 25 26 27 28 # 18150 union c a 33 1 1 3 5 6 7 8 9 11 13 18 19 21 24 25 26 27 28 b 33 0 1 e # 18151 union c a 33 1 1 0 1 2 3 4 5 6 7 8 9 10 11 12 14 17 21 24 27 28 b 33 1 1 0 1 2 3 4 5 6 7 8 9 10 11 12 14 17 21 24 27 28 # 18152 union c a 33 1 1 0 1 2 3 4 5 6 7 8 9 10 11 12 14 17 21 24 27 28 b 33 0 1 f # 18153 union c a 33 1 1 3 4 5 6 7 8 9 10 12 13 14 18 20 21 26 27 28 31 32 b 33 1 1 3 4 5 6 7 8 9 10 12 13 14 18 20 21 26 27 28 31 32 # 18154 union c a 33 1 1 3 4 5 6 7 8 9 10 12 13 14 18 20 21 26 27 28 31 32 b 33 0 1 1 2 4 7 9 12 13 14 16 19 21 22 23 24 25 28 30 # 18155 union c a 33 1 1 e b 33 1 1 e # 18156 union c a 33 1 1 e b 33 1 0 e # 18157 union c a 33 1 1 e b 33 1 1 e # 18158 union c a 33 1 1 e b 33 1 0 f # 18159 union c a 33 1 1 e b 33 1 1 e # 18160 union c a 33 1 1 e b 33 1 0 0 1 8 9 11 13 15 21 22 23 26 27 31 # 18161 union c a 33 1 1 f b 33 1 1 f # 18162 union c a 33 1 1 f b 33 1 0 e # 18163 union c a 33 1 1 f b 33 1 1 f # 18164 union c a 33 1 1 f b 33 1 0 f # 18165 union c a 33 1 1 f b 33 1 1 f # 18166 union c a 33 1 1 f b 33 1 0 0 2 4 6 8 9 10 11 13 16 17 18 19 20 21 23 24 28 30 31 # 18167 union c a 33 1 1 0 5 7 8 12 13 20 22 27 28 31 32 b 33 1 1 0 5 7 8 12 13 20 22 27 28 31 32 # 18168 union c a 33 1 1 0 5 7 8 12 13 20 22 27 28 31 32 b 33 1 0 e # 18169 union c a 33 1 1 1 2 5 6 11 12 13 16 17 20 21 22 23 26 27 28 29 30 32 b 33 1 1 1 2 5 6 11 12 13 16 17 20 21 22 23 26 27 28 29 30 32 # 18170 union c a 33 1 1 1 2 5 6 11 12 13 16 17 20 21 22 23 26 27 28 29 30 32 b 33 1 0 f # 18171 union c a 33 1 1 0 2 3 6 7 8 9 10 16 17 18 19 21 23 24 26 27 29 31 b 33 1 1 0 2 3 6 7 8 9 10 16 17 18 19 21 23 24 26 27 29 31 # 18172 union c a 33 1 1 0 2 3 6 7 8 9 10 16 17 18 19 21 23 24 26 27 29 31 b 33 1 0 1 2 3 4 5 6 7 8 12 18 20 21 24 26 27 28 29 # 18173 union c a 33 1 1 e b 33 1 1 e # 18174 union c a 33 1 1 e b 33 1 1 e # 18175 union c a 33 1 1 e b 33 1 1 e # 18176 union c a 33 1 1 e b 33 1 1 f # 18177 union c a 33 1 1 e b 33 1 1 e # 18178 union c a 33 1 1 e b 33 1 1 4 5 9 10 11 15 17 18 24 25 27 32 # 18179 union c a 33 1 1 f b 33 1 1 f # 18180 union c a 33 1 1 f b 33 1 1 e # 18181 union c a 33 1 1 f b 33 1 1 f # 18182 union c a 33 1 1 f b 33 1 1 f # 18183 union c a 33 1 1 f b 33 1 1 f # 18184 union c a 33 1 1 f b 33 1 1 1 2 4 5 6 7 8 10 12 13 14 18 19 20 22 23 26 27 28 30 # 18185 union c a 33 1 1 1 5 7 8 9 10 11 12 16 17 20 21 22 24 25 26 30 31 32 b 33 1 1 1 5 7 8 9 10 11 12 16 17 20 21 22 24 25 26 30 31 32 # 18186 union c a 33 1 1 1 5 7 8 9 10 11 12 16 17 20 21 22 24 25 26 30 31 32 b 33 1 1 e # 18187 union c a 33 1 1 0 3 4 6 7 9 10 12 15 16 17 18 19 21 22 24 26 28 29 31 b 33 1 1 0 3 4 6 7 9 10 12 15 16 17 18 19 21 22 24 26 28 29 31 # 18188 union c a 33 1 1 0 3 4 6 7 9 10 12 15 16 17 18 19 21 22 24 26 28 29 31 b 33 1 1 f # 18189 union c a 33 1 1 0 1 4 7 9 10 11 13 18 20 21 24 25 28 30 31 b 33 1 1 0 1 4 7 9 10 11 13 18 20 21 24 25 28 30 31 # 18190 union c a 33 1 1 0 1 4 7 9 10 11 13 18 20 21 24 25 28 30 31 b 33 1 1 0 1 5 8 10 12 14 15 16 18 19 20 22 23 26 27 28 30 31 # 18191 union c a 63 0 0 e b 63 0 0 e # 18192 union c a 63 0 0 e b 63 0 0 e # 18193 union c a 63 0 0 e b 63 0 0 e # 18194 union c a 63 0 0 e b 63 0 0 f # 18195 union c a 63 0 0 e b 63 0 0 e # 18196 union c a 63 0 0 e b 63 0 0 2 4 6 7 10 11 13 14 15 16 17 18 19 21 23 26 27 29 32 34 35 36 37 38 43 45 46 47 48 49 50 54 55 56 57 58 59 # 18197 union c a 63 0 0 f b 63 0 0 f # 18198 union c a 63 0 0 f b 63 0 0 e # 18199 union c a 63 0 0 f b 63 0 0 f # 18200 union c a 63 0 0 f b 63 0 0 f # 18201 union c a 63 0 0 f b 63 0 0 f # 18202 union c a 63 0 0 f b 63 0 0 1 4 5 6 10 11 12 13 14 15 18 19 20 22 23 24 26 27 28 33 34 36 37 38 39 41 42 43 45 46 47 50 52 55 56 58 59 60 # 18203 union c a 63 0 0 1 3 4 5 6 7 10 12 14 15 16 18 19 23 26 29 30 32 33 35 36 37 44 48 53 55 57 58 60 61 62 b 63 0 0 1 3 4 5 6 7 10 12 14 15 16 18 19 23 26 29 30 32 33 35 36 37 44 48 53 55 57 58 60 61 62 # 18204 union c a 63 0 0 1 3 4 5 6 7 10 12 14 15 16 18 19 23 26 29 30 32 33 35 36 37 44 48 53 55 57 58 60 61 62 b 63 0 0 e # 18205 union c a 63 0 0 0 1 3 4 7 8 13 14 15 16 17 21 27 29 30 32 33 39 40 41 44 45 46 47 48 53 54 57 59 60 61 b 63 0 0 0 1 3 4 7 8 13 14 15 16 17 21 27 29 30 32 33 39 40 41 44 45 46 47 48 53 54 57 59 60 61 # 18206 union c a 63 0 0 0 1 3 4 7 8 13 14 15 16 17 21 27 29 30 32 33 39 40 41 44 45 46 47 48 53 54 57 59 60 61 b 63 0 0 f # 18207 union c a 63 0 0 0 1 5 6 8 9 12 15 18 19 20 21 22 24 25 27 28 30 34 35 38 42 43 44 45 46 49 56 57 59 b 63 0 0 0 1 5 6 8 9 12 15 18 19 20 21 22 24 25 27 28 30 34 35 38 42 43 44 45 46 49 56 57 59 # 18208 union c a 63 0 0 0 1 5 6 8 9 12 15 18 19 20 21 22 24 25 27 28 30 34 35 38 42 43 44 45 46 49 56 57 59 b 63 0 0 0 1 2 3 6 7 8 11 15 16 20 22 25 29 34 35 36 37 39 40 41 45 46 50 51 52 57 61 62 # 18209 union c a 63 0 0 e b 63 0 0 e # 18210 union c a 63 0 0 e b 63 0 1 e # 18211 union c a 63 0 0 e b 63 0 0 e # 18212 union c a 63 0 0 e b 63 0 1 f # 18213 union c a 63 0 0 e b 63 0 0 e # 18214 union c a 63 0 0 e b 63 0 1 0 2 3 10 11 12 13 14 16 17 18 19 20 23 24 25 30 32 33 38 39 40 46 49 51 54 55 59 60 # 18215 union c a 63 0 0 f b 63 0 0 f # 18216 union c a 63 0 0 f b 63 0 1 e # 18217 union c a 63 0 0 f b 63 0 0 f # 18218 union c a 63 0 0 f b 63 0 1 f # 18219 union c a 63 0 0 f b 63 0 0 f # 18220 union c a 63 0 0 f b 63 0 1 0 1 2 7 8 9 12 13 16 17 19 21 22 29 30 32 33 34 35 36 38 39 40 43 45 48 49 51 52 56 57 58 61 62 # 18221 union c a 63 0 0 2 5 8 9 10 11 12 13 17 20 21 22 23 26 27 28 32 37 38 41 44 46 50 52 56 57 59 61 b 63 0 0 2 5 8 9 10 11 12 13 17 20 21 22 23 26 27 28 32 37 38 41 44 46 50 52 56 57 59 61 # 18222 union c a 63 0 0 2 5 8 9 10 11 12 13 17 20 21 22 23 26 27 28 32 37 38 41 44 46 50 52 56 57 59 61 b 63 0 1 e # 18223 union c a 63 0 0 1 2 3 6 8 9 10 12 15 16 18 19 23 28 29 32 36 38 39 43 44 46 48 49 52 53 56 57 59 60 61 62 b 63 0 0 1 2 3 6 8 9 10 12 15 16 18 19 23 28 29 32 36 38 39 43 44 46 48 49 52 53 56 57 59 60 61 62 # 18224 union c a 63 0 0 1 2 3 6 8 9 10 12 15 16 18 19 23 28 29 32 36 38 39 43 44 46 48 49 52 53 56 57 59 60 61 62 b 63 0 1 f # 18225 union c a 63 0 0 0 3 4 6 7 8 10 11 12 14 18 19 21 23 24 28 31 33 34 39 40 42 43 44 48 52 53 55 56 59 60 61 62 b 63 0 0 0 3 4 6 7 8 10 11 12 14 18 19 21 23 24 28 31 33 34 39 40 42 43 44 48 52 53 55 56 59 60 61 62 # 18226 union c a 63 0 0 0 3 4 6 7 8 10 11 12 14 18 19 21 23 24 28 31 33 34 39 40 42 43 44 48 52 53 55 56 59 60 61 62 b 63 0 1 3 4 5 6 7 8 12 13 14 16 17 20 22 23 26 28 29 30 34 35 37 38 42 49 50 56 58 59 60 61 62 # 18227 union c a 63 0 0 e b 63 0 0 e # 18228 union c a 63 0 0 e b 63 1 0 e # 18229 union c a 63 0 0 e b 63 0 0 e # 18230 union c a 63 0 0 e b 63 1 0 f # 18231 union c a 63 0 0 e b 63 0 0 e # 18232 union c a 63 0 0 e b 63 1 0 2 4 5 6 7 10 14 15 16 17 21 23 24 25 28 31 39 41 43 46 47 53 55 57 60 61 # 18233 union c a 63 0 0 f b 63 0 0 f # 18234 union c a 63 0 0 f b 63 1 0 e # 18235 union c a 63 0 0 f b 63 0 0 f # 18236 union c a 63 0 0 f b 63 1 0 f # 18237 union c a 63 0 0 f b 63 0 0 f # 18238 union c a 63 0 0 f b 63 1 0 3 4 5 6 7 9 10 14 19 24 25 26 27 28 29 33 39 42 45 46 47 50 51 62 # 18239 union c a 63 0 0 0 2 4 9 11 14 16 17 22 23 24 25 26 27 30 31 32 33 36 37 38 43 44 46 47 51 52 53 56 60 b 63 0 0 0 2 4 9 11 14 16 17 22 23 24 25 26 27 30 31 32 33 36 37 38 43 44 46 47 51 52 53 56 60 # 18240 union c a 63 0 0 0 2 4 9 11 14 16 17 22 23 24 25 26 27 30 31 32 33 36 37 38 43 44 46 47 51 52 53 56 60 b 63 1 0 e # 18241 union c a 63 0 0 0 1 4 8 9 10 12 17 18 21 22 23 24 27 29 31 32 33 35 36 39 43 45 47 51 52 53 54 55 58 61 b 63 0 0 0 1 4 8 9 10 12 17 18 21 22 23 24 27 29 31 32 33 35 36 39 43 45 47 51 52 53 54 55 58 61 # 18242 union c a 63 0 0 0 1 4 8 9 10 12 17 18 21 22 23 24 27 29 31 32 33 35 36 39 43 45 47 51 52 53 54 55 58 61 b 63 1 0 f # 18243 union c a 63 0 0 0 1 2 3 4 6 10 12 14 15 16 18 19 21 22 23 26 27 28 29 31 33 38 39 40 44 47 50 51 53 54 62 b 63 0 0 0 1 2 3 4 6 10 12 14 15 16 18 19 21 22 23 26 27 28 29 31 33 38 39 40 44 47 50 51 53 54 62 # 18244 union c a 63 0 0 0 1 2 3 4 6 10 12 14 15 16 18 19 21 22 23 26 27 28 29 31 33 38 39 40 44 47 50 51 53 54 62 b 63 1 0 0 3 4 5 6 8 10 13 17 20 22 24 26 27 28 30 32 38 41 43 44 45 46 48 51 56 57 59 # 18245 union c a 63 0 0 e b 63 0 0 e # 18246 union c a 63 0 0 e b 63 1 1 e # 18247 union c a 63 0 0 e b 63 0 0 e # 18248 union c a 63 0 0 e b 63 1 1 f # 18249 union c a 63 0 0 e b 63 0 0 e # 18250 union c a 63 0 0 e b 63 1 1 0 1 2 5 10 12 13 16 18 20 22 25 27 28 29 31 33 35 36 37 42 45 47 54 55 56 58 59 60 61 62 # 18251 union c a 63 0 0 f b 63 0 0 f # 18252 union c a 63 0 0 f b 63 1 1 e # 18253 union c a 63 0 0 f b 63 0 0 f # 18254 union c a 63 0 0 f b 63 1 1 f # 18255 union c a 63 0 0 f b 63 0 0 f # 18256 union c a 63 0 0 f b 63 1 1 1 4 8 9 11 12 15 16 17 21 22 23 24 26 27 29 30 31 32 34 35 36 44 45 48 49 50 51 53 54 56 57 58 61 62 # 18257 union c a 63 0 0 1 2 3 4 8 9 10 11 13 15 17 18 23 26 27 28 30 31 33 34 39 40 42 44 50 51 52 56 58 60 61 b 63 0 0 1 2 3 4 8 9 10 11 13 15 17 18 23 26 27 28 30 31 33 34 39 40 42 44 50 51 52 56 58 60 61 # 18258 union c a 63 0 0 1 2 3 4 8 9 10 11 13 15 17 18 23 26 27 28 30 31 33 34 39 40 42 44 50 51 52 56 58 60 61 b 63 1 1 e # 18259 union c a 63 0 0 4 5 6 7 8 10 13 14 15 17 18 19 20 23 24 25 26 29 30 31 35 38 39 43 45 47 48 50 51 54 56 57 58 61 b 63 0 0 4 5 6 7 8 10 13 14 15 17 18 19 20 23 24 25 26 29 30 31 35 38 39 43 45 47 48 50 51 54 56 57 58 61 # 18260 union c a 63 0 0 4 5 6 7 8 10 13 14 15 17 18 19 20 23 24 25 26 29 30 31 35 38 39 43 45 47 48 50 51 54 56 57 58 61 b 63 1 1 f # 18261 union c a 63 0 0 0 3 4 5 7 9 10 11 13 16 17 18 19 23 26 27 28 29 30 35 37 38 40 41 44 45 47 48 51 52 53 54 55 58 59 61 b 63 0 0 0 3 4 5 7 9 10 11 13 16 17 18 19 23 26 27 28 29 30 35 37 38 40 41 44 45 47 48 51 52 53 54 55 58 59 61 # 18262 union c a 63 0 0 0 3 4 5 7 9 10 11 13 16 17 18 19 23 26 27 28 29 30 35 37 38 40 41 44 45 47 48 51 52 53 54 55 58 59 61 b 63 1 1 2 7 9 12 14 18 21 22 26 28 29 30 32 34 36 37 40 41 42 43 45 47 50 53 54 57 58 # 18263 union c a 63 0 1 e b 63 0 1 e # 18264 union c a 63 0 1 e b 63 0 0 e # 18265 union c a 63 0 1 e b 63 0 1 e # 18266 union c a 63 0 1 e b 63 0 0 f # 18267 union c a 63 0 1 e b 63 0 1 e # 18268 union c a 63 0 1 e b 63 0 0 1 3 4 10 11 12 13 15 16 18 20 21 25 26 30 31 34 38 39 40 41 42 43 45 46 50 58 59 60 61 62 # 18269 union c a 63 0 1 f b 63 0 1 f # 18270 union c a 63 0 1 f b 63 0 0 e # 18271 union c a 63 0 1 f b 63 0 1 f # 18272 union c a 63 0 1 f b 63 0 0 f # 18273 union c a 63 0 1 f b 63 0 1 f # 18274 union c a 63 0 1 f b 63 0 0 2 3 4 6 12 14 16 19 20 21 24 25 27 28 38 39 40 41 42 43 45 47 49 50 57 60 61 62 # 18275 union c a 63 0 1 1 3 5 12 15 16 18 19 20 24 31 33 35 37 38 39 45 46 48 49 51 52 53 54 55 56 58 60 62 b 63 0 1 1 3 5 12 15 16 18 19 20 24 31 33 35 37 38 39 45 46 48 49 51 52 53 54 55 56 58 60 62 # 18276 union c a 63 0 1 1 3 5 12 15 16 18 19 20 24 31 33 35 37 38 39 45 46 48 49 51 52 53 54 55 56 58 60 62 b 63 0 0 e # 18277 union c a 63 0 1 0 1 3 6 8 9 10 15 17 18 20 21 23 24 25 26 27 29 30 32 36 37 38 39 40 41 47 50 52 55 56 57 58 60 61 62 b 63 0 1 0 1 3 6 8 9 10 15 17 18 20 21 23 24 25 26 27 29 30 32 36 37 38 39 40 41 47 50 52 55 56 57 58 60 61 62 # 18278 union c a 63 0 1 0 1 3 6 8 9 10 15 17 18 20 21 23 24 25 26 27 29 30 32 36 37 38 39 40 41 47 50 52 55 56 57 58 60 61 62 b 63 0 0 f # 18279 union c a 63 0 1 0 11 13 14 19 23 26 27 30 32 34 35 39 41 43 44 48 51 52 54 56 57 59 b 63 0 1 0 11 13 14 19 23 26 27 30 32 34 35 39 41 43 44 48 51 52 54 56 57 59 # 18280 union c a 63 0 1 0 11 13 14 19 23 26 27 30 32 34 35 39 41 43 44 48 51 52 54 56 57 59 b 63 0 0 0 1 2 3 7 8 9 11 12 13 14 15 16 19 21 22 23 28 29 30 31 32 33 34 35 36 37 38 39 40 43 46 48 49 50 52 53 57 58 59 60 62 # 18281 union c a 63 0 1 e b 63 0 1 e # 18282 union c a 63 0 1 e b 63 0 1 e # 18283 union c a 63 0 1 e b 63 0 1 e # 18284 union c a 63 0 1 e b 63 0 1 f # 18285 union c a 63 0 1 e b 63 0 1 e # 18286 union c a 63 0 1 e b 63 0 1 0 3 6 7 12 13 14 15 16 17 18 20 21 22 23 24 25 26 27 28 30 31 35 36 38 50 52 53 55 56 57 58 59 61 # 18287 union c a 63 0 1 f b 63 0 1 f # 18288 union c a 63 0 1 f b 63 0 1 e # 18289 union c a 63 0 1 f b 63 0 1 f # 18290 union c a 63 0 1 f b 63 0 1 f # 18291 union c a 63 0 1 f b 63 0 1 f # 18292 union c a 63 0 1 f b 63 0 1 0 1 2 4 7 8 11 12 13 15 18 19 22 25 27 31 35 36 37 38 43 45 46 47 49 50 51 53 56 57 59 60 61 62 # 18293 union c a 63 0 1 7 9 13 18 19 21 23 25 28 32 33 37 38 39 43 45 46 48 49 52 53 56 57 58 59 62 b 63 0 1 7 9 13 18 19 21 23 25 28 32 33 37 38 39 43 45 46 48 49 52 53 56 57 58 59 62 # 18294 union c a 63 0 1 7 9 13 18 19 21 23 25 28 32 33 37 38 39 43 45 46 48 49 52 53 56 57 58 59 62 b 63 0 1 e # 18295 union c a 63 0 1 3 6 8 9 15 19 21 24 28 32 33 34 37 39 40 41 43 45 46 49 51 52 55 56 60 61 62 b 63 0 1 3 6 8 9 15 19 21 24 28 32 33 34 37 39 40 41 43 45 46 49 51 52 55 56 60 61 62 # 18296 union c a 63 0 1 3 6 8 9 15 19 21 24 28 32 33 34 37 39 40 41 43 45 46 49 51 52 55 56 60 61 62 b 63 0 1 f # 18297 union c a 63 0 1 0 1 2 3 4 7 12 14 16 17 19 20 21 22 23 24 26 29 30 33 37 41 42 43 45 48 49 51 52 56 58 61 b 63 0 1 0 1 2 3 4 7 12 14 16 17 19 20 21 22 23 24 26 29 30 33 37 41 42 43 45 48 49 51 52 56 58 61 # 18298 union c a 63 0 1 0 1 2 3 4 7 12 14 16 17 19 20 21 22 23 24 26 29 30 33 37 41 42 43 45 48 49 51 52 56 58 61 b 63 0 1 0 2 4 6 8 9 10 11 13 14 15 17 18 22 23 24 26 30 32 35 36 38 39 40 41 44 46 49 51 54 59 60 # 18299 union c a 63 0 1 e b 63 0 1 e # 18300 union c a 63 0 1 e b 63 1 0 e # 18301 union c a 63 0 1 e b 63 0 1 e # 18302 union c a 63 0 1 e b 63 1 0 f # 18303 union c a 63 0 1 e b 63 0 1 e # 18304 union c a 63 0 1 e b 63 1 0 0 1 2 3 4 5 6 8 9 10 15 16 23 24 25 27 28 31 33 35 36 39 40 44 47 48 52 54 55 58 59 60 62 # 18305 union c a 63 0 1 f b 63 0 1 f # 18306 union c a 63 0 1 f b 63 1 0 e # 18307 union c a 63 0 1 f b 63 0 1 f # 18308 union c a 63 0 1 f b 63 1 0 f # 18309 union c a 63 0 1 f b 63 0 1 f # 18310 union c a 63 0 1 f b 63 1 0 0 3 9 11 12 13 15 16 17 18 19 20 22 23 24 26 27 28 29 31 33 34 38 39 42 45 47 48 50 52 53 57 60 61 # 18311 union c a 63 0 1 3 4 5 9 11 12 14 15 16 18 20 21 22 25 26 28 30 31 32 33 34 35 36 39 40 42 43 44 45 46 47 48 49 51 52 53 56 58 60 b 63 0 1 3 4 5 9 11 12 14 15 16 18 20 21 22 25 26 28 30 31 32 33 34 35 36 39 40 42 43 44 45 46 47 48 49 51 52 53 56 58 60 # 18312 union c a 63 0 1 3 4 5 9 11 12 14 15 16 18 20 21 22 25 26 28 30 31 32 33 34 35 36 39 40 42 43 44 45 46 47 48 49 51 52 53 56 58 60 b 63 1 0 e # 18313 union c a 63 0 1 0 6 10 12 13 15 16 18 19 21 23 24 29 30 31 33 35 38 39 41 44 45 51 54 55 56 61 b 63 0 1 0 6 10 12 13 15 16 18 19 21 23 24 29 30 31 33 35 38 39 41 44 45 51 54 55 56 61 # 18314 union c a 63 0 1 0 6 10 12 13 15 16 18 19 21 23 24 29 30 31 33 35 38 39 41 44 45 51 54 55 56 61 b 63 1 0 f # 18315 union c a 63 0 1 0 1 2 5 10 11 13 15 18 20 23 26 27 28 29 30 32 33 34 36 38 40 41 44 46 48 49 50 51 55 56 58 61 62 b 63 0 1 0 1 2 5 10 11 13 15 18 20 23 26 27 28 29 30 32 33 34 36 38 40 41 44 46 48 49 50 51 55 56 58 61 62 # 18316 union c a 63 0 1 0 1 2 5 10 11 13 15 18 20 23 26 27 28 29 30 32 33 34 36 38 40 41 44 46 48 49 50 51 55 56 58 61 62 b 63 1 0 2 3 6 9 10 11 12 14 17 19 21 25 26 27 29 30 31 33 34 37 38 39 40 41 42 43 44 49 52 53 54 56 57 # 18317 union c a 63 0 1 e b 63 0 1 e # 18318 union c a 63 0 1 e b 63 1 1 e # 18319 union c a 63 0 1 e b 63 0 1 e # 18320 union c a 63 0 1 e b 63 1 1 f # 18321 union c a 63 0 1 e b 63 0 1 e # 18322 union c a 63 0 1 e b 63 1 1 0 4 7 9 12 13 14 17 19 23 24 26 28 33 34 36 37 38 40 43 47 48 49 52 53 55 59 61 # 18323 union c a 63 0 1 f b 63 0 1 f # 18324 union c a 63 0 1 f b 63 1 1 e # 18325 union c a 63 0 1 f b 63 0 1 f # 18326 union c a 63 0 1 f b 63 1 1 f # 18327 union c a 63 0 1 f b 63 0 1 f # 18328 union c a 63 0 1 f b 63 1 1 0 7 9 15 19 24 27 28 31 32 36 38 39 44 45 48 49 56 57 58 59 62 # 18329 union c a 63 0 1 0 1 5 8 10 14 17 18 19 23 26 29 32 34 37 38 42 43 44 45 48 49 54 56 57 58 60 61 62 b 63 0 1 0 1 5 8 10 14 17 18 19 23 26 29 32 34 37 38 42 43 44 45 48 49 54 56 57 58 60 61 62 # 18330 union c a 63 0 1 0 1 5 8 10 14 17 18 19 23 26 29 32 34 37 38 42 43 44 45 48 49 54 56 57 58 60 61 62 b 63 1 1 e # 18331 union c a 63 0 1 3 4 7 8 9 10 11 12 14 17 18 23 24 28 30 32 35 36 37 38 39 40 42 43 44 45 48 49 50 51 54 60 62 b 63 0 1 3 4 7 8 9 10 11 12 14 17 18 23 24 28 30 32 35 36 37 38 39 40 42 43 44 45 48 49 50 51 54 60 62 # 18332 union c a 63 0 1 3 4 7 8 9 10 11 12 14 17 18 23 24 28 30 32 35 36 37 38 39 40 42 43 44 45 48 49 50 51 54 60 62 b 63 1 1 f # 18333 union c a 63 0 1 0 1 4 5 7 8 9 10 12 14 15 17 18 20 21 22 26 27 28 30 31 39 41 43 46 47 48 49 50 51 52 53 57 62 b 63 0 1 0 1 4 5 7 8 9 10 12 14 15 17 18 20 21 22 26 27 28 30 31 39 41 43 46 47 48 49 50 51 52 53 57 62 # 18334 union c a 63 0 1 0 1 4 5 7 8 9 10 12 14 15 17 18 20 21 22 26 27 28 30 31 39 41 43 46 47 48 49 50 51 52 53 57 62 b 63 1 1 3 4 5 6 7 8 9 11 14 17 22 23 25 26 27 28 30 32 33 36 39 42 43 44 45 46 50 51 53 54 55 57 58 60 62 # 18335 union c a 63 1 0 e b 63 1 0 e # 18336 union c a 63 1 0 e b 63 0 0 e # 18337 union c a 63 1 0 e b 63 1 0 e # 18338 union c a 63 1 0 e b 63 0 0 f # 18339 union c a 63 1 0 e b 63 1 0 e # 18340 union c a 63 1 0 e b 63 0 0 0 7 8 9 10 12 16 17 19 22 24 26 32 36 37 39 40 41 43 45 49 51 54 55 56 57 # 18341 union c a 63 1 0 f b 63 1 0 f # 18342 union c a 63 1 0 f b 63 0 0 e # 18343 union c a 63 1 0 f b 63 1 0 f # 18344 union c a 63 1 0 f b 63 0 0 f # 18345 union c a 63 1 0 f b 63 1 0 f # 18346 union c a 63 1 0 f b 63 0 0 1 2 3 4 5 6 7 8 9 10 11 13 15 19 20 21 22 23 25 26 27 31 34 37 40 44 45 49 51 54 55 57 58 59 61 62 # 18347 union c a 63 1 0 0 7 8 9 10 12 13 15 16 19 20 22 23 24 28 32 33 34 36 38 39 40 41 43 44 45 46 47 48 49 50 51 56 57 58 59 61 b 63 1 0 0 7 8 9 10 12 13 15 16 19 20 22 23 24 28 32 33 34 36 38 39 40 41 43 44 45 46 47 48 49 50 51 56 57 58 59 61 # 18348 union c a 63 1 0 0 7 8 9 10 12 13 15 16 19 20 22 23 24 28 32 33 34 36 38 39 40 41 43 44 45 46 47 48 49 50 51 56 57 58 59 61 b 63 0 0 e # 18349 union c a 63 1 0 1 2 4 7 10 11 13 14 15 16 17 18 22 25 27 31 32 35 37 39 42 47 54 55 58 59 61 62 b 63 1 0 1 2 4 7 10 11 13 14 15 16 17 18 22 25 27 31 32 35 37 39 42 47 54 55 58 59 61 62 # 18350 union c a 63 1 0 1 2 4 7 10 11 13 14 15 16 17 18 22 25 27 31 32 35 37 39 42 47 54 55 58 59 61 62 b 63 0 0 f # 18351 union c a 63 1 0 2 4 5 6 8 13 14 16 18 20 24 25 27 30 31 33 34 37 38 40 41 42 44 45 46 47 49 51 53 57 59 60 b 63 1 0 2 4 5 6 8 13 14 16 18 20 24 25 27 30 31 33 34 37 38 40 41 42 44 45 46 47 49 51 53 57 59 60 # 18352 union c a 63 1 0 2 4 5 6 8 13 14 16 18 20 24 25 27 30 31 33 34 37 38 40 41 42 44 45 46 47 49 51 53 57 59 60 b 63 0 0 1 3 7 10 11 13 14 15 17 21 22 23 30 31 34 35 38 39 40 41 43 44 46 48 54 55 56 58 60 61 # 18353 union c a 63 1 0 e b 63 1 0 e # 18354 union c a 63 1 0 e b 63 0 1 e # 18355 union c a 63 1 0 e b 63 1 0 e # 18356 union c a 63 1 0 e b 63 0 1 f # 18357 union c a 63 1 0 e b 63 1 0 e # 18358 union c a 63 1 0 e b 63 0 1 1 2 8 10 11 13 14 16 18 24 29 32 34 36 37 38 39 42 45 46 48 49 50 53 54 57 59 60 61 # 18359 union c a 63 1 0 f b 63 1 0 f # 18360 union c a 63 1 0 f b 63 0 1 e # 18361 union c a 63 1 0 f b 63 1 0 f # 18362 union c a 63 1 0 f b 63 0 1 f # 18363 union c a 63 1 0 f b 63 1 0 f # 18364 union c a 63 1 0 f b 63 0 1 0 2 5 7 9 10 11 14 15 17 19 20 22 24 25 26 27 28 29 30 31 33 36 42 44 45 49 53 54 56 58 61 # 18365 union c a 63 1 0 1 3 4 5 9 11 13 14 15 17 18 19 20 21 22 24 31 33 34 36 41 42 43 44 45 48 51 53 54 59 61 62 b 63 1 0 1 3 4 5 9 11 13 14 15 17 18 19 20 21 22 24 31 33 34 36 41 42 43 44 45 48 51 53 54 59 61 62 # 18366 union c a 63 1 0 1 3 4 5 9 11 13 14 15 17 18 19 20 21 22 24 31 33 34 36 41 42 43 44 45 48 51 53 54 59 61 62 b 63 0 1 e # 18367 union c a 63 1 0 0 1 2 3 4 12 14 16 19 20 22 23 24 25 33 37 38 39 40 41 42 43 45 48 49 50 51 53 54 55 56 60 61 b 63 1 0 0 1 2 3 4 12 14 16 19 20 22 23 24 25 33 37 38 39 40 41 42 43 45 48 49 50 51 53 54 55 56 60 61 # 18368 union c a 63 1 0 0 1 2 3 4 12 14 16 19 20 22 23 24 25 33 37 38 39 40 41 42 43 45 48 49 50 51 53 54 55 56 60 61 b 63 0 1 f # 18369 union c a 63 1 0 1 2 3 4 7 10 12 14 15 18 20 21 22 23 27 28 29 32 33 34 35 39 40 43 44 46 48 49 55 56 58 59 61 62 b 63 1 0 1 2 3 4 7 10 12 14 15 18 20 21 22 23 27 28 29 32 33 34 35 39 40 43 44 46 48 49 55 56 58 59 61 62 # 18370 union c a 63 1 0 1 2 3 4 7 10 12 14 15 18 20 21 22 23 27 28 29 32 33 34 35 39 40 43 44 46 48 49 55 56 58 59 61 62 b 63 0 1 1 2 3 9 10 14 15 16 17 21 22 26 28 29 31 32 34 36 38 41 43 49 50 54 55 56 57 60 # 18371 union c a 63 1 0 e b 63 1 0 e # 18372 union c a 63 1 0 e b 63 1 0 e # 18373 union c a 63 1 0 e b 63 1 0 e # 18374 union c a 63 1 0 e b 63 1 0 f # 18375 union c a 63 1 0 e b 63 1 0 e # 18376 union c a 63 1 0 e b 63 1 0 0 1 5 7 11 13 15 16 20 21 23 24 25 26 28 30 34 35 37 41 43 45 49 50 51 52 54 55 57 58 59 61 # 18377 union c a 63 1 0 f b 63 1 0 f # 18378 union c a 63 1 0 f b 63 1 0 e # 18379 union c a 63 1 0 f b 63 1 0 f # 18380 union c a 63 1 0 f b 63 1 0 f # 18381 union c a 63 1 0 f b 63 1 0 f # 18382 union c a 63 1 0 f b 63 1 0 1 6 7 12 14 17 20 21 24 25 27 31 33 34 36 37 42 44 46 50 51 52 53 55 56 57 58 62 # 18383 union c a 63 1 0 2 3 5 7 8 9 13 14 15 22 25 27 28 29 30 32 33 37 38 42 43 45 46 47 48 50 52 53 57 58 61 62 b 63 1 0 2 3 5 7 8 9 13 14 15 22 25 27 28 29 30 32 33 37 38 42 43 45 46 47 48 50 52 53 57 58 61 62 # 18384 union c a 63 1 0 2 3 5 7 8 9 13 14 15 22 25 27 28 29 30 32 33 37 38 42 43 45 46 47 48 50 52 53 57 58 61 62 b 63 1 0 e # 18385 union c a 63 1 0 3 4 6 8 11 12 13 16 17 22 23 24 26 28 32 33 35 36 37 39 41 43 44 45 47 48 49 50 53 54 55 57 62 b 63 1 0 3 4 6 8 11 12 13 16 17 22 23 24 26 28 32 33 35 36 37 39 41 43 44 45 47 48 49 50 53 54 55 57 62 # 18386 union c a 63 1 0 3 4 6 8 11 12 13 16 17 22 23 24 26 28 32 33 35 36 37 39 41 43 44 45 47 48 49 50 53 54 55 57 62 b 63 1 0 f # 18387 union c a 63 1 0 2 5 6 7 14 15 17 18 20 21 23 24 29 30 31 32 33 34 36 37 41 48 50 51 54 56 60 62 b 63 1 0 2 5 6 7 14 15 17 18 20 21 23 24 29 30 31 32 33 34 36 37 41 48 50 51 54 56 60 62 # 18388 union c a 63 1 0 2 5 6 7 14 15 17 18 20 21 23 24 29 30 31 32 33 34 36 37 41 48 50 51 54 56 60 62 b 63 1 0 0 2 5 7 8 14 15 18 20 23 25 28 29 31 34 35 38 40 41 42 45 47 51 52 53 54 55 56 61 # 18389 union c a 63 1 0 e b 63 1 0 e # 18390 union c a 63 1 0 e b 63 1 1 e # 18391 union c a 63 1 0 e b 63 1 0 e # 18392 union c a 63 1 0 e b 63 1 1 f # 18393 union c a 63 1 0 e b 63 1 0 e # 18394 union c a 63 1 0 e b 63 1 1 0 3 4 5 6 7 9 10 11 14 16 18 19 20 21 22 23 27 28 31 32 34 35 38 39 44 46 47 48 51 54 55 58 60 61 62 # 18395 union c a 63 1 0 f b 63 1 0 f # 18396 union c a 63 1 0 f b 63 1 1 e # 18397 union c a 63 1 0 f b 63 1 0 f # 18398 union c a 63 1 0 f b 63 1 1 f # 18399 union c a 63 1 0 f b 63 1 0 f # 18400 union c a 63 1 0 f b 63 1 1 0 2 4 9 10 11 12 14 18 19 22 24 25 26 27 28 29 30 33 34 36 38 40 41 43 51 59 # 18401 union c a 63 1 0 0 1 3 4 5 6 8 10 12 14 16 17 18 19 21 22 23 26 30 36 37 38 39 41 44 45 47 48 56 58 b 63 1 0 0 1 3 4 5 6 8 10 12 14 16 17 18 19 21 22 23 26 30 36 37 38 39 41 44 45 47 48 56 58 # 18402 union c a 63 1 0 0 1 3 4 5 6 8 10 12 14 16 17 18 19 21 22 23 26 30 36 37 38 39 41 44 45 47 48 56 58 b 63 1 1 e # 18403 union c a 63 1 0 0 1 2 3 4 5 6 10 13 14 16 18 23 24 25 26 30 31 32 34 35 37 41 42 43 44 45 46 49 50 51 52 54 55 56 60 61 b 63 1 0 0 1 2 3 4 5 6 10 13 14 16 18 23 24 25 26 30 31 32 34 35 37 41 42 43 44 45 46 49 50 51 52 54 55 56 60 61 # 18404 union c a 63 1 0 0 1 2 3 4 5 6 10 13 14 16 18 23 24 25 26 30 31 32 34 35 37 41 42 43 44 45 46 49 50 51 52 54 55 56 60 61 b 63 1 1 f # 18405 union c a 63 1 0 0 4 5 6 9 11 14 15 17 18 20 21 22 23 24 26 29 31 33 36 39 40 41 42 44 45 48 50 53 61 b 63 1 0 0 4 5 6 9 11 14 15 17 18 20 21 22 23 24 26 29 31 33 36 39 40 41 42 44 45 48 50 53 61 # 18406 union c a 63 1 0 0 4 5 6 9 11 14 15 17 18 20 21 22 23 24 26 29 31 33 36 39 40 41 42 44 45 48 50 53 61 b 63 1 1 0 1 2 3 11 15 19 20 22 23 27 35 36 37 39 40 41 42 45 46 52 57 59 61 # 18407 union c a 63 1 1 e b 63 1 1 e # 18408 union c a 63 1 1 e b 63 0 0 e # 18409 union c a 63 1 1 e b 63 1 1 e # 18410 union c a 63 1 1 e b 63 0 0 f # 18411 union c a 63 1 1 e b 63 1 1 e # 18412 union c a 63 1 1 e b 63 0 0 4 7 10 13 15 17 20 22 23 24 27 28 29 33 36 37 41 42 43 44 46 47 49 51 54 56 61 62 # 18413 union c a 63 1 1 f b 63 1 1 f # 18414 union c a 63 1 1 f b 63 0 0 e # 18415 union c a 63 1 1 f b 63 1 1 f # 18416 union c a 63 1 1 f b 63 0 0 f # 18417 union c a 63 1 1 f b 63 1 1 f # 18418 union c a 63 1 1 f b 63 0 0 3 6 7 9 12 13 14 15 16 17 19 22 23 27 31 32 33 34 36 37 38 40 42 45 48 52 57 58 59 60 62 # 18419 union c a 63 1 1 0 2 3 6 7 11 12 14 15 16 23 24 26 27 30 31 33 34 35 37 41 48 52 53 54 55 57 58 60 61 b 63 1 1 0 2 3 6 7 11 12 14 15 16 23 24 26 27 30 31 33 34 35 37 41 48 52 53 54 55 57 58 60 61 # 18420 union c a 63 1 1 0 2 3 6 7 11 12 14 15 16 23 24 26 27 30 31 33 34 35 37 41 48 52 53 54 55 57 58 60 61 b 63 0 0 e # 18421 union c a 63 1 1 1 4 6 8 9 10 12 13 16 17 18 19 20 21 22 23 24 25 26 28 29 30 32 35 36 39 40 41 43 44 45 47 48 49 50 51 52 53 54 55 57 60 b 63 1 1 1 4 6 8 9 10 12 13 16 17 18 19 20 21 22 23 24 25 26 28 29 30 32 35 36 39 40 41 43 44 45 47 48 49 50 51 52 53 54 55 57 60 # 18422 union c a 63 1 1 1 4 6 8 9 10 12 13 16 17 18 19 20 21 22 23 24 25 26 28 29 30 32 35 36 39 40 41 43 44 45 47 48 49 50 51 52 53 54 55 57 60 b 63 0 0 f # 18423 union c a 63 1 1 1 2 4 7 10 13 18 21 22 23 25 30 31 33 35 37 38 41 42 43 46 47 48 49 51 52 54 55 56 60 b 63 1 1 1 2 4 7 10 13 18 21 22 23 25 30 31 33 35 37 38 41 42 43 46 47 48 49 51 52 54 55 56 60 # 18424 union c a 63 1 1 1 2 4 7 10 13 18 21 22 23 25 30 31 33 35 37 38 41 42 43 46 47 48 49 51 52 54 55 56 60 b 63 0 0 0 2 3 4 6 8 10 12 15 16 19 22 26 27 28 31 32 34 36 37 38 41 42 44 47 48 50 52 53 61 # 18425 union c a 63 1 1 e b 63 1 1 e # 18426 union c a 63 1 1 e b 63 0 1 e # 18427 union c a 63 1 1 e b 63 1 1 e # 18428 union c a 63 1 1 e b 63 0 1 f # 18429 union c a 63 1 1 e b 63 1 1 e # 18430 union c a 63 1 1 e b 63 0 1 3 4 5 13 14 16 22 23 25 27 30 31 37 38 42 45 46 48 49 50 54 55 59 62 # 18431 union c a 63 1 1 f b 63 1 1 f # 18432 union c a 63 1 1 f b 63 0 1 e # 18433 union c a 63 1 1 f b 63 1 1 f # 18434 union c a 63 1 1 f b 63 0 1 f # 18435 union c a 63 1 1 f b 63 1 1 f # 18436 union c a 63 1 1 f b 63 0 1 0 1 4 9 11 14 15 17 18 20 23 24 25 27 29 33 34 36 38 43 44 46 47 48 51 52 53 54 56 57 59 60 61 # 18437 union c a 63 1 1 2 3 6 7 12 13 14 15 16 19 23 26 29 35 36 37 38 44 47 48 49 53 54 57 58 59 60 b 63 1 1 2 3 6 7 12 13 14 15 16 19 23 26 29 35 36 37 38 44 47 48 49 53 54 57 58 59 60 # 18438 union c a 63 1 1 2 3 6 7 12 13 14 15 16 19 23 26 29 35 36 37 38 44 47 48 49 53 54 57 58 59 60 b 63 0 1 e # 18439 union c a 63 1 1 0 1 3 7 8 9 11 12 13 16 17 18 19 21 22 23 25 28 29 31 33 35 37 38 40 41 44 46 49 51 52 57 58 60 62 b 63 1 1 0 1 3 7 8 9 11 12 13 16 17 18 19 21 22 23 25 28 29 31 33 35 37 38 40 41 44 46 49 51 52 57 58 60 62 # 18440 union c a 63 1 1 0 1 3 7 8 9 11 12 13 16 17 18 19 21 22 23 25 28 29 31 33 35 37 38 40 41 44 46 49 51 52 57 58 60 62 b 63 0 1 f # 18441 union c a 63 1 1 4 6 7 9 11 12 13 14 17 18 19 20 24 26 27 30 34 36 37 40 42 45 46 52 53 59 60 b 63 1 1 4 6 7 9 11 12 13 14 17 18 19 20 24 26 27 30 34 36 37 40 42 45 46 52 53 59 60 # 18442 union c a 63 1 1 4 6 7 9 11 12 13 14 17 18 19 20 24 26 27 30 34 36 37 40 42 45 46 52 53 59 60 b 63 0 1 1 2 4 5 6 11 13 14 15 19 20 24 25 26 27 30 31 33 36 37 38 41 43 44 45 46 52 54 55 57 59 # 18443 union c a 63 1 1 e b 63 1 1 e # 18444 union c a 63 1 1 e b 63 1 0 e # 18445 union c a 63 1 1 e b 63 1 1 e # 18446 union c a 63 1 1 e b 63 1 0 f # 18447 union c a 63 1 1 e b 63 1 1 e # 18448 union c a 63 1 1 e b 63 1 0 0 2 5 6 8 9 10 11 12 13 16 17 18 22 25 26 28 30 31 32 34 35 37 40 42 43 44 47 51 54 55 56 57 59 60 61 62 # 18449 union c a 63 1 1 f b 63 1 1 f # 18450 union c a 63 1 1 f b 63 1 0 e # 18451 union c a 63 1 1 f b 63 1 1 f # 18452 union c a 63 1 1 f b 63 1 0 f # 18453 union c a 63 1 1 f b 63 1 1 f # 18454 union c a 63 1 1 f b 63 1 0 0 2 3 4 5 7 8 10 11 16 18 20 21 23 24 27 30 31 32 34 37 39 42 43 44 45 47 53 56 57 60 61 # 18455 union c a 63 1 1 0 2 4 5 6 7 14 15 16 21 22 23 24 25 26 28 29 34 38 39 40 43 44 46 47 48 54 57 59 60 61 b 63 1 1 0 2 4 5 6 7 14 15 16 21 22 23 24 25 26 28 29 34 38 39 40 43 44 46 47 48 54 57 59 60 61 # 18456 union c a 63 1 1 0 2 4 5 6 7 14 15 16 21 22 23 24 25 26 28 29 34 38 39 40 43 44 46 47 48 54 57 59 60 61 b 63 1 0 e # 18457 union c a 63 1 1 3 4 5 6 7 13 16 17 18 19 20 22 25 26 28 29 30 36 37 41 42 44 46 52 58 60 61 62 b 63 1 1 3 4 5 6 7 13 16 17 18 19 20 22 25 26 28 29 30 36 37 41 42 44 46 52 58 60 61 62 # 18458 union c a 63 1 1 3 4 5 6 7 13 16 17 18 19 20 22 25 26 28 29 30 36 37 41 42 44 46 52 58 60 61 62 b 63 1 0 f # 18459 union c a 63 1 1 1 4 6 11 13 14 15 20 21 22 26 27 29 30 32 33 34 35 37 39 41 42 44 47 48 51 54 56 57 59 60 61 b 63 1 1 1 4 6 11 13 14 15 20 21 22 26 27 29 30 32 33 34 35 37 39 41 42 44 47 48 51 54 56 57 59 60 61 # 18460 union c a 63 1 1 1 4 6 11 13 14 15 20 21 22 26 27 29 30 32 33 34 35 37 39 41 42 44 47 48 51 54 56 57 59 60 61 b 63 1 0 1 7 10 11 12 15 16 17 19 20 21 22 24 25 26 27 29 31 32 33 35 36 37 38 40 41 43 44 45 46 47 50 54 57 58 59 62 # 18461 union c a 63 1 1 e b 63 1 1 e # 18462 union c a 63 1 1 e b 63 1 1 e # 18463 union c a 63 1 1 e b 63 1 1 e # 18464 union c a 63 1 1 e b 63 1 1 f # 18465 union c a 63 1 1 e b 63 1 1 e # 18466 union c a 63 1 1 e b 63 1 1 1 2 4 5 8 9 10 11 12 13 14 15 18 19 20 22 23 26 28 30 33 36 37 38 40 41 43 45 46 47 51 52 54 56 57 59 62 # 18467 union c a 63 1 1 f b 63 1 1 f # 18468 union c a 63 1 1 f b 63 1 1 e # 18469 union c a 63 1 1 f b 63 1 1 f # 18470 union c a 63 1 1 f b 63 1 1 f # 18471 union c a 63 1 1 f b 63 1 1 f # 18472 union c a 63 1 1 f b 63 1 1 3 7 8 10 11 12 13 17 18 20 23 24 27 29 30 31 34 35 45 46 47 48 49 50 52 55 57 58 59 60 62 # 18473 union c a 63 1 1 1 2 5 6 7 10 11 12 13 19 21 26 31 33 36 37 43 44 45 48 49 52 53 55 59 60 62 b 63 1 1 1 2 5 6 7 10 11 12 13 19 21 26 31 33 36 37 43 44 45 48 49 52 53 55 59 60 62 # 18474 union c a 63 1 1 1 2 5 6 7 10 11 12 13 19 21 26 31 33 36 37 43 44 45 48 49 52 53 55 59 60 62 b 63 1 1 e # 18475 union c a 63 1 1 3 6 7 13 14 15 16 17 20 22 23 24 26 27 30 32 33 39 41 43 44 47 49 50 51 52 53 54 55 56 57 62 b 63 1 1 3 6 7 13 14 15 16 17 20 22 23 24 26 27 30 32 33 39 41 43 44 47 49 50 51 52 53 54 55 56 57 62 # 18476 union c a 63 1 1 3 6 7 13 14 15 16 17 20 22 23 24 26 27 30 32 33 39 41 43 44 47 49 50 51 52 53 54 55 56 57 62 b 63 1 1 f # 18477 union c a 63 1 1 2 3 8 9 12 13 14 16 17 19 20 22 26 28 31 34 35 37 40 41 42 43 45 49 52 54 56 57 58 60 61 b 63 1 1 2 3 8 9 12 13 14 16 17 19 20 22 26 28 31 34 35 37 40 41 42 43 45 49 52 54 56 57 58 60 61 # 18478 union c a 63 1 1 2 3 8 9 12 13 14 16 17 19 20 22 26 28 31 34 35 37 40 41 42 43 45 49 52 54 56 57 58 60 61 b 63 1 1 4 6 7 10 11 12 16 17 18 20 22 24 25 26 28 29 30 34 35 38 39 40 41 42 43 45 48 51 52 55 59 # 18479 union c a 64 0 0 e b 64 0 0 e # 18480 union c a 64 0 0 e b 64 0 0 e # 18481 union c a 64 0 0 e b 64 0 0 e # 18482 union c a 64 0 0 e b 64 0 0 f # 18483 union c a 64 0 0 e b 64 0 0 e # 18484 union c a 64 0 0 e b 64 0 0 2 4 7 14 15 21 22 23 24 25 27 31 32 35 36 37 38 40 42 44 45 50 57 59 # 18485 union c a 64 0 0 f b 64 0 0 f # 18486 union c a 64 0 0 f b 64 0 0 e # 18487 union c a 64 0 0 f b 64 0 0 f # 18488 union c a 64 0 0 f b 64 0 0 f # 18489 union c a 64 0 0 f b 64 0 0 f # 18490 union c a 64 0 0 f b 64 0 0 0 1 5 6 10 11 16 17 18 19 23 26 28 30 31 32 33 36 37 38 41 43 47 50 51 52 54 55 56 57 59 60 63 # 18491 union c a 64 0 0 1 4 9 10 11 14 15 17 18 20 21 23 25 28 29 32 33 37 38 39 40 41 42 43 44 46 50 53 54 55 56 59 61 62 b 64 0 0 1 4 9 10 11 14 15 17 18 20 21 23 25 28 29 32 33 37 38 39 40 41 42 43 44 46 50 53 54 55 56 59 61 62 # 18492 union c a 64 0 0 1 4 9 10 11 14 15 17 18 20 21 23 25 28 29 32 33 37 38 39 40 41 42 43 44 46 50 53 54 55 56 59 61 62 b 64 0 0 e # 18493 union c a 64 0 0 0 2 9 13 14 15 18 19 21 25 26 27 29 33 35 37 39 40 42 45 46 47 49 50 51 52 54 56 57 60 61 62 b 64 0 0 0 2 9 13 14 15 18 19 21 25 26 27 29 33 35 37 39 40 42 45 46 47 49 50 51 52 54 56 57 60 61 62 # 18494 union c a 64 0 0 0 2 9 13 14 15 18 19 21 25 26 27 29 33 35 37 39 40 42 45 46 47 49 50 51 52 54 56 57 60 61 62 b 64 0 0 f # 18495 union c a 64 0 0 0 4 5 6 7 9 10 11 12 13 14 15 16 18 19 20 21 23 24 25 27 28 29 33 34 37 38 39 40 41 44 47 48 50 52 55 61 62 63 b 64 0 0 0 4 5 6 7 9 10 11 12 13 14 15 16 18 19 20 21 23 24 25 27 28 29 33 34 37 38 39 40 41 44 47 48 50 52 55 61 62 63 # 18496 union c a 64 0 0 0 4 5 6 7 9 10 11 12 13 14 15 16 18 19 20 21 23 24 25 27 28 29 33 34 37 38 39 40 41 44 47 48 50 52 55 61 62 63 b 64 0 0 2 3 5 6 7 8 11 13 14 17 18 21 22 23 27 29 30 31 33 34 35 36 38 39 40 42 45 48 50 53 55 58 63 # 18497 union c a 64 0 0 e b 64 0 0 e # 18498 union c a 64 0 0 e b 64 0 1 e # 18499 union c a 64 0 0 e b 64 0 0 e # 18500 union c a 64 0 0 e b 64 0 1 f # 18501 union c a 64 0 0 e b 64 0 0 e # 18502 union c a 64 0 0 e b 64 0 1 1 2 3 6 8 11 13 15 20 24 25 26 29 31 32 34 36 38 40 45 50 52 55 59 61 # 18503 union c a 64 0 0 f b 64 0 0 f # 18504 union c a 64 0 0 f b 64 0 1 e # 18505 union c a 64 0 0 f b 64 0 0 f # 18506 union c a 64 0 0 f b 64 0 1 f # 18507 union c a 64 0 0 f b 64 0 0 f # 18508 union c a 64 0 0 f b 64 0 1 2 3 4 7 8 9 10 11 12 16 19 20 21 22 23 26 30 36 37 38 39 40 41 42 43 47 48 49 50 52 55 56 59 63 # 18509 union c a 64 0 0 0 1 3 4 7 10 16 18 19 20 22 27 29 30 32 34 35 38 39 40 41 45 48 50 51 53 55 56 57 58 60 61 62 63 b 64 0 0 0 1 3 4 7 10 16 18 19 20 22 27 29 30 32 34 35 38 39 40 41 45 48 50 51 53 55 56 57 58 60 61 62 63 # 18510 union c a 64 0 0 0 1 3 4 7 10 16 18 19 20 22 27 29 30 32 34 35 38 39 40 41 45 48 50 51 53 55 56 57 58 60 61 62 63 b 64 0 1 e # 18511 union c a 64 0 0 1 2 3 5 7 8 9 11 13 16 20 23 27 30 31 32 37 39 40 42 46 49 50 55 56 57 58 62 b 64 0 0 1 2 3 5 7 8 9 11 13 16 20 23 27 30 31 32 37 39 40 42 46 49 50 55 56 57 58 62 # 18512 union c a 64 0 0 1 2 3 5 7 8 9 11 13 16 20 23 27 30 31 32 37 39 40 42 46 49 50 55 56 57 58 62 b 64 0 1 f # 18513 union c a 64 0 0 0 5 14 15 19 20 21 24 26 28 29 31 33 34 35 36 38 39 43 44 46 47 48 50 54 57 58 62 63 b 64 0 0 0 5 14 15 19 20 21 24 26 28 29 31 33 34 35 36 38 39 43 44 46 47 48 50 54 57 58 62 63 # 18514 union c a 64 0 0 0 5 14 15 19 20 21 24 26 28 29 31 33 34 35 36 38 39 43 44 46 47 48 50 54 57 58 62 63 b 64 0 1 1 3 6 7 8 10 11 12 13 14 18 19 20 21 24 25 30 35 36 39 40 42 43 44 48 50 51 54 55 60 62 # 18515 union c a 64 0 0 e b 64 0 0 e # 18516 union c a 64 0 0 e b 64 1 0 e # 18517 union c a 64 0 0 e b 64 0 0 e # 18518 union c a 64 0 0 e b 64 1 0 f # 18519 union c a 64 0 0 e b 64 0 0 e # 18520 union c a 64 0 0 e b 64 1 0 0 3 4 5 6 7 8 10 11 12 13 15 18 21 23 25 28 30 31 32 33 35 36 38 39 40 42 43 45 46 47 51 53 57 58 60 63 # 18521 union c a 64 0 0 f b 64 0 0 f # 18522 union c a 64 0 0 f b 64 1 0 e # 18523 union c a 64 0 0 f b 64 0 0 f # 18524 union c a 64 0 0 f b 64 1 0 f # 18525 union c a 64 0 0 f b 64 0 0 f # 18526 union c a 64 0 0 f b 64 1 0 1 4 6 7 8 9 12 14 15 16 18 19 20 24 26 27 28 30 32 35 38 43 46 48 49 51 52 53 55 56 58 59 61 62 # 18527 union c a 64 0 0 0 4 6 11 12 16 19 22 24 25 26 28 29 30 31 37 38 39 41 42 43 48 49 51 55 59 61 62 63 b 64 0 0 0 4 6 11 12 16 19 22 24 25 26 28 29 30 31 37 38 39 41 42 43 48 49 51 55 59 61 62 63 # 18528 union c a 64 0 0 0 4 6 11 12 16 19 22 24 25 26 28 29 30 31 37 38 39 41 42 43 48 49 51 55 59 61 62 63 b 64 1 0 e # 18529 union c a 64 0 0 1 3 4 5 6 8 9 12 13 15 17 18 19 20 21 22 25 28 29 32 34 35 37 42 47 48 49 51 52 58 61 b 64 0 0 1 3 4 5 6 8 9 12 13 15 17 18 19 20 21 22 25 28 29 32 34 35 37 42 47 48 49 51 52 58 61 # 18530 union c a 64 0 0 1 3 4 5 6 8 9 12 13 15 17 18 19 20 21 22 25 28 29 32 34 35 37 42 47 48 49 51 52 58 61 b 64 1 0 f # 18531 union c a 64 0 0 3 5 7 17 20 21 22 27 29 31 33 34 35 39 40 41 46 47 52 53 57 58 59 60 62 b 64 0 0 3 5 7 17 20 21 22 27 29 31 33 34 35 39 40 41 46 47 52 53 57 58 59 60 62 # 18532 union c a 64 0 0 3 5 7 17 20 21 22 27 29 31 33 34 35 39 40 41 46 47 52 53 57 58 59 60 62 b 64 1 0 0 1 5 11 12 17 20 21 22 24 25 27 28 31 33 35 37 38 39 42 44 48 49 50 51 52 54 55 58 63 # 18533 union c a 64 0 0 e b 64 0 0 e # 18534 union c a 64 0 0 e b 64 1 1 e # 18535 union c a 64 0 0 e b 64 0 0 e # 18536 union c a 64 0 0 e b 64 1 1 f # 18537 union c a 64 0 0 e b 64 0 0 e # 18538 union c a 64 0 0 e b 64 1 1 1 3 6 7 8 10 11 12 14 15 17 24 26 28 29 30 32 34 36 37 38 39 41 42 43 45 46 47 51 52 53 57 58 60 61 62 63 # 18539 union c a 64 0 0 f b 64 0 0 f # 18540 union c a 64 0 0 f b 64 1 1 e # 18541 union c a 64 0 0 f b 64 0 0 f # 18542 union c a 64 0 0 f b 64 1 1 f # 18543 union c a 64 0 0 f b 64 0 0 f # 18544 union c a 64 0 0 f b 64 1 1 1 2 5 7 8 9 10 12 16 17 18 20 22 25 26 29 30 31 33 34 35 36 38 39 43 44 45 47 48 51 55 56 58 61 63 # 18545 union c a 64 0 0 0 2 3 6 7 8 10 11 13 14 17 19 21 26 27 29 35 36 39 40 42 46 51 53 54 55 57 58 59 60 63 b 64 0 0 0 2 3 6 7 8 10 11 13 14 17 19 21 26 27 29 35 36 39 40 42 46 51 53 54 55 57 58 59 60 63 # 18546 union c a 64 0 0 0 2 3 6 7 8 10 11 13 14 17 19 21 26 27 29 35 36 39 40 42 46 51 53 54 55 57 58 59 60 63 b 64 1 1 e # 18547 union c a 64 0 0 1 2 6 9 10 11 13 15 19 22 27 28 30 33 36 38 48 49 53 54 57 63 b 64 0 0 1 2 6 9 10 11 13 15 19 22 27 28 30 33 36 38 48 49 53 54 57 63 # 18548 union c a 64 0 0 1 2 6 9 10 11 13 15 19 22 27 28 30 33 36 38 48 49 53 54 57 63 b 64 1 1 f # 18549 union c a 64 0 0 1 5 6 7 9 11 18 22 23 27 28 29 30 32 33 36 38 43 44 47 48 49 55 56 57 58 59 61 b 64 0 0 1 5 6 7 9 11 18 22 23 27 28 29 30 32 33 36 38 43 44 47 48 49 55 56 57 58 59 61 # 18550 union c a 64 0 0 1 5 6 7 9 11 18 22 23 27 28 29 30 32 33 36 38 43 44 47 48 49 55 56 57 58 59 61 b 64 1 1 0 1 3 4 8 10 12 15 17 19 21 22 24 25 29 33 34 38 40 41 42 43 44 46 50 51 53 55 57 59 61 63 # 18551 union c a 64 0 1 e b 64 0 1 e # 18552 union c a 64 0 1 e b 64 0 0 e # 18553 union c a 64 0 1 e b 64 0 1 e # 18554 union c a 64 0 1 e b 64 0 0 f # 18555 union c a 64 0 1 e b 64 0 1 e # 18556 union c a 64 0 1 e b 64 0 0 0 8 10 11 13 15 16 20 21 27 29 30 31 32 36 37 38 39 40 41 42 45 49 50 53 54 55 58 59 60 61 62 63 # 18557 union c a 64 0 1 f b 64 0 1 f # 18558 union c a 64 0 1 f b 64 0 0 e # 18559 union c a 64 0 1 f b 64 0 1 f # 18560 union c a 64 0 1 f b 64 0 0 f # 18561 union c a 64 0 1 f b 64 0 1 f # 18562 union c a 64 0 1 f b 64 0 0 1 4 6 7 8 9 12 14 15 17 19 20 21 22 25 26 28 29 32 33 36 39 43 44 46 50 51 53 58 60 61 63 # 18563 union c a 64 0 1 0 1 3 6 7 8 10 11 12 13 15 16 18 20 22 26 34 35 36 37 39 40 42 43 44 46 47 49 52 53 54 57 58 59 60 b 64 0 1 0 1 3 6 7 8 10 11 12 13 15 16 18 20 22 26 34 35 36 37 39 40 42 43 44 46 47 49 52 53 54 57 58 59 60 # 18564 union c a 64 0 1 0 1 3 6 7 8 10 11 12 13 15 16 18 20 22 26 34 35 36 37 39 40 42 43 44 46 47 49 52 53 54 57 58 59 60 b 64 0 0 e # 18565 union c a 64 0 1 0 2 3 4 6 7 8 9 10 11 12 14 17 18 20 21 22 24 25 27 28 29 30 31 32 33 35 38 40 41 42 43 45 48 50 51 57 58 61 62 b 64 0 1 0 2 3 4 6 7 8 9 10 11 12 14 17 18 20 21 22 24 25 27 28 29 30 31 32 33 35 38 40 41 42 43 45 48 50 51 57 58 61 62 # 18566 union c a 64 0 1 0 2 3 4 6 7 8 9 10 11 12 14 17 18 20 21 22 24 25 27 28 29 30 31 32 33 35 38 40 41 42 43 45 48 50 51 57 58 61 62 b 64 0 0 f # 18567 union c a 64 0 1 0 4 6 7 9 10 14 16 17 18 24 26 29 30 34 35 36 37 38 42 43 44 45 50 51 56 57 58 60 61 62 63 b 64 0 1 0 4 6 7 9 10 14 16 17 18 24 26 29 30 34 35 36 37 38 42 43 44 45 50 51 56 57 58 60 61 62 63 # 18568 union c a 64 0 1 0 4 6 7 9 10 14 16 17 18 24 26 29 30 34 35 36 37 38 42 43 44 45 50 51 56 57 58 60 61 62 63 b 64 0 0 1 2 5 6 7 10 11 15 19 21 24 31 32 40 43 44 45 46 51 52 53 54 55 59 60 61 62 63 # 18569 union c a 64 0 1 e b 64 0 1 e # 18570 union c a 64 0 1 e b 64 0 1 e # 18571 union c a 64 0 1 e b 64 0 1 e # 18572 union c a 64 0 1 e b 64 0 1 f # 18573 union c a 64 0 1 e b 64 0 1 e # 18574 union c a 64 0 1 e b 64 0 1 5 6 11 13 15 22 24 27 28 29 33 34 35 37 38 39 42 43 45 49 50 51 53 56 59 61 63 # 18575 union c a 64 0 1 f b 64 0 1 f # 18576 union c a 64 0 1 f b 64 0 1 e # 18577 union c a 64 0 1 f b 64 0 1 f # 18578 union c a 64 0 1 f b 64 0 1 f # 18579 union c a 64 0 1 f b 64 0 1 f # 18580 union c a 64 0 1 f b 64 0 1 1 3 4 6 7 8 10 11 15 18 19 20 21 23 26 27 30 31 34 35 36 38 40 41 44 45 50 55 56 58 59 62 63 # 18581 union c a 64 0 1 0 2 4 5 6 7 13 14 15 17 18 20 23 25 26 27 30 32 34 35 37 38 39 43 45 47 48 51 52 59 60 61 63 b 64 0 1 0 2 4 5 6 7 13 14 15 17 18 20 23 25 26 27 30 32 34 35 37 38 39 43 45 47 48 51 52 59 60 61 63 # 18582 union c a 64 0 1 0 2 4 5 6 7 13 14 15 17 18 20 23 25 26 27 30 32 34 35 37 38 39 43 45 47 48 51 52 59 60 61 63 b 64 0 1 e # 18583 union c a 64 0 1 1 2 3 4 5 7 9 10 11 12 16 17 21 22 23 24 25 26 27 28 29 32 35 36 37 38 42 44 46 49 50 52 53 55 56 57 59 60 61 63 b 64 0 1 1 2 3 4 5 7 9 10 11 12 16 17 21 22 23 24 25 26 27 28 29 32 35 36 37 38 42 44 46 49 50 52 53 55 56 57 59 60 61 63 # 18584 union c a 64 0 1 1 2 3 4 5 7 9 10 11 12 16 17 21 22 23 24 25 26 27 28 29 32 35 36 37 38 42 44 46 49 50 52 53 55 56 57 59 60 61 63 b 64 0 1 f # 18585 union c a 64 0 1 2 7 8 10 11 12 13 16 18 20 21 23 24 25 27 28 29 30 31 33 37 42 44 47 57 59 62 63 b 64 0 1 2 7 8 10 11 12 13 16 18 20 21 23 24 25 27 28 29 30 31 33 37 42 44 47 57 59 62 63 # 18586 union c a 64 0 1 2 7 8 10 11 12 13 16 18 20 21 23 24 25 27 28 29 30 31 33 37 42 44 47 57 59 62 63 b 64 0 1 0 4 8 11 12 13 17 18 21 22 24 25 30 32 35 36 37 38 45 47 51 53 55 56 57 63 # 18587 union c a 64 0 1 e b 64 0 1 e # 18588 union c a 64 0 1 e b 64 1 0 e # 18589 union c a 64 0 1 e b 64 0 1 e # 18590 union c a 64 0 1 e b 64 1 0 f # 18591 union c a 64 0 1 e b 64 0 1 e # 18592 union c a 64 0 1 e b 64 1 0 1 2 4 5 6 9 10 11 12 17 18 19 20 22 23 24 25 26 31 33 34 36 37 38 39 40 41 42 44 46 48 49 51 52 53 55 56 60 62 # 18593 union c a 64 0 1 f b 64 0 1 f # 18594 union c a 64 0 1 f b 64 1 0 e # 18595 union c a 64 0 1 f b 64 0 1 f # 18596 union c a 64 0 1 f b 64 1 0 f # 18597 union c a 64 0 1 f b 64 0 1 f # 18598 union c a 64 0 1 f b 64 1 0 1 2 4 5 8 9 10 11 13 18 24 25 26 27 29 31 32 34 38 41 42 44 46 48 49 50 54 56 61 62 63 # 18599 union c a 64 0 1 1 3 6 9 10 13 15 19 21 22 26 27 28 29 30 32 34 35 36 37 40 45 47 51 55 56 57 58 59 60 62 b 64 0 1 1 3 6 9 10 13 15 19 21 22 26 27 28 29 30 32 34 35 36 37 40 45 47 51 55 56 57 58 59 60 62 # 18600 union c a 64 0 1 1 3 6 9 10 13 15 19 21 22 26 27 28 29 30 32 34 35 36 37 40 45 47 51 55 56 57 58 59 60 62 b 64 1 0 e # 18601 union c a 64 0 1 0 1 4 5 6 7 11 16 17 26 28 29 30 32 34 35 37 38 39 40 44 45 46 47 48 49 53 54 55 56 57 59 60 61 63 b 64 0 1 0 1 4 5 6 7 11 16 17 26 28 29 30 32 34 35 37 38 39 40 44 45 46 47 48 49 53 54 55 56 57 59 60 61 63 # 18602 union c a 64 0 1 0 1 4 5 6 7 11 16 17 26 28 29 30 32 34 35 37 38 39 40 44 45 46 47 48 49 53 54 55 56 57 59 60 61 63 b 64 1 0 f # 18603 union c a 64 0 1 2 4 5 7 8 9 11 12 13 15 16 17 21 24 25 28 31 32 33 35 36 37 38 39 41 44 45 46 47 48 53 54 55 56 57 61 b 64 0 1 2 4 5 7 8 9 11 12 13 15 16 17 21 24 25 28 31 32 33 35 36 37 38 39 41 44 45 46 47 48 53 54 55 56 57 61 # 18604 union c a 64 0 1 2 4 5 7 8 9 11 12 13 15 16 17 21 24 25 28 31 32 33 35 36 37 38 39 41 44 45 46 47 48 53 54 55 56 57 61 b 64 1 0 0 1 2 4 5 8 9 11 12 14 16 18 19 22 23 27 29 31 32 35 36 37 38 39 44 46 47 50 51 52 53 54 61 # 18605 union c a 64 0 1 e b 64 0 1 e # 18606 union c a 64 0 1 e b 64 1 1 e # 18607 union c a 64 0 1 e b 64 0 1 e # 18608 union c a 64 0 1 e b 64 1 1 f # 18609 union c a 64 0 1 e b 64 0 1 e # 18610 union c a 64 0 1 e b 64 1 1 0 1 2 3 4 5 6 15 16 17 18 19 20 23 24 25 27 29 32 35 38 39 43 44 46 49 55 57 58 59 60 63 # 18611 union c a 64 0 1 f b 64 0 1 f # 18612 union c a 64 0 1 f b 64 1 1 e # 18613 union c a 64 0 1 f b 64 0 1 f # 18614 union c a 64 0 1 f b 64 1 1 f # 18615 union c a 64 0 1 f b 64 0 1 f # 18616 union c a 64 0 1 f b 64 1 1 1 3 4 8 9 11 15 18 20 24 26 27 28 32 33 34 35 41 47 48 51 53 59 61 # 18617 union c a 64 0 1 0 4 5 6 7 8 9 13 16 21 22 24 28 29 30 31 32 34 35 37 38 40 42 44 46 47 48 51 52 55 56 57 59 60 63 b 64 0 1 0 4 5 6 7 8 9 13 16 21 22 24 28 29 30 31 32 34 35 37 38 40 42 44 46 47 48 51 52 55 56 57 59 60 63 # 18618 union c a 64 0 1 0 4 5 6 7 8 9 13 16 21 22 24 28 29 30 31 32 34 35 37 38 40 42 44 46 47 48 51 52 55 56 57 59 60 63 b 64 1 1 e # 18619 union c a 64 0 1 0 6 7 9 13 15 17 18 25 26 30 32 34 36 37 40 42 43 46 47 49 50 51 54 55 56 57 b 64 0 1 0 6 7 9 13 15 17 18 25 26 30 32 34 36 37 40 42 43 46 47 49 50 51 54 55 56 57 # 18620 union c a 64 0 1 0 6 7 9 13 15 17 18 25 26 30 32 34 36 37 40 42 43 46 47 49 50 51 54 55 56 57 b 64 1 1 f # 18621 union c a 64 0 1 0 2 4 5 6 7 10 11 12 13 14 15 16 17 18 20 21 23 24 28 29 30 32 34 35 37 38 39 42 43 45 46 47 49 56 57 59 b 64 0 1 0 2 4 5 6 7 10 11 12 13 14 15 16 17 18 20 21 23 24 28 29 30 32 34 35 37 38 39 42 43 45 46 47 49 56 57 59 # 18622 union c a 64 0 1 0 2 4 5 6 7 10 11 12 13 14 15 16 17 18 20 21 23 24 28 29 30 32 34 35 37 38 39 42 43 45 46 47 49 56 57 59 b 64 1 1 0 4 8 11 12 14 16 18 20 22 23 27 29 32 33 35 36 37 39 40 42 43 44 45 47 48 51 52 53 57 58 59 60 62 63 # 18623 union c a 64 1 0 e b 64 1 0 e # 18624 union c a 64 1 0 e b 64 0 0 e # 18625 union c a 64 1 0 e b 64 1 0 e # 18626 union c a 64 1 0 e b 64 0 0 f # 18627 union c a 64 1 0 e b 64 1 0 e # 18628 union c a 64 1 0 e b 64 0 0 0 2 3 5 6 13 14 18 28 30 31 32 33 34 35 36 40 48 50 51 52 56 57 58 60 61 63 # 18629 union c a 64 1 0 f b 64 1 0 f # 18630 union c a 64 1 0 f b 64 0 0 e # 18631 union c a 64 1 0 f b 64 1 0 f # 18632 union c a 64 1 0 f b 64 0 0 f # 18633 union c a 64 1 0 f b 64 1 0 f # 18634 union c a 64 1 0 f b 64 0 0 1 2 5 9 10 11 16 17 19 21 23 25 28 29 32 33 36 37 38 40 44 46 49 51 52 54 58 60 61 63 # 18635 union c a 64 1 0 0 1 2 3 4 5 7 9 11 15 17 19 23 25 26 28 31 34 36 41 45 49 51 52 53 56 58 59 60 62 b 64 1 0 0 1 2 3 4 5 7 9 11 15 17 19 23 25 26 28 31 34 36 41 45 49 51 52 53 56 58 59 60 62 # 18636 union c a 64 1 0 0 1 2 3 4 5 7 9 11 15 17 19 23 25 26 28 31 34 36 41 45 49 51 52 53 56 58 59 60 62 b 64 0 0 e # 18637 union c a 64 1 0 1 2 6 9 10 11 12 16 17 18 19 24 26 27 28 29 34 35 36 51 52 53 54 55 57 58 60 b 64 1 0 1 2 6 9 10 11 12 16 17 18 19 24 26 27 28 29 34 35 36 51 52 53 54 55 57 58 60 # 18638 union c a 64 1 0 1 2 6 9 10 11 12 16 17 18 19 24 26 27 28 29 34 35 36 51 52 53 54 55 57 58 60 b 64 0 0 f # 18639 union c a 64 1 0 0 2 3 4 9 11 13 17 20 26 27 28 31 34 39 41 42 44 46 50 54 55 56 57 58 59 60 61 62 b 64 1 0 0 2 3 4 9 11 13 17 20 26 27 28 31 34 39 41 42 44 46 50 54 55 56 57 58 59 60 61 62 # 18640 union c a 64 1 0 0 2 3 4 9 11 13 17 20 26 27 28 31 34 39 41 42 44 46 50 54 55 56 57 58 59 60 61 62 b 64 0 0 1 2 3 6 7 9 14 15 17 19 22 24 27 31 35 39 40 41 42 44 45 46 51 54 56 61 62 63 # 18641 union c a 64 1 0 e b 64 1 0 e # 18642 union c a 64 1 0 e b 64 0 1 e # 18643 union c a 64 1 0 e b 64 1 0 e # 18644 union c a 64 1 0 e b 64 0 1 f # 18645 union c a 64 1 0 e b 64 1 0 e # 18646 union c a 64 1 0 e b 64 0 1 3 4 5 7 8 10 11 13 15 17 19 20 23 24 25 26 28 29 30 31 34 38 40 41 42 43 44 46 48 50 51 52 54 56 57 58 59 60 61 62 # 18647 union c a 64 1 0 f b 64 1 0 f # 18648 union c a 64 1 0 f b 64 0 1 e # 18649 union c a 64 1 0 f b 64 1 0 f # 18650 union c a 64 1 0 f b 64 0 1 f # 18651 union c a 64 1 0 f b 64 1 0 f # 18652 union c a 64 1 0 f b 64 0 1 3 4 6 9 14 17 20 21 22 23 24 26 30 32 35 36 41 42 44 46 49 50 52 55 56 57 61 62 # 18653 union c a 64 1 0 1 3 9 10 13 14 15 16 18 19 20 23 25 27 28 29 31 32 34 36 38 41 43 48 50 51 52 54 55 57 58 59 60 61 62 63 b 64 1 0 1 3 9 10 13 14 15 16 18 19 20 23 25 27 28 29 31 32 34 36 38 41 43 48 50 51 52 54 55 57 58 59 60 61 62 63 # 18654 union c a 64 1 0 1 3 9 10 13 14 15 16 18 19 20 23 25 27 28 29 31 32 34 36 38 41 43 48 50 51 52 54 55 57 58 59 60 61 62 63 b 64 0 1 e # 18655 union c a 64 1 0 1 5 6 8 13 18 19 20 21 22 24 25 27 28 30 33 34 36 38 39 40 42 44 48 51 55 56 58 59 60 62 63 b 64 1 0 1 5 6 8 13 18 19 20 21 22 24 25 27 28 30 33 34 36 38 39 40 42 44 48 51 55 56 58 59 60 62 63 # 18656 union c a 64 1 0 1 5 6 8 13 18 19 20 21 22 24 25 27 28 30 33 34 36 38 39 40 42 44 48 51 55 56 58 59 60 62 63 b 64 0 1 f # 18657 union c a 64 1 0 1 7 8 11 12 13 14 15 18 21 28 32 33 34 37 39 42 43 45 46 48 50 54 55 56 62 b 64 1 0 1 7 8 11 12 13 14 15 18 21 28 32 33 34 37 39 42 43 45 46 48 50 54 55 56 62 # 18658 union c a 64 1 0 1 7 8 11 12 13 14 15 18 21 28 32 33 34 37 39 42 43 45 46 48 50 54 55 56 62 b 64 0 1 2 5 7 10 11 12 15 16 20 24 25 26 29 30 34 35 39 40 42 43 44 45 46 47 51 52 53 58 59 # 18659 union c a 64 1 0 e b 64 1 0 e # 18660 union c a 64 1 0 e b 64 1 0 e # 18661 union c a 64 1 0 e b 64 1 0 e # 18662 union c a 64 1 0 e b 64 1 0 f # 18663 union c a 64 1 0 e b 64 1 0 e # 18664 union c a 64 1 0 e b 64 1 0 0 4 5 8 11 13 17 19 21 23 26 27 28 29 31 35 37 40 41 42 44 46 47 50 51 54 55 56 61 63 # 18665 union c a 64 1 0 f b 64 1 0 f # 18666 union c a 64 1 0 f b 64 1 0 e # 18667 union c a 64 1 0 f b 64 1 0 f # 18668 union c a 64 1 0 f b 64 1 0 f # 18669 union c a 64 1 0 f b 64 1 0 f # 18670 union c a 64 1 0 f b 64 1 0 2 6 8 9 11 14 17 19 21 23 25 27 28 29 30 31 36 38 39 40 46 47 48 49 50 52 57 59 62 63 # 18671 union c a 64 1 0 0 4 5 7 9 10 11 12 13 14 15 16 19 20 23 25 26 27 28 29 31 33 36 38 39 41 42 44 48 51 52 54 57 58 60 62 b 64 1 0 0 4 5 7 9 10 11 12 13 14 15 16 19 20 23 25 26 27 28 29 31 33 36 38 39 41 42 44 48 51 52 54 57 58 60 62 # 18672 union c a 64 1 0 0 4 5 7 9 10 11 12 13 14 15 16 19 20 23 25 26 27 28 29 31 33 36 38 39 41 42 44 48 51 52 54 57 58 60 62 b 64 1 0 e # 18673 union c a 64 1 0 3 4 6 7 9 14 16 17 18 19 21 23 26 28 29 31 33 34 35 37 38 39 40 43 44 45 47 48 50 52 53 58 59 62 b 64 1 0 3 4 6 7 9 14 16 17 18 19 21 23 26 28 29 31 33 34 35 37 38 39 40 43 44 45 47 48 50 52 53 58 59 62 # 18674 union c a 64 1 0 3 4 6 7 9 14 16 17 18 19 21 23 26 28 29 31 33 34 35 37 38 39 40 43 44 45 47 48 50 52 53 58 59 62 b 64 1 0 f # 18675 union c a 64 1 0 1 3 4 6 7 8 9 10 12 13 15 17 20 21 22 24 28 30 31 34 36 38 41 42 44 47 49 52 53 55 57 58 60 61 b 64 1 0 1 3 4 6 7 8 9 10 12 13 15 17 20 21 22 24 28 30 31 34 36 38 41 42 44 47 49 52 53 55 57 58 60 61 # 18676 union c a 64 1 0 1 3 4 6 7 8 9 10 12 13 15 17 20 21 22 24 28 30 31 34 36 38 41 42 44 47 49 52 53 55 57 58 60 61 b 64 1 0 0 1 3 7 11 13 14 15 16 18 19 23 26 33 34 35 38 39 42 43 45 46 48 49 50 54 56 57 58 # 18677 union c a 64 1 0 e b 64 1 0 e # 18678 union c a 64 1 0 e b 64 1 1 e # 18679 union c a 64 1 0 e b 64 1 0 e # 18680 union c a 64 1 0 e b 64 1 1 f # 18681 union c a 64 1 0 e b 64 1 0 e # 18682 union c a 64 1 0 e b 64 1 1 3 4 5 12 13 14 15 16 17 19 29 30 31 37 41 42 44 45 51 52 53 54 55 59 63 # 18683 union c a 64 1 0 f b 64 1 0 f # 18684 union c a 64 1 0 f b 64 1 1 e # 18685 union c a 64 1 0 f b 64 1 0 f # 18686 union c a 64 1 0 f b 64 1 1 f # 18687 union c a 64 1 0 f b 64 1 0 f # 18688 union c a 64 1 0 f b 64 1 1 0 1 3 4 5 13 14 15 19 22 24 28 29 31 32 33 34 35 38 39 40 43 45 46 52 54 55 56 59 60 61 62 63 # 18689 union c a 64 1 0 3 4 6 8 14 18 20 21 22 23 26 28 30 32 35 36 39 40 41 43 44 45 50 51 53 54 55 56 58 59 60 61 63 b 64 1 0 3 4 6 8 14 18 20 21 22 23 26 28 30 32 35 36 39 40 41 43 44 45 50 51 53 54 55 56 58 59 60 61 63 # 18690 union c a 64 1 0 3 4 6 8 14 18 20 21 22 23 26 28 30 32 35 36 39 40 41 43 44 45 50 51 53 54 55 56 58 59 60 61 63 b 64 1 1 e # 18691 union c a 64 1 0 1 2 5 8 9 11 12 13 15 17 18 19 20 21 23 26 31 33 35 36 37 38 39 40 44 45 48 50 56 57 58 61 b 64 1 0 1 2 5 8 9 11 12 13 15 17 18 19 20 21 23 26 31 33 35 36 37 38 39 40 44 45 48 50 56 57 58 61 # 18692 union c a 64 1 0 1 2 5 8 9 11 12 13 15 17 18 19 20 21 23 26 31 33 35 36 37 38 39 40 44 45 48 50 56 57 58 61 b 64 1 1 f # 18693 union c a 64 1 0 0 1 3 4 6 7 12 13 14 15 17 22 25 26 27 28 31 34 36 38 40 42 43 44 49 50 53 54 55 60 61 62 63 b 64 1 0 0 1 3 4 6 7 12 13 14 15 17 22 25 26 27 28 31 34 36 38 40 42 43 44 49 50 53 54 55 60 61 62 63 # 18694 union c a 64 1 0 0 1 3 4 6 7 12 13 14 15 17 22 25 26 27 28 31 34 36 38 40 42 43 44 49 50 53 54 55 60 61 62 63 b 64 1 1 1 3 7 9 10 14 15 16 21 22 23 26 29 32 35 36 37 38 40 41 42 44 46 47 48 54 55 56 57 58 59 60 63 # 18695 union c a 64 1 1 e b 64 1 1 e # 18696 union c a 64 1 1 e b 64 0 0 e # 18697 union c a 64 1 1 e b 64 1 1 e # 18698 union c a 64 1 1 e b 64 0 0 f # 18699 union c a 64 1 1 e b 64 1 1 e # 18700 union c a 64 1 1 e b 64 0 0 0 1 2 4 5 6 10 12 13 15 16 17 20 22 23 25 26 30 31 33 35 39 40 43 44 45 46 47 48 49 51 58 61 63 # 18701 union c a 64 1 1 f b 64 1 1 f # 18702 union c a 64 1 1 f b 64 0 0 e # 18703 union c a 64 1 1 f b 64 1 1 f # 18704 union c a 64 1 1 f b 64 0 0 f # 18705 union c a 64 1 1 f b 64 1 1 f # 18706 union c a 64 1 1 f b 64 0 0 1 2 3 6 7 10 17 18 19 20 24 25 26 28 30 33 36 40 42 44 50 52 55 58 59 61 63 # 18707 union c a 64 1 1 0 3 4 5 8 10 11 12 14 15 16 17 19 21 24 29 34 35 42 45 48 50 54 56 58 60 61 62 b 64 1 1 0 3 4 5 8 10 11 12 14 15 16 17 19 21 24 29 34 35 42 45 48 50 54 56 58 60 61 62 # 18708 union c a 64 1 1 0 3 4 5 8 10 11 12 14 15 16 17 19 21 24 29 34 35 42 45 48 50 54 56 58 60 61 62 b 64 0 0 e # 18709 union c a 64 1 1 1 3 4 5 6 8 9 10 12 13 14 15 17 19 21 22 25 26 28 33 34 37 38 40 42 43 45 46 47 50 51 53 54 57 58 b 64 1 1 1 3 4 5 6 8 9 10 12 13 14 15 17 19 21 22 25 26 28 33 34 37 38 40 42 43 45 46 47 50 51 53 54 57 58 # 18710 union c a 64 1 1 1 3 4 5 6 8 9 10 12 13 14 15 17 19 21 22 25 26 28 33 34 37 38 40 42 43 45 46 47 50 51 53 54 57 58 b 64 0 0 f # 18711 union c a 64 1 1 0 2 6 8 9 12 16 18 19 20 21 24 26 27 32 34 36 37 38 39 40 43 44 45 46 48 49 51 52 53 55 58 59 b 64 1 1 0 2 6 8 9 12 16 18 19 20 21 24 26 27 32 34 36 37 38 39 40 43 44 45 46 48 49 51 52 53 55 58 59 # 18712 union c a 64 1 1 0 2 6 8 9 12 16 18 19 20 21 24 26 27 32 34 36 37 38 39 40 43 44 45 46 48 49 51 52 53 55 58 59 b 64 0 0 6 10 12 13 14 15 16 18 19 22 24 28 32 33 35 39 40 42 43 45 46 48 49 53 54 55 57 61 # 18713 union c a 64 1 1 e b 64 1 1 e # 18714 union c a 64 1 1 e b 64 0 1 e # 18715 union c a 64 1 1 e b 64 1 1 e # 18716 union c a 64 1 1 e b 64 0 1 f # 18717 union c a 64 1 1 e b 64 1 1 e # 18718 union c a 64 1 1 e b 64 0 1 0 1 3 6 8 9 10 11 13 18 19 22 23 25 27 28 29 32 36 39 40 42 45 46 47 49 51 54 55 58 59 60 61 63 # 18719 union c a 64 1 1 f b 64 1 1 f # 18720 union c a 64 1 1 f b 64 0 1 e # 18721 union c a 64 1 1 f b 64 1 1 f # 18722 union c a 64 1 1 f b 64 0 1 f # 18723 union c a 64 1 1 f b 64 1 1 f # 18724 union c a 64 1 1 f b 64 0 1 1 2 8 9 10 12 13 14 19 20 23 24 26 27 31 35 36 38 39 41 46 47 48 50 52 55 59 60 61 # 18725 union c a 64 1 1 1 7 8 9 12 15 16 19 21 23 25 26 28 30 32 33 34 38 42 46 50 51 52 54 57 60 62 63 b 64 1 1 1 7 8 9 12 15 16 19 21 23 25 26 28 30 32 33 34 38 42 46 50 51 52 54 57 60 62 63 # 18726 union c a 64 1 1 1 7 8 9 12 15 16 19 21 23 25 26 28 30 32 33 34 38 42 46 50 51 52 54 57 60 62 63 b 64 0 1 e # 18727 union c a 64 1 1 1 6 7 10 11 12 13 20 24 25 26 27 29 30 32 34 37 38 39 41 42 43 44 52 53 55 56 58 60 61 62 63 b 64 1 1 1 6 7 10 11 12 13 20 24 25 26 27 29 30 32 34 37 38 39 41 42 43 44 52 53 55 56 58 60 61 62 63 # 18728 union c a 64 1 1 1 6 7 10 11 12 13 20 24 25 26 27 29 30 32 34 37 38 39 41 42 43 44 52 53 55 56 58 60 61 62 63 b 64 0 1 f # 18729 union c a 64 1 1 0 1 2 5 7 8 10 11 12 13 17 20 21 22 23 25 26 29 30 33 34 35 36 38 39 40 42 43 46 47 48 51 55 56 58 61 62 63 b 64 1 1 0 1 2 5 7 8 10 11 12 13 17 20 21 22 23 25 26 29 30 33 34 35 36 38 39 40 42 43 46 47 48 51 55 56 58 61 62 63 # 18730 union c a 64 1 1 0 1 2 5 7 8 10 11 12 13 17 20 21 22 23 25 26 29 30 33 34 35 36 38 39 40 42 43 46 47 48 51 55 56 58 61 62 63 b 64 0 1 0 1 2 3 6 8 9 16 17 18 20 22 23 24 25 28 30 31 33 34 35 37 40 41 42 44 47 48 50 51 52 53 54 55 56 59 60 62 # 18731 union c a 64 1 1 e b 64 1 1 e # 18732 union c a 64 1 1 e b 64 1 0 e # 18733 union c a 64 1 1 e b 64 1 1 e # 18734 union c a 64 1 1 e b 64 1 0 f # 18735 union c a 64 1 1 e b 64 1 1 e # 18736 union c a 64 1 1 e b 64 1 0 0 1 4 5 7 8 11 13 24 27 28 31 33 34 36 39 40 41 45 46 47 50 51 52 55 56 57 58 63 # 18737 union c a 64 1 1 f b 64 1 1 f # 18738 union c a 64 1 1 f b 64 1 0 e # 18739 union c a 64 1 1 f b 64 1 1 f # 18740 union c a 64 1 1 f b 64 1 0 f # 18741 union c a 64 1 1 f b 64 1 1 f # 18742 union c a 64 1 1 f b 64 1 0 4 5 6 8 10 14 15 16 17 18 23 25 27 29 30 32 34 35 37 41 43 46 49 50 51 53 54 55 56 58 60 61 62 63 # 18743 union c a 64 1 1 2 3 5 6 8 12 13 14 16 19 21 22 26 32 33 36 38 39 40 41 43 44 47 48 50 54 55 56 58 60 62 63 b 64 1 1 2 3 5 6 8 12 13 14 16 19 21 22 26 32 33 36 38 39 40 41 43 44 47 48 50 54 55 56 58 60 62 63 # 18744 union c a 64 1 1 2 3 5 6 8 12 13 14 16 19 21 22 26 32 33 36 38 39 40 41 43 44 47 48 50 54 55 56 58 60 62 63 b 64 1 0 e # 18745 union c a 64 1 1 1 5 7 8 9 10 11 12 13 14 15 18 19 20 21 22 23 25 28 29 32 37 41 44 48 51 52 54 56 57 59 60 61 63 b 64 1 1 1 5 7 8 9 10 11 12 13 14 15 18 19 20 21 22 23 25 28 29 32 37 41 44 48 51 52 54 56 57 59 60 61 63 # 18746 union c a 64 1 1 1 5 7 8 9 10 11 12 13 14 15 18 19 20 21 22 23 25 28 29 32 37 41 44 48 51 52 54 56 57 59 60 61 63 b 64 1 0 f # 18747 union c a 64 1 1 1 3 7 9 12 13 14 15 16 19 20 23 25 26 29 31 32 36 37 41 42 45 49 52 53 54 57 59 60 61 62 b 64 1 1 1 3 7 9 12 13 14 15 16 19 20 23 25 26 29 31 32 36 37 41 42 45 49 52 53 54 57 59 60 61 62 # 18748 union c a 64 1 1 1 3 7 9 12 13 14 15 16 19 20 23 25 26 29 31 32 36 37 41 42 45 49 52 53 54 57 59 60 61 62 b 64 1 0 2 4 5 6 8 9 10 12 14 16 19 20 25 27 31 34 37 38 39 41 45 49 54 55 58 59 63 # 18749 union c a 64 1 1 e b 64 1 1 e # 18750 union c a 64 1 1 e b 64 1 1 e # 18751 union c a 64 1 1 e b 64 1 1 e # 18752 union c a 64 1 1 e b 64 1 1 f # 18753 union c a 64 1 1 e b 64 1 1 e # 18754 union c a 64 1 1 e b 64 1 1 3 6 7 9 10 11 12 14 19 20 22 23 26 27 28 30 32 34 35 36 37 38 40 41 43 46 47 50 52 56 57 59 62 63 # 18755 union c a 64 1 1 f b 64 1 1 f # 18756 union c a 64 1 1 f b 64 1 1 e # 18757 union c a 64 1 1 f b 64 1 1 f # 18758 union c a 64 1 1 f b 64 1 1 f # 18759 union c a 64 1 1 f b 64 1 1 f # 18760 union c a 64 1 1 f b 64 1 1 0 1 2 3 4 5 11 12 16 20 21 22 23 24 25 27 30 31 33 34 36 37 38 41 42 47 48 49 52 57 63 # 18761 union c a 64 1 1 2 5 7 8 10 11 12 14 15 20 22 23 28 29 36 37 39 42 44 45 51 52 54 58 61 63 b 64 1 1 2 5 7 8 10 11 12 14 15 20 22 23 28 29 36 37 39 42 44 45 51 52 54 58 61 63 # 18762 union c a 64 1 1 2 5 7 8 10 11 12 14 15 20 22 23 28 29 36 37 39 42 44 45 51 52 54 58 61 63 b 64 1 1 e # 18763 union c a 64 1 1 1 4 6 8 9 10 14 15 16 18 19 21 22 23 25 27 28 29 31 32 33 35 39 40 49 50 51 52 53 54 55 56 58 60 63 b 64 1 1 1 4 6 8 9 10 14 15 16 18 19 21 22 23 25 27 28 29 31 32 33 35 39 40 49 50 51 52 53 54 55 56 58 60 63 # 18764 union c a 64 1 1 1 4 6 8 9 10 14 15 16 18 19 21 22 23 25 27 28 29 31 32 33 35 39 40 49 50 51 52 53 54 55 56 58 60 63 b 64 1 1 f # 18765 union c a 64 1 1 0 1 4 5 7 8 9 12 13 14 16 17 20 24 26 27 33 34 36 37 39 40 41 43 45 48 49 50 54 55 57 58 59 63 b 64 1 1 0 1 4 5 7 8 9 12 13 14 16 17 20 24 26 27 33 34 36 37 39 40 41 43 45 48 49 50 54 55 57 58 59 63 # 18766 union c a 64 1 1 0 1 4 5 7 8 9 12 13 14 16 17 20 24 26 27 33 34 36 37 39 40 41 43 45 48 49 50 54 55 57 58 59 63 b 64 1 1 2 3 6 7 8 9 10 12 13 14 15 16 19 20 22 25 27 28 29 32 36 37 39 40 41 43 44 45 46 47 49 50 53 57 61 62 # 18767 union c a 65 0 0 e b 65 0 0 e # 18768 union c a 65 0 0 e b 65 0 0 e # 18769 union c a 65 0 0 e b 65 0 0 e # 18770 union c a 65 0 0 e b 65 0 0 f # 18771 union c a 65 0 0 e b 65 0 0 e # 18772 union c a 65 0 0 e b 65 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 16 18 19 23 24 25 29 30 31 32 33 34 35 36 38 39 41 42 44 46 48 49 52 53 54 55 56 62 # 18773 union c a 65 0 0 f b 65 0 0 f # 18774 union c a 65 0 0 f b 65 0 0 e # 18775 union c a 65 0 0 f b 65 0 0 f # 18776 union c a 65 0 0 f b 65 0 0 f # 18777 union c a 65 0 0 f b 65 0 0 f # 18778 union c a 65 0 0 f b 65 0 0 0 2 5 6 10 11 14 15 16 18 19 21 22 25 26 27 28 29 31 34 36 37 38 40 41 48 51 53 55 56 58 59 61 62 # 18779 union c a 65 0 0 0 1 4 5 9 10 11 12 13 20 24 27 28 29 31 32 35 37 41 44 45 46 53 56 57 59 60 61 62 63 b 65 0 0 0 1 4 5 9 10 11 12 13 20 24 27 28 29 31 32 35 37 41 44 45 46 53 56 57 59 60 61 62 63 # 18780 union c a 65 0 0 0 1 4 5 9 10 11 12 13 20 24 27 28 29 31 32 35 37 41 44 45 46 53 56 57 59 60 61 62 63 b 65 0 0 e # 18781 union c a 65 0 0 0 1 3 4 5 7 9 10 11 15 16 20 21 23 26 27 29 32 33 34 35 36 38 39 40 41 42 44 47 48 51 53 54 57 60 61 62 b 65 0 0 0 1 3 4 5 7 9 10 11 15 16 20 21 23 26 27 29 32 33 34 35 36 38 39 40 41 42 44 47 48 51 53 54 57 60 61 62 # 18782 union c a 65 0 0 0 1 3 4 5 7 9 10 11 15 16 20 21 23 26 27 29 32 33 34 35 36 38 39 40 41 42 44 47 48 51 53 54 57 60 61 62 b 65 0 0 f # 18783 union c a 65 0 0 0 3 4 6 7 10 12 16 17 20 21 22 28 29 30 31 32 33 34 35 37 38 42 43 44 47 49 51 52 53 57 62 b 65 0 0 0 3 4 6 7 10 12 16 17 20 21 22 28 29 30 31 32 33 34 35 37 38 42 43 44 47 49 51 52 53 57 62 # 18784 union c a 65 0 0 0 3 4 6 7 10 12 16 17 20 21 22 28 29 30 31 32 33 34 35 37 38 42 43 44 47 49 51 52 53 57 62 b 65 0 0 0 5 6 7 8 9 10 12 15 16 19 20 21 22 23 29 30 31 40 41 43 45 46 50 52 53 58 64 # 18785 union c a 65 0 0 e b 65 0 0 e # 18786 union c a 65 0 0 e b 65 0 1 e # 18787 union c a 65 0 0 e b 65 0 0 e # 18788 union c a 65 0 0 e b 65 0 1 f # 18789 union c a 65 0 0 e b 65 0 0 e # 18790 union c a 65 0 0 e b 65 0 1 0 1 2 8 10 11 12 13 16 17 19 20 25 26 27 36 37 38 40 43 52 53 54 58 59 60 62 63 64 # 18791 union c a 65 0 0 f b 65 0 0 f # 18792 union c a 65 0 0 f b 65 0 1 e # 18793 union c a 65 0 0 f b 65 0 0 f # 18794 union c a 65 0 0 f b 65 0 1 f # 18795 union c a 65 0 0 f b 65 0 0 f # 18796 union c a 65 0 0 f b 65 0 1 2 7 11 13 15 18 19 23 27 30 31 32 34 36 38 43 44 46 48 49 53 54 56 60 61 62 63 # 18797 union c a 65 0 0 0 6 8 9 12 13 15 16 18 19 22 23 24 25 26 27 28 29 31 36 37 38 39 40 42 48 50 52 53 56 59 62 64 b 65 0 0 0 6 8 9 12 13 15 16 18 19 22 23 24 25 26 27 28 29 31 36 37 38 39 40 42 48 50 52 53 56 59 62 64 # 18798 union c a 65 0 0 0 6 8 9 12 13 15 16 18 19 22 23 24 25 26 27 28 29 31 36 37 38 39 40 42 48 50 52 53 56 59 62 64 b 65 0 1 e # 18799 union c a 65 0 0 0 1 2 3 4 5 6 8 10 11 13 14 15 16 17 19 21 26 27 28 30 31 33 34 37 38 40 45 48 49 52 53 54 55 56 58 59 60 62 63 b 65 0 0 0 1 2 3 4 5 6 8 10 11 13 14 15 16 17 19 21 26 27 28 30 31 33 34 37 38 40 45 48 49 52 53 54 55 56 58 59 60 62 63 # 18800 union c a 65 0 0 0 1 2 3 4 5 6 8 10 11 13 14 15 16 17 19 21 26 27 28 30 31 33 34 37 38 40 45 48 49 52 53 54 55 56 58 59 60 62 63 b 65 0 1 f # 18801 union c a 65 0 0 0 2 3 4 5 6 10 16 18 21 23 24 32 35 37 42 43 44 45 46 49 50 51 52 55 56 57 58 62 64 b 65 0 0 0 2 3 4 5 6 10 16 18 21 23 24 32 35 37 42 43 44 45 46 49 50 51 52 55 56 57 58 62 64 # 18802 union c a 65 0 0 0 2 3 4 5 6 10 16 18 21 23 24 32 35 37 42 43 44 45 46 49 50 51 52 55 56 57 58 62 64 b 65 0 1 1 2 13 14 16 20 21 23 24 25 28 29 31 32 35 36 37 39 40 41 45 49 52 53 55 57 60 64 # 18803 union c a 65 0 0 e b 65 0 0 e # 18804 union c a 65 0 0 e b 65 1 0 e # 18805 union c a 65 0 0 e b 65 0 0 e # 18806 union c a 65 0 0 e b 65 1 0 f # 18807 union c a 65 0 0 e b 65 0 0 e # 18808 union c a 65 0 0 e b 65 1 0 4 7 8 11 12 15 16 17 19 26 27 28 30 32 35 36 37 38 41 46 52 54 56 57 59 61 62 # 18809 union c a 65 0 0 f b 65 0 0 f # 18810 union c a 65 0 0 f b 65 1 0 e # 18811 union c a 65 0 0 f b 65 0 0 f # 18812 union c a 65 0 0 f b 65 1 0 f # 18813 union c a 65 0 0 f b 65 0 0 f # 18814 union c a 65 0 0 f b 65 1 0 2 4 7 8 9 12 13 17 18 19 20 22 26 29 30 31 33 37 39 41 44 45 47 48 50 52 54 56 57 58 60 63 # 18815 union c a 65 0 0 0 6 8 10 12 13 16 17 18 20 24 25 30 31 35 36 40 42 46 47 48 49 51 52 55 60 b 65 0 0 0 6 8 10 12 13 16 17 18 20 24 25 30 31 35 36 40 42 46 47 48 49 51 52 55 60 # 18816 union c a 65 0 0 0 6 8 10 12 13 16 17 18 20 24 25 30 31 35 36 40 42 46 47 48 49 51 52 55 60 b 65 1 0 e # 18817 union c a 65 0 0 0 5 7 8 9 10 11 13 14 17 19 20 22 24 27 28 31 32 33 37 38 41 43 44 48 50 51 52 53 57 61 63 64 b 65 0 0 0 5 7 8 9 10 11 13 14 17 19 20 22 24 27 28 31 32 33 37 38 41 43 44 48 50 51 52 53 57 61 63 64 # 18818 union c a 65 0 0 0 5 7 8 9 10 11 13 14 17 19 20 22 24 27 28 31 32 33 37 38 41 43 44 48 50 51 52 53 57 61 63 64 b 65 1 0 f # 18819 union c a 65 0 0 0 3 8 11 14 15 17 18 22 24 27 28 31 32 33 34 35 37 39 42 43 44 45 46 48 50 52 53 54 60 61 b 65 0 0 0 3 8 11 14 15 17 18 22 24 27 28 31 32 33 34 35 37 39 42 43 44 45 46 48 50 52 53 54 60 61 # 18820 union c a 65 0 0 0 3 8 11 14 15 17 18 22 24 27 28 31 32 33 34 35 37 39 42 43 44 45 46 48 50 52 53 54 60 61 b 65 1 0 2 4 5 8 11 12 13 14 16 19 20 21 24 25 26 27 32 33 34 35 36 38 44 45 46 47 52 53 55 58 59 60 61 63 64 # 18821 union c a 65 0 0 e b 65 0 0 e # 18822 union c a 65 0 0 e b 65 1 1 e # 18823 union c a 65 0 0 e b 65 0 0 e # 18824 union c a 65 0 0 e b 65 1 1 f # 18825 union c a 65 0 0 e b 65 0 0 e # 18826 union c a 65 0 0 e b 65 1 1 0 1 2 4 6 7 10 13 14 17 19 23 26 29 32 33 34 39 40 43 45 48 49 53 55 58 59 # 18827 union c a 65 0 0 f b 65 0 0 f # 18828 union c a 65 0 0 f b 65 1 1 e # 18829 union c a 65 0 0 f b 65 0 0 f # 18830 union c a 65 0 0 f b 65 1 1 f # 18831 union c a 65 0 0 f b 65 0 0 f # 18832 union c a 65 0 0 f b 65 1 1 0 1 7 10 12 15 16 17 19 21 23 24 25 29 33 34 35 37 39 43 44 45 46 47 48 49 50 52 55 57 61 62 63 64 # 18833 union c a 65 0 0 1 2 5 6 7 8 9 10 11 13 16 17 19 20 23 24 25 31 32 36 38 39 40 41 42 46 48 51 52 54 55 57 59 62 64 b 65 0 0 1 2 5 6 7 8 9 10 11 13 16 17 19 20 23 24 25 31 32 36 38 39 40 41 42 46 48 51 52 54 55 57 59 62 64 # 18834 union c a 65 0 0 1 2 5 6 7 8 9 10 11 13 16 17 19 20 23 24 25 31 32 36 38 39 40 41 42 46 48 51 52 54 55 57 59 62 64 b 65 1 1 e # 18835 union c a 65 0 0 2 5 9 10 11 12 13 14 17 19 22 25 26 27 29 30 31 35 37 39 40 41 43 44 48 49 50 52 53 54 56 57 60 62 64 b 65 0 0 2 5 9 10 11 12 13 14 17 19 22 25 26 27 29 30 31 35 37 39 40 41 43 44 48 49 50 52 53 54 56 57 60 62 64 # 18836 union c a 65 0 0 2 5 9 10 11 12 13 14 17 19 22 25 26 27 29 30 31 35 37 39 40 41 43 44 48 49 50 52 53 54 56 57 60 62 64 b 65 1 1 f # 18837 union c a 65 0 0 2 3 5 6 12 13 16 17 19 20 21 23 25 27 28 29 31 32 34 37 38 42 43 47 49 50 52 56 57 59 61 62 b 65 0 0 2 3 5 6 12 13 16 17 19 20 21 23 25 27 28 29 31 32 34 37 38 42 43 47 49 50 52 56 57 59 61 62 # 18838 union c a 65 0 0 2 3 5 6 12 13 16 17 19 20 21 23 25 27 28 29 31 32 34 37 38 42 43 47 49 50 52 56 57 59 61 62 b 65 1 1 0 1 4 5 6 8 9 10 13 14 19 20 21 22 24 26 27 30 31 38 40 41 42 45 47 49 50 54 56 57 63 64 # 18839 union c a 65 0 1 e b 65 0 1 e # 18840 union c a 65 0 1 e b 65 0 0 e # 18841 union c a 65 0 1 e b 65 0 1 e # 18842 union c a 65 0 1 e b 65 0 0 f # 18843 union c a 65 0 1 e b 65 0 1 e # 18844 union c a 65 0 1 e b 65 0 0 0 3 5 6 7 8 11 12 18 19 22 23 24 25 27 29 30 31 33 34 36 37 41 43 47 48 52 55 58 63 # 18845 union c a 65 0 1 f b 65 0 1 f # 18846 union c a 65 0 1 f b 65 0 0 e # 18847 union c a 65 0 1 f b 65 0 1 f # 18848 union c a 65 0 1 f b 65 0 0 f # 18849 union c a 65 0 1 f b 65 0 1 f # 18850 union c a 65 0 1 f b 65 0 0 4 5 6 7 8 9 13 15 17 18 19 20 22 26 27 28 29 32 34 35 37 41 42 43 44 48 50 51 52 53 55 58 61 62 # 18851 union c a 65 0 1 0 1 2 3 5 8 9 10 11 14 15 17 22 23 30 34 35 43 47 49 50 51 53 54 55 56 57 58 61 63 b 65 0 1 0 1 2 3 5 8 9 10 11 14 15 17 22 23 30 34 35 43 47 49 50 51 53 54 55 56 57 58 61 63 # 18852 union c a 65 0 1 0 1 2 3 5 8 9 10 11 14 15 17 22 23 30 34 35 43 47 49 50 51 53 54 55 56 57 58 61 63 b 65 0 0 e # 18853 union c a 65 0 1 1 2 3 5 6 9 10 13 14 16 18 25 26 29 31 32 35 42 45 46 47 52 53 54 56 58 59 62 63 b 65 0 1 1 2 3 5 6 9 10 13 14 16 18 25 26 29 31 32 35 42 45 46 47 52 53 54 56 58 59 62 63 # 18854 union c a 65 0 1 1 2 3 5 6 9 10 13 14 16 18 25 26 29 31 32 35 42 45 46 47 52 53 54 56 58 59 62 63 b 65 0 0 f # 18855 union c a 65 0 1 1 2 3 6 7 11 15 16 17 18 19 23 24 30 35 36 38 39 40 41 42 43 46 47 48 50 52 55 56 57 58 59 60 61 b 65 0 1 1 2 3 6 7 11 15 16 17 18 19 23 24 30 35 36 38 39 40 41 42 43 46 47 48 50 52 55 56 57 58 59 60 61 # 18856 union c a 65 0 1 1 2 3 6 7 11 15 16 17 18 19 23 24 30 35 36 38 39 40 41 42 43 46 47 48 50 52 55 56 57 58 59 60 61 b 65 0 0 0 1 2 3 4 5 6 7 8 9 10 13 15 16 17 18 19 22 23 25 26 31 34 35 37 38 41 42 43 44 45 46 48 49 51 54 55 56 57 58 64 # 18857 union c a 65 0 1 e b 65 0 1 e # 18858 union c a 65 0 1 e b 65 0 1 e # 18859 union c a 65 0 1 e b 65 0 1 e # 18860 union c a 65 0 1 e b 65 0 1 f # 18861 union c a 65 0 1 e b 65 0 1 e # 18862 union c a 65 0 1 e b 65 0 1 3 5 7 8 10 11 16 19 22 26 27 30 31 32 34 35 38 39 40 41 42 44 47 48 49 50 53 54 56 60 61 # 18863 union c a 65 0 1 f b 65 0 1 f # 18864 union c a 65 0 1 f b 65 0 1 e # 18865 union c a 65 0 1 f b 65 0 1 f # 18866 union c a 65 0 1 f b 65 0 1 f # 18867 union c a 65 0 1 f b 65 0 1 f # 18868 union c a 65 0 1 f b 65 0 1 0 6 12 13 15 16 18 23 24 25 27 29 30 35 36 40 42 45 50 51 52 57 60 62 64 # 18869 union c a 65 0 1 2 3 4 5 8 9 10 11 13 16 17 19 21 24 25 29 30 31 33 36 37 40 46 47 49 50 51 52 55 56 57 58 60 61 64 b 65 0 1 2 3 4 5 8 9 10 11 13 16 17 19 21 24 25 29 30 31 33 36 37 40 46 47 49 50 51 52 55 56 57 58 60 61 64 # 18870 union c a 65 0 1 2 3 4 5 8 9 10 11 13 16 17 19 21 24 25 29 30 31 33 36 37 40 46 47 49 50 51 52 55 56 57 58 60 61 64 b 65 0 1 e # 18871 union c a 65 0 1 0 1 3 5 6 9 10 11 12 13 15 16 19 20 22 23 26 28 30 32 37 38 39 40 43 45 47 48 49 50 51 53 58 61 62 b 65 0 1 0 1 3 5 6 9 10 11 12 13 15 16 19 20 22 23 26 28 30 32 37 38 39 40 43 45 47 48 49 50 51 53 58 61 62 # 18872 union c a 65 0 1 0 1 3 5 6 9 10 11 12 13 15 16 19 20 22 23 26 28 30 32 37 38 39 40 43 45 47 48 49 50 51 53 58 61 62 b 65 0 1 f # 18873 union c a 65 0 1 0 1 2 3 6 7 8 9 11 14 20 21 22 24 25 26 28 30 31 32 34 36 37 39 41 42 43 44 46 48 51 57 58 59 62 64 b 65 0 1 0 1 2 3 6 7 8 9 11 14 20 21 22 24 25 26 28 30 31 32 34 36 37 39 41 42 43 44 46 48 51 57 58 59 62 64 # 18874 union c a 65 0 1 0 1 2 3 6 7 8 9 11 14 20 21 22 24 25 26 28 30 31 32 34 36 37 39 41 42 43 44 46 48 51 57 58 59 62 64 b 65 0 1 1 2 5 6 7 8 10 15 16 19 21 26 27 28 29 30 32 33 34 35 36 38 39 40 41 42 47 49 50 51 52 62 63 # 18875 union c a 65 0 1 e b 65 0 1 e # 18876 union c a 65 0 1 e b 65 1 0 e # 18877 union c a 65 0 1 e b 65 0 1 e # 18878 union c a 65 0 1 e b 65 1 0 f # 18879 union c a 65 0 1 e b 65 0 1 e # 18880 union c a 65 0 1 e b 65 1 0 0 1 4 5 7 8 9 14 17 18 22 26 27 29 30 32 35 37 38 41 43 46 48 49 50 53 54 55 59 63 64 # 18881 union c a 65 0 1 f b 65 0 1 f # 18882 union c a 65 0 1 f b 65 1 0 e # 18883 union c a 65 0 1 f b 65 0 1 f # 18884 union c a 65 0 1 f b 65 1 0 f # 18885 union c a 65 0 1 f b 65 0 1 f # 18886 union c a 65 0 1 f b 65 1 0 0 1 2 6 8 9 10 11 12 14 15 18 20 21 22 25 26 27 28 29 31 35 36 40 43 47 48 50 51 53 57 60 61 # 18887 union c a 65 0 1 2 3 4 6 7 8 12 17 18 19 25 26 31 36 39 40 41 43 44 45 48 49 51 53 55 56 58 59 62 63 64 b 65 0 1 2 3 4 6 7 8 12 17 18 19 25 26 31 36 39 40 41 43 44 45 48 49 51 53 55 56 58 59 62 63 64 # 18888 union c a 65 0 1 2 3 4 6 7 8 12 17 18 19 25 26 31 36 39 40 41 43 44 45 48 49 51 53 55 56 58 59 62 63 64 b 65 1 0 e # 18889 union c a 65 0 1 2 5 9 14 16 17 26 27 28 29 30 33 34 35 36 37 38 40 44 49 50 51 61 62 64 b 65 0 1 2 5 9 14 16 17 26 27 28 29 30 33 34 35 36 37 38 40 44 49 50 51 61 62 64 # 18890 union c a 65 0 1 2 5 9 14 16 17 26 27 28 29 30 33 34 35 36 37 38 40 44 49 50 51 61 62 64 b 65 1 0 f # 18891 union c a 65 0 1 5 9 11 13 16 17 19 21 25 26 28 30 34 35 40 47 49 50 51 52 57 63 64 b 65 0 1 5 9 11 13 16 17 19 21 25 26 28 30 34 35 40 47 49 50 51 52 57 63 64 # 18892 union c a 65 0 1 5 9 11 13 16 17 19 21 25 26 28 30 34 35 40 47 49 50 51 52 57 63 64 b 65 1 0 4 5 8 9 14 17 19 20 23 24 25 29 33 34 41 42 45 46 47 48 49 50 51 54 57 58 60 62 # 18893 union c a 65 0 1 e b 65 0 1 e # 18894 union c a 65 0 1 e b 65 1 1 e # 18895 union c a 65 0 1 e b 65 0 1 e # 18896 union c a 65 0 1 e b 65 1 1 f # 18897 union c a 65 0 1 e b 65 0 1 e # 18898 union c a 65 0 1 e b 65 1 1 0 1 2 6 10 12 13 14 15 16 17 21 24 25 28 29 30 31 32 35 36 39 41 44 48 49 50 52 54 55 64 # 18899 union c a 65 0 1 f b 65 0 1 f # 18900 union c a 65 0 1 f b 65 1 1 e # 18901 union c a 65 0 1 f b 65 0 1 f # 18902 union c a 65 0 1 f b 65 1 1 f # 18903 union c a 65 0 1 f b 65 0 1 f # 18904 union c a 65 0 1 f b 65 1 1 0 3 8 9 11 13 14 19 22 23 24 29 30 32 36 37 38 39 40 42 44 45 46 51 52 54 55 58 59 60 61 63 # 18905 union c a 65 0 1 6 7 8 10 11 12 14 17 18 19 21 23 24 26 27 29 31 33 35 36 39 42 45 46 47 49 50 51 53 54 58 59 62 64 b 65 0 1 6 7 8 10 11 12 14 17 18 19 21 23 24 26 27 29 31 33 35 36 39 42 45 46 47 49 50 51 53 54 58 59 62 64 # 18906 union c a 65 0 1 6 7 8 10 11 12 14 17 18 19 21 23 24 26 27 29 31 33 35 36 39 42 45 46 47 49 50 51 53 54 58 59 62 64 b 65 1 1 e # 18907 union c a 65 0 1 0 2 4 5 6 7 8 12 14 15 17 20 27 28 29 30 31 33 35 36 37 38 42 44 45 46 48 51 52 53 54 58 61 63 b 65 0 1 0 2 4 5 6 7 8 12 14 15 17 20 27 28 29 30 31 33 35 36 37 38 42 44 45 46 48 51 52 53 54 58 61 63 # 18908 union c a 65 0 1 0 2 4 5 6 7 8 12 14 15 17 20 27 28 29 30 31 33 35 36 37 38 42 44 45 46 48 51 52 53 54 58 61 63 b 65 1 1 f # 18909 union c a 65 0 1 1 4 5 6 8 9 11 12 14 16 18 19 23 27 28 32 33 34 35 38 42 44 45 46 47 49 50 51 52 53 54 61 b 65 0 1 1 4 5 6 8 9 11 12 14 16 18 19 23 27 28 32 33 34 35 38 42 44 45 46 47 49 50 51 52 53 54 61 # 18910 union c a 65 0 1 1 4 5 6 8 9 11 12 14 16 18 19 23 27 28 32 33 34 35 38 42 44 45 46 47 49 50 51 52 53 54 61 b 65 1 1 2 3 9 11 13 16 17 19 20 23 24 28 29 30 33 34 38 40 45 46 47 48 49 50 53 57 58 60 61 62 64 # 18911 union c a 65 1 0 e b 65 1 0 e # 18912 union c a 65 1 0 e b 65 0 0 e # 18913 union c a 65 1 0 e b 65 1 0 e # 18914 union c a 65 1 0 e b 65 0 0 f # 18915 union c a 65 1 0 e b 65 1 0 e # 18916 union c a 65 1 0 e b 65 0 0 0 1 2 3 4 6 7 8 11 16 17 18 19 21 24 25 28 29 36 39 40 44 45 47 48 50 54 55 59 61 63 64 # 18917 union c a 65 1 0 f b 65 1 0 f # 18918 union c a 65 1 0 f b 65 0 0 e # 18919 union c a 65 1 0 f b 65 1 0 f # 18920 union c a 65 1 0 f b 65 0 0 f # 18921 union c a 65 1 0 f b 65 1 0 f # 18922 union c a 65 1 0 f b 65 0 0 0 1 2 7 8 9 11 14 16 18 21 23 27 28 29 30 31 32 33 37 38 40 43 44 47 48 50 52 56 59 62 64 # 18923 union c a 65 1 0 1 4 8 10 11 12 13 14 15 16 17 18 23 27 29 30 31 33 40 45 47 48 52 54 56 58 59 60 61 62 64 b 65 1 0 1 4 8 10 11 12 13 14 15 16 17 18 23 27 29 30 31 33 40 45 47 48 52 54 56 58 59 60 61 62 64 # 18924 union c a 65 1 0 1 4 8 10 11 12 13 14 15 16 17 18 23 27 29 30 31 33 40 45 47 48 52 54 56 58 59 60 61 62 64 b 65 0 0 e # 18925 union c a 65 1 0 0 1 7 8 9 10 11 13 14 15 17 19 20 21 24 29 34 35 36 37 39 40 43 46 47 52 53 55 57 59 62 63 64 b 65 1 0 0 1 7 8 9 10 11 13 14 15 17 19 20 21 24 29 34 35 36 37 39 40 43 46 47 52 53 55 57 59 62 63 64 # 18926 union c a 65 1 0 0 1 7 8 9 10 11 13 14 15 17 19 20 21 24 29 34 35 36 37 39 40 43 46 47 52 53 55 57 59 62 63 64 b 65 0 0 f # 18927 union c a 65 1 0 0 1 2 3 5 7 13 14 17 22 25 26 27 28 29 30 33 35 36 37 39 41 44 46 50 51 52 53 54 57 62 63 b 65 1 0 0 1 2 3 5 7 13 14 17 22 25 26 27 28 29 30 33 35 36 37 39 41 44 46 50 51 52 53 54 57 62 63 # 18928 union c a 65 1 0 0 1 2 3 5 7 13 14 17 22 25 26 27 28 29 30 33 35 36 37 39 41 44 46 50 51 52 53 54 57 62 63 b 65 0 0 0 1 2 3 5 6 7 10 11 13 14 15 16 17 18 20 21 22 26 28 29 30 31 32 33 34 35 36 37 38 41 42 43 44 45 46 48 50 53 54 55 57 60 61 63 64 # 18929 union c a 65 1 0 e b 65 1 0 e # 18930 union c a 65 1 0 e b 65 0 1 e # 18931 union c a 65 1 0 e b 65 1 0 e # 18932 union c a 65 1 0 e b 65 0 1 f # 18933 union c a 65 1 0 e b 65 1 0 e # 18934 union c a 65 1 0 e b 65 0 1 0 1 3 4 5 6 8 9 11 13 15 16 17 19 20 22 23 26 29 33 38 40 41 42 44 49 55 59 63 # 18935 union c a 65 1 0 f b 65 1 0 f # 18936 union c a 65 1 0 f b 65 0 1 e # 18937 union c a 65 1 0 f b 65 1 0 f # 18938 union c a 65 1 0 f b 65 0 1 f # 18939 union c a 65 1 0 f b 65 1 0 f # 18940 union c a 65 1 0 f b 65 0 1 0 1 2 3 4 5 6 7 8 12 13 14 15 20 21 22 25 26 27 30 33 36 38 39 40 43 46 47 48 49 51 52 57 58 59 61 62 63 64 # 18941 union c a 65 1 0 7 9 11 12 13 15 18 21 22 24 26 27 29 30 31 39 42 46 47 49 51 52 53 55 58 59 62 63 64 b 65 1 0 7 9 11 12 13 15 18 21 22 24 26 27 29 30 31 39 42 46 47 49 51 52 53 55 58 59 62 63 64 # 18942 union c a 65 1 0 7 9 11 12 13 15 18 21 22 24 26 27 29 30 31 39 42 46 47 49 51 52 53 55 58 59 62 63 64 b 65 0 1 e # 18943 union c a 65 1 0 0 6 7 8 14 15 17 18 22 23 25 27 28 29 31 33 35 36 38 39 43 45 46 47 48 51 52 54 57 58 60 62 b 65 1 0 0 6 7 8 14 15 17 18 22 23 25 27 28 29 31 33 35 36 38 39 43 45 46 47 48 51 52 54 57 58 60 62 # 18944 union c a 65 1 0 0 6 7 8 14 15 17 18 22 23 25 27 28 29 31 33 35 36 38 39 43 45 46 47 48 51 52 54 57 58 60 62 b 65 0 1 f # 18945 union c a 65 1 0 1 4 6 7 9 15 16 18 20 22 23 26 27 30 34 35 37 38 39 40 44 45 47 48 51 54 55 56 57 59 64 b 65 1 0 1 4 6 7 9 15 16 18 20 22 23 26 27 30 34 35 37 38 39 40 44 45 47 48 51 54 55 56 57 59 64 # 18946 union c a 65 1 0 1 4 6 7 9 15 16 18 20 22 23 26 27 30 34 35 37 38 39 40 44 45 47 48 51 54 55 56 57 59 64 b 65 0 1 7 8 10 12 13 15 19 22 24 25 26 30 31 32 40 42 43 46 47 48 50 54 60 64 # 18947 union c a 65 1 0 e b 65 1 0 e # 18948 union c a 65 1 0 e b 65 1 0 e # 18949 union c a 65 1 0 e b 65 1 0 e # 18950 union c a 65 1 0 e b 65 1 0 f # 18951 union c a 65 1 0 e b 65 1 0 e # 18952 union c a 65 1 0 e b 65 1 0 1 3 4 6 9 15 16 22 23 24 29 31 32 34 35 36 37 38 40 42 44 45 46 47 51 52 53 55 57 59 60 62 63 64 # 18953 union c a 65 1 0 f b 65 1 0 f # 18954 union c a 65 1 0 f b 65 1 0 e # 18955 union c a 65 1 0 f b 65 1 0 f # 18956 union c a 65 1 0 f b 65 1 0 f # 18957 union c a 65 1 0 f b 65 1 0 f # 18958 union c a 65 1 0 f b 65 1 0 0 2 3 7 8 9 10 11 12 15 16 18 19 20 22 23 24 25 26 32 34 43 44 45 46 49 51 54 55 56 60 62 63 64 # 18959 union c a 65 1 0 0 4 5 10 16 19 22 23 24 26 29 30 31 36 37 43 44 45 46 47 50 51 52 53 55 58 60 61 b 65 1 0 0 4 5 10 16 19 22 23 24 26 29 30 31 36 37 43 44 45 46 47 50 51 52 53 55 58 60 61 # 18960 union c a 65 1 0 0 4 5 10 16 19 22 23 24 26 29 30 31 36 37 43 44 45 46 47 50 51 52 53 55 58 60 61 b 65 1 0 e # 18961 union c a 65 1 0 0 4 6 8 11 15 16 18 19 20 21 22 23 24 26 27 28 30 31 32 35 36 37 39 41 42 43 44 46 47 49 50 52 53 62 b 65 1 0 0 4 6 8 11 15 16 18 19 20 21 22 23 24 26 27 28 30 31 32 35 36 37 39 41 42 43 44 46 47 49 50 52 53 62 # 18962 union c a 65 1 0 0 4 6 8 11 15 16 18 19 20 21 22 23 24 26 27 28 30 31 32 35 36 37 39 41 42 43 44 46 47 49 50 52 53 62 b 65 1 0 f # 18963 union c a 65 1 0 1 5 6 7 8 9 10 11 12 13 15 16 17 20 21 22 25 26 28 29 30 32 39 40 42 43 47 49 52 58 61 64 b 65 1 0 1 5 6 7 8 9 10 11 12 13 15 16 17 20 21 22 25 26 28 29 30 32 39 40 42 43 47 49 52 58 61 64 # 18964 union c a 65 1 0 1 5 6 7 8 9 10 11 12 13 15 16 17 20 21 22 25 26 28 29 30 32 39 40 42 43 47 49 52 58 61 64 b 65 1 0 0 4 7 9 11 14 16 19 20 21 23 28 31 32 35 36 38 39 41 42 43 45 47 48 49 50 51 52 54 56 57 59 61 62 # 18965 union c a 65 1 0 e b 65 1 0 e # 18966 union c a 65 1 0 e b 65 1 1 e # 18967 union c a 65 1 0 e b 65 1 0 e # 18968 union c a 65 1 0 e b 65 1 1 f # 18969 union c a 65 1 0 e b 65 1 0 e # 18970 union c a 65 1 0 e b 65 1 1 0 2 4 5 6 7 8 9 20 23 24 25 27 28 29 30 31 33 36 39 43 44 45 47 48 51 52 53 54 55 56 58 61 63 64 # 18971 union c a 65 1 0 f b 65 1 0 f # 18972 union c a 65 1 0 f b 65 1 1 e # 18973 union c a 65 1 0 f b 65 1 0 f # 18974 union c a 65 1 0 f b 65 1 1 f # 18975 union c a 65 1 0 f b 65 1 0 f # 18976 union c a 65 1 0 f b 65 1 1 1 2 3 6 7 8 9 12 16 19 23 25 27 30 31 36 39 41 45 46 50 51 52 54 55 58 59 61 63 # 18977 union c a 65 1 0 0 5 6 9 11 12 13 15 16 17 18 20 21 22 23 24 28 30 31 33 35 36 41 43 46 49 56 57 58 59 60 62 b 65 1 0 0 5 6 9 11 12 13 15 16 17 18 20 21 22 23 24 28 30 31 33 35 36 41 43 46 49 56 57 58 59 60 62 # 18978 union c a 65 1 0 0 5 6 9 11 12 13 15 16 17 18 20 21 22 23 24 28 30 31 33 35 36 41 43 46 49 56 57 58 59 60 62 b 65 1 1 e # 18979 union c a 65 1 0 4 5 6 8 9 10 12 14 16 18 19 22 24 29 30 34 35 37 42 44 45 46 48 49 52 54 55 56 57 59 60 63 64 b 65 1 0 4 5 6 8 9 10 12 14 16 18 19 22 24 29 30 34 35 37 42 44 45 46 48 49 52 54 55 56 57 59 60 63 64 # 18980 union c a 65 1 0 4 5 6 8 9 10 12 14 16 18 19 22 24 29 30 34 35 37 42 44 45 46 48 49 52 54 55 56 57 59 60 63 64 b 65 1 1 f # 18981 union c a 65 1 0 1 6 7 9 10 11 12 14 16 19 22 24 25 26 29 31 32 33 34 37 40 46 48 52 53 55 56 59 61 62 64 b 65 1 0 1 6 7 9 10 11 12 14 16 19 22 24 25 26 29 31 32 33 34 37 40 46 48 52 53 55 56 59 61 62 64 # 18982 union c a 65 1 0 1 6 7 9 10 11 12 14 16 19 22 24 25 26 29 31 32 33 34 37 40 46 48 52 53 55 56 59 61 62 64 b 65 1 1 0 1 2 7 8 9 12 16 17 19 23 24 27 29 31 32 36 37 38 39 44 45 48 49 51 52 53 54 55 57 60 61 # 18983 union c a 65 1 1 e b 65 1 1 e # 18984 union c a 65 1 1 e b 65 0 0 e # 18985 union c a 65 1 1 e b 65 1 1 e # 18986 union c a 65 1 1 e b 65 0 0 f # 18987 union c a 65 1 1 e b 65 1 1 e # 18988 union c a 65 1 1 e b 65 0 0 0 1 3 4 7 8 10 11 12 14 15 17 18 24 25 27 29 33 40 41 43 46 47 48 50 52 54 55 58 59 60 # 18989 union c a 65 1 1 f b 65 1 1 f # 18990 union c a 65 1 1 f b 65 0 0 e # 18991 union c a 65 1 1 f b 65 1 1 f # 18992 union c a 65 1 1 f b 65 0 0 f # 18993 union c a 65 1 1 f b 65 1 1 f # 18994 union c a 65 1 1 f b 65 0 0 0 1 2 4 7 8 12 13 16 17 20 22 23 25 26 27 36 37 39 40 43 49 50 51 53 54 55 56 57 58 62 63 64 # 18995 union c a 65 1 1 1 2 3 5 6 7 9 11 13 14 16 17 18 19 20 21 22 23 24 28 39 43 47 50 56 57 58 59 62 64 b 65 1 1 1 2 3 5 6 7 9 11 13 14 16 17 18 19 20 21 22 23 24 28 39 43 47 50 56 57 58 59 62 64 # 18996 union c a 65 1 1 1 2 3 5 6 7 9 11 13 14 16 17 18 19 20 21 22 23 24 28 39 43 47 50 56 57 58 59 62 64 b 65 0 0 e # 18997 union c a 65 1 1 1 5 6 7 10 11 12 13 15 16 17 22 25 26 28 31 39 40 42 47 49 51 56 58 59 62 63 64 b 65 1 1 1 5 6 7 10 11 12 13 15 16 17 22 25 26 28 31 39 40 42 47 49 51 56 58 59 62 63 64 # 18998 union c a 65 1 1 1 5 6 7 10 11 12 13 15 16 17 22 25 26 28 31 39 40 42 47 49 51 56 58 59 62 63 64 b 65 0 0 f # 18999 union c a 65 1 1 7 9 10 11 13 15 20 21 23 24 27 28 30 33 34 35 37 38 40 41 43 44 46 47 48 52 53 55 57 58 63 b 65 1 1 7 9 10 11 13 15 20 21 23 24 27 28 30 33 34 35 37 38 40 41 43 44 46 47 48 52 53 55 57 58 63 # 19000 union c a 65 1 1 7 9 10 11 13 15 20 21 23 24 27 28 30 33 34 35 37 38 40 41 43 44 46 47 48 52 53 55 57 58 63 b 65 0 0 1 2 6 9 10 11 12 13 14 20 21 22 23 24 25 26 29 30 31 34 35 36 37 40 43 45 47 51 53 54 56 57 63 64 # 19001 union c a 65 1 1 e b 65 1 1 e # 19002 union c a 65 1 1 e b 65 0 1 e # 19003 union c a 65 1 1 e b 65 1 1 e # 19004 union c a 65 1 1 e b 65 0 1 f # 19005 union c a 65 1 1 e b 65 1 1 e # 19006 union c a 65 1 1 e b 65 0 1 1 5 8 10 11 15 16 19 20 21 22 23 31 33 34 38 41 43 45 46 47 48 50 51 54 56 57 58 62 64 # 19007 union c a 65 1 1 f b 65 1 1 f # 19008 union c a 65 1 1 f b 65 0 1 e # 19009 union c a 65 1 1 f b 65 1 1 f # 19010 union c a 65 1 1 f b 65 0 1 f # 19011 union c a 65 1 1 f b 65 1 1 f # 19012 union c a 65 1 1 f b 65 0 1 0 1 4 5 6 7 9 10 12 13 16 20 21 22 23 24 29 32 33 35 36 40 43 45 46 48 51 54 56 58 59 60 61 63 64 # 19013 union c a 65 1 1 0 3 4 5 6 9 10 11 12 14 16 17 18 20 22 24 25 27 29 30 31 34 36 37 38 40 41 46 47 52 55 57 58 60 64 b 65 1 1 0 3 4 5 6 9 10 11 12 14 16 17 18 20 22 24 25 27 29 30 31 34 36 37 38 40 41 46 47 52 55 57 58 60 64 # 19014 union c a 65 1 1 0 3 4 5 6 9 10 11 12 14 16 17 18 20 22 24 25 27 29 30 31 34 36 37 38 40 41 46 47 52 55 57 58 60 64 b 65 0 1 e # 19015 union c a 65 1 1 1 2 4 5 7 9 10 13 14 15 17 18 22 26 27 28 32 34 35 37 40 42 45 47 48 49 53 55 59 60 61 63 b 65 1 1 1 2 4 5 7 9 10 13 14 15 17 18 22 26 27 28 32 34 35 37 40 42 45 47 48 49 53 55 59 60 61 63 # 19016 union c a 65 1 1 1 2 4 5 7 9 10 13 14 15 17 18 22 26 27 28 32 34 35 37 40 42 45 47 48 49 53 55 59 60 61 63 b 65 0 1 f # 19017 union c a 65 1 1 0 3 4 5 6 8 9 10 11 13 16 17 18 19 23 24 27 32 33 35 36 39 44 45 46 47 48 50 51 52 54 55 58 59 64 b 65 1 1 0 3 4 5 6 8 9 10 11 13 16 17 18 19 23 24 27 32 33 35 36 39 44 45 46 47 48 50 51 52 54 55 58 59 64 # 19018 union c a 65 1 1 0 3 4 5 6 8 9 10 11 13 16 17 18 19 23 24 27 32 33 35 36 39 44 45 46 47 48 50 51 52 54 55 58 59 64 b 65 0 1 0 1 2 8 9 11 12 14 17 19 23 28 31 34 35 36 39 41 42 47 49 51 52 53 56 57 58 59 63 # 19019 union c a 65 1 1 e b 65 1 1 e # 19020 union c a 65 1 1 e b 65 1 0 e # 19021 union c a 65 1 1 e b 65 1 1 e # 19022 union c a 65 1 1 e b 65 1 0 f # 19023 union c a 65 1 1 e b 65 1 1 e # 19024 union c a 65 1 1 e b 65 1 0 3 4 5 8 9 10 15 16 18 19 20 22 24 26 28 30 32 33 35 36 37 39 40 41 42 43 46 48 49 53 54 57 62 # 19025 union c a 65 1 1 f b 65 1 1 f # 19026 union c a 65 1 1 f b 65 1 0 e # 19027 union c a 65 1 1 f b 65 1 1 f # 19028 union c a 65 1 1 f b 65 1 0 f # 19029 union c a 65 1 1 f b 65 1 1 f # 19030 union c a 65 1 1 f b 65 1 0 1 5 8 10 17 20 21 22 26 29 30 31 32 33 36 37 39 40 45 47 49 52 54 55 56 # 19031 union c a 65 1 1 0 1 3 6 8 9 10 13 14 19 20 22 24 26 27 28 31 34 36 38 41 42 43 44 45 49 52 54 55 56 57 58 59 61 62 b 65 1 1 0 1 3 6 8 9 10 13 14 19 20 22 24 26 27 28 31 34 36 38 41 42 43 44 45 49 52 54 55 56 57 58 59 61 62 # 19032 union c a 65 1 1 0 1 3 6 8 9 10 13 14 19 20 22 24 26 27 28 31 34 36 38 41 42 43 44 45 49 52 54 55 56 57 58 59 61 62 b 65 1 0 e # 19033 union c a 65 1 1 0 1 4 5 6 7 8 9 10 11 14 15 16 18 20 21 23 26 30 36 39 40 44 47 48 51 52 53 58 59 60 61 b 65 1 1 0 1 4 5 6 7 8 9 10 11 14 15 16 18 20 21 23 26 30 36 39 40 44 47 48 51 52 53 58 59 60 61 # 19034 union c a 65 1 1 0 1 4 5 6 7 8 9 10 11 14 15 16 18 20 21 23 26 30 36 39 40 44 47 48 51 52 53 58 59 60 61 b 65 1 0 f # 19035 union c a 65 1 1 0 1 3 5 6 7 10 11 13 14 15 18 20 22 25 29 31 32 33 34 36 37 43 45 47 54 55 58 59 62 b 65 1 1 0 1 3 5 6 7 10 11 13 14 15 18 20 22 25 29 31 32 33 34 36 37 43 45 47 54 55 58 59 62 # 19036 union c a 65 1 1 0 1 3 5 6 7 10 11 13 14 15 18 20 22 25 29 31 32 33 34 36 37 43 45 47 54 55 58 59 62 b 65 1 0 0 1 2 3 6 7 9 14 16 18 21 22 23 24 25 29 32 34 36 37 40 41 42 43 45 50 51 53 54 55 56 61 # 19037 union c a 65 1 1 e b 65 1 1 e # 19038 union c a 65 1 1 e b 65 1 1 e # 19039 union c a 65 1 1 e b 65 1 1 e # 19040 union c a 65 1 1 e b 65 1 1 f # 19041 union c a 65 1 1 e b 65 1 1 e # 19042 union c a 65 1 1 e b 65 1 1 1 2 8 10 11 12 14 17 22 23 24 26 28 30 32 33 34 36 37 39 42 43 45 47 49 50 51 53 54 55 57 59 60 63 64 # 19043 union c a 65 1 1 f b 65 1 1 f # 19044 union c a 65 1 1 f b 65 1 1 e # 19045 union c a 65 1 1 f b 65 1 1 f # 19046 union c a 65 1 1 f b 65 1 1 f # 19047 union c a 65 1 1 f b 65 1 1 f # 19048 union c a 65 1 1 f b 65 1 1 0 2 3 4 5 7 8 14 17 20 24 28 31 32 34 37 39 41 43 46 50 52 54 55 56 60 64 # 19049 union c a 65 1 1 0 1 2 3 5 9 10 11 12 16 17 22 23 24 28 29 30 31 32 33 34 36 37 38 40 41 43 44 45 47 48 49 54 56 b 65 1 1 0 1 2 3 5 9 10 11 12 16 17 22 23 24 28 29 30 31 32 33 34 36 37 38 40 41 43 44 45 47 48 49 54 56 # 19050 union c a 65 1 1 0 1 2 3 5 9 10 11 12 16 17 22 23 24 28 29 30 31 32 33 34 36 37 38 40 41 43 44 45 47 48 49 54 56 b 65 1 1 e # 19051 union c a 65 1 1 0 1 3 4 5 6 7 9 10 13 16 18 22 23 24 28 29 30 31 32 34 35 37 38 39 40 46 48 49 52 55 56 57 58 59 60 61 63 64 b 65 1 1 0 1 3 4 5 6 7 9 10 13 16 18 22 23 24 28 29 30 31 32 34 35 37 38 39 40 46 48 49 52 55 56 57 58 59 60 61 63 64 # 19052 union c a 65 1 1 0 1 3 4 5 6 7 9 10 13 16 18 22 23 24 28 29 30 31 32 34 35 37 38 39 40 46 48 49 52 55 56 57 58 59 60 61 63 64 b 65 1 1 f # 19053 union c a 65 1 1 1 3 4 5 6 9 11 12 13 14 19 20 22 23 26 27 28 29 30 32 37 38 40 43 44 45 49 50 51 52 53 54 63 b 65 1 1 1 3 4 5 6 9 11 12 13 14 19 20 22 23 26 27 28 29 30 32 37 38 40 43 44 45 49 50 51 52 53 54 63 # 19054 union c a 65 1 1 1 3 4 5 6 9 11 12 13 14 19 20 22 23 26 27 28 29 30 32 37 38 40 43 44 45 49 50 51 52 53 54 63 b 65 1 1 0 2 3 6 12 13 14 16 17 21 22 23 24 25 30 32 34 35 36 37 41 42 43 44 49 50 51 52 53 54 55 56 57 58 61 63 # 19055 union c a 211 0 0 e b 211 0 0 e # 19056 union c a 211 0 0 e b 211 0 0 e # 19057 union c a 211 0 0 e b 211 0 0 e # 19058 union c a 211 0 0 e b 211 0 0 f # 19059 union c a 211 0 0 e b 211 0 0 e # 19060 union c a 211 0 0 e b 211 0 0 1 2 8 12 13 14 15 16 18 28 34 35 36 39 40 41 43 45 46 50 51 52 53 54 58 60 62 64 65 68 69 71 72 79 80 82 83 85 87 89 94 95 96 99 101 102 103 107 109 110 112 114 118 122 128 129 131 132 134 135 138 139 140 143 144 150 151 155 156 157 159 160 161 162 165 167 168 170 171 172 173 174 175 178 179 181 183 185 186 190 193 194 195 206 208 209 # 19061 union c a 211 0 0 f b 211 0 0 f # 19062 union c a 211 0 0 f b 211 0 0 e # 19063 union c a 211 0 0 f b 211 0 0 f # 19064 union c a 211 0 0 f b 211 0 0 f # 19065 union c a 211 0 0 f b 211 0 0 f # 19066 union c a 211 0 0 f b 211 0 0 1 2 4 8 9 13 14 15 19 20 21 23 24 25 26 28 29 30 31 32 35 36 38 39 47 49 50 52 55 59 61 62 63 66 68 69 71 72 73 76 77 78 80 81 82 83 84 85 89 92 98 100 103 104 105 107 108 111 112 115 117 120 122 124 126 128 131 132 133 134 135 137 138 142 147 152 154 155 156 158 160 163 165 167 168 170 173 175 177 178 179 181 185 186 187 189 193 195 196 197 199 200 202 207 210 # 19067 union c a 211 0 0 3 6 8 9 10 13 15 21 23 25 28 32 33 36 37 38 39 40 41 42 43 46 47 48 51 54 55 57 61 62 64 65 67 68 71 72 74 76 77 79 81 82 83 86 90 91 95 97 98 100 103 104 105 107 108 109 111 112 114 115 116 120 123 124 126 129 130 132 133 135 136 137 139 140 141 142 147 148 149 151 154 155 156 157 161 164 165 167 169 170 172 174 175 176 178 179 182 184 187 189 190 191 192 195 198 199 202 203 204 205 206 207 208 209 210 b 211 0 0 3 6 8 9 10 13 15 21 23 25 28 32 33 36 37 38 39 40 41 42 43 46 47 48 51 54 55 57 61 62 64 65 67 68 71 72 74 76 77 79 81 82 83 86 90 91 95 97 98 100 103 104 105 107 108 109 111 112 114 115 116 120 123 124 126 129 130 132 133 135 136 137 139 140 141 142 147 148 149 151 154 155 156 157 161 164 165 167 169 170 172 174 175 176 178 179 182 184 187 189 190 191 192 195 198 199 202 203 204 205 206 207 208 209 210 # 19068 union c a 211 0 0 3 6 8 9 10 13 15 21 23 25 28 32 33 36 37 38 39 40 41 42 43 46 47 48 51 54 55 57 61 62 64 65 67 68 71 72 74 76 77 79 81 82 83 86 90 91 95 97 98 100 103 104 105 107 108 109 111 112 114 115 116 120 123 124 126 129 130 132 133 135 136 137 139 140 141 142 147 148 149 151 154 155 156 157 161 164 165 167 169 170 172 174 175 176 178 179 182 184 187 189 190 191 192 195 198 199 202 203 204 205 206 207 208 209 210 b 211 0 0 e # 19069 union c a 211 0 0 2 3 4 7 9 10 12 17 21 24 25 27 28 30 34 36 41 43 45 47 48 49 50 57 58 60 61 66 67 68 71 73 74 76 79 82 83 86 87 89 90 92 94 95 96 97 98 99 100 102 104 105 106 107 109 115 116 123 124 126 127 128 129 130 131 137 138 140 142 144 146 147 151 152 153 154 155 156 157 158 159 160 161 162 163 170 172 173 175 178 179 180 181 183 184 186 187 188 189 190 191 192 193 194 195 196 197 203 205 206 207 b 211 0 0 2 3 4 7 9 10 12 17 21 24 25 27 28 30 34 36 41 43 45 47 48 49 50 57 58 60 61 66 67 68 71 73 74 76 79 82 83 86 87 89 90 92 94 95 96 97 98 99 100 102 104 105 106 107 109 115 116 123 124 126 127 128 129 130 131 137 138 140 142 144 146 147 151 152 153 154 155 156 157 158 159 160 161 162 163 170 172 173 175 178 179 180 181 183 184 186 187 188 189 190 191 192 193 194 195 196 197 203 205 206 207 # 19070 union c a 211 0 0 2 3 4 7 9 10 12 17 21 24 25 27 28 30 34 36 41 43 45 47 48 49 50 57 58 60 61 66 67 68 71 73 74 76 79 82 83 86 87 89 90 92 94 95 96 97 98 99 100 102 104 105 106 107 109 115 116 123 124 126 127 128 129 130 131 137 138 140 142 144 146 147 151 152 153 154 155 156 157 158 159 160 161 162 163 170 172 173 175 178 179 180 181 183 184 186 187 188 189 190 191 192 193 194 195 196 197 203 205 206 207 b 211 0 0 f # 19071 union c a 211 0 0 2 7 10 11 14 17 18 19 20 23 24 26 28 30 32 33 34 35 38 40 41 43 47 48 49 51 53 54 55 56 57 59 60 62 63 65 66 67 68 69 71 73 74 75 76 77 79 80 81 82 84 85 87 88 89 91 95 100 101 102 105 108 109 111 112 114 120 121 122 126 128 130 131 133 135 141 142 143 145 147 149 150 153 155 160 161 162 164 166 168 171 172 174 178 179 181 182 183 184 188 189 190 191 192 193 196 198 199 202 204 205 206 209 210 b 211 0 0 2 7 10 11 14 17 18 19 20 23 24 26 28 30 32 33 34 35 38 40 41 43 47 48 49 51 53 54 55 56 57 59 60 62 63 65 66 67 68 69 71 73 74 75 76 77 79 80 81 82 84 85 87 88 89 91 95 100 101 102 105 108 109 111 112 114 120 121 122 126 128 130 131 133 135 141 142 143 145 147 149 150 153 155 160 161 162 164 166 168 171 172 174 178 179 181 182 183 184 188 189 190 191 192 193 196 198 199 202 204 205 206 209 210 # 19072 union c a 211 0 0 2 7 10 11 14 17 18 19 20 23 24 26 28 30 32 33 34 35 38 40 41 43 47 48 49 51 53 54 55 56 57 59 60 62 63 65 66 67 68 69 71 73 74 75 76 77 79 80 81 82 84 85 87 88 89 91 95 100 101 102 105 108 109 111 112 114 120 121 122 126 128 130 131 133 135 141 142 143 145 147 149 150 153 155 160 161 162 164 166 168 171 172 174 178 179 181 182 183 184 188 189 190 191 192 193 196 198 199 202 204 205 206 209 210 b 211 0 0 1 2 4 6 10 13 14 15 16 17 21 23 25 26 27 30 31 33 34 35 37 39 44 45 47 48 49 55 58 59 60 63 66 74 80 82 84 88 92 93 95 100 101 102 105 106 107 109 114 116 118 122 124 128 129 130 131 133 134 135 136 137 139 140 141 144 145 146 147 149 151 152 154 155 156 159 160 161 164 169 171 173 176 177 179 180 182 183 184 185 186 188 189 191 192 193 195 197 201 203 205 208 209 # 19073 union c a 211 0 0 e b 211 0 0 e # 19074 union c a 211 0 0 e b 211 0 1 e # 19075 union c a 211 0 0 e b 211 0 0 e # 19076 union c a 211 0 0 e b 211 0 1 f # 19077 union c a 211 0 0 e b 211 0 0 e # 19078 union c a 211 0 0 e b 211 0 1 2 4 5 6 8 9 10 11 12 15 16 17 18 21 22 26 29 30 31 32 33 34 35 37 40 42 43 44 46 49 50 51 55 56 60 61 62 63 64 65 66 68 71 72 74 76 77 78 79 81 82 83 85 86 89 92 95 98 100 104 106 107 109 110 111 112 114 115 119 121 122 127 132 133 134 135 137 140 144 145 149 150 151 153 155 157 159 160 161 162 163 165 167 169 174 175 179 180 182 189 194 195 196 198 201 202 203 206 207 208 209 210 # 19079 union c a 211 0 0 f b 211 0 0 f # 19080 union c a 211 0 0 f b 211 0 1 e # 19081 union c a 211 0 0 f b 211 0 0 f # 19082 union c a 211 0 0 f b 211 0 1 f # 19083 union c a 211 0 0 f b 211 0 0 f # 19084 union c a 211 0 0 f b 211 0 1 0 2 7 8 11 12 14 15 19 20 22 23 24 27 28 30 31 32 33 34 40 44 48 49 51 57 67 68 69 70 74 78 80 82 87 89 91 92 93 96 97 98 99 101 103 106 107 109 110 112 113 114 119 120 121 122 123 124 127 128 133 136 140 142 143 145 147 148 149 150 151 152 153 154 155 156 159 161 163 164 165 167 168 171 172 174 175 176 178 179 182 185 189 191 192 193 197 203 204 206 207 208 209 210 # 19085 union c a 211 0 0 2 3 5 7 8 9 10 11 12 13 17 19 21 24 25 28 29 33 35 36 39 45 48 49 51 52 55 59 63 68 69 70 74 75 79 82 84 86 88 92 94 96 99 103 104 106 109 111 114 117 118 121 123 128 129 133 139 141 143 144 149 150 151 152 154 156 157 158 159 160 163 165 167 168 169 173 174 178 179 181 182 184 186 187 189 193 195 201 202 203 204 205 208 b 211 0 0 2 3 5 7 8 9 10 11 12 13 17 19 21 24 25 28 29 33 35 36 39 45 48 49 51 52 55 59 63 68 69 70 74 75 79 82 84 86 88 92 94 96 99 103 104 106 109 111 114 117 118 121 123 128 129 133 139 141 143 144 149 150 151 152 154 156 157 158 159 160 163 165 167 168 169 173 174 178 179 181 182 184 186 187 189 193 195 201 202 203 204 205 208 # 19086 union c a 211 0 0 2 3 5 7 8 9 10 11 12 13 17 19 21 24 25 28 29 33 35 36 39 45 48 49 51 52 55 59 63 68 69 70 74 75 79 82 84 86 88 92 94 96 99 103 104 106 109 111 114 117 118 121 123 128 129 133 139 141 143 144 149 150 151 152 154 156 157 158 159 160 163 165 167 168 169 173 174 178 179 181 182 184 186 187 189 193 195 201 202 203 204 205 208 b 211 0 1 e # 19087 union c a 211 0 0 1 4 5 7 9 13 14 15 19 22 27 29 31 32 33 35 39 41 43 44 45 46 51 52 53 54 59 61 62 63 65 66 67 70 71 72 73 74 75 76 78 80 82 85 86 87 89 90 91 92 94 99 100 101 102 103 104 105 107 111 112 115 118 119 123 124 128 137 141 143 144 145 146 149 150 156 157 158 162 163 164 167 168 169 173 176 178 180 181 182 187 188 194 196 199 200 201 202 204 206 207 209 210 b 211 0 0 1 4 5 7 9 13 14 15 19 22 27 29 31 32 33 35 39 41 43 44 45 46 51 52 53 54 59 61 62 63 65 66 67 70 71 72 73 74 75 76 78 80 82 85 86 87 89 90 91 92 94 99 100 101 102 103 104 105 107 111 112 115 118 119 123 124 128 137 141 143 144 145 146 149 150 156 157 158 162 163 164 167 168 169 173 176 178 180 181 182 187 188 194 196 199 200 201 202 204 206 207 209 210 # 19088 union c a 211 0 0 1 4 5 7 9 13 14 15 19 22 27 29 31 32 33 35 39 41 43 44 45 46 51 52 53 54 59 61 62 63 65 66 67 70 71 72 73 74 75 76 78 80 82 85 86 87 89 90 91 92 94 99 100 101 102 103 104 105 107 111 112 115 118 119 123 124 128 137 141 143 144 145 146 149 150 156 157 158 162 163 164 167 168 169 173 176 178 180 181 182 187 188 194 196 199 200 201 202 204 206 207 209 210 b 211 0 1 f # 19089 union c a 211 0 0 2 3 4 5 7 8 12 13 23 24 26 27 28 29 30 35 38 40 41 42 43 44 45 49 51 52 53 54 55 57 58 60 62 63 64 65 66 69 70 72 73 76 77 78 84 91 92 94 95 97 99 100 104 105 106 107 109 110 111 112 115 117 119 121 122 123 124 125 126 128 129 130 134 136 137 138 140 141 143 145 146 147 148 149 152 155 156 157 158 159 160 161 170 171 174 175 181 185 186 188 189 190 191 192 194 199 200 202 207 208 209 210 b 211 0 0 2 3 4 5 7 8 12 13 23 24 26 27 28 29 30 35 38 40 41 42 43 44 45 49 51 52 53 54 55 57 58 60 62 63 64 65 66 69 70 72 73 76 77 78 84 91 92 94 95 97 99 100 104 105 106 107 109 110 111 112 115 117 119 121 122 123 124 125 126 128 129 130 134 136 137 138 140 141 143 145 146 147 148 149 152 155 156 157 158 159 160 161 170 171 174 175 181 185 186 188 189 190 191 192 194 199 200 202 207 208 209 210 # 19090 union c a 211 0 0 2 3 4 5 7 8 12 13 23 24 26 27 28 29 30 35 38 40 41 42 43 44 45 49 51 52 53 54 55 57 58 60 62 63 64 65 66 69 70 72 73 76 77 78 84 91 92 94 95 97 99 100 104 105 106 107 109 110 111 112 115 117 119 121 122 123 124 125 126 128 129 130 134 136 137 138 140 141 143 145 146 147 148 149 152 155 156 157 158 159 160 161 170 171 174 175 181 185 186 188 189 190 191 192 194 199 200 202 207 208 209 210 b 211 0 1 1 3 4 6 8 9 11 12 14 15 16 19 21 23 25 26 27 28 29 30 36 37 38 39 40 41 49 51 52 53 55 56 58 59 61 63 69 70 72 74 76 78 82 83 84 86 87 88 89 92 93 94 98 99 101 102 105 106 107 108 109 112 115 116 118 119 122 124 125 126 130 133 134 136 139 141 142 144 147 149 151 154 157 159 165 166 170 171 173 174 178 179 184 186 192 194 197 199 202 203 205 206 207 208 209 # 19091 union c a 211 0 0 e b 211 0 0 e # 19092 union c a 211 0 0 e b 211 1 0 e # 19093 union c a 211 0 0 e b 211 0 0 e # 19094 union c a 211 0 0 e b 211 1 0 f # 19095 union c a 211 0 0 e b 211 0 0 e # 19096 union c a 211 0 0 e b 211 1 0 2 3 7 8 9 13 15 20 21 22 25 27 28 31 32 34 36 39 40 41 42 47 50 53 54 56 60 61 63 69 74 75 78 79 80 81 83 84 85 89 90 91 92 94 96 97 98 100 102 105 107 108 109 110 111 112 114 118 121 126 129 131 132 136 139 142 144 146 147 148 149 151 152 153 157 160 161 163 165 169 171 173 174 175 177 178 187 189 192 193 194 199 200 201 204 # 19097 union c a 211 0 0 f b 211 0 0 f # 19098 union c a 211 0 0 f b 211 1 0 e # 19099 union c a 211 0 0 f b 211 0 0 f # 19100 union c a 211 0 0 f b 211 1 0 f # 19101 union c a 211 0 0 f b 211 0 0 f # 19102 union c a 211 0 0 f b 211 1 0 0 1 2 3 7 8 11 13 14 15 21 22 24 26 27 29 32 35 37 38 43 47 49 50 51 52 53 56 57 60 61 62 63 65 66 67 68 69 70 71 72 74 78 79 80 81 82 83 84 85 87 88 89 91 92 93 94 95 96 98 99 101 102 104 108 111 117 118 125 129 130 131 132 133 134 135 139 140 141 142 144 146 148 149 152 153 154 156 157 160 162 163 165 169 174 177 178 182 184 185 186 187 188 190 191 192 193 195 196 197 200 201 202 205 206 207 208 # 19103 union c a 211 0 0 1 3 4 5 8 9 14 17 18 19 20 21 22 23 25 26 27 28 31 32 34 35 40 41 42 45 46 47 48 49 50 52 53 56 64 70 74 77 79 80 81 83 84 85 90 91 92 95 96 100 102 104 105 106 107 108 109 110 111 112 114 115 117 119 124 125 129 130 135 138 139 141 142 146 147 150 151 156 157 158 160 164 165 173 174 175 177 178 179 180 182 184 186 187 190 192 194 195 197 199 205 207 208 209 210 b 211 0 0 1 3 4 5 8 9 14 17 18 19 20 21 22 23 25 26 27 28 31 32 34 35 40 41 42 45 46 47 48 49 50 52 53 56 64 70 74 77 79 80 81 83 84 85 90 91 92 95 96 100 102 104 105 106 107 108 109 110 111 112 114 115 117 119 124 125 129 130 135 138 139 141 142 146 147 150 151 156 157 158 160 164 165 173 174 175 177 178 179 180 182 184 186 187 190 192 194 195 197 199 205 207 208 209 210 # 19104 union c a 211 0 0 1 3 4 5 8 9 14 17 18 19 20 21 22 23 25 26 27 28 31 32 34 35 40 41 42 45 46 47 48 49 50 52 53 56 64 70 74 77 79 80 81 83 84 85 90 91 92 95 96 100 102 104 105 106 107 108 109 110 111 112 114 115 117 119 124 125 129 130 135 138 139 141 142 146 147 150 151 156 157 158 160 164 165 173 174 175 177 178 179 180 182 184 186 187 190 192 194 195 197 199 205 207 208 209 210 b 211 1 0 e # 19105 union c a 211 0 0 0 2 6 7 8 10 16 18 19 22 23 24 25 27 28 30 32 33 34 35 37 38 41 42 43 45 49 51 54 55 57 58 59 63 66 68 69 70 72 74 78 79 87 90 92 95 102 104 105 106 108 109 110 114 115 116 119 125 127 129 131 132 135 136 138 139 141 143 145 149 151 153 154 155 156 158 160 163 165 166 169 171 172 173 176 177 179 180 181 182 185 186 188 189 191 192 193 194 197 198 199 205 207 208 209 210 b 211 0 0 0 2 6 7 8 10 16 18 19 22 23 24 25 27 28 30 32 33 34 35 37 38 41 42 43 45 49 51 54 55 57 58 59 63 66 68 69 70 72 74 78 79 87 90 92 95 102 104 105 106 108 109 110 114 115 116 119 125 127 129 131 132 135 136 138 139 141 143 145 149 151 153 154 155 156 158 160 163 165 166 169 171 172 173 176 177 179 180 181 182 185 186 188 189 191 192 193 194 197 198 199 205 207 208 209 210 # 19106 union c a 211 0 0 0 2 6 7 8 10 16 18 19 22 23 24 25 27 28 30 32 33 34 35 37 38 41 42 43 45 49 51 54 55 57 58 59 63 66 68 69 70 72 74 78 79 87 90 92 95 102 104 105 106 108 109 110 114 115 116 119 125 127 129 131 132 135 136 138 139 141 143 145 149 151 153 154 155 156 158 160 163 165 166 169 171 172 173 176 177 179 180 181 182 185 186 188 189 191 192 193 194 197 198 199 205 207 208 209 210 b 211 1 0 f # 19107 union c a 211 0 0 0 1 2 9 10 12 13 19 20 21 23 33 34 37 38 39 40 41 43 44 45 47 49 50 51 52 54 56 60 61 62 64 65 66 68 69 71 72 73 74 76 79 82 84 85 87 89 92 94 98 99 101 102 103 104 108 109 111 117 119 120 121 126 127 128 129 130 131 132 134 136 138 139 142 143 144 145 148 149 152 153 154 157 159 160 161 162 165 166 169 171 173 174 176 178 179 186 187 190 191 193 195 196 203 208 b 211 0 0 0 1 2 9 10 12 13 19 20 21 23 33 34 37 38 39 40 41 43 44 45 47 49 50 51 52 54 56 60 61 62 64 65 66 68 69 71 72 73 74 76 79 82 84 85 87 89 92 94 98 99 101 102 103 104 108 109 111 117 119 120 121 126 127 128 129 130 131 132 134 136 138 139 142 143 144 145 148 149 152 153 154 157 159 160 161 162 165 166 169 171 173 174 176 178 179 186 187 190 191 193 195 196 203 208 # 19108 union c a 211 0 0 0 1 2 9 10 12 13 19 20 21 23 33 34 37 38 39 40 41 43 44 45 47 49 50 51 52 54 56 60 61 62 64 65 66 68 69 71 72 73 74 76 79 82 84 85 87 89 92 94 98 99 101 102 103 104 108 109 111 117 119 120 121 126 127 128 129 130 131 132 134 136 138 139 142 143 144 145 148 149 152 153 154 157 159 160 161 162 165 166 169 171 173 174 176 178 179 186 187 190 191 193 195 196 203 208 b 211 1 0 1 3 5 6 8 9 10 11 13 15 17 19 21 22 26 27 28 30 34 35 37 40 43 44 45 46 48 52 54 57 58 61 62 63 65 66 67 69 70 76 78 79 81 82 85 86 87 89 91 92 93 96 98 101 105 106 108 110 113 114 115 116 117 121 122 124 128 130 131 135 136 138 139 140 141 144 146 147 150 151 153 154 155 160 165 168 171 173 174 177 178 179 181 183 184 186 188 190 191 193 195 196 197 199 200 201 204 # 19109 union c a 211 0 0 e b 211 0 0 e # 19110 union c a 211 0 0 e b 211 1 1 e # 19111 union c a 211 0 0 e b 211 0 0 e # 19112 union c a 211 0 0 e b 211 1 1 f # 19113 union c a 211 0 0 e b 211 0 0 e # 19114 union c a 211 0 0 e b 211 1 1 0 2 3 7 9 10 13 14 18 21 22 23 24 28 29 31 35 37 38 39 40 42 43 45 47 49 50 51 52 53 56 57 58 59 63 65 67 68 70 71 72 73 74 75 77 78 79 80 81 83 85 88 89 93 94 95 96 98 99 100 107 112 113 114 116 118 119 122 124 125 127 129 133 134 135 141 142 144 145 146 147 148 149 150 153 154 156 157 158 160 167 169 171 172 173 175 176 178 179 182 183 185 186 187 188 189 191 193 195 196 198 201 203 204 205 206 207 # 19115 union c a 211 0 0 f b 211 0 0 f # 19116 union c a 211 0 0 f b 211 1 1 e # 19117 union c a 211 0 0 f b 211 0 0 f # 19118 union c a 211 0 0 f b 211 1 1 f # 19119 union c a 211 0 0 f b 211 0 0 f # 19120 union c a 211 0 0 f b 211 1 1 0 1 3 6 8 9 11 14 18 19 20 21 23 24 27 28 29 31 32 33 36 39 40 41 42 45 51 54 56 65 68 69 71 72 73 76 77 78 79 81 82 83 85 88 90 92 93 96 97 99 100 101 102 103 104 105 108 109 111 112 114 117 118 125 126 128 130 131 132 133 134 135 136 141 146 150 151 152 157 158 161 166 170 171 172 174 177 178 179 184 185 186 187 188 191 195 196 198 201 202 204 205 206 208 # 19121 union c a 211 0 0 0 1 2 4 6 7 10 12 17 23 27 29 30 32 33 35 40 42 43 44 48 49 50 52 54 56 58 59 61 64 65 67 69 74 80 82 83 85 91 95 98 102 104 105 106 108 110 111 114 115 123 124 126 128 129 130 134 135 140 141 147 151 152 154 155 156 159 161 165 167 169 170 172 177 178 179 182 184 185 187 190 193 194 195 196 198 201 202 203 204 208 b 211 0 0 0 1 2 4 6 7 10 12 17 23 27 29 30 32 33 35 40 42 43 44 48 49 50 52 54 56 58 59 61 64 65 67 69 74 80 82 83 85 91 95 98 102 104 105 106 108 110 111 114 115 123 124 126 128 129 130 134 135 140 141 147 151 152 154 155 156 159 161 165 167 169 170 172 177 178 179 182 184 185 187 190 193 194 195 196 198 201 202 203 204 208 # 19122 union c a 211 0 0 0 1 2 4 6 7 10 12 17 23 27 29 30 32 33 35 40 42 43 44 48 49 50 52 54 56 58 59 61 64 65 67 69 74 80 82 83 85 91 95 98 102 104 105 106 108 110 111 114 115 123 124 126 128 129 130 134 135 140 141 147 151 152 154 155 156 159 161 165 167 169 170 172 177 178 179 182 184 185 187 190 193 194 195 196 198 201 202 203 204 208 b 211 1 1 e # 19123 union c a 211 0 0 6 7 10 11 12 13 14 15 16 20 22 23 26 27 32 33 34 35 36 37 38 40 41 43 48 49 51 56 59 60 70 74 75 76 78 79 83 84 85 87 90 92 94 96 99 100 103 106 108 109 110 114 118 119 120 121 123 124 125 126 127 130 131 132 133 134 137 139 143 144 146 149 152 153 154 155 156 157 159 162 165 168 169 173 174 176 177 178 180 182 183 185 187 188 189 190 193 196 197 198 199 200 202 205 206 208 209 210 b 211 0 0 6 7 10 11 12 13 14 15 16 20 22 23 26 27 32 33 34 35 36 37 38 40 41 43 48 49 51 56 59 60 70 74 75 76 78 79 83 84 85 87 90 92 94 96 99 100 103 106 108 109 110 114 118 119 120 121 123 124 125 126 127 130 131 132 133 134 137 139 143 144 146 149 152 153 154 155 156 157 159 162 165 168 169 173 174 176 177 178 180 182 183 185 187 188 189 190 193 196 197 198 199 200 202 205 206 208 209 210 # 19124 union c a 211 0 0 6 7 10 11 12 13 14 15 16 20 22 23 26 27 32 33 34 35 36 37 38 40 41 43 48 49 51 56 59 60 70 74 75 76 78 79 83 84 85 87 90 92 94 96 99 100 103 106 108 109 110 114 118 119 120 121 123 124 125 126 127 130 131 132 133 134 137 139 143 144 146 149 152 153 154 155 156 157 159 162 165 168 169 173 174 176 177 178 180 182 183 185 187 188 189 190 193 196 197 198 199 200 202 205 206 208 209 210 b 211 1 1 f # 19125 union c a 211 0 0 0 3 4 7 8 10 13 14 15 16 17 18 20 24 27 30 32 40 41 42 44 50 51 52 56 60 62 66 67 68 74 75 76 77 79 82 83 84 87 88 89 94 95 96 97 98 102 105 108 109 111 114 121 122 123 125 128 130 131 133 135 137 140 144 146 148 154 155 156 159 160 161 162 164 172 173 174 175 176 177 178 179 182 183 184 185 186 187 189 192 195 197 198 199 202 205 206 209 210 b 211 0 0 0 3 4 7 8 10 13 14 15 16 17 18 20 24 27 30 32 40 41 42 44 50 51 52 56 60 62 66 67 68 74 75 76 77 79 82 83 84 87 88 89 94 95 96 97 98 102 105 108 109 111 114 121 122 123 125 128 130 131 133 135 137 140 144 146 148 154 155 156 159 160 161 162 164 172 173 174 175 176 177 178 179 182 183 184 185 186 187 189 192 195 197 198 199 202 205 206 209 210 # 19126 union c a 211 0 0 0 3 4 7 8 10 13 14 15 16 17 18 20 24 27 30 32 40 41 42 44 50 51 52 56 60 62 66 67 68 74 75 76 77 79 82 83 84 87 88 89 94 95 96 97 98 102 105 108 109 111 114 121 122 123 125 128 130 131 133 135 137 140 144 146 148 154 155 156 159 160 161 162 164 172 173 174 175 176 177 178 179 182 183 184 185 186 187 189 192 195 197 198 199 202 205 206 209 210 b 211 1 1 0 2 5 7 11 13 15 17 18 19 22 24 25 27 30 31 32 33 36 37 40 41 47 50 51 52 53 57 59 62 68 69 70 71 75 76 78 80 82 86 87 88 92 97 98 100 101 105 107 109 111 115 120 121 122 123 127 131 133 135 138 139 141 142 143 146 147 148 151 153 154 160 165 166 167 169 171 172 174 175 178 180 181 182 183 184 185 188 189 190 191 194 196 197 200 201 202 204 205 210 # 19127 union c a 211 0 1 e b 211 0 1 e # 19128 union c a 211 0 1 e b 211 0 0 e # 19129 union c a 211 0 1 e b 211 0 1 e # 19130 union c a 211 0 1 e b 211 0 0 f # 19131 union c a 211 0 1 e b 211 0 1 e # 19132 union c a 211 0 1 e b 211 0 0 0 2 3 15 19 20 21 22 24 26 28 31 33 34 35 39 43 44 46 48 51 53 58 61 62 63 64 65 66 68 69 73 78 79 80 82 83 85 87 89 90 91 92 93 94 95 96 99 101 103 104 105 107 110 111 112 113 114 115 116 118 119 121 122 124 128 129 132 137 147 148 149 150 151 152 153 158 162 163 164 167 169 171 173 174 175 178 181 183 187 188 190 192 193 196 197 200 201 202 204 205 206 209 210 # 19133 union c a 211 0 1 f b 211 0 1 f # 19134 union c a 211 0 1 f b 211 0 0 e # 19135 union c a 211 0 1 f b 211 0 1 f # 19136 union c a 211 0 1 f b 211 0 0 f # 19137 union c a 211 0 1 f b 211 0 1 f # 19138 union c a 211 0 1 f b 211 0 0 2 4 6 7 10 11 14 15 17 19 22 23 25 26 27 28 32 34 35 36 37 38 43 44 48 49 52 53 56 57 58 59 64 67 71 72 73 75 76 77 79 80 83 85 86 88 89 90 94 99 101 104 105 106 107 108 110 111 112 116 119 122 123 124 125 128 129 130 132 134 135 137 140 143 145 146 151 152 154 155 156 158 159 161 166 167 168 171 172 173 174 177 178 179 181 186 189 191 192 193 194 196 197 199 201 202 204 205 210 # 19139 union c a 211 0 1 0 3 5 6 7 9 10 11 12 13 14 16 17 18 19 21 22 23 24 27 28 30 31 32 34 37 38 40 41 43 44 51 53 54 55 57 58 61 65 67 68 73 78 79 80 81 82 83 84 86 89 90 91 92 97 99 103 105 106 109 111 112 113 114 115 117 119 120 122 123 127 128 129 130 134 136 137 138 140 147 150 152 153 156 157 158 159 161 163 164 167 171 175 176 177 179 183 184 187 190 191 192 195 197 198 199 200 202 204 208 209 b 211 0 1 0 3 5 6 7 9 10 11 12 13 14 16 17 18 19 21 22 23 24 27 28 30 31 32 34 37 38 40 41 43 44 51 53 54 55 57 58 61 65 67 68 73 78 79 80 81 82 83 84 86 89 90 91 92 97 99 103 105 106 109 111 112 113 114 115 117 119 120 122 123 127 128 129 130 134 136 137 138 140 147 150 152 153 156 157 158 159 161 163 164 167 171 175 176 177 179 183 184 187 190 191 192 195 197 198 199 200 202 204 208 209 # 19140 union c a 211 0 1 0 3 5 6 7 9 10 11 12 13 14 16 17 18 19 21 22 23 24 27 28 30 31 32 34 37 38 40 41 43 44 51 53 54 55 57 58 61 65 67 68 73 78 79 80 81 82 83 84 86 89 90 91 92 97 99 103 105 106 109 111 112 113 114 115 117 119 120 122 123 127 128 129 130 134 136 137 138 140 147 150 152 153 156 157 158 159 161 163 164 167 171 175 176 177 179 183 184 187 190 191 192 195 197 198 199 200 202 204 208 209 b 211 0 0 e # 19141 union c a 211 0 1 1 2 4 7 9 10 12 14 15 16 18 21 23 24 29 30 31 32 34 35 36 38 41 43 46 47 48 53 59 64 68 70 75 77 78 83 84 85 89 90 91 92 95 96 97 99 101 103 107 110 111 114 118 120 121 123 126 129 132 136 137 138 140 141 146 147 148 149 151 154 155 156 158 162 164 165 166 167 168 169 171 172 173 178 179 180 182 184 187 188 190 193 194 196 197 198 204 208 b 211 0 1 1 2 4 7 9 10 12 14 15 16 18 21 23 24 29 30 31 32 34 35 36 38 41 43 46 47 48 53 59 64 68 70 75 77 78 83 84 85 89 90 91 92 95 96 97 99 101 103 107 110 111 114 118 120 121 123 126 129 132 136 137 138 140 141 146 147 148 149 151 154 155 156 158 162 164 165 166 167 168 169 171 172 173 178 179 180 182 184 187 188 190 193 194 196 197 198 204 208 # 19142 union c a 211 0 1 1 2 4 7 9 10 12 14 15 16 18 21 23 24 29 30 31 32 34 35 36 38 41 43 46 47 48 53 59 64 68 70 75 77 78 83 84 85 89 90 91 92 95 96 97 99 101 103 107 110 111 114 118 120 121 123 126 129 132 136 137 138 140 141 146 147 148 149 151 154 155 156 158 162 164 165 166 167 168 169 171 172 173 178 179 180 182 184 187 188 190 193 194 196 197 198 204 208 b 211 0 0 f # 19143 union c a 211 0 1 0 1 2 9 11 13 14 16 17 21 24 25 26 27 28 34 35 36 38 40 46 47 48 52 53 54 55 56 57 58 61 62 65 67 68 71 75 76 77 78 79 81 82 84 85 86 89 90 91 92 93 95 96 98 99 100 102 104 105 106 108 109 112 116 118 121 123 124 126 127 128 129 131 134 135 137 140 141 144 145 146 147 149 151 152 153 154 155 157 158 160 162 163 165 166 167 168 170 171 179 181 182 187 189 190 191 193 194 195 196 197 199 202 203 204 205 206 b 211 0 1 0 1 2 9 11 13 14 16 17 21 24 25 26 27 28 34 35 36 38 40 46 47 48 52 53 54 55 56 57 58 61 62 65 67 68 71 75 76 77 78 79 81 82 84 85 86 89 90 91 92 93 95 96 98 99 100 102 104 105 106 108 109 112 116 118 121 123 124 126 127 128 129 131 134 135 137 140 141 144 145 146 147 149 151 152 153 154 155 157 158 160 162 163 165 166 167 168 170 171 179 181 182 187 189 190 191 193 194 195 196 197 199 202 203 204 205 206 # 19144 union c a 211 0 1 0 1 2 9 11 13 14 16 17 21 24 25 26 27 28 34 35 36 38 40 46 47 48 52 53 54 55 56 57 58 61 62 65 67 68 71 75 76 77 78 79 81 82 84 85 86 89 90 91 92 93 95 96 98 99 100 102 104 105 106 108 109 112 116 118 121 123 124 126 127 128 129 131 134 135 137 140 141 144 145 146 147 149 151 152 153 154 155 157 158 160 162 163 165 166 167 168 170 171 179 181 182 187 189 190 191 193 194 195 196 197 199 202 203 204 205 206 b 211 0 0 1 3 5 6 8 9 11 14 15 17 21 22 24 25 30 31 35 36 39 42 43 44 45 46 47 48 54 57 58 61 63 64 65 66 67 70 71 72 73 76 79 81 83 84 86 89 90 91 93 94 96 97 99 100 102 103 109 111 113 114 117 118 123 125 128 129 131 133 135 137 139 141 142 143 144 150 151 152 153 154 156 159 161 163 164 165 166 167 168 170 176 177 180 182 183 185 186 188 190 194 195 197 198 200 201 205 209 # 19145 union c a 211 0 1 e b 211 0 1 e # 19146 union c a 211 0 1 e b 211 0 1 e # 19147 union c a 211 0 1 e b 211 0 1 e # 19148 union c a 211 0 1 e b 211 0 1 f # 19149 union c a 211 0 1 e b 211 0 1 e # 19150 union c a 211 0 1 e b 211 0 1 7 9 10 12 15 16 18 19 21 24 26 28 29 30 35 37 39 45 48 53 54 56 57 59 60 62 63 66 67 70 71 73 75 76 77 79 82 85 86 90 93 95 97 98 99 101 103 104 105 106 109 111 115 116 117 118 121 122 123 124 125 126 128 129 133 134 137 138 139 140 141 142 145 146 148 149 150 152 154 155 157 161 162 163 165 167 169 170 172 173 176 179 182 184 185 188 189 190 192 199 202 204 206 207 208 # 19151 union c a 211 0 1 f b 211 0 1 f # 19152 union c a 211 0 1 f b 211 0 1 e # 19153 union c a 211 0 1 f b 211 0 1 f # 19154 union c a 211 0 1 f b 211 0 1 f # 19155 union c a 211 0 1 f b 211 0 1 f # 19156 union c a 211 0 1 f b 211 0 1 3 13 14 16 18 19 20 21 22 24 26 27 31 32 33 34 35 40 41 42 43 45 48 51 53 54 57 58 63 64 65 66 70 71 73 74 75 80 83 87 98 99 100 102 105 106 107 111 112 114 116 118 119 123 124 125 130 132 133 134 135 137 138 139 140 141 142 143 145 146 148 149 153 155 156 157 162 163 164 166 169 172 173 174 176 177 179 180 181 185 188 191 192 194 195 196 197 199 200 206 210 # 19157 union c a 211 0 1 1 5 6 7 8 11 12 14 15 17 18 23 24 25 26 28 29 32 34 40 42 43 44 45 51 52 53 54 55 56 57 59 60 62 63 64 65 70 71 72 73 74 75 79 80 81 82 83 84 85 86 88 89 96 98 100 101 103 105 106 107 110 111 112 113 114 115 116 119 123 124 127 128 130 131 134 135 137 138 141 144 146 147 148 152 153 157 167 169 172 173 174 176 177 179 180 181 182 183 187 188 190 192 194 197 198 199 200 203 204 205 207 208 210 b 211 0 1 1 5 6 7 8 11 12 14 15 17 18 23 24 25 26 28 29 32 34 40 42 43 44 45 51 52 53 54 55 56 57 59 60 62 63 64 65 70 71 72 73 74 75 79 80 81 82 83 84 85 86 88 89 96 98 100 101 103 105 106 107 110 111 112 113 114 115 116 119 123 124 127 128 130 131 134 135 137 138 141 144 146 147 148 152 153 157 167 169 172 173 174 176 177 179 180 181 182 183 187 188 190 192 194 197 198 199 200 203 204 205 207 208 210 # 19158 union c a 211 0 1 1 5 6 7 8 11 12 14 15 17 18 23 24 25 26 28 29 32 34 40 42 43 44 45 51 52 53 54 55 56 57 59 60 62 63 64 65 70 71 72 73 74 75 79 80 81 82 83 84 85 86 88 89 96 98 100 101 103 105 106 107 110 111 112 113 114 115 116 119 123 124 127 128 130 131 134 135 137 138 141 144 146 147 148 152 153 157 167 169 172 173 174 176 177 179 180 181 182 183 187 188 190 192 194 197 198 199 200 203 204 205 207 208 210 b 211 0 1 e # 19159 union c a 211 0 1 0 2 4 5 6 8 12 13 14 17 19 20 23 26 28 31 32 33 36 37 38 39 49 53 54 55 56 57 59 62 65 66 68 69 73 76 77 78 80 83 86 89 91 93 95 96 97 99 100 101 103 104 105 107 108 110 112 116 121 123 124 125 126 127 128 130 133 135 136 137 138 141 142 146 148 150 151 152 154 155 156 159 160 163 165 166 167 168 169 174 175 176 178 179 180 181 182 183 184 187 188 189 190 191 193 194 196 197 201 202 203 206 208 209 b 211 0 1 0 2 4 5 6 8 12 13 14 17 19 20 23 26 28 31 32 33 36 37 38 39 49 53 54 55 56 57 59 62 65 66 68 69 73 76 77 78 80 83 86 89 91 93 95 96 97 99 100 101 103 104 105 107 108 110 112 116 121 123 124 125 126 127 128 130 133 135 136 137 138 141 142 146 148 150 151 152 154 155 156 159 160 163 165 166 167 168 169 174 175 176 178 179 180 181 182 183 184 187 188 189 190 191 193 194 196 197 201 202 203 206 208 209 # 19160 union c a 211 0 1 0 2 4 5 6 8 12 13 14 17 19 20 23 26 28 31 32 33 36 37 38 39 49 53 54 55 56 57 59 62 65 66 68 69 73 76 77 78 80 83 86 89 91 93 95 96 97 99 100 101 103 104 105 107 108 110 112 116 121 123 124 125 126 127 128 130 133 135 136 137 138 141 142 146 148 150 151 152 154 155 156 159 160 163 165 166 167 168 169 174 175 176 178 179 180 181 182 183 184 187 188 189 190 191 193 194 196 197 201 202 203 206 208 209 b 211 0 1 f # 19161 union c a 211 0 1 0 2 6 9 14 15 16 17 24 25 26 28 29 34 35 36 37 40 42 44 45 46 47 51 54 57 59 60 61 63 66 69 70 73 74 77 78 79 80 82 84 85 86 87 88 90 95 96 102 103 104 105 106 109 114 115 116 117 118 119 120 121 125 126 128 130 133 134 136 137 138 140 142 144 145 147 153 154 155 157 160 162 165 166 167 168 169 171 173 174 176 178 182 183 187 189 192 193 194 196 197 200 b 211 0 1 0 2 6 9 14 15 16 17 24 25 26 28 29 34 35 36 37 40 42 44 45 46 47 51 54 57 59 60 61 63 66 69 70 73 74 77 78 79 80 82 84 85 86 87 88 90 95 96 102 103 104 105 106 109 114 115 116 117 118 119 120 121 125 126 128 130 133 134 136 137 138 140 142 144 145 147 153 154 155 157 160 162 165 166 167 168 169 171 173 174 176 178 182 183 187 189 192 193 194 196 197 200 # 19162 union c a 211 0 1 0 2 6 9 14 15 16 17 24 25 26 28 29 34 35 36 37 40 42 44 45 46 47 51 54 57 59 60 61 63 66 69 70 73 74 77 78 79 80 82 84 85 86 87 88 90 95 96 102 103 104 105 106 109 114 115 116 117 118 119 120 121 125 126 128 130 133 134 136 137 138 140 142 144 145 147 153 154 155 157 160 162 165 166 167 168 169 171 173 174 176 178 182 183 187 189 192 193 194 196 197 200 b 211 0 1 0 1 3 5 7 8 9 12 14 16 17 21 22 23 25 27 29 32 35 38 46 50 51 53 55 56 57 61 62 65 70 71 75 76 79 82 83 87 88 89 92 93 94 95 96 97 103 105 106 111 112 113 115 117 118 120 122 123 126 130 131 135 145 147 148 150 151 153 155 158 159 161 163 164 165 166 170 171 172 173 174 176 178 181 183 184 185 186 187 188 189 190 198 200 206 209 210 # 19163 union c a 211 0 1 e b 211 0 1 e # 19164 union c a 211 0 1 e b 211 1 0 e # 19165 union c a 211 0 1 e b 211 0 1 e # 19166 union c a 211 0 1 e b 211 1 0 f # 19167 union c a 211 0 1 e b 211 0 1 e # 19168 union c a 211 0 1 e b 211 1 0 0 1 2 3 5 6 8 12 14 16 20 21 25 29 32 36 37 38 39 41 42 45 46 48 51 52 53 56 57 58 59 60 61 66 70 71 73 75 76 79 80 81 82 83 84 86 88 89 91 92 93 95 97 99 102 103 106 107 108 110 112 115 116 119 120 121 123 125 126 127 128 129 142 144 145 153 154 155 157 160 161 163 165 167 168 169 170 173 174 175 176 179 180 181 183 186 187 188 191 193 194 202 204 205 207 209 210 # 19169 union c a 211 0 1 f b 211 0 1 f # 19170 union c a 211 0 1 f b 211 1 0 e # 19171 union c a 211 0 1 f b 211 0 1 f # 19172 union c a 211 0 1 f b 211 1 0 f # 19173 union c a 211 0 1 f b 211 0 1 f # 19174 union c a 211 0 1 f b 211 1 0 0 1 2 3 6 9 11 14 15 16 17 18 23 27 30 32 33 36 41 45 47 48 54 55 56 58 62 66 71 73 76 79 80 81 82 85 86 87 89 91 93 97 98 99 104 105 106 107 111 119 120 121 124 125 126 127 128 130 131 132 135 136 140 141 146 147 148 150 151 152 154 155 156 157 158 159 162 163 164 166 167 168 170 171 174 175 176 177 178 180 183 184 186 187 188 192 195 197 202 204 205 208 209 210 # 19175 union c a 211 0 1 0 3 7 9 11 12 13 14 15 17 21 23 26 27 29 30 31 34 35 36 38 42 44 45 46 48 50 52 54 56 57 59 60 62 64 65 68 69 70 73 76 79 80 82 83 85 88 89 91 95 96 97 99 100 103 104 105 107 109 111 112 114 117 118 120 121 123 125 126 128 132 135 137 141 146 147 149 151 152 153 154 155 156 157 159 164 165 166 170 171 175 178 179 182 183 185 186 188 192 195 198 199 200 201 202 204 208 b 211 0 1 0 3 7 9 11 12 13 14 15 17 21 23 26 27 29 30 31 34 35 36 38 42 44 45 46 48 50 52 54 56 57 59 60 62 64 65 68 69 70 73 76 79 80 82 83 85 88 89 91 95 96 97 99 100 103 104 105 107 109 111 112 114 117 118 120 121 123 125 126 128 132 135 137 141 146 147 149 151 152 153 154 155 156 157 159 164 165 166 170 171 175 178 179 182 183 185 186 188 192 195 198 199 200 201 202 204 208 # 19176 union c a 211 0 1 0 3 7 9 11 12 13 14 15 17 21 23 26 27 29 30 31 34 35 36 38 42 44 45 46 48 50 52 54 56 57 59 60 62 64 65 68 69 70 73 76 79 80 82 83 85 88 89 91 95 96 97 99 100 103 104 105 107 109 111 112 114 117 118 120 121 123 125 126 128 132 135 137 141 146 147 149 151 152 153 154 155 156 157 159 164 165 166 170 171 175 178 179 182 183 185 186 188 192 195 198 199 200 201 202 204 208 b 211 1 0 e # 19177 union c a 211 0 1 0 1 2 3 5 6 7 11 12 13 15 16 17 18 19 20 25 26 27 35 36 38 40 41 43 44 47 51 52 53 56 57 62 64 67 68 69 72 75 76 77 80 81 83 84 86 87 90 91 92 93 96 99 104 107 109 112 114 115 116 117 123 128 129 130 134 136 139 140 143 144 147 149 153 155 157 158 160 161 162 163 165 167 168 170 171 172 174 175 178 179 183 185 188 190 195 197 198 201 204 205 b 211 0 1 0 1 2 3 5 6 7 11 12 13 15 16 17 18 19 20 25 26 27 35 36 38 40 41 43 44 47 51 52 53 56 57 62 64 67 68 69 72 75 76 77 80 81 83 84 86 87 90 91 92 93 96 99 104 107 109 112 114 115 116 117 123 128 129 130 134 136 139 140 143 144 147 149 153 155 157 158 160 161 162 163 165 167 168 170 171 172 174 175 178 179 183 185 188 190 195 197 198 201 204 205 # 19178 union c a 211 0 1 0 1 2 3 5 6 7 11 12 13 15 16 17 18 19 20 25 26 27 35 36 38 40 41 43 44 47 51 52 53 56 57 62 64 67 68 69 72 75 76 77 80 81 83 84 86 87 90 91 92 93 96 99 104 107 109 112 114 115 116 117 123 128 129 130 134 136 139 140 143 144 147 149 153 155 157 158 160 161 162 163 165 167 168 170 171 172 174 175 178 179 183 185 188 190 195 197 198 201 204 205 b 211 1 0 f # 19179 union c a 211 0 1 1 4 6 8 12 13 14 16 17 20 21 24 28 29 30 38 42 44 45 46 47 48 49 51 52 53 54 55 59 63 65 67 68 74 81 82 85 87 89 90 91 93 95 96 97 98 99 100 104 105 106 111 115 117 119 120 122 126 127 128 129 130 131 132 133 135 136 138 140 144 145 146 148 151 152 155 158 160 161 163 164 165 166 167 169 173 174 176 177 178 179 182 183 185 186 187 189 192 193 196 197 200 202 203 205 207 209 210 b 211 0 1 1 4 6 8 12 13 14 16 17 20 21 24 28 29 30 38 42 44 45 46 47 48 49 51 52 53 54 55 59 63 65 67 68 74 81 82 85 87 89 90 91 93 95 96 97 98 99 100 104 105 106 111 115 117 119 120 122 126 127 128 129 130 131 132 133 135 136 138 140 144 145 146 148 151 152 155 158 160 161 163 164 165 166 167 169 173 174 176 177 178 179 182 183 185 186 187 189 192 193 196 197 200 202 203 205 207 209 210 # 19180 union c a 211 0 1 1 4 6 8 12 13 14 16 17 20 21 24 28 29 30 38 42 44 45 46 47 48 49 51 52 53 54 55 59 63 65 67 68 74 81 82 85 87 89 90 91 93 95 96 97 98 99 100 104 105 106 111 115 117 119 120 122 126 127 128 129 130 131 132 133 135 136 138 140 144 145 146 148 151 152 155 158 160 161 163 164 165 166 167 169 173 174 176 177 178 179 182 183 185 186 187 189 192 193 196 197 200 202 203 205 207 209 210 b 211 1 0 0 3 4 6 7 8 9 11 15 19 20 21 22 23 24 27 28 30 31 36 38 40 45 47 48 49 51 54 56 59 63 65 70 74 75 76 78 79 80 82 85 86 90 91 92 94 97 99 102 103 105 106 108 111 112 119 120 123 124 126 132 136 137 138 139 142 144 148 149 150 151 154 156 157 158 159 163 165 168 169 175 176 177 179 180 182 184 185 186 189 191 193 194 195 196 197 200 201 202 # 19181 union c a 211 0 1 e b 211 0 1 e # 19182 union c a 211 0 1 e b 211 1 1 e # 19183 union c a 211 0 1 e b 211 0 1 e # 19184 union c a 211 0 1 e b 211 1 1 f # 19185 union c a 211 0 1 e b 211 0 1 e # 19186 union c a 211 0 1 e b 211 1 1 1 3 5 6 7 9 12 14 15 17 18 19 20 21 24 25 28 29 32 33 34 36 37 41 52 53 54 55 61 62 63 65 71 73 77 78 79 80 83 84 86 90 91 92 93 94 97 98 99 102 103 107 110 118 119 121 122 124 126 129 131 132 134 136 137 138 139 141 143 144 148 154 155 156 157 164 165 166 168 169 173 174 178 179 183 184 185 186 188 189 190 193 194 196 198 199 203 204 # 19187 union c a 211 0 1 f b 211 0 1 f # 19188 union c a 211 0 1 f b 211 1 1 e # 19189 union c a 211 0 1 f b 211 0 1 f # 19190 union c a 211 0 1 f b 211 1 1 f # 19191 union c a 211 0 1 f b 211 0 1 f # 19192 union c a 211 0 1 f b 211 1 1 0 1 3 7 10 12 13 16 17 18 19 20 22 23 26 28 30 31 32 36 37 39 44 45 46 47 49 52 56 58 64 65 66 68 72 73 74 75 76 81 82 85 90 91 92 93 96 98 100 102 108 109 112 117 123 127 128 132 134 136 138 139 140 142 143 146 147 151 152 154 155 156 158 159 160 163 164 169 175 176 180 181 182 185 188 190 191 192 195 197 199 200 203 204 205 206 208 210 # 19193 union c a 211 0 1 0 1 2 6 13 14 15 21 22 26 27 30 36 38 42 43 46 48 49 50 52 56 60 61 62 63 70 71 72 73 74 78 84 85 87 89 92 97 98 99 101 102 105 107 110 111 112 114 115 118 119 123 127 129 130 132 133 134 136 138 139 141 142 145 146 147 149 150 152 156 157 159 160 166 169 171 172 173 176 179 180 183 185 188 189 193 194 195 196 197 205 208 209 b 211 0 1 0 1 2 6 13 14 15 21 22 26 27 30 36 38 42 43 46 48 49 50 52 56 60 61 62 63 70 71 72 73 74 78 84 85 87 89 92 97 98 99 101 102 105 107 110 111 112 114 115 118 119 123 127 129 130 132 133 134 136 138 139 141 142 145 146 147 149 150 152 156 157 159 160 166 169 171 172 173 176 179 180 183 185 188 189 193 194 195 196 197 205 208 209 # 19194 union c a 211 0 1 0 1 2 6 13 14 15 21 22 26 27 30 36 38 42 43 46 48 49 50 52 56 60 61 62 63 70 71 72 73 74 78 84 85 87 89 92 97 98 99 101 102 105 107 110 111 112 114 115 118 119 123 127 129 130 132 133 134 136 138 139 141 142 145 146 147 149 150 152 156 157 159 160 166 169 171 172 173 176 179 180 183 185 188 189 193 194 195 196 197 205 208 209 b 211 1 1 e # 19195 union c a 211 0 1 0 1 2 3 5 7 10 11 12 13 14 15 16 17 21 22 26 29 30 32 37 38 39 41 42 44 45 49 50 51 55 56 60 61 62 63 66 67 69 71 72 75 76 77 80 81 86 88 90 91 93 95 99 101 102 110 113 115 120 122 123 126 127 128 130 133 134 138 139 140 145 147 149 151 154 155 156 157 158 159 160 161 164 166 172 177 181 183 184 187 192 193 195 196 198 200 202 203 204 207 208 209 b 211 0 1 0 1 2 3 5 7 10 11 12 13 14 15 16 17 21 22 26 29 30 32 37 38 39 41 42 44 45 49 50 51 55 56 60 61 62 63 66 67 69 71 72 75 76 77 80 81 86 88 90 91 93 95 99 101 102 110 113 115 120 122 123 126 127 128 130 133 134 138 139 140 145 147 149 151 154 155 156 157 158 159 160 161 164 166 172 177 181 183 184 187 192 193 195 196 198 200 202 203 204 207 208 209 # 19196 union c a 211 0 1 0 1 2 3 5 7 10 11 12 13 14 15 16 17 21 22 26 29 30 32 37 38 39 41 42 44 45 49 50 51 55 56 60 61 62 63 66 67 69 71 72 75 76 77 80 81 86 88 90 91 93 95 99 101 102 110 113 115 120 122 123 126 127 128 130 133 134 138 139 140 145 147 149 151 154 155 156 157 158 159 160 161 164 166 172 177 181 183 184 187 192 193 195 196 198 200 202 203 204 207 208 209 b 211 1 1 f # 19197 union c a 211 0 1 2 6 8 9 10 11 12 15 17 18 19 21 22 24 25 27 28 32 34 36 44 45 48 49 52 53 55 56 57 59 61 63 64 67 68 69 72 73 74 75 76 77 78 80 82 83 86 92 93 95 96 97 98 99 101 102 104 105 108 110 111 113 114 115 116 118 120 122 123 124 126 127 128 130 133 134 138 141 142 143 145 146 149 150 151 152 154 155 156 158 159 160 161 166 167 171 174 175 176 177 181 185 190 194 195 197 198 199 201 202 205 208 b 211 0 1 2 6 8 9 10 11 12 15 17 18 19 21 22 24 25 27 28 32 34 36 44 45 48 49 52 53 55 56 57 59 61 63 64 67 68 69 72 73 74 75 76 77 78 80 82 83 86 92 93 95 96 97 98 99 101 102 104 105 108 110 111 113 114 115 116 118 120 122 123 124 126 127 128 130 133 134 138 141 142 143 145 146 149 150 151 152 154 155 156 158 159 160 161 166 167 171 174 175 176 177 181 185 190 194 195 197 198 199 201 202 205 208 # 19198 union c a 211 0 1 2 6 8 9 10 11 12 15 17 18 19 21 22 24 25 27 28 32 34 36 44 45 48 49 52 53 55 56 57 59 61 63 64 67 68 69 72 73 74 75 76 77 78 80 82 83 86 92 93 95 96 97 98 99 101 102 104 105 108 110 111 113 114 115 116 118 120 122 123 124 126 127 128 130 133 134 138 141 142 143 145 146 149 150 151 152 154 155 156 158 159 160 161 166 167 171 174 175 176 177 181 185 190 194 195 197 198 199 201 202 205 208 b 211 1 1 2 3 4 5 9 11 12 14 15 16 19 20 22 24 25 27 28 29 31 34 36 37 38 40 41 42 43 45 49 51 57 60 61 64 65 66 67 68 71 75 76 77 80 81 86 87 89 91 92 95 97 98 101 103 105 106 108 111 113 115 117 118 120 123 124 125 128 130 133 136 138 140 144 150 156 157 159 160 162 166 167 172 173 175 177 178 179 180 181 184 186 187 190 193 195 196 198 200 202 204 208 210 # 19199 union c a 211 1 0 e b 211 1 0 e # 19200 union c a 211 1 0 e b 211 0 0 e # 19201 union c a 211 1 0 e b 211 1 0 e # 19202 union c a 211 1 0 e b 211 0 0 f # 19203 union c a 211 1 0 e b 211 1 0 e # 19204 union c a 211 1 0 e b 211 0 0 0 1 4 5 7 8 10 12 14 15 17 19 20 21 22 24 25 27 28 29 30 31 32 35 36 37 38 39 44 45 46 48 51 54 55 58 61 63 65 66 71 72 74 75 77 81 83 86 88 89 90 91 92 93 94 95 96 97 102 104 105 108 109 110 112 115 117 120 127 128 129 137 138 141 142 144 145 148 149 150 151 152 153 157 163 164 165 166 167 168 169 173 176 177 178 179 181 182 184 185 186 187 188 189 193 194 196 197 200 202 206 208 209 # 19205 union c a 211 1 0 f b 211 1 0 f # 19206 union c a 211 1 0 f b 211 0 0 e # 19207 union c a 211 1 0 f b 211 1 0 f # 19208 union c a 211 1 0 f b 211 0 0 f # 19209 union c a 211 1 0 f b 211 1 0 f # 19210 union c a 211 1 0 f b 211 0 0 3 6 8 9 16 18 20 24 26 29 30 31 33 34 37 38 43 45 48 49 50 51 55 56 60 61 64 66 68 72 73 76 78 79 81 82 83 84 85 86 87 89 90 92 95 100 101 102 104 106 108 113 114 116 117 118 120 121 123 125 126 127 129 131 132 138 140 143 151 153 154 156 164 165 166 168 169 171 172 173 174 177 179 181 182 184 186 187 188 192 194 198 202 205 207 208 209 # 19211 union c a 211 1 0 0 1 4 5 7 8 9 13 14 15 16 18 20 21 23 25 27 28 31 33 37 41 43 46 48 49 50 51 52 53 54 55 56 58 59 60 65 66 67 70 71 72 74 76 77 78 79 80 81 82 84 87 88 92 93 94 96 98 100 101 103 111 112 115 116 117 121 122 124 125 126 127 129 130 131 132 134 137 138 139 142 146 150 151 153 157 159 160 162 166 167 170 171 172 174 176 177 179 182 183 184 185 188 189 191 192 193 197 199 202 204 205 208 209 b 211 1 0 0 1 4 5 7 8 9 13 14 15 16 18 20 21 23 25 27 28 31 33 37 41 43 46 48 49 50 51 52 53 54 55 56 58 59 60 65 66 67 70 71 72 74 76 77 78 79 80 81 82 84 87 88 92 93 94 96 98 100 101 103 111 112 115 116 117 121 122 124 125 126 127 129 130 131 132 134 137 138 139 142 146 150 151 153 157 159 160 162 166 167 170 171 172 174 176 177 179 182 183 184 185 188 189 191 192 193 197 199 202 204 205 208 209 # 19212 union c a 211 1 0 0 1 4 5 7 8 9 13 14 15 16 18 20 21 23 25 27 28 31 33 37 41 43 46 48 49 50 51 52 53 54 55 56 58 59 60 65 66 67 70 71 72 74 76 77 78 79 80 81 82 84 87 88 92 93 94 96 98 100 101 103 111 112 115 116 117 121 122 124 125 126 127 129 130 131 132 134 137 138 139 142 146 150 151 153 157 159 160 162 166 167 170 171 172 174 176 177 179 182 183 184 185 188 189 191 192 193 197 199 202 204 205 208 209 b 211 0 0 e # 19213 union c a 211 1 0 6 7 10 11 13 15 20 21 23 25 27 28 31 32 33 35 36 37 38 41 43 44 46 48 50 53 55 56 57 58 59 62 64 65 67 68 69 72 76 78 79 80 85 86 88 89 92 93 95 96 97 98 99 100 104 105 106 107 109 113 114 115 117 125 128 132 133 134 136 137 140 141 142 143 145 146 147 149 151 153 155 156 157 161 162 164 165 166 167 168 169 171 172 174 179 182 183 186 187 191 194 197 200 201 205 206 207 209 b 211 1 0 6 7 10 11 13 15 20 21 23 25 27 28 31 32 33 35 36 37 38 41 43 44 46 48 50 53 55 56 57 58 59 62 64 65 67 68 69 72 76 78 79 80 85 86 88 89 92 93 95 96 97 98 99 100 104 105 106 107 109 113 114 115 117 125 128 132 133 134 136 137 140 141 142 143 145 146 147 149 151 153 155 156 157 161 162 164 165 166 167 168 169 171 172 174 179 182 183 186 187 191 194 197 200 201 205 206 207 209 # 19214 union c a 211 1 0 6 7 10 11 13 15 20 21 23 25 27 28 31 32 33 35 36 37 38 41 43 44 46 48 50 53 55 56 57 58 59 62 64 65 67 68 69 72 76 78 79 80 85 86 88 89 92 93 95 96 97 98 99 100 104 105 106 107 109 113 114 115 117 125 128 132 133 134 136 137 140 141 142 143 145 146 147 149 151 153 155 156 157 161 162 164 165 166 167 168 169 171 172 174 179 182 183 186 187 191 194 197 200 201 205 206 207 209 b 211 0 0 f # 19215 union c a 211 1 0 0 3 4 6 7 8 12 13 18 19 20 21 22 25 30 32 33 40 42 43 54 55 59 61 64 65 66 69 70 75 76 77 82 83 84 85 86 87 88 89 90 92 93 94 95 96 99 103 104 106 109 110 117 120 121 122 123 124 126 127 128 130 132 133 138 139 141 143 146 150 156 158 159 160 161 163 164 165 170 172 176 178 182 183 184 186 187 188 189 190 191 192 197 198 199 200 201 203 204 207 208 209 210 b 211 1 0 0 3 4 6 7 8 12 13 18 19 20 21 22 25 30 32 33 40 42 43 54 55 59 61 64 65 66 69 70 75 76 77 82 83 84 85 86 87 88 89 90 92 93 94 95 96 99 103 104 106 109 110 117 120 121 122 123 124 126 127 128 130 132 133 138 139 141 143 146 150 156 158 159 160 161 163 164 165 170 172 176 178 182 183 184 186 187 188 189 190 191 192 197 198 199 200 201 203 204 207 208 209 210 # 19216 union c a 211 1 0 0 3 4 6 7 8 12 13 18 19 20 21 22 25 30 32 33 40 42 43 54 55 59 61 64 65 66 69 70 75 76 77 82 83 84 85 86 87 88 89 90 92 93 94 95 96 99 103 104 106 109 110 117 120 121 122 123 124 126 127 128 130 132 133 138 139 141 143 146 150 156 158 159 160 161 163 164 165 170 172 176 178 182 183 184 186 187 188 189 190 191 192 197 198 199 200 201 203 204 207 208 209 210 b 211 0 0 2 3 5 6 8 9 12 13 14 17 18 20 21 23 24 25 26 28 29 31 34 35 37 39 40 41 43 44 46 49 50 51 52 54 57 58 59 60 62 64 65 67 68 69 70 71 72 74 75 76 77 80 81 85 86 88 89 94 97 100 104 107 108 110 111 115 119 121 123 126 127 131 133 136 137 138 139 141 142 143 145 149 153 155 161 163 165 168 171 174 178 180 182 187 189 191 193 194 195 196 201 203 210 # 19217 union c a 211 1 0 e b 211 1 0 e # 19218 union c a 211 1 0 e b 211 0 1 e # 19219 union c a 211 1 0 e b 211 1 0 e # 19220 union c a 211 1 0 e b 211 0 1 f # 19221 union c a 211 1 0 e b 211 1 0 e # 19222 union c a 211 1 0 e b 211 0 1 1 2 3 7 8 9 11 13 14 16 17 18 21 22 25 27 29 30 31 33 34 35 36 38 39 41 43 44 47 50 51 53 54 56 61 63 64 67 71 73 77 78 80 81 84 86 88 89 90 91 92 93 94 95 99 101 103 104 105 106 108 109 110 111 112 113 114 115 117 119 120 121 122 123 124 125 128 129 130 132 135 141 142 144 145 146 148 156 157 159 160 163 164 165 166 168 169 170 172 173 175 176 180 182 183 184 187 188 189 190 191 196 198 199 205 207 # 19223 union c a 211 1 0 f b 211 1 0 f # 19224 union c a 211 1 0 f b 211 0 1 e # 19225 union c a 211 1 0 f b 211 1 0 f # 19226 union c a 211 1 0 f b 211 0 1 f # 19227 union c a 211 1 0 f b 211 1 0 f # 19228 union c a 211 1 0 f b 211 0 1 0 1 3 4 5 8 9 14 21 22 23 24 26 27 28 31 33 34 36 37 38 40 41 42 45 46 47 49 51 52 55 56 58 60 65 66 67 68 71 75 77 78 79 80 83 84 85 90 94 95 97 98 103 104 106 109 110 115 117 119 120 124 127 129 135 136 137 140 142 143 144 146 148 151 152 153 155 157 158 160 161 162 163 166 170 171 173 174 177 181 185 187 189 192 198 199 201 202 203 204 205 208 209 # 19229 union c a 211 1 0 2 3 4 6 7 8 9 10 12 16 17 25 27 28 31 32 33 34 35 37 40 42 43 44 48 49 50 55 57 59 61 62 63 64 65 66 70 72 74 76 78 79 80 81 82 86 91 94 95 99 100 101 102 105 106 109 110 112 113 118 119 120 122 124 127 128 130 131 133 135 136 139 145 147 150 156 157 159 161 162 163 164 165 166 169 173 174 179 181 182 183 197 198 200 202 204 205 206 208 209 b 211 1 0 2 3 4 6 7 8 9 10 12 16 17 25 27 28 31 32 33 34 35 37 40 42 43 44 48 49 50 55 57 59 61 62 63 64 65 66 70 72 74 76 78 79 80 81 82 86 91 94 95 99 100 101 102 105 106 109 110 112 113 118 119 120 122 124 127 128 130 131 133 135 136 139 145 147 150 156 157 159 161 162 163 164 165 166 169 173 174 179 181 182 183 197 198 200 202 204 205 206 208 209 # 19230 union c a 211 1 0 2 3 4 6 7 8 9 10 12 16 17 25 27 28 31 32 33 34 35 37 40 42 43 44 48 49 50 55 57 59 61 62 63 64 65 66 70 72 74 76 78 79 80 81 82 86 91 94 95 99 100 101 102 105 106 109 110 112 113 118 119 120 122 124 127 128 130 131 133 135 136 139 145 147 150 156 157 159 161 162 163 164 165 166 169 173 174 179 181 182 183 197 198 200 202 204 205 206 208 209 b 211 0 1 e # 19231 union c a 211 1 0 1 5 6 7 8 12 13 14 15 16 17 18 20 21 23 24 26 29 30 31 32 33 36 37 39 41 43 45 46 48 49 50 52 55 56 59 60 61 62 63 64 65 66 67 68 72 73 76 78 80 81 82 83 88 89 91 92 93 95 96 99 100 101 103 104 108 110 111 113 115 117 118 120 122 128 129 131 132 136 137 138 139 140 141 144 145 146 148 149 150 151 153 158 161 162 163 173 176 178 179 181 183 185 187 189 190 192 193 197 198 199 202 203 204 207 208 b 211 1 0 1 5 6 7 8 12 13 14 15 16 17 18 20 21 23 24 26 29 30 31 32 33 36 37 39 41 43 45 46 48 49 50 52 55 56 59 60 61 62 63 64 65 66 67 68 72 73 76 78 80 81 82 83 88 89 91 92 93 95 96 99 100 101 103 104 108 110 111 113 115 117 118 120 122 128 129 131 132 136 137 138 139 140 141 144 145 146 148 149 150 151 153 158 161 162 163 173 176 178 179 181 183 185 187 189 190 192 193 197 198 199 202 203 204 207 208 # 19232 union c a 211 1 0 1 5 6 7 8 12 13 14 15 16 17 18 20 21 23 24 26 29 30 31 32 33 36 37 39 41 43 45 46 48 49 50 52 55 56 59 60 61 62 63 64 65 66 67 68 72 73 76 78 80 81 82 83 88 89 91 92 93 95 96 99 100 101 103 104 108 110 111 113 115 117 118 120 122 128 129 131 132 136 137 138 139 140 141 144 145 146 148 149 150 151 153 158 161 162 163 173 176 178 179 181 183 185 187 189 190 192 193 197 198 199 202 203 204 207 208 b 211 0 1 f # 19233 union c a 211 1 0 2 4 5 8 14 15 16 17 18 19 22 26 27 31 32 34 38 40 42 44 45 47 48 50 52 54 55 56 57 58 59 62 63 64 65 72 74 75 76 78 79 80 81 82 85 87 90 91 92 93 94 95 99 100 101 102 103 104 105 106 107 108 109 110 111 113 115 117 118 119 121 122 127 128 130 133 137 140 141 144 146 149 153 154 155 157 158 161 162 163 165 166 167 168 171 173 174 175 177 180 182 185 187 188 192 193 194 196 197 199 201 202 204 205 207 208 209 b 211 1 0 2 4 5 8 14 15 16 17 18 19 22 26 27 31 32 34 38 40 42 44 45 47 48 50 52 54 55 56 57 58 59 62 63 64 65 72 74 75 76 78 79 80 81 82 85 87 90 91 92 93 94 95 99 100 101 102 103 104 105 106 107 108 109 110 111 113 115 117 118 119 121 122 127 128 130 133 137 140 141 144 146 149 153 154 155 157 158 161 162 163 165 166 167 168 171 173 174 175 177 180 182 185 187 188 192 193 194 196 197 199 201 202 204 205 207 208 209 # 19234 union c a 211 1 0 2 4 5 8 14 15 16 17 18 19 22 26 27 31 32 34 38 40 42 44 45 47 48 50 52 54 55 56 57 58 59 62 63 64 65 72 74 75 76 78 79 80 81 82 85 87 90 91 92 93 94 95 99 100 101 102 103 104 105 106 107 108 109 110 111 113 115 117 118 119 121 122 127 128 130 133 137 140 141 144 146 149 153 154 155 157 158 161 162 163 165 166 167 168 171 173 174 175 177 180 182 185 187 188 192 193 194 196 197 199 201 202 204 205 207 208 209 b 211 0 1 3 4 6 7 8 10 13 15 16 19 22 23 24 27 31 33 38 40 41 43 44 45 46 47 48 49 50 53 57 61 63 64 65 66 67 69 71 72 73 74 75 77 78 80 81 82 83 84 87 91 93 95 98 99 102 104 105 110 113 119 120 121 122 127 128 130 134 138 139 140 141 142 144 148 149 151 154 155 158 161 163 177 178 180 182 184 185 191 192 193 194 198 199 200 201 202 206 207 209 210 # 19235 union c a 211 1 0 e b 211 1 0 e # 19236 union c a 211 1 0 e b 211 1 0 e # 19237 union c a 211 1 0 e b 211 1 0 e # 19238 union c a 211 1 0 e b 211 1 0 f # 19239 union c a 211 1 0 e b 211 1 0 e # 19240 union c a 211 1 0 e b 211 1 0 2 4 5 6 9 10 11 12 13 14 16 17 18 19 20 21 22 23 26 27 28 30 31 32 33 35 36 38 41 45 48 51 53 54 55 58 59 60 61 62 63 64 67 68 70 71 75 77 82 83 85 87 90 92 93 94 95 99 100 102 104 106 107 108 112 114 116 118 120 121 123 127 128 129 130 131 133 136 139 144 147 148 150 155 156 157 159 160 162 164 167 169 170 171 175 177 178 181 182 185 188 189 192 194 195 198 199 200 201 202 207 208 209 210 # 19241 union c a 211 1 0 f b 211 1 0 f # 19242 union c a 211 1 0 f b 211 1 0 e # 19243 union c a 211 1 0 f b 211 1 0 f # 19244 union c a 211 1 0 f b 211 1 0 f # 19245 union c a 211 1 0 f b 211 1 0 f # 19246 union c a 211 1 0 f b 211 1 0 1 2 3 4 5 6 9 11 12 13 14 15 17 18 20 21 24 27 30 31 39 41 42 43 44 46 47 54 56 58 60 61 63 65 69 72 73 79 80 81 83 90 92 93 96 98 99 101 103 104 105 109 111 112 113 114 115 119 121 122 124 126 127 128 130 131 134 138 147 148 154 156 160 161 166 168 169 170 174 175 176 177 178 179 182 183 184 185 189 190 192 194 195 196 197 199 200 204 207 209 210 # 19247 union c a 211 1 0 0 2 3 4 8 9 11 12 13 14 15 16 19 21 24 25 26 27 28 29 31 32 35 36 37 40 41 44 47 48 50 51 55 58 60 62 63 66 70 71 77 84 85 88 91 94 95 96 97 101 103 105 107 109 110 111 116 117 118 119 120 122 124 125 127 128 129 130 132 135 136 137 138 140 141 144 146 147 149 150 152 153 154 155 156 159 160 163 164 165 166 167 168 171 176 186 192 193 195 196 197 199 201 202 203 206 208 b 211 1 0 0 2 3 4 8 9 11 12 13 14 15 16 19 21 24 25 26 27 28 29 31 32 35 36 37 40 41 44 47 48 50 51 55 58 60 62 63 66 70 71 77 84 85 88 91 94 95 96 97 101 103 105 107 109 110 111 116 117 118 119 120 122 124 125 127 128 129 130 132 135 136 137 138 140 141 144 146 147 149 150 152 153 154 155 156 159 160 163 164 165 166 167 168 171 176 186 192 193 195 196 197 199 201 202 203 206 208 # 19248 union c a 211 1 0 0 2 3 4 8 9 11 12 13 14 15 16 19 21 24 25 26 27 28 29 31 32 35 36 37 40 41 44 47 48 50 51 55 58 60 62 63 66 70 71 77 84 85 88 91 94 95 96 97 101 103 105 107 109 110 111 116 117 118 119 120 122 124 125 127 128 129 130 132 135 136 137 138 140 141 144 146 147 149 150 152 153 154 155 156 159 160 163 164 165 166 167 168 171 176 186 192 193 195 196 197 199 201 202 203 206 208 b 211 1 0 e # 19249 union c a 211 1 0 0 2 4 7 8 9 12 13 16 18 20 21 23 24 26 29 30 33 36 37 39 42 46 48 49 50 51 53 54 58 59 62 63 70 71 72 73 74 77 78 83 87 88 90 92 93 95 100 103 107 108 112 113 116 117 119 121 122 123 124 126 127 128 131 133 134 135 136 139 141 145 148 149 152 161 162 163 164 165 166 167 168 170 172 174 178 180 183 185 187 188 189 192 196 199 201 206 209 210 b 211 1 0 0 2 4 7 8 9 12 13 16 18 20 21 23 24 26 29 30 33 36 37 39 42 46 48 49 50 51 53 54 58 59 62 63 70 71 72 73 74 77 78 83 87 88 90 92 93 95 100 103 107 108 112 113 116 117 119 121 122 123 124 126 127 128 131 133 134 135 136 139 141 145 148 149 152 161 162 163 164 165 166 167 168 170 172 174 178 180 183 185 187 188 189 192 196 199 201 206 209 210 # 19250 union c a 211 1 0 0 2 4 7 8 9 12 13 16 18 20 21 23 24 26 29 30 33 36 37 39 42 46 48 49 50 51 53 54 58 59 62 63 70 71 72 73 74 77 78 83 87 88 90 92 93 95 100 103 107 108 112 113 116 117 119 121 122 123 124 126 127 128 131 133 134 135 136 139 141 145 148 149 152 161 162 163 164 165 166 167 168 170 172 174 178 180 183 185 187 188 189 192 196 199 201 206 209 210 b 211 1 0 f # 19251 union c a 211 1 0 4 5 7 8 10 12 14 18 20 21 22 24 25 31 37 38 40 41 42 43 45 50 51 52 55 59 60 61 62 67 68 71 74 75 80 81 83 85 86 87 90 91 92 93 97 98 103 107 108 109 112 113 117 119 122 125 128 130 131 132 133 134 138 139 140 143 144 145 146 148 151 153 155 156 157 159 161 162 163 164 168 171 173 178 180 186 190 193 197 199 200 201 202 206 207 208 209 b 211 1 0 4 5 7 8 10 12 14 18 20 21 22 24 25 31 37 38 40 41 42 43 45 50 51 52 55 59 60 61 62 67 68 71 74 75 80 81 83 85 86 87 90 91 92 93 97 98 103 107 108 109 112 113 117 119 122 125 128 130 131 132 133 134 138 139 140 143 144 145 146 148 151 153 155 156 157 159 161 162 163 164 168 171 173 178 180 186 190 193 197 199 200 201 202 206 207 208 209 # 19252 union c a 211 1 0 4 5 7 8 10 12 14 18 20 21 22 24 25 31 37 38 40 41 42 43 45 50 51 52 55 59 60 61 62 67 68 71 74 75 80 81 83 85 86 87 90 91 92 93 97 98 103 107 108 109 112 113 117 119 122 125 128 130 131 132 133 134 138 139 140 143 144 145 146 148 151 153 155 156 157 159 161 162 163 164 168 171 173 178 180 186 190 193 197 199 200 201 202 206 207 208 209 b 211 1 0 3 5 6 7 9 10 11 16 17 18 19 20 21 25 31 32 33 34 36 38 41 42 43 47 50 52 54 56 60 61 64 66 67 68 69 74 75 78 79 82 84 85 86 87 88 91 93 96 97 99 100 102 104 105 106 109 110 111 113 115 116 117 118 119 121 124 125 126 127 128 129 134 137 139 143 145 146 148 150 151 158 159 163 164 166 168 172 173 177 178 181 183 185 188 192 193 194 195 197 202 205 206 207 208 209 210 # 19253 union c a 211 1 0 e b 211 1 0 e # 19254 union c a 211 1 0 e b 211 1 1 e # 19255 union c a 211 1 0 e b 211 1 0 e # 19256 union c a 211 1 0 e b 211 1 1 f # 19257 union c a 211 1 0 e b 211 1 0 e # 19258 union c a 211 1 0 e b 211 1 1 4 5 6 8 9 10 12 13 16 18 20 22 25 28 29 34 37 40 42 44 45 46 47 49 51 52 58 61 62 63 65 67 69 72 74 75 77 78 85 86 87 89 90 91 92 93 94 97 99 100 101 103 104 105 106 108 109 110 112 114 116 117 122 124 125 128 129 133 136 137 138 140 142 143 144 147 150 151 152 153 154 155 156 161 162 163 169 170 171 174 176 177 178 181 182 184 185 186 187 191 192 197 198 199 200 202 204 207 # 19259 union c a 211 1 0 f b 211 1 0 f # 19260 union c a 211 1 0 f b 211 1 1 e # 19261 union c a 211 1 0 f b 211 1 0 f # 19262 union c a 211 1 0 f b 211 1 1 f # 19263 union c a 211 1 0 f b 211 1 0 f # 19264 union c a 211 1 0 f b 211 1 1 0 8 13 14 15 17 18 19 22 23 28 29 31 33 34 35 36 38 39 40 48 49 58 62 64 65 67 70 71 72 73 75 81 82 83 85 87 89 90 91 93 96 100 101 104 108 109 112 118 119 121 123 124 125 126 127 131 136 137 139 140 141 143 145 151 153 159 160 162 163 164 167 169 170 172 175 180 181 183 185 187 190 191 192 194 195 196 198 199 200 201 203 206 207 208 # 19265 union c a 211 1 0 0 1 3 6 13 17 20 22 24 27 30 31 34 35 36 37 41 42 43 47 48 49 51 58 59 60 61 62 69 72 81 84 86 88 89 91 92 93 97 99 100 101 103 106 107 108 112 114 115 116 119 121 122 123 124 129 130 132 135 136 138 139 141 142 145 149 152 156 157 158 161 162 164 167 169 171 172 177 178 180 182 183 184 187 189 191 192 194 195 196 201 205 206 207 208 209 b 211 1 0 0 1 3 6 13 17 20 22 24 27 30 31 34 35 36 37 41 42 43 47 48 49 51 58 59 60 61 62 69 72 81 84 86 88 89 91 92 93 97 99 100 101 103 106 107 108 112 114 115 116 119 121 122 123 124 129 130 132 135 136 138 139 141 142 145 149 152 156 157 158 161 162 164 167 169 171 172 177 178 180 182 183 184 187 189 191 192 194 195 196 201 205 206 207 208 209 # 19266 union c a 211 1 0 0 1 3 6 13 17 20 22 24 27 30 31 34 35 36 37 41 42 43 47 48 49 51 58 59 60 61 62 69 72 81 84 86 88 89 91 92 93 97 99 100 101 103 106 107 108 112 114 115 116 119 121 122 123 124 129 130 132 135 136 138 139 141 142 145 149 152 156 157 158 161 162 164 167 169 171 172 177 178 180 182 183 184 187 189 191 192 194 195 196 201 205 206 207 208 209 b 211 1 1 e # 19267 union c a 211 1 0 0 5 6 8 9 10 11 14 16 17 18 21 27 28 29 31 37 38 40 42 44 45 47 48 50 51 52 56 57 59 60 63 64 65 68 72 74 79 82 84 86 89 91 93 94 98 100 102 104 106 107 108 110 113 114 118 119 121 122 123 124 125 131 136 140 142 147 148 155 156 157 161 163 164 165 166 167 171 173 175 177 180 181 182 191 193 198 199 200 202 205 206 207 208 b 211 1 0 0 5 6 8 9 10 11 14 16 17 18 21 27 28 29 31 37 38 40 42 44 45 47 48 50 51 52 56 57 59 60 63 64 65 68 72 74 79 82 84 86 89 91 93 94 98 100 102 104 106 107 108 110 113 114 118 119 121 122 123 124 125 131 136 140 142 147 148 155 156 157 161 163 164 165 166 167 171 173 175 177 180 181 182 191 193 198 199 200 202 205 206 207 208 # 19268 union c a 211 1 0 0 5 6 8 9 10 11 14 16 17 18 21 27 28 29 31 37 38 40 42 44 45 47 48 50 51 52 56 57 59 60 63 64 65 68 72 74 79 82 84 86 89 91 93 94 98 100 102 104 106 107 108 110 113 114 118 119 121 122 123 124 125 131 136 140 142 147 148 155 156 157 161 163 164 165 166 167 171 173 175 177 180 181 182 191 193 198 199 200 202 205 206 207 208 b 211 1 1 f # 19269 union c a 211 1 0 0 3 4 5 7 9 11 12 16 17 20 23 24 26 28 30 31 32 33 34 35 36 37 38 39 40 42 43 46 50 52 53 58 60 61 62 63 64 65 68 75 76 81 82 84 85 86 89 91 94 98 99 103 104 105 106 107 108 113 114 116 121 123 125 126 127 129 130 131 132 134 135 136 137 139 140 141 144 147 148 149 150 151 152 154 157 161 165 168 169 171 173 174 176 178 179 181 182 186 190 191 198 199 201 202 203 204 205 206 207 209 b 211 1 0 0 3 4 5 7 9 11 12 16 17 20 23 24 26 28 30 31 32 33 34 35 36 37 38 39 40 42 43 46 50 52 53 58 60 61 62 63 64 65 68 75 76 81 82 84 85 86 89 91 94 98 99 103 104 105 106 107 108 113 114 116 121 123 125 126 127 129 130 131 132 134 135 136 137 139 140 141 144 147 148 149 150 151 152 154 157 161 165 168 169 171 173 174 176 178 179 181 182 186 190 191 198 199 201 202 203 204 205 206 207 209 # 19270 union c a 211 1 0 0 3 4 5 7 9 11 12 16 17 20 23 24 26 28 30 31 32 33 34 35 36 37 38 39 40 42 43 46 50 52 53 58 60 61 62 63 64 65 68 75 76 81 82 84 85 86 89 91 94 98 99 103 104 105 106 107 108 113 114 116 121 123 125 126 127 129 130 131 132 134 135 136 137 139 140 141 144 147 148 149 150 151 152 154 157 161 165 168 169 171 173 174 176 178 179 181 182 186 190 191 198 199 201 202 203 204 205 206 207 209 b 211 1 1 0 1 5 7 8 10 11 12 13 14 18 20 21 22 24 25 28 30 31 34 35 36 39 40 42 45 46 49 50 51 52 53 57 58 61 63 66 73 74 75 76 79 81 82 83 84 90 91 93 94 95 97 98 99 100 102 105 107 110 113 117 119 122 123 125 126 128 129 131 132 136 140 142 146 147 150 151 153 154 155 156 164 167 168 169 170 171 172 173 176 178 181 182 183 185 186 189 190 193 194 198 200 201 203 204 205 207 210 # 19271 union c a 211 1 1 e b 211 1 1 e # 19272 union c a 211 1 1 e b 211 0 0 e # 19273 union c a 211 1 1 e b 211 1 1 e # 19274 union c a 211 1 1 e b 211 0 0 f # 19275 union c a 211 1 1 e b 211 1 1 e # 19276 union c a 211 1 1 e b 211 0 0 0 1 2 3 5 7 8 12 16 22 24 25 26 27 29 30 31 32 33 34 40 41 42 43 46 48 50 53 54 56 59 61 62 64 65 66 68 70 71 72 73 76 79 80 82 84 85 86 87 89 90 91 92 93 95 98 101 105 106 111 116 117 120 121 122 123 124 126 129 130 131 133 135 136 139 141 142 143 144 147 149 152 157 158 159 160 162 168 169 177 179 181 182 184 186 191 192 196 198 199 201 202 203 207 208 209 # 19277 union c a 211 1 1 f b 211 1 1 f # 19278 union c a 211 1 1 f b 211 0 0 e # 19279 union c a 211 1 1 f b 211 1 1 f # 19280 union c a 211 1 1 f b 211 0 0 f # 19281 union c a 211 1 1 f b 211 1 1 f # 19282 union c a 211 1 1 f b 211 0 0 3 5 7 8 9 11 12 13 16 17 19 20 22 23 25 26 28 29 30 35 36 37 38 39 40 42 43 48 50 51 52 53 54 56 57 59 63 71 74 75 76 77 78 79 81 82 84 89 91 95 96 97 101 103 105 107 108 110 114 116 118 121 122 130 131 133 136 137 139 143 144 147 149 150 151 152 153 158 159 160 161 162 164 166 167 170 171 174 177 178 179 180 181 182 183 184 185 194 195 198 199 200 204 # 19283 union c a 211 1 1 2 5 6 7 11 13 14 19 20 21 25 26 27 28 30 32 33 36 41 43 47 49 50 54 55 56 58 59 60 61 64 65 66 67 68 69 72 73 76 77 78 80 81 82 84 85 87 89 90 91 92 96 99 103 105 108 110 111 112 113 114 115 118 119 121 122 123 129 131 133 134 136 137 138 139 147 148 151 154 158 159 161 162 164 166 169 171 173 174 179 181 182 183 184 185 189 191 192 195 196 200 202 205 206 209 b 211 1 1 2 5 6 7 11 13 14 19 20 21 25 26 27 28 30 32 33 36 41 43 47 49 50 54 55 56 58 59 60 61 64 65 66 67 68 69 72 73 76 77 78 80 81 82 84 85 87 89 90 91 92 96 99 103 105 108 110 111 112 113 114 115 118 119 121 122 123 129 131 133 134 136 137 138 139 147 148 151 154 158 159 161 162 164 166 169 171 173 174 179 181 182 183 184 185 189 191 192 195 196 200 202 205 206 209 # 19284 union c a 211 1 1 2 5 6 7 11 13 14 19 20 21 25 26 27 28 30 32 33 36 41 43 47 49 50 54 55 56 58 59 60 61 64 65 66 67 68 69 72 73 76 77 78 80 81 82 84 85 87 89 90 91 92 96 99 103 105 108 110 111 112 113 114 115 118 119 121 122 123 129 131 133 134 136 137 138 139 147 148 151 154 158 159 161 162 164 166 169 171 173 174 179 181 182 183 184 185 189 191 192 195 196 200 202 205 206 209 b 211 0 0 e # 19285 union c a 211 1 1 0 1 4 6 8 9 10 11 12 13 14 16 18 19 22 25 27 31 32 33 35 38 40 41 43 44 49 51 55 58 59 60 62 63 67 75 76 81 82 83 87 88 90 95 96 97 101 102 105 107 109 111 112 114 122 123 124 125 126 128 130 131 132 137 139 140 142 143 144 145 148 149 155 159 162 164 166 169 176 177 179 180 181 185 189 191 192 195 196 197 198 200 202 206 b 211 1 1 0 1 4 6 8 9 10 11 12 13 14 16 18 19 22 25 27 31 32 33 35 38 40 41 43 44 49 51 55 58 59 60 62 63 67 75 76 81 82 83 87 88 90 95 96 97 101 102 105 107 109 111 112 114 122 123 124 125 126 128 130 131 132 137 139 140 142 143 144 145 148 149 155 159 162 164 166 169 176 177 179 180 181 185 189 191 192 195 196 197 198 200 202 206 # 19286 union c a 211 1 1 0 1 4 6 8 9 10 11 12 13 14 16 18 19 22 25 27 31 32 33 35 38 40 41 43 44 49 51 55 58 59 60 62 63 67 75 76 81 82 83 87 88 90 95 96 97 101 102 105 107 109 111 112 114 122 123 124 125 126 128 130 131 132 137 139 140 142 143 144 145 148 149 155 159 162 164 166 169 176 177 179 180 181 185 189 191 192 195 196 197 198 200 202 206 b 211 0 0 f # 19287 union c a 211 1 1 2 3 5 6 7 9 11 12 13 16 21 23 25 27 29 31 32 34 37 41 44 45 46 47 48 52 53 54 56 58 66 67 68 73 74 80 81 82 83 84 85 86 87 89 93 94 95 96 99 100 101 103 107 108 115 116 118 121 122 124 127 128 129 130 131 134 135 137 138 142 143 144 145 146 147 150 153 154 158 160 161 162 164 165 168 170 172 174 175 177 179 183 186 189 190 192 193 194 195 200 201 203 206 207 210 b 211 1 1 2 3 5 6 7 9 11 12 13 16 21 23 25 27 29 31 32 34 37 41 44 45 46 47 48 52 53 54 56 58 66 67 68 73 74 80 81 82 83 84 85 86 87 89 93 94 95 96 99 100 101 103 107 108 115 116 118 121 122 124 127 128 129 130 131 134 135 137 138 142 143 144 145 146 147 150 153 154 158 160 161 162 164 165 168 170 172 174 175 177 179 183 186 189 190 192 193 194 195 200 201 203 206 207 210 # 19288 union c a 211 1 1 2 3 5 6 7 9 11 12 13 16 21 23 25 27 29 31 32 34 37 41 44 45 46 47 48 52 53 54 56 58 66 67 68 73 74 80 81 82 83 84 85 86 87 89 93 94 95 96 99 100 101 103 107 108 115 116 118 121 122 124 127 128 129 130 131 134 135 137 138 142 143 144 145 146 147 150 153 154 158 160 161 162 164 165 168 170 172 174 175 177 179 183 186 189 190 192 193 194 195 200 201 203 206 207 210 b 211 0 0 1 2 4 8 12 13 15 17 18 19 20 21 23 25 28 29 34 37 38 45 46 47 49 52 53 54 58 62 63 65 67 68 71 73 75 79 81 84 86 88 89 90 91 92 93 94 97 101 103 107 108 109 110 111 112 115 117 118 120 121 123 125 127 128 129 134 135 136 138 139 141 142 145 147 148 150 151 152 157 161 163 166 168 169 170 172 173 174 176 178 179 181 185 186 188 190 196 198 199 201 210 # 19289 union c a 211 1 1 e b 211 1 1 e # 19290 union c a 211 1 1 e b 211 0 1 e # 19291 union c a 211 1 1 e b 211 1 1 e # 19292 union c a 211 1 1 e b 211 0 1 f # 19293 union c a 211 1 1 e b 211 1 1 e # 19294 union c a 211 1 1 e b 211 0 1 0 4 9 10 14 15 16 17 19 22 24 26 27 28 30 31 32 35 36 37 38 40 41 42 43 46 50 51 53 59 60 62 63 64 65 67 68 70 73 75 78 79 81 83 84 85 88 91 92 93 96 97 99 103 104 105 106 108 109 110 112 115 117 118 122 123 129 130 131 132 134 135 136 137 139 144 145 146 147 148 149 151 154 156 158 161 164 167 168 170 172 174 177 180 181 183 184 187 188 190 191 192 195 198 200 201 202 203 205 207 209 # 19295 union c a 211 1 1 f b 211 1 1 f # 19296 union c a 211 1 1 f b 211 0 1 e # 19297 union c a 211 1 1 f b 211 1 1 f # 19298 union c a 211 1 1 f b 211 0 1 f # 19299 union c a 211 1 1 f b 211 1 1 f # 19300 union c a 211 1 1 f b 211 0 1 5 6 9 12 14 15 16 18 21 23 28 29 30 31 35 36 37 40 42 43 44 45 46 47 48 49 52 53 58 59 61 62 63 64 66 67 72 75 78 85 86 89 91 94 96 97 99 100 101 103 107 108 110 111 115 117 120 121 125 126 127 128 130 131 135 136 137 143 144 145 148 149 150 153 154 155 156 158 159 160 161 163 164 165 166 167 168 172 173 174 175 178 181 182 183 184 187 188 191 192 193 194 195 196 198 199 200 201 204 208 # 19301 union c a 211 1 1 0 1 3 4 5 8 10 13 16 17 19 23 24 30 33 34 36 38 40 41 42 44 46 47 48 49 50 53 57 59 62 63 65 66 67 69 71 76 77 78 79 80 81 84 85 89 90 91 93 96 101 103 106 109 110 112 114 116 118 121 124 125 126 127 130 135 136 142 143 148 150 151 152 155 156 160 162 164 165 169 170 172 176 177 178 179 181 182 186 188 191 192 195 197 201 202 206 209 b 211 1 1 0 1 3 4 5 8 10 13 16 17 19 23 24 30 33 34 36 38 40 41 42 44 46 47 48 49 50 53 57 59 62 63 65 66 67 69 71 76 77 78 79 80 81 84 85 89 90 91 93 96 101 103 106 109 110 112 114 116 118 121 124 125 126 127 130 135 136 142 143 148 150 151 152 155 156 160 162 164 165 169 170 172 176 177 178 179 181 182 186 188 191 192 195 197 201 202 206 209 # 19302 union c a 211 1 1 0 1 3 4 5 8 10 13 16 17 19 23 24 30 33 34 36 38 40 41 42 44 46 47 48 49 50 53 57 59 62 63 65 66 67 69 71 76 77 78 79 80 81 84 85 89 90 91 93 96 101 103 106 109 110 112 114 116 118 121 124 125 126 127 130 135 136 142 143 148 150 151 152 155 156 160 162 164 165 169 170 172 176 177 178 179 181 182 186 188 191 192 195 197 201 202 206 209 b 211 0 1 e # 19303 union c a 211 1 1 0 1 2 3 6 8 10 11 14 17 19 22 23 24 26 28 29 30 31 32 33 34 35 36 37 39 42 43 44 45 46 51 52 55 56 59 60 63 64 66 67 68 70 72 73 74 77 78 79 81 82 87 89 90 97 102 103 104 105 108 114 119 125 126 127 128 129 131 134 136 138 139 140 142 143 145 147 148 149 150 154 155 158 159 162 163 165 166 169 172 176 177 179 180 183 184 185 186 191 192 194 197 198 199 201 202 206 208 b 211 1 1 0 1 2 3 6 8 10 11 14 17 19 22 23 24 26 28 29 30 31 32 33 34 35 36 37 39 42 43 44 45 46 51 52 55 56 59 60 63 64 66 67 68 70 72 73 74 77 78 79 81 82 87 89 90 97 102 103 104 105 108 114 119 125 126 127 128 129 131 134 136 138 139 140 142 143 145 147 148 149 150 154 155 158 159 162 163 165 166 169 172 176 177 179 180 183 184 185 186 191 192 194 197 198 199 201 202 206 208 # 19304 union c a 211 1 1 0 1 2 3 6 8 10 11 14 17 19 22 23 24 26 28 29 30 31 32 33 34 35 36 37 39 42 43 44 45 46 51 52 55 56 59 60 63 64 66 67 68 70 72 73 74 77 78 79 81 82 87 89 90 97 102 103 104 105 108 114 119 125 126 127 128 129 131 134 136 138 139 140 142 143 145 147 148 149 150 154 155 158 159 162 163 165 166 169 172 176 177 179 180 183 184 185 186 191 192 194 197 198 199 201 202 206 208 b 211 0 1 f # 19305 union c a 211 1 1 0 1 3 4 8 9 11 12 13 14 15 16 18 19 20 21 22 24 25 28 29 31 32 33 35 37 40 41 43 46 48 51 53 56 57 59 60 61 62 63 64 66 69 70 72 74 76 77 78 81 84 86 87 90 91 93 94 96 98 101 107 113 114 117 120 124 127 128 132 133 137 141 142 145 146 147 148 149 151 153 154 156 159 160 162 163 166 170 171 172 173 176 177 179 180 188 189 190 191 193 198 199 200 201 202 203 204 205 207 208 210 b 211 1 1 0 1 3 4 8 9 11 12 13 14 15 16 18 19 20 21 22 24 25 28 29 31 32 33 35 37 40 41 43 46 48 51 53 56 57 59 60 61 62 63 64 66 69 70 72 74 76 77 78 81 84 86 87 90 91 93 94 96 98 101 107 113 114 117 120 124 127 128 132 133 137 141 142 145 146 147 148 149 151 153 154 156 159 160 162 163 166 170 171 172 173 176 177 179 180 188 189 190 191 193 198 199 200 201 202 203 204 205 207 208 210 # 19306 union c a 211 1 1 0 1 3 4 8 9 11 12 13 14 15 16 18 19 20 21 22 24 25 28 29 31 32 33 35 37 40 41 43 46 48 51 53 56 57 59 60 61 62 63 64 66 69 70 72 74 76 77 78 81 84 86 87 90 91 93 94 96 98 101 107 113 114 117 120 124 127 128 132 133 137 141 142 145 146 147 148 149 151 153 154 156 159 160 162 163 166 170 171 172 173 176 177 179 180 188 189 190 191 193 198 199 200 201 202 203 204 205 207 208 210 b 211 0 1 0 1 5 6 8 12 14 16 19 22 23 25 28 29 30 31 32 34 35 36 37 39 41 43 48 51 52 54 55 56 59 60 63 66 75 76 77 81 83 84 86 87 88 90 91 95 96 99 101 103 105 107 108 109 111 113 114 117 122 123 126 128 132 133 134 136 141 143 144 149 151 152 156 158 159 161 162 164 165 166 169 170 171 172 176 177 178 184 185 186 187 188 189 192 194 197 198 199 200 201 202 206 208 209 210 # 19307 union c a 211 1 1 e b 211 1 1 e # 19308 union c a 211 1 1 e b 211 1 0 e # 19309 union c a 211 1 1 e b 211 1 1 e # 19310 union c a 211 1 1 e b 211 1 0 f # 19311 union c a 211 1 1 e b 211 1 1 e # 19312 union c a 211 1 1 e b 211 1 0 1 3 4 5 6 8 9 10 15 16 18 19 20 21 22 25 27 28 30 35 42 43 44 46 47 49 50 52 53 54 56 59 60 63 65 66 67 70 72 73 75 76 77 78 80 81 82 84 85 86 89 95 100 102 103 106 109 110 111 112 113 116 118 124 125 127 128 129 131 136 138 139 140 142 143 147 148 151 153 157 161 163 165 167 168 169 170 171 173 174 175 177 178 181 183 184 185 186 190 191 192 193 194 196 197 199 200 202 207 209 210 # 19313 union c a 211 1 1 f b 211 1 1 f # 19314 union c a 211 1 1 f b 211 1 0 e # 19315 union c a 211 1 1 f b 211 1 1 f # 19316 union c a 211 1 1 f b 211 1 0 f # 19317 union c a 211 1 1 f b 211 1 1 f # 19318 union c a 211 1 1 f b 211 1 0 0 1 4 5 7 9 10 12 13 15 22 23 24 26 28 29 31 32 33 35 36 37 38 42 45 47 50 52 53 55 61 66 69 71 74 80 82 83 87 89 91 94 95 96 97 100 101 102 103 104 105 109 110 111 112 113 114 116 118 120 124 127 129 130 131 133 134 136 138 145 150 152 153 154 160 166 168 169 173 176 177 178 179 185 186 187 189 193 194 197 198 203 204 205 207 208 209 210 # 19319 union c a 211 1 1 2 3 4 5 7 10 12 13 16 17 18 22 25 27 28 30 32 33 34 35 36 38 39 40 41 43 45 46 48 49 50 57 59 64 67 68 70 71 72 76 78 79 81 82 83 89 91 92 93 95 96 97 98 99 104 105 106 107 109 111 114 115 116 117 120 121 123 125 126 128 132 133 135 136 140 141 145 148 150 151 155 160 162 163 167 169 172 174 178 180 181 183 185 186 187 188 189 191 195 197 198 199 200 201 203 207 208 b 211 1 1 2 3 4 5 7 10 12 13 16 17 18 22 25 27 28 30 32 33 34 35 36 38 39 40 41 43 45 46 48 49 50 57 59 64 67 68 70 71 72 76 78 79 81 82 83 89 91 92 93 95 96 97 98 99 104 105 106 107 109 111 114 115 116 117 120 121 123 125 126 128 132 133 135 136 140 141 145 148 150 151 155 160 162 163 167 169 172 174 178 180 181 183 185 186 187 188 189 191 195 197 198 199 200 201 203 207 208 # 19320 union c a 211 1 1 2 3 4 5 7 10 12 13 16 17 18 22 25 27 28 30 32 33 34 35 36 38 39 40 41 43 45 46 48 49 50 57 59 64 67 68 70 71 72 76 78 79 81 82 83 89 91 92 93 95 96 97 98 99 104 105 106 107 109 111 114 115 116 117 120 121 123 125 126 128 132 133 135 136 140 141 145 148 150 151 155 160 162 163 167 169 172 174 178 180 181 183 185 186 187 188 189 191 195 197 198 199 200 201 203 207 208 b 211 1 0 e # 19321 union c a 211 1 1 2 4 7 12 13 14 17 20 22 23 24 27 28 29 33 34 39 41 45 46 47 48 49 50 53 55 56 58 59 61 64 66 68 69 72 73 76 78 81 82 84 87 88 90 91 96 98 102 103 104 107 111 115 117 118 120 124 125 128 130 133 136 140 143 144 146 149 153 155 157 162 163 165 170 172 173 175 178 179 180 182 187 189 191 193 196 197 198 202 205 206 207 209 210 b 211 1 1 2 4 7 12 13 14 17 20 22 23 24 27 28 29 33 34 39 41 45 46 47 48 49 50 53 55 56 58 59 61 64 66 68 69 72 73 76 78 81 82 84 87 88 90 91 96 98 102 103 104 107 111 115 117 118 120 124 125 128 130 133 136 140 143 144 146 149 153 155 157 162 163 165 170 172 173 175 178 179 180 182 187 189 191 193 196 197 198 202 205 206 207 209 210 # 19322 union c a 211 1 1 2 4 7 12 13 14 17 20 22 23 24 27 28 29 33 34 39 41 45 46 47 48 49 50 53 55 56 58 59 61 64 66 68 69 72 73 76 78 81 82 84 87 88 90 91 96 98 102 103 104 107 111 115 117 118 120 124 125 128 130 133 136 140 143 144 146 149 153 155 157 162 163 165 170 172 173 175 178 179 180 182 187 189 191 193 196 197 198 202 205 206 207 209 210 b 211 1 0 f # 19323 union c a 211 1 1 2 4 6 8 10 12 13 14 16 17 18 20 22 24 25 27 30 32 34 36 37 38 41 42 43 45 48 51 52 54 55 58 59 64 66 67 68 69 75 79 80 81 82 85 87 88 89 93 94 96 99 103 104 106 107 108 109 110 111 112 113 115 118 122 123 124 125 127 129 130 135 136 137 138 139 140 141 143 144 145 146 150 151 152 153 154 155 158 159 160 161 164 167 173 175 176 177 179 181 182 184 186 188 189 190 191 194 196 201 202 203 204 205 206 208 209 b 211 1 1 2 4 6 8 10 12 13 14 16 17 18 20 22 24 25 27 30 32 34 36 37 38 41 42 43 45 48 51 52 54 55 58 59 64 66 67 68 69 75 79 80 81 82 85 87 88 89 93 94 96 99 103 104 106 107 108 109 110 111 112 113 115 118 122 123 124 125 127 129 130 135 136 137 138 139 140 141 143 144 145 146 150 151 152 153 154 155 158 159 160 161 164 167 173 175 176 177 179 181 182 184 186 188 189 190 191 194 196 201 202 203 204 205 206 208 209 # 19324 union c a 211 1 1 2 4 6 8 10 12 13 14 16 17 18 20 22 24 25 27 30 32 34 36 37 38 41 42 43 45 48 51 52 54 55 58 59 64 66 67 68 69 75 79 80 81 82 85 87 88 89 93 94 96 99 103 104 106 107 108 109 110 111 112 113 115 118 122 123 124 125 127 129 130 135 136 137 138 139 140 141 143 144 145 146 150 151 152 153 154 155 158 159 160 161 164 167 173 175 176 177 179 181 182 184 186 188 189 190 191 194 196 201 202 203 204 205 206 208 209 b 211 1 0 1 3 4 5 6 7 10 12 16 18 20 22 23 25 27 28 37 39 42 46 48 49 50 51 53 56 57 59 63 64 70 71 72 73 78 79 82 86 87 90 91 92 93 94 95 97 98 99 101 102 104 108 112 113 114 115 117 118 120 121 123 124 125 128 134 136 138 139 141 142 144 145 150 152 153 155 156 157 158 159 163 169 170 171 172 173 175 176 180 181 182 183 184 185 187 188 190 191 192 194 196 197 200 203 206 208 # 19325 union c a 211 1 1 e b 211 1 1 e # 19326 union c a 211 1 1 e b 211 1 1 e # 19327 union c a 211 1 1 e b 211 1 1 e # 19328 union c a 211 1 1 e b 211 1 1 f # 19329 union c a 211 1 1 e b 211 1 1 e # 19330 union c a 211 1 1 e b 211 1 1 0 6 8 11 13 14 17 18 19 20 22 23 24 26 29 30 33 34 37 38 41 44 45 46 48 49 50 53 57 58 59 60 65 66 67 68 70 71 79 83 85 87 88 90 91 92 94 97 98 99 101 102 103 106 108 112 113 116 117 123 124 127 128 130 133 134 137 138 142 146 150 151 152 153 154 155 157 158 161 164 166 169 170 171 173 175 179 180 181 183 184 186 193 194 195 197 199 200 201 202 204 207 208 209 210 # 19331 union c a 211 1 1 f b 211 1 1 f # 19332 union c a 211 1 1 f b 211 1 1 e # 19333 union c a 211 1 1 f b 211 1 1 f # 19334 union c a 211 1 1 f b 211 1 1 f # 19335 union c a 211 1 1 f b 211 1 1 f # 19336 union c a 211 1 1 f b 211 1 1 0 1 3 4 6 7 8 16 18 19 21 22 23 29 32 36 39 41 42 43 51 52 56 57 58 60 62 64 66 67 68 75 76 77 80 81 82 83 90 91 92 93 100 101 105 107 109 112 116 117 118 119 121 122 124 126 128 129 130 131 132 135 136 137 138 140 142 143 151 156 157 158 159 160 161 162 163 164 166 167 169 172 176 177 178 181 183 185 187 188 190 191 192 195 196 198 199 200 203 204 207 # 19337 union c a 211 1 1 2 5 9 12 13 14 15 17 18 20 22 23 29 30 31 32 33 37 38 39 44 45 46 48 49 50 51 52 53 54 56 64 65 66 69 71 72 73 75 76 79 80 82 83 85 89 90 92 94 95 96 101 104 105 108 109 111 113 114 116 118 119 120 123 124 126 127 128 131 133 138 141 144 146 147 148 149 150 151 154 155 157 158 161 163 164 166 168 169 170 172 174 175 176 177 183 185 186 187 188 191 194 196 197 199 205 206 208 210 b 211 1 1 2 5 9 12 13 14 15 17 18 20 22 23 29 30 31 32 33 37 38 39 44 45 46 48 49 50 51 52 53 54 56 64 65 66 69 71 72 73 75 76 79 80 82 83 85 89 90 92 94 95 96 101 104 105 108 109 111 113 114 116 118 119 120 123 124 126 127 128 131 133 138 141 144 146 147 148 149 150 151 154 155 157 158 161 163 164 166 168 169 170 172 174 175 176 177 183 185 186 187 188 191 194 196 197 199 205 206 208 210 # 19338 union c a 211 1 1 2 5 9 12 13 14 15 17 18 20 22 23 29 30 31 32 33 37 38 39 44 45 46 48 49 50 51 52 53 54 56 64 65 66 69 71 72 73 75 76 79 80 82 83 85 89 90 92 94 95 96 101 104 105 108 109 111 113 114 116 118 119 120 123 124 126 127 128 131 133 138 141 144 146 147 148 149 150 151 154 155 157 158 161 163 164 166 168 169 170 172 174 175 176 177 183 185 186 187 188 191 194 196 197 199 205 206 208 210 b 211 1 1 e # 19339 union c a 211 1 1 1 2 3 5 6 8 11 12 13 15 16 19 20 21 23 26 28 37 38 39 42 43 46 56 58 59 60 62 63 67 70 75 76 78 80 84 85 86 88 89 91 92 94 99 101 103 105 106 109 112 113 115 116 119 120 123 124 129 130 131 132 134 136 137 141 144 145 147 152 153 155 157 158 159 161 162 165 169 171 172 173 175 176 177 178 185 186 189 191 192 193 196 197 200 201 203 204 205 206 207 b 211 1 1 1 2 3 5 6 8 11 12 13 15 16 19 20 21 23 26 28 37 38 39 42 43 46 56 58 59 60 62 63 67 70 75 76 78 80 84 85 86 88 89 91 92 94 99 101 103 105 106 109 112 113 115 116 119 120 123 124 129 130 131 132 134 136 137 141 144 145 147 152 153 155 157 158 159 161 162 165 169 171 172 173 175 176 177 178 185 186 189 191 192 193 196 197 200 201 203 204 205 206 207 # 19340 union c a 211 1 1 1 2 3 5 6 8 11 12 13 15 16 19 20 21 23 26 28 37 38 39 42 43 46 56 58 59 60 62 63 67 70 75 76 78 80 84 85 86 88 89 91 92 94 99 101 103 105 106 109 112 113 115 116 119 120 123 124 129 130 131 132 134 136 137 141 144 145 147 152 153 155 157 158 159 161 162 165 169 171 172 173 175 176 177 178 185 186 189 191 192 193 196 197 200 201 203 204 205 206 207 b 211 1 1 f # 19341 union c a 211 1 1 0 1 2 3 4 6 8 9 10 11 12 13 17 18 19 20 21 22 24 25 27 29 30 31 33 34 37 38 40 41 43 47 49 50 52 53 54 57 59 60 62 64 65 66 68 69 71 73 74 75 77 78 79 80 81 82 83 85 87 88 90 92 94 95 98 99 102 103 106 109 115 116 118 119 120 121 123 125 131 132 136 138 140 141 142 145 150 157 158 159 164 165 170 174 178 179 180 181 183 184 185 190 191 192 194 195 199 200 201 202 203 205 207 208 210 b 211 1 1 0 1 2 3 4 6 8 9 10 11 12 13 17 18 19 20 21 22 24 25 27 29 30 31 33 34 37 38 40 41 43 47 49 50 52 53 54 57 59 60 62 64 65 66 68 69 71 73 74 75 77 78 79 80 81 82 83 85 87 88 90 92 94 95 98 99 102 103 106 109 115 116 118 119 120 121 123 125 131 132 136 138 140 141 142 145 150 157 158 159 164 165 170 174 178 179 180 181 183 184 185 190 191 192 194 195 199 200 201 202 203 205 207 208 210 # 19342 union c a 211 1 1 0 1 2 3 4 6 8 9 10 11 12 13 17 18 19 20 21 22 24 25 27 29 30 31 33 34 37 38 40 41 43 47 49 50 52 53 54 57 59 60 62 64 65 66 68 69 71 73 74 75 77 78 79 80 81 82 83 85 87 88 90 92 94 95 98 99 102 103 106 109 115 116 118 119 120 121 123 125 131 132 136 138 140 141 142 145 150 157 158 159 164 165 170 174 178 179 180 181 183 184 185 190 191 192 194 195 199 200 201 202 203 205 207 208 210 b 211 1 1 0 1 3 4 8 9 12 13 17 18 19 20 21 22 23 25 28 33 36 38 39 41 43 44 45 47 48 50 52 53 56 60 61 62 66 68 69 71 72 74 79 80 83 85 86 90 93 94 95 96 97 99 102 104 105 106 111 112 113 114 117 119 122 124 125 127 130 131 132 135 137 143 147 148 149 152 154 155 157 158 159 161 162 165 168 169 170 176 179 181 182 185 188 192 193 194 196 198 199 200 201 206 207 208 209 210 # 19343 union c a 224 0 0 e b 224 0 0 e # 19344 union c a 224 0 0 e b 224 0 0 e # 19345 union c a 224 0 0 e b 224 0 0 e # 19346 union c a 224 0 0 e b 224 0 0 f # 19347 union c a 224 0 0 e b 224 0 0 e # 19348 union c a 224 0 0 e b 224 0 0 1 2 4 6 9 10 12 13 16 18 19 21 22 23 24 27 30 31 36 37 38 40 42 43 45 47 50 51 52 53 54 55 58 59 60 61 63 65 68 69 71 74 75 77 78 79 82 88 92 93 97 100 101 102 105 106 108 109 111 113 118 120 122 123 124 126 128 130 131 133 134 135 137 140 143 147 148 151 152 153 155 160 161 162 164 165 168 171 172 173 174 180 181 182 184 187 188 191 197 201 202 204 205 206 207 208 211 212 215 216 218 219 220 221 222 # 19349 union c a 224 0 0 f b 224 0 0 f # 19350 union c a 224 0 0 f b 224 0 0 e # 19351 union c a 224 0 0 f b 224 0 0 f # 19352 union c a 224 0 0 f b 224 0 0 f # 19353 union c a 224 0 0 f b 224 0 0 f # 19354 union c a 224 0 0 f b 224 0 0 2 4 6 9 11 14 24 25 26 27 28 29 32 34 35 39 41 42 43 44 45 48 50 52 54 55 57 58 64 68 69 70 71 73 74 77 78 81 82 85 90 91 92 95 97 98 100 101 104 105 106 108 109 110 112 113 114 115 119 120 122 123 126 127 129 132 138 140 142 143 145 146 147 150 153 155 158 159 160 162 163 164 168 169 170 171 173 175 176 182 183 184 186 189 190 193 195 201 202 203 204 206 208 210 216 218 221 222 # 19355 union c a 224 0 0 0 1 5 7 8 10 12 13 14 15 16 17 18 22 23 25 27 29 32 33 37 42 45 50 51 53 54 55 57 58 59 60 61 63 64 65 68 69 74 75 76 77 78 81 83 85 86 87 88 90 91 94 96 99 101 102 103 105 106 108 109 110 111 113 114 115 116 118 119 120 121 122 125 126 130 131 133 134 136 137 138 143 146 148 149 151 152 157 159 162 165 166 168 169 170 175 181 182 187 189 190 193 194 195 196 197 200 201 202 203 205 206 207 209 210 212 213 214 215 218 222 223 b 224 0 0 0 1 5 7 8 10 12 13 14 15 16 17 18 22 23 25 27 29 32 33 37 42 45 50 51 53 54 55 57 58 59 60 61 63 64 65 68 69 74 75 76 77 78 81 83 85 86 87 88 90 91 94 96 99 101 102 103 105 106 108 109 110 111 113 114 115 116 118 119 120 121 122 125 126 130 131 133 134 136 137 138 143 146 148 149 151 152 157 159 162 165 166 168 169 170 175 181 182 187 189 190 193 194 195 196 197 200 201 202 203 205 206 207 209 210 212 213 214 215 218 222 223 # 19356 union c a 224 0 0 0 1 5 7 8 10 12 13 14 15 16 17 18 22 23 25 27 29 32 33 37 42 45 50 51 53 54 55 57 58 59 60 61 63 64 65 68 69 74 75 76 77 78 81 83 85 86 87 88 90 91 94 96 99 101 102 103 105 106 108 109 110 111 113 114 115 116 118 119 120 121 122 125 126 130 131 133 134 136 137 138 143 146 148 149 151 152 157 159 162 165 166 168 169 170 175 181 182 187 189 190 193 194 195 196 197 200 201 202 203 205 206 207 209 210 212 213 214 215 218 222 223 b 224 0 0 e # 19357 union c a 224 0 0 1 2 3 4 5 7 8 10 14 17 18 20 21 24 25 26 29 30 31 32 33 34 35 36 39 42 43 44 45 48 51 52 53 55 56 57 60 62 64 65 67 68 69 72 75 78 80 83 85 86 87 88 89 94 96 98 99 100 103 104 105 106 109 110 111 114 119 121 123 124 126 127 128 129 130 131 134 138 141 146 147 148 150 154 156 157 160 164 165 166 167 169 171 172 173 179 180 181 183 187 192 193 194 196 197 200 201 202 203 204 215 216 218 219 220 223 b 224 0 0 1 2 3 4 5 7 8 10 14 17 18 20 21 24 25 26 29 30 31 32 33 34 35 36 39 42 43 44 45 48 51 52 53 55 56 57 60 62 64 65 67 68 69 72 75 78 80 83 85 86 87 88 89 94 96 98 99 100 103 104 105 106 109 110 111 114 119 121 123 124 126 127 128 129 130 131 134 138 141 146 147 148 150 154 156 157 160 164 165 166 167 169 171 172 173 179 180 181 183 187 192 193 194 196 197 200 201 202 203 204 215 216 218 219 220 223 # 19358 union c a 224 0 0 1 2 3 4 5 7 8 10 14 17 18 20 21 24 25 26 29 30 31 32 33 34 35 36 39 42 43 44 45 48 51 52 53 55 56 57 60 62 64 65 67 68 69 72 75 78 80 83 85 86 87 88 89 94 96 98 99 100 103 104 105 106 109 110 111 114 119 121 123 124 126 127 128 129 130 131 134 138 141 146 147 148 150 154 156 157 160 164 165 166 167 169 171 172 173 179 180 181 183 187 192 193 194 196 197 200 201 202 203 204 215 216 218 219 220 223 b 224 0 0 f # 19359 union c a 224 0 0 0 1 3 4 5 6 8 9 11 14 15 16 18 20 24 25 27 29 32 33 34 37 38 40 42 44 45 46 47 49 51 55 57 58 59 60 62 64 65 66 68 69 70 71 73 75 76 78 79 81 82 87 90 93 94 96 97 98 99 100 101 102 103 105 106 109 112 114 116 120 121 124 126 128 129 131 133 134 135 136 137 142 144 145 149 150 151 152 157 158 160 165 168 172 175 176 177 180 181 186 187 189 197 198 205 206 208 210 211 213 219 b 224 0 0 0 1 3 4 5 6 8 9 11 14 15 16 18 20 24 25 27 29 32 33 34 37 38 40 42 44 45 46 47 49 51 55 57 58 59 60 62 64 65 66 68 69 70 71 73 75 76 78 79 81 82 87 90 93 94 96 97 98 99 100 101 102 103 105 106 109 112 114 116 120 121 124 126 128 129 131 133 134 135 136 137 142 144 145 149 150 151 152 157 158 160 165 168 172 175 176 177 180 181 186 187 189 197 198 205 206 208 210 211 213 219 # 19360 union c a 224 0 0 0 1 3 4 5 6 8 9 11 14 15 16 18 20 24 25 27 29 32 33 34 37 38 40 42 44 45 46 47 49 51 55 57 58 59 60 62 64 65 66 68 69 70 71 73 75 76 78 79 81 82 87 90 93 94 96 97 98 99 100 101 102 103 105 106 109 112 114 116 120 121 124 126 128 129 131 133 134 135 136 137 142 144 145 149 150 151 152 157 158 160 165 168 172 175 176 177 180 181 186 187 189 197 198 205 206 208 210 211 213 219 b 224 0 0 0 1 2 5 6 7 8 10 13 14 17 18 20 22 27 28 31 35 36 37 39 46 47 49 51 52 60 62 64 66 67 70 72 74 76 77 79 82 84 86 88 91 92 94 96 97 99 101 106 107 110 111 112 113 118 119 122 124 125 126 128 129 132 133 134 137 139 140 143 145 148 149 154 155 156 159 161 162 164 165 166 169 173 178 182 183 184 185 186 187 191 197 198 199 200 201 204 206 208 209 210 213 215 217 218 219 # 19361 union c a 224 0 0 e b 224 0 0 e # 19362 union c a 224 0 0 e b 224 0 1 e # 19363 union c a 224 0 0 e b 224 0 0 e # 19364 union c a 224 0 0 e b 224 0 1 f # 19365 union c a 224 0 0 e b 224 0 0 e # 19366 union c a 224 0 0 e b 224 0 1 0 1 2 3 4 6 7 9 10 13 18 19 20 22 28 29 30 33 38 39 41 42 43 44 48 50 51 53 55 59 63 64 65 66 69 70 72 73 75 78 80 81 82 84 86 87 88 90 91 94 97 98 99 100 101 103 104 108 111 114 116 117 123 124 128 129 130 131 132 136 137 138 139 143 144 150 151 152 156 157 158 159 160 161 164 165 166 167 168 169 172 173 175 177 179 182 183 184 188 191 192 193 195 196 198 199 200 203 205 206 207 209 210 211 214 215 216 219 221 # 19367 union c a 224 0 0 f b 224 0 0 f # 19368 union c a 224 0 0 f b 224 0 1 e # 19369 union c a 224 0 0 f b 224 0 0 f # 19370 union c a 224 0 0 f b 224 0 1 f # 19371 union c a 224 0 0 f b 224 0 0 f # 19372 union c a 224 0 0 f b 224 0 1 1 4 6 7 10 11 12 13 16 19 20 21 22 27 29 31 33 34 36 37 45 46 47 48 49 50 51 52 53 58 59 63 64 67 69 71 73 74 77 80 83 86 87 88 89 90 94 96 100 101 102 105 106 107 108 112 113 121 126 127 128 129 131 132 134 137 139 140 141 143 145 146 147 148 150 154 156 159 161 164 169 173 174 175 177 178 181 182 186 188 190 194 196 200 201 207 211 212 216 219 220 223 # 19373 union c a 224 0 0 0 1 3 5 9 10 11 14 15 20 21 22 24 27 28 30 31 33 34 35 36 37 38 40 41 43 44 46 48 50 52 53 54 55 56 58 59 60 66 69 71 72 73 74 75 76 77 79 80 83 84 86 87 89 90 95 98 99 102 105 106 110 119 125 127 130 131 132 134 135 137 139 143 145 147 149 150 152 154 156 162 164 165 167 168 170 172 173 174 176 179 180 183 188 189 190 193 195 196 197 198 199 201 202 203 204 205 212 213 217 218 220 223 b 224 0 0 0 1 3 5 9 10 11 14 15 20 21 22 24 27 28 30 31 33 34 35 36 37 38 40 41 43 44 46 48 50 52 53 54 55 56 58 59 60 66 69 71 72 73 74 75 76 77 79 80 83 84 86 87 89 90 95 98 99 102 105 106 110 119 125 127 130 131 132 134 135 137 139 143 145 147 149 150 152 154 156 162 164 165 167 168 170 172 173 174 176 179 180 183 188 189 190 193 195 196 197 198 199 201 202 203 204 205 212 213 217 218 220 223 # 19374 union c a 224 0 0 0 1 3 5 9 10 11 14 15 20 21 22 24 27 28 30 31 33 34 35 36 37 38 40 41 43 44 46 48 50 52 53 54 55 56 58 59 60 66 69 71 72 73 74 75 76 77 79 80 83 84 86 87 89 90 95 98 99 102 105 106 110 119 125 127 130 131 132 134 135 137 139 143 145 147 149 150 152 154 156 162 164 165 167 168 170 172 173 174 176 179 180 183 188 189 190 193 195 196 197 198 199 201 202 203 204 205 212 213 217 218 220 223 b 224 0 1 e # 19375 union c a 224 0 0 1 2 3 4 5 6 7 8 9 10 12 14 15 16 22 23 27 28 29 30 32 33 36 37 39 40 44 48 49 50 53 63 65 68 69 74 76 78 81 82 85 86 87 90 91 92 94 98 99 103 104 106 108 109 110 113 114 115 116 117 118 121 122 125 126 128 129 132 133 134 135 137 140 142 144 147 149 150 152 153 154 155 156 159 161 162 164 165 166 168 170 171 173 174 182 183 185 186 187 190 193 194 196 197 198 199 200 201 204 206 207 208 211 214 215 217 218 222 223 b 224 0 0 1 2 3 4 5 6 7 8 9 10 12 14 15 16 22 23 27 28 29 30 32 33 36 37 39 40 44 48 49 50 53 63 65 68 69 74 76 78 81 82 85 86 87 90 91 92 94 98 99 103 104 106 108 109 110 113 114 115 116 117 118 121 122 125 126 128 129 132 133 134 135 137 140 142 144 147 149 150 152 153 154 155 156 159 161 162 164 165 166 168 170 171 173 174 182 183 185 186 187 190 193 194 196 197 198 199 200 201 204 206 207 208 211 214 215 217 218 222 223 # 19376 union c a 224 0 0 1 2 3 4 5 6 7 8 9 10 12 14 15 16 22 23 27 28 29 30 32 33 36 37 39 40 44 48 49 50 53 63 65 68 69 74 76 78 81 82 85 86 87 90 91 92 94 98 99 103 104 106 108 109 110 113 114 115 116 117 118 121 122 125 126 128 129 132 133 134 135 137 140 142 144 147 149 150 152 153 154 155 156 159 161 162 164 165 166 168 170 171 173 174 182 183 185 186 187 190 193 194 196 197 198 199 200 201 204 206 207 208 211 214 215 217 218 222 223 b 224 0 1 f # 19377 union c a 224 0 0 1 3 6 10 12 13 17 19 26 27 28 29 30 31 32 34 36 37 38 40 41 42 43 44 45 47 48 49 50 51 55 58 61 68 70 71 72 74 75 77 78 80 83 84 85 86 91 93 94 96 98 99 100 102 103 104 105 108 110 112 113 116 118 119 120 122 123 124 125 127 130 131 132 133 134 135 136 141 142 144 146 147 148 150 152 155 157 158 161 163 164 166 169 170 171 172 173 175 177 178 182 184 186 189 190 198 199 201 202 204 209 211 214 217 218 219 220 b 224 0 0 1 3 6 10 12 13 17 19 26 27 28 29 30 31 32 34 36 37 38 40 41 42 43 44 45 47 48 49 50 51 55 58 61 68 70 71 72 74 75 77 78 80 83 84 85 86 91 93 94 96 98 99 100 102 103 104 105 108 110 112 113 116 118 119 120 122 123 124 125 127 130 131 132 133 134 135 136 141 142 144 146 147 148 150 152 155 157 158 161 163 164 166 169 170 171 172 173 175 177 178 182 184 186 189 190 198 199 201 202 204 209 211 214 217 218 219 220 # 19378 union c a 224 0 0 1 3 6 10 12 13 17 19 26 27 28 29 30 31 32 34 36 37 38 40 41 42 43 44 45 47 48 49 50 51 55 58 61 68 70 71 72 74 75 77 78 80 83 84 85 86 91 93 94 96 98 99 100 102 103 104 105 108 110 112 113 116 118 119 120 122 123 124 125 127 130 131 132 133 134 135 136 141 142 144 146 147 148 150 152 155 157 158 161 163 164 166 169 170 171 172 173 175 177 178 182 184 186 189 190 198 199 201 202 204 209 211 214 217 218 219 220 b 224 0 1 0 1 4 8 11 13 14 15 16 20 22 26 28 31 32 33 34 35 41 42 43 45 46 52 56 59 60 61 63 64 66 68 69 72 77 79 81 83 85 87 89 90 91 92 94 95 96 98 102 104 105 108 109 112 113 119 121 122 123 126 127 128 129 134 138 144 145 149 152 153 155 158 160 162 164 165 167 168 173 177 178 179 180 185 187 188 191 192 195 196 197 198 199 200 201 204 205 206 208 209 210 214 216 219 220 222 223 # 19379 union c a 224 0 0 e b 224 0 0 e # 19380 union c a 224 0 0 e b 224 1 0 e # 19381 union c a 224 0 0 e b 224 0 0 e # 19382 union c a 224 0 0 e b 224 1 0 f # 19383 union c a 224 0 0 e b 224 0 0 e # 19384 union c a 224 0 0 e b 224 1 0 0 2 3 4 6 7 9 12 18 19 20 21 23 26 28 29 31 32 35 36 38 43 44 45 54 55 56 57 59 61 62 67 71 72 73 74 75 76 80 81 89 91 92 93 95 97 98 99 104 107 109 110 115 116 117 118 122 128 133 136 137 142 143 144 146 147 148 149 150 152 153 154 157 158 161 163 164 165 167 168 172 173 177 180 182 183 186 189 190 191 192 197 199 203 207 209 210 212 213 214 217 218 219 220 # 19385 union c a 224 0 0 f b 224 0 0 f # 19386 union c a 224 0 0 f b 224 1 0 e # 19387 union c a 224 0 0 f b 224 0 0 f # 19388 union c a 224 0 0 f b 224 1 0 f # 19389 union c a 224 0 0 f b 224 0 0 f # 19390 union c a 224 0 0 f b 224 1 0 0 1 2 3 4 6 7 8 10 12 14 17 20 23 26 28 30 33 35 36 38 39 40 41 42 45 46 47 48 50 51 52 54 56 60 62 63 64 66 67 68 69 70 71 72 73 76 77 79 83 84 88 89 90 92 93 95 98 101 106 110 111 114 116 117 118 120 121 122 123 124 126 128 129 130 133 134 135 137 139 142 143 144 146 149 150 153 154 157 162 163 165 166 167 168 170 174 176 177 178 180 181 182 184 185 189 190 191 193 194 196 197 199 201 202 203 205 206 208 209 210 211 213 214 219 222 223 # 19391 union c a 224 0 0 0 1 3 4 10 11 13 16 23 24 25 26 29 30 32 34 35 36 38 40 41 44 45 46 47 50 57 59 60 62 64 65 70 73 74 76 77 78 79 81 83 85 86 87 88 90 92 93 94 95 96 101 102 103 104 105 106 107 108 109 110 111 112 114 116 117 119 124 126 127 130 131 133 134 137 138 140 141 143 144 145 147 148 149 150 151 152 153 155 158 159 161 162 163 166 167 169 171 172 174 175 177 178 180 183 186 187 188 194 195 196 197 198 199 200 201 202 203 205 207 208 212 216 217 218 219 222 223 b 224 0 0 0 1 3 4 10 11 13 16 23 24 25 26 29 30 32 34 35 36 38 40 41 44 45 46 47 50 57 59 60 62 64 65 70 73 74 76 77 78 79 81 83 85 86 87 88 90 92 93 94 95 96 101 102 103 104 105 106 107 108 109 110 111 112 114 116 117 119 124 126 127 130 131 133 134 137 138 140 141 143 144 145 147 148 149 150 151 152 153 155 158 159 161 162 163 166 167 169 171 172 174 175 177 178 180 183 186 187 188 194 195 196 197 198 199 200 201 202 203 205 207 208 212 216 217 218 219 222 223 # 19392 union c a 224 0 0 0 1 3 4 10 11 13 16 23 24 25 26 29 30 32 34 35 36 38 40 41 44 45 46 47 50 57 59 60 62 64 65 70 73 74 76 77 78 79 81 83 85 86 87 88 90 92 93 94 95 96 101 102 103 104 105 106 107 108 109 110 111 112 114 116 117 119 124 126 127 130 131 133 134 137 138 140 141 143 144 145 147 148 149 150 151 152 153 155 158 159 161 162 163 166 167 169 171 172 174 175 177 178 180 183 186 187 188 194 195 196 197 198 199 200 201 202 203 205 207 208 212 216 217 218 219 222 223 b 224 1 0 e # 19393 union c a 224 0 0 0 1 4 7 10 11 14 15 17 21 24 28 30 31 36 37 39 41 42 47 49 50 51 52 56 57 58 59 60 61 62 65 67 68 69 70 71 72 73 75 77 78 79 80 81 82 83 88 89 91 92 93 95 96 97 98 99 101 102 104 107 109 110 112 114 115 116 119 122 123 125 126 128 129 132 133 135 137 138 140 142 144 145 147 148 149 155 159 165 166 167 169 173 174 176 178 179 180 182 184 186 187 190 191 192 194 196 197 198 200 202 203 207 208 210 211 212 213 214 216 217 223 b 224 0 0 0 1 4 7 10 11 14 15 17 21 24 28 30 31 36 37 39 41 42 47 49 50 51 52 56 57 58 59 60 61 62 65 67 68 69 70 71 72 73 75 77 78 79 80 81 82 83 88 89 91 92 93 95 96 97 98 99 101 102 104 107 109 110 112 114 115 116 119 122 123 125 126 128 129 132 133 135 137 138 140 142 144 145 147 148 149 155 159 165 166 167 169 173 174 176 178 179 180 182 184 186 187 190 191 192 194 196 197 198 200 202 203 207 208 210 211 212 213 214 216 217 223 # 19394 union c a 224 0 0 0 1 4 7 10 11 14 15 17 21 24 28 30 31 36 37 39 41 42 47 49 50 51 52 56 57 58 59 60 61 62 65 67 68 69 70 71 72 73 75 77 78 79 80 81 82 83 88 89 91 92 93 95 96 97 98 99 101 102 104 107 109 110 112 114 115 116 119 122 123 125 126 128 129 132 133 135 137 138 140 142 144 145 147 148 149 155 159 165 166 167 169 173 174 176 178 179 180 182 184 186 187 190 191 192 194 196 197 198 200 202 203 207 208 210 211 212 213 214 216 217 223 b 224 1 0 f # 19395 union c a 224 0 0 0 3 7 9 10 11 14 18 21 22 24 26 28 29 36 42 43 44 45 54 61 62 63 65 67 69 71 74 75 76 81 82 83 84 86 88 90 99 101 102 104 105 107 109 111 113 118 120 121 122 126 127 128 130 131 132 133 135 136 137 138 139 140 142 146 147 148 149 151 154 155 157 160 163 164 165 166 167 168 169 170 174 176 183 184 188 189 191 193 194 197 198 200 201 202 206 207 208 209 213 214 216 219 221 222 223 b 224 0 0 0 3 7 9 10 11 14 18 21 22 24 26 28 29 36 42 43 44 45 54 61 62 63 65 67 69 71 74 75 76 81 82 83 84 86 88 90 99 101 102 104 105 107 109 111 113 118 120 121 122 126 127 128 130 131 132 133 135 136 137 138 139 140 142 146 147 148 149 151 154 155 157 160 163 164 165 166 167 168 169 170 174 176 183 184 188 189 191 193 194 197 198 200 201 202 206 207 208 209 213 214 216 219 221 222 223 # 19396 union c a 224 0 0 0 3 7 9 10 11 14 18 21 22 24 26 28 29 36 42 43 44 45 54 61 62 63 65 67 69 71 74 75 76 81 82 83 84 86 88 90 99 101 102 104 105 107 109 111 113 118 120 121 122 126 127 128 130 131 132 133 135 136 137 138 139 140 142 146 147 148 149 151 154 155 157 160 163 164 165 166 167 168 169 170 174 176 183 184 188 189 191 193 194 197 198 200 201 202 206 207 208 209 213 214 216 219 221 222 223 b 224 1 0 0 1 2 4 5 7 8 11 12 13 14 15 16 18 21 22 27 30 31 33 36 37 40 43 48 50 53 55 56 57 58 60 61 69 70 74 75 76 79 80 82 84 87 95 96 97 98 100 101 103 104 106 107 108 109 111 116 117 123 124 125 127 128 131 133 134 138 143 144 145 146 147 148 152 153 154 155 156 158 159 160 161 164 167 168 172 174 175 177 178 179 183 184 186 187 188 191 193 194 199 200 203 204 206 209 216 218 220 # 19397 union c a 224 0 0 e b 224 0 0 e # 19398 union c a 224 0 0 e b 224 1 1 e # 19399 union c a 224 0 0 e b 224 0 0 e # 19400 union c a 224 0 0 e b 224 1 1 f # 19401 union c a 224 0 0 e b 224 0 0 e # 19402 union c a 224 0 0 e b 224 1 1 3 4 5 6 7 9 10 13 16 17 18 19 23 24 28 29 30 32 34 35 36 37 40 43 44 45 47 48 50 51 52 53 54 55 59 61 66 68 71 72 73 74 75 76 79 80 82 83 85 89 92 93 94 95 96 97 99 101 102 103 104 106 107 108 115 116 117 121 122 135 136 138 142 143 146 148 149 150 152 154 156 157 158 162 163 166 170 171 172 173 174 176 177 178 179 180 184 186 187 191 192 193 199 200 202 204 205 206 207 210 212 214 215 216 218 219 220 222 223 # 19403 union c a 224 0 0 f b 224 0 0 f # 19404 union c a 224 0 0 f b 224 1 1 e # 19405 union c a 224 0 0 f b 224 0 0 f # 19406 union c a 224 0 0 f b 224 1 1 f # 19407 union c a 224 0 0 f b 224 0 0 f # 19408 union c a 224 0 0 f b 224 1 1 2 8 9 10 11 12 14 16 17 19 22 23 24 25 26 27 29 32 34 36 38 39 43 44 47 48 49 50 52 53 55 56 60 61 62 63 65 68 72 73 75 76 78 79 81 84 86 87 88 90 91 93 94 95 101 102 105 106 109 111 113 114 117 118 119 121 122 123 124 126 128 130 135 139 141 142 143 145 146 147 148 149 150 152 155 156 158 159 160 161 162 163 166 167 168 169 170 172 174 177 178 179 180 181 183 186 188 189 190 193 195 202 203 204 205 207 208 210 211 212 214 216 222 223 # 19409 union c a 224 0 0 3 4 5 7 10 11 12 14 15 17 22 23 24 27 28 30 32 35 37 38 40 41 43 44 46 50 51 53 54 56 59 60 61 62 63 68 70 71 72 74 75 76 77 80 85 86 89 90 91 92 93 94 98 101 108 109 110 111 113 115 116 118 121 124 125 131 132 133 136 137 139 140 142 146 148 149 151 152 153 155 156 157 159 160 161 162 163 165 168 169 172 174 176 177 179 180 181 182 183 184 185 186 188 189 191 192 194 197 198 199 200 203 204 206 207 208 211 218 219 222 223 b 224 0 0 3 4 5 7 10 11 12 14 15 17 22 23 24 27 28 30 32 35 37 38 40 41 43 44 46 50 51 53 54 56 59 60 61 62 63 68 70 71 72 74 75 76 77 80 85 86 89 90 91 92 93 94 98 101 108 109 110 111 113 115 116 118 121 124 125 131 132 133 136 137 139 140 142 146 148 149 151 152 153 155 156 157 159 160 161 162 163 165 168 169 172 174 176 177 179 180 181 182 183 184 185 186 188 189 191 192 194 197 198 199 200 203 204 206 207 208 211 218 219 222 223 # 19410 union c a 224 0 0 3 4 5 7 10 11 12 14 15 17 22 23 24 27 28 30 32 35 37 38 40 41 43 44 46 50 51 53 54 56 59 60 61 62 63 68 70 71 72 74 75 76 77 80 85 86 89 90 91 92 93 94 98 101 108 109 110 111 113 115 116 118 121 124 125 131 132 133 136 137 139 140 142 146 148 149 151 152 153 155 156 157 159 160 161 162 163 165 168 169 172 174 176 177 179 180 181 182 183 184 185 186 188 189 191 192 194 197 198 199 200 203 204 206 207 208 211 218 219 222 223 b 224 1 1 e # 19411 union c a 224 0 0 3 5 6 10 11 13 14 19 21 23 24 25 26 31 32 38 39 41 42 43 44 48 49 54 57 58 59 61 65 66 67 70 71 74 75 76 79 80 82 84 85 86 88 89 91 92 93 96 97 99 101 102 103 106 108 109 111 118 119 120 122 123 124 126 127 130 131 135 136 139 143 144 145 147 148 150 151 153 154 157 160 161 165 166 168 172 173 174 183 187 188 189 191 192 198 201 204 206 208 210 212 217 218 b 224 0 0 3 5 6 10 11 13 14 19 21 23 24 25 26 31 32 38 39 41 42 43 44 48 49 54 57 58 59 61 65 66 67 70 71 74 75 76 79 80 82 84 85 86 88 89 91 92 93 96 97 99 101 102 103 106 108 109 111 118 119 120 122 123 124 126 127 130 131 135 136 139 143 144 145 147 148 150 151 153 154 157 160 161 165 166 168 172 173 174 183 187 188 189 191 192 198 201 204 206 208 210 212 217 218 # 19412 union c a 224 0 0 3 5 6 10 11 13 14 19 21 23 24 25 26 31 32 38 39 41 42 43 44 48 49 54 57 58 59 61 65 66 67 70 71 74 75 76 79 80 82 84 85 86 88 89 91 92 93 96 97 99 101 102 103 106 108 109 111 118 119 120 122 123 124 126 127 130 131 135 136 139 143 144 145 147 148 150 151 153 154 157 160 161 165 166 168 172 173 174 183 187 188 189 191 192 198 201 204 206 208 210 212 217 218 b 224 1 1 f # 19413 union c a 224 0 0 0 1 3 4 9 10 11 15 16 17 22 23 25 27 28 29 30 31 34 36 37 38 39 40 41 42 43 46 47 52 55 56 58 59 61 62 63 67 70 72 73 81 82 84 87 88 89 90 91 92 93 94 95 97 98 99 101 102 104 109 110 111 113 116 119 122 131 134 139 142 143 144 147 148 149 150 156 157 158 160 167 168 169 170 171 173 174 177 179 180 181 183 185 190 192 194 205 206 208 209 211 212 213 214 218 219 220 221 b 224 0 0 0 1 3 4 9 10 11 15 16 17 22 23 25 27 28 29 30 31 34 36 37 38 39 40 41 42 43 46 47 52 55 56 58 59 61 62 63 67 70 72 73 81 82 84 87 88 89 90 91 92 93 94 95 97 98 99 101 102 104 109 110 111 113 116 119 122 131 134 139 142 143 144 147 148 149 150 156 157 158 160 167 168 169 170 171 173 174 177 179 180 181 183 185 190 192 194 205 206 208 209 211 212 213 214 218 219 220 221 # 19414 union c a 224 0 0 0 1 3 4 9 10 11 15 16 17 22 23 25 27 28 29 30 31 34 36 37 38 39 40 41 42 43 46 47 52 55 56 58 59 61 62 63 67 70 72 73 81 82 84 87 88 89 90 91 92 93 94 95 97 98 99 101 102 104 109 110 111 113 116 119 122 131 134 139 142 143 144 147 148 149 150 156 157 158 160 167 168 169 170 171 173 174 177 179 180 181 183 185 190 192 194 205 206 208 209 211 212 213 214 218 219 220 221 b 224 1 1 2 3 5 6 7 13 14 16 18 19 21 23 24 26 27 31 33 35 36 38 40 41 42 43 44 45 47 50 52 55 56 57 58 61 63 64 65 66 67 71 73 74 76 79 84 85 87 88 91 93 94 99 100 102 105 106 108 112 113 114 115 118 120 123 125 127 132 134 136 137 138 139 141 144 148 151 152 153 154 156 157 158 162 164 165 166 167 168 169 170 172 174 176 178 179 180 183 184 186 187 189 190 191 193 198 200 201 203 204 207 209 213 214 217 218 220 221 # 19415 union c a 224 0 1 e b 224 0 1 e # 19416 union c a 224 0 1 e b 224 0 0 e # 19417 union c a 224 0 1 e b 224 0 1 e # 19418 union c a 224 0 1 e b 224 0 0 f # 19419 union c a 224 0 1 e b 224 0 1 e # 19420 union c a 224 0 1 e b 224 0 0 0 2 4 5 7 9 13 15 16 17 18 19 20 21 23 24 27 29 31 35 36 37 38 40 42 43 44 46 47 48 49 50 51 52 53 54 55 58 60 65 69 70 73 77 78 80 81 82 84 85 87 88 89 91 93 95 96 103 105 106 108 109 110 112 113 114 121 124 125 127 130 131 132 135 139 144 146 148 150 151 157 158 161 163 165 166 167 170 171 172 174 175 176 177 180 184 185 187 188 191 193 194 195 197 198 199 204 206 210 217 221 223 # 19421 union c a 224 0 1 f b 224 0 1 f # 19422 union c a 224 0 1 f b 224 0 0 e # 19423 union c a 224 0 1 f b 224 0 1 f # 19424 union c a 224 0 1 f b 224 0 0 f # 19425 union c a 224 0 1 f b 224 0 1 f # 19426 union c a 224 0 1 f b 224 0 0 2 3 5 6 7 10 11 12 13 15 19 20 21 22 24 26 28 29 36 45 54 55 62 63 64 67 68 70 72 75 76 77 81 84 88 89 90 93 94 95 98 100 101 104 105 107 108 109 111 112 113 115 116 117 119 120 122 123 125 126 127 129 130 131 137 140 141 143 145 148 149 152 158 161 163 165 167 168 169 171 174 175 179 180 181 183 184 185 190 191 195 197 198 201 203 205 206 207 210 219 220 223 # 19427 union c a 224 0 1 1 2 3 4 6 11 14 16 18 19 20 21 23 25 26 28 33 35 39 42 43 44 45 49 51 52 53 54 57 58 60 61 62 64 71 72 74 75 77 80 81 83 87 96 97 98 104 105 106 107 108 111 112 113 114 119 120 121 122 123 129 133 134 135 136 137 138 139 140 142 143 145 147 149 150 151 152 153 154 158 162 164 165 167 172 176 177 180 183 184 190 191 193 197 199 201 204 205 206 207 208 211 214 216 218 220 222 b 224 0 1 1 2 3 4 6 11 14 16 18 19 20 21 23 25 26 28 33 35 39 42 43 44 45 49 51 52 53 54 57 58 60 61 62 64 71 72 74 75 77 80 81 83 87 96 97 98 104 105 106 107 108 111 112 113 114 119 120 121 122 123 129 133 134 135 136 137 138 139 140 142 143 145 147 149 150 151 152 153 154 158 162 164 165 167 172 176 177 180 183 184 190 191 193 197 199 201 204 205 206 207 208 211 214 216 218 220 222 # 19428 union c a 224 0 1 1 2 3 4 6 11 14 16 18 19 20 21 23 25 26 28 33 35 39 42 43 44 45 49 51 52 53 54 57 58 60 61 62 64 71 72 74 75 77 80 81 83 87 96 97 98 104 105 106 107 108 111 112 113 114 119 120 121 122 123 129 133 134 135 136 137 138 139 140 142 143 145 147 149 150 151 152 153 154 158 162 164 165 167 172 176 177 180 183 184 190 191 193 197 199 201 204 205 206 207 208 211 214 216 218 220 222 b 224 0 0 e # 19429 union c a 224 0 1 2 3 4 5 6 8 11 14 17 19 24 28 30 31 32 34 35 38 40 42 43 44 45 48 52 53 56 57 58 59 61 62 66 67 68 69 70 71 73 74 76 77 81 82 86 89 91 93 94 95 97 100 105 106 108 110 112 114 116 118 119 122 123 125 127 128 129 131 135 137 141 142 145 146 149 152 153 156 157 158 160 164 170 171 173 174 175 177 179 186 189 190 191 192 193 195 198 199 200 201 202 205 207 209 210 211 213 215 218 219 220 221 222 223 b 224 0 1 2 3 4 5 6 8 11 14 17 19 24 28 30 31 32 34 35 38 40 42 43 44 45 48 52 53 56 57 58 59 61 62 66 67 68 69 70 71 73 74 76 77 81 82 86 89 91 93 94 95 97 100 105 106 108 110 112 114 116 118 119 122 123 125 127 128 129 131 135 137 141 142 145 146 149 152 153 156 157 158 160 164 170 171 173 174 175 177 179 186 189 190 191 192 193 195 198 199 200 201 202 205 207 209 210 211 213 215 218 219 220 221 222 223 # 19430 union c a 224 0 1 2 3 4 5 6 8 11 14 17 19 24 28 30 31 32 34 35 38 40 42 43 44 45 48 52 53 56 57 58 59 61 62 66 67 68 69 70 71 73 74 76 77 81 82 86 89 91 93 94 95 97 100 105 106 108 110 112 114 116 118 119 122 123 125 127 128 129 131 135 137 141 142 145 146 149 152 153 156 157 158 160 164 170 171 173 174 175 177 179 186 189 190 191 192 193 195 198 199 200 201 202 205 207 209 210 211 213 215 218 219 220 221 222 223 b 224 0 0 f # 19431 union c a 224 0 1 0 1 2 5 9 10 11 12 14 17 20 21 24 26 27 28 29 30 31 32 33 34 38 39 41 42 43 45 48 50 54 57 64 71 72 74 77 78 81 82 83 84 86 90 91 94 98 99 100 102 103 104 106 109 110 111 114 116 117 118 120 121 122 125 126 127 129 130 134 136 137 138 140 141 146 148 149 151 152 155 158 159 163 164 167 171 173 177 178 180 184 185 191 192 194 195 196 198 199 200 202 203 210 211 213 216 217 219 221 222 223 b 224 0 1 0 1 2 5 9 10 11 12 14 17 20 21 24 26 27 28 29 30 31 32 33 34 38 39 41 42 43 45 48 50 54 57 64 71 72 74 77 78 81 82 83 84 86 90 91 94 98 99 100 102 103 104 106 109 110 111 114 116 117 118 120 121 122 125 126 127 129 130 134 136 137 138 140 141 146 148 149 151 152 155 158 159 163 164 167 171 173 177 178 180 184 185 191 192 194 195 196 198 199 200 202 203 210 211 213 216 217 219 221 222 223 # 19432 union c a 224 0 1 0 1 2 5 9 10 11 12 14 17 20 21 24 26 27 28 29 30 31 32 33 34 38 39 41 42 43 45 48 50 54 57 64 71 72 74 77 78 81 82 83 84 86 90 91 94 98 99 100 102 103 104 106 109 110 111 114 116 117 118 120 121 122 125 126 127 129 130 134 136 137 138 140 141 146 148 149 151 152 155 158 159 163 164 167 171 173 177 178 180 184 185 191 192 194 195 196 198 199 200 202 203 210 211 213 216 217 219 221 222 223 b 224 0 0 2 3 4 6 8 9 11 13 19 21 22 23 24 26 29 33 35 41 43 44 45 48 49 50 52 53 55 58 59 60 65 67 69 70 71 72 75 76 77 78 79 81 84 86 88 89 91 94 100 103 105 111 113 118 119 122 124 125 126 127 128 131 133 134 135 139 140 141 142 144 146 147 149 150 151 152 153 155 158 163 164 166 176 180 182 183 184 186 190 191 192 194 195 196 197 201 203 205 207 212 215 217 219 222 # 19433 union c a 224 0 1 e b 224 0 1 e # 19434 union c a 224 0 1 e b 224 0 1 e # 19435 union c a 224 0 1 e b 224 0 1 e # 19436 union c a 224 0 1 e b 224 0 1 f # 19437 union c a 224 0 1 e b 224 0 1 e # 19438 union c a 224 0 1 e b 224 0 1 0 1 2 4 6 8 13 18 19 20 21 22 24 25 30 31 33 36 38 39 43 44 48 49 51 52 53 54 55 56 63 64 65 66 67 68 69 70 72 75 76 79 88 89 90 93 94 96 97 99 100 103 106 108 109 110 114 115 116 119 122 123 125 126 127 128 130 131 133 135 142 143 144 145 146 147 151 154 155 157 158 160 165 167 168 169 172 174 175 177 179 180 181 182 185 187 189 193 194 195 198 202 204 205 206 214 215 218 219 223 # 19439 union c a 224 0 1 f b 224 0 1 f # 19440 union c a 224 0 1 f b 224 0 1 e # 19441 union c a 224 0 1 f b 224 0 1 f # 19442 union c a 224 0 1 f b 224 0 1 f # 19443 union c a 224 0 1 f b 224 0 1 f # 19444 union c a 224 0 1 f b 224 0 1 2 3 4 5 7 9 12 14 16 18 20 21 23 24 26 28 29 30 31 33 34 35 37 38 39 40 42 43 45 46 48 49 51 53 54 56 58 59 61 62 63 66 67 69 70 72 73 78 80 84 85 86 87 89 90 91 94 95 96 98 101 102 106 107 112 113 114 115 116 117 118 120 124 125 127 131 132 134 136 137 141 142 143 144 145 146 148 150 152 153 154 155 156 157 158 164 166 167 168 170 173 175 177 182 190 191 192 193 194 195 197 198 200 201 205 207 208 209 212 213 214 219 220 222 223 # 19445 union c a 224 0 1 1 2 6 10 11 12 13 14 15 16 17 18 19 20 21 22 24 27 28 31 32 36 38 39 41 42 44 52 54 55 56 58 60 63 65 71 72 73 75 79 80 83 84 86 88 90 91 92 97 99 100 101 103 104 105 106 109 111 113 114 118 120 121 122 123 126 127 133 135 136 137 139 140 142 145 146 150 153 154 157 161 162 163 164 165 166 168 169 171 175 180 181 182 183 184 185 187 188 189 194 197 198 200 204 205 206 207 208 211 214 215 216 218 219 220 222 b 224 0 1 1 2 6 10 11 12 13 14 15 16 17 18 19 20 21 22 24 27 28 31 32 36 38 39 41 42 44 52 54 55 56 58 60 63 65 71 72 73 75 79 80 83 84 86 88 90 91 92 97 99 100 101 103 104 105 106 109 111 113 114 118 120 121 122 123 126 127 133 135 136 137 139 140 142 145 146 150 153 154 157 161 162 163 164 165 166 168 169 171 175 180 181 182 183 184 185 187 188 189 194 197 198 200 204 205 206 207 208 211 214 215 216 218 219 220 222 # 19446 union c a 224 0 1 1 2 6 10 11 12 13 14 15 16 17 18 19 20 21 22 24 27 28 31 32 36 38 39 41 42 44 52 54 55 56 58 60 63 65 71 72 73 75 79 80 83 84 86 88 90 91 92 97 99 100 101 103 104 105 106 109 111 113 114 118 120 121 122 123 126 127 133 135 136 137 139 140 142 145 146 150 153 154 157 161 162 163 164 165 166 168 169 171 175 180 181 182 183 184 185 187 188 189 194 197 198 200 204 205 206 207 208 211 214 215 216 218 219 220 222 b 224 0 1 e # 19447 union c a 224 0 1 0 1 2 3 4 8 10 13 16 17 18 21 24 26 27 28 29 32 35 36 37 41 42 44 46 47 49 50 51 54 57 60 61 62 63 66 67 68 69 72 74 75 76 83 84 89 92 95 97 98 100 102 103 104 106 107 108 112 113 114 116 118 120 123 125 126 127 128 129 131 134 136 139 140 141 142 145 146 149 150 152 154 156 157 159 161 163 166 167 168 170 172 173 174 176 177 178 179 180 181 183 184 187 188 189 190 192 195 198 201 202 205 206 208 209 212 215 216 218 219 223 b 224 0 1 0 1 2 3 4 8 10 13 16 17 18 21 24 26 27 28 29 32 35 36 37 41 42 44 46 47 49 50 51 54 57 60 61 62 63 66 67 68 69 72 74 75 76 83 84 89 92 95 97 98 100 102 103 104 106 107 108 112 113 114 116 118 120 123 125 126 127 128 129 131 134 136 139 140 141 142 145 146 149 150 152 154 156 157 159 161 163 166 167 168 170 172 173 174 176 177 178 179 180 181 183 184 187 188 189 190 192 195 198 201 202 205 206 208 209 212 215 216 218 219 223 # 19448 union c a 224 0 1 0 1 2 3 4 8 10 13 16 17 18 21 24 26 27 28 29 32 35 36 37 41 42 44 46 47 49 50 51 54 57 60 61 62 63 66 67 68 69 72 74 75 76 83 84 89 92 95 97 98 100 102 103 104 106 107 108 112 113 114 116 118 120 123 125 126 127 128 129 131 134 136 139 140 141 142 145 146 149 150 152 154 156 157 159 161 163 166 167 168 170 172 173 174 176 177 178 179 180 181 183 184 187 188 189 190 192 195 198 201 202 205 206 208 209 212 215 216 218 219 223 b 224 0 1 f # 19449 union c a 224 0 1 0 2 4 5 8 10 12 13 15 16 17 23 24 25 26 29 37 39 44 45 46 47 51 52 54 55 58 59 63 65 67 68 69 70 71 72 73 75 76 78 81 82 85 86 87 89 90 91 94 95 96 97 99 100 102 103 105 106 107 111 114 115 116 117 118 120 121 122 125 126 128 130 132 133 135 136 137 138 139 142 143 145 146 148 149 150 151 152 153 154 157 162 165 167 168 170 173 175 182 184 185 186 188 190 192 194 195 197 198 201 202 203 204 206 208 214 217 218 220 221 222 223 b 224 0 1 0 2 4 5 8 10 12 13 15 16 17 23 24 25 26 29 37 39 44 45 46 47 51 52 54 55 58 59 63 65 67 68 69 70 71 72 73 75 76 78 81 82 85 86 87 89 90 91 94 95 96 97 99 100 102 103 105 106 107 111 114 115 116 117 118 120 121 122 125 126 128 130 132 133 135 136 137 138 139 142 143 145 146 148 149 150 151 152 153 154 157 162 165 167 168 170 173 175 182 184 185 186 188 190 192 194 195 197 198 201 202 203 204 206 208 214 217 218 220 221 222 223 # 19450 union c a 224 0 1 0 2 4 5 8 10 12 13 15 16 17 23 24 25 26 29 37 39 44 45 46 47 51 52 54 55 58 59 63 65 67 68 69 70 71 72 73 75 76 78 81 82 85 86 87 89 90 91 94 95 96 97 99 100 102 103 105 106 107 111 114 115 116 117 118 120 121 122 125 126 128 130 132 133 135 136 137 138 139 142 143 145 146 148 149 150 151 152 153 154 157 162 165 167 168 170 173 175 182 184 185 186 188 190 192 194 195 197 198 201 202 203 204 206 208 214 217 218 220 221 222 223 b 224 0 1 1 2 3 4 5 7 8 10 12 14 15 16 20 22 24 25 26 27 29 30 31 37 39 40 41 43 49 52 55 56 58 60 61 65 66 69 72 73 77 78 79 82 88 90 91 96 97 98 100 102 103 107 108 114 115 116 119 120 124 125 126 127 128 129 131 134 135 141 142 143 145 146 152 153 154 155 161 162 164 165 168 169 170 172 173 176 178 180 181 182 183 184 185 186 192 194 195 200 202 203 206 208 209 210 211 212 213 214 216 218 219 220 223 # 19451 union c a 224 0 1 e b 224 0 1 e # 19452 union c a 224 0 1 e b 224 1 0 e # 19453 union c a 224 0 1 e b 224 0 1 e # 19454 union c a 224 0 1 e b 224 1 0 f # 19455 union c a 224 0 1 e b 224 0 1 e # 19456 union c a 224 0 1 e b 224 1 0 0 2 3 4 7 8 9 14 15 17 18 19 20 24 27 29 38 43 44 46 48 51 52 53 55 56 57 58 60 62 65 67 71 72 73 74 75 76 79 80 82 83 85 86 88 89 90 92 94 99 100 101 102 103 105 106 109 115 118 119 120 121 123 127 129 130 132 133 134 137 138 139 140 142 146 147 149 150 152 155 157 158 159 160 163 166 167 168 169 171 172 174 176 177 180 181 182 183 186 187 190 192 193 194 197 198 200 202 203 204 205 207 208 210 211 213 214 215 216 220 223 # 19457 union c a 224 0 1 f b 224 0 1 f # 19458 union c a 224 0 1 f b 224 1 0 e # 19459 union c a 224 0 1 f b 224 0 1 f # 19460 union c a 224 0 1 f b 224 1 0 f # 19461 union c a 224 0 1 f b 224 0 1 f # 19462 union c a 224 0 1 f b 224 1 0 6 8 9 10 11 12 15 16 18 22 24 27 28 29 30 31 35 40 42 43 48 52 55 56 57 58 59 60 61 62 64 69 70 72 73 77 78 80 83 84 85 87 88 91 92 95 97 99 100 103 104 105 109 113 115 116 117 118 119 120 122 123 126 127 130 132 134 135 138 139 155 156 158 160 161 162 165 167 168 172 173 174 178 182 183 184 185 186 187 189 191 192 193 196 197 199 200 201 202 203 205 206 207 208 209 212 213 215 216 221 # 19463 union c a 224 0 1 0 1 2 8 12 15 16 19 21 22 26 27 28 29 31 32 36 38 39 40 41 43 46 48 53 54 55 57 58 60 62 64 66 68 75 76 77 78 79 89 90 91 93 95 96 99 100 101 106 109 111 113 118 121 123 125 126 131 132 136 141 146 147 148 149 152 153 156 157 158 159 161 162 169 170 171 172 176 178 179 183 184 187 189 190 191 192 193 194 196 198 201 207 208 210 211 212 213 214 215 219 222 b 224 0 1 0 1 2 8 12 15 16 19 21 22 26 27 28 29 31 32 36 38 39 40 41 43 46 48 53 54 55 57 58 60 62 64 66 68 75 76 77 78 79 89 90 91 93 95 96 99 100 101 106 109 111 113 118 121 123 125 126 131 132 136 141 146 147 148 149 152 153 156 157 158 159 161 162 169 170 171 172 176 178 179 183 184 187 189 190 191 192 193 194 196 198 201 207 208 210 211 212 213 214 215 219 222 # 19464 union c a 224 0 1 0 1 2 8 12 15 16 19 21 22 26 27 28 29 31 32 36 38 39 40 41 43 46 48 53 54 55 57 58 60 62 64 66 68 75 76 77 78 79 89 90 91 93 95 96 99 100 101 106 109 111 113 118 121 123 125 126 131 132 136 141 146 147 148 149 152 153 156 157 158 159 161 162 169 170 171 172 176 178 179 183 184 187 189 190 191 192 193 194 196 198 201 207 208 210 211 212 213 214 215 219 222 b 224 1 0 e # 19465 union c a 224 0 1 0 1 2 3 5 7 8 9 10 11 14 15 16 17 18 19 20 21 25 29 30 32 35 37 38 39 41 42 43 45 46 48 49 50 52 54 55 57 59 60 62 63 64 66 67 68 70 73 76 77 78 79 80 81 85 87 88 89 91 94 95 96 98 99 100 101 104 106 107 110 113 114 116 119 121 122 125 127 130 133 139 140 143 145 149 154 155 156 158 160 165 166 167 170 171 172 174 175 182 183 184 185 187 190 192 194 197 199 202 205 207 212 215 217 219 220 223 b 224 0 1 0 1 2 3 5 7 8 9 10 11 14 15 16 17 18 19 20 21 25 29 30 32 35 37 38 39 41 42 43 45 46 48 49 50 52 54 55 57 59 60 62 63 64 66 67 68 70 73 76 77 78 79 80 81 85 87 88 89 91 94 95 96 98 99 100 101 104 106 107 110 113 114 116 119 121 122 125 127 130 133 139 140 143 145 149 154 155 156 158 160 165 166 167 170 171 172 174 175 182 183 184 185 187 190 192 194 197 199 202 205 207 212 215 217 219 220 223 # 19466 union c a 224 0 1 0 1 2 3 5 7 8 9 10 11 14 15 16 17 18 19 20 21 25 29 30 32 35 37 38 39 41 42 43 45 46 48 49 50 52 54 55 57 59 60 62 63 64 66 67 68 70 73 76 77 78 79 80 81 85 87 88 89 91 94 95 96 98 99 100 101 104 106 107 110 113 114 116 119 121 122 125 127 130 133 139 140 143 145 149 154 155 156 158 160 165 166 167 170 171 172 174 175 182 183 184 185 187 190 192 194 197 199 202 205 207 212 215 217 219 220 223 b 224 1 0 f # 19467 union c a 224 0 1 0 2 7 9 10 11 12 14 15 16 17 19 21 25 32 34 35 38 39 41 42 43 44 45 46 47 48 51 53 55 56 57 62 63 64 65 66 69 76 79 80 81 82 84 86 87 88 92 98 100 101 102 106 108 110 111 112 113 115 116 119 121 124 126 128 130 131 133 135 138 141 144 147 148 149 150 153 158 160 162 166 169 170 171 172 173 175 177 183 185 187 190 191 192 193 195 199 202 206 207 208 210 212 215 217 218 219 221 222 223 b 224 0 1 0 2 7 9 10 11 12 14 15 16 17 19 21 25 32 34 35 38 39 41 42 43 44 45 46 47 48 51 53 55 56 57 62 63 64 65 66 69 76 79 80 81 82 84 86 87 88 92 98 100 101 102 106 108 110 111 112 113 115 116 119 121 124 126 128 130 131 133 135 138 141 144 147 148 149 150 153 158 160 162 166 169 170 171 172 173 175 177 183 185 187 190 191 192 193 195 199 202 206 207 208 210 212 215 217 218 219 221 222 223 # 19468 union c a 224 0 1 0 2 7 9 10 11 12 14 15 16 17 19 21 25 32 34 35 38 39 41 42 43 44 45 46 47 48 51 53 55 56 57 62 63 64 65 66 69 76 79 80 81 82 84 86 87 88 92 98 100 101 102 106 108 110 111 112 113 115 116 119 121 124 126 128 130 131 133 135 138 141 144 147 148 149 150 153 158 160 162 166 169 170 171 172 173 175 177 183 185 187 190 191 192 193 195 199 202 206 207 208 210 212 215 217 218 219 221 222 223 b 224 1 0 0 1 2 3 6 8 10 11 12 13 14 15 17 19 21 22 23 24 25 27 30 33 37 38 41 45 46 47 48 50 51 52 53 54 55 58 59 61 63 64 71 72 73 76 81 84 89 91 92 94 96 97 98 104 105 106 107 108 109 112 113 114 115 116 118 123 124 127 133 134 142 145 150 157 158 159 163 164 165 170 171 172 173 176 177 180 182 186 187 189 190 192 193 195 196 200 203 205 208 209 210 211 212 216 217 219 220 223 # 19469 union c a 224 0 1 e b 224 0 1 e # 19470 union c a 224 0 1 e b 224 1 1 e # 19471 union c a 224 0 1 e b 224 0 1 e # 19472 union c a 224 0 1 e b 224 1 1 f # 19473 union c a 224 0 1 e b 224 0 1 e # 19474 union c a 224 0 1 e b 224 1 1 1 2 6 8 14 15 18 20 21 22 23 24 26 27 31 32 34 37 40 41 48 49 50 51 52 55 56 58 62 65 66 67 68 71 72 73 74 76 78 79 84 85 87 89 90 91 93 95 96 97 98 99 101 104 107 108 111 112 113 115 116 122 123 133 134 135 138 139 142 146 148 152 154 156 158 159 160 163 164 166 169 171 172 180 181 183 188 191 193 194 196 197 198 201 205 206 207 208 210 211 215 216 217 218 219 220 222 # 19475 union c a 224 0 1 f b 224 0 1 f # 19476 union c a 224 0 1 f b 224 1 1 e # 19477 union c a 224 0 1 f b 224 0 1 f # 19478 union c a 224 0 1 f b 224 1 1 f # 19479 union c a 224 0 1 f b 224 0 1 f # 19480 union c a 224 0 1 f b 224 1 1 0 2 3 5 7 8 9 11 12 13 14 15 17 21 24 27 29 35 36 37 39 40 41 42 43 44 47 49 52 53 54 55 56 57 60 61 62 64 67 69 70 76 77 80 81 82 83 89 90 92 93 94 95 98 99 100 104 105 106 107 109 112 113 114 118 119 121 124 126 128 129 131 133 137 139 140 143 146 147 148 149 150 156 159 161 165 166 167 168 169 170 171 175 178 181 183 185 186 191 193 195 197 198 200 201 202 204 208 210 214 215 217 219 221 223 # 19481 union c a 224 0 1 1 3 4 7 8 11 12 13 15 18 19 21 22 23 24 28 29 32 33 36 37 39 40 42 43 48 53 54 58 62 64 66 67 68 69 70 71 73 74 75 80 86 87 88 89 90 92 93 94 95 96 98 99 101 102 103 104 105 106 108 109 110 111 114 115 116 117 118 119 121 125 131 134 137 138 140 141 142 144 145 147 148 149 152 153 154 156 158 160 164 166 167 168 169 171 174 179 181 183 185 189 191 193 195 196 197 198 199 200 202 205 206 207 208 209 210 212 213 216 221 223 b 224 0 1 1 3 4 7 8 11 12 13 15 18 19 21 22 23 24 28 29 32 33 36 37 39 40 42 43 48 53 54 58 62 64 66 67 68 69 70 71 73 74 75 80 86 87 88 89 90 92 93 94 95 96 98 99 101 102 103 104 105 106 108 109 110 111 114 115 116 117 118 119 121 125 131 134 137 138 140 141 142 144 145 147 148 149 152 153 154 156 158 160 164 166 167 168 169 171 174 179 181 183 185 189 191 193 195 196 197 198 199 200 202 205 206 207 208 209 210 212 213 216 221 223 # 19482 union c a 224 0 1 1 3 4 7 8 11 12 13 15 18 19 21 22 23 24 28 29 32 33 36 37 39 40 42 43 48 53 54 58 62 64 66 67 68 69 70 71 73 74 75 80 86 87 88 89 90 92 93 94 95 96 98 99 101 102 103 104 105 106 108 109 110 111 114 115 116 117 118 119 121 125 131 134 137 138 140 141 142 144 145 147 148 149 152 153 154 156 158 160 164 166 167 168 169 171 174 179 181 183 185 189 191 193 195 196 197 198 199 200 202 205 206 207 208 209 210 212 213 216 221 223 b 224 1 1 e # 19483 union c a 224 0 1 0 2 3 5 6 8 17 19 20 21 23 25 27 28 32 36 37 38 39 43 45 46 47 48 50 51 53 54 56 57 61 62 64 66 67 69 70 71 72 79 80 81 82 84 86 87 89 91 92 95 98 99 101 105 106 109 112 114 115 116 118 121 125 126 127 129 133 134 135 136 141 142 144 145 147 150 151 154 156 157 160 161 162 164 166 167 168 172 174 175 176 178 180 181 182 183 184 185 187 188 189 191 193 194 197 198 202 205 209 210 212 213 215 216 217 218 219 221 223 b 224 0 1 0 2 3 5 6 8 17 19 20 21 23 25 27 28 32 36 37 38 39 43 45 46 47 48 50 51 53 54 56 57 61 62 64 66 67 69 70 71 72 79 80 81 82 84 86 87 89 91 92 95 98 99 101 105 106 109 112 114 115 116 118 121 125 126 127 129 133 134 135 136 141 142 144 145 147 150 151 154 156 157 160 161 162 164 166 167 168 172 174 175 176 178 180 181 182 183 184 185 187 188 189 191 193 194 197 198 202 205 209 210 212 213 215 216 217 218 219 221 223 # 19484 union c a 224 0 1 0 2 3 5 6 8 17 19 20 21 23 25 27 28 32 36 37 38 39 43 45 46 47 48 50 51 53 54 56 57 61 62 64 66 67 69 70 71 72 79 80 81 82 84 86 87 89 91 92 95 98 99 101 105 106 109 112 114 115 116 118 121 125 126 127 129 133 134 135 136 141 142 144 145 147 150 151 154 156 157 160 161 162 164 166 167 168 172 174 175 176 178 180 181 182 183 184 185 187 188 189 191 193 194 197 198 202 205 209 210 212 213 215 216 217 218 219 221 223 b 224 1 1 f # 19485 union c a 224 0 1 0 6 7 9 10 11 12 18 19 20 21 22 23 24 29 34 35 36 37 38 40 41 43 44 45 48 51 53 54 55 59 63 64 66 67 70 76 77 79 81 82 84 85 88 89 93 94 97 98 99 101 105 106 108 111 112 115 116 117 118 119 120 123 124 128 130 134 136 138 139 140 141 142 143 151 152 154 155 156 158 159 161 162 163 165 169 170 171 172 173 174 176 180 181 187 190 191 193 194 197 198 199 200 201 202 203 208 209 210 213 214 215 218 219 222 223 b 224 0 1 0 6 7 9 10 11 12 18 19 20 21 22 23 24 29 34 35 36 37 38 40 41 43 44 45 48 51 53 54 55 59 63 64 66 67 70 76 77 79 81 82 84 85 88 89 93 94 97 98 99 101 105 106 108 111 112 115 116 117 118 119 120 123 124 128 130 134 136 138 139 140 141 142 143 151 152 154 155 156 158 159 161 162 163 165 169 170 171 172 173 174 176 180 181 187 190 191 193 194 197 198 199 200 201 202 203 208 209 210 213 214 215 218 219 222 223 # 19486 union c a 224 0 1 0 6 7 9 10 11 12 18 19 20 21 22 23 24 29 34 35 36 37 38 40 41 43 44 45 48 51 53 54 55 59 63 64 66 67 70 76 77 79 81 82 84 85 88 89 93 94 97 98 99 101 105 106 108 111 112 115 116 117 118 119 120 123 124 128 130 134 136 138 139 140 141 142 143 151 152 154 155 156 158 159 161 162 163 165 169 170 171 172 173 174 176 180 181 187 190 191 193 194 197 198 199 200 201 202 203 208 209 210 213 214 215 218 219 222 223 b 224 1 1 3 5 8 12 13 14 18 19 21 22 23 27 28 32 33 34 36 38 40 42 44 46 48 49 52 56 57 58 59 60 62 63 65 66 67 69 72 74 75 76 77 79 80 81 83 86 87 89 90 93 94 95 96 97 98 100 103 106 108 110 111 116 119 123 124 126 127 130 131 132 134 136 139 140 143 144 145 149 151 153 154 156 157 158 161 163 165 169 170 175 177 179 180 181 182 183 184 185 187 188 190 191 194 195 198 199 200 201 202 207 208 209 210 211 212 213 214 216 217 219 222 # 19487 union c a 224 1 0 e b 224 1 0 e # 19488 union c a 224 1 0 e b 224 0 0 e # 19489 union c a 224 1 0 e b 224 1 0 e # 19490 union c a 224 1 0 e b 224 0 0 f # 19491 union c a 224 1 0 e b 224 1 0 e # 19492 union c a 224 1 0 e b 224 0 0 1 3 4 7 11 12 14 15 17 19 20 23 25 28 30 32 35 37 38 39 43 44 46 47 48 50 51 55 57 62 65 67 68 70 71 74 77 80 84 85 87 88 91 92 93 96 99 100 101 102 105 107 109 112 114 115 118 119 120 121 122 124 126 127 128 129 130 132 134 138 139 140 143 144 146 147 150 153 154 159 164 166 167 169 170 172 173 175 178 179 180 181 182 184 185 186 187 190 191 196 197 200 201 202 203 204 210 212 213 215 216 218 219 221 222 223 # 19493 union c a 224 1 0 f b 224 1 0 f # 19494 union c a 224 1 0 f b 224 0 0 e # 19495 union c a 224 1 0 f b 224 1 0 f # 19496 union c a 224 1 0 f b 224 0 0 f # 19497 union c a 224 1 0 f b 224 1 0 f # 19498 union c a 224 1 0 f b 224 0 0 1 3 4 7 9 13 14 15 17 18 20 22 24 25 31 34 36 37 38 40 42 45 46 47 49 50 53 54 56 61 62 63 65 66 68 69 70 71 73 74 75 77 78 79 80 81 84 85 86 90 91 92 93 102 103 104 105 106 108 109 111 113 116 118 119 122 126 127 128 130 133 136 138 139 140 142 146 147 148 150 152 153 154 156 158 159 160 161 162 164 166 167 169 170 173 174 177 188 190 193 194 199 206 207 208 212 213 216 217 219 223 # 19499 union c a 224 1 0 1 3 5 7 9 11 12 14 15 16 19 20 21 22 23 24 26 28 29 32 33 36 37 44 49 56 59 61 66 69 71 73 76 77 78 81 82 83 87 88 89 90 91 93 95 97 99 100 101 105 106 110 111 113 114 115 118 120 127 129 130 134 135 136 137 143 147 148 151 152 156 157 161 162 163 165 166 168 170 171 172 174 176 181 189 190 191 192 193 194 195 196 197 201 206 207 211 212 213 217 b 224 1 0 1 3 5 7 9 11 12 14 15 16 19 20 21 22 23 24 26 28 29 32 33 36 37 44 49 56 59 61 66 69 71 73 76 77 78 81 82 83 87 88 89 90 91 93 95 97 99 100 101 105 106 110 111 113 114 115 118 120 127 129 130 134 135 136 137 143 147 148 151 152 156 157 161 162 163 165 166 168 170 171 172 174 176 181 189 190 191 192 193 194 195 196 197 201 206 207 211 212 213 217 # 19500 union c a 224 1 0 1 3 5 7 9 11 12 14 15 16 19 20 21 22 23 24 26 28 29 32 33 36 37 44 49 56 59 61 66 69 71 73 76 77 78 81 82 83 87 88 89 90 91 93 95 97 99 100 101 105 106 110 111 113 114 115 118 120 127 129 130 134 135 136 137 143 147 148 151 152 156 157 161 162 163 165 166 168 170 171 172 174 176 181 189 190 191 192 193 194 195 196 197 201 206 207 211 212 213 217 b 224 0 0 e # 19501 union c a 224 1 0 0 1 3 4 7 9 11 12 13 14 20 21 25 26 27 29 32 34 35 36 38 40 41 43 44 45 49 52 53 56 64 66 67 68 69 71 72 73 74 75 76 78 79 83 85 88 90 92 95 96 98 103 105 106 107 109 110 115 116 117 119 121 125 127 132 133 135 136 138 139 140 141 145 146 148 151 160 161 162 164 168 171 173 174 175 176 177 178 179 182 184 185 186 187 194 196 198 199 200 206 209 210 211 213 215 216 218 220 b 224 1 0 0 1 3 4 7 9 11 12 13 14 20 21 25 26 27 29 32 34 35 36 38 40 41 43 44 45 49 52 53 56 64 66 67 68 69 71 72 73 74 75 76 78 79 83 85 88 90 92 95 96 98 103 105 106 107 109 110 115 116 117 119 121 125 127 132 133 135 136 138 139 140 141 145 146 148 151 160 161 162 164 168 171 173 174 175 176 177 178 179 182 184 185 186 187 194 196 198 199 200 206 209 210 211 213 215 216 218 220 # 19502 union c a 224 1 0 0 1 3 4 7 9 11 12 13 14 20 21 25 26 27 29 32 34 35 36 38 40 41 43 44 45 49 52 53 56 64 66 67 68 69 71 72 73 74 75 76 78 79 83 85 88 90 92 95 96 98 103 105 106 107 109 110 115 116 117 119 121 125 127 132 133 135 136 138 139 140 141 145 146 148 151 160 161 162 164 168 171 173 174 175 176 177 178 179 182 184 185 186 187 194 196 198 199 200 206 209 210 211 213 215 216 218 220 b 224 0 0 f # 19503 union c a 224 1 0 0 3 6 11 12 14 17 18 19 20 22 25 26 33 35 37 39 41 43 47 54 55 56 60 61 64 65 67 68 70 71 74 76 81 83 84 86 87 88 92 93 94 95 97 98 103 104 110 111 114 117 122 126 127 129 130 131 134 135 137 139 142 143 145 146 147 148 152 153 155 158 159 161 162 164 165 168 169 174 175 177 178 181 182 183 184 186 188 189 191 197 198 199 200 204 206 209 210 212 213 215 216 219 221 222 223 b 224 1 0 0 3 6 11 12 14 17 18 19 20 22 25 26 33 35 37 39 41 43 47 54 55 56 60 61 64 65 67 68 70 71 74 76 81 83 84 86 87 88 92 93 94 95 97 98 103 104 110 111 114 117 122 126 127 129 130 131 134 135 137 139 142 143 145 146 147 148 152 153 155 158 159 161 162 164 165 168 169 174 175 177 178 181 182 183 184 186 188 189 191 197 198 199 200 204 206 209 210 212 213 215 216 219 221 222 223 # 19504 union c a 224 1 0 0 3 6 11 12 14 17 18 19 20 22 25 26 33 35 37 39 41 43 47 54 55 56 60 61 64 65 67 68 70 71 74 76 81 83 84 86 87 88 92 93 94 95 97 98 103 104 110 111 114 117 122 126 127 129 130 131 134 135 137 139 142 143 145 146 147 148 152 153 155 158 159 161 162 164 165 168 169 174 175 177 178 181 182 183 184 186 188 189 191 197 198 199 200 204 206 209 210 212 213 215 216 219 221 222 223 b 224 0 0 8 9 11 12 18 19 20 22 23 24 25 26 27 28 30 31 32 33 35 37 39 40 41 42 43 45 46 49 52 55 57 58 59 62 67 70 74 77 78 79 80 82 83 84 87 90 91 92 93 94 98 99 100 101 103 107 111 112 114 115 116 118 119 121 122 124 125 128 131 134 136 139 140 141 142 143 145 147 148 150 152 153 154 155 158 160 163 164 165 169 171 174 175 178 181 182 187 188 193 196 197 198 199 200 202 204 205 206 207 208 209 213 214 215 218 222 223 # 19505 union c a 224 1 0 e b 224 1 0 e # 19506 union c a 224 1 0 e b 224 0 1 e # 19507 union c a 224 1 0 e b 224 1 0 e # 19508 union c a 224 1 0 e b 224 0 1 f # 19509 union c a 224 1 0 e b 224 1 0 e # 19510 union c a 224 1 0 e b 224 0 1 3 5 6 7 9 11 12 14 15 16 23 26 27 28 29 30 32 43 44 46 47 48 49 51 53 54 55 57 58 61 64 65 66 68 69 70 76 77 78 80 84 86 88 89 93 94 96 97 98 99 100 102 104 110 112 115 116 118 119 123 128 129 130 131 133 134 138 140 141 142 143 147 148 150 151 152 153 154 157 158 160 161 162 164 165 166 167 177 185 186 188 190 191 193 195 196 198 200 202 203 204 205 208 209 211 213 216 217 218 219 221 222 223 # 19511 union c a 224 1 0 f b 224 1 0 f # 19512 union c a 224 1 0 f b 224 0 1 e # 19513 union c a 224 1 0 f b 224 1 0 f # 19514 union c a 224 1 0 f b 224 0 1 f # 19515 union c a 224 1 0 f b 224 1 0 f # 19516 union c a 224 1 0 f b 224 0 1 2 5 11 13 15 16 17 18 19 26 27 29 31 32 34 36 38 40 41 43 44 46 49 51 53 54 57 59 60 61 63 64 67 68 69 71 72 74 75 76 77 80 81 82 83 84 85 88 89 90 91 96 97 99 100 101 102 103 109 111 114 123 124 125 127 129 130 133 134 135 138 143 144 146 148 150 152 154 155 156 158 160 161 162 164 165 167 172 173 175 180 182 183 185 186 188 189 190 191 192 193 197 199 200 201 203 204 208 209 210 212 213 217 218 220 221 # 19517 union c a 224 1 0 0 1 2 4 6 7 12 13 14 16 17 18 19 20 26 27 31 35 36 38 42 45 46 47 48 49 50 51 52 53 54 57 60 61 65 68 69 70 73 74 76 79 89 90 95 97 98 100 101 102 103 108 109 110 116 117 118 120 121 125 126 127 128 129 130 132 133 137 140 144 145 146 147 148 149 151 152 153 154 156 157 158 160 161 162 163 164 166 167 172 173 174 175 176 178 179 183 184 187 195 196 198 200 202 203 204 206 207 208 209 212 213 215 218 219 220 221 223 b 224 1 0 0 1 2 4 6 7 12 13 14 16 17 18 19 20 26 27 31 35 36 38 42 45 46 47 48 49 50 51 52 53 54 57 60 61 65 68 69 70 73 74 76 79 89 90 95 97 98 100 101 102 103 108 109 110 116 117 118 120 121 125 126 127 128 129 130 132 133 137 140 144 145 146 147 148 149 151 152 153 154 156 157 158 160 161 162 163 164 166 167 172 173 174 175 176 178 179 183 184 187 195 196 198 200 202 203 204 206 207 208 209 212 213 215 218 219 220 221 223 # 19518 union c a 224 1 0 0 1 2 4 6 7 12 13 14 16 17 18 19 20 26 27 31 35 36 38 42 45 46 47 48 49 50 51 52 53 54 57 60 61 65 68 69 70 73 74 76 79 89 90 95 97 98 100 101 102 103 108 109 110 116 117 118 120 121 125 126 127 128 129 130 132 133 137 140 144 145 146 147 148 149 151 152 153 154 156 157 158 160 161 162 163 164 166 167 172 173 174 175 176 178 179 183 184 187 195 196 198 200 202 203 204 206 207 208 209 212 213 215 218 219 220 221 223 b 224 0 1 e # 19519 union c a 224 1 0 1 2 3 4 5 7 9 14 16 18 19 21 22 23 25 26 28 31 34 38 42 43 44 45 47 49 50 51 52 53 54 57 58 61 66 69 70 71 73 75 77 78 79 80 83 87 88 89 90 92 94 98 99 101 102 107 108 110 111 112 115 117 118 120 121 122 123 124 126 128 129 134 135 138 141 144 145 149 150 152 153 154 155 157 160 161 164 170 171 172 175 176 182 185 186 188 190 192 194 195 197 199 202 204 207 208 209 213 216 218 220 221 222 223 b 224 1 0 1 2 3 4 5 7 9 14 16 18 19 21 22 23 25 26 28 31 34 38 42 43 44 45 47 49 50 51 52 53 54 57 58 61 66 69 70 71 73 75 77 78 79 80 83 87 88 89 90 92 94 98 99 101 102 107 108 110 111 112 115 117 118 120 121 122 123 124 126 128 129 134 135 138 141 144 145 149 150 152 153 154 155 157 160 161 164 170 171 172 175 176 182 185 186 188 190 192 194 195 197 199 202 204 207 208 209 213 216 218 220 221 222 223 # 19520 union c a 224 1 0 1 2 3 4 5 7 9 14 16 18 19 21 22 23 25 26 28 31 34 38 42 43 44 45 47 49 50 51 52 53 54 57 58 61 66 69 70 71 73 75 77 78 79 80 83 87 88 89 90 92 94 98 99 101 102 107 108 110 111 112 115 117 118 120 121 122 123 124 126 128 129 134 135 138 141 144 145 149 150 152 153 154 155 157 160 161 164 170 171 172 175 176 182 185 186 188 190 192 194 195 197 199 202 204 207 208 209 213 216 218 220 221 222 223 b 224 0 1 f # 19521 union c a 224 1 0 0 1 2 4 7 8 12 18 22 24 25 26 28 29 31 33 37 39 43 44 45 50 51 53 54 56 57 58 61 63 64 72 73 75 77 79 81 83 84 86 89 90 91 92 94 95 96 97 98 99 104 105 108 109 112 113 114 117 118 120 121 125 127 128 130 134 138 142 143 144 145 148 150 153 154 155 156 158 159 161 163 167 168 172 173 175 176 177 178 181 182 183 184 185 187 190 191 192 194 196 198 199 200 202 207 208 212 214 215 219 220 223 b 224 1 0 0 1 2 4 7 8 12 18 22 24 25 26 28 29 31 33 37 39 43 44 45 50 51 53 54 56 57 58 61 63 64 72 73 75 77 79 81 83 84 86 89 90 91 92 94 95 96 97 98 99 104 105 108 109 112 113 114 117 118 120 121 125 127 128 130 134 138 142 143 144 145 148 150 153 154 155 156 158 159 161 163 167 168 172 173 175 176 177 178 181 182 183 184 185 187 190 191 192 194 196 198 199 200 202 207 208 212 214 215 219 220 223 # 19522 union c a 224 1 0 0 1 2 4 7 8 12 18 22 24 25 26 28 29 31 33 37 39 43 44 45 50 51 53 54 56 57 58 61 63 64 72 73 75 77 79 81 83 84 86 89 90 91 92 94 95 96 97 98 99 104 105 108 109 112 113 114 117 118 120 121 125 127 128 130 134 138 142 143 144 145 148 150 153 154 155 156 158 159 161 163 167 168 172 173 175 176 177 178 181 182 183 184 185 187 190 191 192 194 196 198 199 200 202 207 208 212 214 215 219 220 223 b 224 0 1 2 5 6 9 10 13 17 22 23 24 26 27 28 35 39 41 43 44 45 46 48 52 55 56 57 58 59 62 63 64 66 68 69 70 72 75 76 79 80 81 82 83 86 90 92 93 97 98 100 101 102 103 104 106 107 110 112 113 114 116 117 122 123 125 127 128 131 132 134 135 136 137 138 141 149 150 155 157 158 164 167 170 171 172 174 176 178 181 182 183 186 187 189 193 194 197 199 204 206 207 208 209 210 213 215 216 221 222 223 # 19523 union c a 224 1 0 e b 224 1 0 e # 19524 union c a 224 1 0 e b 224 1 0 e # 19525 union c a 224 1 0 e b 224 1 0 e # 19526 union c a 224 1 0 e b 224 1 0 f # 19527 union c a 224 1 0 e b 224 1 0 e # 19528 union c a 224 1 0 e b 224 1 0 3 5 7 8 9 10 11 13 18 19 22 24 28 32 33 36 37 38 39 40 41 44 45 46 49 51 53 54 58 60 62 65 66 67 68 69 70 72 74 78 79 81 84 86 88 91 92 95 97 98 99 100 101 104 106 108 109 110 111 112 115 116 118 119 120 122 124 125 127 128 130 131 136 140 143 144 145 147 150 151 152 153 155 156 157 158 159 161 163 165 166 167 168 171 172 173 174 175 176 178 180 181 183 184 185 188 192 193 194 197 201 204 207 210 214 216 218 219 220 221 222 223 # 19529 union c a 224 1 0 f b 224 1 0 f # 19530 union c a 224 1 0 f b 224 1 0 e # 19531 union c a 224 1 0 f b 224 1 0 f # 19532 union c a 224 1 0 f b 224 1 0 f # 19533 union c a 224 1 0 f b 224 1 0 f # 19534 union c a 224 1 0 f b 224 1 0 0 1 2 4 6 8 10 11 15 16 20 22 23 24 38 41 43 45 46 50 51 53 54 58 59 60 61 62 66 67 68 69 72 78 81 83 87 89 92 96 98 99 100 102 103 104 106 107 109 111 113 114 115 118 119 122 124 127 128 131 132 136 141 143 144 146 150 151 152 153 154 160 161 162 163 167 168 169 172 174 175 176 177 178 181 182 183 184 185 189 190 193 195 198 201 203 206 209 212 215 217 219 220 221 # 19535 union c a 224 1 0 0 1 2 3 5 8 9 16 17 18 19 23 25 26 28 37 38 39 43 44 45 47 48 52 53 56 60 61 62 63 67 70 71 72 73 75 76 77 80 81 82 83 84 85 86 87 91 94 95 96 98 99 100 102 103 106 108 110 111 114 117 118 119 122 123 125 126 132 133 137 138 144 145 146 148 149 151 152 153 154 156 158 159 160 161 163 164 171 172 173 175 176 177 180 183 188 189 191 192 194 195 196 201 206 210 212 214 221 222 b 224 1 0 0 1 2 3 5 8 9 16 17 18 19 23 25 26 28 37 38 39 43 44 45 47 48 52 53 56 60 61 62 63 67 70 71 72 73 75 76 77 80 81 82 83 84 85 86 87 91 94 95 96 98 99 100 102 103 106 108 110 111 114 117 118 119 122 123 125 126 132 133 137 138 144 145 146 148 149 151 152 153 154 156 158 159 160 161 163 164 171 172 173 175 176 177 180 183 188 189 191 192 194 195 196 201 206 210 212 214 221 222 # 19536 union c a 224 1 0 0 1 2 3 5 8 9 16 17 18 19 23 25 26 28 37 38 39 43 44 45 47 48 52 53 56 60 61 62 63 67 70 71 72 73 75 76 77 80 81 82 83 84 85 86 87 91 94 95 96 98 99 100 102 103 106 108 110 111 114 117 118 119 122 123 125 126 132 133 137 138 144 145 146 148 149 151 152 153 154 156 158 159 160 161 163 164 171 172 173 175 176 177 180 183 188 189 191 192 194 195 196 201 206 210 212 214 221 222 b 224 1 0 e # 19537 union c a 224 1 0 1 4 6 9 10 11 13 14 15 16 17 19 20 22 26 27 29 30 34 36 38 39 41 42 43 45 46 54 55 56 57 58 59 61 63 64 67 68 70 75 79 83 84 86 88 89 93 97 99 101 103 107 108 109 113 115 116 119 120 121 124 125 126 128 135 136 137 139 141 142 143 144 146 147 150 154 157 161 162 165 168 169 170 172 173 174 177 179 180 181 189 190 192 194 195 200 203 215 216 217 219 220 221 223 b 224 1 0 1 4 6 9 10 11 13 14 15 16 17 19 20 22 26 27 29 30 34 36 38 39 41 42 43 45 46 54 55 56 57 58 59 61 63 64 67 68 70 75 79 83 84 86 88 89 93 97 99 101 103 107 108 109 113 115 116 119 120 121 124 125 126 128 135 136 137 139 141 142 143 144 146 147 150 154 157 161 162 165 168 169 170 172 173 174 177 179 180 181 189 190 192 194 195 200 203 215 216 217 219 220 221 223 # 19538 union c a 224 1 0 1 4 6 9 10 11 13 14 15 16 17 19 20 22 26 27 29 30 34 36 38 39 41 42 43 45 46 54 55 56 57 58 59 61 63 64 67 68 70 75 79 83 84 86 88 89 93 97 99 101 103 107 108 109 113 115 116 119 120 121 124 125 126 128 135 136 137 139 141 142 143 144 146 147 150 154 157 161 162 165 168 169 170 172 173 174 177 179 180 181 189 190 192 194 195 200 203 215 216 217 219 220 221 223 b 224 1 0 f # 19539 union c a 224 1 0 2 3 4 5 7 9 13 14 18 19 20 25 28 29 30 33 36 38 39 46 48 49 52 53 54 63 65 67 70 72 74 75 76 77 79 80 81 83 86 87 88 92 93 99 100 104 107 109 111 112 113 114 116 117 119 122 127 128 129 132 133 134 135 136 141 144 145 147 148 149 151 156 157 161 162 165 169 170 171 172 173 176 177 179 181 182 183 185 187 188 194 195 197 199 200 201 202 204 206 207 208 210 212 220 221 b 224 1 0 2 3 4 5 7 9 13 14 18 19 20 25 28 29 30 33 36 38 39 46 48 49 52 53 54 63 65 67 70 72 74 75 76 77 79 80 81 83 86 87 88 92 93 99 100 104 107 109 111 112 113 114 116 117 119 122 127 128 129 132 133 134 135 136 141 144 145 147 148 149 151 156 157 161 162 165 169 170 171 172 173 176 177 179 181 182 183 185 187 188 194 195 197 199 200 201 202 204 206 207 208 210 212 220 221 # 19540 union c a 224 1 0 2 3 4 5 7 9 13 14 18 19 20 25 28 29 30 33 36 38 39 46 48 49 52 53 54 63 65 67 70 72 74 75 76 77 79 80 81 83 86 87 88 92 93 99 100 104 107 109 111 112 113 114 116 117 119 122 127 128 129 132 133 134 135 136 141 144 145 147 148 149 151 156 157 161 162 165 169 170 171 172 173 176 177 179 181 182 183 185 187 188 194 195 197 199 200 201 202 204 206 207 208 210 212 220 221 b 224 1 0 2 3 6 7 9 12 15 16 17 19 21 22 23 28 29 32 34 36 37 39 41 47 49 50 51 52 53 54 55 56 59 60 61 63 67 68 70 74 76 84 87 90 97 102 104 105 106 110 111 112 113 115 118 119 120 121 124 125 126 130 131 132 133 136 138 140 141 144 145 147 149 150 152 153 155 156 162 166 169 170 174 176 177 180 181 183 184 185 187 189 190 191 192 193 194 197 199 202 203 205 208 210 211 217 220 223 # 19541 union c a 224 1 0 e b 224 1 0 e # 19542 union c a 224 1 0 e b 224 1 1 e # 19543 union c a 224 1 0 e b 224 1 0 e # 19544 union c a 224 1 0 e b 224 1 1 f # 19545 union c a 224 1 0 e b 224 1 0 e # 19546 union c a 224 1 0 e b 224 1 1 2 4 8 12 13 14 15 19 20 21 23 24 27 28 29 31 32 35 36 37 39 40 41 42 43 44 45 46 47 50 51 53 54 58 64 65 67 69 70 72 73 79 82 83 85 86 87 89 90 94 96 97 100 102 104 106 108 112 113 114 115 116 117 118 119 120 121 124 126 127 131 132 135 136 139 140 142 143 145 146 148 151 153 156 160 161 163 165 169 170 173 174 175 176 177 178 179 182 184 186 187 188 189 191 192 194 195 200 202 205 206 209 211 216 217 219 220 222 223 # 19547 union c a 224 1 0 f b 224 1 0 f # 19548 union c a 224 1 0 f b 224 1 1 e # 19549 union c a 224 1 0 f b 224 1 0 f # 19550 union c a 224 1 0 f b 224 1 1 f # 19551 union c a 224 1 0 f b 224 1 0 f # 19552 union c a 224 1 0 f b 224 1 1 0 2 4 5 6 7 10 13 14 15 16 17 21 23 24 25 26 27 32 35 40 42 43 45 46 48 50 51 52 54 55 56 57 61 65 66 70 71 72 73 74 76 77 78 80 81 83 84 86 87 93 94 96 97 98 99 101 102 104 105 106 107 108 109 111 113 114 120 121 122 123 125 131 134 137 139 142 143 148 149 150 151 152 153 154 156 160 161 162 164 165 166 168 169 173 175 177 180 185 186 187 191 192 195 197 199 200 207 211 212 213 215 216 218 219 222 # 19553 union c a 224 1 0 3 5 6 9 10 11 13 14 15 18 20 23 26 27 29 31 32 33 34 36 39 42 43 46 47 48 50 51 52 59 60 61 62 63 64 65 69 71 72 74 76 78 80 81 83 85 86 87 88 90 91 92 93 94 95 99 100 101 103 104 107 108 111 120 121 123 124 129 130 136 137 140 144 145 146 149 151 152 153 154 155 156 158 160 161 162 166 170 172 173 175 176 178 179 182 185 186 188 189 190 191 192 193 198 200 202 211 212 214 215 216 217 219 220 221 222 223 b 224 1 0 3 5 6 9 10 11 13 14 15 18 20 23 26 27 29 31 32 33 34 36 39 42 43 46 47 48 50 51 52 59 60 61 62 63 64 65 69 71 72 74 76 78 80 81 83 85 86 87 88 90 91 92 93 94 95 99 100 101 103 104 107 108 111 120 121 123 124 129 130 136 137 140 144 145 146 149 151 152 153 154 155 156 158 160 161 162 166 170 172 173 175 176 178 179 182 185 186 188 189 190 191 192 193 198 200 202 211 212 214 215 216 217 219 220 221 222 223 # 19554 union c a 224 1 0 3 5 6 9 10 11 13 14 15 18 20 23 26 27 29 31 32 33 34 36 39 42 43 46 47 48 50 51 52 59 60 61 62 63 64 65 69 71 72 74 76 78 80 81 83 85 86 87 88 90 91 92 93 94 95 99 100 101 103 104 107 108 111 120 121 123 124 129 130 136 137 140 144 145 146 149 151 152 153 154 155 156 158 160 161 162 166 170 172 173 175 176 178 179 182 185 186 188 189 190 191 192 193 198 200 202 211 212 214 215 216 217 219 220 221 222 223 b 224 1 1 e # 19555 union c a 224 1 0 0 3 4 7 8 15 16 17 18 20 21 23 24 25 26 27 28 29 30 37 43 44 45 46 47 48 51 53 54 55 57 58 60 62 64 66 69 73 76 77 79 83 86 87 88 90 91 92 93 94 95 96 97 98 100 102 105 106 108 109 113 115 116 117 119 122 125 132 138 141 142 143 144 145 147 148 149 150 154 155 158 159 162 164 167 168 171 173 174 175 176 178 179 183 184 188 190 192 193 195 197 198 201 204 205 207 210 212 215 216 217 218 219 221 222 b 224 1 0 0 3 4 7 8 15 16 17 18 20 21 23 24 25 26 27 28 29 30 37 43 44 45 46 47 48 51 53 54 55 57 58 60 62 64 66 69 73 76 77 79 83 86 87 88 90 91 92 93 94 95 96 97 98 100 102 105 106 108 109 113 115 116 117 119 122 125 132 138 141 142 143 144 145 147 148 149 150 154 155 158 159 162 164 167 168 171 173 174 175 176 178 179 183 184 188 190 192 193 195 197 198 201 204 205 207 210 212 215 216 217 218 219 221 222 # 19556 union c a 224 1 0 0 3 4 7 8 15 16 17 18 20 21 23 24 25 26 27 28 29 30 37 43 44 45 46 47 48 51 53 54 55 57 58 60 62 64 66 69 73 76 77 79 83 86 87 88 90 91 92 93 94 95 96 97 98 100 102 105 106 108 109 113 115 116 117 119 122 125 132 138 141 142 143 144 145 147 148 149 150 154 155 158 159 162 164 167 168 171 173 174 175 176 178 179 183 184 188 190 192 193 195 197 198 201 204 205 207 210 212 215 216 217 218 219 221 222 b 224 1 1 f # 19557 union c a 224 1 0 0 2 5 6 7 8 9 11 12 13 14 16 17 18 19 21 24 26 27 29 34 35 36 37 38 39 40 41 43 44 46 47 48 49 52 53 59 61 63 64 66 67 69 70 71 72 74 77 81 82 84 86 88 92 93 95 98 100 101 103 104 108 110 113 114 115 116 119 120 122 123 126 129 130 136 138 139 140 141 144 145 147 152 154 156 157 158 161 162 163 165 167 170 173 174 176 177 178 182 184 185 186 187 190 191 193 194 196 200 202 206 209 210 211 218 219 220 221 222 223 b 224 1 0 0 2 5 6 7 8 9 11 12 13 14 16 17 18 19 21 24 26 27 29 34 35 36 37 38 39 40 41 43 44 46 47 48 49 52 53 59 61 63 64 66 67 69 70 71 72 74 77 81 82 84 86 88 92 93 95 98 100 101 103 104 108 110 113 114 115 116 119 120 122 123 126 129 130 136 138 139 140 141 144 145 147 152 154 156 157 158 161 162 163 165 167 170 173 174 176 177 178 182 184 185 186 187 190 191 193 194 196 200 202 206 209 210 211 218 219 220 221 222 223 # 19558 union c a 224 1 0 0 2 5 6 7 8 9 11 12 13 14 16 17 18 19 21 24 26 27 29 34 35 36 37 38 39 40 41 43 44 46 47 48 49 52 53 59 61 63 64 66 67 69 70 71 72 74 77 81 82 84 86 88 92 93 95 98 100 101 103 104 108 110 113 114 115 116 119 120 122 123 126 129 130 136 138 139 140 141 144 145 147 152 154 156 157 158 161 162 163 165 167 170 173 174 176 177 178 182 184 185 186 187 190 191 193 194 196 200 202 206 209 210 211 218 219 220 221 222 223 b 224 1 1 0 1 5 6 10 12 14 20 21 22 25 26 27 28 29 30 34 35 37 38 39 41 45 46 50 53 54 57 62 63 64 65 66 69 71 74 75 77 79 80 84 86 88 90 92 95 99 100 104 112 113 115 121 122 126 127 132 133 134 135 139 140 141 142 144 147 148 153 155 158 159 160 167 174 175 176 177 178 179 182 183 186 188 189 191 192 196 198 200 204 207 210 211 213 214 215 217 222 # 19559 union c a 224 1 1 e b 224 1 1 e # 19560 union c a 224 1 1 e b 224 0 0 e # 19561 union c a 224 1 1 e b 224 1 1 e # 19562 union c a 224 1 1 e b 224 0 0 f # 19563 union c a 224 1 1 e b 224 1 1 e # 19564 union c a 224 1 1 e b 224 0 0 0 2 3 4 5 6 7 10 12 15 17 18 19 20 22 23 25 27 33 36 38 39 40 41 47 50 52 55 58 59 60 61 64 65 67 68 70 71 73 75 77 79 80 83 84 86 88 91 93 94 100 101 104 109 112 113 114 115 117 118 122 123 124 125 130 134 136 138 139 140 143 146 148 149 150 152 153 154 155 156 160 162 164 165 166 168 169 171 173 174 176 177 178 179 181 189 196 198 199 200 202 204 205 206 207 208 209 210 214 215 219 221 223 # 19565 union c a 224 1 1 f b 224 1 1 f # 19566 union c a 224 1 1 f b 224 0 0 e # 19567 union c a 224 1 1 f b 224 1 1 f # 19568 union c a 224 1 1 f b 224 0 0 f # 19569 union c a 224 1 1 f b 224 1 1 f # 19570 union c a 224 1 1 f b 224 0 0 0 1 2 3 4 5 6 7 8 9 11 12 13 14 15 16 17 18 21 23 24 26 29 30 32 33 35 36 38 39 41 42 44 45 46 47 48 49 50 51 52 54 55 56 58 59 61 64 66 67 68 69 71 72 75 76 79 82 83 84 86 88 89 92 93 94 95 97 99 101 102 106 110 111 112 113 114 115 121 122 123 126 127 130 131 133 134 136 137 138 141 145 147 150 151 153 154 155 160 163 164 167 171 172 173 176 180 182 184 185 186 190 191 192 193 194 195 198 200 203 204 207 208 210 211 212 213 215 216 218 219 220 221 222 # 19571 union c a 224 1 1 0 1 3 5 9 10 14 16 17 20 23 24 26 28 29 30 31 32 34 40 42 44 45 48 49 50 51 55 60 63 64 65 66 67 72 75 76 77 79 80 83 85 86 87 92 93 94 95 96 97 98 99 105 108 112 113 116 119 120 121 123 126 131 132 138 139 140 141 143 144 145 146 152 153 156 158 160 161 162 166 167 168 170 171 178 179 180 183 184 185 187 188 189 191 192 197 201 202 203 208 209 211 217 220 222 223 b 224 1 1 0 1 3 5 9 10 14 16 17 20 23 24 26 28 29 30 31 32 34 40 42 44 45 48 49 50 51 55 60 63 64 65 66 67 72 75 76 77 79 80 83 85 86 87 92 93 94 95 96 97 98 99 105 108 112 113 116 119 120 121 123 126 131 132 138 139 140 141 143 144 145 146 152 153 156 158 160 161 162 166 167 168 170 171 178 179 180 183 184 185 187 188 189 191 192 197 201 202 203 208 209 211 217 220 222 223 # 19572 union c a 224 1 1 0 1 3 5 9 10 14 16 17 20 23 24 26 28 29 30 31 32 34 40 42 44 45 48 49 50 51 55 60 63 64 65 66 67 72 75 76 77 79 80 83 85 86 87 92 93 94 95 96 97 98 99 105 108 112 113 116 119 120 121 123 126 131 132 138 139 140 141 143 144 145 146 152 153 156 158 160 161 162 166 167 168 170 171 178 179 180 183 184 185 187 188 189 191 192 197 201 202 203 208 209 211 217 220 222 223 b 224 0 0 e # 19573 union c a 224 1 1 0 7 10 11 12 13 15 16 18 20 24 25 27 31 32 33 35 37 38 39 45 49 50 56 57 58 69 73 74 75 77 79 80 82 90 91 92 93 98 99 101 103 104 105 106 108 110 111 112 113 117 118 119 122 127 128 130 133 135 136 139 140 142 146 147 148 150 152 153 156 157 159 162 169 172 174 178 180 181 182 183 189 194 198 199 201 205 207 213 215 217 220 222 b 224 1 1 0 7 10 11 12 13 15 16 18 20 24 25 27 31 32 33 35 37 38 39 45 49 50 56 57 58 69 73 74 75 77 79 80 82 90 91 92 93 98 99 101 103 104 105 106 108 110 111 112 113 117 118 119 122 127 128 130 133 135 136 139 140 142 146 147 148 150 152 153 156 157 159 162 169 172 174 178 180 181 182 183 189 194 198 199 201 205 207 213 215 217 220 222 # 19574 union c a 224 1 1 0 7 10 11 12 13 15 16 18 20 24 25 27 31 32 33 35 37 38 39 45 49 50 56 57 58 69 73 74 75 77 79 80 82 90 91 92 93 98 99 101 103 104 105 106 108 110 111 112 113 117 118 119 122 127 128 130 133 135 136 139 140 142 146 147 148 150 152 153 156 157 159 162 169 172 174 178 180 181 182 183 189 194 198 199 201 205 207 213 215 217 220 222 b 224 0 0 f # 19575 union c a 224 1 1 0 1 2 7 10 11 15 16 17 20 21 22 23 24 27 28 33 34 35 37 38 39 41 42 43 46 48 51 54 56 60 61 62 64 65 68 69 72 73 75 80 81 82 85 86 87 88 91 92 94 95 98 99 103 106 108 110 112 113 114 120 121 123 131 132 133 134 135 137 139 140 143 144 148 150 157 158 159 162 163 166 172 173 175 179 180 185 186 187 189 190 191 193 194 197 198 202 203 205 206 207 209 210 214 215 216 218 221 b 224 1 1 0 1 2 7 10 11 15 16 17 20 21 22 23 24 27 28 33 34 35 37 38 39 41 42 43 46 48 51 54 56 60 61 62 64 65 68 69 72 73 75 80 81 82 85 86 87 88 91 92 94 95 98 99 103 106 108 110 112 113 114 120 121 123 131 132 133 134 135 137 139 140 143 144 148 150 157 158 159 162 163 166 172 173 175 179 180 185 186 187 189 190 191 193 194 197 198 202 203 205 206 207 209 210 214 215 216 218 221 # 19576 union c a 224 1 1 0 1 2 7 10 11 15 16 17 20 21 22 23 24 27 28 33 34 35 37 38 39 41 42 43 46 48 51 54 56 60 61 62 64 65 68 69 72 73 75 80 81 82 85 86 87 88 91 92 94 95 98 99 103 106 108 110 112 113 114 120 121 123 131 132 133 134 135 137 139 140 143 144 148 150 157 158 159 162 163 166 172 173 175 179 180 185 186 187 189 190 191 193 194 197 198 202 203 205 206 207 209 210 214 215 216 218 221 b 224 0 0 1 2 3 4 5 7 9 10 11 12 13 14 16 18 19 20 21 22 23 30 31 33 36 37 40 43 44 47 48 50 52 56 58 60 61 62 64 66 67 69 71 73 74 76 77 78 79 81 88 91 92 95 96 101 105 106 108 109 115 116 117 118 119 122 124 126 127 128 131 135 140 142 144 147 150 152 153 154 155 157 158 161 165 167 168 171 172 175 177 178 179 180 181 183 184 185 188 190 191 193 195 196 197 198 199 202 207 208 210 211 213 214 216 218 219 222 223 # 19577 union c a 224 1 1 e b 224 1 1 e # 19578 union c a 224 1 1 e b 224 0 1 e # 19579 union c a 224 1 1 e b 224 1 1 e # 19580 union c a 224 1 1 e b 224 0 1 f # 19581 union c a 224 1 1 e b 224 1 1 e # 19582 union c a 224 1 1 e b 224 0 1 4 6 9 11 12 13 14 15 16 17 18 20 21 23 24 28 33 36 38 44 47 51 52 53 54 55 56 59 61 62 63 68 70 76 77 80 81 83 85 86 91 94 95 96 99 102 103 104 107 109 110 112 118 120 121 123 125 126 127 129 130 131 133 134 135 138 141 142 143 144 145 149 150 151 152 153 154 156 157 160 161 162 163 164 165 166 167 168 169 178 186 189 190 191 192 193 194 195 197 198 200 202 205 206 207 211 212 213 218 221 # 19583 union c a 224 1 1 f b 224 1 1 f # 19584 union c a 224 1 1 f b 224 0 1 e # 19585 union c a 224 1 1 f b 224 1 1 f # 19586 union c a 224 1 1 f b 224 0 1 f # 19587 union c a 224 1 1 f b 224 1 1 f # 19588 union c a 224 1 1 f b 224 0 1 2 3 5 8 15 16 18 19 26 27 28 30 32 33 36 37 38 39 48 49 50 54 55 57 62 66 70 71 72 76 79 82 83 84 85 89 90 91 93 94 95 97 99 103 105 109 110 111 113 115 116 117 120 121 122 124 125 127 128 129 130 131 132 134 136 138 140 141 142 144 150 153 154 156 161 166 168 171 174 175 176 180 182 184 185 187 189 191 192 193 194 195 197 199 201 202 205 208 209 210 211 213 214 216 218 222 223 # 19589 union c a 224 1 1 0 1 2 4 7 8 9 12 13 15 16 20 23 24 26 28 29 31 32 34 35 38 42 43 46 52 53 55 58 62 65 66 67 69 72 79 81 84 85 86 88 89 90 93 95 96 98 99 105 107 109 110 111 112 114 115 117 120 124 125 126 127 129 130 131 132 134 144 149 153 156 158 161 164 166 168 170 172 173 174 175 178 182 186 188 189 190 191 197 198 203 206 207 209 211 213 215 217 219 220 222 b 224 1 1 0 1 2 4 7 8 9 12 13 15 16 20 23 24 26 28 29 31 32 34 35 38 42 43 46 52 53 55 58 62 65 66 67 69 72 79 81 84 85 86 88 89 90 93 95 96 98 99 105 107 109 110 111 112 114 115 117 120 124 125 126 127 129 130 131 132 134 144 149 153 156 158 161 164 166 168 170 172 173 174 175 178 182 186 188 189 190 191 197 198 203 206 207 209 211 213 215 217 219 220 222 # 19590 union c a 224 1 1 0 1 2 4 7 8 9 12 13 15 16 20 23 24 26 28 29 31 32 34 35 38 42 43 46 52 53 55 58 62 65 66 67 69 72 79 81 84 85 86 88 89 90 93 95 96 98 99 105 107 109 110 111 112 114 115 117 120 124 125 126 127 129 130 131 132 134 144 149 153 156 158 161 164 166 168 170 172 173 174 175 178 182 186 188 189 190 191 197 198 203 206 207 209 211 213 215 217 219 220 222 b 224 0 1 e # 19591 union c a 224 1 1 2 3 8 9 12 16 22 23 26 29 31 32 34 36 38 39 40 43 48 49 50 53 55 56 57 58 60 63 64 66 68 69 71 72 74 76 78 79 80 81 85 86 88 89 90 96 98 99 100 101 103 113 114 115 116 117 120 122 124 127 133 135 137 139 141 143 144 145 148 149 150 152 153 154 155 159 161 163 164 165 168 169 170 174 178 179 181 184 186 187 190 191 193 194 196 198 200 201 202 204 205 206 213 214 215 216 217 218 221 223 b 224 1 1 2 3 8 9 12 16 22 23 26 29 31 32 34 36 38 39 40 43 48 49 50 53 55 56 57 58 60 63 64 66 68 69 71 72 74 76 78 79 80 81 85 86 88 89 90 96 98 99 100 101 103 113 114 115 116 117 120 122 124 127 133 135 137 139 141 143 144 145 148 149 150 152 153 154 155 159 161 163 164 165 168 169 170 174 178 179 181 184 186 187 190 191 193 194 196 198 200 201 202 204 205 206 213 214 215 216 217 218 221 223 # 19592 union c a 224 1 1 2 3 8 9 12 16 22 23 26 29 31 32 34 36 38 39 40 43 48 49 50 53 55 56 57 58 60 63 64 66 68 69 71 72 74 76 78 79 80 81 85 86 88 89 90 96 98 99 100 101 103 113 114 115 116 117 120 122 124 127 133 135 137 139 141 143 144 145 148 149 150 152 153 154 155 159 161 163 164 165 168 169 170 174 178 179 181 184 186 187 190 191 193 194 196 198 200 201 202 204 205 206 213 214 215 216 217 218 221 223 b 224 0 1 f # 19593 union c a 224 1 1 0 5 6 8 9 10 11 13 14 15 20 21 23 24 27 29 30 31 33 35 36 39 43 44 48 49 50 51 52 54 56 59 62 68 70 72 74 75 76 78 79 81 83 84 87 89 90 91 93 98 100 101 103 108 110 116 117 118 120 121 122 123 127 128 130 131 132 136 137 139 143 144 146 147 149 150 151 152 153 154 158 159 160 161 162 163 166 171 172 173 175 178 181 184 187 188 190 191 193 195 196 200 201 202 203 204 206 207 208 209 213 214 220 b 224 1 1 0 5 6 8 9 10 11 13 14 15 20 21 23 24 27 29 30 31 33 35 36 39 43 44 48 49 50 51 52 54 56 59 62 68 70 72 74 75 76 78 79 81 83 84 87 89 90 91 93 98 100 101 103 108 110 116 117 118 120 121 122 123 127 128 130 131 132 136 137 139 143 144 146 147 149 150 151 152 153 154 158 159 160 161 162 163 166 171 172 173 175 178 181 184 187 188 190 191 193 195 196 200 201 202 203 204 206 207 208 209 213 214 220 # 19594 union c a 224 1 1 0 5 6 8 9 10 11 13 14 15 20 21 23 24 27 29 30 31 33 35 36 39 43 44 48 49 50 51 52 54 56 59 62 68 70 72 74 75 76 78 79 81 83 84 87 89 90 91 93 98 100 101 103 108 110 116 117 118 120 121 122 123 127 128 130 131 132 136 137 139 143 144 146 147 149 150 151 152 153 154 158 159 160 161 162 163 166 171 172 173 175 178 181 184 187 188 190 191 193 195 196 200 201 202 203 204 206 207 208 209 213 214 220 b 224 0 1 0 1 3 5 8 12 15 16 17 20 21 22 25 26 27 32 39 40 41 44 45 47 48 51 55 58 60 61 62 63 65 66 67 70 74 77 81 83 84 85 86 90 91 94 95 97 98 99 104 105 106 107 108 109 112 115 118 120 121 127 128 129 130 133 134 136 139 144 145 146 149 150 151 152 155 158 162 163 168 172 173 174 175 176 177 180 181 187 188 192 193 197 198 202 205 213 214 215 221 222 # 19595 union c a 224 1 1 e b 224 1 1 e # 19596 union c a 224 1 1 e b 224 1 0 e # 19597 union c a 224 1 1 e b 224 1 1 e # 19598 union c a 224 1 1 e b 224 1 0 f # 19599 union c a 224 1 1 e b 224 1 1 e # 19600 union c a 224 1 1 e b 224 1 0 0 4 6 9 11 13 14 15 19 21 25 26 27 28 30 32 34 35 36 38 42 43 45 46 49 51 52 53 56 57 58 61 62 65 66 69 75 77 79 80 82 83 85 87 88 94 95 97 98 100 102 104 106 112 115 118 120 122 123 124 126 129 130 131 133 136 138 145 147 150 151 152 153 154 155 157 158 161 163 165 166 168 169 170 172 174 176 177 183 184 186 188 189 190 195 196 199 200 203 209 210 212 213 215 220 221 222 # 19601 union c a 224 1 1 f b 224 1 1 f # 19602 union c a 224 1 1 f b 224 1 0 e # 19603 union c a 224 1 1 f b 224 1 1 f # 19604 union c a 224 1 1 f b 224 1 0 f # 19605 union c a 224 1 1 f b 224 1 1 f # 19606 union c a 224 1 1 f b 224 1 0 1 5 9 11 12 13 17 18 20 25 28 30 31 38 39 41 44 45 48 50 51 54 55 56 59 60 62 63 64 65 71 73 74 75 80 81 82 85 89 90 93 96 97 98 100 101 102 104 105 115 117 118 119 121 123 124 126 129 130 132 133 136 137 138 143 144 145 148 154 156 157 158 160 165 166 167 168 169 171 172 173 174 175 176 178 180 182 184 185 187 188 190 192 194 195 197 198 200 203 204 205 207 211 212 213 216 217 220 222 223 # 19607 union c a 224 1 1 0 1 2 4 5 7 8 9 11 12 13 14 15 17 18 20 22 23 24 25 27 30 31 37 38 45 47 48 51 53 54 56 57 64 66 67 69 71 74 75 78 81 83 84 87 89 94 95 96 97 98 102 103 104 105 110 111 114 119 124 127 128 132 137 138 140 144 145 149 150 154 160 162 163 164 167 168 169 171 173 176 177 179 183 184 186 188 190 191 192 193 194 196 197 199 200 201 202 204 206 208 212 213 218 b 224 1 1 0 1 2 4 5 7 8 9 11 12 13 14 15 17 18 20 22 23 24 25 27 30 31 37 38 45 47 48 51 53 54 56 57 64 66 67 69 71 74 75 78 81 83 84 87 89 94 95 96 97 98 102 103 104 105 110 111 114 119 124 127 128 132 137 138 140 144 145 149 150 154 160 162 163 164 167 168 169 171 173 176 177 179 183 184 186 188 190 191 192 193 194 196 197 199 200 201 202 204 206 208 212 213 218 # 19608 union c a 224 1 1 0 1 2 4 5 7 8 9 11 12 13 14 15 17 18 20 22 23 24 25 27 30 31 37 38 45 47 48 51 53 54 56 57 64 66 67 69 71 74 75 78 81 83 84 87 89 94 95 96 97 98 102 103 104 105 110 111 114 119 124 127 128 132 137 138 140 144 145 149 150 154 160 162 163 164 167 168 169 171 173 176 177 179 183 184 186 188 190 191 192 193 194 196 197 199 200 201 202 204 206 208 212 213 218 b 224 1 0 e # 19609 union c a 224 1 1 2 10 11 16 17 18 20 22 25 26 27 32 33 34 35 37 41 43 45 48 50 51 53 55 58 59 60 63 65 66 68 69 70 72 74 78 83 85 86 87 89 93 96 97 98 99 100 101 102 103 105 107 111 112 113 114 115 116 117 118 120 122 123 124 127 135 137 138 139 140 143 146 148 150 151 152 153 154 155 160 161 162 165 167 168 170 171 172 178 180 181 184 185 187 189 191 192 199 200 201 202 206 207 214 215 217 218 219 220 222 b 224 1 1 2 10 11 16 17 18 20 22 25 26 27 32 33 34 35 37 41 43 45 48 50 51 53 55 58 59 60 63 65 66 68 69 70 72 74 78 83 85 86 87 89 93 96 97 98 99 100 101 102 103 105 107 111 112 113 114 115 116 117 118 120 122 123 124 127 135 137 138 139 140 143 146 148 150 151 152 153 154 155 160 161 162 165 167 168 170 171 172 178 180 181 184 185 187 189 191 192 199 200 201 202 206 207 214 215 217 218 219 220 222 # 19610 union c a 224 1 1 2 10 11 16 17 18 20 22 25 26 27 32 33 34 35 37 41 43 45 48 50 51 53 55 58 59 60 63 65 66 68 69 70 72 74 78 83 85 86 87 89 93 96 97 98 99 100 101 102 103 105 107 111 112 113 114 115 116 117 118 120 122 123 124 127 135 137 138 139 140 143 146 148 150 151 152 153 154 155 160 161 162 165 167 168 170 171 172 178 180 181 184 185 187 189 191 192 199 200 201 202 206 207 214 215 217 218 219 220 222 b 224 1 0 f # 19611 union c a 224 1 1 0 1 2 3 5 6 8 9 10 12 14 16 18 20 26 28 29 30 32 42 44 45 46 47 48 50 51 52 54 57 58 60 62 64 66 68 70 71 73 77 78 81 86 87 89 90 91 93 96 98 99 101 102 103 105 107 108 113 114 116 117 120 123 124 125 127 128 129 130 132 137 140 141 142 145 146 148 149 150 151 153 154 156 157 159 160 161 163 165 166 167 172 174 178 181 183 184 185 186 188 191 194 195 197 198 199 200 203 204 205 210 211 213 214 215 216 217 219 220 221 222 b 224 1 1 0 1 2 3 5 6 8 9 10 12 14 16 18 20 26 28 29 30 32 42 44 45 46 47 48 50 51 52 54 57 58 60 62 64 66 68 70 71 73 77 78 81 86 87 89 90 91 93 96 98 99 101 102 103 105 107 108 113 114 116 117 120 123 124 125 127 128 129 130 132 137 140 141 142 145 146 148 149 150 151 153 154 156 157 159 160 161 163 165 166 167 172 174 178 181 183 184 185 186 188 191 194 195 197 198 199 200 203 204 205 210 211 213 214 215 216 217 219 220 221 222 # 19612 union c a 224 1 1 0 1 2 3 5 6 8 9 10 12 14 16 18 20 26 28 29 30 32 42 44 45 46 47 48 50 51 52 54 57 58 60 62 64 66 68 70 71 73 77 78 81 86 87 89 90 91 93 96 98 99 101 102 103 105 107 108 113 114 116 117 120 123 124 125 127 128 129 130 132 137 140 141 142 145 146 148 149 150 151 153 154 156 157 159 160 161 163 165 166 167 172 174 178 181 183 184 185 186 188 191 194 195 197 198 199 200 203 204 205 210 211 213 214 215 216 217 219 220 221 222 b 224 1 0 1 2 5 8 11 13 14 15 17 18 19 20 21 22 23 26 28 29 30 33 34 35 37 41 43 44 46 48 49 51 52 53 58 60 67 69 71 72 74 75 76 77 79 80 81 84 85 86 87 92 93 94 96 98 102 104 105 109 113 114 116 119 120 123 125 134 137 138 139 140 141 142 144 145 149 153 156 158 159 160 164 167 170 171 173 175 177 179 181 182 183 184 188 189 193 194 195 198 201 203 205 206 207 210 211 213 214 215 216 217 219 220 221 # 19613 union c a 224 1 1 e b 224 1 1 e # 19614 union c a 224 1 1 e b 224 1 1 e # 19615 union c a 224 1 1 e b 224 1 1 e # 19616 union c a 224 1 1 e b 224 1 1 f # 19617 union c a 224 1 1 e b 224 1 1 e # 19618 union c a 224 1 1 e b 224 1 1 0 1 6 7 8 12 19 20 22 23 26 29 32 33 36 38 39 44 45 46 50 52 53 55 56 57 60 61 63 65 71 72 73 76 78 80 81 85 88 89 90 91 94 95 97 101 103 104 107 108 112 113 114 118 121 122 123 124 125 126 128 130 131 133 134 140 142 143 145 147 150 152 153 155 156 157 161 164 166 168 169 170 171 175 177 180 182 183 186 190 194 196 197 198 199 200 204 205 206 208 210 211 212 213 214 216 217 218 220 222 # 19619 union c a 224 1 1 f b 224 1 1 f # 19620 union c a 224 1 1 f b 224 1 1 e # 19621 union c a 224 1 1 f b 224 1 1 f # 19622 union c a 224 1 1 f b 224 1 1 f # 19623 union c a 224 1 1 f b 224 1 1 f # 19624 union c a 224 1 1 f b 224 1 1 0 1 8 9 11 12 14 16 17 19 21 24 26 27 28 30 34 35 36 38 40 43 44 47 48 50 54 56 57 58 61 62 65 70 72 73 74 75 78 80 81 82 85 87 91 95 99 100 101 102 104 105 109 111 112 115 116 117 118 123 124 126 128 129 131 132 135 141 144 145 147 151 152 153 155 162 164 167 168 173 176 177 180 181 182 183 187 188 189 190 191 193 195 198 199 200 205 209 215 216 217 218 219 221 222 223 # 19625 union c a 224 1 1 0 1 2 3 5 6 10 11 12 14 16 18 20 23 24 26 28 31 33 34 35 36 37 39 40 42 43 45 50 52 55 56 57 59 63 66 68 71 72 73 74 76 78 79 80 81 83 87 89 90 91 94 95 97 98 107 108 110 111 112 114 116 120 121 126 127 129 131 133 134 140 143 144 145 146 150 153 163 168 169 170 173 175 176 183 185 190 191 192 194 197 198 200 202 203 205 206 210 211 212 215 217 219 222 b 224 1 1 0 1 2 3 5 6 10 11 12 14 16 18 20 23 24 26 28 31 33 34 35 36 37 39 40 42 43 45 50 52 55 56 57 59 63 66 68 71 72 73 74 76 78 79 80 81 83 87 89 90 91 94 95 97 98 107 108 110 111 112 114 116 120 121 126 127 129 131 133 134 140 143 144 145 146 150 153 163 168 169 170 173 175 176 183 185 190 191 192 194 197 198 200 202 203 205 206 210 211 212 215 217 219 222 # 19626 union c a 224 1 1 0 1 2 3 5 6 10 11 12 14 16 18 20 23 24 26 28 31 33 34 35 36 37 39 40 42 43 45 50 52 55 56 57 59 63 66 68 71 72 73 74 76 78 79 80 81 83 87 89 90 91 94 95 97 98 107 108 110 111 112 114 116 120 121 126 127 129 131 133 134 140 143 144 145 146 150 153 163 168 169 170 173 175 176 183 185 190 191 192 194 197 198 200 202 203 205 206 210 211 212 215 217 219 222 b 224 1 1 e # 19627 union c a 224 1 1 0 8 14 16 20 21 23 25 26 27 30 32 36 37 38 41 42 46 47 48 51 52 53 54 56 60 62 63 64 70 73 74 77 81 82 84 85 86 87 89 95 97 99 100 106 110 113 114 119 121 122 123 124 126 128 131 132 135 136 137 139 144 146 148 149 152 154 155 157 160 163 164 165 166 167 168 170 171 178 183 186 187 189 193 194 196 197 200 201 205 206 207 209 210 215 216 218 223 b 224 1 1 0 8 14 16 20 21 23 25 26 27 30 32 36 37 38 41 42 46 47 48 51 52 53 54 56 60 62 63 64 70 73 74 77 81 82 84 85 86 87 89 95 97 99 100 106 110 113 114 119 121 122 123 124 126 128 131 132 135 136 137 139 144 146 148 149 152 154 155 157 160 163 164 165 166 167 168 170 171 178 183 186 187 189 193 194 196 197 200 201 205 206 207 209 210 215 216 218 223 # 19628 union c a 224 1 1 0 8 14 16 20 21 23 25 26 27 30 32 36 37 38 41 42 46 47 48 51 52 53 54 56 60 62 63 64 70 73 74 77 81 82 84 85 86 87 89 95 97 99 100 106 110 113 114 119 121 122 123 124 126 128 131 132 135 136 137 139 144 146 148 149 152 154 155 157 160 163 164 165 166 167 168 170 171 178 183 186 187 189 193 194 196 197 200 201 205 206 207 209 210 215 216 218 223 b 224 1 1 f # 19629 union c a 224 1 1 3 9 10 11 12 13 16 18 19 20 22 23 27 28 29 31 33 34 38 39 45 46 47 50 52 53 57 58 59 62 63 65 69 71 73 75 76 78 80 81 82 86 87 88 89 90 93 96 98 103 104 105 106 107 108 110 111 113 115 116 117 119 120 123 124 125 127 130 131 132 134 135 136 139 140 142 145 146 148 151 152 153 154 155 159 160 164 167 168 169 170 171 174 177 178 181 184 185 186 190 191 192 195 196 197 203 204 209 210 211 212 213 214 215 216 217 218 221 b 224 1 1 3 9 10 11 12 13 16 18 19 20 22 23 27 28 29 31 33 34 38 39 45 46 47 50 52 53 57 58 59 62 63 65 69 71 73 75 76 78 80 81 82 86 87 88 89 90 93 96 98 103 104 105 106 107 108 110 111 113 115 116 117 119 120 123 124 125 127 130 131 132 134 135 136 139 140 142 145 146 148 151 152 153 154 155 159 160 164 167 168 169 170 171 174 177 178 181 184 185 186 190 191 192 195 196 197 203 204 209 210 211 212 213 214 215 216 217 218 221 # 19630 union c a 224 1 1 3 9 10 11 12 13 16 18 19 20 22 23 27 28 29 31 33 34 38 39 45 46 47 50 52 53 57 58 59 62 63 65 69 71 73 75 76 78 80 81 82 86 87 88 89 90 93 96 98 103 104 105 106 107 108 110 111 113 115 116 117 119 120 123 124 125 127 130 131 132 134 135 136 139 140 142 145 146 148 151 152 153 154 155 159 160 164 167 168 169 170 171 174 177 178 181 184 185 186 190 191 192 195 196 197 203 204 209 210 211 212 213 214 215 216 217 218 221 b 224 1 1 1 5 6 7 8 9 10 11 13 14 16 17 19 20 22 23 25 26 27 28 32 42 45 46 48 53 55 56 61 62 66 70 71 72 73 75 76 82 83 86 90 91 92 96 98 100 102 103 106 107 109 111 114 115 116 117 120 121 123 125 129 134 135 136 137 138 140 144 148 150 151 153 154 155 156 159 161 163 167 168 171 174 176 178 179 180 182 185 188 194 196 199 200 201 207 208 210 212 214 217 221 223 # 19631 union c a 247 0 0 e b 247 0 0 e # 19632 union c a 247 0 0 e b 247 0 0 e # 19633 union c a 247 0 0 e b 247 0 0 e # 19634 union c a 247 0 0 e b 247 0 0 f # 19635 union c a 247 0 0 e b 247 0 0 e # 19636 union c a 247 0 0 e b 247 0 0 3 4 5 6 7 10 11 12 14 16 18 20 21 22 24 28 29 30 36 37 43 44 45 50 53 54 55 56 59 63 70 71 72 74 78 79 80 81 83 84 85 86 87 90 93 95 99 100 102 103 104 107 108 110 113 115 116 118 120 122 125 127 129 130 133 135 138 139 140 141 143 144 145 146 147 149 150 153 155 156 157 158 161 162 163 165 166 167 169 170 178 179 180 181 182 184 186 189 190 191 195 198 199 200 204 206 207 208 209 210 211 212 213 214 217 218 220 221 225 227 228 229 230 231 233 240 241 242 243 244 245 # 19637 union c a 247 0 0 f b 247 0 0 f # 19638 union c a 247 0 0 f b 247 0 0 e # 19639 union c a 247 0 0 f b 247 0 0 f # 19640 union c a 247 0 0 f b 247 0 0 f # 19641 union c a 247 0 0 f b 247 0 0 f # 19642 union c a 247 0 0 f b 247 0 0 0 1 4 5 6 7 11 14 16 17 18 19 27 28 31 39 40 42 44 46 49 52 53 54 56 59 60 62 64 66 68 69 73 74 78 79 84 87 88 89 90 91 93 97 98 100 101 102 104 106 108 112 115 116 117 118 120 121 123 124 129 132 134 135 136 137 139 141 142 143 146 147 153 155 159 161 164 167 168 169 172 175 176 177 178 182 183 185 186 189 191 192 195 196 197 199 200 201 202 203 206 209 210 211 213 216 218 223 224 225 226 228 231 235 239 240 244 245 246 # 19643 union c a 247 0 0 0 2 3 5 8 9 12 16 17 18 22 23 25 28 31 32 33 34 36 37 38 39 40 41 42 43 50 55 57 65 68 71 74 75 76 77 78 79 81 83 85 87 88 89 94 95 103 104 113 116 117 119 123 124 129 130 131 134 135 136 139 140 141 143 144 145 147 149 150 151 154 156 158 160 161 165 167 169 170 171 172 174 175 178 179 181 182 186 187 188 191 194 199 200 202 203 204 205 210 212 213 214 217 219 222 224 225 226 228 231 232 233 234 235 236 239 244 246 b 247 0 0 0 2 3 5 8 9 12 16 17 18 22 23 25 28 31 32 33 34 36 37 38 39 40 41 42 43 50 55 57 65 68 71 74 75 76 77 78 79 81 83 85 87 88 89 94 95 103 104 113 116 117 119 123 124 129 130 131 134 135 136 139 140 141 143 144 145 147 149 150 151 154 156 158 160 161 165 167 169 170 171 172 174 175 178 179 181 182 186 187 188 191 194 199 200 202 203 204 205 210 212 213 214 217 219 222 224 225 226 228 231 232 233 234 235 236 239 244 246 # 19644 union c a 247 0 0 0 2 3 5 8 9 12 16 17 18 22 23 25 28 31 32 33 34 36 37 38 39 40 41 42 43 50 55 57 65 68 71 74 75 76 77 78 79 81 83 85 87 88 89 94 95 103 104 113 116 117 119 123 124 129 130 131 134 135 136 139 140 141 143 144 145 147 149 150 151 154 156 158 160 161 165 167 169 170 171 172 174 175 178 179 181 182 186 187 188 191 194 199 200 202 203 204 205 210 212 213 214 217 219 222 224 225 226 228 231 232 233 234 235 236 239 244 246 b 247 0 0 e # 19645 union c a 247 0 0 2 6 7 9 10 11 12 15 20 21 22 23 25 27 28 29 35 36 38 41 43 45 46 47 48 51 52 53 54 56 58 59 63 64 65 67 72 73 76 78 79 82 85 86 89 91 97 101 102 104 108 112 113 114 115 116 119 122 124 126 129 130 132 133 134 138 139 140 145 147 149 150 151 153 156 157 160 162 163 164 168 174 175 178 179 181 182 185 186 188 190 191 194 196 197 198 199 201 203 207 208 210 211 212 213 216 218 219 221 222 223 230 231 235 237 238 241 245 246 b 247 0 0 2 6 7 9 10 11 12 15 20 21 22 23 25 27 28 29 35 36 38 41 43 45 46 47 48 51 52 53 54 56 58 59 63 64 65 67 72 73 76 78 79 82 85 86 89 91 97 101 102 104 108 112 113 114 115 116 119 122 124 126 129 130 132 133 134 138 139 140 145 147 149 150 151 153 156 157 160 162 163 164 168 174 175 178 179 181 182 185 186 188 190 191 194 196 197 198 199 201 203 207 208 210 211 212 213 216 218 219 221 222 223 230 231 235 237 238 241 245 246 # 19646 union c a 247 0 0 2 6 7 9 10 11 12 15 20 21 22 23 25 27 28 29 35 36 38 41 43 45 46 47 48 51 52 53 54 56 58 59 63 64 65 67 72 73 76 78 79 82 85 86 89 91 97 101 102 104 108 112 113 114 115 116 119 122 124 126 129 130 132 133 134 138 139 140 145 147 149 150 151 153 156 157 160 162 163 164 168 174 175 178 179 181 182 185 186 188 190 191 194 196 197 198 199 201 203 207 208 210 211 212 213 216 218 219 221 222 223 230 231 235 237 238 241 245 246 b 247 0 0 f # 19647 union c a 247 0 0 1 2 3 6 8 10 11 12 14 18 20 21 22 23 25 29 32 33 38 41 46 47 49 50 52 53 55 56 59 61 64 65 66 69 71 72 73 74 76 77 78 81 82 84 85 87 89 90 91 101 104 106 107 108 109 112 113 114 115 116 117 120 125 127 129 131 132 135 136 139 140 141 143 144 145 147 148 149 151 153 154 155 156 161 165 167 168 169 170 171 173 174 176 178 179 182 184 185 187 189 190 191 195 196 198 199 202 203 205 206 208 209 214 216 217 218 220 221 222 226 228 229 231 234 235 236 237 239 240 241 243 244 245 b 247 0 0 1 2 3 6 8 10 11 12 14 18 20 21 22 23 25 29 32 33 38 41 46 47 49 50 52 53 55 56 59 61 64 65 66 69 71 72 73 74 76 77 78 81 82 84 85 87 89 90 91 101 104 106 107 108 109 112 113 114 115 116 117 120 125 127 129 131 132 135 136 139 140 141 143 144 145 147 148 149 151 153 154 155 156 161 165 167 168 169 170 171 173 174 176 178 179 182 184 185 187 189 190 191 195 196 198 199 202 203 205 206 208 209 214 216 217 218 220 221 222 226 228 229 231 234 235 236 237 239 240 241 243 244 245 # 19648 union c a 247 0 0 1 2 3 6 8 10 11 12 14 18 20 21 22 23 25 29 32 33 38 41 46 47 49 50 52 53 55 56 59 61 64 65 66 69 71 72 73 74 76 77 78 81 82 84 85 87 89 90 91 101 104 106 107 108 109 112 113 114 115 116 117 120 125 127 129 131 132 135 136 139 140 141 143 144 145 147 148 149 151 153 154 155 156 161 165 167 168 169 170 171 173 174 176 178 179 182 184 185 187 189 190 191 195 196 198 199 202 203 205 206 208 209 214 216 217 218 220 221 222 226 228 229 231 234 235 236 237 239 240 241 243 244 245 b 247 0 0 0 1 4 7 10 11 13 14 16 18 19 21 22 25 28 30 31 33 34 39 40 43 44 47 48 50 51 52 53 57 58 61 62 63 64 65 66 67 70 71 74 76 84 85 86 89 90 91 92 93 96 99 100 102 105 106 110 111 116 118 121 123 125 129 131 135 137 138 141 143 144 147 148 151 152 153 154 158 159 161 162 163 165 168 170 174 176 181 186 187 188 189 190 192 195 197 202 204 205 206 208 209 210 212 214 216 217 219 220 221 225 227 229 231 236 237 238 239 240 241 243 246 # 19649 union c a 247 0 0 e b 247 0 0 e # 19650 union c a 247 0 0 e b 247 0 1 e # 19651 union c a 247 0 0 e b 247 0 0 e # 19652 union c a 247 0 0 e b 247 0 1 f # 19653 union c a 247 0 0 e b 247 0 0 e # 19654 union c a 247 0 0 e b 247 0 1 6 7 8 11 12 15 16 18 19 21 22 24 26 27 28 30 31 32 33 37 38 39 42 45 51 53 58 60 61 63 64 67 70 71 73 75 76 77 80 85 87 95 96 98 100 101 104 105 108 110 111 112 113 114 116 119 120 121 128 130 131 134 135 139 140 142 143 145 147 149 150 155 156 157 158 159 160 161 164 168 169 172 173 176 179 183 185 190 194 196 197 199 200 201 203 204 206 208 213 214 215 219 220 224 227 229 231 232 233 234 237 238 240 # 19655 union c a 247 0 0 f b 247 0 0 f # 19656 union c a 247 0 0 f b 247 0 1 e # 19657 union c a 247 0 0 f b 247 0 0 f # 19658 union c a 247 0 0 f b 247 0 1 f # 19659 union c a 247 0 0 f b 247 0 0 f # 19660 union c a 247 0 0 f b 247 0 1 0 1 2 3 4 5 8 10 12 13 14 15 17 19 20 22 26 27 28 33 36 39 40 43 44 48 49 51 56 57 59 66 68 71 74 76 78 79 82 84 85 86 87 88 90 92 93 94 98 100 101 106 109 110 111 113 116 119 121 122 124 125 130 131 135 136 137 138 140 141 142 143 144 151 156 157 158 160 161 166 169 172 175 176 180 184 186 187 189 190 192 196 198 204 205 210 212 213 214 215 217 219 220 222 223 224 228 229 230 234 235 236 240 243 # 19661 union c a 247 0 0 0 1 2 4 9 10 11 12 13 16 17 19 20 21 23 25 28 29 30 31 32 33 37 38 40 41 43 45 49 53 55 56 57 59 61 64 65 66 67 69 73 74 75 79 80 81 84 87 89 91 92 93 94 96 97 101 103 104 106 108 111 116 117 121 122 124 125 126 128 130 135 136 140 144 146 147 149 151 152 154 157 158 159 160 161 164 167 168 172 174 175 176 178 182 185 186 187 188 189 190 191 193 194 200 202 203 204 206 207 208 209 212 214 219 221 222 223 224 225 228 230 231 232 235 236 238 239 240 243 b 247 0 0 0 1 2 4 9 10 11 12 13 16 17 19 20 21 23 25 28 29 30 31 32 33 37 38 40 41 43 45 49 53 55 56 57 59 61 64 65 66 67 69 73 74 75 79 80 81 84 87 89 91 92 93 94 96 97 101 103 104 106 108 111 116 117 121 122 124 125 126 128 130 135 136 140 144 146 147 149 151 152 154 157 158 159 160 161 164 167 168 172 174 175 176 178 182 185 186 187 188 189 190 191 193 194 200 202 203 204 206 207 208 209 212 214 219 221 222 223 224 225 228 230 231 232 235 236 238 239 240 243 # 19662 union c a 247 0 0 0 1 2 4 9 10 11 12 13 16 17 19 20 21 23 25 28 29 30 31 32 33 37 38 40 41 43 45 49 53 55 56 57 59 61 64 65 66 67 69 73 74 75 79 80 81 84 87 89 91 92 93 94 96 97 101 103 104 106 108 111 116 117 121 122 124 125 126 128 130 135 136 140 144 146 147 149 151 152 154 157 158 159 160 161 164 167 168 172 174 175 176 178 182 185 186 187 188 189 190 191 193 194 200 202 203 204 206 207 208 209 212 214 219 221 222 223 224 225 228 230 231 232 235 236 238 239 240 243 b 247 0 1 e # 19663 union c a 247 0 0 0 1 2 3 4 5 7 8 10 14 15 21 24 25 26 27 31 32 33 34 35 36 38 41 42 43 45 46 47 51 52 53 55 59 61 62 64 68 70 72 73 74 77 78 79 80 83 84 85 86 88 92 93 94 95 100 103 104 106 109 113 117 118 121 122 124 125 126 130 134 136 137 138 139 140 144 150 151 153 154 156 157 158 162 163 164 165 168 171 173 174 178 179 180 181 183 184 187 189 191 196 197 198 199 200 204 206 208 209 210 211 212 214 215 216 217 218 220 224 225 226 227 232 233 234 235 237 238 240 241 243 245 246 b 247 0 0 0 1 2 3 4 5 7 8 10 14 15 21 24 25 26 27 31 32 33 34 35 36 38 41 42 43 45 46 47 51 52 53 55 59 61 62 64 68 70 72 73 74 77 78 79 80 83 84 85 86 88 92 93 94 95 100 103 104 106 109 113 117 118 121 122 124 125 126 130 134 136 137 138 139 140 144 150 151 153 154 156 157 158 162 163 164 165 168 171 173 174 178 179 180 181 183 184 187 189 191 196 197 198 199 200 204 206 208 209 210 211 212 214 215 216 217 218 220 224 225 226 227 232 233 234 235 237 238 240 241 243 245 246 # 19664 union c a 247 0 0 0 1 2 3 4 5 7 8 10 14 15 21 24 25 26 27 31 32 33 34 35 36 38 41 42 43 45 46 47 51 52 53 55 59 61 62 64 68 70 72 73 74 77 78 79 80 83 84 85 86 88 92 93 94 95 100 103 104 106 109 113 117 118 121 122 124 125 126 130 134 136 137 138 139 140 144 150 151 153 154 156 157 158 162 163 164 165 168 171 173 174 178 179 180 181 183 184 187 189 191 196 197 198 199 200 204 206 208 209 210 211 212 214 215 216 217 218 220 224 225 226 227 232 233 234 235 237 238 240 241 243 245 246 b 247 0 1 f # 19665 union c a 247 0 0 1 2 3 4 9 11 13 15 18 20 21 24 26 27 28 29 30 32 33 35 39 42 43 46 47 48 49 50 51 52 55 57 58 60 61 64 65 71 72 73 74 77 78 79 80 81 82 83 85 86 87 88 89 90 91 92 95 100 103 105 107 108 110 117 120 124 127 128 131 132 133 134 136 141 142 143 147 151 152 153 157 161 164 166 169 170 171 172 173 174 177 181 184 185 186 187 188 191 195 196 197 200 203 205 207 208 209 212 213 214 215 216 218 220 221 223 225 226 228 231 232 233 234 236 239 245 246 b 247 0 0 1 2 3 4 9 11 13 15 18 20 21 24 26 27 28 29 30 32 33 35 39 42 43 46 47 48 49 50 51 52 55 57 58 60 61 64 65 71 72 73 74 77 78 79 80 81 82 83 85 86 87 88 89 90 91 92 95 100 103 105 107 108 110 117 120 124 127 128 131 132 133 134 136 141 142 143 147 151 152 153 157 161 164 166 169 170 171 172 173 174 177 181 184 185 186 187 188 191 195 196 197 200 203 205 207 208 209 212 213 214 215 216 218 220 221 223 225 226 228 231 232 233 234 236 239 245 246 # 19666 union c a 247 0 0 1 2 3 4 9 11 13 15 18 20 21 24 26 27 28 29 30 32 33 35 39 42 43 46 47 48 49 50 51 52 55 57 58 60 61 64 65 71 72 73 74 77 78 79 80 81 82 83 85 86 87 88 89 90 91 92 95 100 103 105 107 108 110 117 120 124 127 128 131 132 133 134 136 141 142 143 147 151 152 153 157 161 164 166 169 170 171 172 173 174 177 181 184 185 186 187 188 191 195 196 197 200 203 205 207 208 209 212 213 214 215 216 218 220 221 223 225 226 228 231 232 233 234 236 239 245 246 b 247 0 1 0 2 5 6 9 13 14 16 17 18 25 27 30 32 34 37 41 42 43 45 48 53 55 56 57 58 64 66 68 70 72 73 76 77 78 80 82 91 92 93 95 97 98 101 102 106 108 110 111 112 115 116 117 119 121 122 123 124 125 126 127 128 129 133 135 140 141 145 148 149 151 153 154 156 157 159 163 165 166 167 168 170 171 175 176 177 178 179 182 183 185 191 192 194 197 202 208 213 215 216 217 218 224 226 227 229 234 235 242 243 246 # 19667 union c a 247 0 0 e b 247 0 0 e # 19668 union c a 247 0 0 e b 247 1 0 e # 19669 union c a 247 0 0 e b 247 0 0 e # 19670 union c a 247 0 0 e b 247 1 0 f # 19671 union c a 247 0 0 e b 247 0 0 e # 19672 union c a 247 0 0 e b 247 1 0 2 5 6 7 8 9 11 14 15 16 18 20 21 22 28 29 31 32 33 36 39 41 47 48 49 52 54 57 58 60 63 65 68 70 74 76 77 79 80 81 83 85 87 88 90 91 92 95 96 97 99 104 105 106 107 108 111 113 114 115 116 119 120 123 124 125 126 127 128 129 130 131 133 135 136 138 139 140 142 144 145 147 149 153 155 156 157 158 159 160 162 168 169 171 178 179 185 188 191 192 193 194 198 199 202 204 205 206 209 211 213 215 217 220 222 223 225 226 227 229 230 232 234 235 237 238 239 242 243 244 245 # 19673 union c a 247 0 0 f b 247 0 0 f # 19674 union c a 247 0 0 f b 247 1 0 e # 19675 union c a 247 0 0 f b 247 0 0 f # 19676 union c a 247 0 0 f b 247 1 0 f # 19677 union c a 247 0 0 f b 247 0 0 f # 19678 union c a 247 0 0 f b 247 1 0 1 2 3 4 6 8 9 12 17 19 22 24 26 29 30 31 32 33 36 38 39 40 43 44 47 49 50 53 54 55 57 60 65 66 68 69 70 71 74 76 79 83 86 88 90 91 92 95 96 99 102 103 105 106 111 113 114 115 116 119 120 122 125 129 132 138 139 141 142 143 144 145 146 147 149 150 151 155 157 159 160 161 163 167 168 169 170 172 173 175 177 179 180 182 184 186 190 191 192 194 196 197 198 200 201 202 203 205 206 207 208 210 211 216 219 222 224 225 226 228 229 230 231 233 234 235 236 238 239 240 241 242 245 # 19679 union c a 247 0 0 0 2 3 4 6 9 10 11 13 14 18 23 25 26 29 30 32 33 35 38 39 40 41 44 46 47 48 49 51 54 57 58 59 61 62 64 73 74 75 76 77 78 79 82 83 84 85 90 91 93 97 98 99 100 101 104 107 108 116 120 123 125 127 128 129 131 132 133 134 135 136 139 141 143 145 149 150 151 154 155 159 161 162 164 165 166 167 168 170 175 176 177 178 181 183 184 189 191 192 193 194 195 196 197 199 203 205 206 209 210 211 213 214 218 219 221 224 226 227 231 232 233 234 237 238 239 242 243 245 b 247 0 0 0 2 3 4 6 9 10 11 13 14 18 23 25 26 29 30 32 33 35 38 39 40 41 44 46 47 48 49 51 54 57 58 59 61 62 64 73 74 75 76 77 78 79 82 83 84 85 90 91 93 97 98 99 100 101 104 107 108 116 120 123 125 127 128 129 131 132 133 134 135 136 139 141 143 145 149 150 151 154 155 159 161 162 164 165 166 167 168 170 175 176 177 178 181 183 184 189 191 192 193 194 195 196 197 199 203 205 206 209 210 211 213 214 218 219 221 224 226 227 231 232 233 234 237 238 239 242 243 245 # 19680 union c a 247 0 0 0 2 3 4 6 9 10 11 13 14 18 23 25 26 29 30 32 33 35 38 39 40 41 44 46 47 48 49 51 54 57 58 59 61 62 64 73 74 75 76 77 78 79 82 83 84 85 90 91 93 97 98 99 100 101 104 107 108 116 120 123 125 127 128 129 131 132 133 134 135 136 139 141 143 145 149 150 151 154 155 159 161 162 164 165 166 167 168 170 175 176 177 178 181 183 184 189 191 192 193 194 195 196 197 199 203 205 206 209 210 211 213 214 218 219 221 224 226 227 231 232 233 234 237 238 239 242 243 245 b 247 1 0 e # 19681 union c a 247 0 0 0 1 6 11 12 13 15 16 18 19 20 21 22 23 26 28 30 33 34 35 37 41 44 45 51 54 58 60 62 65 67 68 73 74 75 76 79 80 81 82 83 85 87 90 92 93 94 97 98 103 104 106 107 110 113 117 119 120 122 123 124 125 126 128 129 130 134 137 138 139 140 141 146 147 149 150 153 154 157 158 160 164 175 176 178 186 187 190 192 194 195 196 198 200 203 204 205 206 207 210 212 214 216 217 218 221 222 225 226 228 229 230 231 234 235 238 240 241 242 243 245 b 247 0 0 0 1 6 11 12 13 15 16 18 19 20 21 22 23 26 28 30 33 34 35 37 41 44 45 51 54 58 60 62 65 67 68 73 74 75 76 79 80 81 82 83 85 87 90 92 93 94 97 98 103 104 106 107 110 113 117 119 120 122 123 124 125 126 128 129 130 134 137 138 139 140 141 146 147 149 150 153 154 157 158 160 164 175 176 178 186 187 190 192 194 195 196 198 200 203 204 205 206 207 210 212 214 216 217 218 221 222 225 226 228 229 230 231 234 235 238 240 241 242 243 245 # 19682 union c a 247 0 0 0 1 6 11 12 13 15 16 18 19 20 21 22 23 26 28 30 33 34 35 37 41 44 45 51 54 58 60 62 65 67 68 73 74 75 76 79 80 81 82 83 85 87 90 92 93 94 97 98 103 104 106 107 110 113 117 119 120 122 123 124 125 126 128 129 130 134 137 138 139 140 141 146 147 149 150 153 154 157 158 160 164 175 176 178 186 187 190 192 194 195 196 198 200 203 204 205 206 207 210 212 214 216 217 218 221 222 225 226 228 229 230 231 234 235 238 240 241 242 243 245 b 247 1 0 f # 19683 union c a 247 0 0 1 3 4 6 8 14 18 23 25 26 29 30 32 33 35 37 38 39 43 47 51 52 53 54 56 57 58 59 60 63 65 67 68 70 72 73 79 80 81 82 85 86 88 91 92 93 97 101 104 105 109 110 111 113 115 120 122 123 127 130 131 137 138 141 143 145 146 147 151 152 154 155 156 157 158 161 163 170 171 172 174 177 179 180 181 182 183 184 186 187 190 191 194 196 198 199 200 201 202 203 207 209 210 214 216 217 226 228 229 231 232 233 237 239 242 243 244 245 b 247 0 0 1 3 4 6 8 14 18 23 25 26 29 30 32 33 35 37 38 39 43 47 51 52 53 54 56 57 58 59 60 63 65 67 68 70 72 73 79 80 81 82 85 86 88 91 92 93 97 101 104 105 109 110 111 113 115 120 122 123 127 130 131 137 138 141 143 145 146 147 151 152 154 155 156 157 158 161 163 170 171 172 174 177 179 180 181 182 183 184 186 187 190 191 194 196 198 199 200 201 202 203 207 209 210 214 216 217 226 228 229 231 232 233 237 239 242 243 244 245 # 19684 union c a 247 0 0 1 3 4 6 8 14 18 23 25 26 29 30 32 33 35 37 38 39 43 47 51 52 53 54 56 57 58 59 60 63 65 67 68 70 72 73 79 80 81 82 85 86 88 91 92 93 97 101 104 105 109 110 111 113 115 120 122 123 127 130 131 137 138 141 143 145 146 147 151 152 154 155 156 157 158 161 163 170 171 172 174 177 179 180 181 182 183 184 186 187 190 191 194 196 198 199 200 201 202 203 207 209 210 214 216 217 226 228 229 231 232 233 237 239 242 243 244 245 b 247 1 0 0 1 2 4 5 6 11 14 15 17 19 24 25 27 32 33 35 36 41 43 46 47 50 51 54 58 59 62 68 69 70 72 73 74 77 80 84 86 89 90 91 92 93 97 100 103 109 110 114 118 119 121 122 124 129 133 137 138 139 140 141 142 145 146 147 149 150 153 154 159 161 164 165 166 168 169 171 172 176 178 180 181 182 186 187 188 191 193 198 201 202 206 209 214 215 216 217 218 220 224 225 230 231 233 236 238 240 242 245 # 19685 union c a 247 0 0 e b 247 0 0 e # 19686 union c a 247 0 0 e b 247 1 1 e # 19687 union c a 247 0 0 e b 247 0 0 e # 19688 union c a 247 0 0 e b 247 1 1 f # 19689 union c a 247 0 0 e b 247 0 0 e # 19690 union c a 247 0 0 e b 247 1 1 1 3 4 7 11 12 13 14 15 16 23 26 27 28 29 32 33 34 39 41 42 44 46 47 48 52 56 59 61 66 67 71 75 76 78 79 81 85 89 91 93 94 95 96 97 98 100 105 108 109 110 112 114 116 118 120 122 125 128 130 131 134 135 136 139 146 149 150 153 154 156 158 160 164 167 170 171 172 174 177 178 179 183 187 188 189 191 193 194 196 198 200 201 204 206 208 212 213 221 223 230 232 234 235 240 241 242 243 244 # 19691 union c a 247 0 0 f b 247 0 0 f # 19692 union c a 247 0 0 f b 247 1 1 e # 19693 union c a 247 0 0 f b 247 0 0 f # 19694 union c a 247 0 0 f b 247 1 1 f # 19695 union c a 247 0 0 f b 247 0 0 f # 19696 union c a 247 0 0 f b 247 1 1 1 3 8 12 13 16 18 19 20 29 30 31 34 35 37 38 45 46 47 49 50 53 54 55 60 61 65 67 68 70 72 74 75 77 78 81 82 83 84 87 88 89 91 92 93 95 96 98 99 100 101 108 110 113 115 117 118 119 122 125 127 129 130 132 133 134 135 140 142 143 145 146 148 149 155 157 158 159 160 162 165 167 168 169 170 171 173 174 175 176 177 180 181 182 184 186 188 189 190 191 193 195 196 197 199 200 206 207 208 211 212 214 215 217 220 223 226 227 230 231 232 235 238 244 # 19697 union c a 247 0 0 2 3 4 5 6 7 10 12 13 14 15 16 18 19 20 22 24 28 29 30 32 34 35 37 38 39 41 42 44 45 46 49 51 53 55 57 61 67 70 71 73 75 76 79 81 82 84 87 88 89 92 93 94 99 100 101 102 104 105 109 114 116 119 123 128 131 133 134 136 138 140 142 144 145 146 149 155 156 157 163 166 169 170 172 174 175 177 180 182 184 186 187 192 196 198 200 202 203 204 205 206 209 210 213 220 222 224 226 227 230 232 233 235 239 241 243 244 245 b 247 0 0 2 3 4 5 6 7 10 12 13 14 15 16 18 19 20 22 24 28 29 30 32 34 35 37 38 39 41 42 44 45 46 49 51 53 55 57 61 67 70 71 73 75 76 79 81 82 84 87 88 89 92 93 94 99 100 101 102 104 105 109 114 116 119 123 128 131 133 134 136 138 140 142 144 145 146 149 155 156 157 163 166 169 170 172 174 175 177 180 182 184 186 187 192 196 198 200 202 203 204 205 206 209 210 213 220 222 224 226 227 230 232 233 235 239 241 243 244 245 # 19698 union c a 247 0 0 2 3 4 5 6 7 10 12 13 14 15 16 18 19 20 22 24 28 29 30 32 34 35 37 38 39 41 42 44 45 46 49 51 53 55 57 61 67 70 71 73 75 76 79 81 82 84 87 88 89 92 93 94 99 100 101 102 104 105 109 114 116 119 123 128 131 133 134 136 138 140 142 144 145 146 149 155 156 157 163 166 169 170 172 174 175 177 180 182 184 186 187 192 196 198 200 202 203 204 205 206 209 210 213 220 222 224 226 227 230 232 233 235 239 241 243 244 245 b 247 1 1 e # 19699 union c a 247 0 0 0 4 5 8 9 11 13 14 15 16 19 20 22 23 24 25 28 29 30 31 37 38 41 42 43 44 45 49 55 59 62 63 65 66 67 68 69 70 72 73 74 76 78 79 87 88 89 90 95 100 103 108 114 115 116 118 119 124 125 128 129 130 131 134 135 136 137 138 139 142 143 144 145 146 147 148 150 152 154 155 156 157 159 160 162 163 165 166 168 169 170 171 172 173 174 175 176 179 180 182 183 185 186 188 192 199 200 202 203 205 206 210 213 215 216 220 221 222 226 227 228 230 231 232 233 234 239 240 242 b 247 0 0 0 4 5 8 9 11 13 14 15 16 19 20 22 23 24 25 28 29 30 31 37 38 41 42 43 44 45 49 55 59 62 63 65 66 67 68 69 70 72 73 74 76 78 79 87 88 89 90 95 100 103 108 114 115 116 118 119 124 125 128 129 130 131 134 135 136 137 138 139 142 143 144 145 146 147 148 150 152 154 155 156 157 159 160 162 163 165 166 168 169 170 171 172 173 174 175 176 179 180 182 183 185 186 188 192 199 200 202 203 205 206 210 213 215 216 220 221 222 226 227 228 230 231 232 233 234 239 240 242 # 19700 union c a 247 0 0 0 4 5 8 9 11 13 14 15 16 19 20 22 23 24 25 28 29 30 31 37 38 41 42 43 44 45 49 55 59 62 63 65 66 67 68 69 70 72 73 74 76 78 79 87 88 89 90 95 100 103 108 114 115 116 118 119 124 125 128 129 130 131 134 135 136 137 138 139 142 143 144 145 146 147 148 150 152 154 155 156 157 159 160 162 163 165 166 168 169 170 171 172 173 174 175 176 179 180 182 183 185 186 188 192 199 200 202 203 205 206 210 213 215 216 220 221 222 226 227 228 230 231 232 233 234 239 240 242 b 247 1 1 f # 19701 union c a 247 0 0 2 3 5 6 7 11 12 13 14 15 19 20 21 23 24 25 26 27 29 33 35 36 37 39 41 42 44 45 46 50 54 56 57 60 62 65 66 68 76 80 84 86 87 89 90 91 93 95 96 99 100 102 104 107 108 109 110 111 116 118 121 123 124 126 128 129 134 136 138 139 141 142 143 146 149 150 151 152 153 155 162 163 164 166 168 169 171 172 173 174 177 178 179 180 181 183 184 185 189 195 196 201 204 206 207 208 209 210 211 217 220 221 222 223 226 227 231 233 234 235 237 238 241 242 243 244 b 247 0 0 2 3 5 6 7 11 12 13 14 15 19 20 21 23 24 25 26 27 29 33 35 36 37 39 41 42 44 45 46 50 54 56 57 60 62 65 66 68 76 80 84 86 87 89 90 91 93 95 96 99 100 102 104 107 108 109 110 111 116 118 121 123 124 126 128 129 134 136 138 139 141 142 143 146 149 150 151 152 153 155 162 163 164 166 168 169 171 172 173 174 177 178 179 180 181 183 184 185 189 195 196 201 204 206 207 208 209 210 211 217 220 221 222 223 226 227 231 233 234 235 237 238 241 242 243 244 # 19702 union c a 247 0 0 2 3 5 6 7 11 12 13 14 15 19 20 21 23 24 25 26 27 29 33 35 36 37 39 41 42 44 45 46 50 54 56 57 60 62 65 66 68 76 80 84 86 87 89 90 91 93 95 96 99 100 102 104 107 108 109 110 111 116 118 121 123 124 126 128 129 134 136 138 139 141 142 143 146 149 150 151 152 153 155 162 163 164 166 168 169 171 172 173 174 177 178 179 180 181 183 184 185 189 195 196 201 204 206 207 208 209 210 211 217 220 221 222 223 226 227 231 233 234 235 237 238 241 242 243 244 b 247 1 1 2 3 5 6 8 9 11 13 16 19 20 21 22 23 25 26 28 30 31 32 34 41 43 45 51 54 55 57 59 62 64 65 66 67 71 72 74 77 78 83 84 86 91 92 96 101 102 105 106 108 109 110 116 118 120 121 125 126 131 138 139 141 143 148 149 150 152 154 157 159 161 163 165 167 168 170 173 174 175 182 184 185 188 189 190 192 194 201 203 204 208 209 210 211 212 215 217 218 219 220 221 223 227 230 231 234 236 238 239 240 241 242 243 245 246 # 19703 union c a 247 0 1 e b 247 0 1 e # 19704 union c a 247 0 1 e b 247 0 0 e # 19705 union c a 247 0 1 e b 247 0 1 e # 19706 union c a 247 0 1 e b 247 0 0 f # 19707 union c a 247 0 1 e b 247 0 1 e # 19708 union c a 247 0 1 e b 247 0 0 1 2 5 6 9 11 13 14 19 22 25 26 28 29 32 33 34 36 37 39 40 41 42 44 45 46 49 51 55 61 62 63 64 65 69 72 75 79 81 82 83 86 90 91 92 94 95 97 99 100 101 102 107 108 110 111 113 114 116 118 120 121 123 125 128 129 131 135 136 140 144 146 147 148 149 153 155 156 157 159 163 164 165 166 170 176 180 181 182 184 188 192 193 195 199 202 203 204 208 209 210 211 212 213 215 220 222 223 226 227 229 231 234 235 236 239 245 # 19709 union c a 247 0 1 f b 247 0 1 f # 19710 union c a 247 0 1 f b 247 0 0 e # 19711 union c a 247 0 1 f b 247 0 1 f # 19712 union c a 247 0 1 f b 247 0 0 f # 19713 union c a 247 0 1 f b 247 0 1 f # 19714 union c a 247 0 1 f b 247 0 0 0 3 5 6 9 10 11 13 17 20 21 22 23 27 28 29 33 36 38 39 41 42 43 44 47 49 52 53 59 63 65 67 69 70 72 73 79 81 83 84 85 87 90 91 92 97 99 100 106 107 108 110 115 116 118 120 121 122 123 127 130 131 132 133 135 138 140 142 144 145 147 150 153 155 157 158 159 162 163 166 167 168 169 171 174 175 178 179 181 183 184 185 190 191 192 193 194 196 197 199 201 203 204 206 208 210 214 215 216 220 224 225 226 227 228 229 230 232 234 235 236 237 238 241 242 245 # 19715 union c a 247 0 1 2 3 4 5 6 8 9 11 12 14 15 16 17 18 19 20 21 22 24 25 26 28 29 30 32 33 34 35 36 37 39 40 41 42 43 44 46 47 49 50 58 61 64 69 73 77 79 80 84 85 86 87 89 92 93 94 97 98 99 100 106 107 110 113 116 119 120 123 131 135 136 137 142 143 146 147 150 152 155 156 159 160 161 162 166 170 172 175 176 178 181 182 185 189 195 198 199 200 201 203 206 207 208 209 212 213 216 217 221 222 223 224 226 228 229 231 235 236 238 239 240 241 242 243 244 246 b 247 0 1 2 3 4 5 6 8 9 11 12 14 15 16 17 18 19 20 21 22 24 25 26 28 29 30 32 33 34 35 36 37 39 40 41 42 43 44 46 47 49 50 58 61 64 69 73 77 79 80 84 85 86 87 89 92 93 94 97 98 99 100 106 107 110 113 116 119 120 123 131 135 136 137 142 143 146 147 150 152 155 156 159 160 161 162 166 170 172 175 176 178 181 182 185 189 195 198 199 200 201 203 206 207 208 209 212 213 216 217 221 222 223 224 226 228 229 231 235 236 238 239 240 241 242 243 244 246 # 19716 union c a 247 0 1 2 3 4 5 6 8 9 11 12 14 15 16 17 18 19 20 21 22 24 25 26 28 29 30 32 33 34 35 36 37 39 40 41 42 43 44 46 47 49 50 58 61 64 69 73 77 79 80 84 85 86 87 89 92 93 94 97 98 99 100 106 107 110 113 116 119 120 123 131 135 136 137 142 143 146 147 150 152 155 156 159 160 161 162 166 170 172 175 176 178 181 182 185 189 195 198 199 200 201 203 206 207 208 209 212 213 216 217 221 222 223 224 226 228 229 231 235 236 238 239 240 241 242 243 244 246 b 247 0 0 e # 19717 union c a 247 0 1 0 4 7 11 14 15 16 21 24 29 32 33 34 35 37 41 43 46 47 48 52 53 55 56 57 61 64 67 69 71 72 73 75 76 78 79 82 91 93 95 98 103 105 106 108 109 110 113 114 115 118 119 120 123 125 126 127 129 135 138 141 142 143 144 145 146 148 149 151 153 154 155 157 159 160 161 165 166 169 170 171 172 174 175 181 182 185 187 189 190 193 195 196 199 201 202 207 208 209 210 212 213 214 216 217 220 221 224 225 226 227 230 231 235 236 237 239 240 243 245 246 b 247 0 1 0 4 7 11 14 15 16 21 24 29 32 33 34 35 37 41 43 46 47 48 52 53 55 56 57 61 64 67 69 71 72 73 75 76 78 79 82 91 93 95 98 103 105 106 108 109 110 113 114 115 118 119 120 123 125 126 127 129 135 138 141 142 143 144 145 146 148 149 151 153 154 155 157 159 160 161 165 166 169 170 171 172 174 175 181 182 185 187 189 190 193 195 196 199 201 202 207 208 209 210 212 213 214 216 217 220 221 224 225 226 227 230 231 235 236 237 239 240 243 245 246 # 19718 union c a 247 0 1 0 4 7 11 14 15 16 21 24 29 32 33 34 35 37 41 43 46 47 48 52 53 55 56 57 61 64 67 69 71 72 73 75 76 78 79 82 91 93 95 98 103 105 106 108 109 110 113 114 115 118 119 120 123 125 126 127 129 135 138 141 142 143 144 145 146 148 149 151 153 154 155 157 159 160 161 165 166 169 170 171 172 174 175 181 182 185 187 189 190 193 195 196 199 201 202 207 208 209 210 212 213 214 216 217 220 221 224 225 226 227 230 231 235 236 237 239 240 243 245 246 b 247 0 0 f # 19719 union c a 247 0 1 1 4 6 7 9 10 11 14 18 21 22 24 27 28 30 31 33 43 47 51 53 54 59 60 61 62 64 66 68 69 70 75 77 78 79 81 82 83 84 85 89 92 94 95 96 98 99 101 103 104 105 108 116 117 121 124 126 127 128 129 132 133 134 135 140 141 143 144 145 147 149 151 153 156 159 161 162 163 165 166 167 169 172 173 175 178 179 181 182 183 184 187 191 194 195 198 199 201 204 206 208 209 212 214 219 220 221 222 223 226 227 228 230 233 234 237 241 242 244 245 246 b 247 0 1 1 4 6 7 9 10 11 14 18 21 22 24 27 28 30 31 33 43 47 51 53 54 59 60 61 62 64 66 68 69 70 75 77 78 79 81 82 83 84 85 89 92 94 95 96 98 99 101 103 104 105 108 116 117 121 124 126 127 128 129 132 133 134 135 140 141 143 144 145 147 149 151 153 156 159 161 162 163 165 166 167 169 172 173 175 178 179 181 182 183 184 187 191 194 195 198 199 201 204 206 208 209 212 214 219 220 221 222 223 226 227 228 230 233 234 237 241 242 244 245 246 # 19720 union c a 247 0 1 1 4 6 7 9 10 11 14 18 21 22 24 27 28 30 31 33 43 47 51 53 54 59 60 61 62 64 66 68 69 70 75 77 78 79 81 82 83 84 85 89 92 94 95 96 98 99 101 103 104 105 108 116 117 121 124 126 127 128 129 132 133 134 135 140 141 143 144 145 147 149 151 153 156 159 161 162 163 165 166 167 169 172 173 175 178 179 181 182 183 184 187 191 194 195 198 199 201 204 206 208 209 212 214 219 220 221 222 223 226 227 228 230 233 234 237 241 242 244 245 246 b 247 0 0 1 2 4 5 7 8 9 11 12 13 18 19 20 21 25 28 29 32 34 35 36 39 40 41 42 43 44 46 48 49 51 52 55 61 62 64 65 67 69 70 72 73 74 75 76 77 79 80 83 84 85 86 90 91 92 93 95 96 98 101 103 104 106 107 109 113 116 117 118 119 121 122 124 125 127 131 133 134 135 138 139 143 147 150 151 153 154 156 161 162 163 165 166 167 171 172 173 174 175 178 179 180 181 184 186 188 190 192 193 194 197 199 201 203 206 207 209 212 213 215 221 224 226 230 232 236 241 244 245 # 19721 union c a 247 0 1 e b 247 0 1 e # 19722 union c a 247 0 1 e b 247 0 1 e # 19723 union c a 247 0 1 e b 247 0 1 e # 19724 union c a 247 0 1 e b 247 0 1 f # 19725 union c a 247 0 1 e b 247 0 1 e # 19726 union c a 247 0 1 e b 247 0 1 4 6 12 17 18 19 20 23 24 25 28 31 32 33 38 39 40 41 43 45 46 47 48 49 50 52 55 57 58 59 62 66 67 68 70 71 73 74 75 76 77 78 81 82 91 92 96 97 99 101 102 103 104 105 106 107 109 111 112 116 117 118 120 123 124 126 127 130 131 133 134 137 138 139 140 142 143 149 153 154 155 157 158 159 162 165 166 167 168 169 170 171 172 173 174 177 178 180 182 184 185 188 189 190 191 193 195 200 202 203 204 205 208 210 211 214 218 219 221 222 223 227 228 229 231 234 236 239 243 244 # 19727 union c a 247 0 1 f b 247 0 1 f # 19728 union c a 247 0 1 f b 247 0 1 e # 19729 union c a 247 0 1 f b 247 0 1 f # 19730 union c a 247 0 1 f b 247 0 1 f # 19731 union c a 247 0 1 f b 247 0 1 f # 19732 union c a 247 0 1 f b 247 0 1 0 1 3 4 5 6 7 14 15 17 18 19 20 21 23 29 30 39 40 43 44 45 46 48 49 50 51 52 54 56 57 58 59 60 61 64 66 68 69 70 83 84 85 88 89 91 92 93 94 95 97 98 99 100 101 105 109 110 111 113 114 116 117 118 119 120 122 123 124 125 133 135 136 137 140 141 142 144 145 146 147 148 150 151 152 153 155 157 158 159 163 164 165 166 167 168 169 170 171 172 173 175 176 177 178 181 184 185 186 188 189 197 198 199 200 201 202 203 204 205 206 207 208 209 212 214 215 217 218 219 220 223 224 227 230 233 236 238 239 244 245 # 19733 union c a 247 0 1 0 1 3 9 10 13 15 17 20 21 25 26 27 29 30 35 36 37 39 43 49 50 54 55 59 63 64 65 66 71 73 74 75 79 80 82 84 85 87 89 90 93 95 96 97 101 103 104 105 107 109 110 112 113 114 115 117 118 119 120 123 126 131 133 136 137 139 140 141 143 144 145 148 150 151 152 154 156 157 161 162 163 164 166 173 174 175 176 179 180 186 188 194 195 196 197 201 202 204 205 209 211 212 213 216 218 219 223 224 226 227 233 234 235 236 239 241 242 246 b 247 0 1 0 1 3 9 10 13 15 17 20 21 25 26 27 29 30 35 36 37 39 43 49 50 54 55 59 63 64 65 66 71 73 74 75 79 80 82 84 85 87 89 90 93 95 96 97 101 103 104 105 107 109 110 112 113 114 115 117 118 119 120 123 126 131 133 136 137 139 140 141 143 144 145 148 150 151 152 154 156 157 161 162 163 164 166 173 174 175 176 179 180 186 188 194 195 196 197 201 202 204 205 209 211 212 213 216 218 219 223 224 226 227 233 234 235 236 239 241 242 246 # 19734 union c a 247 0 1 0 1 3 9 10 13 15 17 20 21 25 26 27 29 30 35 36 37 39 43 49 50 54 55 59 63 64 65 66 71 73 74 75 79 80 82 84 85 87 89 90 93 95 96 97 101 103 104 105 107 109 110 112 113 114 115 117 118 119 120 123 126 131 133 136 137 139 140 141 143 144 145 148 150 151 152 154 156 157 161 162 163 164 166 173 174 175 176 179 180 186 188 194 195 196 197 201 202 204 205 209 211 212 213 216 218 219 223 224 226 227 233 234 235 236 239 241 242 246 b 247 0 1 e # 19735 union c a 247 0 1 1 5 6 7 9 10 13 15 18 22 27 28 29 33 34 35 36 37 38 40 43 45 46 47 50 51 52 53 54 58 60 62 65 69 73 75 76 77 78 81 87 90 92 93 94 98 99 103 106 110 111 113 115 117 119 126 127 130 131 132 133 135 139 140 141 142 143 144 146 148 150 152 155 158 159 160 162 167 169 170 172 173 175 177 178 181 183 185 186 187 189 190 191 195 196 197 198 200 201 204 205 207 208 211 213 214 216 217 219 220 221 222 223 226 233 234 235 236 237 238 244 246 b 247 0 1 1 5 6 7 9 10 13 15 18 22 27 28 29 33 34 35 36 37 38 40 43 45 46 47 50 51 52 53 54 58 60 62 65 69 73 75 76 77 78 81 87 90 92 93 94 98 99 103 106 110 111 113 115 117 119 126 127 130 131 132 133 135 139 140 141 142 143 144 146 148 150 152 155 158 159 160 162 167 169 170 172 173 175 177 178 181 183 185 186 187 189 190 191 195 196 197 198 200 201 204 205 207 208 211 213 214 216 217 219 220 221 222 223 226 233 234 235 236 237 238 244 246 # 19736 union c a 247 0 1 1 5 6 7 9 10 13 15 18 22 27 28 29 33 34 35 36 37 38 40 43 45 46 47 50 51 52 53 54 58 60 62 65 69 73 75 76 77 78 81 87 90 92 93 94 98 99 103 106 110 111 113 115 117 119 126 127 130 131 132 133 135 139 140 141 142 143 144 146 148 150 152 155 158 159 160 162 167 169 170 172 173 175 177 178 181 183 185 186 187 189 190 191 195 196 197 198 200 201 204 205 207 208 211 213 214 216 217 219 220 221 222 223 226 233 234 235 236 237 238 244 246 b 247 0 1 f # 19737 union c a 247 0 1 0 3 6 8 10 11 12 15 16 18 19 21 22 23 24 25 28 29 31 33 36 38 39 41 42 47 48 49 50 51 52 54 55 57 60 61 63 65 68 72 73 74 77 79 80 81 82 83 85 87 88 89 93 95 97 101 102 104 105 107 108 109 110 111 112 113 116 117 120 121 122 127 129 131 134 139 142 143 147 151 155 156 158 163 164 166 167 168 170 171 173 174 175 176 178 180 183 184 186 187 188 192 194 196 197 203 208 213 218 220 224 226 230 231 232 236 237 239 241 243 244 245 246 b 247 0 1 0 3 6 8 10 11 12 15 16 18 19 21 22 23 24 25 28 29 31 33 36 38 39 41 42 47 48 49 50 51 52 54 55 57 60 61 63 65 68 72 73 74 77 79 80 81 82 83 85 87 88 89 93 95 97 101 102 104 105 107 108 109 110 111 112 113 116 117 120 121 122 127 129 131 134 139 142 143 147 151 155 156 158 163 164 166 167 168 170 171 173 174 175 176 178 180 183 184 186 187 188 192 194 196 197 203 208 213 218 220 224 226 230 231 232 236 237 239 241 243 244 245 246 # 19738 union c a 247 0 1 0 3 6 8 10 11 12 15 16 18 19 21 22 23 24 25 28 29 31 33 36 38 39 41 42 47 48 49 50 51 52 54 55 57 60 61 63 65 68 72 73 74 77 79 80 81 82 83 85 87 88 89 93 95 97 101 102 104 105 107 108 109 110 111 112 113 116 117 120 121 122 127 129 131 134 139 142 143 147 151 155 156 158 163 164 166 167 168 170 171 173 174 175 176 178 180 183 184 186 187 188 192 194 196 197 203 208 213 218 220 224 226 230 231 232 236 237 239 241 243 244 245 246 b 247 0 1 0 1 2 4 6 8 12 13 16 17 18 19 20 21 23 26 27 29 30 32 33 38 41 42 44 46 49 52 53 54 55 57 58 59 60 61 62 64 66 68 69 72 78 79 80 82 83 85 86 87 88 89 90 91 92 93 95 98 99 100 103 104 105 108 110 111 112 113 114 116 119 121 122 123 124 125 126 127 129 130 134 135 136 139 142 145 149 152 153 156 160 164 167 168 170 172 173 175 177 179 180 185 186 188 190 191 192 195 196 200 202 203 204 206 209 211 215 220 223 226 228 230 231 234 236 238 239 242 243 244 246 # 19739 union c a 247 0 1 e b 247 0 1 e # 19740 union c a 247 0 1 e b 247 1 0 e # 19741 union c a 247 0 1 e b 247 0 1 e # 19742 union c a 247 0 1 e b 247 1 0 f # 19743 union c a 247 0 1 e b 247 0 1 e # 19744 union c a 247 0 1 e b 247 1 0 0 1 4 5 7 9 10 12 13 15 17 18 19 22 24 27 28 29 30 31 32 35 36 37 38 40 41 42 43 44 45 46 48 52 54 61 65 72 74 75 77 78 79 83 85 87 89 92 93 94 95 96 97 101 104 106 109 115 117 118 119 120 125 127 128 129 133 138 141 142 143 147 150 153 154 155 156 158 159 160 161 164 165 166 167 169 171 172 176 177 181 182 183 184 187 188 190 191 195 196 198 200 202 203 204 206 207 211 216 217 228 230 231 232 233 235 238 239 240 243 244 245 # 19745 union c a 247 0 1 f b 247 0 1 f # 19746 union c a 247 0 1 f b 247 1 0 e # 19747 union c a 247 0 1 f b 247 0 1 f # 19748 union c a 247 0 1 f b 247 1 0 f # 19749 union c a 247 0 1 f b 247 0 1 f # 19750 union c a 247 0 1 f b 247 1 0 1 3 5 7 9 11 13 16 18 19 22 24 26 27 28 29 32 33 35 37 38 39 41 43 44 45 49 51 53 54 57 62 67 68 69 72 73 75 76 77 80 82 83 85 87 88 90 92 93 96 97 98 99 100 103 105 108 109 110 113 115 116 117 122 128 131 132 133 136 137 138 140 141 142 143 146 150 152 154 155 156 159 160 163 165 167 168 171 172 174 176 178 180 182 184 187 188 189 193 196 199 200 201 202 203 208 209 210 211 216 217 219 221 223 224 227 228 229 230 231 232 236 237 238 239 240 242 244 245 246 # 19751 union c a 247 0 1 0 1 2 3 5 6 7 13 14 16 18 19 22 32 34 36 37 42 43 45 49 51 53 55 60 62 63 64 65 66 67 68 72 73 76 79 81 82 83 84 85 86 87 89 94 96 97 98 99 102 103 107 108 109 110 113 116 117 120 121 124 126 127 129 130 131 132 133 134 136 137 139 140 142 144 147 149 150 154 156 164 165 167 168 169 170 171 172 173 174 175 176 178 181 183 188 189 190 191 192 193 195 196 197 198 199 201 202 205 210 212 231 232 233 236 237 238 239 240 241 243 244 245 b 247 0 1 0 1 2 3 5 6 7 13 14 16 18 19 22 32 34 36 37 42 43 45 49 51 53 55 60 62 63 64 65 66 67 68 72 73 76 79 81 82 83 84 85 86 87 89 94 96 97 98 99 102 103 107 108 109 110 113 116 117 120 121 124 126 127 129 130 131 132 133 134 136 137 139 140 142 144 147 149 150 154 156 164 165 167 168 169 170 171 172 173 174 175 176 178 181 183 188 189 190 191 192 193 195 196 197 198 199 201 202 205 210 212 231 232 233 236 237 238 239 240 241 243 244 245 # 19752 union c a 247 0 1 0 1 2 3 5 6 7 13 14 16 18 19 22 32 34 36 37 42 43 45 49 51 53 55 60 62 63 64 65 66 67 68 72 73 76 79 81 82 83 84 85 86 87 89 94 96 97 98 99 102 103 107 108 109 110 113 116 117 120 121 124 126 127 129 130 131 132 133 134 136 137 139 140 142 144 147 149 150 154 156 164 165 167 168 169 170 171 172 173 174 175 176 178 181 183 188 189 190 191 192 193 195 196 197 198 199 201 202 205 210 212 231 232 233 236 237 238 239 240 241 243 244 245 b 247 1 0 e # 19753 union c a 247 0 1 2 3 5 6 7 10 12 14 17 18 19 22 26 29 30 31 32 34 37 39 43 45 47 48 52 54 56 57 58 64 65 66 68 71 74 75 78 80 86 88 92 93 94 95 96 97 101 103 106 107 108 110 111 112 116 117 119 121 124 129 130 132 135 136 137 138 139 141 142 145 147 148 149 150 152 153 154 155 162 164 167 169 170 171 172 174 175 178 181 182 184 185 187 191 192 196 199 201 202 205 207 211 212 215 218 219 220 222 223 224 228 235 236 237 238 240 242 243 244 246 b 247 0 1 2 3 5 6 7 10 12 14 17 18 19 22 26 29 30 31 32 34 37 39 43 45 47 48 52 54 56 57 58 64 65 66 68 71 74 75 78 80 86 88 92 93 94 95 96 97 101 103 106 107 108 110 111 112 116 117 119 121 124 129 130 132 135 136 137 138 139 141 142 145 147 148 149 150 152 153 154 155 162 164 167 169 170 171 172 174 175 178 181 182 184 185 187 191 192 196 199 201 202 205 207 211 212 215 218 219 220 222 223 224 228 235 236 237 238 240 242 243 244 246 # 19754 union c a 247 0 1 2 3 5 6 7 10 12 14 17 18 19 22 26 29 30 31 32 34 37 39 43 45 47 48 52 54 56 57 58 64 65 66 68 71 74 75 78 80 86 88 92 93 94 95 96 97 101 103 106 107 108 110 111 112 116 117 119 121 124 129 130 132 135 136 137 138 139 141 142 145 147 148 149 150 152 153 154 155 162 164 167 169 170 171 172 174 175 178 181 182 184 185 187 191 192 196 199 201 202 205 207 211 212 215 218 219 220 222 223 224 228 235 236 237 238 240 242 243 244 246 b 247 1 0 f # 19755 union c a 247 0 1 1 4 5 9 10 11 15 16 17 19 20 21 22 23 24 26 27 30 31 32 35 36 37 41 43 45 46 47 48 49 50 52 55 56 58 59 60 61 62 63 64 65 67 68 69 72 73 75 76 77 78 79 80 81 83 85 86 87 89 90 91 92 93 94 95 96 98 100 102 103 105 106 108 109 110 111 114 115 116 117 118 120 121 123 125 130 134 135 137 138 141 143 146 153 155 156 157 158 159 160 161 167 168 173 178 179 180 183 184 186 187 189 190 193 194 195 197 201 202 206 207 209 212 213 215 217 218 220 222 226 227 230 231 233 235 236 240 241 242 243 244 245 246 b 247 0 1 1 4 5 9 10 11 15 16 17 19 20 21 22 23 24 26 27 30 31 32 35 36 37 41 43 45 46 47 48 49 50 52 55 56 58 59 60 61 62 63 64 65 67 68 69 72 73 75 76 77 78 79 80 81 83 85 86 87 89 90 91 92 93 94 95 96 98 100 102 103 105 106 108 109 110 111 114 115 116 117 118 120 121 123 125 130 134 135 137 138 141 143 146 153 155 156 157 158 159 160 161 167 168 173 178 179 180 183 184 186 187 189 190 193 194 195 197 201 202 206 207 209 212 213 215 217 218 220 222 226 227 230 231 233 235 236 240 241 242 243 244 245 246 # 19756 union c a 247 0 1 1 4 5 9 10 11 15 16 17 19 20 21 22 23 24 26 27 30 31 32 35 36 37 41 43 45 46 47 48 49 50 52 55 56 58 59 60 61 62 63 64 65 67 68 69 72 73 75 76 77 78 79 80 81 83 85 86 87 89 90 91 92 93 94 95 96 98 100 102 103 105 106 108 109 110 111 114 115 116 117 118 120 121 123 125 130 134 135 137 138 141 143 146 153 155 156 157 158 159 160 161 167 168 173 178 179 180 183 184 186 187 189 190 193 194 195 197 201 202 206 207 209 212 213 215 217 218 220 222 226 227 230 231 233 235 236 240 241 242 243 244 245 246 b 247 1 0 0 1 2 4 7 8 9 10 15 16 22 23 25 28 31 42 44 49 50 51 53 55 56 57 59 61 63 64 65 70 72 74 76 78 81 82 84 87 90 91 94 96 98 100 102 104 105 106 107 109 110 112 113 114 115 118 119 120 121 122 123 124 125 127 129 131 133 136 139 147 148 150 153 156 157 159 160 162 166 168 169 173 174 179 180 181 184 185 188 189 194 195 196 198 199 203 204 208 211 213 216 217 218 222 223 224 225 227 230 231 232 235 236 237 238 239 242 243 244 245 246 # 19757 union c a 247 0 1 e b 247 0 1 e # 19758 union c a 247 0 1 e b 247 1 1 e # 19759 union c a 247 0 1 e b 247 0 1 e # 19760 union c a 247 0 1 e b 247 1 1 f # 19761 union c a 247 0 1 e b 247 0 1 e # 19762 union c a 247 0 1 e b 247 1 1 0 1 2 5 7 8 9 13 15 16 23 25 26 28 29 33 34 35 36 37 38 39 40 47 48 49 52 53 56 57 58 60 61 62 64 65 66 67 68 69 70 71 72 73 74 80 81 82 83 84 85 88 90 91 93 94 96 97 100 101 103 104 106 110 112 113 115 116 117 119 126 127 129 132 133 134 135 136 137 142 146 147 150 151 155 156 157 158 160 163 164 166 167 171 172 174 176 177 181 183 187 193 199 200 201 203 210 211 215 216 217 218 221 222 223 224 227 228 229 230 231 232 234 236 237 238 241 242 243 244 246 # 19763 union c a 247 0 1 f b 247 0 1 f # 19764 union c a 247 0 1 f b 247 1 1 e # 19765 union c a 247 0 1 f b 247 0 1 f # 19766 union c a 247 0 1 f b 247 1 1 f # 19767 union c a 247 0 1 f b 247 0 1 f # 19768 union c a 247 0 1 f b 247 1 1 0 3 4 6 9 10 12 14 20 24 25 27 28 29 31 33 34 35 39 42 44 45 46 47 49 53 55 56 57 58 59 63 66 67 68 79 81 82 90 91 95 96 101 102 103 107 110 111 113 115 117 118 120 121 125 128 129 130 132 136 137 141 142 144 147 148 151 153 155 157 158 161 162 167 169 172 174 181 183 184 185 188 190 193 197 200 201 202 204 205 206 210 211 217 223 224 225 228 229 230 231 233 236 238 239 240 241 242 # 19769 union c a 247 0 1 0 2 4 6 9 10 12 16 17 18 20 21 23 24 27 28 29 31 32 35 36 37 39 40 41 45 46 48 49 50 52 56 57 59 61 62 71 73 75 82 83 84 85 87 88 89 90 92 93 94 97 98 101 103 104 105 106 111 112 114 115 118 119 121 124 125 126 128 130 139 140 141 143 146 149 151 152 153 154 155 156 157 159 161 163 165 166 173 175 176 181 188 190 194 195 196 197 203 205 206 208 209 210 212 213 217 223 224 227 229 230 231 234 237 238 240 245 246 b 247 0 1 0 2 4 6 9 10 12 16 17 18 20 21 23 24 27 28 29 31 32 35 36 37 39 40 41 45 46 48 49 50 52 56 57 59 61 62 71 73 75 82 83 84 85 87 88 89 90 92 93 94 97 98 101 103 104 105 106 111 112 114 115 118 119 121 124 125 126 128 130 139 140 141 143 146 149 151 152 153 154 155 156 157 159 161 163 165 166 173 175 176 181 188 190 194 195 196 197 203 205 206 208 209 210 212 213 217 223 224 227 229 230 231 234 237 238 240 245 246 # 19770 union c a 247 0 1 0 2 4 6 9 10 12 16 17 18 20 21 23 24 27 28 29 31 32 35 36 37 39 40 41 45 46 48 49 50 52 56 57 59 61 62 71 73 75 82 83 84 85 87 88 89 90 92 93 94 97 98 101 103 104 105 106 111 112 114 115 118 119 121 124 125 126 128 130 139 140 141 143 146 149 151 152 153 154 155 156 157 159 161 163 165 166 173 175 176 181 188 190 194 195 196 197 203 205 206 208 209 210 212 213 217 223 224 227 229 230 231 234 237 238 240 245 246 b 247 1 1 e # 19771 union c a 247 0 1 0 1 3 4 5 7 9 13 17 19 20 24 25 26 29 37 39 40 42 46 47 48 51 53 56 57 58 60 62 64 65 66 67 68 69 70 73 74 75 76 78 79 80 82 86 89 90 91 92 95 97 98 100 102 108 111 114 115 117 118 119 121 122 125 127 128 129 130 131 133 135 137 138 142 143 145 147 148 150 154 157 160 164 165 168 174 175 178 180 181 186 187 189 193 194 196 197 199 201 202 203 205 206 207 209 213 214 215 216 221 223 226 230 233 235 236 237 238 240 242 244 245 246 b 247 0 1 0 1 3 4 5 7 9 13 17 19 20 24 25 26 29 37 39 40 42 46 47 48 51 53 56 57 58 60 62 64 65 66 67 68 69 70 73 74 75 76 78 79 80 82 86 89 90 91 92 95 97 98 100 102 108 111 114 115 117 118 119 121 122 125 127 128 129 130 131 133 135 137 138 142 143 145 147 148 150 154 157 160 164 165 168 174 175 178 180 181 186 187 189 193 194 196 197 199 201 202 203 205 206 207 209 213 214 215 216 221 223 226 230 233 235 236 237 238 240 242 244 245 246 # 19772 union c a 247 0 1 0 1 3 4 5 7 9 13 17 19 20 24 25 26 29 37 39 40 42 46 47 48 51 53 56 57 58 60 62 64 65 66 67 68 69 70 73 74 75 76 78 79 80 82 86 89 90 91 92 95 97 98 100 102 108 111 114 115 117 118 119 121 122 125 127 128 129 130 131 133 135 137 138 142 143 145 147 148 150 154 157 160 164 165 168 174 175 178 180 181 186 187 189 193 194 196 197 199 201 202 203 205 206 207 209 213 214 215 216 221 223 226 230 233 235 236 237 238 240 242 244 245 246 b 247 1 1 f # 19773 union c a 247 0 1 0 4 6 8 9 11 13 14 15 17 18 20 21 24 25 27 28 30 31 34 36 37 38 40 43 46 47 49 52 53 54 60 62 64 65 67 68 73 75 79 80 81 83 87 88 89 94 98 99 103 104 105 106 110 112 114 120 121 122 124 128 132 133 135 136 137 138 139 141 146 147 150 152 153 154 155 159 160 167 170 171 174 177 179 180 183 184 186 192 194 195 196 197 198 201 206 207 208 210 211 214 217 218 219 221 223 225 226 228 229 230 232 234 237 238 240 241 244 246 b 247 0 1 0 4 6 8 9 11 13 14 15 17 18 20 21 24 25 27 28 30 31 34 36 37 38 40 43 46 47 49 52 53 54 60 62 64 65 67 68 73 75 79 80 81 83 87 88 89 94 98 99 103 104 105 106 110 112 114 120 121 122 124 128 132 133 135 136 137 138 139 141 146 147 150 152 153 154 155 159 160 167 170 171 174 177 179 180 183 184 186 192 194 195 196 197 198 201 206 207 208 210 211 214 217 218 219 221 223 225 226 228 229 230 232 234 237 238 240 241 244 246 # 19774 union c a 247 0 1 0 4 6 8 9 11 13 14 15 17 18 20 21 24 25 27 28 30 31 34 36 37 38 40 43 46 47 49 52 53 54 60 62 64 65 67 68 73 75 79 80 81 83 87 88 89 94 98 99 103 104 105 106 110 112 114 120 121 122 124 128 132 133 135 136 137 138 139 141 146 147 150 152 153 154 155 159 160 167 170 171 174 177 179 180 183 184 186 192 194 195 196 197 198 201 206 207 208 210 211 214 217 218 219 221 223 225 226 228 229 230 232 234 237 238 240 241 244 246 b 247 1 1 2 4 5 6 7 9 10 11 12 13 14 15 16 17 18 19 22 23 25 27 28 29 30 33 34 38 39 41 43 46 49 51 54 55 56 58 59 61 62 63 65 66 67 69 70 72 79 81 84 87 89 90 91 92 93 99 101 105 107 109 112 113 114 115 118 119 123 125 127 131 133 135 137 139 140 141 144 149 150 151 154 155 157 159 161 162 163 164 166 168 170 171 179 182 183 184 186 191 194 195 196 197 199 200 205 207 209 210 211 213 214 218 219 220 222 223 224 225 226 227 233 234 235 236 238 239 241 242 243 244 # 19775 union c a 247 1 0 e b 247 1 0 e # 19776 union c a 247 1 0 e b 247 0 0 e # 19777 union c a 247 1 0 e b 247 1 0 e # 19778 union c a 247 1 0 e b 247 0 0 f # 19779 union c a 247 1 0 e b 247 1 0 e # 19780 union c a 247 1 0 e b 247 0 0 0 1 3 4 5 7 8 10 12 13 14 17 18 20 23 29 32 33 34 35 40 42 45 46 47 48 49 52 53 57 58 60 62 63 64 65 69 70 71 79 80 83 85 90 93 94 98 99 101 102 103 112 113 116 117 118 121 123 127 128 130 132 136 138 140 142 143 147 149 152 153 160 161 162 163 165 166 169 172 177 179 180 186 188 189 190 191 192 198 199 205 207 208 209 210 213 214 217 218 220 221 223 225 227 229 230 234 235 238 239 240 246 # 19781 union c a 247 1 0 f b 247 1 0 f # 19782 union c a 247 1 0 f b 247 0 0 e # 19783 union c a 247 1 0 f b 247 1 0 f # 19784 union c a 247 1 0 f b 247 0 0 f # 19785 union c a 247 1 0 f b 247 1 0 f # 19786 union c a 247 1 0 f b 247 0 0 0 2 4 6 7 8 10 12 13 18 19 20 22 23 28 29 31 32 33 35 37 38 41 42 44 45 47 50 52 53 54 55 56 59 60 61 63 64 65 66 68 69 77 79 82 84 85 87 89 90 96 99 100 101 102 106 109 111 121 122 123 125 126 130 133 134 135 139 142 143 144 146 147 148 151 154 157 158 161 162 163 164 168 169 175 178 183 184 185 187 188 189 191 192 194 196 198 199 200 201 207 208 210 212 214 219 221 222 223 225 227 228 230 231 233 240 246 # 19787 union c a 247 1 0 0 1 3 4 6 7 8 11 13 16 18 20 22 24 25 26 32 33 34 35 37 38 42 43 48 49 50 51 57 58 59 67 68 70 72 73 74 75 81 85 86 87 88 90 91 92 95 98 100 101 102 104 105 108 109 110 112 114 116 119 120 122 123 125 126 127 134 135 136 139 140 141 143 145 146 150 153 155 156 157 158 163 164 166 167 169 170 172 173 176 182 183 186 187 189 191 193 196 198 201 202 204 207 209 211 214 215 217 218 219 220 221 224 225 226 227 229 234 238 239 242 243 245 b 247 1 0 0 1 3 4 6 7 8 11 13 16 18 20 22 24 25 26 32 33 34 35 37 38 42 43 48 49 50 51 57 58 59 67 68 70 72 73 74 75 81 85 86 87 88 90 91 92 95 98 100 101 102 104 105 108 109 110 112 114 116 119 120 122 123 125 126 127 134 135 136 139 140 141 143 145 146 150 153 155 156 157 158 163 164 166 167 169 170 172 173 176 182 183 186 187 189 191 193 196 198 201 202 204 207 209 211 214 215 217 218 219 220 221 224 225 226 227 229 234 238 239 242 243 245 # 19788 union c a 247 1 0 0 1 3 4 6 7 8 11 13 16 18 20 22 24 25 26 32 33 34 35 37 38 42 43 48 49 50 51 57 58 59 67 68 70 72 73 74 75 81 85 86 87 88 90 91 92 95 98 100 101 102 104 105 108 109 110 112 114 116 119 120 122 123 125 126 127 134 135 136 139 140 141 143 145 146 150 153 155 156 157 158 163 164 166 167 169 170 172 173 176 182 183 186 187 189 191 193 196 198 201 202 204 207 209 211 214 215 217 218 219 220 221 224 225 226 227 229 234 238 239 242 243 245 b 247 0 0 e # 19789 union c a 247 1 0 0 1 3 4 8 11 13 14 15 18 19 20 21 22 23 25 26 27 29 32 33 35 36 39 40 42 45 47 48 49 50 51 52 59 60 61 63 65 69 71 75 76 78 79 82 84 86 89 92 93 96 97 98 99 102 103 108 112 114 115 119 121 124 125 131 134 135 136 141 142 146 147 148 150 152 154 155 156 161 163 166 167 171 175 176 179 185 190 191 194 196 197 201 203 207 208 209 210 213 214 215 216 217 222 223 224 225 229 230 231 232 233 235 237 238 240 241 244 246 b 247 1 0 0 1 3 4 8 11 13 14 15 18 19 20 21 22 23 25 26 27 29 32 33 35 36 39 40 42 45 47 48 49 50 51 52 59 60 61 63 65 69 71 75 76 78 79 82 84 86 89 92 93 96 97 98 99 102 103 108 112 114 115 119 121 124 125 131 134 135 136 141 142 146 147 148 150 152 154 155 156 161 163 166 167 171 175 176 179 185 190 191 194 196 197 201 203 207 208 209 210 213 214 215 216 217 222 223 224 225 229 230 231 232 233 235 237 238 240 241 244 246 # 19790 union c a 247 1 0 0 1 3 4 8 11 13 14 15 18 19 20 21 22 23 25 26 27 29 32 33 35 36 39 40 42 45 47 48 49 50 51 52 59 60 61 63 65 69 71 75 76 78 79 82 84 86 89 92 93 96 97 98 99 102 103 108 112 114 115 119 121 124 125 131 134 135 136 141 142 146 147 148 150 152 154 155 156 161 163 166 167 171 175 176 179 185 190 191 194 196 197 201 203 207 208 209 210 213 214 215 216 217 222 223 224 225 229 230 231 232 233 235 237 238 240 241 244 246 b 247 0 0 f # 19791 union c a 247 1 0 0 3 4 6 9 10 11 15 20 25 26 27 28 29 30 33 35 39 44 45 47 49 54 55 58 62 63 66 67 68 70 71 77 79 80 84 85 90 91 92 94 96 100 101 105 108 109 111 117 118 119 122 123 124 125 127 131 133 135 136 137 139 142 143 144 146 149 157 158 163 164 165 167 169 171 174 177 178 179 183 184 185 186 187 189 191 193 196 197 198 200 203 204 205 208 209 210 214 215 216 217 218 220 225 228 232 233 235 236 237 238 240 241 242 243 245 246 b 247 1 0 0 3 4 6 9 10 11 15 20 25 26 27 28 29 30 33 35 39 44 45 47 49 54 55 58 62 63 66 67 68 70 71 77 79 80 84 85 90 91 92 94 96 100 101 105 108 109 111 117 118 119 122 123 124 125 127 131 133 135 136 137 139 142 143 144 146 149 157 158 163 164 165 167 169 171 174 177 178 179 183 184 185 186 187 189 191 193 196 197 198 200 203 204 205 208 209 210 214 215 216 217 218 220 225 228 232 233 235 236 237 238 240 241 242 243 245 246 # 19792 union c a 247 1 0 0 3 4 6 9 10 11 15 20 25 26 27 28 29 30 33 35 39 44 45 47 49 54 55 58 62 63 66 67 68 70 71 77 79 80 84 85 90 91 92 94 96 100 101 105 108 109 111 117 118 119 122 123 124 125 127 131 133 135 136 137 139 142 143 144 146 149 157 158 163 164 165 167 169 171 174 177 178 179 183 184 185 186 187 189 191 193 196 197 198 200 203 204 205 208 209 210 214 215 216 217 218 220 225 228 232 233 235 236 237 238 240 241 242 243 245 246 b 247 0 0 1 2 3 4 6 7 8 9 13 14 15 16 19 22 23 24 25 27 28 30 32 33 34 35 37 38 40 42 48 49 50 52 53 54 55 58 60 61 62 63 64 65 68 70 73 74 75 77 78 80 81 83 84 86 88 89 90 91 92 95 97 99 103 104 111 113 114 123 124 125 126 127 128 129 130 131 134 136 139 140 141 142 144 145 149 150 155 156 158 159 161 162 166 168 174 176 178 181 182 184 187 190 191 195 196 197 199 204 205 206 207 210 213 214 216 220 221 229 231 235 237 238 239 241 243 246 # 19793 union c a 247 1 0 e b 247 1 0 e # 19794 union c a 247 1 0 e b 247 0 1 e # 19795 union c a 247 1 0 e b 247 1 0 e # 19796 union c a 247 1 0 e b 247 0 1 f # 19797 union c a 247 1 0 e b 247 1 0 e # 19798 union c a 247 1 0 e b 247 0 1 1 3 4 8 9 10 15 16 17 19 24 28 29 33 36 39 42 44 49 51 52 53 55 56 57 59 61 62 63 68 69 71 72 75 76 77 80 83 89 90 91 93 94 95 97 99 100 101 102 103 104 107 109 110 114 116 118 119 121 122 123 124 126 127 130 132 133 134 135 138 139 141 144 146 147 148 149 150 151 154 156 160 162 163 165 166 167 170 173 174 177 178 179 180 181 182 185 189 190 191 192 194 198 200 201 202 204 205 207 208 210 211 213 214 216 218 219 222 224 225 230 233 235 236 237 238 239 241 243 244 # 19799 union c a 247 1 0 f b 247 1 0 f # 19800 union c a 247 1 0 f b 247 0 1 e # 19801 union c a 247 1 0 f b 247 1 0 f # 19802 union c a 247 1 0 f b 247 0 1 f # 19803 union c a 247 1 0 f b 247 1 0 f # 19804 union c a 247 1 0 f b 247 0 1 0 1 2 3 6 10 11 12 15 16 19 20 22 23 24 25 27 28 29 30 32 33 35 37 39 42 44 47 49 56 58 59 61 63 64 66 71 72 75 78 79 85 86 89 92 95 96 100 101 103 104 105 106 109 112 113 114 116 117 118 119 124 125 126 127 132 133 135 139 141 144 146 147 148 149 150 152 154 155 157 159 160 161 163 165 166 167 170 173 174 181 182 186 195 198 200 202 205 206 207 209 210 212 213 214 217 218 221 222 225 227 229 231 235 236 237 238 240 241 242 243 # 19805 union c a 247 1 0 0 2 5 6 7 9 16 17 19 20 23 26 28 30 33 34 35 36 37 38 40 43 45 48 49 50 55 56 61 62 63 64 65 66 69 70 75 78 79 81 85 90 91 93 94 97 98 99 100 103 104 106 107 108 109 110 112 114 117 119 123 124 128 129 131 133 134 143 144 149 150 151 152 154 155 156 157 159 160 161 164 166 167 168 169 171 173 174 175 176 180 182 183 184 185 186 188 191 193 196 197 199 200 202 205 208 211 212 214 217 218 219 222 223 224 225 227 228 230 231 232 240 241 243 b 247 1 0 0 2 5 6 7 9 16 17 19 20 23 26 28 30 33 34 35 36 37 38 40 43 45 48 49 50 55 56 61 62 63 64 65 66 69 70 75 78 79 81 85 90 91 93 94 97 98 99 100 103 104 106 107 108 109 110 112 114 117 119 123 124 128 129 131 133 134 143 144 149 150 151 152 154 155 156 157 159 160 161 164 166 167 168 169 171 173 174 175 176 180 182 183 184 185 186 188 191 193 196 197 199 200 202 205 208 211 212 214 217 218 219 222 223 224 225 227 228 230 231 232 240 241 243 # 19806 union c a 247 1 0 0 2 5 6 7 9 16 17 19 20 23 26 28 30 33 34 35 36 37 38 40 43 45 48 49 50 55 56 61 62 63 64 65 66 69 70 75 78 79 81 85 90 91 93 94 97 98 99 100 103 104 106 107 108 109 110 112 114 117 119 123 124 128 129 131 133 134 143 144 149 150 151 152 154 155 156 157 159 160 161 164 166 167 168 169 171 173 174 175 176 180 182 183 184 185 186 188 191 193 196 197 199 200 202 205 208 211 212 214 217 218 219 222 223 224 225 227 228 230 231 232 240 241 243 b 247 0 1 e # 19807 union c a 247 1 0 0 3 4 7 10 17 18 19 20 27 28 29 32 35 36 37 42 43 44 48 49 51 56 57 61 62 68 69 70 73 74 76 78 79 81 82 86 88 90 93 94 96 98 99 100 111 115 118 120 121 122 123 125 132 133 135 136 137 144 148 150 152 153 156 157 158 159 163 165 166 168 170 171 172 173 177 178 180 182 183 187 190 192 196 199 200 202 206 207 208 209 210 211 213 214 216 220 222 223 224 227 228 229 232 234 237 238 240 241 243 244 b 247 1 0 0 3 4 7 10 17 18 19 20 27 28 29 32 35 36 37 42 43 44 48 49 51 56 57 61 62 68 69 70 73 74 76 78 79 81 82 86 88 90 93 94 96 98 99 100 111 115 118 120 121 122 123 125 132 133 135 136 137 144 148 150 152 153 156 157 158 159 163 165 166 168 170 171 172 173 177 178 180 182 183 187 190 192 196 199 200 202 206 207 208 209 210 211 213 214 216 220 222 223 224 227 228 229 232 234 237 238 240 241 243 244 # 19808 union c a 247 1 0 0 3 4 7 10 17 18 19 20 27 28 29 32 35 36 37 42 43 44 48 49 51 56 57 61 62 68 69 70 73 74 76 78 79 81 82 86 88 90 93 94 96 98 99 100 111 115 118 120 121 122 123 125 132 133 135 136 137 144 148 150 152 153 156 157 158 159 163 165 166 168 170 171 172 173 177 178 180 182 183 187 190 192 196 199 200 202 206 207 208 209 210 211 213 214 216 220 222 223 224 227 228 229 232 234 237 238 240 241 243 244 b 247 0 1 f # 19809 union c a 247 1 0 0 1 2 3 4 6 7 9 11 12 13 16 17 23 24 27 28 29 31 32 34 35 36 38 41 44 45 47 49 51 52 55 56 57 58 59 64 66 67 68 69 72 75 77 78 79 80 81 83 85 86 88 89 90 96 102 103 104 106 110 111 114 115 124 125 126 129 130 131 133 134 136 138 140 141 145 147 149 150 151 152 155 157 159 160 162 164 166 167 168 169 171 175 177 179 180 182 183 184 185 188 189 191 192 195 196 198 199 202 203 204 209 211 213 214 216 218 219 220 222 223 224 226 228 229 233 234 235 243 b 247 1 0 0 1 2 3 4 6 7 9 11 12 13 16 17 23 24 27 28 29 31 32 34 35 36 38 41 44 45 47 49 51 52 55 56 57 58 59 64 66 67 68 69 72 75 77 78 79 80 81 83 85 86 88 89 90 96 102 103 104 106 110 111 114 115 124 125 126 129 130 131 133 134 136 138 140 141 145 147 149 150 151 152 155 157 159 160 162 164 166 167 168 169 171 175 177 179 180 182 183 184 185 188 189 191 192 195 196 198 199 202 203 204 209 211 213 214 216 218 219 220 222 223 224 226 228 229 233 234 235 243 # 19810 union c a 247 1 0 0 1 2 3 4 6 7 9 11 12 13 16 17 23 24 27 28 29 31 32 34 35 36 38 41 44 45 47 49 51 52 55 56 57 58 59 64 66 67 68 69 72 75 77 78 79 80 81 83 85 86 88 89 90 96 102 103 104 106 110 111 114 115 124 125 126 129 130 131 133 134 136 138 140 141 145 147 149 150 151 152 155 157 159 160 162 164 166 167 168 169 171 175 177 179 180 182 183 184 185 188 189 191 192 195 196 198 199 202 203 204 209 211 213 214 216 218 219 220 222 223 224 226 228 229 233 234 235 243 b 247 0 1 5 8 9 12 16 19 20 21 22 26 28 29 30 34 35 39 41 45 46 49 50 51 52 53 55 57 60 61 62 65 69 71 72 73 78 79 81 82 83 84 85 86 88 90 91 93 96 97 98 100 103 105 107 108 112 115 118 121 123 125 128 131 132 133 134 135 138 142 145 147 150 151 152 156 157 158 159 160 163 164 166 170 171 172 173 176 177 178 179 180 181 182 183 188 190 191 194 196 198 200 201 203 204 205 206 209 212 217 223 224 227 228 230 231 235 236 241 242 246 # 19811 union c a 247 1 0 e b 247 1 0 e # 19812 union c a 247 1 0 e b 247 1 0 e # 19813 union c a 247 1 0 e b 247 1 0 e # 19814 union c a 247 1 0 e b 247 1 0 f # 19815 union c a 247 1 0 e b 247 1 0 e # 19816 union c a 247 1 0 e b 247 1 0 0 4 5 6 8 9 10 12 13 17 18 20 22 24 25 28 29 31 34 35 37 39 40 45 46 48 49 50 54 57 58 60 62 63 64 65 66 67 68 70 72 74 75 77 80 82 84 86 87 89 95 98 99 100 101 107 109 113 114 115 117 118 119 120 127 128 130 134 135 136 138 141 142 143 144 145 146 148 149 151 152 153 154 159 161 163 167 168 173 176 177 178 180 183 184 191 193 194 195 198 201 202 203 204 205 206 207 208 209 211 212 215 216 217 223 225 230 231 238 244 245 # 19817 union c a 247 1 0 f b 247 1 0 f # 19818 union c a 247 1 0 f b 247 1 0 e # 19819 union c a 247 1 0 f b 247 1 0 f # 19820 union c a 247 1 0 f b 247 1 0 f # 19821 union c a 247 1 0 f b 247 1 0 f # 19822 union c a 247 1 0 f b 247 1 0 3 4 5 6 9 10 11 15 17 19 21 22 23 25 28 29 30 34 37 38 40 41 44 45 48 49 52 53 55 56 59 62 63 65 67 68 69 71 72 75 79 83 86 88 92 97 98 100 104 107 108 110 112 116 118 119 120 125 126 127 129 130 132 134 135 136 137 138 139 141 142 144 146 147 149 153 154 155 159 164 165 166 168 169 174 177 179 180 181 185 186 187 190 191 192 194 195 197 200 202 204 205 206 208 209 211 212 214 217 219 222 225 227 228 230 232 233 234 235 238 242 244 245 # 19823 union c a 247 1 0 1 2 5 6 7 9 13 15 16 17 18 23 24 25 26 27 29 31 32 34 37 39 40 42 47 49 51 53 55 56 58 60 62 63 64 65 66 67 68 70 71 72 73 74 75 76 78 82 88 91 92 95 98 100 111 112 116 117 118 119 124 125 126 129 130 133 134 138 139 140 143 144 145 147 149 151 153 154 155 156 157 160 161 162 163 164 168 170 178 179 183 186 189 190 192 193 195 197 199 200 204 205 206 207 209 210 211 215 216 224 225 232 233 234 237 239 243 245 b 247 1 0 1 2 5 6 7 9 13 15 16 17 18 23 24 25 26 27 29 31 32 34 37 39 40 42 47 49 51 53 55 56 58 60 62 63 64 65 66 67 68 70 71 72 73 74 75 76 78 82 88 91 92 95 98 100 111 112 116 117 118 119 124 125 126 129 130 133 134 138 139 140 143 144 145 147 149 151 153 154 155 156 157 160 161 162 163 164 168 170 178 179 183 186 189 190 192 193 195 197 199 200 204 205 206 207 209 210 211 215 216 224 225 232 233 234 237 239 243 245 # 19824 union c a 247 1 0 1 2 5 6 7 9 13 15 16 17 18 23 24 25 26 27 29 31 32 34 37 39 40 42 47 49 51 53 55 56 58 60 62 63 64 65 66 67 68 70 71 72 73 74 75 76 78 82 88 91 92 95 98 100 111 112 116 117 118 119 124 125 126 129 130 133 134 138 139 140 143 144 145 147 149 151 153 154 155 156 157 160 161 162 163 164 168 170 178 179 183 186 189 190 192 193 195 197 199 200 204 205 206 207 209 210 211 215 216 224 225 232 233 234 237 239 243 245 b 247 1 0 e # 19825 union c a 247 1 0 2 5 6 7 8 9 10 15 18 19 20 24 26 27 28 29 33 34 35 36 37 39 43 44 45 48 50 51 52 55 56 59 61 62 64 65 67 69 70 71 73 74 76 79 84 85 86 88 94 95 96 97 98 100 103 109 110 111 115 120 121 123 124 126 127 129 131 133 134 135 138 139 140 141 142 145 147 149 150 151 154 156 157 159 160 161 162 163 164 165 166 169 170 172 173 176 177 178 179 181 182 183 185 188 189 191 192 194 195 202 203 204 207 208 210 213 215 216 217 218 219 220 223 226 227 228 231 233 234 241 242 243 244 b 247 1 0 2 5 6 7 8 9 10 15 18 19 20 24 26 27 28 29 33 34 35 36 37 39 43 44 45 48 50 51 52 55 56 59 61 62 64 65 67 69 70 71 73 74 76 79 84 85 86 88 94 95 96 97 98 100 103 109 110 111 115 120 121 123 124 126 127 129 131 133 134 135 138 139 140 141 142 145 147 149 150 151 154 156 157 159 160 161 162 163 164 165 166 169 170 172 173 176 177 178 179 181 182 183 185 188 189 191 192 194 195 202 203 204 207 208 210 213 215 216 217 218 219 220 223 226 227 228 231 233 234 241 242 243 244 # 19826 union c a 247 1 0 2 5 6 7 8 9 10 15 18 19 20 24 26 27 28 29 33 34 35 36 37 39 43 44 45 48 50 51 52 55 56 59 61 62 64 65 67 69 70 71 73 74 76 79 84 85 86 88 94 95 96 97 98 100 103 109 110 111 115 120 121 123 124 126 127 129 131 133 134 135 138 139 140 141 142 145 147 149 150 151 154 156 157 159 160 161 162 163 164 165 166 169 170 172 173 176 177 178 179 181 182 183 185 188 189 191 192 194 195 202 203 204 207 208 210 213 215 216 217 218 219 220 223 226 227 228 231 233 234 241 242 243 244 b 247 1 0 f # 19827 union c a 247 1 0 5 6 9 11 12 15 16 18 21 22 23 25 29 30 31 32 36 37 40 41 43 48 50 54 55 58 59 61 62 64 65 67 68 69 71 72 74 75 76 79 81 82 83 85 87 91 94 104 105 107 110 111 113 115 116 117 118 122 123 125 126 127 130 131 132 135 138 140 145 147 148 154 155 157 158 159 161 162 163 164 165 166 170 172 173 174 176 180 182 184 185 187 188 189 190 191 192 194 195 197 198 199 201 204 208 209 210 211 213 214 215 218 221 223 226 227 228 229 230 236 237 238 239 240 241 243 246 b 247 1 0 5 6 9 11 12 15 16 18 21 22 23 25 29 30 31 32 36 37 40 41 43 48 50 54 55 58 59 61 62 64 65 67 68 69 71 72 74 75 76 79 81 82 83 85 87 91 94 104 105 107 110 111 113 115 116 117 118 122 123 125 126 127 130 131 132 135 138 140 145 147 148 154 155 157 158 159 161 162 163 164 165 166 170 172 173 174 176 180 182 184 185 187 188 189 190 191 192 194 195 197 198 199 201 204 208 209 210 211 213 214 215 218 221 223 226 227 228 229 230 236 237 238 239 240 241 243 246 # 19828 union c a 247 1 0 5 6 9 11 12 15 16 18 21 22 23 25 29 30 31 32 36 37 40 41 43 48 50 54 55 58 59 61 62 64 65 67 68 69 71 72 74 75 76 79 81 82 83 85 87 91 94 104 105 107 110 111 113 115 116 117 118 122 123 125 126 127 130 131 132 135 138 140 145 147 148 154 155 157 158 159 161 162 163 164 165 166 170 172 173 174 176 180 182 184 185 187 188 189 190 191 192 194 195 197 198 199 201 204 208 209 210 211 213 214 215 218 221 223 226 227 228 229 230 236 237 238 239 240 241 243 246 b 247 1 0 0 1 2 4 5 7 8 9 10 11 12 15 16 17 22 25 26 32 35 36 37 38 39 40 41 42 48 49 54 55 58 60 62 63 66 69 71 75 77 78 80 82 84 85 90 91 94 95 96 99 101 102 103 107 112 114 115 116 121 123 125 126 131 135 136 137 141 142 144 145 147 148 149 152 159 160 161 162 164 167 169 170 171 173 177 181 182 187 188 189 190 191 192 195 196 197 199 202 203 205 207 208 209 212 215 216 217 218 219 220 222 223 224 227 228 229 230 235 237 240 241 243 244 245 246 # 19829 union c a 247 1 0 e b 247 1 0 e # 19830 union c a 247 1 0 e b 247 1 1 e # 19831 union c a 247 1 0 e b 247 1 0 e # 19832 union c a 247 1 0 e b 247 1 1 f # 19833 union c a 247 1 0 e b 247 1 0 e # 19834 union c a 247 1 0 e b 247 1 1 0 1 4 5 7 8 11 15 16 17 22 23 25 28 30 34 38 40 45 48 49 50 53 54 55 58 61 62 63 65 66 67 68 69 71 73 74 75 78 80 81 86 87 88 89 92 93 94 96 97 99 100 101 104 106 108 109 111 112 113 114 117 120 123 129 130 132 134 135 136 137 138 139 140 146 147 149 153 155 157 159 160 163 164 165 166 167 168 169 173 174 175 177 178 179 180 181 184 185 187 188 190 191 192 193 194 196 197 199 201 203 204 208 211 213 214 215 216 218 219 220 221 222 224 225 226 227 231 232 233 234 235 236 238 239 242 243 244 245 246 # 19835 union c a 247 1 0 f b 247 1 0 f # 19836 union c a 247 1 0 f b 247 1 1 e # 19837 union c a 247 1 0 f b 247 1 0 f # 19838 union c a 247 1 0 f b 247 1 1 f # 19839 union c a 247 1 0 f b 247 1 0 f # 19840 union c a 247 1 0 f b 247 1 1 0 1 2 4 9 11 24 26 27 29 32 34 36 37 38 39 40 41 42 46 47 48 51 52 55 56 60 61 62 63 67 69 70 72 73 74 77 81 83 86 88 90 91 96 97 100 102 103 105 107 108 109 115 116 117 118 119 121 125 126 128 130 132 133 136 139 141 142 143 150 154 157 158 162 165 166 167 170 171 173 176 177 178 181 182 183 185 187 188 189 190 193 194 195 196 197 198 202 206 209 211 214 215 216 217 219 220 222 225 227 229 231 235 236 238 240 244 245 # 19841 union c a 247 1 0 0 1 2 4 10 12 13 14 17 18 19 20 21 22 23 24 30 31 36 37 38 42 43 56 58 60 63 64 65 67 68 69 70 71 73 74 75 79 80 81 82 83 88 89 93 97 100 104 106 108 110 112 113 117 119 120 121 124 125 126 128 129 133 134 136 137 139 140 143 145 147 149 150 152 158 159 164 166 167 168 170 171 172 173 174 176 178 180 181 183 184 185 189 193 194 196 197 199 200 201 202 203 204 205 206 207 209 210 212 214 215 218 219 224 226 227 228 229 230 231 232 233 234 235 236 237 238 240 241 b 247 1 0 0 1 2 4 10 12 13 14 17 18 19 20 21 22 23 24 30 31 36 37 38 42 43 56 58 60 63 64 65 67 68 69 70 71 73 74 75 79 80 81 82 83 88 89 93 97 100 104 106 108 110 112 113 117 119 120 121 124 125 126 128 129 133 134 136 137 139 140 143 145 147 149 150 152 158 159 164 166 167 168 170 171 172 173 174 176 178 180 181 183 184 185 189 193 194 196 197 199 200 201 202 203 204 205 206 207 209 210 212 214 215 218 219 224 226 227 228 229 230 231 232 233 234 235 236 237 238 240 241 # 19842 union c a 247 1 0 0 1 2 4 10 12 13 14 17 18 19 20 21 22 23 24 30 31 36 37 38 42 43 56 58 60 63 64 65 67 68 69 70 71 73 74 75 79 80 81 82 83 88 89 93 97 100 104 106 108 110 112 113 117 119 120 121 124 125 126 128 129 133 134 136 137 139 140 143 145 147 149 150 152 158 159 164 166 167 168 170 171 172 173 174 176 178 180 181 183 184 185 189 193 194 196 197 199 200 201 202 203 204 205 206 207 209 210 212 214 215 218 219 224 226 227 228 229 230 231 232 233 234 235 236 237 238 240 241 b 247 1 1 e # 19843 union c a 247 1 0 0 1 4 6 9 12 15 18 22 23 25 27 28 29 30 31 36 37 38 40 42 43 46 47 48 49 50 53 54 56 59 60 65 66 68 69 71 74 75 77 83 88 90 91 92 99 101 102 107 109 110 111 115 116 117 118 119 121 123 125 127 128 129 130 132 134 135 136 137 138 140 141 142 143 146 149 150 152 157 158 161 169 171 172 174 175 176 177 182 184 187 188 193 194 196 197 198 200 203 204 206 207 208 209 210 213 214 215 216 218 219 220 223 224 227 234 236 237 238 239 240 241 243 244 245 246 b 247 1 0 0 1 4 6 9 12 15 18 22 23 25 27 28 29 30 31 36 37 38 40 42 43 46 47 48 49 50 53 54 56 59 60 65 66 68 69 71 74 75 77 83 88 90 91 92 99 101 102 107 109 110 111 115 116 117 118 119 121 123 125 127 128 129 130 132 134 135 136 137 138 140 141 142 143 146 149 150 152 157 158 161 169 171 172 174 175 176 177 182 184 187 188 193 194 196 197 198 200 203 204 206 207 208 209 210 213 214 215 216 218 219 220 223 224 227 234 236 237 238 239 240 241 243 244 245 246 # 19844 union c a 247 1 0 0 1 4 6 9 12 15 18 22 23 25 27 28 29 30 31 36 37 38 40 42 43 46 47 48 49 50 53 54 56 59 60 65 66 68 69 71 74 75 77 83 88 90 91 92 99 101 102 107 109 110 111 115 116 117 118 119 121 123 125 127 128 129 130 132 134 135 136 137 138 140 141 142 143 146 149 150 152 157 158 161 169 171 172 174 175 176 177 182 184 187 188 193 194 196 197 198 200 203 204 206 207 208 209 210 213 214 215 216 218 219 220 223 224 227 234 236 237 238 239 240 241 243 244 245 246 b 247 1 1 f # 19845 union c a 247 1 0 0 2 3 4 7 12 13 15 17 18 20 21 26 29 31 32 34 35 36 37 38 39 45 48 50 52 54 56 57 58 64 65 67 68 70 72 73 74 76 77 78 81 82 85 86 88 89 93 94 96 98 99 100 101 103 104 105 106 108 109 110 113 115 116 118 119 120 122 125 127 128 130 131 133 135 136 139 143 145 148 151 152 156 157 159 161 162 164 167 168 169 170 171 174 175 176 179 180 181 182 183 184 186 187 188 190 193 194 196 199 202 203 206 208 212 215 216 218 219 221 222 223 224 225 226 227 228 234 235 236 237 240 241 242 243 246 b 247 1 0 0 2 3 4 7 12 13 15 17 18 20 21 26 29 31 32 34 35 36 37 38 39 45 48 50 52 54 56 57 58 64 65 67 68 70 72 73 74 76 77 78 81 82 85 86 88 89 93 94 96 98 99 100 101 103 104 105 106 108 109 110 113 115 116 118 119 120 122 125 127 128 130 131 133 135 136 139 143 145 148 151 152 156 157 159 161 162 164 167 168 169 170 171 174 175 176 179 180 181 182 183 184 186 187 188 190 193 194 196 199 202 203 206 208 212 215 216 218 219 221 222 223 224 225 226 227 228 234 235 236 237 240 241 242 243 246 # 19846 union c a 247 1 0 0 2 3 4 7 12 13 15 17 18 20 21 26 29 31 32 34 35 36 37 38 39 45 48 50 52 54 56 57 58 64 65 67 68 70 72 73 74 76 77 78 81 82 85 86 88 89 93 94 96 98 99 100 101 103 104 105 106 108 109 110 113 115 116 118 119 120 122 125 127 128 130 131 133 135 136 139 143 145 148 151 152 156 157 159 161 162 164 167 168 169 170 171 174 175 176 179 180 181 182 183 184 186 187 188 190 193 194 196 199 202 203 206 208 212 215 216 218 219 221 222 223 224 225 226 227 228 234 235 236 237 240 241 242 243 246 b 247 1 1 2 3 4 5 6 7 8 9 10 12 13 14 15 18 20 21 22 24 25 27 29 30 31 33 34 36 37 38 41 42 44 45 50 52 53 54 55 56 60 62 64 65 67 71 75 80 81 82 83 84 88 89 90 91 93 94 98 99 100 102 107 108 113 117 118 120 122 123 125 127 130 133 134 135 136 137 138 139 141 143 144 149 150 151 153 154 155 156 162 163 164 166 167 169 170 171 172 173 174 175 179 181 182 183 184 185 188 189 190 196 201 203 204 206 208 209 211 212 213 214 215 216 219 221 225 226 229 230 232 235 236 239 241 242 244 246 # 19847 union c a 247 1 1 e b 247 1 1 e # 19848 union c a 247 1 1 e b 247 0 0 e # 19849 union c a 247 1 1 e b 247 1 1 e # 19850 union c a 247 1 1 e b 247 0 0 f # 19851 union c a 247 1 1 e b 247 1 1 e # 19852 union c a 247 1 1 e b 247 0 0 1 4 8 15 17 20 21 22 24 29 31 34 36 38 40 42 45 47 48 49 50 53 54 58 60 61 66 68 69 70 74 75 77 80 82 85 86 88 90 91 95 101 102 103 107 109 113 115 116 119 120 122 127 128 133 134 135 138 139 143 145 146 147 148 149 150 151 154 155 156 158 160 161 162 164 165 171 173 174 175 178 183 184 187 193 196 197 198 199 200 202 204 208 209 210 217 219 220 225 233 234 238 241 242 243 # 19853 union c a 247 1 1 f b 247 1 1 f # 19854 union c a 247 1 1 f b 247 0 0 e # 19855 union c a 247 1 1 f b 247 1 1 f # 19856 union c a 247 1 1 f b 247 0 0 f # 19857 union c a 247 1 1 f b 247 1 1 f # 19858 union c a 247 1 1 f b 247 0 0 0 1 3 4 5 6 9 10 11 13 14 15 17 18 19 21 22 23 25 26 27 31 33 34 36 37 42 43 45 47 48 50 53 56 59 60 61 62 63 65 69 71 72 74 78 81 82 83 88 89 91 94 95 96 97 100 101 103 106 107 109 111 112 114 116 117 119 120 121 124 127 131 133 134 137 139 140 142 144 146 152 153 155 156 157 158 165 166 167 168 172 174 176 177 178 180 183 184 185 186 187 188 189 191 195 198 200 202 205 206 209 213 216 219 222 223 224 226 228 229 230 232 234 237 238 239 240 245 # 19859 union c a 247 1 1 2 3 4 6 7 9 10 11 12 17 19 22 23 25 29 30 33 35 36 38 42 43 44 51 52 54 55 57 60 62 68 69 71 74 76 78 80 84 85 87 88 89 91 95 96 98 99 102 103 104 105 107 108 111 112 113 115 116 117 118 119 120 122 124 125 126 127 129 131 134 136 139 140 141 142 143 144 145 146 148 152 153 154 156 157 160 161 164 166 167 168 170 171 173 174 175 176 177 181 182 183 184 185 187 189 193 203 206 207 208 212 215 217 219 221 222 223 227 228 229 230 234 235 237 238 240 242 243 244 245 246 b 247 1 1 2 3 4 6 7 9 10 11 12 17 19 22 23 25 29 30 33 35 36 38 42 43 44 51 52 54 55 57 60 62 68 69 71 74 76 78 80 84 85 87 88 89 91 95 96 98 99 102 103 104 105 107 108 111 112 113 115 116 117 118 119 120 122 124 125 126 127 129 131 134 136 139 140 141 142 143 144 145 146 148 152 153 154 156 157 160 161 164 166 167 168 170 171 173 174 175 176 177 181 182 183 184 185 187 189 193 203 206 207 208 212 215 217 219 221 222 223 227 228 229 230 234 235 237 238 240 242 243 244 245 246 # 19860 union c a 247 1 1 2 3 4 6 7 9 10 11 12 17 19 22 23 25 29 30 33 35 36 38 42 43 44 51 52 54 55 57 60 62 68 69 71 74 76 78 80 84 85 87 88 89 91 95 96 98 99 102 103 104 105 107 108 111 112 113 115 116 117 118 119 120 122 124 125 126 127 129 131 134 136 139 140 141 142 143 144 145 146 148 152 153 154 156 157 160 161 164 166 167 168 170 171 173 174 175 176 177 181 182 183 184 185 187 189 193 203 206 207 208 212 215 217 219 221 222 223 227 228 229 230 234 235 237 238 240 242 243 244 245 246 b 247 0 0 e # 19861 union c a 247 1 1 0 1 3 5 6 10 12 13 19 20 21 22 24 25 27 28 30 31 32 33 36 42 44 45 46 49 52 53 54 55 56 58 59 61 64 65 66 67 71 73 76 77 78 80 81 82 83 84 85 86 87 89 90 91 92 97 103 109 110 112 113 115 116 118 121 122 124 126 129 130 133 135 139 145 150 151 153 156 157 160 162 165 167 169 170 171 175 177 179 182 183 184 185 186 187 188 191 192 193 195 196 197 198 200 204 205 207 208 209 210 220 225 228 230 231 232 237 240 242 244 b 247 1 1 0 1 3 5 6 10 12 13 19 20 21 22 24 25 27 28 30 31 32 33 36 42 44 45 46 49 52 53 54 55 56 58 59 61 64 65 66 67 71 73 76 77 78 80 81 82 83 84 85 86 87 89 90 91 92 97 103 109 110 112 113 115 116 118 121 122 124 126 129 130 133 135 139 145 150 151 153 156 157 160 162 165 167 169 170 171 175 177 179 182 183 184 185 186 187 188 191 192 193 195 196 197 198 200 204 205 207 208 209 210 220 225 228 230 231 232 237 240 242 244 # 19862 union c a 247 1 1 0 1 3 5 6 10 12 13 19 20 21 22 24 25 27 28 30 31 32 33 36 42 44 45 46 49 52 53 54 55 56 58 59 61 64 65 66 67 71 73 76 77 78 80 81 82 83 84 85 86 87 89 90 91 92 97 103 109 110 112 113 115 116 118 121 122 124 126 129 130 133 135 139 145 150 151 153 156 157 160 162 165 167 169 170 171 175 177 179 182 183 184 185 186 187 188 191 192 193 195 196 197 198 200 204 205 207 208 209 210 220 225 228 230 231 232 237 240 242 244 b 247 0 0 f # 19863 union c a 247 1 1 2 3 7 8 17 18 19 21 23 24 26 27 29 35 40 41 43 45 49 51 52 56 61 62 63 65 67 69 70 72 75 79 81 85 86 97 99 100 102 104 107 108 109 110 112 115 121 122 123 124 128 130 131 132 133 137 139 140 145 147 148 149 158 160 161 163 164 167 169 170 171 172 176 177 179 180 184 185 186 190 193 194 195 198 199 200 201 202 203 209 211 213 215 217 219 221 222 223 224 225 226 229 232 233 235 237 243 245 246 b 247 1 1 2 3 7 8 17 18 19 21 23 24 26 27 29 35 40 41 43 45 49 51 52 56 61 62 63 65 67 69 70 72 75 79 81 85 86 97 99 100 102 104 107 108 109 110 112 115 121 122 123 124 128 130 131 132 133 137 139 140 145 147 148 149 158 160 161 163 164 167 169 170 171 172 176 177 179 180 184 185 186 190 193 194 195 198 199 200 201 202 203 209 211 213 215 217 219 221 222 223 224 225 226 229 232 233 235 237 243 245 246 # 19864 union c a 247 1 1 2 3 7 8 17 18 19 21 23 24 26 27 29 35 40 41 43 45 49 51 52 56 61 62 63 65 67 69 70 72 75 79 81 85 86 97 99 100 102 104 107 108 109 110 112 115 121 122 123 124 128 130 131 132 133 137 139 140 145 147 148 149 158 160 161 163 164 167 169 170 171 172 176 177 179 180 184 185 186 190 193 194 195 198 199 200 201 202 203 209 211 213 215 217 219 221 222 223 224 225 226 229 232 233 235 237 243 245 246 b 247 0 0 0 1 2 5 7 8 10 12 14 15 17 20 21 25 26 29 30 31 33 35 36 37 38 39 44 48 51 53 55 56 63 65 68 72 73 75 76 77 78 79 82 83 86 88 89 90 93 94 96 98 100 101 102 104 107 108 110 112 113 114 117 118 120 123 128 130 131 135 136 138 139 140 142 145 146 148 150 152 156 157 158 159 164 165 167 171 172 175 180 182 183 189 190 194 200 201 205 207 209 210 211 213 214 215 216 217 218 220 221 222 225 226 227 231 232 233 236 237 238 239 240 241 242 244 245 246 # 19865 union c a 247 1 1 e b 247 1 1 e # 19866 union c a 247 1 1 e b 247 0 1 e # 19867 union c a 247 1 1 e b 247 1 1 e # 19868 union c a 247 1 1 e b 247 0 1 f # 19869 union c a 247 1 1 e b 247 1 1 e # 19870 union c a 247 1 1 e b 247 0 1 0 1 2 3 4 5 6 12 15 19 20 22 23 25 26 29 37 39 41 45 46 47 48 51 54 55 56 57 60 61 62 65 67 68 69 70 72 73 74 75 76 77 78 79 80 82 85 88 90 93 94 96 99 101 103 104 105 106 107 108 109 111 112 116 118 119 120 121 124 125 126 129 132 135 138 142 146 148 149 151 152 154 157 158 159 160 163 164 165 166 172 174 176 178 181 183 187 188 190 191 192 193 196 198 199 200 204 206 208 210 211 214 215 218 220 221 223 224 225 228 229 231 233 235 237 239 242 243 244 245 246 # 19871 union c a 247 1 1 f b 247 1 1 f # 19872 union c a 247 1 1 f b 247 0 1 e # 19873 union c a 247 1 1 f b 247 1 1 f # 19874 union c a 247 1 1 f b 247 0 1 f # 19875 union c a 247 1 1 f b 247 1 1 f # 19876 union c a 247 1 1 f b 247 0 1 2 3 5 6 9 11 12 16 18 19 20 21 23 25 26 29 31 35 36 38 43 44 45 47 52 53 54 57 59 61 62 63 64 67 68 71 72 73 74 75 76 78 80 82 83 84 85 86 91 94 100 101 103 104 106 107 108 112 113 115 116 120 121 123 124 125 130 131 133 134 135 138 139 140 141 143 144 145 147 148 149 150 151 154 157 158 161 163 164 166 167 168 170 171 177 180 182 185 186 187 188 189 193 194 196 197 199 203 204 205 207 208 211 212 214 216 217 218 219 222 223 224 225 227 228 230 231 232 234 237 241 242 244 245 # 19877 union c a 247 1 1 0 1 3 5 6 8 9 11 13 16 17 20 22 24 27 32 33 36 37 40 41 44 45 46 47 49 50 53 54 55 57 58 59 69 70 72 73 75 76 78 81 82 87 91 92 93 94 98 99 102 108 111 112 116 117 121 122 125 126 127 129 131 135 136 137 138 139 142 144 146 149 150 151 152 153 156 158 160 164 165 166 167 168 169 170 171 176 177 178 179 180 182 183 185 186 187 189 199 202 203 204 209 214 215 217 218 220 221 222 226 227 228 230 232 233 236 238 243 244 246 b 247 1 1 0 1 3 5 6 8 9 11 13 16 17 20 22 24 27 32 33 36 37 40 41 44 45 46 47 49 50 53 54 55 57 58 59 69 70 72 73 75 76 78 81 82 87 91 92 93 94 98 99 102 108 111 112 116 117 121 122 125 126 127 129 131 135 136 137 138 139 142 144 146 149 150 151 152 153 156 158 160 164 165 166 167 168 169 170 171 176 177 178 179 180 182 183 185 186 187 189 199 202 203 204 209 214 215 217 218 220 221 222 226 227 228 230 232 233 236 238 243 244 246 # 19878 union c a 247 1 1 0 1 3 5 6 8 9 11 13 16 17 20 22 24 27 32 33 36 37 40 41 44 45 46 47 49 50 53 54 55 57 58 59 69 70 72 73 75 76 78 81 82 87 91 92 93 94 98 99 102 108 111 112 116 117 121 122 125 126 127 129 131 135 136 137 138 139 142 144 146 149 150 151 152 153 156 158 160 164 165 166 167 168 169 170 171 176 177 178 179 180 182 183 185 186 187 189 199 202 203 204 209 214 215 217 218 220 221 222 226 227 228 230 232 233 236 238 243 244 246 b 247 0 1 e # 19879 union c a 247 1 1 0 7 8 10 11 18 19 22 24 26 27 28 31 32 33 37 44 45 46 48 49 50 52 53 54 55 56 57 59 61 62 64 66 70 72 74 75 76 77 78 79 80 81 83 84 85 87 88 89 90 91 92 93 95 97 102 103 104 105 106 107 108 109 110 111 112 113 116 117 119 120 121 122 123 124 125 126 127 128 132 135 137 140 145 146 148 150 151 153 154 155 156 157 158 159 162 164 166 170 171 172 175 176 179 180 183 184 186 187 188 189 196 198 199 200 201 202 203 206 208 209 210 211 214 216 217 218 219 220 222 224 226 227 228 229 230 231 232 233 234 235 242 243 244 245 246 b 247 1 1 0 7 8 10 11 18 19 22 24 26 27 28 31 32 33 37 44 45 46 48 49 50 52 53 54 55 56 57 59 61 62 64 66 70 72 74 75 76 77 78 79 80 81 83 84 85 87 88 89 90 91 92 93 95 97 102 103 104 105 106 107 108 109 110 111 112 113 116 117 119 120 121 122 123 124 125 126 127 128 132 135 137 140 145 146 148 150 151 153 154 155 156 157 158 159 162 164 166 170 171 172 175 176 179 180 183 184 186 187 188 189 196 198 199 200 201 202 203 206 208 209 210 211 214 216 217 218 219 220 222 224 226 227 228 229 230 231 232 233 234 235 242 243 244 245 246 # 19880 union c a 247 1 1 0 7 8 10 11 18 19 22 24 26 27 28 31 32 33 37 44 45 46 48 49 50 52 53 54 55 56 57 59 61 62 64 66 70 72 74 75 76 77 78 79 80 81 83 84 85 87 88 89 90 91 92 93 95 97 102 103 104 105 106 107 108 109 110 111 112 113 116 117 119 120 121 122 123 124 125 126 127 128 132 135 137 140 145 146 148 150 151 153 154 155 156 157 158 159 162 164 166 170 171 172 175 176 179 180 183 184 186 187 188 189 196 198 199 200 201 202 203 206 208 209 210 211 214 216 217 218 219 220 222 224 226 227 228 229 230 231 232 233 234 235 242 243 244 245 246 b 247 0 1 f # 19881 union c a 247 1 1 2 9 12 13 14 15 16 17 19 20 21 22 28 29 34 35 36 37 40 49 50 52 53 57 60 61 62 64 66 67 70 72 74 76 77 80 85 86 87 88 90 92 93 94 95 97 98 99 100 101 102 103 105 106 108 112 113 114 116 117 119 120 123 124 125 126 128 129 130 131 133 135 136 138 140 142 143 145 148 149 151 152 154 155 157 162 163 166 167 168 169 171 174 175 182 184 185 190 191 192 193 194 195 197 198 203 204 208 209 210 211 213 218 219 220 222 223 225 226 228 229 230 233 234 238 239 242 246 b 247 1 1 2 9 12 13 14 15 16 17 19 20 21 22 28 29 34 35 36 37 40 49 50 52 53 57 60 61 62 64 66 67 70 72 74 76 77 80 85 86 87 88 90 92 93 94 95 97 98 99 100 101 102 103 105 106 108 112 113 114 116 117 119 120 123 124 125 126 128 129 130 131 133 135 136 138 140 142 143 145 148 149 151 152 154 155 157 162 163 166 167 168 169 171 174 175 182 184 185 190 191 192 193 194 195 197 198 203 204 208 209 210 211 213 218 219 220 222 223 225 226 228 229 230 233 234 238 239 242 246 # 19882 union c a 247 1 1 2 9 12 13 14 15 16 17 19 20 21 22 28 29 34 35 36 37 40 49 50 52 53 57 60 61 62 64 66 67 70 72 74 76 77 80 85 86 87 88 90 92 93 94 95 97 98 99 100 101 102 103 105 106 108 112 113 114 116 117 119 120 123 124 125 126 128 129 130 131 133 135 136 138 140 142 143 145 148 149 151 152 154 155 157 162 163 166 167 168 169 171 174 175 182 184 185 190 191 192 193 194 195 197 198 203 204 208 209 210 211 213 218 219 220 222 223 225 226 228 229 230 233 234 238 239 242 246 b 247 0 1 0 1 3 4 5 6 9 11 13 15 18 20 23 25 26 27 28 29 30 31 32 38 40 45 49 50 51 54 55 56 58 59 62 64 66 67 69 72 73 74 78 79 81 82 84 87 88 89 90 93 94 96 101 102 105 107 110 112 114 115 116 118 119 121 123 124 126 127 128 131 132 137 140 142 143 144 145 146 147 149 150 152 155 161 164 166 170 172 173 176 179 181 185 186 187 188 190 194 196 197 199 204 206 207 208 209 210 211 212 216 218 219 220 221 223 227 229 230 231 232 235 236 237 238 240 243 244 245 # 19883 union c a 247 1 1 e b 247 1 1 e # 19884 union c a 247 1 1 e b 247 1 0 e # 19885 union c a 247 1 1 e b 247 1 1 e # 19886 union c a 247 1 1 e b 247 1 0 f # 19887 union c a 247 1 1 e b 247 1 1 e # 19888 union c a 247 1 1 e b 247 1 0 0 1 3 4 7 9 10 13 16 17 19 23 25 28 30 33 35 38 39 41 45 46 50 51 52 54 58 60 62 63 65 66 67 69 71 73 75 77 79 82 83 84 85 89 95 98 99 100 104 105 108 109 111 112 114 115 118 119 123 124 126 127 128 130 131 132 135 136 137 139 141 142 145 147 148 150 152 153 154 157 162 163 166 168 169 172 173 174 175 176 178 179 182 185 186 187 188 191 194 195 197 200 201 202 204 205 211 212 214 217 219 220 222 224 225 228 229 230 232 233 234 236 238 239 240 242 245 246 # 19889 union c a 247 1 1 f b 247 1 1 f # 19890 union c a 247 1 1 f b 247 1 0 e # 19891 union c a 247 1 1 f b 247 1 1 f # 19892 union c a 247 1 1 f b 247 1 0 f # 19893 union c a 247 1 1 f b 247 1 1 f # 19894 union c a 247 1 1 f b 247 1 0 0 2 3 6 7 9 15 17 18 19 20 22 23 25 27 32 34 36 37 41 42 43 45 46 48 49 51 53 55 56 57 61 62 63 65 70 71 74 77 78 80 85 88 89 90 91 92 94 98 99 100 102 103 104 105 108 110 111 112 115 116 119 121 122 123 125 127 128 129 131 134 136 138 139 140 141 145 149 150 152 153 157 158 160 164 165 166 167 169 171 172 173 175 176 177 179 180 184 185 186 188 189 190 194 195 198 203 205 206 207 208 210 211 217 218 220 221 222 223 226 228 229 230 232 243 244 # 19895 union c a 247 1 1 8 9 12 13 15 16 17 23 24 25 26 27 31 32 33 41 43 44 45 46 47 50 51 52 55 58 59 60 63 65 67 69 70 78 79 80 81 85 87 89 93 96 97 99 103 104 105 107 110 114 115 117 119 120 121 124 125 126 127 129 130 131 134 135 138 139 141 142 143 144 145 148 149 150 151 152 154 155 156 157 158 160 163 164 166 167 168 169 170 172 173 174 175 178 181 182 185 188 190 192 196 202 204 205 206 209 210 211 212 213 216 217 220 222 223 228 229 230 232 234 235 237 240 243 244 246 b 247 1 1 8 9 12 13 15 16 17 23 24 25 26 27 31 32 33 41 43 44 45 46 47 50 51 52 55 58 59 60 63 65 67 69 70 78 79 80 81 85 87 89 93 96 97 99 103 104 105 107 110 114 115 117 119 120 121 124 125 126 127 129 130 131 134 135 138 139 141 142 143 144 145 148 149 150 151 152 154 155 156 157 158 160 163 164 166 167 168 169 170 172 173 174 175 178 181 182 185 188 190 192 196 202 204 205 206 209 210 211 212 213 216 217 220 222 223 228 229 230 232 234 235 237 240 243 244 246 # 19896 union c a 247 1 1 8 9 12 13 15 16 17 23 24 25 26 27 31 32 33 41 43 44 45 46 47 50 51 52 55 58 59 60 63 65 67 69 70 78 79 80 81 85 87 89 93 96 97 99 103 104 105 107 110 114 115 117 119 120 121 124 125 126 127 129 130 131 134 135 138 139 141 142 143 144 145 148 149 150 151 152 154 155 156 157 158 160 163 164 166 167 168 169 170 172 173 174 175 178 181 182 185 188 190 192 196 202 204 205 206 209 210 211 212 213 216 217 220 222 223 228 229 230 232 234 235 237 240 243 244 246 b 247 1 0 e # 19897 union c a 247 1 1 0 5 7 9 12 13 16 17 18 19 20 21 25 26 28 33 34 35 37 38 39 40 41 44 46 47 49 50 54 55 59 60 66 67 69 71 72 73 75 78 80 81 82 88 89 91 93 94 97 100 101 105 107 109 112 113 114 115 120 121 124 126 129 130 131 132 137 138 140 142 147 148 149 151 152 154 155 156 157 159 160 161 162 166 169 170 171 172 173 177 178 179 180 182 183 184 185 186 194 196 198 201 204 205 207 208 210 211 212 213 214 217 218 219 220 224 225 226 227 229 231 232 234 239 240 242 243 b 247 1 1 0 5 7 9 12 13 16 17 18 19 20 21 25 26 28 33 34 35 37 38 39 40 41 44 46 47 49 50 54 55 59 60 66 67 69 71 72 73 75 78 80 81 82 88 89 91 93 94 97 100 101 105 107 109 112 113 114 115 120 121 124 126 129 130 131 132 137 138 140 142 147 148 149 151 152 154 155 156 157 159 160 161 162 166 169 170 171 172 173 177 178 179 180 182 183 184 185 186 194 196 198 201 204 205 207 208 210 211 212 213 214 217 218 219 220 224 225 226 227 229 231 232 234 239 240 242 243 # 19898 union c a 247 1 1 0 5 7 9 12 13 16 17 18 19 20 21 25 26 28 33 34 35 37 38 39 40 41 44 46 47 49 50 54 55 59 60 66 67 69 71 72 73 75 78 80 81 82 88 89 91 93 94 97 100 101 105 107 109 112 113 114 115 120 121 124 126 129 130 131 132 137 138 140 142 147 148 149 151 152 154 155 156 157 159 160 161 162 166 169 170 171 172 173 177 178 179 180 182 183 184 185 186 194 196 198 201 204 205 207 208 210 211 212 213 214 217 218 219 220 224 225 226 227 229 231 232 234 239 240 242 243 b 247 1 0 f # 19899 union c a 247 1 1 0 3 5 6 8 9 11 13 14 16 20 21 22 23 24 29 30 33 34 36 37 38 40 46 47 48 49 52 53 57 58 59 60 61 62 63 64 65 68 70 71 72 75 78 82 83 85 88 95 97 104 105 108 115 117 119 124 125 127 128 129 134 137 141 143 145 149 151 153 155 156 157 158 159 160 164 167 169 172 173 177 178 179 182 183 185 186 188 189 192 193 194 195 196 198 201 202 204 205 208 213 214 215 216 217 218 219 224 225 227 229 232 233 234 235 236 238 239 242 243 245 246 b 247 1 1 0 3 5 6 8 9 11 13 14 16 20 21 22 23 24 29 30 33 34 36 37 38 40 46 47 48 49 52 53 57 58 59 60 61 62 63 64 65 68 70 71 72 75 78 82 83 85 88 95 97 104 105 108 115 117 119 124 125 127 128 129 134 137 141 143 145 149 151 153 155 156 157 158 159 160 164 167 169 172 173 177 178 179 182 183 185 186 188 189 192 193 194 195 196 198 201 202 204 205 208 213 214 215 216 217 218 219 224 225 227 229 232 233 234 235 236 238 239 242 243 245 246 # 19900 union c a 247 1 1 0 3 5 6 8 9 11 13 14 16 20 21 22 23 24 29 30 33 34 36 37 38 40 46 47 48 49 52 53 57 58 59 60 61 62 63 64 65 68 70 71 72 75 78 82 83 85 88 95 97 104 105 108 115 117 119 124 125 127 128 129 134 137 141 143 145 149 151 153 155 156 157 158 159 160 164 167 169 172 173 177 178 179 182 183 185 186 188 189 192 193 194 195 196 198 201 202 204 205 208 213 214 215 216 217 218 219 224 225 227 229 232 233 234 235 236 238 239 242 243 245 246 b 247 1 0 1 2 3 5 7 8 10 11 13 15 16 18 19 21 22 23 25 26 29 32 33 35 36 37 38 39 40 41 42 44 47 51 54 55 57 60 62 72 74 75 76 81 82 83 85 89 90 93 94 95 99 101 102 105 107 108 109 112 115 116 117 122 123 127 128 129 130 133 134 135 137 138 140 141 142 148 149 150 155 156 157 158 159 161 162 163 165 166 167 168 174 175 176 178 179 181 183 186 189 190 191 192 193 194 196 200 201 202 205 207 210 211 212 213 214 217 219 220 223 226 228 230 231 232 233 236 240 241 243 244 246 # 19901 union c a 247 1 1 e b 247 1 1 e # 19902 union c a 247 1 1 e b 247 1 1 e # 19903 union c a 247 1 1 e b 247 1 1 e # 19904 union c a 247 1 1 e b 247 1 1 f # 19905 union c a 247 1 1 e b 247 1 1 e # 19906 union c a 247 1 1 e b 247 1 1 5 6 7 9 10 11 12 18 20 22 24 25 27 28 29 30 32 39 43 45 47 53 56 57 60 61 62 63 66 71 73 74 75 76 78 79 81 83 84 85 87 88 89 92 93 95 99 101 103 106 109 111 112 114 115 119 121 123 124 125 126 127 128 130 135 138 139 142 143 144 145 146 147 150 151 152 154 155 157 158 162 164 168 171 174 177 179 180 183 184 186 187 188 192 193 194 195 197 198 199 202 203 205 206 207 208 211 213 214 220 223 226 227 229 230 232 233 236 241 243 244 245 # 19907 union c a 247 1 1 f b 247 1 1 f # 19908 union c a 247 1 1 f b 247 1 1 e # 19909 union c a 247 1 1 f b 247 1 1 f # 19910 union c a 247 1 1 f b 247 1 1 f # 19911 union c a 247 1 1 f b 247 1 1 f # 19912 union c a 247 1 1 f b 247 1 1 0 5 6 9 13 14 15 16 17 18 22 23 24 27 30 32 38 39 41 44 47 48 56 57 58 59 60 61 63 65 66 67 68 69 70 72 74 75 77 78 82 83 86 89 92 94 97 100 104 109 110 113 115 118 122 124 125 126 127 128 132 133 134 136 138 142 145 150 153 154 160 162 165 166 168 169 174 177 178 181 182 183 184 185 186 191 192 195 196 199 201 204 205 206 208 209 210 212 213 214 215 217 218 219 222 223 224 226 227 228 230 231 232 233 235 236 239 241 244 # 19913 union c a 247 1 1 3 5 6 9 12 13 14 15 16 17 19 20 21 22 23 25 27 28 30 31 32 34 36 37 38 40 42 44 45 47 48 51 54 57 68 70 71 73 80 81 82 85 86 87 88 89 90 95 97 103 104 108 110 111 113 117 120 125 126 127 128 133 134 138 140 141 143 147 149 152 153 154 156 157 159 160 161 162 164 165 166 167 169 171 172 174 176 182 185 186 187 190 193 194 195 196 197 198 199 200 202 203 204 205 206 207 211 212 214 215 216 217 218 220 221 222 225 228 231 234 237 238 239 240 243 246 b 247 1 1 3 5 6 9 12 13 14 15 16 17 19 20 21 22 23 25 27 28 30 31 32 34 36 37 38 40 42 44 45 47 48 51 54 57 68 70 71 73 80 81 82 85 86 87 88 89 90 95 97 103 104 108 110 111 113 117 120 125 126 127 128 133 134 138 140 141 143 147 149 152 153 154 156 157 159 160 161 162 164 165 166 167 169 171 172 174 176 182 185 186 187 190 193 194 195 196 197 198 199 200 202 203 204 205 206 207 211 212 214 215 216 217 218 220 221 222 225 228 231 234 237 238 239 240 243 246 # 19914 union c a 247 1 1 3 5 6 9 12 13 14 15 16 17 19 20 21 22 23 25 27 28 30 31 32 34 36 37 38 40 42 44 45 47 48 51 54 57 68 70 71 73 80 81 82 85 86 87 88 89 90 95 97 103 104 108 110 111 113 117 120 125 126 127 128 133 134 138 140 141 143 147 149 152 153 154 156 157 159 160 161 162 164 165 166 167 169 171 172 174 176 182 185 186 187 190 193 194 195 196 197 198 199 200 202 203 204 205 206 207 211 212 214 215 216 217 218 220 221 222 225 228 231 234 237 238 239 240 243 246 b 247 1 1 e # 19915 union c a 247 1 1 2 3 6 8 9 10 12 13 15 17 18 19 20 22 23 25 29 30 31 32 33 34 37 38 40 43 45 46 47 48 49 50 51 55 57 58 59 61 62 64 65 66 67 68 71 72 73 74 76 77 80 83 84 85 86 89 91 92 100 101 103 109 110 111 112 113 114 115 116 117 118 125 126 127 128 130 131 132 137 138 139 142 145 151 153 155 157 158 161 164 165 166 171 172 173 176 177 178 180 184 190 191 192 194 195 196 197 201 204 205 206 208 210 211 212 213 215 217 219 220 222 223 225 226 230 231 234 235 237 242 243 246 b 247 1 1 2 3 6 8 9 10 12 13 15 17 18 19 20 22 23 25 29 30 31 32 33 34 37 38 40 43 45 46 47 48 49 50 51 55 57 58 59 61 62 64 65 66 67 68 71 72 73 74 76 77 80 83 84 85 86 89 91 92 100 101 103 109 110 111 112 113 114 115 116 117 118 125 126 127 128 130 131 132 137 138 139 142 145 151 153 155 157 158 161 164 165 166 171 172 173 176 177 178 180 184 190 191 192 194 195 196 197 201 204 205 206 208 210 211 212 213 215 217 219 220 222 223 225 226 230 231 234 235 237 242 243 246 # 19916 union c a 247 1 1 2 3 6 8 9 10 12 13 15 17 18 19 20 22 23 25 29 30 31 32 33 34 37 38 40 43 45 46 47 48 49 50 51 55 57 58 59 61 62 64 65 66 67 68 71 72 73 74 76 77 80 83 84 85 86 89 91 92 100 101 103 109 110 111 112 113 114 115 116 117 118 125 126 127 128 130 131 132 137 138 139 142 145 151 153 155 157 158 161 164 165 166 171 172 173 176 177 178 180 184 190 191 192 194 195 196 197 201 204 205 206 208 210 211 212 213 215 217 219 220 222 223 225 226 230 231 234 235 237 242 243 246 b 247 1 1 f # 19917 union c a 247 1 1 0 1 2 3 4 7 8 10 12 16 17 19 28 29 32 35 37 38 40 41 43 45 47 49 50 51 52 53 57 58 62 65 66 67 68 69 71 73 75 77 78 79 82 85 86 87 88 89 93 95 96 98 99 101 103 104 105 108 112 113 114 116 117 119 120 122 123 126 128 133 134 136 140 141 142 144 146 147 149 151 154 155 156 157 159 161 163 166 168 170 174 175 176 177 178 180 184 187 188 189 190 193 194 195 197 199 201 203 206 210 211 212 213 221 223 224 226 229 231 232 233 234 238 240 241 243 244 245 b 247 1 1 0 1 2 3 4 7 8 10 12 16 17 19 28 29 32 35 37 38 40 41 43 45 47 49 50 51 52 53 57 58 62 65 66 67 68 69 71 73 75 77 78 79 82 85 86 87 88 89 93 95 96 98 99 101 103 104 105 108 112 113 114 116 117 119 120 122 123 126 128 133 134 136 140 141 142 144 146 147 149 151 154 155 156 157 159 161 163 166 168 170 174 175 176 177 178 180 184 187 188 189 190 193 194 195 197 199 201 203 206 210 211 212 213 221 223 224 226 229 231 232 233 234 238 240 241 243 244 245 # 19918 union c a 247 1 1 0 1 2 3 4 7 8 10 12 16 17 19 28 29 32 35 37 38 40 41 43 45 47 49 50 51 52 53 57 58 62 65 66 67 68 69 71 73 75 77 78 79 82 85 86 87 88 89 93 95 96 98 99 101 103 104 105 108 112 113 114 116 117 119 120 122 123 126 128 133 134 136 140 141 142 144 146 147 149 151 154 155 156 157 159 161 163 166 168 170 174 175 176 177 178 180 184 187 188 189 190 193 194 195 197 199 201 203 206 210 211 212 213 221 223 224 226 229 231 232 233 234 238 240 241 243 244 245 b 247 1 1 0 6 10 11 12 13 14 15 16 17 20 21 24 26 27 28 29 30 31 32 36 37 38 41 43 44 46 47 48 51 53 56 58 59 61 62 66 70 75 78 81 83 84 85 86 87 89 90 91 92 93 94 96 97 98 101 102 107 111 113 114 115 116 117 118 120 122 123 125 128 131 137 139 142 145 147 152 154 155 159 161 162 163 164 171 172 177 179 180 182 183 184 185 186 187 189 190 191 192 193 195 197 199 201 202 205 208 209 211 215 218 221 223 224 225 226 229 231 232 234 235 239 241 242 244 # 19919 union c a 0 0 0 e b 0 0 0 e # 19920 intersection c a 0 0 0 e b 0 0 0 e # 19921 intersection c a 0 0 0 e b 0 0 0 e # 19922 intersection c a 0 0 0 e b 0 0 0 e # 19923 intersection c a 0 0 0 e b 0 0 0 e # 19924 intersection c a 0 0 0 e b 0 0 0 # 19925 intersection c a 0 0 0 e b 0 0 0 e # 19926 intersection c a 0 0 0 e b 0 0 0 e # 19927 intersection c a 0 0 0 e b 0 0 0 e # 19928 intersection c a 0 0 0 e b 0 0 0 e # 19929 intersection c a 0 0 0 e b 0 0 0 e # 19930 intersection c a 0 0 0 e b 0 0 0 # 19931 intersection c a 0 0 0 b 0 0 0 # 19932 intersection c a 0 0 0 b 0 0 0 e # 19933 intersection c a 0 0 0 b 0 0 0 # 19934 intersection c a 0 0 0 b 0 0 0 e # 19935 intersection c a 0 0 0 b 0 0 0 # 19936 intersection c a 0 0 0 b 0 0 0 # 19937 intersection c a 0 0 0 e b 0 0 0 e # 19938 intersection c a 0 0 0 e b 0 0 1 e # 19939 intersection c a 0 0 0 e b 0 0 0 e # 19940 intersection c a 0 0 0 e b 0 0 1 e # 19941 intersection c a 0 0 0 e b 0 0 0 e # 19942 intersection c a 0 0 0 e b 0 0 1 # 19943 intersection c a 0 0 0 e b 0 0 0 e # 19944 intersection c a 0 0 0 e b 0 0 1 e # 19945 intersection c a 0 0 0 e b 0 0 0 e # 19946 intersection c a 0 0 0 e b 0 0 1 e # 19947 intersection c a 0 0 0 e b 0 0 0 e # 19948 intersection c a 0 0 0 e b 0 0 1 # 19949 intersection c a 0 0 0 b 0 0 0 # 19950 intersection c a 0 0 0 b 0 0 1 e # 19951 intersection c a 0 0 0 b 0 0 0 # 19952 intersection c a 0 0 0 b 0 0 1 e # 19953 intersection c a 0 0 0 b 0 0 0 # 19954 intersection c a 0 0 0 b 0 0 1 # 19955 intersection c a 0 0 0 e b 0 0 0 e # 19956 intersection c a 0 0 0 e b 0 1 0 e # 19957 intersection c a 0 0 0 e b 0 0 0 e # 19958 intersection c a 0 0 0 e b 0 1 0 e # 19959 intersection c a 0 0 0 e b 0 0 0 e # 19960 intersection c a 0 0 0 e b 0 1 0 # 19961 intersection c a 0 0 0 e b 0 0 0 e # 19962 intersection c a 0 0 0 e b 0 1 0 e # 19963 intersection c a 0 0 0 e b 0 0 0 e # 19964 intersection c a 0 0 0 e b 0 1 0 e # 19965 intersection c a 0 0 0 e b 0 0 0 e # 19966 intersection c a 0 0 0 e b 0 1 0 # 19967 intersection c a 0 0 0 b 0 0 0 # 19968 intersection c a 0 0 0 b 0 1 0 e # 19969 intersection c a 0 0 0 b 0 0 0 # 19970 intersection c a 0 0 0 b 0 1 0 e # 19971 intersection c a 0 0 0 b 0 0 0 # 19972 intersection c a 0 0 0 b 0 1 0 # 19973 intersection c a 0 0 0 e b 0 0 0 e # 19974 intersection c a 0 0 0 e b 0 1 1 e # 19975 intersection c a 0 0 0 e b 0 0 0 e # 19976 intersection c a 0 0 0 e b 0 1 1 e # 19977 intersection c a 0 0 0 e b 0 0 0 e # 19978 intersection c a 0 0 0 e b 0 1 1 # 19979 intersection c a 0 0 0 e b 0 0 0 e # 19980 intersection c a 0 0 0 e b 0 1 1 e # 19981 intersection c a 0 0 0 e b 0 0 0 e # 19982 intersection c a 0 0 0 e b 0 1 1 e # 19983 intersection c a 0 0 0 e b 0 0 0 e # 19984 intersection c a 0 0 0 e b 0 1 1 # 19985 intersection c a 0 0 0 b 0 0 0 # 19986 intersection c a 0 0 0 b 0 1 1 e # 19987 intersection c a 0 0 0 b 0 0 0 # 19988 intersection c a 0 0 0 b 0 1 1 e # 19989 intersection c a 0 0 0 b 0 0 0 # 19990 intersection c a 0 0 0 b 0 1 1 # 19991 intersection c a 0 0 1 e b 0 0 1 e # 19992 intersection c a 0 0 1 e b 0 0 0 e # 19993 intersection c a 0 0 1 e b 0 0 1 e # 19994 intersection c a 0 0 1 e b 0 0 0 e # 19995 intersection c a 0 0 1 e b 0 0 1 e # 19996 intersection c a 0 0 1 e b 0 0 0 # 19997 intersection c a 0 0 1 e b 0 0 1 e # 19998 intersection c a 0 0 1 e b 0 0 0 e # 19999 intersection c a 0 0 1 e b 0 0 1 e # 20000 intersection c a 0 0 1 e b 0 0 0 e # 20001 intersection c a 0 0 1 e b 0 0 1 e # 20002 intersection c a 0 0 1 e b 0 0 0 # 20003 intersection c a 0 0 1 b 0 0 1 # 20004 intersection c a 0 0 1 b 0 0 0 e # 20005 intersection c a 0 0 1 b 0 0 1 # 20006 intersection c a 0 0 1 b 0 0 0 e # 20007 intersection c a 0 0 1 b 0 0 1 # 20008 intersection c a 0 0 1 b 0 0 0 # 20009 intersection c a 0 0 1 e b 0 0 1 e # 20010 intersection c a 0 0 1 e b 0 0 1 e # 20011 intersection c a 0 0 1 e b 0 0 1 e # 20012 intersection c a 0 0 1 e b 0 0 1 e # 20013 intersection c a 0 0 1 e b 0 0 1 e # 20014 intersection c a 0 0 1 e b 0 0 1 # 20015 intersection c a 0 0 1 e b 0 0 1 e # 20016 intersection c a 0 0 1 e b 0 0 1 e # 20017 intersection c a 0 0 1 e b 0 0 1 e # 20018 intersection c a 0 0 1 e b 0 0 1 e # 20019 intersection c a 0 0 1 e b 0 0 1 e # 20020 intersection c a 0 0 1 e b 0 0 1 # 20021 intersection c a 0 0 1 b 0 0 1 # 20022 intersection c a 0 0 1 b 0 0 1 e # 20023 intersection c a 0 0 1 b 0 0 1 # 20024 intersection c a 0 0 1 b 0 0 1 e # 20025 intersection c a 0 0 1 b 0 0 1 # 20026 intersection c a 0 0 1 b 0 0 1 # 20027 intersection c a 0 0 1 e b 0 0 1 e # 20028 intersection c a 0 0 1 e b 0 1 0 e # 20029 intersection c a 0 0 1 e b 0 0 1 e # 20030 intersection c a 0 0 1 e b 0 1 0 e # 20031 intersection c a 0 0 1 e b 0 0 1 e # 20032 intersection c a 0 0 1 e b 0 1 0 # 20033 intersection c a 0 0 1 e b 0 0 1 e # 20034 intersection c a 0 0 1 e b 0 1 0 e # 20035 intersection c a 0 0 1 e b 0 0 1 e # 20036 intersection c a 0 0 1 e b 0 1 0 e # 20037 intersection c a 0 0 1 e b 0 0 1 e # 20038 intersection c a 0 0 1 e b 0 1 0 # 20039 intersection c a 0 0 1 b 0 0 1 # 20040 intersection c a 0 0 1 b 0 1 0 e # 20041 intersection c a 0 0 1 b 0 0 1 # 20042 intersection c a 0 0 1 b 0 1 0 e # 20043 intersection c a 0 0 1 b 0 0 1 # 20044 intersection c a 0 0 1 b 0 1 0 # 20045 intersection c a 0 0 1 e b 0 0 1 e # 20046 intersection c a 0 0 1 e b 0 1 1 e # 20047 intersection c a 0 0 1 e b 0 0 1 e # 20048 intersection c a 0 0 1 e b 0 1 1 e # 20049 intersection c a 0 0 1 e b 0 0 1 e # 20050 intersection c a 0 0 1 e b 0 1 1 # 20051 intersection c a 0 0 1 e b 0 0 1 e # 20052 intersection c a 0 0 1 e b 0 1 1 e # 20053 intersection c a 0 0 1 e b 0 0 1 e # 20054 intersection c a 0 0 1 e b 0 1 1 e # 20055 intersection c a 0 0 1 e b 0 0 1 e # 20056 intersection c a 0 0 1 e b 0 1 1 # 20057 intersection c a 0 0 1 b 0 0 1 # 20058 intersection c a 0 0 1 b 0 1 1 e # 20059 intersection c a 0 0 1 b 0 0 1 # 20060 intersection c a 0 0 1 b 0 1 1 e # 20061 intersection c a 0 0 1 b 0 0 1 # 20062 intersection c a 0 0 1 b 0 1 1 # 20063 intersection c a 0 1 0 e b 0 1 0 e # 20064 intersection c a 0 1 0 e b 0 0 0 e # 20065 intersection c a 0 1 0 e b 0 1 0 e # 20066 intersection c a 0 1 0 e b 0 0 0 e # 20067 intersection c a 0 1 0 e b 0 1 0 e # 20068 intersection c a 0 1 0 e b 0 0 0 # 20069 intersection c a 0 1 0 e b 0 1 0 e # 20070 intersection c a 0 1 0 e b 0 0 0 e # 20071 intersection c a 0 1 0 e b 0 1 0 e # 20072 intersection c a 0 1 0 e b 0 0 0 e # 20073 intersection c a 0 1 0 e b 0 1 0 e # 20074 intersection c a 0 1 0 e b 0 0 0 # 20075 intersection c a 0 1 0 b 0 1 0 # 20076 intersection c a 0 1 0 b 0 0 0 e # 20077 intersection c a 0 1 0 b 0 1 0 # 20078 intersection c a 0 1 0 b 0 0 0 e # 20079 intersection c a 0 1 0 b 0 1 0 # 20080 intersection c a 0 1 0 b 0 0 0 # 20081 intersection c a 0 1 0 e b 0 1 0 e # 20082 intersection c a 0 1 0 e b 0 0 1 e # 20083 intersection c a 0 1 0 e b 0 1 0 e # 20084 intersection c a 0 1 0 e b 0 0 1 e # 20085 intersection c a 0 1 0 e b 0 1 0 e # 20086 intersection c a 0 1 0 e b 0 0 1 # 20087 intersection c a 0 1 0 e b 0 1 0 e # 20088 intersection c a 0 1 0 e b 0 0 1 e # 20089 intersection c a 0 1 0 e b 0 1 0 e # 20090 intersection c a 0 1 0 e b 0 0 1 e # 20091 intersection c a 0 1 0 e b 0 1 0 e # 20092 intersection c a 0 1 0 e b 0 0 1 # 20093 intersection c a 0 1 0 b 0 1 0 # 20094 intersection c a 0 1 0 b 0 0 1 e # 20095 intersection c a 0 1 0 b 0 1 0 # 20096 intersection c a 0 1 0 b 0 0 1 e # 20097 intersection c a 0 1 0 b 0 1 0 # 20098 intersection c a 0 1 0 b 0 0 1 # 20099 intersection c a 0 1 0 e b 0 1 0 e # 20100 intersection c a 0 1 0 e b 0 1 0 e # 20101 intersection c a 0 1 0 e b 0 1 0 e # 20102 intersection c a 0 1 0 e b 0 1 0 e # 20103 intersection c a 0 1 0 e b 0 1 0 e # 20104 intersection c a 0 1 0 e b 0 1 0 # 20105 intersection c a 0 1 0 e b 0 1 0 e # 20106 intersection c a 0 1 0 e b 0 1 0 e # 20107 intersection c a 0 1 0 e b 0 1 0 e # 20108 intersection c a 0 1 0 e b 0 1 0 e # 20109 intersection c a 0 1 0 e b 0 1 0 e # 20110 intersection c a 0 1 0 e b 0 1 0 # 20111 intersection c a 0 1 0 b 0 1 0 # 20112 intersection c a 0 1 0 b 0 1 0 e # 20113 intersection c a 0 1 0 b 0 1 0 # 20114 intersection c a 0 1 0 b 0 1 0 e # 20115 intersection c a 0 1 0 b 0 1 0 # 20116 intersection c a 0 1 0 b 0 1 0 # 20117 intersection c a 0 1 0 e b 0 1 0 e # 20118 intersection c a 0 1 0 e b 0 1 1 e # 20119 intersection c a 0 1 0 e b 0 1 0 e # 20120 intersection c a 0 1 0 e b 0 1 1 e # 20121 intersection c a 0 1 0 e b 0 1 0 e # 20122 intersection c a 0 1 0 e b 0 1 1 # 20123 intersection c a 0 1 0 e b 0 1 0 e # 20124 intersection c a 0 1 0 e b 0 1 1 e # 20125 intersection c a 0 1 0 e b 0 1 0 e # 20126 intersection c a 0 1 0 e b 0 1 1 e # 20127 intersection c a 0 1 0 e b 0 1 0 e # 20128 intersection c a 0 1 0 e b 0 1 1 # 20129 intersection c a 0 1 0 b 0 1 0 # 20130 intersection c a 0 1 0 b 0 1 1 e # 20131 intersection c a 0 1 0 b 0 1 0 # 20132 intersection c a 0 1 0 b 0 1 1 e # 20133 intersection c a 0 1 0 b 0 1 0 # 20134 intersection c a 0 1 0 b 0 1 1 # 20135 intersection c a 0 1 1 e b 0 1 1 e # 20136 intersection c a 0 1 1 e b 0 0 0 e # 20137 intersection c a 0 1 1 e b 0 1 1 e # 20138 intersection c a 0 1 1 e b 0 0 0 e # 20139 intersection c a 0 1 1 e b 0 1 1 e # 20140 intersection c a 0 1 1 e b 0 0 0 # 20141 intersection c a 0 1 1 e b 0 1 1 e # 20142 intersection c a 0 1 1 e b 0 0 0 e # 20143 intersection c a 0 1 1 e b 0 1 1 e # 20144 intersection c a 0 1 1 e b 0 0 0 e # 20145 intersection c a 0 1 1 e b 0 1 1 e # 20146 intersection c a 0 1 1 e b 0 0 0 # 20147 intersection c a 0 1 1 b 0 1 1 # 20148 intersection c a 0 1 1 b 0 0 0 e # 20149 intersection c a 0 1 1 b 0 1 1 # 20150 intersection c a 0 1 1 b 0 0 0 e # 20151 intersection c a 0 1 1 b 0 1 1 # 20152 intersection c a 0 1 1 b 0 0 0 # 20153 intersection c a 0 1 1 e b 0 1 1 e # 20154 intersection c a 0 1 1 e b 0 0 1 e # 20155 intersection c a 0 1 1 e b 0 1 1 e # 20156 intersection c a 0 1 1 e b 0 0 1 e # 20157 intersection c a 0 1 1 e b 0 1 1 e # 20158 intersection c a 0 1 1 e b 0 0 1 # 20159 intersection c a 0 1 1 e b 0 1 1 e # 20160 intersection c a 0 1 1 e b 0 0 1 e # 20161 intersection c a 0 1 1 e b 0 1 1 e # 20162 intersection c a 0 1 1 e b 0 0 1 e # 20163 intersection c a 0 1 1 e b 0 1 1 e # 20164 intersection c a 0 1 1 e b 0 0 1 # 20165 intersection c a 0 1 1 b 0 1 1 # 20166 intersection c a 0 1 1 b 0 0 1 e # 20167 intersection c a 0 1 1 b 0 1 1 # 20168 intersection c a 0 1 1 b 0 0 1 e # 20169 intersection c a 0 1 1 b 0 1 1 # 20170 intersection c a 0 1 1 b 0 0 1 # 20171 intersection c a 0 1 1 e b 0 1 1 e # 20172 intersection c a 0 1 1 e b 0 1 0 e # 20173 intersection c a 0 1 1 e b 0 1 1 e # 20174 intersection c a 0 1 1 e b 0 1 0 e # 20175 intersection c a 0 1 1 e b 0 1 1 e # 20176 intersection c a 0 1 1 e b 0 1 0 # 20177 intersection c a 0 1 1 e b 0 1 1 e # 20178 intersection c a 0 1 1 e b 0 1 0 e # 20179 intersection c a 0 1 1 e b 0 1 1 e # 20180 intersection c a 0 1 1 e b 0 1 0 e # 20181 intersection c a 0 1 1 e b 0 1 1 e # 20182 intersection c a 0 1 1 e b 0 1 0 # 20183 intersection c a 0 1 1 b 0 1 1 # 20184 intersection c a 0 1 1 b 0 1 0 e # 20185 intersection c a 0 1 1 b 0 1 1 # 20186 intersection c a 0 1 1 b 0 1 0 e # 20187 intersection c a 0 1 1 b 0 1 1 # 20188 intersection c a 0 1 1 b 0 1 0 # 20189 intersection c a 0 1 1 e b 0 1 1 e # 20190 intersection c a 0 1 1 e b 0 1 1 e # 20191 intersection c a 0 1 1 e b 0 1 1 e # 20192 intersection c a 0 1 1 e b 0 1 1 e # 20193 intersection c a 0 1 1 e b 0 1 1 e # 20194 intersection c a 0 1 1 e b 0 1 1 # 20195 intersection c a 0 1 1 e b 0 1 1 e # 20196 intersection c a 0 1 1 e b 0 1 1 e # 20197 intersection c a 0 1 1 e b 0 1 1 e # 20198 intersection c a 0 1 1 e b 0 1 1 e # 20199 intersection c a 0 1 1 e b 0 1 1 e # 20200 intersection c a 0 1 1 e b 0 1 1 # 20201 intersection c a 0 1 1 b 0 1 1 # 20202 intersection c a 0 1 1 b 0 1 1 e # 20203 intersection c a 0 1 1 b 0 1 1 # 20204 intersection c a 0 1 1 b 0 1 1 e # 20205 intersection c a 0 1 1 b 0 1 1 # 20206 intersection c a 0 1 1 b 0 1 1 # 20207 intersection c a 1 0 0 e b 1 0 0 e # 20208 intersection c a 1 0 0 e b 1 0 0 e # 20209 intersection c a 1 0 0 e b 1 0 0 e # 20210 intersection c a 1 0 0 e b 1 0 0 f # 20211 intersection c a 1 0 0 e b 1 0 0 e # 20212 intersection c a 1 0 0 e b 1 0 0 # 20213 intersection c a 1 0 0 f b 1 0 0 f # 20214 intersection c a 1 0 0 f b 1 0 0 e # 20215 intersection c a 1 0 0 f b 1 0 0 f # 20216 intersection c a 1 0 0 f b 1 0 0 f # 20217 intersection c a 1 0 0 f b 1 0 0 f # 20218 intersection c a 1 0 0 f b 1 0 0 # 20219 intersection c a 1 0 0 b 1 0 0 # 20220 intersection c a 1 0 0 b 1 0 0 e # 20221 intersection c a 1 0 0 0 b 1 0 0 0 # 20222 intersection c a 1 0 0 0 b 1 0 0 f # 20223 intersection c a 1 0 0 0 b 1 0 0 0 # 20224 intersection c a 1 0 0 0 b 1 0 0 # 20225 intersection c a 1 0 0 e b 1 0 0 e # 20226 intersection c a 1 0 0 e b 1 0 1 e # 20227 intersection c a 1 0 0 e b 1 0 0 e # 20228 intersection c a 1 0 0 e b 1 0 1 f # 20229 intersection c a 1 0 0 e b 1 0 0 e # 20230 intersection c a 1 0 0 e b 1 0 1 0 # 20231 intersection c a 1 0 0 f b 1 0 0 f # 20232 intersection c a 1 0 0 f b 1 0 1 e # 20233 intersection c a 1 0 0 f b 1 0 0 f # 20234 intersection c a 1 0 0 f b 1 0 1 f # 20235 intersection c a 1 0 0 f b 1 0 0 f # 20236 intersection c a 1 0 0 f b 1 0 1 0 # 20237 intersection c a 1 0 0 b 1 0 0 # 20238 intersection c a 1 0 0 b 1 0 1 e # 20239 intersection c a 1 0 0 0 b 1 0 0 0 # 20240 intersection c a 1 0 0 0 b 1 0 1 f # 20241 intersection c a 1 0 0 b 1 0 0 # 20242 intersection c a 1 0 0 b 1 0 1 0 # 20243 intersection c a 1 0 0 e b 1 0 0 e # 20244 intersection c a 1 0 0 e b 1 1 0 e # 20245 intersection c a 1 0 0 e b 1 0 0 e # 20246 intersection c a 1 0 0 e b 1 1 0 f # 20247 intersection c a 1 0 0 e b 1 0 0 e # 20248 intersection c a 1 0 0 e b 1 1 0 # 20249 intersection c a 1 0 0 f b 1 0 0 f # 20250 intersection c a 1 0 0 f b 1 1 0 e # 20251 intersection c a 1 0 0 f b 1 0 0 f # 20252 intersection c a 1 0 0 f b 1 1 0 f # 20253 intersection c a 1 0 0 f b 1 0 0 f # 20254 intersection c a 1 0 0 f b 1 1 0 # 20255 intersection c a 1 0 0 b 1 0 0 # 20256 intersection c a 1 0 0 b 1 1 0 e # 20257 intersection c a 1 0 0 0 b 1 0 0 0 # 20258 intersection c a 1 0 0 0 b 1 1 0 f # 20259 intersection c a 1 0 0 b 1 0 0 # 20260 intersection c a 1 0 0 b 1 1 0 0 # 20261 intersection c a 1 0 0 e b 1 0 0 e # 20262 intersection c a 1 0 0 e b 1 1 1 e # 20263 intersection c a 1 0 0 e b 1 0 0 e # 20264 intersection c a 1 0 0 e b 1 1 1 f # 20265 intersection c a 1 0 0 e b 1 0 0 e # 20266 intersection c a 1 0 0 e b 1 1 1 0 # 20267 intersection c a 1 0 0 f b 1 0 0 f # 20268 intersection c a 1 0 0 f b 1 1 1 e # 20269 intersection c a 1 0 0 f b 1 0 0 f # 20270 intersection c a 1 0 0 f b 1 1 1 f # 20271 intersection c a 1 0 0 f b 1 0 0 f # 20272 intersection c a 1 0 0 f b 1 1 1 # 20273 intersection c a 1 0 0 0 b 1 0 0 0 # 20274 intersection c a 1 0 0 0 b 1 1 1 e # 20275 intersection c a 1 0 0 b 1 0 0 # 20276 intersection c a 1 0 0 b 1 1 1 f # 20277 intersection c a 1 0 0 0 b 1 0 0 0 # 20278 intersection c a 1 0 0 0 b 1 1 1 0 # 20279 intersection c a 1 0 1 e b 1 0 1 e # 20280 intersection c a 1 0 1 e b 1 0 0 e # 20281 intersection c a 1 0 1 e b 1 0 1 e # 20282 intersection c a 1 0 1 e b 1 0 0 f # 20283 intersection c a 1 0 1 e b 1 0 1 e # 20284 intersection c a 1 0 1 e b 1 0 0 0 # 20285 intersection c a 1 0 1 f b 1 0 1 f # 20286 intersection c a 1 0 1 f b 1 0 0 e # 20287 intersection c a 1 0 1 f b 1 0 1 f # 20288 intersection c a 1 0 1 f b 1 0 0 f # 20289 intersection c a 1 0 1 f b 1 0 1 f # 20290 intersection c a 1 0 1 f b 1 0 0 # 20291 intersection c a 1 0 1 0 b 1 0 1 0 # 20292 intersection c a 1 0 1 0 b 1 0 0 e # 20293 intersection c a 1 0 1 b 1 0 1 # 20294 intersection c a 1 0 1 b 1 0 0 f # 20295 intersection c a 1 0 1 b 1 0 1 # 20296 intersection c a 1 0 1 b 1 0 0 0 # 20297 intersection c a 1 0 1 e b 1 0 1 e # 20298 intersection c a 1 0 1 e b 1 0 1 e # 20299 intersection c a 1 0 1 e b 1 0 1 e # 20300 intersection c a 1 0 1 e b 1 0 1 f # 20301 intersection c a 1 0 1 e b 1 0 1 e # 20302 intersection c a 1 0 1 e b 1 0 1 0 # 20303 intersection c a 1 0 1 f b 1 0 1 f # 20304 intersection c a 1 0 1 f b 1 0 1 e # 20305 intersection c a 1 0 1 f b 1 0 1 f # 20306 intersection c a 1 0 1 f b 1 0 1 f # 20307 intersection c a 1 0 1 f b 1 0 1 f # 20308 intersection c a 1 0 1 f b 1 0 1 0 # 20309 intersection c a 1 0 1 b 1 0 1 # 20310 intersection c a 1 0 1 b 1 0 1 e # 20311 intersection c a 1 0 1 b 1 0 1 # 20312 intersection c a 1 0 1 b 1 0 1 f # 20313 intersection c a 1 0 1 b 1 0 1 # 20314 intersection c a 1 0 1 b 1 0 1 # 20315 intersection c a 1 0 1 e b 1 0 1 e # 20316 intersection c a 1 0 1 e b 1 1 0 e # 20317 intersection c a 1 0 1 e b 1 0 1 e # 20318 intersection c a 1 0 1 e b 1 1 0 f # 20319 intersection c a 1 0 1 e b 1 0 1 e # 20320 intersection c a 1 0 1 e b 1 1 0 0 # 20321 intersection c a 1 0 1 f b 1 0 1 f # 20322 intersection c a 1 0 1 f b 1 1 0 e # 20323 intersection c a 1 0 1 f b 1 0 1 f # 20324 intersection c a 1 0 1 f b 1 1 0 f # 20325 intersection c a 1 0 1 f b 1 0 1 f # 20326 intersection c a 1 0 1 f b 1 1 0 # 20327 intersection c a 1 0 1 0 b 1 0 1 0 # 20328 intersection c a 1 0 1 0 b 1 1 0 e # 20329 intersection c a 1 0 1 b 1 0 1 # 20330 intersection c a 1 0 1 b 1 1 0 f # 20331 intersection c a 1 0 1 b 1 0 1 # 20332 intersection c a 1 0 1 b 1 1 0 # 20333 intersection c a 1 0 1 e b 1 0 1 e # 20334 intersection c a 1 0 1 e b 1 1 1 e # 20335 intersection c a 1 0 1 e b 1 0 1 e # 20336 intersection c a 1 0 1 e b 1 1 1 f # 20337 intersection c a 1 0 1 e b 1 0 1 e # 20338 intersection c a 1 0 1 e b 1 1 1 # 20339 intersection c a 1 0 1 f b 1 0 1 f # 20340 intersection c a 1 0 1 f b 1 1 1 e # 20341 intersection c a 1 0 1 f b 1 0 1 f # 20342 intersection c a 1 0 1 f b 1 1 1 f # 20343 intersection c a 1 0 1 f b 1 0 1 f # 20344 intersection c a 1 0 1 f b 1 1 1 # 20345 intersection c a 1 0 1 0 b 1 0 1 0 # 20346 intersection c a 1 0 1 0 b 1 1 1 e # 20347 intersection c a 1 0 1 0 b 1 0 1 0 # 20348 intersection c a 1 0 1 0 b 1 1 1 f # 20349 intersection c a 1 0 1 b 1 0 1 # 20350 intersection c a 1 0 1 b 1 1 1 # 20351 intersection c a 1 1 0 e b 1 1 0 e # 20352 intersection c a 1 1 0 e b 1 0 0 e # 20353 intersection c a 1 1 0 e b 1 1 0 e # 20354 intersection c a 1 1 0 e b 1 0 0 f # 20355 intersection c a 1 1 0 e b 1 1 0 e # 20356 intersection c a 1 1 0 e b 1 0 0 # 20357 intersection c a 1 1 0 f b 1 1 0 f # 20358 intersection c a 1 1 0 f b 1 0 0 e # 20359 intersection c a 1 1 0 f b 1 1 0 f # 20360 intersection c a 1 1 0 f b 1 0 0 f # 20361 intersection c a 1 1 0 f b 1 1 0 f # 20362 intersection c a 1 1 0 f b 1 0 0 # 20363 intersection c a 1 1 0 b 1 1 0 # 20364 intersection c a 1 1 0 b 1 0 0 e # 20365 intersection c a 1 1 0 b 1 1 0 # 20366 intersection c a 1 1 0 b 1 0 0 f # 20367 intersection c a 1 1 0 0 b 1 1 0 0 # 20368 intersection c a 1 1 0 0 b 1 0 0 # 20369 intersection c a 1 1 0 e b 1 1 0 e # 20370 intersection c a 1 1 0 e b 1 0 1 e # 20371 intersection c a 1 1 0 e b 1 1 0 e # 20372 intersection c a 1 1 0 e b 1 0 1 f # 20373 intersection c a 1 1 0 e b 1 1 0 e # 20374 intersection c a 1 1 0 e b 1 0 1 # 20375 intersection c a 1 1 0 f b 1 1 0 f # 20376 intersection c a 1 1 0 f b 1 0 1 e # 20377 intersection c a 1 1 0 f b 1 1 0 f # 20378 intersection c a 1 1 0 f b 1 0 1 f # 20379 intersection c a 1 1 0 f b 1 1 0 f # 20380 intersection c a 1 1 0 f b 1 0 1 0 # 20381 intersection c a 1 1 0 0 b 1 1 0 0 # 20382 intersection c a 1 1 0 0 b 1 0 1 e # 20383 intersection c a 1 1 0 b 1 1 0 # 20384 intersection c a 1 1 0 b 1 0 1 f # 20385 intersection c a 1 1 0 0 b 1 1 0 0 # 20386 intersection c a 1 1 0 0 b 1 0 1 # 20387 intersection c a 1 1 0 e b 1 1 0 e # 20388 intersection c a 1 1 0 e b 1 1 0 e # 20389 intersection c a 1 1 0 e b 1 1 0 e # 20390 intersection c a 1 1 0 e b 1 1 0 f # 20391 intersection c a 1 1 0 e b 1 1 0 e # 20392 intersection c a 1 1 0 e b 1 1 0 # 20393 intersection c a 1 1 0 f b 1 1 0 f # 20394 intersection c a 1 1 0 f b 1 1 0 e # 20395 intersection c a 1 1 0 f b 1 1 0 f # 20396 intersection c a 1 1 0 f b 1 1 0 f # 20397 intersection c a 1 1 0 f b 1 1 0 f # 20398 intersection c a 1 1 0 f b 1 1 0 0 # 20399 intersection c a 1 1 0 0 b 1 1 0 0 # 20400 intersection c a 1 1 0 0 b 1 1 0 e # 20401 intersection c a 1 1 0 0 b 1 1 0 0 # 20402 intersection c a 1 1 0 0 b 1 1 0 f # 20403 intersection c a 1 1 0 0 b 1 1 0 0 # 20404 intersection c a 1 1 0 0 b 1 1 0 # 20405 intersection c a 1 1 0 e b 1 1 0 e # 20406 intersection c a 1 1 0 e b 1 1 1 e # 20407 intersection c a 1 1 0 e b 1 1 0 e # 20408 intersection c a 1 1 0 e b 1 1 1 f # 20409 intersection c a 1 1 0 e b 1 1 0 e # 20410 intersection c a 1 1 0 e b 1 1 1 0 # 20411 intersection c a 1 1 0 f b 1 1 0 f # 20412 intersection c a 1 1 0 f b 1 1 1 e # 20413 intersection c a 1 1 0 f b 1 1 0 f # 20414 intersection c a 1 1 0 f b 1 1 1 f # 20415 intersection c a 1 1 0 f b 1 1 0 f # 20416 intersection c a 1 1 0 f b 1 1 1 0 # 20417 intersection c a 1 1 0 0 b 1 1 0 0 # 20418 intersection c a 1 1 0 0 b 1 1 1 e # 20419 intersection c a 1 1 0 0 b 1 1 0 0 # 20420 intersection c a 1 1 0 0 b 1 1 1 f # 20421 intersection c a 1 1 0 0 b 1 1 0 0 # 20422 intersection c a 1 1 0 0 b 1 1 1 # 20423 intersection c a 1 1 1 e b 1 1 1 e # 20424 intersection c a 1 1 1 e b 1 0 0 e # 20425 intersection c a 1 1 1 e b 1 1 1 e # 20426 intersection c a 1 1 1 e b 1 0 0 f # 20427 intersection c a 1 1 1 e b 1 1 1 e # 20428 intersection c a 1 1 1 e b 1 0 0 # 20429 intersection c a 1 1 1 f b 1 1 1 f # 20430 intersection c a 1 1 1 f b 1 0 0 e # 20431 intersection c a 1 1 1 f b 1 1 1 f # 20432 intersection c a 1 1 1 f b 1 0 0 f # 20433 intersection c a 1 1 1 f b 1 1 1 f # 20434 intersection c a 1 1 1 f b 1 0 0 # 20435 intersection c a 1 1 1 0 b 1 1 1 0 # 20436 intersection c a 1 1 1 0 b 1 0 0 e # 20437 intersection c a 1 1 1 b 1 1 1 # 20438 intersection c a 1 1 1 b 1 0 0 f # 20439 intersection c a 1 1 1 0 b 1 1 1 0 # 20440 intersection c a 1 1 1 0 b 1 0 0 # 20441 intersection c a 1 1 1 e b 1 1 1 e # 20442 intersection c a 1 1 1 e b 1 0 1 e # 20443 intersection c a 1 1 1 e b 1 1 1 e # 20444 intersection c a 1 1 1 e b 1 0 1 f # 20445 intersection c a 1 1 1 e b 1 1 1 e # 20446 intersection c a 1 1 1 e b 1 0 1 0 # 20447 intersection c a 1 1 1 f b 1 1 1 f # 20448 intersection c a 1 1 1 f b 1 0 1 e # 20449 intersection c a 1 1 1 f b 1 1 1 f # 20450 intersection c a 1 1 1 f b 1 0 1 f # 20451 intersection c a 1 1 1 f b 1 1 1 f # 20452 intersection c a 1 1 1 f b 1 0 1 # 20453 intersection c a 1 1 1 0 b 1 1 1 0 # 20454 intersection c a 1 1 1 0 b 1 0 1 e # 20455 intersection c a 1 1 1 b 1 1 1 # 20456 intersection c a 1 1 1 b 1 0 1 f # 20457 intersection c a 1 1 1 0 b 1 1 1 0 # 20458 intersection c a 1 1 1 0 b 1 0 1 0 # 20459 intersection c a 1 1 1 e b 1 1 1 e # 20460 intersection c a 1 1 1 e b 1 1 0 e # 20461 intersection c a 1 1 1 e b 1 1 1 e # 20462 intersection c a 1 1 1 e b 1 1 0 f # 20463 intersection c a 1 1 1 e b 1 1 1 e # 20464 intersection c a 1 1 1 e b 1 1 0 # 20465 intersection c a 1 1 1 f b 1 1 1 f # 20466 intersection c a 1 1 1 f b 1 1 0 e # 20467 intersection c a 1 1 1 f b 1 1 1 f # 20468 intersection c a 1 1 1 f b 1 1 0 f # 20469 intersection c a 1 1 1 f b 1 1 1 f # 20470 intersection c a 1 1 1 f b 1 1 0 # 20471 intersection c a 1 1 1 b 1 1 1 # 20472 intersection c a 1 1 1 b 1 1 0 e # 20473 intersection c a 1 1 1 b 1 1 1 # 20474 intersection c a 1 1 1 b 1 1 0 f # 20475 intersection c a 1 1 1 0 b 1 1 1 0 # 20476 intersection c a 1 1 1 0 b 1 1 0 # 20477 intersection c a 1 1 1 e b 1 1 1 e # 20478 intersection c a 1 1 1 e b 1 1 1 e # 20479 intersection c a 1 1 1 e b 1 1 1 e # 20480 intersection c a 1 1 1 e b 1 1 1 f # 20481 intersection c a 1 1 1 e b 1 1 1 e # 20482 intersection c a 1 1 1 e b 1 1 1 # 20483 intersection c a 1 1 1 f b 1 1 1 f # 20484 intersection c a 1 1 1 f b 1 1 1 e # 20485 intersection c a 1 1 1 f b 1 1 1 f # 20486 intersection c a 1 1 1 f b 1 1 1 f # 20487 intersection c a 1 1 1 f b 1 1 1 f # 20488 intersection c a 1 1 1 f b 1 1 1 0 # 20489 intersection c a 1 1 1 b 1 1 1 # 20490 intersection c a 1 1 1 b 1 1 1 e # 20491 intersection c a 1 1 1 b 1 1 1 # 20492 intersection c a 1 1 1 b 1 1 1 f # 20493 intersection c a 1 1 1 0 b 1 1 1 0 # 20494 intersection c a 1 1 1 0 b 1 1 1 # 20495 intersection c a 31 0 0 e b 31 0 0 e # 20496 intersection c a 31 0 0 e b 31 0 0 e # 20497 intersection c a 31 0 0 e b 31 0 0 e # 20498 intersection c a 31 0 0 e b 31 0 0 f # 20499 intersection c a 31 0 0 e b 31 0 0 e # 20500 intersection c a 31 0 0 e b 31 0 0 0 1 2 3 4 5 9 10 14 15 16 17 18 23 24 25 26 27 29 # 20501 intersection c a 31 0 0 f b 31 0 0 f # 20502 intersection c a 31 0 0 f b 31 0 0 e # 20503 intersection c a 31 0 0 f b 31 0 0 f # 20504 intersection c a 31 0 0 f b 31 0 0 f # 20505 intersection c a 31 0 0 f b 31 0 0 f # 20506 intersection c a 31 0 0 f b 31 0 0 6 9 11 12 13 15 18 19 21 24 27 28 30 # 20507 intersection c a 31 0 0 1 3 4 8 10 11 16 18 19 20 21 22 24 26 28 b 31 0 0 1 3 4 8 10 11 16 18 19 20 21 22 24 26 28 # 20508 intersection c a 31 0 0 1 3 4 8 10 11 16 18 19 20 21 22 24 26 28 b 31 0 0 e # 20509 intersection c a 31 0 0 1 2 3 4 9 11 12 13 16 17 20 24 25 28 30 b 31 0 0 1 2 3 4 9 11 12 13 16 17 20 24 25 28 30 # 20510 intersection c a 31 0 0 1 2 3 4 9 11 12 13 16 17 20 24 25 28 30 b 31 0 0 f # 20511 intersection c a 31 0 0 0 2 3 5 7 13 16 18 20 21 22 24 29 b 31 0 0 0 2 3 5 7 13 16 18 20 21 22 24 29 # 20512 intersection c a 31 0 0 0 2 3 5 7 13 16 18 20 21 22 24 29 b 31 0 0 4 6 7 9 11 15 16 22 23 27 28 # 20513 intersection c a 31 0 0 e b 31 0 0 e # 20514 intersection c a 31 0 0 e b 31 0 1 e # 20515 intersection c a 31 0 0 e b 31 0 0 e # 20516 intersection c a 31 0 0 e b 31 0 1 f # 20517 intersection c a 31 0 0 e b 31 0 0 e # 20518 intersection c a 31 0 0 e b 31 0 1 0 1 2 4 5 6 7 9 10 15 17 21 25 28 29 30 # 20519 intersection c a 31 0 0 f b 31 0 0 f # 20520 intersection c a 31 0 0 f b 31 0 1 e # 20521 intersection c a 31 0 0 f b 31 0 0 f # 20522 intersection c a 31 0 0 f b 31 0 1 f # 20523 intersection c a 31 0 0 f b 31 0 0 f # 20524 intersection c a 31 0 0 f b 31 0 1 0 2 3 5 6 7 9 10 14 17 18 19 21 23 27 29 30 # 20525 intersection c a 31 0 0 0 3 4 6 7 9 10 11 13 14 17 21 22 27 28 30 b 31 0 0 0 3 4 6 7 9 10 11 13 14 17 21 22 27 28 30 # 20526 intersection c a 31 0 0 0 3 4 6 7 9 10 11 13 14 17 21 22 27 28 30 b 31 0 1 e # 20527 intersection c a 31 0 0 0 1 3 4 6 8 9 11 12 14 16 17 18 21 23 24 25 27 29 30 b 31 0 0 0 1 3 4 6 8 9 11 12 14 16 17 18 21 23 24 25 27 29 30 # 20528 intersection c a 31 0 0 0 1 3 4 6 8 9 11 12 14 16 17 18 21 23 24 25 27 29 30 b 31 0 1 f # 20529 intersection c a 31 0 0 1 2 3 6 7 15 18 20 22 23 26 28 29 b 31 0 0 1 2 3 6 7 15 18 20 22 23 26 28 29 # 20530 intersection c a 31 0 0 1 2 3 6 7 15 18 20 22 23 26 28 29 b 31 0 1 4 5 6 7 11 12 13 15 16 17 18 20 24 25 28 # 20531 intersection c a 31 0 0 e b 31 0 0 e # 20532 intersection c a 31 0 0 e b 31 1 0 e # 20533 intersection c a 31 0 0 e b 31 0 0 e # 20534 intersection c a 31 0 0 e b 31 1 0 f # 20535 intersection c a 31 0 0 e b 31 0 0 e # 20536 intersection c a 31 0 0 e b 31 1 0 0 1 2 4 7 8 9 10 12 13 14 15 16 21 23 27 28 # 20537 intersection c a 31 0 0 f b 31 0 0 f # 20538 intersection c a 31 0 0 f b 31 1 0 e # 20539 intersection c a 31 0 0 f b 31 0 0 f # 20540 intersection c a 31 0 0 f b 31 1 0 f # 20541 intersection c a 31 0 0 f b 31 0 0 f # 20542 intersection c a 31 0 0 f b 31 1 0 0 2 4 7 10 11 12 15 17 21 22 23 29 # 20543 intersection c a 31 0 0 1 4 5 6 7 11 13 15 19 20 22 23 24 25 26 27 29 b 31 0 0 1 4 5 6 7 11 13 15 19 20 22 23 24 25 26 27 29 # 20544 intersection c a 31 0 0 1 4 5 6 7 11 13 15 19 20 22 23 24 25 26 27 29 b 31 1 0 e # 20545 intersection c a 31 0 0 1 2 3 4 5 6 10 13 14 18 19 20 21 22 23 24 25 26 27 28 b 31 0 0 1 2 3 4 5 6 10 13 14 18 19 20 21 22 23 24 25 26 27 28 # 20546 intersection c a 31 0 0 1 2 3 4 5 6 10 13 14 18 19 20 21 22 23 24 25 26 27 28 b 31 1 0 f # 20547 intersection c a 31 0 0 4 9 11 15 16 17 19 20 27 29 b 31 0 0 4 9 11 15 16 17 19 20 27 29 # 20548 intersection c a 31 0 0 4 9 11 15 16 17 19 20 27 29 b 31 1 0 0 1 4 5 6 10 11 12 18 19 20 24 25 26 27 28 30 # 20549 intersection c a 31 0 0 e b 31 0 0 e # 20550 intersection c a 31 0 0 e b 31 1 1 e # 20551 intersection c a 31 0 0 e b 31 0 0 e # 20552 intersection c a 31 0 0 e b 31 1 1 f # 20553 intersection c a 31 0 0 e b 31 0 0 e # 20554 intersection c a 31 0 0 e b 31 1 1 0 3 6 7 10 12 14 16 19 21 23 24 25 28 29 # 20555 intersection c a 31 0 0 f b 31 0 0 f # 20556 intersection c a 31 0 0 f b 31 1 1 e # 20557 intersection c a 31 0 0 f b 31 0 0 f # 20558 intersection c a 31 0 0 f b 31 1 1 f # 20559 intersection c a 31 0 0 f b 31 0 0 f # 20560 intersection c a 31 0 0 f b 31 1 1 0 2 3 4 7 8 9 10 12 18 19 20 21 26 27 29 # 20561 intersection c a 31 0 0 0 3 5 9 11 12 13 14 15 18 23 24 25 26 27 28 29 b 31 0 0 0 3 5 9 11 12 13 14 15 18 23 24 25 26 27 28 29 # 20562 intersection c a 31 0 0 0 3 5 9 11 12 13 14 15 18 23 24 25 26 27 28 29 b 31 1 1 e # 20563 intersection c a 31 0 0 0 2 3 4 5 6 9 10 11 12 13 14 15 16 20 21 22 24 27 29 b 31 0 0 0 2 3 4 5 6 9 10 11 12 13 14 15 16 20 21 22 24 27 29 # 20564 intersection c a 31 0 0 0 2 3 4 5 6 9 10 11 12 13 14 15 16 20 21 22 24 27 29 b 31 1 1 f # 20565 intersection c a 31 0 0 4 10 12 13 15 16 17 19 20 22 28 30 b 31 0 0 4 10 12 13 15 16 17 19 20 22 28 30 # 20566 intersection c a 31 0 0 4 10 12 13 15 16 17 19 20 22 28 30 b 31 1 1 1 4 6 7 8 9 10 12 13 14 15 17 18 20 23 27 29 # 20567 intersection c a 31 0 1 e b 31 0 1 e # 20568 intersection c a 31 0 1 e b 31 0 0 e # 20569 intersection c a 31 0 1 e b 31 0 1 e # 20570 intersection c a 31 0 1 e b 31 0 0 f # 20571 intersection c a 31 0 1 e b 31 0 1 e # 20572 intersection c a 31 0 1 e b 31 0 0 1 2 3 6 9 11 12 14 16 17 21 25 26 27 29 # 20573 intersection c a 31 0 1 f b 31 0 1 f # 20574 intersection c a 31 0 1 f b 31 0 0 e # 20575 intersection c a 31 0 1 f b 31 0 1 f # 20576 intersection c a 31 0 1 f b 31 0 0 f # 20577 intersection c a 31 0 1 f b 31 0 1 f # 20578 intersection c a 31 0 1 f b 31 0 0 0 1 3 7 8 12 17 18 21 22 23 24 25 26 27 29 # 20579 intersection c a 31 0 1 0 1 2 3 4 7 8 10 14 15 16 17 18 21 24 27 b 31 0 1 0 1 2 3 4 7 8 10 14 15 16 17 18 21 24 27 # 20580 intersection c a 31 0 1 0 1 2 3 4 7 8 10 14 15 16 17 18 21 24 27 b 31 0 0 e # 20581 intersection c a 31 0 1 1 2 4 7 9 10 11 16 23 24 25 26 27 30 b 31 0 1 1 2 4 7 9 10 11 16 23 24 25 26 27 30 # 20582 intersection c a 31 0 1 1 2 4 7 9 10 11 16 23 24 25 26 27 30 b 31 0 0 f # 20583 intersection c a 31 0 1 0 2 3 7 10 12 13 14 16 17 18 22 27 28 30 b 31 0 1 0 2 3 7 10 12 13 14 16 17 18 22 27 28 30 # 20584 intersection c a 31 0 1 0 2 3 7 10 12 13 14 16 17 18 22 27 28 30 b 31 0 0 1 2 4 6 7 8 10 11 13 14 15 16 17 18 19 22 26 28 # 20585 intersection c a 31 0 1 e b 31 0 1 e # 20586 intersection c a 31 0 1 e b 31 0 1 e # 20587 intersection c a 31 0 1 e b 31 0 1 e # 20588 intersection c a 31 0 1 e b 31 0 1 f # 20589 intersection c a 31 0 1 e b 31 0 1 e # 20590 intersection c a 31 0 1 e b 31 0 1 1 3 4 5 6 7 10 12 15 17 18 22 23 24 29 30 # 20591 intersection c a 31 0 1 f b 31 0 1 f # 20592 intersection c a 31 0 1 f b 31 0 1 e # 20593 intersection c a 31 0 1 f b 31 0 1 f # 20594 intersection c a 31 0 1 f b 31 0 1 f # 20595 intersection c a 31 0 1 f b 31 0 1 f # 20596 intersection c a 31 0 1 f b 31 0 1 0 1 3 4 5 6 7 11 13 25 26 28 # 20597 intersection c a 31 0 1 0 4 7 8 11 12 15 19 20 21 24 26 30 b 31 0 1 0 4 7 8 11 12 15 19 20 21 24 26 30 # 20598 intersection c a 31 0 1 0 4 7 8 11 12 15 19 20 21 24 26 30 b 31 0 1 e # 20599 intersection c a 31 0 1 0 1 4 5 6 8 10 11 12 13 14 15 21 22 23 24 26 b 31 0 1 0 1 4 5 6 8 10 11 12 13 14 15 21 22 23 24 26 # 20600 intersection c a 31 0 1 0 1 4 5 6 8 10 11 12 13 14 15 21 22 23 24 26 b 31 0 1 f # 20601 intersection c a 31 0 1 1 3 4 6 8 9 10 11 12 13 14 15 19 20 22 27 28 30 b 31 0 1 1 3 4 6 8 9 10 11 12 13 14 15 19 20 22 27 28 30 # 20602 intersection c a 31 0 1 1 3 4 6 8 9 10 11 12 13 14 15 19 20 22 27 28 30 b 31 0 1 5 6 8 9 12 15 16 19 22 23 24 26 28 # 20603 intersection c a 31 0 1 e b 31 0 1 e # 20604 intersection c a 31 0 1 e b 31 1 0 e # 20605 intersection c a 31 0 1 e b 31 0 1 e # 20606 intersection c a 31 0 1 e b 31 1 0 f # 20607 intersection c a 31 0 1 e b 31 0 1 e # 20608 intersection c a 31 0 1 e b 31 1 0 1 2 5 7 11 13 16 17 18 19 20 22 23 24 25 26 28 30 # 20609 intersection c a 31 0 1 f b 31 0 1 f # 20610 intersection c a 31 0 1 f b 31 1 0 e # 20611 intersection c a 31 0 1 f b 31 0 1 f # 20612 intersection c a 31 0 1 f b 31 1 0 f # 20613 intersection c a 31 0 1 f b 31 0 1 f # 20614 intersection c a 31 0 1 f b 31 1 0 2 3 5 9 15 16 19 21 23 24 26 29 # 20615 intersection c a 31 0 1 0 4 5 6 7 12 13 14 16 18 21 22 27 28 30 b 31 0 1 0 4 5 6 7 12 13 14 16 18 21 22 27 28 30 # 20616 intersection c a 31 0 1 0 4 5 6 7 12 13 14 16 18 21 22 27 28 30 b 31 1 0 e # 20617 intersection c a 31 0 1 0 6 10 11 14 15 18 19 20 22 24 27 29 30 b 31 0 1 0 6 10 11 14 15 18 19 20 22 24 27 29 30 # 20618 intersection c a 31 0 1 0 6 10 11 14 15 18 19 20 22 24 27 29 30 b 31 1 0 f # 20619 intersection c a 31 0 1 0 2 7 8 9 11 12 13 14 15 17 19 20 21 22 23 24 25 27 b 31 0 1 0 2 7 8 9 11 12 13 14 15 17 19 20 21 22 23 24 25 27 # 20620 intersection c a 31 0 1 0 2 7 8 9 11 12 13 14 15 17 19 20 21 22 23 24 25 27 b 31 1 0 4 5 6 7 14 17 18 20 21 23 24 30 # 20621 intersection c a 31 0 1 e b 31 0 1 e # 20622 intersection c a 31 0 1 e b 31 1 1 e # 20623 intersection c a 31 0 1 e b 31 0 1 e # 20624 intersection c a 31 0 1 e b 31 1 1 f # 20625 intersection c a 31 0 1 e b 31 0 1 e # 20626 intersection c a 31 0 1 e b 31 1 1 0 1 4 6 7 8 10 11 12 14 16 17 18 20 21 25 26 27 30 # 20627 intersection c a 31 0 1 f b 31 0 1 f # 20628 intersection c a 31 0 1 f b 31 1 1 e # 20629 intersection c a 31 0 1 f b 31 0 1 f # 20630 intersection c a 31 0 1 f b 31 1 1 f # 20631 intersection c a 31 0 1 f b 31 0 1 f # 20632 intersection c a 31 0 1 f b 31 1 1 0 5 7 9 10 12 15 16 18 21 22 23 28 29 # 20633 intersection c a 31 0 1 0 1 2 3 8 9 12 14 15 18 19 20 24 25 26 27 28 29 b 31 0 1 0 1 2 3 8 9 12 14 15 18 19 20 24 25 26 27 28 29 # 20634 intersection c a 31 0 1 0 1 2 3 8 9 12 14 15 18 19 20 24 25 26 27 28 29 b 31 1 1 e # 20635 intersection c a 31 0 1 1 2 4 6 9 11 13 14 18 22 23 25 26 b 31 0 1 1 2 4 6 9 11 13 14 18 22 23 25 26 # 20636 intersection c a 31 0 1 1 2 4 6 9 11 13 14 18 22 23 25 26 b 31 1 1 f # 20637 intersection c a 31 0 1 0 5 9 10 13 15 17 18 19 23 26 27 28 b 31 0 1 0 5 9 10 13 15 17 18 19 23 26 27 28 # 20638 intersection c a 31 0 1 0 5 9 10 13 15 17 18 19 23 26 27 28 b 31 1 1 0 2 4 5 11 12 15 16 21 22 27 28 # 20639 intersection c a 31 1 0 e b 31 1 0 e # 20640 intersection c a 31 1 0 e b 31 0 0 e # 20641 intersection c a 31 1 0 e b 31 1 0 e # 20642 intersection c a 31 1 0 e b 31 0 0 f # 20643 intersection c a 31 1 0 e b 31 1 0 e # 20644 intersection c a 31 1 0 e b 31 0 0 0 1 2 3 4 5 7 8 9 11 12 14 15 19 20 21 22 25 28 29 # 20645 intersection c a 31 1 0 f b 31 1 0 f # 20646 intersection c a 31 1 0 f b 31 0 0 e # 20647 intersection c a 31 1 0 f b 31 1 0 f # 20648 intersection c a 31 1 0 f b 31 0 0 f # 20649 intersection c a 31 1 0 f b 31 1 0 f # 20650 intersection c a 31 1 0 f b 31 0 0 0 1 3 4 7 10 11 14 15 16 20 26 27 29 # 20651 intersection c a 31 1 0 0 1 2 3 5 6 13 18 19 21 23 28 b 31 1 0 0 1 2 3 5 6 13 18 19 21 23 28 # 20652 intersection c a 31 1 0 0 1 2 3 5 6 13 18 19 21 23 28 b 31 0 0 e # 20653 intersection c a 31 1 0 0 1 7 9 10 11 13 14 15 20 23 24 25 28 30 b 31 1 0 0 1 7 9 10 11 13 14 15 20 23 24 25 28 30 # 20654 intersection c a 31 1 0 0 1 7 9 10 11 13 14 15 20 23 24 25 28 30 b 31 0 0 f # 20655 intersection c a 31 1 0 2 3 4 7 8 10 16 17 18 19 20 23 26 b 31 1 0 2 3 4 7 8 10 16 17 18 19 20 23 26 # 20656 intersection c a 31 1 0 2 3 4 7 8 10 16 17 18 19 20 23 26 b 31 0 0 0 1 3 4 7 11 12 13 16 18 19 23 25 26 27 28 # 20657 intersection c a 31 1 0 e b 31 1 0 e # 20658 intersection c a 31 1 0 e b 31 0 1 e # 20659 intersection c a 31 1 0 e b 31 1 0 e # 20660 intersection c a 31 1 0 e b 31 0 1 f # 20661 intersection c a 31 1 0 e b 31 1 0 e # 20662 intersection c a 31 1 0 e b 31 0 1 0 5 6 10 11 13 20 21 23 26 # 20663 intersection c a 31 1 0 f b 31 1 0 f # 20664 intersection c a 31 1 0 f b 31 0 1 e # 20665 intersection c a 31 1 0 f b 31 1 0 f # 20666 intersection c a 31 1 0 f b 31 0 1 f # 20667 intersection c a 31 1 0 f b 31 1 0 f # 20668 intersection c a 31 1 0 f b 31 0 1 0 1 2 5 12 13 17 18 19 20 24 27 28 # 20669 intersection c a 31 1 0 0 7 8 9 11 12 15 16 18 22 23 24 26 27 28 b 31 1 0 0 7 8 9 11 12 15 16 18 22 23 24 26 27 28 # 20670 intersection c a 31 1 0 0 7 8 9 11 12 15 16 18 22 23 24 26 27 28 b 31 0 1 e # 20671 intersection c a 31 1 0 0 1 2 3 13 14 18 19 22 25 28 29 30 b 31 1 0 0 1 2 3 13 14 18 19 22 25 28 29 30 # 20672 intersection c a 31 1 0 0 1 2 3 13 14 18 19 22 25 28 29 30 b 31 0 1 f # 20673 intersection c a 31 1 0 0 2 3 4 7 9 11 12 16 17 19 24 26 27 30 b 31 1 0 0 2 3 4 7 9 11 12 16 17 19 24 26 27 30 # 20674 intersection c a 31 1 0 0 2 3 4 7 9 11 12 16 17 19 24 26 27 30 b 31 0 1 1 3 4 5 7 9 11 12 19 21 23 24 25 26 27 # 20675 intersection c a 31 1 0 e b 31 1 0 e # 20676 intersection c a 31 1 0 e b 31 1 0 e # 20677 intersection c a 31 1 0 e b 31 1 0 e # 20678 intersection c a 31 1 0 e b 31 1 0 f # 20679 intersection c a 31 1 0 e b 31 1 0 e # 20680 intersection c a 31 1 0 e b 31 1 0 0 2 3 4 5 6 7 8 9 10 11 12 16 17 18 19 21 26 28 30 # 20681 intersection c a 31 1 0 f b 31 1 0 f # 20682 intersection c a 31 1 0 f b 31 1 0 e # 20683 intersection c a 31 1 0 f b 31 1 0 f # 20684 intersection c a 31 1 0 f b 31 1 0 f # 20685 intersection c a 31 1 0 f b 31 1 0 f # 20686 intersection c a 31 1 0 f b 31 1 0 2 13 14 17 20 21 25 27 # 20687 intersection c a 31 1 0 0 1 5 7 9 10 11 12 13 14 18 21 22 23 25 26 27 b 31 1 0 0 1 5 7 9 10 11 12 13 14 18 21 22 23 25 26 27 # 20688 intersection c a 31 1 0 0 1 5 7 9 10 11 12 13 14 18 21 22 23 25 26 27 b 31 1 0 e # 20689 intersection c a 31 1 0 2 4 6 7 8 9 10 12 16 17 18 21 23 24 25 26 27 b 31 1 0 2 4 6 7 8 9 10 12 16 17 18 21 23 24 25 26 27 # 20690 intersection c a 31 1 0 2 4 6 7 8 9 10 12 16 17 18 21 23 24 25 26 27 b 31 1 0 f # 20691 intersection c a 31 1 0 1 3 4 5 6 7 9 11 13 15 16 17 18 19 29 30 b 31 1 0 1 3 4 5 6 7 9 11 13 15 16 17 18 19 29 30 # 20692 intersection c a 31 1 0 1 3 4 5 6 7 9 11 13 15 16 17 18 19 29 30 b 31 1 0 0 1 3 4 5 6 9 10 13 14 15 16 17 18 19 20 22 24 28 # 20693 intersection c a 31 1 0 e b 31 1 0 e # 20694 intersection c a 31 1 0 e b 31 1 1 e # 20695 intersection c a 31 1 0 e b 31 1 0 e # 20696 intersection c a 31 1 0 e b 31 1 1 f # 20697 intersection c a 31 1 0 e b 31 1 0 e # 20698 intersection c a 31 1 0 e b 31 1 1 0 1 3 4 6 8 12 15 16 17 19 20 21 22 25 26 27 28 29 30 # 20699 intersection c a 31 1 0 f b 31 1 0 f # 20700 intersection c a 31 1 0 f b 31 1 1 e # 20701 intersection c a 31 1 0 f b 31 1 0 f # 20702 intersection c a 31 1 0 f b 31 1 1 f # 20703 intersection c a 31 1 0 f b 31 1 0 f # 20704 intersection c a 31 1 0 f b 31 1 1 1 4 5 6 7 8 14 15 17 20 22 23 24 25 26 28 29 # 20705 intersection c a 31 1 0 1 2 5 8 9 10 16 17 18 19 20 21 22 23 24 25 28 30 b 31 1 0 1 2 5 8 9 10 16 17 18 19 20 21 22 23 24 25 28 30 # 20706 intersection c a 31 1 0 1 2 5 8 9 10 16 17 18 19 20 21 22 23 24 25 28 30 b 31 1 1 e # 20707 intersection c a 31 1 0 0 1 2 5 6 7 8 9 10 13 16 19 22 23 24 25 29 30 b 31 1 0 0 1 2 5 6 7 8 9 10 13 16 19 22 23 24 25 29 30 # 20708 intersection c a 31 1 0 0 1 2 5 6 7 8 9 10 13 16 19 22 23 24 25 29 30 b 31 1 1 f # 20709 intersection c a 31 1 0 1 2 3 6 9 10 13 14 15 16 18 20 23 25 29 b 31 1 0 1 2 3 6 9 10 13 14 15 16 18 20 23 25 29 # 20710 intersection c a 31 1 0 1 2 3 6 9 10 13 14 15 16 18 20 23 25 29 b 31 1 1 0 1 3 4 5 6 8 9 15 16 17 18 20 22 25 26 27 29 # 20711 intersection c a 31 1 1 e b 31 1 1 e # 20712 intersection c a 31 1 1 e b 31 0 0 e # 20713 intersection c a 31 1 1 e b 31 1 1 e # 20714 intersection c a 31 1 1 e b 31 0 0 f # 20715 intersection c a 31 1 1 e b 31 1 1 e # 20716 intersection c a 31 1 1 e b 31 0 0 2 7 10 11 19 21 23 30 # 20717 intersection c a 31 1 1 f b 31 1 1 f # 20718 intersection c a 31 1 1 f b 31 0 0 e # 20719 intersection c a 31 1 1 f b 31 1 1 f # 20720 intersection c a 31 1 1 f b 31 0 0 f # 20721 intersection c a 31 1 1 f b 31 1 1 f # 20722 intersection c a 31 1 1 f b 31 0 0 0 1 3 5 7 10 12 14 18 20 21 22 24 25 26 30 # 20723 intersection c a 31 1 1 1 8 9 12 16 17 20 22 25 b 31 1 1 1 8 9 12 16 17 20 22 25 # 20724 intersection c a 31 1 1 1 8 9 12 16 17 20 22 25 b 31 0 0 e # 20725 intersection c a 31 1 1 0 2 3 4 7 11 13 15 16 19 21 22 24 25 26 30 b 31 1 1 0 2 3 4 7 11 13 15 16 19 21 22 24 25 26 30 # 20726 intersection c a 31 1 1 0 2 3 4 7 11 13 15 16 19 21 22 24 25 26 30 b 31 0 0 f # 20727 intersection c a 31 1 1 1 2 6 8 10 11 12 15 17 21 23 24 28 29 b 31 1 1 1 2 6 8 10 11 12 15 17 21 23 24 28 29 # 20728 intersection c a 31 1 1 1 2 6 8 10 11 12 15 17 21 23 24 28 29 b 31 0 0 0 4 5 6 8 11 12 13 15 16 18 20 21 24 25 26 29 30 # 20729 intersection c a 31 1 1 e b 31 1 1 e # 20730 intersection c a 31 1 1 e b 31 0 1 e # 20731 intersection c a 31 1 1 e b 31 1 1 e # 20732 intersection c a 31 1 1 e b 31 0 1 f # 20733 intersection c a 31 1 1 e b 31 1 1 e # 20734 intersection c a 31 1 1 e b 31 0 1 3 6 7 9 10 12 13 14 15 16 18 19 21 23 24 26 28 # 20735 intersection c a 31 1 1 f b 31 1 1 f # 20736 intersection c a 31 1 1 f b 31 0 1 e # 20737 intersection c a 31 1 1 f b 31 1 1 f # 20738 intersection c a 31 1 1 f b 31 0 1 f # 20739 intersection c a 31 1 1 f b 31 1 1 f # 20740 intersection c a 31 1 1 f b 31 0 1 1 2 3 4 6 7 8 9 10 12 17 20 21 22 23 24 25 27 28 29 # 20741 intersection c a 31 1 1 0 1 2 3 4 6 8 13 15 16 18 21 22 23 24 25 27 28 30 b 31 1 1 0 1 2 3 4 6 8 13 15 16 18 21 22 23 24 25 27 28 30 # 20742 intersection c a 31 1 1 0 1 2 3 4 6 8 13 15 16 18 21 22 23 24 25 27 28 30 b 31 0 1 e # 20743 intersection c a 31 1 1 0 2 3 4 9 10 14 15 18 19 21 22 24 25 26 b 31 1 1 0 2 3 4 9 10 14 15 18 19 21 22 24 25 26 # 20744 intersection c a 31 1 1 0 2 3 4 9 10 14 15 18 19 21 22 24 25 26 b 31 0 1 f # 20745 intersection c a 31 1 1 1 3 4 5 8 10 12 15 16 17 18 19 21 23 26 27 28 b 31 1 1 1 3 4 5 8 10 12 15 16 17 18 19 21 23 26 27 28 # 20746 intersection c a 31 1 1 1 3 4 5 8 10 12 15 16 17 18 19 21 23 26 27 28 b 31 0 1 0 1 2 3 4 5 7 8 9 10 12 14 20 21 22 25 28 30 # 20747 intersection c a 31 1 1 e b 31 1 1 e # 20748 intersection c a 31 1 1 e b 31 1 0 e # 20749 intersection c a 31 1 1 e b 31 1 1 e # 20750 intersection c a 31 1 1 e b 31 1 0 f # 20751 intersection c a 31 1 1 e b 31 1 1 e # 20752 intersection c a 31 1 1 e b 31 1 0 0 2 3 5 11 12 13 17 18 20 21 27 28 29 30 # 20753 intersection c a 31 1 1 f b 31 1 1 f # 20754 intersection c a 31 1 1 f b 31 1 0 e # 20755 intersection c a 31 1 1 f b 31 1 1 f # 20756 intersection c a 31 1 1 f b 31 1 0 f # 20757 intersection c a 31 1 1 f b 31 1 1 f # 20758 intersection c a 31 1 1 f b 31 1 0 0 2 4 6 7 8 9 11 12 13 19 20 21 22 26 27 29 30 # 20759 intersection c a 31 1 1 0 4 5 7 8 11 14 15 18 21 28 29 30 b 31 1 1 0 4 5 7 8 11 14 15 18 21 28 29 30 # 20760 intersection c a 31 1 1 0 4 5 7 8 11 14 15 18 21 28 29 30 b 31 1 0 e # 20761 intersection c a 31 1 1 0 9 12 13 15 18 20 21 22 24 28 b 31 1 1 0 9 12 13 15 18 20 21 22 24 28 # 20762 intersection c a 31 1 1 0 9 12 13 15 18 20 21 22 24 28 b 31 1 0 f # 20763 intersection c a 31 1 1 0 1 2 3 4 8 10 11 15 16 17 18 22 23 27 29 30 b 31 1 1 0 1 2 3 4 8 10 11 15 16 17 18 22 23 27 29 30 # 20764 intersection c a 31 1 1 0 1 2 3 4 8 10 11 15 16 17 18 22 23 27 29 30 b 31 1 0 0 2 3 5 7 8 9 11 12 13 14 15 16 17 18 19 22 23 24 29 # 20765 intersection c a 31 1 1 e b 31 1 1 e # 20766 intersection c a 31 1 1 e b 31 1 1 e # 20767 intersection c a 31 1 1 e b 31 1 1 e # 20768 intersection c a 31 1 1 e b 31 1 1 f # 20769 intersection c a 31 1 1 e b 31 1 1 e # 20770 intersection c a 31 1 1 e b 31 1 1 4 6 7 8 9 11 12 14 15 16 19 20 21 22 23 26 27 28 29 # 20771 intersection c a 31 1 1 f b 31 1 1 f # 20772 intersection c a 31 1 1 f b 31 1 1 e # 20773 intersection c a 31 1 1 f b 31 1 1 f # 20774 intersection c a 31 1 1 f b 31 1 1 f # 20775 intersection c a 31 1 1 f b 31 1 1 f # 20776 intersection c a 31 1 1 f b 31 1 1 2 3 5 6 8 11 13 15 16 17 19 20 22 24 25 27 28 # 20777 intersection c a 31 1 1 0 1 2 3 5 7 8 9 11 13 16 18 20 21 24 26 28 30 b 31 1 1 0 1 2 3 5 7 8 9 11 13 16 18 20 21 24 26 28 30 # 20778 intersection c a 31 1 1 0 1 2 3 5 7 8 9 11 13 16 18 20 21 24 26 28 30 b 31 1 1 e # 20779 intersection c a 31 1 1 0 2 3 4 5 7 8 10 13 14 15 16 17 20 25 27 28 29 b 31 1 1 0 2 3 4 5 7 8 10 13 14 15 16 17 20 25 27 28 29 # 20780 intersection c a 31 1 1 0 2 3 4 5 7 8 10 13 14 15 16 17 20 25 27 28 29 b 31 1 1 f # 20781 intersection c a 31 1 1 0 5 6 8 9 14 16 17 18 20 22 26 29 30 b 31 1 1 0 5 6 8 9 14 16 17 18 20 22 26 29 30 # 20782 intersection c a 31 1 1 0 5 6 8 9 14 16 17 18 20 22 26 29 30 b 31 1 1 0 2 4 5 8 11 12 13 14 15 16 17 18 19 20 21 22 27 # 20783 intersection c a 32 0 0 e b 32 0 0 e # 20784 intersection c a 32 0 0 e b 32 0 0 e # 20785 intersection c a 32 0 0 e b 32 0 0 e # 20786 intersection c a 32 0 0 e b 32 0 0 f # 20787 intersection c a 32 0 0 e b 32 0 0 e # 20788 intersection c a 32 0 0 e b 32 0 0 1 3 4 10 18 21 22 23 28 29 30 # 20789 intersection c a 32 0 0 f b 32 0 0 f # 20790 intersection c a 32 0 0 f b 32 0 0 e # 20791 intersection c a 32 0 0 f b 32 0 0 f # 20792 intersection c a 32 0 0 f b 32 0 0 f # 20793 intersection c a 32 0 0 f b 32 0 0 f # 20794 intersection c a 32 0 0 f b 32 0 0 0 3 4 6 7 8 9 16 18 19 21 22 23 24 25 27 28 29 30 # 20795 intersection c a 32 0 0 3 4 6 7 8 10 12 14 16 25 26 27 28 29 31 b 32 0 0 3 4 6 7 8 10 12 14 16 25 26 27 28 29 31 # 20796 intersection c a 32 0 0 3 4 6 7 8 10 12 14 16 25 26 27 28 29 31 b 32 0 0 e # 20797 intersection c a 32 0 0 1 2 3 4 5 6 7 9 11 13 17 18 19 22 24 25 27 28 29 30 b 32 0 0 1 2 3 4 5 6 7 9 11 13 17 18 19 22 24 25 27 28 29 30 # 20798 intersection c a 32 0 0 1 2 3 4 5 6 7 9 11 13 17 18 19 22 24 25 27 28 29 30 b 32 0 0 f # 20799 intersection c a 32 0 0 0 1 3 4 5 6 7 8 9 10 11 12 17 19 25 26 28 29 b 32 0 0 0 1 3 4 5 6 7 8 9 10 11 12 17 19 25 26 28 29 # 20800 intersection c a 32 0 0 0 1 3 4 5 6 7 8 9 10 11 12 17 19 25 26 28 29 b 32 0 0 1 4 5 8 11 12 13 16 17 18 19 20 24 27 28 29 # 20801 intersection c a 32 0 0 e b 32 0 0 e # 20802 intersection c a 32 0 0 e b 32 0 1 e # 20803 intersection c a 32 0 0 e b 32 0 0 e # 20804 intersection c a 32 0 0 e b 32 0 1 f # 20805 intersection c a 32 0 0 e b 32 0 0 e # 20806 intersection c a 32 0 0 e b 32 0 1 0 2 5 6 11 13 15 16 18 19 22 30 # 20807 intersection c a 32 0 0 f b 32 0 0 f # 20808 intersection c a 32 0 0 f b 32 0 1 e # 20809 intersection c a 32 0 0 f b 32 0 0 f # 20810 intersection c a 32 0 0 f b 32 0 1 f # 20811 intersection c a 32 0 0 f b 32 0 0 f # 20812 intersection c a 32 0 0 f b 32 0 1 0 1 2 4 5 6 7 10 18 19 20 21 25 26 27 29 # 20813 intersection c a 32 0 0 1 2 4 5 7 11 13 14 15 17 18 20 28 29 30 b 32 0 0 1 2 4 5 7 11 13 14 15 17 18 20 28 29 30 # 20814 intersection c a 32 0 0 1 2 4 5 7 11 13 14 15 17 18 20 28 29 30 b 32 0 1 e # 20815 intersection c a 32 0 0 0 2 5 9 11 12 14 17 18 22 26 28 29 30 31 b 32 0 0 0 2 5 9 11 12 14 17 18 22 26 28 29 30 31 # 20816 intersection c a 32 0 0 0 2 5 9 11 12 14 17 18 22 26 28 29 30 31 b 32 0 1 f # 20817 intersection c a 32 0 0 1 4 5 6 7 8 10 11 15 17 18 21 22 23 24 25 27 28 30 31 b 32 0 0 1 4 5 6 7 8 10 11 15 17 18 21 22 23 24 25 27 28 30 31 # 20818 intersection c a 32 0 0 1 4 5 6 7 8 10 11 15 17 18 21 22 23 24 25 27 28 30 31 b 32 0 1 0 1 3 4 6 8 12 14 17 18 19 20 21 23 24 25 26 28 31 # 20819 intersection c a 32 0 0 e b 32 0 0 e # 20820 intersection c a 32 0 0 e b 32 1 0 e # 20821 intersection c a 32 0 0 e b 32 0 0 e # 20822 intersection c a 32 0 0 e b 32 1 0 f # 20823 intersection c a 32 0 0 e b 32 0 0 e # 20824 intersection c a 32 0 0 e b 32 1 0 1 2 6 8 9 11 15 17 18 20 22 24 25 26 27 30 31 # 20825 intersection c a 32 0 0 f b 32 0 0 f # 20826 intersection c a 32 0 0 f b 32 1 0 e # 20827 intersection c a 32 0 0 f b 32 0 0 f # 20828 intersection c a 32 0 0 f b 32 1 0 f # 20829 intersection c a 32 0 0 f b 32 0 0 f # 20830 intersection c a 32 0 0 f b 32 1 0 1 2 3 5 8 9 15 17 18 21 22 24 25 27 30 31 # 20831 intersection c a 32 0 0 0 1 2 5 8 9 11 13 14 15 16 17 18 19 20 21 27 28 31 b 32 0 0 0 1 2 5 8 9 11 13 14 15 16 17 18 19 20 21 27 28 31 # 20832 intersection c a 32 0 0 0 1 2 5 8 9 11 13 14 15 16 17 18 19 20 21 27 28 31 b 32 1 0 e # 20833 intersection c a 32 0 0 0 2 6 7 10 12 13 15 18 20 21 22 29 30 b 32 0 0 0 2 6 7 10 12 13 15 18 20 21 22 29 30 # 20834 intersection c a 32 0 0 0 2 6 7 10 12 13 15 18 20 21 22 29 30 b 32 1 0 f # 20835 intersection c a 32 0 0 0 1 2 5 7 8 11 12 14 16 18 19 23 24 30 b 32 0 0 0 1 2 5 7 8 11 12 14 16 18 19 23 24 30 # 20836 intersection c a 32 0 0 0 1 2 5 7 8 11 12 14 16 18 19 23 24 30 b 32 1 0 1 3 5 8 9 11 15 16 18 20 21 26 27 28 30 31 # 20837 intersection c a 32 0 0 e b 32 0 0 e # 20838 intersection c a 32 0 0 e b 32 1 1 e # 20839 intersection c a 32 0 0 e b 32 0 0 e # 20840 intersection c a 32 0 0 e b 32 1 1 f # 20841 intersection c a 32 0 0 e b 32 0 0 e # 20842 intersection c a 32 0 0 e b 32 1 1 2 3 8 9 12 13 15 16 17 18 19 20 24 25 31 # 20843 intersection c a 32 0 0 f b 32 0 0 f # 20844 intersection c a 32 0 0 f b 32 1 1 e # 20845 intersection c a 32 0 0 f b 32 0 0 f # 20846 intersection c a 32 0 0 f b 32 1 1 f # 20847 intersection c a 32 0 0 f b 32 0 0 f # 20848 intersection c a 32 0 0 f b 32 1 1 0 3 5 10 13 16 18 19 25 26 27 28 31 # 20849 intersection c a 32 0 0 1 2 3 4 5 10 11 13 14 17 19 21 22 25 28 29 b 32 0 0 1 2 3 4 5 10 11 13 14 17 19 21 22 25 28 29 # 20850 intersection c a 32 0 0 1 2 3 4 5 10 11 13 14 17 19 21 22 25 28 29 b 32 1 1 e # 20851 intersection c a 32 0 0 0 1 4 5 6 14 15 17 20 22 26 28 29 30 31 b 32 0 0 0 1 4 5 6 14 15 17 20 22 26 28 29 30 31 # 20852 intersection c a 32 0 0 0 1 4 5 6 14 15 17 20 22 26 28 29 30 31 b 32 1 1 f # 20853 intersection c a 32 0 0 0 3 5 9 10 11 12 13 14 16 18 20 21 22 23 24 27 29 30 b 32 0 0 0 3 5 9 10 11 12 13 14 16 18 20 21 22 23 24 27 29 30 # 20854 intersection c a 32 0 0 0 3 5 9 10 11 12 13 14 16 18 20 21 22 23 24 27 29 30 b 32 1 1 1 4 5 6 8 9 11 12 14 17 18 21 27 31 # 20855 intersection c a 32 0 1 e b 32 0 1 e # 20856 intersection c a 32 0 1 e b 32 0 0 e # 20857 intersection c a 32 0 1 e b 32 0 1 e # 20858 intersection c a 32 0 1 e b 32 0 0 f # 20859 intersection c a 32 0 1 e b 32 0 1 e # 20860 intersection c a 32 0 1 e b 32 0 0 1 4 6 11 15 16 22 24 28 31 # 20861 intersection c a 32 0 1 f b 32 0 1 f # 20862 intersection c a 32 0 1 f b 32 0 0 e # 20863 intersection c a 32 0 1 f b 32 0 1 f # 20864 intersection c a 32 0 1 f b 32 0 0 f # 20865 intersection c a 32 0 1 f b 32 0 1 f # 20866 intersection c a 32 0 1 f b 32 0 0 3 4 5 7 9 10 11 12 14 15 16 17 22 24 25 26 27 30 31 # 20867 intersection c a 32 0 1 0 1 2 4 8 10 11 12 13 14 15 16 20 21 22 23 24 25 26 28 31 b 32 0 1 0 1 2 4 8 10 11 12 13 14 15 16 20 21 22 23 24 25 26 28 31 # 20868 intersection c a 32 0 1 0 1 2 4 8 10 11 12 13 14 15 16 20 21 22 23 24 25 26 28 31 b 32 0 0 e # 20869 intersection c a 32 0 1 1 5 6 9 16 19 22 24 26 27 28 30 b 32 0 1 1 5 6 9 16 19 22 24 26 27 28 30 # 20870 intersection c a 32 0 1 1 5 6 9 16 19 22 24 26 27 28 30 b 32 0 0 f # 20871 intersection c a 32 0 1 1 2 4 5 6 7 9 11 15 16 17 18 20 22 23 24 25 26 27 29 b 32 0 1 1 2 4 5 6 7 9 11 15 16 17 18 20 22 23 24 25 26 27 29 # 20872 intersection c a 32 0 1 1 2 4 5 6 7 9 11 15 16 17 18 20 22 23 24 25 26 27 29 b 32 0 0 0 2 5 7 8 9 10 11 13 14 16 17 18 19 21 22 24 25 27 29 # 20873 intersection c a 32 0 1 e b 32 0 1 e # 20874 intersection c a 32 0 1 e b 32 0 1 e # 20875 intersection c a 32 0 1 e b 32 0 1 e # 20876 intersection c a 32 0 1 e b 32 0 1 f # 20877 intersection c a 32 0 1 e b 32 0 1 e # 20878 intersection c a 32 0 1 e b 32 0 1 2 7 8 9 10 12 13 15 16 19 20 23 24 26 30 # 20879 intersection c a 32 0 1 f b 32 0 1 f # 20880 intersection c a 32 0 1 f b 32 0 1 e # 20881 intersection c a 32 0 1 f b 32 0 1 f # 20882 intersection c a 32 0 1 f b 32 0 1 f # 20883 intersection c a 32 0 1 f b 32 0 1 f # 20884 intersection c a 32 0 1 f b 32 0 1 0 2 3 4 6 7 9 10 12 14 15 16 18 19 20 21 23 27 29 # 20885 intersection c a 32 0 1 6 7 9 10 13 14 17 18 20 22 24 26 31 b 32 0 1 6 7 9 10 13 14 17 18 20 22 24 26 31 # 20886 intersection c a 32 0 1 6 7 9 10 13 14 17 18 20 22 24 26 31 b 32 0 1 e # 20887 intersection c a 32 0 1 1 2 3 4 5 6 8 9 12 14 17 19 23 24 27 29 30 31 b 32 0 1 1 2 3 4 5 6 8 9 12 14 17 19 23 24 27 29 30 31 # 20888 intersection c a 32 0 1 1 2 3 4 5 6 8 9 12 14 17 19 23 24 27 29 30 31 b 32 0 1 f # 20889 intersection c a 32 0 1 1 2 4 5 6 7 12 13 15 16 17 18 19 22 27 28 29 30 b 32 0 1 1 2 4 5 6 7 12 13 15 16 17 18 19 22 27 28 29 30 # 20890 intersection c a 32 0 1 1 2 4 5 6 7 12 13 15 16 17 18 19 22 27 28 29 30 b 32 0 1 0 1 2 4 5 8 11 13 14 16 17 20 22 25 28 30 31 # 20891 intersection c a 32 0 1 e b 32 0 1 e # 20892 intersection c a 32 0 1 e b 32 1 0 e # 20893 intersection c a 32 0 1 e b 32 0 1 e # 20894 intersection c a 32 0 1 e b 32 1 0 f # 20895 intersection c a 32 0 1 e b 32 0 1 e # 20896 intersection c a 32 0 1 e b 32 1 0 1 4 7 8 9 12 14 15 16 17 19 23 25 30 31 # 20897 intersection c a 32 0 1 f b 32 0 1 f # 20898 intersection c a 32 0 1 f b 32 1 0 e # 20899 intersection c a 32 0 1 f b 32 0 1 f # 20900 intersection c a 32 0 1 f b 32 1 0 f # 20901 intersection c a 32 0 1 f b 32 0 1 f # 20902 intersection c a 32 0 1 f b 32 1 0 3 4 5 6 7 8 11 13 14 16 21 22 23 24 26 29 31 # 20903 intersection c a 32 0 1 1 2 3 6 8 9 10 12 13 14 15 16 26 27 30 b 32 0 1 1 2 3 6 8 9 10 12 13 14 15 16 26 27 30 # 20904 intersection c a 32 0 1 1 2 3 6 8 9 10 12 13 14 15 16 26 27 30 b 32 1 0 e # 20905 intersection c a 32 0 1 0 4 6 7 9 10 13 16 18 20 27 29 b 32 0 1 0 4 6 7 9 10 13 16 18 20 27 29 # 20906 intersection c a 32 0 1 0 4 6 7 9 10 13 16 18 20 27 29 b 32 1 0 f # 20907 intersection c a 32 0 1 1 2 4 5 11 12 13 15 19 20 21 24 26 30 31 b 32 0 1 1 2 4 5 11 12 13 15 19 20 21 24 26 30 31 # 20908 intersection c a 32 0 1 1 2 4 5 11 12 13 15 19 20 21 24 26 30 31 b 32 1 0 0 1 3 4 5 8 9 11 13 14 15 18 19 20 21 23 27 30 # 20909 intersection c a 32 0 1 e b 32 0 1 e # 20910 intersection c a 32 0 1 e b 32 1 1 e # 20911 intersection c a 32 0 1 e b 32 0 1 e # 20912 intersection c a 32 0 1 e b 32 1 1 f # 20913 intersection c a 32 0 1 e b 32 0 1 e # 20914 intersection c a 32 0 1 e b 32 1 1 5 9 11 14 15 18 21 23 25 26 27 29 31 # 20915 intersection c a 32 0 1 f b 32 0 1 f # 20916 intersection c a 32 0 1 f b 32 1 1 e # 20917 intersection c a 32 0 1 f b 32 0 1 f # 20918 intersection c a 32 0 1 f b 32 1 1 f # 20919 intersection c a 32 0 1 f b 32 0 1 f # 20920 intersection c a 32 0 1 f b 32 1 1 1 3 5 6 7 10 11 13 14 15 19 21 22 23 24 25 28 29 # 20921 intersection c a 32 0 1 1 2 3 5 6 7 9 10 11 12 13 14 15 18 19 25 26 27 28 b 32 0 1 1 2 3 5 6 7 9 10 11 12 13 14 15 18 19 25 26 27 28 # 20922 intersection c a 32 0 1 1 2 3 5 6 7 9 10 11 12 13 14 15 18 19 25 26 27 28 b 32 1 1 e # 20923 intersection c a 32 0 1 0 11 13 14 17 21 22 24 28 29 30 31 b 32 0 1 0 11 13 14 17 21 22 24 28 29 30 31 # 20924 intersection c a 32 0 1 0 11 13 14 17 21 22 24 28 29 30 31 b 32 1 1 f # 20925 intersection c a 32 0 1 0 1 5 6 9 12 14 18 20 22 23 24 27 29 b 32 0 1 0 1 5 6 9 12 14 18 20 22 23 24 27 29 # 20926 intersection c a 32 0 1 0 1 5 6 9 12 14 18 20 22 23 24 27 29 b 32 1 1 0 1 6 7 12 15 20 23 24 29 # 20927 intersection c a 32 1 0 e b 32 1 0 e # 20928 intersection c a 32 1 0 e b 32 0 0 e # 20929 intersection c a 32 1 0 e b 32 1 0 e # 20930 intersection c a 32 1 0 e b 32 0 0 f # 20931 intersection c a 32 1 0 e b 32 1 0 e # 20932 intersection c a 32 1 0 e b 32 0 0 0 1 2 6 8 10 15 17 21 22 26 27 # 20933 intersection c a 32 1 0 f b 32 1 0 f # 20934 intersection c a 32 1 0 f b 32 0 0 e # 20935 intersection c a 32 1 0 f b 32 1 0 f # 20936 intersection c a 32 1 0 f b 32 0 0 f # 20937 intersection c a 32 1 0 f b 32 1 0 f # 20938 intersection c a 32 1 0 f b 32 0 0 1 6 8 9 10 12 17 18 19 21 23 25 27 29 30 # 20939 intersection c a 32 1 0 0 2 4 5 7 8 10 11 15 16 17 20 21 23 24 25 26 27 29 b 32 1 0 0 2 4 5 7 8 10 11 15 16 17 20 21 23 24 25 26 27 29 # 20940 intersection c a 32 1 0 0 2 4 5 7 8 10 11 15 16 17 20 21 23 24 25 26 27 29 b 32 0 0 e # 20941 intersection c a 32 1 0 5 6 9 10 11 17 18 19 20 21 22 24 25 29 31 b 32 1 0 5 6 9 10 11 17 18 19 20 21 22 24 25 29 31 # 20942 intersection c a 32 1 0 5 6 9 10 11 17 18 19 20 21 22 24 25 29 31 b 32 0 0 f # 20943 intersection c a 32 1 0 1 2 3 4 5 8 10 15 18 21 22 23 27 29 30 31 b 32 1 0 1 2 3 4 5 8 10 15 18 21 22 23 27 29 30 31 # 20944 intersection c a 32 1 0 1 2 3 4 5 8 10 15 18 21 22 23 27 29 30 31 b 32 0 0 0 1 2 3 4 5 6 7 9 10 11 15 16 19 20 21 22 28 31 # 20945 intersection c a 32 1 0 e b 32 1 0 e # 20946 intersection c a 32 1 0 e b 32 0 1 e # 20947 intersection c a 32 1 0 e b 32 1 0 e # 20948 intersection c a 32 1 0 e b 32 0 1 f # 20949 intersection c a 32 1 0 e b 32 1 0 e # 20950 intersection c a 32 1 0 e b 32 0 1 0 1 3 4 10 11 12 14 15 16 18 19 21 24 25 26 27 28 30 31 # 20951 intersection c a 32 1 0 f b 32 1 0 f # 20952 intersection c a 32 1 0 f b 32 0 1 e # 20953 intersection c a 32 1 0 f b 32 1 0 f # 20954 intersection c a 32 1 0 f b 32 0 1 f # 20955 intersection c a 32 1 0 f b 32 1 0 f # 20956 intersection c a 32 1 0 f b 32 0 1 2 4 8 11 12 15 19 20 21 23 26 29 31 # 20957 intersection c a 32 1 0 0 2 3 6 8 10 11 14 15 16 18 19 20 21 22 25 26 27 b 32 1 0 0 2 3 6 8 10 11 14 15 16 18 19 20 21 22 25 26 27 # 20958 intersection c a 32 1 0 0 2 3 6 8 10 11 14 15 16 18 19 20 21 22 25 26 27 b 32 0 1 e # 20959 intersection c a 32 1 0 0 4 7 10 11 12 13 14 15 16 17 19 20 23 24 26 28 30 31 b 32 1 0 0 4 7 10 11 12 13 14 15 16 17 19 20 23 24 26 28 30 31 # 20960 intersection c a 32 1 0 0 4 7 10 11 12 13 14 15 16 17 19 20 23 24 26 28 30 31 b 32 0 1 f # 20961 intersection c a 32 1 0 0 2 3 6 7 8 9 10 11 13 14 16 21 26 29 b 32 1 0 0 2 3 6 7 8 9 10 11 13 14 16 21 26 29 # 20962 intersection c a 32 1 0 0 2 3 6 7 8 9 10 11 13 14 16 21 26 29 b 32 0 1 2 3 4 5 6 7 9 10 11 12 16 17 18 20 22 24 25 26 28 31 # 20963 intersection c a 32 1 0 e b 32 1 0 e # 20964 intersection c a 32 1 0 e b 32 1 0 e # 20965 intersection c a 32 1 0 e b 32 1 0 e # 20966 intersection c a 32 1 0 e b 32 1 0 f # 20967 intersection c a 32 1 0 e b 32 1 0 e # 20968 intersection c a 32 1 0 e b 32 1 0 2 6 7 9 10 11 15 20 21 22 23 24 25 26 28 # 20969 intersection c a 32 1 0 f b 32 1 0 f # 20970 intersection c a 32 1 0 f b 32 1 0 e # 20971 intersection c a 32 1 0 f b 32 1 0 f # 20972 intersection c a 32 1 0 f b 32 1 0 f # 20973 intersection c a 32 1 0 f b 32 1 0 f # 20974 intersection c a 32 1 0 f b 32 1 0 0 2 4 5 6 7 9 10 11 12 14 16 17 19 20 22 23 24 25 27 29 # 20975 intersection c a 32 1 0 0 3 4 6 9 13 16 17 19 21 22 24 25 27 28 29 31 b 32 1 0 0 3 4 6 9 13 16 17 19 21 22 24 25 27 28 29 31 # 20976 intersection c a 32 1 0 0 3 4 6 9 13 16 17 19 21 22 24 25 27 28 29 31 b 32 1 0 e # 20977 intersection c a 32 1 0 0 1 3 8 9 10 12 15 17 18 20 22 25 28 29 30 31 b 32 1 0 0 1 3 8 9 10 12 15 17 18 20 22 25 28 29 30 31 # 20978 intersection c a 32 1 0 0 1 3 8 9 10 12 15 17 18 20 22 25 28 29 30 31 b 32 1 0 f # 20979 intersection c a 32 1 0 2 3 4 7 8 9 10 11 18 19 20 21 24 25 28 b 32 1 0 2 3 4 7 8 9 10 11 18 19 20 21 24 25 28 # 20980 intersection c a 32 1 0 2 3 4 7 8 9 10 11 18 19 20 21 24 25 28 b 32 1 0 0 1 2 3 10 12 14 16 17 20 21 22 24 26 28 30 31 # 20981 intersection c a 32 1 0 e b 32 1 0 e # 20982 intersection c a 32 1 0 e b 32 1 1 e # 20983 intersection c a 32 1 0 e b 32 1 0 e # 20984 intersection c a 32 1 0 e b 32 1 1 f # 20985 intersection c a 32 1 0 e b 32 1 0 e # 20986 intersection c a 32 1 0 e b 32 1 1 1 4 5 6 9 10 13 14 15 16 17 20 22 25 26 29 30 # 20987 intersection c a 32 1 0 f b 32 1 0 f # 20988 intersection c a 32 1 0 f b 32 1 1 e # 20989 intersection c a 32 1 0 f b 32 1 0 f # 20990 intersection c a 32 1 0 f b 32 1 1 f # 20991 intersection c a 32 1 0 f b 32 1 0 f # 20992 intersection c a 32 1 0 f b 32 1 1 2 5 6 7 11 14 15 19 23 27 31 # 20993 intersection c a 32 1 0 0 4 5 9 11 12 13 14 19 20 21 22 25 26 31 b 32 1 0 0 4 5 9 11 12 13 14 19 20 21 22 25 26 31 # 20994 intersection c a 32 1 0 0 4 5 9 11 12 13 14 19 20 21 22 25 26 31 b 32 1 1 e # 20995 intersection c a 32 1 0 6 7 10 16 17 21 22 23 24 25 28 b 32 1 0 6 7 10 16 17 21 22 23 24 25 28 # 20996 intersection c a 32 1 0 6 7 10 16 17 21 22 23 24 25 28 b 32 1 1 f # 20997 intersection c a 32 1 0 0 2 4 5 12 13 14 16 18 21 22 28 29 30 31 b 32 1 0 0 2 4 5 12 13 14 16 18 21 22 28 29 30 31 # 20998 intersection c a 32 1 0 0 2 4 5 12 13 14 16 18 21 22 28 29 30 31 b 32 1 1 1 4 5 8 9 10 11 12 13 15 16 18 20 21 25 26 27 28 29 30 31 # 20999 intersection c a 32 1 1 e b 32 1 1 e # 21000 intersection c a 32 1 1 e b 32 0 0 e # 21001 intersection c a 32 1 1 e b 32 1 1 e # 21002 intersection c a 32 1 1 e b 32 0 0 f # 21003 intersection c a 32 1 1 e b 32 1 1 e # 21004 intersection c a 32 1 1 e b 32 0 0 0 1 3 4 5 7 8 9 11 12 13 15 16 18 19 23 26 # 21005 intersection c a 32 1 1 f b 32 1 1 f # 21006 intersection c a 32 1 1 f b 32 0 0 e # 21007 intersection c a 32 1 1 f b 32 1 1 f # 21008 intersection c a 32 1 1 f b 32 0 0 f # 21009 intersection c a 32 1 1 f b 32 1 1 f # 21010 intersection c a 32 1 1 f b 32 0 0 5 6 7 8 10 16 20 21 22 25 27 29 31 # 21011 intersection c a 32 1 1 1 2 5 10 11 13 14 19 20 25 26 31 b 32 1 1 1 2 5 10 11 13 14 19 20 25 26 31 # 21012 intersection c a 32 1 1 1 2 5 10 11 13 14 19 20 25 26 31 b 32 0 0 e # 21013 intersection c a 32 1 1 0 5 6 7 8 14 15 16 18 19 20 21 22 23 24 25 29 30 b 32 1 1 0 5 6 7 8 14 15 16 18 19 20 21 22 23 24 25 29 30 # 21014 intersection c a 32 1 1 0 5 6 7 8 14 15 16 18 19 20 21 22 23 24 25 29 30 b 32 0 0 f # 21015 intersection c a 32 1 1 0 2 4 6 7 8 12 15 17 20 23 25 26 27 29 30 b 32 1 1 0 2 4 6 7 8 12 15 17 20 23 25 26 27 29 30 # 21016 intersection c a 32 1 1 0 2 4 6 7 8 12 15 17 20 23 25 26 27 29 30 b 32 0 0 1 2 5 9 10 12 13 14 16 18 19 20 21 22 24 25 28 30 31 # 21017 intersection c a 32 1 1 e b 32 1 1 e # 21018 intersection c a 32 1 1 e b 32 0 1 e # 21019 intersection c a 32 1 1 e b 32 1 1 e # 21020 intersection c a 32 1 1 e b 32 0 1 f # 21021 intersection c a 32 1 1 e b 32 1 1 e # 21022 intersection c a 32 1 1 e b 32 0 1 0 10 13 14 21 22 24 25 # 21023 intersection c a 32 1 1 f b 32 1 1 f # 21024 intersection c a 32 1 1 f b 32 0 1 e # 21025 intersection c a 32 1 1 f b 32 1 1 f # 21026 intersection c a 32 1 1 f b 32 0 1 f # 21027 intersection c a 32 1 1 f b 32 1 1 f # 21028 intersection c a 32 1 1 f b 32 0 1 0 1 3 5 10 12 14 16 17 20 22 23 29 30 # 21029 intersection c a 32 1 1 3 5 8 9 10 11 13 16 17 18 19 20 21 24 25 26 30 31 b 32 1 1 3 5 8 9 10 11 13 16 17 18 19 20 21 24 25 26 30 31 # 21030 intersection c a 32 1 1 3 5 8 9 10 11 13 16 17 18 19 20 21 24 25 26 30 31 b 32 0 1 e # 21031 intersection c a 32 1 1 0 1 2 3 4 5 7 8 10 13 14 15 16 17 18 19 20 22 23 24 25 29 31 b 32 1 1 0 1 2 3 4 5 7 8 10 13 14 15 16 17 18 19 20 22 23 24 25 29 31 # 21032 intersection c a 32 1 1 0 1 2 3 4 5 7 8 10 13 14 15 16 17 18 19 20 22 23 24 25 29 31 b 32 0 1 f # 21033 intersection c a 32 1 1 0 2 3 8 10 13 15 16 17 18 21 26 27 30 b 32 1 1 0 2 3 8 10 13 15 16 17 18 21 26 27 30 # 21034 intersection c a 32 1 1 0 2 3 8 10 13 15 16 17 18 21 26 27 30 b 32 0 1 1 3 5 6 8 9 13 16 17 18 19 20 21 25 26 27 29 31 # 21035 intersection c a 32 1 1 e b 32 1 1 e # 21036 intersection c a 32 1 1 e b 32 1 0 e # 21037 intersection c a 32 1 1 e b 32 1 1 e # 21038 intersection c a 32 1 1 e b 32 1 0 f # 21039 intersection c a 32 1 1 e b 32 1 1 e # 21040 intersection c a 32 1 1 e b 32 1 0 1 3 6 10 11 13 14 15 16 17 18 19 20 22 25 28 29 # 21041 intersection c a 32 1 1 f b 32 1 1 f # 21042 intersection c a 32 1 1 f b 32 1 0 e # 21043 intersection c a 32 1 1 f b 32 1 1 f # 21044 intersection c a 32 1 1 f b 32 1 0 f # 21045 intersection c a 32 1 1 f b 32 1 1 f # 21046 intersection c a 32 1 1 f b 32 1 0 1 2 3 5 11 14 16 17 18 19 20 21 22 24 26 27 28 29 30 # 21047 intersection c a 32 1 1 0 1 3 4 5 9 12 13 14 15 16 17 18 19 20 21 22 23 24 25 27 28 b 32 1 1 0 1 3 4 5 9 12 13 14 15 16 17 18 19 20 21 22 23 24 25 27 28 # 21048 intersection c a 32 1 1 0 1 3 4 5 9 12 13 14 15 16 17 18 19 20 21 22 23 24 25 27 28 b 32 1 0 e # 21049 intersection c a 32 1 1 1 4 5 6 8 10 11 14 15 18 19 21 22 28 29 30 b 32 1 1 1 4 5 6 8 10 11 14 15 18 19 21 22 28 29 30 # 21050 intersection c a 32 1 1 1 4 5 6 8 10 11 14 15 18 19 21 22 28 29 30 b 32 1 0 f # 21051 intersection c a 32 1 1 0 2 3 5 6 7 8 9 10 16 17 20 25 b 32 1 1 0 2 3 5 6 7 8 9 10 16 17 20 25 # 21052 intersection c a 32 1 1 0 2 3 5 6 7 8 9 10 16 17 20 25 b 32 1 0 2 3 4 5 6 7 8 11 12 15 17 21 23 25 26 27 31 # 21053 intersection c a 32 1 1 e b 32 1 1 e # 21054 intersection c a 32 1 1 e b 32 1 1 e # 21055 intersection c a 32 1 1 e b 32 1 1 e # 21056 intersection c a 32 1 1 e b 32 1 1 f # 21057 intersection c a 32 1 1 e b 32 1 1 e # 21058 intersection c a 32 1 1 e b 32 1 1 0 3 6 7 8 9 10 11 14 15 17 19 20 21 24 27 28 30 31 # 21059 intersection c a 32 1 1 f b 32 1 1 f # 21060 intersection c a 32 1 1 f b 32 1 1 e # 21061 intersection c a 32 1 1 f b 32 1 1 f # 21062 intersection c a 32 1 1 f b 32 1 1 f # 21063 intersection c a 32 1 1 f b 32 1 1 f # 21064 intersection c a 32 1 1 f b 32 1 1 0 3 6 9 10 11 13 14 15 16 17 18 20 22 24 25 27 # 21065 intersection c a 32 1 1 1 3 11 12 13 14 15 16 19 20 21 24 25 28 29 30 b 32 1 1 1 3 11 12 13 14 15 16 19 20 21 24 25 28 29 30 # 21066 intersection c a 32 1 1 1 3 11 12 13 14 15 16 19 20 21 24 25 28 29 30 b 32 1 1 e # 21067 intersection c a 32 1 1 0 1 3 5 8 9 11 12 13 14 15 17 20 21 22 23 25 28 30 b 32 1 1 0 1 3 5 8 9 11 12 13 14 15 17 20 21 22 23 25 28 30 # 21068 intersection c a 32 1 1 0 1 3 5 8 9 11 12 13 14 15 17 20 21 22 23 25 28 30 b 32 1 1 f # 21069 intersection c a 32 1 1 5 6 8 13 15 16 17 18 19 21 22 23 24 28 30 31 b 32 1 1 5 6 8 13 15 16 17 18 19 21 22 23 24 28 30 31 # 21070 intersection c a 32 1 1 5 6 8 13 15 16 17 18 19 21 22 23 24 28 30 31 b 32 1 1 0 8 9 10 11 12 13 14 15 16 17 18 21 25 26 27 29 30 # 21071 intersection c a 33 0 0 e b 33 0 0 e # 21072 intersection c a 33 0 0 e b 33 0 0 e # 21073 intersection c a 33 0 0 e b 33 0 0 e # 21074 intersection c a 33 0 0 e b 33 0 0 f # 21075 intersection c a 33 0 0 e b 33 0 0 e # 21076 intersection c a 33 0 0 e b 33 0 0 3 4 5 6 7 8 9 10 12 17 18 19 20 21 22 23 24 25 26 27 29 31 # 21077 intersection c a 33 0 0 f b 33 0 0 f # 21078 intersection c a 33 0 0 f b 33 0 0 e # 21079 intersection c a 33 0 0 f b 33 0 0 f # 21080 intersection c a 33 0 0 f b 33 0 0 f # 21081 intersection c a 33 0 0 f b 33 0 0 f # 21082 intersection c a 33 0 0 f b 33 0 0 0 3 8 9 10 14 18 21 22 24 25 26 27 31 32 # 21083 intersection c a 33 0 0 0 1 5 8 9 13 15 16 17 19 20 21 22 23 25 26 27 29 30 32 b 33 0 0 0 1 5 8 9 13 15 16 17 19 20 21 22 23 25 26 27 29 30 32 # 21084 intersection c a 33 0 0 0 1 5 8 9 13 15 16 17 19 20 21 22 23 25 26 27 29 30 32 b 33 0 0 e # 21085 intersection c a 33 0 0 2 4 6 8 10 12 13 17 20 21 22 24 25 26 27 28 29 30 b 33 0 0 2 4 6 8 10 12 13 17 20 21 22 24 25 26 27 28 29 30 # 21086 intersection c a 33 0 0 2 4 6 8 10 12 13 17 20 21 22 24 25 26 27 28 29 30 b 33 0 0 f # 21087 intersection c a 33 0 0 0 3 5 6 7 8 11 13 21 23 26 28 29 30 31 b 33 0 0 0 3 5 6 7 8 11 13 21 23 26 28 29 30 31 # 21088 intersection c a 33 0 0 0 3 5 6 7 8 11 13 21 23 26 28 29 30 31 b 33 0 0 1 2 3 5 6 7 12 13 16 17 19 20 25 28 29 30 31 32 # 21089 intersection c a 33 0 0 e b 33 0 0 e # 21090 intersection c a 33 0 0 e b 33 0 1 e # 21091 intersection c a 33 0 0 e b 33 0 0 e # 21092 intersection c a 33 0 0 e b 33 0 1 f # 21093 intersection c a 33 0 0 e b 33 0 0 e # 21094 intersection c a 33 0 0 e b 33 0 1 0 1 4 5 6 9 10 11 14 16 17 20 23 24 25 27 # 21095 intersection c a 33 0 0 f b 33 0 0 f # 21096 intersection c a 33 0 0 f b 33 0 1 e # 21097 intersection c a 33 0 0 f b 33 0 0 f # 21098 intersection c a 33 0 0 f b 33 0 1 f # 21099 intersection c a 33 0 0 f b 33 0 0 f # 21100 intersection c a 33 0 0 f b 33 0 1 0 1 3 6 9 10 11 12 15 17 18 19 22 23 24 28 29 30 31 # 21101 intersection c a 33 0 0 2 3 9 11 16 20 24 25 27 28 32 b 33 0 0 2 3 9 11 16 20 24 25 27 28 32 # 21102 intersection c a 33 0 0 2 3 9 11 16 20 24 25 27 28 32 b 33 0 1 e # 21103 intersection c a 33 0 0 1 3 5 9 10 13 17 19 21 22 25 27 28 29 32 b 33 0 0 1 3 5 9 10 13 17 19 21 22 25 27 28 29 32 # 21104 intersection c a 33 0 0 1 3 5 9 10 13 17 19 21 22 25 27 28 29 32 b 33 0 1 f # 21105 intersection c a 33 0 0 0 1 2 6 8 11 12 13 15 21 22 25 27 30 31 b 33 0 0 0 1 2 6 8 11 12 13 15 21 22 25 27 30 31 # 21106 intersection c a 33 0 0 0 1 2 6 8 11 12 13 15 21 22 25 27 30 31 b 33 0 1 0 2 3 5 6 9 13 14 15 19 21 24 28 30 31 32 # 21107 intersection c a 33 0 0 e b 33 0 0 e # 21108 intersection c a 33 0 0 e b 33 1 0 e # 21109 intersection c a 33 0 0 e b 33 0 0 e # 21110 intersection c a 33 0 0 e b 33 1 0 f # 21111 intersection c a 33 0 0 e b 33 0 0 e # 21112 intersection c a 33 0 0 e b 33 1 0 0 1 3 4 5 7 8 9 11 12 16 18 21 23 25 26 27 28 30 31 # 21113 intersection c a 33 0 0 f b 33 0 0 f # 21114 intersection c a 33 0 0 f b 33 1 0 e # 21115 intersection c a 33 0 0 f b 33 0 0 f # 21116 intersection c a 33 0 0 f b 33 1 0 f # 21117 intersection c a 33 0 0 f b 33 0 0 f # 21118 intersection c a 33 0 0 f b 33 1 0 2 3 4 5 6 8 9 14 18 20 21 22 23 25 26 27 28 29 31 # 21119 intersection c a 33 0 0 1 2 3 4 6 7 8 13 15 16 17 18 21 22 24 25 26 29 30 32 b 33 0 0 1 2 3 4 6 7 8 13 15 16 17 18 21 22 24 25 26 29 30 32 # 21120 intersection c a 33 0 0 1 2 3 4 6 7 8 13 15 16 17 18 21 22 24 25 26 29 30 32 b 33 1 0 e # 21121 intersection c a 33 0 0 0 2 5 6 7 10 11 12 13 14 18 22 29 31 b 33 0 0 0 2 5 6 7 10 11 12 13 14 18 22 29 31 # 21122 intersection c a 33 0 0 0 2 5 6 7 10 11 12 13 14 18 22 29 31 b 33 1 0 f # 21123 intersection c a 33 0 0 2 5 8 13 14 16 18 19 21 23 26 28 29 30 31 b 33 0 0 2 5 8 13 14 16 18 19 21 23 26 28 29 30 31 # 21124 intersection c a 33 0 0 2 5 8 13 14 16 18 19 21 23 26 28 29 30 31 b 33 1 0 0 3 4 5 9 11 12 13 14 16 17 19 20 25 28 31 # 21125 intersection c a 33 0 0 e b 33 0 0 e # 21126 intersection c a 33 0 0 e b 33 1 1 e # 21127 intersection c a 33 0 0 e b 33 0 0 e # 21128 intersection c a 33 0 0 e b 33 1 1 f # 21129 intersection c a 33 0 0 e b 33 0 0 e # 21130 intersection c a 33 0 0 e b 33 1 1 0 3 4 7 8 10 11 12 14 15 16 18 19 20 27 28 29 31 # 21131 intersection c a 33 0 0 f b 33 0 0 f # 21132 intersection c a 33 0 0 f b 33 1 1 e # 21133 intersection c a 33 0 0 f b 33 0 0 f # 21134 intersection c a 33 0 0 f b 33 1 1 f # 21135 intersection c a 33 0 0 f b 33 0 0 f # 21136 intersection c a 33 0 0 f b 33 1 1 1 3 6 9 11 12 16 18 20 22 24 27 28 # 21137 intersection c a 33 0 0 0 5 6 10 11 12 14 17 19 20 24 26 27 b 33 0 0 0 5 6 10 11 12 14 17 19 20 24 26 27 # 21138 intersection c a 33 0 0 0 5 6 10 11 12 14 17 19 20 24 26 27 b 33 1 1 e # 21139 intersection c a 33 0 0 0 2 3 5 7 8 9 10 12 15 19 20 21 22 23 24 25 27 28 29 31 b 33 0 0 0 2 3 5 7 8 9 10 12 15 19 20 21 22 23 24 25 27 28 29 31 # 21140 intersection c a 33 0 0 0 2 3 5 7 8 9 10 12 15 19 20 21 22 23 24 25 27 28 29 31 b 33 1 1 f # 21141 intersection c a 33 0 0 4 7 8 12 14 16 17 18 21 28 29 31 b 33 0 0 4 7 8 12 14 16 17 18 21 28 29 31 # 21142 intersection c a 33 0 0 4 7 8 12 14 16 17 18 21 28 29 31 b 33 1 1 0 5 7 10 11 15 17 21 22 24 25 27 # 21143 intersection c a 33 0 1 e b 33 0 1 e # 21144 intersection c a 33 0 1 e b 33 0 0 e # 21145 intersection c a 33 0 1 e b 33 0 1 e # 21146 intersection c a 33 0 1 e b 33 0 0 f # 21147 intersection c a 33 0 1 e b 33 0 1 e # 21148 intersection c a 33 0 1 e b 33 0 0 0 1 2 3 4 5 8 9 10 13 17 18 19 22 25 26 27 # 21149 intersection c a 33 0 1 f b 33 0 1 f # 21150 intersection c a 33 0 1 f b 33 0 0 e # 21151 intersection c a 33 0 1 f b 33 0 1 f # 21152 intersection c a 33 0 1 f b 33 0 0 f # 21153 intersection c a 33 0 1 f b 33 0 1 f # 21154 intersection c a 33 0 1 f b 33 0 0 1 5 10 12 15 16 21 22 24 26 28 31 # 21155 intersection c a 33 0 1 0 5 6 7 10 11 12 13 14 16 17 18 19 20 25 26 29 30 31 b 33 0 1 0 5 6 7 10 11 12 13 14 16 17 18 19 20 25 26 29 30 31 # 21156 intersection c a 33 0 1 0 5 6 7 10 11 12 13 14 16 17 18 19 20 25 26 29 30 31 b 33 0 0 e # 21157 intersection c a 33 0 1 2 3 5 7 8 12 13 15 18 19 20 21 22 24 26 27 29 b 33 0 1 2 3 5 7 8 12 13 15 18 19 20 21 22 24 26 27 29 # 21158 intersection c a 33 0 1 2 3 5 7 8 12 13 15 18 19 20 21 22 24 26 27 29 b 33 0 0 f # 21159 intersection c a 33 0 1 0 2 3 4 8 9 11 15 16 17 19 20 21 22 24 25 26 30 32 b 33 0 1 0 2 3 4 8 9 11 15 16 17 19 20 21 22 24 25 26 30 32 # 21160 intersection c a 33 0 1 0 2 3 4 8 9 11 15 16 17 19 20 21 22 24 25 26 30 32 b 33 0 0 1 2 3 5 6 9 10 12 13 15 18 22 26 29 31 32 # 21161 intersection c a 33 0 1 e b 33 0 1 e # 21162 intersection c a 33 0 1 e b 33 0 1 e # 21163 intersection c a 33 0 1 e b 33 0 1 e # 21164 intersection c a 33 0 1 e b 33 0 1 f # 21165 intersection c a 33 0 1 e b 33 0 1 e # 21166 intersection c a 33 0 1 e b 33 0 1 0 1 3 4 5 8 9 11 14 15 19 21 23 25 26 28 29 31 # 21167 intersection c a 33 0 1 f b 33 0 1 f # 21168 intersection c a 33 0 1 f b 33 0 1 e # 21169 intersection c a 33 0 1 f b 33 0 1 f # 21170 intersection c a 33 0 1 f b 33 0 1 f # 21171 intersection c a 33 0 1 f b 33 0 1 f # 21172 intersection c a 33 0 1 f b 33 0 1 0 1 3 5 6 7 9 11 12 13 15 19 21 24 25 27 # 21173 intersection c a 33 0 1 8 10 11 13 14 15 17 24 25 26 27 31 32 b 33 0 1 8 10 11 13 14 15 17 24 25 26 27 31 32 # 21174 intersection c a 33 0 1 8 10 11 13 14 15 17 24 25 26 27 31 32 b 33 0 1 e # 21175 intersection c a 33 0 1 0 1 5 6 7 8 9 11 12 13 14 15 19 21 24 26 28 b 33 0 1 0 1 5 6 7 8 9 11 12 13 14 15 19 21 24 26 28 # 21176 intersection c a 33 0 1 0 1 5 6 7 8 9 11 12 13 14 15 19 21 24 26 28 b 33 0 1 f # 21177 intersection c a 33 0 1 0 1 2 4 5 8 9 11 12 13 17 18 19 22 23 24 25 26 30 31 32 b 33 0 1 0 1 2 4 5 8 9 11 12 13 17 18 19 22 23 24 25 26 30 31 32 # 21178 intersection c a 33 0 1 0 1 2 4 5 8 9 11 12 13 17 18 19 22 23 24 25 26 30 31 32 b 33 0 1 0 2 3 4 6 7 9 10 12 13 14 15 16 17 19 22 26 29 # 21179 intersection c a 33 0 1 e b 33 0 1 e # 21180 intersection c a 33 0 1 e b 33 1 0 e # 21181 intersection c a 33 0 1 e b 33 0 1 e # 21182 intersection c a 33 0 1 e b 33 1 0 f # 21183 intersection c a 33 0 1 e b 33 0 1 e # 21184 intersection c a 33 0 1 e b 33 1 0 2 4 5 6 7 10 13 15 19 21 22 23 24 28 29 30 32 # 21185 intersection c a 33 0 1 f b 33 0 1 f # 21186 intersection c a 33 0 1 f b 33 1 0 e # 21187 intersection c a 33 0 1 f b 33 0 1 f # 21188 intersection c a 33 0 1 f b 33 1 0 f # 21189 intersection c a 33 0 1 f b 33 0 1 f # 21190 intersection c a 33 0 1 f b 33 1 0 0 1 2 4 5 6 12 15 16 19 21 22 23 26 27 28 29 30 31 32 # 21191 intersection c a 33 0 1 0 3 5 7 11 12 14 16 17 19 22 23 24 25 26 27 28 30 31 32 b 33 0 1 0 3 5 7 11 12 14 16 17 19 22 23 24 25 26 27 28 30 31 32 # 21192 intersection c a 33 0 1 0 3 5 7 11 12 14 16 17 19 22 23 24 25 26 27 28 30 31 32 b 33 1 0 e # 21193 intersection c a 33 0 1 1 2 3 4 5 9 11 12 13 18 21 27 30 32 b 33 0 1 1 2 3 4 5 9 11 12 13 18 21 27 30 32 # 21194 intersection c a 33 0 1 1 2 3 4 5 9 11 12 13 18 21 27 30 32 b 33 1 0 f # 21195 intersection c a 33 0 1 0 2 4 6 7 8 11 12 13 14 16 19 20 21 24 26 28 31 32 b 33 0 1 0 2 4 6 7 8 11 12 13 14 16 19 20 21 24 26 28 31 32 # 21196 intersection c a 33 0 1 0 2 4 6 7 8 11 12 13 14 16 19 20 21 24 26 28 31 32 b 33 1 0 3 4 6 8 11 13 14 15 18 19 20 22 23 26 29 31 32 # 21197 intersection c a 33 0 1 e b 33 0 1 e # 21198 intersection c a 33 0 1 e b 33 1 1 e # 21199 intersection c a 33 0 1 e b 33 0 1 e # 21200 intersection c a 33 0 1 e b 33 1 1 f # 21201 intersection c a 33 0 1 e b 33 0 1 e # 21202 intersection c a 33 0 1 e b 33 1 1 0 2 3 6 7 8 11 14 15 17 19 20 22 26 28 32 # 21203 intersection c a 33 0 1 f b 33 0 1 f # 21204 intersection c a 33 0 1 f b 33 1 1 e # 21205 intersection c a 33 0 1 f b 33 0 1 f # 21206 intersection c a 33 0 1 f b 33 1 1 f # 21207 intersection c a 33 0 1 f b 33 0 1 f # 21208 intersection c a 33 0 1 f b 33 1 1 3 5 6 7 10 13 14 19 21 23 26 27 28 30 31 32 # 21209 intersection c a 33 0 1 1 2 5 7 8 9 12 13 14 18 20 21 22 25 26 27 28 29 31 32 b 33 0 1 1 2 5 7 8 9 12 13 14 18 20 21 22 25 26 27 28 29 31 32 # 21210 intersection c a 33 0 1 1 2 5 7 8 9 12 13 14 18 20 21 22 25 26 27 28 29 31 32 b 33 1 1 e # 21211 intersection c a 33 0 1 4 6 7 8 11 13 15 21 22 23 24 26 27 28 29 32 b 33 0 1 4 6 7 8 11 13 15 21 22 23 24 26 27 28 29 32 # 21212 intersection c a 33 0 1 4 6 7 8 11 13 15 21 22 23 24 26 27 28 29 32 b 33 1 1 f # 21213 intersection c a 33 0 1 0 1 2 3 4 6 8 11 12 16 23 25 26 27 30 32 b 33 0 1 0 1 2 3 4 6 8 11 12 16 23 25 26 27 30 32 # 21214 intersection c a 33 0 1 0 1 2 3 4 6 8 11 12 16 23 25 26 27 30 32 b 33 1 1 0 2 4 5 9 11 15 16 17 18 21 22 25 26 27 28 29 30 # 21215 intersection c a 33 1 0 e b 33 1 0 e # 21216 intersection c a 33 1 0 e b 33 0 0 e # 21217 intersection c a 33 1 0 e b 33 1 0 e # 21218 intersection c a 33 1 0 e b 33 0 0 f # 21219 intersection c a 33 1 0 e b 33 1 0 e # 21220 intersection c a 33 1 0 e b 33 0 0 1 4 5 6 7 8 9 13 16 17 19 20 21 25 28 29 30 # 21221 intersection c a 33 1 0 f b 33 1 0 f # 21222 intersection c a 33 1 0 f b 33 0 0 e # 21223 intersection c a 33 1 0 f b 33 1 0 f # 21224 intersection c a 33 1 0 f b 33 0 0 f # 21225 intersection c a 33 1 0 f b 33 1 0 f # 21226 intersection c a 33 1 0 f b 33 0 0 0 1 3 4 6 8 10 11 12 13 14 15 20 21 22 23 27 28 29 31 # 21227 intersection c a 33 1 0 0 1 5 7 9 12 14 16 18 19 20 21 22 25 27 32 b 33 1 0 0 1 5 7 9 12 14 16 18 19 20 21 22 25 27 32 # 21228 intersection c a 33 1 0 0 1 5 7 9 12 14 16 18 19 20 21 22 25 27 32 b 33 0 0 e # 21229 intersection c a 33 1 0 0 1 6 8 10 11 14 15 18 19 21 26 28 b 33 1 0 0 1 6 8 10 11 14 15 18 19 21 26 28 # 21230 intersection c a 33 1 0 0 1 6 8 10 11 14 15 18 19 21 26 28 b 33 0 0 f # 21231 intersection c a 33 1 0 0 1 2 4 5 6 8 9 10 12 13 18 20 22 23 26 27 28 31 b 33 1 0 0 1 2 4 5 6 8 9 10 12 13 18 20 22 23 26 27 28 31 # 21232 intersection c a 33 1 0 0 1 2 4 5 6 8 9 10 12 13 18 20 22 23 26 27 28 31 b 33 0 0 0 1 3 4 5 6 7 8 10 12 13 14 16 18 19 21 24 25 27 29 32 # 21233 intersection c a 33 1 0 e b 33 1 0 e # 21234 intersection c a 33 1 0 e b 33 0 1 e # 21235 intersection c a 33 1 0 e b 33 1 0 e # 21236 intersection c a 33 1 0 e b 33 0 1 f # 21237 intersection c a 33 1 0 e b 33 1 0 e # 21238 intersection c a 33 1 0 e b 33 0 1 2 5 6 8 11 15 20 21 23 24 26 27 30 31 # 21239 intersection c a 33 1 0 f b 33 1 0 f # 21240 intersection c a 33 1 0 f b 33 0 1 e # 21241 intersection c a 33 1 0 f b 33 1 0 f # 21242 intersection c a 33 1 0 f b 33 0 1 f # 21243 intersection c a 33 1 0 f b 33 1 0 f # 21244 intersection c a 33 1 0 f b 33 0 1 0 2 3 6 7 11 12 17 21 24 26 29 30 # 21245 intersection c a 33 1 0 3 4 11 12 13 15 18 20 23 30 31 32 b 33 1 0 3 4 11 12 13 15 18 20 23 30 31 32 # 21246 intersection c a 33 1 0 3 4 11 12 13 15 18 20 23 30 31 32 b 33 0 1 e # 21247 intersection c a 33 1 0 2 4 6 7 8 9 10 11 12 14 19 23 25 27 28 29 30 31 b 33 1 0 2 4 6 7 8 9 10 11 12 14 19 23 25 27 28 29 30 31 # 21248 intersection c a 33 1 0 2 4 6 7 8 9 10 11 12 14 19 23 25 27 28 29 30 31 b 33 0 1 f # 21249 intersection c a 33 1 0 3 8 13 14 16 17 18 21 22 25 30 31 32 b 33 1 0 3 8 13 14 16 17 18 21 22 25 30 31 32 # 21250 intersection c a 33 1 0 3 8 13 14 16 17 18 21 22 25 30 31 32 b 33 0 1 0 1 8 9 10 12 15 17 21 24 25 26 29 30 # 21251 intersection c a 33 1 0 e b 33 1 0 e # 21252 intersection c a 33 1 0 e b 33 1 0 e # 21253 intersection c a 33 1 0 e b 33 1 0 e # 21254 intersection c a 33 1 0 e b 33 1 0 f # 21255 intersection c a 33 1 0 e b 33 1 0 e # 21256 intersection c a 33 1 0 e b 33 1 0 1 2 3 4 7 8 9 17 18 21 23 24 29 30 31 32 # 21257 intersection c a 33 1 0 f b 33 1 0 f # 21258 intersection c a 33 1 0 f b 33 1 0 e # 21259 intersection c a 33 1 0 f b 33 1 0 f # 21260 intersection c a 33 1 0 f b 33 1 0 f # 21261 intersection c a 33 1 0 f b 33 1 0 f # 21262 intersection c a 33 1 0 f b 33 1 0 0 2 3 4 6 7 8 12 13 14 17 18 21 23 25 28 29 30 # 21263 intersection c a 33 1 0 0 7 8 11 13 16 17 20 22 23 25 28 29 30 31 b 33 1 0 0 7 8 11 13 16 17 20 22 23 25 28 29 30 31 # 21264 intersection c a 33 1 0 0 7 8 11 13 16 17 20 22 23 25 28 29 30 31 b 33 1 0 e # 21265 intersection c a 33 1 0 1 2 3 5 6 7 9 10 12 14 15 16 18 19 24 25 27 28 29 32 b 33 1 0 1 2 3 5 6 7 9 10 12 14 15 16 18 19 24 25 27 28 29 32 # 21266 intersection c a 33 1 0 1 2 3 5 6 7 9 10 12 14 15 16 18 19 24 25 27 28 29 32 b 33 1 0 f # 21267 intersection c a 33 1 0 5 8 9 12 13 14 16 17 21 24 27 28 29 30 b 33 1 0 5 8 9 12 13 14 16 17 21 24 27 28 29 30 # 21268 intersection c a 33 1 0 5 8 9 12 13 14 16 17 21 24 27 28 29 30 b 33 1 0 2 4 7 13 18 19 20 22 23 24 25 26 27 28 29 # 21269 intersection c a 33 1 0 e b 33 1 0 e # 21270 intersection c a 33 1 0 e b 33 1 1 e # 21271 intersection c a 33 1 0 e b 33 1 0 e # 21272 intersection c a 33 1 0 e b 33 1 1 f # 21273 intersection c a 33 1 0 e b 33 1 0 e # 21274 intersection c a 33 1 0 e b 33 1 1 3 4 8 9 10 12 14 17 19 20 22 23 24 25 26 27 29 31 # 21275 intersection c a 33 1 0 f b 33 1 0 f # 21276 intersection c a 33 1 0 f b 33 1 1 e # 21277 intersection c a 33 1 0 f b 33 1 0 f # 21278 intersection c a 33 1 0 f b 33 1 1 f # 21279 intersection c a 33 1 0 f b 33 1 0 f # 21280 intersection c a 33 1 0 f b 33 1 1 0 4 6 13 14 15 18 23 28 29 30 31 # 21281 intersection c a 33 1 0 0 5 6 7 10 12 13 16 17 18 21 23 24 25 26 27 29 b 33 1 0 0 5 6 7 10 12 13 16 17 18 21 23 24 25 26 27 29 # 21282 intersection c a 33 1 0 0 5 6 7 10 12 13 16 17 18 21 23 24 25 26 27 29 b 33 1 1 e # 21283 intersection c a 33 1 0 0 1 4 6 7 9 10 14 18 19 20 21 22 24 25 26 27 b 33 1 0 0 1 4 6 7 9 10 14 18 19 20 21 22 24 25 26 27 # 21284 intersection c a 33 1 0 0 1 4 6 7 9 10 14 18 19 20 21 22 24 25 26 27 b 33 1 1 f # 21285 intersection c a 33 1 0 0 1 3 10 11 14 15 17 20 21 23 24 28 29 30 b 33 1 0 0 1 3 10 11 14 15 17 20 21 23 24 28 29 30 # 21286 intersection c a 33 1 0 0 1 3 10 11 14 15 17 20 21 23 24 28 29 30 b 33 1 1 2 4 6 10 11 16 17 19 22 23 24 26 27 31 32 # 21287 intersection c a 33 1 1 e b 33 1 1 e # 21288 intersection c a 33 1 1 e b 33 0 0 e # 21289 intersection c a 33 1 1 e b 33 1 1 e # 21290 intersection c a 33 1 1 e b 33 0 0 f # 21291 intersection c a 33 1 1 e b 33 1 1 e # 21292 intersection c a 33 1 1 e b 33 0 0 3 4 5 10 11 12 14 15 16 17 20 24 26 29 30 31 32 # 21293 intersection c a 33 1 1 f b 33 1 1 f # 21294 intersection c a 33 1 1 f b 33 0 0 e # 21295 intersection c a 33 1 1 f b 33 1 1 f # 21296 intersection c a 33 1 1 f b 33 0 0 f # 21297 intersection c a 33 1 1 f b 33 1 1 f # 21298 intersection c a 33 1 1 f b 33 0 0 2 4 6 7 9 10 11 12 14 15 16 18 19 20 22 26 27 30 31 32 # 21299 intersection c a 33 1 1 0 1 2 4 5 6 9 11 12 13 14 16 17 19 20 21 23 27 29 30 32 b 33 1 1 0 1 2 4 5 6 9 11 12 13 14 16 17 19 20 21 23 27 29 30 32 # 21300 intersection c a 33 1 1 0 1 2 4 5 6 9 11 12 13 14 16 17 19 20 21 23 27 29 30 32 b 33 0 0 e # 21301 intersection c a 33 1 1 0 1 2 4 6 7 9 10 12 16 22 23 25 26 28 31 32 b 33 1 1 0 1 2 4 6 7 9 10 12 16 22 23 25 26 28 31 32 # 21302 intersection c a 33 1 1 0 1 2 4 6 7 9 10 12 16 22 23 25 26 28 31 32 b 33 0 0 f # 21303 intersection c a 33 1 1 2 6 10 12 15 16 17 19 20 23 25 26 31 32 b 33 1 1 2 6 10 12 15 16 17 19 20 23 25 26 31 32 # 21304 intersection c a 33 1 1 2 6 10 12 15 16 17 19 20 23 25 26 31 32 b 33 0 0 2 3 6 7 11 12 16 20 21 23 24 25 30 31 # 21305 intersection c a 33 1 1 e b 33 1 1 e # 21306 intersection c a 33 1 1 e b 33 0 1 e # 21307 intersection c a 33 1 1 e b 33 1 1 e # 21308 intersection c a 33 1 1 e b 33 0 1 f # 21309 intersection c a 33 1 1 e b 33 1 1 e # 21310 intersection c a 33 1 1 e b 33 0 1 0 2 7 8 10 12 17 24 26 27 32 # 21311 intersection c a 33 1 1 f b 33 1 1 f # 21312 intersection c a 33 1 1 f b 33 0 1 e # 21313 intersection c a 33 1 1 f b 33 1 1 f # 21314 intersection c a 33 1 1 f b 33 0 1 f # 21315 intersection c a 33 1 1 f b 33 1 1 f # 21316 intersection c a 33 1 1 f b 33 0 1 1 3 6 12 14 16 18 19 20 21 22 24 25 26 32 # 21317 intersection c a 33 1 1 0 4 5 8 9 10 12 20 22 23 26 32 b 33 1 1 0 4 5 8 9 10 12 20 22 23 26 32 # 21318 intersection c a 33 1 1 0 4 5 8 9 10 12 20 22 23 26 32 b 33 0 1 e # 21319 intersection c a 33 1 1 0 2 4 5 7 8 9 10 14 16 17 20 25 26 27 29 b 33 1 1 0 2 4 5 7 8 9 10 14 16 17 20 25 26 27 29 # 21320 intersection c a 33 1 1 0 2 4 5 7 8 9 10 14 16 17 20 25 26 27 29 b 33 0 1 f # 21321 intersection c a 33 1 1 1 9 11 13 14 17 19 21 22 25 26 30 32 b 33 1 1 1 9 11 13 14 17 19 21 22 25 26 30 32 # 21322 intersection c a 33 1 1 1 9 11 13 14 17 19 21 22 25 26 30 32 b 33 0 1 1 3 4 7 8 11 13 18 19 23 25 28 29 # 21323 intersection c a 33 1 1 e b 33 1 1 e # 21324 intersection c a 33 1 1 e b 33 1 0 e # 21325 intersection c a 33 1 1 e b 33 1 1 e # 21326 intersection c a 33 1 1 e b 33 1 0 f # 21327 intersection c a 33 1 1 e b 33 1 1 e # 21328 intersection c a 33 1 1 e b 33 1 0 0 4 10 12 13 15 16 19 20 23 25 26 30 31 32 # 21329 intersection c a 33 1 1 f b 33 1 1 f # 21330 intersection c a 33 1 1 f b 33 1 0 e # 21331 intersection c a 33 1 1 f b 33 1 1 f # 21332 intersection c a 33 1 1 f b 33 1 0 f # 21333 intersection c a 33 1 1 f b 33 1 1 f # 21334 intersection c a 33 1 1 f b 33 1 0 2 6 7 12 14 16 17 19 23 25 27 30 31 # 21335 intersection c a 33 1 1 0 2 5 9 11 12 15 16 18 19 20 21 23 25 28 29 30 b 33 1 1 0 2 5 9 11 12 15 16 18 19 20 21 23 25 28 29 30 # 21336 intersection c a 33 1 1 0 2 5 9 11 12 15 16 18 19 20 21 23 25 28 29 30 b 33 1 0 e # 21337 intersection c a 33 1 1 0 1 3 5 6 7 9 10 11 15 18 20 22 23 24 27 29 30 32 b 33 1 1 0 1 3 5 6 7 9 10 11 15 18 20 22 23 24 27 29 30 32 # 21338 intersection c a 33 1 1 0 1 3 5 6 7 9 10 11 15 18 20 22 23 24 27 29 30 32 b 33 1 0 f # 21339 intersection c a 33 1 1 1 2 4 5 6 7 8 10 12 13 14 19 20 21 22 29 31 32 b 33 1 1 1 2 4 5 6 7 8 10 12 13 14 19 20 21 22 29 31 32 # 21340 intersection c a 33 1 1 1 2 4 5 6 7 8 10 12 13 14 19 20 21 22 29 31 32 b 33 1 0 2 6 7 10 12 14 17 22 23 24 27 28 31 32 # 21341 intersection c a 33 1 1 e b 33 1 1 e # 21342 intersection c a 33 1 1 e b 33 1 1 e # 21343 intersection c a 33 1 1 e b 33 1 1 e # 21344 intersection c a 33 1 1 e b 33 1 1 f # 21345 intersection c a 33 1 1 e b 33 1 1 e # 21346 intersection c a 33 1 1 e b 33 1 1 3 5 8 11 13 15 16 17 20 24 28 31 # 21347 intersection c a 33 1 1 f b 33 1 1 f # 21348 intersection c a 33 1 1 f b 33 1 1 e # 21349 intersection c a 33 1 1 f b 33 1 1 f # 21350 intersection c a 33 1 1 f b 33 1 1 f # 21351 intersection c a 33 1 1 f b 33 1 1 f # 21352 intersection c a 33 1 1 f b 33 1 1 0 1 2 3 4 8 10 12 13 15 17 18 19 22 23 24 27 28 # 21353 intersection c a 33 1 1 4 5 9 18 19 20 24 26 28 30 32 b 33 1 1 4 5 9 18 19 20 24 26 28 30 32 # 21354 intersection c a 33 1 1 4 5 9 18 19 20 24 26 28 30 32 b 33 1 1 e # 21355 intersection c a 33 1 1 0 1 3 4 5 7 8 10 12 16 20 25 27 28 30 31 b 33 1 1 0 1 3 4 5 7 8 10 12 16 20 25 27 28 30 31 # 21356 intersection c a 33 1 1 0 1 3 4 5 7 8 10 12 16 20 25 27 28 30 31 b 33 1 1 f # 21357 intersection c a 33 1 1 3 4 5 6 8 12 15 16 17 18 21 22 25 26 27 29 30 31 b 33 1 1 3 4 5 6 8 12 15 16 17 18 21 22 25 26 27 29 30 31 # 21358 intersection c a 33 1 1 3 4 5 6 8 12 15 16 17 18 21 22 25 26 27 29 30 31 b 33 1 1 1 2 4 7 10 11 12 13 14 17 18 20 21 22 24 26 27 29 30 31 # 21359 intersection c a 63 0 0 e b 63 0 0 e # 21360 intersection c a 63 0 0 e b 63 0 0 e # 21361 intersection c a 63 0 0 e b 63 0 0 e # 21362 intersection c a 63 0 0 e b 63 0 0 f # 21363 intersection c a 63 0 0 e b 63 0 0 e # 21364 intersection c a 63 0 0 e b 63 0 0 0 1 6 7 8 9 11 13 16 17 19 21 22 23 24 30 34 41 43 44 51 53 54 55 59 # 21365 intersection c a 63 0 0 f b 63 0 0 f # 21366 intersection c a 63 0 0 f b 63 0 0 e # 21367 intersection c a 63 0 0 f b 63 0 0 f # 21368 intersection c a 63 0 0 f b 63 0 0 f # 21369 intersection c a 63 0 0 f b 63 0 0 f # 21370 intersection c a 63 0 0 f b 63 0 0 0 1 5 7 8 10 11 12 14 16 18 20 21 23 28 29 30 31 33 34 35 36 39 40 43 44 47 48 49 51 52 55 56 57 59 61 62 # 21371 intersection c a 63 0 0 0 1 2 3 4 8 9 10 11 12 14 17 18 20 22 23 26 28 29 30 31 32 33 34 35 36 37 39 40 42 44 45 46 48 49 52 56 59 62 b 63 0 0 0 1 2 3 4 8 9 10 11 12 14 17 18 20 22 23 26 28 29 30 31 32 33 34 35 36 37 39 40 42 44 45 46 48 49 52 56 59 62 # 21372 intersection c a 63 0 0 0 1 2 3 4 8 9 10 11 12 14 17 18 20 22 23 26 28 29 30 31 32 33 34 35 36 37 39 40 42 44 45 46 48 49 52 56 59 62 b 63 0 0 e # 21373 intersection c a 63 0 0 3 10 11 13 14 18 19 23 24 27 28 29 31 32 33 34 39 40 43 47 48 50 52 53 54 55 60 61 b 63 0 0 3 10 11 13 14 18 19 23 24 27 28 29 31 32 33 34 39 40 43 47 48 50 52 53 54 55 60 61 # 21374 intersection c a 63 0 0 3 10 11 13 14 18 19 23 24 27 28 29 31 32 33 34 39 40 43 47 48 50 52 53 54 55 60 61 b 63 0 0 f # 21375 intersection c a 63 0 0 0 1 6 10 13 14 16 18 19 20 21 22 23 27 30 35 36 38 39 41 43 44 45 54 55 56 59 b 63 0 0 0 1 6 10 13 14 16 18 19 20 21 22 23 27 30 35 36 38 39 41 43 44 45 54 55 56 59 # 21376 intersection c a 63 0 0 0 1 6 10 13 14 16 18 19 20 21 22 23 27 30 35 36 38 39 41 43 44 45 54 55 56 59 b 63 0 0 0 1 2 5 10 12 13 14 16 17 18 23 28 29 31 32 37 38 39 40 43 45 48 52 53 57 60 61 62 # 21377 intersection c a 63 0 0 e b 63 0 0 e # 21378 intersection c a 63 0 0 e b 63 0 1 e # 21379 intersection c a 63 0 0 e b 63 0 0 e # 21380 intersection c a 63 0 0 e b 63 0 1 f # 21381 intersection c a 63 0 0 e b 63 0 0 e # 21382 intersection c a 63 0 0 e b 63 0 1 3 5 8 9 11 17 18 19 20 21 22 24 25 26 29 31 32 34 38 44 45 46 48 49 50 51 52 53 55 56 57 58 60 # 21383 intersection c a 63 0 0 f b 63 0 0 f # 21384 intersection c a 63 0 0 f b 63 0 1 e # 21385 intersection c a 63 0 0 f b 63 0 0 f # 21386 intersection c a 63 0 0 f b 63 0 1 f # 21387 intersection c a 63 0 0 f b 63 0 0 f # 21388 intersection c a 63 0 0 f b 63 0 1 0 1 2 6 7 11 12 14 17 20 24 29 31 35 36 41 44 46 49 51 53 57 59 60 61 62 # 21389 intersection c a 63 0 0 2 3 8 10 13 14 17 18 21 22 25 26 29 30 31 33 34 35 39 41 43 44 54 55 56 57 58 60 61 b 63 0 0 2 3 8 10 13 14 17 18 21 22 25 26 29 30 31 33 34 35 39 41 43 44 54 55 56 57 58 60 61 # 21390 intersection c a 63 0 0 2 3 8 10 13 14 17 18 21 22 25 26 29 30 31 33 34 35 39 41 43 44 54 55 56 57 58 60 61 b 63 0 1 e # 21391 intersection c a 63 0 0 1 2 8 13 14 15 16 17 23 26 27 29 31 32 37 41 42 43 44 47 49 51 53 54 55 57 58 59 60 61 62 b 63 0 0 1 2 8 13 14 15 16 17 23 26 27 29 31 32 37 41 42 43 44 47 49 51 53 54 55 57 58 59 60 61 62 # 21392 intersection c a 63 0 0 1 2 8 13 14 15 16 17 23 26 27 29 31 32 37 41 42 43 44 47 49 51 53 54 55 57 58 59 60 61 62 b 63 0 1 f # 21393 intersection c a 63 0 0 0 2 3 4 5 7 8 10 11 15 16 17 21 23 25 26 27 28 29 30 32 33 35 37 38 43 44 46 49 50 51 52 54 59 61 b 63 0 0 0 2 3 4 5 7 8 10 11 15 16 17 21 23 25 26 27 28 29 30 32 33 35 37 38 43 44 46 49 50 51 52 54 59 61 # 21394 intersection c a 63 0 0 0 2 3 4 5 7 8 10 11 15 16 17 21 23 25 26 27 28 29 30 32 33 35 37 38 43 44 46 49 50 51 52 54 59 61 b 63 0 1 1 2 3 5 6 7 10 12 14 16 17 19 20 21 24 25 27 39 44 46 47 53 56 57 61 62 # 21395 intersection c a 63 0 0 e b 63 0 0 e # 21396 intersection c a 63 0 0 e b 63 1 0 e # 21397 intersection c a 63 0 0 e b 63 0 0 e # 21398 intersection c a 63 0 0 e b 63 1 0 f # 21399 intersection c a 63 0 0 e b 63 0 0 e # 21400 intersection c a 63 0 0 e b 63 1 0 0 4 7 8 9 10 17 18 19 21 24 26 27 28 30 32 33 34 40 42 46 47 50 51 53 55 57 58 59 61 # 21401 intersection c a 63 0 0 f b 63 0 0 f # 21402 intersection c a 63 0 0 f b 63 1 0 e # 21403 intersection c a 63 0 0 f b 63 0 0 f # 21404 intersection c a 63 0 0 f b 63 1 0 f # 21405 intersection c a 63 0 0 f b 63 0 0 f # 21406 intersection c a 63 0 0 f b 63 1 0 1 3 6 7 10 11 12 14 15 16 22 24 25 27 32 36 38 41 44 46 47 51 52 53 55 56 57 59 61 # 21407 intersection c a 63 0 0 2 5 7 11 14 15 16 19 23 24 27 28 31 35 37 39 41 49 51 52 53 54 55 58 59 62 b 63 0 0 2 5 7 11 14 15 16 19 23 24 27 28 31 35 37 39 41 49 51 52 53 54 55 58 59 62 # 21408 intersection c a 63 0 0 2 5 7 11 14 15 16 19 23 24 27 28 31 35 37 39 41 49 51 52 53 54 55 58 59 62 b 63 1 0 e # 21409 intersection c a 63 0 0 0 1 3 4 7 8 9 14 16 18 19 24 25 27 29 30 32 34 35 36 41 42 46 48 49 50 54 55 58 62 b 63 0 0 0 1 3 4 7 8 9 14 16 18 19 24 25 27 29 30 32 34 35 36 41 42 46 48 49 50 54 55 58 62 # 21410 intersection c a 63 0 0 0 1 3 4 7 8 9 14 16 18 19 24 25 27 29 30 32 34 35 36 41 42 46 48 49 50 54 55 58 62 b 63 1 0 f # 21411 intersection c a 63 0 0 1 2 3 5 7 10 11 14 15 18 19 20 22 23 27 28 29 30 31 32 34 39 40 41 46 48 49 52 53 57 59 60 62 b 63 0 0 1 2 3 5 7 10 11 14 15 18 19 20 22 23 27 28 29 30 31 32 34 39 40 41 46 48 49 52 53 57 59 60 62 # 21412 intersection c a 63 0 0 1 2 3 5 7 10 11 14 15 18 19 20 22 23 27 28 29 30 31 32 34 39 40 41 46 48 49 52 53 57 59 60 62 b 63 1 0 1 2 3 6 7 9 13 15 18 19 21 23 25 28 34 36 37 39 40 41 44 45 46 49 52 60 61 # 21413 intersection c a 63 0 0 e b 63 0 0 e # 21414 intersection c a 63 0 0 e b 63 1 1 e # 21415 intersection c a 63 0 0 e b 63 0 0 e # 21416 intersection c a 63 0 0 e b 63 1 1 f # 21417 intersection c a 63 0 0 e b 63 0 0 e # 21418 intersection c a 63 0 0 e b 63 1 1 1 3 4 7 11 12 14 17 19 20 21 23 25 27 28 31 33 34 35 37 38 39 41 47 48 49 50 51 52 53 54 56 # 21419 intersection c a 63 0 0 f b 63 0 0 f # 21420 intersection c a 63 0 0 f b 63 1 1 e # 21421 intersection c a 63 0 0 f b 63 0 0 f # 21422 intersection c a 63 0 0 f b 63 1 1 f # 21423 intersection c a 63 0 0 f b 63 0 0 f # 21424 intersection c a 63 0 0 f b 63 1 1 0 3 10 11 12 13 16 19 23 24 25 26 30 31 32 34 39 40 42 45 46 50 58 60 61 # 21425 intersection c a 63 0 0 3 4 7 11 12 14 15 16 17 18 23 24 25 26 29 30 31 33 34 35 37 38 39 44 50 51 52 54 56 57 58 60 b 63 0 0 3 4 7 11 12 14 15 16 17 18 23 24 25 26 29 30 31 33 34 35 37 38 39 44 50 51 52 54 56 57 58 60 # 21426 intersection c a 63 0 0 3 4 7 11 12 14 15 16 17 18 23 24 25 26 29 30 31 33 34 35 37 38 39 44 50 51 52 54 56 57 58 60 b 63 1 1 e # 21427 intersection c a 63 0 0 0 3 4 6 7 8 9 11 12 16 18 23 25 27 28 29 31 34 36 44 45 47 52 55 57 58 60 61 62 b 63 0 0 0 3 4 6 7 8 9 11 12 16 18 23 25 27 28 29 31 34 36 44 45 47 52 55 57 58 60 61 62 # 21428 intersection c a 63 0 0 0 3 4 6 7 8 9 11 12 16 18 23 25 27 28 29 31 34 36 44 45 47 52 55 57 58 60 61 62 b 63 1 1 f # 21429 intersection c a 63 0 0 2 3 6 7 8 11 13 17 19 20 21 22 23 25 27 30 31 32 36 38 40 45 46 48 51 55 56 57 b 63 0 0 2 3 6 7 8 11 13 17 19 20 21 22 23 25 27 30 31 32 36 38 40 45 46 48 51 55 56 57 # 21430 intersection c a 63 0 0 2 3 6 7 8 11 13 17 19 20 21 22 23 25 27 30 31 32 36 38 40 45 46 48 51 55 56 57 b 63 1 1 1 2 3 6 7 9 11 15 17 18 20 22 23 25 27 30 31 33 35 36 38 42 44 54 55 56 60 62 # 21431 intersection c a 63 0 1 e b 63 0 1 e # 21432 intersection c a 63 0 1 e b 63 0 0 e # 21433 intersection c a 63 0 1 e b 63 0 1 e # 21434 intersection c a 63 0 1 e b 63 0 0 f # 21435 intersection c a 63 0 1 e b 63 0 1 e # 21436 intersection c a 63 0 1 e b 63 0 0 0 3 5 8 9 13 14 15 17 25 26 27 30 35 36 37 39 41 43 44 46 47 49 51 53 54 55 56 57 58 60 62 # 21437 intersection c a 63 0 1 f b 63 0 1 f # 21438 intersection c a 63 0 1 f b 63 0 0 e # 21439 intersection c a 63 0 1 f b 63 0 1 f # 21440 intersection c a 63 0 1 f b 63 0 0 f # 21441 intersection c a 63 0 1 f b 63 0 1 f # 21442 intersection c a 63 0 1 f b 63 0 0 1 2 4 5 7 12 14 15 16 17 29 31 34 36 38 40 43 44 46 50 51 52 55 56 57 59 61 62 # 21443 intersection c a 63 0 1 0 1 2 4 8 10 11 15 16 17 18 19 24 25 26 27 29 30 32 34 35 36 37 38 39 41 43 44 45 47 48 53 54 56 57 62 b 63 0 1 0 1 2 4 8 10 11 15 16 17 18 19 24 25 26 27 29 30 32 34 35 36 37 38 39 41 43 44 45 47 48 53 54 56 57 62 # 21444 intersection c a 63 0 1 0 1 2 4 8 10 11 15 16 17 18 19 24 25 26 27 29 30 32 34 35 36 37 38 39 41 43 44 45 47 48 53 54 56 57 62 b 63 0 0 e # 21445 intersection c a 63 0 1 1 3 6 8 9 10 11 12 13 18 19 20 21 26 27 28 31 32 33 34 37 38 40 46 47 48 49 51 52 53 58 59 60 62 b 63 0 1 1 3 6 8 9 10 11 12 13 18 19 20 21 26 27 28 31 32 33 34 37 38 40 46 47 48 49 51 52 53 58 59 60 62 # 21446 intersection c a 63 0 1 1 3 6 8 9 10 11 12 13 18 19 20 21 26 27 28 31 32 33 34 37 38 40 46 47 48 49 51 52 53 58 59 60 62 b 63 0 0 f # 21447 intersection c a 63 0 1 0 2 4 5 6 8 10 12 18 20 21 22 28 29 31 34 37 38 39 44 46 47 48 49 51 52 53 54 55 60 62 b 63 0 1 0 2 4 5 6 8 10 12 18 20 21 22 28 29 31 34 37 38 39 44 46 47 48 49 51 52 53 54 55 60 62 # 21448 intersection c a 63 0 1 0 2 4 5 6 8 10 12 18 20 21 22 28 29 31 34 37 38 39 44 46 47 48 49 51 52 53 54 55 60 62 b 63 0 0 1 2 4 5 7 9 11 13 18 20 21 23 24 29 31 39 41 43 45 47 49 52 55 56 58 # 21449 intersection c a 63 0 1 e b 63 0 1 e # 21450 intersection c a 63 0 1 e b 63 0 1 e # 21451 intersection c a 63 0 1 e b 63 0 1 e # 21452 intersection c a 63 0 1 e b 63 0 1 f # 21453 intersection c a 63 0 1 e b 63 0 1 e # 21454 intersection c a 63 0 1 e b 63 0 1 0 4 5 6 10 11 12 13 15 20 21 22 23 24 26 29 33 36 38 40 41 43 44 46 47 48 49 51 52 58 59 # 21455 intersection c a 63 0 1 f b 63 0 1 f # 21456 intersection c a 63 0 1 f b 63 0 1 e # 21457 intersection c a 63 0 1 f b 63 0 1 f # 21458 intersection c a 63 0 1 f b 63 0 1 f # 21459 intersection c a 63 0 1 f b 63 0 1 f # 21460 intersection c a 63 0 1 f b 63 0 1 0 2 3 5 6 8 10 16 18 19 20 21 28 30 32 35 40 42 43 45 49 52 54 56 57 58 59 61 # 21461 intersection c a 63 0 1 2 4 5 6 7 8 9 10 11 13 14 15 16 17 20 21 22 24 25 30 31 34 37 40 41 42 44 45 47 48 50 51 53 55 56 57 b 63 0 1 2 4 5 6 7 8 9 10 11 13 14 15 16 17 20 21 22 24 25 30 31 34 37 40 41 42 44 45 47 48 50 51 53 55 56 57 # 21462 intersection c a 63 0 1 2 4 5 6 7 8 9 10 11 13 14 15 16 17 20 21 22 24 25 30 31 34 37 40 41 42 44 45 47 48 50 51 53 55 56 57 b 63 0 1 e # 21463 intersection c a 63 0 1 0 1 3 5 8 11 12 15 17 18 20 21 22 23 24 25 29 31 33 34 35 36 41 45 47 49 52 57 58 60 b 63 0 1 0 1 3 5 8 11 12 15 17 18 20 21 22 23 24 25 29 31 33 34 35 36 41 45 47 49 52 57 58 60 # 21464 intersection c a 63 0 1 0 1 3 5 8 11 12 15 17 18 20 21 22 23 24 25 29 31 33 34 35 36 41 45 47 49 52 57 58 60 b 63 0 1 f # 21465 intersection c a 63 0 1 1 3 4 5 9 10 11 14 15 16 17 20 22 24 25 26 28 30 31 34 35 36 41 42 45 48 49 50 51 53 54 55 56 57 59 61 62 b 63 0 1 1 3 4 5 9 10 11 14 15 16 17 20 22 24 25 26 28 30 31 34 35 36 41 42 45 48 49 50 51 53 54 55 56 57 59 61 62 # 21466 intersection c a 63 0 1 1 3 4 5 9 10 11 14 15 16 17 20 22 24 25 26 28 30 31 34 35 36 41 42 45 48 49 50 51 53 54 55 56 57 59 61 62 b 63 0 1 2 5 6 9 11 15 17 18 21 24 31 32 33 35 36 40 41 42 46 47 49 54 56 58 60 61 # 21467 intersection c a 63 0 1 e b 63 0 1 e # 21468 intersection c a 63 0 1 e b 63 1 0 e # 21469 intersection c a 63 0 1 e b 63 0 1 e # 21470 intersection c a 63 0 1 e b 63 1 0 f # 21471 intersection c a 63 0 1 e b 63 0 1 e # 21472 intersection c a 63 0 1 e b 63 1 0 1 2 4 5 6 8 9 16 17 18 22 23 24 28 34 37 38 40 41 45 46 48 49 52 54 55 56 59 60 61 # 21473 intersection c a 63 0 1 f b 63 0 1 f # 21474 intersection c a 63 0 1 f b 63 1 0 e # 21475 intersection c a 63 0 1 f b 63 0 1 f # 21476 intersection c a 63 0 1 f b 63 1 0 f # 21477 intersection c a 63 0 1 f b 63 0 1 f # 21478 intersection c a 63 0 1 f b 63 1 0 1 3 6 9 10 11 13 14 18 19 22 26 27 31 34 35 36 39 42 44 46 48 49 53 54 55 57 58 61 # 21479 intersection c a 63 0 1 0 2 6 8 9 10 12 18 19 20 21 22 24 25 28 30 31 32 33 35 37 39 40 43 44 48 52 54 55 56 59 62 b 63 0 1 0 2 6 8 9 10 12 18 19 20 21 22 24 25 28 30 31 32 33 35 37 39 40 43 44 48 52 54 55 56 59 62 # 21480 intersection c a 63 0 1 0 2 6 8 9 10 12 18 19 20 21 22 24 25 28 30 31 32 33 35 37 39 40 43 44 48 52 54 55 56 59 62 b 63 1 0 e # 21481 intersection c a 63 0 1 1 2 5 8 9 11 13 15 16 17 18 20 23 28 30 33 35 36 37 38 39 40 42 46 49 51 53 54 57 58 61 b 63 0 1 1 2 5 8 9 11 13 15 16 17 18 20 23 28 30 33 35 36 37 38 39 40 42 46 49 51 53 54 57 58 61 # 21482 intersection c a 63 0 1 1 2 5 8 9 11 13 15 16 17 18 20 23 28 30 33 35 36 37 38 39 40 42 46 49 51 53 54 57 58 61 b 63 1 0 f # 21483 intersection c a 63 0 1 0 1 2 3 4 5 6 7 8 10 11 12 14 15 17 23 27 28 31 32 35 39 42 45 47 48 49 52 53 54 56 59 60 b 63 0 1 0 1 2 3 4 5 6 7 8 10 11 12 14 15 17 23 27 28 31 32 35 39 42 45 47 48 49 52 53 54 56 59 60 # 21484 intersection c a 63 0 1 0 1 2 3 4 5 6 7 8 10 11 12 14 15 17 23 27 28 31 32 35 39 42 45 47 48 49 52 53 54 56 59 60 b 63 1 0 0 1 2 4 6 7 8 10 11 12 13 15 16 17 20 21 24 25 26 27 32 34 35 37 38 40 41 43 44 47 49 52 54 55 57 59 60 61 62 # 21485 intersection c a 63 0 1 e b 63 0 1 e # 21486 intersection c a 63 0 1 e b 63 1 1 e # 21487 intersection c a 63 0 1 e b 63 0 1 e # 21488 intersection c a 63 0 1 e b 63 1 1 f # 21489 intersection c a 63 0 1 e b 63 0 1 e # 21490 intersection c a 63 0 1 e b 63 1 1 0 1 2 3 6 7 9 10 12 14 15 16 21 23 24 27 30 35 36 42 44 47 48 53 57 58 60 61 62 # 21491 intersection c a 63 0 1 f b 63 0 1 f # 21492 intersection c a 63 0 1 f b 63 1 1 e # 21493 intersection c a 63 0 1 f b 63 0 1 f # 21494 intersection c a 63 0 1 f b 63 1 1 f # 21495 intersection c a 63 0 1 f b 63 0 1 f # 21496 intersection c a 63 0 1 f b 63 1 1 2 3 7 9 11 12 13 14 15 16 20 23 24 26 29 30 32 33 37 38 39 40 43 46 48 50 51 52 54 55 57 58 59 61 # 21497 intersection c a 63 0 1 1 2 3 5 6 7 8 11 12 13 14 16 18 19 23 24 26 28 29 30 32 34 37 39 40 41 42 43 44 46 47 48 49 51 53 54 55 57 59 60 b 63 0 1 1 2 3 5 6 7 8 11 12 13 14 16 18 19 23 24 26 28 29 30 32 34 37 39 40 41 42 43 44 46 47 48 49 51 53 54 55 57 59 60 # 21498 intersection c a 63 0 1 1 2 3 5 6 7 8 11 12 13 14 16 18 19 23 24 26 28 29 30 32 34 37 39 40 41 42 43 44 46 47 48 49 51 53 54 55 57 59 60 b 63 1 1 e # 21499 intersection c a 63 0 1 0 1 4 5 7 8 10 11 12 14 15 16 17 19 20 22 23 25 28 29 30 31 33 36 37 39 40 42 43 46 49 55 57 61 b 63 0 1 0 1 4 5 7 8 10 11 12 14 15 16 17 19 20 22 23 25 28 29 30 31 33 36 37 39 40 42 43 46 49 55 57 61 # 21500 intersection c a 63 0 1 0 1 4 5 7 8 10 11 12 14 15 16 17 19 20 22 23 25 28 29 30 31 33 36 37 39 40 42 43 46 49 55 57 61 b 63 1 1 f # 21501 intersection c a 63 0 1 0 1 2 4 6 7 10 12 18 19 22 24 25 30 34 36 37 40 42 43 46 47 49 50 51 52 53 55 57 58 59 61 62 b 63 0 1 0 1 2 4 6 7 10 12 18 19 22 24 25 30 34 36 37 40 42 43 46 47 49 50 51 52 53 55 57 58 59 61 62 # 21502 intersection c a 63 0 1 0 1 2 4 6 7 10 12 18 19 22 24 25 30 34 36 37 40 42 43 46 47 49 50 51 52 53 55 57 58 59 61 62 b 63 1 1 0 2 6 7 9 10 13 17 20 21 22 23 26 28 32 33 34 35 38 39 43 47 49 52 56 57 61 62 # 21503 intersection c a 63 1 0 e b 63 1 0 e # 21504 intersection c a 63 1 0 e b 63 0 0 e # 21505 intersection c a 63 1 0 e b 63 1 0 e # 21506 intersection c a 63 1 0 e b 63 0 0 f # 21507 intersection c a 63 1 0 e b 63 1 0 e # 21508 intersection c a 63 1 0 e b 63 0 0 1 2 6 8 11 12 13 15 17 19 20 21 23 27 28 30 31 32 33 36 39 40 41 43 44 45 46 48 52 53 56 57 59 62 # 21509 intersection c a 63 1 0 f b 63 1 0 f # 21510 intersection c a 63 1 0 f b 63 0 0 e # 21511 intersection c a 63 1 0 f b 63 1 0 f # 21512 intersection c a 63 1 0 f b 63 0 0 f # 21513 intersection c a 63 1 0 f b 63 1 0 f # 21514 intersection c a 63 1 0 f b 63 0 0 2 6 7 8 9 11 12 16 17 18 20 21 22 24 25 26 34 35 37 38 40 43 45 50 53 55 56 61 62 # 21515 intersection c a 63 1 0 0 1 2 3 5 7 8 9 11 13 15 17 18 19 20 21 23 24 27 28 30 31 34 35 38 39 40 41 42 44 45 46 48 49 51 54 56 59 61 62 b 63 1 0 0 1 2 3 5 7 8 9 11 13 15 17 18 19 20 21 23 24 27 28 30 31 34 35 38 39 40 41 42 44 45 46 48 49 51 54 56 59 61 62 # 21516 intersection c a 63 1 0 0 1 2 3 5 7 8 9 11 13 15 17 18 19 20 21 23 24 27 28 30 31 34 35 38 39 40 41 42 44 45 46 48 49 51 54 56 59 61 62 b 63 0 0 e # 21517 intersection c a 63 1 0 0 2 4 5 7 8 15 17 18 19 22 23 25 26 29 34 37 38 44 45 48 52 53 54 56 57 58 60 62 b 63 1 0 0 2 4 5 7 8 15 17 18 19 22 23 25 26 29 34 37 38 44 45 48 52 53 54 56 57 58 60 62 # 21518 intersection c a 63 1 0 0 2 4 5 7 8 15 17 18 19 22 23 25 26 29 34 37 38 44 45 48 52 53 54 56 57 58 60 62 b 63 0 0 f # 21519 intersection c a 63 1 0 3 4 6 7 8 16 17 18 21 23 24 29 30 31 35 36 38 39 42 43 44 47 49 50 51 52 57 58 59 60 61 b 63 1 0 3 4 6 7 8 16 17 18 21 23 24 29 30 31 35 36 38 39 42 43 44 47 49 50 51 52 57 58 59 60 61 # 21520 intersection c a 63 1 0 3 4 6 7 8 16 17 18 21 23 24 29 30 31 35 36 38 39 42 43 44 47 49 50 51 52 57 58 59 60 61 b 63 0 0 0 2 3 6 7 8 10 14 15 16 17 18 22 23 24 25 26 28 30 31 32 33 34 35 37 38 39 41 48 50 52 53 56 58 60 61 # 21521 intersection c a 63 1 0 e b 63 1 0 e # 21522 intersection c a 63 1 0 e b 63 0 1 e # 21523 intersection c a 63 1 0 e b 63 1 0 e # 21524 intersection c a 63 1 0 e b 63 0 1 f # 21525 intersection c a 63 1 0 e b 63 1 0 e # 21526 intersection c a 63 1 0 e b 63 0 1 1 2 5 8 10 12 13 14 16 18 21 22 23 26 27 28 29 32 34 35 36 39 40 41 43 44 47 48 52 54 56 57 59 61 # 21527 intersection c a 63 1 0 f b 63 1 0 f # 21528 intersection c a 63 1 0 f b 63 0 1 e # 21529 intersection c a 63 1 0 f b 63 1 0 f # 21530 intersection c a 63 1 0 f b 63 0 1 f # 21531 intersection c a 63 1 0 f b 63 1 0 f # 21532 intersection c a 63 1 0 f b 63 0 1 1 4 5 7 8 11 13 14 16 18 23 25 27 29 31 32 34 35 38 39 40 42 45 46 48 49 50 53 54 55 56 58 61 # 21533 intersection c a 63 1 0 4 5 7 8 9 15 20 25 27 28 32 37 39 41 43 44 48 49 50 54 55 56 58 59 b 63 1 0 4 5 7 8 9 15 20 25 27 28 32 37 39 41 43 44 48 49 50 54 55 56 58 59 # 21534 intersection c a 63 1 0 4 5 7 8 9 15 20 25 27 28 32 37 39 41 43 44 48 49 50 54 55 56 58 59 b 63 0 1 e # 21535 intersection c a 63 1 0 1 2 3 4 6 7 8 9 11 12 13 15 18 19 20 21 22 23 24 26 27 28 29 31 32 33 34 35 37 38 41 44 48 49 52 55 57 58 60 b 63 1 0 1 2 3 4 6 7 8 9 11 12 13 15 18 19 20 21 22 23 24 26 27 28 29 31 32 33 34 35 37 38 41 44 48 49 52 55 57 58 60 # 21536 intersection c a 63 1 0 1 2 3 4 6 7 8 9 11 12 13 15 18 19 20 21 22 23 24 26 27 28 29 31 32 33 34 35 37 38 41 44 48 49 52 55 57 58 60 b 63 0 1 f # 21537 intersection c a 63 1 0 0 2 4 5 12 13 14 16 17 20 21 23 26 29 30 33 34 35 37 39 41 44 45 48 49 50 52 55 56 57 60 b 63 1 0 0 2 4 5 12 13 14 16 17 20 21 23 26 29 30 33 34 35 37 39 41 44 45 48 49 50 52 55 56 57 60 # 21538 intersection c a 63 1 0 0 2 4 5 12 13 14 16 17 20 21 23 26 29 30 33 34 35 37 39 41 44 45 48 49 50 52 55 56 57 60 b 63 0 1 1 11 12 19 20 22 23 25 28 29 30 32 37 39 41 42 45 46 47 49 55 57 62 # 21539 intersection c a 63 1 0 e b 63 1 0 e # 21540 intersection c a 63 1 0 e b 63 1 0 e # 21541 intersection c a 63 1 0 e b 63 1 0 e # 21542 intersection c a 63 1 0 e b 63 1 0 f # 21543 intersection c a 63 1 0 e b 63 1 0 e # 21544 intersection c a 63 1 0 e b 63 1 0 4 6 7 9 10 11 13 16 18 20 23 24 26 28 30 31 32 35 38 39 42 43 48 49 51 53 55 59 60 62 # 21545 intersection c a 63 1 0 f b 63 1 0 f # 21546 intersection c a 63 1 0 f b 63 1 0 e # 21547 intersection c a 63 1 0 f b 63 1 0 f # 21548 intersection c a 63 1 0 f b 63 1 0 f # 21549 intersection c a 63 1 0 f b 63 1 0 f # 21550 intersection c a 63 1 0 f b 63 1 0 4 5 6 7 10 12 13 14 15 16 17 20 22 23 24 27 30 31 32 34 35 37 38 39 41 44 45 48 49 50 51 53 54 55 57 58 59 # 21551 intersection c a 63 1 0 1 4 7 8 10 12 13 16 24 27 28 29 33 34 45 46 47 51 52 53 55 56 58 59 61 62 b 63 1 0 1 4 7 8 10 12 13 16 24 27 28 29 33 34 45 46 47 51 52 53 55 56 58 59 61 62 # 21552 intersection c a 63 1 0 1 4 7 8 10 12 13 16 24 27 28 29 33 34 45 46 47 51 52 53 55 56 58 59 61 62 b 63 1 0 e # 21553 intersection c a 63 1 0 0 1 2 4 5 9 10 11 12 13 14 15 16 19 22 27 28 30 32 33 34 35 36 40 41 43 44 46 47 48 52 54 55 56 57 58 59 61 b 63 1 0 0 1 2 4 5 9 10 11 12 13 14 15 16 19 22 27 28 30 32 33 34 35 36 40 41 43 44 46 47 48 52 54 55 56 57 58 59 61 # 21554 intersection c a 63 1 0 0 1 2 4 5 9 10 11 12 13 14 15 16 19 22 27 28 30 32 33 34 35 36 40 41 43 44 46 47 48 52 54 55 56 57 58 59 61 b 63 1 0 f # 21555 intersection c a 63 1 0 1 2 7 10 15 16 17 21 22 24 25 27 30 33 34 35 40 42 43 44 45 46 47 48 50 53 54 56 60 62 b 63 1 0 1 2 7 10 15 16 17 21 22 24 25 27 30 33 34 35 40 42 43 44 45 46 47 48 50 53 54 56 60 62 # 21556 intersection c a 63 1 0 1 2 7 10 15 16 17 21 22 24 25 27 30 33 34 35 40 42 43 44 45 46 47 48 50 53 54 56 60 62 b 63 1 0 0 3 5 7 9 10 13 17 19 23 25 32 33 39 41 43 44 45 46 48 50 55 57 59 # 21557 intersection c a 63 1 0 e b 63 1 0 e # 21558 intersection c a 63 1 0 e b 63 1 1 e # 21559 intersection c a 63 1 0 e b 63 1 0 e # 21560 intersection c a 63 1 0 e b 63 1 1 f # 21561 intersection c a 63 1 0 e b 63 1 0 e # 21562 intersection c a 63 1 0 e b 63 1 1 0 4 5 7 11 14 19 20 21 25 26 27 33 36 37 38 39 42 43 45 47 49 51 52 53 55 56 58 59 # 21563 intersection c a 63 1 0 f b 63 1 0 f # 21564 intersection c a 63 1 0 f b 63 1 1 e # 21565 intersection c a 63 1 0 f b 63 1 0 f # 21566 intersection c a 63 1 0 f b 63 1 1 f # 21567 intersection c a 63 1 0 f b 63 1 0 f # 21568 intersection c a 63 1 0 f b 63 1 1 0 1 2 4 5 7 10 11 12 13 15 16 17 19 20 21 23 24 25 26 27 29 30 32 33 35 37 39 42 44 45 46 47 48 50 51 55 58 61 62 # 21569 intersection c a 63 1 0 3 4 5 7 9 12 15 17 18 20 22 23 25 26 27 30 32 33 35 36 37 38 40 42 44 48 49 51 54 55 57 58 62 b 63 1 0 3 4 5 7 9 12 15 17 18 20 22 23 25 26 27 30 32 33 35 36 37 38 40 42 44 48 49 51 54 55 57 58 62 # 21570 intersection c a 63 1 0 3 4 5 7 9 12 15 17 18 20 22 23 25 26 27 30 32 33 35 36 37 38 40 42 44 48 49 51 54 55 57 58 62 b 63 1 1 e # 21571 intersection c a 63 1 0 6 7 11 12 13 14 16 17 18 19 21 22 23 26 27 28 30 31 32 36 38 39 42 45 46 47 48 50 51 54 55 56 57 59 60 62 b 63 1 0 6 7 11 12 13 14 16 17 18 19 21 22 23 26 27 28 30 31 32 36 38 39 42 45 46 47 48 50 51 54 55 56 57 59 60 62 # 21572 intersection c a 63 1 0 6 7 11 12 13 14 16 17 18 19 21 22 23 26 27 28 30 31 32 36 38 39 42 45 46 47 48 50 51 54 55 56 57 59 60 62 b 63 1 1 f # 21573 intersection c a 63 1 0 0 2 3 6 8 10 12 13 14 15 20 21 23 24 27 31 32 34 36 37 42 45 46 47 53 54 56 60 61 b 63 1 0 0 2 3 6 8 10 12 13 14 15 20 21 23 24 27 31 32 34 36 37 42 45 46 47 53 54 56 60 61 # 21574 intersection c a 63 1 0 0 2 3 6 8 10 12 13 14 15 20 21 23 24 27 31 32 34 36 37 42 45 46 47 53 54 56 60 61 b 63 1 1 0 3 4 8 9 11 13 14 15 20 21 24 25 26 32 33 35 36 37 39 40 42 43 45 46 47 53 54 59 60 61 # 21575 intersection c a 63 1 1 e b 63 1 1 e # 21576 intersection c a 63 1 1 e b 63 0 0 e # 21577 intersection c a 63 1 1 e b 63 1 1 e # 21578 intersection c a 63 1 1 e b 63 0 0 f # 21579 intersection c a 63 1 1 e b 63 1 1 e # 21580 intersection c a 63 1 1 e b 63 0 0 0 1 4 6 8 11 12 13 14 18 23 24 25 27 28 32 33 34 35 36 37 39 40 42 43 45 47 49 51 57 59 60 61 # 21581 intersection c a 63 1 1 f b 63 1 1 f # 21582 intersection c a 63 1 1 f b 63 0 0 e # 21583 intersection c a 63 1 1 f b 63 1 1 f # 21584 intersection c a 63 1 1 f b 63 0 0 f # 21585 intersection c a 63 1 1 f b 63 1 1 f # 21586 intersection c a 63 1 1 f b 63 0 0 0 3 6 11 12 15 16 18 20 22 24 25 26 27 28 31 32 33 36 38 40 43 44 46 47 48 49 54 55 56 58 59 60 61 # 21587 intersection c a 63 1 1 0 1 2 4 7 9 12 13 15 17 18 19 22 26 27 29 32 34 36 41 42 46 47 49 50 53 54 56 57 60 61 b 63 1 1 0 1 2 4 7 9 12 13 15 17 18 19 22 26 27 29 32 34 36 41 42 46 47 49 50 53 54 56 57 60 61 # 21588 intersection c a 63 1 1 0 1 2 4 7 9 12 13 15 17 18 19 22 26 27 29 32 34 36 41 42 46 47 49 50 53 54 56 57 60 61 b 63 0 0 e # 21589 intersection c a 63 1 1 3 7 8 10 11 12 14 15 17 18 19 22 23 27 31 32 34 36 39 42 45 46 47 48 49 50 51 53 54 55 57 61 b 63 1 1 3 7 8 10 11 12 14 15 17 18 19 22 23 27 31 32 34 36 39 42 45 46 47 48 49 50 51 53 54 55 57 61 # 21590 intersection c a 63 1 1 3 7 8 10 11 12 14 15 17 18 19 22 23 27 31 32 34 36 39 42 45 46 47 48 49 50 51 53 54 55 57 61 b 63 0 0 f # 21591 intersection c a 63 1 1 0 2 7 8 9 10 11 14 17 20 21 22 23 25 27 29 30 33 37 39 40 42 43 44 45 47 48 51 55 57 60 62 b 63 1 1 0 2 7 8 9 10 11 14 17 20 21 22 23 25 27 29 30 33 37 39 40 42 43 44 45 47 48 51 55 57 60 62 # 21592 intersection c a 63 1 1 0 2 7 8 9 10 11 14 17 20 21 22 23 25 27 29 30 33 37 39 40 42 43 44 45 47 48 51 55 57 60 62 b 63 0 0 0 4 6 7 8 10 11 12 13 15 17 22 23 24 29 30 34 37 38 40 41 43 45 46 47 51 52 53 54 58 59 61 62 # 21593 intersection c a 63 1 1 e b 63 1 1 e # 21594 intersection c a 63 1 1 e b 63 0 1 e # 21595 intersection c a 63 1 1 e b 63 1 1 e # 21596 intersection c a 63 1 1 e b 63 0 1 f # 21597 intersection c a 63 1 1 e b 63 1 1 e # 21598 intersection c a 63 1 1 e b 63 0 1 0 1 2 3 6 7 9 16 17 23 24 26 27 28 30 35 36 38 42 44 46 50 51 52 54 55 56 60 62 # 21599 intersection c a 63 1 1 f b 63 1 1 f # 21600 intersection c a 63 1 1 f b 63 0 1 e # 21601 intersection c a 63 1 1 f b 63 1 1 f # 21602 intersection c a 63 1 1 f b 63 0 1 f # 21603 intersection c a 63 1 1 f b 63 1 1 f # 21604 intersection c a 63 1 1 f b 63 0 1 1 4 5 9 11 12 13 16 17 19 25 26 27 28 29 30 32 34 38 41 44 45 47 49 51 53 56 57 59 60 61 # 21605 intersection c a 63 1 1 0 5 6 7 9 11 12 13 17 18 21 22 23 24 25 26 27 28 29 33 34 35 36 37 38 40 41 44 46 49 50 51 52 53 55 58 62 b 63 1 1 0 5 6 7 9 11 12 13 17 18 21 22 23 24 25 26 27 28 29 33 34 35 36 37 38 40 41 44 46 49 50 51 52 53 55 58 62 # 21606 intersection c a 63 1 1 0 5 6 7 9 11 12 13 17 18 21 22 23 24 25 26 27 28 29 33 34 35 36 37 38 40 41 44 46 49 50 51 52 53 55 58 62 b 63 0 1 e # 21607 intersection c a 63 1 1 0 7 8 13 15 18 19 24 25 29 30 34 35 36 37 38 39 44 45 49 51 53 56 57 58 60 61 b 63 1 1 0 7 8 13 15 18 19 24 25 29 30 34 35 36 37 38 39 44 45 49 51 53 56 57 58 60 61 # 21608 intersection c a 63 1 1 0 7 8 13 15 18 19 24 25 29 30 34 35 36 37 38 39 44 45 49 51 53 56 57 58 60 61 b 63 0 1 f # 21609 intersection c a 63 1 1 4 7 10 11 13 15 16 18 19 20 21 22 25 26 27 29 31 32 34 35 36 38 40 41 46 48 49 52 54 56 57 58 b 63 1 1 4 7 10 11 13 15 16 18 19 20 21 22 25 26 27 29 31 32 34 35 36 38 40 41 46 48 49 52 54 56 57 58 # 21610 intersection c a 63 1 1 4 7 10 11 13 15 16 18 19 20 21 22 25 26 27 29 31 32 34 35 36 38 40 41 46 48 49 52 54 56 57 58 b 63 0 1 1 7 9 10 15 19 27 28 29 34 35 36 37 38 40 41 42 48 49 51 53 55 56 57 58 59 60 61 62 # 21611 intersection c a 63 1 1 e b 63 1 1 e # 21612 intersection c a 63 1 1 e b 63 1 0 e # 21613 intersection c a 63 1 1 e b 63 1 1 e # 21614 intersection c a 63 1 1 e b 63 1 0 f # 21615 intersection c a 63 1 1 e b 63 1 1 e # 21616 intersection c a 63 1 1 e b 63 1 0 2 5 6 7 8 9 12 13 14 18 20 22 25 28 31 32 33 36 38 40 42 43 47 48 51 52 59 60 61 62 # 21617 intersection c a 63 1 1 f b 63 1 1 f # 21618 intersection c a 63 1 1 f b 63 1 0 e # 21619 intersection c a 63 1 1 f b 63 1 1 f # 21620 intersection c a 63 1 1 f b 63 1 0 f # 21621 intersection c a 63 1 1 f b 63 1 1 f # 21622 intersection c a 63 1 1 f b 63 1 0 1 3 6 7 10 14 19 20 21 24 25 26 27 30 31 34 35 36 38 40 42 44 45 47 48 49 50 51 52 55 56 57 58 61 # 21623 intersection c a 63 1 1 0 1 4 5 7 9 10 11 20 21 22 23 24 25 30 31 33 35 36 37 38 41 42 43 47 49 52 53 56 57 58 59 60 62 b 63 1 1 0 1 4 5 7 9 10 11 20 21 22 23 24 25 30 31 33 35 36 37 38 41 42 43 47 49 52 53 56 57 58 59 60 62 # 21624 intersection c a 63 1 1 0 1 4 5 7 9 10 11 20 21 22 23 24 25 30 31 33 35 36 37 38 41 42 43 47 49 52 53 56 57 58 59 60 62 b 63 1 0 e # 21625 intersection c a 63 1 1 8 9 11 13 15 19 20 22 24 25 27 28 29 30 31 36 38 43 46 48 49 51 56 59 62 b 63 1 1 8 9 11 13 15 19 20 22 24 25 27 28 29 30 31 36 38 43 46 48 49 51 56 59 62 # 21626 intersection c a 63 1 1 8 9 11 13 15 19 20 22 24 25 27 28 29 30 31 36 38 43 46 48 49 51 56 59 62 b 63 1 0 f # 21627 intersection c a 63 1 1 1 2 3 6 7 8 11 12 13 20 21 23 24 25 31 34 35 36 37 38 39 41 43 44 45 49 53 56 58 60 61 62 b 63 1 1 1 2 3 6 7 8 11 12 13 20 21 23 24 25 31 34 35 36 37 38 39 41 43 44 45 49 53 56 58 60 61 62 # 21628 intersection c a 63 1 1 1 2 3 6 7 8 11 12 13 20 21 23 24 25 31 34 35 36 37 38 39 41 43 44 45 49 53 56 58 60 61 62 b 63 1 0 2 3 4 6 7 8 9 11 14 15 16 17 19 25 28 31 34 36 37 43 44 46 48 49 53 54 57 58 # 21629 intersection c a 63 1 1 e b 63 1 1 e # 21630 intersection c a 63 1 1 e b 63 1 1 e # 21631 intersection c a 63 1 1 e b 63 1 1 e # 21632 intersection c a 63 1 1 e b 63 1 1 f # 21633 intersection c a 63 1 1 e b 63 1 1 e # 21634 intersection c a 63 1 1 e b 63 1 1 0 1 5 7 9 12 18 19 23 24 26 28 33 34 35 36 38 41 42 43 45 47 49 50 51 54 56 57 58 62 # 21635 intersection c a 63 1 1 f b 63 1 1 f # 21636 intersection c a 63 1 1 f b 63 1 1 e # 21637 intersection c a 63 1 1 f b 63 1 1 f # 21638 intersection c a 63 1 1 f b 63 1 1 f # 21639 intersection c a 63 1 1 f b 63 1 1 f # 21640 intersection c a 63 1 1 f b 63 1 1 1 2 4 5 6 7 9 10 13 16 19 20 27 30 31 39 41 42 43 44 47 48 51 52 53 57 58 59 61 62 # 21641 intersection c a 63 1 1 0 2 3 4 12 13 15 16 17 19 20 29 30 33 35 39 40 41 42 43 44 47 49 50 52 54 56 57 58 60 61 b 63 1 1 0 2 3 4 12 13 15 16 17 19 20 29 30 33 35 39 40 41 42 43 44 47 49 50 52 54 56 57 58 60 61 # 21642 intersection c a 63 1 1 0 2 3 4 12 13 15 16 17 19 20 29 30 33 35 39 40 41 42 43 44 47 49 50 52 54 56 57 58 60 61 b 63 1 1 e # 21643 intersection c a 63 1 1 1 2 4 6 7 8 9 10 11 12 15 16 17 18 20 22 24 25 28 29 30 32 35 36 39 40 43 45 48 51 58 62 b 63 1 1 1 2 4 6 7 8 9 10 11 12 15 16 17 18 20 22 24 25 28 29 30 32 35 36 39 40 43 45 48 51 58 62 # 21644 intersection c a 63 1 1 1 2 4 6 7 8 9 10 11 12 15 16 17 18 20 22 24 25 28 29 30 32 35 36 39 40 43 45 48 51 58 62 b 63 1 1 f # 21645 intersection c a 63 1 1 1 3 4 9 10 13 14 17 18 23 24 25 26 31 34 35 36 40 42 46 47 49 50 51 54 57 58 59 60 61 62 b 63 1 1 1 3 4 9 10 13 14 17 18 23 24 25 26 31 34 35 36 40 42 46 47 49 50 51 54 57 58 59 60 61 62 # 21646 intersection c a 63 1 1 1 3 4 9 10 13 14 17 18 23 24 25 26 31 34 35 36 40 42 46 47 49 50 51 54 57 58 59 60 61 62 b 63 1 1 5 6 7 8 10 11 14 16 19 20 21 22 23 26 29 30 31 34 35 37 38 39 40 42 44 45 46 49 51 52 53 54 55 57 59 62 # 21647 intersection c a 64 0 0 e b 64 0 0 e # 21648 intersection c a 64 0 0 e b 64 0 0 e # 21649 intersection c a 64 0 0 e b 64 0 0 e # 21650 intersection c a 64 0 0 e b 64 0 0 f # 21651 intersection c a 64 0 0 e b 64 0 0 e # 21652 intersection c a 64 0 0 e b 64 0 0 0 1 2 4 7 9 10 11 13 14 15 16 17 19 22 24 25 26 27 29 31 32 35 36 37 38 41 43 45 46 48 54 58 # 21653 intersection c a 64 0 0 f b 64 0 0 f # 21654 intersection c a 64 0 0 f b 64 0 0 e # 21655 intersection c a 64 0 0 f b 64 0 0 f # 21656 intersection c a 64 0 0 f b 64 0 0 f # 21657 intersection c a 64 0 0 f b 64 0 0 f # 21658 intersection c a 64 0 0 f b 64 0 0 0 1 2 4 5 6 9 11 12 15 17 18 19 21 23 27 28 29 30 32 33 34 36 37 38 40 41 43 45 47 48 50 53 54 59 60 63 # 21659 intersection c a 64 0 0 3 5 7 8 10 14 15 16 17 19 20 23 25 26 28 32 40 41 42 45 47 50 52 58 60 61 63 b 64 0 0 3 5 7 8 10 14 15 16 17 19 20 23 25 26 28 32 40 41 42 45 47 50 52 58 60 61 63 # 21660 intersection c a 64 0 0 3 5 7 8 10 14 15 16 17 19 20 23 25 26 28 32 40 41 42 45 47 50 52 58 60 61 63 b 64 0 0 e # 21661 intersection c a 64 0 0 1 2 3 12 13 18 19 20 21 25 27 28 29 30 32 33 35 36 37 41 42 46 47 48 50 51 53 54 55 56 58 59 b 64 0 0 1 2 3 12 13 18 19 20 21 25 27 28 29 30 32 33 35 36 37 41 42 46 47 48 50 51 53 54 55 56 58 59 # 21662 intersection c a 64 0 0 1 2 3 12 13 18 19 20 21 25 27 28 29 30 32 33 35 36 37 41 42 46 47 48 50 51 53 54 55 56 58 59 b 64 0 0 f # 21663 intersection c a 64 0 0 1 4 11 16 18 21 22 25 27 29 32 34 35 36 38 42 43 44 48 50 51 53 55 58 59 61 63 b 64 0 0 1 4 11 16 18 21 22 25 27 29 32 34 35 36 38 42 43 44 48 50 51 53 55 58 59 61 63 # 21664 intersection c a 64 0 0 1 4 11 16 18 21 22 25 27 29 32 34 35 36 38 42 43 44 48 50 51 53 55 58 59 61 63 b 64 0 0 1 2 5 6 7 9 10 11 13 15 18 20 24 25 27 28 30 33 34 35 37 39 42 43 46 49 50 52 54 55 58 60 61 62 # 21665 intersection c a 64 0 0 e b 64 0 0 e # 21666 intersection c a 64 0 0 e b 64 0 1 e # 21667 intersection c a 64 0 0 e b 64 0 0 e # 21668 intersection c a 64 0 0 e b 64 0 1 f # 21669 intersection c a 64 0 0 e b 64 0 0 e # 21670 intersection c a 64 0 0 e b 64 0 1 1 2 3 6 7 8 10 11 12 18 20 21 22 23 24 25 27 29 30 31 32 33 34 37 41 43 45 47 49 50 51 52 53 54 55 56 63 # 21671 intersection c a 64 0 0 f b 64 0 0 f # 21672 intersection c a 64 0 0 f b 64 0 1 e # 21673 intersection c a 64 0 0 f b 64 0 0 f # 21674 intersection c a 64 0 0 f b 64 0 1 f # 21675 intersection c a 64 0 0 f b 64 0 0 f # 21676 intersection c a 64 0 0 f b 64 0 1 3 4 11 14 17 20 22 24 26 27 28 29 30 36 37 41 45 46 47 48 50 52 53 54 55 57 58 60 61 62 63 # 21677 intersection c a 64 0 0 0 3 5 6 10 11 13 15 23 25 27 28 30 31 32 36 38 40 41 43 44 45 46 50 51 52 53 54 56 59 60 63 b 64 0 0 0 3 5 6 10 11 13 15 23 25 27 28 30 31 32 36 38 40 41 43 44 45 46 50 51 52 53 54 56 59 60 63 # 21678 intersection c a 64 0 0 0 3 5 6 10 11 13 15 23 25 27 28 30 31 32 36 38 40 41 43 44 45 46 50 51 52 53 54 56 59 60 63 b 64 0 1 e # 21679 intersection c a 64 0 0 1 2 5 6 12 16 18 19 21 22 24 26 27 31 35 39 40 42 43 44 46 48 49 51 52 55 59 60 61 62 b 64 0 0 1 2 5 6 12 16 18 19 21 22 24 26 27 31 35 39 40 42 43 44 46 48 49 51 52 55 59 60 61 62 # 21680 intersection c a 64 0 0 1 2 5 6 12 16 18 19 21 22 24 26 27 31 35 39 40 42 43 44 46 48 49 51 52 55 59 60 61 62 b 64 0 1 f # 21681 intersection c a 64 0 0 3 4 7 8 11 12 15 18 20 21 22 27 31 32 34 35 36 39 40 41 42 43 45 47 56 57 60 61 63 b 64 0 0 3 4 7 8 11 12 15 18 20 21 22 27 31 32 34 35 36 39 40 41 42 43 45 47 56 57 60 61 63 # 21682 intersection c a 64 0 0 3 4 7 8 11 12 15 18 20 21 22 27 31 32 34 35 36 39 40 41 42 43 45 47 56 57 60 61 63 b 64 0 1 1 5 7 8 9 10 12 17 18 19 20 23 24 25 26 27 30 31 34 42 46 47 48 50 51 52 53 54 55 56 57 58 60 62 # 21683 intersection c a 64 0 0 e b 64 0 0 e # 21684 intersection c a 64 0 0 e b 64 1 0 e # 21685 intersection c a 64 0 0 e b 64 0 0 e # 21686 intersection c a 64 0 0 e b 64 1 0 f # 21687 intersection c a 64 0 0 e b 64 0 0 e # 21688 intersection c a 64 0 0 e b 64 1 0 0 1 2 3 9 10 11 14 16 17 19 20 21 24 26 27 28 29 30 32 33 35 36 37 40 43 44 47 51 53 58 59 60 61 63 # 21689 intersection c a 64 0 0 f b 64 0 0 f # 21690 intersection c a 64 0 0 f b 64 1 0 e # 21691 intersection c a 64 0 0 f b 64 0 0 f # 21692 intersection c a 64 0 0 f b 64 1 0 f # 21693 intersection c a 64 0 0 f b 64 0 0 f # 21694 intersection c a 64 0 0 f b 64 1 0 0 1 2 3 4 9 13 14 19 21 22 23 25 26 28 30 31 33 35 36 37 41 42 43 44 45 47 49 50 51 52 53 55 56 59 63 # 21695 intersection c a 64 0 0 0 1 2 3 4 10 11 12 14 16 17 18 19 22 24 25 26 30 33 36 37 40 43 44 47 48 52 54 57 58 61 62 63 b 64 0 0 0 1 2 3 4 10 11 12 14 16 17 18 19 22 24 25 26 30 33 36 37 40 43 44 47 48 52 54 57 58 61 62 63 # 21696 intersection c a 64 0 0 0 1 2 3 4 10 11 12 14 16 17 18 19 22 24 25 26 30 33 36 37 40 43 44 47 48 52 54 57 58 61 62 63 b 64 1 0 e # 21697 intersection c a 64 0 0 1 2 4 6 7 8 9 10 11 13 17 18 19 26 28 29 32 34 36 37 39 40 41 43 44 45 48 49 53 54 55 56 57 59 b 64 0 0 1 2 4 6 7 8 9 10 11 13 17 18 19 26 28 29 32 34 36 37 39 40 41 43 44 45 48 49 53 54 55 56 57 59 # 21698 intersection c a 64 0 0 1 2 4 6 7 8 9 10 11 13 17 18 19 26 28 29 32 34 36 37 39 40 41 43 44 45 48 49 53 54 55 56 57 59 b 64 1 0 f # 21699 intersection c a 64 0 0 0 2 5 7 8 9 10 11 12 15 18 19 21 25 27 29 31 33 36 37 39 42 44 46 47 48 49 50 51 52 56 b 64 0 0 0 2 5 7 8 9 10 11 12 15 18 19 21 25 27 29 31 33 36 37 39 42 44 46 47 48 49 50 51 52 56 # 21700 intersection c a 64 0 0 0 2 5 7 8 9 10 11 12 15 18 19 21 25 27 29 31 33 36 37 39 42 44 46 47 48 49 50 51 52 56 b 64 1 0 1 2 7 8 11 12 14 19 20 21 23 26 28 30 32 33 34 40 41 43 44 45 49 54 55 56 57 59 # 21701 intersection c a 64 0 0 e b 64 0 0 e # 21702 intersection c a 64 0 0 e b 64 1 1 e # 21703 intersection c a 64 0 0 e b 64 0 0 e # 21704 intersection c a 64 0 0 e b 64 1 1 f # 21705 intersection c a 64 0 0 e b 64 0 0 e # 21706 intersection c a 64 0 0 e b 64 1 1 2 3 4 7 8 10 11 13 15 16 20 22 23 26 30 31 32 35 36 37 38 39 41 42 43 44 45 46 49 50 53 56 58 60 61 63 # 21707 intersection c a 64 0 0 f b 64 0 0 f # 21708 intersection c a 64 0 0 f b 64 1 1 e # 21709 intersection c a 64 0 0 f b 64 0 0 f # 21710 intersection c a 64 0 0 f b 64 1 1 f # 21711 intersection c a 64 0 0 f b 64 0 0 f # 21712 intersection c a 64 0 0 f b 64 1 1 1 2 3 5 6 7 8 14 15 17 21 22 25 26 28 31 32 34 37 41 42 43 44 45 46 50 51 53 55 56 60 61 63 # 21713 intersection c a 64 0 0 3 6 9 13 15 18 20 23 24 27 29 33 38 40 42 50 52 55 56 58 59 b 64 0 0 3 6 9 13 15 18 20 23 24 27 29 33 38 40 42 50 52 55 56 58 59 # 21714 intersection c a 64 0 0 3 6 9 13 15 18 20 23 24 27 29 33 38 40 42 50 52 55 56 58 59 b 64 1 1 e # 21715 intersection c a 64 0 0 0 1 2 4 5 6 7 12 13 14 17 18 21 23 26 27 34 40 41 42 43 44 45 46 48 49 50 52 58 59 60 63 b 64 0 0 0 1 2 4 5 6 7 12 13 14 17 18 21 23 26 27 34 40 41 42 43 44 45 46 48 49 50 52 58 59 60 63 # 21716 intersection c a 64 0 0 0 1 2 4 5 6 7 12 13 14 17 18 21 23 26 27 34 40 41 42 43 44 45 46 48 49 50 52 58 59 60 63 b 64 1 1 f # 21717 intersection c a 64 0 0 3 4 7 11 17 19 21 23 24 26 27 30 31 33 34 37 38 39 42 44 45 46 48 52 54 55 56 57 58 60 b 64 0 0 3 4 7 11 17 19 21 23 24 26 27 30 31 33 34 37 38 39 42 44 45 46 48 52 54 55 56 57 58 60 # 21718 intersection c a 64 0 0 3 4 7 11 17 19 21 23 24 26 27 30 31 33 34 37 38 39 42 44 45 46 48 52 54 55 56 57 58 60 b 64 1 1 1 2 3 4 5 6 10 16 17 18 19 21 22 23 28 30 33 38 39 40 42 44 46 47 55 56 57 59 63 # 21719 intersection c a 64 0 1 e b 64 0 1 e # 21720 intersection c a 64 0 1 e b 64 0 0 e # 21721 intersection c a 64 0 1 e b 64 0 1 e # 21722 intersection c a 64 0 1 e b 64 0 0 f # 21723 intersection c a 64 0 1 e b 64 0 1 e # 21724 intersection c a 64 0 1 e b 64 0 0 0 1 4 5 7 10 12 13 15 17 20 21 23 24 27 28 29 30 31 33 36 40 42 44 48 49 50 51 52 53 54 55 58 60 62 # 21725 intersection c a 64 0 1 f b 64 0 1 f # 21726 intersection c a 64 0 1 f b 64 0 0 e # 21727 intersection c a 64 0 1 f b 64 0 1 f # 21728 intersection c a 64 0 1 f b 64 0 0 f # 21729 intersection c a 64 0 1 f b 64 0 1 f # 21730 intersection c a 64 0 1 f b 64 0 0 2 4 6 9 10 14 21 23 25 30 31 33 36 38 41 42 43 45 46 47 51 54 57 58 59 62 63 # 21731 intersection c a 64 0 1 2 4 5 6 9 11 15 17 19 23 25 26 29 31 34 36 37 38 41 43 45 46 47 51 53 55 56 60 62 b 64 0 1 2 4 5 6 9 11 15 17 19 23 25 26 29 31 34 36 37 38 41 43 45 46 47 51 53 55 56 60 62 # 21732 intersection c a 64 0 1 2 4 5 6 9 11 15 17 19 23 25 26 29 31 34 36 37 38 41 43 45 46 47 51 53 55 56 60 62 b 64 0 0 e # 21733 intersection c a 64 0 1 0 1 3 4 13 15 17 19 21 25 31 33 34 37 41 42 43 44 47 48 49 50 52 54 56 60 61 b 64 0 1 0 1 3 4 13 15 17 19 21 25 31 33 34 37 41 42 43 44 47 48 49 50 52 54 56 60 61 # 21734 intersection c a 64 0 1 0 1 3 4 13 15 17 19 21 25 31 33 34 37 41 42 43 44 47 48 49 50 52 54 56 60 61 b 64 0 0 f # 21735 intersection c a 64 0 1 0 1 4 5 6 8 9 12 13 15 16 19 22 26 29 32 33 34 35 36 39 41 45 48 49 50 52 53 54 57 58 59 60 63 b 64 0 1 0 1 4 5 6 8 9 12 13 15 16 19 22 26 29 32 33 34 35 36 39 41 45 48 49 50 52 53 54 57 58 59 60 63 # 21736 intersection c a 64 0 1 0 1 4 5 6 8 9 12 13 15 16 19 22 26 29 32 33 34 35 36 39 41 45 48 49 50 52 53 54 57 58 59 60 63 b 64 0 0 2 4 6 7 8 12 14 15 17 20 22 27 28 29 30 31 32 35 36 38 39 41 45 47 48 49 50 53 54 55 57 58 59 60 62 63 # 21737 intersection c a 64 0 1 e b 64 0 1 e # 21738 intersection c a 64 0 1 e b 64 0 1 e # 21739 intersection c a 64 0 1 e b 64 0 1 e # 21740 intersection c a 64 0 1 e b 64 0 1 f # 21741 intersection c a 64 0 1 e b 64 0 1 e # 21742 intersection c a 64 0 1 e b 64 0 1 0 3 7 9 11 12 13 16 18 21 24 25 32 33 36 37 41 42 44 46 47 48 49 54 58 59 60 61 # 21743 intersection c a 64 0 1 f b 64 0 1 f # 21744 intersection c a 64 0 1 f b 64 0 1 e # 21745 intersection c a 64 0 1 f b 64 0 1 f # 21746 intersection c a 64 0 1 f b 64 0 1 f # 21747 intersection c a 64 0 1 f b 64 0 1 f # 21748 intersection c a 64 0 1 f b 64 0 1 0 1 2 3 5 6 7 8 9 13 16 18 20 24 29 30 31 32 33 34 36 37 40 42 46 48 51 52 53 55 57 60 # 21749 intersection c a 64 0 1 0 2 3 4 5 7 10 11 13 17 18 20 22 23 24 27 29 33 36 38 40 41 44 45 47 52 55 57 59 60 61 63 b 64 0 1 0 2 3 4 5 7 10 11 13 17 18 20 22 23 24 27 29 33 36 38 40 41 44 45 47 52 55 57 59 60 61 63 # 21750 intersection c a 64 0 1 0 2 3 4 5 7 10 11 13 17 18 20 22 23 24 27 29 33 36 38 40 41 44 45 47 52 55 57 59 60 61 63 b 64 0 1 e # 21751 intersection c a 64 0 1 0 1 3 7 9 11 13 14 15 19 22 23 26 27 28 30 31 37 39 41 42 43 45 46 47 48 50 52 55 56 58 59 60 61 b 64 0 1 0 1 3 7 9 11 13 14 15 19 22 23 26 27 28 30 31 37 39 41 42 43 45 46 47 48 50 52 55 56 58 59 60 61 # 21752 intersection c a 64 0 1 0 1 3 7 9 11 13 14 15 19 22 23 26 27 28 30 31 37 39 41 42 43 45 46 47 48 50 52 55 56 58 59 60 61 b 64 0 1 f # 21753 intersection c a 64 0 1 1 2 3 4 8 12 15 17 21 26 30 36 37 39 40 41 43 44 46 50 51 53 55 60 62 b 64 0 1 1 2 3 4 8 12 15 17 21 26 30 36 37 39 40 41 43 44 46 50 51 53 55 60 62 # 21754 intersection c a 64 0 1 1 2 3 4 8 12 15 17 21 26 30 36 37 39 40 41 43 44 46 50 51 53 55 60 62 b 64 0 1 0 4 5 7 8 10 11 12 13 17 19 20 21 22 24 26 27 28 29 30 32 34 35 38 40 41 42 43 44 49 56 59 60 63 # 21755 intersection c a 64 0 1 e b 64 0 1 e # 21756 intersection c a 64 0 1 e b 64 1 0 e # 21757 intersection c a 64 0 1 e b 64 0 1 e # 21758 intersection c a 64 0 1 e b 64 1 0 f # 21759 intersection c a 64 0 1 e b 64 0 1 e # 21760 intersection c a 64 0 1 e b 64 1 0 0 2 5 8 10 11 12 15 16 17 21 22 24 27 30 32 33 36 37 39 42 44 47 51 57 59 63 # 21761 intersection c a 64 0 1 f b 64 0 1 f # 21762 intersection c a 64 0 1 f b 64 1 0 e # 21763 intersection c a 64 0 1 f b 64 0 1 f # 21764 intersection c a 64 0 1 f b 64 1 0 f # 21765 intersection c a 64 0 1 f b 64 0 1 f # 21766 intersection c a 64 0 1 f b 64 1 0 1 4 5 11 12 13 14 17 21 22 23 25 26 27 29 30 32 33 34 36 37 38 39 42 43 44 45 48 50 51 54 55 59 # 21767 intersection c a 64 0 1 1 2 3 4 6 8 9 11 12 14 16 17 22 23 24 28 29 31 32 34 35 36 37 38 40 43 44 47 48 49 50 52 53 54 55 58 63 b 64 0 1 1 2 3 4 6 8 9 11 12 14 16 17 22 23 24 28 29 31 32 34 35 36 37 38 40 43 44 47 48 49 50 52 53 54 55 58 63 # 21768 intersection c a 64 0 1 1 2 3 4 6 8 9 11 12 14 16 17 22 23 24 28 29 31 32 34 35 36 37 38 40 43 44 47 48 49 50 52 53 54 55 58 63 b 64 1 0 e # 21769 intersection c a 64 0 1 0 2 5 6 8 10 11 16 18 19 21 22 23 25 31 32 35 36 39 40 42 46 48 56 58 60 63 b 64 0 1 0 2 5 6 8 10 11 16 18 19 21 22 23 25 31 32 35 36 39 40 42 46 48 56 58 60 63 # 21770 intersection c a 64 0 1 0 2 5 6 8 10 11 16 18 19 21 22 23 25 31 32 35 36 39 40 42 46 48 56 58 60 63 b 64 1 0 f # 21771 intersection c a 64 0 1 0 1 2 3 5 6 7 11 12 13 17 18 19 20 21 23 28 33 36 37 41 42 44 46 48 50 51 54 55 60 61 62 63 b 64 0 1 0 1 2 3 5 6 7 11 12 13 17 18 19 20 21 23 28 33 36 37 41 42 44 46 48 50 51 54 55 60 61 62 63 # 21772 intersection c a 64 0 1 0 1 2 3 5 6 7 11 12 13 17 18 19 20 21 23 28 33 36 37 41 42 44 46 48 50 51 54 55 60 61 62 63 b 64 1 0 0 1 3 4 5 6 8 9 10 14 16 17 20 25 26 28 33 36 38 41 42 45 46 49 50 54 55 57 58 59 63 # 21773 intersection c a 64 0 1 e b 64 0 1 e # 21774 intersection c a 64 0 1 e b 64 1 1 e # 21775 intersection c a 64 0 1 e b 64 0 1 e # 21776 intersection c a 64 0 1 e b 64 1 1 f # 21777 intersection c a 64 0 1 e b 64 0 1 e # 21778 intersection c a 64 0 1 e b 64 1 1 0 1 3 4 8 10 12 18 19 21 23 24 26 27 28 30 31 32 33 35 37 40 41 43 45 47 50 51 56 61 # 21779 intersection c a 64 0 1 f b 64 0 1 f # 21780 intersection c a 64 0 1 f b 64 1 1 e # 21781 intersection c a 64 0 1 f b 64 0 1 f # 21782 intersection c a 64 0 1 f b 64 1 1 f # 21783 intersection c a 64 0 1 f b 64 0 1 f # 21784 intersection c a 64 0 1 f b 64 1 1 0 1 5 8 9 12 13 17 18 19 23 24 29 30 34 35 36 39 41 42 44 52 53 55 57 58 59 60 61 # 21785 intersection c a 64 0 1 0 1 3 5 6 8 9 10 11 12 16 17 18 19 23 27 29 32 35 37 39 40 42 43 45 46 48 49 50 52 54 56 63 b 64 0 1 0 1 3 5 6 8 9 10 11 12 16 17 18 19 23 27 29 32 35 37 39 40 42 43 45 46 48 49 50 52 54 56 63 # 21786 intersection c a 64 0 1 0 1 3 5 6 8 9 10 11 12 16 17 18 19 23 27 29 32 35 37 39 40 42 43 45 46 48 49 50 52 54 56 63 b 64 1 1 e # 21787 intersection c a 64 0 1 0 1 2 4 8 9 12 15 16 18 19 20 21 23 27 28 29 30 31 33 38 39 41 45 55 56 59 62 63 b 64 0 1 0 1 2 4 8 9 12 15 16 18 19 20 21 23 27 28 29 30 31 33 38 39 41 45 55 56 59 62 63 # 21788 intersection c a 64 0 1 0 1 2 4 8 9 12 15 16 18 19 20 21 23 27 28 29 30 31 33 38 39 41 45 55 56 59 62 63 b 64 1 1 f # 21789 intersection c a 64 0 1 0 2 4 5 8 10 11 13 18 20 21 23 25 26 27 28 29 31 35 39 40 41 42 44 46 48 50 51 53 54 55 56 57 58 59 60 62 63 b 64 0 1 0 2 4 5 8 10 11 13 18 20 21 23 25 26 27 28 29 31 35 39 40 41 42 44 46 48 50 51 53 54 55 56 57 58 59 60 62 63 # 21790 intersection c a 64 0 1 0 2 4 5 8 10 11 13 18 20 21 23 25 26 27 28 29 31 35 39 40 41 42 44 46 48 50 51 53 54 55 56 57 58 59 60 62 63 b 64 1 1 0 1 2 3 6 9 10 15 16 18 23 26 27 30 33 35 42 44 47 51 52 53 54 55 56 58 60 61 62 # 21791 intersection c a 64 1 0 e b 64 1 0 e # 21792 intersection c a 64 1 0 e b 64 0 0 e # 21793 intersection c a 64 1 0 e b 64 1 0 e # 21794 intersection c a 64 1 0 e b 64 0 0 f # 21795 intersection c a 64 1 0 e b 64 1 0 e # 21796 intersection c a 64 1 0 e b 64 0 0 0 1 5 6 10 11 12 14 16 17 18 20 21 23 29 30 32 34 38 40 41 43 46 47 49 51 52 53 54 55 57 59 60 61 63 # 21797 intersection c a 64 1 0 f b 64 1 0 f # 21798 intersection c a 64 1 0 f b 64 0 0 e # 21799 intersection c a 64 1 0 f b 64 1 0 f # 21800 intersection c a 64 1 0 f b 64 0 0 f # 21801 intersection c a 64 1 0 f b 64 1 0 f # 21802 intersection c a 64 1 0 f b 64 0 0 4 5 6 7 8 11 12 14 15 18 21 23 24 26 27 30 31 32 33 36 39 40 41 42 45 47 50 51 54 55 56 57 58 62 63 # 21803 intersection c a 64 1 0 5 9 10 11 12 15 16 18 19 20 22 25 26 29 31 32 33 36 38 42 44 48 49 51 55 57 60 61 63 b 64 1 0 5 9 10 11 12 15 16 18 19 20 22 25 26 29 31 32 33 36 38 42 44 48 49 51 55 57 60 61 63 # 21804 intersection c a 64 1 0 5 9 10 11 12 15 16 18 19 20 22 25 26 29 31 32 33 36 38 42 44 48 49 51 55 57 60 61 63 b 64 0 0 e # 21805 intersection c a 64 1 0 0 4 5 6 9 10 13 14 16 18 20 23 27 29 30 31 33 36 38 40 42 48 50 52 55 56 57 58 59 60 61 62 63 b 64 1 0 0 4 5 6 9 10 13 14 16 18 20 23 27 29 30 31 33 36 38 40 42 48 50 52 55 56 57 58 59 60 61 62 63 # 21806 intersection c a 64 1 0 0 4 5 6 9 10 13 14 16 18 20 23 27 29 30 31 33 36 38 40 42 48 50 52 55 56 57 58 59 60 61 62 63 b 64 0 0 f # 21807 intersection c a 64 1 0 0 3 4 5 7 9 10 11 16 18 19 20 22 25 27 30 32 34 35 39 42 43 44 46 47 48 49 50 52 54 59 60 62 63 b 64 1 0 0 3 4 5 7 9 10 11 16 18 19 20 22 25 27 30 32 34 35 39 42 43 44 46 47 48 49 50 52 54 59 60 62 63 # 21808 intersection c a 64 1 0 0 3 4 5 7 9 10 11 16 18 19 20 22 25 27 30 32 34 35 39 42 43 44 46 47 48 49 50 52 54 59 60 62 63 b 64 0 0 1 2 3 8 11 14 16 18 19 20 21 26 28 29 32 33 34 38 39 40 41 42 48 51 52 56 59 61 62 # 21809 intersection c a 64 1 0 e b 64 1 0 e # 21810 intersection c a 64 1 0 e b 64 0 1 e # 21811 intersection c a 64 1 0 e b 64 1 0 e # 21812 intersection c a 64 1 0 e b 64 0 1 f # 21813 intersection c a 64 1 0 e b 64 1 0 e # 21814 intersection c a 64 1 0 e b 64 0 1 0 1 3 6 9 13 14 17 24 25 27 28 33 35 36 38 42 46 47 49 50 51 57 60 62 # 21815 intersection c a 64 1 0 f b 64 1 0 f # 21816 intersection c a 64 1 0 f b 64 0 1 e # 21817 intersection c a 64 1 0 f b 64 1 0 f # 21818 intersection c a 64 1 0 f b 64 0 1 f # 21819 intersection c a 64 1 0 f b 64 1 0 f # 21820 intersection c a 64 1 0 f b 64 0 1 2 4 5 7 11 12 14 17 19 21 22 23 26 28 29 30 31 32 33 35 36 37 38 40 43 45 46 47 48 51 52 54 56 57 58 61 # 21821 intersection c a 64 1 0 1 5 9 11 12 17 22 24 25 26 28 30 32 37 38 40 45 46 47 48 52 55 b 64 1 0 1 5 9 11 12 17 22 24 25 26 28 30 32 37 38 40 45 46 47 48 52 55 # 21822 intersection c a 64 1 0 1 5 9 11 12 17 22 24 25 26 28 30 32 37 38 40 45 46 47 48 52 55 b 64 0 1 e # 21823 intersection c a 64 1 0 1 2 3 4 5 7 11 14 15 16 20 21 24 28 29 30 32 33 34 35 36 38 40 41 42 43 45 46 47 48 51 52 53 54 55 59 b 64 1 0 1 2 3 4 5 7 11 14 15 16 20 21 24 28 29 30 32 33 34 35 36 38 40 41 42 43 45 46 47 48 51 52 53 54 55 59 # 21824 intersection c a 64 1 0 1 2 3 4 5 7 11 14 15 16 20 21 24 28 29 30 32 33 34 35 36 38 40 41 42 43 45 46 47 48 51 52 53 54 55 59 b 64 0 1 f # 21825 intersection c a 64 1 0 6 9 17 20 23 24 25 26 30 31 35 39 40 44 45 46 48 50 59 60 62 b 64 1 0 6 9 17 20 23 24 25 26 30 31 35 39 40 44 45 46 48 50 59 60 62 # 21826 intersection c a 64 1 0 6 9 17 20 23 24 25 26 30 31 35 39 40 44 45 46 48 50 59 60 62 b 64 0 1 3 6 8 9 10 11 12 13 14 17 18 19 20 22 24 26 27 28 29 30 32 36 37 38 39 40 41 43 44 50 52 53 55 # 21827 intersection c a 64 1 0 e b 64 1 0 e # 21828 intersection c a 64 1 0 e b 64 1 0 e # 21829 intersection c a 64 1 0 e b 64 1 0 e # 21830 intersection c a 64 1 0 e b 64 1 0 f # 21831 intersection c a 64 1 0 e b 64 1 0 e # 21832 intersection c a 64 1 0 e b 64 1 0 0 1 2 4 5 7 8 9 11 13 14 16 17 18 19 20 24 25 26 27 32 33 34 35 36 37 40 41 43 44 47 53 54 56 60 62 63 # 21833 intersection c a 64 1 0 f b 64 1 0 f # 21834 intersection c a 64 1 0 f b 64 1 0 e # 21835 intersection c a 64 1 0 f b 64 1 0 f # 21836 intersection c a 64 1 0 f b 64 1 0 f # 21837 intersection c a 64 1 0 f b 64 1 0 f # 21838 intersection c a 64 1 0 f b 64 1 0 5 6 8 9 11 13 16 17 18 20 22 23 24 25 27 31 32 33 36 37 39 40 41 42 46 50 52 53 55 56 57 58 60 63 # 21839 intersection c a 64 1 0 2 9 10 11 16 18 19 20 21 22 23 24 25 26 27 28 32 36 37 38 40 42 43 44 47 50 53 55 56 58 59 62 b 64 1 0 2 9 10 11 16 18 19 20 21 22 23 24 25 26 27 28 32 36 37 38 40 42 43 44 47 50 53 55 56 58 59 62 # 21840 intersection c a 64 1 0 2 9 10 11 16 18 19 20 21 22 23 24 25 26 27 28 32 36 37 38 40 42 43 44 47 50 53 55 56 58 59 62 b 64 1 0 e # 21841 intersection c a 64 1 0 0 3 6 7 8 9 10 11 14 15 16 17 19 20 22 24 25 28 31 32 33 35 38 39 41 42 43 49 51 55 56 57 59 60 61 62 63 b 64 1 0 0 3 6 7 8 9 10 11 14 15 16 17 19 20 22 24 25 28 31 32 33 35 38 39 41 42 43 49 51 55 56 57 59 60 61 62 63 # 21842 intersection c a 64 1 0 0 3 6 7 8 9 10 11 14 15 16 17 19 20 22 24 25 28 31 32 33 35 38 39 41 42 43 49 51 55 56 57 59 60 61 62 63 b 64 1 0 f # 21843 intersection c a 64 1 0 0 2 3 4 5 6 8 9 10 17 20 21 23 24 25 26 27 29 32 35 36 38 39 40 41 42 46 47 53 55 58 59 60 63 b 64 1 0 0 2 3 4 5 6 8 9 10 17 20 21 23 24 25 26 27 29 32 35 36 38 39 40 41 42 46 47 53 55 58 59 60 63 # 21844 intersection c a 64 1 0 0 2 3 4 5 6 8 9 10 17 20 21 23 24 25 26 27 29 32 35 36 38 39 40 41 42 46 47 53 55 58 59 60 63 b 64 1 0 2 4 5 7 8 10 12 13 14 15 16 20 24 25 27 29 30 31 35 38 39 40 41 49 50 53 54 55 56 58 62 # 21845 intersection c a 64 1 0 e b 64 1 0 e # 21846 intersection c a 64 1 0 e b 64 1 1 e # 21847 intersection c a 64 1 0 e b 64 1 0 e # 21848 intersection c a 64 1 0 e b 64 1 1 f # 21849 intersection c a 64 1 0 e b 64 1 0 e # 21850 intersection c a 64 1 0 e b 64 1 1 0 4 8 10 12 14 17 18 20 21 23 26 28 29 30 31 34 35 36 39 40 44 46 48 50 51 58 61 62 63 # 21851 intersection c a 64 1 0 f b 64 1 0 f # 21852 intersection c a 64 1 0 f b 64 1 1 e # 21853 intersection c a 64 1 0 f b 64 1 0 f # 21854 intersection c a 64 1 0 f b 64 1 1 f # 21855 intersection c a 64 1 0 f b 64 1 0 f # 21856 intersection c a 64 1 0 f b 64 1 1 1 2 6 7 8 11 14 16 17 19 20 21 26 27 29 31 32 35 38 42 43 44 45 48 49 51 53 55 57 59 60 61 62 # 21857 intersection c a 64 1 0 3 6 7 8 9 10 11 12 15 17 19 20 21 24 25 28 30 34 35 36 37 38 39 40 41 42 43 45 46 47 48 52 53 54 55 56 57 59 63 b 64 1 0 3 6 7 8 9 10 11 12 15 17 19 20 21 24 25 28 30 34 35 36 37 38 39 40 41 42 43 45 46 47 48 52 53 54 55 56 57 59 63 # 21858 intersection c a 64 1 0 3 6 7 8 9 10 11 12 15 17 19 20 21 24 25 28 30 34 35 36 37 38 39 40 41 42 43 45 46 47 48 52 53 54 55 56 57 59 63 b 64 1 1 e # 21859 intersection c a 64 1 0 0 2 3 5 6 8 13 14 18 22 27 29 32 34 36 37 39 41 42 43 44 45 46 47 49 51 55 57 59 60 61 63 b 64 1 0 0 2 3 5 6 8 13 14 18 22 27 29 32 34 36 37 39 41 42 43 44 45 46 47 49 51 55 57 59 60 61 63 # 21860 intersection c a 64 1 0 0 2 3 5 6 8 13 14 18 22 27 29 32 34 36 37 39 41 42 43 44 45 46 47 49 51 55 57 59 60 61 63 b 64 1 1 f # 21861 intersection c a 64 1 0 2 4 6 9 10 11 12 13 14 16 19 21 22 23 24 26 27 34 36 37 38 40 41 43 44 49 51 52 54 55 57 59 61 63 b 64 1 0 2 4 6 9 10 11 12 13 14 16 19 21 22 23 24 26 27 34 36 37 38 40 41 43 44 49 51 52 54 55 57 59 61 63 # 21862 intersection c a 64 1 0 2 4 6 9 10 11 12 13 14 16 19 21 22 23 24 26 27 34 36 37 38 40 41 43 44 49 51 52 54 55 57 59 61 63 b 64 1 1 1 4 5 6 8 9 14 15 18 19 20 21 22 24 26 27 30 31 33 35 36 37 39 40 41 46 48 49 54 57 59 60 61 # 21863 intersection c a 64 1 1 e b 64 1 1 e # 21864 intersection c a 64 1 1 e b 64 0 0 e # 21865 intersection c a 64 1 1 e b 64 1 1 e # 21866 intersection c a 64 1 1 e b 64 0 0 f # 21867 intersection c a 64 1 1 e b 64 1 1 e # 21868 intersection c a 64 1 1 e b 64 0 0 0 1 3 4 5 6 7 9 10 11 13 15 16 17 20 24 25 27 28 29 31 34 38 39 41 43 44 45 46 47 50 54 59 60 61 62 # 21869 intersection c a 64 1 1 f b 64 1 1 f # 21870 intersection c a 64 1 1 f b 64 0 0 e # 21871 intersection c a 64 1 1 f b 64 1 1 f # 21872 intersection c a 64 1 1 f b 64 0 0 f # 21873 intersection c a 64 1 1 f b 64 1 1 f # 21874 intersection c a 64 1 1 f b 64 0 0 2 4 5 8 9 11 13 15 19 20 24 25 27 29 31 33 36 38 43 45 46 52 57 59 60 # 21875 intersection c a 64 1 1 1 2 5 6 8 9 12 13 14 15 17 19 21 23 25 29 31 32 34 35 36 37 39 40 41 44 45 47 48 49 50 55 57 60 61 b 64 1 1 1 2 5 6 8 9 12 13 14 15 17 19 21 23 25 29 31 32 34 35 36 37 39 40 41 44 45 47 48 49 50 55 57 60 61 # 21876 intersection c a 64 1 1 1 2 5 6 8 9 12 13 14 15 17 19 21 23 25 29 31 32 34 35 36 37 39 40 41 44 45 47 48 49 50 55 57 60 61 b 64 0 0 e # 21877 intersection c a 64 1 1 0 3 4 5 6 7 8 13 18 19 20 21 22 24 26 28 29 30 31 34 37 38 42 44 46 48 51 54 56 57 58 59 60 61 62 63 b 64 1 1 0 3 4 5 6 7 8 13 18 19 20 21 22 24 26 28 29 30 31 34 37 38 42 44 46 48 51 54 56 57 58 59 60 61 62 63 # 21878 intersection c a 64 1 1 0 3 4 5 6 7 8 13 18 19 20 21 22 24 26 28 29 30 31 34 37 38 42 44 46 48 51 54 56 57 58 59 60 61 62 63 b 64 0 0 f # 21879 intersection c a 64 1 1 1 3 4 6 7 9 12 14 15 16 20 23 27 28 30 32 34 35 37 38 39 40 43 48 49 51 53 54 55 58 61 b 64 1 1 1 3 4 6 7 9 12 14 15 16 20 23 27 28 30 32 34 35 37 38 39 40 43 48 49 51 53 54 55 58 61 # 21880 intersection c a 64 1 1 1 3 4 6 7 9 12 14 15 16 20 23 27 28 30 32 34 35 37 38 39 40 43 48 49 51 53 54 55 58 61 b 64 0 0 0 5 9 10 11 14 19 22 23 26 27 32 33 34 36 38 39 41 42 43 45 47 49 50 51 52 56 60 61 63 # 21881 intersection c a 64 1 1 e b 64 1 1 e # 21882 intersection c a 64 1 1 e b 64 0 1 e # 21883 intersection c a 64 1 1 e b 64 1 1 e # 21884 intersection c a 64 1 1 e b 64 0 1 f # 21885 intersection c a 64 1 1 e b 64 1 1 e # 21886 intersection c a 64 1 1 e b 64 0 1 0 7 8 12 13 14 17 18 22 24 27 29 30 34 35 36 39 41 42 44 45 46 48 49 50 51 53 57 59 60 62 63 # 21887 intersection c a 64 1 1 f b 64 1 1 f # 21888 intersection c a 64 1 1 f b 64 0 1 e # 21889 intersection c a 64 1 1 f b 64 1 1 f # 21890 intersection c a 64 1 1 f b 64 0 1 f # 21891 intersection c a 64 1 1 f b 64 1 1 f # 21892 intersection c a 64 1 1 f b 64 0 1 0 1 2 4 10 11 13 15 17 18 19 20 22 23 24 26 27 29 30 34 36 37 38 39 41 42 44 50 51 52 53 54 55 57 59 62 63 # 21893 intersection c a 64 1 1 0 1 4 7 12 13 15 18 21 22 23 24 28 33 34 35 38 39 40 42 43 46 47 48 49 52 56 57 58 61 62 b 64 1 1 0 1 4 7 12 13 15 18 21 22 23 24 28 33 34 35 38 39 40 42 43 46 47 48 49 52 56 57 58 61 62 # 21894 intersection c a 64 1 1 0 1 4 7 12 13 15 18 21 22 23 24 28 33 34 35 38 39 40 42 43 46 47 48 49 52 56 57 58 61 62 b 64 0 1 e # 21895 intersection c a 64 1 1 0 1 3 6 8 9 13 16 17 18 20 21 22 23 24 25 27 28 33 35 40 42 50 53 54 55 58 62 63 b 64 1 1 0 1 3 6 8 9 13 16 17 18 20 21 22 23 24 25 27 28 33 35 40 42 50 53 54 55 58 62 63 # 21896 intersection c a 64 1 1 0 1 3 6 8 9 13 16 17 18 20 21 22 23 24 25 27 28 33 35 40 42 50 53 54 55 58 62 63 b 64 0 1 f # 21897 intersection c a 64 1 1 3 5 10 11 12 14 17 19 22 23 24 25 29 30 31 34 35 40 41 43 46 47 48 52 55 56 57 58 60 61 62 63 b 64 1 1 3 5 10 11 12 14 17 19 22 23 24 25 29 30 31 34 35 40 41 43 46 47 48 52 55 56 57 58 60 61 62 63 # 21898 intersection c a 64 1 1 3 5 10 11 12 14 17 19 22 23 24 25 29 30 31 34 35 40 41 43 46 47 48 52 55 56 57 58 60 61 62 63 b 64 0 1 1 2 3 4 5 7 8 12 14 15 16 19 20 21 22 23 25 26 28 29 32 33 34 35 36 39 40 41 48 55 56 58 59 62 63 # 21899 intersection c a 64 1 1 e b 64 1 1 e # 21900 intersection c a 64 1 1 e b 64 1 0 e # 21901 intersection c a 64 1 1 e b 64 1 1 e # 21902 intersection c a 64 1 1 e b 64 1 0 f # 21903 intersection c a 64 1 1 e b 64 1 1 e # 21904 intersection c a 64 1 1 e b 64 1 0 1 2 7 11 12 13 17 18 20 23 26 27 29 30 31 32 34 35 36 38 39 40 42 45 46 48 49 50 51 54 55 59 62 63 # 21905 intersection c a 64 1 1 f b 64 1 1 f # 21906 intersection c a 64 1 1 f b 64 1 0 e # 21907 intersection c a 64 1 1 f b 64 1 1 f # 21908 intersection c a 64 1 1 f b 64 1 0 f # 21909 intersection c a 64 1 1 f b 64 1 1 f # 21910 intersection c a 64 1 1 f b 64 1 0 0 1 2 4 5 7 11 15 18 23 24 25 26 28 29 31 37 39 40 44 45 47 48 49 53 58 61 63 # 21911 intersection c a 64 1 1 8 9 11 13 14 16 18 20 22 24 26 30 31 32 35 36 39 41 43 52 54 55 56 57 58 61 62 63 b 64 1 1 8 9 11 13 14 16 18 20 22 24 26 30 31 32 35 36 39 41 43 52 54 55 56 57 58 61 62 63 # 21912 intersection c a 64 1 1 8 9 11 13 14 16 18 20 22 24 26 30 31 32 35 36 39 41 43 52 54 55 56 57 58 61 62 63 b 64 1 0 e # 21913 intersection c a 64 1 1 2 3 4 6 7 8 10 13 14 15 19 22 25 27 28 30 31 32 33 34 36 37 39 40 49 51 55 56 57 58 59 62 63 b 64 1 1 2 3 4 6 7 8 10 13 14 15 19 22 25 27 28 30 31 32 33 34 36 37 39 40 49 51 55 56 57 58 59 62 63 # 21914 intersection c a 64 1 1 2 3 4 6 7 8 10 13 14 15 19 22 25 27 28 30 31 32 33 34 36 37 39 40 49 51 55 56 57 58 59 62 63 b 64 1 0 f # 21915 intersection c a 64 1 1 1 5 9 10 12 14 19 20 21 22 23 25 27 30 32 34 37 38 40 41 42 43 45 47 49 50 53 54 55 56 58 59 60 63 b 64 1 1 1 5 9 10 12 14 19 20 21 22 23 25 27 30 32 34 37 38 40 41 42 43 45 47 49 50 53 54 55 56 58 59 60 63 # 21916 intersection c a 64 1 1 1 5 9 10 12 14 19 20 21 22 23 25 27 30 32 34 37 38 40 41 42 43 45 47 49 50 53 54 55 56 58 59 60 63 b 64 1 0 0 3 7 10 11 13 14 15 16 17 20 24 25 29 36 37 39 42 43 46 47 49 51 55 57 59 60 61 # 21917 intersection c a 64 1 1 e b 64 1 1 e # 21918 intersection c a 64 1 1 e b 64 1 1 e # 21919 intersection c a 64 1 1 e b 64 1 1 e # 21920 intersection c a 64 1 1 e b 64 1 1 f # 21921 intersection c a 64 1 1 e b 64 1 1 e # 21922 intersection c a 64 1 1 e b 64 1 1 2 3 6 9 11 13 14 16 17 21 23 24 25 26 27 31 32 33 34 35 37 39 41 43 44 47 49 50 51 52 54 55 56 57 58 60 61 63 # 21923 intersection c a 64 1 1 f b 64 1 1 f # 21924 intersection c a 64 1 1 f b 64 1 1 e # 21925 intersection c a 64 1 1 f b 64 1 1 f # 21926 intersection c a 64 1 1 f b 64 1 1 f # 21927 intersection c a 64 1 1 f b 64 1 1 f # 21928 intersection c a 64 1 1 f b 64 1 1 0 1 2 4 6 8 10 11 12 15 16 18 19 20 23 30 33 36 39 40 42 43 44 46 47 48 52 53 60 62 # 21929 intersection c a 64 1 1 2 4 7 8 9 15 16 17 19 20 21 22 23 28 30 36 37 38 40 42 43 44 46 48 51 54 56 58 59 62 63 b 64 1 1 2 4 7 8 9 15 16 17 19 20 21 22 23 28 30 36 37 38 40 42 43 44 46 48 51 54 56 58 59 62 63 # 21930 intersection c a 64 1 1 2 4 7 8 9 15 16 17 19 20 21 22 23 28 30 36 37 38 40 42 43 44 46 48 51 54 56 58 59 62 63 b 64 1 1 e # 21931 intersection c a 64 1 1 0 3 7 8 10 13 14 19 21 25 26 27 29 30 33 35 38 39 40 41 44 46 48 49 50 52 58 59 61 63 b 64 1 1 0 3 7 8 10 13 14 19 21 25 26 27 29 30 33 35 38 39 40 41 44 46 48 49 50 52 58 59 61 63 # 21932 intersection c a 64 1 1 0 3 7 8 10 13 14 19 21 25 26 27 29 30 33 35 38 39 40 41 44 46 48 49 50 52 58 59 61 63 b 64 1 1 f # 21933 intersection c a 64 1 1 0 2 3 4 6 7 10 11 12 13 15 16 18 19 22 23 24 25 28 29 36 38 39 40 41 42 43 44 46 49 51 54 58 59 60 b 64 1 1 0 2 3 4 6 7 10 11 12 13 15 16 18 19 22 23 24 25 28 29 36 38 39 40 41 42 43 44 46 49 51 54 58 59 60 # 21934 intersection c a 64 1 1 0 2 3 4 6 7 10 11 12 13 15 16 18 19 22 23 24 25 28 29 36 38 39 40 41 42 43 44 46 49 51 54 58 59 60 b 64 1 1 1 14 15 16 17 18 21 24 27 29 31 32 33 38 39 40 42 44 45 47 48 50 51 52 55 56 57 58 60 63 # 21935 intersection c a 65 0 0 e b 65 0 0 e # 21936 intersection c a 65 0 0 e b 65 0 0 e # 21937 intersection c a 65 0 0 e b 65 0 0 e # 21938 intersection c a 65 0 0 e b 65 0 0 f # 21939 intersection c a 65 0 0 e b 65 0 0 e # 21940 intersection c a 65 0 0 e b 65 0 0 0 4 6 7 8 9 10 11 12 20 21 23 24 26 27 28 30 31 32 34 35 36 37 39 40 42 43 44 48 49 50 51 52 55 56 58 60 61 # 21941 intersection c a 65 0 0 f b 65 0 0 f # 21942 intersection c a 65 0 0 f b 65 0 0 e # 21943 intersection c a 65 0 0 f b 65 0 0 f # 21944 intersection c a 65 0 0 f b 65 0 0 f # 21945 intersection c a 65 0 0 f b 65 0 0 f # 21946 intersection c a 65 0 0 f b 65 0 0 4 8 9 10 14 15 16 17 18 22 23 27 28 29 31 35 36 39 42 43 45 46 48 50 51 52 53 54 59 62 64 # 21947 intersection c a 65 0 0 2 3 4 7 9 12 13 16 20 22 24 25 28 29 31 33 34 37 39 40 41 43 44 45 46 48 50 51 52 53 57 58 60 61 64 b 65 0 0 2 3 4 7 9 12 13 16 20 22 24 25 28 29 31 33 34 37 39 40 41 43 44 45 46 48 50 51 52 53 57 58 60 61 64 # 21948 intersection c a 65 0 0 2 3 4 7 9 12 13 16 20 22 24 25 28 29 31 33 34 37 39 40 41 43 44 45 46 48 50 51 52 53 57 58 60 61 64 b 65 0 0 e # 21949 intersection c a 65 0 0 0 3 4 6 8 9 11 12 13 14 15 16 17 18 20 22 23 24 27 29 30 35 36 39 41 42 43 46 49 50 52 53 54 55 56 58 61 62 b 65 0 0 0 3 4 6 8 9 11 12 13 14 15 16 17 18 20 22 23 24 27 29 30 35 36 39 41 42 43 46 49 50 52 53 54 55 56 58 61 62 # 21950 intersection c a 65 0 0 0 3 4 6 8 9 11 12 13 14 15 16 17 18 20 22 23 24 27 29 30 35 36 39 41 42 43 46 49 50 52 53 54 55 56 58 61 62 b 65 0 0 f # 21951 intersection c a 65 0 0 3 4 7 11 14 15 18 19 21 22 23 24 26 27 31 32 33 34 35 38 39 41 43 46 47 48 49 50 51 52 53 54 55 57 58 59 62 b 65 0 0 3 4 7 11 14 15 18 19 21 22 23 24 26 27 31 32 33 34 35 38 39 41 43 46 47 48 49 50 51 52 53 54 55 57 58 59 62 # 21952 intersection c a 65 0 0 3 4 7 11 14 15 18 19 21 22 23 24 26 27 31 32 33 34 35 38 39 41 43 46 47 48 49 50 51 52 53 54 55 57 58 59 62 b 65 0 0 0 2 3 4 7 8 12 15 16 19 20 22 23 24 25 26 36 37 39 40 41 43 46 48 50 51 53 56 58 60 # 21953 intersection c a 65 0 0 e b 65 0 0 e # 21954 intersection c a 65 0 0 e b 65 0 1 e # 21955 intersection c a 65 0 0 e b 65 0 0 e # 21956 intersection c a 65 0 0 e b 65 0 1 f # 21957 intersection c a 65 0 0 e b 65 0 0 e # 21958 intersection c a 65 0 0 e b 65 0 1 0 1 5 11 13 16 18 19 20 25 26 30 31 32 37 41 43 44 45 48 51 52 53 54 55 57 59 62 64 # 21959 intersection c a 65 0 0 f b 65 0 0 f # 21960 intersection c a 65 0 0 f b 65 0 1 e # 21961 intersection c a 65 0 0 f b 65 0 0 f # 21962 intersection c a 65 0 0 f b 65 0 1 f # 21963 intersection c a 65 0 0 f b 65 0 0 f # 21964 intersection c a 65 0 0 f b 65 0 1 2 4 6 7 8 10 12 15 18 21 22 27 29 34 36 39 40 41 43 45 46 47 48 50 53 57 60 61 62 63 # 21965 intersection c a 65 0 0 0 5 9 10 11 12 14 20 21 23 25 27 28 31 32 34 38 39 42 43 44 45 48 49 50 51 52 55 57 58 62 64 b 65 0 0 0 5 9 10 11 12 14 20 21 23 25 27 28 31 32 34 38 39 42 43 44 45 48 49 50 51 52 55 57 58 62 64 # 21966 intersection c a 65 0 0 0 5 9 10 11 12 14 20 21 23 25 27 28 31 32 34 38 39 42 43 44 45 48 49 50 51 52 55 57 58 62 64 b 65 0 1 e # 21967 intersection c a 65 0 0 0 5 7 8 10 12 16 20 23 25 28 31 32 34 38 40 41 42 43 44 47 52 53 54 55 60 61 62 63 b 65 0 0 0 5 7 8 10 12 16 20 23 25 28 31 32 34 38 40 41 42 43 44 47 52 53 54 55 60 61 62 63 # 21968 intersection c a 65 0 0 0 5 7 8 10 12 16 20 23 25 28 31 32 34 38 40 41 42 43 44 47 52 53 54 55 60 61 62 63 b 65 0 1 f # 21969 intersection c a 65 0 0 0 1 2 4 5 7 8 10 11 13 15 16 17 18 19 20 21 23 26 27 33 34 36 39 40 41 42 44 47 48 49 51 52 53 54 55 58 59 60 b 65 0 0 0 1 2 4 5 7 8 10 11 13 15 16 17 18 19 20 21 23 26 27 33 34 36 39 40 41 42 44 47 48 49 51 52 53 54 55 58 59 60 # 21970 intersection c a 65 0 0 0 1 2 4 5 7 8 10 11 13 15 16 17 18 19 20 21 23 26 27 33 34 36 39 40 41 42 44 47 48 49 51 52 53 54 55 58 59 60 b 65 0 1 1 3 5 8 9 10 11 12 13 14 15 17 18 19 21 23 24 25 26 27 35 37 38 41 44 47 48 50 52 55 58 60 61 62 # 21971 intersection c a 65 0 0 e b 65 0 0 e # 21972 intersection c a 65 0 0 e b 65 1 0 e # 21973 intersection c a 65 0 0 e b 65 0 0 e # 21974 intersection c a 65 0 0 e b 65 1 0 f # 21975 intersection c a 65 0 0 e b 65 0 0 e # 21976 intersection c a 65 0 0 e b 65 1 0 2 3 9 10 11 13 14 15 16 18 20 25 28 29 30 32 33 36 37 40 45 46 49 50 51 58 # 21977 intersection c a 65 0 0 f b 65 0 0 f # 21978 intersection c a 65 0 0 f b 65 1 0 e # 21979 intersection c a 65 0 0 f b 65 0 0 f # 21980 intersection c a 65 0 0 f b 65 1 0 f # 21981 intersection c a 65 0 0 f b 65 0 0 f # 21982 intersection c a 65 0 0 f b 65 1 0 0 4 5 8 10 11 21 22 23 24 25 32 33 34 35 37 43 44 45 48 49 50 52 57 58 59 64 # 21983 intersection c a 65 0 0 0 3 4 5 12 17 19 21 23 27 30 32 37 38 39 41 42 46 47 48 49 52 53 56 58 60 61 62 63 64 b 65 0 0 0 3 4 5 12 17 19 21 23 27 30 32 37 38 39 41 42 46 47 48 49 52 53 56 58 60 61 62 63 64 # 21984 intersection c a 65 0 0 0 3 4 5 12 17 19 21 23 27 30 32 37 38 39 41 42 46 47 48 49 52 53 56 58 60 61 62 63 64 b 65 1 0 e # 21985 intersection c a 65 0 0 4 5 6 7 8 12 15 16 18 20 21 24 25 27 28 29 30 33 34 36 37 39 41 44 47 48 49 51 52 53 54 55 56 58 59 b 65 0 0 4 5 6 7 8 12 15 16 18 20 21 24 25 27 28 29 30 33 34 36 37 39 41 44 47 48 49 51 52 53 54 55 56 58 59 # 21986 intersection c a 65 0 0 4 5 6 7 8 12 15 16 18 20 21 24 25 27 28 29 30 33 34 36 37 39 41 44 47 48 49 51 52 53 54 55 56 58 59 b 65 1 0 f # 21987 intersection c a 65 0 0 1 4 7 8 9 10 12 15 16 17 18 20 21 24 25 29 30 32 34 35 36 40 42 43 44 45 46 48 49 50 51 52 55 57 58 60 61 62 64 b 65 0 0 1 4 7 8 9 10 12 15 16 17 18 20 21 24 25 29 30 32 34 35 36 40 42 43 44 45 46 48 49 50 51 52 55 57 58 60 61 62 64 # 21988 intersection c a 65 0 0 1 4 7 8 9 10 12 15 16 17 18 20 21 24 25 29 30 32 34 35 36 40 42 43 44 45 46 48 49 50 51 52 55 57 58 60 61 62 64 b 65 1 0 0 2 3 4 6 7 8 9 10 11 12 14 15 17 18 21 22 23 24 26 31 34 37 40 41 43 46 49 50 51 52 53 54 56 58 60 64 # 21989 intersection c a 65 0 0 e b 65 0 0 e # 21990 intersection c a 65 0 0 e b 65 1 1 e # 21991 intersection c a 65 0 0 e b 65 0 0 e # 21992 intersection c a 65 0 0 e b 65 1 1 f # 21993 intersection c a 65 0 0 e b 65 0 0 e # 21994 intersection c a 65 0 0 e b 65 1 1 4 5 7 10 11 17 18 20 26 27 28 30 31 32 33 36 39 40 42 43 44 45 48 51 52 53 54 57 59 61 62 63 64 # 21995 intersection c a 65 0 0 f b 65 0 0 f # 21996 intersection c a 65 0 0 f b 65 1 1 e # 21997 intersection c a 65 0 0 f b 65 0 0 f # 21998 intersection c a 65 0 0 f b 65 1 1 f # 21999 intersection c a 65 0 0 f b 65 0 0 f # 22000 intersection c a 65 0 0 f b 65 1 1 2 3 4 5 7 10 12 13 15 18 21 31 32 33 35 36 37 38 42 47 49 51 52 53 54 59 60 61 63 64 # 22001 intersection c a 65 0 0 0 1 3 5 7 9 11 12 15 16 17 18 20 22 24 28 31 33 34 35 38 39 42 44 45 48 50 51 53 57 58 61 63 64 b 65 0 0 0 1 3 5 7 9 11 12 15 16 17 18 20 22 24 28 31 33 34 35 38 39 42 44 45 48 50 51 53 57 58 61 63 64 # 22002 intersection c a 65 0 0 0 1 3 5 7 9 11 12 15 16 17 18 20 22 24 28 31 33 34 35 38 39 42 44 45 48 50 51 53 57 58 61 63 64 b 65 1 1 e # 22003 intersection c a 65 0 0 3 6 8 11 13 14 15 16 17 22 25 26 29 30 38 43 44 46 47 49 51 53 55 56 58 61 62 b 65 0 0 3 6 8 11 13 14 15 16 17 22 25 26 29 30 38 43 44 46 47 49 51 53 55 56 58 61 62 # 22004 intersection c a 65 0 0 3 6 8 11 13 14 15 16 17 22 25 26 29 30 38 43 44 46 47 49 51 53 55 56 58 61 62 b 65 1 1 f # 22005 intersection c a 65 0 0 0 1 2 4 6 8 9 13 14 17 18 21 23 24 26 27 30 33 36 38 39 40 41 42 44 45 46 49 51 52 53 60 62 64 b 65 0 0 0 1 2 4 6 8 9 13 14 17 18 21 23 24 26 27 30 33 36 38 39 40 41 42 44 45 46 49 51 52 53 60 62 64 # 22006 intersection c a 65 0 0 0 1 2 4 6 8 9 13 14 17 18 21 23 24 26 27 30 33 36 38 39 40 41 42 44 45 46 49 51 52 53 60 62 64 b 65 1 1 1 2 4 5 7 8 9 10 12 13 14 15 17 18 23 25 26 27 28 30 31 33 35 37 38 40 42 43 45 46 47 49 51 52 53 56 61 63 64 # 22007 intersection c a 65 0 1 e b 65 0 1 e # 22008 intersection c a 65 0 1 e b 65 0 0 e # 22009 intersection c a 65 0 1 e b 65 0 1 e # 22010 intersection c a 65 0 1 e b 65 0 0 f # 22011 intersection c a 65 0 1 e b 65 0 1 e # 22012 intersection c a 65 0 1 e b 65 0 0 0 1 3 6 7 9 11 12 15 16 18 20 23 25 32 36 41 45 46 48 49 50 51 52 53 54 56 58 59 64 # 22013 intersection c a 65 0 1 f b 65 0 1 f # 22014 intersection c a 65 0 1 f b 65 0 0 e # 22015 intersection c a 65 0 1 f b 65 0 1 f # 22016 intersection c a 65 0 1 f b 65 0 0 f # 22017 intersection c a 65 0 1 f b 65 0 1 f # 22018 intersection c a 65 0 1 f b 65 0 0 1 2 3 5 6 10 11 14 15 16 17 18 19 22 23 25 27 28 29 32 38 41 43 44 46 47 49 50 51 53 55 57 61 62 # 22019 intersection c a 65 0 1 5 6 7 9 10 11 13 16 17 19 24 25 26 27 28 29 30 31 35 38 39 41 42 43 44 46 47 51 52 53 54 57 60 64 b 65 0 1 5 6 7 9 10 11 13 16 17 19 24 25 26 27 28 29 30 31 35 38 39 41 42 43 44 46 47 51 52 53 54 57 60 64 # 22020 intersection c a 65 0 1 5 6 7 9 10 11 13 16 17 19 24 25 26 27 28 29 30 31 35 38 39 41 42 43 44 46 47 51 52 53 54 57 60 64 b 65 0 0 e # 22021 intersection c a 65 0 1 0 1 4 13 14 15 21 22 25 26 31 35 36 37 39 40 41 44 46 48 55 60 63 64 b 65 0 1 0 1 4 13 14 15 21 22 25 26 31 35 36 37 39 40 41 44 46 48 55 60 63 64 # 22022 intersection c a 65 0 1 0 1 4 13 14 15 21 22 25 26 31 35 36 37 39 40 41 44 46 48 55 60 63 64 b 65 0 0 f # 22023 intersection c a 65 0 1 0 1 2 5 9 10 12 16 18 19 20 24 25 31 33 35 36 37 38 39 40 41 45 46 47 50 52 54 55 56 57 58 b 65 0 1 0 1 2 5 9 10 12 16 18 19 20 24 25 31 33 35 36 37 38 39 40 41 45 46 47 50 52 54 55 56 57 58 # 22024 intersection c a 65 0 1 0 1 2 5 9 10 12 16 18 19 20 24 25 31 33 35 36 37 38 39 40 41 45 46 47 50 52 54 55 56 57 58 b 65 0 0 0 2 3 5 9 12 17 19 21 22 24 25 26 31 34 35 38 39 43 44 45 51 53 56 58 63 64 # 22025 intersection c a 65 0 1 e b 65 0 1 e # 22026 intersection c a 65 0 1 e b 65 0 1 e # 22027 intersection c a 65 0 1 e b 65 0 1 e # 22028 intersection c a 65 0 1 e b 65 0 1 f # 22029 intersection c a 65 0 1 e b 65 0 1 e # 22030 intersection c a 65 0 1 e b 65 0 1 0 1 4 12 13 14 16 17 18 19 22 24 26 29 30 32 34 38 39 40 41 44 45 46 47 48 50 51 52 53 55 56 58 61 62 # 22031 intersection c a 65 0 1 f b 65 0 1 f # 22032 intersection c a 65 0 1 f b 65 0 1 e # 22033 intersection c a 65 0 1 f b 65 0 1 f # 22034 intersection c a 65 0 1 f b 65 0 1 f # 22035 intersection c a 65 0 1 f b 65 0 1 f # 22036 intersection c a 65 0 1 f b 65 0 1 0 1 2 3 5 6 8 11 12 13 14 16 17 21 23 24 25 27 28 31 33 34 35 36 39 40 42 43 50 60 61 62 64 # 22037 intersection c a 65 0 1 0 1 6 7 8 9 12 14 18 22 23 24 25 26 27 28 31 33 34 37 40 42 43 44 48 50 52 55 61 63 64 b 65 0 1 0 1 6 7 8 9 12 14 18 22 23 24 25 26 27 28 31 33 34 37 40 42 43 44 48 50 52 55 61 63 64 # 22038 intersection c a 65 0 1 0 1 6 7 8 9 12 14 18 22 23 24 25 26 27 28 31 33 34 37 40 42 43 44 48 50 52 55 61 63 64 b 65 0 1 e # 22039 intersection c a 65 0 1 6 7 9 10 11 12 16 17 18 20 21 22 26 28 31 32 36 40 42 43 50 52 53 60 61 b 65 0 1 6 7 9 10 11 12 16 17 18 20 21 22 26 28 31 32 36 40 42 43 50 52 53 60 61 # 22040 intersection c a 65 0 1 6 7 9 10 11 12 16 17 18 20 21 22 26 28 31 32 36 40 42 43 50 52 53 60 61 b 65 0 1 f # 22041 intersection c a 65 0 1 1 3 4 6 9 10 11 12 20 22 24 25 26 27 30 31 36 40 43 47 48 50 51 52 53 55 56 58 59 60 61 62 63 64 b 65 0 1 1 3 4 6 9 10 11 12 20 22 24 25 26 27 30 31 36 40 43 47 48 50 51 52 53 55 56 58 59 60 61 62 63 64 # 22042 intersection c a 65 0 1 1 3 4 6 9 10 11 12 20 22 24 25 26 27 30 31 36 40 43 47 48 50 51 52 53 55 56 58 59 60 61 62 63 64 b 65 0 1 2 4 5 7 11 12 14 17 19 20 22 24 25 26 27 29 30 31 35 37 38 39 43 44 47 48 50 51 52 53 55 59 62 64 # 22043 intersection c a 65 0 1 e b 65 0 1 e # 22044 intersection c a 65 0 1 e b 65 1 0 e # 22045 intersection c a 65 0 1 e b 65 0 1 e # 22046 intersection c a 65 0 1 e b 65 1 0 f # 22047 intersection c a 65 0 1 e b 65 0 1 e # 22048 intersection c a 65 0 1 e b 65 1 0 0 3 5 6 7 9 10 11 13 14 15 16 17 20 22 24 25 27 28 29 30 31 33 35 36 38 41 43 45 48 49 50 51 53 54 55 56 58 61 63 64 # 22049 intersection c a 65 0 1 f b 65 0 1 f # 22050 intersection c a 65 0 1 f b 65 1 0 e # 22051 intersection c a 65 0 1 f b 65 0 1 f # 22052 intersection c a 65 0 1 f b 65 1 0 f # 22053 intersection c a 65 0 1 f b 65 0 1 f # 22054 intersection c a 65 0 1 f b 65 1 0 0 1 2 4 6 7 12 15 17 19 20 22 26 27 29 30 32 35 36 38 40 41 42 43 45 46 47 48 49 50 51 56 64 # 22055 intersection c a 65 0 1 0 5 6 9 10 18 19 20 24 25 26 27 30 32 36 42 43 44 47 48 49 50 51 55 56 58 60 61 63 64 b 65 0 1 0 5 6 9 10 18 19 20 24 25 26 27 30 32 36 42 43 44 47 48 49 50 51 55 56 58 60 61 63 64 # 22056 intersection c a 65 0 1 0 5 6 9 10 18 19 20 24 25 26 27 30 32 36 42 43 44 47 48 49 50 51 55 56 58 60 61 63 64 b 65 1 0 e # 22057 intersection c a 65 0 1 0 2 4 6 7 10 11 12 13 14 15 17 18 19 21 22 23 24 25 26 27 29 30 33 34 35 37 38 39 41 42 43 45 46 47 48 49 50 52 55 59 64 b 65 0 1 0 2 4 6 7 10 11 12 13 14 15 17 18 19 21 22 23 24 25 26 27 29 30 33 34 35 37 38 39 41 42 43 45 46 47 48 49 50 52 55 59 64 # 22058 intersection c a 65 0 1 0 2 4 6 7 10 11 12 13 14 15 17 18 19 21 22 23 24 25 26 27 29 30 33 34 35 37 38 39 41 42 43 45 46 47 48 49 50 52 55 59 64 b 65 1 0 f # 22059 intersection c a 65 0 1 5 8 10 13 15 18 19 20 23 24 28 29 34 35 38 40 41 42 43 45 46 47 49 50 56 59 61 b 65 0 1 5 8 10 13 15 18 19 20 23 24 28 29 34 35 38 40 41 42 43 45 46 47 49 50 56 59 61 # 22060 intersection c a 65 0 1 5 8 10 13 15 18 19 20 23 24 28 29 34 35 38 40 41 42 43 45 46 47 49 50 56 59 61 b 65 1 0 2 5 7 8 11 15 19 20 22 24 25 27 29 30 31 33 36 40 41 43 46 47 48 50 51 52 53 54 55 56 63 # 22061 intersection c a 65 0 1 e b 65 0 1 e # 22062 intersection c a 65 0 1 e b 65 1 1 e # 22063 intersection c a 65 0 1 e b 65 0 1 e # 22064 intersection c a 65 0 1 e b 65 1 1 f # 22065 intersection c a 65 0 1 e b 65 0 1 e # 22066 intersection c a 65 0 1 e b 65 1 1 2 3 4 6 7 8 9 12 15 17 18 20 24 25 26 28 29 30 32 33 35 39 40 41 43 44 46 52 53 54 55 57 60 62 63 64 # 22067 intersection c a 65 0 1 f b 65 0 1 f # 22068 intersection c a 65 0 1 f b 65 1 1 e # 22069 intersection c a 65 0 1 f b 65 0 1 f # 22070 intersection c a 65 0 1 f b 65 1 1 f # 22071 intersection c a 65 0 1 f b 65 0 1 f # 22072 intersection c a 65 0 1 f b 65 1 1 3 4 6 7 10 11 13 15 17 18 20 21 22 23 26 31 32 33 35 36 38 40 43 45 46 47 48 51 53 54 57 58 # 22073 intersection c a 65 0 1 0 3 4 5 6 9 10 13 15 21 23 24 25 31 32 33 34 35 37 39 42 43 46 50 51 52 54 55 57 58 b 65 0 1 0 3 4 5 6 9 10 13 15 21 23 24 25 31 32 33 34 35 37 39 42 43 46 50 51 52 54 55 57 58 # 22074 intersection c a 65 0 1 0 3 4 5 6 9 10 13 15 21 23 24 25 31 32 33 34 35 37 39 42 43 46 50 51 52 54 55 57 58 b 65 1 1 e # 22075 intersection c a 65 0 1 1 2 6 9 10 11 12 15 16 17 18 20 21 23 24 25 31 35 36 37 40 41 42 51 53 54 55 56 57 61 63 64 b 65 0 1 1 2 6 9 10 11 12 15 16 17 18 20 21 23 24 25 31 35 36 37 40 41 42 51 53 54 55 56 57 61 63 64 # 22076 intersection c a 65 0 1 1 2 6 9 10 11 12 15 16 17 18 20 21 23 24 25 31 35 36 37 40 41 42 51 53 54 55 56 57 61 63 64 b 65 1 1 f # 22077 intersection c a 65 0 1 0 1 2 3 4 5 7 8 9 15 16 19 22 26 28 29 31 33 36 37 39 40 41 45 49 52 54 56 58 59 61 63 64 b 65 0 1 0 1 2 3 4 5 7 8 9 15 16 19 22 26 28 29 31 33 36 37 39 40 41 45 49 52 54 56 58 59 61 63 64 # 22078 intersection c a 65 0 1 0 1 2 3 4 5 7 8 9 15 16 19 22 26 28 29 31 33 36 37 39 40 41 45 49 52 54 56 58 59 61 63 64 b 65 1 1 0 2 3 4 5 6 10 11 12 13 15 17 18 23 24 25 27 29 30 33 35 36 40 43 46 50 51 52 54 55 57 58 59 60 61 64 # 22079 intersection c a 65 1 0 e b 65 1 0 e # 22080 intersection c a 65 1 0 e b 65 0 0 e # 22081 intersection c a 65 1 0 e b 65 1 0 e # 22082 intersection c a 65 1 0 e b 65 0 0 f # 22083 intersection c a 65 1 0 e b 65 1 0 e # 22084 intersection c a 65 1 0 e b 65 0 0 0 2 4 5 7 11 12 13 14 16 17 19 21 24 25 29 31 32 33 35 36 38 40 41 42 43 44 45 48 53 54 56 58 59 60 61 62 63 64 # 22085 intersection c a 65 1 0 f b 65 1 0 f # 22086 intersection c a 65 1 0 f b 65 0 0 e # 22087 intersection c a 65 1 0 f b 65 1 0 f # 22088 intersection c a 65 1 0 f b 65 0 0 f # 22089 intersection c a 65 1 0 f b 65 1 0 f # 22090 intersection c a 65 1 0 f b 65 0 0 1 2 3 13 14 15 19 20 21 22 25 28 31 32 34 36 38 39 43 44 46 53 54 55 56 57 61 # 22091 intersection c a 65 1 0 1 2 4 5 6 7 9 10 12 14 18 24 25 29 30 33 34 36 37 39 40 43 47 48 52 53 57 58 59 60 61 b 65 1 0 1 2 4 5 6 7 9 10 12 14 18 24 25 29 30 33 34 36 37 39 40 43 47 48 52 53 57 58 59 60 61 # 22092 intersection c a 65 1 0 1 2 4 5 6 7 9 10 12 14 18 24 25 29 30 33 34 36 37 39 40 43 47 48 52 53 57 58 59 60 61 b 65 0 0 e # 22093 intersection c a 65 1 0 4 7 8 12 15 16 18 19 20 23 25 26 27 29 33 34 36 37 39 41 42 43 46 48 49 50 51 52 54 61 62 63 b 65 1 0 4 7 8 12 15 16 18 19 20 23 25 26 27 29 33 34 36 37 39 41 42 43 46 48 49 50 51 52 54 61 62 63 # 22094 intersection c a 65 1 0 4 7 8 12 15 16 18 19 20 23 25 26 27 29 33 34 36 37 39 41 42 43 46 48 49 50 51 52 54 61 62 63 b 65 0 0 f # 22095 intersection c a 65 1 0 0 3 6 9 12 13 15 16 17 18 19 20 21 25 26 27 28 29 32 33 38 42 44 46 47 49 50 51 52 53 55 56 57 58 60 62 63 b 65 1 0 0 3 6 9 12 13 15 16 17 18 19 20 21 25 26 27 28 29 32 33 38 42 44 46 47 49 50 51 52 53 55 56 57 58 60 62 63 # 22096 intersection c a 65 1 0 0 3 6 9 12 13 15 16 17 18 19 20 21 25 26 27 28 29 32 33 38 42 44 46 47 49 50 51 52 53 55 56 57 58 60 62 63 b 65 0 0 2 4 6 9 12 13 14 15 16 17 19 20 23 25 26 27 28 32 34 35 38 39 45 47 48 49 50 51 54 55 58 60 63 # 22097 intersection c a 65 1 0 e b 65 1 0 e # 22098 intersection c a 65 1 0 e b 65 0 1 e # 22099 intersection c a 65 1 0 e b 65 1 0 e # 22100 intersection c a 65 1 0 e b 65 0 1 f # 22101 intersection c a 65 1 0 e b 65 1 0 e # 22102 intersection c a 65 1 0 e b 65 0 1 2 3 5 7 8 9 10 11 12 13 14 15 16 18 19 21 23 26 27 28 32 34 36 39 40 42 43 45 46 47 49 50 55 56 57 58 59 61 62 # 22103 intersection c a 65 1 0 f b 65 1 0 f # 22104 intersection c a 65 1 0 f b 65 0 1 e # 22105 intersection c a 65 1 0 f b 65 1 0 f # 22106 intersection c a 65 1 0 f b 65 0 1 f # 22107 intersection c a 65 1 0 f b 65 1 0 f # 22108 intersection c a 65 1 0 f b 65 0 1 0 1 10 11 12 13 15 16 17 19 20 22 23 24 27 29 32 34 36 37 38 39 42 46 47 48 50 51 53 54 59 61 # 22109 intersection c a 65 1 0 0 1 2 3 5 7 8 15 19 21 23 25 27 29 35 38 40 45 47 48 50 53 54 56 60 61 64 b 65 1 0 0 1 2 3 5 7 8 15 19 21 23 25 27 29 35 38 40 45 47 48 50 53 54 56 60 61 64 # 22110 intersection c a 65 1 0 0 1 2 3 5 7 8 15 19 21 23 25 27 29 35 38 40 45 47 48 50 53 54 56 60 61 64 b 65 0 1 e # 22111 intersection c a 65 1 0 0 7 8 9 11 12 13 14 16 17 18 19 20 22 24 25 29 33 35 37 41 42 44 45 46 48 49 51 52 53 54 55 56 60 61 62 b 65 1 0 0 7 8 9 11 12 13 14 16 17 18 19 20 22 24 25 29 33 35 37 41 42 44 45 46 48 49 51 52 53 54 55 56 60 61 62 # 22112 intersection c a 65 1 0 0 7 8 9 11 12 13 14 16 17 18 19 20 22 24 25 29 33 35 37 41 42 44 45 46 48 49 51 52 53 54 55 56 60 61 62 b 65 0 1 f # 22113 intersection c a 65 1 0 1 2 3 5 8 9 10 11 12 15 16 18 19 22 24 28 29 30 32 33 36 37 39 40 43 44 45 47 52 54 58 61 62 63 64 b 65 1 0 1 2 3 5 8 9 10 11 12 15 16 18 19 22 24 28 29 30 32 33 36 37 39 40 43 44 45 47 52 54 58 61 62 63 64 # 22114 intersection c a 65 1 0 1 2 3 5 8 9 10 11 12 15 16 18 19 22 24 28 29 30 32 33 36 37 39 40 43 44 45 47 52 54 58 61 62 63 64 b 65 0 1 0 3 4 8 11 12 13 14 15 18 19 23 25 30 36 37 40 41 43 44 46 48 50 52 55 56 60 62 64 # 22115 intersection c a 65 1 0 e b 65 1 0 e # 22116 intersection c a 65 1 0 e b 65 1 0 e # 22117 intersection c a 65 1 0 e b 65 1 0 e # 22118 intersection c a 65 1 0 e b 65 1 0 f # 22119 intersection c a 65 1 0 e b 65 1 0 e # 22120 intersection c a 65 1 0 e b 65 1 0 3 4 5 6 7 9 13 15 16 18 19 20 21 22 24 26 30 31 32 34 35 37 39 41 43 44 46 48 49 51 54 56 57 58 61 63 # 22121 intersection c a 65 1 0 f b 65 1 0 f # 22122 intersection c a 65 1 0 f b 65 1 0 e # 22123 intersection c a 65 1 0 f b 65 1 0 f # 22124 intersection c a 65 1 0 f b 65 1 0 f # 22125 intersection c a 65 1 0 f b 65 1 0 f # 22126 intersection c a 65 1 0 f b 65 1 0 0 1 2 3 8 10 15 16 17 20 21 23 24 25 30 32 34 36 39 42 43 44 46 47 53 55 56 60 63 64 # 22127 intersection c a 65 1 0 1 2 3 7 9 10 11 12 13 14 15 23 24 25 26 27 30 31 35 36 37 38 40 41 44 49 50 51 52 54 55 57 58 63 64 b 65 1 0 1 2 3 7 9 10 11 12 13 14 15 23 24 25 26 27 30 31 35 36 37 38 40 41 44 49 50 51 52 54 55 57 58 63 64 # 22128 intersection c a 65 1 0 1 2 3 7 9 10 11 12 13 14 15 23 24 25 26 27 30 31 35 36 37 38 40 41 44 49 50 51 52 54 55 57 58 63 64 b 65 1 0 e # 22129 intersection c a 65 1 0 0 1 2 4 7 8 9 10 11 15 18 19 21 22 27 28 30 32 33 34 35 40 45 47 51 52 54 56 59 60 63 b 65 1 0 0 1 2 4 7 8 9 10 11 15 18 19 21 22 27 28 30 32 33 34 35 40 45 47 51 52 54 56 59 60 63 # 22130 intersection c a 65 1 0 0 1 2 4 7 8 9 10 11 15 18 19 21 22 27 28 30 32 33 34 35 40 45 47 51 52 54 56 59 60 63 b 65 1 0 f # 22131 intersection c a 65 1 0 2 4 9 10 12 16 21 23 27 31 32 35 37 38 39 41 45 46 48 49 50 52 54 55 58 59 60 61 62 b 65 1 0 2 4 9 10 12 16 21 23 27 31 32 35 37 38 39 41 45 46 48 49 50 52 54 55 58 59 60 61 62 # 22132 intersection c a 65 1 0 2 4 9 10 12 16 21 23 27 31 32 35 37 38 39 41 45 46 48 49 50 52 54 55 58 59 60 61 62 b 65 1 0 0 2 3 5 7 8 9 11 14 17 20 22 24 25 27 28 29 31 32 33 36 37 39 43 44 49 50 52 53 54 55 56 57 58 60 63 # 22133 intersection c a 65 1 0 e b 65 1 0 e # 22134 intersection c a 65 1 0 e b 65 1 1 e # 22135 intersection c a 65 1 0 e b 65 1 0 e # 22136 intersection c a 65 1 0 e b 65 1 1 f # 22137 intersection c a 65 1 0 e b 65 1 0 e # 22138 intersection c a 65 1 0 e b 65 1 1 0 1 2 5 6 7 9 10 13 14 16 17 20 23 25 28 30 31 33 39 41 43 44 45 46 47 48 51 55 57 61 62 64 # 22139 intersection c a 65 1 0 f b 65 1 0 f # 22140 intersection c a 65 1 0 f b 65 1 1 e # 22141 intersection c a 65 1 0 f b 65 1 0 f # 22142 intersection c a 65 1 0 f b 65 1 1 f # 22143 intersection c a 65 1 0 f b 65 1 0 f # 22144 intersection c a 65 1 0 f b 65 1 1 1 5 6 13 15 17 19 21 22 26 30 34 37 38 41 42 43 44 45 48 49 50 52 53 54 55 57 60 62 # 22145 intersection c a 65 1 0 0 1 2 3 6 8 9 11 13 14 15 16 18 19 21 22 24 30 35 36 39 40 41 42 45 49 50 51 52 53 54 55 58 59 60 61 63 b 65 1 0 0 1 2 3 6 8 9 11 13 14 15 16 18 19 21 22 24 30 35 36 39 40 41 42 45 49 50 51 52 53 54 55 58 59 60 61 63 # 22146 intersection c a 65 1 0 0 1 2 3 6 8 9 11 13 14 15 16 18 19 21 22 24 30 35 36 39 40 41 42 45 49 50 51 52 53 54 55 58 59 60 61 63 b 65 1 1 e # 22147 intersection c a 65 1 0 0 1 2 3 4 5 6 7 21 22 24 25 27 30 32 33 35 36 38 41 43 45 47 49 52 54 55 59 b 65 1 0 0 1 2 3 4 5 6 7 21 22 24 25 27 30 32 33 35 36 38 41 43 45 47 49 52 54 55 59 # 22148 intersection c a 65 1 0 0 1 2 3 4 5 6 7 21 22 24 25 27 30 32 33 35 36 38 41 43 45 47 49 52 54 55 59 b 65 1 1 f # 22149 intersection c a 65 1 0 3 8 10 11 12 13 17 19 20 21 23 27 29 31 33 34 35 37 38 41 43 47 49 51 52 53 54 56 61 63 b 65 1 0 3 8 10 11 12 13 17 19 20 21 23 27 29 31 33 34 35 37 38 41 43 47 49 51 52 53 54 56 61 63 # 22150 intersection c a 65 1 0 3 8 10 11 12 13 17 19 20 21 23 27 29 31 33 34 35 37 38 41 43 47 49 51 52 53 54 56 61 63 b 65 1 1 1 2 4 5 10 11 12 13 14 15 17 19 20 21 22 24 26 27 28 29 32 33 36 37 38 41 42 44 45 47 48 49 50 51 53 62 # 22151 intersection c a 65 1 1 e b 65 1 1 e # 22152 intersection c a 65 1 1 e b 65 0 0 e # 22153 intersection c a 65 1 1 e b 65 1 1 e # 22154 intersection c a 65 1 1 e b 65 0 0 f # 22155 intersection c a 65 1 1 e b 65 1 1 e # 22156 intersection c a 65 1 1 e b 65 0 0 1 4 5 6 7 8 11 14 17 18 22 23 27 33 34 35 36 38 40 44 45 48 50 51 53 54 55 57 58 62 63 # 22157 intersection c a 65 1 1 f b 65 1 1 f # 22158 intersection c a 65 1 1 f b 65 0 0 e # 22159 intersection c a 65 1 1 f b 65 1 1 f # 22160 intersection c a 65 1 1 f b 65 0 0 f # 22161 intersection c a 65 1 1 f b 65 1 1 f # 22162 intersection c a 65 1 1 f b 65 0 0 0 1 5 6 7 8 11 12 13 14 15 17 25 26 27 28 29 31 33 34 35 37 38 43 44 46 48 50 52 54 57 60 61 62 64 # 22163 intersection c a 65 1 1 0 3 4 5 13 15 17 18 19 20 22 23 24 26 27 29 33 39 40 41 43 45 46 47 48 50 51 52 53 54 56 61 63 b 65 1 1 0 3 4 5 13 15 17 18 19 20 22 23 24 26 27 29 33 39 40 41 43 45 46 47 48 50 51 52 53 54 56 61 63 # 22164 intersection c a 65 1 1 0 3 4 5 13 15 17 18 19 20 22 23 24 26 27 29 33 39 40 41 43 45 46 47 48 50 51 52 53 54 56 61 63 b 65 0 0 e # 22165 intersection c a 65 1 1 0 1 2 5 6 8 9 10 11 12 13 18 20 24 26 28 29 30 31 32 33 34 36 37 39 40 43 44 45 46 49 50 53 54 57 58 61 64 b 65 1 1 0 1 2 5 6 8 9 10 11 12 13 18 20 24 26 28 29 30 31 32 33 34 36 37 39 40 43 44 45 46 49 50 53 54 57 58 61 64 # 22166 intersection c a 65 1 1 0 1 2 5 6 8 9 10 11 12 13 18 20 24 26 28 29 30 31 32 33 34 36 37 39 40 43 44 45 46 49 50 53 54 57 58 61 64 b 65 0 0 f # 22167 intersection c a 65 1 1 4 8 9 11 12 13 14 15 20 21 22 23 28 30 31 32 35 36 47 49 52 56 60 63 64 b 65 1 1 4 8 9 11 12 13 14 15 20 21 22 23 28 30 31 32 35 36 47 49 52 56 60 63 64 # 22168 intersection c a 65 1 1 4 8 9 11 12 13 14 15 20 21 22 23 28 30 31 32 35 36 47 49 52 56 60 63 64 b 65 0 0 0 1 2 6 7 10 11 12 13 15 16 17 20 21 22 27 28 30 31 34 35 36 37 40 42 43 48 49 51 52 55 56 57 58 59 62 63 64 # 22169 intersection c a 65 1 1 e b 65 1 1 e # 22170 intersection c a 65 1 1 e b 65 0 1 e # 22171 intersection c a 65 1 1 e b 65 1 1 e # 22172 intersection c a 65 1 1 e b 65 0 1 f # 22173 intersection c a 65 1 1 e b 65 1 1 e # 22174 intersection c a 65 1 1 e b 65 0 1 0 1 2 5 7 8 10 12 15 16 20 23 27 28 30 31 32 37 38 40 41 42 43 45 47 49 51 54 55 56 57 59 64 # 22175 intersection c a 65 1 1 f b 65 1 1 f # 22176 intersection c a 65 1 1 f b 65 0 1 e # 22177 intersection c a 65 1 1 f b 65 1 1 f # 22178 intersection c a 65 1 1 f b 65 0 1 f # 22179 intersection c a 65 1 1 f b 65 1 1 f # 22180 intersection c a 65 1 1 f b 65 0 1 0 5 10 12 13 14 15 16 17 21 25 26 27 29 33 34 35 39 44 46 47 48 53 54 55 56 57 60 61 64 # 22181 intersection c a 65 1 1 4 6 7 8 10 11 13 14 18 22 24 26 27 28 30 31 33 39 40 42 43 45 47 50 51 52 53 55 58 59 62 63 b 65 1 1 4 6 7 8 10 11 13 14 18 22 24 26 27 28 30 31 33 39 40 42 43 45 47 50 51 52 53 55 58 59 62 63 # 22182 intersection c a 65 1 1 4 6 7 8 10 11 13 14 18 22 24 26 27 28 30 31 33 39 40 42 43 45 47 50 51 52 53 55 58 59 62 63 b 65 0 1 e # 22183 intersection c a 65 1 1 2 3 5 6 7 8 9 10 11 13 16 19 21 22 23 24 25 28 30 35 38 39 40 41 42 45 46 49 50 51 52 53 55 56 57 58 59 60 61 b 65 1 1 2 3 5 6 7 8 9 10 11 13 16 19 21 22 23 24 25 28 30 35 38 39 40 41 42 45 46 49 50 51 52 53 55 56 57 58 59 60 61 # 22184 intersection c a 65 1 1 2 3 5 6 7 8 9 10 11 13 16 19 21 22 23 24 25 28 30 35 38 39 40 41 42 45 46 49 50 51 52 53 55 56 57 58 59 60 61 b 65 0 1 f # 22185 intersection c a 65 1 1 0 7 13 16 19 20 21 22 24 25 27 29 30 35 36 37 38 44 45 46 47 49 51 52 55 56 57 58 60 61 b 65 1 1 0 7 13 16 19 20 21 22 24 25 27 29 30 35 36 37 38 44 45 46 47 49 51 52 55 56 57 58 60 61 # 22186 intersection c a 65 1 1 0 7 13 16 19 20 21 22 24 25 27 29 30 35 36 37 38 44 45 46 47 49 51 52 55 56 57 58 60 61 b 65 0 1 0 3 4 6 8 11 13 19 20 22 23 24 25 26 27 30 36 38 39 40 41 42 43 44 45 51 52 53 54 55 56 60 62 64 # 22187 intersection c a 65 1 1 e b 65 1 1 e # 22188 intersection c a 65 1 1 e b 65 1 0 e # 22189 intersection c a 65 1 1 e b 65 1 1 e # 22190 intersection c a 65 1 1 e b 65 1 0 f # 22191 intersection c a 65 1 1 e b 65 1 1 e # 22192 intersection c a 65 1 1 e b 65 1 0 1 8 11 13 15 18 20 24 25 28 31 33 35 36 37 39 40 41 42 44 47 52 54 55 59 60 62 63 # 22193 intersection c a 65 1 1 f b 65 1 1 f # 22194 intersection c a 65 1 1 f b 65 1 0 e # 22195 intersection c a 65 1 1 f b 65 1 1 f # 22196 intersection c a 65 1 1 f b 65 1 0 f # 22197 intersection c a 65 1 1 f b 65 1 1 f # 22198 intersection c a 65 1 1 f b 65 1 0 1 4 7 9 14 16 21 23 27 30 31 38 39 44 46 47 48 50 54 56 60 # 22199 intersection c a 65 1 1 0 2 5 7 8 9 10 12 13 14 16 21 23 25 26 29 30 31 33 35 36 37 38 39 40 41 42 43 44 45 46 50 53 55 56 57 59 60 62 b 65 1 1 0 2 5 7 8 9 10 12 13 14 16 21 23 25 26 29 30 31 33 35 36 37 38 39 40 41 42 43 44 45 46 50 53 55 56 57 59 60 62 # 22200 intersection c a 65 1 1 0 2 5 7 8 9 10 12 13 14 16 21 23 25 26 29 30 31 33 35 36 37 38 39 40 41 42 43 44 45 46 50 53 55 56 57 59 60 62 b 65 1 0 e # 22201 intersection c a 65 1 1 2 3 5 6 8 11 13 14 15 20 23 26 27 30 32 33 36 38 40 41 44 48 49 50 52 53 57 62 63 b 65 1 1 2 3 5 6 8 11 13 14 15 20 23 26 27 30 32 33 36 38 40 41 44 48 49 50 52 53 57 62 63 # 22202 intersection c a 65 1 1 2 3 5 6 8 11 13 14 15 20 23 26 27 30 32 33 36 38 40 41 44 48 49 50 52 53 57 62 63 b 65 1 0 f # 22203 intersection c a 65 1 1 2 3 4 7 8 9 10 11 12 13 14 15 16 18 19 22 26 27 29 30 31 32 33 34 35 38 40 41 43 44 45 46 51 52 56 57 58 60 61 63 64 b 65 1 1 2 3 4 7 8 9 10 11 12 13 14 15 16 18 19 22 26 27 29 30 31 32 33 34 35 38 40 41 43 44 45 46 51 52 56 57 58 60 61 63 64 # 22204 intersection c a 65 1 1 2 3 4 7 8 9 10 11 12 13 14 15 16 18 19 22 26 27 29 30 31 32 33 34 35 38 40 41 43 44 45 46 51 52 56 57 58 60 61 63 64 b 65 1 0 0 1 4 5 8 11 12 13 16 17 22 26 29 33 34 36 37 38 39 41 42 44 45 46 47 48 49 50 53 55 59 61 63 64 # 22205 intersection c a 65 1 1 e b 65 1 1 e # 22206 intersection c a 65 1 1 e b 65 1 1 e # 22207 intersection c a 65 1 1 e b 65 1 1 e # 22208 intersection c a 65 1 1 e b 65 1 1 f # 22209 intersection c a 65 1 1 e b 65 1 1 e # 22210 intersection c a 65 1 1 e b 65 1 1 0 1 2 3 4 7 18 20 21 26 33 37 38 39 42 44 46 47 48 51 53 56 57 58 61 62 63 64 # 22211 intersection c a 65 1 1 f b 65 1 1 f # 22212 intersection c a 65 1 1 f b 65 1 1 e # 22213 intersection c a 65 1 1 f b 65 1 1 f # 22214 intersection c a 65 1 1 f b 65 1 1 f # 22215 intersection c a 65 1 1 f b 65 1 1 f # 22216 intersection c a 65 1 1 f b 65 1 1 7 9 12 16 17 21 24 25 26 27 28 29 30 32 34 38 39 43 44 47 49 51 52 53 54 56 57 59 61 # 22217 intersection c a 65 1 1 0 1 2 4 8 12 13 14 19 21 22 24 26 27 28 31 32 33 34 35 38 40 43 48 56 b 65 1 1 0 1 2 4 8 12 13 14 19 21 22 24 26 27 28 31 32 33 34 35 38 40 43 48 56 # 22218 intersection c a 65 1 1 0 1 2 4 8 12 13 14 19 21 22 24 26 27 28 31 32 33 34 35 38 40 43 48 56 b 65 1 1 e # 22219 intersection c a 65 1 1 2 3 6 8 10 11 12 14 16 17 19 21 22 23 24 29 30 31 32 33 38 39 40 42 44 45 46 48 52 54 55 59 60 62 63 b 65 1 1 2 3 6 8 10 11 12 14 16 17 19 21 22 23 24 29 30 31 32 33 38 39 40 42 44 45 46 48 52 54 55 59 60 62 63 # 22220 intersection c a 65 1 1 2 3 6 8 10 11 12 14 16 17 19 21 22 23 24 29 30 31 32 33 38 39 40 42 44 45 46 48 52 54 55 59 60 62 63 b 65 1 1 f # 22221 intersection c a 65 1 1 2 4 5 8 9 13 15 18 21 22 23 25 26 27 28 29 31 32 33 35 36 37 41 42 43 46 47 48 54 57 59 62 b 65 1 1 2 4 5 8 9 13 15 18 21 22 23 25 26 27 28 29 31 32 33 35 36 37 41 42 43 46 47 48 54 57 59 62 # 22222 intersection c a 65 1 1 2 4 5 8 9 13 15 18 21 22 23 25 26 27 28 29 31 32 33 35 36 37 41 42 43 46 47 48 54 57 59 62 b 65 1 1 4 5 6 7 8 9 11 13 14 15 17 20 21 22 23 24 25 28 29 30 36 38 39 40 42 49 50 53 58 61 # 22223 intersection c a 211 0 0 e b 211 0 0 e # 22224 intersection c a 211 0 0 e b 211 0 0 e # 22225 intersection c a 211 0 0 e b 211 0 0 e # 22226 intersection c a 211 0 0 e b 211 0 0 f # 22227 intersection c a 211 0 0 e b 211 0 0 e # 22228 intersection c a 211 0 0 e b 211 0 0 0 1 4 5 7 8 9 13 14 15 16 21 22 23 24 27 28 29 31 34 40 47 49 51 52 54 55 56 58 60 61 66 67 69 73 74 75 76 77 78 80 84 88 89 90 91 92 97 99 100 101 109 110 111 115 116 117 119 120 123 124 125 128 129 131 133 135 136 143 144 145 146 147 150 152 154 156 158 159 160 161 164 165 167 169 170 171 176 182 185 186 188 191 193 197 198 199 200 201 205 206 210 # 22229 intersection c a 211 0 0 f b 211 0 0 f # 22230 intersection c a 211 0 0 f b 211 0 0 e # 22231 intersection c a 211 0 0 f b 211 0 0 f # 22232 intersection c a 211 0 0 f b 211 0 0 f # 22233 intersection c a 211 0 0 f b 211 0 0 f # 22234 intersection c a 211 0 0 f b 211 0 0 0 1 3 6 7 10 12 13 14 15 17 18 19 20 21 28 29 33 35 36 48 51 53 54 58 60 62 64 67 69 71 73 76 78 79 80 82 83 85 87 88 91 92 93 95 97 98 99 101 102 103 104 105 107 110 112 117 123 125 126 127 131 134 137 138 139 141 142 143 148 150 152 153 156 157 161 163 164 165 168 170 172 173 178 180 183 185 188 189 193 196 198 199 200 201 202 203 204 206 207 208 209 # 22235 intersection c a 211 0 0 0 2 3 4 7 9 14 15 16 18 19 20 22 23 25 26 28 32 36 39 41 43 46 49 50 53 56 57 58 62 66 68 73 76 78 80 81 82 86 90 91 92 93 94 96 97 99 100 101 102 106 110 113 114 115 118 120 121 123 126 128 131 135 137 139 143 148 150 151 155 160 164 165 166 168 173 174 175 176 179 180 185 186 187 192 193 194 196 197 198 200 201 202 204 205 207 b 211 0 0 0 2 3 4 7 9 14 15 16 18 19 20 22 23 25 26 28 32 36 39 41 43 46 49 50 53 56 57 58 62 66 68 73 76 78 80 81 82 86 90 91 92 93 94 96 97 99 100 101 102 106 110 113 114 115 118 120 121 123 126 128 131 135 137 139 143 148 150 151 155 160 164 165 166 168 173 174 175 176 179 180 185 186 187 192 193 194 196 197 198 200 201 202 204 205 207 # 22236 intersection c a 211 0 0 0 2 3 4 7 9 14 15 16 18 19 20 22 23 25 26 28 32 36 39 41 43 46 49 50 53 56 57 58 62 66 68 73 76 78 80 81 82 86 90 91 92 93 94 96 97 99 100 101 102 106 110 113 114 115 118 120 121 123 126 128 131 135 137 139 143 148 150 151 155 160 164 165 166 168 173 174 175 176 179 180 185 186 187 192 193 194 196 197 198 200 201 202 204 205 207 b 211 0 0 e # 22237 intersection c a 211 0 0 1 2 5 9 10 11 13 14 15 18 19 21 22 23 28 29 30 31 33 35 36 37 38 40 41 45 47 49 50 51 52 53 54 59 60 62 64 67 70 72 77 79 80 82 85 86 88 91 96 97 100 102 103 107 108 109 111 115 116 117 119 121 122 123 130 132 136 137 138 139 140 144 145 146 147 148 150 151 152 153 154 157 162 164 165 168 172 173 174 175 177 180 183 184 185 188 189 190 192 194 195 200 202 203 207 209 210 b 211 0 0 1 2 5 9 10 11 13 14 15 18 19 21 22 23 28 29 30 31 33 35 36 37 38 40 41 45 47 49 50 51 52 53 54 59 60 62 64 67 70 72 77 79 80 82 85 86 88 91 96 97 100 102 103 107 108 109 111 115 116 117 119 121 122 123 130 132 136 137 138 139 140 144 145 146 147 148 150 151 152 153 154 157 162 164 165 168 172 173 174 175 177 180 183 184 185 188 189 190 192 194 195 200 202 203 207 209 210 # 22238 intersection c a 211 0 0 1 2 5 9 10 11 13 14 15 18 19 21 22 23 28 29 30 31 33 35 36 37 38 40 41 45 47 49 50 51 52 53 54 59 60 62 64 67 70 72 77 79 80 82 85 86 88 91 96 97 100 102 103 107 108 109 111 115 116 117 119 121 122 123 130 132 136 137 138 139 140 144 145 146 147 148 150 151 152 153 154 157 162 164 165 168 172 173 174 175 177 180 183 184 185 188 189 190 192 194 195 200 202 203 207 209 210 b 211 0 0 f # 22239 intersection c a 211 0 0 11 13 15 17 21 24 25 26 27 28 29 30 32 33 37 38 41 44 45 47 49 51 53 57 60 61 62 63 64 66 69 70 72 73 74 76 81 83 84 90 94 96 97 98 99 100 106 108 113 114 119 120 122 124 125 126 128 131 132 133 138 140 142 144 145 148 149 150 151 153 154 155 156 157 159 161 162 164 165 166 170 171 172 173 175 177 178 180 181 183 184 186 187 188 190 193 196 198 199 200 201 202 204 208 210 b 211 0 0 11 13 15 17 21 24 25 26 27 28 29 30 32 33 37 38 41 44 45 47 49 51 53 57 60 61 62 63 64 66 69 70 72 73 74 76 81 83 84 90 94 96 97 98 99 100 106 108 113 114 119 120 122 124 125 126 128 131 132 133 138 140 142 144 145 148 149 150 151 153 154 155 156 157 159 161 162 164 165 166 170 171 172 173 175 177 178 180 181 183 184 186 187 188 190 193 196 198 199 200 201 202 204 208 210 # 22240 intersection c a 211 0 0 11 13 15 17 21 24 25 26 27 28 29 30 32 33 37 38 41 44 45 47 49 51 53 57 60 61 62 63 64 66 69 70 72 73 74 76 81 83 84 90 94 96 97 98 99 100 106 108 113 114 119 120 122 124 125 126 128 131 132 133 138 140 142 144 145 148 149 150 151 153 154 155 156 157 159 161 162 164 165 166 170 171 172 173 175 177 178 180 181 183 184 186 187 188 190 193 196 198 199 200 201 202 204 208 210 b 211 0 0 0 2 3 6 12 13 14 16 19 20 22 24 25 26 28 29 30 31 33 38 41 42 44 45 47 49 52 54 55 62 63 68 69 70 72 73 75 76 77 78 80 83 86 87 88 89 90 93 94 98 101 104 105 107 108 109 111 113 115 116 119 122 125 126 127 129 132 133 134 135 136 137 138 139 140 144 145 146 147 150 152 153 154 156 157 159 160 161 163 166 169 170 179 180 181 183 184 189 192 193 202 204 206 208 209 # 22241 intersection c a 211 0 0 e b 211 0 0 e # 22242 intersection c a 211 0 0 e b 211 0 1 e # 22243 intersection c a 211 0 0 e b 211 0 0 e # 22244 intersection c a 211 0 0 e b 211 0 1 f # 22245 intersection c a 211 0 0 e b 211 0 0 e # 22246 intersection c a 211 0 0 e b 211 0 1 0 1 3 4 5 8 10 12 13 16 17 18 20 27 30 31 34 35 37 41 44 45 47 48 51 55 56 60 63 64 65 66 68 73 75 76 77 78 79 81 83 85 89 90 91 93 94 96 97 98 99 105 108 110 111 114 115 121 123 124 127 129 130 131 136 137 138 139 140 141 142 146 148 150 151 154 156 157 160 166 173 178 180 181 183 185 188 190 191 192 196 197 198 199 201 203 204 205 210 # 22247 intersection c a 211 0 0 f b 211 0 0 f # 22248 intersection c a 211 0 0 f b 211 0 1 e # 22249 intersection c a 211 0 0 f b 211 0 0 f # 22250 intersection c a 211 0 0 f b 211 0 1 f # 22251 intersection c a 211 0 0 f b 211 0 0 f # 22252 intersection c a 211 0 0 f b 211 0 1 0 2 3 4 5 8 9 11 15 20 26 27 29 30 33 35 36 37 39 42 43 44 45 46 51 52 53 59 61 64 65 69 71 73 74 76 77 80 81 83 84 85 86 88 90 94 95 96 100 101 104 107 109 110 112 114 115 116 117 119 125 129 130 132 136 137 140 143 146 151 153 155 156 157 159 160 164 165 166 167 168 171 173 174 175 177 179 180 181 184 185 189 193 194 197 200 201 202 205 207 209 # 22253 intersection c a 211 0 0 1 2 3 4 5 10 12 16 17 18 20 21 25 26 27 29 31 32 34 35 38 40 41 42 43 53 54 56 57 60 61 63 67 68 71 74 78 79 80 82 83 84 85 87 89 90 92 94 100 102 104 105 106 108 110 111 112 113 114 115 116 124 126 128 129 131 137 142 145 146 148 152 153 155 158 163 164 165 166 168 172 178 180 183 185 186 187 189 193 200 201 203 205 207 209 210 b 211 0 0 1 2 3 4 5 10 12 16 17 18 20 21 25 26 27 29 31 32 34 35 38 40 41 42 43 53 54 56 57 60 61 63 67 68 71 74 78 79 80 82 83 84 85 87 89 90 92 94 100 102 104 105 106 108 110 111 112 113 114 115 116 124 126 128 129 131 137 142 145 146 148 152 153 155 158 163 164 165 166 168 172 178 180 183 185 186 187 189 193 200 201 203 205 207 209 210 # 22254 intersection c a 211 0 0 1 2 3 4 5 10 12 16 17 18 20 21 25 26 27 29 31 32 34 35 38 40 41 42 43 53 54 56 57 60 61 63 67 68 71 74 78 79 80 82 83 84 85 87 89 90 92 94 100 102 104 105 106 108 110 111 112 113 114 115 116 124 126 128 129 131 137 142 145 146 148 152 153 155 158 163 164 165 166 168 172 178 180 183 185 186 187 189 193 200 201 203 205 207 209 210 b 211 0 1 e # 22255 intersection c a 211 0 0 8 9 16 17 18 19 21 28 32 33 34 39 41 45 46 47 49 50 51 52 56 57 58 59 61 63 64 67 68 69 70 71 72 75 76 78 81 85 86 89 91 92 93 94 97 100 104 105 107 111 113 115 119 120 121 122 123 124 129 130 133 134 135 136 138 139 140 141 142 144 145 149 152 153 154 155 159 160 161 164 165 167 169 170 171 172 175 178 179 182 183 185 186 187 189 190 192 193 195 196 197 198 200 203 204 208 b 211 0 0 8 9 16 17 18 19 21 28 32 33 34 39 41 45 46 47 49 50 51 52 56 57 58 59 61 63 64 67 68 69 70 71 72 75 76 78 81 85 86 89 91 92 93 94 97 100 104 105 107 111 113 115 119 120 121 122 123 124 129 130 133 134 135 136 138 139 140 141 142 144 145 149 152 153 154 155 159 160 161 164 165 167 169 170 171 172 175 178 179 182 183 185 186 187 189 190 192 193 195 196 197 198 200 203 204 208 # 22256 intersection c a 211 0 0 8 9 16 17 18 19 21 28 32 33 34 39 41 45 46 47 49 50 51 52 56 57 58 59 61 63 64 67 68 69 70 71 72 75 76 78 81 85 86 89 91 92 93 94 97 100 104 105 107 111 113 115 119 120 121 122 123 124 129 130 133 134 135 136 138 139 140 141 142 144 145 149 152 153 154 155 159 160 161 164 165 167 169 170 171 172 175 178 179 182 183 185 186 187 189 190 192 193 195 196 197 198 200 203 204 208 b 211 0 1 f # 22257 intersection c a 211 0 0 1 4 6 7 9 11 12 15 17 18 19 20 22 26 27 30 31 34 37 38 39 40 42 43 44 45 46 48 49 51 52 56 58 60 61 62 63 65 67 68 70 71 72 74 75 77 80 83 84 86 88 89 90 92 93 96 97 98 99 100 101 102 103 105 107 108 109 115 116 119 124 125 127 136 137 139 143 144 146 147 148 150 151 153 156 157 161 162 164 165 166 167 168 170 172 173 174 175 177 178 180 186 192 194 195 197 198 199 201 203 204 206 208 b 211 0 0 1 4 6 7 9 11 12 15 17 18 19 20 22 26 27 30 31 34 37 38 39 40 42 43 44 45 46 48 49 51 52 56 58 60 61 62 63 65 67 68 70 71 72 74 75 77 80 83 84 86 88 89 90 92 93 96 97 98 99 100 101 102 103 105 107 108 109 115 116 119 124 125 127 136 137 139 143 144 146 147 148 150 151 153 156 157 161 162 164 165 166 167 168 170 172 173 174 175 177 178 180 186 192 194 195 197 198 199 201 203 204 206 208 # 22258 intersection c a 211 0 0 1 4 6 7 9 11 12 15 17 18 19 20 22 26 27 30 31 34 37 38 39 40 42 43 44 45 46 48 49 51 52 56 58 60 61 62 63 65 67 68 70 71 72 74 75 77 80 83 84 86 88 89 90 92 93 96 97 98 99 100 101 102 103 105 107 108 109 115 116 119 124 125 127 136 137 139 143 144 146 147 148 150 151 153 156 157 161 162 164 165 166 167 168 170 172 173 174 175 177 178 180 186 192 194 195 197 198 199 201 203 204 206 208 b 211 0 1 0 1 2 7 9 11 12 14 15 16 17 18 19 22 26 30 33 34 35 36 38 40 41 43 50 51 52 53 54 55 57 62 63 66 68 69 70 71 72 76 77 82 83 85 86 87 88 92 93 102 103 109 111 114 115 117 121 122 124 128 129 135 136 138 144 145 148 149 150 151 153 157 160 161 162 163 165 166 169 170 171 178 179 181 182 183 184 186 188 190 191 194 195 199 202 204 205 206 207 210 # 22259 intersection c a 211 0 0 e b 211 0 0 e # 22260 intersection c a 211 0 0 e b 211 1 0 e # 22261 intersection c a 211 0 0 e b 211 0 0 e # 22262 intersection c a 211 0 0 e b 211 1 0 f # 22263 intersection c a 211 0 0 e b 211 0 0 e # 22264 intersection c a 211 0 0 e b 211 1 0 0 2 4 9 10 11 14 16 18 19 22 23 25 26 31 37 38 39 40 41 42 46 48 49 53 55 56 57 58 59 62 63 67 69 70 72 74 75 76 77 79 80 82 95 96 98 101 102 105 108 110 111 112 113 118 120 121 122 127 128 132 133 136 137 146 147 148 151 154 155 158 161 164 165 166 167 168 171 172 176 177 178 179 182 183 185 186 187 188 193 194 196 197 200 203 204 205 206 207 208 209 210 # 22265 intersection c a 211 0 0 f b 211 0 0 f # 22266 intersection c a 211 0 0 f b 211 1 0 e # 22267 intersection c a 211 0 0 f b 211 0 0 f # 22268 intersection c a 211 0 0 f b 211 1 0 f # 22269 intersection c a 211 0 0 f b 211 0 0 f # 22270 intersection c a 211 0 0 f b 211 1 0 2 4 6 7 10 11 12 13 14 17 18 19 20 28 32 33 39 40 42 43 44 45 48 53 54 55 58 60 63 65 67 70 72 73 75 76 77 81 82 83 84 85 87 92 93 95 96 98 100 102 103 107 109 117 119 123 125 126 127 129 133 134 141 142 143 146 147 148 150 152 155 158 160 162 165 166 170 173 175 178 181 185 188 190 191 193 195 197 199 208 209 210 # 22271 intersection c a 211 0 0 1 4 5 6 8 9 11 16 21 22 23 24 28 32 34 35 41 43 45 47 48 49 57 58 60 62 63 64 66 68 70 75 76 77 78 79 83 85 87 88 91 92 94 96 97 98 99 103 104 105 107 110 111 114 115 118 119 120 122 123 124 129 137 138 139 140 141 142 144 145 152 153 154 155 159 163 164 166 169 170 172 173 174 175 178 179 180 182 183 185 187 189 193 202 203 206 207 208 209 b 211 0 0 1 4 5 6 8 9 11 16 21 22 23 24 28 32 34 35 41 43 45 47 48 49 57 58 60 62 63 64 66 68 70 75 76 77 78 79 83 85 87 88 91 92 94 96 97 98 99 103 104 105 107 110 111 114 115 118 119 120 122 123 124 129 137 138 139 140 141 142 144 145 152 153 154 155 159 163 164 166 169 170 172 173 174 175 178 179 180 182 183 185 187 189 193 202 203 206 207 208 209 # 22272 intersection c a 211 0 0 1 4 5 6 8 9 11 16 21 22 23 24 28 32 34 35 41 43 45 47 48 49 57 58 60 62 63 64 66 68 70 75 76 77 78 79 83 85 87 88 91 92 94 96 97 98 99 103 104 105 107 110 111 114 115 118 119 120 122 123 124 129 137 138 139 140 141 142 144 145 152 153 154 155 159 163 164 166 169 170 172 173 174 175 178 179 180 182 183 185 187 189 193 202 203 206 207 208 209 b 211 1 0 e # 22273 intersection c a 211 0 0 1 6 7 8 12 15 17 19 20 21 22 23 26 27 28 33 34 35 38 40 43 45 46 47 48 50 51 53 54 56 59 60 61 64 68 69 70 71 75 78 79 81 82 83 88 89 91 92 93 95 97 99 100 101 102 103 106 111 114 115 116 117 119 120 121 122 124 127 128 130 131 133 134 135 136 140 141 144 146 147 151 152 155 157 158 161 163 165 169 170 174 176 177 179 180 181 182 183 184 186 190 195 197 199 203 204 205 208 209 b 211 0 0 1 6 7 8 12 15 17 19 20 21 22 23 26 27 28 33 34 35 38 40 43 45 46 47 48 50 51 53 54 56 59 60 61 64 68 69 70 71 75 78 79 81 82 83 88 89 91 92 93 95 97 99 100 101 102 103 106 111 114 115 116 117 119 120 121 122 124 127 128 130 131 133 134 135 136 140 141 144 146 147 151 152 155 157 158 161 163 165 169 170 174 176 177 179 180 181 182 183 184 186 190 195 197 199 203 204 205 208 209 # 22274 intersection c a 211 0 0 1 6 7 8 12 15 17 19 20 21 22 23 26 27 28 33 34 35 38 40 43 45 46 47 48 50 51 53 54 56 59 60 61 64 68 69 70 71 75 78 79 81 82 83 88 89 91 92 93 95 97 99 100 101 102 103 106 111 114 115 116 117 119 120 121 122 124 127 128 130 131 133 134 135 136 140 141 144 146 147 151 152 155 157 158 161 163 165 169 170 174 176 177 179 180 181 182 183 184 186 190 195 197 199 203 204 205 208 209 b 211 1 0 f # 22275 intersection c a 211 0 0 0 3 5 7 9 10 11 14 15 17 26 27 31 32 33 34 36 39 42 44 45 49 51 53 54 57 59 62 66 67 68 70 71 72 73 77 78 79 80 82 83 85 87 89 91 94 96 97 100 103 105 107 108 109 110 111 114 119 120 121 124 126 127 132 133 134 135 136 138 139 144 146 150 152 154 155 156 158 160 161 164 168 171 172 173 175 176 178 180 181 182 183 185 186 190 191 196 197 198 201 203 204 205 206 207 209 b 211 0 0 0 3 5 7 9 10 11 14 15 17 26 27 31 32 33 34 36 39 42 44 45 49 51 53 54 57 59 62 66 67 68 70 71 72 73 77 78 79 80 82 83 85 87 89 91 94 96 97 100 103 105 107 108 109 110 111 114 119 120 121 124 126 127 132 133 134 135 136 138 139 144 146 150 152 154 155 156 158 160 161 164 168 171 172 173 175 176 178 180 181 182 183 185 186 190 191 196 197 198 201 203 204 205 206 207 209 # 22276 intersection c a 211 0 0 0 3 5 7 9 10 11 14 15 17 26 27 31 32 33 34 36 39 42 44 45 49 51 53 54 57 59 62 66 67 68 70 71 72 73 77 78 79 80 82 83 85 87 89 91 94 96 97 100 103 105 107 108 109 110 111 114 119 120 121 124 126 127 132 133 134 135 136 138 139 144 146 150 152 154 155 156 158 160 161 164 168 171 172 173 175 176 178 180 181 182 183 185 186 190 191 196 197 198 201 203 204 205 206 207 209 b 211 1 0 1 3 5 6 7 12 13 14 15 17 18 19 20 21 23 26 28 33 36 37 39 41 43 45 46 47 48 49 50 51 54 55 56 59 60 61 66 69 71 72 74 77 82 83 84 85 86 87 90 92 93 98 99 101 102 103 107 111 112 114 116 117 120 121 123 124 125 135 136 137 138 139 141 142 143 149 152 153 155 156 157 160 161 162 164 166 167 168 169 170 172 175 176 177 181 184 185 186 187 190 192 193 194 195 196 197 198 199 204 207 # 22277 intersection c a 211 0 0 e b 211 0 0 e # 22278 intersection c a 211 0 0 e b 211 1 1 e # 22279 intersection c a 211 0 0 e b 211 0 0 e # 22280 intersection c a 211 0 0 e b 211 1 1 f # 22281 intersection c a 211 0 0 e b 211 0 0 e # 22282 intersection c a 211 0 0 e b 211 1 1 0 2 3 4 6 7 8 10 17 18 22 23 26 30 32 35 36 39 43 44 45 46 48 49 50 54 55 56 57 64 65 66 67 68 70 72 76 78 79 82 83 84 85 86 87 88 90 94 97 98 101 102 103 104 105 107 110 112 113 115 116 117 119 123 124 125 126 128 129 131 132 134 135 138 140 142 147 149 150 153 156 159 161 162 163 165 166 170 171 172 173 177 181 182 183 184 186 187 190 191 194 195 200 203 205 208 210 # 22283 intersection c a 211 0 0 f b 211 0 0 f # 22284 intersection c a 211 0 0 f b 211 1 1 e # 22285 intersection c a 211 0 0 f b 211 0 0 f # 22286 intersection c a 211 0 0 f b 211 1 1 f # 22287 intersection c a 211 0 0 f b 211 0 0 f # 22288 intersection c a 211 0 0 f b 211 1 1 2 3 6 8 12 13 15 16 17 18 20 22 23 25 26 27 28 30 31 32 33 34 37 38 39 44 45 47 54 55 57 58 61 64 66 69 71 73 79 80 81 87 90 91 99 101 105 106 107 109 110 111 112 115 118 119 120 121 123 124 125 128 129 133 134 135 138 139 141 142 145 147 149 152 153 155 156 159 162 163 165 166 167 169 171 172 174 175 178 179 182 183 186 187 188 189 190 191 193 194 195 199 201 203 206 208 209 # 22289 intersection c a 211 0 0 0 1 3 6 9 10 13 14 15 19 20 23 24 25 26 28 31 33 34 35 38 41 42 44 45 47 49 50 51 54 60 61 62 64 65 67 74 75 76 78 81 83 85 87 89 92 94 96 101 102 103 105 106 109 111 112 113 114 116 117 120 122 124 125 126 127 128 130 133 135 137 138 139 140 146 147 149 151 153 156 158 159 160 161 164 170 172 174 175 176 178 179 182 183 187 188 190 191 193 195 197 199 200 203 204 205 206 209 b 211 0 0 0 1 3 6 9 10 13 14 15 19 20 23 24 25 26 28 31 33 34 35 38 41 42 44 45 47 49 50 51 54 60 61 62 64 65 67 74 75 76 78 81 83 85 87 89 92 94 96 101 102 103 105 106 109 111 112 113 114 116 117 120 122 124 125 126 127 128 130 133 135 137 138 139 140 146 147 149 151 153 156 158 159 160 161 164 170 172 174 175 176 178 179 182 183 187 188 190 191 193 195 197 199 200 203 204 205 206 209 # 22290 intersection c a 211 0 0 0 1 3 6 9 10 13 14 15 19 20 23 24 25 26 28 31 33 34 35 38 41 42 44 45 47 49 50 51 54 60 61 62 64 65 67 74 75 76 78 81 83 85 87 89 92 94 96 101 102 103 105 106 109 111 112 113 114 116 117 120 122 124 125 126 127 128 130 133 135 137 138 139 140 146 147 149 151 153 156 158 159 160 161 164 170 172 174 175 176 178 179 182 183 187 188 190 191 193 195 197 199 200 203 204 205 206 209 b 211 1 1 e # 22291 intersection c a 211 0 0 0 1 3 5 8 10 11 12 13 15 18 22 23 24 25 26 30 35 38 40 41 43 44 45 50 52 53 55 59 60 62 64 66 68 69 70 71 72 75 77 82 86 87 88 94 96 97 100 103 105 106 107 108 112 115 116 118 120 122 124 125 129 130 134 135 136 137 139 140 141 142 143 144 146 147 148 151 152 154 156 158 161 162 163 165 169 170 172 173 175 177 181 184 186 187 188 189 192 194 195 196 202 206 207 b 211 0 0 0 1 3 5 8 10 11 12 13 15 18 22 23 24 25 26 30 35 38 40 41 43 44 45 50 52 53 55 59 60 62 64 66 68 69 70 71 72 75 77 82 86 87 88 94 96 97 100 103 105 106 107 108 112 115 116 118 120 122 124 125 129 130 134 135 136 137 139 140 141 142 143 144 146 147 148 151 152 154 156 158 161 162 163 165 169 170 172 173 175 177 181 184 186 187 188 189 192 194 195 196 202 206 207 # 22292 intersection c a 211 0 0 0 1 3 5 8 10 11 12 13 15 18 22 23 24 25 26 30 35 38 40 41 43 44 45 50 52 53 55 59 60 62 64 66 68 69 70 71 72 75 77 82 86 87 88 94 96 97 100 103 105 106 107 108 112 115 116 118 120 122 124 125 129 130 134 135 136 137 139 140 141 142 143 144 146 147 148 151 152 154 156 158 161 162 163 165 169 170 172 173 175 177 181 184 186 187 188 189 192 194 195 196 202 206 207 b 211 1 1 f # 22293 intersection c a 211 0 0 0 3 5 6 10 11 13 14 16 20 21 23 24 25 26 27 28 30 31 32 34 35 39 40 41 44 47 49 52 53 55 56 59 60 64 68 69 70 71 72 74 75 76 78 85 86 87 88 90 91 92 95 97 102 104 105 106 109 110 111 112 116 119 120 121 122 123 125 126 127 128 129 130 133 135 136 145 148 149 151 152 155 158 159 161 164 165 167 169 173 174 175 180 181 183 184 185 186 188 194 195 198 201 202 204 205 208 210 b 211 0 0 0 3 5 6 10 11 13 14 16 20 21 23 24 25 26 27 28 30 31 32 34 35 39 40 41 44 47 49 52 53 55 56 59 60 64 68 69 70 71 72 74 75 76 78 85 86 87 88 90 91 92 95 97 102 104 105 106 109 110 111 112 116 119 120 121 122 123 125 126 127 128 129 130 133 135 136 145 148 149 151 152 155 158 159 161 164 165 167 169 173 174 175 180 181 183 184 185 186 188 194 195 198 201 202 204 205 208 210 # 22294 intersection c a 211 0 0 0 3 5 6 10 11 13 14 16 20 21 23 24 25 26 27 28 30 31 32 34 35 39 40 41 44 47 49 52 53 55 56 59 60 64 68 69 70 71 72 74 75 76 78 85 86 87 88 90 91 92 95 97 102 104 105 106 109 110 111 112 116 119 120 121 122 123 125 126 127 128 129 130 133 135 136 145 148 149 151 152 155 158 159 161 164 165 167 169 173 174 175 180 181 183 184 185 186 188 194 195 198 201 202 204 205 208 210 b 211 1 1 0 2 3 5 8 9 10 11 14 17 18 19 21 22 23 24 25 26 27 28 30 31 32 33 35 37 40 45 47 48 50 53 54 56 57 61 64 65 68 69 71 72 73 74 76 79 80 82 85 86 88 89 90 92 93 94 95 96 97 98 100 103 107 108 109 110 111 113 115 116 117 118 119 120 121 123 124 125 126 128 129 130 131 137 142 143 144 147 153 155 156 157 159 160 163 164 165 168 169 174 176 178 179 180 187 189 190 195 197 199 200 201 203 207 208 210 # 22295 intersection c a 211 0 1 e b 211 0 1 e # 22296 intersection c a 211 0 1 e b 211 0 0 e # 22297 intersection c a 211 0 1 e b 211 0 1 e # 22298 intersection c a 211 0 1 e b 211 0 0 f # 22299 intersection c a 211 0 1 e b 211 0 1 e # 22300 intersection c a 211 0 1 e b 211 0 0 0 1 3 4 5 7 9 10 13 14 25 29 33 39 43 45 46 50 51 52 54 56 58 62 63 64 65 69 71 72 74 77 78 79 82 83 84 85 87 89 93 96 98 101 107 108 110 112 113 119 123 126 128 129 130 132 136 137 139 142 143 144 148 149 154 155 156 157 159 160 164 165 166 168 169 171 174 178 181 192 193 194 198 203 206 207 208 209 # 22301 intersection c a 211 0 1 f b 211 0 1 f # 22302 intersection c a 211 0 1 f b 211 0 0 e # 22303 intersection c a 211 0 1 f b 211 0 1 f # 22304 intersection c a 211 0 1 f b 211 0 0 f # 22305 intersection c a 211 0 1 f b 211 0 1 f # 22306 intersection c a 211 0 1 f b 211 0 0 0 1 2 6 7 8 11 12 13 14 19 20 21 22 28 31 32 38 45 46 47 51 56 57 58 59 62 67 71 72 75 78 79 80 82 84 86 92 93 94 99 100 102 104 108 111 113 114 117 118 121 122 123 124 125 128 130 131 132 133 135 136 137 139 140 141 144 146 147 157 158 161 162 168 169 171 173 180 181 182 186 190 193 194 195 196 197 199 200 202 208 209 210 # 22307 intersection c a 211 0 1 2 3 4 8 9 10 13 14 15 16 17 19 20 21 22 23 24 28 32 36 37 38 39 40 41 42 43 45 46 48 50 51 52 53 54 55 56 59 61 65 66 75 78 81 82 84 85 87 88 89 90 92 94 96 98 100 102 105 106 107 109 110 111 112 113 115 116 117 119 120 123 125 130 133 134 135 136 137 138 139 140 141 142 143 144 145 148 149 155 159 160 164 167 168 169 170 171 172 177 178 180 182 184 185 186 193 196 197 199 200 201 202 206 207 209 b 211 0 1 2 3 4 8 9 10 13 14 15 16 17 19 20 21 22 23 24 28 32 36 37 38 39 40 41 42 43 45 46 48 50 51 52 53 54 55 56 59 61 65 66 75 78 81 82 84 85 87 88 89 90 92 94 96 98 100 102 105 106 107 109 110 111 112 113 115 116 117 119 120 123 125 130 133 134 135 136 137 138 139 140 141 142 143 144 145 148 149 155 159 160 164 167 168 169 170 171 172 177 178 180 182 184 185 186 193 196 197 199 200 201 202 206 207 209 # 22308 intersection c a 211 0 1 2 3 4 8 9 10 13 14 15 16 17 19 20 21 22 23 24 28 32 36 37 38 39 40 41 42 43 45 46 48 50 51 52 53 54 55 56 59 61 65 66 75 78 81 82 84 85 87 88 89 90 92 94 96 98 100 102 105 106 107 109 110 111 112 113 115 116 117 119 120 123 125 130 133 134 135 136 137 138 139 140 141 142 143 144 145 148 149 155 159 160 164 167 168 169 170 171 172 177 178 180 182 184 185 186 193 196 197 199 200 201 202 206 207 209 b 211 0 0 e # 22309 intersection c a 211 0 1 2 4 5 9 11 15 17 18 20 21 22 30 31 33 36 37 38 42 43 47 50 51 53 55 59 60 64 65 66 67 70 71 72 73 74 78 80 81 84 85 89 90 91 92 95 97 98 99 101 102 104 107 108 113 114 116 117 118 119 120 121 122 123 126 131 133 134 135 138 140 142 146 149 154 155 157 159 167 168 171 172 173 178 179 181 183 187 188 189 193 194 195 198 200 201 203 204 205 209 b 211 0 1 2 4 5 9 11 15 17 18 20 21 22 30 31 33 36 37 38 42 43 47 50 51 53 55 59 60 64 65 66 67 70 71 72 73 74 78 80 81 84 85 89 90 91 92 95 97 98 99 101 102 104 107 108 113 114 116 117 118 119 120 121 122 123 126 131 133 134 135 138 140 142 146 149 154 155 157 159 167 168 171 172 173 178 179 181 183 187 188 189 193 194 195 198 200 201 203 204 205 209 # 22310 intersection c a 211 0 1 2 4 5 9 11 15 17 18 20 21 22 30 31 33 36 37 38 42 43 47 50 51 53 55 59 60 64 65 66 67 70 71 72 73 74 78 80 81 84 85 89 90 91 92 95 97 98 99 101 102 104 107 108 113 114 116 117 118 119 120 121 122 123 126 131 133 134 135 138 140 142 146 149 154 155 157 159 167 168 171 172 173 178 179 181 183 187 188 189 193 194 195 198 200 201 203 204 205 209 b 211 0 0 f # 22311 intersection c a 211 0 1 0 1 2 5 6 7 8 9 12 14 15 16 20 22 23 25 26 27 29 32 34 37 41 48 49 50 51 53 55 56 58 66 67 68 69 70 72 74 75 76 79 80 81 84 85 86 89 90 91 92 102 103 104 105 106 107 113 115 116 125 126 127 129 135 138 139 140 142 143 146 148 150 152 161 162 167 168 171 174 175 176 177 178 179 181 183 184 185 188 190 193 194 201 202 203 205 206 209 b 211 0 1 0 1 2 5 6 7 8 9 12 14 15 16 20 22 23 25 26 27 29 32 34 37 41 48 49 50 51 53 55 56 58 66 67 68 69 70 72 74 75 76 79 80 81 84 85 86 89 90 91 92 102 103 104 105 106 107 113 115 116 125 126 127 129 135 138 139 140 142 143 146 148 150 152 161 162 167 168 171 174 175 176 177 178 179 181 183 184 185 188 190 193 194 201 202 203 205 206 209 # 22312 intersection c a 211 0 1 0 1 2 5 6 7 8 9 12 14 15 16 20 22 23 25 26 27 29 32 34 37 41 48 49 50 51 53 55 56 58 66 67 68 69 70 72 74 75 76 79 80 81 84 85 86 89 90 91 92 102 103 104 105 106 107 113 115 116 125 126 127 129 135 138 139 140 142 143 146 148 150 152 161 162 167 168 171 174 175 176 177 178 179 181 183 184 185 188 190 193 194 201 202 203 205 206 209 b 211 0 0 0 3 6 7 12 19 20 22 23 26 27 28 30 31 32 36 39 40 41 43 44 45 46 52 53 57 58 61 65 66 72 73 74 75 77 79 81 82 84 90 91 93 95 96 99 107 109 111 112 114 116 118 119 120 122 125 129 131 136 137 139 140 141 142 145 146 147 149 150 153 154 155 156 158 159 160 162 164 165 166 168 169 172 174 175 176 177 178 180 181 183 184 186 189 192 194 195 199 201 204 207 # 22313 intersection c a 211 0 1 e b 211 0 1 e # 22314 intersection c a 211 0 1 e b 211 0 1 e # 22315 intersection c a 211 0 1 e b 211 0 1 e # 22316 intersection c a 211 0 1 e b 211 0 1 f # 22317 intersection c a 211 0 1 e b 211 0 1 e # 22318 intersection c a 211 0 1 e b 211 0 1 2 4 5 6 9 10 11 12 14 18 20 22 23 28 30 32 35 39 42 43 45 47 48 51 52 54 56 57 58 59 64 65 66 75 77 78 82 83 84 85 87 88 89 90 96 98 100 102 104 112 115 117 118 119 120 121 124 125 126 127 129 131 133 140 141 142 147 149 150 151 152 153 155 156 157 158 159 160 161 162 163 164 168 169 170 172 173 174 178 181 183 184 185 186 188 196 197 198 202 205 210 # 22319 intersection c a 211 0 1 f b 211 0 1 f # 22320 intersection c a 211 0 1 f b 211 0 1 e # 22321 intersection c a 211 0 1 f b 211 0 1 f # 22322 intersection c a 211 0 1 f b 211 0 1 f # 22323 intersection c a 211 0 1 f b 211 0 1 f # 22324 intersection c a 211 0 1 f b 211 0 1 4 8 9 10 14 15 17 19 21 22 25 26 27 28 30 32 34 35 40 42 44 45 46 47 48 50 51 55 60 62 63 65 67 68 69 71 72 75 78 80 84 85 86 92 94 96 99 101 102 106 107 109 110 116 120 121 123 126 128 132 138 139 141 145 146 153 154 157 158 161 162 167 168 170 171 173 175 176 178 179 183 187 189 192 194 198 200 201 204 205 206 208 209 # 22325 intersection c a 211 0 1 2 4 5 7 11 13 15 17 18 22 23 26 27 29 31 33 36 37 41 42 43 47 51 52 53 55 58 59 60 61 62 64 67 68 69 74 75 76 78 79 80 81 82 84 94 96 99 100 102 104 105 114 118 119 123 124 126 132 134 138 139 140 142 143 144 145 148 149 153 155 156 161 162 164 165 166 169 170 173 175 176 179 183 186 188 190 192 193 195 196 200 205 207 210 b 211 0 1 2 4 5 7 11 13 15 17 18 22 23 26 27 29 31 33 36 37 41 42 43 47 51 52 53 55 58 59 60 61 62 64 67 68 69 74 75 76 78 79 80 81 82 84 94 96 99 100 102 104 105 114 118 119 123 124 126 132 134 138 139 140 142 143 144 145 148 149 153 155 156 161 162 164 165 166 169 170 173 175 176 179 183 186 188 190 192 193 195 196 200 205 207 210 # 22326 intersection c a 211 0 1 2 4 5 7 11 13 15 17 18 22 23 26 27 29 31 33 36 37 41 42 43 47 51 52 53 55 58 59 60 61 62 64 67 68 69 74 75 76 78 79 80 81 82 84 94 96 99 100 102 104 105 114 118 119 123 124 126 132 134 138 139 140 142 143 144 145 148 149 153 155 156 161 162 164 165 166 169 170 173 175 176 179 183 186 188 190 192 193 195 196 200 205 207 210 b 211 0 1 e # 22327 intersection c a 211 0 1 0 1 2 13 14 16 18 19 21 26 30 33 34 37 38 39 43 47 50 51 56 57 58 61 64 66 69 70 71 74 79 82 83 84 85 87 88 89 90 92 94 96 97 98 99 100 101 102 103 104 108 109 114 123 124 128 131 132 134 135 136 141 142 143 145 148 150 152 157 158 160 163 164 165 166 170 173 175 180 181 182 183 185 187 188 191 192 194 197 198 199 201 203 204 208 209 210 b 211 0 1 0 1 2 13 14 16 18 19 21 26 30 33 34 37 38 39 43 47 50 51 56 57 58 61 64 66 69 70 71 74 79 82 83 84 85 87 88 89 90 92 94 96 97 98 99 100 101 102 103 104 108 109 114 123 124 128 131 132 134 135 136 141 142 143 145 148 150 152 157 158 160 163 164 165 166 170 173 175 180 181 182 183 185 187 188 191 192 194 197 198 199 201 203 204 208 209 210 # 22328 intersection c a 211 0 1 0 1 2 13 14 16 18 19 21 26 30 33 34 37 38 39 43 47 50 51 56 57 58 61 64 66 69 70 71 74 79 82 83 84 85 87 88 89 90 92 94 96 97 98 99 100 101 102 103 104 108 109 114 123 124 128 131 132 134 135 136 141 142 143 145 148 150 152 157 158 160 163 164 165 166 170 173 175 180 181 182 183 185 187 188 191 192 194 197 198 199 201 203 204 208 209 210 b 211 0 1 f # 22329 intersection c a 211 0 1 0 1 3 4 6 7 10 11 12 14 16 19 20 22 26 29 33 44 46 47 48 52 54 56 57 58 60 61 62 64 66 67 69 71 73 75 78 79 80 83 84 87 89 92 95 98 99 102 108 111 113 114 118 119 125 126 127 128 129 130 132 133 134 138 143 147 148 150 151 153 155 156 158 159 160 161 162 163 164 165 168 169 170 176 177 179 180 181 182 184 185 187 198 201 202 203 208 b 211 0 1 0 1 3 4 6 7 10 11 12 14 16 19 20 22 26 29 33 44 46 47 48 52 54 56 57 58 60 61 62 64 66 67 69 71 73 75 78 79 80 83 84 87 89 92 95 98 99 102 108 111 113 114 118 119 125 126 127 128 129 130 132 133 134 138 143 147 148 150 151 153 155 156 158 159 160 161 162 163 164 165 168 169 170 176 177 179 180 181 182 184 185 187 198 201 202 203 208 # 22330 intersection c a 211 0 1 0 1 3 4 6 7 10 11 12 14 16 19 20 22 26 29 33 44 46 47 48 52 54 56 57 58 60 61 62 64 66 67 69 71 73 75 78 79 80 83 84 87 89 92 95 98 99 102 108 111 113 114 118 119 125 126 127 128 129 130 132 133 134 138 143 147 148 150 151 153 155 156 158 159 160 161 162 163 164 165 168 169 170 176 177 179 180 181 182 184 185 187 198 201 202 203 208 b 211 0 1 0 2 5 6 10 12 14 19 20 24 25 26 28 30 31 32 33 36 39 40 43 47 49 50 54 56 58 59 60 65 66 67 68 70 71 75 76 77 78 81 83 84 86 87 88 89 90 94 96 97 99 100 102 104 107 108 110 116 120 121 122 125 126 128 131 132 133 135 137 142 144 145 146 147 149 152 159 161 162 164 165 166 167 168 171 172 173 175 176 178 181 185 189 191 192 194 197 199 201 202 204 207 208 210 # 22331 intersection c a 211 0 1 e b 211 0 1 e # 22332 intersection c a 211 0 1 e b 211 1 0 e # 22333 intersection c a 211 0 1 e b 211 0 1 e # 22334 intersection c a 211 0 1 e b 211 1 0 f # 22335 intersection c a 211 0 1 e b 211 0 1 e # 22336 intersection c a 211 0 1 e b 211 1 0 0 6 7 8 9 13 15 16 19 20 22 24 26 27 30 35 36 38 40 42 48 49 51 56 58 59 60 61 64 65 67 68 71 72 75 76 77 79 80 82 84 88 93 94 97 98 103 105 106 108 110 111 112 113 116 117 118 119 125 126 127 128 129 132 133 136 138 139 141 142 145 146 148 149 151 160 162 163 165 167 170 171 172 174 177 178 183 184 185 188 190 191 192 194 199 200 201 203 207 # 22337 intersection c a 211 0 1 f b 211 0 1 f # 22338 intersection c a 211 0 1 f b 211 1 0 e # 22339 intersection c a 211 0 1 f b 211 0 1 f # 22340 intersection c a 211 0 1 f b 211 1 0 f # 22341 intersection c a 211 0 1 f b 211 0 1 f # 22342 intersection c a 211 0 1 f b 211 1 0 0 6 13 17 18 19 21 25 29 31 33 38 42 43 44 45 48 49 52 53 55 56 57 59 60 61 62 63 64 67 68 72 74 75 78 79 83 84 85 86 87 88 90 92 93 95 97 98 99 106 107 109 110 111 113 114 116 117 118 120 121 122 123 126 127 130 131 132 133 138 139 141 144 146 148 149 150 151 153 154 155 157 158 159 162 163 167 171 172 173 175 177 180 187 188 189 190 193 195 196 198 200 203 209 210 # 22343 intersection c a 211 0 1 1 2 6 7 9 10 14 18 19 20 23 25 27 29 30 32 33 34 36 37 41 42 43 46 47 48 49 50 51 55 56 57 58 60 62 63 65 66 71 74 75 76 77 78 80 81 83 84 85 86 87 92 93 94 96 97 101 105 107 108 109 112 113 115 118 119 120 121 123 124 126 127 130 134 135 138 139 143 144 145 146 151 153 154 156 157 162 163 165 167 168 170 177 178 183 188 189 192 194 196 199 200 201 206 209 210 b 211 0 1 1 2 6 7 9 10 14 18 19 20 23 25 27 29 30 32 33 34 36 37 41 42 43 46 47 48 49 50 51 55 56 57 58 60 62 63 65 66 71 74 75 76 77 78 80 81 83 84 85 86 87 92 93 94 96 97 101 105 107 108 109 112 113 115 118 119 120 121 123 124 126 127 130 134 135 138 139 143 144 145 146 151 153 154 156 157 162 163 165 167 168 170 177 178 183 188 189 192 194 196 199 200 201 206 209 210 # 22344 intersection c a 211 0 1 1 2 6 7 9 10 14 18 19 20 23 25 27 29 30 32 33 34 36 37 41 42 43 46 47 48 49 50 51 55 56 57 58 60 62 63 65 66 71 74 75 76 77 78 80 81 83 84 85 86 87 92 93 94 96 97 101 105 107 108 109 112 113 115 118 119 120 121 123 124 126 127 130 134 135 138 139 143 144 145 146 151 153 154 156 157 162 163 165 167 168 170 177 178 183 188 189 192 194 196 199 200 201 206 209 210 b 211 1 0 e # 22345 intersection c a 211 0 1 0 3 5 7 8 11 14 15 18 21 22 27 28 29 30 31 34 35 36 39 41 42 43 45 47 53 54 55 59 62 68 69 73 74 75 76 79 80 81 84 87 88 89 90 91 92 93 97 98 99 103 106 107 108 110 111 112 115 116 118 119 121 122 126 127 128 129 130 132 133 139 142 144 145 147 149 151 152 154 157 158 161 162 164 166 167 168 169 170 173 174 175 176 177 178 180 182 183 185 186 187 188 189 192 194 196 199 202 203 205 206 207 208 b 211 0 1 0 3 5 7 8 11 14 15 18 21 22 27 28 29 30 31 34 35 36 39 41 42 43 45 47 53 54 55 59 62 68 69 73 74 75 76 79 80 81 84 87 88 89 90 91 92 93 97 98 99 103 106 107 108 110 111 112 115 116 118 119 121 122 126 127 128 129 130 132 133 139 142 144 145 147 149 151 152 154 157 158 161 162 164 166 167 168 169 170 173 174 175 176 177 178 180 182 183 185 186 187 188 189 192 194 196 199 202 203 205 206 207 208 # 22346 intersection c a 211 0 1 0 3 5 7 8 11 14 15 18 21 22 27 28 29 30 31 34 35 36 39 41 42 43 45 47 53 54 55 59 62 68 69 73 74 75 76 79 80 81 84 87 88 89 90 91 92 93 97 98 99 103 106 107 108 110 111 112 115 116 118 119 121 122 126 127 128 129 130 132 133 139 142 144 145 147 149 151 152 154 157 158 161 162 164 166 167 168 169 170 173 174 175 176 177 178 180 182 183 185 186 187 188 189 192 194 196 199 202 203 205 206 207 208 b 211 1 0 f # 22347 intersection c a 211 0 1 0 1 8 10 14 15 19 20 21 22 23 24 25 27 29 32 34 35 36 39 40 41 42 43 45 46 49 52 55 57 58 59 60 61 62 65 68 69 70 71 72 73 74 75 76 81 82 86 87 88 89 91 92 97 102 105 109 110 111 112 113 114 117 118 120 122 124 126 128 132 134 137 138 140 141 144 146 147 149 151 161 162 165 167 168 172 174 175 176 177 178 179 181 182 183 186 187 188 195 196 197 198 199 201 206 208 209 b 211 0 1 0 1 8 10 14 15 19 20 21 22 23 24 25 27 29 32 34 35 36 39 40 41 42 43 45 46 49 52 55 57 58 59 60 61 62 65 68 69 70 71 72 73 74 75 76 81 82 86 87 88 89 91 92 97 102 105 109 110 111 112 113 114 117 118 120 122 124 126 128 132 134 137 138 140 141 144 146 147 149 151 161 162 165 167 168 172 174 175 176 177 178 179 181 182 183 186 187 188 195 196 197 198 199 201 206 208 209 # 22348 intersection c a 211 0 1 0 1 8 10 14 15 19 20 21 22 23 24 25 27 29 32 34 35 36 39 40 41 42 43 45 46 49 52 55 57 58 59 60 61 62 65 68 69 70 71 72 73 74 75 76 81 82 86 87 88 89 91 92 97 102 105 109 110 111 112 113 114 117 118 120 122 124 126 128 132 134 137 138 140 141 144 146 147 149 151 161 162 165 167 168 172 174 175 176 177 178 179 181 182 183 186 187 188 195 196 197 198 199 201 206 208 209 b 211 1 0 1 4 5 7 9 10 11 18 19 21 23 26 27 30 31 36 38 41 46 48 49 52 53 54 57 58 59 61 62 65 66 69 70 71 72 73 75 77 80 81 84 86 87 89 90 92 94 95 97 99 101 102 104 105 108 109 110 111 112 116 117 119 120 124 129 131 132 133 134 135 136 139 140 141 142 143 145 147 148 149 150 151 152 155 156 157 158 162 165 166 173 174 176 179 180 182 183 184 185 186 187 188 189 192 200 201 202 203 204 205 207 208 209 210 # 22349 intersection c a 211 0 1 e b 211 0 1 e # 22350 intersection c a 211 0 1 e b 211 1 1 e # 22351 intersection c a 211 0 1 e b 211 0 1 e # 22352 intersection c a 211 0 1 e b 211 1 1 f # 22353 intersection c a 211 0 1 e b 211 0 1 e # 22354 intersection c a 211 0 1 e b 211 1 1 0 3 6 10 13 14 15 19 21 24 26 29 33 35 37 41 42 43 44 45 46 49 50 51 52 54 55 56 57 59 63 69 70 71 72 73 74 75 76 77 78 80 81 83 88 89 96 97 98 101 104 106 107 109 111 112 113 114 116 118 119 120 121 125 126 129 130 131 132 135 136 138 144 145 146 147 150 155 159 160 162 163 164 165 167 174 179 180 182 184 188 189 190 191 193 196 197 199 201 203 207 208 209 # 22355 intersection c a 211 0 1 f b 211 0 1 f # 22356 intersection c a 211 0 1 f b 211 1 1 e # 22357 intersection c a 211 0 1 f b 211 0 1 f # 22358 intersection c a 211 0 1 f b 211 1 1 f # 22359 intersection c a 211 0 1 f b 211 0 1 f # 22360 intersection c a 211 0 1 f b 211 1 1 0 5 6 8 9 14 15 16 17 19 21 23 25 27 29 33 36 38 39 40 44 46 47 50 56 57 60 61 62 63 64 67 70 72 73 74 75 77 80 82 86 90 91 93 94 96 100 101 102 103 104 105 106 110 113 114 115 120 123 128 130 131 133 134 137 138 139 140 148 149 150 155 156 157 158 159 161 162 163 165 167 168 169 170 171 175 176 177 180 182 184 186 187 189 190 192 193 196 203 204 206 209 210 # 22361 intersection c a 211 0 1 0 2 4 7 8 12 16 17 21 22 27 30 33 34 37 41 44 45 47 48 49 52 54 59 63 67 69 70 74 81 82 83 85 87 90 91 92 94 95 98 99 100 101 105 106 107 115 117 123 125 126 127 129 130 133 134 135 136 137 141 142 143 144 148 149 150 153 155 156 158 160 168 169 170 174 176 178 179 182 183 190 192 194 198 200 202 204 205 206 207 209 b 211 0 1 0 2 4 7 8 12 16 17 21 22 27 30 33 34 37 41 44 45 47 48 49 52 54 59 63 67 69 70 74 81 82 83 85 87 90 91 92 94 95 98 99 100 101 105 106 107 115 117 123 125 126 127 129 130 133 134 135 136 137 141 142 143 144 148 149 150 153 155 156 158 160 168 169 170 174 176 178 179 182 183 190 192 194 198 200 202 204 205 206 207 209 # 22362 intersection c a 211 0 1 0 2 4 7 8 12 16 17 21 22 27 30 33 34 37 41 44 45 47 48 49 52 54 59 63 67 69 70 74 81 82 83 85 87 90 91 92 94 95 98 99 100 101 105 106 107 115 117 123 125 126 127 129 130 133 134 135 136 137 141 142 143 144 148 149 150 153 155 156 158 160 168 169 170 174 176 178 179 182 183 190 192 194 198 200 202 204 205 206 207 209 b 211 1 1 e # 22363 intersection c a 211 0 1 0 4 5 6 10 11 12 14 16 17 18 20 22 25 28 30 31 36 42 44 45 46 48 49 50 51 53 55 57 58 60 61 64 66 67 68 72 74 76 78 79 81 85 87 92 93 94 95 97 98 99 100 103 105 111 112 113 119 120 121 123 124 126 127 129 130 132 134 138 139 144 145 146 151 153 154 159 162 165 166 167 169 171 172 173 175 176 179 180 181 182 184 185 189 192 194 201 204 208 209 b 211 0 1 0 4 5 6 10 11 12 14 16 17 18 20 22 25 28 30 31 36 42 44 45 46 48 49 50 51 53 55 57 58 60 61 64 66 67 68 72 74 76 78 79 81 85 87 92 93 94 95 97 98 99 100 103 105 111 112 113 119 120 121 123 124 126 127 129 130 132 134 138 139 144 145 146 151 153 154 159 162 165 166 167 169 171 172 173 175 176 179 180 181 182 184 185 189 192 194 201 204 208 209 # 22364 intersection c a 211 0 1 0 4 5 6 10 11 12 14 16 17 18 20 22 25 28 30 31 36 42 44 45 46 48 49 50 51 53 55 57 58 60 61 64 66 67 68 72 74 76 78 79 81 85 87 92 93 94 95 97 98 99 100 103 105 111 112 113 119 120 121 123 124 126 127 129 130 132 134 138 139 144 145 146 151 153 154 159 162 165 166 167 169 171 172 173 175 176 179 180 181 182 184 185 189 192 194 201 204 208 209 b 211 1 1 f # 22365 intersection c a 211 0 1 1 3 4 9 11 12 13 14 16 18 22 23 26 27 28 29 33 36 41 44 46 47 49 51 53 54 57 62 63 65 69 70 71 72 79 82 85 86 87 90 91 92 93 94 95 96 100 101 103 105 107 110 112 113 114 117 119 122 123 124 125 126 127 130 134 136 140 141 142 143 144 145 148 151 152 154 155 157 162 164 165 166 167 168 170 171 173 175 177 183 184 186 187 192 194 196 197 199 202 204 208 209 210 b 211 0 1 1 3 4 9 11 12 13 14 16 18 22 23 26 27 28 29 33 36 41 44 46 47 49 51 53 54 57 62 63 65 69 70 71 72 79 82 85 86 87 90 91 92 93 94 95 96 100 101 103 105 107 110 112 113 114 117 119 122 123 124 125 126 127 130 134 136 140 141 142 143 144 145 148 151 152 154 155 157 162 164 165 166 167 168 170 171 173 175 177 183 184 186 187 192 194 196 197 199 202 204 208 209 210 # 22366 intersection c a 211 0 1 1 3 4 9 11 12 13 14 16 18 22 23 26 27 28 29 33 36 41 44 46 47 49 51 53 54 57 62 63 65 69 70 71 72 79 82 85 86 87 90 91 92 93 94 95 96 100 101 103 105 107 110 112 113 114 117 119 122 123 124 125 126 127 130 134 136 140 141 142 143 144 145 148 151 152 154 155 157 162 164 165 166 167 168 170 171 173 175 177 183 184 186 187 192 194 196 197 199 202 204 208 209 210 b 211 1 1 2 4 6 7 11 12 13 14 16 17 18 19 21 23 24 25 28 29 31 39 41 42 45 46 48 49 50 52 54 55 59 62 64 66 69 71 72 83 84 86 88 89 91 99 101 102 103 104 108 109 113 117 120 121 124 125 126 128 132 135 136 139 141 144 146 152 153 154 155 157 160 161 162 163 165 166 171 172 173 175 177 178 179 187 188 189 191 192 193 194 196 197 198 204 206 209 210 # 22367 intersection c a 211 1 0 e b 211 1 0 e # 22368 intersection c a 211 1 0 e b 211 0 0 e # 22369 intersection c a 211 1 0 e b 211 1 0 e # 22370 intersection c a 211 1 0 e b 211 0 0 f # 22371 intersection c a 211 1 0 e b 211 1 0 e # 22372 intersection c a 211 1 0 e b 211 0 0 0 3 4 9 10 12 13 15 16 18 20 21 23 24 25 26 29 36 38 42 47 48 49 51 52 53 54 55 56 57 60 64 65 67 71 72 74 75 76 78 79 82 84 87 90 91 92 95 97 98 100 103 104 106 107 109 110 111 112 113 114 115 118 120 121 123 125 126 129 130 137 139 140 142 143 144 145 146 148 150 151 156 158 160 161 162 167 169 170 171 172 174 175 180 181 182 186 188 189 190 191 192 193 194 195 196 198 204 205 # 22373 intersection c a 211 1 0 f b 211 1 0 f # 22374 intersection c a 211 1 0 f b 211 0 0 e # 22375 intersection c a 211 1 0 f b 211 1 0 f # 22376 intersection c a 211 1 0 f b 211 0 0 f # 22377 intersection c a 211 1 0 f b 211 1 0 f # 22378 intersection c a 211 1 0 f b 211 0 0 3 4 5 7 8 10 12 15 17 18 19 22 25 26 30 31 32 34 42 44 50 53 54 55 56 57 60 63 64 69 71 72 75 77 78 79 81 83 84 87 88 89 91 92 93 94 95 97 98 99 100 102 103 104 110 117 121 124 130 131 132 133 134 136 138 140 141 142 144 145 146 148 150 154 156 157 159 162 163 165 168 171 172 174 175 177 179 180 184 185 187 188 189 190 193 195 197 198 200 203 204 206 207 208 210 # 22379 intersection c a 211 1 0 0 1 4 6 7 9 14 15 16 18 25 28 29 31 32 34 35 36 37 38 39 43 46 48 49 53 54 56 58 61 68 69 73 75 76 77 78 79 80 82 83 85 88 90 93 95 97 98 100 102 103 104 105 106 107 108 109 110 111 113 114 115 118 121 122 123 124 127 128 131 132 133 134 135 136 138 139 142 147 148 152 153 154 155 158 160 161 162 163 164 165 167 170 172 173 174 175 178 179 181 184 188 189 191 192 195 197 198 201 202 203 204 205 206 207 209 210 b 211 1 0 0 1 4 6 7 9 14 15 16 18 25 28 29 31 32 34 35 36 37 38 39 43 46 48 49 53 54 56 58 61 68 69 73 75 76 77 78 79 80 82 83 85 88 90 93 95 97 98 100 102 103 104 105 106 107 108 109 110 111 113 114 115 118 121 122 123 124 127 128 131 132 133 134 135 136 138 139 142 147 148 152 153 154 155 158 160 161 162 163 164 165 167 170 172 173 174 175 178 179 181 184 188 189 191 192 195 197 198 201 202 203 204 205 206 207 209 210 # 22380 intersection c a 211 1 0 0 1 4 6 7 9 14 15 16 18 25 28 29 31 32 34 35 36 37 38 39 43 46 48 49 53 54 56 58 61 68 69 73 75 76 77 78 79 80 82 83 85 88 90 93 95 97 98 100 102 103 104 105 106 107 108 109 110 111 113 114 115 118 121 122 123 124 127 128 131 132 133 134 135 136 138 139 142 147 148 152 153 154 155 158 160 161 162 163 164 165 167 170 172 173 174 175 178 179 181 184 188 189 191 192 195 197 198 201 202 203 204 205 206 207 209 210 b 211 0 0 e # 22381 intersection c a 211 1 0 0 1 4 7 11 13 19 20 22 23 25 26 28 31 34 35 36 38 40 45 46 47 51 52 54 56 59 60 61 62 65 72 73 74 77 78 79 82 84 87 88 89 90 91 92 95 100 101 102 106 107 109 110 114 115 116 118 119 122 123 124 126 128 130 132 134 136 137 142 143 144 146 147 148 150 151 152 153 154 155 156 157 159 161 166 168 170 176 177 178 179 181 182 185 188 189 191 192 196 197 198 199 203 204 206 207 209 210 b 211 1 0 0 1 4 7 11 13 19 20 22 23 25 26 28 31 34 35 36 38 40 45 46 47 51 52 54 56 59 60 61 62 65 72 73 74 77 78 79 82 84 87 88 89 90 91 92 95 100 101 102 106 107 109 110 114 115 116 118 119 122 123 124 126 128 130 132 134 136 137 142 143 144 146 147 148 150 151 152 153 154 155 156 157 159 161 166 168 170 176 177 178 179 181 182 185 188 189 191 192 196 197 198 199 203 204 206 207 209 210 # 22382 intersection c a 211 1 0 0 1 4 7 11 13 19 20 22 23 25 26 28 31 34 35 36 38 40 45 46 47 51 52 54 56 59 60 61 62 65 72 73 74 77 78 79 82 84 87 88 89 90 91 92 95 100 101 102 106 107 109 110 114 115 116 118 119 122 123 124 126 128 130 132 134 136 137 142 143 144 146 147 148 150 151 152 153 154 155 156 157 159 161 166 168 170 176 177 178 179 181 182 185 188 189 191 192 196 197 198 199 203 204 206 207 209 210 b 211 0 0 f # 22383 intersection c a 211 1 0 0 1 6 7 8 9 10 11 15 19 21 24 25 27 30 32 34 37 38 41 43 45 46 47 48 50 53 54 56 57 59 61 65 67 68 73 75 77 78 82 85 86 88 89 91 92 97 98 103 104 105 106 108 110 111 112 113 116 118 121 125 127 131 132 133 135 140 143 145 147 148 149 152 153 156 157 161 162 166 167 168 175 178 185 186 187 188 194 195 196 197 198 200 201 202 207 208 209 210 b 211 1 0 0 1 6 7 8 9 10 11 15 19 21 24 25 27 30 32 34 37 38 41 43 45 46 47 48 50 53 54 56 57 59 61 65 67 68 73 75 77 78 82 85 86 88 89 91 92 97 98 103 104 105 106 108 110 111 112 113 116 118 121 125 127 131 132 133 135 140 143 145 147 148 149 152 153 156 157 161 162 166 167 168 175 178 185 186 187 188 194 195 196 197 198 200 201 202 207 208 209 210 # 22384 intersection c a 211 1 0 0 1 6 7 8 9 10 11 15 19 21 24 25 27 30 32 34 37 38 41 43 45 46 47 48 50 53 54 56 57 59 61 65 67 68 73 75 77 78 82 85 86 88 89 91 92 97 98 103 104 105 106 108 110 111 112 113 116 118 121 125 127 131 132 133 135 140 143 145 147 148 149 152 153 156 157 161 162 166 167 168 175 178 185 186 187 188 194 195 196 197 198 200 201 202 207 208 209 210 b 211 0 0 3 6 10 11 13 14 16 18 21 23 33 35 37 39 42 43 46 47 48 49 52 56 57 58 60 61 62 64 65 67 68 69 70 74 76 77 79 80 81 83 85 88 91 95 97 98 100 101 103 109 112 113 115 116 117 121 124 131 133 134 138 139 141 144 145 148 150 154 156 159 160 161 162 163 164 165 171 173 175 176 179 180 184 185 189 191 192 194 195 199 200 201 202 203 204 206 207 208 210 # 22385 intersection c a 211 1 0 e b 211 1 0 e # 22386 intersection c a 211 1 0 e b 211 0 1 e # 22387 intersection c a 211 1 0 e b 211 1 0 e # 22388 intersection c a 211 1 0 e b 211 0 1 f # 22389 intersection c a 211 1 0 e b 211 1 0 e # 22390 intersection c a 211 1 0 e b 211 0 1 0 1 3 4 10 16 17 18 19 20 21 22 23 24 25 26 27 28 30 35 37 39 41 43 45 47 48 50 51 62 63 64 66 69 71 72 73 74 76 79 80 81 85 86 87 91 92 93 98 101 104 105 109 111 112 113 116 117 119 122 123 127 131 134 135 139 141 142 143 145 148 152 153 157 159 160 164 168 169 173 175 176 179 180 183 187 189 193 197 198 201 202 203 204 205 206 207 210 # 22391 intersection c a 211 1 0 f b 211 1 0 f # 22392 intersection c a 211 1 0 f b 211 0 1 e # 22393 intersection c a 211 1 0 f b 211 1 0 f # 22394 intersection c a 211 1 0 f b 211 0 1 f # 22395 intersection c a 211 1 0 f b 211 1 0 f # 22396 intersection c a 211 1 0 f b 211 0 1 1 5 6 7 8 9 12 14 16 18 20 21 23 24 26 27 28 30 32 34 36 37 39 41 45 46 49 50 52 53 55 58 59 60 61 63 64 65 66 67 68 70 72 74 79 83 85 86 91 93 94 96 97 100 102 103 107 108 109 112 113 117 118 119 122 123 124 126 127 133 135 138 142 144 145 148 153 159 162 163 166 167 168 169 171 172 175 177 180 181 182 184 185 186 190 191 192 193 194 197 199 201 202 204 208 209 # 22397 intersection c a 211 1 0 0 1 7 9 10 13 14 15 16 17 18 19 21 22 23 24 27 32 33 34 36 40 41 42 44 45 47 50 51 52 53 55 56 57 58 60 63 64 67 69 72 74 76 81 84 85 87 89 90 96 97 100 101 102 104 105 106 107 108 113 114 115 118 119 121 125 126 127 128 129 131 132 133 135 136 138 139 143 144 146 151 153 156 157 159 160 161 162 163 164 165 171 176 178 180 182 183 189 192 194 198 200 204 205 206 208 209 210 b 211 1 0 0 1 7 9 10 13 14 15 16 17 18 19 21 22 23 24 27 32 33 34 36 40 41 42 44 45 47 50 51 52 53 55 56 57 58 60 63 64 67 69 72 74 76 81 84 85 87 89 90 96 97 100 101 102 104 105 106 107 108 113 114 115 118 119 121 125 126 127 128 129 131 132 133 135 136 138 139 143 144 146 151 153 156 157 159 160 161 162 163 164 165 171 176 178 180 182 183 189 192 194 198 200 204 205 206 208 209 210 # 22398 intersection c a 211 1 0 0 1 7 9 10 13 14 15 16 17 18 19 21 22 23 24 27 32 33 34 36 40 41 42 44 45 47 50 51 52 53 55 56 57 58 60 63 64 67 69 72 74 76 81 84 85 87 89 90 96 97 100 101 102 104 105 106 107 108 113 114 115 118 119 121 125 126 127 128 129 131 132 133 135 136 138 139 143 144 146 151 153 156 157 159 160 161 162 163 164 165 171 176 178 180 182 183 189 192 194 198 200 204 205 206 208 209 210 b 211 0 1 e # 22399 intersection c a 211 1 0 0 2 3 4 5 10 12 13 17 19 20 21 22 23 25 26 27 28 30 32 38 39 40 43 45 47 48 49 55 58 59 60 61 65 66 67 69 71 73 74 75 77 80 81 82 87 90 92 94 96 97 98 103 105 107 108 109 110 111 112 113 114 116 121 122 126 129 131 133 136 137 139 140 143 144 147 148 149 152 154 155 156 159 161 162 166 170 176 177 179 181 182 185 187 190 193 194 195 196 197 198 201 203 205 209 b 211 1 0 0 2 3 4 5 10 12 13 17 19 20 21 22 23 25 26 27 28 30 32 38 39 40 43 45 47 48 49 55 58 59 60 61 65 66 67 69 71 73 74 75 77 80 81 82 87 90 92 94 96 97 98 103 105 107 108 109 110 111 112 113 114 116 121 122 126 129 131 133 136 137 139 140 143 144 147 148 149 152 154 155 156 159 161 162 166 170 176 177 179 181 182 185 187 190 193 194 195 196 197 198 201 203 205 209 # 22400 intersection c a 211 1 0 0 2 3 4 5 10 12 13 17 19 20 21 22 23 25 26 27 28 30 32 38 39 40 43 45 47 48 49 55 58 59 60 61 65 66 67 69 71 73 74 75 77 80 81 82 87 90 92 94 96 97 98 103 105 107 108 109 110 111 112 113 114 116 121 122 126 129 131 133 136 137 139 140 143 144 147 148 149 152 154 155 156 159 161 162 166 170 176 177 179 181 182 185 187 190 193 194 195 196 197 198 201 203 205 209 b 211 0 1 f # 22401 intersection c a 211 1 0 0 1 4 5 7 9 10 11 13 14 15 16 17 18 19 20 21 23 26 27 28 29 31 34 39 43 46 47 48 49 50 51 52 54 56 57 63 64 68 69 73 74 75 76 77 78 79 81 82 85 87 89 91 93 94 96 98 99 101 102 103 104 105 106 107 108 110 113 117 119 120 121 122 123 124 125 127 129 131 132 134 135 137 144 145 146 148 151 154 157 158 159 160 162 163 164 165 166 168 170 171 178 180 182 184 185 186 188 189 191 194 198 200 204 205 206 207 209 b 211 1 0 0 1 4 5 7 9 10 11 13 14 15 16 17 18 19 20 21 23 26 27 28 29 31 34 39 43 46 47 48 49 50 51 52 54 56 57 63 64 68 69 73 74 75 76 77 78 79 81 82 85 87 89 91 93 94 96 98 99 101 102 103 104 105 106 107 108 110 113 117 119 120 121 122 123 124 125 127 129 131 132 134 135 137 144 145 146 148 151 154 157 158 159 160 162 163 164 165 166 168 170 171 178 180 182 184 185 186 188 189 191 194 198 200 204 205 206 207 209 # 22402 intersection c a 211 1 0 0 1 4 5 7 9 10 11 13 14 15 16 17 18 19 20 21 23 26 27 28 29 31 34 39 43 46 47 48 49 50 51 52 54 56 57 63 64 68 69 73 74 75 76 77 78 79 81 82 85 87 89 91 93 94 96 98 99 101 102 103 104 105 106 107 108 110 113 117 119 120 121 122 123 124 125 127 129 131 132 134 135 137 144 145 146 148 151 154 157 158 159 160 162 163 164 165 166 168 170 171 178 180 182 184 185 186 188 189 191 194 198 200 204 205 206 207 209 b 211 0 1 3 5 7 8 13 15 17 21 22 23 24 27 28 30 31 34 35 39 41 43 45 46 47 51 53 54 55 58 61 63 64 65 66 71 72 73 74 79 80 82 83 85 86 87 88 89 98 99 101 104 106 108 112 116 119 123 124 125 129 131 132 133 135 136 138 139 145 149 153 156 158 161 162 164 167 171 173 175 177 179 181 183 184 186 187 188 189 192 194 199 201 202 203 206 207 208 210 # 22403 intersection c a 211 1 0 e b 211 1 0 e # 22404 intersection c a 211 1 0 e b 211 1 0 e # 22405 intersection c a 211 1 0 e b 211 1 0 e # 22406 intersection c a 211 1 0 e b 211 1 0 f # 22407 intersection c a 211 1 0 e b 211 1 0 e # 22408 intersection c a 211 1 0 e b 211 1 0 2 9 10 11 12 13 14 20 23 24 25 26 27 28 32 36 37 38 40 46 47 48 53 56 57 58 62 63 64 67 68 69 71 73 75 77 78 82 83 85 86 88 89 90 96 99 101 103 104 105 106 108 109 110 111 114 115 117 120 121 122 125 126 130 131 134 137 138 139 140 142 144 145 149 150 152 153 156 163 164 166 169 174 176 178 180 181 182 183 186 191 192 193 194 195 196 197 203 204 206 207 209 # 22409 intersection c a 211 1 0 f b 211 1 0 f # 22410 intersection c a 211 1 0 f b 211 1 0 e # 22411 intersection c a 211 1 0 f b 211 1 0 f # 22412 intersection c a 211 1 0 f b 211 1 0 f # 22413 intersection c a 211 1 0 f b 211 1 0 f # 22414 intersection c a 211 1 0 f b 211 1 0 2 4 8 9 10 11 12 15 18 19 20 27 28 32 34 35 37 38 40 41 42 47 48 52 53 54 55 58 60 62 67 72 74 76 77 78 82 83 85 86 89 90 94 95 96 97 98 101 102 107 111 112 114 117 118 119 120 123 124 125 126 127 128 135 136 137 138 142 144 145 146 152 155 157 158 162 163 164 166 170 171 172 173 177 178 179 181 187 191 192 194 195 197 199 201 203 204 205 208 # 22415 intersection c a 211 1 0 3 4 5 7 9 12 16 18 19 21 25 26 27 28 30 31 34 37 38 39 40 44 45 46 47 49 51 53 55 56 58 61 63 67 70 71 78 83 86 87 88 93 100 101 105 110 111 112 116 120 121 122 123 124 125 127 129 132 133 135 136 137 144 145 146 148 149 150 151 152 153 154 156 160 161 163 164 165 166 167 168 172 173 174 177 178 180 181 184 185 186 190 194 197 200 201 202 203 204 205 210 b 211 1 0 3 4 5 7 9 12 16 18 19 21 25 26 27 28 30 31 34 37 38 39 40 44 45 46 47 49 51 53 55 56 58 61 63 67 70 71 78 83 86 87 88 93 100 101 105 110 111 112 116 120 121 122 123 124 125 127 129 132 133 135 136 137 144 145 146 148 149 150 151 152 153 154 156 160 161 163 164 165 166 167 168 172 173 174 177 178 180 181 184 185 186 190 194 197 200 201 202 203 204 205 210 # 22416 intersection c a 211 1 0 3 4 5 7 9 12 16 18 19 21 25 26 27 28 30 31 34 37 38 39 40 44 45 46 47 49 51 53 55 56 58 61 63 67 70 71 78 83 86 87 88 93 100 101 105 110 111 112 116 120 121 122 123 124 125 127 129 132 133 135 136 137 144 145 146 148 149 150 151 152 153 154 156 160 161 163 164 165 166 167 168 172 173 174 177 178 180 181 184 185 186 190 194 197 200 201 202 203 204 205 210 b 211 1 0 e # 22417 intersection c a 211 1 0 2 3 4 5 6 12 16 18 19 21 22 23 27 28 32 34 35 37 39 40 43 44 45 46 47 48 49 50 55 56 58 59 60 63 64 68 69 70 71 74 76 77 78 79 81 83 86 88 89 91 92 94 95 96 98 99 100 101 102 111 114 116 117 118 119 121 122 125 128 130 131 133 137 138 141 145 146 148 149 152 154 157 166 169 170 172 174 177 178 179 180 184 185 186 187 188 192 194 195 196 197 202 204 205 207 208 210 b 211 1 0 2 3 4 5 6 12 16 18 19 21 22 23 27 28 32 34 35 37 39 40 43 44 45 46 47 48 49 50 55 56 58 59 60 63 64 68 69 70 71 74 76 77 78 79 81 83 86 88 89 91 92 94 95 96 98 99 100 101 102 111 114 116 117 118 119 121 122 125 128 130 131 133 137 138 141 145 146 148 149 152 154 157 166 169 170 172 174 177 178 179 180 184 185 186 187 188 192 194 195 196 197 202 204 205 207 208 210 # 22418 intersection c a 211 1 0 2 3 4 5 6 12 16 18 19 21 22 23 27 28 32 34 35 37 39 40 43 44 45 46 47 48 49 50 55 56 58 59 60 63 64 68 69 70 71 74 76 77 78 79 81 83 86 88 89 91 92 94 95 96 98 99 100 101 102 111 114 116 117 118 119 121 122 125 128 130 131 133 137 138 141 145 146 148 149 152 154 157 166 169 170 172 174 177 178 179 180 184 185 186 187 188 192 194 195 196 197 202 204 205 207 208 210 b 211 1 0 f # 22419 intersection c a 211 1 0 3 6 9 12 13 15 16 17 21 22 23 25 31 32 33 34 36 37 40 41 42 44 45 47 48 55 56 60 61 63 69 70 71 72 75 77 78 81 82 88 90 91 94 95 96 97 99 100 101 102 107 109 112 114 116 120 123 125 126 128 129 131 132 136 139 141 146 148 150 153 155 156 159 162 164 165 166 171 173 175 178 181 182 183 184 186 187 190 191 192 194 197 198 199 200 202 206 207 208 209 b 211 1 0 3 6 9 12 13 15 16 17 21 22 23 25 31 32 33 34 36 37 40 41 42 44 45 47 48 55 56 60 61 63 69 70 71 72 75 77 78 81 82 88 90 91 94 95 96 97 99 100 101 102 107 109 112 114 116 120 123 125 126 128 129 131 132 136 139 141 146 148 150 153 155 156 159 162 164 165 166 171 173 175 178 181 182 183 184 186 187 190 191 192 194 197 198 199 200 202 206 207 208 209 # 22420 intersection c a 211 1 0 3 6 9 12 13 15 16 17 21 22 23 25 31 32 33 34 36 37 40 41 42 44 45 47 48 55 56 60 61 63 69 70 71 72 75 77 78 81 82 88 90 91 94 95 96 97 99 100 101 102 107 109 112 114 116 120 123 125 126 128 129 131 132 136 139 141 146 148 150 153 155 156 159 162 164 165 166 171 173 175 178 181 182 183 184 186 187 190 191 192 194 197 198 199 200 202 206 207 208 209 b 211 1 0 1 2 8 10 15 16 18 19 22 24 27 30 33 34 35 37 38 39 41 43 45 54 56 58 60 61 62 64 66 69 71 72 73 74 76 78 79 83 84 87 88 91 93 99 101 102 105 106 108 109 113 117 120 127 128 129 130 131 132 133 136 137 139 140 141 143 145 147 150 152 154 156 163 165 168 169 170 175 176 177 178 181 182 184 185 186 187 188 192 193 202 203 204 206 207 208 # 22421 intersection c a 211 1 0 e b 211 1 0 e # 22422 intersection c a 211 1 0 e b 211 1 1 e # 22423 intersection c a 211 1 0 e b 211 1 0 e # 22424 intersection c a 211 1 0 e b 211 1 1 f # 22425 intersection c a 211 1 0 e b 211 1 0 e # 22426 intersection c a 211 1 0 e b 211 1 1 5 7 8 13 17 18 19 23 25 26 27 28 31 35 37 38 41 42 44 46 49 53 55 58 61 63 65 66 67 71 78 79 83 84 85 88 90 93 95 96 98 100 102 106 107 109 110 111 112 113 115 116 117 119 125 127 128 129 131 134 135 137 138 139 142 149 150 154 156 159 161 162 164 165 169 171 175 177 179 180 186 191 192 195 196 201 203 205 206 207 208 # 22427 intersection c a 211 1 0 f b 211 1 0 f # 22428 intersection c a 211 1 0 f b 211 1 1 e # 22429 intersection c a 211 1 0 f b 211 1 0 f # 22430 intersection c a 211 1 0 f b 211 1 1 f # 22431 intersection c a 211 1 0 f b 211 1 0 f # 22432 intersection c a 211 1 0 f b 211 1 1 0 2 4 5 6 10 17 18 19 21 24 27 29 33 36 38 40 41 42 43 44 49 50 51 52 55 57 59 61 62 63 64 66 67 68 69 71 73 74 77 78 80 81 83 84 89 91 92 96 99 103 107 109 112 114 115 116 122 124 126 128 129 133 134 135 136 138 141 143 146 148 149 150 153 154 158 161 163 164 166 167 168 169 170 171 172 174 176 177 178 179 180 188 190 195 196 198 200 201 203 206 209 # 22433 intersection c a 211 1 0 0 2 5 6 7 8 9 10 11 13 16 18 21 22 24 29 34 35 38 39 42 43 46 48 49 52 55 57 58 59 60 63 64 66 67 68 70 72 73 74 77 78 79 80 83 85 87 90 92 95 96 97 98 101 102 104 105 106 107 108 109 110 111 112 116 117 122 124 125 127 128 129 132 133 134 136 137 140 143 144 145 147 148 149 153 154 156 157 158 159 160 163 167 169 173 174 175 178 180 181 184 187 190 192 194 195 196 198 200 202 205 207 208 209 210 b 211 1 0 0 2 5 6 7 8 9 10 11 13 16 18 21 22 24 29 34 35 38 39 42 43 46 48 49 52 55 57 58 59 60 63 64 66 67 68 70 72 73 74 77 78 79 80 83 85 87 90 92 95 96 97 98 101 102 104 105 106 107 108 109 110 111 112 116 117 122 124 125 127 128 129 132 133 134 136 137 140 143 144 145 147 148 149 153 154 156 157 158 159 160 163 167 169 173 174 175 178 180 181 184 187 190 192 194 195 196 198 200 202 205 207 208 209 210 # 22434 intersection c a 211 1 0 0 2 5 6 7 8 9 10 11 13 16 18 21 22 24 29 34 35 38 39 42 43 46 48 49 52 55 57 58 59 60 63 64 66 67 68 70 72 73 74 77 78 79 80 83 85 87 90 92 95 96 97 98 101 102 104 105 106 107 108 109 110 111 112 116 117 122 124 125 127 128 129 132 133 134 136 137 140 143 144 145 147 148 149 153 154 156 157 158 159 160 163 167 169 173 174 175 178 180 181 184 187 190 192 194 195 196 198 200 202 205 207 208 209 210 b 211 1 1 e # 22435 intersection c a 211 1 0 0 1 4 5 6 7 8 10 12 15 18 19 22 23 24 26 29 32 33 34 35 36 38 39 40 41 42 43 46 47 48 49 50 53 54 55 57 59 60 61 63 64 65 66 67 69 72 74 76 77 82 83 85 86 88 91 94 97 98 99 100 103 104 107 108 109 113 116 117 118 124 125 126 128 129 136 138 139 146 147 149 151 153 155 156 157 160 162 163 164 167 168 171 173 175 178 179 183 184 185 186 187 188 189 197 200 201 205 207 209 b 211 1 0 0 1 4 5 6 7 8 10 12 15 18 19 22 23 24 26 29 32 33 34 35 36 38 39 40 41 42 43 46 47 48 49 50 53 54 55 57 59 60 61 63 64 65 66 67 69 72 74 76 77 82 83 85 86 88 91 94 97 98 99 100 103 104 107 108 109 113 116 117 118 124 125 126 128 129 136 138 139 146 147 149 151 153 155 156 157 160 162 163 164 167 168 171 173 175 178 179 183 184 185 186 187 188 189 197 200 201 205 207 209 # 22436 intersection c a 211 1 0 0 1 4 5 6 7 8 10 12 15 18 19 22 23 24 26 29 32 33 34 35 36 38 39 40 41 42 43 46 47 48 49 50 53 54 55 57 59 60 61 63 64 65 66 67 69 72 74 76 77 82 83 85 86 88 91 94 97 98 99 100 103 104 107 108 109 113 116 117 118 124 125 126 128 129 136 138 139 146 147 149 151 153 155 156 157 160 162 163 164 167 168 171 173 175 178 179 183 184 185 186 187 188 189 197 200 201 205 207 209 b 211 1 1 f # 22437 intersection c a 211 1 0 0 2 5 7 11 12 16 23 24 26 29 30 33 34 36 37 41 43 45 48 49 52 53 54 55 57 59 60 62 65 66 67 68 71 72 74 80 81 83 84 86 89 90 93 94 96 100 101 103 106 108 110 111 114 116 118 121 122 123 124 128 129 130 131 135 136 139 140 141 146 147 148 149 153 154 158 160 161 165 170 174 175 176 177 178 181 182 183 184 185 188 189 190 191 192 195 196 197 203 204 208 210 b 211 1 0 0 2 5 7 11 12 16 23 24 26 29 30 33 34 36 37 41 43 45 48 49 52 53 54 55 57 59 60 62 65 66 67 68 71 72 74 80 81 83 84 86 89 90 93 94 96 100 101 103 106 108 110 111 114 116 118 121 122 123 124 128 129 130 131 135 136 139 140 141 146 147 148 149 153 154 158 160 161 165 170 174 175 176 177 178 181 182 183 184 185 188 189 190 191 192 195 196 197 203 204 208 210 # 22438 intersection c a 211 1 0 0 2 5 7 11 12 16 23 24 26 29 30 33 34 36 37 41 43 45 48 49 52 53 54 55 57 59 60 62 65 66 67 68 71 72 74 80 81 83 84 86 89 90 93 94 96 100 101 103 106 108 110 111 114 116 118 121 122 123 124 128 129 130 131 135 136 139 140 141 146 147 148 149 153 154 158 160 161 165 170 174 175 176 177 178 181 182 183 184 185 188 189 190 191 192 195 196 197 203 204 208 210 b 211 1 1 2 6 7 9 10 13 14 16 17 18 20 21 22 23 24 25 28 32 33 34 35 37 38 39 43 50 54 55 60 62 65 67 68 70 72 76 77 78 80 84 88 90 92 93 94 96 99 100 102 104 106 107 108 111 112 113 115 119 120 123 128 129 131 137 141 145 147 149 150 155 156 157 159 160 161 164 165 166 168 170 172 174 181 182 183 185 186 187 188 190 192 194 195 196 199 200 202 203 204 205 208 210 # 22439 intersection c a 211 1 1 e b 211 1 1 e # 22440 intersection c a 211 1 1 e b 211 0 0 e # 22441 intersection c a 211 1 1 e b 211 1 1 e # 22442 intersection c a 211 1 1 e b 211 0 0 f # 22443 intersection c a 211 1 1 e b 211 1 1 e # 22444 intersection c a 211 1 1 e b 211 0 0 3 4 6 7 9 11 12 13 15 16 17 20 21 24 26 30 32 36 41 42 49 50 52 54 55 58 59 60 61 65 66 68 70 72 73 77 78 79 82 84 85 86 89 90 91 92 96 98 99 100 101 103 105 107 109 111 124 125 126 127 129 130 133 134 135 136 138 143 144 146 147 148 151 152 153 155 156 157 160 162 165 167 168 169 174 175 176 177 178 179 182 185 188 189 190 191 192 193 194 202 204 205 207 208 210 # 22445 intersection c a 211 1 1 f b 211 1 1 f # 22446 intersection c a 211 1 1 f b 211 0 0 e # 22447 intersection c a 211 1 1 f b 211 1 1 f # 22448 intersection c a 211 1 1 f b 211 0 0 f # 22449 intersection c a 211 1 1 f b 211 1 1 f # 22450 intersection c a 211 1 1 f b 211 0 0 1 3 6 7 9 10 12 13 15 19 20 21 24 26 27 28 33 34 35 37 38 39 40 41 47 48 49 51 53 54 57 58 60 66 67 69 70 74 75 76 78 79 80 86 89 90 95 96 98 101 103 104 106 107 112 113 114 115 117 119 122 123 128 132 133 134 135 137 138 139 143 146 147 148 152 156 157 159 160 161 163 164 166 168 169 170 172 178 180 182 184 186 187 188 190 191 194 197 200 202 203 204 205 206 209 210 # 22451 intersection c a 211 1 1 0 2 5 8 11 12 13 14 15 17 19 20 21 24 27 28 30 31 32 38 40 43 46 53 54 55 58 59 60 61 62 63 65 67 72 73 75 77 79 81 82 85 87 88 90 91 97 99 100 103 105 106 108 111 112 116 117 119 121 122 123 127 128 130 131 132 134 138 139 140 141 142 143 151 153 154 155 157 158 161 165 166 167 170 173 174 175 178 179 180 182 190 191 193 195 196 200 202 204 205 206 208 209 210 b 211 1 1 0 2 5 8 11 12 13 14 15 17 19 20 21 24 27 28 30 31 32 38 40 43 46 53 54 55 58 59 60 61 62 63 65 67 72 73 75 77 79 81 82 85 87 88 90 91 97 99 100 103 105 106 108 111 112 116 117 119 121 122 123 127 128 130 131 132 134 138 139 140 141 142 143 151 153 154 155 157 158 161 165 166 167 170 173 174 175 178 179 180 182 190 191 193 195 196 200 202 204 205 206 208 209 210 # 22452 intersection c a 211 1 1 0 2 5 8 11 12 13 14 15 17 19 20 21 24 27 28 30 31 32 38 40 43 46 53 54 55 58 59 60 61 62 63 65 67 72 73 75 77 79 81 82 85 87 88 90 91 97 99 100 103 105 106 108 111 112 116 117 119 121 122 123 127 128 130 131 132 134 138 139 140 141 142 143 151 153 154 155 157 158 161 165 166 167 170 173 174 175 178 179 180 182 190 191 193 195 196 200 202 204 205 206 208 209 210 b 211 0 0 e # 22453 intersection c a 211 1 1 0 2 3 7 8 10 11 12 13 16 18 22 25 28 32 37 41 42 43 44 48 50 51 52 53 55 57 61 62 67 68 69 70 72 73 77 78 79 81 82 83 86 87 91 93 95 97 105 106 107 109 110 111 113 114 115 117 118 119 122 123 125 128 129 130 135 136 138 140 145 148 151 152 153 154 155 156 159 162 163 166 168 170 171 172 177 178 179 181 182 183 184 185 186 187 188 190 192 193 194 197 198 199 201 202 204 205 208 b 211 1 1 0 2 3 7 8 10 11 12 13 16 18 22 25 28 32 37 41 42 43 44 48 50 51 52 53 55 57 61 62 67 68 69 70 72 73 77 78 79 81 82 83 86 87 91 93 95 97 105 106 107 109 110 111 113 114 115 117 118 119 122 123 125 128 129 130 135 136 138 140 145 148 151 152 153 154 155 156 159 162 163 166 168 170 171 172 177 178 179 181 182 183 184 185 186 187 188 190 192 193 194 197 198 199 201 202 204 205 208 # 22454 intersection c a 211 1 1 0 2 3 7 8 10 11 12 13 16 18 22 25 28 32 37 41 42 43 44 48 50 51 52 53 55 57 61 62 67 68 69 70 72 73 77 78 79 81 82 83 86 87 91 93 95 97 105 106 107 109 110 111 113 114 115 117 118 119 122 123 125 128 129 130 135 136 138 140 145 148 151 152 153 154 155 156 159 162 163 166 168 170 171 172 177 178 179 181 182 183 184 185 186 187 188 190 192 193 194 197 198 199 201 202 204 205 208 b 211 0 0 f # 22455 intersection c a 211 1 1 0 3 5 6 8 10 13 16 17 19 21 22 24 25 26 33 35 36 38 39 40 41 42 44 46 47 49 50 52 54 55 57 59 61 63 65 70 73 78 81 82 85 88 94 95 98 100 101 102 104 106 109 110 111 113 114 115 116 119 120 122 123 124 125 126 129 130 132 134 135 136 137 138 141 142 143 145 146 149 150 151 153 154 156 157 158 162 164 165 166 167 168 169 170 172 173 176 177 180 186 188 189 190 193 194 196 197 198 199 200 201 202 204 206 207 b 211 1 1 0 3 5 6 8 10 13 16 17 19 21 22 24 25 26 33 35 36 38 39 40 41 42 44 46 47 49 50 52 54 55 57 59 61 63 65 70 73 78 81 82 85 88 94 95 98 100 101 102 104 106 109 110 111 113 114 115 116 119 120 122 123 124 125 126 129 130 132 134 135 136 137 138 141 142 143 145 146 149 150 151 153 154 156 157 158 162 164 165 166 167 168 169 170 172 173 176 177 180 186 188 189 190 193 194 196 197 198 199 200 201 202 204 206 207 # 22456 intersection c a 211 1 1 0 3 5 6 8 10 13 16 17 19 21 22 24 25 26 33 35 36 38 39 40 41 42 44 46 47 49 50 52 54 55 57 59 61 63 65 70 73 78 81 82 85 88 94 95 98 100 101 102 104 106 109 110 111 113 114 115 116 119 120 122 123 124 125 126 129 130 132 134 135 136 137 138 141 142 143 145 146 149 150 151 153 154 156 157 158 162 164 165 166 167 168 169 170 172 173 176 177 180 186 188 189 190 193 194 196 197 198 199 200 201 202 204 206 207 b 211 0 0 1 3 5 6 7 8 10 12 13 14 15 16 17 18 21 23 24 25 26 27 28 29 32 33 34 35 37 38 43 46 47 49 51 52 53 54 55 56 58 59 62 64 65 68 69 70 71 74 75 76 77 78 79 80 82 83 86 87 88 89 90 93 94 96 97 98 100 104 109 116 119 123 124 125 126 127 128 129 131 133 135 137 139 140 141 143 145 147 149 150 151 153 156 158 159 162 164 169 170 171 172 174 176 181 182 183 184 186 187 188 189 190 193 194 199 202 204 205 207 209 210 # 22457 intersection c a 211 1 1 e b 211 1 1 e # 22458 intersection c a 211 1 1 e b 211 0 1 e # 22459 intersection c a 211 1 1 e b 211 1 1 e # 22460 intersection c a 211 1 1 e b 211 0 1 f # 22461 intersection c a 211 1 1 e b 211 1 1 e # 22462 intersection c a 211 1 1 e b 211 0 1 0 1 2 4 7 10 11 12 13 15 17 19 20 21 22 24 26 28 34 35 36 38 40 43 45 46 54 55 56 60 61 62 65 69 70 75 76 77 81 82 84 85 87 89 92 97 98 99 100 101 106 110 111 112 113 115 117 118 119 120 121 122 123 131 136 138 147 151 154 156 157 158 164 166 167 168 169 174 176 181 183 185 188 193 194 197 198 199 203 204 205 207 210 # 22463 intersection c a 211 1 1 f b 211 1 1 f # 22464 intersection c a 211 1 1 f b 211 0 1 e # 22465 intersection c a 211 1 1 f b 211 1 1 f # 22466 intersection c a 211 1 1 f b 211 0 1 f # 22467 intersection c a 211 1 1 f b 211 1 1 f # 22468 intersection c a 211 1 1 f b 211 0 1 0 6 7 9 13 15 17 18 21 24 28 29 33 34 35 36 37 40 41 42 44 45 46 47 48 49 52 53 54 58 59 69 71 80 82 83 88 91 92 93 95 97 99 101 102 103 104 105 112 114 116 118 125 127 128 140 141 142 143 145 147 148 149 153 154 156 157 159 161 162 163 164 166 168 170 171 174 175 177 178 180 182 186 189 190 191 192 193 194 195 197 198 199 201 202 203 210 # 22469 intersection c a 211 1 1 3 4 5 7 10 13 15 17 18 21 22 23 24 28 29 33 35 36 37 38 41 42 44 45 48 56 57 58 59 61 63 64 65 66 69 70 71 72 75 77 78 82 84 85 86 87 88 90 94 97 98 99 104 105 106 109 110 111 113 116 117 122 123 124 125 129 130 131 138 139 141 143 144 145 148 149 150 153 159 162 163 164 170 171 177 178 179 181 183 186 187 188 190 192 193 195 197 199 203 204 205 207 208 209 210 b 211 1 1 3 4 5 7 10 13 15 17 18 21 22 23 24 28 29 33 35 36 37 38 41 42 44 45 48 56 57 58 59 61 63 64 65 66 69 70 71 72 75 77 78 82 84 85 86 87 88 90 94 97 98 99 104 105 106 109 110 111 113 116 117 122 123 124 125 129 130 131 138 139 141 143 144 145 148 149 150 153 159 162 163 164 170 171 177 178 179 181 183 186 187 188 190 192 193 195 197 199 203 204 205 207 208 209 210 # 22470 intersection c a 211 1 1 3 4 5 7 10 13 15 17 18 21 22 23 24 28 29 33 35 36 37 38 41 42 44 45 48 56 57 58 59 61 63 64 65 66 69 70 71 72 75 77 78 82 84 85 86 87 88 90 94 97 98 99 104 105 106 109 110 111 113 116 117 122 123 124 125 129 130 131 138 139 141 143 144 145 148 149 150 153 159 162 163 164 170 171 177 178 179 181 183 186 187 188 190 192 193 195 197 199 203 204 205 207 208 209 210 b 211 0 1 e # 22471 intersection c a 211 1 1 1 3 5 6 8 14 17 18 21 22 24 25 27 30 31 33 34 36 37 38 41 42 43 47 49 50 52 53 54 55 59 60 62 63 67 76 79 84 89 92 96 97 99 100 101 104 105 106 107 109 110 111 118 119 129 133 139 141 145 146 147 150 152 153 154 159 160 161 162 166 167 168 170 171 176 180 181 182 184 186 188 191 192 196 203 205 210 b 211 1 1 1 3 5 6 8 14 17 18 21 22 24 25 27 30 31 33 34 36 37 38 41 42 43 47 49 50 52 53 54 55 59 60 62 63 67 76 79 84 89 92 96 97 99 100 101 104 105 106 107 109 110 111 118 119 129 133 139 141 145 146 147 150 152 153 154 159 160 161 162 166 167 168 170 171 176 180 181 182 184 186 188 191 192 196 203 205 210 # 22472 intersection c a 211 1 1 1 3 5 6 8 14 17 18 21 22 24 25 27 30 31 33 34 36 37 38 41 42 43 47 49 50 52 53 54 55 59 60 62 63 67 76 79 84 89 92 96 97 99 100 101 104 105 106 107 109 110 111 118 119 129 133 139 141 145 146 147 150 152 153 154 159 160 161 162 166 167 168 170 171 176 180 181 182 184 186 188 191 192 196 203 205 210 b 211 0 1 f # 22473 intersection c a 211 1 1 0 5 7 8 14 15 17 19 21 27 29 33 34 35 36 38 39 40 44 45 47 48 49 50 53 54 55 59 61 63 64 66 67 69 70 72 73 75 76 77 78 79 83 86 87 91 93 96 100 101 102 103 104 106 107 108 110 112 116 121 122 123 126 128 130 131 133 134 136 139 140 143 144 145 149 150 151 153 155 159 160 162 163 168 171 172 173 174 176 178 179 181 182 183 186 187 188 190 192 195 196 197 199 202 203 205 207 210 b 211 1 1 0 5 7 8 14 15 17 19 21 27 29 33 34 35 36 38 39 40 44 45 47 48 49 50 53 54 55 59 61 63 64 66 67 69 70 72 73 75 76 77 78 79 83 86 87 91 93 96 100 101 102 103 104 106 107 108 110 112 116 121 122 123 126 128 130 131 133 134 136 139 140 143 144 145 149 150 151 153 155 159 160 162 163 168 171 172 173 174 176 178 179 181 182 183 186 187 188 190 192 195 196 197 199 202 203 205 207 210 # 22474 intersection c a 211 1 1 0 5 7 8 14 15 17 19 21 27 29 33 34 35 36 38 39 40 44 45 47 48 49 50 53 54 55 59 61 63 64 66 67 69 70 72 73 75 76 77 78 79 83 86 87 91 93 96 100 101 102 103 104 106 107 108 110 112 116 121 122 123 126 128 130 131 133 134 136 139 140 143 144 145 149 150 151 153 155 159 160 162 163 168 171 172 173 174 176 178 179 181 182 183 186 187 188 190 192 195 196 197 199 202 203 205 207 210 b 211 0 1 0 2 4 5 8 13 14 16 19 20 21 22 23 25 29 31 32 33 35 36 37 39 42 45 46 47 50 51 54 57 58 60 61 63 64 65 67 68 69 70 71 73 79 82 83 84 87 89 92 93 94 95 96 98 99 101 102 106 107 110 111 112 114 116 117 120 121 122 123 124 125 126 127 129 130 132 134 136 137 141 145 146 148 150 151 153 154 157 159 160 161 163 166 171 173 174 175 176 177 179 180 182 184 185 188 189 191 192 196 199 200 201 202 203 204 205 206 209 # 22475 intersection c a 211 1 1 e b 211 1 1 e # 22476 intersection c a 211 1 1 e b 211 1 0 e # 22477 intersection c a 211 1 1 e b 211 1 1 e # 22478 intersection c a 211 1 1 e b 211 1 0 f # 22479 intersection c a 211 1 1 e b 211 1 1 e # 22480 intersection c a 211 1 1 e b 211 1 0 2 3 5 7 9 10 12 14 15 20 22 23 25 26 27 29 30 31 32 33 36 37 38 40 41 47 49 50 53 55 56 59 60 62 63 68 71 73 75 77 79 80 85 86 88 91 92 93 94 98 102 103 108 109 111 114 115 117 126 127 129 130 131 132 133 134 138 141 142 143 145 146 147 148 149 150 154 155 157 158 159 160 161 162 163 164 165 166 167 168 169 172 174 177 178 180 181 182 185 187 188 189 190 192 193 200 201 202 203 204 205 206 209 # 22481 intersection c a 211 1 1 f b 211 1 1 f # 22482 intersection c a 211 1 1 f b 211 1 0 e # 22483 intersection c a 211 1 1 f b 211 1 1 f # 22484 intersection c a 211 1 1 f b 211 1 0 f # 22485 intersection c a 211 1 1 f b 211 1 1 f # 22486 intersection c a 211 1 1 f b 211 1 0 1 5 6 7 8 9 10 15 16 17 20 25 30 31 35 37 38 39 40 44 45 47 49 52 53 54 56 58 60 61 62 64 66 69 71 79 81 82 85 88 91 92 94 95 96 97 99 100 102 103 104 108 110 111 113 115 116 117 118 119 120 123 124 126 127 130 132 133 135 136 138 139 140 141 142 144 145 146 147 148 149 151 153 154 157 159 160 161 163 164 167 168 171 179 181 182 183 184 194 196 198 199 200 202 204 206 207 210 # 22487 intersection c a 211 1 1 0 1 2 4 6 7 11 12 13 14 15 16 18 19 22 23 25 26 29 32 33 34 35 38 39 40 41 44 51 52 53 56 61 62 64 66 67 68 69 70 71 72 77 78 79 82 89 90 91 92 94 96 97 99 100 102 105 106 107 108 109 110 111 113 116 117 118 120 124 126 127 130 131 132 133 136 143 144 145 147 149 153 154 156 157 163 165 167 171 172 173 175 176 177 178 180 184 186 187 188 192 195 198 200 203 205 b 211 1 1 0 1 2 4 6 7 11 12 13 14 15 16 18 19 22 23 25 26 29 32 33 34 35 38 39 40 41 44 51 52 53 56 61 62 64 66 67 68 69 70 71 72 77 78 79 82 89 90 91 92 94 96 97 99 100 102 105 106 107 108 109 110 111 113 116 117 118 120 124 126 127 130 131 132 133 136 143 144 145 147 149 153 154 156 157 163 165 167 171 172 173 175 176 177 178 180 184 186 187 188 192 195 198 200 203 205 # 22488 intersection c a 211 1 1 0 1 2 4 6 7 11 12 13 14 15 16 18 19 22 23 25 26 29 32 33 34 35 38 39 40 41 44 51 52 53 56 61 62 64 66 67 68 69 70 71 72 77 78 79 82 89 90 91 92 94 96 97 99 100 102 105 106 107 108 109 110 111 113 116 117 118 120 124 126 127 130 131 132 133 136 143 144 145 147 149 153 154 156 157 163 165 167 171 172 173 175 176 177 178 180 184 186 187 188 192 195 198 200 203 205 b 211 1 0 e # 22489 intersection c a 211 1 1 2 10 14 19 21 23 25 29 30 31 33 35 40 41 42 45 47 48 49 50 53 55 56 57 63 68 69 70 71 72 73 75 76 77 78 79 82 83 86 88 89 90 96 97 98 99 101 102 104 105 107 108 109 115 116 117 119 120 124 126 129 131 132 133 134 135 136 139 141 142 143 146 150 152 156 158 159 160 162 163 165 168 169 170 172 173 174 177 178 180 181 182 183 184 187 190 195 197 198 200 201 203 204 209 210 b 211 1 1 2 10 14 19 21 23 25 29 30 31 33 35 40 41 42 45 47 48 49 50 53 55 56 57 63 68 69 70 71 72 73 75 76 77 78 79 82 83 86 88 89 90 96 97 98 99 101 102 104 105 107 108 109 115 116 117 119 120 124 126 129 131 132 133 134 135 136 139 141 142 143 146 150 152 156 158 159 160 162 163 165 168 169 170 172 173 174 177 178 180 181 182 183 184 187 190 195 197 198 200 201 203 204 209 210 # 22490 intersection c a 211 1 1 2 10 14 19 21 23 25 29 30 31 33 35 40 41 42 45 47 48 49 50 53 55 56 57 63 68 69 70 71 72 73 75 76 77 78 79 82 83 86 88 89 90 96 97 98 99 101 102 104 105 107 108 109 115 116 117 119 120 124 126 129 131 132 133 134 135 136 139 141 142 143 146 150 152 156 158 159 160 162 163 165 168 169 170 172 173 174 177 178 180 181 182 183 184 187 190 195 197 198 200 201 203 204 209 210 b 211 1 0 f # 22491 intersection c a 211 1 1 1 3 4 5 11 12 13 14 15 16 17 18 21 22 24 27 30 31 34 35 36 37 41 42 45 48 49 50 52 56 57 62 63 65 66 68 70 72 73 74 76 77 78 80 81 82 83 87 89 91 92 96 98 99 101 102 105 106 108 109 110 111 112 115 116 117 118 119 122 126 129 131 132 136 139 144 145 148 154 155 157 159 160 161 162 164 166 167 168 170 174 177 178 179 183 185 186 187 188 190 192 193 194 195 197 198 200 201 202 204 205 206 208 b 211 1 1 1 3 4 5 11 12 13 14 15 16 17 18 21 22 24 27 30 31 34 35 36 37 41 42 45 48 49 50 52 56 57 62 63 65 66 68 70 72 73 74 76 77 78 80 81 82 83 87 89 91 92 96 98 99 101 102 105 106 108 109 110 111 112 115 116 117 118 119 122 126 129 131 132 136 139 144 145 148 154 155 157 159 160 161 162 164 166 167 168 170 174 177 178 179 183 185 186 187 188 190 192 193 194 195 197 198 200 201 202 204 205 206 208 # 22492 intersection c a 211 1 1 1 3 4 5 11 12 13 14 15 16 17 18 21 22 24 27 30 31 34 35 36 37 41 42 45 48 49 50 52 56 57 62 63 65 66 68 70 72 73 74 76 77 78 80 81 82 83 87 89 91 92 96 98 99 101 102 105 106 108 109 110 111 112 115 116 117 118 119 122 126 129 131 132 136 139 144 145 148 154 155 157 159 160 161 162 164 166 167 168 170 174 177 178 179 183 185 186 187 188 190 192 193 194 195 197 198 200 201 202 204 205 206 208 b 211 1 0 0 1 3 9 11 12 14 15 16 18 23 25 26 27 28 30 31 32 36 37 40 41 42 44 45 47 49 50 51 54 55 58 59 60 61 62 63 66 71 77 78 80 81 85 89 92 94 95 97 99 101 102 103 106 108 109 110 111 112 114 118 119 122 123 125 126 127 128 130 132 136 138 139 141 144 148 150 151 153 154 155 156 157 158 159 161 165 167 168 170 172 175 176 177 183 186 189 191 193 194 195 198 200 202 203 204 206 209 210 # 22493 intersection c a 211 1 1 e b 211 1 1 e # 22494 intersection c a 211 1 1 e b 211 1 1 e # 22495 intersection c a 211 1 1 e b 211 1 1 e # 22496 intersection c a 211 1 1 e b 211 1 1 f # 22497 intersection c a 211 1 1 e b 211 1 1 e # 22498 intersection c a 211 1 1 e b 211 1 1 5 6 7 9 10 13 15 17 18 19 24 25 26 28 29 33 34 35 36 37 42 43 45 46 48 52 53 55 61 62 63 64 65 67 69 71 73 74 75 76 79 80 82 83 87 88 89 96 97 98 100 106 108 110 111 112 113 115 117 118 120 121 122 128 130 131 132 134 135 137 142 143 146 147 149 152 155 157 161 167 170 172 173 175 178 179 181 183 185 186 187 188 196 197 199 203 205 206 207 209 210 # 22499 intersection c a 211 1 1 f b 211 1 1 f # 22500 intersection c a 211 1 1 f b 211 1 1 e # 22501 intersection c a 211 1 1 f b 211 1 1 f # 22502 intersection c a 211 1 1 f b 211 1 1 f # 22503 intersection c a 211 1 1 f b 211 1 1 f # 22504 intersection c a 211 1 1 f b 211 1 1 0 1 2 3 4 5 6 7 9 10 11 15 17 18 22 25 29 30 31 32 33 34 35 36 42 43 44 52 54 56 57 60 63 65 69 71 74 76 78 79 80 86 90 92 93 94 96 101 103 113 114 115 116 120 126 128 130 135 137 138 139 143 144 145 146 147 153 154 155 158 160 161 162 163 164 166 169 172 173 175 176 177 178 183 184 188 198 199 200 203 204 206 207 209 210 # 22505 intersection c a 211 1 1 0 5 6 10 11 12 15 16 17 18 20 21 22 23 24 26 27 28 29 30 32 34 36 37 38 41 44 45 47 48 49 52 53 55 57 58 59 60 63 64 66 67 69 71 73 76 82 87 90 91 92 94 96 97 103 107 108 109 114 115 116 119 120 122 125 126 131 132 133 134 135 138 142 144 145 147 149 150 151 152 153 158 159 160 162 164 165 171 172 175 176 178 185 186 187 190 191 192 193 195 196 197 198 202 204 207 208 210 b 211 1 1 0 5 6 10 11 12 15 16 17 18 20 21 22 23 24 26 27 28 29 30 32 34 36 37 38 41 44 45 47 48 49 52 53 55 57 58 59 60 63 64 66 67 69 71 73 76 82 87 90 91 92 94 96 97 103 107 108 109 114 115 116 119 120 122 125 126 131 132 133 134 135 138 142 144 145 147 149 150 151 152 153 158 159 160 162 164 165 171 172 175 176 178 185 186 187 190 191 192 193 195 196 197 198 202 204 207 208 210 # 22506 intersection c a 211 1 1 0 5 6 10 11 12 15 16 17 18 20 21 22 23 24 26 27 28 29 30 32 34 36 37 38 41 44 45 47 48 49 52 53 55 57 58 59 60 63 64 66 67 69 71 73 76 82 87 90 91 92 94 96 97 103 107 108 109 114 115 116 119 120 122 125 126 131 132 133 134 135 138 142 144 145 147 149 150 151 152 153 158 159 160 162 164 165 171 172 175 176 178 185 186 187 190 191 192 193 195 196 197 198 202 204 207 208 210 b 211 1 1 e # 22507 intersection c a 211 1 1 0 1 4 5 6 7 14 15 16 17 18 23 27 30 38 40 42 44 47 50 52 55 56 58 59 60 61 65 70 72 73 75 77 80 82 83 84 86 88 89 91 92 93 94 95 99 100 102 103 106 110 112 113 114 117 118 119 122 125 127 129 136 137 138 141 143 144 151 152 153 154 156 158 159 160 164 166 167 169 171 172 173 174 175 178 180 183 186 187 189 190 194 196 201 202 203 205 206 207 208 209 b 211 1 1 0 1 4 5 6 7 14 15 16 17 18 23 27 30 38 40 42 44 47 50 52 55 56 58 59 60 61 65 70 72 73 75 77 80 82 83 84 86 88 89 91 92 93 94 95 99 100 102 103 106 110 112 113 114 117 118 119 122 125 127 129 136 137 138 141 143 144 151 152 153 154 156 158 159 160 164 166 167 169 171 172 173 174 175 178 180 183 186 187 189 190 194 196 201 202 203 205 206 207 208 209 # 22508 intersection c a 211 1 1 0 1 4 5 6 7 14 15 16 17 18 23 27 30 38 40 42 44 47 50 52 55 56 58 59 60 61 65 70 72 73 75 77 80 82 83 84 86 88 89 91 92 93 94 95 99 100 102 103 106 110 112 113 114 117 118 119 122 125 127 129 136 137 138 141 143 144 151 152 153 154 156 158 159 160 164 166 167 169 171 172 173 174 175 178 180 183 186 187 189 190 194 196 201 202 203 205 206 207 208 209 b 211 1 1 f # 22509 intersection c a 211 1 1 0 1 5 11 12 17 18 21 26 27 29 31 32 33 35 37 39 44 45 46 48 49 50 52 55 58 59 62 63 64 66 71 72 73 75 76 78 79 81 82 83 84 86 88 89 93 98 101 104 106 108 109 111 112 114 115 116 117 119 120 122 127 131 135 136 139 141 142 143 144 145 146 147 148 149 151 154 155 156 158 160 161 163 166 168 171 173 174 176 177 178 180 184 187 188 189 190 192 196 198 200 207 b 211 1 1 0 1 5 11 12 17 18 21 26 27 29 31 32 33 35 37 39 44 45 46 48 49 50 52 55 58 59 62 63 64 66 71 72 73 75 76 78 79 81 82 83 84 86 88 89 93 98 101 104 106 108 109 111 112 114 115 116 117 119 120 122 127 131 135 136 139 141 142 143 144 145 146 147 148 149 151 154 155 156 158 160 161 163 166 168 171 173 174 176 177 178 180 184 187 188 189 190 192 196 198 200 207 # 22510 intersection c a 211 1 1 0 1 5 11 12 17 18 21 26 27 29 31 32 33 35 37 39 44 45 46 48 49 50 52 55 58 59 62 63 64 66 71 72 73 75 76 78 79 81 82 83 84 86 88 89 93 98 101 104 106 108 109 111 112 114 115 116 117 119 120 122 127 131 135 136 139 141 142 143 144 145 146 147 148 149 151 154 155 156 158 160 161 163 166 168 171 173 174 176 177 178 180 184 187 188 189 190 192 196 198 200 207 b 211 1 1 0 1 2 4 5 7 8 10 13 14 15 16 18 22 26 30 33 34 36 40 41 42 44 47 48 50 51 53 55 56 60 62 65 66 67 68 71 74 76 78 81 83 84 85 86 87 92 94 96 97 99 101 102 104 105 106 107 108 109 112 113 116 120 122 123 124 125 127 128 130 131 138 140 142 143 144 147 148 150 151 152 153 154 155 157 163 164 165 166 167 168 169 171 173 174 177 178 179 181 182 184 189 191 192 193 194 195 197 198 200 201 203 204 # 22511 intersection c a 224 0 0 e b 224 0 0 e # 22512 intersection c a 224 0 0 e b 224 0 0 e # 22513 intersection c a 224 0 0 e b 224 0 0 e # 22514 intersection c a 224 0 0 e b 224 0 0 f # 22515 intersection c a 224 0 0 e b 224 0 0 e # 22516 intersection c a 224 0 0 e b 224 0 0 0 2 4 8 10 11 14 15 16 18 21 22 24 27 29 32 35 36 37 39 41 42 48 50 52 53 55 57 58 59 60 61 62 63 66 67 69 70 71 72 76 77 78 79 80 81 83 84 85 86 88 90 93 95 97 98 99 100 102 103 104 105 107 108 110 111 114 116 118 119 120 121 124 129 133 136 137 139 143 144 147 148 151 152 153 155 158 159 163 165 168 169 170 176 177 178 180 183 186 188 189 192 197 199 200 204 206 207 209 216 217 218 219 220 223 # 22517 intersection c a 224 0 0 f b 224 0 0 f # 22518 intersection c a 224 0 0 f b 224 0 0 e # 22519 intersection c a 224 0 0 f b 224 0 0 f # 22520 intersection c a 224 0 0 f b 224 0 0 f # 22521 intersection c a 224 0 0 f b 224 0 0 f # 22522 intersection c a 224 0 0 f b 224 0 0 0 1 2 3 4 6 7 8 11 12 14 15 16 17 22 25 28 29 30 31 32 33 34 35 37 38 40 43 44 46 47 49 50 51 53 55 57 60 63 65 66 67 68 69 71 73 75 76 78 81 82 83 86 87 88 89 91 93 96 100 105 108 109 112 114 116 117 119 120 121 123 125 129 130 133 136 137 138 139 140 142 144 145 146 148 149 152 153 156 157 159 160 163 165 167 170 173 174 176 178 181 182 184 189 193 197 199 200 204 205 206 207 211 216 217 218 220 223 # 22523 intersection c a 224 0 0 0 1 5 9 10 12 13 14 19 22 25 27 28 29 30 31 32 37 38 39 40 41 42 45 46 47 49 51 54 55 58 61 65 67 68 72 74 77 79 80 81 86 88 89 90 93 94 95 96 101 102 105 106 107 108 110 112 114 116 117 118 119 123 125 126 130 131 133 135 136 138 142 144 145 146 151 152 154 157 158 159 160 165 166 167 168 169 174 175 177 179 181 182 185 186 187 192 193 194 196 197 199 201 203 206 208 212 213 216 218 220 222 223 b 224 0 0 0 1 5 9 10 12 13 14 19 22 25 27 28 29 30 31 32 37 38 39 40 41 42 45 46 47 49 51 54 55 58 61 65 67 68 72 74 77 79 80 81 86 88 89 90 93 94 95 96 101 102 105 106 107 108 110 112 114 116 117 118 119 123 125 126 130 131 133 135 136 138 142 144 145 146 151 152 154 157 158 159 160 165 166 167 168 169 174 175 177 179 181 182 185 186 187 192 193 194 196 197 199 201 203 206 208 212 213 216 218 220 222 223 # 22524 intersection c a 224 0 0 0 1 5 9 10 12 13 14 19 22 25 27 28 29 30 31 32 37 38 39 40 41 42 45 46 47 49 51 54 55 58 61 65 67 68 72 74 77 79 80 81 86 88 89 90 93 94 95 96 101 102 105 106 107 108 110 112 114 116 117 118 119 123 125 126 130 131 133 135 136 138 142 144 145 146 151 152 154 157 158 159 160 165 166 167 168 169 174 175 177 179 181 182 185 186 187 192 193 194 196 197 199 201 203 206 208 212 213 216 218 220 222 223 b 224 0 0 e # 22525 intersection c a 224 0 0 2 6 7 8 14 17 18 20 22 23 25 26 29 30 31 33 34 37 41 43 44 49 50 53 54 55 57 58 59 60 61 63 64 69 71 73 77 78 80 81 82 83 84 85 86 88 89 90 92 95 96 97 98 100 105 106 107 109 112 113 116 117 118 120 121 122 130 132 133 136 138 140 143 145 147 148 149 152 154 155 156 161 162 164 167 170 172 175 178 179 184 187 188 197 199 204 205 207 210 211 212 214 215 216 218 219 220 222 b 224 0 0 2 6 7 8 14 17 18 20 22 23 25 26 29 30 31 33 34 37 41 43 44 49 50 53 54 55 57 58 59 60 61 63 64 69 71 73 77 78 80 81 82 83 84 85 86 88 89 90 92 95 96 97 98 100 105 106 107 109 112 113 116 117 118 120 121 122 130 132 133 136 138 140 143 145 147 148 149 152 154 155 156 161 162 164 167 170 172 175 178 179 184 187 188 197 199 204 205 207 210 211 212 214 215 216 218 219 220 222 # 22526 intersection c a 224 0 0 2 6 7 8 14 17 18 20 22 23 25 26 29 30 31 33 34 37 41 43 44 49 50 53 54 55 57 58 59 60 61 63 64 69 71 73 77 78 80 81 82 83 84 85 86 88 89 90 92 95 96 97 98 100 105 106 107 109 112 113 116 117 118 120 121 122 130 132 133 136 138 140 143 145 147 148 149 152 154 155 156 161 162 164 167 170 172 175 178 179 184 187 188 197 199 204 205 207 210 211 212 214 215 216 218 219 220 222 b 224 0 0 f # 22527 intersection c a 224 0 0 2 3 5 6 7 11 14 16 17 25 31 32 34 37 44 46 47 51 55 57 59 60 61 63 64 66 68 70 72 74 75 76 77 80 81 85 87 89 93 98 104 106 108 110 111 113 116 117 120 121 122 124 125 126 127 131 132 133 134 135 136 137 139 141 142 143 144 147 150 153 155 156 158 159 160 162 163 164 165 167 168 169 170 172 173 174 175 179 180 183 185 186 187 188 189 190 191 193 197 200 207 208 209 210 213 216 219 223 b 224 0 0 2 3 5 6 7 11 14 16 17 25 31 32 34 37 44 46 47 51 55 57 59 60 61 63 64 66 68 70 72 74 75 76 77 80 81 85 87 89 93 98 104 106 108 110 111 113 116 117 120 121 122 124 125 126 127 131 132 133 134 135 136 137 139 141 142 143 144 147 150 153 155 156 158 159 160 162 163 164 165 167 168 169 170 172 173 174 175 179 180 183 185 186 187 188 189 190 191 193 197 200 207 208 209 210 213 216 219 223 # 22528 intersection c a 224 0 0 2 3 5 6 7 11 14 16 17 25 31 32 34 37 44 46 47 51 55 57 59 60 61 63 64 66 68 70 72 74 75 76 77 80 81 85 87 89 93 98 104 106 108 110 111 113 116 117 120 121 122 124 125 126 127 131 132 133 134 135 136 137 139 141 142 143 144 147 150 153 155 156 158 159 160 162 163 164 165 167 168 169 170 172 173 174 175 179 180 183 185 186 187 188 189 190 191 193 197 200 207 208 209 210 213 216 219 223 b 224 0 0 1 2 3 4 6 7 11 12 15 21 22 23 26 27 28 34 36 37 38 42 44 47 48 51 54 56 57 59 60 61 67 71 72 76 80 81 86 89 92 93 95 96 97 98 102 106 108 110 111 114 115 116 117 119 120 121 125 128 130 132 133 136 139 143 149 151 155 157 159 164 165 167 168 169 170 175 176 177 178 179 182 183 184 186 187 190 191 192 195 196 197 198 199 200 203 204 205 206 209 211 212 214 215 216 217 218 221 # 22529 intersection c a 224 0 0 e b 224 0 0 e # 22530 intersection c a 224 0 0 e b 224 0 1 e # 22531 intersection c a 224 0 0 e b 224 0 0 e # 22532 intersection c a 224 0 0 e b 224 0 1 f # 22533 intersection c a 224 0 0 e b 224 0 0 e # 22534 intersection c a 224 0 0 e b 224 0 1 0 1 2 3 5 6 11 13 15 16 17 18 19 21 24 26 28 31 34 35 37 38 43 45 47 48 50 52 54 55 57 58 63 64 70 71 72 74 75 78 81 82 84 85 88 90 92 94 95 96 98 100 101 103 104 106 109 111 116 117 118 119 120 121 122 123 125 130 136 137 140 141 145 146 149 150 152 153 156 157 158 161 162 166 167 171 177 178 179 180 181 184 186 187 194 197 199 200 201 202 205 206 208 211 215 216 217 218 221 222 223 # 22535 intersection c a 224 0 0 f b 224 0 0 f # 22536 intersection c a 224 0 0 f b 224 0 1 e # 22537 intersection c a 224 0 0 f b 224 0 0 f # 22538 intersection c a 224 0 0 f b 224 0 1 f # 22539 intersection c a 224 0 0 f b 224 0 0 f # 22540 intersection c a 224 0 0 f b 224 0 1 1 3 5 10 11 16 18 20 23 25 27 28 29 32 33 34 38 39 40 42 43 44 45 47 55 57 60 61 62 64 65 66 71 72 73 74 75 76 78 82 83 84 86 90 91 95 100 103 106 108 109 110 112 113 115 117 118 119 121 122 129 130 134 135 136 137 139 142 147 152 154 158 159 161 168 170 172 173 174 175 178 182 185 186 187 190 191 198 200 201 202 203 204 205 206 207 211 212 217 219 222 223 # 22541 intersection c a 224 0 0 1 3 5 8 13 15 17 21 23 24 25 26 28 29 30 32 37 38 39 41 43 44 45 46 48 50 52 55 56 58 59 61 63 65 68 69 72 73 75 76 79 85 91 93 94 96 97 98 99 100 103 105 106 111 112 113 116 118 120 123 125 128 131 132 133 134 136 137 138 139 142 145 150 155 157 158 164 166 167 169 170 171 174 175 179 180 186 187 189 190 194 198 199 201 207 208 210 211 212 213 214 217 218 219 220 221 b 224 0 0 1 3 5 8 13 15 17 21 23 24 25 26 28 29 30 32 37 38 39 41 43 44 45 46 48 50 52 55 56 58 59 61 63 65 68 69 72 73 75 76 79 85 91 93 94 96 97 98 99 100 103 105 106 111 112 113 116 118 120 123 125 128 131 132 133 134 136 137 138 139 142 145 150 155 157 158 164 166 167 169 170 171 174 175 179 180 186 187 189 190 194 198 199 201 207 208 210 211 212 213 214 217 218 219 220 221 # 22542 intersection c a 224 0 0 1 3 5 8 13 15 17 21 23 24 25 26 28 29 30 32 37 38 39 41 43 44 45 46 48 50 52 55 56 58 59 61 63 65 68 69 72 73 75 76 79 85 91 93 94 96 97 98 99 100 103 105 106 111 112 113 116 118 120 123 125 128 131 132 133 134 136 137 138 139 142 145 150 155 157 158 164 166 167 169 170 171 174 175 179 180 186 187 189 190 194 198 199 201 207 208 210 211 212 213 214 217 218 219 220 221 b 224 0 1 e # 22543 intersection c a 224 0 0 1 3 7 9 16 17 19 20 22 25 28 33 34 35 38 39 41 43 49 52 54 60 61 64 68 69 72 76 77 78 80 82 83 85 86 87 90 91 96 98 99 104 105 106 107 108 109 111 115 120 124 125 126 127 129 130 131 135 138 141 145 149 150 154 157 160 163 164 166 168 169 170 171 172 173 175 176 177 179 183 184 185 186 188 190 193 203 205 206 207 210 211 212 214 215 217 219 220 221 b 224 0 0 1 3 7 9 16 17 19 20 22 25 28 33 34 35 38 39 41 43 49 52 54 60 61 64 68 69 72 76 77 78 80 82 83 85 86 87 90 91 96 98 99 104 105 106 107 108 109 111 115 120 124 125 126 127 129 130 131 135 138 141 145 149 150 154 157 160 163 164 166 168 169 170 171 172 173 175 176 177 179 183 184 185 186 188 190 193 203 205 206 207 210 211 212 214 215 217 219 220 221 # 22544 intersection c a 224 0 0 1 3 7 9 16 17 19 20 22 25 28 33 34 35 38 39 41 43 49 52 54 60 61 64 68 69 72 76 77 78 80 82 83 85 86 87 90 91 96 98 99 104 105 106 107 108 109 111 115 120 124 125 126 127 129 130 131 135 138 141 145 149 150 154 157 160 163 164 166 168 169 170 171 172 173 175 176 177 179 183 184 185 186 188 190 193 203 205 206 207 210 211 212 214 215 217 219 220 221 b 224 0 1 f # 22545 intersection c a 224 0 0 0 1 2 6 7 9 10 11 12 13 14 17 20 21 24 27 29 32 33 34 37 38 39 40 41 46 47 48 49 50 51 52 55 56 61 62 63 64 65 67 70 72 74 85 89 96 97 100 101 102 103 107 108 109 112 113 114 118 119 120 125 126 129 130 132 133 137 138 140 142 143 144 145 148 149 151 155 159 164 165 168 172 175 176 179 182 183 184 188 189 190 191 192 195 196 197 199 201 203 204 206 207 208 209 210 213 217 218 221 b 224 0 0 0 1 2 6 7 9 10 11 12 13 14 17 20 21 24 27 29 32 33 34 37 38 39 40 41 46 47 48 49 50 51 52 55 56 61 62 63 64 65 67 70 72 74 85 89 96 97 100 101 102 103 107 108 109 112 113 114 118 119 120 125 126 129 130 132 133 137 138 140 142 143 144 145 148 149 151 155 159 164 165 168 172 175 176 179 182 183 184 188 189 190 191 192 195 196 197 199 201 203 204 206 207 208 209 210 213 217 218 221 # 22546 intersection c a 224 0 0 0 1 2 6 7 9 10 11 12 13 14 17 20 21 24 27 29 32 33 34 37 38 39 40 41 46 47 48 49 50 51 52 55 56 61 62 63 64 65 67 70 72 74 85 89 96 97 100 101 102 103 107 108 109 112 113 114 118 119 120 125 126 129 130 132 133 137 138 140 142 143 144 145 148 149 151 155 159 164 165 168 172 175 176 179 182 183 184 188 189 190 191 192 195 196 197 199 201 203 204 206 207 208 209 210 213 217 218 221 b 224 0 1 0 3 5 6 9 18 19 23 24 25 28 30 31 32 34 38 39 43 45 47 51 52 53 54 55 56 57 64 65 66 67 70 71 72 73 74 76 78 79 80 82 83 87 89 91 92 93 95 96 98 100 106 108 109 111 113 117 119 120 121 122 123 124 128 130 132 133 134 137 139 141 142 143 144 149 151 152 154 156 158 161 162 164 165 167 168 169 170 172 173 174 176 178 180 181 183 185 187 191 192 194 195 198 201 206 208 210 211 213 215 216 217 218 220 222 223 # 22547 intersection c a 224 0 0 e b 224 0 0 e # 22548 intersection c a 224 0 0 e b 224 1 0 e # 22549 intersection c a 224 0 0 e b 224 0 0 e # 22550 intersection c a 224 0 0 e b 224 1 0 f # 22551 intersection c a 224 0 0 e b 224 0 0 e # 22552 intersection c a 224 0 0 e b 224 1 0 0 1 2 7 9 11 13 17 18 19 20 22 23 28 33 34 35 38 39 41 43 44 45 46 48 49 51 54 55 56 57 58 62 65 67 68 69 72 73 74 75 76 77 80 81 85 87 88 94 95 97 100 101 103 104 106 107 114 115 118 122 123 124 126 127 133 138 139 140 144 149 150 151 154 155 156 157 158 160 162 164 168 170 171 172 177 178 179 180 182 183 184 185 186 187 188 189 191 194 196 199 200 202 203 204 209 211 214 217 219 220 221 222 # 22553 intersection c a 224 0 0 f b 224 0 0 f # 22554 intersection c a 224 0 0 f b 224 1 0 e # 22555 intersection c a 224 0 0 f b 224 0 0 f # 22556 intersection c a 224 0 0 f b 224 1 0 f # 22557 intersection c a 224 0 0 f b 224 0 0 f # 22558 intersection c a 224 0 0 f b 224 1 0 1 5 10 12 17 19 20 25 28 29 32 33 34 35 36 40 42 43 46 47 48 51 53 55 58 70 72 73 74 76 77 78 79 82 83 87 88 90 92 96 97 98 101 103 104 107 110 111 112 113 115 116 117 118 119 121 122 126 127 129 132 133 135 137 139 140 143 144 145 146 147 148 150 153 154 157 160 161 162 163 166 167 173 174 176 177 179 184 186 190 193 195 201 202 203 204 205 207 209 210 211 216 220 222 223 # 22559 intersection c a 224 0 0 0 2 4 6 13 15 16 19 20 21 23 24 25 27 28 30 31 32 36 37 38 39 41 43 44 48 49 52 53 55 60 64 65 66 68 69 72 73 74 78 79 85 86 87 91 92 93 98 103 108 112 113 114 116 117 118 119 122 123 124 128 130 132 136 137 138 139 145 147 148 150 151 152 153 154 155 160 161 162 163 165 167 168 169 170 171 173 176 177 179 182 183 185 186 187 189 192 199 201 202 203 204 207 208 209 210 215 217 218 220 222 223 b 224 0 0 0 2 4 6 13 15 16 19 20 21 23 24 25 27 28 30 31 32 36 37 38 39 41 43 44 48 49 52 53 55 60 64 65 66 68 69 72 73 74 78 79 85 86 87 91 92 93 98 103 108 112 113 114 116 117 118 119 122 123 124 128 130 132 136 137 138 139 145 147 148 150 151 152 153 154 155 160 161 162 163 165 167 168 169 170 171 173 176 177 179 182 183 185 186 187 189 192 199 201 202 203 204 207 208 209 210 215 217 218 220 222 223 # 22560 intersection c a 224 0 0 0 2 4 6 13 15 16 19 20 21 23 24 25 27 28 30 31 32 36 37 38 39 41 43 44 48 49 52 53 55 60 64 65 66 68 69 72 73 74 78 79 85 86 87 91 92 93 98 103 108 112 113 114 116 117 118 119 122 123 124 128 130 132 136 137 138 139 145 147 148 150 151 152 153 154 155 160 161 162 163 165 167 168 169 170 171 173 176 177 179 182 183 185 186 187 189 192 199 201 202 203 204 207 208 209 210 215 217 218 220 222 223 b 224 1 0 e # 22561 intersection c a 224 0 0 1 3 6 7 9 10 12 13 15 16 19 20 22 23 28 33 34 35 37 38 39 45 48 49 51 53 54 55 61 63 67 71 72 73 77 81 83 84 85 89 91 93 95 97 98 99 103 104 105 109 110 111 114 120 121 124 125 128 131 133 134 138 139 140 141 142 145 146 148 150 151 156 157 158 159 161 162 163 164 165 168 171 176 178 179 181 182 183 186 189 190 191 192 193 197 198 200 201 205 206 209 211 212 215 216 222 223 b 224 0 0 1 3 6 7 9 10 12 13 15 16 19 20 22 23 28 33 34 35 37 38 39 45 48 49 51 53 54 55 61 63 67 71 72 73 77 81 83 84 85 89 91 93 95 97 98 99 103 104 105 109 110 111 114 120 121 124 125 128 131 133 134 138 139 140 141 142 145 146 148 150 151 156 157 158 159 161 162 163 164 165 168 171 176 178 179 181 182 183 186 189 190 191 192 193 197 198 200 201 205 206 209 211 212 215 216 222 223 # 22562 intersection c a 224 0 0 1 3 6 7 9 10 12 13 15 16 19 20 22 23 28 33 34 35 37 38 39 45 48 49 51 53 54 55 61 63 67 71 72 73 77 81 83 84 85 89 91 93 95 97 98 99 103 104 105 109 110 111 114 120 121 124 125 128 131 133 134 138 139 140 141 142 145 146 148 150 151 156 157 158 159 161 162 163 164 165 168 171 176 178 179 181 182 183 186 189 190 191 192 193 197 198 200 201 205 206 209 211 212 215 216 222 223 b 224 1 0 f # 22563 intersection c a 224 0 0 0 6 14 15 16 17 19 21 22 23 25 27 30 32 34 35 37 39 41 43 44 45 47 48 49 50 52 59 60 61 62 65 67 69 71 73 76 77 79 80 82 83 84 88 89 90 92 93 94 95 96 98 102 103 104 107 109 112 115 116 117 118 120 121 122 124 125 127 130 131 133 137 139 141 145 147 148 151 157 158 159 160 161 162 164 166 168 172 173 174 176 179 181 182 183 185 186 187 188 189 190 191 192 195 196 199 201 204 206 207 209 210 211 212 213 214 215 216 217 218 220 223 b 224 0 0 0 6 14 15 16 17 19 21 22 23 25 27 30 32 34 35 37 39 41 43 44 45 47 48 49 50 52 59 60 61 62 65 67 69 71 73 76 77 79 80 82 83 84 88 89 90 92 93 94 95 96 98 102 103 104 107 109 112 115 116 117 118 120 121 122 124 125 127 130 131 133 137 139 141 145 147 148 151 157 158 159 160 161 162 164 166 168 172 173 174 176 179 181 182 183 185 186 187 188 189 190 191 192 195 196 199 201 204 206 207 209 210 211 212 213 214 215 216 217 218 220 223 # 22564 intersection c a 224 0 0 0 6 14 15 16 17 19 21 22 23 25 27 30 32 34 35 37 39 41 43 44 45 47 48 49 50 52 59 60 61 62 65 67 69 71 73 76 77 79 80 82 83 84 88 89 90 92 93 94 95 96 98 102 103 104 107 109 112 115 116 117 118 120 121 122 124 125 127 130 131 133 137 139 141 145 147 148 151 157 158 159 160 161 162 164 166 168 172 173 174 176 179 181 182 183 185 186 187 188 189 190 191 192 195 196 199 201 204 206 207 209 210 211 212 213 214 215 216 217 218 220 223 b 224 1 0 0 2 3 4 9 10 12 20 23 24 25 27 32 35 37 38 39 41 42 46 47 50 52 55 59 60 61 63 66 67 69 71 75 76 80 82 84 85 87 89 90 92 93 95 98 99 100 104 105 108 109 110 111 115 118 119 121 123 124 125 126 129 130 132 134 135 137 140 141 142 143 146 147 148 149 150 151 152 154 157 158 159 160 161 162 163 165 168 169 170 172 173 176 179 182 184 185 186 188 190 193 196 197 198 201 202 208 209 212 213 214 215 216 218 220 221 222 # 22565 intersection c a 224 0 0 e b 224 0 0 e # 22566 intersection c a 224 0 0 e b 224 1 1 e # 22567 intersection c a 224 0 0 e b 224 0 0 e # 22568 intersection c a 224 0 0 e b 224 1 1 f # 22569 intersection c a 224 0 0 e b 224 0 0 e # 22570 intersection c a 224 0 0 e b 224 1 1 0 2 3 4 5 10 11 12 15 16 17 19 20 21 22 25 26 28 29 30 31 37 38 39 40 42 43 44 47 48 49 50 51 52 58 59 62 64 66 68 70 71 72 73 74 75 76 79 80 82 83 84 85 86 87 89 90 93 94 96 97 99 102 105 106 108 111 112 113 114 116 117 122 123 125 126 131 132 134 136 137 139 141 142 144 145 146 147 150 151 152 153 154 155 157 159 162 164 165 167 168 169 170 172 173 179 182 184 185 191 192 194 195 196 199 202 204 206 208 209 217 218 219 # 22571 intersection c a 224 0 0 f b 224 0 0 f # 22572 intersection c a 224 0 0 f b 224 1 1 e # 22573 intersection c a 224 0 0 f b 224 0 0 f # 22574 intersection c a 224 0 0 f b 224 1 1 f # 22575 intersection c a 224 0 0 f b 224 0 0 f # 22576 intersection c a 224 0 0 f b 224 1 1 2 4 8 10 11 12 17 18 19 22 24 25 28 29 34 36 38 39 44 45 46 51 52 55 56 58 59 64 66 67 68 70 72 75 76 80 81 84 87 88 90 92 94 95 96 98 99 100 102 103 104 106 107 108 114 116 119 124 125 126 127 129 135 136 138 139 140 141 149 151 152 153 155 156 160 161 162 168 169 171 172 174 176 178 186 187 188 191 193 194 195 199 201 202 205 206 207 209 214 216 217 219 221 223 # 22577 intersection c a 224 0 0 0 2 3 4 6 7 8 9 13 15 16 19 20 21 23 24 25 26 27 28 30 32 36 39 41 42 43 44 48 49 51 52 53 54 56 59 60 64 65 66 75 77 81 82 84 85 86 87 90 91 93 96 98 99 100 101 105 107 109 110 111 112 113 115 116 117 118 119 122 123 126 128 129 131 132 133 135 138 139 141 142 143 144 146 152 156 158 159 160 161 162 163 164 166 168 171 174 175 177 179 181 186 188 191 196 200 201 203 204 206 214 215 216 219 220 221 b 224 0 0 0 2 3 4 6 7 8 9 13 15 16 19 20 21 23 24 25 26 27 28 30 32 36 39 41 42 43 44 48 49 51 52 53 54 56 59 60 64 65 66 75 77 81 82 84 85 86 87 90 91 93 96 98 99 100 101 105 107 109 110 111 112 113 115 116 117 118 119 122 123 126 128 129 131 132 133 135 138 139 141 142 143 144 146 152 156 158 159 160 161 162 163 164 166 168 171 174 175 177 179 181 186 188 191 196 200 201 203 204 206 214 215 216 219 220 221 # 22578 intersection c a 224 0 0 0 2 3 4 6 7 8 9 13 15 16 19 20 21 23 24 25 26 27 28 30 32 36 39 41 42 43 44 48 49 51 52 53 54 56 59 60 64 65 66 75 77 81 82 84 85 86 87 90 91 93 96 98 99 100 101 105 107 109 110 111 112 113 115 116 117 118 119 122 123 126 128 129 131 132 133 135 138 139 141 142 143 144 146 152 156 158 159 160 161 162 163 164 166 168 171 174 175 177 179 181 186 188 191 196 200 201 203 204 206 214 215 216 219 220 221 b 224 1 1 e # 22579 intersection c a 224 0 0 1 2 6 7 8 10 11 12 13 15 17 19 22 24 26 27 31 33 35 37 38 41 43 44 45 46 51 52 54 56 57 63 66 67 70 71 74 75 76 77 83 84 89 90 91 93 94 95 99 100 102 104 107 112 115 116 117 119 120 121 122 123 124 126 128 131 132 136 139 140 143 144 145 146 147 148 149 150 151 152 154 155 156 159 160 161 162 166 167 168 170 171 172 174 175 184 185 187 189 190 192 193 194 196 197 199 200 203 204 208 209 210 213 214 215 216 218 222 b 224 0 0 1 2 6 7 8 10 11 12 13 15 17 19 22 24 26 27 31 33 35 37 38 41 43 44 45 46 51 52 54 56 57 63 66 67 70 71 74 75 76 77 83 84 89 90 91 93 94 95 99 100 102 104 107 112 115 116 117 119 120 121 122 123 124 126 128 131 132 136 139 140 143 144 145 146 147 148 149 150 151 152 154 155 156 159 160 161 162 166 167 168 170 171 172 174 175 184 185 187 189 190 192 193 194 196 197 199 200 203 204 208 209 210 213 214 215 216 218 222 # 22580 intersection c a 224 0 0 1 2 6 7 8 10 11 12 13 15 17 19 22 24 26 27 31 33 35 37 38 41 43 44 45 46 51 52 54 56 57 63 66 67 70 71 74 75 76 77 83 84 89 90 91 93 94 95 99 100 102 104 107 112 115 116 117 119 120 121 122 123 124 126 128 131 132 136 139 140 143 144 145 146 147 148 149 150 151 152 154 155 156 159 160 161 162 166 167 168 170 171 172 174 175 184 185 187 189 190 192 193 194 196 197 199 200 203 204 208 209 210 213 214 215 216 218 222 b 224 1 1 f # 22581 intersection c a 224 0 0 5 6 8 10 11 12 14 17 18 19 20 22 23 24 27 28 29 33 35 38 40 41 43 47 48 49 50 51 56 57 59 60 65 66 67 69 72 74 76 79 83 84 85 86 87 88 90 92 93 94 95 96 97 98 99 100 101 103 109 110 111 112 115 120 122 127 130 131 134 135 137 138 139 140 141 142 143 147 148 149 153 154 159 160 162 163 164 166 169 172 173 174 179 183 187 188 189 190 191 194 195 196 202 203 205 207 210 211 212 216 217 219 223 b 224 0 0 5 6 8 10 11 12 14 17 18 19 20 22 23 24 27 28 29 33 35 38 40 41 43 47 48 49 50 51 56 57 59 60 65 66 67 69 72 74 76 79 83 84 85 86 87 88 90 92 93 94 95 96 97 98 99 100 101 103 109 110 111 112 115 120 122 127 130 131 134 135 137 138 139 140 141 142 143 147 148 149 153 154 159 160 162 163 164 166 169 172 173 174 179 183 187 188 189 190 191 194 195 196 202 203 205 207 210 211 212 216 217 219 223 # 22582 intersection c a 224 0 0 5 6 8 10 11 12 14 17 18 19 20 22 23 24 27 28 29 33 35 38 40 41 43 47 48 49 50 51 56 57 59 60 65 66 67 69 72 74 76 79 83 84 85 86 87 88 90 92 93 94 95 96 97 98 99 100 101 103 109 110 111 112 115 120 122 127 130 131 134 135 137 138 139 140 141 142 143 147 148 149 153 154 159 160 162 163 164 166 169 172 173 174 179 183 187 188 189 190 191 194 195 196 202 203 205 207 210 211 212 216 217 219 223 b 224 1 1 0 2 3 4 5 7 9 10 11 12 14 15 16 18 19 20 24 25 28 29 31 32 33 35 36 37 38 40 41 44 47 48 53 54 58 60 63 65 66 70 74 78 82 83 85 87 88 91 92 94 95 97 99 101 102 105 106 107 108 109 110 113 117 124 130 133 134 135 136 137 139 143 145 147 148 152 153 155 157 162 163 165 167 168 169 170 173 174 175 176 180 181 182 183 186 187 188 189 194 199 203 206 207 212 214 217 220 222 223 # 22583 intersection c a 224 0 1 e b 224 0 1 e # 22584 intersection c a 224 0 1 e b 224 0 0 e # 22585 intersection c a 224 0 1 e b 224 0 1 e # 22586 intersection c a 224 0 1 e b 224 0 0 f # 22587 intersection c a 224 0 1 e b 224 0 1 e # 22588 intersection c a 224 0 1 e b 224 0 0 0 1 3 5 6 7 10 15 16 17 19 23 24 27 28 29 30 31 32 34 35 37 38 40 42 44 47 49 51 52 53 55 57 58 60 62 64 65 67 72 74 75 76 81 84 85 87 89 94 96 101 102 105 106 110 111 113 114 116 123 124 126 127 131 132 139 140 147 148 149 151 153 154 155 156 157 158 160 161 163 165 168 169 171 172 173 174 179 182 185 190 196 197 198 199 202 204 205 206 209 214 215 216 218 220 221 222 223 # 22589 intersection c a 224 0 1 f b 224 0 1 f # 22590 intersection c a 224 0 1 f b 224 0 0 e # 22591 intersection c a 224 0 1 f b 224 0 1 f # 22592 intersection c a 224 0 1 f b 224 0 0 f # 22593 intersection c a 224 0 1 f b 224 0 1 f # 22594 intersection c a 224 0 1 f b 224 0 0 0 3 6 7 8 9 11 13 14 15 16 24 26 28 29 31 33 34 35 37 40 41 42 44 45 46 47 51 56 58 59 62 63 65 67 68 69 70 72 73 74 76 77 80 82 84 86 87 91 92 95 96 97 98 99 100 101 103 104 105 107 108 110 111 112 113 115 117 118 119 125 128 129 131 132 134 137 142 151 153 154 155 156 159 161 162 163 167 169 170 171 172 173 177 178 181 183 184 186 191 192 193 194 198 199 200 201 202 203 204 209 210 211 212 213 215 219 # 22595 intersection c a 224 0 1 2 3 5 6 8 9 11 13 14 15 16 17 18 19 20 23 25 26 27 31 34 35 36 37 39 40 41 44 49 51 53 54 55 57 58 59 60 68 69 71 72 73 74 75 87 89 93 94 95 102 105 106 110 112 114 115 116 118 130 131 132 133 134 136 137 138 139 141 143 146 148 149 151 152 153 157 158 159 167 170 171 172 174 176 177 179 181 182 184 186 188 190 192 196 197 204 205 207 208 209 212 214 215 220 222 223 b 224 0 1 2 3 5 6 8 9 11 13 14 15 16 17 18 19 20 23 25 26 27 31 34 35 36 37 39 40 41 44 49 51 53 54 55 57 58 59 60 68 69 71 72 73 74 75 87 89 93 94 95 102 105 106 110 112 114 115 116 118 130 131 132 133 134 136 137 138 139 141 143 146 148 149 151 152 153 157 158 159 167 170 171 172 174 176 177 179 181 182 184 186 188 190 192 196 197 204 205 207 208 209 212 214 215 220 222 223 # 22596 intersection c a 224 0 1 2 3 5 6 8 9 11 13 14 15 16 17 18 19 20 23 25 26 27 31 34 35 36 37 39 40 41 44 49 51 53 54 55 57 58 59 60 68 69 71 72 73 74 75 87 89 93 94 95 102 105 106 110 112 114 115 116 118 130 131 132 133 134 136 137 138 139 141 143 146 148 149 151 152 153 157 158 159 167 170 171 172 174 176 177 179 181 182 184 186 188 190 192 196 197 204 205 207 208 209 212 214 215 220 222 223 b 224 0 0 e # 22597 intersection c a 224 0 1 0 3 8 10 17 20 24 26 27 28 29 30 32 33 38 40 42 44 45 46 47 48 51 56 58 59 60 61 63 64 68 69 71 79 82 83 84 85 87 90 92 93 95 98 103 104 105 107 110 111 112 113 114 115 116 117 118 119 121 124 126 128 129 130 137 144 145 147 148 150 152 153 155 158 161 162 163 164 170 172 173 174 175 176 177 179 185 186 187 189 191 192 194 195 196 197 198 199 201 204 206 207 210 212 213 214 215 216 217 218 219 220 221 222 b 224 0 1 0 3 8 10 17 20 24 26 27 28 29 30 32 33 38 40 42 44 45 46 47 48 51 56 58 59 60 61 63 64 68 69 71 79 82 83 84 85 87 90 92 93 95 98 103 104 105 107 110 111 112 113 114 115 116 117 118 119 121 124 126 128 129 130 137 144 145 147 148 150 152 153 155 158 161 162 163 164 170 172 173 174 175 176 177 179 185 186 187 189 191 192 194 195 196 197 198 199 201 204 206 207 210 212 213 214 215 216 217 218 219 220 221 222 # 22598 intersection c a 224 0 1 0 3 8 10 17 20 24 26 27 28 29 30 32 33 38 40 42 44 45 46 47 48 51 56 58 59 60 61 63 64 68 69 71 79 82 83 84 85 87 90 92 93 95 98 103 104 105 107 110 111 112 113 114 115 116 117 118 119 121 124 126 128 129 130 137 144 145 147 148 150 152 153 155 158 161 162 163 164 170 172 173 174 175 176 177 179 185 186 187 189 191 192 194 195 196 197 198 199 201 204 206 207 210 212 213 214 215 216 217 218 219 220 221 222 b 224 0 0 f # 22599 intersection c a 224 0 1 3 6 7 8 11 12 15 16 23 24 26 27 29 35 36 38 39 40 41 43 45 46 47 53 62 64 67 68 69 71 72 73 74 76 80 81 82 84 86 87 88 89 91 96 97 99 100 101 102 103 104 105 106 107 110 111 112 113 115 116 117 118 119 120 122 124 126 127 128 130 131 132 133 135 139 140 142 143 145 148 150 151 153 156 158 159 160 161 162 163 167 168 169 170 175 177 178 180 181 184 185 186 187 189 190 194 195 196 198 201 202 203 206 207 208 209 211 212 213 216 220 221 b 224 0 1 3 6 7 8 11 12 15 16 23 24 26 27 29 35 36 38 39 40 41 43 45 46 47 53 62 64 67 68 69 71 72 73 74 76 80 81 82 84 86 87 88 89 91 96 97 99 100 101 102 103 104 105 106 107 110 111 112 113 115 116 117 118 119 120 122 124 126 127 128 130 131 132 133 135 139 140 142 143 145 148 150 151 153 156 158 159 160 161 162 163 167 168 169 170 175 177 178 180 181 184 185 186 187 189 190 194 195 196 198 201 202 203 206 207 208 209 211 212 213 216 220 221 # 22600 intersection c a 224 0 1 3 6 7 8 11 12 15 16 23 24 26 27 29 35 36 38 39 40 41 43 45 46 47 53 62 64 67 68 69 71 72 73 74 76 80 81 82 84 86 87 88 89 91 96 97 99 100 101 102 103 104 105 106 107 110 111 112 113 115 116 117 118 119 120 122 124 126 127 128 130 131 132 133 135 139 140 142 143 145 148 150 151 153 156 158 159 160 161 162 163 167 168 169 170 175 177 178 180 181 184 185 186 187 189 190 194 195 196 198 201 202 203 206 207 208 209 211 212 213 216 220 221 b 224 0 0 4 6 9 12 15 16 18 19 23 24 27 29 31 33 37 38 40 42 43 46 48 49 51 54 55 56 58 60 61 64 65 67 68 75 76 77 80 81 83 86 88 89 90 91 92 94 96 99 100 101 109 110 115 116 118 120 121 123 124 127 128 129 130 132 133 134 137 139 140 146 148 149 150 151 152 153 155 157 158 159 167 169 170 171 175 176 178 181 183 184 185 186 187 190 191 192 196 197 199 200 202 203 204 206 209 210 211 214 216 220 223 # 22601 intersection c a 224 0 1 e b 224 0 1 e # 22602 intersection c a 224 0 1 e b 224 0 1 e # 22603 intersection c a 224 0 1 e b 224 0 1 e # 22604 intersection c a 224 0 1 e b 224 0 1 f # 22605 intersection c a 224 0 1 e b 224 0 1 e # 22606 intersection c a 224 0 1 e b 224 0 1 0 1 5 12 13 14 16 17 18 20 21 23 25 28 29 31 32 33 36 37 41 43 44 48 50 51 52 54 56 59 61 62 65 68 69 71 72 73 74 78 81 84 86 87 88 90 92 93 96 97 98 100 103 108 110 112 113 114 115 118 119 120 121 123 124 125 128 129 130 131 136 137 138 139 140 141 142 143 144 145 146 147 149 150 151 152 154 155 156 157 159 160 164 165 166 167 168 169 171 174 177 180 183 189 192 193 195 196 200 201 205 206 207 208 209 213 215 216 217 # 22607 intersection c a 224 0 1 f b 224 0 1 f # 22608 intersection c a 224 0 1 f b 224 0 1 e # 22609 intersection c a 224 0 1 f b 224 0 1 f # 22610 intersection c a 224 0 1 f b 224 0 1 f # 22611 intersection c a 224 0 1 f b 224 0 1 f # 22612 intersection c a 224 0 1 f b 224 0 1 1 3 5 8 9 10 12 14 18 19 20 23 24 25 29 30 32 35 36 37 39 40 41 42 45 46 47 49 50 56 58 61 62 63 64 66 67 70 71 73 75 76 78 79 83 84 86 87 88 89 90 93 96 103 104 105 107 110 111 112 113 122 123 124 125 127 129 131 132 135 137 138 143 145 147 149 152 155 158 164 165 167 168 169 171 173 174 175 178 179 184 187 188 193 197 200 201 207 208 210 211 212 213 220 221 222 # 22613 intersection c a 224 0 1 0 4 5 7 9 10 11 12 14 15 17 18 20 21 22 26 31 32 33 35 36 37 44 48 49 51 52 54 57 58 59 62 63 65 66 67 68 72 74 76 77 78 79 80 83 87 90 95 98 101 106 110 112 116 117 120 121 122 127 129 131 132 133 136 137 138 141 145 149 152 154 159 162 166 171 173 174 176 178 182 183 185 187 188 190 192 193 200 201 203 204 207 208 210 211 213 214 215 218 220 221 222 223 b 224 0 1 0 4 5 7 9 10 11 12 14 15 17 18 20 21 22 26 31 32 33 35 36 37 44 48 49 51 52 54 57 58 59 62 63 65 66 67 68 72 74 76 77 78 79 80 83 87 90 95 98 101 106 110 112 116 117 120 121 122 127 129 131 132 133 136 137 138 141 145 149 152 154 159 162 166 171 173 174 176 178 182 183 185 187 188 190 192 193 200 201 203 204 207 208 210 211 213 214 215 218 220 221 222 223 # 22614 intersection c a 224 0 1 0 4 5 7 9 10 11 12 14 15 17 18 20 21 22 26 31 32 33 35 36 37 44 48 49 51 52 54 57 58 59 62 63 65 66 67 68 72 74 76 77 78 79 80 83 87 90 95 98 101 106 110 112 116 117 120 121 122 127 129 131 132 133 136 137 138 141 145 149 152 154 159 162 166 171 173 174 176 178 182 183 185 187 188 190 192 193 200 201 203 204 207 208 210 211 213 214 215 218 220 221 222 223 b 224 0 1 e # 22615 intersection c a 224 0 1 0 2 6 9 13 15 16 18 20 21 26 27 29 30 32 33 34 38 39 41 43 44 46 47 48 49 51 52 53 55 58 59 60 61 63 65 67 71 73 74 75 78 79 81 82 83 84 85 86 87 89 90 92 93 96 97 98 100 108 109 111 112 114 115 117 118 120 122 123 125 126 128 129 130 131 134 135 136 141 144 146 149 150 155 162 163 164 165 169 170 174 176 177 178 182 183 184 189 190 191 192 193 195 196 197 199 200 204 206 207 208 212 215 217 219 222 b 224 0 1 0 2 6 9 13 15 16 18 20 21 26 27 29 30 32 33 34 38 39 41 43 44 46 47 48 49 51 52 53 55 58 59 60 61 63 65 67 71 73 74 75 78 79 81 82 83 84 85 86 87 89 90 92 93 96 97 98 100 108 109 111 112 114 115 117 118 120 122 123 125 126 128 129 130 131 134 135 136 141 144 146 149 150 155 162 163 164 165 169 170 174 176 177 178 182 183 184 189 190 191 192 193 195 196 197 199 200 204 206 207 208 212 215 217 219 222 # 22616 intersection c a 224 0 1 0 2 6 9 13 15 16 18 20 21 26 27 29 30 32 33 34 38 39 41 43 44 46 47 48 49 51 52 53 55 58 59 60 61 63 65 67 71 73 74 75 78 79 81 82 83 84 85 86 87 89 90 92 93 96 97 98 100 108 109 111 112 114 115 117 118 120 122 123 125 126 128 129 130 131 134 135 136 141 144 146 149 150 155 162 163 164 165 169 170 174 176 177 178 182 183 184 189 190 191 192 193 195 196 197 199 200 204 206 207 208 212 215 217 219 222 b 224 0 1 f # 22617 intersection c a 224 0 1 0 3 6 7 8 13 18 20 24 25 29 30 34 36 37 40 41 42 44 46 48 49 50 54 57 58 60 61 62 64 65 66 67 72 74 75 77 78 80 81 82 84 90 92 94 95 98 99 100 101 103 107 110 113 117 119 124 125 127 129 130 132 133 134 138 140 141 142 144 147 149 150 153 154 155 156 157 158 160 161 162 163 164 165 167 175 177 178 179 180 181 184 185 187 188 191 192 193 194 195 196 198 199 203 205 206 207 208 209 210 211 213 214 216 218 219 222 b 224 0 1 0 3 6 7 8 13 18 20 24 25 29 30 34 36 37 40 41 42 44 46 48 49 50 54 57 58 60 61 62 64 65 66 67 72 74 75 77 78 80 81 82 84 90 92 94 95 98 99 100 101 103 107 110 113 117 119 124 125 127 129 130 132 133 134 138 140 141 142 144 147 149 150 153 154 155 156 157 158 160 161 162 163 164 165 167 175 177 178 179 180 181 184 185 187 188 191 192 193 194 195 196 198 199 203 205 206 207 208 209 210 211 213 214 216 218 219 222 # 22618 intersection c a 224 0 1 0 3 6 7 8 13 18 20 24 25 29 30 34 36 37 40 41 42 44 46 48 49 50 54 57 58 60 61 62 64 65 66 67 72 74 75 77 78 80 81 82 84 90 92 94 95 98 99 100 101 103 107 110 113 117 119 124 125 127 129 130 132 133 134 138 140 141 142 144 147 149 150 153 154 155 156 157 158 160 161 162 163 164 165 167 175 177 178 179 180 181 184 185 187 188 191 192 193 194 195 196 198 199 203 205 206 207 208 209 210 211 213 214 216 218 219 222 b 224 0 1 1 3 5 6 7 11 12 14 15 16 22 24 25 28 30 33 35 36 41 42 45 49 50 51 55 57 61 63 64 65 67 68 69 72 74 76 80 82 84 87 88 93 94 101 102 104 105 106 107 117 122 123 125 127 129 131 137 141 142 143 144 146 148 150 152 153 154 155 158 159 160 161 165 166 168 170 171 173 174 176 177 178 179 180 181 183 186 187 190 194 195 196 197 199 202 203 204 206 207 209 210 214 215 217 218 219 221 223 # 22619 intersection c a 224 0 1 e b 224 0 1 e # 22620 intersection c a 224 0 1 e b 224 1 0 e # 22621 intersection c a 224 0 1 e b 224 0 1 e # 22622 intersection c a 224 0 1 e b 224 1 0 f # 22623 intersection c a 224 0 1 e b 224 0 1 e # 22624 intersection c a 224 0 1 e b 224 1 0 0 3 5 6 7 8 10 11 12 13 14 17 19 22 23 25 26 28 31 32 33 34 40 41 43 44 49 51 58 59 62 64 68 69 70 71 72 74 76 78 80 81 85 86 88 89 92 94 95 96 99 100 102 103 104 105 107 108 109 111 112 113 117 118 120 122 123 125 126 128 130 131 132 133 134 135 137 138 140 143 144 145 148 149 150 153 155 156 157 158 159 161 162 163 164 166 170 172 175 176 177 179 180 183 186 187 189 190 191 192 194 196 198 200 202 203 204 207 209 211 212 213 214 217 219 221 # 22625 intersection c a 224 0 1 f b 224 0 1 f # 22626 intersection c a 224 0 1 f b 224 1 0 e # 22627 intersection c a 224 0 1 f b 224 0 1 f # 22628 intersection c a 224 0 1 f b 224 1 0 f # 22629 intersection c a 224 0 1 f b 224 0 1 f # 22630 intersection c a 224 0 1 f b 224 1 0 2 4 6 7 8 9 11 13 15 16 17 18 19 20 21 22 23 26 27 31 33 38 43 45 48 50 52 53 61 63 64 68 70 71 72 73 74 76 82 86 87 88 95 96 99 100 101 102 104 106 107 108 112 114 116 117 118 122 124 125 127 129 132 134 135 136 140 141 142 144 146 147 149 152 153 154 155 156 161 162 163 166 167 168 171 172 175 176 177 178 179 180 181 183 184 187 188 189 192 196 197 199 201 204 205 207 208 209 210 212 215 216 217 218 219 220 222 223 # 22631 intersection c a 224 0 1 0 2 8 9 10 11 13 14 16 18 19 20 21 22 24 25 34 35 37 40 41 44 47 48 50 53 54 55 56 61 62 63 64 66 69 70 72 75 76 77 78 81 82 84 85 87 89 91 92 94 95 96 104 105 108 110 113 114 116 121 122 123 125 126 127 129 131 133 135 136 137 139 142 143 145 148 149 150 152 153 155 157 158 159 160 164 165 167 169 171 175 177 181 184 185 188 190 191 194 199 200 201 205 206 208 210 215 216 217 219 220 b 224 0 1 0 2 8 9 10 11 13 14 16 18 19 20 21 22 24 25 34 35 37 40 41 44 47 48 50 53 54 55 56 61 62 63 64 66 69 70 72 75 76 77 78 81 82 84 85 87 89 91 92 94 95 96 104 105 108 110 113 114 116 121 122 123 125 126 127 129 131 133 135 136 137 139 142 143 145 148 149 150 152 153 155 157 158 159 160 164 165 167 169 171 175 177 181 184 185 188 190 191 194 199 200 201 205 206 208 210 215 216 217 219 220 # 22632 intersection c a 224 0 1 0 2 8 9 10 11 13 14 16 18 19 20 21 22 24 25 34 35 37 40 41 44 47 48 50 53 54 55 56 61 62 63 64 66 69 70 72 75 76 77 78 81 82 84 85 87 89 91 92 94 95 96 104 105 108 110 113 114 116 121 122 123 125 126 127 129 131 133 135 136 137 139 142 143 145 148 149 150 152 153 155 157 158 159 160 164 165 167 169 171 175 177 181 184 185 188 190 191 194 199 200 201 205 206 208 210 215 216 217 219 220 b 224 1 0 e # 22633 intersection c a 224 0 1 0 2 3 4 6 7 8 10 13 14 15 20 21 23 25 28 29 30 31 33 34 38 40 41 43 44 46 48 50 52 56 57 58 59 60 61 62 64 68 71 73 74 77 78 79 80 83 84 85 87 90 96 97 98 99 102 103 112 113 116 117 121 123 125 128 129 136 137 138 139 143 149 152 153 156 158 159 163 165 168 172 176 177 181 182 184 185 187 190 191 194 195 197 202 203 204 205 207 208 209 212 213 215 216 217 218 221 223 b 224 0 1 0 2 3 4 6 7 8 10 13 14 15 20 21 23 25 28 29 30 31 33 34 38 40 41 43 44 46 48 50 52 56 57 58 59 60 61 62 64 68 71 73 74 77 78 79 80 83 84 85 87 90 96 97 98 99 102 103 112 113 116 117 121 123 125 128 129 136 137 138 139 143 149 152 153 156 158 159 163 165 168 172 176 177 181 182 184 185 187 190 191 194 195 197 202 203 204 205 207 208 209 212 213 215 216 217 218 221 223 # 22634 intersection c a 224 0 1 0 2 3 4 6 7 8 10 13 14 15 20 21 23 25 28 29 30 31 33 34 38 40 41 43 44 46 48 50 52 56 57 58 59 60 61 62 64 68 71 73 74 77 78 79 80 83 84 85 87 90 96 97 98 99 102 103 112 113 116 117 121 123 125 128 129 136 137 138 139 143 149 152 153 156 158 159 163 165 168 172 176 177 181 182 184 185 187 190 191 194 195 197 202 203 204 205 207 208 209 212 213 215 216 217 218 221 223 b 224 1 0 f # 22635 intersection c a 224 0 1 2 3 5 9 12 13 15 17 18 20 22 23 25 27 29 31 32 37 38 39 40 43 44 45 50 52 53 54 59 60 61 62 63 64 68 69 70 71 76 77 78 82 85 86 87 88 90 91 92 94 95 96 99 105 106 108 110 112 113 114 117 118 121 127 128 130 131 132 138 140 141 142 143 145 146 147 148 149 151 152 153 155 158 160 161 163 164 165 166 168 169 171 175 176 178 179 182 185 187 192 195 200 201 202 204 207 208 210 212 214 217 219 221 b 224 0 1 2 3 5 9 12 13 15 17 18 20 22 23 25 27 29 31 32 37 38 39 40 43 44 45 50 52 53 54 59 60 61 62 63 64 68 69 70 71 76 77 78 82 85 86 87 88 90 91 92 94 95 96 99 105 106 108 110 112 113 114 117 118 121 127 128 130 131 132 138 140 141 142 143 145 146 147 148 149 151 152 153 155 158 160 161 163 164 165 166 168 169 171 175 176 178 179 182 185 187 192 195 200 201 202 204 207 208 210 212 214 217 219 221 # 22636 intersection c a 224 0 1 2 3 5 9 12 13 15 17 18 20 22 23 25 27 29 31 32 37 38 39 40 43 44 45 50 52 53 54 59 60 61 62 63 64 68 69 70 71 76 77 78 82 85 86 87 88 90 91 92 94 95 96 99 105 106 108 110 112 113 114 117 118 121 127 128 130 131 132 138 140 141 142 143 145 146 147 148 149 151 152 153 155 158 160 161 163 164 165 166 168 169 171 175 176 178 179 182 185 187 192 195 200 201 202 204 207 208 210 212 214 217 219 221 b 224 1 0 1 4 6 7 9 13 17 18 22 23 26 27 30 34 36 37 39 41 43 44 46 49 50 51 53 54 55 57 62 63 64 65 66 68 72 73 74 75 77 78 79 80 81 82 83 85 86 87 88 92 94 97 98 99 106 109 111 112 113 114 116 117 118 120 122 123 125 127 128 130 131 132 133 135 141 143 144 150 153 154 155 158 167 168 169 171 173 174 178 181 182 183 185 186 187 188 189 194 195 196 197 199 200 201 202 205 207 208 212 213 216 219 221 # 22637 intersection c a 224 0 1 e b 224 0 1 e # 22638 intersection c a 224 0 1 e b 224 1 1 e # 22639 intersection c a 224 0 1 e b 224 0 1 e # 22640 intersection c a 224 0 1 e b 224 1 1 f # 22641 intersection c a 224 0 1 e b 224 0 1 e # 22642 intersection c a 224 0 1 e b 224 1 1 1 4 5 6 7 9 10 11 14 16 17 18 19 20 23 24 25 29 30 31 32 33 34 35 36 37 40 44 45 46 47 48 49 51 53 54 59 60 62 63 65 67 68 69 74 81 86 87 90 93 95 97 98 100 101 102 106 107 108 109 112 113 114 119 120 124 126 129 130 131 132 136 137 139 140 141 143 144 145 146 147 150 153 158 159 161 162 163 165 168 171 174 175 177 178 179 180 181 184 185 186 189 190 192 193 195 196 197 199 202 204 213 214 215 217 219 220 # 22643 intersection c a 224 0 1 f b 224 0 1 f # 22644 intersection c a 224 0 1 f b 224 1 1 e # 22645 intersection c a 224 0 1 f b 224 0 1 f # 22646 intersection c a 224 0 1 f b 224 1 1 f # 22647 intersection c a 224 0 1 f b 224 0 1 f # 22648 intersection c a 224 0 1 f b 224 1 1 0 1 3 5 7 12 13 14 15 20 21 24 25 28 30 31 34 35 41 42 47 48 51 53 58 60 61 66 70 71 73 75 79 80 81 82 85 86 87 93 94 97 98 99 101 102 104 105 107 109 110 113 114 115 116 117 118 122 126 127 129 132 134 135 138 139 140 141 148 152 154 156 157 159 160 161 163 164 168 170 171 172 177 178 182 186 189 191 192 193 194 195 198 199 201 202 205 206 207 208 209 211 212 213 217 218 219 220 221 222 223 # 22649 intersection c a 224 0 1 0 3 4 6 9 10 11 12 13 17 20 21 22 24 25 26 27 28 29 33 35 39 41 42 43 44 48 49 50 51 52 53 54 57 60 61 62 63 64 66 68 71 73 74 75 81 82 84 85 86 88 89 91 92 94 97 98 100 101 104 108 121 123 125 127 128 130 131 134 140 141 145 147 149 152 153 156 157 158 161 166 167 170 175 177 178 179 180 183 184 185 187 188 191 196 203 204 205 208 210 211 214 216 219 222 223 b 224 0 1 0 3 4 6 9 10 11 12 13 17 20 21 22 24 25 26 27 28 29 33 35 39 41 42 43 44 48 49 50 51 52 53 54 57 60 61 62 63 64 66 68 71 73 74 75 81 82 84 85 86 88 89 91 92 94 97 98 100 101 104 108 121 123 125 127 128 130 131 134 140 141 145 147 149 152 153 156 157 158 161 166 167 170 175 177 178 179 180 183 184 185 187 188 191 196 203 204 205 208 210 211 214 216 219 222 223 # 22650 intersection c a 224 0 1 0 3 4 6 9 10 11 12 13 17 20 21 22 24 25 26 27 28 29 33 35 39 41 42 43 44 48 49 50 51 52 53 54 57 60 61 62 63 64 66 68 71 73 74 75 81 82 84 85 86 88 89 91 92 94 97 98 100 101 104 108 121 123 125 127 128 130 131 134 140 141 145 147 149 152 153 156 157 158 161 166 167 170 175 177 178 179 180 183 184 185 187 188 191 196 203 204 205 208 210 211 214 216 219 222 223 b 224 1 1 e # 22651 intersection c a 224 0 1 0 3 6 7 8 10 14 17 19 20 23 24 25 26 30 32 34 36 37 41 42 43 45 47 49 50 56 60 64 66 69 70 71 72 73 74 76 78 81 82 83 84 87 89 93 94 95 99 102 105 106 109 111 114 117 119 120 121 123 125 126 127 131 132 136 138 140 142 145 146 147 148 150 155 159 160 161 162 163 174 175 177 178 179 181 183 185 189 192 193 197 199 201 203 206 207 209 210 211 212 215 217 219 220 221 223 b 224 0 1 0 3 6 7 8 10 14 17 19 20 23 24 25 26 30 32 34 36 37 41 42 43 45 47 49 50 56 60 64 66 69 70 71 72 73 74 76 78 81 82 83 84 87 89 93 94 95 99 102 105 106 109 111 114 117 119 120 121 123 125 126 127 131 132 136 138 140 142 145 146 147 148 150 155 159 160 161 162 163 174 175 177 178 179 181 183 185 189 192 193 197 199 201 203 206 207 209 210 211 212 215 217 219 220 221 223 # 22652 intersection c a 224 0 1 0 3 6 7 8 10 14 17 19 20 23 24 25 26 30 32 34 36 37 41 42 43 45 47 49 50 56 60 64 66 69 70 71 72 73 74 76 78 81 82 83 84 87 89 93 94 95 99 102 105 106 109 111 114 117 119 120 121 123 125 126 127 131 132 136 138 140 142 145 146 147 148 150 155 159 160 161 162 163 174 175 177 178 179 181 183 185 189 192 193 197 199 201 203 206 207 209 210 211 212 215 217 219 220 221 223 b 224 1 1 f # 22653 intersection c a 224 0 1 0 1 3 4 5 6 7 8 9 10 14 17 19 20 21 22 24 26 27 30 31 32 33 34 35 36 37 38 40 42 43 44 45 49 54 56 57 58 59 60 61 62 63 64 65 66 68 70 72 73 75 77 79 80 84 88 91 94 95 97 102 107 110 111 112 115 117 121 127 129 130 133 134 135 136 137 147 153 154 159 163 164 165 166 167 168 174 175 176 178 180 182 183 185 187 189 190 191 192 193 194 195 196 198 199 200 204 207 208 210 212 213 217 219 220 221 223 b 224 0 1 0 1 3 4 5 6 7 8 9 10 14 17 19 20 21 22 24 26 27 30 31 32 33 34 35 36 37 38 40 42 43 44 45 49 54 56 57 58 59 60 61 62 63 64 65 66 68 70 72 73 75 77 79 80 84 88 91 94 95 97 102 107 110 111 112 115 117 121 127 129 130 133 134 135 136 137 147 153 154 159 163 164 165 166 167 168 174 175 176 178 180 182 183 185 187 189 190 191 192 193 194 195 196 198 199 200 204 207 208 210 212 213 217 219 220 221 223 # 22654 intersection c a 224 0 1 0 1 3 4 5 6 7 8 9 10 14 17 19 20 21 22 24 26 27 30 31 32 33 34 35 36 37 38 40 42 43 44 45 49 54 56 57 58 59 60 61 62 63 64 65 66 68 70 72 73 75 77 79 80 84 88 91 94 95 97 102 107 110 111 112 115 117 121 127 129 130 133 134 135 136 137 147 153 154 159 163 164 165 166 167 168 174 175 176 178 180 182 183 185 187 189 190 191 192 193 194 195 196 198 199 200 204 207 208 210 212 213 217 219 220 221 223 b 224 1 1 0 2 3 4 5 6 8 10 11 12 13 15 19 21 23 24 29 33 35 36 39 40 43 45 46 49 51 52 53 57 58 59 60 65 67 69 70 72 77 78 79 80 83 84 85 88 90 91 95 96 98 104 105 107 108 110 111 117 118 120 121 124 127 128 129 133 137 141 142 143 149 150 152 153 154 155 157 158 160 161 162 164 166 169 172 176 178 186 187 189 192 194 198 199 204 206 207 208 210 212 214 216 217 219 221 # 22655 intersection c a 224 1 0 e b 224 1 0 e # 22656 intersection c a 224 1 0 e b 224 0 0 e # 22657 intersection c a 224 1 0 e b 224 1 0 e # 22658 intersection c a 224 1 0 e b 224 0 0 f # 22659 intersection c a 224 1 0 e b 224 1 0 e # 22660 intersection c a 224 1 0 e b 224 0 0 1 2 3 7 8 9 16 18 19 20 25 27 28 29 30 31 32 33 34 39 40 41 44 45 47 48 51 52 53 55 57 58 61 65 67 69 70 76 77 79 81 82 83 85 86 87 88 89 95 97 98 99 100 102 104 106 107 109 110 111 112 114 117 123 124 125 126 128 129 131 134 135 136 137 138 140 142 144 145 146 149 150 151 154 157 158 160 162 163 165 166 168 169 174 177 178 179 180 182 184 185 186 187 188 189 192 198 199 204 206 207 210 211 212 215 217 218 219 220 221 223 # 22661 intersection c a 224 1 0 f b 224 1 0 f # 22662 intersection c a 224 1 0 f b 224 0 0 e # 22663 intersection c a 224 1 0 f b 224 1 0 f # 22664 intersection c a 224 1 0 f b 224 0 0 f # 22665 intersection c a 224 1 0 f b 224 1 0 f # 22666 intersection c a 224 1 0 f b 224 0 0 1 5 7 9 11 13 14 15 17 18 21 24 25 27 28 29 32 33 34 36 39 42 43 45 47 48 51 53 56 57 58 59 60 62 63 65 67 68 69 70 73 74 75 76 78 79 80 82 83 84 87 92 95 97 98 101 103 104 107 108 110 111 114 116 117 119 121 123 126 129 130 131 132 135 136 137 138 139 141 143 147 150 156 158 159 161 162 164 167 173 180 182 184 186 188 189 194 199 200 201 204 206 207 208 211 212 216 217 218 219 220 # 22667 intersection c a 224 1 0 0 2 4 5 6 7 8 12 13 15 17 18 19 21 24 27 28 29 30 31 33 34 36 37 41 42 43 44 46 47 50 51 56 57 59 60 62 64 65 66 67 68 71 74 75 76 77 78 81 83 85 88 91 92 95 96 99 100 101 102 103 104 105 106 107 109 110 111 112 116 117 118 119 123 124 125 126 127 128 131 132 134 135 136 137 138 140 141 143 144 145 147 150 151 152 154 156 159 160 161 162 163 164 166 167 171 173 174 177 179 181 182 183 188 189 191 193 199 200 201 202 203 204 211 213 214 215 218 220 b 224 1 0 0 2 4 5 6 7 8 12 13 15 17 18 19 21 24 27 28 29 30 31 33 34 36 37 41 42 43 44 46 47 50 51 56 57 59 60 62 64 65 66 67 68 71 74 75 76 77 78 81 83 85 88 91 92 95 96 99 100 101 102 103 104 105 106 107 109 110 111 112 116 117 118 119 123 124 125 126 127 128 131 132 134 135 136 137 138 140 141 143 144 145 147 150 151 152 154 156 159 160 161 162 163 164 166 167 171 173 174 177 179 181 182 183 188 189 191 193 199 200 201 202 203 204 211 213 214 215 218 220 # 22668 intersection c a 224 1 0 0 2 4 5 6 7 8 12 13 15 17 18 19 21 24 27 28 29 30 31 33 34 36 37 41 42 43 44 46 47 50 51 56 57 59 60 62 64 65 66 67 68 71 74 75 76 77 78 81 83 85 88 91 92 95 96 99 100 101 102 103 104 105 106 107 109 110 111 112 116 117 118 119 123 124 125 126 127 128 131 132 134 135 136 137 138 140 141 143 144 145 147 150 151 152 154 156 159 160 161 162 163 164 166 167 171 173 174 177 179 181 182 183 188 189 191 193 199 200 201 202 203 204 211 213 214 215 218 220 b 224 0 0 e # 22669 intersection c a 224 1 0 1 2 3 4 7 10 12 13 17 18 19 20 21 22 24 25 26 27 28 29 32 34 35 36 40 42 46 47 48 49 50 51 54 57 60 61 68 69 70 71 72 73 76 77 78 79 80 81 82 85 86 90 94 95 96 97 99 100 103 104 105 106 107 108 109 110 112 113 114 115 119 120 123 125 126 128 129 130 131 139 144 148 149 152 153 156 158 159 161 165 166 169 171 173 178 179 184 185 186 187 193 194 196 197 198 200 203 205 207 209 210 214 218 220 222 b 224 1 0 1 2 3 4 7 10 12 13 17 18 19 20 21 22 24 25 26 27 28 29 32 34 35 36 40 42 46 47 48 49 50 51 54 57 60 61 68 69 70 71 72 73 76 77 78 79 80 81 82 85 86 90 94 95 96 97 99 100 103 104 105 106 107 108 109 110 112 113 114 115 119 120 123 125 126 128 129 130 131 139 144 148 149 152 153 156 158 159 161 165 166 169 171 173 178 179 184 185 186 187 193 194 196 197 198 200 203 205 207 209 210 214 218 220 222 # 22670 intersection c a 224 1 0 1 2 3 4 7 10 12 13 17 18 19 20 21 22 24 25 26 27 28 29 32 34 35 36 40 42 46 47 48 49 50 51 54 57 60 61 68 69 70 71 72 73 76 77 78 79 80 81 82 85 86 90 94 95 96 97 99 100 103 104 105 106 107 108 109 110 112 113 114 115 119 120 123 125 126 128 129 130 131 139 144 148 149 152 153 156 158 159 161 165 166 169 171 173 178 179 184 185 186 187 193 194 196 197 198 200 203 205 207 209 210 214 218 220 222 b 224 0 0 f # 22671 intersection c a 224 1 0 1 2 4 5 6 11 13 16 18 19 21 23 28 34 35 36 37 41 42 44 46 48 49 52 53 54 55 56 59 61 62 63 64 65 66 67 71 75 76 81 82 83 84 85 86 87 88 92 95 97 98 99 105 108 109 110 112 115 121 122 125 127 128 132 133 134 136 139 142 144 146 147 151 153 155 156 157 158 159 165 167 169 170 173 174 175 176 177 178 183 185 186 188 192 194 195 198 199 201 205 208 210 211 212 214 215 220 222 223 b 224 1 0 1 2 4 5 6 11 13 16 18 19 21 23 28 34 35 36 37 41 42 44 46 48 49 52 53 54 55 56 59 61 62 63 64 65 66 67 71 75 76 81 82 83 84 85 86 87 88 92 95 97 98 99 105 108 109 110 112 115 121 122 125 127 128 132 133 134 136 139 142 144 146 147 151 153 155 156 157 158 159 165 167 169 170 173 174 175 176 177 178 183 185 186 188 192 194 195 198 199 201 205 208 210 211 212 214 215 220 222 223 # 22672 intersection c a 224 1 0 1 2 4 5 6 11 13 16 18 19 21 23 28 34 35 36 37 41 42 44 46 48 49 52 53 54 55 56 59 61 62 63 64 65 66 67 71 75 76 81 82 83 84 85 86 87 88 92 95 97 98 99 105 108 109 110 112 115 121 122 125 127 128 132 133 134 136 139 142 144 146 147 151 153 155 156 157 158 159 165 167 169 170 173 174 175 176 177 178 183 185 186 188 192 194 195 198 199 201 205 208 210 211 212 214 215 220 222 223 b 224 0 0 0 1 2 4 5 10 11 16 20 21 25 26 29 32 33 34 35 36 37 38 41 43 44 45 47 53 54 55 57 59 60 61 62 64 65 68 70 72 73 75 76 78 79 80 81 84 85 88 89 90 92 93 94 96 98 101 102 104 105 113 114 115 116 122 125 126 127 129 131 137 138 139 140 144 147 148 152 155 158 160 164 166 167 170 172 173 175 177 179 181 183 184 185 186 188 189 190 191 193 199 200 201 202 204 209 218 223 # 22673 intersection c a 224 1 0 e b 224 1 0 e # 22674 intersection c a 224 1 0 e b 224 0 1 e # 22675 intersection c a 224 1 0 e b 224 1 0 e # 22676 intersection c a 224 1 0 e b 224 0 1 f # 22677 intersection c a 224 1 0 e b 224 1 0 e # 22678 intersection c a 224 1 0 e b 224 0 1 1 3 4 6 7 9 14 17 18 19 23 24 25 26 31 32 33 34 35 37 38 39 41 43 45 47 48 52 53 55 56 61 67 68 73 75 76 79 80 81 84 88 90 93 94 95 101 102 103 104 105 109 112 114 115 116 117 119 121 122 123 124 125 128 129 132 135 137 139 140 142 143 144 145 147 148 149 150 152 153 154 155 158 162 164 167 168 170 171 172 173 175 177 178 180 181 187 188 192 194 196 199 200 203 204 205 206 208 209 210 211 215 216 218 219 220 # 22679 intersection c a 224 1 0 f b 224 1 0 f # 22680 intersection c a 224 1 0 f b 224 0 1 e # 22681 intersection c a 224 1 0 f b 224 1 0 f # 22682 intersection c a 224 1 0 f b 224 0 1 f # 22683 intersection c a 224 1 0 f b 224 1 0 f # 22684 intersection c a 224 1 0 f b 224 0 1 0 2 3 8 9 10 11 12 13 15 17 18 19 21 22 23 25 26 29 30 33 35 37 38 39 40 41 42 43 44 45 46 48 55 57 59 60 61 64 66 67 69 70 71 72 73 74 75 76 78 79 80 82 87 89 92 93 107 108 110 111 113 115 116 117 118 124 125 126 130 131 132 135 137 138 140 141 142 148 150 154 158 159 160 162 164 168 171 175 176 177 179 181 183 185 189 193 194 200 201 203 205 206 208 209 210 211 212 214 217 218 219 220 221 222 # 22685 intersection c a 224 1 0 0 1 2 4 7 9 10 11 14 17 21 22 24 27 32 34 35 38 39 40 44 46 49 50 51 52 53 55 58 59 60 63 64 65 66 70 72 74 75 76 88 91 92 95 98 99 100 101 102 103 105 106 110 111 112 115 116 117 119 121 125 126 127 129 131 132 134 138 140 141 147 149 150 152 154 155 157 158 160 163 164 167 168 173 174 182 185 187 189 193 194 195 196 198 199 203 208 209 210 212 213 216 217 220 223 b 224 1 0 0 1 2 4 7 9 10 11 14 17 21 22 24 27 32 34 35 38 39 40 44 46 49 50 51 52 53 55 58 59 60 63 64 65 66 70 72 74 75 76 88 91 92 95 98 99 100 101 102 103 105 106 110 111 112 115 116 117 119 121 125 126 127 129 131 132 134 138 140 141 147 149 150 152 154 155 157 158 160 163 164 167 168 173 174 182 185 187 189 193 194 195 196 198 199 203 208 209 210 212 213 216 217 220 223 # 22686 intersection c a 224 1 0 0 1 2 4 7 9 10 11 14 17 21 22 24 27 32 34 35 38 39 40 44 46 49 50 51 52 53 55 58 59 60 63 64 65 66 70 72 74 75 76 88 91 92 95 98 99 100 101 102 103 105 106 110 111 112 115 116 117 119 121 125 126 127 129 131 132 134 138 140 141 147 149 150 152 154 155 157 158 160 163 164 167 168 173 174 182 185 187 189 193 194 195 196 198 199 203 208 209 210 212 213 216 217 220 223 b 224 0 1 e # 22687 intersection c a 224 1 0 2 4 5 6 10 11 16 19 21 23 24 25 29 34 35 37 39 40 42 45 46 53 55 56 57 59 61 63 66 67 68 69 70 71 73 75 76 79 81 83 84 85 86 88 93 94 95 97 98 100 101 103 105 106 108 109 112 113 116 117 118 122 125 127 129 130 132 136 137 139 140 141 143 145 148 150 151 152 157 158 159 160 161 162 166 172 173 174 178 184 185 190 193 194 195 198 200 202 203 204 205 208 209 210 213 214 216 218 220 221 b 224 1 0 2 4 5 6 10 11 16 19 21 23 24 25 29 34 35 37 39 40 42 45 46 53 55 56 57 59 61 63 66 67 68 69 70 71 73 75 76 79 81 83 84 85 86 88 93 94 95 97 98 100 101 103 105 106 108 109 112 113 116 117 118 122 125 127 129 130 132 136 137 139 140 141 143 145 148 150 151 152 157 158 159 160 161 162 166 172 173 174 178 184 185 190 193 194 195 198 200 202 203 204 205 208 209 210 213 214 216 218 220 221 # 22688 intersection c a 224 1 0 2 4 5 6 10 11 16 19 21 23 24 25 29 34 35 37 39 40 42 45 46 53 55 56 57 59 61 63 66 67 68 69 70 71 73 75 76 79 81 83 84 85 86 88 93 94 95 97 98 100 101 103 105 106 108 109 112 113 116 117 118 122 125 127 129 130 132 136 137 139 140 141 143 145 148 150 151 152 157 158 159 160 161 162 166 172 173 174 178 184 185 190 193 194 195 198 200 202 203 204 205 208 209 210 213 214 216 218 220 221 b 224 0 1 f # 22689 intersection c a 224 1 0 0 2 3 4 5 12 14 15 19 28 29 31 34 35 39 41 42 45 47 49 50 51 54 55 58 63 64 65 66 71 72 76 77 78 80 81 82 83 84 85 86 89 90 91 94 98 100 101 103 106 109 111 112 114 115 117 119 122 123 125 126 127 129 131 132 134 135 136 137 140 141 147 148 150 152 153 158 159 160 162 163 164 166 167 169 170 171 172 175 177 178 182 183 187 196 197 198 199 200 201 202 203 206 207 212 217 218 219 220 b 224 1 0 0 2 3 4 5 12 14 15 19 28 29 31 34 35 39 41 42 45 47 49 50 51 54 55 58 63 64 65 66 71 72 76 77 78 80 81 82 83 84 85 86 89 90 91 94 98 100 101 103 106 109 111 112 114 115 117 119 122 123 125 126 127 129 131 132 134 135 136 137 140 141 147 148 150 152 153 158 159 160 162 163 164 166 167 169 170 171 172 175 177 178 182 183 187 196 197 198 199 200 201 202 203 206 207 212 217 218 219 220 # 22690 intersection c a 224 1 0 0 2 3 4 5 12 14 15 19 28 29 31 34 35 39 41 42 45 47 49 50 51 54 55 58 63 64 65 66 71 72 76 77 78 80 81 82 83 84 85 86 89 90 91 94 98 100 101 103 106 109 111 112 114 115 117 119 122 123 125 126 127 129 131 132 134 135 136 137 140 141 147 148 150 152 153 158 159 160 162 163 164 166 167 169 170 171 172 175 177 178 182 183 187 196 197 198 199 200 201 202 203 206 207 212 217 218 219 220 b 224 0 1 0 1 2 4 5 7 8 11 12 14 16 17 18 19 22 23 24 25 26 27 32 34 35 36 39 40 41 42 43 46 47 49 50 51 52 53 55 56 58 64 67 69 72 74 75 76 77 78 80 81 82 83 86 88 89 93 94 95 97 98 99 100 102 105 108 111 115 116 118 119 120 122 125 127 128 129 134 135 138 140 144 145 146 147 148 149 150 151 153 155 158 162 163 164 165 170 172 173 175 176 178 179 181 182 183 185 186 187 189 191 192 193 194 195 196 198 199 200 201 203 204 205 206 209 211 213 214 215 216 217 218 # 22691 intersection c a 224 1 0 e b 224 1 0 e # 22692 intersection c a 224 1 0 e b 224 1 0 e # 22693 intersection c a 224 1 0 e b 224 1 0 e # 22694 intersection c a 224 1 0 e b 224 1 0 f # 22695 intersection c a 224 1 0 e b 224 1 0 e # 22696 intersection c a 224 1 0 e b 224 1 0 3 6 8 10 11 12 13 18 19 21 22 25 26 27 32 33 36 39 40 42 43 45 46 47 49 50 51 52 53 56 59 60 61 63 65 66 72 74 77 78 79 80 81 82 83 86 88 91 92 93 96 98 100 103 104 107 110 112 116 118 121 124 125 126 129 130 136 140 141 142 143 145 149 150 151 152 153 155 156 159 161 163 166 167 168 171 173 175 176 177 178 180 181 182 183 184 189 191 192 193 195 198 200 202 203 206 209 211 214 216 218 220 222 223 # 22697 intersection c a 224 1 0 f b 224 1 0 f # 22698 intersection c a 224 1 0 f b 224 1 0 e # 22699 intersection c a 224 1 0 f b 224 1 0 f # 22700 intersection c a 224 1 0 f b 224 1 0 f # 22701 intersection c a 224 1 0 f b 224 1 0 f # 22702 intersection c a 224 1 0 f b 224 1 0 0 2 4 5 7 8 10 12 17 19 21 22 25 28 30 31 32 33 35 37 38 42 44 49 50 51 52 53 54 55 56 59 60 62 63 64 65 66 68 69 70 71 73 76 77 82 85 90 92 93 95 96 104 105 106 107 111 112 119 120 123 125 127 129 132 133 134 135 136 137 138 140 143 146 147 148 151 152 153 154 159 160 161 163 164 166 168 169 170 171 173 174 175 177 181 184 189 190 198 203 207 208 209 212 213 215 217 218 219 220 221 # 22703 intersection c a 224 1 0 1 3 7 8 9 12 13 15 16 17 19 20 21 22 23 24 25 26 28 29 30 31 32 34 35 37 38 40 43 45 46 49 52 53 56 57 58 60 61 63 64 66 70 71 72 74 75 76 82 85 86 88 89 90 91 94 98 99 100 101 102 103 104 106 107 108 109 114 115 121 123 125 127 132 135 136 137 138 139 140 144 145 147 149 151 152 155 157 158 159 160 163 165 166 168 169 170 171 177 179 184 185 188 189 191 193 194 195 196 197 198 200 201 209 211 213 214 216 218 b 224 1 0 1 3 7 8 9 12 13 15 16 17 19 20 21 22 23 24 25 26 28 29 30 31 32 34 35 37 38 40 43 45 46 49 52 53 56 57 58 60 61 63 64 66 70 71 72 74 75 76 82 85 86 88 89 90 91 94 98 99 100 101 102 103 104 106 107 108 109 114 115 121 123 125 127 132 135 136 137 138 139 140 144 145 147 149 151 152 155 157 158 159 160 163 165 166 168 169 170 171 177 179 184 185 188 189 191 193 194 195 196 197 198 200 201 209 211 213 214 216 218 # 22704 intersection c a 224 1 0 1 3 7 8 9 12 13 15 16 17 19 20 21 22 23 24 25 26 28 29 30 31 32 34 35 37 38 40 43 45 46 49 52 53 56 57 58 60 61 63 64 66 70 71 72 74 75 76 82 85 86 88 89 90 91 94 98 99 100 101 102 103 104 106 107 108 109 114 115 121 123 125 127 132 135 136 137 138 139 140 144 145 147 149 151 152 155 157 158 159 160 163 165 166 168 169 170 171 177 179 184 185 188 189 191 193 194 195 196 197 198 200 201 209 211 213 214 216 218 b 224 1 0 e # 22705 intersection c a 224 1 0 1 3 4 9 10 14 16 20 23 27 31 34 36 38 39 40 44 46 47 48 49 50 51 55 56 57 61 62 63 65 66 67 68 69 70 71 75 76 77 78 79 80 81 85 86 87 88 91 94 96 97 99 102 103 104 106 107 110 119 120 121 122 124 125 126 127 130 131 132 133 134 135 138 140 142 144 146 147 148 150 151 152 153 154 155 156 157 158 160 161 163 164 165 170 172 174 176 180 183 186 188 189 191 192 193 194 195 196 198 201 202 206 207 208 211 212 213 216 219 220 221 222 223 b 224 1 0 1 3 4 9 10 14 16 20 23 27 31 34 36 38 39 40 44 46 47 48 49 50 51 55 56 57 61 62 63 65 66 67 68 69 70 71 75 76 77 78 79 80 81 85 86 87 88 91 94 96 97 99 102 103 104 106 107 110 119 120 121 122 124 125 126 127 130 131 132 133 134 135 138 140 142 144 146 147 148 150 151 152 153 154 155 156 157 158 160 161 163 164 165 170 172 174 176 180 183 186 188 189 191 192 193 194 195 196 198 201 202 206 207 208 211 212 213 216 219 220 221 222 223 # 22706 intersection c a 224 1 0 1 3 4 9 10 14 16 20 23 27 31 34 36 38 39 40 44 46 47 48 49 50 51 55 56 57 61 62 63 65 66 67 68 69 70 71 75 76 77 78 79 80 81 85 86 87 88 91 94 96 97 99 102 103 104 106 107 110 119 120 121 122 124 125 126 127 130 131 132 133 134 135 138 140 142 144 146 147 148 150 151 152 153 154 155 156 157 158 160 161 163 164 165 170 172 174 176 180 183 186 188 189 191 192 193 194 195 196 198 201 202 206 207 208 211 212 213 216 219 220 221 222 223 b 224 1 0 f # 22707 intersection c a 224 1 0 0 1 4 6 10 12 15 16 17 18 20 22 23 26 29 31 33 38 40 41 42 43 46 47 52 54 57 58 59 61 62 63 64 67 74 76 77 81 82 83 85 87 89 91 92 94 95 98 99 100 104 106 107 108 113 116 121 124 128 129 131 133 134 135 136 137 138 139 140 141 144 146 147 148 149 150 152 154 155 161 162 165 168 171 173 174 177 178 180 181 182 185 187 188 190 193 194 195 196 199 201 203 206 207 209 210 211 212 213 217 218 221 222 b 224 1 0 0 1 4 6 10 12 15 16 17 18 20 22 23 26 29 31 33 38 40 41 42 43 46 47 52 54 57 58 59 61 62 63 64 67 74 76 77 81 82 83 85 87 89 91 92 94 95 98 99 100 104 106 107 108 113 116 121 124 128 129 131 133 134 135 136 137 138 139 140 141 144 146 147 148 149 150 152 154 155 161 162 165 168 171 173 174 177 178 180 181 182 185 187 188 190 193 194 195 196 199 201 203 206 207 209 210 211 212 213 217 218 221 222 # 22708 intersection c a 224 1 0 0 1 4 6 10 12 15 16 17 18 20 22 23 26 29 31 33 38 40 41 42 43 46 47 52 54 57 58 59 61 62 63 64 67 74 76 77 81 82 83 85 87 89 91 92 94 95 98 99 100 104 106 107 108 113 116 121 124 128 129 131 133 134 135 136 137 138 139 140 141 144 146 147 148 149 150 152 154 155 161 162 165 168 171 173 174 177 178 180 181 182 185 187 188 190 193 194 195 196 199 201 203 206 207 209 210 211 212 213 217 218 221 222 b 224 1 0 0 3 4 6 10 11 12 13 15 16 18 19 23 29 30 36 37 39 42 43 46 48 49 51 53 54 55 56 57 60 65 66 68 71 72 73 74 77 78 79 80 82 84 85 87 88 91 92 93 97 101 103 104 107 109 110 113 114 116 117 127 129 130 131 132 134 137 139 140 142 145 148 149 150 153 157 159 160 162 163 167 169 170 173 174 175 178 180 181 184 185 186 188 189 191 193 194 195 197 198 199 200 203 206 207 209 210 214 221 223 # 22709 intersection c a 224 1 0 e b 224 1 0 e # 22710 intersection c a 224 1 0 e b 224 1 1 e # 22711 intersection c a 224 1 0 e b 224 1 0 e # 22712 intersection c a 224 1 0 e b 224 1 1 f # 22713 intersection c a 224 1 0 e b 224 1 0 e # 22714 intersection c a 224 1 0 e b 224 1 1 0 7 8 9 10 11 12 13 14 17 18 19 21 23 25 27 29 32 33 37 39 42 44 45 46 49 51 52 53 55 57 58 59 65 66 69 71 78 79 84 85 88 89 93 94 98 99 102 103 104 106 108 109 110 112 114 115 117 120 121 124 126 128 129 134 136 137 139 140 143 144 145 146 148 150 151 155 157 160 163 164 169 174 177 178 180 184 185 188 192 193 195 197 199 203 204 206 208 209 210 211 215 219 220 221 223 # 22715 intersection c a 224 1 0 f b 224 1 0 f # 22716 intersection c a 224 1 0 f b 224 1 1 e # 22717 intersection c a 224 1 0 f b 224 1 0 f # 22718 intersection c a 224 1 0 f b 224 1 1 f # 22719 intersection c a 224 1 0 f b 224 1 0 f # 22720 intersection c a 224 1 0 f b 224 1 1 0 1 2 4 5 10 12 13 14 15 16 17 18 19 21 22 23 26 28 31 34 35 39 40 47 49 50 51 52 53 58 62 63 64 65 66 67 69 70 71 73 77 80 83 85 87 88 90 92 93 96 97 100 105 106 110 112 114 116 118 119 121 124 125 126 127 128 131 134 135 137 139 140 142 143 145 146 149 151 152 153 154 155 156 157 158 160 164 167 168 170 171 172 173 174 176 177 178 179 180 182 183 185 186 187 189 192 193 194 195 196 198 199 200 202 205 206 207 210 212 213 214 215 217 218 219 # 22721 intersection c a 224 1 0 4 5 10 11 12 13 14 17 18 19 21 22 23 25 26 27 31 32 33 34 35 36 42 44 45 46 49 51 54 55 57 58 59 67 68 72 74 75 76 77 78 83 86 87 89 91 93 95 97 98 101 103 106 108 109 110 112 116 121 123 124 125 126 131 133 134 135 138 141 142 144 146 147 148 149 150 152 156 157 158 163 165 166 169 170 171 174 176 177 180 182 185 186 188 189 190 192 198 199 200 204 206 207 211 213 215 216 219 b 224 1 0 4 5 10 11 12 13 14 17 18 19 21 22 23 25 26 27 31 32 33 34 35 36 42 44 45 46 49 51 54 55 57 58 59 67 68 72 74 75 76 77 78 83 86 87 89 91 93 95 97 98 101 103 106 108 109 110 112 116 121 123 124 125 126 131 133 134 135 138 141 142 144 146 147 148 149 150 152 156 157 158 163 165 166 169 170 171 174 176 177 180 182 185 186 188 189 190 192 198 199 200 204 206 207 211 213 215 216 219 # 22722 intersection c a 224 1 0 4 5 10 11 12 13 14 17 18 19 21 22 23 25 26 27 31 32 33 34 35 36 42 44 45 46 49 51 54 55 57 58 59 67 68 72 74 75 76 77 78 83 86 87 89 91 93 95 97 98 101 103 106 108 109 110 112 116 121 123 124 125 126 131 133 134 135 138 141 142 144 146 147 148 149 150 152 156 157 158 163 165 166 169 170 171 174 176 177 180 182 185 186 188 189 190 192 198 199 200 204 206 207 211 213 215 216 219 b 224 1 1 e # 22723 intersection c a 224 1 0 0 1 3 6 8 10 11 12 13 15 16 17 18 20 23 24 25 26 33 37 38 39 42 43 46 48 49 50 51 58 59 62 63 69 75 78 81 83 84 85 88 90 93 95 101 102 103 104 106 108 109 110 116 117 118 119 121 123 124 125 127 129 131 134 136 138 139 141 143 145 148 149 152 153 154 159 161 163 168 171 173 174 176 177 178 179 180 181 183 184 188 189 190 191 192 194 196 197 198 206 209 212 214 216 218 220 221 223 b 224 1 0 0 1 3 6 8 10 11 12 13 15 16 17 18 20 23 24 25 26 33 37 38 39 42 43 46 48 49 50 51 58 59 62 63 69 75 78 81 83 84 85 88 90 93 95 101 102 103 104 106 108 109 110 116 117 118 119 121 123 124 125 127 129 131 134 136 138 139 141 143 145 148 149 152 153 154 159 161 163 168 171 173 174 176 177 178 179 180 181 183 184 188 189 190 191 192 194 196 197 198 206 209 212 214 216 218 220 221 223 # 22724 intersection c a 224 1 0 0 1 3 6 8 10 11 12 13 15 16 17 18 20 23 24 25 26 33 37 38 39 42 43 46 48 49 50 51 58 59 62 63 69 75 78 81 83 84 85 88 90 93 95 101 102 103 104 106 108 109 110 116 117 118 119 121 123 124 125 127 129 131 134 136 138 139 141 143 145 148 149 152 153 154 159 161 163 168 171 173 174 176 177 178 179 180 181 183 184 188 189 190 191 192 194 196 197 198 206 209 212 214 216 218 220 221 223 b 224 1 1 f # 22725 intersection c a 224 1 0 2 3 5 8 9 10 13 16 17 18 21 22 23 24 25 27 29 30 31 33 34 38 41 42 44 46 47 48 49 56 57 60 63 64 65 70 73 74 76 77 79 80 84 86 87 91 94 98 99 100 101 104 106 107 110 111 112 113 117 119 122 123 124 125 134 135 136 137 138 139 140 142 143 147 150 152 155 160 161 162 163 166 167 169 170 173 174 175 178 180 182 183 184 186 188 190 192 196 208 209 210 213 217 218 219 b 224 1 0 2 3 5 8 9 10 13 16 17 18 21 22 23 24 25 27 29 30 31 33 34 38 41 42 44 46 47 48 49 56 57 60 63 64 65 70 73 74 76 77 79 80 84 86 87 91 94 98 99 100 101 104 106 107 110 111 112 113 117 119 122 123 124 125 134 135 136 137 138 139 140 142 143 147 150 152 155 160 161 162 163 166 167 169 170 173 174 175 178 180 182 183 184 186 188 190 192 196 208 209 210 213 217 218 219 # 22726 intersection c a 224 1 0 2 3 5 8 9 10 13 16 17 18 21 22 23 24 25 27 29 30 31 33 34 38 41 42 44 46 47 48 49 56 57 60 63 64 65 70 73 74 76 77 79 80 84 86 87 91 94 98 99 100 101 104 106 107 110 111 112 113 117 119 122 123 124 125 134 135 136 137 138 139 140 142 143 147 150 152 155 160 161 162 163 166 167 169 170 173 174 175 178 180 182 183 184 186 188 190 192 196 208 209 210 213 217 218 219 b 224 1 1 0 1 3 5 7 8 9 14 15 17 19 20 21 23 24 26 27 28 31 33 34 35 37 38 40 41 42 43 46 47 50 51 54 55 56 57 58 63 64 65 66 68 69 70 71 72 73 74 77 84 90 91 92 94 95 97 100 102 104 105 106 109 110 111 115 116 117 123 124 126 127 129 131 136 149 153 156 164 165 166 167 168 174 175 176 181 182 183 186 190 191 192 193 196 197 199 202 203 204 205 206 207 208 209 212 213 214 217 218 219 223 # 22727 intersection c a 224 1 1 e b 224 1 1 e # 22728 intersection c a 224 1 1 e b 224 0 0 e # 22729 intersection c a 224 1 1 e b 224 1 1 e # 22730 intersection c a 224 1 1 e b 224 0 0 f # 22731 intersection c a 224 1 1 e b 224 1 1 e # 22732 intersection c a 224 1 1 e b 224 0 0 1 4 5 6 7 9 10 12 15 18 21 23 24 28 29 32 33 39 42 44 46 48 49 52 53 54 55 59 65 66 67 71 74 76 77 80 81 82 83 84 85 86 91 92 94 95 97 98 100 104 106 110 113 119 121 129 130 134 135 139 140 142 143 147 149 151 153 155 159 162 163 165 166 167 170 171 172 173 174 175 176 178 180 185 187 191 192 201 204 207 208 209 211 213 219 220 221 223 # 22733 intersection c a 224 1 1 f b 224 1 1 f # 22734 intersection c a 224 1 1 f b 224 0 0 e # 22735 intersection c a 224 1 1 f b 224 1 1 f # 22736 intersection c a 224 1 1 f b 224 0 0 f # 22737 intersection c a 224 1 1 f b 224 1 1 f # 22738 intersection c a 224 1 1 f b 224 0 0 1 2 6 7 10 11 12 14 15 17 20 21 22 26 28 30 33 34 35 37 44 46 47 51 56 58 59 60 61 62 64 65 66 67 71 72 73 74 75 77 78 83 84 85 88 89 91 92 94 96 97 101 104 109 110 111 115 116 117 119 120 121 122 124 125 126 127 128 133 134 136 137 138 140 142 144 147 149 150 151 159 160 161 164 165 166 167 168 169 170 171 173 175 178 179 182 183 184 188 189 191 192 200 205 207 209 218 221 222 223 # 22739 intersection c a 224 1 1 3 5 8 9 10 12 13 14 15 16 20 21 22 25 28 32 33 36 37 38 39 40 42 45 49 50 52 53 55 56 57 61 62 64 65 67 68 72 74 78 79 81 84 85 88 89 90 92 93 95 96 97 101 102 103 105 107 109 110 111 112 116 118 119 121 122 123 124 126 130 131 133 134 135 136 137 138 140 141 143 144 145 147 150 153 155 159 163 170 172 174 175 178 181 182 183 186 187 188 192 193 194 198 200 201 202 203 205 206 208 209 210 213 215 217 218 223 b 224 1 1 3 5 8 9 10 12 13 14 15 16 20 21 22 25 28 32 33 36 37 38 39 40 42 45 49 50 52 53 55 56 57 61 62 64 65 67 68 72 74 78 79 81 84 85 88 89 90 92 93 95 96 97 101 102 103 105 107 109 110 111 112 116 118 119 121 122 123 124 126 130 131 133 134 135 136 137 138 140 141 143 144 145 147 150 153 155 159 163 170 172 174 175 178 181 182 183 186 187 188 192 193 194 198 200 201 202 203 205 206 208 209 210 213 215 217 218 223 # 22740 intersection c a 224 1 1 3 5 8 9 10 12 13 14 15 16 20 21 22 25 28 32 33 36 37 38 39 40 42 45 49 50 52 53 55 56 57 61 62 64 65 67 68 72 74 78 79 81 84 85 88 89 90 92 93 95 96 97 101 102 103 105 107 109 110 111 112 116 118 119 121 122 123 124 126 130 131 133 134 135 136 137 138 140 141 143 144 145 147 150 153 155 159 163 170 172 174 175 178 181 182 183 186 187 188 192 193 194 198 200 201 202 203 205 206 208 209 210 213 215 217 218 223 b 224 0 0 e # 22741 intersection c a 224 1 1 4 5 6 7 8 9 11 16 18 23 29 31 33 36 38 40 44 45 46 47 49 51 53 54 56 58 60 67 68 71 72 73 75 76 81 86 88 89 90 91 94 95 96 98 100 103 106 108 110 111 112 116 118 121 123 126 127 128 131 132 133 134 135 139 140 141 142 143 147 148 153 156 159 160 161 164 167 168 169 170 172 173 175 178 180 182 183 188 189 190 192 194 195 196 198 201 202 203 204 206 208 209 210 213 215 217 218 219 220 221 223 b 224 1 1 4 5 6 7 8 9 11 16 18 23 29 31 33 36 38 40 44 45 46 47 49 51 53 54 56 58 60 67 68 71 72 73 75 76 81 86 88 89 90 91 94 95 96 98 100 103 106 108 110 111 112 116 118 121 123 126 127 128 131 132 133 134 135 139 140 141 142 143 147 148 153 156 159 160 161 164 167 168 169 170 172 173 175 178 180 182 183 188 189 190 192 194 195 196 198 201 202 203 204 206 208 209 210 213 215 217 218 219 220 221 223 # 22742 intersection c a 224 1 1 4 5 6 7 8 9 11 16 18 23 29 31 33 36 38 40 44 45 46 47 49 51 53 54 56 58 60 67 68 71 72 73 75 76 81 86 88 89 90 91 94 95 96 98 100 103 106 108 110 111 112 116 118 121 123 126 127 128 131 132 133 134 135 139 140 141 142 143 147 148 153 156 159 160 161 164 167 168 169 170 172 173 175 178 180 182 183 188 189 190 192 194 195 196 198 201 202 203 204 206 208 209 210 213 215 217 218 219 220 221 223 b 224 0 0 f # 22743 intersection c a 224 1 1 2 4 6 9 11 12 15 17 19 20 21 23 24 26 27 30 31 32 35 36 37 40 43 44 47 49 50 56 58 60 61 63 66 69 73 74 79 81 82 83 86 87 89 92 94 95 96 97 100 101 102 105 107 109 112 115 116 118 123 124 126 127 131 132 133 136 137 139 141 145 147 148 153 158 165 166 167 170 171 172 180 185 188 190 192 194 195 197 198 199 201 202 205 207 209 210 217 218 221 222 b 224 1 1 2 4 6 9 11 12 15 17 19 20 21 23 24 26 27 30 31 32 35 36 37 40 43 44 47 49 50 56 58 60 61 63 66 69 73 74 79 81 82 83 86 87 89 92 94 95 96 97 100 101 102 105 107 109 112 115 116 118 123 124 126 127 131 132 133 136 137 139 141 145 147 148 153 158 165 166 167 170 171 172 180 185 188 190 192 194 195 197 198 199 201 202 205 207 209 210 217 218 221 222 # 22744 intersection c a 224 1 1 2 4 6 9 11 12 15 17 19 20 21 23 24 26 27 30 31 32 35 36 37 40 43 44 47 49 50 56 58 60 61 63 66 69 73 74 79 81 82 83 86 87 89 92 94 95 96 97 100 101 102 105 107 109 112 115 116 118 123 124 126 127 131 132 133 136 137 139 141 145 147 148 153 158 165 166 167 170 171 172 180 185 188 190 192 194 195 197 198 199 201 202 205 207 209 210 217 218 221 222 b 224 0 0 1 3 4 7 11 13 15 18 19 20 27 31 32 35 36 37 38 39 41 42 44 48 50 51 52 54 59 60 63 64 65 67 68 70 74 75 76 77 83 87 88 90 92 95 97 98 100 104 107 112 116 117 121 122 128 129 130 131 139 140 143 144 145 146 147 151 154 158 161 163 164 165 172 174 175 177 178 179 181 186 187 188 189 191 192 193 194 195 197 199 202 204 205 208 210 214 216 217 219 220 222 # 22745 intersection c a 224 1 1 e b 224 1 1 e # 22746 intersection c a 224 1 1 e b 224 0 1 e # 22747 intersection c a 224 1 1 e b 224 1 1 e # 22748 intersection c a 224 1 1 e b 224 0 1 f # 22749 intersection c a 224 1 1 e b 224 1 1 e # 22750 intersection c a 224 1 1 e b 224 0 1 3 7 8 11 13 18 20 22 23 27 28 31 32 33 34 40 41 44 46 47 48 52 56 57 60 61 63 66 67 70 72 75 76 78 80 82 83 84 86 88 90 91 92 94 96 97 100 103 105 106 110 111 112 113 114 116 117 118 119 120 121 122 123 125 129 132 133 136 138 140 145 146 148 149 151 152 154 156 158 160 162 163 168 172 173 174 175 176 177 180 183 184 185 187 195 196 197 198 200 202 203 205 206 207 208 209 211 213 214 216 218 219 220 # 22751 intersection c a 224 1 1 f b 224 1 1 f # 22752 intersection c a 224 1 1 f b 224 0 1 e # 22753 intersection c a 224 1 1 f b 224 1 1 f # 22754 intersection c a 224 1 1 f b 224 0 1 f # 22755 intersection c a 224 1 1 f b 224 1 1 f # 22756 intersection c a 224 1 1 f b 224 0 1 2 5 6 9 10 11 12 13 14 15 16 18 20 21 23 26 27 28 29 35 38 39 40 41 43 44 50 52 56 57 60 62 64 67 70 75 77 79 80 83 85 88 90 91 92 95 96 98 100 102 103 104 105 106 108 111 112 113 114 117 122 124 128 129 130 140 141 142 143 145 146 147 148 152 154 157 158 160 161 162 166 167 168 170 171 172 173 176 180 181 182 183 184 190 192 194 196 197 198 200 201 203 204 205 207 209 212 213 214 215 219 221 # 22757 intersection c a 224 1 1 2 5 6 8 9 11 12 13 15 16 17 20 27 29 31 36 37 38 39 40 41 43 44 45 46 48 49 50 54 55 56 57 58 60 63 73 75 76 77 80 82 84 85 86 88 89 90 92 93 97 98 99 104 105 107 108 109 111 114 116 117 118 119 120 123 125 127 128 130 131 137 139 140 142 144 145 146 147 148 152 153 160 164 165 166 168 169 171 173 176 177 178 182 186 187 188 190 192 194 195 196 199 203 205 208 210 212 213 214 215 216 217 218 219 221 b 224 1 1 2 5 6 8 9 11 12 13 15 16 17 20 27 29 31 36 37 38 39 40 41 43 44 45 46 48 49 50 54 55 56 57 58 60 63 73 75 76 77 80 82 84 85 86 88 89 90 92 93 97 98 99 104 105 107 108 109 111 114 116 117 118 119 120 123 125 127 128 130 131 137 139 140 142 144 145 146 147 148 152 153 160 164 165 166 168 169 171 173 176 177 178 182 186 187 188 190 192 194 195 196 199 203 205 208 210 212 213 214 215 216 217 218 219 221 # 22758 intersection c a 224 1 1 2 5 6 8 9 11 12 13 15 16 17 20 27 29 31 36 37 38 39 40 41 43 44 45 46 48 49 50 54 55 56 57 58 60 63 73 75 76 77 80 82 84 85 86 88 89 90 92 93 97 98 99 104 105 107 108 109 111 114 116 117 118 119 120 123 125 127 128 130 131 137 139 140 142 144 145 146 147 148 152 153 160 164 165 166 168 169 171 173 176 177 178 182 186 187 188 190 192 194 195 196 199 203 205 208 210 212 213 214 215 216 217 218 219 221 b 224 0 1 e # 22759 intersection c a 224 1 1 0 1 3 6 7 8 10 12 14 15 18 21 25 26 27 28 30 31 34 35 36 38 39 40 41 43 44 45 50 51 53 54 55 56 57 59 64 68 69 72 75 77 79 81 82 84 85 87 88 89 90 91 95 97 100 101 102 105 107 108 110 111 117 119 122 123 126 127 131 132 133 136 137 138 139 141 142 143 148 149 152 156 157 161 164 165 167 171 177 178 182 184 186 187 194 195 198 199 200 203 205 207 208 212 214 215 216 217 218 219 b 224 1 1 0 1 3 6 7 8 10 12 14 15 18 21 25 26 27 28 30 31 34 35 36 38 39 40 41 43 44 45 50 51 53 54 55 56 57 59 64 68 69 72 75 77 79 81 82 84 85 87 88 89 90 91 95 97 100 101 102 105 107 108 110 111 117 119 122 123 126 127 131 132 133 136 137 138 139 141 142 143 148 149 152 156 157 161 164 165 167 171 177 178 182 184 186 187 194 195 198 199 200 203 205 207 208 212 214 215 216 217 218 219 # 22760 intersection c a 224 1 1 0 1 3 6 7 8 10 12 14 15 18 21 25 26 27 28 30 31 34 35 36 38 39 40 41 43 44 45 50 51 53 54 55 56 57 59 64 68 69 72 75 77 79 81 82 84 85 87 88 89 90 91 95 97 100 101 102 105 107 108 110 111 117 119 122 123 126 127 131 132 133 136 137 138 139 141 142 143 148 149 152 156 157 161 164 165 167 171 177 178 182 184 186 187 194 195 198 199 200 203 205 207 208 212 214 215 216 217 218 219 b 224 0 1 f # 22761 intersection c a 224 1 1 0 3 6 11 13 14 15 20 21 23 24 26 27 33 35 37 39 42 45 49 50 52 53 54 57 59 60 61 62 64 69 70 73 74 78 79 81 82 83 84 85 87 88 89 90 91 92 93 95 96 97 102 103 104 105 112 115 117 118 119 120 122 123 125 126 128 134 136 138 142 147 149 150 155 158 163 164 167 168 170 172 173 174 176 177 178 180 181 185 187 188 190 192 196 197 199 202 204 205 207 208 211 213 220 222 b 224 1 1 0 3 6 11 13 14 15 20 21 23 24 26 27 33 35 37 39 42 45 49 50 52 53 54 57 59 60 61 62 64 69 70 73 74 78 79 81 82 83 84 85 87 88 89 90 91 92 93 95 96 97 102 103 104 105 112 115 117 118 119 120 122 123 125 126 128 134 136 138 142 147 149 150 155 158 163 164 167 168 170 172 173 174 176 177 178 180 181 185 187 188 190 192 196 197 199 202 204 205 207 208 211 213 220 222 # 22762 intersection c a 224 1 1 0 3 6 11 13 14 15 20 21 23 24 26 27 33 35 37 39 42 45 49 50 52 53 54 57 59 60 61 62 64 69 70 73 74 78 79 81 82 83 84 85 87 88 89 90 91 92 93 95 96 97 102 103 104 105 112 115 117 118 119 120 122 123 125 126 128 134 136 138 142 147 149 150 155 158 163 164 167 168 170 172 173 174 176 177 178 180 181 185 187 188 190 192 196 197 199 202 204 205 207 208 211 213 220 222 b 224 0 1 0 2 3 7 13 15 17 18 21 22 23 30 32 33 34 36 40 41 42 47 49 51 52 54 58 59 60 63 68 69 70 71 73 74 75 78 81 85 86 87 90 91 92 93 94 97 99 100 102 104 105 108 109 110 112 113 116 118 120 121 123 124 125 126 127 128 130 131 132 133 134 135 138 141 142 144 147 150 154 155 157 158 161 162 164 165 166 169 170 172 174 176 180 183 186 187 189 190 191 192 193 195 196 198 201 202 203 207 208 209 212 213 219 222 # 22763 intersection c a 224 1 1 e b 224 1 1 e # 22764 intersection c a 224 1 1 e b 224 1 0 e # 22765 intersection c a 224 1 1 e b 224 1 1 e # 22766 intersection c a 224 1 1 e b 224 1 0 f # 22767 intersection c a 224 1 1 e b 224 1 1 e # 22768 intersection c a 224 1 1 e b 224 1 0 1 8 12 13 16 18 19 24 28 29 30 31 32 37 38 40 42 43 45 47 50 51 52 53 55 66 67 72 74 75 78 79 81 84 85 86 91 93 95 97 98 102 104 105 107 108 110 112 114 115 116 117 118 120 122 130 131 132 133 134 135 138 142 144 145 147 150 152 153 154 155 160 163 166 167 171 172 175 176 177 180 182 183 185 186 187 192 195 196 198 200 201 203 205 209 210 213 215 216 217 218 221 222 223 # 22769 intersection c a 224 1 1 f b 224 1 1 f # 22770 intersection c a 224 1 1 f b 224 1 0 e # 22771 intersection c a 224 1 1 f b 224 1 1 f # 22772 intersection c a 224 1 1 f b 224 1 0 f # 22773 intersection c a 224 1 1 f b 224 1 1 f # 22774 intersection c a 224 1 1 f b 224 1 0 2 5 8 9 10 11 15 17 19 20 21 22 24 25 26 27 28 30 32 33 36 37 40 44 45 48 49 54 57 59 63 65 67 68 69 73 74 76 77 78 80 82 84 85 87 88 89 90 91 92 94 96 99 100 101 104 105 108 110 111 113 114 116 119 122 125 128 129 131 137 138 140 141 144 146 147 148 149 151 155 156 157 159 162 163 164 168 169 170 171 172 181 184 187 190 191 192 193 194 195 197 200 203 204 205 208 213 214 217 # 22775 intersection c a 224 1 1 1 4 5 6 7 9 10 12 13 15 17 18 19 20 21 22 23 24 29 30 31 32 35 37 38 39 40 42 43 47 50 53 55 56 57 61 66 69 75 76 77 78 85 89 90 91 92 93 95 99 100 101 104 105 106 107 109 110 111 117 118 119 122 125 127 129 130 139 144 145 146 147 149 150 151 155 158 159 161 162 163 168 172 173 174 177 179 182 183 184 188 190 191 192 193 194 197 198 201 202 204 206 211 217 b 224 1 1 1 4 5 6 7 9 10 12 13 15 17 18 19 20 21 22 23 24 29 30 31 32 35 37 38 39 40 42 43 47 50 53 55 56 57 61 66 69 75 76 77 78 85 89 90 91 92 93 95 99 100 101 104 105 106 107 109 110 111 117 118 119 122 125 127 129 130 139 144 145 146 147 149 150 151 155 158 159 161 162 163 168 172 173 174 177 179 182 183 184 188 190 191 192 193 194 197 198 201 202 204 206 211 217 # 22776 intersection c a 224 1 1 1 4 5 6 7 9 10 12 13 15 17 18 19 20 21 22 23 24 29 30 31 32 35 37 38 39 40 42 43 47 50 53 55 56 57 61 66 69 75 76 77 78 85 89 90 91 92 93 95 99 100 101 104 105 106 107 109 110 111 117 118 119 122 125 127 129 130 139 144 145 146 147 149 150 151 155 158 159 161 162 163 168 172 173 174 177 179 182 183 184 188 190 191 192 193 194 197 198 201 202 204 206 211 217 b 224 1 0 e # 22777 intersection c a 224 1 1 1 3 4 10 11 12 15 16 18 20 25 29 30 31 32 34 35 39 40 41 42 45 53 55 56 57 60 61 67 68 71 75 77 79 80 81 82 84 87 93 94 95 97 101 102 103 106 108 111 112 115 116 117 121 123 127 129 130 131 132 133 134 137 138 140 141 143 145 146 147 151 152 153 156 157 160 162 163 165 169 170 172 173 176 182 186 195 197 199 200 201 203 204 205 206 207 208 210 212 213 214 215 217 219 221 223 b 224 1 1 1 3 4 10 11 12 15 16 18 20 25 29 30 31 32 34 35 39 40 41 42 45 53 55 56 57 60 61 67 68 71 75 77 79 80 81 82 84 87 93 94 95 97 101 102 103 106 108 111 112 115 116 117 121 123 127 129 130 131 132 133 134 137 138 140 141 143 145 146 147 151 152 153 156 157 160 162 163 165 169 170 172 173 176 182 186 195 197 199 200 201 203 204 205 206 207 208 210 212 213 214 215 217 219 221 223 # 22778 intersection c a 224 1 1 1 3 4 10 11 12 15 16 18 20 25 29 30 31 32 34 35 39 40 41 42 45 53 55 56 57 60 61 67 68 71 75 77 79 80 81 82 84 87 93 94 95 97 101 102 103 106 108 111 112 115 116 117 121 123 127 129 130 131 132 133 134 137 138 140 141 143 145 146 147 151 152 153 156 157 160 162 163 165 169 170 172 173 176 182 186 195 197 199 200 201 203 204 205 206 207 208 210 212 213 214 215 217 219 221 223 b 224 1 0 f # 22779 intersection c a 224 1 1 1 4 5 8 11 18 21 23 24 26 27 30 34 36 38 39 40 41 43 45 47 49 50 51 52 54 56 57 59 63 68 69 72 73 76 77 78 80 81 86 87 90 91 92 94 96 97 98 99 100 101 103 104 105 110 113 114 117 123 124 125 127 128 129 130 131 132 133 134 135 136 141 143 144 148 149 150 153 156 159 161 162 164 165 167 170 171 176 177 178 179 182 183 186 188 194 197 198 199 201 203 205 208 210 212 213 214 217 218 219 b 224 1 1 1 4 5 8 11 18 21 23 24 26 27 30 34 36 38 39 40 41 43 45 47 49 50 51 52 54 56 57 59 63 68 69 72 73 76 77 78 80 81 86 87 90 91 92 94 96 97 98 99 100 101 103 104 105 110 113 114 117 123 124 125 127 128 129 130 131 132 133 134 135 136 141 143 144 148 149 150 153 156 159 161 162 164 165 167 170 171 176 177 178 179 182 183 186 188 194 197 198 199 201 203 205 208 210 212 213 214 217 218 219 # 22780 intersection c a 224 1 1 1 4 5 8 11 18 21 23 24 26 27 30 34 36 38 39 40 41 43 45 47 49 50 51 52 54 56 57 59 63 68 69 72 73 76 77 78 80 81 86 87 90 91 92 94 96 97 98 99 100 101 103 104 105 110 113 114 117 123 124 125 127 128 129 130 131 132 133 134 135 136 141 143 144 148 149 150 153 156 159 161 162 164 165 167 170 171 176 177 178 179 182 183 186 188 194 197 198 199 201 203 205 208 210 212 213 214 217 218 219 b 224 1 0 0 1 2 4 5 6 8 13 19 23 25 26 27 29 31 32 33 35 36 40 41 42 44 48 49 54 55 57 58 59 60 61 62 63 64 65 66 67 71 73 77 79 80 81 87 88 89 91 92 95 98 101 103 104 105 106 116 117 119 120 121 123 124 125 126 130 131 136 138 140 141 142 146 148 149 150 151 152 155 158 159 160 161 164 165 166 167 174 175 184 185 186 188 189 190 191 192 194 195 197 198 199 203 206 207 208 209 213 215 # 22781 intersection c a 224 1 1 e b 224 1 1 e # 22782 intersection c a 224 1 1 e b 224 1 1 e # 22783 intersection c a 224 1 1 e b 224 1 1 e # 22784 intersection c a 224 1 1 e b 224 1 1 f # 22785 intersection c a 224 1 1 e b 224 1 1 e # 22786 intersection c a 224 1 1 e b 224 1 1 0 2 4 5 8 9 10 12 13 15 16 17 18 19 20 22 24 26 29 30 33 37 42 47 50 52 53 55 59 61 62 64 66 70 71 72 73 75 78 79 80 81 82 84 88 90 91 93 99 104 105 110 111 113 117 123 125 126 127 128 130 132 134 135 136 137 138 141 144 145 146 150 151 152 153 156 159 160 161 163 165 168 173 174 178 179 180 181 182 184 186 188 189 191 192 197 201 202 203 204 208 211 213 215 217 219 220 221 222 223 # 22787 intersection c a 224 1 1 f b 224 1 1 f # 22788 intersection c a 224 1 1 f b 224 1 1 e # 22789 intersection c a 224 1 1 f b 224 1 1 f # 22790 intersection c a 224 1 1 f b 224 1 1 f # 22791 intersection c a 224 1 1 f b 224 1 1 f # 22792 intersection c a 224 1 1 f b 224 1 1 3 5 7 8 9 10 14 16 17 19 20 22 29 33 41 42 43 47 49 50 53 54 55 57 59 60 61 66 67 68 69 72 73 77 79 80 83 86 87 89 92 93 102 107 109 110 111 112 114 116 117 118 119 120 125 126 128 129 130 135 136 137 138 139 140 141 142 143 145 146 148 149 154 155 157 160 161 165 168 171 175 178 179 183 184 186 187 189 191 192 193 196 198 199 200 201 203 205 206 209 211 212 213 214 215 217 218 219 220 221 222 223 # 22793 intersection c a 224 1 1 0 1 5 8 9 12 13 14 16 19 23 24 27 31 33 35 36 37 38 39 42 45 47 48 49 50 52 54 55 58 59 60 62 63 64 66 67 68 69 72 74 80 81 83 86 87 88 89 91 92 94 95 98 102 104 105 107 108 109 111 112 113 114 115 117 118 120 122 123 125 126 127 132 134 140 141 143 146 147 150 151 152 153 154 156 159 160 161 163 169 170 173 175 177 178 181 184 188 189 191 193 195 197 199 201 203 204 206 209 210 211 217 218 222 223 b 224 1 1 0 1 5 8 9 12 13 14 16 19 23 24 27 31 33 35 36 37 38 39 42 45 47 48 49 50 52 54 55 58 59 60 62 63 64 66 67 68 69 72 74 80 81 83 86 87 88 89 91 92 94 95 98 102 104 105 107 108 109 111 112 113 114 115 117 118 120 122 123 125 126 127 132 134 140 141 143 146 147 150 151 152 153 154 156 159 160 161 163 169 170 173 175 177 178 181 184 188 189 191 193 195 197 199 201 203 204 206 209 210 211 217 218 222 223 # 22794 intersection c a 224 1 1 0 1 5 8 9 12 13 14 16 19 23 24 27 31 33 35 36 37 38 39 42 45 47 48 49 50 52 54 55 58 59 60 62 63 64 66 67 68 69 72 74 80 81 83 86 87 88 89 91 92 94 95 98 102 104 105 107 108 109 111 112 113 114 115 117 118 120 122 123 125 126 127 132 134 140 141 143 146 147 150 151 152 153 154 156 159 160 161 163 169 170 173 175 177 178 181 184 188 189 191 193 195 197 199 201 203 204 206 209 210 211 217 218 222 223 b 224 1 1 e # 22795 intersection c a 224 1 1 2 5 7 8 10 11 12 13 17 19 21 23 25 26 27 29 30 33 34 35 36 39 40 42 43 44 45 48 49 53 54 55 56 57 58 59 60 61 64 68 69 72 73 75 76 79 81 83 84 86 89 92 93 94 97 98 100 102 103 105 106 111 115 116 119 120 121 123 124 125 128 130 131 135 138 139 142 143 144 146 153 156 158 159 160 164 165 166 169 171 175 179 181 183 184 185 186 189 191 193 196 198 199 202 207 209 210 211 212 214 215 217 223 b 224 1 1 2 5 7 8 10 11 12 13 17 19 21 23 25 26 27 29 30 33 34 35 36 39 40 42 43 44 45 48 49 53 54 55 56 57 58 59 60 61 64 68 69 72 73 75 76 79 81 83 84 86 89 92 93 94 97 98 100 102 103 105 106 111 115 116 119 120 121 123 124 125 128 130 131 135 138 139 142 143 144 146 153 156 158 159 160 164 165 166 169 171 175 179 181 183 184 185 186 189 191 193 196 198 199 202 207 209 210 211 212 214 215 217 223 # 22796 intersection c a 224 1 1 2 5 7 8 10 11 12 13 17 19 21 23 25 26 27 29 30 33 34 35 36 39 40 42 43 44 45 48 49 53 54 55 56 57 58 59 60 61 64 68 69 72 73 75 76 79 81 83 84 86 89 92 93 94 97 98 100 102 103 105 106 111 115 116 119 120 121 123 124 125 128 130 131 135 138 139 142 143 144 146 153 156 158 159 160 164 165 166 169 171 175 179 181 183 184 185 186 189 191 193 196 198 199 202 207 209 210 211 212 214 215 217 223 b 224 1 1 f # 22797 intersection c a 224 1 1 1 2 3 4 5 6 8 9 10 12 20 22 24 26 28 31 32 34 35 36 37 39 40 41 43 45 49 50 52 53 54 55 56 59 60 61 62 63 64 65 66 67 68 69 70 72 78 79 88 89 90 93 97 100 102 103 104 105 109 111 113 114 115 118 119 120 121 124 125 126 128 131 132 134 135 137 139 140 141 144 148 151 153 155 160 161 162 163 164 165 166 168 170 171 176 179 180 181 183 185 186 187 188 191 192 195 196 199 203 204 205 206 207 211 213 214 215 216 217 218 219 221 b 224 1 1 1 2 3 4 5 6 8 9 10 12 20 22 24 26 28 31 32 34 35 36 37 39 40 41 43 45 49 50 52 53 54 55 56 59 60 61 62 63 64 65 66 67 68 69 70 72 78 79 88 89 90 93 97 100 102 103 104 105 109 111 113 114 115 118 119 120 121 124 125 126 128 131 132 134 135 137 139 140 141 144 148 151 153 155 160 161 162 163 164 165 166 168 170 171 176 179 180 181 183 185 186 187 188 191 192 195 196 199 203 204 205 206 207 211 213 214 215 216 217 218 219 221 # 22798 intersection c a 224 1 1 1 2 3 4 5 6 8 9 10 12 20 22 24 26 28 31 32 34 35 36 37 39 40 41 43 45 49 50 52 53 54 55 56 59 60 61 62 63 64 65 66 67 68 69 70 72 78 79 88 89 90 93 97 100 102 103 104 105 109 111 113 114 115 118 119 120 121 124 125 126 128 131 132 134 135 137 139 140 141 144 148 151 153 155 160 161 162 163 164 165 166 168 170 171 176 179 180 181 183 185 186 187 188 191 192 195 196 199 203 204 205 206 207 211 213 214 215 216 217 218 219 221 b 224 1 1 1 6 7 8 16 17 20 22 25 27 28 29 30 31 32 35 36 38 40 42 43 44 47 48 49 50 51 53 55 56 58 61 63 64 65 66 67 68 69 71 72 74 75 83 86 88 90 96 98 99 100 102 103 106 107 108 111 112 113 114 120 125 128 131 132 134 136 137 140 141 143 146 147 148 150 151 152 154 158 160 163 166 168 170 171 172 174 177 182 183 184 185 187 189 195 196 198 199 201 202 204 206 210 213 216 217 220 222 223 # 22799 intersection c a 247 0 0 e b 247 0 0 e # 22800 intersection c a 247 0 0 e b 247 0 0 e # 22801 intersection c a 247 0 0 e b 247 0 0 e # 22802 intersection c a 247 0 0 e b 247 0 0 f # 22803 intersection c a 247 0 0 e b 247 0 0 e # 22804 intersection c a 247 0 0 e b 247 0 0 0 1 2 3 5 7 12 14 15 17 19 21 24 28 31 34 36 42 44 45 48 49 52 56 57 58 59 62 64 65 66 67 68 72 74 77 78 79 80 81 85 86 88 89 91 98 100 102 106 107 109 110 112 113 114 116 117 118 120 124 125 127 132 133 134 137 138 139 141 144 145 148 150 154 159 160 165 166 167 168 169 170 177 178 179 181 183 186 187 190 192 193 194 196 199 202 203 206 207 209 210 211 215 219 220 225 226 229 230 231 233 235 239 242 243 # 22805 intersection c a 247 0 0 f b 247 0 0 f # 22806 intersection c a 247 0 0 f b 247 0 0 e # 22807 intersection c a 247 0 0 f b 247 0 0 f # 22808 intersection c a 247 0 0 f b 247 0 0 f # 22809 intersection c a 247 0 0 f b 247 0 0 f # 22810 intersection c a 247 0 0 f b 247 0 0 0 1 2 3 7 10 11 12 13 14 16 17 18 19 24 26 28 30 31 32 33 34 39 44 46 47 48 49 50 53 55 60 63 67 68 69 72 73 75 78 80 81 84 85 89 90 94 95 96 100 101 102 103 104 106 109 112 113 114 116 117 118 120 122 123 124 125 126 128 130 131 133 134 136 137 140 141 142 143 144 145 147 148 149 156 158 159 161 162 163 165 166 168 170 171 173 174 176 177 180 181 182 186 188 194 195 197 203 205 207 208 209 211 212 216 219 220 221 222 223 224 225 226 228 229 233 236 237 239 240 241 242 243 # 22811 intersection c a 247 0 0 2 10 11 13 15 17 19 20 28 32 36 37 40 42 46 47 51 53 55 56 57 58 59 62 64 69 70 73 75 76 78 80 84 85 86 87 89 90 91 93 94 98 102 103 106 108 109 112 113 114 115 117 118 119 120 121 122 125 127 131 132 133 134 135 137 139 141 147 148 150 151 153 154 155 159 160 161 164 167 168 169 170 174 175 176 178 179 180 181 184 186 188 190 191 195 196 197 198 199 201 203 206 208 209 210 211 212 214 215 216 217 218 219 221 222 223 225 226 228 229 230 232 242 244 245 246 b 247 0 0 2 10 11 13 15 17 19 20 28 32 36 37 40 42 46 47 51 53 55 56 57 58 59 62 64 69 70 73 75 76 78 80 84 85 86 87 89 90 91 93 94 98 102 103 106 108 109 112 113 114 115 117 118 119 120 121 122 125 127 131 132 133 134 135 137 139 141 147 148 150 151 153 154 155 159 160 161 164 167 168 169 170 174 175 176 178 179 180 181 184 186 188 190 191 195 196 197 198 199 201 203 206 208 209 210 211 212 214 215 216 217 218 219 221 222 223 225 226 228 229 230 232 242 244 245 246 # 22812 intersection c a 247 0 0 2 10 11 13 15 17 19 20 28 32 36 37 40 42 46 47 51 53 55 56 57 58 59 62 64 69 70 73 75 76 78 80 84 85 86 87 89 90 91 93 94 98 102 103 106 108 109 112 113 114 115 117 118 119 120 121 122 125 127 131 132 133 134 135 137 139 141 147 148 150 151 153 154 155 159 160 161 164 167 168 169 170 174 175 176 178 179 180 181 184 186 188 190 191 195 196 197 198 199 201 203 206 208 209 210 211 212 214 215 216 217 218 219 221 222 223 225 226 228 229 230 232 242 244 245 246 b 247 0 0 e # 22813 intersection c a 247 0 0 0 1 2 3 5 6 9 10 11 13 14 15 17 18 19 23 25 26 27 28 29 30 31 32 33 34 36 42 43 45 47 48 52 53 54 57 58 61 62 65 69 75 77 79 81 83 84 88 92 94 98 102 103 104 107 108 109 110 112 115 118 120 122 123 124 125 128 129 130 133 134 135 136 138 139 141 147 148 151 152 155 156 157 158 159 160 161 163 166 168 169 172 173 174 177 178 182 183 186 189 191 193 194 195 196 197 199 200 201 202 203 204 205 207 208 211 214 215 216 217 219 221 222 223 224 225 226 227 228 231 234 239 242 243 244 245 246 b 247 0 0 0 1 2 3 5 6 9 10 11 13 14 15 17 18 19 23 25 26 27 28 29 30 31 32 33 34 36 42 43 45 47 48 52 53 54 57 58 61 62 65 69 75 77 79 81 83 84 88 92 94 98 102 103 104 107 108 109 110 112 115 118 120 122 123 124 125 128 129 130 133 134 135 136 138 139 141 147 148 151 152 155 156 157 158 159 160 161 163 166 168 169 172 173 174 177 178 182 183 186 189 191 193 194 195 196 197 199 200 201 202 203 204 205 207 208 211 214 215 216 217 219 221 222 223 224 225 226 227 228 231 234 239 242 243 244 245 246 # 22814 intersection c a 247 0 0 0 1 2 3 5 6 9 10 11 13 14 15 17 18 19 23 25 26 27 28 29 30 31 32 33 34 36 42 43 45 47 48 52 53 54 57 58 61 62 65 69 75 77 79 81 83 84 88 92 94 98 102 103 104 107 108 109 110 112 115 118 120 122 123 124 125 128 129 130 133 134 135 136 138 139 141 147 148 151 152 155 156 157 158 159 160 161 163 166 168 169 172 173 174 177 178 182 183 186 189 191 193 194 195 196 197 199 200 201 202 203 204 205 207 208 211 214 215 216 217 219 221 222 223 224 225 226 227 228 231 234 239 242 243 244 245 246 b 247 0 0 f # 22815 intersection c a 247 0 0 1 11 13 17 21 22 28 32 33 34 40 41 45 46 47 48 53 57 58 60 61 62 63 64 65 67 69 73 74 75 76 77 78 79 81 84 85 86 89 92 96 97 101 103 104 106 107 108 109 110 112 114 115 116 117 118 122 124 126 127 130 131 134 136 137 139 142 145 146 149 150 151 153 157 158 159 161 166 168 169 170 173 174 175 176 177 180 187 191 193 195 197 200 202 206 207 211 215 216 217 221 223 224 226 229 234 236 237 239 240 241 242 b 247 0 0 1 11 13 17 21 22 28 32 33 34 40 41 45 46 47 48 53 57 58 60 61 62 63 64 65 67 69 73 74 75 76 77 78 79 81 84 85 86 89 92 96 97 101 103 104 106 107 108 109 110 112 114 115 116 117 118 122 124 126 127 130 131 134 136 137 139 142 145 146 149 150 151 153 157 158 159 161 166 168 169 170 173 174 175 176 177 180 187 191 193 195 197 200 202 206 207 211 215 216 217 221 223 224 226 229 234 236 237 239 240 241 242 # 22816 intersection c a 247 0 0 1 11 13 17 21 22 28 32 33 34 40 41 45 46 47 48 53 57 58 60 61 62 63 64 65 67 69 73 74 75 76 77 78 79 81 84 85 86 89 92 96 97 101 103 104 106 107 108 109 110 112 114 115 116 117 118 122 124 126 127 130 131 134 136 137 139 142 145 146 149 150 151 153 157 158 159 161 166 168 169 170 173 174 175 176 177 180 187 191 193 195 197 200 202 206 207 211 215 216 217 221 223 224 226 229 234 236 237 239 240 241 242 b 247 0 0 1 2 3 5 6 7 8 10 11 12 13 16 17 21 22 24 25 28 29 30 32 34 35 37 38 39 41 42 46 50 51 53 56 57 58 59 62 64 65 68 72 74 76 77 78 79 81 82 84 85 86 87 88 92 95 97 100 102 103 104 105 108 114 119 120 121 123 125 126 127 132 137 138 143 144 147 148 149 150 151 154 155 156 157 160 161 162 163 164 171 172 173 174 179 182 183 184 187 189 192 194 195 196 198 206 207 208 210 211 212 214 216 223 224 226 228 229 230 233 235 239 242 244 245 246 # 22817 intersection c a 247 0 0 e b 247 0 0 e # 22818 intersection c a 247 0 0 e b 247 0 1 e # 22819 intersection c a 247 0 0 e b 247 0 0 e # 22820 intersection c a 247 0 0 e b 247 0 1 f # 22821 intersection c a 247 0 0 e b 247 0 0 e # 22822 intersection c a 247 0 0 e b 247 0 1 0 1 2 3 9 10 11 12 13 15 16 19 20 21 23 26 31 34 35 36 38 39 41 42 44 47 48 49 53 55 57 63 64 66 68 69 72 74 77 80 81 82 85 86 87 88 92 93 98 100 102 103 104 115 120 121 122 126 127 129 130 133 139 140 141 142 146 148 150 151 155 156 162 163 165 166 174 175 176 177 179 181 185 188 189 194 197 198 199 203 205 206 208 209 210 211 212 217 218 223 227 231 233 234 235 236 237 240 243 244 245 # 22823 intersection c a 247 0 0 f b 247 0 0 f # 22824 intersection c a 247 0 0 f b 247 0 1 e # 22825 intersection c a 247 0 0 f b 247 0 0 f # 22826 intersection c a 247 0 0 f b 247 0 1 f # 22827 intersection c a 247 0 0 f b 247 0 0 f # 22828 intersection c a 247 0 0 f b 247 0 1 0 1 2 6 7 8 12 14 15 16 17 18 19 23 27 41 42 45 46 49 51 54 56 60 61 64 65 66 70 71 72 74 77 79 80 81 82 83 85 89 92 93 95 96 101 102 105 106 107 108 111 112 114 116 121 123 124 125 126 127 129 131 132 137 141 142 144 145 147 148 149 152 153 155 156 157 158 159 160 162 163 165 167 168 169 170 173 176 177 179 180 181 182 183 186 189 193 195 196 197 199 203 205 208 209 210 211 212 213 214 217 220 221 222 223 224 225 226 227 228 230 232 233 236 237 240 245 246 # 22829 intersection c a 247 0 0 0 1 5 6 8 9 12 15 20 21 22 24 26 28 29 30 31 34 35 37 39 40 41 43 45 46 48 49 50 51 52 53 55 58 60 61 69 72 73 74 75 76 77 79 80 82 83 87 93 94 95 96 101 104 109 111 113 114 115 118 119 120 124 126 127 128 132 133 135 137 143 147 153 156 159 160 161 162 163 167 169 171 173 175 176 177 181 182 183 184 187 188 189 195 196 197 198 201 202 203 204 207 209 211 212 213 215 217 219 221 223 225 226 229 230 231 232 233 234 239 245 246 b 247 0 0 0 1 5 6 8 9 12 15 20 21 22 24 26 28 29 30 31 34 35 37 39 40 41 43 45 46 48 49 50 51 52 53 55 58 60 61 69 72 73 74 75 76 77 79 80 82 83 87 93 94 95 96 101 104 109 111 113 114 115 118 119 120 124 126 127 128 132 133 135 137 143 147 153 156 159 160 161 162 163 167 169 171 173 175 176 177 181 182 183 184 187 188 189 195 196 197 198 201 202 203 204 207 209 211 212 213 215 217 219 221 223 225 226 229 230 231 232 233 234 239 245 246 # 22830 intersection c a 247 0 0 0 1 5 6 8 9 12 15 20 21 22 24 26 28 29 30 31 34 35 37 39 40 41 43 45 46 48 49 50 51 52 53 55 58 60 61 69 72 73 74 75 76 77 79 80 82 83 87 93 94 95 96 101 104 109 111 113 114 115 118 119 120 124 126 127 128 132 133 135 137 143 147 153 156 159 160 161 162 163 167 169 171 173 175 176 177 181 182 183 184 187 188 189 195 196 197 198 201 202 203 204 207 209 211 212 213 215 217 219 221 223 225 226 229 230 231 232 233 234 239 245 246 b 247 0 1 e # 22831 intersection c a 247 0 0 0 1 3 8 9 13 16 17 23 24 25 27 30 34 36 38 39 41 43 44 45 47 48 50 51 52 54 55 58 59 60 61 66 71 73 77 84 86 88 89 91 94 95 96 97 98 102 103 104 110 112 113 114 117 118 119 121 122 123 125 126 129 131 132 135 136 137 142 143 151 154 155 156 158 164 165 167 169 171 172 173 174 178 179 183 188 190 191 192 195 196 198 205 207 211 213 215 217 219 222 224 227 228 231 232 235 237 238 239 240 245 b 247 0 0 0 1 3 8 9 13 16 17 23 24 25 27 30 34 36 38 39 41 43 44 45 47 48 50 51 52 54 55 58 59 60 61 66 71 73 77 84 86 88 89 91 94 95 96 97 98 102 103 104 110 112 113 114 117 118 119 121 122 123 125 126 129 131 132 135 136 137 142 143 151 154 155 156 158 164 165 167 169 171 172 173 174 178 179 183 188 190 191 192 195 196 198 205 207 211 213 215 217 219 222 224 227 228 231 232 235 237 238 239 240 245 # 22832 intersection c a 247 0 0 0 1 3 8 9 13 16 17 23 24 25 27 30 34 36 38 39 41 43 44 45 47 48 50 51 52 54 55 58 59 60 61 66 71 73 77 84 86 88 89 91 94 95 96 97 98 102 103 104 110 112 113 114 117 118 119 121 122 123 125 126 129 131 132 135 136 137 142 143 151 154 155 156 158 164 165 167 169 171 172 173 174 178 179 183 188 190 191 192 195 196 198 205 207 211 213 215 217 219 222 224 227 228 231 232 235 237 238 239 240 245 b 247 0 1 f # 22833 intersection c a 247 0 0 1 2 7 9 11 13 16 17 18 19 23 25 27 28 34 35 36 38 43 49 50 55 57 58 62 63 64 65 66 67 69 75 76 82 83 84 86 87 89 91 93 94 96 97 99 100 101 105 111 112 114 117 119 120 121 124 126 128 131 132 133 134 136 139 140 141 142 146 147 151 153 155 157 161 162 164 165 167 169 170 171 172 176 178 180 187 189 190 191 192 193 194 195 196 204 205 206 207 209 210 215 216 217 222 225 226 230 231 232 233 236 239 240 245 246 b 247 0 0 1 2 7 9 11 13 16 17 18 19 23 25 27 28 34 35 36 38 43 49 50 55 57 58 62 63 64 65 66 67 69 75 76 82 83 84 86 87 89 91 93 94 96 97 99 100 101 105 111 112 114 117 119 120 121 124 126 128 131 132 133 134 136 139 140 141 142 146 147 151 153 155 157 161 162 164 165 167 169 170 171 172 176 178 180 187 189 190 191 192 193 194 195 196 204 205 206 207 209 210 215 216 217 222 225 226 230 231 232 233 236 239 240 245 246 # 22834 intersection c a 247 0 0 1 2 7 9 11 13 16 17 18 19 23 25 27 28 34 35 36 38 43 49 50 55 57 58 62 63 64 65 66 67 69 75 76 82 83 84 86 87 89 91 93 94 96 97 99 100 101 105 111 112 114 117 119 120 121 124 126 128 131 132 133 134 136 139 140 141 142 146 147 151 153 155 157 161 162 164 165 167 169 170 171 172 176 178 180 187 189 190 191 192 193 194 195 196 204 205 206 207 209 210 215 216 217 222 225 226 230 231 232 233 236 239 240 245 246 b 247 0 1 4 5 11 12 13 14 15 17 19 21 24 26 27 28 30 32 34 35 39 40 42 43 45 46 47 50 51 52 53 55 58 60 61 62 63 66 67 68 69 70 73 75 77 79 82 86 87 88 89 93 95 97 100 102 104 105 108 109 112 116 118 119 123 127 129 130 133 134 136 138 139 140 142 143 144 147 148 153 154 155 159 163 166 167 169 170 172 173 175 177 180 181 184 187 188 189 190 193 199 200 203 204 205 206 213 214 215 218 220 221 222 224 226 227 230 233 236 238 242 243 245 246 # 22835 intersection c a 247 0 0 e b 247 0 0 e # 22836 intersection c a 247 0 0 e b 247 1 0 e # 22837 intersection c a 247 0 0 e b 247 0 0 e # 22838 intersection c a 247 0 0 e b 247 1 0 f # 22839 intersection c a 247 0 0 e b 247 0 0 e # 22840 intersection c a 247 0 0 e b 247 1 0 0 1 2 4 10 12 14 16 17 18 20 22 23 24 26 33 37 38 39 41 42 44 45 46 47 48 49 50 51 52 53 54 55 59 60 62 66 67 69 70 73 74 76 79 86 88 91 92 96 99 100 101 104 106 108 111 113 115 116 119 124 125 128 129 131 132 133 138 139 140 142 144 146 147 150 151 152 156 157 158 159 162 166 167 168 169 170 171 172 173 174 175 176 177 178 181 183 184 185 187 190 191 192 193 197 200 201 203 204 206 207 209 213 217 219 222 226 227 231 233 234 235 236 238 241 242 243 244 # 22841 intersection c a 247 0 0 f b 247 0 0 f # 22842 intersection c a 247 0 0 f b 247 1 0 e # 22843 intersection c a 247 0 0 f b 247 0 0 f # 22844 intersection c a 247 0 0 f b 247 1 0 f # 22845 intersection c a 247 0 0 f b 247 0 0 f # 22846 intersection c a 247 0 0 f b 247 1 0 2 4 8 11 12 15 16 17 19 20 21 26 27 33 34 37 39 41 42 45 46 47 48 50 51 55 56 58 59 61 63 64 69 71 73 74 75 76 77 78 79 82 83 84 86 91 93 94 98 100 101 104 107 109 110 111 113 114 118 119 120 122 125 126 128 129 130 131 132 135 137 138 139 140 141 144 147 148 150 151 155 160 163 165 167 170 172 175 177 178 182 183 184 189 192 193 197 199 200 203 205 206 207 208 211 212 214 215 219 220 221 223 225 227 229 230 235 236 238 239 240 241 242 243 246 # 22847 intersection c a 247 0 0 0 1 2 3 4 5 7 9 15 21 22 25 26 30 31 33 34 35 36 37 38 39 40 41 47 48 49 50 52 53 54 56 57 65 68 71 76 77 79 80 83 86 88 92 93 94 96 98 99 101 102 103 112 113 114 115 117 121 126 129 130 131 132 133 134 136 137 138 150 151 155 158 159 161 162 163 164 165 167 168 169 170 176 177 178 181 184 185 191 194 195 197 198 199 200 201 205 206 209 210 211 218 219 220 223 224 226 229 235 238 239 240 241 244 245 246 b 247 0 0 0 1 2 3 4 5 7 9 15 21 22 25 26 30 31 33 34 35 36 37 38 39 40 41 47 48 49 50 52 53 54 56 57 65 68 71 76 77 79 80 83 86 88 92 93 94 96 98 99 101 102 103 112 113 114 115 117 121 126 129 130 131 132 133 134 136 137 138 150 151 155 158 159 161 162 163 164 165 167 168 169 170 176 177 178 181 184 185 191 194 195 197 198 199 200 201 205 206 209 210 211 218 219 220 223 224 226 229 235 238 239 240 241 244 245 246 # 22848 intersection c a 247 0 0 0 1 2 3 4 5 7 9 15 21 22 25 26 30 31 33 34 35 36 37 38 39 40 41 47 48 49 50 52 53 54 56 57 65 68 71 76 77 79 80 83 86 88 92 93 94 96 98 99 101 102 103 112 113 114 115 117 121 126 129 130 131 132 133 134 136 137 138 150 151 155 158 159 161 162 163 164 165 167 168 169 170 176 177 178 181 184 185 191 194 195 197 198 199 200 201 205 206 209 210 211 218 219 220 223 224 226 229 235 238 239 240 241 244 245 246 b 247 1 0 e # 22849 intersection c a 247 0 0 2 3 4 7 9 10 11 12 13 14 18 19 20 21 22 24 25 26 28 29 31 32 34 35 36 38 41 44 47 48 50 53 54 56 57 58 60 63 64 66 67 68 69 72 76 77 82 85 86 88 90 91 92 96 99 100 102 103 104 107 109 111 115 117 118 121 122 124 126 127 128 129 131 136 137 143 144 147 151 156 157 158 160 164 165 166 167 171 172 173 174 179 180 181 182 183 184 185 187 188 191 192 195 198 199 200 202 204 206 208 210 213 216 217 218 219 220 222 223 224 227 228 230 234 236 237 238 239 241 243 245 246 b 247 0 0 2 3 4 7 9 10 11 12 13 14 18 19 20 21 22 24 25 26 28 29 31 32 34 35 36 38 41 44 47 48 50 53 54 56 57 58 60 63 64 66 67 68 69 72 76 77 82 85 86 88 90 91 92 96 99 100 102 103 104 107 109 111 115 117 118 121 122 124 126 127 128 129 131 136 137 143 144 147 151 156 157 158 160 164 165 166 167 171 172 173 174 179 180 181 182 183 184 185 187 188 191 192 195 198 199 200 202 204 206 208 210 213 216 217 218 219 220 222 223 224 227 228 230 234 236 237 238 239 241 243 245 246 # 22850 intersection c a 247 0 0 2 3 4 7 9 10 11 12 13 14 18 19 20 21 22 24 25 26 28 29 31 32 34 35 36 38 41 44 47 48 50 53 54 56 57 58 60 63 64 66 67 68 69 72 76 77 82 85 86 88 90 91 92 96 99 100 102 103 104 107 109 111 115 117 118 121 122 124 126 127 128 129 131 136 137 143 144 147 151 156 157 158 160 164 165 166 167 171 172 173 174 179 180 181 182 183 184 185 187 188 191 192 195 198 199 200 202 204 206 208 210 213 216 217 218 219 220 222 223 224 227 228 230 234 236 237 238 239 241 243 245 246 b 247 1 0 f # 22851 intersection c a 247 0 0 2 3 6 8 9 10 11 12 13 14 19 22 23 24 28 29 35 36 37 39 40 41 42 43 44 46 48 51 54 56 58 59 62 63 64 66 69 72 73 74 75 77 81 83 86 87 89 90 91 92 93 95 96 107 109 111 112 115 116 118 121 122 126 128 130 131 132 136 142 143 144 146 147 148 149 150 152 153 158 160 164 166 168 169 170 173 183 185 187 189 190 194 196 198 199 202 203 209 210 211 212 214 217 218 219 220 221 222 225 226 227 230 231 232 233 234 236 238 240 243 244 245 b 247 0 0 2 3 6 8 9 10 11 12 13 14 19 22 23 24 28 29 35 36 37 39 40 41 42 43 44 46 48 51 54 56 58 59 62 63 64 66 69 72 73 74 75 77 81 83 86 87 89 90 91 92 93 95 96 107 109 111 112 115 116 118 121 122 126 128 130 131 132 136 142 143 144 146 147 148 149 150 152 153 158 160 164 166 168 169 170 173 183 185 187 189 190 194 196 198 199 202 203 209 210 211 212 214 217 218 219 220 221 222 225 226 227 230 231 232 233 234 236 238 240 243 244 245 # 22852 intersection c a 247 0 0 2 3 6 8 9 10 11 12 13 14 19 22 23 24 28 29 35 36 37 39 40 41 42 43 44 46 48 51 54 56 58 59 62 63 64 66 69 72 73 74 75 77 81 83 86 87 89 90 91 92 93 95 96 107 109 111 112 115 116 118 121 122 126 128 130 131 132 136 142 143 144 146 147 148 149 150 152 153 158 160 164 166 168 169 170 173 183 185 187 189 190 194 196 198 199 202 203 209 210 211 212 214 217 218 219 220 221 222 225 226 227 230 231 232 233 234 236 238 240 243 244 245 b 247 1 0 0 1 3 4 6 12 13 16 17 19 20 22 26 28 29 30 31 32 33 34 35 39 40 43 47 50 52 53 54 56 57 58 59 61 62 64 65 66 67 70 72 73 74 75 78 79 80 81 83 84 87 90 91 92 93 94 95 97 98 99 102 103 105 106 107 109 110 111 112 114 115 116 117 122 124 125 126 128 129 135 138 141 146 152 154 155 157 162 163 164 165 167 172 173 174 177 181 182 183 185 186 187 189 191 194 201 202 204 205 206 207 211 214 215 218 219 222 223 227 228 234 235 236 238 240 243 244 245 246 # 22853 intersection c a 247 0 0 e b 247 0 0 e # 22854 intersection c a 247 0 0 e b 247 1 1 e # 22855 intersection c a 247 0 0 e b 247 0 0 e # 22856 intersection c a 247 0 0 e b 247 1 1 f # 22857 intersection c a 247 0 0 e b 247 0 0 e # 22858 intersection c a 247 0 0 e b 247 1 1 3 4 5 6 7 11 12 13 16 18 19 22 23 30 31 32 34 35 38 40 41 43 44 45 46 47 49 50 51 53 54 55 57 58 59 61 63 66 67 68 73 78 79 81 83 87 93 95 98 99 100 101 104 105 108 110 114 115 116 119 120 121 124 125 131 133 135 137 142 144 145 149 152 153 154 155 156 158 163 164 166 169 170 173 174 175 179 180 181 182 183 184 185 187 188 192 195 196 197 200 202 204 205 208 209 211 212 214 215 216 218 219 220 221 225 228 230 231 232 234 235 240 243 244 245 # 22859 intersection c a 247 0 0 f b 247 0 0 f # 22860 intersection c a 247 0 0 f b 247 1 1 e # 22861 intersection c a 247 0 0 f b 247 0 0 f # 22862 intersection c a 247 0 0 f b 247 1 1 f # 22863 intersection c a 247 0 0 f b 247 0 0 f # 22864 intersection c a 247 0 0 f b 247 1 1 0 3 4 8 9 10 12 14 16 19 20 21 22 23 24 30 31 34 37 38 40 41 43 44 47 48 49 50 51 53 54 57 58 61 63 64 70 72 74 75 76 78 79 80 81 86 87 93 96 98 100 103 104 106 108 109 111 113 115 116 117 118 121 122 123 124 125 126 127 129 130 134 135 136 137 139 141 143 145 146 148 149 150 152 154 157 159 160 163 164 166 167 168 173 175 176 181 182 183 185 187 188 189 190 192 195 200 201 202 204 206 207 208 213 215 216 217 218 221 222 224 228 229 230 231 232 233 235 241 242 243 244 245 # 22865 intersection c a 247 0 0 1 3 5 6 7 8 10 13 18 20 21 22 30 31 32 33 34 36 37 38 39 41 43 44 45 49 52 54 56 58 59 62 66 69 72 73 76 78 82 85 86 89 91 93 95 97 99 100 101 104 106 107 108 109 112 114 117 118 120 121 123 124 126 129 132 134 136 137 139 144 146 147 149 152 153 155 157 159 160 162 163 164 165 167 170 171 172 175 176 178 182 183 184 185 186 188 189 190 191 193 194 196 197 204 205 207 209 223 225 228 229 233 234 239 241 244 245 246 b 247 0 0 1 3 5 6 7 8 10 13 18 20 21 22 30 31 32 33 34 36 37 38 39 41 43 44 45 49 52 54 56 58 59 62 66 69 72 73 76 78 82 85 86 89 91 93 95 97 99 100 101 104 106 107 108 109 112 114 117 118 120 121 123 124 126 129 132 134 136 137 139 144 146 147 149 152 153 155 157 159 160 162 163 164 165 167 170 171 172 175 176 178 182 183 184 185 186 188 189 190 191 193 194 196 197 204 205 207 209 223 225 228 229 233 234 239 241 244 245 246 # 22866 intersection c a 247 0 0 1 3 5 6 7 8 10 13 18 20 21 22 30 31 32 33 34 36 37 38 39 41 43 44 45 49 52 54 56 58 59 62 66 69 72 73 76 78 82 85 86 89 91 93 95 97 99 100 101 104 106 107 108 109 112 114 117 118 120 121 123 124 126 129 132 134 136 137 139 144 146 147 149 152 153 155 157 159 160 162 163 164 165 167 170 171 172 175 176 178 182 183 184 185 186 188 189 190 191 193 194 196 197 204 205 207 209 223 225 228 229 233 234 239 241 244 245 246 b 247 1 1 e # 22867 intersection c a 247 0 0 1 5 6 7 9 12 13 14 17 22 23 24 29 30 31 32 36 37 40 42 45 46 47 49 51 53 54 57 59 60 62 63 64 65 67 68 70 71 72 73 77 79 80 82 86 87 90 92 93 96 97 99 104 105 106 108 109 111 115 116 117 118 121 122 123 124 128 129 132 133 135 141 142 143 146 147 149 152 153 157 158 160 163 164 165 166 170 173 176 177 180 181 182 184 186 187 189 191 193 194 196 198 199 200 203 205 208 209 212 214 217 219 220 221 222 228 231 232 233 234 235 241 242 243 244 245 b 247 0 0 1 5 6 7 9 12 13 14 17 22 23 24 29 30 31 32 36 37 40 42 45 46 47 49 51 53 54 57 59 60 62 63 64 65 67 68 70 71 72 73 77 79 80 82 86 87 90 92 93 96 97 99 104 105 106 108 109 111 115 116 117 118 121 122 123 124 128 129 132 133 135 141 142 143 146 147 149 152 153 157 158 160 163 164 165 166 170 173 176 177 180 181 182 184 186 187 189 191 193 194 196 198 199 200 203 205 208 209 212 214 217 219 220 221 222 228 231 232 233 234 235 241 242 243 244 245 # 22868 intersection c a 247 0 0 1 5 6 7 9 12 13 14 17 22 23 24 29 30 31 32 36 37 40 42 45 46 47 49 51 53 54 57 59 60 62 63 64 65 67 68 70 71 72 73 77 79 80 82 86 87 90 92 93 96 97 99 104 105 106 108 109 111 115 116 117 118 121 122 123 124 128 129 132 133 135 141 142 143 146 147 149 152 153 157 158 160 163 164 165 166 170 173 176 177 180 181 182 184 186 187 189 191 193 194 196 198 199 200 203 205 208 209 212 214 217 219 220 221 222 228 231 232 233 234 235 241 242 243 244 245 b 247 1 1 f # 22869 intersection c a 247 0 0 1 2 4 5 6 7 13 14 18 20 22 26 29 30 31 33 36 39 40 41 47 48 51 52 54 56 57 58 60 61 64 68 69 73 74 75 78 79 80 82 84 85 86 88 90 93 94 95 100 101 102 104 108 112 113 114 115 116 117 121 122 124 125 128 129 130 131 132 135 136 137 139 148 150 153 154 158 161 165 168 170 172 174 178 180 182 186 187 188 189 191 193 195 196 198 199 200 201 203 207 212 213 215 218 220 221 224 228 231 234 236 240 245 b 247 0 0 1 2 4 5 6 7 13 14 18 20 22 26 29 30 31 33 36 39 40 41 47 48 51 52 54 56 57 58 60 61 64 68 69 73 74 75 78 79 80 82 84 85 86 88 90 93 94 95 100 101 102 104 108 112 113 114 115 116 117 121 122 124 125 128 129 130 131 132 135 136 137 139 148 150 153 154 158 161 165 168 170 172 174 178 180 182 186 187 188 189 191 193 195 196 198 199 200 201 203 207 212 213 215 218 220 221 224 228 231 234 236 240 245 # 22870 intersection c a 247 0 0 1 2 4 5 6 7 13 14 18 20 22 26 29 30 31 33 36 39 40 41 47 48 51 52 54 56 57 58 60 61 64 68 69 73 74 75 78 79 80 82 84 85 86 88 90 93 94 95 100 101 102 104 108 112 113 114 115 116 117 121 122 124 125 128 129 130 131 132 135 136 137 139 148 150 153 154 158 161 165 168 170 172 174 178 180 182 186 187 188 189 191 193 195 196 198 199 200 201 203 207 212 213 215 218 220 221 224 228 231 234 236 240 245 b 247 1 1 0 7 8 9 10 12 14 15 18 19 20 25 26 27 29 32 36 37 38 39 40 41 43 45 46 47 49 50 53 55 56 59 60 61 63 65 67 68 70 71 73 74 76 77 80 81 84 85 86 87 90 93 96 100 103 105 108 109 112 113 114 115 116 117 125 126 127 131 132 133 134 135 136 141 142 143 144 145 146 147 150 151 155 158 160 164 167 168 169 176 177 178 181 183 187 188 193 194 203 204 205 206 207 208 209 211 212 214 216 219 223 228 229 230 231 234 235 236 237 238 239 240 241 242 243 # 22871 intersection c a 247 0 1 e b 247 0 1 e # 22872 intersection c a 247 0 1 e b 247 0 0 e # 22873 intersection c a 247 0 1 e b 247 0 1 e # 22874 intersection c a 247 0 1 e b 247 0 0 f # 22875 intersection c a 247 0 1 e b 247 0 1 e # 22876 intersection c a 247 0 1 e b 247 0 0 1 5 9 10 11 16 17 19 20 21 24 28 29 30 34 35 38 40 41 45 46 47 50 54 55 56 57 59 60 65 66 67 69 72 74 75 77 78 79 80 81 82 84 85 87 88 89 92 93 94 96 97 99 100 104 105 108 110 111 113 114 116 118 120 122 123 125 127 129 130 134 139 140 142 143 145 148 150 151 152 153 154 155 158 159 161 165 166 171 172 174 176 179 182 184 185 191 193 196 197 198 199 202 203 204 205 207 209 210 211 212 213 214 215 216 221 222 223 224 232 237 239 241 244 # 22877 intersection c a 247 0 1 f b 247 0 1 f # 22878 intersection c a 247 0 1 f b 247 0 0 e # 22879 intersection c a 247 0 1 f b 247 0 1 f # 22880 intersection c a 247 0 1 f b 247 0 0 f # 22881 intersection c a 247 0 1 f b 247 0 1 f # 22882 intersection c a 247 0 1 f b 247 0 0 1 2 3 5 6 7 8 9 14 15 19 20 21 22 25 26 27 28 34 37 40 41 43 46 49 52 54 57 59 61 66 67 68 71 73 74 76 78 82 86 87 90 93 94 95 97 98 102 103 104 105 107 111 115 116 118 119 120 127 130 131 133 134 136 137 139 141 142 143 145 146 147 150 151 152 156 160 166 167 170 173 176 177 179 182 184 186 187 188 193 194 195 198 200 201 202 203 209 211 221 222 223 224 226 228 230 231 233 234 235 236 238 242 243 # 22883 intersection c a 247 0 1 0 2 4 5 6 7 8 10 11 14 18 23 26 28 29 31 36 39 40 42 47 48 52 56 57 59 60 61 62 66 70 72 73 77 82 84 85 87 88 89 90 91 92 93 99 100 102 103 106 110 111 112 115 117 118 120 121 123 124 125 126 127 130 132 133 138 139 142 144 145 146 148 149 150 159 160 161 163 164 165 166 167 168 169 170 174 177 178 181 182 183 185 187 190 191 194 196 197 199 201 203 206 207 208 209 213 215 216 217 223 225 226 228 233 234 235 237 238 240 241 242 244 246 b 247 0 1 0 2 4 5 6 7 8 10 11 14 18 23 26 28 29 31 36 39 40 42 47 48 52 56 57 59 60 61 62 66 70 72 73 77 82 84 85 87 88 89 90 91 92 93 99 100 102 103 106 110 111 112 115 117 118 120 121 123 124 125 126 127 130 132 133 138 139 142 144 145 146 148 149 150 159 160 161 163 164 165 166 167 168 169 170 174 177 178 181 182 183 185 187 190 191 194 196 197 199 201 203 206 207 208 209 213 215 216 217 223 225 226 228 233 234 235 237 238 240 241 242 244 246 # 22884 intersection c a 247 0 1 0 2 4 5 6 7 8 10 11 14 18 23 26 28 29 31 36 39 40 42 47 48 52 56 57 59 60 61 62 66 70 72 73 77 82 84 85 87 88 89 90 91 92 93 99 100 102 103 106 110 111 112 115 117 118 120 121 123 124 125 126 127 130 132 133 138 139 142 144 145 146 148 149 150 159 160 161 163 164 165 166 167 168 169 170 174 177 178 181 182 183 185 187 190 191 194 196 197 199 201 203 206 207 208 209 213 215 216 217 223 225 226 228 233 234 235 237 238 240 241 242 244 246 b 247 0 0 e # 22885 intersection c a 247 0 1 0 1 5 7 10 11 22 23 25 28 29 31 32 33 35 36 37 38 39 41 42 45 46 47 50 51 52 53 56 57 58 59 60 62 67 68 70 73 74 75 76 77 79 82 91 95 96 97 98 99 101 102 103 105 106 111 112 113 114 118 120 124 125 126 128 129 135 136 147 148 153 154 156 157 158 159 161 163 165 166 168 170 172 173 174 178 179 183 184 187 188 189 192 193 200 202 205 206 208 209 212 213 215 217 218 220 222 223 224 226 228 230 232 233 234 235 236 237 239 241 244 245 b 247 0 1 0 1 5 7 10 11 22 23 25 28 29 31 32 33 35 36 37 38 39 41 42 45 46 47 50 51 52 53 56 57 58 59 60 62 67 68 70 73 74 75 76 77 79 82 91 95 96 97 98 99 101 102 103 105 106 111 112 113 114 118 120 124 125 126 128 129 135 136 147 148 153 154 156 157 158 159 161 163 165 166 168 170 172 173 174 178 179 183 184 187 188 189 192 193 200 202 205 206 208 209 212 213 215 217 218 220 222 223 224 226 228 230 232 233 234 235 236 237 239 241 244 245 # 22886 intersection c a 247 0 1 0 1 5 7 10 11 22 23 25 28 29 31 32 33 35 36 37 38 39 41 42 45 46 47 50 51 52 53 56 57 58 59 60 62 67 68 70 73 74 75 76 77 79 82 91 95 96 97 98 99 101 102 103 105 106 111 112 113 114 118 120 124 125 126 128 129 135 136 147 148 153 154 156 157 158 159 161 163 165 166 168 170 172 173 174 178 179 183 184 187 188 189 192 193 200 202 205 206 208 209 212 213 215 217 218 220 222 223 224 226 228 230 232 233 234 235 236 237 239 241 244 245 b 247 0 0 f # 22887 intersection c a 247 0 1 7 10 11 14 15 17 18 20 22 24 25 26 28 30 31 32 36 37 44 47 49 51 53 56 58 60 61 63 65 66 67 68 71 76 77 79 80 82 86 88 89 90 92 95 98 99 102 103 104 111 112 116 117 118 119 120 124 127 128 130 132 133 138 139 140 142 143 144 145 147 148 150 151 152 153 157 163 165 167 170 172 175 177 178 180 181 183 184 189 193 195 196 197 198 199 204 210 214 215 216 219 220 221 224 225 226 228 229 233 234 238 240 241 242 244 245 b 247 0 1 7 10 11 14 15 17 18 20 22 24 25 26 28 30 31 32 36 37 44 47 49 51 53 56 58 60 61 63 65 66 67 68 71 76 77 79 80 82 86 88 89 90 92 95 98 99 102 103 104 111 112 116 117 118 119 120 124 127 128 130 132 133 138 139 140 142 143 144 145 147 148 150 151 152 153 157 163 165 167 170 172 175 177 178 180 181 183 184 189 193 195 196 197 198 199 204 210 214 215 216 219 220 221 224 225 226 228 229 233 234 238 240 241 242 244 245 # 22888 intersection c a 247 0 1 7 10 11 14 15 17 18 20 22 24 25 26 28 30 31 32 36 37 44 47 49 51 53 56 58 60 61 63 65 66 67 68 71 76 77 79 80 82 86 88 89 90 92 95 98 99 102 103 104 111 112 116 117 118 119 120 124 127 128 130 132 133 138 139 140 142 143 144 145 147 148 150 151 152 153 157 163 165 167 170 172 175 177 178 180 181 183 184 189 193 195 196 197 198 199 204 210 214 215 216 219 220 221 224 225 226 228 229 233 234 238 240 241 242 244 245 b 247 0 0 0 1 3 4 8 13 14 15 17 18 20 25 28 29 30 31 32 35 37 40 42 45 46 47 48 49 51 52 58 64 65 69 70 73 74 75 76 77 81 86 87 88 92 94 95 98 99 101 105 108 109 110 113 114 115 120 121 122 123 125 126 129 131 135 141 143 144 148 149 150 151 152 153 154 155 156 161 163 166 167 168 169 170 172 174 175 176 185 189 190 191 195 196 199 202 204 205 207 209 211 215 219 222 223 229 230 231 233 234 236 240 244 245 246 # 22889 intersection c a 247 0 1 e b 247 0 1 e # 22890 intersection c a 247 0 1 e b 247 0 1 e # 22891 intersection c a 247 0 1 e b 247 0 1 e # 22892 intersection c a 247 0 1 e b 247 0 1 f # 22893 intersection c a 247 0 1 e b 247 0 1 e # 22894 intersection c a 247 0 1 e b 247 0 1 8 10 12 13 15 18 19 21 22 23 24 29 31 35 36 37 38 39 41 46 47 48 49 51 52 54 55 56 57 58 60 64 65 66 67 68 69 70 71 72 73 78 80 83 84 85 87 88 91 92 93 96 99 101 102 103 104 105 110 112 113 114 115 116 118 119 120 122 123 130 131 133 134 136 137 138 139 141 143 144 146 147 148 150 151 152 153 155 156 157 163 164 165 167 168 170 172 173 175 177 179 182 184 187 188 192 193 194 195 196 199 202 209 211 212 214 215 218 220 222 225 227 228 229 230 232 233 234 236 238 240 242 243 245 246 # 22895 intersection c a 247 0 1 f b 247 0 1 f # 22896 intersection c a 247 0 1 f b 247 0 1 e # 22897 intersection c a 247 0 1 f b 247 0 1 f # 22898 intersection c a 247 0 1 f b 247 0 1 f # 22899 intersection c a 247 0 1 f b 247 0 1 f # 22900 intersection c a 247 0 1 f b 247 0 1 0 2 4 8 9 10 11 12 19 21 24 25 27 30 32 33 34 35 37 39 40 41 42 43 47 49 50 51 52 56 57 61 63 64 66 67 69 70 72 73 76 77 80 86 90 95 98 99 101 102 104 106 107 108 111 115 116 122 123 126 127 129 130 131 132 133 134 136 137 139 140 142 144 145 147 149 151 153 155 158 159 160 163 172 173 174 175 176 178 182 188 189 191 193 195 197 198 202 208 211 215 216 217 219 220 225 226 228 229 230 231 233 238 239 240 242 244 246 # 22901 intersection c a 247 0 1 0 4 5 6 8 9 12 15 18 19 22 25 28 29 33 34 37 40 41 42 43 44 48 52 54 58 59 64 66 70 72 73 75 77 81 91 93 97 98 99 101 104 105 109 110 111 112 114 115 119 120 121 122 124 125 126 128 129 132 133 135 136 137 141 142 145 147 149 150 152 155 160 161 162 163 164 168 169 170 172 173 174 175 176 177 178 180 184 185 190 193 194 195 196 199 203 204 206 207 209 210 211 217 218 219 221 222 225 229 231 233 234 237 238 241 243 245 246 b 247 0 1 0 4 5 6 8 9 12 15 18 19 22 25 28 29 33 34 37 40 41 42 43 44 48 52 54 58 59 64 66 70 72 73 75 77 81 91 93 97 98 99 101 104 105 109 110 111 112 114 115 119 120 121 122 124 125 126 128 129 132 133 135 136 137 141 142 145 147 149 150 152 155 160 161 162 163 164 168 169 170 172 173 174 175 176 177 178 180 184 185 190 193 194 195 196 199 203 204 206 207 209 210 211 217 218 219 221 222 225 229 231 233 234 237 238 241 243 245 246 # 22902 intersection c a 247 0 1 0 4 5 6 8 9 12 15 18 19 22 25 28 29 33 34 37 40 41 42 43 44 48 52 54 58 59 64 66 70 72 73 75 77 81 91 93 97 98 99 101 104 105 109 110 111 112 114 115 119 120 121 122 124 125 126 128 129 132 133 135 136 137 141 142 145 147 149 150 152 155 160 161 162 163 164 168 169 170 172 173 174 175 176 177 178 180 184 185 190 193 194 195 196 199 203 204 206 207 209 210 211 217 218 219 221 222 225 229 231 233 234 237 238 241 243 245 246 b 247 0 1 e # 22903 intersection c a 247 0 1 0 1 2 3 4 6 8 9 10 13 14 15 17 18 23 24 27 28 30 31 32 34 35 36 39 47 51 52 53 55 57 60 63 64 65 66 67 70 71 72 76 77 80 82 83 89 90 93 95 96 98 100 103 104 110 112 113 114 118 122 123 125 126 130 131 132 134 135 136 137 139 141 144 146 147 148 152 154 157 158 161 166 167 170 171 175 177 178 184 186 187 189 192 193 194 197 200 207 211 212 213 221 222 224 225 226 229 230 233 234 235 237 238 239 241 242 243 244 b 247 0 1 0 1 2 3 4 6 8 9 10 13 14 15 17 18 23 24 27 28 30 31 32 34 35 36 39 47 51 52 53 55 57 60 63 64 65 66 67 70 71 72 76 77 80 82 83 89 90 93 95 96 98 100 103 104 110 112 113 114 118 122 123 125 126 130 131 132 134 135 136 137 139 141 144 146 147 148 152 154 157 158 161 166 167 170 171 175 177 178 184 186 187 189 192 193 194 197 200 207 211 212 213 221 222 224 225 226 229 230 233 234 235 237 238 239 241 242 243 244 # 22904 intersection c a 247 0 1 0 1 2 3 4 6 8 9 10 13 14 15 17 18 23 24 27 28 30 31 32 34 35 36 39 47 51 52 53 55 57 60 63 64 65 66 67 70 71 72 76 77 80 82 83 89 90 93 95 96 98 100 103 104 110 112 113 114 118 122 123 125 126 130 131 132 134 135 136 137 139 141 144 146 147 148 152 154 157 158 161 166 167 170 171 175 177 178 184 186 187 189 192 193 194 197 200 207 211 212 213 221 222 224 225 226 229 230 233 234 235 237 238 239 241 242 243 244 b 247 0 1 f # 22905 intersection c a 247 0 1 0 1 2 5 7 8 10 12 13 14 16 17 18 19 21 29 30 32 33 34 36 39 42 44 45 47 48 50 54 55 56 58 59 61 65 66 70 71 72 73 74 75 76 78 79 80 84 88 92 93 94 96 97 98 99 101 102 104 105 106 107 109 110 114 115 116 117 119 121 124 126 131 134 135 136 137 138 140 143 144 146 154 156 158 159 160 162 165 168 169 170 178 179 180 181 185 186 192 193 194 196 197 198 200 202 204 206 208 210 211 215 219 220 225 226 228 230 231 232 233 235 238 240 241 245 b 247 0 1 0 1 2 5 7 8 10 12 13 14 16 17 18 19 21 29 30 32 33 34 36 39 42 44 45 47 48 50 54 55 56 58 59 61 65 66 70 71 72 73 74 75 76 78 79 80 84 88 92 93 94 96 97 98 99 101 102 104 105 106 107 109 110 114 115 116 117 119 121 124 126 131 134 135 136 137 138 140 143 144 146 154 156 158 159 160 162 165 168 169 170 178 179 180 181 185 186 192 193 194 196 197 198 200 202 204 206 208 210 211 215 219 220 225 226 228 230 231 232 233 235 238 240 241 245 # 22906 intersection c a 247 0 1 0 1 2 5 7 8 10 12 13 14 16 17 18 19 21 29 30 32 33 34 36 39 42 44 45 47 48 50 54 55 56 58 59 61 65 66 70 71 72 73 74 75 76 78 79 80 84 88 92 93 94 96 97 98 99 101 102 104 105 106 107 109 110 114 115 116 117 119 121 124 126 131 134 135 136 137 138 140 143 144 146 154 156 158 159 160 162 165 168 169 170 178 179 180 181 185 186 192 193 194 196 197 198 200 202 204 206 208 210 211 215 219 220 225 226 228 230 231 232 233 235 238 240 241 245 b 247 0 1 1 4 5 10 11 18 23 24 26 29 31 32 33 36 37 38 41 43 45 47 48 50 58 59 60 62 63 68 69 70 72 73 74 75 76 78 79 81 83 84 88 91 95 96 97 98 99 100 101 102 104 105 111 112 114 115 116 119 121 123 125 126 128 129 130 133 134 136 138 140 141 142 143 145 146 148 153 155 156 158 160 161 162 164 165 166 167 174 175 176 177 179 180 181 185 186 189 190 192 193 194 195 196 198 200 209 212 213 216 224 227 228 230 231 232 236 237 238 240 245 246 # 22907 intersection c a 247 0 1 e b 247 0 1 e # 22908 intersection c a 247 0 1 e b 247 1 0 e # 22909 intersection c a 247 0 1 e b 247 0 1 e # 22910 intersection c a 247 0 1 e b 247 1 0 f # 22911 intersection c a 247 0 1 e b 247 0 1 e # 22912 intersection c a 247 0 1 e b 247 1 0 4 6 10 12 15 17 18 20 21 23 27 28 30 31 32 33 35 39 40 43 44 50 51 53 54 55 58 60 63 65 66 67 70 71 72 74 75 76 79 80 81 82 83 84 85 86 90 92 93 96 99 100 102 103 104 105 106 108 111 114 118 119 120 123 125 129 136 138 139 140 142 143 144 148 149 151 153 154 155 156 162 163 164 167 168 169 170 175 176 177 179 180 182 185 187 191 192 193 194 195 199 204 205 207 208 209 210 213 214 216 217 221 224 227 229 230 231 232 235 237 242 243 244 # 22913 intersection c a 247 0 1 f b 247 0 1 f # 22914 intersection c a 247 0 1 f b 247 1 0 e # 22915 intersection c a 247 0 1 f b 247 0 1 f # 22916 intersection c a 247 0 1 f b 247 1 0 f # 22917 intersection c a 247 0 1 f b 247 0 1 f # 22918 intersection c a 247 0 1 f b 247 1 0 0 2 3 4 10 12 15 17 18 21 22 25 27 28 29 31 33 34 37 38 39 42 44 48 50 52 54 57 60 63 65 67 68 69 70 73 74 76 78 79 81 85 86 87 88 89 91 94 95 97 98 100 101 102 105 106 109 111 112 113 115 116 117 118 119 120 121 127 134 135 137 139 140 141 145 148 150 151 155 156 157 158 159 164 165 168 170 174 175 178 179 180 181 182 183 185 186 188 191 192 197 198 201 202 205 211 214 215 217 218 219 222 223 224 232 234 236 238 243 # 22919 intersection c a 247 0 1 0 1 3 5 6 10 11 13 15 16 18 22 23 24 26 28 30 37 38 39 43 45 46 49 50 51 52 53 55 56 59 60 63 64 67 70 71 72 76 78 80 82 83 86 88 89 90 91 94 95 96 98 101 102 104 107 108 111 112 114 115 116 119 123 126 129 131 136 137 139 140 141 143 144 146 147 148 149 153 154 155 157 158 159 162 163 164 165 167 168 169 170 171 172 175 181 184 190 191 192 193 194 195 196 198 203 204 205 206 208 213 214 217 219 223 226 227 231 232 233 234 235 238 240 242 243 b 247 0 1 0 1 3 5 6 10 11 13 15 16 18 22 23 24 26 28 30 37 38 39 43 45 46 49 50 51 52 53 55 56 59 60 63 64 67 70 71 72 76 78 80 82 83 86 88 89 90 91 94 95 96 98 101 102 104 107 108 111 112 114 115 116 119 123 126 129 131 136 137 139 140 141 143 144 146 147 148 149 153 154 155 157 158 159 162 163 164 165 167 168 169 170 171 172 175 181 184 190 191 192 193 194 195 196 198 203 204 205 206 208 213 214 217 219 223 226 227 231 232 233 234 235 238 240 242 243 # 22920 intersection c a 247 0 1 0 1 3 5 6 10 11 13 15 16 18 22 23 24 26 28 30 37 38 39 43 45 46 49 50 51 52 53 55 56 59 60 63 64 67 70 71 72 76 78 80 82 83 86 88 89 90 91 94 95 96 98 101 102 104 107 108 111 112 114 115 116 119 123 126 129 131 136 137 139 140 141 143 144 146 147 148 149 153 154 155 157 158 159 162 163 164 165 167 168 169 170 171 172 175 181 184 190 191 192 193 194 195 196 198 203 204 205 206 208 213 214 217 219 223 226 227 231 232 233 234 235 238 240 242 243 b 247 1 0 e # 22921 intersection c a 247 0 1 0 2 3 4 7 12 13 14 15 16 17 19 21 22 23 24 27 28 29 30 31 33 36 37 38 42 45 46 48 51 53 54 58 59 61 62 63 64 66 67 68 69 75 79 80 81 82 84 85 86 87 88 89 90 92 93 94 96 97 99 100 104 105 107 109 110 112 113 114 116 119 122 123 125 128 129 131 135 137 138 140 141 142 143 144 147 148 149 157 158 161 163 165 166 167 168 169 171 172 173 174 175 177 180 181 182 183 185 187 188 193 194 195 196 197 199 201 202 204 205 206 208 210 215 217 218 229 231 234 237 239 243 244 245 246 b 247 0 1 0 2 3 4 7 12 13 14 15 16 17 19 21 22 23 24 27 28 29 30 31 33 36 37 38 42 45 46 48 51 53 54 58 59 61 62 63 64 66 67 68 69 75 79 80 81 82 84 85 86 87 88 89 90 92 93 94 96 97 99 100 104 105 107 109 110 112 113 114 116 119 122 123 125 128 129 131 135 137 138 140 141 142 143 144 147 148 149 157 158 161 163 165 166 167 168 169 171 172 173 174 175 177 180 181 182 183 185 187 188 193 194 195 196 197 199 201 202 204 205 206 208 210 215 217 218 229 231 234 237 239 243 244 245 246 # 22922 intersection c a 247 0 1 0 2 3 4 7 12 13 14 15 16 17 19 21 22 23 24 27 28 29 30 31 33 36 37 38 42 45 46 48 51 53 54 58 59 61 62 63 64 66 67 68 69 75 79 80 81 82 84 85 86 87 88 89 90 92 93 94 96 97 99 100 104 105 107 109 110 112 113 114 116 119 122 123 125 128 129 131 135 137 138 140 141 142 143 144 147 148 149 157 158 161 163 165 166 167 168 169 171 172 173 174 175 177 180 181 182 183 185 187 188 193 194 195 196 197 199 201 202 204 205 206 208 210 215 217 218 229 231 234 237 239 243 244 245 246 b 247 1 0 f # 22923 intersection c a 247 0 1 1 2 6 7 8 10 12 13 14 20 22 23 24 27 28 30 33 34 37 42 43 44 45 49 50 53 54 56 59 63 65 67 68 71 72 74 75 78 79 81 83 89 91 93 94 95 96 97 98 104 106 108 109 112 113 116 117 118 120 124 127 131 132 133 134 135 137 140 141 142 143 144 146 147 149 152 153 154 155 156 158 160 161 162 163 164 165 166 167 168 171 173 174 175 177 178 181 182 184 187 188 190 193 195 196 197 198 199 202 205 210 211 213 215 217 218 219 221 224 225 227 228 230 231 232 233 235 237 239 242 b 247 0 1 1 2 6 7 8 10 12 13 14 20 22 23 24 27 28 30 33 34 37 42 43 44 45 49 50 53 54 56 59 63 65 67 68 71 72 74 75 78 79 81 83 89 91 93 94 95 96 97 98 104 106 108 109 112 113 116 117 118 120 124 127 131 132 133 134 135 137 140 141 142 143 144 146 147 149 152 153 154 155 156 158 160 161 162 163 164 165 166 167 168 171 173 174 175 177 178 181 182 184 187 188 190 193 195 196 197 198 199 202 205 210 211 213 215 217 218 219 221 224 225 227 228 230 231 232 233 235 237 239 242 # 22924 intersection c a 247 0 1 1 2 6 7 8 10 12 13 14 20 22 23 24 27 28 30 33 34 37 42 43 44 45 49 50 53 54 56 59 63 65 67 68 71 72 74 75 78 79 81 83 89 91 93 94 95 96 97 98 104 106 108 109 112 113 116 117 118 120 124 127 131 132 133 134 135 137 140 141 142 143 144 146 147 149 152 153 154 155 156 158 160 161 162 163 164 165 166 167 168 171 173 174 175 177 178 181 182 184 187 188 190 193 195 196 197 198 199 202 205 210 211 213 215 217 218 219 221 224 225 227 228 230 231 232 233 235 237 239 242 b 247 1 0 4 5 6 8 9 10 16 17 18 19 21 25 27 29 31 40 42 45 46 48 49 52 53 54 56 58 62 63 64 69 72 74 77 78 80 82 83 85 90 91 93 94 96 97 100 101 102 103 105 108 110 111 112 114 118 123 125 128 129 130 131 132 133 135 136 137 139 140 142 143 144 145 146 147 148 149 153 156 157 158 159 165 167 168 169 170 171 172 175 178 182 184 186 187 188 189 193 194 196 197 199 200 203 204 205 207 211 213 220 221 222 224 226 227 233 234 236 240 246 # 22925 intersection c a 247 0 1 e b 247 0 1 e # 22926 intersection c a 247 0 1 e b 247 1 1 e # 22927 intersection c a 247 0 1 e b 247 0 1 e # 22928 intersection c a 247 0 1 e b 247 1 1 f # 22929 intersection c a 247 0 1 e b 247 0 1 e # 22930 intersection c a 247 0 1 e b 247 1 1 0 1 2 3 4 5 6 7 10 12 13 14 15 17 18 19 20 22 28 29 31 32 34 36 40 42 47 51 52 56 57 58 59 60 61 62 66 68 70 71 72 75 76 77 78 84 87 90 91 96 98 99 100 102 103 104 105 106 107 108 111 112 116 117 120 121 125 126 132 134 135 137 138 139 142 143 144 147 148 149 150 151 152 156 157 158 167 170 172 173 176 177 179 180 182 186 190 191 192 196 197 198 199 201 203 205 208 209 211 212 216 217 218 219 221 222 224 225 227 228 230 231 234 235 241 242 246 # 22931 intersection c a 247 0 1 f b 247 0 1 f # 22932 intersection c a 247 0 1 f b 247 1 1 e # 22933 intersection c a 247 0 1 f b 247 0 1 f # 22934 intersection c a 247 0 1 f b 247 1 1 f # 22935 intersection c a 247 0 1 f b 247 0 1 f # 22936 intersection c a 247 0 1 f b 247 1 1 0 2 3 4 6 7 9 13 14 19 21 23 25 26 29 33 35 37 38 39 40 46 47 50 51 53 54 56 58 63 65 66 67 68 69 70 73 74 75 79 80 82 83 88 92 93 95 96 97 98 100 102 103 105 106 107 111 114 115 116 118 119 120 123 126 130 132 133 137 139 141 142 143 144 145 147 152 153 154 157 158 159 162 166 167 169 172 175 176 177 181 184 186 187 190 192 193 194 196 198 202 204 205 206 207 208 210 211 216 217 221 222 224 226 227 228 229 230 233 234 235 236 237 238 241 243 245 246 # 22937 intersection c a 247 0 1 1 7 8 9 11 12 14 18 21 23 24 25 27 29 30 32 33 34 35 38 40 42 43 45 46 47 49 52 53 55 56 59 68 69 70 71 73 75 78 79 84 86 87 88 90 92 94 95 96 97 100 104 105 106 109 111 112 114 115 116 117 118 119 124 129 130 132 135 136 141 142 145 148 149 153 154 156 157 158 160 161 163 164 165 166 167 171 172 174 181 182 183 186 189 190 194 197 199 200 201 203 204 208 209 211 214 215 216 217 223 227 229 232 233 235 238 243 244 245 246 b 247 0 1 1 7 8 9 11 12 14 18 21 23 24 25 27 29 30 32 33 34 35 38 40 42 43 45 46 47 49 52 53 55 56 59 68 69 70 71 73 75 78 79 84 86 87 88 90 92 94 95 96 97 100 104 105 106 109 111 112 114 115 116 117 118 119 124 129 130 132 135 136 141 142 145 148 149 153 154 156 157 158 160 161 163 164 165 166 167 171 172 174 181 182 183 186 189 190 194 197 199 200 201 203 204 208 209 211 214 215 216 217 223 227 229 232 233 235 238 243 244 245 246 # 22938 intersection c a 247 0 1 1 7 8 9 11 12 14 18 21 23 24 25 27 29 30 32 33 34 35 38 40 42 43 45 46 47 49 52 53 55 56 59 68 69 70 71 73 75 78 79 84 86 87 88 90 92 94 95 96 97 100 104 105 106 109 111 112 114 115 116 117 118 119 124 129 130 132 135 136 141 142 145 148 149 153 154 156 157 158 160 161 163 164 165 166 167 171 172 174 181 182 183 186 189 190 194 197 199 200 201 203 204 208 209 211 214 215 216 217 223 227 229 232 233 235 238 243 244 245 246 b 247 1 1 e # 22939 intersection c a 247 0 1 1 3 8 9 10 11 12 13 20 21 23 25 27 30 31 32 33 34 37 40 43 44 46 48 50 53 55 56 57 58 60 63 65 67 68 69 71 72 73 75 79 80 85 87 88 89 91 94 95 97 98 100 103 105 106 113 114 115 116 117 118 119 120 121 127 131 132 133 134 138 139 140 142 145 146 148 149 150 151 152 156 157 159 161 162 165 167 170 171 173 175 178 180 181 182 183 186 188 192 196 197 203 204 208 210 211 213 215 216 219 220 223 224 225 227 228 229 230 231 232 234 235 236 240 244 245 b 247 0 1 1 3 8 9 10 11 12 13 20 21 23 25 27 30 31 32 33 34 37 40 43 44 46 48 50 53 55 56 57 58 60 63 65 67 68 69 71 72 73 75 79 80 85 87 88 89 91 94 95 97 98 100 103 105 106 113 114 115 116 117 118 119 120 121 127 131 132 133 134 138 139 140 142 145 146 148 149 150 151 152 156 157 159 161 162 165 167 170 171 173 175 178 180 181 182 183 186 188 192 196 197 203 204 208 210 211 213 215 216 219 220 223 224 225 227 228 229 230 231 232 234 235 236 240 244 245 # 22940 intersection c a 247 0 1 1 3 8 9 10 11 12 13 20 21 23 25 27 30 31 32 33 34 37 40 43 44 46 48 50 53 55 56 57 58 60 63 65 67 68 69 71 72 73 75 79 80 85 87 88 89 91 94 95 97 98 100 103 105 106 113 114 115 116 117 118 119 120 121 127 131 132 133 134 138 139 140 142 145 146 148 149 150 151 152 156 157 159 161 162 165 167 170 171 173 175 178 180 181 182 183 186 188 192 196 197 203 204 208 210 211 213 215 216 219 220 223 224 225 227 228 229 230 231 232 234 235 236 240 244 245 b 247 1 1 f # 22941 intersection c a 247 0 1 0 3 4 5 7 8 9 10 12 13 15 16 17 19 21 23 27 29 30 37 38 40 41 42 44 48 49 55 56 57 58 60 61 62 63 67 70 71 73 75 76 77 79 81 83 85 86 88 89 90 93 95 97 100 105 108 109 113 115 116 118 120 121 122 127 129 133 136 137 138 141 142 143 144 145 146 149 150 153 154 155 157 158 159 160 161 162 163 164 170 171 173 174 175 176 179 183 185 186 187 188 190 191 193 194 198 201 203 205 206 211 212 220 221 224 225 227 231 232 233 236 238 241 242 b 247 0 1 0 3 4 5 7 8 9 10 12 13 15 16 17 19 21 23 27 29 30 37 38 40 41 42 44 48 49 55 56 57 58 60 61 62 63 67 70 71 73 75 76 77 79 81 83 85 86 88 89 90 93 95 97 100 105 108 109 113 115 116 118 120 121 122 127 129 133 136 137 138 141 142 143 144 145 146 149 150 153 154 155 157 158 159 160 161 162 163 164 170 171 173 174 175 176 179 183 185 186 187 188 190 191 193 194 198 201 203 205 206 211 212 220 221 224 225 227 231 232 233 236 238 241 242 # 22942 intersection c a 247 0 1 0 3 4 5 7 8 9 10 12 13 15 16 17 19 21 23 27 29 30 37 38 40 41 42 44 48 49 55 56 57 58 60 61 62 63 67 70 71 73 75 76 77 79 81 83 85 86 88 89 90 93 95 97 100 105 108 109 113 115 116 118 120 121 122 127 129 133 136 137 138 141 142 143 144 145 146 149 150 153 154 155 157 158 159 160 161 162 163 164 170 171 173 174 175 176 179 183 185 186 187 188 190 191 193 194 198 201 203 205 206 211 212 220 221 224 225 227 231 232 233 236 238 241 242 b 247 1 1 0 1 2 5 6 7 9 12 14 15 17 19 22 23 24 25 26 30 32 34 39 44 46 48 52 55 56 57 58 61 66 68 69 71 76 78 79 84 86 87 89 90 91 92 94 95 96 97 100 101 105 106 107 108 109 110 113 114 115 117 118 119 120 121 122 125 127 129 132 133 135 136 138 139 140 141 144 145 148 149 152 153 154 155 156 158 165 170 172 175 177 178 179 180 187 188 192 193 194 196 197 198 199 201 204 205 206 209 213 214 220 221 222 223 229 231 232 234 235 237 238 239 240 242 244 245 246 # 22943 intersection c a 247 1 0 e b 247 1 0 e # 22944 intersection c a 247 1 0 e b 247 0 0 e # 22945 intersection c a 247 1 0 e b 247 1 0 e # 22946 intersection c a 247 1 0 e b 247 0 0 f # 22947 intersection c a 247 1 0 e b 247 1 0 e # 22948 intersection c a 247 1 0 e b 247 0 0 1 4 5 9 10 11 13 14 15 18 20 21 24 30 31 35 39 44 48 50 51 53 57 58 59 60 61 62 64 65 69 70 71 72 75 76 77 79 82 83 85 87 88 89 90 91 92 94 95 98 99 100 101 102 103 105 106 108 111 112 114 115 117 118 119 120 122 123 124 125 128 131 134 135 137 139 141 142 145 148 149 151 156 157 158 159 162 163 164 165 166 167 168 170 173 174 175 176 177 180 181 184 185 186 187 188 189 190 193 196 199 200 206 207 212 213 214 215 217 218 220 221 224 225 227 228 229 230 231 232 234 236 237 239 241 245 # 22949 intersection c a 247 1 0 f b 247 1 0 f # 22950 intersection c a 247 1 0 f b 247 0 0 e # 22951 intersection c a 247 1 0 f b 247 1 0 f # 22952 intersection c a 247 1 0 f b 247 0 0 f # 22953 intersection c a 247 1 0 f b 247 1 0 f # 22954 intersection c a 247 1 0 f b 247 0 0 0 1 6 7 13 16 17 26 27 28 29 30 31 34 35 37 38 39 41 42 43 44 46 47 48 53 54 55 56 57 58 59 61 63 64 66 69 72 75 78 81 82 83 84 85 86 87 88 89 93 98 99 100 103 107 108 115 118 120 125 126 127 128 129 131 133 134 135 138 139 143 144 146 148 151 152 153 155 156 158 159 162 164 168 169 174 175 176 177 179 181 183 184 185 186 188 189 192 193 194 195 197 200 204 207 210 215 216 219 221 224 225 228 231 232 233 235 238 239 240 241 244 245 # 22955 intersection c a 247 1 0 0 2 3 7 10 14 17 21 24 35 36 38 39 40 41 43 47 49 51 52 53 55 56 57 58 60 64 65 71 72 73 74 78 79 80 82 83 84 87 88 91 92 93 95 97 99 101 102 104 105 108 111 112 114 115 118 120 121 123 124 125 128 129 130 133 137 141 144 146 149 150 152 154 158 161 162 163 166 167 171 173 174 177 178 179 180 181 182 185 186 187 189 191 193 195 198 200 207 211 212 218 219 222 223 226 228 229 230 231 234 235 239 240 241 242 243 246 b 247 1 0 0 2 3 7 10 14 17 21 24 35 36 38 39 40 41 43 47 49 51 52 53 55 56 57 58 60 64 65 71 72 73 74 78 79 80 82 83 84 87 88 91 92 93 95 97 99 101 102 104 105 108 111 112 114 115 118 120 121 123 124 125 128 129 130 133 137 141 144 146 149 150 152 154 158 161 162 163 166 167 171 173 174 177 178 179 180 181 182 185 186 187 189 191 193 195 198 200 207 211 212 218 219 222 223 226 228 229 230 231 234 235 239 240 241 242 243 246 # 22956 intersection c a 247 1 0 0 2 3 7 10 14 17 21 24 35 36 38 39 40 41 43 47 49 51 52 53 55 56 57 58 60 64 65 71 72 73 74 78 79 80 82 83 84 87 88 91 92 93 95 97 99 101 102 104 105 108 111 112 114 115 118 120 121 123 124 125 128 129 130 133 137 141 144 146 149 150 152 154 158 161 162 163 166 167 171 173 174 177 178 179 180 181 182 185 186 187 189 191 193 195 198 200 207 211 212 218 219 222 223 226 228 229 230 231 234 235 239 240 241 242 243 246 b 247 0 0 e # 22957 intersection c a 247 1 0 0 1 2 3 4 6 7 9 11 12 14 20 21 22 24 25 36 37 38 40 43 44 49 52 54 56 57 58 63 64 65 66 67 68 69 70 71 77 79 81 85 86 88 89 93 96 98 101 103 105 106 107 110 111 113 115 116 117 118 119 120 123 125 128 130 133 134 136 137 141 143 144 146 147 149 150 155 158 160 161 163 164 169 170 171 172 173 174 175 177 178 179 181 183 188 190 191 194 195 196 200 203 207 208 210 212 213 217 218 224 225 229 230 233 234 240 241 242 243 244 245 246 b 247 1 0 0 1 2 3 4 6 7 9 11 12 14 20 21 22 24 25 36 37 38 40 43 44 49 52 54 56 57 58 63 64 65 66 67 68 69 70 71 77 79 81 85 86 88 89 93 96 98 101 103 105 106 107 110 111 113 115 116 117 118 119 120 123 125 128 130 133 134 136 137 141 143 144 146 147 149 150 155 158 160 161 163 164 169 170 171 172 173 174 175 177 178 179 181 183 188 190 191 194 195 196 200 203 207 208 210 212 213 217 218 224 225 229 230 233 234 240 241 242 243 244 245 246 # 22958 intersection c a 247 1 0 0 1 2 3 4 6 7 9 11 12 14 20 21 22 24 25 36 37 38 40 43 44 49 52 54 56 57 58 63 64 65 66 67 68 69 70 71 77 79 81 85 86 88 89 93 96 98 101 103 105 106 107 110 111 113 115 116 117 118 119 120 123 125 128 130 133 134 136 137 141 143 144 146 147 149 150 155 158 160 161 163 164 169 170 171 172 173 174 175 177 178 179 181 183 188 190 191 194 195 196 200 203 207 208 210 212 213 217 218 224 225 229 230 233 234 240 241 242 243 244 245 246 b 247 0 0 f # 22959 intersection c a 247 1 0 1 2 3 4 8 10 13 15 18 19 22 23 24 25 27 28 30 36 37 38 39 40 41 44 47 48 49 50 53 54 56 58 59 60 61 65 67 70 72 73 74 75 78 86 87 88 89 90 91 93 95 96 97 98 100 102 103 105 106 107 108 112 113 114 121 123 124 127 130 132 133 137 142 146 148 149 150 152 153 154 155 158 159 160 161 162 166 167 169 171 175 176 177 179 180 181 182 183 184 185 186 189 194 195 198 199 203 204 205 206 208 209 211 212 214 215 217 219 221 222 223 224 225 226 229 231 233 234 238 241 242 245 b 247 1 0 1 2 3 4 8 10 13 15 18 19 22 23 24 25 27 28 30 36 37 38 39 40 41 44 47 48 49 50 53 54 56 58 59 60 61 65 67 70 72 73 74 75 78 86 87 88 89 90 91 93 95 96 97 98 100 102 103 105 106 107 108 112 113 114 121 123 124 127 130 132 133 137 142 146 148 149 150 152 153 154 155 158 159 160 161 162 166 167 169 171 175 176 177 179 180 181 182 183 184 185 186 189 194 195 198 199 203 204 205 206 208 209 211 212 214 215 217 219 221 222 223 224 225 226 229 231 233 234 238 241 242 245 # 22960 intersection c a 247 1 0 1 2 3 4 8 10 13 15 18 19 22 23 24 25 27 28 30 36 37 38 39 40 41 44 47 48 49 50 53 54 56 58 59 60 61 65 67 70 72 73 74 75 78 86 87 88 89 90 91 93 95 96 97 98 100 102 103 105 106 107 108 112 113 114 121 123 124 127 130 132 133 137 142 146 148 149 150 152 153 154 155 158 159 160 161 162 166 167 169 171 175 176 177 179 180 181 182 183 184 185 186 189 194 195 198 199 203 204 205 206 208 209 211 212 214 215 217 219 221 222 223 224 225 226 229 231 233 234 238 241 242 245 b 247 0 0 2 4 5 7 8 9 10 13 15 18 19 20 23 24 26 28 29 30 33 37 40 43 45 46 47 49 51 52 53 54 55 57 58 60 61 63 65 67 68 72 73 75 76 78 79 82 85 86 87 88 89 90 91 92 94 97 102 107 108 109 110 111 113 116 119 122 123 124 131 132 143 148 151 152 153 154 158 159 160 162 163 166 167 168 174 175 176 178 179 180 182 185 186 187 188 189 190 191 192 193 196 199 200 201 202 205 206 209 210 211 213 221 224 225 226 227 231 232 239 242 246 # 22961 intersection c a 247 1 0 e b 247 1 0 e # 22962 intersection c a 247 1 0 e b 247 0 1 e # 22963 intersection c a 247 1 0 e b 247 1 0 e # 22964 intersection c a 247 1 0 e b 247 0 1 f # 22965 intersection c a 247 1 0 e b 247 1 0 e # 22966 intersection c a 247 1 0 e b 247 0 1 0 1 4 8 10 11 17 18 21 22 23 26 27 28 29 30 32 33 34 35 38 41 42 43 48 50 53 57 60 61 62 63 64 68 75 76 77 79 80 82 86 87 89 90 92 93 94 95 99 100 101 107 110 112 113 115 116 118 121 127 128 130 131 133 137 139 142 143 144 146 147 148 149 151 153 155 158 160 165 166 167 170 171 173 174 177 179 181 182 183 186 187 188 189 190 191 194 195 196 197 198 200 205 206 208 215 216 220 224 226 227 228 229 231 238 240 244 245 246 # 22967 intersection c a 247 1 0 f b 247 1 0 f # 22968 intersection c a 247 1 0 f b 247 0 1 e # 22969 intersection c a 247 1 0 f b 247 1 0 f # 22970 intersection c a 247 1 0 f b 247 0 1 f # 22971 intersection c a 247 1 0 f b 247 1 0 f # 22972 intersection c a 247 1 0 f b 247 0 1 0 1 4 5 8 9 12 13 14 15 19 20 21 22 23 24 27 30 31 37 41 42 44 46 47 48 50 52 55 56 57 58 59 61 62 66 67 68 70 72 73 74 75 77 78 79 80 83 84 85 86 87 88 90 93 94 96 99 100 103 104 108 111 112 113 114 115 116 117 119 122 124 125 126 127 130 131 134 136 138 139 141 142 144 145 146 151 152 155 156 158 161 163 165 167 170 171 174 175 177 179 181 184 185 186 187 188 189 195 197 198 199 204 209 210 211 212 215 218 220 221 222 227 229 230 234 236 238 241 246 # 22973 intersection c a 247 1 0 1 2 3 4 5 9 12 14 16 20 21 25 27 29 30 31 32 37 38 40 42 43 44 45 47 48 49 51 52 57 58 59 60 61 65 66 68 69 70 71 72 73 75 77 81 85 87 93 94 96 97 98 99 101 102 104 108 109 110 114 115 116 120 121 122 123 124 127 130 131 133 136 139 143 149 150 152 153 155 157 158 161 163 164 166 167 168 170 172 174 178 179 181 187 196 198 199 200 201 204 206 208 213 214 215 220 221 222 234 236 238 240 242 244 246 b 247 1 0 1 2 3 4 5 9 12 14 16 20 21 25 27 29 30 31 32 37 38 40 42 43 44 45 47 48 49 51 52 57 58 59 60 61 65 66 68 69 70 71 72 73 75 77 81 85 87 93 94 96 97 98 99 101 102 104 108 109 110 114 115 116 120 121 122 123 124 127 130 131 133 136 139 143 149 150 152 153 155 157 158 161 163 164 166 167 168 170 172 174 178 179 181 187 196 198 199 200 201 204 206 208 213 214 215 220 221 222 234 236 238 240 242 244 246 # 22974 intersection c a 247 1 0 1 2 3 4 5 9 12 14 16 20 21 25 27 29 30 31 32 37 38 40 42 43 44 45 47 48 49 51 52 57 58 59 60 61 65 66 68 69 70 71 72 73 75 77 81 85 87 93 94 96 97 98 99 101 102 104 108 109 110 114 115 116 120 121 122 123 124 127 130 131 133 136 139 143 149 150 152 153 155 157 158 161 163 164 166 167 168 170 172 174 178 179 181 187 196 198 199 200 201 204 206 208 213 214 215 220 221 222 234 236 238 240 242 244 246 b 247 0 1 e # 22975 intersection c a 247 1 0 1 3 6 7 9 11 13 14 15 16 21 22 23 24 29 32 33 36 37 38 40 44 47 48 49 51 52 54 55 58 59 63 64 67 73 74 76 79 80 81 82 83 84 88 91 92 94 95 96 98 102 103 104 105 107 109 110 112 114 115 116 119 120 122 123 124 125 127 128 137 139 140 142 143 144 145 147 149 156 157 159 160 161 165 166 167 168 171 172 174 179 180 181 184 185 187 189 190 194 195 197 201 206 207 209 210 212 214 215 218 219 220 221 227 229 231 232 233 234 236 237 240 242 244 245 b 247 1 0 1 3 6 7 9 11 13 14 15 16 21 22 23 24 29 32 33 36 37 38 40 44 47 48 49 51 52 54 55 58 59 63 64 67 73 74 76 79 80 81 82 83 84 88 91 92 94 95 96 98 102 103 104 105 107 109 110 112 114 115 116 119 120 122 123 124 125 127 128 137 139 140 142 143 144 145 147 149 156 157 159 160 161 165 166 167 168 171 172 174 179 180 181 184 185 187 189 190 194 195 197 201 206 207 209 210 212 214 215 218 219 220 221 227 229 231 232 233 234 236 237 240 242 244 245 # 22976 intersection c a 247 1 0 1 3 6 7 9 11 13 14 15 16 21 22 23 24 29 32 33 36 37 38 40 44 47 48 49 51 52 54 55 58 59 63 64 67 73 74 76 79 80 81 82 83 84 88 91 92 94 95 96 98 102 103 104 105 107 109 110 112 114 115 116 119 120 122 123 124 125 127 128 137 139 140 142 143 144 145 147 149 156 157 159 160 161 165 166 167 168 171 172 174 179 180 181 184 185 187 189 190 194 195 197 201 206 207 209 210 212 214 215 218 219 220 221 227 229 231 232 233 234 236 237 240 242 244 245 b 247 0 1 f # 22977 intersection c a 247 1 0 0 1 2 3 4 5 6 8 10 11 14 17 20 21 22 24 25 28 29 31 32 35 40 42 44 45 47 48 49 52 54 57 58 59 60 62 63 64 66 67 68 72 74 79 80 81 83 89 95 98 100 102 106 107 108 110 111 115 117 119 120 121 122 123 124 126 129 130 134 135 136 137 139 143 145 147 148 149 150 153 156 158 161 162 163 169 170 175 177 178 182 183 188 190 194 196 198 201 202 203 205 207 208 210 212 213 215 216 217 219 221 222 225 226 229 230 231 234 235 245 b 247 1 0 0 1 2 3 4 5 6 8 10 11 14 17 20 21 22 24 25 28 29 31 32 35 40 42 44 45 47 48 49 52 54 57 58 59 60 62 63 64 66 67 68 72 74 79 80 81 83 89 95 98 100 102 106 107 108 110 111 115 117 119 120 121 122 123 124 126 129 130 134 135 136 137 139 143 145 147 148 149 150 153 156 158 161 162 163 169 170 175 177 178 182 183 188 190 194 196 198 201 202 203 205 207 208 210 212 213 215 216 217 219 221 222 225 226 229 230 231 234 235 245 # 22978 intersection c a 247 1 0 0 1 2 3 4 5 6 8 10 11 14 17 20 21 22 24 25 28 29 31 32 35 40 42 44 45 47 48 49 52 54 57 58 59 60 62 63 64 66 67 68 72 74 79 80 81 83 89 95 98 100 102 106 107 108 110 111 115 117 119 120 121 122 123 124 126 129 130 134 135 136 137 139 143 145 147 148 149 150 153 156 158 161 162 163 169 170 175 177 178 182 183 188 190 194 196 198 201 202 203 205 207 208 210 212 213 215 216 217 219 221 222 225 226 229 230 231 234 235 245 b 247 0 1 3 4 6 8 9 13 17 22 24 26 29 31 33 34 35 37 40 42 46 47 48 49 53 54 57 58 59 63 66 67 68 69 71 74 75 77 78 80 82 86 91 92 93 95 96 98 99 101 102 103 105 106 107 109 112 113 118 119 120 121 124 125 127 130 137 139 140 142 143 146 147 148 149 150 152 154 160 161 162 163 167 169 171 174 175 176 177 178 179 184 186 187 188 189 192 196 197 199 200 201 202 203 205 206 210 211 212 215 217 218 220 222 223 224 229 231 234 235 237 238 239 241 242 245 246 # 22979 intersection c a 247 1 0 e b 247 1 0 e # 22980 intersection c a 247 1 0 e b 247 1 0 e # 22981 intersection c a 247 1 0 e b 247 1 0 e # 22982 intersection c a 247 1 0 e b 247 1 0 f # 22983 intersection c a 247 1 0 e b 247 1 0 e # 22984 intersection c a 247 1 0 e b 247 1 0 0 1 2 3 4 5 6 7 8 9 14 16 21 26 28 29 32 35 38 39 44 45 46 49 50 51 52 54 56 57 58 59 60 63 65 66 67 68 69 70 73 74 76 78 81 82 85 86 88 90 91 92 94 96 97 98 99 100 101 104 105 106 107 110 111 113 116 118 119 120 121 122 124 125 126 127 128 129 130 131 138 139 140 141 142 143 144 147 150 152 153 154 155 156 158 159 161 162 163 166 168 169 172 173 175 177 178 179 181 182 184 185 187 190 193 198 202 214 216 217 222 225 226 227 229 230 233 234 236 237 238 242 246 # 22985 intersection c a 247 1 0 f b 247 1 0 f # 22986 intersection c a 247 1 0 f b 247 1 0 e # 22987 intersection c a 247 1 0 f b 247 1 0 f # 22988 intersection c a 247 1 0 f b 247 1 0 f # 22989 intersection c a 247 1 0 f b 247 1 0 f # 22990 intersection c a 247 1 0 f b 247 1 0 2 3 4 12 17 18 19 20 21 22 26 27 28 32 34 35 36 38 40 43 45 46 47 48 49 50 51 52 53 54 57 58 59 64 67 68 70 71 75 78 79 81 82 84 85 86 88 89 94 96 97 98 101 103 105 106 107 109 110 111 112 115 117 118 119 120 123 124 125 128 130 134 135 136 137 142 144 146 147 149 150 151 154 155 163 164 167 169 170 171 173 174 175 177 178 180 181 188 189 190 194 195 196 198 199 201 202 203 204 205 206 207 208 209 211 212 213 214 215 220 228 229 232 233 236 237 240 241 244 # 22991 intersection c a 247 1 0 2 3 7 8 9 10 11 12 13 16 20 22 25 26 27 28 29 34 35 38 40 41 43 44 46 48 50 51 52 57 58 59 60 67 72 75 76 79 80 81 83 85 86 87 88 89 90 91 93 95 97 98 99 100 101 103 106 108 109 112 113 121 122 124 128 129 130 131 132 134 136 137 138 140 142 143 144 150 151 153 156 158 159 161 162 164 165 166 167 168 169 178 179 180 182 185 186 189 191 199 203 204 205 206 209 213 214 216 217 218 221 223 225 229 231 233 234 235 236 237 239 243 245 b 247 1 0 2 3 7 8 9 10 11 12 13 16 20 22 25 26 27 28 29 34 35 38 40 41 43 44 46 48 50 51 52 57 58 59 60 67 72 75 76 79 80 81 83 85 86 87 88 89 90 91 93 95 97 98 99 100 101 103 106 108 109 112 113 121 122 124 128 129 130 131 132 134 136 137 138 140 142 143 144 150 151 153 156 158 159 161 162 164 165 166 167 168 169 178 179 180 182 185 186 189 191 199 203 204 205 206 209 213 214 216 217 218 221 223 225 229 231 233 234 235 236 237 239 243 245 # 22992 intersection c a 247 1 0 2 3 7 8 9 10 11 12 13 16 20 22 25 26 27 28 29 34 35 38 40 41 43 44 46 48 50 51 52 57 58 59 60 67 72 75 76 79 80 81 83 85 86 87 88 89 90 91 93 95 97 98 99 100 101 103 106 108 109 112 113 121 122 124 128 129 130 131 132 134 136 137 138 140 142 143 144 150 151 153 156 158 159 161 162 164 165 166 167 168 169 178 179 180 182 185 186 189 191 199 203 204 205 206 209 213 214 216 217 218 221 223 225 229 231 233 234 235 236 237 239 243 245 b 247 1 0 e # 22993 intersection c a 247 1 0 1 2 3 5 10 11 12 15 16 18 19 20 22 23 24 27 28 30 32 33 36 37 42 44 52 55 56 57 59 60 63 65 68 69 70 72 73 74 75 76 82 84 86 92 98 99 101 105 106 110 111 112 113 114 117 118 119 122 124 126 127 128 129 130 131 132 138 141 144 146 149 150 151 152 153 155 158 159 161 162 163 164 169 170 171 172 173 177 178 180 181 183 184 187 188 190 191 192 193 194 195 199 201 202 203 204 205 208 210 211 212 213 215 217 218 221 224 227 230 231 234 238 245 b 247 1 0 1 2 3 5 10 11 12 15 16 18 19 20 22 23 24 27 28 30 32 33 36 37 42 44 52 55 56 57 59 60 63 65 68 69 70 72 73 74 75 76 82 84 86 92 98 99 101 105 106 110 111 112 113 114 117 118 119 122 124 126 127 128 129 130 131 132 138 141 144 146 149 150 151 152 153 155 158 159 161 162 163 164 169 170 171 172 173 177 178 180 181 183 184 187 188 190 191 192 193 194 195 199 201 202 203 204 205 208 210 211 212 213 215 217 218 221 224 227 230 231 234 238 245 # 22994 intersection c a 247 1 0 1 2 3 5 10 11 12 15 16 18 19 20 22 23 24 27 28 30 32 33 36 37 42 44 52 55 56 57 59 60 63 65 68 69 70 72 73 74 75 76 82 84 86 92 98 99 101 105 106 110 111 112 113 114 117 118 119 122 124 126 127 128 129 130 131 132 138 141 144 146 149 150 151 152 153 155 158 159 161 162 163 164 169 170 171 172 173 177 178 180 181 183 184 187 188 190 191 192 193 194 195 199 201 202 203 204 205 208 210 211 212 213 215 217 218 221 224 227 230 231 234 238 245 b 247 1 0 f # 22995 intersection c a 247 1 0 0 1 2 4 5 9 13 15 17 18 19 21 22 23 26 27 28 29 31 34 36 38 42 47 48 50 54 55 56 57 58 60 61 66 68 70 71 72 73 75 76 77 78 79 84 87 89 91 92 96 97 104 105 107 108 109 110 114 117 119 120 122 123 124 125 127 128 129 132 133 134 135 136 137 138 139 140 141 142 145 146 147 148 151 152 154 155 157 160 161 162 163 166 169 170 172 173 174 175 176 177 178 183 185 186 187 188 190 191 192 193 198 199 200 201 203 204 206 210 212 218 221 222 224 226 227 228 229 230 231 233 238 240 241 242 244 246 b 247 1 0 0 1 2 4 5 9 13 15 17 18 19 21 22 23 26 27 28 29 31 34 36 38 42 47 48 50 54 55 56 57 58 60 61 66 68 70 71 72 73 75 76 77 78 79 84 87 89 91 92 96 97 104 105 107 108 109 110 114 117 119 120 122 123 124 125 127 128 129 132 133 134 135 136 137 138 139 140 141 142 145 146 147 148 151 152 154 155 157 160 161 162 163 166 169 170 172 173 174 175 176 177 178 183 185 186 187 188 190 191 192 193 198 199 200 201 203 204 206 210 212 218 221 222 224 226 227 228 229 230 231 233 238 240 241 242 244 246 # 22996 intersection c a 247 1 0 0 1 2 4 5 9 13 15 17 18 19 21 22 23 26 27 28 29 31 34 36 38 42 47 48 50 54 55 56 57 58 60 61 66 68 70 71 72 73 75 76 77 78 79 84 87 89 91 92 96 97 104 105 107 108 109 110 114 117 119 120 122 123 124 125 127 128 129 132 133 134 135 136 137 138 139 140 141 142 145 146 147 148 151 152 154 155 157 160 161 162 163 166 169 170 172 173 174 175 176 177 178 183 185 186 187 188 190 191 192 193 198 199 200 201 203 204 206 210 212 218 221 222 224 226 227 228 229 230 231 233 238 240 241 242 244 246 b 247 1 0 1 2 5 7 9 10 12 16 18 22 23 24 25 26 28 31 33 36 37 40 41 42 43 45 50 51 53 54 57 58 65 66 67 68 71 73 75 76 77 80 81 82 84 85 86 89 91 93 101 102 103 104 107 109 110 112 113 114 116 117 118 120 122 123 124 129 130 131 132 133 134 140 142 143 147 149 151 154 158 159 162 165 166 168 169 170 171 173 174 177 180 181 184 188 192 194 195 203 205 208 209 210 211 216 217 218 219 220 223 224 226 228 232 233 234 235 236 239 240 242 244 245 246 # 22997 intersection c a 247 1 0 e b 247 1 0 e # 22998 intersection c a 247 1 0 e b 247 1 1 e # 22999 intersection c a 247 1 0 e b 247 1 0 e # 23000 intersection c a 247 1 0 e b 247 1 1 f # 23001 intersection c a 247 1 0 e b 247 1 0 e # 23002 intersection c a 247 1 0 e b 247 1 1 0 1 2 3 4 9 11 15 17 18 20 21 22 24 32 35 36 37 43 44 46 54 57 58 59 62 64 66 67 68 72 73 75 78 79 80 82 84 85 86 88 89 90 91 93 101 102 106 107 109 119 120 122 127 129 130 131 133 135 136 138 142 143 144 146 147 150 152 153 154 159 160 162 164 165 167 179 180 183 192 193 194 195 196 198 200 202 205 207 209 210 211 212 214 216 217 218 221 222 224 225 226 227 229 231 232 233 236 237 244 245 246 # 23003 intersection c a 247 1 0 f b 247 1 0 f # 23004 intersection c a 247 1 0 f b 247 1 1 e # 23005 intersection c a 247 1 0 f b 247 1 0 f # 23006 intersection c a 247 1 0 f b 247 1 1 f # 23007 intersection c a 247 1 0 f b 247 1 0 f # 23008 intersection c a 247 1 0 f b 247 1 1 0 1 3 6 7 10 12 14 15 17 18 19 20 21 23 25 27 28 31 33 34 35 39 40 43 44 48 51 53 54 56 57 59 61 64 68 69 71 72 73 75 76 77 78 79 82 83 84 87 91 93 95 99 102 106 109 111 113 117 118 119 122 125 127 129 130 131 134 136 137 138 139 140 141 142 144 148 152 154 159 160 161 166 173 174 178 180 183 184 187 190 194 195 196 200 202 206 207 208 209 210 216 220 221 222 227 228 229 231 233 235 242 243 244 245 # 23009 intersection c a 247 1 0 0 3 6 7 8 11 14 17 18 22 23 24 27 30 31 32 34 36 37 39 40 41 47 50 51 53 54 56 58 60 61 63 68 69 71 72 73 75 77 78 79 80 81 82 86 88 89 90 92 93 98 101 103 104 106 107 109 110 114 115 116 119 123 128 129 130 132 133 135 138 139 140 142 144 145 147 149 150 153 157 158 160 161 162 163 164 165 170 172 173 174 175 176 178 179 185 186 187 188 189 192 197 198 200 201 202 203 204 208 211 212 213 216 219 221 224 226 230 234 235 236 239 240 241 242 244 246 b 247 1 0 0 3 6 7 8 11 14 17 18 22 23 24 27 30 31 32 34 36 37 39 40 41 47 50 51 53 54 56 58 60 61 63 68 69 71 72 73 75 77 78 79 80 81 82 86 88 89 90 92 93 98 101 103 104 106 107 109 110 114 115 116 119 123 128 129 130 132 133 135 138 139 140 142 144 145 147 149 150 153 157 158 160 161 162 163 164 165 170 172 173 174 175 176 178 179 185 186 187 188 189 192 197 198 200 201 202 203 204 208 211 212 213 216 219 221 224 226 230 234 235 236 239 240 241 242 244 246 # 23010 intersection c a 247 1 0 0 3 6 7 8 11 14 17 18 22 23 24 27 30 31 32 34 36 37 39 40 41 47 50 51 53 54 56 58 60 61 63 68 69 71 72 73 75 77 78 79 80 81 82 86 88 89 90 92 93 98 101 103 104 106 107 109 110 114 115 116 119 123 128 129 130 132 133 135 138 139 140 142 144 145 147 149 150 153 157 158 160 161 162 163 164 165 170 172 173 174 175 176 178 179 185 186 187 188 189 192 197 198 200 201 202 203 204 208 211 212 213 216 219 221 224 226 230 234 235 236 239 240 241 242 244 246 b 247 1 1 e # 23011 intersection c a 247 1 0 0 1 2 3 5 6 8 11 12 13 14 15 16 18 19 23 26 27 29 32 35 39 40 41 42 45 48 52 53 57 58 59 60 63 64 65 66 68 71 72 76 77 78 79 87 90 92 95 97 102 104 106 107 108 109 110 113 115 117 118 119 121 125 128 129 130 131 133 135 136 137 138 139 140 143 145 146 147 148 150 154 158 159 160 161 162 169 171 173 174 175 177 178 181 186 187 189 190 192 193 194 196 197 198 200 204 208 210 214 215 217 218 219 220 226 232 233 234 235 236 239 240 241 245 b 247 1 0 0 1 2 3 5 6 8 11 12 13 14 15 16 18 19 23 26 27 29 32 35 39 40 41 42 45 48 52 53 57 58 59 60 63 64 65 66 68 71 72 76 77 78 79 87 90 92 95 97 102 104 106 107 108 109 110 113 115 117 118 119 121 125 128 129 130 131 133 135 136 137 138 139 140 143 145 146 147 148 150 154 158 159 160 161 162 169 171 173 174 175 177 178 181 186 187 189 190 192 193 194 196 197 198 200 204 208 210 214 215 217 218 219 220 226 232 233 234 235 236 239 240 241 245 # 23012 intersection c a 247 1 0 0 1 2 3 5 6 8 11 12 13 14 15 16 18 19 23 26 27 29 32 35 39 40 41 42 45 48 52 53 57 58 59 60 63 64 65 66 68 71 72 76 77 78 79 87 90 92 95 97 102 104 106 107 108 109 110 113 115 117 118 119 121 125 128 129 130 131 133 135 136 137 138 139 140 143 145 146 147 148 150 154 158 159 160 161 162 169 171 173 174 175 177 178 181 186 187 189 190 192 193 194 196 197 198 200 204 208 210 214 215 217 218 219 220 226 232 233 234 235 236 239 240 241 245 b 247 1 1 f # 23013 intersection c a 247 1 0 0 1 2 3 7 8 10 11 12 15 16 18 19 21 22 24 25 27 31 34 35 36 37 38 44 45 47 49 52 54 55 58 59 60 61 62 63 66 67 71 72 73 75 76 81 82 87 88 89 90 92 96 100 101 103 104 105 107 109 110 111 112 113 119 124 125 126 127 129 131 132 133 134 139 144 145 146 151 153 156 157 158 159 160 162 163 164 165 168 172 173 175 178 179 183 184 185 187 188 190 191 193 197 198 202 203 204 206 209 211 212 213 214 215 218 222 223 227 232 233 235 239 240 242 243 245 246 b 247 1 0 0 1 2 3 7 8 10 11 12 15 16 18 19 21 22 24 25 27 31 34 35 36 37 38 44 45 47 49 52 54 55 58 59 60 61 62 63 66 67 71 72 73 75 76 81 82 87 88 89 90 92 96 100 101 103 104 105 107 109 110 111 112 113 119 124 125 126 127 129 131 132 133 134 139 144 145 146 151 153 156 157 158 159 160 162 163 164 165 168 172 173 175 178 179 183 184 185 187 188 190 191 193 197 198 202 203 204 206 209 211 212 213 214 215 218 222 223 227 232 233 235 239 240 242 243 245 246 # 23014 intersection c a 247 1 0 0 1 2 3 7 8 10 11 12 15 16 18 19 21 22 24 25 27 31 34 35 36 37 38 44 45 47 49 52 54 55 58 59 60 61 62 63 66 67 71 72 73 75 76 81 82 87 88 89 90 92 96 100 101 103 104 105 107 109 110 111 112 113 119 124 125 126 127 129 131 132 133 134 139 144 145 146 151 153 156 157 158 159 160 162 163 164 165 168 172 173 175 178 179 183 184 185 187 188 190 191 193 197 198 202 203 204 206 209 211 212 213 214 215 218 222 223 227 232 233 235 239 240 242 243 245 246 b 247 1 1 0 1 2 3 6 10 12 18 19 20 21 24 25 27 28 29 30 31 32 33 34 36 37 38 41 42 43 47 48 49 50 52 53 54 55 56 58 59 61 64 66 67 68 69 72 73 78 79 81 84 88 91 93 96 97 98 99 100 106 108 109 113 114 118 120 121 124 126 127 129 130 132 133 134 138 142 143 145 146 147 149 150 152 154 156 157 161 164 166 168 170 171 172 173 174 175 176 177 178 181 182 184 185 186 187 188 189 190 192 194 195 196 200 203 206 208 210 213 214 216 218 219 221 222 225 229 230 234 235 237 242 245 246 # 23015 intersection c a 247 1 1 e b 247 1 1 e # 23016 intersection c a 247 1 1 e b 247 0 0 e # 23017 intersection c a 247 1 1 e b 247 1 1 e # 23018 intersection c a 247 1 1 e b 247 0 0 f # 23019 intersection c a 247 1 1 e b 247 1 1 e # 23020 intersection c a 247 1 1 e b 247 0 0 2 4 5 9 10 13 20 22 27 28 30 37 40 42 43 44 48 49 51 55 57 58 60 64 65 66 68 70 73 76 77 78 79 80 85 86 87 89 93 94 96 97 100 102 104 106 107 109 110 112 114 116 117 121 122 123 125 126 128 130 131 132 133 135 138 139 140 143 144 145 147 148 149 152 154 157 159 162 164 165 166 169 170 175 177 178 179 180 181 186 191 194 197 198 200 201 202 203 204 205 206 208 209 212 214 215 216 217 219 220 221 222 225 226 228 229 230 233 236 238 241 242 243 245 246 # 23021 intersection c a 247 1 1 f b 247 1 1 f # 23022 intersection c a 247 1 1 f b 247 0 0 e # 23023 intersection c a 247 1 1 f b 247 1 1 f # 23024 intersection c a 247 1 1 f b 247 0 0 f # 23025 intersection c a 247 1 1 f b 247 1 1 f # 23026 intersection c a 247 1 1 f b 247 0 0 1 4 6 8 9 13 15 17 19 20 21 22 25 32 33 34 35 37 38 39 43 46 47 50 55 57 58 60 62 63 64 65 66 69 71 72 74 76 77 78 81 82 83 86 88 89 90 91 92 93 94 95 96 97 104 106 107 109 111 114 115 127 131 132 135 136 137 138 139 140 142 144 146 148 150 155 156 157 158 159 161 162 165 168 171 172 173 174 177 178 182 183 184 188 195 197 198 200 202 203 205 207 208 209 213 214 218 220 223 225 226 227 228 229 230 231 232 233 236 237 238 239 240 # 23027 intersection c a 247 1 1 1 3 8 11 12 13 14 15 16 17 20 21 23 24 26 27 28 32 33 34 38 42 45 53 54 57 59 61 66 67 69 70 71 72 73 76 77 81 83 84 86 87 90 91 92 94 97 99 102 106 107 113 115 118 119 121 126 127 130 131 133 135 137 138 141 142 144 147 150 151 155 156 159 160 162 164 165 166 168 169 170 172 173 174 176 180 185 186 192 193 195 196 198 199 201 203 205 209 210 211 215 218 219 220 225 232 237 238 239 240 241 242 245 246 b 247 1 1 1 3 8 11 12 13 14 15 16 17 20 21 23 24 26 27 28 32 33 34 38 42 45 53 54 57 59 61 66 67 69 70 71 72 73 76 77 81 83 84 86 87 90 91 92 94 97 99 102 106 107 113 115 118 119 121 126 127 130 131 133 135 137 138 141 142 144 147 150 151 155 156 159 160 162 164 165 166 168 169 170 172 173 174 176 180 185 186 192 193 195 196 198 199 201 203 205 209 210 211 215 218 219 220 225 232 237 238 239 240 241 242 245 246 # 23028 intersection c a 247 1 1 1 3 8 11 12 13 14 15 16 17 20 21 23 24 26 27 28 32 33 34 38 42 45 53 54 57 59 61 66 67 69 70 71 72 73 76 77 81 83 84 86 87 90 91 92 94 97 99 102 106 107 113 115 118 119 121 126 127 130 131 133 135 137 138 141 142 144 147 150 151 155 156 159 160 162 164 165 166 168 169 170 172 173 174 176 180 185 186 192 193 195 196 198 199 201 203 205 209 210 211 215 218 219 220 225 232 237 238 239 240 241 242 245 246 b 247 0 0 e # 23029 intersection c a 247 1 1 0 2 3 4 9 10 11 13 14 15 16 20 23 28 31 32 34 35 36 41 42 44 45 47 52 53 55 57 61 63 66 68 69 71 72 75 77 78 79 83 85 86 87 91 93 94 95 101 105 107 110 111 112 114 116 117 121 123 124 125 126 129 130 131 132 133 135 136 137 138 142 144 145 146 147 151 158 159 161 162 163 164 166 169 170 171 173 175 178 179 180 181 182 186 187 189 190 191 192 193 194 197 198 199 201 202 203 206 207 208 210 211 213 215 216 218 221 224 225 226 228 229 234 235 236 237 238 239 241 242 243 244 246 b 247 1 1 0 2 3 4 9 10 11 13 14 15 16 20 23 28 31 32 34 35 36 41 42 44 45 47 52 53 55 57 61 63 66 68 69 71 72 75 77 78 79 83 85 86 87 91 93 94 95 101 105 107 110 111 112 114 116 117 121 123 124 125 126 129 130 131 132 133 135 136 137 138 142 144 145 146 147 151 158 159 161 162 163 164 166 169 170 171 173 175 178 179 180 181 182 186 187 189 190 191 192 193 194 197 198 199 201 202 203 206 207 208 210 211 213 215 216 218 221 224 225 226 228 229 234 235 236 237 238 239 241 242 243 244 246 # 23030 intersection c a 247 1 1 0 2 3 4 9 10 11 13 14 15 16 20 23 28 31 32 34 35 36 41 42 44 45 47 52 53 55 57 61 63 66 68 69 71 72 75 77 78 79 83 85 86 87 91 93 94 95 101 105 107 110 111 112 114 116 117 121 123 124 125 126 129 130 131 132 133 135 136 137 138 142 144 145 146 147 151 158 159 161 162 163 164 166 169 170 171 173 175 178 179 180 181 182 186 187 189 190 191 192 193 194 197 198 199 201 202 203 206 207 208 210 211 213 215 216 218 221 224 225 226 228 229 234 235 236 237 238 239 241 242 243 244 246 b 247 0 0 f # 23031 intersection c a 247 1 1 0 1 2 5 7 8 14 16 19 22 25 29 30 32 33 37 38 43 44 49 51 52 53 54 56 58 60 61 63 65 66 67 68 69 73 76 78 81 84 86 87 90 95 98 101 102 103 104 106 107 108 109 111 112 115 116 117 122 123 124 125 130 133 135 138 139 140 141 142 143 149 151 157 158 161 162 164 175 177 178 179 180 184 185 186 187 188 189 192 194 195 196 198 202 203 205 207 208 210 212 214 215 218 223 224 226 229 230 231 232 234 240 242 243 b 247 1 1 0 1 2 5 7 8 14 16 19 22 25 29 30 32 33 37 38 43 44 49 51 52 53 54 56 58 60 61 63 65 66 67 68 69 73 76 78 81 84 86 87 90 95 98 101 102 103 104 106 107 108 109 111 112 115 116 117 122 123 124 125 130 133 135 138 139 140 141 142 143 149 151 157 158 161 162 164 175 177 178 179 180 184 185 186 187 188 189 192 194 195 196 198 202 203 205 207 208 210 212 214 215 218 223 224 226 229 230 231 232 234 240 242 243 # 23032 intersection c a 247 1 1 0 1 2 5 7 8 14 16 19 22 25 29 30 32 33 37 38 43 44 49 51 52 53 54 56 58 60 61 63 65 66 67 68 69 73 76 78 81 84 86 87 90 95 98 101 102 103 104 106 107 108 109 111 112 115 116 117 122 123 124 125 130 133 135 138 139 140 141 142 143 149 151 157 158 161 162 164 175 177 178 179 180 184 185 186 187 188 189 192 194 195 196 198 202 203 205 207 208 210 212 214 215 218 223 224 226 229 230 231 232 234 240 242 243 b 247 0 0 0 1 3 9 10 11 13 16 17 18 22 23 24 25 27 29 32 36 37 42 43 46 47 49 51 53 54 56 58 62 64 65 67 68 69 70 73 74 75 77 78 79 80 81 82 84 85 87 88 92 97 99 100 107 109 110 112 113 115 117 118 122 124 126 127 129 130 134 137 139 140 141 142 143 144 146 149 150 151 156 157 159 160 165 166 167 168 169 170 171 172 173 174 175 177 178 179 180 181 182 185 186 187 188 189 190 191 195 197 198 200 203 206 209 213 214 215 216 218 219 221 222 223 224 232 233 235 236 237 240 241 244 246 # 23033 intersection c a 247 1 1 e b 247 1 1 e # 23034 intersection c a 247 1 1 e b 247 0 1 e # 23035 intersection c a 247 1 1 e b 247 1 1 e # 23036 intersection c a 247 1 1 e b 247 0 1 f # 23037 intersection c a 247 1 1 e b 247 1 1 e # 23038 intersection c a 247 1 1 e b 247 0 1 0 1 2 3 6 7 9 11 13 17 18 20 21 22 25 26 27 29 30 32 34 35 36 37 38 40 43 47 52 54 56 61 62 65 70 72 75 76 77 78 80 81 82 83 88 89 90 92 94 97 98 99 101 102 103 104 106 107 108 109 110 111 112 113 114 115 121 122 123 127 129 131 132 134 135 136 137 139 142 145 150 155 156 157 158 160 164 165 168 169 173 176 177 178 179 181 183 185 186 188 190 192 193 194 196 198 199 200 202 206 207 209 210 215 217 218 221 222 224 225 226 227 228 229 231 232 236 237 240 242 244 245 246 # 23039 intersection c a 247 1 1 f b 247 1 1 f # 23040 intersection c a 247 1 1 f b 247 0 1 e # 23041 intersection c a 247 1 1 f b 247 1 1 f # 23042 intersection c a 247 1 1 f b 247 0 1 f # 23043 intersection c a 247 1 1 f b 247 1 1 f # 23044 intersection c a 247 1 1 f b 247 0 1 1 2 5 7 9 12 14 15 22 24 25 28 31 35 36 37 40 41 42 43 46 48 49 50 51 53 56 57 60 61 64 65 66 67 68 75 76 77 80 84 85 87 88 89 91 92 93 94 95 96 97 98 102 103 106 109 110 117 118 119 120 122 123 124 125 127 128 135 137 139 140 141 142 152 155 156 157 159 160 161 162 164 169 172 175 176 177 181 182 185 186 188 190 191 193 197 198 201 202 207 209 211 212 213 214 215 216 217 219 223 225 226 229 230 231 232 233 235 236 238 242 243 245 246 # 23045 intersection c a 247 1 1 1 3 8 12 13 15 16 17 18 19 20 22 24 25 27 30 33 35 37 38 43 45 46 47 48 49 50 51 54 55 58 59 63 65 67 68 71 72 73 74 75 77 78 81 82 83 85 86 87 91 92 93 97 101 107 108 112 117 118 125 126 127 128 130 135 137 138 140 141 142 143 150 151 152 155 156 158 159 160 161 162 163 164 166 170 173 175 180 188 192 195 196 199 200 206 207 208 211 215 216 217 219 220 221 223 224 225 226 227 228 230 231 232 233 234 237 243 244 246 b 247 1 1 1 3 8 12 13 15 16 17 18 19 20 22 24 25 27 30 33 35 37 38 43 45 46 47 48 49 50 51 54 55 58 59 63 65 67 68 71 72 73 74 75 77 78 81 82 83 85 86 87 91 92 93 97 101 107 108 112 117 118 125 126 127 128 130 135 137 138 140 141 142 143 150 151 152 155 156 158 159 160 161 162 163 164 166 170 173 175 180 188 192 195 196 199 200 206 207 208 211 215 216 217 219 220 221 223 224 225 226 227 228 230 231 232 233 234 237 243 244 246 # 23046 intersection c a 247 1 1 1 3 8 12 13 15 16 17 18 19 20 22 24 25 27 30 33 35 37 38 43 45 46 47 48 49 50 51 54 55 58 59 63 65 67 68 71 72 73 74 75 77 78 81 82 83 85 86 87 91 92 93 97 101 107 108 112 117 118 125 126 127 128 130 135 137 138 140 141 142 143 150 151 152 155 156 158 159 160 161 162 163 164 166 170 173 175 180 188 192 195 196 199 200 206 207 208 211 215 216 217 219 220 221 223 224 225 226 227 228 230 231 232 233 234 237 243 244 246 b 247 0 1 e # 23047 intersection c a 247 1 1 0 3 5 6 8 9 11 12 13 16 20 24 25 26 28 31 34 35 37 38 44 45 46 47 50 52 54 58 60 64 66 68 69 70 73 74 76 78 79 80 81 85 86 87 89 93 95 101 102 103 104 106 107 108 109 110 111 112 113 116 121 122 124 128 129 132 134 135 136 137 139 140 143 145 148 149 150 152 154 155 156 160 161 162 163 164 165 167 168 169 171 173 174 176 178 179 182 184 185 187 188 191 193 194 196 198 205 206 209 210 213 214 216 217 218 219 222 223 226 227 228 229 231 233 235 236 239 246 b 247 1 1 0 3 5 6 8 9 11 12 13 16 20 24 25 26 28 31 34 35 37 38 44 45 46 47 50 52 54 58 60 64 66 68 69 70 73 74 76 78 79 80 81 85 86 87 89 93 95 101 102 103 104 106 107 108 109 110 111 112 113 116 121 122 124 128 129 132 134 135 136 137 139 140 143 145 148 149 150 152 154 155 156 160 161 162 163 164 165 167 168 169 171 173 174 176 178 179 182 184 185 187 188 191 193 194 196 198 205 206 209 210 213 214 216 217 218 219 222 223 226 227 228 229 231 233 235 236 239 246 # 23048 intersection c a 247 1 1 0 3 5 6 8 9 11 12 13 16 20 24 25 26 28 31 34 35 37 38 44 45 46 47 50 52 54 58 60 64 66 68 69 70 73 74 76 78 79 80 81 85 86 87 89 93 95 101 102 103 104 106 107 108 109 110 111 112 113 116 121 122 124 128 129 132 134 135 136 137 139 140 143 145 148 149 150 152 154 155 156 160 161 162 163 164 165 167 168 169 171 173 174 176 178 179 182 184 185 187 188 191 193 194 196 198 205 206 209 210 213 214 216 217 218 219 222 223 226 227 228 229 231 233 235 236 239 246 b 247 0 1 f # 23049 intersection c a 247 1 1 0 2 3 4 5 9 12 14 15 16 19 21 24 26 28 29 31 33 35 36 37 40 41 43 48 49 51 53 57 58 59 60 62 69 72 73 74 78 79 82 83 84 93 95 97 98 102 105 107 110 113 116 118 120 121 124 125 126 128 129 130 135 137 138 142 143 148 149 152 153 154 155 156 157 159 160 161 162 167 169 171 175 177 178 180 182 183 186 189 191 192 196 202 203 204 206 209 211 214 215 216 219 222 224 226 228 230 232 233 237 238 240 243 246 b 247 1 1 0 2 3 4 5 9 12 14 15 16 19 21 24 26 28 29 31 33 35 36 37 40 41 43 48 49 51 53 57 58 59 60 62 69 72 73 74 78 79 82 83 84 93 95 97 98 102 105 107 110 113 116 118 120 121 124 125 126 128 129 130 135 137 138 142 143 148 149 152 153 154 155 156 157 159 160 161 162 167 169 171 175 177 178 180 182 183 186 189 191 192 196 202 203 204 206 209 211 214 215 216 219 222 224 226 228 230 232 233 237 238 240 243 246 # 23050 intersection c a 247 1 1 0 2 3 4 5 9 12 14 15 16 19 21 24 26 28 29 31 33 35 36 37 40 41 43 48 49 51 53 57 58 59 60 62 69 72 73 74 78 79 82 83 84 93 95 97 98 102 105 107 110 113 116 118 120 121 124 125 126 128 129 130 135 137 138 142 143 148 149 152 153 154 155 156 157 159 160 161 162 167 169 171 175 177 178 180 182 183 186 189 191 192 196 202 203 204 206 209 211 214 215 216 219 222 224 226 228 230 232 233 237 238 240 243 246 b 247 0 1 1 2 7 10 11 13 16 18 21 22 23 28 29 31 35 36 39 40 42 46 47 51 54 55 63 64 68 69 71 77 79 81 82 83 84 85 89 90 91 93 95 97 100 101 105 106 107 108 110 112 113 114 115 116 122 127 129 132 133 134 138 140 141 143 146 148 154 155 156 161 162 165 167 171 173 174 175 178 180 184 186 187 191 194 195 198 200 201 204 206 207 208 209 213 214 216 217 221 227 228 229 231 232 233 234 235 236 237 238 239 240 241 244 245 246 # 23051 intersection c a 247 1 1 e b 247 1 1 e # 23052 intersection c a 247 1 1 e b 247 1 0 e # 23053 intersection c a 247 1 1 e b 247 1 1 e # 23054 intersection c a 247 1 1 e b 247 1 0 f # 23055 intersection c a 247 1 1 e b 247 1 1 e # 23056 intersection c a 247 1 1 e b 247 1 0 0 1 4 8 9 10 11 13 14 16 17 20 26 27 28 29 30 31 34 36 38 39 41 43 46 50 51 53 55 60 62 65 66 69 70 71 72 76 80 85 86 88 90 91 92 93 96 102 104 107 108 109 111 114 117 118 121 125 129 131 134 136 139 141 142 143 145 148 150 152 153 156 157 158 159 160 162 164 165 166 167 170 171 177 178 179 180 181 183 184 185 188 191 196 198 200 201 202 203 213 215 217 220 221 222 226 229 235 236 237 241 245 # 23057 intersection c a 247 1 1 f b 247 1 1 f # 23058 intersection c a 247 1 1 f b 247 1 0 e # 23059 intersection c a 247 1 1 f b 247 1 1 f # 23060 intersection c a 247 1 1 f b 247 1 0 f # 23061 intersection c a 247 1 1 f b 247 1 1 f # 23062 intersection c a 247 1 1 f b 247 1 0 0 2 5 7 10 12 14 16 19 22 23 25 27 29 35 37 38 39 41 48 49 50 53 54 55 56 58 59 63 64 65 66 69 70 71 74 75 78 81 83 84 87 88 90 91 93 94 96 102 103 104 105 111 113 114 121 123 124 125 127 129 130 131 133 135 136 137 141 143 144 149 151 152 153 154 155 156 160 162 170 171 174 175 176 181 183 186 192 194 196 197 198 201 203 206 207 208 209 212 216 217 221 222 223 229 230 231 232 234 235 236 238 239 244 # 23063 intersection c a 247 1 1 2 3 4 5 7 9 10 11 13 14 16 19 21 22 25 26 28 30 32 33 34 36 43 47 48 49 50 54 55 57 60 63 68 70 72 75 76 77 78 79 80 81 86 87 88 90 91 94 95 96 97 98 99 101 104 105 107 108 111 112 113 114 116 117 118 119 121 122 123 125 128 133 136 137 138 139 140 142 143 145 148 151 154 155 156 159 160 161 162 163 164 167 170 172 175 179 180 182 183 184 185 186 187 188 189 191 192 194 196 197 201 203 205 206 207 210 211 212 213 214 217 220 221 225 226 228 233 235 236 239 242 244 245 246 b 247 1 1 2 3 4 5 7 9 10 11 13 14 16 19 21 22 25 26 28 30 32 33 34 36 43 47 48 49 50 54 55 57 60 63 68 70 72 75 76 77 78 79 80 81 86 87 88 90 91 94 95 96 97 98 99 101 104 105 107 108 111 112 113 114 116 117 118 119 121 122 123 125 128 133 136 137 138 139 140 142 143 145 148 151 154 155 156 159 160 161 162 163 164 167 170 172 175 179 180 182 183 184 185 186 187 188 189 191 192 194 196 197 201 203 205 206 207 210 211 212 213 214 217 220 221 225 226 228 233 235 236 239 242 244 245 246 # 23064 intersection c a 247 1 1 2 3 4 5 7 9 10 11 13 14 16 19 21 22 25 26 28 30 32 33 34 36 43 47 48 49 50 54 55 57 60 63 68 70 72 75 76 77 78 79 80 81 86 87 88 90 91 94 95 96 97 98 99 101 104 105 107 108 111 112 113 114 116 117 118 119 121 122 123 125 128 133 136 137 138 139 140 142 143 145 148 151 154 155 156 159 160 161 162 163 164 167 170 172 175 179 180 182 183 184 185 186 187 188 189 191 192 194 196 197 201 203 205 206 207 210 211 212 213 214 217 220 221 225 226 228 233 235 236 239 242 244 245 246 b 247 1 0 e # 23065 intersection c a 247 1 1 1 2 3 5 7 8 10 14 17 18 21 22 25 27 28 35 37 38 40 41 44 46 48 50 54 55 58 60 62 64 66 67 69 73 76 78 79 80 81 87 88 89 91 95 96 98 99 100 104 105 106 107 108 109 110 111 112 114 115 116 118 119 121 122 127 130 132 134 135 136 137 138 139 140 141 142 143 145 146 148 154 155 158 159 160 161 164 167 169 170 172 173 175 177 182 183 184 186 188 193 194 199 203 204 206 210 211 212 213 214 217 218 219 221 224 226 227 228 229 230 231 233 234 237 238 239 241 242 243 245 b 247 1 1 1 2 3 5 7 8 10 14 17 18 21 22 25 27 28 35 37 38 40 41 44 46 48 50 54 55 58 60 62 64 66 67 69 73 76 78 79 80 81 87 88 89 91 95 96 98 99 100 104 105 106 107 108 109 110 111 112 114 115 116 118 119 121 122 127 130 132 134 135 136 137 138 139 140 141 142 143 145 146 148 154 155 158 159 160 161 164 167 169 170 172 173 175 177 182 183 184 186 188 193 194 199 203 204 206 210 211 212 213 214 217 218 219 221 224 226 227 228 229 230 231 233 234 237 238 239 241 242 243 245 # 23066 intersection c a 247 1 1 1 2 3 5 7 8 10 14 17 18 21 22 25 27 28 35 37 38 40 41 44 46 48 50 54 55 58 60 62 64 66 67 69 73 76 78 79 80 81 87 88 89 91 95 96 98 99 100 104 105 106 107 108 109 110 111 112 114 115 116 118 119 121 122 127 130 132 134 135 136 137 138 139 140 141 142 143 145 146 148 154 155 158 159 160 161 164 167 169 170 172 173 175 177 182 183 184 186 188 193 194 199 203 204 206 210 211 212 213 214 217 218 219 221 224 226 227 228 229 230 231 233 234 237 238 239 241 242 243 245 b 247 1 0 f # 23067 intersection c a 247 1 1 0 1 3 4 8 9 11 14 17 19 24 27 28 32 35 36 39 41 42 43 44 49 53 54 55 56 57 58 59 61 68 69 70 73 74 78 80 82 84 85 87 88 89 90 91 92 93 98 101 102 103 105 107 108 111 116 119 122 125 126 127 129 131 133 135 136 137 138 139 140 141 142 145 146 150 151 152 153 155 156 158 161 162 163 164 166 167 174 175 177 178 179 181 182 183 184 186 188 189 190 191 192 193 194 195 200 201 202 213 215 219 222 223 224 225 226 230 234 236 237 238 242 b 247 1 1 0 1 3 4 8 9 11 14 17 19 24 27 28 32 35 36 39 41 42 43 44 49 53 54 55 56 57 58 59 61 68 69 70 73 74 78 80 82 84 85 87 88 89 90 91 92 93 98 101 102 103 105 107 108 111 116 119 122 125 126 127 129 131 133 135 136 137 138 139 140 141 142 145 146 150 151 152 153 155 156 158 161 162 163 164 166 167 174 175 177 178 179 181 182 183 184 186 188 189 190 191 192 193 194 195 200 201 202 213 215 219 222 223 224 225 226 230 234 236 237 238 242 # 23068 intersection c a 247 1 1 0 1 3 4 8 9 11 14 17 19 24 27 28 32 35 36 39 41 42 43 44 49 53 54 55 56 57 58 59 61 68 69 70 73 74 78 80 82 84 85 87 88 89 90 91 92 93 98 101 102 103 105 107 108 111 116 119 122 125 126 127 129 131 133 135 136 137 138 139 140 141 142 145 146 150 151 152 153 155 156 158 161 162 163 164 166 167 174 175 177 178 179 181 182 183 184 186 188 189 190 191 192 193 194 195 200 201 202 213 215 219 222 223 224 225 226 230 234 236 237 238 242 b 247 1 0 1 2 4 7 10 13 15 17 19 20 22 23 24 25 26 29 30 31 32 33 35 36 37 38 40 42 45 47 48 49 55 61 63 64 66 67 70 72 73 74 76 77 80 81 82 83 84 86 88 90 91 93 94 95 97 98 99 101 102 105 106 108 109 110 112 113 115 118 119 120 121 122 123 124 125 126 128 129 130 131 133 135 136 137 140 141 142 143 144 147 148 150 151 153 154 155 156 157 159 162 163 165 166 167 168 171 174 175 176 178 179 180 181 182 183 184 186 187 190 191 194 195 197 198 200 204 207 210 216 221 222 223 225 226 227 232 233 234 237 239 241 242 246 # 23069 intersection c a 247 1 1 e b 247 1 1 e # 23070 intersection c a 247 1 1 e b 247 1 1 e # 23071 intersection c a 247 1 1 e b 247 1 1 e # 23072 intersection c a 247 1 1 e b 247 1 1 f # 23073 intersection c a 247 1 1 e b 247 1 1 e # 23074 intersection c a 247 1 1 e b 247 1 1 2 3 4 5 6 7 10 12 14 16 17 22 23 25 26 27 30 31 32 33 35 36 38 40 42 43 44 45 47 48 51 52 53 54 56 57 59 61 62 63 64 66 70 72 74 75 79 80 81 82 84 85 86 88 89 92 95 97 99 101 107 109 110 113 114 116 118 119 122 127 130 131 135 138 139 143 145 146 147 149 150 151 152 153 156 157 162 163 164 166 168 171 172 174 177 179 181 182 184 186 187 190 192 193 195 197 198 199 202 204 205 206 209 211 212 215 216 219 220 223 225 226 227 228 229 230 232 233 234 235 238 239 242 # 23075 intersection c a 247 1 1 f b 247 1 1 f # 23076 intersection c a 247 1 1 f b 247 1 1 e # 23077 intersection c a 247 1 1 f b 247 1 1 f # 23078 intersection c a 247 1 1 f b 247 1 1 f # 23079 intersection c a 247 1 1 f b 247 1 1 f # 23080 intersection c a 247 1 1 f b 247 1 1 1 2 4 6 7 8 10 17 21 27 28 29 30 32 33 35 36 38 39 40 41 43 47 49 50 51 55 56 57 59 60 62 63 66 68 69 70 72 75 76 77 78 80 81 84 85 86 87 88 91 92 94 96 97 99 100 104 105 108 110 112 113 114 115 116 117 118 124 125 127 128 129 133 134 138 140 142 143 146 150 152 153 154 156 159 161 163 166 167 168 169 173 175 177 178 179 181 184 185 186 187 189 192 193 196 199 200 206 207 209 210 211 212 213 216 217 220 221 222 223 225 226 232 236 241 244 245 246 # 23081 intersection c a 247 1 1 0 1 2 4 5 6 9 11 13 14 18 19 22 23 24 25 28 30 31 32 33 35 36 39 41 42 45 46 47 49 50 51 53 54 56 58 59 61 62 64 65 74 75 76 77 78 80 82 85 86 87 88 89 90 94 98 99 100 103 106 110 112 113 114 117 121 122 123 125 127 129 130 131 133 134 135 137 141 142 144 149 150 151 152 153 154 156 157 159 160 161 162 164 165 166 168 170 171 175 176 177 181 182 184 185 188 189 191 192 194 195 197 198 201 209 211 212 214 218 219 222 223 224 225 226 228 229 230 231 233 235 237 238 239 240 244 246 b 247 1 1 0 1 2 4 5 6 9 11 13 14 18 19 22 23 24 25 28 30 31 32 33 35 36 39 41 42 45 46 47 49 50 51 53 54 56 58 59 61 62 64 65 74 75 76 77 78 80 82 85 86 87 88 89 90 94 98 99 100 103 106 110 112 113 114 117 121 122 123 125 127 129 130 131 133 134 135 137 141 142 144 149 150 151 152 153 154 156 157 159 160 161 162 164 165 166 168 170 171 175 176 177 181 182 184 185 188 189 191 192 194 195 197 198 201 209 211 212 214 218 219 222 223 224 225 226 228 229 230 231 233 235 237 238 239 240 244 246 # 23082 intersection c a 247 1 1 0 1 2 4 5 6 9 11 13 14 18 19 22 23 24 25 28 30 31 32 33 35 36 39 41 42 45 46 47 49 50 51 53 54 56 58 59 61 62 64 65 74 75 76 77 78 80 82 85 86 87 88 89 90 94 98 99 100 103 106 110 112 113 114 117 121 122 123 125 127 129 130 131 133 134 135 137 141 142 144 149 150 151 152 153 154 156 157 159 160 161 162 164 165 166 168 170 171 175 176 177 181 182 184 185 188 189 191 192 194 195 197 198 201 209 211 212 214 218 219 222 223 224 225 226 228 229 230 231 233 235 237 238 239 240 244 246 b 247 1 1 e # 23083 intersection c a 247 1 1 1 2 6 9 10 11 13 14 17 18 19 21 22 23 24 29 31 32 34 36 37 40 45 46 48 49 51 52 54 56 58 61 66 67 71 72 75 77 80 81 86 88 89 90 92 94 95 98 99 100 102 104 105 108 109 111 112 113 116 118 119 120 121 122 123 125 126 127 129 131 132 135 137 138 140 142 143 150 153 155 156 157 159 160 161 162 163 170 172 173 176 177 182 183 186 191 194 196 198 200 201 202 203 206 210 211 212 213 214 218 220 221 223 227 233 234 235 237 245 246 b 247 1 1 1 2 6 9 10 11 13 14 17 18 19 21 22 23 24 29 31 32 34 36 37 40 45 46 48 49 51 52 54 56 58 61 66 67 71 72 75 77 80 81 86 88 89 90 92 94 95 98 99 100 102 104 105 108 109 111 112 113 116 118 119 120 121 122 123 125 126 127 129 131 132 135 137 138 140 142 143 150 153 155 156 157 159 160 161 162 163 170 172 173 176 177 182 183 186 191 194 196 198 200 201 202 203 206 210 211 212 213 214 218 220 221 223 227 233 234 235 237 245 246 # 23084 intersection c a 247 1 1 1 2 6 9 10 11 13 14 17 18 19 21 22 23 24 29 31 32 34 36 37 40 45 46 48 49 51 52 54 56 58 61 66 67 71 72 75 77 80 81 86 88 89 90 92 94 95 98 99 100 102 104 105 108 109 111 112 113 116 118 119 120 121 122 123 125 126 127 129 131 132 135 137 138 140 142 143 150 153 155 156 157 159 160 161 162 163 170 172 173 176 177 182 183 186 191 194 196 198 200 201 202 203 206 210 211 212 213 214 218 220 221 223 227 233 234 235 237 245 246 b 247 1 1 f # 23085 intersection c a 247 1 1 2 3 5 8 9 10 11 23 24 25 28 32 35 36 37 39 40 41 42 43 47 49 50 51 54 58 62 64 67 70 71 73 74 75 76 83 84 88 92 95 97 99 102 103 104 105 107 109 111 113 114 118 120 123 125 127 128 129 130 131 134 141 143 144 145 149 151 153 154 155 156 158 159 162 164 166 168 169 170 171 172 173 174 176 177 178 180 185 186 189 190 193 194 197 199 200 202 205 206 208 209 211 212 213 214 216 217 219 220 223 229 231 232 239 241 242 244 245 b 247 1 1 2 3 5 8 9 10 11 23 24 25 28 32 35 36 37 39 40 41 42 43 47 49 50 51 54 58 62 64 67 70 71 73 74 75 76 83 84 88 92 95 97 99 102 103 104 105 107 109 111 113 114 118 120 123 125 127 128 129 130 131 134 141 143 144 145 149 151 153 154 155 156 158 159 162 164 166 168 169 170 171 172 173 174 176 177 178 180 185 186 189 190 193 194 197 199 200 202 205 206 208 209 211 212 213 214 216 217 219 220 223 229 231 232 239 241 242 244 245 # 23086 intersection c a 247 1 1 2 3 5 8 9 10 11 23 24 25 28 32 35 36 37 39 40 41 42 43 47 49 50 51 54 58 62 64 67 70 71 73 74 75 76 83 84 88 92 95 97 99 102 103 104 105 107 109 111 113 114 118 120 123 125 127 128 129 130 131 134 141 143 144 145 149 151 153 154 155 156 158 159 162 164 166 168 169 170 171 172 173 174 176 177 178 180 185 186 189 190 193 194 197 199 200 202 205 206 208 209 211 212 213 214 216 217 219 220 223 229 231 232 239 241 242 244 245 b 247 1 1 1 2 6 8 10 12 14 15 19 21 24 28 29 30 32 33 34 37 38 39 44 45 46 51 52 55 56 59 61 64 67 70 71 72 74 75 77 84 87 88 93 94 96 102 105 106 107 108 112 115 116 117 119 121 123 124 126 127 130 131 133 135 136 138 139 141 145 146 151 153 158 159 160 161 162 164 165 167 169 170 171 172 174 176 177 178 183 185 187 191 206 209 210 211 214 215 216 217 218 226 227 228 229 234 235 236 237 239 240 242 # 23087 intersection c a 0 0 0 e b 0 0 0 e # 23088 difference c a 0 0 0 e b 0 0 0 e # 23089 difference c a 0 0 0 e b 0 0 0 e # 23090 difference c a 0 0 0 e b 0 0 0 e # 23091 difference c a 0 0 0 e b 0 0 0 e # 23092 difference c a 0 0 0 e b 0 0 0 # 23093 difference c a 0 0 0 e b 0 0 0 e # 23094 difference c a 0 0 0 e b 0 0 0 e # 23095 difference c a 0 0 0 e b 0 0 0 e # 23096 difference c a 0 0 0 e b 0 0 0 e # 23097 difference c a 0 0 0 e b 0 0 0 e # 23098 difference c a 0 0 0 e b 0 0 0 # 23099 difference c a 0 0 0 b 0 0 0 # 23100 difference c a 0 0 0 b 0 0 0 e # 23101 difference c a 0 0 0 b 0 0 0 # 23102 difference c a 0 0 0 b 0 0 0 e # 23103 difference c a 0 0 0 b 0 0 0 # 23104 difference c a 0 0 0 b 0 0 0 # 23105 difference c a 0 0 0 e b 0 0 0 e # 23106 difference c a 0 0 0 e b 0 0 1 e # 23107 difference c a 0 0 0 e b 0 0 0 e # 23108 difference c a 0 0 0 e b 0 0 1 e # 23109 difference c a 0 0 0 e b 0 0 0 e # 23110 difference c a 0 0 0 e b 0 0 1 # 23111 difference c a 0 0 0 e b 0 0 0 e # 23112 difference c a 0 0 0 e b 0 0 1 e # 23113 difference c a 0 0 0 e b 0 0 0 e # 23114 difference c a 0 0 0 e b 0 0 1 e # 23115 difference c a 0 0 0 e b 0 0 0 e # 23116 difference c a 0 0 0 e b 0 0 1 # 23117 difference c a 0 0 0 b 0 0 0 # 23118 difference c a 0 0 0 b 0 0 1 e # 23119 difference c a 0 0 0 b 0 0 0 # 23120 difference c a 0 0 0 b 0 0 1 e # 23121 difference c a 0 0 0 b 0 0 0 # 23122 difference c a 0 0 0 b 0 0 1 # 23123 difference c a 0 0 0 e b 0 0 0 e # 23124 difference c a 0 0 0 e b 0 1 0 e # 23125 difference c a 0 0 0 e b 0 0 0 e # 23126 difference c a 0 0 0 e b 0 1 0 e # 23127 difference c a 0 0 0 e b 0 0 0 e # 23128 difference c a 0 0 0 e b 0 1 0 # 23129 difference c a 0 0 0 e b 0 0 0 e # 23130 difference c a 0 0 0 e b 0 1 0 e # 23131 difference c a 0 0 0 e b 0 0 0 e # 23132 difference c a 0 0 0 e b 0 1 0 e # 23133 difference c a 0 0 0 e b 0 0 0 e # 23134 difference c a 0 0 0 e b 0 1 0 # 23135 difference c a 0 0 0 b 0 0 0 # 23136 difference c a 0 0 0 b 0 1 0 e # 23137 difference c a 0 0 0 b 0 0 0 # 23138 difference c a 0 0 0 b 0 1 0 e # 23139 difference c a 0 0 0 b 0 0 0 # 23140 difference c a 0 0 0 b 0 1 0 # 23141 difference c a 0 0 0 e b 0 0 0 e # 23142 difference c a 0 0 0 e b 0 1 1 e # 23143 difference c a 0 0 0 e b 0 0 0 e # 23144 difference c a 0 0 0 e b 0 1 1 e # 23145 difference c a 0 0 0 e b 0 0 0 e # 23146 difference c a 0 0 0 e b 0 1 1 # 23147 difference c a 0 0 0 e b 0 0 0 e # 23148 difference c a 0 0 0 e b 0 1 1 e # 23149 difference c a 0 0 0 e b 0 0 0 e # 23150 difference c a 0 0 0 e b 0 1 1 e # 23151 difference c a 0 0 0 e b 0 0 0 e # 23152 difference c a 0 0 0 e b 0 1 1 # 23153 difference c a 0 0 0 b 0 0 0 # 23154 difference c a 0 0 0 b 0 1 1 e # 23155 difference c a 0 0 0 b 0 0 0 # 23156 difference c a 0 0 0 b 0 1 1 e # 23157 difference c a 0 0 0 b 0 0 0 # 23158 difference c a 0 0 0 b 0 1 1 # 23159 difference c a 0 0 1 e b 0 0 1 e # 23160 difference c a 0 0 1 e b 0 0 0 e # 23161 difference c a 0 0 1 e b 0 0 1 e # 23162 difference c a 0 0 1 e b 0 0 0 e # 23163 difference c a 0 0 1 e b 0 0 1 e # 23164 difference c a 0 0 1 e b 0 0 0 # 23165 difference c a 0 0 1 e b 0 0 1 e # 23166 difference c a 0 0 1 e b 0 0 0 e # 23167 difference c a 0 0 1 e b 0 0 1 e # 23168 difference c a 0 0 1 e b 0 0 0 e # 23169 difference c a 0 0 1 e b 0 0 1 e # 23170 difference c a 0 0 1 e b 0 0 0 # 23171 difference c a 0 0 1 b 0 0 1 # 23172 difference c a 0 0 1 b 0 0 0 e # 23173 difference c a 0 0 1 b 0 0 1 # 23174 difference c a 0 0 1 b 0 0 0 e # 23175 difference c a 0 0 1 b 0 0 1 # 23176 difference c a 0 0 1 b 0 0 0 # 23177 difference c a 0 0 1 e b 0 0 1 e # 23178 difference c a 0 0 1 e b 0 0 1 e # 23179 difference c a 0 0 1 e b 0 0 1 e # 23180 difference c a 0 0 1 e b 0 0 1 e # 23181 difference c a 0 0 1 e b 0 0 1 e # 23182 difference c a 0 0 1 e b 0 0 1 # 23183 difference c a 0 0 1 e b 0 0 1 e # 23184 difference c a 0 0 1 e b 0 0 1 e # 23185 difference c a 0 0 1 e b 0 0 1 e # 23186 difference c a 0 0 1 e b 0 0 1 e # 23187 difference c a 0 0 1 e b 0 0 1 e # 23188 difference c a 0 0 1 e b 0 0 1 # 23189 difference c a 0 0 1 b 0 0 1 # 23190 difference c a 0 0 1 b 0 0 1 e # 23191 difference c a 0 0 1 b 0 0 1 # 23192 difference c a 0 0 1 b 0 0 1 e # 23193 difference c a 0 0 1 b 0 0 1 # 23194 difference c a 0 0 1 b 0 0 1 # 23195 difference c a 0 0 1 e b 0 0 1 e # 23196 difference c a 0 0 1 e b 0 1 0 e # 23197 difference c a 0 0 1 e b 0 0 1 e # 23198 difference c a 0 0 1 e b 0 1 0 e # 23199 difference c a 0 0 1 e b 0 0 1 e # 23200 difference c a 0 0 1 e b 0 1 0 # 23201 difference c a 0 0 1 e b 0 0 1 e # 23202 difference c a 0 0 1 e b 0 1 0 e # 23203 difference c a 0 0 1 e b 0 0 1 e # 23204 difference c a 0 0 1 e b 0 1 0 e # 23205 difference c a 0 0 1 e b 0 0 1 e # 23206 difference c a 0 0 1 e b 0 1 0 # 23207 difference c a 0 0 1 b 0 0 1 # 23208 difference c a 0 0 1 b 0 1 0 e # 23209 difference c a 0 0 1 b 0 0 1 # 23210 difference c a 0 0 1 b 0 1 0 e # 23211 difference c a 0 0 1 b 0 0 1 # 23212 difference c a 0 0 1 b 0 1 0 # 23213 difference c a 0 0 1 e b 0 0 1 e # 23214 difference c a 0 0 1 e b 0 1 1 e # 23215 difference c a 0 0 1 e b 0 0 1 e # 23216 difference c a 0 0 1 e b 0 1 1 e # 23217 difference c a 0 0 1 e b 0 0 1 e # 23218 difference c a 0 0 1 e b 0 1 1 # 23219 difference c a 0 0 1 e b 0 0 1 e # 23220 difference c a 0 0 1 e b 0 1 1 e # 23221 difference c a 0 0 1 e b 0 0 1 e # 23222 difference c a 0 0 1 e b 0 1 1 e # 23223 difference c a 0 0 1 e b 0 0 1 e # 23224 difference c a 0 0 1 e b 0 1 1 # 23225 difference c a 0 0 1 b 0 0 1 # 23226 difference c a 0 0 1 b 0 1 1 e # 23227 difference c a 0 0 1 b 0 0 1 # 23228 difference c a 0 0 1 b 0 1 1 e # 23229 difference c a 0 0 1 b 0 0 1 # 23230 difference c a 0 0 1 b 0 1 1 # 23231 difference c a 0 1 0 e b 0 1 0 e # 23232 difference c a 0 1 0 e b 0 0 0 e # 23233 difference c a 0 1 0 e b 0 1 0 e # 23234 difference c a 0 1 0 e b 0 0 0 e # 23235 difference c a 0 1 0 e b 0 1 0 e # 23236 difference c a 0 1 0 e b 0 0 0 # 23237 difference c a 0 1 0 e b 0 1 0 e # 23238 difference c a 0 1 0 e b 0 0 0 e # 23239 difference c a 0 1 0 e b 0 1 0 e # 23240 difference c a 0 1 0 e b 0 0 0 e # 23241 difference c a 0 1 0 e b 0 1 0 e # 23242 difference c a 0 1 0 e b 0 0 0 # 23243 difference c a 0 1 0 b 0 1 0 # 23244 difference c a 0 1 0 b 0 0 0 e # 23245 difference c a 0 1 0 b 0 1 0 # 23246 difference c a 0 1 0 b 0 0 0 e # 23247 difference c a 0 1 0 b 0 1 0 # 23248 difference c a 0 1 0 b 0 0 0 # 23249 difference c a 0 1 0 e b 0 1 0 e # 23250 difference c a 0 1 0 e b 0 0 1 e # 23251 difference c a 0 1 0 e b 0 1 0 e # 23252 difference c a 0 1 0 e b 0 0 1 e # 23253 difference c a 0 1 0 e b 0 1 0 e # 23254 difference c a 0 1 0 e b 0 0 1 # 23255 difference c a 0 1 0 e b 0 1 0 e # 23256 difference c a 0 1 0 e b 0 0 1 e # 23257 difference c a 0 1 0 e b 0 1 0 e # 23258 difference c a 0 1 0 e b 0 0 1 e # 23259 difference c a 0 1 0 e b 0 1 0 e # 23260 difference c a 0 1 0 e b 0 0 1 # 23261 difference c a 0 1 0 b 0 1 0 # 23262 difference c a 0 1 0 b 0 0 1 e # 23263 difference c a 0 1 0 b 0 1 0 # 23264 difference c a 0 1 0 b 0 0 1 e # 23265 difference c a 0 1 0 b 0 1 0 # 23266 difference c a 0 1 0 b 0 0 1 # 23267 difference c a 0 1 0 e b 0 1 0 e # 23268 difference c a 0 1 0 e b 0 1 0 e # 23269 difference c a 0 1 0 e b 0 1 0 e # 23270 difference c a 0 1 0 e b 0 1 0 e # 23271 difference c a 0 1 0 e b 0 1 0 e # 23272 difference c a 0 1 0 e b 0 1 0 # 23273 difference c a 0 1 0 e b 0 1 0 e # 23274 difference c a 0 1 0 e b 0 1 0 e # 23275 difference c a 0 1 0 e b 0 1 0 e # 23276 difference c a 0 1 0 e b 0 1 0 e # 23277 difference c a 0 1 0 e b 0 1 0 e # 23278 difference c a 0 1 0 e b 0 1 0 # 23279 difference c a 0 1 0 b 0 1 0 # 23280 difference c a 0 1 0 b 0 1 0 e # 23281 difference c a 0 1 0 b 0 1 0 # 23282 difference c a 0 1 0 b 0 1 0 e # 23283 difference c a 0 1 0 b 0 1 0 # 23284 difference c a 0 1 0 b 0 1 0 # 23285 difference c a 0 1 0 e b 0 1 0 e # 23286 difference c a 0 1 0 e b 0 1 1 e # 23287 difference c a 0 1 0 e b 0 1 0 e # 23288 difference c a 0 1 0 e b 0 1 1 e # 23289 difference c a 0 1 0 e b 0 1 0 e # 23290 difference c a 0 1 0 e b 0 1 1 # 23291 difference c a 0 1 0 e b 0 1 0 e # 23292 difference c a 0 1 0 e b 0 1 1 e # 23293 difference c a 0 1 0 e b 0 1 0 e # 23294 difference c a 0 1 0 e b 0 1 1 e # 23295 difference c a 0 1 0 e b 0 1 0 e # 23296 difference c a 0 1 0 e b 0 1 1 # 23297 difference c a 0 1 0 b 0 1 0 # 23298 difference c a 0 1 0 b 0 1 1 e # 23299 difference c a 0 1 0 b 0 1 0 # 23300 difference c a 0 1 0 b 0 1 1 e # 23301 difference c a 0 1 0 b 0 1 0 # 23302 difference c a 0 1 0 b 0 1 1 # 23303 difference c a 0 1 1 e b 0 1 1 e # 23304 difference c a 0 1 1 e b 0 0 0 e # 23305 difference c a 0 1 1 e b 0 1 1 e # 23306 difference c a 0 1 1 e b 0 0 0 e # 23307 difference c a 0 1 1 e b 0 1 1 e # 23308 difference c a 0 1 1 e b 0 0 0 # 23309 difference c a 0 1 1 e b 0 1 1 e # 23310 difference c a 0 1 1 e b 0 0 0 e # 23311 difference c a 0 1 1 e b 0 1 1 e # 23312 difference c a 0 1 1 e b 0 0 0 e # 23313 difference c a 0 1 1 e b 0 1 1 e # 23314 difference c a 0 1 1 e b 0 0 0 # 23315 difference c a 0 1 1 b 0 1 1 # 23316 difference c a 0 1 1 b 0 0 0 e # 23317 difference c a 0 1 1 b 0 1 1 # 23318 difference c a 0 1 1 b 0 0 0 e # 23319 difference c a 0 1 1 b 0 1 1 # 23320 difference c a 0 1 1 b 0 0 0 # 23321 difference c a 0 1 1 e b 0 1 1 e # 23322 difference c a 0 1 1 e b 0 0 1 e # 23323 difference c a 0 1 1 e b 0 1 1 e # 23324 difference c a 0 1 1 e b 0 0 1 e # 23325 difference c a 0 1 1 e b 0 1 1 e # 23326 difference c a 0 1 1 e b 0 0 1 # 23327 difference c a 0 1 1 e b 0 1 1 e # 23328 difference c a 0 1 1 e b 0 0 1 e # 23329 difference c a 0 1 1 e b 0 1 1 e # 23330 difference c a 0 1 1 e b 0 0 1 e # 23331 difference c a 0 1 1 e b 0 1 1 e # 23332 difference c a 0 1 1 e b 0 0 1 # 23333 difference c a 0 1 1 b 0 1 1 # 23334 difference c a 0 1 1 b 0 0 1 e # 23335 difference c a 0 1 1 b 0 1 1 # 23336 difference c a 0 1 1 b 0 0 1 e # 23337 difference c a 0 1 1 b 0 1 1 # 23338 difference c a 0 1 1 b 0 0 1 # 23339 difference c a 0 1 1 e b 0 1 1 e # 23340 difference c a 0 1 1 e b 0 1 0 e # 23341 difference c a 0 1 1 e b 0 1 1 e # 23342 difference c a 0 1 1 e b 0 1 0 e # 23343 difference c a 0 1 1 e b 0 1 1 e # 23344 difference c a 0 1 1 e b 0 1 0 # 23345 difference c a 0 1 1 e b 0 1 1 e # 23346 difference c a 0 1 1 e b 0 1 0 e # 23347 difference c a 0 1 1 e b 0 1 1 e # 23348 difference c a 0 1 1 e b 0 1 0 e # 23349 difference c a 0 1 1 e b 0 1 1 e # 23350 difference c a 0 1 1 e b 0 1 0 # 23351 difference c a 0 1 1 b 0 1 1 # 23352 difference c a 0 1 1 b 0 1 0 e # 23353 difference c a 0 1 1 b 0 1 1 # 23354 difference c a 0 1 1 b 0 1 0 e # 23355 difference c a 0 1 1 b 0 1 1 # 23356 difference c a 0 1 1 b 0 1 0 # 23357 difference c a 0 1 1 e b 0 1 1 e # 23358 difference c a 0 1 1 e b 0 1 1 e # 23359 difference c a 0 1 1 e b 0 1 1 e # 23360 difference c a 0 1 1 e b 0 1 1 e # 23361 difference c a 0 1 1 e b 0 1 1 e # 23362 difference c a 0 1 1 e b 0 1 1 # 23363 difference c a 0 1 1 e b 0 1 1 e # 23364 difference c a 0 1 1 e b 0 1 1 e # 23365 difference c a 0 1 1 e b 0 1 1 e # 23366 difference c a 0 1 1 e b 0 1 1 e # 23367 difference c a 0 1 1 e b 0 1 1 e # 23368 difference c a 0 1 1 e b 0 1 1 # 23369 difference c a 0 1 1 b 0 1 1 # 23370 difference c a 0 1 1 b 0 1 1 e # 23371 difference c a 0 1 1 b 0 1 1 # 23372 difference c a 0 1 1 b 0 1 1 e # 23373 difference c a 0 1 1 b 0 1 1 # 23374 difference c a 0 1 1 b 0 1 1 # 23375 difference c a 1 0 0 e b 1 0 0 e # 23376 difference c a 1 0 0 e b 1 0 0 e # 23377 difference c a 1 0 0 e b 1 0 0 e # 23378 difference c a 1 0 0 e b 1 0 0 f # 23379 difference c a 1 0 0 e b 1 0 0 e # 23380 difference c a 1 0 0 e b 1 0 0 # 23381 difference c a 1 0 0 f b 1 0 0 f # 23382 difference c a 1 0 0 f b 1 0 0 e # 23383 difference c a 1 0 0 f b 1 0 0 f # 23384 difference c a 1 0 0 f b 1 0 0 f # 23385 difference c a 1 0 0 f b 1 0 0 f # 23386 difference c a 1 0 0 f b 1 0 0 # 23387 difference c a 1 0 0 b 1 0 0 # 23388 difference c a 1 0 0 b 1 0 0 e # 23389 difference c a 1 0 0 0 b 1 0 0 0 # 23390 difference c a 1 0 0 0 b 1 0 0 f # 23391 difference c a 1 0 0 0 b 1 0 0 0 # 23392 difference c a 1 0 0 0 b 1 0 0 # 23393 difference c a 1 0 0 e b 1 0 0 e # 23394 difference c a 1 0 0 e b 1 0 1 e # 23395 difference c a 1 0 0 e b 1 0 0 e # 23396 difference c a 1 0 0 e b 1 0 1 f # 23397 difference c a 1 0 0 e b 1 0 0 e # 23398 difference c a 1 0 0 e b 1 0 1 0 # 23399 difference c a 1 0 0 f b 1 0 0 f # 23400 difference c a 1 0 0 f b 1 0 1 e # 23401 difference c a 1 0 0 f b 1 0 0 f # 23402 difference c a 1 0 0 f b 1 0 1 f # 23403 difference c a 1 0 0 f b 1 0 0 f # 23404 difference c a 1 0 0 f b 1 0 1 # 23405 difference c a 1 0 0 0 b 1 0 0 0 # 23406 difference c a 1 0 0 0 b 1 0 1 e # 23407 difference c a 1 0 0 b 1 0 0 # 23408 difference c a 1 0 0 b 1 0 1 f # 23409 difference c a 1 0 0 0 b 1 0 0 0 # 23410 difference c a 1 0 0 0 b 1 0 1 0 # 23411 difference c a 1 0 0 e b 1 0 0 e # 23412 difference c a 1 0 0 e b 1 1 0 e # 23413 difference c a 1 0 0 e b 1 0 0 e # 23414 difference c a 1 0 0 e b 1 1 0 f # 23415 difference c a 1 0 0 e b 1 0 0 e # 23416 difference c a 1 0 0 e b 1 1 0 # 23417 difference c a 1 0 0 f b 1 0 0 f # 23418 difference c a 1 0 0 f b 1 1 0 e # 23419 difference c a 1 0 0 f b 1 0 0 f # 23420 difference c a 1 0 0 f b 1 1 0 f # 23421 difference c a 1 0 0 f b 1 0 0 f # 23422 difference c a 1 0 0 f b 1 1 0 0 # 23423 difference c a 1 0 0 0 b 1 0 0 0 # 23424 difference c a 1 0 0 0 b 1 1 0 e # 23425 difference c a 1 0 0 0 b 1 0 0 0 # 23426 difference c a 1 0 0 0 b 1 1 0 f # 23427 difference c a 1 0 0 b 1 0 0 # 23428 difference c a 1 0 0 b 1 1 0 # 23429 difference c a 1 0 0 e b 1 0 0 e # 23430 difference c a 1 0 0 e b 1 1 1 e # 23431 difference c a 1 0 0 e b 1 0 0 e # 23432 difference c a 1 0 0 e b 1 1 1 f # 23433 difference c a 1 0 0 e b 1 0 0 e # 23434 difference c a 1 0 0 e b 1 1 1 0 # 23435 difference c a 1 0 0 f b 1 0 0 f # 23436 difference c a 1 0 0 f b 1 1 1 e # 23437 difference c a 1 0 0 f b 1 0 0 f # 23438 difference c a 1 0 0 f b 1 1 1 f # 23439 difference c a 1 0 0 f b 1 0 0 f # 23440 difference c a 1 0 0 f b 1 1 1 0 # 23441 difference c a 1 0 0 b 1 0 0 # 23442 difference c a 1 0 0 b 1 1 1 e # 23443 difference c a 1 0 0 0 b 1 0 0 0 # 23444 difference c a 1 0 0 0 b 1 1 1 f # 23445 difference c a 1 0 0 b 1 0 0 # 23446 difference c a 1 0 0 b 1 1 1 # 23447 difference c a 1 0 1 e b 1 0 1 e # 23448 difference c a 1 0 1 e b 1 0 0 e # 23449 difference c a 1 0 1 e b 1 0 1 e # 23450 difference c a 1 0 1 e b 1 0 0 f # 23451 difference c a 1 0 1 e b 1 0 1 e # 23452 difference c a 1 0 1 e b 1 0 0 0 # 23453 difference c a 1 0 1 f b 1 0 1 f # 23454 difference c a 1 0 1 f b 1 0 0 e # 23455 difference c a 1 0 1 f b 1 0 1 f # 23456 difference c a 1 0 1 f b 1 0 0 f # 23457 difference c a 1 0 1 f b 1 0 1 f # 23458 difference c a 1 0 1 f b 1 0 0 # 23459 difference c a 1 0 1 0 b 1 0 1 0 # 23460 difference c a 1 0 1 0 b 1 0 0 e # 23461 difference c a 1 0 1 b 1 0 1 # 23462 difference c a 1 0 1 b 1 0 0 f # 23463 difference c a 1 0 1 0 b 1 0 1 0 # 23464 difference c a 1 0 1 0 b 1 0 0 # 23465 difference c a 1 0 1 e b 1 0 1 e # 23466 difference c a 1 0 1 e b 1 0 1 e # 23467 difference c a 1 0 1 e b 1 0 1 e # 23468 difference c a 1 0 1 e b 1 0 1 f # 23469 difference c a 1 0 1 e b 1 0 1 e # 23470 difference c a 1 0 1 e b 1 0 1 0 # 23471 difference c a 1 0 1 f b 1 0 1 f # 23472 difference c a 1 0 1 f b 1 0 1 e # 23473 difference c a 1 0 1 f b 1 0 1 f # 23474 difference c a 1 0 1 f b 1 0 1 f # 23475 difference c a 1 0 1 f b 1 0 1 f # 23476 difference c a 1 0 1 f b 1 0 1 # 23477 difference c a 1 0 1 0 b 1 0 1 0 # 23478 difference c a 1 0 1 0 b 1 0 1 e # 23479 difference c a 1 0 1 b 1 0 1 # 23480 difference c a 1 0 1 b 1 0 1 f # 23481 difference c a 1 0 1 b 1 0 1 # 23482 difference c a 1 0 1 b 1 0 1 0 # 23483 difference c a 1 0 1 e b 1 0 1 e # 23484 difference c a 1 0 1 e b 1 1 0 e # 23485 difference c a 1 0 1 e b 1 0 1 e # 23486 difference c a 1 0 1 e b 1 1 0 f # 23487 difference c a 1 0 1 e b 1 0 1 e # 23488 difference c a 1 0 1 e b 1 1 0 0 # 23489 difference c a 1 0 1 f b 1 0 1 f # 23490 difference c a 1 0 1 f b 1 1 0 e # 23491 difference c a 1 0 1 f b 1 0 1 f # 23492 difference c a 1 0 1 f b 1 1 0 f # 23493 difference c a 1 0 1 f b 1 0 1 f # 23494 difference c a 1 0 1 f b 1 1 0 # 23495 difference c a 1 0 1 0 b 1 0 1 0 # 23496 difference c a 1 0 1 0 b 1 1 0 e # 23497 difference c a 1 0 1 0 b 1 0 1 0 # 23498 difference c a 1 0 1 0 b 1 1 0 f # 23499 difference c a 1 0 1 0 b 1 0 1 0 # 23500 difference c a 1 0 1 0 b 1 1 0 0 # 23501 difference c a 1 0 1 e b 1 0 1 e # 23502 difference c a 1 0 1 e b 1 1 1 e # 23503 difference c a 1 0 1 e b 1 0 1 e # 23504 difference c a 1 0 1 e b 1 1 1 f # 23505 difference c a 1 0 1 e b 1 0 1 e # 23506 difference c a 1 0 1 e b 1 1 1 # 23507 difference c a 1 0 1 f b 1 0 1 f # 23508 difference c a 1 0 1 f b 1 1 1 e # 23509 difference c a 1 0 1 f b 1 0 1 f # 23510 difference c a 1 0 1 f b 1 1 1 f # 23511 difference c a 1 0 1 f b 1 0 1 f # 23512 difference c a 1 0 1 f b 1 1 1 # 23513 difference c a 1 0 1 0 b 1 0 1 0 # 23514 difference c a 1 0 1 0 b 1 1 1 e # 23515 difference c a 1 0 1 b 1 0 1 # 23516 difference c a 1 0 1 b 1 1 1 f # 23517 difference c a 1 0 1 b 1 0 1 # 23518 difference c a 1 0 1 b 1 1 1 # 23519 difference c a 1 1 0 e b 1 1 0 e # 23520 difference c a 1 1 0 e b 1 0 0 e # 23521 difference c a 1 1 0 e b 1 1 0 e # 23522 difference c a 1 1 0 e b 1 0 0 f # 23523 difference c a 1 1 0 e b 1 1 0 e # 23524 difference c a 1 1 0 e b 1 0 0 0 # 23525 difference c a 1 1 0 f b 1 1 0 f # 23526 difference c a 1 1 0 f b 1 0 0 e # 23527 difference c a 1 1 0 f b 1 1 0 f # 23528 difference c a 1 1 0 f b 1 0 0 f # 23529 difference c a 1 1 0 f b 1 1 0 f # 23530 difference c a 1 1 0 f b 1 0 0 # 23531 difference c a 1 1 0 b 1 1 0 # 23532 difference c a 1 1 0 b 1 0 0 e # 23533 difference c a 1 1 0 b 1 1 0 # 23534 difference c a 1 1 0 b 1 0 0 f # 23535 difference c a 1 1 0 b 1 1 0 # 23536 difference c a 1 1 0 b 1 0 0 # 23537 difference c a 1 1 0 e b 1 1 0 e # 23538 difference c a 1 1 0 e b 1 0 1 e # 23539 difference c a 1 1 0 e b 1 1 0 e # 23540 difference c a 1 1 0 e b 1 0 1 f # 23541 difference c a 1 1 0 e b 1 1 0 e # 23542 difference c a 1 1 0 e b 1 0 1 # 23543 difference c a 1 1 0 f b 1 1 0 f # 23544 difference c a 1 1 0 f b 1 0 1 e # 23545 difference c a 1 1 0 f b 1 1 0 f # 23546 difference c a 1 1 0 f b 1 0 1 f # 23547 difference c a 1 1 0 f b 1 1 0 f # 23548 difference c a 1 1 0 f b 1 0 1 # 23549 difference c a 1 1 0 0 b 1 1 0 0 # 23550 difference c a 1 1 0 0 b 1 0 1 e # 23551 difference c a 1 1 0 b 1 1 0 # 23552 difference c a 1 1 0 b 1 0 1 f # 23553 difference c a 1 1 0 0 b 1 1 0 0 # 23554 difference c a 1 1 0 0 b 1 0 1 0 # 23555 difference c a 1 1 0 e b 1 1 0 e # 23556 difference c a 1 1 0 e b 1 1 0 e # 23557 difference c a 1 1 0 e b 1 1 0 e # 23558 difference c a 1 1 0 e b 1 1 0 f # 23559 difference c a 1 1 0 e b 1 1 0 e # 23560 difference c a 1 1 0 e b 1 1 0 0 # 23561 difference c a 1 1 0 f b 1 1 0 f # 23562 difference c a 1 1 0 f b 1 1 0 e # 23563 difference c a 1 1 0 f b 1 1 0 f # 23564 difference c a 1 1 0 f b 1 1 0 f # 23565 difference c a 1 1 0 f b 1 1 0 f # 23566 difference c a 1 1 0 f b 1 1 0 0 # 23567 difference c a 1 1 0 b 1 1 0 # 23568 difference c a 1 1 0 b 1 1 0 e # 23569 difference c a 1 1 0 0 b 1 1 0 0 # 23570 difference c a 1 1 0 0 b 1 1 0 f # 23571 difference c a 1 1 0 0 b 1 1 0 0 # 23572 difference c a 1 1 0 0 b 1 1 0 0 # 23573 difference c a 1 1 0 e b 1 1 0 e # 23574 difference c a 1 1 0 e b 1 1 1 e # 23575 difference c a 1 1 0 e b 1 1 0 e # 23576 difference c a 1 1 0 e b 1 1 1 f # 23577 difference c a 1 1 0 e b 1 1 0 e # 23578 difference c a 1 1 0 e b 1 1 1 0 # 23579 difference c a 1 1 0 f b 1 1 0 f # 23580 difference c a 1 1 0 f b 1 1 1 e # 23581 difference c a 1 1 0 f b 1 1 0 f # 23582 difference c a 1 1 0 f b 1 1 1 f # 23583 difference c a 1 1 0 f b 1 1 0 f # 23584 difference c a 1 1 0 f b 1 1 1 0 # 23585 difference c a 1 1 0 0 b 1 1 0 0 # 23586 difference c a 1 1 0 0 b 1 1 1 e # 23587 difference c a 1 1 0 0 b 1 1 0 0 # 23588 difference c a 1 1 0 0 b 1 1 1 f # 23589 difference c a 1 1 0 b 1 1 0 # 23590 difference c a 1 1 0 b 1 1 1 0 # 23591 difference c a 1 1 1 e b 1 1 1 e # 23592 difference c a 1 1 1 e b 1 0 0 e # 23593 difference c a 1 1 1 e b 1 1 1 e # 23594 difference c a 1 1 1 e b 1 0 0 f # 23595 difference c a 1 1 1 e b 1 1 1 e # 23596 difference c a 1 1 1 e b 1 0 0 0 # 23597 difference c a 1 1 1 f b 1 1 1 f # 23598 difference c a 1 1 1 f b 1 0 0 e # 23599 difference c a 1 1 1 f b 1 1 1 f # 23600 difference c a 1 1 1 f b 1 0 0 f # 23601 difference c a 1 1 1 f b 1 1 1 f # 23602 difference c a 1 1 1 f b 1 0 0 0 # 23603 difference c a 1 1 1 0 b 1 1 1 0 # 23604 difference c a 1 1 1 0 b 1 0 0 e # 23605 difference c a 1 1 1 0 b 1 1 1 0 # 23606 difference c a 1 1 1 0 b 1 0 0 f # 23607 difference c a 1 1 1 b 1 1 1 # 23608 difference c a 1 1 1 b 1 0 0 # 23609 difference c a 1 1 1 e b 1 1 1 e # 23610 difference c a 1 1 1 e b 1 0 1 e # 23611 difference c a 1 1 1 e b 1 1 1 e # 23612 difference c a 1 1 1 e b 1 0 1 f # 23613 difference c a 1 1 1 e b 1 1 1 e # 23614 difference c a 1 1 1 e b 1 0 1 0 # 23615 difference c a 1 1 1 f b 1 1 1 f # 23616 difference c a 1 1 1 f b 1 0 1 e # 23617 difference c a 1 1 1 f b 1 1 1 f # 23618 difference c a 1 1 1 f b 1 0 1 f # 23619 difference c a 1 1 1 f b 1 1 1 f # 23620 difference c a 1 1 1 f b 1 0 1 # 23621 difference c a 1 1 1 b 1 1 1 # 23622 difference c a 1 1 1 b 1 0 1 e # 23623 difference c a 1 1 1 b 1 1 1 # 23624 difference c a 1 1 1 b 1 0 1 f # 23625 difference c a 1 1 1 0 b 1 1 1 0 # 23626 difference c a 1 1 1 0 b 1 0 1 0 # 23627 difference c a 1 1 1 e b 1 1 1 e # 23628 difference c a 1 1 1 e b 1 1 0 e # 23629 difference c a 1 1 1 e b 1 1 1 e # 23630 difference c a 1 1 1 e b 1 1 0 f # 23631 difference c a 1 1 1 e b 1 1 1 e # 23632 difference c a 1 1 1 e b 1 1 0 0 # 23633 difference c a 1 1 1 f b 1 1 1 f # 23634 difference c a 1 1 1 f b 1 1 0 e # 23635 difference c a 1 1 1 f b 1 1 1 f # 23636 difference c a 1 1 1 f b 1 1 0 f # 23637 difference c a 1 1 1 f b 1 1 1 f # 23638 difference c a 1 1 1 f b 1 1 0 # 23639 difference c a 1 1 1 0 b 1 1 1 0 # 23640 difference c a 1 1 1 0 b 1 1 0 e # 23641 difference c a 1 1 1 0 b 1 1 1 0 # 23642 difference c a 1 1 1 0 b 1 1 0 f # 23643 difference c a 1 1 1 0 b 1 1 1 0 # 23644 difference c a 1 1 1 0 b 1 1 0 0 # 23645 difference c a 1 1 1 e b 1 1 1 e # 23646 difference c a 1 1 1 e b 1 1 1 e # 23647 difference c a 1 1 1 e b 1 1 1 e # 23648 difference c a 1 1 1 e b 1 1 1 f # 23649 difference c a 1 1 1 e b 1 1 1 e # 23650 difference c a 1 1 1 e b 1 1 1 0 # 23651 difference c a 1 1 1 f b 1 1 1 f # 23652 difference c a 1 1 1 f b 1 1 1 e # 23653 difference c a 1 1 1 f b 1 1 1 f # 23654 difference c a 1 1 1 f b 1 1 1 f # 23655 difference c a 1 1 1 f b 1 1 1 f # 23656 difference c a 1 1 1 f b 1 1 1 0 # 23657 difference c a 1 1 1 b 1 1 1 # 23658 difference c a 1 1 1 b 1 1 1 e # 23659 difference c a 1 1 1 b 1 1 1 # 23660 difference c a 1 1 1 b 1 1 1 f # 23661 difference c a 1 1 1 0 b 1 1 1 0 # 23662 difference c a 1 1 1 0 b 1 1 1 # 23663 difference c a 31 0 0 e b 31 0 0 e # 23664 difference c a 31 0 0 e b 31 0 0 e # 23665 difference c a 31 0 0 e b 31 0 0 e # 23666 difference c a 31 0 0 e b 31 0 0 f # 23667 difference c a 31 0 0 e b 31 0 0 e # 23668 difference c a 31 0 0 e b 31 0 0 0 3 5 6 7 8 9 10 12 13 14 16 19 20 24 29 30 # 23669 difference c a 31 0 0 f b 31 0 0 f # 23670 difference c a 31 0 0 f b 31 0 0 e # 23671 difference c a 31 0 0 f b 31 0 0 f # 23672 difference c a 31 0 0 f b 31 0 0 f # 23673 difference c a 31 0 0 f b 31 0 0 f # 23674 difference c a 31 0 0 f b 31 0 0 4 5 7 8 9 11 12 14 18 19 20 21 24 25 26 29 # 23675 difference c a 31 0 0 0 2 4 5 7 15 16 18 19 21 23 24 25 26 30 b 31 0 0 0 2 4 5 7 15 16 18 19 21 23 24 25 26 30 # 23676 difference c a 31 0 0 0 2 4 5 7 15 16 18 19 21 23 24 25 26 30 b 31 0 0 e # 23677 difference c a 31 0 0 0 1 4 6 8 10 12 15 16 17 19 22 24 25 29 30 b 31 0 0 0 1 4 6 8 10 12 15 16 17 19 22 24 25 29 30 # 23678 difference c a 31 0 0 0 1 4 6 8 10 12 15 16 17 19 22 24 25 29 30 b 31 0 0 f # 23679 difference c a 31 0 0 5 7 11 13 15 16 20 21 24 27 28 30 b 31 0 0 5 7 11 13 15 16 20 21 24 27 28 30 # 23680 difference c a 31 0 0 5 7 11 13 15 16 20 21 24 27 28 30 b 31 0 0 0 1 4 6 7 8 13 14 16 17 18 20 21 22 23 28 29 # 23681 difference c a 31 0 0 e b 31 0 0 e # 23682 difference c a 31 0 0 e b 31 0 1 e # 23683 difference c a 31 0 0 e b 31 0 0 e # 23684 difference c a 31 0 0 e b 31 0 1 f # 23685 difference c a 31 0 0 e b 31 0 0 e # 23686 difference c a 31 0 0 e b 31 0 1 0 2 8 12 20 23 24 30 # 23687 difference c a 31 0 0 f b 31 0 0 f # 23688 difference c a 31 0 0 f b 31 0 1 e # 23689 difference c a 31 0 0 f b 31 0 0 f # 23690 difference c a 31 0 0 f b 31 0 1 f # 23691 difference c a 31 0 0 f b 31 0 0 f # 23692 difference c a 31 0 0 f b 31 0 1 1 2 3 5 8 9 10 12 14 16 17 18 20 21 23 24 25 27 29 30 # 23693 difference c a 31 0 0 0 3 4 9 11 12 13 14 15 17 18 19 20 21 23 28 29 b 31 0 0 0 3 4 9 11 12 13 14 15 17 18 19 20 21 23 28 29 # 23694 difference c a 31 0 0 0 3 4 9 11 12 13 14 15 17 18 19 20 21 23 28 29 b 31 0 1 e # 23695 difference c a 31 0 0 0 2 3 6 8 9 10 11 12 15 16 19 20 22 23 24 26 28 29 b 31 0 0 0 2 3 6 8 9 10 11 12 15 16 19 20 22 23 24 26 28 29 # 23696 difference c a 31 0 0 0 2 3 6 8 9 10 11 12 15 16 19 20 22 23 24 26 28 29 b 31 0 1 f # 23697 difference c a 31 0 0 0 4 10 11 15 17 20 21 27 b 31 0 0 0 4 10 11 15 17 20 21 27 # 23698 difference c a 31 0 0 0 4 10 11 15 17 20 21 27 b 31 0 1 1 3 4 5 7 9 10 12 14 15 16 23 24 25 29 30 # 23699 difference c a 31 0 0 e b 31 0 0 e # 23700 difference c a 31 0 0 e b 31 1 0 e # 23701 difference c a 31 0 0 e b 31 0 0 e # 23702 difference c a 31 0 0 e b 31 1 0 f # 23703 difference c a 31 0 0 e b 31 0 0 e # 23704 difference c a 31 0 0 e b 31 1 0 0 1 6 11 13 16 17 18 22 23 24 25 29 # 23705 difference c a 31 0 0 f b 31 0 0 f # 23706 difference c a 31 0 0 f b 31 1 0 e # 23707 difference c a 31 0 0 f b 31 0 0 f # 23708 difference c a 31 0 0 f b 31 1 0 f # 23709 difference c a 31 0 0 f b 31 0 0 f # 23710 difference c a 31 0 0 f b 31 1 0 0 1 5 7 9 11 15 18 20 21 23 24 25 26 29 30 # 23711 difference c a 31 0 0 1 3 4 5 6 7 9 10 12 14 15 19 20 23 26 27 29 30 b 31 0 0 1 3 4 5 6 7 9 10 12 14 15 19 20 23 26 27 29 30 # 23712 difference c a 31 0 0 1 3 4 5 6 7 9 10 12 14 15 19 20 23 26 27 29 30 b 31 1 0 e # 23713 difference c a 31 0 0 0 2 5 15 16 19 21 26 28 29 b 31 0 0 0 2 5 15 16 19 21 26 28 29 # 23714 difference c a 31 0 0 0 2 5 15 16 19 21 26 28 29 b 31 1 0 f # 23715 difference c a 31 0 0 0 4 6 7 9 11 13 16 17 18 19 21 22 27 30 b 31 0 0 0 4 6 7 9 11 13 16 17 18 19 21 22 27 30 # 23716 difference c a 31 0 0 0 4 6 7 9 11 13 16 17 18 19 21 22 27 30 b 31 1 0 8 11 15 16 17 19 22 23 28 # 23717 difference c a 31 0 0 e b 31 0 0 e # 23718 difference c a 31 0 0 e b 31 1 1 e # 23719 difference c a 31 0 0 e b 31 0 0 e # 23720 difference c a 31 0 0 e b 31 1 1 f # 23721 difference c a 31 0 0 e b 31 0 0 e # 23722 difference c a 31 0 0 e b 31 1 1 0 1 5 6 8 9 10 11 18 19 21 22 25 27 28 29 30 # 23723 difference c a 31 0 0 f b 31 0 0 f # 23724 difference c a 31 0 0 f b 31 1 1 e # 23725 difference c a 31 0 0 f b 31 0 0 f # 23726 difference c a 31 0 0 f b 31 1 1 f # 23727 difference c a 31 0 0 f b 31 0 0 f # 23728 difference c a 31 0 0 f b 31 1 1 0 1 6 7 9 10 13 14 15 17 22 23 24 25 27 28 30 # 23729 difference c a 31 0 0 3 5 6 9 10 11 13 15 20 21 23 24 26 27 b 31 0 0 3 5 6 9 10 11 13 15 20 21 23 24 26 27 # 23730 difference c a 31 0 0 3 5 6 9 10 11 13 15 20 21 23 24 26 27 b 31 1 1 e # 23731 difference c a 31 0 0 0 2 4 8 9 14 18 19 21 24 25 30 b 31 0 0 0 2 4 8 9 14 18 19 21 24 25 30 # 23732 difference c a 31 0 0 0 2 4 8 9 14 18 19 21 24 25 30 b 31 1 1 f # 23733 difference c a 31 0 0 0 1 2 4 6 8 9 12 13 17 18 21 22 23 25 26 27 28 30 b 31 0 0 0 1 2 4 6 8 9 12 13 17 18 21 22 23 25 26 27 28 30 # 23734 difference c a 31 0 0 0 1 2 4 6 8 9 12 13 17 18 21 22 23 25 26 27 28 30 b 31 1 1 0 2 5 7 8 9 12 13 14 17 21 25 28 29 # 23735 difference c a 31 0 1 e b 31 0 1 e # 23736 difference c a 31 0 1 e b 31 0 0 e # 23737 difference c a 31 0 1 e b 31 0 1 e # 23738 difference c a 31 0 1 e b 31 0 0 f # 23739 difference c a 31 0 1 e b 31 0 1 e # 23740 difference c a 31 0 1 e b 31 0 0 0 4 6 9 10 11 12 13 14 15 16 17 22 24 25 26 28 30 # 23741 difference c a 31 0 1 f b 31 0 1 f # 23742 difference c a 31 0 1 f b 31 0 0 e # 23743 difference c a 31 0 1 f b 31 0 1 f # 23744 difference c a 31 0 1 f b 31 0 0 f # 23745 difference c a 31 0 1 f b 31 0 1 f # 23746 difference c a 31 0 1 f b 31 0 0 0 1 2 6 7 9 10 14 17 18 19 20 21 22 24 27 29 30 # 23747 difference c a 31 0 1 0 2 4 5 7 9 10 11 14 15 16 18 19 21 23 25 29 b 31 0 1 0 2 4 5 7 9 10 11 14 15 16 18 19 21 23 25 29 # 23748 difference c a 31 0 1 0 2 4 5 7 9 10 11 14 15 16 18 19 21 23 25 29 b 31 0 0 e # 23749 difference c a 31 0 1 2 5 6 9 14 18 19 20 21 23 27 28 30 b 31 0 1 2 5 6 9 14 18 19 20 21 23 27 28 30 # 23750 difference c a 31 0 1 2 5 6 9 14 18 19 20 21 23 27 28 30 b 31 0 0 f # 23751 difference c a 31 0 1 0 1 2 5 7 9 10 11 14 16 19 25 29 b 31 0 1 0 1 2 5 7 9 10 11 14 16 19 25 29 # 23752 difference c a 31 0 1 0 1 2 5 7 9 10 11 14 16 19 25 29 b 31 0 0 3 4 8 13 15 16 20 21 22 23 28 30 # 23753 difference c a 31 0 1 e b 31 0 1 e # 23754 difference c a 31 0 1 e b 31 0 1 e # 23755 difference c a 31 0 1 e b 31 0 1 e # 23756 difference c a 31 0 1 e b 31 0 1 f # 23757 difference c a 31 0 1 e b 31 0 1 e # 23758 difference c a 31 0 1 e b 31 0 1 1 2 6 7 8 9 14 18 19 20 21 23 24 25 28 29 # 23759 difference c a 31 0 1 f b 31 0 1 f # 23760 difference c a 31 0 1 f b 31 0 1 e # 23761 difference c a 31 0 1 f b 31 0 1 f # 23762 difference c a 31 0 1 f b 31 0 1 f # 23763 difference c a 31 0 1 f b 31 0 1 f # 23764 difference c a 31 0 1 f b 31 0 1 3 4 6 7 9 11 13 14 15 17 18 19 20 23 27 # 23765 difference c a 31 0 1 0 1 3 4 5 6 7 12 21 22 26 28 29 b 31 0 1 0 1 3 4 5 6 7 12 21 22 26 28 29 # 23766 difference c a 31 0 1 0 1 3 4 5 6 7 12 21 22 26 28 29 b 31 0 1 e # 23767 difference c a 31 0 1 0 1 2 3 5 6 11 12 13 18 19 20 22 23 24 26 27 29 b 31 0 1 0 1 2 3 5 6 11 12 13 18 19 20 22 23 24 26 27 29 # 23768 difference c a 31 0 1 0 1 2 3 5 6 11 12 13 18 19 20 22 23 24 26 27 29 b 31 0 1 f # 23769 difference c a 31 0 1 4 6 8 10 11 15 16 17 21 24 27 28 29 b 31 0 1 4 6 8 10 11 15 16 17 21 24 27 28 29 # 23770 difference c a 31 0 1 4 6 8 10 11 15 16 17 21 24 27 28 29 b 31 0 1 0 2 7 12 13 16 18 20 21 24 25 28 30 # 23771 difference c a 31 0 1 e b 31 0 1 e # 23772 difference c a 31 0 1 e b 31 1 0 e # 23773 difference c a 31 0 1 e b 31 0 1 e # 23774 difference c a 31 0 1 e b 31 1 0 f # 23775 difference c a 31 0 1 e b 31 0 1 e # 23776 difference c a 31 0 1 e b 31 1 0 0 1 3 5 8 9 10 13 14 15 17 18 19 20 21 23 24 28 29 30 # 23777 difference c a 31 0 1 f b 31 0 1 f # 23778 difference c a 31 0 1 f b 31 1 0 e # 23779 difference c a 31 0 1 f b 31 0 1 f # 23780 difference c a 31 0 1 f b 31 1 0 f # 23781 difference c a 31 0 1 f b 31 0 1 f # 23782 difference c a 31 0 1 f b 31 1 0 0 1 3 6 7 9 16 20 22 23 24 25 28 # 23783 difference c a 31 0 1 0 2 4 5 7 11 14 15 18 19 26 30 b 31 0 1 0 2 4 5 7 11 14 15 18 19 26 30 # 23784 difference c a 31 0 1 0 2 4 5 7 11 14 15 18 19 26 30 b 31 1 0 e # 23785 difference c a 31 0 1 1 3 4 8 10 12 15 17 18 20 21 22 26 27 28 b 31 0 1 1 3 4 8 10 12 15 17 18 20 21 22 26 27 28 # 23786 difference c a 31 0 1 1 3 4 8 10 12 15 17 18 20 21 22 26 27 28 b 31 1 0 f # 23787 difference c a 31 0 1 0 1 2 3 4 6 10 11 16 17 18 19 20 21 22 25 27 28 b 31 0 1 0 1 2 3 4 6 10 11 16 17 18 19 20 21 22 25 27 28 # 23788 difference c a 31 0 1 0 1 2 3 4 6 10 11 16 17 18 19 20 21 22 25 27 28 b 31 1 0 0 5 9 11 13 15 18 21 24 26 27 28 # 23789 difference c a 31 0 1 e b 31 0 1 e # 23790 difference c a 31 0 1 e b 31 1 1 e # 23791 difference c a 31 0 1 e b 31 0 1 e # 23792 difference c a 31 0 1 e b 31 1 1 f # 23793 difference c a 31 0 1 e b 31 0 1 e # 23794 difference c a 31 0 1 e b 31 1 1 0 1 2 4 5 6 9 10 13 15 17 18 19 20 22 30 # 23795 difference c a 31 0 1 f b 31 0 1 f # 23796 difference c a 31 0 1 f b 31 1 1 e # 23797 difference c a 31 0 1 f b 31 0 1 f # 23798 difference c a 31 0 1 f b 31 1 1 f # 23799 difference c a 31 0 1 f b 31 0 1 f # 23800 difference c a 31 0 1 f b 31 1 1 0 2 5 6 7 9 10 12 14 15 16 17 18 20 24 25 28 29 # 23801 difference c a 31 0 1 0 9 10 11 12 14 15 17 18 19 21 23 24 25 27 28 b 31 0 1 0 9 10 11 12 14 15 17 18 19 21 23 24 25 27 28 # 23802 difference c a 31 0 1 0 9 10 11 12 14 15 17 18 19 21 23 24 25 27 28 b 31 1 1 e # 23803 difference c a 31 0 1 0 4 5 13 16 17 19 22 24 25 27 28 29 b 31 0 1 0 4 5 13 16 17 19 22 24 25 27 28 29 # 23804 difference c a 31 0 1 0 4 5 13 16 17 19 22 24 25 27 28 29 b 31 1 1 f # 23805 difference c a 31 0 1 0 2 6 8 10 11 12 20 21 23 24 27 30 b 31 0 1 0 2 6 8 10 11 12 20 21 23 24 27 30 # 23806 difference c a 31 0 1 0 2 6 8 10 11 12 20 21 23 24 27 30 b 31 1 1 2 4 8 10 11 16 18 21 25 26 28 29 # 23807 difference c a 31 1 0 e b 31 1 0 e # 23808 difference c a 31 1 0 e b 31 0 0 e # 23809 difference c a 31 1 0 e b 31 1 0 e # 23810 difference c a 31 1 0 e b 31 0 0 f # 23811 difference c a 31 1 0 e b 31 1 0 e # 23812 difference c a 31 1 0 e b 31 0 0 2 3 6 12 13 16 17 21 22 27 30 # 23813 difference c a 31 1 0 f b 31 1 0 f # 23814 difference c a 31 1 0 f b 31 0 0 e # 23815 difference c a 31 1 0 f b 31 1 0 f # 23816 difference c a 31 1 0 f b 31 0 0 f # 23817 difference c a 31 1 0 f b 31 1 0 f # 23818 difference c a 31 1 0 f b 31 0 0 0 1 2 4 9 10 11 12 13 15 16 22 23 24 28 # 23819 difference c a 31 1 0 0 5 6 7 9 10 11 13 16 18 19 20 21 22 23 24 29 30 b 31 1 0 0 5 6 7 9 10 11 13 16 18 19 20 21 22 23 24 29 30 # 23820 difference c a 31 1 0 0 5 6 7 9 10 11 13 16 18 19 20 21 22 23 24 29 30 b 31 0 0 e # 23821 difference c a 31 1 0 1 5 7 9 10 15 17 18 20 21 23 25 27 29 b 31 1 0 1 5 7 9 10 15 17 18 20 21 23 25 27 29 # 23822 difference c a 31 1 0 1 5 7 9 10 15 17 18 20 21 23 25 27 29 b 31 0 0 f # 23823 difference c a 31 1 0 1 2 3 5 8 10 12 14 15 16 17 19 20 23 24 25 26 29 30 b 31 1 0 1 2 3 5 8 10 12 14 15 16 17 19 20 23 24 25 26 29 30 # 23824 difference c a 31 1 0 1 2 3 5 8 10 12 14 15 16 17 19 20 23 24 25 26 29 30 b 31 0 0 0 1 2 3 6 11 12 13 15 16 19 20 22 23 25 26 27 29 30 # 23825 difference c a 31 1 0 e b 31 1 0 e # 23826 difference c a 31 1 0 e b 31 0 1 e # 23827 difference c a 31 1 0 e b 31 1 0 e # 23828 difference c a 31 1 0 e b 31 0 1 f # 23829 difference c a 31 1 0 e b 31 1 0 e # 23830 difference c a 31 1 0 e b 31 0 1 0 1 3 4 5 6 9 10 12 13 14 15 16 17 18 20 23 24 28 # 23831 difference c a 31 1 0 f b 31 1 0 f # 23832 difference c a 31 1 0 f b 31 0 1 e # 23833 difference c a 31 1 0 f b 31 1 0 f # 23834 difference c a 31 1 0 f b 31 0 1 f # 23835 difference c a 31 1 0 f b 31 1 0 f # 23836 difference c a 31 1 0 f b 31 0 1 0 1 2 4 5 15 18 19 23 25 27 29 30 # 23837 difference c a 31 1 0 1 2 3 4 6 8 10 17 20 21 23 27 28 30 b 31 1 0 1 2 3 4 6 8 10 17 20 21 23 27 28 30 # 23838 difference c a 31 1 0 1 2 3 4 6 8 10 17 20 21 23 27 28 30 b 31 0 1 e # 23839 difference c a 31 1 0 0 1 2 3 4 6 7 8 9 10 13 14 15 19 24 26 27 30 b 31 1 0 0 1 2 3 4 6 7 8 9 10 13 14 15 19 24 26 27 30 # 23840 difference c a 31 1 0 0 1 2 3 4 6 7 8 9 10 13 14 15 19 24 26 27 30 b 31 0 1 f # 23841 difference c a 31 1 0 3 4 5 6 7 8 9 10 11 13 14 18 19 20 24 25 27 28 b 31 1 0 3 4 5 6 7 8 9 10 11 13 14 18 19 20 24 25 27 28 # 23842 difference c a 31 1 0 3 4 5 6 7 8 9 10 11 13 14 18 19 20 24 25 27 28 b 31 0 1 1 2 4 5 6 7 9 12 18 22 26 27 # 23843 difference c a 31 1 0 e b 31 1 0 e # 23844 difference c a 31 1 0 e b 31 1 0 e # 23845 difference c a 31 1 0 e b 31 1 0 e # 23846 difference c a 31 1 0 e b 31 1 0 f # 23847 difference c a 31 1 0 e b 31 1 0 e # 23848 difference c a 31 1 0 e b 31 1 0 0 1 3 4 6 8 9 10 12 15 16 17 18 22 23 28 29 30 # 23849 difference c a 31 1 0 f b 31 1 0 f # 23850 difference c a 31 1 0 f b 31 1 0 e # 23851 difference c a 31 1 0 f b 31 1 0 f # 23852 difference c a 31 1 0 f b 31 1 0 f # 23853 difference c a 31 1 0 f b 31 1 0 f # 23854 difference c a 31 1 0 f b 31 1 0 0 1 3 5 6 7 10 11 16 24 25 26 28 # 23855 difference c a 31 1 0 2 4 5 6 7 10 11 12 13 15 16 20 21 24 26 28 30 b 31 1 0 2 4 5 6 7 10 11 12 13 15 16 20 21 24 26 28 30 # 23856 difference c a 31 1 0 2 4 5 6 7 10 11 12 13 15 16 20 21 24 26 28 30 b 31 1 0 e # 23857 difference c a 31 1 0 1 2 3 6 8 10 11 12 13 14 15 16 21 22 23 24 25 26 27 28 30 b 31 1 0 1 2 3 6 8 10 11 12 13 14 15 16 21 22 23 24 25 26 27 28 30 # 23858 difference c a 31 1 0 1 2 3 6 8 10 11 12 13 14 15 16 21 22 23 24 25 26 27 28 30 b 31 1 0 f # 23859 difference c a 31 1 0 1 5 6 7 8 10 13 16 17 19 22 25 26 28 30 b 31 1 0 1 5 6 7 8 10 13 16 17 19 22 25 26 28 30 # 23860 difference c a 31 1 0 1 5 6 7 8 10 13 16 17 19 22 25 26 28 30 b 31 1 0 4 9 11 12 13 16 18 19 20 23 26 27 28 30 # 23861 difference c a 31 1 0 e b 31 1 0 e # 23862 difference c a 31 1 0 e b 31 1 1 e # 23863 difference c a 31 1 0 e b 31 1 0 e # 23864 difference c a 31 1 0 e b 31 1 1 f # 23865 difference c a 31 1 0 e b 31 1 0 e # 23866 difference c a 31 1 0 e b 31 1 1 3 5 7 8 9 10 11 12 13 14 16 18 20 22 23 24 26 # 23867 difference c a 31 1 0 f b 31 1 0 f # 23868 difference c a 31 1 0 f b 31 1 1 e # 23869 difference c a 31 1 0 f b 31 1 0 f # 23870 difference c a 31 1 0 f b 31 1 1 f # 23871 difference c a 31 1 0 f b 31 1 0 f # 23872 difference c a 31 1 0 f b 31 1 1 1 4 7 10 11 13 14 15 18 19 21 22 24 # 23873 difference c a 31 1 0 0 2 6 7 10 12 16 17 19 20 22 24 28 29 30 b 31 1 0 0 2 6 7 10 12 16 17 19 20 22 24 28 29 30 # 23874 difference c a 31 1 0 0 2 6 7 10 12 16 17 19 20 22 24 28 29 30 b 31 1 1 e # 23875 difference c a 31 1 0 0 2 3 5 6 9 11 12 13 16 19 21 22 24 25 26 27 28 29 30 b 31 1 0 0 2 3 5 6 9 11 12 13 16 19 21 22 24 25 26 27 28 29 30 # 23876 difference c a 31 1 0 0 2 3 5 6 9 11 12 13 16 19 21 22 24 25 26 27 28 29 30 b 31 1 1 f # 23877 difference c a 31 1 0 4 8 11 12 16 17 18 19 20 30 b 31 1 0 4 8 11 12 16 17 18 19 20 30 # 23878 difference c a 31 1 0 4 8 11 12 16 17 18 19 20 30 b 31 1 1 0 1 5 7 8 9 11 12 15 18 22 23 27 29 30 # 23879 difference c a 31 1 1 e b 31 1 1 e # 23880 difference c a 31 1 1 e b 31 0 0 e # 23881 difference c a 31 1 1 e b 31 1 1 e # 23882 difference c a 31 1 1 e b 31 0 0 f # 23883 difference c a 31 1 1 e b 31 1 1 e # 23884 difference c a 31 1 1 e b 31 0 0 4 6 7 9 10 14 16 17 22 23 24 27 28 29 # 23885 difference c a 31 1 1 f b 31 1 1 f # 23886 difference c a 31 1 1 f b 31 0 0 e # 23887 difference c a 31 1 1 f b 31 1 1 f # 23888 difference c a 31 1 1 f b 31 0 0 f # 23889 difference c a 31 1 1 f b 31 1 1 f # 23890 difference c a 31 1 1 f b 31 0 0 0 2 5 12 13 16 19 21 22 24 26 27 28 29 # 23891 difference c a 31 1 1 0 2 4 5 6 7 11 12 13 14 16 18 19 20 21 22 24 25 26 28 29 30 b 31 1 1 0 2 4 5 6 7 11 12 13 14 16 18 19 20 21 22 24 25 26 28 29 30 # 23892 difference c a 31 1 1 0 2 4 5 6 7 11 12 13 14 16 18 19 20 21 22 24 25 26 28 29 30 b 31 0 0 e # 23893 difference c a 31 1 1 0 1 2 4 5 7 8 9 10 11 12 13 14 15 16 17 18 20 23 26 27 29 b 31 1 1 0 1 2 4 5 7 8 9 10 11 12 13 14 15 16 17 18 20 23 26 27 29 # 23894 difference c a 31 1 1 0 1 2 4 5 7 8 9 10 11 12 13 14 15 16 17 18 20 23 26 27 29 b 31 0 0 f # 23895 difference c a 31 1 1 1 3 5 8 9 11 12 15 16 21 22 25 27 29 b 31 1 1 1 3 5 8 9 11 12 15 16 21 22 25 27 29 # 23896 difference c a 31 1 1 1 3 5 8 9 11 12 15 16 21 22 25 27 29 b 31 0 0 1 2 5 8 10 13 14 15 16 20 23 24 27 # 23897 difference c a 31 1 1 e b 31 1 1 e # 23898 difference c a 31 1 1 e b 31 0 1 e # 23899 difference c a 31 1 1 e b 31 1 1 e # 23900 difference c a 31 1 1 e b 31 0 1 f # 23901 difference c a 31 1 1 e b 31 1 1 e # 23902 difference c a 31 1 1 e b 31 0 1 0 1 2 5 6 7 11 14 18 19 27 28 29 # 23903 difference c a 31 1 1 f b 31 1 1 f # 23904 difference c a 31 1 1 f b 31 0 1 e # 23905 difference c a 31 1 1 f b 31 1 1 f # 23906 difference c a 31 1 1 f b 31 0 1 f # 23907 difference c a 31 1 1 f b 31 1 1 f # 23908 difference c a 31 1 1 f b 31 0 1 0 1 4 5 6 7 12 13 17 21 24 25 26 27 28 29 # 23909 difference c a 31 1 1 0 8 14 17 18 19 23 26 30 b 31 1 1 0 8 14 17 18 19 23 26 30 # 23910 difference c a 31 1 1 0 8 14 17 18 19 23 26 30 b 31 0 1 e # 23911 difference c a 31 1 1 1 5 6 7 8 15 16 18 19 22 24 26 30 b 31 1 1 1 5 6 7 8 15 16 18 19 22 24 26 30 # 23912 difference c a 31 1 1 1 5 6 7 8 15 16 18 19 22 24 26 30 b 31 0 1 f # 23913 difference c a 31 1 1 0 4 5 6 7 8 10 11 12 15 20 21 27 28 29 30 b 31 1 1 0 4 5 6 7 8 10 11 12 15 20 21 27 28 29 30 # 23914 difference c a 31 1 1 0 4 5 6 7 8 10 11 12 15 20 21 27 28 29 30 b 31 0 1 0 2 3 5 6 7 8 10 11 12 14 15 16 21 23 25 26 28 29 30 # 23915 difference c a 31 1 1 e b 31 1 1 e # 23916 difference c a 31 1 1 e b 31 1 0 e # 23917 difference c a 31 1 1 e b 31 1 1 e # 23918 difference c a 31 1 1 e b 31 1 0 f # 23919 difference c a 31 1 1 e b 31 1 1 e # 23920 difference c a 31 1 1 e b 31 1 0 0 1 2 3 5 6 8 9 12 13 15 16 17 18 19 21 27 29 30 # 23921 difference c a 31 1 1 f b 31 1 1 f # 23922 difference c a 31 1 1 f b 31 1 0 e # 23923 difference c a 31 1 1 f b 31 1 1 f # 23924 difference c a 31 1 1 f b 31 1 0 f # 23925 difference c a 31 1 1 f b 31 1 1 f # 23926 difference c a 31 1 1 f b 31 1 0 1 2 3 5 6 9 10 11 12 20 22 24 27 28 # 23927 difference c a 31 1 1 0 3 4 5 6 10 14 15 16 19 21 22 23 24 25 28 29 30 b 31 1 1 0 3 4 5 6 10 14 15 16 19 21 22 23 24 25 28 29 30 # 23928 difference c a 31 1 1 0 3 4 5 6 10 14 15 16 19 21 22 23 24 25 28 29 30 b 31 1 0 e # 23929 difference c a 31 1 1 0 3 4 8 9 13 15 17 21 23 24 28 29 b 31 1 1 0 3 4 8 9 13 15 17 21 23 24 28 29 # 23930 difference c a 31 1 1 0 3 4 8 9 13 15 17 21 23 24 28 29 b 31 1 0 f # 23931 difference c a 31 1 1 0 5 6 9 10 11 14 16 17 20 22 23 25 28 30 b 31 1 1 0 5 6 9 10 11 14 16 17 20 22 23 25 28 30 # 23932 difference c a 31 1 1 0 5 6 9 10 11 14 16 17 20 22 23 25 28 30 b 31 1 0 0 4 5 10 15 17 19 20 21 22 23 24 25 28 # 23933 difference c a 31 1 1 e b 31 1 1 e # 23934 difference c a 31 1 1 e b 31 1 1 e # 23935 difference c a 31 1 1 e b 31 1 1 e # 23936 difference c a 31 1 1 e b 31 1 1 f # 23937 difference c a 31 1 1 e b 31 1 1 e # 23938 difference c a 31 1 1 e b 31 1 1 1 3 4 6 7 8 10 12 16 18 19 22 26 27 # 23939 difference c a 31 1 1 f b 31 1 1 f # 23940 difference c a 31 1 1 f b 31 1 1 e # 23941 difference c a 31 1 1 f b 31 1 1 f # 23942 difference c a 31 1 1 f b 31 1 1 f # 23943 difference c a 31 1 1 f b 31 1 1 f # 23944 difference c a 31 1 1 f b 31 1 1 0 2 4 7 9 10 14 15 18 20 24 25 27 28 30 # 23945 difference c a 31 1 1 0 1 2 4 5 6 7 10 11 12 14 15 16 18 21 23 24 26 b 31 1 1 0 1 2 4 5 6 7 10 11 12 14 15 16 18 21 23 24 26 # 23946 difference c a 31 1 1 0 1 2 4 5 6 7 10 11 12 14 15 16 18 21 23 24 26 b 31 1 1 e # 23947 difference c a 31 1 1 0 4 6 7 13 14 19 24 28 29 30 b 31 1 1 0 4 6 7 13 14 19 24 28 29 30 # 23948 difference c a 31 1 1 0 4 6 7 13 14 19 24 28 29 30 b 31 1 1 f # 23949 difference c a 31 1 1 0 1 3 4 6 7 8 12 13 18 20 21 24 25 28 b 31 1 1 0 1 3 4 6 7 8 12 13 18 20 21 24 25 28 # 23950 difference c a 31 1 1 0 1 3 4 6 7 8 12 13 18 20 21 24 25 28 b 31 1 1 2 7 9 12 14 16 19 26 27 # 23951 difference c a 32 0 0 e b 32 0 0 e # 23952 difference c a 32 0 0 e b 32 0 0 e # 23953 difference c a 32 0 0 e b 32 0 0 e # 23954 difference c a 32 0 0 e b 32 0 0 f # 23955 difference c a 32 0 0 e b 32 0 0 e # 23956 difference c a 32 0 0 e b 32 0 0 0 2 4 6 7 9 10 11 12 14 16 17 19 21 23 24 25 26 27 29 30 31 # 23957 difference c a 32 0 0 f b 32 0 0 f # 23958 difference c a 32 0 0 f b 32 0 0 e # 23959 difference c a 32 0 0 f b 32 0 0 f # 23960 difference c a 32 0 0 f b 32 0 0 f # 23961 difference c a 32 0 0 f b 32 0 0 f # 23962 difference c a 32 0 0 f b 32 0 0 1 5 6 7 8 9 10 14 19 20 21 23 24 26 27 29 30 31 # 23963 difference c a 32 0 0 0 2 3 5 6 7 8 12 17 21 24 28 30 31 b 32 0 0 0 2 3 5 6 7 8 12 17 21 24 28 30 31 # 23964 difference c a 32 0 0 0 2 3 5 6 7 8 12 17 21 24 28 30 31 b 32 0 0 e # 23965 difference c a 32 0 0 1 2 3 4 6 7 8 11 13 15 17 19 21 26 28 29 30 b 32 0 0 1 2 3 4 6 7 8 11 13 15 17 19 21 26 28 29 30 # 23966 difference c a 32 0 0 1 2 3 4 6 7 8 11 13 15 17 19 21 26 28 29 30 b 32 0 0 f # 23967 difference c a 32 0 0 0 1 2 3 5 6 8 9 12 13 17 19 20 24 27 28 30 31 b 32 0 0 0 1 2 3 5 6 8 9 12 13 17 19 20 24 27 28 30 31 # 23968 difference c a 32 0 0 0 1 2 3 5 6 8 9 12 13 17 19 20 24 27 28 30 31 b 32 0 0 1 4 6 7 9 11 12 13 16 19 20 21 22 23 24 26 27 28 29 30 # 23969 difference c a 32 0 0 e b 32 0 0 e # 23970 difference c a 32 0 0 e b 32 0 1 e # 23971 difference c a 32 0 0 e b 32 0 0 e # 23972 difference c a 32 0 0 e b 32 0 1 f # 23973 difference c a 32 0 0 e b 32 0 0 e # 23974 difference c a 32 0 0 e b 32 0 1 0 2 7 10 13 15 17 18 21 28 31 # 23975 difference c a 32 0 0 f b 32 0 0 f # 23976 difference c a 32 0 0 f b 32 0 1 e # 23977 difference c a 32 0 0 f b 32 0 0 f # 23978 difference c a 32 0 0 f b 32 0 1 f # 23979 difference c a 32 0 0 f b 32 0 0 f # 23980 difference c a 32 0 0 f b 32 0 1 3 4 6 8 13 15 16 17 20 21 22 23 29 30 31 # 23981 difference c a 32 0 0 0 2 3 4 5 6 7 10 11 14 19 22 26 27 28 29 30 31 b 32 0 0 0 2 3 4 5 6 7 10 11 14 19 22 26 27 28 29 30 31 # 23982 difference c a 32 0 0 0 2 3 4 5 6 7 10 11 14 19 22 26 27 28 29 30 31 b 32 0 1 e # 23983 difference c a 32 0 0 0 1 2 3 4 5 7 10 11 12 14 15 16 18 19 20 21 28 31 b 32 0 0 0 1 2 3 4 5 7 10 11 12 14 15 16 18 19 20 21 28 31 # 23984 difference c a 32 0 0 0 1 2 3 4 5 7 10 11 12 14 15 16 18 19 20 21 28 31 b 32 0 1 f # 23985 difference c a 32 0 0 1 2 3 4 6 7 8 9 10 13 15 18 19 23 24 26 27 28 30 31 b 32 0 0 1 2 3 4 6 7 8 9 10 13 15 18 19 23 24 26 27 28 30 31 # 23986 difference c a 32 0 0 1 2 3 4 6 7 8 9 10 13 15 18 19 23 24 26 27 28 30 31 b 32 0 1 2 3 4 5 6 8 9 10 11 14 15 16 17 18 21 26 29 31 # 23987 difference c a 32 0 0 e b 32 0 0 e # 23988 difference c a 32 0 0 e b 32 1 0 e # 23989 difference c a 32 0 0 e b 32 0 0 e # 23990 difference c a 32 0 0 e b 32 1 0 f # 23991 difference c a 32 0 0 e b 32 0 0 e # 23992 difference c a 32 0 0 e b 32 1 0 2 3 5 7 10 11 12 13 14 15 16 21 22 23 24 25 31 # 23993 difference c a 32 0 0 f b 32 0 0 f # 23994 difference c a 32 0 0 f b 32 1 0 e # 23995 difference c a 32 0 0 f b 32 0 0 f # 23996 difference c a 32 0 0 f b 32 1 0 f # 23997 difference c a 32 0 0 f b 32 0 0 f # 23998 difference c a 32 0 0 f b 32 1 0 0 1 2 3 4 6 8 9 11 12 13 14 15 19 20 22 23 24 28 29 # 23999 difference c a 32 0 0 0 1 6 7 9 10 12 16 17 19 22 24 26 28 29 30 31 b 32 0 0 0 1 6 7 9 10 12 16 17 19 22 24 26 28 29 30 31 # 24000 difference c a 32 0 0 0 1 6 7 9 10 12 16 17 19 22 24 26 28 29 30 31 b 32 1 0 e # 24001 difference c a 32 0 0 0 4 5 8 9 10 11 17 18 19 21 22 24 25 26 27 28 29 30 31 b 32 0 0 0 4 5 8 9 10 11 17 18 19 21 22 24 25 26 27 28 29 30 31 # 24002 difference c a 32 0 0 0 4 5 8 9 10 11 17 18 19 21 22 24 25 26 27 28 29 30 31 b 32 1 0 f # 24003 difference c a 32 0 0 1 2 4 6 7 9 10 11 14 15 17 19 20 23 25 26 27 28 30 31 b 32 0 0 1 2 4 6 7 9 10 11 14 15 17 19 20 23 25 26 27 28 30 31 # 24004 difference c a 32 0 0 1 2 4 6 7 9 10 11 14 15 17 19 20 23 25 26 27 28 30 31 b 32 1 0 1 4 5 8 10 11 12 13 14 16 19 20 21 23 24 26 28 29 # 24005 difference c a 32 0 0 e b 32 0 0 e # 24006 difference c a 32 0 0 e b 32 1 1 e # 24007 difference c a 32 0 0 e b 32 0 0 e # 24008 difference c a 32 0 0 e b 32 1 1 f # 24009 difference c a 32 0 0 e b 32 0 0 e # 24010 difference c a 32 0 0 e b 32 1 1 1 2 4 6 8 9 11 12 15 17 21 26 27 28 # 24011 difference c a 32 0 0 f b 32 0 0 f # 24012 difference c a 32 0 0 f b 32 1 1 e # 24013 difference c a 32 0 0 f b 32 0 0 f # 24014 difference c a 32 0 0 f b 32 1 1 f # 24015 difference c a 32 0 0 f b 32 0 0 f # 24016 difference c a 32 0 0 f b 32 1 1 0 1 2 3 5 7 9 10 12 13 14 16 18 21 23 26 29 30 # 24017 difference c a 32 0 0 0 1 7 9 12 14 15 16 18 22 23 24 25 26 28 29 30 31 b 32 0 0 0 1 7 9 12 14 15 16 18 22 23 24 25 26 28 29 30 31 # 24018 difference c a 32 0 0 0 1 7 9 12 14 15 16 18 22 23 24 25 26 28 29 30 31 b 32 1 1 e # 24019 difference c a 32 0 0 1 2 3 6 7 10 13 14 17 19 27 30 31 b 32 0 0 1 2 3 6 7 10 13 14 17 19 27 30 31 # 24020 difference c a 32 0 0 1 2 3 6 7 10 13 14 17 19 27 30 31 b 32 1 1 f # 24021 difference c a 32 0 0 1 2 3 4 5 8 14 19 20 21 23 25 26 28 29 b 32 0 0 1 2 3 4 5 8 14 19 20 21 23 25 26 28 29 # 24022 difference c a 32 0 0 1 2 3 4 5 8 14 19 20 21 23 25 26 28 29 b 32 1 1 1 2 4 6 7 8 12 13 14 17 19 20 22 23 25 28 29 # 24023 difference c a 32 0 1 e b 32 0 1 e # 24024 difference c a 32 0 1 e b 32 0 0 e # 24025 difference c a 32 0 1 e b 32 0 1 e # 24026 difference c a 32 0 1 e b 32 0 0 f # 24027 difference c a 32 0 1 e b 32 0 1 e # 24028 difference c a 32 0 1 e b 32 0 0 0 2 4 7 8 13 14 15 16 17 18 19 21 22 23 24 26 28 30 31 # 24029 difference c a 32 0 1 f b 32 0 1 f # 24030 difference c a 32 0 1 f b 32 0 0 e # 24031 difference c a 32 0 1 f b 32 0 1 f # 24032 difference c a 32 0 1 f b 32 0 0 f # 24033 difference c a 32 0 1 f b 32 0 1 f # 24034 difference c a 32 0 1 f b 32 0 0 0 3 4 6 7 8 13 16 17 18 20 21 24 26 27 28 29 30 31 # 24035 difference c a 32 0 1 1 2 5 6 8 10 18 19 21 27 29 30 b 32 0 1 1 2 5 6 8 10 18 19 21 27 29 30 # 24036 difference c a 32 0 1 1 2 5 6 8 10 18 19 21 27 29 30 b 32 0 0 e # 24037 difference c a 32 0 1 0 2 5 6 8 9 13 19 21 22 27 b 32 0 1 0 2 5 6 8 9 13 19 21 22 27 # 24038 difference c a 32 0 1 0 2 5 6 8 9 13 19 21 22 27 b 32 0 0 f # 24039 difference c a 32 0 1 0 1 2 3 4 5 7 8 9 10 11 12 16 17 18 19 20 21 25 30 31 b 32 0 1 0 1 2 3 4 5 7 8 9 10 11 12 16 17 18 19 20 21 25 30 31 # 24040 difference c a 32 0 1 0 1 2 3 4 5 7 8 9 10 11 12 16 17 18 19 20 21 25 30 31 b 32 0 0 2 6 7 8 9 10 11 14 17 20 21 22 24 26 27 28 30 # 24041 difference c a 32 0 1 e b 32 0 1 e # 24042 difference c a 32 0 1 e b 32 0 1 e # 24043 difference c a 32 0 1 e b 32 0 1 e # 24044 difference c a 32 0 1 e b 32 0 1 f # 24045 difference c a 32 0 1 e b 32 0 1 e # 24046 difference c a 32 0 1 e b 32 0 1 0 1 10 11 12 13 16 18 19 21 23 24 25 26 27 29 30 # 24047 difference c a 32 0 1 f b 32 0 1 f # 24048 difference c a 32 0 1 f b 32 0 1 e # 24049 difference c a 32 0 1 f b 32 0 1 f # 24050 difference c a 32 0 1 f b 32 0 1 f # 24051 difference c a 32 0 1 f b 32 0 1 f # 24052 difference c a 32 0 1 f b 32 0 1 0 2 4 5 11 13 17 20 21 23 24 30 # 24053 difference c a 32 0 1 0 2 3 7 8 9 10 12 13 14 15 16 19 20 21 23 25 26 27 29 b 32 0 1 0 2 3 7 8 9 10 12 13 14 15 16 19 20 21 23 25 26 27 29 # 24054 difference c a 32 0 1 0 2 3 7 8 9 10 12 13 14 15 16 19 20 21 23 25 26 27 29 b 32 0 1 e # 24055 difference c a 32 0 1 3 5 8 11 14 18 23 26 27 28 b 32 0 1 3 5 8 11 14 18 23 26 27 28 # 24056 difference c a 32 0 1 3 5 8 11 14 18 23 26 27 28 b 32 0 1 f # 24057 difference c a 32 0 1 1 2 3 4 7 8 9 10 11 12 16 18 19 20 22 28 29 30 b 32 0 1 1 2 3 4 7 8 9 10 11 12 16 18 19 20 22 28 29 30 # 24058 difference c a 32 0 1 1 2 3 4 7 8 9 10 11 12 16 18 19 20 22 28 29 30 b 32 0 1 0 1 3 6 7 10 12 14 15 17 18 20 24 25 26 27 29 30 # 24059 difference c a 32 0 1 e b 32 0 1 e # 24060 difference c a 32 0 1 e b 32 1 0 e # 24061 difference c a 32 0 1 e b 32 0 1 e # 24062 difference c a 32 0 1 e b 32 1 0 f # 24063 difference c a 32 0 1 e b 32 0 1 e # 24064 difference c a 32 0 1 e b 32 1 0 2 3 4 5 6 7 9 12 13 14 16 17 18 19 24 26 28 29 30 # 24065 difference c a 32 0 1 f b 32 0 1 f # 24066 difference c a 32 0 1 f b 32 1 0 e # 24067 difference c a 32 0 1 f b 32 0 1 f # 24068 difference c a 32 0 1 f b 32 1 0 f # 24069 difference c a 32 0 1 f b 32 0 1 f # 24070 difference c a 32 0 1 f b 32 1 0 1 3 5 6 7 8 10 11 13 15 16 17 18 19 21 26 30 # 24071 difference c a 32 0 1 1 3 4 7 8 11 13 14 16 17 19 20 23 24 25 27 29 31 b 32 0 1 1 3 4 7 8 11 13 14 16 17 19 20 23 24 25 27 29 31 # 24072 difference c a 32 0 1 1 3 4 7 8 11 13 14 16 17 19 20 23 24 25 27 29 31 b 32 1 0 e # 24073 difference c a 32 0 1 0 1 3 5 6 11 12 15 16 18 19 20 21 22 23 24 25 26 28 31 b 32 0 1 0 1 3 5 6 11 12 15 16 18 19 20 21 22 23 24 25 26 28 31 # 24074 difference c a 32 0 1 0 1 3 5 6 11 12 15 16 18 19 20 21 22 23 24 25 26 28 31 b 32 1 0 f # 24075 difference c a 32 0 1 1 2 3 4 5 6 8 11 14 16 19 21 22 24 26 27 28 30 31 b 32 0 1 1 2 3 4 5 6 8 11 14 16 19 21 22 24 26 27 28 30 31 # 24076 difference c a 32 0 1 1 2 3 4 5 6 8 11 14 16 19 21 22 24 26 27 28 30 31 b 32 1 0 0 1 2 3 4 5 6 7 8 10 12 14 15 16 18 22 24 25 27 30 # 24077 difference c a 32 0 1 e b 32 0 1 e # 24078 difference c a 32 0 1 e b 32 1 1 e # 24079 difference c a 32 0 1 e b 32 0 1 e # 24080 difference c a 32 0 1 e b 32 1 1 f # 24081 difference c a 32 0 1 e b 32 0 1 e # 24082 difference c a 32 0 1 e b 32 1 1 2 3 5 6 10 11 12 13 14 15 16 20 23 25 26 27 28 30 # 24083 difference c a 32 0 1 f b 32 0 1 f # 24084 difference c a 32 0 1 f b 32 1 1 e # 24085 difference c a 32 0 1 f b 32 0 1 f # 24086 difference c a 32 0 1 f b 32 1 1 f # 24087 difference c a 32 0 1 f b 32 0 1 f # 24088 difference c a 32 0 1 f b 32 1 1 0 1 4 5 12 13 15 17 21 23 26 28 29 30 31 # 24089 difference c a 32 0 1 0 1 2 3 4 6 8 10 11 14 15 17 19 20 21 22 24 25 26 27 b 32 0 1 0 1 2 3 4 6 8 10 11 14 15 17 19 20 21 22 24 25 26 27 # 24090 difference c a 32 0 1 0 1 2 3 4 6 8 10 11 14 15 17 19 20 21 22 24 25 26 27 b 32 1 1 e # 24091 difference c a 32 0 1 2 4 5 6 7 9 15 18 19 21 24 25 26 31 b 32 0 1 2 4 5 6 7 9 15 18 19 21 24 25 26 31 # 24092 difference c a 32 0 1 2 4 5 6 7 9 15 18 19 21 24 25 26 31 b 32 1 1 f # 24093 difference c a 32 0 1 0 3 6 7 11 14 15 16 17 18 20 21 23 24 26 28 31 b 32 0 1 0 3 6 7 11 14 15 16 17 18 20 21 23 24 26 28 31 # 24094 difference c a 32 0 1 0 3 6 7 11 14 15 16 17 18 20 21 23 24 26 28 31 b 32 1 1 0 1 2 5 7 8 10 12 13 15 16 17 19 20 21 22 23 25 29 # 24095 difference c a 32 1 0 e b 32 1 0 e # 24096 difference c a 32 1 0 e b 32 0 0 e # 24097 difference c a 32 1 0 e b 32 1 0 e # 24098 difference c a 32 1 0 e b 32 0 0 f # 24099 difference c a 32 1 0 e b 32 1 0 e # 24100 difference c a 32 1 0 e b 32 0 0 0 2 4 5 7 13 16 17 19 22 23 24 26 # 24101 difference c a 32 1 0 f b 32 1 0 f # 24102 difference c a 32 1 0 f b 32 0 0 e # 24103 difference c a 32 1 0 f b 32 1 0 f # 24104 difference c a 32 1 0 f b 32 0 0 f # 24105 difference c a 32 1 0 f b 32 1 0 f # 24106 difference c a 32 1 0 f b 32 0 0 2 7 8 9 12 13 14 19 21 22 25 26 28 30 # 24107 difference c a 32 1 0 2 3 4 9 10 14 15 16 17 18 20 21 22 26 28 30 b 32 1 0 2 3 4 9 10 14 15 16 17 18 20 21 22 26 28 30 # 24108 difference c a 32 1 0 2 3 4 9 10 14 15 16 17 18 20 21 22 26 28 30 b 32 0 0 e # 24109 difference c a 32 1 0 0 1 2 3 7 9 11 13 14 16 17 19 23 24 25 30 b 32 1 0 0 1 2 3 7 9 11 13 14 16 17 19 23 24 25 30 # 24110 difference c a 32 1 0 0 1 2 3 7 9 11 13 14 16 17 19 23 24 25 30 b 32 0 0 f # 24111 difference c a 32 1 0 1 3 6 11 13 16 17 20 23 25 27 29 31 b 32 1 0 1 3 6 11 13 16 17 20 23 25 27 29 31 # 24112 difference c a 32 1 0 1 3 6 11 13 16 17 20 23 25 27 29 31 b 32 0 0 0 1 2 3 5 7 8 9 10 12 13 16 17 18 19 21 23 24 25 26 27 28 30 # 24113 difference c a 32 1 0 e b 32 1 0 e # 24114 difference c a 32 1 0 e b 32 0 1 e # 24115 difference c a 32 1 0 e b 32 1 0 e # 24116 difference c a 32 1 0 e b 32 0 1 f # 24117 difference c a 32 1 0 e b 32 1 0 e # 24118 difference c a 32 1 0 e b 32 0 1 0 5 6 8 9 12 13 14 16 17 19 20 21 22 28 30 31 # 24119 difference c a 32 1 0 f b 32 1 0 f # 24120 difference c a 32 1 0 f b 32 0 1 e # 24121 difference c a 32 1 0 f b 32 1 0 f # 24122 difference c a 32 1 0 f b 32 0 1 f # 24123 difference c a 32 1 0 f b 32 1 0 f # 24124 difference c a 32 1 0 f b 32 0 1 0 2 3 5 7 8 9 12 14 19 20 24 25 26 31 # 24125 difference c a 32 1 0 0 2 3 6 7 8 11 12 16 17 19 20 21 23 24 25 27 30 b 32 1 0 0 2 3 6 7 8 11 12 16 17 19 20 21 23 24 25 27 30 # 24126 difference c a 32 1 0 0 2 3 6 7 8 11 12 16 17 19 20 21 23 24 25 27 30 b 32 0 1 e # 24127 difference c a 32 1 0 0 1 3 6 8 10 11 12 14 15 16 19 20 21 22 23 24 25 26 29 b 32 1 0 0 1 3 6 8 10 11 12 14 15 16 19 20 21 22 23 24 25 26 29 # 24128 difference c a 32 1 0 0 1 3 6 8 10 11 12 14 15 16 19 20 21 22 23 24 25 26 29 b 32 0 1 f # 24129 difference c a 32 1 0 0 1 3 4 7 8 11 16 17 19 20 26 27 28 30 31 b 32 1 0 0 1 3 4 7 8 11 16 17 19 20 26 27 28 30 31 # 24130 difference c a 32 1 0 0 1 3 4 7 8 11 16 17 19 20 26 27 28 30 31 b 32 0 1 0 2 3 5 6 10 11 12 17 20 21 22 24 26 27 28 29 30 31 # 24131 difference c a 32 1 0 e b 32 1 0 e # 24132 difference c a 32 1 0 e b 32 1 0 e # 24133 difference c a 32 1 0 e b 32 1 0 e # 24134 difference c a 32 1 0 e b 32 1 0 f # 24135 difference c a 32 1 0 e b 32 1 0 e # 24136 difference c a 32 1 0 e b 32 1 0 2 3 6 7 8 9 13 14 15 20 21 22 23 25 26 28 29 30 31 # 24137 difference c a 32 1 0 f b 32 1 0 f # 24138 difference c a 32 1 0 f b 32 1 0 e # 24139 difference c a 32 1 0 f b 32 1 0 f # 24140 difference c a 32 1 0 f b 32 1 0 f # 24141 difference c a 32 1 0 f b 32 1 0 f # 24142 difference c a 32 1 0 f b 32 1 0 1 2 3 5 7 8 9 12 16 18 19 22 23 25 27 30 31 # 24143 difference c a 32 1 0 0 1 5 8 9 11 13 14 15 17 18 19 22 25 27 b 32 1 0 0 1 5 8 9 11 13 14 15 17 18 19 22 25 27 # 24144 difference c a 32 1 0 0 1 5 8 9 11 13 14 15 17 18 19 22 25 27 b 32 1 0 e # 24145 difference c a 32 1 0 1 3 4 5 6 7 10 11 13 14 19 20 21 24 25 26 b 32 1 0 1 3 4 5 6 7 10 11 13 14 19 20 21 24 25 26 # 24146 difference c a 32 1 0 1 3 4 5 6 7 10 11 13 14 19 20 21 24 25 26 b 32 1 0 f # 24147 difference c a 32 1 0 1 4 8 10 11 12 13 17 20 23 26 28 30 b 32 1 0 1 4 8 10 11 12 13 17 20 23 26 28 30 # 24148 difference c a 32 1 0 1 4 8 10 11 12 13 17 20 23 26 28 30 b 32 1 0 2 8 11 13 18 20 22 24 25 26 27 29 31 # 24149 difference c a 32 1 0 e b 32 1 0 e # 24150 difference c a 32 1 0 e b 32 1 1 e # 24151 difference c a 32 1 0 e b 32 1 0 e # 24152 difference c a 32 1 0 e b 32 1 1 f # 24153 difference c a 32 1 0 e b 32 1 0 e # 24154 difference c a 32 1 0 e b 32 1 1 0 4 5 6 9 12 14 16 17 19 20 23 25 27 28 29 30 31 # 24155 difference c a 32 1 0 f b 32 1 0 f # 24156 difference c a 32 1 0 f b 32 1 1 e # 24157 difference c a 32 1 0 f b 32 1 0 f # 24158 difference c a 32 1 0 f b 32 1 1 f # 24159 difference c a 32 1 0 f b 32 1 0 f # 24160 difference c a 32 1 0 f b 32 1 1 0 3 4 5 8 10 11 12 13 14 15 18 20 25 27 30 # 24161 difference c a 32 1 0 0 1 3 4 6 7 8 9 10 11 13 14 15 17 21 22 27 28 b 32 1 0 0 1 3 4 6 7 8 9 10 11 13 14 15 17 21 22 27 28 # 24162 difference c a 32 1 0 0 1 3 4 6 7 8 9 10 11 13 14 15 17 21 22 27 28 b 32 1 1 e # 24163 difference c a 32 1 0 1 8 9 12 15 17 20 21 22 27 28 29 31 b 32 1 0 1 8 9 12 15 17 20 21 22 27 28 29 31 # 24164 difference c a 32 1 0 1 8 9 12 15 17 20 21 22 27 28 29 31 b 32 1 1 f # 24165 difference c a 32 1 0 1 3 4 6 7 13 15 16 19 22 23 24 26 28 b 32 1 0 1 3 4 6 7 13 15 16 19 22 23 24 26 28 # 24166 difference c a 32 1 0 1 3 4 6 7 13 15 16 19 22 23 24 26 28 b 32 1 1 0 1 3 6 7 10 11 14 16 17 22 23 25 28 29 30 31 # 24167 difference c a 32 1 1 e b 32 1 1 e # 24168 difference c a 32 1 1 e b 32 0 0 e # 24169 difference c a 32 1 1 e b 32 1 1 e # 24170 difference c a 32 1 1 e b 32 0 0 f # 24171 difference c a 32 1 1 e b 32 1 1 e # 24172 difference c a 32 1 1 e b 32 0 0 0 2 3 5 6 7 9 10 11 12 13 15 16 17 18 19 20 21 22 24 26 27 29 30 # 24173 difference c a 32 1 1 f b 32 1 1 f # 24174 difference c a 32 1 1 f b 32 0 0 e # 24175 difference c a 32 1 1 f b 32 1 1 f # 24176 difference c a 32 1 1 f b 32 0 0 f # 24177 difference c a 32 1 1 f b 32 1 1 f # 24178 difference c a 32 1 1 f b 32 0 0 1 3 4 5 6 8 9 11 13 22 24 25 26 28 29 # 24179 difference c a 32 1 1 1 2 4 5 9 11 13 15 19 20 22 25 26 28 30 b 32 1 1 1 2 4 5 9 11 13 15 19 20 22 25 26 28 30 # 24180 difference c a 32 1 1 1 2 4 5 9 11 13 15 19 20 22 25 26 28 30 b 32 0 0 e # 24181 difference c a 32 1 1 0 1 3 5 7 8 10 16 17 22 23 25 27 28 29 31 b 32 1 1 0 1 3 5 7 8 10 16 17 22 23 25 27 28 29 31 # 24182 difference c a 32 1 1 0 1 3 5 7 8 10 16 17 22 23 25 27 28 29 31 b 32 0 0 f # 24183 difference c a 32 1 1 0 1 2 4 5 10 11 13 16 18 19 20 21 22 23 25 26 28 31 b 32 1 1 0 1 2 4 5 10 11 13 16 18 19 20 21 22 23 25 26 28 31 # 24184 difference c a 32 1 1 0 1 2 4 5 10 11 13 16 18 19 20 21 22 23 25 26 28 31 b 32 0 0 0 2 3 7 9 11 12 13 15 17 18 19 20 22 25 26 # 24185 difference c a 32 1 1 e b 32 1 1 e # 24186 difference c a 32 1 1 e b 32 0 1 e # 24187 difference c a 32 1 1 e b 32 1 1 e # 24188 difference c a 32 1 1 e b 32 0 1 f # 24189 difference c a 32 1 1 e b 32 1 1 e # 24190 difference c a 32 1 1 e b 32 0 1 2 3 7 9 10 12 14 15 17 18 19 21 23 24 25 31 # 24191 difference c a 32 1 1 f b 32 1 1 f # 24192 difference c a 32 1 1 f b 32 0 1 e # 24193 difference c a 32 1 1 f b 32 1 1 f # 24194 difference c a 32 1 1 f b 32 0 1 f # 24195 difference c a 32 1 1 f b 32 1 1 f # 24196 difference c a 32 1 1 f b 32 0 1 0 4 5 7 8 11 14 15 16 17 18 20 21 22 23 24 26 28 30 # 24197 difference c a 32 1 1 0 2 3 5 6 9 11 13 16 24 28 30 31 b 32 1 1 0 2 3 5 6 9 11 13 16 24 28 30 31 # 24198 difference c a 32 1 1 0 2 3 5 6 9 11 13 16 24 28 30 31 b 32 0 1 e # 24199 difference c a 32 1 1 0 1 4 6 7 10 14 15 19 20 21 22 24 26 27 28 29 31 b 32 1 1 0 1 4 6 7 10 14 15 19 20 21 22 24 26 27 28 29 31 # 24200 difference c a 32 1 1 0 1 4 6 7 10 14 15 19 20 21 22 24 26 27 28 29 31 b 32 0 1 f # 24201 difference c a 32 1 1 0 1 8 10 11 13 14 15 16 18 19 21 26 31 b 32 1 1 0 1 8 10 11 13 14 15 16 18 19 21 26 31 # 24202 difference c a 32 1 1 0 1 8 10 11 13 14 15 16 18 19 21 26 31 b 32 0 1 1 3 5 7 10 11 12 13 14 15 18 19 21 22 25 26 29 31 # 24203 difference c a 32 1 1 e b 32 1 1 e # 24204 difference c a 32 1 1 e b 32 1 0 e # 24205 difference c a 32 1 1 e b 32 1 1 e # 24206 difference c a 32 1 1 e b 32 1 0 f # 24207 difference c a 32 1 1 e b 32 1 1 e # 24208 difference c a 32 1 1 e b 32 1 0 0 1 2 3 4 5 6 9 10 12 13 17 20 22 25 26 27 28 30 # 24209 difference c a 32 1 1 f b 32 1 1 f # 24210 difference c a 32 1 1 f b 32 1 0 e # 24211 difference c a 32 1 1 f b 32 1 1 f # 24212 difference c a 32 1 1 f b 32 1 0 f # 24213 difference c a 32 1 1 f b 32 1 1 f # 24214 difference c a 32 1 1 f b 32 1 0 7 10 14 18 21 23 24 30 31 # 24215 difference c a 32 1 1 0 2 4 6 8 9 10 13 14 17 18 19 20 25 26 27 29 30 31 b 32 1 1 0 2 4 6 8 9 10 13 14 17 18 19 20 25 26 27 29 30 31 # 24216 difference c a 32 1 1 0 2 4 6 8 9 10 13 14 17 18 19 20 25 26 27 29 30 31 b 32 1 0 e # 24217 difference c a 32 1 1 1 6 9 12 14 16 17 18 19 20 27 30 31 b 32 1 1 1 6 9 12 14 16 17 18 19 20 27 30 31 # 24218 difference c a 32 1 1 1 6 9 12 14 16 17 18 19 20 27 30 31 b 32 1 0 f # 24219 difference c a 32 1 1 0 1 9 10 13 16 18 19 20 25 27 28 29 31 b 32 1 1 0 1 9 10 13 16 18 19 20 25 27 28 29 31 # 24220 difference c a 32 1 1 0 1 9 10 13 16 18 19 20 25 27 28 29 31 b 32 1 0 0 1 4 5 6 8 9 11 12 13 22 23 26 # 24221 difference c a 32 1 1 e b 32 1 1 e # 24222 difference c a 32 1 1 e b 32 1 1 e # 24223 difference c a 32 1 1 e b 32 1 1 e # 24224 difference c a 32 1 1 e b 32 1 1 f # 24225 difference c a 32 1 1 e b 32 1 1 e # 24226 difference c a 32 1 1 e b 32 1 1 0 3 7 8 9 10 11 12 18 19 20 21 22 24 25 28 29 31 # 24227 difference c a 32 1 1 f b 32 1 1 f # 24228 difference c a 32 1 1 f b 32 1 1 e # 24229 difference c a 32 1 1 f b 32 1 1 f # 24230 difference c a 32 1 1 f b 32 1 1 f # 24231 difference c a 32 1 1 f b 32 1 1 f # 24232 difference c a 32 1 1 f b 32 1 1 1 2 8 10 11 12 14 16 17 19 22 24 26 27 30 # 24233 difference c a 32 1 1 1 2 6 8 9 10 11 12 13 14 15 16 22 24 28 30 31 b 32 1 1 1 2 6 8 9 10 11 12 13 14 15 16 22 24 28 30 31 # 24234 difference c a 32 1 1 1 2 6 8 9 10 11 12 13 14 15 16 22 24 28 30 31 b 32 1 1 e # 24235 difference c a 32 1 1 1 3 6 8 9 10 11 12 13 14 15 18 19 20 21 23 25 26 27 29 30 31 b 32 1 1 1 3 6 8 9 10 11 12 13 14 15 18 19 20 21 23 25 26 27 29 30 31 # 24236 difference c a 32 1 1 1 3 6 8 9 10 11 12 13 14 15 18 19 20 21 23 25 26 27 29 30 31 b 32 1 1 f # 24237 difference c a 32 1 1 3 4 6 7 9 10 12 16 18 20 24 28 30 b 32 1 1 3 4 6 7 9 10 12 16 18 20 24 28 30 # 24238 difference c a 32 1 1 3 4 6 7 9 10 12 16 18 20 24 28 30 b 32 1 1 0 4 9 10 18 20 21 22 23 25 26 29 30 31 # 24239 difference c a 33 0 0 e b 33 0 0 e # 24240 difference c a 33 0 0 e b 33 0 0 e # 24241 difference c a 33 0 0 e b 33 0 0 e # 24242 difference c a 33 0 0 e b 33 0 0 f # 24243 difference c a 33 0 0 e b 33 0 0 e # 24244 difference c a 33 0 0 e b 33 0 0 1 5 6 8 9 10 15 16 21 24 26 31 # 24245 difference c a 33 0 0 f b 33 0 0 f # 24246 difference c a 33 0 0 f b 33 0 0 e # 24247 difference c a 33 0 0 f b 33 0 0 f # 24248 difference c a 33 0 0 f b 33 0 0 f # 24249 difference c a 33 0 0 f b 33 0 0 f # 24250 difference c a 33 0 0 f b 33 0 0 0 2 8 12 14 20 21 23 24 25 28 29 30 31 # 24251 difference c a 33 0 0 3 5 6 7 9 10 12 14 16 19 20 23 25 26 30 31 32 b 33 0 0 3 5 6 7 9 10 12 14 16 19 20 23 25 26 30 31 32 # 24252 difference c a 33 0 0 3 5 6 7 9 10 12 14 16 19 20 23 25 26 30 31 32 b 33 0 0 e # 24253 difference c a 33 0 0 1 3 9 12 13 17 21 22 24 26 29 30 b 33 0 0 1 3 9 12 13 17 21 22 24 26 29 30 # 24254 difference c a 33 0 0 1 3 9 12 13 17 21 22 24 26 29 30 b 33 0 0 f # 24255 difference c a 33 0 0 2 4 6 8 11 16 17 18 19 20 24 25 27 28 29 31 b 33 0 0 2 4 6 8 11 16 17 18 19 20 24 25 27 28 29 31 # 24256 difference c a 33 0 0 2 4 6 8 11 16 17 18 19 20 24 25 27 28 29 31 b 33 0 0 3 5 6 8 9 10 12 15 17 19 21 22 26 28 29 30 31 # 24257 difference c a 33 0 0 e b 33 0 0 e # 24258 difference c a 33 0 0 e b 33 0 1 e # 24259 difference c a 33 0 0 e b 33 0 0 e # 24260 difference c a 33 0 0 e b 33 0 1 f # 24261 difference c a 33 0 0 e b 33 0 0 e # 24262 difference c a 33 0 0 e b 33 0 1 0 1 2 3 6 11 13 17 18 20 25 26 29 30 32 # 24263 difference c a 33 0 0 f b 33 0 0 f # 24264 difference c a 33 0 0 f b 33 0 1 e # 24265 difference c a 33 0 0 f b 33 0 0 f # 24266 difference c a 33 0 0 f b 33 0 1 f # 24267 difference c a 33 0 0 f b 33 0 0 f # 24268 difference c a 33 0 0 f b 33 0 1 3 4 6 8 9 10 11 12 15 18 20 21 22 23 24 25 27 28 29 30 32 # 24269 difference c a 33 0 0 0 1 2 4 7 8 9 10 13 15 17 18 20 23 24 29 32 b 33 0 0 0 1 2 4 7 8 9 10 13 15 17 18 20 23 24 29 32 # 24270 difference c a 33 0 0 0 1 2 4 7 8 9 10 13 15 17 18 20 23 24 29 32 b 33 0 1 e # 24271 difference c a 33 0 0 1 2 3 4 6 7 9 11 13 16 17 21 22 23 28 30 b 33 0 0 1 2 3 4 6 7 9 11 13 16 17 21 22 23 28 30 # 24272 difference c a 33 0 0 1 2 3 4 6 7 9 11 13 16 17 21 22 23 28 30 b 33 0 1 f # 24273 difference c a 33 0 0 0 4 7 12 13 15 22 23 24 25 26 28 31 32 b 33 0 0 0 4 7 12 13 15 22 23 24 25 26 28 31 32 # 24274 difference c a 33 0 0 0 4 7 12 13 15 22 23 24 25 26 28 31 32 b 33 0 1 0 1 2 3 5 7 9 10 13 15 17 19 22 25 27 # 24275 difference c a 33 0 0 e b 33 0 0 e # 24276 difference c a 33 0 0 e b 33 1 0 e # 24277 difference c a 33 0 0 e b 33 0 0 e # 24278 difference c a 33 0 0 e b 33 1 0 f # 24279 difference c a 33 0 0 e b 33 0 0 e # 24280 difference c a 33 0 0 e b 33 1 0 2 3 4 5 7 8 10 11 12 13 15 16 20 21 23 28 29 30 31 32 # 24281 difference c a 33 0 0 f b 33 0 0 f # 24282 difference c a 33 0 0 f b 33 1 0 e # 24283 difference c a 33 0 0 f b 33 0 0 f # 24284 difference c a 33 0 0 f b 33 1 0 f # 24285 difference c a 33 0 0 f b 33 0 0 f # 24286 difference c a 33 0 0 f b 33 1 0 1 2 6 7 9 10 12 16 20 22 24 26 28 29 32 # 24287 difference c a 33 0 0 1 3 4 5 8 12 13 14 16 22 28 29 32 b 33 0 0 1 3 4 5 8 12 13 14 16 22 28 29 32 # 24288 difference c a 33 0 0 1 3 4 5 8 12 13 14 16 22 28 29 32 b 33 1 0 e # 24289 difference c a 33 0 0 0 1 3 5 7 9 12 13 16 21 22 23 26 28 31 b 33 0 0 0 1 3 5 7 9 12 13 16 21 22 23 26 28 31 # 24290 difference c a 33 0 0 0 1 3 5 7 9 12 13 16 21 22 23 26 28 31 b 33 1 0 f # 24291 difference c a 33 0 0 0 3 4 7 8 12 13 17 18 20 21 22 24 27 32 b 33 0 0 0 3 4 7 8 12 13 17 18 20 21 22 24 27 32 # 24292 difference c a 33 0 0 0 3 4 7 8 12 13 17 18 20 21 22 24 27 32 b 33 1 0 0 1 2 3 6 7 8 11 12 13 14 15 18 20 22 24 25 26 27 29 30 31 32 # 24293 difference c a 33 0 0 e b 33 0 0 e # 24294 difference c a 33 0 0 e b 33 1 1 e # 24295 difference c a 33 0 0 e b 33 0 0 e # 24296 difference c a 33 0 0 e b 33 1 1 f # 24297 difference c a 33 0 0 e b 33 0 0 e # 24298 difference c a 33 0 0 e b 33 1 1 1 3 4 5 6 7 9 10 12 14 15 17 18 20 23 24 27 28 30 # 24299 difference c a 33 0 0 f b 33 0 0 f # 24300 difference c a 33 0 0 f b 33 1 1 e # 24301 difference c a 33 0 0 f b 33 0 0 f # 24302 difference c a 33 0 0 f b 33 1 1 f # 24303 difference c a 33 0 0 f b 33 0 0 f # 24304 difference c a 33 0 0 f b 33 1 1 2 5 6 8 9 10 12 13 15 16 17 18 21 24 29 # 24305 difference c a 33 0 0 1 2 12 13 15 16 20 21 23 25 29 30 31 b 33 0 0 1 2 12 13 15 16 20 21 23 25 29 30 31 # 24306 difference c a 33 0 0 1 2 12 13 15 16 20 21 23 25 29 30 31 b 33 1 1 e # 24307 difference c a 33 0 0 0 2 3 7 8 10 11 12 13 17 18 19 21 27 31 b 33 0 0 0 2 3 7 8 10 11 12 13 17 18 19 21 27 31 # 24308 difference c a 33 0 0 0 2 3 7 8 10 11 12 13 17 18 19 21 27 31 b 33 1 1 f # 24309 difference c a 33 0 0 1 2 3 5 6 7 8 11 12 13 15 16 19 21 22 23 25 30 31 b 33 0 0 1 2 3 5 6 7 8 11 12 13 15 16 19 21 22 23 25 30 31 # 24310 difference c a 33 0 0 1 2 3 5 6 7 8 11 12 13 15 16 19 21 22 23 25 30 31 b 33 1 1 0 1 3 4 6 8 9 16 17 18 20 21 22 23 30 # 24311 difference c a 33 0 1 e b 33 0 1 e # 24312 difference c a 33 0 1 e b 33 0 0 e # 24313 difference c a 33 0 1 e b 33 0 1 e # 24314 difference c a 33 0 1 e b 33 0 0 f # 24315 difference c a 33 0 1 e b 33 0 1 e # 24316 difference c a 33 0 1 e b 33 0 0 8 9 11 12 13 14 15 16 18 19 20 21 25 27 29 31 32 # 24317 difference c a 33 0 1 f b 33 0 1 f # 24318 difference c a 33 0 1 f b 33 0 0 e # 24319 difference c a 33 0 1 f b 33 0 1 f # 24320 difference c a 33 0 1 f b 33 0 0 f # 24321 difference c a 33 0 1 f b 33 0 1 f # 24322 difference c a 33 0 1 f b 33 0 0 0 6 8 9 11 12 14 15 17 18 22 23 24 25 31 # 24323 difference c a 33 0 1 0 2 10 11 13 14 16 20 22 23 24 26 28 29 30 31 b 33 0 1 0 2 10 11 13 14 16 20 22 23 24 26 28 29 30 31 # 24324 difference c a 33 0 1 0 2 10 11 13 14 16 20 22 23 24 26 28 29 30 31 b 33 0 0 e # 24325 difference c a 33 0 1 0 1 3 5 8 10 11 13 14 17 19 20 22 28 31 b 33 0 1 0 1 3 5 8 10 11 13 14 17 19 20 22 28 31 # 24326 difference c a 33 0 1 0 1 3 5 8 10 11 13 14 17 19 20 22 28 31 b 33 0 0 f # 24327 difference c a 33 0 1 0 1 3 5 8 10 11 12 15 16 18 19 24 28 31 32 b 33 0 1 0 1 3 5 8 10 11 12 15 16 18 19 24 28 31 32 # 24328 difference c a 33 0 1 0 1 3 5 8 10 11 12 15 16 18 19 24 28 31 32 b 33 0 0 0 1 3 5 6 11 12 15 19 20 21 22 28 31 32 # 24329 difference c a 33 0 1 e b 33 0 1 e # 24330 difference c a 33 0 1 e b 33 0 1 e # 24331 difference c a 33 0 1 e b 33 0 1 e # 24332 difference c a 33 0 1 e b 33 0 1 f # 24333 difference c a 33 0 1 e b 33 0 1 e # 24334 difference c a 33 0 1 e b 33 0 1 0 1 5 6 7 9 10 11 13 15 16 19 21 22 24 28 29 31 32 # 24335 difference c a 33 0 1 f b 33 0 1 f # 24336 difference c a 33 0 1 f b 33 0 1 e # 24337 difference c a 33 0 1 f b 33 0 1 f # 24338 difference c a 33 0 1 f b 33 0 1 f # 24339 difference c a 33 0 1 f b 33 0 1 f # 24340 difference c a 33 0 1 f b 33 0 1 7 8 11 13 14 15 18 23 24 26 27 28 29 32 # 24341 difference c a 33 0 1 0 3 4 6 9 10 14 15 19 22 23 26 28 29 31 b 33 0 1 0 3 4 6 9 10 14 15 19 22 23 26 28 29 31 # 24342 difference c a 33 0 1 0 3 4 6 9 10 14 15 19 22 23 26 28 29 31 b 33 0 1 e # 24343 difference c a 33 0 1 1 3 4 5 9 10 11 12 13 15 19 23 25 26 28 30 b 33 0 1 1 3 4 5 9 10 11 12 13 15 19 23 25 26 28 30 # 24344 difference c a 33 0 1 1 3 4 5 9 10 11 12 13 15 19 23 25 26 28 30 b 33 0 1 f # 24345 difference c a 33 0 1 2 3 10 12 13 14 17 18 19 27 29 30 32 b 33 0 1 2 3 10 12 13 14 17 18 19 27 29 30 32 # 24346 difference c a 33 0 1 2 3 10 12 13 14 17 18 19 27 29 30 32 b 33 0 1 0 4 5 6 8 11 13 16 18 23 29 # 24347 difference c a 33 0 1 e b 33 0 1 e # 24348 difference c a 33 0 1 e b 33 1 0 e # 24349 difference c a 33 0 1 e b 33 0 1 e # 24350 difference c a 33 0 1 e b 33 1 0 f # 24351 difference c a 33 0 1 e b 33 0 1 e # 24352 difference c a 33 0 1 e b 33 1 0 0 1 4 5 9 10 14 18 20 21 22 23 27 # 24353 difference c a 33 0 1 f b 33 0 1 f # 24354 difference c a 33 0 1 f b 33 1 0 e # 24355 difference c a 33 0 1 f b 33 0 1 f # 24356 difference c a 33 0 1 f b 33 1 0 f # 24357 difference c a 33 0 1 f b 33 0 1 f # 24358 difference c a 33 0 1 f b 33 1 0 1 2 4 7 8 9 12 13 15 16 17 18 19 20 21 22 24 25 26 29 30 31 32 # 24359 difference c a 33 0 1 0 1 2 3 5 6 8 10 11 12 13 15 16 18 21 24 25 27 28 b 33 0 1 0 1 2 3 5 6 8 10 11 12 13 15 16 18 21 24 25 27 28 # 24360 difference c a 33 0 1 0 1 2 3 5 6 8 10 11 12 13 15 16 18 21 24 25 27 28 b 33 1 0 e # 24361 difference c a 33 0 1 2 3 5 6 7 8 9 11 14 16 18 19 20 21 22 23 27 28 29 30 b 33 0 1 2 3 5 6 7 8 9 11 14 16 18 19 20 21 22 23 27 28 29 30 # 24362 difference c a 33 0 1 2 3 5 6 7 8 9 11 14 16 18 19 20 21 22 23 27 28 29 30 b 33 1 0 f # 24363 difference c a 33 0 1 0 2 3 5 6 7 9 13 15 22 23 24 25 26 27 28 29 b 33 0 1 0 2 3 5 6 7 9 13 15 22 23 24 25 26 27 28 29 # 24364 difference c a 33 0 1 0 2 3 5 6 7 9 13 15 22 23 24 25 26 27 28 29 b 33 1 0 3 4 7 8 9 13 14 15 18 19 21 26 30 31 32 # 24365 difference c a 33 0 1 e b 33 0 1 e # 24366 difference c a 33 0 1 e b 33 1 1 e # 24367 difference c a 33 0 1 e b 33 0 1 e # 24368 difference c a 33 0 1 e b 33 1 1 f # 24369 difference c a 33 0 1 e b 33 0 1 e # 24370 difference c a 33 0 1 e b 33 1 1 1 2 3 4 7 8 9 10 11 12 13 16 17 18 22 23 27 29 32 # 24371 difference c a 33 0 1 f b 33 0 1 f # 24372 difference c a 33 0 1 f b 33 1 1 e # 24373 difference c a 33 0 1 f b 33 0 1 f # 24374 difference c a 33 0 1 f b 33 1 1 f # 24375 difference c a 33 0 1 f b 33 0 1 f # 24376 difference c a 33 0 1 f b 33 1 1 2 3 4 7 10 14 18 21 22 23 24 27 28 29 30 32 # 24377 difference c a 33 0 1 1 2 3 7 9 12 13 14 16 18 20 21 24 27 29 30 31 32 b 33 0 1 1 2 3 7 9 12 13 14 16 18 20 21 24 27 29 30 31 32 # 24378 difference c a 33 0 1 1 2 3 7 9 12 13 14 16 18 20 21 24 27 29 30 31 32 b 33 1 1 e # 24379 difference c a 33 0 1 1 3 5 7 9 10 11 13 14 15 16 18 20 24 28 32 b 33 0 1 1 3 5 7 9 10 11 13 14 15 16 18 20 24 28 32 # 24380 difference c a 33 0 1 1 3 5 7 9 10 11 13 14 15 16 18 20 24 28 32 b 33 1 1 f # 24381 difference c a 33 0 1 4 6 8 9 10 11 13 14 15 19 20 21 23 25 26 31 32 b 33 0 1 4 6 8 9 10 11 13 14 15 19 20 21 23 25 26 31 32 # 24382 difference c a 33 0 1 4 6 8 9 10 11 13 14 15 19 20 21 23 25 26 31 32 b 33 1 1 0 2 3 4 6 7 9 11 12 13 15 18 20 21 23 24 25 26 29 32 # 24383 difference c a 33 1 0 e b 33 1 0 e # 24384 difference c a 33 1 0 e b 33 0 0 e # 24385 difference c a 33 1 0 e b 33 1 0 e # 24386 difference c a 33 1 0 e b 33 0 0 f # 24387 difference c a 33 1 0 e b 33 1 0 e # 24388 difference c a 33 1 0 e b 33 0 0 0 2 5 8 10 11 12 13 16 17 18 21 24 26 28 29 31 # 24389 difference c a 33 1 0 f b 33 1 0 f # 24390 difference c a 33 1 0 f b 33 0 0 e # 24391 difference c a 33 1 0 f b 33 1 0 f # 24392 difference c a 33 1 0 f b 33 0 0 f # 24393 difference c a 33 1 0 f b 33 1 0 f # 24394 difference c a 33 1 0 f b 33 0 0 1 5 7 8 10 11 12 17 18 19 21 22 23 24 27 28 30 # 24395 difference c a 33 1 0 2 4 5 6 7 8 9 10 11 16 19 20 22 24 26 27 31 32 b 33 1 0 2 4 5 6 7 8 9 10 11 16 19 20 22 24 26 27 31 32 # 24396 difference c a 33 1 0 2 4 5 6 7 8 9 10 11 16 19 20 22 24 26 27 31 32 b 33 0 0 e # 24397 difference c a 33 1 0 0 3 7 12 15 16 18 22 23 25 b 33 1 0 0 3 7 12 15 16 18 22 23 25 # 24398 difference c a 33 1 0 0 3 7 12 15 16 18 22 23 25 b 33 0 0 f # 24399 difference c a 33 1 0 0 1 2 5 7 8 9 10 13 15 16 17 19 20 21 23 25 26 28 30 31 b 33 1 0 0 1 2 5 7 8 9 10 13 15 16 17 19 20 21 23 25 26 28 30 31 # 24400 difference c a 33 1 0 0 1 2 5 7 8 9 10 13 15 16 17 19 20 21 23 25 26 28 30 31 b 33 0 0 0 1 2 5 9 10 13 14 17 18 21 23 24 25 26 27 28 29 31 32 # 24401 difference c a 33 1 0 e b 33 1 0 e # 24402 difference c a 33 1 0 e b 33 0 1 e # 24403 difference c a 33 1 0 e b 33 1 0 e # 24404 difference c a 33 1 0 e b 33 0 1 f # 24405 difference c a 33 1 0 e b 33 1 0 e # 24406 difference c a 33 1 0 e b 33 0 1 0 3 4 5 7 8 11 14 18 20 21 22 23 24 25 26 32 # 24407 difference c a 33 1 0 f b 33 1 0 f # 24408 difference c a 33 1 0 f b 33 0 1 e # 24409 difference c a 33 1 0 f b 33 1 0 f # 24410 difference c a 33 1 0 f b 33 0 1 f # 24411 difference c a 33 1 0 f b 33 1 0 f # 24412 difference c a 33 1 0 f b 33 0 1 1 6 7 9 11 12 13 15 17 18 20 22 23 26 27 28 # 24413 difference c a 33 1 0 0 6 9 10 13 14 15 16 17 18 20 27 28 30 31 32 b 33 1 0 0 6 9 10 13 14 15 16 17 18 20 27 28 30 31 32 # 24414 difference c a 33 1 0 0 6 9 10 13 14 15 16 17 18 20 27 28 30 31 32 b 33 0 1 e # 24415 difference c a 33 1 0 1 3 4 5 8 10 11 13 17 19 21 24 29 31 32 b 33 1 0 1 3 4 5 8 10 11 13 17 19 21 24 29 31 32 # 24416 difference c a 33 1 0 1 3 4 5 8 10 11 13 17 19 21 24 29 31 32 b 33 0 1 f # 24417 difference c a 33 1 0 0 2 3 4 8 11 12 13 16 18 19 20 22 23 28 29 31 b 33 1 0 0 2 3 4 8 11 12 13 16 18 19 20 22 23 28 29 31 # 24418 difference c a 33 1 0 0 2 3 4 8 11 12 13 16 18 19 20 22 23 28 29 31 b 33 0 1 4 8 10 11 14 15 22 24 27 28 29 # 24419 difference c a 33 1 0 e b 33 1 0 e # 24420 difference c a 33 1 0 e b 33 1 0 e # 24421 difference c a 33 1 0 e b 33 1 0 e # 24422 difference c a 33 1 0 e b 33 1 0 f # 24423 difference c a 33 1 0 e b 33 1 0 e # 24424 difference c a 33 1 0 e b 33 1 0 1 3 5 6 8 9 10 13 15 17 19 20 21 24 27 29 31 # 24425 difference c a 33 1 0 f b 33 1 0 f # 24426 difference c a 33 1 0 f b 33 1 0 e # 24427 difference c a 33 1 0 f b 33 1 0 f # 24428 difference c a 33 1 0 f b 33 1 0 f # 24429 difference c a 33 1 0 f b 33 1 0 f # 24430 difference c a 33 1 0 f b 33 1 0 0 1 2 3 4 7 9 11 17 21 23 27 28 31 # 24431 difference c a 33 1 0 4 5 6 7 9 10 12 14 15 23 27 28 30 32 b 33 1 0 4 5 6 7 9 10 12 14 15 23 27 28 30 32 # 24432 difference c a 33 1 0 4 5 6 7 9 10 12 14 15 23 27 28 30 32 b 33 1 0 e # 24433 difference c a 33 1 0 1 2 9 11 12 16 18 19 20 24 29 30 b 33 1 0 1 2 9 11 12 16 18 19 20 24 29 30 # 24434 difference c a 33 1 0 1 2 9 11 12 16 18 19 20 24 29 30 b 33 1 0 f # 24435 difference c a 33 1 0 0 1 2 6 11 12 19 20 21 22 25 27 28 29 31 32 b 33 1 0 0 1 2 6 11 12 19 20 21 22 25 27 28 29 31 32 # 24436 difference c a 33 1 0 0 1 2 6 11 12 19 20 21 22 25 27 28 29 31 32 b 33 1 0 1 2 3 4 9 10 11 15 17 18 20 23 24 26 27 28 # 24437 difference c a 33 1 0 e b 33 1 0 e # 24438 difference c a 33 1 0 e b 33 1 1 e # 24439 difference c a 33 1 0 e b 33 1 0 e # 24440 difference c a 33 1 0 e b 33 1 1 f # 24441 difference c a 33 1 0 e b 33 1 0 e # 24442 difference c a 33 1 0 e b 33 1 1 3 10 11 13 16 20 21 22 24 25 29 30 31 # 24443 difference c a 33 1 0 f b 33 1 0 f # 24444 difference c a 33 1 0 f b 33 1 1 e # 24445 difference c a 33 1 0 f b 33 1 0 f # 24446 difference c a 33 1 0 f b 33 1 1 f # 24447 difference c a 33 1 0 f b 33 1 0 f # 24448 difference c a 33 1 0 f b 33 1 1 0 2 4 6 7 9 12 13 21 22 28 30 31 32 # 24449 difference c a 33 1 0 3 6 8 11 13 15 21 22 23 26 28 29 b 33 1 0 3 6 8 11 13 15 21 22 23 26 28 29 # 24450 difference c a 33 1 0 3 6 8 11 13 15 21 22 23 26 28 29 b 33 1 1 e # 24451 difference c a 33 1 0 0 2 5 10 11 13 15 24 25 27 29 30 31 b 33 1 0 0 2 5 10 11 13 15 24 25 27 29 30 31 # 24452 difference c a 33 1 0 0 2 5 10 11 13 15 24 25 27 29 30 31 b 33 1 1 f # 24453 difference c a 33 1 0 0 3 5 6 7 8 9 11 15 16 17 18 19 22 24 25 27 28 32 b 33 1 0 0 3 5 6 7 8 9 11 15 16 17 18 19 22 24 25 27 28 32 # 24454 difference c a 33 1 0 0 3 5 6 7 8 9 11 15 16 17 18 19 22 24 25 27 28 32 b 33 1 1 0 3 5 6 9 15 19 22 23 24 25 26 28 31 # 24455 difference c a 33 1 1 e b 33 1 1 e # 24456 difference c a 33 1 1 e b 33 0 0 e # 24457 difference c a 33 1 1 e b 33 1 1 e # 24458 difference c a 33 1 1 e b 33 0 0 f # 24459 difference c a 33 1 1 e b 33 1 1 e # 24460 difference c a 33 1 1 e b 33 0 0 2 5 6 7 11 14 15 17 18 19 21 22 24 27 28 29 # 24461 difference c a 33 1 1 f b 33 1 1 f # 24462 difference c a 33 1 1 f b 33 0 0 e # 24463 difference c a 33 1 1 f b 33 1 1 f # 24464 difference c a 33 1 1 f b 33 0 0 f # 24465 difference c a 33 1 1 f b 33 1 1 f # 24466 difference c a 33 1 1 f b 33 0 0 1 2 5 6 7 8 13 14 16 17 18 19 20 21 22 25 26 30 32 # 24467 difference c a 33 1 1 1 7 13 15 18 21 22 23 24 25 28 29 b 33 1 1 1 7 13 15 18 21 22 23 24 25 28 29 # 24468 difference c a 33 1 1 1 7 13 15 18 21 22 23 24 25 28 29 b 33 0 0 e # 24469 difference c a 33 1 1 0 2 3 4 5 9 14 15 20 23 26 28 29 30 b 33 1 1 0 2 3 4 5 9 14 15 20 23 26 28 29 30 # 24470 difference c a 33 1 1 0 2 3 4 5 9 14 15 20 23 26 28 29 30 b 33 0 0 f # 24471 difference c a 33 1 1 0 3 4 7 8 14 16 17 19 23 25 29 30 b 33 1 1 0 3 4 7 8 14 16 17 19 23 25 29 30 # 24472 difference c a 33 1 1 0 3 4 7 8 14 16 17 19 23 25 29 30 b 33 0 0 0 1 7 8 9 10 12 15 16 18 20 21 22 25 26 28 30 31 # 24473 difference c a 33 1 1 e b 33 1 1 e # 24474 difference c a 33 1 1 e b 33 0 1 e # 24475 difference c a 33 1 1 e b 33 1 1 e # 24476 difference c a 33 1 1 e b 33 0 1 f # 24477 difference c a 33 1 1 e b 33 1 1 e # 24478 difference c a 33 1 1 e b 33 0 1 3 4 6 7 11 14 15 19 20 21 23 24 26 32 # 24479 difference c a 33 1 1 f b 33 1 1 f # 24480 difference c a 33 1 1 f b 33 0 1 e # 24481 difference c a 33 1 1 f b 33 1 1 f # 24482 difference c a 33 1 1 f b 33 0 1 f # 24483 difference c a 33 1 1 f b 33 1 1 f # 24484 difference c a 33 1 1 f b 33 0 1 0 4 8 10 11 12 16 19 22 23 24 28 29 31 32 # 24485 difference c a 33 1 1 0 1 2 3 6 7 8 9 10 12 13 18 21 23 24 25 27 30 31 b 33 1 1 0 1 2 3 6 7 8 9 10 12 13 18 21 23 24 25 27 30 31 # 24486 difference c a 33 1 1 0 1 2 3 6 7 8 9 10 12 13 18 21 23 24 25 27 30 31 b 33 0 1 e # 24487 difference c a 33 1 1 0 1 2 3 4 6 12 13 17 18 21 25 26 28 29 30 32 b 33 1 1 0 1 2 3 4 6 12 13 17 18 21 25 26 28 29 30 32 # 24488 difference c a 33 1 1 0 1 2 3 4 6 12 13 17 18 21 25 26 28 29 30 32 b 33 0 1 f # 24489 difference c a 33 1 1 3 5 7 10 12 14 15 17 21 24 25 26 28 32 b 33 1 1 3 5 7 10 12 14 15 17 21 24 25 26 28 32 # 24490 difference c a 33 1 1 3 5 7 10 12 14 15 17 21 24 25 26 28 32 b 33 0 1 0 3 7 10 11 13 17 21 24 25 26 28 31 # 24491 difference c a 33 1 1 e b 33 1 1 e # 24492 difference c a 33 1 1 e b 33 1 0 e # 24493 difference c a 33 1 1 e b 33 1 1 e # 24494 difference c a 33 1 1 e b 33 1 0 f # 24495 difference c a 33 1 1 e b 33 1 1 e # 24496 difference c a 33 1 1 e b 33 1 0 0 2 4 5 6 8 9 11 13 15 17 19 22 23 25 26 27 29 31 # 24497 difference c a 33 1 1 f b 33 1 1 f # 24498 difference c a 33 1 1 f b 33 1 0 e # 24499 difference c a 33 1 1 f b 33 1 1 f # 24500 difference c a 33 1 1 f b 33 1 0 f # 24501 difference c a 33 1 1 f b 33 1 1 f # 24502 difference c a 33 1 1 f b 33 1 0 2 4 7 8 10 12 13 14 15 17 18 19 21 24 25 26 27 29 30 32 # 24503 difference c a 33 1 1 0 1 2 4 5 6 8 10 11 13 14 15 16 17 19 20 21 22 23 24 29 b 33 1 1 0 1 2 4 5 6 8 10 11 13 14 15 16 17 19 20 21 22 23 24 29 # 24504 difference c a 33 1 1 0 1 2 4 5 6 8 10 11 13 14 15 16 17 19 20 21 22 23 24 29 b 33 1 0 e # 24505 difference c a 33 1 1 1 4 5 6 8 9 12 16 17 19 20 22 24 26 28 30 32 b 33 1 1 1 4 5 6 8 9 12 16 17 19 20 22 24 26 28 30 32 # 24506 difference c a 33 1 1 1 4 5 6 8 9 12 16 17 19 20 22 24 26 28 30 32 b 33 1 0 f # 24507 difference c a 33 1 1 2 5 6 10 11 12 14 15 16 17 20 21 23 25 26 27 28 29 30 b 33 1 1 2 5 6 10 11 12 14 15 16 17 20 21 23 25 26 27 28 29 30 # 24508 difference c a 33 1 1 2 5 6 10 11 12 14 15 16 17 20 21 23 25 26 27 28 29 30 b 33 1 0 2 6 7 9 10 11 12 14 15 16 18 19 21 25 26 28 30 32 # 24509 difference c a 33 1 1 e b 33 1 1 e # 24510 difference c a 33 1 1 e b 33 1 1 e # 24511 difference c a 33 1 1 e b 33 1 1 e # 24512 difference c a 33 1 1 e b 33 1 1 f # 24513 difference c a 33 1 1 e b 33 1 1 e # 24514 difference c a 33 1 1 e b 33 1 1 0 1 4 7 8 10 12 13 18 21 22 24 30 # 24515 difference c a 33 1 1 f b 33 1 1 f # 24516 difference c a 33 1 1 f b 33 1 1 e # 24517 difference c a 33 1 1 f b 33 1 1 f # 24518 difference c a 33 1 1 f b 33 1 1 f # 24519 difference c a 33 1 1 f b 33 1 1 f # 24520 difference c a 33 1 1 f b 33 1 1 2 4 5 9 14 15 17 20 21 23 24 30 31 32 # 24521 difference c a 33 1 1 0 2 4 6 7 11 12 13 15 18 19 20 21 22 24 26 31 32 b 33 1 1 0 2 4 6 7 11 12 13 15 18 19 20 21 22 24 26 31 32 # 24522 difference c a 33 1 1 0 2 4 6 7 11 12 13 15 18 19 20 21 22 24 26 31 32 b 33 1 1 e # 24523 difference c a 33 1 1 3 7 10 13 14 15 17 18 20 21 24 25 30 31 32 b 33 1 1 3 7 10 13 14 15 17 18 20 21 24 25 30 31 32 # 24524 difference c a 33 1 1 3 7 10 13 14 15 17 18 20 21 24 25 30 31 32 b 33 1 1 f # 24525 difference c a 33 1 1 3 4 7 8 9 11 18 20 22 24 26 31 32 b 33 1 1 3 4 7 8 9 11 18 20 22 24 26 31 32 # 24526 difference c a 33 1 1 3 4 7 8 9 11 18 20 22 24 26 31 32 b 33 1 1 0 2 3 4 5 6 9 10 11 12 14 21 26 27 28 30 32 # 24527 difference c a 63 0 0 e b 63 0 0 e # 24528 difference c a 63 0 0 e b 63 0 0 e # 24529 difference c a 63 0 0 e b 63 0 0 e # 24530 difference c a 63 0 0 e b 63 0 0 f # 24531 difference c a 63 0 0 e b 63 0 0 e # 24532 difference c a 63 0 0 e b 63 0 0 0 2 6 13 14 15 16 18 19 23 26 27 30 31 32 36 39 40 41 46 49 51 54 55 56 57 59 60 62 # 24533 difference c a 63 0 0 f b 63 0 0 f # 24534 difference c a 63 0 0 f b 63 0 0 e # 24535 difference c a 63 0 0 f b 63 0 0 f # 24536 difference c a 63 0 0 f b 63 0 0 f # 24537 difference c a 63 0 0 f b 63 0 0 f # 24538 difference c a 63 0 0 f b 63 0 0 0 1 3 5 10 11 12 14 16 17 19 21 22 23 24 27 29 30 35 36 37 40 43 44 45 46 48 51 53 54 58 59 61 # 24539 difference c a 63 0 0 0 1 3 4 9 10 11 13 14 15 20 24 25 27 29 30 31 32 34 35 36 37 39 40 42 44 45 50 52 54 57 59 60 62 b 63 0 0 0 1 3 4 9 10 11 13 14 15 20 24 25 27 29 30 31 32 34 35 36 37 39 40 42 44 45 50 52 54 57 59 60 62 # 24540 difference c a 63 0 0 0 1 3 4 9 10 11 13 14 15 20 24 25 27 29 30 31 32 34 35 36 37 39 40 42 44 45 50 52 54 57 59 60 62 b 63 0 0 e # 24541 difference c a 63 0 0 0 1 3 9 12 14 16 20 21 26 27 29 30 32 36 37 38 39 44 47 49 54 55 56 57 58 59 60 b 63 0 0 0 1 3 9 12 14 16 20 21 26 27 29 30 32 36 37 38 39 44 47 49 54 55 56 57 58 59 60 # 24542 difference c a 63 0 0 0 1 3 9 12 14 16 20 21 26 27 29 30 32 36 37 38 39 44 47 49 54 55 56 57 58 59 60 b 63 0 0 f # 24543 difference c a 63 0 0 1 3 8 9 10 11 16 20 21 24 25 27 28 29 30 34 35 36 43 44 45 46 50 51 53 56 57 58 59 61 62 b 63 0 0 1 3 8 9 10 11 16 20 21 24 25 27 28 29 30 34 35 36 43 44 45 46 50 51 53 56 57 58 59 61 62 # 24544 difference c a 63 0 0 1 3 8 9 10 11 16 20 21 24 25 27 28 29 30 34 35 36 43 44 45 46 50 51 53 56 57 58 59 61 62 b 63 0 0 0 2 3 7 8 9 12 17 18 21 22 23 24 25 26 27 29 30 33 37 39 40 44 45 46 48 49 50 52 53 55 57 59 60 62 # 24545 difference c a 63 0 0 e b 63 0 0 e # 24546 difference c a 63 0 0 e b 63 0 1 e # 24547 difference c a 63 0 0 e b 63 0 0 e # 24548 difference c a 63 0 0 e b 63 0 1 f # 24549 difference c a 63 0 0 e b 63 0 0 e # 24550 difference c a 63 0 0 e b 63 0 1 0 1 5 6 8 10 12 13 14 16 17 18 21 26 27 29 30 32 34 39 40 43 44 46 47 48 49 50 52 54 55 56 58 61 # 24551 difference c a 63 0 0 f b 63 0 0 f # 24552 difference c a 63 0 0 f b 63 0 1 e # 24553 difference c a 63 0 0 f b 63 0 0 f # 24554 difference c a 63 0 0 f b 63 0 1 f # 24555 difference c a 63 0 0 f b 63 0 0 f # 24556 difference c a 63 0 0 f b 63 0 1 3 5 10 13 16 20 21 23 24 25 26 27 29 31 33 35 37 39 41 43 44 46 47 48 51 52 53 54 55 57 58 59 60 # 24557 difference c a 63 0 0 0 1 2 3 5 6 8 9 10 11 12 14 15 16 17 19 20 23 24 28 29 30 31 32 33 34 36 37 38 39 40 43 44 46 47 53 54 58 61 b 63 0 0 0 1 2 3 5 6 8 9 10 11 12 14 15 16 17 19 20 23 24 28 29 30 31 32 33 34 36 37 38 39 40 43 44 46 47 53 54 58 61 # 24558 difference c a 63 0 0 0 1 2 3 5 6 8 9 10 11 12 14 15 16 17 19 20 23 24 28 29 30 31 32 33 34 36 37 38 39 40 43 44 46 47 53 54 58 61 b 63 0 1 e # 24559 difference c a 63 0 0 0 1 2 5 6 10 13 14 15 20 23 24 25 26 27 35 36 38 40 41 42 44 45 47 48 49 51 53 54 55 56 58 60 b 63 0 0 0 1 2 5 6 10 13 14 15 20 23 24 25 26 27 35 36 38 40 41 42 44 45 47 48 49 51 53 54 55 56 58 60 # 24560 difference c a 63 0 0 0 1 2 5 6 10 13 14 15 20 23 24 25 26 27 35 36 38 40 41 42 44 45 47 48 49 51 53 54 55 56 58 60 b 63 0 1 f # 24561 difference c a 63 0 0 2 3 6 7 9 10 11 14 17 18 20 21 22 23 24 26 30 31 32 33 34 37 39 41 43 47 56 58 62 b 63 0 0 2 3 6 7 9 10 11 14 17 18 20 21 22 23 24 26 30 31 32 33 34 37 39 41 43 47 56 58 62 # 24562 difference c a 63 0 0 2 3 6 7 9 10 11 14 17 18 20 21 22 23 24 26 30 31 32 33 34 37 39 41 43 47 56 58 62 b 63 0 1 2 6 8 9 10 11 17 19 21 22 23 26 27 28 30 31 35 36 39 40 41 42 47 49 51 52 54 56 57 58 60 61 # 24563 difference c a 63 0 0 e b 63 0 0 e # 24564 difference c a 63 0 0 e b 63 1 0 e # 24565 difference c a 63 0 0 e b 63 0 0 e # 24566 difference c a 63 0 0 e b 63 1 0 f # 24567 difference c a 63 0 0 e b 63 0 0 e # 24568 difference c a 63 0 0 e b 63 1 0 2 6 9 12 13 14 15 17 20 21 23 25 26 27 28 29 32 34 36 37 39 41 47 50 55 58 60 62 # 24569 difference c a 63 0 0 f b 63 0 0 f # 24570 difference c a 63 0 0 f b 63 1 0 e # 24571 difference c a 63 0 0 f b 63 0 0 f # 24572 difference c a 63 0 0 f b 63 1 0 f # 24573 difference c a 63 0 0 f b 63 0 0 f # 24574 difference c a 63 0 0 f b 63 1 0 0 1 2 6 8 10 12 14 15 16 18 21 25 26 28 31 32 33 34 37 38 41 42 45 46 48 49 50 52 54 55 56 57 59 60 61 # 24575 difference c a 63 0 0 0 1 7 10 11 12 14 19 22 26 30 34 39 40 41 42 43 47 48 49 50 53 55 58 59 60 61 b 63 0 0 0 1 7 10 11 12 14 19 22 26 30 34 39 40 41 42 43 47 48 49 50 53 55 58 59 60 61 # 24576 difference c a 63 0 0 0 1 7 10 11 12 14 19 22 26 30 34 39 40 41 42 43 47 48 49 50 53 55 58 59 60 61 b 63 1 0 e # 24577 difference c a 63 0 0 0 1 5 6 8 9 11 13 16 17 19 21 23 25 26 27 29 32 34 37 38 39 41 42 43 44 45 46 48 53 56 60 61 62 b 63 0 0 0 1 5 6 8 9 11 13 16 17 19 21 23 25 26 27 29 32 34 37 38 39 41 42 43 44 45 46 48 53 56 60 61 62 # 24578 difference c a 63 0 0 0 1 5 6 8 9 11 13 16 17 19 21 23 25 26 27 29 32 34 37 38 39 41 42 43 44 45 46 48 53 56 60 61 62 b 63 1 0 f # 24579 difference c a 63 0 0 0 2 3 6 8 9 11 14 15 17 22 23 25 28 29 31 33 34 35 43 44 45 46 47 48 52 54 55 61 62 b 63 0 0 0 2 3 6 8 9 11 14 15 17 22 23 25 28 29 31 33 34 35 43 44 45 46 47 48 52 54 55 61 62 # 24580 difference c a 63 0 0 0 2 3 6 8 9 11 14 15 17 22 23 25 28 29 31 33 34 35 43 44 45 46 47 48 52 54 55 61 62 b 63 1 0 1 2 7 9 10 12 13 14 15 16 20 23 24 27 28 30 32 33 36 37 38 40 41 42 43 44 45 47 48 49 51 54 55 56 58 59 60 61 62 # 24581 difference c a 63 0 0 e b 63 0 0 e # 24582 difference c a 63 0 0 e b 63 1 1 e # 24583 difference c a 63 0 0 e b 63 0 0 e # 24584 difference c a 63 0 0 e b 63 1 1 f # 24585 difference c a 63 0 0 e b 63 0 0 e # 24586 difference c a 63 0 0 e b 63 1 1 0 1 3 4 6 9 10 12 13 14 15 16 19 20 21 22 23 24 26 28 29 31 33 34 37 39 40 43 45 46 47 49 50 52 54 56 57 58 59 # 24587 difference c a 63 0 0 f b 63 0 0 f # 24588 difference c a 63 0 0 f b 63 1 1 e # 24589 difference c a 63 0 0 f b 63 0 0 f # 24590 difference c a 63 0 0 f b 63 1 1 f # 24591 difference c a 63 0 0 f b 63 0 0 f # 24592 difference c a 63 0 0 f b 63 1 1 0 4 5 6 7 8 16 19 20 21 22 25 29 30 33 36 39 41 43 44 47 48 49 50 51 53 55 57 59 60 61 62 # 24593 difference c a 63 0 0 1 3 4 5 7 9 10 12 14 15 19 20 23 24 25 28 31 33 34 36 37 38 39 40 41 43 45 46 47 50 53 56 57 58 59 60 62 b 63 0 0 1 3 4 5 7 9 10 12 14 15 19 20 23 24 25 28 31 33 34 36 37 38 39 40 41 43 45 46 47 50 53 56 57 58 59 60 62 # 24594 difference c a 63 0 0 1 3 4 5 7 9 10 12 14 15 19 20 23 24 25 28 31 33 34 36 37 38 39 40 41 43 45 46 47 50 53 56 57 58 59 60 62 b 63 1 1 e # 24595 difference c a 63 0 0 4 7 12 15 16 20 22 26 30 31 36 37 41 42 44 46 47 48 50 51 52 53 54 57 58 59 61 b 63 0 0 4 7 12 15 16 20 22 26 30 31 36 37 41 42 44 46 47 48 50 51 52 53 54 57 58 59 61 # 24596 difference c a 63 0 0 4 7 12 15 16 20 22 26 30 31 36 37 41 42 44 46 47 48 50 51 52 53 54 57 58 59 61 b 63 1 1 f # 24597 difference c a 63 0 0 0 2 6 7 8 10 11 13 14 16 21 23 26 27 28 32 34 35 36 38 40 46 48 49 50 52 56 60 61 62 b 63 0 0 0 2 6 7 8 10 11 13 14 16 21 23 26 27 28 32 34 35 36 38 40 46 48 49 50 52 56 60 61 62 # 24598 difference c a 63 0 0 0 2 6 7 8 10 11 13 14 16 21 23 26 27 28 32 34 35 36 38 40 46 48 49 50 52 56 60 61 62 b 63 1 1 1 2 4 9 10 11 19 23 26 27 29 30 31 32 36 38 39 42 44 46 47 48 50 52 53 54 55 57 58 59 60 # 24599 difference c a 63 0 1 e b 63 0 1 e # 24600 difference c a 63 0 1 e b 63 0 0 e # 24601 difference c a 63 0 1 e b 63 0 1 e # 24602 difference c a 63 0 1 e b 63 0 0 f # 24603 difference c a 63 0 1 e b 63 0 1 e # 24604 difference c a 63 0 1 e b 63 0 0 1 2 3 4 6 7 11 12 13 14 15 18 19 20 21 22 23 25 26 27 31 34 35 37 38 39 40 42 43 44 45 46 49 53 55 56 57 58 # 24605 difference c a 63 0 1 f b 63 0 1 f # 24606 difference c a 63 0 1 f b 63 0 0 e # 24607 difference c a 63 0 1 f b 63 0 1 f # 24608 difference c a 63 0 1 f b 63 0 0 f # 24609 difference c a 63 0 1 f b 63 0 1 f # 24610 difference c a 63 0 1 f b 63 0 0 4 5 7 8 10 11 13 14 15 17 22 23 24 25 26 28 29 33 34 36 39 40 42 45 47 51 52 53 54 55 56 58 59 # 24611 difference c a 63 0 1 0 4 6 7 12 14 15 16 18 20 21 23 24 25 26 30 33 34 37 39 41 44 45 46 47 49 52 54 55 57 60 61 62 b 63 0 1 0 4 6 7 12 14 15 16 18 20 21 23 24 25 26 30 33 34 37 39 41 44 45 46 47 49 52 54 55 57 60 61 62 # 24612 difference c a 63 0 1 0 4 6 7 12 14 15 16 18 20 21 23 24 25 26 30 33 34 37 39 41 44 45 46 47 49 52 54 55 57 60 61 62 b 63 0 0 e # 24613 difference c a 63 0 1 1 3 9 11 12 14 15 16 17 18 19 20 22 24 25 26 28 29 30 32 36 41 42 45 52 54 56 58 59 61 62 b 63 0 1 1 3 9 11 12 14 15 16 17 18 19 20 22 24 25 26 28 29 30 32 36 41 42 45 52 54 56 58 59 61 62 # 24614 difference c a 63 0 1 1 3 9 11 12 14 15 16 17 18 19 20 22 24 25 26 28 29 30 32 36 41 42 45 52 54 56 58 59 61 62 b 63 0 0 f # 24615 difference c a 63 0 1 0 4 5 6 9 11 13 14 18 19 20 21 24 25 27 29 30 33 36 39 40 41 42 44 45 46 48 50 51 57 59 60 61 62 b 63 0 1 0 4 5 6 9 11 13 14 18 19 20 21 24 25 27 29 30 33 36 39 40 41 42 44 45 46 48 50 51 57 59 60 61 62 # 24616 difference c a 63 0 1 0 4 5 6 9 11 13 14 18 19 20 21 24 25 27 29 30 33 36 39 40 41 42 44 45 46 48 50 51 57 59 60 61 62 b 63 0 0 0 1 4 5 6 7 8 11 14 20 21 22 33 38 40 43 44 45 47 49 51 52 53 57 58 59 61 62 # 24617 difference c a 63 0 1 e b 63 0 1 e # 24618 difference c a 63 0 1 e b 63 0 1 e # 24619 difference c a 63 0 1 e b 63 0 1 e # 24620 difference c a 63 0 1 e b 63 0 1 f # 24621 difference c a 63 0 1 e b 63 0 1 e # 24622 difference c a 63 0 1 e b 63 0 1 0 1 3 5 6 10 13 14 16 17 19 20 24 25 27 30 31 32 34 36 37 38 42 43 45 46 48 51 52 55 57 58 59 60 62 # 24623 difference c a 63 0 1 f b 63 0 1 f # 24624 difference c a 63 0 1 f b 63 0 1 e # 24625 difference c a 63 0 1 f b 63 0 1 f # 24626 difference c a 63 0 1 f b 63 0 1 f # 24627 difference c a 63 0 1 f b 63 0 1 f # 24628 difference c a 63 0 1 f b 63 0 1 0 1 2 4 5 6 11 12 14 15 21 22 27 29 30 34 37 41 43 44 46 48 52 54 56 60 61 62 # 24629 difference c a 63 0 1 3 4 9 10 12 17 18 19 20 21 22 23 24 25 27 28 30 32 38 39 44 45 46 47 48 50 57 60 61 62 b 63 0 1 3 4 9 10 12 17 18 19 20 21 22 23 24 25 27 28 30 32 38 39 44 45 46 47 48 50 57 60 61 62 # 24630 difference c a 63 0 1 3 4 9 10 12 17 18 19 20 21 22 23 24 25 27 28 30 32 38 39 44 45 46 47 48 50 57 60 61 62 b 63 0 1 e # 24631 difference c a 63 0 1 0 4 5 6 7 11 16 17 18 22 23 24 25 26 28 29 33 34 35 37 38 39 41 45 46 48 49 50 53 58 62 b 63 0 1 0 4 5 6 7 11 16 17 18 22 23 24 25 26 28 29 33 34 35 37 38 39 41 45 46 48 49 50 53 58 62 # 24632 difference c a 63 0 1 0 4 5 6 7 11 16 17 18 22 23 24 25 26 28 29 33 34 35 37 38 39 41 45 46 48 49 50 53 58 62 b 63 0 1 f # 24633 difference c a 63 0 1 1 10 11 13 14 15 16 20 23 24 25 26 27 28 29 30 32 34 38 39 42 43 45 46 47 51 53 54 57 60 61 62 b 63 0 1 1 10 11 13 14 15 16 20 23 24 25 26 27 28 29 30 32 34 38 39 42 43 45 46 47 51 53 54 57 60 61 62 # 24634 difference c a 63 0 1 1 10 11 13 14 15 16 20 23 24 25 26 27 28 29 30 32 34 38 39 42 43 45 46 47 51 53 54 57 60 61 62 b 63 0 1 0 2 4 6 7 8 10 11 12 15 16 17 18 19 21 22 26 27 29 30 31 32 33 35 36 39 40 44 45 48 51 52 53 58 59 60 61 62 # 24635 difference c a 63 0 1 e b 63 0 1 e # 24636 difference c a 63 0 1 e b 63 1 0 e # 24637 difference c a 63 0 1 e b 63 0 1 e # 24638 difference c a 63 0 1 e b 63 1 0 f # 24639 difference c a 63 0 1 e b 63 0 1 e # 24640 difference c a 63 0 1 e b 63 1 0 0 2 3 8 10 13 14 15 17 18 20 21 22 29 30 33 34 35 40 41 42 43 44 46 49 50 52 53 54 56 57 60 # 24641 difference c a 63 0 1 f b 63 0 1 f # 24642 difference c a 63 0 1 f b 63 1 0 e # 24643 difference c a 63 0 1 f b 63 0 1 f # 24644 difference c a 63 0 1 f b 63 1 0 f # 24645 difference c a 63 0 1 f b 63 0 1 f # 24646 difference c a 63 0 1 f b 63 1 0 4 5 6 7 9 10 15 16 17 20 22 23 25 28 29 30 34 37 39 41 43 46 47 55 57 60 62 # 24647 difference c a 63 0 1 1 2 4 6 7 8 9 10 11 12 14 15 16 17 24 27 28 29 30 34 36 39 42 44 45 47 48 50 52 55 56 57 58 59 60 62 b 63 0 1 1 2 4 6 7 8 9 10 11 12 14 15 16 17 24 27 28 29 30 34 36 39 42 44 45 47 48 50 52 55 56 57 58 59 60 62 # 24648 difference c a 63 0 1 1 2 4 6 7 8 9 10 11 12 14 15 16 17 24 27 28 29 30 34 36 39 42 44 45 47 48 50 52 55 56 57 58 59 60 62 b 63 1 0 e # 24649 difference c a 63 0 1 1 2 3 4 6 7 10 11 12 13 14 15 18 19 24 26 27 28 30 34 36 37 42 45 46 47 49 51 52 53 55 56 58 59 60 b 63 0 1 1 2 3 4 6 7 10 11 12 13 14 15 18 19 24 26 27 28 30 34 36 37 42 45 46 47 49 51 52 53 55 56 58 59 60 # 24650 difference c a 63 0 1 1 2 3 4 6 7 10 11 12 13 14 15 18 19 24 26 27 28 30 34 36 37 42 45 46 47 49 51 52 53 55 56 58 59 60 b 63 1 0 f # 24651 difference c a 63 0 1 1 3 4 7 9 10 11 12 13 14 15 21 22 24 25 27 28 29 31 32 34 36 37 40 42 43 45 47 49 51 52 55 58 59 61 62 b 63 0 1 1 3 4 7 9 10 11 12 13 14 15 21 22 24 25 27 28 29 31 32 34 36 37 40 42 43 45 47 49 51 52 55 58 59 61 62 # 24652 difference c a 63 0 1 1 3 4 7 9 10 11 12 13 14 15 21 22 24 25 27 28 29 31 32 34 36 37 40 42 43 45 47 49 51 52 55 58 59 61 62 b 63 1 0 0 2 5 6 12 14 15 21 23 24 25 26 27 29 30 33 34 37 38 39 44 45 49 51 53 54 56 # 24653 difference c a 63 0 1 e b 63 0 1 e # 24654 difference c a 63 0 1 e b 63 1 1 e # 24655 difference c a 63 0 1 e b 63 0 1 e # 24656 difference c a 63 0 1 e b 63 1 1 f # 24657 difference c a 63 0 1 e b 63 0 1 e # 24658 difference c a 63 0 1 e b 63 1 1 3 4 5 6 7 10 13 14 18 20 21 22 24 26 28 30 32 33 36 40 42 43 47 48 50 51 53 58 60 # 24659 difference c a 63 0 1 f b 63 0 1 f # 24660 difference c a 63 0 1 f b 63 1 1 e # 24661 difference c a 63 0 1 f b 63 0 1 f # 24662 difference c a 63 0 1 f b 63 1 1 f # 24663 difference c a 63 0 1 f b 63 0 1 f # 24664 difference c a 63 0 1 f b 63 1 1 0 2 5 7 8 9 11 12 13 15 16 17 18 19 21 23 25 28 29 30 31 33 34 35 36 38 46 49 53 55 56 57 59 60 # 24665 difference c a 63 0 1 1 4 5 6 13 15 18 19 20 21 22 25 26 29 30 31 32 34 35 37 38 42 43 47 48 54 55 57 58 59 60 61 b 63 0 1 1 4 5 6 13 15 18 19 20 21 22 25 26 29 30 31 32 34 35 37 38 42 43 47 48 54 55 57 58 59 60 61 # 24666 difference c a 63 0 1 1 4 5 6 13 15 18 19 20 21 22 25 26 29 30 31 32 34 35 37 38 42 43 47 48 54 55 57 58 59 60 61 b 63 1 1 e # 24667 difference c a 63 0 1 0 1 7 8 9 10 14 16 18 20 28 30 31 36 37 40 41 42 45 50 54 55 61 b 63 0 1 0 1 7 8 9 10 14 16 18 20 28 30 31 36 37 40 41 42 45 50 54 55 61 # 24668 difference c a 63 0 1 0 1 7 8 9 10 14 16 18 20 28 30 31 36 37 40 41 42 45 50 54 55 61 b 63 1 1 f # 24669 difference c a 63 0 1 0 4 8 12 14 15 16 17 18 21 22 26 27 28 29 32 33 34 35 36 39 40 41 45 48 50 53 54 55 56 57 58 59 61 b 63 0 1 0 4 8 12 14 15 16 17 18 21 22 26 27 28 29 32 33 34 35 36 39 40 41 45 48 50 53 54 55 56 57 58 59 61 # 24670 difference c a 63 0 1 0 4 8 12 14 15 16 17 18 21 22 26 27 28 29 32 33 34 35 36 39 40 41 45 48 50 53 54 55 56 57 58 59 61 b 63 1 1 1 2 4 6 7 8 9 10 13 14 15 16 18 26 28 29 32 34 36 37 39 40 49 50 51 55 61 # 24671 difference c a 63 1 0 e b 63 1 0 e # 24672 difference c a 63 1 0 e b 63 0 0 e # 24673 difference c a 63 1 0 e b 63 1 0 e # 24674 difference c a 63 1 0 e b 63 0 0 f # 24675 difference c a 63 1 0 e b 63 1 0 e # 24676 difference c a 63 1 0 e b 63 0 0 0 4 5 6 7 8 9 10 11 16 19 20 22 23 24 26 29 30 32 33 34 35 36 37 38 39 40 41 42 43 44 45 47 49 51 54 56 57 62 # 24677 difference c a 63 1 0 f b 63 1 0 f # 24678 difference c a 63 1 0 f b 63 0 0 e # 24679 difference c a 63 1 0 f b 63 1 0 f # 24680 difference c a 63 1 0 f b 63 0 0 f # 24681 difference c a 63 1 0 f b 63 1 0 f # 24682 difference c a 63 1 0 f b 63 0 0 2 7 9 10 12 13 14 15 16 19 20 21 22 23 27 28 29 32 34 36 39 41 44 45 46 47 50 52 56 57 59 61 # 24683 difference c a 63 1 0 1 3 4 5 6 7 8 9 10 12 13 19 21 22 23 24 25 27 29 31 32 33 35 42 45 46 47 49 50 51 52 53 54 59 b 63 1 0 1 3 4 5 6 7 8 9 10 12 13 19 21 22 23 24 25 27 29 31 32 33 35 42 45 46 47 49 50 51 52 53 54 59 # 24684 difference c a 63 1 0 1 3 4 5 6 7 8 9 10 12 13 19 21 22 23 24 25 27 29 31 32 33 35 42 45 46 47 49 50 51 52 53 54 59 b 63 0 0 e # 24685 difference c a 63 1 0 2 3 4 8 9 10 13 14 17 20 21 25 28 29 30 33 35 37 40 46 47 49 52 53 57 58 60 62 b 63 1 0 2 3 4 8 9 10 13 14 17 20 21 25 28 29 30 33 35 37 40 46 47 49 52 53 57 58 60 62 # 24686 difference c a 63 1 0 2 3 4 8 9 10 13 14 17 20 21 25 28 29 30 33 35 37 40 46 47 49 52 53 57 58 60 62 b 63 0 0 f # 24687 difference c a 63 1 0 2 5 7 9 11 12 13 15 18 21 22 23 25 26 27 28 35 37 38 39 40 41 43 44 45 47 51 54 57 60 61 62 b 63 1 0 2 5 7 9 11 12 13 15 18 21 22 23 25 26 27 28 35 37 38 39 40 41 43 44 45 47 51 54 57 60 61 62 # 24688 difference c a 63 1 0 2 5 7 9 11 12 13 15 18 21 22 23 25 26 27 28 35 37 38 39 40 41 43 44 45 47 51 54 57 60 61 62 b 63 0 0 8 10 11 12 13 15 17 20 21 25 26 27 28 30 32 33 34 42 44 48 49 51 52 53 56 59 60 # 24689 difference c a 63 1 0 e b 63 1 0 e # 24690 difference c a 63 1 0 e b 63 0 1 e # 24691 difference c a 63 1 0 e b 63 1 0 e # 24692 difference c a 63 1 0 e b 63 0 1 f # 24693 difference c a 63 1 0 e b 63 1 0 e # 24694 difference c a 63 1 0 e b 63 0 1 3 7 8 10 13 14 15 16 17 19 20 21 24 25 26 30 31 33 34 35 37 38 42 43 45 46 48 49 51 52 53 55 56 60 61 # 24695 difference c a 63 1 0 f b 63 1 0 f # 24696 difference c a 63 1 0 f b 63 0 1 e # 24697 difference c a 63 1 0 f b 63 1 0 f # 24698 difference c a 63 1 0 f b 63 0 1 f # 24699 difference c a 63 1 0 f b 63 1 0 f # 24700 difference c a 63 1 0 f b 63 0 1 1 2 5 6 7 10 12 13 16 18 19 21 23 24 25 27 28 31 35 38 39 40 41 43 44 47 48 50 51 54 55 58 59 62 # 24701 difference c a 63 1 0 0 4 9 10 11 12 16 19 20 22 23 24 26 27 28 29 30 33 34 38 39 42 43 44 45 47 49 50 53 54 55 56 57 58 59 60 b 63 1 0 0 4 9 10 11 12 16 19 20 22 23 24 26 27 28 29 30 33 34 38 39 42 43 44 45 47 49 50 53 54 55 56 57 58 59 60 # 24702 difference c a 63 1 0 0 4 9 10 11 12 16 19 20 22 23 24 26 27 28 29 30 33 34 38 39 42 43 44 45 47 49 50 53 54 55 56 57 58 59 60 b 63 0 1 e # 24703 difference c a 63 1 0 4 7 8 9 11 16 17 18 21 24 25 26 28 30 31 32 33 35 37 38 42 43 44 47 50 52 54 55 57 59 61 62 b 63 1 0 4 7 8 9 11 16 17 18 21 24 25 26 28 30 31 32 33 35 37 38 42 43 44 47 50 52 54 55 57 59 61 62 # 24704 difference c a 63 1 0 4 7 8 9 11 16 17 18 21 24 25 26 28 30 31 32 33 35 37 38 42 43 44 47 50 52 54 55 57 59 61 62 b 63 0 1 f # 24705 difference c a 63 1 0 1 6 7 8 10 11 12 13 14 15 18 19 21 23 31 33 34 35 36 37 39 46 48 49 51 52 53 54 55 56 b 63 1 0 1 6 7 8 10 11 12 13 14 15 18 19 21 23 31 33 34 35 36 37 39 46 48 49 51 52 53 54 55 56 # 24706 difference c a 63 1 0 1 6 7 8 10 11 12 13 14 15 18 19 21 23 31 33 34 35 36 37 39 46 48 49 51 52 53 54 55 56 b 63 0 1 0 6 7 11 13 14 15 16 19 21 22 24 25 29 30 33 34 37 39 40 41 44 47 48 49 51 52 55 57 59 60 61 62 # 24707 difference c a 63 1 0 e b 63 1 0 e # 24708 difference c a 63 1 0 e b 63 1 0 e # 24709 difference c a 63 1 0 e b 63 1 0 e # 24710 difference c a 63 1 0 e b 63 1 0 f # 24711 difference c a 63 1 0 e b 63 1 0 e # 24712 difference c a 63 1 0 e b 63 1 0 0 1 2 6 7 9 11 12 13 15 20 22 23 24 26 29 32 34 36 37 40 41 43 45 47 48 49 51 54 55 56 57 59 60 61 # 24713 difference c a 63 1 0 f b 63 1 0 f # 24714 difference c a 63 1 0 f b 63 1 0 e # 24715 difference c a 63 1 0 f b 63 1 0 f # 24716 difference c a 63 1 0 f b 63 1 0 f # 24717 difference c a 63 1 0 f b 63 1 0 f # 24718 difference c a 63 1 0 f b 63 1 0 0 2 3 4 5 9 14 18 20 22 23 24 25 27 36 38 42 43 47 48 50 51 52 53 55 56 57 58 60 61 # 24719 difference c a 63 1 0 2 3 6 7 8 9 11 13 16 17 19 24 25 26 28 29 30 36 41 43 44 46 47 51 53 54 56 57 58 59 60 b 63 1 0 2 3 6 7 8 9 11 13 16 17 19 24 25 26 28 29 30 36 41 43 44 46 47 51 53 54 56 57 58 59 60 # 24720 difference c a 63 1 0 2 3 6 7 8 9 11 13 16 17 19 24 25 26 28 29 30 36 41 43 44 46 47 51 53 54 56 57 58 59 60 b 63 1 0 e # 24721 difference c a 63 1 0 1 2 3 4 5 6 9 11 13 14 18 19 20 22 25 26 27 28 33 34 36 37 40 41 44 52 55 58 60 b 63 1 0 1 2 3 4 5 6 9 11 13 14 18 19 20 22 25 26 27 28 33 34 36 37 40 41 44 52 55 58 60 # 24722 difference c a 63 1 0 1 2 3 4 5 6 9 11 13 14 18 19 20 22 25 26 27 28 33 34 36 37 40 41 44 52 55 58 60 b 63 1 0 f # 24723 difference c a 63 1 0 3 10 13 14 18 19 20 21 23 25 26 28 30 34 35 36 41 42 43 44 45 48 49 51 52 54 57 58 59 61 b 63 1 0 3 10 13 14 18 19 20 21 23 25 26 28 30 34 35 36 41 42 43 44 45 48 49 51 52 54 57 58 59 61 # 24724 difference c a 63 1 0 3 10 13 14 18 19 20 21 23 25 26 28 30 34 35 36 41 42 43 44 45 48 49 51 52 54 57 58 59 61 b 63 1 0 0 6 8 9 11 12 13 14 16 17 19 20 21 22 25 26 29 31 32 33 38 40 41 42 43 44 45 46 47 48 50 51 53 55 56 58 60 # 24725 difference c a 63 1 0 e b 63 1 0 e # 24726 difference c a 63 1 0 e b 63 1 1 e # 24727 difference c a 63 1 0 e b 63 1 0 e # 24728 difference c a 63 1 0 e b 63 1 1 f # 24729 difference c a 63 1 0 e b 63 1 0 e # 24730 difference c a 63 1 0 e b 63 1 1 0 2 5 6 7 8 9 10 11 12 13 14 15 16 18 19 20 21 22 24 29 35 42 44 45 47 48 51 56 57 58 59 60 # 24731 difference c a 63 1 0 f b 63 1 0 f # 24732 difference c a 63 1 0 f b 63 1 1 e # 24733 difference c a 63 1 0 f b 63 1 0 f # 24734 difference c a 63 1 0 f b 63 1 1 f # 24735 difference c a 63 1 0 f b 63 1 0 f # 24736 difference c a 63 1 0 f b 63 1 1 0 2 3 4 7 8 10 13 14 16 18 20 22 24 26 27 32 33 34 39 40 45 47 51 56 59 61 # 24737 difference c a 63 1 0 1 3 4 7 9 12 14 15 20 21 22 25 26 30 31 33 37 39 44 49 50 52 58 59 60 62 b 63 1 0 1 3 4 7 9 12 14 15 20 21 22 25 26 30 31 33 37 39 44 49 50 52 58 59 60 62 # 24738 difference c a 63 1 0 1 3 4 7 9 12 14 15 20 21 22 25 26 30 31 33 37 39 44 49 50 52 58 59 60 62 b 63 1 1 e # 24739 difference c a 63 1 0 0 4 5 7 9 10 11 12 15 16 18 19 24 25 27 29 33 34 36 38 41 43 45 46 47 49 50 52 54 55 59 60 61 b 63 1 0 0 4 5 7 9 10 11 12 15 16 18 19 24 25 27 29 33 34 36 38 41 43 45 46 47 49 50 52 54 55 59 60 61 # 24740 difference c a 63 1 0 0 4 5 7 9 10 11 12 15 16 18 19 24 25 27 29 33 34 36 38 41 43 45 46 47 49 50 52 54 55 59 60 61 b 63 1 1 f # 24741 difference c a 63 1 0 1 2 7 10 12 13 15 16 18 23 25 28 31 35 36 37 42 46 49 50 51 52 54 56 58 59 60 62 b 63 1 0 1 2 7 10 12 13 15 16 18 23 25 28 31 35 36 37 42 46 49 50 51 52 54 56 58 59 60 62 # 24742 difference c a 63 1 0 1 2 7 10 12 13 15 16 18 23 25 28 31 35 36 37 42 46 49 50 51 52 54 56 58 59 60 62 b 63 1 1 0 1 3 7 8 9 11 12 13 14 17 18 19 20 22 25 26 27 28 30 31 32 33 37 39 41 42 45 46 47 48 49 50 52 54 57 60 61 62 # 24743 difference c a 63 1 1 e b 63 1 1 e # 24744 difference c a 63 1 1 e b 63 0 0 e # 24745 difference c a 63 1 1 e b 63 1 1 e # 24746 difference c a 63 1 1 e b 63 0 0 f # 24747 difference c a 63 1 1 e b 63 1 1 e # 24748 difference c a 63 1 1 e b 63 0 0 0 1 6 8 12 14 15 16 17 20 21 23 25 27 28 30 31 38 40 41 43 49 50 51 52 53 54 56 59 61 62 # 24749 difference c a 63 1 1 f b 63 1 1 f # 24750 difference c a 63 1 1 f b 63 0 0 e # 24751 difference c a 63 1 1 f b 63 1 1 f # 24752 difference c a 63 1 1 f b 63 0 0 f # 24753 difference c a 63 1 1 f b 63 1 1 f # 24754 difference c a 63 1 1 f b 63 0 0 0 4 5 6 7 9 13 14 17 20 28 31 32 33 34 37 39 40 41 44 45 46 48 49 53 54 58 60 61 62 # 24755 difference c a 63 1 1 1 2 3 5 8 14 15 17 19 21 23 25 31 34 38 40 42 44 45 47 48 50 51 54 55 56 60 61 b 63 1 1 1 2 3 5 8 14 15 17 19 21 23 25 31 34 38 40 42 44 45 47 48 50 51 54 55 56 60 61 # 24756 difference c a 63 1 1 1 2 3 5 8 14 15 17 19 21 23 25 31 34 38 40 42 44 45 47 48 50 51 54 55 56 60 61 b 63 0 0 e # 24757 difference c a 63 1 1 0 4 5 8 10 13 14 18 20 26 27 32 33 34 36 37 38 39 41 43 45 46 47 49 51 53 60 62 b 63 1 1 0 4 5 8 10 13 14 18 20 26 27 32 33 34 36 37 38 39 41 43 45 46 47 49 51 53 60 62 # 24758 difference c a 63 1 1 0 4 5 8 10 13 14 18 20 26 27 32 33 34 36 37 38 39 41 43 45 46 47 49 51 53 60 62 b 63 0 0 f # 24759 difference c a 63 1 1 3 4 6 7 8 10 11 12 13 14 15 17 20 22 25 26 27 28 30 36 37 39 48 49 50 51 55 58 b 63 1 1 3 4 6 7 8 10 11 12 13 14 15 17 20 22 25 26 27 28 30 36 37 39 48 49 50 51 55 58 # 24760 difference c a 63 1 1 3 4 6 7 8 10 11 12 13 14 15 17 20 22 25 26 27 28 30 36 37 39 48 49 50 51 55 58 b 63 0 0 0 1 2 5 6 9 10 11 13 15 16 19 21 25 26 27 33 34 35 36 38 39 41 42 43 44 45 47 49 50 51 52 54 56 57 # 24761 difference c a 63 1 1 e b 63 1 1 e # 24762 difference c a 63 1 1 e b 63 0 1 e # 24763 difference c a 63 1 1 e b 63 1 1 e # 24764 difference c a 63 1 1 e b 63 0 1 f # 24765 difference c a 63 1 1 e b 63 1 1 e # 24766 difference c a 63 1 1 e b 63 0 1 0 5 10 11 12 13 15 19 21 22 23 24 25 27 29 33 34 38 39 41 42 44 47 48 49 50 53 56 61 62 # 24767 difference c a 63 1 1 f b 63 1 1 f # 24768 difference c a 63 1 1 f b 63 0 1 e # 24769 difference c a 63 1 1 f b 63 1 1 f # 24770 difference c a 63 1 1 f b 63 0 1 f # 24771 difference c a 63 1 1 f b 63 1 1 f # 24772 difference c a 63 1 1 f b 63 0 1 3 4 5 6 7 11 13 14 17 19 22 26 27 28 32 33 35 36 37 38 39 42 43 44 45 46 51 55 56 57 61 62 # 24773 difference c a 63 1 1 1 2 4 5 7 15 16 20 22 23 25 27 31 35 38 39 40 48 49 50 51 54 57 61 b 63 1 1 1 2 4 5 7 15 16 20 22 23 25 27 31 35 38 39 40 48 49 50 51 54 57 61 # 24774 difference c a 63 1 1 1 2 4 5 7 15 16 20 22 23 25 27 31 35 38 39 40 48 49 50 51 54 57 61 b 63 0 1 e # 24775 difference c a 63 1 1 4 5 7 8 10 12 14 17 18 20 24 26 31 32 33 36 37 39 44 50 52 53 54 55 58 59 60 62 b 63 1 1 4 5 7 8 10 12 14 17 18 20 24 26 31 32 33 36 37 39 44 50 52 53 54 55 58 59 60 62 # 24776 difference c a 63 1 1 4 5 7 8 10 12 14 17 18 20 24 26 31 32 33 36 37 39 44 50 52 53 54 55 58 59 60 62 b 63 0 1 f # 24777 difference c a 63 1 1 0 5 9 10 14 15 16 19 22 24 29 31 35 37 39 43 44 46 48 52 57 58 59 62 b 63 1 1 0 5 9 10 14 15 16 19 22 24 29 31 35 37 39 43 44 46 48 52 57 58 59 62 # 24778 difference c a 63 1 1 0 5 9 10 14 15 16 19 22 24 29 31 35 37 39 43 44 46 48 52 57 58 59 62 b 63 0 1 0 1 2 5 6 7 9 12 14 18 20 21 22 25 29 30 31 33 35 36 38 39 41 43 47 49 52 54 56 58 61 # 24779 difference c a 63 1 1 e b 63 1 1 e # 24780 difference c a 63 1 1 e b 63 1 0 e # 24781 difference c a 63 1 1 e b 63 1 1 e # 24782 difference c a 63 1 1 e b 63 1 0 f # 24783 difference c a 63 1 1 e b 63 1 1 e # 24784 difference c a 63 1 1 e b 63 1 0 0 1 2 5 10 12 13 18 19 21 22 23 24 26 28 34 35 41 42 44 46 48 56 57 58 59 # 24785 difference c a 63 1 1 f b 63 1 1 f # 24786 difference c a 63 1 1 f b 63 1 0 e # 24787 difference c a 63 1 1 f b 63 1 1 f # 24788 difference c a 63 1 1 f b 63 1 0 f # 24789 difference c a 63 1 1 f b 63 1 1 f # 24790 difference c a 63 1 1 f b 63 1 0 0 4 6 8 9 10 12 14 16 18 20 27 28 31 32 35 36 37 38 39 40 41 46 48 51 52 53 55 58 60 # 24791 difference c a 63 1 1 0 1 3 4 6 7 9 10 11 12 16 17 18 19 20 21 22 23 26 27 29 30 32 36 37 40 42 43 46 49 54 55 56 57 60 62 b 63 1 1 0 1 3 4 6 7 9 10 11 12 16 17 18 19 20 21 22 23 26 27 29 30 32 36 37 40 42 43 46 49 54 55 56 57 60 62 # 24792 difference c a 63 1 1 0 1 3 4 6 7 9 10 11 12 16 17 18 19 20 21 22 23 26 27 29 30 32 36 37 40 42 43 46 49 54 55 56 57 60 62 b 63 1 0 e # 24793 difference c a 63 1 1 1 2 3 4 5 8 12 13 18 20 21 24 26 27 28 30 33 36 37 38 41 42 44 46 47 48 53 54 57 61 62 b 63 1 1 1 2 3 4 5 8 12 13 18 20 21 24 26 27 28 30 33 36 37 38 41 42 44 46 47 48 53 54 57 61 62 # 24794 difference c a 63 1 1 1 2 3 4 5 8 12 13 18 20 21 24 26 27 28 30 33 36 37 38 41 42 44 46 47 48 53 54 57 61 62 b 63 1 0 f # 24795 difference c a 63 1 1 0 1 5 7 10 12 15 17 19 22 24 25 26 27 29 30 33 34 35 36 37 38 41 42 45 47 48 49 51 55 56 58 60 61 b 63 1 1 0 1 5 7 10 12 15 17 19 22 24 25 26 27 29 30 33 34 35 36 37 38 41 42 45 47 48 49 51 55 56 58 60 61 # 24796 difference c a 63 1 1 0 1 5 7 10 12 15 17 19 22 24 25 26 27 29 30 33 34 35 36 37 38 41 42 45 47 48 49 51 55 56 58 60 61 b 63 1 0 1 4 7 10 11 12 13 14 15 17 20 22 23 26 27 29 31 36 37 41 42 44 45 46 48 50 51 52 53 54 56 57 58 62 # 24797 difference c a 63 1 1 e b 63 1 1 e # 24798 difference c a 63 1 1 e b 63 1 1 e # 24799 difference c a 63 1 1 e b 63 1 1 e # 24800 difference c a 63 1 1 e b 63 1 1 f # 24801 difference c a 63 1 1 e b 63 1 1 e # 24802 difference c a 63 1 1 e b 63 1 1 0 1 5 7 10 13 17 21 22 23 24 25 26 29 32 37 38 39 41 43 45 47 51 54 56 58 61 # 24803 difference c a 63 1 1 f b 63 1 1 f # 24804 difference c a 63 1 1 f b 63 1 1 e # 24805 difference c a 63 1 1 f b 63 1 1 f # 24806 difference c a 63 1 1 f b 63 1 1 f # 24807 difference c a 63 1 1 f b 63 1 1 f # 24808 difference c a 63 1 1 f b 63 1 1 2 4 5 7 10 12 13 15 17 18 22 23 26 28 29 30 33 34 36 38 41 42 44 46 47 49 51 54 56 58 59 61 62 # 24809 difference c a 63 1 1 1 2 3 4 5 6 9 11 14 16 17 18 20 21 24 25 28 37 38 39 40 44 46 48 50 51 56 57 58 59 b 63 1 1 1 2 3 4 5 6 9 11 14 16 17 18 20 21 24 25 28 37 38 39 40 44 46 48 50 51 56 57 58 59 # 24810 difference c a 63 1 1 1 2 3 4 5 6 9 11 14 16 17 18 20 21 24 25 28 37 38 39 40 44 46 48 50 51 56 57 58 59 b 63 1 1 e # 24811 difference c a 63 1 1 0 2 4 5 9 10 11 15 17 18 22 23 25 29 30 34 35 39 40 44 45 47 48 52 53 55 56 57 59 61 b 63 1 1 0 2 4 5 9 10 11 15 17 18 22 23 25 29 30 34 35 39 40 44 45 47 48 52 53 55 56 57 59 61 # 24812 difference c a 63 1 1 0 2 4 5 9 10 11 15 17 18 22 23 25 29 30 34 35 39 40 44 45 47 48 52 53 55 56 57 59 61 b 63 1 1 f # 24813 difference c a 63 1 1 0 2 3 4 9 10 11 13 16 17 18 21 22 26 28 29 30 31 33 35 36 37 42 43 48 50 52 53 54 57 58 61 62 b 63 1 1 0 2 3 4 9 10 11 13 16 17 18 21 22 26 28 29 30 31 33 35 36 37 42 43 48 50 52 53 54 57 58 61 62 # 24814 difference c a 63 1 1 0 2 3 4 9 10 11 13 16 17 18 21 22 26 28 29 30 31 33 35 36 37 42 43 48 50 52 53 54 57 58 61 62 b 63 1 1 0 3 7 8 9 10 11 13 15 16 18 23 24 26 27 28 29 30 35 36 48 49 50 62 # 24815 difference c a 64 0 0 e b 64 0 0 e # 24816 difference c a 64 0 0 e b 64 0 0 e # 24817 difference c a 64 0 0 e b 64 0 0 e # 24818 difference c a 64 0 0 e b 64 0 0 f # 24819 difference c a 64 0 0 e b 64 0 0 e # 24820 difference c a 64 0 0 e b 64 0 0 1 2 6 7 8 9 13 16 20 22 24 29 30 31 33 35 37 38 40 44 45 46 47 49 50 53 54 56 58 60 61 # 24821 difference c a 64 0 0 f b 64 0 0 f # 24822 difference c a 64 0 0 f b 64 0 0 e # 24823 difference c a 64 0 0 f b 64 0 0 f # 24824 difference c a 64 0 0 f b 64 0 0 f # 24825 difference c a 64 0 0 f b 64 0 0 f # 24826 difference c a 64 0 0 f b 64 0 0 0 1 4 7 8 9 10 11 12 13 16 18 21 22 24 26 27 31 32 33 35 37 40 42 43 47 48 52 53 55 58 59 62 # 24827 difference c a 64 0 0 1 3 4 5 12 15 16 17 18 19 20 22 24 25 26 29 30 31 32 33 34 36 37 38 39 43 44 45 46 48 49 53 54 55 56 57 59 61 62 b 64 0 0 1 3 4 5 12 15 16 17 18 19 20 22 24 25 26 29 30 31 32 33 34 36 37 38 39 43 44 45 46 48 49 53 54 55 56 57 59 61 62 # 24828 difference c a 64 0 0 1 3 4 5 12 15 16 17 18 19 20 22 24 25 26 29 30 31 32 33 34 36 37 38 39 43 44 45 46 48 49 53 54 55 56 57 59 61 62 b 64 0 0 e # 24829 difference c a 64 0 0 0 2 3 5 6 7 8 10 11 15 24 25 28 29 30 31 35 38 42 43 44 46 48 50 56 57 58 59 60 61 b 64 0 0 0 2 3 5 6 7 8 10 11 15 24 25 28 29 30 31 35 38 42 43 44 46 48 50 56 57 58 59 60 61 # 24830 difference c a 64 0 0 0 2 3 5 6 7 8 10 11 15 24 25 28 29 30 31 35 38 42 43 44 46 48 50 56 57 58 59 60 61 b 64 0 0 f # 24831 difference c a 64 0 0 1 5 6 7 9 12 14 15 18 19 20 23 27 29 32 34 37 38 39 44 48 52 53 55 57 58 60 62 63 b 64 0 0 1 5 6 7 9 12 14 15 18 19 20 23 27 29 32 34 37 38 39 44 48 52 53 55 57 58 60 62 63 # 24832 difference c a 64 0 0 1 5 6 7 9 12 14 15 18 19 20 23 27 29 32 34 37 38 39 44 48 52 53 55 57 58 60 62 63 b 64 0 0 0 1 2 4 5 9 10 12 13 15 17 19 22 23 25 27 30 31 33 35 36 41 44 45 46 48 52 54 55 58 61 63 # 24833 difference c a 64 0 0 e b 64 0 0 e # 24834 difference c a 64 0 0 e b 64 0 1 e # 24835 difference c a 64 0 0 e b 64 0 0 e # 24836 difference c a 64 0 0 e b 64 0 1 f # 24837 difference c a 64 0 0 e b 64 0 0 e # 24838 difference c a 64 0 0 e b 64 0 1 1 2 5 8 9 10 11 12 13 15 16 18 19 20 21 22 23 25 27 29 31 32 35 37 40 43 44 47 48 50 51 54 55 59 61 62 63 # 24839 difference c a 64 0 0 f b 64 0 0 f # 24840 difference c a 64 0 0 f b 64 0 1 e # 24841 difference c a 64 0 0 f b 64 0 0 f # 24842 difference c a 64 0 0 f b 64 0 1 f # 24843 difference c a 64 0 0 f b 64 0 0 f # 24844 difference c a 64 0 0 f b 64 0 1 1 2 4 6 8 9 11 13 14 19 20 21 25 26 28 29 32 34 36 38 39 43 44 48 49 50 51 52 54 55 57 60 61 62 # 24845 difference c a 64 0 0 2 4 5 9 12 13 15 16 20 25 26 28 29 30 33 34 36 38 39 40 43 45 46 47 52 53 54 56 57 59 63 b 64 0 0 2 4 5 9 12 13 15 16 20 25 26 28 29 30 33 34 36 38 39 40 43 45 46 47 52 53 54 56 57 59 63 # 24846 difference c a 64 0 0 2 4 5 9 12 13 15 16 20 25 26 28 29 30 33 34 36 38 39 40 43 45 46 47 52 53 54 56 57 59 63 b 64 0 1 e # 24847 difference c a 64 0 0 0 2 3 4 5 6 7 8 9 10 12 15 16 17 20 21 22 23 24 26 30 32 33 36 37 39 40 41 42 43 46 48 49 50 51 52 55 56 58 61 62 b 64 0 0 0 2 3 4 5 6 7 8 9 10 12 15 16 17 20 21 22 23 24 26 30 32 33 36 37 39 40 41 42 43 46 48 49 50 51 52 55 56 58 61 62 # 24848 difference c a 64 0 0 0 2 3 4 5 6 7 8 9 10 12 15 16 17 20 21 22 23 24 26 30 32 33 36 37 39 40 41 42 43 46 48 49 50 51 52 55 56 58 61 62 b 64 0 1 f # 24849 difference c a 64 0 0 0 1 2 3 4 5 7 8 10 12 14 15 20 21 23 26 27 29 30 32 33 34 35 36 38 39 40 43 44 45 49 50 52 58 59 60 61 62 63 b 64 0 0 0 1 2 3 4 5 7 8 10 12 14 15 20 21 23 26 27 29 30 32 33 34 35 36 38 39 40 43 44 45 49 50 52 58 59 60 61 62 63 # 24850 difference c a 64 0 0 0 1 2 3 4 5 7 8 10 12 14 15 20 21 23 26 27 29 30 32 33 34 35 36 38 39 40 43 44 45 49 50 52 58 59 60 61 62 63 b 64 0 1 0 1 8 11 13 15 16 19 21 22 23 24 25 26 27 28 29 30 31 32 38 40 41 42 44 49 51 52 54 55 57 58 62 # 24851 difference c a 64 0 0 e b 64 0 0 e # 24852 difference c a 64 0 0 e b 64 1 0 e # 24853 difference c a 64 0 0 e b 64 0 0 e # 24854 difference c a 64 0 0 e b 64 1 0 f # 24855 difference c a 64 0 0 e b 64 0 0 e # 24856 difference c a 64 0 0 e b 64 1 0 0 4 7 11 12 13 16 17 20 24 25 30 32 37 39 42 47 48 49 51 52 53 55 56 57 63 # 24857 difference c a 64 0 0 f b 64 0 0 f # 24858 difference c a 64 0 0 f b 64 1 0 e # 24859 difference c a 64 0 0 f b 64 0 0 f # 24860 difference c a 64 0 0 f b 64 1 0 f # 24861 difference c a 64 0 0 f b 64 0 0 f # 24862 difference c a 64 0 0 f b 64 1 0 1 3 4 5 6 10 12 15 16 17 18 19 20 21 22 24 26 27 28 30 37 38 42 44 46 47 49 50 52 53 54 59 60 63 # 24863 difference c a 64 0 0 0 5 6 7 9 14 15 16 17 18 19 21 23 25 26 27 29 30 35 38 39 40 42 45 46 48 49 52 54 55 57 58 60 61 62 b 64 0 0 0 5 6 7 9 14 15 16 17 18 19 21 23 25 26 27 29 30 35 38 39 40 42 45 46 48 49 52 54 55 57 58 60 61 62 # 24864 difference c a 64 0 0 0 5 6 7 9 14 15 16 17 18 19 21 23 25 26 27 29 30 35 38 39 40 42 45 46 48 49 52 54 55 57 58 60 61 62 b 64 1 0 e # 24865 difference c a 64 0 0 10 11 13 15 16 17 24 26 27 29 30 31 32 38 39 40 41 42 43 46 50 54 56 57 60 62 63 b 64 0 0 10 11 13 15 16 17 24 26 27 29 30 31 32 38 39 40 41 42 43 46 50 54 56 57 60 62 63 # 24866 difference c a 64 0 0 10 11 13 15 16 17 24 26 27 29 30 31 32 38 39 40 41 42 43 46 50 54 56 57 60 62 63 b 64 1 0 f # 24867 difference c a 64 0 0 3 4 6 8 9 14 15 16 20 22 25 26 27 29 30 31 32 33 34 35 37 40 41 42 46 47 48 51 53 55 56 57 58 60 62 63 b 64 0 0 3 4 6 8 9 14 15 16 20 22 25 26 27 29 30 31 32 33 34 35 37 40 41 42 46 47 48 51 53 55 56 57 58 60 62 63 # 24868 difference c a 64 0 0 3 4 6 8 9 14 15 16 20 22 25 26 27 29 30 31 32 33 34 35 37 40 41 42 46 47 48 51 53 55 56 57 58 60 62 63 b 64 1 0 1 3 5 6 9 11 14 16 17 18 20 22 23 25 27 30 31 32 36 38 44 45 46 48 49 50 51 52 53 54 59 61 # 24869 difference c a 64 0 0 e b 64 0 0 e # 24870 difference c a 64 0 0 e b 64 1 1 e # 24871 difference c a 64 0 0 e b 64 0 0 e # 24872 difference c a 64 0 0 e b 64 1 1 f # 24873 difference c a 64 0 0 e b 64 0 0 e # 24874 difference c a 64 0 0 e b 64 1 1 1 2 5 6 7 8 9 11 12 13 15 16 17 18 19 20 21 22 26 27 34 35 36 38 39 41 42 44 45 47 48 51 54 55 56 57 59 61 63 # 24875 difference c a 64 0 0 f b 64 0 0 f # 24876 difference c a 64 0 0 f b 64 1 1 e # 24877 difference c a 64 0 0 f b 64 0 0 f # 24878 difference c a 64 0 0 f b 64 1 1 f # 24879 difference c a 64 0 0 f b 64 0 0 f # 24880 difference c a 64 0 0 f b 64 1 1 0 2 3 4 5 6 8 9 10 11 12 15 16 17 22 27 29 30 32 33 35 36 38 40 41 43 44 45 47 48 49 50 53 55 57 58 59 61 62 # 24881 difference c a 64 0 0 0 3 8 11 13 14 15 16 17 20 21 26 27 29 33 34 35 36 39 40 42 43 45 46 47 52 56 59 61 63 b 64 0 0 0 3 8 11 13 14 15 16 17 20 21 26 27 29 33 34 35 36 39 40 42 43 45 46 47 52 56 59 61 63 # 24882 difference c a 64 0 0 0 3 8 11 13 14 15 16 17 20 21 26 27 29 33 34 35 36 39 40 42 43 45 46 47 52 56 59 61 63 b 64 1 1 e # 24883 difference c a 64 0 0 0 3 5 6 9 15 17 21 22 23 26 27 33 34 35 36 37 39 43 44 45 46 48 50 51 52 53 54 57 58 59 62 63 b 64 0 0 0 3 5 6 9 15 17 21 22 23 26 27 33 34 35 36 37 39 43 44 45 46 48 50 51 52 53 54 57 58 59 62 63 # 24884 difference c a 64 0 0 0 3 5 6 9 15 17 21 22 23 26 27 33 34 35 36 37 39 43 44 45 46 48 50 51 52 53 54 57 58 59 62 63 b 64 1 1 f # 24885 difference c a 64 0 0 1 2 4 5 9 12 20 22 25 26 27 29 31 32 34 35 38 39 40 42 43 47 48 49 51 54 55 56 57 60 61 62 63 b 64 0 0 1 2 4 5 9 12 20 22 25 26 27 29 31 32 34 35 38 39 40 42 43 47 48 49 51 54 55 56 57 60 61 62 63 # 24886 difference c a 64 0 0 1 2 4 5 9 12 20 22 25 26 27 29 31 32 34 35 38 39 40 42 43 47 48 49 51 54 55 56 57 60 61 62 63 b 64 1 1 1 2 5 8 10 12 16 17 22 31 33 35 36 38 39 40 41 45 46 48 51 55 56 57 58 63 # 24887 difference c a 64 0 1 e b 64 0 1 e # 24888 difference c a 64 0 1 e b 64 0 0 e # 24889 difference c a 64 0 1 e b 64 0 1 e # 24890 difference c a 64 0 1 e b 64 0 0 f # 24891 difference c a 64 0 1 e b 64 0 1 e # 24892 difference c a 64 0 1 e b 64 0 0 3 4 6 7 9 11 12 14 19 20 21 22 23 25 27 28 29 33 37 38 39 40 42 43 45 47 49 50 53 55 57 58 62 63 # 24893 difference c a 64 0 1 f b 64 0 1 f # 24894 difference c a 64 0 1 f b 64 0 0 e # 24895 difference c a 64 0 1 f b 64 0 1 f # 24896 difference c a 64 0 1 f b 64 0 0 f # 24897 difference c a 64 0 1 f b 64 0 1 f # 24898 difference c a 64 0 1 f b 64 0 0 1 2 3 4 5 6 7 10 11 13 14 16 17 18 21 23 24 25 30 33 36 37 41 42 43 44 45 47 49 50 51 52 54 55 58 60 61 62 63 # 24899 difference c a 64 0 1 0 3 7 12 13 16 19 23 24 27 30 33 35 37 39 40 41 43 44 45 48 49 53 59 60 61 b 64 0 1 0 3 7 12 13 16 19 23 24 27 30 33 35 37 39 40 41 43 44 45 48 49 53 59 60 61 # 24900 difference c a 64 0 1 0 3 7 12 13 16 19 23 24 27 30 33 35 37 39 40 41 43 44 45 48 49 53 59 60 61 b 64 0 0 e # 24901 difference c a 64 0 1 0 1 2 9 12 13 14 15 16 17 20 22 23 24 26 27 29 30 32 33 34 38 39 43 45 46 48 49 50 51 53 54 56 b 64 0 1 0 1 2 9 12 13 14 15 16 17 20 22 23 24 26 27 29 30 32 33 34 38 39 43 45 46 48 49 50 51 53 54 56 # 24902 difference c a 64 0 1 0 1 2 9 12 13 14 15 16 17 20 22 23 24 26 27 29 30 32 33 34 38 39 43 45 46 48 49 50 51 53 54 56 b 64 0 0 f # 24903 difference c a 64 0 1 3 6 7 9 10 11 12 14 15 17 18 19 24 25 26 28 30 34 35 37 38 39 40 42 43 44 45 46 51 52 53 55 56 59 62 63 b 64 0 1 3 6 7 9 10 11 12 14 15 17 18 19 24 25 26 28 30 34 35 37 38 39 40 42 43 44 45 46 51 52 53 55 56 59 62 63 # 24904 difference c a 64 0 1 3 6 7 9 10 11 12 14 15 17 18 19 24 25 26 28 30 34 35 37 38 39 40 42 43 44 45 46 51 52 53 55 56 59 62 63 b 64 0 0 1 2 3 4 5 6 9 13 14 15 18 23 24 25 26 29 31 32 34 36 37 38 43 46 47 49 51 53 54 56 59 61 62 63 # 24905 difference c a 64 0 1 e b 64 0 1 e # 24906 difference c a 64 0 1 e b 64 0 1 e # 24907 difference c a 64 0 1 e b 64 0 1 e # 24908 difference c a 64 0 1 e b 64 0 1 f # 24909 difference c a 64 0 1 e b 64 0 1 e # 24910 difference c a 64 0 1 e b 64 0 1 0 3 7 8 9 10 11 12 13 14 16 17 20 21 25 27 28 30 31 32 34 35 36 37 38 40 43 47 51 53 55 56 57 58 63 # 24911 difference c a 64 0 1 f b 64 0 1 f # 24912 difference c a 64 0 1 f b 64 0 1 e # 24913 difference c a 64 0 1 f b 64 0 1 f # 24914 difference c a 64 0 1 f b 64 0 1 f # 24915 difference c a 64 0 1 f b 64 0 1 f # 24916 difference c a 64 0 1 f b 64 0 1 0 1 2 4 5 6 7 12 13 15 17 18 19 22 26 27 28 29 30 31 32 33 35 38 39 40 44 45 50 51 52 53 57 60 61 62 63 # 24917 difference c a 64 0 1 0 2 5 6 8 10 11 12 16 19 20 21 24 27 30 32 33 40 43 45 48 49 50 51 56 57 58 61 63 b 64 0 1 0 2 5 6 8 10 11 12 16 19 20 21 24 27 30 32 33 40 43 45 48 49 50 51 56 57 58 61 63 # 24918 difference c a 64 0 1 0 2 5 6 8 10 11 12 16 19 20 21 24 27 30 32 33 40 43 45 48 49 50 51 56 57 58 61 63 b 64 0 1 e # 24919 difference c a 64 0 1 1 3 5 8 9 10 12 14 15 16 17 18 20 21 22 23 24 25 26 27 30 31 34 35 36 39 46 48 49 50 51 52 53 54 57 59 62 63 b 64 0 1 1 3 5 8 9 10 12 14 15 16 17 18 20 21 22 23 24 25 26 27 30 31 34 35 36 39 46 48 49 50 51 52 53 54 57 59 62 63 # 24920 difference c a 64 0 1 1 3 5 8 9 10 12 14 15 16 17 18 20 21 22 23 24 25 26 27 30 31 34 35 36 39 46 48 49 50 51 52 53 54 57 59 62 63 b 64 0 1 f # 24921 difference c a 64 0 1 0 1 2 3 5 6 7 11 16 19 20 24 25 30 31 33 34 35 36 38 39 40 42 45 46 54 58 60 61 b 64 0 1 0 1 2 3 5 6 7 11 16 19 20 24 25 30 31 33 34 35 36 38 39 40 42 45 46 54 58 60 61 # 24922 difference c a 64 0 1 0 1 2 3 5 6 7 11 16 19 20 24 25 30 31 33 34 35 36 38 39 40 42 45 46 54 58 60 61 b 64 0 1 4 9 10 11 12 16 17 22 26 31 32 33 34 36 38 41 45 47 48 49 51 53 55 58 59 60 63 # 24923 difference c a 64 0 1 e b 64 0 1 e # 24924 difference c a 64 0 1 e b 64 1 0 e # 24925 difference c a 64 0 1 e b 64 0 1 e # 24926 difference c a 64 0 1 e b 64 1 0 f # 24927 difference c a 64 0 1 e b 64 0 1 e # 24928 difference c a 64 0 1 e b 64 1 0 4 6 7 8 13 15 16 18 19 22 23 24 25 26 27 30 32 33 34 40 41 43 45 46 49 51 53 54 56 59 60 # 24929 difference c a 64 0 1 f b 64 0 1 f # 24930 difference c a 64 0 1 f b 64 1 0 e # 24931 difference c a 64 0 1 f b 64 0 1 f # 24932 difference c a 64 0 1 f b 64 1 0 f # 24933 difference c a 64 0 1 f b 64 0 1 f # 24934 difference c a 64 0 1 f b 64 1 0 2 4 6 11 12 14 18 19 21 23 25 26 27 32 34 36 37 38 40 42 43 44 45 52 53 56 60 61 62 63 # 24935 difference c a 64 0 1 1 8 11 13 15 16 17 19 20 21 23 26 29 30 34 35 40 41 42 44 46 47 48 50 51 52 53 59 63 b 64 0 1 1 8 11 13 15 16 17 19 20 21 23 26 29 30 34 35 40 41 42 44 46 47 48 50 51 52 53 59 63 # 24936 difference c a 64 0 1 1 8 11 13 15 16 17 19 20 21 23 26 29 30 34 35 40 41 42 44 46 47 48 50 51 52 53 59 63 b 64 1 0 e # 24937 difference c a 64 0 1 0 1 2 7 11 12 14 15 21 22 23 26 27 28 29 32 34 39 40 42 44 48 49 50 52 56 58 62 b 64 0 1 0 1 2 7 11 12 14 15 21 22 23 26 27 28 29 32 34 39 40 42 44 48 49 50 52 56 58 62 # 24938 difference c a 64 0 1 0 1 2 7 11 12 14 15 21 22 23 26 27 28 29 32 34 39 40 42 44 48 49 50 52 56 58 62 b 64 1 0 f # 24939 difference c a 64 0 1 0 1 4 5 6 7 9 11 17 18 19 26 27 28 29 30 34 37 43 44 45 46 48 49 52 56 60 62 b 64 0 1 0 1 4 5 6 7 9 11 17 18 19 26 27 28 29 30 34 37 43 44 45 46 48 49 52 56 60 62 # 24940 difference c a 64 0 1 0 1 4 5 6 7 9 11 17 18 19 26 27 28 29 30 34 37 43 44 45 46 48 49 52 56 60 62 b 64 1 0 0 1 2 3 7 8 9 10 11 12 13 14 18 20 22 26 29 30 32 33 37 39 40 41 42 44 45 46 48 49 50 51 52 53 56 58 61 62 63 # 24941 difference c a 64 0 1 e b 64 0 1 e # 24942 difference c a 64 0 1 e b 64 1 1 e # 24943 difference c a 64 0 1 e b 64 0 1 e # 24944 difference c a 64 0 1 e b 64 1 1 f # 24945 difference c a 64 0 1 e b 64 0 1 e # 24946 difference c a 64 0 1 e b 64 1 1 0 1 4 9 10 12 13 15 16 19 20 21 23 24 35 36 37 40 42 49 50 57 58 59 61 62 # 24947 difference c a 64 0 1 f b 64 0 1 f # 24948 difference c a 64 0 1 f b 64 1 1 e # 24949 difference c a 64 0 1 f b 64 0 1 f # 24950 difference c a 64 0 1 f b 64 1 1 f # 24951 difference c a 64 0 1 f b 64 0 1 f # 24952 difference c a 64 0 1 f b 64 1 1 5 6 7 9 11 12 13 18 19 23 26 27 29 31 33 36 40 41 43 44 48 52 53 56 57 60 62 63 # 24953 difference c a 64 0 1 3 5 8 11 12 13 14 15 18 20 22 23 27 28 30 31 34 35 40 41 43 44 50 52 53 55 57 58 59 60 61 62 b 64 0 1 3 5 8 11 12 13 14 15 18 20 22 23 27 28 30 31 34 35 40 41 43 44 50 52 53 55 57 58 59 60 61 62 # 24954 difference c a 64 0 1 3 5 8 11 12 13 14 15 18 20 22 23 27 28 30 31 34 35 40 41 43 44 50 52 53 55 57 58 59 60 61 62 b 64 1 1 e # 24955 difference c a 64 0 1 1 3 5 7 8 9 10 11 12 16 18 23 26 29 30 31 32 34 35 38 41 44 45 46 47 49 51 53 58 59 60 62 63 b 64 0 1 1 3 5 7 8 9 10 11 12 16 18 23 26 29 30 31 32 34 35 38 41 44 45 46 47 49 51 53 58 59 60 62 63 # 24956 difference c a 64 0 1 1 3 5 7 8 9 10 11 12 16 18 23 26 29 30 31 32 34 35 38 41 44 45 46 47 49 51 53 58 59 60 62 63 b 64 1 1 f # 24957 difference c a 64 0 1 0 1 2 3 5 10 21 22 24 25 27 29 30 31 32 34 35 39 40 43 44 47 48 49 54 57 60 63 b 64 0 1 0 1 2 3 5 10 21 22 24 25 27 29 30 31 32 34 35 39 40 43 44 47 48 49 54 57 60 63 # 24958 difference c a 64 0 1 0 1 2 3 5 10 21 22 24 25 27 29 30 31 32 34 35 39 40 43 44 47 48 49 54 57 60 63 b 64 1 1 0 2 3 4 6 9 13 16 17 18 22 26 32 33 35 37 39 40 41 42 44 46 48 49 50 54 55 56 57 # 24959 difference c a 64 1 0 e b 64 1 0 e # 24960 difference c a 64 1 0 e b 64 0 0 e # 24961 difference c a 64 1 0 e b 64 1 0 e # 24962 difference c a 64 1 0 e b 64 0 0 f # 24963 difference c a 64 1 0 e b 64 1 0 e # 24964 difference c a 64 1 0 e b 64 0 0 1 2 3 4 7 8 11 12 15 16 17 18 21 22 27 28 29 30 32 33 34 40 42 43 44 47 50 51 53 54 55 59 # 24965 difference c a 64 1 0 f b 64 1 0 f # 24966 difference c a 64 1 0 f b 64 0 0 e # 24967 difference c a 64 1 0 f b 64 1 0 f # 24968 difference c a 64 1 0 f b 64 0 0 f # 24969 difference c a 64 1 0 f b 64 1 0 f # 24970 difference c a 64 1 0 f b 64 0 0 2 3 4 5 6 7 9 13 14 17 19 20 24 25 31 32 34 37 39 40 41 42 43 44 45 48 49 50 51 52 55 58 59 60 62 63 # 24971 difference c a 64 1 0 0 1 3 6 9 11 12 13 15 18 20 21 28 32 36 38 40 41 43 44 48 50 53 54 55 57 59 b 64 1 0 0 1 3 6 9 11 12 13 15 18 20 21 28 32 36 38 40 41 43 44 48 50 53 54 55 57 59 # 24972 difference c a 64 1 0 0 1 3 6 9 11 12 13 15 18 20 21 28 32 36 38 40 41 43 44 48 50 53 54 55 57 59 b 64 0 0 e # 24973 difference c a 64 1 0 0 1 2 3 10 12 15 16 19 21 22 24 25 29 32 36 37 44 45 46 47 50 54 59 61 b 64 1 0 0 1 2 3 10 12 15 16 19 21 22 24 25 29 32 36 37 44 45 46 47 50 54 59 61 # 24974 difference c a 64 1 0 0 1 2 3 10 12 15 16 19 21 22 24 25 29 32 36 37 44 45 46 47 50 54 59 61 b 64 0 0 f # 24975 difference c a 64 1 0 1 2 3 4 7 8 9 11 12 15 19 20 22 24 29 30 31 32 33 34 36 37 39 40 41 44 45 49 51 56 58 61 62 63 b 64 1 0 1 2 3 4 7 8 9 11 12 15 19 20 22 24 29 30 31 32 33 34 36 37 39 40 41 44 45 49 51 56 58 61 62 63 # 24976 difference c a 64 1 0 1 2 3 4 7 8 9 11 12 15 19 20 22 24 29 30 31 32 33 34 36 37 39 40 41 44 45 49 51 56 58 61 62 63 b 64 0 0 0 1 3 4 5 8 9 10 11 12 19 20 24 26 29 33 34 36 38 41 46 47 48 49 50 51 56 57 58 60 61 # 24977 difference c a 64 1 0 e b 64 1 0 e # 24978 difference c a 64 1 0 e b 64 0 1 e # 24979 difference c a 64 1 0 e b 64 1 0 e # 24980 difference c a 64 1 0 e b 64 0 1 f # 24981 difference c a 64 1 0 e b 64 1 0 e # 24982 difference c a 64 1 0 e b 64 0 1 0 4 6 8 10 12 13 14 15 16 17 20 21 22 23 24 26 30 32 34 35 37 40 42 43 45 47 49 52 53 58 59 60 61 63 # 24983 difference c a 64 1 0 f b 64 1 0 f # 24984 difference c a 64 1 0 f b 64 0 1 e # 24985 difference c a 64 1 0 f b 64 1 0 f # 24986 difference c a 64 1 0 f b 64 0 1 f # 24987 difference c a 64 1 0 f b 64 1 0 f # 24988 difference c a 64 1 0 f b 64 0 1 0 1 2 4 6 7 8 9 11 13 14 15 16 19 21 23 24 26 27 28 29 31 32 35 41 43 44 46 47 50 51 52 53 55 58 # 24989 difference c a 64 1 0 1 2 3 12 13 18 24 25 26 27 29 31 32 34 35 36 37 41 42 44 47 51 52 55 57 58 59 60 61 63 b 64 1 0 1 2 3 12 13 18 24 25 26 27 29 31 32 34 35 36 37 41 42 44 47 51 52 55 57 58 59 60 61 63 # 24990 difference c a 64 1 0 1 2 3 12 13 18 24 25 26 27 29 31 32 34 35 36 37 41 42 44 47 51 52 55 57 58 59 60 61 63 b 64 0 1 e # 24991 difference c a 64 1 0 2 3 7 8 9 10 11 14 15 16 17 19 21 22 23 24 26 27 31 34 35 37 40 44 45 46 47 48 50 53 55 58 59 63 b 64 1 0 2 3 7 8 9 10 11 14 15 16 17 19 21 22 23 24 26 27 31 34 35 37 40 44 45 46 47 48 50 53 55 58 59 63 # 24992 difference c a 64 1 0 2 3 7 8 9 10 11 14 15 16 17 19 21 22 23 24 26 27 31 34 35 37 40 44 45 46 47 48 50 53 55 58 59 63 b 64 0 1 f # 24993 difference c a 64 1 0 2 3 8 9 11 12 14 15 16 17 21 23 24 25 29 31 34 38 40 42 43 44 45 47 49 50 51 54 58 b 64 1 0 2 3 8 9 11 12 14 15 16 17 21 23 24 25 29 31 34 38 40 42 43 44 45 47 49 50 51 54 58 # 24994 difference c a 64 1 0 2 3 8 9 11 12 14 15 16 17 21 23 24 25 29 31 34 38 40 42 43 44 45 47 49 50 51 54 58 b 64 0 1 0 1 2 5 8 10 11 15 18 19 20 23 24 27 28 29 32 34 35 40 42 43 44 46 47 48 50 51 52 53 54 55 58 59 60 63 # 24995 difference c a 64 1 0 e b 64 1 0 e # 24996 difference c a 64 1 0 e b 64 1 0 e # 24997 difference c a 64 1 0 e b 64 1 0 e # 24998 difference c a 64 1 0 e b 64 1 0 f # 24999 difference c a 64 1 0 e b 64 1 0 e # 25000 difference c a 64 1 0 e b 64 1 0 0 2 3 5 11 12 13 14 15 17 20 23 25 26 31 32 33 34 36 41 44 46 48 50 51 52 53 54 56 57 58 61 63 # 25001 difference c a 64 1 0 f b 64 1 0 f # 25002 difference c a 64 1 0 f b 64 1 0 e # 25003 difference c a 64 1 0 f b 64 1 0 f # 25004 difference c a 64 1 0 f b 64 1 0 f # 25005 difference c a 64 1 0 f b 64 1 0 f # 25006 difference c a 64 1 0 f b 64 1 0 0 3 5 7 12 15 16 22 24 29 32 37 39 41 42 43 44 46 47 48 51 53 57 58 59 61 # 25007 difference c a 64 1 0 1 2 3 4 7 10 12 13 14 15 16 18 21 22 23 24 25 26 28 30 33 34 35 38 40 41 42 43 44 45 46 47 48 54 56 57 59 60 62 b 64 1 0 1 2 3 4 7 10 12 13 14 15 16 18 21 22 23 24 25 26 28 30 33 34 35 38 40 41 42 43 44 45 46 47 48 54 56 57 59 60 62 # 25008 difference c a 64 1 0 1 2 3 4 7 10 12 13 14 15 16 18 21 22 23 24 25 26 28 30 33 34 35 38 40 41 42 43 44 45 46 47 48 54 56 57 59 60 62 b 64 1 0 e # 25009 difference c a 64 1 0 0 1 6 11 14 16 17 25 26 29 32 33 36 38 40 43 44 45 48 49 50 58 62 b 64 1 0 0 1 6 11 14 16 17 25 26 29 32 33 36 38 40 43 44 45 48 49 50 58 62 # 25010 difference c a 64 1 0 0 1 6 11 14 16 17 25 26 29 32 33 36 38 40 43 44 45 48 49 50 58 62 b 64 1 0 f # 25011 difference c a 64 1 0 0 2 3 5 14 18 20 22 23 24 25 28 30 31 33 34 35 36 40 44 46 48 50 52 53 57 58 63 b 64 1 0 0 2 3 5 14 18 20 22 23 24 25 28 30 31 33 34 35 36 40 44 46 48 50 52 53 57 58 63 # 25012 difference c a 64 1 0 0 2 3 5 14 18 20 22 23 24 25 28 30 31 33 34 35 36 40 44 46 48 50 52 53 57 58 63 b 64 1 0 2 3 4 5 9 10 12 14 15 16 19 21 23 24 25 27 29 30 31 34 35 37 39 40 43 44 47 48 49 51 53 54 56 57 60 61 62 63 # 25013 difference c a 64 1 0 e b 64 1 0 e # 25014 difference c a 64 1 0 e b 64 1 1 e # 25015 difference c a 64 1 0 e b 64 1 0 e # 25016 difference c a 64 1 0 e b 64 1 1 f # 25017 difference c a 64 1 0 e b 64 1 0 e # 25018 difference c a 64 1 0 e b 64 1 1 1 2 3 4 6 8 12 13 17 19 27 30 31 33 34 35 37 41 42 45 46 47 48 50 55 56 57 58 61 63 # 25019 difference c a 64 1 0 f b 64 1 0 f # 25020 difference c a 64 1 0 f b 64 1 1 e # 25021 difference c a 64 1 0 f b 64 1 0 f # 25022 difference c a 64 1 0 f b 64 1 1 f # 25023 difference c a 64 1 0 f b 64 1 0 f # 25024 difference c a 64 1 0 f b 64 1 1 0 2 7 8 10 13 15 16 20 21 24 25 26 28 29 30 33 34 36 39 43 44 45 46 47 49 52 53 54 56 58 61 62 63 # 25025 difference c a 64 1 0 1 4 8 9 11 12 13 14 16 18 19 20 23 24 25 28 32 34 35 36 39 41 44 46 47 52 53 55 56 60 61 62 63 b 64 1 0 1 4 8 9 11 12 13 14 16 18 19 20 23 24 25 28 32 34 35 36 39 41 44 46 47 52 53 55 56 60 61 62 63 # 25026 difference c a 64 1 0 1 4 8 9 11 12 13 14 16 18 19 20 23 24 25 28 32 34 35 36 39 41 44 46 47 52 53 55 56 60 61 62 63 b 64 1 1 e # 25027 difference c a 64 1 0 2 4 6 7 8 11 12 13 17 18 20 21 25 26 28 29 30 31 33 35 36 38 39 40 42 46 47 51 53 55 56 b 64 1 0 2 4 6 7 8 11 12 13 17 18 20 21 25 26 28 29 30 31 33 35 36 38 39 40 42 46 47 51 53 55 56 # 25028 difference c a 64 1 0 2 4 6 7 8 11 12 13 17 18 20 21 25 26 28 29 30 31 33 35 36 38 39 40 42 46 47 51 53 55 56 b 64 1 1 f # 25029 difference c a 64 1 0 0 1 3 4 6 7 8 9 11 12 13 14 17 19 20 21 22 26 30 36 38 39 42 47 49 50 53 54 55 56 57 62 b 64 1 0 0 1 3 4 6 7 8 9 11 12 13 14 17 19 20 21 22 26 30 36 38 39 42 47 49 50 53 54 55 56 57 62 # 25030 difference c a 64 1 0 0 1 3 4 6 7 8 9 11 12 13 14 17 19 20 21 22 26 30 36 38 39 42 47 49 50 53 54 55 56 57 62 b 64 1 1 0 2 3 4 5 8 12 13 14 16 17 22 24 26 29 30 34 38 40 46 47 51 58 59 63 # 25031 difference c a 64 1 1 e b 64 1 1 e # 25032 difference c a 64 1 1 e b 64 0 0 e # 25033 difference c a 64 1 1 e b 64 1 1 e # 25034 difference c a 64 1 1 e b 64 0 0 f # 25035 difference c a 64 1 1 e b 64 1 1 e # 25036 difference c a 64 1 1 e b 64 0 0 0 4 5 9 10 13 15 16 17 20 21 22 24 25 29 30 32 35 37 40 42 44 47 49 54 58 60 61 62 63 # 25037 difference c a 64 1 1 f b 64 1 1 f # 25038 difference c a 64 1 1 f b 64 0 0 e # 25039 difference c a 64 1 1 f b 64 1 1 f # 25040 difference c a 64 1 1 f b 64 0 0 f # 25041 difference c a 64 1 1 f b 64 1 1 f # 25042 difference c a 64 1 1 f b 64 0 0 0 2 5 6 9 10 13 16 17 18 22 24 26 27 29 30 32 39 40 42 46 47 48 52 53 54 55 57 59 62 # 25043 difference c a 64 1 1 0 2 4 6 7 9 10 11 13 14 17 20 22 24 28 30 32 33 34 36 37 40 43 44 45 48 49 51 52 55 56 57 59 60 63 b 64 1 1 0 2 4 6 7 9 10 11 13 14 17 20 22 24 28 30 32 33 34 36 37 40 43 44 45 48 49 51 52 55 56 57 59 60 63 # 25044 difference c a 64 1 1 0 2 4 6 7 9 10 11 13 14 17 20 22 24 28 30 32 33 34 36 37 40 43 44 45 48 49 51 52 55 56 57 59 60 63 b 64 0 0 e # 25045 difference c a 64 1 1 1 4 6 8 9 11 12 13 14 15 18 20 23 25 26 29 30 31 32 34 35 36 37 40 41 43 46 47 48 49 51 53 54 56 58 61 b 64 1 1 1 4 6 8 9 11 12 13 14 15 18 20 23 25 26 29 30 31 32 34 35 36 37 40 41 43 46 47 48 49 51 53 54 56 58 61 # 25046 difference c a 64 1 1 1 4 6 8 9 11 12 13 14 15 18 20 23 25 26 29 30 31 32 34 35 36 37 40 41 43 46 47 48 49 51 53 54 56 58 61 b 64 0 0 f # 25047 difference c a 64 1 1 0 3 4 7 11 12 14 16 21 22 26 27 29 33 34 38 40 44 45 46 47 50 53 54 55 58 62 63 b 64 1 1 0 3 4 7 11 12 14 16 21 22 26 27 29 33 34 38 40 44 45 46 47 50 53 54 55 58 62 63 # 25048 difference c a 64 1 1 0 3 4 7 11 12 14 16 21 22 26 27 29 33 34 38 40 44 45 46 47 50 53 54 55 58 62 63 b 64 0 0 0 1 2 4 5 6 7 9 12 14 17 18 19 20 23 24 32 34 35 38 39 41 42 45 46 47 48 51 52 53 54 55 59 61 # 25049 difference c a 64 1 1 e b 64 1 1 e # 25050 difference c a 64 1 1 e b 64 0 1 e # 25051 difference c a 64 1 1 e b 64 1 1 e # 25052 difference c a 64 1 1 e b 64 0 1 f # 25053 difference c a 64 1 1 e b 64 1 1 e # 25054 difference c a 64 1 1 e b 64 0 1 0 1 6 7 9 12 15 16 17 18 19 20 22 23 24 26 28 29 30 31 32 39 41 47 49 50 51 54 56 57 59 60 62 63 # 25055 difference c a 64 1 1 f b 64 1 1 f # 25056 difference c a 64 1 1 f b 64 0 1 e # 25057 difference c a 64 1 1 f b 64 1 1 f # 25058 difference c a 64 1 1 f b 64 0 1 f # 25059 difference c a 64 1 1 f b 64 1 1 f # 25060 difference c a 64 1 1 f b 64 0 1 1 3 5 6 8 9 10 11 13 14 15 16 17 18 21 22 23 26 30 31 34 35 36 37 39 40 41 42 44 45 46 47 49 51 54 55 59 60 62 # 25061 difference c a 64 1 1 1 4 9 10 12 13 17 18 19 21 22 23 26 29 30 31 32 33 37 38 39 40 41 45 46 47 48 49 50 53 54 55 57 58 59 61 62 b 64 1 1 1 4 9 10 12 13 17 18 19 21 22 23 26 29 30 31 32 33 37 38 39 40 41 45 46 47 48 49 50 53 54 55 57 58 59 61 62 # 25062 difference c a 64 1 1 1 4 9 10 12 13 17 18 19 21 22 23 26 29 30 31 32 33 37 38 39 40 41 45 46 47 48 49 50 53 54 55 57 58 59 61 62 b 64 0 1 e # 25063 difference c a 64 1 1 0 2 4 5 7 9 11 12 13 14 15 16 17 18 20 21 22 24 25 26 28 29 32 34 35 36 37 38 40 41 44 47 50 53 54 55 56 57 59 61 b 64 1 1 0 2 4 5 7 9 11 12 13 14 15 16 17 18 20 21 22 24 25 26 28 29 32 34 35 36 37 38 40 41 44 47 50 53 54 55 56 57 59 61 # 25064 difference c a 64 1 1 0 2 4 5 7 9 11 12 13 14 15 16 17 18 20 21 22 24 25 26 28 29 32 34 35 36 37 38 40 41 44 47 50 53 54 55 56 57 59 61 b 64 0 1 f # 25065 difference c a 64 1 1 0 1 3 4 7 9 14 15 16 17 19 20 22 23 24 26 28 29 30 31 32 34 35 36 38 39 41 43 46 52 55 57 60 63 b 64 1 1 0 1 3 4 7 9 14 15 16 17 19 20 22 23 24 26 28 29 30 31 32 34 35 36 38 39 41 43 46 52 55 57 60 63 # 25066 difference c a 64 1 1 0 1 3 4 7 9 14 15 16 17 19 20 22 23 24 26 28 29 30 31 32 34 35 36 38 39 41 43 46 52 55 57 60 63 b 64 0 1 0 2 4 5 8 9 12 16 17 19 20 21 24 25 26 27 28 30 31 32 33 35 37 41 45 46 48 51 52 53 55 60 63 # 25067 difference c a 64 1 1 e b 64 1 1 e # 25068 difference c a 64 1 1 e b 64 1 0 e # 25069 difference c a 64 1 1 e b 64 1 1 e # 25070 difference c a 64 1 1 e b 64 1 0 f # 25071 difference c a 64 1 1 e b 64 1 1 e # 25072 difference c a 64 1 1 e b 64 1 0 0 2 6 7 11 13 15 18 21 22 23 27 28 30 31 32 36 37 38 39 42 45 50 51 53 57 59 62 # 25073 difference c a 64 1 1 f b 64 1 1 f # 25074 difference c a 64 1 1 f b 64 1 0 e # 25075 difference c a 64 1 1 f b 64 1 1 f # 25076 difference c a 64 1 1 f b 64 1 0 f # 25077 difference c a 64 1 1 f b 64 1 1 f # 25078 difference c a 64 1 1 f b 64 1 0 0 1 4 8 10 11 15 19 20 21 24 25 27 28 29 31 32 33 35 37 39 40 41 42 46 47 48 51 53 54 # 25079 difference c a 64 1 1 11 12 15 16 17 20 22 24 25 26 27 29 31 35 36 37 38 44 45 46 47 48 52 54 55 58 59 61 63 b 64 1 1 11 12 15 16 17 20 22 24 25 26 27 29 31 35 36 37 38 44 45 46 47 48 52 54 55 58 59 61 63 # 25080 difference c a 64 1 1 11 12 15 16 17 20 22 24 25 26 27 29 31 35 36 37 38 44 45 46 47 48 52 54 55 58 59 61 63 b 64 1 0 e # 25081 difference c a 64 1 1 1 2 5 6 7 10 12 13 15 17 20 21 25 26 27 28 30 33 34 35 37 39 42 46 47 48 51 53 55 56 58 59 60 61 63 b 64 1 1 1 2 5 6 7 10 12 13 15 17 20 21 25 26 27 28 30 33 34 35 37 39 42 46 47 48 51 53 55 56 58 59 60 61 63 # 25082 difference c a 64 1 1 1 2 5 6 7 10 12 13 15 17 20 21 25 26 27 28 30 33 34 35 37 39 42 46 47 48 51 53 55 56 58 59 60 61 63 b 64 1 0 f # 25083 difference c a 64 1 1 2 3 6 8 9 10 12 13 15 16 17 18 22 25 26 31 33 34 35 37 39 41 44 47 50 51 52 53 54 56 57 61 63 b 64 1 1 2 3 6 8 9 10 12 13 15 16 17 18 22 25 26 31 33 34 35 37 39 41 44 47 50 51 52 53 54 56 57 61 63 # 25084 difference c a 64 1 1 2 3 6 8 9 10 12 13 15 16 17 18 22 25 26 31 33 34 35 37 39 41 44 47 50 51 52 53 54 56 57 61 63 b 64 1 0 0 3 4 5 6 8 10 12 15 16 18 19 21 22 23 24 27 30 31 32 34 35 36 37 39 43 44 46 47 48 49 51 54 56 60 61 # 25085 difference c a 64 1 1 e b 64 1 1 e # 25086 difference c a 64 1 1 e b 64 1 1 e # 25087 difference c a 64 1 1 e b 64 1 1 e # 25088 difference c a 64 1 1 e b 64 1 1 f # 25089 difference c a 64 1 1 e b 64 1 1 e # 25090 difference c a 64 1 1 e b 64 1 1 6 8 12 17 19 22 24 29 30 32 34 36 37 38 40 42 43 44 47 48 49 50 53 55 56 57 60 62 63 # 25091 difference c a 64 1 1 f b 64 1 1 f # 25092 difference c a 64 1 1 f b 64 1 1 e # 25093 difference c a 64 1 1 f b 64 1 1 f # 25094 difference c a 64 1 1 f b 64 1 1 f # 25095 difference c a 64 1 1 f b 64 1 1 f # 25096 difference c a 64 1 1 f b 64 1 1 0 2 5 6 8 9 10 11 14 16 21 24 25 27 31 32 35 42 43 45 46 50 53 54 56 59 61 62 # 25097 difference c a 64 1 1 4 6 8 9 14 15 16 21 22 25 27 28 30 31 32 35 36 40 42 44 48 50 54 55 57 63 b 64 1 1 4 6 8 9 14 15 16 21 22 25 27 28 30 31 32 35 36 40 42 44 48 50 54 55 57 63 # 25098 difference c a 64 1 1 4 6 8 9 14 15 16 21 22 25 27 28 30 31 32 35 36 40 42 44 48 50 54 55 57 63 b 64 1 1 e # 25099 difference c a 64 1 1 0 1 2 4 5 6 7 9 13 14 18 19 20 25 26 27 29 30 32 34 35 37 38 39 43 44 45 46 49 50 54 55 57 59 60 b 64 1 1 0 1 2 4 5 6 7 9 13 14 18 19 20 25 26 27 29 30 32 34 35 37 38 39 43 44 45 46 49 50 54 55 57 59 60 # 25100 difference c a 64 1 1 0 1 2 4 5 6 7 9 13 14 18 19 20 25 26 27 29 30 32 34 35 37 38 39 43 44 45 46 49 50 54 55 57 59 60 b 64 1 1 f # 25101 difference c a 64 1 1 0 1 4 5 10 13 15 16 19 20 22 27 29 32 33 36 37 38 39 41 43 44 45 46 52 54 55 58 59 60 63 b 64 1 1 0 1 4 5 10 13 15 16 19 20 22 27 29 32 33 36 37 38 39 41 43 44 45 46 52 54 55 58 59 60 63 # 25102 difference c a 64 1 1 0 1 4 5 10 13 15 16 19 20 22 27 29 32 33 36 37 38 39 41 43 44 45 46 52 54 55 58 59 60 63 b 64 1 1 1 3 5 6 7 8 12 14 20 28 31 34 35 37 41 42 45 47 49 50 51 55 60 # 25103 difference c a 65 0 0 e b 65 0 0 e # 25104 difference c a 65 0 0 e b 65 0 0 e # 25105 difference c a 65 0 0 e b 65 0 0 e # 25106 difference c a 65 0 0 e b 65 0 0 f # 25107 difference c a 65 0 0 e b 65 0 0 e # 25108 difference c a 65 0 0 e b 65 0 0 0 2 6 10 11 20 21 28 29 31 32 36 38 40 43 44 45 47 49 51 52 53 55 57 61 # 25109 difference c a 65 0 0 f b 65 0 0 f # 25110 difference c a 65 0 0 f b 65 0 0 e # 25111 difference c a 65 0 0 f b 65 0 0 f # 25112 difference c a 65 0 0 f b 65 0 0 f # 25113 difference c a 65 0 0 f b 65 0 0 f # 25114 difference c a 65 0 0 f b 65 0 0 0 1 3 5 6 7 8 9 10 11 13 14 17 18 19 21 23 27 28 29 32 40 41 42 44 45 47 48 50 55 56 57 58 60 61 62 # 25115 difference c a 65 0 0 1 2 3 4 5 6 7 8 9 10 11 13 14 15 16 19 22 24 26 27 31 41 43 44 46 51 59 60 61 63 b 65 0 0 1 2 3 4 5 6 7 8 9 10 11 13 14 15 16 19 22 24 26 27 31 41 43 44 46 51 59 60 61 63 # 25116 difference c a 65 0 0 1 2 3 4 5 6 7 8 9 10 11 13 14 15 16 19 22 24 26 27 31 41 43 44 46 51 59 60 61 63 b 65 0 0 e # 25117 difference c a 65 0 0 0 5 8 12 13 14 17 18 20 22 24 25 26 27 29 30 35 37 48 50 51 53 56 58 59 61 b 65 0 0 0 5 8 12 13 14 17 18 20 22 24 25 26 27 29 30 35 37 48 50 51 53 56 58 59 61 # 25118 difference c a 65 0 0 0 5 8 12 13 14 17 18 20 22 24 25 26 27 29 30 35 37 48 50 51 53 56 58 59 61 b 65 0 0 f # 25119 difference c a 65 0 0 0 2 3 5 6 7 11 12 13 14 15 16 17 19 20 21 24 27 28 29 33 35 36 38 41 44 45 48 49 51 53 54 58 59 63 b 65 0 0 0 2 3 5 6 7 11 12 13 14 15 16 17 19 20 21 24 27 28 29 33 35 36 38 41 44 45 48 49 51 53 54 58 59 63 # 25120 difference c a 65 0 0 0 2 3 5 6 7 11 12 13 14 15 16 17 19 20 21 24 27 28 29 33 35 36 38 41 44 45 48 49 51 53 54 58 59 63 b 65 0 0 0 3 5 8 9 10 11 12 14 15 16 22 23 25 27 30 31 32 34 35 36 39 42 44 45 46 50 51 52 53 54 58 59 61 62 # 25121 difference c a 65 0 0 e b 65 0 0 e # 25122 difference c a 65 0 0 e b 65 0 1 e # 25123 difference c a 65 0 0 e b 65 0 0 e # 25124 difference c a 65 0 0 e b 65 0 1 f # 25125 difference c a 65 0 0 e b 65 0 0 e # 25126 difference c a 65 0 0 e b 65 0 1 0 7 9 11 12 13 15 16 17 18 19 20 21 23 24 25 27 28 29 32 34 36 39 40 41 42 43 44 46 47 51 53 54 56 61 62 # 25127 difference c a 65 0 0 f b 65 0 0 f # 25128 difference c a 65 0 0 f b 65 0 1 e # 25129 difference c a 65 0 0 f b 65 0 0 f # 25130 difference c a 65 0 0 f b 65 0 1 f # 25131 difference c a 65 0 0 f b 65 0 0 f # 25132 difference c a 65 0 0 f b 65 0 1 0 1 2 3 4 5 6 7 8 9 15 16 21 23 25 28 38 42 43 44 46 48 50 55 56 58 59 60 64 # 25133 difference c a 65 0 0 0 5 7 8 10 11 12 14 17 23 26 27 29 30 35 37 38 39 41 42 44 45 48 49 50 51 54 59 61 63 b 65 0 0 0 5 7 8 10 11 12 14 17 23 26 27 29 30 35 37 38 39 41 42 44 45 48 49 50 51 54 59 61 63 # 25134 difference c a 65 0 0 0 5 7 8 10 11 12 14 17 23 26 27 29 30 35 37 38 39 41 42 44 45 48 49 50 51 54 59 61 63 b 65 0 1 e # 25135 difference c a 65 0 0 0 1 3 4 6 7 10 12 13 14 15 16 17 18 19 20 24 26 27 28 29 30 32 35 36 42 45 46 47 48 49 50 54 56 58 59 61 63 b 65 0 0 0 1 3 4 6 7 10 12 13 14 15 16 17 18 19 20 24 26 27 28 29 30 32 35 36 42 45 46 47 48 49 50 54 56 58 59 61 63 # 25136 difference c a 65 0 0 0 1 3 4 6 7 10 12 13 14 15 16 17 18 19 20 24 26 27 28 29 30 32 35 36 42 45 46 47 48 49 50 54 56 58 59 61 63 b 65 0 1 f # 25137 difference c a 65 0 0 1 3 5 8 10 13 16 17 18 23 25 30 31 32 37 38 39 43 45 47 51 54 55 58 59 61 64 b 65 0 0 1 3 5 8 10 13 16 17 18 23 25 30 31 32 37 38 39 43 45 47 51 54 55 58 59 61 64 # 25138 difference c a 65 0 0 1 3 5 8 10 13 16 17 18 23 25 30 31 32 37 38 39 43 45 47 51 54 55 58 59 61 64 b 65 0 1 0 1 3 6 7 8 9 12 14 17 18 19 20 26 28 31 32 36 41 42 44 45 48 51 52 53 57 59 61 62 # 25139 difference c a 65 0 0 e b 65 0 0 e # 25140 difference c a 65 0 0 e b 65 1 0 e # 25141 difference c a 65 0 0 e b 65 0 0 e # 25142 difference c a 65 0 0 e b 65 1 0 f # 25143 difference c a 65 0 0 e b 65 0 0 e # 25144 difference c a 65 0 0 e b 65 1 0 1 2 3 6 7 10 12 15 16 18 19 20 21 23 26 28 32 34 36 37 42 43 44 46 47 48 49 50 51 52 53 60 61 63 # 25145 difference c a 65 0 0 f b 65 0 0 f # 25146 difference c a 65 0 0 f b 65 1 0 e # 25147 difference c a 65 0 0 f b 65 0 0 f # 25148 difference c a 65 0 0 f b 65 1 0 f # 25149 difference c a 65 0 0 f b 65 0 0 f # 25150 difference c a 65 0 0 f b 65 1 0 1 5 6 8 9 12 13 16 19 20 22 24 26 27 28 29 32 33 34 35 36 39 41 43 44 45 49 51 60 61 63 64 # 25151 difference c a 65 0 0 1 2 3 5 6 7 9 10 19 20 21 23 24 26 27 28 29 34 35 36 37 38 40 44 45 46 50 52 55 56 58 59 60 62 b 65 0 0 1 2 3 5 6 7 9 10 19 20 21 23 24 26 27 28 29 34 35 36 37 38 40 44 45 46 50 52 55 56 58 59 60 62 # 25152 difference c a 65 0 0 1 2 3 5 6 7 9 10 19 20 21 23 24 26 27 28 29 34 35 36 37 38 40 44 45 46 50 52 55 56 58 59 60 62 b 65 1 0 e # 25153 difference c a 65 0 0 0 3 4 5 6 14 17 19 29 30 38 40 41 42 43 47 49 50 51 55 57 59 60 62 63 64 b 65 0 0 0 3 4 5 6 14 17 19 29 30 38 40 41 42 43 47 49 50 51 55 57 59 60 62 63 64 # 25154 difference c a 65 0 0 0 3 4 5 6 14 17 19 29 30 38 40 41 42 43 47 49 50 51 55 57 59 60 62 63 64 b 65 1 0 f # 25155 difference c a 65 0 0 2 4 7 11 12 15 17 21 22 23 25 26 28 29 31 32 35 36 37 38 39 40 42 43 44 45 48 49 50 52 53 55 57 60 61 63 64 b 65 0 0 2 4 7 11 12 15 17 21 22 23 25 26 28 29 31 32 35 36 37 38 39 40 42 43 44 45 48 49 50 52 53 55 57 60 61 63 64 # 25156 difference c a 65 0 0 2 4 7 11 12 15 17 21 22 23 25 26 28 29 31 32 35 36 37 38 39 40 42 43 44 45 48 49 50 52 53 55 57 60 61 63 64 b 65 1 0 0 1 2 4 5 12 17 19 20 23 24 25 26 28 31 35 36 37 40 42 43 44 52 53 57 58 63 64 # 25157 difference c a 65 0 0 e b 65 0 0 e # 25158 difference c a 65 0 0 e b 65 1 1 e # 25159 difference c a 65 0 0 e b 65 0 0 e # 25160 difference c a 65 0 0 e b 65 1 1 f # 25161 difference c a 65 0 0 e b 65 0 0 e # 25162 difference c a 65 0 0 e b 65 1 1 1 2 4 9 11 13 14 15 16 19 21 24 25 26 28 29 33 34 37 38 40 46 50 51 56 58 59 63 # 25163 difference c a 65 0 0 f b 65 0 0 f # 25164 difference c a 65 0 0 f b 65 1 1 e # 25165 difference c a 65 0 0 f b 65 0 0 f # 25166 difference c a 65 0 0 f b 65 1 1 f # 25167 difference c a 65 0 0 f b 65 0 0 f # 25168 difference c a 65 0 0 f b 65 1 1 5 7 10 14 15 17 21 23 24 28 29 33 36 37 42 43 45 46 47 48 53 61 63 64 # 25169 difference c a 65 0 0 0 2 3 6 7 8 9 11 13 15 17 18 19 20 24 26 27 28 29 30 31 32 33 34 36 37 39 42 43 46 47 48 49 50 51 52 53 55 64 b 65 0 0 0 2 3 6 7 8 9 11 13 15 17 18 19 20 24 26 27 28 29 30 31 32 33 34 36 37 39 42 43 46 47 48 49 50 51 52 53 55 64 # 25170 difference c a 65 0 0 0 2 3 6 7 8 9 11 13 15 17 18 19 20 24 26 27 28 29 30 31 32 33 34 36 37 39 42 43 46 47 48 49 50 51 52 53 55 64 b 65 1 1 e # 25171 difference c a 65 0 0 1 2 3 4 5 8 10 11 13 14 15 17 18 21 22 23 28 37 38 41 47 51 54 56 57 58 59 63 64 b 65 0 0 1 2 3 4 5 8 10 11 13 14 15 17 18 21 22 23 28 37 38 41 47 51 54 56 57 58 59 63 64 # 25172 difference c a 65 0 0 1 2 3 4 5 8 10 11 13 14 15 17 18 21 22 23 28 37 38 41 47 51 54 56 57 58 59 63 64 b 65 1 1 f # 25173 difference c a 65 0 0 1 4 5 8 9 10 13 15 19 20 21 22 23 24 25 31 33 34 35 42 43 46 47 50 52 53 55 56 57 58 62 64 b 65 0 0 1 4 5 8 9 10 13 15 19 20 21 22 23 24 25 31 33 34 35 42 43 46 47 50 52 53 55 56 57 58 62 64 # 25174 difference c a 65 0 0 1 4 5 8 9 10 13 15 19 20 21 22 23 24 25 31 33 34 35 42 43 46 47 50 52 53 55 56 57 58 62 64 b 65 1 1 0 4 5 6 8 9 10 11 12 13 16 17 19 21 22 24 26 32 33 34 35 36 37 40 43 45 46 48 54 57 59 60 61 62 63 # 25175 difference c a 65 0 1 e b 65 0 1 e # 25176 difference c a 65 0 1 e b 65 0 0 e # 25177 difference c a 65 0 1 e b 65 0 1 e # 25178 difference c a 65 0 1 e b 65 0 0 f # 25179 difference c a 65 0 1 e b 65 0 1 e # 25180 difference c a 65 0 1 e b 65 0 0 0 4 5 7 9 12 16 17 19 20 21 27 31 32 33 37 39 40 41 42 43 46 47 48 50 51 56 57 59 60 61 62 63 64 # 25181 difference c a 65 0 1 f b 65 0 1 f # 25182 difference c a 65 0 1 f b 65 0 0 e # 25183 difference c a 65 0 1 f b 65 0 1 f # 25184 difference c a 65 0 1 f b 65 0 0 f # 25185 difference c a 65 0 1 f b 65 0 1 f # 25186 difference c a 65 0 1 f b 65 0 0 4 5 6 8 9 10 12 13 16 17 21 22 23 25 26 28 29 32 34 35 37 41 42 44 45 48 49 50 52 53 56 58 59 60 63 64 # 25187 difference c a 65 0 1 0 1 3 4 5 7 10 12 15 16 17 18 19 20 27 32 33 35 38 39 40 41 43 44 45 46 47 48 49 50 51 54 55 58 59 64 b 65 0 1 0 1 3 4 5 7 10 12 15 16 17 18 19 20 27 32 33 35 38 39 40 41 43 44 45 46 47 48 49 50 51 54 55 58 59 64 # 25188 difference c a 65 0 1 0 1 3 4 5 7 10 12 15 16 17 18 19 20 27 32 33 35 38 39 40 41 43 44 45 46 47 48 49 50 51 54 55 58 59 64 b 65 0 0 e # 25189 difference c a 65 0 1 0 8 11 14 16 18 21 22 23 25 27 29 30 31 35 36 38 39 40 42 43 48 49 50 52 58 61 64 b 65 0 1 0 8 11 14 16 18 21 22 23 25 27 29 30 31 35 36 38 39 40 42 43 48 49 50 52 58 61 64 # 25190 difference c a 65 0 1 0 8 11 14 16 18 21 22 23 25 27 29 30 31 35 36 38 39 40 42 43 48 49 50 52 58 61 64 b 65 0 0 f # 25191 difference c a 65 0 1 0 2 6 9 10 11 14 18 19 22 23 27 28 29 30 31 32 33 34 37 38 40 41 45 51 52 54 55 56 57 58 59 60 61 63 64 b 65 0 1 0 2 6 9 10 11 14 18 19 22 23 27 28 29 30 31 32 33 34 37 38 40 41 45 51 52 54 55 56 57 58 59 60 61 63 64 # 25192 difference c a 65 0 1 0 2 6 9 10 11 14 18 19 22 23 27 28 29 30 31 32 33 34 37 38 40 41 45 51 52 54 55 56 57 58 59 60 61 63 64 b 65 0 0 1 2 4 8 9 10 11 14 15 17 19 28 29 32 34 35 36 40 41 46 47 48 52 53 54 58 59 # 25193 difference c a 65 0 1 e b 65 0 1 e # 25194 difference c a 65 0 1 e b 65 0 1 e # 25195 difference c a 65 0 1 e b 65 0 1 e # 25196 difference c a 65 0 1 e b 65 0 1 f # 25197 difference c a 65 0 1 e b 65 0 1 e # 25198 difference c a 65 0 1 e b 65 0 1 0 1 5 8 15 16 17 18 19 20 22 23 25 27 35 37 38 43 44 45 46 49 55 60 61 62 # 25199 difference c a 65 0 1 f b 65 0 1 f # 25200 difference c a 65 0 1 f b 65 0 1 e # 25201 difference c a 65 0 1 f b 65 0 1 f # 25202 difference c a 65 0 1 f b 65 0 1 f # 25203 difference c a 65 0 1 f b 65 0 1 f # 25204 difference c a 65 0 1 f b 65 0 1 3 5 7 9 11 12 13 17 18 20 22 24 27 28 29 30 41 44 45 46 47 48 51 52 55 57 58 60 61 62 63 # 25205 difference c a 65 0 1 0 4 5 6 12 16 17 19 23 25 26 27 28 29 31 33 35 36 41 42 44 45 46 47 48 50 52 57 59 60 62 63 b 65 0 1 0 4 5 6 12 16 17 19 23 25 26 27 28 29 31 33 35 36 41 42 44 45 46 47 48 50 52 57 59 60 62 63 # 25206 difference c a 65 0 1 0 4 5 6 12 16 17 19 23 25 26 27 28 29 31 33 35 36 41 42 44 45 46 47 48 50 52 57 59 60 62 63 b 65 0 1 e # 25207 difference c a 65 0 1 0 1 2 6 8 11 13 14 15 16 18 19 21 27 28 30 31 33 35 37 38 47 49 50 51 52 57 58 60 61 64 b 65 0 1 0 1 2 6 8 11 13 14 15 16 18 19 21 27 28 30 31 33 35 37 38 47 49 50 51 52 57 58 60 61 64 # 25208 difference c a 65 0 1 0 1 2 6 8 11 13 14 15 16 18 19 21 27 28 30 31 33 35 37 38 47 49 50 51 52 57 58 60 61 64 b 65 0 1 f # 25209 difference c a 65 0 1 0 1 3 4 6 8 11 12 15 18 19 20 21 23 24 25 26 27 29 30 31 32 34 35 36 37 41 43 45 46 47 53 57 59 60 62 63 64 b 65 0 1 0 1 3 4 6 8 11 12 15 18 19 20 21 23 24 25 26 27 29 30 31 32 34 35 36 37 41 43 45 46 47 53 57 59 60 62 63 64 # 25210 difference c a 65 0 1 0 1 3 4 6 8 11 12 15 18 19 20 21 23 24 25 26 27 29 30 31 32 34 35 36 37 41 43 45 46 47 53 57 59 60 62 63 64 b 65 0 1 1 5 7 13 14 15 20 21 22 23 26 27 29 31 32 33 34 35 36 38 40 42 45 46 47 50 52 53 54 57 58 # 25211 difference c a 65 0 1 e b 65 0 1 e # 25212 difference c a 65 0 1 e b 65 1 0 e # 25213 difference c a 65 0 1 e b 65 0 1 e # 25214 difference c a 65 0 1 e b 65 1 0 f # 25215 difference c a 65 0 1 e b 65 0 1 e # 25216 difference c a 65 0 1 e b 65 1 0 3 5 6 8 9 10 11 12 17 20 25 26 27 33 35 36 37 39 40 41 42 43 47 51 52 53 56 59 60 61 64 # 25217 difference c a 65 0 1 f b 65 0 1 f # 25218 difference c a 65 0 1 f b 65 1 0 e # 25219 difference c a 65 0 1 f b 65 0 1 f # 25220 difference c a 65 0 1 f b 65 1 0 f # 25221 difference c a 65 0 1 f b 65 0 1 f # 25222 difference c a 65 0 1 f b 65 1 0 0 1 2 3 5 6 8 9 10 12 13 14 16 17 19 21 23 28 29 31 32 35 40 41 42 43 44 45 47 49 51 52 53 57 58 60 64 # 25223 difference c a 65 0 1 0 3 4 5 6 7 8 9 11 16 17 19 21 24 25 28 29 31 33 34 35 36 37 38 39 40 42 45 46 48 50 54 56 58 59 60 62 b 65 0 1 0 3 4 5 6 7 8 9 11 16 17 19 21 24 25 28 29 31 33 34 35 36 37 38 39 40 42 45 46 48 50 54 56 58 59 60 62 # 25224 difference c a 65 0 1 0 3 4 5 6 7 8 9 11 16 17 19 21 24 25 28 29 31 33 34 35 36 37 38 39 40 42 45 46 48 50 54 56 58 59 60 62 b 65 1 0 e # 25225 difference c a 65 0 1 4 6 8 10 11 12 13 14 16 21 23 26 27 28 29 30 34 37 40 43 48 49 53 55 56 57 58 59 60 61 64 b 65 0 1 4 6 8 10 11 12 13 14 16 21 23 26 27 28 29 30 34 37 40 43 48 49 53 55 56 57 58 59 60 61 64 # 25226 difference c a 65 0 1 4 6 8 10 11 12 13 14 16 21 23 26 27 28 29 30 34 37 40 43 48 49 53 55 56 57 58 59 60 61 64 b 65 1 0 f # 25227 difference c a 65 0 1 3 4 5 6 9 11 13 14 15 19 20 22 23 25 26 27 29 30 31 34 37 38 39 40 42 43 44 45 46 52 54 57 59 60 64 b 65 0 1 3 4 5 6 9 11 13 14 15 19 20 22 23 25 26 27 29 30 31 34 37 38 39 40 42 43 44 45 46 52 54 57 59 60 64 # 25228 difference c a 65 0 1 3 4 5 6 9 11 13 14 15 19 20 22 23 25 26 27 29 30 31 34 37 38 39 40 42 43 44 45 46 52 54 57 59 60 64 b 65 1 0 1 3 6 7 9 10 12 13 14 17 20 22 23 24 27 28 29 30 33 35 37 38 40 42 46 47 49 53 57 61 62 63 64 # 25229 difference c a 65 0 1 e b 65 0 1 e # 25230 difference c a 65 0 1 e b 65 1 1 e # 25231 difference c a 65 0 1 e b 65 0 1 e # 25232 difference c a 65 0 1 e b 65 1 1 f # 25233 difference c a 65 0 1 e b 65 0 1 e # 25234 difference c a 65 0 1 e b 65 1 1 0 1 3 4 5 6 10 11 12 15 16 17 19 21 23 24 25 27 30 36 44 45 48 49 52 55 57 58 59 61 63 64 # 25235 difference c a 65 0 1 f b 65 0 1 f # 25236 difference c a 65 0 1 f b 65 1 1 e # 25237 difference c a 65 0 1 f b 65 0 1 f # 25238 difference c a 65 0 1 f b 65 1 1 f # 25239 difference c a 65 0 1 f b 65 0 1 f # 25240 difference c a 65 0 1 f b 65 1 1 0 1 2 3 7 8 9 11 13 14 19 21 22 24 25 28 31 34 35 36 39 41 42 43 44 45 50 51 53 54 56 58 59 60 63 64 # 25241 difference c a 65 0 1 1 2 5 6 8 11 12 14 17 18 20 21 24 25 26 27 29 30 31 32 35 37 39 42 44 45 50 55 58 59 61 b 65 0 1 1 2 5 6 8 11 12 14 17 18 20 21 24 25 26 27 29 30 31 32 35 37 39 42 44 45 50 55 58 59 61 # 25242 difference c a 65 0 1 1 2 5 6 8 11 12 14 17 18 20 21 24 25 26 27 29 30 31 32 35 37 39 42 44 45 50 55 58 59 61 b 65 1 1 e # 25243 difference c a 65 0 1 0 3 7 10 11 12 17 19 22 23 25 31 32 33 34 37 39 42 44 46 48 50 52 53 54 56 59 60 61 62 64 b 65 0 1 0 3 7 10 11 12 17 19 22 23 25 31 32 33 34 37 39 42 44 46 48 50 52 53 54 56 59 60 61 62 64 # 25244 difference c a 65 0 1 0 3 7 10 11 12 17 19 22 23 25 31 32 33 34 37 39 42 44 46 48 50 52 53 54 56 59 60 61 62 64 b 65 1 1 f # 25245 difference c a 65 0 1 0 1 3 4 8 9 10 15 21 22 23 25 28 29 31 32 33 35 36 37 38 39 41 43 46 48 50 52 53 56 57 59 60 61 b 65 0 1 0 1 3 4 8 9 10 15 21 22 23 25 28 29 31 32 33 35 36 37 38 39 41 43 46 48 50 52 53 56 57 59 60 61 # 25246 difference c a 65 0 1 0 1 3 4 8 9 10 15 21 22 23 25 28 29 31 32 33 35 36 37 38 39 41 43 46 48 50 52 53 56 57 59 60 61 b 65 1 1 0 3 8 12 13 16 17 20 23 24 25 27 29 33 38 39 40 43 46 47 52 53 54 55 56 61 62 63 # 25247 difference c a 65 1 0 e b 65 1 0 e # 25248 difference c a 65 1 0 e b 65 0 0 e # 25249 difference c a 65 1 0 e b 65 1 0 e # 25250 difference c a 65 1 0 e b 65 0 0 f # 25251 difference c a 65 1 0 e b 65 1 0 e # 25252 difference c a 65 1 0 e b 65 0 0 0 2 4 5 8 9 12 14 16 17 18 19 20 21 25 26 27 29 32 34 35 36 39 41 50 54 57 59 61 # 25253 difference c a 65 1 0 f b 65 1 0 f # 25254 difference c a 65 1 0 f b 65 0 0 e # 25255 difference c a 65 1 0 f b 65 1 0 f # 25256 difference c a 65 1 0 f b 65 0 0 f # 25257 difference c a 65 1 0 f b 65 1 0 f # 25258 difference c a 65 1 0 f b 65 0 0 4 6 8 9 10 11 13 15 16 21 22 23 28 29 31 33 36 38 39 42 43 45 46 49 50 51 52 53 54 55 59 61 62 63 # 25259 difference c a 65 1 0 1 3 4 6 8 9 10 11 19 20 30 31 35 41 43 45 52 53 56 57 62 b 65 1 0 1 3 4 6 8 9 10 11 19 20 30 31 35 41 43 45 52 53 56 57 62 # 25260 difference c a 65 1 0 1 3 4 6 8 9 10 11 19 20 30 31 35 41 43 45 52 53 56 57 62 b 65 0 0 e # 25261 difference c a 65 1 0 2 3 4 7 8 9 10 11 15 16 19 20 21 22 23 25 28 29 30 33 35 37 38 40 41 43 45 46 50 52 53 56 58 59 61 64 b 65 1 0 2 3 4 7 8 9 10 11 15 16 19 20 21 22 23 25 28 29 30 33 35 37 38 40 41 43 45 46 50 52 53 56 58 59 61 64 # 25262 difference c a 65 1 0 2 3 4 7 8 9 10 11 15 16 19 20 21 22 23 25 28 29 30 33 35 37 38 40 41 43 45 46 50 52 53 56 58 59 61 64 b 65 0 0 f # 25263 difference c a 65 1 0 0 5 7 11 12 20 22 25 27 28 29 30 31 33 35 36 38 39 40 41 42 43 46 47 48 52 54 55 56 58 59 61 62 63 64 b 65 1 0 0 5 7 11 12 20 22 25 27 28 29 30 31 33 35 36 38 39 40 41 42 43 46 47 48 52 54 55 56 58 59 61 62 63 64 # 25264 difference c a 65 1 0 0 5 7 11 12 20 22 25 27 28 29 30 31 33 35 36 38 39 40 41 42 43 46 47 48 52 54 55 56 58 59 61 62 63 64 b 65 0 0 0 9 10 11 12 13 16 17 18 20 21 23 24 27 28 29 31 33 35 37 38 39 40 41 42 43 46 49 50 51 52 53 54 55 58 63 # 25265 difference c a 65 1 0 e b 65 1 0 e # 25266 difference c a 65 1 0 e b 65 0 1 e # 25267 difference c a 65 1 0 e b 65 1 0 e # 25268 difference c a 65 1 0 e b 65 0 1 f # 25269 difference c a 65 1 0 e b 65 1 0 e # 25270 difference c a 65 1 0 e b 65 0 1 0 2 5 9 10 11 12 14 15 16 17 18 19 20 21 24 27 28 32 33 34 36 42 45 48 51 53 55 57 58 59 60 63 # 25271 difference c a 65 1 0 f b 65 1 0 f # 25272 difference c a 65 1 0 f b 65 0 1 e # 25273 difference c a 65 1 0 f b 65 1 0 f # 25274 difference c a 65 1 0 f b 65 0 1 f # 25275 difference c a 65 1 0 f b 65 1 0 f # 25276 difference c a 65 1 0 f b 65 0 1 1 2 3 6 7 13 15 18 19 21 24 28 29 32 34 36 37 39 43 48 53 56 57 58 59 60 62 63 64 # 25277 difference c a 65 1 0 0 3 7 8 9 13 14 15 19 20 21 22 24 25 27 28 29 30 31 34 35 36 37 38 40 41 42 44 45 47 48 49 50 51 52 53 55 56 58 63 64 b 65 1 0 0 3 7 8 9 13 14 15 19 20 21 22 24 25 27 28 29 30 31 34 35 36 37 38 40 41 42 44 45 47 48 49 50 51 52 53 55 56 58 63 64 # 25278 difference c a 65 1 0 0 3 7 8 9 13 14 15 19 20 21 22 24 25 27 28 29 30 31 34 35 36 37 38 40 41 42 44 45 47 48 49 50 51 52 53 55 56 58 63 64 b 65 0 1 e # 25279 difference c a 65 1 0 0 3 5 6 8 10 12 13 15 16 18 19 21 22 23 27 30 32 35 39 40 43 45 46 49 51 52 53 54 59 61 b 65 1 0 0 3 5 6 8 10 12 13 15 16 18 19 21 22 23 27 30 32 35 39 40 43 45 46 49 51 52 53 54 59 61 # 25280 difference c a 65 1 0 0 3 5 6 8 10 12 13 15 16 18 19 21 22 23 27 30 32 35 39 40 43 45 46 49 51 52 53 54 59 61 b 65 0 1 f # 25281 difference c a 65 1 0 0 7 8 10 11 17 18 20 22 23 28 29 30 32 34 36 37 39 42 45 46 47 48 49 51 52 54 56 58 60 61 62 63 64 b 65 1 0 0 7 8 10 11 17 18 20 22 23 28 29 30 32 34 36 37 39 42 45 46 47 48 49 51 52 54 56 58 60 61 62 63 64 # 25282 difference c a 65 1 0 0 7 8 10 11 17 18 20 22 23 28 29 30 32 34 36 37 39 42 45 46 47 48 49 51 52 54 56 58 60 61 62 63 64 b 65 0 1 0 2 3 4 6 7 15 16 17 18 20 22 23 26 29 33 34 37 39 41 42 43 46 49 51 54 55 56 57 58 60 62 # 25283 difference c a 65 1 0 e b 65 1 0 e # 25284 difference c a 65 1 0 e b 65 1 0 e # 25285 difference c a 65 1 0 e b 65 1 0 e # 25286 difference c a 65 1 0 e b 65 1 0 f # 25287 difference c a 65 1 0 e b 65 1 0 e # 25288 difference c a 65 1 0 e b 65 1 0 0 1 2 3 4 7 9 10 11 12 14 16 17 18 20 23 25 26 27 30 33 34 38 39 41 43 47 52 58 59 60 61 62 64 # 25289 difference c a 65 1 0 f b 65 1 0 f # 25290 difference c a 65 1 0 f b 65 1 0 e # 25291 difference c a 65 1 0 f b 65 1 0 f # 25292 difference c a 65 1 0 f b 65 1 0 f # 25293 difference c a 65 1 0 f b 65 1 0 f # 25294 difference c a 65 1 0 f b 65 1 0 0 2 5 10 11 12 13 16 17 18 22 23 26 29 30 33 34 35 36 39 40 42 43 44 45 46 47 48 49 51 54 56 58 61 62 63 64 # 25295 difference c a 65 1 0 1 3 7 10 13 14 17 20 21 24 26 29 31 32 33 37 38 41 42 45 46 47 48 54 55 56 61 62 63 b 65 1 0 1 3 7 10 13 14 17 20 21 24 26 29 31 32 33 37 38 41 42 45 46 47 48 54 55 56 61 62 63 # 25296 difference c a 65 1 0 1 3 7 10 13 14 17 20 21 24 26 29 31 32 33 37 38 41 42 45 46 47 48 54 55 56 61 62 63 b 65 1 0 e # 25297 difference c a 65 1 0 2 6 7 8 11 12 17 19 20 22 24 27 31 32 33 35 37 38 42 44 49 57 59 b 65 1 0 2 6 7 8 11 12 17 19 20 22 24 27 31 32 33 35 37 38 42 44 49 57 59 # 25298 difference c a 65 1 0 2 6 7 8 11 12 17 19 20 22 24 27 31 32 33 35 37 38 42 44 49 57 59 b 65 1 0 f # 25299 difference c a 65 1 0 0 2 3 5 6 7 8 12 13 14 15 16 20 21 22 23 24 28 30 31 32 33 35 36 38 39 40 44 47 53 54 58 60 61 b 65 1 0 0 2 3 5 6 7 8 12 13 14 15 16 20 21 22 23 24 28 30 31 32 33 35 36 38 39 40 44 47 53 54 58 60 61 # 25300 difference c a 65 1 0 0 2 3 5 6 7 8 12 13 14 15 16 20 21 22 23 24 28 30 31 32 33 35 36 38 39 40 44 47 53 54 58 60 61 b 65 1 0 0 5 6 12 14 16 19 21 25 28 29 30 31 33 34 36 37 38 42 44 45 47 48 49 52 53 54 57 60 63 # 25301 difference c a 65 1 0 e b 65 1 0 e # 25302 difference c a 65 1 0 e b 65 1 1 e # 25303 difference c a 65 1 0 e b 65 1 0 e # 25304 difference c a 65 1 0 e b 65 1 1 f # 25305 difference c a 65 1 0 e b 65 1 0 e # 25306 difference c a 65 1 0 e b 65 1 1 6 7 9 10 11 13 14 19 20 23 24 25 26 29 33 34 35 38 41 43 47 48 49 50 51 54 61 62 64 # 25307 difference c a 65 1 0 f b 65 1 0 f # 25308 difference c a 65 1 0 f b 65 1 1 e # 25309 difference c a 65 1 0 f b 65 1 0 f # 25310 difference c a 65 1 0 f b 65 1 1 f # 25311 difference c a 65 1 0 f b 65 1 0 f # 25312 difference c a 65 1 0 f b 65 1 1 0 2 4 6 7 8 9 13 15 16 17 19 20 24 25 27 28 29 30 33 34 38 42 45 47 48 49 50 51 54 56 59 61 63 64 # 25313 difference c a 65 1 0 0 1 2 4 6 8 11 12 14 17 18 19 20 21 22 26 28 30 31 33 37 38 43 44 48 50 51 53 54 57 58 59 61 62 63 64 b 65 1 0 0 1 2 4 6 8 11 12 14 17 18 19 20 21 22 26 28 30 31 33 37 38 43 44 48 50 51 53 54 57 58 59 61 62 63 64 # 25314 difference c a 65 1 0 0 1 2 4 6 8 11 12 14 17 18 19 20 21 22 26 28 30 31 33 37 38 43 44 48 50 51 53 54 57 58 59 61 62 63 64 b 65 1 1 e # 25315 difference c a 65 1 0 0 2 3 4 10 11 12 14 15 19 21 28 30 31 33 34 38 39 41 44 48 55 56 57 58 59 61 62 63 64 b 65 1 0 0 2 3 4 10 11 12 14 15 19 21 28 30 31 33 34 38 39 41 44 48 55 56 57 58 59 61 62 63 64 # 25316 difference c a 65 1 0 0 2 3 4 10 11 12 14 15 19 21 28 30 31 33 34 38 39 41 44 48 55 56 57 58 59 61 62 63 64 b 65 1 1 f # 25317 difference c a 65 1 0 0 3 4 5 7 9 10 11 12 13 17 18 19 28 31 33 34 36 40 41 42 43 44 50 52 54 56 58 59 63 64 b 65 1 0 0 3 4 5 7 9 10 11 12 13 17 18 19 28 31 33 34 36 40 41 42 43 44 50 52 54 56 58 59 63 64 # 25318 difference c a 65 1 0 0 3 4 5 7 9 10 11 12 13 17 18 19 28 31 33 34 36 40 41 42 43 44 50 52 54 56 58 59 63 64 b 65 1 1 2 4 5 7 8 10 12 13 14 16 18 20 24 25 26 29 31 33 35 36 37 38 39 50 52 54 55 58 59 # 25319 difference c a 65 1 1 e b 65 1 1 e # 25320 difference c a 65 1 1 e b 65 0 0 e # 25321 difference c a 65 1 1 e b 65 1 1 e # 25322 difference c a 65 1 1 e b 65 0 0 f # 25323 difference c a 65 1 1 e b 65 1 1 e # 25324 difference c a 65 1 1 e b 65 0 0 0 6 7 8 9 11 13 15 16 17 18 19 20 25 27 29 30 34 35 41 43 45 46 48 49 54 55 59 63 64 # 25325 difference c a 65 1 1 f b 65 1 1 f # 25326 difference c a 65 1 1 f b 65 0 0 e # 25327 difference c a 65 1 1 f b 65 1 1 f # 25328 difference c a 65 1 1 f b 65 0 0 f # 25329 difference c a 65 1 1 f b 65 1 1 f # 25330 difference c a 65 1 1 f b 65 0 0 0 4 6 7 8 9 12 15 16 17 18 21 22 23 25 26 27 28 29 31 33 38 39 44 45 50 51 52 54 57 58 63 # 25331 difference c a 65 1 1 0 1 4 6 8 10 11 15 18 19 20 21 22 23 24 29 30 32 35 36 39 43 44 45 46 47 48 50 51 53 54 56 57 58 60 61 62 63 64 b 65 1 1 0 1 4 6 8 10 11 15 18 19 20 21 22 23 24 29 30 32 35 36 39 43 44 45 46 47 48 50 51 53 54 56 57 58 60 61 62 63 64 # 25332 difference c a 65 1 1 0 1 4 6 8 10 11 15 18 19 20 21 22 23 24 29 30 32 35 36 39 43 44 45 46 47 48 50 51 53 54 56 57 58 60 61 62 63 64 b 65 0 0 e # 25333 difference c a 65 1 1 1 2 6 8 9 11 12 14 16 17 18 19 22 27 28 30 33 34 35 37 40 42 44 45 46 47 51 52 55 57 58 61 62 63 64 b 65 1 1 1 2 6 8 9 11 12 14 16 17 18 19 22 27 28 30 33 34 35 37 40 42 44 45 46 47 51 52 55 57 58 61 62 63 64 # 25334 difference c a 65 1 1 1 2 6 8 9 11 12 14 16 17 18 19 22 27 28 30 33 34 35 37 40 42 44 45 46 47 51 52 55 57 58 61 62 63 64 b 65 0 0 f # 25335 difference c a 65 1 1 1 2 4 6 11 13 15 19 20 23 25 31 38 39 40 41 42 43 44 46 48 51 52 54 58 59 60 61 62 63 b 65 1 1 1 2 4 6 11 13 15 19 20 23 25 31 38 39 40 41 42 43 44 46 48 51 52 54 58 59 60 61 62 63 # 25336 difference c a 65 1 1 1 2 4 6 11 13 15 19 20 23 25 31 38 39 40 41 42 43 44 46 48 51 52 54 58 59 60 61 62 63 b 65 0 0 0 2 4 6 7 9 10 12 15 16 17 18 20 21 23 24 26 27 28 29 30 31 32 33 35 38 41 42 43 46 49 51 52 53 54 57 64 # 25337 difference c a 65 1 1 e b 65 1 1 e # 25338 difference c a 65 1 1 e b 65 0 1 e # 25339 difference c a 65 1 1 e b 65 1 1 e # 25340 difference c a 65 1 1 e b 65 0 1 f # 25341 difference c a 65 1 1 e b 65 1 1 e # 25342 difference c a 65 1 1 e b 65 0 1 3 5 6 8 9 10 11 12 15 16 19 21 22 23 29 31 33 34 35 37 40 43 44 48 49 51 52 54 58 59 62 63 64 # 25343 difference c a 65 1 1 f b 65 1 1 f # 25344 difference c a 65 1 1 f b 65 0 1 e # 25345 difference c a 65 1 1 f b 65 1 1 f # 25346 difference c a 65 1 1 f b 65 0 1 f # 25347 difference c a 65 1 1 f b 65 1 1 f # 25348 difference c a 65 1 1 f b 65 0 1 0 1 5 7 8 9 10 19 21 23 27 30 31 35 36 37 38 39 40 44 45 46 48 50 52 54 59 61 62 63 # 25349 difference c a 65 1 1 3 6 7 8 9 12 13 15 16 17 18 19 20 23 24 27 28 30 32 35 37 38 40 42 43 44 46 47 48 49 50 51 54 55 58 61 62 64 b 65 1 1 3 6 7 8 9 12 13 15 16 17 18 19 20 23 24 27 28 30 32 35 37 38 40 42 43 44 46 47 48 49 50 51 54 55 58 61 62 64 # 25350 difference c a 65 1 1 3 6 7 8 9 12 13 15 16 17 18 19 20 23 24 27 28 30 32 35 37 38 40 42 43 44 46 47 48 49 50 51 54 55 58 61 62 64 b 65 0 1 e # 25351 difference c a 65 1 1 0 3 4 5 6 9 11 13 14 16 19 25 26 27 28 30 31 34 37 38 39 41 43 44 47 48 49 50 51 59 60 62 64 b 65 1 1 0 3 4 5 6 9 11 13 14 16 19 25 26 27 28 30 31 34 37 38 39 41 43 44 47 48 49 50 51 59 60 62 64 # 25352 difference c a 65 1 1 0 3 4 5 6 9 11 13 14 16 19 25 26 27 28 30 31 34 37 38 39 41 43 44 47 48 49 50 51 59 60 62 64 b 65 0 1 f # 25353 difference c a 65 1 1 1 5 6 9 11 12 15 16 18 20 24 31 33 34 35 36 37 41 42 44 47 48 51 52 53 55 57 61 b 65 1 1 1 5 6 9 11 12 15 16 18 20 24 31 33 34 35 36 37 41 42 44 47 48 51 52 53 55 57 61 # 25354 difference c a 65 1 1 1 5 6 9 11 12 15 16 18 20 24 31 33 34 35 36 37 41 42 44 47 48 51 52 53 55 57 61 b 65 0 1 3 9 11 14 17 21 25 27 29 33 35 37 38 39 40 42 45 46 47 48 49 52 53 56 57 59 60 61 # 25355 difference c a 65 1 1 e b 65 1 1 e # 25356 difference c a 65 1 1 e b 65 1 0 e # 25357 difference c a 65 1 1 e b 65 1 1 e # 25358 difference c a 65 1 1 e b 65 1 0 f # 25359 difference c a 65 1 1 e b 65 1 1 e # 25360 difference c a 65 1 1 e b 65 1 0 0 1 2 3 4 6 10 11 12 13 14 15 16 17 18 19 28 29 30 31 32 34 35 36 37 38 41 45 48 53 54 55 61 63 # 25361 difference c a 65 1 1 f b 65 1 1 f # 25362 difference c a 65 1 1 f b 65 1 0 e # 25363 difference c a 65 1 1 f b 65 1 1 f # 25364 difference c a 65 1 1 f b 65 1 0 f # 25365 difference c a 65 1 1 f b 65 1 1 f # 25366 difference c a 65 1 1 f b 65 1 0 1 4 5 8 9 10 11 12 14 16 18 21 22 23 24 25 27 32 33 34 35 36 39 40 42 43 44 45 49 50 51 52 53 54 55 56 57 58 59 # 25367 difference c a 65 1 1 1 2 5 12 13 15 16 20 23 24 28 31 35 37 39 42 46 47 48 51 52 53 54 55 56 57 58 59 62 63 64 b 65 1 1 1 2 5 12 13 15 16 20 23 24 28 31 35 37 39 42 46 47 48 51 52 53 54 55 56 57 58 59 62 63 64 # 25368 difference c a 65 1 1 1 2 5 12 13 15 16 20 23 24 28 31 35 37 39 42 46 47 48 51 52 53 54 55 56 57 58 59 62 63 64 b 65 1 0 e # 25369 difference c a 65 1 1 1 4 5 6 8 9 10 12 13 17 19 20 21 22 23 24 25 31 32 33 34 35 36 37 39 40 43 44 54 56 58 b 65 1 1 1 4 5 6 8 9 10 12 13 17 19 20 21 22 23 24 25 31 32 33 34 35 36 37 39 40 43 44 54 56 58 # 25370 difference c a 65 1 1 1 4 5 6 8 9 10 12 13 17 19 20 21 22 23 24 25 31 32 33 34 35 36 37 39 40 43 44 54 56 58 b 65 1 0 f # 25371 difference c a 65 1 1 2 3 4 5 6 8 12 14 16 18 19 22 26 27 28 30 31 32 33 34 35 36 37 39 43 44 47 49 50 51 53 59 60 62 63 b 65 1 1 2 3 4 5 6 8 12 14 16 18 19 22 26 27 28 30 31 32 33 34 35 36 37 39 43 44 47 49 50 51 53 59 60 62 63 # 25372 difference c a 65 1 1 2 3 4 5 6 8 12 14 16 18 19 22 26 27 28 30 31 32 33 34 35 36 37 39 43 44 47 49 50 51 53 59 60 62 63 b 65 1 0 0 1 2 3 4 5 6 8 9 14 16 19 20 21 22 23 25 26 28 30 31 33 34 37 38 40 42 43 48 49 51 52 54 55 60 64 # 25373 difference c a 65 1 1 e b 65 1 1 e # 25374 difference c a 65 1 1 e b 65 1 1 e # 25375 difference c a 65 1 1 e b 65 1 1 e # 25376 difference c a 65 1 1 e b 65 1 1 f # 25377 difference c a 65 1 1 e b 65 1 1 e # 25378 difference c a 65 1 1 e b 65 1 1 0 3 5 8 10 12 16 17 19 20 24 27 28 30 31 32 37 38 41 45 46 47 48 49 50 54 55 56 57 58 61 # 25379 difference c a 65 1 1 f b 65 1 1 f # 25380 difference c a 65 1 1 f b 65 1 1 e # 25381 difference c a 65 1 1 f b 65 1 1 f # 25382 difference c a 65 1 1 f b 65 1 1 f # 25383 difference c a 65 1 1 f b 65 1 1 f # 25384 difference c a 65 1 1 f b 65 1 1 0 1 2 3 8 17 19 25 26 30 31 33 34 35 37 38 39 43 44 45 46 51 52 53 56 58 59 60 61 62 64 # 25385 difference c a 65 1 1 0 1 3 4 8 9 12 13 14 17 19 21 22 23 24 25 26 27 28 30 38 42 45 46 48 56 59 63 64 b 65 1 1 0 1 3 4 8 9 12 13 14 17 19 21 22 23 24 25 26 27 28 30 38 42 45 46 48 56 59 63 64 # 25386 difference c a 65 1 1 0 1 3 4 8 9 12 13 14 17 19 21 22 23 24 25 26 27 28 30 38 42 45 46 48 56 59 63 64 b 65 1 1 e # 25387 difference c a 65 1 1 1 3 4 7 9 11 12 13 14 17 18 24 26 29 31 32 34 36 41 45 46 47 48 49 53 54 56 57 58 64 b 65 1 1 1 3 4 7 9 11 12 13 14 17 18 24 26 29 31 32 34 36 41 45 46 47 48 49 53 54 56 57 58 64 # 25388 difference c a 65 1 1 1 3 4 7 9 11 12 13 14 17 18 24 26 29 31 32 34 36 41 45 46 47 48 49 53 54 56 57 58 64 b 65 1 1 f # 25389 difference c a 65 1 1 1 2 3 5 7 9 12 15 21 23 24 25 29 30 31 33 34 35 36 38 39 47 48 49 52 55 57 58 61 63 64 b 65 1 1 1 2 3 5 7 9 12 15 21 23 24 25 29 30 31 33 34 35 36 38 39 47 48 49 52 55 57 58 61 63 64 # 25390 difference c a 65 1 1 1 2 3 5 7 9 12 15 21 23 24 25 29 30 31 33 34 35 36 38 39 47 48 49 52 55 57 58 61 63 64 b 65 1 1 0 1 7 8 9 12 15 19 20 25 26 28 29 30 31 32 36 37 38 39 42 47 48 49 50 52 54 56 57 59 60 62 63 64 # 25391 difference c a 211 0 0 e b 211 0 0 e # 25392 difference c a 211 0 0 e b 211 0 0 e # 25393 difference c a 211 0 0 e b 211 0 0 e # 25394 difference c a 211 0 0 e b 211 0 0 f # 25395 difference c a 211 0 0 e b 211 0 0 e # 25396 difference c a 211 0 0 e b 211 0 0 1 2 3 4 5 8 9 10 11 13 14 15 16 18 19 22 24 25 28 29 32 35 36 37 39 40 41 42 43 44 46 48 49 51 55 62 64 65 67 68 69 72 76 78 83 84 85 86 89 90 91 93 96 97 98 102 104 106 108 109 110 117 118 120 121 126 129 130 131 133 134 135 137 142 143 144 145 146 148 149 150 151 153 155 159 160 161 164 167 169 171 173 176 179 182 183 186 187 188 189 191 192 193 194 195 198 199 200 201 204 205 207 209 210 # 25397 difference c a 211 0 0 f b 211 0 0 f # 25398 difference c a 211 0 0 f b 211 0 0 e # 25399 difference c a 211 0 0 f b 211 0 0 f # 25400 difference c a 211 0 0 f b 211 0 0 f # 25401 difference c a 211 0 0 f b 211 0 0 f # 25402 difference c a 211 0 0 f b 211 0 0 0 2 10 11 13 14 15 18 19 21 24 26 27 28 29 30 31 33 35 38 40 41 43 46 47 48 49 50 51 56 58 59 61 63 65 67 71 73 74 75 77 79 80 82 88 90 95 97 101 107 109 110 112 113 117 118 121 122 123 125 128 129 130 131 132 136 137 138 141 142 146 147 149 150 151 153 155 156 157 160 163 164 165 166 167 168 169 172 173 174 177 178 181 183 184 185 186 188 189 190 191 195 198 201 204 208 210 # 25403 difference c a 211 0 0 2 5 7 10 14 16 19 20 23 25 28 29 34 35 36 37 42 43 48 52 53 55 57 60 61 64 67 69 72 76 78 80 81 82 83 84 86 92 93 94 95 98 100 102 103 104 108 110 111 113 115 119 121 124 127 128 131 132 134 135 136 143 145 146 147 148 149 150 152 154 156 160 161 163 165 166 169 170 171 173 176 179 181 183 187 188 189 191 192 193 194 196 198 199 202 203 210 b 211 0 0 2 5 7 10 14 16 19 20 23 25 28 29 34 35 36 37 42 43 48 52 53 55 57 60 61 64 67 69 72 76 78 80 81 82 83 84 86 92 93 94 95 98 100 102 103 104 108 110 111 113 115 119 121 124 127 128 131 132 134 135 136 143 145 146 147 148 149 150 152 154 156 160 161 163 165 166 169 170 171 173 176 179 181 183 187 188 189 191 192 193 194 196 198 199 202 203 210 # 25404 difference c a 211 0 0 2 5 7 10 14 16 19 20 23 25 28 29 34 35 36 37 42 43 48 52 53 55 57 60 61 64 67 69 72 76 78 80 81 82 83 84 86 92 93 94 95 98 100 102 103 104 108 110 111 113 115 119 121 124 127 128 131 132 134 135 136 143 145 146 147 148 149 150 152 154 156 160 161 163 165 166 169 170 171 173 176 179 181 183 187 188 189 191 192 193 194 196 198 199 202 203 210 b 211 0 0 e # 25405 difference c a 211 0 0 0 3 4 7 11 13 14 15 16 19 20 21 25 26 27 30 31 32 33 34 37 39 42 48 49 50 52 54 57 58 60 61 63 64 70 72 73 74 78 79 80 81 83 86 89 90 92 94 96 98 99 100 101 103 107 108 109 110 111 112 115 116 119 124 126 127 130 134 135 136 143 145 146 151 152 154 155 156 157 158 164 168 169 170 171 172 174 176 177 178 181 182 185 188 191 192 193 197 198 201 206 209 b 211 0 0 0 3 4 7 11 13 14 15 16 19 20 21 25 26 27 30 31 32 33 34 37 39 42 48 49 50 52 54 57 58 60 61 63 64 70 72 73 74 78 79 80 81 83 86 89 90 92 94 96 98 99 100 101 103 107 108 109 110 111 112 115 116 119 124 126 127 130 134 135 136 143 145 146 151 152 154 155 156 157 158 164 168 169 170 171 172 174 176 177 178 181 182 185 188 191 192 193 197 198 201 206 209 # 25406 difference c a 211 0 0 0 3 4 7 11 13 14 15 16 19 20 21 25 26 27 30 31 32 33 34 37 39 42 48 49 50 52 54 57 58 60 61 63 64 70 72 73 74 78 79 80 81 83 86 89 90 92 94 96 98 99 100 101 103 107 108 109 110 111 112 115 116 119 124 126 127 130 134 135 136 143 145 146 151 152 154 155 156 157 158 164 168 169 170 171 172 174 176 177 178 181 182 185 188 191 192 193 197 198 201 206 209 b 211 0 0 f # 25407 difference c a 211 0 0 0 1 6 9 10 12 13 14 19 20 22 27 32 33 38 41 42 43 44 48 50 51 52 53 57 58 59 62 64 68 70 71 72 74 75 76 78 79 80 81 82 84 86 89 90 91 92 93 94 95 100 101 103 114 116 118 121 124 128 133 135 136 137 141 142 143 148 149 150 152 157 158 162 163 164 165 166 167 168 171 174 175 176 177 179 180 182 183 187 189 193 196 197 199 201 202 204 207 b 211 0 0 0 1 6 9 10 12 13 14 19 20 22 27 32 33 38 41 42 43 44 48 50 51 52 53 57 58 59 62 64 68 70 71 72 74 75 76 78 79 80 81 82 84 86 89 90 91 92 93 94 95 100 101 103 114 116 118 121 124 128 133 135 136 137 141 142 143 148 149 150 152 157 158 162 163 164 165 166 167 168 171 174 175 176 177 179 180 182 183 187 189 193 196 197 199 201 202 204 207 # 25408 difference c a 211 0 0 0 1 6 9 10 12 13 14 19 20 22 27 32 33 38 41 42 43 44 48 50 51 52 53 57 58 59 62 64 68 70 71 72 74 75 76 78 79 80 81 82 84 86 89 90 91 92 93 94 95 100 101 103 114 116 118 121 124 128 133 135 136 137 141 142 143 148 149 150 152 157 158 162 163 164 165 166 167 168 171 174 175 176 177 179 180 182 183 187 189 193 196 197 199 201 202 204 207 b 211 0 0 1 5 11 12 14 15 17 21 22 23 24 26 27 28 33 34 36 38 39 40 42 44 45 48 49 51 52 54 55 56 57 59 61 66 69 72 73 74 75 76 78 80 83 84 87 88 89 90 92 94 96 97 101 104 110 112 115 116 117 118 119 120 121 122 125 126 127 131 132 133 135 136 137 140 142 143 144 148 151 152 156 157 165 166 168 170 171 173 176 177 178 179 181 182 185 188 189 190 198 199 200 202 # 25409 difference c a 211 0 0 e b 211 0 0 e # 25410 difference c a 211 0 0 e b 211 0 1 e # 25411 difference c a 211 0 0 e b 211 0 0 e # 25412 difference c a 211 0 0 e b 211 0 1 f # 25413 difference c a 211 0 0 e b 211 0 0 e # 25414 difference c a 211 0 0 e b 211 0 1 2 3 5 7 8 9 13 14 15 16 19 20 21 22 25 26 29 30 31 33 35 36 37 39 40 41 42 43 44 45 46 47 48 50 51 57 58 59 60 61 65 66 68 70 73 76 78 79 81 82 83 85 87 88 91 92 93 96 98 99 100 101 104 105 108 113 116 119 120 121 122 123 124 127 129 132 133 137 138 142 143 148 155 158 159 164 165 166 168 169 170 172 173 174 179 180 181 183 184 185 186 189 191 192 193 194 195 197 206 207 208 210 # 25415 difference c a 211 0 0 f b 211 0 0 f # 25416 difference c a 211 0 0 f b 211 0 1 e # 25417 difference c a 211 0 0 f b 211 0 0 f # 25418 difference c a 211 0 0 f b 211 0 1 f # 25419 difference c a 211 0 0 f b 211 0 0 f # 25420 difference c a 211 0 0 f b 211 0 1 1 4 5 10 11 13 14 17 18 22 23 24 29 31 32 35 37 39 40 42 44 45 50 51 53 57 58 60 61 67 70 72 75 77 78 79 81 83 85 86 87 88 89 91 92 96 100 101 103 105 107 108 113 114 115 116 117 119 120 121 122 125 126 129 132 133 136 137 139 141 144 147 149 150 151 155 158 159 165 166 169 171 172 173 176 181 183 185 187 188 190 192 198 199 203 205 209 # 25421 difference c a 211 0 0 1 2 6 11 13 15 16 18 19 20 23 25 27 29 31 32 33 34 35 37 39 40 42 45 46 49 50 52 54 63 66 67 68 70 71 72 73 75 76 80 83 87 88 89 91 94 95 96 97 98 99 101 102 103 105 106 113 115 117 118 121 123 130 132 133 136 138 139 140 147 149 150 151 152 157 158 159 161 165 166 171 172 175 176 178 181 182 184 186 189 191 194 195 197 203 204 205 206 207 209 b 211 0 0 1 2 6 11 13 15 16 18 19 20 23 25 27 29 31 32 33 34 35 37 39 40 42 45 46 49 50 52 54 63 66 67 68 70 71 72 73 75 76 80 83 87 88 89 91 94 95 96 97 98 99 101 102 103 105 106 113 115 117 118 121 123 130 132 133 136 138 139 140 147 149 150 151 152 157 158 159 161 165 166 171 172 175 176 178 181 182 184 186 189 191 194 195 197 203 204 205 206 207 209 # 25422 difference c a 211 0 0 1 2 6 11 13 15 16 18 19 20 23 25 27 29 31 32 33 34 35 37 39 40 42 45 46 49 50 52 54 63 66 67 68 70 71 72 73 75 76 80 83 87 88 89 91 94 95 96 97 98 99 101 102 103 105 106 113 115 117 118 121 123 130 132 133 136 138 139 140 147 149 150 151 152 157 158 159 161 165 166 171 172 175 176 178 181 182 184 186 189 191 194 195 197 203 204 205 206 207 209 b 211 0 1 e # 25423 difference c a 211 0 0 0 5 7 9 11 13 14 16 17 18 20 22 23 25 26 28 29 31 33 34 35 38 39 41 42 43 44 45 47 49 56 58 59 62 64 65 68 69 72 73 74 75 76 81 82 84 86 87 88 89 90 91 92 93 95 97 100 101 102 103 104 105 108 109 110 112 114 115 116 117 118 121 125 127 128 129 132 136 137 138 139 140 141 145 147 148 149 152 153 154 156 159 161 163 164 167 170 171 177 179 180 181 184 185 186 187 189 190 192 193 195 197 198 199 201 202 203 204 208 209 b 211 0 0 0 5 7 9 11 13 14 16 17 18 20 22 23 25 26 28 29 31 33 34 35 38 39 41 42 43 44 45 47 49 56 58 59 62 64 65 68 69 72 73 74 75 76 81 82 84 86 87 88 89 90 91 92 93 95 97 100 101 102 103 104 105 108 109 110 112 114 115 116 117 118 121 125 127 128 129 132 136 137 138 139 140 141 145 147 148 149 152 153 154 156 159 161 163 164 167 170 171 177 179 180 181 184 185 186 187 189 190 192 193 195 197 198 199 201 202 203 204 208 209 # 25424 difference c a 211 0 0 0 5 7 9 11 13 14 16 17 18 20 22 23 25 26 28 29 31 33 34 35 38 39 41 42 43 44 45 47 49 56 58 59 62 64 65 68 69 72 73 74 75 76 81 82 84 86 87 88 89 90 91 92 93 95 97 100 101 102 103 104 105 108 109 110 112 114 115 116 117 118 121 125 127 128 129 132 136 137 138 139 140 141 145 147 148 149 152 153 154 156 159 161 163 164 167 170 171 177 179 180 181 184 185 186 187 189 190 192 193 195 197 198 199 201 202 203 204 208 209 b 211 0 1 f # 25425 difference c a 211 0 0 0 1 4 6 7 8 9 12 14 16 17 19 21 23 24 25 28 29 32 33 34 37 40 41 46 48 50 59 61 64 66 68 69 70 71 72 75 82 83 84 85 86 87 90 91 96 97 98 99 100 101 103 104 105 106 108 109 110 113 115 116 118 120 121 126 129 130 137 138 140 141 142 144 145 150 151 153 155 157 158 159 160 161 165 166 167 168 169 170 171 172 173 174 176 178 179 181 182 183 184 191 193 195 197 198 200 201 202 205 206 209 b 211 0 0 0 1 4 6 7 8 9 12 14 16 17 19 21 23 24 25 28 29 32 33 34 37 40 41 46 48 50 59 61 64 66 68 69 70 71 72 75 82 83 84 85 86 87 90 91 96 97 98 99 100 101 103 104 105 106 108 109 110 113 115 116 118 120 121 126 129 130 137 138 140 141 142 144 145 150 151 153 155 157 158 159 160 161 165 166 167 168 169 170 171 172 173 174 176 178 179 181 182 183 184 191 193 195 197 198 200 201 202 205 206 209 # 25426 difference c a 211 0 0 0 1 4 6 7 8 9 12 14 16 17 19 21 23 24 25 28 29 32 33 34 37 40 41 46 48 50 59 61 64 66 68 69 70 71 72 75 82 83 84 85 86 87 90 91 96 97 98 99 100 101 103 104 105 106 108 109 110 113 115 116 118 120 121 126 129 130 137 138 140 141 142 144 145 150 151 153 155 157 158 159 160 161 165 166 167 168 169 170 171 172 173 174 176 178 179 181 182 183 184 191 193 195 197 198 200 201 202 205 206 209 b 211 0 1 0 1 6 7 8 10 11 12 13 14 15 17 18 20 24 28 32 33 34 37 39 42 44 45 48 50 52 54 55 56 57 58 62 65 66 68 69 74 76 79 80 85 88 90 92 93 95 96 99 101 106 108 110 114 115 121 124 125 129 132 134 135 136 137 140 142 145 147 149 150 151 152 154 158 159 160 163 164 166 168 169 170 171 173 175 176 177 180 182 184 185 186 189 194 195 196 197 199 200 202 203 206 210 # 25427 difference c a 211 0 0 e b 211 0 0 e # 25428 difference c a 211 0 0 e b 211 1 0 e # 25429 difference c a 211 0 0 e b 211 0 0 e # 25430 difference c a 211 0 0 e b 211 1 0 f # 25431 difference c a 211 0 0 e b 211 0 0 e # 25432 difference c a 211 0 0 e b 211 1 0 0 1 2 4 5 8 12 13 15 16 17 20 21 23 27 28 29 31 36 37 39 41 43 44 46 47 49 52 54 55 56 58 59 63 65 66 71 73 74 79 82 84 85 87 89 90 91 95 96 100 101 105 106 107 111 112 115 118 119 122 123 124 127 128 129 131 135 138 139 142 144 146 148 149 153 154 155 158 159 161 162 163 165 166 167 170 171 172 173 174 177 178 179 180 181 183 184 186 188 189 191 192 193 194 196 200 202 203 205 208 209 # 25433 difference c a 211 0 0 f b 211 0 0 f # 25434 difference c a 211 0 0 f b 211 1 0 e # 25435 difference c a 211 0 0 f b 211 0 0 f # 25436 difference c a 211 0 0 f b 211 1 0 f # 25437 difference c a 211 0 0 f b 211 0 0 f # 25438 difference c a 211 0 0 f b 211 1 0 0 1 2 3 4 5 6 8 11 17 18 19 20 21 22 23 25 26 27 28 29 32 33 35 36 37 39 41 43 45 47 48 49 51 52 54 56 57 58 59 60 63 66 69 70 71 72 74 75 77 78 80 83 88 91 95 96 98 101 103 106 107 109 112 113 118 120 122 124 126 127 128 129 131 132 133 134 136 137 140 141 143 144 145 151 156 158 159 162 164 165 166 167 168 173 179 180 181 182 185 192 193 194 195 196 198 200 201 202 203 204 208 209 210 # 25439 difference c a 211 0 0 1 2 3 5 7 8 9 10 13 16 17 18 21 24 26 27 30 31 33 37 42 43 47 48 54 55 56 57 58 61 62 64 66 70 71 73 74 75 76 77 78 79 81 90 93 94 97 103 104 105 107 108 110 114 115 116 120 121 122 124 125 127 128 129 131 133 134 136 139 142 143 144 145 147 148 149 150 151 152 153 154 161 163 164 165 166 171 176 177 178 179 180 181 182 184 185 186 191 193 196 198 199 200 201 202 b 211 0 0 1 2 3 5 7 8 9 10 13 16 17 18 21 24 26 27 30 31 33 37 42 43 47 48 54 55 56 57 58 61 62 64 66 70 71 73 74 75 76 77 78 79 81 90 93 94 97 103 104 105 107 108 110 114 115 116 120 121 122 124 125 127 128 129 131 133 134 136 139 142 143 144 145 147 148 149 150 151 152 153 154 161 163 164 165 166 171 176 177 178 179 180 181 182 184 185 186 191 193 196 198 199 200 201 202 # 25440 difference c a 211 0 0 1 2 3 5 7 8 9 10 13 16 17 18 21 24 26 27 30 31 33 37 42 43 47 48 54 55 56 57 58 61 62 64 66 70 71 73 74 75 76 77 78 79 81 90 93 94 97 103 104 105 107 108 110 114 115 116 120 121 122 124 125 127 128 129 131 133 134 136 139 142 143 144 145 147 148 149 150 151 152 153 154 161 163 164 165 166 171 176 177 178 179 180 181 182 184 185 186 191 193 196 198 199 200 201 202 b 211 1 0 e # 25441 difference c a 211 0 0 0 2 5 8 9 10 11 13 15 17 23 24 27 28 29 31 36 37 38 39 40 41 42 44 45 46 48 50 52 53 54 55 58 60 61 62 66 68 69 71 72 73 74 76 77 78 79 82 85 87 89 92 100 101 103 104 107 109 111 115 118 119 122 126 127 128 131 132 133 135 136 137 140 141 142 147 148 150 153 154 155 158 159 160 162 163 168 169 171 172 174 176 182 183 184 186 188 189 191 193 195 197 198 200 202 203 204 205 207 209 b 211 0 0 0 2 5 8 9 10 11 13 15 17 23 24 27 28 29 31 36 37 38 39 40 41 42 44 45 46 48 50 52 53 54 55 58 60 61 62 66 68 69 71 72 73 74 76 77 78 79 82 85 87 89 92 100 101 103 104 107 109 111 115 118 119 122 126 127 128 131 132 133 135 136 137 140 141 142 147 148 150 153 154 155 158 159 160 162 163 168 169 171 172 174 176 182 183 184 186 188 189 191 193 195 197 198 200 202 203 204 205 207 209 # 25442 difference c a 211 0 0 0 2 5 8 9 10 11 13 15 17 23 24 27 28 29 31 36 37 38 39 40 41 42 44 45 46 48 50 52 53 54 55 58 60 61 62 66 68 69 71 72 73 74 76 77 78 79 82 85 87 89 92 100 101 103 104 107 109 111 115 118 119 122 126 127 128 131 132 133 135 136 137 140 141 142 147 148 150 153 154 155 158 159 160 162 163 168 169 171 172 174 176 182 183 184 186 188 189 191 193 195 197 198 200 202 203 204 205 207 209 b 211 1 0 f # 25443 difference c a 211 0 0 0 2 3 6 9 10 13 14 15 16 17 18 20 23 34 35 36 37 41 42 43 44 46 47 49 50 51 54 55 57 58 59 63 64 67 68 69 72 76 77 79 80 82 83 85 86 87 88 89 90 91 94 100 101 102 103 104 107 110 111 112 113 114 117 123 125 126 127 132 134 135 136 138 139 140 142 145 146 147 148 149 150 154 155 157 158 162 164 165 168 169 171 175 177 180 184 186 187 189 191 192 194 195 196 199 201 202 203 205 207 208 209 210 b 211 0 0 0 2 3 6 9 10 13 14 15 16 17 18 20 23 34 35 36 37 41 42 43 44 46 47 49 50 51 54 55 57 58 59 63 64 67 68 69 72 76 77 79 80 82 83 85 86 87 88 89 90 91 94 100 101 102 103 104 107 110 111 112 113 114 117 123 125 126 127 132 134 135 136 138 139 140 142 145 146 147 148 149 150 154 155 157 158 162 164 165 168 169 171 175 177 180 184 186 187 189 191 192 194 195 196 199 201 202 203 205 207 208 209 210 # 25444 difference c a 211 0 0 0 2 3 6 9 10 13 14 15 16 17 18 20 23 34 35 36 37 41 42 43 44 46 47 49 50 51 54 55 57 58 59 63 64 67 68 69 72 76 77 79 80 82 83 85 86 87 88 89 90 91 94 100 101 102 103 104 107 110 111 112 113 114 117 123 125 126 127 132 134 135 136 138 139 140 142 145 146 147 148 149 150 154 155 157 158 162 164 165 168 169 171 175 177 180 184 186 187 189 191 192 194 195 196 199 201 202 203 205 207 208 209 210 b 211 1 0 0 5 9 10 12 13 15 16 18 19 20 21 22 24 25 26 27 28 29 30 31 34 35 38 39 41 42 44 46 47 48 49 50 52 54 55 57 59 60 62 65 67 68 72 75 76 82 84 85 86 87 88 90 91 92 93 97 98 100 102 103 104 106 107 108 120 123 124 125 126 129 130 133 136 139 142 143 144 147 148 151 152 154 155 157 159 160 164 165 166 167 168 169 170 173 177 183 184 185 186 188 189 190 194 196 199 201 203 204 205 207 208 # 25445 difference c a 211 0 0 e b 211 0 0 e # 25446 difference c a 211 0 0 e b 211 1 1 e # 25447 difference c a 211 0 0 e b 211 0 0 e # 25448 difference c a 211 0 0 e b 211 1 1 f # 25449 difference c a 211 0 0 e b 211 0 0 e # 25450 difference c a 211 0 0 e b 211 1 1 0 1 3 4 6 9 11 12 17 22 25 26 28 31 33 34 39 41 45 47 48 49 54 55 57 58 59 60 62 67 68 69 70 72 75 77 78 80 81 82 85 92 94 96 99 101 102 103 106 109 110 112 114 115 119 121 125 127 129 130 132 133 135 139 143 144 146 147 150 151 153 155 156 157 158 162 168 169 171 172 174 175 176 177 178 183 186 190 191 192 194 196 198 200 201 203 206 # 25451 difference c a 211 0 0 f b 211 0 0 f # 25452 difference c a 211 0 0 f b 211 1 1 e # 25453 difference c a 211 0 0 f b 211 0 0 f # 25454 difference c a 211 0 0 f b 211 1 1 f # 25455 difference c a 211 0 0 f b 211 0 0 f # 25456 difference c a 211 0 0 f b 211 1 1 0 1 2 3 6 7 10 16 22 24 27 28 29 31 32 34 37 39 40 41 46 48 49 50 53 54 55 58 60 63 64 66 68 71 76 77 78 79 80 88 90 91 92 93 98 100 101 103 112 113 114 115 117 122 123 128 130 131 133 134 135 139 141 144 149 152 156 157 158 159 162 167 168 170 175 176 177 179 181 185 186 188 192 193 194 197 203 204 205 206 207 208 209 210 # 25457 difference c a 211 0 0 1 3 4 9 12 16 18 20 22 25 30 31 32 35 37 39 40 41 43 48 52 54 56 58 61 64 65 68 69 71 74 75 76 78 79 80 83 84 87 89 91 92 95 97 99 100 102 104 106 107 108 109 110 113 118 119 122 124 126 127 130 131 132 133 135 138 139 143 145 146 147 149 151 154 155 157 158 159 161 162 163 164 165 166 167 170 172 181 184 193 196 200 202 203 204 205 207 b 211 0 0 1 3 4 9 12 16 18 20 22 25 30 31 32 35 37 39 40 41 43 48 52 54 56 58 61 64 65 68 69 71 74 75 76 78 79 80 83 84 87 89 91 92 95 97 99 100 102 104 106 107 108 109 110 113 118 119 122 124 126 127 130 131 132 133 135 138 139 143 145 146 147 149 151 154 155 157 158 159 161 162 163 164 165 166 167 170 172 181 184 193 196 200 202 203 204 205 207 # 25458 difference c a 211 0 0 1 3 4 9 12 16 18 20 22 25 30 31 32 35 37 39 40 41 43 48 52 54 56 58 61 64 65 68 69 71 74 75 76 78 79 80 83 84 87 89 91 92 95 97 99 100 102 104 106 107 108 109 110 113 118 119 122 124 126 127 130 131 132 133 135 138 139 143 145 146 147 149 151 154 155 157 158 159 161 162 163 164 165 166 167 170 172 181 184 193 196 200 202 203 204 205 207 b 211 1 1 e # 25459 difference c a 211 0 0 2 3 5 7 9 10 11 13 15 16 18 22 23 24 25 27 29 31 32 34 38 41 43 44 47 48 52 55 58 65 67 76 77 79 81 83 84 86 88 90 92 93 96 97 98 102 103 104 105 107 108 109 110 111 112 113 114 115 117 118 121 122 123 124 127 130 131 133 134 136 138 141 143 144 146 149 150 156 157 158 159 160 161 162 164 166 168 169 170 171 174 176 177 182 183 184 188 191 195 196 200 204 206 207 b 211 0 0 2 3 5 7 9 10 11 13 15 16 18 22 23 24 25 27 29 31 32 34 38 41 43 44 47 48 52 55 58 65 67 76 77 79 81 83 84 86 88 90 92 93 96 97 98 102 103 104 105 107 108 109 110 111 112 113 114 115 117 118 121 122 123 124 127 130 131 133 134 136 138 141 143 144 146 149 150 156 157 158 159 160 161 162 164 166 168 169 170 171 174 176 177 182 183 184 188 191 195 196 200 204 206 207 # 25460 difference c a 211 0 0 2 3 5 7 9 10 11 13 15 16 18 22 23 24 25 27 29 31 32 34 38 41 43 44 47 48 52 55 58 65 67 76 77 79 81 83 84 86 88 90 92 93 96 97 98 102 103 104 105 107 108 109 110 111 112 113 114 115 117 118 121 122 123 124 127 130 131 133 134 136 138 141 143 144 146 149 150 156 157 158 159 160 161 162 164 166 168 169 170 171 174 176 177 182 183 184 188 191 195 196 200 204 206 207 b 211 1 1 f # 25461 difference c a 211 0 0 0 2 3 6 7 14 17 18 19 20 25 28 30 31 32 33 36 38 40 44 46 47 49 50 53 54 55 56 57 59 61 64 65 66 67 69 70 72 75 76 78 79 80 85 86 88 90 94 95 97 98 99 101 105 107 108 109 110 111 115 122 123 124 125 126 131 137 140 144 147 148 152 153 154 156 157 158 161 165 166 167 170 172 175 176 177 178 181 182 183 184 185 187 190 191 195 196 200 202 203 204 208 210 b 211 0 0 0 2 3 6 7 14 17 18 19 20 25 28 30 31 32 33 36 38 40 44 46 47 49 50 53 54 55 56 57 59 61 64 65 66 67 69 70 72 75 76 78 79 80 85 86 88 90 94 95 97 98 99 101 105 107 108 109 110 111 115 122 123 124 125 126 131 137 140 144 147 148 152 153 154 156 157 158 161 165 166 167 170 172 175 176 177 178 181 182 183 184 185 187 190 191 195 196 200 202 203 204 208 210 # 25462 difference c a 211 0 0 0 2 3 6 7 14 17 18 19 20 25 28 30 31 32 33 36 38 40 44 46 47 49 50 53 54 55 56 57 59 61 64 65 66 67 69 70 72 75 76 78 79 80 85 86 88 90 94 95 97 98 99 101 105 107 108 109 110 111 115 122 123 124 125 126 131 137 140 144 147 148 152 153 154 156 157 158 161 165 166 167 170 172 175 176 177 178 181 182 183 184 185 187 190 191 195 196 200 202 203 204 208 210 b 211 1 1 2 6 7 8 9 10 11 14 15 19 20 21 23 24 25 28 31 32 33 35 37 38 40 41 49 52 53 58 60 61 63 64 66 69 70 72 74 75 77 79 80 81 85 86 87 89 92 94 95 96 97 102 105 107 108 109 110 114 115 117 118 120 122 124 125 127 131 132 136 139 143 144 146 147 149 151 152 155 156 157 161 163 164 165 167 170 172 173 177 180 181 183 185 188 189 190 191 192 194 195 196 198 200 202 205 206 207 208 # 25463 difference c a 211 0 1 e b 211 0 1 e # 25464 difference c a 211 0 1 e b 211 0 0 e # 25465 difference c a 211 0 1 e b 211 0 1 e # 25466 difference c a 211 0 1 e b 211 0 0 f # 25467 difference c a 211 0 1 e b 211 0 1 e # 25468 difference c a 211 0 1 e b 211 0 0 0 2 4 5 6 7 9 10 12 13 16 17 21 22 23 25 26 27 28 31 32 33 35 36 38 42 43 48 49 50 53 55 56 58 59 60 61 63 64 65 66 67 68 70 72 73 76 77 78 79 81 83 85 86 90 100 103 104 105 107 110 111 112 114 117 118 119 121 123 125 130 131 132 134 135 136 137 138 141 146 147 150 158 160 161 163 164 167 172 173 174 178 179 180 181 184 186 188 189 190 191 194 199 201 204 205 206 209 # 25469 difference c a 211 0 1 f b 211 0 1 f # 25470 difference c a 211 0 1 f b 211 0 0 e # 25471 difference c a 211 0 1 f b 211 0 1 f # 25472 difference c a 211 0 1 f b 211 0 0 f # 25473 difference c a 211 0 1 f b 211 0 1 f # 25474 difference c a 211 0 1 f b 211 0 0 3 5 7 8 11 12 13 14 17 18 19 21 23 24 26 28 32 33 34 36 39 40 41 42 45 46 47 48 50 53 55 57 59 61 64 66 67 68 70 72 73 74 77 81 84 85 88 89 94 96 97 98 100 101 102 103 105 107 108 109 111 112 113 115 117 118 120 124 128 130 131 133 134 135 136 138 139 141 142 143 144 146 149 151 152 153 155 157 168 169 170 171 172 173 174 175 176 177 178 187 190 192 194 195 204 206 207 208 209 # 25475 difference c a 211 0 1 3 4 5 7 9 10 11 13 14 17 18 19 21 22 24 27 31 32 33 34 35 36 37 38 39 40 42 46 47 50 51 53 56 57 61 62 65 68 69 73 74 75 78 79 80 81 82 85 86 88 90 91 93 95 98 102 103 106 107 108 109 110 111 112 118 120 126 127 128 129 130 133 141 145 147 152 155 156 158 159 161 163 165 167 170 171 175 176 177 178 180 183 184 185 186 187 190 191 194 195 197 199 202 203 204 205 206 207 208 209 210 b 211 0 1 3 4 5 7 9 10 11 13 14 17 18 19 21 22 24 27 31 32 33 34 35 36 37 38 39 40 42 46 47 50 51 53 56 57 61 62 65 68 69 73 74 75 78 79 80 81 82 85 86 88 90 91 93 95 98 102 103 106 107 108 109 110 111 112 118 120 126 127 128 129 130 133 141 145 147 152 155 156 158 159 161 163 165 167 170 171 175 176 177 178 180 183 184 185 186 187 190 191 194 195 197 199 202 203 204 205 206 207 208 209 210 # 25476 difference c a 211 0 1 3 4 5 7 9 10 11 13 14 17 18 19 21 22 24 27 31 32 33 34 35 36 37 38 39 40 42 46 47 50 51 53 56 57 61 62 65 68 69 73 74 75 78 79 80 81 82 85 86 88 90 91 93 95 98 102 103 106 107 108 109 110 111 112 118 120 126 127 128 129 130 133 141 145 147 152 155 156 158 159 161 163 165 167 170 171 175 176 177 178 180 183 184 185 186 187 190 191 194 195 197 199 202 203 204 205 206 207 208 209 210 b 211 0 0 e # 25477 difference c a 211 0 1 0 4 7 8 9 11 12 13 14 15 16 17 19 21 31 33 37 41 45 48 51 53 55 58 60 64 65 66 68 69 72 73 74 76 77 78 81 83 84 85 87 91 92 93 95 96 97 98 99 100 102 103 105 106 107 108 109 112 113 114 116 119 120 121 122 123 124 127 130 132 133 134 137 140 141 144 146 148 151 154 156 159 160 163 164 166 170 171 172 175 176 179 180 181 182 186 187 188 190 192 195 199 201 202 207 208 210 b 211 0 1 0 4 7 8 9 11 12 13 14 15 16 17 19 21 31 33 37 41 45 48 51 53 55 58 60 64 65 66 68 69 72 73 74 76 77 78 81 83 84 85 87 91 92 93 95 96 97 98 99 100 102 103 105 106 107 108 109 112 113 114 116 119 120 121 122 123 124 127 130 132 133 134 137 140 141 144 146 148 151 154 156 159 160 163 164 166 170 171 172 175 176 179 180 181 182 186 187 188 190 192 195 199 201 202 207 208 210 # 25478 difference c a 211 0 1 0 4 7 8 9 11 12 13 14 15 16 17 19 21 31 33 37 41 45 48 51 53 55 58 60 64 65 66 68 69 72 73 74 76 77 78 81 83 84 85 87 91 92 93 95 96 97 98 99 100 102 103 105 106 107 108 109 112 113 114 116 119 120 121 122 123 124 127 130 132 133 134 137 140 141 144 146 148 151 154 156 159 160 163 164 166 170 171 172 175 176 179 180 181 182 186 187 188 190 192 195 199 201 202 207 208 210 b 211 0 0 f # 25479 difference c a 211 0 1 0 5 8 9 13 17 19 22 23 24 25 26 27 28 32 33 34 36 37 38 39 40 42 44 49 53 56 58 59 60 65 66 68 71 72 74 75 76 78 79 83 85 88 90 91 92 97 98 101 102 105 106 107 109 110 111 114 118 121 122 124 131 134 137 139 140 142 144 145 146 151 154 156 159 160 161 162 163 165 167 168 169 170 171 173 174 176 177 178 182 184 185 186 195 196 197 198 199 200 201 204 206 207 210 b 211 0 1 0 5 8 9 13 17 19 22 23 24 25 26 27 28 32 33 34 36 37 38 39 40 42 44 49 53 56 58 59 60 65 66 68 71 72 74 75 76 78 79 83 85 88 90 91 92 97 98 101 102 105 106 107 109 110 111 114 118 121 122 124 131 134 137 139 140 142 144 145 146 151 154 156 159 160 161 162 163 165 167 168 169 170 171 173 174 176 177 178 182 184 185 186 195 196 197 198 199 200 201 204 206 207 210 # 25480 difference c a 211 0 1 0 5 8 9 13 17 19 22 23 24 25 26 27 28 32 33 34 36 37 38 39 40 42 44 49 53 56 58 59 60 65 66 68 71 72 74 75 76 78 79 83 85 88 90 91 92 97 98 101 102 105 106 107 109 110 111 114 118 121 122 124 131 134 137 139 140 142 144 145 146 151 154 156 159 160 161 162 163 165 167 168 169 170 171 173 174 176 177 178 182 184 185 186 195 196 197 198 199 200 201 204 206 207 210 b 211 0 0 1 2 3 5 6 7 9 11 13 14 15 16 17 18 22 23 27 28 29 30 32 33 36 37 40 41 48 49 50 53 55 57 58 59 60 61 64 66 67 69 72 74 76 77 79 80 84 89 91 92 96 102 103 104 105 107 108 109 111 112 113 115 124 125 126 127 129 137 139 141 142 145 147 149 151 153 156 157 159 160 161 165 166 168 172 174 179 180 182 185 187 188 189 190 191 195 200 201 203 204 210 # 25481 difference c a 211 0 1 e b 211 0 1 e # 25482 difference c a 211 0 1 e b 211 0 1 e # 25483 difference c a 211 0 1 e b 211 0 1 e # 25484 difference c a 211 0 1 e b 211 0 1 f # 25485 difference c a 211 0 1 e b 211 0 1 e # 25486 difference c a 211 0 1 e b 211 0 1 1 2 3 5 8 9 11 13 17 22 28 29 32 34 36 39 41 43 45 46 47 51 52 55 57 60 61 63 66 68 70 71 74 75 77 79 81 82 83 84 85 86 88 90 95 96 98 100 101 103 106 107 108 112 115 119 120 125 126 128 129 130 131 132 134 140 141 142 143 144 145 146 151 153 155 161 165 166 167 169 172 173 174 175 176 177 178 180 184 188 189 190 191 192 195 197 198 199 200 201 202 203 204 205 207 208 # 25487 difference c a 211 0 1 f b 211 0 1 f # 25488 difference c a 211 0 1 f b 211 0 1 e # 25489 difference c a 211 0 1 f b 211 0 1 f # 25490 difference c a 211 0 1 f b 211 0 1 f # 25491 difference c a 211 0 1 f b 211 0 1 f # 25492 difference c a 211 0 1 f b 211 0 1 0 1 4 5 6 8 11 14 16 17 18 20 21 23 24 27 29 31 33 36 37 41 43 46 47 49 52 53 54 55 58 59 60 62 64 65 66 67 68 72 76 79 81 84 90 93 94 96 97 99 100 103 104 107 108 110 111 113 115 119 120 124 126 127 128 129 131 133 134 139 140 141 142 143 144 146 148 150 154 161 163 167 168 169 170 172 173 175 176 178 179 180 181 185 186 187 189 191 192 193 194 198 199 201 203 205 206 209 # 25493 difference c a 211 0 1 1 4 7 8 10 11 12 13 14 16 19 20 21 23 27 28 32 33 34 35 37 38 41 48 49 52 53 57 60 62 63 66 69 70 71 73 74 75 79 81 83 84 85 90 92 93 98 99 103 106 107 108 110 116 118 120 121 122 123 127 128 129 133 134 135 137 138 140 142 144 145 147 152 156 157 159 160 161 162 164 165 168 169 170 171 174 178 179 180 183 185 188 190 193 194 195 196 197 199 200 201 206 207 208 209 210 b 211 0 1 1 4 7 8 10 11 12 13 14 16 19 20 21 23 27 28 32 33 34 35 37 38 41 48 49 52 53 57 60 62 63 66 69 70 71 73 74 75 79 81 83 84 85 90 92 93 98 99 103 106 107 108 110 116 118 120 121 122 123 127 128 129 133 134 135 137 138 140 142 144 145 147 152 156 157 159 160 161 162 164 165 168 169 170 171 174 178 179 180 183 185 188 190 193 194 195 196 197 199 200 201 206 207 208 209 210 # 25494 difference c a 211 0 1 1 4 7 8 10 11 12 13 14 16 19 20 21 23 27 28 32 33 34 35 37 38 41 48 49 52 53 57 60 62 63 66 69 70 71 73 74 75 79 81 83 84 85 90 92 93 98 99 103 106 107 108 110 116 118 120 121 122 123 127 128 129 133 134 135 137 138 140 142 144 145 147 152 156 157 159 160 161 162 164 165 168 169 170 171 174 178 179 180 183 185 188 190 193 194 195 196 197 199 200 201 206 207 208 209 210 b 211 0 1 e # 25495 difference c a 211 0 1 0 1 6 7 10 11 13 16 18 21 22 23 26 33 34 35 38 40 45 46 47 51 54 56 58 60 61 62 64 67 68 71 72 73 74 75 77 78 79 84 86 87 88 89 91 92 96 97 99 100 101 103 104 106 109 110 114 116 117 120 121 124 126 127 133 134 137 139 143 144 146 147 151 152 155 156 158 160 166 167 171 172 173 175 176 180 181 183 185 186 192 193 194 195 198 199 200 204 205 207 209 b 211 0 1 0 1 6 7 10 11 13 16 18 21 22 23 26 33 34 35 38 40 45 46 47 51 54 56 58 60 61 62 64 67 68 71 72 73 74 75 77 78 79 84 86 87 88 89 91 92 96 97 99 100 101 103 104 106 109 110 114 116 117 120 121 124 126 127 133 134 137 139 143 144 146 147 151 152 155 156 158 160 166 167 171 172 173 175 176 180 181 183 185 186 192 193 194 195 198 199 200 204 205 207 209 # 25496 difference c a 211 0 1 0 1 6 7 10 11 13 16 18 21 22 23 26 33 34 35 38 40 45 46 47 51 54 56 58 60 61 62 64 67 68 71 72 73 74 75 77 78 79 84 86 87 88 89 91 92 96 97 99 100 101 103 104 106 109 110 114 116 117 120 121 124 126 127 133 134 137 139 143 144 146 147 151 152 155 156 158 160 166 167 171 172 173 175 176 180 181 183 185 186 192 193 194 195 198 199 200 204 205 207 209 b 211 0 1 f # 25497 difference c a 211 0 1 3 4 6 7 11 12 15 16 17 18 19 20 21 24 27 28 31 32 33 34 36 37 40 41 43 45 46 48 49 52 54 55 56 58 61 64 66 67 75 79 80 83 84 87 91 93 95 97 98 101 102 105 107 110 112 114 115 118 119 120 121 122 123 124 126 127 129 132 134 138 140 141 142 143 144 145 146 151 154 156 157 159 160 161 164 166 168 169 170 177 178 183 184 187 190 194 196 202 203 204 207 b 211 0 1 3 4 6 7 11 12 15 16 17 18 19 20 21 24 27 28 31 32 33 34 36 37 40 41 43 45 46 48 49 52 54 55 56 58 61 64 66 67 75 79 80 83 84 87 91 93 95 97 98 101 102 105 107 110 112 114 115 118 119 120 121 122 123 124 126 127 129 132 134 138 140 141 142 143 144 145 146 151 154 156 157 159 160 161 164 166 168 169 170 177 178 183 184 187 190 194 196 202 203 204 207 # 25498 difference c a 211 0 1 3 4 6 7 11 12 15 16 17 18 19 20 21 24 27 28 31 32 33 34 36 37 40 41 43 45 46 48 49 52 54 55 56 58 61 64 66 67 75 79 80 83 84 87 91 93 95 97 98 101 102 105 107 110 112 114 115 118 119 120 121 122 123 124 126 127 129 132 134 138 140 141 142 143 144 145 146 151 154 156 157 159 160 161 164 166 168 169 170 177 178 183 184 187 190 194 196 202 203 204 207 b 211 0 1 0 1 2 3 4 6 8 12 14 15 19 20 21 22 25 26 29 30 31 32 33 34 37 38 42 43 44 45 46 47 50 51 55 59 62 63 67 72 73 76 79 80 82 84 86 88 90 91 93 94 95 100 101 102 103 104 108 109 111 112 115 116 118 119 121 122 123 124 125 126 127 132 134 135 136 139 140 141 142 143 146 149 150 151 152 153 154 157 159 160 161 162 163 165 166 169 172 175 176 177 180 184 186 188 191 194 195 197 200 201 202 205 208 209 # 25499 difference c a 211 0 1 e b 211 0 1 e # 25500 difference c a 211 0 1 e b 211 1 0 e # 25501 difference c a 211 0 1 e b 211 0 1 e # 25502 difference c a 211 0 1 e b 211 1 0 f # 25503 difference c a 211 0 1 e b 211 0 1 e # 25504 difference c a 211 0 1 e b 211 1 0 0 1 2 4 5 8 9 10 11 13 14 17 18 19 21 23 30 33 36 37 38 39 42 43 45 46 47 49 51 53 54 55 59 60 63 64 65 67 69 71 74 75 76 77 78 83 86 87 88 89 90 91 93 94 96 97 98 100 104 105 107 108 113 115 117 120 122 125 127 128 131 132 135 137 140 141 145 147 148 149 150 151 152 153 154 156 160 163 164 166 170 172 174 176 177 179 180 183 186 187 188 191 192 193 194 195 197 200 201 202 203 209 210 # 25505 difference c a 211 0 1 f b 211 0 1 f # 25506 difference c a 211 0 1 f b 211 1 0 e # 25507 difference c a 211 0 1 f b 211 0 1 f # 25508 difference c a 211 0 1 f b 211 1 0 f # 25509 difference c a 211 0 1 f b 211 0 1 f # 25510 difference c a 211 0 1 f b 211 1 0 1 3 5 6 8 10 11 12 14 15 16 17 18 20 21 22 23 28 29 32 33 36 39 42 44 45 48 50 53 58 65 66 68 74 78 82 83 85 90 91 92 96 98 99 103 104 108 109 114 115 119 121 122 131 133 134 139 141 143 149 151 152 153 155 157 159 160 162 165 166 168 173 174 176 178 183 185 186 192 193 194 195 196 197 199 200 201 202 204 205 206 207 209 # 25511 difference c a 211 0 1 0 1 2 3 6 7 8 9 10 12 13 15 16 24 27 28 29 30 31 32 33 38 41 42 43 44 46 47 49 51 53 58 61 62 64 66 67 68 69 71 72 73 74 75 77 79 80 81 83 85 87 90 91 93 95 97 98 100 108 109 111 113 114 115 117 118 119 121 124 125 128 132 133 134 135 136 139 140 141 142 147 150 151 152 155 156 157 158 159 163 166 173 174 175 178 179 180 182 183 184 185 187 188 191 192 193 194 196 197 201 202 203 204 205 b 211 0 1 0 1 2 3 6 7 8 9 10 12 13 15 16 24 27 28 29 30 31 32 33 38 41 42 43 44 46 47 49 51 53 58 61 62 64 66 67 68 69 71 72 73 74 75 77 79 80 81 83 85 87 90 91 93 95 97 98 100 108 109 111 113 114 115 117 118 119 121 124 125 128 132 133 134 135 136 139 140 141 142 147 150 151 152 155 156 157 158 159 163 166 173 174 175 178 179 180 182 183 184 185 187 188 191 192 193 194 196 197 201 202 203 204 205 # 25512 difference c a 211 0 1 0 1 2 3 6 7 8 9 10 12 13 15 16 24 27 28 29 30 31 32 33 38 41 42 43 44 46 47 49 51 53 58 61 62 64 66 67 68 69 71 72 73 74 75 77 79 80 81 83 85 87 90 91 93 95 97 98 100 108 109 111 113 114 115 117 118 119 121 124 125 128 132 133 134 135 136 139 140 141 142 147 150 151 152 155 156 157 158 159 163 166 173 174 175 178 179 180 182 183 184 185 187 188 191 192 193 194 196 197 201 202 203 204 205 b 211 1 0 e # 25513 difference c a 211 0 1 1 2 3 5 8 9 10 11 12 14 17 18 19 22 23 25 29 30 31 33 34 35 36 41 45 47 48 50 51 52 53 54 55 56 63 64 65 66 67 69 72 74 88 89 90 91 92 94 95 98 101 102 105 106 107 108 112 114 116 117 118 120 121 123 126 128 130 133 134 135 136 137 138 139 144 145 146 148 149 150 151 152 155 156 160 162 170 174 178 181 182 183 186 187 188 192 194 196 197 198 199 201 203 204 206 208 209 b 211 0 1 1 2 3 5 8 9 10 11 12 14 17 18 19 22 23 25 29 30 31 33 34 35 36 41 45 47 48 50 51 52 53 54 55 56 63 64 65 66 67 69 72 74 88 89 90 91 92 94 95 98 101 102 105 106 107 108 112 114 116 117 118 120 121 123 126 128 130 133 134 135 136 137 138 139 144 145 146 148 149 150 151 152 155 156 160 162 170 174 178 181 182 183 186 187 188 192 194 196 197 198 199 201 203 204 206 208 209 # 25514 difference c a 211 0 1 1 2 3 5 8 9 10 11 12 14 17 18 19 22 23 25 29 30 31 33 34 35 36 41 45 47 48 50 51 52 53 54 55 56 63 64 65 66 67 69 72 74 88 89 90 91 92 94 95 98 101 102 105 106 107 108 112 114 116 117 118 120 121 123 126 128 130 133 134 135 136 137 138 139 144 145 146 148 149 150 151 152 155 156 160 162 170 174 178 181 182 183 186 187 188 192 194 196 197 198 199 201 203 204 206 208 209 b 211 1 0 f # 25515 difference c a 211 0 1 0 3 4 5 6 7 8 14 15 17 18 22 23 25 26 27 28 29 31 33 34 35 36 37 38 41 42 43 45 46 47 48 50 51 52 53 54 56 57 60 63 65 66 67 68 69 71 72 74 76 78 79 80 81 82 83 84 85 88 89 90 99 101 102 103 105 110 113 115 117 122 123 124 127 128 129 130 131 132 133 134 135 136 139 143 144 146 150 151 152 156 157 168 172 174 175 176 177 180 181 182 183 189 190 191 194 195 196 198 200 202 204 205 207 210 b 211 0 1 0 3 4 5 6 7 8 14 15 17 18 22 23 25 26 27 28 29 31 33 34 35 36 37 38 41 42 43 45 46 47 48 50 51 52 53 54 56 57 60 63 65 66 67 68 69 71 72 74 76 78 79 80 81 82 83 84 85 88 89 90 99 101 102 103 105 110 113 115 117 122 123 124 127 128 129 130 131 132 133 134 135 136 139 143 144 146 150 151 152 156 157 168 172 174 175 176 177 180 181 182 183 189 190 191 194 195 196 198 200 202 204 205 207 210 # 25516 difference c a 211 0 1 0 3 4 5 6 7 8 14 15 17 18 22 23 25 26 27 28 29 31 33 34 35 36 37 38 41 42 43 45 46 47 48 50 51 52 53 54 56 57 60 63 65 66 67 68 69 71 72 74 76 78 79 80 81 82 83 84 85 88 89 90 99 101 102 103 105 110 113 115 117 122 123 124 127 128 129 130 131 132 133 134 135 136 139 143 144 146 150 151 152 156 157 168 172 174 175 176 177 180 181 182 183 189 190 191 194 195 196 198 200 202 204 205 207 210 b 211 1 0 2 4 8 10 16 17 23 25 27 29 30 31 33 37 40 42 44 46 47 48 49 55 57 58 59 61 62 63 64 66 68 71 72 75 81 82 83 87 90 91 92 93 95 96 98 99 100 102 103 104 106 108 110 111 112 113 114 118 121 125 132 136 137 138 139 142 148 150 154 155 156 157 161 163 165 168 170 171 172 173 175 177 179 184 185 187 188 190 197 198 199 200 201 202 203 206 207 208 210 # 25517 difference c a 211 0 1 e b 211 0 1 e # 25518 difference c a 211 0 1 e b 211 1 1 e # 25519 difference c a 211 0 1 e b 211 0 1 e # 25520 difference c a 211 0 1 e b 211 1 1 f # 25521 difference c a 211 0 1 e b 211 0 1 e # 25522 difference c a 211 0 1 e b 211 1 1 1 2 3 5 6 8 12 13 16 18 19 21 22 23 26 27 29 30 32 33 36 39 40 41 42 46 48 49 51 54 55 56 57 58 59 60 65 66 67 68 70 71 72 73 77 78 79 80 82 84 85 86 87 88 89 90 94 96 97 99 100 102 103 104 105 108 111 112 114 115 117 118 119 120 123 124 127 129 130 137 141 144 149 151 153 154 158 161 162 163 165 166 167 168 171 176 179 181 182 183 185 187 191 192 193 194 196 197 198 199 202 204 205 206 # 25523 difference c a 211 0 1 f b 211 0 1 f # 25524 difference c a 211 0 1 f b 211 1 1 e # 25525 difference c a 211 0 1 f b 211 0 1 f # 25526 difference c a 211 0 1 f b 211 1 1 f # 25527 difference c a 211 0 1 f b 211 0 1 f # 25528 difference c a 211 0 1 f b 211 1 1 0 1 3 8 11 14 15 18 20 21 22 24 25 26 30 35 36 37 38 39 42 43 44 48 50 51 53 54 55 56 57 61 62 67 68 70 72 74 75 76 79 80 81 82 83 84 85 86 88 90 91 96 97 99 100 102 103 104 105 107 109 110 112 118 119 121 122 123 127 129 130 132 133 134 135 136 143 144 145 147 148 150 153 159 162 164 165 166 167 170 171 172 174 180 182 183 185 187 189 190 191 193 194 196 197 198 201 202 205 206 207 208 210 # 25529 difference c a 211 0 1 0 1 2 3 5 10 11 13 14 15 17 18 19 21 22 23 27 29 30 33 34 35 38 39 41 42 43 44 45 46 48 50 53 54 59 62 63 65 67 71 74 76 79 80 82 85 86 91 92 95 97 98 103 105 109 114 118 119 120 125 127 128 135 137 139 141 143 144 148 150 154 155 158 160 161 162 167 169 170 171 176 177 178 180 181 182 185 187 195 196 197 198 199 201 202 203 207 208 b 211 0 1 0 1 2 3 5 10 11 13 14 15 17 18 19 21 22 23 27 29 30 33 34 35 38 39 41 42 43 44 45 46 48 50 53 54 59 62 63 65 67 71 74 76 79 80 82 85 86 91 92 95 97 98 103 105 109 114 118 119 120 125 127 128 135 137 139 141 143 144 148 150 154 155 158 160 161 162 167 169 170 171 176 177 178 180 181 182 185 187 195 196 197 198 199 201 202 203 207 208 # 25530 difference c a 211 0 1 0 1 2 3 5 10 11 13 14 15 17 18 19 21 22 23 27 29 30 33 34 35 38 39 41 42 43 44 45 46 48 50 53 54 59 62 63 65 67 71 74 76 79 80 82 85 86 91 92 95 97 98 103 105 109 114 118 119 120 125 127 128 135 137 139 141 143 144 148 150 154 155 158 160 161 162 167 169 170 171 176 177 178 180 181 182 185 187 195 196 197 198 199 201 202 203 207 208 b 211 1 1 e # 25531 difference c a 211 0 1 0 1 6 7 8 14 18 20 21 22 23 24 27 29 32 33 34 35 37 38 40 42 44 46 47 48 49 51 54 59 61 62 63 64 65 66 69 70 73 74 75 77 78 83 87 88 89 90 91 92 93 94 95 97 99 100 110 111 113 114 115 118 119 121 122 125 127 128 129 130 131 136 138 140 141 142 144 145 147 148 150 152 153 156 157 159 162 163 164 167 168 172 174 175 176 177 178 179 181 184 185 186 187 190 191 192 193 194 195 196 197 198 199 201 205 206 208 209 b 211 0 1 0 1 6 7 8 14 18 20 21 22 23 24 27 29 32 33 34 35 37 38 40 42 44 46 47 48 49 51 54 59 61 62 63 64 65 66 69 70 73 74 75 77 78 83 87 88 89 90 91 92 93 94 95 97 99 100 110 111 113 114 115 118 119 121 122 125 127 128 129 130 131 136 138 140 141 142 144 145 147 148 150 152 153 156 157 159 162 163 164 167 168 172 174 175 176 177 178 179 181 184 185 186 187 190 191 192 193 194 195 196 197 198 199 201 205 206 208 209 # 25532 difference c a 211 0 1 0 1 6 7 8 14 18 20 21 22 23 24 27 29 32 33 34 35 37 38 40 42 44 46 47 48 49 51 54 59 61 62 63 64 65 66 69 70 73 74 75 77 78 83 87 88 89 90 91 92 93 94 95 97 99 100 110 111 113 114 115 118 119 121 122 125 127 128 129 130 131 136 138 140 141 142 144 145 147 148 150 152 153 156 157 159 162 163 164 167 168 172 174 175 176 177 178 179 181 184 185 186 187 190 191 192 193 194 195 196 197 198 199 201 205 206 208 209 b 211 1 1 f # 25533 difference c a 211 0 1 7 8 10 11 15 18 20 21 23 24 26 29 31 33 39 40 42 44 48 49 52 53 55 58 59 62 65 66 67 70 72 74 76 77 78 80 82 83 87 88 90 92 94 97 99 101 103 110 113 114 115 120 123 124 128 129 132 133 136 137 140 144 148 149 151 152 153 154 155 158 163 164 165 167 169 172 173 174 175 180 181 183 184 186 187 188 189 191 192 193 194 195 198 199 200 203 204 206 208 b 211 0 1 7 8 10 11 15 18 20 21 23 24 26 29 31 33 39 40 42 44 48 49 52 53 55 58 59 62 65 66 67 70 72 74 76 77 78 80 82 83 87 88 90 92 94 97 99 101 103 110 113 114 115 120 123 124 128 129 132 133 136 137 140 144 148 149 151 152 153 154 155 158 163 164 165 167 169 172 173 174 175 180 181 183 184 186 187 188 189 191 192 193 194 195 198 199 200 203 204 206 208 # 25534 difference c a 211 0 1 7 8 10 11 15 18 20 21 23 24 26 29 31 33 39 40 42 44 48 49 52 53 55 58 59 62 65 66 67 70 72 74 76 77 78 80 82 83 87 88 90 92 94 97 99 101 103 110 113 114 115 120 123 124 128 129 132 133 136 137 140 144 148 149 151 152 153 154 155 158 163 164 165 167 169 172 173 174 175 180 181 183 184 186 187 188 189 191 192 193 194 195 198 199 200 203 204 206 208 b 211 1 1 0 1 2 3 4 5 7 8 10 11 13 14 17 20 22 23 26 27 28 31 33 35 36 37 38 39 41 46 47 49 50 53 55 56 58 59 61 62 63 64 66 67 70 74 75 77 79 80 82 89 91 92 93 94 95 98 100 101 102 104 105 106 108 112 114 117 119 120 121 122 123 124 125 126 127 129 132 135 140 142 143 144 149 156 161 165 166 167 170 172 173 177 178 179 181 183 185 191 193 194 196 197 202 203 204 210 # 25535 difference c a 211 1 0 e b 211 1 0 e # 25536 difference c a 211 1 0 e b 211 0 0 e # 25537 difference c a 211 1 0 e b 211 1 0 e # 25538 difference c a 211 1 0 e b 211 0 0 f # 25539 difference c a 211 1 0 e b 211 1 0 e # 25540 difference c a 211 1 0 e b 211 0 0 0 3 5 6 7 11 12 14 17 19 21 22 24 26 27 29 30 34 35 37 41 44 49 50 51 52 53 54 56 57 60 62 63 64 65 66 67 68 72 73 75 77 79 80 82 83 84 85 87 89 95 96 97 98 99 102 107 110 112 113 115 118 119 131 132 134 136 140 142 145 147 149 150 151 153 155 157 159 162 164 165 166 168 170 171 172 175 178 179 182 183 185 187 188 189 190 191 193 195 197 203 204 206 208 209 # 25541 difference c a 211 1 0 f b 211 1 0 f # 25542 difference c a 211 1 0 f b 211 0 0 e # 25543 difference c a 211 1 0 f b 211 1 0 f # 25544 difference c a 211 1 0 f b 211 0 0 f # 25545 difference c a 211 1 0 f b 211 1 0 f # 25546 difference c a 211 1 0 f b 211 0 0 2 4 5 6 7 8 10 11 12 14 15 16 17 22 29 30 31 33 34 35 36 37 38 43 44 46 47 49 54 55 57 59 60 61 64 69 70 79 81 83 85 87 88 89 91 92 93 98 99 101 103 105 107 108 109 112 113 114 116 118 119 122 123 125 127 130 131 133 134 135 136 139 141 142 144 145 146 149 151 153 154 155 156 158 160 166 168 170 173 174 176 177 178 181 183 184 185 187 191 192 193 200 202 205 208 210 # 25547 difference c a 211 1 0 3 9 10 13 14 15 17 19 20 21 22 23 25 27 29 30 31 32 33 34 39 40 44 45 48 50 51 53 54 59 60 61 62 63 64 68 69 70 71 72 75 80 82 84 85 86 88 89 91 92 94 95 96 100 103 106 107 108 110 111 113 116 117 118 119 120 122 123 124 125 126 128 130 131 134 135 136 137 138 139 141 142 143 144 145 148 151 152 153 154 156 157 158 159 161 162 163 165 166 167 168 170 171 174 175 177 181 183 184 191 193 195 196 198 200 203 204 206 210 b 211 1 0 3 9 10 13 14 15 17 19 20 21 22 23 25 27 29 30 31 32 33 34 39 40 44 45 48 50 51 53 54 59 60 61 62 63 64 68 69 70 71 72 75 80 82 84 85 86 88 89 91 92 94 95 96 100 103 106 107 108 110 111 113 116 117 118 119 120 122 123 124 125 126 128 130 131 134 135 136 137 138 139 141 142 143 144 145 148 151 152 153 154 156 157 158 159 161 162 163 165 166 167 168 170 171 174 175 177 181 183 184 191 193 195 196 198 200 203 204 206 210 # 25548 difference c a 211 1 0 3 9 10 13 14 15 17 19 20 21 22 23 25 27 29 30 31 32 33 34 39 40 44 45 48 50 51 53 54 59 60 61 62 63 64 68 69 70 71 72 75 80 82 84 85 86 88 89 91 92 94 95 96 100 103 106 107 108 110 111 113 116 117 118 119 120 122 123 124 125 126 128 130 131 134 135 136 137 138 139 141 142 143 144 145 148 151 152 153 154 156 157 158 159 161 162 163 165 166 167 168 170 171 174 175 177 181 183 184 191 193 195 196 198 200 203 204 206 210 b 211 0 0 e # 25549 difference c a 211 1 0 4 5 6 10 12 13 14 15 17 19 20 21 23 24 25 26 28 33 34 36 37 38 41 42 47 49 50 52 54 55 57 60 61 62 64 65 66 67 68 69 72 73 74 77 79 80 84 87 88 91 93 95 96 98 101 102 104 109 112 113 114 115 116 117 118 119 121 122 123 124 126 127 128 133 134 138 139 140 143 145 146 148 156 157 159 163 165 167 170 172 177 181 182 183 184 185 187 188 189 193 195 196 197 198 199 201 204 206 b 211 1 0 4 5 6 10 12 13 14 15 17 19 20 21 23 24 25 26 28 33 34 36 37 38 41 42 47 49 50 52 54 55 57 60 61 62 64 65 66 67 68 69 72 73 74 77 79 80 84 87 88 91 93 95 96 98 101 102 104 109 112 113 114 115 116 117 118 119 121 122 123 124 126 127 128 133 134 138 139 140 143 145 146 148 156 157 159 163 165 167 170 172 177 181 182 183 184 185 187 188 189 193 195 196 197 198 199 201 204 206 # 25550 difference c a 211 1 0 4 5 6 10 12 13 14 15 17 19 20 21 23 24 25 26 28 33 34 36 37 38 41 42 47 49 50 52 54 55 57 60 61 62 64 65 66 67 68 69 72 73 74 77 79 80 84 87 88 91 93 95 96 98 101 102 104 109 112 113 114 115 116 117 118 119 121 122 123 124 126 127 128 133 134 138 139 140 143 145 146 148 156 157 159 163 165 167 170 172 177 181 182 183 184 185 187 188 189 193 195 196 197 198 199 201 204 206 b 211 0 0 f # 25551 difference c a 211 1 0 0 1 3 4 7 11 13 16 18 19 20 21 22 24 26 27 28 31 33 34 36 38 40 42 47 50 53 55 58 60 63 68 74 75 76 78 80 83 85 86 89 90 93 95 98 99 100 104 106 107 109 110 118 119 121 123 124 127 128 130 131 132 134 135 136 137 138 140 141 143 145 147 148 150 153 154 155 158 160 161 163 166 169 171 173 174 175 176 179 180 182 185 187 195 196 198 199 202 203 205 209 210 b 211 1 0 0 1 3 4 7 11 13 16 18 19 20 21 22 24 26 27 28 31 33 34 36 38 40 42 47 50 53 55 58 60 63 68 74 75 76 78 80 83 85 86 89 90 93 95 98 99 100 104 106 107 109 110 118 119 121 123 124 127 128 130 131 132 134 135 136 137 138 140 141 143 145 147 148 150 153 154 155 158 160 161 163 166 169 171 173 174 175 176 179 180 182 185 187 195 196 198 199 202 203 205 209 210 # 25552 difference c a 211 1 0 0 1 3 4 7 11 13 16 18 19 20 21 22 24 26 27 28 31 33 34 36 38 40 42 47 50 53 55 58 60 63 68 74 75 76 78 80 83 85 86 89 90 93 95 98 99 100 104 106 107 109 110 118 119 121 123 124 127 128 130 131 132 134 135 136 137 138 140 141 143 145 147 148 150 153 154 155 158 160 161 163 166 169 171 173 174 175 176 179 180 182 185 187 195 196 198 199 202 203 205 209 210 b 211 0 0 2 3 5 6 11 13 16 17 19 21 22 23 25 31 32 39 40 41 42 44 47 49 51 54 55 56 60 61 62 66 67 68 70 71 73 74 78 79 83 84 87 89 90 93 94 95 100 103 104 108 110 111 112 114 116 120 127 128 129 132 135 136 137 140 143 144 150 152 154 155 158 160 161 162 163 166 168 170 171 174 177 178 179 184 188 189 191 192 194 197 198 200 204 206 # 25553 difference c a 211 1 0 e b 211 1 0 e # 25554 difference c a 211 1 0 e b 211 0 1 e # 25555 difference c a 211 1 0 e b 211 1 0 e # 25556 difference c a 211 1 0 e b 211 0 1 f # 25557 difference c a 211 1 0 e b 211 1 0 e # 25558 difference c a 211 1 0 e b 211 0 1 0 1 2 3 4 7 8 11 13 15 19 21 23 24 27 28 29 32 33 35 37 38 40 42 44 46 48 50 51 54 56 62 66 67 69 70 72 73 75 80 85 86 89 90 93 94 95 97 98 101 102 104 108 109 111 112 113 116 117 118 119 120 128 130 132 133 134 135 136 138 139 145 146 147 148 150 151 152 156 157 158 159 160 161 163 166 168 169 171 173 177 182 184 186 187 188 191 193 194 195 196 197 199 202 203 205 207 208 209 210 # 25559 difference c a 211 1 0 f b 211 1 0 f # 25560 difference c a 211 1 0 f b 211 0 1 e # 25561 difference c a 211 1 0 f b 211 1 0 f # 25562 difference c a 211 1 0 f b 211 0 1 f # 25563 difference c a 211 1 0 f b 211 1 0 f # 25564 difference c a 211 1 0 f b 211 0 1 2 3 6 7 17 19 21 22 25 27 28 30 33 35 37 38 42 43 45 46 47 48 50 54 55 58 59 61 63 64 66 67 71 72 78 80 81 82 88 89 92 93 97 99 101 105 110 114 116 118 119 122 123 129 131 132 133 134 136 138 140 142 144 145 146 147 148 149 150 153 156 157 158 160 162 163 164 165 166 167 169 170 173 174 181 182 184 185 186 187 188 189 190 193 196 198 200 201 202 204 205 209 210 # 25565 difference c a 211 1 0 1 3 6 9 11 14 19 22 26 28 29 33 35 44 46 47 50 51 52 56 58 59 60 61 62 64 67 69 71 73 75 76 78 80 81 83 86 88 89 90 91 92 93 97 99 101 103 104 105 106 107 108 109 111 115 116 118 119 121 123 124 125 129 130 131 132 134 135 141 142 143 148 150 157 158 159 160 161 162 163 168 169 170 172 173 174 175 180 184 185 186 187 189 190 194 195 196 199 201 204 207 208 b 211 1 0 1 3 6 9 11 14 19 22 26 28 29 33 35 44 46 47 50 51 52 56 58 59 60 61 62 64 67 69 71 73 75 76 78 80 81 83 86 88 89 90 91 92 93 97 99 101 103 104 105 106 107 108 109 111 115 116 118 119 121 123 124 125 129 130 131 132 134 135 141 142 143 148 150 157 158 159 160 161 162 163 168 169 170 172 173 174 175 180 184 185 186 187 189 190 194 195 196 199 201 204 207 208 # 25566 difference c a 211 1 0 1 3 6 9 11 14 19 22 26 28 29 33 35 44 46 47 50 51 52 56 58 59 60 61 62 64 67 69 71 73 75 76 78 80 81 83 86 88 89 90 91 92 93 97 99 101 103 104 105 106 107 108 109 111 115 116 118 119 121 123 124 125 129 130 131 132 134 135 141 142 143 148 150 157 158 159 160 161 162 163 168 169 170 172 173 174 175 180 184 185 186 187 189 190 194 195 196 199 201 204 207 208 b 211 0 1 e # 25567 difference c a 211 1 0 0 1 2 8 9 13 16 17 19 22 26 28 31 32 34 36 38 39 42 43 44 46 47 48 52 54 56 59 60 61 63 67 68 70 71 73 74 76 77 79 81 85 87 89 90 92 94 96 101 103 104 107 108 109 110 113 115 116 117 118 120 122 123 124 125 128 130 136 137 138 139 140 141 142 144 146 147 149 153 155 156 157 159 163 164 165 166 167 168 169 172 174 176 177 182 183 186 190 192 195 196 199 201 203 205 208 209 210 b 211 1 0 0 1 2 8 9 13 16 17 19 22 26 28 31 32 34 36 38 39 42 43 44 46 47 48 52 54 56 59 60 61 63 67 68 70 71 73 74 76 77 79 81 85 87 89 90 92 94 96 101 103 104 107 108 109 110 113 115 116 117 118 120 122 123 124 125 128 130 136 137 138 139 140 141 142 144 146 147 149 153 155 156 157 159 163 164 165 166 167 168 169 172 174 176 177 182 183 186 190 192 195 196 199 201 203 205 208 209 210 # 25568 difference c a 211 1 0 0 1 2 8 9 13 16 17 19 22 26 28 31 32 34 36 38 39 42 43 44 46 47 48 52 54 56 59 60 61 63 67 68 70 71 73 74 76 77 79 81 85 87 89 90 92 94 96 101 103 104 107 108 109 110 113 115 116 117 118 120 122 123 124 125 128 130 136 137 138 139 140 141 142 144 146 147 149 153 155 156 157 159 163 164 165 166 167 168 169 172 174 176 177 182 183 186 190 192 195 196 199 201 203 205 208 209 210 b 211 0 1 f # 25569 difference c a 211 1 0 2 3 4 6 7 8 9 10 12 17 18 19 20 21 23 27 28 30 33 37 40 43 45 47 48 50 51 53 54 55 58 61 63 64 65 68 71 72 73 76 77 78 79 80 81 84 86 87 89 91 93 94 100 101 102 104 106 107 109 110 119 122 123 125 126 127 130 131 133 139 140 142 146 147 148 149 150 153 154 155 156 157 163 165 167 168 169 170 171 173 175 178 181 183 184 187 189 190 191 194 195 196 198 199 201 202 203 207 208 210 b 211 1 0 2 3 4 6 7 8 9 10 12 17 18 19 20 21 23 27 28 30 33 37 40 43 45 47 48 50 51 53 54 55 58 61 63 64 65 68 71 72 73 76 77 78 79 80 81 84 86 87 89 91 93 94 100 101 102 104 106 107 109 110 119 122 123 125 126 127 130 131 133 139 140 142 146 147 148 149 150 153 154 155 156 157 163 165 167 168 169 170 171 173 175 178 181 183 184 187 189 190 191 194 195 196 198 199 201 202 203 207 208 210 # 25570 difference c a 211 1 0 2 3 4 6 7 8 9 10 12 17 18 19 20 21 23 27 28 30 33 37 40 43 45 47 48 50 51 53 54 55 58 61 63 64 65 68 71 72 73 76 77 78 79 80 81 84 86 87 89 91 93 94 100 101 102 104 106 107 109 110 119 122 123 125 126 127 130 131 133 139 140 142 146 147 148 149 150 153 154 155 156 157 163 165 167 168 169 170 171 173 175 178 181 183 184 187 189 190 191 194 195 196 198 199 201 202 203 207 208 210 b 211 0 1 0 1 3 4 5 12 13 15 16 17 18 19 22 24 26 27 28 29 30 31 32 34 35 37 39 41 43 45 46 48 50 52 53 55 56 58 59 62 64 65 66 67 68 70 71 72 73 74 76 77 78 81 82 89 91 94 97 99 101 102 104 105 106 107 108 111 113 115 119 121 123 131 134 137 147 148 153 157 158 159 162 163 164 165 170 171 172 173 180 181 182 184 186 189 193 196 198 200 202 203 207 208 209 # 25571 difference c a 211 1 0 e b 211 1 0 e # 25572 difference c a 211 1 0 e b 211 1 0 e # 25573 difference c a 211 1 0 e b 211 1 0 e # 25574 difference c a 211 1 0 e b 211 1 0 f # 25575 difference c a 211 1 0 e b 211 1 0 e # 25576 difference c a 211 1 0 e b 211 1 0 0 3 5 6 10 11 12 13 14 15 18 19 22 24 25 26 27 28 29 33 36 38 39 40 41 42 45 47 50 51 58 60 62 64 66 67 69 70 74 75 78 81 83 87 88 90 91 93 94 96 97 101 102 103 106 107 108 109 112 115 116 118 119 120 121 126 129 130 131 132 133 134 137 139 140 144 147 148 150 151 152 154 156 157 158 159 160 161 162 163 164 167 170 171 172 175 176 177 178 179 181 184 186 187 189 190 191 192 194 196 197 204 205 208 # 25577 difference c a 211 1 0 f b 211 1 0 f # 25578 difference c a 211 1 0 f b 211 1 0 e # 25579 difference c a 211 1 0 f b 211 1 0 f # 25580 difference c a 211 1 0 f b 211 1 0 f # 25581 difference c a 211 1 0 f b 211 1 0 f # 25582 difference c a 211 1 0 f b 211 1 0 0 2 6 7 9 10 15 20 21 22 24 26 35 38 39 43 44 45 46 47 48 51 54 55 56 57 59 60 61 64 65 69 73 76 77 79 81 84 87 89 90 93 94 96 97 98 99 100 105 106 108 109 110 111 112 115 116 117 120 126 127 129 130 134 135 138 139 141 142 146 150 152 155 158 159 160 161 162 165 166 167 169 170 171 172 173 174 177 178 179 181 182 184 188 191 194 195 196 197 200 202 203 204 205 208 210 # 25583 difference c a 211 1 0 2 3 6 7 10 11 14 17 18 20 21 23 24 29 31 34 36 37 39 40 42 45 46 47 48 51 53 54 58 59 61 62 63 67 70 72 73 74 76 78 79 80 82 84 85 86 89 90 91 92 93 94 95 97 98 101 102 104 107 108 110 111 112 113 115 116 118 121 123 124 126 127 129 131 132 134 135 136 138 139 140 141 142 143 144 147 148 151 153 154 157 160 161 163 164 166 167 168 169 171 172 175 177 178 183 187 196 198 204 205 208 b 211 1 0 2 3 6 7 10 11 14 17 18 20 21 23 24 29 31 34 36 37 39 40 42 45 46 47 48 51 53 54 58 59 61 62 63 67 70 72 73 74 76 78 79 80 82 84 85 86 89 90 91 92 93 94 95 97 98 101 102 104 107 108 110 111 112 113 115 116 118 121 123 124 126 127 129 131 132 134 135 136 138 139 140 141 142 143 144 147 148 151 153 154 157 160 161 163 164 166 167 168 169 171 172 175 177 178 183 187 196 198 204 205 208 # 25584 difference c a 211 1 0 2 3 6 7 10 11 14 17 18 20 21 23 24 29 31 34 36 37 39 40 42 45 46 47 48 51 53 54 58 59 61 62 63 67 70 72 73 74 76 78 79 80 82 84 85 86 89 90 91 92 93 94 95 97 98 101 102 104 107 108 110 111 112 113 115 116 118 121 123 124 126 127 129 131 132 134 135 136 138 139 140 141 142 143 144 147 148 151 153 154 157 160 161 163 164 166 167 168 169 171 172 175 177 178 183 187 196 198 204 205 208 b 211 1 0 e # 25585 difference c a 211 1 0 1 2 5 7 9 13 14 17 19 21 24 25 26 27 28 29 31 32 35 37 38 40 42 43 44 45 48 49 51 52 53 55 56 58 63 65 66 67 69 76 77 78 79 80 82 83 84 87 91 93 94 95 97 98 99 100 101 103 109 110 111 113 114 116 118 123 124 125 126 128 129 132 133 135 137 140 143 144 147 151 153 154 156 157 158 160 162 169 170 171 172 174 175 176 178 183 187 191 192 196 197 198 200 201 203 206 207 209 b 211 1 0 1 2 5 7 9 13 14 17 19 21 24 25 26 27 28 29 31 32 35 37 38 40 42 43 44 45 48 49 51 52 53 55 56 58 63 65 66 67 69 76 77 78 79 80 82 83 84 87 91 93 94 95 97 98 99 100 101 103 109 110 111 113 114 116 118 123 124 125 126 128 129 132 133 135 137 140 143 144 147 151 153 154 156 157 158 160 162 169 170 171 172 174 175 176 178 183 187 191 192 196 197 198 200 201 203 206 207 209 # 25586 difference c a 211 1 0 1 2 5 7 9 13 14 17 19 21 24 25 26 27 28 29 31 32 35 37 38 40 42 43 44 45 48 49 51 52 53 55 56 58 63 65 66 67 69 76 77 78 79 80 82 83 84 87 91 93 94 95 97 98 99 100 101 103 109 110 111 113 114 116 118 123 124 125 126 128 129 132 133 135 137 140 143 144 147 151 153 154 156 157 158 160 162 169 170 171 172 174 175 176 178 183 187 191 192 196 197 198 200 201 203 206 207 209 b 211 1 0 f # 25587 difference c a 211 1 0 0 3 5 8 9 10 11 12 18 19 21 22 23 24 26 27 28 31 32 33 34 38 41 45 47 51 54 56 60 63 65 66 67 69 73 74 75 76 80 81 82 83 85 90 92 93 94 96 97 98 100 102 104 106 107 108 110 113 115 116 117 119 121 124 127 131 132 133 135 140 142 148 156 157 159 161 162 164 166 172 177 178 181 182 183 189 191 194 197 199 201 205 206 207 209 b 211 1 0 0 3 5 8 9 10 11 12 18 19 21 22 23 24 26 27 28 31 32 33 34 38 41 45 47 51 54 56 60 63 65 66 67 69 73 74 75 76 80 81 82 83 85 90 92 93 94 96 97 98 100 102 104 106 107 108 110 113 115 116 117 119 121 124 127 131 132 133 135 140 142 148 156 157 159 161 162 164 166 172 177 178 181 182 183 189 191 194 197 199 201 205 206 207 209 # 25588 difference c a 211 1 0 0 3 5 8 9 10 11 12 18 19 21 22 23 24 26 27 28 31 32 33 34 38 41 45 47 51 54 56 60 63 65 66 67 69 73 74 75 76 80 81 82 83 85 90 92 93 94 96 97 98 100 102 104 106 107 108 110 113 115 116 117 119 121 124 127 131 132 133 135 140 142 148 156 157 159 161 162 164 166 172 177 178 181 182 183 189 191 194 197 199 201 205 206 207 209 b 211 1 0 0 1 2 6 10 12 13 18 20 21 22 24 27 28 29 30 31 32 33 35 37 39 42 46 47 53 57 58 60 61 64 69 70 71 73 79 80 82 83 87 91 93 97 99 100 102 106 107 109 115 116 118 120 123 125 128 129 131 133 134 135 137 139 140 141 142 148 150 152 153 155 156 157 161 163 164 167 168 169 170 171 172 173 174 176 178 179 181 184 185 189 190 191 194 201 204 206 207 209 # 25589 difference c a 211 1 0 e b 211 1 0 e # 25590 difference c a 211 1 0 e b 211 1 1 e # 25591 difference c a 211 1 0 e b 211 1 0 e # 25592 difference c a 211 1 0 e b 211 1 1 f # 25593 difference c a 211 1 0 e b 211 1 0 e # 25594 difference c a 211 1 0 e b 211 1 1 0 2 7 8 10 11 12 13 14 15 17 19 24 27 28 29 31 33 35 37 40 43 46 47 49 50 53 54 58 63 65 67 69 73 76 77 80 81 82 84 85 88 90 92 94 95 98 99 101 103 104 107 110 113 114 118 120 121 122 125 127 131 133 135 137 138 139 141 143 145 147 151 155 156 157 161 162 164 167 170 172 173 176 180 181 183 185 186 188 191 195 196 197 198 201 202 204 205 206 207 210 # 25595 difference c a 211 1 0 f b 211 1 0 f # 25596 difference c a 211 1 0 f b 211 1 1 e # 25597 difference c a 211 1 0 f b 211 1 0 f # 25598 difference c a 211 1 0 f b 211 1 1 f # 25599 difference c a 211 1 0 f b 211 1 0 f # 25600 difference c a 211 1 0 f b 211 1 1 5 6 7 8 11 13 16 19 22 23 24 25 27 29 30 32 33 34 36 37 39 40 45 46 47 48 50 52 53 55 57 59 65 66 68 70 71 72 75 78 80 81 82 84 85 88 89 90 92 94 97 99 100 102 103 104 105 106 109 111 112 117 118 119 121 124 125 126 128 131 132 133 135 136 138 140 143 144 145 147 149 150 151 152 155 158 159 162 166 169 173 179 182 186 187 188 189 190 196 198 202 203 204 205 # 25601 difference c a 211 1 0 0 1 5 7 8 10 11 15 16 17 18 21 22 24 25 26 30 32 34 37 41 43 45 46 48 54 58 59 60 61 63 66 67 77 78 79 83 84 85 93 94 95 96 97 98 102 104 105 106 107 108 109 110 112 115 117 118 119 122 123 124 125 126 127 128 129 133 134 135 136 137 138 139 141 145 148 161 163 164 166 167 168 169 170 172 174 175 181 182 183 184 188 189 192 193 194 197 201 202 205 208 209 210 b 211 1 0 0 1 5 7 8 10 11 15 16 17 18 21 22 24 25 26 30 32 34 37 41 43 45 46 48 54 58 59 60 61 63 66 67 77 78 79 83 84 85 93 94 95 96 97 98 102 104 105 106 107 108 109 110 112 115 117 118 119 122 123 124 125 126 127 128 129 133 134 135 136 137 138 139 141 145 148 161 163 164 166 167 168 169 170 172 174 175 181 182 183 184 188 189 192 193 194 197 201 202 205 208 209 210 # 25602 difference c a 211 1 0 0 1 5 7 8 10 11 15 16 17 18 21 22 24 25 26 30 32 34 37 41 43 45 46 48 54 58 59 60 61 63 66 67 77 78 79 83 84 85 93 94 95 96 97 98 102 104 105 106 107 108 109 110 112 115 117 118 119 122 123 124 125 126 127 128 129 133 134 135 136 137 138 139 141 145 148 161 163 164 166 167 168 169 170 172 174 175 181 182 183 184 188 189 192 193 194 197 201 202 205 208 209 210 b 211 1 1 e # 25603 difference c a 211 1 0 5 6 7 9 11 12 14 19 20 24 30 31 32 38 39 43 47 48 49 50 51 54 55 59 60 64 65 66 67 68 69 70 72 82 85 87 89 90 92 94 95 96 98 99 104 106 108 114 115 118 119 120 121 123 124 125 126 127 130 131 132 134 135 136 137 138 139 140 142 144 145 148 151 153 154 156 157 162 165 166 168 169 170 171 173 176 177 178 179 182 185 186 187 189 191 194 195 197 198 199 200 201 202 204 205 206 207 208 209 b 211 1 0 5 6 7 9 11 12 14 19 20 24 30 31 32 38 39 43 47 48 49 50 51 54 55 59 60 64 65 66 67 68 69 70 72 82 85 87 89 90 92 94 95 96 98 99 104 106 108 114 115 118 119 120 121 123 124 125 126 127 130 131 132 134 135 136 137 138 139 140 142 144 145 148 151 153 154 156 157 162 165 166 168 169 170 171 173 176 177 178 179 182 185 186 187 189 191 194 195 197 198 199 200 201 202 204 205 206 207 208 209 # 25604 difference c a 211 1 0 5 6 7 9 11 12 14 19 20 24 30 31 32 38 39 43 47 48 49 50 51 54 55 59 60 64 65 66 67 68 69 70 72 82 85 87 89 90 92 94 95 96 98 99 104 106 108 114 115 118 119 120 121 123 124 125 126 127 130 131 132 134 135 136 137 138 139 140 142 144 145 148 151 153 154 156 157 162 165 166 168 169 170 171 173 176 177 178 179 182 185 186 187 189 191 194 195 197 198 199 200 201 202 204 205 206 207 208 209 b 211 1 1 f # 25605 difference c a 211 1 0 0 4 5 7 10 23 26 27 28 29 31 33 35 36 37 38 40 41 44 45 46 48 49 50 54 57 61 63 64 65 66 68 70 71 76 77 78 79 80 81 84 86 88 90 95 97 102 103 106 109 113 116 118 119 121 123 125 126 127 128 134 135 137 139 140 141 142 144 146 147 148 149 150 152 154 156 157 159 160 162 164 165 168 169 170 171 172 173 174 175 177 189 194 195 202 205 206 207 208 210 b 211 1 0 0 4 5 7 10 23 26 27 28 29 31 33 35 36 37 38 40 41 44 45 46 48 49 50 54 57 61 63 64 65 66 68 70 71 76 77 78 79 80 81 84 86 88 90 95 97 102 103 106 109 113 116 118 119 121 123 125 126 127 128 134 135 137 139 140 141 142 144 146 147 148 149 150 152 154 156 157 159 160 162 164 165 168 169 170 171 172 173 174 175 177 189 194 195 202 205 206 207 208 210 # 25606 difference c a 211 1 0 0 4 5 7 10 23 26 27 28 29 31 33 35 36 37 38 40 41 44 45 46 48 49 50 54 57 61 63 64 65 66 68 70 71 76 77 78 79 80 81 84 86 88 90 95 97 102 103 106 109 113 116 118 119 121 123 125 126 127 128 134 135 137 139 140 141 142 144 146 147 148 149 150 152 154 156 157 159 160 162 164 165 168 169 170 171 172 173 174 175 177 189 194 195 202 205 206 207 208 210 b 211 1 1 1 5 6 7 9 10 12 15 19 20 22 23 24 25 26 31 33 36 40 42 43 45 46 47 50 52 58 59 60 63 65 68 69 70 71 72 74 77 79 83 84 87 88 90 92 96 97 98 99 100 101 102 103 105 107 108 109 110 112 113 115 117 118 122 124 126 127 129 130 131 133 134 135 136 137 139 140 142 143 147 148 150 152 153 156 160 161 164 165 168 169 171 172 177 178 181 182 183 184 187 189 190 192 194 198 200 202 203 207 # 25607 difference c a 211 1 1 e b 211 1 1 e # 25608 difference c a 211 1 1 e b 211 0 0 e # 25609 difference c a 211 1 1 e b 211 1 1 e # 25610 difference c a 211 1 1 e b 211 0 0 f # 25611 difference c a 211 1 1 e b 211 1 1 e # 25612 difference c a 211 1 1 e b 211 0 0 0 3 4 7 8 9 10 12 13 17 20 23 24 25 26 27 33 34 41 42 43 44 48 50 51 52 55 58 59 60 62 65 66 69 70 72 75 76 77 79 81 85 92 95 102 104 113 114 115 116 117 123 124 125 126 127 132 134 136 137 138 142 143 144 146 147 149 150 151 154 157 159 161 163 165 168 172 175 176 182 183 184 185 186 191 192 194 200 201 202 207 208 209 # 25613 difference c a 211 1 1 f b 211 1 1 f # 25614 difference c a 211 1 1 f b 211 0 0 e # 25615 difference c a 211 1 1 f b 211 1 1 f # 25616 difference c a 211 1 1 f b 211 0 0 f # 25617 difference c a 211 1 1 f b 211 1 1 f # 25618 difference c a 211 1 1 f b 211 0 0 0 3 5 6 7 9 10 12 14 16 18 20 21 24 25 26 27 28 31 32 35 38 39 41 50 52 54 55 57 58 59 62 63 64 66 69 71 74 75 76 78 80 81 82 83 84 85 86 89 91 92 93 94 95 97 98 99 103 104 106 108 109 110 111 118 119 120 121 123 124 126 128 129 130 132 135 136 139 140 141 142 146 147 149 152 153 155 158 160 161 162 163 166 169 172 174 177 179 180 181 184 185 187 193 195 197 199 200 201 203 204 209 # 25619 difference c a 211 1 1 0 2 5 6 9 14 15 16 17 20 21 22 23 24 25 29 30 33 34 35 36 38 42 43 44 46 47 49 51 52 53 54 55 56 57 60 68 70 72 74 75 76 77 80 81 83 84 85 86 87 88 90 91 92 96 97 98 100 102 103 104 105 107 109 112 114 117 120 123 124 125 126 128 129 130 131 133 137 139 140 143 144 148 150 151 152 154 157 158 161 162 163 164 166 172 175 176 179 180 182 183 184 191 195 196 200 202 204 207 208 b 211 1 1 0 2 5 6 9 14 15 16 17 20 21 22 23 24 25 29 30 33 34 35 36 38 42 43 44 46 47 49 51 52 53 54 55 56 57 60 68 70 72 74 75 76 77 80 81 83 84 85 86 87 88 90 91 92 96 97 98 100 102 103 104 105 107 109 112 114 117 120 123 124 125 126 128 129 130 131 133 137 139 140 143 144 148 150 151 152 154 157 158 161 162 163 164 166 172 175 176 179 180 182 183 184 191 195 196 200 202 204 207 208 # 25620 difference c a 211 1 1 0 2 5 6 9 14 15 16 17 20 21 22 23 24 25 29 30 33 34 35 36 38 42 43 44 46 47 49 51 52 53 54 55 56 57 60 68 70 72 74 75 76 77 80 81 83 84 85 86 87 88 90 91 92 96 97 98 100 102 103 104 105 107 109 112 114 117 120 123 124 125 126 128 129 130 131 133 137 139 140 143 144 148 150 151 152 154 157 158 161 162 163 164 166 172 175 176 179 180 182 183 184 191 195 196 200 202 204 207 208 b 211 0 0 e # 25621 difference c a 211 1 1 0 1 5 6 7 8 9 11 13 16 17 21 23 24 27 29 31 35 38 41 42 44 46 48 50 53 57 58 59 62 63 64 66 67 69 71 72 77 78 81 82 84 86 89 90 91 92 93 94 95 96 97 98 101 106 107 109 111 116 117 119 120 122 123 130 131 133 134 137 139 142 143 144 145 148 149 151 156 157 158 159 162 165 166 167 170 171 172 173 174 176 178 179 180 184 185 186 188 192 194 196 197 200 203 207 208 210 b 211 1 1 0 1 5 6 7 8 9 11 13 16 17 21 23 24 27 29 31 35 38 41 42 44 46 48 50 53 57 58 59 62 63 64 66 67 69 71 72 77 78 81 82 84 86 89 90 91 92 93 94 95 96 97 98 101 106 107 109 111 116 117 119 120 122 123 130 131 133 134 137 139 142 143 144 145 148 149 151 156 157 158 159 162 165 166 167 170 171 172 173 174 176 178 179 180 184 185 186 188 192 194 196 197 200 203 207 208 210 # 25622 difference c a 211 1 1 0 1 5 6 7 8 9 11 13 16 17 21 23 24 27 29 31 35 38 41 42 44 46 48 50 53 57 58 59 62 63 64 66 67 69 71 72 77 78 81 82 84 86 89 90 91 92 93 94 95 96 97 98 101 106 107 109 111 116 117 119 120 122 123 130 131 133 134 137 139 142 143 144 145 148 149 151 156 157 158 159 162 165 166 167 170 171 172 173 174 176 178 179 180 184 185 186 188 192 194 196 197 200 203 207 208 210 b 211 0 0 f # 25623 difference c a 211 1 1 0 1 3 6 7 13 15 16 17 20 21 22 23 24 26 27 28 30 31 32 33 34 40 41 42 43 44 46 49 50 52 54 55 56 57 58 59 66 67 68 75 79 82 83 84 85 86 88 92 93 96 99 103 104 105 106 108 110 113 116 117 118 119 121 124 125 126 127 128 132 133 137 138 141 142 143 144 145 146 147 148 149 150 152 153 154 156 157 159 161 163 167 171 172 175 182 183 185 187 188 189 190 191 193 194 195 198 199 200 202 203 204 207 208 209 b 211 1 1 0 1 3 6 7 13 15 16 17 20 21 22 23 24 26 27 28 30 31 32 33 34 40 41 42 43 44 46 49 50 52 54 55 56 57 58 59 66 67 68 75 79 82 83 84 85 86 88 92 93 96 99 103 104 105 106 108 110 113 116 117 118 119 121 124 125 126 127 128 132 133 137 138 141 142 143 144 145 146 147 148 149 150 152 153 154 156 157 159 161 163 167 171 172 175 182 183 185 187 188 189 190 191 193 194 195 198 199 200 202 203 204 207 208 209 # 25624 difference c a 211 1 1 0 1 3 6 7 13 15 16 17 20 21 22 23 24 26 27 28 30 31 32 33 34 40 41 42 43 44 46 49 50 52 54 55 56 57 58 59 66 67 68 75 79 82 83 84 85 86 88 92 93 96 99 103 104 105 106 108 110 113 116 117 118 119 121 124 125 126 127 128 132 133 137 138 141 142 143 144 145 146 147 148 149 150 152 153 154 156 157 159 161 163 167 171 172 175 182 183 185 187 188 189 190 191 193 194 195 198 199 200 202 203 204 207 208 209 b 211 0 0 0 2 3 5 12 15 16 17 18 19 20 24 25 26 27 29 35 36 37 42 43 44 46 52 53 54 55 57 58 59 60 61 63 65 66 68 69 70 73 77 78 79 81 82 84 85 86 89 92 93 95 96 97 99 100 101 102 104 106 107 110 111 113 114 117 119 120 121 129 130 132 133 134 137 143 144 146 151 153 155 157 158 159 160 161 164 166 168 170 172 173 174 175 177 181 183 185 187 188 191 193 196 198 199 200 207 # 25625 difference c a 211 1 1 e b 211 1 1 e # 25626 difference c a 211 1 1 e b 211 0 1 e # 25627 difference c a 211 1 1 e b 211 1 1 e # 25628 difference c a 211 1 1 e b 211 0 1 f # 25629 difference c a 211 1 1 e b 211 1 1 e # 25630 difference c a 211 1 1 e b 211 0 1 0 2 4 5 6 8 10 12 13 14 16 17 19 20 21 22 27 29 33 34 35 36 37 42 45 46 47 48 49 50 52 53 54 55 56 58 62 67 69 74 75 78 79 90 91 95 96 97 98 100 102 104 106 107 108 109 110 114 116 117 118 122 123 124 127 128 131 133 134 137 140 142 143 144 145 148 150 151 152 153 154 155 156 158 159 161 162 163 164 165 168 170 172 173 176 177 178 181 183 186 191 194 196 198 199 200 201 204 205 206 207 208 209 # 25631 difference c a 211 1 1 f b 211 1 1 f # 25632 difference c a 211 1 1 f b 211 0 1 e # 25633 difference c a 211 1 1 f b 211 1 1 f # 25634 difference c a 211 1 1 f b 211 0 1 f # 25635 difference c a 211 1 1 f b 211 1 1 f # 25636 difference c a 211 1 1 f b 211 0 1 0 1 2 3 5 6 7 12 17 23 26 27 28 29 31 32 33 34 35 36 37 38 40 41 42 43 46 47 51 53 54 55 56 57 58 59 60 61 62 64 65 67 68 71 75 76 78 80 81 82 84 85 86 87 89 90 92 93 94 95 96 98 103 104 105 107 110 111 113 115 116 118 120 123 127 131 133 134 138 139 141 142 143 144 145 146 147 150 152 154 156 160 161 165 167 170 171 179 180 182 183 184 185 186 190 192 193 196 197 202 203 204 208 209 210 # 25637 difference c a 211 1 1 1 2 4 5 10 11 13 15 16 20 21 23 25 27 29 30 31 32 33 35 36 38 40 41 42 44 47 49 52 54 58 59 61 62 65 66 69 72 74 75 76 78 84 87 88 90 91 95 98 99 104 107 108 110 114 116 119 120 121 122 123 125 126 127 129 130 134 136 137 138 139 141 143 146 153 155 156 157 158 160 161 162 163 171 173 175 176 180 182 183 185 186 188 190 191 194 196 197 198 201 204 205 207 b 211 1 1 1 2 4 5 10 11 13 15 16 20 21 23 25 27 29 30 31 32 33 35 36 38 40 41 42 44 47 49 52 54 58 59 61 62 65 66 69 72 74 75 76 78 84 87 88 90 91 95 98 99 104 107 108 110 114 116 119 120 121 122 123 125 126 127 129 130 134 136 137 138 139 141 143 146 153 155 156 157 158 160 161 162 163 171 173 175 176 180 182 183 185 186 188 190 191 194 196 197 198 201 204 205 207 # 25638 difference c a 211 1 1 1 2 4 5 10 11 13 15 16 20 21 23 25 27 29 30 31 32 33 35 36 38 40 41 42 44 47 49 52 54 58 59 61 62 65 66 69 72 74 75 76 78 84 87 88 90 91 95 98 99 104 107 108 110 114 116 119 120 121 122 123 125 126 127 129 130 134 136 137 138 139 141 143 146 153 155 156 157 158 160 161 162 163 171 173 175 176 180 182 183 185 186 188 190 191 194 196 197 198 201 204 205 207 b 211 0 1 e # 25639 difference c a 211 1 1 0 1 2 3 5 6 7 8 10 11 15 18 19 20 21 22 25 28 29 31 32 34 37 40 45 47 51 52 57 58 60 63 64 68 69 70 71 72 73 76 77 79 81 82 86 88 90 91 92 93 97 98 105 106 108 111 112 117 118 125 126 127 130 131 132 136 138 139 140 141 142 143 145 146 147 148 149 154 155 159 160 162 163 164 167 168 180 182 184 186 188 190 191 192 193 194 195 196 199 200 201 203 208 209 210 b 211 1 1 0 1 2 3 5 6 7 8 10 11 15 18 19 20 21 22 25 28 29 31 32 34 37 40 45 47 51 52 57 58 60 63 64 68 69 70 71 72 73 76 77 79 81 82 86 88 90 91 92 93 97 98 105 106 108 111 112 117 118 125 126 127 130 131 132 136 138 139 140 141 142 143 145 146 147 148 149 154 155 159 160 162 163 164 167 168 180 182 184 186 188 190 191 192 193 194 195 196 199 200 201 203 208 209 210 # 25640 difference c a 211 1 1 0 1 2 3 5 6 7 8 10 11 15 18 19 20 21 22 25 28 29 31 32 34 37 40 45 47 51 52 57 58 60 63 64 68 69 70 71 72 73 76 77 79 81 82 86 88 90 91 92 93 97 98 105 106 108 111 112 117 118 125 126 127 130 131 132 136 138 139 140 141 142 143 145 146 147 148 149 154 155 159 160 162 163 164 167 168 180 182 184 186 188 190 191 192 193 194 195 196 199 200 201 203 208 209 210 b 211 0 1 f # 25641 difference c a 211 1 1 0 3 5 6 8 11 14 18 19 21 24 25 26 32 33 35 36 39 40 41 42 45 52 53 54 55 59 60 61 63 66 68 70 73 74 78 79 85 87 89 90 92 93 97 102 106 107 108 109 113 114 115 116 122 123 125 127 128 129 130 133 134 137 139 140 141 145 146 152 155 157 158 161 163 167 168 170 171 173 174 175 176 177 178 182 184 187 188 189 192 193 196 198 199 200 201 202 204 205 206 207 208 209 210 b 211 1 1 0 3 5 6 8 11 14 18 19 21 24 25 26 32 33 35 36 39 40 41 42 45 52 53 54 55 59 60 61 63 66 68 70 73 74 78 79 85 87 89 90 92 93 97 102 106 107 108 109 113 114 115 116 122 123 125 127 128 129 130 133 134 137 139 140 141 145 146 152 155 157 158 161 163 167 168 170 171 173 174 175 176 177 178 182 184 187 188 189 192 193 196 198 199 200 201 202 204 205 206 207 208 209 210 # 25642 difference c a 211 1 1 0 3 5 6 8 11 14 18 19 21 24 25 26 32 33 35 36 39 40 41 42 45 52 53 54 55 59 60 61 63 66 68 70 73 74 78 79 85 87 89 90 92 93 97 102 106 107 108 109 113 114 115 116 122 123 125 127 128 129 130 133 134 137 139 140 141 145 146 152 155 157 158 161 163 167 168 170 171 173 174 175 176 177 178 182 184 187 188 189 192 193 196 198 199 200 201 202 204 205 206 207 208 209 210 b 211 0 1 2 5 6 8 9 14 15 18 22 25 27 30 31 32 33 36 37 39 40 41 45 46 49 50 53 54 59 60 62 63 65 67 68 69 70 71 72 73 74 75 76 77 80 82 83 84 85 89 95 98 102 103 105 106 108 110 111 112 114 115 121 122 123 124 125 131 132 134 137 138 143 144 145 146 149 150 152 155 157 158 159 160 162 163 164 166 169 170 182 183 184 186 188 189 191 193 194 197 198 199 201 203 204 205 206 208 210 # 25643 difference c a 211 1 1 e b 211 1 1 e # 25644 difference c a 211 1 1 e b 211 1 0 e # 25645 difference c a 211 1 1 e b 211 1 1 e # 25646 difference c a 211 1 1 e b 211 1 0 f # 25647 difference c a 211 1 1 e b 211 1 1 e # 25648 difference c a 211 1 1 e b 211 1 0 1 2 5 6 7 8 9 10 11 12 13 14 18 20 21 23 24 26 27 30 32 34 37 46 47 48 49 50 51 56 59 61 66 67 68 73 74 75 77 79 82 83 84 87 90 91 95 98 100 102 105 106 107 108 110 112 115 116 118 120 124 125 130 131 132 133 136 140 141 142 143 145 146 152 153 154 155 158 159 160 161 162 163 165 169 170 171 172 174 179 180 181 183 184 186 188 189 190 191 193 194 195 196 199 201 202 203 205 207 209 210 # 25649 difference c a 211 1 1 f b 211 1 1 f # 25650 difference c a 211 1 1 f b 211 1 0 e # 25651 difference c a 211 1 1 f b 211 1 1 f # 25652 difference c a 211 1 1 f b 211 1 0 f # 25653 difference c a 211 1 1 f b 211 1 1 f # 25654 difference c a 211 1 1 f b 211 1 0 1 5 6 7 8 9 10 11 14 20 23 24 25 26 27 29 30 34 35 37 38 43 44 46 48 51 52 53 55 56 58 59 61 63 66 67 68 72 73 75 80 81 83 85 86 89 92 93 96 97 99 101 104 105 108 109 110 111 113 115 116 119 120 123 125 126 128 132 133 134 135 138 140 141 144 145 148 149 151 153 154 156 157 158 160 161 162 163 164 166 168 169 170 171 173 176 177 178 179 182 183 187 189 192 195 196 197 198 200 201 204 # 25655 difference c a 211 1 1 0 2 4 6 7 8 9 11 12 19 20 22 24 26 28 29 30 33 34 37 38 39 42 44 46 47 50 53 54 58 59 61 63 67 70 71 73 74 76 77 80 81 82 84 85 86 87 89 90 91 92 94 96 97 98 101 102 103 105 106 108 110 111 113 115 116 118 119 121 122 123 130 131 132 133 136 138 140 141 143 144 146 147 148 149 150 151 152 154 156 158 161 165 166 169 170 171 172 173 174 175 177 178 180 183 184 187 191 193 195 198 199 201 202 204 205 208 b 211 1 1 0 2 4 6 7 8 9 11 12 19 20 22 24 26 28 29 30 33 34 37 38 39 42 44 46 47 50 53 54 58 59 61 63 67 70 71 73 74 76 77 80 81 82 84 85 86 87 89 90 91 92 94 96 97 98 101 102 103 105 106 108 110 111 113 115 116 118 119 121 122 123 130 131 132 133 136 138 140 141 143 144 146 147 148 149 150 151 152 154 156 158 161 165 166 169 170 171 172 173 174 175 177 178 180 183 184 187 191 193 195 198 199 201 202 204 205 208 # 25656 difference c a 211 1 1 0 2 4 6 7 8 9 11 12 19 20 22 24 26 28 29 30 33 34 37 38 39 42 44 46 47 50 53 54 58 59 61 63 67 70 71 73 74 76 77 80 81 82 84 85 86 87 89 90 91 92 94 96 97 98 101 102 103 105 106 108 110 111 113 115 116 118 119 121 122 123 130 131 132 133 136 138 140 141 143 144 146 147 148 149 150 151 152 154 156 158 161 165 166 169 170 171 172 173 174 175 177 178 180 183 184 187 191 193 195 198 199 201 202 204 205 208 b 211 1 0 e # 25657 difference c a 211 1 1 0 1 2 3 4 5 7 9 12 13 14 15 18 20 22 25 26 30 32 33 34 35 36 40 41 42 43 44 45 46 52 54 57 58 59 60 61 62 63 65 66 72 75 76 77 78 84 86 88 90 91 93 94 95 96 97 98 100 103 104 105 106 107 108 109 110 114 116 119 120 122 125 126 129 130 136 138 139 140 141 142 145 149 150 153 155 159 163 165 175 176 177 178 180 181 184 185 189 191 193 194 195 196 199 203 204 205 207 208 210 b 211 1 1 0 1 2 3 4 5 7 9 12 13 14 15 18 20 22 25 26 30 32 33 34 35 36 40 41 42 43 44 45 46 52 54 57 58 59 60 61 62 63 65 66 72 75 76 77 78 84 86 88 90 91 93 94 95 96 97 98 100 103 104 105 106 107 108 109 110 114 116 119 120 122 125 126 129 130 136 138 139 140 141 142 145 149 150 153 155 159 163 165 175 176 177 178 180 181 184 185 189 191 193 194 195 196 199 203 204 205 207 208 210 # 25658 difference c a 211 1 1 0 1 2 3 4 5 7 9 12 13 14 15 18 20 22 25 26 30 32 33 34 35 36 40 41 42 43 44 45 46 52 54 57 58 59 60 61 62 63 65 66 72 75 76 77 78 84 86 88 90 91 93 94 95 96 97 98 100 103 104 105 106 107 108 109 110 114 116 119 120 122 125 126 129 130 136 138 139 140 141 142 145 149 150 153 155 159 163 165 175 176 177 178 180 181 184 185 189 191 193 194 195 196 199 203 204 205 207 208 210 b 211 1 0 f # 25659 difference c a 211 1 1 0 6 8 9 10 11 12 14 15 18 20 26 27 28 30 31 32 34 36 37 38 39 42 44 45 51 52 53 55 58 60 61 62 63 65 68 69 74 77 78 79 82 83 86 88 89 90 91 92 93 94 96 97 98 100 102 104 106 109 111 112 113 114 117 118 119 120 122 123 127 132 134 135 136 137 140 142 143 145 146 147 149 150 154 156 161 162 165 166 167 168 171 172 176 178 181 182 185 186 188 190 193 194 195 196 197 198 199 200 201 203 205 206 209 210 b 211 1 1 0 6 8 9 10 11 12 14 15 18 20 26 27 28 30 31 32 34 36 37 38 39 42 44 45 51 52 53 55 58 60 61 62 63 65 68 69 74 77 78 79 82 83 86 88 89 90 91 92 93 94 96 97 98 100 102 104 106 109 111 112 113 114 117 118 119 120 122 123 127 132 134 135 136 137 140 142 143 145 146 147 149 150 154 156 161 162 165 166 167 168 171 172 176 178 181 182 185 186 188 190 193 194 195 196 197 198 199 200 201 203 205 206 209 210 # 25660 difference c a 211 1 1 0 6 8 9 10 11 12 14 15 18 20 26 27 28 30 31 32 34 36 37 38 39 42 44 45 51 52 53 55 58 60 61 62 63 65 68 69 74 77 78 79 82 83 86 88 89 90 91 92 93 94 96 97 98 100 102 104 106 109 111 112 113 114 117 118 119 120 122 123 127 132 134 135 136 137 140 142 143 145 146 147 149 150 154 156 161 162 165 166 167 168 171 172 176 178 181 182 185 186 188 190 193 194 195 196 197 198 199 200 201 203 205 206 209 210 b 211 1 0 0 1 4 9 10 11 13 15 18 21 22 23 24 25 26 29 30 31 32 35 36 38 39 41 42 44 51 52 54 55 56 57 60 64 68 74 75 79 81 82 84 87 89 91 92 95 96 97 99 100 101 104 105 111 116 117 119 122 124 127 130 137 138 146 149 151 156 159 160 164 165 167 171 173 175 177 180 184 186 188 191 192 193 195 197 198 199 200 202 204 205 208 209 210 # 25661 difference c a 211 1 1 e b 211 1 1 e # 25662 difference c a 211 1 1 e b 211 1 1 e # 25663 difference c a 211 1 1 e b 211 1 1 e # 25664 difference c a 211 1 1 e b 211 1 1 f # 25665 difference c a 211 1 1 e b 211 1 1 e # 25666 difference c a 211 1 1 e b 211 1 1 0 2 4 9 10 12 13 14 15 21 22 23 24 25 27 28 30 31 33 37 38 39 40 41 43 44 45 46 47 51 52 54 55 58 60 65 66 68 69 71 72 74 79 80 81 82 83 84 85 92 93 95 100 101 102 103 105 107 109 110 111 113 114 116 118 124 125 129 130 133 134 135 139 140 142 144 146 147 148 149 150 152 155 157 159 162 163 164 165 166 173 174 177 184 185 188 189 190 193 196 197 198 201 203 204 208 210 # 25667 difference c a 211 1 1 f b 211 1 1 f # 25668 difference c a 211 1 1 f b 211 1 1 e # 25669 difference c a 211 1 1 f b 211 1 1 f # 25670 difference c a 211 1 1 f b 211 1 1 f # 25671 difference c a 211 1 1 f b 211 1 1 f # 25672 difference c a 211 1 1 f b 211 1 1 1 3 7 8 10 12 13 15 16 18 19 20 21 24 25 26 28 30 32 37 41 42 43 44 46 48 49 53 54 56 57 60 62 63 64 65 68 69 70 71 72 74 76 77 78 80 82 85 88 89 90 91 94 100 103 104 110 111 112 113 116 117 119 120 124 129 133 135 136 140 146 151 153 156 157 160 161 162 163 164 166 167 168 170 172 174 176 177 178 179 180 182 184 186 187 188 191 194 195 196 197 198 201 202 204 205 206 207 208 209 210 # 25673 difference c a 211 1 1 0 1 2 4 5 6 7 8 11 13 16 21 23 24 27 28 31 34 37 41 42 43 44 48 50 53 54 60 61 62 63 64 65 68 74 75 76 79 80 82 85 86 89 90 92 93 95 96 98 99 100 102 104 105 107 109 110 111 112 113 116 117 118 120 123 125 127 130 132 133 135 136 137 138 139 141 142 146 152 153 154 156 159 160 161 163 164 165 166 169 171 172 176 179 180 181 183 184 186 187 188 190 191 193 194 195 196 197 200 201 205 206 208 b 211 1 1 0 1 2 4 5 6 7 8 11 13 16 21 23 24 27 28 31 34 37 41 42 43 44 48 50 53 54 60 61 62 63 64 65 68 74 75 76 79 80 82 85 86 89 90 92 93 95 96 98 99 100 102 104 105 107 109 110 111 112 113 116 117 118 120 123 125 127 130 132 133 135 136 137 138 139 141 142 146 152 153 154 156 159 160 161 163 164 165 166 169 171 172 176 179 180 181 183 184 186 187 188 190 191 193 194 195 196 197 200 201 205 206 208 # 25674 difference c a 211 1 1 0 1 2 4 5 6 7 8 11 13 16 21 23 24 27 28 31 34 37 41 42 43 44 48 50 53 54 60 61 62 63 64 65 68 74 75 76 79 80 82 85 86 89 90 92 93 95 96 98 99 100 102 104 105 107 109 110 111 112 113 116 117 118 120 123 125 127 130 132 133 135 136 137 138 139 141 142 146 152 153 154 156 159 160 161 163 164 165 166 169 171 172 176 179 180 181 183 184 186 187 188 190 191 193 194 195 196 197 200 201 205 206 208 b 211 1 1 e # 25675 difference c a 211 1 1 0 5 7 9 10 12 13 14 15 17 19 22 23 24 25 26 28 29 33 34 36 44 49 51 54 56 59 61 63 64 67 68 69 70 71 72 75 76 81 82 84 85 86 87 90 91 93 97 98 99 101 102 108 109 110 111 112 113 115 118 119 123 125 126 127 128 129 130 132 133 134 136 138 139 141 142 143 146 147 150 151 152 154 157 159 160 161 163 164 165 167 172 179 180 182 183 185 187 190 193 194 196 198 202 204 206 b 211 1 1 0 5 7 9 10 12 13 14 15 17 19 22 23 24 25 26 28 29 33 34 36 44 49 51 54 56 59 61 63 64 67 68 69 70 71 72 75 76 81 82 84 85 86 87 90 91 93 97 98 99 101 102 108 109 110 111 112 113 115 118 119 123 125 126 127 128 129 130 132 133 134 136 138 139 141 142 143 146 147 150 151 152 154 157 159 160 161 163 164 165 167 172 179 180 182 183 185 187 190 193 194 196 198 202 204 206 # 25676 difference c a 211 1 1 0 5 7 9 10 12 13 14 15 17 19 22 23 24 25 26 28 29 33 34 36 44 49 51 54 56 59 61 63 64 67 68 69 70 71 72 75 76 81 82 84 85 86 87 90 91 93 97 98 99 101 102 108 109 110 111 112 113 115 118 119 123 125 126 127 128 129 130 132 133 134 136 138 139 141 142 143 146 147 150 151 152 154 157 159 160 161 163 164 165 167 172 179 180 182 183 185 187 190 193 194 196 198 202 204 206 b 211 1 1 f # 25677 difference c a 211 1 1 1 3 5 7 9 10 11 13 14 16 17 19 21 22 23 24 25 26 27 31 34 37 39 40 42 43 44 47 49 50 51 52 54 55 57 58 59 61 62 63 67 69 70 72 73 75 77 78 79 80 82 83 84 85 88 94 95 96 98 100 101 103 105 106 107 109 114 116 118 119 120 122 123 125 126 133 135 136 140 141 148 150 151 153 154 155 156 160 161 164 165 166 168 170 171 175 176 177 178 179 180 181 184 187 188 189 191 193 194 197 198 203 204 205 206 209 b 211 1 1 1 3 5 7 9 10 11 13 14 16 17 19 21 22 23 24 25 26 27 31 34 37 39 40 42 43 44 47 49 50 51 52 54 55 57 58 59 61 62 63 67 69 70 72 73 75 77 78 79 80 82 83 84 85 88 94 95 96 98 100 101 103 105 106 107 109 114 116 118 119 120 122 123 125 126 133 135 136 140 141 148 150 151 153 154 155 156 160 161 164 165 166 168 170 171 175 176 177 178 179 180 181 184 187 188 189 191 193 194 197 198 203 204 205 206 209 # 25678 difference c a 211 1 1 1 3 5 7 9 10 11 13 14 16 17 19 21 22 23 24 25 26 27 31 34 37 39 40 42 43 44 47 49 50 51 52 54 55 57 58 59 61 62 63 67 69 70 72 73 75 77 78 79 80 82 83 84 85 88 94 95 96 98 100 101 103 105 106 107 109 114 116 118 119 120 122 123 125 126 133 135 136 140 141 148 150 151 153 154 155 156 160 161 164 165 166 168 170 171 175 176 177 178 179 180 181 184 187 188 189 191 193 194 197 198 203 204 205 206 209 b 211 1 1 1 2 3 4 5 7 8 10 12 13 15 18 19 20 23 24 25 26 30 31 34 35 38 40 41 42 47 48 51 53 54 56 58 60 61 67 68 69 70 72 73 74 76 78 79 80 86 87 88 89 91 94 95 96 102 103 105 110 112 115 116 118 120 124 129 130 131 133 134 136 137 138 141 142 143 146 147 149 153 154 155 156 160 165 166 168 170 173 176 181 182 184 185 187 189 195 200 202 203 205 209 210 # 25679 difference c a 224 0 0 e b 224 0 0 e # 25680 difference c a 224 0 0 e b 224 0 0 e # 25681 difference c a 224 0 0 e b 224 0 0 e # 25682 difference c a 224 0 0 e b 224 0 0 f # 25683 difference c a 224 0 0 e b 224 0 0 e # 25684 difference c a 224 0 0 e b 224 0 0 1 2 3 4 5 8 10 12 14 15 16 17 20 21 22 23 25 31 33 34 35 36 39 40 42 43 45 46 48 58 59 60 63 66 67 70 72 73 74 77 80 81 82 85 86 87 89 90 92 99 100 101 104 106 108 111 115 117 118 119 120 122 123 124 126 134 135 136 139 140 141 142 143 144 145 146 148 150 151 152 153 155 158 159 160 162 163 164 165 166 171 172 173 174 175 176 177 179 182 186 188 189 195 196 200 201 203 204 206 207 208 209 210 216 218 222 223 # 25685 difference c a 224 0 0 f b 224 0 0 f # 25686 difference c a 224 0 0 f b 224 0 0 e # 25687 difference c a 224 0 0 f b 224 0 0 f # 25688 difference c a 224 0 0 f b 224 0 0 f # 25689 difference c a 224 0 0 f b 224 0 0 f # 25690 difference c a 224 0 0 f b 224 0 0 2 4 6 7 8 9 11 20 21 22 25 26 27 29 30 31 36 37 39 40 41 44 45 49 50 51 52 53 56 59 62 63 64 65 68 69 71 73 76 77 78 79 80 82 83 87 88 89 90 92 93 95 96 97 99 100 102 105 106 107 108 110 112 113 122 124 126 127 132 135 138 139 140 141 143 144 145 146 150 153 154 157 159 160 161 163 164 165 166 168 169 171 172 173 175 179 180 185 186 187 188 189 190 191 192 193 195 196 198 199 200 203 204 205 209 212 218 221 222 223 # 25691 difference c a 224 0 0 0 2 4 5 7 8 9 11 12 13 16 17 19 21 22 23 25 26 28 29 34 36 38 39 40 42 43 46 50 53 55 56 59 61 63 64 66 67 69 70 73 75 79 80 86 88 90 91 92 94 95 97 98 99 100 101 104 105 108 111 112 114 115 116 117 119 122 127 130 131 138 140 141 142 143 145 146 148 149 153 155 157 158 159 160 161 162 165 170 173 175 176 177 179 180 182 186 187 189 190 195 197 199 201 204 205 208 211 212 214 216 217 219 220 b 224 0 0 0 2 4 5 7 8 9 11 12 13 16 17 19 21 22 23 25 26 28 29 34 36 38 39 40 42 43 46 50 53 55 56 59 61 63 64 66 67 69 70 73 75 79 80 86 88 90 91 92 94 95 97 98 99 100 101 104 105 108 111 112 114 115 116 117 119 122 127 130 131 138 140 141 142 143 145 146 148 149 153 155 157 158 159 160 161 162 165 170 173 175 176 177 179 180 182 186 187 189 190 195 197 199 201 204 205 208 211 212 214 216 217 219 220 # 25692 difference c a 224 0 0 0 2 4 5 7 8 9 11 12 13 16 17 19 21 22 23 25 26 28 29 34 36 38 39 40 42 43 46 50 53 55 56 59 61 63 64 66 67 69 70 73 75 79 80 86 88 90 91 92 94 95 97 98 99 100 101 104 105 108 111 112 114 115 116 117 119 122 127 130 131 138 140 141 142 143 145 146 148 149 153 155 157 158 159 160 161 162 165 170 173 175 176 177 179 180 182 186 187 189 190 195 197 199 201 204 205 208 211 212 214 216 217 219 220 b 224 0 0 e # 25693 difference c a 224 0 0 0 1 2 4 7 9 11 13 17 18 20 21 22 23 24 26 27 29 30 32 33 37 41 43 44 45 47 48 51 53 58 59 61 62 63 64 69 70 71 72 74 75 77 78 79 81 82 84 86 89 90 91 92 93 94 95 98 99 101 104 106 109 112 113 114 115 117 118 119 121 124 126 129 131 132 133 134 135 136 137 138 140 142 145 151 153 156 158 161 163 164 166 167 169 170 171 172 173 177 178 179 180 181 182 184 187 191 194 195 196 198 199 201 202 207 210 213 215 217 218 219 221 b 224 0 0 0 1 2 4 7 9 11 13 17 18 20 21 22 23 24 26 27 29 30 32 33 37 41 43 44 45 47 48 51 53 58 59 61 62 63 64 69 70 71 72 74 75 77 78 79 81 82 84 86 89 90 91 92 93 94 95 98 99 101 104 106 109 112 113 114 115 117 118 119 121 124 126 129 131 132 133 134 135 136 137 138 140 142 145 151 153 156 158 161 163 164 166 167 169 170 171 172 173 177 178 179 180 181 182 184 187 191 194 195 196 198 199 201 202 207 210 213 215 217 218 219 221 # 25694 difference c a 224 0 0 0 1 2 4 7 9 11 13 17 18 20 21 22 23 24 26 27 29 30 32 33 37 41 43 44 45 47 48 51 53 58 59 61 62 63 64 69 70 71 72 74 75 77 78 79 81 82 84 86 89 90 91 92 93 94 95 98 99 101 104 106 109 112 113 114 115 117 118 119 121 124 126 129 131 132 133 134 135 136 137 138 140 142 145 151 153 156 158 161 163 164 166 167 169 170 171 172 173 177 178 179 180 181 182 184 187 191 194 195 196 198 199 201 202 207 210 213 215 217 218 219 221 b 224 0 0 f # 25695 difference c a 224 0 0 4 7 8 12 13 15 16 21 23 24 25 27 28 29 33 34 35 37 38 42 43 44 46 47 48 52 54 55 58 62 63 65 66 68 69 70 71 72 74 75 76 77 78 82 84 85 86 89 90 91 92 93 98 100 103 104 106 107 109 113 114 115 116 117 119 121 122 124 126 132 133 135 136 138 141 142 143 144 146 147 149 150 151 152 155 156 157 158 162 168 174 176 177 178 179 180 181 182 183 185 187 188 192 193 194 199 200 201 203 207 208 210 211 212 213 216 217 219 b 224 0 0 4 7 8 12 13 15 16 21 23 24 25 27 28 29 33 34 35 37 38 42 43 44 46 47 48 52 54 55 58 62 63 65 66 68 69 70 71 72 74 75 76 77 78 82 84 85 86 89 90 91 92 93 98 100 103 104 106 107 109 113 114 115 116 117 119 121 122 124 126 132 133 135 136 138 141 142 143 144 146 147 149 150 151 152 155 156 157 158 162 168 174 176 177 178 179 180 181 182 183 185 187 188 192 193 194 199 200 201 203 207 208 210 211 212 213 216 217 219 # 25696 difference c a 224 0 0 4 7 8 12 13 15 16 21 23 24 25 27 28 29 33 34 35 37 38 42 43 44 46 47 48 52 54 55 58 62 63 65 66 68 69 70 71 72 74 75 76 77 78 82 84 85 86 89 90 91 92 93 98 100 103 104 106 107 109 113 114 115 116 117 119 121 122 124 126 132 133 135 136 138 141 142 143 144 146 147 149 150 151 152 155 156 157 158 162 168 174 176 177 178 179 180 181 182 183 185 187 188 192 193 194 199 200 201 203 207 208 210 211 212 213 216 217 219 b 224 0 0 2 3 4 6 9 13 16 18 19 23 26 27 28 29 35 37 39 40 41 44 45 47 50 52 53 61 62 67 69 72 73 75 77 79 85 86 87 88 94 95 99 101 102 104 106 110 111 112 115 116 118 119 120 121 125 127 129 132 134 136 137 138 141 143 144 145 146 147 149 150 152 154 155 158 160 162 163 164 165 167 169 171 172 173 174 175 176 177 178 181 182 184 185 188 189 190 191 193 194 195 197 198 199 200 201 202 203 204 210 211 212 214 215 221 # 25697 difference c a 224 0 0 e b 224 0 0 e # 25698 difference c a 224 0 0 e b 224 0 1 e # 25699 difference c a 224 0 0 e b 224 0 0 e # 25700 difference c a 224 0 0 e b 224 0 1 f # 25701 difference c a 224 0 0 e b 224 0 0 e # 25702 difference c a 224 0 0 e b 224 0 1 0 1 4 7 9 10 11 15 20 23 24 25 27 28 33 34 37 40 45 47 49 51 53 54 55 56 58 60 62 65 66 67 68 71 73 75 76 78 79 82 85 90 91 92 93 97 102 103 106 107 108 109 110 111 113 115 116 117 118 121 126 127 131 132 135 138 140 141 144 145 146 147 148 149 152 154 156 157 160 163 164 165 166 168 169 171 172 173 175 178 181 183 188 190 191 192 194 195 196 198 199 202 203 206 207 210 211 214 215 216 217 219 222 # 25703 difference c a 224 0 0 f b 224 0 0 f # 25704 difference c a 224 0 0 f b 224 0 1 e # 25705 difference c a 224 0 0 f b 224 0 0 f # 25706 difference c a 224 0 0 f b 224 0 1 f # 25707 difference c a 224 0 0 f b 224 0 0 f # 25708 difference c a 224 0 0 f b 224 0 1 0 3 4 6 8 9 11 12 13 14 17 19 21 22 23 24 26 28 30 31 32 35 40 43 45 47 48 49 50 51 52 53 54 55 57 65 67 68 71 72 74 83 86 87 88 89 93 95 97 98 101 106 107 108 112 116 117 119 120 121 122 126 127 129 132 133 134 140 142 144 145 146 147 148 149 151 152 156 160 161 162 163 164 166 168 170 171 172 175 177 180 181 183 185 186 188 190 191 192 194 195 196 197 198 199 200 201 202 203 205 207 208 209 211 212 213 214 217 218 220 221 223 # 25709 difference c a 224 0 0 2 4 5 7 9 10 11 12 15 17 18 21 22 23 25 29 31 34 36 41 45 50 51 52 54 58 59 63 64 66 67 68 71 78 79 80 81 82 83 85 91 92 93 99 100 102 103 104 108 110 113 118 119 120 124 125 126 132 135 137 138 141 142 144 145 146 149 150 154 157 159 160 161 163 164 170 174 177 179 180 184 185 188 189 191 192 193 195 197 201 202 203 205 207 208 209 210 211 217 218 219 220 222 b 224 0 0 2 4 5 7 9 10 11 12 15 17 18 21 22 23 25 29 31 34 36 41 45 50 51 52 54 58 59 63 64 66 67 68 71 78 79 80 81 82 83 85 91 92 93 99 100 102 103 104 108 110 113 118 119 120 124 125 126 132 135 137 138 141 142 144 145 146 149 150 154 157 159 160 161 163 164 170 174 177 179 180 184 185 188 189 191 192 193 195 197 201 202 203 205 207 208 209 210 211 217 218 219 220 222 # 25710 difference c a 224 0 0 2 4 5 7 9 10 11 12 15 17 18 21 22 23 25 29 31 34 36 41 45 50 51 52 54 58 59 63 64 66 67 68 71 78 79 80 81 82 83 85 91 92 93 99 100 102 103 104 108 110 113 118 119 120 124 125 126 132 135 137 138 141 142 144 145 146 149 150 154 157 159 160 161 163 164 170 174 177 179 180 184 185 188 189 191 192 193 195 197 201 202 203 205 207 208 209 210 211 217 218 219 220 222 b 224 0 1 e # 25711 difference c a 224 0 0 0 6 7 9 10 11 12 13 14 15 16 17 18 19 21 24 25 30 35 36 40 43 47 50 54 55 60 62 64 66 70 72 73 75 77 78 80 81 82 85 89 90 93 95 96 100 102 103 106 108 109 110 111 112 113 115 116 122 128 129 130 131 133 136 138 139 140 141 142 143 144 146 147 148 151 152 155 157 160 161 162 164 166 167 168 169 170 171 172 173 175 176 178 179 182 187 196 198 200 201 203 205 208 213 214 215 217 218 222 223 b 224 0 0 0 6 7 9 10 11 12 13 14 15 16 17 18 19 21 24 25 30 35 36 40 43 47 50 54 55 60 62 64 66 70 72 73 75 77 78 80 81 82 85 89 90 93 95 96 100 102 103 106 108 109 110 111 112 113 115 116 122 128 129 130 131 133 136 138 139 140 141 142 143 144 146 147 148 151 152 155 157 160 161 162 164 166 167 168 169 170 171 172 173 175 176 178 179 182 187 196 198 200 201 203 205 208 213 214 215 217 218 222 223 # 25712 difference c a 224 0 0 0 6 7 9 10 11 12 13 14 15 16 17 18 19 21 24 25 30 35 36 40 43 47 50 54 55 60 62 64 66 70 72 73 75 77 78 80 81 82 85 89 90 93 95 96 100 102 103 106 108 109 110 111 112 113 115 116 122 128 129 130 131 133 136 138 139 140 141 142 143 144 146 147 148 151 152 155 157 160 161 162 164 166 167 168 169 170 171 172 173 175 176 178 179 182 187 196 198 200 201 203 205 208 213 214 215 217 218 222 223 b 224 0 1 f # 25713 difference c a 224 0 0 6 8 9 12 13 14 15 16 21 24 26 28 29 32 33 36 38 39 43 44 46 47 48 49 51 52 53 55 61 64 65 66 67 69 70 72 75 76 78 85 87 89 91 92 93 94 96 97 99 101 105 107 112 113 114 116 117 120 121 126 128 133 134 136 139 140 141 143 144 147 149 151 152 153 156 159 160 161 163 168 169 171 172 173 174 175 176 178 185 189 191 192 193 194 201 208 210 212 213 216 217 219 220 221 222 223 b 224 0 0 6 8 9 12 13 14 15 16 21 24 26 28 29 32 33 36 38 39 43 44 46 47 48 49 51 52 53 55 61 64 65 66 67 69 70 72 75 76 78 85 87 89 91 92 93 94 96 97 99 101 105 107 112 113 114 116 117 120 121 126 128 133 134 136 139 140 141 143 144 147 149 151 152 153 156 159 160 161 163 168 169 171 172 173 174 175 176 178 185 189 191 192 193 194 201 208 210 212 213 216 217 219 220 221 222 223 # 25714 difference c a 224 0 0 6 8 9 12 13 14 15 16 21 24 26 28 29 32 33 36 38 39 43 44 46 47 48 49 51 52 53 55 61 64 65 66 67 69 70 72 75 76 78 85 87 89 91 92 93 94 96 97 99 101 105 107 112 113 114 116 117 120 121 126 128 133 134 136 139 140 141 143 144 147 149 151 152 153 156 159 160 161 163 168 169 171 172 173 174 175 176 178 185 189 191 192 193 194 201 208 210 212 213 216 217 219 220 221 222 223 b 224 0 1 1 2 3 6 7 11 13 17 20 21 22 23 24 26 27 28 29 30 32 33 41 43 44 49 50 52 55 56 57 58 59 60 66 68 69 70 72 76 78 82 83 84 85 86 87 88 91 92 93 97 98 99 100 101 103 104 107 108 109 110 113 116 117 119 121 125 126 127 128 130 131 133 137 138 140 141 142 144 145 146 148 149 152 153 154 157 158 161 162 164 166 169 170 171 172 177 178 180 182 183 184 185 186 188 189 190 191 192 193 198 200 203 204 205 208 210 211 213 216 218 219 221 222 # 25715 difference c a 224 0 0 e b 224 0 0 e # 25716 difference c a 224 0 0 e b 224 1 0 e # 25717 difference c a 224 0 0 e b 224 0 0 e # 25718 difference c a 224 0 0 e b 224 1 0 f # 25719 difference c a 224 0 0 e b 224 0 0 e # 25720 difference c a 224 0 0 e b 224 1 0 2 3 8 9 11 16 18 22 24 25 29 30 31 34 35 36 37 39 40 42 44 47 48 50 52 53 54 55 59 62 64 65 67 68 70 72 73 74 75 78 80 81 82 83 85 86 87 88 90 93 94 96 97 98 101 102 105 107 108 110 111 112 113 122 123 130 131 132 133 137 144 145 146 148 150 152 153 157 159 160 162 163 164 169 170 172 174 175 176 179 180 185 186 188 191 193 194 198 200 201 202 203 205 206 211 212 213 216 218 221 223 # 25721 difference c a 224 0 0 f b 224 0 0 f # 25722 difference c a 224 0 0 f b 224 1 0 e # 25723 difference c a 224 0 0 f b 224 0 0 f # 25724 difference c a 224 0 0 f b 224 1 0 f # 25725 difference c a 224 0 0 f b 224 0 0 f # 25726 difference c a 224 0 0 f b 224 1 0 0 1 6 9 11 14 15 16 18 19 20 22 23 25 27 28 30 31 34 35 36 37 38 43 46 50 52 53 56 60 64 67 68 75 76 80 82 85 86 87 89 93 94 95 96 98 99 101 103 105 106 111 115 118 119 124 127 130 131 134 135 137 138 139 142 143 144 147 150 151 153 157 159 160 162 164 165 166 168 169 171 173 174 179 181 183 184 185 189 190 193 194 197 198 200 205 209 211 212 213 214 215 218 219 221 223 # 25727 difference c a 224 0 0 0 4 7 9 10 11 12 15 18 19 22 23 24 25 26 27 28 30 33 34 39 40 43 44 45 46 47 50 52 53 55 57 58 62 63 67 68 71 72 73 76 79 80 83 85 87 88 90 91 92 93 94 97 98 99 102 106 112 113 114 115 118 120 121 125 126 127 128 129 130 134 135 136 138 140 144 148 150 151 152 153 156 157 159 160 161 163 166 168 169 172 173 174 175 180 183 193 195 196 197 199 200 201 203 204 206 208 210 213 215 218 219 220 b 224 0 0 0 4 7 9 10 11 12 15 18 19 22 23 24 25 26 27 28 30 33 34 39 40 43 44 45 46 47 50 52 53 55 57 58 62 63 67 68 71 72 73 76 79 80 83 85 87 88 90 91 92 93 94 97 98 99 102 106 112 113 114 115 118 120 121 125 126 127 128 129 130 134 135 136 138 140 144 148 150 151 152 153 156 157 159 160 161 163 166 168 169 172 173 174 175 180 183 193 195 196 197 199 200 201 203 204 206 208 210 213 215 218 219 220 # 25728 difference c a 224 0 0 0 4 7 9 10 11 12 15 18 19 22 23 24 25 26 27 28 30 33 34 39 40 43 44 45 46 47 50 52 53 55 57 58 62 63 67 68 71 72 73 76 79 80 83 85 87 88 90 91 92 93 94 97 98 99 102 106 112 113 114 115 118 120 121 125 126 127 128 129 130 134 135 136 138 140 144 148 150 151 152 153 156 157 159 160 161 163 166 168 169 172 173 174 175 180 183 193 195 196 197 199 200 201 203 204 206 208 210 213 215 218 219 220 b 224 1 0 e # 25729 difference c a 224 0 0 0 3 5 6 9 10 13 15 16 21 23 26 29 30 35 36 42 44 47 49 51 52 53 55 56 61 62 63 66 68 69 70 71 76 77 80 81 82 83 86 88 89 90 91 92 93 94 103 104 105 106 108 110 111 112 113 118 119 121 122 124 125 129 130 131 133 135 136 140 143 144 145 148 156 157 158 160 162 168 169 170 171 172 173 175 176 177 179 180 182 184 187 190 192 193 194 197 200 203 205 206 207 209 210 213 214 218 219 221 b 224 0 0 0 3 5 6 9 10 13 15 16 21 23 26 29 30 35 36 42 44 47 49 51 52 53 55 56 61 62 63 66 68 69 70 71 76 77 80 81 82 83 86 88 89 90 91 92 93 94 103 104 105 106 108 110 111 112 113 118 119 121 122 124 125 129 130 131 133 135 136 140 143 144 145 148 156 157 158 160 162 168 169 170 171 172 173 175 176 177 179 180 182 184 187 190 192 193 194 197 200 203 205 206 207 209 210 213 214 218 219 221 # 25730 difference c a 224 0 0 0 3 5 6 9 10 13 15 16 21 23 26 29 30 35 36 42 44 47 49 51 52 53 55 56 61 62 63 66 68 69 70 71 76 77 80 81 82 83 86 88 89 90 91 92 93 94 103 104 105 106 108 110 111 112 113 118 119 121 122 124 125 129 130 131 133 135 136 140 143 144 145 148 156 157 158 160 162 168 169 170 171 172 173 175 176 177 179 180 182 184 187 190 192 193 194 197 200 203 205 206 207 209 210 213 214 218 219 221 b 224 1 0 f # 25731 difference c a 224 0 0 0 1 4 5 6 7 12 18 19 20 21 22 24 25 26 28 30 31 38 40 42 43 44 47 48 50 51 52 53 54 55 56 57 59 62 66 67 68 69 75 76 78 80 81 83 86 90 93 94 95 96 97 98 99 101 103 106 107 108 109 111 113 115 116 122 123 124 125 126 127 129 130 131 132 133 134 135 138 143 145 146 148 149 156 161 163 164 166 168 169 170 171 174 175 176 178 179 183 184 185 186 187 191 193 194 196 197 198 199 200 201 202 204 206 207 208 209 210 218 219 222 223 b 224 0 0 0 1 4 5 6 7 12 18 19 20 21 22 24 25 26 28 30 31 38 40 42 43 44 47 48 50 51 52 53 54 55 56 57 59 62 66 67 68 69 75 76 78 80 81 83 86 90 93 94 95 96 97 98 99 101 103 106 107 108 109 111 113 115 116 122 123 124 125 126 127 129 130 131 132 133 134 135 138 143 145 146 148 149 156 161 163 164 166 168 169 170 171 174 175 176 178 179 183 184 185 186 187 191 193 194 196 197 198 199 200 201 202 204 206 207 208 209 210 218 219 222 223 # 25732 difference c a 224 0 0 0 1 4 5 6 7 12 18 19 20 21 22 24 25 26 28 30 31 38 40 42 43 44 47 48 50 51 52 53 54 55 56 57 59 62 66 67 68 69 75 76 78 80 81 83 86 90 93 94 95 96 97 98 99 101 103 106 107 108 109 111 113 115 116 122 123 124 125 126 127 129 130 131 132 133 134 135 138 143 145 146 148 149 156 161 163 164 166 168 169 170 171 174 175 176 178 179 183 184 185 186 187 191 193 194 196 197 198 199 200 201 202 204 206 207 208 209 210 218 219 222 223 b 224 1 0 0 2 3 5 6 7 12 15 19 20 21 22 24 25 32 35 36 37 38 42 47 48 49 51 52 55 57 59 62 63 64 66 67 69 71 75 76 77 79 80 81 82 87 90 92 93 95 96 101 102 103 104 107 108 109 111 112 119 120 123 124 125 126 127 131 132 135 137 138 140 143 147 148 149 150 151 153 154 156 157 159 160 162 163 164 166 169 170 172 173 177 180 183 187 190 192 193 195 196 198 200 201 203 204 205 209 210 216 219 220 223 # 25733 difference c a 224 0 0 e b 224 0 0 e # 25734 difference c a 224 0 0 e b 224 1 1 e # 25735 difference c a 224 0 0 e b 224 0 0 e # 25736 difference c a 224 0 0 e b 224 1 1 f # 25737 difference c a 224 0 0 e b 224 0 0 e # 25738 difference c a 224 0 0 e b 224 1 1 2 4 5 7 9 10 12 21 22 28 32 33 35 36 37 40 43 45 46 47 51 54 56 58 59 60 61 62 63 64 67 69 70 75 79 80 81 83 84 87 88 96 97 98 100 101 102 103 106 107 110 112 115 116 117 118 120 122 124 127 128 131 134 135 138 139 140 141 143 144 146 147 152 157 163 164 165 166 169 172 174 175 176 177 181 183 184 185 188 189 190 195 199 202 204 205 206 207 208 211 213 214 216 218 219 221 # 25739 difference c a 224 0 0 f b 224 0 0 f # 25740 difference c a 224 0 0 f b 224 1 1 e # 25741 difference c a 224 0 0 f b 224 0 0 f # 25742 difference c a 224 0 0 f b 224 1 1 f # 25743 difference c a 224 0 0 f b 224 0 0 f # 25744 difference c a 224 0 0 f b 224 1 1 0 1 5 6 7 9 10 12 13 15 18 19 21 22 23 25 26 29 30 32 34 35 37 38 40 41 42 43 44 45 50 51 52 53 54 56 58 61 62 69 70 71 72 73 74 76 78 81 82 84 85 86 90 91 94 96 98 101 103 104 105 110 111 112 113 115 117 119 121 123 128 130 131 133 134 135 136 140 142 143 144 149 151 152 153 157 158 159 160 162 165 169 170 172 173 174 175 176 181 182 183 187 189 190 193 195 196 197 204 207 208 209 212 216 218 219 221 223 # 25745 difference c a 224 0 0 1 2 7 8 9 11 13 14 16 17 18 19 21 22 23 25 26 27 28 30 32 33 37 40 41 42 44 45 46 47 48 49 50 51 52 53 54 56 57 62 66 67 70 73 74 76 77 81 84 89 90 91 92 93 94 96 97 98 100 101 104 107 108 109 112 113 114 118 119 120 121 123 124 127 130 136 137 138 139 140 144 145 146 149 150 152 155 156 160 163 164 165 167 168 171 173 176 178 179 181 186 188 191 192 193 194 195 196 197 198 199 202 203 204 205 207 209 210 212 213 214 215 217 221 b 224 0 0 1 2 7 8 9 11 13 14 16 17 18 19 21 22 23 25 26 27 28 30 32 33 37 40 41 42 44 45 46 47 48 49 50 51 52 53 54 56 57 62 66 67 70 73 74 76 77 81 84 89 90 91 92 93 94 96 97 98 100 101 104 107 108 109 112 113 114 118 119 120 121 123 124 127 130 136 137 138 139 140 144 145 146 149 150 152 155 156 160 163 164 165 167 168 171 173 176 178 179 181 186 188 191 192 193 194 195 196 197 198 199 202 203 204 205 207 209 210 212 213 214 215 217 221 # 25746 difference c a 224 0 0 1 2 7 8 9 11 13 14 16 17 18 19 21 22 23 25 26 27 28 30 32 33 37 40 41 42 44 45 46 47 48 49 50 51 52 53 54 56 57 62 66 67 70 73 74 76 77 81 84 89 90 91 92 93 94 96 97 98 100 101 104 107 108 109 112 113 114 118 119 120 121 123 124 127 130 136 137 138 139 140 144 145 146 149 150 152 155 156 160 163 164 165 167 168 171 173 176 178 179 181 186 188 191 192 193 194 195 196 197 198 199 202 203 204 205 207 209 210 212 213 214 215 217 221 b 224 1 1 e # 25747 difference c a 224 0 0 0 1 3 4 5 6 10 14 15 17 19 20 21 22 24 26 27 28 29 31 32 35 39 40 42 45 46 47 48 50 53 54 55 56 58 59 62 64 69 70 72 73 76 79 80 81 83 84 85 86 87 89 90 91 95 96 97 100 103 105 110 118 119 121 122 127 129 131 132 133 134 136 137 143 144 145 147 148 150 152 154 156 159 160 162 163 165 167 168 169 173 175 178 180 181 182 183 186 187 188 190 191 192 193 194 195 196 197 198 200 202 203 204 205 206 209 210 212 213 214 215 217 218 219 221 222 223 b 224 0 0 0 1 3 4 5 6 10 14 15 17 19 20 21 22 24 26 27 28 29 31 32 35 39 40 42 45 46 47 48 50 53 54 55 56 58 59 62 64 69 70 72 73 76 79 80 81 83 84 85 86 87 89 90 91 95 96 97 100 103 105 110 118 119 121 122 127 129 131 132 133 134 136 137 143 144 145 147 148 150 152 154 156 159 160 162 163 165 167 168 169 173 175 178 180 181 182 183 186 187 188 190 191 192 193 194 195 196 197 198 200 202 203 204 205 206 209 210 212 213 214 215 217 218 219 221 222 223 # 25748 difference c a 224 0 0 0 1 3 4 5 6 10 14 15 17 19 20 21 22 24 26 27 28 29 31 32 35 39 40 42 45 46 47 48 50 53 54 55 56 58 59 62 64 69 70 72 73 76 79 80 81 83 84 85 86 87 89 90 91 95 96 97 100 103 105 110 118 119 121 122 127 129 131 132 133 134 136 137 143 144 145 147 148 150 152 154 156 159 160 162 163 165 167 168 169 173 175 178 180 181 182 183 186 187 188 190 191 192 193 194 195 196 197 198 200 202 203 204 205 206 209 210 212 213 214 215 217 218 219 221 222 223 b 224 1 1 f # 25749 difference c a 224 0 0 0 2 3 5 9 12 14 17 18 19 21 22 23 24 25 26 27 28 30 31 32 33 34 36 37 38 40 41 43 48 52 55 57 58 61 64 66 67 69 70 72 75 76 77 79 80 81 83 86 87 91 93 95 98 101 102 103 105 106 107 108 110 111 113 114 115 118 119 120 122 127 128 129 132 133 135 136 138 139 140 141 144 148 151 152 154 156 158 159 162 163 166 169 170 172 176 177 178 180 181 183 186 187 189 190 191 193 194 196 197 198 200 201 202 206 207 208 209 211 212 213 214 215 216 217 218 220 221 223 b 224 0 0 0 2 3 5 9 12 14 17 18 19 21 22 23 24 25 26 27 28 30 31 32 33 34 36 37 38 40 41 43 48 52 55 57 58 61 64 66 67 69 70 72 75 76 77 79 80 81 83 86 87 91 93 95 98 101 102 103 105 106 107 108 110 111 113 114 115 118 119 120 122 127 128 129 132 133 135 136 138 139 140 141 144 148 151 152 154 156 158 159 162 163 166 169 170 172 176 177 178 180 181 183 186 187 189 190 191 193 194 196 197 198 200 201 202 206 207 208 209 211 212 213 214 215 216 217 218 220 221 223 # 25750 difference c a 224 0 0 0 2 3 5 9 12 14 17 18 19 21 22 23 24 25 26 27 28 30 31 32 33 34 36 37 38 40 41 43 48 52 55 57 58 61 64 66 67 69 70 72 75 76 77 79 80 81 83 86 87 91 93 95 98 101 102 103 105 106 107 108 110 111 113 114 115 118 119 120 122 127 128 129 132 133 135 136 138 139 140 141 144 148 151 152 154 156 158 159 162 163 166 169 170 172 176 177 178 180 181 183 186 187 189 190 191 193 194 196 197 198 200 201 202 206 207 208 209 211 212 213 214 215 216 217 218 220 221 223 b 224 1 1 1 4 6 8 9 10 12 13 15 16 17 18 21 26 31 33 35 36 39 40 43 46 49 50 51 52 56 59 61 62 63 65 66 72 73 83 88 89 93 94 95 96 97 100 101 103 104 105 106 107 108 112 113 119 121 123 124 126 127 128 130 131 134 135 137 138 143 145 149 153 156 157 158 159 161 162 165 167 170 171 172 174 177 178 180 182 184 187 190 193 194 195 196 198 200 201 202 203 205 208 209 210 213 214 220 222 # 25751 difference c a 224 0 1 e b 224 0 1 e # 25752 difference c a 224 0 1 e b 224 0 0 e # 25753 difference c a 224 0 1 e b 224 0 1 e # 25754 difference c a 224 0 1 e b 224 0 0 f # 25755 difference c a 224 0 1 e b 224 0 1 e # 25756 difference c a 224 0 1 e b 224 0 0 1 3 5 8 11 12 13 15 16 19 21 23 27 28 31 34 35 41 45 51 55 56 57 58 59 60 61 62 65 66 67 68 72 74 78 80 81 85 86 89 92 93 94 96 97 99 100 103 104 110 113 115 116 122 123 130 132 135 137 139 140 141 144 145 146 147 150 152 153 157 162 164 165 168 171 174 177 182 183 184 189 190 194 195 197 202 203 204 205 208 209 210 212 213 215 221 222 # 25757 difference c a 224 0 1 f b 224 0 1 f # 25758 difference c a 224 0 1 f b 224 0 0 e # 25759 difference c a 224 0 1 f b 224 0 1 f # 25760 difference c a 224 0 1 f b 224 0 0 f # 25761 difference c a 224 0 1 f b 224 0 1 f # 25762 difference c a 224 0 1 f b 224 0 0 1 3 4 5 13 20 21 25 26 28 29 30 40 41 42 43 47 49 53 54 55 56 62 63 64 65 66 67 75 78 79 83 87 88 89 91 92 94 95 97 98 99 102 107 108 109 110 111 114 116 120 121 123 126 128 132 134 137 140 144 145 146 150 156 157 158 159 162 165 167 168 169 171 172 174 175 177 179 180 182 184 186 189 191 192 194 196 199 201 206 207 216 218 219 220 221 222 223 # 25763 difference c a 224 0 1 1 5 6 8 10 11 12 13 14 16 20 21 22 31 32 33 34 36 37 38 46 50 54 56 58 61 64 66 70 71 72 76 77 84 86 87 89 91 92 96 98 99 100 101 102 103 105 106 108 112 113 114 117 119 122 124 126 127 129 130 132 134 137 141 142 144 146 149 150 151 153 154 156 157 161 162 165 167 168 169 172 175 176 179 182 183 184 185 187 191 195 196 197 198 199 200 202 203 204 206 208 209 211 214 216 217 221 223 b 224 0 1 1 5 6 8 10 11 12 13 14 16 20 21 22 31 32 33 34 36 37 38 46 50 54 56 58 61 64 66 70 71 72 76 77 84 86 87 89 91 92 96 98 99 100 101 102 103 105 106 108 112 113 114 117 119 122 124 126 127 129 130 132 134 137 141 142 144 146 149 150 151 153 154 156 157 161 162 165 167 168 169 172 175 176 179 182 183 184 185 187 191 195 196 197 198 199 200 202 203 204 206 208 209 211 214 216 217 221 223 # 25764 difference c a 224 0 1 1 5 6 8 10 11 12 13 14 16 20 21 22 31 32 33 34 36 37 38 46 50 54 56 58 61 64 66 70 71 72 76 77 84 86 87 89 91 92 96 98 99 100 101 102 103 105 106 108 112 113 114 117 119 122 124 126 127 129 130 132 134 137 141 142 144 146 149 150 151 153 154 156 157 161 162 165 167 168 169 172 175 176 179 182 183 184 185 187 191 195 196 197 198 199 200 202 203 204 206 208 209 211 214 216 217 221 223 b 224 0 0 e # 25765 difference c a 224 0 1 0 1 2 3 5 6 9 10 13 14 15 16 18 19 21 24 26 35 37 38 39 40 41 42 43 44 45 46 48 49 52 53 54 57 58 61 62 63 65 68 71 74 76 77 78 79 80 84 86 89 90 91 92 94 95 100 101 104 105 107 108 110 114 116 117 118 120 124 129 130 132 135 137 138 139 141 143 149 150 154 158 159 161 163 165 166 168 171 173 174 177 178 179 180 184 185 186 189 192 198 199 200 202 203 205 207 208 210 211 212 213 216 218 221 222 b 224 0 1 0 1 2 3 5 6 9 10 13 14 15 16 18 19 21 24 26 35 37 38 39 40 41 42 43 44 45 46 48 49 52 53 54 57 58 61 62 63 65 68 71 74 76 77 78 79 80 84 86 89 90 91 92 94 95 100 101 104 105 107 108 110 114 116 117 118 120 124 129 130 132 135 137 138 139 141 143 149 150 154 158 159 161 163 165 166 168 171 173 174 177 178 179 180 184 185 186 189 192 198 199 200 202 203 205 207 208 210 211 212 213 216 218 221 222 # 25766 difference c a 224 0 1 0 1 2 3 5 6 9 10 13 14 15 16 18 19 21 24 26 35 37 38 39 40 41 42 43 44 45 46 48 49 52 53 54 57 58 61 62 63 65 68 71 74 76 77 78 79 80 84 86 89 90 91 92 94 95 100 101 104 105 107 108 110 114 116 117 118 120 124 129 130 132 135 137 138 139 141 143 149 150 154 158 159 161 163 165 166 168 171 173 174 177 178 179 180 184 185 186 189 192 198 199 200 202 203 205 207 208 210 211 212 213 216 218 221 222 b 224 0 0 f # 25767 difference c a 224 0 1 3 6 9 11 13 16 18 19 25 27 28 30 35 36 37 40 42 48 50 51 52 57 58 60 61 62 65 68 69 71 74 76 78 79 80 81 82 83 84 85 86 88 89 91 92 97 98 102 103 104 105 107 109 112 115 118 119 122 124 125 126 127 128 132 134 139 141 143 144 146 148 149 151 153 155 156 157 158 159 162 165 166 167 169 172 173 175 178 179 180 182 190 191 193 194 195 196 197 198 200 202 204 214 215 217 218 219 221 223 b 224 0 1 3 6 9 11 13 16 18 19 25 27 28 30 35 36 37 40 42 48 50 51 52 57 58 60 61 62 65 68 69 71 74 76 78 79 80 81 82 83 84 85 86 88 89 91 92 97 98 102 103 104 105 107 109 112 115 118 119 122 124 125 126 127 128 132 134 139 141 143 144 146 148 149 151 153 155 156 157 158 159 162 165 166 167 169 172 173 175 178 179 180 182 190 191 193 194 195 196 197 198 200 202 204 214 215 217 218 219 221 223 # 25768 difference c a 224 0 1 3 6 9 11 13 16 18 19 25 27 28 30 35 36 37 40 42 48 50 51 52 57 58 60 61 62 65 68 69 71 74 76 78 79 80 81 82 83 84 85 86 88 89 91 92 97 98 102 103 104 105 107 109 112 115 118 119 122 124 125 126 127 128 132 134 139 141 143 144 146 148 149 151 153 155 156 157 158 159 162 165 166 167 169 172 173 175 178 179 180 182 190 191 193 194 195 196 197 198 200 202 204 214 215 217 218 219 221 223 b 224 0 0 0 2 3 7 8 9 11 13 14 15 16 21 23 24 26 30 32 33 35 38 39 42 43 45 48 49 50 52 53 55 58 61 62 64 65 67 70 71 72 73 74 75 80 81 82 83 84 88 90 97 99 100 102 103 104 105 106 108 109 110 111 112 113 114 115 120 121 125 127 128 129 130 131 132 133 135 136 139 142 147 148 153 154 155 156 158 160 161 163 164 165 166 167 168 172 176 177 181 182 183 185 186 188 189 190 191 192 193 194 195 196 197 199 201 202 206 207 215 217 218 220 221 # 25769 difference c a 224 0 1 e b 224 0 1 e # 25770 difference c a 224 0 1 e b 224 0 1 e # 25771 difference c a 224 0 1 e b 224 0 1 e # 25772 difference c a 224 0 1 e b 224 0 1 f # 25773 difference c a 224 0 1 e b 224 0 1 e # 25774 difference c a 224 0 1 e b 224 0 1 0 5 7 8 11 12 14 15 16 19 20 21 22 24 25 29 30 32 34 36 37 38 39 42 43 45 46 53 55 56 57 60 63 64 66 67 69 75 76 78 80 85 87 88 89 91 93 95 96 98 102 103 108 110 111 112 114 115 118 120 122 124 127 128 129 133 135 137 139 141 142 143 145 146 148 149 150 151 153 162 163 165 167 168 169 170 171 172 174 175 177 180 184 188 189 195 197 199 202 204 205 207 208 209 211 212 215 216 217 219 221 223 # 25775 difference c a 224 0 1 f b 224 0 1 f # 25776 difference c a 224 0 1 f b 224 0 1 e # 25777 difference c a 224 0 1 f b 224 0 1 f # 25778 difference c a 224 0 1 f b 224 0 1 f # 25779 difference c a 224 0 1 f b 224 0 1 f # 25780 difference c a 224 0 1 f b 224 0 1 0 1 5 7 11 14 20 23 26 27 32 33 36 37 40 41 49 50 53 54 57 59 60 61 62 63 64 67 69 70 72 75 77 79 80 83 87 88 89 91 94 96 98 101 105 107 108 109 110 111 112 113 114 118 120 124 126 127 128 129 132 133 135 136 137 138 139 146 147 149 150 154 157 165 167 168 169 170 174 175 178 179 181 184 186 189 190 191 194 195 198 199 203 204 205 206 211 213 217 218 220 # 25781 difference c a 224 0 1 0 3 5 6 7 15 16 17 19 21 23 24 25 27 32 38 39 43 44 45 49 51 52 53 54 56 57 64 65 68 72 73 75 77 79 80 81 82 85 86 88 92 93 95 96 97 99 101 107 110 111 113 115 116 118 120 122 130 131 135 136 138 139 140 141 142 144 146 148 149 150 151 153 155 156 160 162 166 168 169 171 174 176 177 178 179 180 181 185 189 190 192 193 196 198 199 201 203 206 207 209 210 214 215 216 b 224 0 1 0 3 5 6 7 15 16 17 19 21 23 24 25 27 32 38 39 43 44 45 49 51 52 53 54 56 57 64 65 68 72 73 75 77 79 80 81 82 85 86 88 92 93 95 96 97 99 101 107 110 111 113 115 116 118 120 122 130 131 135 136 138 139 140 141 142 144 146 148 149 150 151 153 155 156 160 162 166 168 169 171 174 176 177 178 179 180 181 185 189 190 192 193 196 198 199 201 203 206 207 209 210 214 215 216 # 25782 difference c a 224 0 1 0 3 5 6 7 15 16 17 19 21 23 24 25 27 32 38 39 43 44 45 49 51 52 53 54 56 57 64 65 68 72 73 75 77 79 80 81 82 85 86 88 92 93 95 96 97 99 101 107 110 111 113 115 116 118 120 122 130 131 135 136 138 139 140 141 142 144 146 148 149 150 151 153 155 156 160 162 166 168 169 171 174 176 177 178 179 180 181 185 189 190 192 193 196 198 199 201 203 206 207 209 210 214 215 216 b 224 0 1 e # 25783 difference c a 224 0 1 0 1 2 3 6 7 11 12 14 18 19 20 21 22 23 26 30 35 36 38 44 45 47 50 52 54 56 57 58 62 63 64 66 67 69 71 72 73 75 76 77 78 80 83 84 87 89 90 91 93 94 96 97 100 101 103 104 105 110 112 115 116 117 120 126 130 131 134 135 136 142 146 151 152 153 156 157 165 169 170 171 173 174 175 177 178 179 182 185 186 188 193 194 195 196 199 202 205 207 208 210 212 214 215 220 221 222 b 224 0 1 0 1 2 3 6 7 11 12 14 18 19 20 21 22 23 26 30 35 36 38 44 45 47 50 52 54 56 57 58 62 63 64 66 67 69 71 72 73 75 76 77 78 80 83 84 87 89 90 91 93 94 96 97 100 101 103 104 105 110 112 115 116 117 120 126 130 131 134 135 136 142 146 151 152 153 156 157 165 169 170 171 173 174 175 177 178 179 182 185 186 188 193 194 195 196 199 202 205 207 208 210 212 214 215 220 221 222 # 25784 difference c a 224 0 1 0 1 2 3 6 7 11 12 14 18 19 20 21 22 23 26 30 35 36 38 44 45 47 50 52 54 56 57 58 62 63 64 66 67 69 71 72 73 75 76 77 78 80 83 84 87 89 90 91 93 94 96 97 100 101 103 104 105 110 112 115 116 117 120 126 130 131 134 135 136 142 146 151 152 153 156 157 165 169 170 171 173 174 175 177 178 179 182 185 186 188 193 194 195 196 199 202 205 207 208 210 212 214 215 220 221 222 b 224 0 1 f # 25785 difference c a 224 0 1 4 5 7 9 11 12 13 14 16 18 19 20 22 24 25 26 27 28 29 30 35 36 37 38 40 42 45 46 49 50 53 54 56 57 58 61 62 63 66 68 69 71 78 80 81 82 90 91 95 96 98 99 100 104 105 106 108 110 111 115 116 117 118 121 122 123 127 128 130 131 132 134 135 136 137 139 141 142 148 150 152 153 154 159 160 161 162 163 165 166 171 175 180 181 182 183 184 185 186 187 190 193 198 199 201 202 203 205 207 209 212 213 214 216 217 219 b 224 0 1 4 5 7 9 11 12 13 14 16 18 19 20 22 24 25 26 27 28 29 30 35 36 37 38 40 42 45 46 49 50 53 54 56 57 58 61 62 63 66 68 69 71 78 80 81 82 90 91 95 96 98 99 100 104 105 106 108 110 111 115 116 117 118 121 122 123 127 128 130 131 132 134 135 136 137 139 141 142 148 150 152 153 154 159 160 161 162 163 165 166 171 175 180 181 182 183 184 185 186 187 190 193 198 199 201 202 203 205 207 209 212 213 214 216 217 219 # 25786 difference c a 224 0 1 4 5 7 9 11 12 13 14 16 18 19 20 22 24 25 26 27 28 29 30 35 36 37 38 40 42 45 46 49 50 53 54 56 57 58 61 62 63 66 68 69 71 78 80 81 82 90 91 95 96 98 99 100 104 105 106 108 110 111 115 116 117 118 121 122 123 127 128 130 131 132 134 135 136 137 139 141 142 148 150 152 153 154 159 160 161 162 163 165 166 171 175 180 181 182 183 184 185 186 187 190 193 198 199 201 202 203 205 207 209 212 213 214 216 217 219 b 224 0 1 2 3 4 5 6 8 10 11 14 15 17 19 20 23 25 26 29 30 31 33 36 40 44 52 53 54 55 56 57 60 62 68 69 70 74 77 78 79 81 82 84 85 88 89 90 93 94 95 98 99 101 103 104 109 111 112 114 115 119 120 121 124 126 127 129 130 131 132 135 136 137 139 140 142 143 144 145 147 148 149 150 151 152 156 162 163 164 166 167 169 170 171 174 180 183 184 188 189 190 191 193 194 197 198 200 201 209 210 212 213 215 221 # 25787 difference c a 224 0 1 e b 224 0 1 e # 25788 difference c a 224 0 1 e b 224 1 0 e # 25789 difference c a 224 0 1 e b 224 0 1 e # 25790 difference c a 224 0 1 e b 224 1 0 f # 25791 difference c a 224 0 1 e b 224 0 1 e # 25792 difference c a 224 0 1 e b 224 1 0 0 2 3 4 5 7 9 10 11 15 17 20 22 24 26 29 30 31 34 38 39 41 43 45 47 48 49 50 51 53 57 60 64 67 68 70 75 76 77 78 79 81 83 84 85 86 87 88 91 92 93 94 100 102 108 112 113 115 118 120 122 125 126 127 132 134 138 140 141 142 143 144 154 155 157 159 161 163 164 168 169 170 171 172 173 175 177 178 179 182 183 184 185 189 191 192 193 194 195 197 200 203 205 206 208 209 211 214 216 218 223 # 25793 difference c a 224 0 1 f b 224 0 1 f # 25794 difference c a 224 0 1 f b 224 1 0 e # 25795 difference c a 224 0 1 f b 224 0 1 f # 25796 difference c a 224 0 1 f b 224 1 0 f # 25797 difference c a 224 0 1 f b 224 0 1 f # 25798 difference c a 224 0 1 f b 224 1 0 1 2 3 4 5 7 10 13 14 15 18 19 21 22 24 25 26 28 33 34 36 40 42 43 44 45 46 48 49 52 54 55 56 57 58 59 66 69 76 78 79 81 83 86 89 91 92 96 97 100 101 105 108 113 117 118 119 120 121 123 125 126 128 131 133 134 135 136 138 139 140 142 143 144 150 151 154 155 157 158 159 162 163 165 170 171 172 173 174 175 178 180 181 183 186 187 188 189 190 194 195 198 200 201 203 204 208 210 211 214 215 218 222 # 25799 difference c a 224 0 1 0 1 6 10 12 15 16 23 24 27 28 31 32 33 34 36 37 40 43 44 45 47 49 51 53 54 55 58 59 62 65 66 72 73 75 76 77 78 80 82 83 85 86 88 89 94 95 96 97 98 100 102 103 108 110 111 113 114 115 117 120 121 122 124 125 126 127 128 129 131 135 136 137 139 143 144 148 149 150 151 153 154 156 157 159 160 161 165 168 169 170 174 176 178 179 181 183 184 187 189 192 193 194 196 199 203 204 206 207 208 209 211 213 214 217 218 219 220 b 224 0 1 0 1 6 10 12 15 16 23 24 27 28 31 32 33 34 36 37 40 43 44 45 47 49 51 53 54 55 58 59 62 65 66 72 73 75 76 77 78 80 82 83 85 86 88 89 94 95 96 97 98 100 102 103 108 110 111 113 114 115 117 120 121 122 124 125 126 127 128 129 131 135 136 137 139 143 144 148 149 150 151 153 154 156 157 159 160 161 165 168 169 170 174 176 178 179 181 183 184 187 189 192 193 194 196 199 203 204 206 207 208 209 211 213 214 217 218 219 220 # 25800 difference c a 224 0 1 0 1 6 10 12 15 16 23 24 27 28 31 32 33 34 36 37 40 43 44 45 47 49 51 53 54 55 58 59 62 65 66 72 73 75 76 77 78 80 82 83 85 86 88 89 94 95 96 97 98 100 102 103 108 110 111 113 114 115 117 120 121 122 124 125 126 127 128 129 131 135 136 137 139 143 144 148 149 150 151 153 154 156 157 159 160 161 165 168 169 170 174 176 178 179 181 183 184 187 189 192 193 194 196 199 203 204 206 207 208 209 211 213 214 217 218 219 220 b 224 1 0 e # 25801 difference c a 224 0 1 2 4 8 9 11 12 15 16 17 18 20 22 25 29 30 31 36 37 38 45 48 49 50 51 53 55 57 59 60 61 65 66 69 70 71 72 73 76 77 78 80 81 84 90 91 95 97 99 100 101 102 103 104 107 108 111 114 115 116 120 124 127 130 134 136 139 143 144 146 147 148 149 154 155 156 157 158 161 162 163 165 167 168 169 170 176 177 180 182 184 185 187 188 192 196 197 199 201 203 205 206 207 208 211 212 214 215 218 219 b 224 0 1 2 4 8 9 11 12 15 16 17 18 20 22 25 29 30 31 36 37 38 45 48 49 50 51 53 55 57 59 60 61 65 66 69 70 71 72 73 76 77 78 80 81 84 90 91 95 97 99 100 101 102 103 104 107 108 111 114 115 116 120 124 127 130 134 136 139 143 144 146 147 148 149 154 155 156 157 158 161 162 163 165 167 168 169 170 176 177 180 182 184 185 187 188 192 196 197 199 201 203 205 206 207 208 211 212 214 215 218 219 # 25802 difference c a 224 0 1 2 4 8 9 11 12 15 16 17 18 20 22 25 29 30 31 36 37 38 45 48 49 50 51 53 55 57 59 60 61 65 66 69 70 71 72 73 76 77 78 80 81 84 90 91 95 97 99 100 101 102 103 104 107 108 111 114 115 116 120 124 127 130 134 136 139 143 144 146 147 148 149 154 155 156 157 158 161 162 163 165 167 168 169 170 176 177 180 182 184 185 187 188 192 196 197 199 201 203 205 206 207 208 211 212 214 215 218 219 b 224 1 0 f # 25803 difference c a 224 0 1 2 5 7 8 9 12 16 17 25 27 29 31 37 40 41 45 46 47 51 53 55 56 57 58 59 62 63 64 65 67 68 73 74 77 79 81 82 83 84 85 86 88 89 94 95 98 99 100 103 104 109 111 112 115 119 120 121 124 133 137 138 139 140 143 144 145 147 149 150 157 158 159 160 161 164 166 167 169 170 171 174 180 182 186 187 188 189 190 191 192 196 199 202 203 205 207 208 211 212 213 223 b 224 0 1 2 5 7 8 9 12 16 17 25 27 29 31 37 40 41 45 46 47 51 53 55 56 57 58 59 62 63 64 65 67 68 73 74 77 79 81 82 83 84 85 86 88 89 94 95 98 99 100 103 104 109 111 112 115 119 120 121 124 133 137 138 139 140 143 144 145 147 149 150 157 158 159 160 161 164 166 167 169 170 171 174 180 182 186 187 188 189 190 191 192 196 199 202 203 205 207 208 211 212 213 223 # 25804 difference c a 224 0 1 2 5 7 8 9 12 16 17 25 27 29 31 37 40 41 45 46 47 51 53 55 56 57 58 59 62 63 64 65 67 68 73 74 77 79 81 82 83 84 85 86 88 89 94 95 98 99 100 103 104 109 111 112 115 119 120 121 124 133 137 138 139 140 143 144 145 147 149 150 157 158 159 160 161 164 166 167 169 170 171 174 180 182 186 187 188 189 190 191 192 196 199 202 203 205 207 208 211 212 213 223 b 224 1 0 1 5 7 10 11 12 13 15 17 18 20 23 24 25 28 33 34 36 37 39 41 42 44 48 50 51 52 54 55 56 57 58 59 63 64 67 70 74 76 77 78 79 81 83 84 86 87 89 90 91 92 95 96 97 98 99 103 104 107 112 113 115 118 120 121 123 125 126 129 131 133 136 137 138 140 142 143 146 147 149 152 158 159 161 164 165 166 167 168 169 170 171 173 174 175 176 177 180 181 182 183 188 189 192 193 194 195 196 205 208 209 210 213 215 # 25805 difference c a 224 0 1 e b 224 0 1 e # 25806 difference c a 224 0 1 e b 224 1 1 e # 25807 difference c a 224 0 1 e b 224 0 1 e # 25808 difference c a 224 0 1 e b 224 1 1 f # 25809 difference c a 224 0 1 e b 224 0 1 e # 25810 difference c a 224 0 1 e b 224 1 1 3 4 5 7 9 12 13 14 18 19 22 24 25 26 30 31 33 34 36 39 40 41 43 47 48 50 51 53 56 62 63 65 67 68 70 71 74 75 76 77 78 81 83 85 86 91 92 94 95 97 98 101 103 105 108 110 112 114 117 118 124 125 127 128 135 137 138 140 141 142 143 144 145 148 150 153 156 157 159 160 164 165 166 169 170 172 173 175 177 178 181 183 184 185 186 187 188 190 191 192 194 195 196 197 200 202 203 204 210 211 215 218 219 220 222 # 25811 difference c a 224 0 1 f b 224 0 1 f # 25812 difference c a 224 0 1 f b 224 1 1 e # 25813 difference c a 224 0 1 f b 224 0 1 f # 25814 difference c a 224 0 1 f b 224 1 1 f # 25815 difference c a 224 0 1 f b 224 0 1 f # 25816 difference c a 224 0 1 f b 224 1 1 0 1 3 4 7 8 11 12 13 17 18 19 22 24 27 28 31 32 35 36 37 39 40 41 43 44 45 46 48 49 51 53 57 64 65 66 67 70 76 78 79 82 83 87 92 94 95 97 98 99 101 103 104 107 108 110 111 114 115 116 117 119 121 128 134 136 139 141 142 143 146 151 152 153 156 157 158 159 161 163 166 171 173 174 175 177 178 179 180 182 183 184 187 189 190 191 192 194 197 198 199 200 202 205 206 207 208 209 210 211 213 214 217 219 220 222 223 # 25817 difference c a 224 0 1 3 6 8 9 11 12 14 15 19 22 29 31 33 34 35 37 38 39 40 42 43 44 45 46 54 55 58 59 62 63 64 65 68 71 72 74 75 76 77 80 81 82 84 85 88 94 98 100 101 103 106 114 116 117 118 119 123 124 128 129 130 131 132 134 136 137 139 141 145 146 148 152 154 156 158 164 165 168 169 171 172 173 176 179 180 181 182 185 186 187 189 193 194 195 196 201 204 205 209 211 212 215 218 222 b 224 0 1 3 6 8 9 11 12 14 15 19 22 29 31 33 34 35 37 38 39 40 42 43 44 45 46 54 55 58 59 62 63 64 65 68 71 72 74 75 76 77 80 81 82 84 85 88 94 98 100 101 103 106 114 116 117 118 119 123 124 128 129 130 131 132 134 136 137 139 141 145 146 148 152 154 156 158 164 165 168 169 171 172 173 176 179 180 181 182 185 186 187 189 193 194 195 196 201 204 205 209 211 212 215 218 222 # 25818 difference c a 224 0 1 3 6 8 9 11 12 14 15 19 22 29 31 33 34 35 37 38 39 40 42 43 44 45 46 54 55 58 59 62 63 64 65 68 71 72 74 75 76 77 80 81 82 84 85 88 94 98 100 101 103 106 114 116 117 118 119 123 124 128 129 130 131 132 134 136 137 139 141 145 146 148 152 154 156 158 164 165 168 169 171 172 173 176 179 180 181 182 185 186 187 189 193 194 195 196 201 204 205 209 211 212 215 218 222 b 224 1 1 e # 25819 difference c a 224 0 1 1 3 4 5 8 9 11 12 13 16 19 20 21 22 23 25 30 37 40 41 43 44 47 48 50 51 54 58 60 61 62 63 67 69 72 73 75 77 78 82 84 85 86 88 89 90 91 92 93 94 97 99 100 101 104 105 107 109 111 116 118 119 122 126 134 135 137 138 139 140 145 146 148 149 156 158 163 164 166 167 169 170 172 174 176 177 178 179 183 184 185 188 190 197 199 200 201 202 203 205 211 212 214 217 218 221 222 223 b 224 0 1 1 3 4 5 8 9 11 12 13 16 19 20 21 22 23 25 30 37 40 41 43 44 47 48 50 51 54 58 60 61 62 63 67 69 72 73 75 77 78 82 84 85 86 88 89 90 91 92 93 94 97 99 100 101 104 105 107 109 111 116 118 119 122 126 134 135 137 138 139 140 145 146 148 149 156 158 163 164 166 167 169 170 172 174 176 177 178 179 183 184 185 188 190 197 199 200 201 202 203 205 211 212 214 217 218 221 222 223 # 25820 difference c a 224 0 1 1 3 4 5 8 9 11 12 13 16 19 20 21 22 23 25 30 37 40 41 43 44 47 48 50 51 54 58 60 61 62 63 67 69 72 73 75 77 78 82 84 85 86 88 89 90 91 92 93 94 97 99 100 101 104 105 107 109 111 116 118 119 122 126 134 135 137 138 139 140 145 146 148 149 156 158 163 164 166 167 169 170 172 174 176 177 178 179 183 184 185 188 190 197 199 200 201 202 203 205 211 212 214 217 218 221 222 223 b 224 1 1 f # 25821 difference c a 224 0 1 0 1 2 4 7 12 13 14 16 17 19 23 26 28 29 31 32 35 37 39 40 41 43 44 45 47 48 49 53 56 58 59 60 62 63 67 69 70 72 73 75 76 77 79 80 81 83 84 85 87 88 90 91 92 93 94 101 102 104 105 106 107 108 110 117 118 121 125 127 129 132 133 134 135 136 137 138 139 141 143 145 146 148 149 150 152 153 156 157 158 160 162 169 170 172 175 176 179 182 183 194 195 196 197 198 199 200 201 203 205 206 208 210 213 215 218 219 220 b 224 0 1 0 1 2 4 7 12 13 14 16 17 19 23 26 28 29 31 32 35 37 39 40 41 43 44 45 47 48 49 53 56 58 59 60 62 63 67 69 70 72 73 75 76 77 79 80 81 83 84 85 87 88 90 91 92 93 94 101 102 104 105 106 107 108 110 117 118 121 125 127 129 132 133 134 135 136 137 138 139 141 143 145 146 148 149 150 152 153 156 157 158 160 162 169 170 172 175 176 179 182 183 194 195 196 197 198 199 200 201 203 205 206 208 210 213 215 218 219 220 # 25822 difference c a 224 0 1 0 1 2 4 7 12 13 14 16 17 19 23 26 28 29 31 32 35 37 39 40 41 43 44 45 47 48 49 53 56 58 59 60 62 63 67 69 70 72 73 75 76 77 79 80 81 83 84 85 87 88 90 91 92 93 94 101 102 104 105 106 107 108 110 117 118 121 125 127 129 132 133 134 135 136 137 138 139 141 143 145 146 148 149 150 152 153 156 157 158 160 162 169 170 172 175 176 179 182 183 194 195 196 197 198 199 200 201 203 205 206 208 210 213 215 218 219 220 b 224 1 1 0 1 2 4 5 7 8 9 10 12 15 16 18 22 23 24 25 26 30 33 34 36 39 41 42 43 46 48 49 52 55 59 60 61 63 64 65 75 76 79 80 81 83 85 86 87 89 90 91 92 93 94 95 96 100 102 104 121 124 126 127 128 132 133 134 137 138 139 143 144 145 147 148 153 160 161 162 164 166 167 169 170 171 173 174 175 176 177 178 179 182 183 187 188 189 191 192 193 199 202 205 207 208 210 212 213 217 220 221 222 # 25823 difference c a 224 1 0 e b 224 1 0 e # 25824 difference c a 224 1 0 e b 224 0 0 e # 25825 difference c a 224 1 0 e b 224 1 0 e # 25826 difference c a 224 1 0 e b 224 0 0 f # 25827 difference c a 224 1 0 e b 224 1 0 e # 25828 difference c a 224 1 0 e b 224 0 0 0 2 7 8 11 12 13 14 15 17 18 22 23 24 26 27 28 29 31 34 35 36 41 47 50 51 53 56 59 62 63 64 65 68 69 70 72 74 76 78 81 82 83 84 87 88 89 90 95 97 100 102 104 105 106 107 108 109 112 116 117 119 120 121 123 126 127 130 131 132 133 135 138 140 142 143 150 155 156 158 159 160 161 162 163 166 167 168 169 171 172 176 177 178 181 182 183 184 185 186 187 190 191 193 194 195 198 199 202 204 206 207 208 213 214 216 217 218 221 # 25829 difference c a 224 1 0 f b 224 1 0 f # 25830 difference c a 224 1 0 f b 224 0 0 e # 25831 difference c a 224 1 0 f b 224 1 0 f # 25832 difference c a 224 1 0 f b 224 0 0 f # 25833 difference c a 224 1 0 f b 224 1 0 f # 25834 difference c a 224 1 0 f b 224 0 0 1 3 5 6 7 10 11 12 13 14 15 17 18 20 21 22 23 24 25 27 31 33 34 35 36 38 39 40 41 42 43 45 47 48 51 53 54 56 57 61 63 65 66 69 75 76 77 78 79 81 83 84 86 87 90 91 92 94 97 98 99 101 103 106 109 110 112 115 116 119 122 124 126 127 129 130 131 132 133 134 135 137 139 144 146 148 152 154 155 156 157 158 159 162 167 170 171 172 173 174 177 178 184 188 189 194 195 196 197 198 199 201 202 204 205 206 208 209 213 214 215 217 220 221 222 # 25835 difference c a 224 1 0 3 6 7 9 11 13 16 17 19 20 22 23 29 30 31 34 35 36 37 38 39 42 43 47 48 49 50 51 52 53 54 57 59 60 62 71 72 74 75 77 78 80 81 83 84 85 86 88 91 92 96 97 99 101 102 104 110 114 117 118 125 128 129 132 133 135 137 139 140 147 150 151 154 155 156 159 162 166 167 170 175 177 178 179 181 183 184 186 187 188 189 190 193 194 195 197 198 200 201 202 207 212 213 215 217 218 220 221 222 b 224 1 0 3 6 7 9 11 13 16 17 19 20 22 23 29 30 31 34 35 36 37 38 39 42 43 47 48 49 50 51 52 53 54 57 59 60 62 71 72 74 75 77 78 80 81 83 84 85 86 88 91 92 96 97 99 101 102 104 110 114 117 118 125 128 129 132 133 135 137 139 140 147 150 151 154 155 156 159 162 166 167 170 175 177 178 179 181 183 184 186 187 188 189 190 193 194 195 197 198 200 201 202 207 212 213 215 217 218 220 221 222 # 25836 difference c a 224 1 0 3 6 7 9 11 13 16 17 19 20 22 23 29 30 31 34 35 36 37 38 39 42 43 47 48 49 50 51 52 53 54 57 59 60 62 71 72 74 75 77 78 80 81 83 84 85 86 88 91 92 96 97 99 101 102 104 110 114 117 118 125 128 129 132 133 135 137 139 140 147 150 151 154 155 156 159 162 166 167 170 175 177 178 179 181 183 184 186 187 188 189 190 193 194 195 197 198 200 201 202 207 212 213 215 217 218 220 221 222 b 224 0 0 e # 25837 difference c a 224 1 0 1 3 9 10 11 16 17 18 19 20 22 25 26 29 30 31 32 34 36 37 38 40 41 42 46 47 49 50 52 54 57 59 60 62 63 66 69 74 75 76 78 82 84 85 88 89 90 91 93 94 95 97 98 99 103 104 105 106 107 111 112 114 115 123 124 128 130 132 135 138 139 140 143 144 146 148 149 150 156 157 159 164 165 167 168 170 171 172 175 176 179 184 186 192 194 197 202 203 206 208 209 210 211 215 216 219 221 b 224 1 0 1 3 9 10 11 16 17 18 19 20 22 25 26 29 30 31 32 34 36 37 38 40 41 42 46 47 49 50 52 54 57 59 60 62 63 66 69 74 75 76 78 82 84 85 88 89 90 91 93 94 95 97 98 99 103 104 105 106 107 111 112 114 115 123 124 128 130 132 135 138 139 140 143 144 146 148 149 150 156 157 159 164 165 167 168 170 171 172 175 176 179 184 186 192 194 197 202 203 206 208 209 210 211 215 216 219 221 # 25838 difference c a 224 1 0 1 3 9 10 11 16 17 18 19 20 22 25 26 29 30 31 32 34 36 37 38 40 41 42 46 47 49 50 52 54 57 59 60 62 63 66 69 74 75 76 78 82 84 85 88 89 90 91 93 94 95 97 98 99 103 104 105 106 107 111 112 114 115 123 124 128 130 132 135 138 139 140 143 144 146 148 149 150 156 157 159 164 165 167 168 170 171 172 175 176 179 184 186 192 194 197 202 203 206 208 209 210 211 215 216 219 221 b 224 0 0 f # 25839 difference c a 224 1 0 2 6 9 11 15 18 24 25 28 29 31 32 38 39 40 42 47 51 52 53 56 58 65 67 70 73 75 77 78 79 80 81 82 83 84 85 89 90 91 94 95 98 99 100 101 102 104 107 109 110 112 114 115 119 122 124 125 129 130 131 132 133 139 142 144 145 152 153 154 156 158 159 161 162 163 164 168 169 170 173 174 175 176 177 182 185 186 188 195 197 200 203 206 211 212 214 216 217 219 221 b 224 1 0 2 6 9 11 15 18 24 25 28 29 31 32 38 39 40 42 47 51 52 53 56 58 65 67 70 73 75 77 78 79 80 81 82 83 84 85 89 90 91 94 95 98 99 100 101 102 104 107 109 110 112 114 115 119 122 124 125 129 130 131 132 133 139 142 144 145 152 153 154 156 158 159 161 162 163 164 168 169 170 173 174 175 176 177 182 185 186 188 195 197 200 203 206 211 212 214 216 217 219 221 # 25840 difference c a 224 1 0 2 6 9 11 15 18 24 25 28 29 31 32 38 39 40 42 47 51 52 53 56 58 65 67 70 73 75 77 78 79 80 81 82 83 84 85 89 90 91 94 95 98 99 100 101 102 104 107 109 110 112 114 115 119 122 124 125 129 130 131 132 133 139 142 144 145 152 153 154 156 158 159 161 162 163 164 168 169 170 173 174 175 176 177 182 185 186 188 195 197 200 203 206 211 212 214 216 217 219 221 b 224 0 0 0 5 6 7 8 10 13 15 17 19 25 30 32 34 37 40 45 48 49 53 57 58 59 61 67 69 70 72 74 77 78 80 82 83 84 88 93 95 97 98 99 100 101 102 103 105 106 107 108 109 112 113 115 117 121 123 124 125 126 128 129 131 135 136 139 141 144 145 147 148 149 152 153 155 156 159 160 164 165 167 169 171 173 174 180 183 185 187 188 189 190 191 195 197 198 199 203 204 208 210 211 212 216 217 219 220 221 222 223 # 25841 difference c a 224 1 0 e b 224 1 0 e # 25842 difference c a 224 1 0 e b 224 0 1 e # 25843 difference c a 224 1 0 e b 224 1 0 e # 25844 difference c a 224 1 0 e b 224 0 1 f # 25845 difference c a 224 1 0 e b 224 1 0 e # 25846 difference c a 224 1 0 e b 224 0 1 2 5 7 8 9 10 11 13 15 18 22 25 27 28 30 32 33 34 36 37 38 39 40 41 42 43 44 46 49 50 51 52 57 62 66 67 69 70 76 80 83 84 85 88 90 92 94 95 96 98 101 102 103 105 106 107 112 118 119 120 123 124 125 126 127 129 131 135 138 140 141 142 143 145 147 149 150 153 156 157 160 161 165 166 169 170 172 173 174 176 178 181 182 183 184 185 187 188 189 191 192 194 195 197 200 202 205 206 207 208 209 213 214 216 218 219 220 222 223 # 25847 difference c a 224 1 0 f b 224 1 0 f # 25848 difference c a 224 1 0 f b 224 0 1 e # 25849 difference c a 224 1 0 f b 224 1 0 f # 25850 difference c a 224 1 0 f b 224 0 1 f # 25851 difference c a 224 1 0 f b 224 1 0 f # 25852 difference c a 224 1 0 f b 224 0 1 0 1 2 3 4 8 10 11 12 13 14 15 19 29 32 33 37 38 39 40 41 42 43 44 45 46 54 55 56 57 60 61 63 64 65 67 70 73 75 76 80 82 84 87 89 90 99 100 103 105 106 111 112 115 116 122 123 124 125 126 130 135 136 138 144 146 148 150 152 154 155 157 159 163 168 170 172 173 175 180 181 182 183 185 186 187 188 190 191 194 195 196 200 202 203 207 208 209 211 212 213 214 216 217 220 # 25853 difference c a 224 1 0 5 6 10 12 19 21 24 26 27 28 33 35 36 39 40 44 45 46 47 50 51 54 55 56 57 58 60 61 62 64 69 72 73 74 75 76 77 78 79 80 81 82 84 85 87 89 92 93 94 95 99 101 102 104 105 106 109 114 116 117 120 122 123 125 126 127 129 131 132 134 137 138 139 140 144 145 146 147 148 149 151 154 155 157 158 159 160 164 166 167 169 170 173 176 178 179 182 183 185 186 187 188 192 193 194 197 199 200 205 206 208 209 212 214 217 219 221 223 b 224 1 0 5 6 10 12 19 21 24 26 27 28 33 35 36 39 40 44 45 46 47 50 51 54 55 56 57 58 60 61 62 64 69 72 73 74 75 76 77 78 79 80 81 82 84 85 87 89 92 93 94 95 99 101 102 104 105 106 109 114 116 117 120 122 123 125 126 127 129 131 132 134 137 138 139 140 144 145 146 147 148 149 151 154 155 157 158 159 160 164 166 167 169 170 173 176 178 179 182 183 185 186 187 188 192 193 194 197 199 200 205 206 208 209 212 214 217 219 221 223 # 25854 difference c a 224 1 0 5 6 10 12 19 21 24 26 27 28 33 35 36 39 40 44 45 46 47 50 51 54 55 56 57 58 60 61 62 64 69 72 73 74 75 76 77 78 79 80 81 82 84 85 87 89 92 93 94 95 99 101 102 104 105 106 109 114 116 117 120 122 123 125 126 127 129 131 132 134 137 138 139 140 144 145 146 147 148 149 151 154 155 157 158 159 160 164 166 167 169 170 173 176 178 179 182 183 185 186 187 188 192 193 194 197 199 200 205 206 208 209 212 214 217 219 221 223 b 224 0 1 e # 25855 difference c a 224 1 0 0 5 10 13 14 17 22 28 29 31 33 34 35 36 40 42 43 47 49 51 57 58 60 69 70 76 84 86 89 90 91 93 95 99 102 104 106 107 108 111 112 116 118 123 126 127 128 132 134 136 137 140 143 144 145 147 149 151 154 155 156 157 158 159 164 165 166 168 169 170 171 177 179 180 181 182 185 188 189 194 195 202 203 204 209 211 212 215 222 223 b 224 1 0 0 5 10 13 14 17 22 28 29 31 33 34 35 36 40 42 43 47 49 51 57 58 60 69 70 76 84 86 89 90 91 93 95 99 102 104 106 107 108 111 112 116 118 123 126 127 128 132 134 136 137 140 143 144 145 147 149 151 154 155 156 157 158 159 164 165 166 168 169 170 171 177 179 180 181 182 185 188 189 194 195 202 203 204 209 211 212 215 222 223 # 25856 difference c a 224 1 0 0 5 10 13 14 17 22 28 29 31 33 34 35 36 40 42 43 47 49 51 57 58 60 69 70 76 84 86 89 90 91 93 95 99 102 104 106 107 108 111 112 116 118 123 126 127 128 132 134 136 137 140 143 144 145 147 149 151 154 155 156 157 158 159 164 165 166 168 169 170 171 177 179 180 181 182 185 188 189 194 195 202 203 204 209 211 212 215 222 223 b 224 0 1 f # 25857 difference c a 224 1 0 0 1 2 6 7 8 9 10 11 17 19 21 22 23 27 28 31 32 37 38 40 41 42 43 44 48 49 52 54 55 58 62 66 67 69 71 74 78 81 82 85 87 88 89 90 93 94 95 97 98 101 103 107 108 113 114 116 117 119 120 126 128 129 130 132 135 136 137 138 139 141 144 146 147 153 155 156 159 163 164 165 166 167 168 169 170 172 174 175 177 179 180 181 182 184 187 188 190 192 200 201 203 207 208 209 211 212 215 216 217 219 223 b 224 1 0 0 1 2 6 7 8 9 10 11 17 19 21 22 23 27 28 31 32 37 38 40 41 42 43 44 48 49 52 54 55 58 62 66 67 69 71 74 78 81 82 85 87 88 89 90 93 94 95 97 98 101 103 107 108 113 114 116 117 119 120 126 128 129 130 132 135 136 137 138 139 141 144 146 147 153 155 156 159 163 164 165 166 167 168 169 170 172 174 175 177 179 180 181 182 184 187 188 190 192 200 201 203 207 208 209 211 212 215 216 217 219 223 # 25858 difference c a 224 1 0 0 1 2 6 7 8 9 10 11 17 19 21 22 23 27 28 31 32 37 38 40 41 42 43 44 48 49 52 54 55 58 62 66 67 69 71 74 78 81 82 85 87 88 89 90 93 94 95 97 98 101 103 107 108 113 114 116 117 119 120 126 128 129 130 132 135 136 137 138 139 141 144 146 147 153 155 156 159 163 164 165 166 167 168 169 170 172 174 175 177 179 180 181 182 184 187 188 190 192 200 201 203 207 208 209 211 212 215 216 217 219 223 b 224 0 1 3 4 5 6 7 8 11 12 13 14 15 16 18 19 20 22 23 24 26 29 31 33 34 37 38 43 45 46 51 52 54 55 58 59 62 63 64 65 70 71 72 73 74 76 78 80 83 85 87 90 91 92 93 94 95 96 101 102 104 105 107 114 115 118 119 120 121 122 123 124 125 127 129 130 131 132 133 134 135 136 138 139 140 141 147 148 150 151 153 156 157 158 160 161 162 164 165 167 169 170 172 173 177 179 180 182 190 191 193 196 197 200 201 203 204 205 208 209 211 213 214 215 220 221 # 25859 difference c a 224 1 0 e b 224 1 0 e # 25860 difference c a 224 1 0 e b 224 1 0 e # 25861 difference c a 224 1 0 e b 224 1 0 e # 25862 difference c a 224 1 0 e b 224 1 0 f # 25863 difference c a 224 1 0 e b 224 1 0 e # 25864 difference c a 224 1 0 e b 224 1 0 0 1 2 4 6 15 17 18 20 21 23 29 30 32 33 34 35 36 40 43 44 45 46 48 49 50 53 55 57 58 59 60 61 63 65 66 69 70 78 79 80 85 87 88 90 91 92 94 97 98 99 100 101 102 104 106 112 113 114 116 119 122 124 125 126 127 129 130 132 133 135 136 138 140 142 143 144 145 147 149 151 155 156 158 161 162 163 166 169 170 172 173 174 175 176 178 180 182 190 191 192 193 194 196 198 201 202 204 205 207 208 209 211 215 219 220 222 223 # 25865 difference c a 224 1 0 f b 224 1 0 f # 25866 difference c a 224 1 0 f b 224 1 0 e # 25867 difference c a 224 1 0 f b 224 1 0 f # 25868 difference c a 224 1 0 f b 224 1 0 f # 25869 difference c a 224 1 0 f b 224 1 0 f # 25870 difference c a 224 1 0 f b 224 1 0 0 3 4 12 13 15 16 18 19 20 22 24 25 29 36 37 38 39 40 43 44 46 47 48 49 50 51 54 55 59 61 62 63 67 68 69 70 71 74 76 77 78 79 80 81 87 88 89 91 94 95 96 97 98 99 100 101 102 104 105 107 108 111 113 114 120 121 125 127 128 129 130 131 132 135 137 139 141 142 144 145 146 148 150 151 152 153 156 157 159 160 161 162 167 168 169 170 172 174 175 177 180 181 183 184 185 187 190 193 194 195 197 198 200 204 208 211 213 214 219 220 # 25871 difference c a 224 1 0 1 3 4 5 6 7 12 14 15 16 18 20 21 22 24 27 28 29 30 32 35 39 40 41 45 49 50 52 53 54 55 60 62 63 64 65 67 69 70 71 72 73 75 76 77 80 81 84 87 89 93 95 96 97 98 100 101 104 105 107 109 110 112 114 116 117 120 121 122 123 124 125 126 127 128 129 130 132 134 136 142 143 144 149 150 152 162 163 165 169 170 172 173 175 177 179 180 181 182 183 187 191 192 193 194 196 198 199 200 201 203 205 206 207 208 209 211 212 214 216 217 221 222 b 224 1 0 1 3 4 5 6 7 12 14 15 16 18 20 21 22 24 27 28 29 30 32 35 39 40 41 45 49 50 52 53 54 55 60 62 63 64 65 67 69 70 71 72 73 75 76 77 80 81 84 87 89 93 95 96 97 98 100 101 104 105 107 109 110 112 114 116 117 120 121 122 123 124 125 126 127 128 129 130 132 134 136 142 143 144 149 150 152 162 163 165 169 170 172 173 175 177 179 180 181 182 183 187 191 192 193 194 196 198 199 200 201 203 205 206 207 208 209 211 212 214 216 217 221 222 # 25872 difference c a 224 1 0 1 3 4 5 6 7 12 14 15 16 18 20 21 22 24 27 28 29 30 32 35 39 40 41 45 49 50 52 53 54 55 60 62 63 64 65 67 69 70 71 72 73 75 76 77 80 81 84 87 89 93 95 96 97 98 100 101 104 105 107 109 110 112 114 116 117 120 121 122 123 124 125 126 127 128 129 130 132 134 136 142 143 144 149 150 152 162 163 165 169 170 172 173 175 177 179 180 181 182 183 187 191 192 193 194 196 198 199 200 201 203 205 206 207 208 209 211 212 214 216 217 221 222 b 224 1 0 e # 25873 difference c a 224 1 0 0 1 4 7 8 9 10 12 13 15 16 17 18 19 21 23 24 25 32 33 34 35 38 41 42 44 45 48 51 52 54 55 58 59 62 65 67 68 70 73 76 77 78 80 81 83 86 87 88 89 94 95 100 105 107 108 111 113 114 115 121 127 129 130 137 141 142 144 145 149 150 152 154 158 159 160 161 165 166 167 168 171 176 177 178 182 184 185 188 191 195 197 198 199 202 206 210 211 212 214 215 218 220 b 224 1 0 0 1 4 7 8 9 10 12 13 15 16 17 18 19 21 23 24 25 32 33 34 35 38 41 42 44 45 48 51 52 54 55 58 59 62 65 67 68 70 73 76 77 78 80 81 83 86 87 88 89 94 95 100 105 107 108 111 113 114 115 121 127 129 130 137 141 142 144 145 149 150 152 154 158 159 160 161 165 166 167 168 171 176 177 178 182 184 185 188 191 195 197 198 199 202 206 210 211 212 214 215 218 220 # 25874 difference c a 224 1 0 0 1 4 7 8 9 10 12 13 15 16 17 18 19 21 23 24 25 32 33 34 35 38 41 42 44 45 48 51 52 54 55 58 59 62 65 67 68 70 73 76 77 78 80 81 83 86 87 88 89 94 95 100 105 107 108 111 113 114 115 121 127 129 130 137 141 142 144 145 149 150 152 154 158 159 160 161 165 166 167 168 171 176 177 178 182 184 185 188 191 195 197 198 199 202 206 210 211 212 214 215 218 220 b 224 1 0 f # 25875 difference c a 224 1 0 0 3 6 7 8 9 13 14 15 20 24 27 29 33 35 41 43 44 48 49 50 51 53 54 59 61 62 64 69 70 71 77 80 82 85 86 91 98 99 101 102 103 104 106 110 112 113 114 115 116 117 121 122 123 124 128 131 132 134 135 137 139 142 143 144 145 146 147 150 151 153 157 158 159 160 162 163 165 166 167 170 171 172 173 174 175 177 179 182 186 187 188 190 191 192 193 194 197 199 201 202 204 206 212 213 214 217 221 223 b 224 1 0 0 3 6 7 8 9 13 14 15 20 24 27 29 33 35 41 43 44 48 49 50 51 53 54 59 61 62 64 69 70 71 77 80 82 85 86 91 98 99 101 102 103 104 106 110 112 113 114 115 116 117 121 122 123 124 128 131 132 134 135 137 139 142 143 144 145 146 147 150 151 153 157 158 159 160 162 163 165 166 167 170 171 172 173 174 175 177 179 182 186 187 188 190 191 192 193 194 197 199 201 202 204 206 212 213 214 217 221 223 # 25876 difference c a 224 1 0 0 3 6 7 8 9 13 14 15 20 24 27 29 33 35 41 43 44 48 49 50 51 53 54 59 61 62 64 69 70 71 77 80 82 85 86 91 98 99 101 102 103 104 106 110 112 113 114 115 116 117 121 122 123 124 128 131 132 134 135 137 139 142 143 144 145 146 147 150 151 153 157 158 159 160 162 163 165 166 167 170 171 172 173 174 175 177 179 182 186 187 188 190 191 192 193 194 197 199 201 202 204 206 212 213 214 217 221 223 b 224 1 0 0 7 9 10 13 15 17 20 22 23 24 31 32 35 36 38 41 42 43 44 46 48 49 50 51 53 54 56 57 61 68 69 70 72 76 78 79 86 91 92 93 94 102 103 104 111 112 113 115 116 117 121 122 125 127 129 130 133 135 136 137 141 143 146 150 151 152 153 154 156 159 163 164 165 166 167 168 172 173 178 179 181 186 188 193 196 197 199 201 202 204 206 207 209 210 211 215 216 219 220 # 25877 difference c a 224 1 0 e b 224 1 0 e # 25878 difference c a 224 1 0 e b 224 1 1 e # 25879 difference c a 224 1 0 e b 224 1 0 e # 25880 difference c a 224 1 0 e b 224 1 1 f # 25881 difference c a 224 1 0 e b 224 1 0 e # 25882 difference c a 224 1 0 e b 224 1 1 2 3 6 7 9 10 11 12 13 14 17 19 20 21 22 23 28 29 31 34 35 37 39 42 45 46 47 50 53 55 56 57 59 61 62 63 64 65 69 71 73 75 76 80 82 84 85 87 88 89 90 94 98 99 102 103 106 107 108 111 113 116 117 119 122 123 124 125 127 130 131 132 134 135 136 137 138 140 146 150 151 152 153 154 156 160 164 170 172 174 175 176 177 179 182 183 188 189 190 194 195 196 199 200 203 204 205 206 208 209 211 214 216 218 222 223 # 25883 difference c a 224 1 0 f b 224 1 0 f # 25884 difference c a 224 1 0 f b 224 1 1 e # 25885 difference c a 224 1 0 f b 224 1 0 f # 25886 difference c a 224 1 0 f b 224 1 1 f # 25887 difference c a 224 1 0 f b 224 1 0 f # 25888 difference c a 224 1 0 f b 224 1 1 0 1 2 8 9 12 13 14 16 20 22 24 26 28 29 31 32 33 37 38 39 46 48 51 52 55 56 59 65 66 67 69 70 71 72 76 77 79 81 83 85 86 87 88 89 90 95 96 98 100 103 104 105 108 109 111 112 113 114 115 117 118 120 121 122 124 127 129 133 136 137 138 141 144 150 151 152 155 156 158 162 163 168 169 170 172 174 175 176 177 178 179 181 182 187 188 192 193 202 211 212 214 # 25889 difference c a 224 1 0 1 3 5 6 7 9 11 14 15 16 19 22 23 24 28 29 33 34 35 36 37 40 41 42 43 45 46 47 50 51 52 53 54 56 57 58 59 60 62 65 66 68 71 74 79 80 84 86 87 89 90 91 92 93 96 99 100 101 103 107 108 109 110 114 117 119 120 121 122 123 124 125 126 131 133 134 135 136 138 139 141 143 144 146 151 153 154 155 156 157 161 163 166 168 169 174 176 177 178 179 182 185 189 191 192 193 196 198 199 200 201 202 205 206 208 209 214 216 218 223 b 224 1 0 1 3 5 6 7 9 11 14 15 16 19 22 23 24 28 29 33 34 35 36 37 40 41 42 43 45 46 47 50 51 52 53 54 56 57 58 59 60 62 65 66 68 71 74 79 80 84 86 87 89 90 91 92 93 96 99 100 101 103 107 108 109 110 114 117 119 120 121 122 123 124 125 126 131 133 134 135 136 138 139 141 143 144 146 151 153 154 155 156 157 161 163 166 168 169 174 176 177 178 179 182 185 189 191 192 193 196 198 199 200 201 202 205 206 208 209 214 216 218 223 # 25890 difference c a 224 1 0 1 3 5 6 7 9 11 14 15 16 19 22 23 24 28 29 33 34 35 36 37 40 41 42 43 45 46 47 50 51 52 53 54 56 57 58 59 60 62 65 66 68 71 74 79 80 84 86 87 89 90 91 92 93 96 99 100 101 103 107 108 109 110 114 117 119 120 121 122 123 124 125 126 131 133 134 135 136 138 139 141 143 144 146 151 153 154 155 156 157 161 163 166 168 169 174 176 177 178 179 182 185 189 191 192 193 196 198 199 200 201 202 205 206 208 209 214 216 218 223 b 224 1 1 e # 25891 difference c a 224 1 0 0 1 3 4 5 6 7 8 9 12 14 15 17 18 19 21 24 25 26 29 32 35 37 38 40 42 44 45 48 50 51 52 55 57 60 62 63 64 65 68 70 71 73 76 80 83 84 85 86 87 88 89 91 97 98 101 102 103 104 106 107 108 112 113 115 117 118 120 122 126 127 129 130 131 132 133 135 138 139 140 141 143 144 145 146 148 151 152 156 158 161 164 165 169 172 173 175 177 178 182 184 187 191 193 194 198 199 201 202 204 206 209 211 214 216 220 221 222 b 224 1 0 0 1 3 4 5 6 7 8 9 12 14 15 17 18 19 21 24 25 26 29 32 35 37 38 40 42 44 45 48 50 51 52 55 57 60 62 63 64 65 68 70 71 73 76 80 83 84 85 86 87 88 89 91 97 98 101 102 103 104 106 107 108 112 113 115 117 118 120 122 126 127 129 130 131 132 133 135 138 139 140 141 143 144 145 146 148 151 152 156 158 161 164 165 169 172 173 175 177 178 182 184 187 191 193 194 198 199 201 202 204 206 209 211 214 216 220 221 222 # 25892 difference c a 224 1 0 0 1 3 4 5 6 7 8 9 12 14 15 17 18 19 21 24 25 26 29 32 35 37 38 40 42 44 45 48 50 51 52 55 57 60 62 63 64 65 68 70 71 73 76 80 83 84 85 86 87 88 89 91 97 98 101 102 103 104 106 107 108 112 113 115 117 118 120 122 126 127 129 130 131 132 133 135 138 139 140 141 143 144 145 146 148 151 152 156 158 161 164 165 169 172 173 175 177 178 182 184 187 191 193 194 198 199 201 202 204 206 209 211 214 216 220 221 222 b 224 1 1 f # 25893 difference c a 224 1 0 0 1 2 5 6 8 9 10 13 14 16 20 22 24 26 27 29 31 32 35 36 39 44 45 46 47 50 51 53 56 58 60 63 66 68 71 79 80 82 84 87 92 96 97 98 99 101 102 103 107 108 110 112 114 115 116 118 120 121 122 125 126 128 133 134 135 138 139 140 141 147 149 152 153 154 156 158 159 160 173 174 177 179 180 181 182 183 184 185 187 190 192 193 194 195 199 200 201 202 203 204 205 208 209 210 211 212 213 214 216 219 220 221 b 224 1 0 0 1 2 5 6 8 9 10 13 14 16 20 22 24 26 27 29 31 32 35 36 39 44 45 46 47 50 51 53 56 58 60 63 66 68 71 79 80 82 84 87 92 96 97 98 99 101 102 103 107 108 110 112 114 115 116 118 120 121 122 125 126 128 133 134 135 138 139 140 141 147 149 152 153 154 156 158 159 160 173 174 177 179 180 181 182 183 184 185 187 190 192 193 194 195 199 200 201 202 203 204 205 208 209 210 211 212 213 214 216 219 220 221 # 25894 difference c a 224 1 0 0 1 2 5 6 8 9 10 13 14 16 20 22 24 26 27 29 31 32 35 36 39 44 45 46 47 50 51 53 56 58 60 63 66 68 71 79 80 82 84 87 92 96 97 98 99 101 102 103 107 108 110 112 114 115 116 118 120 121 122 125 126 128 133 134 135 138 139 140 141 147 149 152 153 154 156 158 159 160 173 174 177 179 180 181 182 183 184 185 187 190 192 193 194 195 199 200 201 202 203 204 205 208 209 210 211 212 213 214 216 219 220 221 b 224 1 1 0 1 5 6 7 8 9 10 11 12 21 22 23 25 26 27 28 31 33 36 39 42 43 44 49 50 51 52 54 55 57 58 60 65 66 68 72 75 76 77 81 82 85 87 92 93 94 96 98 99 100 102 104 108 110 113 114 115 117 118 119 123 128 129 130 133 134 135 140 142 144 151 152 153 154 157 159 160 167 168 169 170 172 173 174 175 177 179 181 183 184 189 193 195 197 199 209 212 213 215 216 217 223 # 25895 difference c a 224 1 1 e b 224 1 1 e # 25896 difference c a 224 1 1 e b 224 0 0 e # 25897 difference c a 224 1 1 e b 224 1 1 e # 25898 difference c a 224 1 1 e b 224 0 0 f # 25899 difference c a 224 1 1 e b 224 1 1 e # 25900 difference c a 224 1 1 e b 224 0 0 1 4 5 9 10 11 18 27 28 29 32 33 34 35 36 38 41 44 46 48 49 53 55 57 60 61 63 64 66 67 69 71 73 78 83 84 85 88 89 91 92 93 94 95 97 98 99 103 105 108 110 114 118 128 132 133 137 138 142 143 144 145 147 149 151 156 157 158 159 164 165 168 170 171 172 173 174 177 179 180 181 185 186 187 189 190 191 192 193 194 195 196 200 206 207 213 216 220 222 223 # 25901 difference c a 224 1 1 f b 224 1 1 f # 25902 difference c a 224 1 1 f b 224 0 0 e # 25903 difference c a 224 1 1 f b 224 1 1 f # 25904 difference c a 224 1 1 f b 224 0 0 f # 25905 difference c a 224 1 1 f b 224 1 1 f # 25906 difference c a 224 1 1 f b 224 0 0 1 2 3 8 9 10 13 14 18 22 28 31 34 35 36 39 41 43 44 47 48 49 55 56 57 59 61 62 63 65 66 71 75 76 77 78 80 82 83 84 86 87 89 90 91 92 94 95 97 100 104 105 107 112 113 115 117 118 120 123 124 125 126 128 129 130 131 133 134 136 145 146 147 148 149 151 162 163 165 167 171 172 173 174 177 180 182 183 184 188 189 190 191 192 193 194 196 197 199 202 205 206 207 208 210 212 213 215 217 221 # 25907 difference c a 224 1 1 0 1 2 4 5 10 11 12 13 15 19 21 22 23 25 27 28 31 37 38 39 40 41 43 44 45 46 49 51 52 53 54 56 59 60 61 62 64 65 66 68 69 70 71 72 74 75 78 79 82 85 89 91 93 96 97 98 99 100 101 107 108 110 113 115 116 117 118 119 120 122 126 130 131 136 137 140 141 142 144 151 155 156 157 158 159 161 162 163 170 174 176 177 178 179 182 183 184 191 195 196 197 201 203 206 209 212 215 217 219 221 223 b 224 1 1 0 1 2 4 5 10 11 12 13 15 19 21 22 23 25 27 28 31 37 38 39 40 41 43 44 45 46 49 51 52 53 54 56 59 60 61 62 64 65 66 68 69 70 71 72 74 75 78 79 82 85 89 91 93 96 97 98 99 100 101 107 108 110 113 115 116 117 118 119 120 122 126 130 131 136 137 140 141 142 144 151 155 156 157 158 159 161 162 163 170 174 176 177 178 179 182 183 184 191 195 196 197 201 203 206 209 212 215 217 219 221 223 # 25908 difference c a 224 1 1 0 1 2 4 5 10 11 12 13 15 19 21 22 23 25 27 28 31 37 38 39 40 41 43 44 45 46 49 51 52 53 54 56 59 60 61 62 64 65 66 68 69 70 71 72 74 75 78 79 82 85 89 91 93 96 97 98 99 100 101 107 108 110 113 115 116 117 118 119 120 122 126 130 131 136 137 140 141 142 144 151 155 156 157 158 159 161 162 163 170 174 176 177 178 179 182 183 184 191 195 196 197 201 203 206 209 212 215 217 219 221 223 b 224 0 0 e # 25909 difference c a 224 1 1 1 2 4 5 7 8 9 10 13 14 17 18 23 24 29 30 32 33 34 35 36 38 39 45 46 47 48 49 54 56 62 67 68 69 70 71 73 75 76 79 81 83 86 88 92 94 96 97 100 101 104 105 107 109 110 111 114 115 117 118 124 129 130 132 134 135 137 138 139 140 141 142 144 145 146 149 150 151 154 158 159 161 162 163 165 166 167 168 170 173 174 177 178 179 180 182 184 185 190 192 193 196 198 200 201 202 203 205 207 209 210 213 217 219 b 224 1 1 1 2 4 5 7 8 9 10 13 14 17 18 23 24 29 30 32 33 34 35 36 38 39 45 46 47 48 49 54 56 62 67 68 69 70 71 73 75 76 79 81 83 86 88 92 94 96 97 100 101 104 105 107 109 110 111 114 115 117 118 124 129 130 132 134 135 137 138 139 140 141 142 144 145 146 149 150 151 154 158 159 161 162 163 165 166 167 168 170 173 174 177 178 179 180 182 184 185 190 192 193 196 198 200 201 202 203 205 207 209 210 213 217 219 # 25910 difference c a 224 1 1 1 2 4 5 7 8 9 10 13 14 17 18 23 24 29 30 32 33 34 35 36 38 39 45 46 47 48 49 54 56 62 67 68 69 70 71 73 75 76 79 81 83 86 88 92 94 96 97 100 101 104 105 107 109 110 111 114 115 117 118 124 129 130 132 134 135 137 138 139 140 141 142 144 145 146 149 150 151 154 158 159 161 162 163 165 166 167 168 170 173 174 177 178 179 180 182 184 185 190 192 193 196 198 200 201 202 203 205 207 209 210 213 217 219 b 224 0 0 f # 25911 difference c a 224 1 1 1 4 6 7 9 10 11 13 14 15 16 17 21 22 23 24 26 27 28 29 32 33 35 40 45 48 49 50 56 57 60 62 63 69 70 74 78 79 83 84 86 87 92 93 95 97 99 100 103 104 107 108 110 111 112 114 115 116 117 120 121 122 123 124 125 126 127 128 130 132 133 137 139 142 143 144 145 146 150 152 155 157 158 162 163 167 169 170 173 178 179 184 185 188 189 190 191 194 195 196 198 199 203 205 207 209 210 211 216 218 219 221 222 223 b 224 1 1 1 4 6 7 9 10 11 13 14 15 16 17 21 22 23 24 26 27 28 29 32 33 35 40 45 48 49 50 56 57 60 62 63 69 70 74 78 79 83 84 86 87 92 93 95 97 99 100 103 104 107 108 110 111 112 114 115 116 117 120 121 122 123 124 125 126 127 128 130 132 133 137 139 142 143 144 145 146 150 152 155 157 158 162 163 167 169 170 173 178 179 184 185 188 189 190 191 194 195 196 198 199 203 205 207 209 210 211 216 218 219 221 222 223 # 25912 difference c a 224 1 1 1 4 6 7 9 10 11 13 14 15 16 17 21 22 23 24 26 27 28 29 32 33 35 40 45 48 49 50 56 57 60 62 63 69 70 74 78 79 83 84 86 87 92 93 95 97 99 100 103 104 107 108 110 111 112 114 115 116 117 120 121 122 123 124 125 126 127 128 130 132 133 137 139 142 143 144 145 146 150 152 155 157 158 162 163 167 169 170 173 178 179 184 185 188 189 190 191 194 195 196 198 199 203 205 207 209 210 211 216 218 219 221 222 223 b 224 0 0 1 2 3 5 6 7 10 13 15 16 17 21 22 25 26 27 28 29 30 31 33 34 35 37 39 43 46 50 51 52 53 54 56 57 58 60 61 66 67 70 71 72 73 74 75 77 79 80 81 82 83 84 85 88 90 92 94 96 97 103 106 107 110 115 119 120 123 124 127 128 129 132 133 138 139 141 142 143 146 148 152 153 155 158 165 167 168 176 177 178 182 183 186 187 188 190 191 192 195 197 198 202 204 205 206 208 209 210 213 215 217 218 219 221 222 # 25913 difference c a 224 1 1 e b 224 1 1 e # 25914 difference c a 224 1 1 e b 224 0 1 e # 25915 difference c a 224 1 1 e b 224 1 1 e # 25916 difference c a 224 1 1 e b 224 0 1 f # 25917 difference c a 224 1 1 e b 224 1 1 e # 25918 difference c a 224 1 1 e b 224 0 1 4 5 6 10 11 13 16 18 21 23 24 25 26 28 29 30 31 32 33 35 36 40 41 44 45 46 50 51 53 56 58 59 60 61 62 63 64 66 67 70 75 76 80 82 86 88 89 90 91 93 94 96 97 98 100 101 102 109 112 116 119 120 126 128 129 130 131 132 135 136 141 145 149 150 154 155 156 158 159 161 162 163 165 166 167 171 172 173 174 176 179 183 184 185 186 187 189 191 194 195 197 198 199 200 201 203 204 208 209 213 216 218 220 222 # 25919 difference c a 224 1 1 f b 224 1 1 f # 25920 difference c a 224 1 1 f b 224 0 1 e # 25921 difference c a 224 1 1 f b 224 1 1 f # 25922 difference c a 224 1 1 f b 224 0 1 f # 25923 difference c a 224 1 1 f b 224 1 1 f # 25924 difference c a 224 1 1 f b 224 0 1 0 1 3 5 6 8 11 12 13 15 17 19 21 22 24 25 27 33 35 36 37 39 41 43 45 46 47 49 50 51 52 53 55 56 57 58 64 65 67 68 71 73 74 75 76 77 78 80 87 89 93 94 98 100 103 106 108 111 112 113 122 123 125 126 127 129 130 131 134 135 137 141 147 148 149 163 166 167 169 172 173 174 178 180 182 185 186 187 189 193 195 197 198 200 202 203 204 205 206 208 209 211 215 217 220 221 222 # 25925 difference c a 224 1 1 2 3 5 8 10 11 12 13 15 16 17 18 20 22 26 29 31 32 37 40 43 46 49 50 53 58 60 63 64 65 67 69 75 76 81 83 84 85 87 89 93 95 98 99 104 105 107 110 111 114 117 119 120 121 122 127 128 130 131 137 138 139 141 142 143 145 146 147 148 150 151 152 153 154 156 159 162 163 164 168 174 175 177 178 179 182 185 186 188 190 192 193 195 196 197 199 200 201 206 209 214 216 218 219 220 221 b 224 1 1 2 3 5 8 10 11 12 13 15 16 17 18 20 22 26 29 31 32 37 40 43 46 49 50 53 58 60 63 64 65 67 69 75 76 81 83 84 85 87 89 93 95 98 99 104 105 107 110 111 114 117 119 120 121 122 127 128 130 131 137 138 139 141 142 143 145 146 147 148 150 151 152 153 154 156 159 162 163 164 168 174 175 177 178 179 182 185 186 188 190 192 193 195 196 197 199 200 201 206 209 214 216 218 219 220 221 # 25926 difference c a 224 1 1 2 3 5 8 10 11 12 13 15 16 17 18 20 22 26 29 31 32 37 40 43 46 49 50 53 58 60 63 64 65 67 69 75 76 81 83 84 85 87 89 93 95 98 99 104 105 107 110 111 114 117 119 120 121 122 127 128 130 131 137 138 139 141 142 143 145 146 147 148 150 151 152 153 154 156 159 162 163 164 168 174 175 177 178 179 182 185 186 188 190 192 193 195 196 197 199 200 201 206 209 214 216 218 219 220 221 b 224 0 1 e # 25927 difference c a 224 1 1 1 4 7 9 10 12 13 14 16 18 19 20 23 24 26 27 28 34 35 36 38 41 42 44 45 51 52 53 54 55 60 61 62 63 65 66 69 74 76 78 85 86 90 98 100 102 105 106 108 110 112 113 114 115 116 117 122 124 125 126 127 129 132 134 138 140 141 142 143 144 146 147 153 154 156 157 160 161 163 168 170 171 172 175 176 181 182 183 184 185 187 188 190 196 198 200 201 203 205 208 209 212 216 217 219 b 224 1 1 1 4 7 9 10 12 13 14 16 18 19 20 23 24 26 27 28 34 35 36 38 41 42 44 45 51 52 53 54 55 60 61 62 63 65 66 69 74 76 78 85 86 90 98 100 102 105 106 108 110 112 113 114 115 116 117 122 124 125 126 127 129 132 134 138 140 141 142 143 144 146 147 153 154 156 157 160 161 163 168 170 171 172 175 176 181 182 183 184 185 187 188 190 196 198 200 201 203 205 208 209 212 216 217 219 # 25928 difference c a 224 1 1 1 4 7 9 10 12 13 14 16 18 19 20 23 24 26 27 28 34 35 36 38 41 42 44 45 51 52 53 54 55 60 61 62 63 65 66 69 74 76 78 85 86 90 98 100 102 105 106 108 110 112 113 114 115 116 117 122 124 125 126 127 129 132 134 138 140 141 142 143 144 146 147 153 154 156 157 160 161 163 168 170 171 172 175 176 181 182 183 184 185 187 188 190 196 198 200 201 203 205 208 209 212 216 217 219 b 224 0 1 f # 25929 difference c a 224 1 1 0 2 4 5 6 7 8 11 12 13 15 16 17 19 20 21 23 24 26 27 28 29 34 37 41 44 47 49 52 53 57 59 60 61 66 67 71 72 74 75 76 80 81 83 84 85 87 88 89 90 91 92 96 104 107 109 112 113 122 123 124 127 131 132 133 135 136 137 138 142 144 146 148 150 151 152 153 154 155 156 158 160 163 164 165 166 167 168 169 172 175 176 184 186 187 188 189 192 193 195 196 197 198 199 200 202 203 204 206 207 208 213 219 221 b 224 1 1 0 2 4 5 6 7 8 11 12 13 15 16 17 19 20 21 23 24 26 27 28 29 34 37 41 44 47 49 52 53 57 59 60 61 66 67 71 72 74 75 76 80 81 83 84 85 87 88 89 90 91 92 96 104 107 109 112 113 122 123 124 127 131 132 133 135 136 137 138 142 144 146 148 150 151 152 153 154 155 156 158 160 163 164 165 166 167 168 169 172 175 176 184 186 187 188 189 192 193 195 196 197 198 199 200 202 203 204 206 207 208 213 219 221 # 25930 difference c a 224 1 1 0 2 4 5 6 7 8 11 12 13 15 16 17 19 20 21 23 24 26 27 28 29 34 37 41 44 47 49 52 53 57 59 60 61 66 67 71 72 74 75 76 80 81 83 84 85 87 88 89 90 91 92 96 104 107 109 112 113 122 123 124 127 131 132 133 135 136 137 138 142 144 146 148 150 151 152 153 154 155 156 158 160 163 164 165 166 167 168 169 172 175 176 184 186 187 188 189 192 193 195 196 197 198 199 200 202 203 204 206 207 208 213 219 221 b 224 0 1 0 1 3 4 6 8 9 11 13 15 17 19 21 23 25 26 28 30 31 32 33 34 35 39 42 47 48 49 53 55 57 61 62 64 65 66 72 73 74 78 82 83 85 87 88 89 90 92 93 95 96 98 99 100 106 108 109 110 114 122 123 126 127 128 129 130 132 134 136 137 138 139 143 144 148 150 151 152 153 154 155 156 157 158 159 161 166 168 172 173 175 176 179 180 182 183 185 186 189 190 191 192 198 200 202 203 204 206 207 208 210 211 212 215 219 220 222 223 # 25931 difference c a 224 1 1 e b 224 1 1 e # 25932 difference c a 224 1 1 e b 224 1 0 e # 25933 difference c a 224 1 1 e b 224 1 1 e # 25934 difference c a 224 1 1 e b 224 1 0 f # 25935 difference c a 224 1 1 e b 224 1 1 e # 25936 difference c a 224 1 1 e b 224 1 0 2 3 5 8 10 11 12 13 14 16 17 19 21 22 24 25 27 29 30 31 33 34 35 38 40 41 44 46 47 52 54 55 58 61 65 67 71 73 75 78 79 80 83 86 87 89 91 95 98 99 100 102 103 106 107 108 109 110 112 113 117 119 120 124 125 131 132 133 134 137 139 140 141 143 144 145 148 150 152 154 155 157 161 163 164 167 170 174 178 179 180 181 183 186 190 192 195 196 197 198 201 202 203 205 208 209 211 212 213 215 222 # 25937 difference c a 224 1 1 f b 224 1 1 f # 25938 difference c a 224 1 1 f b 224 1 0 e # 25939 difference c a 224 1 1 f b 224 1 1 f # 25940 difference c a 224 1 1 f b 224 1 0 f # 25941 difference c a 224 1 1 f b 224 1 1 f # 25942 difference c a 224 1 1 f b 224 1 0 0 3 5 8 11 12 15 17 18 20 25 26 27 29 33 36 37 38 40 43 44 45 46 48 49 51 52 53 57 59 60 61 62 63 64 68 70 71 72 74 77 78 80 83 84 85 88 89 92 97 98 101 106 107 112 113 114 115 116 120 122 123 124 130 131 135 136 137 138 146 147 148 151 152 156 157 158 160 164 165 166 168 169 170 172 176 180 181 185 186 189 190 194 195 196 197 199 202 206 208 209 210 211 212 213 215 216 220 221 222 # 25943 difference c a 224 1 1 5 6 7 8 9 13 14 16 19 22 24 25 27 28 30 32 35 36 38 39 41 43 44 47 48 49 50 55 57 58 61 62 63 64 66 67 68 69 70 72 75 76 77 78 82 83 84 86 90 93 96 99 102 103 104 106 108 110 112 113 115 116 117 122 123 126 128 130 131 133 134 137 138 141 142 145 148 149 150 156 158 161 163 164 167 169 172 173 174 176 177 178 179 180 183 184 185 187 188 192 193 195 197 198 200 201 202 204 205 206 207 208 210 212 215 217 218 221 222 b 224 1 1 5 6 7 8 9 13 14 16 19 22 24 25 27 28 30 32 35 36 38 39 41 43 44 47 48 49 50 55 57 58 61 62 63 64 66 67 68 69 70 72 75 76 77 78 82 83 84 86 90 93 96 99 102 103 104 106 108 110 112 113 115 116 117 122 123 126 128 130 131 133 134 137 138 141 142 145 148 149 150 156 158 161 163 164 167 169 172 173 174 176 177 178 179 180 183 184 185 187 188 192 193 195 197 198 200 201 202 204 205 206 207 208 210 212 215 217 218 221 222 # 25944 difference c a 224 1 1 5 6 7 8 9 13 14 16 19 22 24 25 27 28 30 32 35 36 38 39 41 43 44 47 48 49 50 55 57 58 61 62 63 64 66 67 68 69 70 72 75 76 77 78 82 83 84 86 90 93 96 99 102 103 104 106 108 110 112 113 115 116 117 122 123 126 128 130 131 133 134 137 138 141 142 145 148 149 150 156 158 161 163 164 167 169 172 173 174 176 177 178 179 180 183 184 185 187 188 192 193 195 197 198 200 201 202 204 205 206 207 208 210 212 215 217 218 221 222 b 224 1 0 e # 25945 difference c a 224 1 1 0 2 3 4 5 7 8 11 13 14 15 17 21 24 26 31 32 34 35 39 40 41 42 44 49 50 52 54 55 57 58 59 62 63 64 65 66 72 73 75 77 78 79 81 84 86 88 89 93 96 97 98 99 101 104 105 106 109 111 112 115 116 119 122 123 129 132 134 135 137 139 140 141 142 145 147 150 152 153 156 158 161 162 167 169 171 172 175 177 178 181 182 186 188 190 194 195 196 198 203 205 206 207 209 211 212 214 217 218 223 b 224 1 1 0 2 3 4 5 7 8 11 13 14 15 17 21 24 26 31 32 34 35 39 40 41 42 44 49 50 52 54 55 57 58 59 62 63 64 65 66 72 73 75 77 78 79 81 84 86 88 89 93 96 97 98 99 101 104 105 106 109 111 112 115 116 119 122 123 129 132 134 135 137 139 140 141 142 145 147 150 152 153 156 158 161 162 167 169 171 172 175 177 178 181 182 186 188 190 194 195 196 198 203 205 206 207 209 211 212 214 217 218 223 # 25946 difference c a 224 1 1 0 2 3 4 5 7 8 11 13 14 15 17 21 24 26 31 32 34 35 39 40 41 42 44 49 50 52 54 55 57 58 59 62 63 64 65 66 72 73 75 77 78 79 81 84 86 88 89 93 96 97 98 99 101 104 105 106 109 111 112 115 116 119 122 123 129 132 134 135 137 139 140 141 142 145 147 150 152 153 156 158 161 162 167 169 171 172 175 177 178 181 182 186 188 190 194 195 196 198 203 205 206 207 209 211 212 214 217 218 223 b 224 1 0 f # 25947 difference c a 224 1 1 0 2 3 7 8 10 13 14 15 16 22 23 28 29 31 32 33 34 40 41 43 44 46 48 50 52 53 55 61 64 66 69 72 73 75 77 83 84 85 86 93 94 95 96 101 102 104 105 108 112 113 115 116 118 119 120 123 126 128 130 132 134 135 137 138 142 145 146 149 151 153 154 155 156 157 158 159 161 162 165 166 167 168 169 173 175 176 183 186 189 190 193 194 195 196 197 200 201 202 204 207 208 210 212 217 219 220 b 224 1 1 0 2 3 7 8 10 13 14 15 16 22 23 28 29 31 32 33 34 40 41 43 44 46 48 50 52 53 55 61 64 66 69 72 73 75 77 83 84 85 86 93 94 95 96 101 102 104 105 108 112 113 115 116 118 119 120 123 126 128 130 132 134 135 137 138 142 145 146 149 151 153 154 155 156 157 158 159 161 162 165 166 167 168 169 173 175 176 183 186 189 190 193 194 195 196 197 200 201 202 204 207 208 210 212 217 219 220 # 25948 difference c a 224 1 1 0 2 3 7 8 10 13 14 15 16 22 23 28 29 31 32 33 34 40 41 43 44 46 48 50 52 53 55 61 64 66 69 72 73 75 77 83 84 85 86 93 94 95 96 101 102 104 105 108 112 113 115 116 118 119 120 123 126 128 130 132 134 135 137 138 142 145 146 149 151 153 154 155 156 157 158 159 161 162 165 166 167 168 169 173 175 176 183 186 189 190 193 194 195 196 197 200 201 202 204 207 208 210 212 217 219 220 b 224 1 0 1 2 4 6 10 11 12 13 14 17 18 20 21 22 24 27 28 30 33 38 39 40 42 46 47 49 52 54 55 57 63 65 67 69 70 71 75 76 78 83 84 86 91 92 93 94 96 97 100 101 105 110 112 115 118 119 129 130 132 133 134 136 138 139 140 143 144 145 150 151 152 154 156 158 159 161 163 164 165 169 171 173 174 176 180 182 183 184 185 187 190 191 192 193 194 195 196 197 200 201 204 205 206 207 210 211 212 213 214 215 216 217 # 25949 difference c a 224 1 1 e b 224 1 1 e # 25950 difference c a 224 1 1 e b 224 1 1 e # 25951 difference c a 224 1 1 e b 224 1 1 e # 25952 difference c a 224 1 1 e b 224 1 1 f # 25953 difference c a 224 1 1 e b 224 1 1 e # 25954 difference c a 224 1 1 e b 224 1 1 1 2 4 7 8 9 11 12 15 18 21 22 24 26 27 28 31 37 41 44 45 50 51 52 53 55 58 59 61 62 63 66 67 68 72 74 75 77 84 86 88 89 92 94 95 97 98 101 102 105 107 108 109 111 112 115 116 119 120 122 123 124 125 126 128 130 133 135 137 138 141 148 149 151 155 160 161 164 165 168 169 172 173 174 178 179 180 182 187 190 197 200 201 203 204 207 210 213 214 215 216 217 218 221 222 223 # 25955 difference c a 224 1 1 f b 224 1 1 f # 25956 difference c a 224 1 1 f b 224 1 1 e # 25957 difference c a 224 1 1 f b 224 1 1 f # 25958 difference c a 224 1 1 f b 224 1 1 f # 25959 difference c a 224 1 1 f b 224 1 1 f # 25960 difference c a 224 1 1 f b 224 1 1 3 4 5 6 7 8 12 13 16 18 26 27 28 30 32 34 35 36 37 39 41 44 45 47 52 53 54 56 59 60 63 69 71 72 74 75 80 81 82 85 86 89 93 94 95 96 102 104 105 109 110 113 114 115 119 121 122 123 124 125 127 129 130 131 133 136 137 142 143 144 146 148 157 158 159 161 162 163 164 166 167 168 172 175 176 179 180 184 186 187 189 190 191 192 195 196 198 199 200 203 205 209 210 214 215 216 218 219 221 222 223 # 25961 difference c a 224 1 1 2 3 4 6 7 8 9 12 13 15 16 19 20 21 22 25 27 28 30 31 34 36 37 38 39 40 42 48 49 51 52 57 58 59 60 61 62 65 66 68 69 70 73 74 75 78 83 87 90 92 93 94 96 102 105 107 111 113 114 115 117 118 122 127 128 129 134 135 137 138 139 142 143 146 150 151 152 153 154 161 163 166 167 169 170 175 176 177 184 186 188 189 192 193 195 198 202 203 204 207 209 211 212 213 215 216 217 219 220 221 222 223 b 224 1 1 2 3 4 6 7 8 9 12 13 15 16 19 20 21 22 25 27 28 30 31 34 36 37 38 39 40 42 48 49 51 52 57 58 59 60 61 62 65 66 68 69 70 73 74 75 78 83 87 90 92 93 94 96 102 105 107 111 113 114 115 117 118 122 127 128 129 134 135 137 138 139 142 143 146 150 151 152 153 154 161 163 166 167 169 170 175 176 177 184 186 188 189 192 193 195 198 202 203 204 207 209 211 212 213 215 216 217 219 220 221 222 223 # 25962 difference c a 224 1 1 2 3 4 6 7 8 9 12 13 15 16 19 20 21 22 25 27 28 30 31 34 36 37 38 39 40 42 48 49 51 52 57 58 59 60 61 62 65 66 68 69 70 73 74 75 78 83 87 90 92 93 94 96 102 105 107 111 113 114 115 117 118 122 127 128 129 134 135 137 138 139 142 143 146 150 151 152 153 154 161 163 166 167 169 170 175 176 177 184 186 188 189 192 193 195 198 202 203 204 207 209 211 212 213 215 216 217 219 220 221 222 223 b 224 1 1 e # 25963 difference c a 224 1 1 0 2 3 7 8 11 12 13 14 15 16 18 19 21 22 24 25 26 27 28 29 30 35 36 37 39 41 42 44 45 47 49 51 52 54 55 57 58 59 60 61 65 66 68 74 77 79 80 81 83 84 86 89 92 93 94 95 96 97 99 103 104 105 107 108 110 111 114 116 117 120 121 122 123 126 129 130 140 141 147 149 152 153 154 157 159 160 164 167 168 169 171 172 175 176 177 178 179 180 186 187 188 191 192 193 194 201 203 206 207 209 210 211 221 b 224 1 1 0 2 3 7 8 11 12 13 14 15 16 18 19 21 22 24 25 26 27 28 29 30 35 36 37 39 41 42 44 45 47 49 51 52 54 55 57 58 59 60 61 65 66 68 74 77 79 80 81 83 84 86 89 92 93 94 95 96 97 99 103 104 105 107 108 110 111 114 116 117 120 121 122 123 126 129 130 140 141 147 149 152 153 154 157 159 160 164 167 168 169 171 172 175 176 177 178 179 180 186 187 188 191 192 193 194 201 203 206 207 209 210 211 221 # 25964 difference c a 224 1 1 0 2 3 7 8 11 12 13 14 15 16 18 19 21 22 24 25 26 27 28 29 30 35 36 37 39 41 42 44 45 47 49 51 52 54 55 57 58 59 60 61 65 66 68 74 77 79 80 81 83 84 86 89 92 93 94 95 96 97 99 103 104 105 107 108 110 111 114 116 117 120 121 122 123 126 129 130 140 141 147 149 152 153 154 157 159 160 164 167 168 169 171 172 175 176 177 178 179 180 186 187 188 191 192 193 194 201 203 206 207 209 210 211 221 b 224 1 1 f # 25965 difference c a 224 1 1 2 3 4 6 7 8 10 12 13 15 16 18 22 23 24 25 28 29 32 34 35 37 38 41 42 43 44 45 46 47 49 50 51 53 54 56 60 61 62 63 65 66 67 68 71 73 74 75 76 77 78 80 81 82 85 86 88 90 91 94 97 99 102 105 108 110 111 112 113 118 123 124 132 134 138 140 141 143 145 147 148 149 153 158 159 160 161 163 168 170 173 175 176 178 179 183 187 188 191 193 194 196 198 199 200 201 204 206 208 209 212 216 217 218 219 222 b 224 1 1 2 3 4 6 7 8 10 12 13 15 16 18 22 23 24 25 28 29 32 34 35 37 38 41 42 43 44 45 46 47 49 50 51 53 54 56 60 61 62 63 65 66 67 68 71 73 74 75 76 77 78 80 81 82 85 86 88 90 91 94 97 99 102 105 108 110 111 112 113 118 123 124 132 134 138 140 141 143 145 147 148 149 153 158 159 160 161 163 168 170 173 175 176 178 179 183 187 188 191 193 194 196 198 199 200 201 204 206 208 209 212 216 217 218 219 222 # 25966 difference c a 224 1 1 2 3 4 6 7 8 10 12 13 15 16 18 22 23 24 25 28 29 32 34 35 37 38 41 42 43 44 45 46 47 49 50 51 53 54 56 60 61 62 63 65 66 67 68 71 73 74 75 76 77 78 80 81 82 85 86 88 90 91 94 97 99 102 105 108 110 111 112 113 118 123 124 132 134 138 140 141 143 145 147 148 149 153 158 159 160 161 163 168 170 173 175 176 178 179 183 187 188 191 193 194 196 198 199 200 201 204 206 208 209 212 216 217 218 219 222 b 224 1 1 1 2 5 6 8 10 12 13 14 15 20 21 22 23 24 25 26 27 29 32 34 37 38 40 42 43 45 47 48 49 51 53 56 59 60 61 63 66 67 68 69 70 71 73 74 80 85 86 88 89 91 92 93 94 95 96 97 98 99 101 102 103 105 107 108 111 112 113 118 121 123 124 126 127 128 129 130 133 135 138 140 143 145 147 153 155 156 158 159 163 165 166 167 169 173 176 177 179 180 185 189 191 193 195 199 200 201 202 206 208 209 211 213 215 216 218 222 223 # 25967 difference c a 247 0 0 e b 247 0 0 e # 25968 difference c a 247 0 0 e b 247 0 0 e # 25969 difference c a 247 0 0 e b 247 0 0 e # 25970 difference c a 247 0 0 e b 247 0 0 f # 25971 difference c a 247 0 0 e b 247 0 0 e # 25972 difference c a 247 0 0 e b 247 0 0 0 2 4 7 8 10 13 14 16 17 20 21 22 25 26 27 29 30 34 35 36 37 38 39 41 43 45 48 49 51 55 57 59 60 62 63 64 65 66 68 69 71 74 75 77 80 81 86 87 92 98 99 100 102 104 105 108 109 110 113 114 115 117 119 121 123 127 128 130 131 132 133 137 138 142 143 146 147 150 155 156 157 164 166 170 171 172 174 176 180 182 183 184 186 190 191 194 196 197 198 199 201 202 206 208 211 212 214 218 219 220 221 226 227 229 230 233 234 235 238 240 242 244 245 246 # 25973 difference c a 247 0 0 f b 247 0 0 f # 25974 difference c a 247 0 0 f b 247 0 0 e # 25975 difference c a 247 0 0 f b 247 0 0 f # 25976 difference c a 247 0 0 f b 247 0 0 f # 25977 difference c a 247 0 0 f b 247 0 0 f # 25978 difference c a 247 0 0 f b 247 0 0 2 3 4 5 9 10 13 15 17 19 21 22 24 37 38 40 41 42 45 46 47 48 50 53 54 61 62 63 64 70 72 74 77 81 82 83 84 86 87 88 96 97 100 102 103 104 105 109 110 111 112 116 119 120 121 122 128 129 130 131 133 134 135 136 141 142 143 148 149 151 152 157 158 160 161 163 164 166 167 168 170 173 175 177 180 183 184 185 190 196 198 199 201 202 203 204 208 209 210 211 215 217 219 220 221 222 227 230 231 233 234 236 238 239 240 241 242 # 25979 difference c a 247 0 0 0 1 4 8 9 10 11 16 18 26 28 30 34 36 45 46 48 49 52 53 56 58 59 60 63 64 68 69 70 71 72 76 78 79 80 83 84 85 87 89 90 91 93 94 98 99 100 101 102 103 104 107 108 110 111 114 116 117 120 126 136 137 139 143 149 150 152 153 154 158 159 160 164 165 167 168 169 171 172 173 174 177 178 180 181 182 183 184 186 187 188 189 190 191 192 193 195 196 197 201 204 206 209 210 211 212 214 216 217 219 222 227 228 229 232 233 234 235 237 238 240 241 243 b 247 0 0 0 1 4 8 9 10 11 16 18 26 28 30 34 36 45 46 48 49 52 53 56 58 59 60 63 64 68 69 70 71 72 76 78 79 80 83 84 85 87 89 90 91 93 94 98 99 100 101 102 103 104 107 108 110 111 114 116 117 120 126 136 137 139 143 149 150 152 153 154 158 159 160 164 165 167 168 169 171 172 173 174 177 178 180 181 182 183 184 186 187 188 189 190 191 192 193 195 196 197 201 204 206 209 210 211 212 214 216 217 219 222 227 228 229 232 233 234 235 237 238 240 241 243 # 25980 difference c a 247 0 0 0 1 4 8 9 10 11 16 18 26 28 30 34 36 45 46 48 49 52 53 56 58 59 60 63 64 68 69 70 71 72 76 78 79 80 83 84 85 87 89 90 91 93 94 98 99 100 101 102 103 104 107 108 110 111 114 116 117 120 126 136 137 139 143 149 150 152 153 154 158 159 160 164 165 167 168 169 171 172 173 174 177 178 180 181 182 183 184 186 187 188 189 190 191 192 193 195 196 197 201 204 206 209 210 211 212 214 216 217 219 222 227 228 229 232 233 234 235 237 238 240 241 243 b 247 0 0 e # 25981 difference c a 247 0 0 1 2 5 7 13 14 15 16 17 18 20 21 24 26 27 30 31 33 34 35 36 38 39 40 41 44 45 47 48 51 53 56 58 61 63 64 73 76 77 78 80 84 87 88 93 94 96 98 100 102 103 104 107 108 111 116 117 119 121 122 123 124 125 126 127 129 132 133 135 138 140 141 146 155 158 159 160 161 162 163 164 166 168 169 172 173 174 178 180 181 182 183 186 189 192 195 198 202 203 208 209 210 211 212 213 214 217 218 219 221 225 226 227 229 230 233 235 237 240 242 243 245 246 b 247 0 0 1 2 5 7 13 14 15 16 17 18 20 21 24 26 27 30 31 33 34 35 36 38 39 40 41 44 45 47 48 51 53 56 58 61 63 64 73 76 77 78 80 84 87 88 93 94 96 98 100 102 103 104 107 108 111 116 117 119 121 122 123 124 125 126 127 129 132 133 135 138 140 141 146 155 158 159 160 161 162 163 164 166 168 169 172 173 174 178 180 181 182 183 186 189 192 195 198 202 203 208 209 210 211 212 213 214 217 218 219 221 225 226 227 229 230 233 235 237 240 242 243 245 246 # 25982 difference c a 247 0 0 1 2 5 7 13 14 15 16 17 18 20 21 24 26 27 30 31 33 34 35 36 38 39 40 41 44 45 47 48 51 53 56 58 61 63 64 73 76 77 78 80 84 87 88 93 94 96 98 100 102 103 104 107 108 111 116 117 119 121 122 123 124 125 126 127 129 132 133 135 138 140 141 146 155 158 159 160 161 162 163 164 166 168 169 172 173 174 178 180 181 182 183 186 189 192 195 198 202 203 208 209 210 211 212 213 214 217 218 219 221 225 226 227 229 230 233 235 237 240 242 243 245 246 b 247 0 0 f # 25983 difference c a 247 0 0 2 4 5 8 11 14 15 16 20 22 23 24 25 26 27 29 30 31 34 40 41 42 44 45 47 49 51 52 53 54 55 56 57 58 60 62 63 64 65 69 77 90 92 93 95 96 98 103 104 105 108 110 112 114 116 118 121 125 126 129 133 136 138 139 140 142 143 144 145 148 150 154 155 156 157 158 160 162 165 166 172 175 176 177 179 181 183 188 191 192 194 197 198 199 205 206 208 213 214 218 220 222 223 225 227 228 231 232 233 238 243 b 247 0 0 2 4 5 8 11 14 15 16 20 22 23 24 25 26 27 29 30 31 34 40 41 42 44 45 47 49 51 52 53 54 55 56 57 58 60 62 63 64 65 69 77 90 92 93 95 96 98 103 104 105 108 110 112 114 116 118 121 125 126 129 133 136 138 139 140 142 143 144 145 148 150 154 155 156 157 158 160 162 165 166 172 175 176 177 179 181 183 188 191 192 194 197 198 199 205 206 208 213 214 218 220 222 223 225 227 228 231 232 233 238 243 # 25984 difference c a 247 0 0 2 4 5 8 11 14 15 16 20 22 23 24 25 26 27 29 30 31 34 40 41 42 44 45 47 49 51 52 53 54 55 56 57 58 60 62 63 64 65 69 77 90 92 93 95 96 98 103 104 105 108 110 112 114 116 118 121 125 126 129 133 136 138 139 140 142 143 144 145 148 150 154 155 156 157 158 160 162 165 166 172 175 176 177 179 181 183 188 191 192 194 197 198 199 205 206 208 213 214 218 220 222 223 225 227 228 231 232 233 238 243 b 247 0 0 1 2 3 4 6 7 8 9 13 14 16 17 18 19 21 22 25 26 31 36 40 41 42 44 45 46 47 48 49 50 51 52 59 60 61 65 66 70 73 74 76 77 81 85 87 89 90 92 94 97 98 102 103 107 109 111 112 113 114 116 121 122 125 126 128 129 130 133 137 140 141 144 146 147 148 149 152 154 157 158 161 162 163 167 169 172 174 175 176 178 182 184 186 190 191 193 195 197 199 201 202 205 206 207 209 211 212 215 216 217 218 219 221 222 223 227 228 229 232 234 235 237 238 244 # 25985 difference c a 247 0 0 e b 247 0 0 e # 25986 difference c a 247 0 0 e b 247 0 1 e # 25987 difference c a 247 0 0 e b 247 0 0 e # 25988 difference c a 247 0 0 e b 247 0 1 f # 25989 difference c a 247 0 0 e b 247 0 0 e # 25990 difference c a 247 0 0 e b 247 0 1 4 5 7 14 15 16 18 19 22 23 24 29 30 31 33 36 38 40 42 48 52 55 56 61 62 64 66 67 68 69 71 72 76 77 78 80 82 83 84 85 87 89 91 92 95 97 98 100 102 103 108 110 111 112 114 115 118 119 120 121 122 123 125 127 128 130 131 133 135 137 140 141 143 145 147 150 153 154 156 159 160 165 168 170 171 173 175 176 177 178 181 184 186 188 191 193 194 195 196 200 201 204 205 207 208 211 213 215 220 221 222 225 226 230 231 233 236 240 243 245 246 # 25991 difference c a 247 0 0 f b 247 0 0 f # 25992 difference c a 247 0 0 f b 247 0 1 e # 25993 difference c a 247 0 0 f b 247 0 0 f # 25994 difference c a 247 0 0 f b 247 0 1 f # 25995 difference c a 247 0 0 f b 247 0 0 f # 25996 difference c a 247 0 0 f b 247 0 1 3 6 8 9 11 12 13 14 15 16 17 21 23 25 31 32 33 38 39 40 42 43 44 45 46 47 51 52 53 54 56 58 59 60 62 63 67 69 70 73 79 80 82 83 85 87 90 92 93 96 97 98 100 101 102 103 107 108 110 111 112 113 116 117 120 122 123 124 126 127 129 131 132 134 136 139 140 142 143 146 148 150 151 153 154 157 160 161 166 168 169 178 183 188 189 190 191 192 196 197 198 199 200 204 206 208 210 212 217 218 220 221 223 230 232 234 236 238 240 242 243 244 245 # 25997 difference c a 247 0 0 1 2 3 5 6 8 12 13 19 21 22 23 24 27 28 30 33 34 35 36 37 38 39 42 46 47 48 50 51 52 54 55 56 59 60 62 63 65 66 68 69 70 73 74 77 79 81 82 85 86 88 90 91 92 93 94 96 98 99 101 104 106 107 110 111 113 114 115 116 117 118 119 121 124 126 127 128 129 130 131 136 140 143 146 147 149 150 151 152 155 158 160 161 165 166 169 170 171 173 174 177 186 187 188 189 191 195 197 198 200 201 204 206 207 211 213 214 215 217 218 219 220 222 224 225 226 227 228 229 231 232 233 237 239 241 243 244 246 b 247 0 0 1 2 3 5 6 8 12 13 19 21 22 23 24 27 28 30 33 34 35 36 37 38 39 42 46 47 48 50 51 52 54 55 56 59 60 62 63 65 66 68 69 70 73 74 77 79 81 82 85 86 88 90 91 92 93 94 96 98 99 101 104 106 107 110 111 113 114 115 116 117 118 119 121 124 126 127 128 129 130 131 136 140 143 146 147 149 150 151 152 155 158 160 161 165 166 169 170 171 173 174 177 186 187 188 189 191 195 197 198 200 201 204 206 207 211 213 214 215 217 218 219 220 222 224 225 226 227 228 229 231 232 233 237 239 241 243 244 246 # 25998 difference c a 247 0 0 1 2 3 5 6 8 12 13 19 21 22 23 24 27 28 30 33 34 35 36 37 38 39 42 46 47 48 50 51 52 54 55 56 59 60 62 63 65 66 68 69 70 73 74 77 79 81 82 85 86 88 90 91 92 93 94 96 98 99 101 104 106 107 110 111 113 114 115 116 117 118 119 121 124 126 127 128 129 130 131 136 140 143 146 147 149 150 151 152 155 158 160 161 165 166 169 170 171 173 174 177 186 187 188 189 191 195 197 198 200 201 204 206 207 211 213 214 215 217 218 219 220 222 224 225 226 227 228 229 231 232 233 237 239 241 243 244 246 b 247 0 1 e # 25999 difference c a 247 0 0 0 2 3 5 6 8 9 11 12 15 18 19 20 21 26 27 28 30 31 32 34 37 38 42 44 46 47 49 50 52 53 54 57 61 67 68 74 77 79 80 81 83 84 85 86 88 91 93 95 96 97 98 99 100 101 106 107 108 109 110 111 112 113 115 116 119 120 121 122 123 125 126 128 131 133 135 137 140 142 143 146 148 150 151 152 153 154 156 158 160 167 169 170 172 173 180 183 185 187 192 193 194 198 199 200 201 203 204 205 209 210 211 214 217 219 221 223 224 227 230 233 236 237 238 239 241 242 243 244 245 b 247 0 0 0 2 3 5 6 8 9 11 12 15 18 19 20 21 26 27 28 30 31 32 34 37 38 42 44 46 47 49 50 52 53 54 57 61 67 68 74 77 79 80 81 83 84 85 86 88 91 93 95 96 97 98 99 100 101 106 107 108 109 110 111 112 113 115 116 119 120 121 122 123 125 126 128 131 133 135 137 140 142 143 146 148 150 151 152 153 154 156 158 160 167 169 170 172 173 180 183 185 187 192 193 194 198 199 200 201 203 204 205 209 210 211 214 217 219 221 223 224 227 230 233 236 237 238 239 241 242 243 244 245 # 26000 difference c a 247 0 0 0 2 3 5 6 8 9 11 12 15 18 19 20 21 26 27 28 30 31 32 34 37 38 42 44 46 47 49 50 52 53 54 57 61 67 68 74 77 79 80 81 83 84 85 86 88 91 93 95 96 97 98 99 100 101 106 107 108 109 110 111 112 113 115 116 119 120 121 122 123 125 126 128 131 133 135 137 140 142 143 146 148 150 151 152 153 154 156 158 160 167 169 170 172 173 180 183 185 187 192 193 194 198 199 200 201 203 204 205 209 210 211 214 217 219 221 223 224 227 230 233 236 237 238 239 241 242 243 244 245 b 247 0 1 f # 26001 difference c a 247 0 0 1 2 3 4 5 7 12 16 18 19 20 21 22 23 26 27 29 31 33 34 36 37 41 42 45 46 47 49 50 52 53 55 58 59 60 66 67 71 73 76 83 85 86 88 89 91 93 96 100 101 102 104 106 107 110 111 112 114 115 117 120 121 123 125 129 130 132 133 136 144 145 147 148 149 155 157 160 162 163 164 167 171 172 173 176 181 182 183 186 190 193 196 200 201 203 204 205 209 210 213 215 217 219 223 224 225 227 229 232 233 234 236 238 239 240 241 244 245 b 247 0 0 1 2 3 4 5 7 12 16 18 19 20 21 22 23 26 27 29 31 33 34 36 37 41 42 45 46 47 49 50 52 53 55 58 59 60 66 67 71 73 76 83 85 86 88 89 91 93 96 100 101 102 104 106 107 110 111 112 114 115 117 120 121 123 125 129 130 132 133 136 144 145 147 148 149 155 157 160 162 163 164 167 171 172 173 176 181 182 183 186 190 193 196 200 201 203 204 205 209 210 213 215 217 219 223 224 225 227 229 232 233 234 236 238 239 240 241 244 245 # 26002 difference c a 247 0 0 1 2 3 4 5 7 12 16 18 19 20 21 22 23 26 27 29 31 33 34 36 37 41 42 45 46 47 49 50 52 53 55 58 59 60 66 67 71 73 76 83 85 86 88 89 91 93 96 100 101 102 104 106 107 110 111 112 114 115 117 120 121 123 125 129 130 132 133 136 144 145 147 148 149 155 157 160 162 163 164 167 171 172 173 176 181 182 183 186 190 193 196 200 201 203 204 205 209 210 213 215 217 219 223 224 225 227 229 232 233 234 236 238 239 240 241 244 245 b 247 0 1 1 4 5 6 7 8 9 10 11 12 13 19 20 22 23 25 27 28 32 33 34 35 37 38 40 41 42 43 46 47 50 52 53 56 57 59 67 69 70 72 73 74 77 79 83 85 88 91 92 93 98 99 101 102 104 105 108 109 110 112 116 119 120 121 122 123 125 127 131 137 142 144 145 146 147 152 157 159 160 161 162 165 167 168 169 173 174 176 178 180 182 183 184 187 190 197 200 206 208 209 210 213 215 218 219 220 221 222 226 227 229 230 234 235 236 237 242 243 246 # 26003 difference c a 247 0 0 e b 247 0 0 e # 26004 difference c a 247 0 0 e b 247 1 0 e # 26005 difference c a 247 0 0 e b 247 0 0 e # 26006 difference c a 247 0 0 e b 247 1 0 f # 26007 difference c a 247 0 0 e b 247 0 0 e # 26008 difference c a 247 0 0 e b 247 1 0 0 1 2 3 4 6 7 8 10 12 13 17 20 21 22 28 30 31 33 35 38 39 41 45 47 48 49 50 51 52 53 54 56 59 60 63 65 66 69 71 72 73 74 76 78 79 81 82 83 84 85 87 88 89 91 93 94 96 97 98 100 102 105 106 109 111 112 114 116 117 119 120 121 122 123 124 127 130 131 132 133 136 138 140 143 144 145 147 148 150 151 154 155 156 158 160 161 163 164 165 167 168 171 172 174 177 181 183 185 186 190 191 193 194 195 196 197 198 199 201 202 203 207 209 211 212 213 214 216 218 219 220 222 225 228 229 230 231 232 233 234 239 241 242 243 244 # 26009 difference c a 247 0 0 f b 247 0 0 f # 26010 difference c a 247 0 0 f b 247 1 0 e # 26011 difference c a 247 0 0 f b 247 0 0 f # 26012 difference c a 247 0 0 f b 247 1 0 f # 26013 difference c a 247 0 0 f b 247 0 0 f # 26014 difference c a 247 0 0 f b 247 1 0 1 2 4 8 12 15 17 18 19 23 24 26 27 30 31 33 37 40 41 42 43 45 46 47 48 49 50 56 57 58 61 62 64 66 68 70 71 73 74 75 76 77 78 79 80 81 82 86 89 92 94 95 96 97 99 100 102 104 105 106 107 108 109 111 115 116 117 118 119 120 124 127 132 135 136 139 141 143 145 148 152 153 154 155 158 160 162 168 169 171 172 173 174 180 181 182 183 185 186 187 188 191 192 193 198 199 201 202 203 204 205 208 209 211 215 216 218 219 220 221 222 224 225 226 231 234 236 237 239 240 241 242 # 26015 difference c a 247 0 0 2 5 6 7 8 9 13 17 18 19 20 21 23 24 27 29 31 34 37 40 41 44 45 46 48 49 50 52 57 59 61 62 63 64 65 68 71 73 75 76 77 79 80 86 87 90 91 93 97 101 102 104 107 109 110 111 112 113 119 120 125 127 128 129 130 131 132 133 135 137 138 140 141 143 144 145 149 150 154 165 168 170 172 175 178 179 181 186 187 191 194 195 199 204 205 213 214 215 216 217 218 221 223 227 229 230 231 232 235 236 237 238 240 242 244 245 246 b 247 0 0 2 5 6 7 8 9 13 17 18 19 20 21 23 24 27 29 31 34 37 40 41 44 45 46 48 49 50 52 57 59 61 62 63 64 65 68 71 73 75 76 77 79 80 86 87 90 91 93 97 101 102 104 107 109 110 111 112 113 119 120 125 127 128 129 130 131 132 133 135 137 138 140 141 143 144 145 149 150 154 165 168 170 172 175 178 179 181 186 187 191 194 195 199 204 205 213 214 215 216 217 218 221 223 227 229 230 231 232 235 236 237 238 240 242 244 245 246 # 26016 difference c a 247 0 0 2 5 6 7 8 9 13 17 18 19 20 21 23 24 27 29 31 34 37 40 41 44 45 46 48 49 50 52 57 59 61 62 63 64 65 68 71 73 75 76 77 79 80 86 87 90 91 93 97 101 102 104 107 109 110 111 112 113 119 120 125 127 128 129 130 131 132 133 135 137 138 140 141 143 144 145 149 150 154 165 168 170 172 175 178 179 181 186 187 191 194 195 199 204 205 213 214 215 216 217 218 221 223 227 229 230 231 232 235 236 237 238 240 242 244 245 246 b 247 1 0 e # 26017 difference c a 247 0 0 0 1 2 4 5 6 7 9 11 13 14 16 17 18 19 20 21 22 24 25 26 27 28 29 30 31 33 39 42 43 52 53 54 55 56 57 58 59 61 62 63 67 68 69 70 71 74 75 76 77 82 85 86 89 91 94 95 96 98 99 101 102 110 111 112 113 114 117 118 119 120 122 124 125 127 130 131 132 136 140 143 144 151 152 155 158 159 160 161 162 163 165 166 170 172 173 175 177 181 185 187 190 191 194 197 198 199 203 205 206 207 208 209 212 213 214 215 218 219 220 222 224 226 232 233 236 239 243 246 b 247 0 0 0 1 2 4 5 6 7 9 11 13 14 16 17 18 19 20 21 22 24 25 26 27 28 29 30 31 33 39 42 43 52 53 54 55 56 57 58 59 61 62 63 67 68 69 70 71 74 75 76 77 82 85 86 89 91 94 95 96 98 99 101 102 110 111 112 113 114 117 118 119 120 122 124 125 127 130 131 132 136 140 143 144 151 152 155 158 159 160 161 162 163 165 166 170 172 173 175 177 181 185 187 190 191 194 197 198 199 203 205 206 207 208 209 212 213 214 215 218 219 220 222 224 226 232 233 236 239 243 246 # 26018 difference c a 247 0 0 0 1 2 4 5 6 7 9 11 13 14 16 17 18 19 20 21 22 24 25 26 27 28 29 30 31 33 39 42 43 52 53 54 55 56 57 58 59 61 62 63 67 68 69 70 71 74 75 76 77 82 85 86 89 91 94 95 96 98 99 101 102 110 111 112 113 114 117 118 119 120 122 124 125 127 130 131 132 136 140 143 144 151 152 155 158 159 160 161 162 163 165 166 170 172 173 175 177 181 185 187 190 191 194 197 198 199 203 205 206 207 208 209 212 213 214 215 218 219 220 222 224 226 232 233 236 239 243 246 b 247 1 0 f # 26019 difference c a 247 0 0 0 1 2 4 9 10 11 12 18 19 25 26 28 31 39 44 45 46 48 49 52 53 58 63 64 66 68 70 72 75 80 81 83 84 85 90 91 92 93 95 98 100 101 102 103 106 107 110 117 119 125 127 133 135 139 140 144 145 146 148 153 154 155 156 157 161 162 164 167 168 169 170 171 173 176 177 178 181 182 183 184 189 190 191 192 196 206 207 211 216 217 218 220 222 223 224 227 228 229 231 232 236 240 241 244 245 b 247 0 0 0 1 2 4 9 10 11 12 18 19 25 26 28 31 39 44 45 46 48 49 52 53 58 63 64 66 68 70 72 75 80 81 83 84 85 90 91 92 93 95 98 100 101 102 103 106 107 110 117 119 125 127 133 135 139 140 144 145 146 148 153 154 155 156 157 161 162 164 167 168 169 170 171 173 176 177 178 181 182 183 184 189 190 191 192 196 206 207 211 216 217 218 220 222 223 224 227 228 229 231 232 236 240 241 244 245 # 26020 difference c a 247 0 0 0 1 2 4 9 10 11 12 18 19 25 26 28 31 39 44 45 46 48 49 52 53 58 63 64 66 68 70 72 75 80 81 83 84 85 90 91 92 93 95 98 100 101 102 103 106 107 110 117 119 125 127 133 135 139 140 144 145 146 148 153 154 155 156 157 161 162 164 167 168 169 170 171 173 176 177 178 181 182 183 184 189 190 191 192 196 206 207 211 216 217 218 220 222 223 224 227 228 229 231 232 236 240 241 244 245 b 247 1 0 0 1 3 4 5 6 8 10 12 14 15 19 21 22 23 25 26 27 28 29 38 39 40 43 44 46 51 52 56 59 63 64 65 66 69 71 73 74 76 78 80 81 83 85 90 92 95 96 100 105 110 113 114 116 118 119 120 121 123 124 125 126 127 128 129 131 135 137 138 139 140 141 144 146 153 154 156 157 159 160 162 164 165 166 168 169 171 172 173 174 176 177 178 182 185 186 189 190 193 196 198 206 208 209 210 214 215 218 219 221 222 223 224 228 230 232 234 242 244 # 26021 difference c a 247 0 0 e b 247 0 0 e # 26022 difference c a 247 0 0 e b 247 1 1 e # 26023 difference c a 247 0 0 e b 247 0 0 e # 26024 difference c a 247 0 0 e b 247 1 1 f # 26025 difference c a 247 0 0 e b 247 0 0 e # 26026 difference c a 247 0 0 e b 247 1 1 0 1 3 6 8 10 15 17 19 21 23 27 29 30 32 34 37 38 40 41 42 46 47 50 53 55 57 59 60 62 63 64 65 68 70 71 73 74 75 77 78 82 83 86 87 88 90 91 92 93 96 97 98 100 106 109 110 111 113 114 115 118 120 122 126 127 129 133 136 138 141 142 144 145 149 151 155 156 158 164 165 166 167 169 171 172 175 176 181 183 185 186 192 193 194 195 196 197 198 200 201 203 206 208 212 213 219 220 221 224 227 229 232 233 241 242 244 246 # 26027 difference c a 247 0 0 f b 247 0 0 f # 26028 difference c a 247 0 0 f b 247 1 1 e # 26029 difference c a 247 0 0 f b 247 0 0 f # 26030 difference c a 247 0 0 f b 247 1 1 f # 26031 difference c a 247 0 0 f b 247 0 0 f # 26032 difference c a 247 0 0 f b 247 1 1 3 7 10 12 13 14 15 16 20 22 23 24 25 26 29 31 34 35 36 37 39 45 50 52 55 57 59 60 61 67 69 70 71 74 75 79 80 81 82 83 86 87 92 93 94 97 100 103 106 107 109 112 114 116 117 119 120 121 123 124 125 127 128 131 132 133 134 136 138 142 144 145 146 147 150 152 153 155 156 157 158 159 162 163 164 167 168 172 174 175 176 177 182 186 189 192 193 195 197 198 200 202 203 204 205 207 208 209 216 218 219 221 224 225 228 230 231 232 233 236 237 239 240 244 245 246 # 26033 difference c a 247 0 0 6 7 9 10 11 12 14 16 17 18 20 21 22 23 24 28 29 30 34 35 36 37 40 43 44 47 53 57 60 62 63 64 65 66 67 68 71 72 73 77 79 80 85 87 88 89 90 93 101 102 104 106 109 113 115 116 117 118 119 120 121 125 126 127 128 134 136 138 139 143 145 146 148 149 151 155 158 160 162 166 168 169 175 179 182 183 184 185 186 189 191 192 196 197 198 199 200 201 203 205 206 207 209 210 217 218 219 220 222 223 225 228 229 230 231 232 234 236 241 242 243 245 b 247 0 0 6 7 9 10 11 12 14 16 17 18 20 21 22 23 24 28 29 30 34 35 36 37 40 43 44 47 53 57 60 62 63 64 65 66 67 68 71 72 73 77 79 80 85 87 88 89 90 93 101 102 104 106 109 113 115 116 117 118 119 120 121 125 126 127 128 134 136 138 139 143 145 146 148 149 151 155 158 160 162 166 168 169 175 179 182 183 184 185 186 189 191 192 196 197 198 199 200 201 203 205 206 207 209 210 217 218 219 220 222 223 225 228 229 230 231 232 234 236 241 242 243 245 # 26034 difference c a 247 0 0 6 7 9 10 11 12 14 16 17 18 20 21 22 23 24 28 29 30 34 35 36 37 40 43 44 47 53 57 60 62 63 64 65 66 67 68 71 72 73 77 79 80 85 87 88 89 90 93 101 102 104 106 109 113 115 116 117 118 119 120 121 125 126 127 128 134 136 138 139 143 145 146 148 149 151 155 158 160 162 166 168 169 175 179 182 183 184 185 186 189 191 192 196 197 198 199 200 201 203 205 206 207 209 210 217 218 219 220 222 223 225 228 229 230 231 232 234 236 241 242 243 245 b 247 1 1 e # 26035 difference c a 247 0 0 0 1 3 4 8 10 13 16 18 23 24 27 28 31 33 34 38 40 45 47 51 52 53 55 57 58 63 65 69 70 71 75 76 77 78 81 82 84 87 91 92 94 95 99 102 103 105 108 110 111 113 115 118 119 120 122 124 125 128 129 130 133 134 135 136 140 141 143 144 145 146 147 149 150 151 155 157 160 164 166 167 168 171 173 174 175 177 178 179 180 181 182 183 186 190 196 199 200 203 206 207 208 209 211 212 214 215 217 219 220 222 226 228 230 231 232 234 235 236 237 238 239 240 b 247 0 0 0 1 3 4 8 10 13 16 18 23 24 27 28 31 33 34 38 40 45 47 51 52 53 55 57 58 63 65 69 70 71 75 76 77 78 81 82 84 87 91 92 94 95 99 102 103 105 108 110 111 113 115 118 119 120 122 124 125 128 129 130 133 134 135 136 140 141 143 144 145 146 147 149 150 151 155 157 160 164 166 167 168 171 173 174 175 177 178 179 180 181 182 183 186 190 196 199 200 203 206 207 208 209 211 212 214 215 217 219 220 222 226 228 230 231 232 234 235 236 237 238 239 240 # 26036 difference c a 247 0 0 0 1 3 4 8 10 13 16 18 23 24 27 28 31 33 34 38 40 45 47 51 52 53 55 57 58 63 65 69 70 71 75 76 77 78 81 82 84 87 91 92 94 95 99 102 103 105 108 110 111 113 115 118 119 120 122 124 125 128 129 130 133 134 135 136 140 141 143 144 145 146 147 149 150 151 155 157 160 164 166 167 168 171 173 174 175 177 178 179 180 181 182 183 186 190 196 199 200 203 206 207 208 209 211 212 214 215 217 219 220 222 226 228 230 231 232 234 235 236 237 238 239 240 b 247 1 1 f # 26037 difference c a 247 0 0 0 1 2 3 4 6 8 11 13 14 15 18 23 27 28 29 31 32 34 35 40 41 43 46 47 48 49 51 53 54 63 64 65 66 69 72 73 76 79 80 81 82 85 86 87 89 90 99 101 102 103 104 107 114 115 116 122 123 124 127 129 130 131 132 133 134 136 137 141 142 143 144 145 147 149 151 153 154 157 159 160 161 164 166 167 171 172 175 176 177 178 180 182 185 186 188 189 192 193 194 195 196 197 201 202 204 207 214 215 216 217 219 220 223 229 232 234 235 236 237 238 241 242 243 245 b 247 0 0 0 1 2 3 4 6 8 11 13 14 15 18 23 27 28 29 31 32 34 35 40 41 43 46 47 48 49 51 53 54 63 64 65 66 69 72 73 76 79 80 81 82 85 86 87 89 90 99 101 102 103 104 107 114 115 116 122 123 124 127 129 130 131 132 133 134 136 137 141 142 143 144 145 147 149 151 153 154 157 159 160 161 164 166 167 171 172 175 176 177 178 180 182 185 186 188 189 192 193 194 195 196 197 201 202 204 207 214 215 216 217 219 220 223 229 232 234 235 236 237 238 241 242 243 245 # 26038 difference c a 247 0 0 0 1 2 3 4 6 8 11 13 14 15 18 23 27 28 29 31 32 34 35 40 41 43 46 47 48 49 51 53 54 63 64 65 66 69 72 73 76 79 80 81 82 85 86 87 89 90 99 101 102 103 104 107 114 115 116 122 123 124 127 129 130 131 132 133 134 136 137 141 142 143 144 145 147 149 151 153 154 157 159 160 161 164 166 167 171 172 175 176 177 178 180 182 185 186 188 189 192 193 194 195 196 197 201 202 204 207 214 215 216 217 219 220 223 229 232 234 235 236 237 238 241 242 243 245 b 247 1 1 1 2 3 10 11 12 13 17 18 20 21 22 25 27 32 37 38 39 42 43 45 47 48 50 53 54 56 57 61 62 66 67 68 70 72 78 80 81 82 83 84 87 89 91 92 93 94 97 98 101 105 107 110 111 113 114 119 121 124 126 127 129 133 134 135 139 140 142 145 146 151 152 153 155 157 158 160 161 162 164 165 166 168 170 171 172 173 174 177 178 179 180 181 183 184 185 186 187 188 194 197 202 205 207 208 211 213 214 215 216 218 220 222 224 225 226 231 232 234 235 238 240 242 243 245 246 # 26039 difference c a 247 0 1 e b 247 0 1 e # 26040 difference c a 247 0 1 e b 247 0 0 e # 26041 difference c a 247 0 1 e b 247 0 1 e # 26042 difference c a 247 0 1 e b 247 0 0 f # 26043 difference c a 247 0 1 e b 247 0 1 e # 26044 difference c a 247 0 1 e b 247 0 0 0 2 7 11 12 13 17 21 24 27 28 30 31 33 35 37 39 40 41 43 44 45 49 50 51 52 53 57 60 61 62 64 67 68 69 70 71 72 74 76 77 78 80 86 87 94 95 97 98 100 101 104 106 107 109 111 113 115 118 120 121 122 123 126 127 129 132 133 134 135 136 137 138 143 144 145 150 151 154 156 157 160 162 163 171 173 177 178 179 182 184 185 186 187 188 191 192 195 196 197 199 201 202 203 207 209 210 214 217 219 221 222 223 226 227 230 232 233 236 242 243 244 245 # 26045 difference c a 247 0 1 f b 247 0 1 f # 26046 difference c a 247 0 1 f b 247 0 0 e # 26047 difference c a 247 0 1 f b 247 0 1 f # 26048 difference c a 247 0 1 f b 247 0 0 f # 26049 difference c a 247 0 1 f b 247 0 1 f # 26050 difference c a 247 0 1 f b 247 0 0 0 1 2 3 4 5 6 7 9 10 15 17 18 19 20 24 26 27 29 37 39 40 42 44 46 47 49 50 53 59 61 62 63 67 69 70 73 75 76 78 81 83 84 85 89 90 91 92 93 97 102 103 104 106 107 108 109 113 116 117 120 122 123 127 129 131 132 133 135 138 139 140 144 146 147 150 151 152 153 154 157 158 159 160 163 165 166 169 172 173 174 175 178 180 181 184 186 189 190 191 192 194 198 199 202 204 205 209 210 211 212 218 219 220 221 222 223 227 228 229 237 240 245 246 # 26051 difference c a 247 0 1 0 2 3 8 9 12 14 16 18 19 20 25 26 27 29 30 32 34 36 39 41 46 48 52 53 54 58 59 61 62 65 69 70 71 72 78 80 81 82 83 84 86 88 89 90 92 93 95 96 97 100 103 105 107 111 113 114 115 117 120 122 129 130 132 137 140 141 144 148 150 151 152 155 156 157 159 161 166 170 175 176 177 179 181 183 185 186 191 196 198 200 201 205 208 210 211 214 215 217 219 222 224 226 227 228 229 231 232 233 234 236 238 240 241 b 247 0 1 0 2 3 8 9 12 14 16 18 19 20 25 26 27 29 30 32 34 36 39 41 46 48 52 53 54 58 59 61 62 65 69 70 71 72 78 80 81 82 83 84 86 88 89 90 92 93 95 96 97 100 103 105 107 111 113 114 115 117 120 122 129 130 132 137 140 141 144 148 150 151 152 155 156 157 159 161 166 170 175 176 177 179 181 183 185 186 191 196 198 200 201 205 208 210 211 214 215 217 219 222 224 226 227 228 229 231 232 233 234 236 238 240 241 # 26052 difference c a 247 0 1 0 2 3 8 9 12 14 16 18 19 20 25 26 27 29 30 32 34 36 39 41 46 48 52 53 54 58 59 61 62 65 69 70 71 72 78 80 81 82 83 84 86 88 89 90 92 93 95 96 97 100 103 105 107 111 113 114 115 117 120 122 129 130 132 137 140 141 144 148 150 151 152 155 156 157 159 161 166 170 175 176 177 179 181 183 185 186 191 196 198 200 201 205 208 210 211 214 215 217 219 222 224 226 227 228 229 231 232 233 234 236 238 240 241 b 247 0 0 e # 26053 difference c a 247 0 1 4 5 6 8 11 12 15 17 18 19 20 21 24 26 27 31 32 33 36 38 39 41 42 45 48 49 51 52 53 54 55 56 57 58 60 61 63 64 65 68 69 72 73 74 76 78 79 81 82 84 85 86 87 89 92 93 98 102 105 106 113 114 116 117 118 122 124 125 126 129 130 131 132 133 136 140 141 142 144 150 151 152 154 155 157 159 162 166 168 172 174 175 176 179 180 181 182 185 187 190 191 192 193 195 201 202 204 207 208 210 214 215 218 219 220 221 222 224 229 230 231 236 237 239 241 243 246 b 247 0 1 4 5 6 8 11 12 15 17 18 19 20 21 24 26 27 31 32 33 36 38 39 41 42 45 48 49 51 52 53 54 55 56 57 58 60 61 63 64 65 68 69 72 73 74 76 78 79 81 82 84 85 86 87 89 92 93 98 102 105 106 113 114 116 117 118 122 124 125 126 129 130 131 132 133 136 140 141 142 144 150 151 152 154 155 157 159 162 166 168 172 174 175 176 179 180 181 182 185 187 190 191 192 193 195 201 202 204 207 208 210 214 215 218 219 220 221 222 224 229 230 231 236 237 239 241 243 246 # 26054 difference c a 247 0 1 4 5 6 8 11 12 15 17 18 19 20 21 24 26 27 31 32 33 36 38 39 41 42 45 48 49 51 52 53 54 55 56 57 58 60 61 63 64 65 68 69 72 73 74 76 78 79 81 82 84 85 86 87 89 92 93 98 102 105 106 113 114 116 117 118 122 124 125 126 129 130 131 132 133 136 140 141 142 144 150 151 152 154 155 157 159 162 166 168 172 174 175 176 179 180 181 182 185 187 190 191 192 193 195 201 202 204 207 208 210 214 215 218 219 220 221 222 224 229 230 231 236 237 239 241 243 246 b 247 0 0 f # 26055 difference c a 247 0 1 0 2 5 7 8 12 13 14 15 19 28 29 30 33 34 40 43 46 47 48 50 54 55 60 62 64 65 66 68 69 70 71 75 76 78 79 81 83 85 86 87 90 93 98 101 103 104 105 106 107 108 109 112 113 115 116 118 119 120 121 125 126 127 128 129 133 134 137 141 142 148 149 151 152 154 157 161 163 167 169 171 174 175 176 179 182 183 184 185 191 193 194 195 198 199 203 204 206 207 208 209 210 211 214 218 219 220 222 223 225 226 227 232 233 237 240 241 246 b 247 0 1 0 2 5 7 8 12 13 14 15 19 28 29 30 33 34 40 43 46 47 48 50 54 55 60 62 64 65 66 68 69 70 71 75 76 78 79 81 83 85 86 87 90 93 98 101 103 104 105 106 107 108 109 112 113 115 116 118 119 120 121 125 126 127 128 129 133 134 137 141 142 148 149 151 152 154 157 161 163 167 169 171 174 175 176 179 182 183 184 185 191 193 194 195 198 199 203 204 206 207 208 209 210 211 214 218 219 220 222 223 225 226 227 232 233 237 240 241 246 # 26056 difference c a 247 0 1 0 2 5 7 8 12 13 14 15 19 28 29 30 33 34 40 43 46 47 48 50 54 55 60 62 64 65 66 68 69 70 71 75 76 78 79 81 83 85 86 87 90 93 98 101 103 104 105 106 107 108 109 112 113 115 116 118 119 120 121 125 126 127 128 129 133 134 137 141 142 148 149 151 152 154 157 161 163 167 169 171 174 175 176 179 182 183 184 185 191 193 194 195 198 199 203 204 206 207 208 209 210 211 214 218 219 220 222 223 225 226 227 232 233 237 240 241 246 b 247 0 0 0 2 5 9 10 11 15 18 19 20 21 22 24 25 29 34 37 38 40 41 45 46 49 52 54 55 59 60 61 62 65 66 68 70 71 74 77 78 79 80 83 86 87 94 95 99 100 102 104 105 106 108 109 111 112 113 114 116 117 121 122 123 125 129 132 135 136 138 139 140 143 144 147 148 149 154 155 161 162 164 166 167 169 170 177 180 181 182 185 186 190 192 193 194 195 196 197 198 200 201 202 203 204 210 213 218 219 220 221 223 224 225 226 227 228 229 236 237 238 241 244 245 246 # 26057 difference c a 247 0 1 e b 247 0 1 e # 26058 difference c a 247 0 1 e b 247 0 1 e # 26059 difference c a 247 0 1 e b 247 0 1 e # 26060 difference c a 247 0 1 e b 247 0 1 f # 26061 difference c a 247 0 1 e b 247 0 1 e # 26062 difference c a 247 0 1 e b 247 0 1 2 3 5 7 8 10 12 14 16 17 18 20 21 23 24 32 37 40 41 42 43 50 56 57 58 62 64 68 69 71 72 74 76 78 80 81 85 91 94 101 103 107 108 109 111 112 113 115 117 119 120 121 122 124 125 126 130 136 137 139 140 141 142 147 148 149 150 151 153 158 159 161 163 165 169 174 175 176 178 179 180 181 182 184 186 189 190 191 192 194 196 197 198 200 202 204 207 208 211 215 219 222 225 226 228 229 230 233 234 237 238 239 242 244 245 # 26063 difference c a 247 0 1 f b 247 0 1 f # 26064 difference c a 247 0 1 f b 247 0 1 e # 26065 difference c a 247 0 1 f b 247 0 1 f # 26066 difference c a 247 0 1 f b 247 0 1 f # 26067 difference c a 247 0 1 f b 247 0 1 f # 26068 difference c a 247 0 1 f b 247 0 1 2 5 7 9 11 12 14 17 18 19 20 21 22 23 26 27 28 29 32 33 36 37 40 41 44 46 49 52 53 55 57 58 60 61 63 64 65 67 68 73 74 77 78 79 81 82 84 89 91 92 93 94 95 96 97 98 99 103 106 107 108 109 110 112 113 114 115 116 117 118 120 123 125 126 128 129 135 136 138 139 140 141 143 145 148 150 151 152 153 154 156 157 158 159 160 164 165 168 171 174 175 180 181 183 184 187 190 194 198 200 201 205 206 207 211 213 214 217 219 223 224 226 227 228 229 231 232 239 241 242 243 244 246 # 26069 difference c a 247 0 1 4 6 16 17 21 26 27 28 30 32 35 36 39 41 43 44 45 46 47 48 53 56 59 60 63 64 65 66 68 69 72 73 75 78 80 81 83 84 85 87 89 90 93 96 98 99 103 104 106 108 110 117 118 119 120 121 124 125 126 128 132 135 136 137 139 141 143 145 148 151 152 155 157 164 165 166 167 168 170 173 176 178 180 183 184 187 189 191 193 201 203 204 205 207 211 214 216 220 225 227 228 229 230 232 235 240 241 b 247 0 1 4 6 16 17 21 26 27 28 30 32 35 36 39 41 43 44 45 46 47 48 53 56 59 60 63 64 65 66 68 69 72 73 75 78 80 81 83 84 85 87 89 90 93 96 98 99 103 104 106 108 110 117 118 119 120 121 124 125 126 128 132 135 136 137 139 141 143 145 148 151 152 155 157 164 165 166 167 168 170 173 176 178 180 183 184 187 189 191 193 201 203 204 205 207 211 214 216 220 225 227 228 229 230 232 235 240 241 # 26070 difference c a 247 0 1 4 6 16 17 21 26 27 28 30 32 35 36 39 41 43 44 45 46 47 48 53 56 59 60 63 64 65 66 68 69 72 73 75 78 80 81 83 84 85 87 89 90 93 96 98 99 103 104 106 108 110 117 118 119 120 121 124 125 126 128 132 135 136 137 139 141 143 145 148 151 152 155 157 164 165 166 167 168 170 173 176 178 180 183 184 187 189 191 193 201 203 204 205 207 211 214 216 220 225 227 228 229 230 232 235 240 241 b 247 0 1 e # 26071 difference c a 247 0 1 2 3 7 9 12 13 16 17 18 20 22 24 25 26 28 30 32 34 36 38 45 46 47 52 54 55 57 58 61 63 67 68 71 73 75 77 78 79 84 86 87 89 91 92 93 94 95 97 98 99 102 103 104 111 113 114 117 119 120 122 123 126 129 131 132 135 136 137 139 141 142 143 144 145 146 148 151 152 155 156 160 161 162 163 166 171 173 176 178 180 184 185 188 189 190 191 192 193 194 197 198 199 201 203 204 205 207 212 214 215 221 224 226 227 230 231 234 239 240 242 243 244 245 b 247 0 1 2 3 7 9 12 13 16 17 18 20 22 24 25 26 28 30 32 34 36 38 45 46 47 52 54 55 57 58 61 63 67 68 71 73 75 77 78 79 84 86 87 89 91 92 93 94 95 97 98 99 102 103 104 111 113 114 117 119 120 122 123 126 129 131 132 135 136 137 139 141 142 143 144 145 146 148 151 152 155 156 160 161 162 163 166 171 173 176 178 180 184 185 188 189 190 191 192 193 194 197 198 199 201 203 204 205 207 212 214 215 221 224 226 227 230 231 234 239 240 242 243 244 245 # 26072 difference c a 247 0 1 2 3 7 9 12 13 16 17 18 20 22 24 25 26 28 30 32 34 36 38 45 46 47 52 54 55 57 58 61 63 67 68 71 73 75 77 78 79 84 86 87 89 91 92 93 94 95 97 98 99 102 103 104 111 113 114 117 119 120 122 123 126 129 131 132 135 136 137 139 141 142 143 144 145 146 148 151 152 155 156 160 161 162 163 166 171 173 176 178 180 184 185 188 189 190 191 192 193 194 197 198 199 201 203 204 205 207 212 214 215 221 224 226 227 230 231 234 239 240 242 243 244 245 b 247 0 1 f # 26073 difference c a 247 0 1 1 2 5 6 9 13 15 18 19 20 21 22 24 30 31 33 37 38 39 40 44 45 49 50 51 52 53 55 57 59 62 64 65 66 68 69 71 73 76 79 82 87 90 91 92 93 95 96 99 101 102 104 105 106 111 112 116 117 123 124 126 127 128 129 131 132 138 139 142 144 147 148 149 152 153 155 157 158 159 160 162 163 167 168 172 175 177 178 180 182 183 184 185 186 188 191 192 194 196 197 198 202 203 204 206 210 211 212 214 215 218 220 223 226 229 230 236 239 240 242 244 245 b 247 0 1 1 2 5 6 9 13 15 18 19 20 21 22 24 30 31 33 37 38 39 40 44 45 49 50 51 52 53 55 57 59 62 64 65 66 68 69 71 73 76 79 82 87 90 91 92 93 95 96 99 101 102 104 105 106 111 112 116 117 123 124 126 127 128 129 131 132 138 139 142 144 147 148 149 152 153 155 157 158 159 160 162 163 167 168 172 175 177 178 180 182 183 184 185 186 188 191 192 194 196 197 198 202 203 204 206 210 211 212 214 215 218 220 223 226 229 230 236 239 240 242 244 245 # 26074 difference c a 247 0 1 1 2 5 6 9 13 15 18 19 20 21 22 24 30 31 33 37 38 39 40 44 45 49 50 51 52 53 55 57 59 62 64 65 66 68 69 71 73 76 79 82 87 90 91 92 93 95 96 99 101 102 104 105 106 111 112 116 117 123 124 126 127 128 129 131 132 138 139 142 144 147 148 149 152 153 155 157 158 159 160 162 163 167 168 172 175 177 178 180 182 183 184 185 186 188 191 192 194 196 197 198 202 203 204 206 210 211 212 214 215 218 220 223 226 229 230 236 239 240 242 244 245 b 247 0 1 3 7 8 10 12 13 14 18 19 21 24 29 33 40 43 46 47 48 49 50 52 53 57 58 59 60 63 64 68 69 71 73 74 75 77 78 81 82 84 86 88 90 91 92 94 95 96 98 99 102 103 106 107 109 111 114 117 123 124 125 126 129 133 135 137 138 139 140 147 149 153 156 158 159 160 161 164 165 166 168 169 172 173 174 181 182 183 184 186 188 189 191 192 193 194 195 196 197 200 202 203 205 208 209 210 212 213 214 217 218 220 222 225 228 230 231 232 233 237 238 241 242 244 245 246 # 26075 difference c a 247 0 1 e b 247 0 1 e # 26076 difference c a 247 0 1 e b 247 1 0 e # 26077 difference c a 247 0 1 e b 247 0 1 e # 26078 difference c a 247 0 1 e b 247 1 0 f # 26079 difference c a 247 0 1 e b 247 0 1 e # 26080 difference c a 247 0 1 e b 247 1 0 1 2 7 8 11 13 14 16 18 19 20 22 24 29 30 32 33 34 36 39 40 42 46 47 48 50 51 52 53 55 57 60 62 64 65 66 67 69 70 74 75 76 77 78 79 81 82 87 91 92 95 98 99 103 104 107 108 110 112 113 117 119 122 123 124 126 127 130 131 132 133 135 137 138 141 144 145 146 148 149 151 153 154 157 159 161 164 165 168 173 176 178 179 181 182 183 184 185 186 190 191 194 201 202 203 204 206 207 209 210 211 212 215 218 219 220 221 223 227 228 229 232 234 235 237 238 239 240 242 244 # 26081 difference c a 247 0 1 f b 247 0 1 f # 26082 difference c a 247 0 1 f b 247 1 0 e # 26083 difference c a 247 0 1 f b 247 0 1 f # 26084 difference c a 247 0 1 f b 247 1 0 f # 26085 difference c a 247 0 1 f b 247 0 1 f # 26086 difference c a 247 0 1 f b 247 1 0 1 3 8 9 10 11 12 15 18 19 20 21 22 23 24 26 29 32 33 36 37 38 39 40 43 44 45 46 49 52 53 57 58 60 62 63 64 66 67 69 70 76 77 80 81 84 85 86 87 88 89 91 92 95 96 98 101 102 104 106 107 111 112 113 115 118 122 124 127 128 132 134 135 138 139 140 142 143 144 148 150 151 153 158 160 163 166 167 168 169 170 172 175 176 177 180 184 185 186 189 191 192 193 194 199 204 205 209 210 212 214 215 217 221 224 226 227 228 230 231 232 238 239 241 # 26087 difference c a 247 0 1 0 1 6 7 8 9 10 11 12 14 15 18 19 20 22 24 25 26 27 29 31 32 33 36 37 39 40 42 43 44 45 50 52 53 54 55 58 59 61 62 64 65 66 67 68 70 71 72 73 74 75 76 80 83 84 88 93 94 95 96 97 98 99 102 105 107 108 111 112 113 115 116 117 119 122 125 131 132 134 135 138 140 142 144 147 150 151 152 153 157 158 159 160 162 163 164 165 166 168 169 171 172 175 176 178 180 181 183 187 190 192 193 194 195 197 201 208 210 211 213 214 215 218 219 220 221 222 223 225 226 227 228 232 233 234 240 243 246 b 247 0 1 0 1 6 7 8 9 10 11 12 14 15 18 19 20 22 24 25 26 27 29 31 32 33 36 37 39 40 42 43 44 45 50 52 53 54 55 58 59 61 62 64 65 66 67 68 70 71 72 73 74 75 76 80 83 84 88 93 94 95 96 97 98 99 102 105 107 108 111 112 113 115 116 117 119 122 125 131 132 134 135 138 140 142 144 147 150 151 152 153 157 158 159 160 162 163 164 165 166 168 169 171 172 175 176 178 180 181 183 187 190 192 193 194 195 197 201 208 210 211 213 214 215 218 219 220 221 222 223 225 226 227 228 232 233 234 240 243 246 # 26088 difference c a 247 0 1 0 1 6 7 8 9 10 11 12 14 15 18 19 20 22 24 25 26 27 29 31 32 33 36 37 39 40 42 43 44 45 50 52 53 54 55 58 59 61 62 64 65 66 67 68 70 71 72 73 74 75 76 80 83 84 88 93 94 95 96 97 98 99 102 105 107 108 111 112 113 115 116 117 119 122 125 131 132 134 135 138 140 142 144 147 150 151 152 153 157 158 159 160 162 163 164 165 166 168 169 171 172 175 176 178 180 181 183 187 190 192 193 194 195 197 201 208 210 211 213 214 215 218 219 220 221 222 223 225 226 227 228 232 233 234 240 243 246 b 247 1 0 e # 26089 difference c a 247 0 1 0 1 4 7 8 10 11 13 16 17 22 25 26 29 30 31 32 36 37 41 43 44 47 51 52 53 56 57 60 63 64 65 67 68 74 76 80 81 83 84 86 87 90 92 95 96 98 99 100 101 102 105 106 110 111 114 115 116 117 118 121 122 124 125 127 129 130 132 133 134 136 137 138 139 141 142 143 145 146 147 151 153 154 156 161 162 164 165 166 168 169 172 175 177 178 179 183 186 188 190 191 193 195 196 197 199 200 201 207 211 212 213 214 215 217 220 221 224 229 232 234 236 238 240 b 247 0 1 0 1 4 7 8 10 11 13 16 17 22 25 26 29 30 31 32 36 37 41 43 44 47 51 52 53 56 57 60 63 64 65 67 68 74 76 80 81 83 84 86 87 90 92 95 96 98 99 100 101 102 105 106 110 111 114 115 116 117 118 121 122 124 125 127 129 130 132 133 134 136 137 138 139 141 142 143 145 146 147 151 153 154 156 161 162 164 165 166 168 169 172 175 177 178 179 183 186 188 190 191 193 195 196 197 199 200 201 207 211 212 213 214 215 217 220 221 224 229 232 234 236 238 240 # 26090 difference c a 247 0 1 0 1 4 7 8 10 11 13 16 17 22 25 26 29 30 31 32 36 37 41 43 44 47 51 52 53 56 57 60 63 64 65 67 68 74 76 80 81 83 84 86 87 90 92 95 96 98 99 100 101 102 105 106 110 111 114 115 116 117 118 121 122 124 125 127 129 130 132 133 134 136 137 138 139 141 142 143 145 146 147 151 153 154 156 161 162 164 165 166 168 169 172 175 177 178 179 183 186 188 190 191 193 195 196 197 199 200 201 207 211 212 213 214 215 217 220 221 224 229 232 234 236 238 240 b 247 1 0 f # 26091 difference c a 247 0 1 0 1 2 4 5 9 11 15 16 17 20 21 25 26 27 29 32 35 36 37 40 41 44 45 47 49 55 58 62 64 67 73 74 77 79 80 84 85 88 90 92 96 97 99 105 106 107 108 109 110 111 113 114 116 118 119 122 124 126 127 129 130 133 134 135 136 137 139 140 142 145 146 147 148 150 152 153 154 155 158 162 163 165 166 168 174 175 176 178 179 180 183 186 188 189 190 193 195 196 197 199 201 203 204 205 207 210 212 215 216 222 225 228 234 239 240 244 245 b 247 0 1 0 1 2 4 5 9 11 15 16 17 20 21 25 26 27 29 32 35 36 37 40 41 44 45 47 49 55 58 62 64 67 73 74 77 79 80 84 85 88 90 92 96 97 99 105 106 107 108 109 110 111 113 114 116 118 119 122 124 126 127 129 130 133 134 135 136 137 139 140 142 145 146 147 148 150 152 153 154 155 158 162 163 165 166 168 174 175 176 178 179 180 183 186 188 189 190 193 195 196 197 199 201 203 204 205 207 210 212 215 216 222 225 228 234 239 240 244 245 # 26092 difference c a 247 0 1 0 1 2 4 5 9 11 15 16 17 20 21 25 26 27 29 32 35 36 37 40 41 44 45 47 49 55 58 62 64 67 73 74 77 79 80 84 85 88 90 92 96 97 99 105 106 107 108 109 110 111 113 114 116 118 119 122 124 126 127 129 130 133 134 135 136 137 139 140 142 145 146 147 148 150 152 153 154 155 158 162 163 165 166 168 174 175 176 178 179 180 183 186 188 189 190 193 195 196 197 199 201 203 204 205 207 210 212 215 216 222 225 228 234 239 240 244 245 b 247 1 0 2 3 4 6 8 9 12 13 14 15 18 20 22 23 25 27 28 32 36 37 38 39 40 45 50 51 52 53 54 56 57 58 62 63 65 68 70 71 75 77 84 87 92 93 96 97 99 102 103 104 105 107 108 109 111 112 113 115 117 118 121 122 123 124 127 129 130 131 133 135 136 137 138 140 143 145 146 147 151 154 156 157 160 162 163 166 167 169 173 174 175 176 177 178 181 182 183 185 187 188 189 196 201 203 204 206 207 209 210 212 213 215 216 218 222 226 228 233 239 243 246 # 26093 difference c a 247 0 1 e b 247 0 1 e # 26094 difference c a 247 0 1 e b 247 1 1 e # 26095 difference c a 247 0 1 e b 247 0 1 e # 26096 difference c a 247 0 1 e b 247 1 1 f # 26097 difference c a 247 0 1 e b 247 0 1 e # 26098 difference c a 247 0 1 e b 247 1 1 0 1 2 7 8 9 10 11 12 16 18 20 23 24 25 26 27 28 30 31 33 35 36 37 39 40 42 43 48 51 52 53 55 56 59 60 62 64 67 69 70 72 76 77 78 85 86 87 90 92 94 95 96 97 98 99 100 103 104 107 109 114 117 122 123 124 126 132 133 134 135 138 141 142 145 146 147 151 152 153 154 158 159 160 163 166 169 170 171 172 173 176 178 180 182 185 186 187 189 190 193 195 199 200 203 205 206 207 208 209 211 216 221 223 224 225 228 229 230 231 232 234 237 240 242 243 244 # 26099 difference c a 247 0 1 f b 247 0 1 f # 26100 difference c a 247 0 1 f b 247 1 1 e # 26101 difference c a 247 0 1 f b 247 0 1 f # 26102 difference c a 247 0 1 f b 247 1 1 f # 26103 difference c a 247 0 1 f b 247 0 1 f # 26104 difference c a 247 0 1 f b 247 1 1 0 2 3 4 5 8 10 11 13 14 16 18 19 20 21 23 25 26 30 32 33 37 38 40 41 44 48 53 55 59 60 64 66 69 70 72 73 75 77 79 81 83 85 87 89 90 92 94 95 96 97 99 100 103 105 108 109 113 114 115 116 118 121 122 127 129 130 131 132 134 136 138 139 140 142 145 150 151 154 155 156 158 160 161 163 164 165 167 169 170 173 174 176 178 180 182 184 185 186 187 189 199 202 203 204 205 207 208 209 210 211 213 214 216 217 220 221 225 226 227 231 237 240 242 245 246 # 26105 difference c a 247 0 1 1 4 5 6 7 9 10 11 12 13 15 17 19 21 24 27 28 30 31 33 36 41 44 45 46 48 51 53 55 57 58 59 61 62 63 64 67 68 70 76 78 79 80 82 83 86 89 91 92 94 96 97 99 103 105 111 112 113 114 117 118 120 123 124 125 127 128 130 132 133 136 137 138 139 141 142 144 145 146 148 150 151 152 153 154 156 157 159 161 164 165 167 168 170 173 174 176 177 179 182 183 189 191 192 193 195 196 197 199 200 204 207 208 209 216 217 218 221 224 226 232 235 236 237 239 240 241 242 246 b 247 0 1 1 4 5 6 7 9 10 11 12 13 15 17 19 21 24 27 28 30 31 33 36 41 44 45 46 48 51 53 55 57 58 59 61 62 63 64 67 68 70 76 78 79 80 82 83 86 89 91 92 94 96 97 99 103 105 111 112 113 114 117 118 120 123 124 125 127 128 130 132 133 136 137 138 139 141 142 144 145 146 148 150 151 152 153 154 156 157 159 161 164 165 167 168 170 173 174 176 177 179 182 183 189 191 192 193 195 196 197 199 200 204 207 208 209 216 217 218 221 224 226 232 235 236 237 239 240 241 242 246 # 26106 difference c a 247 0 1 1 4 5 6 7 9 10 11 12 13 15 17 19 21 24 27 28 30 31 33 36 41 44 45 46 48 51 53 55 57 58 59 61 62 63 64 67 68 70 76 78 79 80 82 83 86 89 91 92 94 96 97 99 103 105 111 112 113 114 117 118 120 123 124 125 127 128 130 132 133 136 137 138 139 141 142 144 145 146 148 150 151 152 153 154 156 157 159 161 164 165 167 168 170 173 174 176 177 179 182 183 189 191 192 193 195 196 197 199 200 204 207 208 209 216 217 218 221 224 226 232 235 236 237 239 240 241 242 246 b 247 1 1 e # 26107 difference c a 247 0 1 0 1 7 9 10 11 14 16 18 19 21 23 24 26 30 34 35 36 42 45 46 49 51 52 54 55 56 57 60 62 64 66 67 68 70 71 72 73 76 78 81 85 88 89 91 92 94 95 96 97 105 110 111 115 117 118 119 120 122 123 124 125 128 129 130 135 137 139 142 144 147 150 152 153 154 158 161 163 165 166 167 168 170 172 173 174 175 177 178 179 181 183 187 188 193 195 196 198 199 200 201 202 203 204 205 208 211 212 213 214 216 219 220 221 222 230 233 234 236 238 240 243 b 247 0 1 0 1 7 9 10 11 14 16 18 19 21 23 24 26 30 34 35 36 42 45 46 49 51 52 54 55 56 57 60 62 64 66 67 68 70 71 72 73 76 78 81 85 88 89 91 92 94 95 96 97 105 110 111 115 117 118 119 120 122 123 124 125 128 129 130 135 137 139 142 144 147 150 152 153 154 158 161 163 165 166 167 168 170 172 173 174 175 177 178 179 181 183 187 188 193 195 196 198 199 200 201 202 203 204 205 208 211 212 213 214 216 219 220 221 222 230 233 234 236 238 240 243 # 26108 difference c a 247 0 1 0 1 7 9 10 11 14 16 18 19 21 23 24 26 30 34 35 36 42 45 46 49 51 52 54 55 56 57 60 62 64 66 67 68 70 71 72 73 76 78 81 85 88 89 91 92 94 95 96 97 105 110 111 115 117 118 119 120 122 123 124 125 128 129 130 135 137 139 142 144 147 150 152 153 154 158 161 163 165 166 167 168 170 172 173 174 175 177 178 179 181 183 187 188 193 195 196 198 199 200 201 202 203 204 205 208 211 212 213 214 216 219 220 221 222 230 233 234 236 238 240 243 b 247 1 1 f # 26109 difference c a 247 0 1 1 2 3 4 6 8 10 12 15 16 18 20 25 26 27 33 38 40 41 42 45 50 52 54 57 59 63 65 67 71 75 77 82 84 86 89 90 95 96 98 100 103 104 105 106 107 108 109 114 115 116 119 123 125 126 129 130 131 133 134 136 137 140 141 142 143 144 146 147 148 150 155 156 163 167 168 171 174 176 177 178 179 180 181 184 185 187 189 191 194 196 197 199 201 203 206 207 208 209 210 211 212 213 215 216 217 218 219 220 221 222 226 230 231 234 236 237 239 240 242 b 247 0 1 1 2 3 4 6 8 10 12 15 16 18 20 25 26 27 33 38 40 41 42 45 50 52 54 57 59 63 65 67 71 75 77 82 84 86 89 90 95 96 98 100 103 104 105 106 107 108 109 114 115 116 119 123 125 126 129 130 131 133 134 136 137 140 141 142 143 144 146 147 148 150 155 156 163 167 168 171 174 176 177 178 179 180 181 184 185 187 189 191 194 196 197 199 201 203 206 207 208 209 210 211 212 213 215 216 217 218 219 220 221 222 226 230 231 234 236 237 239 240 242 # 26110 difference c a 247 0 1 1 2 3 4 6 8 10 12 15 16 18 20 25 26 27 33 38 40 41 42 45 50 52 54 57 59 63 65 67 71 75 77 82 84 86 89 90 95 96 98 100 103 104 105 106 107 108 109 114 115 116 119 123 125 126 129 130 131 133 134 136 137 140 141 142 143 144 146 147 148 150 155 156 163 167 168 171 174 176 177 178 179 180 181 184 185 187 189 191 194 196 197 199 201 203 206 207 208 209 210 211 212 213 215 216 217 218 219 220 221 222 226 230 231 234 236 237 239 240 242 b 247 1 1 0 2 3 5 6 11 12 14 15 16 20 22 23 24 25 29 30 32 33 36 37 38 41 42 43 45 46 48 51 54 58 60 61 62 63 65 68 69 72 77 78 83 85 87 92 93 96 98 99 104 106 107 109 111 112 117 119 120 122 123 128 133 134 137 139 144 145 146 148 151 152 154 158 163 164 168 170 172 174 175 177 181 182 183 184 185 188 189 190 197 202 204 205 208 209 210 213 218 221 222 223 224 226 230 232 233 234 235 236 237 239 240 244 246 # 26111 difference c a 247 1 0 e b 247 1 0 e # 26112 difference c a 247 1 0 e b 247 0 0 e # 26113 difference c a 247 1 0 e b 247 1 0 e # 26114 difference c a 247 1 0 e b 247 0 0 f # 26115 difference c a 247 1 0 e b 247 1 0 e # 26116 difference c a 247 1 0 e b 247 0 0 1 2 3 6 11 12 13 14 16 17 18 19 20 21 23 24 27 29 30 31 32 34 36 37 41 50 56 57 61 69 70 71 72 74 76 80 82 84 86 89 90 91 92 93 94 98 101 108 109 110 111 113 117 118 119 120 123 127 128 134 135 136 143 146 147 149 150 155 156 157 159 161 163 165 166 167 172 173 179 180 185 186 188 190 200 201 202 203 204 207 209 210 212 213 214 216 217 218 221 222 224 225 226 230 231 233 234 236 237 240 241 242 243 244 245 # 26117 difference c a 247 1 0 f b 247 1 0 f # 26118 difference c a 247 1 0 f b 247 0 0 e # 26119 difference c a 247 1 0 f b 247 1 0 f # 26120 difference c a 247 1 0 f b 247 0 0 f # 26121 difference c a 247 1 0 f b 247 1 0 f # 26122 difference c a 247 1 0 f b 247 0 0 0 2 4 5 6 8 9 11 13 14 18 21 22 23 24 25 26 28 29 30 33 34 35 37 40 43 45 50 51 53 54 55 57 60 62 63 64 66 70 71 72 73 74 75 76 83 86 87 90 93 98 101 104 107 108 109 113 114 117 119 120 122 124 126 129 130 131 132 136 142 145 146 154 157 158 159 160 162 163 164 168 170 171 172 173 178 179 180 181 186 187 190 192 193 195 196 199 200 202 203 204 208 209 212 213 214 218 219 220 221 223 225 226 229 233 238 239 246 # 26123 difference c a 247 1 0 0 1 2 3 4 7 8 9 14 16 17 18 19 20 22 23 24 25 29 30 31 33 34 37 38 40 42 44 46 47 50 52 57 58 59 61 62 63 67 70 72 73 74 75 80 82 83 84 85 88 89 90 92 93 98 99 100 101 104 105 107 109 112 115 118 119 121 124 127 128 130 131 133 136 141 142 144 146 148 149 152 155 156 157 158 159 162 163 165 170 171 173 174 177 179 180 181 183 185 186 188 192 193 196 198 200 201 204 209 212 215 217 219 226 228 229 230 231 232 235 237 239 240 242 244 b 247 1 0 0 1 2 3 4 7 8 9 14 16 17 18 19 20 22 23 24 25 29 30 31 33 34 37 38 40 42 44 46 47 50 52 57 58 59 61 62 63 67 70 72 73 74 75 80 82 83 84 85 88 89 90 92 93 98 99 100 101 104 105 107 109 112 115 118 119 121 124 127 128 130 131 133 136 141 142 144 146 148 149 152 155 156 157 158 159 162 163 165 170 171 173 174 177 179 180 181 183 185 186 188 192 193 196 198 200 201 204 209 212 215 217 219 226 228 229 230 231 232 235 237 239 240 242 244 # 26124 difference c a 247 1 0 0 1 2 3 4 7 8 9 14 16 17 18 19 20 22 23 24 25 29 30 31 33 34 37 38 40 42 44 46 47 50 52 57 58 59 61 62 63 67 70 72 73 74 75 80 82 83 84 85 88 89 90 92 93 98 99 100 101 104 105 107 109 112 115 118 119 121 124 127 128 130 131 133 136 141 142 144 146 148 149 152 155 156 157 158 159 162 163 165 170 171 173 174 177 179 180 181 183 185 186 188 192 193 196 198 200 201 204 209 212 215 217 219 226 228 229 230 231 232 235 237 239 240 242 244 b 247 0 0 e # 26125 difference c a 247 1 0 2 4 8 9 12 15 20 21 23 24 25 26 28 29 30 35 36 37 40 42 43 44 45 46 47 53 55 56 57 59 60 61 62 70 72 75 78 79 80 81 83 84 85 86 88 91 94 95 96 98 100 101 102 103 107 108 110 115 116 119 120 121 123 124 126 127 128 129 130 133 135 136 137 139 140 145 149 151 153 154 157 159 163 164 165 166 167 170 173 174 175 176 177 179 180 181 182 185 186 187 188 189 190 196 197 201 202 203 204 205 206 207 208 210 212 213 214 216 221 222 223 225 226 228 230 233 234 237 238 240 241 242 243 b 247 1 0 2 4 8 9 12 15 20 21 23 24 25 26 28 29 30 35 36 37 40 42 43 44 45 46 47 53 55 56 57 59 60 61 62 70 72 75 78 79 80 81 83 84 85 86 88 91 94 95 96 98 100 101 102 103 107 108 110 115 116 119 120 121 123 124 126 127 128 129 130 133 135 136 137 139 140 145 149 151 153 154 157 159 163 164 165 166 167 170 173 174 175 176 177 179 180 181 182 185 186 187 188 189 190 196 197 201 202 203 204 205 206 207 208 210 212 213 214 216 221 222 223 225 226 228 230 233 234 237 238 240 241 242 243 # 26126 difference c a 247 1 0 2 4 8 9 12 15 20 21 23 24 25 26 28 29 30 35 36 37 40 42 43 44 45 46 47 53 55 56 57 59 60 61 62 70 72 75 78 79 80 81 83 84 85 86 88 91 94 95 96 98 100 101 102 103 107 108 110 115 116 119 120 121 123 124 126 127 128 129 130 133 135 136 137 139 140 145 149 151 153 154 157 159 163 164 165 166 167 170 173 174 175 176 177 179 180 181 182 185 186 187 188 189 190 196 197 201 202 203 204 205 206 207 208 210 212 213 214 216 221 222 223 225 226 228 230 233 234 237 238 240 241 242 243 b 247 0 0 f # 26127 difference c a 247 1 0 1 2 3 5 8 14 15 16 17 18 19 22 25 29 30 32 33 37 41 42 43 45 47 50 51 52 53 56 58 59 61 63 65 67 69 71 75 76 77 78 81 83 84 88 89 92 93 96 101 102 103 104 107 111 112 113 114 115 117 120 121 123 124 125 126 130 132 133 135 137 138 139 140 143 146 149 150 152 154 156 157 158 161 162 165 167 168 171 172 173 174 175 182 185 186 188 189 190 191 195 198 200 202 205 209 210 211 213 214 215 217 221 223 226 227 228 229 231 232 236 237 238 240 241 242 243 245 246 b 247 1 0 1 2 3 5 8 14 15 16 17 18 19 22 25 29 30 32 33 37 41 42 43 45 47 50 51 52 53 56 58 59 61 63 65 67 69 71 75 76 77 78 81 83 84 88 89 92 93 96 101 102 103 104 107 111 112 113 114 115 117 120 121 123 124 125 126 130 132 133 135 137 138 139 140 143 146 149 150 152 154 156 157 158 161 162 165 167 168 171 172 173 174 175 182 185 186 188 189 190 191 195 198 200 202 205 209 210 211 213 214 215 217 221 223 226 227 228 229 231 232 236 237 238 240 241 242 243 245 246 # 26128 difference c a 247 1 0 1 2 3 5 8 14 15 16 17 18 19 22 25 29 30 32 33 37 41 42 43 45 47 50 51 52 53 56 58 59 61 63 65 67 69 71 75 76 77 78 81 83 84 88 89 92 93 96 101 102 103 104 107 111 112 113 114 115 117 120 121 123 124 125 126 130 132 133 135 137 138 139 140 143 146 149 150 152 154 156 157 158 161 162 165 167 168 171 172 173 174 175 182 185 186 188 189 190 191 195 198 200 202 205 209 210 211 213 214 215 217 221 223 226 227 228 229 231 232 236 237 238 240 241 242 243 245 246 b 247 0 0 0 1 2 5 9 12 13 14 15 16 17 18 20 21 22 25 32 37 39 40 41 43 44 45 46 47 48 49 50 51 53 55 56 59 60 61 63 64 65 66 68 70 71 74 75 78 81 83 84 86 88 91 92 93 95 100 102 105 107 109 110 112 116 117 118 119 125 127 130 132 133 134 136 137 138 139 140 141 143 145 147 148 150 151 152 155 158 159 160 161 163 164 165 166 168 169 171 172 173 174 176 177 181 183 185 186 189 194 197 198 200 203 207 213 215 216 219 223 224 226 229 230 232 236 239 240 241 244 245 # 26129 difference c a 247 1 0 e b 247 1 0 e # 26130 difference c a 247 1 0 e b 247 0 1 e # 26131 difference c a 247 1 0 e b 247 1 0 e # 26132 difference c a 247 1 0 e b 247 0 1 f # 26133 difference c a 247 1 0 e b 247 1 0 e # 26134 difference c a 247 1 0 e b 247 0 1 4 5 6 8 9 17 18 20 22 23 27 30 31 32 37 38 40 42 44 46 47 52 54 55 56 58 59 61 62 65 66 67 68 69 71 75 76 77 78 84 88 89 92 95 98 100 101 107 111 112 113 118 119 124 125 127 128 129 131 132 136 140 145 146 149 151 153 154 164 165 167 169 171 173 176 178 179 182 183 185 187 188 192 193 195 197 198 199 200 202 203 208 212 213 216 218 219 220 222 223 224 226 229 233 235 237 239 # 26135 difference c a 247 1 0 f b 247 1 0 f # 26136 difference c a 247 1 0 f b 247 0 1 e # 26137 difference c a 247 1 0 f b 247 1 0 f # 26138 difference c a 247 1 0 f b 247 0 1 f # 26139 difference c a 247 1 0 f b 247 1 0 f # 26140 difference c a 247 1 0 f b 247 0 1 1 3 4 5 6 7 8 10 12 13 20 22 23 26 27 28 31 33 34 37 45 46 47 54 55 57 58 61 63 64 69 71 73 75 76 77 78 82 83 84 85 86 88 93 96 97 100 101 102 104 107 112 116 117 118 119 122 123 124 127 128 129 131 132 134 135 138 139 146 151 152 154 155 158 160 161 163 167 171 173 175 177 179 181 182 184 185 186 188 189 190 191 192 194 195 198 199 202 203 204 206 210 211 213 214 217 218 220 221 224 231 234 236 237 238 239 241 242 243 245 246 # 26141 difference c a 247 1 0 0 1 2 6 7 11 12 13 15 17 18 19 20 21 23 27 28 30 31 32 33 39 41 42 44 46 47 49 50 51 54 55 58 61 62 66 67 71 79 80 81 82 87 88 89 90 92 93 94 97 98 99 102 103 104 105 106 110 113 114 117 119 120 123 125 126 128 129 131 133 134 136 137 140 146 149 153 154 156 157 158 160 166 168 171 172 173 175 177 180 181 182 184 185 186 188 189 190 191 192 196 197 199 201 202 203 204 205 206 208 210 211 217 218 219 220 221 222 223 225 226 227 228 230 238 240 244 245 b 247 1 0 0 1 2 6 7 11 12 13 15 17 18 19 20 21 23 27 28 30 31 32 33 39 41 42 44 46 47 49 50 51 54 55 58 61 62 66 67 71 79 80 81 82 87 88 89 90 92 93 94 97 98 99 102 103 104 105 106 110 113 114 117 119 120 123 125 126 128 129 131 133 134 136 137 140 146 149 153 154 156 157 158 160 166 168 171 172 173 175 177 180 181 182 184 185 186 188 189 190 191 192 196 197 199 201 202 203 204 205 206 208 210 211 217 218 219 220 221 222 223 225 226 227 228 230 238 240 244 245 # 26142 difference c a 247 1 0 0 1 2 6 7 11 12 13 15 17 18 19 20 21 23 27 28 30 31 32 33 39 41 42 44 46 47 49 50 51 54 55 58 61 62 66 67 71 79 80 81 82 87 88 89 90 92 93 94 97 98 99 102 103 104 105 106 110 113 114 117 119 120 123 125 126 128 129 131 133 134 136 137 140 146 149 153 154 156 157 158 160 166 168 171 172 173 175 177 180 181 182 184 185 186 188 189 190 191 192 196 197 199 201 202 203 204 205 206 208 210 211 217 218 219 220 221 222 223 225 226 227 228 230 238 240 244 245 b 247 0 1 e # 26143 difference c a 247 1 0 1 5 6 9 12 13 14 19 20 21 25 26 27 28 29 35 39 42 45 46 52 53 54 56 57 59 60 62 64 68 72 74 77 78 79 80 81 83 84 89 91 96 98 99 100 101 103 108 109 111 112 114 115 116 119 122 124 126 128 131 134 135 136 137 139 140 142 143 144 145 146 147 149 150 153 154 156 157 158 159 161 163 169 170 173 177 178 179 180 181 186 188 193 194 195 196 204 205 206 208 209 211 215 216 217 219 221 222 223 225 226 230 231 236 237 238 239 240 244 245 b 247 1 0 1 5 6 9 12 13 14 19 20 21 25 26 27 28 29 35 39 42 45 46 52 53 54 56 57 59 60 62 64 68 72 74 77 78 79 80 81 83 84 89 91 96 98 99 100 101 103 108 109 111 112 114 115 116 119 122 124 126 128 131 134 135 136 137 139 140 142 143 144 145 146 147 149 150 153 154 156 157 158 159 161 163 169 170 173 177 178 179 180 181 186 188 193 194 195 196 204 205 206 208 209 211 215 216 217 219 221 222 223 225 226 230 231 236 237 238 239 240 244 245 # 26144 difference c a 247 1 0 1 5 6 9 12 13 14 19 20 21 25 26 27 28 29 35 39 42 45 46 52 53 54 56 57 59 60 62 64 68 72 74 77 78 79 80 81 83 84 89 91 96 98 99 100 101 103 108 109 111 112 114 115 116 119 122 124 126 128 131 134 135 136 137 139 140 142 143 144 145 146 147 149 150 153 154 156 157 158 159 161 163 169 170 173 177 178 179 180 181 186 188 193 194 195 196 204 205 206 208 209 211 215 216 217 219 221 222 223 225 226 230 231 236 237 238 239 240 244 245 b 247 0 1 f # 26145 difference c a 247 1 0 1 2 8 12 16 18 21 25 26 27 30 31 33 38 40 41 42 45 46 49 50 51 55 57 58 59 61 62 63 65 67 69 70 72 73 74 76 77 78 81 83 86 87 89 91 94 95 97 98 99 100 101 102 103 105 111 113 114 115 117 118 119 120 122 127 129 132 137 139 141 142 143 144 145 146 147 148 149 150 152 154 156 157 160 161 162 163 166 171 173 174 176 177 180 181 182 183 185 188 190 191 193 198 199 200 202 205 206 207 208 209 211 212 217 218 219 221 222 224 226 228 229 231 237 240 241 243 245 b 247 1 0 1 2 8 12 16 18 21 25 26 27 30 31 33 38 40 41 42 45 46 49 50 51 55 57 58 59 61 62 63 65 67 69 70 72 73 74 76 77 78 81 83 86 87 89 91 94 95 97 98 99 100 101 102 103 105 111 113 114 115 117 118 119 120 122 127 129 132 137 139 141 142 143 144 145 146 147 148 149 150 152 154 156 157 160 161 162 163 166 171 173 174 176 177 180 181 182 183 185 188 190 191 193 198 199 200 202 205 206 207 208 209 211 212 217 218 219 221 222 224 226 228 229 231 237 240 241 243 245 # 26146 difference c a 247 1 0 1 2 8 12 16 18 21 25 26 27 30 31 33 38 40 41 42 45 46 49 50 51 55 57 58 59 61 62 63 65 67 69 70 72 73 74 76 77 78 81 83 86 87 89 91 94 95 97 98 99 100 101 102 103 105 111 113 114 115 117 118 119 120 122 127 129 132 137 139 141 142 143 144 145 146 147 148 149 150 152 154 156 157 160 161 162 163 166 171 173 174 176 177 180 181 182 183 185 188 190 191 193 198 199 200 202 205 206 207 208 209 211 212 217 218 219 221 222 224 226 228 229 231 237 240 241 243 245 b 247 0 1 0 3 4 9 11 17 19 23 28 29 30 31 36 37 40 41 44 45 48 49 53 55 57 60 64 65 67 68 69 72 73 74 75 76 79 81 83 84 85 86 88 90 92 93 94 95 96 98 102 103 105 106 108 109 112 113 114 116 117 118 120 122 123 125 128 130 133 135 137 138 140 142 143 144 145 147 149 155 156 157 159 160 161 164 170 179 183 184 186 187 190 193 194 195 197 199 201 203 205 207 211 212 213 214 215 217 220 222 227 230 231 235 236 237 238 242 244 245 246 # 26147 difference c a 247 1 0 e b 247 1 0 e # 26148 difference c a 247 1 0 e b 247 1 0 e # 26149 difference c a 247 1 0 e b 247 1 0 e # 26150 difference c a 247 1 0 e b 247 1 0 f # 26151 difference c a 247 1 0 e b 247 1 0 e # 26152 difference c a 247 1 0 e b 247 1 0 3 5 7 8 9 10 11 16 17 18 19 20 22 23 24 25 26 27 28 29 30 34 35 42 43 44 47 49 50 51 53 54 56 57 59 60 62 63 64 65 66 67 71 72 74 75 76 78 79 81 82 83 85 86 88 90 91 93 94 96 100 104 108 109 111 112 114 117 120 125 126 129 130 134 136 137 138 139 140 142 143 144 146 150 152 153 154 156 158 161 162 163 169 173 175 179 180 181 182 183 184 185 187 191 194 195 196 197 200 202 205 207 210 211 213 214 217 219 221 227 232 233 236 237 243 244 245 # 26153 difference c a 247 1 0 f b 247 1 0 f # 26154 difference c a 247 1 0 f b 247 1 0 e # 26155 difference c a 247 1 0 f b 247 1 0 f # 26156 difference c a 247 1 0 f b 247 1 0 f # 26157 difference c a 247 1 0 f b 247 1 0 f # 26158 difference c a 247 1 0 f b 247 1 0 1 2 5 6 7 8 9 10 11 18 19 21 24 25 26 27 28 29 30 32 33 35 38 41 45 46 47 48 49 50 52 54 55 56 59 62 63 66 67 68 69 71 73 75 82 86 88 92 96 98 100 104 105 109 110 111 112 113 118 120 123 125 126 128 129 130 131 137 138 139 141 142 145 146 147 149 150 151 154 155 157 158 160 161 163 164 165 169 170 171 172 173 176 178 179 181 182 183 185 187 190 196 205 207 210 211 213 214 215 216 218 220 221 223 224 225 227 229 231 233 234 236 240 # 26159 difference c a 247 1 0 5 6 8 9 11 12 15 18 19 23 25 27 29 31 38 40 43 45 46 47 50 51 52 54 55 58 59 61 62 65 66 67 69 72 73 76 77 84 88 89 92 94 97 101 102 104 105 106 107 108 112 113 114 115 117 120 121 122 123 129 130 131 132 133 135 136 138 139 140 143 145 146 147 148 151 154 156 158 159 161 162 164 165 171 172 174 180 181 183 187 188 190 193 194 196 198 199 200 201 202 203 205 207 209 211 212 213 214 220 222 224 225 226 227 230 233 235 237 238 239 240 242 243 245 b 247 1 0 5 6 8 9 11 12 15 18 19 23 25 27 29 31 38 40 43 45 46 47 50 51 52 54 55 58 59 61 62 65 66 67 69 72 73 76 77 84 88 89 92 94 97 101 102 104 105 106 107 108 112 113 114 115 117 120 121 122 123 129 130 131 132 133 135 136 138 139 140 143 145 146 147 148 151 154 156 158 159 161 162 164 165 171 172 174 180 181 183 187 188 190 193 194 196 198 199 200 201 202 203 205 207 209 211 212 213 214 220 222 224 225 226 227 230 233 235 237 238 239 240 242 243 245 # 26160 difference c a 247 1 0 5 6 8 9 11 12 15 18 19 23 25 27 29 31 38 40 43 45 46 47 50 51 52 54 55 58 59 61 62 65 66 67 69 72 73 76 77 84 88 89 92 94 97 101 102 104 105 106 107 108 112 113 114 115 117 120 121 122 123 129 130 131 132 133 135 136 138 139 140 143 145 146 147 148 151 154 156 158 159 161 162 164 165 171 172 174 180 181 183 187 188 190 193 194 196 198 199 200 201 202 203 205 207 209 211 212 213 214 220 222 224 225 226 227 230 233 235 237 238 239 240 242 243 245 b 247 1 0 e # 26161 difference c a 247 1 0 0 5 7 8 12 13 17 18 21 24 25 26 27 29 32 33 34 38 40 42 43 45 47 48 53 54 56 57 61 62 65 66 67 69 73 75 76 77 78 79 83 88 89 90 92 93 94 96 97 102 103 111 113 114 115 118 121 122 123 125 131 132 134 138 139 143 146 147 149 150 151 153 154 155 157 159 161 162 164 165 166 168 169 173 175 176 178 180 181 185 187 188 189 190 193 194 196 197 198 199 200 204 205 207 208 211 212 213 216 217 219 220 226 229 230 232 234 235 236 238 239 242 246 b 247 1 0 0 5 7 8 12 13 17 18 21 24 25 26 27 29 32 33 34 38 40 42 43 45 47 48 53 54 56 57 61 62 65 66 67 69 73 75 76 77 78 79 83 88 89 90 92 93 94 96 97 102 103 111 113 114 115 118 121 122 123 125 131 132 134 138 139 143 146 147 149 150 151 153 154 155 157 159 161 162 164 165 166 168 169 173 175 176 178 180 181 185 187 188 189 190 193 194 196 197 198 199 200 204 205 207 208 211 212 213 216 217 219 220 226 229 230 232 234 235 236 238 239 242 246 # 26162 difference c a 247 1 0 0 5 7 8 12 13 17 18 21 24 25 26 27 29 32 33 34 38 40 42 43 45 47 48 53 54 56 57 61 62 65 66 67 69 73 75 76 77 78 79 83 88 89 90 92 93 94 96 97 102 103 111 113 114 115 118 121 122 123 125 131 132 134 138 139 143 146 147 149 150 151 153 154 155 157 159 161 162 164 165 166 168 169 173 175 176 178 180 181 185 187 188 189 190 193 194 196 197 198 199 200 204 205 207 208 211 212 213 216 217 219 220 226 229 230 232 234 235 236 238 239 242 246 b 247 1 0 f # 26163 difference c a 247 1 0 0 3 5 6 11 13 14 15 16 17 19 20 21 22 23 26 27 28 30 31 32 38 39 40 41 44 46 47 50 53 60 61 62 63 66 68 69 71 72 73 74 75 76 77 78 81 83 84 85 88 91 95 96 99 102 103 105 106 108 113 114 115 116 119 120 121 125 126 131 132 133 134 135 136 140 141 142 144 145 148 151 153 154 156 157 158 161 162 163 164 165 166 167 172 173 175 176 177 179 186 187 189 191 192 194 195 196 197 200 201 203 204 205 206 208 209 211 213 215 218 219 221 223 226 228 231 232 233 234 235 236 237 239 240 242 246 b 247 1 0 0 3 5 6 11 13 14 15 16 17 19 20 21 22 23 26 27 28 30 31 32 38 39 40 41 44 46 47 50 53 60 61 62 63 66 68 69 71 72 73 74 75 76 77 78 81 83 84 85 88 91 95 96 99 102 103 105 106 108 113 114 115 116 119 120 121 125 126 131 132 133 134 135 136 140 141 142 144 145 148 151 153 154 156 157 158 161 162 163 164 165 166 167 172 173 175 176 177 179 186 187 189 191 192 194 195 196 197 200 201 203 204 205 206 208 209 211 213 215 218 219 221 223 226 228 231 232 233 234 235 236 237 239 240 242 246 # 26164 difference c a 247 1 0 0 3 5 6 11 13 14 15 16 17 19 20 21 22 23 26 27 28 30 31 32 38 39 40 41 44 46 47 50 53 60 61 62 63 66 68 69 71 72 73 74 75 76 77 78 81 83 84 85 88 91 95 96 99 102 103 105 106 108 113 114 115 116 119 120 121 125 126 131 132 133 134 135 136 140 141 142 144 145 148 151 153 154 156 157 158 161 162 163 164 165 166 167 172 173 175 176 177 179 186 187 189 191 192 194 195 196 197 200 201 203 204 205 206 208 209 211 213 215 218 219 221 223 226 228 231 232 233 234 235 236 237 239 240 242 246 b 247 1 0 1 2 4 5 6 7 8 9 10 12 13 14 15 16 17 18 19 20 21 22 27 28 30 41 44 47 48 50 51 52 53 59 60 61 65 67 68 69 70 72 75 76 77 78 79 80 83 85 89 92 93 97 98 100 101 102 108 109 110 111 114 115 121 122 123 127 131 135 137 138 140 141 146 147 148 152 153 160 161 163 165 166 167 168 169 172 173 174 177 178 180 183 185 189 190 191 192 194 197 198 202 204 212 213 215 216 217 219 220 222 223 224 225 226 228 229 230 236 237 241 244 245 # 26165 difference c a 247 1 0 e b 247 1 0 e # 26166 difference c a 247 1 0 e b 247 1 1 e # 26167 difference c a 247 1 0 e b 247 1 0 e # 26168 difference c a 247 1 0 e b 247 1 1 f # 26169 difference c a 247 1 0 e b 247 1 0 e # 26170 difference c a 247 1 0 e b 247 1 1 0 2 3 6 7 9 10 11 13 15 17 20 22 24 25 26 27 28 31 32 33 40 45 48 50 51 52 53 54 56 57 59 61 62 64 67 69 72 73 74 78 80 81 82 84 85 86 87 88 90 91 95 96 97 98 102 105 106 107 108 110 111 113 115 116 118 119 120 122 123 124 125 126 127 128 129 130 133 134 135 140 148 149 153 156 159 162 163 164 165 166 170 172 176 177 178 180 181 182 184 186 187 188 189 190 193 198 199 201 202 204 207 211 216 217 219 220 221 224 225 228 230 232 233 234 235 238 239 241 242 243 245 246 # 26171 difference c a 247 1 0 f b 247 1 0 f # 26172 difference c a 247 1 0 f b 247 1 1 e # 26173 difference c a 247 1 0 f b 247 1 0 f # 26174 difference c a 247 1 0 f b 247 1 1 f # 26175 difference c a 247 1 0 f b 247 1 0 f # 26176 difference c a 247 1 0 f b 247 1 1 0 1 3 4 6 8 9 10 12 13 16 18 19 20 22 24 25 28 31 33 34 36 37 39 48 52 53 54 56 58 59 62 63 66 71 72 74 75 76 79 80 83 90 91 92 93 94 95 97 103 104 106 107 108 110 111 112 113 117 119 120 122 123 126 129 130 140 142 146 152 153 154 155 157 159 160 164 165 166 171 175 176 187 189 190 191 193 195 196 197 199 201 202 203 208 209 213 215 217 218 219 222 223 225 226 228 229 232 234 235 236 241 242 244 # 26177 difference c a 247 1 0 1 2 3 6 8 9 10 12 13 15 16 17 18 19 22 23 24 25 26 29 31 32 34 36 38 39 41 43 44 45 46 49 51 54 56 57 60 61 63 65 69 71 72 73 74 77 78 79 80 82 85 88 89 90 92 98 99 106 107 108 109 110 111 112 113 114 116 118 121 122 126 128 129 133 135 136 139 140 142 143 144 145 147 151 155 163 165 169 173 176 177 178 179 182 183 185 187 189 193 196 197 198 199 200 201 203 204 207 210 215 217 218 219 223 224 227 229 230 231 232 233 234 235 238 239 243 244 246 b 247 1 0 1 2 3 6 8 9 10 12 13 15 16 17 18 19 22 23 24 25 26 29 31 32 34 36 38 39 41 43 44 45 46 49 51 54 56 57 60 61 63 65 69 71 72 73 74 77 78 79 80 82 85 88 89 90 92 98 99 106 107 108 109 110 111 112 113 114 116 118 121 122 126 128 129 133 135 136 139 140 142 143 144 145 147 151 155 163 165 169 173 176 177 178 179 182 183 185 187 189 193 196 197 198 199 200 201 203 204 207 210 215 217 218 219 223 224 227 229 230 231 232 233 234 235 238 239 243 244 246 # 26178 difference c a 247 1 0 1 2 3 6 8 9 10 12 13 15 16 17 18 19 22 23 24 25 26 29 31 32 34 36 38 39 41 43 44 45 46 49 51 54 56 57 60 61 63 65 69 71 72 73 74 77 78 79 80 82 85 88 89 90 92 98 99 106 107 108 109 110 111 112 113 114 116 118 121 122 126 128 129 133 135 136 139 140 142 143 144 145 147 151 155 163 165 169 173 176 177 178 179 182 183 185 187 189 193 196 197 198 199 200 201 203 204 207 210 215 217 218 219 223 224 227 229 230 231 232 233 234 235 238 239 243 244 246 b 247 1 1 e # 26179 difference c a 247 1 0 2 4 9 10 11 13 14 16 17 19 23 24 25 27 28 29 30 32 33 34 35 41 44 46 48 49 53 56 59 65 66 67 73 74 75 76 77 79 80 81 86 88 90 92 98 100 102 103 104 105 106 107 108 110 114 115 116 118 119 120 121 122 126 128 129 130 131 132 133 134 135 136 137 138 139 141 145 147 150 153 154 158 161 162 164 165 167 170 171 173 176 180 182 183 184 188 197 199 200 205 206 210 211 214 216 218 219 220 224 225 226 227 230 232 234 235 236 240 241 246 b 247 1 0 2 4 9 10 11 13 14 16 17 19 23 24 25 27 28 29 30 32 33 34 35 41 44 46 48 49 53 56 59 65 66 67 73 74 75 76 77 79 80 81 86 88 90 92 98 100 102 103 104 105 106 107 108 110 114 115 116 118 119 120 121 122 126 128 129 130 131 132 133 134 135 136 137 138 139 141 145 147 150 153 154 158 161 162 164 165 167 170 171 173 176 180 182 183 184 188 197 199 200 205 206 210 211 214 216 218 219 220 224 225 226 227 230 232 234 235 236 240 241 246 # 26180 difference c a 247 1 0 2 4 9 10 11 13 14 16 17 19 23 24 25 27 28 29 30 32 33 34 35 41 44 46 48 49 53 56 59 65 66 67 73 74 75 76 77 79 80 81 86 88 90 92 98 100 102 103 104 105 106 107 108 110 114 115 116 118 119 120 121 122 126 128 129 130 131 132 133 134 135 136 137 138 139 141 145 147 150 153 154 158 161 162 164 165 167 170 171 173 176 180 182 183 184 188 197 199 200 205 206 210 211 214 216 218 219 220 224 225 226 227 230 232 234 235 236 240 241 246 b 247 1 1 f # 26181 difference c a 247 1 0 1 4 5 6 12 13 21 22 23 25 26 27 31 32 33 35 36 37 38 42 44 45 46 50 51 52 53 54 57 59 60 61 63 64 65 66 68 69 70 72 74 75 77 79 80 82 83 85 87 89 93 96 98 100 102 103 104 106 112 117 118 119 123 125 128 129 130 131 134 136 137 138 144 145 146 149 150 151 154 155 156 158 159 161 162 163 165 168 172 173 174 175 176 177 178 181 183 191 197 198 200 202 203 205 207 211 214 215 216 218 220 222 223 227 230 233 234 235 238 239 240 241 242 245 b 247 1 0 1 4 5 6 12 13 21 22 23 25 26 27 31 32 33 35 36 37 38 42 44 45 46 50 51 52 53 54 57 59 60 61 63 64 65 66 68 69 70 72 74 75 77 79 80 82 83 85 87 89 93 96 98 100 102 103 104 106 112 117 118 119 123 125 128 129 130 131 134 136 137 138 144 145 146 149 150 151 154 155 156 158 159 161 162 163 165 168 172 173 174 175 176 177 178 181 183 191 197 198 200 202 203 205 207 211 214 215 216 218 220 222 223 227 230 233 234 235 238 239 240 241 242 245 # 26182 difference c a 247 1 0 1 4 5 6 12 13 21 22 23 25 26 27 31 32 33 35 36 37 38 42 44 45 46 50 51 52 53 54 57 59 60 61 63 64 65 66 68 69 70 72 74 75 77 79 80 82 83 85 87 89 93 96 98 100 102 103 104 106 112 117 118 119 123 125 128 129 130 131 134 136 137 138 144 145 146 149 150 151 154 155 156 158 159 161 162 163 165 168 172 173 174 175 176 177 178 181 183 191 197 198 200 202 203 205 207 211 214 215 216 218 220 222 223 227 230 233 234 235 238 239 240 241 242 245 b 247 1 1 1 4 7 8 9 11 14 16 19 20 21 23 24 26 28 29 30 32 33 34 44 45 46 47 50 56 58 59 61 62 63 64 65 68 69 70 73 74 76 77 81 82 83 87 88 90 92 93 95 97 98 101 102 103 104 106 107 116 119 120 122 123 124 128 130 133 135 138 141 142 143 147 148 149 150 152 153 155 156 157 159 165 168 170 173 179 184 185 187 189 190 191 197 198 200 201 202 204 205 206 211 213 214 219 220 222 224 225 226 228 229 231 232 234 235 237 238 239 240 244 246 # 26183 difference c a 247 1 1 e b 247 1 1 e # 26184 difference c a 247 1 1 e b 247 0 0 e # 26185 difference c a 247 1 1 e b 247 1 1 e # 26186 difference c a 247 1 1 e b 247 0 0 f # 26187 difference c a 247 1 1 e b 247 1 1 e # 26188 difference c a 247 1 1 e b 247 0 0 1 4 5 7 8 10 12 14 15 17 18 19 22 23 27 29 30 31 32 40 42 43 44 47 50 51 52 53 54 63 64 68 69 70 71 75 76 77 78 81 83 84 85 90 92 93 97 98 100 104 105 107 108 111 113 114 116 119 120 125 126 127 128 129 131 139 140 141 142 143 145 149 151 152 153 156 158 159 162 164 165 166 167 169 170 172 173 176 181 185 190 192 193 194 196 197 200 205 206 210 212 213 214 216 218 219 220 221 226 231 232 233 236 238 239 241 244 246 # 26189 difference c a 247 1 1 f b 247 1 1 f # 26190 difference c a 247 1 1 f b 247 0 0 e # 26191 difference c a 247 1 1 f b 247 1 1 f # 26192 difference c a 247 1 1 f b 247 0 0 f # 26193 difference c a 247 1 1 f b 247 1 1 f # 26194 difference c a 247 1 1 f b 247 0 0 2 6 7 8 10 12 14 15 17 19 22 24 26 31 32 35 36 38 39 40 42 44 45 47 50 51 52 55 56 60 61 62 67 70 72 73 74 77 79 82 84 87 88 89 90 91 92 93 97 99 100 101 102 103 104 105 108 109 112 114 115 116 119 125 127 129 132 138 139 141 145 146 147 150 152 154 156 160 161 162 163 168 169 171 172 173 176 179 180 181 183 190 193 196 198 199 202 205 206 207 209 210 211 212 214 216 217 222 223 224 225 227 230 231 232 235 238 239 241 242 # 26195 difference c a 247 1 1 2 4 7 10 12 14 15 16 19 20 22 23 24 25 27 29 31 36 39 40 48 51 52 55 57 58 59 60 62 64 65 66 73 74 75 76 77 79 81 85 87 88 89 90 91 93 95 96 100 101 104 107 109 111 112 113 116 119 122 123 124 126 127 128 130 131 134 135 136 138 139 140 142 143 145 146 151 154 156 159 160 163 164 166 168 169 171 172 179 180 181 182 184 186 187 188 189 191 193 194 195 197 201 202 206 208 211 212 213 214 215 217 218 220 223 225 226 227 228 230 233 234 235 240 243 246 b 247 1 1 2 4 7 10 12 14 15 16 19 20 22 23 24 25 27 29 31 36 39 40 48 51 52 55 57 58 59 60 62 64 65 66 73 74 75 76 77 79 81 85 87 88 89 90 91 93 95 96 100 101 104 107 109 111 112 113 116 119 122 123 124 126 127 128 130 131 134 135 136 138 139 140 142 143 145 146 151 154 156 159 160 163 164 166 168 169 171 172 179 180 181 182 184 186 187 188 189 191 193 194 195 197 201 202 206 208 211 212 213 214 215 217 218 220 223 225 226 227 228 230 233 234 235 240 243 246 # 26196 difference c a 247 1 1 2 4 7 10 12 14 15 16 19 20 22 23 24 25 27 29 31 36 39 40 48 51 52 55 57 58 59 60 62 64 65 66 73 74 75 76 77 79 81 85 87 88 89 90 91 93 95 96 100 101 104 107 109 111 112 113 116 119 122 123 124 126 127 128 130 131 134 135 136 138 139 140 142 143 145 146 151 154 156 159 160 163 164 166 168 169 171 172 179 180 181 182 184 186 187 188 189 191 193 194 195 197 201 202 206 208 211 212 213 214 215 217 218 220 223 225 226 227 228 230 233 234 235 240 243 246 b 247 0 0 e # 26197 difference c a 247 1 1 0 1 4 5 6 7 8 9 10 11 14 15 16 17 21 22 23 24 26 28 31 33 35 37 38 40 44 45 46 48 50 51 53 54 56 57 58 59 60 61 64 65 68 69 70 73 74 76 77 78 79 81 82 83 86 89 92 93 97 98 100 102 112 113 118 119 120 122 123 124 129 130 131 135 136 137 140 141 142 143 144 145 150 152 153 154 155 159 161 162 163 165 166 168 170 171 172 174 175 178 179 180 181 182 184 185 193 195 196 197 199 204 206 209 210 212 213 214 215 216 217 221 222 223 224 225 226 227 228 232 233 238 239 241 242 244 245 b 247 1 1 0 1 4 5 6 7 8 9 10 11 14 15 16 17 21 22 23 24 26 28 31 33 35 37 38 40 44 45 46 48 50 51 53 54 56 57 58 59 60 61 64 65 68 69 70 73 74 76 77 78 79 81 82 83 86 89 92 93 97 98 100 102 112 113 118 119 120 122 123 124 129 130 131 135 136 137 140 141 142 143 144 145 150 152 153 154 155 159 161 162 163 165 166 168 170 171 172 174 175 178 179 180 181 182 184 185 193 195 196 197 199 204 206 209 210 212 213 214 215 216 217 221 222 223 224 225 226 227 228 232 233 238 239 241 242 244 245 # 26198 difference c a 247 1 1 0 1 4 5 6 7 8 9 10 11 14 15 16 17 21 22 23 24 26 28 31 33 35 37 38 40 44 45 46 48 50 51 53 54 56 57 58 59 60 61 64 65 68 69 70 73 74 76 77 78 79 81 82 83 86 89 92 93 97 98 100 102 112 113 118 119 120 122 123 124 129 130 131 135 136 137 140 141 142 143 144 145 150 152 153 154 155 159 161 162 163 165 166 168 170 171 172 174 175 178 179 180 181 182 184 185 193 195 196 197 199 204 206 209 210 212 213 214 215 216 217 221 222 223 224 225 226 227 228 232 233 238 239 241 242 244 245 b 247 0 0 f # 26199 difference c a 247 1 1 0 1 2 3 5 6 9 12 13 14 15 17 19 20 21 22 23 26 27 31 34 37 38 39 41 42 44 45 49 52 53 57 59 61 62 63 65 69 71 72 75 76 78 82 83 87 91 96 97 98 100 103 105 110 112 113 115 117 118 125 126 129 130 134 135 140 142 143 146 150 152 154 156 157 158 160 161 162 165 166 170 173 174 175 177 179 183 189 190 192 193 195 199 200 202 205 206 207 208 210 211 213 214 215 222 223 226 227 228 232 234 237 240 b 247 1 1 0 1 2 3 5 6 9 12 13 14 15 17 19 20 21 22 23 26 27 31 34 37 38 39 41 42 44 45 49 52 53 57 59 61 62 63 65 69 71 72 75 76 78 82 83 87 91 96 97 98 100 103 105 110 112 113 115 117 118 125 126 129 130 134 135 140 142 143 146 150 152 154 156 157 158 160 161 162 165 166 170 173 174 175 177 179 183 189 190 192 193 195 199 200 202 205 206 207 208 210 211 213 214 215 222 223 226 227 228 232 234 237 240 # 26200 difference c a 247 1 1 0 1 2 3 5 6 9 12 13 14 15 17 19 20 21 22 23 26 27 31 34 37 38 39 41 42 44 45 49 52 53 57 59 61 62 63 65 69 71 72 75 76 78 82 83 87 91 96 97 98 100 103 105 110 112 113 115 117 118 125 126 129 130 134 135 140 142 143 146 150 152 154 156 157 158 160 161 162 165 166 170 173 174 175 177 179 183 189 190 192 193 195 199 200 202 205 206 207 208 210 211 213 214 215 222 223 226 227 228 232 234 237 240 b 247 0 0 2 3 4 6 7 8 9 10 12 14 18 19 20 21 24 28 29 30 33 35 37 38 39 40 43 44 46 47 48 49 50 51 52 53 57 58 63 65 66 68 71 72 73 75 78 85 86 87 91 92 93 94 98 100 102 103 106 107 108 112 113 114 119 120 121 122 123 125 127 129 136 137 139 145 146 147 150 153 155 157 158 159 160 161 162 163 167 169 170 171 173 176 180 181 182 183 184 186 190 191 193 194 195 198 206 208 210 213 215 219 220 222 225 226 229 230 234 235 236 237 242 # 26201 difference c a 247 1 1 e b 247 1 1 e # 26202 difference c a 247 1 1 e b 247 0 1 e # 26203 difference c a 247 1 1 e b 247 1 1 e # 26204 difference c a 247 1 1 e b 247 0 1 f # 26205 difference c a 247 1 1 e b 247 1 1 e # 26206 difference c a 247 1 1 e b 247 0 1 0 1 2 5 7 9 10 11 14 15 16 17 18 20 21 22 24 25 29 30 31 33 35 36 37 38 39 40 42 43 44 46 47 53 56 57 58 61 63 65 66 69 73 77 78 79 83 85 86 89 91 93 94 95 97 99 100 103 107 110 111 114 115 116 117 118 123 126 127 130 132 133 139 140 142 145 146 149 150 151 154 155 156 157 162 163 165 167 170 172 173 178 179 181 182 183 185 186 188 190 195 199 200 203 204 205 206 209 211 214 215 218 220 221 222 225 226 227 230 232 233 235 236 239 240 241 242 # 26207 difference c a 247 1 1 f b 247 1 1 f # 26208 difference c a 247 1 1 f b 247 0 1 e # 26209 difference c a 247 1 1 f b 247 1 1 f # 26210 difference c a 247 1 1 f b 247 0 1 f # 26211 difference c a 247 1 1 f b 247 1 1 f # 26212 difference c a 247 1 1 f b 247 0 1 0 1 4 5 6 7 9 10 11 14 15 17 19 25 27 29 31 32 39 42 43 44 46 49 51 55 58 59 62 63 64 65 69 70 73 77 78 80 81 87 88 90 92 97 98 99 100 101 106 107 114 115 116 118 119 120 121 123 127 129 131 132 133 137 138 139 143 144 146 147 148 149 150 151 152 153 155 157 158 159 160 162 164 165 166 168 169 170 172 175 182 187 189 191 200 202 203 204 206 208 215 216 217 220 221 223 225 228 229 230 231 234 235 236 237 240 241 242 # 26213 difference c a 247 1 1 1 2 4 5 6 7 8 10 13 16 17 19 23 25 26 27 29 30 32 33 34 35 37 42 43 48 49 52 58 59 61 64 66 68 70 72 73 74 76 79 80 81 83 85 87 93 94 95 96 97 99 101 104 107 109 110 112 115 117 118 120 122 124 125 127 130 131 134 138 139 141 144 145 148 149 150 151 153 154 159 160 162 165 167 170 171 174 182 184 185 186 189 191 195 196 197 198 201 202 205 206 207 210 213 214 216 217 218 220 223 224 226 227 230 233 234 236 237 240 242 245 246 b 247 1 1 1 2 4 5 6 7 8 10 13 16 17 19 23 25 26 27 29 30 32 33 34 35 37 42 43 48 49 52 58 59 61 64 66 68 70 72 73 74 76 79 80 81 83 85 87 93 94 95 96 97 99 101 104 107 109 110 112 115 117 118 120 122 124 125 127 130 131 134 138 139 141 144 145 148 149 150 151 153 154 159 160 162 165 167 170 171 174 182 184 185 186 189 191 195 196 197 198 201 202 205 206 207 210 213 214 216 217 218 220 223 224 226 227 230 233 234 236 237 240 242 245 246 # 26214 difference c a 247 1 1 1 2 4 5 6 7 8 10 13 16 17 19 23 25 26 27 29 30 32 33 34 35 37 42 43 48 49 52 58 59 61 64 66 68 70 72 73 74 76 79 80 81 83 85 87 93 94 95 96 97 99 101 104 107 109 110 112 115 117 118 120 122 124 125 127 130 131 134 138 139 141 144 145 148 149 150 151 153 154 159 160 162 165 167 170 171 174 182 184 185 186 189 191 195 196 197 198 201 202 205 206 207 210 213 214 216 217 218 220 223 224 226 227 230 233 234 236 237 240 242 245 246 b 247 0 1 e # 26215 difference c a 247 1 1 2 6 10 11 14 15 16 17 18 20 21 24 25 26 28 29 34 36 38 39 40 41 42 45 47 48 51 52 53 55 58 60 62 66 68 71 74 81 87 88 91 94 95 96 97 99 104 106 107 108 114 115 116 117 118 119 123 126 129 130 134 136 137 139 142 143 144 145 147 148 150 151 154 155 156 159 163 164 167 171 172 174 175 178 179 181 182 183 184 185 186 187 190 191 194 196 197 198 204 205 211 214 216 217 218 220 221 222 224 225 226 227 228 229 230 234 240 241 243 244 245 b 247 1 1 2 6 10 11 14 15 16 17 18 20 21 24 25 26 28 29 34 36 38 39 40 41 42 45 47 48 51 52 53 55 58 60 62 66 68 71 74 81 87 88 91 94 95 96 97 99 104 106 107 108 114 115 116 117 118 119 123 126 129 130 134 136 137 139 142 143 144 145 147 148 150 151 154 155 156 159 163 164 167 171 172 174 175 178 179 181 182 183 184 185 186 187 190 191 194 196 197 198 204 205 211 214 216 217 218 220 221 222 224 225 226 227 228 229 230 234 240 241 243 244 245 # 26216 difference c a 247 1 1 2 6 10 11 14 15 16 17 18 20 21 24 25 26 28 29 34 36 38 39 40 41 42 45 47 48 51 52 53 55 58 60 62 66 68 71 74 81 87 88 91 94 95 96 97 99 104 106 107 108 114 115 116 117 118 119 123 126 129 130 134 136 137 139 142 143 144 145 147 148 150 151 154 155 156 159 163 164 167 171 172 174 175 178 179 181 182 183 184 185 186 187 190 191 194 196 197 198 204 205 211 214 216 217 218 220 221 222 224 225 226 227 228 229 230 234 240 241 243 244 245 b 247 0 1 f # 26217 difference c a 247 1 1 0 1 4 5 8 9 10 11 12 13 14 15 16 17 18 21 22 23 24 26 27 29 30 32 34 37 38 40 41 42 43 45 46 48 50 51 54 56 57 58 60 61 62 65 66 68 69 70 71 73 75 80 84 85 87 88 94 95 96 97 99 100 101 104 105 109 111 112 113 115 116 117 121 122 123 124 125 127 128 129 130 131 132 134 138 140 143 144 145 146 147 151 152 155 157 158 160 161 162 164 165 166 169 170 172 175 176 177 178 181 185 188 190 192 193 194 195 196 197 199 200 201 203 206 210 211 213 214 215 216 221 222 224 225 228 229 231 232 233 235 239 240 241 244 246 b 247 1 1 0 1 4 5 8 9 10 11 12 13 14 15 16 17 18 21 22 23 24 26 27 29 30 32 34 37 38 40 41 42 43 45 46 48 50 51 54 56 57 58 60 61 62 65 66 68 69 70 71 73 75 80 84 85 87 88 94 95 96 97 99 100 101 104 105 109 111 112 113 115 116 117 121 122 123 124 125 127 128 129 130 131 132 134 138 140 143 144 145 146 147 151 152 155 157 158 160 161 162 164 165 166 169 170 172 175 176 177 178 181 185 188 190 192 193 194 195 196 197 199 200 201 203 206 210 211 213 214 215 216 221 222 224 225 228 229 231 232 233 235 239 240 241 244 246 # 26218 difference c a 247 1 1 0 1 4 5 8 9 10 11 12 13 14 15 16 17 18 21 22 23 24 26 27 29 30 32 34 37 38 40 41 42 43 45 46 48 50 51 54 56 57 58 60 61 62 65 66 68 69 70 71 73 75 80 84 85 87 88 94 95 96 97 99 100 101 104 105 109 111 112 113 115 116 117 121 122 123 124 125 127 128 129 130 131 132 134 138 140 143 144 145 146 147 151 152 155 157 158 160 161 162 164 165 166 169 170 172 175 176 177 178 181 185 188 190 192 193 194 195 196 197 199 200 201 203 206 210 211 213 214 215 216 221 222 224 225 228 229 231 232 233 235 239 240 241 244 246 b 247 0 1 0 1 7 8 13 14 15 16 17 19 20 21 22 23 25 27 28 29 30 31 33 34 35 41 42 43 44 45 46 52 61 62 63 64 65 69 71 72 76 78 82 86 87 88 90 91 93 94 96 101 102 103 108 110 112 113 114 116 117 118 119 120 121 122 124 127 128 129 131 132 134 136 140 142 143 144 146 147 149 150 152 155 156 157 158 159 160 162 163 165 169 170 172 174 175 176 177 178 180 181 183 185 186 188 189 190 191 193 194 195 198 199 200 201 202 203 205 206 208 209 211 212 213 214 215 216 217 219 220 222 224 225 226 229 232 235 241 243 244 246 # 26219 difference c a 247 1 1 e b 247 1 1 e # 26220 difference c a 247 1 1 e b 247 1 0 e # 26221 difference c a 247 1 1 e b 247 1 1 e # 26222 difference c a 247 1 1 e b 247 1 0 f # 26223 difference c a 247 1 1 e b 247 1 1 e # 26224 difference c a 247 1 1 e b 247 1 0 0 3 6 9 11 12 20 21 23 24 27 28 30 31 32 35 36 40 41 43 47 48 49 50 51 54 56 57 59 64 65 69 70 72 73 78 81 83 85 88 89 90 94 95 97 99 100 102 106 107 108 109 111 112 114 117 120 122 123 124 125 126 128 132 134 135 137 138 141 145 147 148 149 151 154 157 158 159 163 166 167 169 171 172 174 181 183 185 188 191 192 193 194 197 199 200 204 206 208 209 210 212 215 217 219 221 222 224 225 228 229 231 233 237 238 240 241 242 243 244 246 # 26225 difference c a 247 1 1 f b 247 1 1 f # 26226 difference c a 247 1 1 f b 247 1 0 e # 26227 difference c a 247 1 1 f b 247 1 1 f # 26228 difference c a 247 1 1 f b 247 1 0 f # 26229 difference c a 247 1 1 f b 247 1 1 f # 26230 difference c a 247 1 1 f b 247 1 0 4 7 11 14 15 17 19 20 26 27 30 33 34 37 41 44 48 49 51 52 53 56 61 62 63 64 70 71 73 77 78 81 84 86 87 88 89 90 92 93 95 99 100 101 104 105 111 113 115 118 119 121 127 128 131 133 136 137 138 140 144 145 148 149 152 156 157 158 159 162 163 168 169 171 173 181 182 188 192 194 198 204 205 206 210 211 212 213 214 216 219 220 221 223 224 230 231 237 238 241 244 # 26231 difference c a 247 1 1 0 1 2 3 4 5 6 7 8 12 16 17 18 20 21 24 26 29 30 31 32 33 34 37 40 43 44 45 47 49 52 53 54 55 57 58 59 60 61 62 66 67 72 73 74 75 78 79 83 86 87 89 91 95 96 98 99 100 104 109 111 113 114 119 121 122 123 124 126 127 128 129 130 132 133 134 135 139 141 144 146 148 151 152 153 154 155 158 159 167 168 169 171 172 173 175 179 180 182 183 185 186 187 190 192 194 196 197 200 201 204 205 207 210 212 213 214 216 217 219 221 226 227 229 231 232 233 236 237 242 245 246 b 247 1 1 0 1 2 3 4 5 6 7 8 12 16 17 18 20 21 24 26 29 30 31 32 33 34 37 40 43 44 45 47 49 52 53 54 55 57 58 59 60 61 62 66 67 72 73 74 75 78 79 83 86 87 89 91 95 96 98 99 100 104 109 111 113 114 119 121 122 123 124 126 127 128 129 130 132 133 134 135 139 141 144 146 148 151 152 153 154 155 158 159 167 168 169 171 172 173 175 179 180 182 183 185 186 187 190 192 194 196 197 200 201 204 205 207 210 212 213 214 216 217 219 221 226 227 229 231 232 233 236 237 242 245 246 # 26232 difference c a 247 1 1 0 1 2 3 4 5 6 7 8 12 16 17 18 20 21 24 26 29 30 31 32 33 34 37 40 43 44 45 47 49 52 53 54 55 57 58 59 60 61 62 66 67 72 73 74 75 78 79 83 86 87 89 91 95 96 98 99 100 104 109 111 113 114 119 121 122 123 124 126 127 128 129 130 132 133 134 135 139 141 144 146 148 151 152 153 154 155 158 159 167 168 169 171 172 173 175 179 180 182 183 185 186 187 190 192 194 196 197 200 201 204 205 207 210 212 213 214 216 217 219 221 226 227 229 231 232 233 236 237 242 245 246 b 247 1 0 e # 26233 difference c a 247 1 1 2 4 5 6 7 9 10 13 14 17 18 19 20 24 25 26 27 29 30 31 33 34 35 36 37 38 39 40 41 43 45 47 48 49 50 54 57 59 61 62 63 64 65 66 69 73 75 76 78 81 82 83 85 87 90 91 93 94 98 99 103 104 106 107 108 109 112 116 117 123 124 126 128 129 131 132 133 134 135 138 141 142 143 148 150 152 154 155 157 160 161 163 165 166 167 170 171 173 174 175 176 177 178 179 181 184 186 190 191 192 193 194 196 200 204 205 207 208 210 212 214 215 217 219 220 222 223 228 229 230 231 232 233 235 236 237 238 239 240 241 243 246 b 247 1 1 2 4 5 6 7 9 10 13 14 17 18 19 20 24 25 26 27 29 30 31 33 34 35 36 37 38 39 40 41 43 45 47 48 49 50 54 57 59 61 62 63 64 65 66 69 73 75 76 78 81 82 83 85 87 90 91 93 94 98 99 103 104 106 107 108 109 112 116 117 123 124 126 128 129 131 132 133 134 135 138 141 142 143 148 150 152 154 155 157 160 161 163 165 166 167 170 171 173 174 175 176 177 178 179 181 184 186 190 191 192 193 194 196 200 204 205 207 208 210 212 214 215 217 219 220 222 223 228 229 230 231 232 233 235 236 237 238 239 240 241 243 246 # 26234 difference c a 247 1 1 2 4 5 6 7 9 10 13 14 17 18 19 20 24 25 26 27 29 30 31 33 34 35 36 37 38 39 40 41 43 45 47 48 49 50 54 57 59 61 62 63 64 65 66 69 73 75 76 78 81 82 83 85 87 90 91 93 94 98 99 103 104 106 107 108 109 112 116 117 123 124 126 128 129 131 132 133 134 135 138 141 142 143 148 150 152 154 155 157 160 161 163 165 166 167 170 171 173 174 175 176 177 178 179 181 184 186 190 191 192 193 194 196 200 204 205 207 208 210 212 214 215 217 219 220 222 223 228 229 230 231 232 233 235 236 237 238 239 240 241 243 246 b 247 1 0 f # 26235 difference c a 247 1 1 0 1 4 5 7 8 9 12 14 15 17 20 21 23 24 27 29 30 32 34 35 37 38 40 47 50 57 59 60 64 65 68 69 71 73 75 79 80 84 85 86 88 91 92 95 101 103 104 108 109 111 113 116 119 120 121 123 125 126 127 131 132 135 136 137 138 139 140 142 144 146 147 148 151 152 153 154 156 157 158 159 162 164 166 167 169 170 173 174 178 180 183 186 189 193 194 195 197 198 200 202 203 208 210 211 212 213 221 222 223 224 225 226 227 232 236 238 239 240 245 246 b 247 1 1 0 1 4 5 7 8 9 12 14 15 17 20 21 23 24 27 29 30 32 34 35 37 38 40 47 50 57 59 60 64 65 68 69 71 73 75 79 80 84 85 86 88 91 92 95 101 103 104 108 109 111 113 116 119 120 121 123 125 126 127 131 132 135 136 137 138 139 140 142 144 146 147 148 151 152 153 154 156 157 158 159 162 164 166 167 169 170 173 174 178 180 183 186 189 193 194 195 197 198 200 202 203 208 210 211 212 213 221 222 223 224 225 226 227 232 236 238 239 240 245 246 # 26236 difference c a 247 1 1 0 1 4 5 7 8 9 12 14 15 17 20 21 23 24 27 29 30 32 34 35 37 38 40 47 50 57 59 60 64 65 68 69 71 73 75 79 80 84 85 86 88 91 92 95 101 103 104 108 109 111 113 116 119 120 121 123 125 126 127 131 132 135 136 137 138 139 140 142 144 146 147 148 151 152 153 154 156 157 158 159 162 164 166 167 169 170 173 174 178 180 183 186 189 193 194 195 197 198 200 202 203 208 210 211 212 213 221 222 223 224 225 226 227 232 236 238 239 240 245 246 b 247 1 0 0 4 5 7 8 9 11 13 15 16 18 22 23 27 28 31 32 33 34 35 36 38 43 48 52 56 57 58 59 62 65 67 68 69 73 74 78 80 83 84 85 87 90 91 92 94 95 98 106 108 109 110 111 112 114 115 116 124 127 131 132 133 135 140 143 146 150 151 159 160 162 165 169 170 173 175 177 179 182 183 185 186 187 190 192 193 194 195 196 199 211 212 213 216 220 222 224 227 228 229 230 231 233 237 238 239 242 243 # 26237 difference c a 247 1 1 e b 247 1 1 e # 26238 difference c a 247 1 1 e b 247 1 1 e # 26239 difference c a 247 1 1 e b 247 1 1 e # 26240 difference c a 247 1 1 e b 247 1 1 f # 26241 difference c a 247 1 1 e b 247 1 1 e # 26242 difference c a 247 1 1 e b 247 1 1 1 3 5 7 8 9 12 15 16 20 21 23 28 29 31 33 34 35 36 38 42 43 44 46 47 49 50 52 54 56 61 63 64 66 67 69 71 74 78 79 81 86 87 88 91 93 94 98 99 106 107 108 109 110 112 114 115 118 120 123 125 127 131 133 135 137 138 139 140 141 145 147 150 152 159 160 161 164 165 167 168 170 174 179 180 182 183 187 188 189 193 194 196 197 202 205 206 207 215 216 217 218 220 222 225 227 228 229 231 232 239 240 241 245 # 26243 difference c a 247 1 1 f b 247 1 1 f # 26244 difference c a 247 1 1 f b 247 1 1 e # 26245 difference c a 247 1 1 f b 247 1 1 f # 26246 difference c a 247 1 1 f b 247 1 1 f # 26247 difference c a 247 1 1 f b 247 1 1 f # 26248 difference c a 247 1 1 f b 247 1 1 0 1 2 4 7 12 14 15 19 20 21 22 23 24 25 27 28 31 37 39 41 44 48 49 50 51 52 53 54 56 59 60 61 62 64 66 69 72 73 74 75 77 78 80 81 84 86 87 88 91 98 99 103 105 106 107 108 109 111 112 113 115 120 121 123 125 127 128 129 133 136 137 139 140 145 148 149 150 151 152 153 154 155 156 157 158 159 160 162 164 166 167 169 171 173 175 176 177 179 181 184 187 189 196 198 199 202 203 209 210 211 212 214 215 216 219 221 225 226 228 229 234 235 236 238 239 241 242 243 245 246 # 26249 difference c a 247 1 1 1 7 8 11 21 26 28 29 30 31 32 35 37 38 40 46 47 48 56 58 61 63 64 65 66 69 70 72 73 74 80 81 82 83 87 88 91 92 93 94 95 96 97 100 102 103 107 108 109 111 113 114 115 118 119 122 125 127 128 129 131 133 137 143 145 146 147 150 151 152 153 155 156 157 158 159 160 163 165 167 168 169 175 177 179 184 185 187 193 195 196 197 199 201 202 203 207 209 211 213 214 216 218 223 225 226 231 232 234 238 239 246 b 247 1 1 1 7 8 11 21 26 28 29 30 31 32 35 37 38 40 46 47 48 56 58 61 63 64 65 66 69 70 72 73 74 80 81 82 83 87 88 91 92 93 94 95 96 97 100 102 103 107 108 109 111 113 114 115 118 119 122 125 127 128 129 131 133 137 143 145 146 147 150 151 152 153 155 156 157 158 159 160 163 165 167 168 169 175 177 179 184 185 187 193 195 196 197 199 201 202 203 207 209 211 213 214 216 218 223 225 226 231 232 234 238 239 246 # 26250 difference c a 247 1 1 1 7 8 11 21 26 28 29 30 31 32 35 37 38 40 46 47 48 56 58 61 63 64 65 66 69 70 72 73 74 80 81 82 83 87 88 91 92 93 94 95 96 97 100 102 103 107 108 109 111 113 114 115 118 119 122 125 127 128 129 131 133 137 143 145 146 147 150 151 152 153 155 156 157 158 159 160 163 165 167 168 169 175 177 179 184 185 187 193 195 196 197 199 201 202 203 207 209 211 213 214 216 218 223 225 226 231 232 234 238 239 246 b 247 1 1 e # 26251 difference c a 247 1 1 1 2 6 8 9 10 17 18 23 25 27 29 30 31 32 35 36 40 42 47 48 52 53 56 57 60 61 62 69 70 72 74 76 79 80 82 86 87 88 89 91 92 97 98 99 104 106 107 112 114 115 116 118 119 125 126 127 129 130 131 136 138 140 144 147 148 152 153 154 156 157 163 164 165 166 169 170 171 177 181 184 188 189 190 192 193 195 196 199 201 202 203 207 210 211 215 216 217 219 227 228 230 231 233 234 235 237 239 242 243 244 246 b 247 1 1 1 2 6 8 9 10 17 18 23 25 27 29 30 31 32 35 36 40 42 47 48 52 53 56 57 60 61 62 69 70 72 74 76 79 80 82 86 87 88 89 91 92 97 98 99 104 106 107 112 114 115 116 118 119 125 126 127 129 130 131 136 138 140 144 147 148 152 153 154 156 157 163 164 165 166 169 170 171 177 181 184 188 189 190 192 193 195 196 199 201 202 203 207 210 211 215 216 217 219 227 228 230 231 233 234 235 237 239 242 243 244 246 # 26252 difference c a 247 1 1 1 2 6 8 9 10 17 18 23 25 27 29 30 31 32 35 36 40 42 47 48 52 53 56 57 60 61 62 69 70 72 74 76 79 80 82 86 87 88 89 91 92 97 98 99 104 106 107 112 114 115 116 118 119 125 126 127 129 130 131 136 138 140 144 147 148 152 153 154 156 157 163 164 165 166 169 170 171 177 181 184 188 189 190 192 193 195 196 199 201 202 203 207 210 211 215 216 217 219 227 228 230 231 233 234 235 237 239 242 243 244 246 b 247 1 1 f # 26253 difference c a 247 1 1 0 1 6 7 8 11 12 13 14 15 17 18 19 21 25 27 28 30 31 33 35 37 38 42 44 45 49 51 52 53 54 55 56 58 59 60 61 64 65 68 71 78 79 81 84 88 92 93 94 95 97 98 103 104 108 109 110 112 114 115 116 117 119 125 126 127 128 129 130 134 136 138 139 141 145 146 148 150 152 155 158 161 163 164 167 168 171 172 173 176 179 182 184 187 188 189 192 193 195 197 199 201 202 204 209 211 216 219 225 226 228 231 236 237 238 240 241 b 247 1 1 0 1 6 7 8 11 12 13 14 15 17 18 19 21 25 27 28 30 31 33 35 37 38 42 44 45 49 51 52 53 54 55 56 58 59 60 61 64 65 68 71 78 79 81 84 88 92 93 94 95 97 98 103 104 108 109 110 112 114 115 116 117 119 125 126 127 128 129 130 134 136 138 139 141 145 146 148 150 152 155 158 161 163 164 167 168 171 172 173 176 179 182 184 187 188 189 192 193 195 197 199 201 202 204 209 211 216 219 225 226 228 231 236 237 238 240 241 # 26254 difference c a 247 1 1 0 1 6 7 8 11 12 13 14 15 17 18 19 21 25 27 28 30 31 33 35 37 38 42 44 45 49 51 52 53 54 55 56 58 59 60 61 64 65 68 71 78 79 81 84 88 92 93 94 95 97 98 103 104 108 109 110 112 114 115 116 117 119 125 126 127 128 129 130 134 136 138 139 141 145 146 148 150 152 155 158 161 163 164 167 168 171 172 173 176 179 182 184 187 188 189 192 193 195 197 199 201 202 204 209 211 216 219 225 226 228 231 236 237 238 240 241 b 247 1 1 0 1 2 3 6 7 9 10 11 16 17 18 19 20 22 23 25 28 29 30 31 32 33 34 36 37 38 41 43 44 45 47 48 50 51 52 54 55 57 60 65 66 68 69 70 77 80 81 82 83 85 86 87 88 90 92 94 95 97 99 101 103 109 110 112 113 114 117 118 120 121 122 123 125 126 129 131 132 133 134 138 142 143 145 147 150 153 157 158 159 160 162 163 165 169 170 171 173 174 175 177 179 185 186 187 188 189 190 191 193 194 195 196 197 200 202 204 205 208 209 211 213 216 221 223 224 225 226 228 229 230 231 233 237 238 243 245 # 26255 difference c a 0 0 0 e b 0 0 0 e # 26256 revdifference c a 0 0 0 e b 0 0 0 e # 26257 revdifference c a 0 0 0 e b 0 0 0 e # 26258 revdifference c a 0 0 0 e b 0 0 0 e # 26259 revdifference c a 0 0 0 e b 0 0 0 e # 26260 revdifference c a 0 0 0 e b 0 0 0 # 26261 revdifference c a 0 0 0 e b 0 0 0 e # 26262 revdifference c a 0 0 0 e b 0 0 0 e # 26263 revdifference c a 0 0 0 e b 0 0 0 e # 26264 revdifference c a 0 0 0 e b 0 0 0 e # 26265 revdifference c a 0 0 0 e b 0 0 0 e # 26266 revdifference c a 0 0 0 e b 0 0 0 # 26267 revdifference c a 0 0 0 b 0 0 0 # 26268 revdifference c a 0 0 0 b 0 0 0 e # 26269 revdifference c a 0 0 0 b 0 0 0 # 26270 revdifference c a 0 0 0 b 0 0 0 e # 26271 revdifference c a 0 0 0 b 0 0 0 # 26272 revdifference c a 0 0 0 b 0 0 0 # 26273 revdifference c a 0 0 0 e b 0 0 0 e # 26274 revdifference c a 0 0 0 e b 0 0 1 e # 26275 revdifference c a 0 0 0 e b 0 0 0 e # 26276 revdifference c a 0 0 0 e b 0 0 1 e # 26277 revdifference c a 0 0 0 e b 0 0 0 e # 26278 revdifference c a 0 0 0 e b 0 0 1 # 26279 revdifference c a 0 0 0 e b 0 0 0 e # 26280 revdifference c a 0 0 0 e b 0 0 1 e # 26281 revdifference c a 0 0 0 e b 0 0 0 e # 26282 revdifference c a 0 0 0 e b 0 0 1 e # 26283 revdifference c a 0 0 0 e b 0 0 0 e # 26284 revdifference c a 0 0 0 e b 0 0 1 # 26285 revdifference c a 0 0 0 b 0 0 0 # 26286 revdifference c a 0 0 0 b 0 0 1 e # 26287 revdifference c a 0 0 0 b 0 0 0 # 26288 revdifference c a 0 0 0 b 0 0 1 e # 26289 revdifference c a 0 0 0 b 0 0 0 # 26290 revdifference c a 0 0 0 b 0 0 1 # 26291 revdifference c a 0 0 0 e b 0 0 0 e # 26292 revdifference c a 0 0 0 e b 0 1 0 e # 26293 revdifference c a 0 0 0 e b 0 0 0 e # 26294 revdifference c a 0 0 0 e b 0 1 0 e # 26295 revdifference c a 0 0 0 e b 0 0 0 e # 26296 revdifference c a 0 0 0 e b 0 1 0 # 26297 revdifference c a 0 0 0 e b 0 0 0 e # 26298 revdifference c a 0 0 0 e b 0 1 0 e # 26299 revdifference c a 0 0 0 e b 0 0 0 e # 26300 revdifference c a 0 0 0 e b 0 1 0 e # 26301 revdifference c a 0 0 0 e b 0 0 0 e # 26302 revdifference c a 0 0 0 e b 0 1 0 # 26303 revdifference c a 0 0 0 b 0 0 0 # 26304 revdifference c a 0 0 0 b 0 1 0 e # 26305 revdifference c a 0 0 0 b 0 0 0 # 26306 revdifference c a 0 0 0 b 0 1 0 e # 26307 revdifference c a 0 0 0 b 0 0 0 # 26308 revdifference c a 0 0 0 b 0 1 0 # 26309 revdifference c a 0 0 0 e b 0 0 0 e # 26310 revdifference c a 0 0 0 e b 0 1 1 e # 26311 revdifference c a 0 0 0 e b 0 0 0 e # 26312 revdifference c a 0 0 0 e b 0 1 1 e # 26313 revdifference c a 0 0 0 e b 0 0 0 e # 26314 revdifference c a 0 0 0 e b 0 1 1 # 26315 revdifference c a 0 0 0 e b 0 0 0 e # 26316 revdifference c a 0 0 0 e b 0 1 1 e # 26317 revdifference c a 0 0 0 e b 0 0 0 e # 26318 revdifference c a 0 0 0 e b 0 1 1 e # 26319 revdifference c a 0 0 0 e b 0 0 0 e # 26320 revdifference c a 0 0 0 e b 0 1 1 # 26321 revdifference c a 0 0 0 b 0 0 0 # 26322 revdifference c a 0 0 0 b 0 1 1 e # 26323 revdifference c a 0 0 0 b 0 0 0 # 26324 revdifference c a 0 0 0 b 0 1 1 e # 26325 revdifference c a 0 0 0 b 0 0 0 # 26326 revdifference c a 0 0 0 b 0 1 1 # 26327 revdifference c a 0 0 1 e b 0 0 1 e # 26328 revdifference c a 0 0 1 e b 0 0 0 e # 26329 revdifference c a 0 0 1 e b 0 0 1 e # 26330 revdifference c a 0 0 1 e b 0 0 0 e # 26331 revdifference c a 0 0 1 e b 0 0 1 e # 26332 revdifference c a 0 0 1 e b 0 0 0 # 26333 revdifference c a 0 0 1 e b 0 0 1 e # 26334 revdifference c a 0 0 1 e b 0 0 0 e # 26335 revdifference c a 0 0 1 e b 0 0 1 e # 26336 revdifference c a 0 0 1 e b 0 0 0 e # 26337 revdifference c a 0 0 1 e b 0 0 1 e # 26338 revdifference c a 0 0 1 e b 0 0 0 # 26339 revdifference c a 0 0 1 b 0 0 1 # 26340 revdifference c a 0 0 1 b 0 0 0 e # 26341 revdifference c a 0 0 1 b 0 0 1 # 26342 revdifference c a 0 0 1 b 0 0 0 e # 26343 revdifference c a 0 0 1 b 0 0 1 # 26344 revdifference c a 0 0 1 b 0 0 0 # 26345 revdifference c a 0 0 1 e b 0 0 1 e # 26346 revdifference c a 0 0 1 e b 0 0 1 e # 26347 revdifference c a 0 0 1 e b 0 0 1 e # 26348 revdifference c a 0 0 1 e b 0 0 1 e # 26349 revdifference c a 0 0 1 e b 0 0 1 e # 26350 revdifference c a 0 0 1 e b 0 0 1 # 26351 revdifference c a 0 0 1 e b 0 0 1 e # 26352 revdifference c a 0 0 1 e b 0 0 1 e # 26353 revdifference c a 0 0 1 e b 0 0 1 e # 26354 revdifference c a 0 0 1 e b 0 0 1 e # 26355 revdifference c a 0 0 1 e b 0 0 1 e # 26356 revdifference c a 0 0 1 e b 0 0 1 # 26357 revdifference c a 0 0 1 b 0 0 1 # 26358 revdifference c a 0 0 1 b 0 0 1 e # 26359 revdifference c a 0 0 1 b 0 0 1 # 26360 revdifference c a 0 0 1 b 0 0 1 e # 26361 revdifference c a 0 0 1 b 0 0 1 # 26362 revdifference c a 0 0 1 b 0 0 1 # 26363 revdifference c a 0 0 1 e b 0 0 1 e # 26364 revdifference c a 0 0 1 e b 0 1 0 e # 26365 revdifference c a 0 0 1 e b 0 0 1 e # 26366 revdifference c a 0 0 1 e b 0 1 0 e # 26367 revdifference c a 0 0 1 e b 0 0 1 e # 26368 revdifference c a 0 0 1 e b 0 1 0 # 26369 revdifference c a 0 0 1 e b 0 0 1 e # 26370 revdifference c a 0 0 1 e b 0 1 0 e # 26371 revdifference c a 0 0 1 e b 0 0 1 e # 26372 revdifference c a 0 0 1 e b 0 1 0 e # 26373 revdifference c a 0 0 1 e b 0 0 1 e # 26374 revdifference c a 0 0 1 e b 0 1 0 # 26375 revdifference c a 0 0 1 b 0 0 1 # 26376 revdifference c a 0 0 1 b 0 1 0 e # 26377 revdifference c a 0 0 1 b 0 0 1 # 26378 revdifference c a 0 0 1 b 0 1 0 e # 26379 revdifference c a 0 0 1 b 0 0 1 # 26380 revdifference c a 0 0 1 b 0 1 0 # 26381 revdifference c a 0 0 1 e b 0 0 1 e # 26382 revdifference c a 0 0 1 e b 0 1 1 e # 26383 revdifference c a 0 0 1 e b 0 0 1 e # 26384 revdifference c a 0 0 1 e b 0 1 1 e # 26385 revdifference c a 0 0 1 e b 0 0 1 e # 26386 revdifference c a 0 0 1 e b 0 1 1 # 26387 revdifference c a 0 0 1 e b 0 0 1 e # 26388 revdifference c a 0 0 1 e b 0 1 1 e # 26389 revdifference c a 0 0 1 e b 0 0 1 e # 26390 revdifference c a 0 0 1 e b 0 1 1 e # 26391 revdifference c a 0 0 1 e b 0 0 1 e # 26392 revdifference c a 0 0 1 e b 0 1 1 # 26393 revdifference c a 0 0 1 b 0 0 1 # 26394 revdifference c a 0 0 1 b 0 1 1 e # 26395 revdifference c a 0 0 1 b 0 0 1 # 26396 revdifference c a 0 0 1 b 0 1 1 e # 26397 revdifference c a 0 0 1 b 0 0 1 # 26398 revdifference c a 0 0 1 b 0 1 1 # 26399 revdifference c a 0 1 0 e b 0 1 0 e # 26400 revdifference c a 0 1 0 e b 0 0 0 e # 26401 revdifference c a 0 1 0 e b 0 1 0 e # 26402 revdifference c a 0 1 0 e b 0 0 0 e # 26403 revdifference c a 0 1 0 e b 0 1 0 e # 26404 revdifference c a 0 1 0 e b 0 0 0 # 26405 revdifference c a 0 1 0 e b 0 1 0 e # 26406 revdifference c a 0 1 0 e b 0 0 0 e # 26407 revdifference c a 0 1 0 e b 0 1 0 e # 26408 revdifference c a 0 1 0 e b 0 0 0 e # 26409 revdifference c a 0 1 0 e b 0 1 0 e # 26410 revdifference c a 0 1 0 e b 0 0 0 # 26411 revdifference c a 0 1 0 b 0 1 0 # 26412 revdifference c a 0 1 0 b 0 0 0 e # 26413 revdifference c a 0 1 0 b 0 1 0 # 26414 revdifference c a 0 1 0 b 0 0 0 e # 26415 revdifference c a 0 1 0 b 0 1 0 # 26416 revdifference c a 0 1 0 b 0 0 0 # 26417 revdifference c a 0 1 0 e b 0 1 0 e # 26418 revdifference c a 0 1 0 e b 0 0 1 e # 26419 revdifference c a 0 1 0 e b 0 1 0 e # 26420 revdifference c a 0 1 0 e b 0 0 1 e # 26421 revdifference c a 0 1 0 e b 0 1 0 e # 26422 revdifference c a 0 1 0 e b 0 0 1 # 26423 revdifference c a 0 1 0 e b 0 1 0 e # 26424 revdifference c a 0 1 0 e b 0 0 1 e # 26425 revdifference c a 0 1 0 e b 0 1 0 e # 26426 revdifference c a 0 1 0 e b 0 0 1 e # 26427 revdifference c a 0 1 0 e b 0 1 0 e # 26428 revdifference c a 0 1 0 e b 0 0 1 # 26429 revdifference c a 0 1 0 b 0 1 0 # 26430 revdifference c a 0 1 0 b 0 0 1 e # 26431 revdifference c a 0 1 0 b 0 1 0 # 26432 revdifference c a 0 1 0 b 0 0 1 e # 26433 revdifference c a 0 1 0 b 0 1 0 # 26434 revdifference c a 0 1 0 b 0 0 1 # 26435 revdifference c a 0 1 0 e b 0 1 0 e # 26436 revdifference c a 0 1 0 e b 0 1 0 e # 26437 revdifference c a 0 1 0 e b 0 1 0 e # 26438 revdifference c a 0 1 0 e b 0 1 0 e # 26439 revdifference c a 0 1 0 e b 0 1 0 e # 26440 revdifference c a 0 1 0 e b 0 1 0 # 26441 revdifference c a 0 1 0 e b 0 1 0 e # 26442 revdifference c a 0 1 0 e b 0 1 0 e # 26443 revdifference c a 0 1 0 e b 0 1 0 e # 26444 revdifference c a 0 1 0 e b 0 1 0 e # 26445 revdifference c a 0 1 0 e b 0 1 0 e # 26446 revdifference c a 0 1 0 e b 0 1 0 # 26447 revdifference c a 0 1 0 b 0 1 0 # 26448 revdifference c a 0 1 0 b 0 1 0 e # 26449 revdifference c a 0 1 0 b 0 1 0 # 26450 revdifference c a 0 1 0 b 0 1 0 e # 26451 revdifference c a 0 1 0 b 0 1 0 # 26452 revdifference c a 0 1 0 b 0 1 0 # 26453 revdifference c a 0 1 0 e b 0 1 0 e # 26454 revdifference c a 0 1 0 e b 0 1 1 e # 26455 revdifference c a 0 1 0 e b 0 1 0 e # 26456 revdifference c a 0 1 0 e b 0 1 1 e # 26457 revdifference c a 0 1 0 e b 0 1 0 e # 26458 revdifference c a 0 1 0 e b 0 1 1 # 26459 revdifference c a 0 1 0 e b 0 1 0 e # 26460 revdifference c a 0 1 0 e b 0 1 1 e # 26461 revdifference c a 0 1 0 e b 0 1 0 e # 26462 revdifference c a 0 1 0 e b 0 1 1 e # 26463 revdifference c a 0 1 0 e b 0 1 0 e # 26464 revdifference c a 0 1 0 e b 0 1 1 # 26465 revdifference c a 0 1 0 b 0 1 0 # 26466 revdifference c a 0 1 0 b 0 1 1 e # 26467 revdifference c a 0 1 0 b 0 1 0 # 26468 revdifference c a 0 1 0 b 0 1 1 e # 26469 revdifference c a 0 1 0 b 0 1 0 # 26470 revdifference c a 0 1 0 b 0 1 1 # 26471 revdifference c a 0 1 1 e b 0 1 1 e # 26472 revdifference c a 0 1 1 e b 0 0 0 e # 26473 revdifference c a 0 1 1 e b 0 1 1 e # 26474 revdifference c a 0 1 1 e b 0 0 0 e # 26475 revdifference c a 0 1 1 e b 0 1 1 e # 26476 revdifference c a 0 1 1 e b 0 0 0 # 26477 revdifference c a 0 1 1 e b 0 1 1 e # 26478 revdifference c a 0 1 1 e b 0 0 0 e # 26479 revdifference c a 0 1 1 e b 0 1 1 e # 26480 revdifference c a 0 1 1 e b 0 0 0 e # 26481 revdifference c a 0 1 1 e b 0 1 1 e # 26482 revdifference c a 0 1 1 e b 0 0 0 # 26483 revdifference c a 0 1 1 b 0 1 1 # 26484 revdifference c a 0 1 1 b 0 0 0 e # 26485 revdifference c a 0 1 1 b 0 1 1 # 26486 revdifference c a 0 1 1 b 0 0 0 e # 26487 revdifference c a 0 1 1 b 0 1 1 # 26488 revdifference c a 0 1 1 b 0 0 0 # 26489 revdifference c a 0 1 1 e b 0 1 1 e # 26490 revdifference c a 0 1 1 e b 0 0 1 e # 26491 revdifference c a 0 1 1 e b 0 1 1 e # 26492 revdifference c a 0 1 1 e b 0 0 1 e # 26493 revdifference c a 0 1 1 e b 0 1 1 e # 26494 revdifference c a 0 1 1 e b 0 0 1 # 26495 revdifference c a 0 1 1 e b 0 1 1 e # 26496 revdifference c a 0 1 1 e b 0 0 1 e # 26497 revdifference c a 0 1 1 e b 0 1 1 e # 26498 revdifference c a 0 1 1 e b 0 0 1 e # 26499 revdifference c a 0 1 1 e b 0 1 1 e # 26500 revdifference c a 0 1 1 e b 0 0 1 # 26501 revdifference c a 0 1 1 b 0 1 1 # 26502 revdifference c a 0 1 1 b 0 0 1 e # 26503 revdifference c a 0 1 1 b 0 1 1 # 26504 revdifference c a 0 1 1 b 0 0 1 e # 26505 revdifference c a 0 1 1 b 0 1 1 # 26506 revdifference c a 0 1 1 b 0 0 1 # 26507 revdifference c a 0 1 1 e b 0 1 1 e # 26508 revdifference c a 0 1 1 e b 0 1 0 e # 26509 revdifference c a 0 1 1 e b 0 1 1 e # 26510 revdifference c a 0 1 1 e b 0 1 0 e # 26511 revdifference c a 0 1 1 e b 0 1 1 e # 26512 revdifference c a 0 1 1 e b 0 1 0 # 26513 revdifference c a 0 1 1 e b 0 1 1 e # 26514 revdifference c a 0 1 1 e b 0 1 0 e # 26515 revdifference c a 0 1 1 e b 0 1 1 e # 26516 revdifference c a 0 1 1 e b 0 1 0 e # 26517 revdifference c a 0 1 1 e b 0 1 1 e # 26518 revdifference c a 0 1 1 e b 0 1 0 # 26519 revdifference c a 0 1 1 b 0 1 1 # 26520 revdifference c a 0 1 1 b 0 1 0 e # 26521 revdifference c a 0 1 1 b 0 1 1 # 26522 revdifference c a 0 1 1 b 0 1 0 e # 26523 revdifference c a 0 1 1 b 0 1 1 # 26524 revdifference c a 0 1 1 b 0 1 0 # 26525 revdifference c a 0 1 1 e b 0 1 1 e # 26526 revdifference c a 0 1 1 e b 0 1 1 e # 26527 revdifference c a 0 1 1 e b 0 1 1 e # 26528 revdifference c a 0 1 1 e b 0 1 1 e # 26529 revdifference c a 0 1 1 e b 0 1 1 e # 26530 revdifference c a 0 1 1 e b 0 1 1 # 26531 revdifference c a 0 1 1 e b 0 1 1 e # 26532 revdifference c a 0 1 1 e b 0 1 1 e # 26533 revdifference c a 0 1 1 e b 0 1 1 e # 26534 revdifference c a 0 1 1 e b 0 1 1 e # 26535 revdifference c a 0 1 1 e b 0 1 1 e # 26536 revdifference c a 0 1 1 e b 0 1 1 # 26537 revdifference c a 0 1 1 b 0 1 1 # 26538 revdifference c a 0 1 1 b 0 1 1 e # 26539 revdifference c a 0 1 1 b 0 1 1 # 26540 revdifference c a 0 1 1 b 0 1 1 e # 26541 revdifference c a 0 1 1 b 0 1 1 # 26542 revdifference c a 0 1 1 b 0 1 1 # 26543 revdifference c a 1 0 0 e b 1 0 0 e # 26544 revdifference c a 1 0 0 e b 1 0 0 e # 26545 revdifference c a 1 0 0 e b 1 0 0 e # 26546 revdifference c a 1 0 0 e b 1 0 0 f # 26547 revdifference c a 1 0 0 e b 1 0 0 e # 26548 revdifference c a 1 0 0 e b 1 0 0 0 # 26549 revdifference c a 1 0 0 f b 1 0 0 f # 26550 revdifference c a 1 0 0 f b 1 0 0 e # 26551 revdifference c a 1 0 0 f b 1 0 0 f # 26552 revdifference c a 1 0 0 f b 1 0 0 f # 26553 revdifference c a 1 0 0 f b 1 0 0 f # 26554 revdifference c a 1 0 0 f b 1 0 0 # 26555 revdifference c a 1 0 0 b 1 0 0 # 26556 revdifference c a 1 0 0 b 1 0 0 e # 26557 revdifference c a 1 0 0 b 1 0 0 # 26558 revdifference c a 1 0 0 b 1 0 0 f # 26559 revdifference c a 1 0 0 0 b 1 0 0 0 # 26560 revdifference c a 1 0 0 0 b 1 0 0 # 26561 revdifference c a 1 0 0 e b 1 0 0 e # 26562 revdifference c a 1 0 0 e b 1 0 1 e # 26563 revdifference c a 1 0 0 e b 1 0 0 e # 26564 revdifference c a 1 0 0 e b 1 0 1 f # 26565 revdifference c a 1 0 0 e b 1 0 0 e # 26566 revdifference c a 1 0 0 e b 1 0 1 0 # 26567 revdifference c a 1 0 0 f b 1 0 0 f # 26568 revdifference c a 1 0 0 f b 1 0 1 e # 26569 revdifference c a 1 0 0 f b 1 0 0 f # 26570 revdifference c a 1 0 0 f b 1 0 1 f # 26571 revdifference c a 1 0 0 f b 1 0 0 f # 26572 revdifference c a 1 0 0 f b 1 0 1 0 # 26573 revdifference c a 1 0 0 b 1 0 0 # 26574 revdifference c a 1 0 0 b 1 0 1 e # 26575 revdifference c a 1 0 0 0 b 1 0 0 0 # 26576 revdifference c a 1 0 0 0 b 1 0 1 f # 26577 revdifference c a 1 0 0 b 1 0 0 # 26578 revdifference c a 1 0 0 b 1 0 1 0 # 26579 revdifference c a 1 0 0 e b 1 0 0 e # 26580 revdifference c a 1 0 0 e b 1 1 0 e # 26581 revdifference c a 1 0 0 e b 1 0 0 e # 26582 revdifference c a 1 0 0 e b 1 1 0 f # 26583 revdifference c a 1 0 0 e b 1 0 0 e # 26584 revdifference c a 1 0 0 e b 1 1 0 0 # 26585 revdifference c a 1 0 0 f b 1 0 0 f # 26586 revdifference c a 1 0 0 f b 1 1 0 e # 26587 revdifference c a 1 0 0 f b 1 0 0 f # 26588 revdifference c a 1 0 0 f b 1 1 0 f # 26589 revdifference c a 1 0 0 f b 1 0 0 f # 26590 revdifference c a 1 0 0 f b 1 1 0 # 26591 revdifference c a 1 0 0 b 1 0 0 # 26592 revdifference c a 1 0 0 b 1 1 0 e # 26593 revdifference c a 1 0 0 0 b 1 0 0 0 # 26594 revdifference c a 1 0 0 0 b 1 1 0 f # 26595 revdifference c a 1 0 0 0 b 1 0 0 0 # 26596 revdifference c a 1 0 0 0 b 1 1 0 # 26597 revdifference c a 1 0 0 e b 1 0 0 e # 26598 revdifference c a 1 0 0 e b 1 1 1 e # 26599 revdifference c a 1 0 0 e b 1 0 0 e # 26600 revdifference c a 1 0 0 e b 1 1 1 f # 26601 revdifference c a 1 0 0 e b 1 0 0 e # 26602 revdifference c a 1 0 0 e b 1 1 1 # 26603 revdifference c a 1 0 0 f b 1 0 0 f # 26604 revdifference c a 1 0 0 f b 1 1 1 e # 26605 revdifference c a 1 0 0 f b 1 0 0 f # 26606 revdifference c a 1 0 0 f b 1 1 1 f # 26607 revdifference c a 1 0 0 f b 1 0 0 f # 26608 revdifference c a 1 0 0 f b 1 1 1 0 # 26609 revdifference c a 1 0 0 0 b 1 0 0 0 # 26610 revdifference c a 1 0 0 0 b 1 1 1 e # 26611 revdifference c a 1 0 0 0 b 1 0 0 0 # 26612 revdifference c a 1 0 0 0 b 1 1 1 f # 26613 revdifference c a 1 0 0 0 b 1 0 0 0 # 26614 revdifference c a 1 0 0 0 b 1 1 1 0 # 26615 revdifference c a 1 0 1 e b 1 0 1 e # 26616 revdifference c a 1 0 1 e b 1 0 0 e # 26617 revdifference c a 1 0 1 e b 1 0 1 e # 26618 revdifference c a 1 0 1 e b 1 0 0 f # 26619 revdifference c a 1 0 1 e b 1 0 1 e # 26620 revdifference c a 1 0 1 e b 1 0 0 # 26621 revdifference c a 1 0 1 f b 1 0 1 f # 26622 revdifference c a 1 0 1 f b 1 0 0 e # 26623 revdifference c a 1 0 1 f b 1 0 1 f # 26624 revdifference c a 1 0 1 f b 1 0 0 f # 26625 revdifference c a 1 0 1 f b 1 0 1 f # 26626 revdifference c a 1 0 1 f b 1 0 0 0 # 26627 revdifference c a 1 0 1 b 1 0 1 # 26628 revdifference c a 1 0 1 b 1 0 0 e # 26629 revdifference c a 1 0 1 b 1 0 1 # 26630 revdifference c a 1 0 1 b 1 0 0 f # 26631 revdifference c a 1 0 1 b 1 0 1 # 26632 revdifference c a 1 0 1 b 1 0 0 0 # 26633 revdifference c a 1 0 1 e b 1 0 1 e # 26634 revdifference c a 1 0 1 e b 1 0 1 e # 26635 revdifference c a 1 0 1 e b 1 0 1 e # 26636 revdifference c a 1 0 1 e b 1 0 1 f # 26637 revdifference c a 1 0 1 e b 1 0 1 e # 26638 revdifference c a 1 0 1 e b 1 0 1 # 26639 revdifference c a 1 0 1 f b 1 0 1 f # 26640 revdifference c a 1 0 1 f b 1 0 1 e # 26641 revdifference c a 1 0 1 f b 1 0 1 f # 26642 revdifference c a 1 0 1 f b 1 0 1 f # 26643 revdifference c a 1 0 1 f b 1 0 1 f # 26644 revdifference c a 1 0 1 f b 1 0 1 # 26645 revdifference c a 1 0 1 b 1 0 1 # 26646 revdifference c a 1 0 1 b 1 0 1 e # 26647 revdifference c a 1 0 1 0 b 1 0 1 0 # 26648 revdifference c a 1 0 1 0 b 1 0 1 f # 26649 revdifference c a 1 0 1 0 b 1 0 1 0 # 26650 revdifference c a 1 0 1 0 b 1 0 1 0 # 26651 revdifference c a 1 0 1 e b 1 0 1 e # 26652 revdifference c a 1 0 1 e b 1 1 0 e # 26653 revdifference c a 1 0 1 e b 1 0 1 e # 26654 revdifference c a 1 0 1 e b 1 1 0 f # 26655 revdifference c a 1 0 1 e b 1 0 1 e # 26656 revdifference c a 1 0 1 e b 1 1 0 # 26657 revdifference c a 1 0 1 f b 1 0 1 f # 26658 revdifference c a 1 0 1 f b 1 1 0 e # 26659 revdifference c a 1 0 1 f b 1 0 1 f # 26660 revdifference c a 1 0 1 f b 1 1 0 f # 26661 revdifference c a 1 0 1 f b 1 0 1 f # 26662 revdifference c a 1 0 1 f b 1 1 0 # 26663 revdifference c a 1 0 1 0 b 1 0 1 0 # 26664 revdifference c a 1 0 1 0 b 1 1 0 e # 26665 revdifference c a 1 0 1 0 b 1 0 1 0 # 26666 revdifference c a 1 0 1 0 b 1 1 0 f # 26667 revdifference c a 1 0 1 b 1 0 1 # 26668 revdifference c a 1 0 1 b 1 1 0 # 26669 revdifference c a 1 0 1 e b 1 0 1 e # 26670 revdifference c a 1 0 1 e b 1 1 1 e # 26671 revdifference c a 1 0 1 e b 1 0 1 e # 26672 revdifference c a 1 0 1 e b 1 1 1 f # 26673 revdifference c a 1 0 1 e b 1 0 1 e # 26674 revdifference c a 1 0 1 e b 1 1 1 # 26675 revdifference c a 1 0 1 f b 1 0 1 f # 26676 revdifference c a 1 0 1 f b 1 1 1 e # 26677 revdifference c a 1 0 1 f b 1 0 1 f # 26678 revdifference c a 1 0 1 f b 1 1 1 f # 26679 revdifference c a 1 0 1 f b 1 0 1 f # 26680 revdifference c a 1 0 1 f b 1 1 1 0 # 26681 revdifference c a 1 0 1 0 b 1 0 1 0 # 26682 revdifference c a 1 0 1 0 b 1 1 1 e # 26683 revdifference c a 1 0 1 0 b 1 0 1 0 # 26684 revdifference c a 1 0 1 0 b 1 1 1 f # 26685 revdifference c a 1 0 1 0 b 1 0 1 0 # 26686 revdifference c a 1 0 1 0 b 1 1 1 # 26687 revdifference c a 1 1 0 e b 1 1 0 e # 26688 revdifference c a 1 1 0 e b 1 0 0 e # 26689 revdifference c a 1 1 0 e b 1 1 0 e # 26690 revdifference c a 1 1 0 e b 1 0 0 f # 26691 revdifference c a 1 1 0 e b 1 1 0 e # 26692 revdifference c a 1 1 0 e b 1 0 0 # 26693 revdifference c a 1 1 0 f b 1 1 0 f # 26694 revdifference c a 1 1 0 f b 1 0 0 e # 26695 revdifference c a 1 1 0 f b 1 1 0 f # 26696 revdifference c a 1 1 0 f b 1 0 0 f # 26697 revdifference c a 1 1 0 f b 1 1 0 f # 26698 revdifference c a 1 1 0 f b 1 0 0 0 # 26699 revdifference c a 1 1 0 b 1 1 0 # 26700 revdifference c a 1 1 0 b 1 0 0 e # 26701 revdifference c a 1 1 0 0 b 1 1 0 0 # 26702 revdifference c a 1 1 0 0 b 1 0 0 f # 26703 revdifference c a 1 1 0 0 b 1 1 0 0 # 26704 revdifference c a 1 1 0 0 b 1 0 0 # 26705 revdifference c a 1 1 0 e b 1 1 0 e # 26706 revdifference c a 1 1 0 e b 1 0 1 e # 26707 revdifference c a 1 1 0 e b 1 1 0 e # 26708 revdifference c a 1 1 0 e b 1 0 1 f # 26709 revdifference c a 1 1 0 e b 1 1 0 e # 26710 revdifference c a 1 1 0 e b 1 0 1 0 # 26711 revdifference c a 1 1 0 f b 1 1 0 f # 26712 revdifference c a 1 1 0 f b 1 0 1 e # 26713 revdifference c a 1 1 0 f b 1 1 0 f # 26714 revdifference c a 1 1 0 f b 1 0 1 f # 26715 revdifference c a 1 1 0 f b 1 1 0 f # 26716 revdifference c a 1 1 0 f b 1 0 1 # 26717 revdifference c a 1 1 0 b 1 1 0 # 26718 revdifference c a 1 1 0 b 1 0 1 e # 26719 revdifference c a 1 1 0 b 1 1 0 # 26720 revdifference c a 1 1 0 b 1 0 1 f # 26721 revdifference c a 1 1 0 0 b 1 1 0 0 # 26722 revdifference c a 1 1 0 0 b 1 0 1 # 26723 revdifference c a 1 1 0 e b 1 1 0 e # 26724 revdifference c a 1 1 0 e b 1 1 0 e # 26725 revdifference c a 1 1 0 e b 1 1 0 e # 26726 revdifference c a 1 1 0 e b 1 1 0 f # 26727 revdifference c a 1 1 0 e b 1 1 0 e # 26728 revdifference c a 1 1 0 e b 1 1 0 # 26729 revdifference c a 1 1 0 f b 1 1 0 f # 26730 revdifference c a 1 1 0 f b 1 1 0 e # 26731 revdifference c a 1 1 0 f b 1 1 0 f # 26732 revdifference c a 1 1 0 f b 1 1 0 f # 26733 revdifference c a 1 1 0 f b 1 1 0 f # 26734 revdifference c a 1 1 0 f b 1 1 0 # 26735 revdifference c a 1 1 0 0 b 1 1 0 0 # 26736 revdifference c a 1 1 0 0 b 1 1 0 e # 26737 revdifference c a 1 1 0 b 1 1 0 # 26738 revdifference c a 1 1 0 b 1 1 0 f # 26739 revdifference c a 1 1 0 b 1 1 0 # 26740 revdifference c a 1 1 0 b 1 1 0 # 26741 revdifference c a 1 1 0 e b 1 1 0 e # 26742 revdifference c a 1 1 0 e b 1 1 1 e # 26743 revdifference c a 1 1 0 e b 1 1 0 e # 26744 revdifference c a 1 1 0 e b 1 1 1 f # 26745 revdifference c a 1 1 0 e b 1 1 0 e # 26746 revdifference c a 1 1 0 e b 1 1 1 # 26747 revdifference c a 1 1 0 f b 1 1 0 f # 26748 revdifference c a 1 1 0 f b 1 1 1 e # 26749 revdifference c a 1 1 0 f b 1 1 0 f # 26750 revdifference c a 1 1 0 f b 1 1 1 f # 26751 revdifference c a 1 1 0 f b 1 1 0 f # 26752 revdifference c a 1 1 0 f b 1 1 1 0 # 26753 revdifference c a 1 1 0 0 b 1 1 0 0 # 26754 revdifference c a 1 1 0 0 b 1 1 1 e # 26755 revdifference c a 1 1 0 b 1 1 0 # 26756 revdifference c a 1 1 0 b 1 1 1 f # 26757 revdifference c a 1 1 0 b 1 1 0 # 26758 revdifference c a 1 1 0 b 1 1 1 # 26759 revdifference c a 1 1 1 e b 1 1 1 e # 26760 revdifference c a 1 1 1 e b 1 0 0 e # 26761 revdifference c a 1 1 1 e b 1 1 1 e # 26762 revdifference c a 1 1 1 e b 1 0 0 f # 26763 revdifference c a 1 1 1 e b 1 1 1 e # 26764 revdifference c a 1 1 1 e b 1 0 0 # 26765 revdifference c a 1 1 1 f b 1 1 1 f # 26766 revdifference c a 1 1 1 f b 1 0 0 e # 26767 revdifference c a 1 1 1 f b 1 1 1 f # 26768 revdifference c a 1 1 1 f b 1 0 0 f # 26769 revdifference c a 1 1 1 f b 1 1 1 f # 26770 revdifference c a 1 1 1 f b 1 0 0 0 # 26771 revdifference c a 1 1 1 b 1 1 1 # 26772 revdifference c a 1 1 1 b 1 0 0 e # 26773 revdifference c a 1 1 1 b 1 1 1 # 26774 revdifference c a 1 1 1 b 1 0 0 f # 26775 revdifference c a 1 1 1 0 b 1 1 1 0 # 26776 revdifference c a 1 1 1 0 b 1 0 0 0 # 26777 revdifference c a 1 1 1 e b 1 1 1 e # 26778 revdifference c a 1 1 1 e b 1 0 1 e # 26779 revdifference c a 1 1 1 e b 1 1 1 e # 26780 revdifference c a 1 1 1 e b 1 0 1 f # 26781 revdifference c a 1 1 1 e b 1 1 1 e # 26782 revdifference c a 1 1 1 e b 1 0 1 0 # 26783 revdifference c a 1 1 1 f b 1 1 1 f # 26784 revdifference c a 1 1 1 f b 1 0 1 e # 26785 revdifference c a 1 1 1 f b 1 1 1 f # 26786 revdifference c a 1 1 1 f b 1 0 1 f # 26787 revdifference c a 1 1 1 f b 1 1 1 f # 26788 revdifference c a 1 1 1 f b 1 0 1 # 26789 revdifference c a 1 1 1 0 b 1 1 1 0 # 26790 revdifference c a 1 1 1 0 b 1 0 1 e # 26791 revdifference c a 1 1 1 b 1 1 1 # 26792 revdifference c a 1 1 1 b 1 0 1 f # 26793 revdifference c a 1 1 1 b 1 1 1 # 26794 revdifference c a 1 1 1 b 1 0 1 0 # 26795 revdifference c a 1 1 1 e b 1 1 1 e # 26796 revdifference c a 1 1 1 e b 1 1 0 e # 26797 revdifference c a 1 1 1 e b 1 1 1 e # 26798 revdifference c a 1 1 1 e b 1 1 0 f # 26799 revdifference c a 1 1 1 e b 1 1 1 e # 26800 revdifference c a 1 1 1 e b 1 1 0 # 26801 revdifference c a 1 1 1 f b 1 1 1 f # 26802 revdifference c a 1 1 1 f b 1 1 0 e # 26803 revdifference c a 1 1 1 f b 1 1 1 f # 26804 revdifference c a 1 1 1 f b 1 1 0 f # 26805 revdifference c a 1 1 1 f b 1 1 1 f # 26806 revdifference c a 1 1 1 f b 1 1 0 # 26807 revdifference c a 1 1 1 b 1 1 1 # 26808 revdifference c a 1 1 1 b 1 1 0 e # 26809 revdifference c a 1 1 1 0 b 1 1 1 0 # 26810 revdifference c a 1 1 1 0 b 1 1 0 f # 26811 revdifference c a 1 1 1 b 1 1 1 # 26812 revdifference c a 1 1 1 b 1 1 0 # 26813 revdifference c a 1 1 1 e b 1 1 1 e # 26814 revdifference c a 1 1 1 e b 1 1 1 e # 26815 revdifference c a 1 1 1 e b 1 1 1 e # 26816 revdifference c a 1 1 1 e b 1 1 1 f # 26817 revdifference c a 1 1 1 e b 1 1 1 e # 26818 revdifference c a 1 1 1 e b 1 1 1 # 26819 revdifference c a 1 1 1 f b 1 1 1 f # 26820 revdifference c a 1 1 1 f b 1 1 1 e # 26821 revdifference c a 1 1 1 f b 1 1 1 f # 26822 revdifference c a 1 1 1 f b 1 1 1 f # 26823 revdifference c a 1 1 1 f b 1 1 1 f # 26824 revdifference c a 1 1 1 f b 1 1 1 0 # 26825 revdifference c a 1 1 1 b 1 1 1 # 26826 revdifference c a 1 1 1 b 1 1 1 e # 26827 revdifference c a 1 1 1 0 b 1 1 1 0 # 26828 revdifference c a 1 1 1 0 b 1 1 1 f # 26829 revdifference c a 1 1 1 b 1 1 1 # 26830 revdifference c a 1 1 1 b 1 1 1 0 # 26831 revdifference c a 31 0 0 e b 31 0 0 e # 26832 revdifference c a 31 0 0 e b 31 0 0 e # 26833 revdifference c a 31 0 0 e b 31 0 0 e # 26834 revdifference c a 31 0 0 e b 31 0 0 f # 26835 revdifference c a 31 0 0 e b 31 0 0 e # 26836 revdifference c a 31 0 0 e b 31 0 0 1 4 5 6 8 9 10 11 12 15 16 18 20 22 24 26 30 # 26837 revdifference c a 31 0 0 f b 31 0 0 f # 26838 revdifference c a 31 0 0 f b 31 0 0 e # 26839 revdifference c a 31 0 0 f b 31 0 0 f # 26840 revdifference c a 31 0 0 f b 31 0 0 f # 26841 revdifference c a 31 0 0 f b 31 0 0 f # 26842 revdifference c a 31 0 0 f b 31 0 0 0 1 4 6 9 12 13 14 15 18 19 20 22 25 # 26843 revdifference c a 31 0 0 0 2 7 8 13 21 22 23 24 25 26 30 b 31 0 0 0 2 7 8 13 21 22 23 24 25 26 30 # 26844 revdifference c a 31 0 0 0 2 7 8 13 21 22 23 24 25 26 30 b 31 0 0 e # 26845 revdifference c a 31 0 0 1 2 6 9 10 11 13 17 18 23 26 27 28 30 b 31 0 0 1 2 6 9 10 11 13 17 18 23 26 27 28 30 # 26846 revdifference c a 31 0 0 1 2 6 9 10 11 13 17 18 23 26 27 28 30 b 31 0 0 f # 26847 revdifference c a 31 0 0 0 2 4 8 11 13 15 17 18 19 24 25 27 29 30 b 31 0 0 0 2 4 8 11 13 15 17 18 19 24 25 27 29 30 # 26848 revdifference c a 31 0 0 0 2 4 8 11 13 15 17 18 19 24 25 27 29 30 b 31 0 0 2 3 7 10 12 13 15 18 19 20 21 23 24 25 29 # 26849 revdifference c a 31 0 0 e b 31 0 0 e # 26850 revdifference c a 31 0 0 e b 31 0 1 e # 26851 revdifference c a 31 0 0 e b 31 0 0 e # 26852 revdifference c a 31 0 0 e b 31 0 1 f # 26853 revdifference c a 31 0 0 e b 31 0 0 e # 26854 revdifference c a 31 0 0 e b 31 0 1 0 2 3 9 11 12 15 17 22 25 26 27 29 30 # 26855 revdifference c a 31 0 0 f b 31 0 0 f # 26856 revdifference c a 31 0 0 f b 31 0 1 e # 26857 revdifference c a 31 0 0 f b 31 0 0 f # 26858 revdifference c a 31 0 0 f b 31 0 1 f # 26859 revdifference c a 31 0 0 f b 31 0 0 f # 26860 revdifference c a 31 0 0 f b 31 0 1 1 2 7 8 10 12 14 15 16 20 21 22 24 25 27 28 29 30 # 26861 revdifference c a 31 0 0 1 2 5 6 8 14 15 21 23 24 27 b 31 0 0 1 2 5 6 8 14 15 21 23 24 27 # 26862 revdifference c a 31 0 0 1 2 5 6 8 14 15 21 23 24 27 b 31 0 1 e # 26863 revdifference c a 31 0 0 3 4 6 7 8 13 16 17 18 21 22 24 29 30 b 31 0 0 3 4 6 7 8 13 16 17 18 21 22 24 29 30 # 26864 revdifference c a 31 0 0 3 4 6 7 8 13 16 17 18 21 22 24 29 30 b 31 0 1 f # 26865 revdifference c a 31 0 0 0 1 3 4 6 7 10 11 12 13 14 16 17 18 20 21 26 27 28 30 b 31 0 0 0 1 3 4 6 7 10 11 12 13 14 16 17 18 20 21 26 27 28 30 # 26866 revdifference c a 31 0 0 0 1 3 4 6 7 10 11 12 13 14 16 17 18 20 21 26 27 28 30 b 31 0 1 0 3 5 6 7 10 11 12 13 14 17 19 20 21 22 23 26 # 26867 revdifference c a 31 0 0 e b 31 0 0 e # 26868 revdifference c a 31 0 0 e b 31 1 0 e # 26869 revdifference c a 31 0 0 e b 31 0 0 e # 26870 revdifference c a 31 0 0 e b 31 1 0 f # 26871 revdifference c a 31 0 0 e b 31 0 0 e # 26872 revdifference c a 31 0 0 e b 31 1 0 1 2 4 7 8 9 10 11 12 13 14 15 19 22 24 26 28 30 # 26873 revdifference c a 31 0 0 f b 31 0 0 f # 26874 revdifference c a 31 0 0 f b 31 1 0 e # 26875 revdifference c a 31 0 0 f b 31 0 0 f # 26876 revdifference c a 31 0 0 f b 31 1 0 f # 26877 revdifference c a 31 0 0 f b 31 0 0 f # 26878 revdifference c a 31 0 0 f b 31 1 0 1 3 4 5 7 8 10 12 13 15 16 17 19 20 22 # 26879 revdifference c a 31 0 0 0 2 3 5 9 11 12 15 17 18 20 24 25 29 b 31 0 0 0 2 3 5 9 11 12 15 17 18 20 24 25 29 # 26880 revdifference c a 31 0 0 0 2 3 5 9 11 12 15 17 18 20 24 25 29 b 31 1 0 e # 26881 revdifference c a 31 0 0 4 5 6 10 14 15 17 18 19 20 22 23 25 28 30 b 31 0 0 4 5 6 10 14 15 17 18 19 20 22 23 25 28 30 # 26882 revdifference c a 31 0 0 4 5 6 10 14 15 17 18 19 20 22 23 25 28 30 b 31 1 0 f # 26883 revdifference c a 31 0 0 1 4 8 9 12 13 14 15 17 18 19 22 24 25 26 28 b 31 0 0 1 4 8 9 12 13 14 15 17 18 19 22 24 25 26 28 # 26884 revdifference c a 31 0 0 1 4 8 9 12 13 14 15 17 18 19 22 24 25 26 28 b 31 1 0 0 5 6 7 11 14 20 21 24 27 28 29 # 26885 revdifference c a 31 0 0 e b 31 0 0 e # 26886 revdifference c a 31 0 0 e b 31 1 1 e # 26887 revdifference c a 31 0 0 e b 31 0 0 e # 26888 revdifference c a 31 0 0 e b 31 1 1 f # 26889 revdifference c a 31 0 0 e b 31 0 0 e # 26890 revdifference c a 31 0 0 e b 31 1 1 0 2 4 7 8 9 11 13 15 17 19 20 24 26 27 29 # 26891 revdifference c a 31 0 0 f b 31 0 0 f # 26892 revdifference c a 31 0 0 f b 31 1 1 e # 26893 revdifference c a 31 0 0 f b 31 0 0 f # 26894 revdifference c a 31 0 0 f b 31 1 1 f # 26895 revdifference c a 31 0 0 f b 31 0 0 f # 26896 revdifference c a 31 0 0 f b 31 1 1 2 3 9 10 13 14 15 16 17 19 20 22 28 30 # 26897 revdifference c a 31 0 0 1 2 6 7 8 9 10 11 12 14 15 21 25 26 27 28 29 b 31 0 0 1 2 6 7 8 9 10 11 12 14 15 21 25 26 27 28 29 # 26898 revdifference c a 31 0 0 1 2 6 7 8 9 10 11 12 14 15 21 25 26 27 28 29 b 31 1 1 e # 26899 revdifference c a 31 0 0 1 3 4 7 13 14 19 20 22 25 26 29 30 b 31 0 0 1 3 4 7 13 14 19 20 22 25 26 29 30 # 26900 revdifference c a 31 0 0 1 3 4 7 13 14 19 20 22 25 26 29 30 b 31 1 1 f # 26901 revdifference c a 31 0 0 0 1 2 4 6 8 10 11 13 14 15 24 25 30 b 31 0 0 0 1 2 4 6 8 10 11 13 14 15 24 25 30 # 26902 revdifference c a 31 0 0 0 1 2 4 6 8 10 11 13 14 15 24 25 30 b 31 1 1 2 3 4 6 9 16 17 20 21 24 26 28 # 26903 revdifference c a 31 0 1 e b 31 0 1 e # 26904 revdifference c a 31 0 1 e b 31 0 0 e # 26905 revdifference c a 31 0 1 e b 31 0 1 e # 26906 revdifference c a 31 0 1 e b 31 0 0 f # 26907 revdifference c a 31 0 1 e b 31 0 1 e # 26908 revdifference c a 31 0 1 e b 31 0 0 1 3 4 5 6 8 9 10 18 21 22 23 24 26 # 26909 revdifference c a 31 0 1 f b 31 0 1 f # 26910 revdifference c a 31 0 1 f b 31 0 0 e # 26911 revdifference c a 31 0 1 f b 31 0 1 f # 26912 revdifference c a 31 0 1 f b 31 0 0 f # 26913 revdifference c a 31 0 1 f b 31 0 1 f # 26914 revdifference c a 31 0 1 f b 31 0 0 0 1 2 3 4 7 10 11 13 15 18 19 20 21 22 24 28 30 # 26915 revdifference c a 31 0 1 5 6 9 10 13 17 19 20 22 25 27 28 29 b 31 0 1 5 6 9 10 13 17 19 20 22 25 27 28 29 # 26916 revdifference c a 31 0 1 5 6 9 10 13 17 19 20 22 25 27 28 29 b 31 0 0 e # 26917 revdifference c a 31 0 1 2 4 5 7 10 11 12 13 18 20 22 24 25 26 28 29 30 b 31 0 1 2 4 5 7 10 11 12 13 18 20 22 24 25 26 28 29 30 # 26918 revdifference c a 31 0 1 2 4 5 7 10 11 12 13 18 20 22 24 25 26 28 29 30 b 31 0 0 f # 26919 revdifference c a 31 0 1 0 2 4 5 6 7 9 10 12 13 15 17 18 20 21 23 24 26 b 31 0 1 0 2 4 5 6 7 9 10 12 13 15 17 18 20 21 23 24 26 # 26920 revdifference c a 31 0 1 0 2 4 5 6 7 9 10 12 13 15 17 18 20 21 23 24 26 b 31 0 0 1 3 4 7 8 10 11 13 16 18 20 21 22 23 24 26 27 28 # 26921 revdifference c a 31 0 1 e b 31 0 1 e # 26922 revdifference c a 31 0 1 e b 31 0 1 e # 26923 revdifference c a 31 0 1 e b 31 0 1 e # 26924 revdifference c a 31 0 1 e b 31 0 1 f # 26925 revdifference c a 31 0 1 e b 31 0 1 e # 26926 revdifference c a 31 0 1 e b 31 0 1 0 1 3 4 5 9 12 13 14 16 24 25 26 27 28 # 26927 revdifference c a 31 0 1 f b 31 0 1 f # 26928 revdifference c a 31 0 1 f b 31 0 1 e # 26929 revdifference c a 31 0 1 f b 31 0 1 f # 26930 revdifference c a 31 0 1 f b 31 0 1 f # 26931 revdifference c a 31 0 1 f b 31 0 1 f # 26932 revdifference c a 31 0 1 f b 31 0 1 0 2 4 6 8 10 13 15 16 17 18 20 22 25 # 26933 revdifference c a 31 0 1 1 3 4 5 8 9 10 13 14 19 23 24 26 27 28 b 31 0 1 1 3 4 5 8 9 10 13 14 19 23 24 26 27 28 # 26934 revdifference c a 31 0 1 1 3 4 5 8 9 10 13 14 19 23 24 26 27 28 b 31 0 1 e # 26935 revdifference c a 31 0 1 0 2 3 4 12 13 15 17 21 22 23 25 26 28 30 b 31 0 1 0 2 3 4 12 13 15 17 21 22 23 25 26 28 30 # 26936 revdifference c a 31 0 1 0 2 3 4 12 13 15 17 21 22 23 25 26 28 30 b 31 0 1 f # 26937 revdifference c a 31 0 1 0 1 2 4 6 7 9 11 12 15 16 17 18 19 21 22 25 27 29 30 b 31 0 1 0 1 2 4 6 7 9 11 12 15 16 17 18 19 21 22 25 27 29 30 # 26938 revdifference c a 31 0 1 0 1 2 4 6 7 9 11 12 15 16 17 18 19 21 22 25 27 29 30 b 31 0 1 3 5 13 15 18 20 21 23 24 25 27 29 # 26939 revdifference c a 31 0 1 e b 31 0 1 e # 26940 revdifference c a 31 0 1 e b 31 1 0 e # 26941 revdifference c a 31 0 1 e b 31 0 1 e # 26942 revdifference c a 31 0 1 e b 31 1 0 f # 26943 revdifference c a 31 0 1 e b 31 0 1 e # 26944 revdifference c a 31 0 1 e b 31 1 0 0 2 4 5 6 7 8 12 14 15 16 18 20 23 28 30 # 26945 revdifference c a 31 0 1 f b 31 0 1 f # 26946 revdifference c a 31 0 1 f b 31 1 0 e # 26947 revdifference c a 31 0 1 f b 31 0 1 f # 26948 revdifference c a 31 0 1 f b 31 1 0 f # 26949 revdifference c a 31 0 1 f b 31 0 1 f # 26950 revdifference c a 31 0 1 f b 31 1 0 0 1 2 9 10 11 16 17 18 20 22 23 24 26 30 # 26951 revdifference c a 31 0 1 0 1 2 7 8 10 12 14 15 17 18 27 28 30 b 31 0 1 0 1 2 7 8 10 12 14 15 17 18 27 28 30 # 26952 revdifference c a 31 0 1 0 1 2 7 8 10 12 14 15 17 18 27 28 30 b 31 1 0 e # 26953 revdifference c a 31 0 1 0 3 4 5 7 9 10 11 14 17 19 21 25 26 30 b 31 0 1 0 3 4 5 7 9 10 11 14 17 19 21 25 26 30 # 26954 revdifference c a 31 0 1 0 3 4 5 7 9 10 11 14 17 19 21 25 26 30 b 31 1 0 f # 26955 revdifference c a 31 0 1 1 4 6 7 8 10 11 12 13 14 18 20 21 22 26 27 28 30 b 31 0 1 1 4 6 7 8 10 11 12 13 14 18 20 21 22 26 27 28 30 # 26956 revdifference c a 31 0 1 1 4 6 7 8 10 11 12 13 14 18 20 21 22 26 27 28 30 b 31 1 0 1 4 9 11 12 14 16 20 22 24 # 26957 revdifference c a 31 0 1 e b 31 0 1 e # 26958 revdifference c a 31 0 1 e b 31 1 1 e # 26959 revdifference c a 31 0 1 e b 31 0 1 e # 26960 revdifference c a 31 0 1 e b 31 1 1 f # 26961 revdifference c a 31 0 1 e b 31 0 1 e # 26962 revdifference c a 31 0 1 e b 31 1 1 0 5 7 10 12 14 16 21 25 26 27 # 26963 revdifference c a 31 0 1 f b 31 0 1 f # 26964 revdifference c a 31 0 1 f b 31 1 1 e # 26965 revdifference c a 31 0 1 f b 31 0 1 f # 26966 revdifference c a 31 0 1 f b 31 1 1 f # 26967 revdifference c a 31 0 1 f b 31 0 1 f # 26968 revdifference c a 31 0 1 f b 31 1 1 0 1 2 4 5 6 7 8 9 10 12 13 16 18 20 24 26 27 # 26969 revdifference c a 31 0 1 1 2 3 4 5 7 8 11 15 17 19 21 23 24 26 27 28 29 b 31 0 1 1 2 3 4 5 7 8 11 15 17 19 21 23 24 26 27 28 29 # 26970 revdifference c a 31 0 1 1 2 3 4 5 7 8 11 15 17 19 21 23 24 26 27 28 29 b 31 1 1 e # 26971 revdifference c a 31 0 1 1 4 5 6 7 8 11 12 13 14 17 18 19 21 23 24 25 26 27 28 29 b 31 0 1 1 4 5 6 7 8 11 12 13 14 17 18 19 21 23 24 25 26 27 28 29 # 26972 revdifference c a 31 0 1 1 4 5 6 7 8 11 12 13 14 17 18 19 21 23 24 25 26 27 28 29 b 31 1 1 f # 26973 revdifference c a 31 0 1 1 4 10 11 14 15 16 17 18 19 20 21 22 23 24 25 26 27 30 b 31 0 1 1 4 10 11 14 15 16 17 18 19 20 21 22 23 24 25 26 27 30 # 26974 revdifference c a 31 0 1 1 4 10 11 14 15 16 17 18 19 20 21 22 23 24 25 26 27 30 b 31 1 1 0 4 5 9 13 15 17 18 20 23 25 26 27 30 # 26975 revdifference c a 31 1 0 e b 31 1 0 e # 26976 revdifference c a 31 1 0 e b 31 0 0 e # 26977 revdifference c a 31 1 0 e b 31 1 0 e # 26978 revdifference c a 31 1 0 e b 31 0 0 f # 26979 revdifference c a 31 1 0 e b 31 1 0 e # 26980 revdifference c a 31 1 0 e b 31 0 0 6 7 8 9 11 13 18 19 22 24 25 26 27 30 # 26981 revdifference c a 31 1 0 f b 31 1 0 f # 26982 revdifference c a 31 1 0 f b 31 0 0 e # 26983 revdifference c a 31 1 0 f b 31 1 0 f # 26984 revdifference c a 31 1 0 f b 31 0 0 f # 26985 revdifference c a 31 1 0 f b 31 1 0 f # 26986 revdifference c a 31 1 0 f b 31 0 0 0 1 5 14 15 16 17 18 19 22 24 25 27 29 # 26987 revdifference c a 31 1 0 0 2 4 7 8 9 13 15 16 18 19 21 23 24 27 b 31 1 0 0 2 4 7 8 9 13 15 16 18 19 21 23 24 27 # 26988 revdifference c a 31 1 0 0 2 4 7 8 9 13 15 16 18 19 21 23 24 27 b 31 0 0 e # 26989 revdifference c a 31 1 0 1 2 3 9 10 11 13 16 18 19 20 21 23 24 27 28 29 30 b 31 1 0 1 2 3 9 10 11 13 16 18 19 20 21 23 24 27 28 29 30 # 26990 revdifference c a 31 1 0 1 2 3 9 10 11 13 16 18 19 20 21 23 24 27 28 29 30 b 31 0 0 f # 26991 revdifference c a 31 1 0 2 4 8 11 12 15 17 18 20 21 23 24 25 27 28 29 30 b 31 1 0 2 4 8 11 12 15 17 18 20 21 23 24 25 27 28 29 30 # 26992 revdifference c a 31 1 0 2 4 8 11 12 15 17 18 20 21 23 24 25 27 28 29 30 b 31 0 0 2 3 7 9 13 19 20 23 26 29 30 # 26993 revdifference c a 31 1 0 e b 31 1 0 e # 26994 revdifference c a 31 1 0 e b 31 0 1 e # 26995 revdifference c a 31 1 0 e b 31 1 0 e # 26996 revdifference c a 31 1 0 e b 31 0 1 f # 26997 revdifference c a 31 1 0 e b 31 1 0 e # 26998 revdifference c a 31 1 0 e b 31 0 1 0 2 4 5 6 7 12 14 16 18 19 22 23 24 26 29 # 26999 revdifference c a 31 1 0 f b 31 1 0 f # 27000 revdifference c a 31 1 0 f b 31 0 1 e # 27001 revdifference c a 31 1 0 f b 31 1 0 f # 27002 revdifference c a 31 1 0 f b 31 0 1 f # 27003 revdifference c a 31 1 0 f b 31 1 0 f # 27004 revdifference c a 31 1 0 f b 31 0 1 2 3 5 9 10 11 12 14 17 21 24 28 # 27005 revdifference c a 31 1 0 1 3 7 8 10 15 16 19 23 25 26 27 28 b 31 1 0 1 3 7 8 10 15 16 19 23 25 26 27 28 # 27006 revdifference c a 31 1 0 1 3 7 8 10 15 16 19 23 25 26 27 28 b 31 0 1 e # 27007 revdifference c a 31 1 0 0 1 2 3 7 8 9 10 13 14 16 17 18 19 22 24 25 27 30 b 31 1 0 0 1 2 3 7 8 9 10 13 14 16 17 18 19 22 24 25 27 30 # 27008 revdifference c a 31 1 0 0 1 2 3 7 8 9 10 13 14 16 17 18 19 22 24 25 27 30 b 31 0 1 f # 27009 revdifference c a 31 1 0 2 4 5 6 7 8 9 15 18 19 20 22 23 25 29 b 31 1 0 2 4 5 6 7 8 9 15 18 19 20 22 23 25 29 # 27010 revdifference c a 31 1 0 2 4 5 6 7 8 9 15 18 19 20 22 23 25 29 b 31 0 1 0 2 4 5 7 8 12 13 14 15 16 17 18 19 20 22 23 24 25 26 27 28 29 # 27011 revdifference c a 31 1 0 e b 31 1 0 e # 27012 revdifference c a 31 1 0 e b 31 1 0 e # 27013 revdifference c a 31 1 0 e b 31 1 0 e # 27014 revdifference c a 31 1 0 e b 31 1 0 f # 27015 revdifference c a 31 1 0 e b 31 1 0 e # 27016 revdifference c a 31 1 0 e b 31 1 0 0 1 3 4 7 10 11 13 15 16 18 19 21 22 23 24 26 27 29 30 # 27017 revdifference c a 31 1 0 f b 31 1 0 f # 27018 revdifference c a 31 1 0 f b 31 1 0 e # 27019 revdifference c a 31 1 0 f b 31 1 0 f # 27020 revdifference c a 31 1 0 f b 31 1 0 f # 27021 revdifference c a 31 1 0 f b 31 1 0 f # 27022 revdifference c a 31 1 0 f b 31 1 0 1 4 8 9 14 16 18 19 20 21 23 24 25 26 # 27023 revdifference c a 31 1 0 0 2 3 4 8 10 12 15 17 18 19 20 21 24 28 29 30 b 31 1 0 0 2 3 4 8 10 12 15 17 18 19 20 21 24 28 29 30 # 27024 revdifference c a 31 1 0 0 2 3 4 8 10 12 15 17 18 19 20 21 24 28 29 30 b 31 1 0 e # 27025 revdifference c a 31 1 0 0 1 3 4 5 8 9 13 14 16 17 19 23 25 28 29 b 31 1 0 0 1 3 4 5 8 9 13 14 16 17 19 23 25 28 29 # 27026 revdifference c a 31 1 0 0 1 3 4 5 8 9 13 14 16 17 19 23 25 28 29 b 31 1 0 f # 27027 revdifference c a 31 1 0 0 1 2 4 6 10 12 13 16 17 18 19 24 26 29 b 31 1 0 0 1 2 4 6 10 12 13 16 17 18 19 24 26 29 # 27028 revdifference c a 31 1 0 0 1 2 4 6 10 12 13 16 17 18 19 24 26 29 b 31 1 0 0 1 4 5 8 9 12 13 14 16 17 21 22 23 25 27 # 27029 revdifference c a 31 1 0 e b 31 1 0 e # 27030 revdifference c a 31 1 0 e b 31 1 1 e # 27031 revdifference c a 31 1 0 e b 31 1 0 e # 27032 revdifference c a 31 1 0 e b 31 1 1 f # 27033 revdifference c a 31 1 0 e b 31 1 0 e # 27034 revdifference c a 31 1 0 e b 31 1 1 1 3 4 6 7 9 11 15 16 18 21 26 27 29 # 27035 revdifference c a 31 1 0 f b 31 1 0 f # 27036 revdifference c a 31 1 0 f b 31 1 1 e # 27037 revdifference c a 31 1 0 f b 31 1 0 f # 27038 revdifference c a 31 1 0 f b 31 1 1 f # 27039 revdifference c a 31 1 0 f b 31 1 0 f # 27040 revdifference c a 31 1 0 f b 31 1 1 0 1 2 4 5 7 10 11 12 17 19 22 28 30 # 27041 revdifference c a 31 1 0 3 4 7 8 9 10 11 13 15 17 19 21 22 23 26 27 28 b 31 1 0 3 4 7 8 9 10 11 13 15 17 19 21 22 23 26 27 28 # 27042 revdifference c a 31 1 0 3 4 7 8 9 10 11 13 15 17 19 21 22 23 26 27 28 b 31 1 1 e # 27043 revdifference c a 31 1 0 2 6 9 10 11 13 18 24 30 b 31 1 0 2 6 9 10 11 13 18 24 30 # 27044 revdifference c a 31 1 0 2 6 9 10 11 13 18 24 30 b 31 1 1 f # 27045 revdifference c a 31 1 0 0 1 2 7 8 10 11 13 14 15 16 20 21 23 24 25 29 b 31 1 0 0 1 2 7 8 10 11 13 14 15 16 20 21 23 24 25 29 # 27046 revdifference c a 31 1 0 0 1 2 7 8 10 11 13 14 15 16 20 21 23 24 25 29 b 31 1 1 1 3 5 7 9 10 15 19 28 30 # 27047 revdifference c a 31 1 1 e b 31 1 1 e # 27048 revdifference c a 31 1 1 e b 31 0 0 e # 27049 revdifference c a 31 1 1 e b 31 1 1 e # 27050 revdifference c a 31 1 1 e b 31 0 0 f # 27051 revdifference c a 31 1 1 e b 31 1 1 e # 27052 revdifference c a 31 1 1 e b 31 0 0 1 2 5 6 10 12 14 15 16 19 21 22 23 24 28 # 27053 revdifference c a 31 1 1 f b 31 1 1 f # 27054 revdifference c a 31 1 1 f b 31 0 0 e # 27055 revdifference c a 31 1 1 f b 31 1 1 f # 27056 revdifference c a 31 1 1 f b 31 0 0 f # 27057 revdifference c a 31 1 1 f b 31 1 1 f # 27058 revdifference c a 31 1 1 f b 31 0 0 4 5 7 9 10 11 17 23 27 29 30 # 27059 revdifference c a 31 1 1 0 4 7 10 12 14 15 16 20 21 23 24 25 26 27 29 30 b 31 1 1 0 4 7 10 12 14 15 16 20 21 23 24 25 26 27 29 30 # 27060 revdifference c a 31 1 1 0 4 7 10 12 14 15 16 20 21 23 24 25 26 27 29 30 b 31 0 0 e # 27061 revdifference c a 31 1 1 1 2 4 6 7 8 10 11 12 14 15 19 20 23 26 27 28 30 b 31 1 1 1 2 4 6 7 8 10 11 12 14 15 19 20 23 26 27 28 30 # 27062 revdifference c a 31 1 1 1 2 4 6 7 8 10 11 12 14 15 19 20 23 26 27 28 30 b 31 0 0 f # 27063 revdifference c a 31 1 1 0 2 5 8 9 11 12 13 15 17 20 24 25 27 29 b 31 1 1 0 2 5 8 9 11 12 13 15 17 20 24 25 27 29 # 27064 revdifference c a 31 1 1 0 2 5 8 9 11 12 13 15 17 20 24 25 27 29 b 31 0 0 3 4 8 10 11 12 13 15 17 18 20 22 25 27 # 27065 revdifference c a 31 1 1 e b 31 1 1 e # 27066 revdifference c a 31 1 1 e b 31 0 1 e # 27067 revdifference c a 31 1 1 e b 31 1 1 e # 27068 revdifference c a 31 1 1 e b 31 0 1 f # 27069 revdifference c a 31 1 1 e b 31 1 1 e # 27070 revdifference c a 31 1 1 e b 31 0 1 0 2 3 5 8 11 13 14 17 19 20 21 22 23 24 27 28 29 # 27071 revdifference c a 31 1 1 f b 31 1 1 f # 27072 revdifference c a 31 1 1 f b 31 0 1 e # 27073 revdifference c a 31 1 1 f b 31 1 1 f # 27074 revdifference c a 31 1 1 f b 31 0 1 f # 27075 revdifference c a 31 1 1 f b 31 1 1 f # 27076 revdifference c a 31 1 1 f b 31 0 1 7 9 11 14 15 17 18 20 21 22 23 24 27 29 # 27077 revdifference c a 31 1 1 0 3 4 5 7 8 10 11 12 14 15 16 17 18 19 20 22 26 27 28 29 b 31 1 1 0 3 4 5 7 8 10 11 12 14 15 16 17 18 19 20 22 26 27 28 29 # 27078 revdifference c a 31 1 1 0 3 4 5 7 8 10 11 12 14 15 16 17 18 19 20 22 26 27 28 29 b 31 0 1 e # 27079 revdifference c a 31 1 1 1 2 4 6 13 18 23 24 25 27 28 30 b 31 1 1 1 2 4 6 13 18 23 24 25 27 28 30 # 27080 revdifference c a 31 1 1 1 2 4 6 13 18 23 24 25 27 28 30 b 31 0 1 f # 27081 revdifference c a 31 1 1 2 3 4 6 8 10 12 13 14 15 18 19 26 27 28 29 30 b 31 1 1 2 3 4 6 8 10 12 13 14 15 18 19 26 27 28 29 30 # 27082 revdifference c a 31 1 1 2 3 4 6 8 10 12 13 14 15 18 19 26 27 28 29 30 b 31 0 1 2 3 5 6 7 8 9 10 11 12 14 15 16 17 18 22 23 25 28 # 27083 revdifference c a 31 1 1 e b 31 1 1 e # 27084 revdifference c a 31 1 1 e b 31 1 0 e # 27085 revdifference c a 31 1 1 e b 31 1 1 e # 27086 revdifference c a 31 1 1 e b 31 1 0 f # 27087 revdifference c a 31 1 1 e b 31 1 1 e # 27088 revdifference c a 31 1 1 e b 31 1 0 1 4 6 7 8 9 11 12 13 14 16 17 22 23 24 25 28 29 30 # 27089 revdifference c a 31 1 1 f b 31 1 1 f # 27090 revdifference c a 31 1 1 f b 31 1 0 e # 27091 revdifference c a 31 1 1 f b 31 1 1 f # 27092 revdifference c a 31 1 1 f b 31 1 0 f # 27093 revdifference c a 31 1 1 f b 31 1 1 f # 27094 revdifference c a 31 1 1 f b 31 1 0 1 4 10 13 15 16 17 18 19 22 25 26 27 28 29 30 # 27095 revdifference c a 31 1 1 3 5 7 9 10 11 12 13 14 15 17 18 24 27 29 30 b 31 1 1 3 5 7 9 10 11 12 13 14 15 17 18 24 27 29 30 # 27096 revdifference c a 31 1 1 3 5 7 9 10 11 12 13 14 15 17 18 24 27 29 30 b 31 1 0 e # 27097 revdifference c a 31 1 1 0 2 4 5 6 8 11 13 14 17 18 19 20 24 25 26 27 29 b 31 1 1 0 2 4 5 6 8 11 13 14 17 18 19 20 24 25 26 27 29 # 27098 revdifference c a 31 1 1 0 2 4 5 6 8 11 13 14 17 18 19 20 24 25 26 27 29 b 31 1 0 f # 27099 revdifference c a 31 1 1 3 4 9 10 11 13 14 15 18 21 22 23 24 25 26 27 b 31 1 1 3 4 9 10 11 13 14 15 18 21 22 23 24 25 26 27 # 27100 revdifference c a 31 1 1 3 4 9 10 11 13 14 15 18 21 22 23 24 25 26 27 b 31 1 0 1 2 4 5 6 9 10 13 14 15 16 18 20 21 22 23 24 25 26 28 30 # 27101 revdifference c a 31 1 1 e b 31 1 1 e # 27102 revdifference c a 31 1 1 e b 31 1 1 e # 27103 revdifference c a 31 1 1 e b 31 1 1 e # 27104 revdifference c a 31 1 1 e b 31 1 1 f # 27105 revdifference c a 31 1 1 e b 31 1 1 e # 27106 revdifference c a 31 1 1 e b 31 1 1 1 3 4 7 8 10 11 13 14 16 19 21 22 24 25 28 30 # 27107 revdifference c a 31 1 1 f b 31 1 1 f # 27108 revdifference c a 31 1 1 f b 31 1 1 e # 27109 revdifference c a 31 1 1 f b 31 1 1 f # 27110 revdifference c a 31 1 1 f b 31 1 1 f # 27111 revdifference c a 31 1 1 f b 31 1 1 f # 27112 revdifference c a 31 1 1 f b 31 1 1 3 5 8 9 11 13 14 15 16 18 19 20 21 22 24 27 29 30 # 27113 revdifference c a 31 1 1 4 6 7 9 11 12 14 15 16 17 18 19 20 21 23 25 b 31 1 1 4 6 7 9 11 12 14 15 16 17 18 19 20 21 23 25 # 27114 revdifference c a 31 1 1 4 6 7 9 11 12 14 15 16 17 18 19 20 21 23 25 b 31 1 1 e # 27115 revdifference c a 31 1 1 0 1 2 4 7 8 9 10 11 12 15 19 24 26 28 30 b 31 1 1 0 1 2 4 7 8 9 10 11 12 15 19 24 26 28 30 # 27116 revdifference c a 31 1 1 0 1 2 4 7 8 9 10 11 12 15 19 24 26 28 30 b 31 1 1 f # 27117 revdifference c a 31 1 1 2 3 4 6 7 8 9 10 11 12 13 15 17 20 22 26 28 b 31 1 1 2 3 4 6 7 8 9 10 11 12 13 15 17 20 22 26 28 # 27118 revdifference c a 31 1 1 2 3 4 6 7 8 9 10 11 12 13 15 17 20 22 26 28 b 31 1 1 2 10 11 13 15 17 20 21 24 30 # 27119 revdifference c a 32 0 0 e b 32 0 0 e # 27120 revdifference c a 32 0 0 e b 32 0 0 e # 27121 revdifference c a 32 0 0 e b 32 0 0 e # 27122 revdifference c a 32 0 0 e b 32 0 0 f # 27123 revdifference c a 32 0 0 e b 32 0 0 e # 27124 revdifference c a 32 0 0 e b 32 0 0 0 1 2 5 7 9 10 12 13 15 16 21 22 23 24 26 28 31 # 27125 revdifference c a 32 0 0 f b 32 0 0 f # 27126 revdifference c a 32 0 0 f b 32 0 0 e # 27127 revdifference c a 32 0 0 f b 32 0 0 f # 27128 revdifference c a 32 0 0 f b 32 0 0 f # 27129 revdifference c a 32 0 0 f b 32 0 0 f # 27130 revdifference c a 32 0 0 f b 32 0 0 1 2 3 4 6 13 18 19 22 24 25 26 31 # 27131 revdifference c a 32 0 0 2 4 7 8 9 12 16 20 22 24 25 26 30 b 32 0 0 2 4 7 8 9 12 16 20 22 24 25 26 30 # 27132 revdifference c a 32 0 0 2 4 7 8 9 12 16 20 22 24 25 26 30 b 32 0 0 e # 27133 revdifference c a 32 0 0 1 2 12 13 14 15 19 26 27 28 29 b 32 0 0 1 2 12 13 14 15 19 26 27 28 29 # 27134 revdifference c a 32 0 0 1 2 12 13 14 15 19 26 27 28 29 b 32 0 0 f # 27135 revdifference c a 32 0 0 1 3 5 6 10 15 16 17 18 22 23 24 29 30 31 b 32 0 0 1 3 5 6 10 15 16 17 18 22 23 24 29 30 31 # 27136 revdifference c a 32 0 0 1 3 5 6 10 15 16 17 18 22 23 24 29 30 31 b 32 0 0 0 3 4 8 12 13 17 18 19 23 24 25 28 30 # 27137 revdifference c a 32 0 0 e b 32 0 0 e # 27138 revdifference c a 32 0 0 e b 32 0 1 e # 27139 revdifference c a 32 0 0 e b 32 0 0 e # 27140 revdifference c a 32 0 0 e b 32 0 1 f # 27141 revdifference c a 32 0 0 e b 32 0 0 e # 27142 revdifference c a 32 0 0 e b 32 0 1 4 5 6 7 11 12 13 16 19 20 21 22 23 24 26 28 29 30 # 27143 revdifference c a 32 0 0 f b 32 0 0 f # 27144 revdifference c a 32 0 0 f b 32 0 1 e # 27145 revdifference c a 32 0 0 f b 32 0 0 f # 27146 revdifference c a 32 0 0 f b 32 0 1 f # 27147 revdifference c a 32 0 0 f b 32 0 0 f # 27148 revdifference c a 32 0 0 f b 32 0 1 2 7 8 9 10 11 12 22 23 24 25 27 28 30 # 27149 revdifference c a 32 0 0 0 1 2 7 9 10 13 14 15 18 19 20 21 22 23 24 27 28 31 b 32 0 0 0 1 2 7 9 10 13 14 15 18 19 20 21 22 23 24 27 28 31 # 27150 revdifference c a 32 0 0 0 1 2 7 9 10 13 14 15 18 19 20 21 22 23 24 27 28 31 b 32 0 1 e # 27151 revdifference c a 32 0 0 4 10 11 15 16 25 29 30 b 32 0 0 4 10 11 15 16 25 29 30 # 27152 revdifference c a 32 0 0 4 10 11 15 16 25 29 30 b 32 0 1 f # 27153 revdifference c a 32 0 0 2 4 6 8 9 10 11 14 15 16 21 22 23 27 31 b 32 0 0 2 4 6 8 9 10 11 14 15 16 21 22 23 27 31 # 27154 revdifference c a 32 0 0 2 4 6 8 9 10 11 14 15 16 21 22 23 27 31 b 32 0 1 4 12 15 17 19 20 22 24 26 31 # 27155 revdifference c a 32 0 0 e b 32 0 0 e # 27156 revdifference c a 32 0 0 e b 32 1 0 e # 27157 revdifference c a 32 0 0 e b 32 0 0 e # 27158 revdifference c a 32 0 0 e b 32 1 0 f # 27159 revdifference c a 32 0 0 e b 32 0 0 e # 27160 revdifference c a 32 0 0 e b 32 1 0 1 5 6 7 13 15 16 17 18 21 22 25 26 27 28 30 # 27161 revdifference c a 32 0 0 f b 32 0 0 f # 27162 revdifference c a 32 0 0 f b 32 1 0 e # 27163 revdifference c a 32 0 0 f b 32 0 0 f # 27164 revdifference c a 32 0 0 f b 32 1 0 f # 27165 revdifference c a 32 0 0 f b 32 0 0 f # 27166 revdifference c a 32 0 0 f b 32 1 0 1 2 3 4 7 8 9 18 22 28 29 30 31 # 27167 revdifference c a 32 0 0 0 2 3 4 6 7 8 9 10 14 15 19 20 21 b 32 0 0 0 2 3 4 6 7 8 9 10 14 15 19 20 21 # 27168 revdifference c a 32 0 0 0 2 3 4 6 7 8 9 10 14 15 19 20 21 b 32 1 0 e # 27169 revdifference c a 32 0 0 0 1 3 5 8 10 12 16 18 19 23 24 25 28 30 31 b 32 0 0 0 1 3 5 8 10 12 16 18 19 23 24 25 28 30 31 # 27170 revdifference c a 32 0 0 0 1 3 5 8 10 12 16 18 19 23 24 25 28 30 31 b 32 1 0 f # 27171 revdifference c a 32 0 0 1 3 4 5 6 7 9 13 19 20 22 25 26 30 31 b 32 0 0 1 3 4 5 6 7 9 13 19 20 22 25 26 30 31 # 27172 revdifference c a 32 0 0 1 3 4 5 6 7 9 13 19 20 22 25 26 30 31 b 32 1 0 2 5 7 9 11 12 13 14 15 18 19 20 23 27 28 30 # 27173 revdifference c a 32 0 0 e b 32 0 0 e # 27174 revdifference c a 32 0 0 e b 32 1 1 e # 27175 revdifference c a 32 0 0 e b 32 0 0 e # 27176 revdifference c a 32 0 0 e b 32 1 1 f # 27177 revdifference c a 32 0 0 e b 32 0 0 e # 27178 revdifference c a 32 0 0 e b 32 1 1 0 1 2 7 10 11 13 14 16 17 19 21 22 23 25 26 27 29 31 # 27179 revdifference c a 32 0 0 f b 32 0 0 f # 27180 revdifference c a 32 0 0 f b 32 1 1 e # 27181 revdifference c a 32 0 0 f b 32 0 0 f # 27182 revdifference c a 32 0 0 f b 32 1 1 f # 27183 revdifference c a 32 0 0 f b 32 0 0 f # 27184 revdifference c a 32 0 0 f b 32 1 1 1 3 6 8 9 14 21 24 25 28 29 # 27185 revdifference c a 32 0 0 0 3 4 7 8 9 13 14 15 22 29 31 b 32 0 0 0 3 4 7 8 9 13 14 15 22 29 31 # 27186 revdifference c a 32 0 0 0 3 4 7 8 9 13 14 15 22 29 31 b 32 1 1 e # 27187 revdifference c a 32 0 0 1 2 4 7 11 14 15 16 17 19 23 24 25 27 29 30 31 b 32 0 0 1 2 4 7 11 14 15 16 17 19 23 24 25 27 29 30 31 # 27188 revdifference c a 32 0 0 1 2 4 7 11 14 15 16 17 19 23 24 25 27 29 30 31 b 32 1 1 f # 27189 revdifference c a 32 0 0 1 2 7 8 9 10 13 14 16 27 31 b 32 0 0 1 2 7 8 9 10 13 14 16 27 31 # 27190 revdifference c a 32 0 0 1 2 7 8 9 10 13 14 16 27 31 b 32 1 1 3 4 5 6 8 9 10 13 16 17 21 22 25 29 # 27191 revdifference c a 32 0 1 e b 32 0 1 e # 27192 revdifference c a 32 0 1 e b 32 0 0 e # 27193 revdifference c a 32 0 1 e b 32 0 1 e # 27194 revdifference c a 32 0 1 e b 32 0 0 f # 27195 revdifference c a 32 0 1 e b 32 0 1 e # 27196 revdifference c a 32 0 1 e b 32 0 0 3 5 7 8 12 13 15 17 19 20 23 29 30 # 27197 revdifference c a 32 0 1 f b 32 0 1 f # 27198 revdifference c a 32 0 1 f b 32 0 0 e # 27199 revdifference c a 32 0 1 f b 32 0 1 f # 27200 revdifference c a 32 0 1 f b 32 0 0 f # 27201 revdifference c a 32 0 1 f b 32 0 1 f # 27202 revdifference c a 32 0 1 f b 32 0 0 5 7 9 13 15 16 17 18 20 21 25 26 27 28 29 31 # 27203 revdifference c a 32 0 1 0 1 4 5 7 8 15 17 20 21 24 27 28 30 31 b 32 0 1 0 1 4 5 7 8 15 17 20 21 24 27 28 30 31 # 27204 revdifference c a 32 0 1 0 1 4 5 7 8 15 17 20 21 24 27 28 30 31 b 32 0 0 e # 27205 revdifference c a 32 0 1 3 6 7 8 12 15 17 20 21 22 23 24 27 28 30 31 b 32 0 1 3 6 7 8 12 15 17 20 21 22 23 24 27 28 30 31 # 27206 revdifference c a 32 0 1 3 6 7 8 12 15 17 20 21 22 23 24 27 28 30 31 b 32 0 0 f # 27207 revdifference c a 32 0 1 2 3 4 5 6 7 9 10 11 14 15 16 19 20 23 24 25 26 29 31 b 32 0 1 2 3 4 5 6 7 9 10 11 14 15 16 19 20 23 24 25 26 29 31 # 27208 revdifference c a 32 0 1 2 3 4 5 6 7 9 10 11 14 15 16 19 20 23 24 25 26 29 31 b 32 0 0 3 6 7 9 10 11 12 13 14 15 16 18 19 20 22 25 26 28 # 27209 revdifference c a 32 0 1 e b 32 0 1 e # 27210 revdifference c a 32 0 1 e b 32 0 1 e # 27211 revdifference c a 32 0 1 e b 32 0 1 e # 27212 revdifference c a 32 0 1 e b 32 0 1 f # 27213 revdifference c a 32 0 1 e b 32 0 1 e # 27214 revdifference c a 32 0 1 e b 32 0 1 0 1 4 5 8 9 10 11 12 13 14 15 16 18 19 20 21 23 24 27 28 29 30 31 # 27215 revdifference c a 32 0 1 f b 32 0 1 f # 27216 revdifference c a 32 0 1 f b 32 0 1 e # 27217 revdifference c a 32 0 1 f b 32 0 1 f # 27218 revdifference c a 32 0 1 f b 32 0 1 f # 27219 revdifference c a 32 0 1 f b 32 0 1 f # 27220 revdifference c a 32 0 1 f b 32 0 1 6 7 9 10 14 16 17 19 22 24 26 28 29 # 27221 revdifference c a 32 0 1 2 4 5 10 11 12 13 15 17 19 23 29 30 b 32 0 1 2 4 5 10 11 12 13 15 17 19 23 29 30 # 27222 revdifference c a 32 0 1 2 4 5 10 11 12 13 15 17 19 23 29 30 b 32 0 1 e # 27223 revdifference c a 32 0 1 1 2 4 6 8 13 15 17 18 19 20 21 22 26 28 29 30 b 32 0 1 1 2 4 6 8 13 15 17 18 19 20 21 22 26 28 29 30 # 27224 revdifference c a 32 0 1 1 2 4 6 8 13 15 17 18 19 20 21 22 26 28 29 30 b 32 0 1 f # 27225 revdifference c a 32 0 1 0 1 3 6 8 10 11 12 13 14 16 19 21 23 b 32 0 1 0 1 3 6 8 10 11 12 13 14 16 19 21 23 # 27226 revdifference c a 32 0 1 0 1 3 6 8 10 11 12 13 14 16 19 21 23 b 32 0 1 1 2 3 5 6 7 9 10 12 13 14 17 19 20 24 25 27 28 29 # 27227 revdifference c a 32 0 1 e b 32 0 1 e # 27228 revdifference c a 32 0 1 e b 32 1 0 e # 27229 revdifference c a 32 0 1 e b 32 0 1 e # 27230 revdifference c a 32 0 1 e b 32 1 0 f # 27231 revdifference c a 32 0 1 e b 32 0 1 e # 27232 revdifference c a 32 0 1 e b 32 1 0 0 2 5 8 10 12 14 18 20 22 29 # 27233 revdifference c a 32 0 1 f b 32 0 1 f # 27234 revdifference c a 32 0 1 f b 32 1 0 e # 27235 revdifference c a 32 0 1 f b 32 0 1 f # 27236 revdifference c a 32 0 1 f b 32 1 0 f # 27237 revdifference c a 32 0 1 f b 32 0 1 f # 27238 revdifference c a 32 0 1 f b 32 1 0 0 5 6 8 10 11 12 13 16 18 19 20 21 23 24 25 29 # 27239 revdifference c a 32 0 1 1 2 3 4 6 7 8 9 10 11 13 19 22 27 28 29 b 32 0 1 1 2 3 4 6 7 8 9 10 11 13 19 22 27 28 29 # 27240 revdifference c a 32 0 1 1 2 3 4 6 7 8 9 10 11 13 19 22 27 28 29 b 32 1 0 e # 27241 revdifference c a 32 0 1 0 1 2 3 5 8 13 14 17 19 22 23 24 27 29 30 b 32 0 1 0 1 2 3 5 8 13 14 17 19 22 23 24 27 29 30 # 27242 revdifference c a 32 0 1 0 1 2 3 5 8 13 14 17 19 22 23 24 27 29 30 b 32 1 0 f # 27243 revdifference c a 32 0 1 0 1 4 5 6 7 8 10 13 14 15 16 20 22 24 30 31 b 32 0 1 0 1 4 5 6 7 8 10 13 14 15 16 20 22 24 30 31 # 27244 revdifference c a 32 0 1 0 1 4 5 6 7 8 10 13 14 15 16 20 22 24 30 31 b 32 1 0 4 5 6 7 9 12 13 17 18 19 21 25 26 28 29 # 27245 revdifference c a 32 0 1 e b 32 0 1 e # 27246 revdifference c a 32 0 1 e b 32 1 1 e # 27247 revdifference c a 32 0 1 e b 32 0 1 e # 27248 revdifference c a 32 0 1 e b 32 1 1 f # 27249 revdifference c a 32 0 1 e b 32 0 1 e # 27250 revdifference c a 32 0 1 e b 32 1 1 0 1 3 4 6 7 13 14 19 21 22 24 25 26 27 30 # 27251 revdifference c a 32 0 1 f b 32 0 1 f # 27252 revdifference c a 32 0 1 f b 32 1 1 e # 27253 revdifference c a 32 0 1 f b 32 0 1 f # 27254 revdifference c a 32 0 1 f b 32 1 1 f # 27255 revdifference c a 32 0 1 f b 32 0 1 f # 27256 revdifference c a 32 0 1 f b 32 1 1 3 4 6 8 10 11 15 16 17 20 22 23 25 27 # 27257 revdifference c a 32 0 1 0 1 3 7 8 10 12 14 15 18 20 21 25 26 27 b 32 0 1 0 1 3 7 8 10 12 14 15 18 20 21 25 26 27 # 27258 revdifference c a 32 0 1 0 1 3 7 8 10 12 14 15 18 20 21 25 26 27 b 32 1 1 e # 27259 revdifference c a 32 0 1 0 1 5 8 11 12 16 18 19 21 23 24 27 29 b 32 0 1 0 1 5 8 11 12 16 18 19 21 23 24 27 29 # 27260 revdifference c a 32 0 1 0 1 5 8 11 12 16 18 19 21 23 24 27 29 b 32 1 1 f # 27261 revdifference c a 32 0 1 2 3 5 6 10 11 12 15 16 17 18 20 22 23 26 27 29 31 b 32 0 1 2 3 5 6 10 11 12 15 16 17 18 20 22 23 26 27 29 31 # 27262 revdifference c a 32 0 1 2 3 5 6 10 11 12 15 16 17 18 20 22 23 26 27 29 31 b 32 1 1 3 6 8 9 11 13 14 16 17 18 19 21 23 26 31 # 27263 revdifference c a 32 1 0 e b 32 1 0 e # 27264 revdifference c a 32 1 0 e b 32 0 0 e # 27265 revdifference c a 32 1 0 e b 32 1 0 e # 27266 revdifference c a 32 1 0 e b 32 0 0 f # 27267 revdifference c a 32 1 0 e b 32 1 0 e # 27268 revdifference c a 32 1 0 e b 32 0 0 1 3 9 11 18 20 24 25 26 27 29 30 31 # 27269 revdifference c a 32 1 0 f b 32 1 0 f # 27270 revdifference c a 32 1 0 f b 32 0 0 e # 27271 revdifference c a 32 1 0 f b 32 1 0 f # 27272 revdifference c a 32 1 0 f b 32 0 0 f # 27273 revdifference c a 32 1 0 f b 32 1 0 f # 27274 revdifference c a 32 1 0 f b 32 0 0 0 3 4 5 11 12 13 15 16 19 20 21 24 25 27 28 30 31 # 27275 revdifference c a 32 1 0 2 4 5 9 13 16 17 19 21 24 25 27 28 29 b 32 1 0 2 4 5 9 13 16 17 19 21 24 25 27 28 29 # 27276 revdifference c a 32 1 0 2 4 5 9 13 16 17 19 21 24 25 27 28 29 b 32 0 0 e # 27277 revdifference c a 32 1 0 2 6 7 8 10 12 14 15 16 18 21 22 23 24 25 26 27 28 b 32 1 0 2 6 7 8 10 12 14 15 16 18 21 22 23 24 25 26 27 28 # 27278 revdifference c a 32 1 0 2 6 7 8 10 12 14 15 16 18 21 22 23 24 25 26 27 28 b 32 0 0 f # 27279 revdifference c a 32 1 0 1 3 10 12 13 15 21 23 24 26 27 29 31 b 32 1 0 1 3 10 12 13 15 21 23 24 26 27 29 31 # 27280 revdifference c a 32 1 0 1 3 10 12 13 15 21 23 24 26 27 29 31 b 32 0 0 0 1 2 4 8 10 12 16 18 19 22 25 27 28 29 30 31 # 27281 revdifference c a 32 1 0 e b 32 1 0 e # 27282 revdifference c a 32 1 0 e b 32 0 1 e # 27283 revdifference c a 32 1 0 e b 32 1 0 e # 27284 revdifference c a 32 1 0 e b 32 0 1 f # 27285 revdifference c a 32 1 0 e b 32 1 0 e # 27286 revdifference c a 32 1 0 e b 32 0 1 1 2 4 6 7 8 9 11 14 16 17 20 22 24 27 31 # 27287 revdifference c a 32 1 0 f b 32 1 0 f # 27288 revdifference c a 32 1 0 f b 32 0 1 e # 27289 revdifference c a 32 1 0 f b 32 1 0 f # 27290 revdifference c a 32 1 0 f b 32 0 1 f # 27291 revdifference c a 32 1 0 f b 32 1 0 f # 27292 revdifference c a 32 1 0 f b 32 0 1 4 6 7 11 12 14 15 22 24 27 28 29 30 31 # 27293 revdifference c a 32 1 0 1 6 12 14 19 25 29 31 b 32 1 0 1 6 12 14 19 25 29 31 # 27294 revdifference c a 32 1 0 1 6 12 14 19 25 29 31 b 32 0 1 e # 27295 revdifference c a 32 1 0 0 2 4 5 6 9 14 15 16 18 23 24 25 28 31 b 32 1 0 0 2 4 5 6 9 14 15 16 18 23 24 25 28 31 # 27296 revdifference c a 32 1 0 0 2 4 5 6 9 14 15 16 18 23 24 25 28 31 b 32 0 1 f # 27297 revdifference c a 32 1 0 0 2 3 5 6 7 8 11 12 13 14 15 18 19 20 22 23 25 27 30 b 32 1 0 0 2 3 5 6 7 8 11 12 13 14 15 18 19 20 22 23 25 27 30 # 27298 revdifference c a 32 1 0 0 2 3 5 6 7 8 11 12 13 14 15 18 19 20 22 23 25 27 30 b 32 0 1 0 1 3 6 8 9 11 12 13 18 20 21 22 24 28 29 30 # 27299 revdifference c a 32 1 0 e b 32 1 0 e # 27300 revdifference c a 32 1 0 e b 32 1 0 e # 27301 revdifference c a 32 1 0 e b 32 1 0 e # 27302 revdifference c a 32 1 0 e b 32 1 0 f # 27303 revdifference c a 32 1 0 e b 32 1 0 e # 27304 revdifference c a 32 1 0 e b 32 1 0 0 1 7 9 10 12 16 19 22 23 24 29 30 31 # 27305 revdifference c a 32 1 0 f b 32 1 0 f # 27306 revdifference c a 32 1 0 f b 32 1 0 e # 27307 revdifference c a 32 1 0 f b 32 1 0 f # 27308 revdifference c a 32 1 0 f b 32 1 0 f # 27309 revdifference c a 32 1 0 f b 32 1 0 f # 27310 revdifference c a 32 1 0 f b 32 1 0 0 4 5 7 9 13 15 17 18 21 24 25 26 28 29 31 # 27311 revdifference c a 32 1 0 2 3 6 7 10 12 18 19 20 23 24 25 27 28 31 b 32 1 0 2 3 6 7 10 12 18 19 20 23 24 25 27 28 31 # 27312 revdifference c a 32 1 0 2 3 6 7 10 12 18 19 20 23 24 25 27 28 31 b 32 1 0 e # 27313 revdifference c a 32 1 0 0 2 4 5 6 7 9 13 15 18 27 28 29 30 31 b 32 1 0 0 2 4 5 6 7 9 13 15 18 27 28 29 30 31 # 27314 revdifference c a 32 1 0 0 2 4 5 6 7 9 13 15 18 27 28 29 30 31 b 32 1 0 f # 27315 revdifference c a 32 1 0 1 3 4 6 11 13 14 15 17 18 19 20 24 27 30 b 32 1 0 1 3 4 6 11 13 14 15 17 18 19 20 24 27 30 # 27316 revdifference c a 32 1 0 1 3 4 6 11 13 14 15 17 18 19 20 24 27 30 b 32 1 0 1 8 9 12 13 16 18 19 22 24 26 27 29 31 # 27317 revdifference c a 32 1 0 e b 32 1 0 e # 27318 revdifference c a 32 1 0 e b 32 1 1 e # 27319 revdifference c a 32 1 0 e b 32 1 0 e # 27320 revdifference c a 32 1 0 e b 32 1 1 f # 27321 revdifference c a 32 1 0 e b 32 1 0 e # 27322 revdifference c a 32 1 0 e b 32 1 1 0 1 2 3 9 10 12 14 17 19 20 23 26 27 28 30 31 # 27323 revdifference c a 32 1 0 f b 32 1 0 f # 27324 revdifference c a 32 1 0 f b 32 1 1 e # 27325 revdifference c a 32 1 0 f b 32 1 0 f # 27326 revdifference c a 32 1 0 f b 32 1 1 f # 27327 revdifference c a 32 1 0 f b 32 1 0 f # 27328 revdifference c a 32 1 0 f b 32 1 1 1 2 3 7 8 11 13 15 16 18 19 20 29 31 # 27329 revdifference c a 32 1 0 0 1 3 5 6 8 9 10 12 15 16 20 21 22 25 26 27 28 29 31 b 32 1 0 0 1 3 5 6 8 9 10 12 15 16 20 21 22 25 26 27 28 29 31 # 27330 revdifference c a 32 1 0 0 1 3 5 6 8 9 10 12 15 16 20 21 22 25 26 27 28 29 31 b 32 1 1 e # 27331 revdifference c a 32 1 0 0 1 2 4 7 12 13 17 18 19 20 21 23 24 25 26 27 28 31 b 32 1 0 0 1 2 4 7 12 13 17 18 19 20 21 23 24 25 26 27 28 31 # 27332 revdifference c a 32 1 0 0 1 2 4 7 12 13 17 18 19 20 21 23 24 25 26 27 28 31 b 32 1 1 f # 27333 revdifference c a 32 1 0 3 4 5 6 9 10 11 12 13 15 16 18 23 26 31 b 32 1 0 3 4 5 6 9 10 11 12 13 15 16 18 23 26 31 # 27334 revdifference c a 32 1 0 3 4 5 6 9 10 11 12 13 15 16 18 23 26 31 b 32 1 1 2 13 15 19 21 22 23 26 27 28 # 27335 revdifference c a 32 1 1 e b 32 1 1 e # 27336 revdifference c a 32 1 1 e b 32 0 0 e # 27337 revdifference c a 32 1 1 e b 32 1 1 e # 27338 revdifference c a 32 1 1 e b 32 0 0 f # 27339 revdifference c a 32 1 1 e b 32 1 1 e # 27340 revdifference c a 32 1 1 e b 32 0 0 0 3 4 5 9 12 13 16 17 20 21 26 # 27341 revdifference c a 32 1 1 f b 32 1 1 f # 27342 revdifference c a 32 1 1 f b 32 0 0 e # 27343 revdifference c a 32 1 1 f b 32 1 1 f # 27344 revdifference c a 32 1 1 f b 32 0 0 f # 27345 revdifference c a 32 1 1 f b 32 1 1 f # 27346 revdifference c a 32 1 1 f b 32 0 0 0 1 4 5 6 8 10 11 12 15 21 23 24 28 29 30 31 # 27347 revdifference c a 32 1 1 0 1 3 4 5 6 9 12 16 17 21 25 26 29 b 32 1 1 0 1 3 4 5 6 9 12 16 17 21 25 26 29 # 27348 revdifference c a 32 1 1 0 1 3 4 5 6 9 12 16 17 21 25 26 29 b 32 0 0 e # 27349 revdifference c a 32 1 1 0 2 5 6 7 8 10 11 12 14 15 16 21 22 23 25 27 28 29 b 32 1 1 0 2 5 6 7 8 10 11 12 14 15 16 21 22 23 25 27 28 29 # 27350 revdifference c a 32 1 1 0 2 5 6 7 8 10 11 12 14 15 16 21 22 23 25 27 28 29 b 32 0 0 f # 27351 revdifference c a 32 1 1 2 3 5 7 10 11 12 13 14 15 17 19 20 22 27 28 b 32 1 1 2 3 5 7 10 11 12 13 14 15 17 19 20 22 27 28 # 27352 revdifference c a 32 1 1 2 3 5 7 10 11 12 13 14 15 17 19 20 22 27 28 b 32 0 0 0 2 3 6 7 8 9 10 11 15 17 20 25 29 30 31 # 27353 revdifference c a 32 1 1 e b 32 1 1 e # 27354 revdifference c a 32 1 1 e b 32 0 1 e # 27355 revdifference c a 32 1 1 e b 32 1 1 e # 27356 revdifference c a 32 1 1 e b 32 0 1 f # 27357 revdifference c a 32 1 1 e b 32 1 1 e # 27358 revdifference c a 32 1 1 e b 32 0 1 1 2 3 5 8 10 12 14 20 21 24 25 26 27 30 31 # 27359 revdifference c a 32 1 1 f b 32 1 1 f # 27360 revdifference c a 32 1 1 f b 32 0 1 e # 27361 revdifference c a 32 1 1 f b 32 1 1 f # 27362 revdifference c a 32 1 1 f b 32 0 1 f # 27363 revdifference c a 32 1 1 f b 32 1 1 f # 27364 revdifference c a 32 1 1 f b 32 0 1 1 4 5 6 7 9 10 11 13 17 18 20 24 28 31 # 27365 revdifference c a 32 1 1 1 4 7 8 10 14 15 16 18 19 20 23 24 25 31 b 32 1 1 1 4 7 8 10 14 15 16 18 19 20 23 24 25 31 # 27366 revdifference c a 32 1 1 1 4 7 8 10 14 15 16 18 19 20 23 24 25 31 b 32 0 1 e # 27367 revdifference c a 32 1 1 1 3 6 8 9 11 14 16 17 18 23 24 28 29 30 b 32 1 1 1 3 6 8 9 11 14 16 17 18 23 24 28 29 30 # 27368 revdifference c a 32 1 1 1 3 6 8 9 11 14 16 17 18 23 24 28 29 30 b 32 0 1 f # 27369 revdifference c a 32 1 1 0 4 9 14 15 16 17 20 21 23 25 28 31 b 32 1 1 0 4 9 14 15 16 17 20 21 23 25 28 31 # 27370 revdifference c a 32 1 1 0 4 9 14 15 16 17 20 21 23 25 28 31 b 32 0 1 1 2 4 6 10 11 14 18 20 21 24 28 29 # 27371 revdifference c a 32 1 1 e b 32 1 1 e # 27372 revdifference c a 32 1 1 e b 32 1 0 e # 27373 revdifference c a 32 1 1 e b 32 1 1 e # 27374 revdifference c a 32 1 1 e b 32 1 0 f # 27375 revdifference c a 32 1 1 e b 32 1 1 e # 27376 revdifference c a 32 1 1 e b 32 1 0 0 3 4 6 9 10 11 13 16 18 19 21 23 25 28 29 # 27377 revdifference c a 32 1 1 f b 32 1 1 f # 27378 revdifference c a 32 1 1 f b 32 1 0 e # 27379 revdifference c a 32 1 1 f b 32 1 1 f # 27380 revdifference c a 32 1 1 f b 32 1 0 f # 27381 revdifference c a 32 1 1 f b 32 1 1 f # 27382 revdifference c a 32 1 1 f b 32 1 0 0 1 3 6 7 8 9 10 12 14 15 18 19 21 22 23 24 28 29 30 31 # 27383 revdifference c a 32 1 1 0 2 3 5 6 8 10 12 16 17 18 20 21 23 24 25 27 30 b 32 1 1 0 2 3 5 6 8 10 12 16 17 18 20 21 23 24 25 27 30 # 27384 revdifference c a 32 1 1 0 2 3 5 6 8 10 12 16 17 18 20 21 23 24 25 27 30 b 32 1 0 e # 27385 revdifference c a 32 1 1 1 3 5 10 12 13 15 16 19 21 22 25 27 31 b 32 1 1 1 3 5 10 12 13 15 16 19 21 22 25 27 31 # 27386 revdifference c a 32 1 1 1 3 5 10 12 13 15 16 19 21 22 25 27 31 b 32 1 0 f # 27387 revdifference c a 32 1 1 0 2 6 7 13 14 20 22 25 29 b 32 1 1 0 2 6 7 13 14 20 22 25 29 # 27388 revdifference c a 32 1 1 0 2 6 7 13 14 20 22 25 29 b 32 1 0 1 2 3 6 7 8 9 10 12 13 14 15 20 22 23 28 29 30 # 27389 revdifference c a 32 1 1 e b 32 1 1 e # 27390 revdifference c a 32 1 1 e b 32 1 1 e # 27391 revdifference c a 32 1 1 e b 32 1 1 e # 27392 revdifference c a 32 1 1 e b 32 1 1 f # 27393 revdifference c a 32 1 1 e b 32 1 1 e # 27394 revdifference c a 32 1 1 e b 32 1 1 0 2 3 4 5 6 7 8 9 12 15 16 17 19 21 22 26 28 29 31 # 27395 revdifference c a 32 1 1 f b 32 1 1 f # 27396 revdifference c a 32 1 1 f b 32 1 1 e # 27397 revdifference c a 32 1 1 f b 32 1 1 f # 27398 revdifference c a 32 1 1 f b 32 1 1 f # 27399 revdifference c a 32 1 1 f b 32 1 1 f # 27400 revdifference c a 32 1 1 f b 32 1 1 2 7 9 11 13 14 16 18 21 22 24 25 26 27 30 31 # 27401 revdifference c a 32 1 1 0 2 3 4 6 8 18 19 25 27 29 31 b 32 1 1 0 2 3 4 6 8 18 19 25 27 29 31 # 27402 revdifference c a 32 1 1 0 2 3 4 6 8 18 19 25 27 29 31 b 32 1 1 e # 27403 revdifference c a 32 1 1 2 4 5 6 7 9 10 11 15 16 20 21 23 24 25 26 27 28 30 b 32 1 1 2 4 5 6 7 9 10 11 15 16 20 21 23 24 25 26 27 28 30 # 27404 revdifference c a 32 1 1 2 4 5 6 7 9 10 11 15 16 20 21 23 24 25 26 27 28 30 b 32 1 1 f # 27405 revdifference c a 32 1 1 0 1 2 4 11 12 13 15 17 18 19 20 22 25 27 28 31 b 32 1 1 0 1 2 4 11 12 13 15 17 18 19 20 22 25 27 28 31 # 27406 revdifference c a 32 1 1 0 1 2 4 11 12 13 15 17 18 19 20 22 25 27 28 31 b 32 1 1 1 6 7 8 10 15 18 19 20 21 23 25 26 31 # 27407 revdifference c a 33 0 0 e b 33 0 0 e # 27408 revdifference c a 33 0 0 e b 33 0 0 e # 27409 revdifference c a 33 0 0 e b 33 0 0 e # 27410 revdifference c a 33 0 0 e b 33 0 0 f # 27411 revdifference c a 33 0 0 e b 33 0 0 e # 27412 revdifference c a 33 0 0 e b 33 0 0 3 4 6 7 8 12 15 16 17 18 20 26 27 28 29 30 31 # 27413 revdifference c a 33 0 0 f b 33 0 0 f # 27414 revdifference c a 33 0 0 f b 33 0 0 e # 27415 revdifference c a 33 0 0 f b 33 0 0 f # 27416 revdifference c a 33 0 0 f b 33 0 0 f # 27417 revdifference c a 33 0 0 f b 33 0 0 f # 27418 revdifference c a 33 0 0 f b 33 0 0 1 3 6 7 10 11 12 13 14 15 16 20 21 22 25 26 28 29 30 32 # 27419 revdifference c a 33 0 0 3 7 8 11 12 16 17 18 22 26 30 31 b 33 0 0 3 7 8 11 12 16 17 18 22 26 30 31 # 27420 revdifference c a 33 0 0 3 7 8 11 12 16 17 18 22 26 30 31 b 33 0 0 e # 27421 revdifference c a 33 0 0 1 2 4 8 12 14 18 19 22 23 30 b 33 0 0 1 2 4 8 12 14 18 19 22 23 30 # 27422 revdifference c a 33 0 0 1 2 4 8 12 14 18 19 22 23 30 b 33 0 0 f # 27423 revdifference c a 33 0 0 0 1 7 8 13 14 15 16 23 24 25 26 28 30 31 b 33 0 0 0 1 7 8 13 14 15 16 23 24 25 26 28 30 31 # 27424 revdifference c a 33 0 0 0 1 7 8 13 14 15 16 23 24 25 26 28 30 31 b 33 0 0 0 1 2 5 7 15 16 20 21 23 24 25 26 29 30 32 # 27425 revdifference c a 33 0 0 e b 33 0 0 e # 27426 revdifference c a 33 0 0 e b 33 0 1 e # 27427 revdifference c a 33 0 0 e b 33 0 0 e # 27428 revdifference c a 33 0 0 e b 33 0 1 f # 27429 revdifference c a 33 0 0 e b 33 0 0 e # 27430 revdifference c a 33 0 0 e b 33 0 1 0 1 2 3 5 6 7 8 10 13 14 15 16 18 19 21 22 24 26 27 # 27431 revdifference c a 33 0 0 f b 33 0 0 f # 27432 revdifference c a 33 0 0 f b 33 0 1 e # 27433 revdifference c a 33 0 0 f b 33 0 0 f # 27434 revdifference c a 33 0 0 f b 33 0 1 f # 27435 revdifference c a 33 0 0 f b 33 0 0 f # 27436 revdifference c a 33 0 0 f b 33 0 1 10 11 13 14 15 16 17 19 20 22 25 26 30 31 32 # 27437 revdifference c a 33 0 0 1 2 6 7 9 12 13 15 18 19 22 27 b 33 0 0 1 2 6 7 9 12 13 15 18 19 22 27 # 27438 revdifference c a 33 0 0 1 2 6 7 9 12 13 15 18 19 22 27 b 33 0 1 e # 27439 revdifference c a 33 0 0 1 3 4 9 13 14 15 16 19 21 23 25 29 30 31 32 b 33 0 0 1 3 4 9 13 14 15 16 19 21 23 25 29 30 31 32 # 27440 revdifference c a 33 0 0 1 3 4 9 13 14 15 16 19 21 23 25 29 30 31 32 b 33 0 1 f # 27441 revdifference c a 33 0 0 1 5 6 10 13 14 15 17 25 26 28 29 30 31 32 b 33 0 0 1 5 6 10 13 14 15 17 25 26 28 29 30 31 32 # 27442 revdifference c a 33 0 0 1 5 6 10 13 14 15 17 25 26 28 29 30 31 32 b 33 0 1 5 6 7 8 9 11 12 13 15 20 22 23 26 27 29 30 31 # 27443 revdifference c a 33 0 0 e b 33 0 0 e # 27444 revdifference c a 33 0 0 e b 33 1 0 e # 27445 revdifference c a 33 0 0 e b 33 0 0 e # 27446 revdifference c a 33 0 0 e b 33 1 0 f # 27447 revdifference c a 33 0 0 e b 33 0 0 e # 27448 revdifference c a 33 0 0 e b 33 1 0 0 2 3 4 5 7 8 10 11 13 15 17 18 19 20 21 22 23 24 25 28 29 30 31 # 27449 revdifference c a 33 0 0 f b 33 0 0 f # 27450 revdifference c a 33 0 0 f b 33 1 0 e # 27451 revdifference c a 33 0 0 f b 33 0 0 f # 27452 revdifference c a 33 0 0 f b 33 1 0 f # 27453 revdifference c a 33 0 0 f b 33 0 0 f # 27454 revdifference c a 33 0 0 f b 33 1 0 4 10 13 16 18 19 21 25 26 28 29 # 27455 revdifference c a 33 0 0 0 3 4 7 11 12 13 14 16 19 20 21 22 23 24 26 28 29 30 b 33 0 0 0 3 4 7 11 12 13 14 16 19 20 21 22 23 24 26 28 29 30 # 27456 revdifference c a 33 0 0 0 3 4 7 11 12 13 14 16 19 20 21 22 23 24 26 28 29 30 b 33 1 0 e # 27457 revdifference c a 33 0 0 0 4 6 8 9 15 16 17 18 19 20 21 24 25 26 27 28 31 32 b 33 0 0 0 4 6 8 9 15 16 17 18 19 20 21 24 25 26 27 28 31 32 # 27458 revdifference c a 33 0 0 0 4 6 8 9 15 16 17 18 19 20 21 24 25 26 27 28 31 32 b 33 1 0 f # 27459 revdifference c a 33 0 0 2 3 4 5 7 9 11 14 20 22 23 25 26 27 28 30 32 b 33 0 0 2 3 4 5 7 9 11 14 20 22 23 25 26 27 28 30 32 # 27460 revdifference c a 33 0 0 2 3 4 5 7 9 11 14 20 22 23 25 26 27 28 30 32 b 33 1 0 0 2 3 4 6 7 8 9 10 11 15 18 19 21 24 29 30 32 # 27461 revdifference c a 33 0 0 e b 33 0 0 e # 27462 revdifference c a 33 0 0 e b 33 1 1 e # 27463 revdifference c a 33 0 0 e b 33 0 0 e # 27464 revdifference c a 33 0 0 e b 33 1 1 f # 27465 revdifference c a 33 0 0 e b 33 0 0 e # 27466 revdifference c a 33 0 0 e b 33 1 1 0 1 2 4 6 7 9 11 15 20 22 24 26 29 31 32 # 27467 revdifference c a 33 0 0 f b 33 0 0 f # 27468 revdifference c a 33 0 0 f b 33 1 1 e # 27469 revdifference c a 33 0 0 f b 33 0 0 f # 27470 revdifference c a 33 0 0 f b 33 1 1 f # 27471 revdifference c a 33 0 0 f b 33 0 0 f # 27472 revdifference c a 33 0 0 f b 33 1 1 2 3 5 8 9 17 19 20 22 23 28 31 # 27473 revdifference c a 33 0 0 1 2 3 4 5 6 7 11 12 13 16 20 22 25 26 27 29 32 b 33 0 0 1 2 3 4 5 6 7 11 12 13 16 20 22 25 26 27 29 32 # 27474 revdifference c a 33 0 0 1 2 3 4 5 6 7 11 12 13 16 20 22 25 26 27 29 32 b 33 1 1 e # 27475 revdifference c a 33 0 0 0 2 3 5 7 8 11 13 14 15 18 20 21 22 23 24 25 27 28 29 30 31 b 33 0 0 0 2 3 5 7 8 11 13 14 15 18 20 21 22 23 24 25 27 28 29 30 31 # 27476 revdifference c a 33 0 0 0 2 3 5 7 8 11 13 14 15 18 20 21 22 23 24 25 27 28 29 30 31 b 33 1 1 f # 27477 revdifference c a 33 0 0 1 2 7 8 9 11 12 13 15 16 17 18 19 20 21 22 25 27 31 b 33 0 0 1 2 7 8 9 11 12 13 15 16 17 18 19 20 21 22 25 27 31 # 27478 revdifference c a 33 0 0 1 2 7 8 9 11 12 13 15 16 17 18 19 20 21 22 25 27 31 b 33 1 1 0 2 5 8 11 12 14 21 23 27 28 31 32 # 27479 revdifference c a 33 0 1 e b 33 0 1 e # 27480 revdifference c a 33 0 1 e b 33 0 0 e # 27481 revdifference c a 33 0 1 e b 33 0 1 e # 27482 revdifference c a 33 0 1 e b 33 0 0 f # 27483 revdifference c a 33 0 1 e b 33 0 1 e # 27484 revdifference c a 33 0 1 e b 33 0 0 3 4 5 6 8 9 10 12 16 17 22 23 24 28 31 # 27485 revdifference c a 33 0 1 f b 33 0 1 f # 27486 revdifference c a 33 0 1 f b 33 0 0 e # 27487 revdifference c a 33 0 1 f b 33 0 1 f # 27488 revdifference c a 33 0 1 f b 33 0 0 f # 27489 revdifference c a 33 0 1 f b 33 0 1 f # 27490 revdifference c a 33 0 1 f b 33 0 0 1 4 7 10 11 12 13 14 15 18 19 20 21 22 28 30 # 27491 revdifference c a 33 0 1 3 4 8 11 12 13 16 19 21 22 23 24 26 29 31 b 33 0 1 3 4 8 11 12 13 16 19 21 22 23 24 26 29 31 # 27492 revdifference c a 33 0 1 3 4 8 11 12 13 16 19 21 22 23 24 26 29 31 b 33 0 0 e # 27493 revdifference c a 33 0 1 0 3 4 6 7 8 9 10 11 14 15 23 28 30 31 32 b 33 0 1 0 3 4 6 7 8 9 10 11 14 15 23 28 30 31 32 # 27494 revdifference c a 33 0 1 0 3 4 6 7 8 9 10 11 14 15 23 28 30 31 32 b 33 0 0 f # 27495 revdifference c a 33 0 1 0 1 4 7 9 11 12 16 18 20 21 25 29 32 b 33 0 1 0 1 4 7 9 11 12 16 18 20 21 25 29 32 # 27496 revdifference c a 33 0 1 0 1 4 7 9 11 12 16 18 20 21 25 29 32 b 33 0 0 0 1 6 10 11 12 16 17 18 19 22 23 28 29 32 # 27497 revdifference c a 33 0 1 e b 33 0 1 e # 27498 revdifference c a 33 0 1 e b 33 0 1 e # 27499 revdifference c a 33 0 1 e b 33 0 1 e # 27500 revdifference c a 33 0 1 e b 33 0 1 f # 27501 revdifference c a 33 0 1 e b 33 0 1 e # 27502 revdifference c a 33 0 1 e b 33 0 1 0 1 3 7 10 11 12 13 14 16 18 21 22 23 26 32 # 27503 revdifference c a 33 0 1 f b 33 0 1 f # 27504 revdifference c a 33 0 1 f b 33 0 1 e # 27505 revdifference c a 33 0 1 f b 33 0 1 f # 27506 revdifference c a 33 0 1 f b 33 0 1 f # 27507 revdifference c a 33 0 1 f b 33 0 1 f # 27508 revdifference c a 33 0 1 f b 33 0 1 3 4 7 10 12 16 18 19 21 22 24 26 27 30 31 # 27509 revdifference c a 33 0 1 1 3 7 8 10 12 17 20 21 22 24 25 26 28 29 30 32 b 33 0 1 1 3 7 8 10 12 17 20 21 22 24 25 26 28 29 30 32 # 27510 revdifference c a 33 0 1 1 3 7 8 10 12 17 20 21 22 24 25 26 28 29 30 32 b 33 0 1 e # 27511 revdifference c a 33 0 1 0 4 5 8 10 11 12 15 16 18 19 21 22 24 25 28 29 31 b 33 0 1 0 4 5 8 10 11 12 15 16 18 19 21 22 24 25 28 29 31 # 27512 revdifference c a 33 0 1 0 4 5 8 10 11 12 15 16 18 19 21 22 24 25 28 29 31 b 33 0 1 f # 27513 revdifference c a 33 0 1 1 7 11 15 16 19 20 21 22 23 26 30 31 b 33 0 1 1 7 11 15 16 19 20 21 22 23 26 30 31 # 27514 revdifference c a 33 0 1 1 7 11 15 16 19 20 21 22 23 26 30 31 b 33 0 1 2 3 4 7 8 9 15 16 18 19 20 21 25 26 27 28 29 # 27515 revdifference c a 33 0 1 e b 33 0 1 e # 27516 revdifference c a 33 0 1 e b 33 1 0 e # 27517 revdifference c a 33 0 1 e b 33 0 1 e # 27518 revdifference c a 33 0 1 e b 33 1 0 f # 27519 revdifference c a 33 0 1 e b 33 0 1 e # 27520 revdifference c a 33 0 1 e b 33 1 0 1 2 3 5 6 9 10 11 14 17 19 21 28 29 32 # 27521 revdifference c a 33 0 1 f b 33 0 1 f # 27522 revdifference c a 33 0 1 f b 33 1 0 e # 27523 revdifference c a 33 0 1 f b 33 0 1 f # 27524 revdifference c a 33 0 1 f b 33 1 0 f # 27525 revdifference c a 33 0 1 f b 33 0 1 f # 27526 revdifference c a 33 0 1 f b 33 1 0 1 2 4 6 7 8 9 10 12 14 15 16 17 19 21 23 26 28 29 30 32 # 27527 revdifference c a 33 0 1 0 1 2 4 7 9 10 11 13 14 17 20 22 24 27 29 30 32 b 33 0 1 0 1 2 4 7 9 10 11 13 14 17 20 22 24 27 29 30 32 # 27528 revdifference c a 33 0 1 0 1 2 4 7 9 10 11 13 14 17 20 22 24 27 29 30 32 b 33 1 0 e # 27529 revdifference c a 33 0 1 0 2 4 5 6 8 9 10 11 12 16 17 19 20 21 22 25 28 29 31 b 33 0 1 0 2 4 5 6 8 9 10 11 12 16 17 19 20 21 22 25 28 29 31 # 27530 revdifference c a 33 0 1 0 2 4 5 6 8 9 10 11 12 16 17 19 20 21 22 25 28 29 31 b 33 1 0 f # 27531 revdifference c a 33 0 1 1 2 4 11 12 13 15 18 22 24 28 30 b 33 0 1 1 2 4 11 12 13 15 18 22 24 28 30 # 27532 revdifference c a 33 0 1 1 2 4 11 12 13 15 18 22 24 28 30 b 33 1 0 0 1 2 6 7 8 10 12 13 14 16 17 18 19 20 22 23 24 26 28 29 31 32 # 27533 revdifference c a 33 0 1 e b 33 0 1 e # 27534 revdifference c a 33 0 1 e b 33 1 1 e # 27535 revdifference c a 33 0 1 e b 33 0 1 e # 27536 revdifference c a 33 0 1 e b 33 1 1 f # 27537 revdifference c a 33 0 1 e b 33 0 1 e # 27538 revdifference c a 33 0 1 e b 33 1 1 1 2 3 4 5 6 12 13 14 15 16 17 18 20 21 23 26 28 29 32 # 27539 revdifference c a 33 0 1 f b 33 0 1 f # 27540 revdifference c a 33 0 1 f b 33 1 1 e # 27541 revdifference c a 33 0 1 f b 33 0 1 f # 27542 revdifference c a 33 0 1 f b 33 1 1 f # 27543 revdifference c a 33 0 1 f b 33 0 1 f # 27544 revdifference c a 33 0 1 f b 33 1 1 3 5 8 9 11 12 15 17 19 20 25 29 30 # 27545 revdifference c a 33 0 1 2 4 7 8 9 16 20 21 22 23 25 28 29 30 b 33 0 1 2 4 7 8 9 16 20 21 22 23 25 28 29 30 # 27546 revdifference c a 33 0 1 2 4 7 8 9 16 20 21 22 23 25 28 29 30 b 33 1 1 e # 27547 revdifference c a 33 0 1 1 3 4 5 7 9 11 13 15 16 17 18 19 21 22 24 27 28 29 30 32 b 33 0 1 1 3 4 5 7 9 11 13 15 16 17 18 19 21 22 24 27 28 29 30 32 # 27548 revdifference c a 33 0 1 1 3 4 5 7 9 11 13 15 16 17 18 19 21 22 24 27 28 29 30 32 b 33 1 1 f # 27549 revdifference c a 33 0 1 2 4 5 6 10 11 12 14 15 17 19 20 21 22 23 25 26 28 30 31 32 b 33 0 1 2 4 5 6 10 11 12 14 15 17 19 20 21 22 23 25 26 28 30 31 32 # 27550 revdifference c a 33 0 1 2 4 5 6 10 11 12 14 15 17 19 20 21 22 23 25 26 28 30 31 32 b 33 1 1 0 4 5 6 8 9 12 25 26 27 28 29 # 27551 revdifference c a 33 1 0 e b 33 1 0 e # 27552 revdifference c a 33 1 0 e b 33 0 0 e # 27553 revdifference c a 33 1 0 e b 33 1 0 e # 27554 revdifference c a 33 1 0 e b 33 0 0 f # 27555 revdifference c a 33 1 0 e b 33 1 0 e # 27556 revdifference c a 33 1 0 e b 33 0 0 0 1 3 4 5 6 9 13 14 15 16 20 21 24 27 28 29 30 31 32 # 27557 revdifference c a 33 1 0 f b 33 1 0 f # 27558 revdifference c a 33 1 0 f b 33 0 0 e # 27559 revdifference c a 33 1 0 f b 33 1 0 f # 27560 revdifference c a 33 1 0 f b 33 0 0 f # 27561 revdifference c a 33 1 0 f b 33 1 0 f # 27562 revdifference c a 33 1 0 f b 33 0 0 1 3 5 9 10 11 12 13 14 15 18 20 22 23 25 26 28 30 31 # 27563 revdifference c a 33 1 0 1 2 6 7 9 10 12 13 14 15 17 18 19 20 21 23 27 31 b 33 1 0 1 2 6 7 9 10 12 13 14 15 17 18 19 20 21 23 27 31 # 27564 revdifference c a 33 1 0 1 2 6 7 9 10 12 13 14 15 17 18 19 20 21 23 27 31 b 33 0 0 e # 27565 revdifference c a 33 1 0 0 2 5 7 9 10 13 14 20 22 24 25 26 28 29 30 31 b 33 1 0 0 2 5 7 9 10 13 14 20 22 24 25 26 28 29 30 31 # 27566 revdifference c a 33 1 0 0 2 5 7 9 10 13 14 20 22 24 25 26 28 29 30 31 b 33 0 0 f # 27567 revdifference c a 33 1 0 4 6 9 10 11 12 16 17 18 22 24 27 28 30 b 33 1 0 4 6 9 10 11 12 16 17 18 22 24 27 28 30 # 27568 revdifference c a 33 1 0 4 6 9 10 11 12 16 17 18 22 24 27 28 30 b 33 0 0 1 3 5 8 12 18 19 22 23 26 27 31 32 # 27569 revdifference c a 33 1 0 e b 33 1 0 e # 27570 revdifference c a 33 1 0 e b 33 0 1 e # 27571 revdifference c a 33 1 0 e b 33 1 0 e # 27572 revdifference c a 33 1 0 e b 33 0 1 f # 27573 revdifference c a 33 1 0 e b 33 1 0 e # 27574 revdifference c a 33 1 0 e b 33 0 1 1 5 6 11 13 15 16 17 19 20 24 26 29 31 32 # 27575 revdifference c a 33 1 0 f b 33 1 0 f # 27576 revdifference c a 33 1 0 f b 33 0 1 e # 27577 revdifference c a 33 1 0 f b 33 1 0 f # 27578 revdifference c a 33 1 0 f b 33 0 1 f # 27579 revdifference c a 33 1 0 f b 33 1 0 f # 27580 revdifference c a 33 1 0 f b 33 0 1 0 2 3 6 8 9 10 12 13 15 18 19 20 21 22 23 24 25 31 32 # 27581 revdifference c a 33 1 0 1 2 3 4 9 14 17 22 24 26 28 29 30 31 b 33 1 0 1 2 3 4 9 14 17 22 24 26 28 29 30 31 # 27582 revdifference c a 33 1 0 1 2 3 4 9 14 17 22 24 26 28 29 30 31 b 33 0 1 e # 27583 revdifference c a 33 1 0 0 1 5 6 11 13 14 18 23 24 27 b 33 1 0 0 1 5 6 11 13 14 18 23 24 27 # 27584 revdifference c a 33 1 0 0 1 5 6 11 13 14 18 23 24 27 b 33 0 1 f # 27585 revdifference c a 33 1 0 1 4 5 10 16 17 18 23 24 25 29 30 31 32 b 33 1 0 1 4 5 10 16 17 18 23 24 25 29 30 31 32 # 27586 revdifference c a 33 1 0 1 4 5 10 16 17 18 23 24 25 29 30 31 32 b 33 0 1 1 2 3 7 10 12 15 17 19 20 21 22 23 27 28 29 30 32 # 27587 revdifference c a 33 1 0 e b 33 1 0 e # 27588 revdifference c a 33 1 0 e b 33 1 0 e # 27589 revdifference c a 33 1 0 e b 33 1 0 e # 27590 revdifference c a 33 1 0 e b 33 1 0 f # 27591 revdifference c a 33 1 0 e b 33 1 0 e # 27592 revdifference c a 33 1 0 e b 33 1 0 3 6 7 10 11 12 13 14 15 17 18 21 23 24 26 27 29 30 31 # 27593 revdifference c a 33 1 0 f b 33 1 0 f # 27594 revdifference c a 33 1 0 f b 33 1 0 e # 27595 revdifference c a 33 1 0 f b 33 1 0 f # 27596 revdifference c a 33 1 0 f b 33 1 0 f # 27597 revdifference c a 33 1 0 f b 33 1 0 f # 27598 revdifference c a 33 1 0 f b 33 1 0 2 3 5 6 7 8 9 10 11 12 13 14 18 20 21 30 31 32 # 27599 revdifference c a 33 1 0 6 9 10 11 12 15 17 18 20 21 22 27 28 32 b 33 1 0 6 9 10 11 12 15 17 18 20 21 22 27 28 32 # 27600 revdifference c a 33 1 0 6 9 10 11 12 15 17 18 20 21 22 27 28 32 b 33 1 0 e # 27601 revdifference c a 33 1 0 0 1 3 4 11 12 16 17 19 21 23 26 28 32 b 33 1 0 0 1 3 4 11 12 16 17 19 21 23 26 28 32 # 27602 revdifference c a 33 1 0 0 1 3 4 11 12 16 17 19 21 23 26 28 32 b 33 1 0 f # 27603 revdifference c a 33 1 0 2 3 4 7 10 11 12 14 15 16 17 21 22 24 27 29 30 31 b 33 1 0 2 3 4 7 10 11 12 14 15 16 17 21 22 24 27 29 30 31 # 27604 revdifference c a 33 1 0 2 3 4 7 10 11 12 14 15 16 17 21 22 24 27 29 30 31 b 33 1 0 0 1 2 3 5 7 8 10 11 12 13 14 15 16 18 19 20 22 24 25 26 28 29 30 32 # 27605 revdifference c a 33 1 0 e b 33 1 0 e # 27606 revdifference c a 33 1 0 e b 33 1 1 e # 27607 revdifference c a 33 1 0 e b 33 1 0 e # 27608 revdifference c a 33 1 0 e b 33 1 1 f # 27609 revdifference c a 33 1 0 e b 33 1 0 e # 27610 revdifference c a 33 1 0 e b 33 1 1 0 3 4 11 13 14 16 17 20 21 25 29 30 # 27611 revdifference c a 33 1 0 f b 33 1 0 f # 27612 revdifference c a 33 1 0 f b 33 1 1 e # 27613 revdifference c a 33 1 0 f b 33 1 0 f # 27614 revdifference c a 33 1 0 f b 33 1 1 f # 27615 revdifference c a 33 1 0 f b 33 1 0 f # 27616 revdifference c a 33 1 0 f b 33 1 1 1 6 7 8 9 11 12 13 14 15 19 21 25 26 27 28 29 31 32 # 27617 revdifference c a 33 1 0 3 6 7 8 10 14 16 17 18 19 23 24 26 27 29 30 31 b 33 1 0 3 6 7 8 10 14 16 17 18 19 23 24 26 27 29 30 31 # 27618 revdifference c a 33 1 0 3 6 7 8 10 14 16 17 18 19 23 24 26 27 29 30 31 b 33 1 1 e # 27619 revdifference c a 33 1 0 1 3 4 6 11 12 13 14 15 16 17 18 20 21 24 26 29 30 31 32 b 33 1 0 1 3 4 6 11 12 13 14 15 16 17 18 20 21 24 26 29 30 31 32 # 27620 revdifference c a 33 1 0 1 3 4 6 11 12 13 14 15 16 17 18 20 21 24 26 29 30 31 32 b 33 1 1 f # 27621 revdifference c a 33 1 0 1 3 5 6 7 9 10 20 23 25 27 29 30 31 32 b 33 1 0 1 3 5 6 7 9 10 20 23 25 27 29 30 31 32 # 27622 revdifference c a 33 1 0 1 3 5 6 7 9 10 20 23 25 27 29 30 31 32 b 33 1 1 3 5 8 10 12 13 14 18 19 21 22 25 26 28 30 31 32 # 27623 revdifference c a 33 1 1 e b 33 1 1 e # 27624 revdifference c a 33 1 1 e b 33 0 0 e # 27625 revdifference c a 33 1 1 e b 33 1 1 e # 27626 revdifference c a 33 1 1 e b 33 0 0 f # 27627 revdifference c a 33 1 1 e b 33 1 1 e # 27628 revdifference c a 33 1 1 e b 33 0 0 1 5 6 7 12 13 14 16 18 19 21 22 24 # 27629 revdifference c a 33 1 1 f b 33 1 1 f # 27630 revdifference c a 33 1 1 f b 33 0 0 e # 27631 revdifference c a 33 1 1 f b 33 1 1 f # 27632 revdifference c a 33 1 1 f b 33 0 0 f # 27633 revdifference c a 33 1 1 f b 33 1 1 f # 27634 revdifference c a 33 1 1 f b 33 0 0 0 1 4 6 7 8 10 15 16 17 19 20 21 22 24 25 29 31 32 # 27635 revdifference c a 33 1 1 0 6 7 11 12 13 14 15 17 18 19 21 22 26 28 29 31 b 33 1 1 0 6 7 11 12 13 14 15 17 18 19 21 22 26 28 29 31 # 27636 revdifference c a 33 1 1 0 6 7 11 12 13 14 15 17 18 19 21 22 26 28 29 31 b 33 0 0 e # 27637 revdifference c a 33 1 1 0 1 2 4 5 6 8 11 13 15 16 19 21 24 25 28 29 30 31 32 b 33 1 1 0 1 2 4 5 6 8 11 13 15 16 19 21 24 25 28 29 30 31 32 # 27638 revdifference c a 33 1 1 0 1 2 4 5 6 8 11 13 15 16 19 21 24 25 28 29 30 31 32 b 33 0 0 f # 27639 revdifference c a 33 1 1 1 2 4 8 11 15 16 18 19 22 24 27 28 29 30 32 b 33 1 1 1 2 4 8 11 15 16 18 19 22 24 27 28 29 30 32 # 27640 revdifference c a 33 1 1 1 2 4 8 11 15 16 18 19 22 24 27 28 29 30 32 b 33 0 0 0 1 2 4 5 6 9 10 11 14 17 18 19 20 22 23 26 31 # 27641 revdifference c a 33 1 1 e b 33 1 1 e # 27642 revdifference c a 33 1 1 e b 33 0 1 e # 27643 revdifference c a 33 1 1 e b 33 1 1 e # 27644 revdifference c a 33 1 1 e b 33 0 1 f # 27645 revdifference c a 33 1 1 e b 33 1 1 e # 27646 revdifference c a 33 1 1 e b 33 0 1 6 7 9 11 12 13 15 16 19 20 25 26 27 29 31 32 # 27647 revdifference c a 33 1 1 f b 33 1 1 f # 27648 revdifference c a 33 1 1 f b 33 0 1 e # 27649 revdifference c a 33 1 1 f b 33 1 1 f # 27650 revdifference c a 33 1 1 f b 33 0 1 f # 27651 revdifference c a 33 1 1 f b 33 1 1 f # 27652 revdifference c a 33 1 1 f b 33 0 1 1 3 4 9 13 14 17 19 21 24 26 28 29 32 # 27653 revdifference c a 33 1 1 0 3 5 9 10 12 14 15 16 17 19 21 23 24 25 29 32 b 33 1 1 0 3 5 9 10 12 14 15 16 17 19 21 23 24 25 29 32 # 27654 revdifference c a 33 1 1 0 3 5 9 10 12 14 15 16 17 19 21 23 24 25 29 32 b 33 0 1 e # 27655 revdifference c a 33 1 1 0 3 4 5 6 8 11 12 13 14 15 18 19 20 21 22 23 27 29 30 32 b 33 1 1 0 3 4 5 6 8 11 12 13 14 15 18 19 20 21 22 23 27 29 30 32 # 27656 revdifference c a 33 1 1 0 3 4 5 6 8 11 12 13 14 15 18 19 20 21 22 23 27 29 30 32 b 33 0 1 f # 27657 revdifference c a 33 1 1 1 2 4 12 13 14 16 17 19 22 23 24 25 27 28 30 b 33 1 1 1 2 4 12 13 14 16 17 19 22 23 24 25 27 28 30 # 27658 revdifference c a 33 1 1 1 2 4 12 13 14 16 17 19 22 23 24 25 27 28 30 b 33 0 1 1 3 5 8 9 11 13 14 17 18 19 20 22 23 24 25 26 30 31 # 27659 revdifference c a 33 1 1 e b 33 1 1 e # 27660 revdifference c a 33 1 1 e b 33 1 0 e # 27661 revdifference c a 33 1 1 e b 33 1 1 e # 27662 revdifference c a 33 1 1 e b 33 1 0 f # 27663 revdifference c a 33 1 1 e b 33 1 1 e # 27664 revdifference c a 33 1 1 e b 33 1 0 1 3 4 5 6 7 9 12 14 15 17 19 20 23 24 25 31 32 # 27665 revdifference c a 33 1 1 f b 33 1 1 f # 27666 revdifference c a 33 1 1 f b 33 1 0 e # 27667 revdifference c a 33 1 1 f b 33 1 1 f # 27668 revdifference c a 33 1 1 f b 33 1 0 f # 27669 revdifference c a 33 1 1 f b 33 1 1 f # 27670 revdifference c a 33 1 1 f b 33 1 0 0 1 2 3 4 5 7 8 9 10 12 14 15 16 18 20 21 23 24 28 29 31 32 # 27671 revdifference c a 33 1 1 1 3 6 8 15 17 18 20 24 27 28 31 b 33 1 1 1 3 6 8 15 17 18 20 24 27 28 31 # 27672 revdifference c a 33 1 1 1 3 6 8 15 17 18 20 24 27 28 31 b 33 1 0 e # 27673 revdifference c a 33 1 1 0 1 2 4 8 9 10 14 15 18 19 23 24 26 28 29 30 31 32 b 33 1 1 0 1 2 4 8 9 10 14 15 18 19 23 24 26 28 29 30 31 32 # 27674 revdifference c a 33 1 1 0 1 2 4 8 9 10 14 15 18 19 23 24 26 28 29 30 31 32 b 33 1 0 f # 27675 revdifference c a 33 1 1 0 1 2 7 8 9 12 14 18 19 20 21 22 26 29 30 32 b 33 1 1 0 1 2 7 8 9 12 14 18 19 20 21 22 26 29 30 32 # 27676 revdifference c a 33 1 1 0 1 2 7 8 9 12 14 18 19 20 21 22 26 29 30 32 b 33 1 0 0 1 2 3 5 6 14 15 18 19 21 24 25 26 27 28 29 32 # 27677 revdifference c a 33 1 1 e b 33 1 1 e # 27678 revdifference c a 33 1 1 e b 33 1 1 e # 27679 revdifference c a 33 1 1 e b 33 1 1 e # 27680 revdifference c a 33 1 1 e b 33 1 1 f # 27681 revdifference c a 33 1 1 e b 33 1 1 e # 27682 revdifference c a 33 1 1 e b 33 1 1 2 6 7 11 12 13 16 18 19 20 22 24 27 28 29 30 # 27683 revdifference c a 33 1 1 f b 33 1 1 f # 27684 revdifference c a 33 1 1 f b 33 1 1 e # 27685 revdifference c a 33 1 1 f b 33 1 1 f # 27686 revdifference c a 33 1 1 f b 33 1 1 f # 27687 revdifference c a 33 1 1 f b 33 1 1 f # 27688 revdifference c a 33 1 1 f b 33 1 1 0 1 2 3 4 5 7 8 10 11 12 14 15 18 23 26 31 # 27689 revdifference c a 33 1 1 1 2 3 5 6 7 8 9 10 12 13 14 19 20 24 28 b 33 1 1 1 2 3 5 6 7 8 9 10 12 13 14 19 20 24 28 # 27690 revdifference c a 33 1 1 1 2 3 5 6 7 8 9 10 12 13 14 19 20 24 28 b 33 1 1 e # 27691 revdifference c a 33 1 1 2 5 8 9 10 12 14 15 16 17 18 19 20 21 22 27 28 29 32 b 33 1 1 2 5 8 9 10 12 14 15 16 17 18 19 20 21 22 27 28 29 32 # 27692 revdifference c a 33 1 1 2 5 8 9 10 12 14 15 16 17 18 19 20 21 22 27 28 29 32 b 33 1 1 f # 27693 revdifference c a 33 1 1 1 9 10 11 12 13 16 19 21 23 28 29 b 33 1 1 1 9 10 11 12 13 16 19 21 23 28 29 # 27694 revdifference c a 33 1 1 1 9 10 11 12 13 16 19 21 23 28 29 b 33 1 1 1 2 3 4 5 7 8 11 12 13 14 18 20 22 23 24 26 27 29 31 32 # 27695 revdifference c a 63 0 0 e b 63 0 0 e # 27696 revdifference c a 63 0 0 e b 63 0 0 e # 27697 revdifference c a 63 0 0 e b 63 0 0 e # 27698 revdifference c a 63 0 0 e b 63 0 0 f # 27699 revdifference c a 63 0 0 e b 63 0 0 e # 27700 revdifference c a 63 0 0 e b 63 0 0 0 1 2 3 6 7 8 9 11 12 13 17 18 19 20 21 22 24 25 26 27 28 29 31 32 34 36 37 38 39 40 42 43 46 47 49 50 52 53 55 60 61 # 27701 revdifference c a 63 0 0 f b 63 0 0 f # 27702 revdifference c a 63 0 0 f b 63 0 0 e # 27703 revdifference c a 63 0 0 f b 63 0 0 f # 27704 revdifference c a 63 0 0 f b 63 0 0 f # 27705 revdifference c a 63 0 0 f b 63 0 0 f # 27706 revdifference c a 63 0 0 f b 63 0 0 0 3 4 6 7 12 13 16 21 22 23 25 27 28 31 32 33 34 35 37 39 41 43 44 47 48 49 50 51 52 53 54 56 59 60 61 # 27707 revdifference c a 63 0 0 0 1 5 6 9 12 13 14 16 19 22 24 26 27 31 38 39 42 45 46 47 50 54 56 57 59 62 b 63 0 0 0 1 5 6 9 12 13 14 16 19 22 24 26 27 31 38 39 42 45 46 47 50 54 56 57 59 62 # 27708 revdifference c a 63 0 0 0 1 5 6 9 12 13 14 16 19 22 24 26 27 31 38 39 42 45 46 47 50 54 56 57 59 62 b 63 0 0 e # 27709 revdifference c a 63 0 0 1 3 5 6 9 11 13 17 18 19 22 23 26 28 33 35 36 37 40 42 47 52 56 60 61 62 b 63 0 0 1 3 5 6 9 11 13 17 18 19 22 23 26 28 33 35 36 37 40 42 47 52 56 60 61 62 # 27710 revdifference c a 63 0 0 1 3 5 6 9 11 13 17 18 19 22 23 26 28 33 35 36 37 40 42 47 52 56 60 61 62 b 63 0 0 f # 27711 revdifference c a 63 0 0 2 5 8 9 13 14 18 19 21 22 24 26 28 29 30 33 36 37 38 39 40 45 46 47 54 56 57 59 60 62 b 63 0 0 2 5 8 9 13 14 18 19 21 22 24 26 28 29 30 33 36 37 38 39 40 45 46 47 54 56 57 59 60 62 # 27712 revdifference c a 63 0 0 2 5 8 9 13 14 18 19 21 22 24 26 28 29 30 33 36 37 38 39 40 45 46 47 54 56 57 59 60 62 b 63 0 0 0 9 10 11 13 14 16 18 20 23 24 27 29 30 34 35 36 43 44 45 46 47 49 51 52 53 54 55 58 59 62 # 27713 revdifference c a 63 0 0 e b 63 0 0 e # 27714 revdifference c a 63 0 0 e b 63 0 1 e # 27715 revdifference c a 63 0 0 e b 63 0 0 e # 27716 revdifference c a 63 0 0 e b 63 0 1 f # 27717 revdifference c a 63 0 0 e b 63 0 0 e # 27718 revdifference c a 63 0 0 e b 63 0 1 0 1 2 3 5 7 9 10 11 12 13 14 15 17 20 23 24 25 29 32 37 38 41 44 46 51 53 54 58 59 62 # 27719 revdifference c a 63 0 0 f b 63 0 0 f # 27720 revdifference c a 63 0 0 f b 63 0 1 e # 27721 revdifference c a 63 0 0 f b 63 0 0 f # 27722 revdifference c a 63 0 0 f b 63 0 1 f # 27723 revdifference c a 63 0 0 f b 63 0 0 f # 27724 revdifference c a 63 0 0 f b 63 0 1 0 4 5 10 11 14 17 18 21 23 27 28 29 30 31 34 35 39 41 43 47 51 52 56 57 59 60 # 27725 revdifference c a 63 0 0 0 3 4 5 10 11 21 22 23 24 25 26 27 32 33 37 38 39 40 41 42 45 46 47 50 51 53 54 57 58 59 60 b 63 0 0 0 3 4 5 10 11 21 22 23 24 25 26 27 32 33 37 38 39 40 41 42 45 46 47 50 51 53 54 57 58 59 60 # 27726 revdifference c a 63 0 0 0 3 4 5 10 11 21 22 23 24 25 26 27 32 33 37 38 39 40 41 42 45 46 47 50 51 53 54 57 58 59 60 b 63 0 1 e # 27727 revdifference c a 63 0 0 0 1 2 5 8 10 13 14 21 23 25 26 28 29 30 31 32 33 34 36 38 41 42 43 44 45 48 50 53 55 56 57 59 60 62 b 63 0 0 0 1 2 5 8 10 13 14 21 23 25 26 28 29 30 31 32 33 34 36 38 41 42 43 44 45 48 50 53 55 56 57 59 60 62 # 27728 revdifference c a 63 0 0 0 1 2 5 8 10 13 14 21 23 25 26 28 29 30 31 32 33 34 36 38 41 42 43 44 45 48 50 53 55 56 57 59 60 62 b 63 0 1 f # 27729 revdifference c a 63 0 0 0 2 5 7 9 12 14 15 18 19 20 21 22 23 24 25 27 28 29 31 37 39 40 41 44 45 50 51 52 53 54 55 56 57 59 60 61 62 b 63 0 0 0 2 5 7 9 12 14 15 18 19 20 21 22 23 24 25 27 28 29 31 37 39 40 41 44 45 50 51 52 53 54 55 56 57 59 60 61 62 # 27730 revdifference c a 63 0 0 0 2 5 7 9 12 14 15 18 19 20 21 22 23 24 25 27 28 29 31 37 39 40 41 44 45 50 51 52 53 54 55 56 57 59 60 61 62 b 63 0 1 0 6 8 14 15 16 18 19 21 23 24 27 30 32 34 40 41 42 45 49 50 52 56 57 61 # 27731 revdifference c a 63 0 0 e b 63 0 0 e # 27732 revdifference c a 63 0 0 e b 63 1 0 e # 27733 revdifference c a 63 0 0 e b 63 0 0 e # 27734 revdifference c a 63 0 0 e b 63 1 0 f # 27735 revdifference c a 63 0 0 e b 63 0 0 e # 27736 revdifference c a 63 0 0 e b 63 1 0 4 5 6 8 9 15 18 19 23 26 28 29 30 34 35 36 37 39 40 42 44 46 48 49 52 53 54 57 58 60 61 # 27737 revdifference c a 63 0 0 f b 63 0 0 f # 27738 revdifference c a 63 0 0 f b 63 1 0 e # 27739 revdifference c a 63 0 0 f b 63 0 0 f # 27740 revdifference c a 63 0 0 f b 63 1 0 f # 27741 revdifference c a 63 0 0 f b 63 0 0 f # 27742 revdifference c a 63 0 0 f b 63 1 0 1 4 5 7 8 9 10 11 12 14 15 17 20 21 23 26 30 31 34 39 41 42 45 48 50 55 56 60 # 27743 revdifference c a 63 0 0 3 4 5 6 7 9 10 13 14 15 18 19 20 25 26 27 29 30 31 36 38 41 42 43 47 48 50 54 55 57 59 60 b 63 0 0 3 4 5 6 7 9 10 13 14 15 18 19 20 25 26 27 29 30 31 36 38 41 42 43 47 48 50 54 55 57 59 60 # 27744 revdifference c a 63 0 0 3 4 5 6 7 9 10 13 14 15 18 19 20 25 26 27 29 30 31 36 38 41 42 43 47 48 50 54 55 57 59 60 b 63 1 0 e # 27745 revdifference c a 63 0 0 1 2 4 7 8 10 11 12 15 16 18 20 23 28 29 30 33 34 41 42 46 48 49 50 51 52 57 58 62 b 63 0 0 1 2 4 7 8 10 11 12 15 16 18 20 23 28 29 30 33 34 41 42 46 48 49 50 51 52 57 58 62 # 27746 revdifference c a 63 0 0 1 2 4 7 8 10 11 12 15 16 18 20 23 28 29 30 33 34 41 42 46 48 49 50 51 52 57 58 62 b 63 1 0 f # 27747 revdifference c a 63 0 0 0 5 7 10 12 13 15 16 18 21 22 23 25 27 29 30 35 36 37 42 47 49 51 52 57 60 62 b 63 0 0 0 5 7 10 12 13 15 16 18 21 22 23 25 27 29 30 35 36 37 42 47 49 51 52 57 60 62 # 27748 revdifference c a 63 0 0 0 5 7 10 12 13 15 16 18 21 22 23 25 27 29 30 35 36 37 42 47 49 51 52 57 60 62 b 63 1 0 3 7 8 9 11 12 13 15 19 21 23 27 31 32 33 34 36 39 40 41 42 43 45 46 47 50 55 56 60 61 62 # 27749 revdifference c a 63 0 0 e b 63 0 0 e # 27750 revdifference c a 63 0 0 e b 63 1 1 e # 27751 revdifference c a 63 0 0 e b 63 0 0 e # 27752 revdifference c a 63 0 0 e b 63 1 1 f # 27753 revdifference c a 63 0 0 e b 63 0 0 e # 27754 revdifference c a 63 0 0 e b 63 1 1 0 1 2 4 5 6 8 11 12 14 15 19 20 21 23 25 27 28 30 31 32 35 37 44 48 49 51 54 55 57 58 59 62 # 27755 revdifference c a 63 0 0 f b 63 0 0 f # 27756 revdifference c a 63 0 0 f b 63 1 1 e # 27757 revdifference c a 63 0 0 f b 63 0 0 f # 27758 revdifference c a 63 0 0 f b 63 1 1 f # 27759 revdifference c a 63 0 0 f b 63 0 0 f # 27760 revdifference c a 63 0 0 f b 63 1 1 1 2 3 5 7 9 11 13 15 16 17 18 19 22 24 25 27 28 29 32 39 41 42 43 44 47 50 51 52 55 61 # 27761 revdifference c a 63 0 0 0 2 4 7 10 12 14 15 21 23 25 30 32 33 35 36 37 38 41 42 46 47 48 50 51 54 55 59 60 62 b 63 0 0 0 2 4 7 10 12 14 15 21 23 25 30 32 33 35 36 37 38 41 42 46 47 48 50 51 54 55 59 60 62 # 27762 revdifference c a 63 0 0 0 2 4 7 10 12 14 15 21 23 25 30 32 33 35 36 37 38 41 42 46 47 48 50 51 54 55 59 60 62 b 63 1 1 e # 27763 revdifference c a 63 0 0 0 1 3 4 6 8 9 11 13 14 15 18 20 23 24 25 26 27 28 30 31 34 36 37 38 40 41 44 48 50 51 52 54 55 57 60 b 63 0 0 0 1 3 4 6 8 9 11 13 14 15 18 20 23 24 25 26 27 28 30 31 34 36 37 38 40 41 44 48 50 51 52 54 55 57 60 # 27764 revdifference c a 63 0 0 0 1 3 4 6 8 9 11 13 14 15 18 20 23 24 25 26 27 28 30 31 34 36 37 38 40 41 44 48 50 51 52 54 55 57 60 b 63 1 1 f # 27765 revdifference c a 63 0 0 7 12 13 14 16 17 18 19 20 26 27 30 32 34 35 38 39 41 44 45 46 48 49 51 52 53 56 62 b 63 0 0 7 12 13 14 16 17 18 19 20 26 27 30 32 34 35 38 39 41 44 45 46 48 49 51 52 53 56 62 # 27766 revdifference c a 63 0 0 7 12 13 14 16 17 18 19 20 26 27 30 32 34 35 38 39 41 44 45 46 48 49 51 52 53 56 62 b 63 1 1 2 4 5 6 7 9 10 11 12 13 14 16 19 22 23 28 31 32 33 35 36 38 41 43 44 47 48 49 52 56 58 60 61 # 27767 revdifference c a 63 0 1 e b 63 0 1 e # 27768 revdifference c a 63 0 1 e b 63 0 0 e # 27769 revdifference c a 63 0 1 e b 63 0 1 e # 27770 revdifference c a 63 0 1 e b 63 0 0 f # 27771 revdifference c a 63 0 1 e b 63 0 1 e # 27772 revdifference c a 63 0 1 e b 63 0 0 0 1 2 3 4 5 6 10 15 16 21 24 25 28 30 31 34 37 38 39 41 42 44 47 48 49 51 52 53 55 56 57 58 59 60 61 62 # 27773 revdifference c a 63 0 1 f b 63 0 1 f # 27774 revdifference c a 63 0 1 f b 63 0 0 e # 27775 revdifference c a 63 0 1 f b 63 0 1 f # 27776 revdifference c a 63 0 1 f b 63 0 0 f # 27777 revdifference c a 63 0 1 f b 63 0 1 f # 27778 revdifference c a 63 0 1 f b 63 0 0 2 4 8 9 12 13 14 15 16 17 19 20 21 24 25 28 33 34 37 38 40 43 46 47 48 50 51 53 55 56 57 59 60 61 # 27779 revdifference c a 63 0 1 1 2 3 5 8 9 10 11 12 14 15 18 19 21 24 25 26 27 28 29 30 33 35 36 37 39 42 45 47 50 51 52 53 55 56 59 60 b 63 0 1 1 2 3 5 8 9 10 11 12 14 15 18 19 21 24 25 26 27 28 29 30 33 35 36 37 39 42 45 47 50 51 52 53 55 56 59 60 # 27780 revdifference c a 63 0 1 1 2 3 5 8 9 10 11 12 14 15 18 19 21 24 25 26 27 28 29 30 33 35 36 37 39 42 45 47 50 51 52 53 55 56 59 60 b 63 0 0 e # 27781 revdifference c a 63 0 1 2 8 9 14 15 16 18 21 22 23 24 25 27 28 29 33 34 35 40 41 42 45 49 50 52 57 60 62 b 63 0 1 2 8 9 14 15 16 18 21 22 23 24 25 27 28 29 33 34 35 40 41 42 45 49 50 52 57 60 62 # 27782 revdifference c a 63 0 1 2 8 9 14 15 16 18 21 22 23 24 25 27 28 29 33 34 35 40 41 42 45 49 50 52 57 60 62 b 63 0 0 f # 27783 revdifference c a 63 0 1 2 4 5 6 8 9 15 16 21 22 23 25 26 27 28 30 32 33 34 35 36 37 39 40 41 42 46 48 54 55 56 57 58 59 61 62 b 63 0 1 2 4 5 6 8 9 15 16 21 22 23 25 26 27 28 30 32 33 34 35 36 37 39 40 41 42 46 48 54 55 56 57 58 59 61 62 # 27784 revdifference c a 63 0 1 2 4 5 6 8 9 15 16 21 22 23 25 26 27 28 30 32 33 34 35 36 37 39 40 41 42 46 48 54 55 56 57 58 59 61 62 b 63 0 0 1 2 6 9 13 15 16 17 19 22 25 31 33 35 38 39 43 44 45 46 47 48 49 50 53 54 55 56 60 # 27785 revdifference c a 63 0 1 e b 63 0 1 e # 27786 revdifference c a 63 0 1 e b 63 0 1 e # 27787 revdifference c a 63 0 1 e b 63 0 1 e # 27788 revdifference c a 63 0 1 e b 63 0 1 f # 27789 revdifference c a 63 0 1 e b 63 0 1 e # 27790 revdifference c a 63 0 1 e b 63 0 1 0 2 3 4 6 7 8 9 10 11 12 13 15 19 20 23 24 25 29 37 38 40 41 42 43 44 46 48 50 51 54 58 59 60 # 27791 revdifference c a 63 0 1 f b 63 0 1 f # 27792 revdifference c a 63 0 1 f b 63 0 1 e # 27793 revdifference c a 63 0 1 f b 63 0 1 f # 27794 revdifference c a 63 0 1 f b 63 0 1 f # 27795 revdifference c a 63 0 1 f b 63 0 1 f # 27796 revdifference c a 63 0 1 f b 63 0 1 4 13 16 19 20 21 22 25 27 28 32 33 34 35 39 40 43 47 48 49 50 51 52 57 62 # 27797 revdifference c a 63 0 1 5 9 13 14 16 17 18 19 20 24 29 31 33 34 35 38 39 43 46 49 53 54 58 59 b 63 0 1 5 9 13 14 16 17 18 19 20 24 29 31 33 34 35 38 39 43 46 49 53 54 58 59 # 27798 revdifference c a 63 0 1 5 9 13 14 16 17 18 19 20 24 29 31 33 34 35 38 39 43 46 49 53 54 58 59 b 63 0 1 e # 27799 revdifference c a 63 0 1 1 5 9 10 15 16 20 28 30 35 37 39 42 43 44 47 49 52 53 57 58 59 b 63 0 1 1 5 9 10 15 16 20 28 30 35 37 39 42 43 44 47 49 52 53 57 58 59 # 27800 revdifference c a 63 0 1 1 5 9 10 15 16 20 28 30 35 37 39 42 43 44 47 49 52 53 57 58 59 b 63 0 1 f # 27801 revdifference c a 63 0 1 0 1 2 3 4 7 8 9 10 11 12 13 15 17 19 20 21 25 29 31 34 36 37 39 40 41 44 45 48 51 55 58 59 62 b 63 0 1 0 1 2 3 4 7 8 9 10 11 12 13 15 17 19 20 21 25 29 31 34 36 37 39 40 41 44 45 48 51 55 58 59 62 # 27802 revdifference c a 63 0 1 0 1 2 3 4 7 8 9 10 11 12 13 15 17 19 20 21 25 29 31 34 36 37 39 40 41 44 45 48 51 55 58 59 62 b 63 0 1 0 1 10 11 14 15 19 20 21 23 25 26 27 28 30 31 32 34 36 38 39 40 42 44 45 49 54 55 57 58 60 62 # 27803 revdifference c a 63 0 1 e b 63 0 1 e # 27804 revdifference c a 63 0 1 e b 63 1 0 e # 27805 revdifference c a 63 0 1 e b 63 0 1 e # 27806 revdifference c a 63 0 1 e b 63 1 0 f # 27807 revdifference c a 63 0 1 e b 63 0 1 e # 27808 revdifference c a 63 0 1 e b 63 1 0 0 1 2 9 11 12 13 15 20 21 24 29 34 35 36 37 40 41 44 45 47 48 49 51 53 58 61 62 # 27809 revdifference c a 63 0 1 f b 63 0 1 f # 27810 revdifference c a 63 0 1 f b 63 1 0 e # 27811 revdifference c a 63 0 1 f b 63 0 1 f # 27812 revdifference c a 63 0 1 f b 63 1 0 f # 27813 revdifference c a 63 0 1 f b 63 0 1 f # 27814 revdifference c a 63 0 1 f b 63 1 0 0 3 4 9 11 12 15 17 19 23 25 26 27 28 29 30 31 32 35 36 37 39 40 41 42 44 45 48 52 60 61 62 # 27815 revdifference c a 63 0 1 0 3 4 7 8 9 10 12 13 14 16 20 21 22 25 28 31 32 33 34 35 38 42 47 48 49 51 52 53 54 56 58 59 60 62 b 63 0 1 0 3 4 7 8 9 10 12 13 14 16 20 21 22 25 28 31 32 33 34 35 38 42 47 48 49 51 52 53 54 56 58 59 60 62 # 27816 revdifference c a 63 0 1 0 3 4 7 8 9 10 12 13 14 16 20 21 22 25 28 31 32 33 34 35 38 42 47 48 49 51 52 53 54 56 58 59 60 62 b 63 1 0 e # 27817 revdifference c a 63 0 1 0 2 7 9 11 12 13 15 16 25 28 31 32 38 39 42 45 50 52 54 55 60 62 b 63 0 1 0 2 7 9 11 12 13 15 16 25 28 31 32 38 39 42 45 50 52 54 55 60 62 # 27818 revdifference c a 63 0 1 0 2 7 9 11 12 13 15 16 25 28 31 32 38 39 42 45 50 52 54 55 60 62 b 63 1 0 f # 27819 revdifference c a 63 0 1 1 3 5 6 8 10 12 13 15 17 18 19 20 21 22 23 25 26 28 33 34 37 38 40 41 42 43 44 46 47 50 51 54 55 57 61 b 63 0 1 1 3 5 6 8 10 12 13 15 17 18 19 20 21 22 23 25 26 28 33 34 37 38 40 41 42 43 44 46 47 50 51 54 55 57 61 # 27820 revdifference c a 63 0 1 1 3 5 6 8 10 12 13 15 17 18 19 20 21 22 23 25 26 28 33 34 37 38 40 41 42 43 44 46 47 50 51 54 55 57 61 b 63 1 0 3 4 6 11 14 16 18 19 20 24 26 30 31 32 34 35 37 39 41 42 46 47 48 49 50 54 57 59 62 # 27821 revdifference c a 63 0 1 e b 63 0 1 e # 27822 revdifference c a 63 0 1 e b 63 1 1 e # 27823 revdifference c a 63 0 1 e b 63 0 1 e # 27824 revdifference c a 63 0 1 e b 63 1 1 f # 27825 revdifference c a 63 0 1 e b 63 0 1 e # 27826 revdifference c a 63 0 1 e b 63 1 1 2 4 5 6 7 8 12 13 15 16 17 21 25 26 32 34 35 36 39 40 41 43 44 45 47 48 49 50 51 52 55 60 62 # 27827 revdifference c a 63 0 1 f b 63 0 1 f # 27828 revdifference c a 63 0 1 f b 63 1 1 e # 27829 revdifference c a 63 0 1 f b 63 0 1 f # 27830 revdifference c a 63 0 1 f b 63 1 1 f # 27831 revdifference c a 63 0 1 f b 63 0 1 f # 27832 revdifference c a 63 0 1 f b 63 1 1 1 2 4 6 7 9 11 12 13 16 19 21 24 25 29 31 32 37 39 40 42 46 48 50 51 56 57 58 60 # 27833 revdifference c a 63 0 1 2 3 4 5 7 9 11 13 14 20 21 22 23 24 26 29 30 31 34 37 39 40 41 42 43 45 47 49 51 52 54 56 57 58 59 60 62 b 63 0 1 2 3 4 5 7 9 11 13 14 20 21 22 23 24 26 29 30 31 34 37 39 40 41 42 43 45 47 49 51 52 54 56 57 58 59 60 62 # 27834 revdifference c a 63 0 1 2 3 4 5 7 9 11 13 14 20 21 22 23 24 26 29 30 31 34 37 39 40 41 42 43 45 47 49 51 52 54 56 57 58 59 60 62 b 63 1 1 e # 27835 revdifference c a 63 0 1 1 3 6 7 9 10 14 16 17 18 19 21 22 23 24 26 27 33 39 40 42 44 45 51 53 54 55 57 58 59 60 b 63 0 1 1 3 6 7 9 10 14 16 17 18 19 21 22 23 24 26 27 33 39 40 42 44 45 51 53 54 55 57 58 59 60 # 27836 revdifference c a 63 0 1 1 3 6 7 9 10 14 16 17 18 19 21 22 23 24 26 27 33 39 40 42 44 45 51 53 54 55 57 58 59 60 b 63 1 1 f # 27837 revdifference c a 63 0 1 3 4 5 8 11 15 16 17 18 19 20 21 22 23 26 29 31 33 35 36 37 41 45 47 48 50 51 54 55 56 58 b 63 0 1 3 4 5 8 11 15 16 17 18 19 20 21 22 23 26 29 31 33 35 36 37 41 45 47 48 50 51 54 55 56 58 # 27838 revdifference c a 63 0 1 3 4 5 8 11 15 16 17 18 19 20 21 22 23 26 29 31 33 35 36 37 41 45 47 48 50 51 54 55 56 58 b 63 1 1 0 2 3 7 8 16 17 19 20 21 23 24 25 26 32 34 35 36 38 41 42 43 48 49 50 51 54 59 60 61 # 27839 revdifference c a 63 1 0 e b 63 1 0 e # 27840 revdifference c a 63 1 0 e b 63 0 0 e # 27841 revdifference c a 63 1 0 e b 63 1 0 e # 27842 revdifference c a 63 1 0 e b 63 0 0 f # 27843 revdifference c a 63 1 0 e b 63 1 0 e # 27844 revdifference c a 63 1 0 e b 63 0 0 4 8 11 15 18 20 23 24 25 27 30 31 32 35 36 37 39 40 42 44 49 50 55 56 57 58 61 # 27845 revdifference c a 63 1 0 f b 63 1 0 f # 27846 revdifference c a 63 1 0 f b 63 0 0 e # 27847 revdifference c a 63 1 0 f b 63 1 0 f # 27848 revdifference c a 63 1 0 f b 63 0 0 f # 27849 revdifference c a 63 1 0 f b 63 1 0 f # 27850 revdifference c a 63 1 0 f b 63 0 0 0 1 2 3 4 5 6 8 15 16 18 20 23 27 35 36 39 40 41 42 48 51 53 55 57 59 61 # 27851 revdifference c a 63 1 0 1 4 5 6 7 9 10 11 12 14 18 19 20 21 24 26 27 28 29 30 32 34 35 37 39 46 47 48 50 54 56 57 58 60 61 62 b 63 1 0 1 4 5 6 7 9 10 11 12 14 18 19 20 21 24 26 27 28 29 30 32 34 35 37 39 46 47 48 50 54 56 57 58 60 61 62 # 27852 revdifference c a 63 1 0 1 4 5 6 7 9 10 11 12 14 18 19 20 21 24 26 27 28 29 30 32 34 35 37 39 46 47 48 50 54 56 57 58 60 61 62 b 63 0 0 e # 27853 revdifference c a 63 1 0 4 6 8 9 10 14 18 19 20 22 23 24 25 26 29 31 33 36 37 38 39 40 41 42 45 46 49 52 53 55 56 61 b 63 1 0 4 6 8 9 10 14 18 19 20 22 23 24 25 26 29 31 33 36 37 38 39 40 41 42 45 46 49 52 53 55 56 61 # 27854 revdifference c a 63 1 0 4 6 8 9 10 14 18 19 20 22 23 24 25 26 29 31 33 36 37 38 39 40 41 42 45 46 49 52 53 55 56 61 b 63 0 0 f # 27855 revdifference c a 63 1 0 0 3 6 11 12 14 16 19 26 28 29 30 35 36 38 40 45 46 51 52 55 56 59 b 63 1 0 0 3 6 11 12 14 16 19 26 28 29 30 35 36 38 40 45 46 51 52 55 56 59 # 27856 revdifference c a 63 1 0 0 3 6 11 12 14 16 19 26 28 29 30 35 36 38 40 45 46 51 52 55 56 59 b 63 0 0 2 5 8 10 12 13 14 20 21 22 23 24 27 29 30 31 33 36 38 40 41 42 43 45 47 48 49 50 51 52 53 54 55 56 # 27857 revdifference c a 63 1 0 e b 63 1 0 e # 27858 revdifference c a 63 1 0 e b 63 0 1 e # 27859 revdifference c a 63 1 0 e b 63 1 0 e # 27860 revdifference c a 63 1 0 e b 63 0 1 f # 27861 revdifference c a 63 1 0 e b 63 1 0 e # 27862 revdifference c a 63 1 0 e b 63 0 1 2 3 4 6 9 13 15 16 18 19 20 21 22 23 24 28 29 30 32 35 36 39 40 41 44 45 47 48 50 51 52 53 54 55 57 58 59 60 61 # 27863 revdifference c a 63 1 0 f b 63 1 0 f # 27864 revdifference c a 63 1 0 f b 63 0 1 e # 27865 revdifference c a 63 1 0 f b 63 1 0 f # 27866 revdifference c a 63 1 0 f b 63 0 1 f # 27867 revdifference c a 63 1 0 f b 63 1 0 f # 27868 revdifference c a 63 1 0 f b 63 0 1 0 3 4 5 7 8 9 11 12 13 16 19 21 22 25 29 33 34 36 43 45 49 51 52 54 55 56 61 62 # 27869 revdifference c a 63 1 0 1 2 3 5 6 7 12 14 18 27 28 32 34 37 41 42 46 47 48 49 50 56 57 61 62 b 63 1 0 1 2 3 5 6 7 12 14 18 27 28 32 34 37 41 42 46 47 48 49 50 56 57 61 62 # 27870 revdifference c a 63 1 0 1 2 3 5 6 7 12 14 18 27 28 32 34 37 41 42 46 47 48 49 50 56 57 61 62 b 63 0 1 e # 27871 revdifference c a 63 1 0 1 2 3 5 7 11 13 14 16 17 20 22 25 26 27 28 34 35 36 41 42 43 44 45 47 52 53 54 56 57 58 59 62 b 63 1 0 1 2 3 5 7 11 13 14 16 17 20 22 25 26 27 28 34 35 36 41 42 43 44 45 47 52 53 54 56 57 58 59 62 # 27872 revdifference c a 63 1 0 1 2 3 5 7 11 13 14 16 17 20 22 25 26 27 28 34 35 36 41 42 43 44 45 47 52 53 54 56 57 58 59 62 b 63 0 1 f # 27873 revdifference c a 63 1 0 0 1 2 4 6 7 8 9 10 11 12 13 14 15 19 22 23 24 26 27 28 30 32 33 34 35 36 37 38 39 40 41 43 46 47 48 56 57 61 62 b 63 1 0 0 1 2 4 6 7 8 9 10 11 12 13 14 15 19 22 23 24 26 27 28 30 32 33 34 35 36 37 38 39 40 41 43 46 47 48 56 57 61 62 # 27874 revdifference c a 63 1 0 0 1 2 4 6 7 8 9 10 11 12 13 14 15 19 22 23 24 26 27 28 30 32 33 34 35 36 37 38 39 40 41 43 46 47 48 56 57 61 62 b 63 0 1 1 2 3 4 5 6 8 10 11 12 14 15 19 20 27 30 31 33 34 35 36 39 40 42 43 44 45 46 48 49 51 53 54 55 56 60 # 27875 revdifference c a 63 1 0 e b 63 1 0 e # 27876 revdifference c a 63 1 0 e b 63 1 0 e # 27877 revdifference c a 63 1 0 e b 63 1 0 e # 27878 revdifference c a 63 1 0 e b 63 1 0 f # 27879 revdifference c a 63 1 0 e b 63 1 0 e # 27880 revdifference c a 63 1 0 e b 63 1 0 1 2 4 6 13 15 16 19 20 21 22 24 26 30 33 34 35 39 40 41 43 44 46 47 48 49 52 54 55 57 59 # 27881 revdifference c a 63 1 0 f b 63 1 0 f # 27882 revdifference c a 63 1 0 f b 63 1 0 e # 27883 revdifference c a 63 1 0 f b 63 1 0 f # 27884 revdifference c a 63 1 0 f b 63 1 0 f # 27885 revdifference c a 63 1 0 f b 63 1 0 f # 27886 revdifference c a 63 1 0 f b 63 1 0 1 2 6 7 9 13 14 17 18 19 20 21 22 23 25 29 31 32 35 36 38 40 44 46 55 57 59 60 61 # 27887 revdifference c a 63 1 0 2 5 8 9 10 12 16 17 18 22 24 25 28 30 33 34 35 36 39 40 43 44 46 47 49 52 54 55 59 b 63 1 0 2 5 8 9 10 12 16 17 18 22 24 25 28 30 33 34 35 36 39 40 43 44 46 47 49 52 54 55 59 # 27888 revdifference c a 63 1 0 2 5 8 9 10 12 16 17 18 22 24 25 28 30 33 34 35 36 39 40 43 44 46 47 49 52 54 55 59 b 63 1 0 e # 27889 revdifference c a 63 1 0 0 1 2 3 4 6 10 11 12 14 15 17 18 19 20 22 25 26 29 30 32 33 35 36 41 47 48 50 51 55 57 59 60 b 63 1 0 0 1 2 3 4 6 10 11 12 14 15 17 18 19 20 22 25 26 29 30 32 33 35 36 41 47 48 50 51 55 57 59 60 # 27890 revdifference c a 63 1 0 0 1 2 3 4 6 10 11 12 14 15 17 18 19 20 22 25 26 29 30 32 33 35 36 41 47 48 50 51 55 57 59 60 b 63 1 0 f # 27891 revdifference c a 63 1 0 0 1 2 3 4 5 6 9 11 13 15 16 18 20 22 23 24 25 27 28 29 31 32 33 35 36 38 43 45 46 47 52 56 57 59 b 63 1 0 0 1 2 3 4 5 6 9 11 13 15 16 18 20 22 23 24 25 27 28 29 31 32 33 35 36 38 43 45 46 47 52 56 57 59 # 27892 revdifference c a 63 1 0 0 1 2 3 4 5 6 9 11 13 15 16 18 20 22 23 24 25 27 28 29 31 32 33 35 36 38 43 45 46 47 52 56 57 59 b 63 1 0 2 3 6 7 8 11 12 15 17 19 20 22 25 29 30 33 35 38 40 42 43 44 49 50 53 55 56 57 58 59 60 61 # 27893 revdifference c a 63 1 0 e b 63 1 0 e # 27894 revdifference c a 63 1 0 e b 63 1 1 e # 27895 revdifference c a 63 1 0 e b 63 1 0 e # 27896 revdifference c a 63 1 0 e b 63 1 1 f # 27897 revdifference c a 63 1 0 e b 63 1 0 e # 27898 revdifference c a 63 1 0 e b 63 1 1 2 4 7 9 10 12 14 15 16 18 20 21 22 24 25 27 28 32 34 36 43 44 46 47 48 49 52 53 54 55 56 60 61 62 # 27899 revdifference c a 63 1 0 f b 63 1 0 f # 27900 revdifference c a 63 1 0 f b 63 1 1 e # 27901 revdifference c a 63 1 0 f b 63 1 0 f # 27902 revdifference c a 63 1 0 f b 63 1 1 f # 27903 revdifference c a 63 1 0 f b 63 1 0 f # 27904 revdifference c a 63 1 0 f b 63 1 1 1 3 4 5 7 8 9 11 12 13 14 15 17 19 20 22 23 24 29 31 32 33 34 35 38 44 52 55 56 62 # 27905 revdifference c a 63 1 0 2 4 5 6 10 14 15 16 20 21 23 24 25 26 27 30 31 32 33 36 38 39 43 44 49 50 59 60 62 b 63 1 0 2 4 5 6 10 14 15 16 20 21 23 24 25 26 27 30 31 32 33 36 38 39 43 44 49 50 59 60 62 # 27906 revdifference c a 63 1 0 2 4 5 6 10 14 15 16 20 21 23 24 25 26 27 30 31 32 33 36 38 39 43 44 49 50 59 60 62 b 63 1 1 e # 27907 revdifference c a 63 1 0 1 2 3 4 6 7 8 12 14 16 17 22 24 25 26 28 29 32 35 37 41 42 45 46 49 50 51 57 58 60 61 b 63 1 0 1 2 3 4 6 7 8 12 14 16 17 22 24 25 26 28 29 32 35 37 41 42 45 46 49 50 51 57 58 60 61 # 27908 revdifference c a 63 1 0 1 2 3 4 6 7 8 12 14 16 17 22 24 25 26 28 29 32 35 37 41 42 45 46 49 50 51 57 58 60 61 b 63 1 1 f # 27909 revdifference c a 63 1 0 0 2 3 4 5 7 8 9 10 14 16 17 19 21 22 23 25 28 30 31 32 33 34 37 40 42 44 45 46 47 48 49 52 54 55 60 b 63 1 0 0 2 3 4 5 7 8 9 10 14 16 17 19 21 22 23 25 28 30 31 32 33 34 37 40 42 44 45 46 47 48 49 52 54 55 60 # 27910 revdifference c a 63 1 0 0 2 3 4 5 7 8 9 10 14 16 17 19 21 22 23 25 28 30 31 32 33 34 37 40 42 44 45 46 47 48 49 52 54 55 60 b 63 1 1 0 4 6 9 10 12 13 18 19 20 22 23 24 29 30 31 35 37 39 40 43 44 48 51 52 53 54 55 # 27911 revdifference c a 63 1 1 e b 63 1 1 e # 27912 revdifference c a 63 1 1 e b 63 0 0 e # 27913 revdifference c a 63 1 1 e b 63 1 1 e # 27914 revdifference c a 63 1 1 e b 63 0 0 f # 27915 revdifference c a 63 1 1 e b 63 1 1 e # 27916 revdifference c a 63 1 1 e b 63 0 0 2 4 5 6 7 8 9 10 12 14 17 18 19 20 21 22 24 25 26 29 30 31 33 37 40 42 43 44 47 50 52 53 54 55 56 59 62 # 27917 revdifference c a 63 1 1 f b 63 1 1 f # 27918 revdifference c a 63 1 1 f b 63 0 0 e # 27919 revdifference c a 63 1 1 f b 63 1 1 f # 27920 revdifference c a 63 1 1 f b 63 0 0 f # 27921 revdifference c a 63 1 1 f b 63 1 1 f # 27922 revdifference c a 63 1 1 f b 63 0 0 0 2 4 5 6 7 8 9 10 11 12 15 16 17 18 19 20 22 23 28 29 30 31 32 33 35 36 37 38 39 40 42 43 44 51 52 54 55 57 60 62 # 27923 revdifference c a 63 1 1 0 9 11 13 15 16 17 19 21 22 25 26 29 33 34 36 37 38 40 41 44 45 47 49 50 51 55 59 61 62 b 63 1 1 0 9 11 13 15 16 17 19 21 22 25 26 29 33 34 36 37 38 40 41 44 45 47 49 50 51 55 59 61 62 # 27924 revdifference c a 63 1 1 0 9 11 13 15 16 17 19 21 22 25 26 29 33 34 36 37 38 40 41 44 45 47 49 50 51 55 59 61 62 b 63 0 0 e # 27925 revdifference c a 63 1 1 2 3 5 6 7 9 10 11 13 14 17 18 22 23 24 25 29 31 34 35 36 38 41 43 46 47 48 49 50 53 56 58 59 62 b 63 1 1 2 3 5 6 7 9 10 11 13 14 17 18 22 23 24 25 29 31 34 35 36 38 41 43 46 47 48 49 50 53 56 58 59 62 # 27926 revdifference c a 63 1 1 2 3 5 6 7 9 10 11 13 14 17 18 22 23 24 25 29 31 34 35 36 38 41 43 46 47 48 49 50 53 56 58 59 62 b 63 0 0 f # 27927 revdifference c a 63 1 1 0 3 5 6 7 11 12 14 15 17 18 19 22 23 28 29 30 31 34 35 37 38 39 41 42 45 46 47 48 49 50 53 54 58 61 b 63 1 1 0 3 5 6 7 11 12 14 15 17 18 19 22 23 28 29 30 31 34 35 37 38 39 41 42 45 46 47 48 49 50 53 54 58 61 # 27928 revdifference c a 63 1 1 0 3 5 6 7 11 12 14 15 17 18 19 22 23 28 29 30 31 34 35 37 38 39 41 42 45 46 47 48 49 50 53 54 58 61 b 63 0 0 4 5 6 9 13 16 19 21 22 23 26 28 30 32 33 36 38 42 43 47 49 50 51 52 53 54 55 57 # 27929 revdifference c a 63 1 1 e b 63 1 1 e # 27930 revdifference c a 63 1 1 e b 63 0 1 e # 27931 revdifference c a 63 1 1 e b 63 1 1 e # 27932 revdifference c a 63 1 1 e b 63 0 1 f # 27933 revdifference c a 63 1 1 e b 63 1 1 e # 27934 revdifference c a 63 1 1 e b 63 0 1 0 2 8 9 11 12 15 16 18 19 20 21 22 23 25 27 28 29 31 32 36 37 38 39 40 41 42 43 46 49 52 57 58 60 # 27935 revdifference c a 63 1 1 f b 63 1 1 f # 27936 revdifference c a 63 1 1 f b 63 0 1 e # 27937 revdifference c a 63 1 1 f b 63 1 1 f # 27938 revdifference c a 63 1 1 f b 63 0 1 f # 27939 revdifference c a 63 1 1 f b 63 1 1 f # 27940 revdifference c a 63 1 1 f b 63 0 1 0 2 3 5 6 7 9 10 13 14 15 17 19 21 23 24 26 29 31 34 35 36 37 38 42 43 45 47 49 50 51 54 56 58 # 27941 revdifference c a 63 1 1 0 3 5 7 9 10 14 16 19 20 21 22 24 28 31 32 33 36 37 40 44 46 47 48 50 51 56 58 60 b 63 1 1 0 3 5 7 9 10 14 16 19 20 21 22 24 28 31 32 33 36 37 40 44 46 47 48 50 51 56 58 60 # 27942 revdifference c a 63 1 1 0 3 5 7 9 10 14 16 19 20 21 22 24 28 31 32 33 36 37 40 44 46 47 48 50 51 56 58 60 b 63 0 1 e # 27943 revdifference c a 63 1 1 0 1 2 4 5 6 7 8 12 13 15 17 21 23 24 25 28 29 31 32 36 39 40 41 42 43 44 48 49 52 53 54 55 56 58 59 62 b 63 1 1 0 1 2 4 5 6 7 8 12 13 15 17 21 23 24 25 28 29 31 32 36 39 40 41 42 43 44 48 49 52 53 54 55 56 58 59 62 # 27944 revdifference c a 63 1 1 0 1 2 4 5 6 7 8 12 13 15 17 21 23 24 25 28 29 31 32 36 39 40 41 42 43 44 48 49 52 53 54 55 56 58 59 62 b 63 0 1 f # 27945 revdifference c a 63 1 1 0 1 4 5 6 8 9 12 13 14 15 16 17 19 20 22 23 26 28 31 32 33 35 36 39 41 43 46 52 54 56 57 58 60 b 63 1 1 0 1 4 5 6 8 9 12 13 14 15 16 17 19 20 22 23 26 28 31 32 33 35 36 39 41 43 46 52 54 56 57 58 60 # 27946 revdifference c a 63 1 1 0 1 4 5 6 8 9 12 13 14 15 16 17 19 20 22 23 26 28 31 32 33 35 36 39 41 43 46 52 54 56 57 58 60 b 63 0 1 0 3 5 6 8 9 11 13 14 16 18 21 23 24 25 26 28 31 32 33 34 36 37 38 39 42 43 44 45 47 49 51 52 54 55 57 58 # 27947 revdifference c a 63 1 1 e b 63 1 1 e # 27948 revdifference c a 63 1 1 e b 63 1 0 e # 27949 revdifference c a 63 1 1 e b 63 1 1 e # 27950 revdifference c a 63 1 1 e b 63 1 0 f # 27951 revdifference c a 63 1 1 e b 63 1 1 e # 27952 revdifference c a 63 1 1 e b 63 1 0 3 5 7 9 10 12 15 16 18 24 25 29 30 37 39 42 44 46 48 49 50 54 57 58 60 61 62 # 27953 revdifference c a 63 1 1 f b 63 1 1 f # 27954 revdifference c a 63 1 1 f b 63 1 0 e # 27955 revdifference c a 63 1 1 f b 63 1 1 f # 27956 revdifference c a 63 1 1 f b 63 1 0 f # 27957 revdifference c a 63 1 1 f b 63 1 1 f # 27958 revdifference c a 63 1 1 f b 63 1 0 0 5 6 11 12 13 14 16 17 21 22 23 24 25 26 28 29 31 32 33 36 38 41 42 44 45 46 50 51 53 56 58 60 # 27959 revdifference c a 63 1 1 0 1 4 5 7 10 11 12 13 14 19 21 23 24 25 28 29 31 32 33 36 39 40 42 43 48 53 54 56 61 b 63 1 1 0 1 4 5 7 10 11 12 13 14 19 21 23 24 25 28 29 31 32 33 36 39 40 42 43 48 53 54 56 61 # 27960 revdifference c a 63 1 1 0 1 4 5 7 10 11 12 13 14 19 21 23 24 25 28 29 31 32 33 36 39 40 42 43 48 53 54 56 61 b 63 1 0 e # 27961 revdifference c a 63 1 1 0 1 4 5 6 7 8 12 13 14 16 18 19 20 21 22 23 27 28 31 33 36 38 40 42 45 46 48 51 54 55 56 58 60 61 b 63 1 1 0 1 4 5 6 7 8 12 13 14 16 18 19 20 21 22 23 27 28 31 33 36 38 40 42 45 46 48 51 54 55 56 58 60 61 # 27962 revdifference c a 63 1 1 0 1 4 5 6 7 8 12 13 14 16 18 19 20 21 22 23 27 28 31 33 36 38 40 42 45 46 48 51 54 55 56 58 60 61 b 63 1 0 f # 27963 revdifference c a 63 1 1 1 5 7 9 10 11 13 14 15 16 18 24 26 29 30 32 34 36 43 44 46 47 49 51 52 55 56 62 b 63 1 1 1 5 7 9 10 11 13 14 15 16 18 24 26 29 30 32 34 36 43 44 46 47 49 51 52 55 56 62 # 27964 revdifference c a 63 1 1 1 5 7 9 10 11 13 14 15 16 18 24 26 29 30 32 34 36 43 44 46 47 49 51 52 55 56 62 b 63 1 0 0 2 7 8 9 11 12 13 18 25 26 28 29 31 33 35 37 38 39 42 46 50 51 52 54 55 56 57 59 60 61 62 # 27965 revdifference c a 63 1 1 e b 63 1 1 e # 27966 revdifference c a 63 1 1 e b 63 1 1 e # 27967 revdifference c a 63 1 1 e b 63 1 1 e # 27968 revdifference c a 63 1 1 e b 63 1 1 f # 27969 revdifference c a 63 1 1 e b 63 1 1 e # 27970 revdifference c a 63 1 1 e b 63 1 1 1 4 5 7 9 10 11 12 13 17 20 23 25 28 29 31 32 33 35 36 38 42 46 47 49 54 55 61 # 27971 revdifference c a 63 1 1 f b 63 1 1 f # 27972 revdifference c a 63 1 1 f b 63 1 1 e # 27973 revdifference c a 63 1 1 f b 63 1 1 f # 27974 revdifference c a 63 1 1 f b 63 1 1 f # 27975 revdifference c a 63 1 1 f b 63 1 1 f # 27976 revdifference c a 63 1 1 f b 63 1 1 0 1 3 5 7 9 10 16 18 19 20 22 23 24 27 32 33 36 37 39 40 41 45 46 47 48 50 51 52 53 57 59 60 61 # 27977 revdifference c a 63 1 1 0 6 8 9 10 12 14 15 18 21 22 23 27 29 33 34 35 36 37 38 39 41 47 48 50 51 53 54 55 57 58 59 60 61 b 63 1 1 0 6 8 9 10 12 14 15 18 21 22 23 27 29 33 34 35 36 37 38 39 41 47 48 50 51 53 54 55 57 58 59 60 61 # 27978 revdifference c a 63 1 1 0 6 8 9 10 12 14 15 18 21 22 23 27 29 33 34 35 36 37 38 39 41 47 48 50 51 53 54 55 57 58 59 60 61 b 63 1 1 e # 27979 revdifference c a 63 1 1 1 4 5 7 9 10 11 15 16 17 18 19 21 22 24 25 26 27 28 29 30 32 37 39 40 42 43 46 49 51 52 54 55 56 57 59 60 62 b 63 1 1 1 4 5 7 9 10 11 15 16 17 18 19 21 22 24 25 26 27 28 29 30 32 37 39 40 42 43 46 49 51 52 54 55 56 57 59 60 62 # 27980 revdifference c a 63 1 1 1 4 5 7 9 10 11 15 16 17 18 19 21 22 24 25 26 27 28 29 30 32 37 39 40 42 43 46 49 51 52 54 55 56 57 59 60 62 b 63 1 1 f # 27981 revdifference c a 63 1 1 0 1 4 7 8 9 11 13 14 15 16 17 19 20 22 25 26 28 33 34 36 38 39 40 42 45 46 48 50 51 52 53 60 61 62 b 63 1 1 0 1 4 7 8 9 11 13 14 15 16 17 19 20 22 25 26 28 33 34 36 38 39 40 42 45 46 48 50 51 52 53 60 61 62 # 27982 revdifference c a 63 1 1 0 1 4 7 8 9 11 13 14 15 16 17 19 20 22 25 26 28 33 34 36 38 39 40 42 45 46 48 50 51 52 53 60 61 62 b 63 1 1 0 5 8 9 11 12 14 20 21 25 26 27 32 33 34 36 37 38 40 43 44 46 48 50 51 54 55 56 57 61 62 # 27983 revdifference c a 64 0 0 e b 64 0 0 e # 27984 revdifference c a 64 0 0 e b 64 0 0 e # 27985 revdifference c a 64 0 0 e b 64 0 0 e # 27986 revdifference c a 64 0 0 e b 64 0 0 f # 27987 revdifference c a 64 0 0 e b 64 0 0 e # 27988 revdifference c a 64 0 0 e b 64 0 0 1 2 3 4 5 6 10 15 16 19 20 21 22 24 26 28 29 31 32 33 34 35 36 38 40 41 43 44 45 46 47 50 51 52 55 56 58 59 62 # 27989 revdifference c a 64 0 0 f b 64 0 0 f # 27990 revdifference c a 64 0 0 f b 64 0 0 e # 27991 revdifference c a 64 0 0 f b 64 0 0 f # 27992 revdifference c a 64 0 0 f b 64 0 0 f # 27993 revdifference c a 64 0 0 f b 64 0 0 f # 27994 revdifference c a 64 0 0 f b 64 0 0 3 4 7 8 9 10 11 14 15 16 17 18 19 24 26 28 29 30 31 33 34 38 40 41 47 48 49 50 55 56 61 # 27995 revdifference c a 64 0 0 0 2 4 5 7 9 11 12 14 15 19 20 21 22 25 26 28 30 31 32 33 35 37 39 41 42 47 48 49 51 55 60 63 b 64 0 0 0 2 4 5 7 9 11 12 14 15 19 20 21 22 25 26 28 30 31 32 33 35 37 39 41 42 47 48 49 51 55 60 63 # 27996 revdifference c a 64 0 0 0 2 4 5 7 9 11 12 14 15 19 20 21 22 25 26 28 30 31 32 33 35 37 39 41 42 47 48 49 51 55 60 63 b 64 0 0 e # 27997 revdifference c a 64 0 0 0 5 7 8 11 12 13 14 15 19 21 22 23 24 25 26 27 32 33 34 35 36 38 39 41 42 44 46 48 53 54 56 57 58 63 b 64 0 0 0 5 7 8 11 12 13 14 15 19 21 22 23 24 25 26 27 32 33 34 35 36 38 39 41 42 44 46 48 53 54 56 57 58 63 # 27998 revdifference c a 64 0 0 0 5 7 8 11 12 13 14 15 19 21 22 23 24 25 26 27 32 33 34 35 36 38 39 41 42 44 46 48 53 54 56 57 58 63 b 64 0 0 f # 27999 revdifference c a 64 0 0 2 5 7 8 9 14 16 17 19 20 23 27 28 29 30 32 33 34 37 40 41 42 44 46 47 50 52 53 57 58 59 61 b 64 0 0 2 5 7 8 9 14 16 17 19 20 23 27 28 29 30 32 33 34 37 40 41 42 44 46 47 50 52 53 57 58 59 61 # 28000 revdifference c a 64 0 0 2 5 7 8 9 14 16 17 19 20 23 27 28 29 30 32 33 34 37 40 41 42 44 46 47 50 52 53 57 58 59 61 b 64 0 0 1 2 3 4 7 9 14 15 17 20 21 23 24 26 30 31 33 34 37 40 41 42 44 45 49 50 52 55 56 58 59 61 62 63 # 28001 revdifference c a 64 0 0 e b 64 0 0 e # 28002 revdifference c a 64 0 0 e b 64 0 1 e # 28003 revdifference c a 64 0 0 e b 64 0 0 e # 28004 revdifference c a 64 0 0 e b 64 0 1 f # 28005 revdifference c a 64 0 0 e b 64 0 0 e # 28006 revdifference c a 64 0 0 e b 64 0 1 2 3 8 9 10 11 12 21 24 28 29 35 44 45 49 50 51 52 54 55 62 63 # 28007 revdifference c a 64 0 0 f b 64 0 0 f # 28008 revdifference c a 64 0 0 f b 64 0 1 e # 28009 revdifference c a 64 0 0 f b 64 0 0 f # 28010 revdifference c a 64 0 0 f b 64 0 1 f # 28011 revdifference c a 64 0 0 f b 64 0 0 f # 28012 revdifference c a 64 0 0 f b 64 0 1 0 2 4 6 8 11 13 16 19 23 25 27 31 32 37 38 42 46 50 51 54 55 58 60 63 # 28013 revdifference c a 64 0 0 1 3 4 5 7 14 15 16 17 18 21 25 26 31 34 35 37 38 39 43 44 45 46 47 48 49 50 51 52 58 60 61 b 64 0 0 1 3 4 5 7 14 15 16 17 18 21 25 26 31 34 35 37 38 39 43 44 45 46 47 48 49 50 51 52 58 60 61 # 28014 revdifference c a 64 0 0 1 3 4 5 7 14 15 16 17 18 21 25 26 31 34 35 37 38 39 43 44 45 46 47 48 49 50 51 52 58 60 61 b 64 0 1 e # 28015 revdifference c a 64 0 0 1 3 4 6 8 9 10 11 12 13 15 18 20 23 24 27 29 30 31 32 34 35 38 41 42 44 48 49 51 53 54 55 58 60 61 63 b 64 0 0 1 3 4 6 8 9 10 11 12 13 15 18 20 23 24 27 29 30 31 32 34 35 38 41 42 44 48 49 51 53 54 55 58 60 61 63 # 28016 revdifference c a 64 0 0 1 3 4 6 8 9 10 11 12 13 15 18 20 23 24 27 29 30 31 32 34 35 38 41 42 44 48 49 51 53 54 55 58 60 61 63 b 64 0 1 f # 28017 revdifference c a 64 0 0 0 1 6 7 9 13 16 17 18 19 20 21 22 24 25 26 27 29 30 32 34 36 37 41 43 44 45 46 48 49 51 52 55 57 58 59 60 63 b 64 0 0 0 1 6 7 9 13 16 17 18 19 20 21 22 24 25 26 27 29 30 32 34 36 37 41 43 44 45 46 48 49 51 52 55 57 58 59 60 63 # 28018 revdifference c a 64 0 0 0 1 6 7 9 13 16 17 18 19 20 21 22 24 25 26 27 29 30 32 34 36 37 41 43 44 45 46 48 49 51 52 55 57 58 59 60 63 b 64 0 1 0 4 5 6 8 11 17 19 22 28 31 32 33 35 36 37 39 42 44 45 46 47 48 49 50 51 53 55 57 61 62 63 # 28019 revdifference c a 64 0 0 e b 64 0 0 e # 28020 revdifference c a 64 0 0 e b 64 1 0 e # 28021 revdifference c a 64 0 0 e b 64 0 0 e # 28022 revdifference c a 64 0 0 e b 64 1 0 f # 28023 revdifference c a 64 0 0 e b 64 0 0 e # 28024 revdifference c a 64 0 0 e b 64 1 0 0 2 3 5 6 9 10 12 13 16 20 21 24 25 27 28 30 31 32 33 34 35 36 37 45 46 47 48 51 55 57 58 59 61 62 63 # 28025 revdifference c a 64 0 0 f b 64 0 0 f # 28026 revdifference c a 64 0 0 f b 64 1 0 e # 28027 revdifference c a 64 0 0 f b 64 0 0 f # 28028 revdifference c a 64 0 0 f b 64 1 0 f # 28029 revdifference c a 64 0 0 f b 64 0 0 f # 28030 revdifference c a 64 0 0 f b 64 1 0 0 2 6 7 8 10 12 13 15 16 18 20 24 29 31 35 36 39 42 48 51 52 53 54 55 56 58 63 # 28031 revdifference c a 64 0 0 1 4 5 6 9 10 11 14 15 16 18 19 21 24 28 29 30 38 39 41 42 43 45 46 53 54 59 60 b 64 0 0 1 4 5 6 9 10 11 14 15 16 18 19 21 24 28 29 30 38 39 41 42 43 45 46 53 54 59 60 # 28032 revdifference c a 64 0 0 1 4 5 6 9 10 11 14 15 16 18 19 21 24 28 29 30 38 39 41 42 43 45 46 53 54 59 60 b 64 1 0 e # 28033 revdifference c a 64 0 0 0 1 2 5 7 8 12 14 16 18 19 20 24 25 27 34 41 42 44 45 46 47 48 50 51 52 53 55 56 59 60 61 b 64 0 0 0 1 2 5 7 8 12 14 16 18 19 20 24 25 27 34 41 42 44 45 46 47 48 50 51 52 53 55 56 59 60 61 # 28034 revdifference c a 64 0 0 0 1 2 5 7 8 12 14 16 18 19 20 24 25 27 34 41 42 44 45 46 47 48 50 51 52 53 55 56 59 60 61 b 64 1 0 f # 28035 revdifference c a 64 0 0 0 1 2 5 7 8 11 12 13 15 18 23 24 25 26 27 30 33 34 36 45 47 48 52 53 59 63 b 64 0 0 0 1 2 5 7 8 11 12 13 15 18 23 24 25 26 27 30 33 34 36 45 47 48 52 53 59 63 # 28036 revdifference c a 64 0 0 0 1 2 5 7 8 11 12 13 15 18 23 24 25 26 27 30 33 34 36 45 47 48 52 53 59 63 b 64 1 0 0 3 7 8 13 17 20 21 22 24 25 29 32 34 36 39 40 41 43 44 45 48 49 50 51 54 58 59 60 62 63 # 28037 revdifference c a 64 0 0 e b 64 0 0 e # 28038 revdifference c a 64 0 0 e b 64 1 1 e # 28039 revdifference c a 64 0 0 e b 64 0 0 e # 28040 revdifference c a 64 0 0 e b 64 1 1 f # 28041 revdifference c a 64 0 0 e b 64 0 0 e # 28042 revdifference c a 64 0 0 e b 64 1 1 0 1 3 5 6 7 8 10 11 16 18 20 21 22 25 26 29 31 32 33 34 36 39 40 42 43 50 53 56 58 61 # 28043 revdifference c a 64 0 0 f b 64 0 0 f # 28044 revdifference c a 64 0 0 f b 64 1 1 e # 28045 revdifference c a 64 0 0 f b 64 0 0 f # 28046 revdifference c a 64 0 0 f b 64 1 1 f # 28047 revdifference c a 64 0 0 f b 64 0 0 f # 28048 revdifference c a 64 0 0 f b 64 1 1 0 1 2 5 9 11 15 16 18 19 24 29 30 31 32 33 36 37 39 40 41 42 43 45 46 47 49 50 54 56 58 59 60 61 62 63 # 28049 revdifference c a 64 0 0 2 7 9 10 12 13 18 19 20 22 23 24 25 26 27 29 31 36 42 46 47 48 51 52 55 59 60 61 62 b 64 0 0 2 7 9 10 12 13 18 19 20 22 23 24 25 26 27 29 31 36 42 46 47 48 51 52 55 59 60 61 62 # 28050 revdifference c a 64 0 0 2 7 9 10 12 13 18 19 20 22 23 24 25 26 27 29 31 36 42 46 47 48 51 52 55 59 60 61 62 b 64 1 1 e # 28051 revdifference c a 64 0 0 1 2 6 7 8 11 12 14 16 19 20 21 23 24 25 26 27 28 33 34 35 37 38 39 42 43 44 45 48 49 51 53 54 56 59 60 61 b 64 0 0 1 2 6 7 8 11 12 14 16 19 20 21 23 24 25 26 27 28 33 34 35 37 38 39 42 43 44 45 48 49 51 53 54 56 59 60 61 # 28052 revdifference c a 64 0 0 1 2 6 7 8 11 12 14 16 19 20 21 23 24 25 26 27 28 33 34 35 37 38 39 42 43 44 45 48 49 51 53 54 56 59 60 61 b 64 1 1 f # 28053 revdifference c a 64 0 0 0 3 4 6 8 9 11 12 13 15 19 23 24 25 26 27 28 29 33 41 42 46 47 48 50 51 52 54 57 60 62 63 b 64 0 0 0 3 4 6 8 9 11 12 13 15 19 23 24 25 26 27 28 29 33 41 42 46 47 48 50 51 52 54 57 60 62 63 # 28054 revdifference c a 64 0 0 0 3 4 6 8 9 11 12 13 15 19 23 24 25 26 27 28 29 33 41 42 46 47 48 50 51 52 54 57 60 62 63 b 64 1 1 4 5 6 9 11 12 14 15 16 17 18 19 21 23 28 29 34 35 39 41 42 45 46 48 49 50 55 56 59 62 63 # 28055 revdifference c a 64 0 1 e b 64 0 1 e # 28056 revdifference c a 64 0 1 e b 64 0 0 e # 28057 revdifference c a 64 0 1 e b 64 0 1 e # 28058 revdifference c a 64 0 1 e b 64 0 0 f # 28059 revdifference c a 64 0 1 e b 64 0 1 e # 28060 revdifference c a 64 0 1 e b 64 0 0 0 1 2 5 6 8 9 10 11 13 19 21 22 26 27 28 29 31 32 34 35 37 39 40 42 44 49 51 52 55 56 58 63 # 28061 revdifference c a 64 0 1 f b 64 0 1 f # 28062 revdifference c a 64 0 1 f b 64 0 0 e # 28063 revdifference c a 64 0 1 f b 64 0 1 f # 28064 revdifference c a 64 0 1 f b 64 0 0 f # 28065 revdifference c a 64 0 1 f b 64 0 1 f # 28066 revdifference c a 64 0 1 f b 64 0 0 2 3 6 7 8 9 11 12 13 16 17 21 23 24 29 31 32 34 36 46 47 52 53 55 57 59 60 62 63 # 28067 revdifference c a 64 0 1 0 2 4 6 8 11 12 14 15 21 23 24 25 27 31 32 35 36 38 40 44 48 49 50 52 55 56 57 58 60 63 b 64 0 1 0 2 4 6 8 11 12 14 15 21 23 24 25 27 31 32 35 36 38 40 44 48 49 50 52 55 56 57 58 60 63 # 28068 revdifference c a 64 0 1 0 2 4 6 8 11 12 14 15 21 23 24 25 27 31 32 35 36 38 40 44 48 49 50 52 55 56 57 58 60 63 b 64 0 0 e # 28069 revdifference c a 64 0 1 0 1 6 7 8 11 12 13 14 15 16 17 19 20 21 22 23 25 28 31 33 40 41 42 43 44 45 46 47 48 50 51 52 53 54 56 57 58 59 63 b 64 0 1 0 1 6 7 8 11 12 13 14 15 16 17 19 20 21 22 23 25 28 31 33 40 41 42 43 44 45 46 47 48 50 51 52 53 54 56 57 58 59 63 # 28070 revdifference c a 64 0 1 0 1 6 7 8 11 12 13 14 15 16 17 19 20 21 22 23 25 28 31 33 40 41 42 43 44 45 46 47 48 50 51 52 53 54 56 57 58 59 63 b 64 0 0 f # 28071 revdifference c a 64 0 1 0 1 4 5 7 8 11 14 17 18 20 21 22 24 25 29 30 36 37 39 41 43 44 48 50 51 52 53 55 56 58 61 63 b 64 0 1 0 1 4 5 7 8 11 14 17 18 20 21 22 24 25 29 30 36 37 39 41 43 44 48 50 51 52 53 55 56 58 61 63 # 28072 revdifference c a 64 0 1 0 1 4 5 7 8 11 14 17 18 20 21 22 24 25 29 30 36 37 39 41 43 44 48 50 51 52 53 55 56 58 61 63 b 64 0 0 1 4 6 12 13 14 15 16 17 19 20 21 22 23 25 26 28 31 36 38 40 48 49 51 53 55 56 60 # 28073 revdifference c a 64 0 1 e b 64 0 1 e # 28074 revdifference c a 64 0 1 e b 64 0 1 e # 28075 revdifference c a 64 0 1 e b 64 0 1 e # 28076 revdifference c a 64 0 1 e b 64 0 1 f # 28077 revdifference c a 64 0 1 e b 64 0 1 e # 28078 revdifference c a 64 0 1 e b 64 0 1 0 1 2 3 4 5 7 9 11 12 14 15 18 19 23 24 25 27 29 32 35 39 41 48 49 51 53 54 55 58 59 61 62 # 28079 revdifference c a 64 0 1 f b 64 0 1 f # 28080 revdifference c a 64 0 1 f b 64 0 1 e # 28081 revdifference c a 64 0 1 f b 64 0 1 f # 28082 revdifference c a 64 0 1 f b 64 0 1 f # 28083 revdifference c a 64 0 1 f b 64 0 1 f # 28084 revdifference c a 64 0 1 f b 64 0 1 2 4 7 9 14 15 18 19 20 21 22 27 31 36 39 44 48 51 53 55 58 59 60 62 # 28085 revdifference c a 64 0 1 1 5 7 9 13 14 15 17 18 19 20 21 22 25 28 33 34 35 36 37 39 40 41 43 45 46 47 48 49 51 52 56 57 59 61 b 64 0 1 1 5 7 9 13 14 15 17 18 19 20 21 22 25 28 33 34 35 36 37 39 40 41 43 45 46 47 48 49 51 52 56 57 59 61 # 28086 revdifference c a 64 0 1 1 5 7 9 13 14 15 17 18 19 20 21 22 25 28 33 34 35 36 37 39 40 41 43 45 46 47 48 49 51 52 56 57 59 61 b 64 0 1 e # 28087 revdifference c a 64 0 1 0 3 5 6 7 9 10 11 12 13 14 15 16 18 22 27 29 34 37 39 40 42 43 46 48 49 50 54 55 56 59 61 b 64 0 1 0 3 5 6 7 9 10 11 12 13 14 15 16 18 22 27 29 34 37 39 40 42 43 46 48 49 50 54 55 56 59 61 # 28088 revdifference c a 64 0 1 0 3 5 6 7 9 10 11 12 13 14 15 16 18 22 27 29 34 37 39 40 42 43 46 48 49 50 54 55 56 59 61 b 64 0 1 f # 28089 revdifference c a 64 0 1 2 4 7 8 9 14 16 20 22 23 26 27 29 34 36 38 39 43 44 45 46 47 50 52 53 57 58 59 60 b 64 0 1 2 4 7 8 9 14 16 20 22 23 26 27 29 34 36 38 39 43 44 45 46 47 50 52 53 57 58 59 60 # 28090 revdifference c a 64 0 1 2 4 7 8 9 14 16 20 22 23 26 27 29 34 36 38 39 43 44 45 46 47 50 52 53 57 58 59 60 b 64 0 1 6 7 8 11 15 16 19 22 23 25 26 29 30 31 34 35 36 37 39 41 45 51 52 54 57 58 60 61 63 # 28091 revdifference c a 64 0 1 e b 64 0 1 e # 28092 revdifference c a 64 0 1 e b 64 1 0 e # 28093 revdifference c a 64 0 1 e b 64 0 1 e # 28094 revdifference c a 64 0 1 e b 64 1 0 f # 28095 revdifference c a 64 0 1 e b 64 0 1 e # 28096 revdifference c a 64 0 1 e b 64 1 0 0 2 3 9 10 11 12 16 19 20 23 27 28 29 30 31 32 33 34 36 38 41 42 44 46 47 48 52 53 55 56 57 58 59 60 61 62 63 # 28097 revdifference c a 64 0 1 f b 64 0 1 f # 28098 revdifference c a 64 0 1 f b 64 1 0 e # 28099 revdifference c a 64 0 1 f b 64 0 1 f # 28100 revdifference c a 64 0 1 f b 64 1 0 f # 28101 revdifference c a 64 0 1 f b 64 0 1 f # 28102 revdifference c a 64 0 1 f b 64 1 0 0 1 2 3 4 5 6 9 15 17 21 24 27 31 34 37 39 40 41 43 46 47 50 51 57 59 61 62 # 28103 revdifference c a 64 0 1 2 7 10 12 13 18 19 23 24 25 26 30 31 32 36 39 40 43 45 47 48 50 56 58 60 63 b 64 0 1 2 7 10 12 13 18 19 23 24 25 26 30 31 32 36 39 40 43 45 47 48 50 56 58 60 63 # 28104 revdifference c a 64 0 1 2 7 10 12 13 18 19 23 24 25 26 30 31 32 36 39 40 43 45 47 48 50 56 58 60 63 b 64 1 0 e # 28105 revdifference c a 64 0 1 0 2 3 4 6 7 10 11 12 15 19 21 26 27 28 30 31 32 33 35 36 38 41 44 45 48 49 52 53 54 57 59 61 62 63 b 64 0 1 0 2 3 4 6 7 10 11 12 15 19 21 26 27 28 30 31 32 33 35 36 38 41 44 45 48 49 52 53 54 57 59 61 62 63 # 28106 revdifference c a 64 0 1 0 2 3 4 6 7 10 11 12 15 19 21 26 27 28 30 31 32 33 35 36 38 41 44 45 48 49 52 53 54 57 59 61 62 63 b 64 1 0 f # 28107 revdifference c a 64 0 1 0 2 3 7 13 14 16 18 19 21 24 27 30 33 34 35 38 40 42 43 48 49 51 52 53 57 59 62 63 b 64 0 1 0 2 3 7 13 14 16 18 19 21 24 27 30 33 34 35 38 40 42 43 48 49 51 52 53 57 59 62 63 # 28108 revdifference c a 64 0 1 0 2 3 7 13 14 16 18 19 21 24 27 30 33 34 35 38 40 42 43 48 49 51 52 53 57 59 62 63 b 64 1 0 1 2 5 6 7 9 10 11 15 17 18 19 23 25 27 31 35 36 38 40 41 42 44 48 52 53 56 57 58 62 63 # 28109 revdifference c a 64 0 1 e b 64 0 1 e # 28110 revdifference c a 64 0 1 e b 64 1 1 e # 28111 revdifference c a 64 0 1 e b 64 0 1 e # 28112 revdifference c a 64 0 1 e b 64 1 1 f # 28113 revdifference c a 64 0 1 e b 64 0 1 e # 28114 revdifference c a 64 0 1 e b 64 1 1 0 3 6 8 9 10 11 13 18 19 21 23 24 27 28 30 35 45 46 53 56 57 59 60 61 # 28115 revdifference c a 64 0 1 f b 64 0 1 f # 28116 revdifference c a 64 0 1 f b 64 1 1 e # 28117 revdifference c a 64 0 1 f b 64 0 1 f # 28118 revdifference c a 64 0 1 f b 64 1 1 f # 28119 revdifference c a 64 0 1 f b 64 0 1 f # 28120 revdifference c a 64 0 1 f b 64 1 1 3 4 5 7 9 14 15 16 21 25 26 28 30 31 32 34 37 39 40 41 46 47 48 51 52 53 58 61 # 28121 revdifference c a 64 0 1 1 2 3 4 6 7 9 10 13 15 17 18 22 23 25 27 28 33 37 40 42 50 51 54 55 57 58 59 63 b 64 0 1 1 2 3 4 6 7 9 10 13 15 17 18 22 23 25 27 28 33 37 40 42 50 51 54 55 57 58 59 63 # 28122 revdifference c a 64 0 1 1 2 3 4 6 7 9 10 13 15 17 18 22 23 25 27 28 33 37 40 42 50 51 54 55 57 58 59 63 b 64 1 1 e # 28123 revdifference c a 64 0 1 5 6 8 9 10 13 14 15 19 20 22 25 27 28 30 32 34 36 37 38 39 40 41 44 45 46 47 50 52 54 55 57 58 b 64 0 1 5 6 8 9 10 13 14 15 19 20 22 25 27 28 30 32 34 36 37 38 39 40 41 44 45 46 47 50 52 54 55 57 58 # 28124 revdifference c a 64 0 1 5 6 8 9 10 13 14 15 19 20 22 25 27 28 30 32 34 36 37 38 39 40 41 44 45 46 47 50 52 54 55 57 58 b 64 1 1 f # 28125 revdifference c a 64 0 1 0 2 3 4 5 6 7 8 9 10 12 13 18 20 21 23 24 25 29 30 32 33 34 35 36 37 38 40 41 42 43 44 48 52 53 55 56 57 58 61 b 64 0 1 0 2 3 4 5 6 7 8 9 10 12 13 18 20 21 23 24 25 29 30 32 33 34 35 36 37 38 40 41 42 43 44 48 52 53 55 56 57 58 61 # 28126 revdifference c a 64 0 1 0 2 3 4 5 6 7 8 9 10 12 13 18 20 21 23 24 25 29 30 32 33 34 35 36 37 38 40 41 42 43 44 48 52 53 55 56 57 58 61 b 64 1 1 6 7 8 9 10 11 13 14 15 21 22 23 24 25 28 29 30 40 48 49 50 51 52 53 54 56 58 60 62 # 28127 revdifference c a 64 1 0 e b 64 1 0 e # 28128 revdifference c a 64 1 0 e b 64 0 0 e # 28129 revdifference c a 64 1 0 e b 64 1 0 e # 28130 revdifference c a 64 1 0 e b 64 0 0 f # 28131 revdifference c a 64 1 0 e b 64 1 0 e # 28132 revdifference c a 64 1 0 e b 64 0 0 0 2 6 9 10 11 13 15 16 17 18 20 21 22 25 26 29 31 32 37 38 39 40 41 42 44 45 48 50 51 53 56 58 59 60 62 63 # 28133 revdifference c a 64 1 0 f b 64 1 0 f # 28134 revdifference c a 64 1 0 f b 64 0 0 e # 28135 revdifference c a 64 1 0 f b 64 1 0 f # 28136 revdifference c a 64 1 0 f b 64 0 0 f # 28137 revdifference c a 64 1 0 f b 64 1 0 f # 28138 revdifference c a 64 1 0 f b 64 0 0 3 6 9 11 12 13 15 16 21 22 24 27 28 30 35 36 38 40 43 45 49 51 52 54 55 56 58 61 62 63 # 28139 revdifference c a 64 1 0 1 2 5 9 10 14 15 22 24 25 26 31 33 34 35 36 38 39 41 43 47 49 51 56 57 61 63 b 64 1 0 1 2 5 9 10 14 15 22 24 25 26 31 33 34 35 36 38 39 41 43 47 49 51 56 57 61 63 # 28140 revdifference c a 64 1 0 1 2 5 9 10 14 15 22 24 25 26 31 33 34 35 36 38 39 41 43 47 49 51 56 57 61 63 b 64 0 0 e # 28141 revdifference c a 64 1 0 0 2 4 5 7 8 9 10 15 18 19 20 21 22 23 24 31 32 36 37 39 40 42 46 47 48 49 52 55 56 60 61 63 b 64 1 0 0 2 4 5 7 8 9 10 15 18 19 20 21 22 23 24 31 32 36 37 39 40 42 46 47 48 49 52 55 56 60 61 63 # 28142 revdifference c a 64 1 0 0 2 4 5 7 8 9 10 15 18 19 20 21 22 23 24 31 32 36 37 39 40 42 46 47 48 49 52 55 56 60 61 63 b 64 0 0 f # 28143 revdifference c a 64 1 0 0 1 3 4 5 6 7 8 9 10 12 13 15 16 17 24 27 29 30 33 36 37 38 39 40 41 43 44 47 49 54 56 60 61 b 64 1 0 0 1 3 4 5 6 7 8 9 10 12 13 15 16 17 24 27 29 30 33 36 37 38 39 40 41 43 44 47 49 54 56 60 61 # 28144 revdifference c a 64 1 0 0 1 3 4 5 6 7 8 9 10 12 13 15 16 17 24 27 29 30 33 36 37 38 39 40 41 43 44 47 49 54 56 60 61 b 64 0 0 0 1 2 3 4 5 8 9 11 13 17 18 19 21 22 24 27 29 32 34 36 38 39 44 45 46 48 49 51 52 55 57 58 59 60 62 # 28145 revdifference c a 64 1 0 e b 64 1 0 e # 28146 revdifference c a 64 1 0 e b 64 0 1 e # 28147 revdifference c a 64 1 0 e b 64 1 0 e # 28148 revdifference c a 64 1 0 e b 64 0 1 f # 28149 revdifference c a 64 1 0 e b 64 1 0 e # 28150 revdifference c a 64 1 0 e b 64 0 1 1 2 5 7 9 12 14 17 19 21 22 23 28 30 33 34 35 36 37 38 39 40 41 45 46 48 54 55 56 58 60 61 62 # 28151 revdifference c a 64 1 0 f b 64 1 0 f # 28152 revdifference c a 64 1 0 f b 64 0 1 e # 28153 revdifference c a 64 1 0 f b 64 1 0 f # 28154 revdifference c a 64 1 0 f b 64 0 1 f # 28155 revdifference c a 64 1 0 f b 64 1 0 f # 28156 revdifference c a 64 1 0 f b 64 0 1 10 13 14 18 20 21 26 28 29 30 34 35 37 38 39 41 43 47 48 52 54 56 57 59 60 63 # 28157 revdifference c a 64 1 0 1 2 3 4 5 6 9 11 13 14 15 17 25 26 31 33 34 36 38 43 45 46 48 50 52 54 57 60 61 b 64 1 0 1 2 3 4 5 6 9 11 13 14 15 17 25 26 31 33 34 36 38 43 45 46 48 50 52 54 57 60 61 # 28158 revdifference c a 64 1 0 1 2 3 4 5 6 9 11 13 14 15 17 25 26 31 33 34 36 38 43 45 46 48 50 52 54 57 60 61 b 64 0 1 e # 28159 revdifference c a 64 1 0 0 1 6 7 9 10 11 12 15 16 17 22 24 26 27 28 31 33 35 36 37 38 40 43 44 46 47 51 52 53 55 58 61 62 63 b 64 1 0 0 1 6 7 9 10 11 12 15 16 17 22 24 26 27 28 31 33 35 36 37 38 40 43 44 46 47 51 52 53 55 58 61 62 63 # 28160 revdifference c a 64 1 0 0 1 6 7 9 10 11 12 15 16 17 22 24 26 27 28 31 33 35 36 37 38 40 43 44 46 47 51 52 53 55 58 61 62 63 b 64 0 1 f # 28161 revdifference c a 64 1 0 0 3 8 11 12 16 17 20 23 24 25 28 30 31 35 36 37 38 45 46 49 50 53 56 59 60 62 b 64 1 0 0 3 8 11 12 16 17 20 23 24 25 28 30 31 35 36 37 38 45 46 49 50 53 56 59 60 62 # 28162 revdifference c a 64 1 0 0 3 8 11 12 16 17 20 23 24 25 28 30 31 35 36 37 38 45 46 49 50 53 56 59 60 62 b 64 0 1 0 2 3 4 5 11 14 15 17 18 19 20 22 23 24 26 28 30 31 32 33 34 35 36 37 38 39 42 43 44 45 47 50 52 53 54 57 58 61 63 # 28163 revdifference c a 64 1 0 e b 64 1 0 e # 28164 revdifference c a 64 1 0 e b 64 1 0 e # 28165 revdifference c a 64 1 0 e b 64 1 0 e # 28166 revdifference c a 64 1 0 e b 64 1 0 f # 28167 revdifference c a 64 1 0 e b 64 1 0 e # 28168 revdifference c a 64 1 0 e b 64 1 0 1 2 4 5 9 11 12 13 14 17 19 23 26 31 34 36 38 41 43 44 47 48 49 50 56 58 62 63 # 28169 revdifference c a 64 1 0 f b 64 1 0 f # 28170 revdifference c a 64 1 0 f b 64 1 0 e # 28171 revdifference c a 64 1 0 f b 64 1 0 f # 28172 revdifference c a 64 1 0 f b 64 1 0 f # 28173 revdifference c a 64 1 0 f b 64 1 0 f # 28174 revdifference c a 64 1 0 f b 64 1 0 0 1 2 3 5 6 8 13 18 19 20 23 27 28 30 33 38 42 43 47 48 51 52 53 54 56 57 59 61 # 28175 revdifference c a 64 1 0 0 2 4 5 11 13 17 18 19 20 21 23 24 27 29 35 37 39 42 43 46 49 51 52 53 54 59 60 61 62 b 64 1 0 0 2 4 5 11 13 17 18 19 20 21 23 24 27 29 35 37 39 42 43 46 49 51 52 53 54 59 60 61 62 # 28176 revdifference c a 64 1 0 0 2 4 5 11 13 17 18 19 20 21 23 24 27 29 35 37 39 42 43 46 49 51 52 53 54 59 60 61 62 b 64 1 0 e # 28177 revdifference c a 64 1 0 3 6 7 8 9 12 14 20 21 22 26 29 31 33 34 35 37 38 44 46 49 52 54 57 59 60 61 b 64 1 0 3 6 7 8 9 12 14 20 21 22 26 29 31 33 34 35 37 38 44 46 49 52 54 57 59 60 61 # 28178 revdifference c a 64 1 0 3 6 7 8 9 12 14 20 21 22 26 29 31 33 34 35 37 38 44 46 49 52 54 57 59 60 61 b 64 1 0 f # 28179 revdifference c a 64 1 0 0 3 4 5 9 10 11 12 13 16 17 18 19 20 21 22 29 32 33 35 36 39 42 46 47 48 49 50 51 53 55 57 59 61 62 b 64 1 0 0 3 4 5 9 10 11 12 13 16 17 18 19 20 21 22 29 32 33 35 36 39 42 46 47 48 49 50 51 53 55 57 59 61 62 # 28180 revdifference c a 64 1 0 0 3 4 5 9 10 11 12 13 16 17 18 19 20 21 22 29 32 33 35 36 39 42 46 47 48 49 50 51 53 55 57 59 61 62 b 64 1 0 4 5 7 11 13 14 16 21 24 30 31 34 39 43 48 49 51 52 53 55 57 58 60 61 # 28181 revdifference c a 64 1 0 e b 64 1 0 e # 28182 revdifference c a 64 1 0 e b 64 1 1 e # 28183 revdifference c a 64 1 0 e b 64 1 0 e # 28184 revdifference c a 64 1 0 e b 64 1 1 f # 28185 revdifference c a 64 1 0 e b 64 1 0 e # 28186 revdifference c a 64 1 0 e b 64 1 1 0 2 5 6 7 10 11 12 17 21 23 24 27 28 31 32 33 36 40 44 45 46 50 51 53 54 57 58 # 28187 revdifference c a 64 1 0 f b 64 1 0 f # 28188 revdifference c a 64 1 0 f b 64 1 1 e # 28189 revdifference c a 64 1 0 f b 64 1 0 f # 28190 revdifference c a 64 1 0 f b 64 1 1 f # 28191 revdifference c a 64 1 0 f b 64 1 0 f # 28192 revdifference c a 64 1 0 f b 64 1 1 4 5 6 8 10 11 12 13 14 17 19 20 23 27 30 31 32 34 35 37 40 42 43 45 47 48 49 50 53 57 59 # 28193 revdifference c a 64 1 0 0 2 3 11 13 15 16 19 21 24 25 27 28 29 31 34 37 38 39 41 42 44 49 51 52 53 55 56 58 59 61 b 64 1 0 0 2 3 11 13 15 16 19 21 24 25 27 28 29 31 34 37 38 39 41 42 44 49 51 52 53 55 56 58 59 61 # 28194 revdifference c a 64 1 0 0 2 3 11 13 15 16 19 21 24 25 27 28 29 31 34 37 38 39 41 42 44 49 51 52 53 55 56 58 59 61 b 64 1 1 e # 28195 revdifference c a 64 1 0 2 3 5 6 8 10 12 14 18 24 25 26 27 28 32 34 35 37 39 43 44 48 50 54 57 61 63 b 64 1 0 2 3 5 6 8 10 12 14 18 24 25 26 27 28 32 34 35 37 39 43 44 48 50 54 57 61 63 # 28196 revdifference c a 64 1 0 2 3 5 6 8 10 12 14 18 24 25 26 27 28 32 34 35 37 39 43 44 48 50 54 57 61 63 b 64 1 1 f # 28197 revdifference c a 64 1 0 2 8 9 11 13 16 18 20 21 22 23 25 27 28 29 30 31 33 37 38 40 45 46 49 50 51 52 54 58 60 61 b 64 1 0 2 8 9 11 13 16 18 20 21 22 23 25 27 28 29 30 31 33 37 38 40 45 46 49 50 51 52 54 58 60 61 # 28198 revdifference c a 64 1 0 2 8 9 11 13 16 18 20 21 22 23 25 27 28 29 30 31 33 37 38 40 45 46 49 50 51 52 54 58 60 61 b 64 1 1 1 2 3 4 5 6 7 12 14 19 20 26 28 29 30 32 42 44 45 46 47 49 50 54 55 61 62 # 28199 revdifference c a 64 1 1 e b 64 1 1 e # 28200 revdifference c a 64 1 1 e b 64 0 0 e # 28201 revdifference c a 64 1 1 e b 64 1 1 e # 28202 revdifference c a 64 1 1 e b 64 0 0 f # 28203 revdifference c a 64 1 1 e b 64 1 1 e # 28204 revdifference c a 64 1 1 e b 64 0 0 2 3 5 7 12 23 24 31 32 34 37 39 41 42 44 49 50 51 53 54 55 59 60 61 62 63 # 28205 revdifference c a 64 1 1 f b 64 1 1 f # 28206 revdifference c a 64 1 1 f b 64 0 0 e # 28207 revdifference c a 64 1 1 f b 64 1 1 f # 28208 revdifference c a 64 1 1 f b 64 0 0 f # 28209 revdifference c a 64 1 1 f b 64 1 1 f # 28210 revdifference c a 64 1 1 f b 64 0 0 0 1 2 4 6 7 8 9 11 13 15 16 17 18 19 20 21 22 28 30 31 33 35 38 44 47 49 50 52 53 54 55 56 59 60 62 # 28211 revdifference c a 64 1 1 6 7 9 15 17 20 23 24 26 27 28 29 31 32 36 42 43 44 45 46 48 50 51 52 53 55 58 60 61 63 b 64 1 1 6 7 9 15 17 20 23 24 26 27 28 29 31 32 36 42 43 44 45 46 48 50 51 52 53 55 58 60 61 63 # 28212 revdifference c a 64 1 1 6 7 9 15 17 20 23 24 26 27 28 29 31 32 36 42 43 44 45 46 48 50 51 52 53 55 58 60 61 63 b 64 0 0 e # 28213 revdifference c a 64 1 1 1 4 5 10 13 14 16 18 19 23 24 27 30 31 34 36 40 43 48 50 52 56 59 60 61 62 b 64 1 1 1 4 5 10 13 14 16 18 19 23 24 27 30 31 34 36 40 43 48 50 52 56 59 60 61 62 # 28214 revdifference c a 64 1 1 1 4 5 10 13 14 16 18 19 23 24 27 30 31 34 36 40 43 48 50 52 56 59 60 61 62 b 64 0 0 f # 28215 revdifference c a 64 1 1 1 5 7 9 10 11 14 15 17 22 24 25 27 28 29 32 33 35 36 37 38 40 41 42 45 47 48 50 52 53 54 55 56 57 58 59 60 62 63 b 64 1 1 1 5 7 9 10 11 14 15 17 22 24 25 27 28 29 32 33 35 36 37 38 40 41 42 45 47 48 50 52 53 54 55 56 57 58 59 60 62 63 # 28216 revdifference c a 64 1 1 1 5 7 9 10 11 14 15 17 22 24 25 27 28 29 32 33 35 36 37 38 40 41 42 45 47 48 50 52 53 54 55 56 57 58 59 60 62 63 b 64 0 0 0 2 3 5 6 8 9 10 11 12 13 14 15 17 26 28 29 30 31 33 35 45 47 48 49 53 58 59 61 62 63 # 28217 revdifference c a 64 1 1 e b 64 1 1 e # 28218 revdifference c a 64 1 1 e b 64 0 1 e # 28219 revdifference c a 64 1 1 e b 64 1 1 e # 28220 revdifference c a 64 1 1 e b 64 0 1 f # 28221 revdifference c a 64 1 1 e b 64 1 1 e # 28222 revdifference c a 64 1 1 e b 64 0 1 2 3 4 8 10 11 14 17 20 21 22 23 25 26 27 29 30 31 32 33 34 35 38 40 41 44 45 48 49 50 51 52 53 54 57 59 62 # 28223 revdifference c a 64 1 1 f b 64 1 1 f # 28224 revdifference c a 64 1 1 f b 64 0 1 e # 28225 revdifference c a 64 1 1 f b 64 1 1 f # 28226 revdifference c a 64 1 1 f b 64 0 1 f # 28227 revdifference c a 64 1 1 f b 64 1 1 f # 28228 revdifference c a 64 1 1 f b 64 0 1 1 3 7 8 11 13 16 17 19 20 21 24 25 30 31 33 34 37 41 43 49 50 52 56 57 58 60 62 # 28229 revdifference c a 64 1 1 1 2 3 4 6 8 12 13 14 17 20 21 22 23 24 27 28 30 32 33 35 36 38 39 44 48 49 50 51 52 54 55 56 59 b 64 1 1 1 2 3 4 6 8 12 13 14 17 20 21 22 23 24 27 28 30 32 33 35 36 38 39 44 48 49 50 51 52 54 55 56 59 # 28230 revdifference c a 64 1 1 1 2 3 4 6 8 12 13 14 17 20 21 22 23 24 27 28 30 32 33 35 36 38 39 44 48 49 50 51 52 54 55 56 59 b 64 0 1 e # 28231 revdifference c a 64 1 1 1 4 9 10 12 14 15 17 18 21 22 27 28 29 36 37 38 41 42 44 45 51 54 55 56 59 60 61 b 64 1 1 1 4 9 10 12 14 15 17 18 21 22 27 28 29 36 37 38 41 42 44 45 51 54 55 56 59 60 61 # 28232 revdifference c a 64 1 1 1 4 9 10 12 14 15 17 18 21 22 27 28 29 36 37 38 41 42 44 45 51 54 55 56 59 60 61 b 64 0 1 f # 28233 revdifference c a 64 1 1 1 2 3 5 7 8 9 11 12 13 14 18 19 20 21 22 23 26 28 30 32 33 36 41 44 48 51 54 55 57 58 60 61 62 63 b 64 1 1 1 2 3 5 7 8 9 11 12 13 14 18 19 20 21 22 23 26 28 30 32 33 36 41 44 48 51 54 55 57 58 60 61 62 63 # 28234 revdifference c a 64 1 1 1 2 3 5 7 8 9 11 12 13 14 18 19 20 21 22 23 26 28 30 32 33 36 41 44 48 51 54 55 57 58 60 61 62 63 b 64 0 1 1 5 6 7 8 9 11 13 15 17 18 19 23 29 31 32 33 34 36 37 39 40 41 42 43 46 47 49 53 58 59 61 # 28235 revdifference c a 64 1 1 e b 64 1 1 e # 28236 revdifference c a 64 1 1 e b 64 1 0 e # 28237 revdifference c a 64 1 1 e b 64 1 1 e # 28238 revdifference c a 64 1 1 e b 64 1 0 f # 28239 revdifference c a 64 1 1 e b 64 1 1 e # 28240 revdifference c a 64 1 1 e b 64 1 0 0 2 7 9 10 11 13 16 17 18 19 20 24 29 30 31 33 37 40 43 45 48 51 52 53 56 58 # 28241 revdifference c a 64 1 1 f b 64 1 1 f # 28242 revdifference c a 64 1 1 f b 64 1 0 e # 28243 revdifference c a 64 1 1 f b 64 1 1 f # 28244 revdifference c a 64 1 1 f b 64 1 0 f # 28245 revdifference c a 64 1 1 f b 64 1 1 f # 28246 revdifference c a 64 1 1 f b 64 1 0 1 2 6 8 12 13 14 15 17 19 20 21 23 26 28 30 31 32 33 38 40 41 42 43 44 45 47 48 49 50 52 55 56 # 28247 revdifference c a 64 1 1 1 2 3 5 8 10 15 20 21 23 24 25 29 30 31 32 33 34 36 40 42 43 44 46 48 50 51 53 54 56 57 58 59 60 61 62 b 64 1 1 1 2 3 5 8 10 15 20 21 23 24 25 29 30 31 32 33 34 36 40 42 43 44 46 48 50 51 53 54 56 57 58 59 60 61 62 # 28248 revdifference c a 64 1 1 1 2 3 5 8 10 15 20 21 23 24 25 29 30 31 32 33 34 36 40 42 43 44 46 48 50 51 53 54 56 57 58 59 60 61 62 b 64 1 0 e # 28249 revdifference c a 64 1 1 0 2 4 6 8 9 11 16 17 20 23 26 27 28 31 32 35 41 42 43 49 52 53 54 57 61 62 b 64 1 1 0 2 4 6 8 9 11 16 17 20 23 26 27 28 31 32 35 41 42 43 49 52 53 54 57 61 62 # 28250 revdifference c a 64 1 1 0 2 4 6 8 9 11 16 17 20 23 26 27 28 31 32 35 41 42 43 49 52 53 54 57 61 62 b 64 1 0 f # 28251 revdifference c a 64 1 1 0 2 6 7 8 9 12 13 17 20 22 25 28 30 31 32 33 36 37 38 39 40 43 45 46 47 48 51 52 53 54 56 58 59 60 63 b 64 1 1 0 2 6 7 8 9 12 13 17 20 22 25 28 30 31 32 33 36 37 38 39 40 43 45 46 47 48 51 52 53 54 56 58 59 60 63 # 28252 revdifference c a 64 1 1 0 2 6 7 8 9 12 13 17 20 22 25 28 30 31 32 33 36 37 38 39 40 43 45 46 47 48 51 52 53 54 56 58 59 60 63 b 64 1 0 1 2 4 5 11 15 16 17 18 19 20 21 22 23 25 29 30 32 33 34 36 37 38 43 45 46 50 53 54 56 58 59 61 # 28253 revdifference c a 64 1 1 e b 64 1 1 e # 28254 revdifference c a 64 1 1 e b 64 1 1 e # 28255 revdifference c a 64 1 1 e b 64 1 1 e # 28256 revdifference c a 64 1 1 e b 64 1 1 f # 28257 revdifference c a 64 1 1 e b 64 1 1 e # 28258 revdifference c a 64 1 1 e b 64 1 1 0 2 3 5 7 8 14 15 16 17 18 19 20 21 27 28 29 31 33 36 37 39 41 44 45 47 48 50 54 55 58 61 63 # 28259 revdifference c a 64 1 1 f b 64 1 1 f # 28260 revdifference c a 64 1 1 f b 64 1 1 e # 28261 revdifference c a 64 1 1 f b 64 1 1 f # 28262 revdifference c a 64 1 1 f b 64 1 1 f # 28263 revdifference c a 64 1 1 f b 64 1 1 f # 28264 revdifference c a 64 1 1 f b 64 1 1 0 1 3 7 9 12 14 16 17 18 19 20 21 22 26 27 30 32 33 37 39 42 44 45 46 47 48 49 50 51 52 56 61 62 # 28265 revdifference c a 64 1 1 0 2 4 8 10 11 15 18 19 20 21 23 27 34 38 41 42 43 46 48 53 55 59 60 61 b 64 1 1 0 2 4 8 10 11 15 18 19 20 21 23 27 34 38 41 42 43 46 48 53 55 59 60 61 # 28266 revdifference c a 64 1 1 0 2 4 8 10 11 15 18 19 20 21 23 27 34 38 41 42 43 46 48 53 55 59 60 61 b 64 1 1 e # 28267 revdifference c a 64 1 1 0 2 5 6 7 9 10 11 15 16 17 21 23 25 27 29 32 33 34 36 37 42 43 44 46 47 48 52 57 59 b 64 1 1 0 2 5 6 7 9 10 11 15 16 17 21 23 25 27 29 32 33 34 36 37 42 43 44 46 47 48 52 57 59 # 28268 revdifference c a 64 1 1 0 2 5 6 7 9 10 11 15 16 17 21 23 25 27 29 32 33 34 36 37 42 43 44 46 47 48 52 57 59 b 64 1 1 f # 28269 revdifference c a 64 1 1 2 4 8 12 13 15 20 25 26 27 31 34 36 38 40 42 43 48 49 50 51 54 56 57 62 63 b 64 1 1 2 4 8 12 13 15 20 25 26 27 31 34 36 38 40 42 43 48 49 50 51 54 56 57 62 63 # 28270 revdifference c a 64 1 1 2 4 8 12 13 15 20 25 26 27 31 34 36 38 40 42 43 48 49 50 51 54 56 57 62 63 b 64 1 1 0 1 6 9 11 13 15 17 18 19 21 24 27 28 30 31 33 35 39 41 45 47 48 50 51 52 53 55 57 58 63 # 28271 revdifference c a 65 0 0 e b 65 0 0 e # 28272 revdifference c a 65 0 0 e b 65 0 0 e # 28273 revdifference c a 65 0 0 e b 65 0 0 e # 28274 revdifference c a 65 0 0 e b 65 0 0 f # 28275 revdifference c a 65 0 0 e b 65 0 0 e # 28276 revdifference c a 65 0 0 e b 65 0 0 2 3 4 7 8 9 12 13 21 22 23 25 27 31 32 35 37 38 40 42 43 48 49 50 51 53 54 55 57 58 59 # 28277 revdifference c a 65 0 0 f b 65 0 0 f # 28278 revdifference c a 65 0 0 f b 65 0 0 e # 28279 revdifference c a 65 0 0 f b 65 0 0 f # 28280 revdifference c a 65 0 0 f b 65 0 0 f # 28281 revdifference c a 65 0 0 f b 65 0 0 f # 28282 revdifference c a 65 0 0 f b 65 0 0 0 2 3 4 6 9 11 12 13 14 15 16 17 22 24 25 26 30 32 33 35 38 39 40 42 43 46 49 50 51 53 59 60 62 64 # 28283 revdifference c a 65 0 0 5 7 8 19 21 23 29 33 34 36 40 42 44 49 51 52 53 54 55 56 61 62 64 b 65 0 0 5 7 8 19 21 23 29 33 34 36 40 42 44 49 51 52 53 54 55 56 61 62 64 # 28284 revdifference c a 65 0 0 5 7 8 19 21 23 29 33 34 36 40 42 44 49 51 52 53 54 55 56 61 62 64 b 65 0 0 e # 28285 revdifference c a 65 0 0 0 1 5 7 8 10 11 12 13 15 18 19 21 22 26 28 30 31 34 40 41 43 44 45 46 54 57 58 60 61 b 65 0 0 0 1 5 7 8 10 11 12 13 15 18 19 21 22 26 28 30 31 34 40 41 43 44 45 46 54 57 58 60 61 # 28286 revdifference c a 65 0 0 0 1 5 7 8 10 11 12 13 15 18 19 21 22 26 28 30 31 34 40 41 43 44 45 46 54 57 58 60 61 b 65 0 0 f # 28287 revdifference c a 65 0 0 1 2 4 5 7 9 10 11 12 17 19 20 21 24 25 28 29 30 34 37 39 40 42 43 44 45 46 48 50 54 56 58 59 63 64 b 65 0 0 1 2 4 5 7 9 10 11 12 17 19 20 21 24 25 28 29 30 34 37 39 40 42 43 44 45 46 48 50 54 56 58 59 63 64 # 28288 revdifference c a 65 0 0 1 2 4 5 7 9 10 11 12 17 19 20 21 24 25 28 29 30 34 37 39 40 42 43 44 45 46 48 50 54 56 58 59 63 64 b 65 0 0 0 3 4 6 8 9 10 11 12 14 18 21 23 24 26 28 29 31 32 33 34 35 36 37 38 39 41 42 45 48 50 54 55 56 57 59 60 63 # 28289 revdifference c a 65 0 0 e b 65 0 0 e # 28290 revdifference c a 65 0 0 e b 65 0 1 e # 28291 revdifference c a 65 0 0 e b 65 0 0 e # 28292 revdifference c a 65 0 0 e b 65 0 1 f # 28293 revdifference c a 65 0 0 e b 65 0 0 e # 28294 revdifference c a 65 0 0 e b 65 0 1 3 9 10 11 14 18 19 21 22 24 26 28 29 30 33 35 37 41 43 48 49 51 52 53 55 60 61 62 64 # 28295 revdifference c a 65 0 0 f b 65 0 0 f # 28296 revdifference c a 65 0 0 f b 65 0 1 e # 28297 revdifference c a 65 0 0 f b 65 0 0 f # 28298 revdifference c a 65 0 0 f b 65 0 1 f # 28299 revdifference c a 65 0 0 f b 65 0 0 f # 28300 revdifference c a 65 0 0 f b 65 0 1 0 1 3 5 9 11 13 18 20 21 22 23 24 26 27 28 30 31 34 36 37 38 40 42 48 50 51 54 56 57 59 60 62 # 28301 revdifference c a 65 0 0 1 5 7 8 9 10 15 17 18 19 20 27 28 29 33 34 35 38 41 45 48 53 54 55 56 58 59 61 63 64 b 65 0 0 1 5 7 8 9 10 15 17 18 19 20 27 28 29 33 34 35 38 41 45 48 53 54 55 56 58 59 61 63 64 # 28302 revdifference c a 65 0 0 1 5 7 8 9 10 15 17 18 19 20 27 28 29 33 34 35 38 41 45 48 53 54 55 56 58 59 61 63 64 b 65 0 1 e # 28303 revdifference c a 65 0 0 1 3 8 9 11 12 13 17 18 19 20 21 22 25 26 31 34 35 36 38 39 40 42 43 47 49 50 52 53 54 56 58 60 61 b 65 0 0 1 3 8 9 11 12 13 17 18 19 20 21 22 25 26 31 34 35 36 38 39 40 42 43 47 49 50 52 53 54 56 58 60 61 # 28304 revdifference c a 65 0 0 1 3 8 9 11 12 13 17 18 19 20 21 22 25 26 31 34 35 36 38 39 40 42 43 47 49 50 52 53 54 56 58 60 61 b 65 0 1 f # 28305 revdifference c a 65 0 0 1 4 10 12 13 14 15 17 20 21 22 30 31 36 37 38 41 42 43 44 46 52 56 57 58 61 62 63 b 65 0 0 1 4 10 12 13 14 15 17 20 21 22 30 31 36 37 38 41 42 43 44 46 52 56 57 58 61 62 63 # 28306 revdifference c a 65 0 0 1 4 10 12 13 14 15 17 20 21 22 30 31 36 37 38 41 42 43 44 46 52 56 57 58 61 62 63 b 65 0 1 3 5 10 11 12 16 17 21 22 23 24 27 29 33 37 38 39 40 41 42 43 44 47 50 53 55 57 58 60 61 62 63 64 # 28307 revdifference c a 65 0 0 e b 65 0 0 e # 28308 revdifference c a 65 0 0 e b 65 1 0 e # 28309 revdifference c a 65 0 0 e b 65 0 0 e # 28310 revdifference c a 65 0 0 e b 65 1 0 f # 28311 revdifference c a 65 0 0 e b 65 0 0 e # 28312 revdifference c a 65 0 0 e b 65 1 0 7 10 11 13 14 15 16 19 20 22 23 24 27 30 31 32 33 40 44 47 48 51 52 55 56 57 58 # 28313 revdifference c a 65 0 0 f b 65 0 0 f # 28314 revdifference c a 65 0 0 f b 65 1 0 e # 28315 revdifference c a 65 0 0 f b 65 0 0 f # 28316 revdifference c a 65 0 0 f b 65 1 0 f # 28317 revdifference c a 65 0 0 f b 65 0 0 f # 28318 revdifference c a 65 0 0 f b 65 1 0 0 1 2 4 6 11 13 15 18 19 20 22 23 27 28 29 31 33 34 37 38 39 41 43 44 45 46 51 52 54 56 57 58 59 60 62 # 28319 revdifference c a 65 0 0 0 1 3 6 8 9 11 13 14 15 17 18 19 20 22 23 25 28 29 30 35 40 41 42 44 45 48 51 52 55 57 60 62 b 65 0 0 0 1 3 6 8 9 11 13 14 15 17 18 19 20 22 23 25 28 29 30 35 40 41 42 44 45 48 51 52 55 57 60 62 # 28320 revdifference c a 65 0 0 0 1 3 6 8 9 11 13 14 15 17 18 19 20 22 23 25 28 29 30 35 40 41 42 44 45 48 51 52 55 57 60 62 b 65 1 0 e # 28321 revdifference c a 65 0 0 0 2 4 7 9 10 15 16 17 22 24 25 28 30 31 32 33 34 36 40 41 45 46 47 48 52 53 54 55 56 57 59 61 64 b 65 0 0 0 2 4 7 9 10 15 16 17 22 24 25 28 30 31 32 33 34 36 40 41 45 46 47 48 52 53 54 55 56 57 59 61 64 # 28322 revdifference c a 65 0 0 0 2 4 7 9 10 15 16 17 22 24 25 28 30 31 32 33 34 36 40 41 45 46 47 48 52 53 54 55 56 57 59 61 64 b 65 1 0 f # 28323 revdifference c a 65 0 0 1 2 3 4 5 6 7 9 12 14 20 23 24 27 28 29 34 37 39 40 41 42 43 44 45 49 50 55 56 57 58 62 63 b 65 0 0 1 2 3 4 5 6 7 9 12 14 20 23 24 27 28 29 34 37 39 40 41 42 43 44 45 49 50 55 56 57 58 62 63 # 28324 revdifference c a 65 0 0 1 2 3 4 5 6 7 9 12 14 20 23 24 27 28 29 34 37 39 40 41 42 43 44 45 49 50 55 56 57 58 62 63 b 65 1 0 0 2 4 7 9 10 14 15 17 19 23 24 25 28 30 32 34 35 36 38 42 44 45 47 48 49 50 51 52 54 55 59 60 61 63 # 28325 revdifference c a 65 0 0 e b 65 0 0 e # 28326 revdifference c a 65 0 0 e b 65 1 1 e # 28327 revdifference c a 65 0 0 e b 65 0 0 e # 28328 revdifference c a 65 0 0 e b 65 1 1 f # 28329 revdifference c a 65 0 0 e b 65 0 0 e # 28330 revdifference c a 65 0 0 e b 65 1 1 1 3 4 5 6 8 10 11 12 13 15 16 18 19 21 23 24 26 27 28 29 32 33 34 35 36 37 38 39 41 42 44 47 48 49 50 52 53 55 58 59 # 28331 revdifference c a 65 0 0 f b 65 0 0 f # 28332 revdifference c a 65 0 0 f b 65 1 1 e # 28333 revdifference c a 65 0 0 f b 65 0 0 f # 28334 revdifference c a 65 0 0 f b 65 1 1 f # 28335 revdifference c a 65 0 0 f b 65 0 0 f # 28336 revdifference c a 65 0 0 f b 65 1 1 1 4 6 7 8 10 13 14 21 22 23 24 25 26 27 28 36 39 42 43 44 45 49 50 51 52 53 60 61 62 63 # 28337 revdifference c a 65 0 0 2 5 6 7 8 9 10 11 14 17 18 19 23 24 25 27 28 30 31 32 33 36 38 41 43 44 48 52 53 54 55 56 60 63 b 65 0 0 2 5 6 7 8 9 10 11 14 17 18 19 23 24 25 27 28 30 31 32 33 36 38 41 43 44 48 52 53 54 55 56 60 63 # 28338 revdifference c a 65 0 0 2 5 6 7 8 9 10 11 14 17 18 19 23 24 25 27 28 30 31 32 33 36 38 41 43 44 48 52 53 54 55 56 60 63 b 65 1 1 e # 28339 revdifference c a 65 0 0 0 1 4 5 6 7 8 9 10 13 19 21 22 23 26 27 28 29 31 32 33 35 42 45 46 51 54 55 57 58 60 62 64 b 65 0 0 0 1 4 5 6 7 8 9 10 13 19 21 22 23 26 27 28 29 31 32 33 35 42 45 46 51 54 55 57 58 60 62 64 # 28340 revdifference c a 65 0 0 0 1 4 5 6 7 8 9 10 13 19 21 22 23 26 27 28 29 31 32 33 35 42 45 46 51 54 55 57 58 60 62 64 b 65 1 1 f # 28341 revdifference c a 65 0 0 4 5 6 7 8 11 13 18 22 26 32 33 34 36 37 39 40 41 45 46 47 48 52 58 59 60 63 b 65 0 0 4 5 6 7 8 11 13 18 22 26 32 33 34 36 37 39 40 41 45 46 47 48 52 58 59 60 63 # 28342 revdifference c a 65 0 0 4 5 6 7 8 11 13 18 22 26 32 33 34 36 37 39 40 41 45 46 47 48 52 58 59 60 63 b 65 1 1 3 4 5 6 10 12 13 16 20 21 22 27 28 30 31 34 37 38 39 41 42 46 48 50 51 52 56 57 59 60 62 # 28343 revdifference c a 65 0 1 e b 65 0 1 e # 28344 revdifference c a 65 0 1 e b 65 0 0 e # 28345 revdifference c a 65 0 1 e b 65 0 1 e # 28346 revdifference c a 65 0 1 e b 65 0 0 f # 28347 revdifference c a 65 0 1 e b 65 0 1 e # 28348 revdifference c a 65 0 1 e b 65 0 0 0 1 2 3 6 10 11 12 16 21 24 28 29 30 31 35 36 40 41 43 45 46 48 50 52 54 55 57 60 61 # 28349 revdifference c a 65 0 1 f b 65 0 1 f # 28350 revdifference c a 65 0 1 f b 65 0 0 e # 28351 revdifference c a 65 0 1 f b 65 0 1 f # 28352 revdifference c a 65 0 1 f b 65 0 0 f # 28353 revdifference c a 65 0 1 f b 65 0 1 f # 28354 revdifference c a 65 0 1 f b 65 0 0 0 5 6 9 10 11 12 13 14 15 16 18 19 21 25 26 30 31 35 40 43 46 47 48 49 50 52 55 59 60 61 62 # 28355 revdifference c a 65 0 1 0 4 5 7 9 11 12 14 19 20 25 26 28 30 31 34 39 42 43 44 45 47 48 49 50 51 52 53 54 56 57 58 59 61 63 64 b 65 0 1 0 4 5 7 9 11 12 14 19 20 25 26 28 30 31 34 39 42 43 44 45 47 48 49 50 51 52 53 54 56 57 58 59 61 63 64 # 28356 revdifference c a 65 0 1 0 4 5 7 9 11 12 14 19 20 25 26 28 30 31 34 39 42 43 44 45 47 48 49 50 51 52 53 54 56 57 58 59 61 63 64 b 65 0 0 e # 28357 revdifference c a 65 0 1 1 3 5 6 7 8 9 21 24 25 31 33 34 36 37 40 41 42 48 49 50 51 53 56 57 58 60 64 b 65 0 1 1 3 5 6 7 8 9 21 24 25 31 33 34 36 37 40 41 42 48 49 50 51 53 56 57 58 60 64 # 28358 revdifference c a 65 0 1 1 3 5 6 7 8 9 21 24 25 31 33 34 36 37 40 41 42 48 49 50 51 53 56 57 58 60 64 b 65 0 0 f # 28359 revdifference c a 65 0 1 1 2 3 4 6 7 9 10 11 18 20 21 24 25 27 29 30 33 36 42 43 44 46 47 48 49 51 52 57 62 63 b 65 0 1 1 2 3 4 6 7 9 10 11 18 20 21 24 25 27 29 30 33 36 42 43 44 46 47 48 49 51 52 57 62 63 # 28360 revdifference c a 65 0 1 1 2 3 4 6 7 9 10 11 18 20 21 24 25 27 29 30 33 36 42 43 44 46 47 48 49 51 52 57 62 63 b 65 0 0 3 4 6 7 9 10 11 12 13 14 16 17 20 21 22 23 27 30 31 32 36 43 44 47 48 49 51 54 55 57 59 63 64 # 28361 revdifference c a 65 0 1 e b 65 0 1 e # 28362 revdifference c a 65 0 1 e b 65 0 1 e # 28363 revdifference c a 65 0 1 e b 65 0 1 e # 28364 revdifference c a 65 0 1 e b 65 0 1 f # 28365 revdifference c a 65 0 1 e b 65 0 1 e # 28366 revdifference c a 65 0 1 e b 65 0 1 0 4 5 6 8 9 15 16 19 20 23 24 28 30 31 32 35 37 38 40 43 45 46 48 51 52 53 54 56 58 59 61 # 28367 revdifference c a 65 0 1 f b 65 0 1 f # 28368 revdifference c a 65 0 1 f b 65 0 1 e # 28369 revdifference c a 65 0 1 f b 65 0 1 f # 28370 revdifference c a 65 0 1 f b 65 0 1 f # 28371 revdifference c a 65 0 1 f b 65 0 1 f # 28372 revdifference c a 65 0 1 f b 65 0 1 0 1 3 4 5 10 11 13 14 15 17 18 19 20 22 24 25 26 27 29 30 31 32 34 35 40 41 44 49 54 56 58 61 # 28373 revdifference c a 65 0 1 0 2 4 6 7 8 10 13 14 18 20 21 24 25 26 27 28 31 32 35 43 50 54 57 61 64 b 65 0 1 0 2 4 6 7 8 10 13 14 18 20 21 24 25 26 27 28 31 32 35 43 50 54 57 61 64 # 28374 revdifference c a 65 0 1 0 2 4 6 7 8 10 13 14 18 20 21 24 25 26 27 28 31 32 35 43 50 54 57 61 64 b 65 0 1 e # 28375 revdifference c a 65 0 1 3 4 5 7 12 13 14 15 16 24 25 26 28 32 33 36 39 40 41 48 49 53 54 55 56 57 59 61 64 b 65 0 1 3 4 5 7 12 13 14 15 16 24 25 26 28 32 33 36 39 40 41 48 49 53 54 55 56 57 59 61 64 # 28376 revdifference c a 65 0 1 3 4 5 7 12 13 14 15 16 24 25 26 28 32 33 36 39 40 41 48 49 53 54 55 56 57 59 61 64 b 65 0 1 f # 28377 revdifference c a 65 0 1 1 2 3 5 6 7 11 12 13 14 18 21 22 25 26 28 29 32 33 35 36 38 39 42 46 48 50 51 53 57 58 60 61 62 63 64 b 65 0 1 1 2 3 5 6 7 11 12 13 14 18 21 22 25 26 28 29 32 33 35 36 38 39 42 46 48 50 51 53 57 58 60 61 62 63 64 # 28378 revdifference c a 65 0 1 1 2 3 5 6 7 11 12 13 14 18 21 22 25 26 28 29 32 33 35 36 38 39 42 46 48 50 51 53 57 58 60 61 62 63 64 b 65 0 1 1 2 3 4 5 11 13 14 15 16 17 18 20 22 23 26 29 31 33 34 36 37 41 43 44 45 47 48 51 52 54 56 57 61 63 64 # 28379 revdifference c a 65 0 1 e b 65 0 1 e # 28380 revdifference c a 65 0 1 e b 65 1 0 e # 28381 revdifference c a 65 0 1 e b 65 0 1 e # 28382 revdifference c a 65 0 1 e b 65 1 0 f # 28383 revdifference c a 65 0 1 e b 65 0 1 e # 28384 revdifference c a 65 0 1 e b 65 1 0 0 3 4 5 7 8 10 11 12 14 16 19 22 23 24 25 27 32 33 36 37 39 40 41 42 43 46 48 52 53 55 56 57 61 63 64 # 28385 revdifference c a 65 0 1 f b 65 0 1 f # 28386 revdifference c a 65 0 1 f b 65 1 0 e # 28387 revdifference c a 65 0 1 f b 65 0 1 f # 28388 revdifference c a 65 0 1 f b 65 1 0 f # 28389 revdifference c a 65 0 1 f b 65 0 1 f # 28390 revdifference c a 65 0 1 f b 65 1 0 0 2 4 7 11 14 16 17 19 21 22 23 25 32 34 36 39 42 43 44 47 51 54 55 57 59 61 62 63 # 28391 revdifference c a 65 0 1 0 2 3 4 5 8 13 14 15 19 22 24 25 27 28 32 35 37 38 39 43 45 46 47 51 52 54 55 58 59 60 61 63 b 65 0 1 0 2 3 4 5 8 13 14 15 19 22 24 25 27 28 32 35 37 38 39 43 45 46 47 51 52 54 55 58 59 60 61 63 # 28392 revdifference c a 65 0 1 0 2 3 4 5 8 13 14 15 19 22 24 25 27 28 32 35 37 38 39 43 45 46 47 51 52 54 55 58 59 60 61 63 b 65 1 0 e # 28393 revdifference c a 65 0 1 0 1 3 4 7 8 9 11 12 13 15 17 18 19 20 28 31 33 34 35 37 38 40 42 43 46 47 50 52 53 54 59 60 61 62 63 64 b 65 0 1 0 1 3 4 7 8 9 11 12 13 15 17 18 19 20 28 31 33 34 35 37 38 40 42 43 46 47 50 52 53 54 59 60 61 62 63 64 # 28394 revdifference c a 65 0 1 0 1 3 4 7 8 9 11 12 13 15 17 18 19 20 28 31 33 34 35 37 38 40 42 43 46 47 50 52 53 54 59 60 61 62 63 64 b 65 1 0 f # 28395 revdifference c a 65 0 1 1 4 5 8 11 12 16 19 21 28 33 34 40 41 43 48 49 54 55 56 57 58 59 64 b 65 0 1 1 4 5 8 11 12 16 19 21 28 33 34 40 41 43 48 49 54 55 56 57 58 59 64 # 28396 revdifference c a 65 0 1 1 4 5 8 11 12 16 19 21 28 33 34 40 41 43 48 49 54 55 56 57 58 59 64 b 65 1 0 1 3 5 8 13 16 17 18 25 26 27 30 32 36 37 39 40 41 44 45 46 47 48 52 54 59 60 61 63 # 28397 revdifference c a 65 0 1 e b 65 0 1 e # 28398 revdifference c a 65 0 1 e b 65 1 1 e # 28399 revdifference c a 65 0 1 e b 65 0 1 e # 28400 revdifference c a 65 0 1 e b 65 1 1 f # 28401 revdifference c a 65 0 1 e b 65 0 1 e # 28402 revdifference c a 65 0 1 e b 65 1 1 1 8 9 11 13 15 17 18 19 23 24 25 26 27 30 31 34 35 40 41 42 44 47 50 51 52 53 54 55 56 60 62 64 # 28403 revdifference c a 65 0 1 f b 65 0 1 f # 28404 revdifference c a 65 0 1 f b 65 1 1 e # 28405 revdifference c a 65 0 1 f b 65 0 1 f # 28406 revdifference c a 65 0 1 f b 65 1 1 f # 28407 revdifference c a 65 0 1 f b 65 0 1 f # 28408 revdifference c a 65 0 1 f b 65 1 1 0 4 7 9 11 15 17 18 20 24 29 34 36 37 38 40 43 44 45 46 48 52 53 54 55 57 59 60 61 63 # 28409 revdifference c a 65 0 1 0 3 5 6 7 9 10 11 13 14 15 18 20 21 23 26 29 32 33 38 39 40 41 42 44 48 51 53 54 55 59 61 b 65 0 1 0 3 5 6 7 9 10 11 13 14 15 18 20 21 23 26 29 32 33 38 39 40 41 42 44 48 51 53 54 55 59 61 # 28410 revdifference c a 65 0 1 0 3 5 6 7 9 10 11 13 14 15 18 20 21 23 26 29 32 33 38 39 40 41 42 44 48 51 53 54 55 59 61 b 65 1 1 e # 28411 revdifference c a 65 0 1 0 2 3 5 6 10 11 12 14 16 18 19 21 22 23 25 26 27 28 31 32 34 37 39 42 44 46 48 49 52 54 55 56 57 58 59 62 63 64 b 65 0 1 0 2 3 5 6 10 11 12 14 16 18 19 21 22 23 25 26 27 28 31 32 34 37 39 42 44 46 48 49 52 54 55 56 57 58 59 62 63 64 # 28412 revdifference c a 65 0 1 0 2 3 5 6 10 11 12 14 16 18 19 21 22 23 25 26 27 28 31 32 34 37 39 42 44 46 48 49 52 54 55 56 57 58 59 62 63 64 b 65 1 1 f # 28413 revdifference c a 65 0 1 4 5 8 9 10 16 18 19 21 22 24 25 26 28 29 32 33 35 36 37 38 40 41 42 45 51 58 59 60 63 b 65 0 1 4 5 8 9 10 16 18 19 21 22 24 25 26 28 29 32 33 35 36 37 38 40 41 42 45 51 58 59 60 63 # 28414 revdifference c a 65 0 1 4 5 8 9 10 16 18 19 21 22 24 25 26 28 29 32 33 35 36 37 38 40 41 42 45 51 58 59 60 63 b 65 1 1 0 1 2 3 4 7 9 14 15 16 17 19 21 24 34 35 36 38 41 48 54 55 56 60 61 63 # 28415 revdifference c a 65 1 0 e b 65 1 0 e # 28416 revdifference c a 65 1 0 e b 65 0 0 e # 28417 revdifference c a 65 1 0 e b 65 1 0 e # 28418 revdifference c a 65 1 0 e b 65 0 0 f # 28419 revdifference c a 65 1 0 e b 65 1 0 e # 28420 revdifference c a 65 1 0 e b 65 0 0 1 3 4 7 8 9 12 16 18 21 22 24 27 28 30 35 36 38 39 41 42 46 48 51 56 57 58 60 61 62 # 28421 revdifference c a 65 1 0 f b 65 1 0 f # 28422 revdifference c a 65 1 0 f b 65 0 0 e # 28423 revdifference c a 65 1 0 f b 65 1 0 f # 28424 revdifference c a 65 1 0 f b 65 0 0 f # 28425 revdifference c a 65 1 0 f b 65 1 0 f # 28426 revdifference c a 65 1 0 f b 65 0 0 0 2 4 5 6 7 8 9 11 12 13 14 17 19 21 23 24 25 26 27 28 30 31 33 36 37 40 41 43 44 46 47 48 50 55 58 59 61 62 63 64 # 28427 revdifference c a 65 1 0 0 3 4 5 6 7 9 10 11 12 13 14 17 19 22 25 26 27 28 29 30 31 34 37 39 44 49 54 55 57 58 59 60 62 64 b 65 1 0 0 3 4 5 6 7 9 10 11 12 13 14 17 19 22 25 26 27 28 29 30 31 34 37 39 44 49 54 55 57 58 59 60 62 64 # 28428 revdifference c a 65 1 0 0 3 4 5 6 7 9 10 11 12 13 14 17 19 22 25 26 27 28 29 30 31 34 37 39 44 49 54 55 57 58 59 60 62 64 b 65 0 0 e # 28429 revdifference c a 65 1 0 1 2 5 6 7 9 10 14 18 19 21 22 25 27 28 29 30 32 33 38 39 41 43 44 45 52 54 57 59 60 64 b 65 1 0 1 2 5 6 7 9 10 14 18 19 21 22 25 27 28 29 30 32 33 38 39 41 43 44 45 52 54 57 59 60 64 # 28430 revdifference c a 65 1 0 1 2 5 6 7 9 10 14 18 19 21 22 25 27 28 29 30 32 33 38 39 41 43 44 45 52 54 57 59 60 64 b 65 0 0 f # 28431 revdifference c a 65 1 0 0 1 3 4 9 13 14 20 21 22 23 25 26 27 28 30 31 32 34 35 37 39 40 41 44 46 47 55 56 59 62 b 65 1 0 0 1 3 4 9 13 14 20 21 22 23 25 26 27 28 30 31 32 34 35 37 39 40 41 44 46 47 55 56 59 62 # 28432 revdifference c a 65 1 0 0 1 3 4 9 13 14 20 21 22 23 25 26 27 28 30 31 32 34 35 37 39 40 41 44 46 47 55 56 59 62 b 65 0 0 2 5 9 10 11 13 15 17 18 19 21 22 25 26 30 31 32 33 36 37 40 46 47 49 50 52 54 55 57 59 62 # 28433 revdifference c a 65 1 0 e b 65 1 0 e # 28434 revdifference c a 65 1 0 e b 65 0 1 e # 28435 revdifference c a 65 1 0 e b 65 1 0 e # 28436 revdifference c a 65 1 0 e b 65 0 1 f # 28437 revdifference c a 65 1 0 e b 65 1 0 e # 28438 revdifference c a 65 1 0 e b 65 0 1 4 5 6 10 11 13 14 16 18 21 26 27 28 32 33 35 36 40 42 43 45 47 51 53 55 56 58 59 60 # 28439 revdifference c a 65 1 0 f b 65 1 0 f # 28440 revdifference c a 65 1 0 f b 65 0 1 e # 28441 revdifference c a 65 1 0 f b 65 1 0 f # 28442 revdifference c a 65 1 0 f b 65 0 1 f # 28443 revdifference c a 65 1 0 f b 65 1 0 f # 28444 revdifference c a 65 1 0 f b 65 0 1 0 6 7 9 10 13 14 17 18 19 22 23 25 26 30 31 33 35 38 39 41 44 46 47 49 50 51 53 54 56 57 58 60 61 64 # 28445 revdifference c a 65 1 0 3 6 7 8 10 13 14 16 17 19 20 21 22 24 25 27 29 31 33 35 36 38 39 40 42 45 46 47 50 54 58 59 63 b 65 1 0 3 6 7 8 10 13 14 16 17 19 20 21 22 24 25 27 29 31 33 35 36 38 39 40 42 45 46 47 50 54 58 59 63 # 28446 revdifference c a 65 1 0 3 6 7 8 10 13 14 16 17 19 20 21 22 24 25 27 29 31 33 35 36 38 39 40 42 45 46 47 50 54 58 59 63 b 65 0 1 e # 28447 revdifference c a 65 1 0 0 5 7 8 9 10 11 12 13 15 16 22 26 27 28 31 32 37 38 40 41 43 44 46 47 48 49 50 53 54 55 58 60 63 64 b 65 1 0 0 5 7 8 9 10 11 12 13 15 16 22 26 27 28 31 32 37 38 40 41 43 44 46 47 48 49 50 53 54 55 58 60 63 64 # 28448 revdifference c a 65 1 0 0 5 7 8 9 10 11 12 13 15 16 22 26 27 28 31 32 37 38 40 41 43 44 46 47 48 49 50 53 54 55 58 60 63 64 b 65 0 1 f # 28449 revdifference c a 65 1 0 0 3 5 6 8 13 16 17 18 19 21 22 23 24 26 27 29 30 33 34 36 37 38 39 41 44 45 46 47 50 51 53 54 55 56 57 58 60 61 62 64 b 65 1 0 0 3 5 6 8 13 16 17 18 19 21 22 23 24 26 27 29 30 33 34 36 37 38 39 41 44 45 46 47 50 51 53 54 55 56 57 58 60 61 62 64 # 28450 revdifference c a 65 1 0 0 3 5 6 8 13 16 17 18 19 21 22 23 24 26 27 29 30 33 34 36 37 38 39 41 44 45 46 47 50 51 53 54 55 56 57 58 60 61 62 64 b 65 0 1 0 1 6 12 14 17 18 19 20 21 22 23 24 26 29 31 32 33 36 38 42 44 46 47 49 50 51 53 54 58 59 61 62 64 # 28451 revdifference c a 65 1 0 e b 65 1 0 e # 28452 revdifference c a 65 1 0 e b 65 1 0 e # 28453 revdifference c a 65 1 0 e b 65 1 0 e # 28454 revdifference c a 65 1 0 e b 65 1 0 f # 28455 revdifference c a 65 1 0 e b 65 1 0 e # 28456 revdifference c a 65 1 0 e b 65 1 0 2 6 8 14 17 18 21 22 23 24 27 29 34 37 38 42 43 45 47 49 50 51 52 53 54 55 61 62 # 28457 revdifference c a 65 1 0 f b 65 1 0 f # 28458 revdifference c a 65 1 0 f b 65 1 0 e # 28459 revdifference c a 65 1 0 f b 65 1 0 f # 28460 revdifference c a 65 1 0 f b 65 1 0 f # 28461 revdifference c a 65 1 0 f b 65 1 0 f # 28462 revdifference c a 65 1 0 f b 65 1 0 0 1 2 3 4 10 11 12 15 18 23 24 25 27 28 29 31 32 33 34 35 38 40 41 43 45 47 50 51 52 54 55 58 60 61 63 64 # 28463 revdifference c a 65 1 0 3 5 6 9 14 17 19 20 21 23 24 25 26 27 29 30 31 33 34 35 36 37 38 39 43 44 45 47 48 50 53 56 58 59 61 62 64 b 65 1 0 3 5 6 9 14 17 19 20 21 23 24 25 26 27 29 30 31 33 34 35 36 37 38 39 43 44 45 47 48 50 53 56 58 59 61 62 64 # 28464 revdifference c a 65 1 0 3 5 6 9 14 17 19 20 21 23 24 25 26 27 29 30 31 33 34 35 36 37 38 39 43 44 45 47 48 50 53 56 58 59 61 62 64 b 65 1 0 e # 28465 revdifference c a 65 1 0 6 7 8 11 12 17 18 21 22 23 24 25 27 28 29 32 33 38 40 42 44 46 51 54 60 61 63 64 b 65 1 0 6 7 8 11 12 17 18 21 22 23 24 25 27 28 29 32 33 38 40 42 44 46 51 54 60 61 63 64 # 28466 revdifference c a 65 1 0 6 7 8 11 12 17 18 21 22 23 24 25 27 28 29 32 33 38 40 42 44 46 51 54 60 61 63 64 b 65 1 0 f # 28467 revdifference c a 65 1 0 0 6 7 10 11 13 15 19 21 23 24 25 26 27 29 32 33 38 39 40 41 42 44 46 48 52 53 54 55 57 58 59 62 64 b 65 1 0 0 6 7 10 11 13 15 19 21 23 24 25 26 27 29 32 33 38 39 40 41 42 44 46 48 52 53 54 55 57 58 59 62 64 # 28468 revdifference c a 65 1 0 0 6 7 10 11 13 15 19 21 23 24 25 26 27 29 32 33 38 39 40 41 42 44 46 48 52 53 54 55 57 58 59 62 64 b 65 1 0 1 3 4 5 6 8 11 14 16 17 20 22 23 25 28 29 33 36 38 41 43 49 50 53 54 58 60 # 28469 revdifference c a 65 1 0 e b 65 1 0 e # 28470 revdifference c a 65 1 0 e b 65 1 1 e # 28471 revdifference c a 65 1 0 e b 65 1 0 e # 28472 revdifference c a 65 1 0 e b 65 1 1 f # 28473 revdifference c a 65 1 0 e b 65 1 0 e # 28474 revdifference c a 65 1 0 e b 65 1 1 0 1 2 3 8 10 16 17 19 20 21 23 24 26 28 30 31 33 34 35 43 45 48 49 52 55 56 59 60 61 62 64 # 28475 revdifference c a 65 1 0 f b 65 1 0 f # 28476 revdifference c a 65 1 0 f b 65 1 1 e # 28477 revdifference c a 65 1 0 f b 65 1 0 f # 28478 revdifference c a 65 1 0 f b 65 1 1 f # 28479 revdifference c a 65 1 0 f b 65 1 0 f # 28480 revdifference c a 65 1 0 f b 65 1 1 1 2 3 8 10 11 16 17 18 21 23 24 26 27 28 30 33 36 38 39 40 41 45 48 53 56 59 60 61 63 64 # 28481 revdifference c a 65 1 0 0 2 6 8 10 11 12 14 16 20 21 24 27 28 30 31 32 34 36 37 38 39 41 42 43 44 45 47 49 53 54 62 64 b 65 1 0 0 2 6 8 10 11 12 14 16 20 21 24 27 28 30 31 32 34 36 37 38 39 41 42 43 44 45 47 49 53 54 62 64 # 28482 revdifference c a 65 1 0 0 2 6 8 10 11 12 14 16 20 21 24 27 28 30 31 32 34 36 37 38 39 41 42 43 44 45 47 49 53 54 62 64 b 65 1 1 e # 28483 revdifference c a 65 1 0 0 2 3 5 7 8 10 11 13 16 17 18 19 20 22 23 24 27 29 30 39 40 42 45 48 50 53 57 60 61 62 63 b 65 1 0 0 2 3 5 7 8 10 11 13 16 17 18 19 20 22 23 24 27 29 30 39 40 42 45 48 50 53 57 60 61 62 63 # 28484 revdifference c a 65 1 0 0 2 3 5 7 8 10 11 13 16 17 18 19 20 22 23 24 27 29 30 39 40 42 45 48 50 53 57 60 61 62 63 b 65 1 1 f # 28485 revdifference c a 65 1 0 0 2 4 5 10 12 13 16 17 18 19 21 25 26 29 30 34 38 39 40 41 43 44 46 47 49 50 52 53 54 55 56 57 60 61 62 b 65 1 0 0 2 4 5 10 12 13 16 17 18 19 21 25 26 29 30 34 38 39 40 41 43 44 46 47 49 50 52 53 54 55 56 57 60 61 62 # 28486 revdifference c a 65 1 0 0 2 4 5 10 12 13 16 17 18 19 21 25 26 29 30 34 38 39 40 41 43 44 46 47 49 50 52 53 54 55 56 57 60 61 62 b 65 1 1 0 1 2 3 4 6 8 13 16 17 18 19 20 21 25 30 35 36 37 39 41 42 43 44 53 54 57 58 59 63 64 # 28487 revdifference c a 65 1 1 e b 65 1 1 e # 28488 revdifference c a 65 1 1 e b 65 0 0 e # 28489 revdifference c a 65 1 1 e b 65 1 1 e # 28490 revdifference c a 65 1 1 e b 65 0 0 f # 28491 revdifference c a 65 1 1 e b 65 1 1 e # 28492 revdifference c a 65 1 1 e b 65 0 0 1 2 5 6 7 8 9 10 14 17 18 20 22 23 24 25 28 29 32 34 35 37 38 39 40 41 44 45 46 48 50 51 52 55 57 60 61 62 # 28493 revdifference c a 65 1 1 f b 65 1 1 f # 28494 revdifference c a 65 1 1 f b 65 0 0 e # 28495 revdifference c a 65 1 1 f b 65 1 1 f # 28496 revdifference c a 65 1 1 f b 65 0 0 f # 28497 revdifference c a 65 1 1 f b 65 1 1 f # 28498 revdifference c a 65 1 1 f b 65 0 0 0 3 6 8 9 11 12 13 14 18 19 20 21 23 24 27 29 30 31 34 35 36 39 47 48 50 51 53 57 58 59 60 61 62 # 28499 revdifference c a 65 1 1 3 4 8 9 11 14 15 16 18 19 20 23 26 28 30 32 35 37 38 40 43 44 45 46 47 49 50 52 60 62 63 b 65 1 1 3 4 8 9 11 14 15 16 18 19 20 23 26 28 30 32 35 37 38 40 43 44 45 46 47 49 50 52 60 62 63 # 28500 revdifference c a 65 1 1 3 4 8 9 11 14 15 16 18 19 20 23 26 28 30 32 35 37 38 40 43 44 45 46 47 49 50 52 60 62 63 b 65 0 0 e # 28501 revdifference c a 65 1 1 1 2 4 10 12 13 14 15 18 19 20 21 25 27 28 34 35 37 39 44 46 48 49 51 52 57 58 59 63 b 65 1 1 1 2 4 10 12 13 14 15 18 19 20 21 25 27 28 34 35 37 39 44 46 48 49 51 52 57 58 59 63 # 28502 revdifference c a 65 1 1 1 2 4 10 12 13 14 15 18 19 20 21 25 27 28 34 35 37 39 44 46 48 49 51 52 57 58 59 63 b 65 0 0 f # 28503 revdifference c a 65 1 1 0 1 2 3 4 5 11 13 14 16 17 18 22 25 26 28 29 30 31 33 34 36 38 40 41 44 47 51 52 53 55 56 59 62 63 b 65 1 1 0 1 2 3 4 5 11 13 14 16 17 18 22 25 26 28 29 30 31 33 34 36 38 40 41 44 47 51 52 53 55 56 59 62 63 # 28504 revdifference c a 65 1 1 0 1 2 3 4 5 11 13 14 16 17 18 22 25 26 28 29 30 31 33 34 36 38 40 41 44 47 51 52 53 55 56 59 62 63 b 65 0 0 0 3 4 5 6 7 9 10 11 15 16 18 19 20 21 26 27 28 31 32 33 34 35 36 38 43 44 45 46 47 49 53 54 55 60 61 62 63 # 28505 revdifference c a 65 1 1 e b 65 1 1 e # 28506 revdifference c a 65 1 1 e b 65 0 1 e # 28507 revdifference c a 65 1 1 e b 65 1 1 e # 28508 revdifference c a 65 1 1 e b 65 0 1 f # 28509 revdifference c a 65 1 1 e b 65 1 1 e # 28510 revdifference c a 65 1 1 e b 65 0 1 0 6 7 8 9 10 12 14 16 17 18 19 20 21 27 29 33 35 39 40 43 44 47 50 51 52 53 59 61 63 # 28511 revdifference c a 65 1 1 f b 65 1 1 f # 28512 revdifference c a 65 1 1 f b 65 0 1 e # 28513 revdifference c a 65 1 1 f b 65 1 1 f # 28514 revdifference c a 65 1 1 f b 65 0 1 f # 28515 revdifference c a 65 1 1 f b 65 1 1 f # 28516 revdifference c a 65 1 1 f b 65 0 1 0 1 2 3 5 6 9 12 13 14 16 17 19 20 24 26 29 30 32 33 35 39 40 41 43 44 45 48 51 52 55 56 63 64 # 28517 revdifference c a 65 1 1 0 1 3 6 9 10 15 16 17 18 22 24 26 27 28 29 30 32 36 42 43 44 45 47 48 50 52 53 54 59 63 64 b 65 1 1 0 1 3 6 9 10 15 16 17 18 22 24 26 27 28 29 30 32 36 42 43 44 45 47 48 50 52 53 54 59 63 64 # 28518 revdifference c a 65 1 1 0 1 3 6 9 10 15 16 17 18 22 24 26 27 28 29 30 32 36 42 43 44 45 47 48 50 52 53 54 59 63 64 b 65 0 1 e # 28519 revdifference c a 65 1 1 0 2 4 5 6 8 9 11 13 14 16 17 19 20 21 27 28 30 31 32 38 40 41 42 44 45 46 47 48 49 50 52 54 55 58 60 62 64 b 65 1 1 0 2 4 5 6 8 9 11 13 14 16 17 19 20 21 27 28 30 31 32 38 40 41 42 44 45 46 47 48 49 50 52 54 55 58 60 62 64 # 28520 revdifference c a 65 1 1 0 2 4 5 6 8 9 11 13 14 16 17 19 20 21 27 28 30 31 32 38 40 41 42 44 45 46 47 48 49 50 52 54 55 58 60 62 64 b 65 0 1 f # 28521 revdifference c a 65 1 1 1 4 5 7 8 9 10 13 16 17 19 23 24 25 28 29 31 32 33 35 36 37 40 42 44 46 47 48 49 50 56 57 58 59 60 62 63 b 65 1 1 1 4 5 7 8 9 10 13 16 17 19 23 24 25 28 29 31 32 33 35 36 37 40 42 44 46 47 48 49 50 56 57 58 59 60 62 63 # 28522 revdifference c a 65 1 1 1 4 5 7 8 9 10 13 16 17 19 23 24 25 28 29 31 32 33 35 36 37 40 42 44 46 47 48 49 50 56 57 58 59 60 62 63 b 65 0 1 2 4 6 11 12 13 14 15 16 19 22 25 26 29 30 31 33 34 37 39 41 44 51 52 58 59 60 # 28523 revdifference c a 65 1 1 e b 65 1 1 e # 28524 revdifference c a 65 1 1 e b 65 1 0 e # 28525 revdifference c a 65 1 1 e b 65 1 1 e # 28526 revdifference c a 65 1 1 e b 65 1 0 f # 28527 revdifference c a 65 1 1 e b 65 1 1 e # 28528 revdifference c a 65 1 1 e b 65 1 0 4 6 7 8 9 11 13 15 18 19 20 21 23 24 25 26 31 32 33 35 39 41 42 44 48 49 51 52 53 54 55 56 57 58 60 63 # 28529 revdifference c a 65 1 1 f b 65 1 1 f # 28530 revdifference c a 65 1 1 f b 65 1 0 e # 28531 revdifference c a 65 1 1 f b 65 1 1 f # 28532 revdifference c a 65 1 1 f b 65 1 0 f # 28533 revdifference c a 65 1 1 f b 65 1 1 f # 28534 revdifference c a 65 1 1 f b 65 1 0 0 2 3 4 5 7 8 9 10 12 15 16 17 18 19 20 21 24 25 28 30 31 32 34 35 37 38 39 40 41 43 46 49 50 54 62 64 # 28535 revdifference c a 65 1 1 0 1 2 3 4 5 10 11 12 13 15 16 22 24 25 26 28 30 31 33 35 36 37 42 46 48 50 51 52 55 58 60 61 63 64 b 65 1 1 0 1 2 3 4 5 10 11 12 13 15 16 22 24 25 26 28 30 31 33 35 36 37 42 46 48 50 51 52 55 58 60 61 63 64 # 28536 revdifference c a 65 1 1 0 1 2 3 4 5 10 11 12 13 15 16 22 24 25 26 28 30 31 33 35 36 37 42 46 48 50 51 52 55 58 60 61 63 64 b 65 1 0 e # 28537 revdifference c a 65 1 1 0 1 2 3 6 7 10 16 20 21 22 24 26 27 28 29 30 32 33 42 43 50 53 62 b 65 1 1 0 1 2 3 6 7 10 16 20 21 22 24 26 27 28 29 30 32 33 42 43 50 53 62 # 28538 revdifference c a 65 1 1 0 1 2 3 6 7 10 16 20 21 22 24 26 27 28 29 30 32 33 42 43 50 53 62 b 65 1 0 f # 28539 revdifference c a 65 1 1 0 1 2 6 10 12 14 18 20 22 24 26 28 30 31 36 37 38 39 41 47 48 54 56 59 60 62 63 64 b 65 1 1 0 1 2 6 10 12 14 18 20 22 24 26 28 30 31 36 37 38 39 41 47 48 54 56 59 60 62 63 64 # 28540 revdifference c a 65 1 1 0 1 2 6 10 12 14 18 20 22 24 26 28 30 31 36 37 38 39 41 47 48 54 56 59 60 62 63 64 b 65 1 0 0 3 8 9 10 13 17 18 19 22 23 24 26 27 29 30 35 36 37 39 43 47 50 51 54 56 61 # 28541 revdifference c a 65 1 1 e b 65 1 1 e # 28542 revdifference c a 65 1 1 e b 65 1 1 e # 28543 revdifference c a 65 1 1 e b 65 1 1 e # 28544 revdifference c a 65 1 1 e b 65 1 1 f # 28545 revdifference c a 65 1 1 e b 65 1 1 e # 28546 revdifference c a 65 1 1 e b 65 1 1 0 2 5 6 7 8 9 10 12 13 14 18 19 21 22 23 26 28 32 34 37 38 40 41 42 43 44 46 48 49 52 54 55 57 61 62 # 28547 revdifference c a 65 1 1 f b 65 1 1 f # 28548 revdifference c a 65 1 1 f b 65 1 1 e # 28549 revdifference c a 65 1 1 f b 65 1 1 f # 28550 revdifference c a 65 1 1 f b 65 1 1 f # 28551 revdifference c a 65 1 1 f b 65 1 1 f # 28552 revdifference c a 65 1 1 f b 65 1 1 0 3 5 11 14 15 16 18 19 21 24 25 26 27 29 30 34 35 39 40 41 42 43 45 46 47 48 49 50 59 62 63 64 # 28553 revdifference c a 65 1 1 0 1 2 5 7 15 19 20 21 22 25 28 31 32 36 40 42 43 44 45 46 47 50 53 54 55 62 64 b 65 1 1 0 1 2 5 7 15 19 20 21 22 25 28 31 32 36 40 42 43 44 45 46 47 50 53 54 55 62 64 # 28554 revdifference c a 65 1 1 0 1 2 5 7 15 19 20 21 22 25 28 31 32 36 40 42 43 44 45 46 47 50 53 54 55 62 64 b 65 1 1 e # 28555 revdifference c a 65 1 1 1 2 3 4 8 11 15 16 17 19 20 23 27 29 30 31 32 35 36 37 39 42 43 44 46 47 51 52 53 54 59 61 b 65 1 1 1 2 3 4 8 11 15 16 17 19 20 23 27 29 30 31 32 35 36 37 39 42 43 44 46 47 51 52 53 54 59 61 # 28556 revdifference c a 65 1 1 1 2 3 4 8 11 15 16 17 19 20 23 27 29 30 31 32 35 36 37 39 42 43 44 46 47 51 52 53 54 59 61 b 65 1 1 f # 28557 revdifference c a 65 1 1 0 1 3 5 7 8 11 15 16 18 21 22 23 28 30 31 33 34 35 36 39 40 41 42 45 47 56 58 59 60 62 b 65 1 1 0 1 3 5 7 8 11 15 16 18 21 22 23 28 30 31 33 34 35 36 39 40 41 42 45 47 56 58 59 60 62 # 28558 revdifference c a 65 1 1 0 1 3 5 7 8 11 15 16 18 21 22 23 28 30 31 33 34 35 36 39 40 41 42 45 47 56 58 59 60 62 b 65 1 1 0 4 7 8 9 10 11 13 17 18 19 20 24 28 29 30 31 34 35 36 38 39 40 41 42 44 45 46 48 50 51 52 55 56 57 59 60 63 64 # 28559 revdifference c a 211 0 0 e b 211 0 0 e # 28560 revdifference c a 211 0 0 e b 211 0 0 e # 28561 revdifference c a 211 0 0 e b 211 0 0 e # 28562 revdifference c a 211 0 0 e b 211 0 0 f # 28563 revdifference c a 211 0 0 e b 211 0 0 e # 28564 revdifference c a 211 0 0 e b 211 0 0 1 3 4 6 8 9 11 12 14 18 19 20 21 22 24 28 30 35 36 37 39 40 41 42 43 46 47 48 49 50 51 52 55 56 58 59 60 61 63 65 66 68 70 71 73 81 82 86 88 89 92 93 96 98 100 101 105 106 107 109 110 111 112 113 114 117 118 119 120 123 125 130 132 133 134 136 139 142 145 146 148 149 151 153 154 155 156 161 162 164 165 166 167 170 171 175 179 181 182 183 184 186 187 188 189 192 194 195 196 197 198 200 202 204 # 28565 revdifference c a 211 0 0 f b 211 0 0 f # 28566 revdifference c a 211 0 0 f b 211 0 0 e # 28567 revdifference c a 211 0 0 f b 211 0 0 f # 28568 revdifference c a 211 0 0 f b 211 0 0 f # 28569 revdifference c a 211 0 0 f b 211 0 0 f # 28570 revdifference c a 211 0 0 f b 211 0 0 0 2 4 7 10 17 18 20 25 26 27 30 31 33 37 39 40 47 52 53 54 57 59 60 62 66 67 68 71 73 75 77 78 79 81 84 86 88 89 90 91 93 96 99 100 101 102 107 108 109 112 113 115 116 118 119 121 122 124 126 127 128 130 131 132 133 134 136 139 141 145 146 148 149 152 154 155 156 157 159 160 162 163 164 165 167 168 169 170 175 176 179 181 185 188 189 191 192 194 195 196 198 199 200 201 205 209 # 28571 revdifference c a 211 0 0 0 1 7 11 13 14 16 17 19 20 22 25 26 27 28 29 30 31 32 34 36 40 41 43 44 45 48 51 52 56 58 59 61 62 65 66 70 71 73 74 76 78 79 80 81 82 86 88 89 92 93 94 96 97 98 99 102 103 105 109 111 112 116 119 120 121 123 124 126 129 131 134 135 139 141 142 149 152 153 158 159 160 162 164 165 166 168 172 173 177 179 180 181 183 187 188 191 192 194 195 196 197 199 205 207 208 209 b 211 0 0 0 1 7 11 13 14 16 17 19 20 22 25 26 27 28 29 30 31 32 34 36 40 41 43 44 45 48 51 52 56 58 59 61 62 65 66 70 71 73 74 76 78 79 80 81 82 86 88 89 92 93 94 96 97 98 99 102 103 105 109 111 112 116 119 120 121 123 124 126 129 131 134 135 139 141 142 149 152 153 158 159 160 162 164 165 166 168 172 173 177 179 180 181 183 187 188 191 192 194 195 196 197 199 205 207 208 209 # 28572 revdifference c a 211 0 0 0 1 7 11 13 14 16 17 19 20 22 25 26 27 28 29 30 31 32 34 36 40 41 43 44 45 48 51 52 56 58 59 61 62 65 66 70 71 73 74 76 78 79 80 81 82 86 88 89 92 93 94 96 97 98 99 102 103 105 109 111 112 116 119 120 121 123 124 126 129 131 134 135 139 141 142 149 152 153 158 159 160 162 164 165 166 168 172 173 177 179 180 181 183 187 188 191 192 194 195 196 197 199 205 207 208 209 b 211 0 0 e # 28573 revdifference c a 211 0 0 0 1 2 6 7 8 9 11 12 13 14 16 17 18 19 20 22 24 25 26 29 30 33 34 35 36 38 39 42 44 46 47 52 58 59 60 61 62 64 65 67 69 70 71 74 76 77 78 83 84 85 90 93 94 96 97 98 99 100 101 102 105 111 112 113 114 115 116 120 127 130 133 137 138 139 142 148 149 152 153 154 160 162 163 164 171 175 176 177 178 182 185 186 187 188 189 191 193 194 198 203 206 209 210 b 211 0 0 0 1 2 6 7 8 9 11 12 13 14 16 17 18 19 20 22 24 25 26 29 30 33 34 35 36 38 39 42 44 46 47 52 58 59 60 61 62 64 65 67 69 70 71 74 76 77 78 83 84 85 90 93 94 96 97 98 99 100 101 102 105 111 112 113 114 115 116 120 127 130 133 137 138 139 142 148 149 152 153 154 160 162 163 164 171 175 176 177 178 182 185 186 187 188 189 191 193 194 198 203 206 209 210 # 28574 revdifference c a 211 0 0 0 1 2 6 7 8 9 11 12 13 14 16 17 18 19 20 22 24 25 26 29 30 33 34 35 36 38 39 42 44 46 47 52 58 59 60 61 62 64 65 67 69 70 71 74 76 77 78 83 84 85 90 93 94 96 97 98 99 100 101 102 105 111 112 113 114 115 116 120 127 130 133 137 138 139 142 148 149 152 153 154 160 162 163 164 171 175 176 177 178 182 185 186 187 188 189 191 193 194 198 203 206 209 210 b 211 0 0 f # 28575 revdifference c a 211 0 0 0 2 4 6 9 10 13 14 16 20 22 23 24 30 33 38 39 42 43 45 50 51 52 54 55 56 63 64 65 69 70 71 73 74 75 76 77 78 81 85 87 89 91 92 93 94 95 96 97 100 105 108 112 113 114 116 119 122 127 132 134 135 141 142 145 146 149 151 153 154 155 158 159 160 161 167 168 169 174 175 179 182 183 185 186 187 188 190 191 195 196 197 198 199 202 203 204 205 206 b 211 0 0 0 2 4 6 9 10 13 14 16 20 22 23 24 30 33 38 39 42 43 45 50 51 52 54 55 56 63 64 65 69 70 71 73 74 75 76 77 78 81 85 87 89 91 92 93 94 95 96 97 100 105 108 112 113 114 116 119 122 127 132 134 135 141 142 145 146 149 151 153 154 155 158 159 160 161 167 168 169 174 175 179 182 183 185 186 187 188 190 191 195 196 197 198 199 202 203 204 205 206 # 28576 revdifference c a 211 0 0 0 2 4 6 9 10 13 14 16 20 22 23 24 30 33 38 39 42 43 45 50 51 52 54 55 56 63 64 65 69 70 71 73 74 75 76 77 78 81 85 87 89 91 92 93 94 95 96 97 100 105 108 112 113 114 116 119 122 127 132 134 135 141 142 145 146 149 151 153 154 155 158 159 160 161 167 168 169 174 175 179 182 183 185 186 187 188 190 191 195 196 197 198 199 202 203 204 205 206 b 211 0 0 0 1 3 5 8 9 11 13 14 16 17 21 24 30 34 38 41 42 43 44 45 48 49 50 51 52 55 56 60 64 66 67 68 77 78 79 80 81 82 83 86 87 88 91 92 93 94 95 97 98 101 102 103 106 109 115 116 118 120 121 123 124 127 128 133 134 137 138 140 142 144 145 146 147 149 151 152 154 156 159 161 162 163 164 165 167 168 171 172 174 175 177 180 181 186 187 190 191 193 194 195 196 197 198 199 203 204 206 207 # 28577 revdifference c a 211 0 0 e b 211 0 0 e # 28578 revdifference c a 211 0 0 e b 211 0 1 e # 28579 revdifference c a 211 0 0 e b 211 0 0 e # 28580 revdifference c a 211 0 0 e b 211 0 1 f # 28581 revdifference c a 211 0 0 e b 211 0 0 e # 28582 revdifference c a 211 0 0 e b 211 0 1 1 2 3 6 8 10 11 13 20 21 22 23 24 27 28 29 31 32 34 35 40 42 44 46 48 50 51 55 56 57 58 60 61 67 68 69 70 72 73 74 75 80 83 84 85 86 88 89 90 92 94 95 96 98 101 102 104 105 109 110 111 112 113 114 115 116 117 120 122 124 125 130 131 132 133 134 135 136 138 139 140 141 142 143 144 145 146 148 149 150 151 153 155 156 157 160 163 166 169 178 181 182 184 187 188 189 191 194 195 196 197 202 203 204 207 209 # 28583 revdifference c a 211 0 0 f b 211 0 0 f # 28584 revdifference c a 211 0 0 f b 211 0 1 e # 28585 revdifference c a 211 0 0 f b 211 0 0 f # 28586 revdifference c a 211 0 0 f b 211 0 1 f # 28587 revdifference c a 211 0 0 f b 211 0 0 f # 28588 revdifference c a 211 0 0 f b 211 0 1 0 1 6 9 13 16 19 20 21 22 23 24 25 26 27 29 30 32 36 40 41 42 44 47 49 50 52 54 55 57 59 60 63 64 65 66 68 70 71 76 77 80 81 83 87 89 90 96 98 99 100 102 104 106 107 108 109 110 111 112 116 117 120 122 124 126 127 130 132 133 135 136 138 139 141 142 146 150 152 153 154 156 160 161 162 163 164 166 167 169 170 171 174 175 176 177 178 179 180 181 183 185 190 193 196 198 201 203 207 208 210 # 28589 revdifference c a 211 0 0 0 3 4 6 8 12 13 14 16 21 22 25 26 28 31 34 36 37 41 42 44 47 48 49 52 53 55 56 59 62 63 64 65 67 69 71 73 74 78 83 85 86 91 92 94 95 96 97 100 101 104 108 111 112 113 114 115 116 117 122 123 124 125 126 127 128 132 134 135 136 138 140 149 150 151 153 154 155 158 160 161 162 163 168 170 172 174 176 178 181 182 185 187 191 193 194 195 198 200 201 202 203 204 205 207 210 b 211 0 0 0 3 4 6 8 12 13 14 16 21 22 25 26 28 31 34 36 37 41 42 44 47 48 49 52 53 55 56 59 62 63 64 65 67 69 71 73 74 78 83 85 86 91 92 94 95 96 97 100 101 104 108 111 112 113 114 115 116 117 122 123 124 125 126 127 128 132 134 135 136 138 140 149 150 151 153 154 155 158 160 161 162 163 168 170 172 174 176 178 181 182 185 187 191 193 194 195 198 200 201 202 203 204 205 207 210 # 28590 revdifference c a 211 0 0 0 3 4 6 8 12 13 14 16 21 22 25 26 28 31 34 36 37 41 42 44 47 48 49 52 53 55 56 59 62 63 64 65 67 69 71 73 74 78 83 85 86 91 92 94 95 96 97 100 101 104 108 111 112 113 114 115 116 117 122 123 124 125 126 127 128 132 134 135 136 138 140 149 150 151 153 154 155 158 160 161 162 163 168 170 172 174 176 178 181 182 185 187 191 193 194 195 198 200 201 202 203 204 205 207 210 b 211 0 1 e # 28591 revdifference c a 211 0 0 1 2 3 5 8 9 10 11 12 13 14 15 17 18 20 25 26 29 31 32 34 36 38 39 40 41 42 43 45 46 47 48 52 54 57 58 59 60 61 63 72 76 79 80 83 84 88 89 91 92 93 96 97 100 101 102 103 104 107 108 109 110 113 118 121 122 124 126 127 132 135 136 137 138 141 142 143 144 146 147 148 149 152 154 156 159 160 163 164 166 169 170 171 173 179 183 184 185 189 193 194 195 197 203 205 207 210 b 211 0 0 1 2 3 5 8 9 10 11 12 13 14 15 17 18 20 25 26 29 31 32 34 36 38 39 40 41 42 43 45 46 47 48 52 54 57 58 59 60 61 63 72 76 79 80 83 84 88 89 91 92 93 96 97 100 101 102 103 104 107 108 109 110 113 118 121 122 124 126 127 132 135 136 137 138 141 142 143 144 146 147 148 149 152 154 156 159 160 163 164 166 169 170 171 173 179 183 184 185 189 193 194 195 197 203 205 207 210 # 28592 revdifference c a 211 0 0 1 2 3 5 8 9 10 11 12 13 14 15 17 18 20 25 26 29 31 32 34 36 38 39 40 41 42 43 45 46 47 48 52 54 57 58 59 60 61 63 72 76 79 80 83 84 88 89 91 92 93 96 97 100 101 102 103 104 107 108 109 110 113 118 121 122 124 126 127 132 135 136 137 138 141 142 143 144 146 147 148 149 152 154 156 159 160 163 164 166 169 170 171 173 179 183 184 185 189 193 194 195 197 203 205 207 210 b 211 0 1 f # 28593 revdifference c a 211 0 0 1 2 4 5 6 9 10 11 12 14 15 16 20 21 23 29 30 31 32 33 36 38 44 45 47 49 50 52 56 57 65 66 70 72 74 75 77 78 79 80 81 85 86 87 91 92 97 98 101 102 104 105 108 110 112 114 116 117 120 123 124 125 126 128 129 130 133 134 138 141 142 144 145 146 147 149 153 156 158 160 162 166 167 168 169 170 173 174 179 181 183 184 185 187 188 191 192 193 195 198 201 203 207 208 209 210 b 211 0 0 1 2 4 5 6 9 10 11 12 14 15 16 20 21 23 29 30 31 32 33 36 38 44 45 47 49 50 52 56 57 65 66 70 72 74 75 77 78 79 80 81 85 86 87 91 92 97 98 101 102 104 105 108 110 112 114 116 117 120 123 124 125 126 128 129 130 133 134 138 141 142 144 145 146 147 149 153 156 158 160 162 166 167 168 169 170 173 174 179 181 183 184 185 187 188 191 192 193 195 198 201 203 207 208 209 210 # 28594 revdifference c a 211 0 0 1 2 4 5 6 9 10 11 12 14 15 16 20 21 23 29 30 31 32 33 36 38 44 45 47 49 50 52 56 57 65 66 70 72 74 75 77 78 79 80 81 85 86 87 91 92 97 98 101 102 104 105 108 110 112 114 116 117 120 123 124 125 126 128 129 130 133 134 138 141 142 144 145 146 147 149 153 156 158 160 162 166 167 168 169 170 173 174 179 181 183 184 185 187 188 191 192 193 195 198 201 203 207 208 209 210 b 211 0 1 1 4 6 9 10 12 13 14 15 22 24 27 28 30 32 35 39 41 42 43 44 45 46 47 48 54 56 58 59 61 62 64 68 71 74 76 77 79 80 81 86 87 89 90 91 93 97 98 99 102 103 105 106 108 111 112 113 117 119 120 121 122 124 126 127 128 129 130 132 133 134 136 137 138 139 145 147 148 149 152 154 162 165 166 168 169 171 173 175 177 181 182 186 187 188 192 193 196 198 200 201 204 205 206 # 28595 revdifference c a 211 0 0 e b 211 0 0 e # 28596 revdifference c a 211 0 0 e b 211 1 0 e # 28597 revdifference c a 211 0 0 e b 211 0 0 e # 28598 revdifference c a 211 0 0 e b 211 1 0 f # 28599 revdifference c a 211 0 0 e b 211 0 0 e # 28600 revdifference c a 211 0 0 e b 211 1 0 0 4 5 6 8 10 11 12 13 17 18 19 20 21 23 24 26 27 28 31 32 33 34 35 37 41 44 45 53 56 59 60 61 63 67 69 71 72 74 78 79 80 81 82 84 86 87 89 92 93 94 99 102 103 104 105 110 113 114 115 118 119 122 125 127 129 130 131 134 142 143 146 147 148 152 154 155 158 159 160 162 164 168 169 170 174 175 176 177 178 179 183 184 186 189 193 194 203 204 206 207 210 # 28601 revdifference c a 211 0 0 f b 211 0 0 f # 28602 revdifference c a 211 0 0 f b 211 1 0 e # 28603 revdifference c a 211 0 0 f b 211 0 0 f # 28604 revdifference c a 211 0 0 f b 211 1 0 f # 28605 revdifference c a 211 0 0 f b 211 0 0 f # 28606 revdifference c a 211 0 0 f b 211 1 0 1 7 8 10 13 15 19 20 25 27 28 29 30 33 34 35 38 40 41 42 44 46 48 50 52 54 55 56 58 59 60 61 64 68 70 71 72 73 74 75 76 77 78 79 81 83 86 89 92 93 94 98 100 102 103 105 108 110 115 118 119 123 124 128 131 132 135 137 142 143 145 146 147 149 150 152 155 156 157 159 161 162 163 166 167 171 173 174 175 176 178 181 182 199 200 208 210 # 28607 revdifference c a 211 0 0 0 4 5 8 9 10 13 14 15 18 22 24 25 26 28 29 31 33 34 35 41 42 43 44 45 50 51 52 55 57 60 61 62 65 67 71 74 78 79 80 81 82 83 85 86 87 88 90 91 92 93 96 100 101 106 107 109 110 112 113 114 115 116 117 118 119 120 121 122 123 124 125 127 129 132 133 134 136 137 140 142 143 145 146 147 150 155 157 158 159 160 161 163 164 167 169 173 175 176 177 178 182 183 184 186 193 197 198 199 200 205 206 207 208 209 b 211 0 0 0 4 5 8 9 10 13 14 15 18 22 24 25 26 28 29 31 33 34 35 41 42 43 44 45 50 51 52 55 57 60 61 62 65 67 71 74 78 79 80 81 82 83 85 86 87 88 90 91 92 93 96 100 101 106 107 109 110 112 113 114 115 116 117 118 119 120 121 122 123 124 125 127 129 132 133 134 136 137 140 142 143 145 146 147 150 155 157 158 159 160 161 163 164 167 169 173 175 176 177 178 182 183 184 186 193 197 198 199 200 205 206 207 208 209 # 28608 revdifference c a 211 0 0 0 4 5 8 9 10 13 14 15 18 22 24 25 26 28 29 31 33 34 35 41 42 43 44 45 50 51 52 55 57 60 61 62 65 67 71 74 78 79 80 81 82 83 85 86 87 88 90 91 92 93 96 100 101 106 107 109 110 112 113 114 115 116 117 118 119 120 121 122 123 124 125 127 129 132 133 134 136 137 140 142 143 145 146 147 150 155 157 158 159 160 161 163 164 167 169 173 175 176 177 178 182 183 184 186 193 197 198 199 200 205 206 207 208 209 b 211 1 0 e # 28609 revdifference c a 211 0 0 2 3 6 7 11 12 14 15 16 17 18 19 23 25 26 28 30 31 32 33 34 35 36 37 38 40 41 43 46 47 48 49 50 52 53 56 57 58 59 61 62 65 69 70 72 77 80 81 82 83 84 87 90 91 92 94 98 99 101 107 109 112 114 115 118 119 124 126 128 129 130 131 132 136 137 138 146 147 148 149 150 154 156 157 160 163 164 165 166 169 170 171 175 176 178 180 182 184 189 190 191 194 197 198 199 200 202 203 204 205 206 210 b 211 0 0 2 3 6 7 11 12 14 15 16 17 18 19 23 25 26 28 30 31 32 33 34 35 36 37 38 40 41 43 46 47 48 49 50 52 53 56 57 58 59 61 62 65 69 70 72 77 80 81 82 83 84 87 90 91 92 94 98 99 101 107 109 112 114 115 118 119 124 126 128 129 130 131 132 136 137 138 146 147 148 149 150 154 156 157 160 163 164 165 166 169 170 171 175 176 178 180 182 184 189 190 191 194 197 198 199 200 202 203 204 205 206 210 # 28610 revdifference c a 211 0 0 2 3 6 7 11 12 14 15 16 17 18 19 23 25 26 28 30 31 32 33 34 35 36 37 38 40 41 43 46 47 48 49 50 52 53 56 57 58 59 61 62 65 69 70 72 77 80 81 82 83 84 87 90 91 92 94 98 99 101 107 109 112 114 115 118 119 124 126 128 129 130 131 132 136 137 138 146 147 148 149 150 154 156 157 160 163 164 165 166 169 170 171 175 176 178 180 182 184 189 190 191 194 197 198 199 200 202 203 204 205 206 210 b 211 1 0 f # 28611 revdifference c a 211 0 0 1 2 4 6 9 13 15 16 17 19 20 21 23 24 28 29 31 32 33 35 38 39 43 44 46 47 50 54 55 56 65 67 71 73 74 77 79 80 82 85 90 91 92 97 99 100 101 102 105 106 107 112 114 117 119 122 126 127 132 134 136 137 141 142 143 145 147 148 149 150 152 153 154 157 160 161 162 163 164 167 169 175 177 179 184 185 186 188 190 191 192 194 195 196 198 200 202 204 208 209 b 211 0 0 1 2 4 6 9 13 15 16 17 19 20 21 23 24 28 29 31 32 33 35 38 39 43 44 46 47 50 54 55 56 65 67 71 73 74 77 79 80 82 85 90 91 92 97 99 100 101 102 105 106 107 112 114 117 119 122 126 127 132 134 136 137 141 142 143 145 147 148 149 150 152 153 154 157 160 161 162 163 164 167 169 175 177 179 184 185 186 188 190 191 192 194 195 196 198 200 202 204 208 209 # 28612 revdifference c a 211 0 0 1 2 4 6 9 13 15 16 17 19 20 21 23 24 28 29 31 32 33 35 38 39 43 44 46 47 50 54 55 56 65 67 71 73 74 77 79 80 82 85 90 91 92 97 99 100 101 102 105 106 107 112 114 117 119 122 126 127 132 134 136 137 141 142 143 145 147 148 149 150 152 153 154 157 160 161 162 163 164 167 169 175 177 179 184 185 186 188 190 191 192 194 195 196 198 200 202 204 208 209 b 211 1 0 1 3 4 6 10 11 14 17 19 20 21 24 25 26 27 28 33 38 41 43 46 47 52 53 54 55 56 58 60 61 62 64 65 66 67 69 71 73 75 80 81 82 83 84 87 88 91 93 95 96 98 102 103 107 108 109 111 112 113 115 117 118 121 124 125 127 131 132 136 137 139 140 143 145 146 147 148 149 152 153 154 155 156 158 160 161 163 165 167 168 170 171 172 174 177 181 184 186 187 189 192 193 194 195 198 200 201 202 203 204 205 209 # 28613 revdifference c a 211 0 0 e b 211 0 0 e # 28614 revdifference c a 211 0 0 e b 211 1 1 e # 28615 revdifference c a 211 0 0 e b 211 0 0 e # 28616 revdifference c a 211 0 0 e b 211 1 1 f # 28617 revdifference c a 211 0 0 e b 211 0 0 e # 28618 revdifference c a 211 0 0 e b 211 1 1 0 1 2 4 7 8 9 11 12 13 14 15 18 19 20 22 23 26 27 28 29 31 38 46 47 49 55 56 59 60 61 62 64 65 66 69 70 71 72 73 78 79 80 84 86 88 91 93 96 97 98 100 103 105 106 107 108 109 111 113 118 119 120 121 122 123 124 125 127 128 129 131 133 135 136 138 139 142 143 144 145 149 151 152 153 154 155 156 158 159 162 163 166 168 170 172 173 175 176 178 179 182 185 192 193 197 198 199 201 206 208 209 # 28619 revdifference c a 211 0 0 f b 211 0 0 f # 28620 revdifference c a 211 0 0 f b 211 1 1 e # 28621 revdifference c a 211 0 0 f b 211 0 0 f # 28622 revdifference c a 211 0 0 f b 211 1 1 f # 28623 revdifference c a 211 0 0 f b 211 0 0 f # 28624 revdifference c a 211 0 0 f b 211 1 1 3 7 9 10 11 12 13 20 21 23 25 26 27 28 29 30 35 37 39 40 42 43 47 49 50 52 58 61 62 67 69 70 73 75 76 77 80 82 84 85 86 89 90 92 93 94 95 98 99 100 105 106 108 110 111 112 115 117 119 120 127 130 132 134 135 137 141 147 149 150 153 154 155 158 159 161 165 167 168 171 175 176 178 181 182 184 187 188 189 190 192 193 195 196 197 198 199 201 202 203 205 206 209 210 # 28625 revdifference c a 211 0 0 0 2 8 10 13 14 16 18 19 20 21 27 28 29 30 31 33 34 35 36 38 39 40 41 44 45 47 50 54 55 56 57 58 59 60 61 64 67 68 70 71 73 76 77 81 82 83 86 87 89 90 92 94 96 99 101 102 103 104 105 106 107 108 111 114 116 122 123 125 128 129 130 132 133 135 136 138 143 148 149 151 152 154 156 158 159 161 163 165 166 168 170 172 181 186 188 191 193 194 195 197 198 201 202 203 204 208 209 210 b 211 0 0 0 2 8 10 13 14 16 18 19 20 21 27 28 29 30 31 33 34 35 36 38 39 40 41 44 45 47 50 54 55 56 57 58 59 60 61 64 67 68 70 71 73 76 77 81 82 83 86 87 89 90 92 94 96 99 101 102 103 104 105 106 107 108 111 114 116 122 123 125 128 129 130 132 133 135 136 138 143 148 149 151 152 154 156 158 159 161 163 165 166 168 170 172 181 186 188 191 193 194 195 197 198 201 202 203 204 208 209 210 # 28626 revdifference c a 211 0 0 0 2 8 10 13 14 16 18 19 20 21 27 28 29 30 31 33 34 35 36 38 39 40 41 44 45 47 50 54 55 56 57 58 59 60 61 64 67 68 70 71 73 76 77 81 82 83 86 87 89 90 92 94 96 99 101 102 103 104 105 106 107 108 111 114 116 122 123 125 128 129 130 132 133 135 136 138 143 148 149 151 152 154 156 158 159 161 163 165 166 168 170 172 181 186 188 191 193 194 195 197 198 201 202 203 204 208 209 210 b 211 1 1 e # 28627 revdifference c a 211 0 0 0 1 2 4 6 8 11 12 14 16 17 20 23 27 29 32 35 36 38 39 40 42 43 44 45 49 50 52 53 57 58 59 60 62 64 67 68 71 72 74 76 77 78 80 81 82 83 84 86 89 90 91 93 97 100 101 103 104 107 111 112 114 115 116 117 118 120 121 124 125 126 129 130 132 135 136 138 139 140 142 143 144 145 147 150 156 158 161 162 163 166 168 172 176 177 182 183 190 191 193 194 195 198 199 200 203 205 210 b 211 0 0 0 1 2 4 6 8 11 12 14 16 17 20 23 27 29 32 35 36 38 39 40 42 43 44 45 49 50 52 53 57 58 59 60 62 64 67 68 71 72 74 76 77 78 80 81 82 83 84 86 89 90 91 93 97 100 101 103 104 107 111 112 114 115 116 117 118 120 121 124 125 126 129 130 132 135 136 138 139 140 142 143 144 145 147 150 156 158 161 162 163 166 168 172 176 177 182 183 190 191 193 194 195 198 199 200 203 205 210 # 28628 revdifference c a 211 0 0 0 1 2 4 6 8 11 12 14 16 17 20 23 27 29 32 35 36 38 39 40 42 43 44 45 49 50 52 53 57 58 59 60 62 64 67 68 71 72 74 76 77 78 80 81 82 83 84 86 89 90 91 93 97 100 101 103 104 107 111 112 114 115 116 117 118 120 121 124 125 126 129 130 132 135 136 138 139 140 142 143 144 145 147 150 156 158 161 162 163 166 168 172 176 177 182 183 190 191 193 194 195 198 199 200 203 205 210 b 211 1 1 f # 28629 revdifference c a 211 0 0 0 1 2 5 6 7 9 10 13 14 15 16 18 19 24 28 29 32 33 34 35 36 37 38 40 42 43 45 46 49 51 53 54 55 56 59 68 69 70 71 73 74 75 77 78 79 80 83 84 86 87 88 90 92 93 94 97 98 100 101 102 105 107 110 116 119 125 128 130 131 132 133 137 139 140 146 148 150 152 155 157 164 165 166 173 174 175 177 179 185 187 188 189 190 191 192 195 196 197 201 202 203 204 205 206 207 208 209 210 b 211 0 0 0 1 2 5 6 7 9 10 13 14 15 16 18 19 24 28 29 32 33 34 35 36 37 38 40 42 43 45 46 49 51 53 54 55 56 59 68 69 70 71 73 74 75 77 78 79 80 83 84 86 87 88 90 92 93 94 97 98 100 101 102 105 107 110 116 119 125 128 130 131 132 133 137 139 140 146 148 150 152 155 157 164 165 166 173 174 175 177 179 185 187 188 189 190 191 192 195 196 197 201 202 203 204 205 206 207 208 209 210 # 28630 revdifference c a 211 0 0 0 1 2 5 6 7 9 10 13 14 15 16 18 19 24 28 29 32 33 34 35 36 37 38 40 42 43 45 46 49 51 53 54 55 56 59 68 69 70 71 73 74 75 77 78 79 80 83 84 86 87 88 90 92 93 94 97 98 100 101 102 105 107 110 116 119 125 128 130 131 132 133 137 139 140 146 148 150 152 155 157 164 165 166 173 174 175 177 179 185 187 188 189 190 191 192 195 196 197 201 202 203 204 205 206 207 208 209 210 b 211 1 1 3 4 5 6 8 9 11 12 13 14 15 16 17 23 24 26 27 29 30 31 32 35 39 41 42 43 45 46 48 49 51 53 54 56 57 62 67 68 70 75 77 78 79 80 82 85 88 89 92 94 96 97 99 101 103 107 110 112 113 114 116 120 121 122 123 129 131 132 133 134 138 139 140 141 143 145 146 150 155 156 157 161 164 167 170 173 174 175 176 177 178 181 183 185 186 190 191 197 199 201 204 207 # 28631 revdifference c a 211 0 1 e b 211 0 1 e # 28632 revdifference c a 211 0 1 e b 211 0 0 e # 28633 revdifference c a 211 0 1 e b 211 0 1 e # 28634 revdifference c a 211 0 1 e b 211 0 0 f # 28635 revdifference c a 211 0 1 e b 211 0 1 e # 28636 revdifference c a 211 0 1 e b 211 0 0 0 1 2 3 6 8 11 12 15 16 17 19 23 26 28 36 37 38 39 42 43 44 45 46 47 48 50 53 54 55 57 58 62 64 65 66 68 69 73 75 76 78 79 83 86 87 89 93 94 95 96 97 99 100 101 104 107 108 109 110 113 115 117 118 120 122 123 125 126 128 131 135 136 138 139 142 143 146 147 149 151 154 157 158 161 163 166 168 172 179 182 183 184 185 187 188 189 192 194 196 197 198 199 205 206 207 209 210 # 28637 revdifference c a 211 0 1 f b 211 0 1 f # 28638 revdifference c a 211 0 1 f b 211 0 0 e # 28639 revdifference c a 211 0 1 f b 211 0 1 f # 28640 revdifference c a 211 0 1 f b 211 0 0 f # 28641 revdifference c a 211 0 1 f b 211 0 1 f # 28642 revdifference c a 211 0 1 f b 211 0 0 0 3 6 8 9 12 13 16 17 19 21 28 30 31 32 34 35 36 37 39 40 41 42 43 44 47 49 50 54 55 56 58 59 61 62 70 71 73 74 75 77 78 80 82 84 85 86 89 91 92 93 94 98 99 100 101 102 103 104 106 107 109 115 119 121 124 126 128 129 130 133 139 141 142 147 148 149 152 153 154 157 158 160 161 162 167 168 169 171 175 176 177 179 180 181 183 184 189 190 192 196 197 198 200 204 205 206 207 208 210 # 28643 revdifference c a 211 0 1 0 3 5 6 7 9 10 11 12 15 16 18 20 22 25 28 29 31 33 34 35 36 37 38 40 44 47 48 51 52 54 58 60 65 66 68 69 70 74 75 76 78 80 81 83 90 92 93 94 96 97 98 99 101 103 106 107 108 111 113 114 115 116 120 121 122 123 124 125 127 130 131 133 134 139 140 141 142 144 147 148 156 160 163 168 169 171 172 175 176 180 181 182 184 186 187 188 192 193 195 197 199 200 201 202 203 205 206 207 b 211 0 1 0 3 5 6 7 9 10 11 12 15 16 18 20 22 25 28 29 31 33 34 35 36 37 38 40 44 47 48 51 52 54 58 60 65 66 68 69 70 74 75 76 78 80 81 83 90 92 93 94 96 97 98 99 101 103 106 107 108 111 113 114 115 116 120 121 122 123 124 125 127 130 131 133 134 139 140 141 142 144 147 148 156 160 163 168 169 171 172 175 176 180 181 182 184 186 187 188 192 193 195 197 199 200 201 202 203 205 206 207 # 28644 revdifference c a 211 0 1 0 3 5 6 7 9 10 11 12 15 16 18 20 22 25 28 29 31 33 34 35 36 37 38 40 44 47 48 51 52 54 58 60 65 66 68 69 70 74 75 76 78 80 81 83 90 92 93 94 96 97 98 99 101 103 106 107 108 111 113 114 115 116 120 121 122 123 124 125 127 130 131 133 134 139 140 141 142 144 147 148 156 160 163 168 169 171 172 175 176 180 181 182 184 186 187 188 192 193 195 197 199 200 201 202 203 205 206 207 b 211 0 0 e # 28645 revdifference c a 211 0 1 1 3 4 5 6 7 11 16 18 19 21 24 27 28 33 36 40 41 45 50 51 52 55 56 58 59 60 65 66 73 74 75 79 84 85 87 90 92 94 97 98 99 103 104 105 106 109 111 113 115 117 118 119 122 124 125 126 127 130 131 132 133 135 136 142 147 148 152 159 160 165 172 174 176 178 179 180 182 184 186 188 190 192 194 195 199 200 201 203 206 207 208 209 210 b 211 0 1 1 3 4 5 6 7 11 16 18 19 21 24 27 28 33 36 40 41 45 50 51 52 55 56 58 59 60 65 66 73 74 75 79 84 85 87 90 92 94 97 98 99 103 104 105 106 109 111 113 115 117 118 119 122 124 125 126 127 130 131 132 133 135 136 142 147 148 152 159 160 165 172 174 176 178 179 180 182 184 186 188 190 192 194 195 199 200 201 203 206 207 208 209 210 # 28646 revdifference c a 211 0 1 1 3 4 5 6 7 11 16 18 19 21 24 27 28 33 36 40 41 45 50 51 52 55 56 58 59 60 65 66 73 74 75 79 84 85 87 90 92 94 97 98 99 103 104 105 106 109 111 113 115 117 118 119 122 124 125 126 127 130 131 132 133 135 136 142 147 148 152 159 160 165 172 174 176 178 179 180 182 184 186 188 190 192 194 195 199 200 201 203 206 207 208 209 210 b 211 0 0 f # 28647 revdifference c a 211 0 1 2 3 6 7 8 10 16 17 22 25 28 32 33 38 40 41 42 43 44 47 48 49 52 53 54 56 57 58 59 62 63 70 72 75 76 78 79 81 84 85 86 87 88 89 90 92 93 96 98 100 102 103 104 105 106 107 111 113 114 116 117 119 122 124 126 127 128 132 135 137 138 139 143 144 147 149 151 156 157 161 162 164 170 171 174 176 181 182 186 187 189 191 192 195 196 197 198 199 200 201 202 206 208 210 b 211 0 1 2 3 6 7 8 10 16 17 22 25 28 32 33 38 40 41 42 43 44 47 48 49 52 53 54 56 57 58 59 62 63 70 72 75 76 78 79 81 84 85 86 87 88 89 90 92 93 96 98 100 102 103 104 105 106 107 111 113 114 116 117 119 122 124 126 127 128 132 135 137 138 139 143 144 147 149 151 156 157 161 162 164 170 171 174 176 181 182 186 187 189 191 192 195 196 197 198 199 200 201 202 206 208 210 # 28648 revdifference c a 211 0 1 2 3 6 7 8 10 16 17 22 25 28 32 33 38 40 41 42 43 44 47 48 49 52 53 54 56 57 58 59 62 63 70 72 75 76 78 79 81 84 85 86 87 88 89 90 92 93 96 98 100 102 103 104 105 106 107 111 113 114 116 117 119 122 124 126 127 128 132 135 137 138 139 143 144 147 149 151 156 157 161 162 164 170 171 174 176 181 182 186 187 189 191 192 195 196 197 198 199 200 201 202 206 208 210 b 211 0 0 0 1 2 5 10 11 12 15 16 17 18 19 20 21 22 27 28 29 31 32 35 37 40 41 43 45 46 48 51 53 57 61 64 65 70 75 76 78 79 80 83 85 89 90 91 93 96 98 100 102 104 107 113 115 116 117 121 123 124 127 128 130 131 132 133 136 137 140 141 142 144 145 148 150 153 157 160 163 164 165 167 168 171 175 179 180 186 187 193 194 196 200 201 203 206 208 # 28649 revdifference c a 211 0 1 e b 211 0 1 e # 28650 revdifference c a 211 0 1 e b 211 0 1 e # 28651 revdifference c a 211 0 1 e b 211 0 1 e # 28652 revdifference c a 211 0 1 e b 211 0 1 f # 28653 revdifference c a 211 0 1 e b 211 0 1 e # 28654 revdifference c a 211 0 1 e b 211 0 1 0 1 2 4 7 9 10 11 13 14 15 17 19 20 23 25 26 27 28 31 32 35 37 38 39 41 42 43 47 49 50 52 54 56 57 59 60 61 63 65 66 67 69 70 71 74 75 76 78 80 81 82 83 85 89 90 92 98 99 101 102 103 106 108 109 110 111 112 114 115 119 124 125 127 130 136 137 138 139 140 144 149 150 151 152 154 155 156 158 160 162 164 165 166 167 168 170 171 172 175 177 179 182 185 189 190 200 203 206 207 209 210 # 28655 revdifference c a 211 0 1 f b 211 0 1 f # 28656 revdifference c a 211 0 1 f b 211 0 1 e # 28657 revdifference c a 211 0 1 f b 211 0 1 f # 28658 revdifference c a 211 0 1 f b 211 0 1 f # 28659 revdifference c a 211 0 1 f b 211 0 1 f # 28660 revdifference c a 211 0 1 f b 211 0 1 0 2 4 8 10 11 12 16 17 18 22 24 26 27 29 30 35 36 37 39 42 44 46 47 48 49 53 54 55 57 58 59 60 62 63 64 66 67 70 71 76 78 79 83 85 86 88 92 95 96 98 100 101 105 107 110 111 112 113 115 116 119 120 121 123 124 125 126 127 129 130 131 135 136 137 138 142 143 146 148 157 158 160 161 165 166 169 171 174 175 176 177 179 184 186 189 190 192 195 196 201 205 208 210 # 28661 revdifference c a 211 0 1 0 1 4 5 9 10 12 14 15 18 19 20 21 22 24 25 28 29 31 32 35 42 45 46 47 49 52 55 57 58 60 62 63 64 66 67 68 75 78 79 84 85 86 88 89 91 94 95 96 97 98 100 102 104 108 113 121 122 123 125 126 129 130 134 136 138 140 142 144 148 149 150 152 153 154 157 158 159 163 164 166 167 168 169 171 172 173 174 175 179 184 186 188 189 193 198 200 203 206 208 b 211 0 1 0 1 4 5 9 10 12 14 15 18 19 20 21 22 24 25 28 29 31 32 35 42 45 46 47 49 52 55 57 58 60 62 63 64 66 67 68 75 78 79 84 85 86 88 89 91 94 95 96 97 98 100 102 104 108 113 121 122 123 125 126 129 130 134 136 138 140 142 144 148 149 150 152 153 154 157 158 159 163 164 166 167 168 169 171 172 173 174 175 179 184 186 188 189 193 198 200 203 206 208 # 28662 revdifference c a 211 0 1 0 1 4 5 9 10 12 14 15 18 19 20 21 22 24 25 28 29 31 32 35 42 45 46 47 49 52 55 57 58 60 62 63 64 66 67 68 75 78 79 84 85 86 88 89 91 94 95 96 97 98 100 102 104 108 113 121 122 123 125 126 129 130 134 136 138 140 142 144 148 149 150 152 153 154 157 158 159 163 164 166 167 168 169 171 172 173 174 175 179 184 186 188 189 193 198 200 203 206 208 b 211 0 1 e # 28663 revdifference c a 211 0 1 1 2 3 4 5 6 8 10 12 13 14 15 17 18 19 20 22 23 26 27 28 34 35 37 41 42 43 44 46 47 49 50 53 55 56 58 59 60 67 68 70 73 79 81 84 85 87 89 90 93 95 97 103 105 106 108 114 115 117 118 120 122 126 127 128 130 132 134 137 138 141 147 152 153 158 160 161 163 167 169 170 171 172 176 177 179 180 183 185 186 187 189 190 192 196 204 206 b 211 0 1 1 2 3 4 5 6 8 10 12 13 14 15 17 18 19 20 22 23 26 27 28 34 35 37 41 42 43 44 46 47 49 50 53 55 56 58 59 60 67 68 70 73 79 81 84 85 87 89 90 93 95 97 103 105 106 108 114 115 117 118 120 122 126 127 128 130 132 134 137 138 141 147 152 153 158 160 161 163 167 169 170 171 172 176 177 179 180 183 185 186 187 189 190 192 196 204 206 # 28664 revdifference c a 211 0 1 1 2 3 4 5 6 8 10 12 13 14 15 17 18 19 20 22 23 26 27 28 34 35 37 41 42 43 44 46 47 49 50 53 55 56 58 59 60 67 68 70 73 79 81 84 85 87 89 90 93 95 97 103 105 106 108 114 115 117 118 120 122 126 127 128 130 132 134 137 138 141 147 152 153 158 160 161 163 167 169 170 171 172 176 177 179 180 183 185 186 187 189 190 192 196 204 206 b 211 0 1 f # 28665 revdifference c a 211 0 1 1 2 3 6 7 8 9 10 11 12 17 18 19 21 23 24 25 26 28 29 30 32 35 36 38 39 41 42 45 46 47 48 50 51 54 56 59 64 67 68 71 75 77 78 79 81 82 83 84 85 87 89 90 91 92 94 95 96 101 103 105 108 112 115 118 121 126 127 131 133 134 135 136 141 142 145 150 151 154 155 157 158 159 162 163 165 166 167 168 169 172 174 175 179 180 184 189 191 194 196 197 199 200 201 208 209 b 211 0 1 1 2 3 6 7 8 9 10 11 12 17 18 19 21 23 24 25 26 28 29 30 32 35 36 38 39 41 42 45 46 47 48 50 51 54 56 59 64 67 68 71 75 77 78 79 81 82 83 84 85 87 89 90 91 92 94 95 96 101 103 105 108 112 115 118 121 126 127 131 133 134 135 136 141 142 145 150 151 154 155 157 158 159 162 163 165 166 167 168 169 172 174 175 179 180 184 189 191 194 196 197 199 200 201 208 209 # 28666 revdifference c a 211 0 1 1 2 3 6 7 8 9 10 11 12 17 18 19 21 23 24 25 26 28 29 30 32 35 36 38 39 41 42 45 46 47 48 50 51 54 56 59 64 67 68 71 75 77 78 79 81 82 83 84 85 87 89 90 91 92 94 95 96 101 103 105 108 112 115 118 121 126 127 131 133 134 135 136 141 142 145 150 151 154 155 157 158 159 162 163 165 166 167 168 169 172 174 175 179 180 184 189 191 194 196 197 199 200 201 208 209 b 211 0 1 0 2 6 8 9 10 11 12 13 14 16 18 19 21 23 25 27 28 30 31 32 33 35 36 39 40 43 48 51 53 54 55 56 57 59 62 63 66 70 72 75 76 77 83 86 87 90 92 95 96 100 102 103 104 106 109 110 111 114 115 116 118 119 120 124 125 127 129 130 132 133 135 136 137 140 142 144 145 149 151 153 156 157 160 162 163 164 167 169 172 174 175 176 177 180 181 184 185 186 187 188 197 199 201 202 204 205 207 208 # 28667 revdifference c a 211 0 1 e b 211 0 1 e # 28668 revdifference c a 211 0 1 e b 211 1 0 e # 28669 revdifference c a 211 0 1 e b 211 0 1 e # 28670 revdifference c a 211 0 1 e b 211 1 0 f # 28671 revdifference c a 211 0 1 e b 211 0 1 e # 28672 revdifference c a 211 0 1 e b 211 1 0 0 4 7 8 10 12 14 16 18 20 21 24 26 27 28 30 31 34 36 39 40 43 45 50 52 54 55 57 60 64 66 67 73 74 75 76 81 82 85 87 89 94 96 97 98 103 106 107 108 109 112 113 114 116 117 118 120 122 123 124 125 128 130 131 132 134 135 136 138 142 146 147 149 152 153 155 156 160 161 167 168 172 174 175 176 178 185 186 187 191 193 197 199 201 205 207 # 28673 revdifference c a 211 0 1 f b 211 0 1 f # 28674 revdifference c a 211 0 1 f b 211 1 0 e # 28675 revdifference c a 211 0 1 f b 211 0 1 f # 28676 revdifference c a 211 0 1 f b 211 1 0 f # 28677 revdifference c a 211 0 1 f b 211 0 1 f # 28678 revdifference c a 211 0 1 f b 211 1 0 0 2 3 4 6 7 8 11 15 20 22 23 24 25 27 30 31 32 33 34 35 37 39 41 42 43 44 45 46 50 51 52 53 54 59 60 62 63 64 65 68 69 71 72 73 74 75 76 80 84 86 93 94 96 98 101 104 106 107 108 114 116 117 118 123 127 128 129 132 133 134 135 137 138 139 140 144 146 149 150 151 156 157 159 160 161 163 164 165 166 168 169 171 172 173 175 179 181 185 186 187 188 190 193 196 197 198 199 200 201 203 204 205 207 208 209 210 # 28679 revdifference c a 211 0 1 1 3 4 6 7 8 10 12 13 14 16 17 18 21 22 24 25 26 27 28 31 33 34 36 39 40 41 44 46 48 49 50 52 53 54 56 60 61 68 69 72 73 74 77 78 81 82 84 86 87 88 89 91 92 93 96 97 98 99 106 108 109 110 112 114 115 116 119 121 122 128 134 135 136 139 141 143 145 146 151 152 156 157 158 159 160 164 165 171 174 175 179 180 181 182 183 188 190 191 197 198 199 201 203 206 207 208 210 b 211 0 1 1 3 4 6 7 8 10 12 13 14 16 17 18 21 22 24 25 26 27 28 31 33 34 36 39 40 41 44 46 48 49 50 52 53 54 56 60 61 68 69 72 73 74 77 78 81 82 84 86 87 88 89 91 92 93 96 97 98 99 106 108 109 110 112 114 115 116 119 121 122 128 134 135 136 139 141 143 145 146 151 152 156 157 158 159 160 164 165 171 174 175 179 180 181 182 183 188 190 191 197 198 199 201 203 206 207 208 210 # 28680 revdifference c a 211 0 1 1 3 4 6 7 8 10 12 13 14 16 17 18 21 22 24 25 26 27 28 31 33 34 36 39 40 41 44 46 48 49 50 52 53 54 56 60 61 68 69 72 73 74 77 78 81 82 84 86 87 88 89 91 92 93 96 97 98 99 106 108 109 110 112 114 115 116 119 121 122 128 134 135 136 139 141 143 145 146 151 152 156 157 158 159 160 164 165 171 174 175 179 180 181 182 183 188 190 191 197 198 199 201 203 206 207 208 210 b 211 1 0 e # 28681 revdifference c a 211 0 1 2 4 7 9 10 14 20 22 24 25 27 28 30 32 33 36 37 40 43 44 48 49 52 54 55 59 60 64 65 66 67 68 72 73 75 76 77 78 79 80 83 84 87 89 90 94 96 97 99 105 106 108 109 110 117 119 120 123 125 128 131 132 139 143 144 145 146 155 160 161 163 168 169 171 173 174 175 176 177 180 184 185 189 190 192 193 195 201 204 205 207 208 209 210 b 211 0 1 2 4 7 9 10 14 20 22 24 25 27 28 30 32 33 36 37 40 43 44 48 49 52 54 55 59 60 64 65 66 67 68 72 73 75 76 77 78 79 80 83 84 87 89 90 94 96 97 99 105 106 108 109 110 117 119 120 123 125 128 131 132 139 143 144 145 146 155 160 161 163 168 169 171 173 174 175 176 177 180 184 185 189 190 192 193 195 201 204 205 207 208 209 210 # 28682 revdifference c a 211 0 1 2 4 7 9 10 14 20 22 24 25 27 28 30 32 33 36 37 40 43 44 48 49 52 54 55 59 60 64 65 66 67 68 72 73 75 76 77 78 79 80 83 84 87 89 90 94 96 97 99 105 106 108 109 110 117 119 120 123 125 128 131 132 139 143 144 145 146 155 160 161 163 168 169 171 173 174 175 176 177 180 184 185 189 190 192 193 195 201 204 205 207 208 209 210 b 211 1 0 f # 28683 revdifference c a 211 0 1 0 6 7 9 11 14 16 18 20 21 24 26 27 30 31 32 35 37 38 39 40 42 44 45 46 47 49 50 51 52 55 56 57 67 69 70 73 75 78 79 80 81 82 83 85 88 89 93 94 95 97 98 99 100 101 102 107 108 109 110 111 112 115 117 120 121 122 125 126 127 128 129 131 134 135 136 138 139 141 143 145 146 147 148 151 152 156 159 160 161 168 170 171 174 177 184 185 186 187 188 189 191 192 193 195 197 203 204 210 b 211 0 1 0 6 7 9 11 14 16 18 20 21 24 26 27 30 31 32 35 37 38 39 40 42 44 45 46 47 49 50 51 52 55 56 57 67 69 70 73 75 78 79 80 81 82 83 85 88 89 93 94 95 97 98 99 100 101 102 107 108 109 110 111 112 115 117 120 121 122 125 126 127 128 129 131 134 135 136 138 139 141 143 145 146 147 148 151 152 156 159 160 161 168 170 171 174 177 184 185 186 187 188 189 191 192 193 195 197 203 204 210 # 28684 revdifference c a 211 0 1 0 6 7 9 11 14 16 18 20 21 24 26 27 30 31 32 35 37 38 39 40 42 44 45 46 47 49 50 51 52 55 56 57 67 69 70 73 75 78 79 80 81 82 83 85 88 89 93 94 95 97 98 99 100 101 102 107 108 109 110 111 112 115 117 120 121 122 125 126 127 128 129 131 134 135 136 138 139 141 143 145 146 147 148 151 152 156 159 160 161 168 170 171 174 177 184 185 186 187 188 189 191 192 193 195 197 203 204 210 b 211 1 0 1 3 4 5 8 10 11 13 19 20 21 22 23 26 27 31 33 34 36 38 39 40 41 42 43 44 48 49 50 51 53 55 58 59 60 62 64 66 67 68 75 77 82 83 86 88 89 91 92 93 95 98 100 102 103 106 107 108 115 116 119 122 127 129 133 135 138 141 142 143 146 147 148 149 150 151 155 156 158 163 165 168 170 176 183 184 185 186 189 190 191 192 196 197 198 199 204 205 206 207 # 28685 revdifference c a 211 0 1 e b 211 0 1 e # 28686 revdifference c a 211 0 1 e b 211 1 1 e # 28687 revdifference c a 211 0 1 e b 211 0 1 e # 28688 revdifference c a 211 0 1 e b 211 1 1 f # 28689 revdifference c a 211 0 1 e b 211 0 1 e # 28690 revdifference c a 211 0 1 e b 211 1 1 1 2 6 7 8 9 10 12 13 14 15 16 17 18 19 23 26 27 28 32 33 42 43 45 46 48 49 51 52 53 54 59 60 63 65 67 69 72 73 76 81 87 88 89 90 93 95 96 98 99 101 104 105 107 109 111 112 113 114 116 118 119 121 124 128 129 132 133 135 136 137 138 140 141 143 144 146 147 148 149 151 152 153 157 158 160 163 165 166 168 170 171 174 177 178 180 185 186 189 190 194 195 197 203 204 205 206 208 209 # 28691 revdifference c a 211 0 1 f b 211 0 1 f # 28692 revdifference c a 211 0 1 f b 211 1 1 e # 28693 revdifference c a 211 0 1 f b 211 0 1 f # 28694 revdifference c a 211 0 1 f b 211 1 1 f # 28695 revdifference c a 211 0 1 f b 211 0 1 f # 28696 revdifference c a 211 0 1 f b 211 1 1 2 3 4 6 8 9 10 17 18 19 22 23 25 26 28 29 30 33 43 44 45 48 50 51 52 53 54 55 56 57 59 60 62 66 70 71 72 76 77 78 79 80 81 82 83 84 85 86 87 88 91 92 95 96 97 102 103 112 113 114 115 116 117 120 121 123 126 131 134 135 136 141 144 149 150 152 154 156 157 160 161 162 165 168 169 170 172 174 176 178 179 180 181 183 186 187 188 191 195 196 197 199 200 203 208 # 28697 revdifference c a 211 0 1 0 5 8 9 10 11 13 16 18 19 23 24 25 27 28 32 33 34 38 42 43 51 52 53 54 56 57 59 61 67 68 72 77 78 79 82 83 89 90 91 92 97 100 103 104 105 106 109 111 112 113 114 119 122 123 124 128 131 132 133 134 135 136 137 138 142 145 146 147 148 150 152 153 156 158 159 160 162 163 165 166 167 169 171 172 176 178 179 181 186 188 191 192 194 195 197 198 199 202 206 209 b 211 0 1 0 5 8 9 10 11 13 16 18 19 23 24 25 27 28 32 33 34 38 42 43 51 52 53 54 56 57 59 61 67 68 72 77 78 79 82 83 89 90 91 92 97 100 103 104 105 106 109 111 112 113 114 119 122 123 124 128 131 132 133 134 135 136 137 138 142 145 146 147 148 150 152 153 156 158 159 160 162 163 165 166 167 169 171 172 176 178 179 181 186 188 191 192 194 195 197 198 199 202 206 209 # 28698 revdifference c a 211 0 1 0 5 8 9 10 11 13 16 18 19 23 24 25 27 28 32 33 34 38 42 43 51 52 53 54 56 57 59 61 67 68 72 77 78 79 82 83 89 90 91 92 97 100 103 104 105 106 109 111 112 113 114 119 122 123 124 128 131 132 133 134 135 136 137 138 142 145 146 147 148 150 152 153 156 158 159 160 162 163 165 166 167 169 171 172 176 178 179 181 186 188 191 192 194 195 197 198 199 202 206 209 b 211 1 1 e # 28699 revdifference c a 211 0 1 0 2 4 6 10 16 17 23 24 26 28 30 31 32 33 35 36 40 43 44 45 47 48 52 55 56 57 59 62 69 73 76 80 82 83 84 85 86 87 88 90 92 93 94 99 101 102 103 104 107 108 109 111 113 114 116 117 119 128 129 132 135 137 138 140 141 142 143 144 145 147 150 151 152 154 155 156 159 161 164 165 168 170 171 173 174 177 179 182 184 185 187 189 190 191 197 198 200 201 202 205 207 208 209 210 b 211 0 1 0 2 4 6 10 16 17 23 24 26 28 30 31 32 33 35 36 40 43 44 45 47 48 52 55 56 57 59 62 69 73 76 80 82 83 84 85 86 87 88 90 92 93 94 99 101 102 103 104 107 108 109 111 113 114 116 117 119 128 129 132 135 137 138 140 141 142 143 144 145 147 150 151 152 154 155 156 159 161 164 165 168 170 171 173 174 177 179 182 184 185 187 189 190 191 197 198 200 201 202 205 207 208 209 210 # 28700 revdifference c a 211 0 1 0 2 4 6 10 16 17 23 24 26 28 30 31 32 33 35 36 40 43 44 45 47 48 52 55 56 57 59 62 69 73 76 80 82 83 84 85 86 87 88 90 92 93 94 99 101 102 103 104 107 108 109 111 113 114 116 117 119 128 129 132 135 137 138 140 141 142 143 144 145 147 150 151 152 154 155 156 159 161 164 165 168 170 171 173 174 177 179 182 184 185 187 189 190 191 197 198 200 201 202 205 207 208 209 210 b 211 1 1 f # 28701 revdifference c a 211 0 1 1 2 4 6 8 12 14 16 19 22 23 24 25 27 29 30 31 32 35 36 37 39 44 45 46 47 50 51 52 53 54 57 59 60 61 62 63 65 66 68 69 74 77 79 81 82 84 85 86 88 89 91 92 93 94 96 98 99 103 104 109 111 112 116 117 118 119 120 121 123 124 127 128 130 132 136 137 138 141 145 146 148 150 151 154 156 160 162 164 165 166 167 168 169 172 173 175 176 180 184 185 186 190 191 192 193 195 196 198 202 203 206 207 b 211 0 1 1 2 4 6 8 12 14 16 19 22 23 24 25 27 29 30 31 32 35 36 37 39 44 45 46 47 50 51 52 53 54 57 59 60 61 62 63 65 66 68 69 74 77 79 81 82 84 85 86 88 89 91 92 93 94 96 98 99 103 104 109 111 112 116 117 118 119 120 121 123 124 127 128 130 132 136 137 138 141 145 146 148 150 151 154 156 160 162 164 165 166 167 168 169 172 173 175 176 180 184 185 186 190 191 192 193 195 196 198 202 203 206 207 # 28702 revdifference c a 211 0 1 1 2 4 6 8 12 14 16 19 22 23 24 25 27 29 30 31 32 35 36 37 39 44 45 46 47 50 51 52 53 54 57 59 60 61 62 63 65 66 68 69 74 77 79 81 82 84 85 86 88 89 91 92 93 94 96 98 99 103 104 109 111 112 116 117 118 119 120 121 123 124 127 128 130 132 136 137 138 141 145 146 148 150 151 154 156 160 162 164 165 166 167 168 169 172 173 175 176 180 184 185 186 190 191 192 193 195 196 198 202 203 206 207 b 211 1 1 2 5 7 8 10 11 15 17 18 19 21 25 30 32 34 38 40 41 43 45 46 48 49 51 52 53 55 59 60 61 63 67 70 72 76 78 79 80 81 82 83 84 85 86 89 90 92 97 99 100 103 108 109 111 112 113 115 116 118 121 122 126 127 129 130 133 135 142 148 150 151 153 157 159 160 161 162 164 166 168 170 172 173 174 177 178 179 181 182 184 186 190 193 198 199 200 205 206 208 # 28703 revdifference c a 211 1 0 e b 211 1 0 e # 28704 revdifference c a 211 1 0 e b 211 0 0 e # 28705 revdifference c a 211 1 0 e b 211 1 0 e # 28706 revdifference c a 211 1 0 e b 211 0 0 f # 28707 revdifference c a 211 1 0 e b 211 1 0 e # 28708 revdifference c a 211 1 0 e b 211 0 0 3 4 5 6 8 9 14 20 21 22 24 25 28 29 30 31 32 34 35 43 44 50 54 58 59 60 61 62 63 65 66 70 71 72 77 78 79 84 86 88 91 94 96 97 98 100 101 102 103 104 109 113 114 117 118 121 122 125 126 129 132 135 136 141 142 143 144 145 151 158 159 163 164 166 167 168 169 170 172 173 177 178 179 182 184 185 186 187 189 190 192 193 195 202 203 207 210 # 28709 revdifference c a 211 1 0 f b 211 1 0 f # 28710 revdifference c a 211 1 0 f b 211 0 0 e # 28711 revdifference c a 211 1 0 f b 211 1 0 f # 28712 revdifference c a 211 1 0 f b 211 0 0 f # 28713 revdifference c a 211 1 0 f b 211 1 0 f # 28714 revdifference c a 211 1 0 f b 211 0 0 0 8 9 10 12 13 14 15 17 19 21 22 24 26 27 28 29 31 33 34 35 38 41 44 46 52 54 55 56 58 59 62 63 65 66 67 68 69 70 72 75 76 79 80 81 83 86 88 92 93 95 96 97 98 99 100 101 102 107 108 110 111 116 118 120 121 122 124 125 127 128 131 132 136 139 140 142 144 146 150 153 154 156 159 161 165 166 169 173 175 179 180 182 185 186 187 188 189 190 192 194 195 196 197 200 203 205 206 207 # 28715 revdifference c a 211 1 0 0 1 6 9 10 11 12 14 15 18 22 24 25 27 29 32 33 35 36 42 45 46 47 49 54 57 60 62 68 69 72 82 83 84 85 87 88 89 94 98 104 105 106 107 109 111 114 119 121 124 126 128 129 130 132 135 138 139 142 143 144 145 146 147 150 152 154 155 156 157 159 160 163 165 167 168 174 176 177 182 184 185 187 188 189 190 192 193 196 197 199 200 201 202 204 205 206 207 208 209 b 211 1 0 0 1 6 9 10 11 12 14 15 18 22 24 25 27 29 32 33 35 36 42 45 46 47 49 54 57 60 62 68 69 72 82 83 84 85 87 88 89 94 98 104 105 106 107 109 111 114 119 121 124 126 128 129 130 132 135 138 139 142 143 144 145 146 147 150 152 154 155 156 157 159 160 163 165 167 168 174 176 177 182 184 185 187 188 189 190 192 193 196 197 199 200 201 202 204 205 206 207 208 209 # 28716 revdifference c a 211 1 0 0 1 6 9 10 11 12 14 15 18 22 24 25 27 29 32 33 35 36 42 45 46 47 49 54 57 60 62 68 69 72 82 83 84 85 87 88 89 94 98 104 105 106 107 109 111 114 119 121 124 126 128 129 130 132 135 138 139 142 143 144 145 146 147 150 152 154 155 156 157 159 160 163 165 167 168 174 176 177 182 184 185 187 188 189 190 192 193 196 197 199 200 201 202 204 205 206 207 208 209 b 211 0 0 e # 28717 revdifference c a 211 1 0 2 4 5 6 7 11 15 17 19 20 21 22 24 25 27 28 34 36 40 41 45 48 49 51 52 55 58 60 61 62 66 68 69 70 71 72 75 76 77 79 80 81 85 87 89 91 92 96 97 99 100 102 103 106 111 113 115 117 118 119 120 122 123 125 126 128 130 131 132 133 134 136 138 140 141 143 144 145 146 150 152 153 154 156 157 159 162 168 171 173 174 175 179 180 183 184 186 187 191 192 194 196 199 200 201 203 204 206 208 b 211 1 0 2 4 5 6 7 11 15 17 19 20 21 22 24 25 27 28 34 36 40 41 45 48 49 51 52 55 58 60 61 62 66 68 69 70 71 72 75 76 77 79 80 81 85 87 89 91 92 96 97 99 100 102 103 106 111 113 115 117 118 119 120 122 123 125 126 128 130 131 132 133 134 136 138 140 141 143 144 145 146 150 152 153 154 156 157 159 162 168 171 173 174 175 179 180 183 184 186 187 191 192 194 196 199 200 201 203 204 206 208 # 28718 revdifference c a 211 1 0 2 4 5 6 7 11 15 17 19 20 21 22 24 25 27 28 34 36 40 41 45 48 49 51 52 55 58 60 61 62 66 68 69 70 71 72 75 76 77 79 80 81 85 87 89 91 92 96 97 99 100 102 103 106 111 113 115 117 118 119 120 122 123 125 126 128 130 131 132 133 134 136 138 140 141 143 144 145 146 150 152 153 154 156 157 159 162 168 171 173 174 175 179 180 183 184 186 187 191 192 194 196 199 200 201 203 204 206 208 b 211 0 0 f # 28719 revdifference c a 211 1 0 0 5 8 9 10 11 12 13 14 16 18 20 21 22 23 26 27 28 30 31 32 37 40 42 43 45 46 47 48 49 51 54 55 56 57 58 59 61 63 65 69 70 72 73 74 77 80 81 87 89 90 91 92 94 95 96 97 100 102 103 104 105 106 108 110 112 114 116 117 120 121 123 125 126 128 130 131 138 139 140 141 143 146 150 154 157 158 160 162 164 166 168 169 171 172 173 176 178 180 181 183 190 192 193 194 195 197 198 200 202 203 204 207 208 b 211 1 0 0 5 8 9 10 11 12 13 14 16 18 20 21 22 23 26 27 28 30 31 32 37 40 42 43 45 46 47 48 49 51 54 55 56 57 58 59 61 63 65 69 70 72 73 74 77 80 81 87 89 90 91 92 94 95 96 97 100 102 103 104 105 106 108 110 112 114 116 117 120 121 123 125 126 128 130 131 138 139 140 141 143 146 150 154 157 158 160 162 164 166 168 169 171 172 173 176 178 180 181 183 190 192 193 194 195 197 198 200 202 203 204 207 208 # 28720 revdifference c a 211 1 0 0 5 8 9 10 11 12 13 14 16 18 20 21 22 23 26 27 28 30 31 32 37 40 42 43 45 46 47 48 49 51 54 55 56 57 58 59 61 63 65 69 70 72 73 74 77 80 81 87 89 90 91 92 94 95 96 97 100 102 103 104 105 106 108 110 112 114 116 117 120 121 123 125 126 128 130 131 138 139 140 141 143 146 150 154 157 158 160 162 164 166 168 169 171 172 173 176 178 180 181 183 190 192 193 194 195 197 198 200 202 203 204 207 208 b 211 0 0 0 2 3 7 10 11 15 16 18 19 20 22 23 26 34 35 38 39 40 41 42 43 46 47 49 50 53 58 59 63 66 67 69 70 72 73 75 76 78 81 82 84 86 89 91 92 93 94 96 97 100 102 103 105 106 109 110 112 113 114 115 116 117 120 121 123 129 130 133 136 137 138 139 140 150 154 155 156 160 162 164 165 166 167 168 170 171 172 176 180 186 188 191 194 197 201 202 207 208 209 # 28721 revdifference c a 211 1 0 e b 211 1 0 e # 28722 revdifference c a 211 1 0 e b 211 0 1 e # 28723 revdifference c a 211 1 0 e b 211 1 0 e # 28724 revdifference c a 211 1 0 e b 211 0 1 f # 28725 revdifference c a 211 1 0 e b 211 1 0 e # 28726 revdifference c a 211 1 0 e b 211 0 1 0 2 3 4 6 7 8 11 12 13 14 16 20 23 24 27 30 31 32 33 34 36 37 39 41 42 43 44 47 48 49 50 51 54 55 56 58 59 60 61 62 65 66 68 76 78 79 81 87 90 92 93 94 96 97 98 99 103 104 106 108 109 112 113 114 116 122 126 129 136 138 139 141 144 145 147 149 151 152 153 159 161 163 166 168 169 171 172 177 179 185 186 187 188 190 192 193 194 197 200 201 206 207 # 28727 revdifference c a 211 1 0 f b 211 1 0 f # 28728 revdifference c a 211 1 0 f b 211 0 1 e # 28729 revdifference c a 211 1 0 f b 211 1 0 f # 28730 revdifference c a 211 1 0 f b 211 0 1 f # 28731 revdifference c a 211 1 0 f b 211 1 0 f # 28732 revdifference c a 211 1 0 f b 211 0 1 0 1 2 5 6 8 10 11 13 14 17 18 19 20 21 22 24 27 28 34 36 37 38 39 40 41 42 44 45 46 48 49 50 53 54 57 62 63 64 67 69 72 76 78 79 80 81 84 85 86 88 92 96 99 101 104 105 106 107 108 110 111 113 115 116 119 120 121 124 125 126 127 130 131 132 133 134 135 136 137 138 139 141 142 144 147 148 149 150 154 156 157 161 162 164 165 167 168 171 172 175 177 180 182 185 186 188 189 190 191 192 193 195 196 198 200 203 205 207 208 209 # 28733 revdifference c a 211 1 0 0 2 3 4 5 6 9 10 12 13 14 15 19 20 21 23 37 39 40 45 47 49 50 54 55 56 58 63 64 65 68 69 70 74 80 81 82 85 87 88 92 93 95 97 98 101 102 103 105 108 110 111 113 115 117 118 120 121 122 123 124 131 135 136 137 139 142 143 144 150 153 154 155 159 160 161 164 165 167 168 170 171 172 173 174 175 179 182 183 185 186 187 189 192 193 194 195 196 198 199 200 201 202 204 208 210 b 211 1 0 0 2 3 4 5 6 9 10 12 13 14 15 19 20 21 23 37 39 40 45 47 49 50 54 55 56 58 63 64 65 68 69 70 74 80 81 82 85 87 88 92 93 95 97 98 101 102 103 105 108 110 111 113 115 117 118 120 121 122 123 124 131 135 136 137 139 142 143 144 150 153 154 155 159 160 161 164 165 167 168 170 171 172 173 174 175 179 182 183 185 186 187 189 192 193 194 195 196 198 199 200 201 202 204 208 210 # 28734 revdifference c a 211 1 0 0 2 3 4 5 6 9 10 12 13 14 15 19 20 21 23 37 39 40 45 47 49 50 54 55 56 58 63 64 65 68 69 70 74 80 81 82 85 87 88 92 93 95 97 98 101 102 103 105 108 110 111 113 115 117 118 120 121 122 123 124 131 135 136 137 139 142 143 144 150 153 154 155 159 160 161 164 165 167 168 170 171 172 173 174 175 179 182 183 185 186 187 189 192 193 194 195 196 198 199 200 201 202 204 208 210 b 211 0 1 e # 28735 revdifference c a 211 1 0 1 2 3 4 5 6 7 9 11 14 18 19 20 21 22 26 27 28 30 32 33 35 36 37 38 40 41 54 55 57 60 62 63 64 65 66 67 68 69 70 71 72 74 75 79 80 81 86 87 92 93 95 96 99 100 102 103 104 105 106 113 120 122 123 125 129 134 136 137 140 141 145 146 147 149 153 155 156 157 160 161 169 172 173 176 178 182 183 186 188 191 193 194 198 199 202 208 210 b 211 1 0 1 2 3 4 5 6 7 9 11 14 18 19 20 21 22 26 27 28 30 32 33 35 36 37 38 40 41 54 55 57 60 62 63 64 65 66 67 68 69 70 71 72 74 75 79 80 81 86 87 92 93 95 96 99 100 102 103 104 105 106 113 120 122 123 125 129 134 136 137 140 141 145 146 147 149 153 155 156 157 160 161 169 172 173 176 178 182 183 186 188 191 193 194 198 199 202 208 210 # 28736 revdifference c a 211 1 0 1 2 3 4 5 6 7 9 11 14 18 19 20 21 22 26 27 28 30 32 33 35 36 37 38 40 41 54 55 57 60 62 63 64 65 66 67 68 69 70 71 72 74 75 79 80 81 86 87 92 93 95 96 99 100 102 103 104 105 106 113 120 122 123 125 129 134 136 137 140 141 145 146 147 149 153 155 156 157 160 161 169 172 173 176 178 182 183 186 188 191 193 194 198 199 202 208 210 b 211 0 1 f # 28737 revdifference c a 211 1 0 0 1 2 3 4 5 8 9 10 11 12 13 14 19 20 22 23 24 27 29 30 32 34 35 38 41 45 46 47 49 50 51 53 54 61 62 65 66 67 69 72 73 74 76 78 79 81 82 83 85 87 91 93 95 96 98 99 103 107 108 110 112 113 116 120 125 128 132 133 136 139 140 142 143 148 150 151 152 156 157 158 159 161 164 167 168 169 171 172 176 177 186 193 194 198 200 202 203 204 207 209 b 211 1 0 0 1 2 3 4 5 8 9 10 11 12 13 14 19 20 22 23 24 27 29 30 32 34 35 38 41 45 46 47 49 50 51 53 54 61 62 65 66 67 69 72 73 74 76 78 79 81 82 83 85 87 91 93 95 96 98 99 103 107 108 110 112 113 116 120 125 128 132 133 136 139 140 142 143 148 150 151 152 156 157 158 159 161 164 167 168 169 171 172 176 177 186 193 194 198 200 202 203 204 207 209 # 28738 revdifference c a 211 1 0 0 1 2 3 4 5 8 9 10 11 12 13 14 19 20 22 23 24 27 29 30 32 34 35 38 41 45 46 47 49 50 51 53 54 61 62 65 66 67 69 72 73 74 76 78 79 81 82 83 85 87 91 93 95 96 98 99 103 107 108 110 112 113 116 120 125 128 132 133 136 139 140 142 143 148 150 151 152 156 157 158 159 161 164 167 168 169 171 172 176 177 186 193 194 198 200 202 203 204 207 209 b 211 0 1 1 3 5 7 9 11 15 17 18 19 20 22 23 26 27 29 31 32 33 34 36 39 41 42 43 44 48 51 53 55 58 59 61 62 63 64 68 71 74 78 81 83 84 85 86 90 93 97 98 99 102 105 106 107 108 113 118 119 120 121 125 127 130 131 133 135 137 138 142 143 147 148 152 153 154 159 161 162 163 164 165 166 168 169 170 173 175 177 179 181 184 186 189 191 192 193 194 195 196 197 198 199 200 201 205 207 208 209 210 # 28739 revdifference c a 211 1 0 e b 211 1 0 e # 28740 revdifference c a 211 1 0 e b 211 1 0 e # 28741 revdifference c a 211 1 0 e b 211 1 0 e # 28742 revdifference c a 211 1 0 e b 211 1 0 f # 28743 revdifference c a 211 1 0 e b 211 1 0 e # 28744 revdifference c a 211 1 0 e b 211 1 0 1 7 8 10 11 13 14 15 16 17 18 19 20 21 26 27 30 31 33 35 40 43 46 49 52 53 54 55 57 58 59 61 62 64 65 69 70 75 76 81 82 83 84 85 86 89 91 92 93 96 98 102 104 105 110 115 119 125 126 130 132 133 134 135 136 139 140 141 143 145 146 147 151 152 153 156 157 158 159 161 168 173 175 176 178 180 186 187 190 191 195 196 197 198 199 203 204 205 206 207 210 # 28745 revdifference c a 211 1 0 f b 211 1 0 f # 28746 revdifference c a 211 1 0 f b 211 1 0 e # 28747 revdifference c a 211 1 0 f b 211 1 0 f # 28748 revdifference c a 211 1 0 f b 211 1 0 f # 28749 revdifference c a 211 1 0 f b 211 1 0 f # 28750 revdifference c a 211 1 0 f b 211 1 0 0 1 4 5 7 9 10 12 14 15 18 20 21 24 27 29 30 33 34 36 39 40 43 44 45 46 50 54 57 59 60 61 64 66 67 68 70 71 72 73 74 75 76 80 81 82 86 87 90 96 98 101 104 105 106 107 113 114 117 119 121 125 126 127 128 129 133 134 136 137 138 140 142 145 146 147 148 149 150 151 152 153 156 159 160 161 165 166 168 169 171 172 174 176 177 178 179 180 181 182 183 184 186 192 194 197 198 202 205 206 208 209 # 28751 revdifference c a 211 1 0 2 7 8 10 15 16 17 18 21 23 26 27 28 32 34 37 38 41 43 45 46 48 49 50 52 53 57 62 64 66 69 71 72 73 74 76 77 78 80 82 85 86 87 88 89 90 93 94 97 99 101 102 104 105 107 108 112 113 114 116 117 118 119 120 121 124 127 129 130 131 132 134 135 138 139 140 141 144 146 147 149 150 151 152 156 157 160 162 163 164 165 166 167 170 174 176 183 184 187 189 191 194 195 198 199 200 201 202 205 206 210 b 211 1 0 2 7 8 10 15 16 17 18 21 23 26 27 28 32 34 37 38 41 43 45 46 48 49 50 52 53 57 62 64 66 69 71 72 73 74 76 77 78 80 82 85 86 87 88 89 90 93 94 97 99 101 102 104 105 107 108 112 113 114 116 117 118 119 120 121 124 127 129 130 131 132 134 135 138 139 140 141 144 146 147 149 150 151 152 156 157 160 162 163 164 165 166 167 170 174 176 183 184 187 189 191 194 195 198 199 200 201 202 205 206 210 # 28752 revdifference c a 211 1 0 2 7 8 10 15 16 17 18 21 23 26 27 28 32 34 37 38 41 43 45 46 48 49 50 52 53 57 62 64 66 69 71 72 73 74 76 77 78 80 82 85 86 87 88 89 90 93 94 97 99 101 102 104 105 107 108 112 113 114 116 117 118 119 120 121 124 127 129 130 131 132 134 135 138 139 140 141 144 146 147 149 150 151 152 156 157 160 162 163 164 165 166 167 170 174 176 183 184 187 189 191 194 195 198 199 200 201 202 205 206 210 b 211 1 0 e # 28753 revdifference c a 211 1 0 1 2 4 6 7 8 9 11 16 17 20 24 29 30 31 32 33 35 38 42 43 44 46 50 54 56 65 67 71 72 76 78 80 81 82 85 89 91 93 95 97 98 99 103 105 115 116 117 120 121 122 127 128 130 132 137 139 141 142 143 146 149 152 154 156 159 160 161 162 163 166 168 174 175 176 177 178 180 182 184 185 186 187 189 192 194 196 197 198 199 201 202 203 205 206 207 208 209 b 211 1 0 1 2 4 6 7 8 9 11 16 17 20 24 29 30 31 32 33 35 38 42 43 44 46 50 54 56 65 67 71 72 76 78 80 81 82 85 89 91 93 95 97 98 99 103 105 115 116 117 120 121 122 127 128 130 132 137 139 141 142 143 146 149 152 154 156 159 160 161 162 163 166 168 174 175 176 177 178 180 182 184 185 186 187 189 192 194 196 197 198 199 201 202 203 205 206 207 208 209 # 28754 revdifference c a 211 1 0 1 2 4 6 7 8 9 11 16 17 20 24 29 30 31 32 33 35 38 42 43 44 46 50 54 56 65 67 71 72 76 78 80 81 82 85 89 91 93 95 97 98 99 103 105 115 116 117 120 121 122 127 128 130 132 137 139 141 142 143 146 149 152 154 156 159 160 161 162 163 166 168 174 175 176 177 178 180 182 184 185 186 187 189 192 194 196 197 198 199 201 202 203 205 206 207 208 209 b 211 1 0 f # 28755 revdifference c a 211 1 0 2 3 5 6 7 8 9 12 13 15 16 18 20 21 23 24 27 31 34 35 36 38 39 43 46 47 48 49 53 57 59 60 61 64 67 68 69 70 71 74 76 77 80 81 82 84 86 88 91 92 93 95 96 97 98 99 100 101 102 103 105 107 108 109 112 114 115 116 119 120 121 122 123 126 128 129 131 132 133 134 135 136 138 142 144 145 147 149 151 154 155 161 163 164 165 166 169 170 173 174 176 177 179 180 181 182 184 185 189 190 198 201 202 203 204 205 208 209 b 211 1 0 2 3 5 6 7 8 9 12 13 15 16 18 20 21 23 24 27 31 34 35 36 38 39 43 46 47 48 49 53 57 59 60 61 64 67 68 69 70 71 74 76 77 80 81 82 84 86 88 91 92 93 95 96 97 98 99 100 101 102 103 105 107 108 109 112 114 115 116 119 120 121 122 123 126 128 129 131 132 133 134 135 136 138 142 144 145 147 149 151 154 155 161 163 164 165 166 169 170 173 174 176 177 179 180 181 182 184 185 189 190 198 201 202 203 204 205 208 209 # 28756 revdifference c a 211 1 0 2 3 5 6 7 8 9 12 13 15 16 18 20 21 23 24 27 31 34 35 36 38 39 43 46 47 48 49 53 57 59 60 61 64 67 68 69 70 71 74 76 77 80 81 82 84 86 88 91 92 93 95 96 97 98 99 100 101 102 103 105 107 108 109 112 114 115 116 119 120 121 122 123 126 128 129 131 132 133 134 135 136 138 142 144 145 147 149 151 154 155 161 163 164 165 166 169 170 173 174 176 177 179 180 181 182 184 185 189 190 198 201 202 203 204 205 208 209 b 211 1 0 3 6 7 9 10 11 17 19 21 22 24 25 26 29 30 31 34 35 37 38 39 41 42 43 44 51 59 62 67 69 70 71 72 73 75 77 79 81 82 83 86 88 92 93 94 97 99 100 103 105 107 108 109 110 111 113 114 115 117 123 127 130 132 134 135 138 139 142 143 145 149 150 151 154 155 157 158 159 162 164 165 167 169 170 171 173 175 176 177 180 181 182 183 185 186 187 188 192 195 197 198 199 200 201 202 204 206 210 # 28757 revdifference c a 211 1 0 e b 211 1 0 e # 28758 revdifference c a 211 1 0 e b 211 1 1 e # 28759 revdifference c a 211 1 0 e b 211 1 0 e # 28760 revdifference c a 211 1 0 e b 211 1 1 f # 28761 revdifference c a 211 1 0 e b 211 1 0 e # 28762 revdifference c a 211 1 0 e b 211 1 1 0 2 3 6 10 14 15 16 17 18 19 23 25 26 27 28 29 31 34 35 36 37 38 39 40 41 44 47 49 51 53 55 56 59 61 62 65 67 70 72 74 75 76 77 78 80 82 87 88 89 90 91 92 95 97 98 99 100 101 103 105 106 108 109 110 111 112 113 117 119 121 122 127 133 135 136 139 140 141 142 143 144 147 148 150 153 154 155 157 158 159 162 164 167 177 182 183 185 186 187 188 191 192 195 196 197 201 202 203 206 207 208 # 28763 revdifference c a 211 1 0 f b 211 1 0 f # 28764 revdifference c a 211 1 0 f b 211 1 1 e # 28765 revdifference c a 211 1 0 f b 211 1 0 f # 28766 revdifference c a 211 1 0 f b 211 1 1 f # 28767 revdifference c a 211 1 0 f b 211 1 0 f # 28768 revdifference c a 211 1 0 f b 211 1 1 3 4 5 6 8 10 11 12 15 17 23 26 31 32 33 34 36 38 40 41 43 47 49 51 52 54 56 57 58 60 63 64 65 67 74 75 76 81 85 86 88 90 91 92 93 95 96 97 100 101 102 105 106 110 113 114 116 118 119 120 123 125 128 129 130 131 132 133 134 135 137 139 141 143 144 145 147 149 150 155 157 159 160 162 165 167 168 169 172 173 174 175 176 178 182 183 184 185 186 187 188 190 192 193 194 195 198 203 204 206 207 208 210 # 28769 revdifference c a 211 1 0 0 1 2 3 4 5 7 9 10 11 14 16 20 22 23 28 29 31 32 33 34 35 36 40 44 46 47 48 50 52 53 56 57 59 60 61 62 63 64 65 68 69 70 71 73 75 78 79 80 81 85 86 92 94 95 101 103 104 105 106 111 113 115 119 121 128 130 133 134 136 137 138 139 141 142 144 148 154 156 157 158 161 162 163 164 165 171 175 176 179 180 182 184 185 186 187 188 189 193 196 197 198 200 202 204 207 208 b 211 1 0 0 1 2 3 4 5 7 9 10 11 14 16 20 22 23 28 29 31 32 33 34 35 36 40 44 46 47 48 50 52 53 56 57 59 60 61 62 63 64 65 68 69 70 71 73 75 78 79 80 81 85 86 92 94 95 101 103 104 105 106 111 113 115 119 121 128 130 133 134 136 137 138 139 141 142 144 148 154 156 157 158 161 162 163 164 165 171 175 176 179 180 182 184 185 186 187 188 189 193 196 197 198 200 202 204 207 208 # 28770 revdifference c a 211 1 0 0 1 2 3 4 5 7 9 10 11 14 16 20 22 23 28 29 31 32 33 34 35 36 40 44 46 47 48 50 52 53 56 57 59 60 61 62 63 64 65 68 69 70 71 73 75 78 79 80 81 85 86 92 94 95 101 103 104 105 106 111 113 115 119 121 128 130 133 134 136 137 138 139 141 142 144 148 154 156 157 158 161 162 163 164 165 171 175 176 179 180 182 184 185 186 187 188 189 193 196 197 198 200 202 204 207 208 b 211 1 1 e # 28771 revdifference c a 211 1 0 0 1 3 4 6 7 8 10 12 13 16 18 19 22 24 26 27 28 31 33 34 36 38 39 40 41 43 44 45 47 48 50 53 54 56 59 60 62 63 68 71 74 78 81 83 88 89 96 97 98 99 100 101 102 105 107 108 110 115 116 117 120 121 122 123 124 127 135 136 137 139 143 144 145 147 148 149 151 154 156 159 161 163 164 165 167 168 169 170 174 183 184 185 191 193 197 200 204 206 208 210 b 211 1 0 0 1 3 4 6 7 8 10 12 13 16 18 19 22 24 26 27 28 31 33 34 36 38 39 40 41 43 44 45 47 48 50 53 54 56 59 60 62 63 68 71 74 78 81 83 88 89 96 97 98 99 100 101 102 105 107 108 110 115 116 117 120 121 122 123 124 127 135 136 137 139 143 144 145 147 148 149 151 154 156 159 161 163 164 165 167 168 169 170 174 183 184 185 191 193 197 200 204 206 208 210 # 28772 revdifference c a 211 1 0 0 1 3 4 6 7 8 10 12 13 16 18 19 22 24 26 27 28 31 33 34 36 38 39 40 41 43 44 45 47 48 50 53 54 56 59 60 62 63 68 71 74 78 81 83 88 89 96 97 98 99 100 101 102 105 107 108 110 115 116 117 120 121 122 123 124 127 135 136 137 139 143 144 145 147 148 149 151 154 156 159 161 163 164 165 167 168 169 170 174 183 184 185 191 193 197 200 204 206 208 210 b 211 1 1 f # 28773 revdifference c a 211 1 0 1 2 3 5 7 9 11 12 16 19 21 23 25 26 27 28 32 39 41 42 47 48 49 50 52 58 62 64 65 66 71 73 74 75 78 79 81 87 88 92 93 94 95 96 97 101 103 104 107 108 110 112 116 117 118 122 129 130 132 133 137 139 140 143 144 145 148 150 153 154 155 158 161 162 163 164 167 168 169 170 171 174 176 178 179 181 182 183 185 186 187 188 189 197 200 208 b 211 1 0 1 2 3 5 7 9 11 12 16 19 21 23 25 26 27 28 32 39 41 42 47 48 49 50 52 58 62 64 65 66 71 73 74 75 78 79 81 87 88 92 93 94 95 96 97 101 103 104 107 108 110 112 116 117 118 122 129 130 132 133 137 139 140 143 144 145 148 150 153 154 155 158 161 162 163 164 167 168 169 170 171 174 176 178 179 181 182 183 185 186 187 188 189 197 200 208 # 28774 revdifference c a 211 1 0 1 2 3 5 7 9 11 12 16 19 21 23 25 26 27 28 32 39 41 42 47 48 49 50 52 58 62 64 65 66 71 73 74 75 78 79 81 87 88 92 93 94 95 96 97 101 103 104 107 108 110 112 116 117 118 122 129 130 132 133 137 139 140 143 144 145 148 150 153 154 155 158 161 162 163 164 167 168 169 170 171 174 176 178 179 181 182 183 185 186 187 188 189 197 200 208 b 211 1 1 1 5 6 8 9 13 18 19 20 21 25 26 27 29 31 32 34 37 38 40 42 43 44 50 54 55 56 58 61 66 67 69 71 72 74 75 79 80 83 86 88 90 94 95 97 98 99 102 104 105 109 111 112 113 114 116 117 118 119 121 122 123 125 126 127 129 131 135 136 137 140 143 148 150 153 154 156 157 161 163 164 165 166 167 168 169 175 176 178 179 180 181 182 183 184 185 187 188 189 190 194 196 197 199 200 201 206 207 208 209 210 # 28775 revdifference c a 211 1 1 e b 211 1 1 e # 28776 revdifference c a 211 1 1 e b 211 0 0 e # 28777 revdifference c a 211 1 1 e b 211 1 1 e # 28778 revdifference c a 211 1 1 e b 211 0 0 f # 28779 revdifference c a 211 1 1 e b 211 1 1 e # 28780 revdifference c a 211 1 1 e b 211 0 0 0 1 2 3 4 5 7 9 10 11 13 14 15 16 19 22 33 34 36 41 42 43 44 45 46 47 50 53 54 55 59 60 61 62 64 65 66 70 73 77 79 81 83 84 86 87 88 90 91 92 93 95 96 99 101 103 104 105 106 108 110 111 114 115 118 120 121 122 123 129 131 132 133 134 137 138 140 141 144 145 150 152 153 154 156 158 161 163 164 168 171 172 173 175 176 180 183 184 187 188 189 192 193 195 197 198 200 203 206 207 208 # 28781 revdifference c a 211 1 1 f b 211 1 1 f # 28782 revdifference c a 211 1 1 f b 211 0 0 e # 28783 revdifference c a 211 1 1 f b 211 1 1 f # 28784 revdifference c a 211 1 1 f b 211 0 0 f # 28785 revdifference c a 211 1 1 f b 211 1 1 f # 28786 revdifference c a 211 1 1 f b 211 0 0 0 1 2 4 6 7 9 12 14 19 21 22 29 32 34 39 43 44 45 49 50 51 52 53 57 59 60 61 63 65 67 71 72 73 74 75 76 78 81 84 85 88 89 91 92 93 96 97 98 102 105 106 107 108 109 112 115 117 119 120 121 122 123 124 128 130 132 133 135 138 142 144 147 149 150 152 153 155 156 159 160 161 164 165 170 171 172 176 177 179 180 183 188 189 191 192 197 198 203 204 207 209 210 # 28787 revdifference c a 211 1 1 0 2 3 4 7 9 12 13 16 18 22 26 29 30 33 39 45 48 50 52 54 56 57 58 60 61 62 64 65 66 69 71 75 77 78 81 82 85 86 87 88 91 93 95 96 97 100 104 105 111 112 114 116 117 119 125 128 129 130 131 139 140 141 143 146 150 152 154 158 159 161 162 165 166 173 174 177 178 181 182 183 185 189 191 192 195 197 199 201 202 205 206 207 208 209 b 211 1 1 0 2 3 4 7 9 12 13 16 18 22 26 29 30 33 39 45 48 50 52 54 56 57 58 60 61 62 64 65 66 69 71 75 77 78 81 82 85 86 87 88 91 93 95 96 97 100 104 105 111 112 114 116 117 119 125 128 129 130 131 139 140 141 143 146 150 152 154 158 159 161 162 165 166 173 174 177 178 181 182 183 185 189 191 192 195 197 199 201 202 205 206 207 208 209 # 28788 revdifference c a 211 1 1 0 2 3 4 7 9 12 13 16 18 22 26 29 30 33 39 45 48 50 52 54 56 57 58 60 61 62 64 65 66 69 71 75 77 78 81 82 85 86 87 88 91 93 95 96 97 100 104 105 111 112 114 116 117 119 125 128 129 130 131 139 140 141 143 146 150 152 154 158 159 161 162 165 166 173 174 177 178 181 182 183 185 189 191 192 195 197 199 201 202 205 206 207 208 209 b 211 0 0 e # 28789 revdifference c a 211 1 1 4 8 10 13 14 17 18 19 20 22 24 25 27 28 30 32 37 38 42 43 46 47 49 50 53 54 56 58 59 61 62 66 67 70 71 72 73 74 77 81 82 83 84 86 88 89 92 96 98 100 101 103 104 105 107 108 114 116 117 118 120 121 122 123 127 134 135 138 140 144 150 153 156 157 160 161 162 165 167 168 170 171 172 174 176 178 180 181 182 183 184 187 189 192 193 195 196 197 198 199 200 201 203 208 210 b 211 1 1 4 8 10 13 14 17 18 19 20 22 24 25 27 28 30 32 37 38 42 43 46 47 49 50 53 54 56 58 59 61 62 66 67 70 71 72 73 74 77 81 82 83 84 86 88 89 92 96 98 100 101 103 104 105 107 108 114 116 117 118 120 121 122 123 127 134 135 138 140 144 150 153 156 157 160 161 162 165 167 168 170 171 172 174 176 178 180 181 182 183 184 187 189 192 193 195 196 197 198 199 200 201 203 208 210 # 28790 revdifference c a 211 1 1 4 8 10 13 14 17 18 19 20 22 24 25 27 28 30 32 37 38 42 43 46 47 49 50 53 54 56 58 59 61 62 66 67 70 71 72 73 74 77 81 82 83 84 86 88 89 92 96 98 100 101 103 104 105 107 108 114 116 117 118 120 121 122 123 127 134 135 138 140 144 150 153 156 157 160 161 162 165 167 168 170 171 172 174 176 178 180 181 182 183 184 187 189 192 193 195 196 197 198 199 200 201 203 208 210 b 211 0 0 f # 28791 revdifference c a 211 1 1 0 2 3 4 7 10 11 12 13 15 16 17 18 20 22 23 24 26 27 30 34 36 42 47 52 54 56 57 62 63 64 65 68 70 72 73 74 75 76 78 80 84 86 87 91 92 96 97 98 99 101 103 106 108 109 110 111 116 120 121 122 126 129 132 133 138 142 143 144 149 150 152 153 154 157 160 161 162 166 167 168 170 172 173 175 177 179 180 181 182 183 184 185 187 189 194 195 196 198 199 200 201 203 204 205 206 207 208 209 210 b 211 1 1 0 2 3 4 7 10 11 12 13 15 16 17 18 20 22 23 24 26 27 30 34 36 42 47 52 54 56 57 62 63 64 65 68 70 72 73 74 75 76 78 80 84 86 87 91 92 96 97 98 99 101 103 106 108 109 110 111 116 120 121 122 126 129 132 133 138 142 143 144 149 150 152 153 154 157 160 161 162 166 167 168 170 172 173 175 177 179 180 181 182 183 184 185 187 189 194 195 196 198 199 200 201 203 204 205 206 207 208 209 210 # 28792 revdifference c a 211 1 1 0 2 3 4 7 10 11 12 13 15 16 17 18 20 22 23 24 26 27 30 34 36 42 47 52 54 56 57 62 63 64 65 68 70 72 73 74 75 76 78 80 84 86 87 91 92 96 97 98 99 101 103 106 108 109 110 111 116 120 121 122 126 129 132 133 138 142 143 144 149 150 152 153 154 157 160 161 162 166 167 168 170 172 173 175 177 179 180 181 182 183 184 185 187 189 194 195 196 198 199 200 201 203 204 205 206 207 208 209 210 b 211 0 0 0 1 2 3 4 7 8 9 13 14 16 19 21 24 27 35 36 38 39 41 42 43 44 45 49 51 52 56 57 59 60 61 64 67 68 69 72 75 77 79 80 82 84 86 87 90 92 93 95 97 98 100 102 103 104 109 114 116 117 118 119 120 121 123 124 125 126 129 130 132 133 134 135 138 139 142 145 146 149 159 162 164 165 166 169 170 171 173 175 176 177 178 180 182 184 187 188 189 190 191 193 196 202 # 28793 revdifference c a 211 1 1 e b 211 1 1 e # 28794 revdifference c a 211 1 1 e b 211 0 1 e # 28795 revdifference c a 211 1 1 e b 211 1 1 e # 28796 revdifference c a 211 1 1 e b 211 0 1 f # 28797 revdifference c a 211 1 1 e b 211 1 1 e # 28798 revdifference c a 211 1 1 e b 211 0 1 0 6 9 10 12 13 17 18 19 20 22 24 25 26 27 29 33 35 38 40 41 42 43 44 48 49 50 51 53 55 56 58 59 63 65 68 70 71 73 74 76 79 82 87 88 90 91 92 94 96 98 99 100 101 102 105 109 114 115 116 118 119 120 121 122 123 124 127 128 129 130 132 133 134 136 138 142 143 144 145 147 152 155 156 158 161 162 164 165 167 168 173 174 176 178 179 180 183 184 186 188 189 190 192 193 194 195 196 198 199 201 202 203 204 205 207 210 # 28799 revdifference c a 211 1 1 f b 211 1 1 f # 28800 revdifference c a 211 1 1 f b 211 0 1 e # 28801 revdifference c a 211 1 1 f b 211 1 1 f # 28802 revdifference c a 211 1 1 f b 211 0 1 f # 28803 revdifference c a 211 1 1 f b 211 1 1 f # 28804 revdifference c a 211 1 1 f b 211 0 1 1 2 3 6 7 10 11 13 14 15 16 17 18 21 24 26 28 29 32 36 37 43 45 46 47 48 53 54 55 57 60 61 62 64 65 66 67 68 69 70 77 81 82 83 84 85 86 90 92 93 94 95 96 98 99 101 103 104 109 111 112 114 115 116 120 122 123 124 126 127 128 133 139 141 142 143 146 148 149 150 151 156 158 159 160 163 165 169 172 173 175 181 185 186 188 189 191 193 194 196 197 198 199 200 205 207 209 # 28805 revdifference c a 211 1 1 1 3 6 7 11 12 14 16 17 19 23 24 28 30 32 37 38 39 42 49 51 53 54 55 65 66 67 68 69 70 72 76 77 78 80 82 83 85 86 87 88 92 93 94 97 101 105 106 108 109 110 111 113 114 115 117 118 122 123 124 125 128 130 134 135 137 140 142 144 145 150 151 153 154 156 157 158 159 161 162 163 164 165 166 172 175 177 179 180 186 189 190 191 192 193 194 195 196 197 198 203 204 205 206 208 209 210 b 211 1 1 1 3 6 7 11 12 14 16 17 19 23 24 28 30 32 37 38 39 42 49 51 53 54 55 65 66 67 68 69 70 72 76 77 78 80 82 83 85 86 87 88 92 93 94 97 101 105 106 108 109 110 111 113 114 115 117 118 122 123 124 125 128 130 134 135 137 140 142 144 145 150 151 153 154 156 157 158 159 161 162 163 164 165 166 172 175 177 179 180 186 189 190 191 192 193 194 195 196 197 198 203 204 205 206 208 209 210 # 28806 revdifference c a 211 1 1 1 3 6 7 11 12 14 16 17 19 23 24 28 30 32 37 38 39 42 49 51 53 54 55 65 66 67 68 69 70 72 76 77 78 80 82 83 85 86 87 88 92 93 94 97 101 105 106 108 109 110 111 113 114 115 117 118 122 123 124 125 128 130 134 135 137 140 142 144 145 150 151 153 154 156 157 158 159 161 162 163 164 165 166 172 175 177 179 180 186 189 190 191 192 193 194 195 196 197 198 203 204 205 206 208 209 210 b 211 0 1 e # 28807 revdifference c a 211 1 1 0 5 7 8 10 11 12 13 15 18 19 28 31 33 34 35 36 38 39 45 47 49 51 53 56 58 59 60 62 65 68 69 70 74 75 79 81 84 85 86 87 89 90 91 95 102 103 104 105 106 108 110 114 115 117 118 120 124 125 131 132 134 136 138 139 140 141 143 145 146 148 149 150 154 157 161 165 166 178 180 181 182 187 189 191 192 197 199 201 203 207 208 210 b 211 1 1 0 5 7 8 10 11 12 13 15 18 19 28 31 33 34 35 36 38 39 45 47 49 51 53 56 58 59 60 62 65 68 69 70 74 75 79 81 84 85 86 87 89 90 91 95 102 103 104 105 106 108 110 114 115 117 118 120 124 125 131 132 134 136 138 139 140 141 143 145 146 148 149 150 154 157 161 165 166 178 180 181 182 187 189 191 192 197 199 201 203 207 208 210 # 28808 revdifference c a 211 1 1 0 5 7 8 10 11 12 13 15 18 19 28 31 33 34 35 36 38 39 45 47 49 51 53 56 58 59 60 62 65 68 69 70 74 75 79 81 84 85 86 87 89 90 91 95 102 103 104 105 106 108 110 114 115 117 118 120 124 125 131 132 134 136 138 139 140 141 143 145 146 148 149 150 154 157 161 165 166 178 180 181 182 187 189 191 192 197 199 201 203 207 208 210 b 211 0 1 f # 28809 revdifference c a 211 1 1 0 2 3 4 8 10 11 14 15 16 17 19 21 22 27 29 30 31 32 33 34 35 36 39 40 41 47 50 51 53 55 57 58 61 68 71 73 75 77 78 79 82 83 85 88 90 92 94 96 97 98 99 102 103 104 106 110 112 113 116 117 118 120 121 122 123 131 132 134 135 136 137 138 139 141 144 145 150 152 153 157 159 161 162 164 165 166 167 169 170 171 172 174 175 176 180 182 183 184 186 190 191 193 198 199 201 202 204 205 206 207 b 211 1 1 0 2 3 4 8 10 11 14 15 16 17 19 21 22 27 29 30 31 32 33 34 35 36 39 40 41 47 50 51 53 55 57 58 61 68 71 73 75 77 78 79 82 83 85 88 90 92 94 96 97 98 99 102 103 104 106 110 112 113 116 117 118 120 121 122 123 131 132 134 135 136 137 138 139 141 144 145 150 152 153 157 159 161 162 164 165 166 167 169 170 171 172 174 175 176 180 182 183 184 186 190 191 193 198 199 201 202 204 205 206 207 # 28810 revdifference c a 211 1 1 0 2 3 4 8 10 11 14 15 16 17 19 21 22 27 29 30 31 32 33 34 35 36 39 40 41 47 50 51 53 55 57 58 61 68 71 73 75 77 78 79 82 83 85 88 90 92 94 96 97 98 99 102 103 104 106 110 112 113 116 117 118 120 121 122 123 131 132 134 135 136 137 138 139 141 144 145 150 152 153 157 159 161 162 164 165 166 167 169 170 171 172 174 175 176 180 182 183 184 186 190 191 193 198 199 201 202 204 205 206 207 b 211 0 1 0 3 5 6 7 10 14 15 16 17 18 19 22 28 29 30 31 35 39 43 44 46 47 50 52 54 56 58 59 61 65 67 69 70 71 72 74 75 76 79 80 83 84 87 88 93 94 95 96 97 98 100 101 102 103 105 109 113 115 117 118 123 126 129 131 132 134 141 142 145 147 148 150 151 154 155 156 158 159 162 163 164 165 168 169 170 174 175 178 181 183 185 186 187 189 190 191 193 194 196 197 199 200 202 204 205 208 209 # 28811 revdifference c a 211 1 1 e b 211 1 1 e # 28812 revdifference c a 211 1 1 e b 211 1 0 e # 28813 revdifference c a 211 1 1 e b 211 1 1 e # 28814 revdifference c a 211 1 1 e b 211 1 0 f # 28815 revdifference c a 211 1 1 e b 211 1 1 e # 28816 revdifference c a 211 1 1 e b 211 1 0 1 2 4 5 7 9 10 11 13 14 16 17 18 23 24 26 29 30 31 32 35 38 41 43 44 48 50 56 58 59 62 63 64 65 66 70 71 74 75 77 82 83 84 87 89 90 91 94 98 99 100 102 104 105 108 109 110 111 113 114 116 117 118 120 121 125 126 127 129 130 133 134 135 137 140 141 143 144 145 147 148 151 152 158 159 161 167 169 171 172 174 184 185 186 189 191 193 195 197 198 204 206 208 209 210 # 28817 revdifference c a 211 1 1 f b 211 1 1 f # 28818 revdifference c a 211 1 1 f b 211 1 0 e # 28819 revdifference c a 211 1 1 f b 211 1 1 f # 28820 revdifference c a 211 1 1 f b 211 1 0 f # 28821 revdifference c a 211 1 1 f b 211 1 1 f # 28822 revdifference c a 211 1 1 f b 211 1 0 3 7 8 12 14 15 16 18 20 21 22 24 26 27 28 29 30 33 34 35 38 39 40 44 47 48 49 50 51 52 53 54 55 56 57 58 59 60 67 68 70 72 74 75 78 81 82 85 86 88 89 91 93 95 96 97 99 107 111 112 114 117 118 120 123 125 126 128 130 134 135 138 139 142 145 146 147 148 149 150 155 156 158 159 161 162 163 165 166 167 168 169 170 174 175 177 179 180 184 185 187 191 194 197 200 201 202 203 205 206 207 208 210 # 28823 revdifference c a 211 1 1 0 1 9 10 12 14 17 18 19 21 27 28 30 31 33 34 35 38 39 41 42 44 45 46 48 53 54 56 57 59 62 63 65 74 78 79 80 81 84 85 86 87 88 90 95 97 102 104 105 106 107 110 118 121 122 123 125 126 128 129 130 131 133 136 139 140 145 147 148 150 153 156 158 161 163 164 165 166 167 170 171 173 175 176 177 178 179 181 185 186 188 189 190 192 194 195 197 198 203 205 206 210 b 211 1 1 0 1 9 10 12 14 17 18 19 21 27 28 30 31 33 34 35 38 39 41 42 44 45 46 48 53 54 56 57 59 62 63 65 74 78 79 80 81 84 85 86 87 88 90 95 97 102 104 105 106 107 110 118 121 122 123 125 126 128 129 130 131 133 136 139 140 145 147 148 150 153 156 158 161 163 164 165 166 167 170 171 173 175 176 177 178 179 181 185 186 188 189 190 192 194 195 197 198 203 205 206 210 # 28824 revdifference c a 211 1 1 0 1 9 10 12 14 17 18 19 21 27 28 30 31 33 34 35 38 39 41 42 44 45 46 48 53 54 56 57 59 62 63 65 74 78 79 80 81 84 85 86 87 88 90 95 97 102 104 105 106 107 110 118 121 122 123 125 126 128 129 130 131 133 136 139 140 145 147 148 150 153 156 158 161 163 164 165 166 167 170 171 173 175 176 177 178 179 181 185 186 188 189 190 192 194 195 197 198 203 205 206 210 b 211 1 0 e # 28825 revdifference c a 211 1 1 0 4 5 7 8 10 13 18 19 24 25 26 32 37 40 42 45 51 52 54 55 57 59 64 65 66 70 73 74 75 76 79 80 82 83 84 85 86 88 89 93 98 99 101 103 104 106 109 114 116 117 118 119 120 122 126 127 128 129 130 132 137 138 139 140 144 146 147 148 149 151 154 155 156 157 159 162 166 167 169 170 174 175 177 178 180 184 186 187 188 192 194 196 199 205 207 208 b 211 1 1 0 4 5 7 8 10 13 18 19 24 25 26 32 37 40 42 45 51 52 54 55 57 59 64 65 66 70 73 74 75 76 79 80 82 83 84 85 86 88 89 93 98 99 101 103 104 106 109 114 116 117 118 119 120 122 126 127 128 129 130 132 137 138 139 140 144 146 147 148 149 151 154 155 156 157 159 162 166 167 169 170 174 175 177 178 180 184 186 187 188 192 194 196 199 205 207 208 # 28826 revdifference c a 211 1 1 0 4 5 7 8 10 13 18 19 24 25 26 32 37 40 42 45 51 52 54 55 57 59 64 65 66 70 73 74 75 76 79 80 82 83 84 85 86 88 89 93 98 99 101 103 104 106 109 114 116 117 118 119 120 122 126 127 128 129 130 132 137 138 139 140 144 146 147 148 149 151 154 155 156 157 159 162 166 167 169 170 174 175 177 178 180 184 186 187 188 192 194 196 199 205 207 208 b 211 1 0 f # 28827 revdifference c a 211 1 1 2 3 5 6 7 8 12 13 16 17 19 20 21 22 25 26 28 30 32 34 35 37 38 40 42 43 48 49 50 51 53 55 56 58 59 60 61 62 65 67 68 71 72 74 77 78 80 81 84 85 86 87 89 92 94 95 98 100 101 102 103 105 107 108 109 112 113 114 116 117 120 121 127 130 133 134 136 142 143 145 147 149 153 154 155 156 162 163 165 168 170 172 173 177 179 183 185 186 190 191 192 197 204 205 209 b 211 1 1 2 3 5 6 7 8 12 13 16 17 19 20 21 22 25 26 28 30 32 34 35 37 38 40 42 43 48 49 50 51 53 55 56 58 59 60 61 62 65 67 68 71 72 74 77 78 80 81 84 85 86 87 89 92 94 95 98 100 101 102 103 105 107 108 109 112 113 114 116 117 120 121 127 130 133 134 136 142 143 145 147 149 153 154 155 156 162 163 165 168 170 172 173 177 179 183 185 186 190 191 192 197 204 205 209 # 28828 revdifference c a 211 1 1 2 3 5 6 7 8 12 13 16 17 19 20 21 22 25 26 28 30 32 34 35 37 38 40 42 43 48 49 50 51 53 55 56 58 59 60 61 62 65 67 68 71 72 74 77 78 80 81 84 85 86 87 89 92 94 95 98 100 101 102 103 105 107 108 109 112 113 114 116 117 120 121 127 130 133 134 136 142 143 145 147 149 153 154 155 156 162 163 165 168 170 172 173 177 179 183 185 186 190 191 192 197 204 205 209 b 211 1 0 0 2 3 5 6 7 8 9 11 12 13 15 17 21 22 24 25 26 29 30 32 37 40 41 42 43 44 46 47 52 54 55 57 58 60 61 62 63 65 68 70 71 73 74 75 76 78 80 82 83 84 85 88 90 98 100 101 108 110 112 115 117 118 119 121 125 126 127 129 132 133 136 137 138 139 140 143 144 153 154 157 159 160 162 163 166 169 170 174 176 179 180 181 186 187 189 190 193 195 198 200 201 202 205 207 209 210 # 28829 revdifference c a 211 1 1 e b 211 1 1 e # 28830 revdifference c a 211 1 1 e b 211 1 1 e # 28831 revdifference c a 211 1 1 e b 211 1 1 e # 28832 revdifference c a 211 1 1 e b 211 1 1 f # 28833 revdifference c a 211 1 1 e b 211 1 1 e # 28834 revdifference c a 211 1 1 e b 211 1 1 1 5 10 11 12 13 16 23 24 25 27 30 32 34 39 42 45 46 50 51 52 53 54 56 57 61 62 65 68 69 73 74 75 76 78 80 81 84 86 87 90 93 94 98 102 103 105 110 111 115 118 119 120 121 123 125 127 132 135 137 141 145 147 152 153 156 157 159 161 163 165 166 167 171 173 176 177 180 181 183 185 189 191 192 193 194 197 199 200 202 205 206 207 208 209 # 28835 revdifference c a 211 1 1 f b 211 1 1 f # 28836 revdifference c a 211 1 1 f b 211 1 1 e # 28837 revdifference c a 211 1 1 f b 211 1 1 f # 28838 revdifference c a 211 1 1 f b 211 1 1 f # 28839 revdifference c a 211 1 1 f b 211 1 1 f # 28840 revdifference c a 211 1 1 f b 211 1 1 0 1 2 3 8 10 11 15 16 18 19 22 24 25 27 30 32 33 34 38 42 43 44 47 48 50 51 52 53 55 57 59 60 63 69 70 71 73 74 79 80 82 83 87 89 90 93 95 99 101 102 103 104 107 108 109 110 113 115 117 119 120 122 126 128 133 135 137 138 140 141 142 144 145 146 148 152 154 155 157 160 161 164 165 178 179 180 181 183 186 187 188 190 191 192 195 198 199 200 202 203 204 207 208 209 210 # 28841 revdifference c a 211 1 1 0 1 3 5 7 8 9 10 11 12 14 16 21 24 25 27 28 30 31 34 35 36 38 39 40 41 43 47 48 49 52 53 56 57 59 61 62 63 65 66 68 70 71 74 76 77 79 80 81 84 85 86 87 88 90 93 96 97 98 99 101 102 103 109 112 114 115 117 118 119 120 121 124 126 131 133 134 137 138 139 140 141 145 147 148 149 150 151 152 153 154 157 158 159 162 165 166 167 168 169 170 172 173 174 176 178 179 181 183 184 192 194 195 196 197 198 199 200 206 209 b 211 1 1 0 1 3 5 7 8 9 10 11 12 14 16 21 24 25 27 28 30 31 34 35 36 38 39 40 41 43 47 48 49 52 53 56 57 59 61 62 63 65 66 68 70 71 74 76 77 79 80 81 84 85 86 87 88 90 93 96 97 98 99 101 102 103 109 112 114 115 117 118 119 120 121 124 126 131 133 134 137 138 139 140 141 145 147 148 149 150 151 152 153 154 157 158 159 162 165 166 167 168 169 170 172 173 174 176 178 179 181 183 184 192 194 195 196 197 198 199 200 206 209 # 28842 revdifference c a 211 1 1 0 1 3 5 7 8 9 10 11 12 14 16 21 24 25 27 28 30 31 34 35 36 38 39 40 41 43 47 48 49 52 53 56 57 59 61 62 63 65 66 68 70 71 74 76 77 79 80 81 84 85 86 87 88 90 93 96 97 98 99 101 102 103 109 112 114 115 117 118 119 120 121 124 126 131 133 134 137 138 139 140 141 145 147 148 149 150 151 152 153 154 157 158 159 162 165 166 167 168 169 170 172 173 174 176 178 179 181 183 184 192 194 195 196 197 198 199 200 206 209 b 211 1 1 e # 28843 revdifference c a 211 1 1 0 2 3 9 10 11 13 14 16 17 19 20 21 22 26 27 28 29 30 33 36 38 41 43 44 47 56 62 64 66 67 68 69 71 72 73 74 77 79 81 83 85 87 92 94 95 96 97 98 100 103 107 110 111 113 116 117 119 121 123 126 130 132 135 138 139 140 145 146 148 151 153 154 155 157 158 159 161 163 164 166 168 169 171 173 175 176 177 178 184 190 192 195 196 199 201 202 205 208 210 b 211 1 1 0 2 3 9 10 11 13 14 16 17 19 20 21 22 26 27 28 29 30 33 36 38 41 43 44 47 56 62 64 66 67 68 69 71 72 73 74 77 79 81 83 85 87 92 94 95 96 97 98 100 103 107 110 111 113 116 117 119 121 123 126 130 132 135 138 139 140 145 146 148 151 153 154 155 157 158 159 161 163 164 166 168 169 171 173 175 176 177 178 184 190 192 195 196 199 201 202 205 208 210 # 28844 revdifference c a 211 1 1 0 2 3 9 10 11 13 14 16 17 19 20 21 22 26 27 28 29 30 33 36 38 41 43 44 47 56 62 64 66 67 68 69 71 72 73 74 77 79 81 83 85 87 92 94 95 96 97 98 100 103 107 110 111 113 116 117 119 121 123 126 130 132 135 138 139 140 145 146 148 151 153 154 155 157 158 159 161 163 164 166 168 169 171 173 175 176 177 178 184 190 192 195 196 199 201 202 205 208 210 b 211 1 1 f # 28845 revdifference c a 211 1 1 3 5 6 7 8 10 13 14 16 18 20 24 29 30 35 36 39 43 46 47 48 49 51 53 54 56 62 64 65 67 69 70 71 72 76 79 81 86 88 90 92 94 97 99 100 101 103 105 106 107 110 111 112 116 117 118 119 121 122 123 125 127 128 129 132 133 135 136 138 141 144 146 147 149 151 152 154 155 158 159 160 163 165 166 168 169 170 173 174 177 179 180 181 182 183 186 188 191 192 193 195 196 199 200 201 204 206 b 211 1 1 3 5 6 7 8 10 13 14 16 18 20 24 29 30 35 36 39 43 46 47 48 49 51 53 54 56 62 64 65 67 69 70 71 72 76 79 81 86 88 90 92 94 97 99 100 101 103 105 106 107 110 111 112 116 117 118 119 121 122 123 125 127 128 129 132 133 135 136 138 141 144 146 147 149 151 152 154 155 158 159 160 163 165 166 168 169 170 173 174 177 179 180 181 182 183 186 188 191 192 193 195 196 199 200 201 204 206 # 28846 revdifference c a 211 1 1 3 5 6 7 8 10 13 14 16 18 20 24 29 30 35 36 39 43 46 47 48 49 51 53 54 56 62 64 65 67 69 70 71 72 76 79 81 86 88 90 92 94 97 99 100 101 103 105 106 107 110 111 112 116 117 118 119 121 122 123 125 127 128 129 132 133 135 136 138 141 144 146 147 149 151 152 154 155 158 159 160 163 165 166 168 169 170 173 174 177 179 180 181 182 183 186 188 191 192 193 195 196 199 200 201 204 206 b 211 1 1 1 3 5 6 7 12 14 15 16 17 19 20 22 27 29 31 32 34 35 38 39 40 41 42 43 45 46 48 49 50 51 53 57 59 64 68 69 70 72 73 76 77 80 86 87 89 91 93 94 98 99 101 104 105 108 109 110 111 114 115 116 117 118 119 120 122 125 126 128 133 135 136 137 140 144 148 151 154 155 156 157 159 161 164 165 168 169 170 171 177 178 180 188 193 194 195 202 203 204 206 208 209 210 # 28847 revdifference c a 224 0 0 e b 224 0 0 e # 28848 revdifference c a 224 0 0 e b 224 0 0 e # 28849 revdifference c a 224 0 0 e b 224 0 0 e # 28850 revdifference c a 224 0 0 e b 224 0 0 f # 28851 revdifference c a 224 0 0 e b 224 0 0 e # 28852 revdifference c a 224 0 0 e b 224 0 0 0 1 2 6 7 16 18 19 20 22 34 35 38 39 40 46 48 49 51 57 58 59 60 62 65 66 67 69 70 71 72 73 77 78 80 81 83 87 92 101 104 105 106 108 110 115 116 117 119 121 125 127 129 132 133 134 135 140 142 149 151 152 154 158 162 163 164 165 166 169 170 174 175 176 177 178 179 180 182 184 185 186 187 189 192 195 202 204 214 216 221 222 # 28853 revdifference c a 224 0 0 f b 224 0 0 f # 28854 revdifference c a 224 0 0 f b 224 0 0 e # 28855 revdifference c a 224 0 0 f b 224 0 0 f # 28856 revdifference c a 224 0 0 f b 224 0 0 f # 28857 revdifference c a 224 0 0 f b 224 0 0 f # 28858 revdifference c a 224 0 0 f b 224 0 0 5 6 7 8 9 11 15 16 17 18 20 21 23 25 29 30 31 33 35 36 39 40 41 45 46 47 49 52 53 55 57 59 60 62 63 65 66 67 70 72 76 82 87 89 90 91 92 94 97 99 100 101 102 103 108 110 112 113 114 117 118 120 121 123 126 127 136 138 139 140 143 150 151 152 154 156 157 158 160 164 165 166 167 170 172 176 178 179 180 181 182 183 185 186 189 193 194 196 199 200 203 204 207 208 209 210 211 212 213 215 219 221 223 # 28859 revdifference c a 224 0 0 0 4 5 7 9 10 13 16 17 18 19 20 22 24 25 28 29 32 33 34 35 36 42 46 49 50 51 53 56 58 62 65 66 70 71 72 73 75 76 77 80 83 84 87 88 89 98 99 100 103 105 106 108 109 113 117 118 120 123 125 127 132 133 135 136 137 140 141 142 147 150 151 152 154 158 159 160 165 168 169 170 171 173 174 175 178 180 181 183 186 187 188 189 190 191 195 196 197 199 201 203 204 206 207 208 209 211 213 214 215 217 220 b 224 0 0 0 4 5 7 9 10 13 16 17 18 19 20 22 24 25 28 29 32 33 34 35 36 42 46 49 50 51 53 56 58 62 65 66 70 71 72 73 75 76 77 80 83 84 87 88 89 98 99 100 103 105 106 108 109 113 117 118 120 123 125 127 132 133 135 136 137 140 141 142 147 150 151 152 154 158 159 160 165 168 169 170 171 173 174 175 178 180 181 183 186 187 188 189 190 191 195 196 197 199 201 203 204 206 207 208 209 211 213 214 215 217 220 # 28860 revdifference c a 224 0 0 0 4 5 7 9 10 13 16 17 18 19 20 22 24 25 28 29 32 33 34 35 36 42 46 49 50 51 53 56 58 62 65 66 70 71 72 73 75 76 77 80 83 84 87 88 89 98 99 100 103 105 106 108 109 113 117 118 120 123 125 127 132 133 135 136 137 140 141 142 147 150 151 152 154 158 159 160 165 168 169 170 171 173 174 175 178 180 181 183 186 187 188 189 190 191 195 196 197 199 201 203 204 206 207 208 209 211 213 214 215 217 220 b 224 0 0 e # 28861 revdifference c a 224 0 0 7 9 10 13 17 19 20 21 22 24 26 29 30 31 33 35 37 39 43 44 46 51 55 57 59 60 62 67 69 70 71 72 73 75 79 80 81 82 83 85 86 87 88 90 91 92 93 95 97 98 105 107 109 110 111 112 114 117 118 121 125 127 128 129 134 135 138 141 147 151 153 155 156 161 162 163 166 168 169 170 171 172 175 176 177 178 181 184 185 189 190 191 193 194 195 197 199 200 202 204 207 208 213 214 215 217 219 220 b 224 0 0 7 9 10 13 17 19 20 21 22 24 26 29 30 31 33 35 37 39 43 44 46 51 55 57 59 60 62 67 69 70 71 72 73 75 79 80 81 82 83 85 86 87 88 90 91 92 93 95 97 98 105 107 109 110 111 112 114 117 118 121 125 127 128 129 134 135 138 141 147 151 153 155 156 161 162 163 166 168 169 170 171 172 175 176 177 178 181 184 185 189 190 191 193 194 195 197 199 200 202 204 207 208 213 214 215 217 219 220 # 28862 revdifference c a 224 0 0 7 9 10 13 17 19 20 21 22 24 26 29 30 31 33 35 37 39 43 44 46 51 55 57 59 60 62 67 69 70 71 72 73 75 79 80 81 82 83 85 86 87 88 90 91 92 93 95 97 98 105 107 109 110 111 112 114 117 118 121 125 127 128 129 134 135 138 141 147 151 153 155 156 161 162 163 166 168 169 170 171 172 175 176 177 178 181 184 185 189 190 191 193 194 195 197 199 200 202 204 207 208 213 214 215 217 219 220 b 224 0 0 f # 28863 revdifference c a 224 0 0 2 4 7 12 13 14 15 16 18 20 21 24 25 29 30 32 33 34 35 36 38 40 41 42 43 44 45 47 48 50 51 55 56 57 62 64 65 67 74 75 76 78 79 80 81 82 84 87 89 91 92 93 95 96 97 98 99 100 104 107 108 109 110 111 112 113 114 115 118 120 121 123 124 126 127 129 130 133 137 138 139 140 141 142 145 147 148 149 151 152 154 155 156 157 158 160 165 166 167 168 169 170 174 175 178 181 189 190 194 195 198 199 203 204 206 208 211 213 215 216 223 b 224 0 0 2 4 7 12 13 14 15 16 18 20 21 24 25 29 30 32 33 34 35 36 38 40 41 42 43 44 45 47 48 50 51 55 56 57 62 64 65 67 74 75 76 78 79 80 81 82 84 87 89 91 92 93 95 96 97 98 99 100 104 107 108 109 110 111 112 113 114 115 118 120 121 123 124 126 127 129 130 133 137 138 139 140 141 142 145 147 148 149 151 152 154 155 156 157 158 160 165 166 167 168 169 170 174 175 178 181 189 190 194 195 198 199 203 204 206 208 211 213 215 216 223 # 28864 revdifference c a 224 0 0 2 4 7 12 13 14 15 16 18 20 21 24 25 29 30 32 33 34 35 36 38 40 41 42 43 44 45 47 48 50 51 55 56 57 62 64 65 67 74 75 76 78 79 80 81 82 84 87 89 91 92 93 95 96 97 98 99 100 104 107 108 109 110 111 112 113 114 115 118 120 121 123 124 126 127 129 130 133 137 138 139 140 141 142 145 147 148 149 151 152 154 155 156 157 158 160 165 166 167 168 169 170 174 175 178 181 189 190 194 195 198 199 203 204 206 208 211 213 215 216 223 b 224 0 0 2 3 4 5 6 7 10 12 16 17 20 21 23 25 26 27 30 31 32 33 39 42 44 46 47 52 53 54 56 57 58 59 61 62 66 67 70 71 73 77 78 79 82 84 85 87 88 90 94 95 96 98 100 111 112 114 115 120 122 124 126 128 129 130 131 133 134 138 139 140 142 143 145 147 149 150 153 155 162 165 166 167 169 170 175 177 180 182 183 186 188 190 191 192 193 195 196 198 202 203 204 205 208 209 210 215 216 220 221 223 # 28865 revdifference c a 224 0 0 e b 224 0 0 e # 28866 revdifference c a 224 0 0 e b 224 0 1 e # 28867 revdifference c a 224 0 0 e b 224 0 0 e # 28868 revdifference c a 224 0 0 e b 224 0 1 f # 28869 revdifference c a 224 0 0 e b 224 0 0 e # 28870 revdifference c a 224 0 0 e b 224 0 1 0 1 2 6 7 8 10 11 17 18 19 24 25 26 27 28 34 35 36 37 38 39 42 43 44 45 46 47 48 49 50 52 54 55 56 59 60 61 63 66 67 68 70 72 74 75 77 78 80 82 83 84 85 87 89 91 92 93 94 96 97 99 101 106 107 109 111 114 115 118 124 127 129 130 132 134 137 139 141 142 143 146 148 150 151 152 155 156 157 158 161 162 164 169 171 173 175 180 184 187 189 190 191 192 193 194 195 203 205 207 208 209 211 212 215 216 222 # 28871 revdifference c a 224 0 0 f b 224 0 0 f # 28872 revdifference c a 224 0 0 f b 224 0 1 e # 28873 revdifference c a 224 0 0 f b 224 0 0 f # 28874 revdifference c a 224 0 0 f b 224 0 1 f # 28875 revdifference c a 224 0 0 f b 224 0 0 f # 28876 revdifference c a 224 0 0 f b 224 0 1 1 2 6 7 8 12 13 15 16 18 19 20 21 23 25 27 31 35 41 44 45 47 53 55 56 58 60 61 63 66 67 68 70 74 78 82 83 85 90 96 97 102 104 106 107 108 109 114 115 119 120 122 123 129 130 132 134 135 136 137 138 139 142 143 145 147 149 152 156 157 158 159 164 167 169 170 171 173 175 176 177 180 181 183 185 189 191 193 197 200 203 204 205 206 207 208 210 215 218 219 222 223 # 28877 revdifference c a 224 0 0 0 4 5 6 7 9 10 12 14 16 17 18 19 22 23 24 25 28 31 33 36 37 39 40 41 43 51 53 56 57 59 61 62 63 65 68 71 74 75 76 77 79 82 83 86 90 93 95 96 98 99 100 102 104 109 111 115 118 119 120 121 124 126 128 129 131 133 135 137 139 140 141 142 143 146 147 148 149 151 152 153 154 157 158 160 165 167 168 169 170 172 175 176 178 180 183 184 193 195 197 202 204 209 210 219 220 221 222 b 224 0 0 0 4 5 6 7 9 10 12 14 16 17 18 19 22 23 24 25 28 31 33 36 37 39 40 41 43 51 53 56 57 59 61 62 63 65 68 71 74 75 76 77 79 82 83 86 90 93 95 96 98 99 100 102 104 109 111 115 118 119 120 121 124 126 128 129 131 133 135 137 139 140 141 142 143 146 147 148 149 151 152 153 154 157 158 160 165 167 168 169 170 172 175 176 178 180 183 184 193 195 197 202 204 209 210 219 220 221 222 # 28878 revdifference c a 224 0 0 0 4 5 6 7 9 10 12 14 16 17 18 19 22 23 24 25 28 31 33 36 37 39 40 41 43 51 53 56 57 59 61 62 63 65 68 71 74 75 76 77 79 82 83 86 90 93 95 96 98 99 100 102 104 109 111 115 118 119 120 121 124 126 128 129 131 133 135 137 139 140 141 142 143 146 147 148 149 151 152 153 154 157 158 160 165 167 168 169 170 172 175 176 178 180 183 184 193 195 197 202 204 209 210 219 220 221 222 b 224 0 1 e # 28879 revdifference c a 224 0 0 0 2 7 8 10 14 15 17 21 22 23 27 31 32 36 37 38 40 41 42 45 48 49 50 52 53 54 55 56 58 60 63 70 73 74 76 78 79 81 82 83 84 85 86 87 89 90 95 96 97 98 99 100 101 105 106 109 110 112 113 116 122 123 135 138 139 140 141 143 144 145 147 151 152 156 157 161 163 165 167 173 174 179 180 181 185 186 188 190 192 197 198 202 203 205 207 208 209 211 212 213 216 217 218 219 b 224 0 0 0 2 7 8 10 14 15 17 21 22 23 27 31 32 36 37 38 40 41 42 45 48 49 50 52 53 54 55 56 58 60 63 70 73 74 76 78 79 81 82 83 84 85 86 87 89 90 95 96 97 98 99 100 101 105 106 109 110 112 113 116 122 123 135 138 139 140 141 143 144 145 147 151 152 156 157 161 163 165 167 173 174 179 180 181 185 186 188 190 192 197 198 202 203 205 207 208 209 211 212 213 216 217 218 219 # 28880 revdifference c a 224 0 0 0 2 7 8 10 14 15 17 21 22 23 27 31 32 36 37 38 40 41 42 45 48 49 50 52 53 54 55 56 58 60 63 70 73 74 76 78 79 81 82 83 84 85 86 87 89 90 95 96 97 98 99 100 101 105 106 109 110 112 113 116 122 123 135 138 139 140 141 143 144 145 147 151 152 156 157 161 163 165 167 173 174 179 180 181 185 186 188 190 192 197 198 202 203 205 207 208 209 211 212 213 216 217 218 219 b 224 0 1 f # 28881 revdifference c a 224 0 0 0 1 3 7 8 12 13 14 15 18 21 24 28 29 32 33 37 38 42 45 47 49 50 51 52 55 56 57 60 61 62 64 66 69 70 71 74 84 90 91 93 95 99 100 101 102 105 106 107 108 109 115 116 117 125 127 128 129 130 131 132 133 137 138 140 142 144 147 148 149 150 154 155 156 158 159 160 161 162 163 166 167 169 175 177 178 181 182 183 184 187 188 190 191 192 193 201 202 203 206 207 208 213 217 220 222 223 b 224 0 0 0 1 3 7 8 12 13 14 15 18 21 24 28 29 32 33 37 38 42 45 47 49 50 51 52 55 56 57 60 61 62 64 66 69 70 71 74 84 90 91 93 95 99 100 101 102 105 106 107 108 109 115 116 117 125 127 128 129 130 131 132 133 137 138 140 142 144 147 148 149 150 154 155 156 158 159 160 161 162 163 166 167 169 175 177 178 181 182 183 184 187 188 190 191 192 193 201 202 203 206 207 208 213 217 220 222 223 # 28882 revdifference c a 224 0 0 0 1 3 7 8 12 13 14 15 18 21 24 28 29 32 33 37 38 42 45 47 49 50 51 52 55 56 57 60 61 62 64 66 69 70 71 74 84 90 91 93 95 99 100 101 102 105 106 107 108 109 115 116 117 125 127 128 129 130 131 132 133 137 138 140 142 144 147 148 149 150 154 155 156 158 159 160 161 162 163 166 167 169 175 177 178 181 182 183 184 187 188 190 191 192 193 201 202 203 206 207 208 213 217 220 222 223 b 224 0 1 4 5 6 8 9 12 13 14 15 19 21 22 23 26 29 31 33 36 38 39 40 43 46 47 51 55 56 61 62 63 64 67 70 72 73 75 78 79 80 84 85 86 90 91 92 93 94 95 96 100 102 103 106 108 111 112 113 116 118 121 128 129 130 131 132 133 138 140 141 144 145 146 148 149 150 152 153 154 158 159 160 161 162 163 164 169 170 172 174 175 176 177 179 180 181 184 186 188 191 193 194 195 197 199 200 201 202 203 205 206 209 212 213 214 215 219 220 222 # 28883 revdifference c a 224 0 0 e b 224 0 0 e # 28884 revdifference c a 224 0 0 e b 224 1 0 e # 28885 revdifference c a 224 0 0 e b 224 0 0 e # 28886 revdifference c a 224 0 0 e b 224 1 0 f # 28887 revdifference c a 224 0 0 e b 224 0 0 e # 28888 revdifference c a 224 0 0 e b 224 1 0 3 11 14 15 18 20 21 28 29 33 35 37 39 41 48 50 51 52 53 54 61 62 63 64 66 67 68 70 74 76 77 78 81 84 89 90 91 92 93 95 96 98 99 103 104 105 108 110 112 115 117 118 119 120 121 122 123 126 131 132 133 134 135 136 137 139 142 146 147 149 150 152 153 156 158 160 163 164 167 169 172 174 176 177 180 182 186 188 190 192 195 197 199 201 205 206 208 210 212 213 214 217 222 223 # 28889 revdifference c a 224 0 0 f b 224 0 0 f # 28890 revdifference c a 224 0 0 f b 224 1 0 e # 28891 revdifference c a 224 0 0 f b 224 0 0 f # 28892 revdifference c a 224 0 0 f b 224 1 0 f # 28893 revdifference c a 224 0 0 f b 224 0 0 f # 28894 revdifference c a 224 0 0 f b 224 1 0 1 2 3 4 6 9 10 11 12 13 15 23 24 25 26 29 31 32 33 34 38 48 50 51 52 54 55 57 58 65 66 70 71 72 76 77 78 83 84 86 87 88 89 92 93 94 96 98 100 101 103 104 105 107 109 111 113 114 116 119 121 128 131 132 133 134 135 137 138 139 140 141 142 144 146 147 148 149 150 152 157 161 162 164 165 168 169 171 172 173 175 177 180 182 183 186 187 194 196 197 199 200 201 203 204 205 206 208 210 211 215 216 218 219 220 # 28895 revdifference c a 224 0 0 2 8 9 11 13 14 17 18 19 22 23 24 25 26 27 28 32 34 35 40 46 47 48 49 56 59 60 61 64 68 69 70 71 75 77 80 81 82 83 85 91 93 97 98 99 100 101 102 103 104 105 106 108 110 111 113 114 116 117 118 119 121 122 123 124 126 127 129 130 133 136 137 138 139 141 144 146 149 151 152 156 162 163 165 167 168 170 174 175 177 179 181 185 186 190 191 192 193 195 196 197 198 199 200 201 202 204 205 209 211 212 213 216 217 218 221 222 223 b 224 0 0 2 8 9 11 13 14 17 18 19 22 23 24 25 26 27 28 32 34 35 40 46 47 48 49 56 59 60 61 64 68 69 70 71 75 77 80 81 82 83 85 91 93 97 98 99 100 101 102 103 104 105 106 108 110 111 113 114 116 117 118 119 121 122 123 124 126 127 129 130 133 136 137 138 139 141 144 146 149 151 152 156 162 163 165 167 168 170 174 175 177 179 181 185 186 190 191 192 193 195 196 197 198 199 200 201 202 204 205 209 211 212 213 216 217 218 221 222 223 # 28896 revdifference c a 224 0 0 2 8 9 11 13 14 17 18 19 22 23 24 25 26 27 28 32 34 35 40 46 47 48 49 56 59 60 61 64 68 69 70 71 75 77 80 81 82 83 85 91 93 97 98 99 100 101 102 103 104 105 106 108 110 111 113 114 116 117 118 119 121 122 123 124 126 127 129 130 133 136 137 138 139 141 144 146 149 151 152 156 162 163 165 167 168 170 174 175 177 179 181 185 186 190 191 192 193 195 196 197 198 199 200 201 202 204 205 209 211 212 213 216 217 218 221 222 223 b 224 1 0 e # 28897 revdifference c a 224 0 0 2 5 6 8 9 11 12 13 23 27 28 30 32 33 34 35 36 37 40 41 46 47 48 49 53 55 56 58 59 60 67 68 69 71 73 75 77 78 80 84 85 87 90 91 92 95 96 97 98 99 100 105 108 110 111 116 117 120 123 124 125 126 127 128 129 133 134 136 137 138 141 143 144 147 149 154 157 158 159 163 170 172 173 175 178 179 182 184 185 186 187 188 189 190 194 195 196 198 199 201 204 205 210 212 213 214 216 217 219 222 223 b 224 0 0 2 5 6 8 9 11 12 13 23 27 28 30 32 33 34 35 36 37 40 41 46 47 48 49 53 55 56 58 59 60 67 68 69 71 73 75 77 78 80 84 85 87 90 91 92 95 96 97 98 99 100 105 108 110 111 116 117 120 123 124 125 126 127 128 129 133 134 136 137 138 141 143 144 147 149 154 157 158 159 163 170 172 173 175 178 179 182 184 185 186 187 188 189 190 194 195 196 198 199 201 204 205 210 212 213 214 216 217 219 222 223 # 28898 revdifference c a 224 0 0 2 5 6 8 9 11 12 13 23 27 28 30 32 33 34 35 36 37 40 41 46 47 48 49 53 55 56 58 59 60 67 68 69 71 73 75 77 78 80 84 85 87 90 91 92 95 96 97 98 99 100 105 108 110 111 116 117 120 123 124 125 126 127 128 129 133 134 136 137 138 141 143 144 147 149 154 157 158 159 163 170 172 173 175 178 179 182 184 185 186 187 188 189 190 194 195 196 198 199 201 204 205 210 212 213 214 216 217 219 222 223 b 224 1 0 f # 28899 revdifference c a 224 0 0 0 1 3 6 7 11 12 13 18 19 21 25 26 27 29 30 32 36 37 38 39 42 44 51 52 53 54 56 57 60 62 63 65 68 77 78 79 81 82 84 85 86 88 90 91 94 95 97 102 103 104 109 112 113 114 115 116 120 121 125 127 128 132 134 135 138 139 145 146 147 153 155 156 157 158 159 162 165 166 167 169 170 173 174 176 177 180 181 182 184 186 188 189 192 202 203 205 209 210 212 214 216 217 218 219 222 b 224 0 0 0 1 3 6 7 11 12 13 18 19 21 25 26 27 29 30 32 36 37 38 39 42 44 51 52 53 54 56 57 60 62 63 65 68 77 78 79 81 82 84 85 86 88 90 91 94 95 97 102 103 104 109 112 113 114 115 116 120 121 125 127 128 132 134 135 138 139 145 146 147 153 155 156 157 158 159 162 165 166 167 169 170 173 174 176 177 180 181 182 184 186 188 189 192 202 203 205 209 210 212 214 216 217 218 219 222 # 28900 revdifference c a 224 0 0 0 1 3 6 7 11 12 13 18 19 21 25 26 27 29 30 32 36 37 38 39 42 44 51 52 53 54 56 57 60 62 63 65 68 77 78 79 81 82 84 85 86 88 90 91 94 95 97 102 103 104 109 112 113 114 115 116 120 121 125 127 128 132 134 135 138 139 145 146 147 153 155 156 157 158 159 162 165 166 167 169 170 173 174 176 177 180 181 182 184 186 188 189 192 202 203 205 209 210 212 214 216 217 218 219 222 b 224 1 0 2 3 4 8 11 12 17 18 19 21 26 27 28 29 34 36 38 39 42 44 45 46 47 48 49 50 52 54 56 57 59 60 61 62 65 66 69 70 71 72 73 75 76 78 79 81 83 85 88 90 93 94 96 98 101 102 106 109 110 111 114 115 117 118 119 121 123 124 127 128 129 131 132 139 140 142 144 147 150 151 154 156 157 160 163 164 165 166 168 171 172 173 175 177 178 179 180 181 182 185 187 188 189 191 193 195 196 199 200 202 203 206 207 208 210 211 213 216 217 221 223 # 28901 revdifference c a 224 0 0 e b 224 0 0 e # 28902 revdifference c a 224 0 0 e b 224 1 1 e # 28903 revdifference c a 224 0 0 e b 224 0 0 e # 28904 revdifference c a 224 0 0 e b 224 1 1 f # 28905 revdifference c a 224 0 0 e b 224 0 0 e # 28906 revdifference c a 224 0 0 e b 224 1 1 0 1 2 3 5 11 13 14 17 19 20 21 23 25 27 28 30 31 37 38 39 41 42 43 44 45 48 49 51 54 55 57 58 59 61 62 63 67 69 70 72 73 75 76 79 81 82 83 86 89 91 94 95 97 99 100 103 104 106 107 108 114 116 117 118 123 124 125 126 128 130 131 134 136 137 139 141 142 143 144 145 147 148 150 152 157 158 161 163 164 167 171 177 178 180 181 183 185 188 189 190 191 192 193 194 195 197 201 203 205 206 207 209 212 213 218 # 28907 revdifference c a 224 0 0 f b 224 0 0 f # 28908 revdifference c a 224 0 0 f b 224 1 1 e # 28909 revdifference c a 224 0 0 f b 224 0 0 f # 28910 revdifference c a 224 0 0 f b 224 1 1 f # 28911 revdifference c a 224 0 0 f b 224 0 0 f # 28912 revdifference c a 224 0 0 f b 224 1 1 1 2 3 4 11 14 15 20 24 26 28 29 30 32 33 34 35 39 40 41 42 43 44 45 46 48 49 51 53 58 59 61 67 69 76 77 78 79 80 82 86 88 89 91 92 93 96 98 102 103 104 105 107 108 109 110 111 113 118 119 122 128 130 131 132 134 135 137 140 144 145 146 149 151 157 158 164 165 166 168 170 171 172 175 177 178 179 180 182 183 187 188 192 195 200 203 204 205 208 212 217 222 223 # 28913 revdifference c a 224 0 0 0 2 4 5 6 7 11 13 15 20 21 24 25 26 32 33 34 36 37 41 44 48 49 51 52 53 54 55 56 57 59 63 65 68 69 70 71 73 77 80 81 83 84 86 87 88 90 92 93 96 97 98 99 102 103 107 109 112 113 115 116 119 130 131 132 133 134 136 137 140 141 145 148 149 152 153 154 165 168 169 171 173 175 176 179 181 184 185 187 189 191 193 194 195 196 198 199 203 205 206 210 214 215 218 223 b 224 0 0 0 2 4 5 6 7 11 13 15 20 21 24 25 26 32 33 34 36 37 41 44 48 49 51 52 53 54 55 56 57 59 63 65 68 69 70 71 73 77 80 81 83 84 86 87 88 90 92 93 96 97 98 99 102 103 107 109 112 113 115 116 119 130 131 132 133 134 136 137 140 141 145 148 149 152 153 154 165 168 169 171 173 175 176 179 181 184 185 187 189 191 193 194 195 196 198 199 203 205 206 210 214 215 218 223 # 28914 revdifference c a 224 0 0 0 2 4 5 6 7 11 13 15 20 21 24 25 26 32 33 34 36 37 41 44 48 49 51 52 53 54 55 56 57 59 63 65 68 69 70 71 73 77 80 81 83 84 86 87 88 90 92 93 96 97 98 99 102 103 107 109 112 113 115 116 119 130 131 132 133 134 136 137 140 141 145 148 149 152 153 154 165 168 169 171 173 175 176 179 181 184 185 187 189 191 193 194 195 196 198 199 203 205 206 210 214 215 218 223 b 224 1 1 e # 28915 revdifference c a 224 0 0 3 4 6 7 8 10 12 14 16 17 18 19 20 22 24 25 26 27 29 30 31 34 35 36 38 39 40 41 43 45 46 47 48 49 50 51 53 54 55 56 57 58 60 61 63 64 65 66 67 69 72 73 74 75 76 77 78 80 81 83 84 86 87 88 89 91 92 93 94 95 96 97 100 101 104 110 121 123 124 125 126 128 130 134 135 136 140 144 145 146 148 150 153 156 157 158 159 164 168 169 170 171 176 179 180 190 191 192 197 198 200 201 202 204 207 209 210 216 217 218 221 222 223 b 224 0 0 3 4 6 7 8 10 12 14 16 17 18 19 20 22 24 25 26 27 29 30 31 34 35 36 38 39 40 41 43 45 46 47 48 49 50 51 53 54 55 56 57 58 60 61 63 64 65 66 67 69 72 73 74 75 76 77 78 80 81 83 84 86 87 88 89 91 92 93 94 95 96 97 100 101 104 110 121 123 124 125 126 128 130 134 135 136 140 144 145 146 148 150 153 156 157 158 159 164 168 169 170 171 176 179 180 190 191 192 197 198 200 201 202 204 207 209 210 216 217 218 221 222 223 # 28916 revdifference c a 224 0 0 3 4 6 7 8 10 12 14 16 17 18 19 20 22 24 25 26 27 29 30 31 34 35 36 38 39 40 41 43 45 46 47 48 49 50 51 53 54 55 56 57 58 60 61 63 64 65 66 67 69 72 73 74 75 76 77 78 80 81 83 84 86 87 88 89 91 92 93 94 95 96 97 100 101 104 110 121 123 124 125 126 128 130 134 135 136 140 144 145 146 148 150 153 156 157 158 159 164 168 169 170 171 176 179 180 190 191 192 197 198 200 201 202 204 207 209 210 216 217 218 221 222 223 b 224 1 1 f # 28917 revdifference c a 224 0 0 0 4 6 7 9 10 12 18 19 25 28 31 32 33 35 37 39 40 42 43 44 49 51 57 58 62 63 66 67 70 71 72 73 74 75 76 77 80 84 85 86 89 90 91 93 94 95 96 98 100 105 108 110 111 112 115 116 117 120 123 124 125 126 127 132 134 137 145 148 149 150 159 160 162 163 164 165 166 168 170 172 174 178 179 181 184 185 186 189 190 191 193 194 196 197 198 201 202 203 207 208 209 210 211 212 215 218 221 223 b 224 0 0 0 4 6 7 9 10 12 18 19 25 28 31 32 33 35 37 39 40 42 43 44 49 51 57 58 62 63 66 67 70 71 72 73 74 75 76 77 80 84 85 86 89 90 91 93 94 95 96 98 100 105 108 110 111 112 115 116 117 120 123 124 125 126 127 132 134 137 145 148 149 150 159 160 162 163 164 165 166 168 170 172 174 178 179 181 184 185 186 189 190 191 193 194 196 197 198 201 202 203 207 208 209 210 211 212 215 218 221 223 # 28918 revdifference c a 224 0 0 0 4 6 7 9 10 12 18 19 25 28 31 32 33 35 37 39 40 42 43 44 49 51 57 58 62 63 66 67 70 71 72 73 74 75 76 77 80 84 85 86 89 90 91 93 94 95 96 98 100 105 108 110 111 112 115 116 117 120 123 124 125 126 127 132 134 137 145 148 149 150 159 160 162 163 164 165 166 168 170 172 174 178 179 181 184 185 186 189 190 191 193 194 196 197 198 201 202 203 207 208 209 210 211 212 215 218 221 223 b 224 1 1 0 3 4 9 11 21 22 23 24 25 28 29 30 31 32 34 35 37 39 40 44 45 46 49 50 51 52 53 55 56 57 58 59 61 62 67 69 73 74 76 77 78 80 82 87 90 91 96 97 101 102 103 104 105 106 107 108 109 110 113 114 119 123 124 125 127 131 134 135 137 138 139 141 143 144 148 149 150 152 154 155 159 160 161 162 163 164 166 169 171 173 177 179 184 189 190 193 198 200 201 204 205 206 207 210 211 212 215 217 218 219 221 223 # 28919 revdifference c a 224 0 1 e b 224 0 1 e # 28920 revdifference c a 224 0 1 e b 224 0 0 e # 28921 revdifference c a 224 0 1 e b 224 0 1 e # 28922 revdifference c a 224 0 1 e b 224 0 0 f # 28923 revdifference c a 224 0 1 e b 224 0 1 e # 28924 revdifference c a 224 0 1 e b 224 0 0 0 3 4 7 9 11 13 14 15 17 18 19 22 23 25 26 27 28 29 30 37 38 39 40 42 45 48 51 52 54 55 56 58 59 63 64 65 68 70 73 74 75 77 81 83 84 85 86 87 89 90 91 93 94 95 96 102 103 104 105 106 108 109 110 111 112 113 114 115 116 117 118 120 123 126 128 130 133 137 138 140 141 143 144 147 151 152 153 154 157 159 163 164 170 172 173 175 177 180 181 183 186 187 190 191 192 193 195 197 199 200 201 203 204 205 206 210 212 216 220 221 222 # 28925 revdifference c a 224 0 1 f b 224 0 1 f # 28926 revdifference c a 224 0 1 f b 224 0 0 e # 28927 revdifference c a 224 0 1 f b 224 0 1 f # 28928 revdifference c a 224 0 1 f b 224 0 0 f # 28929 revdifference c a 224 0 1 f b 224 0 1 f # 28930 revdifference c a 224 0 1 f b 224 0 0 0 9 12 13 14 18 20 21 22 25 26 27 28 29 31 33 37 38 39 40 41 43 44 45 46 49 52 54 55 58 65 66 68 69 71 72 75 78 79 83 84 85 86 87 89 91 95 99 100 102 103 104 108 111 112 113 114 115 116 117 118 120 121 122 127 130 132 135 136 137 141 144 146 149 150 152 153 154 156 158 160 161 162 163 166 167 168 173 175 179 183 184 187 188 192 196 197 199 201 202 204 208 209 213 219 220 221 223 # 28931 revdifference c a 224 0 1 1 2 3 4 6 7 8 9 11 13 14 16 20 21 25 27 29 30 31 33 34 36 39 41 42 44 45 46 47 48 50 51 52 59 61 63 64 66 67 68 70 71 72 75 84 86 88 89 90 92 94 95 96 97 104 105 106 107 111 112 115 116 117 119 120 123 124 126 130 134 137 139 144 145 147 148 150 151 152 154 158 159 160 161 165 167 168 169 170 171 176 179 180 183 187 188 190 193 194 195 196 198 199 200 202 204 205 207 209 212 213 219 220 223 b 224 0 1 1 2 3 4 6 7 8 9 11 13 14 16 20 21 25 27 29 30 31 33 34 36 39 41 42 44 45 46 47 48 50 51 52 59 61 63 64 66 67 68 70 71 72 75 84 86 88 89 90 92 94 95 96 97 104 105 106 107 111 112 115 116 117 119 120 123 124 126 130 134 137 139 144 145 147 148 150 151 152 154 158 159 160 161 165 167 168 169 170 171 176 179 180 183 187 188 190 193 194 195 196 198 199 200 202 204 205 207 209 212 213 219 220 223 # 28932 revdifference c a 224 0 1 1 2 3 4 6 7 8 9 11 13 14 16 20 21 25 27 29 30 31 33 34 36 39 41 42 44 45 46 47 48 50 51 52 59 61 63 64 66 67 68 70 71 72 75 84 86 88 89 90 92 94 95 96 97 104 105 106 107 111 112 115 116 117 119 120 123 124 126 130 134 137 139 144 145 147 148 150 151 152 154 158 159 160 161 165 167 168 169 170 171 176 179 180 183 187 188 190 193 194 195 196 198 199 200 202 204 205 207 209 212 213 219 220 223 b 224 0 0 e # 28933 revdifference c a 224 0 1 2 6 8 9 10 11 12 16 17 18 19 20 21 25 29 32 33 34 37 38 41 44 45 47 48 50 51 54 55 58 59 60 63 65 67 68 77 79 82 84 85 88 90 91 94 95 99 100 101 105 108 109 111 112 115 116 117 118 119 120 121 122 125 129 133 134 135 140 141 143 144 145 146 147 149 150 152 153 154 155 156 160 161 162 164 165 168 171 173 174 177 179 188 189 190 191 192 193 198 200 204 209 211 212 213 214 220 222 223 b 224 0 1 2 6 8 9 10 11 12 16 17 18 19 20 21 25 29 32 33 34 37 38 41 44 45 47 48 50 51 54 55 58 59 60 63 65 67 68 77 79 82 84 85 88 90 91 94 95 99 100 101 105 108 109 111 112 115 116 117 118 119 120 121 122 125 129 133 134 135 140 141 143 144 145 146 147 149 150 152 153 154 155 156 160 161 162 164 165 168 171 173 174 177 179 188 189 190 191 192 193 198 200 204 209 211 212 213 214 220 222 223 # 28934 revdifference c a 224 0 1 2 6 8 9 10 11 12 16 17 18 19 20 21 25 29 32 33 34 37 38 41 44 45 47 48 50 51 54 55 58 59 60 63 65 67 68 77 79 82 84 85 88 90 91 94 95 99 100 101 105 108 109 111 112 115 116 117 118 119 120 121 122 125 129 133 134 135 140 141 143 144 145 146 147 149 150 152 153 154 155 156 160 161 162 164 165 168 171 173 174 177 179 188 189 190 191 192 193 198 200 204 209 211 212 213 214 220 222 223 b 224 0 0 f # 28935 revdifference c a 224 0 1 0 4 5 6 7 10 12 14 18 21 23 25 26 29 30 34 35 37 38 41 42 48 50 51 54 55 57 58 60 61 62 63 66 69 70 73 74 75 79 80 81 82 85 86 89 90 92 93 98 100 101 102 105 107 108 110 111 113 114 115 117 119 120 123 124 128 129 130 131 132 133 138 140 141 147 150 152 155 156 158 161 167 168 171 173 175 176 177 178 181 183 184 185 186 187 189 191 194 195 196 198 199 200 202 206 209 213 216 219 220 222 b 224 0 1 0 4 5 6 7 10 12 14 18 21 23 25 26 29 30 34 35 37 38 41 42 48 50 51 54 55 57 58 60 61 62 63 66 69 70 73 74 75 79 80 81 82 85 86 89 90 92 93 98 100 101 102 105 107 108 110 111 113 114 115 117 119 120 123 124 128 129 130 131 132 133 138 140 141 147 150 152 155 156 158 161 167 168 171 173 175 176 177 178 181 183 184 185 186 187 189 191 194 195 196 198 199 200 202 206 209 213 216 219 220 222 # 28936 revdifference c a 224 0 1 0 4 5 6 7 10 12 14 18 21 23 25 26 29 30 34 35 37 38 41 42 48 50 51 54 55 57 58 60 61 62 63 66 69 70 73 74 75 79 80 81 82 85 86 89 90 92 93 98 100 101 102 105 107 108 110 111 113 114 115 117 119 120 123 124 128 129 130 131 132 133 138 140 141 147 150 152 155 156 158 161 167 168 171 173 175 176 177 178 181 183 184 185 186 187 189 191 194 195 196 198 199 200 202 206 209 213 216 219 220 222 b 224 0 0 0 1 3 6 8 9 15 17 19 20 21 23 24 26 27 28 31 33 34 37 38 40 42 44 47 50 53 54 57 61 64 66 69 70 72 74 75 76 78 79 80 83 87 88 93 94 95 97 99 101 108 109 115 116 117 118 119 122 125 127 129 130 131 132 136 137 139 140 141 145 147 150 151 152 153 157 159 162 164 167 169 171 172 173 175 178 179 180 181 182 185 186 187 188 189 190 193 195 197 198 199 200 202 203 204 205 206 209 214 215 218 219 221 223 # 28937 revdifference c a 224 0 1 e b 224 0 1 e # 28938 revdifference c a 224 0 1 e b 224 0 1 e # 28939 revdifference c a 224 0 1 e b 224 0 1 e # 28940 revdifference c a 224 0 1 e b 224 0 1 f # 28941 revdifference c a 224 0 1 e b 224 0 1 e # 28942 revdifference c a 224 0 1 e b 224 0 1 0 1 2 4 7 8 9 11 12 16 17 18 20 24 33 34 35 38 42 46 48 50 51 52 55 56 60 61 62 64 65 69 74 75 76 79 80 82 83 84 85 86 87 94 95 97 100 101 102 105 106 107 110 118 119 120 123 126 127 132 136 140 141 145 147 148 150 151 152 154 156 157 158 159 160 163 165 170 171 175 176 177 178 179 181 182 183 195 200 205 211 214 215 216 217 219 223 # 28943 revdifference c a 224 0 1 f b 224 0 1 f # 28944 revdifference c a 224 0 1 f b 224 0 1 e # 28945 revdifference c a 224 0 1 f b 224 0 1 f # 28946 revdifference c a 224 0 1 f b 224 0 1 f # 28947 revdifference c a 224 0 1 f b 224 0 1 f # 28948 revdifference c a 224 0 1 f b 224 0 1 0 2 4 6 7 11 12 13 17 19 21 22 23 24 26 28 30 31 32 33 34 35 36 37 38 40 43 45 47 48 49 50 52 53 55 56 58 59 61 64 66 67 69 72 73 76 77 78 79 81 82 86 89 91 92 93 95 100 101 102 103 105 108 110 112 113 118 119 122 124 125 129 130 135 140 143 145 151 153 156 157 158 163 164 165 166 170 171 174 175 177 179 182 183 188 189 190 196 198 200 201 204 205 206 208 210 212 213 214 216 218 219 223 # 28949 revdifference c a 224 0 1 0 1 3 6 8 11 16 20 22 23 24 26 27 28 30 31 33 35 40 41 43 47 48 49 51 54 55 56 57 58 59 61 63 64 65 66 67 69 72 75 76 78 79 84 88 93 94 95 96 97 98 100 104 105 107 112 113 114 115 120 127 131 133 137 138 139 147 148 150 151 152 154 156 163 165 167 168 172 173 174 176 177 178 179 181 186 188 189 190 193 195 196 200 201 202 204 206 207 209 211 212 213 218 223 b 224 0 1 0 1 3 6 8 11 16 20 22 23 24 26 27 28 30 31 33 35 40 41 43 47 48 49 51 54 55 56 57 58 59 61 63 64 65 66 67 69 72 75 76 78 79 84 88 93 94 95 96 97 98 100 104 105 107 112 113 114 115 120 127 131 133 137 138 139 147 148 150 151 152 154 156 163 165 167 168 172 173 174 176 177 178 179 181 186 188 189 190 193 195 196 200 201 202 204 206 207 209 211 212 213 218 223 # 28950 revdifference c a 224 0 1 0 1 3 6 8 11 16 20 22 23 24 26 27 28 30 31 33 35 40 41 43 47 48 49 51 54 55 56 57 58 59 61 63 64 65 66 67 69 72 75 76 78 79 84 88 93 94 95 96 97 98 100 104 105 107 112 113 114 115 120 127 131 133 137 138 139 147 148 150 151 152 154 156 163 165 167 168 172 173 174 176 177 178 179 181 186 188 189 190 193 195 196 200 201 202 204 206 207 209 211 212 213 218 223 b 224 0 1 e # 28951 revdifference c a 224 0 1 1 5 6 7 8 11 12 16 17 19 20 21 22 25 26 31 32 33 34 36 37 39 41 44 45 46 47 48 50 51 53 58 59 64 66 67 69 72 73 74 75 76 78 79 80 82 83 87 88 92 93 94 95 99 101 104 105 106 107 109 110 113 117 121 123 124 126 128 130 139 142 146 147 148 150 152 155 156 157 158 161 162 166 168 169 171 180 182 183 184 185 188 190 193 194 195 196 199 202 203 204 208 210 212 217 218 221 222 223 b 224 0 1 1 5 6 7 8 11 12 16 17 19 20 21 22 25 26 31 32 33 34 36 37 39 41 44 45 46 47 48 50 51 53 58 59 64 66 67 69 72 73 74 75 76 78 79 80 82 83 87 88 92 93 94 95 99 101 104 105 106 107 109 110 113 117 121 123 124 126 128 130 139 142 146 147 148 150 152 155 156 157 158 161 162 166 168 169 171 180 182 183 184 185 188 190 193 194 195 196 199 202 203 204 208 210 212 217 218 221 222 223 # 28952 revdifference c a 224 0 1 1 5 6 7 8 11 12 16 17 19 20 21 22 25 26 31 32 33 34 36 37 39 41 44 45 46 47 48 50 51 53 58 59 64 66 67 69 72 73 74 75 76 78 79 80 82 83 87 88 92 93 94 95 99 101 104 105 106 107 109 110 113 117 121 123 124 126 128 130 139 142 146 147 148 150 152 155 156 157 158 161 162 166 168 169 171 180 182 183 184 185 188 190 193 194 195 196 199 202 203 204 208 210 212 217 218 221 222 223 b 224 0 1 f # 28953 revdifference c a 224 0 1 0 3 4 5 11 16 17 18 19 21 23 24 27 30 31 32 34 35 36 43 44 47 49 50 51 52 53 54 55 58 60 64 67 70 71 72 74 75 76 78 81 84 86 87 88 89 93 94 95 98 99 100 101 102 103 104 105 106 107 108 109 110 121 122 124 125 127 128 130 131 132 135 138 140 141 144 145 146 149 150 151 152 157 160 162 163 164 166 167 168 169 171 173 176 177 178 180 181 182 183 188 189 190 191 192 193 194 195 197 198 199 200 201 202 204 205 206 208 209 210 211 213 214 215 216 217 219 220 221 222 223 b 224 0 1 0 3 4 5 11 16 17 18 19 21 23 24 27 30 31 32 34 35 36 43 44 47 49 50 51 52 53 54 55 58 60 64 67 70 71 72 74 75 76 78 81 84 86 87 88 89 93 94 95 98 99 100 101 102 103 104 105 106 107 108 109 110 121 122 124 125 127 128 130 131 132 135 138 140 141 144 145 146 149 150 151 152 157 160 162 163 164 166 167 168 169 171 173 176 177 178 180 181 182 183 188 189 190 191 192 193 194 195 197 198 199 200 201 202 204 205 206 208 209 210 211 213 214 215 216 217 219 220 221 222 223 # 28954 revdifference c a 224 0 1 0 3 4 5 11 16 17 18 19 21 23 24 27 30 31 32 34 35 36 43 44 47 49 50 51 52 53 54 55 58 60 64 67 70 71 72 74 75 76 78 81 84 86 87 88 89 93 94 95 98 99 100 101 102 103 104 105 106 107 108 109 110 121 122 124 125 127 128 130 131 132 135 138 140 141 144 145 146 149 150 151 152 157 160 162 163 164 166 167 168 169 171 173 176 177 178 180 181 182 183 188 189 190 191 192 193 194 195 197 198 199 200 201 202 204 205 206 208 209 210 211 213 214 215 216 217 219 220 221 222 223 b 224 0 1 0 1 3 4 6 7 9 10 11 12 13 15 18 19 20 22 23 25 26 28 29 30 31 32 34 35 36 37 38 39 41 42 46 47 48 49 50 51 53 54 55 56 57 58 59 60 61 63 66 68 74 75 76 77 78 81 83 85 88 90 95 96 97 99 103 104 105 108 110 112 114 118 119 120 121 125 127 128 129 130 133 134 135 136 139 140 142 143 144 145 147 149 150 152 154 155 158 159 161 164 167 168 169 179 184 187 188 190 192 194 195 201 202 203 205 206 207 210 211 216 219 220 223 # 28955 revdifference c a 224 0 1 e b 224 0 1 e # 28956 revdifference c a 224 0 1 e b 224 1 0 e # 28957 revdifference c a 224 0 1 e b 224 0 1 e # 28958 revdifference c a 224 0 1 e b 224 1 0 f # 28959 revdifference c a 224 0 1 e b 224 0 1 e # 28960 revdifference c a 224 0 1 e b 224 1 0 1 3 5 8 9 12 19 20 21 23 26 27 28 30 38 42 46 47 48 50 51 54 56 57 60 62 65 66 67 69 70 71 72 73 76 79 80 84 86 88 90 91 93 95 96 97 98 100 101 103 105 109 113 115 116 119 122 123 126 127 129 131 134 135 137 140 141 142 143 146 151 152 154 156 157 159 160 162 164 165 168 169 170 175 176 180 181 183 191 192 195 196 199 201 203 205 206 213 215 216 218 220 223 # 28961 revdifference c a 224 0 1 f b 224 0 1 f # 28962 revdifference c a 224 0 1 f b 224 1 0 e # 28963 revdifference c a 224 0 1 f b 224 0 1 f # 28964 revdifference c a 224 0 1 f b 224 1 0 f # 28965 revdifference c a 224 0 1 f b 224 0 1 f # 28966 revdifference c a 224 0 1 f b 224 1 0 2 4 10 11 13 14 16 18 21 22 25 29 31 36 39 40 42 45 46 54 55 59 60 61 65 69 73 75 76 78 79 80 84 89 92 93 94 99 101 102 103 104 108 112 113 114 115 117 119 120 121 125 126 127 130 132 133 135 137 139 141 144 147 149 150 151 153 155 156 158 161 162 165 167 168 170 171 175 178 179 181 182 183 184 186 187 189 190 191 193 195 196 197 198 204 205 210 213 215 216 217 218 220 221 # 28967 revdifference c a 224 0 1 1 4 5 6 7 12 13 18 19 21 22 24 26 27 30 31 34 35 37 38 39 40 42 43 47 48 49 50 52 55 56 58 61 62 63 64 65 66 68 69 70 71 73 74 75 77 78 80 82 83 84 86 87 89 91 94 98 99 101 102 104 109 110 116 121 123 124 125 129 131 132 133 138 139 143 144 145 147 149 150 151 152 155 157 158 159 160 165 166 167 169 170 171 174 178 179 181 183 185 186 188 189 192 193 194 197 198 199 200 201 203 204 210 211 214 218 222 b 224 0 1 1 4 5 6 7 12 13 18 19 21 22 24 26 27 30 31 34 35 37 38 39 40 42 43 47 48 49 50 52 55 56 58 61 62 63 64 65 66 68 69 70 71 73 74 75 77 78 80 82 83 84 86 87 89 91 94 98 99 101 102 104 109 110 116 121 123 124 125 129 131 132 133 138 139 143 144 145 147 149 150 151 152 155 157 158 159 160 165 166 167 169 170 171 174 178 179 181 183 185 186 188 189 192 193 194 197 198 199 200 201 203 204 210 211 214 218 222 # 28968 revdifference c a 224 0 1 1 4 5 6 7 12 13 18 19 21 22 24 26 27 30 31 34 35 37 38 39 40 42 43 47 48 49 50 52 55 56 58 61 62 63 64 65 66 68 69 70 71 73 74 75 77 78 80 82 83 84 86 87 89 91 94 98 99 101 102 104 109 110 116 121 123 124 125 129 131 132 133 138 139 143 144 145 147 149 150 151 152 155 157 158 159 160 165 166 167 169 170 171 174 178 179 181 183 185 186 188 189 192 193 194 197 198 199 200 201 203 204 210 211 214 218 222 b 224 1 0 e # 28969 revdifference c a 224 0 1 0 1 4 9 12 13 16 20 21 22 25 26 27 28 30 31 35 36 37 41 44 45 46 47 50 53 54 55 57 64 65 67 68 69 72 73 74 75 76 77 80 82 85 86 87 91 92 93 95 96 97 98 100 102 103 104 107 109 110 113 115 119 120 121 122 123 125 126 128 129 130 136 137 138 140 141 144 145 146 153 155 156 158 159 161 163 166 169 171 172 173 175 176 178 180 182 183 186 188 189 190 195 196 198 199 202 206 209 210 213 217 218 220 221 222 b 224 0 1 0 1 4 9 12 13 16 20 21 22 25 26 27 28 30 31 35 36 37 41 44 45 46 47 50 53 54 55 57 64 65 67 68 69 72 73 74 75 76 77 80 82 85 86 87 91 92 93 95 96 97 98 100 102 103 104 107 109 110 113 115 119 120 121 122 123 125 126 128 129 130 136 137 138 140 141 144 145 146 153 155 156 158 159 161 163 166 169 171 172 173 175 176 178 180 182 183 186 188 189 190 195 196 198 199 202 206 209 210 213 217 218 220 221 222 # 28970 revdifference c a 224 0 1 0 1 4 9 12 13 16 20 21 22 25 26 27 28 30 31 35 36 37 41 44 45 46 47 50 53 54 55 57 64 65 67 68 69 72 73 74 75 76 77 80 82 85 86 87 91 92 93 95 96 97 98 100 102 103 104 107 109 110 113 115 119 120 121 122 123 125 126 128 129 130 136 137 138 140 141 144 145 146 153 155 156 158 159 161 163 166 169 171 172 173 175 176 178 180 182 183 186 188 189 190 195 196 198 199 202 206 209 210 213 217 218 220 221 222 b 224 1 0 f # 28971 revdifference c a 224 0 1 0 2 3 5 6 7 9 10 11 12 13 16 18 21 22 23 24 27 30 32 33 34 36 37 38 41 44 45 46 47 49 51 52 53 54 55 59 60 62 63 65 66 68 69 70 72 74 75 77 78 79 82 85 86 87 92 98 101 107 108 110 113 114 115 116 117 121 122 126 127 129 131 132 133 134 136 139 143 146 148 150 153 155 156 158 160 161 163 164 166 167 170 171 174 175 177 178 180 181 182 186 189 190 192 199 201 202 203 205 206 207 208 209 211 213 214 215 217 219 220 b 224 0 1 0 2 3 5 6 7 9 10 11 12 13 16 18 21 22 23 24 27 30 32 33 34 36 37 38 41 44 45 46 47 49 51 52 53 54 55 59 60 62 63 65 66 68 69 70 72 74 75 77 78 79 82 85 86 87 92 98 101 107 108 110 113 114 115 116 117 121 122 126 127 129 131 132 133 134 136 139 143 146 148 150 153 155 156 158 160 161 163 164 166 167 170 171 174 175 177 178 180 181 182 186 189 190 192 199 201 202 203 205 206 207 208 209 211 213 214 215 217 219 220 # 28972 revdifference c a 224 0 1 0 2 3 5 6 7 9 10 11 12 13 16 18 21 22 23 24 27 30 32 33 34 36 37 38 41 44 45 46 47 49 51 52 53 54 55 59 60 62 63 65 66 68 69 70 72 74 75 77 78 79 82 85 86 87 92 98 101 107 108 110 113 114 115 116 117 121 122 126 127 129 131 132 133 134 136 139 143 146 148 150 153 155 156 158 160 161 163 164 166 167 170 171 174 175 177 178 180 181 182 186 189 190 192 199 201 202 203 205 206 207 208 209 211 213 214 215 217 219 220 b 224 1 0 0 2 4 13 15 16 18 21 23 24 25 29 30 31 33 35 40 42 43 46 48 49 53 54 58 59 61 62 64 65 67 69 75 76 78 80 82 85 86 87 94 95 98 99 102 104 107 112 113 114 115 116 117 118 119 127 128 132 134 135 136 137 138 141 142 143 144 145 146 147 149 150 151 152 156 157 159 161 162 165 167 168 169 171 172 173 174 175 176 177 178 180 182 183 184 188 196 197 199 200 201 202 203 204 205 206 208 210 212 213 215 216 219 220 # 28973 revdifference c a 224 0 1 e b 224 0 1 e # 28974 revdifference c a 224 0 1 e b 224 1 1 e # 28975 revdifference c a 224 0 1 e b 224 0 1 e # 28976 revdifference c a 224 0 1 e b 224 1 1 f # 28977 revdifference c a 224 0 1 e b 224 0 1 e # 28978 revdifference c a 224 0 1 e b 224 1 1 0 1 2 3 8 10 11 12 13 15 17 20 22 23 24 26 27 28 29 32 33 37 40 42 43 46 49 50 51 53 54 56 59 61 64 67 69 75 77 79 80 81 82 84 86 87 88 93 94 95 98 102 103 105 107 108 109 110 111 112 116 119 120 121 127 131 133 135 136 137 138 139 140 141 142 146 148 151 152 153 156 160 165 168 172 174 176 177 179 181 182 186 188 189 190 194 195 196 197 199 201 209 212 214 216 218 221 222 223 # 28979 revdifference c a 224 0 1 f b 224 0 1 f # 28980 revdifference c a 224 0 1 f b 224 1 1 e # 28981 revdifference c a 224 0 1 f b 224 0 1 f # 28982 revdifference c a 224 0 1 f b 224 1 1 f # 28983 revdifference c a 224 0 1 f b 224 0 1 f # 28984 revdifference c a 224 0 1 f b 224 1 1 0 1 2 3 4 6 7 9 11 13 16 17 18 21 22 26 27 29 30 33 37 39 40 42 46 47 49 51 54 55 56 57 59 63 64 70 72 73 74 76 81 82 83 84 85 87 88 89 90 93 99 100 103 108 111 114 118 121 124 125 126 132 133 135 136 139 140 141 142 147 148 150 151 155 162 165 170 173 174 179 180 182 183 184 186 187 188 192 195 197 199 204 205 206 211 214 216 217 221 222 223 # 28985 revdifference c a 224 0 1 0 2 4 6 10 13 14 16 17 22 23 25 27 28 30 31 33 34 36 37 38 42 45 46 48 50 51 52 54 60 61 62 64 65 66 67 68 72 74 76 77 79 82 84 85 86 89 91 92 95 97 101 102 104 106 107 110 114 121 125 127 128 129 134 136 139 140 144 147 148 149 152 153 154 156 157 160 161 162 166 167 168 170 171 174 176 181 182 184 186 190 193 195 198 201 202 203 205 207 211 215 216 220 b 224 0 1 0 2 4 6 10 13 14 16 17 22 23 25 27 28 30 31 33 34 36 37 38 42 45 46 48 50 51 52 54 60 61 62 64 65 66 67 68 72 74 76 77 79 82 84 85 86 89 91 92 95 97 101 102 104 106 107 110 114 121 125 127 128 129 134 136 139 140 144 147 148 149 152 153 154 156 157 160 161 162 166 167 168 170 171 174 176 181 182 184 186 190 193 195 198 201 202 203 205 207 211 215 216 220 # 28986 revdifference c a 224 0 1 0 2 4 6 10 13 14 16 17 22 23 25 27 28 30 31 33 34 36 37 38 42 45 46 48 50 51 52 54 60 61 62 64 65 66 67 68 72 74 76 77 79 82 84 85 86 89 91 92 95 97 101 102 104 106 107 110 114 121 125 127 128 129 134 136 139 140 144 147 148 149 152 153 154 156 157 160 161 162 166 167 168 170 171 174 176 181 182 184 186 190 193 195 198 201 202 203 205 207 211 215 216 220 b 224 1 1 e # 28987 revdifference c a 224 0 1 1 5 6 7 8 9 10 11 12 13 14 19 20 21 22 26 28 30 31 33 36 39 40 41 42 43 44 45 46 51 52 53 59 62 63 68 70 71 73 78 79 80 82 83 86 91 92 94 95 96 97 99 103 104 105 112 113 114 115 117 119 121 122 131 132 133 134 135 136 140 143 146 147 151 155 156 160 163 167 168 169 171 173 175 179 181 182 183 185 187 189 196 197 201 203 205 207 208 209 212 217 219 223 b 224 0 1 1 5 6 7 8 9 10 11 12 13 14 19 20 21 22 26 28 30 31 33 36 39 40 41 42 43 44 45 46 51 52 53 59 62 63 68 70 71 73 78 79 80 82 83 86 91 92 94 95 96 97 99 103 104 105 112 113 114 115 117 119 121 122 131 132 133 134 135 136 140 143 146 147 151 155 156 160 163 167 168 169 171 173 175 179 181 182 183 185 187 189 196 197 201 203 205 207 208 209 212 217 219 223 # 28988 revdifference c a 224 0 1 1 5 6 7 8 9 10 11 12 13 14 19 20 21 22 26 28 30 31 33 36 39 40 41 42 43 44 45 46 51 52 53 59 62 63 68 70 71 73 78 79 80 82 83 86 91 92 94 95 96 97 99 103 104 105 112 113 114 115 117 119 121 122 131 132 133 134 135 136 140 143 146 147 151 155 156 160 163 167 168 169 171 173 175 179 181 182 183 185 187 189 196 197 201 203 205 207 208 209 212 217 219 223 b 224 1 1 f # 28989 revdifference c a 224 0 1 0 3 5 7 11 13 14 16 18 19 21 23 24 28 29 30 31 34 36 37 41 43 44 46 47 49 50 51 52 53 54 58 60 61 64 66 67 69 71 72 73 79 81 82 83 84 88 90 91 92 94 95 96 97 98 99 100 102 106 107 108 111 114 116 118 120 121 123 126 127 128 129 130 131 133 135 136 139 141 142 143 145 146 147 149 151 153 154 155 156 158 159 161 162 165 169 171 172 173 175 176 178 179 182 183 185 192 193 194 196 198 200 202 203 206 207 208 209 210 213 214 216 218 219 220 221 223 b 224 0 1 0 3 5 7 11 13 14 16 18 19 21 23 24 28 29 30 31 34 36 37 41 43 44 46 47 49 50 51 52 53 54 58 60 61 64 66 67 69 71 72 73 79 81 82 83 84 88 90 91 92 94 95 96 97 98 99 100 102 106 107 108 111 114 116 118 120 121 123 126 127 128 129 130 131 133 135 136 139 141 142 143 145 146 147 149 151 153 154 155 156 158 159 161 162 165 169 171 172 173 175 176 178 179 182 183 185 192 193 194 196 198 200 202 203 206 207 208 209 210 213 214 216 218 219 220 221 223 # 28990 revdifference c a 224 0 1 0 3 5 7 11 13 14 16 18 19 21 23 24 28 29 30 31 34 36 37 41 43 44 46 47 49 50 51 52 53 54 58 60 61 64 66 67 69 71 72 73 79 81 82 83 84 88 90 91 92 94 95 96 97 98 99 100 102 106 107 108 111 114 116 118 120 121 123 126 127 128 129 130 131 133 135 136 139 141 142 143 145 146 147 149 151 153 154 155 156 158 159 161 162 165 169 171 172 173 175 176 178 179 182 183 185 192 193 194 196 198 200 202 203 206 207 208 209 210 213 214 216 218 219 220 221 223 b 224 1 1 0 3 4 7 11 12 14 15 16 17 18 20 21 22 29 30 37 38 39 40 42 43 44 47 50 51 53 55 57 59 60 65 66 67 69 70 73 75 77 78 81 83 85 86 87 88 89 91 93 95 98 99 100 101 105 107 109 111 112 113 116 118 119 122 127 129 130 132 134 136 137 138 140 143 144 145 146 147 148 149 154 155 157 159 160 163 166 169 170 174 176 177 178 179 180 184 185 188 189 191 192 193 194 196 197 198 200 201 203 212 214 218 220 221 223 # 28991 revdifference c a 224 1 0 e b 224 1 0 e # 28992 revdifference c a 224 1 0 e b 224 0 0 e # 28993 revdifference c a 224 1 0 e b 224 1 0 e # 28994 revdifference c a 224 1 0 e b 224 0 0 f # 28995 revdifference c a 224 1 0 e b 224 1 0 e # 28996 revdifference c a 224 1 0 e b 224 0 0 0 3 4 6 7 10 11 12 13 14 18 19 20 21 26 31 33 34 37 39 41 44 46 48 49 52 53 54 55 56 60 65 66 68 69 71 72 73 75 77 79 80 88 89 93 94 96 98 104 105 108 109 113 114 116 118 119 124 125 126 127 129 131 133 137 140 141 142 143 145 154 157 159 160 162 167 169 170 172 173 177 178 179 180 181 186 187 190 192 193 195 197 198 199 200 201 203 206 207 209 210 212 213 214 217 220 222 223 # 28997 revdifference c a 224 1 0 f b 224 1 0 f # 28998 revdifference c a 224 1 0 f b 224 0 0 e # 28999 revdifference c a 224 1 0 f b 224 1 0 f # 29000 revdifference c a 224 1 0 f b 224 0 0 f # 29001 revdifference c a 224 1 0 f b 224 1 0 f # 29002 revdifference c a 224 1 0 f b 224 0 0 2 3 6 9 10 11 13 14 15 16 18 21 22 23 25 29 33 37 38 39 40 41 44 48 50 52 53 54 56 58 59 65 66 67 68 69 71 73 78 79 80 81 83 91 93 95 100 101 102 104 106 108 115 116 118 120 122 124 126 130 133 134 136 137 138 139 141 148 151 154 156 157 158 161 162 163 165 171 175 176 178 179 180 182 184 185 186 187 188 189 190 193 195 197 199 200 201 202 205 206 209 213 216 220 222 # 29003 revdifference c a 224 1 0 0 1 4 5 7 8 10 11 13 15 16 18 22 24 26 27 33 34 36 38 40 41 43 44 45 46 47 49 51 54 55 56 57 58 61 62 63 64 65 66 69 70 71 72 74 75 77 78 83 84 86 87 88 90 93 94 97 98 99 100 101 102 103 105 106 109 110 111 114 120 122 124 125 126 128 131 133 134 136 137 138 140 141 145 146 147 149 153 154 156 157 158 161 164 165 166 167 168 169 170 172 174 178 179 183 186 187 188 189 192 193 194 195 196 197 200 202 203 204 205 206 207 209 210 211 213 221 223 b 224 1 0 0 1 4 5 7 8 10 11 13 15 16 18 22 24 26 27 33 34 36 38 40 41 43 44 45 46 47 49 51 54 55 56 57 58 61 62 63 64 65 66 69 70 71 72 74 75 77 78 83 84 86 87 88 90 93 94 97 98 99 100 101 102 103 105 106 109 110 111 114 120 122 124 125 126 128 131 133 134 136 137 138 140 141 145 146 147 149 153 154 156 157 158 161 164 165 166 167 168 169 170 172 174 178 179 183 186 187 188 189 192 193 194 195 196 197 200 202 203 204 205 206 207 209 210 211 213 221 223 # 29004 revdifference c a 224 1 0 0 1 4 5 7 8 10 11 13 15 16 18 22 24 26 27 33 34 36 38 40 41 43 44 45 46 47 49 51 54 55 56 57 58 61 62 63 64 65 66 69 70 71 72 74 75 77 78 83 84 86 87 88 90 93 94 97 98 99 100 101 102 103 105 106 109 110 111 114 120 122 124 125 126 128 131 133 134 136 137 138 140 141 145 146 147 149 153 154 156 157 158 161 164 165 166 167 168 169 170 172 174 178 179 183 186 187 188 189 192 193 194 195 196 197 200 202 203 204 205 206 207 209 210 211 213 221 223 b 224 0 0 e # 29005 revdifference c a 224 1 0 0 2 4 6 7 8 9 12 15 18 19 24 25 26 27 28 30 33 34 36 37 39 40 41 43 45 46 47 48 52 53 54 60 62 65 66 68 69 70 71 72 75 76 78 79 80 84 85 86 90 92 99 102 103 104 106 107 109 110 112 113 114 115 116 117 122 124 127 129 130 131 133 134 136 137 138 141 142 144 147 149 153 154 155 158 159 161 163 164 166 167 168 169 172 173 174 179 183 185 186 187 189 192 193 202 203 205 207 209 210 211 213 215 216 220 221 222 223 b 224 1 0 0 2 4 6 7 8 9 12 15 18 19 24 25 26 27 28 30 33 34 36 37 39 40 41 43 45 46 47 48 52 53 54 60 62 65 66 68 69 70 71 72 75 76 78 79 80 84 85 86 90 92 99 102 103 104 106 107 109 110 112 113 114 115 116 117 122 124 127 129 130 131 133 134 136 137 138 141 142 144 147 149 153 154 155 158 159 161 163 164 166 167 168 169 172 173 174 179 183 185 186 187 189 192 193 202 203 205 207 209 210 211 213 215 216 220 221 222 223 # 29006 revdifference c a 224 1 0 0 2 4 6 7 8 9 12 15 18 19 24 25 26 27 28 30 33 34 36 37 39 40 41 43 45 46 47 48 52 53 54 60 62 65 66 68 69 70 71 72 75 76 78 79 80 84 85 86 90 92 99 102 103 104 106 107 109 110 112 113 114 115 116 117 122 124 127 129 130 131 133 134 136 137 138 141 142 144 147 149 153 154 155 158 159 161 163 164 166 167 168 169 172 173 174 179 183 185 186 187 189 192 193 202 203 205 207 209 210 211 213 215 216 220 221 222 223 b 224 0 0 f # 29007 revdifference c a 224 1 0 0 1 8 12 13 16 18 19 22 24 27 33 37 38 42 51 52 53 54 55 60 61 62 63 64 67 72 73 74 78 79 80 81 83 84 88 89 90 91 92 94 95 96 98 99 100 101 103 104 109 110 112 114 115 116 119 121 122 128 129 132 133 135 136 142 144 145 147 149 150 151 152 156 159 161 168 169 170 172 173 174 175 179 183 184 185 187 189 191 193 195 197 202 205 207 209 212 213 215 216 217 219 221 222 223 b 224 1 0 0 1 8 12 13 16 18 19 22 24 27 33 37 38 42 51 52 53 54 55 60 61 62 63 64 67 72 73 74 78 79 80 81 83 84 88 89 90 91 92 94 95 96 98 99 100 101 103 104 109 110 112 114 115 116 119 121 122 128 129 132 133 135 136 142 144 145 147 149 150 151 152 156 159 161 168 169 170 172 173 174 175 179 183 184 185 187 189 191 193 195 197 202 205 207 209 212 213 215 216 217 219 221 222 223 # 29008 revdifference c a 224 1 0 0 1 8 12 13 16 18 19 22 24 27 33 37 38 42 51 52 53 54 55 60 61 62 63 64 67 72 73 74 78 79 80 81 83 84 88 89 90 91 92 94 95 96 98 99 100 101 103 104 109 110 112 114 115 116 119 121 122 128 129 132 133 135 136 142 144 145 147 149 150 151 152 156 159 161 168 169 170 172 173 174 175 179 183 184 185 187 189 191 193 195 197 202 205 207 209 212 213 215 216 217 219 221 222 223 b 224 0 0 0 1 2 3 4 8 9 10 12 13 14 15 16 19 21 24 25 28 29 31 32 34 35 36 37 38 39 40 41 42 43 44 45 46 51 53 55 56 59 64 72 74 75 77 79 80 82 85 87 90 91 92 95 97 99 100 102 103 104 105 106 107 108 109 110 111 114 115 118 119 120 122 123 124 129 130 133 135 136 137 138 139 140 141 147 148 149 150 153 157 162 163 165 166 168 169 171 173 175 177 179 180 184 185 189 190 191 194 195 201 203 205 207 208 209 210 214 216 223 # 29009 revdifference c a 224 1 0 e b 224 1 0 e # 29010 revdifference c a 224 1 0 e b 224 0 1 e # 29011 revdifference c a 224 1 0 e b 224 1 0 e # 29012 revdifference c a 224 1 0 e b 224 0 1 f # 29013 revdifference c a 224 1 0 e b 224 1 0 e # 29014 revdifference c a 224 1 0 e b 224 0 1 0 2 4 6 7 8 10 15 17 22 26 27 41 42 43 46 50 53 54 55 56 58 60 62 67 69 71 72 74 75 76 79 80 88 89 90 94 95 96 98 100 103 104 105 106 112 113 115 117 119 120 121 123 126 132 133 136 137 138 143 145 146 147 148 150 155 158 159 160 165 166 167 168 169 171 173 174 175 176 177 178 182 184 188 192 193 194 195 197 198 200 204 207 212 214 216 218 221 222 # 29015 revdifference c a 224 1 0 f b 224 1 0 f # 29016 revdifference c a 224 1 0 f b 224 0 1 e # 29017 revdifference c a 224 1 0 f b 224 1 0 f # 29018 revdifference c a 224 1 0 f b 224 0 1 f # 29019 revdifference c a 224 1 0 f b 224 1 0 f # 29020 revdifference c a 224 1 0 f b 224 0 1 0 1 4 7 9 12 13 18 19 20 21 24 26 29 30 31 32 33 35 37 38 39 46 47 48 50 51 58 59 62 65 67 68 72 73 74 78 80 81 82 84 91 92 93 94 96 98 99 102 105 110 113 116 117 118 121 123 124 127 130 131 132 133 135 137 139 142 144 146 147 151 153 154 156 157 163 164 165 166 171 172 175 176 177 178 182 183 184 185 187 188 189 191 193 194 196 197 198 201 202 206 207 209 211 212 214 215 216 218 219 222 # 29021 revdifference c a 224 1 0 1 2 4 11 12 14 15 17 18 24 26 27 28 29 36 37 41 42 45 47 48 49 50 51 60 61 64 65 66 67 68 70 73 74 75 76 77 80 84 85 86 88 89 91 92 93 95 96 99 103 109 110 114 116 119 121 122 124 126 127 128 130 132 134 136 138 139 143 144 145 147 149 150 151 152 153 155 158 159 160 161 163 167 168 169 170 178 179 181 182 183 185 186 187 190 191 193 194 197 199 200 204 206 207 208 209 210 215 217 218 219 222 223 b 224 1 0 1 2 4 11 12 14 15 17 18 24 26 27 28 29 36 37 41 42 45 47 48 49 50 51 60 61 64 65 66 67 68 70 73 74 75 76 77 80 84 85 86 88 89 91 92 93 95 96 99 103 109 110 114 116 119 121 122 124 126 127 128 130 132 134 136 138 139 143 144 145 147 149 150 151 152 153 155 158 159 160 161 163 167 168 169 170 178 179 181 182 183 185 186 187 190 191 193 194 197 199 200 204 206 207 208 209 210 215 217 218 219 222 223 # 29022 revdifference c a 224 1 0 1 2 4 11 12 14 15 17 18 24 26 27 28 29 36 37 41 42 45 47 48 49 50 51 60 61 64 65 66 67 68 70 73 74 75 76 77 80 84 85 86 88 89 91 92 93 95 96 99 103 109 110 114 116 119 121 122 124 126 127 128 130 132 134 136 138 139 143 144 145 147 149 150 151 152 153 155 158 159 160 161 163 167 168 169 170 178 179 181 182 183 185 186 187 190 191 193 194 197 199 200 204 206 207 208 209 210 215 217 218 219 222 223 b 224 0 1 e # 29023 revdifference c a 224 1 0 3 5 6 9 10 11 13 14 17 18 19 21 22 23 24 25 31 32 38 41 43 47 49 50 52 53 55 56 57 59 60 61 62 63 66 69 70 71 75 76 77 78 80 81 82 83 84 85 86 87 88 90 91 92 96 98 101 102 103 106 109 111 112 114 115 119 120 122 123 124 126 128 129 130 131 133 134 135 138 143 144 146 147 148 150 153 156 158 159 160 162 168 170 172 176 177 182 183 186 189 190 193 194 198 201 205 206 208 210 211 212 213 214 215 216 217 222 223 b 224 1 0 3 5 6 9 10 11 13 14 17 18 19 21 22 23 24 25 31 32 38 41 43 47 49 50 52 53 55 56 57 59 60 61 62 63 66 69 70 71 75 76 77 78 80 81 82 83 84 85 86 87 88 90 91 92 96 98 101 102 103 106 109 111 112 114 115 119 120 122 123 124 126 128 129 130 131 133 134 135 138 143 144 146 147 148 150 153 156 158 159 160 162 168 170 172 176 177 182 183 186 189 190 193 194 198 201 205 206 208 210 211 212 213 214 215 216 217 222 223 # 29024 revdifference c a 224 1 0 3 5 6 9 10 11 13 14 17 18 19 21 22 23 24 25 31 32 38 41 43 47 49 50 52 53 55 56 57 59 60 61 62 63 66 69 70 71 75 76 77 78 80 81 82 83 84 85 86 87 88 90 91 92 96 98 101 102 103 106 109 111 112 114 115 119 120 122 123 124 126 128 129 130 131 133 134 135 138 143 144 146 147 148 150 153 156 158 159 160 162 168 170 172 176 177 182 183 186 189 190 193 194 198 201 205 206 208 210 211 212 213 214 215 216 217 222 223 b 224 0 1 f # 29025 revdifference c a 224 1 0 0 1 7 9 10 11 12 13 14 16 17 19 22 24 25 26 29 32 36 37 38 39 40 41 42 43 44 45 47 49 51 52 55 61 62 66 67 69 70 72 73 74 79 80 81 82 83 84 86 88 90 94 96 97 99 106 107 109 110 112 113 115 118 120 121 122 125 126 127 130 131 132 135 137 138 139 140 143 145 150 154 159 160 162 164 165 168 171 172 173 174 175 176 180 182 183 184 187 188 189 190 191 197 200 201 203 206 216 217 219 220 221 b 224 1 0 0 1 7 9 10 11 12 13 14 16 17 19 22 24 25 26 29 32 36 37 38 39 40 41 42 43 44 45 47 49 51 52 55 61 62 66 67 69 70 72 73 74 79 80 81 82 83 84 86 88 90 94 96 97 99 106 107 109 110 112 113 115 118 120 121 122 125 126 127 130 131 132 135 137 138 139 140 143 145 150 154 159 160 162 164 165 168 171 172 173 174 175 176 180 182 183 184 187 188 189 190 191 197 200 201 203 206 216 217 219 220 221 # 29026 revdifference c a 224 1 0 0 1 7 9 10 11 12 13 14 16 17 19 22 24 25 26 29 32 36 37 38 39 40 41 42 43 44 45 47 49 51 52 55 61 62 66 67 69 70 72 73 74 79 80 81 82 83 84 86 88 90 94 96 97 99 106 107 109 110 112 113 115 118 120 121 122 125 126 127 130 131 132 135 137 138 139 140 143 145 150 154 159 160 162 164 165 168 171 172 173 174 175 176 180 182 183 184 187 188 189 190 191 197 200 201 203 206 216 217 219 220 221 b 224 0 1 1 3 5 8 9 13 15 17 18 19 22 23 24 26 27 30 31 32 34 38 45 48 57 59 64 66 69 71 72 73 76 78 79 80 81 86 87 89 91 93 94 95 97 99 101 104 105 106 107 110 111 113 115 117 119 120 121 122 124 125 130 131 135 138 140 145 146 147 148 150 151 153 154 158 159 160 161 162 163 166 168 169 170 174 175 177 178 179 181 182 183 185 187 188 189 190 191 192 193 194 195 197 202 203 204 212 213 216 219 # 29027 revdifference c a 224 1 0 e b 224 1 0 e # 29028 revdifference c a 224 1 0 e b 224 1 0 e # 29029 revdifference c a 224 1 0 e b 224 1 0 e # 29030 revdifference c a 224 1 0 e b 224 1 0 f # 29031 revdifference c a 224 1 0 e b 224 1 0 e # 29032 revdifference c a 224 1 0 e b 224 1 0 3 4 5 9 13 15 16 17 19 20 24 25 29 30 31 32 33 34 35 36 39 41 43 45 49 53 54 56 57 58 60 63 66 68 71 72 74 78 79 80 82 85 88 90 92 96 97 99 101 102 106 108 109 111 114 115 116 119 120 124 126 127 131 132 134 136 137 138 141 143 148 149 150 152 154 155 156 157 160 161 162 163 165 167 168 169 172 173 174 176 179 184 186 188 190 191 193 194 195 196 198 202 204 205 207 209 210 213 214 217 218 223 # 29033 revdifference c a 224 1 0 f b 224 1 0 f # 29034 revdifference c a 224 1 0 f b 224 1 0 e # 29035 revdifference c a 224 1 0 f b 224 1 0 f # 29036 revdifference c a 224 1 0 f b 224 1 0 f # 29037 revdifference c a 224 1 0 f b 224 1 0 f # 29038 revdifference c a 224 1 0 f b 224 1 0 3 7 10 12 18 19 25 26 29 31 33 34 35 36 42 44 46 48 51 52 53 56 58 61 62 64 65 67 68 69 74 76 77 78 84 85 87 90 93 94 95 96 98 99 100 101 107 108 113 116 117 122 125 127 128 130 131 133 137 140 141 144 145 146 147 148 153 154 155 156 158 159 162 163 165 167 168 169 170 171 172 175 178 181 182 183 184 186 187 188 192 194 199 200 202 203 204 205 210 211 214 216 218 219 220 222 223 # 29039 revdifference c a 224 1 0 0 1 3 5 6 8 9 10 11 12 14 15 16 17 18 19 24 26 27 28 29 30 32 42 43 44 45 46 47 48 49 50 51 53 59 64 65 67 69 71 74 77 79 81 82 83 84 86 91 93 94 96 102 103 104 105 107 109 110 111 112 113 114 115 117 118 119 120 124 126 127 128 129 130 133 136 137 140 145 148 151 153 157 160 162 166 167 169 171 177 178 180 182 184 186 194 195 198 199 201 202 203 207 208 211 218 219 220 222 b 224 1 0 0 1 3 5 6 8 9 10 11 12 14 15 16 17 18 19 24 26 27 28 29 30 32 42 43 44 45 46 47 48 49 50 51 53 59 64 65 67 69 71 74 77 79 81 82 83 84 86 91 93 94 96 102 103 104 105 107 109 110 111 112 113 114 115 117 118 119 120 124 126 127 128 129 130 133 136 137 140 145 148 151 153 157 160 162 166 167 169 171 177 178 180 182 184 186 194 195 198 199 201 202 203 207 208 211 218 219 220 222 # 29040 revdifference c a 224 1 0 0 1 3 5 6 8 9 10 11 12 14 15 16 17 18 19 24 26 27 28 29 30 32 42 43 44 45 46 47 48 49 50 51 53 59 64 65 67 69 71 74 77 79 81 82 83 84 86 91 93 94 96 102 103 104 105 107 109 110 111 112 113 114 115 117 118 119 120 124 126 127 128 129 130 133 136 137 140 145 148 151 153 157 160 162 166 167 169 171 177 178 180 182 184 186 194 195 198 199 201 202 203 207 208 211 218 219 220 222 b 224 1 0 e # 29041 revdifference c a 224 1 0 1 2 3 5 6 7 8 12 13 15 16 18 20 22 24 25 26 28 29 30 32 33 35 38 40 44 45 47 49 51 55 62 63 64 66 69 70 72 74 75 76 77 78 80 84 88 89 91 92 94 95 97 99 100 103 105 106 108 109 110 111 113 121 127 129 130 131 132 133 134 136 138 139 141 142 144 146 148 151 153 156 161 164 165 166 167 169 170 171 173 177 179 181 182 184 186 187 188 190 191 197 199 200 205 208 209 211 212 215 216 220 223 b 224 1 0 1 2 3 5 6 7 8 12 13 15 16 18 20 22 24 25 26 28 29 30 32 33 35 38 40 44 45 47 49 51 55 62 63 64 66 69 70 72 74 75 76 77 78 80 84 88 89 91 92 94 95 97 99 100 103 105 106 108 109 110 111 113 121 127 129 130 131 132 133 134 136 138 139 141 142 144 146 148 151 153 156 161 164 165 166 167 169 170 171 173 177 179 181 182 184 186 187 188 190 191 197 199 200 205 208 209 211 212 215 216 220 223 # 29042 revdifference c a 224 1 0 1 2 3 5 6 7 8 12 13 15 16 18 20 22 24 25 26 28 29 30 32 33 35 38 40 44 45 47 49 51 55 62 63 64 66 69 70 72 74 75 76 77 78 80 84 88 89 91 92 94 95 97 99 100 103 105 106 108 109 110 111 113 121 127 129 130 131 132 133 134 136 138 139 141 142 144 146 148 151 153 156 161 164 165 166 167 169 170 171 173 177 179 181 182 184 186 187 188 190 191 197 199 200 205 208 209 211 212 215 216 220 223 b 224 1 0 f # 29043 revdifference c a 224 1 0 0 1 3 4 6 8 10 11 12 15 17 18 22 24 26 28 31 32 33 34 35 39 40 41 42 43 50 51 53 57 58 62 64 65 66 71 74 76 78 81 83 87 89 90 91 93 94 96 97 99 101 102 104 105 106 107 108 109 110 112 116 117 118 120 121 122 123 124 125 127 128 129 130 133 134 137 140 142 146 149 151 152 154 155 160 162 164 166 170 171 173 175 179 180 181 182 183 185 187 188 189 191 193 198 199 200 201 202 204 210 213 217 220 223 b 224 1 0 0 1 3 4 6 8 10 11 12 15 17 18 22 24 26 28 31 32 33 34 35 39 40 41 42 43 50 51 53 57 58 62 64 65 66 71 74 76 78 81 83 87 89 90 91 93 94 96 97 99 101 102 104 105 106 107 108 109 110 112 116 117 118 120 121 122 123 124 125 127 128 129 130 133 134 137 140 142 146 149 151 152 154 155 160 162 164 166 170 171 173 175 179 180 181 182 183 185 187 188 189 191 193 198 199 200 201 202 204 210 213 217 220 223 # 29044 revdifference c a 224 1 0 0 1 3 4 6 8 10 11 12 15 17 18 22 24 26 28 31 32 33 34 35 39 40 41 42 43 50 51 53 57 58 62 64 65 66 71 74 76 78 81 83 87 89 90 91 93 94 96 97 99 101 102 104 105 106 107 108 109 110 112 116 117 118 120 121 122 123 124 125 127 128 129 130 133 134 137 140 142 146 149 151 152 154 155 160 162 164 166 170 171 173 175 179 180 181 182 183 185 187 188 189 191 193 198 199 200 201 202 204 210 213 217 220 223 b 224 1 0 1 3 5 6 8 12 13 14 17 18 21 22 23 24 28 29 32 33 36 37 38 42 44 45 50 51 53 54 55 56 59 61 62 64 66 69 70 71 72 73 74 75 76 80 81 83 84 86 87 88 94 96 97 98 99 101 102 104 105 109 110 111 112 113 114 117 119 121 123 125 127 128 129 130 132 133 134 138 139 140 141 142 143 144 145 147 148 150 159 165 166 167 169 174 176 179 180 182 183 187 188 189 190 193 195 196 200 201 206 208 209 210 213 215 217 219 220 # 29045 revdifference c a 224 1 0 e b 224 1 0 e # 29046 revdifference c a 224 1 0 e b 224 1 1 e # 29047 revdifference c a 224 1 0 e b 224 1 0 e # 29048 revdifference c a 224 1 0 e b 224 1 1 f # 29049 revdifference c a 224 1 0 e b 224 1 0 e # 29050 revdifference c a 224 1 0 e b 224 1 1 1 4 5 7 8 9 11 18 25 28 29 30 33 36 37 40 41 45 46 48 50 52 54 55 56 59 60 61 64 65 66 67 68 71 73 75 77 82 88 91 93 100 102 106 107 111 113 114 115 120 121 122 124 126 129 135 136 139 140 141 142 144 145 148 149 151 152 154 156 157 158 160 164 165 166 175 176 177 179 181 182 185 186 187 192 193 196 198 200 204 205 207 208 210 219 220 221 222 # 29051 revdifference c a 224 1 0 f b 224 1 0 f # 29052 revdifference c a 224 1 0 f b 224 1 1 e # 29053 revdifference c a 224 1 0 f b 224 1 0 f # 29054 revdifference c a 224 1 0 f b 224 1 1 f # 29055 revdifference c a 224 1 0 f b 224 1 0 f # 29056 revdifference c a 224 1 0 f b 224 1 1 2 4 5 7 9 12 14 15 16 17 18 22 24 28 30 32 33 34 35 36 38 41 42 45 46 49 50 51 56 58 59 60 61 64 65 67 69 72 73 74 76 77 78 80 81 82 87 88 90 92 93 94 95 96 101 102 104 106 109 110 111 113 115 116 117 118 119 120 123 126 130 131 132 134 135 136 137 141 143 144 146 147 152 153 156 157 158 161 166 168 173 175 178 180 182 183 184 185 187 188 192 193 196 199 200 201 203 204 205 206 207 209 211 212 214 215 217 218 # 29057 revdifference c a 224 1 0 1 5 8 9 11 12 14 15 16 18 19 21 22 23 24 25 26 27 31 33 34 35 36 39 40 43 44 46 47 49 50 51 53 54 56 57 62 63 65 66 67 69 70 74 77 78 79 81 82 83 85 91 92 99 101 102 103 105 106 107 108 109 110 112 113 119 120 121 122 123 127 130 131 133 135 136 142 144 145 149 152 157 159 162 163 164 167 168 169 173 176 177 178 180 182 183 187 189 190 193 196 197 198 199 200 202 203 209 210 213 215 217 218 220 221 222 b 224 1 0 1 5 8 9 11 12 14 15 16 18 19 21 22 23 24 25 26 27 31 33 34 35 36 39 40 43 44 46 47 49 50 51 53 54 56 57 62 63 65 66 67 69 70 74 77 78 79 81 82 83 85 91 92 99 101 102 103 105 106 107 108 109 110 112 113 119 120 121 122 123 127 130 131 133 135 136 142 144 145 149 152 157 159 162 163 164 167 168 169 173 176 177 178 180 182 183 187 189 190 193 196 197 198 199 200 202 203 209 210 213 215 217 218 220 221 222 # 29058 revdifference c a 224 1 0 1 5 8 9 11 12 14 15 16 18 19 21 22 23 24 25 26 27 31 33 34 35 36 39 40 43 44 46 47 49 50 51 53 54 56 57 62 63 65 66 67 69 70 74 77 78 79 81 82 83 85 91 92 99 101 102 103 105 106 107 108 109 110 112 113 119 120 121 122 123 127 130 131 133 135 136 142 144 145 149 152 157 159 162 163 164 167 168 169 173 176 177 178 180 182 183 187 189 190 193 196 197 198 199 200 202 203 209 210 213 215 217 218 220 221 222 b 224 1 1 e # 29059 revdifference c a 224 1 0 4 7 8 10 11 12 13 16 17 18 20 22 23 25 31 32 33 35 37 40 43 46 49 52 57 59 61 62 63 64 66 68 70 71 73 74 75 77 78 79 84 86 90 93 96 98 99 102 103 105 106 107 109 110 111 116 119 123 125 126 129 131 134 135 136 138 141 144 145 146 147 150 151 152 155 164 165 167 169 171 172 173 175 176 177 179 182 183 186 187 188 191 192 197 199 200 202 205 207 208 209 210 212 213 216 219 222 b 224 1 0 4 7 8 10 11 12 13 16 17 18 20 22 23 25 31 32 33 35 37 40 43 46 49 52 57 59 61 62 63 64 66 68 70 71 73 74 75 77 78 79 84 86 90 93 96 98 99 102 103 105 106 107 109 110 111 116 119 123 125 126 129 131 134 135 136 138 141 144 145 146 147 150 151 152 155 164 165 167 169 171 172 173 175 176 177 179 182 183 186 187 188 191 192 197 199 200 202 205 207 208 209 210 212 213 216 219 222 # 29060 revdifference c a 224 1 0 4 7 8 10 11 12 13 16 17 18 20 22 23 25 31 32 33 35 37 40 43 46 49 52 57 59 61 62 63 64 66 68 70 71 73 74 75 77 78 79 84 86 90 93 96 98 99 102 103 105 106 107 109 110 111 116 119 123 125 126 129 131 134 135 136 138 141 144 145 146 147 150 151 152 155 164 165 167 169 171 172 173 175 176 177 179 182 183 186 187 188 191 192 197 199 200 202 205 207 208 209 210 212 213 216 219 222 b 224 1 1 f # 29061 revdifference c a 224 1 0 0 2 4 5 7 11 14 17 21 22 24 25 29 30 34 38 39 40 42 43 44 47 49 51 53 56 58 61 62 63 65 66 67 69 70 75 76 78 82 83 88 90 92 93 94 96 97 98 100 101 105 115 116 118 120 121 122 123 125 126 128 129 131 132 133 134 135 136 139 141 143 145 146 147 149 151 154 155 156 157 159 160 161 164 168 169 173 175 176 177 178 179 180 182 185 193 194 195 199 200 201 204 207 209 210 213 215 217 219 b 224 1 0 0 2 4 5 7 11 14 17 21 22 24 25 29 30 34 38 39 40 42 43 44 47 49 51 53 56 58 61 62 63 65 66 67 69 70 75 76 78 82 83 88 90 92 93 94 96 97 98 100 101 105 115 116 118 120 121 122 123 125 126 128 129 131 132 133 134 135 136 139 141 143 145 146 147 149 151 154 155 156 157 159 160 161 164 168 169 173 175 176 177 178 179 180 182 185 193 194 195 199 200 201 204 207 209 210 213 215 217 219 # 29062 revdifference c a 224 1 0 0 2 4 5 7 11 14 17 21 22 24 25 29 30 34 38 39 40 42 43 44 47 49 51 53 56 58 61 62 63 65 66 67 69 70 75 76 78 82 83 88 90 92 93 94 96 97 98 100 101 105 115 116 118 120 121 122 123 125 126 128 129 131 132 133 134 135 136 139 141 143 145 146 147 149 151 154 155 156 157 159 160 161 164 168 169 173 175 176 177 178 179 180 182 185 193 194 195 199 200 201 204 207 209 210 213 215 217 219 b 224 1 1 1 5 8 9 10 11 13 14 15 16 18 22 23 26 28 29 30 31 32 37 40 43 46 48 49 51 54 56 58 61 65 66 67 68 71 73 74 75 78 79 82 84 85 86 87 89 91 92 93 96 97 99 101 103 104 108 111 112 115 116 118 121 122 124 126 133 136 137 138 139 141 142 148 149 152 154 155 156 157 159 163 165 169 170 171 172 173 174 176 179 181 182 185 186 191 192 193 195 197 199 200 202 203 204 205 206 207 208 210 213 215 219 220 222 # 29063 revdifference c a 224 1 1 e b 224 1 1 e # 29064 revdifference c a 224 1 1 e b 224 0 0 e # 29065 revdifference c a 224 1 1 e b 224 1 1 e # 29066 revdifference c a 224 1 1 e b 224 0 0 f # 29067 revdifference c a 224 1 1 e b 224 1 1 e # 29068 revdifference c a 224 1 1 e b 224 0 0 3 4 5 6 7 8 11 14 16 17 21 23 25 26 29 30 32 35 36 37 38 39 42 43 44 45 46 47 48 53 55 59 60 61 63 66 69 71 72 74 75 77 79 81 83 86 87 88 89 90 91 92 93 94 97 99 101 102 104 105 109 111 115 116 118 119 121 124 128 129 132 134 135 136 138 140 144 145 147 148 153 155 157 160 162 163 164 165 167 168 171 172 177 181 183 184 185 186 187 188 189 191 193 194 196 198 199 200 202 204 206 207 211 212 213 215 216 218 219 221 222 223 # 29069 revdifference c a 224 1 1 f b 224 1 1 f # 29070 revdifference c a 224 1 1 f b 224 0 0 e # 29071 revdifference c a 224 1 1 f b 224 1 1 f # 29072 revdifference c a 224 1 1 f b 224 0 0 f # 29073 revdifference c a 224 1 1 f b 224 1 1 f # 29074 revdifference c a 224 1 1 f b 224 0 0 0 2 3 4 5 10 11 13 14 15 20 21 22 23 25 28 31 32 37 38 41 43 44 48 49 51 52 57 58 59 61 62 63 70 76 77 78 79 80 83 84 85 86 87 88 89 90 92 93 95 96 97 102 103 104 105 107 108 109 110 115 118 120 121 123 124 125 126 127 130 131 132 133 135 136 137 138 140 142 143 144 146 147 149 152 153 155 157 159 162 163 166 167 168 171 172 174 175 176 177 178 180 181 182 183 184 185 188 189 193 195 197 198 202 204 205 209 210 212 214 215 218 222 223 # 29075 revdifference c a 224 1 1 1 2 4 6 8 9 10 14 15 17 22 23 24 25 29 32 33 34 35 37 42 43 44 45 46 47 51 57 60 61 62 63 64 65 66 68 72 76 81 83 84 85 89 90 93 94 96 97 100 101 102 103 105 109 110 111 113 114 116 117 118 120 127 129 132 134 140 145 146 147 148 149 151 153 154 161 162 165 166 168 170 171 175 178 181 182 184 185 186 187 191 195 196 199 202 203 206 207 208 210 213 214 216 217 221 223 b 224 1 1 1 2 4 6 8 9 10 14 15 17 22 23 24 25 29 32 33 34 35 37 42 43 44 45 46 47 51 57 60 61 62 63 64 65 66 68 72 76 81 83 84 85 89 90 93 94 96 97 100 101 102 103 105 109 110 111 113 114 116 117 118 120 127 129 132 134 140 145 146 147 148 149 151 153 154 161 162 165 166 168 170 171 175 178 181 182 184 185 186 187 191 195 196 199 202 203 206 207 208 210 213 214 216 217 221 223 # 29076 revdifference c a 224 1 1 1 2 4 6 8 9 10 14 15 17 22 23 24 25 29 32 33 34 35 37 42 43 44 45 46 47 51 57 60 61 62 63 64 65 66 68 72 76 81 83 84 85 89 90 93 94 96 97 100 101 102 103 105 109 110 111 113 114 116 117 118 120 127 129 132 134 140 145 146 147 148 149 151 153 154 161 162 165 166 168 170 171 175 178 181 182 184 185 186 187 191 195 196 199 202 203 206 207 208 210 213 214 216 217 221 223 b 224 0 0 e # 29077 revdifference c a 224 1 1 0 1 3 5 6 7 8 9 10 16 18 22 25 26 28 31 33 34 37 40 41 42 46 50 51 52 53 54 56 57 58 60 61 64 65 66 68 69 70 72 73 74 76 78 80 81 83 84 88 89 90 91 92 95 97 98 99 100 101 103 108 110 111 114 117 118 120 121 123 124 125 126 128 129 131 133 134 135 136 139 140 144 150 152 155 156 157 159 160 169 170 175 176 177 179 181 190 192 196 197 203 204 205 206 207 208 209 210 212 213 217 219 b 224 1 1 0 1 3 5 6 7 8 9 10 16 18 22 25 26 28 31 33 34 37 40 41 42 46 50 51 52 53 54 56 57 58 60 61 64 65 66 68 69 70 72 73 74 76 78 80 81 83 84 88 89 90 91 92 95 97 98 99 100 101 103 108 110 111 114 117 118 120 121 123 124 125 126 128 129 131 133 134 135 136 139 140 144 150 152 155 156 157 159 160 169 170 175 176 177 179 181 190 192 196 197 203 204 205 206 207 208 209 210 212 213 217 219 # 29078 revdifference c a 224 1 1 0 1 3 5 6 7 8 9 10 16 18 22 25 26 28 31 33 34 37 40 41 42 46 50 51 52 53 54 56 57 58 60 61 64 65 66 68 69 70 72 73 74 76 78 80 81 83 84 88 89 90 91 92 95 97 98 99 100 101 103 108 110 111 114 117 118 120 121 123 124 125 126 128 129 131 133 134 135 136 139 140 144 150 152 155 156 157 159 160 169 170 175 176 177 179 181 190 192 196 197 203 204 205 206 207 208 209 210 212 213 217 219 b 224 0 0 f # 29079 revdifference c a 224 1 1 0 1 3 5 6 7 10 17 18 20 22 24 28 29 31 33 35 36 38 40 41 42 46 47 49 52 53 54 55 59 60 61 62 64 67 68 71 79 80 82 83 85 86 87 88 90 91 92 95 96 97 101 103 104 108 111 112 114 116 117 119 120 121 122 123 126 130 131 132 133 134 135 137 141 142 144 145 146 147 150 153 155 158 159 161 162 164 165 168 169 172 174 175 177 178 179 180 181 184 185 186 188 189 192 194 196 198 199 202 204 205 206 207 209 210 213 214 216 217 219 220 221 b 224 1 1 0 1 3 5 6 7 10 17 18 20 22 24 28 29 31 33 35 36 38 40 41 42 46 47 49 52 53 54 55 59 60 61 62 64 67 68 71 79 80 82 83 85 86 87 88 90 91 92 95 96 97 101 103 104 108 111 112 114 116 117 119 120 121 122 123 126 130 131 132 133 134 135 137 141 142 144 145 146 147 150 153 155 158 159 161 162 164 165 168 169 172 174 175 177 178 179 180 181 184 185 186 188 189 192 194 196 198 199 202 204 205 206 207 209 210 213 214 216 217 219 220 221 # 29080 revdifference c a 224 1 1 0 1 3 5 6 7 10 17 18 20 22 24 28 29 31 33 35 36 38 40 41 42 46 47 49 52 53 54 55 59 60 61 62 64 67 68 71 79 80 82 83 85 86 87 88 90 91 92 95 96 97 101 103 104 108 111 112 114 116 117 119 120 121 122 123 126 130 131 132 133 134 135 137 141 142 144 145 146 147 150 153 155 158 159 161 162 164 165 168 169 172 174 175 177 178 179 180 181 184 185 186 188 189 192 194 196 198 199 202 204 205 206 207 209 210 213 214 216 217 219 220 221 b 224 0 0 0 2 3 4 5 6 8 9 11 14 15 19 22 24 26 27 36 37 39 40 41 42 47 48 49 52 54 55 56 57 58 60 61 65 66 68 73 74 75 77 80 81 82 83 85 86 90 94 95 96 97 98 99 100 105 106 107 108 111 115 116 120 122 125 126 128 129 131 134 137 143 144 145 146 147 148 151 152 154 157 158 159 160 161 162 165 166 167 168 169 173 178 180 186 187 190 195 198 199 203 206 207 208 209 214 215 216 217 219 223 # 29081 revdifference c a 224 1 1 e b 224 1 1 e # 29082 revdifference c a 224 1 1 e b 224 0 1 e # 29083 revdifference c a 224 1 1 e b 224 1 1 e # 29084 revdifference c a 224 1 1 e b 224 0 1 f # 29085 revdifference c a 224 1 1 e b 224 1 1 e # 29086 revdifference c a 224 1 1 e b 224 0 1 0 1 2 3 4 5 6 10 12 13 16 18 20 21 22 23 24 26 27 28 29 30 32 35 38 40 41 42 44 46 47 48 49 51 52 55 56 58 62 63 64 66 68 69 70 71 72 73 75 76 78 79 81 85 86 87 89 96 99 100 102 103 104 105 107 110 114 117 121 122 123 126 128 131 132 135 137 138 142 144 145 146 147 151 154 155 156 157 159 161 163 165 166 168 170 172 173 174 175 176 177 178 183 184 185 186 187 188 191 193 194 196 197 198 199 201 204 205 206 207 208 209 210 211 212 214 215 219 220 221 222 223 # 29087 revdifference c a 224 1 1 f b 224 1 1 f # 29088 revdifference c a 224 1 1 f b 224 0 1 e # 29089 revdifference c a 224 1 1 f b 224 1 1 f # 29090 revdifference c a 224 1 1 f b 224 0 1 f # 29091 revdifference c a 224 1 1 f b 224 1 1 f # 29092 revdifference c a 224 1 1 f b 224 0 1 0 1 3 4 6 7 15 16 18 19 21 22 23 26 27 29 30 32 36 41 42 43 44 46 47 49 50 51 53 54 55 56 58 61 63 65 68 69 70 72 73 75 76 77 78 80 81 86 88 89 90 91 94 95 96 98 99 101 105 106 108 109 110 114 115 116 117 123 126 128 129 133 134 135 136 137 142 143 144 145 146 147 151 152 153 154 157 158 162 163 166 167 171 172 174 175 177 178 179 181 182 183 184 185 187 189 191 193 194 197 199 201 207 208 215 216 218 223 # 29093 revdifference c a 224 1 1 3 5 7 8 9 13 14 20 21 23 27 28 29 31 33 34 35 38 46 48 50 51 52 56 57 58 59 62 63 67 68 70 71 75 76 79 82 84 86 87 88 89 96 97 100 104 105 107 110 111 112 116 117 119 120 121 123 124 127 129 132 133 134 135 136 137 139 142 144 145 146 148 149 151 152 154 155 156 160 161 163 166 171 173 174 176 177 178 179 180 181 182 188 189 190 191 194 195 199 200 211 215 216 217 221 223 b 224 1 1 3 5 7 8 9 13 14 20 21 23 27 28 29 31 33 34 35 38 46 48 50 51 52 56 57 58 59 62 63 67 68 70 71 75 76 79 82 84 86 87 88 89 96 97 100 104 105 107 110 111 112 116 117 119 120 121 123 124 127 129 132 133 134 135 136 137 139 142 144 145 146 148 149 151 152 154 155 156 160 161 163 166 171 173 174 176 177 178 179 180 181 182 188 189 190 191 194 195 199 200 211 215 216 217 221 223 # 29094 revdifference c a 224 1 1 3 5 7 8 9 13 14 20 21 23 27 28 29 31 33 34 35 38 46 48 50 51 52 56 57 58 59 62 63 67 68 70 71 75 76 79 82 84 86 87 88 89 96 97 100 104 105 107 110 111 112 116 117 119 120 121 123 124 127 129 132 133 134 135 136 137 139 142 144 145 146 148 149 151 152 154 155 156 160 161 163 166 171 173 174 176 177 178 179 180 181 182 188 189 190 191 194 195 199 200 211 215 216 217 221 223 b 224 0 1 e # 29095 revdifference c a 224 1 1 1 2 3 8 9 13 14 15 18 24 26 29 31 32 36 37 38 40 42 48 49 50 56 58 62 64 66 70 72 73 74 75 79 84 85 86 88 90 92 93 98 99 100 101 104 107 109 110 111 116 117 118 119 125 126 128 129 131 132 136 137 140 142 144 147 150 151 152 153 154 155 156 157 159 161 165 166 167 172 177 179 181 183 184 186 187 191 193 194 196 197 200 201 203 204 205 208 213 220 221 223 b 224 1 1 1 2 3 8 9 13 14 15 18 24 26 29 31 32 36 37 38 40 42 48 49 50 56 58 62 64 66 70 72 73 74 75 79 84 85 86 88 90 92 93 98 99 100 101 104 107 109 110 111 116 117 118 119 125 126 128 129 131 132 136 137 140 142 144 147 150 151 152 153 154 155 156 157 159 161 165 166 167 172 177 179 181 183 184 186 187 191 193 194 196 197 200 201 203 204 205 208 213 220 221 223 # 29096 revdifference c a 224 1 1 1 2 3 8 9 13 14 15 18 24 26 29 31 32 36 37 38 40 42 48 49 50 56 58 62 64 66 70 72 73 74 75 79 84 85 86 88 90 92 93 98 99 100 101 104 107 109 110 111 116 117 118 119 125 126 128 129 131 132 136 137 140 142 144 147 150 151 152 153 154 155 156 157 159 161 165 166 167 172 177 179 181 183 184 186 187 191 193 194 196 197 200 201 203 204 205 208 213 220 221 223 b 224 0 1 f # 29097 revdifference c a 224 1 1 0 4 5 6 7 8 10 11 13 19 21 24 25 26 27 30 34 39 40 42 43 45 47 49 50 51 56 61 62 63 68 69 71 74 77 79 80 81 85 86 88 89 90 92 96 97 98 99 100 102 106 107 109 112 113 116 119 124 125 127 128 130 131 134 135 136 137 138 140 142 143 146 147 150 151 152 153 154 156 160 161 168 169 170 171 173 176 180 183 187 188 193 194 195 196 197 199 200 202 206 208 210 211 213 215 217 218 219 223 b 224 1 1 0 4 5 6 7 8 10 11 13 19 21 24 25 26 27 30 34 39 40 42 43 45 47 49 50 51 56 61 62 63 68 69 71 74 77 79 80 81 85 86 88 89 90 92 96 97 98 99 100 102 106 107 109 112 113 116 119 124 125 127 128 130 131 134 135 136 137 138 140 142 143 146 147 150 151 152 153 154 156 160 161 168 169 170 171 173 176 180 183 187 188 193 194 195 196 197 199 200 202 206 208 210 211 213 215 217 218 219 223 # 29098 revdifference c a 224 1 1 0 4 5 6 7 8 10 11 13 19 21 24 25 26 27 30 34 39 40 42 43 45 47 49 50 51 56 61 62 63 68 69 71 74 77 79 80 81 85 86 88 89 90 92 96 97 98 99 100 102 106 107 109 112 113 116 119 124 125 127 128 130 131 134 135 136 137 138 140 142 143 146 147 150 151 152 153 154 156 160 161 168 169 170 171 173 176 180 183 187 188 193 194 195 196 197 199 200 202 206 208 210 211 213 215 217 218 219 223 b 224 0 1 0 2 3 6 8 9 11 12 15 17 19 20 21 22 24 27 28 29 30 31 32 34 36 37 41 45 47 48 49 50 51 52 54 56 59 60 63 64 68 69 70 72 74 75 78 79 80 82 83 84 85 87 88 89 90 91 92 94 95 100 102 103 104 105 106 107 110 112 113 114 115 118 120 121 123 124 126 128 129 130 131 133 135 136 138 140 141 143 144 146 148 149 150 151 154 156 158 161 163 164 165 166 167 168 169 171 172 173 178 179 180 182 184 186 188 189 190 192 195 196 197 198 199 200 202 204 206 209 213 214 215 217 220 222 223 # 29099 revdifference c a 224 1 1 e b 224 1 1 e # 29100 revdifference c a 224 1 1 e b 224 1 0 e # 29101 revdifference c a 224 1 1 e b 224 1 1 e # 29102 revdifference c a 224 1 1 e b 224 1 0 f # 29103 revdifference c a 224 1 1 e b 224 1 1 e # 29104 revdifference c a 224 1 1 e b 224 1 0 0 2 3 5 6 7 12 17 18 20 21 24 25 26 27 29 30 32 33 34 36 37 39 41 43 45 49 50 52 59 60 61 63 64 68 73 78 79 81 85 86 87 88 89 90 91 92 94 95 100 101 102 103 105 107 110 111 115 116 117 118 119 120 121 122 123 125 126 127 129 131 132 133 134 136 140 145 148 151 154 155 159 161 162 164 165 167 169 172 173 174 178 180 182 184 185 186 191 193 194 195 196 198 199 201 204 205 206 209 211 218 220 221 223 # 29105 revdifference c a 224 1 1 f b 224 1 1 f # 29106 revdifference c a 224 1 1 f b 224 1 0 e # 29107 revdifference c a 224 1 1 f b 224 1 1 f # 29108 revdifference c a 224 1 1 f b 224 1 0 f # 29109 revdifference c a 224 1 1 f b 224 1 1 f # 29110 revdifference c a 224 1 1 f b 224 1 0 0 2 3 4 5 6 7 8 9 12 13 14 16 19 20 23 24 25 28 29 31 32 34 35 38 39 41 44 46 47 49 50 53 56 57 58 59 62 64 65 67 69 70 71 72 75 76 77 78 80 85 86 91 92 97 100 103 104 106 107 110 112 114 117 118 119 122 123 124 128 129 130 131 133 139 140 143 144 147 150 152 155 156 157 158 159 160 161 164 165 166 171 173 174 177 181 182 183 186 189 190 194 197 199 201 202 203 206 207 211 214 215 216 218 221 222 223 # 29111 revdifference c a 224 1 1 1 2 3 4 6 7 10 11 12 13 16 17 20 21 22 23 25 26 27 28 29 36 40 41 42 43 44 47 50 53 54 55 56 57 58 59 60 64 65 67 69 70 71 72 73 74 77 79 82 83 85 86 88 89 91 92 93 94 95 96 99 102 103 105 107 108 109 110 112 113 116 119 120 121 123 126 128 132 136 137 139 141 142 144 146 152 153 158 161 165 169 170 171 172 173 178 179 184 185 186 188 189 192 193 194 195 196 200 203 205 208 214 217 218 220 222 b 224 1 1 1 2 3 4 6 7 10 11 12 13 16 17 20 21 22 23 25 26 27 28 29 36 40 41 42 43 44 47 50 53 54 55 56 57 58 59 60 64 65 67 69 70 71 72 73 74 77 79 82 83 85 86 88 89 91 92 93 94 95 96 99 102 103 105 107 108 109 110 112 113 116 119 120 121 123 126 128 132 136 137 139 141 142 144 146 152 153 158 161 165 169 170 171 172 173 178 179 184 185 186 188 189 192 193 194 195 196 200 203 205 208 214 217 218 220 222 # 29112 revdifference c a 224 1 1 1 2 3 4 6 7 10 11 12 13 16 17 20 21 22 23 25 26 27 28 29 36 40 41 42 43 44 47 50 53 54 55 56 57 58 59 60 64 65 67 69 70 71 72 73 74 77 79 82 83 85 86 88 89 91 92 93 94 95 96 99 102 103 105 107 108 109 110 112 113 116 119 120 121 123 126 128 132 136 137 139 141 142 144 146 152 153 158 161 165 169 170 171 172 173 178 179 184 185 186 188 189 192 193 194 195 196 200 203 205 208 214 217 218 220 222 b 224 1 0 e # 29113 revdifference c a 224 1 1 3 4 5 7 8 13 14 16 17 18 21 22 23 24 25 26 28 29 30 35 38 40 44 47 51 52 55 64 65 67 73 76 77 81 82 86 87 88 90 94 102 103 109 112 114 116 117 119 120 124 125 126 127 129 131 134 135 138 139 144 145 146 147 148 149 150 151 155 157 158 160 164 165 170 172 174 175 178 179 181 182 183 184 185 186 188 189 190 191 193 195 196 197 200 202 203 207 208 210 212 215 217 220 221 223 b 224 1 1 3 4 5 7 8 13 14 16 17 18 21 22 23 24 25 26 28 29 30 35 38 40 44 47 51 52 55 64 65 67 73 76 77 81 82 86 87 88 90 94 102 103 109 112 114 116 117 119 120 124 125 126 127 129 131 134 135 138 139 144 145 146 147 148 149 150 151 155 157 158 160 164 165 170 172 174 175 178 179 181 182 183 184 185 186 188 189 190 191 193 195 196 197 200 202 203 207 208 210 212 215 217 220 221 223 # 29114 revdifference c a 224 1 1 3 4 5 7 8 13 14 16 17 18 21 22 23 24 25 26 28 29 30 35 38 40 44 47 51 52 55 64 65 67 73 76 77 81 82 86 87 88 90 94 102 103 109 112 114 116 117 119 120 124 125 126 127 129 131 134 135 138 139 144 145 146 147 148 149 150 151 155 157 158 160 164 165 170 172 174 175 178 179 181 182 183 184 185 186 188 189 190 191 193 195 196 197 200 202 203 207 208 210 212 215 217 220 221 223 b 224 1 0 f # 29115 revdifference c a 224 1 1 0 1 2 3 4 7 9 11 13 14 18 20 26 27 30 33 37 38 39 40 42 46 47 48 49 50 51 52 56 60 62 66 68 69 71 73 74 75 77 84 85 86 89 90 94 96 97 98 99 103 107 109 111 113 116 117 118 120 122 124 125 126 127 129 131 132 133 134 138 139 143 144 145 146 147 148 149 150 151 153 154 157 158 159 162 165 166 167 168 169 170 172 174 175 176 177 178 179 180 181 183 187 190 191 192 193 196 197 199 200 201 202 203 205 206 208 210 211 214 215 216 217 218 221 222 223 b 224 1 1 0 1 2 3 4 7 9 11 13 14 18 20 26 27 30 33 37 38 39 40 42 46 47 48 49 50 51 52 56 60 62 66 68 69 71 73 74 75 77 84 85 86 89 90 94 96 97 98 99 103 107 109 111 113 116 117 118 120 122 124 125 126 127 129 131 132 133 134 138 139 143 144 145 146 147 148 149 150 151 153 154 157 158 159 162 165 166 167 168 169 170 172 174 175 176 177 178 179 180 181 183 187 190 191 192 193 196 197 199 200 201 202 203 205 206 208 210 211 214 215 216 217 218 221 222 223 # 29116 revdifference c a 224 1 1 0 1 2 3 4 7 9 11 13 14 18 20 26 27 30 33 37 38 39 40 42 46 47 48 49 50 51 52 56 60 62 66 68 69 71 73 74 75 77 84 85 86 89 90 94 96 97 98 99 103 107 109 111 113 116 117 118 120 122 124 125 126 127 129 131 132 133 134 138 139 143 144 145 146 147 148 149 150 151 153 154 157 158 159 162 165 166 167 168 169 170 172 174 175 176 177 178 179 180 181 183 187 190 191 192 193 196 197 199 200 201 202 203 205 206 208 210 211 214 215 216 217 218 221 222 223 b 224 1 0 0 7 10 11 14 16 17 18 21 22 24 25 26 27 29 30 32 34 36 37 41 42 45 46 48 49 50 53 54 57 59 65 66 68 69 72 74 78 81 82 83 85 86 87 88 90 94 95 101 106 107 108 109 111 112 114 117 119 120 125 127 129 130 131 135 136 141 144 148 149 151 152 157 159 160 162 164 166 168 170 174 176 179 180 181 182 183 187 189 190 191 192 193 195 200 202 203 204 208 209 211 213 214 215 220 223 # 29117 revdifference c a 224 1 1 e b 224 1 1 e # 29118 revdifference c a 224 1 1 e b 224 1 1 e # 29119 revdifference c a 224 1 1 e b 224 1 1 e # 29120 revdifference c a 224 1 1 e b 224 1 1 f # 29121 revdifference c a 224 1 1 e b 224 1 1 e # 29122 revdifference c a 224 1 1 e b 224 1 1 0 1 2 4 5 7 10 11 12 13 16 17 20 21 22 23 28 29 31 32 33 34 35 36 40 45 46 47 56 57 58 60 61 64 67 68 69 72 74 77 79 82 84 86 88 89 90 91 92 95 98 101 102 105 107 108 109 111 115 116 119 123 124 125 126 134 135 136 138 139 140 142 144 148 149 151 153 154 155 157 159 161 163 164 165 166 167 170 172 176 177 178 183 184 186 189 192 195 197 198 199 202 204 206 207 209 211 212 213 215 221 222 223 # 29123 revdifference c a 224 1 1 f b 224 1 1 f # 29124 revdifference c a 224 1 1 f b 224 1 1 e # 29125 revdifference c a 224 1 1 f b 224 1 1 f # 29126 revdifference c a 224 1 1 f b 224 1 1 f # 29127 revdifference c a 224 1 1 f b 224 1 1 f # 29128 revdifference c a 224 1 1 f b 224 1 1 2 3 7 8 10 11 12 13 14 17 18 20 23 24 25 27 28 30 31 32 33 34 35 38 40 41 43 45 46 47 48 49 51 53 54 56 59 60 62 64 68 72 73 76 79 81 83 84 86 87 90 94 96 98 99 104 106 107 108 111 113 114 117 119 120 122 124 125 126 127 128 129 132 133 134 135 137 138 139 142 143 145 149 154 155 156 157 158 159 160 163 164 166 171 172 174 175 176 181 182 183 184 185 186 187 188 190 191 192 195 196 198 200 208 209 210 212 213 215 216 217 218 219 221 222 # 29129 revdifference c a 224 1 1 2 5 6 10 11 12 15 19 22 27 29 34 35 38 40 41 44 48 51 52 53 59 61 63 64 65 70 73 74 77 81 84 86 88 90 97 99 102 105 106 107 108 110 112 114 115 116 117 118 119 121 126 134 135 136 137 139 140 142 143 144 145 146 149 151 152 155 156 157 161 162 163 164 165 167 169 170 173 178 179 180 181 182 183 185 186 188 190 192 194 195 198 199 201 203 205 207 208 209 210 211 212 213 214 216 218 219 220 221 222 223 b 224 1 1 2 5 6 10 11 12 15 19 22 27 29 34 35 38 40 41 44 48 51 52 53 59 61 63 64 65 70 73 74 77 81 84 86 88 90 97 99 102 105 106 107 108 110 112 114 115 116 117 118 119 121 126 134 135 136 137 139 140 142 143 144 145 146 149 151 152 155 156 157 161 162 163 164 165 167 169 170 173 178 179 180 181 182 183 185 186 188 190 192 194 195 198 199 201 203 205 207 208 209 210 211 212 213 214 216 218 219 220 221 222 223 # 29130 revdifference c a 224 1 1 2 5 6 10 11 12 15 19 22 27 29 34 35 38 40 41 44 48 51 52 53 59 61 63 64 65 70 73 74 77 81 84 86 88 90 97 99 102 105 106 107 108 110 112 114 115 116 117 118 119 121 126 134 135 136 137 139 140 142 143 144 145 146 149 151 152 155 156 157 161 162 163 164 165 167 169 170 173 178 179 180 181 182 183 185 186 188 190 192 194 195 198 199 201 203 205 207 208 209 210 211 212 213 214 216 218 219 220 221 222 223 b 224 1 1 e # 29131 revdifference c a 224 1 1 1 2 5 7 10 11 14 17 20 21 22 25 30 31 33 35 38 39 40 41 42 44 45 48 49 51 52 56 60 63 66 67 68 70 71 73 76 77 79 81 85 89 90 91 93 94 95 97 104 105 106 107 111 113 116 117 118 119 120 122 125 126 127 128 131 132 133 135 136 141 143 144 147 149 150 151 153 155 156 158 160 165 169 171 172 173 175 177 180 184 185 187 188 191 192 193 196 199 201 202 203 204 206 207 208 211 213 214 216 219 b 224 1 1 1 2 5 7 10 11 14 17 20 21 22 25 30 31 33 35 38 39 40 41 42 44 45 48 49 51 52 56 60 63 66 67 68 70 71 73 76 77 79 81 85 89 90 91 93 94 95 97 104 105 106 107 111 113 116 117 118 119 120 122 125 126 127 128 131 132 133 135 136 141 143 144 147 149 150 151 153 155 156 158 160 165 169 171 172 173 175 177 180 184 185 187 188 191 192 193 196 199 201 202 203 204 206 207 208 211 213 214 216 219 # 29132 revdifference c a 224 1 1 1 2 5 7 10 11 14 17 20 21 22 25 30 31 33 35 38 39 40 41 42 44 45 48 49 51 52 56 60 63 66 67 68 70 71 73 76 77 79 81 85 89 90 91 93 94 95 97 104 105 106 107 111 113 116 117 118 119 120 122 125 126 127 128 131 132 133 135 136 141 143 144 147 149 150 151 153 155 156 158 160 165 169 171 172 173 175 177 180 184 185 187 188 191 192 193 196 199 201 202 203 204 206 207 208 211 213 214 216 219 b 224 1 1 f # 29133 revdifference c a 224 1 1 1 3 5 6 8 9 11 12 14 15 18 19 21 23 24 25 26 30 32 38 42 45 47 48 49 50 52 55 57 61 62 68 70 73 75 77 78 80 81 82 85 87 88 95 96 97 99 101 102 103 104 106 109 110 111 112 117 118 122 123 129 130 132 133 137 138 139 140 142 144 146 148 149 150 152 153 154 156 158 161 162 163 164 165 168 170 171 172 173 175 176 177 179 180 183 184 187 188 189 191 192 193 194 196 198 199 200 201 202 205 208 211 212 213 215 216 217 218 219 220 221 222 b 224 1 1 1 3 5 6 8 9 11 12 14 15 18 19 21 23 24 25 26 30 32 38 42 45 47 48 49 50 52 55 57 61 62 68 70 73 75 77 78 80 81 82 85 87 88 95 96 97 99 101 102 103 104 106 109 110 111 112 117 118 122 123 129 130 132 133 137 138 139 140 142 144 146 148 149 150 152 153 154 156 158 161 162 163 164 165 168 170 171 172 173 175 176 177 179 180 183 184 187 188 189 191 192 193 194 196 198 199 200 201 202 205 208 211 212 213 215 216 217 218 219 220 221 222 # 29134 revdifference c a 224 1 1 1 3 5 6 8 9 11 12 14 15 18 19 21 23 24 25 26 30 32 38 42 45 47 48 49 50 52 55 57 61 62 68 70 73 75 77 78 80 81 82 85 87 88 95 96 97 99 101 102 103 104 106 109 110 111 112 117 118 122 123 129 130 132 133 137 138 139 140 142 144 146 148 149 150 152 153 154 156 158 161 162 163 164 165 168 170 171 172 173 175 176 177 179 180 183 184 187 188 189 191 192 193 194 196 198 199 200 201 202 205 208 211 212 213 215 216 217 218 219 220 221 222 b 224 1 1 0 1 2 3 5 6 7 9 11 12 13 15 17 19 20 21 22 23 24 30 32 33 36 41 43 45 46 47 48 50 55 56 57 60 62 63 68 73 75 77 82 84 85 87 88 89 91 94 95 96 97 99 101 102 103 107 109 113 114 115 116 118 119 121 123 126 127 130 131 132 133 136 137 140 141 142 144 145 147 149 151 152 153 154 157 160 161 163 164 165 167 168 169 170 171 172 173 174 179 181 184 187 188 189 191 192 193 194 202 204 205 206 209 212 213 214 216 219 220 221 222 223 # 29135 revdifference c a 247 0 0 e b 247 0 0 e # 29136 revdifference c a 247 0 0 e b 247 0 0 e # 29137 revdifference c a 247 0 0 e b 247 0 0 e # 29138 revdifference c a 247 0 0 e b 247 0 0 f # 29139 revdifference c a 247 0 0 e b 247 0 0 e # 29140 revdifference c a 247 0 0 e b 247 0 0 0 1 7 8 11 13 15 16 19 21 25 28 30 34 35 36 38 40 41 44 46 47 48 50 53 56 57 58 60 61 62 64 65 66 67 68 69 71 72 74 75 76 77 78 79 85 86 89 90 93 94 97 104 106 107 109 110 114 115 116 117 118 120 121 122 125 126 127 129 131 133 136 140 142 144 145 146 147 148 149 152 154 156 161 163 165 168 169 170 171 178 179 183 188 190 195 197 200 201 207 208 210 211 212 214 218 220 221 223 225 226 229 230 232 233 237 241 # 29141 revdifference c a 247 0 0 f b 247 0 0 f # 29142 revdifference c a 247 0 0 f b 247 0 0 e # 29143 revdifference c a 247 0 0 f b 247 0 0 f # 29144 revdifference c a 247 0 0 f b 247 0 0 f # 29145 revdifference c a 247 0 0 f b 247 0 0 f # 29146 revdifference c a 247 0 0 f b 247 0 0 0 3 5 10 11 12 13 15 16 20 22 24 25 28 29 30 31 33 34 36 38 41 42 44 47 48 49 51 53 56 57 59 63 69 71 72 76 79 82 86 88 90 95 96 98 104 106 107 108 109 110 113 114 115 120 122 124 125 126 129 130 131 133 137 140 142 147 148 149 150 151 152 153 154 155 156 157 160 161 164 166 170 172 173 174 182 184 185 186 187 188 190 191 196 198 200 201 202 203 205 207 209 210 212 213 214 215 216 217 218 219 220 221 222 224 227 228 230 231 232 233 234 239 245 # 29147 revdifference c a 247 0 0 1 2 4 5 7 8 9 12 13 15 16 18 20 25 26 27 28 29 30 33 36 37 41 42 46 48 49 52 53 54 56 57 59 62 63 67 71 74 75 76 77 78 79 80 83 88 90 92 93 95 97 98 99 104 107 110 112 113 114 120 122 127 128 130 132 134 135 136 137 138 141 143 144 147 148 149 153 154 155 158 160 163 164 166 169 170 172 176 177 181 182 183 184 185 187 192 193 196 198 201 202 204 206 207 208 212 215 217 218 219 220 221 223 224 225 227 230 231 232 233 234 235 236 237 238 239 240 241 243 245 246 b 247 0 0 1 2 4 5 7 8 9 12 13 15 16 18 20 25 26 27 28 29 30 33 36 37 41 42 46 48 49 52 53 54 56 57 59 62 63 67 71 74 75 76 77 78 79 80 83 88 90 92 93 95 97 98 99 104 107 110 112 113 114 120 122 127 128 130 132 134 135 136 137 138 141 143 144 147 148 149 153 154 155 158 160 163 164 166 169 170 172 176 177 181 182 183 184 185 187 192 193 196 198 201 202 204 206 207 208 212 215 217 218 219 220 221 223 224 225 227 230 231 232 233 234 235 236 237 238 239 240 241 243 245 246 # 29148 revdifference c a 247 0 0 1 2 4 5 7 8 9 12 13 15 16 18 20 25 26 27 28 29 30 33 36 37 41 42 46 48 49 52 53 54 56 57 59 62 63 67 71 74 75 76 77 78 79 80 83 88 90 92 93 95 97 98 99 104 107 110 112 113 114 120 122 127 128 130 132 134 135 136 137 138 141 143 144 147 148 149 153 154 155 158 160 163 164 166 169 170 172 176 177 181 182 183 184 185 187 192 193 196 198 201 202 204 206 207 208 212 215 217 218 219 220 221 223 224 225 227 230 231 232 233 234 235 236 237 238 239 240 241 243 245 246 b 247 0 0 e # 29149 revdifference c a 247 0 0 11 13 14 16 17 19 20 21 23 24 27 28 29 30 35 36 37 39 41 42 43 45 46 48 50 56 59 61 62 63 66 67 70 71 72 73 76 78 79 80 81 83 88 90 93 95 98 99 100 101 102 103 104 107 108 109 112 113 115 117 122 123 127 128 130 132 135 136 141 142 144 147 152 153 155 157 158 159 160 163 164 165 166 167 171 174 175 176 178 179 180 185 192 193 195 196 199 201 202 203 204 205 206 207 208 209 210 211 212 216 217 218 220 222 223 227 228 229 230 232 233 234 235 237 246 b 247 0 0 11 13 14 16 17 19 20 21 23 24 27 28 29 30 35 36 37 39 41 42 43 45 46 48 50 56 59 61 62 63 66 67 70 71 72 73 76 78 79 80 81 83 88 90 93 95 98 99 100 101 102 103 104 107 108 109 112 113 115 117 122 123 127 128 130 132 135 136 141 142 144 147 152 153 155 157 158 159 160 163 164 165 166 167 171 174 175 176 178 179 180 185 192 193 195 196 199 201 202 203 204 205 206 207 208 209 210 211 212 216 217 218 220 222 223 227 228 229 230 232 233 234 235 237 246 # 29150 revdifference c a 247 0 0 11 13 14 16 17 19 20 21 23 24 27 28 29 30 35 36 37 39 41 42 43 45 46 48 50 56 59 61 62 63 66 67 70 71 72 73 76 78 79 80 81 83 88 90 93 95 98 99 100 101 102 103 104 107 108 109 112 113 115 117 122 123 127 128 130 132 135 136 141 142 144 147 152 153 155 157 158 159 160 163 164 165 166 167 171 174 175 176 178 179 180 185 192 193 195 196 199 201 202 203 204 205 206 207 208 209 210 211 212 216 217 218 220 222 223 227 228 229 230 232 233 234 235 237 246 b 247 0 0 f # 29151 revdifference c a 247 0 0 3 5 6 7 8 11 14 17 19 23 24 25 26 30 31 32 34 35 37 38 44 46 48 52 53 54 57 58 59 61 68 70 72 73 74 75 77 78 83 84 91 92 93 96 98 99 100 105 107 108 110 111 114 116 118 120 123 124 125 126 127 129 130 131 135 137 139 140 142 144 145 146 147 149 153 154 156 157 159 160 162 163 166 167 170 172 173 174 175 176 177 178 180 183 187 190 192 193 197 198 199 201 202 203 205 206 212 213 215 218 219 220 221 223 224 226 229 231 232 234 236 240 241 242 243 244 245 246 b 247 0 0 3 5 6 7 8 11 14 17 19 23 24 25 26 30 31 32 34 35 37 38 44 46 48 52 53 54 57 58 59 61 68 70 72 73 74 75 77 78 83 84 91 92 93 96 98 99 100 105 107 108 110 111 114 116 118 120 123 124 125 126 127 129 130 131 135 137 139 140 142 144 145 146 147 149 153 154 156 157 159 160 162 163 166 167 170 172 173 174 175 176 177 178 180 183 187 190 192 193 197 198 199 201 202 203 205 206 212 213 215 218 219 220 221 223 224 226 229 231 232 234 236 240 241 242 243 244 245 246 # 29152 revdifference c a 247 0 0 3 5 6 7 8 11 14 17 19 23 24 25 26 30 31 32 34 35 37 38 44 46 48 52 53 54 57 58 59 61 68 70 72 73 74 75 77 78 83 84 91 92 93 96 98 99 100 105 107 108 110 111 114 116 118 120 123 124 125 126 127 129 130 131 135 137 139 140 142 144 145 146 147 149 153 154 156 157 159 160 162 163 166 167 170 172 173 174 175 176 177 178 180 183 187 190 192 193 197 198 199 201 202 203 205 206 212 213 215 218 219 220 221 223 224 226 229 231 232 234 236 240 241 242 243 244 245 246 b 247 0 0 2 5 6 8 12 16 17 20 21 22 24 25 26 28 29 33 34 35 36 40 42 44 46 47 48 50 51 52 53 54 55 57 60 68 69 70 74 75 76 77 78 79 81 86 87 92 93 94 96 99 104 112 113 114 117 119 120 121 123 126 128 131 132 136 137 138 139 144 146 148 150 151 152 154 157 158 163 164 165 168 171 172 173 175 177 178 181 185 186 187 188 189 190 191 192 194 195 196 199 200 201 202 203 204 205 207 208 215 220 223 224 226 227 228 229 231 232 237 241 243 245 246 # 29153 revdifference c a 247 0 0 e b 247 0 0 e # 29154 revdifference c a 247 0 0 e b 247 0 1 e # 29155 revdifference c a 247 0 0 e b 247 0 0 e # 29156 revdifference c a 247 0 0 e b 247 0 1 f # 29157 revdifference c a 247 0 0 e b 247 0 0 e # 29158 revdifference c a 247 0 0 e b 247 0 1 0 3 5 10 13 14 15 16 17 22 24 26 27 28 29 30 33 36 37 38 41 44 49 50 54 56 57 59 60 65 66 67 71 73 75 76 77 80 82 84 85 86 87 88 91 93 94 95 97 98 99 101 102 104 105 107 108 109 110 113 114 115 118 120 122 124 125 126 128 129 131 132 137 139 140 144 148 149 150 153 154 156 157 158 165 166 167 168 169 170 171 178 182 183 186 187 189 191 192 193 194 196 197 199 200 201 202 203 207 208 209 210 213 214 215 217 218 220 223 228 231 234 235 237 240 # 29159 revdifference c a 247 0 0 f b 247 0 0 f # 29160 revdifference c a 247 0 0 f b 247 0 1 e # 29161 revdifference c a 247 0 0 f b 247 0 0 f # 29162 revdifference c a 247 0 0 f b 247 0 1 f # 29163 revdifference c a 247 0 0 f b 247 0 0 f # 29164 revdifference c a 247 0 0 f b 247 0 1 2 3 7 11 13 14 18 19 20 21 23 24 25 29 30 31 33 34 35 36 37 38 41 43 44 47 50 57 58 59 60 66 69 70 71 72 73 74 77 79 82 84 86 88 91 92 93 94 96 97 100 102 105 106 108 111 112 115 120 121 123 126 130 131 132 133 135 140 141 143 144 145 146 148 150 151 155 159 160 161 162 163 164 166 168 171 172 173 174 175 177 184 185 190 193 194 196 197 199 200 201 203 204 206 208 210 212 213 214 215 216 217 218 219 221 223 224 227 228 229 231 232 233 234 237 238 # 29165 revdifference c a 247 0 0 4 7 8 9 10 11 12 13 15 18 19 21 22 23 27 28 30 31 32 37 44 46 48 49 54 55 60 64 66 70 71 73 74 77 78 80 84 86 88 92 93 94 95 97 98 101 103 104 111 112 113 118 120 122 123 124 125 128 130 131 133 134 135 137 141 143 144 145 148 151 156 157 158 159 162 163 166 167 169 171 172 173 174 178 183 185 188 192 193 194 197 198 199 200 202 204 206 208 209 210 212 216 217 218 219 220 222 223 225 226 227 228 229 230 234 236 237 238 239 240 241 242 243 244 b 247 0 0 4 7 8 9 10 11 12 13 15 18 19 21 22 23 27 28 30 31 32 37 44 46 48 49 54 55 60 64 66 70 71 73 74 77 78 80 84 86 88 92 93 94 95 97 98 101 103 104 111 112 113 118 120 122 123 124 125 128 130 131 133 134 135 137 141 143 144 145 148 151 156 157 158 159 162 163 166 167 169 171 172 173 174 178 183 185 188 192 193 194 197 198 199 200 202 204 206 208 209 210 212 216 217 218 219 220 222 223 225 226 227 228 229 230 234 236 237 238 239 240 241 242 243 244 # 29166 revdifference c a 247 0 0 4 7 8 9 10 11 12 13 15 18 19 21 22 23 27 28 30 31 32 37 44 46 48 49 54 55 60 64 66 70 71 73 74 77 78 80 84 86 88 92 93 94 95 97 98 101 103 104 111 112 113 118 120 122 123 124 125 128 130 131 133 134 135 137 141 143 144 145 148 151 156 157 158 159 162 163 166 167 169 171 172 173 174 178 183 185 188 192 193 194 197 198 199 200 202 204 206 208 209 210 212 216 217 218 219 220 222 223 225 226 227 228 229 230 234 236 237 238 239 240 241 242 243 244 b 247 0 1 e # 29167 revdifference c a 247 0 0 0 1 3 4 6 7 8 9 10 13 15 16 17 18 20 21 22 24 25 28 29 30 31 32 33 35 40 42 44 45 47 48 54 56 58 59 63 65 66 67 73 74 76 79 80 81 84 87 88 90 91 92 94 97 100 102 106 108 114 116 121 129 130 133 134 135 137 139 144 146 147 149 151 152 153 157 158 161 162 163 167 169 170 174 177 178 179 180 182 183 184 186 188 189 190 195 196 197 198 202 203 204 205 206 209 214 217 220 222 224 227 228 229 230 233 239 241 244 246 b 247 0 0 0 1 3 4 6 7 8 9 10 13 15 16 17 18 20 21 22 24 25 28 29 30 31 32 33 35 40 42 44 45 47 48 54 56 58 59 63 65 66 67 73 74 76 79 80 81 84 87 88 90 91 92 94 97 100 102 106 108 114 116 121 129 130 133 134 135 137 139 144 146 147 149 151 152 153 157 158 161 162 163 167 169 170 174 177 178 179 180 182 183 184 186 188 189 190 195 196 197 198 202 203 204 205 206 209 214 217 220 222 224 227 228 229 230 233 239 241 244 246 # 29168 revdifference c a 247 0 0 0 1 3 4 6 7 8 9 10 13 15 16 17 18 20 21 22 24 25 28 29 30 31 32 33 35 40 42 44 45 47 48 54 56 58 59 63 65 66 67 73 74 76 79 80 81 84 87 88 90 91 92 94 97 100 102 106 108 114 116 121 129 130 133 134 135 137 139 144 146 147 149 151 152 153 157 158 161 162 163 167 169 170 174 177 178 179 180 182 183 184 186 188 189 190 195 196 197 198 202 203 204 205 206 209 214 217 220 222 224 227 228 229 230 233 239 241 244 246 b 247 0 1 f # 29169 revdifference c a 247 0 0 3 4 6 11 14 15 16 17 18 22 27 29 30 31 32 33 34 35 37 39 41 42 45 51 54 55 56 58 61 64 70 73 74 78 79 82 83 85 86 89 92 93 94 96 97 98 101 102 103 105 107 108 109 110 113 115 118 119 125 126 128 135 136 138 139 141 143 145 147 150 151 152 153 156 157 159 161 163 165 171 172 173 176 177 186 191 193 194 198 199 201 204 205 206 208 210 212 213 214 215 217 219 220 222 225 226 227 228 233 234 236 237 238 239 b 247 0 0 3 4 6 11 14 15 16 17 18 22 27 29 30 31 32 33 34 35 37 39 41 42 45 51 54 55 56 58 61 64 70 73 74 78 79 82 83 85 86 89 92 93 94 96 97 98 101 102 103 105 107 108 109 110 113 115 118 119 125 126 128 135 136 138 139 141 143 145 147 150 151 152 153 156 157 159 161 163 165 171 172 173 176 177 186 191 193 194 198 199 201 204 205 206 208 210 212 213 214 215 217 219 220 222 225 226 227 228 233 234 236 237 238 239 # 29170 revdifference c a 247 0 0 3 4 6 11 14 15 16 17 18 22 27 29 30 31 32 33 34 35 37 39 41 42 45 51 54 55 56 58 61 64 70 73 74 78 79 82 83 85 86 89 92 93 94 96 97 98 101 102 103 105 107 108 109 110 113 115 118 119 125 126 128 135 136 138 139 141 143 145 147 150 151 152 153 156 157 159 161 163 165 171 172 173 176 177 186 191 193 194 198 199 201 204 205 206 208 210 212 213 214 215 217 219 220 222 225 226 227 228 233 234 236 237 238 239 b 247 0 1 0 3 5 6 9 11 12 13 24 25 26 27 32 33 35 36 39 40 41 42 43 46 47 48 54 57 62 65 67 69 70 73 74 75 77 78 81 82 83 85 86 87 88 92 93 94 95 96 97 98 100 101 104 109 110 111 112 113 116 119 120 130 131 136 138 141 142 144 146 147 148 150 151 152 156 157 158 159 162 163 164 168 170 173 174 177 180 182 183 184 186 188 189 194 195 196 202 203 204 206 214 216 217 218 219 220 222 223 224 225 226 230 231 232 233 235 238 240 242 244 245 # 29171 revdifference c a 247 0 0 e b 247 0 0 e # 29172 revdifference c a 247 0 0 e b 247 1 0 e # 29173 revdifference c a 247 0 0 e b 247 0 0 e # 29174 revdifference c a 247 0 0 e b 247 1 0 f # 29175 revdifference c a 247 0 0 e b 247 0 0 e # 29176 revdifference c a 247 0 0 e b 247 1 0 0 1 11 12 13 14 16 18 20 25 26 28 29 30 31 35 36 37 39 41 42 43 44 47 48 51 52 53 54 56 57 58 59 60 61 64 65 67 69 70 71 72 74 75 76 79 80 81 82 83 85 86 88 89 90 94 97 99 100 101 109 114 115 116 117 119 120 124 125 126 127 128 129 130 131 132 138 139 143 144 146 147 149 151 153 155 156 157 158 159 160 161 163 164 165 172 173 175 176 177 180 181 184 192 193 195 197 199 201 204 207 209 210 212 214 216 217 218 222 224 229 231 232 236 242 243 245 # 29177 revdifference c a 247 0 0 f b 247 0 0 f # 29178 revdifference c a 247 0 0 f b 247 1 0 e # 29179 revdifference c a 247 0 0 f b 247 0 0 f # 29180 revdifference c a 247 0 0 f b 247 1 0 f # 29181 revdifference c a 247 0 0 f b 247 0 0 f # 29182 revdifference c a 247 0 0 f b 247 1 0 1 4 5 8 12 16 17 18 20 22 25 30 31 32 35 39 40 41 43 44 45 47 48 49 51 55 57 59 60 63 64 65 66 67 70 72 74 75 76 78 79 84 85 87 90 92 96 100 103 104 106 107 108 109 111 113 115 116 117 118 121 122 123 124 127 128 129 133 137 138 139 140 142 143 146 149 152 155 157 158 160 161 162 164 165 166 167 168 169 170 171 173 174 175 177 178 179 180 184 185 188 189 191 192 195 197 198 200 201 202 203 204 205 206 209 210 214 215 216 217 219 220 221 223 224 225 226 228 235 239 240 242 245 # 29183 revdifference c a 247 0 0 1 4 6 7 13 14 15 20 25 27 30 31 32 34 35 36 37 39 41 44 48 51 52 53 56 57 59 60 62 63 64 65 66 71 73 80 81 83 84 87 89 90 92 95 97 99 101 104 105 106 110 113 117 118 119 121 122 133 134 135 137 139 140 141 142 144 148 154 158 159 160 163 164 166 168 171 177 178 181 182 185 186 187 189 191 193 194 196 197 198 199 201 202 206 207 208 214 215 217 220 221 223 224 227 229 230 231 232 233 236 237 238 239 243 245 246 b 247 0 0 1 4 6 7 13 14 15 20 25 27 30 31 32 34 35 36 37 39 41 44 48 51 52 53 56 57 59 60 62 63 64 65 66 71 73 80 81 83 84 87 89 90 92 95 97 99 101 104 105 106 110 113 117 118 119 121 122 133 134 135 137 139 140 141 142 144 148 154 158 159 160 163 164 166 168 171 177 178 181 182 185 186 187 189 191 193 194 196 197 198 199 201 202 206 207 208 214 215 217 220 221 223 224 227 229 230 231 232 233 236 237 238 239 243 245 246 # 29184 revdifference c a 247 0 0 1 4 6 7 13 14 15 20 25 27 30 31 32 34 35 36 37 39 41 44 48 51 52 53 56 57 59 60 62 63 64 65 66 71 73 80 81 83 84 87 89 90 92 95 97 99 101 104 105 106 110 113 117 118 119 121 122 133 134 135 137 139 140 141 142 144 148 154 158 159 160 163 164 166 168 171 177 178 181 182 185 186 187 189 191 193 194 196 197 198 199 201 202 206 207 208 214 215 217 220 221 223 224 227 229 230 231 232 233 236 237 238 239 243 245 246 b 247 1 0 e # 29185 revdifference c a 247 0 0 0 1 6 8 10 11 12 13 16 18 19 21 22 28 30 34 35 40 41 44 45 46 48 49 55 56 57 58 61 62 63 65 67 69 71 72 78 83 84 85 87 88 95 96 97 101 105 106 109 110 117 118 122 123 125 128 129 130 132 133 135 136 139 140 145 147 150 151 152 153 156 157 158 160 162 163 166 173 174 175 178 179 180 181 182 186 190 192 194 196 197 198 200 201 202 204 208 212 213 214 217 218 222 224 225 226 227 230 233 234 239 240 241 243 244 b 247 0 0 0 1 6 8 10 11 12 13 16 18 19 21 22 28 30 34 35 40 41 44 45 46 48 49 55 56 57 58 61 62 63 65 67 69 71 72 78 83 84 85 87 88 95 96 97 101 105 106 109 110 117 118 122 123 125 128 129 130 132 133 135 136 139 140 145 147 150 151 152 153 156 157 158 160 162 163 166 173 174 175 178 179 180 181 182 186 190 192 194 196 197 198 200 201 202 204 208 212 213 214 217 218 222 224 225 226 227 230 233 234 239 240 241 243 244 # 29186 revdifference c a 247 0 0 0 1 6 8 10 11 12 13 16 18 19 21 22 28 30 34 35 40 41 44 45 46 48 49 55 56 57 58 61 62 63 65 67 69 71 72 78 83 84 85 87 88 95 96 97 101 105 106 109 110 117 118 122 123 125 128 129 130 132 133 135 136 139 140 145 147 150 151 152 153 156 157 158 160 162 163 166 173 174 175 178 179 180 181 182 186 190 192 194 196 197 198 200 201 202 204 208 212 213 214 217 218 222 224 225 226 227 230 233 234 239 240 241 243 244 b 247 1 0 f # 29187 revdifference c a 247 0 0 0 2 7 9 13 15 17 18 19 25 26 27 28 31 35 36 38 43 45 46 47 48 49 51 53 55 56 57 58 61 63 66 67 68 72 73 75 78 83 84 86 87 91 95 96 98 99 100 101 104 105 111 113 114 117 119 123 124 125 127 130 131 135 137 139 141 142 143 145 147 148 151 152 153 154 155 156 158 161 163 165 166 167 168 169 170 171 172 173 174 176 177 178 179 182 188 190 193 194 195 196 197 198 200 201 204 206 207 209 210 211 215 216 217 219 221 222 223 224 225 226 227 228 229 232 233 234 235 236 237 238 242 243 244 b 247 0 0 0 2 7 9 13 15 17 18 19 25 26 27 28 31 35 36 38 43 45 46 47 48 49 51 53 55 56 57 58 61 63 66 67 68 72 73 75 78 83 84 86 87 91 95 96 98 99 100 101 104 105 111 113 114 117 119 123 124 125 127 130 131 135 137 139 141 142 143 145 147 148 151 152 153 154 155 156 158 161 163 165 166 167 168 169 170 171 172 173 174 176 177 178 179 182 188 190 193 194 195 196 197 198 200 201 204 206 207 209 210 211 215 216 217 219 221 222 223 224 225 226 227 228 229 232 233 234 235 236 237 238 242 243 244 # 29188 revdifference c a 247 0 0 0 2 7 9 13 15 17 18 19 25 26 27 28 31 35 36 38 43 45 46 47 48 49 51 53 55 56 57 58 61 63 66 67 68 72 73 75 78 83 84 86 87 91 95 96 98 99 100 101 104 105 111 113 114 117 119 123 124 125 127 130 131 135 137 139 141 142 143 145 147 148 151 152 153 154 155 156 158 161 163 165 166 167 168 169 170 171 172 173 174 176 177 178 179 182 188 190 193 194 195 196 197 198 200 201 204 206 207 209 210 211 215 216 217 219 221 222 223 224 225 226 227 228 229 232 233 234 235 236 237 238 242 243 244 b 247 1 0 0 1 2 3 5 6 7 8 9 10 14 15 18 19 21 22 23 26 27 29 32 34 36 37 39 41 43 45 46 47 49 50 51 52 54 55 56 58 59 64 66 67 68 69 72 73 76 81 85 91 92 96 99 101 105 106 109 111 112 113 114 116 118 121 125 126 128 129 130 132 136 141 142 144 145 146 150 151 153 154 155 156 157 159 160 162 166 168 170 171 173 175 176 177 179 182 183 185 186 187 190 193 194 195 199 200 202 203 204 206 207 210 211 212 214 215 217 218 219 220 221 222 225 227 229 230 231 233 234 236 237 238 241 242 245 # 29189 revdifference c a 247 0 0 e b 247 0 0 e # 29190 revdifference c a 247 0 0 e b 247 1 1 e # 29191 revdifference c a 247 0 0 e b 247 0 0 e # 29192 revdifference c a 247 0 0 e b 247 1 1 f # 29193 revdifference c a 247 0 0 e b 247 0 0 e # 29194 revdifference c a 247 0 0 e b 247 1 1 5 7 9 14 16 17 19 20 22 23 24 25 26 27 28 29 34 35 37 38 39 40 44 48 49 51 52 54 55 57 58 61 62 63 67 70 74 78 80 83 84 85 86 87 88 93 94 95 98 99 100 101 107 120 127 128 130 131 134 136 140 142 144 149 150 155 156 157 158 159 160 161 166 167 168 169 171 173 174 178 179 181 182 184 187 189 192 193 195 198 203 208 211 212 215 216 217 218 219 220 225 227 228 232 234 235 236 241 244 245 # 29195 revdifference c a 247 0 0 f b 247 0 0 f # 29196 revdifference c a 247 0 0 f b 247 1 1 e # 29197 revdifference c a 247 0 0 f b 247 0 0 f # 29198 revdifference c a 247 0 0 f b 247 1 1 f # 29199 revdifference c a 247 0 0 f b 247 0 0 f # 29200 revdifference c a 247 0 0 f b 247 1 1 0 1 3 6 7 8 9 12 13 14 15 16 18 19 20 24 25 26 28 29 30 31 32 33 41 42 43 44 46 48 49 51 55 61 63 64 65 70 75 76 79 81 83 85 86 87 88 89 92 95 100 102 104 107 108 109 113 115 116 117 119 120 121 122 123 126 128 130 131 132 133 134 140 141 142 144 149 155 160 162 165 166 167 172 174 175 177 179 180 182 184 186 194 195 197 199 200 201 202 203 204 205 206 208 209 214 217 219 220 221 225 227 228 229 230 231 233 234 238 242 243 # 29201 revdifference c a 247 0 0 0 2 3 5 7 10 12 13 14 15 17 19 21 22 25 29 30 32 37 38 40 41 42 43 44 45 46 47 50 51 55 59 61 65 67 68 71 73 74 76 80 81 82 83 86 87 88 89 90 91 92 97 102 103 105 106 111 114 115 116 117 118 120 121 123 125 127 130 131 132 133 136 138 139 140 142 143 144 145 146 148 150 159 160 163 165 167 170 173 176 177 178 179 181 183 188 191 192 193 194 195 196 198 200 201 204 205 207 208 210 212 213 214 218 220 221 224 228 230 231 234 236 239 240 242 243 245 246 b 247 0 0 0 2 3 5 7 10 12 13 14 15 17 19 21 22 25 29 30 32 37 38 40 41 42 43 44 45 46 47 50 51 55 59 61 65 67 68 71 73 74 76 80 81 82 83 86 87 88 89 90 91 92 97 102 103 105 106 111 114 115 116 117 118 120 121 123 125 127 130 131 132 133 136 138 139 140 142 143 144 145 146 148 150 159 160 163 165 167 170 173 176 177 178 179 181 183 188 191 192 193 194 195 196 198 200 201 204 205 207 208 210 212 213 214 218 220 221 224 228 230 231 234 236 239 240 242 243 245 246 # 29202 revdifference c a 247 0 0 0 2 3 5 7 10 12 13 14 15 17 19 21 22 25 29 30 32 37 38 40 41 42 43 44 45 46 47 50 51 55 59 61 65 67 68 71 73 74 76 80 81 82 83 86 87 88 89 90 91 92 97 102 103 105 106 111 114 115 116 117 118 120 121 123 125 127 130 131 132 133 136 138 139 140 142 143 144 145 146 148 150 159 160 163 165 167 170 173 176 177 178 179 181 183 188 191 192 193 194 195 196 198 200 201 204 205 207 208 210 212 213 214 218 220 221 224 228 230 231 234 236 239 240 242 243 245 246 b 247 1 1 e # 29203 revdifference c a 247 0 0 0 2 4 5 6 10 11 14 15 16 17 18 20 22 23 26 27 29 30 32 33 35 39 42 43 44 45 46 47 48 49 51 56 60 63 65 66 67 70 71 72 73 75 78 80 82 84 86 87 88 90 91 92 94 95 97 98 99 105 107 110 112 113 115 122 124 125 129 131 133 134 135 136 139 145 146 147 148 152 154 155 156 157 160 161 169 171 175 178 180 181 182 183 186 190 192 193 194 198 199 200 201 202 205 206 207 209 210 211 212 213 214 215 219 220 221 223 224 229 230 232 233 234 236 237 239 242 244 245 b 247 0 0 0 2 4 5 6 10 11 14 15 16 17 18 20 22 23 26 27 29 30 32 33 35 39 42 43 44 45 46 47 48 49 51 56 60 63 65 66 67 70 71 72 73 75 78 80 82 84 86 87 88 90 91 92 94 95 97 98 99 105 107 110 112 113 115 122 124 125 129 131 133 134 135 136 139 145 146 147 148 152 154 155 156 157 160 161 169 171 175 178 180 181 182 183 186 190 192 193 194 198 199 200 201 202 205 206 207 209 210 211 212 213 214 215 219 220 221 223 224 229 230 232 233 234 236 237 239 242 244 245 # 29204 revdifference c a 247 0 0 0 2 4 5 6 10 11 14 15 16 17 18 20 22 23 26 27 29 30 32 33 35 39 42 43 44 45 46 47 48 49 51 56 60 63 65 66 67 70 71 72 73 75 78 80 82 84 86 87 88 90 91 92 94 95 97 98 99 105 107 110 112 113 115 122 124 125 129 131 133 134 135 136 139 145 146 147 148 152 154 155 156 157 160 161 169 171 175 178 180 181 182 183 186 190 192 193 194 198 199 200 201 202 205 206 207 209 210 211 212 213 214 215 219 220 221 223 224 229 230 232 233 234 236 237 239 242 244 245 b 247 1 1 f # 29205 revdifference c a 247 0 0 3 4 7 10 11 12 13 14 16 21 22 25 27 28 29 30 36 38 40 41 43 44 45 47 49 51 52 54 58 61 65 66 69 70 72 75 77 78 79 87 88 90 91 95 100 102 103 104 105 107 108 110 115 116 117 118 121 123 125 126 130 132 133 134 135 136 138 140 142 144 149 150 151 152 154 155 157 159 162 165 166 167 169 175 177 179 180 184 188 189 195 198 199 202 207 209 210 211 217 218 220 222 227 228 229 231 235 236 237 238 240 244 245 246 b 247 0 0 3 4 7 10 11 12 13 14 16 21 22 25 27 28 29 30 36 38 40 41 43 44 45 47 49 51 52 54 58 61 65 66 69 70 72 75 77 78 79 87 88 90 91 95 100 102 103 104 105 107 108 110 115 116 117 118 121 123 125 126 130 132 133 134 135 136 138 140 142 144 149 150 151 152 154 155 157 159 162 165 166 167 169 175 177 179 180 184 188 189 195 198 199 202 207 209 210 211 217 218 220 222 227 228 229 231 235 236 237 238 240 244 245 246 # 29206 revdifference c a 247 0 0 3 4 7 10 11 12 13 14 16 21 22 25 27 28 29 30 36 38 40 41 43 44 45 47 49 51 52 54 58 61 65 66 69 70 72 75 77 78 79 87 88 90 91 95 100 102 103 104 105 107 108 110 115 116 117 118 121 123 125 126 130 132 133 134 135 136 138 140 142 144 149 150 151 152 154 155 157 159 162 165 166 167 169 175 177 179 180 184 188 189 195 198 199 202 207 209 210 211 217 218 220 222 227 228 229 231 235 236 237 238 240 244 245 246 b 247 1 1 1 2 3 4 8 9 14 16 18 21 23 24 25 26 29 31 36 37 40 41 42 45 46 49 50 51 52 53 54 55 56 57 61 62 63 67 69 72 79 80 82 83 85 87 89 91 94 95 96 98 100 103 104 105 106 112 114 115 116 118 123 128 131 133 136 140 141 143 144 146 147 148 149 152 153 154 158 160 162 168 169 171 172 173 174 175 178 182 185 186 187 190 191 192 193 195 197 200 201 204 208 209 210 211 217 225 227 233 234 235 236 237 239 240 241 242 245 246 # 29207 revdifference c a 247 0 1 e b 247 0 1 e # 29208 revdifference c a 247 0 1 e b 247 0 0 e # 29209 revdifference c a 247 0 1 e b 247 0 1 e # 29210 revdifference c a 247 0 1 e b 247 0 0 f # 29211 revdifference c a 247 0 1 e b 247 0 1 e # 29212 revdifference c a 247 0 1 e b 247 0 0 0 1 2 6 7 10 12 16 18 19 21 22 23 24 25 26 29 30 32 33 38 39 40 41 42 43 46 48 49 50 51 52 53 54 55 56 57 62 74 75 76 77 80 83 86 90 91 94 95 96 100 104 109 110 112 116 120 122 124 125 126 130 132 134 136 138 141 142 148 149 150 153 154 155 156 157 160 162 163 165 174 175 181 182 184 189 190 194 195 198 202 203 204 205 208 209 212 214 216 218 219 221 230 231 232 233 234 236 238 239 240 242 243 245 # 29213 revdifference c a 247 0 1 f b 247 0 1 f # 29214 revdifference c a 247 0 1 f b 247 0 0 e # 29215 revdifference c a 247 0 1 f b 247 0 1 f # 29216 revdifference c a 247 0 1 f b 247 0 0 f # 29217 revdifference c a 247 0 1 f b 247 0 1 f # 29218 revdifference c a 247 0 1 f b 247 0 0 1 5 7 9 10 11 14 16 17 18 27 28 29 32 37 38 39 40 41 43 48 50 53 54 55 57 58 60 61 62 63 67 70 71 74 78 82 83 85 86 87 88 91 94 95 97 98 99 101 102 104 105 106 108 109 110 113 115 116 118 120 125 127 128 130 132 134 135 137 142 143 150 153 155 156 157 158 159 160 161 163 165 166 168 170 172 174 176 178 180 185 188 191 192 193 194 196 197 198 202 204 205 206 207 210 211 212 218 220 222 223 225 226 227 229 231 234 236 237 238 241 246 # 29219 revdifference c a 247 0 1 0 1 2 4 9 14 19 21 22 25 26 33 35 37 39 40 41 47 49 51 52 55 56 57 61 64 65 67 68 69 70 72 73 74 78 79 80 83 84 85 86 87 88 90 91 92 95 97 98 100 102 103 107 108 111 112 113 116 124 125 128 129 131 134 135 136 138 145 146 147 148 149 153 154 155 156 159 161 162 163 164 165 166 167 171 172 174 175 177 178 180 182 183 185 186 188 192 194 195 197 198 199 201 203 206 207 209 210 211 213 214 215 217 221 222 225 227 229 230 231 232 234 236 237 239 240 242 244 245 b 247 0 1 0 1 2 4 9 14 19 21 22 25 26 33 35 37 39 40 41 47 49 51 52 55 56 57 61 64 65 67 68 69 70 72 73 74 78 79 80 83 84 85 86 87 88 90 91 92 95 97 98 100 102 103 107 108 111 112 113 116 124 125 128 129 131 134 135 136 138 145 146 147 148 149 153 154 155 156 159 161 162 163 164 165 166 167 171 172 174 175 177 178 180 182 183 185 186 188 192 194 195 197 198 199 201 203 206 207 209 210 211 213 214 215 217 221 222 225 227 229 230 231 232 234 236 237 239 240 242 244 245 # 29220 revdifference c a 247 0 1 0 1 2 4 9 14 19 21 22 25 26 33 35 37 39 40 41 47 49 51 52 55 56 57 61 64 65 67 68 69 70 72 73 74 78 79 80 83 84 85 86 87 88 90 91 92 95 97 98 100 102 103 107 108 111 112 113 116 124 125 128 129 131 134 135 136 138 145 146 147 148 149 153 154 155 156 159 161 162 163 164 165 166 167 171 172 174 175 177 178 180 182 183 185 186 188 192 194 195 197 198 199 201 203 206 207 209 210 211 213 214 215 217 221 222 225 227 229 230 231 232 234 236 237 239 240 242 244 245 b 247 0 0 e # 29221 revdifference c a 247 0 1 1 2 3 5 6 10 12 13 14 15 16 20 23 24 25 26 28 29 32 36 37 38 47 48 49 51 52 53 54 55 57 60 61 63 64 65 66 67 68 69 73 74 77 79 80 81 82 83 86 87 89 91 92 93 94 95 97 98 101 103 104 107 109 110 111 113 114 115 118 124 126 128 129 130 132 139 142 143 146 148 149 150 152 154 155 156 157 159 166 167 168 170 172 174 175 176 177 179 184 187 188 189 193 194 195 198 200 204 207 209 210 211 216 217 219 220 221 223 225 226 227 230 232 234 235 236 238 241 242 243 b 247 0 1 1 2 3 5 6 10 12 13 14 15 16 20 23 24 25 26 28 29 32 36 37 38 47 48 49 51 52 53 54 55 57 60 61 63 64 65 66 67 68 69 73 74 77 79 80 81 82 83 86 87 89 91 92 93 94 95 97 98 101 103 104 107 109 110 111 113 114 115 118 124 126 128 129 130 132 139 142 143 146 148 149 150 152 154 155 156 157 159 166 167 168 170 172 174 175 176 177 179 184 187 188 189 193 194 195 198 200 204 207 209 210 211 216 217 219 220 221 223 225 226 227 230 232 234 235 236 238 241 242 243 # 29222 revdifference c a 247 0 1 1 2 3 5 6 10 12 13 14 15 16 20 23 24 25 26 28 29 32 36 37 38 47 48 49 51 52 53 54 55 57 60 61 63 64 65 66 67 68 69 73 74 77 79 80 81 82 83 86 87 89 91 92 93 94 95 97 98 101 103 104 107 109 110 111 113 114 115 118 124 126 128 129 130 132 139 142 143 146 148 149 150 152 154 155 156 157 159 166 167 168 170 172 174 175 176 177 179 184 187 188 189 193 194 195 198 200 204 207 209 210 211 216 217 219 220 221 223 225 226 227 230 232 234 235 236 238 241 242 243 b 247 0 0 f # 29223 revdifference c a 247 0 1 1 3 4 7 8 12 13 15 16 17 18 19 20 21 22 25 27 31 33 34 36 37 38 39 43 45 46 48 49 51 52 54 55 58 59 60 62 64 67 70 71 72 73 74 76 77 78 84 96 97 102 105 106 107 109 111 113 116 118 120 122 124 126 130 131 133 135 138 139 142 143 144 147 148 152 154 158 159 160 161 165 166 167 168 169 170 172 173 174 175 178 179 184 186 188 189 190 194 195 197 198 201 204 208 212 213 215 216 218 219 220 221 225 227 228 230 234 236 238 239 240 241 242 243 244 b 247 0 1 1 3 4 7 8 12 13 15 16 17 18 19 20 21 22 25 27 31 33 34 36 37 38 39 43 45 46 48 49 51 52 54 55 58 59 60 62 64 67 70 71 72 73 74 76 77 78 84 96 97 102 105 106 107 109 111 113 116 118 120 122 124 126 130 131 133 135 138 139 142 143 144 147 148 152 154 158 159 160 161 165 166 167 168 169 170 172 173 174 175 178 179 184 186 188 189 190 194 195 197 198 201 204 208 212 213 215 216 218 219 220 221 225 227 228 230 234 236 238 239 240 241 242 243 244 # 29224 revdifference c a 247 0 1 1 3 4 7 8 12 13 15 16 17 18 19 20 21 22 25 27 31 33 34 36 37 38 39 43 45 46 48 49 51 52 54 55 58 59 60 62 64 67 70 71 72 73 74 76 77 78 84 96 97 102 105 106 107 109 111 113 116 118 120 122 124 126 130 131 133 135 138 139 142 143 144 147 148 152 154 158 159 160 161 165 166 167 168 169 170 172 173 174 175 178 179 184 186 188 189 190 194 195 197 198 201 204 208 212 213 215 216 218 219 220 221 225 227 228 230 234 236 238 239 240 241 242 243 244 b 247 0 0 0 1 4 6 8 9 10 11 14 15 16 21 22 23 25 26 28 30 34 35 36 37 39 41 43 46 47 51 52 54 57 58 59 64 69 71 72 73 74 75 76 78 80 83 85 87 88 89 90 91 96 97 98 99 100 101 102 104 107 108 111 112 117 118 120 121 124 125 127 128 130 134 135 136 138 139 140 141 142 143 146 147 148 149 151 152 154 155 159 160 163 164 166 167 168 169 170 171 172 174 176 177 179 180 184 188 189 191 192 193 194 195 197 204 205 208 209 213 214 220 221 222 223 225 226 227 230 231 237 238 239 241 243 244 246 # 29225 revdifference c a 247 0 1 e b 247 0 1 e # 29226 revdifference c a 247 0 1 e b 247 0 1 e # 29227 revdifference c a 247 0 1 e b 247 0 1 e # 29228 revdifference c a 247 0 1 e b 247 0 1 f # 29229 revdifference c a 247 0 1 e b 247 0 1 e # 29230 revdifference c a 247 0 1 e b 247 0 1 0 1 4 7 8 9 13 17 18 20 23 24 27 28 29 30 31 32 41 42 43 47 48 51 52 54 55 56 59 62 65 66 67 69 71 72 73 74 78 80 84 88 89 92 93 96 101 103 104 107 108 111 116 118 121 122 124 126 127 131 132 133 134 135 137 138 141 143 146 148 149 150 152 155 156 158 162 165 167 168 169 171 172 174 176 177 178 179 184 185 186 187 188 189 190 192 193 194 196 198 204 206 207 208 210 212 213 214 215 216 217 218 219 221 224 226 229 230 231 232 234 235 236 237 239 245 # 29231 revdifference c a 247 0 1 f b 247 0 1 f # 29232 revdifference c a 247 0 1 f b 247 0 1 e # 29233 revdifference c a 247 0 1 f b 247 0 1 f # 29234 revdifference c a 247 0 1 f b 247 0 1 f # 29235 revdifference c a 247 0 1 f b 247 0 1 f # 29236 revdifference c a 247 0 1 f b 247 0 1 0 1 2 3 5 6 7 11 12 14 19 23 25 27 28 30 31 32 33 34 36 37 38 40 43 44 47 48 49 50 51 52 54 65 66 67 68 69 71 75 76 77 78 81 86 87 88 90 94 95 98 99 101 102 108 110 114 115 116 117 118 121 122 123 124 128 133 134 135 138 140 141 142 144 145 147 148 149 151 152 153 154 155 158 162 163 168 170 174 177 178 179 180 182 183 185 187 188 192 193 195 197 202 204 206 207 209 210 212 213 216 217 218 219 223 226 227 230 232 233 234 237 239 246 # 29237 revdifference c a 247 0 1 2 3 5 9 11 12 13 14 16 17 20 22 23 24 26 28 30 31 32 33 34 36 38 39 40 42 43 45 47 48 49 51 53 55 59 60 62 63 64 65 66 67 69 70 72 73 76 77 80 83 85 86 87 90 93 94 96 97 99 100 101 103 104 106 110 111 112 114 116 117 118 121 123 134 136 137 138 141 143 144 147 152 153 158 159 160 161 162 165 166 168 170 173 180 182 183 188 189 191 192 197 198 201 203 204 205 206 207 211 212 214 215 216 217 220 221 223 224 231 233 234 235 236 237 238 239 240 242 243 244 245 246 b 247 0 1 2 3 5 9 11 12 13 14 16 17 20 22 23 24 26 28 30 31 32 33 34 36 38 39 40 42 43 45 47 48 49 51 53 55 59 60 62 63 64 65 66 67 69 70 72 73 76 77 80 83 85 86 87 90 93 94 96 97 99 100 101 103 104 106 110 111 112 114 116 117 118 121 123 134 136 137 138 141 143 144 147 152 153 158 159 160 161 162 165 166 168 170 173 180 182 183 188 189 191 192 197 198 201 203 204 205 206 207 211 212 214 215 216 217 220 221 223 224 231 233 234 235 236 237 238 239 240 242 243 244 245 246 # 29238 revdifference c a 247 0 1 2 3 5 9 11 12 13 14 16 17 20 22 23 24 26 28 30 31 32 33 34 36 38 39 40 42 43 45 47 48 49 51 53 55 59 60 62 63 64 65 66 67 69 70 72 73 76 77 80 83 85 86 87 90 93 94 96 97 99 100 101 103 104 106 110 111 112 114 116 117 118 121 123 134 136 137 138 141 143 144 147 152 153 158 159 160 161 162 165 166 168 170 173 180 182 183 188 189 191 192 197 198 201 203 204 205 206 207 211 212 214 215 216 217 220 221 223 224 231 233 234 235 236 237 238 239 240 242 243 244 245 246 b 247 0 1 e # 29239 revdifference c a 247 0 1 0 1 4 5 7 8 9 13 14 16 17 19 21 22 24 27 32 33 35 36 37 39 40 41 42 45 46 51 56 57 58 62 66 67 70 73 74 75 77 79 80 81 82 90 91 92 94 96 97 99 101 103 104 105 108 109 111 114 115 116 118 120 121 122 123 125 127 128 130 137 139 141 142 143 144 145 146 147 149 150 153 155 156 158 159 160 161 164 165 166 171 172 173 174 175 176 177 178 179 181 183 184 186 187 188 190 191 196 201 204 211 212 213 214 215 220 225 228 229 230 232 234 236 238 240 242 243 245 b 247 0 1 0 1 4 5 7 8 9 13 14 16 17 19 21 22 24 27 32 33 35 36 37 39 40 41 42 45 46 51 56 57 58 62 66 67 70 73 74 75 77 79 80 81 82 90 91 92 94 96 97 99 101 103 104 105 108 109 111 114 115 116 118 120 121 122 123 125 127 128 130 137 139 141 142 143 144 145 146 147 149 150 153 155 156 158 159 160 161 164 165 166 171 172 173 174 175 176 177 178 179 181 183 184 186 187 188 190 191 196 201 204 211 212 213 214 215 220 225 228 229 230 232 234 236 238 240 242 243 245 # 29240 revdifference c a 247 0 1 0 1 4 5 7 8 9 13 14 16 17 19 21 22 24 27 32 33 35 36 37 39 40 41 42 45 46 51 56 57 58 62 66 67 70 73 74 75 77 79 80 81 82 90 91 92 94 96 97 99 101 103 104 105 108 109 111 114 115 116 118 120 121 122 123 125 127 128 130 137 139 141 142 143 144 145 146 147 149 150 153 155 156 158 159 160 161 164 165 166 171 172 173 174 175 176 177 178 179 181 183 184 186 187 188 190 191 196 201 204 211 212 213 214 215 220 225 228 229 230 232 234 236 238 240 242 243 245 b 247 0 1 f # 29241 revdifference c a 247 0 1 2 3 6 8 9 10 12 13 16 17 20 21 23 25 26 28 29 30 32 33 36 38 39 40 41 42 43 44 46 48 50 51 52 53 54 56 57 58 59 66 68 70 71 73 75 80 82 83 85 87 89 90 91 93 95 98 100 101 102 103 104 106 108 111 112 115 117 118 119 120 121 122 124 126 129 132 135 136 139 140 141 142 148 151 153 154 155 157 159 160 161 162 163 166 172 173 174 178 180 181 182 183 184 185 186 188 190 191 192 193 194 197 199 201 202 204 205 207 208 211 214 217 220 223 227 229 234 242 243 244 245 246 b 247 0 1 2 3 6 8 9 10 12 13 16 17 20 21 23 25 26 28 29 30 32 33 36 38 39 40 41 42 43 44 46 48 50 51 52 53 54 56 57 58 59 66 68 70 71 73 75 80 82 83 85 87 89 90 91 93 95 98 100 101 102 103 104 106 108 111 112 115 117 118 119 120 121 122 124 126 129 132 135 136 139 140 141 142 148 151 153 154 155 157 159 160 161 162 163 166 172 173 174 178 180 181 182 183 184 185 186 188 190 191 192 193 194 197 199 201 202 204 205 207 208 211 214 217 220 223 227 229 234 242 243 244 245 246 # 29242 revdifference c a 247 0 1 2 3 6 8 9 10 12 13 16 17 20 21 23 25 26 28 29 30 32 33 36 38 39 40 41 42 43 44 46 48 50 51 52 53 54 56 57 58 59 66 68 70 71 73 75 80 82 83 85 87 89 90 91 93 95 98 100 101 102 103 104 106 108 111 112 115 117 118 119 120 121 122 124 126 129 132 135 136 139 140 141 142 148 151 153 154 155 157 159 160 161 162 163 166 172 173 174 178 180 181 182 183 184 185 186 188 190 191 192 193 194 197 199 201 202 204 205 207 208 211 214 217 220 223 227 229 234 242 243 244 245 246 b 247 0 1 0 5 9 10 12 14 16 23 24 25 26 27 28 30 31 32 34 38 39 41 42 45 46 48 49 53 56 57 59 61 66 68 69 72 75 76 79 81 83 84 85 87 88 93 94 95 97 100 102 104 107 109 110 111 116 117 118 119 122 123 125 127 129 134 135 138 139 140 142 144 146 147 148 149 154 155 158 159 162 165 167 168 170 171 172 173 176 179 180 181 186 188 189 191 192 196 197 199 202 203 208 209 211 214 215 216 217 220 223 224 225 227 228 229 230 233 237 238 239 241 242 243 245 246 # 29243 revdifference c a 247 0 1 e b 247 0 1 e # 29244 revdifference c a 247 0 1 e b 247 1 0 e # 29245 revdifference c a 247 0 1 e b 247 0 1 e # 29246 revdifference c a 247 0 1 e b 247 1 0 f # 29247 revdifference c a 247 0 1 e b 247 0 1 e # 29248 revdifference c a 247 0 1 e b 247 1 0 1 2 3 11 14 18 19 20 22 23 24 25 27 30 32 33 38 40 43 47 48 50 52 53 55 57 58 59 60 63 68 70 71 74 75 76 78 81 82 84 86 88 89 90 91 94 96 98 99 100 101 110 111 113 115 116 119 120 122 125 126 129 130 132 136 137 140 144 147 148 150 151 152 153 154 156 157 162 164 167 168 169 170 171 176 180 183 186 188 190 192 194 195 196 198 199 201 202 204 205 206 207 209 216 218 219 220 223 224 225 226 227 234 237 238 239 240 243 244 # 29249 revdifference c a 247 0 1 f b 247 0 1 f # 29250 revdifference c a 247 0 1 f b 247 1 0 e # 29251 revdifference c a 247 0 1 f b 247 0 1 f # 29252 revdifference c a 247 0 1 f b 247 1 0 f # 29253 revdifference c a 247 0 1 f b 247 0 1 f # 29254 revdifference c a 247 0 1 f b 247 1 0 1 5 8 10 12 14 16 19 21 22 24 27 28 29 32 34 39 40 44 46 47 48 49 50 52 53 55 56 57 59 60 61 63 66 72 73 74 75 78 85 88 89 91 93 94 95 96 97 101 102 104 108 109 113 114 115 116 118 119 120 122 124 125 127 131 134 135 136 139 141 143 144 147 150 152 153 154 155 158 159 160 162 163 165 166 168 170 172 174 175 179 180 183 184 188 195 196 199 200 203 207 208 209 210 211 216 217 218 219 223 225 226 229 231 233 234 235 236 238 239 241 245 246 # 29255 revdifference c a 247 0 1 1 3 5 7 9 10 11 13 16 17 18 19 20 23 27 30 31 34 36 37 40 42 44 47 50 52 54 59 61 62 63 69 72 74 75 76 78 79 80 81 84 86 89 91 92 94 96 97 100 101 102 103 106 108 109 114 116 117 118 120 123 124 125 126 128 130 131 135 136 139 140 144 146 147 148 149 150 151 158 160 162 164 167 168 169 170 171 173 178 181 182 183 186 188 189 190 191 193 197 199 200 201 202 203 204 205 216 218 219 220 221 222 227 229 230 232 235 238 239 240 243 244 b 247 0 1 1 3 5 7 9 10 11 13 16 17 18 19 20 23 27 30 31 34 36 37 40 42 44 47 50 52 54 59 61 62 63 69 72 74 75 76 78 79 80 81 84 86 89 91 92 94 96 97 100 101 102 103 106 108 109 114 116 117 118 120 123 124 125 126 128 130 131 135 136 139 140 144 146 147 148 149 150 151 158 160 162 164 167 168 169 170 171 173 178 181 182 183 186 188 189 190 191 193 197 199 200 201 202 203 204 205 216 218 219 220 221 222 227 229 230 232 235 238 239 240 243 244 # 29256 revdifference c a 247 0 1 1 3 5 7 9 10 11 13 16 17 18 19 20 23 27 30 31 34 36 37 40 42 44 47 50 52 54 59 61 62 63 69 72 74 75 76 78 79 80 81 84 86 89 91 92 94 96 97 100 101 102 103 106 108 109 114 116 117 118 120 123 124 125 126 128 130 131 135 136 139 140 144 146 147 148 149 150 151 158 160 162 164 167 168 169 170 171 173 178 181 182 183 186 188 189 190 191 193 197 199 200 201 202 203 204 205 216 218 219 220 221 222 227 229 230 232 235 238 239 240 243 244 b 247 1 0 e # 29257 revdifference c a 247 0 1 0 1 3 4 6 7 8 12 16 17 19 21 22 23 24 27 29 33 36 39 40 41 43 44 46 47 50 56 57 58 59 63 64 67 68 70 73 79 80 81 85 91 92 94 95 96 98 99 100 103 107 108 110 113 114 115 116 120 124 127 129 130 133 135 138 140 141 142 144 148 149 150 153 154 159 161 162 163 164 166 168 169 170 171 176 177 178 179 183 186 187 191 196 198 200 204 206 207 210 211 212 213 219 220 221 223 225 227 229 233 234 240 243 245 b 247 0 1 0 1 3 4 6 7 8 12 16 17 19 21 22 23 24 27 29 33 36 39 40 41 43 44 46 47 50 56 57 58 59 63 64 67 68 70 73 79 80 81 85 91 92 94 95 96 98 99 100 103 107 108 110 113 114 115 116 120 124 127 129 130 133 135 138 140 141 142 144 148 149 150 153 154 159 161 162 163 164 166 168 169 170 171 176 177 178 179 183 186 187 191 196 198 200 204 206 207 210 211 212 213 219 220 221 223 225 227 229 233 234 240 243 245 # 29258 revdifference c a 247 0 1 0 1 3 4 6 7 8 12 16 17 19 21 22 23 24 27 29 33 36 39 40 41 43 44 46 47 50 56 57 58 59 63 64 67 68 70 73 79 80 81 85 91 92 94 95 96 98 99 100 103 107 108 110 113 114 115 116 120 124 127 129 130 133 135 138 140 141 142 144 148 149 150 153 154 159 161 162 163 164 166 168 169 170 171 176 177 178 179 183 186 187 191 196 198 200 204 206 207 210 211 212 213 219 220 221 223 225 227 229 233 234 240 243 245 b 247 1 0 f # 29259 revdifference c a 247 0 1 2 4 6 7 8 9 11 12 16 17 18 22 23 25 26 29 30 31 32 33 34 35 37 38 39 42 45 46 48 49 54 55 57 60 63 64 66 68 69 72 73 74 76 77 78 79 83 87 89 91 92 94 95 96 99 106 108 112 113 116 117 118 124 125 129 131 134 135 136 137 139 141 143 150 151 153 156 157 158 161 163 168 169 170 175 176 179 180 182 185 188 190 193 194 195 198 201 203 205 206 207 210 211 213 215 216 217 218 220 221 222 224 225 226 227 229 232 233 237 239 242 243 244 245 b 247 0 1 2 4 6 7 8 9 11 12 16 17 18 22 23 25 26 29 30 31 32 33 34 35 37 38 39 42 45 46 48 49 54 55 57 60 63 64 66 68 69 72 73 74 76 77 78 79 83 87 89 91 92 94 95 96 99 106 108 112 113 116 117 118 124 125 129 131 134 135 136 137 139 141 143 150 151 153 156 157 158 161 163 168 169 170 175 176 179 180 182 185 188 190 193 194 195 198 201 203 205 206 207 210 211 213 215 216 217 218 220 221 222 224 225 226 227 229 232 233 237 239 242 243 244 245 # 29260 revdifference c a 247 0 1 2 4 6 7 8 9 11 12 16 17 18 22 23 25 26 29 30 31 32 33 34 35 37 38 39 42 45 46 48 49 54 55 57 60 63 64 66 68 69 72 73 74 76 77 78 79 83 87 89 91 92 94 95 96 99 106 108 112 113 116 117 118 124 125 129 131 134 135 136 137 139 141 143 150 151 153 156 157 158 161 163 168 169 170 175 176 179 180 182 185 188 190 193 194 195 198 201 203 205 206 207 210 211 213 215 216 217 218 220 221 222 224 225 226 227 229 232 233 237 239 242 243 244 245 b 247 1 0 0 1 4 6 7 8 9 10 11 12 13 16 17 18 21 24 25 26 27 28 29 32 33 34 36 37 39 42 46 49 50 51 54 56 57 59 60 63 65 68 69 74 75 77 79 81 83 89 90 98 99 101 105 107 108 113 115 117 118 119 121 123 125 129 132 133 134 136 138 140 142 145 146 147 148 149 150 152 154 158 162 164 165 167 171 172 173 176 179 182 184 185 190 193 194 196 199 200 202 203 209 211 214 220 222 224 225 226 227 228 229 230 231 233 235 236 237 241 243 244 246 # 29261 revdifference c a 247 0 1 e b 247 0 1 e # 29262 revdifference c a 247 0 1 e b 247 1 1 e # 29263 revdifference c a 247 0 1 e b 247 0 1 e # 29264 revdifference c a 247 0 1 e b 247 1 1 f # 29265 revdifference c a 247 0 1 e b 247 0 1 e # 29266 revdifference c a 247 0 1 e b 247 1 1 1 3 5 6 7 8 16 17 18 19 20 24 26 27 29 30 32 36 37 38 39 43 44 47 49 50 54 56 57 59 60 61 65 66 68 69 70 76 82 83 84 85 89 92 93 94 95 96 102 105 106 109 111 114 115 116 121 122 123 124 126 127 128 133 134 135 136 141 143 144 146 147 148 156 158 159 162 163 165 166 170 171 172 175 176 178 179 182 183 184 186 189 191 194 196 197 198 202 204 208 212 214 217 218 219 220 222 225 226 228 230 232 233 235 237 239 240 243 244 # 29267 revdifference c a 247 0 1 f b 247 0 1 f # 29268 revdifference c a 247 0 1 f b 247 1 1 e # 29269 revdifference c a 247 0 1 f b 247 0 1 f # 29270 revdifference c a 247 0 1 f b 247 1 1 f # 29271 revdifference c a 247 0 1 f b 247 0 1 f # 29272 revdifference c a 247 0 1 f b 247 1 1 8 13 16 17 18 21 22 24 28 29 30 32 33 37 38 40 41 42 44 46 49 50 53 54 56 58 59 60 63 65 67 69 72 74 75 76 79 83 84 86 87 89 90 95 96 97 98 100 102 103 104 105 109 112 113 115 118 119 120 121 125 126 129 130 132 133 134 135 139 141 144 147 148 150 151 153 154 156 157 158 160 163 167 168 169 173 177 179 180 181 182 184 185 186 187 188 190 192 196 197 198 199 203 205 214 216 219 220 223 224 227 230 231 232 233 234 235 236 237 241 242 243 # 29273 revdifference c a 247 0 1 1 2 3 4 5 7 8 9 12 15 20 22 24 25 26 27 28 39 41 45 46 48 50 51 52 55 58 60 64 65 66 67 70 72 74 77 78 84 88 92 93 94 96 99 100 103 104 106 108 109 113 117 119 120 121 123 124 127 128 129 130 140 141 142 144 147 148 149 150 151 152 154 155 156 157 158 160 162 163 164 169 170 172 174 176 179 182 184 187 189 199 203 204 209 211 213 214 219 223 224 226 228 232 233 236 237 238 240 246 b 247 0 1 1 2 3 4 5 7 8 9 12 15 20 22 24 25 26 27 28 39 41 45 46 48 50 51 52 55 58 60 64 65 66 67 70 72 74 77 78 84 88 92 93 94 96 99 100 103 104 106 108 109 113 117 119 120 121 123 124 127 128 129 130 140 141 142 144 147 148 149 150 151 152 154 155 156 157 158 160 162 163 164 169 170 172 174 176 179 182 184 187 189 199 203 204 209 211 213 214 219 223 224 226 228 232 233 236 237 238 240 246 # 29274 revdifference c a 247 0 1 1 2 3 4 5 7 8 9 12 15 20 22 24 25 26 27 28 39 41 45 46 48 50 51 52 55 58 60 64 65 66 67 70 72 74 77 78 84 88 92 93 94 96 99 100 103 104 106 108 109 113 117 119 120 121 123 124 127 128 129 130 140 141 142 144 147 148 149 150 151 152 154 155 156 157 158 160 162 163 164 169 170 172 174 176 179 182 184 187 189 199 203 204 209 211 213 214 219 223 224 226 228 232 233 236 237 238 240 246 b 247 1 1 e # 29275 revdifference c a 247 0 1 0 2 3 4 6 13 14 15 16 18 21 23 27 28 32 35 36 40 41 42 44 46 48 49 50 52 53 57 58 62 64 65 66 67 71 72 73 75 81 82 83 84 90 92 94 95 97 98 99 100 101 102 103 104 105 106 109 110 112 113 115 117 119 120 123 124 125 128 130 131 133 134 136 138 139 141 144 145 148 149 150 151 155 157 159 162 164 166 167 168 170 174 175 179 182 183 186 187 189 190 194 196 197 198 199 201 204 208 209 212 213 217 220 221 222 225 228 231 233 237 240 241 242 243 244 b 247 0 1 0 2 3 4 6 13 14 15 16 18 21 23 27 28 32 35 36 40 41 42 44 46 48 49 50 52 53 57 58 62 64 65 66 67 71 72 73 75 81 82 83 84 90 92 94 95 97 98 99 100 101 102 103 104 105 106 109 110 112 113 115 117 119 120 123 124 125 128 130 131 133 134 136 138 139 141 144 145 148 149 150 151 155 157 159 162 164 166 167 168 170 174 175 179 182 183 186 187 189 190 194 196 197 198 199 201 204 208 209 212 213 217 220 221 222 225 228 231 233 237 240 241 242 243 244 # 29276 revdifference c a 247 0 1 0 2 3 4 6 13 14 15 16 18 21 23 27 28 32 35 36 40 41 42 44 46 48 49 50 52 53 57 58 62 64 65 66 67 71 72 73 75 81 82 83 84 90 92 94 95 97 98 99 100 101 102 103 104 105 106 109 110 112 113 115 117 119 120 123 124 125 128 130 131 133 134 136 138 139 141 144 145 148 149 150 151 155 157 159 162 164 166 167 168 170 174 175 179 182 183 186 187 189 190 194 196 197 198 199 201 204 208 209 212 213 217 220 221 222 225 228 231 233 237 240 241 242 243 244 b 247 1 1 f # 29277 revdifference c a 247 0 1 0 8 10 14 16 17 18 19 21 23 26 28 31 33 35 37 42 43 44 45 46 48 49 53 55 60 61 64 65 66 68 70 73 74 76 77 78 79 80 85 90 91 93 95 96 101 102 103 104 105 108 109 114 117 118 121 123 124 125 126 128 129 130 132 133 135 137 140 142 143 144 150 151 154 155 156 159 165 167 168 170 172 173 175 177 179 181 182 183 186 188 192 193 194 195 196 198 200 201 202 203 206 207 209 211 212 214 216 219 220 221 230 232 233 234 237 239 240 241 242 243 244 246 b 247 0 1 0 8 10 14 16 17 18 19 21 23 26 28 31 33 35 37 42 43 44 45 46 48 49 53 55 60 61 64 65 66 68 70 73 74 76 77 78 79 80 85 90 91 93 95 96 101 102 103 104 105 108 109 114 117 118 121 123 124 125 126 128 129 130 132 133 135 137 140 142 143 144 150 151 154 155 156 159 165 167 168 170 172 173 175 177 179 181 182 183 186 188 192 193 194 195 196 198 200 201 202 203 206 207 209 211 212 214 216 219 220 221 230 232 233 234 237 239 240 241 242 243 244 246 # 29278 revdifference c a 247 0 1 0 8 10 14 16 17 18 19 21 23 26 28 31 33 35 37 42 43 44 45 46 48 49 53 55 60 61 64 65 66 68 70 73 74 76 77 78 79 80 85 90 91 93 95 96 101 102 103 104 105 108 109 114 117 118 121 123 124 125 126 128 129 130 132 133 135 137 140 142 143 144 150 151 154 155 156 159 165 167 168 170 172 173 175 177 179 181 182 183 186 188 192 193 194 195 196 198 200 201 202 203 206 207 209 211 212 214 216 219 220 221 230 232 233 234 237 239 240 241 242 243 244 246 b 247 1 1 0 1 4 6 8 9 10 11 13 14 15 16 18 20 22 27 29 30 32 34 36 38 43 46 48 50 52 53 54 59 60 62 63 64 65 69 70 71 74 75 76 80 82 83 85 92 94 96 98 101 102 103 105 106 110 112 113 115 116 119 120 121 123 124 127 131 135 136 138 141 145 149 154 156 161 162 163 164 167 168 173 175 177 178 179 182 183 184 185 189 190 191 192 193 195 197 198 199 201 203 204 205 210 211 212 213 214 216 218 221 222 226 227 229 230 231 232 233 234 236 238 240 241 244 246 # 29279 revdifference c a 247 1 0 e b 247 1 0 e # 29280 revdifference c a 247 1 0 e b 247 0 0 e # 29281 revdifference c a 247 1 0 e b 247 1 0 e # 29282 revdifference c a 247 1 0 e b 247 0 0 f # 29283 revdifference c a 247 1 0 e b 247 1 0 e # 29284 revdifference c a 247 1 0 e b 247 0 0 0 1 2 3 5 6 11 12 14 15 16 17 18 21 23 24 25 26 28 32 36 38 40 43 45 46 48 49 50 52 54 57 58 59 61 65 73 75 76 82 83 84 85 87 88 90 91 97 98 99 100 104 105 107 109 111 113 114 116 123 124 125 129 133 134 136 138 142 143 145 147 148 152 153 156 158 161 162 163 164 165 166 169 170 171 173 174 177 181 182 184 186 187 188 190 193 194 197 198 199 200 206 207 211 214 217 218 221 223 224 226 229 230 234 236 239 240 242 243 244 245 # 29285 revdifference c a 247 1 0 f b 247 1 0 f # 29286 revdifference c a 247 1 0 f b 247 0 0 e # 29287 revdifference c a 247 1 0 f b 247 1 0 f # 29288 revdifference c a 247 1 0 f b 247 0 0 f # 29289 revdifference c a 247 1 0 f b 247 1 0 f # 29290 revdifference c a 247 1 0 f b 247 0 0 4 6 8 12 17 19 21 25 29 30 31 33 38 40 43 45 47 50 51 55 56 57 60 61 64 68 73 75 76 78 80 81 85 86 90 93 97 101 102 103 104 105 106 107 109 110 112 114 115 116 117 120 121 122 124 129 130 132 135 137 138 139 140 141 144 147 148 149 151 152 155 157 159 160 161 163 166 167 170 174 176 179 180 181 182 183 184 185 188 189 192 196 197 202 203 204 206 208 211 212 213 215 216 217 219 220 221 226 229 230 231 234 235 236 237 239 240 241 243 244 245 246 # 29291 revdifference c a 247 1 0 0 1 4 6 10 11 12 13 15 17 20 22 23 31 33 35 36 45 46 48 50 51 52 55 56 57 60 65 68 70 72 73 74 75 76 77 83 84 85 86 87 90 92 94 95 96 97 99 101 104 107 108 109 112 115 119 124 125 127 128 130 134 137 140 142 143 144 145 149 150 151 154 158 160 161 162 164 166 169 170 173 174 176 178 179 181 182 183 184 185 188 191 192 194 195 196 197 200 206 207 208 210 213 217 220 221 223 226 227 228 231 232 233 234 237 242 244 246 b 247 1 0 0 1 4 6 10 11 12 13 15 17 20 22 23 31 33 35 36 45 46 48 50 51 52 55 56 57 60 65 68 70 72 73 74 75 76 77 83 84 85 86 87 90 92 94 95 96 97 99 101 104 107 108 109 112 115 119 124 125 127 128 130 134 137 140 142 143 144 145 149 150 151 154 158 160 161 162 164 166 169 170 173 174 176 178 179 181 182 183 184 185 188 191 192 194 195 196 197 200 206 207 208 210 213 217 220 221 223 226 227 228 231 232 233 234 237 242 244 246 # 29292 revdifference c a 247 1 0 0 1 4 6 10 11 12 13 15 17 20 22 23 31 33 35 36 45 46 48 50 51 52 55 56 57 60 65 68 70 72 73 74 75 76 77 83 84 85 86 87 90 92 94 95 96 97 99 101 104 107 108 109 112 115 119 124 125 127 128 130 134 137 140 142 143 144 145 149 150 151 154 158 160 161 162 164 166 169 170 173 174 176 178 179 181 182 183 184 185 188 191 192 194 195 196 197 200 206 207 208 210 213 217 220 221 223 226 227 228 231 232 233 234 237 242 244 246 b 247 0 0 e # 29293 revdifference c a 247 1 0 1 3 4 7 10 14 19 20 21 22 23 26 27 29 31 32 33 34 35 36 37 38 41 42 43 45 47 50 51 53 54 55 56 57 60 61 62 63 64 65 66 67 68 69 72 76 80 81 84 87 88 89 90 91 92 93 96 100 102 103 104 105 106 107 110 114 115 118 120 121 123 124 125 128 130 131 132 133 134 135 136 137 140 142 144 145 148 149 150 151 152 153 154 156 157 158 159 161 162 164 169 170 175 177 180 181 184 185 186 187 188 189 192 194 195 196 199 200 201 205 207 210 214 217 220 221 222 223 224 225 227 228 229 230 231 232 233 236 238 240 241 246 b 247 1 0 1 3 4 7 10 14 19 20 21 22 23 26 27 29 31 32 33 34 35 36 37 38 41 42 43 45 47 50 51 53 54 55 56 57 60 61 62 63 64 65 66 67 68 69 72 76 80 81 84 87 88 89 90 91 92 93 96 100 102 103 104 105 106 107 110 114 115 118 120 121 123 124 125 128 130 131 132 133 134 135 136 137 140 142 144 145 148 149 150 151 152 153 154 156 157 158 159 161 162 164 169 170 175 177 180 181 184 185 186 187 188 189 192 194 195 196 199 200 201 205 207 210 214 217 220 221 222 223 224 225 227 228 229 230 231 232 233 236 238 240 241 246 # 29294 revdifference c a 247 1 0 1 3 4 7 10 14 19 20 21 22 23 26 27 29 31 32 33 34 35 36 37 38 41 42 43 45 47 50 51 53 54 55 56 57 60 61 62 63 64 65 66 67 68 69 72 76 80 81 84 87 88 89 90 91 92 93 96 100 102 103 104 105 106 107 110 114 115 118 120 121 123 124 125 128 130 131 132 133 134 135 136 137 140 142 144 145 148 149 150 151 152 153 154 156 157 158 159 161 162 164 169 170 175 177 180 181 184 185 186 187 188 189 192 194 195 196 199 200 201 205 207 210 214 217 220 221 222 223 224 225 227 228 229 230 231 232 233 236 238 240 241 246 b 247 0 0 f # 29295 revdifference c a 247 1 0 1 3 4 5 8 10 11 13 19 21 22 24 25 26 28 33 35 36 37 39 40 45 47 49 51 52 55 56 59 61 63 64 65 66 72 73 74 75 76 78 82 89 91 92 93 94 96 98 100 102 104 107 108 110 111 113 115 119 121 122 123 124 127 128 130 131 132 133 135 137 139 140 142 147 148 149 151 152 154 155 156 158 159 160 161 163 165 167 169 170 173 174 175 176 178 179 182 185 190 192 194 199 201 203 204 206 207 208 209 212 214 216 218 221 226 228 235 236 238 242 246 b 247 1 0 1 3 4 5 8 10 11 13 19 21 22 24 25 26 28 33 35 36 37 39 40 45 47 49 51 52 55 56 59 61 63 64 65 66 72 73 74 75 76 78 82 89 91 92 93 94 96 98 100 102 104 107 108 110 111 113 115 119 121 122 123 124 127 128 130 131 132 133 135 137 139 140 142 147 148 149 151 152 154 155 156 158 159 160 161 163 165 167 169 170 173 174 175 176 178 179 182 185 190 192 194 199 201 203 204 206 207 208 209 212 214 216 218 221 226 228 235 236 238 242 246 # 29296 revdifference c a 247 1 0 1 3 4 5 8 10 11 13 19 21 22 24 25 26 28 33 35 36 37 39 40 45 47 49 51 52 55 56 59 61 63 64 65 66 72 73 74 75 76 78 82 89 91 92 93 94 96 98 100 102 104 107 108 110 111 113 115 119 121 122 123 124 127 128 130 131 132 133 135 137 139 140 142 147 148 149 151 152 154 155 156 158 159 160 161 163 165 167 169 170 173 174 175 176 178 179 182 185 190 192 194 199 201 203 204 206 207 208 209 212 214 216 218 221 226 228 235 236 238 242 246 b 247 0 0 1 3 7 9 10 11 12 13 17 18 22 23 26 27 28 32 33 34 38 39 40 41 42 43 44 45 46 47 48 49 52 57 61 64 67 68 70 71 75 78 85 86 87 88 89 91 92 93 97 99 102 104 108 111 112 113 116 117 120 123 125 129 131 132 135 137 138 143 150 152 156 158 166 167 169 175 176 177 181 182 188 190 191 193 195 198 199 203 204 205 206 207 209 211 212 214 220 227 228 231 233 234 238 239 242 245 246 # 29297 revdifference c a 247 1 0 e b 247 1 0 e # 29298 revdifference c a 247 1 0 e b 247 0 1 e # 29299 revdifference c a 247 1 0 e b 247 1 0 e # 29300 revdifference c a 247 1 0 e b 247 0 1 f # 29301 revdifference c a 247 1 0 e b 247 1 0 e # 29302 revdifference c a 247 1 0 e b 247 0 1 0 4 8 9 12 13 14 15 17 21 25 26 27 29 30 32 33 35 37 40 41 42 43 45 47 49 51 52 53 54 57 59 60 62 63 66 67 69 70 72 73 77 78 79 80 82 83 84 85 88 89 92 96 97 98 100 101 102 103 104 105 106 108 109 113 116 118 121 122 127 133 134 136 137 139 140 141 144 148 150 153 157 161 162 163 164 165 167 168 169 171 173 174 178 180 181 183 184 185 187 188 189 192 196 197 199 201 203 207 208 209 210 211 212 214 221 222 223 229 230 231 234 235 236 237 238 239 240 241 242 243 # 29303 revdifference c a 247 1 0 f b 247 1 0 f # 29304 revdifference c a 247 1 0 f b 247 0 1 e # 29305 revdifference c a 247 1 0 f b 247 1 0 f # 29306 revdifference c a 247 1 0 f b 247 0 1 f # 29307 revdifference c a 247 1 0 f b 247 1 0 f # 29308 revdifference c a 247 1 0 f b 247 0 1 0 1 2 4 5 7 8 9 12 15 16 17 19 20 23 29 32 35 36 37 38 39 49 50 51 54 55 56 58 63 64 65 66 67 68 70 72 73 74 77 79 80 82 83 84 86 87 88 89 90 91 94 95 97 98 103 107 109 110 111 114 116 117 118 119 121 122 123 125 126 127 131 132 133 134 136 137 140 143 144 147 148 155 156 157 158 161 164 165 166 167 168 170 171 172 174 177 181 182 184 187 189 191 192 193 195 196 199 200 204 206 210 212 213 214 215 216 218 222 226 227 230 232 234 235 237 238 239 240 241 243 246 # 29309 revdifference c a 247 1 0 2 3 4 6 7 8 9 10 11 15 17 23 25 31 32 34 35 36 38 41 43 45 46 47 50 51 54 55 57 58 59 62 68 69 70 72 73 75 76 78 81 82 83 84 85 86 88 89 90 92 93 94 97 98 100 102 103 106 111 114 117 119 125 126 128 129 130 131 134 135 136 138 140 144 148 149 154 155 157 160 161 163 166 168 169 171 173 174 176 179 181 183 186 187 189 192 193 196 197 198 199 200 203 204 207 208 209 210 215 216 221 222 225 226 228 231 232 233 234 235 237 238 240 241 242 246 b 247 1 0 2 3 4 6 7 8 9 10 11 15 17 23 25 31 32 34 35 36 38 41 43 45 46 47 50 51 54 55 57 58 59 62 68 69 70 72 73 75 76 78 81 82 83 84 85 86 88 89 90 92 93 94 97 98 100 102 103 106 111 114 117 119 125 126 128 129 130 131 134 135 136 138 140 144 148 149 154 155 157 160 161 163 166 168 169 171 173 174 176 179 181 183 186 187 189 192 193 196 197 198 199 200 203 204 207 208 209 210 215 216 221 222 225 226 228 231 232 233 234 235 237 238 240 241 242 246 # 29310 revdifference c a 247 1 0 2 3 4 6 7 8 9 10 11 15 17 23 25 31 32 34 35 36 38 41 43 45 46 47 50 51 54 55 57 58 59 62 68 69 70 72 73 75 76 78 81 82 83 84 85 86 88 89 90 92 93 94 97 98 100 102 103 106 111 114 117 119 125 126 128 129 130 131 134 135 136 138 140 144 148 149 154 155 157 160 161 163 166 168 169 171 173 174 176 179 181 183 186 187 189 192 193 196 197 198 199 200 203 204 207 208 209 210 215 216 221 222 225 226 228 231 232 233 234 235 237 238 240 241 242 246 b 247 0 1 e # 29311 revdifference c a 247 1 0 3 4 7 8 10 16 18 19 21 23 24 27 29 30 31 35 36 37 38 41 42 43 44 47 50 51 54 55 58 59 60 61 62 70 71 72 74 75 76 77 78 81 84 85 95 97 99 100 101 103 106 109 112 113 114 115 116 119 120 121 124 125 129 132 133 136 141 142 144 145 146 152 153 154 155 159 160 161 163 165 166 170 171 178 182 184 188 189 191 192 193 196 198 200 204 205 206 208 210 212 214 215 216 219 221 224 225 227 232 233 234 235 237 238 241 242 243 245 246 b 247 1 0 3 4 7 8 10 16 18 19 21 23 24 27 29 30 31 35 36 37 38 41 42 43 44 47 50 51 54 55 58 59 60 61 62 70 71 72 74 75 76 77 78 81 84 85 95 97 99 100 101 103 106 109 112 113 114 115 116 119 120 121 124 125 129 132 133 136 141 142 144 145 146 152 153 154 155 159 160 161 163 165 166 170 171 178 182 184 188 189 191 192 193 196 198 200 204 205 206 208 210 212 214 215 216 219 221 224 225 227 232 233 234 235 237 238 241 242 243 245 246 # 29312 revdifference c a 247 1 0 3 4 7 8 10 16 18 19 21 23 24 27 29 30 31 35 36 37 38 41 42 43 44 47 50 51 54 55 58 59 60 61 62 70 71 72 74 75 76 77 78 81 84 85 95 97 99 100 101 103 106 109 112 113 114 115 116 119 120 121 124 125 129 132 133 136 141 142 144 145 146 152 153 154 155 159 160 161 163 165 166 170 171 178 182 184 188 189 191 192 193 196 198 200 204 205 206 208 210 212 214 215 216 219 221 224 225 227 232 233 234 235 237 238 241 242 243 245 246 b 247 0 1 f # 29313 revdifference c a 247 1 0 2 3 4 5 10 12 13 16 20 31 32 34 35 36 38 40 41 42 43 44 49 50 52 56 57 58 60 62 63 65 68 70 71 73 75 76 77 82 84 86 87 88 89 90 91 93 94 95 96 99 100 103 104 105 106 107 108 112 114 115 117 118 120 121 123 124 126 129 133 136 140 141 142 143 144 146 150 151 154 155 156 157 160 161 163 165 168 170 171 176 178 180 181 183 186 187 188 191 193 194 195 197 198 201 203 205 206 208 209 211 213 214 215 216 217 218 219 221 222 224 230 231 232 233 234 236 237 239 241 243 244 246 b 247 1 0 2 3 4 5 10 12 13 16 20 31 32 34 35 36 38 40 41 42 43 44 49 50 52 56 57 58 60 62 63 65 68 70 71 73 75 76 77 82 84 86 87 88 89 90 91 93 94 95 96 99 100 103 104 105 106 107 108 112 114 115 117 118 120 121 123 124 126 129 133 136 140 141 142 143 144 146 150 151 154 155 156 157 160 161 163 165 168 170 171 176 178 180 181 183 186 187 188 191 193 194 195 197 198 201 203 205 206 208 209 211 213 214 215 216 217 218 219 221 222 224 230 231 232 233 234 236 237 239 241 243 244 246 # 29314 revdifference c a 247 1 0 2 3 4 5 10 12 13 16 20 31 32 34 35 36 38 40 41 42 43 44 49 50 52 56 57 58 60 62 63 65 68 70 71 73 75 76 77 82 84 86 87 88 89 90 91 93 94 95 96 99 100 103 104 105 106 107 108 112 114 115 117 118 120 121 123 124 126 129 133 136 140 141 142 143 144 146 150 151 154 155 156 157 160 161 163 165 168 170 171 176 178 180 181 183 186 187 188 191 193 194 195 197 198 201 203 205 206 208 209 211 213 214 215 216 217 218 219 221 222 224 230 231 232 233 234 236 237 239 241 243 244 246 b 247 0 1 0 1 3 7 9 10 20 21 22 23 25 28 33 35 37 40 42 44 46 47 49 52 58 60 62 64 65 68 69 70 73 74 75 76 78 82 84 86 88 89 90 91 102 104 107 108 112 114 115 116 117 120 124 128 129 134 136 139 140 141 143 146 147 153 157 160 161 167 169 170 173 174 175 177 178 180 182 184 186 193 197 199 200 202 205 206 208 209 210 211 212 213 215 216 217 221 224 225 226 227 228 230 231 232 233 234 235 236 237 240 243 246 # 29315 revdifference c a 247 1 0 e b 247 1 0 e # 29316 revdifference c a 247 1 0 e b 247 1 0 e # 29317 revdifference c a 247 1 0 e b 247 1 0 e # 29318 revdifference c a 247 1 0 e b 247 1 0 f # 29319 revdifference c a 247 1 0 e b 247 1 0 e # 29320 revdifference c a 247 1 0 e b 247 1 0 2 4 5 6 9 12 13 15 17 18 20 21 22 28 29 30 31 33 36 41 42 45 47 48 49 51 52 54 56 59 62 63 68 69 74 75 77 78 80 82 83 84 85 86 87 90 91 92 94 96 98 100 102 107 110 112 113 115 116 118 120 121 123 127 128 129 131 135 136 137 142 145 150 151 152 154 156 157 159 160 161 164 165 166 167 170 171 172 173 174 176 178 179 181 182 185 186 188 189 191 192 193 194 195 197 199 202 205 206 207 208 209 210 212 213 214 216 217 218 220 224 229 231 236 239 246 # 29321 revdifference c a 247 1 0 f b 247 1 0 f # 29322 revdifference c a 247 1 0 f b 247 1 0 e # 29323 revdifference c a 247 1 0 f b 247 1 0 f # 29324 revdifference c a 247 1 0 f b 247 1 0 f # 29325 revdifference c a 247 1 0 f b 247 1 0 f # 29326 revdifference c a 247 1 0 f b 247 1 0 2 3 4 5 6 8 10 14 16 21 22 24 26 28 30 31 33 34 36 37 38 39 40 41 46 47 51 52 53 54 55 57 59 60 62 64 65 66 67 69 72 73 74 75 76 77 78 80 83 86 88 91 99 101 108 110 111 114 115 117 121 123 125 131 135 136 139 140 142 145 146 147 148 151 152 153 154 156 157 158 161 163 165 169 170 171 172 173 181 184 185 186 187 188 193 195 196 197 199 202 204 206 210 211 213 216 219 220 221 224 225 227 230 231 232 233 235 236 240 241 244 245 246 # 29327 revdifference c a 247 1 0 0 3 4 12 13 14 15 16 17 20 21 22 24 25 26 28 29 31 32 33 34 35 39 41 42 44 45 46 48 50 52 53 54 55 58 62 64 65 68 70 73 74 75 76 77 79 80 83 85 86 87 89 90 91 92 93 94 95 96 99 100 103 105 106 108 110 111 112 114 118 119 121 124 127 128 132 133 135 136 140 143 145 147 151 153 154 158 160 162 167 168 169 171 172 173 174 176 177 181 182 184 185 186 189 191 197 200 201 202 203 204 205 208 210 211 213 215 216 219 220 221 222 224 226 230 233 234 235 240 243 244 245 246 b 247 1 0 0 3 4 12 13 14 15 16 17 20 21 22 24 25 26 28 29 31 32 33 34 35 39 41 42 44 45 46 48 50 52 53 54 55 58 62 64 65 68 70 73 74 75 76 77 79 80 83 85 86 87 89 90 91 92 93 94 95 96 99 100 103 105 106 108 110 111 112 114 118 119 121 124 127 128 132 133 135 136 140 143 145 147 151 153 154 158 160 162 167 168 169 171 172 173 174 176 177 181 182 184 185 186 189 191 197 200 201 202 203 204 205 208 210 211 213 215 216 219 220 221 222 224 226 230 233 234 235 240 243 244 245 246 # 29328 revdifference c a 247 1 0 0 3 4 12 13 14 15 16 17 20 21 22 24 25 26 28 29 31 32 33 34 35 39 41 42 44 45 46 48 50 52 53 54 55 58 62 64 65 68 70 73 74 75 76 77 79 80 83 85 86 87 89 90 91 92 93 94 95 96 99 100 103 105 106 108 110 111 112 114 118 119 121 124 127 128 132 133 135 136 140 143 145 147 151 153 154 158 160 162 167 168 169 171 172 173 174 176 177 181 182 184 185 186 189 191 197 200 201 202 203 204 205 208 210 211 213 215 216 219 220 221 222 224 226 230 233 234 235 240 243 244 245 246 b 247 1 0 e # 29329 revdifference c a 247 1 0 0 1 3 4 5 6 8 10 12 15 17 18 22 23 24 26 27 29 30 31 32 34 35 38 40 41 42 45 47 48 52 55 58 59 60 61 62 63 64 68 71 75 77 81 82 83 84 85 86 93 94 100 101 109 110 118 119 120 122 123 125 127 129 132 134 135 136 140 142 144 146 149 150 153 156 162 163 164 165 166 167 172 173 174 177 178 179 180 181 182 183 184 187 188 189 191 194 197 202 206 207 211 214 215 216 218 221 226 229 230 231 233 235 237 238 243 244 246 b 247 1 0 0 1 3 4 5 6 8 10 12 15 17 18 22 23 24 26 27 29 30 31 32 34 35 38 40 41 42 45 47 48 52 55 58 59 60 61 62 63 64 68 71 75 77 81 82 83 84 85 86 93 94 100 101 109 110 118 119 120 122 123 125 127 129 132 134 135 136 140 142 144 146 149 150 153 156 162 163 164 165 166 167 172 173 174 177 178 179 180 181 182 183 184 187 188 189 191 194 197 202 206 207 211 214 215 216 218 221 226 229 230 231 233 235 237 238 243 244 246 # 29330 revdifference c a 247 1 0 0 1 3 4 5 6 8 10 12 15 17 18 22 23 24 26 27 29 30 31 32 34 35 38 40 41 42 45 47 48 52 55 58 59 60 61 62 63 64 68 71 75 77 81 82 83 84 85 86 93 94 100 101 109 110 118 119 120 122 123 125 127 129 132 134 135 136 140 142 144 146 149 150 153 156 162 163 164 165 166 167 172 173 174 177 178 179 180 181 182 183 184 187 188 189 191 194 197 202 206 207 211 214 215 216 218 221 226 229 230 231 233 235 237 238 243 244 246 b 247 1 0 f # 29331 revdifference c a 247 1 0 1 3 7 8 9 16 17 18 19 21 22 23 25 27 28 29 30 32 35 36 37 38 40 42 44 45 46 47 48 50 54 60 63 65 66 70 72 80 81 82 83 85 87 88 89 91 93 94 95 98 99 100 101 103 105 107 108 111 113 114 115 116 118 119 122 124 128 131 132 133 134 137 138 143 145 146 147 149 150 154 156 158 159 162 164 165 166 168 169 170 172 181 182 185 186 191 192 195 197 199 200 203 206 207 208 211 215 220 221 232 233 234 237 238 239 242 b 247 1 0 1 3 7 8 9 16 17 18 19 21 22 23 25 27 28 29 30 32 35 36 37 38 40 42 44 45 46 47 48 50 54 60 63 65 66 70 72 80 81 82 83 85 87 88 89 91 93 94 95 98 99 100 101 103 105 107 108 111 113 114 115 116 118 119 122 124 128 131 132 133 134 137 138 143 145 146 147 149 150 154 156 158 159 162 164 165 166 168 169 170 172 181 182 185 186 191 192 195 197 199 200 203 206 207 208 211 215 220 221 232 233 234 237 238 239 242 # 29332 revdifference c a 247 1 0 1 3 7 8 9 16 17 18 19 21 22 23 25 27 28 29 30 32 35 36 37 38 40 42 44 45 46 47 48 50 54 60 63 65 66 70 72 80 81 82 83 85 87 88 89 91 93 94 95 98 99 100 101 103 105 107 108 111 113 114 115 116 118 119 122 124 128 131 132 133 134 137 138 143 145 146 147 149 150 154 156 158 159 162 164 165 166 168 169 170 172 181 182 185 186 191 192 195 197 199 200 203 206 207 208 211 215 220 221 232 233 234 237 238 239 242 b 247 1 0 0 1 7 9 11 13 15 18 19 21 22 24 25 29 30 32 37 39 40 42 47 48 49 52 54 55 59 61 62 63 67 70 72 73 74 78 79 83 84 85 86 87 89 90 92 93 97 98 99 101 107 110 111 112 113 114 115 116 118 122 126 128 129 135 136 137 138 142 145 149 150 151 155 156 157 159 160 162 164 167 169 170 171 173 175 176 177 179 180 182 184 185 186 188 191 192 194 195 196 203 205 206 213 216 218 219 220 221 222 225 227 228 229 234 235 237 238 239 240 242 246 # 29333 revdifference c a 247 1 0 e b 247 1 0 e # 29334 revdifference c a 247 1 0 e b 247 1 1 e # 29335 revdifference c a 247 1 0 e b 247 1 0 e # 29336 revdifference c a 247 1 0 e b 247 1 1 f # 29337 revdifference c a 247 1 0 e b 247 1 0 e # 29338 revdifference c a 247 1 0 e b 247 1 1 1 4 6 8 9 11 12 14 15 18 20 21 24 28 29 30 31 32 35 36 38 39 40 43 44 46 48 49 51 53 57 59 60 62 63 64 67 70 72 75 76 77 78 79 80 85 89 94 96 100 102 103 105 106 108 109 110 111 114 118 119 122 123 124 125 127 129 130 133 135 136 138 139 140 141 146 147 148 149 157 158 159 160 161 164 165 166 169 172 173 180 181 182 187 190 198 201 202 204 206 207 212 213 214 218 220 221 222 224 228 230 234 235 236 237 238 240 242 243 # 29339 revdifference c a 247 1 0 f b 247 1 0 f # 29340 revdifference c a 247 1 0 f b 247 1 1 e # 29341 revdifference c a 247 1 0 f b 247 1 0 f # 29342 revdifference c a 247 1 0 f b 247 1 1 f # 29343 revdifference c a 247 1 0 f b 247 1 0 f # 29344 revdifference c a 247 1 0 f b 247 1 1 1 3 5 6 7 8 9 12 14 15 16 18 19 22 25 29 30 31 33 34 35 36 38 39 41 48 49 50 51 53 55 56 57 59 62 63 66 68 69 72 74 76 77 80 85 87 88 89 90 93 98 100 101 102 103 106 110 112 114 119 123 124 128 129 131 132 136 138 140 142 143 144 145 147 150 151 152 155 156 157 158 160 163 164 165 169 170 180 183 185 190 192 193 194 195 196 199 201 203 206 207 208 211 214 215 219 220 221 222 223 224 225 227 229 230 232 233 238 243 244 246 # 29345 revdifference c a 247 1 0 0 3 6 7 9 11 12 14 16 17 18 21 23 32 33 34 36 37 41 44 45 46 47 48 49 51 52 54 56 57 58 64 66 67 69 71 72 75 78 80 81 83 85 86 88 89 90 92 94 95 96 97 98 99 100 102 104 105 109 112 113 114 116 117 118 119 120 121 123 124 126 127 128 129 130 131 132 135 138 139 142 145 146 147 148 149 150 151 152 153 155 160 162 163 164 166 168 169 170 173 174 176 177 179 180 182 189 190 192 193 195 196 198 199 200 201 202 204 205 206 207 210 213 214 215 216 217 220 221 222 223 224 227 228 231 234 237 239 240 242 245 b 247 1 0 0 3 6 7 9 11 12 14 16 17 18 21 23 32 33 34 36 37 41 44 45 46 47 48 49 51 52 54 56 57 58 64 66 67 69 71 72 75 78 80 81 83 85 86 88 89 90 92 94 95 96 97 98 99 100 102 104 105 109 112 113 114 116 117 118 119 120 121 123 124 126 127 128 129 130 131 132 135 138 139 142 145 146 147 148 149 150 151 152 153 155 160 162 163 164 166 168 169 170 173 174 176 177 179 180 182 189 190 192 193 195 196 198 199 200 201 202 204 205 206 207 210 213 214 215 216 217 220 221 222 223 224 227 228 231 234 237 239 240 242 245 # 29346 revdifference c a 247 1 0 0 3 6 7 9 11 12 14 16 17 18 21 23 32 33 34 36 37 41 44 45 46 47 48 49 51 52 54 56 57 58 64 66 67 69 71 72 75 78 80 81 83 85 86 88 89 90 92 94 95 96 97 98 99 100 102 104 105 109 112 113 114 116 117 118 119 120 121 123 124 126 127 128 129 130 131 132 135 138 139 142 145 146 147 148 149 150 151 152 153 155 160 162 163 164 166 168 169 170 173 174 176 177 179 180 182 189 190 192 193 195 196 198 199 200 201 202 204 205 206 207 210 213 214 215 216 217 220 221 222 223 224 227 228 231 234 237 239 240 242 245 b 247 1 1 e # 29347 revdifference c a 247 1 0 1 3 6 10 11 12 15 16 17 18 22 23 26 27 29 31 33 35 41 45 47 48 49 53 55 58 59 60 64 65 69 70 71 72 75 78 83 85 86 88 89 91 93 96 97 99 100 102 105 107 110 111 112 114 115 117 120 121 125 128 129 133 134 135 136 140 143 144 146 152 153 154 158 161 162 164 165 167 169 173 174 177 179 180 181 183 184 191 196 201 204 206 213 215 216 217 220 221 224 227 228 229 233 234 240 241 242 243 245 246 b 247 1 0 1 3 6 10 11 12 15 16 17 18 22 23 26 27 29 31 33 35 41 45 47 48 49 53 55 58 59 60 64 65 69 70 71 72 75 78 83 85 86 88 89 91 93 96 97 99 100 102 105 107 110 111 112 114 115 117 120 121 125 128 129 133 134 135 136 140 143 144 146 152 153 154 158 161 162 164 165 167 169 173 174 177 179 180 181 183 184 191 196 201 204 206 213 215 216 217 220 221 224 227 228 229 233 234 240 241 242 243 245 246 # 29348 revdifference c a 247 1 0 1 3 6 10 11 12 15 16 17 18 22 23 26 27 29 31 33 35 41 45 47 48 49 53 55 58 59 60 64 65 69 70 71 72 75 78 83 85 86 88 89 91 93 96 97 99 100 102 105 107 110 111 112 114 115 117 120 121 125 128 129 133 134 135 136 140 143 144 146 152 153 154 158 161 162 164 165 167 169 173 174 177 179 180 181 183 184 191 196 201 204 206 213 215 216 217 220 221 224 227 228 229 233 234 240 241 242 243 245 246 b 247 1 1 f # 29349 revdifference c a 247 1 0 1 3 4 5 7 8 9 11 12 15 16 17 18 19 23 24 27 28 30 35 38 43 44 46 49 51 52 53 55 57 58 59 61 63 66 68 69 70 73 75 79 80 81 82 83 84 86 89 91 92 96 98 99 100 107 108 109 110 111 112 113 114 115 116 117 118 120 122 123 124 126 127 128 129 130 131 133 134 135 138 140 141 142 143 145 150 152 153 154 157 159 160 161 162 163 164 165 166 168 170 171 173 174 175 179 180 181 184 186 187 190 191 193 194 197 198 207 210 213 214 217 220 224 230 232 234 235 236 238 240 b 247 1 0 1 3 4 5 7 8 9 11 12 15 16 17 18 19 23 24 27 28 30 35 38 43 44 46 49 51 52 53 55 57 58 59 61 63 66 68 69 70 73 75 79 80 81 82 83 84 86 89 91 92 96 98 99 100 107 108 109 110 111 112 113 114 115 116 117 118 120 122 123 124 126 127 128 129 130 131 133 134 135 138 140 141 142 143 145 150 152 153 154 157 159 160 161 162 163 164 165 166 168 170 171 173 174 175 179 180 181 184 186 187 190 191 193 194 197 198 207 210 213 214 217 220 224 230 232 234 235 236 238 240 # 29350 revdifference c a 247 1 0 1 3 4 5 7 8 9 11 12 15 16 17 18 19 23 24 27 28 30 35 38 43 44 46 49 51 52 53 55 57 58 59 61 63 66 68 69 70 73 75 79 80 81 82 83 84 86 89 91 92 96 98 99 100 107 108 109 110 111 112 113 114 115 116 117 118 120 122 123 124 126 127 128 129 130 131 133 134 135 138 140 141 142 143 145 150 152 153 154 157 159 160 161 162 163 164 165 166 168 170 171 173 174 175 179 180 181 184 186 187 190 191 193 194 197 198 207 210 213 214 217 220 224 230 232 234 235 236 238 240 b 247 1 1 0 1 2 4 5 6 8 10 13 15 16 17 18 19 20 23 24 25 29 30 32 35 38 41 42 43 44 46 49 53 56 57 64 65 66 69 70 71 72 73 74 77 78 79 80 82 83 84 87 88 89 90 92 94 95 97 98 99 100 101 106 107 108 109 111 114 116 117 118 119 120 121 123 125 127 128 130 134 135 137 140 141 145 148 150 151 155 157 158 159 161 163 164 169 170 172 174 178 180 181 182 184 191 192 193 194 195 199 204 205 206 207 211 216 220 221 223 225 226 227 232 233 234 236 239 240 241 242 244 # 29351 revdifference c a 247 1 1 e b 247 1 1 e # 29352 revdifference c a 247 1 1 e b 247 0 0 e # 29353 revdifference c a 247 1 1 e b 247 1 1 e # 29354 revdifference c a 247 1 1 e b 247 0 0 f # 29355 revdifference c a 247 1 1 e b 247 1 1 e # 29356 revdifference c a 247 1 1 e b 247 0 0 0 1 2 3 5 10 11 15 16 18 20 22 23 25 26 28 30 32 33 36 37 38 39 40 41 42 44 47 48 51 54 55 57 59 60 63 65 67 68 70 71 72 73 75 77 78 80 82 84 85 92 93 95 96 97 98 101 104 110 112 113 114 115 117 118 119 124 125 127 128 136 137 138 140 143 147 150 151 152 154 155 161 163 165 166 168 169 171 173 177 181 186 190 191 194 197 198 199 202 203 210 211 214 215 217 219 221 222 223 225 229 231 234 237 238 239 241 243 246 # 29357 revdifference c a 247 1 1 f b 247 1 1 f # 29358 revdifference c a 247 1 1 f b 247 0 0 e # 29359 revdifference c a 247 1 1 f b 247 1 1 f # 29360 revdifference c a 247 1 1 f b 247 0 0 f # 29361 revdifference c a 247 1 1 f b 247 1 1 f # 29362 revdifference c a 247 1 1 f b 247 0 0 0 2 3 4 5 6 7 10 11 12 13 15 18 19 20 21 22 23 25 28 29 30 31 33 36 38 40 41 42 43 44 46 48 50 51 53 57 58 61 63 64 65 66 67 68 69 70 71 72 73 75 79 80 82 83 84 88 90 92 95 96 99 102 107 110 112 115 116 117 119 120 123 126 128 131 132 138 139 140 141 143 147 149 150 152 153 157 158 163 164 168 171 172 174 176 180 181 183 184 185 188 190 191 192 193 194 195 198 204 206 207 209 210 212 215 217 219 222 225 227 231 233 236 237 238 240 241 242 243 246 # 29363 revdifference c a 247 1 1 0 3 4 5 6 8 9 10 11 12 13 14 15 17 18 19 20 21 22 24 25 27 29 30 31 34 38 42 45 46 47 48 49 50 52 54 55 57 58 60 61 63 67 68 69 70 71 73 75 76 78 79 81 85 88 90 91 94 95 96 97 100 105 108 117 118 120 121 125 126 128 130 131 132 136 137 138 139 143 144 145 150 153 154 155 156 157 158 159 161 162 164 166 167 169 170 171 172 174 175 176 177 178 181 182 184 185 187 190 191 192 193 194 195 197 198 199 201 202 210 211 212 213 215 219 220 222 223 224 225 226 229 230 231 232 233 235 237 239 240 241 243 244 245 246 b 247 1 1 0 3 4 5 6 8 9 10 11 12 13 14 15 17 18 19 20 21 22 24 25 27 29 30 31 34 38 42 45 46 47 48 49 50 52 54 55 57 58 60 61 63 67 68 69 70 71 73 75 76 78 79 81 85 88 90 91 94 95 96 97 100 105 108 117 118 120 121 125 126 128 130 131 132 136 137 138 139 143 144 145 150 153 154 155 156 157 158 159 161 162 164 166 167 169 170 171 172 174 175 176 177 178 181 182 184 185 187 190 191 192 193 194 195 197 198 199 201 202 210 211 212 213 215 219 220 222 223 224 225 226 229 230 231 232 233 235 237 239 240 241 243 244 245 246 # 29364 revdifference c a 247 1 1 0 3 4 5 6 8 9 10 11 12 13 14 15 17 18 19 20 21 22 24 25 27 29 30 31 34 38 42 45 46 47 48 49 50 52 54 55 57 58 60 61 63 67 68 69 70 71 73 75 76 78 79 81 85 88 90 91 94 95 96 97 100 105 108 117 118 120 121 125 126 128 130 131 132 136 137 138 139 143 144 145 150 153 154 155 156 157 158 159 161 162 164 166 167 169 170 171 172 174 175 176 177 178 181 182 184 185 187 190 191 192 193 194 195 197 198 199 201 202 210 211 212 213 215 219 220 222 223 224 225 226 229 230 231 232 233 235 237 239 240 241 243 244 245 246 b 247 0 0 e # 29365 revdifference c a 247 1 1 4 6 7 9 11 14 16 18 19 20 26 28 29 32 35 36 38 45 46 52 53 54 56 57 58 59 64 65 67 74 75 77 79 81 84 85 86 87 88 89 90 92 93 94 95 96 99 101 103 106 107 110 113 114 116 118 119 121 122 124 125 126 128 133 139 140 141 144 145 146 147 149 150 151 153 154 157 158 162 163 167 168 171 173 176 180 182 184 185 186 188 190 192 193 195 198 200 204 205 206 207 210 212 213 214 215 216 219 220 223 225 226 227 232 233 234 235 236 237 239 243 245 246 b 247 1 1 4 6 7 9 11 14 16 18 19 20 26 28 29 32 35 36 38 45 46 52 53 54 56 57 58 59 64 65 67 74 75 77 79 81 84 85 86 87 88 89 90 92 93 94 95 96 99 101 103 106 107 110 113 114 116 118 119 121 122 124 125 126 128 133 139 140 141 144 145 146 147 149 150 151 153 154 157 158 162 163 167 168 171 173 176 180 182 184 185 186 188 190 192 193 195 198 200 204 205 206 207 210 212 213 214 215 216 219 220 223 225 226 227 232 233 234 235 236 237 239 243 245 246 # 29366 revdifference c a 247 1 1 4 6 7 9 11 14 16 18 19 20 26 28 29 32 35 36 38 45 46 52 53 54 56 57 58 59 64 65 67 74 75 77 79 81 84 85 86 87 88 89 90 92 93 94 95 96 99 101 103 106 107 110 113 114 116 118 119 121 122 124 125 126 128 133 139 140 141 144 145 146 147 149 150 151 153 154 157 158 162 163 167 168 171 173 176 180 182 184 185 186 188 190 192 193 195 198 200 204 205 206 207 210 212 213 214 215 216 219 220 223 225 226 227 232 233 234 235 236 237 239 243 245 246 b 247 0 0 f # 29367 revdifference c a 247 1 1 2 6 9 10 12 18 19 20 21 23 24 25 27 30 31 32 33 36 42 44 53 56 57 60 61 63 64 65 66 67 72 73 74 75 79 80 83 85 87 98 100 102 103 105 106 108 109 111 114 115 117 118 119 121 123 127 128 135 136 137 139 140 142 144 149 150 151 152 154 156 162 163 164 166 167 169 170 174 176 177 178 180 181 183 184 187 188 189 195 197 198 199 200 202 204 205 206 207 208 209 211 213 214 220 224 225 228 229 230 231 233 236 240 241 244 245 246 b 247 1 1 2 6 9 10 12 18 19 20 21 23 24 25 27 30 31 32 33 36 42 44 53 56 57 60 61 63 64 65 66 67 72 73 74 75 79 80 83 85 87 98 100 102 103 105 106 108 109 111 114 115 117 118 119 121 123 127 128 135 136 137 139 140 142 144 149 150 151 152 154 156 162 163 164 166 167 169 170 174 176 177 178 180 181 183 184 187 188 189 195 197 198 199 200 202 204 205 206 207 208 209 211 213 214 220 224 225 228 229 230 231 233 236 240 241 244 245 246 # 29368 revdifference c a 247 1 1 2 6 9 10 12 18 19 20 21 23 24 25 27 30 31 32 33 36 42 44 53 56 57 60 61 63 64 65 66 67 72 73 74 75 79 80 83 85 87 98 100 102 103 105 106 108 109 111 114 115 117 118 119 121 123 127 128 135 136 137 139 140 142 144 149 150 151 152 154 156 162 163 164 166 167 169 170 174 176 177 178 180 181 183 184 187 188 189 195 197 198 199 200 202 204 205 206 207 208 209 211 213 214 220 224 225 228 229 230 231 233 236 240 241 244 245 246 b 247 0 0 3 5 9 10 11 12 13 14 17 18 19 21 23 24 31 33 35 37 39 40 41 42 44 46 47 49 50 51 52 53 54 55 57 61 63 65 67 69 70 72 73 74 77 85 86 88 90 92 94 96 102 103 109 110 111 114 117 118 121 126 128 130 132 135 136 137 140 142 143 144 145 147 148 153 155 158 161 165 169 175 177 178 182 183 184 191 193 196 198 204 205 210 211 212 215 216 217 218 223 228 229 233 234 235 236 240 241 242 # 29369 revdifference c a 247 1 1 e b 247 1 1 e # 29370 revdifference c a 247 1 1 e b 247 0 1 e # 29371 revdifference c a 247 1 1 e b 247 1 1 e # 29372 revdifference c a 247 1 1 e b 247 0 1 f # 29373 revdifference c a 247 1 1 e b 247 1 1 e # 29374 revdifference c a 247 1 1 e b 247 0 1 4 5 6 7 10 13 14 17 20 23 26 27 28 30 32 34 35 36 38 40 41 42 43 44 45 47 48 49 53 60 63 66 68 69 70 77 79 80 83 85 89 90 92 98 101 102 103 106 111 112 113 114 115 116 122 126 127 128 129 133 134 135 137 141 143 144 146 147 148 152 156 159 160 162 165 167 168 173 175 178 180 181 185 186 187 189 190 193 194 195 196 197 198 199 201 202 203 204 206 207 213 214 215 216 218 219 223 225 226 227 228 229 230 232 233 236 237 241 242 243 246 # 29375 revdifference c a 247 1 1 f b 247 1 1 f # 29376 revdifference c a 247 1 1 f b 247 0 1 e # 29377 revdifference c a 247 1 1 f b 247 1 1 f # 29378 revdifference c a 247 1 1 f b 247 0 1 f # 29379 revdifference c a 247 1 1 f b 247 1 1 f # 29380 revdifference c a 247 1 1 f b 247 0 1 1 5 14 15 16 17 20 22 24 25 26 27 33 34 35 36 40 41 50 51 52 53 59 60 61 64 65 67 69 70 71 72 75 76 80 81 83 84 88 90 94 95 97 98 100 101 105 109 112 113 114 118 119 120 121 123 124 126 129 130 131 135 136 137 138 140 146 148 149 153 158 163 164 165 167 168 170 171 172 176 178 179 180 185 186 189 190 195 197 198 201 208 210 211 215 216 220 222 224 225 228 229 230 231 232 233 235 237 240 242 # 29381 revdifference c a 247 1 1 3 5 7 10 11 13 16 19 20 22 27 28 30 32 34 39 40 45 47 49 50 53 54 56 57 59 62 64 65 66 67 70 74 75 78 79 85 86 88 90 93 94 96 97 101 102 103 105 108 112 114 115 117 120 122 125 126 128 129 130 132 133 134 138 140 141 142 147 149 152 154 162 164 165 166 170 171 173 175 177 178 180 182 183 184 186 188 190 192 193 194 195 197 199 202 203 204 206 209 210 211 214 216 217 218 219 221 223 226 227 229 230 236 237 239 240 242 243 244 245 b 247 1 1 3 5 7 10 11 13 16 19 20 22 27 28 30 32 34 39 40 45 47 49 50 53 54 56 57 59 62 64 65 66 67 70 74 75 78 79 85 86 88 90 93 94 96 97 101 102 103 105 108 112 114 115 117 120 122 125 126 128 129 130 132 133 134 138 140 141 142 147 149 152 154 162 164 165 166 170 171 173 175 177 178 180 182 183 184 186 188 190 192 193 194 195 197 199 202 203 204 206 209 210 211 214 216 217 218 219 221 223 226 227 229 230 236 237 239 240 242 243 244 245 # 29382 revdifference c a 247 1 1 3 5 7 10 11 13 16 19 20 22 27 28 30 32 34 39 40 45 47 49 50 53 54 56 57 59 62 64 65 66 67 70 74 75 78 79 85 86 88 90 93 94 96 97 101 102 103 105 108 112 114 115 117 120 122 125 126 128 129 130 132 133 134 138 140 141 142 147 149 152 154 162 164 165 166 170 171 173 175 177 178 180 182 183 184 186 188 190 192 193 194 195 197 199 202 203 204 206 209 210 211 214 216 217 218 219 221 223 226 227 229 230 236 237 239 240 242 243 244 245 b 247 0 1 e # 29383 revdifference c a 247 1 1 0 2 3 4 5 7 9 12 14 16 18 19 21 25 29 30 33 34 38 39 40 42 43 44 45 47 50 51 52 54 56 58 61 62 63 65 66 67 68 69 70 71 73 74 76 80 81 82 83 85 90 92 103 104 107 108 110 113 115 116 118 120 121 122 123 125 129 130 132 133 135 138 139 140 141 144 145 147 150 151 152 153 154 156 157 158 159 160 163 165 166 167 170 174 175 176 177 178 181 185 188 191 192 193 198 199 200 201 202 203 204 205 206 207 208 209 211 215 217 220 223 225 226 227 228 229 231 232 234 235 237 238 239 241 242 243 246 b 247 1 1 0 2 3 4 5 7 9 12 14 16 18 19 21 25 29 30 33 34 38 39 40 42 43 44 45 47 50 51 52 54 56 58 61 62 63 65 66 67 68 69 70 71 73 74 76 80 81 82 83 85 90 92 103 104 107 108 110 113 115 116 118 120 121 122 123 125 129 130 132 133 135 138 139 140 141 144 145 147 150 151 152 153 154 156 157 158 159 160 163 165 166 167 170 174 175 176 177 178 181 185 188 191 192 193 198 199 200 201 202 203 204 205 206 207 208 209 211 215 217 220 223 225 226 227 228 229 231 232 234 235 237 238 239 241 242 243 246 # 29384 revdifference c a 247 1 1 0 2 3 4 5 7 9 12 14 16 18 19 21 25 29 30 33 34 38 39 40 42 43 44 45 47 50 51 52 54 56 58 61 62 63 65 66 67 68 69 70 71 73 74 76 80 81 82 83 85 90 92 103 104 107 108 110 113 115 116 118 120 121 122 123 125 129 130 132 133 135 138 139 140 141 144 145 147 150 151 152 153 154 156 157 158 159 160 163 165 166 167 170 174 175 176 177 178 181 185 188 191 192 193 198 199 200 201 202 203 204 205 206 207 208 209 211 215 217 220 223 225 226 227 228 229 231 232 234 235 237 238 239 241 242 243 246 b 247 0 1 f # 29385 revdifference c a 247 1 1 0 1 4 5 6 7 8 10 11 13 17 18 20 21 22 23 25 26 34 37 38 41 42 43 46 47 48 49 51 52 54 55 57 59 64 66 68 69 74 75 76 77 78 79 80 82 83 85 86 87 88 89 91 93 96 98 99 100 104 112 113 114 116 117 118 120 125 126 132 134 136 138 139 140 146 147 148 149 151 153 154 156 157 158 161 163 172 174 175 176 178 179 186 189 190 192 197 199 201 205 207 210 211 212 216 218 219 220 223 224 225 226 228 234 237 239 242 243 245 b 247 1 1 0 1 4 5 6 7 8 10 11 13 17 18 20 21 22 23 25 26 34 37 38 41 42 43 46 47 48 49 51 52 54 55 57 59 64 66 68 69 74 75 76 77 78 79 80 82 83 85 86 87 88 89 91 93 96 98 99 100 104 112 113 114 116 117 118 120 125 126 132 134 136 138 139 140 146 147 148 149 151 153 154 156 157 158 161 163 172 174 175 176 178 179 186 189 190 192 197 199 201 205 207 210 211 212 216 218 219 220 223 224 225 226 228 234 237 239 242 243 245 # 29386 revdifference c a 247 1 1 0 1 4 5 6 7 8 10 11 13 17 18 20 21 22 23 25 26 34 37 38 41 42 43 46 47 48 49 51 52 54 55 57 59 64 66 68 69 74 75 76 77 78 79 80 82 83 85 86 87 88 89 91 93 96 98 99 100 104 112 113 114 116 117 118 120 125 126 132 134 136 138 139 140 146 147 148 149 151 153 154 156 157 158 161 163 172 174 175 176 178 179 186 189 190 192 197 199 201 205 207 210 211 212 216 218 219 220 223 224 225 226 228 234 237 239 242 243 245 b 247 0 1 2 6 7 9 10 12 14 16 18 20 21 22 23 25 31 32 34 35 36 37 38 41 42 48 55 57 58 59 63 64 66 67 69 71 72 73 74 78 80 82 85 87 88 91 92 93 94 95 97 98 99 100 101 103 104 108 110 111 115 117 118 120 123 127 133 137 138 140 144 145 148 150 151 153 155 157 161 162 164 165 166 168 170 171 172 175 177 180 182 189 190 191 192 193 195 196 197 204 209 214 216 217 218 220 221 224 230 231 232 236 237 238 239 240 244 245 246 # 29387 revdifference c a 247 1 1 e b 247 1 1 e # 29388 revdifference c a 247 1 1 e b 247 1 0 e # 29389 revdifference c a 247 1 1 e b 247 1 1 e # 29390 revdifference c a 247 1 1 e b 247 1 0 f # 29391 revdifference c a 247 1 1 e b 247 1 1 e # 29392 revdifference c a 247 1 1 e b 247 1 0 0 1 2 4 5 9 11 13 14 16 18 20 21 22 23 24 28 30 31 33 34 35 39 41 42 43 44 45 50 53 56 58 59 60 61 62 63 65 66 67 70 71 72 73 74 75 76 80 81 84 85 86 87 90 91 94 95 97 98 101 104 105 106 107 110 111 115 117 118 123 124 130 131 132 133 134 135 136 137 144 150 151 152 154 155 156 158 161 162 164 165 167 168 169 170 174 176 185 186 189 191 192 202 206 208 213 215 216 219 221 222 225 226 227 229 231 233 235 237 238 243 245 246 # 29393 revdifference c a 247 1 1 f b 247 1 1 f # 29394 revdifference c a 247 1 1 f b 247 1 0 e # 29395 revdifference c a 247 1 1 f b 247 1 1 f # 29396 revdifference c a 247 1 1 f b 247 1 0 f # 29397 revdifference c a 247 1 1 f b 247 1 1 f # 29398 revdifference c a 247 1 1 f b 247 1 0 0 2 3 4 5 6 8 9 10 11 13 14 15 17 19 22 23 28 30 31 32 33 34 35 36 38 39 41 44 49 51 52 54 56 57 58 61 63 64 65 66 69 71 72 73 75 77 78 79 82 86 89 90 91 93 94 96 98 101 103 104 106 107 109 110 111 112 116 118 120 125 126 130 131 134 136 139 141 142 145 146 150 152 154 158 159 160 161 166 167 168 169 170 171 172 173 176 177 178 179 181 185 186 189 192 193 194 196 197 199 200 202 203 204 205 207 208 210 213 214 216 217 218 220 222 223 224 225 227 228 230 232 235 240 242 243 245 # 29399 revdifference c a 247 1 1 1 3 4 5 6 7 8 9 11 13 15 17 21 22 23 25 26 29 30 32 35 37 38 39 40 42 44 50 51 54 55 57 59 60 63 64 66 67 69 70 72 73 75 76 77 82 84 85 90 92 94 96 97 105 108 109 111 115 117 119 122 123 125 128 129 133 134 135 136 138 139 142 144 148 149 150 152 153 156 157 158 159 160 162 165 166 168 169 170 173 174 176 178 179 180 181 183 184 187 191 195 198 201 203 204 207 209 210 212 213 217 219 221 222 223 225 230 238 239 241 244 245 246 b 247 1 1 1 3 4 5 6 7 8 9 11 13 15 17 21 22 23 25 26 29 30 32 35 37 38 39 40 42 44 50 51 54 55 57 59 60 63 64 66 67 69 70 72 73 75 76 77 82 84 85 90 92 94 96 97 105 108 109 111 115 117 119 122 123 125 128 129 133 134 135 136 138 139 142 144 148 149 150 152 153 156 157 158 159 160 162 165 166 168 169 170 173 174 176 178 179 180 181 183 184 187 191 195 198 201 203 204 207 209 210 212 213 217 219 221 222 223 225 230 238 239 241 244 245 246 # 29400 revdifference c a 247 1 1 1 3 4 5 6 7 8 9 11 13 15 17 21 22 23 25 26 29 30 32 35 37 38 39 40 42 44 50 51 54 55 57 59 60 63 64 66 67 69 70 72 73 75 76 77 82 84 85 90 92 94 96 97 105 108 109 111 115 117 119 122 123 125 128 129 133 134 135 136 138 139 142 144 148 149 150 152 153 156 157 158 159 160 162 165 166 168 169 170 173 174 176 178 179 180 181 183 184 187 191 195 198 201 203 204 207 209 210 212 213 217 219 221 222 223 225 230 238 239 241 244 245 246 b 247 1 0 e # 29401 revdifference c a 247 1 1 1 2 3 5 6 7 8 9 12 13 18 19 20 22 23 24 27 30 33 35 38 40 42 43 47 48 51 54 56 59 60 61 64 65 66 69 70 72 73 76 77 78 79 80 84 86 89 92 93 95 96 98 101 105 112 113 114 115 116 117 120 121 122 123 124 127 128 130 131 135 137 139 146 148 150 151 152 155 156 157 163 164 165 169 170 171 174 177 178 184 185 186 187 188 192 193 194 195 199 202 205 206 207 208 209 211 213 218 220 223 224 226 228 229 234 235 236 237 238 239 242 243 244 245 246 b 247 1 1 1 2 3 5 6 7 8 9 12 13 18 19 20 22 23 24 27 30 33 35 38 40 42 43 47 48 51 54 56 59 60 61 64 65 66 69 70 72 73 76 77 78 79 80 84 86 89 92 93 95 96 98 101 105 112 113 114 115 116 117 120 121 122 123 124 127 128 130 131 135 137 139 146 148 150 151 152 155 156 157 163 164 165 169 170 171 174 177 178 184 185 186 187 188 192 193 194 195 199 202 205 206 207 208 209 211 213 218 220 223 224 226 228 229 234 235 236 237 238 239 242 243 244 245 246 # 29402 revdifference c a 247 1 1 1 2 3 5 6 7 8 9 12 13 18 19 20 22 23 24 27 30 33 35 38 40 42 43 47 48 51 54 56 59 60 61 64 65 66 69 70 72 73 76 77 78 79 80 84 86 89 92 93 95 96 98 101 105 112 113 114 115 116 117 120 121 122 123 124 127 128 130 131 135 137 139 146 148 150 151 152 155 156 157 163 164 165 169 170 171 174 177 178 184 185 186 187 188 192 193 194 195 199 202 205 206 207 208 209 211 213 218 220 223 224 226 228 229 234 235 236 237 238 239 242 243 244 245 246 b 247 1 0 f # 29403 revdifference c a 247 1 1 2 3 4 7 9 11 12 15 16 18 24 26 27 29 30 31 33 34 36 37 38 40 42 44 47 48 52 55 56 63 64 66 67 69 71 77 83 84 85 86 87 91 93 94 97 100 101 104 105 106 108 109 110 117 119 121 122 123 124 129 130 131 137 138 140 141 144 145 146 148 150 151 153 154 157 158 160 164 165 166 167 168 169 171 173 178 180 181 185 186 187 188 191 192 193 194 195 197 198 201 202 203 204 212 213 216 219 220 223 227 230 231 233 234 235 239 241 242 246 b 247 1 1 2 3 4 7 9 11 12 15 16 18 24 26 27 29 30 31 33 34 36 37 38 40 42 44 47 48 52 55 56 63 64 66 67 69 71 77 83 84 85 86 87 91 93 94 97 100 101 104 105 106 108 109 110 117 119 121 122 123 124 129 130 131 137 138 140 141 144 145 146 148 150 151 153 154 157 158 160 164 165 166 167 168 169 171 173 178 180 181 185 186 187 188 191 192 193 194 195 197 198 201 202 203 204 212 213 216 219 220 223 227 230 231 233 234 235 239 241 242 246 # 29404 revdifference c a 247 1 1 2 3 4 7 9 11 12 15 16 18 24 26 27 29 30 31 33 34 36 37 38 40 42 44 47 48 52 55 56 63 64 66 67 69 71 77 83 84 85 86 87 91 93 94 97 100 101 104 105 106 108 109 110 117 119 121 122 123 124 129 130 131 137 138 140 141 144 145 146 148 150 151 153 154 157 158 160 164 165 166 167 168 169 171 173 178 180 181 185 186 187 188 191 192 193 194 195 197 198 201 202 203 204 212 213 216 219 220 223 227 230 231 233 234 235 239 241 242 246 b 247 1 0 1 3 5 8 9 10 11 13 14 15 17 18 20 21 23 26 27 28 30 31 32 34 36 38 39 42 43 46 47 50 54 55 56 57 58 60 61 63 68 72 73 77 78 79 81 82 83 85 86 88 89 90 91 92 94 96 99 101 104 110 111 113 114 115 116 117 119 120 121 123 127 129 130 131 133 137 139 142 143 145 146 148 149 151 152 153 154 156 160 161 164 165 166 171 172 178 181 184 187 188 189 191 192 193 195 197 199 201 202 203 207 209 211 212 213 214 215 219 221 222 223 225 226 227 228 229 230 232 233 235 236 238 241 244 # 29405 revdifference c a 247 1 1 e b 247 1 1 e # 29406 revdifference c a 247 1 1 e b 247 1 1 e # 29407 revdifference c a 247 1 1 e b 247 1 1 e # 29408 revdifference c a 247 1 1 e b 247 1 1 f # 29409 revdifference c a 247 1 1 e b 247 1 1 e # 29410 revdifference c a 247 1 1 e b 247 1 1 0 1 2 3 4 6 7 8 9 10 11 12 13 14 15 17 20 21 27 28 29 30 31 33 34 37 44 48 50 51 54 63 64 69 71 72 73 74 75 76 79 80 82 83 84 85 89 90 92 95 96 99 101 102 105 108 109 111 114 115 116 120 121 122 123 125 126 127 130 131 132 133 134 138 140 144 145 147 150 153 155 156 158 161 162 165 166 167 169 173 176 177 178 179 181 183 184 188 190 192 193 194 196 197 199 200 201 204 205 211 213 217 218 219 225 226 227 228 230 234 235 236 240 241 244 245 # 29411 revdifference c a 247 1 1 f b 247 1 1 f # 29412 revdifference c a 247 1 1 f b 247 1 1 e # 29413 revdifference c a 247 1 1 f b 247 1 1 f # 29414 revdifference c a 247 1 1 f b 247 1 1 f # 29415 revdifference c a 247 1 1 f b 247 1 1 f # 29416 revdifference c a 247 1 1 f b 247 1 1 0 1 3 4 5 8 10 11 12 14 22 23 25 26 28 29 30 31 34 36 37 38 39 41 42 44 45 46 49 50 53 55 56 59 60 66 69 74 78 79 81 83 84 86 87 88 89 90 91 95 99 100 101 105 106 107 109 111 112 113 114 115 117 118 119 120 121 122 123 124 125 126 129 132 134 135 137 138 139 140 142 143 144 145 146 148 149 153 156 158 163 164 166 168 169 171 172 175 179 180 185 186 189 190 195 204 205 207 208 210 211 212 218 219 221 223 224 225 226 229 230 234 236 237 239 242 244 246 # 29417 revdifference c a 247 1 1 1 2 3 5 8 9 10 13 15 19 22 24 28 29 32 38 39 41 43 44 48 49 50 53 54 58 64 65 66 69 71 76 77 79 80 86 87 88 89 90 94 97 98 100 101 105 108 109 111 113 115 118 121 122 123 125 128 129 130 131 132 134 136 138 139 143 145 146 147 148 149 154 155 166 168 169 173 175 178 180 182 184 185 188 190 192 193 198 199 200 201 204 206 208 209 210 211 212 215 218 220 221 223 224 225 226 227 229 230 232 236 238 244 246 b 247 1 1 1 2 3 5 8 9 10 13 15 19 22 24 28 29 32 38 39 41 43 44 48 49 50 53 54 58 64 65 66 69 71 76 77 79 80 86 87 88 89 90 94 97 98 100 101 105 108 109 111 113 115 118 121 122 123 125 128 129 130 131 132 134 136 138 139 143 145 146 147 148 149 154 155 166 168 169 173 175 178 180 182 184 185 188 190 192 193 198 199 200 201 204 206 208 209 210 211 212 215 218 220 221 223 224 225 226 227 229 230 232 236 238 244 246 # 29418 revdifference c a 247 1 1 1 2 3 5 8 9 10 13 15 19 22 24 28 29 32 38 39 41 43 44 48 49 50 53 54 58 64 65 66 69 71 76 77 79 80 86 87 88 89 90 94 97 98 100 101 105 108 109 111 113 115 118 121 122 123 125 128 129 130 131 132 134 136 138 139 143 145 146 147 148 149 154 155 166 168 169 173 175 178 180 182 184 185 188 190 192 193 198 199 200 201 204 206 208 209 210 211 212 215 218 220 221 223 224 225 226 227 229 230 232 236 238 244 246 b 247 1 1 e # 29419 revdifference c a 247 1 1 1 2 4 5 6 7 9 10 17 18 19 23 24 25 27 28 29 30 32 33 34 35 36 37 40 42 43 44 47 48 50 52 55 57 58 61 64 66 68 70 71 72 74 76 79 80 83 85 87 90 91 92 95 96 99 100 101 106 110 112 114 116 118 120 121 123 125 128 129 130 131 132 136 140 144 146 147 148 149 151 152 153 157 160 164 166 167 168 170 172 174 176 177 179 182 187 189 191 196 199 204 206 207 208 209 210 214 215 216 219 221 222 223 228 230 232 241 242 243 245 b 247 1 1 1 2 4 5 6 7 9 10 17 18 19 23 24 25 27 28 29 30 32 33 34 35 36 37 40 42 43 44 47 48 50 52 55 57 58 61 64 66 68 70 71 72 74 76 79 80 83 85 87 90 91 92 95 96 99 100 101 106 110 112 114 116 118 120 121 123 125 128 129 130 131 132 136 140 144 146 147 148 149 151 152 153 157 160 164 166 167 168 170 172 174 176 177 179 182 187 189 191 196 199 204 206 207 208 209 210 214 215 216 219 221 222 223 228 230 232 241 242 243 245 # 29420 revdifference c a 247 1 1 1 2 4 5 6 7 9 10 17 18 19 23 24 25 27 28 29 30 32 33 34 35 36 37 40 42 43 44 47 48 50 52 55 57 58 61 64 66 68 70 71 72 74 76 79 80 83 85 87 90 91 92 95 96 99 100 101 106 110 112 114 116 118 120 121 123 125 128 129 130 131 132 136 140 144 146 147 148 149 151 152 153 157 160 164 166 167 168 170 172 174 176 177 179 182 187 189 191 196 199 204 206 207 208 209 210 214 215 216 219 221 222 223 228 230 232 241 242 243 245 b 247 1 1 f # 29421 revdifference c a 247 1 1 1 2 5 7 8 9 13 15 19 20 24 28 30 31 33 36 39 41 42 43 47 48 49 50 51 55 57 60 66 68 70 72 73 74 79 82 84 85 88 89 91 93 94 95 97 100 103 108 109 114 119 121 122 123 124 125 126 127 129 133 137 138 140 144 146 147 150 151 153 155 158 159 164 165 166 168 169 171 173 179 183 184 185 186 189 192 193 194 195 196 197 199 200 201 202 204 206 207 208 209 210 214 217 218 222 225 228 229 231 236 241 242 245 246 b 247 1 1 1 2 5 7 8 9 13 15 19 20 24 28 30 31 33 36 39 41 42 43 47 48 49 50 51 55 57 60 66 68 70 72 73 74 79 82 84 85 88 89 91 93 94 95 97 100 103 108 109 114 119 121 122 123 124 125 126 127 129 133 137 138 140 144 146 147 150 151 153 155 158 159 164 165 166 168 169 171 173 179 183 184 185 186 189 192 193 194 195 196 197 199 200 201 202 204 206 207 208 209 210 214 217 218 222 225 228 229 231 236 241 242 245 246 # 29422 revdifference c a 247 1 1 1 2 5 7 8 9 13 15 19 20 24 28 30 31 33 36 39 41 42 43 47 48 49 50 51 55 57 60 66 68 70 72 73 74 79 82 84 85 88 89 91 93 94 95 97 100 103 108 109 114 119 121 122 123 124 125 126 127 129 133 137 138 140 144 146 147 150 151 153 155 158 159 164 165 166 168 169 171 173 179 183 184 185 186 189 192 193 194 195 196 197 199 200 201 202 204 206 207 208 209 210 214 217 218 222 225 228 229 231 236 241 242 245 246 b 247 1 1 3 4 5 6 8 9 10 12 13 15 17 21 22 23 24 25 26 28 32 33 35 42 48 49 50 52 53 55 60 62 63 66 67 68 72 73 74 75 82 86 87 92 94 95 96 97 98 99 100 101 103 104 106 108 112 115 118 119 120 121 127 128 130 131 133 134 139 140 141 145 147 150 151 153 157 165 166 173 174 179 181 182 183 184 189 192 193 194 196 197 198 200 204 206 209 211 212 213 214 215 217 220 221 222 223 225 226 228 229 231 232 233 234 235 237 239 240 241 242 243 244 246 # 29423 revdifference c a 0 0 0 e b 0 0 0 e # 29424 xor c a 0 0 0 e b 0 0 0 e # 29425 xor c a 0 0 0 e b 0 0 0 e # 29426 xor c a 0 0 0 e b 0 0 0 e # 29427 xor c a 0 0 0 e b 0 0 0 e # 29428 xor c a 0 0 0 e b 0 0 0 # 29429 xor c a 0 0 0 e b 0 0 0 e # 29430 xor c a 0 0 0 e b 0 0 0 e # 29431 xor c a 0 0 0 e b 0 0 0 e # 29432 xor c a 0 0 0 e b 0 0 0 e # 29433 xor c a 0 0 0 e b 0 0 0 e # 29434 xor c a 0 0 0 e b 0 0 0 # 29435 xor c a 0 0 0 b 0 0 0 # 29436 xor c a 0 0 0 b 0 0 0 e # 29437 xor c a 0 0 0 b 0 0 0 # 29438 xor c a 0 0 0 b 0 0 0 e # 29439 xor c a 0 0 0 b 0 0 0 # 29440 xor c a 0 0 0 b 0 0 0 # 29441 xor c a 0 0 0 e b 0 0 0 e # 29442 xor c a 0 0 0 e b 0 0 1 e # 29443 xor c a 0 0 0 e b 0 0 0 e # 29444 xor c a 0 0 0 e b 0 0 1 e # 29445 xor c a 0 0 0 e b 0 0 0 e # 29446 xor c a 0 0 0 e b 0 0 1 # 29447 xor c a 0 0 0 e b 0 0 0 e # 29448 xor c a 0 0 0 e b 0 0 1 e # 29449 xor c a 0 0 0 e b 0 0 0 e # 29450 xor c a 0 0 0 e b 0 0 1 e # 29451 xor c a 0 0 0 e b 0 0 0 e # 29452 xor c a 0 0 0 e b 0 0 1 # 29453 xor c a 0 0 0 b 0 0 0 # 29454 xor c a 0 0 0 b 0 0 1 e # 29455 xor c a 0 0 0 b 0 0 0 # 29456 xor c a 0 0 0 b 0 0 1 e # 29457 xor c a 0 0 0 b 0 0 0 # 29458 xor c a 0 0 0 b 0 0 1 # 29459 xor c a 0 0 0 e b 0 0 0 e # 29460 xor c a 0 0 0 e b 0 1 0 e # 29461 xor c a 0 0 0 e b 0 0 0 e # 29462 xor c a 0 0 0 e b 0 1 0 e # 29463 xor c a 0 0 0 e b 0 0 0 e # 29464 xor c a 0 0 0 e b 0 1 0 # 29465 xor c a 0 0 0 e b 0 0 0 e # 29466 xor c a 0 0 0 e b 0 1 0 e # 29467 xor c a 0 0 0 e b 0 0 0 e # 29468 xor c a 0 0 0 e b 0 1 0 e # 29469 xor c a 0 0 0 e b 0 0 0 e # 29470 xor c a 0 0 0 e b 0 1 0 # 29471 xor c a 0 0 0 b 0 0 0 # 29472 xor c a 0 0 0 b 0 1 0 e # 29473 xor c a 0 0 0 b 0 0 0 # 29474 xor c a 0 0 0 b 0 1 0 e # 29475 xor c a 0 0 0 b 0 0 0 # 29476 xor c a 0 0 0 b 0 1 0 # 29477 xor c a 0 0 0 e b 0 0 0 e # 29478 xor c a 0 0 0 e b 0 1 1 e # 29479 xor c a 0 0 0 e b 0 0 0 e # 29480 xor c a 0 0 0 e b 0 1 1 e # 29481 xor c a 0 0 0 e b 0 0 0 e # 29482 xor c a 0 0 0 e b 0 1 1 # 29483 xor c a 0 0 0 e b 0 0 0 e # 29484 xor c a 0 0 0 e b 0 1 1 e # 29485 xor c a 0 0 0 e b 0 0 0 e # 29486 xor c a 0 0 0 e b 0 1 1 e # 29487 xor c a 0 0 0 e b 0 0 0 e # 29488 xor c a 0 0 0 e b 0 1 1 # 29489 xor c a 0 0 0 b 0 0 0 # 29490 xor c a 0 0 0 b 0 1 1 e # 29491 xor c a 0 0 0 b 0 0 0 # 29492 xor c a 0 0 0 b 0 1 1 e # 29493 xor c a 0 0 0 b 0 0 0 # 29494 xor c a 0 0 0 b 0 1 1 # 29495 xor c a 0 0 1 e b 0 0 1 e # 29496 xor c a 0 0 1 e b 0 0 0 e # 29497 xor c a 0 0 1 e b 0 0 1 e # 29498 xor c a 0 0 1 e b 0 0 0 e # 29499 xor c a 0 0 1 e b 0 0 1 e # 29500 xor c a 0 0 1 e b 0 0 0 # 29501 xor c a 0 0 1 e b 0 0 1 e # 29502 xor c a 0 0 1 e b 0 0 0 e # 29503 xor c a 0 0 1 e b 0 0 1 e # 29504 xor c a 0 0 1 e b 0 0 0 e # 29505 xor c a 0 0 1 e b 0 0 1 e # 29506 xor c a 0 0 1 e b 0 0 0 # 29507 xor c a 0 0 1 b 0 0 1 # 29508 xor c a 0 0 1 b 0 0 0 e # 29509 xor c a 0 0 1 b 0 0 1 # 29510 xor c a 0 0 1 b 0 0 0 e # 29511 xor c a 0 0 1 b 0 0 1 # 29512 xor c a 0 0 1 b 0 0 0 # 29513 xor c a 0 0 1 e b 0 0 1 e # 29514 xor c a 0 0 1 e b 0 0 1 e # 29515 xor c a 0 0 1 e b 0 0 1 e # 29516 xor c a 0 0 1 e b 0 0 1 e # 29517 xor c a 0 0 1 e b 0 0 1 e # 29518 xor c a 0 0 1 e b 0 0 1 # 29519 xor c a 0 0 1 e b 0 0 1 e # 29520 xor c a 0 0 1 e b 0 0 1 e # 29521 xor c a 0 0 1 e b 0 0 1 e # 29522 xor c a 0 0 1 e b 0 0 1 e # 29523 xor c a 0 0 1 e b 0 0 1 e # 29524 xor c a 0 0 1 e b 0 0 1 # 29525 xor c a 0 0 1 b 0 0 1 # 29526 xor c a 0 0 1 b 0 0 1 e # 29527 xor c a 0 0 1 b 0 0 1 # 29528 xor c a 0 0 1 b 0 0 1 e # 29529 xor c a 0 0 1 b 0 0 1 # 29530 xor c a 0 0 1 b 0 0 1 # 29531 xor c a 0 0 1 e b 0 0 1 e # 29532 xor c a 0 0 1 e b 0 1 0 e # 29533 xor c a 0 0 1 e b 0 0 1 e # 29534 xor c a 0 0 1 e b 0 1 0 e # 29535 xor c a 0 0 1 e b 0 0 1 e # 29536 xor c a 0 0 1 e b 0 1 0 # 29537 xor c a 0 0 1 e b 0 0 1 e # 29538 xor c a 0 0 1 e b 0 1 0 e # 29539 xor c a 0 0 1 e b 0 0 1 e # 29540 xor c a 0 0 1 e b 0 1 0 e # 29541 xor c a 0 0 1 e b 0 0 1 e # 29542 xor c a 0 0 1 e b 0 1 0 # 29543 xor c a 0 0 1 b 0 0 1 # 29544 xor c a 0 0 1 b 0 1 0 e # 29545 xor c a 0 0 1 b 0 0 1 # 29546 xor c a 0 0 1 b 0 1 0 e # 29547 xor c a 0 0 1 b 0 0 1 # 29548 xor c a 0 0 1 b 0 1 0 # 29549 xor c a 0 0 1 e b 0 0 1 e # 29550 xor c a 0 0 1 e b 0 1 1 e # 29551 xor c a 0 0 1 e b 0 0 1 e # 29552 xor c a 0 0 1 e b 0 1 1 e # 29553 xor c a 0 0 1 e b 0 0 1 e # 29554 xor c a 0 0 1 e b 0 1 1 # 29555 xor c a 0 0 1 e b 0 0 1 e # 29556 xor c a 0 0 1 e b 0 1 1 e # 29557 xor c a 0 0 1 e b 0 0 1 e # 29558 xor c a 0 0 1 e b 0 1 1 e # 29559 xor c a 0 0 1 e b 0 0 1 e # 29560 xor c a 0 0 1 e b 0 1 1 # 29561 xor c a 0 0 1 b 0 0 1 # 29562 xor c a 0 0 1 b 0 1 1 e # 29563 xor c a 0 0 1 b 0 0 1 # 29564 xor c a 0 0 1 b 0 1 1 e # 29565 xor c a 0 0 1 b 0 0 1 # 29566 xor c a 0 0 1 b 0 1 1 # 29567 xor c a 0 1 0 e b 0 1 0 e # 29568 xor c a 0 1 0 e b 0 0 0 e # 29569 xor c a 0 1 0 e b 0 1 0 e # 29570 xor c a 0 1 0 e b 0 0 0 e # 29571 xor c a 0 1 0 e b 0 1 0 e # 29572 xor c a 0 1 0 e b 0 0 0 # 29573 xor c a 0 1 0 e b 0 1 0 e # 29574 xor c a 0 1 0 e b 0 0 0 e # 29575 xor c a 0 1 0 e b 0 1 0 e # 29576 xor c a 0 1 0 e b 0 0 0 e # 29577 xor c a 0 1 0 e b 0 1 0 e # 29578 xor c a 0 1 0 e b 0 0 0 # 29579 xor c a 0 1 0 b 0 1 0 # 29580 xor c a 0 1 0 b 0 0 0 e # 29581 xor c a 0 1 0 b 0 1 0 # 29582 xor c a 0 1 0 b 0 0 0 e # 29583 xor c a 0 1 0 b 0 1 0 # 29584 xor c a 0 1 0 b 0 0 0 # 29585 xor c a 0 1 0 e b 0 1 0 e # 29586 xor c a 0 1 0 e b 0 0 1 e # 29587 xor c a 0 1 0 e b 0 1 0 e # 29588 xor c a 0 1 0 e b 0 0 1 e # 29589 xor c a 0 1 0 e b 0 1 0 e # 29590 xor c a 0 1 0 e b 0 0 1 # 29591 xor c a 0 1 0 e b 0 1 0 e # 29592 xor c a 0 1 0 e b 0 0 1 e # 29593 xor c a 0 1 0 e b 0 1 0 e # 29594 xor c a 0 1 0 e b 0 0 1 e # 29595 xor c a 0 1 0 e b 0 1 0 e # 29596 xor c a 0 1 0 e b 0 0 1 # 29597 xor c a 0 1 0 b 0 1 0 # 29598 xor c a 0 1 0 b 0 0 1 e # 29599 xor c a 0 1 0 b 0 1 0 # 29600 xor c a 0 1 0 b 0 0 1 e # 29601 xor c a 0 1 0 b 0 1 0 # 29602 xor c a 0 1 0 b 0 0 1 # 29603 xor c a 0 1 0 e b 0 1 0 e # 29604 xor c a 0 1 0 e b 0 1 0 e # 29605 xor c a 0 1 0 e b 0 1 0 e # 29606 xor c a 0 1 0 e b 0 1 0 e # 29607 xor c a 0 1 0 e b 0 1 0 e # 29608 xor c a 0 1 0 e b 0 1 0 # 29609 xor c a 0 1 0 e b 0 1 0 e # 29610 xor c a 0 1 0 e b 0 1 0 e # 29611 xor c a 0 1 0 e b 0 1 0 e # 29612 xor c a 0 1 0 e b 0 1 0 e # 29613 xor c a 0 1 0 e b 0 1 0 e # 29614 xor c a 0 1 0 e b 0 1 0 # 29615 xor c a 0 1 0 b 0 1 0 # 29616 xor c a 0 1 0 b 0 1 0 e # 29617 xor c a 0 1 0 b 0 1 0 # 29618 xor c a 0 1 0 b 0 1 0 e # 29619 xor c a 0 1 0 b 0 1 0 # 29620 xor c a 0 1 0 b 0 1 0 # 29621 xor c a 0 1 0 e b 0 1 0 e # 29622 xor c a 0 1 0 e b 0 1 1 e # 29623 xor c a 0 1 0 e b 0 1 0 e # 29624 xor c a 0 1 0 e b 0 1 1 e # 29625 xor c a 0 1 0 e b 0 1 0 e # 29626 xor c a 0 1 0 e b 0 1 1 # 29627 xor c a 0 1 0 e b 0 1 0 e # 29628 xor c a 0 1 0 e b 0 1 1 e # 29629 xor c a 0 1 0 e b 0 1 0 e # 29630 xor c a 0 1 0 e b 0 1 1 e # 29631 xor c a 0 1 0 e b 0 1 0 e # 29632 xor c a 0 1 0 e b 0 1 1 # 29633 xor c a 0 1 0 b 0 1 0 # 29634 xor c a 0 1 0 b 0 1 1 e # 29635 xor c a 0 1 0 b 0 1 0 # 29636 xor c a 0 1 0 b 0 1 1 e # 29637 xor c a 0 1 0 b 0 1 0 # 29638 xor c a 0 1 0 b 0 1 1 # 29639 xor c a 0 1 1 e b 0 1 1 e # 29640 xor c a 0 1 1 e b 0 0 0 e # 29641 xor c a 0 1 1 e b 0 1 1 e # 29642 xor c a 0 1 1 e b 0 0 0 e # 29643 xor c a 0 1 1 e b 0 1 1 e # 29644 xor c a 0 1 1 e b 0 0 0 # 29645 xor c a 0 1 1 e b 0 1 1 e # 29646 xor c a 0 1 1 e b 0 0 0 e # 29647 xor c a 0 1 1 e b 0 1 1 e # 29648 xor c a 0 1 1 e b 0 0 0 e # 29649 xor c a 0 1 1 e b 0 1 1 e # 29650 xor c a 0 1 1 e b 0 0 0 # 29651 xor c a 0 1 1 b 0 1 1 # 29652 xor c a 0 1 1 b 0 0 0 e # 29653 xor c a 0 1 1 b 0 1 1 # 29654 xor c a 0 1 1 b 0 0 0 e # 29655 xor c a 0 1 1 b 0 1 1 # 29656 xor c a 0 1 1 b 0 0 0 # 29657 xor c a 0 1 1 e b 0 1 1 e # 29658 xor c a 0 1 1 e b 0 0 1 e # 29659 xor c a 0 1 1 e b 0 1 1 e # 29660 xor c a 0 1 1 e b 0 0 1 e # 29661 xor c a 0 1 1 e b 0 1 1 e # 29662 xor c a 0 1 1 e b 0 0 1 # 29663 xor c a 0 1 1 e b 0 1 1 e # 29664 xor c a 0 1 1 e b 0 0 1 e # 29665 xor c a 0 1 1 e b 0 1 1 e # 29666 xor c a 0 1 1 e b 0 0 1 e # 29667 xor c a 0 1 1 e b 0 1 1 e # 29668 xor c a 0 1 1 e b 0 0 1 # 29669 xor c a 0 1 1 b 0 1 1 # 29670 xor c a 0 1 1 b 0 0 1 e # 29671 xor c a 0 1 1 b 0 1 1 # 29672 xor c a 0 1 1 b 0 0 1 e # 29673 xor c a 0 1 1 b 0 1 1 # 29674 xor c a 0 1 1 b 0 0 1 # 29675 xor c a 0 1 1 e b 0 1 1 e # 29676 xor c a 0 1 1 e b 0 1 0 e # 29677 xor c a 0 1 1 e b 0 1 1 e # 29678 xor c a 0 1 1 e b 0 1 0 e # 29679 xor c a 0 1 1 e b 0 1 1 e # 29680 xor c a 0 1 1 e b 0 1 0 # 29681 xor c a 0 1 1 e b 0 1 1 e # 29682 xor c a 0 1 1 e b 0 1 0 e # 29683 xor c a 0 1 1 e b 0 1 1 e # 29684 xor c a 0 1 1 e b 0 1 0 e # 29685 xor c a 0 1 1 e b 0 1 1 e # 29686 xor c a 0 1 1 e b 0 1 0 # 29687 xor c a 0 1 1 b 0 1 1 # 29688 xor c a 0 1 1 b 0 1 0 e # 29689 xor c a 0 1 1 b 0 1 1 # 29690 xor c a 0 1 1 b 0 1 0 e # 29691 xor c a 0 1 1 b 0 1 1 # 29692 xor c a 0 1 1 b 0 1 0 # 29693 xor c a 0 1 1 e b 0 1 1 e # 29694 xor c a 0 1 1 e b 0 1 1 e # 29695 xor c a 0 1 1 e b 0 1 1 e # 29696 xor c a 0 1 1 e b 0 1 1 e # 29697 xor c a 0 1 1 e b 0 1 1 e # 29698 xor c a 0 1 1 e b 0 1 1 # 29699 xor c a 0 1 1 e b 0 1 1 e # 29700 xor c a 0 1 1 e b 0 1 1 e # 29701 xor c a 0 1 1 e b 0 1 1 e # 29702 xor c a 0 1 1 e b 0 1 1 e # 29703 xor c a 0 1 1 e b 0 1 1 e # 29704 xor c a 0 1 1 e b 0 1 1 # 29705 xor c a 0 1 1 b 0 1 1 # 29706 xor c a 0 1 1 b 0 1 1 e # 29707 xor c a 0 1 1 b 0 1 1 # 29708 xor c a 0 1 1 b 0 1 1 e # 29709 xor c a 0 1 1 b 0 1 1 # 29710 xor c a 0 1 1 b 0 1 1 # 29711 xor c a 1 0 0 e b 1 0 0 e # 29712 xor c a 1 0 0 e b 1 0 0 e # 29713 xor c a 1 0 0 e b 1 0 0 e # 29714 xor c a 1 0 0 e b 1 0 0 f # 29715 xor c a 1 0 0 e b 1 0 0 e # 29716 xor c a 1 0 0 e b 1 0 0 0 # 29717 xor c a 1 0 0 f b 1 0 0 f # 29718 xor c a 1 0 0 f b 1 0 0 e # 29719 xor c a 1 0 0 f b 1 0 0 f # 29720 xor c a 1 0 0 f b 1 0 0 f # 29721 xor c a 1 0 0 f b 1 0 0 f # 29722 xor c a 1 0 0 f b 1 0 0 # 29723 xor c a 1 0 0 0 b 1 0 0 0 # 29724 xor c a 1 0 0 0 b 1 0 0 e # 29725 xor c a 1 0 0 b 1 0 0 # 29726 xor c a 1 0 0 b 1 0 0 f # 29727 xor c a 1 0 0 b 1 0 0 # 29728 xor c a 1 0 0 b 1 0 0 0 # 29729 xor c a 1 0 0 e b 1 0 0 e # 29730 xor c a 1 0 0 e b 1 0 1 e # 29731 xor c a 1 0 0 e b 1 0 0 e # 29732 xor c a 1 0 0 e b 1 0 1 f # 29733 xor c a 1 0 0 e b 1 0 0 e # 29734 xor c a 1 0 0 e b 1 0 1 # 29735 xor c a 1 0 0 f b 1 0 0 f # 29736 xor c a 1 0 0 f b 1 0 1 e # 29737 xor c a 1 0 0 f b 1 0 0 f # 29738 xor c a 1 0 0 f b 1 0 1 f # 29739 xor c a 1 0 0 f b 1 0 0 f # 29740 xor c a 1 0 0 f b 1 0 1 0 # 29741 xor c a 1 0 0 b 1 0 0 # 29742 xor c a 1 0 0 b 1 0 1 e # 29743 xor c a 1 0 0 b 1 0 0 # 29744 xor c a 1 0 0 b 1 0 1 f # 29745 xor c a 1 0 0 0 b 1 0 0 0 # 29746 xor c a 1 0 0 0 b 1 0 1 # 29747 xor c a 1 0 0 e b 1 0 0 e # 29748 xor c a 1 0 0 e b 1 1 0 e # 29749 xor c a 1 0 0 e b 1 0 0 e # 29750 xor c a 1 0 0 e b 1 1 0 f # 29751 xor c a 1 0 0 e b 1 0 0 e # 29752 xor c a 1 0 0 e b 1 1 0 # 29753 xor c a 1 0 0 f b 1 0 0 f # 29754 xor c a 1 0 0 f b 1 1 0 e # 29755 xor c a 1 0 0 f b 1 0 0 f # 29756 xor c a 1 0 0 f b 1 1 0 f # 29757 xor c a 1 0 0 f b 1 0 0 f # 29758 xor c a 1 0 0 f b 1 1 0 0 # 29759 xor c a 1 0 0 0 b 1 0 0 0 # 29760 xor c a 1 0 0 0 b 1 1 0 e # 29761 xor c a 1 0 0 0 b 1 0 0 0 # 29762 xor c a 1 0 0 0 b 1 1 0 f # 29763 xor c a 1 0 0 0 b 1 0 0 0 # 29764 xor c a 1 0 0 0 b 1 1 0 0 # 29765 xor c a 1 0 0 e b 1 0 0 e # 29766 xor c a 1 0 0 e b 1 1 1 e # 29767 xor c a 1 0 0 e b 1 0 0 e # 29768 xor c a 1 0 0 e b 1 1 1 f # 29769 xor c a 1 0 0 e b 1 0 0 e # 29770 xor c a 1 0 0 e b 1 1 1 0 # 29771 xor c a 1 0 0 f b 1 0 0 f # 29772 xor c a 1 0 0 f b 1 1 1 e # 29773 xor c a 1 0 0 f b 1 0 0 f # 29774 xor c a 1 0 0 f b 1 1 1 f # 29775 xor c a 1 0 0 f b 1 0 0 f # 29776 xor c a 1 0 0 f b 1 1 1 0 # 29777 xor c a 1 0 0 b 1 0 0 # 29778 xor c a 1 0 0 b 1 1 1 e # 29779 xor c a 1 0 0 0 b 1 0 0 0 # 29780 xor c a 1 0 0 0 b 1 1 1 f # 29781 xor c a 1 0 0 b 1 0 0 # 29782 xor c a 1 0 0 b 1 1 1 0 # 29783 xor c a 1 0 1 e b 1 0 1 e # 29784 xor c a 1 0 1 e b 1 0 0 e # 29785 xor c a 1 0 1 e b 1 0 1 e # 29786 xor c a 1 0 1 e b 1 0 0 f # 29787 xor c a 1 0 1 e b 1 0 1 e # 29788 xor c a 1 0 1 e b 1 0 0 # 29789 xor c a 1 0 1 f b 1 0 1 f # 29790 xor c a 1 0 1 f b 1 0 0 e # 29791 xor c a 1 0 1 f b 1 0 1 f # 29792 xor c a 1 0 1 f b 1 0 0 f # 29793 xor c a 1 0 1 f b 1 0 1 f # 29794 xor c a 1 0 1 f b 1 0 0 0 # 29795 xor c a 1 0 1 0 b 1 0 1 0 # 29796 xor c a 1 0 1 0 b 1 0 0 e # 29797 xor c a 1 0 1 b 1 0 1 # 29798 xor c a 1 0 1 b 1 0 0 f # 29799 xor c a 1 0 1 0 b 1 0 1 0 # 29800 xor c a 1 0 1 0 b 1 0 0 # 29801 xor c a 1 0 1 e b 1 0 1 e # 29802 xor c a 1 0 1 e b 1 0 1 e # 29803 xor c a 1 0 1 e b 1 0 1 e # 29804 xor c a 1 0 1 e b 1 0 1 f # 29805 xor c a 1 0 1 e b 1 0 1 e # 29806 xor c a 1 0 1 e b 1 0 1 0 # 29807 xor c a 1 0 1 f b 1 0 1 f # 29808 xor c a 1 0 1 f b 1 0 1 e # 29809 xor c a 1 0 1 f b 1 0 1 f # 29810 xor c a 1 0 1 f b 1 0 1 f # 29811 xor c a 1 0 1 f b 1 0 1 f # 29812 xor c a 1 0 1 f b 1 0 1 0 # 29813 xor c a 1 0 1 0 b 1 0 1 0 # 29814 xor c a 1 0 1 0 b 1 0 1 e # 29815 xor c a 1 0 1 0 b 1 0 1 0 # 29816 xor c a 1 0 1 0 b 1 0 1 f # 29817 xor c a 1 0 1 b 1 0 1 # 29818 xor c a 1 0 1 b 1 0 1 0 # 29819 xor c a 1 0 1 e b 1 0 1 e # 29820 xor c a 1 0 1 e b 1 1 0 e # 29821 xor c a 1 0 1 e b 1 0 1 e # 29822 xor c a 1 0 1 e b 1 1 0 f # 29823 xor c a 1 0 1 e b 1 0 1 e # 29824 xor c a 1 0 1 e b 1 1 0 0 # 29825 xor c a 1 0 1 f b 1 0 1 f # 29826 xor c a 1 0 1 f b 1 1 0 e # 29827 xor c a 1 0 1 f b 1 0 1 f # 29828 xor c a 1 0 1 f b 1 1 0 f # 29829 xor c a 1 0 1 f b 1 0 1 f # 29830 xor c a 1 0 1 f b 1 1 0 0 # 29831 xor c a 1 0 1 0 b 1 0 1 0 # 29832 xor c a 1 0 1 0 b 1 1 0 e # 29833 xor c a 1 0 1 0 b 1 0 1 0 # 29834 xor c a 1 0 1 0 b 1 1 0 f # 29835 xor c a 1 0 1 b 1 0 1 # 29836 xor c a 1 0 1 b 1 1 0 0 # 29837 xor c a 1 0 1 e b 1 0 1 e # 29838 xor c a 1 0 1 e b 1 1 1 e # 29839 xor c a 1 0 1 e b 1 0 1 e # 29840 xor c a 1 0 1 e b 1 1 1 f # 29841 xor c a 1 0 1 e b 1 0 1 e # 29842 xor c a 1 0 1 e b 1 1 1 # 29843 xor c a 1 0 1 f b 1 0 1 f # 29844 xor c a 1 0 1 f b 1 1 1 e # 29845 xor c a 1 0 1 f b 1 0 1 f # 29846 xor c a 1 0 1 f b 1 1 1 f # 29847 xor c a 1 0 1 f b 1 0 1 f # 29848 xor c a 1 0 1 f b 1 1 1 # 29849 xor c a 1 0 1 0 b 1 0 1 0 # 29850 xor c a 1 0 1 0 b 1 1 1 e # 29851 xor c a 1 0 1 b 1 0 1 # 29852 xor c a 1 0 1 b 1 1 1 f # 29853 xor c a 1 0 1 b 1 0 1 # 29854 xor c a 1 0 1 b 1 1 1 # 29855 xor c a 1 1 0 e b 1 1 0 e # 29856 xor c a 1 1 0 e b 1 0 0 e # 29857 xor c a 1 1 0 e b 1 1 0 e # 29858 xor c a 1 1 0 e b 1 0 0 f # 29859 xor c a 1 1 0 e b 1 1 0 e # 29860 xor c a 1 1 0 e b 1 0 0 # 29861 xor c a 1 1 0 f b 1 1 0 f # 29862 xor c a 1 1 0 f b 1 0 0 e # 29863 xor c a 1 1 0 f b 1 1 0 f # 29864 xor c a 1 1 0 f b 1 0 0 f # 29865 xor c a 1 1 0 f b 1 1 0 f # 29866 xor c a 1 1 0 f b 1 0 0 # 29867 xor c a 1 1 0 b 1 1 0 # 29868 xor c a 1 1 0 b 1 0 0 e # 29869 xor c a 1 1 0 0 b 1 1 0 0 # 29870 xor c a 1 1 0 0 b 1 0 0 f # 29871 xor c a 1 1 0 b 1 1 0 # 29872 xor c a 1 1 0 b 1 0 0 # 29873 xor c a 1 1 0 e b 1 1 0 e # 29874 xor c a 1 1 0 e b 1 0 1 e # 29875 xor c a 1 1 0 e b 1 1 0 e # 29876 xor c a 1 1 0 e b 1 0 1 f # 29877 xor c a 1 1 0 e b 1 1 0 e # 29878 xor c a 1 1 0 e b 1 0 1 0 # 29879 xor c a 1 1 0 f b 1 1 0 f # 29880 xor c a 1 1 0 f b 1 0 1 e # 29881 xor c a 1 1 0 f b 1 1 0 f # 29882 xor c a 1 1 0 f b 1 0 1 f # 29883 xor c a 1 1 0 f b 1 1 0 f # 29884 xor c a 1 1 0 f b 1 0 1 0 # 29885 xor c a 1 1 0 b 1 1 0 # 29886 xor c a 1 1 0 b 1 0 1 e # 29887 xor c a 1 1 0 b 1 1 0 # 29888 xor c a 1 1 0 b 1 0 1 f # 29889 xor c a 1 1 0 0 b 1 1 0 0 # 29890 xor c a 1 1 0 0 b 1 0 1 # 29891 xor c a 1 1 0 e b 1 1 0 e # 29892 xor c a 1 1 0 e b 1 1 0 e # 29893 xor c a 1 1 0 e b 1 1 0 e # 29894 xor c a 1 1 0 e b 1 1 0 f # 29895 xor c a 1 1 0 e b 1 1 0 e # 29896 xor c a 1 1 0 e b 1 1 0 0 # 29897 xor c a 1 1 0 f b 1 1 0 f # 29898 xor c a 1 1 0 f b 1 1 0 e # 29899 xor c a 1 1 0 f b 1 1 0 f # 29900 xor c a 1 1 0 f b 1 1 0 f # 29901 xor c a 1 1 0 f b 1 1 0 f # 29902 xor c a 1 1 0 f b 1 1 0 0 # 29903 xor c a 1 1 0 0 b 1 1 0 0 # 29904 xor c a 1 1 0 0 b 1 1 0 e # 29905 xor c a 1 1 0 b 1 1 0 # 29906 xor c a 1 1 0 b 1 1 0 f # 29907 xor c a 1 1 0 0 b 1 1 0 0 # 29908 xor c a 1 1 0 0 b 1 1 0 # 29909 xor c a 1 1 0 e b 1 1 0 e # 29910 xor c a 1 1 0 e b 1 1 1 e # 29911 xor c a 1 1 0 e b 1 1 0 e # 29912 xor c a 1 1 0 e b 1 1 1 f # 29913 xor c a 1 1 0 e b 1 1 0 e # 29914 xor c a 1 1 0 e b 1 1 1 # 29915 xor c a 1 1 0 f b 1 1 0 f # 29916 xor c a 1 1 0 f b 1 1 1 e # 29917 xor c a 1 1 0 f b 1 1 0 f # 29918 xor c a 1 1 0 f b 1 1 1 f # 29919 xor c a 1 1 0 f b 1 1 0 f # 29920 xor c a 1 1 0 f b 1 1 1 0 # 29921 xor c a 1 1 0 0 b 1 1 0 0 # 29922 xor c a 1 1 0 0 b 1 1 1 e # 29923 xor c a 1 1 0 b 1 1 0 # 29924 xor c a 1 1 0 b 1 1 1 f # 29925 xor c a 1 1 0 0 b 1 1 0 0 # 29926 xor c a 1 1 0 0 b 1 1 1 # 29927 xor c a 1 1 1 e b 1 1 1 e # 29928 xor c a 1 1 1 e b 1 0 0 e # 29929 xor c a 1 1 1 e b 1 1 1 e # 29930 xor c a 1 1 1 e b 1 0 0 f # 29931 xor c a 1 1 1 e b 1 1 1 e # 29932 xor c a 1 1 1 e b 1 0 0 # 29933 xor c a 1 1 1 f b 1 1 1 f # 29934 xor c a 1 1 1 f b 1 0 0 e # 29935 xor c a 1 1 1 f b 1 1 1 f # 29936 xor c a 1 1 1 f b 1 0 0 f # 29937 xor c a 1 1 1 f b 1 1 1 f # 29938 xor c a 1 1 1 f b 1 0 0 # 29939 xor c a 1 1 1 0 b 1 1 1 0 # 29940 xor c a 1 1 1 0 b 1 0 0 e # 29941 xor c a 1 1 1 b 1 1 1 # 29942 xor c a 1 1 1 b 1 0 0 f # 29943 xor c a 1 1 1 0 b 1 1 1 0 # 29944 xor c a 1 1 1 0 b 1 0 0 # 29945 xor c a 1 1 1 e b 1 1 1 e # 29946 xor c a 1 1 1 e b 1 0 1 e # 29947 xor c a 1 1 1 e b 1 1 1 e # 29948 xor c a 1 1 1 e b 1 0 1 f # 29949 xor c a 1 1 1 e b 1 1 1 e # 29950 xor c a 1 1 1 e b 1 0 1 0 # 29951 xor c a 1 1 1 f b 1 1 1 f # 29952 xor c a 1 1 1 f b 1 0 1 e # 29953 xor c a 1 1 1 f b 1 1 1 f # 29954 xor c a 1 1 1 f b 1 0 1 f # 29955 xor c a 1 1 1 f b 1 1 1 f # 29956 xor c a 1 1 1 f b 1 0 1 # 29957 xor c a 1 1 1 0 b 1 1 1 0 # 29958 xor c a 1 1 1 0 b 1 0 1 e # 29959 xor c a 1 1 1 0 b 1 1 1 0 # 29960 xor c a 1 1 1 0 b 1 0 1 f # 29961 xor c a 1 1 1 0 b 1 1 1 0 # 29962 xor c a 1 1 1 0 b 1 0 1 0 # 29963 xor c a 1 1 1 e b 1 1 1 e # 29964 xor c a 1 1 1 e b 1 1 0 e # 29965 xor c a 1 1 1 e b 1 1 1 e # 29966 xor c a 1 1 1 e b 1 1 0 f # 29967 xor c a 1 1 1 e b 1 1 1 e # 29968 xor c a 1 1 1 e b 1 1 0 # 29969 xor c a 1 1 1 f b 1 1 1 f # 29970 xor c a 1 1 1 f b 1 1 0 e # 29971 xor c a 1 1 1 f b 1 1 1 f # 29972 xor c a 1 1 1 f b 1 1 0 f # 29973 xor c a 1 1 1 f b 1 1 1 f # 29974 xor c a 1 1 1 f b 1 1 0 0 # 29975 xor c a 1 1 1 0 b 1 1 1 0 # 29976 xor c a 1 1 1 0 b 1 1 0 e # 29977 xor c a 1 1 1 0 b 1 1 1 0 # 29978 xor c a 1 1 1 0 b 1 1 0 f # 29979 xor c a 1 1 1 b 1 1 1 # 29980 xor c a 1 1 1 b 1 1 0 0 # 29981 xor c a 1 1 1 e b 1 1 1 e # 29982 xor c a 1 1 1 e b 1 1 1 e # 29983 xor c a 1 1 1 e b 1 1 1 e # 29984 xor c a 1 1 1 e b 1 1 1 f # 29985 xor c a 1 1 1 e b 1 1 1 e # 29986 xor c a 1 1 1 e b 1 1 1 # 29987 xor c a 1 1 1 f b 1 1 1 f # 29988 xor c a 1 1 1 f b 1 1 1 e # 29989 xor c a 1 1 1 f b 1 1 1 f # 29990 xor c a 1 1 1 f b 1 1 1 f # 29991 xor c a 1 1 1 f b 1 1 1 f # 29992 xor c a 1 1 1 f b 1 1 1 0 # 29993 xor c a 1 1 1 0 b 1 1 1 0 # 29994 xor c a 1 1 1 0 b 1 1 1 e # 29995 xor c a 1 1 1 b 1 1 1 # 29996 xor c a 1 1 1 b 1 1 1 f # 29997 xor c a 1 1 1 b 1 1 1 # 29998 xor c a 1 1 1 b 1 1 1 0 # 29999 xor c a 31 0 0 e b 31 0 0 e # 30000 xor c a 31 0 0 e b 31 0 0 e # 30001 xor c a 31 0 0 e b 31 0 0 e # 30002 xor c a 31 0 0 e b 31 0 0 f # 30003 xor c a 31 0 0 e b 31 0 0 e # 30004 xor c a 31 0 0 e b 31 0 0 1 6 7 12 13 16 24 25 27 28 29 # 30005 xor c a 31 0 0 f b 31 0 0 f # 30006 xor c a 31 0 0 f b 31 0 0 e # 30007 xor c a 31 0 0 f b 31 0 0 f # 30008 xor c a 31 0 0 f b 31 0 0 f # 30009 xor c a 31 0 0 f b 31 0 0 f # 30010 xor c a 31 0 0 f b 31 0 0 1 2 3 6 8 10 11 12 13 16 17 18 22 23 27 # 30011 xor c a 31 0 0 0 3 4 5 6 9 10 12 13 14 17 19 21 23 24 25 27 b 31 0 0 0 3 4 5 6 9 10 12 13 14 17 19 21 23 24 25 27 # 30012 xor c a 31 0 0 0 3 4 5 6 9 10 12 13 14 17 19 21 23 24 25 27 b 31 0 0 e # 30013 xor c a 31 0 0 1 2 5 7 10 11 14 15 16 17 19 20 21 23 24 27 28 29 b 31 0 0 1 2 5 7 10 11 14 15 16 17 19 20 21 23 24 27 28 29 # 30014 xor c a 31 0 0 1 2 5 7 10 11 14 15 16 17 19 20 21 23 24 27 28 29 b 31 0 0 f # 30015 xor c a 31 0 0 3 4 6 7 13 14 16 17 19 20 22 23 26 28 29 30 b 31 0 0 3 4 6 7 13 14 16 17 19 20 22 23 26 28 29 30 # 30016 xor c a 31 0 0 3 4 6 7 13 14 16 17 19 20 22 23 26 28 29 30 b 31 0 0 3 5 6 7 12 15 20 21 23 26 27 30 # 30017 xor c a 31 0 0 e b 31 0 0 e # 30018 xor c a 31 0 0 e b 31 0 1 e # 30019 xor c a 31 0 0 e b 31 0 0 e # 30020 xor c a 31 0 0 e b 31 0 1 f # 30021 xor c a 31 0 0 e b 31 0 0 e # 30022 xor c a 31 0 0 e b 31 0 1 0 1 3 4 6 7 9 11 12 13 15 17 19 20 22 24 27 28 29 30 # 30023 xor c a 31 0 0 f b 31 0 0 f # 30024 xor c a 31 0 0 f b 31 0 1 e # 30025 xor c a 31 0 0 f b 31 0 0 f # 30026 xor c a 31 0 0 f b 31 0 1 f # 30027 xor c a 31 0 0 f b 31 0 0 f # 30028 xor c a 31 0 0 f b 31 0 1 0 8 10 11 12 13 15 18 20 24 25 26 27 28 # 30029 xor c a 31 0 0 1 2 3 7 10 13 14 17 19 20 22 25 29 30 b 31 0 0 1 2 3 7 10 13 14 17 19 20 22 25 29 30 # 30030 xor c a 31 0 0 1 2 3 7 10 13 14 17 19 20 22 25 29 30 b 31 0 1 e # 30031 xor c a 31 0 0 0 1 3 5 8 9 14 16 17 18 20 24 26 27 28 30 b 31 0 0 0 1 3 5 8 9 14 16 17 18 20 24 26 27 28 30 # 30032 xor c a 31 0 0 0 1 3 5 8 9 14 16 17 18 20 24 26 27 28 30 b 31 0 1 f # 30033 xor c a 31 0 0 0 3 5 6 7 8 9 10 12 16 22 23 28 29 30 b 31 0 0 0 3 5 6 7 8 9 10 12 16 22 23 28 29 30 # 30034 xor c a 31 0 0 0 3 5 6 7 8 9 10 12 16 22 23 28 29 30 b 31 0 1 0 4 13 14 15 16 17 18 23 24 27 30 # 30035 xor c a 31 0 0 e b 31 0 0 e # 30036 xor c a 31 0 0 e b 31 1 0 e # 30037 xor c a 31 0 0 e b 31 0 0 e # 30038 xor c a 31 0 0 e b 31 1 0 f # 30039 xor c a 31 0 0 e b 31 0 0 e # 30040 xor c a 31 0 0 e b 31 1 0 1 3 7 8 12 14 16 17 21 24 25 26 27 30 # 30041 xor c a 31 0 0 f b 31 0 0 f # 30042 xor c a 31 0 0 f b 31 1 0 e # 30043 xor c a 31 0 0 f b 31 0 0 f # 30044 xor c a 31 0 0 f b 31 1 0 f # 30045 xor c a 31 0 0 f b 31 0 0 f # 30046 xor c a 31 0 0 f b 31 1 0 0 1 2 6 10 12 18 20 21 22 23 24 25 26 29 # 30047 xor c a 31 0 0 1 3 5 7 8 9 10 12 14 19 22 24 25 26 29 30 b 31 0 0 1 3 5 7 8 9 10 12 14 19 22 24 25 26 29 30 # 30048 xor c a 31 0 0 1 3 5 7 8 9 10 12 14 19 22 24 25 26 29 30 b 31 1 0 e # 30049 xor c a 31 0 0 0 1 2 5 6 8 9 13 15 17 18 20 27 28 b 31 0 0 0 1 2 5 6 8 9 13 15 17 18 20 27 28 # 30050 xor c a 31 0 0 0 1 2 5 6 8 9 13 15 17 18 20 27 28 b 31 1 0 f # 30051 xor c a 31 0 0 3 4 6 8 9 10 15 16 18 19 26 29 30 b 31 0 0 3 4 6 8 9 10 15 16 18 19 26 29 30 # 30052 xor c a 31 0 0 3 4 6 8 9 10 15 16 18 19 26 29 30 b 31 1 0 0 3 4 6 10 11 12 15 18 20 21 25 26 27 29 # 30053 xor c a 31 0 0 e b 31 0 0 e # 30054 xor c a 31 0 0 e b 31 1 1 e # 30055 xor c a 31 0 0 e b 31 0 0 e # 30056 xor c a 31 0 0 e b 31 1 1 f # 30057 xor c a 31 0 0 e b 31 0 0 e # 30058 xor c a 31 0 0 e b 31 1 1 0 2 3 8 9 12 13 14 20 22 24 25 30 # 30059 xor c a 31 0 0 f b 31 0 0 f # 30060 xor c a 31 0 0 f b 31 1 1 e # 30061 xor c a 31 0 0 f b 31 0 0 f # 30062 xor c a 31 0 0 f b 31 1 1 f # 30063 xor c a 31 0 0 f b 31 0 0 f # 30064 xor c a 31 0 0 f b 31 1 1 2 3 4 5 8 10 13 14 15 16 18 24 26 28 29 # 30065 xor c a 31 0 0 0 3 8 9 13 15 16 18 20 22 26 27 29 b 31 0 0 0 3 8 9 13 15 16 18 20 22 26 27 29 # 30066 xor c a 31 0 0 0 3 8 9 13 15 16 18 20 22 26 27 29 b 31 1 1 e # 30067 xor c a 31 0 0 4 5 6 8 9 11 12 15 17 18 19 22 23 26 28 29 b 31 0 0 4 5 6 8 9 11 12 15 17 18 19 22 23 26 28 29 # 30068 xor c a 31 0 0 4 5 6 8 9 11 12 15 17 18 19 22 23 26 28 29 b 31 1 1 f # 30069 xor c a 31 0 0 0 2 4 5 6 9 10 12 14 15 16 18 19 20 21 22 23 27 28 b 31 0 0 0 2 4 5 6 9 10 12 14 15 16 18 19 20 21 22 23 27 28 # 30070 xor c a 31 0 0 0 2 4 5 6 9 10 12 14 15 16 18 19 20 21 22 23 27 28 b 31 1 1 0 5 7 9 11 12 13 14 22 23 24 29 30 # 30071 xor c a 31 0 1 e b 31 0 1 e # 30072 xor c a 31 0 1 e b 31 0 0 e # 30073 xor c a 31 0 1 e b 31 0 1 e # 30074 xor c a 31 0 1 e b 31 0 0 f # 30075 xor c a 31 0 1 e b 31 0 1 e # 30076 xor c a 31 0 1 e b 31 0 0 2 4 5 6 9 10 13 15 20 23 25 27 28 29 # 30077 xor c a 31 0 1 f b 31 0 1 f # 30078 xor c a 31 0 1 f b 31 0 0 e # 30079 xor c a 31 0 1 f b 31 0 1 f # 30080 xor c a 31 0 1 f b 31 0 0 f # 30081 xor c a 31 0 1 f b 31 0 1 f # 30082 xor c a 31 0 1 f b 31 0 0 3 4 8 12 14 15 18 19 20 23 24 26 29 30 # 30083 xor c a 31 0 1 5 6 7 8 9 12 16 19 21 24 25 28 b 31 0 1 5 6 7 8 9 12 16 19 21 24 25 28 # 30084 xor c a 31 0 1 5 6 7 8 9 12 16 19 21 24 25 28 b 31 0 0 e # 30085 xor c a 31 0 1 2 3 4 5 8 10 15 17 22 23 24 26 b 31 0 1 2 3 4 5 8 10 15 17 22 23 24 26 # 30086 xor c a 31 0 1 2 3 4 5 8 10 15 17 22 23 24 26 b 31 0 0 f # 30087 xor c a 31 0 1 0 1 3 5 7 8 9 10 11 12 13 15 18 20 23 25 26 29 30 b 31 0 1 0 1 3 5 7 8 9 10 11 12 13 15 18 20 23 25 26 29 30 # 30088 xor c a 31 0 1 0 1 3 5 7 8 9 10 11 12 13 15 18 20 23 25 26 29 30 b 31 0 0 1 3 8 9 10 11 12 13 15 17 18 19 20 21 22 23 25 27 28 30 # 30089 xor c a 31 0 1 e b 31 0 1 e # 30090 xor c a 31 0 1 e b 31 0 1 e # 30091 xor c a 31 0 1 e b 31 0 1 e # 30092 xor c a 31 0 1 e b 31 0 1 f # 30093 xor c a 31 0 1 e b 31 0 1 e # 30094 xor c a 31 0 1 e b 31 0 1 2 7 10 13 14 16 17 18 19 20 21 22 26 27 30 # 30095 xor c a 31 0 1 f b 31 0 1 f # 30096 xor c a 31 0 1 f b 31 0 1 e # 30097 xor c a 31 0 1 f b 31 0 1 f # 30098 xor c a 31 0 1 f b 31 0 1 f # 30099 xor c a 31 0 1 f b 31 0 1 f # 30100 xor c a 31 0 1 f b 31 0 1 0 1 2 3 5 7 9 10 15 17 18 20 21 22 24 27 28 29 30 # 30101 xor c a 31 0 1 0 3 4 7 8 12 13 19 21 22 24 26 27 30 b 31 0 1 0 3 4 7 8 12 13 19 21 22 24 26 27 30 # 30102 xor c a 31 0 1 0 3 4 7 8 12 13 19 21 22 24 26 27 30 b 31 0 1 e # 30103 xor c a 31 0 1 0 1 3 4 5 6 10 11 12 13 17 18 20 21 22 24 27 29 b 31 0 1 0 1 3 4 5 6 10 11 12 13 17 18 20 21 22 24 27 29 # 30104 xor c a 31 0 1 0 1 3 4 5 6 10 11 12 13 17 18 20 21 22 24 27 29 b 31 0 1 f # 30105 xor c a 31 0 1 1 2 7 8 10 11 13 14 15 17 18 19 20 22 25 27 b 31 0 1 1 2 7 8 10 11 13 14 15 17 18 19 20 22 25 27 # 30106 xor c a 31 0 1 1 2 7 8 10 11 13 14 15 17 18 19 20 22 25 27 b 31 0 1 0 1 5 8 9 16 19 20 21 24 26 27 28 29 # 30107 xor c a 31 0 1 e b 31 0 1 e # 30108 xor c a 31 0 1 e b 31 1 0 e # 30109 xor c a 31 0 1 e b 31 0 1 e # 30110 xor c a 31 0 1 e b 31 1 0 f # 30111 xor c a 31 0 1 e b 31 0 1 e # 30112 xor c a 31 0 1 e b 31 1 0 0 1 2 6 7 9 11 13 15 16 18 19 21 23 24 25 27 28 # 30113 xor c a 31 0 1 f b 31 0 1 f # 30114 xor c a 31 0 1 f b 31 1 0 e # 30115 xor c a 31 0 1 f b 31 0 1 f # 30116 xor c a 31 0 1 f b 31 1 0 f # 30117 xor c a 31 0 1 f b 31 0 1 f # 30118 xor c a 31 0 1 f b 31 1 0 0 2 3 4 6 7 8 12 14 20 24 26 27 28 30 # 30119 xor c a 31 0 1 0 1 2 3 4 7 9 11 12 13 17 18 19 21 23 24 26 27 30 b 31 0 1 0 1 2 3 4 7 9 11 12 13 17 18 19 21 23 24 26 27 30 # 30120 xor c a 31 0 1 0 1 2 3 4 7 9 11 12 13 17 18 19 21 23 24 26 27 30 b 31 1 0 e # 30121 xor c a 31 0 1 2 3 10 13 14 20 23 25 26 27 30 b 31 0 1 2 3 10 13 14 20 23 25 26 27 30 # 30122 xor c a 31 0 1 2 3 10 13 14 20 23 25 26 27 30 b 31 1 0 f # 30123 xor c a 31 0 1 0 1 3 5 7 9 10 12 13 17 18 19 20 21 23 26 28 30 b 31 0 1 0 1 3 5 7 9 10 12 13 17 18 19 20 21 23 26 28 30 # 30124 xor c a 31 0 1 0 1 3 5 7 9 10 12 13 17 18 19 20 21 23 26 28 30 b 31 1 0 4 7 10 11 13 15 17 19 20 24 27 30 # 30125 xor c a 31 0 1 e b 31 0 1 e # 30126 xor c a 31 0 1 e b 31 1 1 e # 30127 xor c a 31 0 1 e b 31 0 1 e # 30128 xor c a 31 0 1 e b 31 1 1 f # 30129 xor c a 31 0 1 e b 31 0 1 e # 30130 xor c a 31 0 1 e b 31 1 1 0 1 3 5 9 10 12 13 15 16 19 21 23 25 26 28 # 30131 xor c a 31 0 1 f b 31 0 1 f # 30132 xor c a 31 0 1 f b 31 1 1 e # 30133 xor c a 31 0 1 f b 31 0 1 f # 30134 xor c a 31 0 1 f b 31 1 1 f # 30135 xor c a 31 0 1 f b 31 0 1 f # 30136 xor c a 31 0 1 f b 31 1 1 0 2 3 4 5 7 8 9 10 12 13 14 15 16 18 19 21 22 25 27 28 29 # 30137 xor c a 31 0 1 1 4 5 7 8 10 14 19 20 21 22 23 25 27 29 b 31 0 1 1 4 5 7 8 10 14 19 20 21 22 23 25 27 29 # 30138 xor c a 31 0 1 1 4 5 7 8 10 14 19 20 21 22 23 25 27 29 b 31 1 1 e # 30139 xor c a 31 0 1 0 1 4 6 11 12 13 14 15 16 17 19 20 22 23 25 26 29 30 b 31 0 1 0 1 4 6 11 12 13 14 15 16 17 19 20 22 23 25 26 29 30 # 30140 xor c a 31 0 1 0 1 4 6 11 12 13 14 15 16 17 19 20 22 23 25 26 29 30 b 31 1 1 f # 30141 xor c a 31 0 1 1 4 5 11 14 17 21 25 27 b 31 0 1 1 4 5 11 14 17 21 25 27 # 30142 xor c a 31 0 1 1 4 5 11 14 17 21 25 27 b 31 1 1 2 3 4 8 9 10 11 12 13 18 20 22 23 24 25 28 30 # 30143 xor c a 31 1 0 e b 31 1 0 e # 30144 xor c a 31 1 0 e b 31 0 0 e # 30145 xor c a 31 1 0 e b 31 1 0 e # 30146 xor c a 31 1 0 e b 31 0 0 f # 30147 xor c a 31 1 0 e b 31 1 0 e # 30148 xor c a 31 1 0 e b 31 0 0 1 2 4 6 7 8 10 11 13 15 16 21 24 25 28 29 # 30149 xor c a 31 1 0 f b 31 1 0 f # 30150 xor c a 31 1 0 f b 31 0 0 e # 30151 xor c a 31 1 0 f b 31 1 0 f # 30152 xor c a 31 1 0 f b 31 0 0 f # 30153 xor c a 31 1 0 f b 31 1 0 f # 30154 xor c a 31 1 0 f b 31 0 0 1 2 3 6 11 12 13 16 17 18 20 21 22 24 25 26 27 28 29 # 30155 xor c a 31 1 0 4 6 8 10 11 12 13 14 16 17 20 22 23 25 26 b 31 1 0 4 6 8 10 11 12 13 14 16 17 20 22 23 25 26 # 30156 xor c a 31 1 0 4 6 8 10 11 12 13 14 16 17 20 22 23 25 26 b 31 0 0 e # 30157 xor c a 31 1 0 0 1 2 3 4 6 8 11 13 14 15 16 19 21 22 24 25 26 30 b 31 1 0 0 1 2 3 4 6 8 11 13 14 15 16 19 21 22 24 25 26 30 # 30158 xor c a 31 1 0 0 1 2 3 4 6 8 11 13 14 15 16 19 21 22 24 25 26 30 b 31 0 0 f # 30159 xor c a 31 1 0 0 3 5 6 7 8 16 17 19 20 22 25 28 29 b 31 1 0 0 3 5 6 7 8 16 17 19 20 22 25 28 29 # 30160 xor c a 31 1 0 0 3 5 6 7 8 16 17 19 20 22 25 28 29 b 31 0 0 0 2 3 4 6 7 10 11 12 14 15 17 20 21 23 24 25 28 29 30 # 30161 xor c a 31 1 0 e b 31 1 0 e # 30162 xor c a 31 1 0 e b 31 0 1 e # 30163 xor c a 31 1 0 e b 31 1 0 e # 30164 xor c a 31 1 0 e b 31 0 1 f # 30165 xor c a 31 1 0 e b 31 1 0 e # 30166 xor c a 31 1 0 e b 31 0 1 0 3 4 5 6 7 10 11 12 13 14 15 17 22 25 26 27 28 29 # 30167 xor c a 31 1 0 f b 31 1 0 f # 30168 xor c a 31 1 0 f b 31 0 1 e # 30169 xor c a 31 1 0 f b 31 1 0 f # 30170 xor c a 31 1 0 f b 31 0 1 f # 30171 xor c a 31 1 0 f b 31 1 0 f # 30172 xor c a 31 1 0 f b 31 0 1 0 1 2 3 4 5 6 7 9 12 15 16 17 21 22 23 24 25 26 27 # 30173 xor c a 31 1 0 3 6 9 10 11 12 14 15 16 17 21 24 25 27 29 30 b 31 1 0 3 6 9 10 11 12 14 15 16 17 21 24 25 27 29 30 # 30174 xor c a 31 1 0 3 6 9 10 11 12 14 15 16 17 21 24 25 27 29 30 b 31 0 1 e # 30175 xor c a 31 1 0 0 3 4 7 8 10 11 12 13 14 15 16 17 18 21 23 24 26 27 28 29 30 b 31 1 0 0 3 4 7 8 10 11 12 13 14 15 16 17 18 21 23 24 26 27 28 29 30 # 30176 xor c a 31 1 0 0 3 4 7 8 10 11 12 13 14 15 16 17 18 21 23 24 26 27 28 29 30 b 31 0 1 f # 30177 xor c a 31 1 0 0 1 2 4 6 7 14 15 17 18 19 20 21 23 24 25 26 27 28 b 31 1 0 0 1 2 4 6 7 14 15 17 18 19 20 21 23 24 25 26 27 28 # 30178 xor c a 31 1 0 0 1 2 4 6 7 14 15 17 18 19 20 21 23 24 25 26 27 28 b 31 0 1 3 5 6 7 11 13 14 26 28 30 # 30179 xor c a 31 1 0 e b 31 1 0 e # 30180 xor c a 31 1 0 e b 31 1 0 e # 30181 xor c a 31 1 0 e b 31 1 0 e # 30182 xor c a 31 1 0 e b 31 1 0 f # 30183 xor c a 31 1 0 e b 31 1 0 e # 30184 xor c a 31 1 0 e b 31 1 0 1 8 9 10 13 15 17 21 22 29 # 30185 xor c a 31 1 0 f b 31 1 0 f # 30186 xor c a 31 1 0 f b 31 1 0 e # 30187 xor c a 31 1 0 f b 31 1 0 f # 30188 xor c a 31 1 0 f b 31 1 0 f # 30189 xor c a 31 1 0 f b 31 1 0 f # 30190 xor c a 31 1 0 f b 31 1 0 0 1 5 6 11 12 13 17 18 19 22 23 24 25 # 30191 xor c a 31 1 0 0 2 5 6 7 15 20 21 22 24 25 26 27 29 b 31 1 0 0 2 5 6 7 15 20 21 22 24 25 26 27 29 # 30192 xor c a 31 1 0 0 2 5 6 7 15 20 21 22 24 25 26 27 29 b 31 1 0 e # 30193 xor c a 31 1 0 4 7 9 10 11 15 16 17 19 22 23 25 26 29 30 b 31 1 0 4 7 9 10 11 15 16 17 19 22 23 25 26 29 30 # 30194 xor c a 31 1 0 4 7 9 10 11 15 16 17 19 22 23 25 26 29 30 b 31 1 0 f # 30195 xor c a 31 1 0 1 3 4 8 11 12 13 14 15 17 21 24 26 28 29 30 b 31 1 0 1 3 4 8 11 12 13 14 15 17 21 24 26 28 29 30 # 30196 xor c a 31 1 0 1 3 4 8 11 12 13 14 15 17 21 24 26 28 29 30 b 31 1 0 1 5 6 7 8 12 15 16 18 21 22 23 24 26 27 28 30 # 30197 xor c a 31 1 0 e b 31 1 0 e # 30198 xor c a 31 1 0 e b 31 1 1 e # 30199 xor c a 31 1 0 e b 31 1 0 e # 30200 xor c a 31 1 0 e b 31 1 1 f # 30201 xor c a 31 1 0 e b 31 1 0 e # 30202 xor c a 31 1 0 e b 31 1 1 4 5 7 8 14 17 21 24 26 27 30 # 30203 xor c a 31 1 0 f b 31 1 0 f # 30204 xor c a 31 1 0 f b 31 1 1 e # 30205 xor c a 31 1 0 f b 31 1 0 f # 30206 xor c a 31 1 0 f b 31 1 1 f # 30207 xor c a 31 1 0 f b 31 1 0 f # 30208 xor c a 31 1 0 f b 31 1 1 0 1 2 5 8 9 11 13 14 15 17 18 19 21 22 24 28 29 # 30209 xor c a 31 1 0 0 1 3 8 10 11 12 13 14 15 18 19 20 21 22 26 27 29 b 31 1 0 0 1 3 8 10 11 12 13 14 15 18 19 20 21 22 26 27 29 # 30210 xor c a 31 1 0 0 1 3 8 10 11 12 13 14 15 18 19 20 21 22 26 27 29 b 31 1 1 e # 30211 xor c a 31 1 0 4 5 6 8 11 15 17 18 20 23 24 25 26 27 b 31 1 0 4 5 6 8 11 15 17 18 20 23 24 25 26 27 # 30212 xor c a 31 1 0 4 5 6 8 11 15 17 18 20 23 24 25 26 27 b 31 1 1 f # 30213 xor c a 31 1 0 0 1 2 3 4 6 7 9 11 16 18 22 25 26 30 b 31 1 0 0 1 2 3 4 6 7 9 11 16 18 22 25 26 30 # 30214 xor c a 31 1 0 0 1 2 3 4 6 7 9 11 16 18 22 25 26 30 b 31 1 1 5 6 9 13 14 16 21 23 26 27 28 30 # 30215 xor c a 31 1 1 e b 31 1 1 e # 30216 xor c a 31 1 1 e b 31 0 0 e # 30217 xor c a 31 1 1 e b 31 1 1 e # 30218 xor c a 31 1 1 e b 31 0 0 f # 30219 xor c a 31 1 1 e b 31 1 1 e # 30220 xor c a 31 1 1 e b 31 0 0 1 4 10 11 12 13 16 17 18 21 22 23 26 29 30 # 30221 xor c a 31 1 1 f b 31 1 1 f # 30222 xor c a 31 1 1 f b 31 0 0 e # 30223 xor c a 31 1 1 f b 31 1 1 f # 30224 xor c a 31 1 1 f b 31 0 0 f # 30225 xor c a 31 1 1 f b 31 1 1 f # 30226 xor c a 31 1 1 f b 31 0 0 1 3 4 7 8 9 10 11 12 15 17 18 24 26 27 28 29 30 # 30227 xor c a 31 1 1 1 5 6 8 9 13 14 16 17 20 21 22 28 b 31 1 1 1 5 6 8 9 13 14 16 17 20 21 22 28 # 30228 xor c a 31 1 1 1 5 6 8 9 13 14 16 17 20 21 22 28 b 31 0 0 e # 30229 xor c a 31 1 1 1 2 7 9 11 13 15 16 21 26 27 29 b 31 1 1 1 2 7 9 11 13 15 16 21 26 27 29 # 30230 xor c a 31 1 1 1 2 7 9 11 13 15 16 21 26 27 29 b 31 0 0 f # 30231 xor c a 31 1 1 0 1 5 8 10 11 12 13 15 16 20 24 25 26 27 29 b 31 1 1 0 1 5 8 10 11 12 13 15 16 20 24 25 26 27 29 # 30232 xor c a 31 1 1 0 1 5 8 10 11 12 13 15 16 20 24 25 26 27 29 b 31 0 0 1 6 7 10 11 17 18 21 22 23 24 25 26 29 30 # 30233 xor c a 31 1 1 e b 31 1 1 e # 30234 xor c a 31 1 1 e b 31 0 1 e # 30235 xor c a 31 1 1 e b 31 1 1 e # 30236 xor c a 31 1 1 e b 31 0 1 f # 30237 xor c a 31 1 1 e b 31 1 1 e # 30238 xor c a 31 1 1 e b 31 0 1 0 1 8 9 10 11 14 15 16 17 23 26 27 28 # 30239 xor c a 31 1 1 f b 31 1 1 f # 30240 xor c a 31 1 1 f b 31 0 1 e # 30241 xor c a 31 1 1 f b 31 1 1 f # 30242 xor c a 31 1 1 f b 31 0 1 f # 30243 xor c a 31 1 1 f b 31 1 1 f # 30244 xor c a 31 1 1 f b 31 0 1 2 3 6 7 8 9 10 11 12 14 15 16 20 21 23 24 25 27 29 # 30245 xor c a 31 1 1 0 2 3 4 6 11 14 19 20 23 25 27 b 31 1 1 0 2 3 4 6 11 14 19 20 23 25 27 # 30246 xor c a 31 1 1 0 2 3 4 6 11 14 19 20 23 25 27 b 31 0 1 e # 30247 xor c a 31 1 1 6 7 8 10 11 12 16 17 18 19 20 21 22 25 26 29 b 31 1 1 6 7 8 10 11 12 16 17 18 19 20 21 22 25 26 29 # 30248 xor c a 31 1 1 6 7 8 10 11 12 16 17 18 19 20 21 22 25 26 29 b 31 0 1 f # 30249 xor c a 31 1 1 0 2 4 8 9 11 12 13 15 16 17 18 19 20 21 22 24 25 26 29 30 b 31 1 1 0 2 4 8 9 11 12 13 15 16 17 18 19 20 21 22 24 25 26 29 30 # 30250 xor c a 31 1 1 0 2 4 8 9 11 12 13 15 16 17 18 19 20 21 22 24 25 26 29 30 b 31 0 1 5 6 7 8 14 17 18 19 21 22 23 24 26 27 28 29 30 # 30251 xor c a 31 1 1 e b 31 1 1 e # 30252 xor c a 31 1 1 e b 31 1 0 e # 30253 xor c a 31 1 1 e b 31 1 1 e # 30254 xor c a 31 1 1 e b 31 1 0 f # 30255 xor c a 31 1 1 e b 31 1 1 e # 30256 xor c a 31 1 1 e b 31 1 0 0 5 8 9 12 13 14 16 17 19 21 22 23 24 26 27 28 # 30257 xor c a 31 1 1 f b 31 1 1 f # 30258 xor c a 31 1 1 f b 31 1 0 e # 30259 xor c a 31 1 1 f b 31 1 1 f # 30260 xor c a 31 1 1 f b 31 1 0 f # 30261 xor c a 31 1 1 f b 31 1 1 f # 30262 xor c a 31 1 1 f b 31 1 0 0 1 2 5 6 10 11 13 14 15 16 18 19 20 21 23 24 25 28 29 30 # 30263 xor c a 31 1 1 0 1 2 4 6 8 11 12 15 16 17 18 19 20 21 25 26 27 28 29 30 b 31 1 1 0 1 2 4 6 8 11 12 15 16 17 18 19 20 21 25 26 27 28 29 30 # 30264 xor c a 31 1 1 0 1 2 4 6 8 11 12 15 16 17 18 19 20 21 25 26 27 28 29 30 b 31 1 0 e # 30265 xor c a 31 1 1 1 2 3 4 6 10 11 13 15 16 18 19 22 23 24 25 26 27 28 29 30 b 31 1 1 1 2 3 4 6 10 11 13 15 16 18 19 22 23 24 25 26 27 28 29 30 # 30266 xor c a 31 1 1 1 2 3 4 6 10 11 13 15 16 18 19 22 23 24 25 26 27 28 29 30 b 31 1 0 f # 30267 xor c a 31 1 1 2 3 5 6 9 14 18 19 22 25 26 28 29 b 31 1 1 2 3 5 6 9 14 18 19 22 25 26 28 29 # 30268 xor c a 31 1 1 2 3 5 6 9 14 18 19 22 25 26 28 29 b 31 1 0 0 3 6 7 9 11 12 16 17 19 21 22 25 27 # 30269 xor c a 31 1 1 e b 31 1 1 e # 30270 xor c a 31 1 1 e b 31 1 1 e # 30271 xor c a 31 1 1 e b 31 1 1 e # 30272 xor c a 31 1 1 e b 31 1 1 f # 30273 xor c a 31 1 1 e b 31 1 1 e # 30274 xor c a 31 1 1 e b 31 1 1 4 5 7 9 11 12 13 22 23 25 29 # 30275 xor c a 31 1 1 f b 31 1 1 f # 30276 xor c a 31 1 1 f b 31 1 1 e # 30277 xor c a 31 1 1 f b 31 1 1 f # 30278 xor c a 31 1 1 f b 31 1 1 f # 30279 xor c a 31 1 1 f b 31 1 1 f # 30280 xor c a 31 1 1 f b 31 1 1 0 2 5 8 11 15 16 17 19 22 24 25 26 28 30 # 30281 xor c a 31 1 1 0 1 2 3 4 9 10 13 14 16 17 19 20 21 22 24 26 30 b 31 1 1 0 1 2 3 4 9 10 13 14 16 17 19 20 21 22 24 26 30 # 30282 xor c a 31 1 1 0 1 2 3 4 9 10 13 14 16 17 19 20 21 22 24 26 30 b 31 1 1 e # 30283 xor c a 31 1 1 2 6 8 9 16 17 18 19 20 21 24 25 29 b 31 1 1 2 6 8 9 16 17 18 19 20 21 24 25 29 # 30284 xor c a 31 1 1 2 6 8 9 16 17 18 19 20 21 24 25 29 b 31 1 1 f # 30285 xor c a 31 1 1 0 1 2 3 6 7 8 10 12 19 23 26 28 29 30 b 31 1 1 0 1 2 3 6 7 8 10 12 19 23 26 28 29 30 # 30286 xor c a 31 1 1 0 1 2 3 6 7 8 10 12 19 23 26 28 29 30 b 31 1 1 0 1 2 3 4 5 7 8 9 10 12 13 14 15 20 22 24 30 # 30287 xor c a 32 0 0 e b 32 0 0 e # 30288 xor c a 32 0 0 e b 32 0 0 e # 30289 xor c a 32 0 0 e b 32 0 0 e # 30290 xor c a 32 0 0 e b 32 0 0 f # 30291 xor c a 32 0 0 e b 32 0 0 e # 30292 xor c a 32 0 0 e b 32 0 0 0 1 2 3 4 5 7 8 11 12 14 15 16 17 19 20 21 22 25 26 27 29 30 # 30293 xor c a 32 0 0 f b 32 0 0 f # 30294 xor c a 32 0 0 f b 32 0 0 e # 30295 xor c a 32 0 0 f b 32 0 0 f # 30296 xor c a 32 0 0 f b 32 0 0 f # 30297 xor c a 32 0 0 f b 32 0 0 f # 30298 xor c a 32 0 0 f b 32 0 0 0 2 3 6 7 10 12 13 16 17 22 23 26 30 # 30299 xor c a 32 0 0 0 1 4 10 12 14 15 19 21 22 23 27 28 29 31 b 32 0 0 0 1 4 10 12 14 15 19 21 22 23 27 28 29 31 # 30300 xor c a 32 0 0 0 1 4 10 12 14 15 19 21 22 23 27 28 29 31 b 32 0 0 e # 30301 xor c a 32 0 0 0 1 3 7 8 10 11 12 13 15 16 17 18 20 24 27 29 30 b 32 0 0 0 1 3 7 8 10 11 12 13 15 16 17 18 20 24 27 29 30 # 30302 xor c a 32 0 0 0 1 3 7 8 10 11 12 13 15 16 17 18 20 24 27 29 30 b 32 0 0 f # 30303 xor c a 32 0 0 0 2 3 4 6 9 13 17 18 24 25 b 32 0 0 0 2 3 4 6 9 13 17 18 24 25 # 30304 xor c a 32 0 0 0 2 3 4 6 9 13 17 18 24 25 b 32 0 0 0 4 5 6 8 12 13 14 16 17 18 20 22 23 24 26 28 30 # 30305 xor c a 32 0 0 e b 32 0 0 e # 30306 xor c a 32 0 0 e b 32 0 1 e # 30307 xor c a 32 0 0 e b 32 0 0 e # 30308 xor c a 32 0 0 e b 32 0 1 f # 30309 xor c a 32 0 0 e b 32 0 0 e # 30310 xor c a 32 0 0 e b 32 0 1 0 1 2 3 4 5 6 7 10 13 14 15 20 21 23 27 28 29 31 # 30311 xor c a 32 0 0 f b 32 0 0 f # 30312 xor c a 32 0 0 f b 32 0 1 e # 30313 xor c a 32 0 0 f b 32 0 0 f # 30314 xor c a 32 0 0 f b 32 0 1 f # 30315 xor c a 32 0 0 f b 32 0 0 f # 30316 xor c a 32 0 0 f b 32 0 1 0 3 6 7 8 9 10 13 15 19 21 22 23 24 25 26 27 28 31 # 30317 xor c a 32 0 0 0 1 2 5 6 9 10 11 12 13 14 15 18 19 21 22 24 26 27 28 30 b 32 0 0 0 1 2 5 6 9 10 11 12 13 14 15 18 19 21 22 24 26 27 28 30 # 30318 xor c a 32 0 0 0 1 2 5 6 9 10 11 12 13 14 15 18 19 21 22 24 26 27 28 30 b 32 0 1 e # 30319 xor c a 32 0 0 1 2 3 5 7 8 10 13 15 18 19 22 23 24 25 26 27 31 b 32 0 0 1 2 3 5 7 8 10 13 15 18 19 22 23 24 25 26 27 31 # 30320 xor c a 32 0 0 1 2 3 5 7 8 10 13 15 18 19 22 23 24 25 26 27 31 b 32 0 1 f # 30321 xor c a 32 0 0 1 2 3 4 6 8 9 10 11 12 14 16 18 20 21 23 24 25 26 29 31 b 32 0 0 1 2 3 4 6 8 9 10 11 12 14 16 18 20 21 23 24 25 26 29 31 # 30322 xor c a 32 0 0 1 2 3 4 6 8 9 10 11 12 14 16 18 20 21 23 24 25 26 29 31 b 32 0 1 0 3 4 7 8 10 11 12 14 15 16 17 18 19 20 22 23 25 27 28 29 31 # 30323 xor c a 32 0 0 e b 32 0 0 e # 30324 xor c a 32 0 0 e b 32 1 0 e # 30325 xor c a 32 0 0 e b 32 0 0 e # 30326 xor c a 32 0 0 e b 32 1 0 f # 30327 xor c a 32 0 0 e b 32 0 0 e # 30328 xor c a 32 0 0 e b 32 1 0 1 5 8 9 10 11 13 16 19 20 22 23 26 27 30 31 # 30329 xor c a 32 0 0 f b 32 0 0 f # 30330 xor c a 32 0 0 f b 32 1 0 e # 30331 xor c a 32 0 0 f b 32 0 0 f # 30332 xor c a 32 0 0 f b 32 1 0 f # 30333 xor c a 32 0 0 f b 32 0 0 f # 30334 xor c a 32 0 0 f b 32 1 0 4 5 6 7 8 9 10 12 14 15 16 18 20 21 23 26 27 29 30 31 # 30335 xor c a 32 0 0 0 3 4 5 6 7 8 9 10 12 13 15 16 17 19 20 21 22 23 24 25 26 b 32 0 0 0 3 4 5 6 7 8 9 10 12 13 15 16 17 19 20 21 22 23 24 25 26 # 30336 xor c a 32 0 0 0 3 4 5 6 7 8 9 10 12 13 15 16 17 19 20 21 22 23 24 25 26 b 32 1 0 e # 30337 xor c a 32 0 0 0 3 10 13 14 16 18 19 20 21 22 23 27 28 29 31 b 32 0 0 0 3 10 13 14 16 18 19 20 21 22 23 27 28 29 31 # 30338 xor c a 32 0 0 0 3 10 13 14 16 18 19 20 21 22 23 27 28 29 31 b 32 1 0 f # 30339 xor c a 32 0 0 1 3 5 6 7 9 10 11 12 13 14 15 17 20 24 25 27 29 31 b 32 0 0 1 3 5 6 7 9 10 11 12 13 14 15 17 20 24 25 27 29 31 # 30340 xor c a 32 0 0 1 3 5 6 7 9 10 11 12 13 14 15 17 20 24 25 27 29 31 b 32 1 0 0 1 4 6 9 11 12 14 19 21 26 27 30 31 # 30341 xor c a 32 0 0 e b 32 0 0 e # 30342 xor c a 32 0 0 e b 32 1 1 e # 30343 xor c a 32 0 0 e b 32 0 0 e # 30344 xor c a 32 0 0 e b 32 1 1 f # 30345 xor c a 32 0 0 e b 32 0 0 e # 30346 xor c a 32 0 0 e b 32 1 1 4 6 7 10 13 15 16 17 18 20 21 22 25 27 29 30 31 # 30347 xor c a 32 0 0 f b 32 0 0 f # 30348 xor c a 32 0 0 f b 32 1 1 e # 30349 xor c a 32 0 0 f b 32 0 0 f # 30350 xor c a 32 0 0 f b 32 1 1 f # 30351 xor c a 32 0 0 f b 32 0 0 f # 30352 xor c a 32 0 0 f b 32 1 1 1 3 6 9 10 11 12 14 15 19 21 23 24 26 27 30 31 # 30353 xor c a 32 0 0 1 2 3 5 7 8 9 10 16 21 27 28 29 b 32 0 0 1 2 3 5 7 8 9 10 16 21 27 28 29 # 30354 xor c a 32 0 0 1 2 3 5 7 8 9 10 16 21 27 28 29 b 32 1 1 e # 30355 xor c a 32 0 0 0 2 4 6 7 9 14 16 18 22 25 28 29 31 b 32 0 0 0 2 4 6 7 9 14 16 18 22 25 28 29 31 # 30356 xor c a 32 0 0 0 2 4 6 7 9 14 16 18 22 25 28 29 31 b 32 1 1 f # 30357 xor c a 32 0 0 0 3 4 6 7 8 9 16 18 21 22 23 24 25 27 28 29 30 31 b 32 0 0 0 3 4 6 7 8 9 16 18 21 22 23 24 25 27 28 29 30 31 # 30358 xor c a 32 0 0 0 3 4 6 7 8 9 16 18 21 22 23 24 25 27 28 29 30 31 b 32 1 1 1 2 3 6 11 12 13 15 19 21 22 23 24 25 26 27 28 31 # 30359 xor c a 32 0 1 e b 32 0 1 e # 30360 xor c a 32 0 1 e b 32 0 0 e # 30361 xor c a 32 0 1 e b 32 0 1 e # 30362 xor c a 32 0 1 e b 32 0 0 f # 30363 xor c a 32 0 1 e b 32 0 1 e # 30364 xor c a 32 0 1 e b 32 0 0 2 3 4 5 6 13 15 17 20 23 27 28 29 30 # 30365 xor c a 32 0 1 f b 32 0 1 f # 30366 xor c a 32 0 1 f b 32 0 0 e # 30367 xor c a 32 0 1 f b 32 0 1 f # 30368 xor c a 32 0 1 f b 32 0 0 f # 30369 xor c a 32 0 1 f b 32 0 1 f # 30370 xor c a 32 0 1 f b 32 0 0 1 2 3 4 5 10 11 14 18 19 22 23 24 26 29 30 # 30371 xor c a 32 0 1 0 1 3 4 5 12 13 14 15 17 18 19 21 24 26 28 30 31 b 32 0 1 0 1 3 4 5 12 13 14 15 17 18 19 21 24 26 28 30 31 # 30372 xor c a 32 0 1 0 1 3 4 5 12 13 14 15 17 18 19 21 24 26 28 30 31 b 32 0 0 e # 30373 xor c a 32 0 1 3 4 5 8 10 11 13 14 15 16 17 21 26 28 30 31 b 32 0 1 3 4 5 8 10 11 13 14 15 16 17 21 26 28 30 31 # 30374 xor c a 32 0 1 3 4 5 8 10 11 13 14 15 16 17 21 26 28 30 31 b 32 0 0 f # 30375 xor c a 32 0 1 0 2 3 6 8 9 10 13 14 19 21 23 26 27 28 29 30 b 32 0 1 0 2 3 6 8 9 10 13 14 19 21 23 26 27 28 29 30 # 30376 xor c a 32 0 1 0 2 3 6 8 9 10 13 14 19 21 23 26 27 28 29 30 b 32 0 0 1 3 6 7 8 9 12 14 16 21 22 24 25 27 28 # 30377 xor c a 32 0 1 e b 32 0 1 e # 30378 xor c a 32 0 1 e b 32 0 1 e # 30379 xor c a 32 0 1 e b 32 0 1 e # 30380 xor c a 32 0 1 e b 32 0 1 f # 30381 xor c a 32 0 1 e b 32 0 1 e # 30382 xor c a 32 0 1 e b 32 0 1 3 4 6 7 9 11 13 15 22 26 28 30 # 30383 xor c a 32 0 1 f b 32 0 1 f # 30384 xor c a 32 0 1 f b 32 0 1 e # 30385 xor c a 32 0 1 f b 32 0 1 f # 30386 xor c a 32 0 1 f b 32 0 1 f # 30387 xor c a 32 0 1 f b 32 0 1 f # 30388 xor c a 32 0 1 f b 32 0 1 0 1 5 8 13 15 20 22 23 24 25 27 28 29 31 # 30389 xor c a 32 0 1 0 6 8 10 12 13 18 20 30 b 32 0 1 0 6 8 10 12 13 18 20 30 # 30390 xor c a 32 0 1 0 6 8 10 12 13 18 20 30 b 32 0 1 e # 30391 xor c a 32 0 1 0 2 4 6 7 8 9 11 12 14 16 17 19 21 26 27 28 29 31 b 32 0 1 0 2 4 6 7 8 9 11 12 14 16 17 19 21 26 27 28 29 31 # 30392 xor c a 32 0 1 0 2 4 6 7 8 9 11 12 14 16 17 19 21 26 27 28 29 31 b 32 0 1 f # 30393 xor c a 32 0 1 0 1 3 9 10 11 13 16 17 18 19 23 24 27 28 29 30 31 b 32 0 1 0 1 3 9 10 11 13 16 17 18 19 23 24 27 28 29 30 31 # 30394 xor c a 32 0 1 0 1 3 9 10 11 13 16 17 18 19 23 24 27 28 29 30 31 b 32 0 1 0 2 4 7 8 10 16 20 21 24 25 27 29 30 # 30395 xor c a 32 0 1 e b 32 0 1 e # 30396 xor c a 32 0 1 e b 32 1 0 e # 30397 xor c a 32 0 1 e b 32 0 1 e # 30398 xor c a 32 0 1 e b 32 1 0 f # 30399 xor c a 32 0 1 e b 32 0 1 e # 30400 xor c a 32 0 1 e b 32 1 0 1 3 4 5 6 7 9 11 13 18 19 21 24 25 28 31 # 30401 xor c a 32 0 1 f b 32 0 1 f # 30402 xor c a 32 0 1 f b 32 1 0 e # 30403 xor c a 32 0 1 f b 32 0 1 f # 30404 xor c a 32 0 1 f b 32 1 0 f # 30405 xor c a 32 0 1 f b 32 0 1 f # 30406 xor c a 32 0 1 f b 32 1 0 0 1 2 3 4 5 6 8 12 13 21 22 23 25 29 # 30407 xor c a 32 0 1 0 3 9 13 14 15 17 20 21 24 25 29 b 32 0 1 0 3 9 13 14 15 17 20 21 24 25 29 # 30408 xor c a 32 0 1 0 3 9 13 14 15 17 20 21 24 25 29 b 32 1 0 e # 30409 xor c a 32 0 1 0 1 2 4 8 9 10 12 13 16 18 22 24 26 28 30 31 b 32 0 1 0 1 2 4 8 9 10 12 13 16 18 22 24 26 28 30 31 # 30410 xor c a 32 0 1 0 1 2 4 8 9 10 12 13 16 18 22 24 26 28 30 31 b 32 1 0 f # 30411 xor c a 32 0 1 0 1 3 4 5 7 8 11 13 14 15 17 19 20 23 25 b 32 0 1 0 1 3 4 5 7 8 11 13 14 15 17 19 20 23 25 # 30412 xor c a 32 0 1 0 1 3 4 5 7 8 11 13 14 15 17 19 20 23 25 b 32 1 0 0 1 3 5 6 10 13 16 17 19 22 23 27 29 30 # 30413 xor c a 32 0 1 e b 32 0 1 e # 30414 xor c a 32 0 1 e b 32 1 1 e # 30415 xor c a 32 0 1 e b 32 0 1 e # 30416 xor c a 32 0 1 e b 32 1 1 f # 30417 xor c a 32 0 1 e b 32 0 1 e # 30418 xor c a 32 0 1 e b 32 1 1 3 4 8 10 14 15 17 18 23 24 26 29 30 31 # 30419 xor c a 32 0 1 f b 32 0 1 f # 30420 xor c a 32 0 1 f b 32 1 1 e # 30421 xor c a 32 0 1 f b 32 0 1 f # 30422 xor c a 32 0 1 f b 32 1 1 f # 30423 xor c a 32 0 1 f b 32 0 1 f # 30424 xor c a 32 0 1 f b 32 1 1 0 2 3 4 5 7 9 10 13 16 18 20 24 25 26 27 28 30 31 # 30425 xor c a 32 0 1 0 2 5 7 8 12 13 14 15 16 17 18 19 20 23 25 26 27 30 b 32 0 1 0 2 5 7 8 12 13 14 15 16 17 18 19 20 23 25 26 27 30 # 30426 xor c a 32 0 1 0 2 5 7 8 12 13 14 15 16 17 18 19 20 23 25 26 27 30 b 32 1 1 e # 30427 xor c a 32 0 1 0 2 5 10 14 17 18 22 25 27 30 b 32 0 1 0 2 5 10 14 17 18 22 25 27 30 # 30428 xor c a 32 0 1 0 2 5 10 14 17 18 22 25 27 30 b 32 1 1 f # 30429 xor c a 32 0 1 0 1 2 4 5 6 7 11 12 14 17 22 28 30 b 32 0 1 0 1 2 4 5 6 7 11 12 14 17 22 28 30 # 30430 xor c a 32 0 1 0 1 2 4 5 6 7 11 12 14 17 22 28 30 b 32 1 1 0 2 3 6 7 8 9 10 11 13 16 17 18 19 21 25 26 28 29 30 31 # 30431 xor c a 32 1 0 e b 32 1 0 e # 30432 xor c a 32 1 0 e b 32 0 0 e # 30433 xor c a 32 1 0 e b 32 1 0 e # 30434 xor c a 32 1 0 e b 32 0 0 f # 30435 xor c a 32 1 0 e b 32 1 0 e # 30436 xor c a 32 1 0 e b 32 0 0 2 3 4 6 7 10 11 15 16 18 22 23 25 26 29 31 # 30437 xor c a 32 1 0 f b 32 1 0 f # 30438 xor c a 32 1 0 f b 32 0 0 e # 30439 xor c a 32 1 0 f b 32 1 0 f # 30440 xor c a 32 1 0 f b 32 0 0 f # 30441 xor c a 32 1 0 f b 32 1 0 f # 30442 xor c a 32 1 0 f b 32 0 0 1 7 8 10 11 13 14 17 18 23 26 27 28 # 30443 xor c a 32 1 0 1 3 5 6 7 8 10 13 14 15 16 17 24 27 29 30 31 b 32 1 0 1 3 5 6 7 8 10 13 14 15 16 17 24 27 29 30 31 # 30444 xor c a 32 1 0 1 3 5 6 7 8 10 13 14 15 16 17 24 27 29 30 31 b 32 0 0 e # 30445 xor c a 32 1 0 0 3 6 8 9 10 12 13 14 15 19 20 21 24 31 b 32 1 0 0 3 6 8 9 10 12 13 14 15 19 20 21 24 31 # 30446 xor c a 32 1 0 0 3 6 8 9 10 12 13 14 15 19 20 21 24 31 b 32 0 0 f # 30447 xor c a 32 1 0 0 1 2 3 4 5 7 8 9 10 11 12 13 14 18 19 24 25 26 27 28 29 30 31 b 32 1 0 0 1 2 3 4 5 7 8 9 10 11 12 13 14 18 19 24 25 26 27 28 29 30 31 # 30448 xor c a 32 1 0 0 1 2 3 4 5 7 8 9 10 11 12 13 14 18 19 24 25 26 27 28 29 30 31 b 32 0 0 0 1 2 3 4 5 7 8 10 11 13 14 15 17 18 19 22 23 24 25 26 27 28 29 30 # 30449 xor c a 32 1 0 e b 32 1 0 e # 30450 xor c a 32 1 0 e b 32 0 1 e # 30451 xor c a 32 1 0 e b 32 1 0 e # 30452 xor c a 32 1 0 e b 32 0 1 f # 30453 xor c a 32 1 0 e b 32 1 0 e # 30454 xor c a 32 1 0 e b 32 0 1 0 3 5 6 9 11 12 24 27 # 30455 xor c a 32 1 0 f b 32 1 0 f # 30456 xor c a 32 1 0 f b 32 0 1 e # 30457 xor c a 32 1 0 f b 32 1 0 f # 30458 xor c a 32 1 0 f b 32 0 1 f # 30459 xor c a 32 1 0 f b 32 1 0 f # 30460 xor c a 32 1 0 f b 32 0 1 0 6 9 13 14 16 18 22 24 28 30 # 30461 xor c a 32 1 0 0 2 4 6 9 10 11 12 13 15 19 20 23 24 28 30 31 b 32 1 0 0 2 4 6 9 10 11 12 13 15 19 20 23 24 28 30 31 # 30462 xor c a 32 1 0 0 2 4 6 9 10 11 12 13 15 19 20 23 24 28 30 31 b 32 0 1 e # 30463 xor c a 32 1 0 0 1 3 5 7 8 11 13 16 17 19 20 23 24 25 27 28 30 31 b 32 1 0 0 1 3 5 7 8 11 13 16 17 19 20 23 24 25 27 28 30 31 # 30464 xor c a 32 1 0 0 1 3 5 7 8 11 13 16 17 19 20 23 24 25 27 28 30 31 b 32 0 1 f # 30465 xor c a 32 1 0 0 5 6 8 10 14 17 18 22 30 b 32 1 0 0 5 6 8 10 14 17 18 22 30 # 30466 xor c a 32 1 0 0 5 6 8 10 14 17 18 22 30 b 32 0 1 0 2 3 5 12 14 15 17 19 25 26 27 29 31 # 30467 xor c a 32 1 0 e b 32 1 0 e # 30468 xor c a 32 1 0 e b 32 1 0 e # 30469 xor c a 32 1 0 e b 32 1 0 e # 30470 xor c a 32 1 0 e b 32 1 0 f # 30471 xor c a 32 1 0 e b 32 1 0 e # 30472 xor c a 32 1 0 e b 32 1 0 2 4 6 10 15 20 21 22 25 27 29 30 31 # 30473 xor c a 32 1 0 f b 32 1 0 f # 30474 xor c a 32 1 0 f b 32 1 0 e # 30475 xor c a 32 1 0 f b 32 1 0 f # 30476 xor c a 32 1 0 f b 32 1 0 f # 30477 xor c a 32 1 0 f b 32 1 0 f # 30478 xor c a 32 1 0 f b 32 1 0 0 1 3 4 5 9 10 11 13 15 17 20 24 25 26 29 # 30479 xor c a 32 1 0 5 6 7 8 9 12 13 14 16 19 21 22 24 25 26 28 30 b 32 1 0 5 6 7 8 9 12 13 14 16 19 21 22 24 25 26 28 30 # 30480 xor c a 32 1 0 5 6 7 8 9 12 13 14 16 19 21 22 24 25 26 28 30 b 32 1 0 e # 30481 xor c a 32 1 0 0 2 4 5 6 7 10 13 17 19 20 23 26 27 29 b 32 1 0 0 2 4 5 6 7 10 13 17 19 20 23 26 27 29 # 30482 xor c a 32 1 0 0 2 4 5 6 7 10 13 17 19 20 23 26 27 29 b 32 1 0 f # 30483 xor c a 32 1 0 0 1 3 4 6 8 9 12 13 14 15 16 18 19 21 22 23 25 26 27 29 30 b 32 1 0 0 1 3 4 6 8 9 12 13 14 15 16 18 19 21 22 23 25 26 27 29 30 # 30484 xor c a 32 1 0 0 1 3 4 6 8 9 12 13 14 15 16 18 19 21 22 23 25 26 27 29 30 b 32 1 0 0 3 4 6 7 8 11 14 16 22 23 24 25 28 30 31 # 30485 xor c a 32 1 0 e b 32 1 0 e # 30486 xor c a 32 1 0 e b 32 1 1 e # 30487 xor c a 32 1 0 e b 32 1 0 e # 30488 xor c a 32 1 0 e b 32 1 1 f # 30489 xor c a 32 1 0 e b 32 1 0 e # 30490 xor c a 32 1 0 e b 32 1 1 0 3 4 6 7 8 12 14 15 16 18 20 21 22 23 24 28 31 # 30491 xor c a 32 1 0 f b 32 1 0 f # 30492 xor c a 32 1 0 f b 32 1 1 e # 30493 xor c a 32 1 0 f b 32 1 0 f # 30494 xor c a 32 1 0 f b 32 1 1 f # 30495 xor c a 32 1 0 f b 32 1 0 f # 30496 xor c a 32 1 0 f b 32 1 1 0 1 2 5 9 10 12 13 15 18 19 21 22 23 25 29 31 # 30497 xor c a 32 1 0 3 5 6 7 9 13 15 16 18 23 25 27 29 30 31 b 32 1 0 3 5 6 7 9 13 15 16 18 23 25 27 29 30 31 # 30498 xor c a 32 1 0 3 5 6 7 9 13 15 16 18 23 25 27 29 30 31 b 32 1 1 e # 30499 xor c a 32 1 0 2 3 4 5 6 10 11 12 14 15 19 20 25 27 29 30 31 b 32 1 0 2 3 4 5 6 10 11 12 14 15 19 20 25 27 29 30 31 # 30500 xor c a 32 1 0 2 3 4 5 6 10 11 12 14 15 19 20 25 27 29 30 31 b 32 1 1 f # 30501 xor c a 32 1 0 6 7 9 10 12 16 17 19 21 25 27 28 29 30 31 b 32 1 0 6 7 9 10 12 16 17 19 21 25 27 28 29 30 31 # 30502 xor c a 32 1 0 6 7 9 10 12 16 17 19 21 25 27 28 29 30 31 b 32 1 1 3 5 7 8 11 12 13 15 16 18 19 23 24 25 26 27 28 30 # 30503 xor c a 32 1 1 e b 32 1 1 e # 30504 xor c a 32 1 1 e b 32 0 0 e # 30505 xor c a 32 1 1 e b 32 1 1 e # 30506 xor c a 32 1 1 e b 32 0 0 f # 30507 xor c a 32 1 1 e b 32 1 1 e # 30508 xor c a 32 1 1 e b 32 0 0 0 1 2 4 7 8 9 12 13 17 21 24 25 26 29 30 # 30509 xor c a 32 1 1 f b 32 1 1 f # 30510 xor c a 32 1 1 f b 32 0 0 e # 30511 xor c a 32 1 1 f b 32 1 1 f # 30512 xor c a 32 1 1 f b 32 0 0 f # 30513 xor c a 32 1 1 f b 32 1 1 f # 30514 xor c a 32 1 1 f b 32 0 0 0 1 3 5 7 9 12 13 14 15 16 19 21 23 24 28 31 # 30515 xor c a 32 1 1 0 1 4 5 8 9 11 14 19 20 22 23 24 26 27 b 32 1 1 0 1 4 5 8 9 11 14 19 20 22 23 24 26 27 # 30516 xor c a 32 1 1 0 1 4 5 8 9 11 14 19 20 22 23 24 26 27 b 32 0 0 e # 30517 xor c a 32 1 1 1 2 4 5 7 8 9 10 15 16 17 19 23 26 27 28 b 32 1 1 1 2 4 5 7 8 9 10 15 16 17 19 23 26 27 28 # 30518 xor c a 32 1 1 1 2 4 5 7 8 9 10 15 16 17 19 23 26 27 28 b 32 0 0 f # 30519 xor c a 32 1 1 2 7 9 13 17 18 19 20 22 24 27 28 29 31 b 32 1 1 2 7 9 13 17 18 19 20 22 24 27 28 29 31 # 30520 xor c a 32 1 1 2 7 9 13 17 18 19 20 22 24 27 28 29 31 b 32 0 0 7 9 11 15 18 20 22 23 24 26 27 30 # 30521 xor c a 32 1 1 e b 32 1 1 e # 30522 xor c a 32 1 1 e b 32 0 1 e # 30523 xor c a 32 1 1 e b 32 1 1 e # 30524 xor c a 32 1 1 e b 32 0 1 f # 30525 xor c a 32 1 1 e b 32 1 1 e # 30526 xor c a 32 1 1 e b 32 0 1 1 2 3 6 7 9 10 11 14 15 18 20 21 22 23 24 25 26 28 30 # 30527 xor c a 32 1 1 f b 32 1 1 f # 30528 xor c a 32 1 1 f b 32 0 1 e # 30529 xor c a 32 1 1 f b 32 1 1 f # 30530 xor c a 32 1 1 f b 32 0 1 f # 30531 xor c a 32 1 1 f b 32 1 1 f # 30532 xor c a 32 1 1 f b 32 0 1 1 3 6 9 11 13 15 18 21 24 27 28 # 30533 xor c a 32 1 1 0 1 4 6 9 10 12 16 18 23 24 25 26 29 30 b 32 1 1 0 1 4 6 9 10 12 16 18 23 24 25 26 29 30 # 30534 xor c a 32 1 1 0 1 4 6 9 10 12 16 18 23 24 25 26 29 30 b 32 0 1 e # 30535 xor c a 32 1 1 0 1 3 6 9 10 14 17 18 19 22 23 30 b 32 1 1 0 1 3 6 9 10 14 17 18 19 22 23 30 # 30536 xor c a 32 1 1 0 1 3 6 9 10 14 17 18 19 22 23 30 b 32 0 1 f # 30537 xor c a 32 1 1 2 5 6 7 8 9 10 13 14 15 17 19 20 22 24 26 31 b 32 1 1 2 5 6 7 8 9 10 13 14 15 17 19 20 22 24 26 31 # 30538 xor c a 32 1 1 2 5 6 7 8 9 10 13 14 15 17 19 20 22 24 26 31 b 32 0 1 0 6 9 10 12 13 16 17 18 19 20 21 22 23 24 25 26 31 # 30539 xor c a 32 1 1 e b 32 1 1 e # 30540 xor c a 32 1 1 e b 32 1 0 e # 30541 xor c a 32 1 1 e b 32 1 1 e # 30542 xor c a 32 1 1 e b 32 1 0 f # 30543 xor c a 32 1 1 e b 32 1 1 e # 30544 xor c a 32 1 1 e b 32 1 0 0 4 6 7 9 11 12 13 15 20 23 28 29 31 # 30545 xor c a 32 1 1 f b 32 1 1 f # 30546 xor c a 32 1 1 f b 32 1 0 e # 30547 xor c a 32 1 1 f b 32 1 1 f # 30548 xor c a 32 1 1 f b 32 1 0 f # 30549 xor c a 32 1 1 f b 32 1 1 f # 30550 xor c a 32 1 1 f b 32 1 0 1 3 4 6 14 15 16 19 20 22 24 26 28 # 30551 xor c a 32 1 1 0 3 4 7 8 11 12 14 15 16 17 19 22 25 26 28 29 30 31 b 32 1 1 0 3 4 7 8 11 12 14 15 16 17 19 22 25 26 28 29 30 31 # 30552 xor c a 32 1 1 0 3 4 7 8 11 12 14 15 16 17 19 22 25 26 28 29 30 31 b 32 1 0 e # 30553 xor c a 32 1 1 1 2 7 8 10 11 12 13 16 17 23 24 27 29 30 31 b 32 1 1 1 2 7 8 10 11 12 13 16 17 23 24 27 29 30 31 # 30554 xor c a 32 1 1 1 2 7 8 10 11 12 13 16 17 23 24 27 29 30 31 b 32 1 0 f # 30555 xor c a 32 1 1 0 1 2 7 8 10 12 14 15 18 24 27 30 b 32 1 1 0 1 2 7 8 10 12 14 15 18 24 27 30 # 30556 xor c a 32 1 1 0 1 2 7 8 10 12 14 15 18 24 27 30 b 32 1 0 1 2 3 4 5 6 7 12 14 15 17 19 21 25 27 29 31 # 30557 xor c a 32 1 1 e b 32 1 1 e # 30558 xor c a 32 1 1 e b 32 1 1 e # 30559 xor c a 32 1 1 e b 32 1 1 e # 30560 xor c a 32 1 1 e b 32 1 1 f # 30561 xor c a 32 1 1 e b 32 1 1 e # 30562 xor c a 32 1 1 e b 32 1 1 0 1 2 3 4 8 9 11 12 14 19 20 21 24 26 # 30563 xor c a 32 1 1 f b 32 1 1 f # 30564 xor c a 32 1 1 f b 32 1 1 e # 30565 xor c a 32 1 1 f b 32 1 1 f # 30566 xor c a 32 1 1 f b 32 1 1 f # 30567 xor c a 32 1 1 f b 32 1 1 f # 30568 xor c a 32 1 1 f b 32 1 1 2 4 7 9 14 15 18 22 24 25 26 28 # 30569 xor c a 32 1 1 4 5 6 8 12 18 19 20 22 25 26 28 b 32 1 1 4 5 6 8 12 18 19 20 22 25 26 28 # 30570 xor c a 32 1 1 4 5 6 8 12 18 19 20 22 25 26 28 b 32 1 1 e # 30571 xor c a 32 1 1 0 1 2 3 4 5 6 7 11 12 13 17 18 21 22 23 24 26 27 28 b 32 1 1 0 1 2 3 4 5 6 7 11 12 13 17 18 21 22 23 24 26 27 28 # 30572 xor c a 32 1 1 0 1 2 3 4 5 6 7 11 12 13 17 18 21 22 23 24 26 27 28 b 32 1 1 f # 30573 xor c a 32 1 1 1 4 7 8 9 10 12 14 17 18 19 20 24 27 28 b 32 1 1 1 4 7 8 9 10 12 14 17 18 19 20 24 27 28 # 30574 xor c a 32 1 1 1 4 7 8 9 10 12 14 17 18 19 20 24 27 28 b 32 1 1 2 4 10 13 14 15 17 21 22 25 26 30 31 # 30575 xor c a 33 0 0 e b 33 0 0 e # 30576 xor c a 33 0 0 e b 33 0 0 e # 30577 xor c a 33 0 0 e b 33 0 0 e # 30578 xor c a 33 0 0 e b 33 0 0 f # 30579 xor c a 33 0 0 e b 33 0 0 e # 30580 xor c a 33 0 0 e b 33 0 0 0 1 6 7 8 9 12 14 22 23 25 27 28 30 31 # 30581 xor c a 33 0 0 f b 33 0 0 f # 30582 xor c a 33 0 0 f b 33 0 0 e # 30583 xor c a 33 0 0 f b 33 0 0 f # 30584 xor c a 33 0 0 f b 33 0 0 f # 30585 xor c a 33 0 0 f b 33 0 0 f # 30586 xor c a 33 0 0 f b 33 0 0 0 2 5 10 11 15 16 17 19 24 25 28 29 30 31 # 30587 xor c a 33 0 0 0 3 5 7 8 11 12 14 16 17 18 20 23 25 26 28 30 31 32 b 33 0 0 0 3 5 7 8 11 12 14 16 17 18 20 23 25 26 28 30 31 32 # 30588 xor c a 33 0 0 0 3 5 7 8 11 12 14 16 17 18 20 23 25 26 28 30 31 32 b 33 0 0 e # 30589 xor c a 33 0 0 1 3 6 7 8 9 10 17 22 24 b 33 0 0 1 3 6 7 8 9 10 17 22 24 # 30590 xor c a 33 0 0 1 3 6 7 8 9 10 17 22 24 b 33 0 0 f # 30591 xor c a 33 0 0 2 3 5 7 9 11 12 13 14 15 16 18 23 25 27 28 29 30 b 33 0 0 2 3 5 7 9 11 12 13 14 15 16 18 23 25 27 28 29 30 # 30592 xor c a 33 0 0 2 3 5 7 9 11 12 13 14 15 16 18 23 25 27 28 29 30 b 33 0 0 0 4 6 8 9 11 12 14 17 18 21 22 23 24 25 26 27 28 30 32 # 30593 xor c a 33 0 0 e b 33 0 0 e # 30594 xor c a 33 0 0 e b 33 0 1 e # 30595 xor c a 33 0 0 e b 33 0 0 e # 30596 xor c a 33 0 0 e b 33 0 1 f # 30597 xor c a 33 0 0 e b 33 0 0 e # 30598 xor c a 33 0 0 e b 33 0 1 1 3 4 5 6 7 9 11 13 14 18 21 24 25 26 28 30 # 30599 xor c a 33 0 0 f b 33 0 0 f # 30600 xor c a 33 0 0 f b 33 0 1 e # 30601 xor c a 33 0 0 f b 33 0 0 f # 30602 xor c a 33 0 0 f b 33 0 1 f # 30603 xor c a 33 0 0 f b 33 0 0 f # 30604 xor c a 33 0 0 f b 33 0 1 6 8 9 10 12 14 16 18 19 21 24 25 28 29 30 # 30605 xor c a 33 0 0 1 2 3 4 8 9 12 17 18 24 25 26 27 28 32 b 33 0 0 1 2 3 4 8 9 12 17 18 24 25 26 27 28 32 # 30606 xor c a 33 0 0 1 2 3 4 8 9 12 17 18 24 25 26 27 28 32 b 33 0 1 e # 30607 xor c a 33 0 0 1 2 9 11 12 13 15 19 20 21 24 27 30 31 b 33 0 0 1 2 9 11 12 13 15 19 20 21 24 27 30 31 # 30608 xor c a 33 0 0 1 2 9 11 12 13 15 19 20 21 24 27 30 31 b 33 0 1 f # 30609 xor c a 33 0 0 0 2 3 4 8 11 12 16 17 18 19 23 24 29 30 b 33 0 0 0 2 3 4 8 11 12 16 17 18 19 23 24 29 30 # 30610 xor c a 33 0 0 0 2 3 4 8 11 12 16 17 18 19 23 24 29 30 b 33 0 1 0 2 4 8 9 10 18 19 20 24 25 26 27 29 30 # 30611 xor c a 33 0 0 e b 33 0 0 e # 30612 xor c a 33 0 0 e b 33 1 0 e # 30613 xor c a 33 0 0 e b 33 0 0 e # 30614 xor c a 33 0 0 e b 33 1 0 f # 30615 xor c a 33 0 0 e b 33 0 0 e # 30616 xor c a 33 0 0 e b 33 1 0 0 2 4 7 9 10 14 15 16 20 21 23 25 28 30 31 32 # 30617 xor c a 33 0 0 f b 33 0 0 f # 30618 xor c a 33 0 0 f b 33 1 0 e # 30619 xor c a 33 0 0 f b 33 0 0 f # 30620 xor c a 33 0 0 f b 33 1 0 f # 30621 xor c a 33 0 0 f b 33 0 0 f # 30622 xor c a 33 0 0 f b 33 1 0 0 2 3 4 7 9 11 14 15 16 18 21 22 24 31 32 # 30623 xor c a 33 0 0 1 2 3 5 7 9 11 12 15 17 20 21 25 26 27 29 30 32 b 33 0 0 1 2 3 5 7 9 11 12 15 17 20 21 25 26 27 29 30 32 # 30624 xor c a 33 0 0 1 2 3 5 7 9 11 12 15 17 20 21 25 26 27 29 30 32 b 33 1 0 e # 30625 xor c a 33 0 0 0 2 3 5 11 12 15 16 17 18 19 20 23 24 26 27 32 b 33 0 0 0 2 3 5 11 12 15 16 17 18 19 20 23 24 26 27 32 # 30626 xor c a 33 0 0 0 2 3 5 11 12 15 16 17 18 19 20 23 24 26 27 32 b 33 1 0 f # 30627 xor c a 33 0 0 4 5 6 7 8 9 10 14 17 20 21 24 28 29 32 b 33 0 0 4 5 6 7 8 9 10 14 17 20 21 24 28 29 32 # 30628 xor c a 33 0 0 4 5 6 7 8 9 10 14 17 20 21 24 28 29 32 b 33 1 0 1 2 4 5 7 11 16 17 19 22 24 27 30 31 # 30629 xor c a 33 0 0 e b 33 0 0 e # 30630 xor c a 33 0 0 e b 33 1 1 e # 30631 xor c a 33 0 0 e b 33 0 0 e # 30632 xor c a 33 0 0 e b 33 1 1 f # 30633 xor c a 33 0 0 e b 33 0 0 e # 30634 xor c a 33 0 0 e b 33 1 1 2 5 6 7 8 9 12 13 15 16 17 18 20 23 24 28 32 # 30635 xor c a 33 0 0 f b 33 0 0 f # 30636 xor c a 33 0 0 f b 33 1 1 e # 30637 xor c a 33 0 0 f b 33 0 0 f # 30638 xor c a 33 0 0 f b 33 1 1 f # 30639 xor c a 33 0 0 f b 33 0 0 f # 30640 xor c a 33 0 0 f b 33 1 1 1 8 9 12 13 15 16 17 18 21 23 26 27 28 32 # 30641 xor c a 33 0 0 0 1 3 4 5 6 7 8 10 11 12 13 14 15 20 21 24 27 28 29 30 b 33 0 0 0 1 3 4 5 6 7 8 10 11 12 13 14 15 20 21 24 27 28 29 30 # 30642 xor c a 33 0 0 0 1 3 4 5 6 7 8 10 11 12 13 14 15 20 21 24 27 28 29 30 b 33 1 1 e # 30643 xor c a 33 0 0 8 11 13 15 20 21 22 24 25 26 27 28 32 b 33 0 0 8 11 13 15 20 21 22 24 25 26 27 28 32 # 30644 xor c a 33 0 0 8 11 13 15 20 21 22 24 25 26 27 28 32 b 33 1 1 f # 30645 xor c a 33 0 0 0 1 3 4 5 6 8 9 11 12 16 21 24 29 32 b 33 0 0 0 1 3 4 5 6 8 9 11 12 16 21 24 29 32 # 30646 xor c a 33 0 0 0 1 3 4 5 6 8 9 11 12 16 21 24 29 32 b 33 1 1 2 5 7 10 11 15 16 17 19 21 23 25 28 32 # 30647 xor c a 33 0 1 e b 33 0 1 e # 30648 xor c a 33 0 1 e b 33 0 0 e # 30649 xor c a 33 0 1 e b 33 0 1 e # 30650 xor c a 33 0 1 e b 33 0 0 f # 30651 xor c a 33 0 1 e b 33 0 1 e # 30652 xor c a 33 0 1 e b 33 0 0 0 1 2 3 4 5 8 10 12 13 15 20 21 22 27 29 32 # 30653 xor c a 33 0 1 f b 33 0 1 f # 30654 xor c a 33 0 1 f b 33 0 0 e # 30655 xor c a 33 0 1 f b 33 0 1 f # 30656 xor c a 33 0 1 f b 33 0 0 f # 30657 xor c a 33 0 1 f b 33 0 1 f # 30658 xor c a 33 0 1 f b 33 0 0 2 4 5 8 9 10 13 14 15 16 17 19 20 21 23 25 29 31 # 30659 xor c a 33 0 1 0 3 4 5 6 7 8 12 15 16 18 19 20 21 23 25 28 30 31 32 b 33 0 1 0 3 4 5 6 7 8 12 15 16 18 19 20 21 23 25 28 30 31 32 # 30660 xor c a 33 0 1 0 3 4 5 6 7 8 12 15 16 18 19 20 21 23 25 28 30 31 32 b 33 0 0 e # 30661 xor c a 33 0 1 1 2 3 4 5 6 7 10 12 13 16 17 18 21 22 23 24 25 26 28 29 30 31 32 b 33 0 1 1 2 3 4 5 6 7 10 12 13 16 17 18 21 22 23 24 25 26 28 29 30 31 32 # 30662 xor c a 33 0 1 1 2 3 4 5 6 7 10 12 13 16 17 18 21 22 23 24 25 26 28 29 30 31 32 b 33 0 0 f # 30663 xor c a 33 0 1 0 1 2 4 5 6 7 8 10 11 13 16 17 18 19 20 21 22 23 24 25 27 28 30 31 b 33 0 1 0 1 2 4 5 6 7 8 10 11 13 16 17 18 19 20 21 22 23 24 25 27 28 30 31 # 30664 xor c a 33 0 1 0 1 2 4 5 6 7 8 10 11 13 16 17 18 19 20 21 22 23 24 25 27 28 30 31 b 33 0 0 4 6 8 9 10 11 14 16 17 18 19 21 27 28 # 30665 xor c a 33 0 1 e b 33 0 1 e # 30666 xor c a 33 0 1 e b 33 0 1 e # 30667 xor c a 33 0 1 e b 33 0 1 e # 30668 xor c a 33 0 1 e b 33 0 1 f # 30669 xor c a 33 0 1 e b 33 0 1 e # 30670 xor c a 33 0 1 e b 33 0 1 1 3 4 5 6 9 10 11 12 13 14 16 18 19 20 22 24 25 28 29 30 # 30671 xor c a 33 0 1 f b 33 0 1 f # 30672 xor c a 33 0 1 f b 33 0 1 e # 30673 xor c a 33 0 1 f b 33 0 1 f # 30674 xor c a 33 0 1 f b 33 0 1 f # 30675 xor c a 33 0 1 f b 33 0 1 f # 30676 xor c a 33 0 1 f b 33 0 1 3 4 5 7 12 13 16 21 23 24 25 26 27 31 32 # 30677 xor c a 33 0 1 1 2 6 8 11 12 13 14 15 20 23 25 27 29 31 32 b 33 0 1 1 2 6 8 11 12 13 14 15 20 23 25 27 29 31 32 # 30678 xor c a 33 0 1 1 2 6 8 11 12 13 14 15 20 23 25 27 29 31 32 b 33 0 1 e # 30679 xor c a 33 0 1 1 2 3 4 6 7 8 9 10 11 12 13 16 17 20 21 23 28 29 30 31 32 b 33 0 1 1 2 3 4 6 7 8 9 10 11 12 13 16 17 20 21 23 28 29 30 31 32 # 30680 xor c a 33 0 1 1 2 3 4 6 7 8 9 10 11 12 13 16 17 20 21 23 28 29 30 31 32 b 33 0 1 f # 30681 xor c a 33 0 1 0 1 2 5 10 12 15 18 20 21 22 24 25 26 27 28 29 30 31 32 b 33 0 1 0 1 2 5 10 12 15 18 20 21 22 24 25 26 27 28 29 30 31 32 # 30682 xor c a 33 0 1 0 1 2 5 10 12 15 18 20 21 22 24 25 26 27 28 29 30 31 32 b 33 0 1 0 4 6 11 15 16 17 18 19 22 25 28 30 32 # 30683 xor c a 33 0 1 e b 33 0 1 e # 30684 xor c a 33 0 1 e b 33 1 0 e # 30685 xor c a 33 0 1 e b 33 0 1 e # 30686 xor c a 33 0 1 e b 33 1 0 f # 30687 xor c a 33 0 1 e b 33 0 1 e # 30688 xor c a 33 0 1 e b 33 1 0 1 2 3 4 8 9 10 13 15 16 17 19 20 21 27 29 30 31 32 # 30689 xor c a 33 0 1 f b 33 0 1 f # 30690 xor c a 33 0 1 f b 33 1 0 e # 30691 xor c a 33 0 1 f b 33 0 1 f # 30692 xor c a 33 0 1 f b 33 1 0 f # 30693 xor c a 33 0 1 f b 33 0 1 f # 30694 xor c a 33 0 1 f b 33 1 0 0 2 4 5 7 8 9 10 12 13 15 18 22 23 25 28 30 31 32 # 30695 xor c a 33 0 1 0 3 4 7 9 10 13 14 18 19 21 27 32 b 33 0 1 0 3 4 7 9 10 13 14 18 19 21 27 32 # 30696 xor c a 33 0 1 0 3 4 7 9 10 13 14 18 19 21 27 32 b 33 1 0 e # 30697 xor c a 33 0 1 0 1 2 9 10 11 15 18 22 23 27 28 29 31 32 b 33 0 1 0 1 2 9 10 11 15 18 22 23 27 28 29 31 32 # 30698 xor c a 33 0 1 0 1 2 9 10 11 15 18 22 23 27 28 29 31 32 b 33 1 0 f # 30699 xor c a 33 0 1 3 4 5 6 9 10 11 13 14 15 16 19 20 24 28 31 32 b 33 0 1 3 4 5 6 9 10 11 13 14 15 16 19 20 24 28 31 32 # 30700 xor c a 33 0 1 3 4 5 6 9 10 11 13 14 15 16 19 20 24 28 31 32 b 33 1 0 1 4 5 6 7 8 11 13 15 18 20 24 25 26 28 29 30 32 # 30701 xor c a 33 0 1 e b 33 0 1 e # 30702 xor c a 33 0 1 e b 33 1 1 e # 30703 xor c a 33 0 1 e b 33 0 1 e # 30704 xor c a 33 0 1 e b 33 1 1 f # 30705 xor c a 33 0 1 e b 33 0 1 e # 30706 xor c a 33 0 1 e b 33 1 1 1 7 12 14 16 22 29 31 # 30707 xor c a 33 0 1 f b 33 0 1 f # 30708 xor c a 33 0 1 f b 33 1 1 e # 30709 xor c a 33 0 1 f b 33 0 1 f # 30710 xor c a 33 0 1 f b 33 1 1 f # 30711 xor c a 33 0 1 f b 33 0 1 f # 30712 xor c a 33 0 1 f b 33 1 1 0 2 3 4 5 7 9 10 11 12 13 14 15 17 19 20 21 24 25 27 28 31 # 30713 xor c a 33 0 1 1 6 8 10 11 13 17 23 24 25 26 29 30 b 33 0 1 1 6 8 10 11 13 17 23 24 25 26 29 30 # 30714 xor c a 33 0 1 1 6 8 10 11 13 17 23 24 25 26 29 30 b 33 1 1 e # 30715 xor c a 33 0 1 0 1 2 5 7 8 11 16 17 18 20 21 23 24 29 30 b 33 0 1 0 1 2 5 7 8 11 16 17 18 20 21 23 24 29 30 # 30716 xor c a 33 0 1 0 1 2 5 7 8 11 16 17 18 20 21 23 24 29 30 b 33 1 1 f # 30717 xor c a 33 0 1 0 2 3 4 5 6 7 9 11 13 15 16 17 18 20 21 25 26 27 28 29 b 33 0 1 0 2 3 4 5 6 7 9 11 13 15 16 17 18 20 21 25 26 27 28 29 # 30718 xor c a 33 0 1 0 2 3 4 5 6 7 9 11 13 15 16 17 18 20 21 25 26 27 28 29 b 33 1 1 4 6 7 8 10 11 12 13 15 16 17 18 19 23 24 26 27 28 # 30719 xor c a 33 1 0 e b 33 1 0 e # 30720 xor c a 33 1 0 e b 33 0 0 e # 30721 xor c a 33 1 0 e b 33 1 0 e # 30722 xor c a 33 1 0 e b 33 0 0 f # 30723 xor c a 33 1 0 e b 33 1 0 e # 30724 xor c a 33 1 0 e b 33 0 0 0 1 3 6 7 10 12 13 15 19 22 23 24 25 29 30 31 # 30725 xor c a 33 1 0 f b 33 1 0 f # 30726 xor c a 33 1 0 f b 33 0 0 e # 30727 xor c a 33 1 0 f b 33 1 0 f # 30728 xor c a 33 1 0 f b 33 0 0 f # 30729 xor c a 33 1 0 f b 33 1 0 f # 30730 xor c a 33 1 0 f b 33 0 0 1 2 4 5 6 8 9 11 17 18 19 20 21 22 25 26 27 28 29 31 32 # 30731 xor c a 33 1 0 5 8 13 14 16 19 21 22 25 26 29 30 31 b 33 1 0 5 8 13 14 16 19 21 22 25 26 29 30 31 # 30732 xor c a 33 1 0 5 8 13 14 16 19 21 22 25 26 29 30 31 b 33 0 0 e # 30733 xor c a 33 1 0 2 4 5 10 15 18 22 25 26 28 29 30 b 33 1 0 2 4 5 10 15 18 22 25 26 28 29 30 # 30734 xor c a 33 1 0 2 4 5 10 15 18 22 25 26 28 29 30 b 33 0 0 f # 30735 xor c a 33 1 0 1 4 6 10 12 14 19 20 21 22 23 26 28 b 33 1 0 1 4 6 10 12 14 19 20 21 22 23 26 28 # 30736 xor c a 33 1 0 1 4 6 10 12 14 19 20 21 22 23 26 28 b 33 0 0 0 1 4 5 9 11 12 13 19 25 27 29 30 31 32 # 30737 xor c a 33 1 0 e b 33 1 0 e # 30738 xor c a 33 1 0 e b 33 0 1 e # 30739 xor c a 33 1 0 e b 33 1 0 e # 30740 xor c a 33 1 0 e b 33 0 1 f # 30741 xor c a 33 1 0 e b 33 1 0 e # 30742 xor c a 33 1 0 e b 33 0 1 2 3 4 7 8 10 11 12 13 14 17 21 22 31 32 # 30743 xor c a 33 1 0 f b 33 1 0 f # 30744 xor c a 33 1 0 f b 33 0 1 e # 30745 xor c a 33 1 0 f b 33 1 0 f # 30746 xor c a 33 1 0 f b 33 0 1 f # 30747 xor c a 33 1 0 f b 33 1 0 f # 30748 xor c a 33 1 0 f b 33 0 1 1 3 6 7 8 9 10 11 12 13 15 17 22 23 24 28 32 # 30749 xor c a 33 1 0 0 3 5 6 8 9 10 11 13 15 16 17 20 24 25 29 31 b 33 1 0 0 3 5 6 8 9 10 11 13 15 16 17 20 24 25 29 31 # 30750 xor c a 33 1 0 0 3 5 6 8 9 10 11 13 15 16 17 20 24 25 29 31 b 33 0 1 e # 30751 xor c a 33 1 0 1 2 4 5 7 8 9 11 14 15 16 18 20 21 23 26 27 28 29 32 b 33 1 0 1 2 4 5 7 8 9 11 14 15 16 18 20 21 23 26 27 28 29 32 # 30752 xor c a 33 1 0 1 2 4 5 7 8 9 11 14 15 16 18 20 21 23 26 27 28 29 32 b 33 0 1 f # 30753 xor c a 33 1 0 0 1 2 3 4 5 6 7 9 15 16 19 20 26 32 b 33 1 0 0 1 2 3 4 5 6 7 9 15 16 19 20 26 32 # 30754 xor c a 33 1 0 0 1 2 3 4 5 6 7 9 15 16 19 20 26 32 b 33 0 1 2 5 9 10 15 16 20 21 23 24 25 27 28 29 30 # 30755 xor c a 33 1 0 e b 33 1 0 e # 30756 xor c a 33 1 0 e b 33 1 0 e # 30757 xor c a 33 1 0 e b 33 1 0 e # 30758 xor c a 33 1 0 e b 33 1 0 f # 30759 xor c a 33 1 0 e b 33 1 0 e # 30760 xor c a 33 1 0 e b 33 1 0 0 2 3 4 7 8 9 13 15 17 22 23 24 25 26 27 28 31 32 # 30761 xor c a 33 1 0 f b 33 1 0 f # 30762 xor c a 33 1 0 f b 33 1 0 e # 30763 xor c a 33 1 0 f b 33 1 0 f # 30764 xor c a 33 1 0 f b 33 1 0 f # 30765 xor c a 33 1 0 f b 33 1 0 f # 30766 xor c a 33 1 0 f b 33 1 0 1 2 3 5 6 7 8 11 12 13 17 18 19 20 21 22 23 24 25 26 27 29 30 31 32 # 30767 xor c a 33 1 0 1 2 5 7 12 13 14 16 17 20 21 23 24 28 32 b 33 1 0 1 2 5 7 12 13 14 16 17 20 21 23 24 28 32 # 30768 xor c a 33 1 0 1 2 5 7 12 13 14 16 17 20 21 23 24 28 32 b 33 1 0 e # 30769 xor c a 33 1 0 1 4 8 9 10 11 16 17 18 19 21 24 25 29 32 b 33 1 0 1 4 8 9 10 11 16 17 18 19 21 24 25 29 32 # 30770 xor c a 33 1 0 1 4 8 9 10 11 16 17 18 19 21 24 25 29 32 b 33 1 0 f # 30771 xor c a 33 1 0 0 1 2 3 5 6 7 8 12 13 15 16 17 21 25 26 28 30 31 32 b 33 1 0 0 1 2 3 5 6 7 8 12 13 15 16 17 21 25 26 28 30 31 32 # 30772 xor c a 33 1 0 0 1 2 3 5 6 7 8 12 13 15 16 17 21 25 26 28 30 31 32 b 33 1 0 0 1 3 6 7 8 10 13 17 18 19 23 26 29 # 30773 xor c a 33 1 0 e b 33 1 0 e # 30774 xor c a 33 1 0 e b 33 1 1 e # 30775 xor c a 33 1 0 e b 33 1 0 e # 30776 xor c a 33 1 0 e b 33 1 1 f # 30777 xor c a 33 1 0 e b 33 1 0 e # 30778 xor c a 33 1 0 e b 33 1 1 0 1 2 3 4 5 6 7 8 11 13 16 22 23 28 29 30 32 # 30779 xor c a 33 1 0 f b 33 1 0 f # 30780 xor c a 33 1 0 f b 33 1 1 e # 30781 xor c a 33 1 0 f b 33 1 0 f # 30782 xor c a 33 1 0 f b 33 1 1 f # 30783 xor c a 33 1 0 f b 33 1 0 f # 30784 xor c a 33 1 0 f b 33 1 1 0 3 6 8 9 10 11 12 14 16 18 21 22 25 27 28 29 30 # 30785 xor c a 33 1 0 3 4 5 6 7 8 9 10 12 13 14 16 20 21 22 23 25 26 27 31 b 33 1 0 3 4 5 6 7 8 9 10 12 13 14 16 20 21 22 23 25 26 27 31 # 30786 xor c a 33 1 0 3 4 5 6 7 8 9 10 12 13 14 16 20 21 22 23 25 26 27 31 b 33 1 1 e # 30787 xor c a 33 1 0 0 3 6 7 8 9 10 11 12 13 14 20 22 23 24 25 28 29 30 31 b 33 1 0 0 3 6 7 8 9 10 11 12 13 14 20 22 23 24 25 28 29 30 31 # 30788 xor c a 33 1 0 0 3 6 7 8 9 10 11 12 13 14 20 22 23 24 25 28 29 30 31 b 33 1 1 f # 30789 xor c a 33 1 0 2 5 14 16 19 22 23 26 28 29 30 b 33 1 0 2 5 14 16 19 22 23 26 28 29 30 # 30790 xor c a 33 1 0 2 5 14 16 19 22 23 26 28 29 30 b 33 1 1 0 1 5 6 7 8 10 15 16 22 27 29 31 # 30791 xor c a 33 1 1 e b 33 1 1 e # 30792 xor c a 33 1 1 e b 33 0 0 e # 30793 xor c a 33 1 1 e b 33 1 1 e # 30794 xor c a 33 1 1 e b 33 0 0 f # 30795 xor c a 33 1 1 e b 33 1 1 e # 30796 xor c a 33 1 1 e b 33 0 0 0 2 7 9 11 14 16 18 19 20 24 30 32 # 30797 xor c a 33 1 1 f b 33 1 1 f # 30798 xor c a 33 1 1 f b 33 0 0 e # 30799 xor c a 33 1 1 f b 33 1 1 f # 30800 xor c a 33 1 1 f b 33 0 0 f # 30801 xor c a 33 1 1 f b 33 1 1 f # 30802 xor c a 33 1 1 f b 33 0 0 0 1 6 8 9 12 13 15 16 18 19 22 23 24 31 # 30803 xor c a 33 1 1 0 4 5 7 9 12 14 17 18 19 20 23 24 25 28 31 b 33 1 1 0 4 5 7 9 12 14 17 18 19 20 23 24 25 28 31 # 30804 xor c a 33 1 1 0 4 5 7 9 12 14 17 18 19 20 23 24 25 28 31 b 33 0 0 e # 30805 xor c a 33 1 1 0 1 3 6 7 8 10 14 16 18 20 21 23 26 28 30 31 b 33 1 1 0 1 3 6 7 8 10 14 16 18 20 21 23 26 28 30 31 # 30806 xor c a 33 1 1 0 1 3 6 7 8 10 14 16 18 20 21 23 26 28 30 31 b 33 0 0 f # 30807 xor c a 33 1 1 1 2 3 4 5 7 8 9 11 14 15 18 20 21 22 27 31 32 b 33 1 1 1 2 3 4 5 7 8 9 11 14 15 18 20 21 22 27 31 32 # 30808 xor c a 33 1 1 1 2 3 4 5 7 8 9 11 14 15 18 20 21 22 27 31 32 b 33 0 0 2 3 4 5 6 7 8 9 12 14 18 19 26 27 28 30 32 # 30809 xor c a 33 1 1 e b 33 1 1 e # 30810 xor c a 33 1 1 e b 33 0 1 e # 30811 xor c a 33 1 1 e b 33 1 1 e # 30812 xor c a 33 1 1 e b 33 0 1 f # 30813 xor c a 33 1 1 e b 33 1 1 e # 30814 xor c a 33 1 1 e b 33 0 1 2 4 5 7 8 9 12 13 16 19 20 21 24 28 29 32 # 30815 xor c a 33 1 1 f b 33 1 1 f # 30816 xor c a 33 1 1 f b 33 0 1 e # 30817 xor c a 33 1 1 f b 33 1 1 f # 30818 xor c a 33 1 1 f b 33 0 1 f # 30819 xor c a 33 1 1 f b 33 1 1 f # 30820 xor c a 33 1 1 f b 33 0 1 1 2 3 4 5 6 7 11 12 13 14 17 21 22 27 29 30 31 32 # 30821 xor c a 33 1 1 0 1 2 3 4 6 7 8 9 10 11 12 13 14 18 19 24 26 27 29 b 33 1 1 0 1 2 3 4 6 7 8 9 10 11 12 13 14 18 19 24 26 27 29 # 30822 xor c a 33 1 1 0 1 2 3 4 6 7 8 9 10 11 12 13 14 18 19 24 26 27 29 b 33 0 1 e # 30823 xor c a 33 1 1 1 3 4 6 7 8 10 11 15 16 18 22 23 25 26 30 b 33 1 1 1 3 4 6 7 8 10 11 15 16 18 22 23 25 26 30 # 30824 xor c a 33 1 1 1 3 4 6 7 8 10 11 15 16 18 22 23 25 26 30 b 33 0 1 f # 30825 xor c a 33 1 1 0 4 8 10 13 15 16 21 22 24 25 28 29 31 b 33 1 1 0 4 8 10 13 15 16 21 22 24 25 28 29 31 # 30826 xor c a 33 1 1 0 4 8 10 13 15 16 21 22 24 25 28 29 31 b 33 0 1 0 1 3 5 6 8 10 13 15 16 19 21 22 26 28 29 32 # 30827 xor c a 33 1 1 e b 33 1 1 e # 30828 xor c a 33 1 1 e b 33 1 0 e # 30829 xor c a 33 1 1 e b 33 1 1 e # 30830 xor c a 33 1 1 e b 33 1 0 f # 30831 xor c a 33 1 1 e b 33 1 1 e # 30832 xor c a 33 1 1 e b 33 1 0 0 2 7 9 12 16 18 21 22 24 25 27 29 # 30833 xor c a 33 1 1 f b 33 1 1 f # 30834 xor c a 33 1 1 f b 33 1 0 e # 30835 xor c a 33 1 1 f b 33 1 1 f # 30836 xor c a 33 1 1 f b 33 1 0 f # 30837 xor c a 33 1 1 f b 33 1 1 f # 30838 xor c a 33 1 1 f b 33 1 0 1 2 3 4 7 8 9 10 11 12 14 16 19 20 21 22 23 25 27 29 31 # 30839 xor c a 33 1 1 0 1 7 8 10 12 16 19 22 23 24 25 29 30 32 b 33 1 1 0 1 7 8 10 12 16 19 22 23 24 25 29 30 32 # 30840 xor c a 33 1 1 0 1 7 8 10 12 16 19 22 23 24 25 29 30 32 b 33 1 0 e # 30841 xor c a 33 1 1 1 2 3 4 5 6 8 9 14 16 17 18 19 20 21 22 23 24 26 27 30 31 32 b 33 1 1 1 2 3 4 5 6 8 9 14 16 17 18 19 20 21 22 23 24 26 27 30 31 32 # 30842 xor c a 33 1 1 1 2 3 4 5 6 8 9 14 16 17 18 19 20 21 22 23 24 26 27 30 31 32 b 33 1 0 f # 30843 xor c a 33 1 1 0 2 3 6 9 11 12 13 14 15 16 17 23 26 29 31 b 33 1 1 0 2 3 6 9 11 12 13 14 15 16 17 23 26 29 31 # 30844 xor c a 33 1 1 0 2 3 6 9 11 12 13 14 15 16 17 23 26 29 31 b 33 1 0 1 3 5 12 14 15 16 19 20 21 24 25 26 27 29 30 31 # 30845 xor c a 33 1 1 e b 33 1 1 e # 30846 xor c a 33 1 1 e b 33 1 1 e # 30847 xor c a 33 1 1 e b 33 1 1 e # 30848 xor c a 33 1 1 e b 33 1 1 f # 30849 xor c a 33 1 1 e b 33 1 1 e # 30850 xor c a 33 1 1 e b 33 1 1 2 4 7 8 9 10 12 13 14 16 17 19 21 22 23 25 28 29 30 # 30851 xor c a 33 1 1 f b 33 1 1 f # 30852 xor c a 33 1 1 f b 33 1 1 e # 30853 xor c a 33 1 1 f b 33 1 1 f # 30854 xor c a 33 1 1 f b 33 1 1 f # 30855 xor c a 33 1 1 f b 33 1 1 f # 30856 xor c a 33 1 1 f b 33 1 1 0 4 7 11 13 14 16 17 18 19 20 21 23 24 27 29 31 # 30857 xor c a 33 1 1 0 3 5 7 13 16 17 21 23 26 28 29 31 b 33 1 1 0 3 5 7 13 16 17 21 23 26 28 29 31 # 30858 xor c a 33 1 1 0 3 5 7 13 16 17 21 23 26 28 29 31 b 33 1 1 e # 30859 xor c a 33 1 1 0 1 2 3 4 5 12 13 14 15 16 18 19 20 21 24 25 27 30 31 32 b 33 1 1 0 1 2 3 4 5 12 13 14 15 16 18 19 20 21 24 25 27 30 31 32 # 30860 xor c a 33 1 1 0 1 2 3 4 5 12 13 14 15 16 18 19 20 21 24 25 27 30 31 32 b 33 1 1 f # 30861 xor c a 33 1 1 0 1 2 4 6 8 9 12 13 16 19 20 21 23 26 27 29 30 31 32 b 33 1 1 0 1 2 4 6 8 9 12 13 16 19 20 21 23 26 27 29 30 31 32 # 30862 xor c a 33 1 1 0 1 2 4 6 8 9 12 13 16 19 20 21 23 26 27 29 30 31 32 b 33 1 1 0 2 3 6 12 13 20 21 22 23 24 27 30 31 32 # 30863 xor c a 63 0 0 e b 63 0 0 e # 30864 xor c a 63 0 0 e b 63 0 0 e # 30865 xor c a 63 0 0 e b 63 0 0 e # 30866 xor c a 63 0 0 e b 63 0 0 f # 30867 xor c a 63 0 0 e b 63 0 0 e # 30868 xor c a 63 0 0 e b 63 0 0 1 2 3 4 7 9 10 13 17 23 27 28 35 36 38 41 44 45 46 47 48 55 56 58 59 60 # 30869 xor c a 63 0 0 f b 63 0 0 f # 30870 xor c a 63 0 0 f b 63 0 0 e # 30871 xor c a 63 0 0 f b 63 0 0 f # 30872 xor c a 63 0 0 f b 63 0 0 f # 30873 xor c a 63 0 0 f b 63 0 0 f # 30874 xor c a 63 0 0 f b 63 0 0 0 1 3 5 6 7 9 11 14 16 17 18 24 25 27 28 30 31 34 35 37 39 41 43 44 47 51 53 56 60 # 30875 xor c a 63 0 0 1 2 3 5 7 13 14 16 17 19 22 23 24 30 31 33 34 39 41 42 43 44 45 46 47 48 52 55 56 60 61 b 63 0 0 1 2 3 5 7 13 14 16 17 19 22 23 24 30 31 33 34 39 41 42 43 44 45 46 47 48 52 55 56 60 61 # 30876 xor c a 63 0 0 1 2 3 5 7 13 14 16 17 19 22 23 24 30 31 33 34 39 41 42 43 44 45 46 47 48 52 55 56 60 61 b 63 0 0 e # 30877 xor c a 63 0 0 1 2 3 7 8 10 12 13 15 17 19 20 21 22 24 26 29 31 35 36 37 38 40 41 42 43 46 47 49 50 52 53 54 58 59 b 63 0 0 1 2 3 7 8 10 12 13 15 17 19 20 21 22 24 26 29 31 35 36 37 38 40 41 42 43 46 47 49 50 52 53 54 58 59 # 30878 xor c a 63 0 0 1 2 3 7 8 10 12 13 15 17 19 20 21 22 24 26 29 31 35 36 37 38 40 41 42 43 46 47 49 50 52 53 54 58 59 b 63 0 0 f # 30879 xor c a 63 0 0 0 1 2 5 7 8 9 10 11 16 21 22 23 27 28 29 34 35 38 39 41 42 43 48 50 51 53 54 55 58 59 60 b 63 0 0 0 1 2 5 7 8 9 10 11 16 21 22 23 27 28 29 34 35 38 39 41 42 43 48 50 51 53 54 55 58 59 60 # 30880 xor c a 63 0 0 0 1 2 5 7 8 9 10 11 16 21 22 23 27 28 29 34 35 38 39 41 42 43 48 50 51 53 54 55 58 59 60 b 63 0 0 1 4 5 7 8 10 11 12 13 14 16 19 20 21 23 25 28 29 30 34 36 39 40 42 43 45 47 50 54 55 56 58 59 61 62 # 30881 xor c a 63 0 0 e b 63 0 0 e # 30882 xor c a 63 0 0 e b 63 0 1 e # 30883 xor c a 63 0 0 e b 63 0 0 e # 30884 xor c a 63 0 0 e b 63 0 1 f # 30885 xor c a 63 0 0 e b 63 0 0 e # 30886 xor c a 63 0 0 e b 63 0 1 0 1 2 4 5 6 7 8 9 10 14 16 18 19 20 22 27 28 30 33 34 36 41 42 43 45 46 48 49 51 56 57 60 62 # 30887 xor c a 63 0 0 f b 63 0 0 f # 30888 xor c a 63 0 0 f b 63 0 1 e # 30889 xor c a 63 0 0 f b 63 0 0 f # 30890 xor c a 63 0 0 f b 63 0 1 f # 30891 xor c a 63 0 0 f b 63 0 0 f # 30892 xor c a 63 0 0 f b 63 0 1 2 4 6 8 9 18 19 20 21 24 25 26 28 33 34 38 39 44 45 46 47 49 50 52 58 61 # 30893 xor c a 63 0 0 0 1 5 8 9 10 12 13 15 18 20 21 22 28 30 31 36 37 38 39 40 45 49 50 52 53 54 57 58 59 61 62 b 63 0 0 0 1 5 8 9 10 12 13 15 18 20 21 22 28 30 31 36 37 38 39 40 45 49 50 52 53 54 57 58 59 61 62 # 30894 xor c a 63 0 0 0 1 5 8 9 10 12 13 15 18 20 21 22 28 30 31 36 37 38 39 40 45 49 50 52 53 54 57 58 59 61 62 b 63 0 1 e # 30895 xor c a 63 0 0 1 2 3 4 5 6 7 11 15 16 18 19 21 22 25 28 29 30 32 33 35 36 38 43 44 46 47 48 49 50 51 52 57 60 62 b 63 0 0 1 2 3 4 5 6 7 11 15 16 18 19 21 22 25 28 29 30 32 33 35 36 38 43 44 46 47 48 49 50 51 52 57 60 62 # 30896 xor c a 63 0 0 1 2 3 4 5 6 7 11 15 16 18 19 21 22 25 28 29 30 32 33 35 36 38 43 44 46 47 48 49 50 51 52 57 60 62 b 63 0 1 f # 30897 xor c a 63 0 0 0 3 6 8 10 11 14 15 16 17 18 19 20 26 27 28 31 32 33 35 43 46 52 53 58 62 b 63 0 0 0 3 6 8 10 11 14 15 16 17 18 19 20 26 27 28 31 32 33 35 43 46 52 53 58 62 # 30898 xor c a 63 0 0 0 3 6 8 10 11 14 15 16 17 18 19 20 26 27 28 31 32 33 35 43 46 52 53 58 62 b 63 0 1 5 6 7 9 10 11 14 15 19 20 24 27 28 29 30 32 43 46 47 50 52 53 54 57 60 62 # 30899 xor c a 63 0 0 e b 63 0 0 e # 30900 xor c a 63 0 0 e b 63 1 0 e # 30901 xor c a 63 0 0 e b 63 0 0 e # 30902 xor c a 63 0 0 e b 63 1 0 f # 30903 xor c a 63 0 0 e b 63 0 0 e # 30904 xor c a 63 0 0 e b 63 1 0 0 1 7 8 9 16 18 21 23 27 28 29 30 31 32 33 34 35 38 41 42 45 46 49 50 51 52 57 61 # 30905 xor c a 63 0 0 f b 63 0 0 f # 30906 xor c a 63 0 0 f b 63 1 0 e # 30907 xor c a 63 0 0 f b 63 0 0 f # 30908 xor c a 63 0 0 f b 63 1 0 f # 30909 xor c a 63 0 0 f b 63 0 0 f # 30910 xor c a 63 0 0 f b 63 1 0 1 5 6 7 8 9 15 16 17 18 19 20 23 24 25 31 33 34 35 37 40 41 42 51 52 54 58 59 62 # 30911 xor c a 63 0 0 0 1 2 5 6 7 8 9 10 14 15 20 21 25 30 31 33 35 38 41 43 46 47 52 53 54 59 60 62 b 63 0 0 0 1 2 5 6 7 8 9 10 14 15 20 21 25 30 31 33 35 38 41 43 46 47 52 53 54 59 60 62 # 30912 xor c a 63 0 0 0 1 2 5 6 7 8 9 10 14 15 20 21 25 30 31 33 35 38 41 43 46 47 52 53 54 59 60 62 b 63 1 0 e # 30913 xor c a 63 0 0 4 5 7 13 19 22 23 24 25 28 29 31 32 35 38 40 42 44 45 49 50 51 53 54 55 56 57 60 61 b 63 0 0 4 5 7 13 19 22 23 24 25 28 29 31 32 35 38 40 42 44 45 49 50 51 53 54 55 56 57 60 61 # 30914 xor c a 63 0 0 4 5 7 13 19 22 23 24 25 28 29 31 32 35 38 40 42 44 45 49 50 51 53 54 55 56 57 60 61 b 63 1 0 f # 30915 xor c a 63 0 0 0 2 7 8 10 13 14 15 17 18 20 22 23 25 27 28 33 34 35 38 40 41 46 47 48 49 50 51 53 54 56 59 60 b 63 0 0 0 2 7 8 10 13 14 15 17 18 20 22 23 25 27 28 33 34 35 38 40 41 46 47 48 49 50 51 53 54 56 59 60 # 30916 xor c a 63 0 0 0 2 7 8 10 13 14 15 17 18 20 22 23 25 27 28 33 34 35 38 40 41 46 47 48 49 50 51 53 54 56 59 60 b 63 1 0 4 7 9 13 16 19 22 23 27 28 29 35 36 37 38 40 42 47 49 50 51 52 54 56 59 60 62 # 30917 xor c a 63 0 0 e b 63 0 0 e # 30918 xor c a 63 0 0 e b 63 1 1 e # 30919 xor c a 63 0 0 e b 63 0 0 e # 30920 xor c a 63 0 0 e b 63 1 1 f # 30921 xor c a 63 0 0 e b 63 0 0 e # 30922 xor c a 63 0 0 e b 63 1 1 1 4 8 9 10 12 14 15 16 18 19 22 23 24 25 26 27 28 30 37 38 41 42 44 47 48 60 61 # 30923 xor c a 63 0 0 f b 63 0 0 f # 30924 xor c a 63 0 0 f b 63 1 1 e # 30925 xor c a 63 0 0 f b 63 0 0 f # 30926 xor c a 63 0 0 f b 63 1 1 f # 30927 xor c a 63 0 0 f b 63 0 0 f # 30928 xor c a 63 0 0 f b 63 1 1 2 3 4 5 10 11 15 19 20 21 24 26 29 30 32 33 35 37 38 39 40 41 45 47 49 50 54 56 58 59 # 30929 xor c a 63 0 0 2 3 4 6 9 10 11 13 14 16 17 21 22 23 28 29 30 31 33 34 35 37 39 40 46 55 56 57 59 60 62 b 63 0 0 2 3 4 6 9 10 11 13 14 16 17 21 22 23 28 29 30 31 33 34 35 37 39 40 46 55 56 57 59 60 62 # 30930 xor c a 63 0 0 2 3 4 6 9 10 11 13 14 16 17 21 22 23 28 29 30 31 33 34 35 37 39 40 46 55 56 57 59 60 62 b 63 1 1 e # 30931 xor c a 63 0 0 0 1 2 3 5 7 8 9 13 17 18 19 20 22 23 25 26 30 33 37 40 41 44 45 46 49 50 53 55 56 58 61 62 b 63 0 0 0 1 2 3 5 7 8 9 13 17 18 19 20 22 23 25 26 30 33 37 40 41 44 45 46 49 50 53 55 56 58 61 62 # 30932 xor c a 63 0 0 0 1 2 3 5 7 8 9 13 17 18 19 20 22 23 25 26 30 33 37 40 41 44 45 46 49 50 53 55 56 58 61 62 b 63 1 1 f # 30933 xor c a 63 0 0 0 1 6 9 10 12 13 15 17 18 19 21 22 23 24 26 27 28 29 30 32 33 34 35 42 43 46 49 52 55 58 62 b 63 0 0 0 1 6 9 10 12 13 15 17 18 19 21 22 23 24 26 27 28 29 30 32 33 34 35 42 43 46 49 52 55 58 62 # 30934 xor c a 63 0 0 0 1 6 9 10 12 13 15 17 18 19 21 22 23 24 26 27 28 29 30 32 33 34 35 42 43 46 49 52 55 58 62 b 63 1 1 4 5 6 15 16 22 23 24 26 28 30 31 32 37 38 39 41 42 43 46 49 51 54 58 60 61 # 30935 xor c a 63 0 1 e b 63 0 1 e # 30936 xor c a 63 0 1 e b 63 0 0 e # 30937 xor c a 63 0 1 e b 63 0 1 e # 30938 xor c a 63 0 1 e b 63 0 0 f # 30939 xor c a 63 0 1 e b 63 0 1 e # 30940 xor c a 63 0 1 e b 63 0 0 3 4 6 8 9 13 18 19 20 22 24 26 27 28 29 32 33 35 39 40 41 45 46 47 48 49 50 51 52 54 55 56 57 58 59 60 61 # 30941 xor c a 63 0 1 f b 63 0 1 f # 30942 xor c a 63 0 1 f b 63 0 0 e # 30943 xor c a 63 0 1 f b 63 0 1 f # 30944 xor c a 63 0 1 f b 63 0 0 f # 30945 xor c a 63 0 1 f b 63 0 1 f # 30946 xor c a 63 0 1 f b 63 0 0 0 1 2 4 5 6 7 8 12 14 15 17 19 20 21 22 24 25 28 30 32 34 35 37 38 42 44 45 46 47 50 53 54 56 57 58 59 # 30947 xor c a 63 0 1 1 5 7 9 10 16 17 22 23 25 29 32 33 34 36 37 39 40 44 45 46 47 48 50 52 53 56 57 60 61 62 b 63 0 1 1 5 7 9 10 16 17 22 23 25 29 32 33 34 36 37 39 40 44 45 46 47 48 50 52 53 56 57 60 61 62 # 30948 xor c a 63 0 1 1 5 7 9 10 16 17 22 23 25 29 32 33 34 36 37 39 40 44 45 46 47 48 50 52 53 56 57 60 61 62 b 63 0 0 e # 30949 xor c a 63 0 1 0 1 6 9 10 12 13 16 22 26 27 29 31 32 33 37 38 39 40 41 43 44 47 48 49 53 54 55 57 59 60 61 62 b 63 0 1 0 1 6 9 10 12 13 16 22 26 27 29 31 32 33 37 38 39 40 41 43 44 47 48 49 53 54 55 57 59 60 61 62 # 30950 xor c a 63 0 1 0 1 6 9 10 12 13 16 22 26 27 29 31 32 33 37 38 39 40 41 43 44 47 48 49 53 54 55 57 59 60 61 62 b 63 0 0 f # 30951 xor c a 63 0 1 1 2 3 5 8 11 12 13 14 15 16 17 18 20 21 22 23 25 30 31 33 34 35 36 38 39 42 45 50 53 55 58 59 60 61 62 b 63 0 1 1 2 3 5 8 11 12 13 14 15 16 17 18 20 21 22 23 25 30 31 33 34 35 36 38 39 42 45 50 53 55 58 59 60 61 62 # 30952 xor c a 63 0 1 1 2 3 5 8 11 12 13 14 15 16 17 18 20 21 22 23 25 30 31 33 34 35 36 38 39 42 45 50 53 55 58 59 60 61 62 b 63 0 0 0 1 2 3 4 5 6 7 10 11 12 16 18 20 21 22 28 31 33 34 36 40 44 45 46 47 49 51 53 55 57 58 # 30953 xor c a 63 0 1 e b 63 0 1 e # 30954 xor c a 63 0 1 e b 63 0 1 e # 30955 xor c a 63 0 1 e b 63 0 1 e # 30956 xor c a 63 0 1 e b 63 0 1 f # 30957 xor c a 63 0 1 e b 63 0 1 e # 30958 xor c a 63 0 1 e b 63 0 1 0 2 6 7 11 12 13 15 18 20 21 22 25 29 30 32 33 34 37 38 40 43 45 46 48 49 50 51 52 55 57 62 # 30959 xor c a 63 0 1 f b 63 0 1 f # 30960 xor c a 63 0 1 f b 63 0 1 e # 30961 xor c a 63 0 1 f b 63 0 1 f # 30962 xor c a 63 0 1 f b 63 0 1 f # 30963 xor c a 63 0 1 f b 63 0 1 f # 30964 xor c a 63 0 1 f b 63 0 1 1 3 6 7 9 10 13 14 15 16 17 21 22 26 27 28 33 37 40 42 44 45 46 47 51 53 55 60 61 62 # 30965 xor c a 63 0 1 0 1 6 7 9 12 15 16 17 18 19 21 25 26 27 29 30 32 34 35 37 38 39 40 43 45 48 50 55 56 58 60 61 62 b 63 0 1 0 1 6 7 9 12 15 16 17 18 19 21 25 26 27 29 30 32 34 35 37 38 39 40 43 45 48 50 55 56 58 60 61 62 # 30966 xor c a 63 0 1 0 1 6 7 9 12 15 16 17 18 19 21 25 26 27 29 30 32 34 35 37 38 39 40 43 45 48 50 55 56 58 60 61 62 b 63 0 1 e # 30967 xor c a 63 0 1 0 2 3 4 5 9 10 14 20 21 22 23 24 26 29 31 32 34 35 36 40 41 42 46 47 48 52 55 57 58 59 60 62 b 63 0 1 0 2 3 4 5 9 10 14 20 21 22 23 24 26 29 31 32 34 35 36 40 41 42 46 47 48 52 55 57 58 59 60 62 # 30968 xor c a 63 0 1 0 2 3 4 5 9 10 14 20 21 22 23 24 26 29 31 32 34 35 36 40 41 42 46 47 48 52 55 57 58 59 60 62 b 63 0 1 f # 30969 xor c a 63 0 1 0 5 6 7 8 9 10 11 14 15 16 17 20 22 23 24 25 26 27 29 33 34 35 36 38 41 44 47 49 54 56 57 58 60 62 b 63 0 1 0 5 6 7 8 9 10 11 14 15 16 17 20 22 23 24 25 26 27 29 33 34 35 36 38 41 44 47 49 54 56 57 58 60 62 # 30970 xor c a 63 0 1 0 5 6 7 8 9 10 11 14 15 16 17 20 22 23 24 25 26 27 29 33 34 35 36 38 41 44 47 49 54 56 57 58 60 62 b 63 0 1 5 7 9 11 12 15 16 17 19 21 22 24 25 29 30 31 34 35 39 41 45 47 48 49 50 51 53 56 57 60 62 # 30971 xor c a 63 0 1 e b 63 0 1 e # 30972 xor c a 63 0 1 e b 63 1 0 e # 30973 xor c a 63 0 1 e b 63 0 1 e # 30974 xor c a 63 0 1 e b 63 1 0 f # 30975 xor c a 63 0 1 e b 63 0 1 e # 30976 xor c a 63 0 1 e b 63 1 0 1 2 6 10 11 12 14 15 17 18 21 22 25 26 27 28 30 33 35 36 40 41 47 48 49 50 52 53 54 57 58 61 # 30977 xor c a 63 0 1 f b 63 0 1 f # 30978 xor c a 63 0 1 f b 63 1 0 e # 30979 xor c a 63 0 1 f b 63 0 1 f # 30980 xor c a 63 0 1 f b 63 1 0 f # 30981 xor c a 63 0 1 f b 63 0 1 f # 30982 xor c a 63 0 1 f b 63 1 0 0 2 3 6 7 8 9 14 17 19 21 23 26 27 32 34 37 40 41 42 45 46 47 49 51 52 53 54 59 60 62 # 30983 xor c a 63 0 1 0 1 2 5 6 7 8 9 10 12 15 16 19 22 23 26 34 37 41 42 45 52 59 60 61 62 b 63 0 1 0 1 2 5 6 7 8 9 10 12 15 16 19 22 23 26 34 37 41 42 45 52 59 60 61 62 # 30984 xor c a 63 0 1 0 1 2 5 6 7 8 9 10 12 15 16 19 22 23 26 34 37 41 42 45 52 59 60 61 62 b 63 1 0 e # 30985 xor c a 63 0 1 0 1 2 6 8 9 14 15 19 20 24 26 27 30 34 35 36 39 44 52 54 55 56 58 60 b 63 0 1 0 1 2 6 8 9 14 15 19 20 24 26 27 30 34 35 36 39 44 52 54 55 56 58 60 # 30986 xor c a 63 0 1 0 1 2 6 8 9 14 15 19 20 24 26 27 30 34 35 36 39 44 52 54 55 56 58 60 b 63 1 0 f # 30987 xor c a 63 0 1 1 4 5 7 8 9 12 13 14 15 19 21 24 25 26 27 28 33 34 41 42 43 44 45 46 47 48 50 52 55 58 60 62 b 63 0 1 1 4 5 7 8 9 12 13 14 15 19 21 24 25 26 27 28 33 34 41 42 43 44 45 46 47 48 50 52 55 58 60 62 # 30988 xor c a 63 0 1 1 4 5 7 8 9 12 13 14 15 19 21 24 25 26 27 28 33 34 41 42 43 44 45 46 47 48 50 52 55 58 60 62 b 63 1 0 1 3 5 7 8 10 11 13 14 16 18 19 23 25 26 27 28 29 32 33 36 37 39 42 43 45 46 47 48 49 50 55 57 60 61 62 # 30989 xor c a 63 0 1 e b 63 0 1 e # 30990 xor c a 63 0 1 e b 63 1 1 e # 30991 xor c a 63 0 1 e b 63 0 1 e # 30992 xor c a 63 0 1 e b 63 1 1 f # 30993 xor c a 63 0 1 e b 63 0 1 e # 30994 xor c a 63 0 1 e b 63 1 1 0 1 4 6 8 11 12 13 14 15 16 17 18 20 23 24 33 34 35 37 41 42 44 45 46 47 49 50 52 55 56 58 60 62 # 30995 xor c a 63 0 1 f b 63 0 1 f # 30996 xor c a 63 0 1 f b 63 1 1 e # 30997 xor c a 63 0 1 f b 63 0 1 f # 30998 xor c a 63 0 1 f b 63 1 1 f # 30999 xor c a 63 0 1 f b 63 0 1 f # 31000 xor c a 63 0 1 f b 63 1 1 0 1 2 3 5 11 12 14 15 16 18 25 27 28 30 31 33 34 35 36 41 42 44 45 47 49 50 51 54 60 61 62 # 31001 xor c a 63 0 1 1 2 3 5 7 9 10 11 12 15 16 18 23 24 25 27 30 31 32 33 34 36 37 40 41 43 46 48 50 52 56 60 b 63 0 1 1 2 3 5 7 9 10 11 12 15 16 18 23 24 25 27 30 31 32 33 34 36 37 40 41 43 46 48 50 52 56 60 # 31002 xor c a 63 0 1 1 2 3 5 7 9 10 11 12 15 16 18 23 24 25 27 30 31 32 33 34 36 37 40 41 43 46 48 50 52 56 60 b 63 1 1 e # 31003 xor c a 63 0 1 0 2 4 5 8 11 12 13 14 16 18 19 20 25 26 27 30 32 33 35 36 37 38 39 42 45 46 48 49 51 52 58 59 60 61 62 b 63 0 1 0 2 4 5 8 11 12 13 14 16 18 19 20 25 26 27 30 32 33 35 36 37 38 39 42 45 46 48 49 51 52 58 59 60 61 62 # 31004 xor c a 63 0 1 0 2 4 5 8 11 12 13 14 16 18 19 20 25 26 27 30 32 33 35 36 37 38 39 42 45 46 48 49 51 52 58 59 60 61 62 b 63 1 1 f # 31005 xor c a 63 0 1 0 1 4 7 8 9 10 13 15 16 17 18 19 20 24 25 28 33 34 42 43 44 46 47 49 53 55 57 60 61 62 b 63 0 1 0 1 4 7 8 9 10 13 15 16 17 18 19 20 24 25 28 33 34 42 43 44 46 47 49 53 55 57 60 61 62 # 31006 xor c a 63 0 1 0 1 4 7 8 9 10 13 15 16 17 18 19 20 24 25 28 33 34 42 43 44 46 47 49 53 55 57 60 61 62 b 63 1 1 1 2 6 7 8 9 10 11 12 15 19 21 25 26 27 28 29 32 34 42 44 48 50 54 55 57 58 60 # 31007 xor c a 63 1 0 e b 63 1 0 e # 31008 xor c a 63 1 0 e b 63 0 0 e # 31009 xor c a 63 1 0 e b 63 1 0 e # 31010 xor c a 63 1 0 e b 63 0 0 f # 31011 xor c a 63 1 0 e b 63 1 0 e # 31012 xor c a 63 1 0 e b 63 0 0 0 4 5 6 11 12 13 14 19 20 23 24 26 27 28 29 31 33 34 37 38 39 40 41 43 44 48 50 51 52 54 55 56 57 58 59 60 # 31013 xor c a 63 1 0 f b 63 1 0 f # 31014 xor c a 63 1 0 f b 63 0 0 e # 31015 xor c a 63 1 0 f b 63 1 0 f # 31016 xor c a 63 1 0 f b 63 0 0 f # 31017 xor c a 63 1 0 f b 63 1 0 f # 31018 xor c a 63 1 0 f b 63 0 0 1 3 10 17 20 21 23 24 25 28 29 30 31 32 34 36 39 40 43 45 47 48 49 50 51 52 55 57 59 60 62 # 31019 xor c a 63 1 0 1 2 3 5 8 10 11 12 15 18 19 21 23 31 33 35 36 37 39 41 45 46 47 48 49 50 52 55 56 59 60 62 b 63 1 0 1 2 3 5 8 10 11 12 15 18 19 21 23 31 33 35 36 37 39 41 45 46 47 48 49 50 52 55 56 59 60 62 # 31020 xor c a 63 1 0 1 2 3 5 8 10 11 12 15 18 19 21 23 31 33 35 36 37 39 41 45 46 47 48 49 50 52 55 56 59 60 62 b 63 0 0 e # 31021 xor c a 63 1 0 3 5 10 12 19 20 22 23 29 30 31 34 35 37 38 41 42 43 47 48 49 51 54 56 57 58 60 61 b 63 1 0 3 5 10 12 19 20 22 23 29 30 31 34 35 37 38 41 42 43 47 48 49 51 54 56 57 58 60 61 # 31022 xor c a 63 1 0 3 5 10 12 19 20 22 23 29 30 31 34 35 37 38 41 42 43 47 48 49 51 54 56 57 58 60 61 b 63 0 0 f # 31023 xor c a 63 1 0 0 1 2 3 5 6 7 10 12 14 16 18 19 20 26 27 29 32 34 35 37 38 42 43 44 47 48 51 52 53 54 57 59 60 61 62 b 63 1 0 0 1 2 3 5 6 7 10 12 14 16 18 19 20 26 27 29 32 34 35 37 38 42 43 44 47 48 51 52 53 54 57 59 60 61 62 # 31024 xor c a 63 1 0 0 1 2 3 5 6 7 10 12 14 16 18 19 20 26 27 29 32 34 35 37 38 42 43 44 47 48 51 52 53 54 57 59 60 61 62 b 63 0 0 1 2 5 7 8 9 11 13 16 17 18 19 20 21 22 25 26 27 29 30 31 32 33 35 36 37 38 39 42 43 49 50 52 53 54 55 57 58 59 61 62 # 31025 xor c a 63 1 0 e b 63 1 0 e # 31026 xor c a 63 1 0 e b 63 0 1 e # 31027 xor c a 63 1 0 e b 63 1 0 e # 31028 xor c a 63 1 0 e b 63 0 1 f # 31029 xor c a 63 1 0 e b 63 1 0 e # 31030 xor c a 63 1 0 e b 63 0 1 1 4 6 8 11 14 15 16 17 18 19 20 22 23 24 26 27 28 29 30 32 36 38 40 44 46 49 51 54 56 59 62 # 31031 xor c a 63 1 0 f b 63 1 0 f # 31032 xor c a 63 1 0 f b 63 0 1 e # 31033 xor c a 63 1 0 f b 63 1 0 f # 31034 xor c a 63 1 0 f b 63 0 1 f # 31035 xor c a 63 1 0 f b 63 1 0 f # 31036 xor c a 63 1 0 f b 63 0 1 0 1 5 7 8 9 11 14 15 16 17 19 20 21 25 29 33 34 35 36 38 40 44 49 52 53 56 57 59 60 61 # 31037 xor c a 63 1 0 2 7 11 13 15 16 18 20 21 22 25 26 30 31 32 33 34 36 38 40 42 43 44 46 47 49 53 54 55 56 60 62 b 63 1 0 2 7 11 13 15 16 18 20 21 22 25 26 30 31 32 33 34 36 38 40 42 43 44 46 47 49 53 54 55 56 60 62 # 31038 xor c a 63 1 0 2 7 11 13 15 16 18 20 21 22 25 26 30 31 32 33 34 36 38 40 42 43 44 46 47 49 53 54 55 56 60 62 b 63 0 1 e # 31039 xor c a 63 1 0 0 1 2 4 8 11 14 16 18 20 21 23 25 27 28 29 30 31 32 33 34 35 36 38 39 40 42 44 45 46 47 55 57 59 62 b 63 1 0 0 1 2 4 8 11 14 16 18 20 21 23 25 27 28 29 30 31 32 33 34 35 36 38 39 40 42 44 45 46 47 55 57 59 62 # 31040 xor c a 63 1 0 0 1 2 4 8 11 14 16 18 20 21 23 25 27 28 29 30 31 32 33 34 35 36 38 39 40 42 44 45 46 47 55 57 59 62 b 63 0 1 f # 31041 xor c a 63 1 0 1 2 3 4 5 6 7 8 10 11 12 13 14 15 16 18 24 26 27 28 29 31 32 34 35 37 38 39 41 42 44 45 46 47 48 49 50 54 56 58 b 63 1 0 1 2 3 4 5 6 7 8 10 11 12 13 14 15 16 18 24 26 27 28 29 31 32 34 35 37 38 39 41 42 44 45 46 47 48 49 50 54 56 58 # 31042 xor c a 63 1 0 1 2 3 4 5 6 7 8 10 11 12 13 14 15 16 18 24 26 27 28 29 31 32 34 35 37 38 39 41 42 44 45 46 47 48 49 50 54 56 58 b 63 0 1 1 4 7 8 10 11 13 14 15 16 17 18 22 23 26 27 28 32 33 34 35 38 39 40 41 42 44 45 48 50 52 53 55 57 58 61 62 # 31043 xor c a 63 1 0 e b 63 1 0 e # 31044 xor c a 63 1 0 e b 63 1 0 e # 31045 xor c a 63 1 0 e b 63 1 0 e # 31046 xor c a 63 1 0 e b 63 1 0 f # 31047 xor c a 63 1 0 e b 63 1 0 e # 31048 xor c a 63 1 0 e b 63 1 0 1 2 4 7 10 12 13 14 16 17 20 21 22 23 25 28 33 37 40 42 43 45 48 49 50 52 55 57 61 # 31049 xor c a 63 1 0 f b 63 1 0 f # 31050 xor c a 63 1 0 f b 63 1 0 e # 31051 xor c a 63 1 0 f b 63 1 0 f # 31052 xor c a 63 1 0 f b 63 1 0 f # 31053 xor c a 63 1 0 f b 63 1 0 f # 31054 xor c a 63 1 0 f b 63 1 0 1 2 3 4 5 6 8 11 15 16 17 20 21 22 23 28 29 30 32 33 34 35 36 37 41 43 44 47 49 52 54 56 58 61 62 # 31055 xor c a 63 1 0 0 1 2 3 5 6 7 8 9 11 12 13 15 25 27 28 29 31 32 34 36 37 39 42 45 46 50 52 54 55 58 b 63 1 0 0 1 2 3 5 6 7 8 9 11 12 13 15 25 27 28 29 31 32 34 36 37 39 42 45 46 50 52 54 55 58 # 31056 xor c a 63 1 0 0 1 2 3 5 6 7 8 9 11 12 13 15 25 27 28 29 31 32 34 36 37 39 42 45 46 50 52 54 55 58 b 63 1 0 e # 31057 xor c a 63 1 0 0 2 5 9 15 17 18 19 22 27 30 32 33 34 36 38 39 45 47 48 49 50 53 54 55 57 59 b 63 1 0 0 2 5 9 15 17 18 19 22 27 30 32 33 34 36 38 39 45 47 48 49 50 53 54 55 57 59 # 31058 xor c a 63 1 0 0 2 5 9 15 17 18 19 22 27 30 32 33 34 36 38 39 45 47 48 49 50 53 54 55 57 59 b 63 1 0 f # 31059 xor c a 63 1 0 2 3 6 10 11 12 13 15 18 19 21 24 26 27 28 30 32 33 35 39 40 41 42 44 45 49 50 51 52 54 55 56 57 59 60 b 63 1 0 2 3 6 10 11 12 13 15 18 19 21 24 26 27 28 30 32 33 35 39 40 41 42 44 45 49 50 51 52 54 55 56 57 59 60 # 31060 xor c a 63 1 0 2 3 6 10 11 12 13 15 18 19 21 24 26 27 28 30 32 33 35 39 40 41 42 44 45 49 50 51 52 54 55 56 57 59 60 b 63 1 0 0 2 3 4 6 9 11 12 14 15 17 18 20 25 26 28 30 31 32 33 35 39 44 52 53 54 56 57 58 59 61 # 31061 xor c a 63 1 0 e b 63 1 0 e # 31062 xor c a 63 1 0 e b 63 1 1 e # 31063 xor c a 63 1 0 e b 63 1 0 e # 31064 xor c a 63 1 0 e b 63 1 1 f # 31065 xor c a 63 1 0 e b 63 1 0 e # 31066 xor c a 63 1 0 e b 63 1 1 1 2 3 7 8 9 13 15 17 19 21 23 24 30 31 32 33 34 37 40 41 42 44 46 48 50 55 56 57 60 62 # 31067 xor c a 63 1 0 f b 63 1 0 f # 31068 xor c a 63 1 0 f b 63 1 1 e # 31069 xor c a 63 1 0 f b 63 1 0 f # 31070 xor c a 63 1 0 f b 63 1 1 f # 31071 xor c a 63 1 0 f b 63 1 0 f # 31072 xor c a 63 1 0 f b 63 1 1 0 2 4 5 11 12 14 17 19 21 25 26 27 28 30 31 32 35 37 39 40 43 44 53 54 55 56 59 60 62 # 31073 xor c a 63 1 0 1 2 4 5 7 8 9 11 12 14 16 18 20 21 22 26 30 31 32 33 34 35 36 38 41 46 48 49 52 54 56 57 62 b 63 1 0 1 2 4 5 7 8 9 11 12 14 16 18 20 21 22 26 30 31 32 33 34 35 36 38 41 46 48 49 52 54 56 57 62 # 31074 xor c a 63 1 0 1 2 4 5 7 8 9 11 12 14 16 18 20 21 22 26 30 31 32 33 34 35 36 38 41 46 48 49 52 54 56 57 62 b 63 1 1 e # 31075 xor c a 63 1 0 2 6 7 8 9 10 15 16 21 24 26 27 28 30 31 32 33 38 41 42 43 48 49 50 54 56 57 b 63 1 0 2 6 7 8 9 10 15 16 21 24 26 27 28 30 31 32 33 38 41 42 43 48 49 50 54 56 57 # 31076 xor c a 63 1 0 2 6 7 8 9 10 15 16 21 24 26 27 28 30 31 32 33 38 41 42 43 48 49 50 54 56 57 b 63 1 1 f # 31077 xor c a 63 1 0 2 4 5 11 12 13 15 16 18 19 20 21 22 23 24 28 30 31 32 37 38 39 41 42 44 49 52 55 56 58 60 61 b 63 1 0 2 4 5 11 12 13 15 16 18 19 20 21 22 23 24 28 30 31 32 37 38 39 41 42 44 49 52 55 56 58 60 61 # 31078 xor c a 63 1 0 2 4 5 11 12 13 15 16 18 19 20 21 22 23 24 28 30 31 32 37 38 39 41 42 44 49 52 55 56 58 60 61 b 63 1 1 0 2 4 5 6 9 11 12 14 16 17 18 20 21 23 24 25 26 28 30 31 32 33 34 36 37 38 40 42 43 44 45 46 47 48 49 50 51 52 54 58 60 # 31079 xor c a 63 1 1 e b 63 1 1 e # 31080 xor c a 63 1 1 e b 63 0 0 e # 31081 xor c a 63 1 1 e b 63 1 1 e # 31082 xor c a 63 1 1 e b 63 0 0 f # 31083 xor c a 63 1 1 e b 63 1 1 e # 31084 xor c a 63 1 1 e b 63 0 0 0 4 11 14 15 17 18 22 23 24 26 30 33 37 38 41 50 51 52 53 54 55 59 60 62 # 31085 xor c a 63 1 1 f b 63 1 1 f # 31086 xor c a 63 1 1 f b 63 0 0 e # 31087 xor c a 63 1 1 f b 63 1 1 f # 31088 xor c a 63 1 1 f b 63 0 0 f # 31089 xor c a 63 1 1 f b 63 1 1 f # 31090 xor c a 63 1 1 f b 63 0 0 3 7 11 12 13 17 18 19 20 21 22 23 24 27 28 29 30 32 34 39 40 41 42 43 44 46 49 52 53 55 57 60 # 31091 xor c a 63 1 1 0 4 5 6 7 8 9 10 11 12 14 15 16 17 22 25 26 27 28 29 33 34 36 39 43 44 46 47 48 54 55 58 61 62 b 63 1 1 0 4 5 6 7 8 9 10 11 12 14 15 16 17 22 25 26 27 28 29 33 34 36 39 43 44 46 47 48 54 55 58 61 62 # 31092 xor c a 63 1 1 0 4 5 6 7 8 9 10 11 12 14 15 16 17 22 25 26 27 28 29 33 34 36 39 43 44 46 47 48 54 55 58 61 62 b 63 0 0 e # 31093 xor c a 63 1 1 0 1 5 6 10 13 16 18 20 23 24 25 26 29 30 34 35 37 39 41 42 43 44 47 48 51 52 53 54 55 58 59 61 62 b 63 1 1 0 1 5 6 10 13 16 18 20 23 24 25 26 29 30 34 35 37 39 41 42 43 44 47 48 51 52 53 54 55 58 59 61 62 # 31094 xor c a 63 1 1 0 1 5 6 10 13 16 18 20 23 24 25 26 29 30 34 35 37 39 41 42 43 44 47 48 51 52 53 54 55 58 59 61 62 b 63 0 0 f # 31095 xor c a 63 1 1 0 2 3 4 6 7 8 9 10 12 13 14 15 16 17 20 24 25 28 31 32 35 36 38 42 45 48 49 50 53 54 55 56 59 60 61 b 63 1 1 0 2 3 4 6 7 8 9 10 12 13 14 15 16 17 20 24 25 28 31 32 35 36 38 42 45 48 49 50 53 54 55 56 59 60 61 # 31096 xor c a 63 1 1 0 2 3 4 6 7 8 9 10 12 13 14 15 16 17 20 24 25 28 31 32 35 36 38 42 45 48 49 50 53 54 55 56 59 60 61 b 63 0 0 0 2 3 4 6 8 12 14 15 16 17 18 21 25 26 28 29 30 31 32 33 34 35 37 40 41 42 43 45 46 48 50 51 55 57 58 60 61 # 31097 xor c a 63 1 1 e b 63 1 1 e # 31098 xor c a 63 1 1 e b 63 0 1 e # 31099 xor c a 63 1 1 e b 63 1 1 e # 31100 xor c a 63 1 1 e b 63 0 1 f # 31101 xor c a 63 1 1 e b 63 1 1 e # 31102 xor c a 63 1 1 e b 63 0 1 0 3 4 5 7 8 10 11 15 17 21 23 24 26 29 31 33 34 35 36 37 38 39 41 43 45 48 49 50 52 55 56 58 59 60 62 # 31103 xor c a 63 1 1 f b 63 1 1 f # 31104 xor c a 63 1 1 f b 63 0 1 e # 31105 xor c a 63 1 1 f b 63 1 1 f # 31106 xor c a 63 1 1 f b 63 0 1 f # 31107 xor c a 63 1 1 f b 63 1 1 f # 31108 xor c a 63 1 1 f b 63 0 1 2 4 5 7 8 9 11 15 20 21 22 23 25 26 28 36 37 39 40 42 43 44 45 46 47 52 54 57 58 60 # 31109 xor c a 63 1 1 1 2 3 4 5 7 9 16 18 19 22 23 25 26 27 28 35 36 38 42 43 44 48 55 58 59 60 61 b 63 1 1 1 2 3 4 5 7 9 16 18 19 22 23 25 26 27 28 35 36 38 42 43 44 48 55 58 59 60 61 # 31110 xor c a 63 1 1 1 2 3 4 5 7 9 16 18 19 22 23 25 26 27 28 35 36 38 42 43 44 48 55 58 59 60 61 b 63 0 1 e # 31111 xor c a 63 1 1 0 3 5 6 7 9 10 11 12 13 16 18 19 20 23 26 29 30 32 37 38 40 41 43 44 45 46 49 52 53 57 58 60 61 62 b 63 1 1 0 3 5 6 7 9 10 11 12 13 16 18 19 20 23 26 29 30 32 37 38 40 41 43 44 45 46 49 52 53 57 58 60 61 62 # 31112 xor c a 63 1 1 0 3 5 6 7 9 10 11 12 13 16 18 19 20 23 26 29 30 32 37 38 40 41 43 44 45 46 49 52 53 57 58 60 61 62 b 63 0 1 f # 31113 xor c a 63 1 1 0 1 2 3 5 6 7 8 9 11 13 14 15 22 23 25 26 27 29 30 32 33 35 36 38 39 40 41 44 48 49 50 55 58 59 60 62 b 63 1 1 0 1 2 3 5 6 7 8 9 11 13 14 15 22 23 25 26 27 29 30 32 33 35 36 38 39 40 41 44 48 49 50 55 58 59 60 62 # 31114 xor c a 63 1 1 0 1 2 3 5 6 7 8 9 11 13 14 15 22 23 25 26 27 29 30 32 33 35 36 38 39 40 41 44 48 49 50 55 58 59 60 62 b 63 0 1 0 3 4 7 11 15 20 21 22 25 27 28 29 30 31 32 35 36 37 38 41 43 45 46 47 51 53 56 57 59 62 # 31115 xor c a 63 1 1 e b 63 1 1 e # 31116 xor c a 63 1 1 e b 63 1 0 e # 31117 xor c a 63 1 1 e b 63 1 1 e # 31118 xor c a 63 1 1 e b 63 1 0 f # 31119 xor c a 63 1 1 e b 63 1 1 e # 31120 xor c a 63 1 1 e b 63 1 0 1 7 8 10 11 12 13 16 17 18 19 20 21 24 26 27 28 33 34 35 36 37 39 43 45 48 51 52 53 55 56 59 60 61 62 # 31121 xor c a 63 1 1 f b 63 1 1 f # 31122 xor c a 63 1 1 f b 63 1 0 e # 31123 xor c a 63 1 1 f b 63 1 1 f # 31124 xor c a 63 1 1 f b 63 1 0 f # 31125 xor c a 63 1 1 f b 63 1 1 f # 31126 xor c a 63 1 1 f b 63 1 0 0 1 2 3 4 5 8 9 10 11 12 13 16 17 20 22 25 26 27 28 29 30 31 32 33 37 38 41 44 45 46 47 48 53 54 55 56 57 58 59 60 61 # 31127 xor c a 63 1 1 0 2 4 5 10 11 13 15 16 17 23 26 27 31 32 35 40 43 45 46 51 53 54 55 56 58 60 b 63 1 1 0 2 4 5 10 11 13 15 16 17 23 26 27 31 32 35 40 43 45 46 51 53 54 55 56 58 60 # 31128 xor c a 63 1 1 0 2 4 5 10 11 13 15 16 17 23 26 27 31 32 35 40 43 45 46 51 53 54 55 56 58 60 b 63 1 0 e # 31129 xor c a 63 1 1 0 1 3 4 5 8 9 10 11 14 15 16 17 19 21 24 25 26 28 31 32 33 34 35 36 39 43 44 46 47 49 51 52 53 54 55 56 57 59 61 62 b 63 1 1 0 1 3 4 5 8 9 10 11 14 15 16 17 19 21 24 25 26 28 31 32 33 34 35 36 39 43 44 46 47 49 51 52 53 54 55 56 57 59 61 62 # 31130 xor c a 63 1 1 0 1 3 4 5 8 9 10 11 14 15 16 17 19 21 24 25 26 28 31 32 33 34 35 36 39 43 44 46 47 49 51 52 53 54 55 56 57 59 61 62 b 63 1 0 f # 31131 xor c a 63 1 1 1 2 4 6 8 9 10 11 12 14 17 18 20 21 23 24 26 27 29 30 31 33 34 37 38 40 41 44 46 48 49 50 51 52 53 55 58 59 61 b 63 1 1 1 2 4 6 8 9 10 11 12 14 17 18 20 21 23 24 26 27 29 30 31 33 34 37 38 40 41 44 46 48 49 50 51 52 53 55 58 59 61 # 31132 xor c a 63 1 1 1 2 4 6 8 9 10 11 12 14 17 18 20 21 23 24 26 27 29 30 31 33 34 37 38 40 41 44 46 48 49 50 51 52 53 55 58 59 61 b 63 1 0 0 1 3 6 7 8 13 15 16 18 21 22 24 27 28 33 35 36 38 39 40 45 47 49 51 52 55 56 57 59 61 # 31133 xor c a 63 1 1 e b 63 1 1 e # 31134 xor c a 63 1 1 e b 63 1 1 e # 31135 xor c a 63 1 1 e b 63 1 1 e # 31136 xor c a 63 1 1 e b 63 1 1 f # 31137 xor c a 63 1 1 e b 63 1 1 e # 31138 xor c a 63 1 1 e b 63 1 1 0 2 3 5 6 8 10 11 12 13 15 20 21 22 23 24 25 29 30 35 40 43 47 48 49 51 57 58 59 60 # 31139 xor c a 63 1 1 f b 63 1 1 f # 31140 xor c a 63 1 1 f b 63 1 1 e # 31141 xor c a 63 1 1 f b 63 1 1 f # 31142 xor c a 63 1 1 f b 63 1 1 f # 31143 xor c a 63 1 1 f b 63 1 1 f # 31144 xor c a 63 1 1 f b 63 1 1 1 2 6 7 10 12 14 15 19 20 21 26 28 30 33 35 38 39 41 42 45 46 52 53 60 # 31145 xor c a 63 1 1 1 2 7 8 9 10 11 13 14 15 16 22 26 27 31 43 49 51 52 59 b 63 1 1 1 2 7 8 9 10 11 13 14 15 16 22 26 27 31 43 49 51 52 59 # 31146 xor c a 63 1 1 1 2 7 8 9 10 11 13 14 15 16 22 26 27 31 43 49 51 52 59 b 63 1 1 e # 31147 xor c a 63 1 1 0 1 2 6 8 10 13 14 15 17 20 24 25 27 29 31 32 33 35 37 39 43 47 49 50 51 57 58 60 b 63 1 1 0 1 2 6 8 10 13 14 15 17 20 24 25 27 29 31 32 33 35 37 39 43 47 49 50 51 57 58 60 # 31148 xor c a 63 1 1 0 1 2 6 8 10 13 14 15 17 20 24 25 27 29 31 32 33 35 37 39 43 47 49 50 51 57 58 60 b 63 1 1 f # 31149 xor c a 63 1 1 2 5 6 8 10 11 16 17 19 21 22 24 25 29 30 31 32 33 38 40 41 49 50 51 53 56 57 58 61 b 63 1 1 2 5 6 8 10 11 16 17 19 21 22 24 25 29 30 31 32 33 38 40 41 49 50 51 53 56 57 58 61 # 31150 xor c a 63 1 1 2 5 6 8 10 11 16 17 19 21 22 24 25 29 30 31 32 33 38 40 41 49 50 51 53 56 57 58 61 b 63 1 1 1 2 3 6 7 8 9 10 14 15 16 18 19 20 21 22 25 27 30 31 33 34 36 37 39 40 44 45 46 47 49 54 55 58 60 61 # 31151 xor c a 64 0 0 e b 64 0 0 e # 31152 xor c a 64 0 0 e b 64 0 0 e # 31153 xor c a 64 0 0 e b 64 0 0 e # 31154 xor c a 64 0 0 e b 64 0 0 f # 31155 xor c a 64 0 0 e b 64 0 0 e # 31156 xor c a 64 0 0 e b 64 0 0 2 3 5 6 10 11 12 13 14 15 19 20 21 22 23 24 26 30 32 33 38 39 41 42 47 48 51 54 57 58 59 # 31157 xor c a 64 0 0 f b 64 0 0 f # 31158 xor c a 64 0 0 f b 64 0 0 e # 31159 xor c a 64 0 0 f b 64 0 0 f # 31160 xor c a 64 0 0 f b 64 0 0 f # 31161 xor c a 64 0 0 f b 64 0 0 f # 31162 xor c a 64 0 0 f b 64 0 0 2 3 4 5 6 10 11 12 13 14 15 18 19 21 22 23 24 25 26 27 29 33 36 37 45 47 51 54 62 63 # 31163 xor c a 64 0 0 5 7 8 9 12 13 14 15 18 19 20 22 24 26 28 29 32 33 37 38 40 42 44 45 50 52 53 55 59 60 61 63 b 64 0 0 5 7 8 9 12 13 14 15 18 19 20 22 24 26 28 29 32 33 37 38 40 42 44 45 50 52 53 55 59 60 61 63 # 31164 xor c a 64 0 0 5 7 8 9 12 13 14 15 18 19 20 22 24 26 28 29 32 33 37 38 40 42 44 45 50 52 53 55 59 60 61 63 b 64 0 0 e # 31165 xor c a 64 0 0 1 3 4 10 12 14 16 17 20 21 23 26 31 32 34 35 36 42 44 46 50 51 54 56 57 58 59 61 62 b 64 0 0 1 3 4 10 12 14 16 17 20 21 23 26 31 32 34 35 36 42 44 46 50 51 54 56 57 58 59 61 62 # 31166 xor c a 64 0 0 1 3 4 10 12 14 16 17 20 21 23 26 31 32 34 35 36 42 44 46 50 51 54 56 57 58 59 61 62 b 64 0 0 f # 31167 xor c a 64 0 0 2 4 10 12 14 15 16 17 18 19 20 21 23 24 26 31 32 34 35 36 38 40 41 47 48 50 51 54 56 58 59 60 62 63 b 64 0 0 2 4 10 12 14 15 16 17 18 19 20 21 23 24 26 31 32 34 35 36 38 40 41 47 48 50 51 54 56 58 59 60 62 63 # 31168 xor c a 64 0 0 2 4 10 12 14 15 16 17 18 19 20 21 23 24 26 31 32 34 35 36 38 40 41 47 48 50 51 54 56 58 59 60 62 63 b 64 0 0 0 1 2 5 6 7 11 13 14 17 19 23 24 26 27 29 30 34 35 38 39 40 46 47 48 50 58 59 60 61 # 31169 xor c a 64 0 0 e b 64 0 0 e # 31170 xor c a 64 0 0 e b 64 0 1 e # 31171 xor c a 64 0 0 e b 64 0 0 e # 31172 xor c a 64 0 0 e b 64 0 1 f # 31173 xor c a 64 0 0 e b 64 0 0 e # 31174 xor c a 64 0 0 e b 64 0 1 1 5 9 12 15 17 19 23 24 26 27 28 29 32 34 37 38 39 40 43 46 47 49 50 51 58 62 # 31175 xor c a 64 0 0 f b 64 0 0 f # 31176 xor c a 64 0 0 f b 64 0 1 e # 31177 xor c a 64 0 0 f b 64 0 0 f # 31178 xor c a 64 0 0 f b 64 0 1 f # 31179 xor c a 64 0 0 f b 64 0 0 f # 31180 xor c a 64 0 0 f b 64 0 1 0 2 6 8 10 12 13 16 18 23 24 27 28 32 33 34 37 40 43 45 46 47 48 49 53 57 59 63 # 31181 xor c a 64 0 0 3 4 5 7 9 10 13 16 17 18 23 25 26 27 30 31 33 34 36 37 39 40 44 45 46 47 48 49 50 54 55 57 60 b 64 0 0 3 4 5 7 9 10 13 16 17 18 23 25 26 27 30 31 33 34 36 37 39 40 44 45 46 47 48 49 50 54 55 57 60 # 31182 xor c a 64 0 0 3 4 5 7 9 10 13 16 17 18 23 25 26 27 30 31 33 34 36 37 39 40 44 45 46 47 48 49 50 54 55 57 60 b 64 0 1 e # 31183 xor c a 64 0 0 1 2 3 4 6 7 8 10 11 13 19 20 25 26 29 30 32 33 35 38 39 40 41 42 46 47 48 50 51 52 54 55 57 60 61 62 63 b 64 0 0 1 2 3 4 6 7 8 10 11 13 19 20 25 26 29 30 32 33 35 38 39 40 41 42 46 47 48 50 51 52 54 55 57 60 61 62 63 # 31184 xor c a 64 0 0 1 2 3 4 6 7 8 10 11 13 19 20 25 26 29 30 32 33 35 38 39 40 41 42 46 47 48 50 51 52 54 55 57 60 61 62 63 b 64 0 1 f # 31185 xor c a 64 0 0 0 2 3 4 6 7 9 11 12 14 15 20 23 27 30 32 35 36 38 40 42 43 44 45 46 51 52 53 54 55 58 59 60 61 62 63 b 64 0 0 0 2 3 4 6 7 9 11 12 14 15 20 23 27 30 32 35 36 38 40 42 43 44 45 46 51 52 53 54 55 58 59 60 61 62 63 # 31186 xor c a 64 0 0 0 2 3 4 6 7 9 11 12 14 15 20 23 27 30 32 35 36 38 40 42 43 44 45 46 51 52 53 54 55 58 59 60 61 62 63 b 64 0 1 2 5 17 20 23 24 26 27 28 29 30 32 33 36 37 38 42 43 44 49 51 53 54 56 57 59 # 31187 xor c a 64 0 0 e b 64 0 0 e # 31188 xor c a 64 0 0 e b 64 1 0 e # 31189 xor c a 64 0 0 e b 64 0 0 e # 31190 xor c a 64 0 0 e b 64 1 0 f # 31191 xor c a 64 0 0 e b 64 0 0 e # 31192 xor c a 64 0 0 e b 64 1 0 1 2 4 5 6 10 12 15 16 17 18 20 21 23 24 25 26 28 29 30 32 33 36 38 40 41 44 45 47 48 51 53 62 63 # 31193 xor c a 64 0 0 f b 64 0 0 f # 31194 xor c a 64 0 0 f b 64 1 0 e # 31195 xor c a 64 0 0 f b 64 0 0 f # 31196 xor c a 64 0 0 f b 64 1 0 f # 31197 xor c a 64 0 0 f b 64 0 0 f # 31198 xor c a 64 0 0 f b 64 1 0 0 3 6 8 10 11 14 16 20 21 24 25 26 29 32 33 34 36 37 38 39 42 43 44 45 49 50 54 57 58 61 62 # 31199 xor c a 64 0 0 0 1 2 3 4 5 6 9 11 12 13 15 19 21 23 24 29 30 31 32 33 34 38 39 41 42 43 44 46 51 53 54 55 56 57 60 61 63 b 64 0 0 0 1 2 3 4 5 6 9 11 12 13 15 19 21 23 24 29 30 31 32 33 34 38 39 41 42 43 44 46 51 53 54 55 56 57 60 61 63 # 31200 xor c a 64 0 0 0 1 2 3 4 5 6 9 11 12 13 15 19 21 23 24 29 30 31 32 33 34 38 39 41 42 43 44 46 51 53 54 55 56 57 60 61 63 b 64 1 0 e # 31201 xor c a 64 0 0 0 1 5 6 7 8 9 10 11 12 13 14 16 20 23 30 35 38 42 45 46 53 55 58 59 60 61 62 b 64 0 0 0 1 5 6 7 8 9 10 11 12 13 14 16 20 23 30 35 38 42 45 46 53 55 58 59 60 61 62 # 31202 xor c a 64 0 0 0 1 5 6 7 8 9 10 11 12 13 14 16 20 23 30 35 38 42 45 46 53 55 58 59 60 61 62 b 64 1 0 f # 31203 xor c a 64 0 0 4 6 8 9 11 12 15 17 19 22 23 24 25 27 28 31 32 33 35 39 40 41 42 43 44 46 48 49 56 57 59 61 62 b 64 0 0 4 6 8 9 11 12 15 17 19 22 23 24 25 27 28 31 32 33 35 39 40 41 42 43 44 46 48 49 56 57 59 61 62 # 31204 xor c a 64 0 0 4 6 8 9 11 12 15 17 19 22 23 24 25 27 28 31 32 33 35 39 40 41 42 43 44 46 48 49 56 57 59 61 62 b 64 1 0 0 13 14 16 18 22 24 29 33 34 35 37 42 43 48 50 53 54 57 58 59 60 # 31205 xor c a 64 0 0 e b 64 0 0 e # 31206 xor c a 64 0 0 e b 64 1 1 e # 31207 xor c a 64 0 0 e b 64 0 0 e # 31208 xor c a 64 0 0 e b 64 1 1 f # 31209 xor c a 64 0 0 e b 64 0 0 e # 31210 xor c a 64 0 0 e b 64 1 1 0 2 6 8 12 14 15 16 17 18 20 21 22 24 27 28 29 30 31 32 33 34 37 38 39 41 45 46 48 49 52 54 56 57 60 63 # 31211 xor c a 64 0 0 f b 64 0 0 f # 31212 xor c a 64 0 0 f b 64 1 1 e # 31213 xor c a 64 0 0 f b 64 0 0 f # 31214 xor c a 64 0 0 f b 64 1 1 f # 31215 xor c a 64 0 0 f b 64 0 0 f # 31216 xor c a 64 0 0 f b 64 1 1 2 4 5 8 9 12 17 18 21 22 23 24 25 29 32 34 35 36 39 41 42 43 47 50 51 53 54 55 56 59 60 61 63 # 31217 xor c a 64 0 0 0 2 3 4 6 8 9 13 14 15 17 20 25 28 29 31 34 36 38 39 41 42 44 45 47 48 49 51 52 53 56 57 58 59 60 b 64 0 0 0 2 3 4 6 8 9 13 14 15 17 20 25 28 29 31 34 36 38 39 41 42 44 45 47 48 49 51 52 53 56 57 58 59 60 # 31218 xor c a 64 0 0 0 2 3 4 6 8 9 13 14 15 17 20 25 28 29 31 34 36 38 39 41 42 44 45 47 48 49 51 52 53 56 57 58 59 60 b 64 1 1 e # 31219 xor c a 64 0 0 0 2 3 4 7 13 17 20 22 23 25 27 29 33 35 37 38 39 43 47 51 52 54 59 b 64 0 0 0 2 3 4 7 13 17 20 22 23 25 27 29 33 35 37 38 39 43 47 51 52 54 59 # 31220 xor c a 64 0 0 0 2 3 4 7 13 17 20 22 23 25 27 29 33 35 37 38 39 43 47 51 52 54 59 b 64 1 1 f # 31221 xor c a 64 0 0 3 6 8 12 14 15 16 18 19 21 23 24 28 29 30 36 38 39 40 42 44 45 47 50 51 53 57 60 62 63 b 64 0 0 3 6 8 12 14 15 16 18 19 21 23 24 28 29 30 36 38 39 40 42 44 45 47 50 51 53 57 60 62 63 # 31222 xor c a 64 0 0 3 6 8 12 14 15 16 18 19 21 23 24 28 29 30 36 38 39 40 42 44 45 47 50 51 53 57 60 62 63 b 64 1 1 4 6 7 8 9 12 13 17 18 20 22 26 29 31 33 39 45 48 50 51 52 53 56 58 61 63 # 31223 xor c a 64 0 1 e b 64 0 1 e # 31224 xor c a 64 0 1 e b 64 0 0 e # 31225 xor c a 64 0 1 e b 64 0 1 e # 31226 xor c a 64 0 1 e b 64 0 0 f # 31227 xor c a 64 0 1 e b 64 0 1 e # 31228 xor c a 64 0 1 e b 64 0 0 0 1 3 4 6 8 13 14 15 17 18 21 22 25 26 28 36 39 40 41 44 45 48 49 50 52 53 54 56 57 58 61 62 # 31229 xor c a 64 0 1 f b 64 0 1 f # 31230 xor c a 64 0 1 f b 64 0 0 e # 31231 xor c a 64 0 1 f b 64 0 1 f # 31232 xor c a 64 0 1 f b 64 0 0 f # 31233 xor c a 64 0 1 f b 64 0 1 f # 31234 xor c a 64 0 1 f b 64 0 0 2 4 7 9 12 14 17 18 20 22 26 29 30 31 33 36 37 40 41 46 47 48 49 51 53 58 59 61 62 63 # 31235 xor c a 64 0 1 0 3 5 6 10 11 12 13 15 17 19 20 21 24 30 31 32 34 36 37 43 44 45 46 52 55 56 57 59 60 62 63 b 64 0 1 0 3 5 6 10 11 12 13 15 17 19 20 21 24 30 31 32 34 36 37 43 44 45 46 52 55 56 57 59 60 62 63 # 31236 xor c a 64 0 1 0 3 5 6 10 11 12 13 15 17 19 20 21 24 30 31 32 34 36 37 43 44 45 46 52 55 56 57 59 60 62 63 b 64 0 0 e # 31237 xor c a 64 0 1 1 2 6 7 8 10 11 12 16 18 19 20 22 23 24 25 26 27 29 30 31 33 35 38 39 42 44 45 46 47 49 52 55 57 58 60 61 b 64 0 1 1 2 6 7 8 10 11 12 16 18 19 20 22 23 24 25 26 27 29 30 31 33 35 38 39 42 44 45 46 47 49 52 55 57 58 60 61 # 31238 xor c a 64 0 1 1 2 6 7 8 10 11 12 16 18 19 20 22 23 24 25 26 27 29 30 31 33 35 38 39 42 44 45 46 47 49 52 55 57 58 60 61 b 64 0 0 f # 31239 xor c a 64 0 1 3 4 5 6 10 13 15 17 20 21 24 26 29 30 31 33 36 40 42 44 48 49 50 51 56 57 58 60 62 b 64 0 1 3 4 5 6 10 13 15 17 20 21 24 26 29 30 31 33 36 40 42 44 48 49 50 51 56 57 58 60 62 # 31240 xor c a 64 0 1 3 4 5 6 10 13 15 17 20 21 24 26 29 30 31 33 36 40 42 44 48 49 50 51 56 57 58 60 62 b 64 0 0 2 4 6 9 10 13 14 16 17 26 28 29 30 33 34 35 36 37 40 42 43 45 47 48 52 53 54 56 57 58 59 61 62 63 # 31241 xor c a 64 0 1 e b 64 0 1 e # 31242 xor c a 64 0 1 e b 64 0 1 e # 31243 xor c a 64 0 1 e b 64 0 1 e # 31244 xor c a 64 0 1 e b 64 0 1 f # 31245 xor c a 64 0 1 e b 64 0 1 e # 31246 xor c a 64 0 1 e b 64 0 1 0 1 2 3 11 14 16 17 18 19 20 21 23 27 30 34 35 36 38 42 43 44 45 46 47 48 49 50 55 56 57 58 61 # 31247 xor c a 64 0 1 f b 64 0 1 f # 31248 xor c a 64 0 1 f b 64 0 1 e # 31249 xor c a 64 0 1 f b 64 0 1 f # 31250 xor c a 64 0 1 f b 64 0 1 f # 31251 xor c a 64 0 1 f b 64 0 1 f # 31252 xor c a 64 0 1 f b 64 0 1 3 4 10 12 13 14 15 16 17 20 23 26 28 30 32 35 38 39 40 41 43 44 47 48 49 50 51 54 57 58 61 62 # 31253 xor c a 64 0 1 1 2 3 5 6 8 9 10 11 14 17 20 21 22 24 25 26 27 28 29 32 34 37 40 43 44 45 48 50 51 53 56 59 60 62 63 b 64 0 1 1 2 3 5 6 8 9 10 11 14 17 20 21 22 24 25 26 27 28 29 32 34 37 40 43 44 45 48 50 51 53 56 59 60 62 63 # 31254 xor c a 64 0 1 1 2 3 5 6 8 9 10 11 14 17 20 21 22 24 25 26 27 28 29 32 34 37 40 43 44 45 48 50 51 53 56 59 60 62 63 b 64 0 1 e # 31255 xor c a 64 0 1 0 1 2 3 4 8 11 13 17 18 19 20 22 28 35 36 37 39 41 42 43 44 45 46 47 48 49 50 51 53 55 56 59 60 63 b 64 0 1 0 1 2 3 4 8 11 13 17 18 19 20 22 28 35 36 37 39 41 42 43 44 45 46 47 48 49 50 51 53 55 56 59 60 63 # 31256 xor c a 64 0 1 0 1 2 3 4 8 11 13 17 18 19 20 22 28 35 36 37 39 41 42 43 44 45 46 47 48 49 50 51 53 55 56 59 60 63 b 64 0 1 f # 31257 xor c a 64 0 1 0 1 2 7 9 12 15 17 18 19 20 21 23 25 29 31 35 36 37 38 40 43 44 45 46 48 50 55 57 63 b 64 0 1 0 1 2 7 9 12 15 17 18 19 20 21 23 25 29 31 35 36 37 38 40 43 44 45 46 48 50 55 57 63 # 31258 xor c a 64 0 1 0 1 2 7 9 12 15 17 18 19 20 21 23 25 29 31 35 36 37 38 40 43 44 45 46 48 50 55 57 63 b 64 0 1 0 1 2 4 5 6 8 11 12 13 14 15 17 19 22 23 27 28 29 30 32 33 34 37 38 40 43 46 47 49 50 51 53 55 56 57 59 # 31259 xor c a 64 0 1 e b 64 0 1 e # 31260 xor c a 64 0 1 e b 64 1 0 e # 31261 xor c a 64 0 1 e b 64 0 1 e # 31262 xor c a 64 0 1 e b 64 1 0 f # 31263 xor c a 64 0 1 e b 64 0 1 e # 31264 xor c a 64 0 1 e b 64 1 0 0 2 4 5 6 7 8 10 13 14 15 16 17 21 22 24 28 31 32 35 36 38 39 41 43 46 48 54 55 56 59 60 61 # 31265 xor c a 64 0 1 f b 64 0 1 f # 31266 xor c a 64 0 1 f b 64 1 0 e # 31267 xor c a 64 0 1 f b 64 0 1 f # 31268 xor c a 64 0 1 f b 64 1 0 f # 31269 xor c a 64 0 1 f b 64 0 1 f # 31270 xor c a 64 0 1 f b 64 1 0 0 1 3 4 5 6 8 17 18 19 21 22 25 27 28 29 31 33 34 36 37 38 40 42 44 46 49 50 51 52 53 56 61 63 # 31271 xor c a 64 0 1 1 4 6 7 8 12 14 15 17 18 21 25 26 27 29 31 32 33 35 36 37 39 41 44 45 48 49 52 53 56 61 b 64 0 1 1 4 6 7 8 12 14 15 17 18 21 25 26 27 29 31 32 33 35 36 37 39 41 44 45 48 49 52 53 56 61 # 31272 xor c a 64 0 1 1 4 6 7 8 12 14 15 17 18 21 25 26 27 29 31 32 33 35 36 37 39 41 44 45 48 49 52 53 56 61 b 64 1 0 e # 31273 xor c a 64 0 1 2 7 17 20 21 22 23 26 28 30 32 33 34 40 42 44 49 50 52 53 54 57 58 62 63 b 64 0 1 2 7 17 20 21 22 23 26 28 30 32 33 34 40 42 44 49 50 52 53 54 57 58 62 63 # 31274 xor c a 64 0 1 2 7 17 20 21 22 23 26 28 30 32 33 34 40 42 44 49 50 52 53 54 57 58 62 63 b 64 1 0 f # 31275 xor c a 64 0 1 1 4 6 7 8 9 10 11 12 22 23 26 27 28 29 30 33 34 37 44 45 46 50 51 52 54 56 57 58 59 61 63 b 64 0 1 1 4 6 7 8 9 10 11 12 22 23 26 27 28 29 30 33 34 37 44 45 46 50 51 52 54 56 57 58 59 61 63 # 31276 xor c a 64 0 1 1 4 6 7 8 9 10 11 12 22 23 26 27 28 29 30 33 34 37 44 45 46 50 51 52 54 56 57 58 59 61 63 b 64 1 0 0 1 4 5 6 8 10 11 14 15 16 17 18 22 25 27 30 36 39 42 43 44 45 50 51 52 53 54 55 58 59 60 # 31277 xor c a 64 0 1 e b 64 0 1 e # 31278 xor c a 64 0 1 e b 64 1 1 e # 31279 xor c a 64 0 1 e b 64 0 1 e # 31280 xor c a 64 0 1 e b 64 1 1 f # 31281 xor c a 64 0 1 e b 64 0 1 e # 31282 xor c a 64 0 1 e b 64 1 1 0 1 3 4 5 6 11 13 15 16 19 22 23 24 26 28 29 30 31 32 35 40 43 45 46 50 51 52 53 58 61 62 63 # 31283 xor c a 64 0 1 f b 64 0 1 f # 31284 xor c a 64 0 1 f b 64 1 1 e # 31285 xor c a 64 0 1 f b 64 0 1 f # 31286 xor c a 64 0 1 f b 64 1 1 f # 31287 xor c a 64 0 1 f b 64 0 1 f # 31288 xor c a 64 0 1 f b 64 1 1 0 2 4 5 6 11 14 15 17 20 21 22 23 25 32 34 38 39 40 43 44 46 56 58 60 62 # 31289 xor c a 64 0 1 0 1 2 3 5 6 7 10 12 13 16 17 21 22 25 26 27 29 31 34 35 37 38 39 40 41 43 45 46 48 50 51 57 60 61 b 64 0 1 0 1 2 3 5 6 7 10 12 13 16 17 21 22 25 26 27 29 31 34 35 37 38 39 40 41 43 45 46 48 50 51 57 60 61 # 31290 xor c a 64 0 1 0 1 2 3 5 6 7 10 12 13 16 17 21 22 25 26 27 29 31 34 35 37 38 39 40 41 43 45 46 48 50 51 57 60 61 b 64 1 1 e # 31291 xor c a 64 0 1 2 3 5 6 10 11 12 13 15 18 19 20 21 23 24 25 27 28 29 30 33 35 36 38 41 44 45 48 49 51 52 54 55 58 59 61 63 b 64 0 1 2 3 5 6 10 11 12 13 15 18 19 20 21 23 24 25 27 28 29 30 33 35 36 38 41 44 45 48 49 51 52 54 55 58 59 61 63 # 31292 xor c a 64 0 1 2 3 5 6 10 11 12 13 15 18 19 20 21 23 24 25 27 28 29 30 33 35 36 38 41 44 45 48 49 51 52 54 55 58 59 61 63 b 64 1 1 f # 31293 xor c a 64 0 1 0 4 6 9 10 12 13 14 15 16 19 20 22 23 25 26 27 32 33 34 38 39 46 48 52 58 59 60 62 b 64 0 1 0 4 6 9 10 12 13 14 15 16 19 20 22 23 25 26 27 32 33 34 38 39 46 48 52 58 59 60 62 # 31294 xor c a 64 0 1 0 4 6 9 10 12 13 14 15 16 19 20 22 23 25 26 27 32 33 34 38 39 46 48 52 58 59 60 62 b 64 1 1 1 2 3 5 6 7 10 11 12 13 15 17 21 27 28 32 38 40 41 43 44 46 49 50 52 54 55 56 58 59 # 31295 xor c a 64 1 0 e b 64 1 0 e # 31296 xor c a 64 1 0 e b 64 0 0 e # 31297 xor c a 64 1 0 e b 64 1 0 e # 31298 xor c a 64 1 0 e b 64 0 0 f # 31299 xor c a 64 1 0 e b 64 1 0 e # 31300 xor c a 64 1 0 e b 64 0 0 0 1 2 5 6 8 9 11 13 15 16 17 19 22 23 25 26 27 29 32 35 36 39 43 45 48 49 51 52 53 54 56 57 59 60 61 # 31301 xor c a 64 1 0 f b 64 1 0 f # 31302 xor c a 64 1 0 f b 64 0 0 e # 31303 xor c a 64 1 0 f b 64 1 0 f # 31304 xor c a 64 1 0 f b 64 0 0 f # 31305 xor c a 64 1 0 f b 64 1 0 f # 31306 xor c a 64 1 0 f b 64 0 0 1 4 5 6 10 11 15 18 21 22 24 30 34 37 44 48 54 57 58 59 61 63 # 31307 xor c a 64 1 0 1 2 4 6 7 8 11 12 13 15 17 19 20 21 24 25 28 31 36 39 40 41 42 44 45 48 51 58 60 b 64 1 0 1 2 4 6 7 8 11 12 13 15 17 19 20 21 24 25 28 31 36 39 40 41 42 44 45 48 51 58 60 # 31308 xor c a 64 1 0 1 2 4 6 7 8 11 12 13 15 17 19 20 21 24 25 28 31 36 39 40 41 42 44 45 48 51 58 60 b 64 0 0 e # 31309 xor c a 64 1 0 1 2 5 6 7 8 9 12 13 14 17 19 23 24 27 31 39 40 41 43 44 47 50 51 52 53 54 55 57 58 59 62 63 b 64 1 0 1 2 5 6 7 8 9 12 13 14 17 19 23 24 27 31 39 40 41 43 44 47 50 51 52 53 54 55 57 58 59 62 63 # 31310 xor c a 64 1 0 1 2 5 6 7 8 9 12 13 14 17 19 23 24 27 31 39 40 41 43 44 47 50 51 52 53 54 55 57 58 59 62 63 b 64 0 0 f # 31311 xor c a 64 1 0 0 1 3 5 6 8 10 12 15 16 18 19 22 25 27 29 30 31 32 33 34 36 37 42 44 48 49 51 53 55 56 57 58 59 60 61 62 63 b 64 1 0 0 1 3 5 6 8 10 12 15 16 18 19 22 25 27 29 30 31 32 33 34 36 37 42 44 48 49 51 53 55 56 57 58 59 60 61 62 63 # 31312 xor c a 64 1 0 0 1 3 5 6 8 10 12 15 16 18 19 22 25 27 29 30 31 32 33 34 36 37 42 44 48 49 51 53 55 56 57 58 59 60 61 62 63 b 64 0 0 0 1 2 4 6 8 9 10 11 13 16 21 30 31 33 38 43 48 50 54 55 56 57 58 61 # 31313 xor c a 64 1 0 e b 64 1 0 e # 31314 xor c a 64 1 0 e b 64 0 1 e # 31315 xor c a 64 1 0 e b 64 1 0 e # 31316 xor c a 64 1 0 e b 64 0 1 f # 31317 xor c a 64 1 0 e b 64 1 0 e # 31318 xor c a 64 1 0 e b 64 0 1 0 1 2 6 7 8 10 12 13 14 15 17 19 21 24 26 29 30 32 34 35 36 37 38 39 43 46 47 49 50 51 52 55 56 61 62 63 # 31319 xor c a 64 1 0 f b 64 1 0 f # 31320 xor c a 64 1 0 f b 64 0 1 e # 31321 xor c a 64 1 0 f b 64 1 0 f # 31322 xor c a 64 1 0 f b 64 0 1 f # 31323 xor c a 64 1 0 f b 64 1 0 f # 31324 xor c a 64 1 0 f b 64 0 1 1 2 4 5 7 9 10 11 13 14 15 16 18 19 20 22 24 25 26 27 28 30 33 34 35 36 38 39 41 42 43 44 46 48 49 51 53 56 57 59 63 # 31325 xor c a 64 1 0 2 3 4 5 6 8 9 14 18 19 27 28 29 31 34 36 37 38 39 40 43 44 51 54 55 56 59 60 61 62 b 64 1 0 2 3 4 5 6 8 9 14 18 19 27 28 29 31 34 36 37 38 39 40 43 44 51 54 55 56 59 60 61 62 # 31326 xor c a 64 1 0 2 3 4 5 6 8 9 14 18 19 27 28 29 31 34 36 37 38 39 40 43 44 51 54 55 56 59 60 61 62 b 64 0 1 e # 31327 xor c a 64 1 0 1 4 6 13 15 16 17 18 21 24 25 26 27 28 29 31 33 36 38 42 43 44 46 47 48 49 53 61 63 b 64 1 0 1 4 6 13 15 16 17 18 21 24 25 26 27 28 29 31 33 36 38 42 43 44 46 47 48 49 53 61 63 # 31328 xor c a 64 1 0 1 4 6 13 15 16 17 18 21 24 25 26 27 28 29 31 33 36 38 42 43 44 46 47 48 49 53 61 63 b 64 0 1 f # 31329 xor c a 64 1 0 2 4 5 6 8 9 11 12 14 15 16 21 22 23 26 31 32 36 38 39 40 41 42 43 45 46 50 51 52 53 58 60 61 b 64 1 0 2 4 5 6 8 9 11 12 14 15 16 21 22 23 26 31 32 36 38 39 40 41 42 43 45 46 50 51 52 53 58 60 61 # 31330 xor c a 64 1 0 2 4 5 6 8 9 11 12 14 15 16 21 22 23 26 31 32 36 38 39 40 41 42 43 45 46 50 51 52 53 58 60 61 b 64 0 1 2 4 5 7 8 10 11 13 15 16 17 19 20 21 23 25 28 29 30 33 35 37 38 40 46 55 57 61 62 63 # 31331 xor c a 64 1 0 e b 64 1 0 e # 31332 xor c a 64 1 0 e b 64 1 0 e # 31333 xor c a 64 1 0 e b 64 1 0 e # 31334 xor c a 64 1 0 e b 64 1 0 f # 31335 xor c a 64 1 0 e b 64 1 0 e # 31336 xor c a 64 1 0 e b 64 1 0 0 2 4 7 8 9 15 16 17 18 23 24 29 33 37 40 42 43 44 46 48 49 50 52 53 54 55 59 61 # 31337 xor c a 64 1 0 f b 64 1 0 f # 31338 xor c a 64 1 0 f b 64 1 0 e # 31339 xor c a 64 1 0 f b 64 1 0 f # 31340 xor c a 64 1 0 f b 64 1 0 f # 31341 xor c a 64 1 0 f b 64 1 0 f # 31342 xor c a 64 1 0 f b 64 1 0 0 1 2 4 5 6 12 14 15 16 18 19 21 22 23 26 30 31 32 33 35 36 37 41 44 46 47 48 49 50 52 53 58 59 61 62 # 31343 xor c a 64 1 0 1 4 9 10 13 15 16 19 22 23 24 25 30 31 33 37 38 39 40 42 43 46 47 50 51 52 53 57 58 59 62 b 64 1 0 1 4 9 10 13 15 16 19 22 23 24 25 30 31 33 37 38 39 40 42 43 46 47 50 51 52 53 57 58 59 62 # 31344 xor c a 64 1 0 1 4 9 10 13 15 16 19 22 23 24 25 30 31 33 37 38 39 40 42 43 46 47 50 51 52 53 57 58 59 62 b 64 1 0 e # 31345 xor c a 64 1 0 2 3 4 6 7 8 9 10 12 13 16 17 19 20 21 24 25 27 31 34 36 37 39 41 42 44 46 47 51 52 53 55 56 58 60 b 64 1 0 2 3 4 6 7 8 9 10 12 13 16 17 19 20 21 24 25 27 31 34 36 37 39 41 42 44 46 47 51 52 53 55 56 58 60 # 31346 xor c a 64 1 0 2 3 4 6 7 8 9 10 12 13 16 17 19 20 21 24 25 27 31 34 36 37 39 41 42 44 46 47 51 52 53 55 56 58 60 b 64 1 0 f # 31347 xor c a 64 1 0 2 4 5 6 8 9 10 11 13 17 20 21 22 25 26 27 28 29 33 34 36 37 38 39 40 41 42 43 44 47 49 51 52 55 56 58 59 b 64 1 0 2 4 5 6 8 9 10 11 13 17 20 21 22 25 26 27 28 29 33 34 36 37 38 39 40 41 42 43 44 47 49 51 52 55 56 58 59 # 31348 xor c a 64 1 0 2 4 5 6 8 9 10 11 13 17 20 21 22 25 26 27 28 29 33 34 36 37 38 39 40 41 42 43 44 47 49 51 52 55 56 58 59 b 64 1 0 2 4 7 9 10 11 14 19 21 22 25 29 30 33 34 37 38 40 41 44 46 48 54 58 61 62 # 31349 xor c a 64 1 0 e b 64 1 0 e # 31350 xor c a 64 1 0 e b 64 1 1 e # 31351 xor c a 64 1 0 e b 64 1 0 e # 31352 xor c a 64 1 0 e b 64 1 1 f # 31353 xor c a 64 1 0 e b 64 1 0 e # 31354 xor c a 64 1 0 e b 64 1 1 0 1 2 3 4 5 7 9 10 13 14 16 17 22 25 26 27 28 29 32 33 36 37 40 42 44 46 47 51 53 55 56 58 61 62 63 # 31355 xor c a 64 1 0 f b 64 1 0 f # 31356 xor c a 64 1 0 f b 64 1 1 e # 31357 xor c a 64 1 0 f b 64 1 0 f # 31358 xor c a 64 1 0 f b 64 1 1 f # 31359 xor c a 64 1 0 f b 64 1 0 f # 31360 xor c a 64 1 0 f b 64 1 1 0 3 5 6 8 9 10 11 13 14 15 16 21 23 24 32 33 34 37 38 40 41 43 44 46 47 48 51 52 53 54 55 56 60 63 # 31361 xor c a 64 1 0 3 9 13 14 15 18 20 21 23 28 29 33 34 35 38 39 40 50 53 55 57 61 62 63 b 64 1 0 3 9 13 14 15 18 20 21 23 28 29 33 34 35 38 39 40 50 53 55 57 61 62 63 # 31362 xor c a 64 1 0 3 9 13 14 15 18 20 21 23 28 29 33 34 35 38 39 40 50 53 55 57 61 62 63 b 64 1 1 e # 31363 xor c a 64 1 0 0 1 4 7 8 11 12 16 18 19 22 23 24 25 28 29 32 33 34 35 37 38 39 41 42 48 51 53 54 56 57 58 59 60 63 b 64 1 0 0 1 4 7 8 11 12 16 18 19 22 23 24 25 28 29 32 33 34 35 37 38 39 41 42 48 51 53 54 56 57 58 59 60 63 # 31364 xor c a 64 1 0 0 1 4 7 8 11 12 16 18 19 22 23 24 25 28 29 32 33 34 35 37 38 39 41 42 48 51 53 54 56 57 58 59 60 63 b 64 1 1 f # 31365 xor c a 64 1 0 0 1 4 10 11 12 14 19 26 28 30 31 34 36 38 39 42 44 45 46 48 53 55 58 59 60 61 62 63 b 64 1 0 0 1 4 10 11 12 14 19 26 28 30 31 34 36 38 39 42 44 45 46 48 53 55 58 59 60 61 62 63 # 31366 xor c a 64 1 0 0 1 4 10 11 12 14 19 26 28 30 31 34 36 38 39 42 44 45 46 48 53 55 58 59 60 61 62 63 b 64 1 1 1 4 5 9 10 12 15 16 17 18 22 23 24 25 26 27 28 30 33 34 36 37 38 40 42 43 44 47 48 50 52 53 55 56 57 58 59 63 # 31367 xor c a 64 1 1 e b 64 1 1 e # 31368 xor c a 64 1 1 e b 64 0 0 e # 31369 xor c a 64 1 1 e b 64 1 1 e # 31370 xor c a 64 1 1 e b 64 0 0 f # 31371 xor c a 64 1 1 e b 64 1 1 e # 31372 xor c a 64 1 1 e b 64 0 0 2 5 6 9 10 12 14 15 16 17 19 20 21 22 23 24 25 26 30 31 32 33 35 36 39 40 43 44 46 47 50 53 55 59 60 # 31373 xor c a 64 1 1 f b 64 1 1 f # 31374 xor c a 64 1 1 f b 64 0 0 e # 31375 xor c a 64 1 1 f b 64 1 1 f # 31376 xor c a 64 1 1 f b 64 0 0 f # 31377 xor c a 64 1 1 f b 64 1 1 f # 31378 xor c a 64 1 1 f b 64 0 0 1 3 4 5 6 7 8 10 11 13 15 18 19 20 22 25 29 30 36 39 40 42 46 47 49 50 54 55 58 59 60 61 # 31379 xor c a 64 1 1 0 1 2 3 6 7 8 9 12 18 20 21 26 28 30 31 32 33 34 37 40 42 43 44 47 53 56 58 59 60 62 63 b 64 1 1 0 1 2 3 6 7 8 9 12 18 20 21 26 28 30 31 32 33 34 37 40 42 43 44 47 53 56 58 59 60 62 63 # 31380 xor c a 64 1 1 0 1 2 3 6 7 8 9 12 18 20 21 26 28 30 31 32 33 34 37 40 42 43 44 47 53 56 58 59 60 62 63 b 64 0 0 e # 31381 xor c a 64 1 1 1 2 4 6 7 8 12 13 16 17 20 21 22 23 26 28 29 30 32 33 34 35 39 40 41 43 44 45 46 47 48 50 51 53 55 60 63 b 64 1 1 1 2 4 6 7 8 12 13 16 17 20 21 22 23 26 28 29 30 32 33 34 35 39 40 41 43 44 45 46 47 48 50 51 53 55 60 63 # 31382 xor c a 64 1 1 1 2 4 6 7 8 12 13 16 17 20 21 22 23 26 28 29 30 32 33 34 35 39 40 41 43 44 45 46 47 48 50 51 53 55 60 63 b 64 0 0 f # 31383 xor c a 64 1 1 4 5 7 8 9 11 12 15 16 18 25 26 28 33 34 36 38 39 44 45 47 49 51 53 55 56 57 59 62 63 b 64 1 1 4 5 7 8 9 11 12 15 16 18 25 26 28 33 34 36 38 39 44 45 47 49 51 53 55 56 57 59 62 63 # 31384 xor c a 64 1 1 4 5 7 8 9 11 12 15 16 18 25 26 28 33 34 36 38 39 44 45 47 49 51 53 55 56 57 59 62 63 b 64 0 0 1 2 3 4 5 6 13 15 16 17 19 20 21 22 23 24 25 27 30 31 33 34 36 40 41 42 43 44 46 52 54 55 58 59 60 # 31385 xor c a 64 1 1 e b 64 1 1 e # 31386 xor c a 64 1 1 e b 64 0 1 e # 31387 xor c a 64 1 1 e b 64 1 1 e # 31388 xor c a 64 1 1 e b 64 0 1 f # 31389 xor c a 64 1 1 e b 64 1 1 e # 31390 xor c a 64 1 1 e b 64 0 1 3 4 5 8 9 11 17 18 20 21 25 26 31 32 33 34 36 37 38 39 40 42 44 45 46 48 50 51 53 54 56 57 58 # 31391 xor c a 64 1 1 f b 64 1 1 f # 31392 xor c a 64 1 1 f b 64 0 1 e # 31393 xor c a 64 1 1 f b 64 1 1 f # 31394 xor c a 64 1 1 f b 64 0 1 f # 31395 xor c a 64 1 1 f b 64 1 1 f # 31396 xor c a 64 1 1 f b 64 0 1 1 2 4 5 7 9 11 12 13 15 17 19 20 23 25 27 29 32 33 34 35 36 37 38 39 40 41 42 43 44 46 52 57 59 # 31397 xor c a 64 1 1 1 2 4 5 7 8 10 11 13 15 16 18 19 20 22 24 28 30 33 37 40 42 48 50 51 53 58 59 60 61 b 64 1 1 1 2 4 5 7 8 10 11 13 15 16 18 19 20 22 24 28 30 33 37 40 42 48 50 51 53 58 59 60 61 # 31398 xor c a 64 1 1 1 2 4 5 7 8 10 11 13 15 16 18 19 20 22 24 28 30 33 37 40 42 48 50 51 53 58 59 60 61 b 64 0 1 e # 31399 xor c a 64 1 1 1 2 3 8 10 18 19 23 24 26 27 29 31 32 34 36 37 38 39 41 42 43 44 46 48 49 53 55 57 58 59 60 61 63 b 64 1 1 1 2 3 8 10 18 19 23 24 26 27 29 31 32 34 36 37 38 39 41 42 43 44 46 48 49 53 55 57 58 59 60 61 63 # 31400 xor c a 64 1 1 1 2 3 8 10 18 19 23 24 26 27 29 31 32 34 36 37 38 39 41 42 43 44 46 48 49 53 55 57 58 59 60 61 63 b 64 0 1 f # 31401 xor c a 64 1 1 2 3 5 6 9 14 18 21 23 24 26 27 30 33 35 39 40 44 47 48 53 61 62 63 b 64 1 1 2 3 5 6 9 14 18 21 23 24 26 27 30 33 35 39 40 44 47 48 53 61 62 63 # 31402 xor c a 64 1 1 2 3 5 6 9 14 18 21 23 24 26 27 30 33 35 39 40 44 47 48 53 61 62 63 b 64 0 1 0 2 4 5 7 9 10 16 17 18 19 20 23 27 30 32 33 35 36 37 43 44 45 46 47 49 50 52 53 57 59 # 31403 xor c a 64 1 1 e b 64 1 1 e # 31404 xor c a 64 1 1 e b 64 1 0 e # 31405 xor c a 64 1 1 e b 64 1 1 e # 31406 xor c a 64 1 1 e b 64 1 0 f # 31407 xor c a 64 1 1 e b 64 1 1 e # 31408 xor c a 64 1 1 e b 64 1 0 1 2 3 7 8 9 10 11 13 14 15 22 23 26 28 30 32 33 43 44 45 46 49 50 51 53 54 55 57 61 62 # 31409 xor c a 64 1 1 f b 64 1 1 f # 31410 xor c a 64 1 1 f b 64 1 0 e # 31411 xor c a 64 1 1 f b 64 1 1 f # 31412 xor c a 64 1 1 f b 64 1 0 f # 31413 xor c a 64 1 1 f b 64 1 1 f # 31414 xor c a 64 1 1 f b 64 1 0 0 1 2 3 7 14 15 17 18 19 20 21 24 25 26 28 29 32 37 38 39 43 44 46 47 49 50 52 54 55 56 57 58 59 60 # 31415 xor c a 64 1 1 0 1 2 5 7 9 11 14 15 16 17 19 20 23 26 27 28 29 31 32 34 36 38 40 44 46 47 48 51 53 54 55 57 58 60 b 64 1 1 0 1 2 5 7 9 11 14 15 16 17 19 20 23 26 27 28 29 31 32 34 36 38 40 44 46 47 48 51 53 54 55 57 58 60 # 31416 xor c a 64 1 1 0 1 2 5 7 9 11 14 15 16 17 19 20 23 26 27 28 29 31 32 34 36 38 40 44 46 47 48 51 53 54 55 57 58 60 b 64 1 0 e # 31417 xor c a 64 1 1 2 5 6 9 10 11 13 14 16 23 24 25 27 31 32 33 36 37 38 39 40 42 45 48 49 50 52 53 54 55 56 58 60 61 62 b 64 1 1 2 5 6 9 10 11 13 14 16 23 24 25 27 31 32 33 36 37 38 39 40 42 45 48 49 50 52 53 54 55 56 58 60 61 62 # 31418 xor c a 64 1 1 2 5 6 9 10 11 13 14 16 23 24 25 27 31 32 33 36 37 38 39 40 42 45 48 49 50 52 53 54 55 56 58 60 61 62 b 64 1 0 f # 31419 xor c a 64 1 1 0 2 3 6 8 9 13 16 18 19 21 22 24 27 32 33 35 37 40 41 42 44 46 51 53 54 58 59 60 63 b 64 1 1 0 2 3 6 8 9 13 16 18 19 21 22 24 27 32 33 35 37 40 41 42 44 46 51 53 54 58 59 60 63 # 31420 xor c a 64 1 1 0 2 3 6 8 9 13 16 18 19 21 22 24 27 32 33 35 37 40 41 42 44 46 51 53 54 58 59 60 63 b 64 1 0 1 2 3 4 5 8 9 10 14 15 16 23 24 26 27 28 30 31 32 34 35 37 40 41 42 45 46 48 50 52 54 55 56 57 58 60 61 63 # 31421 xor c a 64 1 1 e b 64 1 1 e # 31422 xor c a 64 1 1 e b 64 1 1 e # 31423 xor c a 64 1 1 e b 64 1 1 e # 31424 xor c a 64 1 1 e b 64 1 1 f # 31425 xor c a 64 1 1 e b 64 1 1 e # 31426 xor c a 64 1 1 e b 64 1 1 2 3 5 6 8 9 14 16 17 18 19 20 21 22 23 25 28 29 31 32 34 37 41 42 43 45 52 58 # 31427 xor c a 64 1 1 f b 64 1 1 f # 31428 xor c a 64 1 1 f b 64 1 1 e # 31429 xor c a 64 1 1 f b 64 1 1 f # 31430 xor c a 64 1 1 f b 64 1 1 f # 31431 xor c a 64 1 1 f b 64 1 1 f # 31432 xor c a 64 1 1 f b 64 1 1 0 1 3 4 5 8 9 12 13 14 16 18 19 20 21 26 27 28 29 30 31 32 34 35 37 38 40 42 43 44 45 46 47 49 50 52 54 56 57 58 59 60 61 62 63 # 31433 xor c a 64 1 1 3 8 11 14 15 16 17 19 22 25 27 28 29 30 35 36 37 41 43 44 45 46 47 48 50 51 52 53 56 59 61 63 b 64 1 1 3 8 11 14 15 16 17 19 22 25 27 28 29 30 35 36 37 41 43 44 45 46 47 48 50 51 52 53 56 59 61 63 # 31434 xor c a 64 1 1 3 8 11 14 15 16 17 19 22 25 27 28 29 30 35 36 37 41 43 44 45 46 47 48 50 51 52 53 56 59 61 63 b 64 1 1 e # 31435 xor c a 64 1 1 1 2 3 4 9 12 16 17 19 20 21 22 27 30 33 35 37 40 42 44 45 46 48 51 59 60 61 b 64 1 1 1 2 3 4 9 12 16 17 19 20 21 22 27 30 33 35 37 40 42 44 45 46 48 51 59 60 61 # 31436 xor c a 64 1 1 1 2 3 4 9 12 16 17 19 20 21 22 27 30 33 35 37 40 42 44 45 46 48 51 59 60 61 b 64 1 1 f # 31437 xor c a 64 1 1 0 1 3 4 8 10 11 13 18 19 20 24 26 27 30 32 35 36 37 39 40 45 47 51 52 53 59 62 b 64 1 1 0 1 3 4 8 10 11 13 18 19 20 24 26 27 30 32 35 36 37 39 40 45 47 51 52 53 59 62 # 31438 xor c a 64 1 1 0 1 3 4 8 10 11 13 18 19 20 24 26 27 30 32 35 36 37 39 40 45 47 51 52 53 59 62 b 64 1 1 4 6 7 8 11 13 14 19 20 21 24 25 26 28 29 30 34 36 37 46 53 54 56 57 58 59 60 61 63 # 31439 xor c a 65 0 0 e b 65 0 0 e # 31440 xor c a 65 0 0 e b 65 0 0 e # 31441 xor c a 65 0 0 e b 65 0 0 e # 31442 xor c a 65 0 0 e b 65 0 0 f # 31443 xor c a 65 0 0 e b 65 0 0 e # 31444 xor c a 65 0 0 e b 65 0 0 0 1 3 4 7 8 9 12 14 16 18 21 23 26 28 29 31 32 34 35 36 37 38 39 40 43 44 45 47 50 52 56 58 59 61 62 # 31445 xor c a 65 0 0 f b 65 0 0 f # 31446 xor c a 65 0 0 f b 65 0 0 e # 31447 xor c a 65 0 0 f b 65 0 0 f # 31448 xor c a 65 0 0 f b 65 0 0 f # 31449 xor c a 65 0 0 f b 65 0 0 f # 31450 xor c a 65 0 0 f b 65 0 0 1 4 7 8 9 10 11 14 19 20 21 22 24 27 29 31 32 33 39 42 43 44 45 49 52 53 57 59 60 # 31451 xor c a 65 0 0 0 1 6 7 11 12 13 16 19 20 21 23 24 26 28 30 34 35 36 39 40 41 42 43 44 47 48 50 51 54 58 60 62 63 64 b 65 0 0 0 1 6 7 11 12 13 16 19 20 21 23 24 26 28 30 34 35 36 39 40 41 42 43 44 47 48 50 51 54 58 60 62 63 64 # 31452 xor c a 65 0 0 0 1 6 7 11 12 13 16 19 20 21 23 24 26 28 30 34 35 36 39 40 41 42 43 44 47 48 50 51 54 58 60 62 63 64 b 65 0 0 e # 31453 xor c a 65 0 0 1 3 6 9 10 11 12 13 18 19 20 21 24 30 31 32 34 36 37 45 46 47 48 49 51 52 53 57 58 60 61 63 b 65 0 0 1 3 6 9 10 11 12 13 18 19 20 21 24 30 31 32 34 36 37 45 46 47 48 49 51 52 53 57 58 60 61 63 # 31454 xor c a 65 0 0 1 3 6 9 10 11 12 13 18 19 20 21 24 30 31 32 34 36 37 45 46 47 48 49 51 52 53 57 58 60 61 63 b 65 0 0 f # 31455 xor c a 65 0 0 0 3 4 5 8 9 11 12 14 16 17 21 22 23 26 29 33 35 41 43 44 45 47 48 49 51 53 54 55 57 59 60 61 b 65 0 0 0 3 4 5 8 9 11 12 14 16 17 21 22 23 26 29 33 35 41 43 44 45 47 48 49 51 53 54 55 57 59 60 61 # 31456 xor c a 65 0 0 0 3 4 5 8 9 11 12 14 16 17 21 22 23 26 29 33 35 41 43 44 45 47 48 49 51 53 54 55 57 59 60 61 b 65 0 0 2 3 8 11 12 13 18 21 27 29 31 32 34 36 38 39 41 44 45 46 49 51 52 53 55 57 58 59 60 62 63 64 # 31457 xor c a 65 0 0 e b 65 0 0 e # 31458 xor c a 65 0 0 e b 65 0 1 e # 31459 xor c a 65 0 0 e b 65 0 0 e # 31460 xor c a 65 0 0 e b 65 0 1 f # 31461 xor c a 65 0 0 e b 65 0 0 e # 31462 xor c a 65 0 0 e b 65 0 1 0 2 3 4 5 7 9 10 14 16 17 18 19 21 22 24 25 26 29 32 35 37 38 41 42 43 47 50 53 54 57 58 59 64 # 31463 xor c a 65 0 0 f b 65 0 0 f # 31464 xor c a 65 0 0 f b 65 0 1 e # 31465 xor c a 65 0 0 f b 65 0 0 f # 31466 xor c a 65 0 0 f b 65 0 1 f # 31467 xor c a 65 0 0 f b 65 0 0 f # 31468 xor c a 65 0 0 f b 65 0 1 2 6 9 10 11 12 13 14 21 22 23 25 27 28 29 34 35 36 42 44 45 49 50 51 52 54 58 62 63 64 # 31469 xor c a 65 0 0 1 2 3 12 13 14 15 16 18 21 24 25 26 31 34 36 38 39 40 43 45 46 51 53 56 57 58 63 64 b 65 0 0 1 2 3 12 13 14 15 16 18 21 24 25 26 31 34 36 38 39 40 43 45 46 51 53 56 57 58 63 64 # 31470 xor c a 65 0 0 1 2 3 12 13 14 15 16 18 21 24 25 26 31 34 36 38 39 40 43 45 46 51 53 56 57 58 63 64 b 65 0 1 e # 31471 xor c a 65 0 0 2 5 7 8 9 11 12 16 18 19 22 25 26 27 29 30 32 34 38 43 44 45 47 48 49 50 54 57 59 60 61 63 b 65 0 0 2 5 7 8 9 11 12 16 18 19 22 25 26 27 29 30 32 34 38 43 44 45 47 48 49 50 54 57 59 60 61 63 # 31472 xor c a 65 0 0 2 5 7 8 9 11 12 16 18 19 22 25 26 27 29 30 32 34 38 43 44 45 47 48 49 50 54 57 59 60 61 63 b 65 0 1 f # 31473 xor c a 65 0 0 1 2 4 5 6 9 10 11 12 13 14 15 19 21 24 27 29 31 32 35 37 40 43 44 46 48 49 52 53 54 55 58 59 b 65 0 0 1 2 4 5 6 9 10 11 12 13 14 15 19 21 24 27 29 31 32 35 37 40 43 44 46 48 49 52 53 54 55 58 59 # 31474 xor c a 65 0 0 1 2 4 5 6 9 10 11 12 13 14 15 19 21 24 27 29 31 32 35 37 40 43 44 46 48 49 52 53 54 55 58 59 b 65 0 1 0 2 3 7 8 10 12 15 16 17 18 19 20 22 23 25 30 31 32 33 34 36 38 39 41 42 44 47 48 51 52 54 55 57 # 31475 xor c a 65 0 0 e b 65 0 0 e # 31476 xor c a 65 0 0 e b 65 1 0 e # 31477 xor c a 65 0 0 e b 65 0 0 e # 31478 xor c a 65 0 0 e b 65 1 0 f # 31479 xor c a 65 0 0 e b 65 0 0 e # 31480 xor c a 65 0 0 e b 65 1 0 5 6 8 12 13 17 18 19 20 21 23 25 27 32 34 37 38 41 42 44 45 46 48 49 51 52 53 57 59 64 # 31481 xor c a 65 0 0 f b 65 0 0 f # 31482 xor c a 65 0 0 f b 65 1 0 e # 31483 xor c a 65 0 0 f b 65 0 0 f # 31484 xor c a 65 0 0 f b 65 1 0 f # 31485 xor c a 65 0 0 f b 65 0 0 f # 31486 xor c a 65 0 0 f b 65 1 0 1 5 6 8 11 12 13 14 15 20 21 22 23 24 26 28 31 32 33 36 37 38 39 46 47 48 51 53 58 60 63 # 31487 xor c a 65 0 0 5 6 7 9 11 12 18 20 21 22 24 26 27 29 31 32 38 39 42 46 47 56 64 b 65 0 0 5 6 7 9 11 12 18 20 21 22 24 26 27 29 31 32 38 39 42 46 47 56 64 # 31488 xor c a 65 0 0 5 6 7 9 11 12 18 20 21 22 24 26 27 29 31 32 38 39 42 46 47 56 64 b 65 1 0 e # 31489 xor c a 65 0 0 0 3 7 14 15 16 20 22 24 29 33 35 40 41 42 44 45 46 47 50 51 52 53 57 58 59 61 62 63 64 b 65 0 0 0 3 7 14 15 16 20 22 24 29 33 35 40 41 42 44 45 46 47 50 51 52 53 57 58 59 61 62 63 64 # 31490 xor c a 65 0 0 0 3 7 14 15 16 20 22 24 29 33 35 40 41 42 44 45 46 47 50 51 52 53 57 58 59 61 62 63 64 b 65 1 0 f # 31491 xor c a 65 0 0 2 3 4 6 7 9 10 12 14 17 18 20 22 23 29 30 31 33 39 41 47 48 51 52 54 56 57 60 62 b 65 0 0 2 3 4 6 7 9 10 12 14 17 18 20 22 23 29 30 31 33 39 41 47 48 51 52 54 56 57 60 62 # 31492 xor c a 65 0 0 2 3 4 6 7 9 10 12 14 17 18 20 22 23 29 30 31 33 39 41 47 48 51 52 54 56 57 60 62 b 65 1 0 1 2 3 5 6 10 11 12 13 14 17 24 29 30 31 32 33 34 36 37 40 43 44 45 46 48 50 52 53 54 55 59 62 # 31493 xor c a 65 0 0 e b 65 0 0 e # 31494 xor c a 65 0 0 e b 65 1 1 e # 31495 xor c a 65 0 0 e b 65 0 0 e # 31496 xor c a 65 0 0 e b 65 1 1 f # 31497 xor c a 65 0 0 e b 65 0 0 e # 31498 xor c a 65 0 0 e b 65 1 1 0 4 5 8 11 14 17 20 21 22 23 25 28 30 32 33 34 35 36 39 40 42 43 44 49 52 55 56 59 60 63 # 31499 xor c a 65 0 0 f b 65 0 0 f # 31500 xor c a 65 0 0 f b 65 1 1 e # 31501 xor c a 65 0 0 f b 65 0 0 f # 31502 xor c a 65 0 0 f b 65 1 1 f # 31503 xor c a 65 0 0 f b 65 0 0 f # 31504 xor c a 65 0 0 f b 65 1 1 1 2 3 5 7 10 11 12 13 15 17 19 20 22 24 28 31 34 35 39 40 42 43 47 48 49 51 56 57 58 63 64 # 31505 xor c a 65 0 0 1 2 5 9 10 11 14 16 17 18 22 26 28 29 34 35 36 37 40 41 45 46 48 49 50 51 53 55 57 60 64 b 65 0 0 1 2 5 9 10 11 14 16 17 18 22 26 28 29 34 35 36 37 40 41 45 46 48 49 50 51 53 55 57 60 64 # 31506 xor c a 65 0 0 1 2 5 9 10 11 14 16 17 18 22 26 28 29 34 35 36 37 40 41 45 46 48 49 50 51 53 55 57 60 64 b 65 1 1 e # 31507 xor c a 65 0 0 1 2 9 10 12 15 16 19 21 22 27 28 31 35 38 39 41 43 44 45 46 47 48 49 50 52 53 54 56 58 59 60 62 64 b 65 0 0 1 2 9 10 12 15 16 19 21 22 27 28 31 35 38 39 41 43 44 45 46 47 48 49 50 52 53 54 56 58 59 60 62 64 # 31508 xor c a 65 0 0 1 2 9 10 12 15 16 19 21 22 27 28 31 35 38 39 41 43 44 45 46 47 48 49 50 52 53 54 56 58 59 60 62 64 b 65 1 1 f # 31509 xor c a 65 0 0 0 1 4 6 7 8 9 10 13 17 20 21 24 25 26 28 30 31 37 38 40 41 42 46 47 52 55 58 60 61 62 63 b 65 0 0 0 1 4 6 7 8 9 10 13 17 20 21 24 25 26 28 30 31 37 38 40 41 42 46 47 52 55 58 60 61 62 63 # 31510 xor c a 65 0 0 0 1 4 6 7 8 9 10 13 17 20 21 24 25 26 28 30 31 37 38 40 41 42 46 47 52 55 58 60 61 62 63 b 65 1 1 2 5 6 7 8 11 12 16 20 21 22 24 25 27 28 33 35 36 38 39 40 42 43 44 45 46 50 54 62 63 # 31511 xor c a 65 0 1 e b 65 0 1 e # 31512 xor c a 65 0 1 e b 65 0 0 e # 31513 xor c a 65 0 1 e b 65 0 1 e # 31514 xor c a 65 0 1 e b 65 0 0 f # 31515 xor c a 65 0 1 e b 65 0 1 e # 31516 xor c a 65 0 1 e b 65 0 0 1 3 7 8 11 13 16 17 18 20 21 22 26 27 28 29 33 34 35 36 38 39 40 42 43 47 53 54 63 # 31517 xor c a 65 0 1 f b 65 0 1 f # 31518 xor c a 65 0 1 f b 65 0 0 e # 31519 xor c a 65 0 1 f b 65 0 1 f # 31520 xor c a 65 0 1 f b 65 0 0 f # 31521 xor c a 65 0 1 f b 65 0 1 f # 31522 xor c a 65 0 1 f b 65 0 0 1 3 6 7 9 10 11 13 17 18 23 25 27 29 31 32 34 36 38 39 41 42 44 45 46 48 49 52 53 56 59 61 62 # 31523 xor c a 65 0 1 2 3 5 8 9 11 12 13 17 20 21 22 25 26 28 32 38 42 43 44 49 52 54 57 58 60 63 64 b 65 0 1 2 3 5 8 9 11 12 13 17 20 21 22 25 26 28 32 38 42 43 44 49 52 54 57 58 60 63 64 # 31524 xor c a 65 0 1 2 3 5 8 9 11 12 13 17 20 21 22 25 26 28 32 38 42 43 44 49 52 54 57 58 60 63 64 b 65 0 0 e # 31525 xor c a 65 0 1 0 1 4 7 10 11 12 15 16 18 22 23 25 26 29 32 36 37 44 45 50 52 58 59 61 63 b 65 0 1 0 1 4 7 10 11 12 15 16 18 22 23 25 26 29 32 36 37 44 45 50 52 58 59 61 63 # 31526 xor c a 65 0 1 0 1 4 7 10 11 12 15 16 18 22 23 25 26 29 32 36 37 44 45 50 52 58 59 61 63 b 65 0 0 f # 31527 xor c a 65 0 1 0 3 4 5 9 13 15 17 18 19 21 23 24 27 28 32 33 35 36 45 47 48 49 50 52 55 56 57 60 61 62 63 b 65 0 1 0 3 4 5 9 13 15 17 18 19 21 23 24 27 28 32 33 35 36 45 47 48 49 50 52 55 56 57 60 61 62 63 # 31528 xor c a 65 0 1 0 3 4 5 9 13 15 17 18 19 21 23 24 27 28 32 33 35 36 45 47 48 49 50 52 55 56 57 60 61 62 63 b 65 0 0 3 4 6 8 11 12 14 15 16 18 20 22 23 24 26 27 31 32 35 36 38 39 40 42 43 44 45 47 50 52 53 55 57 59 61 62 # 31529 xor c a 65 0 1 e b 65 0 1 e # 31530 xor c a 65 0 1 e b 65 0 1 e # 31531 xor c a 65 0 1 e b 65 0 1 e # 31532 xor c a 65 0 1 e b 65 0 1 f # 31533 xor c a 65 0 1 e b 65 0 1 e # 31534 xor c a 65 0 1 e b 65 0 1 3 6 7 12 14 18 21 22 25 26 27 31 32 35 36 38 39 40 43 45 46 47 49 50 51 52 53 55 58 59 60 62 64 # 31535 xor c a 65 0 1 f b 65 0 1 f # 31536 xor c a 65 0 1 f b 65 0 1 e # 31537 xor c a 65 0 1 f b 65 0 1 f # 31538 xor c a 65 0 1 f b 65 0 1 f # 31539 xor c a 65 0 1 f b 65 0 1 f # 31540 xor c a 65 0 1 f b 65 0 1 8 9 10 11 12 13 14 15 16 17 18 20 21 22 24 25 26 27 28 30 31 32 36 37 38 40 41 43 46 48 50 51 53 55 56 58 60 61 63 64 # 31541 xor c a 65 0 1 0 1 2 3 4 10 11 12 14 16 17 18 19 20 21 24 25 26 29 32 37 38 39 40 41 42 43 50 52 55 59 61 63 64 b 65 0 1 0 1 2 3 4 10 11 12 14 16 17 18 19 20 21 24 25 26 29 32 37 38 39 40 41 42 43 50 52 55 59 61 63 64 # 31542 xor c a 65 0 1 0 1 2 3 4 10 11 12 14 16 17 18 19 20 21 24 25 26 29 32 37 38 39 40 41 42 43 50 52 55 59 61 63 64 b 65 0 1 e # 31543 xor c a 65 0 1 0 10 11 12 13 14 16 20 21 22 25 27 30 32 34 36 38 40 41 42 43 44 45 46 47 51 57 59 62 64 b 65 0 1 0 10 11 12 13 14 16 20 21 22 25 27 30 32 34 36 38 40 41 42 43 44 45 46 47 51 57 59 62 64 # 31544 xor c a 65 0 1 0 10 11 12 13 14 16 20 21 22 25 27 30 32 34 36 38 40 41 42 43 44 45 46 47 51 57 59 62 64 b 65 0 1 f # 31545 xor c a 65 0 1 0 1 2 3 4 6 13 15 18 20 22 24 26 29 32 36 37 38 39 43 45 46 49 50 51 53 58 59 62 63 64 b 65 0 1 0 1 2 3 4 6 13 15 18 20 22 24 26 29 32 36 37 38 39 43 45 46 49 50 51 53 58 59 62 63 64 # 31546 xor c a 65 0 1 0 1 2 3 4 6 13 15 18 20 22 24 26 29 32 36 37 38 39 43 45 46 49 50 51 53 58 59 62 63 64 b 65 0 1 6 7 8 9 10 14 17 21 26 27 29 33 34 35 42 43 44 46 50 54 55 57 59 61 63 64 # 31547 xor c a 65 0 1 e b 65 0 1 e # 31548 xor c a 65 0 1 e b 65 1 0 e # 31549 xor c a 65 0 1 e b 65 0 1 e # 31550 xor c a 65 0 1 e b 65 1 0 f # 31551 xor c a 65 0 1 e b 65 0 1 e # 31552 xor c a 65 0 1 e b 65 1 0 0 4 5 6 11 13 15 16 17 19 20 21 26 29 33 34 36 37 38 43 46 47 49 50 51 52 56 58 62 # 31553 xor c a 65 0 1 f b 65 0 1 f # 31554 xor c a 65 0 1 f b 65 1 0 e # 31555 xor c a 65 0 1 f b 65 0 1 f # 31556 xor c a 65 0 1 f b 65 1 0 f # 31557 xor c a 65 0 1 f b 65 0 1 f # 31558 xor c a 65 0 1 f b 65 1 0 0 1 6 7 8 10 13 16 20 21 24 26 30 31 32 33 40 43 45 50 53 54 55 57 59 60 61 62 63 64 # 31559 xor c a 65 0 1 4 5 7 14 15 22 23 26 29 33 34 36 39 43 44 45 46 55 56 59 61 63 64 b 65 0 1 4 5 7 14 15 22 23 26 29 33 34 36 39 43 44 45 46 55 56 59 61 63 64 # 31560 xor c a 65 0 1 4 5 7 14 15 22 23 26 29 33 34 36 39 43 44 45 46 55 56 59 61 63 64 b 65 1 0 e # 31561 xor c a 65 0 1 2 3 5 7 8 10 11 16 17 18 19 21 22 23 25 31 35 36 37 38 39 40 41 42 46 47 48 49 50 52 53 54 58 59 63 b 65 0 1 2 3 5 7 8 10 11 16 17 18 19 21 22 23 25 31 35 36 37 38 39 40 41 42 46 47 48 49 50 52 53 54 58 59 63 # 31562 xor c a 65 0 1 2 3 5 7 8 10 11 16 17 18 19 21 22 23 25 31 35 36 37 38 39 40 41 42 46 47 48 49 50 52 53 54 58 59 63 b 65 1 0 f # 31563 xor c a 65 0 1 0 1 3 4 6 7 9 11 12 14 17 19 20 26 28 29 30 31 32 35 36 38 41 43 45 48 49 51 53 57 58 59 60 61 62 b 65 0 1 0 1 3 4 6 7 9 11 12 14 17 19 20 26 28 29 30 31 32 35 36 38 41 43 45 48 49 51 53 57 58 59 60 61 62 # 31564 xor c a 65 0 1 0 1 3 4 6 7 9 11 12 14 17 19 20 26 28 29 30 31 32 35 36 38 41 43 45 48 49 51 53 57 58 59 60 61 62 b 65 1 0 4 5 6 7 9 13 15 21 24 27 29 32 33 34 35 36 37 38 39 43 44 46 48 49 52 53 54 57 59 60 63 # 31565 xor c a 65 0 1 e b 65 0 1 e # 31566 xor c a 65 0 1 e b 65 1 1 e # 31567 xor c a 65 0 1 e b 65 0 1 e # 31568 xor c a 65 0 1 e b 65 1 1 f # 31569 xor c a 65 0 1 e b 65 0 1 e # 31570 xor c a 65 0 1 e b 65 1 1 1 2 3 4 5 7 10 11 12 15 16 17 18 19 25 27 29 32 37 44 45 49 51 55 57 58 59 60 61 # 31571 xor c a 65 0 1 f b 65 0 1 f # 31572 xor c a 65 0 1 f b 65 1 1 e # 31573 xor c a 65 0 1 f b 65 0 1 f # 31574 xor c a 65 0 1 f b 65 1 1 f # 31575 xor c a 65 0 1 f b 65 0 1 f # 31576 xor c a 65 0 1 f b 65 1 1 0 1 3 5 6 7 10 11 18 19 20 23 29 32 33 34 36 37 43 45 47 49 50 54 55 56 58 # 31577 xor c a 65 0 1 1 5 6 7 8 11 12 14 15 19 21 23 24 25 29 30 31 32 37 38 42 45 46 47 53 56 58 59 61 62 63 b 65 0 1 1 5 6 7 8 11 12 14 15 19 21 23 24 25 29 30 31 32 37 38 42 45 46 47 53 56 58 59 61 62 63 # 31578 xor c a 65 0 1 1 5 6 7 8 11 12 14 15 19 21 23 24 25 29 30 31 32 37 38 42 45 46 47 53 56 58 59 61 62 63 b 65 1 1 e # 31579 xor c a 65 0 1 0 3 5 8 9 10 11 12 13 14 15 20 22 25 27 28 31 32 33 34 35 40 42 43 45 46 49 50 53 55 56 57 58 61 64 b 65 0 1 0 3 5 8 9 10 11 12 13 14 15 20 22 25 27 28 31 32 33 34 35 40 42 43 45 46 49 50 53 55 56 57 58 61 64 # 31580 xor c a 65 0 1 0 3 5 8 9 10 11 12 13 14 15 20 22 25 27 28 31 32 33 34 35 40 42 43 45 46 49 50 53 55 56 57 58 61 64 b 65 1 1 f # 31581 xor c a 65 0 1 0 4 9 12 13 14 15 16 20 21 23 24 25 27 28 31 32 33 38 39 46 47 53 54 55 58 60 64 b 65 0 1 0 4 9 12 13 14 15 16 20 21 23 24 25 27 28 31 32 33 38 39 46 47 53 54 55 58 60 64 # 31582 xor c a 65 0 1 0 4 9 12 13 14 15 16 20 21 23 24 25 27 28 31 32 33 38 39 46 47 53 54 55 58 60 64 b 65 1 1 0 1 4 5 6 7 9 12 14 16 22 28 29 31 32 33 34 36 37 39 40 41 43 44 46 47 48 51 52 56 57 58 59 64 # 31583 xor c a 65 1 0 e b 65 1 0 e # 31584 xor c a 65 1 0 e b 65 0 0 e # 31585 xor c a 65 1 0 e b 65 1 0 e # 31586 xor c a 65 1 0 e b 65 0 0 f # 31587 xor c a 65 1 0 e b 65 1 0 e # 31588 xor c a 65 1 0 e b 65 0 0 1 2 5 6 7 9 10 11 12 13 16 20 22 23 25 31 34 36 37 40 42 46 48 49 51 54 55 57 61 63 64 # 31589 xor c a 65 1 0 f b 65 1 0 f # 31590 xor c a 65 1 0 f b 65 0 0 e # 31591 xor c a 65 1 0 f b 65 1 0 f # 31592 xor c a 65 1 0 f b 65 0 0 f # 31593 xor c a 65 1 0 f b 65 1 0 f # 31594 xor c a 65 1 0 f b 65 0 0 2 4 6 11 13 14 17 18 19 22 24 26 28 29 31 32 35 36 38 39 40 42 43 49 51 56 58 60 63 64 # 31595 xor c a 65 1 0 0 1 3 4 6 9 11 12 13 14 15 17 20 21 25 27 31 32 33 34 35 37 38 39 47 49 52 57 58 60 63 b 65 1 0 0 1 3 4 6 9 11 12 13 14 15 17 20 21 25 27 31 32 33 34 35 37 38 39 47 49 52 57 58 60 63 # 31596 xor c a 65 1 0 0 1 3 4 6 9 11 12 13 14 15 17 20 21 25 27 31 32 33 34 35 37 38 39 47 49 52 57 58 60 63 b 65 0 0 e # 31597 xor c a 65 1 0 1 2 4 5 6 10 11 12 14 15 16 20 21 24 25 30 31 33 35 37 39 41 43 46 48 52 53 54 55 56 58 60 61 b 65 1 0 1 2 4 5 6 10 11 12 14 15 16 20 21 24 25 30 31 33 35 37 39 41 43 46 48 52 53 54 55 56 58 60 61 # 31598 xor c a 65 1 0 1 2 4 5 6 10 11 12 14 15 16 20 21 24 25 30 31 33 35 37 39 41 43 46 48 52 53 54 55 56 58 60 61 b 65 0 0 f # 31599 xor c a 65 1 0 0 2 3 5 6 9 10 11 12 15 16 17 18 19 20 21 22 24 28 29 30 32 33 36 38 39 41 42 43 46 47 49 50 52 54 56 58 60 61 62 63 64 b 65 1 0 0 2 3 5 6 9 10 11 12 15 16 17 18 19 20 21 22 24 28 29 30 32 33 36 38 39 41 42 43 46 47 49 50 52 54 56 58 60 61 62 63 64 # 31600 xor c a 65 1 0 0 2 3 5 6 9 10 11 12 15 16 17 18 19 20 21 22 24 28 29 30 32 33 36 38 39 41 42 43 46 47 49 50 52 54 56 58 60 61 62 63 64 b 65 0 0 2 5 6 9 10 11 12 13 14 15 19 20 21 22 24 27 30 32 33 34 37 38 39 42 45 46 47 48 50 51 56 59 60 # 31601 xor c a 65 1 0 e b 65 1 0 e # 31602 xor c a 65 1 0 e b 65 0 1 e # 31603 xor c a 65 1 0 e b 65 1 0 e # 31604 xor c a 65 1 0 e b 65 0 1 f # 31605 xor c a 65 1 0 e b 65 1 0 e # 31606 xor c a 65 1 0 e b 65 0 1 1 2 5 6 7 9 12 13 16 18 22 23 24 25 26 30 31 32 37 39 40 41 42 43 44 50 51 52 53 54 55 56 57 60 63 64 # 31607 xor c a 65 1 0 f b 65 1 0 f # 31608 xor c a 65 1 0 f b 65 0 1 e # 31609 xor c a 65 1 0 f b 65 1 0 f # 31610 xor c a 65 1 0 f b 65 0 1 f # 31611 xor c a 65 1 0 f b 65 1 0 f # 31612 xor c a 65 1 0 f b 65 0 1 2 4 5 7 8 11 12 13 16 24 28 30 32 33 34 35 36 40 41 43 44 45 47 49 51 56 59 60 62 # 31613 xor c a 65 1 0 0 3 4 5 6 7 10 12 14 16 17 18 20 21 25 27 28 29 31 32 33 34 35 39 40 42 43 44 45 49 50 52 53 54 56 59 60 61 62 63 64 b 65 1 0 0 3 4 5 6 7 10 12 14 16 17 18 20 21 25 27 28 29 31 32 33 34 35 39 40 42 43 44 45 49 50 52 53 54 56 59 60 61 62 63 64 # 31614 xor c a 65 1 0 0 3 4 5 6 7 10 12 14 16 17 18 20 21 25 27 28 29 31 32 33 34 35 39 40 42 43 44 45 49 50 52 53 54 56 59 60 61 62 63 64 b 65 0 1 e # 31615 xor c a 65 1 0 1 3 5 6 8 9 11 12 13 15 17 18 20 23 24 26 27 29 30 31 32 33 34 35 36 37 39 41 42 45 47 48 52 53 55 58 59 61 64 b 65 1 0 1 3 5 6 8 9 11 12 13 15 17 18 20 23 24 26 27 29 30 31 32 33 34 35 36 37 39 41 42 45 47 48 52 53 55 58 59 61 64 # 31616 xor c a 65 1 0 1 3 5 6 8 9 11 12 13 15 17 18 20 23 24 26 27 29 30 31 32 33 34 35 36 37 39 41 42 45 47 48 52 53 55 58 59 61 64 b 65 0 1 f # 31617 xor c a 65 1 0 2 3 4 5 9 10 13 15 17 18 21 22 23 24 25 27 32 36 37 38 40 41 42 44 48 50 53 54 56 59 60 61 64 b 65 1 0 2 3 4 5 9 10 13 15 17 18 21 22 23 24 25 27 32 36 37 38 40 41 42 44 48 50 53 54 56 59 60 61 64 # 31618 xor c a 65 1 0 2 3 4 5 9 10 13 15 17 18 21 22 23 24 25 27 32 36 37 38 40 41 42 44 48 50 53 54 56 59 60 61 64 b 65 0 1 0 1 2 3 4 6 7 10 11 12 14 17 18 20 24 26 28 31 34 36 37 44 45 46 48 49 50 51 55 60 61 62 # 31619 xor c a 65 1 0 e b 65 1 0 e # 31620 xor c a 65 1 0 e b 65 1 0 e # 31621 xor c a 65 1 0 e b 65 1 0 e # 31622 xor c a 65 1 0 e b 65 1 0 f # 31623 xor c a 65 1 0 e b 65 1 0 e # 31624 xor c a 65 1 0 e b 65 1 0 0 1 5 6 7 9 10 12 18 21 22 23 29 30 31 35 42 43 45 47 51 52 57 59 60 62 # 31625 xor c a 65 1 0 f b 65 1 0 f # 31626 xor c a 65 1 0 f b 65 1 0 e # 31627 xor c a 65 1 0 f b 65 1 0 f # 31628 xor c a 65 1 0 f b 65 1 0 f # 31629 xor c a 65 1 0 f b 65 1 0 f # 31630 xor c a 65 1 0 f b 65 1 0 1 2 6 7 8 9 11 13 17 21 22 25 30 31 33 35 36 37 38 39 40 41 42 43 44 49 50 51 52 53 55 59 60 62 # 31631 xor c a 65 1 0 0 3 6 9 14 18 19 20 21 27 29 36 37 38 39 40 41 43 47 48 50 54 55 56 57 58 59 60 61 63 b 65 1 0 0 3 6 9 14 18 19 20 21 27 29 36 37 38 39 40 41 43 47 48 50 54 55 56 57 58 59 60 61 63 # 31632 xor c a 65 1 0 0 3 6 9 14 18 19 20 21 27 29 36 37 38 39 40 41 43 47 48 50 54 55 56 57 58 59 60 61 63 b 65 1 0 e # 31633 xor c a 65 1 0 8 10 11 14 15 18 20 21 23 26 29 30 31 37 38 40 44 45 50 52 53 57 58 59 60 61 62 63 b 65 1 0 8 10 11 14 15 18 20 21 23 26 29 30 31 37 38 40 44 45 50 52 53 57 58 59 60 61 62 63 # 31634 xor c a 65 1 0 8 10 11 14 15 18 20 21 23 26 29 30 31 37 38 40 44 45 50 52 53 57 58 59 60 61 62 63 b 65 1 0 f # 31635 xor c a 65 1 0 2 3 5 6 7 10 12 13 15 16 17 18 19 20 22 23 25 26 29 30 31 34 37 39 41 42 43 44 46 47 49 55 57 59 60 63 64 b 65 1 0 2 3 5 6 7 10 12 13 15 16 17 18 19 20 22 23 25 26 29 30 31 34 37 39 41 42 43 44 46 47 49 55 57 59 60 63 64 # 31636 xor c a 65 1 0 2 3 5 6 7 10 12 13 15 16 17 18 19 20 22 23 25 26 29 30 31 34 37 39 41 42 43 44 46 47 49 55 57 59 60 63 64 b 65 1 0 3 4 5 7 8 10 14 16 17 18 21 22 26 28 29 38 40 41 42 43 45 48 49 50 51 52 55 56 59 61 63 # 31637 xor c a 65 1 0 e b 65 1 0 e # 31638 xor c a 65 1 0 e b 65 1 1 e # 31639 xor c a 65 1 0 e b 65 1 0 e # 31640 xor c a 65 1 0 e b 65 1 1 f # 31641 xor c a 65 1 0 e b 65 1 0 e # 31642 xor c a 65 1 0 e b 65 1 1 1 2 3 4 6 7 9 10 11 12 14 15 16 17 18 20 21 27 28 33 37 38 40 41 43 46 48 50 51 56 57 60 61 62 64 # 31643 xor c a 65 1 0 f b 65 1 0 f # 31644 xor c a 65 1 0 f b 65 1 1 e # 31645 xor c a 65 1 0 f b 65 1 0 f # 31646 xor c a 65 1 0 f b 65 1 1 f # 31647 xor c a 65 1 0 f b 65 1 0 f # 31648 xor c a 65 1 0 f b 65 1 1 0 2 3 6 8 10 13 15 16 18 19 22 24 27 28 31 32 34 36 37 38 39 41 44 48 52 55 57 61 # 31649 xor c a 65 1 0 1 4 8 9 13 14 20 21 22 26 28 29 30 32 34 36 38 39 42 44 45 46 50 51 53 55 62 63 64 b 65 1 0 1 4 8 9 13 14 20 21 22 26 28 29 30 32 34 36 38 39 42 44 45 46 50 51 53 55 62 63 64 # 31650 xor c a 65 1 0 1 4 8 9 13 14 20 21 22 26 28 29 30 32 34 36 38 39 42 44 45 46 50 51 53 55 62 63 64 b 65 1 1 e # 31651 xor c a 65 1 0 2 3 6 7 10 13 14 15 16 17 18 21 22 24 25 26 28 29 30 33 34 35 37 39 43 45 46 47 48 49 51 58 59 60 61 b 65 1 0 2 3 6 7 10 13 14 15 16 17 18 21 22 24 25 26 28 29 30 33 34 35 37 39 43 45 46 47 48 49 51 58 59 60 61 # 31652 xor c a 65 1 0 2 3 6 7 10 13 14 15 16 17 18 21 22 24 25 26 28 29 30 33 34 35 37 39 43 45 46 47 48 49 51 58 59 60 61 b 65 1 1 f # 31653 xor c a 65 1 0 1 2 6 7 8 9 10 11 13 18 19 20 22 24 25 27 33 34 35 38 41 42 43 44 46 48 49 50 51 52 53 55 56 58 60 61 62 64 b 65 1 0 1 2 6 7 8 9 10 11 13 18 19 20 22 24 25 27 33 34 35 38 41 42 43 44 46 48 49 50 51 52 53 55 56 58 60 61 62 64 # 31654 xor c a 65 1 0 1 2 6 7 8 9 10 11 13 18 19 20 22 24 25 27 33 34 35 38 41 42 43 44 46 48 49 50 51 52 53 55 56 58 60 61 62 64 b 65 1 1 3 5 7 8 9 10 12 13 15 16 18 19 21 22 23 26 28 32 33 36 37 40 41 42 43 44 45 47 50 51 52 53 54 57 58 62 # 31655 xor c a 65 1 1 e b 65 1 1 e # 31656 xor c a 65 1 1 e b 65 0 0 e # 31657 xor c a 65 1 1 e b 65 1 1 e # 31658 xor c a 65 1 1 e b 65 0 0 f # 31659 xor c a 65 1 1 e b 65 1 1 e # 31660 xor c a 65 1 1 e b 65 0 0 3 4 5 6 7 10 12 13 14 16 19 21 22 23 24 28 30 32 33 35 36 37 42 44 46 47 48 49 52 56 58 59 60 62 63 # 31661 xor c a 65 1 1 f b 65 1 1 f # 31662 xor c a 65 1 1 f b 65 0 0 e # 31663 xor c a 65 1 1 f b 65 1 1 f # 31664 xor c a 65 1 1 f b 65 0 0 f # 31665 xor c a 65 1 1 f b 65 1 1 f # 31666 xor c a 65 1 1 f b 65 0 0 1 6 11 12 14 15 16 17 18 22 23 24 25 26 28 29 30 31 35 36 37 39 41 42 44 47 49 50 51 53 56 58 60 61 64 # 31667 xor c a 65 1 1 0 2 3 5 6 11 13 16 18 19 20 21 22 23 24 26 28 32 36 41 43 44 45 47 50 51 54 55 56 57 61 62 b 65 1 1 0 2 3 5 6 11 13 16 18 19 20 21 22 23 24 26 28 32 36 41 43 44 45 47 50 51 54 55 56 57 61 62 # 31668 xor c a 65 1 1 0 2 3 5 6 11 13 16 18 19 20 21 22 23 24 26 28 32 36 41 43 44 45 47 50 51 54 55 56 57 61 62 b 65 0 0 e # 31669 xor c a 65 1 1 4 5 6 7 9 15 16 18 21 25 26 28 30 31 32 33 35 36 39 41 43 45 46 49 50 51 52 53 56 58 b 65 1 1 4 5 6 7 9 15 16 18 21 25 26 28 30 31 32 33 35 36 39 41 43 45 46 49 50 51 52 53 56 58 # 31670 xor c a 65 1 1 4 5 6 7 9 15 16 18 21 25 26 28 30 31 32 33 35 36 39 41 43 45 46 49 50 51 52 53 56 58 b 65 0 0 f # 31671 xor c a 65 1 1 0 1 6 9 10 12 13 16 19 23 25 27 34 35 36 37 40 43 45 47 50 51 52 57 58 59 63 64 b 65 1 1 0 1 6 9 10 12 13 16 19 23 25 27 34 35 36 37 40 43 45 47 50 51 52 57 58 59 63 64 # 31672 xor c a 65 1 1 0 1 6 9 10 12 13 16 19 23 25 27 34 35 36 37 40 43 45 47 50 51 52 57 58 59 63 64 b 65 0 0 1 5 9 10 13 15 18 19 20 21 22 24 25 26 28 30 37 38 40 41 42 43 46 47 50 53 54 58 60 61 62 # 31673 xor c a 65 1 1 e b 65 1 1 e # 31674 xor c a 65 1 1 e b 65 0 1 e # 31675 xor c a 65 1 1 e b 65 1 1 e # 31676 xor c a 65 1 1 e b 65 0 1 f # 31677 xor c a 65 1 1 e b 65 1 1 e # 31678 xor c a 65 1 1 e b 65 0 1 1 3 4 5 6 8 9 10 11 13 15 16 17 21 22 23 24 26 30 32 35 39 40 42 47 49 51 52 54 55 56 57 60 61 62 63 # 31679 xor c a 65 1 1 f b 65 1 1 f # 31680 xor c a 65 1 1 f b 65 0 1 e # 31681 xor c a 65 1 1 f b 65 1 1 f # 31682 xor c a 65 1 1 f b 65 0 1 f # 31683 xor c a 65 1 1 f b 65 1 1 f # 31684 xor c a 65 1 1 f b 65 0 1 1 4 9 11 16 17 20 25 30 31 36 37 40 41 46 50 54 55 59 60 63 # 31685 xor c a 65 1 1 0 4 7 8 13 14 16 17 18 20 21 23 26 27 28 29 32 34 35 36 39 40 41 42 43 45 48 53 55 58 59 60 61 63 b 65 1 1 0 4 7 8 13 14 16 17 18 20 21 23 26 27 28 29 32 34 35 36 39 40 41 42 43 45 48 53 55 58 59 60 61 63 # 31686 xor c a 65 1 1 0 4 7 8 13 14 16 17 18 20 21 23 26 27 28 29 32 34 35 36 39 40 41 42 43 45 48 53 55 58 59 60 61 63 b 65 0 1 e # 31687 xor c a 65 1 1 1 3 7 11 12 13 14 18 20 21 23 24 26 27 28 29 32 33 35 36 37 38 45 46 49 50 51 52 54 56 57 59 60 63 b 65 1 1 1 3 7 11 12 13 14 18 20 21 23 24 26 27 28 29 32 33 35 36 37 38 45 46 49 50 51 52 54 56 57 59 60 63 # 31688 xor c a 65 1 1 1 3 7 11 12 13 14 18 20 21 23 24 26 27 28 29 32 33 35 36 37 38 45 46 49 50 51 52 54 56 57 59 60 63 b 65 0 1 f # 31689 xor c a 65 1 1 1 4 8 9 11 13 14 16 17 18 19 20 22 23 24 26 28 29 33 37 39 40 41 42 44 45 47 48 50 51 52 54 55 56 57 58 59 62 63 b 65 1 1 1 4 8 9 11 13 14 16 17 18 19 20 22 23 24 26 28 29 33 37 39 40 41 42 44 45 47 48 50 51 52 54 55 56 57 58 59 62 63 # 31690 xor c a 65 1 1 1 4 8 9 11 13 14 16 17 18 19 20 22 23 24 26 28 29 33 37 39 40 41 42 44 45 47 48 50 51 52 54 55 56 57 58 59 62 63 b 65 0 1 4 7 10 11 12 14 19 22 23 27 30 31 32 36 37 41 45 46 47 51 54 55 56 60 64 # 31691 xor c a 65 1 1 e b 65 1 1 e # 31692 xor c a 65 1 1 e b 65 1 0 e # 31693 xor c a 65 1 1 e b 65 1 1 e # 31694 xor c a 65 1 1 e b 65 1 0 f # 31695 xor c a 65 1 1 e b 65 1 1 e # 31696 xor c a 65 1 1 e b 65 1 0 0 1 2 6 9 10 12 14 15 16 17 22 23 24 29 32 34 39 44 47 49 50 51 52 53 55 57 58 59 60 62 63 # 31697 xor c a 65 1 1 f b 65 1 1 f # 31698 xor c a 65 1 1 f b 65 1 0 e # 31699 xor c a 65 1 1 f b 65 1 1 f # 31700 xor c a 65 1 1 f b 65 1 0 f # 31701 xor c a 65 1 1 f b 65 1 1 f # 31702 xor c a 65 1 1 f b 65 1 0 0 2 4 5 6 7 9 10 11 15 17 18 21 22 24 27 32 39 42 44 50 51 55 56 57 58 62 63 64 # 31703 xor c a 65 1 1 4 6 10 11 12 14 16 17 20 23 25 26 27 28 29 30 31 36 38 41 44 47 48 49 51 53 54 55 56 57 58 59 60 61 62 b 65 1 1 4 6 10 11 12 14 16 17 20 23 25 26 27 28 29 30 31 36 38 41 44 47 48 49 51 53 54 55 56 57 58 59 60 61 62 # 31704 xor c a 65 1 1 4 6 10 11 12 14 16 17 20 23 25 26 27 28 29 30 31 36 38 41 44 47 48 49 51 53 54 55 56 57 58 59 60 61 62 b 65 1 0 e # 31705 xor c a 65 1 1 1 5 6 12 15 16 19 22 23 26 29 30 32 34 37 41 42 43 44 46 47 48 49 56 57 58 59 60 63 64 b 65 1 1 1 5 6 12 15 16 19 22 23 26 29 30 32 34 37 41 42 43 44 46 47 48 49 56 57 58 59 60 63 64 # 31706 xor c a 65 1 1 1 5 6 12 15 16 19 22 23 26 29 30 32 34 37 41 42 43 44 46 47 48 49 56 57 58 59 60 63 64 b 65 1 0 f # 31707 xor c a 65 1 1 1 2 6 9 11 13 14 18 19 24 28 34 35 36 37 38 43 47 51 53 57 58 62 b 65 1 1 1 2 6 9 11 13 14 18 19 24 28 34 35 36 37 38 43 47 51 53 57 58 62 # 31708 xor c a 65 1 1 1 2 6 9 11 13 14 18 19 24 28 34 35 36 37 38 43 47 51 53 57 58 62 b 65 1 0 0 3 8 10 11 12 15 16 19 20 21 23 24 25 28 29 30 31 32 33 34 37 38 43 44 45 46 47 50 58 # 31709 xor c a 65 1 1 e b 65 1 1 e # 31710 xor c a 65 1 1 e b 65 1 1 e # 31711 xor c a 65 1 1 e b 65 1 1 e # 31712 xor c a 65 1 1 e b 65 1 1 f # 31713 xor c a 65 1 1 e b 65 1 1 e # 31714 xor c a 65 1 1 e b 65 1 1 2 7 10 13 15 16 17 20 21 22 24 26 28 29 30 31 33 35 36 37 42 43 44 46 47 48 50 51 53 55 56 59 61 62 63 64 # 31715 xor c a 65 1 1 f b 65 1 1 f # 31716 xor c a 65 1 1 f b 65 1 1 e # 31717 xor c a 65 1 1 f b 65 1 1 f # 31718 xor c a 65 1 1 f b 65 1 1 f # 31719 xor c a 65 1 1 f b 65 1 1 f # 31720 xor c a 65 1 1 f b 65 1 1 0 2 3 4 6 8 9 13 15 16 18 19 20 21 22 23 29 30 33 34 36 37 38 39 40 41 44 46 47 48 49 50 52 56 57 60 # 31721 xor c a 65 1 1 1 11 14 19 20 21 22 25 27 30 31 35 37 39 41 42 43 45 48 49 51 53 55 56 60 64 b 65 1 1 1 11 14 19 20 21 22 25 27 30 31 35 37 39 41 42 43 45 48 49 51 53 55 56 60 64 # 31722 xor c a 65 1 1 1 11 14 19 20 21 22 25 27 30 31 35 37 39 41 42 43 45 48 49 51 53 55 56 60 64 b 65 1 1 e # 31723 xor c a 65 1 1 0 1 3 6 7 9 11 12 13 14 15 16 17 19 20 21 22 27 28 29 30 31 32 33 34 35 37 38 44 47 50 53 54 55 58 60 61 63 64 b 65 1 1 0 1 3 6 7 9 11 12 13 14 15 16 17 19 20 21 22 27 28 29 30 31 32 33 34 35 37 38 44 47 50 53 54 55 58 60 61 63 64 # 31724 xor c a 65 1 1 0 1 3 6 7 9 11 12 13 14 15 16 17 19 20 21 22 27 28 29 30 31 32 33 34 35 37 38 44 47 50 53 54 55 58 60 61 63 64 b 65 1 1 f # 31725 xor c a 65 1 1 1 2 3 4 7 8 9 10 13 14 15 16 17 19 20 23 25 26 27 29 30 31 33 34 42 52 53 55 56 58 60 61 62 b 65 1 1 1 2 3 4 7 8 9 10 13 14 15 16 17 19 20 23 25 26 27 29 30 31 33 34 42 52 53 55 56 58 60 61 62 # 31726 xor c a 65 1 1 1 2 3 4 7 8 9 10 13 14 15 16 17 19 20 23 25 26 27 29 30 31 33 34 42 52 53 55 56 58 60 61 62 b 65 1 1 0 1 2 3 4 5 8 9 12 13 14 16 17 19 25 27 28 29 32 35 37 38 39 45 46 48 50 54 55 58 59 63 # 31727 xor c a 211 0 0 e b 211 0 0 e # 31728 xor c a 211 0 0 e b 211 0 0 e # 31729 xor c a 211 0 0 e b 211 0 0 e # 31730 xor c a 211 0 0 e b 211 0 0 f # 31731 xor c a 211 0 0 e b 211 0 0 e # 31732 xor c a 211 0 0 e b 211 0 0 0 1 2 3 4 5 8 9 11 12 13 14 15 16 20 24 28 30 31 34 35 37 40 41 49 53 54 60 63 64 66 67 71 72 76 77 78 80 82 87 88 89 93 95 96 98 100 103 104 105 108 109 110 111 114 116 119 123 125 126 129 131 132 133 134 135 137 140 141 142 145 146 149 151 154 155 158 166 167 170 173 175 176 183 184 188 190 191 192 198 199 201 202 203 204 207 208 209 # 31733 xor c a 211 0 0 f b 211 0 0 f # 31734 xor c a 211 0 0 f b 211 0 0 e # 31735 xor c a 211 0 0 f b 211 0 0 f # 31736 xor c a 211 0 0 f b 211 0 0 f # 31737 xor c a 211 0 0 f b 211 0 0 f # 31738 xor c a 211 0 0 f b 211 0 0 0 2 3 8 9 11 12 15 16 18 19 20 21 22 23 24 27 28 29 31 34 36 37 38 39 40 42 44 45 47 61 63 70 71 73 76 77 78 82 83 84 85 89 90 91 92 94 97 98 99 101 102 103 106 109 111 114 119 122 126 127 130 131 135 136 138 139 142 143 144 147 148 149 150 151 152 156 157 163 164 165 171 172 174 175 176 177 178 180 183 184 185 187 188 189 192 193 194 195 199 200 201 203 204 206 207 # 31739 xor c a 211 0 0 0 1 2 3 4 6 7 9 12 16 17 18 20 22 23 26 36 39 40 41 43 44 45 47 48 49 51 54 55 57 59 60 61 64 65 67 68 69 70 71 74 77 80 84 88 89 91 93 97 101 103 109 110 113 114 115 120 126 127 131 133 134 136 138 140 141 144 147 152 154 156 157 158 162 164 165 166 167 168 169 171 172 173 176 180 181 182 183 185 188 194 197 200 201 206 208 210 b 211 0 0 0 1 2 3 4 6 7 9 12 16 17 18 20 22 23 26 36 39 40 41 43 44 45 47 48 49 51 54 55 57 59 60 61 64 65 67 68 69 70 71 74 77 80 84 88 89 91 93 97 101 103 109 110 113 114 115 120 126 127 131 133 134 136 138 140 141 144 147 152 154 156 157 158 162 164 165 166 167 168 169 171 172 173 176 180 181 182 183 185 188 194 197 200 201 206 208 210 # 31740 xor c a 211 0 0 0 1 2 3 4 6 7 9 12 16 17 18 20 22 23 26 36 39 40 41 43 44 45 47 48 49 51 54 55 57 59 60 61 64 65 67 68 69 70 71 74 77 80 84 88 89 91 93 97 101 103 109 110 113 114 115 120 126 127 131 133 134 136 138 140 141 144 147 152 154 156 157 158 162 164 165 166 167 168 169 171 172 173 176 180 181 182 183 185 188 194 197 200 201 206 208 210 b 211 0 0 e # 31741 xor c a 211 0 0 0 2 3 5 7 8 12 13 14 16 17 18 21 23 25 26 27 28 30 31 32 33 34 36 38 39 40 42 43 44 45 47 48 52 53 56 58 59 60 61 62 65 66 68 69 70 71 72 73 75 76 77 78 79 80 82 83 84 87 92 94 96 98 99 101 102 104 107 108 111 114 116 121 124 126 127 128 129 130 131 133 136 138 139 140 142 144 145 146 147 149 150 151 152 155 156 158 160 161 165 166 169 171 177 178 179 180 181 183 185 188 190 191 192 196 198 200 204 b 211 0 0 0 2 3 5 7 8 12 13 14 16 17 18 21 23 25 26 27 28 30 31 32 33 34 36 38 39 40 42 43 44 45 47 48 52 53 56 58 59 60 61 62 65 66 68 69 70 71 72 73 75 76 77 78 79 80 82 83 84 87 92 94 96 98 99 101 102 104 107 108 111 114 116 121 124 126 127 128 129 130 131 133 136 138 139 140 142 144 145 146 147 149 150 151 152 155 156 158 160 161 165 166 169 171 177 178 179 180 181 183 185 188 190 191 192 196 198 200 204 # 31742 xor c a 211 0 0 0 2 3 5 7 8 12 13 14 16 17 18 21 23 25 26 27 28 30 31 32 33 34 36 38 39 40 42 43 44 45 47 48 52 53 56 58 59 60 61 62 65 66 68 69 70 71 72 73 75 76 77 78 79 80 82 83 84 87 92 94 96 98 99 101 102 104 107 108 111 114 116 121 124 126 127 128 129 130 131 133 136 138 139 140 142 144 145 146 147 149 150 151 152 155 156 158 160 161 165 166 169 171 177 178 179 180 181 183 185 188 190 191 192 196 198 200 204 b 211 0 0 f # 31743 xor c a 211 0 0 2 4 6 9 10 12 14 21 22 24 26 28 30 32 35 36 42 45 46 47 53 54 57 58 59 64 65 67 68 69 72 79 83 86 87 89 90 91 93 96 97 99 101 102 106 107 108 112 113 114 116 117 118 120 121 122 123 124 128 134 136 137 141 142 143 145 148 150 152 153 155 156 157 159 164 166 170 171 172 173 174 177 178 181 182 186 188 192 193 194 197 198 199 200 201 202 203 204 b 211 0 0 2 4 6 9 10 12 14 21 22 24 26 28 30 32 35 36 42 45 46 47 53 54 57 58 59 64 65 67 68 69 72 79 83 86 87 89 90 91 93 96 97 99 101 102 106 107 108 112 113 114 116 117 118 120 121 122 123 124 128 134 136 137 141 142 143 145 148 150 152 153 155 156 157 159 164 166 170 171 172 173 174 177 178 181 182 186 188 192 193 194 197 198 199 200 201 202 203 204 # 31744 xor c a 211 0 0 2 4 6 9 10 12 14 21 22 24 26 28 30 32 35 36 42 45 46 47 53 54 57 58 59 64 65 67 68 69 72 79 83 86 87 89 90 91 93 96 97 99 101 102 106 107 108 112 113 114 116 117 118 120 121 122 123 124 128 134 136 137 141 142 143 145 148 150 152 153 155 156 157 159 164 166 170 171 172 173 174 177 178 181 182 186 188 192 193 194 197 198 199 200 201 202 203 204 b 211 0 0 0 3 4 6 10 11 12 13 22 26 28 30 31 34 36 37 40 42 43 44 48 49 51 55 56 57 59 62 63 66 72 75 76 77 78 79 80 82 84 85 86 87 88 90 93 94 95 97 101 102 105 106 108 109 110 113 114 116 117 119 120 122 125 128 129 130 133 134 135 136 137 138 140 141 142 144 145 146 152 154 155 162 163 167 171 177 178 179 181 183 186 188 190 191 192 194 196 200 201 # 31745 xor c a 211 0 0 e b 211 0 0 e # 31746 xor c a 211 0 0 e b 211 0 1 e # 31747 xor c a 211 0 0 e b 211 0 0 e # 31748 xor c a 211 0 0 e b 211 0 1 f # 31749 xor c a 211 0 0 e b 211 0 0 e # 31750 xor c a 211 0 0 e b 211 0 1 0 3 5 6 7 10 18 22 24 26 28 33 35 36 37 38 41 42 44 45 46 49 50 51 55 56 61 62 63 64 66 69 70 72 74 75 77 78 79 80 81 82 83 85 86 87 91 92 94 95 96 97 99 100 101 107 110 112 113 116 119 121 122 127 130 131 135 136 137 138 140 141 142 143 144 145 151 156 159 160 162 164 167 178 180 186 188 191 192 195 196 197 198 199 203 207 208 209 # 31751 xor c a 211 0 0 f b 211 0 0 f # 31752 xor c a 211 0 0 f b 211 0 1 e # 31753 xor c a 211 0 0 f b 211 0 0 f # 31754 xor c a 211 0 0 f b 211 0 1 f # 31755 xor c a 211 0 0 f b 211 0 0 f # 31756 xor c a 211 0 0 f b 211 0 1 0 4 5 6 7 8 11 12 15 20 21 23 25 27 28 31 33 36 39 42 44 48 49 51 53 54 55 56 57 58 59 61 62 63 64 66 71 72 73 75 77 78 79 82 83 86 91 96 98 100 101 104 105 111 112 113 114 117 118 119 122 123 124 126 128 129 130 132 133 134 135 136 138 147 148 150 154 156 157 158 160 162 165 171 173 174 175 176 179 180 184 190 191 192 193 196 197 200 201 202 204 205 207 209 210 # 31757 xor c a 211 0 0 1 2 4 6 12 14 17 18 20 21 28 30 33 34 35 37 39 40 43 44 47 48 49 51 52 53 54 60 62 63 66 67 72 73 76 79 81 82 84 85 89 90 91 93 94 95 97 98 102 103 104 105 107 109 110 111 112 113 115 117 119 120 122 125 128 129 130 131 133 134 136 144 149 151 153 155 156 163 164 166 167 168 170 174 176 178 179 182 183 186 187 188 189 193 194 197 198 201 202 203 205 207 210 b 211 0 0 1 2 4 6 12 14 17 18 20 21 28 30 33 34 35 37 39 40 43 44 47 48 49 51 52 53 54 60 62 63 66 67 72 73 76 79 81 82 84 85 89 90 91 93 94 95 97 98 102 103 104 105 107 109 110 111 112 113 115 117 119 120 122 125 128 129 130 131 133 134 136 144 149 151 153 155 156 163 164 166 167 168 170 174 176 178 179 182 183 186 187 188 189 193 194 197 198 201 202 203 205 207 210 # 31758 xor c a 211 0 0 1 2 4 6 12 14 17 18 20 21 28 30 33 34 35 37 39 40 43 44 47 48 49 51 52 53 54 60 62 63 66 67 72 73 76 79 81 82 84 85 89 90 91 93 94 95 97 98 102 103 104 105 107 109 110 111 112 113 115 117 119 120 122 125 128 129 130 131 133 134 136 144 149 151 153 155 156 163 164 166 167 168 170 174 176 178 179 182 183 186 187 188 189 193 194 197 198 201 202 203 205 207 210 b 211 0 1 e # 31759 xor c a 211 0 0 0 2 3 4 6 7 8 9 12 16 28 29 31 34 35 36 38 39 41 42 47 49 51 52 56 57 58 63 64 65 66 67 71 74 75 76 78 81 86 89 90 91 93 96 98 100 104 106 107 108 109 110 111 112 116 117 119 120 122 123 130 132 133 135 139 142 143 144 149 151 152 154 159 165 166 172 175 176 177 179 181 182 184 185 186 191 193 194 195 197 199 201 205 207 210 b 211 0 0 0 2 3 4 6 7 8 9 12 16 28 29 31 34 35 36 38 39 41 42 47 49 51 52 56 57 58 63 64 65 66 67 71 74 75 76 78 81 86 89 90 91 93 96 98 100 104 106 107 108 109 110 111 112 116 117 119 120 122 123 130 132 133 135 139 142 143 144 149 151 152 154 159 165 166 172 175 176 177 179 181 182 184 185 186 191 193 194 195 197 199 201 205 207 210 # 31760 xor c a 211 0 0 0 2 3 4 6 7 8 9 12 16 28 29 31 34 35 36 38 39 41 42 47 49 51 52 56 57 58 63 64 65 66 67 71 74 75 76 78 81 86 89 90 91 93 96 98 100 104 106 107 108 109 110 111 112 116 117 119 120 122 123 130 132 133 135 139 142 143 144 149 151 152 154 159 165 166 172 175 176 177 179 181 182 184 185 186 191 193 194 195 197 199 201 205 207 210 b 211 0 1 f # 31761 xor c a 211 0 0 0 2 5 7 11 12 13 14 15 17 18 21 23 24 27 28 29 30 31 32 33 36 38 40 43 46 47 49 50 51 54 56 57 60 63 66 68 69 70 71 73 74 77 83 84 85 88 89 90 91 95 96 99 102 103 105 110 111 112 114 118 121 122 123 126 127 128 130 132 135 139 140 142 143 144 145 147 151 154 156 157 159 163 164 166 167 168 170 171 172 174 175 177 178 181 185 186 187 188 190 191 192 193 194 197 204 207 209 b 211 0 0 0 2 5 7 11 12 13 14 15 17 18 21 23 24 27 28 29 30 31 32 33 36 38 40 43 46 47 49 50 51 54 56 57 60 63 66 68 69 70 71 73 74 77 83 84 85 88 89 90 91 95 96 99 102 103 105 110 111 112 114 118 121 122 123 126 127 128 130 132 135 139 140 142 143 144 145 147 151 154 156 157 159 163 164 166 167 168 170 171 172 174 175 177 178 181 185 186 187 188 190 191 192 193 194 197 204 207 209 # 31762 xor c a 211 0 0 0 2 5 7 11 12 13 14 15 17 18 21 23 24 27 28 29 30 31 32 33 36 38 40 43 46 47 49 50 51 54 56 57 60 63 66 68 69 70 71 73 74 77 83 84 85 88 89 90 91 95 96 99 102 103 105 110 111 112 114 118 121 122 123 126 127 128 130 132 135 139 140 142 143 144 145 147 151 154 156 157 159 163 164 166 167 168 170 171 172 174 175 177 178 181 185 186 187 188 190 191 192 193 194 197 204 207 209 b 211 0 1 1 2 3 5 6 10 13 15 19 20 25 26 28 29 30 32 35 39 40 45 46 47 50 52 54 55 56 59 61 63 65 66 67 73 74 75 77 79 80 82 83 85 86 89 92 93 96 100 101 102 105 106 107 110 112 113 117 118 119 120 123 125 129 130 131 133 135 138 139 140 141 145 146 147 148 150 151 152 153 154 155 156 159 160 161 162 164 173 174 175 178 180 182 183 185 186 188 189 191 192 195 197 198 199 203 204 205 210 # 31763 xor c a 211 0 0 e b 211 0 0 e # 31764 xor c a 211 0 0 e b 211 1 0 e # 31765 xor c a 211 0 0 e b 211 0 0 e # 31766 xor c a 211 0 0 e b 211 1 0 f # 31767 xor c a 211 0 0 e b 211 0 0 e # 31768 xor c a 211 0 0 e b 211 1 0 1 2 6 9 10 12 13 14 15 17 18 21 22 24 25 26 29 31 32 33 34 35 37 39 40 43 46 47 51 53 56 57 58 59 60 62 63 65 66 67 68 70 71 74 75 76 80 81 84 86 89 96 97 99 101 103 107 108 109 111 112 116 118 122 124 126 127 133 137 139 140 141 142 145 146 149 150 153 154 156 157 158 162 165 166 167 168 170 174 177 178 179 180 186 189 194 195 197 199 203 204 209 210 # 31769 xor c a 211 0 0 f b 211 0 0 f # 31770 xor c a 211 0 0 f b 211 1 0 e # 31771 xor c a 211 0 0 f b 211 0 0 f # 31772 xor c a 211 0 0 f b 211 1 0 f # 31773 xor c a 211 0 0 f b 211 0 0 f # 31774 xor c a 211 0 0 f b 211 1 0 3 4 6 7 8 12 13 16 18 19 20 24 25 26 29 31 34 35 36 37 38 39 42 43 52 53 54 55 56 58 64 67 68 72 76 77 81 83 86 88 89 91 92 93 95 96 97 99 101 106 112 113 118 119 120 122 123 124 126 127 130 131 135 136 138 139 145 146 147 149 150 152 153 155 157 158 159 161 162 167 170 171 172 178 179 181 182 187 194 199 202 204 208 # 31775 xor c a 211 0 0 4 6 8 9 10 15 16 19 20 21 22 24 26 33 34 37 38 39 40 41 43 44 46 47 48 49 51 52 57 58 59 63 64 66 68 69 71 74 76 79 81 82 84 86 92 95 96 98 99 100 104 106 107 108 110 112 113 115 116 120 121 122 125 127 130 134 137 138 140 141 143 145 146 150 151 157 159 160 162 165 166 167 169 173 175 176 179 180 182 184 186 190 193 194 195 196 198 202 203 204 206 207 208 210 b 211 0 0 4 6 8 9 10 15 16 19 20 21 22 24 26 33 34 37 38 39 40 41 43 44 46 47 48 49 51 52 57 58 59 63 64 66 68 69 71 74 76 79 81 82 84 86 92 95 96 98 99 100 104 106 107 108 110 112 113 115 116 120 121 122 125 127 130 134 137 138 140 141 143 145 146 150 151 157 159 160 162 165 166 167 169 173 175 176 179 180 182 184 186 190 193 194 195 196 198 202 203 204 206 207 208 210 # 31776 xor c a 211 0 0 4 6 8 9 10 15 16 19 20 21 22 24 26 33 34 37 38 39 40 41 43 44 46 47 48 49 51 52 57 58 59 63 64 66 68 69 71 74 76 79 81 82 84 86 92 95 96 98 99 100 104 106 107 108 110 112 113 115 116 120 121 122 125 127 130 134 137 138 140 141 143 145 146 150 151 157 159 160 162 165 166 167 169 173 175 176 179 180 182 184 186 190 193 194 195 196 198 202 203 204 206 207 208 210 b 211 1 0 e # 31777 xor c a 211 0 0 0 2 3 6 9 11 17 21 23 24 26 29 31 33 34 35 37 39 40 41 45 46 48 50 52 55 56 57 59 60 62 65 67 68 73 74 76 78 79 80 81 83 87 89 90 93 94 95 96 99 100 101 103 104 105 107 110 114 115 116 118 121 122 124 125 127 128 129 131 132 133 134 135 136 138 140 141 144 146 147 148 149 150 153 154 157 158 160 165 167 169 171 172 173 175 180 186 187 189 191 197 199 200 201 202 205 207 209 210 b 211 0 0 0 2 3 6 9 11 17 21 23 24 26 29 31 33 34 35 37 39 40 41 45 46 48 50 52 55 56 57 59 60 62 65 67 68 73 74 76 78 79 80 81 83 87 89 90 93 94 95 96 99 100 101 103 104 105 107 110 114 115 116 118 121 122 124 125 127 128 129 131 132 133 134 135 136 138 140 141 144 146 147 148 149 150 153 154 157 158 160 165 167 169 171 172 173 175 180 186 187 189 191 197 199 200 201 202 205 207 209 210 # 31778 xor c a 211 0 0 0 2 3 6 9 11 17 21 23 24 26 29 31 33 34 35 37 39 40 41 45 46 48 50 52 55 56 57 59 60 62 65 67 68 73 74 76 78 79 80 81 83 87 89 90 93 94 95 96 99 100 101 103 104 105 107 110 114 115 116 118 121 122 124 125 127 128 129 131 132 133 134 135 136 138 140 141 144 146 147 148 149 150 153 154 157 158 160 165 167 169 171 172 173 175 180 186 187 189 191 197 199 200 201 202 205 207 209 210 b 211 1 0 f # 31779 xor c a 211 0 0 3 5 8 11 13 15 20 22 24 25 26 32 33 36 37 39 40 41 42 44 49 50 53 54 55 56 57 59 61 63 64 65 67 69 72 74 75 79 81 83 84 86 93 96 97 98 102 104 105 106 111 113 115 121 122 123 124 126 127 129 130 131 133 134 137 139 141 145 147 149 151 152 155 156 158 159 161 162 163 165 167 168 169 170 171 175 177 178 180 181 183 185 186 187 189 190 191 193 194 195 197 198 200 201 204 205 208 209 210 b 211 0 0 3 5 8 11 13 15 20 22 24 25 26 32 33 36 37 39 40 41 42 44 49 50 53 54 55 56 57 59 61 63 64 65 67 69 72 74 75 79 81 83 84 86 93 96 97 98 102 104 105 106 111 113 115 121 122 123 124 126 127 129 130 131 133 134 137 139 141 145 147 149 151 152 155 156 158 159 161 162 163 165 167 168 169 170 171 175 177 178 180 181 183 185 186 187 189 190 191 193 194 195 197 198 200 201 204 205 208 209 210 # 31780 xor c a 211 0 0 3 5 8 11 13 15 20 22 24 25 26 32 33 36 37 39 40 41 42 44 49 50 53 54 55 56 57 59 61 63 64 65 67 69 72 74 75 79 81 83 84 86 93 96 97 98 102 104 105 106 111 113 115 121 122 123 124 126 127 129 130 131 133 134 137 139 141 145 147 149 151 152 155 156 158 159 161 162 163 165 167 168 169 170 171 175 177 178 180 181 183 185 186 187 189 190 191 193 194 195 197 198 200 201 204 205 208 209 210 b 211 1 0 0 1 2 3 5 6 8 11 12 13 15 18 19 21 22 24 25 26 27 29 30 32 33 34 35 37 45 47 50 52 53 54 55 57 58 59 67 68 72 77 80 82 83 84 85 86 88 92 93 96 97 98 99 104 105 106 107 118 120 123 125 126 128 129 131 135 137 138 139 143 144 145 148 150 151 152 155 159 162 163 164 166 169 170 176 178 179 180 182 184 187 188 189 190 193 194 197 202 203 204 206 207 208 209 210 # 31781 xor c a 211 0 0 e b 211 0 0 e # 31782 xor c a 211 0 0 e b 211 1 1 e # 31783 xor c a 211 0 0 e b 211 0 0 e # 31784 xor c a 211 0 0 e b 211 1 1 f # 31785 xor c a 211 0 0 e b 211 0 0 e # 31786 xor c a 211 0 0 e b 211 1 1 3 4 5 7 10 11 13 14 15 19 20 21 22 23 25 26 28 30 32 35 37 38 39 40 41 44 47 48 50 51 55 58 60 61 65 67 69 72 73 74 79 80 82 83 84 86 89 92 93 94 96 97 98 100 102 103 105 107 108 109 110 111 112 114 115 116 118 123 132 134 136 138 139 140 141 142 143 146 147 148 149 153 155 156 158 160 164 166 167 168 169 170 171 174 175 176 178 179 181 184 187 188 190 191 192 196 197 199 200 201 206 208 209 # 31787 xor c a 211 0 0 f b 211 0 0 f # 31788 xor c a 211 0 0 f b 211 1 1 e # 31789 xor c a 211 0 0 f b 211 0 0 f # 31790 xor c a 211 0 0 f b 211 1 1 f # 31791 xor c a 211 0 0 f b 211 0 0 f # 31792 xor c a 211 0 0 f b 211 1 1 0 1 2 6 9 11 12 13 16 20 22 24 28 29 30 31 32 33 36 41 43 48 49 50 51 53 54 56 58 59 61 62 63 68 69 70 71 73 74 75 80 81 82 84 85 87 90 92 93 97 98 99 101 102 103 104 105 106 115 117 118 119 125 126 129 131 134 137 139 141 142 147 150 151 152 153 154 155 156 157 161 163 167 169 170 172 173 174 179 180 181 184 187 189 190 191 192 194 197 199 200 204 206 208 209 210 # 31793 xor c a 211 0 0 1 3 4 5 7 10 11 13 14 15 17 21 23 24 25 26 27 29 30 31 32 34 35 39 40 42 47 49 50 51 52 54 59 62 63 64 65 66 73 74 75 79 83 84 88 89 90 91 93 94 97 98 99 100 102 105 107 108 109 113 117 119 120 122 125 126 127 128 129 131 132 138 145 146 147 150 152 153 155 156 158 160 163 164 167 168 172 173 174 178 179 180 181 185 188 190 191 193 194 202 207 208 210 b 211 0 0 1 3 4 5 7 10 11 13 14 15 17 21 23 24 25 26 27 29 30 31 32 34 35 39 40 42 47 49 50 51 52 54 59 62 63 64 65 66 73 74 75 79 83 84 88 89 90 91 93 94 97 98 99 100 102 105 107 108 109 113 117 119 120 122 125 126 127 128 129 131 132 138 145 146 147 150 152 153 155 156 158 160 163 164 167 168 172 173 174 178 179 180 181 185 188 190 191 193 194 202 207 208 210 # 31794 xor c a 211 0 0 1 3 4 5 7 10 11 13 14 15 17 21 23 24 25 26 27 29 30 31 32 34 35 39 40 42 47 49 50 51 52 54 59 62 63 64 65 66 73 74 75 79 83 84 88 89 90 91 93 94 97 98 99 100 102 105 107 108 109 113 117 119 120 122 125 126 127 128 129 131 132 138 145 146 147 150 152 153 155 156 158 160 163 164 167 168 172 173 174 178 179 180 181 185 188 190 191 193 194 202 207 208 210 b 211 1 1 e # 31795 xor c a 211 0 0 0 2 4 5 6 7 8 9 10 11 13 14 15 17 18 19 23 24 25 28 29 31 32 34 35 36 37 38 39 40 46 49 51 53 56 57 58 59 61 69 70 71 75 76 79 82 83 86 87 88 89 90 92 94 95 96 99 102 103 104 109 111 122 123 125 126 137 138 139 142 143 147 148 149 151 152 154 157 158 159 161 163 166 167 169 170 171 172 176 177 181 186 187 189 190 191 192 193 195 198 199 204 205 206 207 208 b 211 0 0 0 2 4 5 6 7 8 9 10 11 13 14 15 17 18 19 23 24 25 28 29 31 32 34 35 36 37 38 39 40 46 49 51 53 56 57 58 59 61 69 70 71 75 76 79 82 83 86 87 88 89 90 92 94 95 96 99 102 103 104 109 111 122 123 125 126 137 138 139 142 143 147 148 149 151 152 154 157 158 159 161 163 166 167 169 170 171 172 176 177 181 186 187 189 190 191 192 193 195 198 199 204 205 206 207 208 # 31796 xor c a 211 0 0 0 2 4 5 6 7 8 9 10 11 13 14 15 17 18 19 23 24 25 28 29 31 32 34 35 36 37 38 39 40 46 49 51 53 56 57 58 59 61 69 70 71 75 76 79 82 83 86 87 88 89 90 92 94 95 96 99 102 103 104 109 111 122 123 125 126 137 138 139 142 143 147 148 149 151 152 154 157 158 159 161 163 166 167 169 170 171 172 176 177 181 186 187 189 190 191 192 193 195 198 199 204 205 206 207 208 b 211 1 1 f # 31797 xor c a 211 0 0 2 3 4 6 7 8 14 16 18 19 20 23 26 28 29 34 35 37 38 42 44 45 46 47 49 51 53 54 55 56 57 58 59 60 63 64 66 68 69 72 74 75 76 81 84 87 88 90 91 92 93 94 97 98 108 109 110 111 112 113 117 120 121 122 123 124 125 129 131 133 135 137 139 141 142 144 146 149 152 154 155 159 161 162 164 167 168 170 173 174 178 179 182 184 185 187 189 190 194 196 199 200 205 206 207 b 211 0 0 2 3 4 6 7 8 14 16 18 19 20 23 26 28 29 34 35 37 38 42 44 45 46 47 49 51 53 54 55 56 57 58 59 60 63 64 66 68 69 72 74 75 76 81 84 87 88 90 91 92 93 94 97 98 108 109 110 111 112 113 117 120 121 122 123 124 125 129 131 133 135 137 139 141 142 144 146 149 152 154 155 159 161 162 164 167 168 170 173 174 178 179 182 184 185 187 189 190 194 196 199 200 205 206 207 # 31798 xor c a 211 0 0 2 3 4 6 7 8 14 16 18 19 20 23 26 28 29 34 35 37 38 42 44 45 46 47 49 51 53 54 55 56 57 58 59 60 63 64 66 68 69 72 74 75 76 81 84 87 88 90 91 92 93 94 97 98 108 109 110 111 112 113 117 120 121 122 123 124 125 129 131 133 135 137 139 141 142 144 146 149 152 154 155 159 161 162 164 167 168 170 173 174 178 179 182 184 185 187 189 190 194 196 199 200 205 206 207 b 211 1 1 0 1 6 8 9 13 18 21 27 28 29 31 33 35 41 45 46 47 49 52 53 54 55 58 60 65 67 69 72 73 74 77 79 80 90 92 93 94 96 99 101 107 109 110 113 114 118 119 120 121 123 124 128 129 133 135 137 138 139 140 141 143 144 145 147 150 151 153 154 155 157 159 160 161 164 165 168 172 173 175 176 177 178 179 182 183 185 186 187 188 190 193 194 196 197 198 202 204 206 207 209 210 # 31799 xor c a 211 0 1 e b 211 0 1 e # 31800 xor c a 211 0 1 e b 211 0 0 e # 31801 xor c a 211 0 1 e b 211 0 1 e # 31802 xor c a 211 0 1 e b 211 0 0 f # 31803 xor c a 211 0 1 e b 211 0 1 e # 31804 xor c a 211 0 1 e b 211 0 0 0 2 3 4 9 11 12 16 18 20 23 25 26 27 29 30 32 35 36 37 42 44 46 47 48 49 51 52 53 54 56 57 61 62 65 68 70 72 73 74 75 81 82 85 89 91 92 97 98 99 105 106 110 111 113 114 115 118 119 122 123 124 127 129 130 134 135 137 139 141 144 148 152 156 159 163 164 166 167 168 169 170 172 174 175 176 177 178 179 182 183 188 189 193 196 197 199 200 201 203 205 206 207 208 209 210 # 31805 xor c a 211 0 1 f b 211 0 1 f # 31806 xor c a 211 0 1 f b 211 0 0 e # 31807 xor c a 211 0 1 f b 211 0 1 f # 31808 xor c a 211 0 1 f b 211 0 0 f # 31809 xor c a 211 0 1 f b 211 0 1 f # 31810 xor c a 211 0 1 f b 211 0 0 1 2 5 6 7 8 9 10 11 13 16 18 19 21 22 24 25 26 27 28 29 30 32 38 40 41 44 46 48 51 60 61 63 65 66 67 69 72 75 76 79 80 82 83 84 85 87 93 94 95 96 97 98 99 100 103 104 105 106 107 108 109 111 114 117 122 123 125 126 127 128 129 130 131 134 135 136 138 139 142 143 147 151 152 153 154 156 157 160 165 169 171 174 175 176 180 181 183 184 186 190 195 197 199 200 201 202 203 205 206 207 208 # 31811 xor c a 211 0 1 0 1 4 5 8 9 14 16 18 21 24 25 26 27 28 31 33 35 37 42 43 44 46 47 48 49 60 61 63 66 67 71 72 75 76 79 81 82 83 87 88 89 91 94 95 96 97 98 100 102 103 104 108 109 112 114 115 116 118 119 120 121 128 130 131 132 133 134 135 143 144 146 148 149 151 152 153 156 157 158 159 162 165 166 168 170 172 176 178 180 183 184 186 187 189 190 193 194 196 197 198 199 200 201 202 203 204 207 b 211 0 1 0 1 4 5 8 9 14 16 18 21 24 25 26 27 28 31 33 35 37 42 43 44 46 47 48 49 60 61 63 66 67 71 72 75 76 79 81 82 83 87 88 89 91 94 95 96 97 98 100 102 103 104 108 109 112 114 115 116 118 119 120 121 128 130 131 132 133 134 135 143 144 146 148 149 151 152 153 156 157 158 159 162 165 166 168 170 172 176 178 180 183 184 186 187 189 190 193 194 196 197 198 199 200 201 202 203 204 207 # 31812 xor c a 211 0 1 0 1 4 5 8 9 14 16 18 21 24 25 26 27 28 31 33 35 37 42 43 44 46 47 48 49 60 61 63 66 67 71 72 75 76 79 81 82 83 87 88 89 91 94 95 96 97 98 100 102 103 104 108 109 112 114 115 116 118 119 120 121 128 130 131 132 133 134 135 143 144 146 148 149 151 152 153 156 157 158 159 162 165 166 168 170 172 176 178 180 183 184 186 187 189 190 193 194 196 197 198 199 200 201 202 203 204 207 b 211 0 0 e # 31813 xor c a 211 0 1 5 9 11 15 18 19 22 23 28 32 33 36 37 38 40 42 43 44 46 48 51 52 54 58 60 63 65 68 72 75 76 78 79 80 82 83 85 87 88 89 91 93 96 97 98 100 102 103 104 107 108 112 116 119 122 123 127 128 129 131 134 135 136 138 139 140 146 148 149 155 158 163 164 166 167 172 173 174 178 182 183 185 186 187 191 192 193 194 199 200 201 202 203 205 206 207 209 210 b 211 0 1 5 9 11 15 18 19 22 23 28 32 33 36 37 38 40 42 43 44 46 48 51 52 54 58 60 63 65 68 72 75 76 78 79 80 82 83 85 87 88 89 91 93 96 97 98 100 102 103 104 107 108 112 116 119 122 123 127 128 129 131 134 135 136 138 139 140 146 148 149 155 158 163 164 166 167 172 173 174 178 182 183 185 186 187 191 192 193 194 199 200 201 202 203 205 206 207 209 210 # 31814 xor c a 211 0 1 5 9 11 15 18 19 22 23 28 32 33 36 37 38 40 42 43 44 46 48 51 52 54 58 60 63 65 68 72 75 76 78 79 80 82 83 85 87 88 89 91 93 96 97 98 100 102 103 104 107 108 112 116 119 122 123 127 128 129 131 134 135 136 138 139 140 146 148 149 155 158 163 164 166 167 172 173 174 178 182 183 185 186 187 191 192 193 194 199 200 201 202 203 205 206 207 209 210 b 211 0 0 f # 31815 xor c a 211 0 1 0 1 2 3 5 9 10 12 13 14 19 22 24 25 28 29 31 32 36 37 38 40 41 43 44 46 48 52 54 56 57 58 59 60 62 63 64 67 70 74 76 77 78 79 81 86 89 93 95 97 98 101 102 103 105 108 109 112 113 116 120 121 124 125 127 129 131 132 135 136 137 139 140 142 143 146 148 151 153 154 155 156 158 162 163 164 166 167 171 172 174 175 176 177 179 181 184 188 190 191 192 193 194 195 197 201 203 206 208 b 211 0 1 0 1 2 3 5 9 10 12 13 14 19 22 24 25 28 29 31 32 36 37 38 40 41 43 44 46 48 52 54 56 57 58 59 60 62 63 64 67 70 74 76 77 78 79 81 86 89 93 95 97 98 101 102 103 105 108 109 112 113 116 120 121 124 125 127 129 131 132 135 136 137 139 140 142 143 146 148 151 153 154 155 156 158 162 163 164 166 167 171 172 174 175 176 177 179 181 184 188 190 191 192 193 194 195 197 201 203 206 208 # 31816 xor c a 211 0 1 0 1 2 3 5 9 10 12 13 14 19 22 24 25 28 29 31 32 36 37 38 40 41 43 44 46 48 52 54 56 57 58 59 60 62 63 64 67 70 74 76 77 78 79 81 86 89 93 95 97 98 101 102 103 105 108 109 112 113 116 120 121 124 125 127 129 131 132 135 136 137 139 140 142 143 146 148 151 153 154 155 156 158 162 163 164 166 167 171 172 174 175 176 177 179 181 184 188 190 191 192 193 194 195 197 201 203 206 208 b 211 0 0 1 2 3 4 8 9 10 11 12 13 14 16 17 18 21 22 27 33 43 50 53 54 55 56 57 58 62 63 65 69 70 71 73 74 78 80 82 85 88 95 99 101 104 106 109 110 113 117 118 120 125 127 133 134 137 138 139 140 142 143 147 150 154 155 157 158 162 163 165 168 171 172 174 175 176 178 179 181 183 185 186 188 189 190 192 193 196 197 198 199 201 202 203 206 207 208 209 210 # 31817 xor c a 211 0 1 e b 211 0 1 e # 31818 xor c a 211 0 1 e b 211 0 1 e # 31819 xor c a 211 0 1 e b 211 0 1 e # 31820 xor c a 211 0 1 e b 211 0 1 f # 31821 xor c a 211 0 1 e b 211 0 1 e # 31822 xor c a 211 0 1 e b 211 0 1 4 9 11 12 18 21 22 32 34 36 37 38 39 40 41 42 43 45 50 51 53 57 58 60 61 62 63 65 68 69 71 72 73 74 76 77 78 82 86 88 89 90 91 92 93 94 96 97 100 101 103 104 105 107 108 109 110 113 114 115 117 125 127 128 129 131 132 133 134 136 139 142 143 145 149 150 151 152 153 156 157 159 160 161 162 165 166 170 173 175 176 177 181 184 186 187 189 190 191 192 193 196 200 202 205 206 208 # 31823 xor c a 211 0 1 f b 211 0 1 f # 31824 xor c a 211 0 1 f b 211 0 1 e # 31825 xor c a 211 0 1 f b 211 0 1 f # 31826 xor c a 211 0 1 f b 211 0 1 f # 31827 xor c a 211 0 1 f b 211 0 1 f # 31828 xor c a 211 0 1 f b 211 0 1 2 3 14 18 24 28 29 30 32 34 36 40 41 42 44 45 46 49 50 53 54 64 68 69 70 71 72 75 77 78 80 81 82 83 84 85 87 89 91 92 93 94 95 101 106 107 109 112 119 121 126 127 128 130 134 135 136 137 140 141 144 145 146 150 154 155 156 157 159 160 164 166 168 170 171 176 180 182 183 184 186 187 190 192 196 198 199 200 201 204 205 207 208 209 # 31829 xor c a 211 0 1 0 2 3 8 9 11 13 15 16 17 18 20 21 22 24 25 26 27 28 29 30 33 35 37 41 43 44 45 46 48 49 50 51 52 53 54 56 57 62 63 67 68 69 70 76 78 79 81 84 86 89 90 91 93 97 100 102 108 112 113 115 125 126 128 130 134 135 136 141 142 147 151 152 155 159 163 164 166 170 171 173 175 176 177 181 183 186 188 192 193 198 199 200 201 202 203 204 206 207 208 b 211 0 1 0 2 3 8 9 11 13 15 16 17 18 20 21 22 24 25 26 27 28 29 30 33 35 37 41 43 44 45 46 48 49 50 51 52 53 54 56 57 62 63 67 68 69 70 76 78 79 81 84 86 89 90 91 93 97 100 102 108 112 113 115 125 126 128 130 134 135 136 141 142 147 151 152 155 159 163 164 166 170 171 173 175 176 177 181 183 186 188 192 193 198 199 200 201 202 203 204 206 207 208 # 31830 xor c a 211 0 1 0 2 3 8 9 11 13 15 16 17 18 20 21 22 24 25 26 27 28 29 30 33 35 37 41 43 44 45 46 48 49 50 51 52 53 54 56 57 62 63 67 68 69 70 76 78 79 81 84 86 89 90 91 93 97 100 102 108 112 113 115 125 126 128 130 134 135 136 141 142 147 151 152 155 159 163 164 166 170 171 173 175 176 177 181 183 186 188 192 193 198 199 200 201 202 203 204 206 207 208 b 211 0 1 e # 31831 xor c a 211 0 1 1 5 7 8 9 11 15 18 21 22 24 26 30 34 37 39 40 42 44 48 51 55 56 59 63 67 70 71 72 73 75 76 78 79 80 82 83 84 85 86 87 90 91 92 97 98 99 101 102 105 106 109 113 116 120 121 122 126 127 129 134 135 137 139 140 141 142 144 146 147 149 150 152 153 154 158 159 163 164 165 166 167 168 170 172 173 174 175 176 182 186 187 188 189 190 193 194 195 196 197 198 199 200 201 203 205 206 210 b 211 0 1 1 5 7 8 9 11 15 18 21 22 24 26 30 34 37 39 40 42 44 48 51 55 56 59 63 67 70 71 72 73 75 76 78 79 80 82 83 84 85 86 87 90 91 92 97 98 99 101 102 105 106 109 113 116 120 121 122 126 127 129 134 135 137 139 140 141 142 144 146 147 149 150 152 153 154 158 159 163 164 165 166 167 168 170 172 173 174 175 176 182 186 187 188 189 190 193 194 195 196 197 198 199 200 201 203 205 206 210 # 31832 xor c a 211 0 1 1 5 7 8 9 11 15 18 21 22 24 26 30 34 37 39 40 42 44 48 51 55 56 59 63 67 70 71 72 73 75 76 78 79 80 82 83 84 85 86 87 90 91 92 97 98 99 101 102 105 106 109 113 116 120 121 122 126 127 129 134 135 137 139 140 141 142 144 146 147 149 150 152 153 154 158 159 163 164 165 166 167 168 170 172 173 174 175 176 182 186 187 188 189 190 193 194 195 196 197 198 199 200 201 203 205 206 210 b 211 0 1 f # 31833 xor c a 211 0 1 0 1 2 9 10 13 16 19 21 22 25 26 27 30 32 33 34 36 42 46 49 51 52 54 57 59 69 71 75 77 79 80 81 82 83 84 85 88 89 90 91 95 97 98 99 100 102 104 105 108 109 111 113 114 116 118 121 123 124 125 126 129 135 137 143 148 150 152 155 156 157 160 161 162 163 166 168 170 172 173 177 179 189 190 192 193 195 196 199 205 208 209 b 211 0 1 0 1 2 9 10 13 16 19 21 22 25 26 27 30 32 33 34 36 42 46 49 51 52 54 57 59 69 71 75 77 79 80 81 82 83 84 85 88 89 90 91 95 97 98 99 100 102 104 105 108 109 111 113 114 116 118 121 123 124 125 126 129 135 137 143 148 150 152 155 156 157 160 161 162 163 166 168 170 172 173 177 179 189 190 192 193 195 196 199 205 208 209 # 31834 xor c a 211 0 1 0 1 2 9 10 13 16 19 21 22 25 26 27 30 32 33 34 36 42 46 49 51 52 54 57 59 69 71 75 77 79 80 81 82 83 84 85 88 89 90 91 95 97 98 99 100 102 104 105 108 109 111 113 114 116 118 121 123 124 125 126 129 135 137 143 148 150 152 155 156 157 160 161 162 163 166 168 170 172 173 177 179 189 190 192 193 195 196 199 205 208 209 b 211 0 1 2 4 6 8 11 13 16 18 19 20 21 26 27 29 31 32 33 35 37 38 39 42 43 46 48 49 51 52 53 54 55 57 58 59 61 64 65 68 74 75 77 78 80 82 84 85 88 90 94 97 99 101 103 104 110 111 112 113 115 116 117 118 121 122 126 127 130 131 132 133 135 137 144 145 146 147 148 149 152 153 154 159 160 161 162 163 164 166 170 171 174 177 180 183 187 188 189 190 192 193 195 196 197 198 201 202 203 204 205 208 # 31835 xor c a 211 0 1 e b 211 0 1 e # 31836 xor c a 211 0 1 e b 211 1 0 e # 31837 xor c a 211 0 1 e b 211 0 1 e # 31838 xor c a 211 0 1 e b 211 1 0 f # 31839 xor c a 211 0 1 e b 211 0 1 e # 31840 xor c a 211 0 1 e b 211 1 0 0 1 2 3 8 12 14 15 17 18 20 23 26 27 35 37 41 42 45 46 49 50 55 56 60 61 62 64 69 70 71 72 73 74 75 76 77 80 82 83 84 85 86 87 91 92 95 96 103 106 111 112 114 115 117 118 120 123 124 125 126 127 132 133 136 138 140 143 146 147 148 149 151 153 154 157 159 161 164 165 166 167 169 170 172 183 187 189 191 192 193 199 202 206 207 209 # 31841 xor c a 211 0 1 f b 211 0 1 f # 31842 xor c a 211 0 1 f b 211 1 0 e # 31843 xor c a 211 0 1 f b 211 0 1 f # 31844 xor c a 211 0 1 f b 211 1 0 f # 31845 xor c a 211 0 1 f b 211 0 1 f # 31846 xor c a 211 0 1 f b 211 1 0 0 2 4 6 8 10 11 13 15 17 18 19 22 24 27 28 32 34 36 37 38 39 41 42 44 47 50 53 54 58 59 66 69 70 72 73 74 76 82 83 85 87 88 90 94 95 96 99 103 104 107 108 109 113 115 116 118 119 120 124 125 131 132 133 134 135 138 141 143 144 145 146 147 151 152 153 155 156 160 161 162 163 164 165 168 173 174 176 177 178 179 182 186 187 188 191 192 195 196 197 198 199 206 208 209 # 31847 xor c a 211 0 1 9 10 11 12 13 16 19 20 21 26 27 29 30 31 32 36 37 38 39 41 42 44 46 47 48 50 51 53 54 55 57 59 60 62 63 64 65 68 72 75 76 79 82 83 85 87 88 89 90 98 100 103 104 105 107 109 110 111 117 119 120 121 125 126 127 131 132 133 134 136 139 141 142 146 147 150 154 155 156 158 160 161 163 164 165 174 175 177 178 179 182 184 185 187 189 190 192 194 195 200 201 202 204 205 208 209 b 211 0 1 9 10 11 12 13 16 19 20 21 26 27 29 30 31 32 36 37 38 39 41 42 44 46 47 48 50 51 53 54 55 57 59 60 62 63 64 65 68 72 75 76 79 82 83 85 87 88 89 90 98 100 103 104 105 107 109 110 111 117 119 120 121 125 126 127 131 132 133 134 136 139 141 142 146 147 150 154 155 156 158 160 161 163 164 165 174 175 177 178 179 182 184 185 187 189 190 192 194 195 200 201 202 204 205 208 209 # 31848 xor c a 211 0 1 9 10 11 12 13 16 19 20 21 26 27 29 30 31 32 36 37 38 39 41 42 44 46 47 48 50 51 53 54 55 57 59 60 62 63 64 65 68 72 75 76 79 82 83 85 87 88 89 90 98 100 103 104 105 107 109 110 111 117 119 120 121 125 126 127 131 132 133 134 136 139 141 142 146 147 150 154 155 156 158 160 161 163 164 165 174 175 177 178 179 182 184 185 187 189 190 192 194 195 200 201 202 204 205 208 209 b 211 1 0 e # 31849 xor c a 211 0 1 3 5 6 7 9 10 12 15 17 18 19 21 22 23 24 25 26 28 29 33 34 35 36 37 38 39 40 41 43 44 45 46 48 49 54 57 60 61 62 64 65 68 69 71 72 73 74 75 76 79 81 82 83 85 86 87 88 91 93 96 97 98 100 105 110 111 113 116 119 120 122 126 130 131 132 133 135 136 137 145 146 152 154 156 159 160 162 163 166 169 170 173 174 176 177 178 179 181 183 185 187 189 190 192 193 197 199 200 206 207 210 b 211 0 1 3 5 6 7 9 10 12 15 17 18 19 21 22 23 24 25 26 28 29 33 34 35 36 37 38 39 40 41 43 44 45 46 48 49 54 57 60 61 62 64 65 68 69 71 72 73 74 75 76 79 81 82 83 85 86 87 88 91 93 96 97 98 100 105 110 111 113 116 119 120 122 126 130 131 132 133 135 136 137 145 146 152 154 156 159 160 162 163 166 169 170 173 174 176 177 178 179 181 183 185 187 189 190 192 193 197 199 200 206 207 210 # 31850 xor c a 211 0 1 3 5 6 7 9 10 12 15 17 18 19 21 22 23 24 25 26 28 29 33 34 35 36 37 38 39 40 41 43 44 45 46 48 49 54 57 60 61 62 64 65 68 69 71 72 73 74 75 76 79 81 82 83 85 86 87 88 91 93 96 97 98 100 105 110 111 113 116 119 120 122 126 130 131 132 133 135 136 137 145 146 152 154 156 159 160 162 163 166 169 170 173 174 176 177 178 179 181 183 185 187 189 190 192 193 197 199 200 206 207 210 b 211 1 0 f # 31851 xor c a 211 0 1 4 6 7 8 10 13 15 19 23 24 27 28 29 30 33 34 38 39 40 41 45 47 50 51 52 53 55 57 60 66 68 69 71 73 75 78 79 80 83 85 86 87 88 91 93 95 96 99 100 101 105 107 110 112 117 123 125 128 129 130 131 135 137 138 141 142 143 144 145 148 152 153 154 163 164 165 166 168 169 170 178 180 182 183 184 185 189 190 197 200 202 204 205 206 210 b 211 0 1 4 6 7 8 10 13 15 19 23 24 27 28 29 30 33 34 38 39 40 41 45 47 50 51 52 53 55 57 60 66 68 69 71 73 75 78 79 80 83 85 86 87 88 91 93 95 96 99 100 101 105 107 110 112 117 123 125 128 129 130 131 135 137 138 141 142 143 144 145 148 152 153 154 163 164 165 166 168 169 170 178 180 182 183 184 185 189 190 197 200 202 204 205 206 210 # 31852 xor c a 211 0 1 4 6 7 8 10 13 15 19 23 24 27 28 29 30 33 34 38 39 40 41 45 47 50 51 52 53 55 57 60 66 68 69 71 73 75 78 79 80 83 85 86 87 88 91 93 95 96 99 100 101 105 107 110 112 117 123 125 128 129 130 131 135 137 138 141 142 143 144 145 148 152 153 154 163 164 165 166 168 169 170 178 180 182 183 184 185 189 190 197 200 202 204 205 206 210 b 211 1 0 1 4 6 11 12 13 15 19 20 21 26 27 28 33 34 35 37 39 42 43 45 46 53 55 60 61 62 64 65 70 71 72 73 74 76 77 78 79 81 84 85 87 89 92 93 95 96 97 98 101 102 104 105 111 113 115 118 119 122 123 126 127 129 132 134 136 138 143 146 147 148 149 152 156 157 160 162 164 166 167 168 169 174 175 176 177 179 181 186 189 190 194 196 197 198 199 200 202 204 205 206 207 208 210 # 31853 xor c a 211 0 1 e b 211 0 1 e # 31854 xor c a 211 0 1 e b 211 1 1 e # 31855 xor c a 211 0 1 e b 211 0 1 e # 31856 xor c a 211 0 1 e b 211 1 1 f # 31857 xor c a 211 0 1 e b 211 0 1 e # 31858 xor c a 211 0 1 e b 211 1 1 2 3 4 8 12 13 14 16 17 23 26 27 30 32 33 35 37 47 49 51 53 59 64 66 72 73 74 75 78 79 80 85 86 87 90 91 93 94 97 98 99 103 105 106 107 109 113 115 116 118 121 122 123 124 125 128 130 135 141 142 143 144 146 147 149 151 154 160 164 165 166 167 168 174 177 179 181 182 183 184 185 189 193 195 196 198 199 200 202 204 205 206 208 # 31859 xor c a 211 0 1 f b 211 0 1 f # 31860 xor c a 211 0 1 f b 211 1 1 e # 31861 xor c a 211 0 1 f b 211 0 1 f # 31862 xor c a 211 0 1 f b 211 1 1 f # 31863 xor c a 211 0 1 f b 211 0 1 f # 31864 xor c a 211 0 1 f b 211 1 1 8 10 11 13 16 17 20 21 24 27 29 34 36 38 41 43 44 45 47 48 49 51 52 53 55 57 58 60 61 62 65 66 68 69 70 72 75 77 80 81 83 85 86 87 88 91 94 95 96 97 99 101 105 106 108 110 111 113 114 115 116 117 121 123 124 126 127 128 129 130 132 134 137 138 149 150 153 157 160 162 163 164 169 170 174 175 176 180 181 182 184 185 186 188 191 192 194 195 196 199 203 204 206 207 208 209 # 31865 xor c a 211 0 1 0 1 2 4 5 8 9 10 11 12 13 14 15 16 19 21 24 25 26 27 29 30 32 33 35 36 37 39 41 42 44 45 46 47 51 52 53 54 55 57 59 60 63 65 66 71 78 79 87 89 90 93 95 96 100 101 103 107 108 112 113 114 115 117 118 119 120 123 125 126 129 132 133 135 138 139 140 145 147 148 150 151 152 154 159 161 162 164 167 168 169 170 174 180 181 182 185 186 191 194 195 198 201 202 205 206 210 b 211 0 1 0 1 2 4 5 8 9 10 11 12 13 14 15 16 19 21 24 25 26 27 29 30 32 33 35 36 37 39 41 42 44 45 46 47 51 52 53 54 55 57 59 60 63 65 66 71 78 79 87 89 90 93 95 96 100 101 103 107 108 112 113 114 115 117 118 119 120 123 125 126 129 132 133 135 138 139 140 145 147 148 150 151 152 154 159 161 162 164 167 168 169 170 174 180 181 182 185 186 191 194 195 198 201 202 205 206 210 # 31866 xor c a 211 0 1 0 1 2 4 5 8 9 10 11 12 13 14 15 16 19 21 24 25 26 27 29 30 32 33 35 36 37 39 41 42 44 45 46 47 51 52 53 54 55 57 59 60 63 65 66 71 78 79 87 89 90 93 95 96 100 101 103 107 108 112 113 114 115 117 118 119 120 123 125 126 129 132 133 135 138 139 140 145 147 148 150 151 152 154 159 161 162 164 167 168 169 170 174 180 181 182 185 186 191 194 195 198 201 202 205 206 210 b 211 1 1 e # 31867 xor c a 211 0 1 0 2 7 8 12 15 16 17 18 20 21 22 24 25 28 29 31 32 33 37 41 42 43 46 48 51 57 58 60 61 63 64 65 69 70 71 74 75 76 78 79 80 82 84 91 93 94 97 98 99 100 102 104 106 107 108 109 111 117 118 119 120 122 124 132 135 136 139 141 142 143 145 147 148 151 154 156 158 160 164 165 169 171 172 173 174 175 176 178 179 180 186 188 189 191 193 195 196 201 203 204 206 207 208 209 b 211 0 1 0 2 7 8 12 15 16 17 18 20 21 22 24 25 28 29 31 32 33 37 41 42 43 46 48 51 57 58 60 61 63 64 65 69 70 71 74 75 76 78 79 80 82 84 91 93 94 97 98 99 100 102 104 106 107 108 109 111 117 118 119 120 122 124 132 135 136 139 141 142 143 145 147 148 151 154 156 158 160 164 165 169 171 172 173 174 175 176 178 179 180 186 188 189 191 193 195 196 201 203 204 206 207 208 209 # 31868 xor c a 211 0 1 0 2 7 8 12 15 16 17 18 20 21 22 24 25 28 29 31 32 33 37 41 42 43 46 48 51 57 58 60 61 63 64 65 69 70 71 74 75 76 78 79 80 82 84 91 93 94 97 98 99 100 102 104 106 107 108 109 111 117 118 119 120 122 124 132 135 136 139 141 142 143 145 147 148 151 154 156 158 160 164 165 169 171 172 173 174 175 176 178 179 180 186 188 189 191 193 195 196 201 203 204 206 207 208 209 b 211 1 1 f # 31869 xor c a 211 0 1 0 1 2 3 6 7 12 15 17 19 21 24 25 28 29 30 32 33 39 40 44 45 47 48 50 51 53 56 58 61 62 64 66 68 72 74 79 80 82 87 88 92 94 95 96 97 98 99 100 103 104 107 109 110 112 113 117 119 121 125 126 128 129 130 131 135 137 138 139 141 144 145 146 148 149 151 152 155 162 167 170 171 176 177 178 179 180 181 182 183 185 186 187 189 194 195 196 198 199 200 201 202 204 205 206 207 208 209 210 b 211 0 1 0 1 2 3 6 7 12 15 17 19 21 24 25 28 29 30 32 33 39 40 44 45 47 48 50 51 53 56 58 61 62 64 66 68 72 74 79 80 82 87 88 92 94 95 96 97 98 99 100 103 104 107 109 110 112 113 117 119 121 125 126 128 129 130 131 135 137 138 139 141 144 145 146 148 149 151 152 155 162 167 170 171 176 177 178 179 180 181 182 183 185 186 187 189 194 195 196 198 199 200 201 202 204 205 206 207 208 209 210 # 31870 xor c a 211 0 1 0 1 2 3 6 7 12 15 17 19 21 24 25 28 29 30 32 33 39 40 44 45 47 48 50 51 53 56 58 61 62 64 66 68 72 74 79 80 82 87 88 92 94 95 96 97 98 99 100 103 104 107 109 110 112 113 117 119 121 125 126 128 129 130 131 135 137 138 139 141 144 145 146 148 149 151 152 155 162 167 170 171 176 177 178 179 180 181 182 183 185 186 187 189 194 195 196 198 199 200 201 202 204 205 206 207 208 209 210 b 211 1 1 0 1 3 8 12 13 17 20 21 24 27 29 30 32 34 35 36 40 41 42 43 45 47 48 53 54 56 57 60 63 66 68 69 70 71 72 74 77 81 82 83 89 90 95 96 97 98 99 100 101 102 103 106 107 110 111 112 113 114 118 119 121 123 124 127 136 144 146 148 149 150 152 154 155 156 160 161 162 165 166 167 169 171 176 182 183 184 185 186 190 199 201 205 206 207 208 # 31871 xor c a 211 1 0 e b 211 1 0 e # 31872 xor c a 211 1 0 e b 211 0 0 e # 31873 xor c a 211 1 0 e b 211 1 0 e # 31874 xor c a 211 1 0 e b 211 0 0 f # 31875 xor c a 211 1 0 e b 211 1 0 e # 31876 xor c a 211 1 0 e b 211 0 0 1 5 6 7 10 14 15 16 22 23 25 26 28 29 30 31 32 41 42 43 45 46 47 51 52 54 58 59 61 62 64 69 70 71 72 73 74 75 76 77 78 79 82 84 88 92 94 95 99 100 101 102 103 104 105 106 108 109 114 116 119 121 124 125 129 132 134 137 138 142 143 144 145 146 148 154 158 159 162 163 164 165 168 170 172 173 174 175 177 182 183 184 185 186 189 191 192 194 195 198 199 200 201 203 207 209 # 31877 xor c a 211 1 0 f b 211 1 0 f # 31878 xor c a 211 1 0 f b 211 0 0 e # 31879 xor c a 211 1 0 f b 211 1 0 f # 31880 xor c a 211 1 0 f b 211 0 0 f # 31881 xor c a 211 1 0 f b 211 1 0 f # 31882 xor c a 211 1 0 f b 211 0 0 0 7 8 10 11 15 17 18 21 22 25 26 30 31 32 35 36 37 38 39 41 44 45 48 50 53 56 58 59 60 62 64 71 72 73 75 76 77 82 86 87 89 90 93 94 95 99 101 102 105 108 109 110 111 115 116 118 121 124 129 131 132 133 136 137 139 140 142 144 148 149 150 151 152 157 158 159 160 161 162 163 164 166 167 170 172 174 176 178 181 183 184 185 188 191 194 196 197 201 202 203 205 210 # 31883 xor c a 211 1 0 6 7 13 14 15 16 17 18 20 21 23 27 29 31 33 36 40 46 47 49 52 56 57 60 61 63 65 69 70 71 76 79 81 86 87 89 91 92 94 98 104 105 106 108 113 121 123 128 129 130 134 137 138 144 145 146 150 156 157 158 159 160 161 162 165 167 170 171 178 179 180 183 184 185 195 196 197 198 201 203 207 208 209 b 211 1 0 6 7 13 14 15 16 17 18 20 21 23 27 29 31 33 36 40 46 47 49 52 56 57 60 61 63 65 69 70 71 76 79 81 86 87 89 91 92 94 98 104 105 106 108 113 121 123 128 129 130 134 137 138 144 145 146 150 156 157 158 159 160 161 162 165 167 170 171 178 179 180 183 184 185 195 196 197 198 201 203 207 208 209 # 31884 xor c a 211 1 0 6 7 13 14 15 16 17 18 20 21 23 27 29 31 33 36 40 46 47 49 52 56 57 60 61 63 65 69 70 71 76 79 81 86 87 89 91 92 94 98 104 105 106 108 113 121 123 128 129 130 134 137 138 144 145 146 150 156 157 158 159 160 161 162 165 167 170 171 178 179 180 183 184 185 195 196 197 198 201 203 207 208 209 b 211 0 0 e # 31885 xor c a 211 1 0 2 6 7 8 10 12 14 15 17 18 19 20 22 23 24 26 29 30 31 33 35 40 43 44 46 47 48 50 51 52 53 54 55 57 60 64 66 68 72 73 75 77 78 85 88 90 92 94 95 96 97 98 102 106 107 109 110 111 118 119 120 121 123 127 128 132 136 139 142 145 146 147 149 150 152 157 161 162 166 167 168 169 170 171 173 175 176 182 185 186 187 188 189 191 192 195 197 198 200 201 204 205 206 210 b 211 1 0 2 6 7 8 10 12 14 15 17 18 19 20 22 23 24 26 29 30 31 33 35 40 43 44 46 47 48 50 51 52 53 54 55 57 60 64 66 68 72 73 75 77 78 85 88 90 92 94 95 96 97 98 102 106 107 109 110 111 118 119 120 121 123 127 128 132 136 139 142 145 146 147 149 150 152 157 161 162 166 167 168 169 170 171 173 175 176 182 185 186 187 188 189 191 192 195 197 198 200 201 204 205 206 210 # 31886 xor c a 211 1 0 2 6 7 8 10 12 14 15 17 18 19 20 22 23 24 26 29 30 31 33 35 40 43 44 46 47 48 50 51 52 53 54 55 57 60 64 66 68 72 73 75 77 78 85 88 90 92 94 95 96 97 98 102 106 107 109 110 111 118 119 120 121 123 127 128 132 136 139 142 145 146 147 149 150 152 157 161 162 166 167 168 169 170 171 173 175 176 182 185 186 187 188 189 191 192 195 197 198 200 201 204 205 206 210 b 211 0 0 f # 31887 xor c a 211 1 0 0 1 6 9 10 12 13 15 18 19 21 22 23 25 26 27 28 30 31 32 34 36 37 39 40 43 45 47 51 52 62 65 66 68 71 74 75 81 85 86 87 88 90 92 93 94 96 97 99 100 101 102 105 108 109 110 112 114 116 117 118 119 121 124 127 129 130 132 133 134 135 136 137 139 140 144 146 147 149 150 151 152 154 155 156 158 159 161 164 165 168 169 171 175 176 177 178 179 180 182 184 185 189 191 192 193 194 196 198 199 200 204 205 208 209 b 211 1 0 0 1 6 9 10 12 13 15 18 19 21 22 23 25 26 27 28 30 31 32 34 36 37 39 40 43 45 47 51 52 62 65 66 68 71 74 75 81 85 86 87 88 90 92 93 94 96 97 99 100 101 102 105 108 109 110 112 114 116 117 118 119 121 124 127 129 130 132 133 134 135 136 137 139 140 144 146 147 149 150 151 152 154 155 156 158 159 161 164 165 168 169 171 175 176 177 178 179 180 182 184 185 189 191 192 193 194 196 198 199 200 204 205 208 209 # 31888 xor c a 211 1 0 0 1 6 9 10 12 13 15 18 19 21 22 23 25 26 27 28 30 31 32 34 36 37 39 40 43 45 47 51 52 62 65 66 68 71 74 75 81 85 86 87 88 90 92 93 94 96 97 99 100 101 102 105 108 109 110 112 114 116 117 118 119 121 124 127 129 130 132 133 134 135 136 137 139 140 144 146 147 149 150 151 152 154 155 156 158 159 161 164 165 168 169 171 175 176 177 178 179 180 182 184 185 189 191 192 193 194 196 198 199 200 204 205 208 209 b 211 0 0 3 5 7 11 12 13 14 16 21 22 25 26 27 29 31 33 34 36 39 42 45 46 50 53 54 55 57 58 59 62 63 64 65 67 70 71 72 73 76 78 79 80 83 86 87 90 91 92 93 95 96 97 99 102 104 105 106 107 110 111 112 114 116 117 118 119 121 122 123 126 128 133 136 140 141 143 146 147 148 149 150 152 153 156 157 159 161 163 164 165 167 168 170 171 175 178 181 182 185 188 189 192 193 194 200 205 206 207 209 # 31889 xor c a 211 1 0 e b 211 1 0 e # 31890 xor c a 211 1 0 e b 211 0 1 e # 31891 xor c a 211 1 0 e b 211 1 0 e # 31892 xor c a 211 1 0 e b 211 0 1 f # 31893 xor c a 211 1 0 e b 211 1 0 e # 31894 xor c a 211 1 0 e b 211 0 1 0 3 4 10 13 15 17 18 19 22 23 24 25 26 27 28 31 32 34 35 36 39 40 43 45 46 48 49 52 54 55 56 57 59 61 62 67 68 69 70 78 80 83 86 92 94 96 97 100 102 103 104 108 111 112 113 114 118 119 120 123 125 126 128 130 131 133 134 139 140 141 142 144 146 148 151 152 160 164 165 169 171 172 173 175 180 181 185 186 187 191 197 198 199 200 201 202 203 204 206 210 # 31895 xor c a 211 1 0 f b 211 1 0 f # 31896 xor c a 211 1 0 f b 211 0 1 e # 31897 xor c a 211 1 0 f b 211 1 0 f # 31898 xor c a 211 1 0 f b 211 0 1 f # 31899 xor c a 211 1 0 f b 211 1 0 f # 31900 xor c a 211 1 0 f b 211 0 1 1 3 5 7 9 13 15 19 20 22 23 25 27 29 30 31 32 35 37 38 40 42 43 44 46 52 53 56 57 65 67 68 73 78 79 81 84 87 89 91 92 93 94 102 103 107 111 113 117 121 126 127 131 132 133 134 138 139 140 142 143 145 148 150 154 155 157 158 159 160 161 162 163 164 165 166 169 170 173 175 176 180 182 186 187 189 190 192 193 194 195 196 197 198 200 201 202 204 205 210 # 31901 xor c a 211 1 0 1 2 3 6 11 14 15 17 18 19 20 21 24 28 29 32 33 35 37 39 43 44 46 47 48 49 50 51 52 54 56 58 59 61 64 70 71 72 74 75 76 78 79 83 84 88 94 96 97 104 107 108 109 111 113 114 118 120 121 122 123 125 128 129 130 134 136 137 138 140 146 147 148 151 154 155 157 159 160 163 164 165 167 168 171 172 173 180 181 182 185 188 189 193 196 197 198 199 200 202 203 204 206 b 211 1 0 1 2 3 6 11 14 15 17 18 19 20 21 24 28 29 32 33 35 37 39 43 44 46 47 48 49 50 51 52 54 56 58 59 61 64 70 71 72 74 75 76 78 79 83 84 88 94 96 97 104 107 108 109 111 113 114 118 120 121 122 123 125 128 129 130 134 136 137 138 140 146 147 148 151 154 155 157 159 160 163 164 165 167 168 171 172 173 180 181 182 185 188 189 193 196 197 198 199 200 202 203 204 206 # 31902 xor c a 211 1 0 1 2 3 6 11 14 15 17 18 19 20 21 24 28 29 32 33 35 37 39 43 44 46 47 48 49 50 51 52 54 56 58 59 61 64 70 71 72 74 75 76 78 79 83 84 88 94 96 97 104 107 108 109 111 113 114 118 120 121 122 123 125 128 129 130 134 136 137 138 140 146 147 148 151 154 155 157 159 160 163 164 165 167 168 171 172 173 180 181 182 185 188 189 193 196 197 198 199 200 202 203 204 206 b 211 0 1 e # 31903 xor c a 211 1 0 1 6 7 8 12 13 14 15 16 17 18 20 28 29 30 32 34 35 36 38 39 40 41 43 44 46 47 48 49 51 52 56 57 58 59 61 65 67 69 70 72 73 75 77 78 80 81 82 83 86 88 89 93 94 95 96 97 98 100 102 103 105 106 107 108 109 110 111 112 113 118 122 123 124 127 130 132 133 136 138 139 141 143 144 145 149 151 156 157 158 161 162 163 164 168 171 173 174 176 181 182 186 187 189 191 192 193 194 197 198 199 202 204 205 206 207 210 b 211 1 0 1 6 7 8 12 13 14 15 16 17 18 20 28 29 30 32 34 35 36 38 39 40 41 43 44 46 47 48 49 51 52 56 57 58 59 61 65 67 69 70 72 73 75 77 78 80 81 82 83 86 88 89 93 94 95 96 97 98 100 102 103 105 106 107 108 109 110 111 112 113 118 122 123 124 127 130 132 133 136 138 139 141 143 144 145 149 151 156 157 158 161 162 163 164 168 171 173 174 176 181 182 186 187 189 191 192 193 194 197 198 199 202 204 205 206 207 210 # 31904 xor c a 211 1 0 1 6 7 8 12 13 14 15 16 17 18 20 28 29 30 32 34 35 36 38 39 40 41 43 44 46 47 48 49 51 52 56 57 58 59 61 65 67 69 70 72 73 75 77 78 80 81 82 83 86 88 89 93 94 95 96 97 98 100 102 103 105 106 107 108 109 110 111 112 113 118 122 123 124 127 130 132 133 136 138 139 141 143 144 145 149 151 156 157 158 161 162 163 164 168 171 173 174 176 181 182 186 187 189 191 192 193 194 197 198 199 202 204 205 206 207 210 b 211 0 1 f # 31905 xor c a 211 1 0 2 3 6 8 10 11 13 15 16 18 19 20 21 22 24 25 26 27 30 31 33 34 35 40 42 44 46 47 48 49 50 51 52 53 54 55 56 57 62 63 64 65 66 76 79 82 83 85 86 88 90 91 93 94 98 99 100 102 104 106 107 108 110 112 117 118 119 122 123 125 127 129 131 135 136 137 138 139 143 144 149 151 155 156 157 160 161 163 166 169 171 173 174 177 179 180 181 184 185 187 188 189 192 196 198 204 205 206 208 210 b 211 1 0 2 3 6 8 10 11 13 15 16 18 19 20 21 22 24 25 26 27 30 31 33 34 35 40 42 44 46 47 48 49 50 51 52 53 54 55 56 57 62 63 64 65 66 76 79 82 83 85 86 88 90 91 93 94 98 99 100 102 104 106 107 108 110 112 117 118 119 122 123 125 127 129 131 135 136 137 138 139 143 144 149 151 155 156 157 160 161 163 166 169 171 173 174 177 179 180 181 184 185 187 188 189 192 196 198 204 205 206 208 210 # 31906 xor c a 211 1 0 2 3 6 8 10 11 13 15 16 18 19 20 21 22 24 25 26 27 30 31 33 34 35 40 42 44 46 47 48 49 50 51 52 53 54 55 56 57 62 63 64 65 66 76 79 82 83 85 86 88 90 91 93 94 98 99 100 102 104 106 107 108 110 112 117 118 119 122 123 125 127 129 131 135 136 137 138 139 143 144 149 151 155 156 157 160 161 163 166 169 171 173 174 177 179 180 181 184 185 187 188 189 192 196 198 204 205 206 208 210 b 211 0 1 0 1 4 6 7 11 13 16 17 20 27 30 34 36 37 39 41 42 45 46 48 51 52 53 58 59 60 61 64 66 67 70 74 75 77 78 82 83 87 88 90 91 92 95 96 98 100 102 103 104 105 106 108 109 110 111 113 114 115 116 118 119 121 125 128 131 132 134 135 136 139 141 142 144 145 147 148 149 152 153 154 155 156 159 160 161 164 167 168 170 171 177 178 180 182 185 189 190 191 196 197 203 204 205 206 207 208 209 # 31907 xor c a 211 1 0 e b 211 1 0 e # 31908 xor c a 211 1 0 e b 211 1 0 e # 31909 xor c a 211 1 0 e b 211 1 0 e # 31910 xor c a 211 1 0 e b 211 1 0 f # 31911 xor c a 211 1 0 e b 211 1 0 e # 31912 xor c a 211 1 0 e b 211 1 0 2 3 4 5 8 11 12 13 18 19 21 24 27 30 31 32 33 34 35 36 38 39 42 44 51 53 55 58 59 60 61 64 71 73 77 78 79 80 82 85 87 89 90 92 94 97 98 99 102 103 108 111 112 113 116 121 122 126 127 129 130 131 132 133 136 137 138 139 140 141 142 143 144 146 147 148 156 160 161 162 163 164 167 169 170 172 173 174 175 176 177 178 179 182 184 186 188 190 191 193 194 195 197 198 200 202 203 205 206 208 209 210 # 31913 xor c a 211 1 0 f b 211 1 0 f # 31914 xor c a 211 1 0 f b 211 1 0 e # 31915 xor c a 211 1 0 f b 211 1 0 f # 31916 xor c a 211 1 0 f b 211 1 0 f # 31917 xor c a 211 1 0 f b 211 1 0 f # 31918 xor c a 211 1 0 f b 211 1 0 0 2 7 9 11 12 14 15 17 18 19 20 22 23 26 27 29 30 33 34 40 41 43 44 46 48 49 51 52 56 59 60 61 64 65 66 67 69 72 73 75 80 81 82 83 84 87 88 89 90 91 92 93 94 96 97 100 101 104 105 108 111 114 116 118 119 121 123 124 127 129 130 131 132 135 137 141 146 148 149 150 151 154 156 158 161 165 167 169 170 171 175 177 178 180 181 188 190 193 194 195 196 198 200 201 202 204 210 # 31919 xor c a 211 1 0 0 2 4 6 8 10 12 13 14 15 16 19 22 23 26 27 34 36 39 40 42 45 49 52 58 59 63 64 67 68 69 74 75 78 79 80 83 87 88 90 92 95 96 101 102 105 107 110 113 115 118 120 121 125 129 130 132 133 134 136 139 141 143 144 146 148 149 150 151 152 156 158 162 163 165 167 168 170 176 178 179 181 184 185 186 187 189 193 196 197 199 203 204 205 b 211 1 0 0 2 4 6 8 10 12 13 14 15 16 19 22 23 26 27 34 36 39 40 42 45 49 52 58 59 63 64 67 68 69 74 75 78 79 80 83 87 88 90 92 95 96 101 102 105 107 110 113 115 118 120 121 125 129 130 132 133 134 136 139 141 143 144 146 148 149 150 151 152 156 158 162 163 165 167 168 170 176 178 179 181 184 185 186 187 189 193 196 197 199 203 204 205 # 31920 xor c a 211 1 0 0 2 4 6 8 10 12 13 14 15 16 19 22 23 26 27 34 36 39 40 42 45 49 52 58 59 63 64 67 68 69 74 75 78 79 80 83 87 88 90 92 95 96 101 102 105 107 110 113 115 118 120 121 125 129 130 132 133 134 136 139 141 143 144 146 148 149 150 151 152 156 158 162 163 165 167 168 170 176 178 179 181 184 185 186 187 189 193 196 197 199 203 204 205 b 211 1 0 e # 31921 xor c a 211 1 0 0 1 2 4 7 8 9 14 15 16 19 20 21 22 25 26 27 28 29 31 32 33 34 35 38 48 54 55 56 57 58 59 60 61 62 63 64 65 66 68 69 70 72 74 77 78 82 83 85 94 96 97 98 99 104 105 106 108 109 115 116 117 120 121 122 124 125 127 130 131 132 138 142 143 145 148 149 150 151 153 154 159 160 162 164 166 167 168 169 172 173 176 177 178 179 181 183 184 188 189 191 196 199 200 203 b 211 1 0 0 1 2 4 7 8 9 14 15 16 19 20 21 22 25 26 27 28 29 31 32 33 34 35 38 48 54 55 56 57 58 59 60 61 62 63 64 65 66 68 69 70 72 74 77 78 82 83 85 94 96 97 98 99 104 105 106 108 109 115 116 117 120 121 122 124 125 127 130 131 132 138 142 143 145 148 149 150 151 153 154 159 160 162 164 166 167 168 169 172 173 176 177 178 179 181 183 184 188 189 191 196 199 200 203 # 31922 xor c a 211 1 0 0 1 2 4 7 8 9 14 15 16 19 20 21 22 25 26 27 28 29 31 32 33 34 35 38 48 54 55 56 57 58 59 60 61 62 63 64 65 66 68 69 70 72 74 77 78 82 83 85 94 96 97 98 99 104 105 106 108 109 115 116 117 120 121 122 124 125 127 130 131 132 138 142 143 145 148 149 150 151 153 154 159 160 162 164 166 167 168 169 172 173 176 177 178 179 181 183 184 188 189 191 196 199 200 203 b 211 1 0 f # 31923 xor c a 211 1 0 0 2 3 10 11 12 13 15 16 21 22 26 27 30 32 33 34 36 38 48 50 54 56 57 64 66 67 68 72 76 77 78 79 84 86 87 90 91 96 99 100 101 102 103 109 113 114 117 119 122 123 124 127 129 134 135 136 138 142 143 144 145 148 150 151 152 153 154 156 157 160 161 162 165 166 168 169 174 176 179 180 182 186 190 192 201 203 206 208 210 b 211 1 0 0 2 3 10 11 12 13 15 16 21 22 26 27 30 32 33 34 36 38 48 50 54 56 57 64 66 67 68 72 76 77 78 79 84 86 87 90 91 96 99 100 101 102 103 109 113 114 117 119 122 123 124 127 129 134 135 136 138 142 143 144 145 148 150 151 152 153 154 156 157 160 161 162 165 166 168 169 174 176 179 180 182 186 190 192 201 203 206 208 210 # 31924 xor c a 211 1 0 0 2 3 10 11 12 13 15 16 21 22 26 27 30 32 33 34 36 38 48 50 54 56 57 64 66 67 68 72 76 77 78 79 84 86 87 90 91 96 99 100 101 102 103 109 113 114 117 119 122 123 124 127 129 134 135 136 138 142 143 144 145 148 150 151 152 153 154 156 157 160 161 162 165 166 168 169 174 176 179 180 182 186 190 192 201 203 206 208 210 b 211 1 0 1 2 3 6 8 11 13 16 17 18 21 22 28 29 32 35 40 41 43 45 48 50 55 56 57 59 61 64 65 69 70 71 73 74 75 76 80 82 84 88 94 97 98 100 108 109 110 111 112 115 116 117 119 124 125 126 128 130 131 132 134 136 138 139 140 142 143 144 146 147 148 149 153 154 156 158 159 160 163 164 168 171 172 173 174 175 181 183 184 188 191 192 193 194 198 199 202 206 208 210 # 31925 xor c a 211 1 0 e b 211 1 0 e # 31926 xor c a 211 1 0 e b 211 1 1 e # 31927 xor c a 211 1 0 e b 211 1 0 e # 31928 xor c a 211 1 0 e b 211 1 1 f # 31929 xor c a 211 1 0 e b 211 1 0 e # 31930 xor c a 211 1 0 e b 211 1 1 6 7 10 11 12 13 14 16 17 19 21 22 23 24 26 31 32 35 36 38 41 45 46 48 57 58 59 61 63 65 66 68 69 70 73 74 75 76 77 79 81 83 85 86 87 88 89 91 92 93 94 96 97 98 99 100 109 111 112 113 115 116 118 123 127 129 130 133 135 137 141 144 145 147 149 153 157 159 160 162 169 170 171 172 174 175 176 181 182 186 187 188 191 192 194 195 196 200 202 203 204 205 207 209 210 # 31931 xor c a 211 1 0 f b 211 1 0 f # 31932 xor c a 211 1 0 f b 211 1 1 e # 31933 xor c a 211 1 0 f b 211 1 0 f # 31934 xor c a 211 1 0 f b 211 1 1 f # 31935 xor c a 211 1 0 f b 211 1 0 f # 31936 xor c a 211 1 0 f b 211 1 1 1 2 3 5 6 7 8 11 13 14 16 17 18 20 23 24 27 30 31 32 34 37 41 43 44 45 46 47 48 49 50 51 52 54 55 57 58 59 62 64 65 68 69 70 78 80 81 83 85 86 87 88 89 90 93 96 97 98 99 100 101 104 108 111 113 114 115 116 117 119 122 123 124 126 127 129 133 137 138 139 142 143 144 146 147 151 156 161 162 163 167 169 170 171 174 176 178 180 182 184 186 187 188 189 192 194 198 199 201 206 208 209 # 31937 xor c a 211 1 0 3 5 8 10 13 20 22 25 26 27 28 29 32 33 34 36 39 40 42 46 47 48 50 53 54 55 56 57 58 61 62 64 65 66 75 82 83 86 87 89 91 92 96 97 98 103 105 107 109 111 113 114 115 117 118 119 125 126 128 129 130 131 132 134 141 143 144 145 148 150 155 159 160 162 163 165 167 168 169 172 174 178 180 181 185 189 192 197 200 204 206 208 209 210 b 211 1 0 3 5 8 10 13 20 22 25 26 27 28 29 32 33 34 36 39 40 42 46 47 48 50 53 54 55 56 57 58 61 62 64 65 66 75 82 83 86 87 89 91 92 96 97 98 103 105 107 109 111 113 114 115 117 118 119 125 126 128 129 130 131 132 134 141 143 144 145 148 150 155 159 160 162 163 165 167 168 169 172 174 178 180 181 185 189 192 197 200 204 206 208 209 210 # 31938 xor c a 211 1 0 3 5 8 10 13 20 22 25 26 27 28 29 32 33 34 36 39 40 42 46 47 48 50 53 54 55 56 57 58 61 62 64 65 66 75 82 83 86 87 89 91 92 96 97 98 103 105 107 109 111 113 114 115 117 118 119 125 126 128 129 130 131 132 134 141 143 144 145 148 150 155 159 160 162 163 165 167 168 169 172 174 178 180 181 185 189 192 197 200 204 206 208 209 210 b 211 1 1 e # 31939 xor c a 211 1 0 0 3 4 9 10 11 12 14 17 18 19 23 25 26 27 28 29 33 35 36 37 40 41 43 47 48 49 53 61 62 68 69 70 71 72 75 77 78 80 82 83 84 88 89 90 94 95 96 99 100 103 104 105 106 108 110 112 113 115 117 120 121 129 130 135 137 141 142 144 146 147 151 153 155 156 158 161 162 167 169 171 172 173 174 177 181 185 190 193 194 195 198 201 203 204 209 210 b 211 1 0 0 3 4 9 10 11 12 14 17 18 19 23 25 26 27 28 29 33 35 36 37 40 41 43 47 48 49 53 61 62 68 69 70 71 72 75 77 78 80 82 83 84 88 89 90 94 95 96 99 100 103 104 105 106 108 110 112 113 115 117 120 121 129 130 135 137 141 142 144 146 147 151 153 155 156 158 161 162 167 169 171 172 173 174 177 181 185 190 193 194 195 198 201 203 204 209 210 # 31940 xor c a 211 1 0 0 3 4 9 10 11 12 14 17 18 19 23 25 26 27 28 29 33 35 36 37 40 41 43 47 48 49 53 61 62 68 69 70 71 72 75 77 78 80 82 83 84 88 89 90 94 95 96 99 100 103 104 105 106 108 110 112 113 115 117 120 121 129 130 135 137 141 142 144 146 147 151 153 155 156 158 161 162 167 169 171 172 173 174 177 181 185 190 193 194 195 198 201 203 204 209 210 b 211 1 1 f # 31941 xor c a 211 1 0 1 3 5 7 10 11 12 13 14 16 22 25 26 29 31 32 34 35 37 38 39 46 49 50 51 58 59 64 69 70 71 74 75 76 77 78 80 81 83 85 87 91 92 93 94 98 101 103 107 108 111 114 120 121 124 126 127 129 131 133 135 136 137 138 139 141 142 143 147 148 154 155 156 157 158 160 162 166 169 171 172 173 174 177 178 182 183 184 185 186 188 189 190 193 194 197 198 199 201 202 204 210 b 211 1 0 1 3 5 7 10 11 12 13 14 16 22 25 26 29 31 32 34 35 37 38 39 46 49 50 51 58 59 64 69 70 71 74 75 76 77 78 80 81 83 85 87 91 92 93 94 98 101 103 107 108 111 114 120 121 124 126 127 129 131 133 135 136 137 138 139 141 142 143 147 148 154 155 156 157 158 160 162 166 169 171 172 173 174 177 178 182 183 184 185 186 188 189 190 193 194 197 198 199 201 202 204 210 # 31942 xor c a 211 1 0 1 3 5 7 10 11 12 13 14 16 22 25 26 29 31 32 34 35 37 38 39 46 49 50 51 58 59 64 69 70 71 74 75 76 77 78 80 81 83 85 87 91 92 93 94 98 101 103 107 108 111 114 120 121 124 126 127 129 131 133 135 136 137 138 139 141 142 143 147 148 154 155 156 157 158 160 162 166 169 171 172 173 174 177 178 182 183 184 185 186 188 189 190 193 194 197 198 199 201 202 204 210 b 211 1 1 0 1 3 7 8 10 15 16 17 18 21 23 24 25 29 30 34 35 36 38 39 40 41 47 49 51 52 53 54 57 58 59 60 61 62 65 67 70 72 73 77 79 80 81 82 85 86 87 88 89 90 93 94 95 96 97 98 105 107 108 109 110 113 114 115 116 117 118 120 121 122 125 126 128 129 131 133 135 136 137 138 139 141 143 144 146 149 150 151 152 153 156 160 161 164 165 166 167 169 170 171 173 174 177 178 180 181 183 184 185 186 188 190 191 199 200 202 205 206 208 210 # 31943 xor c a 211 1 1 e b 211 1 1 e # 31944 xor c a 211 1 1 e b 211 0 0 e # 31945 xor c a 211 1 1 e b 211 1 1 e # 31946 xor c a 211 1 1 e b 211 0 0 f # 31947 xor c a 211 1 1 e b 211 1 1 e # 31948 xor c a 211 1 1 e b 211 0 0 0 4 9 13 15 17 19 20 21 22 24 26 31 32 33 35 37 40 41 42 44 47 48 49 50 51 52 53 54 55 57 61 64 65 66 67 68 71 72 75 77 78 80 81 83 87 89 91 93 94 96 97 99 101 102 104 106 109 110 114 115 118 119 121 123 124 126 131 132 133 134 135 137 140 142 144 145 149 150 152 155 156 167 169 171 173 176 179 184 185 187 188 192 193 194 196 203 208 209 # 31949 xor c a 211 1 1 f b 211 1 1 f # 31950 xor c a 211 1 1 f b 211 0 0 e # 31951 xor c a 211 1 1 f b 211 1 1 f # 31952 xor c a 211 1 1 f b 211 0 0 f # 31953 xor c a 211 1 1 f b 211 1 1 f # 31954 xor c a 211 1 1 f b 211 0 0 2 3 9 10 11 12 14 19 20 21 22 23 27 29 30 31 33 34 38 39 40 42 43 44 45 46 55 56 58 61 63 67 69 76 78 80 85 89 91 92 93 96 97 98 100 102 104 106 107 109 110 112 117 118 120 124 125 126 127 129 135 136 138 140 141 143 145 148 150 154 156 157 161 162 163 166 173 176 177 178 179 181 183 188 189 190 192 196 197 201 202 203 204 207 210 # 31955 xor c a 211 1 1 2 7 11 12 13 14 16 17 18 19 21 22 24 25 27 29 31 32 34 36 39 40 41 42 43 44 45 46 48 49 57 58 60 63 64 67 68 70 75 79 80 81 85 86 88 89 90 98 100 101 102 105 109 112 113 114 115 122 124 125 126 129 134 135 137 140 141 142 147 148 149 153 154 156 161 162 163 165 168 169 170 173 174 175 178 183 188 189 190 191 192 193 194 195 200 202 205 210 b 211 1 1 2 7 11 12 13 14 16 17 18 19 21 22 24 25 27 29 31 32 34 36 39 40 41 42 43 44 45 46 48 49 57 58 60 63 64 67 68 70 75 79 80 81 85 86 88 89 90 98 100 101 102 105 109 112 113 114 115 122 124 125 126 129 134 135 137 140 141 142 147 148 149 153 154 156 161 162 163 165 168 169 170 173 174 175 178 183 188 189 190 191 192 193 194 195 200 202 205 210 # 31956 xor c a 211 1 1 2 7 11 12 13 14 16 17 18 19 21 22 24 25 27 29 31 32 34 36 39 40 41 42 43 44 45 46 48 49 57 58 60 63 64 67 68 70 75 79 80 81 85 86 88 89 90 98 100 101 102 105 109 112 113 114 115 122 124 125 126 129 134 135 137 140 141 142 147 148 149 153 154 156 161 162 163 165 168 169 170 173 174 175 178 183 188 189 190 191 192 193 194 195 200 202 205 210 b 211 0 0 e # 31957 xor c a 211 1 1 0 1 3 4 6 9 10 13 14 18 23 24 25 29 30 31 34 36 37 38 39 41 43 47 51 52 55 57 58 59 61 62 63 67 70 71 72 74 79 80 82 83 84 88 93 95 97 98 99 101 104 106 109 114 118 120 122 127 129 131 132 133 134 135 137 139 140 141 142 144 145 146 149 150 152 153 154 158 159 162 163 165 166 167 169 172 175 179 180 183 187 188 190 191 192 194 197 198 199 200 202 204 208 b 211 1 1 0 1 3 4 6 9 10 13 14 18 23 24 25 29 30 31 34 36 37 38 39 41 43 47 51 52 55 57 58 59 61 62 63 67 70 71 72 74 79 80 82 83 84 88 93 95 97 98 99 101 104 106 109 114 118 120 122 127 129 131 132 133 134 135 137 139 140 141 142 144 145 146 149 150 152 153 154 158 159 162 163 165 166 167 169 172 175 179 180 183 187 188 190 191 192 194 197 198 199 200 202 204 208 # 31958 xor c a 211 1 1 0 1 3 4 6 9 10 13 14 18 23 24 25 29 30 31 34 36 37 38 39 41 43 47 51 52 55 57 58 59 61 62 63 67 70 71 72 74 79 80 82 83 84 88 93 95 97 98 99 101 104 106 109 114 118 120 122 127 129 131 132 133 134 135 137 139 140 141 142 144 145 146 149 150 152 153 154 158 159 162 163 165 166 167 169 172 175 179 180 183 187 188 190 191 192 194 197 198 199 200 202 204 208 b 211 0 0 f # 31959 xor c a 211 1 1 0 1 2 3 4 6 7 12 13 17 19 20 21 22 24 29 30 31 32 33 34 35 37 40 41 42 43 44 45 48 51 54 55 56 59 61 62 64 65 66 67 77 78 81 82 85 87 89 90 91 92 93 96 100 101 102 106 108 110 113 114 115 116 118 120 121 123 124 128 129 130 132 134 135 136 139 140 142 144 145 147 148 149 150 151 152 154 156 157 158 160 161 162 165 167 169 170 173 174 177 178 180 181 183 187 191 192 197 200 201 202 204 210 b 211 1 1 0 1 2 3 4 6 7 12 13 17 19 20 21 22 24 29 30 31 32 33 34 35 37 40 41 42 43 44 45 48 51 54 55 56 59 61 62 64 65 66 67 77 78 81 82 85 87 89 90 91 92 93 96 100 101 102 106 108 110 113 114 115 116 118 120 121 123 124 128 129 130 132 134 135 136 139 140 142 144 145 147 148 149 150 151 152 154 156 157 158 160 161 162 165 167 169 170 173 174 177 178 180 181 183 187 191 192 197 200 201 202 204 210 # 31960 xor c a 211 1 1 0 1 2 3 4 6 7 12 13 17 19 20 21 22 24 29 30 31 32 33 34 35 37 40 41 42 43 44 45 48 51 54 55 56 59 61 62 64 65 66 67 77 78 81 82 85 87 89 90 91 92 93 96 100 101 102 106 108 110 113 114 115 116 118 120 121 123 124 128 129 130 132 134 135 136 139 140 142 144 145 147 148 149 150 151 152 154 156 157 158 160 161 162 165 167 169 170 173 174 177 178 180 181 183 187 191 192 197 200 201 202 204 210 b 211 0 0 4 7 8 9 11 12 13 15 16 24 25 26 30 31 32 34 35 36 41 43 46 48 50 51 56 58 60 61 62 63 64 65 66 67 71 72 74 76 77 78 79 80 81 82 86 88 89 91 94 99 100 102 103 104 107 110 114 116 117 118 123 124 125 129 133 134 139 141 142 143 145 149 150 151 153 154 155 156 162 165 166 167 168 169 170 172 173 178 179 182 183 185 186 189 190 191 193 195 197 198 200 201 202 203 207 208 210 # 31961 xor c a 211 1 1 e b 211 1 1 e # 31962 xor c a 211 1 1 e b 211 0 1 e # 31963 xor c a 211 1 1 e b 211 1 1 e # 31964 xor c a 211 1 1 e b 211 0 1 f # 31965 xor c a 211 1 1 e b 211 1 1 e # 31966 xor c a 211 1 1 e b 211 0 1 1 2 3 5 6 7 9 10 16 21 25 26 31 32 34 38 39 41 45 46 49 50 51 52 56 58 64 65 66 69 71 73 75 77 78 79 80 81 83 84 85 87 88 92 93 94 95 96 97 101 102 103 104 106 109 110 117 121 122 124 125 129 130 131 132 133 134 136 137 138 141 143 145 149 150 151 152 154 155 159 160 161 162 163 164 165 167 169 170 171 172 174 175 179 184 187 188 190 191 197 198 199 200 201 202 205 207 209 # 31967 xor c a 211 1 1 f b 211 1 1 f # 31968 xor c a 211 1 1 f b 211 0 1 e # 31969 xor c a 211 1 1 f b 211 1 1 f # 31970 xor c a 211 1 1 f b 211 0 1 f # 31971 xor c a 211 1 1 f b 211 1 1 f # 31972 xor c a 211 1 1 f b 211 0 1 0 2 4 7 9 10 11 15 18 20 21 22 25 26 27 28 29 31 34 36 41 43 45 46 47 48 50 51 53 56 59 61 63 66 68 70 73 76 79 80 82 83 87 88 89 90 92 94 96 97 98 99 101 104 105 106 108 111 113 114 115 118 119 124 126 129 134 137 138 141 142 143 144 145 148 152 156 158 159 160 164 166 167 171 176 177 178 179 181 183 185 188 191 192 193 199 200 201 204 205 206 207 208 210 # 31973 xor c a 211 1 1 4 5 6 8 11 12 17 18 21 22 23 24 25 27 28 29 30 31 33 36 37 38 39 42 46 47 49 51 53 56 57 58 60 61 64 65 66 67 68 69 70 71 72 73 77 80 81 84 85 88 90 91 95 98 99 100 102 103 109 110 111 112 116 117 118 119 121 125 127 128 130 131 132 133 134 135 136 144 146 147 149 152 153 154 156 158 159 160 161 162 165 169 170 171 173 174 177 178 179 188 190 193 194 195 199 201 203 204 b 211 1 1 4 5 6 8 11 12 17 18 21 22 23 24 25 27 28 29 30 31 33 36 37 38 39 42 46 47 49 51 53 56 57 58 60 61 64 65 66 67 68 69 70 71 72 73 77 80 81 84 85 88 90 91 95 98 99 100 102 103 109 110 111 112 116 117 118 119 121 125 127 128 130 131 132 133 134 135 136 144 146 147 149 152 153 154 156 158 159 160 161 162 165 169 170 171 173 174 177 178 179 188 190 193 194 195 199 201 203 204 # 31974 xor c a 211 1 1 4 5 6 8 11 12 17 18 21 22 23 24 25 27 28 29 30 31 33 36 37 38 39 42 46 47 49 51 53 56 57 58 60 61 64 65 66 67 68 69 70 71 72 73 77 80 81 84 85 88 90 91 95 98 99 100 102 103 109 110 111 112 116 117 118 119 121 125 127 128 130 131 132 133 134 135 136 144 146 147 149 152 153 154 156 158 159 160 161 162 165 169 170 171 173 174 177 178 179 188 190 193 194 195 199 201 203 204 b 211 0 1 e # 31975 xor c a 211 1 1 0 1 3 5 9 11 14 15 16 20 22 23 27 28 30 37 38 39 40 42 44 45 50 52 53 55 58 60 61 62 66 69 73 75 76 77 79 83 86 87 88 89 91 93 95 97 100 102 103 106 108 112 116 119 120 121 122 124 127 131 132 134 137 138 141 142 145 146 154 155 156 157 158 159 162 164 165 166 168 169 170 172 174 177 178 179 182 183 184 185 186 188 189 194 195 197 201 202 205 207 208 210 b 211 1 1 0 1 3 5 9 11 14 15 16 20 22 23 27 28 30 37 38 39 40 42 44 45 50 52 53 55 58 60 61 62 66 69 73 75 76 77 79 83 86 87 88 89 91 93 95 97 100 102 103 106 108 112 116 119 120 121 122 124 127 131 132 134 137 138 141 142 145 146 154 155 156 157 158 159 162 164 165 166 168 169 170 172 174 177 178 179 182 183 184 185 186 188 189 194 195 197 201 202 205 207 208 210 # 31976 xor c a 211 1 1 0 1 3 5 9 11 14 15 16 20 22 23 27 28 30 37 38 39 40 42 44 45 50 52 53 55 58 60 61 62 66 69 73 75 76 77 79 83 86 87 88 89 91 93 95 97 100 102 103 106 108 112 116 119 120 121 122 124 127 131 132 134 137 138 141 142 145 146 154 155 156 157 158 159 162 164 165 166 168 169 170 172 174 177 178 179 182 183 184 185 186 188 189 194 195 197 201 202 205 207 208 210 b 211 0 1 f # 31977 xor c a 211 1 1 2 6 7 9 12 13 15 17 19 22 23 24 25 27 28 32 36 38 39 44 45 48 50 52 53 54 60 61 63 64 65 66 67 69 70 71 74 76 79 80 82 85 86 87 90 91 92 94 95 97 98 99 100 102 103 104 105 107 108 109 111 119 122 124 131 132 133 134 136 139 140 141 145 146 147 148 149 154 155 156 159 160 162 165 166 170 172 178 182 184 185 189 191 195 198 199 200 201 202 203 206 207 208 209 210 b 211 1 1 2 6 7 9 12 13 15 17 19 22 23 24 25 27 28 32 36 38 39 44 45 48 50 52 53 54 60 61 63 64 65 66 67 69 70 71 74 76 79 80 82 85 86 87 90 91 92 94 95 97 98 99 100 102 103 104 105 107 108 109 111 119 122 124 131 132 133 134 136 139 140 141 145 146 147 148 149 154 155 156 159 160 162 165 166 170 172 178 182 184 185 189 191 195 198 199 200 201 202 203 206 207 208 209 210 # 31978 xor c a 211 1 1 2 6 7 9 12 13 15 17 19 22 23 24 25 27 28 32 36 38 39 44 45 48 50 52 53 54 60 61 63 64 65 66 67 69 70 71 74 76 79 80 82 85 86 87 90 91 92 94 95 97 98 99 100 102 103 104 105 107 108 109 111 119 122 124 131 132 133 134 136 139 140 141 145 146 147 148 149 154 155 156 159 160 162 165 166 170 172 178 182 184 185 189 191 195 198 199 200 201 202 203 206 207 208 209 210 b 211 0 1 0 2 6 7 8 9 11 12 13 15 17 18 19 21 22 27 30 32 33 34 35 37 38 39 41 42 44 45 47 48 49 50 52 53 55 57 58 59 60 61 62 63 64 65 66 67 70 71 73 76 77 80 82 87 88 91 94 99 100 102 104 106 107 108 109 111 113 117 121 123 125 126 133 134 137 140 142 143 147 148 149 150 154 155 157 159 163 167 168 170 171 172 173 174 180 187 191 192 193 196 197 199 202 206 208 209 210 # 31979 xor c a 211 1 1 e b 211 1 1 e # 31980 xor c a 211 1 1 e b 211 1 0 e # 31981 xor c a 211 1 1 e b 211 1 1 e # 31982 xor c a 211 1 1 e b 211 1 0 f # 31983 xor c a 211 1 1 e b 211 1 1 e # 31984 xor c a 211 1 1 e b 211 1 0 0 4 5 9 10 11 12 13 16 18 19 21 23 25 27 28 32 33 34 38 39 41 42 44 46 51 53 54 55 56 60 61 62 64 65 66 68 69 70 72 73 75 76 80 86 87 94 97 100 103 105 109 110 111 119 120 121 125 127 128 129 130 135 137 138 139 141 142 143 144 145 149 151 152 153 156 157 158 160 161 162 166 167 168 169 170 172 175 179 181 182 183 185 188 190 193 194 195 196 197 198 199 200 204 205 # 31985 xor c a 211 1 1 f b 211 1 1 f # 31986 xor c a 211 1 1 f b 211 1 0 e # 31987 xor c a 211 1 1 f b 211 1 1 f # 31988 xor c a 211 1 1 f b 211 1 0 f # 31989 xor c a 211 1 1 f b 211 1 1 f # 31990 xor c a 211 1 1 f b 211 1 0 2 4 5 6 7 8 9 10 14 15 17 18 22 23 25 27 28 29 30 32 33 34 35 36 37 38 39 40 42 43 44 45 46 48 49 50 52 53 56 58 59 61 64 66 67 68 69 70 71 73 74 76 77 78 81 82 84 85 86 89 91 92 94 95 96 97 98 99 100 103 107 108 109 112 114 117 118 119 124 126 129 133 136 139 141 146 149 151 152 153 154 155 157 159 160 162 163 168 169 172 173 178 180 181 183 184 186 187 189 190 191 193 194 195 196 198 199 202 204 206 208 210 # 31991 xor c a 211 1 1 0 2 3 10 12 13 15 16 17 18 21 23 24 25 26 28 30 32 33 35 37 39 44 45 46 47 48 49 52 53 55 56 57 58 61 62 63 64 66 68 70 76 79 82 83 86 87 89 92 95 96 98 99 100 101 102 106 108 109 110 113 115 117 118 120 122 124 128 131 134 136 137 138 139 140 141 142 144 146 147 149 151 152 155 156 157 159 160 162 164 165 166 175 178 179 182 184 186 187 188 190 191 192 193 197 198 199 203 205 206 207 209 210 b 211 1 1 0 2 3 10 12 13 15 16 17 18 21 23 24 25 26 28 30 32 33 35 37 39 44 45 46 47 48 49 52 53 55 56 57 58 61 62 63 64 66 68 70 76 79 82 83 86 87 89 92 95 96 98 99 100 101 102 106 108 109 110 113 115 117 118 120 122 124 128 131 134 136 137 138 139 140 141 142 144 146 147 149 151 152 155 156 157 159 160 162 164 165 166 175 178 179 182 184 186 187 188 190 191 192 193 197 198 199 203 205 206 207 209 210 # 31992 xor c a 211 1 1 0 2 3 10 12 13 15 16 17 18 21 23 24 25 26 28 30 32 33 35 37 39 44 45 46 47 48 49 52 53 55 56 57 58 61 62 63 64 66 68 70 76 79 82 83 86 87 89 92 95 96 98 99 100 101 102 106 108 109 110 113 115 117 118 120 122 124 128 131 134 136 137 138 139 140 141 142 144 146 147 149 151 152 155 156 157 159 160 162 164 165 166 175 178 179 182 184 186 187 188 190 191 192 193 197 198 199 203 205 206 207 209 210 b 211 1 0 e # 31993 xor c a 211 1 1 3 5 6 8 9 11 12 13 14 17 22 24 26 27 28 29 30 32 34 36 37 39 40 41 44 46 49 50 51 56 59 60 62 63 65 68 69 73 74 77 79 80 82 84 85 86 87 95 101 102 103 105 106 107 112 121 122 123 125 126 127 130 131 133 135 139 140 141 143 145 148 150 153 156 160 162 164 166 168 171 173 174 175 177 182 183 184 187 188 190 191 192 193 195 200 201 206 207 b 211 1 1 3 5 6 8 9 11 12 13 14 17 22 24 26 27 28 29 30 32 34 36 37 39 40 41 44 46 49 50 51 56 59 60 62 63 65 68 69 73 74 77 79 80 82 84 85 86 87 95 101 102 103 105 106 107 112 121 122 123 125 126 127 130 131 133 135 139 140 141 143 145 148 150 153 156 160 162 164 166 168 171 173 174 175 177 182 183 184 187 188 190 191 192 193 195 200 201 206 207 # 31994 xor c a 211 1 1 3 5 6 8 9 11 12 13 14 17 22 24 26 27 28 29 30 32 34 36 37 39 40 41 44 46 49 50 51 56 59 60 62 63 65 68 69 73 74 77 79 80 82 84 85 86 87 95 101 102 103 105 106 107 112 121 122 123 125 126 127 130 131 133 135 139 140 141 143 145 148 150 153 156 160 162 164 166 168 171 173 174 175 177 182 183 184 187 188 190 191 192 193 195 200 201 206 207 b 211 1 0 f # 31995 xor c a 211 1 1 0 5 6 8 11 12 15 16 18 21 22 25 29 30 31 35 38 48 52 54 60 65 66 67 69 70 71 75 76 78 79 80 82 83 84 85 86 87 88 91 92 93 96 98 101 102 107 108 110 112 113 120 121 124 125 126 127 128 129 132 134 135 137 138 141 142 143 145 147 149 151 152 153 155 156 158 159 160 162 163 165 166 167 168 169 171 173 174 175 176 178 185 188 190 191 192 193 194 196 203 206 208 209 210 b 211 1 1 0 5 6 8 11 12 15 16 18 21 22 25 29 30 31 35 38 48 52 54 60 65 66 67 69 70 71 75 76 78 79 80 82 83 84 85 86 87 88 91 92 93 96 98 101 102 107 108 110 112 113 120 121 124 125 126 127 128 129 132 134 135 137 138 141 142 143 145 147 149 151 152 153 155 156 158 159 160 162 163 165 166 167 168 169 171 173 174 175 176 178 185 188 190 191 192 193 194 196 203 206 208 209 210 # 31996 xor c a 211 1 1 0 5 6 8 11 12 15 16 18 21 22 25 29 30 31 35 38 48 52 54 60 65 66 67 69 70 71 75 76 78 79 80 82 83 84 85 86 87 88 91 92 93 96 98 101 102 107 108 110 112 113 120 121 124 125 126 127 128 129 132 134 135 137 138 141 142 143 145 147 149 151 152 153 155 156 158 159 160 162 163 165 166 167 168 169 171 173 174 175 176 178 185 188 190 191 192 193 194 196 203 206 208 209 210 b 211 1 0 2 3 4 5 7 8 9 10 11 12 13 15 16 17 21 22 23 26 27 31 32 34 39 42 43 46 52 58 59 60 64 66 71 72 73 74 77 78 80 82 83 87 88 90 92 94 95 97 98 99 102 106 109 110 112 113 120 122 125 127 128 130 133 134 135 137 142 145 146 147 150 152 153 154 157 163 164 168 169 170 172 174 177 178 179 181 184 185 188 189 192 193 194 195 201 202 205 207 208 210 # 31997 xor c a 211 1 1 e b 211 1 1 e # 31998 xor c a 211 1 1 e b 211 1 1 e # 31999 xor c a 211 1 1 e b 211 1 1 e # 32000 xor c a 211 1 1 e b 211 1 1 f # 32001 xor c a 211 1 1 e b 211 1 1 e # 32002 xor c a 211 1 1 e b 211 1 1 6 9 10 12 13 15 17 18 21 25 26 28 31 32 33 36 38 41 42 43 44 46 47 49 52 53 54 56 57 58 64 65 66 67 71 73 74 75 78 82 83 85 87 88 89 93 94 96 97 105 107 111 112 114 117 120 121 122 124 125 127 129 131 135 137 139 141 142 144 149 154 156 158 160 164 166 173 174 179 180 181 186 189 190 192 193 194 195 197 198 199 205 206 207 210 # 32003 xor c a 211 1 1 f b 211 1 1 f # 32004 xor c a 211 1 1 f b 211 1 1 e # 32005 xor c a 211 1 1 f b 211 1 1 f # 32006 xor c a 211 1 1 f b 211 1 1 f # 32007 xor c a 211 1 1 f b 211 1 1 f # 32008 xor c a 211 1 1 f b 211 1 1 3 7 8 15 16 17 18 19 22 23 25 29 30 32 36 37 39 40 41 50 51 53 55 56 57 60 62 63 65 68 70 71 74 76 78 81 82 83 84 86 87 90 93 94 95 96 100 103 111 112 114 115 116 117 122 123 125 126 127 128 129 131 133 134 135 136 138 144 147 149 151 156 159 161 162 164 167 168 172 173 174 175 177 178 179 180 183 185 189 192 194 195 196 201 202 206 207 209 # 32009 xor c a 211 1 1 1 2 5 6 7 9 11 12 13 14 17 18 19 21 22 23 26 27 28 31 35 37 38 39 40 46 47 49 50 51 52 55 56 58 60 64 65 68 72 73 74 75 76 77 78 80 82 83 84 86 87 88 89 93 94 97 98 101 102 103 104 105 106 107 108 109 110 111 113 118 120 122 124 130 131 134 135 137 138 139 141 142 143 144 146 149 154 156 158 162 163 164 165 166 171 173 174 175 177 179 180 181 183 184 185 187 189 190 191 193 196 198 200 201 203 204 205 206 208 210 b 211 1 1 1 2 5 6 7 9 11 12 13 14 17 18 19 21 22 23 26 27 28 31 35 37 38 39 40 46 47 49 50 51 52 55 56 58 60 64 65 68 72 73 74 75 76 77 78 80 82 83 84 86 87 88 89 93 94 97 98 101 102 103 104 105 106 107 108 109 110 111 113 118 120 122 124 130 131 134 135 137 138 139 141 142 143 144 146 149 154 156 158 162 163 164 165 166 171 173 174 175 177 179 180 181 183 184 185 187 189 190 191 193 196 198 200 201 203 204 205 206 208 210 # 32010 xor c a 211 1 1 1 2 5 6 7 9 11 12 13 14 17 18 19 21 22 23 26 27 28 31 35 37 38 39 40 46 47 49 50 51 52 55 56 58 60 64 65 68 72 73 74 75 76 77 78 80 82 83 84 86 87 88 89 93 94 97 98 101 102 103 104 105 106 107 108 109 110 111 113 118 120 122 124 130 131 134 135 137 138 139 141 142 143 144 146 149 154 156 158 162 163 164 165 166 171 173 174 175 177 179 180 181 183 184 185 187 189 190 191 193 196 198 200 201 203 204 205 206 208 210 b 211 1 1 e # 32011 xor c a 211 1 1 1 4 6 7 9 10 13 14 15 17 19 20 22 23 25 26 27 28 29 30 32 33 34 35 38 39 42 45 47 48 49 55 57 60 63 66 68 69 71 76 77 79 81 83 87 89 90 96 98 105 106 108 112 114 116 118 121 122 123 128 130 134 135 137 139 140 141 143 148 150 153 154 155 158 161 163 164 166 168 171 174 176 178 182 183 185 188 190 200 201 206 207 208 b 211 1 1 1 4 6 7 9 10 13 14 15 17 19 20 22 23 25 26 27 28 29 30 32 33 34 35 38 39 42 45 47 48 49 55 57 60 63 66 68 69 71 76 77 79 81 83 87 89 90 96 98 105 106 108 112 114 116 118 121 122 123 128 130 134 135 137 139 140 141 143 148 150 153 154 155 158 161 163 164 166 168 171 174 176 178 182 183 185 188 190 200 201 206 207 208 # 32012 xor c a 211 1 1 1 4 6 7 9 10 13 14 15 17 19 20 22 23 25 26 27 28 29 30 32 33 34 35 38 39 42 45 47 48 49 55 57 60 63 66 68 69 71 76 77 79 81 83 87 89 90 96 98 105 106 108 112 114 116 118 121 122 123 128 130 134 135 137 139 140 141 143 148 150 153 154 155 158 161 163 164 166 168 171 174 176 178 182 183 185 188 190 200 201 206 207 208 b 211 1 1 f # 32013 xor c a 211 1 1 1 3 5 7 8 9 13 14 18 19 21 23 24 25 27 29 31 32 33 34 36 38 39 46 48 49 52 54 55 58 59 64 66 67 69 71 73 76 78 79 82 83 84 85 86 87 90 91 92 95 99 100 101 102 104 105 106 107 109 112 115 118 119 120 122 124 128 129 131 132 133 134 136 137 141 142 147 149 150 153 154 157 159 160 161 162 164 165 166 167 170 171 172 173 176 177 178 180 181 182 187 189 190 192 194 197 199 200 202 203 204 207 208 b 211 1 1 1 3 5 7 8 9 13 14 18 19 21 23 24 25 27 29 31 32 33 34 36 38 39 46 48 49 52 54 55 58 59 64 66 67 69 71 73 76 78 79 82 83 84 85 86 87 90 91 92 95 99 100 101 102 104 105 106 107 109 112 115 118 119 120 122 124 128 129 131 132 133 134 136 137 141 142 147 149 150 153 154 157 159 160 161 162 164 165 166 167 170 171 172 173 176 177 178 180 181 182 187 189 190 192 194 197 199 200 202 203 204 207 208 # 32014 xor c a 211 1 1 1 3 5 7 8 9 13 14 18 19 21 23 24 25 27 29 31 32 33 34 36 38 39 46 48 49 52 54 55 58 59 64 66 67 69 71 73 76 78 79 82 83 84 85 86 87 90 91 92 95 99 100 101 102 104 105 106 107 109 112 115 118 119 120 122 124 128 129 131 132 133 134 136 137 141 142 147 149 150 153 154 157 159 160 161 162 164 165 166 167 170 171 172 173 176 177 178 180 181 182 187 189 190 192 194 197 199 200 202 203 204 207 208 b 211 1 1 0 1 3 5 10 15 16 17 18 20 23 30 33 35 36 37 39 44 45 48 50 51 54 55 56 57 58 61 63 64 65 66 71 73 76 78 80 81 84 85 86 87 88 89 90 92 98 99 100 105 110 111 112 113 115 116 118 119 121 123 125 132 133 137 138 139 142 145 149 152 153 155 156 157 161 162 166 167 169 170 174 175 177 179 180 181 183 184 185 186 187 188 192 193 194 197 202 203 204 205 208 209 210 # 32015 xor c a 224 0 0 e b 224 0 0 e # 32016 xor c a 224 0 0 e b 224 0 0 e # 32017 xor c a 224 0 0 e b 224 0 0 e # 32018 xor c a 224 0 0 e b 224 0 0 f # 32019 xor c a 224 0 0 e b 224 0 0 e # 32020 xor c a 224 0 0 e b 224 0 0 0 5 7 8 11 14 15 19 20 21 22 23 25 27 29 30 33 34 35 36 37 38 39 41 42 43 46 47 48 50 51 53 54 55 57 59 60 65 68 69 70 72 73 78 80 81 85 86 87 88 90 91 92 95 97 100 102 103 104 106 108 109 111 112 113 114 116 117 119 122 127 128 130 131 132 133 135 136 138 139 147 149 150 151 152 156 159 160 163 164 165 167 170 171 172 176 177 181 186 188 190 191 194 199 200 202 203 206 208 213 214 215 217 218 221 223 # 32021 xor c a 224 0 0 f b 224 0 0 f # 32022 xor c a 224 0 0 f b 224 0 0 e # 32023 xor c a 224 0 0 f b 224 0 0 f # 32024 xor c a 224 0 0 f b 224 0 0 f # 32025 xor c a 224 0 0 f b 224 0 0 f # 32026 xor c a 224 0 0 f b 224 0 0 1 3 5 6 7 8 9 10 13 14 16 18 20 21 22 24 25 27 28 29 30 32 33 35 36 38 39 41 43 45 46 49 50 53 56 57 59 60 61 64 65 67 71 73 75 76 79 81 83 84 85 86 88 94 98 100 105 106 107 110 115 116 119 121 123 126 128 129 130 131 134 135 136 137 138 141 142 144 145 147 149 150 151 152 153 155 159 162 163 164 165 166 167 168 170 171 173 176 177 179 180 181 182 183 184 186 188 192 193 196 197 203 204 205 206 207 208 210 211 214 216 220 221 222 # 32027 xor c a 224 0 0 0 1 2 4 6 17 19 22 24 26 30 31 33 38 39 40 46 47 50 51 52 53 57 58 61 63 64 65 70 72 74 76 77 81 84 86 87 89 91 92 93 94 95 96 98 100 101 102 103 105 106 107 108 114 115 116 118 123 126 128 129 130 131 132 133 134 135 136 137 138 139 140 144 147 148 151 152 153 154 157 158 161 164 165 167 168 170 171 174 178 184 188 192 193 194 195 196 197 203 206 207 209 211 216 217 219 220 221 223 b 224 0 0 0 1 2 4 6 17 19 22 24 26 30 31 33 38 39 40 46 47 50 51 52 53 57 58 61 63 64 65 70 72 74 76 77 81 84 86 87 89 91 92 93 94 95 96 98 100 101 102 103 105 106 107 108 114 115 116 118 123 126 128 129 130 131 132 133 134 135 136 137 138 139 140 144 147 148 151 152 153 154 157 158 161 164 165 167 168 170 171 174 178 184 188 192 193 194 195 196 197 203 206 207 209 211 216 217 219 220 221 223 # 32028 xor c a 224 0 0 0 1 2 4 6 17 19 22 24 26 30 31 33 38 39 40 46 47 50 51 52 53 57 58 61 63 64 65 70 72 74 76 77 81 84 86 87 89 91 92 93 94 95 96 98 100 101 102 103 105 106 107 108 114 115 116 118 123 126 128 129 130 131 132 133 134 135 136 137 138 139 140 144 147 148 151 152 153 154 157 158 161 164 165 167 168 170 171 174 178 184 188 192 193 194 195 196 197 203 206 207 209 211 216 217 219 220 221 223 b 224 0 0 e # 32029 xor c a 224 0 0 0 1 2 4 6 10 11 13 14 15 16 18 20 24 25 27 28 30 31 33 36 38 41 43 44 46 47 48 49 50 54 60 64 66 67 68 73 75 78 81 82 85 86 87 88 89 91 94 96 97 99 101 102 104 111 112 116 117 118 119 120 122 124 125 127 129 131 136 137 140 141 142 143 153 156 157 158 160 162 164 167 168 169 170 171 172 173 174 181 182 183 184 190 191 192 193 195 196 197 199 200 202 203 205 206 207 211 213 214 215 217 223 b 224 0 0 0 1 2 4 6 10 11 13 14 15 16 18 20 24 25 27 28 30 31 33 36 38 41 43 44 46 47 48 49 50 54 60 64 66 67 68 73 75 78 81 82 85 86 87 88 89 91 94 96 97 99 101 102 104 111 112 116 117 118 119 120 122 124 125 127 129 131 136 137 140 141 142 143 153 156 157 158 160 162 164 167 168 169 170 171 172 173 174 181 182 183 184 190 191 192 193 195 196 197 199 200 202 203 205 206 207 211 213 214 215 217 223 # 32030 xor c a 224 0 0 0 1 2 4 6 10 11 13 14 15 16 18 20 24 25 27 28 30 31 33 36 38 41 43 44 46 47 48 49 50 54 60 64 66 67 68 73 75 78 81 82 85 86 87 88 89 91 94 96 97 99 101 102 104 111 112 116 117 118 119 120 122 124 125 127 129 131 136 137 140 141 142 143 153 156 157 158 160 162 164 167 168 169 170 171 172 173 174 181 182 183 184 190 191 192 193 195 196 197 199 200 202 203 205 206 207 211 213 214 215 217 223 b 224 0 0 f # 32031 xor c a 224 0 0 0 1 2 3 6 8 9 10 12 13 14 18 19 21 22 24 26 27 30 33 35 36 38 39 41 42 44 45 46 49 53 54 57 59 63 64 65 67 70 71 73 76 77 78 79 80 89 91 92 94 95 98 100 101 106 109 112 113 117 118 119 120 121 122 123 126 127 128 129 134 135 136 142 151 153 154 155 161 162 163 166 168 169 170 175 176 177 179 182 185 187 189 193 195 197 198 200 201 202 207 210 212 213 214 216 219 220 221 b 224 0 0 0 1 2 3 6 8 9 10 12 13 14 18 19 21 22 24 26 27 30 33 35 36 38 39 41 42 44 45 46 49 53 54 57 59 63 64 65 67 70 71 73 76 77 78 79 80 89 91 92 94 95 98 100 101 106 109 112 113 117 118 119 120 121 122 123 126 127 128 129 134 135 136 142 151 153 154 155 161 162 163 166 168 169 170 175 176 177 179 182 185 187 189 193 195 197 198 200 201 202 207 210 212 213 214 216 219 220 221 # 32032 xor c a 224 0 0 0 1 2 3 6 8 9 10 12 13 14 18 19 21 22 24 26 27 30 33 35 36 38 39 41 42 44 45 46 49 53 54 57 59 63 64 65 67 70 71 73 76 77 78 79 80 89 91 92 94 95 98 100 101 106 109 112 113 117 118 119 120 121 122 123 126 127 128 129 134 135 136 142 151 153 154 155 161 162 163 166 168 169 170 175 176 177 179 182 185 187 189 193 195 197 198 200 201 202 207 210 212 213 214 216 219 220 221 b 224 0 0 0 1 4 6 7 8 12 15 16 19 23 24 25 26 27 28 34 35 36 38 39 40 41 42 43 46 51 52 53 54 56 57 59 64 65 67 75 76 77 81 82 83 84 85 87 89 91 93 96 97 98 100 102 104 105 106 107 108 110 112 113 115 116 117 121 122 123 124 126 128 129 130 131 142 145 147 148 149 152 154 157 158 160 161 165 166 167 168 173 174 175 176 178 179 180 181 182 183 185 187 188 191 192 193 198 200 202 205 206 209 210 212 213 214 215 216 218 219 221 222 # 32033 xor c a 224 0 0 e b 224 0 0 e # 32034 xor c a 224 0 0 e b 224 0 1 e # 32035 xor c a 224 0 0 e b 224 0 0 e # 32036 xor c a 224 0 0 e b 224 0 1 f # 32037 xor c a 224 0 0 e b 224 0 0 e # 32038 xor c a 224 0 0 e b 224 0 1 0 2 4 5 6 7 8 9 10 12 13 15 16 27 31 32 35 36 37 38 39 40 41 44 45 49 50 51 52 56 57 59 61 62 69 71 72 77 78 80 81 83 89 92 94 95 97 99 100 102 103 104 110 111 113 114 115 117 118 119 120 125 127 128 129 130 131 134 136 137 139 142 145 147 148 153 154 155 156 158 159 161 162 166 167 170 171 173 175 176 180 181 182 184 185 191 192 193 197 199 202 203 205 207 209 212 215 217 219 220 222 223 # 32039 xor c a 224 0 0 f b 224 0 0 f # 32040 xor c a 224 0 0 f b 224 0 1 e # 32041 xor c a 224 0 0 f b 224 0 0 f # 32042 xor c a 224 0 0 f b 224 0 1 f # 32043 xor c a 224 0 0 f b 224 0 0 f # 32044 xor c a 224 0 0 f b 224 0 1 1 3 4 6 8 9 10 11 12 14 20 21 24 27 28 30 33 43 44 48 49 50 51 52 56 57 59 60 61 64 65 69 70 73 77 78 79 81 82 85 86 87 88 89 90 91 92 93 94 95 96 99 103 105 108 115 118 119 122 125 129 131 132 133 134 136 138 140 142 146 147 149 150 151 154 155 158 160 163 164 165 167 169 171 173 175 179 180 184 186 187 188 189 191 193 194 196 197 198 199 200 202 206 212 213 214 217 219 220 221 222 223 # 32045 xor c a 224 0 0 0 10 11 12 13 18 19 25 27 28 30 31 32 37 38 39 42 43 45 49 51 53 55 56 57 58 59 60 61 62 63 64 65 66 68 69 71 74 78 79 83 85 92 95 99 100 101 102 105 106 109 113 115 117 119 120 121 123 124 125 126 128 131 135 137 140 142 143 146 147 148 149 150 151 152 154 155 156 157 158 159 162 163 166 167 169 171 174 175 177 180 191 194 195 196 197 198 199 200 201 202 205 206 207 208 212 213 214 218 219 222 223 b 224 0 0 0 10 11 12 13 18 19 25 27 28 30 31 32 37 38 39 42 43 45 49 51 53 55 56 57 58 59 60 61 62 63 64 65 66 68 69 71 74 78 79 83 85 92 95 99 100 101 102 105 106 109 113 115 117 119 120 121 123 124 125 126 128 131 135 137 140 142 143 146 147 148 149 150 151 152 154 155 156 157 158 159 162 163 166 167 169 171 174 175 177 180 191 194 195 196 197 198 199 200 201 202 205 206 207 208 212 213 214 218 219 222 223 # 32046 xor c a 224 0 0 0 10 11 12 13 18 19 25 27 28 30 31 32 37 38 39 42 43 45 49 51 53 55 56 57 58 59 60 61 62 63 64 65 66 68 69 71 74 78 79 83 85 92 95 99 100 101 102 105 106 109 113 115 117 119 120 121 123 124 125 126 128 131 135 137 140 142 143 146 147 148 149 150 151 152 154 155 156 157 158 159 162 163 166 167 169 171 174 175 177 180 191 194 195 196 197 198 199 200 201 202 205 206 207 208 212 213 214 218 219 222 223 b 224 0 1 e # 32047 xor c a 224 0 0 0 1 2 5 8 11 14 16 17 18 19 20 21 22 23 24 25 26 28 31 35 37 38 39 42 43 44 45 46 47 48 49 50 53 58 60 63 64 66 69 76 79 80 81 84 85 86 88 89 90 91 93 94 98 99 101 106 108 109 110 111 112 115 116 118 119 121 122 123 124 128 129 130 132 134 136 144 147 148 150 151 152 154 155 156 157 158 159 160 161 163 165 167 169 171 173 175 177 178 179 180 182 183 184 185 186 187 188 189 190 191 192 194 195 197 198 199 200 202 203 206 208 209 211 214 217 219 222 b 224 0 0 0 1 2 5 8 11 14 16 17 18 19 20 21 22 23 24 25 26 28 31 35 37 38 39 42 43 44 45 46 47 48 49 50 53 58 60 63 64 66 69 76 79 80 81 84 85 86 88 89 90 91 93 94 98 99 101 106 108 109 110 111 112 115 116 118 119 121 122 123 124 128 129 130 132 134 136 144 147 148 150 151 152 154 155 156 157 158 159 160 161 163 165 167 169 171 173 175 177 178 179 180 182 183 184 185 186 187 188 189 190 191 192 194 195 197 198 199 200 202 203 206 208 209 211 214 217 219 222 # 32048 xor c a 224 0 0 0 1 2 5 8 11 14 16 17 18 19 20 21 22 23 24 25 26 28 31 35 37 38 39 42 43 44 45 46 47 48 49 50 53 58 60 63 64 66 69 76 79 80 81 84 85 86 88 89 90 91 93 94 98 99 101 106 108 109 110 111 112 115 116 118 119 121 122 123 124 128 129 130 132 134 136 144 147 148 150 151 152 154 155 156 157 158 159 160 161 163 165 167 169 171 173 175 177 178 179 180 182 183 184 185 186 187 188 189 190 191 192 194 195 197 198 199 200 202 203 206 208 209 211 214 217 219 222 b 224 0 1 f # 32049 xor c a 224 0 0 3 8 11 16 17 23 25 26 27 28 30 32 37 38 40 41 45 46 48 52 53 54 56 57 58 59 61 66 67 70 74 75 76 77 78 79 82 85 88 90 91 95 96 97 99 103 104 105 106 107 108 109 111 115 117 118 121 123 127 129 130 131 134 137 138 139 142 143 144 148 150 153 154 155 158 159 161 162 163 164 165 168 172 174 175 180 181 182 184 185 189 191 192 194 195 197 198 203 206 207 208 209 211 212 215 216 217 220 221 222 b 224 0 0 3 8 11 16 17 23 25 26 27 28 30 32 37 38 40 41 45 46 48 52 53 54 56 57 58 59 61 66 67 70 74 75 76 77 78 79 82 85 88 90 91 95 96 97 99 103 104 105 106 107 108 109 111 115 117 118 121 123 127 129 130 131 134 137 138 139 142 143 144 148 150 153 154 155 158 159 161 162 163 164 165 168 172 174 175 180 181 182 184 185 189 191 192 194 195 197 198 203 206 207 208 209 211 212 215 216 217 220 221 222 # 32050 xor c a 224 0 0 3 8 11 16 17 23 25 26 27 28 30 32 37 38 40 41 45 46 48 52 53 54 56 57 58 59 61 66 67 70 74 75 76 77 78 79 82 85 88 90 91 95 96 97 99 103 104 105 106 107 108 109 111 115 117 118 121 123 127 129 130 131 134 137 138 139 142 143 144 148 150 153 154 155 158 159 161 162 163 164 165 168 172 174 175 180 181 182 184 185 189 191 192 194 195 197 198 203 206 207 208 209 211 212 215 216 217 220 221 222 b 224 0 1 1 3 4 7 9 10 11 13 14 16 19 20 21 22 23 26 29 30 31 32 33 34 37 39 40 42 43 45 47 50 51 54 55 56 57 58 59 60 61 62 64 66 67 70 72 80 81 86 88 89 91 92 93 99 100 103 104 106 107 108 111 113 115 118 122 123 127 129 130 133 134 135 137 138 145 147 148 150 153 155 157 159 160 162 163 165 166 167 168 169 173 174 175 177 178 181 182 183 184 185 187 188 189 190 193 196 199 202 203 205 206 207 208 209 211 213 214 216 219 221 # 32051 xor c a 224 0 0 e b 224 0 0 e # 32052 xor c a 224 0 0 e b 224 1 0 e # 32053 xor c a 224 0 0 e b 224 0 0 e # 32054 xor c a 224 0 0 e b 224 1 0 f # 32055 xor c a 224 0 0 e b 224 0 0 e # 32056 xor c a 224 0 0 e b 224 1 0 0 1 2 7 8 10 11 12 13 14 15 17 18 19 20 23 24 26 27 29 32 34 35 36 37 38 46 47 49 50 53 55 57 58 59 60 63 64 65 66 67 68 72 73 76 78 81 84 85 88 91 92 95 98 100 101 102 103 104 106 107 108 109 110 111 112 117 118 119 121 122 127 134 135 137 138 140 141 143 145 148 149 152 154 159 161 163 166 167 170 174 176 178 179 182 184 185 186 188 196 197 199 203 211 212 214 216 217 218 219 220 221 # 32057 xor c a 224 0 0 f b 224 0 0 f # 32058 xor c a 224 0 0 f b 224 1 0 e # 32059 xor c a 224 0 0 f b 224 0 0 f # 32060 xor c a 224 0 0 f b 224 1 0 f # 32061 xor c a 224 0 0 f b 224 0 0 f # 32062 xor c a 224 0 0 f b 224 1 0 1 2 4 5 10 11 12 18 20 21 22 23 24 26 27 30 31 32 33 35 36 38 39 40 41 42 43 45 46 47 49 50 52 53 54 55 57 59 60 62 63 65 66 67 69 70 72 73 75 76 78 81 86 87 92 97 99 100 104 107 108 110 111 112 116 120 121 123 124 125 126 128 130 134 136 140 143 144 145 147 148 150 151 159 160 164 166 168 169 170 171 175 177 178 181 182 186 188 191 192 193 194 197 198 200 201 203 205 206 207 209 210 211 213 215 217 221 223 # 32063 xor c a 224 0 0 0 4 6 7 9 10 11 12 13 14 17 18 19 20 22 25 26 28 29 33 34 38 39 41 42 45 47 50 52 53 55 56 61 62 64 65 66 69 71 74 75 78 79 80 81 82 83 84 86 88 90 91 93 96 98 99 100 102 104 105 107 110 113 114 117 118 119 120 121 122 124 128 131 136 137 141 143 144 146 147 149 150 153 157 158 162 163 166 168 170 174 175 176 177 178 179 180 181 184 185 188 190 191 193 194 195 196 197 199 200 211 217 218 219 220 222 b 224 0 0 0 4 6 7 9 10 11 12 13 14 17 18 19 20 22 25 26 28 29 33 34 38 39 41 42 45 47 50 52 53 55 56 61 62 64 65 66 69 71 74 75 78 79 80 81 82 83 84 86 88 90 91 93 96 98 99 100 102 104 105 107 110 113 114 117 118 119 120 121 122 124 128 131 136 137 141 143 144 146 147 149 150 153 157 158 162 163 166 168 170 174 175 176 177 178 179 180 181 184 185 188 190 191 193 194 195 196 197 199 200 211 217 218 219 220 222 # 32064 xor c a 224 0 0 0 4 6 7 9 10 11 12 13 14 17 18 19 20 22 25 26 28 29 33 34 38 39 41 42 45 47 50 52 53 55 56 61 62 64 65 66 69 71 74 75 78 79 80 81 82 83 84 86 88 90 91 93 96 98 99 100 102 104 105 107 110 113 114 117 118 119 120 121 122 124 128 131 136 137 141 143 144 146 147 149 150 153 157 158 162 163 166 168 170 174 175 176 177 178 179 180 181 184 185 188 190 191 193 194 195 196 197 199 200 211 217 218 219 220 222 b 224 1 0 e # 32065 xor c a 224 0 0 1 5 10 11 12 13 14 15 18 20 22 23 24 26 27 28 29 32 33 36 37 38 42 43 45 46 47 49 51 53 54 57 60 61 62 63 64 66 67 68 69 70 73 75 76 81 84 86 89 90 92 94 96 97 99 100 102 103 106 111 112 113 115 116 117 118 120 121 123 127 130 132 133 135 136 137 141 146 149 150 152 155 156 158 160 161 163 165 166 168 169 170 171 172 176 178 182 183 184 185 186 189 190 192 196 197 198 199 200 201 202 203 204 205 206 207 209 210 213 215 216 222 b 224 0 0 1 5 10 11 12 13 14 15 18 20 22 23 24 26 27 28 29 32 33 36 37 38 42 43 45 46 47 49 51 53 54 57 60 61 62 63 64 66 67 68 69 70 73 75 76 81 84 86 89 90 92 94 96 97 99 100 102 103 106 111 112 113 115 116 117 118 120 121 123 127 130 132 133 135 136 137 141 146 149 150 152 155 156 158 160 161 163 165 166 168 169 170 171 172 176 178 182 183 184 185 186 189 190 192 196 197 198 199 200 201 202 203 204 205 206 207 209 210 213 215 216 222 # 32066 xor c a 224 0 0 1 5 10 11 12 13 14 15 18 20 22 23 24 26 27 28 29 32 33 36 37 38 42 43 45 46 47 49 51 53 54 57 60 61 62 63 64 66 67 68 69 70 73 75 76 81 84 86 89 90 92 94 96 97 99 100 102 103 106 111 112 113 115 116 117 118 120 121 123 127 130 132 133 135 136 137 141 146 149 150 152 155 156 158 160 161 163 165 166 168 169 170 171 172 176 178 182 183 184 185 186 189 190 192 196 197 198 199 200 201 202 203 204 205 206 207 209 210 213 215 216 222 b 224 1 0 f # 32067 xor c a 224 0 0 1 4 7 8 9 10 11 12 13 14 17 18 19 22 24 31 33 37 40 41 43 44 45 46 48 49 50 52 53 55 56 57 58 65 66 67 68 69 70 72 75 78 79 80 81 83 84 85 86 87 88 89 91 93 95 96 102 104 106 107 109 110 112 115 116 119 120 121 122 126 130 131 132 133 134 135 136 137 138 140 141 142 143 144 146 147 148 150 151 152 154 156 157 158 162 165 168 169 170 171 172 173 174 175 177 178 179 180 182 183 184 185 187 188 190 192 193 194 195 196 197 199 200 201 202 203 204 205 207 208 210 211 212 213 214 215 b 224 0 0 1 4 7 8 9 10 11 12 13 14 17 18 19 22 24 31 33 37 40 41 43 44 45 46 48 49 50 52 53 55 56 57 58 65 66 67 68 69 70 72 75 78 79 80 81 83 84 85 86 87 88 89 91 93 95 96 102 104 106 107 109 110 112 115 116 119 120 121 122 126 130 131 132 133 134 135 136 137 138 140 141 142 143 144 146 147 148 150 151 152 154 156 157 158 162 165 168 169 170 171 172 173 174 175 177 178 179 180 182 183 184 185 187 188 190 192 193 194 195 196 197 199 200 201 202 203 204 205 207 208 210 211 212 213 214 215 # 32068 xor c a 224 0 0 1 4 7 8 9 10 11 12 13 14 17 18 19 22 24 31 33 37 40 41 43 44 45 46 48 49 50 52 53 55 56 57 58 65 66 67 68 69 70 72 75 78 79 80 81 83 84 85 86 87 88 89 91 93 95 96 102 104 106 107 109 110 112 115 116 119 120 121 122 126 130 131 132 133 134 135 136 137 138 140 141 142 143 144 146 147 148 150 151 152 154 156 157 158 162 165 168 169 170 171 172 173 174 175 177 178 179 180 182 183 184 185 187 188 190 192 193 194 195 196 197 199 200 201 202 203 204 205 207 208 210 211 212 213 214 215 b 224 1 0 10 16 18 20 21 24 25 26 30 31 33 35 37 38 39 41 43 46 48 49 50 51 52 53 55 56 57 59 61 62 63 64 65 68 71 73 74 75 77 79 80 81 82 84 85 87 88 90 94 98 100 105 108 109 112 114 115 120 124 126 128 129 131 133 136 137 138 140 142 144 145 147 149 151 152 153 155 157 158 160 163 165 167 168 172 174 175 178 179 180 181 182 183 184 185 186 187 188 189 191 194 199 200 201 203 207 208 210 211 214 215 218 # 32069 xor c a 224 0 0 e b 224 0 0 e # 32070 xor c a 224 0 0 e b 224 1 1 e # 32071 xor c a 224 0 0 e b 224 0 0 e # 32072 xor c a 224 0 0 e b 224 1 1 f # 32073 xor c a 224 0 0 e b 224 0 0 e # 32074 xor c a 224 0 0 e b 224 1 1 0 1 2 3 6 7 10 11 12 14 15 17 19 22 23 24 25 27 28 31 34 35 36 37 38 44 46 50 52 53 60 61 65 68 69 70 71 76 80 82 85 86 87 94 95 103 104 106 107 108 112 113 114 116 117 118 122 123 124 125 126 132 133 135 138 139 140 143 146 149 150 151 153 154 155 156 157 159 161 165 167 168 170 171 172 175 176 181 183 184 186 189 191 192 193 196 197 198 199 201 203 204 205 206 207 210 211 214 215 219 221 # 32075 xor c a 224 0 0 f b 224 0 0 f # 32076 xor c a 224 0 0 f b 224 1 1 e # 32077 xor c a 224 0 0 f b 224 0 0 f # 32078 xor c a 224 0 0 f b 224 1 1 f # 32079 xor c a 224 0 0 f b 224 0 0 f # 32080 xor c a 224 0 0 f b 224 1 1 0 1 3 7 9 10 12 13 14 16 17 23 24 25 28 29 31 32 33 37 38 39 40 41 42 43 45 48 49 50 53 54 55 56 61 64 65 68 70 71 73 74 75 76 79 81 84 87 88 89 97 99 102 103 108 109 111 112 113 115 116 117 119 120 121 122 129 131 134 135 136 140 141 143 144 145 147 148 149 151 152 154 155 156 161 163 166 167 173 176 177 178 179 180 182 184 185 187 189 191 192 193 194 197 199 201 203 204 206 207 209 210 211 217 220 221 223 # 32081 xor c a 224 0 0 0 1 4 6 7 10 11 12 13 14 15 16 18 20 22 26 29 32 33 35 38 40 47 48 51 52 53 54 57 58 60 62 63 68 70 72 74 75 76 78 80 83 88 90 91 92 93 96 97 98 99 101 103 106 107 108 109 111 113 114 116 118 119 120 121 122 123 124 126 127 129 133 135 136 138 139 143 144 147 150 153 154 155 156 157 158 160 162 164 166 167 168 169 170 172 174 175 178 179 181 183 184 186 187 190 191 192 193 195 196 198 199 200 202 203 204 205 206 209 211 212 215 216 219 220 222 b 224 0 0 0 1 4 6 7 10 11 12 13 14 15 16 18 20 22 26 29 32 33 35 38 40 47 48 51 52 53 54 57 58 60 62 63 68 70 72 74 75 76 78 80 83 88 90 91 92 93 96 97 98 99 101 103 106 107 108 109 111 113 114 116 118 119 120 121 122 123 124 126 127 129 133 135 136 138 139 143 144 147 150 153 154 155 156 157 158 160 162 164 166 167 168 169 170 172 174 175 178 179 181 183 184 186 187 190 191 192 193 195 196 198 199 200 202 203 204 205 206 209 211 212 215 216 219 220 222 # 32082 xor c a 224 0 0 0 1 4 6 7 10 11 12 13 14 15 16 18 20 22 26 29 32 33 35 38 40 47 48 51 52 53 54 57 58 60 62 63 68 70 72 74 75 76 78 80 83 88 90 91 92 93 96 97 98 99 101 103 106 107 108 109 111 113 114 116 118 119 120 121 122 123 124 126 127 129 133 135 136 138 139 143 144 147 150 153 154 155 156 157 158 160 162 164 166 167 168 169 170 172 174 175 178 179 181 183 184 186 187 190 191 192 193 195 196 198 199 200 202 203 204 205 206 209 211 212 215 216 219 220 222 b 224 1 1 e # 32083 xor c a 224 0 0 5 6 9 12 17 18 23 24 25 26 29 30 34 35 37 39 40 41 42 43 46 47 49 58 61 62 63 64 65 69 70 73 74 75 77 79 80 81 85 86 90 91 93 96 97 100 106 107 110 113 114 116 117 118 119 121 122 124 126 127 130 131 132 136 140 141 142 143 144 145 147 148 150 151 156 159 162 164 167 169 172 175 177 179 182 183 184 188 192 196 197 200 204 205 207 209 210 211 212 213 215 217 221 223 b 224 0 0 5 6 9 12 17 18 23 24 25 26 29 30 34 35 37 39 40 41 42 43 46 47 49 58 61 62 63 64 65 69 70 73 74 75 77 79 80 81 85 86 90 91 93 96 97 100 106 107 110 113 114 116 117 118 119 121 122 124 126 127 130 131 132 136 140 141 142 143 144 145 147 148 150 151 156 159 162 164 167 169 172 175 177 179 182 183 184 188 192 196 197 200 204 205 207 209 210 211 212 213 215 217 221 223 # 32084 xor c a 224 0 0 5 6 9 12 17 18 23 24 25 26 29 30 34 35 37 39 40 41 42 43 46 47 49 58 61 62 63 64 65 69 70 73 74 75 77 79 80 81 85 86 90 91 93 96 97 100 106 107 110 113 114 116 117 118 119 121 122 124 126 127 130 131 132 136 140 141 142 143 144 145 147 148 150 151 156 159 162 164 167 169 172 175 177 179 182 183 184 188 192 196 197 200 204 205 207 209 210 211 212 213 215 217 221 223 b 224 1 1 f # 32085 xor c a 224 0 0 1 3 4 5 7 9 11 14 15 17 18 20 22 24 26 28 33 38 39 42 43 44 45 46 47 48 51 52 55 57 58 62 64 65 66 69 71 72 73 75 76 78 80 81 87 91 93 96 97 98 100 103 105 107 108 111 113 119 120 125 126 128 129 130 132 136 137 139 140 141 142 145 146 147 149 153 155 156 160 162 163 164 167 168 170 171 175 177 179 180 181 184 185 187 188 189 191 194 198 200 201 203 205 206 207 208 210 211 213 216 217 218 219 220 222 b 224 0 0 1 3 4 5 7 9 11 14 15 17 18 20 22 24 26 28 33 38 39 42 43 44 45 46 47 48 51 52 55 57 58 62 64 65 66 69 71 72 73 75 76 78 80 81 87 91 93 96 97 98 100 103 105 107 108 111 113 119 120 125 126 128 129 130 132 136 137 139 140 141 142 145 146 147 149 153 155 156 160 162 163 164 167 168 170 171 175 177 179 180 181 184 185 187 188 189 191 194 198 200 201 203 205 206 207 208 210 211 213 216 217 218 219 220 222 # 32086 xor c a 224 0 0 1 3 4 5 7 9 11 14 15 17 18 20 22 24 26 28 33 38 39 42 43 44 45 46 47 48 51 52 55 57 58 62 64 65 66 69 71 72 73 75 76 78 80 81 87 91 93 96 97 98 100 103 105 107 108 111 113 119 120 125 126 128 129 130 132 136 137 139 140 141 142 145 146 147 149 153 155 156 160 162 163 164 167 168 170 171 175 177 179 180 181 184 185 187 188 189 191 194 198 200 201 203 205 206 207 208 210 211 213 216 217 218 219 220 222 b 224 1 1 1 3 4 7 9 10 12 16 17 19 20 23 27 31 32 33 34 35 38 42 44 46 47 49 50 53 54 55 58 59 60 61 62 63 64 65 66 67 71 72 74 75 76 77 78 79 80 86 87 88 89 92 96 97 101 102 105 108 112 114 116 117 118 122 124 126 127 130 131 133 135 136 137 138 139 140 143 144 145 146 148 149 150 153 158 161 163 164 167 170 172 173 174 176 177 178 179 180 181 182 184 186 188 189 190 192 193 194 195 198 199 200 202 203 205 208 211 216 220 222 223 # 32087 xor c a 224 0 1 e b 224 0 1 e # 32088 xor c a 224 0 1 e b 224 0 0 e # 32089 xor c a 224 0 1 e b 224 0 1 e # 32090 xor c a 224 0 1 e b 224 0 0 f # 32091 xor c a 224 0 1 e b 224 0 1 e # 32092 xor c a 224 0 1 e b 224 0 0 1 3 8 10 14 17 19 21 22 23 28 30 31 32 34 36 40 42 44 46 50 51 53 54 58 61 65 66 67 71 72 76 77 78 81 82 84 85 86 88 89 93 94 95 96 97 98 99 100 102 103 109 112 114 117 118 120 122 124 125 126 127 129 130 132 133 136 138 142 144 145 146 147 148 152 153 154 155 156 157 162 164 165 166 167 169 171 172 173 175 176 177 178 181 182 184 185 186 187 190 191 192 193 195 196 198 201 204 206 207 209 211 212 215 216 220 # 32093 xor c a 224 0 1 f b 224 0 1 f # 32094 xor c a 224 0 1 f b 224 0 0 e # 32095 xor c a 224 0 1 f b 224 0 1 f # 32096 xor c a 224 0 1 f b 224 0 0 f # 32097 xor c a 224 0 1 f b 224 0 1 f # 32098 xor c a 224 0 1 f b 224 0 0 1 3 5 7 8 10 11 12 13 14 16 17 21 24 25 26 27 35 37 46 50 52 53 54 55 56 58 59 60 61 63 65 66 67 68 71 72 73 77 82 85 87 89 90 91 92 94 97 100 101 103 104 106 110 111 112 113 114 115 118 119 121 122 125 126 127 136 140 144 151 153 154 155 156 157 158 160 162 164 165 167 169 171 176 177 178 181 182 183 184 185 186 187 188 189 190 191 193 194 195 196 198 199 201 202 203 206 209 211 212 214 215 217 220 222 # 32099 xor c a 224 0 1 1 3 5 6 7 8 9 10 13 14 15 18 20 21 22 24 27 28 35 38 41 42 43 45 46 47 48 49 51 52 54 55 56 58 59 60 61 62 67 71 75 78 80 81 82 83 85 87 90 93 94 95 96 98 100 104 105 106 107 108 109 111 112 114 115 118 119 121 123 128 130 131 134 136 137 139 140 142 144 145 147 148 150 153 155 157 159 160 162 165 166 168 169 174 180 181 182 184 185 186 188 191 193 195 196 197 200 201 202 205 206 207 209 210 212 213 214 215 216 217 220 b 224 0 1 1 3 5 6 7 8 9 10 13 14 15 18 20 21 22 24 27 28 35 38 41 42 43 45 46 47 48 49 51 52 54 55 56 58 59 60 61 62 67 71 75 78 80 81 82 83 85 87 90 93 94 95 96 98 100 104 105 106 107 108 109 111 112 114 115 118 119 121 123 128 130 131 134 136 137 139 140 142 144 145 147 148 150 153 155 157 159 160 162 165 166 168 169 174 180 181 182 184 185 186 188 191 193 195 196 197 200 201 202 205 206 207 209 210 212 213 214 215 216 217 220 # 32100 xor c a 224 0 1 1 3 5 6 7 8 9 10 13 14 15 18 20 21 22 24 27 28 35 38 41 42 43 45 46 47 48 49 51 52 54 55 56 58 59 60 61 62 67 71 75 78 80 81 82 83 85 87 90 93 94 95 96 98 100 104 105 106 107 108 109 111 112 114 115 118 119 121 123 128 130 131 134 136 137 139 140 142 144 145 147 148 150 153 155 157 159 160 162 165 166 168 169 174 180 181 182 184 185 186 188 191 193 195 196 197 200 201 202 205 206 207 209 210 212 213 214 215 216 217 220 b 224 0 0 e # 32101 xor c a 224 0 1 5 6 8 9 10 12 13 16 18 19 20 22 23 25 30 31 32 37 38 40 41 42 44 45 46 52 53 54 56 60 63 65 67 68 70 73 74 75 76 77 79 81 84 87 89 93 94 95 102 103 105 106 107 110 111 112 114 115 119 121 123 127 129 131 133 134 135 136 138 140 141 142 143 144 145 149 151 152 153 154 156 163 168 172 175 177 179 180 181 182 184 185 186 187 188 189 193 194 195 196 199 200 201 203 206 207 210 211 213 215 218 221 222 223 b 224 0 1 5 6 8 9 10 12 13 16 18 19 20 22 23 25 30 31 32 37 38 40 41 42 44 45 46 52 53 54 56 60 63 65 67 68 70 73 74 75 76 77 79 81 84 87 89 93 94 95 102 103 105 106 107 110 111 112 114 115 119 121 123 127 129 131 133 134 135 136 138 140 141 142 143 144 145 149 151 152 153 154 156 163 168 172 175 177 179 180 181 182 184 185 186 187 188 189 193 194 195 196 199 200 201 203 206 207 210 211 213 215 218 221 222 223 # 32102 xor c a 224 0 1 5 6 8 9 10 12 13 16 18 19 20 22 23 25 30 31 32 37 38 40 41 42 44 45 46 52 53 54 56 60 63 65 67 68 70 73 74 75 76 77 79 81 84 87 89 93 94 95 102 103 105 106 107 110 111 112 114 115 119 121 123 127 129 131 133 134 135 136 138 140 141 142 143 144 145 149 151 152 153 154 156 163 168 172 175 177 179 180 181 182 184 185 186 187 188 189 193 194 195 196 199 200 201 203 206 207 210 211 213 215 218 221 222 223 b 224 0 0 f # 32103 xor c a 224 0 1 0 1 2 3 5 7 8 9 10 11 14 16 19 21 22 23 25 28 29 32 33 35 36 37 38 39 41 42 43 47 48 49 50 52 53 54 55 56 61 62 63 64 66 67 68 69 72 75 76 78 79 81 82 83 84 85 86 87 95 98 102 108 110 111 113 114 116 117 118 122 123 126 127 128 132 136 137 140 150 151 152 154 156 160 161 162 163 166 167 168 171 172 173 177 178 179 181 182 183 185 187 194 197 201 204 205 206 209 211 212 214 215 217 218 222 223 b 224 0 1 0 1 2 3 5 7 8 9 10 11 14 16 19 21 22 23 25 28 29 32 33 35 36 37 38 39 41 42 43 47 48 49 50 52 53 54 55 56 61 62 63 64 66 67 68 69 72 75 76 78 79 81 82 83 84 85 86 87 95 98 102 108 110 111 113 114 116 117 118 122 123 126 127 128 132 136 137 140 150 151 152 154 156 160 161 162 163 166 167 168 171 172 173 177 178 179 181 182 183 185 187 194 197 201 204 205 206 209 211 212 214 215 217 218 222 223 # 32104 xor c a 224 0 1 0 1 2 3 5 7 8 9 10 11 14 16 19 21 22 23 25 28 29 32 33 35 36 37 38 39 41 42 43 47 48 49 50 52 53 54 55 56 61 62 63 64 66 67 68 69 72 75 76 78 79 81 82 83 84 85 86 87 95 98 102 108 110 111 113 114 116 117 118 122 123 126 127 128 132 136 137 140 150 151 152 154 156 160 161 162 163 166 167 168 171 172 173 177 178 179 181 182 183 185 187 194 197 201 204 205 206 209 211 212 214 215 217 218 222 223 b 224 0 0 0 1 4 5 6 8 10 11 12 13 16 17 21 24 26 28 29 31 34 37 39 40 42 43 44 45 47 48 49 51 52 53 55 62 63 64 65 66 68 71 72 73 74 75 76 79 80 81 82 83 87 88 89 90 91 93 94 96 97 99 101 103 104 106 107 112 117 123 125 126 128 130 131 134 135 136 137 138 140 142 143 145 147 148 149 152 154 157 163 164 166 167 168 170 171 172 173 174 176 182 184 185 188 189 190 193 194 197 203 204 207 208 211 212 213 215 216 217 220 222 # 32105 xor c a 224 0 1 e b 224 0 1 e # 32106 xor c a 224 0 1 e b 224 0 1 e # 32107 xor c a 224 0 1 e b 224 0 1 e # 32108 xor c a 224 0 1 e b 224 0 1 f # 32109 xor c a 224 0 1 e b 224 0 1 e # 32110 xor c a 224 0 1 e b 224 0 1 1 2 5 6 7 9 10 13 14 15 18 23 24 25 27 30 32 33 34 36 37 39 40 41 43 44 46 49 50 51 54 58 59 61 64 66 68 71 73 74 76 77 78 80 81 83 85 87 91 93 95 96 99 101 102 103 104 106 107 109 111 114 115 119 121 123 124 125 126 127 128 130 135 136 138 140 141 147 149 150 151 152 154 156 159 160 161 163 165 166 168 169 170 171 172 173 177 179 181 182 186 188 189 191 192 193 194 197 198 201 204 205 207 208 209 210 212 215 216 219 222 # 32111 xor c a 224 0 1 f b 224 0 1 f # 32112 xor c a 224 0 1 f b 224 0 1 e # 32113 xor c a 224 0 1 f b 224 0 1 f # 32114 xor c a 224 0 1 f b 224 0 1 f # 32115 xor c a 224 0 1 f b 224 0 1 f # 32116 xor c a 224 0 1 f b 224 0 1 2 3 5 7 9 10 12 17 18 19 22 27 28 30 31 32 33 34 35 37 38 39 40 41 46 49 51 52 56 57 63 64 66 69 71 73 75 79 81 82 86 87 89 93 98 103 104 105 109 110 111 113 114 115 116 117 118 120 122 123 128 129 130 131 134 139 140 142 145 149 158 161 163 165 166 167 170 172 173 174 177 179 180 181 186 187 188 189 190 192 200 202 203 204 206 213 214 215 222 223 # 32117 xor c a 224 0 1 0 1 3 7 8 10 11 12 13 17 18 19 23 24 25 26 29 32 35 36 37 38 39 40 41 43 45 46 47 49 51 53 54 56 57 61 62 65 68 70 71 72 79 81 82 84 86 87 91 92 93 94 96 99 104 105 106 110 111 112 113 115 117 121 124 127 129 131 133 136 138 140 141 143 147 149 151 152 154 156 161 163 164 165 167 171 172 174 176 183 184 187 188 189 190 196 197 198 200 203 204 205 207 209 216 217 218 220 221 222 b 224 0 1 0 1 3 7 8 10 11 12 13 17 18 19 23 24 25 26 29 32 35 36 37 38 39 40 41 43 45 46 47 49 51 53 54 56 57 61 62 65 68 70 71 72 79 81 82 84 86 87 91 92 93 94 96 99 104 105 106 110 111 112 113 115 117 121 124 127 129 131 133 136 138 140 141 143 147 149 151 152 154 156 161 163 164 165 167 171 172 174 176 183 184 187 188 189 190 196 197 198 200 203 204 205 207 209 216 217 218 220 221 222 # 32118 xor c a 224 0 1 0 1 3 7 8 10 11 12 13 17 18 19 23 24 25 26 29 32 35 36 37 38 39 40 41 43 45 46 47 49 51 53 54 56 57 61 62 65 68 70 71 72 79 81 82 84 86 87 91 92 93 94 96 99 104 105 106 110 111 112 113 115 117 121 124 127 129 131 133 136 138 140 141 143 147 149 151 152 154 156 161 163 164 165 167 171 172 174 176 183 184 187 188 189 190 196 197 198 200 203 204 205 207 209 216 217 218 220 221 222 b 224 0 1 e # 32119 xor c a 224 0 1 1 4 7 8 9 10 12 15 16 20 21 23 24 27 29 30 31 32 34 35 36 39 43 46 48 50 51 54 56 57 60 62 63 64 65 66 67 71 73 74 75 77 83 85 88 91 92 94 97 99 100 101 102 107 109 110 115 118 120 123 124 128 131 135 136 137 139 140 144 145 146 147 149 154 156 158 159 160 162 163 164 166 172 173 176 179 181 183 187 190 192 195 196 197 199 201 203 204 205 209 211 212 213 214 215 216 218 220 221 222 223 b 224 0 1 1 4 7 8 9 10 12 15 16 20 21 23 24 27 29 30 31 32 34 35 36 39 43 46 48 50 51 54 56 57 60 62 63 64 65 66 67 71 73 74 75 77 83 85 88 91 92 94 97 99 100 101 102 107 109 110 115 118 120 123 124 128 131 135 136 137 139 140 144 145 146 147 149 154 156 158 159 160 162 163 164 166 172 173 176 179 181 183 187 190 192 195 196 197 199 201 203 204 205 209 211 212 213 214 215 216 218 220 221 222 223 # 32120 xor c a 224 0 1 1 4 7 8 9 10 12 15 16 20 21 23 24 27 29 30 31 32 34 35 36 39 43 46 48 50 51 54 56 57 60 62 63 64 65 66 67 71 73 74 75 77 83 85 88 91 92 94 97 99 100 101 102 107 109 110 115 118 120 123 124 128 131 135 136 137 139 140 144 145 146 147 149 154 156 158 159 160 162 163 164 166 172 173 176 179 181 183 187 190 192 195 196 197 199 201 203 204 205 209 211 212 213 214 215 216 218 220 221 222 223 b 224 0 1 f # 32121 xor c a 224 0 1 1 3 4 5 6 12 13 14 16 18 20 21 23 24 27 33 36 40 41 43 46 49 50 52 55 56 57 59 61 64 65 66 67 70 72 74 76 77 78 80 82 83 84 89 92 93 94 95 96 97 98 100 101 102 103 105 107 108 111 112 113 117 118 120 122 123 125 126 128 129 130 131 133 134 135 138 141 142 144 146 149 150 153 155 156 163 164 165 170 171 173 174 177 179 183 184 185 187 189 192 195 197 199 200 204 209 210 211 216 217 218 220 222 223 b 224 0 1 1 3 4 5 6 12 13 14 16 18 20 21 23 24 27 33 36 40 41 43 46 49 50 52 55 56 57 59 61 64 65 66 67 70 72 74 76 77 78 80 82 83 84 89 92 93 94 95 96 97 98 100 101 102 103 105 107 108 111 112 113 117 118 120 122 123 125 126 128 129 130 131 133 134 135 138 141 142 144 146 149 150 153 155 156 163 164 165 170 171 173 174 177 179 183 184 185 187 189 192 195 197 199 200 204 209 210 211 216 217 218 220 222 223 # 32122 xor c a 224 0 1 1 3 4 5 6 12 13 14 16 18 20 21 23 24 27 33 36 40 41 43 46 49 50 52 55 56 57 59 61 64 65 66 67 70 72 74 76 77 78 80 82 83 84 89 92 93 94 95 96 97 98 100 101 102 103 105 107 108 111 112 113 117 118 120 122 123 125 126 128 129 130 131 133 134 135 138 141 142 144 146 149 150 153 155 156 163 164 165 170 171 173 174 177 179 183 184 185 187 189 192 195 197 199 200 204 209 210 211 216 217 218 220 222 223 b 224 0 1 0 1 2 4 6 7 10 12 14 17 18 19 20 22 23 25 29 30 31 32 33 35 36 40 42 43 44 45 46 49 55 57 60 63 64 65 67 68 69 71 78 79 83 85 86 87 93 94 101 103 105 107 111 112 113 114 117 118 119 120 124 126 128 130 135 136 137 138 142 143 144 145 153 154 156 157 158 159 161 162 163 166 168 169 172 175 179 180 181 184 186 187 189 191 192 194 195 196 197 199 201 202 208 209 212 214 215 216 219 221 222 223 # 32123 xor c a 224 0 1 e b 224 0 1 e # 32124 xor c a 224 0 1 e b 224 1 0 e # 32125 xor c a 224 0 1 e b 224 0 1 e # 32126 xor c a 224 0 1 e b 224 1 0 f # 32127 xor c a 224 0 1 e b 224 0 1 e # 32128 xor c a 224 0 1 e b 224 1 0 2 6 7 8 9 13 14 15 16 17 19 24 25 27 28 29 30 33 34 35 37 40 41 43 46 50 51 52 54 62 63 65 67 69 70 72 76 79 80 82 84 85 86 88 90 92 93 94 96 104 105 108 109 111 116 118 119 120 121 123 124 127 128 130 132 137 138 140 142 144 146 147 149 150 152 153 154 155 158 159 160 161 165 166 168 169 170 171 173 176 178 181 182 184 185 187 188 189 190 191 192 195 196 199 203 204 205 206 207 208 209 212 216 217 219 220 222 # 32129 xor c a 224 0 1 f b 224 0 1 f # 32130 xor c a 224 0 1 f b 224 1 0 e # 32131 xor c a 224 0 1 f b 224 0 1 f # 32132 xor c a 224 0 1 f b 224 1 0 f # 32133 xor c a 224 0 1 f b 224 0 1 f # 32134 xor c a 224 0 1 f b 224 1 0 0 1 3 5 9 12 15 17 18 19 20 23 25 26 27 29 32 33 34 35 36 41 44 45 46 49 53 55 56 58 63 66 68 73 74 76 77 80 81 82 86 88 89 91 92 93 94 97 101 102 103 104 105 106 107 110 113 115 116 118 119 122 125 127 128 129 132 134 135 137 138 139 141 142 143 148 152 153 156 157 160 161 162 163 165 166 167 168 169 174 175 176 179 180 181 183 184 185 188 189 190 191 192 193 194 197 201 203 206 208 211 214 215 219 222 # 32135 xor c a 224 0 1 2 3 6 7 8 10 12 13 15 17 18 21 25 27 31 32 35 36 38 39 40 42 43 46 49 50 52 54 59 60 61 62 68 70 71 72 73 74 75 77 79 80 83 84 88 89 92 94 100 102 105 107 109 110 113 114 118 119 120 123 124 126 128 131 132 137 139 140 142 145 146 149 153 154 155 157 161 166 171 172 175 177 180 181 182 183 184 185 186 188 190 192 194 196 197 198 199 201 202 203 206 210 211 213 214 217 218 221 b 224 0 1 2 3 6 7 8 10 12 13 15 17 18 21 25 27 31 32 35 36 38 39 40 42 43 46 49 50 52 54 59 60 61 62 68 70 71 72 73 74 75 77 79 80 83 84 88 89 92 94 100 102 105 107 109 110 113 114 118 119 120 123 124 126 128 131 132 137 139 140 142 145 146 149 153 154 155 157 161 166 171 172 175 177 180 181 182 183 184 185 186 188 190 192 194 196 197 198 199 201 202 203 206 210 211 213 214 217 218 221 # 32136 xor c a 224 0 1 2 3 6 7 8 10 12 13 15 17 18 21 25 27 31 32 35 36 38 39 40 42 43 46 49 50 52 54 59 60 61 62 68 70 71 72 73 74 75 77 79 80 83 84 88 89 92 94 100 102 105 107 109 110 113 114 118 119 120 123 124 126 128 131 132 137 139 140 142 145 146 149 153 154 155 157 161 166 171 172 175 177 180 181 182 183 184 185 186 188 190 192 194 196 197 198 199 201 202 203 206 210 211 213 214 217 218 221 b 224 1 0 e # 32137 xor c a 224 0 1 3 4 6 9 14 16 17 20 22 25 27 28 29 30 31 34 36 37 39 40 41 44 46 47 50 52 53 57 58 60 61 69 72 73 75 79 82 87 90 94 95 99 102 103 106 108 112 115 116 117 118 121 122 123 124 126 128 131 132 134 135 136 137 140 141 142 143 144 146 147 150 151 153 154 157 158 159 160 161 162 163 165 166 167 168 171 172 175 178 179 180 181 183 187 188 189 190 191 192 193 194 196 200 201 203 204 205 206 208 211 213 214 215 216 217 219 220 222 223 b 224 0 1 3 4 6 9 14 16 17 20 22 25 27 28 29 30 31 34 36 37 39 40 41 44 46 47 50 52 53 57 58 60 61 69 72 73 75 79 82 87 90 94 95 99 102 103 106 108 112 115 116 117 118 121 122 123 124 126 128 131 132 134 135 136 137 140 141 142 143 144 146 147 150 151 153 154 157 158 159 160 161 162 163 165 166 167 168 171 172 175 178 179 180 181 183 187 188 189 190 191 192 193 194 196 200 201 203 204 205 206 208 211 213 214 215 216 217 219 220 222 223 # 32138 xor c a 224 0 1 3 4 6 9 14 16 17 20 22 25 27 28 29 30 31 34 36 37 39 40 41 44 46 47 50 52 53 57 58 60 61 69 72 73 75 79 82 87 90 94 95 99 102 103 106 108 112 115 116 117 118 121 122 123 124 126 128 131 132 134 135 136 137 140 141 142 143 144 146 147 150 151 153 154 157 158 159 160 161 162 163 165 166 167 168 171 172 175 178 179 180 181 183 187 188 189 190 191 192 193 194 196 200 201 203 204 205 206 208 211 213 214 215 216 217 219 220 222 223 b 224 1 0 f # 32139 xor c a 224 0 1 0 1 3 7 10 14 16 17 18 20 21 22 23 24 26 27 28 29 30 31 33 35 37 38 39 42 44 45 46 47 48 49 56 57 58 60 61 64 65 66 69 70 71 73 76 77 80 82 84 90 91 95 96 100 107 109 115 116 117 119 122 123 124 126 127 129 134 136 140 141 142 149 151 155 158 159 161 166 170 173 174 175 176 177 180 182 183 184 186 188 189 191 192 193 196 198 200 201 202 205 208 209 210 213 215 219 222 223 b 224 0 1 0 1 3 7 10 14 16 17 18 20 21 22 23 24 26 27 28 29 30 31 33 35 37 38 39 42 44 45 46 47 48 49 56 57 58 60 61 64 65 66 69 70 71 73 76 77 80 82 84 90 91 95 96 100 107 109 115 116 117 119 122 123 124 126 127 129 134 136 140 141 142 149 151 155 158 159 161 166 170 173 174 175 176 177 180 182 183 184 186 188 189 191 192 193 196 198 200 201 202 205 208 209 210 213 215 219 222 223 # 32140 xor c a 224 0 1 0 1 3 7 10 14 16 17 18 20 21 22 23 24 26 27 28 29 30 31 33 35 37 38 39 42 44 45 46 47 48 49 56 57 58 60 61 64 65 66 69 70 71 73 76 77 80 82 84 90 91 95 96 100 107 109 115 116 117 119 122 123 124 126 127 129 134 136 140 141 142 149 151 155 158 159 161 166 170 173 174 175 176 177 180 182 183 184 186 188 189 191 192 193 196 198 200 201 202 205 208 209 210 213 215 219 222 223 b 224 1 0 4 5 6 7 8 9 13 14 16 18 19 22 24 27 28 30 31 32 35 37 38 39 40 45 51 57 67 70 72 73 76 77 81 83 84 86 90 93 94 95 97 98 99 103 105 108 109 110 111 114 116 117 118 119 120 121 124 132 137 138 139 141 142 143 144 145 147 150 154 155 159 160 164 165 166 171 174 176 178 180 181 182 184 185 192 194 195 199 200 202 204 205 207 217 218 219 221 222 # 32141 xor c a 224 0 1 e b 224 0 1 e # 32142 xor c a 224 0 1 e b 224 1 1 e # 32143 xor c a 224 0 1 e b 224 0 1 e # 32144 xor c a 224 0 1 e b 224 1 1 f # 32145 xor c a 224 0 1 e b 224 0 1 e # 32146 xor c a 224 0 1 e b 224 1 1 1 3 8 11 12 13 17 19 20 21 22 24 25 26 27 28 29 32 34 35 36 39 40 41 42 43 44 46 48 50 51 53 56 62 63 64 65 66 67 70 71 72 73 74 75 76 77 78 79 81 82 83 84 86 87 91 92 93 94 95 96 97 98 99 100 101 102 103 105 106 109 111 112 115 116 120 121 122 124 125 129 132 138 139 140 143 144 145 149 150 152 153 154 157 158 159 160 163 164 165 166 169 170 172 174 175 179 181 184 185 186 188 189 191 193 194 196 197 199 204 208 213 216 219 220 221 222 # 32147 xor c a 224 0 1 f b 224 0 1 f # 32148 xor c a 224 0 1 f b 224 1 1 e # 32149 xor c a 224 0 1 f b 224 0 1 f # 32150 xor c a 224 0 1 f b 224 1 1 f # 32151 xor c a 224 0 1 f b 224 0 1 f # 32152 xor c a 224 0 1 f b 224 1 1 5 7 12 14 16 18 22 23 26 28 30 32 34 37 38 39 44 46 47 48 51 52 53 54 57 58 62 64 67 70 71 72 73 77 79 82 85 87 88 90 91 92 93 97 99 102 103 105 108 109 114 115 126 133 135 136 137 139 140 141 143 146 147 150 151 152 155 156 157 159 161 163 164 165 167 168 169 170 171 174 175 179 180 182 184 189 192 193 196 197 199 201 202 203 206 207 208 210 211 212 213 216 217 218 220 222 # 32153 xor c a 224 0 1 1 2 4 12 13 15 17 19 20 21 23 26 28 29 30 32 33 34 36 38 40 41 42 44 45 48 49 51 53 55 61 62 63 64 65 67 70 71 73 76 77 79 81 83 85 86 87 90 91 93 94 95 98 99 101 102 103 106 108 110 115 119 120 122 123 126 127 128 129 134 135 137 142 143 144 148 149 151 153 154 155 157 161 163 166 167 171 174 176 179 181 183 184 188 189 192 193 198 199 200 202 205 208 209 210 212 214 216 218 219 b 224 0 1 1 2 4 12 13 15 17 19 20 21 23 26 28 29 30 32 33 34 36 38 40 41 42 44 45 48 49 51 53 55 61 62 63 64 65 67 70 71 73 76 77 79 81 83 85 86 87 90 91 93 94 95 98 99 101 102 103 106 108 110 115 119 120 122 123 126 127 128 129 134 135 137 142 143 144 148 149 151 153 154 155 157 161 163 166 167 171 174 176 179 181 183 184 188 189 192 193 198 199 200 202 205 208 209 210 212 214 216 218 219 # 32154 xor c a 224 0 1 1 2 4 12 13 15 17 19 20 21 23 26 28 29 30 32 33 34 36 38 40 41 42 44 45 48 49 51 53 55 61 62 63 64 65 67 70 71 73 76 77 79 81 83 85 86 87 90 91 93 94 95 98 99 101 102 103 106 108 110 115 119 120 122 123 126 127 128 129 134 135 137 142 143 144 148 149 151 153 154 155 157 161 163 166 167 171 174 176 179 181 183 184 188 189 192 193 198 199 200 202 205 208 209 210 212 214 216 218 219 b 224 1 1 e # 32155 xor c a 224 0 1 1 2 3 5 6 7 8 9 13 14 16 17 18 21 22 23 25 26 27 28 29 32 33 34 35 36 37 38 39 43 44 45 47 48 51 52 54 56 57 58 59 60 67 68 70 72 73 75 76 77 79 81 82 84 85 87 90 92 94 95 98 100 101 102 104 107 109 111 114 116 120 122 123 124 126 128 129 130 133 134 138 139 140 144 146 147 148 151 152 153 154 155 158 161 162 163 165 166 167 168 169 171 173 178 180 183 186 187 188 189 190 191 193 194 195 197 198 200 205 207 212 213 215 216 218 219 220 221 222 b 224 0 1 1 2 3 5 6 7 8 9 13 14 16 17 18 21 22 23 25 26 27 28 29 32 33 34 35 36 37 38 39 43 44 45 47 48 51 52 54 56 57 58 59 60 67 68 70 72 73 75 76 77 79 81 82 84 85 87 90 92 94 95 98 100 101 102 104 107 109 111 114 116 120 122 123 124 126 128 129 130 133 134 138 139 140 144 146 147 148 151 152 153 154 155 158 161 162 163 165 166 167 168 169 171 173 178 180 183 186 187 188 189 190 191 193 194 195 197 198 200 205 207 212 213 215 216 218 219 220 221 222 # 32156 xor c a 224 0 1 1 2 3 5 6 7 8 9 13 14 16 17 18 21 22 23 25 26 27 28 29 32 33 34 35 36 37 38 39 43 44 45 47 48 51 52 54 56 57 58 59 60 67 68 70 72 73 75 76 77 79 81 82 84 85 87 90 92 94 95 98 100 101 102 104 107 109 111 114 116 120 122 123 124 126 128 129 130 133 134 138 139 140 144 146 147 148 151 152 153 154 155 158 161 162 163 165 166 167 168 169 171 173 178 180 183 186 187 188 189 190 191 193 194 195 197 198 200 205 207 212 213 215 216 218 219 220 221 222 b 224 1 1 f # 32157 xor c a 224 0 1 3 7 9 11 12 13 17 18 19 22 24 25 27 29 31 33 34 35 36 38 41 44 45 46 47 49 50 51 53 56 57 58 60 64 66 67 68 69 72 73 74 77 79 80 82 91 92 93 95 96 98 99 100 102 103 104 105 109 115 116 117 118 126 128 129 130 131 132 133 135 136 137 141 143 145 148 150 152 153 154 157 162 169 171 172 173 176 177 178 179 181 184 186 188 192 194 196 201 202 204 206 207 209 210 211 212 216 218 219 b 224 0 1 3 7 9 11 12 13 17 18 19 22 24 25 27 29 31 33 34 35 36 38 41 44 45 46 47 49 50 51 53 56 57 58 60 64 66 67 68 69 72 73 74 77 79 80 82 91 92 93 95 96 98 99 100 102 103 104 105 109 115 116 117 118 126 128 129 130 131 132 133 135 136 137 141 143 145 148 150 152 153 154 157 162 169 171 172 173 176 177 178 179 181 184 186 188 192 194 196 201 202 204 206 207 209 210 211 212 216 218 219 # 32158 xor c a 224 0 1 3 7 9 11 12 13 17 18 19 22 24 25 27 29 31 33 34 35 36 38 41 44 45 46 47 49 50 51 53 56 57 58 60 64 66 67 68 69 72 73 74 77 79 80 82 91 92 93 95 96 98 99 100 102 103 104 105 109 115 116 117 118 126 128 129 130 131 132 133 135 136 137 141 143 145 148 150 152 153 154 157 162 169 171 172 173 176 177 178 179 181 184 186 188 192 194 196 201 202 204 206 207 209 210 211 212 216 218 219 b 224 1 1 0 3 4 5 6 8 9 10 11 13 14 15 16 17 18 22 24 25 26 28 31 33 36 39 42 43 44 45 46 47 48 49 54 56 57 59 60 61 62 64 66 67 68 70 73 76 79 83 84 86 87 88 90 91 96 102 103 105 109 113 115 118 120 124 125 126 127 128 132 133 136 137 138 140 142 143 145 146 149 150 151 153 156 157 158 159 163 165 168 169 178 181 184 185 186 188 189 191 192 194 199 201 205 206 209 210 211 212 217 218 219 220 222 223 # 32159 xor c a 224 1 0 e b 224 1 0 e # 32160 xor c a 224 1 0 e b 224 0 0 e # 32161 xor c a 224 1 0 e b 224 1 0 e # 32162 xor c a 224 1 0 e b 224 0 0 f # 32163 xor c a 224 1 0 e b 224 1 0 e # 32164 xor c a 224 1 0 e b 224 0 0 0 1 2 3 6 10 11 13 15 16 18 19 20 21 23 24 26 27 29 32 36 38 40 41 44 47 48 49 52 53 55 56 58 62 64 65 66 67 71 75 76 78 79 84 85 87 91 97 98 103 104 105 106 107 111 112 113 115 117 118 119 120 125 126 127 128 129 132 133 134 135 137 139 141 143 144 145 146 150 152 154 157 158 159 164 168 169 172 173 177 178 179 181 191 192 193 195 196 199 203 207 210 211 212 216 217 218 219 222 223 # 32165 xor c a 224 1 0 f b 224 1 0 f # 32166 xor c a 224 1 0 f b 224 0 0 e # 32167 xor c a 224 1 0 f b 224 1 0 f # 32168 xor c a 224 1 0 f b 224 0 0 f # 32169 xor c a 224 1 0 f b 224 1 0 f # 32170 xor c a 224 1 0 f b 224 0 0 0 1 2 3 5 6 7 10 11 12 22 28 29 31 32 34 37 39 40 41 43 45 46 47 51 52 53 54 55 61 62 65 66 69 72 73 76 78 79 82 85 87 88 89 90 92 93 95 96 101 102 105 111 112 113 114 115 116 118 119 120 121 122 123 124 126 128 130 131 132 137 138 139 141 143 144 146 147 148 149 151 156 158 159 162 164 165 166 168 169 171 172 173 174 175 177 179 180 181 182 191 192 193 195 196 199 202 203 205 206 208 214 215 219 222 # 32171 xor c a 224 1 0 2 4 8 9 11 12 13 17 18 21 23 24 26 28 29 30 33 34 36 39 41 42 43 44 47 53 57 58 60 62 63 65 68 69 70 73 76 77 81 82 85 86 87 88 90 91 92 93 94 97 100 102 105 108 109 111 115 118 120 121 122 123 125 126 127 128 132 134 139 140 141 142 148 150 152 153 160 161 162 163 166 168 171 175 176 177 179 180 181 183 184 188 189 192 196 198 200 204 206 207 213 215 217 219 220 221 223 b 224 1 0 2 4 8 9 11 12 13 17 18 21 23 24 26 28 29 30 33 34 36 39 41 42 43 44 47 53 57 58 60 62 63 65 68 69 70 73 76 77 81 82 85 86 87 88 90 91 92 93 94 97 100 102 105 108 109 111 115 118 120 121 122 123 125 126 127 128 132 134 139 140 141 142 148 150 152 153 160 161 162 163 166 168 171 175 176 177 179 180 181 183 184 188 189 192 196 198 200 204 206 207 213 215 217 219 220 221 223 # 32172 xor c a 224 1 0 2 4 8 9 11 12 13 17 18 21 23 24 26 28 29 30 33 34 36 39 41 42 43 44 47 53 57 58 60 62 63 65 68 69 70 73 76 77 81 82 85 86 87 88 90 91 92 93 94 97 100 102 105 108 109 111 115 118 120 121 122 123 125 126 127 128 132 134 139 140 141 142 148 150 152 153 160 161 162 163 166 168 171 175 176 177 179 180 181 183 184 188 189 192 196 198 200 204 206 207 213 215 217 219 220 221 223 b 224 0 0 e # 32173 xor c a 224 1 0 0 1 2 3 4 5 7 8 10 11 12 13 17 20 21 23 25 26 30 33 36 38 39 40 41 43 44 45 48 49 50 51 54 55 56 57 62 66 67 68 69 70 71 72 74 75 77 78 80 81 82 84 85 87 91 92 95 96 97 98 100 101 104 105 108 111 112 114 115 118 119 120 124 125 127 128 134 141 147 152 153 154 155 156 158 160 161 162 163 165 167 169 171 172 173 176 177 178 182 188 189 190 192 193 196 197 199 201 202 204 205 207 208 211 212 213 218 222 b 224 1 0 0 1 2 3 4 5 7 8 10 11 12 13 17 20 21 23 25 26 30 33 36 38 39 40 41 43 44 45 48 49 50 51 54 55 56 57 62 66 67 68 69 70 71 72 74 75 77 78 80 81 82 84 85 87 91 92 95 96 97 98 100 101 104 105 108 111 112 114 115 118 119 120 124 125 127 128 134 141 147 152 153 154 155 156 158 160 161 162 163 165 167 169 171 172 173 176 177 178 182 188 189 190 192 193 196 197 199 201 202 204 205 207 208 211 212 213 218 222 # 32174 xor c a 224 1 0 0 1 2 3 4 5 7 8 10 11 12 13 17 20 21 23 25 26 30 33 36 38 39 40 41 43 44 45 48 49 50 51 54 55 56 57 62 66 67 68 69 70 71 72 74 75 77 78 80 81 82 84 85 87 91 92 95 96 97 98 100 101 104 105 108 111 112 114 115 118 119 120 124 125 127 128 134 141 147 152 153 154 155 156 158 160 161 162 163 165 167 169 171 172 173 176 177 178 182 188 189 190 192 193 196 197 199 201 202 204 205 207 208 211 212 213 218 222 b 224 0 0 f # 32175 xor c a 224 1 0 2 3 4 6 9 10 12 14 16 19 21 23 25 26 27 29 31 32 34 35 36 37 46 48 50 51 52 54 57 58 59 68 69 73 74 75 78 80 81 83 85 86 88 89 93 94 95 96 98 99 107 108 118 124 127 130 131 132 136 140 142 143 144 150 151 152 155 158 159 160 161 162 165 166 167 169 176 177 178 181 182 183 184 186 188 194 197 199 200 201 202 206 208 209 216 217 218 222 223 b 224 1 0 2 3 4 6 9 10 12 14 16 19 21 23 25 26 27 29 31 32 34 35 36 37 46 48 50 51 52 54 57 58 59 68 69 73 74 75 78 80 81 83 85 86 88 89 93 94 95 96 98 99 107 108 118 124 127 130 131 132 136 140 142 143 144 150 151 152 155 158 159 160 161 162 165 166 167 169 176 177 178 181 182 183 184 186 188 194 197 199 200 201 202 206 208 209 216 217 218 222 223 # 32176 xor c a 224 1 0 2 3 4 6 9 10 12 14 16 19 21 23 25 26 27 29 31 32 34 35 36 37 46 48 50 51 52 54 57 58 59 68 69 73 74 75 78 80 81 83 85 86 88 89 93 94 95 96 98 99 107 108 118 124 127 130 131 132 136 140 142 143 144 150 151 152 155 158 159 160 161 162 165 166 167 169 176 177 178 181 182 183 184 186 188 194 197 199 200 201 202 206 208 209 216 217 218 222 223 b 224 0 0 0 1 3 4 5 6 8 9 10 12 15 17 19 26 27 28 29 30 32 33 36 38 40 41 42 43 46 51 52 54 56 57 61 62 64 66 67 68 69 71 73 74 75 77 80 83 84 86 87 88 94 96 98 103 105 108 109 110 111 118 120 122 123 125 130 133 135 136 137 139 143 145 146 147 149 155 158 160 161 162 164 166 167 168 173 175 176 178 182 184 185 190 192 193 195 196 199 200 201 204 205 207 208 212 214 215 217 218 219 221 222 # 32177 xor c a 224 1 0 e b 224 1 0 e # 32178 xor c a 224 1 0 e b 224 0 1 e # 32179 xor c a 224 1 0 e b 224 1 0 e # 32180 xor c a 224 1 0 e b 224 0 1 f # 32181 xor c a 224 1 0 e b 224 1 0 e # 32182 xor c a 224 1 0 e b 224 0 1 2 4 7 9 10 12 15 17 18 21 22 24 25 27 28 32 34 35 36 42 43 44 46 49 54 64 66 70 71 72 74 75 76 78 79 83 84 86 88 90 92 98 99 100 101 102 103 106 107 108 109 110 114 116 117 118 119 122 123 124 128 131 133 134 137 142 143 144 145 146 147 148 149 150 151 153 154 155 160 166 167 168 172 175 176 178 179 180 182 185 190 192 193 201 202 205 206 209 210 213 217 218 219 221 222 # 32183 xor c a 224 1 0 f b 224 1 0 f # 32184 xor c a 224 1 0 f b 224 0 1 e # 32185 xor c a 224 1 0 f b 224 1 0 f # 32186 xor c a 224 1 0 f b 224 0 1 f # 32187 xor c a 224 1 0 f b 224 1 0 f # 32188 xor c a 224 1 0 f b 224 0 1 0 2 3 4 9 12 14 17 21 22 23 24 25 26 27 28 29 33 35 37 40 41 42 43 45 46 50 51 53 54 56 57 59 63 65 66 67 69 72 74 75 76 77 83 91 92 99 102 103 104 105 106 107 108 112 113 117 118 124 125 126 127 128 129 130 133 136 138 139 140 143 144 145 150 151 153 154 156 157 159 160 161 162 164 172 174 175 178 179 181 183 184 191 197 198 199 201 203 206 207 209 211 213 214 218 219 220 221 222 # 32189 xor c a 224 1 0 1 3 4 6 7 9 10 11 13 15 17 18 19 20 21 24 25 27 28 29 30 32 34 35 36 37 38 39 40 41 42 43 46 47 50 54 57 58 60 61 63 66 71 73 74 75 77 78 81 82 84 86 89 92 93 99 100 101 102 103 104 105 106 107 111 116 117 120 121 122 124 126 132 133 135 136 137 138 142 143 146 151 158 159 167 169 171 174 175 177 178 179 182 183 184 191 195 196 197 198 200 201 203 206 207 208 209 214 215 219 222 223 b 224 1 0 1 3 4 6 7 9 10 11 13 15 17 18 19 20 21 24 25 27 28 29 30 32 34 35 36 37 38 39 40 41 42 43 46 47 50 54 57 58 60 61 63 66 71 73 74 75 77 78 81 82 84 86 89 92 93 99 100 101 102 103 104 105 106 107 111 116 117 120 121 122 124 126 132 133 135 136 137 138 142 143 146 151 158 159 167 169 171 174 175 177 178 179 182 183 184 191 195 196 197 198 200 201 203 206 207 208 209 214 215 219 222 223 # 32190 xor c a 224 1 0 1 3 4 6 7 9 10 11 13 15 17 18 19 20 21 24 25 27 28 29 30 32 34 35 36 37 38 39 40 41 42 43 46 47 50 54 57 58 60 61 63 66 71 73 74 75 77 78 81 82 84 86 89 92 93 99 100 101 102 103 104 105 106 107 111 116 117 120 121 122 124 126 132 133 135 136 137 138 142 143 146 151 158 159 167 169 171 174 175 177 178 179 182 183 184 191 195 196 197 198 200 201 203 206 207 208 209 214 215 219 222 223 b 224 0 1 e # 32191 xor c a 224 1 0 0 2 3 7 9 10 11 13 17 19 22 23 24 25 26 29 33 37 39 40 42 47 49 57 59 60 61 63 64 65 68 69 71 73 74 75 81 82 83 89 91 94 99 101 102 103 104 105 106 107 111 114 116 117 118 119 120 122 124 125 127 129 130 131 132 133 134 137 139 140 141 146 149 151 152 155 157 158 159 160 161 162 165 166 167 170 174 175 179 182 184 185 186 187 188 189 190 194 195 197 198 199 201 203 204 205 206 211 212 213 214 216 217 219 220 b 224 1 0 0 2 3 7 9 10 11 13 17 19 22 23 24 25 26 29 33 37 39 40 42 47 49 57 59 60 61 63 64 65 68 69 71 73 74 75 81 82 83 89 91 94 99 101 102 103 104 105 106 107 111 114 116 117 118 119 120 122 124 125 127 129 130 131 132 133 134 137 139 140 141 146 149 151 152 155 157 158 159 160 161 162 165 166 167 170 174 175 179 182 184 185 186 187 188 189 190 194 195 197 198 199 201 203 204 205 206 211 212 213 214 216 217 219 220 # 32192 xor c a 224 1 0 0 2 3 7 9 10 11 13 17 19 22 23 24 25 26 29 33 37 39 40 42 47 49 57 59 60 61 63 64 65 68 69 71 73 74 75 81 82 83 89 91 94 99 101 102 103 104 105 106 107 111 114 116 117 118 119 120 122 124 125 127 129 130 131 132 133 134 137 139 140 141 146 149 151 152 155 157 158 159 160 161 162 165 166 167 170 174 175 179 182 184 185 186 187 188 189 190 194 195 197 198 199 201 203 204 205 206 211 212 213 214 216 217 219 220 b 224 0 1 f # 32193 xor c a 224 1 0 0 3 6 7 8 9 10 11 12 13 16 17 19 20 23 25 27 28 29 31 32 34 36 38 39 41 42 46 48 51 55 57 58 60 61 62 63 65 66 69 70 71 72 73 76 78 79 81 82 83 86 87 90 91 93 94 95 96 97 99 100 102 104 105 106 107 110 111 113 114 115 116 118 120 121 124 125 128 129 132 134 135 137 138 141 143 144 145 146 147 150 154 155 159 161 170 175 177 178 179 181 183 184 186 188 191 193 198 200 201 202 203 206 209 211 216 218 221 223 b 224 1 0 0 3 6 7 8 9 10 11 12 13 16 17 19 20 23 25 27 28 29 31 32 34 36 38 39 41 42 46 48 51 55 57 58 60 61 62 63 65 66 69 70 71 72 73 76 78 79 81 82 83 86 87 90 91 93 94 95 96 97 99 100 102 104 105 106 107 110 111 113 114 115 116 118 120 121 124 125 128 129 132 134 135 137 138 141 143 144 145 146 147 150 154 155 159 161 170 175 177 178 179 181 183 184 186 188 191 193 198 200 201 202 203 206 209 211 216 218 221 223 # 32194 xor c a 224 1 0 0 3 6 7 8 9 10 11 12 13 16 17 19 20 23 25 27 28 29 31 32 34 36 38 39 41 42 46 48 51 55 57 58 60 61 62 63 65 66 69 70 71 72 73 76 78 79 81 82 83 86 87 90 91 93 94 95 96 97 99 100 102 104 105 106 107 110 111 113 114 115 116 118 120 121 124 125 128 129 132 134 135 137 138 141 143 144 145 146 147 150 154 155 159 161 170 175 177 178 179 181 183 184 186 188 191 193 198 200 201 202 203 206 209 211 216 218 221 223 b 224 0 1 0 1 3 7 10 12 13 14 15 16 18 20 22 26 27 30 33 37 42 43 45 46 49 51 52 56 60 65 66 70 71 72 73 74 76 77 81 85 86 87 92 93 95 99 102 109 110 111 112 113 116 119 120 125 127 128 129 130 134 135 136 142 147 149 150 154 156 159 161 163 166 170 171 173 174 175 176 178 181 182 184 186 187 188 190 191 194 195 196 200 201 202 204 205 206 207 209 211 213 223 # 32195 xor c a 224 1 0 e b 224 1 0 e # 32196 xor c a 224 1 0 e b 224 1 0 e # 32197 xor c a 224 1 0 e b 224 1 0 e # 32198 xor c a 224 1 0 e b 224 1 0 f # 32199 xor c a 224 1 0 e b 224 1 0 e # 32200 xor c a 224 1 0 e b 224 1 0 0 1 3 5 6 8 9 12 19 23 24 25 30 34 35 37 39 40 41 43 45 49 51 54 55 57 62 63 64 65 66 67 68 70 71 72 74 78 80 81 85 87 88 92 93 96 100 103 104 105 106 109 110 112 113 116 117 118 119 123 125 127 129 133 134 136 137 138 139 140 145 146 149 151 152 153 154 156 161 162 163 165 168 169 174 175 177 179 181 184 186 187 189 191 192 196 197 199 200 201 208 209 212 213 214 215 216 217 218 220 # 32201 xor c a 224 1 0 f b 224 1 0 f # 32202 xor c a 224 1 0 f b 224 1 0 e # 32203 xor c a 224 1 0 f b 224 1 0 f # 32204 xor c a 224 1 0 f b 224 1 0 f # 32205 xor c a 224 1 0 f b 224 1 0 f # 32206 xor c a 224 1 0 f b 224 1 0 1 2 8 12 13 14 15 17 20 22 23 24 25 27 28 33 34 35 38 40 47 50 51 52 53 54 55 56 57 59 61 63 64 67 72 73 74 76 77 78 81 84 85 86 87 88 93 95 96 97 98 102 104 107 111 120 121 122 123 126 128 129 130 133 137 139 142 143 144 145 149 150 151 153 154 155 157 160 165 168 169 173 176 177 178 180 181 184 187 189 193 196 197 198 199 200 203 205 208 209 212 213 214 216 217 220 221 223 # 32207 xor c a 224 1 0 1 4 6 7 8 10 11 12 13 15 16 17 19 21 24 25 26 27 30 31 36 38 41 44 45 47 51 53 59 61 62 63 66 67 69 71 72 73 76 77 81 83 85 87 88 90 93 95 98 99 102 103 107 108 109 114 115 118 120 121 122 124 125 126 129 130 132 133 136 137 139 140 144 162 169 176 177 180 181 185 189 190 191 193 194 195 198 199 204 205 206 210 214 218 219 221 223 b 224 1 0 1 4 6 7 8 10 11 12 13 15 16 17 19 21 24 25 26 27 30 31 36 38 41 44 45 47 51 53 59 61 62 63 66 67 69 71 72 73 76 77 81 83 85 87 88 90 93 95 98 99 102 103 107 108 109 114 115 118 120 121 122 124 125 126 129 130 132 133 136 137 139 140 144 162 169 176 177 180 181 185 189 190 191 193 194 195 198 199 204 205 206 210 214 218 219 221 223 # 32208 xor c a 224 1 0 1 4 6 7 8 10 11 12 13 15 16 17 19 21 24 25 26 27 30 31 36 38 41 44 45 47 51 53 59 61 62 63 66 67 69 71 72 73 76 77 81 83 85 87 88 90 93 95 98 99 102 103 107 108 109 114 115 118 120 121 122 124 125 126 129 130 132 133 136 137 139 140 144 162 169 176 177 180 181 185 189 190 191 193 194 195 198 199 204 205 206 210 214 218 219 221 223 b 224 1 0 e # 32209 xor c a 224 1 0 0 4 8 9 10 14 15 16 17 19 20 26 27 32 33 34 35 41 42 43 45 46 53 54 55 57 58 59 67 68 70 71 73 74 75 79 80 88 89 96 97 103 104 106 108 109 113 114 115 117 120 124 125 126 127 128 129 131 133 134 136 138 139 143 145 146 148 149 150 151 157 159 160 162 165 170 171 174 175 181 183 189 194 198 201 203 204 205 206 209 211 212 213 214 218 219 b 224 1 0 0 4 8 9 10 14 15 16 17 19 20 26 27 32 33 34 35 41 42 43 45 46 53 54 55 57 58 59 67 68 70 71 73 74 75 79 80 88 89 96 97 103 104 106 108 109 113 114 115 117 120 124 125 126 127 128 129 131 133 134 136 138 139 143 145 146 148 149 150 151 157 159 160 162 165 170 171 174 175 181 183 189 194 198 201 203 204 205 206 209 211 212 213 214 218 219 # 32210 xor c a 224 1 0 0 4 8 9 10 14 15 16 17 19 20 26 27 32 33 34 35 41 42 43 45 46 53 54 55 57 58 59 67 68 70 71 73 74 75 79 80 88 89 96 97 103 104 106 108 109 113 114 115 117 120 124 125 126 127 128 129 131 133 134 136 138 139 143 145 146 148 149 150 151 157 159 160 162 165 170 171 174 175 181 183 189 194 198 201 203 204 205 206 209 211 212 213 214 218 219 b 224 1 0 f # 32211 xor c a 224 1 0 0 1 2 3 5 7 9 10 12 14 20 22 24 26 27 28 37 39 40 41 45 46 47 49 55 56 58 60 62 63 64 69 70 72 74 81 82 83 84 86 87 88 89 96 97 100 104 106 107 108 109 112 114 115 117 121 122 123 124 126 127 130 131 132 135 136 138 142 143 145 146 147 151 152 153 154 155 157 158 161 165 166 167 169 172 176 181 184 187 188 192 193 196 201 202 204 206 207 211 212 213 215 217 218 b 224 1 0 0 1 2 3 5 7 9 10 12 14 20 22 24 26 27 28 37 39 40 41 45 46 47 49 55 56 58 60 62 63 64 69 70 72 74 81 82 83 84 86 87 88 89 96 97 100 104 106 107 108 109 112 114 115 117 121 122 123 124 126 127 130 131 132 135 136 138 142 143 145 146 147 151 152 153 154 155 157 158 161 165 166 167 169 172 176 181 184 187 188 192 193 196 201 202 204 206 207 211 212 213 215 217 218 # 32212 xor c a 224 1 0 0 1 2 3 5 7 9 10 12 14 20 22 24 26 27 28 37 39 40 41 45 46 47 49 55 56 58 60 62 63 64 69 70 72 74 81 82 83 84 86 87 88 89 96 97 100 104 106 107 108 109 112 114 115 117 121 122 123 124 126 127 130 131 132 135 136 138 142 143 145 146 147 151 152 153 154 155 157 158 161 165 166 167 169 172 176 181 184 187 188 192 193 196 201 202 204 206 207 211 212 213 215 217 218 b 224 1 0 1 5 7 10 13 15 16 17 18 19 20 22 27 28 29 30 31 32 37 39 40 44 45 47 48 50 51 52 53 54 59 62 64 66 67 68 70 71 73 76 77 86 88 94 96 97 99 100 101 102 104 106 107 111 112 116 118 122 123 124 133 134 137 144 147 148 153 158 159 160 161 162 164 165 166 170 171 172 173 174 175 180 181 184 185 190 193 194 196 197 200 202 203 205 207 209 210 212 217 218 221 222 # 32213 xor c a 224 1 0 e b 224 1 0 e # 32214 xor c a 224 1 0 e b 224 1 1 e # 32215 xor c a 224 1 0 e b 224 1 0 e # 32216 xor c a 224 1 0 e b 224 1 1 f # 32217 xor c a 224 1 0 e b 224 1 0 e # 32218 xor c a 224 1 0 e b 224 1 1 0 2 6 9 10 11 12 20 21 22 24 26 30 31 32 36 40 42 43 44 46 48 50 51 56 57 58 64 65 66 67 68 70 71 72 73 74 75 77 81 83 85 88 89 90 93 94 96 99 100 102 107 113 115 123 127 128 129 130 132 134 136 138 140 142 144 145 149 150 151 152 154 161 162 165 168 170 171 172 174 175 179 180 181 182 183 185 187 190 191 193 194 195 200 203 204 209 212 215 217 218 219 221 223 # 32219 xor c a 224 1 0 f b 224 1 0 f # 32220 xor c a 224 1 0 f b 224 1 1 e # 32221 xor c a 224 1 0 f b 224 1 0 f # 32222 xor c a 224 1 0 f b 224 1 1 f # 32223 xor c a 224 1 0 f b 224 1 0 f # 32224 xor c a 224 1 0 f b 224 1 1 2 3 4 7 9 10 12 16 17 18 19 20 22 26 31 32 33 34 35 38 39 40 41 42 43 44 47 50 52 56 58 60 61 62 63 64 65 66 68 69 70 71 72 73 74 75 78 79 80 82 83 84 87 88 89 91 92 94 95 96 97 99 100 102 103 105 107 112 115 116 117 118 119 120 121 122 123 125 126 128 129 131 134 139 141 145 146 149 152 154 155 157 160 163 164 165 167 169 170 171 173 174 175 176 177 178 180 187 189 190 191 194 195 198 201 203 204 210 211 212 216 217 218 219 220 221 222 223 # 32225 xor c a 224 1 0 1 2 5 6 7 8 13 14 15 17 18 20 23 26 27 29 30 31 32 33 36 38 39 43 46 47 48 51 52 53 54 55 58 59 61 63 64 65 67 68 70 72 73 80 85 91 93 94 97 102 103 108 110 112 113 114 116 118 120 121 124 125 126 128 130 132 133 135 139 140 143 148 149 150 151 152 153 155 156 158 159 160 161 163 166 167 168 170 171 174 175 176 178 179 181 182 184 186 187 188 189 190 191 192 193 198 201 203 204 206 207 208 209 211 218 221 222 223 b 224 1 0 1 2 5 6 7 8 13 14 15 17 18 20 23 26 27 29 30 31 32 33 36 38 39 43 46 47 48 51 52 53 54 55 58 59 61 63 64 65 67 68 70 72 73 80 85 91 93 94 97 102 103 108 110 112 113 114 116 118 120 121 124 125 126 128 130 132 133 135 139 140 143 148 149 150 151 152 153 155 156 158 159 160 161 163 166 167 168 170 171 174 175 176 178 179 181 182 184 186 187 188 189 190 191 192 193 198 201 203 204 206 207 208 209 211 218 221 222 223 # 32226 xor c a 224 1 0 1 2 5 6 7 8 13 14 15 17 18 20 23 26 27 29 30 31 32 33 36 38 39 43 46 47 48 51 52 53 54 55 58 59 61 63 64 65 67 68 70 72 73 80 85 91 93 94 97 102 103 108 110 112 113 114 116 118 120 121 124 125 126 128 130 132 133 135 139 140 143 148 149 150 151 152 153 155 156 158 159 160 161 163 166 167 168 170 171 174 175 176 178 179 181 182 184 186 187 188 189 190 191 192 193 198 201 203 204 206 207 208 209 211 218 221 222 223 b 224 1 1 e # 32227 xor c a 224 1 0 0 4 6 8 11 12 13 14 16 21 23 24 31 32 36 37 38 39 41 42 43 44 47 48 49 50 52 55 56 58 60 64 66 69 71 72 73 74 75 83 84 85 86 87 89 91 92 95 96 103 105 106 107 112 113 115 118 119 120 121 122 123 126 128 129 130 131 134 135 137 138 140 142 143 144 148 151 153 154 155 159 162 163 165 166 167 168 169 171 176 177 178 181 184 185 191 192 194 197 198 199 200 202 210 213 214 216 220 221 b 224 1 0 0 4 6 8 11 12 13 14 16 21 23 24 31 32 36 37 38 39 41 42 43 44 47 48 49 50 52 55 56 58 60 64 66 69 71 72 73 74 75 83 84 85 86 87 89 91 92 95 96 103 105 106 107 112 113 115 118 119 120 121 122 123 126 128 129 130 131 134 135 137 138 140 142 143 144 148 151 153 154 155 159 162 163 165 166 167 168 169 171 176 177 178 181 184 185 191 192 194 197 198 199 200 202 210 213 214 216 220 221 # 32228 xor c a 224 1 0 0 4 6 8 11 12 13 14 16 21 23 24 31 32 36 37 38 39 41 42 43 44 47 48 49 50 52 55 56 58 60 64 66 69 71 72 73 74 75 83 84 85 86 87 89 91 92 95 96 103 105 106 107 112 113 115 118 119 120 121 122 123 126 128 129 130 131 134 135 137 138 140 142 143 144 148 151 153 154 155 159 162 163 165 166 167 168 169 171 176 177 178 181 184 185 191 192 194 197 198 199 200 202 210 213 214 216 220 221 b 224 1 1 f # 32229 xor c a 224 1 0 0 2 5 8 9 10 14 18 19 21 22 26 27 32 36 37 38 39 40 41 43 44 48 54 55 56 57 58 59 65 66 69 73 77 78 79 83 85 88 91 95 97 99 100 101 102 104 106 108 109 112 114 118 120 121 127 129 132 135 136 138 139 140 142 143 144 145 153 155 157 159 161 162 166 168 169 170 171 173 174 175 176 181 182 183 187 188 189 192 194 196 197 198 199 200 201 203 204 206 207 211 212 213 214 221 222 b 224 1 0 0 2 5 8 9 10 14 18 19 21 22 26 27 32 36 37 38 39 40 41 43 44 48 54 55 56 57 58 59 65 66 69 73 77 78 79 83 85 88 91 95 97 99 100 101 102 104 106 108 109 112 114 118 120 121 127 129 132 135 136 138 139 140 142 143 144 145 153 155 157 159 161 162 166 168 169 170 171 173 174 175 176 181 182 183 187 188 189 192 194 196 197 198 199 200 201 203 204 206 207 211 212 213 214 221 222 # 32230 xor c a 224 1 0 0 2 5 8 9 10 14 18 19 21 22 26 27 32 36 37 38 39 40 41 43 44 48 54 55 56 57 58 59 65 66 69 73 77 78 79 83 85 88 91 95 97 99 100 101 102 104 106 108 109 112 114 118 120 121 127 129 132 135 136 138 139 140 142 143 144 145 153 155 157 159 161 162 166 168 169 170 171 173 174 175 176 181 182 183 187 188 189 192 194 196 197 198 199 200 201 203 204 206 207 211 212 213 214 221 222 b 224 1 1 2 6 7 10 11 12 13 14 17 20 21 22 25 28 30 31 32 35 36 38 40 41 44 45 46 48 49 51 52 57 58 59 60 62 63 64 66 67 69 72 74 75 78 84 85 86 87 90 92 93 95 97 98 99 100 102 104 105 110 111 112 116 117 122 127 131 132 137 138 140 143 144 147 149 151 155 157 159 161 162 166 167 168 171 172 174 175 176 177 180 181 183 184 185 186 188 193 194 195 200 201 203 205 206 208 210 211 212 214 215 220 221 222 223 # 32231 xor c a 224 1 1 e b 224 1 1 e # 32232 xor c a 224 1 1 e b 224 0 0 e # 32233 xor c a 224 1 1 e b 224 1 1 e # 32234 xor c a 224 1 1 e b 224 0 0 f # 32235 xor c a 224 1 1 e b 224 1 1 e # 32236 xor c a 224 1 1 e b 224 0 0 0 2 3 4 7 8 10 13 16 19 21 22 23 26 29 31 33 34 40 44 45 46 47 49 50 51 52 53 58 59 61 62 64 65 66 68 69 71 73 74 76 77 80 82 83 87 88 89 92 94 95 96 99 101 102 103 104 105 106 107 110 113 114 115 121 122 128 133 135 136 138 141 143 144 146 148 150 151 156 158 159 160 161 164 165 167 168 169 170 172 176 178 179 182 183 184 185 187 189 190 192 194 195 197 198 200 201 202 203 209 210 211 213 214 216 217 220 222 223 # 32237 xor c a 224 1 1 f b 224 1 1 f # 32238 xor c a 224 1 1 f b 224 0 0 e # 32239 xor c a 224 1 1 f b 224 1 1 f # 32240 xor c a 224 1 1 f b 224 0 0 f # 32241 xor c a 224 1 1 f b 224 1 1 f # 32242 xor c a 224 1 1 f b 224 0 0 0 2 5 11 14 15 17 18 19 20 21 24 25 26 27 30 32 33 34 38 39 42 43 44 45 46 48 49 52 53 54 56 57 61 62 64 66 68 69 72 73 75 76 78 82 83 84 85 87 88 89 90 91 92 93 97 98 99 100 101 103 104 107 108 111 112 114 115 119 122 123 131 133 134 138 139 140 142 145 147 149 150 151 153 154 156 158 163 165 166 169 171 175 177 179 182 183 184 187 188 192 194 195 197 199 200 201 202 206 207 208 210 212 213 215 218 219 220 221 # 32243 xor c a 224 1 1 3 5 6 8 12 15 16 19 24 27 29 31 32 33 34 36 39 40 41 43 45 49 53 54 56 58 62 64 65 67 69 72 73 74 78 79 84 86 87 88 89 91 92 95 96 97 98 100 103 104 108 114 116 121 124 125 127 129 133 134 138 141 143 148 149 150 151 152 155 156 158 161 162 163 164 165 166 167 168 169 172 173 176 177 179 180 182 183 185 190 191 193 194 195 197 198 202 204 207 209 210 215 217 219 220 222 b 224 1 1 3 5 6 8 12 15 16 19 24 27 29 31 32 33 34 36 39 40 41 43 45 49 53 54 56 58 62 64 65 67 69 72 73 74 78 79 84 86 87 88 89 91 92 95 96 97 98 100 103 104 108 114 116 121 124 125 127 129 133 134 138 141 143 148 149 150 151 152 155 156 158 161 162 163 164 165 166 167 168 169 172 173 176 177 179 180 182 183 185 190 191 193 194 195 197 198 202 204 207 209 210 215 217 219 220 222 # 32244 xor c a 224 1 1 3 5 6 8 12 15 16 19 24 27 29 31 32 33 34 36 39 40 41 43 45 49 53 54 56 58 62 64 65 67 69 72 73 74 78 79 84 86 87 88 89 91 92 95 96 97 98 100 103 104 108 114 116 121 124 125 127 129 133 134 138 141 143 148 149 150 151 152 155 156 158 161 162 163 164 165 166 167 168 169 172 173 176 177 179 180 182 183 185 190 191 193 194 195 197 198 202 204 207 209 210 215 217 219 220 222 b 224 0 0 e # 32245 xor c a 224 1 1 0 1 6 7 9 13 15 16 19 20 21 22 25 30 32 33 34 37 39 40 41 45 48 49 51 53 54 55 56 66 68 71 74 75 78 80 82 85 89 91 93 98 100 102 103 104 105 106 107 109 112 114 121 124 126 128 129 135 138 139 140 142 143 145 147 148 149 152 154 155 156 157 158 159 160 163 164 165 166 168 169 171 174 175 176 179 180 181 183 185 188 190 192 195 196 199 201 202 203 204 205 207 209 210 212 214 215 219 220 223 b 224 1 1 0 1 6 7 9 13 15 16 19 20 21 22 25 30 32 33 34 37 39 40 41 45 48 49 51 53 54 55 56 66 68 71 74 75 78 80 82 85 89 91 93 98 100 102 103 104 105 106 107 109 112 114 121 124 126 128 129 135 138 139 140 142 143 145 147 148 149 152 154 155 156 157 158 159 160 163 164 165 166 168 169 171 174 175 176 179 180 181 183 185 188 190 192 195 196 199 201 202 203 204 205 207 209 210 212 214 215 219 220 223 # 32246 xor c a 224 1 1 0 1 6 7 9 13 15 16 19 20 21 22 25 30 32 33 34 37 39 40 41 45 48 49 51 53 54 55 56 66 68 71 74 75 78 80 82 85 89 91 93 98 100 102 103 104 105 106 107 109 112 114 121 124 126 128 129 135 138 139 140 142 143 145 147 148 149 152 154 155 156 157 158 159 160 163 164 165 166 168 169 171 174 175 176 179 180 181 183 185 188 190 192 195 196 199 201 202 203 204 205 207 209 210 212 214 215 219 220 223 b 224 0 0 f # 32247 xor c a 224 1 1 1 2 7 10 15 18 19 21 22 23 26 31 35 36 37 38 43 44 45 46 47 48 49 50 52 53 57 58 59 62 64 67 69 70 71 74 82 83 85 88 89 93 94 95 97 98 100 101 105 106 109 110 111 114 117 118 120 122 129 130 132 134 135 137 139 140 143 144 150 152 155 156 157 160 162 164 165 167 168 169 170 175 177 179 181 182 189 190 191 193 195 196 197 198 199 200 201 204 205 208 215 216 217 219 222 223 b 224 1 1 1 2 7 10 15 18 19 21 22 23 26 31 35 36 37 38 43 44 45 46 47 48 49 50 52 53 57 58 59 62 64 67 69 70 71 74 82 83 85 88 89 93 94 95 97 98 100 101 105 106 109 110 111 114 117 118 120 122 129 130 132 134 135 137 139 140 143 144 150 152 155 156 157 160 162 164 165 167 168 169 170 175 177 179 181 182 189 190 191 193 195 196 197 198 199 200 201 204 205 208 215 216 217 219 222 223 # 32248 xor c a 224 1 1 1 2 7 10 15 18 19 21 22 23 26 31 35 36 37 38 43 44 45 46 47 48 49 50 52 53 57 58 59 62 64 67 69 70 71 74 82 83 85 88 89 93 94 95 97 98 100 101 105 106 109 110 111 114 117 118 120 122 129 130 132 134 135 137 139 140 143 144 150 152 155 156 157 160 162 164 165 167 168 169 170 175 177 179 181 182 189 190 191 193 195 196 197 198 199 200 201 204 205 208 215 216 217 219 222 223 b 224 0 0 2 5 10 13 14 15 19 21 22 27 28 30 32 34 38 39 40 43 46 47 50 51 52 53 60 62 64 65 66 67 70 71 72 73 74 77 79 82 85 86 87 94 99 100 101 102 103 104 105 108 109 110 111 113 115 116 117 118 123 124 126 128 131 133 134 136 143 145 146 147 148 149 151 153 154 156 157 158 159 160 161 164 167 169 171 173 175 178 180 181 184 185 187 188 191 193 194 198 199 203 204 205 206 210 213 216 217 218 219 # 32249 xor c a 224 1 1 e b 224 1 1 e # 32250 xor c a 224 1 1 e b 224 0 1 e # 32251 xor c a 224 1 1 e b 224 1 1 e # 32252 xor c a 224 1 1 e b 224 0 1 f # 32253 xor c a 224 1 1 e b 224 1 1 e # 32254 xor c a 224 1 1 e b 224 0 1 2 3 4 5 8 9 11 12 16 21 24 26 28 30 32 35 37 40 41 43 45 46 47 48 53 58 60 62 63 64 65 66 68 73 75 78 80 81 82 84 86 87 88 91 92 93 94 95 96 97 99 101 103 107 108 114 115 118 120 122 123 125 126 130 131 132 136 137 141 142 145 147 150 152 153 155 156 162 166 170 171 173 175 177 179 182 183 186 191 195 196 200 201 204 209 210 213 215 218 219 220 222 # 32255 xor c a 224 1 1 f b 224 1 1 f # 32256 xor c a 224 1 1 f b 224 0 1 e # 32257 xor c a 224 1 1 f b 224 1 1 f # 32258 xor c a 224 1 1 f b 224 0 1 f # 32259 xor c a 224 1 1 f b 224 1 1 f # 32260 xor c a 224 1 1 f b 224 0 1 0 3 4 7 9 18 23 24 27 28 30 31 34 36 38 40 44 45 46 47 49 51 53 54 56 58 59 61 63 67 73 74 76 81 85 86 89 91 92 93 94 95 96 97 98 102 103 104 105 106 107 110 112 114 117 118 124 125 127 128 134 137 142 145 146 147 148 149 152 155 157 158 160 162 164 165 166 168 170 171 173 175 176 177 178 180 181 182 183 186 187 188 189 191 196 199 200 202 204 205 207 208 209 211 212 213 220 221 # 32261 xor c a 224 1 1 1 5 6 7 9 12 14 15 21 22 26 29 31 32 33 34 35 36 37 38 40 44 48 49 50 51 52 53 55 59 61 63 64 66 67 69 70 74 75 76 77 79 80 81 82 84 87 89 90 91 94 96 97 98 100 101 103 106 111 113 115 117 118 119 120 121 124 127 128 130 131 134 135 136 137 139 140 141 142 144 147 150 152 155 157 158 161 163 165 166 167 168 170 171 173 174 175 178 179 181 184 185 188 190 192 199 200 202 203 205 206 207 208 209 210 212 213 214 215 216 220 222 223 b 224 1 1 1 5 6 7 9 12 14 15 21 22 26 29 31 32 33 34 35 36 37 38 40 44 48 49 50 51 52 53 55 59 61 63 64 66 67 69 70 74 75 76 77 79 80 81 82 84 87 89 90 91 94 96 97 98 100 101 103 106 111 113 115 117 118 119 120 121 124 127 128 130 131 134 135 136 137 139 140 141 142 144 147 150 152 155 157 158 161 163 165 166 167 168 170 171 173 174 175 178 179 181 184 185 188 190 192 199 200 202 203 205 206 207 208 209 210 212 213 214 215 216 220 222 223 # 32262 xor c a 224 1 1 1 5 6 7 9 12 14 15 21 22 26 29 31 32 33 34 35 36 37 38 40 44 48 49 50 51 52 53 55 59 61 63 64 66 67 69 70 74 75 76 77 79 80 81 82 84 87 89 90 91 94 96 97 98 100 101 103 106 111 113 115 117 118 119 120 121 124 127 128 130 131 134 135 136 137 139 140 141 142 144 147 150 152 155 157 158 161 163 165 166 167 168 170 171 173 174 175 178 179 181 184 185 188 190 192 199 200 202 203 205 206 207 208 209 210 212 213 214 215 216 220 222 223 b 224 0 1 e # 32263 xor c a 224 1 1 1 2 3 6 7 10 11 13 16 18 19 21 23 25 27 28 30 33 36 37 43 45 46 48 49 53 55 57 58 60 62 66 70 71 72 73 76 78 79 81 82 83 84 88 90 91 92 93 95 96 97 101 102 103 104 107 108 109 112 114 115 116 118 119 120 121 122 125 128 129 130 132 133 135 141 148 150 151 152 153 156 157 158 159 161 162 166 167 168 170 174 175 176 177 179 182 184 185 186 187 188 189 195 196 198 200 201 202 209 211 212 213 214 215 216 217 218 219 222 223 b 224 1 1 1 2 3 6 7 10 11 13 16 18 19 21 23 25 27 28 30 33 36 37 43 45 46 48 49 53 55 57 58 60 62 66 70 71 72 73 76 78 79 81 82 83 84 88 90 91 92 93 95 96 97 101 102 103 104 107 108 109 112 114 115 116 118 119 120 121 122 125 128 129 130 132 133 135 141 148 150 151 152 153 156 157 158 159 161 162 166 167 168 170 174 175 176 177 179 182 184 185 186 187 188 189 195 196 198 200 201 202 209 211 212 213 214 215 216 217 218 219 222 223 # 32264 xor c a 224 1 1 1 2 3 6 7 10 11 13 16 18 19 21 23 25 27 28 30 33 36 37 43 45 46 48 49 53 55 57 58 60 62 66 70 71 72 73 76 78 79 81 82 83 84 88 90 91 92 93 95 96 97 101 102 103 104 107 108 109 112 114 115 116 118 119 120 121 122 125 128 129 130 132 133 135 141 148 150 151 152 153 156 157 158 159 161 162 166 167 168 170 174 175 176 177 179 182 184 185 186 187 188 189 195 196 198 200 201 202 209 211 212 213 214 215 216 217 218 219 222 223 b 224 0 1 f # 32265 xor c a 224 1 1 0 2 4 5 6 7 9 11 13 14 15 16 19 22 26 27 28 29 30 33 34 37 39 40 41 42 43 44 45 46 47 48 52 55 56 58 62 63 65 67 68 69 70 71 72 74 75 78 80 85 90 91 92 93 94 95 96 98 99 104 108 113 114 115 116 120 121 124 128 132 133 134 135 136 138 139 140 148 150 154 156 158 159 160 161 164 167 168 171 172 173 174 176 178 179 180 181 188 193 194 195 198 202 204 205 207 210 211 212 213 217 219 220 221 b 224 1 1 0 2 4 5 6 7 9 11 13 14 15 16 19 22 26 27 28 29 30 33 34 37 39 40 41 42 43 44 45 46 47 48 52 55 56 58 62 63 65 67 68 69 70 71 72 74 75 78 80 85 90 91 92 93 94 95 96 98 99 104 108 113 114 115 116 120 121 124 128 132 133 134 135 136 138 139 140 148 150 154 156 158 159 160 161 164 167 168 171 172 173 174 176 178 179 180 181 188 193 194 195 198 202 204 205 207 210 211 212 213 217 219 220 221 # 32266 xor c a 224 1 1 0 2 4 5 6 7 9 11 13 14 15 16 19 22 26 27 28 29 30 33 34 37 39 40 41 42 43 44 45 46 47 48 52 55 56 58 62 63 65 67 68 69 70 71 72 74 75 78 80 85 90 91 92 93 94 95 96 98 99 104 108 113 114 115 116 120 121 124 128 132 133 134 135 136 138 139 140 148 150 154 156 158 159 160 161 164 167 168 171 172 173 174 176 178 179 180 181 188 193 194 195 198 202 204 205 207 210 211 212 213 217 219 220 221 b 224 0 1 3 4 5 6 9 12 13 17 20 25 28 29 33 34 35 36 37 39 40 41 43 44 47 52 53 54 56 57 60 61 62 63 64 65 66 68 71 72 73 74 75 77 78 79 81 84 85 86 88 90 91 93 94 95 97 100 101 102 103 104 105 106 107 108 110 113 114 116 118 119 120 121 122 123 126 127 136 137 139 141 142 143 144 145 147 149 150 151 152 153 154 157 162 163 164 165 167 168 177 180 186 189 190 191 193 194 196 198 199 200 204 205 206 210 212 214 215 216 223 # 32267 xor c a 224 1 1 e b 224 1 1 e # 32268 xor c a 224 1 1 e b 224 1 0 e # 32269 xor c a 224 1 1 e b 224 1 1 e # 32270 xor c a 224 1 1 e b 224 1 0 f # 32271 xor c a 224 1 1 e b 224 1 1 e # 32272 xor c a 224 1 1 e b 224 1 0 3 6 8 9 11 12 14 17 20 23 24 25 26 35 36 41 43 44 48 49 50 51 52 53 54 55 56 57 58 59 60 64 65 69 70 77 78 81 84 88 91 93 96 97 98 100 101 102 104 106 108 109 110 114 116 118 119 122 123 129 131 132 135 137 140 142 144 145 151 153 154 155 157 158 160 163 164 165 168 169 170 172 173 174 175 176 179 182 183 186 187 189 193 195 197 201 202 204 208 212 216 217 220 222 223 # 32273 xor c a 224 1 1 f b 224 1 1 f # 32274 xor c a 224 1 1 f b 224 1 0 e # 32275 xor c a 224 1 1 f b 224 1 1 f # 32276 xor c a 224 1 1 f b 224 1 0 f # 32277 xor c a 224 1 1 f b 224 1 1 f # 32278 xor c a 224 1 1 f b 224 1 0 1 2 3 4 6 9 10 11 13 15 17 22 23 28 29 31 32 34 35 37 38 39 41 42 43 44 46 49 50 53 55 56 57 59 60 62 63 64 70 71 73 75 76 81 82 83 84 86 87 88 89 91 96 97 99 102 103 106 109 111 112 115 121 123 125 126 127 128 130 132 133 134 136 137 140 141 143 145 147 148 149 152 154 157 159 164 166 167 168 171 173 177 180 182 183 184 185 188 192 194 195 196 198 199 200 203 204 205 208 209 210 211 213 214 220 221 # 32279 xor c a 224 1 1 3 4 5 6 13 14 16 17 19 23 25 29 30 31 32 33 34 35 36 40 41 43 44 48 52 53 57 59 62 68 71 73 74 75 77 81 82 84 88 89 93 94 98 100 103 105 106 108 110 114 116 119 121 124 126 129 130 132 133 136 138 139 140 144 147 149 151 152 153 156 158 160 162 163 165 169 171 173 177 179 180 181 185 186 188 189 190 191 193 194 195 196 199 201 202 203 204 207 208 210 211 215 216 219 220 222 b 224 1 1 3 4 5 6 13 14 16 17 19 23 25 29 30 31 32 33 34 35 36 40 41 43 44 48 52 53 57 59 62 68 71 73 74 75 77 81 82 84 88 89 93 94 98 100 103 105 106 108 110 114 116 119 121 124 126 129 130 132 133 136 138 139 140 144 147 149 151 152 153 156 158 160 162 163 165 169 171 173 177 179 180 181 185 186 188 189 190 191 193 194 195 196 199 201 202 203 204 207 208 210 211 215 216 219 220 222 # 32280 xor c a 224 1 1 3 4 5 6 13 14 16 17 19 23 25 29 30 31 32 33 34 35 36 40 41 43 44 48 52 53 57 59 62 68 71 73 74 75 77 81 82 84 88 89 93 94 98 100 103 105 106 108 110 114 116 119 121 124 126 129 130 132 133 136 138 139 140 144 147 149 151 152 153 156 158 160 162 163 165 169 171 173 177 179 180 181 185 186 188 189 190 191 193 194 195 196 199 201 202 203 204 207 208 210 211 215 216 219 220 222 b 224 1 0 e # 32281 xor c a 224 1 1 0 1 2 3 6 8 9 11 12 14 15 16 18 20 21 22 23 26 29 32 35 36 37 39 40 41 43 46 48 55 56 57 58 60 62 64 65 67 68 69 71 72 73 75 79 80 81 85 86 87 88 89 93 94 96 99 101 102 104 107 110 119 121 123 124 127 128 129 130 134 136 137 143 144 145 147 149 150 151 154 156 158 159 161 163 166 167 171 173 176 177 183 184 187 188 190 191 192 194 197 199 200 205 206 207 208 209 215 216 218 220 223 b 224 1 1 0 1 2 3 6 8 9 11 12 14 15 16 18 20 21 22 23 26 29 32 35 36 37 39 40 41 43 46 48 55 56 57 58 60 62 64 65 67 68 69 71 72 73 75 79 80 81 85 86 87 88 89 93 94 96 99 101 102 104 107 110 119 121 123 124 127 128 129 130 134 136 137 143 144 145 147 149 150 151 154 156 158 159 161 163 166 167 171 173 176 177 183 184 187 188 190 191 192 194 197 199 200 205 206 207 208 209 215 216 218 220 223 # 32282 xor c a 224 1 1 0 1 2 3 6 8 9 11 12 14 15 16 18 20 21 22 23 26 29 32 35 36 37 39 40 41 43 46 48 55 56 57 58 60 62 64 65 67 68 69 71 72 73 75 79 80 81 85 86 87 88 89 93 94 96 99 101 102 104 107 110 119 121 123 124 127 128 129 130 134 136 137 143 144 145 147 149 150 151 154 156 158 159 161 163 166 167 171 173 176 177 183 184 187 188 190 191 192 194 197 199 200 205 206 207 208 209 215 216 218 220 223 b 224 1 0 f # 32283 xor c a 224 1 1 0 2 4 6 7 8 11 14 20 21 26 27 28 30 32 33 34 35 36 37 38 39 42 43 45 46 47 48 51 53 56 59 60 64 65 67 68 69 70 71 74 75 77 81 82 86 92 94 95 97 98 100 104 105 106 108 111 115 116 120 123 124 130 132 133 135 136 138 139 140 142 144 146 147 148 150 151 152 155 156 157 159 161 163 164 165 166 167 169 170 176 178 180 181 185 188 191 194 197 202 203 204 206 208 209 210 212 214 216 218 219 220 221 222 b 224 1 1 0 2 4 6 7 8 11 14 20 21 26 27 28 30 32 33 34 35 36 37 38 39 42 43 45 46 47 48 51 53 56 59 60 64 65 67 68 69 70 71 74 75 77 81 82 86 92 94 95 97 98 100 104 105 106 108 111 115 116 120 123 124 130 132 133 135 136 138 139 140 142 144 146 147 148 150 151 152 155 156 157 159 161 163 164 165 166 167 169 170 176 178 180 181 185 188 191 194 197 202 203 204 206 208 209 210 212 214 216 218 219 220 221 222 # 32284 xor c a 224 1 1 0 2 4 6 7 8 11 14 20 21 26 27 28 30 32 33 34 35 36 37 38 39 42 43 45 46 47 48 51 53 56 59 60 64 65 67 68 69 70 71 74 75 77 81 82 86 92 94 95 97 98 100 104 105 106 108 111 115 116 120 123 124 130 132 133 135 136 138 139 140 142 144 146 147 148 150 151 152 155 156 157 159 161 163 164 165 166 167 169 170 176 178 180 181 185 188 191 194 197 202 203 204 206 208 209 210 212 214 216 218 219 220 221 222 b 224 1 0 1 2 3 7 9 10 13 14 15 16 17 19 20 23 24 25 26 28 30 35 36 38 43 46 47 48 50 51 52 53 54 56 57 58 59 61 65 67 69 71 73 75 76 78 79 82 85 86 88 89 91 93 95 96 97 98 99 100 101 102 104 106 107 109 110 111 113 115 116 117 120 121 124 125 126 128 129 132 134 137 139 141 142 143 144 149 150 151 158 160 162 163 167 170 171 173 177 178 180 181 185 187 188 190 191 193 194 195 197 198 201 203 204 205 208 209 210 212 214 215 216 218 219 221 222 223 # 32285 xor c a 224 1 1 e b 224 1 1 e # 32286 xor c a 224 1 1 e b 224 1 1 e # 32287 xor c a 224 1 1 e b 224 1 1 e # 32288 xor c a 224 1 1 e b 224 1 1 f # 32289 xor c a 224 1 1 e b 224 1 1 e # 32290 xor c a 224 1 1 e b 224 1 1 1 2 3 4 5 8 11 15 17 25 27 28 30 32 33 34 35 36 38 39 40 42 43 44 46 52 53 54 56 57 62 65 66 68 69 71 74 75 77 79 81 83 85 88 90 92 95 102 103 104 105 106 109 110 111 112 114 117 124 125 127 131 132 134 135 136 138 141 145 148 149 150 154 155 157 158 159 162 168 170 174 178 181 182 184 190 191 192 193 197 198 200 201 202 204 206 208 209 211 216 217 218 221 # 32291 xor c a 224 1 1 f b 224 1 1 f # 32292 xor c a 224 1 1 f b 224 1 1 e # 32293 xor c a 224 1 1 f b 224 1 1 f # 32294 xor c a 224 1 1 f b 224 1 1 f # 32295 xor c a 224 1 1 f b 224 1 1 f # 32296 xor c a 224 1 1 f b 224 1 1 1 3 6 8 9 10 11 15 17 18 19 20 23 25 26 27 28 32 33 34 36 37 38 39 40 41 42 43 46 48 49 51 54 55 57 58 60 63 64 67 70 73 78 83 84 85 86 88 89 91 92 93 94 95 98 99 100 101 103 104 108 111 112 113 114 116 118 125 127 130 131 133 134 140 141 143 144 145 149 150 151 154 161 163 164 166 168 170 171 173 174 176 177 178 180 181 184 186 189 190 191 192 194 195 196 197 199 202 203 206 209 210 213 214 218 219 222 # 32297 xor c a 224 1 1 0 5 9 14 15 16 22 23 24 25 30 31 32 35 37 40 41 42 44 45 47 49 51 52 55 57 58 61 63 64 65 66 68 70 73 74 77 79 80 81 83 85 88 90 100 102 103 104 113 114 116 118 119 120 121 122 127 129 133 138 139 140 141 144 146 148 149 151 152 154 159 163 166 167 168 169 170 171 172 177 178 180 182 185 186 187 189 190 191 194 195 196 197 198 199 201 202 205 206 207 208 209 210 211 212 213 216 217 220 b 224 1 1 0 5 9 14 15 16 22 23 24 25 30 31 32 35 37 40 41 42 44 45 47 49 51 52 55 57 58 61 63 64 65 66 68 70 73 74 77 79 80 81 83 85 88 90 100 102 103 104 113 114 116 118 119 120 121 122 127 129 133 138 139 140 141 144 146 148 149 151 152 154 159 163 166 167 168 169 170 171 172 177 178 180 182 185 186 187 189 190 191 194 195 196 197 198 199 201 202 205 206 207 208 209 210 211 212 213 216 217 220 # 32298 xor c a 224 1 1 0 5 9 14 15 16 22 23 24 25 30 31 32 35 37 40 41 42 44 45 47 49 51 52 55 57 58 61 63 64 65 66 68 70 73 74 77 79 80 81 83 85 88 90 100 102 103 104 113 114 116 118 119 120 121 122 127 129 133 138 139 140 141 144 146 148 149 151 152 154 159 163 166 167 168 169 170 171 172 177 178 180 182 185 186 187 189 190 191 194 195 196 197 198 199 201 202 205 206 207 208 209 210 211 212 213 216 217 220 b 224 1 1 e # 32299 xor c a 224 1 1 0 4 9 10 11 12 15 18 21 22 24 26 27 28 32 33 34 35 39 41 42 47 48 49 50 52 53 54 55 56 57 58 59 63 66 67 69 70 71 72 73 74 76 79 82 84 85 87 90 91 92 93 94 99 104 106 107 108 110 111 113 119 120 122 126 128 129 133 134 137 139 141 142 143 144 148 149 152 153 154 157 158 160 161 162 163 164 165 167 168 170 173 174 179 180 181 183 184 189 190 191 192 193 194 195 196 198 199 200 201 202 204 205 207 209 210 212 216 218 b 224 1 1 0 4 9 10 11 12 15 18 21 22 24 26 27 28 32 33 34 35 39 41 42 47 48 49 50 52 53 54 55 56 57 58 59 63 66 67 69 70 71 72 73 74 76 79 82 84 85 87 90 91 92 93 94 99 104 106 107 108 110 111 113 119 120 122 126 128 129 133 134 137 139 141 142 143 144 148 149 152 153 154 157 158 160 161 162 163 164 165 167 168 170 173 174 179 180 181 183 184 189 190 191 192 193 194 195 196 198 199 200 201 202 204 205 207 209 210 212 216 218 # 32300 xor c a 224 1 1 0 4 9 10 11 12 15 18 21 22 24 26 27 28 32 33 34 35 39 41 42 47 48 49 50 52 53 54 55 56 57 58 59 63 66 67 69 70 71 72 73 74 76 79 82 84 85 87 90 91 92 93 94 99 104 106 107 108 110 111 113 119 120 122 126 128 129 133 134 137 139 141 142 143 144 148 149 152 153 154 157 158 160 161 162 163 164 165 167 168 170 173 174 179 180 181 183 184 189 190 191 192 193 194 195 196 198 199 200 201 202 204 205 207 209 210 212 216 218 b 224 1 1 f # 32301 xor c a 224 1 1 3 5 6 8 9 12 13 15 16 19 20 23 24 25 30 31 32 34 39 41 43 44 45 46 47 50 52 53 55 56 57 63 65 67 69 70 71 72 74 75 77 78 79 80 83 85 89 90 91 92 94 97 99 100 101 108 109 111 114 115 119 120 123 124 127 129 130 131 132 135 137 140 141 149 153 155 156 157 158 160 161 164 165 169 170 172 175 176 177 181 182 183 186 189 190 191 193 196 197 198 200 201 203 205 206 208 212 214 217 218 219 221 222 223 b 224 1 1 3 5 6 8 9 12 13 15 16 19 20 23 24 25 30 31 32 34 39 41 43 44 45 46 47 50 52 53 55 56 57 63 65 67 69 70 71 72 74 75 77 78 79 80 83 85 89 90 91 92 94 97 99 100 101 108 109 111 114 115 119 120 123 124 127 129 130 131 132 135 137 140 141 149 153 155 156 157 158 160 161 164 165 169 170 172 175 176 177 181 182 183 186 189 190 191 193 196 197 198 200 201 203 205 206 208 212 214 217 218 219 221 222 223 # 32302 xor c a 224 1 1 3 5 6 8 9 12 13 15 16 19 20 23 24 25 30 31 32 34 39 41 43 44 45 46 47 50 52 53 55 56 57 63 65 67 69 70 71 72 74 75 77 78 79 80 83 85 89 90 91 92 94 97 99 100 101 108 109 111 114 115 119 120 123 124 127 129 130 131 132 135 137 140 141 149 153 155 156 157 158 160 161 164 165 169 170 172 175 176 177 181 182 183 186 189 190 191 193 196 197 198 200 201 203 205 206 208 212 214 217 218 219 221 222 223 b 224 1 1 0 6 10 11 13 15 16 17 19 20 24 29 31 33 38 39 41 42 43 46 48 49 51 53 57 58 59 60 62 63 67 70 71 72 73 74 76 78 79 82 83 86 87 89 90 91 92 94 96 98 100 101 103 105 111 112 114 116 117 121 126 128 129 133 135 136 140 141 145 146 148 149 150 152 153 154 158 159 163 164 165 166 167 170 171 175 179 181 184 185 186 191 192 193 195 199 202 203 204 207 209 210 211 212 214 215 217 218 219 223 # 32303 xor c a 247 0 0 e b 247 0 0 e # 32304 xor c a 247 0 0 e b 247 0 0 e # 32305 xor c a 247 0 0 e b 247 0 0 e # 32306 xor c a 247 0 0 e b 247 0 0 f # 32307 xor c a 247 0 0 e b 247 0 0 e # 32308 xor c a 247 0 0 e b 247 0 0 0 1 2 7 8 9 13 15 16 20 23 26 34 41 42 44 48 49 50 58 59 63 64 68 71 75 77 82 83 84 91 92 93 94 97 98 99 102 103 106 107 111 112 113 117 118 119 120 121 122 123 124 127 129 130 131 133 134 135 138 139 140 141 144 145 146 148 149 150 151 152 153 157 159 160 162 163 166 167 168 170 171 178 179 180 181 182 183 187 188 189 191 194 195 196 198 199 200 204 205 206 207 208 209 210 211 213 214 215 216 217 218 219 220 222 223 226 228 230 231 232 235 238 241 243 245 246 # 32309 xor c a 247 0 0 f b 247 0 0 f # 32310 xor c a 247 0 0 f b 247 0 0 e # 32311 xor c a 247 0 0 f b 247 0 0 f # 32312 xor c a 247 0 0 f b 247 0 0 f # 32313 xor c a 247 0 0 f b 247 0 0 f # 32314 xor c a 247 0 0 f b 247 0 0 1 4 5 7 9 12 13 15 16 17 19 21 24 26 27 28 29 32 33 34 36 37 39 40 41 44 45 47 48 53 54 58 59 63 65 68 69 71 73 76 78 79 80 82 85 87 90 92 93 96 97 98 99 100 101 102 104 105 112 114 116 120 121 122 123 124 127 129 130 131 132 133 135 136 137 142 144 146 147 148 149 150 152 153 155 156 158 161 164 170 172 174 175 176 179 188 193 194 198 200 202 203 204 205 207 209 210 211 213 215 217 218 222 223 225 226 229 230 231 233 234 236 239 241 242 243 244 245 # 32315 xor c a 247 0 0 1 3 4 5 6 7 9 10 11 14 16 17 18 19 30 31 32 34 35 37 38 40 43 44 45 47 48 50 53 54 55 57 61 65 68 69 70 77 79 80 81 84 85 88 89 90 92 93 95 96 97 99 100 104 105 106 107 109 110 112 114 115 121 123 124 125 126 127 128 130 132 133 134 135 136 138 141 142 144 145 149 152 153 155 156 158 159 160 163 165 166 171 176 177 180 181 182 184 187 188 189 190 191 193 194 195 196 200 201 204 205 207 208 209 211 212 213 215 218 219 221 222 223 224 226 227 228 231 232 233 235 236 237 238 239 240 243 245 246 b 247 0 0 1 3 4 5 6 7 9 10 11 14 16 17 18 19 30 31 32 34 35 37 38 40 43 44 45 47 48 50 53 54 55 57 61 65 68 69 70 77 79 80 81 84 85 88 89 90 92 93 95 96 97 99 100 104 105 106 107 109 110 112 114 115 121 123 124 125 126 127 128 130 132 133 134 135 136 138 141 142 144 145 149 152 153 155 156 158 159 160 163 165 166 171 176 177 180 181 182 184 187 188 189 190 191 193 194 195 196 200 201 204 205 207 208 209 211 212 213 215 218 219 221 222 223 224 226 227 228 231 232 233 235 236 237 238 239 240 243 245 246 # 32316 xor c a 247 0 0 1 3 4 5 6 7 9 10 11 14 16 17 18 19 30 31 32 34 35 37 38 40 43 44 45 47 48 50 53 54 55 57 61 65 68 69 70 77 79 80 81 84 85 88 89 90 92 93 95 96 97 99 100 104 105 106 107 109 110 112 114 115 121 123 124 125 126 127 128 130 132 133 134 135 136 138 141 142 144 145 149 152 153 155 156 158 159 160 163 165 166 171 176 177 180 181 182 184 187 188 189 190 191 193 194 195 196 200 201 204 205 207 208 209 211 212 213 215 218 219 221 222 223 224 226 227 228 231 232 233 235 236 237 238 239 240 243 245 246 b 247 0 0 e # 32317 xor c a 247 0 0 2 4 7 9 10 11 12 13 15 16 17 18 19 20 21 22 26 29 30 31 32 33 35 37 45 46 48 49 52 54 57 59 60 62 63 69 70 71 74 77 78 79 80 81 83 86 87 90 92 93 94 98 101 103 109 112 113 114 117 118 119 121 126 127 128 134 136 138 139 147 150 151 155 157 161 163 167 168 170 171 172 177 179 185 187 188 189 193 194 195 198 199 201 202 204 208 209 212 213 214 217 220 221 226 227 228 229 230 233 236 237 238 239 240 243 244 245 b 247 0 0 2 4 7 9 10 11 12 13 15 16 17 18 19 20 21 22 26 29 30 31 32 33 35 37 45 46 48 49 52 54 57 59 60 62 63 69 70 71 74 77 78 79 80 81 83 86 87 90 92 93 94 98 101 103 109 112 113 114 117 118 119 121 126 127 128 134 136 138 139 147 150 151 155 157 161 163 167 168 170 171 172 177 179 185 187 188 189 193 194 195 198 199 201 202 204 208 209 212 213 214 217 220 221 226 227 228 229 230 233 236 237 238 239 240 243 244 245 # 32318 xor c a 247 0 0 2 4 7 9 10 11 12 13 15 16 17 18 19 20 21 22 26 29 30 31 32 33 35 37 45 46 48 49 52 54 57 59 60 62 63 69 70 71 74 77 78 79 80 81 83 86 87 90 92 93 94 98 101 103 109 112 113 114 117 118 119 121 126 127 128 134 136 138 139 147 150 151 155 157 161 163 167 168 170 171 172 177 179 185 187 188 189 193 194 195 198 199 201 202 204 208 209 212 213 214 217 220 221 226 227 228 229 230 233 236 237 238 239 240 243 244 245 b 247 0 0 f # 32319 xor c a 247 0 0 1 2 3 4 7 8 9 10 11 13 15 19 22 24 25 27 28 30 33 42 43 44 48 49 50 51 52 53 55 56 57 58 59 61 63 66 67 68 70 73 74 78 81 89 90 92 96 98 99 101 102 103 104 105 110 111 112 113 114 118 119 121 123 124 127 128 137 138 139 140 142 143 145 147 148 150 152 153 155 158 160 163 164 165 169 173 175 176 177 178 179 181 182 184 188 189 193 195 196 197 200 202 210 212 213 214 215 217 218 219 220 225 228 232 234 237 238 239 241 244 245 246 b 247 0 0 1 2 3 4 7 8 9 10 11 13 15 19 22 24 25 27 28 30 33 42 43 44 48 49 50 51 52 53 55 56 57 58 59 61 63 66 67 68 70 73 74 78 81 89 90 92 96 98 99 101 102 103 104 105 110 111 112 113 114 118 119 121 123 124 127 128 137 138 139 140 142 143 145 147 148 150 152 153 155 158 160 163 164 165 169 173 175 176 177 178 179 181 182 184 188 189 193 195 196 197 200 202 210 212 213 214 215 217 218 219 220 225 228 232 234 237 238 239 241 244 245 246 # 32320 xor c a 247 0 0 1 2 3 4 7 8 9 10 11 13 15 19 22 24 25 27 28 30 33 42 43 44 48 49 50 51 52 53 55 56 57 58 59 61 63 66 67 68 70 73 74 78 81 89 90 92 96 98 99 101 102 103 104 105 110 111 112 113 114 118 119 121 123 124 127 128 137 138 139 140 142 143 145 147 148 150 152 153 155 158 160 163 164 165 169 173 175 176 177 178 179 181 182 184 188 189 193 195 196 197 200 202 210 212 213 214 215 217 218 219 220 225 228 232 234 237 238 239 241 244 245 246 b 247 0 0 0 1 2 3 4 8 13 14 15 16 17 24 25 27 28 30 31 33 34 38 40 42 43 46 50 51 52 53 56 57 59 63 67 69 76 77 78 83 89 93 95 96 98 102 103 104 105 108 109 110 113 115 117 119 120 121 128 130 132 133 136 138 139 141 142 143 144 146 148 150 151 154 155 156 159 164 166 167 168 169 176 179 180 184 186 188 196 199 200 201 205 206 207 210 212 214 216 217 218 220 222 224 226 227 230 232 234 237 239 240 241 243 245 # 32321 xor c a 247 0 0 e b 247 0 0 e # 32322 xor c a 247 0 0 e b 247 0 1 e # 32323 xor c a 247 0 0 e b 247 0 0 e # 32324 xor c a 247 0 0 e b 247 0 1 f # 32325 xor c a 247 0 0 e b 247 0 0 e # 32326 xor c a 247 0 0 e b 247 0 1 0 1 4 11 12 14 17 19 22 23 25 27 32 34 35 36 37 38 44 45 46 48 50 52 53 55 56 58 60 63 64 67 70 71 72 78 80 81 84 85 87 90 91 92 94 96 99 100 102 105 106 107 109 110 111 117 118 121 126 129 133 134 135 136 137 143 144 145 148 150 155 158 159 165 168 169 173 180 183 185 186 187 189 190 192 194 199 200 201 204 208 209 211 213 214 215 216 218 221 222 224 225 228 229 231 232 235 236 237 238 239 240 242 243 246 # 32327 xor c a 247 0 0 f b 247 0 0 f # 32328 xor c a 247 0 0 f b 247 0 1 e # 32329 xor c a 247 0 0 f b 247 0 0 f # 32330 xor c a 247 0 0 f b 247 0 1 f # 32331 xor c a 247 0 0 f b 247 0 0 f # 32332 xor c a 247 0 0 f b 247 0 1 1 3 10 13 14 16 19 22 24 26 27 28 30 34 35 39 40 43 45 49 50 52 53 54 55 56 57 58 59 61 62 63 64 65 69 72 79 85 88 90 91 92 93 94 95 96 100 101 102 103 105 107 109 111 113 114 116 118 121 124 127 129 132 133 135 136 137 138 143 144 147 149 151 152 153 156 157 160 162 163 166 170 171 172 175 177 179 180 181 182 186 190 192 193 197 198 199 201 204 205 206 208 214 215 216 217 222 223 227 229 231 232 233 234 235 236 237 239 241 243 # 32333 xor c a 247 0 0 2 3 5 6 9 10 11 13 15 18 21 29 30 31 32 38 39 41 42 47 48 53 55 56 57 60 61 63 65 67 68 70 72 74 76 80 81 82 90 91 94 95 96 97 98 99 101 105 106 107 111 112 118 119 120 121 122 131 134 137 139 140 141 142 143 145 147 154 155 156 158 160 162 164 165 166 168 170 171 173 174 176 180 181 182 184 185 186 187 189 190 193 195 196 199 203 204 207 210 213 218 219 221 222 223 224 226 227 228 229 230 234 238 239 240 241 243 244 245 b 247 0 0 2 3 5 6 9 10 11 13 15 18 21 29 30 31 32 38 39 41 42 47 48 53 55 56 57 60 61 63 65 67 68 70 72 74 76 80 81 82 90 91 94 95 96 97 98 99 101 105 106 107 111 112 118 119 120 121 122 131 134 137 139 140 141 142 143 145 147 154 155 156 158 160 162 164 165 166 168 170 171 173 174 176 180 181 182 184 185 186 187 189 190 193 195 196 199 203 204 207 210 213 218 219 221 222 223 224 226 227 228 229 230 234 238 239 240 241 243 244 245 # 32334 xor c a 247 0 0 2 3 5 6 9 10 11 13 15 18 21 29 30 31 32 38 39 41 42 47 48 53 55 56 57 60 61 63 65 67 68 70 72 74 76 80 81 82 90 91 94 95 96 97 98 99 101 105 106 107 111 112 118 119 120 121 122 131 134 137 139 140 141 142 143 145 147 154 155 156 158 160 162 164 165 166 168 170 171 173 174 176 180 181 182 184 185 186 187 189 190 193 195 196 199 203 204 207 210 213 218 219 221 222 223 224 226 227 228 229 230 234 238 239 240 241 243 244 245 b 247 0 1 e # 32335 xor c a 247 0 0 3 4 6 14 19 20 21 22 23 25 26 29 30 31 32 33 34 35 37 42 44 45 46 48 50 51 53 55 59 61 62 64 66 70 72 74 77 78 81 82 83 87 88 89 90 92 93 95 98 100 101 102 105 106 108 109 110 113 115 117 118 121 124 125 126 127 129 132 134 135 137 142 143 144 146 148 149 152 153 154 155 156 157 158 160 162 164 169 170 171 173 174 176 177 179 180 181 183 184 187 188 191 196 197 199 200 202 203 204 207 209 210 211 212 214 215 216 218 219 223 225 229 232 233 235 238 239 241 242 243 246 b 247 0 0 3 4 6 14 19 20 21 22 23 25 26 29 30 31 32 33 34 35 37 42 44 45 46 48 50 51 53 55 59 61 62 64 66 70 72 74 77 78 81 82 83 87 88 89 90 92 93 95 98 100 101 102 105 106 108 109 110 113 115 117 118 121 124 125 126 127 129 132 134 135 137 142 143 144 146 148 149 152 153 154 155 156 157 158 160 162 164 169 170 171 173 174 176 177 179 180 181 183 184 187 188 191 196 197 199 200 202 203 204 207 209 210 211 212 214 215 216 218 219 223 225 229 232 233 235 238 239 241 242 243 246 # 32336 xor c a 247 0 0 3 4 6 14 19 20 21 22 23 25 26 29 30 31 32 33 34 35 37 42 44 45 46 48 50 51 53 55 59 61 62 64 66 70 72 74 77 78 81 82 83 87 88 89 90 92 93 95 98 100 101 102 105 106 108 109 110 113 115 117 118 121 124 125 126 127 129 132 134 135 137 142 143 144 146 148 149 152 153 154 155 156 157 158 160 162 164 169 170 171 173 174 176 177 179 180 181 183 184 187 188 191 196 197 199 200 202 203 204 207 209 210 211 212 214 215 216 218 219 223 225 229 232 233 235 238 239 241 242 243 246 b 247 0 1 f # 32337 xor c a 247 0 0 1 3 5 12 14 15 17 21 23 24 26 27 28 30 31 32 34 36 40 41 42 49 50 53 59 62 65 66 70 74 76 78 80 81 82 84 86 87 90 91 92 93 96 98 102 103 104 107 108 111 112 113 115 118 119 120 121 122 124 126 127 131 132 133 134 135 137 138 142 146 149 153 154 158 159 160 162 163 166 167 169 170 171 173 174 177 178 179 180 182 185 192 193 195 198 199 201 202 204 205 206 207 208 209 210 213 214 218 219 220 222 227 230 231 232 235 238 239 246 b 247 0 0 1 3 5 12 14 15 17 21 23 24 26 27 28 30 31 32 34 36 40 41 42 49 50 53 59 62 65 66 70 74 76 78 80 81 82 84 86 87 90 91 92 93 96 98 102 103 104 107 108 111 112 113 115 118 119 120 121 122 124 126 127 131 132 133 134 135 137 138 142 146 149 153 154 158 159 160 162 163 166 167 169 170 171 173 174 177 178 179 180 182 185 192 193 195 198 199 201 202 204 205 206 207 208 209 210 213 214 218 219 220 222 227 230 231 232 235 238 239 246 # 32338 xor c a 247 0 0 1 3 5 12 14 15 17 21 23 24 26 27 28 30 31 32 34 36 40 41 42 49 50 53 59 62 65 66 70 74 76 78 80 81 82 84 86 87 90 91 92 93 96 98 102 103 104 107 108 111 112 113 115 118 119 120 121 122 124 126 127 131 132 133 134 135 137 138 142 146 149 153 154 158 159 160 162 163 166 167 169 170 171 173 174 177 178 179 180 182 185 192 193 195 198 199 201 202 204 205 206 207 208 209 210 213 214 218 219 220 222 227 230 231 232 235 238 239 246 b 247 0 1 0 2 7 9 14 15 20 22 23 24 28 32 34 38 39 44 48 49 55 56 59 60 63 64 68 71 76 77 80 81 82 83 86 88 91 92 94 96 97 98 101 103 105 106 108 110 111 113 114 115 116 117 119 120 121 123 127 129 132 133 136 138 139 140 142 149 150 154 155 156 158 159 165 166 168 171 172 173 174 179 180 182 184 185 187 189 190 194 196 198 199 200 201 202 203 204 205 208 209 211 217 218 220 221 222 223 224 225 227 230 233 238 241 245 246 # 32339 xor c a 247 0 0 e b 247 0 0 e # 32340 xor c a 247 0 0 e b 247 1 0 e # 32341 xor c a 247 0 0 e b 247 0 0 e # 32342 xor c a 247 0 0 e b 247 1 0 f # 32343 xor c a 247 0 0 e b 247 0 0 e # 32344 xor c a 247 0 0 e b 247 1 0 1 2 3 6 9 10 12 19 20 21 26 27 28 29 35 36 40 42 43 44 49 50 52 55 56 58 59 60 62 69 77 79 84 85 87 88 89 90 91 93 95 96 97 98 100 102 104 106 111 112 114 115 118 125 128 130 131 132 133 137 138 141 143 146 147 150 151 152 156 159 160 164 165 166 168 169 170 171 172 173 174 177 178 179 181 185 189 190 191 199 202 203 205 208 211 213 217 218 219 220 221 222 223 228 229 231 232 234 238 241 243 244 # 32345 xor c a 247 0 0 f b 247 0 0 f # 32346 xor c a 247 0 0 f b 247 1 0 e # 32347 xor c a 247 0 0 f b 247 0 0 f # 32348 xor c a 247 0 0 f b 247 1 0 f # 32349 xor c a 247 0 0 f b 247 0 0 f # 32350 xor c a 247 0 0 f b 247 1 0 2 3 4 5 6 7 8 9 12 13 14 15 16 18 20 21 22 25 28 29 31 34 37 40 42 45 49 50 52 53 56 57 58 60 64 67 69 71 73 75 76 77 79 80 81 83 84 85 88 89 90 91 94 95 96 98 105 107 110 114 116 118 119 121 128 132 133 134 135 137 138 139 141 143 149 150 151 152 155 156 157 159 161 163 165 166 167 168 169 170 172 177 179 180 182 184 185 187 188 189 190 191 194 195 197 198 200 201 202 203 207 208 209 210 211 217 223 226 227 229 230 232 233 236 238 239 241 242 245 246 # 32351 xor c a 247 0 0 0 1 2 3 8 12 15 21 24 26 29 32 35 40 42 43 44 46 47 49 51 52 53 54 55 57 59 60 62 63 64 66 68 69 71 79 81 82 83 84 85 86 87 88 89 90 91 93 96 99 101 103 105 106 107 110 112 115 118 119 122 123 126 130 131 135 139 140 143 144 145 147 148 150 152 153 154 155 156 157 163 164 165 166 170 171 174 176 179 184 187 191 192 193 194 198 199 200 201 202 204 207 208 209 210 212 215 217 218 219 223 227 228 232 234 235 236 238 240 241 242 243 246 b 247 0 0 0 1 2 3 8 12 15 21 24 26 29 32 35 40 42 43 44 46 47 49 51 52 53 54 55 57 59 60 62 63 64 66 68 69 71 79 81 82 83 84 85 86 87 88 89 90 91 93 96 99 101 103 105 106 107 110 112 115 118 119 122 123 126 130 131 135 139 140 143 144 145 147 148 150 152 153 154 155 156 157 163 164 165 166 170 171 174 176 179 184 187 191 192 193 194 198 199 200 201 202 204 207 208 209 210 212 215 217 218 219 223 227 228 232 234 235 236 238 240 241 242 243 246 # 32352 xor c a 247 0 0 0 1 2 3 8 12 15 21 24 26 29 32 35 40 42 43 44 46 47 49 51 52 53 54 55 57 59 60 62 63 64 66 68 69 71 79 81 82 83 84 85 86 87 88 89 90 91 93 96 99 101 103 105 106 107 110 112 115 118 119 122 123 126 130 131 135 139 140 143 144 145 147 148 150 152 153 154 155 156 157 163 164 165 166 170 171 174 176 179 184 187 191 192 193 194 198 199 200 201 202 204 207 208 209 210 212 215 217 218 219 223 227 228 232 234 235 236 238 240 241 242 243 246 b 247 1 0 e # 32353 xor c a 247 0 0 0 1 2 6 8 10 12 13 14 16 19 20 22 25 31 35 36 38 39 40 41 43 44 47 50 52 53 54 56 58 59 60 62 64 66 67 68 69 70 71 72 73 77 79 81 84 86 89 96 99 101 102 104 106 108 109 110 112 115 119 120 121 125 129 131 132 133 134 135 137 138 140 141 143 145 147 149 150 153 155 156 157 158 159 160 162 165 170 174 181 182 183 184 187 190 191 192 195 197 199 200 202 205 206 207 209 211 212 213 215 217 218 224 225 228 229 230 231 232 233 234 236 237 240 243 245 246 b 247 0 0 0 1 2 6 8 10 12 13 14 16 19 20 22 25 31 35 36 38 39 40 41 43 44 47 50 52 53 54 56 58 59 60 62 64 66 67 68 69 70 71 72 73 77 79 81 84 86 89 96 99 101 102 104 106 108 109 110 112 115 119 120 121 125 129 131 132 133 134 135 137 138 140 141 143 145 147 149 150 153 155 156 157 158 159 160 162 165 170 174 181 182 183 184 187 190 191 192 195 197 199 200 202 205 206 207 209 211 212 213 215 217 218 224 225 228 229 230 231 232 233 234 236 237 240 243 245 246 # 32354 xor c a 247 0 0 0 1 2 6 8 10 12 13 14 16 19 20 22 25 31 35 36 38 39 40 41 43 44 47 50 52 53 54 56 58 59 60 62 64 66 67 68 69 70 71 72 73 77 79 81 84 86 89 96 99 101 102 104 106 108 109 110 112 115 119 120 121 125 129 131 132 133 134 135 137 138 140 141 143 145 147 149 150 153 155 156 157 158 159 160 162 165 170 174 181 182 183 184 187 190 191 192 195 197 199 200 202 205 206 207 209 211 212 213 215 217 218 224 225 228 229 230 231 232 233 234 236 237 240 243 245 246 b 247 1 0 f # 32355 xor c a 247 0 0 0 1 5 6 8 9 10 19 21 23 24 25 26 29 31 33 35 36 37 39 40 41 42 47 49 50 51 52 56 58 63 64 67 69 72 76 77 80 82 86 88 89 90 93 94 98 99 103 104 105 107 108 110 112 113 114 117 118 120 122 125 127 130 132 135 136 137 138 139 141 143 144 149 150 155 157 158 161 162 170 172 175 177 178 179 180 181 182 190 191 193 197 198 199 201 204 205 206 209 212 215 216 217 220 225 226 227 228 230 231 233 236 238 241 243 245 246 b 247 0 0 0 1 5 6 8 9 10 19 21 23 24 25 26 29 31 33 35 36 37 39 40 41 42 47 49 50 51 52 56 58 63 64 67 69 72 76 77 80 82 86 88 89 90 93 94 98 99 103 104 105 107 108 110 112 113 114 117 118 120 122 125 127 130 132 135 136 137 138 139 141 143 144 149 150 155 157 158 161 162 170 172 175 177 178 179 180 181 182 190 191 193 197 198 199 201 204 205 206 209 212 215 216 217 220 225 226 227 228 230 231 233 236 238 241 243 245 246 # 32356 xor c a 247 0 0 0 1 5 6 8 9 10 19 21 23 24 25 26 29 31 33 35 36 37 39 40 41 42 47 49 50 51 52 56 58 63 64 67 69 72 76 77 80 82 86 88 89 90 93 94 98 99 103 104 105 107 108 110 112 113 114 117 118 120 122 125 127 130 132 135 136 137 138 139 141 143 144 149 150 155 157 158 161 162 170 172 175 177 178 179 180 181 182 190 191 193 197 198 199 201 204 205 206 209 212 215 216 217 220 225 226 227 228 230 231 233 236 238 241 243 245 246 b 247 1 0 0 1 4 5 7 10 12 15 19 20 24 26 27 28 29 30 31 34 39 40 41 43 46 47 48 49 51 53 54 57 58 61 62 63 64 65 70 74 75 76 77 80 81 84 88 90 93 96 97 103 104 109 110 111 112 115 117 122 124 126 127 130 132 136 137 138 140 141 143 146 147 154 156 157 159 160 163 164 165 167 170 174 176 177 179 180 184 186 193 194 196 198 201 203 207 210 212 214 215 216 217 220 221 224 226 228 229 230 232 234 235 236 238 239 240 241 243 245 # 32357 xor c a 247 0 0 e b 247 0 0 e # 32358 xor c a 247 0 0 e b 247 1 1 e # 32359 xor c a 247 0 0 e b 247 0 0 e # 32360 xor c a 247 0 0 e b 247 1 1 f # 32361 xor c a 247 0 0 e b 247 0 0 e # 32362 xor c a 247 0 0 e b 247 1 1 1 2 3 4 9 10 11 13 15 17 18 21 24 26 28 29 30 33 43 45 47 51 53 55 60 62 65 66 70 71 72 75 76 77 78 81 84 85 87 89 93 94 95 96 100 105 108 110 111 115 117 118 119 120 122 125 130 131 132 133 136 137 138 141 145 147 148 151 152 155 157 161 163 164 165 167 168 169 172 173 174 175 176 178 179 180 182 184 187 188 189 192 193 195 196 199 201 205 209 210 211 213 215 216 217 218 219 220 228 229 233 234 235 236 237 239 240 242 244 # 32363 xor c a 247 0 0 f b 247 0 0 f # 32364 xor c a 247 0 0 f b 247 1 1 e # 32365 xor c a 247 0 0 f b 247 0 0 f # 32366 xor c a 247 0 0 f b 247 1 1 f # 32367 xor c a 247 0 0 f b 247 0 0 f # 32368 xor c a 247 0 0 f b 247 1 1 0 3 5 7 9 10 11 12 13 17 18 20 21 23 24 25 26 28 31 32 33 34 35 37 38 39 40 41 45 46 47 48 49 50 52 55 57 58 59 62 63 66 67 69 73 74 75 76 78 81 82 83 86 89 96 101 103 104 106 108 110 111 113 114 117 118 122 123 124 128 130 134 135 137 146 147 148 149 156 158 159 160 162 164 165 168 169 171 173 175 176 179 181 183 184 185 187 189 197 201 203 204 205 207 209 210 211 212 214 215 216 217 220 221 225 226 227 228 234 235 238 244 245 246 # 32369 xor c a 247 0 0 0 1 3 4 8 11 16 17 19 20 21 25 26 27 28 29 30 32 35 36 37 39 42 43 44 45 47 48 49 51 52 53 56 57 58 59 60 61 64 65 67 68 72 74 75 78 79 80 82 83 85 86 88 89 90 91 92 95 96 99 100 101 102 103 105 106 109 112 114 117 120 122 123 124 127 128 129 131 132 134 137 138 139 142 145 146 147 148 150 151 152 153 154 159 161 162 167 171 175 177 178 181 183 184 187 189 190 191 193 194 195 200 201 207 209 211 212 213 214 219 220 228 229 230 231 232 234 236 241 242 243 244 245 b 247 0 0 0 1 3 4 8 11 16 17 19 20 21 25 26 27 28 29 30 32 35 36 37 39 42 43 44 45 47 48 49 51 52 53 56 57 58 59 60 61 64 65 67 68 72 74 75 78 79 80 82 83 85 86 88 89 90 91 92 95 96 99 100 101 102 103 105 106 109 112 114 117 120 122 123 124 127 128 129 131 132 134 137 138 139 142 145 146 147 148 150 151 152 153 154 159 161 162 167 171 175 177 178 181 183 184 187 189 190 191 193 194 195 200 201 207 209 211 212 213 214 219 220 228 229 230 231 232 234 236 241 242 243 244 245 # 32370 xor c a 247 0 0 0 1 3 4 8 11 16 17 19 20 21 25 26 27 28 29 30 32 35 36 37 39 42 43 44 45 47 48 49 51 52 53 56 57 58 59 60 61 64 65 67 68 72 74 75 78 79 80 82 83 85 86 88 89 90 91 92 95 96 99 100 101 102 103 105 106 109 112 114 117 120 122 123 124 127 128 129 131 132 134 137 138 139 142 145 146 147 148 150 151 152 153 154 159 161 162 167 171 175 177 178 181 183 184 187 189 190 191 193 194 195 200 201 207 209 211 212 213 214 219 220 228 229 230 231 232 234 236 241 242 243 244 245 b 247 1 1 e # 32371 xor c a 247 0 0 0 1 2 3 4 8 9 10 12 21 22 24 27 34 36 38 39 40 42 43 44 48 49 50 51 56 57 61 66 68 71 72 75 77 81 83 85 88 89 90 91 92 96 98 100 103 105 106 107 109 111 112 114 118 119 121 122 124 126 127 128 129 135 137 138 139 140 141 142 143 145 147 150 151 153 158 159 164 165 167 168 169 170 171 172 174 180 181 183 184 187 188 190 191 197 199 200 201 202 203 207 208 216 217 219 220 222 224 226 227 228 229 230 231 232 233 237 239 243 244 245 246 b 247 0 0 0 1 2 3 4 8 9 10 12 21 22 24 27 34 36 38 39 40 42 43 44 48 49 50 51 56 57 61 66 68 71 72 75 77 81 83 85 88 89 90 91 92 96 98 100 103 105 106 107 109 111 112 114 118 119 121 122 124 126 127 128 129 135 137 138 139 140 141 142 143 145 147 150 151 153 158 159 164 165 167 168 169 170 171 172 174 180 181 183 184 187 188 190 191 197 199 200 201 202 203 207 208 216 217 219 220 222 224 226 227 228 229 230 231 232 233 237 239 243 244 245 246 # 32372 xor c a 247 0 0 0 1 2 3 4 8 9 10 12 21 22 24 27 34 36 38 39 40 42 43 44 48 49 50 51 56 57 61 66 68 71 72 75 77 81 83 85 88 89 90 91 92 96 98 100 103 105 106 107 109 111 112 114 118 119 121 122 124 126 127 128 129 135 137 138 139 140 141 142 143 145 147 150 151 153 158 159 164 165 167 168 169 170 171 172 174 180 181 183 184 187 188 190 191 197 199 200 201 202 203 207 208 216 217 219 220 222 224 226 227 228 229 230 231 232 233 237 239 243 244 245 246 b 247 1 1 f # 32373 xor c a 247 0 0 0 1 3 4 9 10 12 13 16 17 18 21 22 24 26 27 29 30 33 34 39 42 43 50 53 54 56 58 61 63 64 66 68 70 72 73 77 78 81 82 84 85 86 87 89 90 96 99 100 103 107 114 115 116 117 118 121 122 123 125 129 131 134 135 136 137 141 142 144 145 147 151 152 153 154 156 160 161 165 166 168 174 176 186 188 190 191 192 193 194 196 197 199 201 203 205 206 210 211 212 216 217 218 229 231 232 233 236 239 240 242 245 246 b 247 0 0 0 1 3 4 9 10 12 13 16 17 18 21 22 24 26 27 29 30 33 34 39 42 43 50 53 54 56 58 61 63 64 66 68 70 72 73 77 78 81 82 84 85 86 87 89 90 96 99 100 103 107 114 115 116 117 118 121 122 123 125 129 131 134 135 136 137 141 142 144 145 147 151 152 153 154 156 160 161 165 166 168 174 176 186 188 190 191 192 193 194 196 197 199 201 203 205 206 210 211 212 216 217 218 229 231 232 233 236 239 240 242 245 246 # 32374 xor c a 247 0 0 0 1 3 4 9 10 12 13 16 17 18 21 22 24 26 27 29 30 33 34 39 42 43 50 53 54 56 58 61 63 64 66 68 70 72 73 77 78 81 82 84 85 86 87 89 90 96 99 100 103 107 114 115 116 117 118 121 122 123 125 129 131 134 135 136 137 141 142 144 145 147 151 152 153 154 156 160 161 165 166 168 174 176 186 188 190 191 192 193 194 196 197 199 201 203 205 206 210 211 212 216 217 218 229 231 232 233 236 239 240 242 245 246 b 247 1 1 1 3 5 6 10 11 13 16 18 20 22 23 24 25 26 29 31 32 33 35 36 40 45 48 50 51 54 57 58 59 62 64 67 68 69 70 74 75 76 79 81 82 83 85 87 88 90 92 93 95 96 97 99 103 104 105 107 109 110 111 112 113 114 116 120 122 124 127 128 129 130 133 135 136 137 138 142 145 147 148 149 151 152 155 158 161 162 164 167 168 170 172 173 174 175 176 178 179 180 183 184 185 186 189 190 192 193 194 196 199 200 207 210 212 215 216 218 221 222 225 226 229 231 233 237 239 245 # 32375 xor c a 247 0 1 e b 247 0 1 e # 32376 xor c a 247 0 1 e b 247 0 0 e # 32377 xor c a 247 0 1 e b 247 0 1 e # 32378 xor c a 247 0 1 e b 247 0 0 f # 32379 xor c a 247 0 1 e b 247 0 1 e # 32380 xor c a 247 0 1 e b 247 0 0 3 4 5 7 10 11 13 16 18 20 21 22 26 27 28 32 34 39 40 42 44 46 47 48 49 51 52 56 57 62 64 65 66 71 76 77 79 80 81 82 85 86 88 89 90 94 98 100 104 105 106 107 108 110 113 114 115 116 117 118 119 120 121 125 126 129 130 139 143 144 147 151 153 156 157 158 160 161 163 165 167 170 171 172 175 176 177 179 181 182 183 184 190 191 194 195 200 205 208 209 212 214 218 219 221 222 223 224 225 228 229 230 231 233 235 236 238 242 243 245 # 32381 xor c a 247 0 1 f b 247 0 1 f # 32382 xor c a 247 0 1 f b 247 0 0 e # 32383 xor c a 247 0 1 f b 247 0 1 f # 32384 xor c a 247 0 1 f b 247 0 0 f # 32385 xor c a 247 0 1 f b 247 0 1 f # 32386 xor c a 247 0 1 f b 247 0 0 0 1 3 10 13 15 16 19 20 21 22 24 25 27 29 32 33 37 38 40 42 50 53 54 56 61 62 64 65 66 67 68 71 72 74 76 80 82 83 85 87 88 93 95 96 98 99 100 103 104 106 107 108 110 112 113 117 122 132 133 134 135 137 138 139 141 145 146 147 148 149 151 155 157 159 161 167 170 171 172 177 179 180 181 182 187 189 190 191 192 193 197 198 201 204 206 214 216 221 224 225 228 230 231 233 237 239 241 244 246 # 32387 xor c a 247 0 1 0 1 3 7 9 12 13 15 16 18 20 21 22 23 27 29 30 32 33 38 42 44 46 47 49 52 53 54 58 59 60 61 63 64 66 67 68 69 74 76 77 80 83 86 87 88 89 90 91 92 96 99 101 103 105 106 108 112 113 122 123 128 129 130 132 138 139 145 147 148 149 150 152 153 157 158 160 161 162 163 164 169 171 173 177 182 185 186 187 188 189 198 199 201 202 203 204 208 210 212 214 215 217 218 220 221 222 225 226 227 230 231 233 234 236 237 239 244 b 247 0 1 0 1 3 7 9 12 13 15 16 18 20 21 22 23 27 29 30 32 33 38 42 44 46 47 49 52 53 54 58 59 60 61 63 64 66 67 68 69 74 76 77 80 83 86 87 88 89 90 91 92 96 99 101 103 105 106 108 112 113 122 123 128 129 130 132 138 139 145 147 148 149 150 152 153 157 158 160 161 162 163 164 169 171 173 177 182 185 186 187 188 189 198 199 201 202 203 204 208 210 212 214 215 217 218 220 221 222 225 226 227 230 231 233 234 236 237 239 244 # 32388 xor c a 247 0 1 0 1 3 7 9 12 13 15 16 18 20 21 22 23 27 29 30 32 33 38 42 44 46 47 49 52 53 54 58 59 60 61 63 64 66 67 68 69 74 76 77 80 83 86 87 88 89 90 91 92 96 99 101 103 105 106 108 112 113 122 123 128 129 130 132 138 139 145 147 148 149 150 152 153 157 158 160 161 162 163 164 169 171 173 177 182 185 186 187 188 189 198 199 201 202 203 204 208 210 212 214 215 217 218 220 221 222 225 226 227 230 231 233 234 236 237 239 244 b 247 0 0 e # 32389 xor c a 247 0 1 2 5 11 12 13 14 15 22 24 26 28 32 34 37 38 39 41 42 43 44 46 47 48 52 54 55 56 57 58 59 62 64 65 66 68 71 73 74 77 80 81 82 83 85 87 88 90 92 93 94 95 97 101 103 104 106 108 110 111 112 113 114 116 119 120 121 123 124 126 128 132 133 134 135 136 137 138 139 141 142 145 148 149 150 151 152 158 162 164 165 167 168 170 171 172 173 176 177 178 179 181 184 185 186 190 191 192 193 195 198 200 201 203 204 209 211 212 213 214 215 216 217 219 222 223 224 225 226 230 233 234 235 239 241 243 246 b 247 0 1 2 5 11 12 13 14 15 22 24 26 28 32 34 37 38 39 41 42 43 44 46 47 48 52 54 55 56 57 58 59 62 64 65 66 68 71 73 74 77 80 81 82 83 85 87 88 90 92 93 94 95 97 101 103 104 106 108 110 111 112 113 114 116 119 120 121 123 124 126 128 132 133 134 135 136 137 138 139 141 142 145 148 149 150 151 152 158 162 164 165 167 168 170 171 172 173 176 177 178 179 181 184 185 186 190 191 192 193 195 198 200 201 203 204 209 211 212 213 214 215 216 217 219 222 223 224 225 226 230 233 234 235 239 241 243 246 # 32390 xor c a 247 0 1 2 5 11 12 13 14 15 22 24 26 28 32 34 37 38 39 41 42 43 44 46 47 48 52 54 55 56 57 58 59 62 64 65 66 68 71 73 74 77 80 81 82 83 85 87 88 90 92 93 94 95 97 101 103 104 106 108 110 111 112 113 114 116 119 120 121 123 124 126 128 132 133 134 135 136 137 138 139 141 142 145 148 149 150 151 152 158 162 164 165 167 168 170 171 172 173 176 177 178 179 181 184 185 186 190 191 192 193 195 198 200 201 203 204 209 211 212 213 214 215 216 217 219 222 223 224 225 226 230 233 234 235 239 241 243 246 b 247 0 0 f # 32391 xor c a 247 0 1 2 6 9 11 13 15 16 18 19 20 21 23 28 29 30 31 32 33 38 43 44 45 47 50 54 56 58 60 61 63 64 65 67 68 72 73 74 75 78 79 80 81 82 83 85 87 92 93 95 96 97 98 99 102 103 104 105 106 117 120 121 122 123 124 125 126 127 128 131 132 134 135 137 139 144 146 147 157 159 161 162 165 166 167 168 170 171 172 173 179 180 181 182 186 191 192 194 197 198 201 203 204 205 209 210 212 213 214 217 218 220 223 224 232 233 235 237 238 239 240 241 242 243 244 245 b 247 0 1 2 6 9 11 13 15 16 18 19 20 21 23 28 29 30 31 32 33 38 43 44 45 47 50 54 56 58 60 61 63 64 65 67 68 72 73 74 75 78 79 80 81 82 83 85 87 92 93 95 96 97 98 99 102 103 104 105 106 117 120 121 122 123 124 125 126 127 128 131 132 134 135 137 139 144 146 147 157 159 161 162 165 166 167 168 170 171 172 173 179 180 181 182 186 191 192 194 197 198 201 203 204 205 209 210 212 213 214 217 218 220 223 224 232 233 235 237 238 239 240 241 242 243 244 245 # 32392 xor c a 247 0 1 2 6 9 11 13 15 16 18 19 20 21 23 28 29 30 31 32 33 38 43 44 45 47 50 54 56 58 60 61 63 64 65 67 68 72 73 74 75 78 79 80 81 82 83 85 87 92 93 95 96 97 98 99 102 103 104 105 106 117 120 121 122 123 124 125 126 127 128 131 132 134 135 137 139 144 146 147 157 159 161 162 165 166 167 168 170 171 172 173 179 180 181 182 186 191 192 194 197 198 201 203 204 205 209 210 212 213 214 217 218 220 223 224 232 233 235 237 238 239 240 241 242 243 244 245 b 247 0 0 2 3 6 8 10 13 14 15 16 19 20 22 23 25 26 28 30 31 32 33 34 36 37 38 39 40 41 44 45 47 49 55 56 57 59 62 64 66 67 69 70 72 74 79 81 83 84 86 87 90 91 96 104 106 107 109 110 111 112 113 115 118 119 122 123 124 127 128 129 133 134 136 141 144 145 146 148 149 156 157 159 160 166 168 169 170 172 173 175 176 179 181 185 186 188 189 191 193 195 197 198 199 200 201 203 204 205 206 214 215 217 219 220 221 222 224 225 226 228 229 231 232 234 237 238 242 243 244 245 246 # 32393 xor c a 247 0 1 e b 247 0 1 e # 32394 xor c a 247 0 1 e b 247 0 1 e # 32395 xor c a 247 0 1 e b 247 0 1 e # 32396 xor c a 247 0 1 e b 247 0 1 f # 32397 xor c a 247 0 1 e b 247 0 1 e # 32398 xor c a 247 0 1 e b 247 0 1 0 1 3 6 7 9 10 11 12 13 14 15 18 19 20 21 22 28 31 32 33 34 37 39 41 44 46 48 49 51 54 55 58 64 66 70 71 74 75 76 77 79 80 82 84 85 86 88 89 90 94 96 97 99 102 104 105 107 108 109 110 113 114 115 117 120 121 122 123 125 127 128 129 130 133 134 140 142 144 150 151 153 154 155 156 158 159 160 161 165 167 169 172 173 175 177 179 182 183 185 188 191 192 193 196 197 199 201 204 205 209 210 211 213 215 217 221 224 225 226 231 232 233 235 237 238 239 240 241 242 244 # 32399 xor c a 247 0 1 f b 247 0 1 f # 32400 xor c a 247 0 1 f b 247 0 1 e # 32401 xor c a 247 0 1 f b 247 0 1 f # 32402 xor c a 247 0 1 f b 247 0 1 f # 32403 xor c a 247 0 1 f b 247 0 1 f # 32404 xor c a 247 0 1 f b 247 0 1 2 3 5 7 8 9 13 14 16 18 20 21 23 24 26 29 30 33 35 36 39 41 42 43 44 45 50 56 57 58 60 61 62 64 65 66 67 70 71 73 74 78 79 80 81 82 86 89 92 95 98 99 100 101 102 105 106 107 110 113 114 116 117 118 120 123 125 126 127 129 134 135 136 137 138 141 146 148 149 150 151 152 159 160 161 164 167 168 173 174 175 176 177 179 181 182 186 192 194 195 196 198 199 200 202 204 205 206 207 210 211 213 216 218 220 222 223 224 225 226 229 232 234 235 236 237 238 240 241 244 245 246 # 32405 xor c a 247 0 1 0 2 5 7 8 10 12 17 18 20 21 24 26 27 29 30 31 40 44 45 46 48 49 50 54 56 59 61 62 66 67 68 72 73 74 76 77 78 82 83 84 85 94 95 96 97 98 102 104 105 106 107 108 112 115 116 120 121 122 125 127 128 132 135 140 141 143 144 145 147 149 153 154 155 156 158 160 162 164 169 173 174 176 179 181 183 184 185 190 191 193 196 197 201 202 203 204 205 207 209 210 212 213 216 217 218 220 221 224 225 226 227 231 233 234 236 238 239 241 244 245 246 b 247 0 1 0 2 5 7 8 10 12 17 18 20 21 24 26 27 29 30 31 40 44 45 46 48 49 50 54 56 59 61 62 66 67 68 72 73 74 76 77 78 82 83 84 85 94 95 96 97 98 102 104 105 106 107 108 112 115 116 120 121 122 125 127 128 132 135 140 141 143 144 145 147 149 153 154 155 156 158 160 162 164 169 173 174 176 179 181 183 184 185 190 191 193 196 197 201 202 203 204 205 207 209 210 212 213 216 217 218 220 221 224 225 226 227 231 233 234 236 238 239 241 244 245 246 # 32406 xor c a 247 0 1 0 2 5 7 8 10 12 17 18 20 21 24 26 27 29 30 31 40 44 45 46 48 49 50 54 56 59 61 62 66 67 68 72 73 74 76 77 78 82 83 84 85 94 95 96 97 98 102 104 105 106 107 108 112 115 116 120 121 122 125 127 128 132 135 140 141 143 144 145 147 149 153 154 155 156 158 160 162 164 169 173 174 176 179 181 183 184 185 190 191 193 196 197 201 202 203 204 205 207 209 210 212 213 216 217 218 220 221 224 225 226 227 231 233 234 236 238 239 241 244 245 246 b 247 0 1 e # 32407 xor c a 247 0 1 0 2 3 5 7 9 10 13 21 26 27 28 31 32 34 36 37 40 42 46 48 50 51 55 56 57 58 59 66 70 72 73 74 75 76 77 79 82 83 84 85 86 87 88 92 93 94 97 98 101 102 109 113 116 117 118 119 127 131 132 133 138 139 146 149 151 153 155 157 159 160 161 162 163 164 165 170 171 172 175 176 177 180 183 186 192 193 195 196 197 198 201 203 206 207 212 215 216 217 221 224 225 226 227 229 231 232 234 236 237 240 242 243 244 245 246 b 247 0 1 0 2 3 5 7 9 10 13 21 26 27 28 31 32 34 36 37 40 42 46 48 50 51 55 56 57 58 59 66 70 72 73 74 75 76 77 79 82 83 84 85 86 87 88 92 93 94 97 98 101 102 109 113 116 117 118 119 127 131 132 133 138 139 146 149 151 153 155 157 159 160 161 162 163 164 165 170 171 172 175 176 177 180 183 186 192 193 195 196 197 198 201 203 206 207 212 215 216 217 221 224 225 226 227 229 231 232 234 236 237 240 242 243 244 245 246 # 32408 xor c a 247 0 1 0 2 3 5 7 9 10 13 21 26 27 28 31 32 34 36 37 40 42 46 48 50 51 55 56 57 58 59 66 70 72 73 74 75 76 77 79 82 83 84 85 86 87 88 92 93 94 97 98 101 102 109 113 116 117 118 119 127 131 132 133 138 139 146 149 151 153 155 157 159 160 161 162 163 164 165 170 171 172 175 176 177 180 183 186 192 193 195 196 197 198 201 203 206 207 212 215 216 217 221 224 225 226 227 229 231 232 234 236 237 240 242 243 244 245 246 b 247 0 1 f # 32409 xor c a 247 0 1 0 1 5 6 8 12 14 15 19 22 23 27 30 33 34 35 36 39 40 41 43 45 46 47 55 56 57 58 62 63 65 69 75 77 79 81 83 90 92 93 96 97 98 99 101 103 106 107 110 111 113 115 117 119 123 127 129 130 131 132 134 136 140 142 143 146 147 149 151 153 154 157 160 163 164 165 169 170 173 177 179 180 181 186 187 192 197 198 199 200 201 203 207 209 213 214 215 218 220 221 222 225 226 227 228 229 230 232 236 237 238 240 242 b 247 0 1 0 1 5 6 8 12 14 15 19 22 23 27 30 33 34 35 36 39 40 41 43 45 46 47 55 56 57 58 62 63 65 69 75 77 79 81 83 90 92 93 96 97 98 99 101 103 106 107 110 111 113 115 117 119 123 127 129 130 131 132 134 136 140 142 143 146 147 149 151 153 154 157 160 163 164 165 169 170 173 177 179 180 181 186 187 192 197 198 199 200 201 203 207 209 213 214 215 218 220 221 222 225 226 227 228 229 230 232 236 237 238 240 242 # 32410 xor c a 247 0 1 0 1 5 6 8 12 14 15 19 22 23 27 30 33 34 35 36 39 40 41 43 45 46 47 55 56 57 58 62 63 65 69 75 77 79 81 83 90 92 93 96 97 98 99 101 103 106 107 110 111 113 115 117 119 123 127 129 130 131 132 134 136 140 142 143 146 147 149 151 153 154 157 160 163 164 165 169 170 173 177 179 180 181 186 187 192 197 198 199 200 201 203 207 209 213 214 215 218 220 221 222 225 226 227 228 229 230 232 236 237 238 240 242 b 247 0 1 0 1 2 4 5 6 9 12 16 17 18 21 23 25 27 29 30 31 32 33 35 36 38 42 43 49 50 51 52 53 56 57 58 59 60 61 62 63 64 66 67 69 71 72 74 76 77 78 80 81 82 83 84 86 89 92 95 96 98 100 102 103 104 105 107 108 111 115 116 121 122 132 135 137 138 139 142 143 146 148 154 155 158 159 160 163 164 165 166 168 169 172 173 177 178 179 185 187 190 191 192 194 195 198 202 206 212 213 214 216 219 222 224 225 226 229 230 233 234 236 238 240 242 243 245 246 # 32411 xor c a 247 0 1 e b 247 0 1 e # 32412 xor c a 247 0 1 e b 247 1 0 e # 32413 xor c a 247 0 1 e b 247 0 1 e # 32414 xor c a 247 0 1 e b 247 1 0 f # 32415 xor c a 247 0 1 e b 247 0 1 e # 32416 xor c a 247 0 1 e b 247 1 0 0 1 3 6 7 9 10 12 13 16 17 20 21 24 25 26 29 32 33 38 40 41 42 43 49 50 58 59 62 63 64 70 72 73 76 77 78 80 81 85 87 90 91 93 94 96 97 98 102 106 109 112 113 116 117 121 123 124 125 127 128 129 135 136 138 140 143 145 146 148 150 154 155 158 161 163 165 167 172 173 174 176 177 178 179 181 182 185 190 197 201 202 205 206 208 209 210 211 212 213 215 216 217 222 225 226 227 228 231 233 235 236 237 238 240 241 244 245 # 32417 xor c a 247 0 1 f b 247 0 1 f # 32418 xor c a 247 0 1 f b 247 1 0 e # 32419 xor c a 247 0 1 f b 247 0 1 f # 32420 xor c a 247 0 1 f b 247 1 0 f # 32421 xor c a 247 0 1 f b 247 0 1 f # 32422 xor c a 247 0 1 f b 247 1 0 0 1 2 6 7 8 9 10 12 14 15 17 18 21 23 24 30 33 35 36 39 45 46 47 48 49 52 55 56 57 58 59 61 63 65 69 71 74 75 77 78 80 81 83 85 86 89 91 95 97 100 101 106 107 109 110 112 117 119 120 121 125 128 129 130 131 135 139 140 142 143 144 146 150 151 158 161 163 165 167 168 169 171 174 176 177 178 179 181 182 186 187 188 189 191 192 193 194 198 203 204 207 208 209 210 212 213 214 215 216 217 218 219 220 221 222 223 224 226 228 229 230 231 234 237 240 241 242 243 244 246 # 32423 xor c a 247 0 1 0 4 7 9 10 13 19 20 22 25 27 28 29 30 32 34 35 36 38 39 40 45 46 54 55 57 58 59 60 63 64 66 68 71 72 73 76 78 79 81 83 85 86 88 91 92 93 95 100 101 102 103 104 106 109 111 112 113 114 115 116 117 119 121 124 125 126 130 131 132 133 134 135 136 137 141 149 150 152 154 155 157 159 160 161 162 163 164 166 167 169 171 172 173 174 180 182 183 184 185 189 192 193 199 203 208 209 210 211 213 216 217 218 220 221 222 224 226 231 232 233 234 235 237 239 240 242 243 b 247 0 1 0 4 7 9 10 13 19 20 22 25 27 28 29 30 32 34 35 36 38 39 40 45 46 54 55 57 58 59 60 63 64 66 68 71 72 73 76 78 79 81 83 85 86 88 91 92 93 95 100 101 102 103 104 106 109 111 112 113 114 115 116 117 119 121 124 125 126 130 131 132 133 134 135 136 137 141 149 150 152 154 155 157 159 160 161 162 163 164 166 167 169 171 172 173 174 180 182 183 184 185 189 192 193 199 203 208 209 210 211 213 216 217 218 220 221 222 224 226 231 232 233 234 235 237 239 240 242 243 # 32424 xor c a 247 0 1 0 4 7 9 10 13 19 20 22 25 27 28 29 30 32 34 35 36 38 39 40 45 46 54 55 57 58 59 60 63 64 66 68 71 72 73 76 78 79 81 83 85 86 88 91 92 93 95 100 101 102 103 104 106 109 111 112 113 114 115 116 117 119 121 124 125 126 130 131 132 133 134 135 136 137 141 149 150 152 154 155 157 159 160 161 162 163 164 166 167 169 171 172 173 174 180 182 183 184 185 189 192 193 199 203 208 209 210 211 213 216 217 218 220 221 222 224 226 231 232 233 234 235 237 239 240 242 243 b 247 1 0 e # 32425 xor c a 247 0 1 2 4 5 8 12 13 14 15 20 22 23 28 29 32 34 35 37 41 42 44 45 49 50 51 53 54 58 60 63 64 66 70 71 73 79 82 84 86 88 89 91 92 93 94 95 97 98 101 103 106 107 108 110 112 114 115 116 117 118 119 127 128 132 134 136 137 139 144 145 146 147 148 149 153 154 155 157 158 161 166 171 173 176 178 182 183 186 187 190 191 194 195 196 197 200 201 204 205 206 208 209 210 213 214 215 217 219 223 224 226 227 233 234 235 236 239 242 245 b 247 0 1 2 4 5 8 12 13 14 15 20 22 23 28 29 32 34 35 37 41 42 44 45 49 50 51 53 54 58 60 63 64 66 70 71 73 79 82 84 86 88 89 91 92 93 94 95 97 98 101 103 106 107 108 110 112 114 115 116 117 118 119 127 128 132 134 136 137 139 144 145 146 147 148 149 153 154 155 157 158 161 166 171 173 176 178 182 183 186 187 190 191 194 195 196 197 200 201 204 205 206 208 209 210 213 214 215 217 219 223 224 226 227 233 234 235 236 239 242 245 # 32426 xor c a 247 0 1 2 4 5 8 12 13 14 15 20 22 23 28 29 32 34 35 37 41 42 44 45 49 50 51 53 54 58 60 63 64 66 70 71 73 79 82 84 86 88 89 91 92 93 94 95 97 98 101 103 106 107 108 110 112 114 115 116 117 118 119 127 128 132 134 136 137 139 144 145 146 147 148 149 153 154 155 157 158 161 166 171 173 176 178 182 183 186 187 190 191 194 195 196 197 200 201 204 205 206 208 209 210 213 214 215 217 219 223 224 226 227 233 234 235 236 239 242 245 b 247 1 0 f # 32427 xor c a 247 0 1 1 2 4 6 7 13 14 15 16 17 19 21 25 27 30 31 32 33 34 35 36 37 38 40 44 47 48 49 50 52 54 55 57 58 59 61 69 70 74 77 80 82 84 85 88 90 91 92 96 98 101 103 104 106 110 111 113 116 117 124 125 126 127 129 131 133 136 138 140 141 144 145 147 148 149 151 153 157 159 160 161 165 166 169 170 172 173 175 176 177 180 181 185 186 187 188 190 194 195 199 201 202 203 204 206 207 212 213 214 217 222 223 227 228 229 232 235 236 237 241 242 245 246 b 247 0 1 1 2 4 6 7 13 14 15 16 17 19 21 25 27 30 31 32 33 34 35 36 37 38 40 44 47 48 49 50 52 54 55 57 58 59 61 69 70 74 77 80 82 84 85 88 90 91 92 96 98 101 103 104 106 110 111 113 116 117 124 125 126 127 129 131 133 136 138 140 141 144 145 147 148 149 151 153 157 159 160 161 165 166 169 170 172 173 175 176 177 180 181 185 186 187 188 190 194 195 199 201 202 203 204 206 207 212 213 214 217 222 223 227 228 229 232 235 236 237 241 242 245 246 # 32428 xor c a 247 0 1 1 2 4 6 7 13 14 15 16 17 19 21 25 27 30 31 32 33 34 35 36 37 38 40 44 47 48 49 50 52 54 55 57 58 59 61 69 70 74 77 80 82 84 85 88 90 91 92 96 98 101 103 104 106 110 111 113 116 117 124 125 126 127 129 131 133 136 138 140 141 144 145 147 148 149 151 153 157 159 160 161 165 166 169 170 172 173 175 176 177 180 181 185 186 187 188 190 194 195 199 201 202 203 204 206 207 212 213 214 217 222 223 227 228 229 232 235 236 237 241 242 245 246 b 247 1 0 0 1 6 8 10 11 15 17 18 19 20 21 28 31 34 35 36 37 38 39 41 42 43 45 46 48 49 52 53 54 55 57 59 61 62 65 68 72 73 76 77 78 79 80 85 88 89 92 94 95 96 97 99 102 111 115 117 120 121 122 123 124 126 127 129 130 131 133 134 135 136 140 141 145 146 147 148 151 152 153 155 158 159 161 162 163 165 166 170 171 172 173 176 178 185 187 188 190 194 195 197 200 201 203 204 205 207 208 214 215 220 224 226 227 233 236 238 239 240 244 246 # 32429 xor c a 247 0 1 e b 247 0 1 e # 32430 xor c a 247 0 1 e b 247 1 1 e # 32431 xor c a 247 0 1 e b 247 0 1 e # 32432 xor c a 247 0 1 e b 247 1 1 f # 32433 xor c a 247 0 1 e b 247 0 1 e # 32434 xor c a 247 0 1 e b 247 1 1 0 1 4 5 6 7 10 14 15 17 18 19 20 22 25 26 28 29 31 32 33 34 36 37 40 42 44 45 48 50 52 53 54 55 56 57 60 61 64 66 67 68 70 71 72 73 75 77 78 80 81 82 83 84 85 86 90 94 97 98 101 104 105 106 108 109 111 112 115 116 122 123 126 127 129 132 133 134 135 136 137 138 139 140 143 144 145 147 149 151 152 153 159 161 164 165 167 168 170 172 177 185 186 187 190 191 193 196 199 200 206 207 211 212 220 221 224 226 227 228 230 231 233 235 238 239 241 245 # 32435 xor c a 247 0 1 f b 247 0 1 f # 32436 xor c a 247 0 1 f b 247 1 1 e # 32437 xor c a 247 0 1 f b 247 0 1 f # 32438 xor c a 247 0 1 f b 247 1 1 f # 32439 xor c a 247 0 1 f b 247 0 1 f # 32440 xor c a 247 0 1 f b 247 1 1 0 1 2 4 5 7 8 9 10 11 12 13 15 18 20 23 24 27 28 29 32 34 35 36 38 39 45 46 47 49 53 55 56 58 59 64 65 67 69 73 74 75 76 77 78 80 82 83 86 88 89 90 94 97 98 100 102 105 110 112 113 119 123 124 125 126 127 128 129 131 135 137 139 142 146 147 150 151 152 153 156 159 161 162 163 166 167 171 172 176 181 182 184 186 187 188 190 193 195 199 200 201 202 203 208 209 212 215 216 218 219 221 223 224 225 229 232 236 237 238 240 242 244 # 32441 xor c a 247 0 1 0 2 3 4 5 7 11 12 14 18 19 20 21 25 27 32 34 35 36 38 41 52 53 54 59 60 61 63 64 66 67 71 73 75 76 77 80 82 83 85 87 89 90 91 92 93 94 95 98 99 100 102 104 105 107 108 111 112 114 118 119 121 122 123 124 126 127 128 130 131 132 135 137 138 142 144 145 148 150 153 155 157 158 161 165 166 167 169 170 171 172 173 174 175 176 178 179 180 181 182 184 187 191 192 194 197 198 199 200 201 203 204 207 208 211 216 219 220 222 223 224 225 226 228 229 230 232 235 236 237 238 239 242 243 244 246 b 247 0 1 0 2 3 4 5 7 11 12 14 18 19 20 21 25 27 32 34 35 36 38 41 52 53 54 59 60 61 63 64 66 67 71 73 75 76 77 80 82 83 85 87 89 90 91 92 93 94 95 98 99 100 102 104 105 107 108 111 112 114 118 119 121 122 123 124 126 127 128 130 131 132 135 137 138 142 144 145 148 150 153 155 157 158 161 165 166 167 169 170 171 172 173 174 175 176 178 179 180 181 182 184 187 191 192 194 197 198 199 200 201 203 204 207 208 211 216 219 220 222 223 224 225 226 228 229 230 232 235 236 237 238 239 242 243 244 246 # 32442 xor c a 247 0 1 0 2 3 4 5 7 11 12 14 18 19 20 21 25 27 32 34 35 36 38 41 52 53 54 59 60 61 63 64 66 67 71 73 75 76 77 80 82 83 85 87 89 90 91 92 93 94 95 98 99 100 102 104 105 107 108 111 112 114 118 119 121 122 123 124 126 127 128 130 131 132 135 137 138 142 144 145 148 150 153 155 157 158 161 165 166 167 169 170 171 172 173 174 175 176 178 179 180 181 182 184 187 191 192 194 197 198 199 200 201 203 204 207 208 211 216 219 220 222 223 224 225 226 228 229 230 232 235 236 237 238 239 242 243 244 246 b 247 1 1 e # 32443 xor c a 247 0 1 1 5 8 9 11 12 14 22 28 29 34 35 39 42 43 44 45 47 49 51 52 57 58 60 61 62 65 67 70 72 73 75 76 77 78 81 85 86 87 88 89 92 94 97 98 101 102 109 111 112 113 118 120 122 123 126 127 129 131 132 136 137 139 140 141 142 143 144 145 146 149 154 155 156 157 160 161 163 164 165 166 167 170 174 177 179 180 181 182 185 186 187 188 191 194 197 198 199 201 202 203 205 206 207 208 211 215 218 220 221 223 227 228 232 234 237 238 243 244 245 246 b 247 0 1 1 5 8 9 11 12 14 22 28 29 34 35 39 42 43 44 45 47 49 51 52 57 58 60 61 62 65 67 70 72 73 75 76 77 78 81 85 86 87 88 89 92 94 97 98 101 102 109 111 112 113 118 120 122 123 126 127 129 131 132 136 137 139 140 141 142 143 144 145 146 149 154 155 156 157 160 161 163 164 165 166 167 170 174 177 179 180 181 182 185 186 187 188 191 194 197 198 199 201 202 203 205 206 207 208 211 215 218 220 221 223 227 228 232 234 237 238 243 244 245 246 # 32444 xor c a 247 0 1 1 5 8 9 11 12 14 22 28 29 34 35 39 42 43 44 45 47 49 51 52 57 58 60 61 62 65 67 70 72 73 75 76 77 78 81 85 86 87 88 89 92 94 97 98 101 102 109 111 112 113 118 120 122 123 126 127 129 131 132 136 137 139 140 141 142 143 144 145 146 149 154 155 156 157 160 161 163 164 165 166 167 170 174 177 179 180 181 182 185 186 187 188 191 194 197 198 199 201 202 203 205 206 207 208 211 215 218 220 221 223 227 228 232 234 237 238 243 244 245 246 b 247 1 1 f # 32445 xor c a 247 0 1 1 3 4 7 8 9 10 11 12 15 17 18 21 23 25 28 29 32 33 35 37 40 42 44 47 48 53 54 55 56 59 61 65 66 67 68 70 71 72 73 75 77 78 83 86 88 91 92 93 96 99 100 103 105 110 111 115 116 118 124 125 126 127 128 131 133 135 136 137 141 142 143 147 148 152 153 154 155 156 157 159 160 161 164 165 167 168 170 173 174 175 178 180 183 187 188 189 190 191 192 195 197 198 201 203 204 208 211 213 214 215 218 224 225 227 229 231 232 233 237 238 243 245 b 247 0 1 1 3 4 7 8 9 10 11 12 15 17 18 21 23 25 28 29 32 33 35 37 40 42 44 47 48 53 54 55 56 59 61 65 66 67 68 70 71 72 73 75 77 78 83 86 88 91 92 93 96 99 100 103 105 110 111 115 116 118 124 125 126 127 128 131 133 135 136 137 141 142 143 147 148 152 153 154 155 156 157 159 160 161 164 165 167 168 170 173 174 175 178 180 183 187 188 189 190 191 192 195 197 198 201 203 204 208 211 213 214 215 218 224 225 227 229 231 232 233 237 238 243 245 # 32446 xor c a 247 0 1 1 3 4 7 8 9 10 11 12 15 17 18 21 23 25 28 29 32 33 35 37 40 42 44 47 48 53 54 55 56 59 61 65 66 67 68 70 71 72 73 75 77 78 83 86 88 91 92 93 96 99 100 103 105 110 111 115 116 118 124 125 126 127 128 131 133 135 136 137 141 142 143 147 148 152 153 154 155 156 157 159 160 161 164 165 167 168 170 173 174 175 178 180 183 187 188 189 190 191 192 195 197 198 201 203 204 208 211 213 214 215 218 224 225 227 229 231 232 233 237 238 243 245 b 247 1 1 3 5 6 7 9 10 13 14 15 16 20 22 23 24 30 31 34 35 36 37 38 41 42 43 44 45 46 50 51 52 53 54 56 58 61 63 66 68 69 70 73 77 78 79 82 83 85 88 90 95 98 101 102 103 106 107 109 110 117 118 122 123 124 126 128 129 130 131 133 134 135 136 137 138 141 142 143 149 150 151 154 156 163 164 166 167 168 169 173 175 181 183 185 189 190 191 192 195 198 200 202 208 210 215 219 221 225 227 234 235 237 243 245 246 # 32447 xor c a 247 1 0 e b 247 1 0 e # 32448 xor c a 247 1 0 e b 247 0 0 e # 32449 xor c a 247 1 0 e b 247 1 0 e # 32450 xor c a 247 1 0 e b 247 0 0 f # 32451 xor c a 247 1 0 e b 247 1 0 e # 32452 xor c a 247 1 0 e b 247 0 0 0 6 7 9 10 16 17 22 24 25 26 27 29 30 32 33 34 37 39 40 42 43 49 50 52 54 55 57 59 60 63 65 68 72 76 77 79 80 83 84 89 94 98 100 102 106 111 113 114 119 121 122 125 126 127 129 130 131 133 135 136 138 143 144 145 149 150 153 154 155 156 157 160 165 166 168 169 173 176 177 179 183 186 190 192 193 194 195 196 197 199 200 201 203 205 209 211 213 214 215 217 219 220 221 223 224 225 226 227 228 229 232 233 237 239 241 242 243 245 # 32453 xor c a 247 1 0 f b 247 1 0 f # 32454 xor c a 247 1 0 f b 247 0 0 e # 32455 xor c a 247 1 0 f b 247 1 0 f # 32456 xor c a 247 1 0 f b 247 0 0 f # 32457 xor c a 247 1 0 f b 247 1 0 f # 32458 xor c a 247 1 0 f b 247 0 0 0 1 2 4 5 6 8 9 14 15 16 17 22 24 28 30 31 32 33 35 37 40 42 44 45 47 49 50 51 52 53 54 55 62 64 70 71 72 75 79 86 88 90 93 94 96 97 98 101 108 109 113 118 119 120 121 125 126 128 129 130 133 134 135 140 142 146 148 149 153 154 155 156 159 163 167 169 173 174 178 179 183 186 187 188 190 191 193 194 195 199 200 201 204 205 206 207 209 210 211 216 223 226 232 234 235 238 239 241 242 246 # 32459 xor c a 247 1 0 0 4 5 6 7 8 10 12 13 14 16 18 19 20 23 24 29 33 34 37 41 42 43 44 45 47 48 50 51 52 57 58 59 60 61 63 64 70 71 73 74 77 83 85 87 88 90 95 96 97 101 103 104 105 108 109 110 112 113 116 117 120 122 124 127 133 136 139 142 146 147 148 151 152 155 156 158 160 162 164 165 166 167 171 174 175 176 177 178 179 180 182 183 184 185 187 190 193 194 196 197 200 201 202 205 207 208 209 210 211 215 217 218 219 221 223 234 237 240 242 244 b 247 1 0 0 4 5 6 7 8 10 12 13 14 16 18 19 20 23 24 29 33 34 37 41 42 43 44 45 47 48 50 51 52 57 58 59 60 61 63 64 70 71 73 74 77 83 85 87 88 90 95 96 97 101 103 104 105 108 109 110 112 113 116 117 120 122 124 127 133 136 139 142 146 147 148 151 152 155 156 158 160 162 164 165 166 167 171 174 175 176 177 178 179 180 182 183 184 185 187 190 193 194 196 197 200 201 202 205 207 208 209 210 211 215 217 218 219 221 223 234 237 240 242 244 # 32460 xor c a 247 1 0 0 4 5 6 7 8 10 12 13 14 16 18 19 20 23 24 29 33 34 37 41 42 43 44 45 47 48 50 51 52 57 58 59 60 61 63 64 70 71 73 74 77 83 85 87 88 90 95 96 97 101 103 104 105 108 109 110 112 113 116 117 120 122 124 127 133 136 139 142 146 147 148 151 152 155 156 158 160 162 164 165 166 167 171 174 175 176 177 178 179 180 182 183 184 185 187 190 193 194 196 197 200 201 202 205 207 208 209 210 211 215 217 218 219 221 223 234 237 240 242 244 b 247 0 0 e # 32461 xor c a 247 1 0 2 4 5 6 10 14 15 19 20 25 27 29 30 31 33 34 35 36 37 39 40 47 48 49 50 51 55 59 69 73 74 75 77 78 80 81 83 86 88 92 93 94 101 102 107 109 110 112 115 116 117 119 121 122 123 125 127 128 129 133 134 135 137 138 139 140 141 143 144 146 147 151 152 154 157 160 167 169 170 172 174 175 176 177 180 181 182 183 185 187 188 189 190 194 195 196 197 198 199 200 201 203 204 207 208 209 210 211 212 213 214 216 222 224 225 228 229 231 232 233 235 236 237 239 240 242 243 245 b 247 1 0 2 4 5 6 10 14 15 19 20 25 27 29 30 31 33 34 35 36 37 39 40 47 48 49 50 51 55 59 69 73 74 75 77 78 80 81 83 86 88 92 93 94 101 102 107 109 110 112 115 116 117 119 121 122 123 125 127 128 129 133 134 135 137 138 139 140 141 143 144 146 147 151 152 154 157 160 167 169 170 172 174 175 176 177 180 181 182 183 185 187 188 189 190 194 195 196 197 198 199 200 201 203 204 207 208 209 210 211 212 213 214 216 222 224 225 228 229 231 232 233 235 236 237 239 240 242 243 245 # 32462 xor c a 247 1 0 2 4 5 6 10 14 15 19 20 25 27 29 30 31 33 34 35 36 37 39 40 47 48 49 50 51 55 59 69 73 74 75 77 78 80 81 83 86 88 92 93 94 101 102 107 109 110 112 115 116 117 119 121 122 123 125 127 128 129 133 134 135 137 138 139 140 141 143 144 146 147 151 152 154 157 160 167 169 170 172 174 175 176 177 180 181 182 183 185 187 188 189 190 194 195 196 197 198 199 200 201 203 204 207 208 209 210 211 212 213 214 216 222 224 225 228 229 231 232 233 235 236 237 239 240 242 243 245 b 247 0 0 f # 32463 xor c a 247 1 0 2 3 4 5 6 8 14 15 19 25 30 31 32 33 35 36 38 40 42 43 44 46 48 52 53 54 56 58 60 61 62 63 64 66 68 69 70 73 80 81 82 83 85 96 97 98 99 100 101 103 105 107 109 110 113 115 117 119 121 122 123 126 129 130 131 134 135 136 138 140 141 145 147 149 150 151 153 155 156 158 161 163 166 173 174 175 176 178 182 183 188 193 194 195 196 197 198 202 205 209 211 215 216 217 218 219 223 226 228 229 230 233 234 235 236 237 238 240 242 244 b 247 1 0 2 3 4 5 6 8 14 15 19 25 30 31 32 33 35 36 38 40 42 43 44 46 48 52 53 54 56 58 60 61 62 63 64 66 68 69 70 73 80 81 82 83 85 96 97 98 99 100 101 103 105 107 109 110 113 115 117 119 121 122 123 126 129 130 131 134 135 136 138 140 141 145 147 149 150 151 153 155 156 158 161 163 166 173 174 175 176 178 182 183 188 193 194 195 196 197 198 202 205 209 211 215 216 217 218 219 223 226 228 229 230 233 234 235 236 237 238 240 242 244 # 32464 xor c a 247 1 0 2 3 4 5 6 8 14 15 19 25 30 31 32 33 35 36 38 40 42 43 44 46 48 52 53 54 56 58 60 61 62 63 64 66 68 69 70 73 80 81 82 83 85 96 97 98 99 100 101 103 105 107 109 110 113 115 117 119 121 122 123 126 129 130 131 134 135 136 138 140 141 145 147 149 150 151 153 155 156 158 161 163 166 173 174 175 176 178 182 183 188 193 194 195 196 197 198 202 205 209 211 215 216 217 218 219 223 226 228 229 230 233 234 235 236 237 238 240 242 244 b 247 0 0 0 3 4 5 7 8 10 14 15 16 17 23 25 26 27 28 31 32 34 35 38 40 44 46 47 51 52 53 56 59 61 62 65 66 68 69 70 71 74 76 77 78 79 82 84 86 87 91 96 98 99 100 101 102 104 105 107 108 110 112 114 115 116 117 121 126 128 129 131 132 133 134 135 136 140 142 143 144 149 150 152 153 154 157 160 161 162 163 164 165 169 170 173 175 177 180 182 183 185 186 187 188 190 191 193 194 195 196 202 208 209 210 211 213 216 219 220 222 225 228 229 230 233 234 236 238 239 241 242 244 246 # 32465 xor c a 247 1 0 e b 247 1 0 e # 32466 xor c a 247 1 0 e b 247 0 1 e # 32467 xor c a 247 1 0 e b 247 1 0 e # 32468 xor c a 247 1 0 e b 247 0 1 f # 32469 xor c a 247 1 0 e b 247 1 0 e # 32470 xor c a 247 1 0 e b 247 0 1 0 1 3 4 6 7 8 9 11 12 13 14 15 18 19 21 22 25 27 28 30 31 33 34 35 37 38 45 49 51 52 53 56 57 58 61 64 65 68 72 73 75 76 77 80 81 83 84 85 86 89 90 91 92 97 98 99 103 104 105 106 107 110 114 115 116 117 120 123 124 127 129 130 136 138 140 141 142 145 148 149 150 151 153 155 157 158 159 160 161 163 165 170 177 178 179 182 183 186 187 188 189 190 191 192 193 194 195 196 197 199 201 205 206 207 209 210 211 214 215 216 218 219 223 226 234 235 237 239 240 242 243 244 246 # 32471 xor c a 247 1 0 f b 247 1 0 f # 32472 xor c a 247 1 0 f b 247 0 1 e # 32473 xor c a 247 1 0 f b 247 1 0 f # 32474 xor c a 247 1 0 f b 247 0 1 f # 32475 xor c a 247 1 0 f b 247 1 0 f # 32476 xor c a 247 1 0 f b 247 0 1 1 5 6 9 11 14 15 16 18 20 21 22 28 29 32 33 34 35 36 42 43 44 45 47 52 54 57 58 60 62 64 65 67 69 70 71 73 76 77 78 82 86 87 89 92 94 95 98 100 101 104 105 107 108 111 112 113 117 119 120 121 123 125 126 130 135 136 137 138 139 141 142 144 145 148 149 151 153 155 156 159 160 163 165 166 168 169 172 173 175 176 177 179 180 181 182 186 195 199 200 201 203 204 205 207 208 209 210 214 215 216 217 220 224 225 228 229 231 232 234 239 240 241 # 32477 xor c a 247 1 0 1 2 4 6 9 10 12 13 14 15 16 21 24 26 28 30 34 36 37 38 39 41 44 46 50 51 55 56 59 60 61 62 63 65 69 71 72 73 76 78 80 81 83 84 85 86 87 95 98 99 102 104 105 106 107 109 111 113 114 116 117 121 122 125 131 133 136 137 140 141 144 146 147 149 152 154 155 159 161 162 163 164 165 167 168 169 170 171 172 174 175 177 178 179 180 184 187 189 190 191 192 194 207 208 210 211 212 213 215 217 218 219 220 222 224 225 226 230 231 235 237 238 241 244 246 b 247 1 0 1 2 4 6 9 10 12 13 14 15 16 21 24 26 28 30 34 36 37 38 39 41 44 46 50 51 55 56 59 60 61 62 63 65 69 71 72 73 76 78 80 81 83 84 85 86 87 95 98 99 102 104 105 106 107 109 111 113 114 116 117 121 122 125 131 133 136 137 140 141 144 146 147 149 152 154 155 159 161 162 163 164 165 167 168 169 170 171 172 174 175 177 178 179 180 184 187 189 190 191 192 194 207 208 210 211 212 213 215 217 218 219 220 222 224 225 226 230 231 235 237 238 241 244 246 # 32478 xor c a 247 1 0 1 2 4 6 9 10 12 13 14 15 16 21 24 26 28 30 34 36 37 38 39 41 44 46 50 51 55 56 59 60 61 62 63 65 69 71 72 73 76 78 80 81 83 84 85 86 87 95 98 99 102 104 105 106 107 109 111 113 114 116 117 121 122 125 131 133 136 137 140 141 144 146 147 149 152 154 155 159 161 162 163 164 165 167 168 169 170 171 172 174 175 177 178 179 180 184 187 189 190 191 192 194 207 208 210 211 212 213 215 217 218 219 220 222 224 225 226 230 231 235 237 238 241 244 246 b 247 0 1 e # 32479 xor c a 247 1 0 0 2 3 4 11 13 14 17 23 25 27 28 29 30 31 32 35 36 37 39 41 42 43 44 46 47 51 52 54 58 60 61 62 63 66 67 70 71 73 79 80 82 83 84 85 86 88 89 90 91 92 93 94 95 97 98 99 101 103 104 105 107 110 112 115 123 124 126 129 130 131 132 134 135 137 138 139 144 145 148 149 153 156 162 164 165 166 168 169 173 174 176 179 181 182 184 186 187 190 191 192 193 194 195 196 197 200 201 202 203 204 208 209 211 212 219 222 225 226 227 228 232 235 236 237 244 245 246 b 247 1 0 0 2 3 4 11 13 14 17 23 25 27 28 29 30 31 32 35 36 37 39 41 42 43 44 46 47 51 52 54 58 60 61 62 63 66 67 70 71 73 79 80 82 83 84 85 86 88 89 90 91 92 93 94 95 97 98 99 101 103 104 105 107 110 112 115 123 124 126 129 130 131 132 134 135 137 138 139 144 145 148 149 153 156 162 164 165 166 168 169 173 174 176 179 181 182 184 186 187 190 191 192 193 194 195 196 197 200 201 202 203 204 208 209 211 212 219 222 225 226 227 228 232 235 236 237 244 245 246 # 32480 xor c a 247 1 0 0 2 3 4 11 13 14 17 23 25 27 28 29 30 31 32 35 36 37 39 41 42 43 44 46 47 51 52 54 58 60 61 62 63 66 67 70 71 73 79 80 82 83 84 85 86 88 89 90 91 92 93 94 95 97 98 99 101 103 104 105 107 110 112 115 123 124 126 129 130 131 132 134 135 137 138 139 144 145 148 149 153 156 162 164 165 166 168 169 173 174 176 179 181 182 184 186 187 190 191 192 193 194 195 196 197 200 201 202 203 204 208 209 211 212 219 222 225 226 227 228 232 235 236 237 244 245 246 b 247 0 1 f # 32481 xor c a 247 1 0 2 4 6 7 9 10 14 15 19 20 24 25 26 27 29 30 31 33 34 35 36 37 38 40 41 42 45 49 52 53 54 55 57 58 59 60 62 63 65 66 68 69 70 72 73 74 76 77 78 79 80 83 84 85 88 92 95 96 99 101 104 105 106 108 111 112 113 115 116 117 121 122 123 124 126 127 128 130 133 134 135 136 137 139 141 142 143 144 146 149 150 152 153 155 158 160 162 163 165 166 168 171 174 177 178 179 180 181 184 185 189 190 191 193 194 195 196 197 201 203 207 209 211 212 213 217 218 219 220 222 225 227 228 229 232 233 235 238 239 242 244 246 b 247 1 0 2 4 6 7 9 10 14 15 19 20 24 25 26 27 29 30 31 33 34 35 36 37 38 40 41 42 45 49 52 53 54 55 57 58 59 60 62 63 65 66 68 69 70 72 73 74 76 77 78 79 80 83 84 85 88 92 95 96 99 101 104 105 106 108 111 112 113 115 116 117 121 122 123 124 126 127 128 130 133 134 135 136 137 139 141 142 143 144 146 149 150 152 153 155 158 160 162 163 165 166 168 171 174 177 178 179 180 181 184 185 189 190 191 193 194 195 196 197 201 203 207 209 211 212 213 217 218 219 220 222 225 227 228 229 232 233 235 238 239 242 244 246 # 32482 xor c a 247 1 0 2 4 6 7 9 10 14 15 19 20 24 25 26 27 29 30 31 33 34 35 36 37 38 40 41 42 45 49 52 53 54 55 57 58 59 60 62 63 65 66 68 69 70 72 73 74 76 77 78 79 80 83 84 85 88 92 95 96 99 101 104 105 106 108 111 112 113 115 116 117 121 122 123 124 126 127 128 130 133 134 135 136 137 139 141 142 143 144 146 149 150 152 153 155 158 160 162 163 165 166 168 171 174 177 178 179 180 181 184 185 189 190 191 193 194 195 196 197 201 203 207 209 211 212 213 217 218 219 220 222 225 227 228 229 232 233 235 238 239 242 244 246 b 247 0 1 1 4 5 6 7 9 13 14 15 16 17 18 19 23 24 25 26 28 29 30 32 35 38 39 41 42 43 44 45 47 51 52 53 54 55 56 62 64 68 69 70 71 72 73 74 75 76 78 80 82 83 85 86 87 89 91 95 105 107 111 114 115 116 118 122 123 126 127 128 129 134 139 141 142 143 144 146 147 148 152 157 160 164 166 171 172 173 174 175 177 178 182 183 187 192 193 195 196 201 204 210 212 213 216 217 225 229 230 231 236 237 239 243 244 245 # 32483 xor c a 247 1 0 e b 247 1 0 e # 32484 xor c a 247 1 0 e b 247 1 0 e # 32485 xor c a 247 1 0 e b 247 1 0 e # 32486 xor c a 247 1 0 e b 247 1 0 f # 32487 xor c a 247 1 0 e b 247 1 0 e # 32488 xor c a 247 1 0 e b 247 1 0 0 1 4 5 6 9 12 15 16 18 19 21 24 25 26 27 28 29 31 33 34 36 37 38 39 45 52 53 54 55 58 62 63 64 65 67 68 69 70 74 75 76 77 78 82 84 88 90 93 94 96 101 102 111 114 116 118 119 121 122 123 125 129 130 132 134 135 136 141 143 144 147 151 154 155 158 159 161 163 166 170 171 172 173 174 175 178 179 180 182 184 185 186 189 190 192 195 199 200 201 202 203 204 205 206 210 212 213 214 217 218 219 220 221 224 225 229 231 232 234 235 238 239 240 241 243 244 # 32489 xor c a 247 1 0 f b 247 1 0 f # 32490 xor c a 247 1 0 f b 247 1 0 e # 32491 xor c a 247 1 0 f b 247 1 0 f # 32492 xor c a 247 1 0 f b 247 1 0 f # 32493 xor c a 247 1 0 f b 247 1 0 f # 32494 xor c a 247 1 0 f b 247 1 0 1 2 3 4 5 8 9 10 14 18 19 20 22 23 25 28 31 34 39 44 45 46 47 49 50 51 53 54 55 56 57 58 59 62 63 64 65 68 69 72 74 75 78 79 81 82 84 87 91 92 94 95 96 98 99 100 103 104 105 106 110 111 113 115 118 119 120 122 125 128 131 133 134 136 137 142 148 153 154 155 156 159 161 162 163 164 165 169 170 171 173 176 177 178 179 180 187 189 190 191 192 194 195 199 200 201 204 205 206 207 209 212 213 214 216 221 227 228 231 233 234 236 237 238 242 245 246 # 32495 xor c a 247 1 0 2 3 4 5 9 13 14 17 19 21 22 23 27 30 31 33 36 37 41 43 44 48 53 55 57 58 59 60 61 65 66 68 73 78 80 81 82 84 85 88 90 91 95 97 98 105 106 107 110 113 114 116 118 120 121 123 126 127 129 130 131 135 137 142 143 147 148 152 153 158 159 160 161 165 166 167 168 172 173 177 180 181 182 183 187 193 194 195 196 197 201 202 204 205 208 209 211 214 215 217 218 219 227 228 229 237 239 240 241 242 b 247 1 0 2 3 4 5 9 13 14 17 19 21 22 23 27 30 31 33 36 37 41 43 44 48 53 55 57 58 59 60 61 65 66 68 73 78 80 81 82 84 85 88 90 91 95 97 98 105 106 107 110 113 114 116 118 120 121 123 126 127 129 130 131 135 137 142 143 147 148 152 153 158 159 160 161 165 166 167 168 172 173 177 180 181 182 183 187 193 194 195 196 197 201 202 204 205 208 209 211 214 215 217 218 219 227 228 229 237 239 240 241 242 # 32496 xor c a 247 1 0 2 3 4 5 9 13 14 17 19 21 22 23 27 30 31 33 36 37 41 43 44 48 53 55 57 58 59 60 61 65 66 68 73 78 80 81 82 84 85 88 90 91 95 97 98 105 106 107 110 113 114 116 118 120 121 123 126 127 129 130 131 135 137 142 143 147 148 152 153 158 159 160 161 165 166 167 168 172 173 177 180 181 182 183 187 193 194 195 196 197 201 202 204 205 208 209 211 214 215 217 218 219 227 228 229 237 239 240 241 242 b 247 1 0 e # 32497 xor c a 247 1 0 0 2 3 4 14 15 16 19 24 28 29 35 36 40 41 42 44 45 47 48 50 52 54 55 56 58 60 62 64 67 68 70 71 73 78 80 81 82 83 84 85 87 92 95 97 98 101 102 106 107 108 109 111 117 119 122 124 132 134 136 137 141 143 145 147 148 149 150 153 154 155 161 162 165 166 167 168 173 175 177 178 181 183 186 187 189 191 192 195 198 199 200 207 210 211 215 216 221 223 224 225 226 229 234 235 236 240 242 243 244 246 b 247 1 0 0 2 3 4 14 15 16 19 24 28 29 35 36 40 41 42 44 45 47 48 50 52 54 55 56 58 60 62 64 67 68 70 71 73 78 80 81 82 83 84 85 87 92 95 97 98 101 102 106 107 108 109 111 117 119 122 124 132 134 136 137 141 143 145 147 148 149 150 153 154 155 161 162 165 166 167 168 173 175 177 178 181 183 186 187 189 191 192 195 198 199 200 207 210 211 215 216 221 223 224 225 226 229 234 235 236 240 242 243 244 246 # 32498 xor c a 247 1 0 0 2 3 4 14 15 16 19 24 28 29 35 36 40 41 42 44 45 47 48 50 52 54 55 56 58 60 62 64 67 68 70 71 73 78 80 81 82 83 84 85 87 92 95 97 98 101 102 106 107 108 109 111 117 119 122 124 132 134 136 137 141 143 145 147 148 149 150 153 154 155 161 162 165 166 167 168 173 175 177 178 181 183 186 187 189 191 192 195 198 199 200 207 210 211 215 216 221 223 224 225 226 229 234 235 236 240 242 243 244 246 b 247 1 0 f # 32499 xor c a 247 1 0 0 1 3 4 5 7 8 9 10 13 17 20 22 29 30 31 34 45 46 47 48 51 52 53 55 63 67 68 69 70 71 75 78 80 81 84 85 89 90 92 96 104 105 109 110 112 114 115 116 120 121 122 123 125 127 129 131 132 133 135 136 138 141 142 144 147 148 149 151 152 153 154 155 156 158 160 163 166 168 169 170 173 174 179 181 182 183 184 186 187 188 189 191 194 195 196 199 203 208 209 216 218 223 224 225 226 227 230 231 232 235 236 237 239 241 242 243 b 247 1 0 0 1 3 4 5 7 8 9 10 13 17 20 22 29 30 31 34 45 46 47 48 51 52 53 55 63 67 68 69 70 71 75 78 80 81 84 85 89 90 92 96 104 105 109 110 112 114 115 116 120 121 122 123 125 127 129 131 132 133 135 136 138 141 142 144 147 148 149 151 152 153 154 155 156 158 160 163 166 168 169 170 173 174 179 181 182 183 184 186 187 188 189 191 194 195 196 199 203 208 209 216 218 223 224 225 226 227 230 231 232 235 236 237 239 241 242 243 # 32500 xor c a 247 1 0 0 1 3 4 5 7 8 9 10 13 17 20 22 29 30 31 34 45 46 47 48 51 52 53 55 63 67 68 69 70 71 75 78 80 81 84 85 89 90 92 96 104 105 109 110 112 114 115 116 120 121 122 123 125 127 129 131 132 133 135 136 138 141 142 144 147 148 149 151 152 153 154 155 156 158 160 163 166 168 169 170 173 174 179 181 182 183 184 186 187 188 189 191 194 195 196 199 203 208 209 216 218 223 224 225 226 227 230 231 232 235 236 237 239 241 242 243 b 247 1 0 0 4 6 9 11 14 15 17 20 22 24 25 27 28 29 30 31 35 36 39 40 41 42 45 48 49 50 52 54 55 64 65 68 69 71 72 75 79 84 86 87 88 92 94 95 101 103 106 108 112 113 120 121 122 123 126 128 129 130 131 132 133 134 135 137 141 142 144 146 148 150 151 152 153 154 158 159 162 165 167 168 169 172 174 175 180 182 183 184 185 186 189 191 194 195 198 200 202 203 207 208 209 211 212 215 216 222 224 225 227 229 233 234 235 238 241 245 # 32501 xor c a 247 1 0 e b 247 1 0 e # 32502 xor c a 247 1 0 e b 247 1 1 e # 32503 xor c a 247 1 0 e b 247 1 0 e # 32504 xor c a 247 1 0 e b 247 1 1 f # 32505 xor c a 247 1 0 e b 247 1 0 e # 32506 xor c a 247 1 0 e b 247 1 1 5 7 8 11 12 14 15 17 18 22 23 24 25 27 29 33 34 35 36 38 40 41 43 46 47 49 50 51 53 54 55 56 57 58 60 62 64 65 66 67 69 72 74 75 76 77 78 79 81 82 83 84 86 87 89 90 92 93 94 95 97 98 99 101 102 105 108 109 112 113 114 117 119 124 128 134 135 137 138 139 140 143 147 148 150 152 154 155 160 162 163 164 165 166 167 168 169 170 171 172 177 178 181 182 183 184 185 186 189 190 193 196 197 200 203 205 206 207 209 211 212 214 215 219 223 227 232 233 234 237 239 240 241 242 243 # 32507 xor c a 247 1 0 f b 247 1 0 f # 32508 xor c a 247 1 0 f b 247 1 1 e # 32509 xor c a 247 1 0 f b 247 1 0 f # 32510 xor c a 247 1 0 f b 247 1 1 f # 32511 xor c a 247 1 0 f b 247 1 0 f # 32512 xor c a 247 1 0 f b 247 1 1 0 1 2 3 5 6 10 12 14 16 20 23 26 27 34 35 37 41 42 46 48 49 51 53 54 57 59 60 61 62 65 66 68 70 73 74 77 78 80 83 88 89 91 92 98 101 102 103 105 107 109 110 117 118 120 123 125 126 127 128 129 130 133 135 138 139 141 143 144 150 151 154 155 157 158 161 162 163 165 166 167 169 170 171 174 176 177 178 179 181 182 183 185 186 187 190 191 193 194 195 196 197 198 200 201 204 205 206 207 208 209 210 212 213 214 217 218 219 221 222 224 225 228 229 230 231 232 233 234 235 236 237 239 244 # 32513 xor c a 247 1 0 1 7 10 11 13 16 21 22 26 27 29 31 32 33 37 38 41 43 44 45 46 47 51 55 57 59 60 61 63 65 67 71 78 80 83 86 87 90 92 96 97 100 104 105 110 111 112 113 114 117 119 120 121 123 125 128 129 130 131 133 134 136 139 140 142 143 145 146 147 148 150 151 154 158 159 160 162 165 169 174 177 179 181 182 186 188 189 191 194 195 196 198 203 207 210 211 215 216 219 220 221 224 226 227 228 229 233 235 239 240 244 245 b 247 1 0 1 7 10 11 13 16 21 22 26 27 29 31 32 33 37 38 41 43 44 45 46 47 51 55 57 59 60 61 63 65 67 71 78 80 83 86 87 90 92 96 97 100 104 105 110 111 112 113 114 117 119 120 121 123 125 128 129 130 131 133 134 136 139 140 142 143 145 146 147 148 150 151 154 158 159 160 162 165 169 174 177 179 181 182 186 188 189 191 194 195 196 198 203 207 210 211 215 216 219 220 221 224 226 227 228 229 233 235 239 240 244 245 # 32514 xor c a 247 1 0 1 7 10 11 13 16 21 22 26 27 29 31 32 33 37 38 41 43 44 45 46 47 51 55 57 59 60 61 63 65 67 71 78 80 83 86 87 90 92 96 97 100 104 105 110 111 112 113 114 117 119 120 121 123 125 128 129 130 131 133 134 136 139 140 142 143 145 146 147 148 150 151 154 158 159 160 162 165 169 174 177 179 181 182 186 188 189 191 194 195 196 198 203 207 210 211 215 216 219 220 221 224 226 227 228 229 233 235 239 240 244 245 b 247 1 1 e # 32515 xor c a 247 1 0 0 1 4 6 15 21 22 24 25 26 28 33 34 37 38 41 42 43 46 47 50 51 52 53 55 56 57 58 62 63 65 67 68 73 79 80 82 83 84 85 87 88 92 97 102 106 107 108 117 122 124 126 127 129 133 134 135 137 138 139 143 145 147 150 151 152 153 154 155 156 157 158 160 161 162 164 165 168 169 171 173 174 175 177 179 182 185 189 192 195 196 197 199 200 202 203 206 207 210 211 212 215 217 219 220 221 222 223 224 226 227 229 230 231 234 235 236 237 240 243 244 245 246 b 247 1 0 0 1 4 6 15 21 22 24 25 26 28 33 34 37 38 41 42 43 46 47 50 51 52 53 55 56 57 58 62 63 65 67 68 73 79 80 82 83 84 85 87 88 92 97 102 106 107 108 117 122 124 126 127 129 133 134 135 137 138 139 143 145 147 150 151 152 153 154 155 156 157 158 160 161 162 164 165 168 169 171 173 174 175 177 179 182 185 189 192 195 196 197 199 200 202 203 206 207 210 211 212 215 217 219 220 221 222 223 224 226 227 229 230 231 234 235 236 237 240 243 244 245 246 # 32516 xor c a 247 1 0 0 1 4 6 15 21 22 24 25 26 28 33 34 37 38 41 42 43 46 47 50 51 52 53 55 56 57 58 62 63 65 67 68 73 79 80 82 83 84 85 87 88 92 97 102 106 107 108 117 122 124 126 127 129 133 134 135 137 138 139 143 145 147 150 151 152 153 154 155 156 157 158 160 161 162 164 165 168 169 171 173 174 175 177 179 182 185 189 192 195 196 197 199 200 202 203 206 207 210 211 212 215 217 219 220 221 222 223 224 226 227 229 230 231 234 235 236 237 240 243 244 245 246 b 247 1 1 f # 32517 xor c a 247 1 0 0 1 2 3 5 6 8 10 11 13 17 20 22 25 26 27 28 29 30 31 32 33 42 43 47 49 53 54 56 57 59 60 63 64 65 66 70 71 72 73 74 79 81 84 86 87 92 93 94 95 96 97 101 102 104 105 106 107 108 110 113 114 115 117 118 122 123 125 126 128 129 132 134 135 137 138 147 148 153 155 156 157 158 160 162 163 164 166 172 173 174 180 185 186 188 189 190 191 194 196 198 200 202 203 205 209 210 211 215 216 218 219 221 223 228 229 231 234 236 238 240 241 244 246 b 247 1 0 0 1 2 3 5 6 8 10 11 13 17 20 22 25 26 27 28 29 30 31 32 33 42 43 47 49 53 54 56 57 59 60 63 64 65 66 70 71 72 73 74 79 81 84 86 87 92 93 94 95 96 97 101 102 104 105 106 107 108 110 113 114 115 117 118 122 123 125 126 128 129 132 134 135 137 138 147 148 153 155 156 157 158 160 162 163 164 166 172 173 174 180 185 186 188 189 190 191 194 196 198 200 202 203 205 209 210 211 215 216 218 219 221 223 228 229 231 234 236 238 240 241 244 246 # 32518 xor c a 247 1 0 0 1 2 3 5 6 8 10 11 13 17 20 22 25 26 27 28 29 30 31 32 33 42 43 47 49 53 54 56 57 59 60 63 64 65 66 70 71 72 73 74 79 81 84 86 87 92 93 94 95 96 97 101 102 104 105 106 107 108 110 113 114 115 117 118 122 123 125 126 128 129 132 134 135 137 138 147 148 153 155 156 157 158 160 162 163 164 166 172 173 174 180 185 186 188 189 190 191 194 196 198 200 202 203 205 209 210 211 215 216 218 219 221 223 228 229 231 234 236 238 240 241 244 246 b 247 1 1 0 1 2 3 4 5 7 8 10 13 14 15 17 18 19 20 21 22 24 29 32 35 36 39 40 45 47 48 49 51 52 55 56 57 60 62 64 65 67 69 70 73 74 75 76 77 79 80 81 82 83 86 87 88 91 92 93 96 101 102 104 105 107 108 109 110 111 112 113 114 115 117 118 120 122 123 128 130 131 133 137 142 145 147 150 153 155 158 159 160 161 162 166 167 171 172 174 176 182 183 186 188 189 191 195 196 198 200 202 203 205 210 211 212 213 214 215 219 221 222 223 225 226 229 230 231 232 233 234 236 237 238 239 241 242 244 # 32519 xor c a 247 1 1 e b 247 1 1 e # 32520 xor c a 247 1 1 e b 247 0 0 e # 32521 xor c a 247 1 1 e b 247 1 1 e # 32522 xor c a 247 1 1 e b 247 0 0 f # 32523 xor c a 247 1 1 e b 247 1 1 e # 32524 xor c a 247 1 1 e b 247 0 0 1 2 5 6 7 9 10 11 18 19 20 21 22 23 25 26 27 28 30 33 39 43 44 45 46 49 52 57 64 65 66 71 72 73 74 76 77 78 79 80 81 83 90 91 92 95 99 100 102 106 107 109 110 111 112 114 115 116 117 122 126 127 132 134 135 136 137 138 139 141 142 145 147 148 149 152 159 160 161 164 165 167 168 170 173 175 177 178 181 185 186 187 190 192 193 194 195 196 198 199 200 202 206 207 209 210 211 212 215 218 219 225 231 232 235 236 238 239 240 241 242 243 245 246 # 32525 xor c a 247 1 1 f b 247 1 1 f # 32526 xor c a 247 1 1 f b 247 0 0 e # 32527 xor c a 247 1 1 f b 247 1 1 f # 32528 xor c a 247 1 1 f b 247 0 0 f # 32529 xor c a 247 1 1 f b 247 1 1 f # 32530 xor c a 247 1 1 f b 247 0 0 0 3 4 5 6 9 10 11 13 16 19 21 24 26 29 33 34 35 36 37 40 41 44 47 48 49 52 53 58 59 62 63 64 65 66 67 68 69 70 71 72 75 76 77 78 79 80 82 86 88 89 97 98 100 101 103 106 107 109 110 111 112 113 118 121 122 123 125 126 128 129 130 131 132 133 134 137 139 140 141 142 143 144 146 147 148 149 152 153 154 155 156 157 159 160 162 163 165 167 168 171 183 186 192 195 197 198 203 205 206 207 212 213 218 219 220 223 224 225 226 230 231 232 233 236 239 240 245 246 # 32531 xor c a 247 1 1 5 10 11 12 18 22 26 27 29 31 33 35 36 37 38 40 41 42 43 47 48 52 53 55 58 59 60 62 65 66 67 68 69 71 72 76 77 79 80 82 83 86 87 88 91 92 94 95 97 98 99 100 102 103 108 109 110 111 113 114 115 120 121 122 123 125 126 128 129 131 132 134 138 141 144 148 149 151 152 155 160 161 163 167 168 172 173 174 175 176 177 178 179 180 184 185 189 190 192 196 197 198 199 200 203 204 205 206 207 208 209 210 211 217 218 220 221 222 223 225 226 228 229 231 234 241 246 b 247 1 1 5 10 11 12 18 22 26 27 29 31 33 35 36 37 38 40 41 42 43 47 48 52 53 55 58 59 60 62 65 66 67 68 69 71 72 76 77 79 80 82 83 86 87 88 91 92 94 95 97 98 99 100 102 103 108 109 110 111 113 114 115 120 121 122 123 125 126 128 129 131 132 134 138 141 144 148 149 151 152 155 160 161 163 167 168 172 173 174 175 176 177 178 179 180 184 185 189 190 192 196 197 198 199 200 203 204 205 206 207 208 209 210 211 217 218 220 221 222 223 225 226 228 229 231 234 241 246 # 32532 xor c a 247 1 1 5 10 11 12 18 22 26 27 29 31 33 35 36 37 38 40 41 42 43 47 48 52 53 55 58 59 60 62 65 66 67 68 69 71 72 76 77 79 80 82 83 86 87 88 91 92 94 95 97 98 99 100 102 103 108 109 110 111 113 114 115 120 121 122 123 125 126 128 129 131 132 134 138 141 144 148 149 151 152 155 160 161 163 167 168 172 173 174 175 176 177 178 179 180 184 185 189 190 192 196 197 198 199 200 203 204 205 206 207 208 209 210 211 217 218 220 221 222 223 225 226 228 229 231 234 241 246 b 247 0 0 e # 32533 xor c a 247 1 1 3 4 6 7 9 10 11 13 14 16 18 20 24 26 28 30 36 37 40 41 42 44 45 47 50 52 54 55 56 57 58 59 60 61 62 66 71 75 77 78 79 81 86 89 90 92 93 94 97 98 100 104 105 109 111 112 113 114 115 117 120 122 123 130 137 139 140 141 147 149 152 153 157 158 159 161 162 163 166 171 173 175 177 179 180 181 183 184 185 186 188 189 190 191 193 194 195 197 199 202 209 211 214 217 219 222 223 225 226 227 229 230 231 235 236 239 242 243 244 245 246 b 247 1 1 3 4 6 7 9 10 11 13 14 16 18 20 24 26 28 30 36 37 40 41 42 44 45 47 50 52 54 55 56 57 58 59 60 61 62 66 71 75 77 78 79 81 86 89 90 92 93 94 97 98 100 104 105 109 111 112 113 114 115 117 120 122 123 130 137 139 140 141 147 149 152 153 157 158 159 161 162 163 166 171 173 175 177 179 180 181 183 184 185 186 188 189 190 191 193 194 195 197 199 202 209 211 214 217 219 222 223 225 226 227 229 230 231 235 236 239 242 243 244 245 246 # 32534 xor c a 247 1 1 3 4 6 7 9 10 11 13 14 16 18 20 24 26 28 30 36 37 40 41 42 44 45 47 50 52 54 55 56 57 58 59 60 61 62 66 71 75 77 78 79 81 86 89 90 92 93 94 97 98 100 104 105 109 111 112 113 114 115 117 120 122 123 130 137 139 140 141 147 149 152 153 157 158 159 161 162 163 166 171 173 175 177 179 180 181 183 184 185 186 188 189 190 191 193 194 195 197 199 202 209 211 214 217 219 222 223 225 226 227 229 230 231 235 236 239 242 243 244 245 246 b 247 0 0 f # 32535 xor c a 247 1 1 4 5 7 9 10 13 17 19 21 25 27 28 30 31 32 35 38 39 43 45 49 51 52 53 55 57 58 61 63 66 67 68 70 72 77 78 79 82 84 90 93 95 98 100 101 102 103 106 109 111 112 113 114 115 122 123 127 128 132 136 138 139 140 141 142 143 144 145 146 148 150 152 153 155 157 158 159 160 161 163 165 167 168 169 170 171 172 173 174 175 177 181 182 184 187 188 189 190 191 192 194 204 210 211 213 214 224 227 229 231 232 234 235 236 239 240 242 245 b 247 1 1 4 5 7 9 10 13 17 19 21 25 27 28 30 31 32 35 38 39 43 45 49 51 52 53 55 57 58 61 63 66 67 68 70 72 77 78 79 82 84 90 93 95 98 100 101 102 103 106 109 111 112 113 114 115 122 123 127 128 132 136 138 139 140 141 142 143 144 145 146 148 150 152 153 155 157 158 159 160 161 163 165 167 168 169 170 171 172 173 174 175 177 181 182 184 187 188 189 190 191 192 194 204 210 211 213 214 224 227 229 231 232 234 235 236 239 240 242 245 # 32536 xor c a 247 1 1 4 5 7 9 10 13 17 19 21 25 27 28 30 31 32 35 38 39 43 45 49 51 52 53 55 57 58 61 63 66 67 68 70 72 77 78 79 82 84 90 93 95 98 100 101 102 103 106 109 111 112 113 114 115 122 123 127 128 132 136 138 139 140 141 142 143 144 145 146 148 150 152 153 155 157 158 159 160 161 163 165 167 168 169 170 171 172 173 174 175 177 181 182 184 187 188 189 190 191 192 194 204 210 211 213 214 224 227 229 231 232 234 235 236 239 240 242 245 b 247 0 0 0 1 2 3 5 8 10 11 12 13 14 15 16 18 19 21 24 25 26 27 29 31 32 34 35 39 40 42 43 45 47 50 53 54 55 56 57 58 59 62 64 65 67 69 70 71 73 74 79 83 85 86 87 88 89 90 93 95 96 97 98 101 103 104 105 109 110 111 112 119 120 125 131 133 134 135 136 137 139 140 142 143 146 147 150 153 154 155 156 157 158 165 167 168 169 170 171 172 173 176 180 181 182 184 185 186 187 188 189 190 191 195 197 198 200 201 202 203 208 210 211 213 214 216 217 220 225 227 228 229 230 231 232 233 237 238 241 243 244 # 32537 xor c a 247 1 1 e b 247 1 1 e # 32538 xor c a 247 1 1 e b 247 0 1 e # 32539 xor c a 247 1 1 e b 247 1 1 e # 32540 xor c a 247 1 1 e b 247 0 1 f # 32541 xor c a 247 1 1 e b 247 1 1 e # 32542 xor c a 247 1 1 e b 247 0 1 3 5 7 10 11 13 14 16 17 18 19 22 23 24 30 31 32 34 35 36 38 40 41 44 51 52 54 56 57 58 59 61 62 64 67 68 69 72 74 76 78 79 82 84 86 89 91 96 101 102 105 106 107 108 109 110 113 114 115 119 121 122 123 125 127 129 131 135 137 138 140 141 142 143 146 147 148 154 155 158 159 160 162 164 165 167 168 169 171 172 173 174 177 178 182 183 184 185 187 188 190 191 197 200 205 206 207 208 209 211 214 215 216 218 219 221 222 223 227 231 232 240 241 245 # 32543 xor c a 247 1 1 f b 247 1 1 f # 32544 xor c a 247 1 1 f b 247 0 1 e # 32545 xor c a 247 1 1 f b 247 1 1 f # 32546 xor c a 247 1 1 f b 247 0 1 f # 32547 xor c a 247 1 1 f b 247 1 1 f # 32548 xor c a 247 1 1 f b 247 0 1 4 5 7 9 10 11 12 15 17 19 21 24 26 27 28 29 31 32 35 39 42 44 45 48 49 51 53 60 63 64 66 68 72 73 75 76 77 79 81 82 83 84 92 93 95 101 104 105 106 107 108 112 115 118 119 120 123 125 126 130 131 134 135 137 138 139 146 147 148 149 150 151 154 155 157 159 161 163 166 171 172 173 174 177 180 184 190 191 195 196 200 201 206 207 209 210 214 215 217 219 223 224 225 226 227 229 231 232 236 238 239 241 245 # 32549 xor c a 247 1 1 0 1 2 5 6 8 9 14 16 18 20 21 23 27 33 34 35 36 37 39 40 43 44 45 47 49 50 52 58 59 60 63 65 66 68 69 70 77 78 80 81 82 83 85 86 87 89 90 93 96 97 98 99 100 101 104 105 106 109 110 112 114 115 117 118 119 120 126 134 137 139 142 144 145 148 149 151 155 156 157 161 162 163 165 166 168 172 177 178 180 181 189 190 191 193 194 195 196 197 199 202 203 204 207 211 215 216 223 228 229 230 233 235 237 238 239 240 242 244 245 246 b 247 1 1 0 1 2 5 6 8 9 14 16 18 20 21 23 27 33 34 35 36 37 39 40 43 44 45 47 49 50 52 58 59 60 63 65 66 68 69 70 77 78 80 81 82 83 85 86 87 89 90 93 96 97 98 99 100 101 104 105 106 109 110 112 114 115 117 118 119 120 126 134 137 139 142 144 145 148 149 151 155 156 157 161 162 163 165 166 168 172 177 178 180 181 189 190 191 193 194 195 196 197 199 202 203 204 207 211 215 216 223 228 229 230 233 235 237 238 239 240 242 244 245 246 # 32550 xor c a 247 1 1 0 1 2 5 6 8 9 14 16 18 20 21 23 27 33 34 35 36 37 39 40 43 44 45 47 49 50 52 58 59 60 63 65 66 68 69 70 77 78 80 81 82 83 85 86 87 89 90 93 96 97 98 99 100 101 104 105 106 109 110 112 114 115 117 118 119 120 126 134 137 139 142 144 145 148 149 151 155 156 157 161 162 163 165 166 168 172 177 178 180 181 189 190 191 193 194 195 196 197 199 202 203 204 207 211 215 216 223 228 229 230 233 235 237 238 239 240 242 244 245 246 b 247 0 1 e # 32551 xor c a 247 1 1 0 4 6 8 9 10 11 12 13 14 16 17 19 22 26 28 29 31 33 34 37 38 39 40 41 42 43 45 46 48 52 54 55 56 57 59 60 61 64 67 70 71 72 73 74 76 77 78 79 83 84 86 87 88 91 93 94 99 100 102 103 112 113 115 116 119 120 121 122 124 125 126 129 131 133 134 137 138 139 141 143 144 145 146 147 150 154 158 161 163 164 169 172 175 182 183 184 186 187 188 189 192 193 195 202 204 208 209 210 212 214 215 216 217 218 219 220 225 230 231 232 233 235 241 246 b 247 1 1 0 4 6 8 9 10 11 12 13 14 16 17 19 22 26 28 29 31 33 34 37 38 39 40 41 42 43 45 46 48 52 54 55 56 57 59 60 61 64 67 70 71 72 73 74 76 77 78 79 83 84 86 87 88 91 93 94 99 100 102 103 112 113 115 116 119 120 121 122 124 125 126 129 131 133 134 137 138 139 141 143 144 145 146 147 150 154 158 161 163 164 169 172 175 182 183 184 186 187 188 189 192 193 195 202 204 208 209 210 212 214 215 216 217 218 219 220 225 230 231 232 233 235 241 246 # 32552 xor c a 247 1 1 0 4 6 8 9 10 11 12 13 14 16 17 19 22 26 28 29 31 33 34 37 38 39 40 41 42 43 45 46 48 52 54 55 56 57 59 60 61 64 67 70 71 72 73 74 76 77 78 79 83 84 86 87 88 91 93 94 99 100 102 103 112 113 115 116 119 120 121 122 124 125 126 129 131 133 134 137 138 139 141 143 144 145 146 147 150 154 158 161 163 164 169 172 175 182 183 184 186 187 188 189 192 193 195 202 204 208 209 210 212 214 215 216 217 218 219 220 225 230 231 232 233 235 241 246 b 247 0 1 f # 32553 xor c a 247 1 1 2 5 6 7 9 10 11 12 14 15 17 18 22 24 25 26 27 30 31 32 33 36 38 39 40 41 42 43 46 47 49 54 55 56 57 58 61 62 64 66 69 72 76 79 80 81 84 87 91 95 99 100 101 103 105 106 107 110 112 115 116 117 118 120 125 127 129 130 132 134 135 137 138 139 141 142 150 155 157 158 159 161 162 165 167 168 170 173 175 177 180 182 184 188 190 193 194 195 196 197 198 199 201 205 207 212 213 214 218 220 221 222 224 227 230 231 233 235 236 240 241 242 243 244 245 b 247 1 1 2 5 6 7 9 10 11 12 14 15 17 18 22 24 25 26 27 30 31 32 33 36 38 39 40 41 42 43 46 47 49 54 55 56 57 58 61 62 64 66 69 72 76 79 80 81 84 87 91 95 99 100 101 103 105 106 107 110 112 115 116 117 118 120 125 127 129 130 132 134 135 137 138 139 141 142 150 155 157 158 159 161 162 165 167 168 170 173 175 177 180 182 184 188 190 193 194 195 196 197 198 199 201 205 207 212 213 214 218 220 221 222 224 227 230 231 233 235 236 240 241 242 243 244 245 # 32554 xor c a 247 1 1 2 5 6 7 9 10 11 12 14 15 17 18 22 24 25 26 27 30 31 32 33 36 38 39 40 41 42 43 46 47 49 54 55 56 57 58 61 62 64 66 69 72 76 79 80 81 84 87 91 95 99 100 101 103 105 106 107 110 112 115 116 117 118 120 125 127 129 130 132 134 135 137 138 139 141 142 150 155 157 158 159 161 162 165 167 168 170 173 175 177 180 182 184 188 190 193 194 195 196 197 198 199 201 205 207 212 213 214 218 220 221 222 224 227 230 231 233 235 236 240 241 242 243 244 245 b 247 0 1 0 2 5 6 7 12 13 14 15 16 17 18 19 20 23 25 26 28 31 32 34 35 37 38 39 41 42 44 45 47 48 51 52 53 54 56 60 61 63 66 67 71 78 80 85 86 87 93 95 96 97 101 102 103 107 108 112 113 114 115 116 117 118 120 122 125 126 128 135 136 137 138 140 142 143 145 146 147 148 149 151 153 154 156 157 158 159 163 164 165 166 168 169 170 171 173 175 176 178 179 180 181 184 186 187 190 191 192 194 197 198 200 201 202 204 207 208 209 210 211 212 214 215 216 217 218 221 223 227 234 236 237 240 243 246 # 32555 xor c a 247 1 1 e b 247 1 1 e # 32556 xor c a 247 1 1 e b 247 1 0 e # 32557 xor c a 247 1 1 e b 247 1 1 e # 32558 xor c a 247 1 1 e b 247 1 0 f # 32559 xor c a 247 1 1 e b 247 1 1 e # 32560 xor c a 247 1 1 e b 247 1 0 1 2 5 6 9 10 14 16 17 20 22 25 29 31 32 35 37 39 40 41 45 46 47 48 49 51 53 54 56 58 61 63 66 74 81 83 84 87 88 89 91 92 94 96 97 98 101 102 105 106 107 111 113 115 116 117 118 119 120 121 122 123 125 126 128 129 130 131 132 133 136 139 140 141 142 148 149 151 152 153 156 158 161 163 164 165 167 170 174 175 176 177 179 180 183 185 190 191 194 197 199 201 203 205 208 209 210 211 214 215 218 219 220 221 222 224 226 230 231 234 235 238 240 241 246 # 32561 xor c a 247 1 1 f b 247 1 1 f # 32562 xor c a 247 1 1 f b 247 1 0 e # 32563 xor c a 247 1 1 f b 247 1 1 f # 32564 xor c a 247 1 1 f b 247 1 0 f # 32565 xor c a 247 1 1 f b 247 1 1 f # 32566 xor c a 247 1 1 f b 247 1 0 0 1 2 3 4 5 6 8 11 12 14 15 16 21 23 24 26 27 28 30 31 32 33 34 35 36 37 38 40 43 44 48 49 50 52 54 56 57 59 62 65 66 68 69 70 71 75 76 77 80 82 83 84 85 87 88 89 90 91 93 95 96 98 99 101 104 105 107 108 109 111 113 114 116 117 120 123 125 126 128 129 133 134 136 139 142 143 149 150 155 156 157 159 160 165 166 167 169 170 175 176 181 182 185 188 191 192 194 197 199 200 201 208 210 213 214 215 216 217 218 219 224 226 229 230 231 232 236 238 239 240 241 242 244 245 # 32567 xor c a 247 1 1 1 6 7 17 18 19 22 25 27 28 29 30 32 35 36 38 39 43 44 45 48 55 57 59 60 64 65 68 73 76 77 79 81 82 83 84 89 91 97 98 102 103 106 110 113 117 119 120 121 122 130 135 136 138 139 140 141 143 144 145 149 153 155 157 161 162 163 173 178 179 183 185 188 189 190 191 192 193 194 199 200 201 202 206 207 208 209 210 211 212 214 216 218 219 220 221 222 223 224 226 227 228 230 233 234 235 236 238 239 241 242 244 b 247 1 1 1 6 7 17 18 19 22 25 27 28 29 30 32 35 36 38 39 43 44 45 48 55 57 59 60 64 65 68 73 76 77 79 81 82 83 84 89 91 97 98 102 103 106 110 113 117 119 120 121 122 130 135 136 138 139 140 141 143 144 145 149 153 155 157 161 162 163 173 178 179 183 185 188 189 190 191 192 193 194 199 200 201 202 206 207 208 209 210 211 212 214 216 218 219 220 221 222 223 224 226 227 228 230 233 234 235 236 238 239 241 242 244 # 32568 xor c a 247 1 1 1 6 7 17 18 19 22 25 27 28 29 30 32 35 36 38 39 43 44 45 48 55 57 59 60 64 65 68 73 76 77 79 81 82 83 84 89 91 97 98 102 103 106 110 113 117 119 120 121 122 130 135 136 138 139 140 141 143 144 145 149 153 155 157 161 162 163 173 178 179 183 185 188 189 190 191 192 193 194 199 200 201 202 206 207 208 209 210 211 212 214 216 218 219 220 221 222 223 224 226 227 228 230 233 234 235 236 238 239 241 242 244 b 247 1 0 e # 32569 xor c a 247 1 1 0 1 3 4 5 8 9 11 12 13 18 19 22 23 24 26 27 32 33 35 36 37 40 41 44 45 46 47 48 49 50 53 55 57 58 59 66 67 71 72 73 75 78 80 81 82 85 87 88 92 93 95 98 100 103 105 107 112 113 116 117 119 120 121 123 125 126 127 129 131 133 134 136 139 145 146 152 153 157 159 160 162 163 167 168 169 170 174 175 176 177 180 181 182 183 187 189 190 191 194 196 199 202 204 205 207 215 217 218 219 220 222 223 224 225 227 229 230 233 234 238 239 240 243 245 246 b 247 1 1 0 1 3 4 5 8 9 11 12 13 18 19 22 23 24 26 27 32 33 35 36 37 40 41 44 45 46 47 48 49 50 53 55 57 58 59 66 67 71 72 73 75 78 80 81 82 85 87 88 92 93 95 98 100 103 105 107 112 113 116 117 119 120 121 123 125 126 127 129 131 133 134 136 139 145 146 152 153 157 159 160 162 163 167 168 169 170 174 175 176 177 180 181 182 183 187 189 190 191 194 196 199 202 204 205 207 215 217 218 219 220 222 223 224 225 227 229 230 233 234 238 239 240 243 245 246 # 32570 xor c a 247 1 1 0 1 3 4 5 8 9 11 12 13 18 19 22 23 24 26 27 32 33 35 36 37 40 41 44 45 46 47 48 49 50 53 55 57 58 59 66 67 71 72 73 75 78 80 81 82 85 87 88 92 93 95 98 100 103 105 107 112 113 116 117 119 120 121 123 125 126 127 129 131 133 134 136 139 145 146 152 153 157 159 160 162 163 167 168 169 170 174 175 176 177 180 181 182 183 187 189 190 191 194 196 199 202 204 205 207 215 217 218 219 220 222 223 224 225 227 229 230 233 234 238 239 240 243 245 246 b 247 1 0 f # 32571 xor c a 247 1 1 0 1 3 4 5 7 8 11 14 15 16 18 19 20 22 23 24 27 28 30 31 37 38 43 45 46 49 52 55 57 58 61 62 63 64 71 73 75 76 80 82 83 84 86 89 91 92 94 95 96 97 98 103 105 106 107 108 109 111 113 114 117 120 121 123 125 128 130 132 134 136 137 139 140 142 145 147 148 149 151 152 154 158 160 161 162 163 165 166 172 177 178 180 183 184 185 190 191 194 195 197 198 199 200 202 203 206 207 209 210 215 217 221 223 226 227 228 229 231 232 234 236 237 240 242 243 246 b 247 1 1 0 1 3 4 5 7 8 11 14 15 16 18 19 20 22 23 24 27 28 30 31 37 38 43 45 46 49 52 55 57 58 61 62 63 64 71 73 75 76 80 82 83 84 86 89 91 92 94 95 96 97 98 103 105 106 107 108 109 111 113 114 117 120 121 123 125 128 130 132 134 136 137 139 140 142 145 147 148 149 151 152 154 158 160 161 162 163 165 166 172 177 178 180 183 184 185 190 191 194 195 197 198 199 200 202 203 206 207 209 210 215 217 221 223 226 227 228 229 231 232 234 236 237 240 242 243 246 # 32572 xor c a 247 1 1 0 1 3 4 5 7 8 11 14 15 16 18 19 20 22 23 24 27 28 30 31 37 38 43 45 46 49 52 55 57 58 61 62 63 64 71 73 75 76 80 82 83 84 86 89 91 92 94 95 96 97 98 103 105 106 107 108 109 111 113 114 117 120 121 123 125 128 130 132 134 136 137 139 140 142 145 147 148 149 151 152 154 158 160 161 162 163 165 166 172 177 178 180 183 184 185 190 191 194 195 197 198 199 200 202 203 206 207 209 210 215 217 221 223 226 227 228 229 231 232 234 236 237 240 242 243 246 b 247 1 0 0 4 6 7 8 9 10 12 14 15 18 19 23 26 28 31 32 34 35 36 37 38 40 41 42 43 45 46 47 50 51 52 53 54 57 61 67 68 71 79 80 81 82 83 84 85 86 88 90 94 100 101 105 106 107 108 109 110 111 112 113 115 116 119 120 124 126 128 130 131 133 135 136 137 138 139 140 141 143 144 145 146 147 150 152 154 155 156 158 159 160 161 162 163 164 165 166 168 171 173 174 175 176 177 178 182 184 188 191 192 193 194 195 196 199 200 202 205 207 208 209 213 214 218 221 224 225 227 230 232 233 234 236 237 239 240 246 # 32573 xor c a 247 1 1 e b 247 1 1 e # 32574 xor c a 247 1 1 e b 247 1 1 e # 32575 xor c a 247 1 1 e b 247 1 1 e # 32576 xor c a 247 1 1 e b 247 1 1 f # 32577 xor c a 247 1 1 e b 247 1 1 e # 32578 xor c a 247 1 1 e b 247 1 1 0 1 6 7 9 10 15 19 22 26 27 28 30 31 36 40 42 44 46 48 50 52 53 54 57 65 66 80 83 87 88 89 93 94 95 96 97 98 100 104 105 106 112 113 117 120 121 124 126 127 128 129 130 131 139 141 144 145 148 149 151 153 158 161 163 165 166 167 168 170 174 178 180 185 186 188 189 190 192 193 194 196 197 199 203 204 205 210 214 215 216 219 221 223 224 227 231 232 233 234 236 238 239 243 244 245 246 # 32579 xor c a 247 1 1 f b 247 1 1 f # 32580 xor c a 247 1 1 f b 247 1 1 e # 32581 xor c a 247 1 1 f b 247 1 1 f # 32582 xor c a 247 1 1 f b 247 1 1 f # 32583 xor c a 247 1 1 f b 247 1 1 f # 32584 xor c a 247 1 1 f b 247 1 1 0 2 3 4 5 6 7 8 10 11 17 18 19 20 23 24 25 26 27 28 29 38 41 43 47 53 54 56 57 58 59 60 64 66 68 69 70 72 76 78 80 92 94 95 96 97 99 102 104 108 110 112 114 116 118 120 122 123 124 125 126 127 131 132 136 137 138 141 142 144 145 146 147 148 149 150 151 152 153 155 159 161 162 166 168 169 170 173 180 183 184 185 186 188 194 195 196 198 199 201 202 203 207 208 211 212 213 214 215 220 221 222 223 225 226 227 229 230 233 235 238 239 240 242 243 # 32585 xor c a 247 1 1 0 1 2 4 7 8 9 11 15 16 18 19 22 29 30 32 36 37 39 40 41 43 44 45 46 47 49 51 55 58 59 61 63 65 69 70 77 79 80 81 83 84 85 86 89 93 95 97 98 99 100 101 106 107 109 110 112 115 116 117 120 121 122 126 127 129 130 131 132 136 137 140 143 145 148 149 150 154 155 156 157 158 159 160 161 162 163 167 169 172 173 174 178 181 182 183 186 187 189 190 191 192 193 194 195 197 198 200 202 203 204 205 210 212 216 217 220 225 228 230 231 232 233 235 237 239 240 241 243 b 247 1 1 0 1 2 4 7 8 9 11 15 16 18 19 22 29 30 32 36 37 39 40 41 43 44 45 46 47 49 51 55 58 59 61 63 65 69 70 77 79 80 81 83 84 85 86 89 93 95 97 98 99 100 101 106 107 109 110 112 115 116 117 120 121 122 126 127 129 130 131 132 136 137 140 143 145 148 149 150 154 155 156 157 158 159 160 161 162 163 167 169 172 173 174 178 181 182 183 186 187 189 190 191 192 193 194 195 197 198 200 202 203 204 205 210 212 216 217 220 225 228 230 231 232 233 235 237 239 240 241 243 # 32586 xor c a 247 1 1 0 1 2 4 7 8 9 11 15 16 18 19 22 29 30 32 36 37 39 40 41 43 44 45 46 47 49 51 55 58 59 61 63 65 69 70 77 79 80 81 83 84 85 86 89 93 95 97 98 99 100 101 106 107 109 110 112 115 116 117 120 121 122 126 127 129 130 131 132 136 137 140 143 145 148 149 150 154 155 156 157 158 159 160 161 162 163 167 169 172 173 174 178 181 182 183 186 187 189 190 191 192 193 194 195 197 198 200 202 203 204 205 210 212 216 217 220 225 228 230 231 232 233 235 237 239 240 241 243 b 247 1 1 e # 32587 xor c a 247 1 1 3 5 6 7 8 9 12 13 15 20 21 24 26 27 28 32 33 35 38 41 42 44 46 48 53 54 57 60 62 63 66 67 71 74 76 77 81 82 84 85 86 88 89 90 91 93 95 99 100 101 104 107 109 111 112 115 117 119 120 122 127 129 133 137 139 140 142 143 144 145 146 147 148 150 151 152 153 156 157 161 162 163 164 169 173 175 176 178 179 180 181 182 183 184 187 191 193 194 195 200 202 205 211 214 215 216 217 218 221 222 223 224 225 226 228 229 230 231 235 239 240 241 242 243 246 b 247 1 1 3 5 6 7 8 9 12 13 15 20 21 24 26 27 28 32 33 35 38 41 42 44 46 48 53 54 57 60 62 63 66 67 71 74 76 77 81 82 84 85 86 88 89 90 91 93 95 99 100 101 104 107 109 111 112 115 117 119 120 122 127 129 133 137 139 140 142 143 144 145 146 147 148 150 151 152 153 156 157 161 162 163 164 169 173 175 176 178 179 180 181 182 183 184 187 191 193 194 195 200 202 205 211 214 215 216 217 218 221 222 223 224 225 226 228 229 230 231 235 239 240 241 242 243 246 # 32588 xor c a 247 1 1 3 5 6 7 8 9 12 13 15 20 21 24 26 27 28 32 33 35 38 41 42 44 46 48 53 54 57 60 62 63 66 67 71 74 76 77 81 82 84 85 86 88 89 90 91 93 95 99 100 101 104 107 109 111 112 115 117 119 120 122 127 129 133 137 139 140 142 143 144 145 146 147 148 150 151 152 153 156 157 161 162 163 164 169 173 175 176 178 179 180 181 182 183 184 187 191 193 194 195 200 202 205 211 214 215 216 217 218 221 222 223 224 225 226 228 229 230 231 235 239 240 241 242 243 246 b 247 1 1 f # 32589 xor c a 247 1 1 2 3 4 5 6 7 8 11 14 16 18 19 20 24 27 28 29 30 33 37 38 43 44 45 47 50 51 56 57 59 63 65 66 67 68 69 70 77 80 84 85 86 87 88 90 92 94 97 98 99 100 101 106 110 112 114 115 117 118 121 127 130 133 134 135 137 139 142 144 145 151 153 154 155 158 159 160 167 170 171 172 173 177 178 179 182 183 185 186 187 189 190 194 195 196 197 198 205 206 207 208 210 212 215 218 220 222 224 226 229 230 231 233 236 237 241 242 245 b 247 1 1 2 3 4 5 6 7 8 11 14 16 18 19 20 24 27 28 29 30 33 37 38 43 44 45 47 50 51 56 57 59 63 65 66 67 68 69 70 77 80 84 85 86 87 88 90 92 94 97 98 99 100 101 106 110 112 114 115 117 118 121 127 130 133 134 135 137 139 142 144 145 151 153 154 155 158 159 160 167 170 171 172 173 177 178 179 182 183 185 186 187 189 190 194 195 196 197 198 205 206 207 208 210 212 215 218 220 222 224 226 229 230 231 233 236 237 241 242 245 # 32590 xor c a 247 1 1 2 3 4 5 6 7 8 11 14 16 18 19 20 24 27 28 29 30 33 37 38 43 44 45 47 50 51 56 57 59 63 65 66 67 68 69 70 77 80 84 85 86 87 88 90 92 94 97 98 99 100 101 106 110 112 114 115 117 118 121 127 130 133 134 135 137 139 142 144 145 151 153 154 155 158 159 160 167 170 171 172 173 177 178 179 182 183 185 186 187 189 190 194 195 196 197 198 205 206 207 208 210 212 215 218 220 222 224 226 229 230 231 233 236 237 241 242 245 b 247 1 1 0 2 6 11 12 15 19 23 24 27 28 32 34 35 36 37 39 41 42 47 48 50 51 52 53 54 59 60 61 64 67 68 69 70 72 76 77 78 81 83 84 87 89 90 92 94 95 96 99 102 104 110 115 116 117 118 120 121 123 129 130 131 133 134 135 139 140 144 145 147 148 150 151 155 156 157 158 160 161 162 164 165 169 174 177 178 179 181 182 197 198 199 201 203 206 207 209 210 212 214 216 218 219 223 224 225 226 229 231 232 233 234 236 237 238 240 241 242 243 245 # 32591 xor c tla-1.3.5+dfsg/src/hackerlab/tests/bitset-tests/unit-bitset.c0000644000175000017500000003026710457621774022674 0ustar useruser/* unit-bitset.c - test bitset.c * **************************************************************** * Copyright (C) 2000 Thomas Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/arrays/ar.h" #include "hackerlab/char/char-class.h" #include "hackerlab/char/str.h" #include "hackerlab/bitsets/bitset.h" #include "hackerlab/cmd/main.h" static t_uchar * program_name = "unit-bitset"; static t_uchar * usage = "[options] < tests"; static t_uchar * version_string = "1.0"; #define OPTS(OP, OP2) \ OP (opt_help_msg, "h", "help", 0, \ "Display a help message and exit.") \ OP (opt_version, "V", "version", 0, \ "Display a release identifier string") \ OP2 (opt_version, 0, 0, 0, "and exit.") \ OP (opt_iterations, "i", "iterations", 0, \ "Run all tests `n' times.") enum options { OPTS (OPT_ENUM, OPT_IGN) }; struct opt_desc opts[] = { OPTS (OPT_DESC, OPT_DESC) {-1, 0, 0, 0, 0} }; static bitset make_test_set (unsigned int size, unsigned int left_bits, unsigned int right_bits, int * members) { bitset real_bitset; bitset returned_bitset; int real_size; real_size = size + 2 * bits_per_subset; real_bitset = bitset_alloc (lim_use_must_malloc, real_size); returned_bitset = real_bitset + 1; if (left_bits) bitset_fill_range (real_bitset, 0, bits_per_subset); if (right_bits) bitset_fill_range (real_bitset, bits_per_subset + size, real_size); if (members == (int *)-1L) bitset_fill_range (returned_bitset, 0, size); else if (members) { int x; for (x = 0; members[x] >= 0; ++x) bitset_adjoin (returned_bitset, members[x]); } return returned_bitset; } static void parse_uint (int * answer, t_uchar ** line, long * len) { int errn; t_uchar * start; while (*len && char_is_space (**line)) { ++*line; --*len; } start = *line; while (*len && char_is_digit (**line)) { ++*line; --*len; } if (start == *line) panic ("syntax error in input"); if (cvt_decimal_to_uint (&errn, answer, start, (*line - start))) panic ("overflow error in number"); while (*len && char_is_space (**line)) { ++*line; --*len; } } static bitset read_test_set (int * size_ret, t_uchar * line, long len) { int size; int left; int right; int * members; bitset answer; if (!len) { panic ("syntax error in input"); } parse_uint (&size, &line, &len); *size_ret = size; parse_uint (&left, &line, &len); parse_uint (&right, &line, &len); if (!len) members = 0; else if (*line == 'e') members = 0; else if (*line == 'f') members = (int *)-1L; else { members = 0; while (len) { int x; parse_uint ((unsigned int *)&x, &line, &len); *(int *)ar_push ((void **)&members, lim_use_must_malloc, sizeof (int)) = x; } *(int *)ar_push ((void **)&members, lim_use_must_malloc, sizeof (int)) = -1; } answer = make_test_set (size, left, right, members); if (members && (members != (int *)-1L)) ar_free ((void **)&members, lim_use_must_malloc); return answer; } static void print_test_set (int fd, int test_no, int size, bitset b) { int errn; bitset real_bitset; int real_size; real_size = size + 2 * bits_per_subset; real_bitset = b - 1; printfmt (&errn, fd, "%d ", test_no); printfmt (&errn, fd, "%d ", size); /* bits to the left */ { int pop; int is_empty; int is_full; pop = bitset_population (bits_per_subset, real_bitset); is_empty = bitset_is_empty (bits_per_subset, real_bitset); is_full = bitset_is_full (bits_per_subset, real_bitset); if (!(is_empty && !pop) && !(is_full && (pop == bits_per_subset))) printfmt (&errn, fd, "X "); else printfmt (&errn, fd, "%d ", is_full); } /* bits to the right */ { int pop; int is_empty; int is_full; pop = bitset_population_range (real_bitset, bits_per_subset + size, real_size); is_empty = bitset_is_empty_range (real_bitset, bits_per_subset + size, real_size); is_full = bitset_is_full_range (real_bitset, bits_per_subset + size, real_size); if (!(is_empty && !pop) && !(is_full && (pop == (real_size - size - bits_per_subset)))) printfmt (&errn, fd, "X"); else printfmt (&errn, fd, "%d", is_full); } /* bits in set */ { int pop; int is_empty; int is_full; pop = bitset_population (size, b); is_empty = bitset_is_empty (size, b); is_full = bitset_is_full (size, b); if ((is_empty && pop) || (is_full && (pop != size))) printfmt (&errn, fd, " X"); else if (is_empty) printfmt (&errn, fd, " e"); else if (is_full) printfmt (&errn, fd, " f"); else { int x; for (x = 0; x < size; ++x) { if (bitset_is_member (b, x)) { printfmt (&errn, fd, " %d", x); --pop; } } if (pop) printfmt (&errn, fd, " X"); } } printfmt (&errn, fd, "\n"); } static void free_test_set (bitset b) { bitset real_bitset; real_bitset = b - 1; bitset_free (lim_use_must_malloc, real_bitset); } static void print_ordinary_set (int fd, int test_no, int size, bitset b) { int errn; printfmt (&errn, fd, "%d ", test_no); printfmt (&errn, fd, "%d", size); /* bits in set */ { int pop; int is_empty; int is_full; pop = bitset_population (size, b); is_empty = bitset_is_empty (size, b); is_full = bitset_is_full (size, b); if ((is_empty && pop) || (is_full && (pop != size))) printfmt (&errn, fd, " X"); else if (is_empty) printfmt (&errn, fd, " e"); else if (is_full) printfmt (&errn, fd, " f"); else { int x; for (x = 0; x < size; ++x) { if (bitset_is_member (b, x)) { printfmt (&errn, fd, " %d", x); --pop; } } if (pop) printfmt (&errn, fd, " X"); } } printfmt (&errn, fd, "\n"); } static int kw_cmp (t_uchar * line, int len, char * kws) { t_uchar * kw; int x; kw = (t_uchar *)kws; x = 0; while ((x < len) && kws[x] && (line[x] == kws[x])) ++x; return (!kws[x] && ((x == len) || char_is_space (line[x]))); } int main (int argc, char * argv[]) { int errn; int o; struct opt_parsed * option; int iterations; option = 0; iterations = 1; while (1) { o = opt_standard (lim_use_must_malloc, &option, opts, &argc, argv, program_name, usage, version_string, 0, opt_help_msg, opt_none, opt_version); if (o == opt_none) break; switch (o) { default: safe_printfmt (2, "unhandled option `%s'\n", option->opt_string); panic ("internal error parsing arguments"); usage_error: opt_usage (2, argv[0], program_name, usage, 1); panic_exit (); bogus_arg: safe_printfmt (2, "ill-formed argument for `%s' (`%s')\n", option->opt_string, option->arg_string); goto usage_error; case opt_iterations: if (cvt_decimal_to_uint (&errn, &iterations, option->arg_string, str_length (option->arg_string))) goto bogus_arg; break; } } { bitset a = 0; int a_size; bitset b = 0; int b_size; int n; int range_start; int range_end; while (1) { long len; t_uchar * line; if (0 > vfdbuf_next_line (&errn, &line, &len, 0)) panic ("vfdbuf_next_line error"); if (len == 0) exit (0); else if (len < 0) panic ("input error"); else { int c; c = *line; ++line; --len; switch (c) { default: panic ("command syntax error"); case 'a': a = read_test_set (&a_size, line, len); break; case 'b': b = read_test_set (&b_size, line, len); break; case 'n': parse_uint (&n, &line, &len); break; case 'r': parse_uint (&range_start, &line, &len); parse_uint (&range_end, &line, &len); break; case 'c': if (a) { free_test_set (a); a = 0; } if (b) { free_test_set (b); b = 0; } break; case '#': { int test_no; parse_uint (&test_no, &line, &len); if (kw_cmp (line, len, "dup")) { bitset copy; copy = bitset_dup (lim_use_must_malloc, a_size, a); print_ordinary_set (1, test_no, a_size, copy); bitset_free (lim_use_must_malloc, copy); } else if (kw_cmp (line, len, "is_member")) { printfmt (&errn, 1, "%d %d\n", test_no, bitset_is_member (a, n)); } else if (kw_cmp (line, len, "is_equal")) { printfmt (&errn, 1, "%d %d\n", test_no, bitset_is_equal (a_size, a, b)); } else if (kw_cmp (line, len, "is_subset")) { printfmt (&errn, 1, "%d %d\n", test_no, bitset_is_subset (a_size, a, b)); } else if (kw_cmp (line, len, "is_empty")) { printfmt (&errn, 1, "%d %d\n", test_no, bitset_is_empty (a_size, a)); } else if (kw_cmp (line, len, "is_empty_range")) { printfmt (&errn, 1, "%d %d\n", test_no, bitset_is_empty_range (a, range_start, range_end)); } else if (kw_cmp (line, len, "is_full")) { printfmt (&errn, 1, "%d %d\n", test_no, bitset_is_full (a_size, a)); } else if (kw_cmp (line, len, "is_full_range")) { printfmt (&errn, 1, "%d %d\n", test_no, bitset_is_full_range (a, range_start, range_end)); } else if (kw_cmp (line, len, "adjoin")) { bitset_adjoin (a, n); print_test_set (1, test_no, a_size, a); } else if (kw_cmp (line, len, "remove")) { bitset_remove (a, n); print_test_set (1, test_no, a_size, a); } else if (kw_cmp (line, len, "toggle")) { bitset_toggle (a, n); print_test_set (1, test_no, a_size, a); } else if (kw_cmp (line, len, "clear")) { bitset_clear (a_size, a); print_test_set (1, test_no, a_size, a); } else if (kw_cmp (line, len, "clear_range")) { bitset_clear_range (a, range_start, range_end); print_test_set (1, test_no, a_size, a); } else if (kw_cmp (line, len, "fill")) { bitset_fill (a_size, a); print_test_set (1, test_no, a_size, a); } else if (kw_cmp (line, len, "fill_range")) { bitset_fill_range (a, range_start, range_end); print_test_set (1, test_no, a_size, a); } else if (kw_cmp (line, len, "complement")) { bitset_complement (a_size, a); print_test_set (1, test_no, a_size, a); } else if (kw_cmp (line, len, "assign")) { bitset_assign (a_size, a, b); print_test_set (1, test_no, a_size, a); } else if (kw_cmp (line, len, "union")) { bitset_union (a_size, a, b); print_test_set (1, test_no, a_size, a); } else if (kw_cmp (line, len, "intersection")) { bitset_intersection (a_size, a, b); print_test_set (1, test_no, a_size, a); } else if (kw_cmp (line, len, "difference")) { bitset_difference (a_size, a, b); print_test_set (1, test_no, a_size, a); } else if (kw_cmp (line, len, "revdifference")) { bitset_revdifference (a_size, a, b); print_test_set (1, test_no, a_size, a); } else if (kw_cmp (line, len, "xor")) { bitset_xor (a_size, a, b); print_test_set (1, test_no, a_size, a); } else if (kw_cmp (line, len, "population")) { printfmt (&errn, 1, "%d %ld\n", test_no, bitset_population (a_size, a)); } else if (kw_cmp (line, len, "population_range")) { printfmt (&errn, 1, "%d %ld\n", test_no, bitset_population_range (a, range_start, range_end)); } else if (kw_cmp (line, len, "ffs")) { printfmt (&errn, 1, "%d %ld\n", test_no, bitset_ffs (a_size, a)); } else if (kw_cmp (line, len, "ffs_range")) { printfmt (&errn, 1, "%d %ld\n", test_no, bitset_ffs_range (a, range_start, range_end)); } else if (kw_cmp (line, len, "ffc")) { printfmt (&errn, 1, "%d %ld\n", test_no, bitset_ffc (a_size, a)); } else if (kw_cmp (line, len, "ffc_range")) { printfmt (&errn, 1, "%d %ld\n", test_no, bitset_ffc_range (a, range_start, range_end)); } else panic ("unrecognized command"); } } } } } return 0; } tla-1.3.5+dfsg/src/hackerlab/tests/bitset-tests/unit-bitset.answers0000644000175000017500000510777310457621774024150 0ustar useruser0 0 1 0 2 0 3 1 4 1 5 1 6 0 7 0 8 0 9 0 10 0 11 0 12 1 13 1 14 1 15 0 16 0 17 1 18 0 19 0 20 0 21 1 22 1 23 1 24 0 25 1 26 1 27 0 28 0 29 0 30 1 31 1 32 1 33 0 34 1 35 0 36 0 37 0 38 0 39 1 40 1 41 1 42 1 43 0 44 0 45 0 46 0 47 0 48 1 49 1 50 1 51 0 52 1 53 0 54 0 55 0 56 0 57 1 58 1 59 1 60 1 61 0 62 1 63 0 64 0 65 0 66 1 67 1 68 1 69 0 70 1 71 1 72 0 73 0 74 0 75 1 76 1 77 1 78 0 79 0 80 1 81 0 82 0 83 0 84 1 85 1 86 1 87 0 88 0 89 0 90 0 91 0 92 0 93 1 94 1 95 1 96 0 97 1 98 1 99 0 100 0 101 0 102 1 103 1 104 1 105 0 106 1 107 0 108 0 109 0 110 0 111 1 112 1 113 1 114 0 115 0 116 0 117 0 118 0 119 0 120 1 121 1 122 1 123 0 124 0 125 0 126 0 127 0 128 0 129 1 130 1 131 1 132 1 133 1 134 0 135 0 136 0 137 0 138 1 139 1 140 1 141 0 142 1 143 0 144 0 145 0 146 0 147 1 148 1 149 1 150 1 151 0 152 0 153 0 154 0 155 0 156 1 157 1 158 1 159 1 160 0 161 0 162 0 163 0 164 0 165 1 166 1 167 1 168 0 169 1 170 1 171 0 172 0 173 0 174 1 175 1 176 1 177 0 178 1 179 1 180 0 181 0 182 0 183 1 184 1 185 1 186 0 187 1 188 0 189 0 190 0 191 0 192 1 193 1 194 1 195 0 196 1 197 1 198 0 199 0 200 0 201 1 202 1 203 1 204 1 205 0 206 0 207 0 208 0 209 0 210 1 211 1 212 1 213 1 214 1 215 1 216 0 217 0 218 0 219 1 220 1 221 1 222 1 223 0 224 1 225 0 226 0 227 0 228 1 229 1 230 1 231 1 232 1 233 1 234 0 235 0 236 0 237 1 238 1 239 1 240 0 241 0 242 1 243 0 244 0 245 0 246 1 247 1 248 1 249 0 250 0 251 0 252 0 253 0 254 0 255 1 256 1 257 1 258 1 259 1 260 1 261 0 262 0 263 0 264 1 265 1 266 1 267 1 268 1 269 1 270 0 271 0 272 0 273 1 274 1 275 1 276 0 277 0 278 1 279 0 280 0 281 0 282 1 283 1 284 1 285 1 286 1 287 0 288 0 289 0 290 0 291 1 292 1 293 1 294 1 295 1 296 1 297 0 298 0 299 0 300 1 301 1 302 1 303 1 304 0 305 0 306 0 307 0 308 0 309 1 310 1 311 1 312 1 313 0 314 0 315 0 316 0 317 0 318 1 319 1 320 1 321 1 322 0 323 1 324 0 325 0 326 0 327 1 328 1 329 1 330 0 331 0 332 0 333 0 334 0 335 0 336 1 337 1 338 1 339 0 340 1 341 1 342 0 343 0 344 0 345 1 346 1 347 1 348 0 349 0 350 1 351 0 352 0 353 0 354 1 355 1 356 1 357 0 358 1 359 0 360 1 0 0 f 361 1 0 0 f 362 1 0 0 f 363 1 0 0 f 364 1 0 0 f 365 1 0 0 f 366 1 0 0 f 367 1 0 0 f 368 1 0 0 f 369 1 0 1 f 370 1 0 1 f 371 1 0 1 f 372 1 0 1 f 373 1 0 1 f 374 1 0 1 f 375 1 0 1 f 376 1 0 1 f 377 1 0 1 f 378 1 1 0 f 379 1 1 0 f 380 1 1 0 f 381 1 1 0 f 382 1 1 0 f 383 1 1 0 f 384 1 1 0 f 385 1 1 0 f 386 1 1 0 f 387 1 1 1 f 388 1 1 1 f 389 1 1 1 f 390 1 1 1 f 391 1 1 1 f 392 1 1 1 f 393 1 1 1 f 394 1 1 1 f 395 1 1 1 f 396 31 0 0 0 397 31 0 0 30 398 31 0 0 28 399 31 0 0 f 400 31 0 0 f 401 31 0 0 f 402 31 0 0 0 1 2 4 6 7 8 9 12 15 16 17 18 19 20 24 26 30 403 31 0 0 0 1 4 5 6 7 9 10 11 12 16 17 19 20 21 24 28 29 30 404 31 0 0 1 3 4 6 8 9 11 13 14 15 16 17 20 22 24 26 28 29 30 405 31 0 1 0 406 31 0 1 30 407 31 0 1 30 408 31 0 1 f 409 31 0 1 f 410 31 0 1 f 411 31 0 1 0 2 3 4 5 6 10 13 15 18 19 20 21 23 26 28 412 31 0 1 0 3 5 6 9 11 15 17 18 20 21 22 23 25 26 27 28 29 30 413 31 0 1 0 3 4 8 10 11 12 13 15 18 19 21 22 24 25 26 27 29 30 414 31 1 0 0 415 31 1 0 30 416 31 1 0 27 417 31 1 0 f 418 31 1 0 f 419 31 1 0 f 420 31 1 0 0 5 6 8 9 11 13 16 18 20 21 23 24 25 26 28 421 31 1 0 0 2 4 5 12 14 15 16 18 20 21 22 23 24 29 30 422 31 1 0 3 4 8 9 10 14 19 23 25 423 31 1 1 0 424 31 1 1 30 425 31 1 1 30 426 31 1 1 f 427 31 1 1 f 428 31 1 1 f 429 31 1 1 0 1 2 5 8 9 11 13 15 19 22 23 24 29 30 430 31 1 1 2 3 4 5 7 8 9 11 14 15 16 19 20 21 22 23 24 27 28 29 30 431 31 1 1 2 3 5 10 12 13 15 16 17 18 20 21 23 26 29 432 32 0 0 0 433 32 0 0 31 434 32 0 0 19 435 32 0 0 f 436 32 0 0 f 437 32 0 0 f 438 32 0 0 0 1 4 5 6 7 8 10 14 16 17 18 22 24 25 29 30 439 32 0 0 0 3 4 7 8 11 12 15 16 18 20 21 22 23 24 31 440 32 0 0 1 2 7 8 9 10 12 15 20 22 23 24 26 30 31 441 32 0 1 0 442 32 0 1 31 443 32 0 1 10 444 32 0 1 f 445 32 0 1 f 446 32 0 1 f 447 32 0 1 0 2 3 4 5 6 8 9 10 11 13 15 16 17 18 19 20 21 22 26 28 29 30 448 32 0 1 0 1 3 4 5 8 17 18 19 20 21 24 26 27 28 29 31 449 32 0 1 0 2 3 8 10 11 12 15 20 22 23 24 25 26 27 28 29 30 31 450 32 1 0 0 451 32 1 0 31 452 32 1 0 28 453 32 1 0 f 454 32 1 0 f 455 32 1 0 f 456 32 1 0 0 2 4 7 9 12 14 18 20 21 23 28 30 31 457 32 1 0 4 5 7 9 14 15 17 23 24 25 28 29 31 458 32 1 0 2 7 9 12 13 16 18 20 23 24 27 31 459 32 1 1 0 460 32 1 1 31 461 32 1 1 7 462 32 1 1 f 463 32 1 1 f 464 32 1 1 f 465 32 1 1 0 1 3 7 10 11 12 14 17 20 21 23 25 28 29 30 466 32 1 1 0 6 7 8 9 11 14 15 21 23 24 25 27 28 30 31 467 32 1 1 2 3 4 5 6 8 15 16 17 18 24 25 26 27 28 29 468 33 0 0 0 469 33 0 0 32 470 33 0 0 1 471 33 0 0 f 472 33 0 0 f 473 33 0 0 f 474 33 0 0 0 6 7 8 9 11 12 14 15 16 17 19 20 21 22 23 24 25 29 30 475 33 0 0 1 2 3 5 6 21 25 27 28 29 32 476 33 0 0 0 1 2 3 4 6 8 11 12 13 15 16 17 19 24 27 29 32 477 33 0 1 0 478 33 0 1 32 479 33 0 1 21 480 33 0 1 f 481 33 0 1 f 482 33 0 1 f 483 33 0 1 0 2 4 8 9 11 12 13 14 18 22 23 27 29 32 484 33 0 1 1 2 8 13 14 15 16 17 20 24 26 28 29 32 485 33 0 1 1 2 7 9 13 14 20 21 25 31 486 33 1 0 0 487 33 1 0 32 488 33 1 0 28 489 33 1 0 f 490 33 1 0 f 491 33 1 0 f 492 33 1 0 0 3 4 10 11 19 21 26 28 29 30 493 33 1 0 3 5 7 8 9 15 16 18 19 22 23 26 29 30 31 32 494 33 1 0 0 2 3 4 7 8 9 10 13 16 17 18 20 21 22 24 25 26 27 28 29 30 31 495 33 1 1 0 496 33 1 1 32 497 33 1 1 7 498 33 1 1 f 499 33 1 1 f 500 33 1 1 f 501 33 1 1 0 2 3 4 5 10 13 16 18 21 24 27 28 30 502 33 1 1 0 5 6 7 12 13 14 15 16 19 20 21 22 23 25 26 27 28 32 503 33 1 1 0 1 2 4 5 6 10 13 15 22 23 25 26 27 28 31 504 63 0 0 0 505 63 0 0 62 506 63 0 0 31 507 63 0 0 f 508 63 0 0 f 509 63 0 0 f 510 63 0 0 0 3 7 9 11 13 19 22 25 26 27 30 35 36 38 45 46 47 50 51 52 54 57 58 59 61 511 63 0 0 0 3 5 7 9 11 12 14 15 16 19 20 21 22 25 28 31 32 33 36 37 40 41 42 43 45 48 49 50 51 52 53 58 60 62 512 63 0 0 0 2 3 5 6 9 12 14 17 20 21 25 26 27 28 33 34 35 36 37 40 41 43 44 46 48 51 53 54 55 56 57 58 59 61 62 513 63 0 1 0 514 63 0 1 62 515 63 0 1 35 516 63 0 1 f 517 63 0 1 f 518 63 0 1 f 519 63 0 1 0 1 2 3 4 5 10 12 13 14 17 20 24 25 27 30 31 33 34 36 38 40 42 46 47 49 53 54 59 60 62 520 63 0 1 0 2 4 5 6 8 10 12 14 16 17 18 22 24 26 27 28 29 30 31 33 36 40 42 44 45 46 47 48 49 51 62 521 63 0 1 1 2 3 4 5 8 9 10 12 13 15 17 18 22 24 26 29 30 31 32 34 35 37 38 40 41 44 45 48 50 51 53 56 522 63 1 0 0 523 63 1 0 62 524 63 1 0 21 525 63 1 0 f 526 63 1 0 f 527 63 1 0 f 528 63 1 0 0 3 5 6 7 9 10 11 12 14 15 19 20 24 28 30 31 33 34 35 36 37 38 41 47 48 49 50 53 54 58 62 529 63 1 0 0 2 3 6 7 8 9 12 14 15 19 20 23 24 25 26 32 33 40 42 43 44 45 46 50 51 52 54 55 57 58 60 62 530 63 1 0 0 2 3 4 9 12 13 14 15 18 20 23 24 25 26 28 29 30 31 33 34 35 37 40 42 45 47 48 50 51 52 54 55 58 61 62 531 63 1 1 0 532 63 1 1 62 533 63 1 1 51 534 63 1 1 f 535 63 1 1 f 536 63 1 1 f 537 63 1 1 0 2 3 4 8 9 12 14 15 17 18 19 20 23 25 26 28 29 32 33 35 37 40 42 43 44 45 47 48 50 51 52 58 60 61 62 538 63 1 1 0 1 3 6 7 10 11 13 16 17 19 20 21 23 26 29 32 36 39 40 42 43 50 56 57 58 60 62 539 63 1 1 1 2 3 6 8 11 13 15 17 18 19 20 21 22 24 25 27 28 29 30 33 34 35 36 37 39 41 42 43 44 48 51 55 57 58 59 60 61 540 64 0 0 0 541 64 0 0 63 542 64 0 0 37 543 64 0 0 f 544 64 0 0 f 545 64 0 0 f 546 64 0 0 0 3 6 9 10 11 13 14 16 18 21 24 25 26 32 33 37 38 40 41 43 51 53 54 56 57 59 61 547 64 0 0 0 1 2 3 4 5 8 9 12 13 17 20 22 27 29 31 32 34 38 39 45 46 47 48 49 53 54 63 548 64 0 0 0 2 3 4 5 6 8 11 12 15 17 20 22 23 24 28 29 36 38 40 42 43 47 49 51 52 54 55 58 62 63 549 64 0 1 0 550 64 0 1 63 551 64 0 1 21 552 64 0 1 f 553 64 0 1 f 554 64 0 1 f 555 64 0 1 0 1 3 6 8 10 11 12 14 15 18 20 23 24 25 26 27 29 32 36 39 40 42 44 45 48 49 51 53 54 55 58 59 61 556 64 0 1 4 5 10 11 12 15 17 18 23 24 26 30 31 32 37 38 40 41 43 45 46 49 50 51 54 56 57 58 59 62 63 557 64 0 1 0 1 3 4 7 9 10 11 12 13 19 20 22 25 31 33 34 35 38 39 42 45 47 49 51 52 57 58 558 64 1 0 0 559 64 1 0 63 560 64 1 0 11 561 64 1 0 f 562 64 1 0 f 563 64 1 0 f 564 64 1 0 0 1 3 5 7 8 11 12 13 15 16 17 20 22 26 27 33 34 35 38 40 41 43 44 47 49 52 54 57 59 61 63 565 64 1 0 0 2 4 6 7 9 13 15 16 17 18 19 20 21 25 27 28 29 32 34 35 36 41 42 43 44 46 47 48 49 51 53 55 57 58 60 62 63 566 64 1 0 4 5 8 11 14 16 20 21 24 26 27 31 32 33 35 36 37 39 40 41 42 45 46 48 50 51 59 60 61 62 63 567 64 1 1 0 568 64 1 1 63 569 64 1 1 31 570 64 1 1 f 571 64 1 1 f 572 64 1 1 f 573 64 1 1 0 1 3 4 6 11 13 17 18 19 24 25 27 28 33 36 37 38 43 45 47 50 51 52 54 55 59 60 61 574 64 1 1 0 1 2 3 4 5 11 13 14 15 17 19 20 22 24 29 30 31 34 37 41 43 45 47 48 49 50 51 54 56 58 59 60 62 63 575 64 1 1 0 1 2 4 6 8 9 10 12 15 17 19 24 25 27 32 33 34 35 38 41 42 44 45 47 48 49 50 54 55 57 58 59 61 576 65 0 0 0 577 65 0 0 64 578 65 0 0 26 579 65 0 0 f 580 65 0 0 f 581 65 0 0 f 582 65 0 0 0 2 4 5 10 15 16 17 19 20 23 24 26 27 29 30 31 33 36 38 40 41 42 43 46 47 50 52 54 56 57 60 62 583 65 0 0 1 3 4 5 7 8 10 13 14 16 17 19 20 21 22 23 25 26 27 28 33 34 36 39 40 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 61 62 63 64 584 65 0 0 0 4 7 9 19 22 24 26 27 29 30 34 39 43 44 45 47 50 51 52 53 55 58 59 63 64 585 65 0 1 0 586 65 0 1 64 587 65 0 1 38 588 65 0 1 f 589 65 0 1 f 590 65 0 1 f 591 65 0 1 0 3 4 5 6 7 8 9 10 13 17 18 19 21 23 25 26 27 28 29 31 34 39 41 43 44 50 52 57 60 62 64 592 65 0 1 0 1 6 9 10 11 12 17 19 20 22 23 24 26 31 35 36 37 38 40 41 43 46 52 58 59 60 61 62 64 593 65 0 1 0 1 3 4 6 7 8 13 15 16 17 20 21 22 24 26 27 36 37 39 42 43 46 52 55 56 58 59 60 61 63 594 65 1 0 0 595 65 1 0 64 596 65 1 0 45 597 65 1 0 f 598 65 1 0 f 599 65 1 0 f 600 65 1 0 0 3 4 6 8 9 11 12 13 17 19 21 22 23 24 26 28 30 32 35 38 40 43 47 50 53 56 58 59 60 61 62 601 65 1 0 2 5 7 11 12 13 14 16 18 20 29 32 34 38 40 43 46 47 48 49 51 52 53 61 62 64 602 65 1 0 0 1 5 7 10 13 15 17 18 22 23 24 26 27 30 32 34 38 39 41 43 44 46 49 50 51 52 53 55 56 60 64 603 65 1 1 0 604 65 1 1 64 605 65 1 1 30 606 65 1 1 f 607 65 1 1 f 608 65 1 1 f 609 65 1 1 0 1 3 4 6 7 8 16 17 18 19 23 24 25 27 28 32 33 35 40 41 42 43 44 45 47 48 50 51 52 54 55 56 58 59 60 63 64 610 65 1 1 0 4 6 7 9 10 13 14 16 17 19 20 21 22 24 25 27 29 30 34 36 37 39 40 41 43 44 49 52 54 57 59 60 64 611 65 1 1 1 3 6 8 9 10 11 15 16 18 22 24 25 29 30 31 32 34 35 36 39 42 44 45 47 51 54 59 60 63 64 612 211 0 0 0 613 211 0 0 210 614 211 0 0 13 615 211 0 0 f 616 211 0 0 f 617 211 0 0 f 618 211 0 0 0 1 2 3 7 9 10 11 13 14 15 17 18 20 23 24 25 26 27 28 30 31 33 34 35 38 39 42 47 52 55 57 58 61 62 63 65 66 67 68 72 74 76 77 79 83 84 86 91 94 95 97 101 106 107 109 110 116 118 120 123 124 126 127 128 133 136 142 143 144 149 150 153 155 157 158 164 165 166 167 172 173 175 179 181 182 183 184 186 189 192 193 194 195 196 197 198 202 205 619 211 0 0 0 3 7 8 20 24 28 29 31 33 35 37 38 39 41 46 48 49 50 54 61 62 63 64 66 67 70 71 75 76 77 80 82 85 86 87 88 94 95 96 97 98 101 102 103 107 109 112 114 120 121 123 124 126 127 129 130 132 133 137 141 142 146 148 150 151 154 156 157 158 159 160 161 163 164 165 166 170 171 172 176 178 179 180 182 184 191 193 194 196 197 198 200 203 204 205 207 209 210 620 211 0 0 2 6 7 12 16 17 20 21 23 24 27 30 31 32 35 36 38 40 41 42 43 45 48 51 53 54 55 58 59 64 65 67 68 69 70 71 72 73 76 77 79 81 82 84 85 88 90 92 94 95 97 100 102 103 107 109 110 112 114 115 118 120 121 122 127 129 130 133 137 139 144 146 147 148 149 152 153 154 159 160 165 166 167 168 173 176 179 186 187 190 194 195 200 201 204 205 207 209 621 211 0 1 0 622 211 0 1 210 623 211 0 1 177 624 211 0 1 f 625 211 0 1 f 626 211 0 1 f 627 211 0 1 0 1 2 4 6 7 8 11 12 13 16 17 23 24 25 28 29 34 36 37 38 39 40 43 44 45 47 48 49 51 53 54 56 58 59 60 61 66 67 69 70 72 75 76 77 78 79 80 82 83 88 89 91 92 93 97 99 100 101 102 103 106 108 109 110 111 113 114 115 117 119 120 121 122 123 124 125 128 130 131 133 135 138 140 141 142 144 145 146 147 148 150 151 152 153 154 155 156 157 158 159 161 163 164 165 166 169 172 179 180 182 183 187 190 191 194 197 198 202 204 206 207 208 210 628 211 0 1 1 2 4 6 7 8 10 11 12 13 14 18 19 20 24 25 26 27 30 31 32 33 35 36 37 38 39 41 43 44 47 48 50 51 54 56 57 65 68 70 71 72 74 75 76 78 83 84 87 89 93 94 95 97 98 101 106 109 110 111 113 114 115 118 121 122 123 124 125 126 128 129 131 132 133 136 140 148 149 150 152 153 155 156 158 160 163 165 166 168 170 171 172 175 176 179 185 188 190 191 192 194 195 196 197 199 201 202 203 206 207 208 210 629 211 0 1 1 2 3 5 6 7 8 11 12 13 15 16 19 22 25 28 29 31 32 34 36 37 39 40 41 43 45 46 50 51 53 55 56 57 60 61 63 64 67 68 70 71 74 75 77 78 81 83 84 86 90 91 92 94 95 96 97 98 99 101 102 103 104 105 108 110 111 113 114 118 119 120 121 122 123 126 127 129 130 131 134 138 139 140 142 145 147 150 151 152 154 156 161 163 167 169 170 173 175 177 178 179 181 182 188 189 190 192 194 198 199 201 203 205 206 207 208 209 210 630 211 1 0 0 631 211 1 0 210 632 211 1 0 182 633 211 1 0 f 634 211 1 0 f 635 211 1 0 f 636 211 1 0 0 1 2 3 4 5 7 10 17 19 21 24 26 30 33 36 37 38 40 41 45 46 47 48 50 52 55 59 60 73 74 75 76 77 78 79 80 81 82 83 84 86 88 89 91 96 97 98 103 106 108 109 110 111 113 114 117 118 120 123 124 125 127 130 131 135 136 138 139 140 141 142 144 145 146 149 150 155 157 158 159 160 161 165 167 170 174 177 178 179 180 181 182 183 186 188 189 191 193 195 196 197 198 199 200 204 205 208 210 637 211 1 0 1 2 7 10 12 13 14 21 22 23 24 25 27 30 31 33 35 37 42 43 47 48 49 53 56 60 65 68 69 70 71 73 74 82 83 85 86 93 94 95 100 104 106 108 109 111 114 115 117 119 120 121 127 132 134 135 136 138 143 144 146 147 148 150 151 152 153 157 159 161 163 165 166 167 169 171 173 174 175 177 178 181 184 185 186 187 190 191 192 193 194 196 201 204 207 210 638 211 1 0 0 3 4 6 7 8 9 10 12 13 16 17 20 22 24 26 27 28 32 33 35 36 38 39 47 49 53 54 57 59 63 65 66 70 72 74 76 79 85 86 87 88 89 90 91 94 95 97 98 101 102 105 107 108 109 110 114 115 119 120 122 123 125 126 127 128 129 131 132 135 136 137 138 139 141 143 145 149 151 154 155 157 161 164 167 170 171 177 178 179 180 182 184 185 186 190 191 193 199 200 203 205 207 208 639 211 1 1 0 640 211 1 1 210 641 211 1 1 8 642 211 1 1 f 643 211 1 1 f 644 211 1 1 f 645 211 1 1 0 1 2 6 9 11 13 17 18 19 20 22 24 25 26 28 29 30 32 33 38 39 41 44 45 46 48 49 51 52 55 64 65 66 70 74 77 79 80 81 82 83 84 85 86 93 94 96 98 100 101 102 105 106 108 112 115 117 121 122 123 124 125 127 129 130 132 133 134 135 140 141 142 143 145 146 148 149 150 152 153 154 156 159 163 164 165 166 170 174 175 177 180 182 185 186 187 188 190 198 199 200 201 202 205 206 207 208 646 211 1 1 2 3 4 5 6 7 8 10 11 12 13 19 21 22 25 27 28 29 35 36 38 39 42 45 47 49 50 51 52 53 55 56 57 58 62 63 65 66 71 72 73 74 76 81 83 84 86 89 90 91 93 95 96 99 100 102 103 105 110 116 118 119 121 122 123 129 133 134 135 136 139 140 145 151 152 153 154 158 159 160 161 162 164 165 166 167 170 171 175 177 179 180 182 183 187 188 191 194 197 198 199 201 202 203 204 205 206 208 209 210 647 211 1 1 0 2 3 4 7 8 11 12 13 14 15 17 18 19 20 21 22 23 24 25 27 30 32 33 34 35 36 38 39 40 41 42 44 47 50 53 54 55 58 59 60 61 63 64 66 67 69 70 72 74 76 80 83 86 87 88 89 90 91 92 93 94 95 97 99 100 102 104 105 106 107 108 110 111 112 114 116 117 118 119 120 121 122 123 124 125 127 128 129 130 131 133 135 138 140 141 143 145 146 148 149 152 157 160 162 163 164 166 169 170 174 175 177 178 179 180 183 185 187 189 190 192 193 195 199 200 202 204 205 207 208 210 648 224 0 0 0 649 224 0 0 223 650 224 0 0 41 651 224 0 0 f 652 224 0 0 f 653 224 0 0 f 654 224 0 0 0 1 3 4 5 6 7 8 9 10 12 13 16 18 19 20 22 25 28 29 30 32 35 36 39 40 43 45 46 47 49 50 55 57 59 60 63 65 66 73 74 75 77 78 79 80 82 83 84 86 89 93 95 96 99 101 103 106 107 110 111 112 113 114 115 117 119 120 123 125 126 127 128 129 130 132 139 140 141 142 143 144 145 146 147 149 150 153 155 156 157 158 159 160 161 163 164 165 166 168 171 173 175 176 178 181 183 184 185 188 191 192 195 200 201 202 203 204 206 208 209 210 211 212 214 216 218 219 655 224 0 0 0 1 3 5 8 12 14 17 19 20 23 26 27 28 33 35 36 37 38 39 40 43 47 48 49 50 51 52 54 56 57 60 61 62 64 66 67 69 70 73 74 75 80 83 88 89 90 91 92 93 95 98 101 102 104 105 107 108 109 111 112 114 116 118 119 122 125 130 133 134 135 138 140 143 144 148 152 153 154 155 156 160 162 165 167 168 171 173 174 178 180 181 182 184 185 187 189 193 195 196 197 199 200 201 202 205 206 207 210 211 213 217 219 220 221 222 223 656 224 0 0 0 5 9 10 11 12 14 15 16 17 18 22 23 26 29 30 31 36 37 38 40 44 47 48 52 56 58 60 61 65 66 70 72 74 75 78 80 82 83 84 87 88 91 94 97 98 99 102 104 105 108 110 111 112 113 115 117 118 119 120 121 122 125 126 127 131 132 134 135 138 141 142 146 147 149 150 152 158 159 160 163 164 168 175 176 183 184 185 187 190 191 192 194 195 196 198 200 202 203 204 206 207 208 211 213 214 216 219 221 222 657 224 0 1 0 658 224 0 1 223 659 224 0 1 56 660 224 0 1 f 661 224 0 1 f 662 224 0 1 f 663 224 0 1 0 1 2 4 7 13 14 22 24 25 28 29 31 32 35 36 37 41 42 44 46 47 48 49 56 57 58 59 60 61 62 63 67 69 72 73 74 75 77 78 80 82 86 88 91 95 96 97 98 100 101 102 103 104 105 106 110 112 113 116 118 119 120 122 124 126 127 129 130 132 133 135 137 139 144 145 147 148 150 151 153 154 156 157 158 160 161 164 165 168 172 175 177 178 181 182 183 185 186 188 189 190 191 192 195 196 198 199 200 202 203 204 207 211 212 218 221 222 664 224 0 1 0 3 4 6 7 9 13 15 20 21 22 23 25 27 33 36 38 40 42 45 46 47 50 53 55 58 59 60 65 70 72 79 80 84 88 91 92 93 94 96 100 103 104 105 109 112 114 115 116 119 120 121 122 123 124 125 127 129 132 133 135 136 137 138 142 144 145 147 149 150 152 155 158 162 164 165 166 167 168 169 170 173 174 175 178 179 182 184 188 190 191 204 211 212 214 215 218 221 223 665 224 0 1 3 4 5 6 7 8 11 12 13 17 18 19 20 21 22 25 26 27 29 30 31 36 39 40 41 42 43 44 46 47 49 50 52 53 54 58 59 61 62 63 64 67 68 70 71 73 75 78 79 81 82 84 85 86 89 91 93 94 97 99 102 103 106 107 108 109 110 112 113 114 118 119 121 123 124 129 131 133 135 138 139 140 143 145 147 149 151 152 153 155 157 163 165 167 168 170 171 172 173 174 175 176 177 178 180 183 185 186 190 191 192 194 196 198 199 201 202 204 205 207 208 209 211 214 217 218 219 220 221 222 223 666 224 1 0 0 667 224 1 0 223 668 224 1 0 33 669 224 1 0 f 670 224 1 0 f 671 224 1 0 f 672 224 1 0 0 1 2 5 9 10 12 13 16 17 21 23 24 26 27 28 30 31 32 33 38 39 45 46 48 49 50 51 52 54 55 56 57 58 60 63 65 67 69 70 71 73 74 75 76 77 78 80 81 83 84 86 87 92 93 98 99 101 103 104 106 109 110 111 114 116 120 123 125 127 131 132 133 134 135 139 142 143 144 147 148 150 151 152 154 158 165 167 170 171 172 176 177 179 182 184 185 187 191 192 193 196 200 202 203 204 207 210 212 213 214 216 219 220 221 222 223 673 224 1 0 0 1 5 6 8 9 11 16 18 19 20 21 23 24 25 26 27 28 33 34 35 37 41 43 45 48 50 51 52 54 55 56 58 59 60 64 68 69 70 72 75 76 79 80 82 83 85 86 92 94 95 96 99 103 106 108 111 115 120 121 122 127 128 130 131 132 133 134 137 138 143 144 145 146 147 148 151 152 156 160 161 163 164 166 169 170 171 172 175 176 178 179 182 185 186 189 190 192 195 196 200 202 203 204 206 207 208 210 212 214 219 223 674 224 1 0 1 4 5 7 10 12 13 14 15 17 18 19 21 23 25 26 27 28 32 33 34 35 36 38 40 41 43 44 47 50 56 57 59 67 73 74 75 78 80 81 82 86 89 93 94 95 96 97 98 101 102 104 105 107 115 116 118 119 123 124 127 134 135 136 138 140 144 145 147 150 157 159 160 161 168 171 172 173 175 176 180 182 185 186 187 188 190 191 193 194 198 199 202 205 206 212 219 221 222 223 675 224 1 1 0 676 224 1 1 223 677 224 1 1 106 678 224 1 1 f 679 224 1 1 f 680 224 1 1 f 681 224 1 1 0 1 2 6 7 9 10 11 15 16 20 23 24 27 30 31 33 34 35 37 39 40 45 50 51 52 54 55 56 58 61 62 63 64 65 67 68 69 70 71 75 76 77 81 85 87 89 91 92 97 100 105 106 110 111 113 114 116 121 122 123 124 129 133 134 135 137 139 140 141 142 144 145 146 147 148 152 155 156 157 160 161 162 163 166 167 169 170 172 173 175 178 182 185 188 189 195 196 198 199 201 204 205 208 210 214 215 221 222 223 682 224 1 1 0 2 3 5 6 7 8 9 10 12 14 15 19 20 22 24 26 27 28 30 31 32 34 38 39 41 46 47 48 50 51 53 56 57 59 61 62 65 67 70 71 74 75 77 82 83 84 86 87 90 91 93 94 95 96 99 100 102 105 107 108 109 111 112 114 115 117 118 119 120 121 124 126 127 128 130 131 132 137 139 142 144 145 150 154 156 157 159 161 162 163 167 170 171 172 173 175 177 178 179 181 183 188 195 196 198 200 202 203 206 207 208 209 210 212 214 218 220 222 223 683 224 1 1 0 1 3 5 6 9 11 16 19 22 23 24 25 28 30 31 33 35 36 41 43 44 45 46 47 48 50 52 53 55 57 61 62 64 65 67 71 73 80 81 82 83 84 86 89 90 91 92 93 95 96 98 99 100 102 107 108 109 111 112 114 116 118 122 128 131 132 133 134 138 139 142 143 148 152 154 156 160 161 163 164 167 168 170 171 173 174 175 180 181 182 185 186 187 192 193 195 196 198 199 200 201 202 205 207 210 211 213 219 221 222 684 247 0 0 0 685 247 0 0 246 686 247 0 0 39 687 247 0 0 f 688 247 0 0 f 689 247 0 0 f 690 247 0 0 0 1 2 5 7 9 10 11 14 16 17 18 21 22 23 25 26 27 32 34 36 37 40 44 48 50 55 58 59 61 62 65 66 68 71 73 74 76 78 79 80 83 84 86 88 90 93 94 95 96 97 98 100 106 108 112 115 116 119 120 122 125 126 127 129 133 134 135 136 137 138 139 144 145 147 148 151 152 154 155 157 158 159 160 168 170 176 177 178 179 182 183 184 185 186 188 189 190 191 195 198 200 201 202 208 212 213 215 216 223 227 228 231 234 235 238 240 242 243 245 246 691 247 0 0 0 6 8 10 11 15 16 17 18 23 25 28 31 32 33 43 45 46 49 50 51 55 56 57 59 61 62 67 68 69 70 74 75 76 77 78 81 83 84 85 87 88 89 90 93 95 97 98 100 101 104 106 107 109 111 112 113 115 117 118 120 121 124 125 128 129 131 132 133 135 138 139 143 144 145 146 148 150 151 154 155 161 163 164 166 168 170 171 172 174 175 177 181 189 190 191 193 194 200 203 204 208 209 210 212 214 215 219 220 222 226 227 228 230 231 232 234 235 240 242 243 246 692 247 0 0 0 1 3 4 6 8 10 16 17 18 19 22 23 27 28 29 30 31 32 33 34 38 40 41 42 43 44 47 48 50 53 54 55 56 58 59 66 67 68 73 77 80 81 84 87 88 89 93 94 95 98 99 100 105 108 109 110 111 112 116 119 121 123 124 125 126 127 129 130 134 138 140 141 142 143 144 147 148 153 155 156 158 161 162 166 167 168 169 171 172 175 177 181 184 185 188 190 194 195 196 197 198 199 200 205 207 208 209 211 212 213 217 218 221 222 223 226 229 230 231 235 237 238 241 244 245 246 693 247 0 1 0 694 247 0 1 246 695 247 0 1 77 696 247 0 1 f 697 247 0 1 f 698 247 0 1 f 699 247 0 1 0 5 6 8 11 15 17 19 21 22 25 27 28 29 30 31 36 38 39 41 42 43 47 49 50 51 52 53 61 63 68 69 72 74 76 81 82 84 86 88 89 90 92 93 94 101 104 106 107 108 109 110 112 113 114 115 117 118 119 120 121 123 124 126 131 133 134 137 138 140 141 142 143 144 145 148 155 156 160 161 162 163 164 165 168 170 173 176 177 181 182 187 189 199 200 203 204 205 207 209 211 215 217 218 219 221 223 228 229 231 232 233 234 235 236 237 238 240 241 242 246 700 247 0 1 0 1 2 3 5 6 8 10 14 17 18 20 21 23 24 26 27 30 33 34 35 37 41 42 43 45 47 48 51 53 54 55 56 57 58 60 61 62 64 65 66 68 70 73 75 76 78 79 80 83 84 86 87 88 89 91 92 95 96 98 99 101 102 103 108 110 116 119 121 122 125 130 131 132 133 137 138 139 141 143 145 147 149 150 151 152 155 157 159 160 163 165 168 172 173 174 176 180 181 183 185 186 187 188 189 190 191 194 198 206 208 209 210 211 212 222 225 226 227 228 229 230 234 235 236 237 239 240 243 244 245 246 701 247 0 1 2 3 5 6 7 10 13 15 17 18 20 21 22 26 29 31 34 35 38 39 40 41 42 44 48 50 51 53 55 58 59 62 64 67 68 69 70 71 72 73 76 77 78 79 82 83 85 92 93 94 95 98 103 105 108 112 113 115 116 117 121 122 124 125 126 128 129 130 137 138 140 141 142 143 144 145 146 147 148 151 152 153 155 156 158 159 160 161 162 164 166 168 171 174 179 180 181 182 183 184 194 200 201 206 208 213 215 216 217 221 222 224 226 228 230 231 236 238 240 242 244 702 247 1 0 0 703 247 1 0 246 704 247 1 0 188 705 247 1 0 f 706 247 1 0 f 707 247 1 0 f 708 247 1 0 0 3 4 8 10 11 13 15 20 22 23 25 26 27 28 29 31 33 35 37 40 45 46 47 51 54 55 57 58 59 60 62 63 66 67 68 71 72 73 75 76 78 79 81 82 83 85 86 89 92 98 100 104 105 107 108 110 113 118 119 124 128 130 132 134 135 136 139 140 143 144 145 151 152 153 154 155 158 159 160 161 163 164 167 168 169 170 171 174 178 179 180 182 183 184 185 193 194 202 203 204 205 206 208 209 211 212 213 215 216 217 219 223 226 228 230 233 234 237 240 241 243 244 245 246 709 247 1 0 1 2 6 7 8 9 10 12 14 15 16 17 18 19 21 23 24 26 28 29 34 35 36 37 38 40 41 42 44 45 47 50 51 58 61 62 63 65 67 68 72 74 75 76 78 80 84 85 86 90 93 95 96 97 98 100 102 103 105 106 109 110 114 115 116 117 121 122 123 124 125 128 130 131 133 134 135 136 137 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 163 165 166 168 170 172 173 174 175 176 177 180 183 187 189 191 192 193 194 196 197 202 204 205 207 209 213 214 216 221 224 229 230 231 233 237 238 239 243 244 246 710 247 1 0 0 1 2 4 5 6 10 11 12 13 14 15 16 17 24 29 30 34 37 38 39 42 45 49 51 53 54 55 59 63 64 67 69 70 71 75 77 78 79 80 83 86 88 92 94 96 99 102 103 104 105 107 108 110 112 116 118 119 120 121 122 123 125 129 132 133 135 136 137 138 139 144 145 154 155 158 160 162 163 166 168 170 172 175 176 177 184 187 188 191 194 195 196 198 199 200 201 202 203 206 209 211 213 220 221 222 225 226 227 229 230 232 233 237 239 240 241 244 245 246 711 247 1 1 0 712 247 1 1 246 713 247 1 1 243 714 247 1 1 f 715 247 1 1 f 716 247 1 1 f 717 247 1 1 0 1 2 3 5 8 9 11 12 17 19 22 23 24 25 26 29 32 34 41 42 44 49 51 52 54 55 59 61 64 66 68 71 72 75 76 77 81 82 85 87 90 91 97 101 109 110 111 112 113 119 120 125 127 128 129 131 132 136 138 141 142 143 147 148 150 151 152 154 156 159 162 164 165 166 167 169 171 172 174 177 181 182 185 189 190 191 193 196 202 204 205 208 209 212 215 217 219 220 222 223 224 227 228 230 232 233 234 235 236 238 240 242 243 244 246 718 247 1 1 2 4 7 9 11 12 13 14 16 17 20 25 26 28 30 33 34 41 46 50 52 60 62 65 66 67 71 72 73 78 79 82 84 87 88 89 91 93 94 95 96 97 98 99 100 101 102 103 104 105 107 110 111 112 113 114 121 122 123 124 125 126 128 129 131 132 134 144 146 148 152 155 160 161 162 163 164 165 168 169 170 172 173 174 175 179 180 181 183 187 188 189 190 191 193 196 197 198 199 205 207 209 210 213 214 215 222 223 229 230 231 235 237 238 239 242 243 245 246 719 247 1 1 0 4 5 9 10 12 13 15 17 18 20 21 22 23 26 28 29 30 31 35 36 42 44 46 48 49 51 52 54 55 56 59 62 68 69 70 71 76 79 81 82 83 86 88 94 95 96 104 105 106 108 113 115 121 122 123 126 127 128 131 132 133 136 138 139 142 143 147 149 151 153 154 155 157 158 165 166 167 168 169 170 172 173 176 177 178 183 186 187 190 191 192 195 196 197 198 199 200 201 203 205 206 209 210 211 214 216 217 223 225 226 228 229 232 233 236 238 241 246 720 1 0 0 e 721 1 0 0 e 722 1 0 0 e 723 1 0 0 e 724 1 0 0 e 725 1 0 0 e 726 1 0 0 e 727 1 0 0 e 728 1 0 0 e 729 1 0 1 e 730 1 0 1 e 731 1 0 1 e 732 1 0 1 e 733 1 0 1 e 734 1 0 1 e 735 1 0 1 e 736 1 0 1 e 737 1 0 1 e 738 1 1 0 e 739 1 1 0 e 740 1 1 0 e 741 1 1 0 e 742 1 1 0 e 743 1 1 0 e 744 1 1 0 e 745 1 1 0 e 746 1 1 0 e 747 1 1 1 e 748 1 1 1 e 749 1 1 1 e 750 1 1 1 e 751 1 1 1 e 752 1 1 1 e 753 1 1 1 e 754 1 1 1 e 755 1 1 1 e 756 31 0 0 e 757 31 0 0 e 758 31 0 0 e 759 31 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 760 31 0 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 761 31 0 0 0 1 2 3 4 5 6 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 762 31 0 0 1 6 7 8 11 15 16 18 21 22 23 26 30 763 31 0 0 0 4 5 7 10 12 14 20 21 25 27 29 764 31 0 0 2 3 4 5 6 7 10 11 13 15 17 18 19 21 22 23 25 28 29 765 31 0 1 e 766 31 0 1 e 767 31 0 1 e 768 31 0 1 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 769 31 0 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 770 31 0 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 20 21 22 23 24 25 26 27 28 29 30 771 31 0 1 2 3 4 7 8 9 10 13 16 17 19 20 21 23 26 27 28 30 772 31 0 1 0 2 3 9 10 11 13 14 15 16 17 22 24 27 29 773 31 0 1 0 2 3 4 5 6 7 9 10 11 13 14 17 18 23 25 28 29 30 774 31 1 0 e 775 31 1 0 e 776 31 1 0 e 777 31 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 778 31 1 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 779 31 1 0 0 1 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 780 31 1 0 1 2 3 4 5 6 7 8 10 11 12 13 14 15 16 17 20 21 22 23 24 25 26 27 28 30 781 31 1 0 0 13 15 16 20 21 23 24 26 27 782 31 1 0 0 4 5 6 7 11 14 18 21 22 24 25 27 783 31 1 1 e 784 31 1 1 e 785 31 1 1 e 786 31 1 1 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 787 31 1 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 788 31 1 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 27 28 29 30 789 31 1 1 1 4 5 6 7 12 14 16 17 19 21 22 24 25 26 29 30 790 31 1 1 0 1 8 10 14 15 17 18 19 21 22 23 24 25 26 27 28 29 791 31 1 1 0 4 5 6 11 14 16 17 19 20 23 24 27 30 792 32 0 0 e 793 32 0 0 e 794 32 0 0 e 795 32 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 796 32 0 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 797 32 0 0 0 1 2 3 4 5 6 7 8 9 10 11 12 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 798 32 0 0 1 5 6 10 13 14 15 17 18 19 20 21 24 27 28 799 32 0 0 0 1 2 5 6 7 8 9 15 18 19 24 25 28 29 30 800 32 0 0 1 3 4 5 6 7 8 15 16 18 19 21 26 27 29 30 31 801 32 0 1 e 802 32 0 1 e 803 32 0 1 e 804 32 0 1 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 805 32 0 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 806 32 0 1 0 1 2 3 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 807 32 0 1 1 2 4 5 7 9 12 14 15 16 17 18 20 22 24 25 31 808 32 0 1 1 3 4 5 6 8 10 12 13 15 16 18 20 21 22 24 26 809 32 0 1 2 5 6 7 8 11 13 15 16 19 24 30 31 810 32 1 0 e 811 32 1 0 e 812 32 1 0 e 813 32 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 814 32 1 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 815 32 1 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 816 32 1 0 2 6 9 10 12 14 16 18 19 21 31 817 32 1 0 0 1 7 11 16 19 21 23 24 25 26 818 32 1 0 1 5 7 8 10 12 14 17 19 20 21 23 24 28 29 31 819 32 1 1 e 820 32 1 1 e 821 32 1 1 e 822 32 1 1 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 823 32 1 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 824 32 1 1 0 1 2 3 4 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 825 32 1 1 2 3 6 7 8 9 14 17 18 19 20 24 25 27 28 29 31 826 32 1 1 2 5 8 9 10 13 16 19 21 24 25 28 29 827 32 1 1 3 5 7 11 13 16 17 22 26 27 30 31 828 33 0 0 e 829 33 0 0 e 830 33 0 0 e 831 33 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 832 33 0 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 833 33 0 0 0 1 2 3 4 5 6 7 8 9 10 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 834 33 0 0 2 3 4 5 9 10 12 14 16 21 22 28 29 30 31 835 33 0 0 1 2 6 11 12 13 14 17 18 20 22 24 25 27 28 30 836 33 0 0 0 1 5 6 7 8 10 13 14 16 19 20 22 23 24 26 27 29 32 837 33 0 1 e 838 33 0 1 e 839 33 0 1 e 840 33 0 1 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 841 33 0 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 842 33 0 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 21 22 23 24 25 26 27 28 29 30 31 32 843 33 0 1 1 2 5 8 10 13 20 26 27 29 31 844 33 0 1 2 3 6 7 8 11 12 13 15 17 18 20 21 22 24 25 26 28 30 845 33 0 1 0 3 4 5 6 9 10 11 13 16 17 19 21 25 27 28 30 31 32 846 33 1 0 e 847 33 1 0 e 848 33 1 0 e 849 33 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 850 33 1 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 851 33 1 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 22 23 24 25 26 27 28 29 30 31 32 852 33 1 0 1 2 4 5 8 11 13 15 17 18 19 20 22 23 24 25 26 28 31 853 33 1 0 1 2 7 8 9 10 13 14 16 17 19 20 22 23 27 30 31 854 33 1 0 0 1 6 10 11 14 16 23 24 27 29 32 855 33 1 1 e 856 33 1 1 e 857 33 1 1 e 858 33 1 1 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 859 33 1 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 860 33 1 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 861 33 1 1 4 9 10 12 16 17 18 25 26 32 862 33 1 1 0 1 2 4 6 7 9 10 11 13 16 17 18 24 25 26 30 863 33 1 1 0 2 3 5 8 9 10 11 14 16 17 18 24 29 864 63 0 0 e 865 63 0 0 e 866 63 0 0 e 867 63 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 868 63 0 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 869 63 0 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 870 63 0 0 2 3 6 7 8 11 14 15 16 19 20 21 22 27 29 31 33 34 35 38 40 42 44 45 49 51 55 57 58 59 61 62 871 63 0 0 0 1 5 7 8 10 13 14 15 16 17 18 19 24 25 26 27 29 32 33 34 36 37 39 41 43 44 47 50 52 53 54 56 57 60 61 872 63 0 0 0 1 4 7 8 11 13 15 16 17 18 21 23 24 25 28 29 30 34 36 39 40 42 43 45 46 48 49 50 53 56 59 873 63 0 1 e 874 63 0 1 e 875 63 0 1 e 876 63 0 1 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 877 63 0 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 878 63 0 1 0 1 2 3 4 5 6 7 8 9 10 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 879 63 0 1 1 3 4 5 7 8 9 10 11 12 14 15 16 18 19 21 23 25 27 30 31 33 34 36 39 41 42 45 46 48 49 53 55 56 57 58 59 62 880 63 0 1 0 2 6 8 9 11 14 17 18 19 26 28 31 32 36 37 38 40 43 44 47 50 52 53 54 55 57 59 881 63 0 1 1 2 5 6 7 8 11 12 13 15 18 19 21 24 27 29 30 31 32 33 36 41 44 47 48 50 52 55 57 58 59 60 61 62 882 63 1 0 e 883 63 1 0 e 884 63 1 0 e 885 63 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 886 63 1 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 887 63 1 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 888 63 1 0 4 5 6 7 9 11 12 16 18 26 27 28 31 32 33 36 40 41 43 48 49 51 53 56 59 60 61 62 889 63 1 0 3 10 12 16 18 19 20 26 31 32 33 34 38 39 40 42 43 44 46 47 48 49 50 51 53 54 55 57 59 61 890 63 1 0 4 9 11 13 14 16 17 18 19 20 21 22 23 26 28 29 30 31 33 35 37 39 41 42 43 44 45 47 50 55 56 58 59 60 61 62 891 63 1 1 e 892 63 1 1 e 893 63 1 1 e 894 63 1 1 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 895 63 1 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 896 63 1 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 897 63 1 1 2 3 4 6 7 9 11 12 13 14 18 19 20 21 22 23 24 25 26 30 32 33 35 37 39 40 41 44 46 48 49 51 52 54 55 60 61 62 898 63 1 1 0 1 4 6 7 8 9 12 13 18 21 22 27 30 33 34 37 38 40 42 43 44 48 49 50 52 53 57 58 59 61 899 63 1 1 0 1 2 3 4 6 10 11 15 16 22 25 31 32 33 34 35 37 39 42 45 49 50 52 54 58 60 61 900 64 0 0 e 901 64 0 0 e 902 64 0 0 e 903 64 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 904 64 0 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 905 64 0 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 906 64 0 0 3 5 7 9 10 15 16 19 20 21 25 27 28 32 33 37 39 43 46 48 50 52 54 58 59 60 63 907 64 0 0 0 1 4 8 10 12 13 15 16 19 20 23 24 26 27 30 33 34 40 43 45 49 52 55 56 60 62 908 64 0 0 1 3 4 5 6 7 11 13 14 15 16 19 20 24 25 26 30 38 39 40 48 50 52 54 55 57 59 61 909 64 0 1 e 910 64 0 1 e 911 64 0 1 e 912 64 0 1 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 913 64 0 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 914 64 0 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 915 64 0 1 1 2 6 7 8 10 11 12 14 20 23 26 27 28 30 35 36 44 46 48 50 51 52 54 56 57 61 62 916 64 0 1 5 6 7 12 14 15 16 18 19 20 22 26 29 30 31 32 34 36 37 40 41 43 48 52 54 55 57 59 60 917 64 0 1 0 3 5 6 8 10 12 14 16 17 18 21 23 25 27 29 33 34 35 37 38 41 46 49 50 52 55 57 59 60 61 62 918 64 1 0 e 919 64 1 0 e 920 64 1 0 e 921 64 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 922 64 1 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 923 64 1 0 0 1 2 3 4 5 6 7 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 924 64 1 0 1 2 5 6 7 11 15 16 17 19 20 21 23 24 26 27 28 29 30 32 33 34 36 37 38 40 44 45 47 49 52 53 56 57 59 60 925 64 1 0 1 2 4 5 6 7 11 12 13 14 18 20 22 23 26 27 28 34 35 36 37 38 40 41 43 44 45 52 55 58 926 64 1 0 0 2 3 4 6 7 10 16 17 18 19 21 22 23 25 26 27 31 32 34 35 36 37 38 40 41 45 46 48 50 53 54 57 59 61 62 927 64 1 1 e 928 64 1 1 e 929 64 1 1 e 930 64 1 1 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 931 64 1 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 932 64 1 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 57 58 59 60 61 62 63 933 64 1 1 2 6 8 9 11 12 13 14 15 17 18 19 21 23 26 27 28 30 31 34 35 36 37 39 42 45 51 53 54 55 60 62 934 64 1 1 0 1 2 3 4 8 11 12 13 16 17 20 21 22 26 28 29 32 36 37 38 40 43 44 45 47 48 49 51 52 56 60 61 62 935 64 1 1 4 5 6 7 10 19 20 21 24 25 26 27 28 29 30 33 36 43 44 45 46 47 50 51 52 55 56 59 61 62 63 936 65 0 0 e 937 65 0 0 e 938 65 0 0 e 939 65 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 940 65 0 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 941 65 0 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 942 65 0 0 1 3 7 10 18 24 25 27 28 29 30 33 35 37 38 39 41 42 43 44 48 52 53 55 56 57 62 63 943 65 0 0 1 2 6 11 12 15 16 17 18 19 23 24 25 28 34 35 36 37 38 42 43 44 46 47 49 53 56 57 59 61 63 944 65 0 0 2 7 11 14 16 19 20 21 22 23 25 31 32 34 36 38 39 40 42 44 45 46 52 53 56 57 59 60 61 62 63 945 65 0 1 e 946 65 0 1 e 947 65 0 1 e 948 65 0 1 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 949 65 0 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 950 65 0 1 0 1 2 3 4 5 6 7 8 9 10 11 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 951 65 0 1 1 5 6 8 10 11 12 13 15 16 18 19 22 26 27 29 32 34 38 40 43 48 52 53 59 61 952 65 0 1 0 1 2 4 5 10 11 12 14 17 21 22 23 25 27 28 29 31 32 33 35 36 37 38 41 42 43 44 45 48 50 53 56 57 59 60 61 62 63 953 65 0 1 5 8 11 12 13 16 17 19 20 21 23 28 30 32 33 36 37 39 41 45 48 49 50 51 52 56 57 58 59 61 62 63 954 65 1 0 e 955 65 1 0 e 956 65 1 0 e 957 65 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 958 65 1 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 959 65 1 0 0 1 2 3 4 5 6 7 8 9 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 960 65 1 0 1 2 3 7 9 12 14 15 16 21 23 24 26 28 29 32 36 42 43 44 45 46 49 50 51 52 55 58 63 64 961 65 1 0 0 2 7 10 11 17 21 22 23 24 26 28 29 34 35 36 38 40 43 44 47 51 54 56 57 58 60 62 63 962 65 1 0 0 1 2 3 6 7 9 10 11 12 13 18 19 23 25 26 27 28 29 31 33 34 35 38 39 41 42 46 47 48 49 51 53 54 55 56 57 58 59 61 62 63 64 963 65 1 1 e 964 65 1 1 e 965 65 1 1 e 966 65 1 1 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 967 65 1 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 968 65 1 1 0 1 2 3 4 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 969 65 1 1 1 2 4 8 10 12 18 21 23 26 28 29 31 32 33 34 38 40 41 42 43 46 47 48 49 51 52 53 54 56 59 61 63 64 970 65 1 1 3 6 7 13 19 20 22 24 25 26 27 29 31 33 34 40 41 42 44 46 47 50 52 53 54 55 56 57 59 61 62 63 971 65 1 1 2 3 4 6 11 15 17 20 22 24 25 26 27 28 29 32 35 40 44 46 47 51 52 59 61 972 211 0 0 e 973 211 0 0 e 974 211 0 0 e 975 211 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 976 211 0 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 977 211 0 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 978 211 0 0 2 4 5 6 9 11 13 14 15 16 20 21 23 27 28 30 31 33 36 37 38 40 42 43 44 45 46 47 48 51 54 55 56 57 59 62 63 65 66 67 68 69 71 72 74 75 76 77 78 79 82 84 87 89 90 91 101 104 105 107 108 110 111 113 117 118 119 121 123 125 127 129 131 134 143 145 151 152 153 154 156 157 158 160 162 164 165 166 171 172 173 174 175 177 179 181 182 185 188 192 194 198 199 200 204 209 979 211 0 0 1 3 8 9 10 15 16 17 18 19 21 23 24 28 30 34 36 38 39 40 41 51 54 56 58 59 60 61 62 63 65 67 70 73 74 75 79 81 83 86 89 90 93 95 96 97 98 103 106 107 110 111 112 114 117 119 123 126 130 132 137 139 142 145 147 149 150 151 154 155 156 157 159 165 166 167 168 170 171 173 175 176 177 178 180 181 187 188 189 190 192 199 202 203 206 208 209 980 211 0 0 0 1 2 3 5 8 9 12 13 14 16 17 18 19 22 24 30 31 34 35 38 42 44 46 47 49 50 51 53 57 63 64 66 68 69 70 71 72 75 76 77 78 80 81 83 84 88 89 90 92 95 96 98 100 101 103 105 106 108 109 110 112 115 117 121 122 127 132 133 136 142 147 149 150 151 152 153 155 156 158 160 162 163 166 168 170 172 173 174 178 181 183 184 186 187 188 189 191 195 196 199 200 201 203 204 206 207 208 209 981 211 0 1 e 982 211 0 1 e 983 211 0 1 e 984 211 0 1 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 985 211 0 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 986 211 0 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 987 211 0 1 1 3 6 7 8 10 13 14 15 17 18 19 20 22 23 25 26 27 28 29 30 31 33 34 35 37 38 41 42 43 45 47 48 50 52 53 57 60 61 62 64 65 69 71 72 76 77 79 81 83 84 97 98 99 100 105 106 108 109 112 115 116 118 120 122 124 126 128 129 130 131 132 137 138 140 142 143 144 145 146 147 149 153 154 157 160 162 163 164 170 173 176 177 178 180 182 183 185 188 189 190 193 196 198 200 201 205 208 988 211 0 1 1 4 5 6 8 12 13 15 16 17 18 20 22 23 24 29 30 31 32 33 35 36 37 39 42 49 50 56 57 58 60 62 71 72 74 76 78 81 83 85 89 94 95 96 97 99 101 102 104 105 106 107 108 109 110 112 114 115 119 121 122 123 125 126 127 128 130 132 133 134 135 137 138 140 141 142 145 148 149 154 155 156 157 158 159 160 161 162 163 165 166 167 169 174 175 176 179 180 184 187 188 189 191 192 194 197 199 200 201 202 204 205 206 207 208 989 211 0 1 0 1 6 9 10 15 18 21 24 25 27 28 29 30 31 33 35 39 40 41 45 47 50 51 52 55 57 63 65 66 67 68 70 71 77 79 80 83 85 86 87 90 91 94 95 96 97 99 102 106 107 113 115 116 117 118 121 123 124 127 129 130 133 134 135 137 139 141 142 143 144 146 147 150 157 159 160 163 166 167 176 177 178 179 181 183 185 186 187 193 195 196 197 201 202 205 206 208 209 990 211 1 0 e 991 211 1 0 e 992 211 1 0 e 993 211 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 994 211 1 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 995 211 1 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 996 211 1 0 1 4 5 9 10 12 13 17 19 21 22 23 24 25 26 30 31 34 39 45 47 49 50 51 53 54 56 58 60 61 62 65 66 67 71 72 73 77 78 79 81 82 83 88 91 92 98 99 102 107 108 110 115 116 117 118 119 122 124 128 132 136 137 138 139 141 143 145 148 151 152 155 156 157 161 162 170 171 176 177 178 179 181 182 185 187 188 189 191 192 197 198 199 201 204 205 206 207 208 209 210 997 211 1 0 1 3 4 7 13 15 18 19 23 26 29 31 33 34 40 41 42 44 47 50 51 52 54 56 57 58 60 61 64 66 67 68 71 75 77 78 79 81 82 83 85 88 89 90 91 92 94 95 96 97 98 99 100 102 107 110 111 113 114 115 116 117 119 120 122 123 124 125 126 127 130 132 133 134 137 139 152 153 156 157 161 162 164 167 169 170 171 172 179 180 181 182 183 184 190 191 194 196 201 207 208 209 998 211 1 0 0 1 3 5 6 7 8 10 11 12 14 19 22 23 24 30 32 40 42 43 45 46 47 48 52 55 56 60 62 63 64 67 69 72 74 76 77 79 81 85 90 91 92 93 94 96 97 100 101 102 103 104 105 107 108 110 114 117 118 126 130 131 132 134 135 137 138 139 141 143 145 147 148 149 153 154 155 156 158 160 161 163 165 166 168 169 172 173 176 178 179 183 184 185 186 187 189 194 195 197 201 202 208 210 999 211 1 1 e 1000 211 1 1 e 1001 211 1 1 e 1002 211 1 1 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 1003 211 1 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 1004 211 1 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 1005 211 1 1 1 3 4 5 6 7 8 11 12 13 14 18 22 23 24 27 28 30 31 32 34 35 36 37 38 39 40 42 43 45 47 48 52 53 57 66 68 69 71 72 74 78 82 86 87 89 90 94 95 97 101 106 108 109 110 112 116 118 119 121 127 128 133 134 137 138 139 141 145 146 147 148 149 150 152 154 155 156 157 158 159 161 163 164 167 168 170 172 174 176 177 179 184 185 188 189 192 195 196 198 199 200 201 203 204 206 207 208 210 1006 211 1 1 3 6 7 9 10 11 12 14 15 19 23 26 31 32 34 35 36 37 38 39 40 41 42 43 45 49 53 58 59 60 61 62 71 72 73 74 76 78 79 84 85 86 89 90 92 93 94 101 104 106 111 112 113 115 116 118 120 121 122 123 124 126 127 128 133 134 135 139 140 141 143 144 145 147 148 151 154 156 157 161 162 164 167 168 169 170 171 172 174 175 176 178 179 180 182 184 185 189 190 191 193 197 200 201 203 205 206 209 1007 211 1 1 0 4 5 6 12 19 20 22 23 24 25 27 38 39 40 43 44 45 46 48 50 51 52 53 54 55 56 58 61 63 65 67 70 71 72 74 75 76 77 78 79 81 82 84 86 87 88 89 92 93 96 97 99 102 105 111 114 117 120 122 126 127 129 130 131 133 135 136 140 141 142 143 145 148 150 151 152 156 157 159 160 162 165 166 167 172 178 180 182 183 184 187 190 192 195 198 199 200 203 206 207 208 209 210 1008 224 0 0 e 1009 224 0 0 e 1010 224 0 0 e 1011 224 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 1012 224 0 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 1013 224 0 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 1014 224 0 0 4 6 7 8 13 14 16 18 19 24 26 27 30 34 36 40 42 46 47 48 49 50 52 55 56 58 60 61 62 65 66 67 69 74 75 76 77 78 79 81 82 88 90 91 93 94 95 97 98 99 100 102 105 106 109 110 111 113 115 117 118 121 123 126 127 128 130 131 132 133 134 137 139 140 142 146 147 149 151 152 153 154 156 157 159 161 162 163 164 165 168 169 174 175 176 177 178 180 184 186 187 188 189 190 192 193 195 198 202 209 211 213 216 219 1015 224 0 0 0 2 4 5 6 10 11 12 13 14 16 21 24 25 28 31 32 35 39 40 41 43 44 46 47 48 52 53 55 57 61 65 67 71 73 74 77 80 81 82 83 86 87 88 92 93 96 97 98 103 105 107 108 109 111 114 115 117 118 120 122 123 128 130 132 133 134 136 139 140 141 144 148 150 151 152 153 154 156 158 159 161 164 167 169 173 174 178 180 181 183 184 187 190 191 193 195 197 198 199 203 208 210 211 213 214 218 219 220 221 222 1016 224 0 0 0 1 2 3 4 5 6 8 9 13 14 15 18 19 22 23 24 25 28 35 48 52 54 58 59 60 63 64 65 66 72 73 74 75 79 80 81 84 86 88 89 93 96 98 99 100 108 109 111 112 113 115 116 118 119 123 124 125 127 129 130 131 136 137 138 139 140 143 145 148 150 152 154 155 156 165 166 168 169 170 171 175 177 178 181 186 188 191 192 193 202 203 204 206 209 211 212 213 215 220 221 1017 224 0 1 e 1018 224 0 1 e 1019 224 0 1 e 1020 224 0 1 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 1021 224 0 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 1022 224 0 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 1023 224 0 1 4 5 7 8 9 11 16 19 20 21 25 27 30 33 34 36 37 38 40 43 44 45 47 49 50 53 54 55 56 58 61 62 63 64 65 68 70 72 77 79 81 83 84 86 87 89 91 92 94 98 99 101 105 106 107 108 109 110 112 115 116 118 123 124 131 133 135 136 137 138 140 141 142 143 145 146 149 153 156 157 158 161 163 164 165 166 168 169 170 171 172 173 174 176 177 178 179 180 184 185 186 187 188 193 196 198 201 205 206 208 209 212 213 214 215 216 218 219 220 1024 224 0 1 1 2 6 7 9 11 12 14 15 16 19 20 21 22 23 25 29 30 31 33 35 37 40 41 43 44 46 47 49 50 52 53 56 57 58 61 63 64 65 66 67 68 71 72 73 74 75 76 78 81 82 84 86 87 88 89 92 93 95 96 98 104 105 107 111 116 119 121 124 125 127 128 129 134 139 140 141 142 146 147 148 150 153 154 156 159 164 166 168 169 171 172 175 176 178 179 180 181 184 186 188 189 191 196 198 203 204 206 207 208 209 210 212 214 216 218 219 222 1025 224 0 1 0 6 7 8 10 11 12 13 14 16 17 18 21 22 25 27 29 30 31 35 36 39 40 42 44 45 46 47 48 49 52 54 55 58 60 64 65 66 72 73 74 75 76 77 80 81 82 84 90 92 94 97 98 99 102 103 105 106 107 112 114 115 116 121 122 126 129 132 136 141 142 144 147 148 149 150 152 153 155 160 161 162 163 164 167 168 174 176 178 180 181 182 183 184 186 187 192 195 196 197 198 199 202 204 205 206 208 209 210 211 212 213 214 216 220 221 222 223 1026 224 1 0 e 1027 224 1 0 e 1028 224 1 0 e 1029 224 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 1030 224 1 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 1031 224 1 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 1032 224 1 0 2 7 8 9 10 12 15 18 19 23 24 26 27 28 35 37 38 40 41 42 43 46 48 51 52 54 55 56 60 61 62 67 68 71 72 76 78 80 81 88 89 90 92 94 95 96 97 98 99 101 105 107 111 113 115 117 118 119 121 127 129 130 132 134 141 143 144 145 147 148 150 156 157 159 160 163 166 167 171 172 173 174 175 176 178 180 181 182 183 187 188 189 190 191 195 196 200 201 203 205 210 211 212 214 216 219 223 1033 224 1 0 0 1 5 6 8 9 10 12 16 19 20 22 24 29 30 32 34 44 45 46 47 49 51 55 56 57 64 68 69 73 74 76 81 83 85 86 87 89 91 93 95 96 97 99 100 101 102 104 105 106 107 109 110 111 112 115 116 118 124 125 127 129 130 133 138 139 141 143 145 146 149 150 154 156 161 162 163 164 166 169 170 171 172 174 177 179 180 183 188 190 191 193 194 196 197 200 203 204 205 206 208 212 216 217 218 221 1034 224 1 0 2 4 6 7 8 11 15 16 17 19 21 22 23 24 25 27 29 30 31 33 40 43 44 45 46 47 50 51 53 54 59 61 62 64 66 67 68 69 71 74 77 79 81 83 84 86 91 95 96 97 98 99 100 103 104 107 108 110 114 117 119 121 122 124 125 127 128 131 132 133 134 137 143 147 149 150 151 153 156 157 159 161 163 164 167 169 171 173 174 175 177 178 179 180 181 185 186 189 190 191 192 194 196 199 201 202 207 209 212 213 216 222 223 1035 224 1 1 e 1036 224 1 1 e 1037 224 1 1 e 1038 224 1 1 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 1039 224 1 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 1040 224 1 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 1041 224 1 1 1 2 3 5 7 9 10 11 13 15 16 19 24 25 27 28 31 36 37 40 45 47 50 52 54 55 60 61 63 64 65 67 68 69 71 72 80 82 83 84 85 86 90 92 93 95 96 97 98 104 106 107 108 109 111 114 115 117 119 120 121 123 124 126 127 129 131 135 136 137 138 139 140 142 144 145 148 151 153 154 157 160 163 164 166 167 169 170 173 174 176 177 178 179 183 188 189 190 191 194 196 197 200 202 206 209 210 211 214 216 218 219 221 1042 224 1 1 2 3 4 5 7 9 10 13 14 15 17 18 19 21 23 26 27 33 36 37 40 42 44 55 56 59 61 63 64 65 67 68 69 70 72 73 74 75 77 81 82 87 88 89 90 97 98 101 102 104 107 109 111 112 115 116 118 119 121 122 123 126 127 128 129 132 133 134 135 138 139 142 144 145 147 151 155 156 158 159 161 164 168 169 175 177 178 179 180 184 185 186 189 191 192 195 196 197 200 201 202 203 204 206 208 209 210 211 212 215 219 220 222 1043 224 1 1 0 3 5 7 9 10 13 14 16 17 19 23 24 25 26 27 29 33 34 36 42 46 49 50 57 58 60 62 63 65 68 69 74 75 76 79 83 84 85 87 88 92 96 97 99 100 101 105 107 109 110 111 112 114 115 119 125 128 129 131 132 133 136 137 140 143 144 147 150 151 155 157 160 161 163 164 165 166 168 170 171 173 177 179 182 183 184 185 186 188 190 195 202 203 211 212 213 216 218 219 223 1044 247 0 0 e 1045 247 0 0 e 1046 247 0 0 e 1047 247 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 1048 247 0 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 1049 247 0 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 1050 247 0 0 1 8 9 13 15 16 21 22 27 29 30 32 33 35 37 41 43 44 45 46 50 51 52 53 57 60 61 62 64 68 69 70 77 78 79 82 85 88 89 90 92 93 94 95 96 99 101 103 105 106 108 109 111 113 116 117 118 119 121 124 126 127 128 130 131 134 136 137 138 139 142 143 145 148 150 155 158 160 163 164 165 167 168 172 174 175 179 183 185 186 187 191 192 194 195 200 201 203 206 208 209 213 214 215 217 218 219 221 222 225 226 227 233 234 235 237 239 240 241 243 246 1051 247 0 0 0 1 3 8 11 13 15 17 18 28 29 30 31 32 35 36 37 39 41 42 43 44 50 52 54 55 60 62 63 64 66 67 70 71 73 76 77 78 82 83 84 86 88 91 96 98 101 103 105 106 108 109 110 111 114 115 116 117 119 121 123 125 126 129 130 131 132 133 136 138 144 147 149 150 151 155 158 161 164 165 170 172 174 175 176 178 183 184 185 187 191 193 194 195 199 200 204 207 208 209 211 213 214 219 220 221 223 226 227 228 230 231 232 233 235 238 239 242 243 245 1052 247 0 0 0 1 4 6 7 8 10 11 20 21 23 25 26 28 30 31 38 40 41 42 44 48 49 51 52 53 58 60 61 64 70 73 74 81 82 84 86 88 89 90 93 94 98 100 101 102 103 107 108 109 110 111 112 113 117 118 120 122 126 127 128 129 133 135 137 138 141 144 146 152 156 160 161 162 164 171 172 173 174 175 177 178 179 182 184 186 188 190 191 192 193 195 197 198 199 200 203 206 209 214 215 216 220 223 227 230 232 236 237 238 239 240 241 243 246 1053 247 0 1 e 1054 247 0 1 e 1055 247 0 1 e 1056 247 0 1 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 1057 247 0 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 1058 247 0 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 1059 247 0 1 2 3 7 12 15 18 21 23 24 26 27 29 31 34 36 37 44 45 52 53 55 59 60 61 62 64 66 67 69 70 71 79 80 81 83 84 87 88 89 90 91 92 94 95 96 97 100 104 105 109 111 112 114 115 116 118 119 123 124 126 127 131 132 133 135 136 137 139 140 142 143 144 145 147 148 150 152 155 156 157 158 159 162 163 166 167 168 169 170 171 173 176 177 179 182 183 186 192 195 198 201 203 204 205 207 208 209 211 212 214 216 217 218 219 221 223 225 226 227 229 232 235 238 239 242 244 245 246 1060 247 0 1 1 4 6 7 8 9 10 13 14 15 16 18 19 22 24 25 27 28 30 34 36 37 40 42 43 45 46 48 49 53 54 55 56 58 59 60 61 62 64 65 67 69 72 76 77 79 80 81 83 84 86 87 88 89 91 92 95 97 99 101 102 104 106 107 110 111 112 114 115 116 117 119 120 121 122 123 127 128 129 132 134 135 136 137 138 139 140 141 142 143 145 146 148 151 154 155 161 162 163 165 166 168 171 174 178 180 181 183 185 186 187 195 198 199 200 202 203 207 208 210 211 214 220 222 223 224 226 227 228 229 230 232 233 237 242 245 1061 247 0 1 0 4 5 7 9 10 15 19 23 24 26 28 31 32 34 35 38 39 40 44 45 48 49 53 57 61 62 65 66 69 74 78 82 83 84 85 86 88 94 97 98 99 102 103 104 105 106 107 108 109 112 113 114 115 116 117 119 121 123 127 128 140 143 146 151 152 153 154 157 158 162 163 164 165 166 172 173 178 179 182 185 186 188 189 190 191 194 197 199 200 201 202 203 204 206 209 211 212 218 219 220 222 224 225 229 232 235 239 240 241 242 243 1062 247 1 0 e 1063 247 1 0 e 1064 247 1 0 e 1065 247 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 1066 247 1 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 1067 247 1 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 1068 247 1 0 1 3 4 8 9 15 17 18 19 20 21 22 23 24 31 32 33 34 35 41 43 45 47 48 50 51 53 54 58 59 60 61 62 63 64 66 67 68 71 73 74 75 76 78 79 80 81 82 84 85 86 90 91 93 94 99 100 102 103 105 106 107 108 110 111 114 115 117 123 124 126 128 132 135 136 138 139 140 141 142 143 145 146 150 151 156 158 160 161 162 168 173 176 178 180 181 182 186 188 190 191 193 195 197 198 199 205 206 207 209 212 216 218 219 220 225 226 229 231 233 236 241 242 244 246 1069 247 1 0 0 5 6 9 11 15 16 22 23 24 27 29 30 34 37 38 43 44 46 47 48 49 50 51 53 54 59 60 61 62 65 66 69 70 71 74 76 78 81 83 84 87 90 93 94 95 99 102 105 106 109 110 111 112 114 117 119 123 124 126 128 129 131 135 138 140 141 143 144 145 148 149 152 153 155 159 161 162 167 168 171 172 175 177 181 182 184 188 189 191 192 196 197 200 203 204 205 206 210 211 213 217 218 220 221 223 225 227 229 233 238 239 240 241 242 244 1070 247 1 0 2 5 6 8 10 11 12 13 16 18 20 22 23 25 26 27 30 31 32 33 37 38 41 45 46 49 50 51 53 54 55 58 59 60 61 62 64 65 66 68 70 74 75 77 80 81 84 88 93 94 96 97 99 107 113 114 116 119 120 121 124 126 127 128 130 134 135 136 137 138 141 142 143 144 145 147 149 153 154 156 158 159 160 161 164 165 167 168 169 170 172 173 175 177 179 181 182 183 184 185 187 190 191 192 193 195 196 198 199 201 205 207 208 209 210 212 213 219 220 221 222 223 224 225 226 227 230 231 235 237 238 245 246 1071 247 1 1 e 1072 247 1 1 e 1073 247 1 1 e 1074 247 1 1 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 1075 247 1 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 1076 247 1 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 1077 247 1 1 1 2 4 5 8 9 10 11 12 16 17 18 19 23 24 29 31 32 34 38 40 41 43 45 46 48 49 50 54 56 58 59 62 63 64 65 68 70 71 74 75 77 78 80 81 87 88 90 93 97 103 107 108 110 111 114 115 116 118 119 120 121 127 129 133 135 137 142 143 144 145 147 150 152 156 157 159 160 161 164 165 166 171 172 175 177 178 179 181 185 186 187 188 190 191 194 197 199 201 205 207 208 210 215 216 218 219 221 223 226 231 233 235 236 237 238 239 241 242 243 246 1078 247 1 1 1 3 7 9 10 11 16 17 18 19 20 21 22 25 29 32 33 35 36 37 38 40 41 45 46 48 49 52 54 58 59 64 65 67 68 71 73 75 76 81 82 85 86 87 89 91 92 93 95 98 100 102 103 106 109 110 111 112 113 114 115 116 117 118 124 128 130 131 132 133 134 136 138 147 148 149 154 156 158 159 160 162 163 168 170 172 173 174 175 177 178 180 182 184 185 187 190 192 195 196 197 199 200 201 203 204 206 209 212 215 216 217 223 224 225 226 227 230 237 239 240 241 242 243 1079 247 1 1 2 4 6 7 8 9 10 11 13 15 17 18 21 22 23 24 25 26 30 32 33 34 35 37 40 42 43 46 49 50 52 53 56 58 60 61 62 63 64 65 66 68 75 76 80 82 83 88 91 94 96 99 100 101 105 106 108 110 111 114 115 116 117 118 124 125 126 127 133 135 140 141 146 149 150 153 154 156 157 158 160 162 166 167 168 173 174 175 176 177 178 180 181 182 184 185 187 192 193 194 197 198 199 200 204 206 207 208 209 211 212 213 214 216 220 222 223 227 230 241 244 246 1080 1 0 0 f 1081 1 0 0 f 1082 1 0 0 f 1083 1 0 0 e 1084 1 0 0 e 1085 1 0 0 e 1086 1 0 0 e 1087 1 0 0 e 1088 1 0 0 f 1089 1 0 1 f 1090 1 0 1 f 1091 1 0 1 f 1092 1 0 1 e 1093 1 0 1 e 1094 1 0 1 e 1095 1 0 1 e 1096 1 0 1 e 1097 1 0 1 e 1098 1 1 0 f 1099 1 1 0 f 1100 1 1 0 f 1101 1 1 0 e 1102 1 1 0 e 1103 1 1 0 e 1104 1 1 0 f 1105 1 1 0 e 1106 1 1 0 e 1107 1 1 1 f 1108 1 1 1 f 1109 1 1 1 f 1110 1 1 1 e 1111 1 1 1 e 1112 1 1 1 e 1113 1 1 1 f 1114 1 1 1 e 1115 1 1 1 e 1116 31 0 0 0 1117 31 0 0 30 1118 31 0 0 11 1119 31 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 1120 31 0 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 1121 31 0 0 0 1 2 3 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 1122 31 0 0 0 3 4 5 6 8 10 13 17 18 19 22 23 24 29 1123 31 0 0 2 4 5 9 11 15 16 20 21 24 26 28 29 1124 31 0 0 3 5 7 8 11 12 13 18 19 21 23 24 25 26 27 29 30 1125 31 0 1 0 1126 31 0 1 30 1127 31 0 1 26 1128 31 0 1 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 1129 31 0 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 1130 31 0 1 0 1 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 1131 31 0 1 0 3 4 6 8 9 10 14 17 19 20 21 24 25 27 28 30 1132 31 0 1 3 5 6 7 8 9 10 11 12 14 16 17 22 23 25 28 30 1133 31 0 1 1 2 3 6 9 10 12 14 15 16 17 21 27 29 30 1134 31 1 0 0 1135 31 1 0 30 1136 31 1 0 9 1137 31 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 1138 31 1 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 1139 31 1 0 0 1 2 3 4 5 6 7 8 9 10 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 1140 31 1 0 0 4 6 7 8 9 10 11 12 13 17 19 20 21 25 28 1141 31 1 0 1 4 5 8 12 14 16 17 19 20 24 26 30 1142 31 1 0 2 3 4 5 8 9 10 12 15 17 20 21 22 23 26 27 28 29 1143 31 1 1 0 1144 31 1 1 30 1145 31 1 1 6 1146 31 1 1 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 1147 31 1 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 1148 31 1 1 0 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 1149 31 1 1 4 5 7 9 12 13 21 23 25 26 27 28 30 1150 31 1 1 0 6 7 9 11 12 13 17 20 22 23 24 25 26 28 30 1151 31 1 1 0 1 2 4 5 9 12 14 15 17 19 20 21 22 23 25 26 27 28 29 1152 32 0 0 0 1153 32 0 0 31 1154 32 0 0 28 1155 32 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 1156 32 0 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 1157 32 0 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 26 27 28 29 30 31 1158 32 0 0 0 1 3 4 5 6 7 13 14 15 16 17 18 19 22 25 27 28 29 30 1159 32 0 0 0 2 4 5 9 11 14 18 19 20 21 22 23 26 29 1160 32 0 0 0 3 5 8 9 13 23 25 26 27 30 31 1161 32 0 1 0 1162 32 0 1 31 1163 32 0 1 1 1164 32 0 1 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 1165 32 0 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 1166 32 0 1 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 1167 32 0 1 0 2 3 4 5 6 8 9 10 14 15 17 18 21 24 25 26 28 31 1168 32 0 1 2 4 5 6 7 8 12 14 17 19 20 21 22 23 25 1169 32 0 1 0 1 3 4 5 6 10 13 15 17 19 20 25 27 29 31 1170 32 1 0 0 1171 32 1 0 31 1172 32 1 0 4 1173 32 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 1174 32 1 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 1175 32 1 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 19 20 21 22 23 24 25 26 27 28 29 30 31 1176 32 1 0 0 1 3 5 6 10 11 13 15 16 17 19 26 28 1177 32 1 0 1 6 7 8 9 10 11 12 14 15 18 19 20 22 25 26 29 30 31 1178 32 1 0 0 2 4 5 6 8 9 11 12 14 16 18 19 20 21 22 24 25 26 28 29 1179 32 1 1 0 1180 32 1 1 31 1181 32 1 1 9 1182 32 1 1 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 1183 32 1 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 1184 32 1 1 0 1 2 3 4 5 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 1185 32 1 1 2 6 11 13 14 17 19 21 24 26 30 1186 32 1 1 0 1 2 5 6 7 11 12 16 21 22 24 25 30 31 1187 32 1 1 1 2 4 5 9 12 13 14 15 17 19 20 22 23 28 1188 33 0 0 0 1189 33 0 0 32 1190 33 0 0 26 1191 33 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 1192 33 0 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 1193 33 0 0 0 1 2 3 4 5 6 7 8 9 10 11 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 1194 33 0 0 0 2 3 4 5 7 8 9 10 11 13 15 17 18 25 26 27 28 32 1195 33 0 0 1 6 9 11 12 15 17 18 19 23 24 26 28 30 32 1196 33 0 0 3 5 11 12 13 16 20 21 23 24 26 27 29 31 1197 33 0 1 0 1198 33 0 1 32 1199 33 0 1 24 1200 33 0 1 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 1201 33 0 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 1202 33 0 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 1203 33 0 1 0 3 9 10 12 14 15 17 18 19 22 23 26 27 28 29 30 1204 33 0 1 2 3 4 5 8 9 16 18 21 22 23 24 25 26 27 28 32 1205 33 0 1 0 1 3 5 6 7 13 15 16 17 19 20 22 23 24 25 26 30 1206 33 1 0 0 1207 33 1 0 32 1208 33 1 0 29 1209 33 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 1210 33 1 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 1211 33 1 0 0 1 2 3 4 5 6 7 8 9 10 11 12 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 1212 33 1 0 1 3 4 5 8 9 11 12 13 14 15 17 18 20 21 29 30 31 32 1213 33 1 0 1 2 8 11 14 20 21 22 23 27 30 31 32 1214 33 1 0 2 3 4 8 10 14 16 19 20 22 25 27 30 31 1215 33 1 1 0 1216 33 1 1 32 1217 33 1 1 28 1218 33 1 1 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 1219 33 1 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 1220 33 1 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 26 27 28 29 30 31 32 1221 33 1 1 3 6 7 9 12 14 15 16 21 22 23 24 25 26 28 30 31 32 1222 33 1 1 5 6 11 12 17 18 20 23 25 27 31 1223 33 1 1 0 3 6 8 9 11 13 15 17 18 20 23 24 28 29 30 1224 63 0 0 0 1225 63 0 0 62 1226 63 0 0 30 1227 63 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 1228 63 0 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 1229 63 0 0 0 1 2 3 4 5 6 7 8 9 10 11 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 1230 63 0 0 2 4 9 12 13 15 17 21 22 23 24 25 27 28 29 31 32 35 36 37 40 42 47 49 56 57 59 60 61 62 1231 63 0 0 0 2 3 5 6 7 11 12 13 15 16 17 21 22 23 24 25 26 27 28 29 32 38 39 40 42 43 45 46 48 50 52 53 55 56 60 61 1232 63 0 0 0 4 9 11 12 14 17 18 19 20 21 22 23 27 30 32 36 37 38 39 42 45 46 47 48 49 51 56 57 58 59 60 61 1233 63 0 1 0 1234 63 0 1 62 1235 63 0 1 42 1236 63 0 1 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 1237 63 0 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 1238 63 0 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 62 1239 63 0 1 0 1 4 5 7 9 10 12 14 18 19 27 29 32 33 34 35 36 38 42 43 44 45 49 50 51 55 56 57 58 62 1240 63 0 1 3 5 6 7 8 11 20 21 23 24 28 29 30 31 32 34 37 38 40 44 46 48 53 57 59 1241 63 0 1 2 3 5 6 8 10 11 12 14 16 17 18 21 22 24 26 27 28 30 33 35 36 37 41 50 52 54 55 56 57 58 59 61 1242 63 1 0 0 1243 63 1 0 62 1244 63 1 0 62 1245 63 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 1246 63 1 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 1247 63 1 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 1248 63 1 0 1 2 3 5 6 7 10 11 14 16 17 18 19 20 21 22 23 24 26 29 30 31 32 33 34 35 36 37 38 39 41 42 43 44 45 46 47 48 49 51 54 57 59 60 62 1249 63 1 0 2 4 5 7 8 9 10 11 12 14 15 19 20 22 24 26 27 31 36 39 42 44 47 48 50 51 52 53 55 57 58 62 1250 63 1 0 0 5 6 9 11 12 13 15 16 17 18 19 20 21 22 23 24 25 29 31 33 35 36 37 40 43 45 47 50 52 53 54 56 58 59 62 1251 63 1 1 0 1252 63 1 1 62 1253 63 1 1 45 1254 63 1 1 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 1255 63 1 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 1256 63 1 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 1257 63 1 1 0 4 6 8 10 14 15 16 18 19 20 23 26 28 30 33 34 37 40 42 44 47 48 49 51 53 54 55 57 60 1258 63 1 1 3 5 7 8 9 12 13 16 18 19 20 21 22 23 24 29 30 31 32 33 34 36 37 39 40 41 44 45 46 47 49 50 52 55 56 57 58 61 62 1259 63 1 1 1 3 4 7 8 10 12 13 16 21 23 24 26 28 29 30 33 38 41 42 44 46 47 48 49 50 51 52 54 56 57 58 60 62 1260 64 0 0 0 1261 64 0 0 63 1262 64 0 0 19 1263 64 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 1264 64 0 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 1265 64 0 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 55 56 57 58 59 60 61 62 63 1266 64 0 0 0 1 4 5 7 10 11 12 13 14 15 16 17 19 22 23 24 28 29 32 33 34 35 36 47 48 49 50 55 56 57 59 60 61 62 1267 64 0 0 0 1 3 4 5 10 12 15 18 19 20 22 23 24 27 38 40 41 42 43 47 48 52 55 57 59 61 62 63 1268 64 0 0 2 4 6 7 9 13 17 18 20 21 24 27 34 36 37 38 39 40 45 46 47 54 56 59 61 63 1269 64 0 1 0 1270 64 0 1 63 1271 64 0 1 51 1272 64 0 1 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 1273 64 0 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 1274 64 0 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 1275 64 0 1 3 5 7 9 10 15 16 17 18 19 24 25 26 27 28 30 31 32 36 37 40 45 48 54 57 58 61 1276 64 0 1 1 2 9 11 12 13 15 16 18 20 21 22 25 26 27 28 30 31 32 33 36 37 38 40 43 44 45 47 54 55 56 57 59 60 62 1277 64 0 1 1 3 4 6 12 13 17 24 25 26 27 29 30 32 34 36 38 40 42 43 44 46 50 52 53 54 55 56 57 58 59 61 1278 64 1 0 0 1279 64 1 0 63 1280 64 1 0 53 1281 64 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 1282 64 1 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 1283 64 1 0 0 1 2 3 4 5 6 7 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 1284 64 1 0 1 2 5 6 8 13 14 15 17 18 20 22 23 24 25 28 30 31 33 35 36 38 39 42 43 44 45 46 48 49 50 51 53 57 1285 64 1 0 1 3 4 6 9 12 14 15 17 21 22 23 24 27 28 29 31 32 33 34 35 36 37 41 42 45 46 48 50 53 56 57 59 60 61 62 63 1286 64 1 0 1 6 7 9 12 14 15 16 17 18 20 23 25 27 31 32 36 41 42 44 45 47 48 50 57 59 60 62 63 1287 64 1 1 0 1288 64 1 1 63 1289 64 1 1 15 1290 64 1 1 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 1291 64 1 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 1292 64 1 1 0 1 2 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 1293 64 1 1 1 2 5 6 7 8 9 10 15 16 17 21 23 24 25 26 27 28 29 31 32 35 38 39 40 41 44 45 47 48 49 50 52 55 57 58 60 63 1294 64 1 1 0 1 2 3 4 6 7 13 14 16 17 18 21 23 24 25 27 29 30 31 32 34 35 36 37 38 43 47 51 53 54 56 59 61 62 63 1295 64 1 1 1 2 4 5 6 8 12 13 17 22 24 28 34 37 38 40 43 45 46 50 51 53 56 59 60 61 63 1296 65 0 0 0 1297 65 0 0 64 1298 65 0 0 58 1299 65 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 1300 65 0 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 1301 65 0 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 53 54 55 56 57 58 59 60 61 62 63 64 1302 65 0 0 1 2 3 4 7 10 11 12 13 14 15 17 18 19 28 29 32 35 36 37 43 46 47 48 49 53 54 56 58 59 60 63 64 1303 65 0 0 0 3 4 5 6 8 9 12 16 17 18 23 24 26 30 32 34 35 37 40 41 43 44 45 47 49 51 53 54 56 60 62 63 1304 65 0 0 0 1 3 6 7 8 9 10 11 12 13 15 16 18 19 20 22 24 28 31 35 36 38 39 40 41 42 45 53 54 60 61 62 1305 65 0 1 0 1306 65 0 1 64 1307 65 0 1 10 1308 65 0 1 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 1309 65 0 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 1310 65 0 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 1311 65 0 1 1 5 6 7 8 13 15 16 19 21 27 28 30 34 35 37 38 43 44 45 46 47 49 50 51 52 53 54 58 59 60 61 1312 65 0 1 1 4 5 6 7 10 13 18 22 23 25 26 29 31 32 33 35 36 37 38 39 41 43 45 46 47 48 49 54 56 57 58 60 62 63 64 1313 65 0 1 2 5 6 7 11 14 16 18 23 24 26 31 32 37 39 41 42 43 45 48 49 53 57 59 61 1314 65 1 0 0 1315 65 1 0 64 1316 65 1 0 64 1317 65 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 1318 65 1 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 1319 65 1 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 1320 65 1 0 0 1 2 4 7 13 15 17 18 19 20 25 26 27 30 31 33 40 42 47 48 51 52 53 54 56 57 63 64 1321 65 1 0 1 3 5 6 7 10 11 12 13 14 15 18 21 25 28 33 39 40 42 43 44 46 48 53 54 55 61 62 63 64 1322 65 1 0 2 3 5 6 7 8 9 10 13 15 17 22 23 29 30 31 33 34 36 37 42 43 45 46 47 48 50 52 53 54 56 62 64 1323 65 1 1 0 1324 65 1 1 64 1325 65 1 1 42 1326 65 1 1 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 1327 65 1 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 1328 65 1 1 0 1 2 3 4 5 6 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 1329 65 1 1 0 1 3 4 5 6 8 9 10 11 13 14 16 17 19 21 22 25 26 28 30 32 35 42 43 45 46 47 48 50 53 54 55 56 57 58 60 61 62 63 1330 65 1 1 0 1 5 8 10 11 13 14 15 17 20 21 22 24 27 33 35 37 41 42 44 45 48 54 56 60 61 64 1331 65 1 1 0 2 3 7 9 11 12 14 16 18 23 24 25 26 27 35 39 41 42 46 48 49 50 51 54 56 58 60 1332 211 0 0 0 1333 211 0 0 210 1334 211 0 0 106 1335 211 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 1336 211 0 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 1337 211 0 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 1338 211 0 0 0 1 2 6 7 8 10 11 13 14 16 18 19 20 21 23 24 25 26 31 32 36 37 39 43 44 47 48 49 50 51 52 55 56 60 61 63 64 67 71 72 73 74 75 77 78 79 80 81 82 83 84 87 88 89 93 99 100 101 102 103 104 107 110 112 113 115 116 117 118 119 123 128 129 131 133 134 139 144 145 147 150 151 152 153 154 158 161 163 164 166 171 173 176 177 186 187 188 191 193 194 196 197 198 200 205 206 208 1339 211 0 0 1 2 3 4 5 6 7 8 10 11 12 13 16 21 22 23 25 26 28 30 32 33 35 36 37 38 41 43 45 48 54 56 57 58 59 60 61 62 63 64 66 69 70 75 76 77 79 81 84 86 87 88 89 90 91 92 93 94 95 96 97 100 102 108 113 114 116 117 119 120 121 122 123 124 125 127 128 129 130 131 132 133 134 136 138 139 140 143 145 148 157 158 161 162 164 165 166 167 169 170 171 173 174 175 176 178 179 180 187 190 191 193 196 198 201 203 204 207 210 1340 211 0 0 1 2 6 7 10 12 13 16 17 20 21 23 24 25 29 30 33 34 35 36 37 38 41 42 44 46 47 48 49 50 51 52 54 55 57 62 64 65 66 67 68 69 74 77 78 80 81 83 87 89 91 92 95 98 100 102 104 105 106 109 110 112 114 118 119 122 125 127 130 132 133 134 138 139 143 144 148 150 151 153 155 156 158 159 160 161 165 166 167 169 170 171 174 175 177 183 184 186 187 188 190 191 193 195 196 198 200 201 204 205 208 210 1341 211 0 1 0 1342 211 0 1 210 1343 211 0 1 162 1344 211 0 1 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 1345 211 0 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 1346 211 0 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 1347 211 0 1 1 3 14 15 16 17 18 19 20 21 22 25 26 27 30 34 35 36 38 40 42 43 46 49 55 58 60 61 62 63 65 66 68 69 71 72 74 76 77 78 79 81 83 85 86 88 90 91 93 94 98 105 106 108 115 117 122 123 124 125 129 130 134 135 138 139 140 144 147 151 152 154 155 156 157 160 162 166 167 168 169 170 171 173 175 177 178 179 182 183 185 186 188 189 190 191 194 195 196 197 199 200 202 207 210 1348 211 0 1 2 4 11 13 14 16 17 18 19 20 21 22 27 29 30 31 36 37 38 40 41 44 46 53 55 57 58 59 60 62 63 64 67 68 69 71 72 75 76 79 80 85 86 87 88 89 97 100 103 104 105 107 109 110 111 113 115 116 120 121 122 127 129 131 133 134 136 138 139 140 141 142 144 146 150 153 154 155 159 160 161 162 168 171 174 175 177 179 183 186 187 190 192 194 196 198 199 200 201 203 206 207 1349 211 0 1 0 1 3 6 8 9 12 13 16 22 28 29 30 31 32 34 36 37 38 39 40 41 43 44 48 50 52 53 57 64 71 74 75 76 77 79 85 87 89 91 93 97 98 99 100 101 102 109 111 113 115 117 118 119 120 122 127 128 131 135 136 141 147 149 150 151 153 157 160 161 164 166 167 168 170 172 174 176 177 179 180 182 186 187 188 189 190 191 192 195 196 199 202 204 205 206 1350 211 1 0 0 1351 211 1 0 210 1352 211 1 0 0 1353 211 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 1354 211 1 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 1355 211 1 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 1356 211 1 0 2 3 5 6 8 11 15 16 17 19 21 22 26 27 29 34 36 37 38 39 42 45 48 51 55 56 57 58 59 60 63 64 67 68 74 75 77 79 81 82 83 86 87 89 90 91 94 98 100 102 104 107 109 110 111 112 113 114 115 117 118 120 121 126 127 128 129 131 133 134 135 138 139 140 141 142 143 144 145 146 148 149 150 151 152 155 156 158 159 160 161 164 168 171 180 183 185 186 190 196 197 198 199 200 204 205 209 210 1357 211 1 0 3 4 6 7 8 10 11 12 21 22 24 25 26 28 29 33 35 37 38 39 41 42 43 47 48 51 53 55 56 59 62 63 66 69 72 76 77 79 82 88 89 90 93 94 97 98 102 104 107 109 110 114 115 116 118 121 122 124 125 126 129 130 131 133 137 142 143 144 145 150 151 153 158 159 162 163 168 169 170 172 173 175 176 177 183 184 188 189 191 194 195 196 197 199 200 203 209 1358 211 1 0 1 2 4 10 12 14 15 17 18 19 20 25 26 27 28 29 32 34 35 36 40 43 44 47 50 52 54 56 57 58 59 64 66 67 73 74 79 80 82 85 86 89 91 93 99 101 102 103 105 107 112 118 119 122 123 125 129 131 134 135 137 138 139 144 147 148 150 151 154 155 157 159 160 164 167 169 170 171 173 174 175 178 180 181 185 186 187 188 191 192 193 194 207 208 210 1359 211 1 1 0 1360 211 1 1 210 1361 211 1 1 198 1362 211 1 1 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 1363 211 1 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 1364 211 1 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 1365 211 1 1 3 6 7 8 9 10 11 13 15 18 19 20 22 24 25 26 27 31 32 34 35 36 37 38 39 42 43 45 47 50 52 53 54 55 57 58 59 61 62 63 66 69 70 71 73 75 76 77 78 82 85 86 87 88 89 91 92 94 96 97 99 100 102 103 106 107 111 112 113 114 116 117 118 120 124 126 132 135 137 138 139 146 147 149 153 154 155 159 160 161 167 171 172 173 175 178 179 180 185 187 189 190 192 194 195 196 198 200 205 207 208 210 1366 211 1 1 0 1 2 5 11 12 13 15 17 18 19 21 22 23 25 27 28 29 30 31 32 33 34 36 38 40 42 43 46 47 51 54 55 58 59 62 65 66 67 69 71 74 76 79 80 81 82 88 89 91 95 96 97 98 100 101 103 105 107 109 110 113 114 115 119 121 122 123 124 127 131 134 139 143 148 149 151 154 156 159 161 162 163 165 167 169 170 171 176 177 178 180 184 186 187 190 191 192 193 194 196 197 198 200 201 202 203 204 207 210 1367 211 1 1 1 2 4 5 7 15 16 18 20 23 25 29 32 34 35 38 39 40 46 48 49 50 51 53 54 55 56 58 59 64 67 68 69 70 73 74 75 77 81 82 83 84 85 87 88 90 92 95 96 97 98 100 102 103 105 106 107 109 111 112 114 115 116 117 118 119 120 123 124 125 130 132 133 136 137 140 143 144 145 146 147 149 150 151 153 154 155 156 165 168 169 171 173 174 175 176 177 178 179 182 183 185 186 188 192 193 194 196 200 201 204 205 208 209 1368 224 0 0 0 1369 224 0 0 223 1370 224 0 0 121 1371 224 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 1372 224 0 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 1373 224 0 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 1374 224 0 0 1 3 6 7 8 9 10 12 14 16 17 20 24 25 29 30 32 33 34 35 37 38 39 40 43 44 47 48 49 51 52 55 58 59 61 62 63 64 65 66 67 68 69 70 71 76 77 79 82 84 85 91 92 94 95 97 98 101 102 103 106 107 110 111 112 115 119 120 122 123 124 127 131 132 136 139 140 141 142 145 147 150 152 153 154 155 158 160 161 163 165 166 167 170 171 173 175 176 177 178 181 186 187 188 189 191 192 195 198 200 201 203 204 205 206 208 210 211 215 216 219 220 221 223 1375 224 0 0 1 2 5 6 8 13 14 17 19 20 23 24 25 27 28 29 31 32 36 38 39 40 41 44 46 48 49 51 53 54 56 58 64 65 66 67 73 74 76 77 78 79 80 82 84 85 87 88 92 93 95 96 100 101 102 104 105 106 107 109 110 112 113 115 117 118 121 122 124 129 130 132 139 140 141 142 143 144 146 149 150 151 152 156 157 158 161 165 166 169 172 175 176 178 180 181 183 185 187 191 192 193 196 197 198 199 200 201 203 206 207 208 209 211 215 217 218 219 220 221 222 1376 224 0 0 0 1 4 5 7 8 9 10 13 15 18 19 20 22 24 26 27 29 30 32 34 35 38 40 41 45 47 49 50 53 59 62 63 65 66 67 68 70 71 75 78 81 82 83 86 87 88 91 94 95 97 98 101 108 109 110 112 113 116 118 119 122 123 124 125 126 129 131 133 135 142 144 145 147 150 151 152 154 155 157 159 161 163 165 166 167 169 170 171 173 174 176 179 180 181 182 183 186 187 191 192 193 194 196 199 202 203 204 205 206 207 210 212 215 216 221 222 1377 224 0 1 0 1378 224 0 1 223 1379 224 0 1 146 1380 224 0 1 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 1381 224 0 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 1382 224 0 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 1383 224 0 1 3 4 13 14 15 16 18 19 23 24 26 31 32 34 36 38 42 43 45 46 49 50 51 52 55 58 59 60 62 64 66 67 68 69 73 75 76 77 78 79 80 81 82 83 87 92 94 96 97 100 102 105 106 108 109 111 112 113 117 118 119 122 124 125 126 129 130 133 135 136 139 145 146 147 148 149 154 155 159 162 163 166 167 168 170 172 174 177 178 182 183 184 186 188 190 192 193 195 198 200 201 202 204 205 206 208 209 214 216 217 219 220 223 1384 224 0 1 1 2 3 5 7 14 16 25 26 30 31 32 33 34 39 40 41 44 46 47 51 52 53 55 56 64 66 68 69 71 72 73 75 77 78 79 81 82 83 84 85 86 90 91 93 97 98 99 100 102 103 105 107 108 115 123 132 137 140 141 144 145 148 149 150 152 153 157 158 159 165 166 167 170 172 174 175 177 180 181 182 183 184 186 189 191 192 193 196 202 204 207 209 212 213 214 215 217 220 221 1385 224 0 1 0 4 6 8 10 12 16 17 18 19 20 21 23 24 25 29 34 35 36 39 40 41 43 45 50 52 55 57 59 62 63 64 65 66 67 69 70 72 73 76 77 80 83 84 85 86 89 90 91 93 94 96 99 106 107 112 113 115 117 118 119 120 121 122 124 125 126 127 130 131 132 133 135 137 138 139 142 143 144 146 149 152 154 155 157 163 166 167 169 171 174 176 178 179 183 184 185 186 187 188 191 193 194 195 197 199 200 201 208 211 214 217 220 221 223 1386 224 1 0 0 1387 224 1 0 223 1388 224 1 0 37 1389 224 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 1390 224 1 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 1391 224 1 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 1392 224 1 0 2 5 6 10 12 14 15 16 18 19 20 21 23 24 25 32 34 35 36 37 40 42 43 44 46 48 49 52 53 56 57 58 63 66 68 70 71 72 74 75 76 77 79 80 81 83 85 89 91 93 94 95 97 101 106 112 114 118 119 128 130 133 135 140 141 142 143 145 148 149 153 154 156 157 158 159 161 163 164 165 166 167 171 174 176 177 178 179 180 184 185 186 187 188 189 190 196 200 201 204 205 206 207 208 209 210 211 212 215 217 218 220 221 222 1393 224 1 0 4 5 7 9 10 12 13 15 18 20 21 23 24 27 29 30 31 34 35 38 39 41 43 45 46 47 51 53 54 59 62 64 65 67 70 72 73 76 79 80 81 82 84 85 86 89 94 95 96 98 100 101 102 103 104 109 112 115 119 121 124 127 128 133 135 139 141 142 143 146 147 148 149 150 151 152 153 155 157 158 159 161 163 164 165 166 170 173 175 178 183 185 186 187 188 190 194 196 197 198 200 201 202 204 206 209 211 213 214 215 220 223 1394 224 1 0 2 5 6 12 17 18 20 21 25 28 29 30 33 34 35 37 38 39 43 44 45 48 50 52 53 54 56 59 60 63 64 68 72 73 75 80 81 82 83 84 86 87 88 91 92 93 94 95 96 99 100 101 103 106 107 108 109 111 112 113 115 118 120 123 124 125 127 129 130 131 134 135 136 138 139 145 147 150 157 163 164 166 168 169 173 174 176 182 183 185 187 188 189 193 196 198 199 201 202 204 205 206 208 210 215 217 218 220 221 1395 224 1 1 0 1396 224 1 1 223 1397 224 1 1 154 1398 224 1 1 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 1399 224 1 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 1400 224 1 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 1401 224 1 1 1 7 10 11 13 15 17 23 27 28 29 31 32 33 37 38 39 40 41 44 45 46 48 50 53 55 61 62 64 66 68 69 71 73 76 79 83 86 88 90 93 94 96 97 98 99 101 102 103 104 109 111 112 114 116 117 118 119 120 131 134 135 137 139 140 141 142 143 145 146 148 149 151 153 154 158 160 161 163 165 166 167 168 170 171 173 176 178 181 184 186 187 188 189 192 193 195 196 198 199 200 205 206 207 211 213 216 219 220 221 223 1402 224 1 1 1 2 6 8 15 16 17 18 21 25 30 31 33 38 40 45 49 51 52 53 56 57 66 68 69 70 72 74 76 77 78 80 83 85 87 88 89 91 96 98 99 101 104 105 106 107 108 111 112 113 114 115 116 118 119 120 122 124 126 127 128 129 131 133 136 137 139 141 142 144 145 147 148 150 151 156 157 158 160 165 166 167 168 170 177 180 181 186 189 190 196 199 202 203 204 206 207 214 215 216 218 221 222 223 1403 224 1 1 0 2 3 6 7 8 9 10 13 16 17 18 22 24 25 26 28 30 31 32 33 34 39 41 44 45 46 47 48 49 50 51 53 56 57 59 64 68 69 71 72 73 76 85 86 88 90 96 97 98 100 101 104 105 106 110 111 115 117 118 119 120 121 123 125 128 129 130 132 134 135 137 139 143 144 145 147 148 150 151 154 155 156 157 159 160 161 163 166 169 173 175 177 178 181 183 185 186 188 189 190 191 192 194 197 198 199 200 201 203 204 206 209 212 213 216 217 219 220 222 223 1404 247 0 0 0 1405 247 0 0 246 1406 247 0 0 11 1407 247 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 1408 247 0 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 1409 247 0 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 1410 247 0 0 0 2 3 5 8 9 11 12 18 20 21 22 23 24 27 30 32 33 35 36 37 39 42 44 46 47 49 56 57 58 60 61 62 63 64 66 67 68 69 70 74 76 77 80 81 82 85 88 91 102 103 104 105 106 108 110 111 112 114 120 121 122 126 127 128 131 132 134 137 138 140 141 142 143 145 147 149 150 152 153 154 155 157 158 161 165 166 168 169 170 171 173 174 175 176 177 180 182 185 187 188 198 200 201 202 205 208 209 214 215 216 218 219 220 221 222 223 227 228 231 235 236 238 239 244 1411 247 0 0 0 1 2 5 9 10 12 14 16 17 18 20 23 25 26 27 28 32 34 38 39 41 45 46 48 50 51 52 54 57 59 60 63 64 67 68 70 73 74 75 76 79 80 81 82 83 85 86 92 93 97 102 103 105 106 114 116 117 118 122 123 127 129 131 134 137 138 141 142 145 146 148 149 150 151 153 154 155 158 159 162 163 164 165 168 169 170 171 172 179 182 183 184 185 186 189 190 191 193 194 197 198 200 203 204 205 209 211 212 214 215 217 219 220 222 224 226 230 232 233 235 236 237 239 242 244 246 1412 247 0 0 0 2 3 4 5 8 9 10 15 20 22 23 24 26 28 30 31 34 38 41 42 43 46 47 53 63 64 65 70 72 73 76 77 78 82 83 86 88 90 92 93 96 97 98 100 102 103 105 108 110 113 114 115 117 119 121 124 126 127 132 133 136 139 144 146 151 154 156 157 165 169 171 173 176 181 182 183 185 186 188 191 192 193 196 197 198 199 200 202 203 204 207 209 211 214 215 217 218 219 220 222 223 226 228 229 231 232 234 235 237 238 239 240 242 245 246 1413 247 0 1 0 1414 247 0 1 246 1415 247 0 1 200 1416 247 0 1 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 1417 247 0 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 1418 247 0 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 1419 247 0 1 3 5 6 9 10 12 13 14 16 19 25 26 32 33 34 36 37 40 42 43 48 49 51 52 53 58 59 60 63 66 70 72 74 76 78 79 80 82 83 85 87 90 91 92 93 94 97 98 101 102 105 106 108 109 110 111 113 114 116 119 120 121 122 123 124 125 130 131 134 137 138 141 143 148 151 154 156 158 160 163 164 168 172 173 176 178 179 180 181 186 189 190 193 197 200 201 202 203 204 205 207 213 214 217 218 219 220 222 223 227 228 229 230 231 232 233 234 236 240 241 242 243 244 245 1420 247 0 1 0 1 3 5 6 9 10 11 12 14 15 17 18 19 22 23 25 30 32 33 36 37 38 39 40 41 42 43 45 46 48 49 54 55 56 58 60 61 62 63 64 72 78 81 83 88 90 91 93 95 96 97 100 101 103 105 107 108 109 112 113 114 120 122 124 127 129 132 133 142 145 146 150 153 157 161 162 165 167 169 171 176 178 181 183 185 187 188 189 192 193 196 197 200 201 203 204 205 207 211 213 214 215 216 221 222 223 224 227 231 233 234 236 239 240 242 1421 247 0 1 0 1 4 7 8 11 12 13 14 15 16 17 18 25 29 33 34 37 41 42 45 46 48 49 50 52 54 57 58 60 62 66 70 71 72 73 76 78 80 81 82 83 84 89 90 96 98 101 105 106 108 109 110 111 112 114 115 116 118 121 122 126 129 130 131 132 136 139 142 144 145 146 147 149 152 153 154 155 157 159 160 161 162 163 166 168 172 182 185 187 188 191 194 195 197 198 203 205 207 209 211 215 217 220 221 225 227 228 230 231 234 235 238 239 241 242 1422 247 1 0 0 1423 247 1 0 246 1424 247 1 0 114 1425 247 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 1426 247 1 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 1427 247 1 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 1428 247 1 0 1 2 3 5 6 8 9 10 11 12 15 17 19 20 22 23 24 26 28 29 30 33 35 36 41 43 46 49 51 54 56 57 58 61 62 63 66 68 69 70 72 73 77 78 79 80 82 84 86 89 90 91 93 94 95 101 102 104 105 106 108 111 112 113 118 119 121 123 124 126 128 129 130 132 133 134 135 136 139 140 141 142 143 144 148 150 151 154 156 158 161 162 168 169 170 171 172 173 174 176 177 178 179 181 182 186 187 188 194 195 196 198 199 201 202 204 206 207 211 216 217 219 221 223 227 228 230 236 238 240 243 244 1429 247 1 0 2 4 5 7 9 13 14 15 23 25 28 29 30 33 36 37 38 39 40 44 46 48 50 52 55 59 61 64 65 66 68 69 72 73 74 75 76 77 79 80 81 82 83 86 88 89 91 92 93 95 100 101 102 103 106 114 117 118 120 123 125 127 128 129 130 131 133 134 135 137 141 142 144 145 146 149 150 153 154 155 156 159 162 163 165 166 168 170 171 172 173 175 179 183 186 187 188 190 191 192 194 195 199 200 202 203 206 207 208 210 213 215 218 219 222 224 225 229 231 234 236 239 240 241 244 245 1430 247 1 0 1 2 7 9 10 13 14 16 17 18 20 22 25 26 28 31 35 38 39 41 43 45 46 48 49 50 51 53 55 57 61 63 64 66 68 69 75 83 87 89 90 91 92 94 96 97 98 99 100 104 108 109 110 111 113 114 119 120 122 125 126 128 129 130 131 134 135 136 140 141 144 146 149 154 155 157 158 160 161 167 173 174 178 179 183 184 190 195 197 198 199 203 208 212 214 215 216 219 220 225 227 229 230 231 236 237 238 240 242 243 244 245 1431 247 1 1 0 1432 247 1 1 246 1433 247 1 1 147 1434 247 1 1 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 1435 247 1 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 1436 247 1 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 1437 247 1 1 0 2 3 4 7 9 10 12 14 16 17 18 19 21 22 23 24 25 26 29 30 31 33 35 37 38 39 40 41 43 46 47 49 50 52 53 55 58 59 61 64 65 68 71 73 74 75 77 78 79 80 83 85 87 88 93 94 96 98 99 100 102 105 106 107 109 110 113 114 116 119 120 121 122 124 125 126 127 128 129 130 131 133 134 135 137 138 139 140 141 143 144 148 149 151 156 158 159 161 162 163 165 166 167 168 169 170 177 178 180 181 182 191 193 195 196 198 200 201 202 204 206 210 213 215 216 217 218 223 225 227 228 231 232 235 236 240 242 244 246 1438 247 1 1 0 2 4 6 10 14 18 22 23 24 25 26 28 29 31 35 39 40 44 46 47 48 49 52 53 55 56 59 62 64 68 69 73 74 82 91 92 95 96 97 98 99 100 104 105 109 111 114 115 119 120 121 122 123 125 128 130 132 134 135 138 139 140 144 146 148 152 153 156 157 159 163 164 165 166 167 169 170 175 176 180 182 183 186 188 192 195 197 198 199 200 202 203 204 206 208 210 211 212 213 218 220 221 223 225 226 227 228 230 232 233 235 240 242 1439 247 1 1 1 3 4 7 8 9 10 11 12 14 18 19 20 23 24 26 28 33 34 43 45 47 49 50 53 58 60 61 64 66 67 68 71 74 75 78 79 86 87 88 93 94 99 100 102 104 105 109 113 114 115 117 118 119 123 124 126 128 132 134 135 137 140 141 142 145 147 148 150 151 152 154 155 157 158 160 162 163 167 169 174 175 178 179 180 182 183 184 185 192 196 197 198 202 203 205 206 207 209 210 213 214 215 219 220 221 223 224 225 226 227 229 231 233 234 235 237 239 240 242 243 244 245 246 1440 1 1441 1 1442 1 1443 1 1444 1 1445 1 1446 1 1447 1 1448 1 1449 1 1450 1 1451 1 1452 1 1453 0 1454 1 1455 1 1456 0 1457 1 1458 1 1459 0 1460 1 1461 1 1462 0 1463 1 1464 1 1465 0 1466 0 1467 1 1468 0 1469 0 1470 1 1471 0 1472 0 1473 1 1474 0 1475 0 1476 1 1477 0 1478 0 1479 1 1480 0 1481 0 1482 1 1483 0 1484 0 1485 1 1486 0 1487 0 1488 1 1489 0 1490 0 1491 1 1492 0 1493 0 1494 1 1495 0 1496 0 1497 1 1498 0 1499 0 1500 1 1501 0 1502 0 1503 1 1504 0 1505 0 1506 1 1507 0 1508 0 1509 1 1510 0 1511 0 1512 1 1513 0 1514 0 1515 1 1516 0 1517 0 1518 1 1519 0 1520 0 1521 1 1522 0 1523 0 1524 1 1525 0 1526 0 1527 1 1528 0 1529 0 1530 1 1531 0 1532 0 1533 1 1534 0 1535 0 1536 1 1537 0 1538 0 1539 1 1540 0 1541 0 1542 1 1543 0 1544 0 1545 1 1546 0 1547 0 1548 1 1549 0 1550 0 1551 1 1552 0 1553 0 1554 1 1555 0 1556 0 1557 1 1558 0 1559 0 1560 1 1561 0 1562 0 1563 1 1564 0 1565 0 1566 1 1567 0 1568 0 1569 1 1570 0 1571 0 1572 1 1573 1 1574 1 1575 1 1576 1 1577 1 1578 1 1579 1 1580 1 1581 1 1582 1 1583 1 1584 0 1585 1 1586 0 1587 0 1588 1 1589 0 1590 0 1591 1 1592 1 1593 0 1594 1 1595 0 1596 0 1597 1 1598 0 1599 0 1600 1 1601 0 1602 0 1603 1 1604 0 1605 0 1606 1 1607 0 1608 0 1609 1 1610 0 1611 0 1612 1 1613 0 1614 0 1615 1 1616 0 1617 0 1618 1 1619 0 1620 0 1621 1 1622 0 1623 0 1624 1 1625 0 1626 0 1627 1 1628 0 1629 0 1630 1 1631 0 1632 0 1633 1 1634 0 1635 0 1636 1 1637 0 1638 0 1639 1 1640 0 1641 0 1642 1 1643 0 1644 0 1645 1 1646 0 1647 0 1648 1 1649 0 1650 0 1651 1 1652 0 1653 0 1654 1 1655 0 1656 0 1657 1 1658 0 1659 0 1660 1 1661 0 1662 0 1663 1 1664 0 1665 0 1666 1 1667 0 1668 0 1669 1 1670 0 1671 0 1672 1 1673 0 1674 0 1675 1 1676 0 1677 0 1678 1 1679 0 1680 0 1681 1 1682 0 1683 0 1684 1 1685 0 1686 0 1687 1 1688 0 1689 0 1690 1 1691 0 1692 0 1693 1 1694 0 1695 0 1696 1 1697 0 1698 0 1699 1 1700 0 1701 0 1702 1 1703 0 1704 0 e 1705 0 e 1706 0 e 1707 0 e 1708 0 e 1709 0 e 1710 0 e 1711 0 e 1712 0 e 1713 0 e 1714 0 e 1715 0 e 1716 1 e 1717 1 f 1718 1 f 1719 1 e 1720 1 f 1721 1 e 1722 1 e 1723 1 f 1724 1 e 1725 1 e 1726 1 f 1727 1 f 1728 31 e 1729 31 f 1730 31 2 3 5 6 8 9 10 11 12 15 16 17 18 20 22 24 27 28 30 1731 31 e 1732 31 f 1733 31 0 1 3 4 6 8 11 13 15 16 17 18 19 20 21 22 24 28 29 1734 31 e 1735 31 f 1736 31 0 1 2 3 4 5 6 8 10 11 13 20 24 25 26 28 29 30 1737 31 e 1738 31 f 1739 31 0 3 9 13 14 15 17 18 19 20 26 27 28 29 1740 32 e 1741 32 f 1742 32 0 2 6 7 8 9 12 15 16 18 19 21 27 1743 32 e 1744 32 f 1745 32 2 3 4 5 6 7 13 16 17 18 20 22 24 29 31 1746 32 e 1747 32 f 1748 32 2 4 5 9 10 11 14 17 18 23 24 25 29 31 1749 32 e 1750 32 f 1751 32 0 2 3 8 12 14 15 17 21 23 25 27 30 1752 33 e 1753 33 f 1754 33 0 1 3 4 5 7 9 12 18 23 24 25 26 30 31 1755 33 e 1756 33 f 1757 33 1 6 8 15 17 21 24 25 28 1758 33 e 1759 33 f 1760 33 0 1 2 3 4 6 9 10 11 13 16 17 18 19 22 24 25 29 30 32 1761 33 e 1762 33 f 1763 33 0 2 3 4 5 7 8 12 13 16 18 21 22 26 27 28 29 30 31 1764 63 e 1765 63 f 1766 63 1 7 8 9 11 13 14 15 16 17 18 19 20 22 24 25 27 28 29 32 34 35 36 37 38 40 43 45 46 47 48 49 50 51 52 53 55 56 58 62 1767 63 e 1768 63 f 1769 63 1 6 7 14 17 20 21 23 24 25 26 29 30 31 32 34 36 37 43 44 47 51 53 54 56 62 1770 63 e 1771 63 f 1772 63 1 2 4 5 6 10 11 12 15 17 21 24 25 26 27 30 33 34 36 37 38 40 43 44 46 50 53 54 55 56 57 58 59 61 1773 63 e 1774 63 f 1775 63 0 1 4 9 13 15 19 20 22 23 25 26 29 30 32 34 35 37 38 39 40 42 46 47 48 52 56 57 60 1776 64 e 1777 64 f 1778 64 4 7 8 9 10 13 15 16 17 20 21 23 24 27 29 31 33 34 36 38 39 40 41 44 49 50 51 54 56 59 61 62 1779 64 e 1780 64 f 1781 64 1 2 4 5 7 9 14 19 20 22 24 28 30 32 34 35 38 39 42 44 45 46 47 50 51 52 53 55 56 57 59 61 1782 64 e 1783 64 f 1784 64 3 4 10 13 17 20 21 23 24 26 31 32 33 34 35 36 38 40 41 42 43 45 47 48 49 50 51 52 55 56 61 1785 64 e 1786 64 f 1787 64 1 2 5 6 7 8 9 10 12 14 15 17 21 23 25 27 30 31 33 35 36 38 39 41 42 43 45 46 47 48 53 59 60 62 1788 65 e 1789 65 f 1790 65 4 5 6 8 9 11 12 13 14 15 17 20 22 24 27 31 32 33 34 35 36 37 38 40 43 46 50 51 52 53 55 58 59 60 64 1791 65 e 1792 65 f 1793 65 2 8 10 11 15 23 24 26 28 33 34 35 39 40 41 42 46 50 51 52 54 55 57 58 60 1794 65 e 1795 65 f 1796 65 10 11 15 16 18 22 23 25 26 27 30 31 32 36 38 40 44 47 48 50 51 52 53 54 56 57 58 61 62 1797 65 e 1798 65 f 1799 65 3 5 6 7 11 12 15 18 19 21 22 24 25 26 27 28 32 33 34 35 36 37 38 40 42 43 46 47 48 50 54 57 61 62 63 64 1800 211 e 1801 211 f 1802 211 0 1 2 4 7 11 12 14 16 18 22 24 27 30 31 33 37 41 44 45 46 47 49 54 56 60 65 68 69 70 71 77 80 81 82 83 85 88 90 91 92 93 94 95 96 103 104 105 107 108 109 112 117 118 122 123 125 126 130 131 132 135 136 137 138 139 144 145 147 151 152 154 157 159 165 166 168 169 172 175 177 178 179 181 183 188 189 192 193 196 198 202 204 206 207 209 210 1803 211 e 1804 211 f 1805 211 1 4 6 10 11 15 17 18 19 20 24 25 27 28 29 30 32 33 34 35 37 39 41 42 43 45 46 47 48 49 51 52 53 54 55 56 58 59 61 63 64 66 68 69 72 73 74 76 77 79 81 84 88 91 94 95 96 97 99 100 102 103 105 108 113 114 115 119 120 121 122 123 125 126 127 128 130 132 133 136 138 140 141 142 144 147 148 149 150 153 155 156 158 159 160 166 167 168 171 176 182 183 188 190 191 192 195 196 197 198 199 202 203 204 205 210 1806 211 e 1807 211 f 1808 211 0 1 2 4 6 12 15 18 19 20 22 23 25 27 29 30 31 33 38 39 40 41 42 43 46 47 48 49 50 51 54 60 61 64 65 66 67 69 70 72 73 74 77 78 81 83 90 94 97 99 100 101 104 106 107 108 109 115 116 120 122 124 125 126 128 129 132 134 135 136 137 138 139 141 143 146 148 149 151 155 156 159 164 166 167 168 169 172 173 181 185 188 189 190 198 202 203 208 209 210 1809 211 e 1810 211 f 1811 211 0 1 2 4 5 6 8 9 11 12 16 17 21 24 25 28 31 32 35 36 39 40 42 43 44 47 53 54 56 58 59 61 65 68 69 70 71 73 74 76 80 81 82 83 84 87 88 89 92 93 94 96 99 100 102 105 108 109 111 114 116 117 118 120 122 123 128 129 130 131 133 134 138 143 145 146 148 149 150 151 154 155 156 159 160 164 166 168 170 172 174 177 180 184 187 189 192 193 194 195 200 202 203 204 205 206 207 208 1812 224 e 1813 224 f 1814 224 0 1 5 6 10 11 13 17 18 19 20 23 26 28 31 32 33 34 36 37 38 39 42 43 52 53 54 55 56 57 59 60 61 62 63 64 65 71 72 75 77 79 80 81 82 83 85 86 88 89 91 92 94 96 98 104 105 109 110 113 115 116 117 119 120 121 123 130 131 132 133 136 138 141 142 143 144 145 146 147 148 151 153 154 157 158 159 162 163 165 171 172 175 181 183 184 185 188 189 190 193 195 196 197 200 201 202 203 204 206 208 213 214 216 219 222 223 1815 224 e 1816 224 f 1817 224 2 3 4 5 7 8 10 11 12 13 14 16 18 21 23 24 25 26 29 30 31 32 33 34 35 36 37 38 41 43 44 47 48 50 51 52 54 55 57 59 62 64 67 71 74 76 78 81 87 89 90 91 92 93 95 97 98 99 101 103 106 109 110 111 112 116 117 119 120 122 123 125 126 128 131 133 134 135 136 137 140 141 143 145 147 148 149 150 151 153 156 158 160 164 167 168 171 173 175 176 177 178 179 181 182 183 190 197 201 203 204 205 207 210 211 212 213 214 216 217 218 222 223 1818 224 e 1819 224 f 1820 224 0 4 5 6 8 9 10 11 12 14 16 17 19 21 24 25 26 29 30 32 35 36 39 43 44 48 54 57 58 59 60 61 63 64 65 66 67 68 69 70 75 80 81 82 85 86 87 88 89 90 91 93 96 99 102 107 108 109 111 112 115 118 120 125 126 128 130 132 133 134 139 141 142 143 145 146 147 149 154 155 157 158 161 163 164 171 173 174 176 177 183 184 188 193 198 199 200 201 204 206 207 208 209 213 216 217 218 219 223 1821 224 e 1822 224 f 1823 224 4 5 7 8 9 11 12 13 14 15 16 20 21 22 23 25 26 27 28 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 51 52 54 57 61 63 66 70 71 73 74 80 81 83 87 90 91 94 95 96 98 99 100 101 102 104 105 106 110 111 114 115 116 117 118 121 122 123 125 127 130 133 134 136 137 139 142 143 145 146 148 154 160 162 166 175 176 177 179 181 182 183 185 189 190 193 194 195 197 198 200 202 209 211 215 217 219 223 1824 247 e 1825 247 f 1826 247 0 4 6 7 8 9 12 13 14 16 17 18 22 27 32 33 34 35 38 47 52 54 58 59 60 67 68 69 71 73 76 77 81 82 84 85 88 91 92 93 99 101 102 103 108 109 110 117 118 122 126 127 128 130 133 134 135 136 139 140 141 145 146 147 148 149 150 153 154 155 157 158 159 174 175 177 178 179 180 181 184 185 187 188 190 191 192 195 197 199 203 204 206 214 215 218 220 221 225 227 229 230 231 236 240 241 242 243 245 246 1827 247 e 1828 247 f 1829 247 0 2 3 4 5 9 10 11 13 14 16 17 18 20 21 22 23 24 26 27 28 30 32 33 35 36 37 39 40 42 44 45 47 48 53 55 58 60 62 67 68 70 71 72 73 74 75 76 78 80 81 82 83 84 86 88 89 90 94 96 99 100 108 109 110 111 112 113 114 115 117 119 123 124 128 129 133 134 135 138 141 142 145 147 149 150 151 152 154 155 156 157 160 162 163 165 166 169 170 173 174 175 177 178 179 180 182 183 184 185 188 189 190 193 196 198 200 201 202 207 210 212 213 214 216 218 221 222 224 226 227 228 229 231 232 233 237 239 240 243 1830 247 e 1831 247 f 1832 247 0 1 4 9 12 18 20 22 23 25 33 34 36 38 43 44 45 47 52 57 61 62 64 66 67 68 70 71 72 74 79 80 81 85 86 88 90 91 93 95 98 99 100 101 102 105 106 107 110 114 115 119 120 122 123 124 126 128 129 134 135 137 139 142 143 145 146 147 149 150 151 153 154 157 159 160 161 164 166 170 171 172 173 174 176 177 178 179 180 181 182 183 185 187 188 189 190 191 194 196 197 198 201 204 208 211 214 215 217 220 226 231 233 234 235 236 239 240 241 242 246 1833 247 e 1834 247 f 1835 247 0 5 6 9 13 14 15 16 17 18 19 20 23 27 28 29 30 31 35 36 42 45 52 53 54 61 63 65 66 68 69 74 75 76 78 80 82 83 84 85 91 93 94 95 98 102 103 104 106 107 108 109 112 113 115 116 119 120 121 122 127 128 132 136 140 142 143 146 148 151 152 153 160 161 162 166 167 168 171 172 174 176 177 180 181 183 184 188 189 190 191 192 193 199 201 202 207 209 212 213 217 218 220 222 223 226 231 232 236 237 239 240 241 246 1836 0 0 0 e 1837 0 0 0 e 1838 0 0 0 e 1839 0 0 1 e 1840 0 0 1 e 1841 0 0 1 e 1842 0 1 0 e 1843 0 1 0 e 1844 0 1 0 e 1845 0 1 1 e 1846 0 1 1 e 1847 0 1 1 e 1848 1 0 0 e 1849 1 0 0 e 1850 1 0 0 e 1851 1 0 1 e 1852 1 0 1 e 1853 1 0 1 e 1854 1 1 0 e 1855 1 1 0 e 1856 1 1 0 e 1857 1 1 1 e 1858 1 1 1 e 1859 1 1 1 e 1860 31 0 0 e 1861 31 0 0 e 1862 31 0 0 e 1863 31 0 1 e 1864 31 0 1 e 1865 31 0 1 e 1866 31 1 0 e 1867 31 1 0 e 1868 31 1 0 e 1869 31 1 1 e 1870 31 1 1 e 1871 31 1 1 e 1872 32 0 0 e 1873 32 0 0 e 1874 32 0 0 e 1875 32 0 1 e 1876 32 0 1 e 1877 32 0 1 e 1878 32 1 0 e 1879 32 1 0 e 1880 32 1 0 e 1881 32 1 1 e 1882 32 1 1 e 1883 32 1 1 e 1884 33 0 0 e 1885 33 0 0 e 1886 33 0 0 e 1887 33 0 1 e 1888 33 0 1 e 1889 33 0 1 e 1890 33 1 0 e 1891 33 1 0 e 1892 33 1 0 e 1893 33 1 1 e 1894 33 1 1 e 1895 33 1 1 e 1896 63 0 0 e 1897 63 0 0 e 1898 63 0 0 e 1899 63 0 1 e 1900 63 0 1 e 1901 63 0 1 e 1902 63 1 0 e 1903 63 1 0 e 1904 63 1 0 e 1905 63 1 1 e 1906 63 1 1 e 1907 63 1 1 e 1908 64 0 0 e 1909 64 0 0 e 1910 64 0 0 e 1911 64 0 1 e 1912 64 0 1 e 1913 64 0 1 e 1914 64 1 0 e 1915 64 1 0 e 1916 64 1 0 e 1917 64 1 1 e 1918 64 1 1 e 1919 64 1 1 e 1920 65 0 0 e 1921 65 0 0 e 1922 65 0 0 e 1923 65 0 1 e 1924 65 0 1 e 1925 65 0 1 e 1926 65 1 0 e 1927 65 1 0 e 1928 65 1 0 e 1929 65 1 1 e 1930 65 1 1 e 1931 65 1 1 e 1932 211 0 0 e 1933 211 0 0 e 1934 211 0 0 e 1935 211 0 1 e 1936 211 0 1 e 1937 211 0 1 e 1938 211 1 0 e 1939 211 1 0 e 1940 211 1 0 e 1941 211 1 1 e 1942 211 1 1 e 1943 211 1 1 e 1944 224 0 0 e 1945 224 0 0 e 1946 224 0 0 e 1947 224 0 1 e 1948 224 0 1 e 1949 224 0 1 e 1950 224 1 0 e 1951 224 1 0 e 1952 224 1 0 e 1953 224 1 1 e 1954 224 1 1 e 1955 224 1 1 e 1956 247 0 0 e 1957 247 0 0 e 1958 247 0 0 e 1959 247 0 1 e 1960 247 0 1 e 1961 247 0 1 e 1962 247 1 0 e 1963 247 1 0 e 1964 247 1 0 e 1965 247 1 1 e 1966 247 1 1 e 1967 247 1 1 e 1968 0 0 0 e 1969 0 0 0 e 1970 0 0 0 e 1971 0 0 1 e 1972 0 0 1 e 1973 0 0 1 e 1974 0 1 0 e 1975 0 1 0 e 1976 0 1 0 e 1977 0 1 1 e 1978 0 1 1 e 1979 0 1 1 e 1980 1 0 0 f 1981 1 0 0 f 1982 1 0 0 f 1983 1 0 1 f 1984 1 0 1 f 1985 1 0 1 f 1986 1 1 0 f 1987 1 1 0 f 1988 1 1 0 f 1989 1 1 1 f 1990 1 1 1 f 1991 1 1 1 f 1992 31 0 0 f 1993 31 0 0 f 1994 31 0 0 f 1995 31 0 1 f 1996 31 0 1 f 1997 31 0 1 f 1998 31 1 0 f 1999 31 1 0 f 2000 31 1 0 f 2001 31 1 1 f 2002 31 1 1 f 2003 31 1 1 f 2004 32 0 0 f 2005 32 0 0 f 2006 32 0 0 f 2007 32 0 1 f 2008 32 0 1 f 2009 32 0 1 f 2010 32 1 0 f 2011 32 1 0 f 2012 32 1 0 f 2013 32 1 1 f 2014 32 1 1 f 2015 32 1 1 f 2016 33 0 0 f 2017 33 0 0 f 2018 33 0 0 f 2019 33 0 1 f 2020 33 0 1 f 2021 33 0 1 f 2022 33 1 0 f 2023 33 1 0 f 2024 33 1 0 f 2025 33 1 1 f 2026 33 1 1 f 2027 33 1 1 f 2028 63 0 0 f 2029 63 0 0 f 2030 63 0 0 f 2031 63 0 1 f 2032 63 0 1 f 2033 63 0 1 f 2034 63 1 0 f 2035 63 1 0 f 2036 63 1 0 f 2037 63 1 1 f 2038 63 1 1 f 2039 63 1 1 f 2040 64 0 0 f 2041 64 0 0 f 2042 64 0 0 f 2043 64 0 1 f 2044 64 0 1 f 2045 64 0 1 f 2046 64 1 0 f 2047 64 1 0 f 2048 64 1 0 f 2049 64 1 1 f 2050 64 1 1 f 2051 64 1 1 f 2052 65 0 0 f 2053 65 0 0 f 2054 65 0 0 f 2055 65 0 1 f 2056 65 0 1 f 2057 65 0 1 f 2058 65 1 0 f 2059 65 1 0 f 2060 65 1 0 f 2061 65 1 1 f 2062 65 1 1 f 2063 65 1 1 f 2064 211 0 0 f 2065 211 0 0 f 2066 211 0 0 f 2067 211 0 1 f 2068 211 0 1 f 2069 211 0 1 f 2070 211 1 0 f 2071 211 1 0 f 2072 211 1 0 f 2073 211 1 1 f 2074 211 1 1 f 2075 211 1 1 f 2076 224 0 0 f 2077 224 0 0 f 2078 224 0 0 f 2079 224 0 1 f 2080 224 0 1 f 2081 224 0 1 f 2082 224 1 0 f 2083 224 1 0 f 2084 224 1 0 f 2085 224 1 1 f 2086 224 1 1 f 2087 224 1 1 f 2088 247 0 0 f 2089 247 0 0 f 2090 247 0 0 f 2091 247 0 1 f 2092 247 0 1 f 2093 247 0 1 f 2094 247 1 0 f 2095 247 1 0 f 2096 247 1 0 f 2097 247 1 1 f 2098 247 1 1 f 2099 247 1 1 f 2100 0 0 0 e 2101 0 0 0 e 2102 0 0 0 e 2103 0 0 1 e 2104 0 0 1 e 2105 0 0 1 e 2106 0 1 0 e 2107 0 1 0 e 2108 0 1 0 e 2109 0 1 1 e 2110 0 1 1 e 2111 0 1 1 e 2112 1 0 0 f 2113 1 0 0 e 2114 1 0 0 f 2115 1 0 1 f 2116 1 0 1 e 2117 1 0 1 e 2118 1 1 0 f 2119 1 1 0 e 2120 1 1 0 f 2121 1 1 1 f 2122 1 1 1 e 2123 1 1 1 e 2124 31 0 0 f 2125 31 0 0 e 2126 31 0 0 0 5 11 16 17 18 24 2127 31 0 1 f 2128 31 0 1 e 2129 31 0 1 0 7 10 13 15 22 24 25 26 27 28 29 30 2130 31 1 0 f 2131 31 1 0 e 2132 31 1 0 1 7 9 12 13 14 16 17 19 20 23 24 25 29 2133 31 1 1 f 2134 31 1 1 e 2135 31 1 1 0 1 3 4 9 11 13 15 17 18 19 23 24 25 29 2136 32 0 0 f 2137 32 0 0 e 2138 32 0 0 0 4 7 9 10 11 14 15 25 28 29 2139 32 0 1 f 2140 32 0 1 e 2141 32 0 1 2 3 5 6 8 11 12 13 15 18 20 21 23 24 26 29 30 2142 32 1 0 f 2143 32 1 0 e 2144 32 1 0 0 2 3 4 6 8 9 10 12 13 14 15 17 18 19 23 25 29 31 2145 32 1 1 f 2146 32 1 1 e 2147 32 1 1 0 5 6 7 8 10 13 14 18 21 23 26 28 30 2148 33 0 0 f 2149 33 0 0 e 2150 33 0 0 1 5 7 9 10 16 17 18 19 21 24 29 2151 33 0 1 f 2152 33 0 1 e 2153 33 0 1 8 13 14 15 18 19 20 21 23 24 26 29 32 2154 33 1 0 f 2155 33 1 0 e 2156 33 1 0 11 12 13 14 15 19 21 27 29 30 31 32 2157 33 1 1 f 2158 33 1 1 e 2159 33 1 1 0 1 3 4 6 7 8 9 14 15 18 20 23 27 28 29 30 2160 63 0 0 f 2161 63 0 0 e 2162 63 0 0 0 1 3 5 7 9 13 18 20 21 22 23 24 28 32 35 38 40 41 43 48 49 50 54 55 57 58 60 2163 63 0 1 f 2164 63 0 1 e 2165 63 0 1 3 5 9 12 13 17 18 21 22 23 24 26 27 28 29 31 32 36 37 41 48 49 51 53 54 55 56 58 60 61 62 2166 63 1 0 f 2167 63 1 0 e 2168 63 1 0 1 2 4 6 7 8 10 11 13 14 21 22 23 25 29 30 32 34 36 38 42 44 47 50 52 54 55 56 58 59 60 2169 63 1 1 f 2170 63 1 1 e 2171 63 1 1 2 4 5 6 7 8 9 11 14 17 18 23 24 27 28 30 36 38 40 42 47 48 49 50 51 52 53 55 56 59 61 62 2172 64 0 0 f 2173 64 0 0 e 2174 64 0 0 1 2 5 8 10 11 13 14 15 18 19 22 23 25 26 27 28 31 32 33 35 36 38 42 44 47 49 52 53 54 55 59 63 2175 64 0 1 f 2176 64 0 1 e 2177 64 0 1 3 5 6 8 10 13 14 17 18 19 22 24 25 26 27 30 33 34 35 36 38 42 44 47 49 50 54 55 56 59 61 62 63 2178 64 1 0 f 2179 64 1 0 e 2180 64 1 0 0 5 9 11 13 14 21 22 23 26 28 30 32 33 35 36 37 39 44 45 48 49 51 54 58 59 63 2181 64 1 1 f 2182 64 1 1 e 2183 64 1 1 2 3 4 5 8 11 13 14 15 17 18 20 22 23 26 29 32 33 34 35 37 38 39 41 45 46 48 50 57 58 61 62 63 2184 65 0 0 f 2185 65 0 0 e 2186 65 0 0 5 6 8 11 12 13 17 18 20 21 22 23 26 28 30 31 32 34 35 36 38 41 48 49 50 54 59 60 2187 65 0 1 f 2188 65 0 1 e 2189 65 0 1 0 1 2 3 7 10 14 16 17 19 21 22 24 26 27 29 30 31 33 36 38 39 41 42 43 44 46 48 49 50 51 54 57 58 61 62 63 2190 65 1 0 f 2191 65 1 0 e 2192 65 1 0 0 1 2 4 8 9 10 11 13 17 23 27 28 29 30 35 37 38 39 43 44 46 47 48 49 50 51 53 54 56 57 58 62 2193 65 1 1 f 2194 65 1 1 e 2195 65 1 1 0 4 5 6 8 10 11 12 13 17 22 23 24 26 27 28 30 33 34 35 38 39 41 43 46 57 58 59 60 61 62 63 2196 211 0 0 f 2197 211 0 0 e 2198 211 0 0 1 2 7 8 9 10 11 12 14 15 18 21 23 24 25 26 28 31 32 33 38 39 41 43 44 47 49 52 54 59 60 68 70 71 72 73 76 78 79 80 81 82 85 88 90 92 93 94 95 97 98 99 100 104 107 111 112 115 116 118 120 122 126 128 130 131 133 134 135 136 139 141 143 144 146 148 152 153 155 156 157 158 159 160 163 164 165 168 169 170 171 173 174 175 178 179 181 182 183 184 185 189 190 191 192 193 196 200 201 203 204 205 207 208 209 2199 211 0 1 f 2200 211 0 1 e 2201 211 0 1 0 1 2 3 6 9 11 13 14 15 17 18 19 20 21 22 26 27 28 30 32 34 35 37 42 44 46 48 49 50 54 58 59 62 65 66 69 72 73 75 76 78 80 82 83 86 90 96 99 100 102 103 104 109 111 112 113 115 116 117 118 119 120 123 126 129 130 132 133 134 136 137 139 143 147 148 149 150 152 153 154 155 156 158 160 161 165 167 174 177 179 181 182 183 187 190 191 192 193 194 195 197 200 203 205 210 2202 211 1 0 f 2203 211 1 0 e 2204 211 1 0 1 3 4 11 12 13 17 22 23 26 28 29 30 31 33 34 35 36 37 39 40 44 47 48 51 53 56 60 61 65 66 67 69 71 72 74 75 77 79 80 83 84 86 87 89 90 93 97 98 100 101 102 104 106 107 108 114 118 119 120 122 123 125 126 130 131 132 136 137 138 140 141 142 144 148 149 150 152 155 156 157 159 161 162 163 164 165 169 170 172 179 180 181 184 188 191 192 193 194 197 198 203 2205 211 1 1 f 2206 211 1 1 e 2207 211 1 1 0 4 8 11 12 13 15 16 17 19 20 23 26 27 28 29 30 32 33 35 36 38 41 42 43 45 46 47 49 54 56 58 60 63 64 65 68 69 70 74 78 81 85 87 88 90 91 93 100 101 103 105 106 112 113 115 121 122 123 124 125 126 127 128 129 130 132 133 134 135 136 138 139 141 142 143 145 146 147 148 149 150 152 154 156 158 160 161 165 166 167 168 171 173 177 178 180 185 187 188 189 190 193 194 195 199 200 201 203 205 206 207 209 210 2208 224 0 0 f 2209 224 0 0 e 2210 224 0 0 0 1 2 3 6 7 8 9 10 11 12 16 17 18 22 23 27 29 32 33 34 35 36 37 41 43 47 48 49 50 51 52 55 57 58 59 61 62 63 64 68 69 70 71 73 74 76 77 78 79 81 83 84 85 89 90 92 100 101 102 108 110 111 112 113 117 121 122 123 124 125 126 128 131 132 133 134 137 139 140 141 142 145 146 147 149 150 151 152 156 159 163 165 166 169 170 175 177 180 181 182 187 189 192 194 195 196 197 198 201 203 204 207 211 212 213 214 215 216 217 218 219 221 222 2211 224 0 1 f 2212 224 0 1 e 2213 224 0 1 1 2 3 5 6 9 10 11 13 14 16 17 18 19 24 25 26 28 29 31 33 40 43 44 45 46 47 59 60 63 64 66 69 72 74 75 76 77 79 80 90 91 93 95 97 98 100 106 108 109 110 112 113 124 127 129 131 132 134 137 139 141 144 147 148 150 151 153 158 160 161 162 163 166 168 169 175 179 182 183 184 185 186 187 188 190 194 196 200 206 207 211 213 215 217 218 219 220 223 2214 224 1 0 f 2215 224 1 0 e 2216 224 1 0 0 1 2 7 9 10 11 12 13 16 18 19 21 25 27 30 31 32 34 35 37 38 39 44 49 50 54 56 57 58 59 60 64 65 67 68 69 71 72 74 75 77 78 79 81 82 84 88 94 95 97 98 99 101 103 108 110 112 113 116 117 119 120 122 123 124 126 127 128 131 132 134 135 137 140 141 148 149 150 152 156 157 158 160 161 165 172 176 177 181 182 183 184 185 189 190 191 192 193 194 195 197 198 200 203 205 206 207 209 213 214 215 217 220 221 222 2217 224 1 1 f 2218 224 1 1 e 2219 224 1 1 2 7 9 11 13 20 21 23 24 26 28 31 32 33 34 35 36 37 41 42 45 47 50 51 53 54 55 56 58 60 61 62 66 67 69 70 74 75 77 81 82 84 86 88 90 92 95 96 97 99 102 103 112 117 118 119 120 122 125 126 127 129 131 132 141 143 144 147 148 149 150 152 155 157 158 160 161 162 164 165 168 169 171 173 174 175 176 177 179 181 182 183 188 189 192 194 196 197 199 201 205 206 207 212 214 215 218 219 220 2220 247 0 0 f 2221 247 0 0 e 2222 247 0 0 1 2 3 5 7 9 10 13 15 16 18 21 24 25 28 30 31 32 34 35 36 37 43 44 48 49 51 55 59 61 62 63 64 68 69 72 73 74 76 77 83 84 87 92 93 94 96 97 98 99 101 102 103 106 108 109 111 115 117 120 123 125 126 127 128 131 133 134 136 141 144 146 148 149 151 152 153 155 157 158 159 161 162 164 169 170 173 175 176 177 178 179 184 186 187 188 190 191 194 195 198 200 202 203 204 205 207 208 211 214 215 217 219 220 221 222 223 224 227 231 233 237 238 239 240 241 242 243 244 2223 247 0 1 f 2224 247 0 1 e 2225 247 0 1 0 1 4 6 8 10 11 13 14 16 19 21 25 26 27 29 30 31 32 37 39 40 41 45 48 50 56 57 61 62 63 64 65 66 67 68 70 72 73 76 80 81 83 84 86 87 88 89 90 92 94 97 99 100 101 102 107 111 115 116 120 121 126 128 129 130 137 139 140 143 145 146 147 148 149 152 154 155 158 159 160 162 163 166 167 168 169 172 176 177 178 181 182 183 189 191 192 193 196 197 198 200 201 202 204 205 207 210 212 215 222 223 224 225 226 227 228 230 232 235 236 237 239 240 241 2226 247 1 0 f 2227 247 1 0 e 2228 247 1 0 3 8 10 12 15 16 18 23 24 26 29 34 39 43 47 49 55 57 58 60 61 62 63 64 66 67 70 73 74 76 77 78 79 80 81 83 88 90 92 94 95 97 99 100 101 102 103 105 106 107 110 111 113 116 117 120 121 122 124 126 128 130 132 134 136 138 140 142 143 144 146 148 149 150 152 161 163 166 167 169 170 171 172 173 175 176 177 178 180 187 189 190 193 196 197 201 202 206 207 208 210 212 213 215 217 221 222 224 225 226 229 231 234 235 239 243 244 246 2229 247 1 1 f 2230 247 1 1 e 2231 247 1 1 0 1 2 4 5 6 10 14 15 17 19 20 24 28 29 30 31 33 34 41 44 45 47 50 51 52 53 56 60 62 64 67 70 72 73 74 76 77 78 79 80 82 84 85 88 89 90 91 92 94 96 97 98 99 100 104 105 109 111 113 115 119 120 121 124 125 129 131 132 134 135 136 137 138 139 140 141 143 148 152 154 155 157 158 160 161 164 165 166 168 169 170 174 175 177 178 179 181 183 185 191 192 195 197 198 199 201 202 203 204 207 208 209 210 211 212 213 214 215 217 218 220 221 223 228 229 230 234 235 237 238 239 242 243 244 2232 -1 2233 -1 2234 -1 2235 -1 2236 -1 2237 -1 2238 -1 2239 -1 2240 -1 2241 -1 2242 -1 2243 -1 2244 -1 2245 0 2246 -1 2247 -1 2248 0 2249 -1 2250 -1 2251 0 2252 -1 2253 -1 2254 0 2255 -1 2256 -1 2257 0 2258 3 2259 -1 2260 0 2261 1 2262 -1 2263 0 2264 2 2265 -1 2266 0 2267 0 2268 -1 2269 0 2270 5 2271 -1 2272 0 2273 2 2274 -1 2275 0 2276 1 2277 -1 2278 0 2279 2 2280 -1 2281 0 2282 1 2283 -1 2284 0 2285 0 2286 -1 2287 0 2288 1 2289 -1 2290 0 2291 0 2292 -1 2293 0 2294 1 2295 -1 2296 0 2297 1 2298 -1 2299 0 2300 0 2301 -1 2302 0 2303 0 2304 -1 2305 0 2306 3 2307 -1 2308 0 2309 0 2310 -1 2311 0 2312 0 2313 -1 2314 0 2315 3 2316 -1 2317 0 2318 2 2319 -1 2320 0 2321 0 2322 -1 2323 0 2324 0 2325 -1 2326 0 2327 1 2328 -1 2329 0 2330 2 2331 -1 2332 0 2333 0 2334 -1 2335 0 2336 0 2337 -1 2338 0 2339 1 2340 -1 2341 0 2342 0 2343 -1 2344 0 2345 8 2346 -1 2347 0 2348 0 2349 -1 2350 0 2351 3 2352 -1 2353 0 2354 0 2355 -1 2356 0 2357 2 2358 -1 2359 0 2360 0 2361 -1 2362 0 2363 4 2364 -1 2365 -1 2366 -1 2367 -1 2368 -1 2369 -1 2370 -1 2371 -1 2372 -1 2373 -1 2374 -1 2375 -1 2376 0 2377 -1 2378 -1 2379 0 2380 -1 2381 0 2382 0 2383 -1 2384 -1 2385 0 2386 -1 2387 0 2388 0 2389 -1 2390 2 2391 0 2392 -1 2393 2 2394 0 2395 -1 2396 3 2397 0 2398 -1 2399 2 2400 0 2401 -1 2402 0 2403 0 2404 -1 2405 1 2406 0 2407 -1 2408 2 2409 0 2410 -1 2411 0 2412 0 2413 -1 2414 1 2415 0 2416 -1 2417 0 2418 0 2419 -1 2420 3 2421 0 2422 -1 2423 0 2424 0 2425 -1 2426 0 2427 0 2428 -1 2429 0 2430 0 2431 -1 2432 0 2433 0 2434 -1 2435 0 2436 0 2437 -1 2438 2 2439 0 2440 -1 2441 0 2442 0 2443 -1 2444 0 2445 0 2446 -1 2447 3 2448 0 2449 -1 2450 1 2451 0 2452 -1 2453 0 2454 0 2455 -1 2456 5 2457 0 2458 -1 2459 1 2460 0 2461 -1 2462 1 2463 0 2464 -1 2465 1 2466 0 2467 -1 2468 0 2469 0 2470 -1 2471 0 2472 0 2473 -1 2474 0 2475 0 2476 -1 2477 1 2478 0 2479 -1 2480 1 2481 0 2482 -1 2483 6 2484 0 2485 -1 2486 1 2487 0 2488 -1 2489 4 2490 0 2491 -1 2492 0 2493 0 2494 -1 2495 1 2496 0 2497 0 2498 0 2499 0 2500 0 2501 0 2502 0 2503 0 2504 0 2505 0 2506 0 2507 0 2508 0 2509 1 2510 0 2511 0 2512 1 2513 0 2514 0 2515 1 2516 0 2517 0 2518 1 2519 0 2520 0 2521 31 2522 14 2523 0 2524 31 2525 16 2526 0 2527 31 2528 16 2529 0 2530 31 2531 14 2532 0 2533 32 2534 14 2535 0 2536 32 2537 13 2538 0 2539 32 2540 18 2541 0 2542 32 2543 21 2544 0 2545 33 2546 16 2547 0 2548 33 2549 16 2550 0 2551 33 2552 16 2553 0 2554 33 2555 18 2556 0 2557 63 2558 31 2559 0 2560 63 2561 30 2562 0 2563 63 2564 29 2565 0 2566 63 2567 35 2568 0 2569 64 2570 32 2571 0 2572 64 2573 36 2574 0 2575 64 2576 29 2577 0 2578 64 2579 28 2580 0 2581 65 2582 33 2583 0 2584 65 2585 35 2586 0 2587 65 2588 36 2589 0 2590 65 2591 33 2592 0 2593 211 2594 105 2595 0 2596 211 2597 112 2598 0 2599 211 2600 97 2601 0 2602 211 2603 109 2604 0 2605 224 2606 109 2607 0 2608 224 2609 102 2610 0 2611 224 2612 117 2613 0 2614 224 2615 109 2616 0 2617 247 2618 121 2619 0 2620 247 2621 123 2622 0 2623 247 2624 121 2625 0 2626 247 2627 123 2628 1 2629 1 2630 1 2631 1 2632 1 2633 1 2634 1 2635 1 2636 1 2637 1 2638 1 2639 1 2640 1 2641 1 2642 1 2643 1 2644 1 2645 1 2646 1 2647 1 2648 1 2649 1 2650 1 2651 1 2652 1 2653 1 2654 1 2655 1 2656 1 2657 1 2658 1 2659 1 2660 1 2661 1 2662 1 2663 1 2664 1 2665 1 2666 1 2667 1 2668 1 2669 1 2670 1 2671 1 2672 1 2673 1 2674 1 2675 1 2676 1 2677 1 2678 1 2679 1 2680 1 2681 1 2682 1 2683 1 2684 1 2685 1 2686 1 2687 1 2688 1 2689 1 2690 1 2691 1 2692 1 2693 0 2694 1 2695 1 2696 0 2697 1 2698 1 2699 1 2700 1 2701 0 2702 1 2703 1 2704 1 2705 1 2706 1 2707 1 2708 0 2709 1 2710 1 2711 0 2712 1 2713 0 2714 1 2715 0 2716 0 2717 1 2718 1 2719 1 2720 1 2721 1 2722 1 2723 0 2724 1 2725 1 2726 0 2727 1 2728 0 2729 1 2730 1 2731 1 2732 1 2733 1 2734 1 2735 1 2736 1 2737 1 2738 0 2739 1 2740 0 2741 0 2742 1 2743 0 2744 1 2745 0 2746 1 2747 1 2748 1 2749 1 2750 1 2751 1 2752 1 2753 0 2754 1 2755 0 2756 0 2757 0 2758 0 2759 1 2760 0 2761 0 2762 0 2763 1 2764 1 2765 1 2766 1 2767 1 2768 0 2769 1 2770 0 2771 0 2772 0 2773 0 2774 1 2775 0 2776 0 2777 0 2778 1 2779 1 2780 1 2781 1 2782 1 2783 0 2784 1 2785 0 2786 0 2787 0 2788 0 2789 1 2790 0 2791 0 2792 0 2793 1 2794 1 2795 1 2796 1 2797 1 2798 0 2799 1 2800 0 2801 0 2802 0 2803 0 2804 1 2805 0 2806 0 2807 0 2808 1 2809 1 2810 1 2811 1 2812 1 2813 0 2814 1 2815 0 2816 0 2817 0 2818 0 2819 1 2820 0 2821 0 2822 0 2823 1 2824 1 2825 1 2826 1 2827 1 2828 0 2829 1 2830 0 2831 0 2832 0 2833 0 2834 1 2835 1 2836 0 2837 0 2838 1 2839 1 2840 1 2841 1 2842 1 2843 0 2844 1 2845 0 2846 0 2847 0 2848 0 2849 1 2850 0 2851 0 2852 0 2853 1 2854 1 2855 1 2856 1 2857 1 2858 0 2859 1 2860 0 2861 0 2862 0 2863 0 2864 1 2865 0 2866 0 2867 0 2868 1 2869 1 2870 1 2871 1 2872 1 2873 0 2874 1 2875 0 2876 0 2877 0 2878 0 2879 1 2880 0 2881 0 2882 0 2883 1 2884 1 2885 1 2886 1 2887 1 2888 0 2889 1 2890 0 2891 0 2892 0 2893 0 2894 1 2895 0 2896 0 2897 1 2898 1 2899 1 2900 1 2901 1 2902 1 2903 0 2904 1 2905 0 2906 0 2907 0 2908 0 2909 1 2910 1 2911 0 2912 0 2913 1 2914 1 2915 1 2916 1 2917 1 2918 0 2919 1 2920 0 2921 0 2922 0 2923 0 2924 1 2925 0 2926 0 2927 0 2928 1 2929 1 2930 1 2931 1 2932 1 2933 0 2934 1 2935 0 2936 0 2937 0 2938 0 2939 1 2940 0 2941 0 2942 0 2943 1 2944 1 2945 1 2946 1 2947 1 2948 0 2949 1 2950 0 2951 0 2952 0 2953 0 2954 1 2955 0 2956 0 2957 0 2958 1 2959 1 2960 1 2961 1 2962 1 2963 0 2964 1 2965 0 2966 0 2967 0 2968 0 2969 1 2970 0 2971 0 2972 0 2973 1 2974 1 2975 1 2976 1 2977 1 2978 0 2979 1 2980 0 2981 0 2982 0 2983 0 2984 1 2985 0 2986 0 2987 0 2988 1 2989 1 2990 1 2991 1 2992 1 2993 0 2994 1 2995 0 2996 0 2997 0 2998 0 2999 1 3000 0 3001 0 3002 0 3003 1 3004 1 3005 1 3006 1 3007 1 3008 0 3009 1 3010 0 3011 0 3012 0 3013 0 3014 1 3015 0 3016 0 3017 0 3018 1 3019 1 3020 1 3021 1 3022 1 3023 0 3024 1 3025 0 3026 0 3027 0 3028 0 3029 1 3030 0 3031 0 3032 0 3033 1 3034 1 3035 1 3036 1 3037 1 3038 0 3039 1 3040 0 3041 0 3042 0 3043 0 3044 1 3045 0 3046 0 3047 0 3048 1 3049 1 3050 1 3051 1 3052 1 3053 0 3054 1 3055 0 3056 0 3057 0 3058 0 3059 1 3060 0 3061 0 3062 0 3063 1 3064 1 3065 1 3066 1 3067 1 3068 0 3069 1 3070 0 3071 0 3072 0 3073 0 3074 1 3075 0 3076 0 3077 0 3078 1 3079 1 3080 1 3081 1 3082 1 3083 0 3084 1 3085 0 3086 0 3087 0 3088 0 3089 1 3090 0 3091 0 3092 0 3093 1 3094 1 3095 1 3096 1 3097 1 3098 0 3099 1 3100 0 3101 0 3102 0 3103 0 3104 1 3105 0 3106 0 3107 0 3108 1 3109 1 3110 1 3111 1 3112 1 3113 0 3114 1 3115 0 3116 0 3117 0 3118 0 3119 1 3120 0 3121 0 3122 0 3123 1 3124 1 3125 1 3126 1 3127 1 3128 0 3129 1 3130 0 3131 0 3132 0 3133 0 3134 1 3135 0 3136 0 3137 0 3138 1 3139 1 3140 1 3141 1 3142 1 3143 0 3144 1 3145 0 3146 0 3147 0 3148 0 3149 1 3150 0 3151 0 3152 0 3153 1 3154 1 3155 1 3156 1 3157 1 3158 0 3159 1 3160 0 3161 0 3162 0 3163 0 3164 1 3165 0 3166 0 3167 0 3168 1 3169 1 3170 1 3171 1 3172 1 3173 0 3174 1 3175 0 3176 0 3177 0 3178 0 3179 1 3180 0 3181 0 3182 0 3183 1 3184 1 3185 1 3186 1 3187 1 3188 0 3189 1 3190 0 3191 0 3192 0 3193 0 3194 1 3195 0 3196 0 3197 0 3198 1 3199 1 3200 1 3201 1 3202 1 3203 0 3204 1 3205 0 3206 0 3207 0 3208 0 3209 1 3210 0 3211 0 3212 0 3213 1 3214 1 3215 1 3216 1 3217 1 3218 0 3219 1 3220 0 3221 0 3222 0 3223 0 3224 1 3225 0 3226 0 3227 0 3228 1 3229 1 3230 1 3231 1 3232 1 3233 0 3234 1 3235 0 3236 0 3237 0 3238 0 3239 1 3240 0 3241 0 3242 0 3243 1 3244 1 3245 1 3246 1 3247 1 3248 0 3249 1 3250 0 3251 0 3252 0 3253 0 3254 1 3255 0 3256 0 3257 0 3258 1 3259 1 3260 1 3261 1 3262 1 3263 0 3264 1 3265 0 3266 0 3267 0 3268 0 3269 1 3270 0 3271 0 3272 0 3273 1 3274 1 3275 1 3276 1 3277 1 3278 0 3279 1 3280 0 3281 0 3282 0 3283 0 3284 1 3285 0 3286 0 3287 0 3288 1 3289 1 3290 1 3291 1 3292 1 3293 1 3294 1 3295 1 3296 1 3297 1 3298 1 3299 1 3300 1 3301 1 3302 1 3303 1 3304 1 3305 1 3306 1 3307 1 3308 1 3309 1 3310 1 3311 1 3312 1 3313 1 3314 1 3315 1 3316 1 3317 1 3318 1 3319 1 3320 1 3321 1 3322 1 3323 1 3324 1 3325 1 3326 1 3327 1 3328 1 3329 1 3330 1 3331 1 3332 1 3333 1 3334 1 3335 1 3336 1 3337 1 3338 1 3339 1 3340 1 3341 1 3342 1 3343 1 3344 1 3345 1 3346 1 3347 1 3348 0 3349 1 3350 0 3351 0 3352 0 3353 1 3354 1 3355 1 3356 1 3357 1 3358 0 3359 1 3360 1 3361 1 3362 1 3363 0 3364 1 3365 1 3366 0 3367 0 3368 1 3369 1 3370 1 3371 1 3372 1 3373 1 3374 1 3375 0 3376 0 3377 1 3378 0 3379 1 3380 1 3381 0 3382 0 3383 1 3384 1 3385 1 3386 1 3387 1 3388 1 3389 1 3390 1 3391 1 3392 0 3393 0 3394 1 3395 1 3396 0 3397 0 3398 1 3399 1 3400 1 3401 1 3402 1 3403 0 3404 1 3405 1 3406 0 3407 1 3408 0 3409 1 3410 0 3411 0 3412 0 3413 1 3414 1 3415 1 3416 1 3417 1 3418 0 3419 1 3420 0 3421 0 3422 0 3423 0 3424 1 3425 0 3426 0 3427 0 3428 1 3429 1 3430 1 3431 1 3432 1 3433 0 3434 1 3435 0 3436 0 3437 0 3438 0 3439 1 3440 0 3441 0 3442 0 3443 1 3444 1 3445 1 3446 1 3447 1 3448 0 3449 1 3450 0 3451 0 3452 0 3453 0 3454 1 3455 0 3456 0 3457 0 3458 1 3459 1 3460 1 3461 1 3462 1 3463 0 3464 1 3465 0 3466 0 3467 0 3468 0 3469 1 3470 0 3471 0 3472 0 3473 1 3474 1 3475 1 3476 1 3477 1 3478 0 3479 1 3480 0 3481 0 3482 0 3483 0 3484 1 3485 0 3486 0 3487 0 3488 1 3489 1 3490 1 3491 1 3492 1 3493 0 3494 1 3495 0 3496 0 3497 0 3498 0 3499 1 3500 1 3501 0 3502 0 3503 1 3504 1 3505 1 3506 1 3507 1 3508 0 3509 1 3510 0 3511 0 3512 0 3513 0 3514 1 3515 0 3516 0 3517 0 3518 1 3519 1 3520 1 3521 1 3522 1 3523 0 3524 1 3525 0 3526 0 3527 0 3528 0 3529 1 3530 0 3531 0 3532 0 3533 1 3534 1 3535 1 3536 1 3537 1 3538 0 3539 1 3540 0 3541 0 3542 0 3543 0 3544 1 3545 0 3546 0 3547 0 3548 1 3549 1 3550 1 3551 1 3552 1 3553 0 3554 1 3555 0 3556 0 3557 0 3558 0 3559 1 3560 0 3561 0 3562 0 3563 1 3564 1 3565 1 3566 1 3567 1 3568 0 3569 1 3570 0 3571 0 3572 0 3573 0 3574 1 3575 0 3576 0 3577 0 3578 1 3579 1 3580 1 3581 1 3582 1 3583 0 3584 1 3585 0 3586 0 3587 0 3588 0 3589 1 3590 0 3591 0 3592 0 3593 1 3594 1 3595 1 3596 1 3597 1 3598 0 3599 1 3600 0 3601 0 3602 0 3603 0 3604 1 3605 0 3606 0 3607 0 3608 1 3609 1 3610 1 3611 1 3612 1 3613 0 3614 1 3615 0 3616 0 3617 0 3618 0 3619 1 3620 0 3621 0 3622 0 3623 1 3624 1 3625 1 3626 1 3627 1 3628 0 3629 1 3630 0 3631 0 3632 0 3633 0 3634 1 3635 0 3636 0 3637 0 3638 1 3639 1 3640 1 3641 1 3642 1 3643 0 3644 1 3645 1 3646 0 3647 0 3648 0 3649 1 3650 0 3651 0 3652 0 3653 1 3654 1 3655 1 3656 1 3657 1 3658 0 3659 1 3660 0 3661 0 3662 0 3663 0 3664 1 3665 0 3666 0 3667 0 3668 1 3669 1 3670 1 3671 1 3672 1 3673 0 3674 1 3675 0 3676 0 3677 0 3678 0 3679 1 3680 0 3681 0 3682 0 3683 1 3684 1 3685 1 3686 1 3687 1 3688 0 3689 1 3690 0 3691 0 3692 1 3693 0 3694 1 3695 1 3696 0 3697 0 3698 1 3699 1 3700 1 3701 1 3702 1 3703 0 3704 1 3705 0 3706 0 3707 0 3708 0 3709 1 3710 0 3711 0 3712 0 3713 1 3714 1 3715 1 3716 1 3717 1 3718 0 3719 1 3720 0 3721 0 3722 0 3723 0 3724 1 3725 0 3726 0 3727 0 3728 1 3729 1 3730 1 3731 1 3732 1 3733 0 3734 1 3735 0 3736 0 3737 0 3738 0 3739 1 3740 0 3741 0 3742 0 3743 1 3744 1 3745 1 3746 1 3747 1 3748 0 3749 1 3750 0 3751 0 3752 1 3753 0 3754 1 3755 0 3756 0 3757 0 3758 1 3759 1 3760 1 3761 1 3762 1 3763 0 3764 1 3765 0 3766 0 3767 0 3768 0 3769 1 3770 0 3771 0 3772 0 3773 1 3774 1 3775 1 3776 1 3777 1 3778 0 3779 1 3780 0 3781 0 3782 0 3783 0 3784 1 3785 0 3786 0 3787 0 3788 1 3789 1 3790 1 3791 1 3792 1 3793 0 3794 1 3795 0 3796 0 3797 0 3798 0 3799 1 3800 0 3801 0 3802 0 3803 1 3804 1 3805 1 3806 1 3807 1 3808 0 3809 1 3810 0 3811 0 3812 0 3813 0 3814 1 3815 0 3816 0 3817 0 3818 1 3819 1 3820 1 3821 1 3822 1 3823 0 3824 1 3825 0 3826 0 3827 0 3828 0 3829 1 3830 0 3831 0 3832 0 3833 1 3834 1 3835 1 3836 1 3837 1 3838 0 3839 1 3840 0 3841 0 3842 0 3843 0 3844 1 3845 0 3846 0 3847 0 3848 1 3849 1 3850 1 3851 1 3852 1 3853 0 3854 1 3855 1 3856 0 3857 0 3858 0 3859 1 3860 0 3861 0 3862 0 3863 1 3864 1 3865 1 3866 1 3867 1 3868 0 3869 1 3870 0 3871 0 3872 0 3873 0 3874 1 3875 0 3876 0 3877 0 3878 1 3879 1 3880 1 3881 1 3882 1 3883 0 3884 1 3885 0 3886 0 3887 0 3888 0 3889 1 3890 0 3891 0 3892 0 3893 1 3894 1 3895 1 3896 1 3897 1 3898 0 3899 1 3900 0 3901 0 3902 0 3903 0 3904 1 3905 0 3906 0 3907 0 3908 1 3909 1 3910 1 3911 1 3912 1 3913 0 3914 1 3915 0 3916 0 3917 0 3918 0 3919 1 3920 0 3921 0 3922 0 3923 1 3924 1 3925 1 3926 1 3927 1 3928 0 3929 1 3930 1 3931 0 3932 0 3933 0 3934 1 3935 0 3936 0 3937 0 3938 1 3939 1 3940 1 3941 1 3942 1 3943 0 3944 1 3945 0 3946 0 3947 0 3948 0 0 0 e 3949 0 0 0 e 3950 0 0 0 e 3951 0 0 0 e 3952 0 0 0 e 3953 0 0 0 e 3954 0 0 0 e 3955 0 0 0 e 3956 0 0 0 e 3957 0 0 0 e 3958 0 0 0 e 3959 0 0 0 e 3960 0 0 0 e 3961 0 0 0 e 3962 0 0 0 e 3963 0 0 1 e 3964 0 0 1 e 3965 0 0 1 e 3966 0 0 1 e 3967 0 0 1 e 3968 0 0 1 e 3969 0 0 1 e 3970 0 0 1 e 3971 0 0 1 e 3972 0 0 1 e 3973 0 0 1 e 3974 0 0 1 e 3975 0 0 1 e 3976 0 0 1 e 3977 0 0 1 e 3978 0 1 0 e 3979 0 1 0 e 3980 0 1 0 e 3981 0 1 0 e 3982 0 1 0 e 3983 0 1 0 e 3984 0 1 0 e 3985 0 1 0 e 3986 0 1 0 e 3987 0 1 0 e 3988 0 1 0 e 3989 0 1 0 e 3990 0 1 0 e 3991 0 1 0 e 3992 0 1 0 e 3993 0 1 1 e 3994 0 1 1 e 3995 0 1 1 e 3996 0 1 1 e 3997 0 1 1 e 3998 0 1 1 e 3999 0 1 1 e 4000 0 1 1 e 4001 0 1 1 e 4002 0 1 1 e 4003 0 1 1 e 4004 0 1 1 e 4005 0 1 1 e 4006 0 1 1 e 4007 0 1 1 e 4008 1 0 0 e 4009 1 0 0 e 4010 1 0 0 e 4011 1 0 0 e 4012 1 0 0 e 4013 1 0 0 e 4014 1 0 0 f 4015 1 0 0 f 4016 1 0 0 e 4017 1 0 0 e 4018 1 0 0 e 4019 1 0 0 f 4020 1 0 0 e 4021 1 0 0 e 4022 1 0 0 f 4023 1 0 1 e 4024 1 0 1 e 4025 1 0 1 e 4026 1 0 1 e 4027 1 0 1 e 4028 1 0 1 e 4029 1 0 1 f 4030 1 0 1 f 4031 1 0 1 e 4032 1 0 1 f 4033 1 0 1 e 4034 1 0 1 e 4035 1 0 1 e 4036 1 0 1 e 4037 1 0 1 e 4038 1 1 0 e 4039 1 1 0 e 4040 1 1 0 e 4041 1 1 0 e 4042 1 1 0 e 4043 1 1 0 e 4044 1 1 0 f 4045 1 1 0 e 4046 1 1 0 e 4047 1 1 0 f 4048 1 1 0 e 4049 1 1 0 e 4050 1 1 0 e 4051 1 1 0 e 4052 1 1 0 e 4053 1 1 1 e 4054 1 1 1 e 4055 1 1 1 e 4056 1 1 1 e 4057 1 1 1 e 4058 1 1 1 e 4059 1 1 1 f 4060 1 1 1 e 4061 1 1 1 e 4062 1 1 1 f 4063 1 1 1 e 4064 1 1 1 f 4065 1 1 1 f 4066 1 1 1 e 4067 1 1 1 f 4068 31 0 0 e 4069 31 0 0 e 4070 31 0 0 e 4071 31 0 0 e 4072 31 0 0 e 4073 31 0 0 e 4074 31 0 0 f 4075 31 0 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 4076 31 0 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 4077 31 0 0 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 4078 31 0 0 e 4079 31 0 0 0 1 2 3 6 7 9 11 13 14 17 18 20 22 25 28 29 4080 31 0 0 1 2 3 4 21 24 25 27 29 4081 31 0 0 e 4082 31 0 0 8 9 10 11 12 13 21 24 25 26 27 29 4083 31 0 1 e 4084 31 0 1 e 4085 31 0 1 e 4086 31 0 1 e 4087 31 0 1 e 4088 31 0 1 e 4089 31 0 1 f 4090 31 0 1 0 1 2 3 4 5 6 7 8 9 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 4091 31 0 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 4092 31 0 1 26 27 28 29 30 4093 31 0 1 e 4094 31 0 1 0 2 4 8 9 11 12 13 14 15 18 20 21 22 29 4095 31 0 1 3 6 13 16 19 21 23 25 26 29 30 4096 31 0 1 1 2 3 4097 31 0 1 e 4098 31 1 0 e 4099 31 1 0 e 4100 31 1 0 e 4101 31 1 0 e 4102 31 1 0 e 4103 31 1 0 e 4104 31 1 0 f 4105 31 1 0 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 4106 31 1 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 4107 31 1 0 26 27 28 29 30 4108 31 1 0 e 4109 31 1 0 1 2 3 6 8 11 15 16 17 18 19 20 21 23 26 29 30 4110 31 1 0 0 2 4 6 8 9 10 11 13 14 27 4111 31 1 0 0 2 6 9 10 12 4112 31 1 0 5 6 8 9 11 12 13 14 16 17 19 21 30 4113 31 1 1 e 4114 31 1 1 e 4115 31 1 1 e 4116 31 1 1 e 4117 31 1 1 e 4118 31 1 1 e 4119 31 1 1 f 4120 31 1 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 4121 31 1 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 4122 31 1 1 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 4123 31 1 1 e 4124 31 1 1 0 2 3 4 5 7 9 10 11 12 13 16 17 23 24 28 29 30 4125 31 1 1 0 3 4 7 9 10 15 17 19 20 21 22 27 29 30 4126 31 1 1 0 4127 31 1 1 e 4128 32 0 0 e 4129 32 0 0 e 4130 32 0 0 e 4131 32 0 0 e 4132 32 0 0 e 4133 32 0 0 e 4134 32 0 0 f 4135 32 0 0 0 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 4136 32 0 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 4137 32 0 0 24 25 26 27 28 29 30 31 4138 32 0 0 e 4139 32 0 0 1 3 4 8 9 12 13 16 17 18 19 20 21 23 24 26 28 29 30 4140 32 0 0 2 8 12 15 18 21 22 23 25 26 28 30 4141 32 0 0 0 1 2 5 6 7 4142 32 0 0 4 6 7 8 9 12 14 16 17 18 20 23 24 27 31 4143 32 0 1 e 4144 32 0 1 e 4145 32 0 1 e 4146 32 0 1 e 4147 32 0 1 e 4148 32 0 1 e 4149 32 0 1 f 4150 32 0 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 4151 32 0 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 4152 32 0 1 f 4153 32 0 1 e 4154 32 0 1 0 3 13 14 15 16 17 25 26 27 28 30 31 4155 32 0 1 3 5 9 12 17 18 19 20 23 24 26 27 28 31 4156 32 0 1 0 1 5 8 10 14 4157 32 0 1 8 9 12 13 15 17 18 19 24 25 26 29 30 4158 32 1 0 e 4159 32 1 0 e 4160 32 1 0 e 4161 32 1 0 e 4162 32 1 0 e 4163 32 1 0 e 4164 32 1 0 f 4165 32 1 0 0 1 2 3 4 5 6 7 19 20 21 22 23 24 25 26 27 28 29 30 31 4166 32 1 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 4167 32 1 0 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 4168 32 1 0 e 4169 32 1 0 0 1 3 5 6 7 8 9 10 11 13 15 16 17 19 22 23 24 25 28 31 4170 32 1 0 9 11 12 13 16 17 18 20 24 25 26 27 28 29 4171 32 1 0 e 4172 32 1 0 5 6 9 10 15 16 18 22 23 24 25 26 27 28 29 30 4173 32 1 1 e 4174 32 1 1 e 4175 32 1 1 e 4176 32 1 1 e 4177 32 1 1 e 4178 32 1 1 e 4179 32 1 1 f 4180 32 1 1 0 1 2 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 4181 32 1 1 e 4182 32 1 1 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 4183 32 1 1 e 4184 32 1 1 0 2 6 7 10 11 12 14 15 16 18 25 28 29 4185 32 1 1 0 2 3 8 9 11 16 18 20 24 25 26 29 30 4186 32 1 1 0 1 2 4 5 9 10 11 13 18 19 22 24 29 4187 32 1 1 9 12 13 14 16 18 22 24 26 27 4188 33 0 0 e 4189 33 0 0 e 4190 33 0 0 e 4191 33 0 0 e 4192 33 0 0 e 4193 33 0 0 e 4194 33 0 0 f 4195 33 0 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 30 31 32 4196 33 0 0 0 1 2 3 4 5 6 7 8 4197 33 0 0 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 4198 33 0 0 e 4199 33 0 0 2 3 4 6 7 8 9 10 12 14 15 16 17 19 21 23 24 26 28 29 30 4200 33 0 0 0 1 2 3 4 5 8 9 12 14 28 29 30 31 32 4201 33 0 0 0 1 2 3 5 7 4202 33 0 0 1 4 5 6 7 9 10 12 13 14 15 17 18 20 22 23 25 26 28 30 31 4203 33 0 1 e 4204 33 0 1 e 4205 33 0 1 e 4206 33 0 1 e 4207 33 0 1 e 4208 33 0 1 e 4209 33 0 1 f 4210 33 0 1 0 1 2 3 4 5 6 7 8 9 10 11 27 28 29 30 31 32 4211 33 0 1 0 1 2 3 4 5 4212 33 0 1 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 4213 33 0 1 e 4214 33 0 1 0 1 2 3 4 5 6 7 13 14 15 16 17 20 21 22 23 24 26 28 31 4215 33 0 1 0 1 3 5 10 11 13 15 16 18 19 21 24 25 26 27 28 29 31 32 4216 33 0 1 5 6 9 4217 33 0 1 13 16 17 18 20 22 23 24 26 29 4218 33 1 0 e 4219 33 1 0 e 4220 33 1 0 e 4221 33 1 0 e 4222 33 1 0 e 4223 33 1 0 e 4224 33 1 0 f 4225 33 1 0 0 1 2 3 4 5 6 29 30 31 32 4226 33 1 0 0 1 4227 33 1 0 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 4228 33 1 0 e 4229 33 1 0 0 2 10 13 14 17 19 20 21 24 25 30 4230 33 1 0 0 3 5 6 7 12 14 18 19 21 23 27 28 31 4231 33 1 0 0 3 5 7 8 9 13 14 15 17 19 20 21 23 24 25 4232 33 1 0 25 27 29 32 4233 33 1 1 e 4234 33 1 1 e 4235 33 1 1 e 4236 33 1 1 e 4237 33 1 1 e 4238 33 1 1 e 4239 33 1 1 f 4240 33 1 1 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 4241 33 1 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 4242 33 1 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 4243 33 1 1 e 4244 33 1 1 2 3 5 6 8 11 12 13 16 20 21 30 31 32 4245 33 1 1 0 6 9 10 12 14 15 17 20 21 22 27 28 31 32 4246 33 1 1 0 6 7 10 13 15 16 18 4247 33 1 1 18 19 20 22 23 25 26 29 4248 63 0 0 e 4249 63 0 0 e 4250 63 0 0 e 4251 63 0 0 e 4252 63 0 0 e 4253 63 0 0 e 4254 63 0 0 f 4255 63 0 0 0 1 2 3 4 5 6 7 8 9 10 11 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 4256 63 0 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 4257 63 0 0 51 52 53 54 55 56 57 58 59 60 61 62 4258 63 0 0 e 4259 63 0 0 0 1 3 5 6 9 11 14 15 16 17 18 22 23 24 25 26 28 29 30 31 34 35 39 42 43 44 45 46 50 51 52 53 54 55 56 58 61 4260 63 0 0 0 4 6 8 9 10 11 15 18 20 22 26 28 30 31 32 35 38 40 41 4261 63 0 0 3 5 6 8 10 12 13 15 16 17 18 21 22 24 26 28 30 34 35 36 37 38 39 40 41 43 45 4262 63 0 0 10 11 12 15 16 17 18 20 21 22 23 24 26 28 30 36 37 42 44 46 47 49 51 52 53 54 55 57 58 59 61 4263 63 0 1 e 4264 63 0 1 e 4265 63 0 1 e 4266 63 0 1 e 4267 63 0 1 e 4268 63 0 1 e 4269 63 0 1 f 4270 63 0 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 52 53 54 55 56 57 58 59 60 61 62 4271 63 0 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 4272 63 0 1 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 4273 63 0 1 e 4274 63 0 1 2 3 8 9 11 15 16 18 19 21 23 26 27 31 32 34 37 38 40 44 45 47 49 51 52 53 54 60 61 4275 63 0 1 0 1 2 3 4 34 36 37 43 44 47 48 49 50 52 53 56 58 59 62 4276 63 0 1 0 2 3 4 6 9 10 11 12 13 14 15 20 21 25 4277 63 0 1 59 60 4278 63 1 0 e 4279 63 1 0 e 4280 63 1 0 e 4281 63 1 0 e 4282 63 1 0 e 4283 63 1 0 e 4284 63 1 0 f 4285 63 1 0 0 1 2 3 4 5 6 7 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 4286 63 1 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 4287 63 1 0 55 56 57 58 59 60 61 62 4288 63 1 0 e 4289 63 1 0 0 1 2 3 5 7 8 9 12 13 14 15 16 17 18 25 27 28 29 33 35 36 37 38 39 40 41 44 47 52 53 54 56 61 62 4290 63 1 0 2 3 25 27 28 30 32 35 36 37 39 42 43 44 45 47 48 50 54 4291 63 1 0 0 2 3 6 7 9 10 13 14 15 18 19 22 24 26 28 30 33 35 4292 63 1 0 3 7 8 12 14 16 18 20 21 23 24 27 30 31 34 35 36 38 39 40 41 43 46 48 49 50 51 53 57 60 61 4293 63 1 1 e 4294 63 1 1 e 4295 63 1 1 e 4296 63 1 1 e 4297 63 1 1 e 4298 63 1 1 e 4299 63 1 1 f 4300 63 1 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 51 52 53 54 55 56 57 58 59 60 61 62 4301 63 1 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 4302 63 1 1 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 4303 63 1 1 e 4304 63 1 1 2 3 6 7 11 12 14 18 19 20 21 22 23 25 28 29 30 34 35 36 37 41 42 43 44 45 50 53 56 57 58 59 60 62 4305 63 1 1 0 1 2 3 56 57 58 59 60 61 4306 63 1 1 2 4 7 12 14 16 17 19 20 21 22 23 25 30 34 36 40 41 42 45 46 48 51 4307 63 1 1 17 18 20 22 23 25 29 31 34 37 38 39 41 44 45 47 53 55 56 57 60 62 4308 64 0 0 e 4309 64 0 0 e 4310 64 0 0 e 4311 64 0 0 e 4312 64 0 0 e 4313 64 0 0 e 4314 64 0 0 f 4315 64 0 0 0 1 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 4316 64 0 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 4317 64 0 0 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 4318 64 0 0 e 4319 64 0 0 0 2 4 7 8 9 10 13 15 19 20 23 27 32 34 37 40 42 43 44 46 49 50 55 56 57 58 61 62 63 4320 64 0 0 60 61 63 4321 64 0 0 1 5 8 9 4322 64 0 0 19 22 23 24 25 32 33 34 35 36 39 41 42 44 46 48 51 53 54 56 57 59 61 4323 64 0 1 e 4324 64 0 1 e 4325 64 0 1 e 4326 64 0 1 e 4327 64 0 1 e 4328 64 0 1 e 4329 64 0 1 f 4330 64 0 1 0 1 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 4331 64 0 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 4332 64 0 1 53 54 55 56 57 58 59 60 61 62 63 4333 64 0 1 e 4334 64 0 1 2 4 5 7 10 12 17 19 20 21 22 24 26 27 28 29 35 37 38 39 42 44 49 52 54 56 57 60 61 62 63 4335 64 0 1 0 1 3 8 10 12 17 18 22 23 24 25 26 27 28 30 31 35 36 37 40 42 43 45 46 47 48 49 56 58 59 60 61 4336 64 0 1 0 1 2 5 9 12 16 20 22 23 25 26 27 28 29 30 31 32 4337 64 0 1 53 54 59 62 4338 64 1 0 e 4339 64 1 0 e 4340 64 1 0 e 4341 64 1 0 e 4342 64 1 0 e 4343 64 1 0 e 4344 64 1 0 f 4345 64 1 0 0 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 4346 64 1 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 4347 64 1 0 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 4348 64 1 0 e 4349 64 1 0 1 2 7 12 13 17 19 23 25 26 31 34 35 36 38 40 42 43 45 48 52 54 55 57 59 61 63 4350 64 1 0 13 16 18 19 22 24 25 28 30 33 35 36 37 38 39 40 41 42 43 51 52 55 59 60 4351 64 1 0 2 3 4 6 7 10 11 12 20 21 22 24 25 27 29 30 31 32 34 35 36 38 40 41 45 46 50 52 53 4352 64 1 0 9 11 13 15 16 18 19 20 22 23 26 27 28 30 31 33 35 38 43 48 51 52 54 55 56 57 58 59 4353 64 1 1 e 4354 64 1 1 e 4355 64 1 1 e 4356 64 1 1 e 4357 64 1 1 e 4358 64 1 1 e 4359 64 1 1 f 4360 64 1 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 4361 64 1 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 4362 64 1 1 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 4363 64 1 1 e 4364 64 1 1 0 3 4 5 7 8 13 14 15 17 19 22 23 28 31 32 33 34 35 40 41 46 47 50 53 55 57 4365 64 1 1 1 2 3 4 5 8 9 10 11 12 13 15 17 18 19 62 4366 64 1 1 0 3 4 5 7 10 11 15 16 18 4367 64 1 1 52 54 57 63 4368 65 0 0 e 4369 65 0 0 e 4370 65 0 0 e 4371 65 0 0 e 4372 65 0 0 e 4373 65 0 0 e 4374 65 0 0 f 4375 65 0 0 0 1 2 3 53 54 55 56 57 58 59 60 61 62 63 64 4376 65 0 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 4377 65 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 4378 65 0 0 e 4379 65 0 0 0 1 4 5 7 8 9 10 11 14 16 17 18 20 22 26 27 28 31 33 34 35 36 38 41 45 46 47 48 49 51 55 56 59 60 61 62 63 64 4380 65 0 0 2 3 5 7 8 10 11 13 17 18 43 45 46 47 48 49 50 51 52 53 54 57 59 61 62 63 64 4381 65 0 0 3 4 5 8 11 14 16 20 21 22 23 25 26 29 31 33 35 36 37 39 40 41 48 49 50 51 4382 65 0 0 27 28 29 30 31 37 42 44 45 48 50 51 52 53 58 60 61 62 4383 65 0 1 e 4384 65 0 1 e 4385 65 0 1 e 4386 65 0 1 e 4387 65 0 1 e 4388 65 0 1 e 4389 65 0 1 f 4390 65 0 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 4391 65 0 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 4392 65 0 1 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 4393 65 0 1 e 4394 65 0 1 0 1 2 3 4 6 7 8 10 19 23 26 27 29 32 35 36 38 39 40 41 43 44 45 48 49 56 60 61 62 63 4395 65 0 1 18 19 20 26 27 28 32 33 34 35 36 37 39 41 43 44 45 52 53 55 58 60 62 4396 65 0 1 0 1 2 3 4 6 7 9 11 13 18 20 25 27 33 34 37 38 39 40 42 44 46 48 49 50 51 57 59 62 63 4397 65 0 1 11 12 14 15 17 19 21 22 23 29 32 35 38 39 40 42 44 51 54 55 56 57 59 60 61 4398 65 1 0 e 4399 65 1 0 e 4400 65 1 0 e 4401 65 1 0 e 4402 65 1 0 e 4403 65 1 0 e 4404 65 1 0 f 4405 65 1 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 4406 65 1 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 4407 65 1 0 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 4408 65 1 0 e 4409 65 1 0 0 1 4 6 7 10 11 13 17 18 20 22 26 27 28 29 30 31 32 35 38 39 42 43 45 48 50 52 53 54 55 57 58 61 64 4410 65 1 0 1 47 48 50 53 56 57 62 63 64 4411 65 1 0 0 4 6 7 8 10 11 12 13 14 4412 65 1 0 59 60 62 64 4413 65 1 1 e 4414 65 1 1 e 4415 65 1 1 e 4416 65 1 1 e 4417 65 1 1 e 4418 65 1 1 e 4419 65 1 1 f 4420 65 1 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 4421 65 1 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 4422 65 1 1 63 64 4423 65 1 1 e 4424 65 1 1 0 1 2 3 4 6 7 8 9 10 11 12 19 20 25 28 30 31 33 34 36 37 39 40 41 42 43 47 48 49 50 51 52 57 58 63 4425 65 1 1 6 8 10 29 30 31 32 33 34 37 39 42 44 46 48 49 51 52 53 55 57 59 4426 65 1 1 4 7 10 13 14 16 17 18 20 22 23 24 29 31 4427 65 1 1 21 22 24 25 26 27 33 34 37 38 42 44 49 51 52 55 58 60 62 63 4428 211 0 0 e 4429 211 0 0 e 4430 211 0 0 e 4431 211 0 0 e 4432 211 0 0 e 4433 211 0 0 e 4434 211 0 0 f 4435 211 0 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 4436 211 0 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 4437 211 0 0 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 4438 211 0 0 e 4439 211 0 0 0 3 8 10 11 12 13 14 15 16 26 27 29 33 37 38 41 43 46 51 52 53 58 59 63 65 67 68 72 76 78 80 83 85 86 87 89 90 91 95 97 98 100 103 104 105 108 110 111 113 115 116 119 122 123 126 127 128 129 130 131 134 135 140 142 146 147 148 150 152 153 156 158 159 161 162 163 165 166 167 170 173 175 178 180 181 182 183 186 188 189 192 197 199 203 205 207 4440 211 0 0 1 3 4 5 6 7 10 11 16 18 19 20 24 25 26 29 96 98 100 102 103 106 109 111 112 115 116 117 118 121 123 125 127 129 131 134 135 136 137 139 142 144 150 151 154 157 160 161 164 167 169 170 171 173 175 176 180 182 183 184 185 188 189 190 191 192 195 196 197 199 202 203 204 205 206 207 4441 211 0 0 2 3 4 5 6 7 8 11 12 14 16 17 18 19 21 22 25 26 27 38 39 40 42 44 45 46 49 51 52 58 59 60 64 65 67 68 70 71 72 73 75 76 81 83 85 87 91 92 93 97 106 108 111 112 113 114 118 119 122 125 126 127 128 131 132 136 139 141 142 144 145 146 148 149 150 153 154 156 160 164 165 166 167 168 170 174 175 177 182 183 184 187 188 191 192 193 195 197 4442 211 0 0 151 153 155 156 158 159 161 162 163 167 168 169 172 173 175 178 181 183 186 188 189 195 196 197 198 201 202 204 205 210 4443 211 0 1 e 4444 211 0 1 e 4445 211 0 1 e 4446 211 0 1 e 4447 211 0 1 e 4448 211 0 1 e 4449 211 0 1 f 4450 211 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 4451 211 0 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 4452 211 0 1 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 4453 211 0 1 e 4454 211 0 1 0 3 5 10 11 12 14 16 19 23 24 25 27 28 29 33 35 36 37 41 45 46 50 56 57 58 59 60 65 67 68 74 75 79 80 85 92 97 99 103 104 105 106 109 115 117 119 122 124 126 129 137 138 139 140 144 145 146 147 148 150 152 153 154 155 158 162 163 164 172 179 180 184 185 190 191 193 194 196 200 201 203 205 209 4455 211 0 1 0 1 2 3 4 8 10 11 13 14 15 17 18 43 44 50 51 52 58 59 62 64 65 67 69 71 72 73 75 77 81 83 88 92 94 95 98 100 103 105 108 109 110 111 112 114 115 116 120 121 122 123 124 126 128 129 130 131 132 133 136 137 138 140 141 144 147 148 149 151 152 153 154 155 157 158 160 161 162 163 164 166 169 170 174 176 179 182 183 185 186 187 188 189 191 196 198 201 203 4456 211 0 1 1 8 4457 211 0 1 25 26 27 28 29 32 33 35 36 38 39 42 43 45 46 49 52 53 54 56 57 58 59 62 67 68 69 70 73 75 76 77 80 83 86 87 88 89 90 93 94 95 96 97 98 99 100 101 102 104 106 110 112 114 115 117 118 120 121 122 125 128 129 131 132 134 137 138 139 141 142 143 144 145 146 148 149 150 151 152 153 156 157 158 160 161 166 167 169 172 175 185 187 188 193 194 196 197 200 201 202 203 207 208 209 4458 211 1 0 e 4459 211 1 0 e 4460 211 1 0 e 4461 211 1 0 e 4462 211 1 0 e 4463 211 1 0 e 4464 211 1 0 f 4465 211 1 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 4466 211 1 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 4467 211 1 0 e 4468 211 1 0 e 4469 211 1 0 1 6 7 11 14 16 18 19 22 23 27 28 29 30 35 36 38 40 44 47 50 51 52 53 54 55 56 58 59 60 61 62 64 67 68 70 71 72 77 79 81 82 83 84 86 87 88 89 91 96 97 99 102 103 107 108 109 110 112 113 119 120 121 122 125 126 128 131 134 135 138 141 142 143 144 145 147 149 150 153 154 155 156 157 158 160 167 168 177 182 183 184 186 187 189 192 193 194 200 201 205 209 210 4470 211 1 0 0 1 2 4 5 8 9 11 13 14 15 20 21 22 26 27 29 30 31 32 33 35 36 37 39 41 43 44 46 48 50 52 54 56 57 59 60 62 63 66 67 68 69 70 72 76 78 82 84 85 86 87 88 89 90 91 93 94 96 97 99 100 105 106 109 110 111 113 116 117 118 119 120 121 122 125 126 133 134 135 136 137 141 142 143 144 146 149 152 153 156 158 163 166 168 175 176 179 181 183 184 185 198 200 202 203 204 206 4471 211 1 0 0 1 2 4 7 9 13 14 15 18 19 21 23 24 25 29 32 34 35 36 38 41 42 43 44 45 46 50 51 55 57 59 60 61 65 69 72 75 76 77 78 81 82 83 86 87 89 90 91 92 95 97 100 101 4472 211 1 0 58 59 60 61 62 65 68 73 74 75 76 77 78 80 81 86 87 88 89 90 91 93 94 95 96 99 100 106 109 110 112 115 118 121 122 123 124 125 126 127 129 133 135 136 138 141 144 145 150 151 153 156 158 163 165 171 173 176 178 180 183 185 187 188 192 193 194 195 196 200 201 204 207 208 4473 211 1 1 e 4474 211 1 1 e 4475 211 1 1 e 4476 211 1 1 e 4477 211 1 1 e 4478 211 1 1 e 4479 211 1 1 f 4480 211 1 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 4481 211 1 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 4482 211 1 1 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 4483 211 1 1 e 4484 211 1 1 0 1 3 4 5 6 7 8 9 10 11 13 16 18 19 20 22 24 29 30 40 44 46 47 48 49 50 51 53 57 59 62 63 64 69 70 72 73 74 75 77 78 82 83 86 88 92 95 97 99 100 103 106 107 110 111 112 113 118 120 121 122 123 126 127 130 131 132 134 135 136 138 139 140 141 142 143 144 147 148 149 151 152 153 154 157 158 161 163 164 166 167 168 169 170 171 174 176 177 180 183 185 187 188 191 192 193 194 195 196 197 198 199 200 204 207 209 4485 211 1 1 2 7 8 10 13 18 19 20 22 23 24 25 28 30 32 34 36 38 39 41 43 45 46 47 48 49 50 51 53 54 55 56 57 144 147 148 149 151 152 153 155 156 157 158 159 162 164 165 168 169 171 177 178 180 182 183 186 187 189 190 192 193 194 195 196 198 199 202 204 206 209 4486 211 1 1 1 3 4 9 12 15 19 20 21 25 29 4487 211 1 1 7 17 18 21 22 23 24 25 28 29 30 31 32 33 35 36 37 38 39 40 41 46 49 50 51 54 57 60 63 65 66 67 70 74 75 76 81 82 83 85 86 87 88 92 97 99 103 105 106 109 111 112 119 120 121 123 125 128 132 137 139 140 141 142 143 147 148 149 150 151 152 154 155 156 157 159 161 162 167 169 170 172 176 177 180 181 185 188 189 190 192 193 194 195 198 202 204 205 206 207 208 209 4488 224 0 0 e 4489 224 0 0 e 4490 224 0 0 e 4491 224 0 0 e 4492 224 0 0 e 4493 224 0 0 e 4494 224 0 0 f 4495 224 0 0 0 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 4496 224 0 0 0 1 2 3 4 5 6 7 8 9 4497 224 0 0 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 4498 224 0 0 e 4499 224 0 0 2 7 8 9 10 15 19 20 21 24 25 27 30 31 32 33 41 42 43 46 48 54 58 60 61 63 64 66 68 70 73 76 78 79 83 84 86 87 89 92 93 94 95 97 102 106 109 110 111 114 115 117 118 119 120 123 126 130 132 134 135 136 137 140 145 147 148 150 152 155 157 159 163 164 166 170 173 175 176 177 178 179 180 181 183 186 187 191 193 194 196 197 198 200 205 208 211 215 216 221 223 4500 224 0 0 1 2 3 4 5 9 11 15 16 17 66 67 69 73 74 75 76 78 80 81 84 86 90 91 92 93 97 98 99 100 103 106 109 112 113 114 115 116 117 118 121 127 132 133 136 138 140 142 143 144 147 154 155 156 160 161 162 163 164 165 167 169 173 174 179 180 184 185 186 187 191 194 197 198 200 202 205 207 209 213 216 219 220 221 222 4501 224 0 0 0 2 3 4 5 6 8 12 16 20 21 22 23 24 25 26 27 29 30 31 32 34 35 37 40 42 43 44 45 47 49 50 52 53 55 57 58 59 60 62 63 64 69 77 78 79 81 82 84 86 89 90 91 93 94 100 101 102 105 108 119 122 126 128 130 131 133 134 136 138 140 142 146 147 148 150 151 152 155 156 159 163 167 168 171 175 178 181 4502 224 0 0 29 30 33 35 36 38 39 40 41 45 46 49 52 54 59 62 68 71 72 73 74 77 78 79 80 81 82 85 86 89 94 96 98 99 100 101 103 104 109 110 112 113 114 116 118 121 122 123 125 127 129 130 131 132 134 135 136 137 138 140 141 143 144 147 148 149 152 153 154 156 159 161 162 165 166 167 168 169 171 172 173 174 175 176 177 178 179 180 182 183 185 187 190 193 194 195 196 197 198 200 201 203 204 205 206 207 208 209 211 212 214 219 220 4503 224 0 1 e 4504 224 0 1 e 4505 224 0 1 e 4506 224 0 1 e 4507 224 0 1 e 4508 224 0 1 e 4509 224 0 1 f 4510 224 0 1 0 1 2 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 4511 224 0 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 4512 224 0 1 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 4513 224 0 1 e 4514 224 0 1 2 3 4 5 8 9 10 11 12 13 17 18 20 22 23 27 28 30 32 33 34 36 38 39 41 42 43 47 48 51 52 54 55 57 58 61 62 63 64 65 67 68 70 73 75 77 78 80 81 83 85 86 87 88 89 92 93 95 96 97 98 99 101 102 104 107 108 109 111 112 114 118 122 123 125 126 127 128 130 131 133 135 136 137 138 139 140 142 143 144 145 146 149 150 160 163 164 165 166 167 169 170 173 174 175 176 177 179 180 181 185 186 187 191 194 197 199 200 202 205 208 211 213 215 216 217 218 219 222 223 4515 224 0 1 1 2 3 4 5 7 9 10 12 13 14 16 18 19 21 22 24 26 27 28 30 33 34 36 38 39 40 41 64 65 66 67 68 69 70 71 72 74 76 79 81 84 88 89 90 92 93 94 95 97 98 100 103 104 106 108 114 116 117 118 119 120 121 122 123 125 126 127 128 131 132 133 134 135 137 144 146 147 151 154 155 158 160 163 166 167 168 169 170 174 176 179 180 181 182 185 186 187 189 192 193 196 197 198 199 200 201 205 206 212 214 216 217 218 4516 224 0 1 0 1 2 3 4 5 6 4517 224 0 1 60 68 69 71 72 76 83 84 85 86 87 88 90 91 92 96 97 98 99 100 101 102 103 107 108 109 111 114 117 118 121 123 125 128 129 132 136 144 146 148 149 150 152 158 162 164 165 166 169 170 171 176 177 178 179 180 181 182 186 187 188 192 193 194 196 198 201 203 210 213 214 215 218 219 220 223 4518 224 1 0 e 4519 224 1 0 e 4520 224 1 0 e 4521 224 1 0 e 4522 224 1 0 e 4523 224 1 0 e 4524 224 1 0 f 4525 224 1 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 4526 224 1 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 4527 224 1 0 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 4528 224 1 0 e 4529 224 1 0 0 3 4 6 7 9 13 19 20 21 22 25 28 30 31 34 36 37 38 40 42 47 49 52 54 58 59 60 61 62 70 71 72 76 77 81 82 85 91 92 96 97 99 102 104 106 108 109 110 112 114 115 121 125 126 127 130 131 133 134 137 138 140 142 144 148 149 150 152 154 156 160 168 170 171 172 175 176 177 178 179 180 181 182 183 184 185 186 187 191 193 195 196 197 199 200 201 202 203 205 208 216 221 223 4530 224 1 0 0 3 6 8 12 13 14 64 66 67 70 72 74 76 77 79 81 82 84 85 87 89 90 91 93 94 96 97 102 103 104 105 107 108 114 117 119 120 121 122 124 125 127 128 129 132 133 135 136 140 141 142 146 147 149 150 152 153 154 155 156 159 160 161 163 164 166 168 170 171 173 175 178 179 181 184 185 186 187 190 193 195 197 205 209 212 214 217 219 221 222 4531 224 1 0 3 4 8 9 13 17 18 19 22 23 25 26 29 31 33 34 38 44 45 46 48 49 53 54 55 56 57 58 63 66 68 69 70 72 74 75 76 77 79 80 82 85 86 4532 224 1 0 141 142 143 144 145 146 147 148 149 151 159 160 161 162 165 171 174 176 177 178 179 182 183 184 185 190 193 195 196 197 198 202 203 205 206 209 211 213 214 216 220 223 4533 224 1 1 e 4534 224 1 1 e 4535 224 1 1 e 4536 224 1 1 e 4537 224 1 1 e 4538 224 1 1 e 4539 224 1 1 f 4540 224 1 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 4541 224 1 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 4542 224 1 1 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 4543 224 1 1 e 4544 224 1 1 3 4 5 7 10 12 16 17 19 21 22 24 25 27 28 29 33 34 36 39 40 41 45 46 47 48 50 53 54 55 56 58 60 62 65 68 69 71 72 73 75 78 81 83 84 86 89 90 93 94 95 98 100 103 104 106 108 109 110 112 114 117 118 119 121 123 124 130 132 133 135 137 140 141 146 147 149 150 151 152 155 157 158 159 161 164 165 166 168 173 174 177 179 180 181 183 185 186 187 188 189 190 194 196 197 199 200 201 204 206 209 212 213 216 217 218 219 220 221 4545 224 1 1 1 2 3 4 5 6 7 8 9 11 14 15 16 17 19 20 22 23 24 25 26 28 29 32 33 36 39 41 43 46 47 48 50 51 188 190 193 195 201 202 203 204 206 208 211 212 213 214 217 218 221 222 4546 224 1 1 1 2 3 6 8 9 10 11 12 13 14 16 17 21 26 27 28 29 32 33 4547 224 1 1 47 48 49 50 51 54 55 59 60 63 65 66 68 69 70 72 75 77 78 83 84 85 89 93 95 101 103 105 106 107 108 109 114 115 119 123 125 127 129 130 132 135 138 141 147 148 149 150 157 159 164 165 169 172 173 174 182 184 186 188 194 197 200 201 202 203 204 205 209 210 211 213 218 222 223 4548 247 0 0 e 4549 247 0 0 e 4550 247 0 0 e 4551 247 0 0 e 4552 247 0 0 e 4553 247 0 0 e 4554 247 0 0 f 4555 247 0 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 4556 247 0 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 4557 247 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 4558 247 0 0 e 4559 247 0 0 3 4 6 8 9 10 12 13 14 15 16 19 21 22 23 24 25 28 29 36 38 39 43 46 48 54 58 63 64 65 67 68 69 70 75 80 81 86 88 89 90 91 92 94 95 96 97 99 100 107 108 109 112 113 114 118 119 122 124 125 126 127 128 130 131 132 133 137 140 142 143 146 148 149 155 158 159 160 162 163 165 166 167 168 172 173 175 180 181 182 187 188 189 190 191 195 198 200 202 205 207 209 212 213 217 219 220 221 222 227 228 233 234 235 236 241 244 245 246 4560 247 0 0 1 4 5 6 7 8 9 10 12 14 15 18 19 20 23 24 25 27 28 31 33 36 37 39 40 41 42 43 45 46 49 52 54 55 59 60 61 62 64 66 67 69 71 72 74 78 81 82 85 86 87 90 93 94 236 240 244 4561 247 0 0 0 1 3 6 8 9 10 14 19 20 21 22 4562 247 0 0 148 151 152 153 155 158 161 162 163 164 166 169 170 171 172 176 177 178 179 185 190 191 193 194 195 196 204 206 207 209 213 214 216 217 218 221 222 225 229 230 231 236 239 241 244 246 4563 247 0 1 e 4564 247 0 1 e 4565 247 0 1 e 4566 247 0 1 e 4567 247 0 1 e 4568 247 0 1 e 4569 247 0 1 f 4570 247 0 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 4571 247 0 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 4572 247 0 1 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 4573 247 0 1 e 4574 247 0 1 2 3 9 10 11 12 13 14 15 16 18 19 21 22 24 27 28 29 32 34 36 38 39 40 41 42 43 45 51 53 57 58 64 66 68 71 75 77 78 79 83 85 86 89 90 91 96 98 100 103 104 105 106 108 109 110 112 114 117 118 119 120 122 124 126 130 132 136 137 138 139 140 141 142 143 145 146 148 149 151 153 155 159 160 162 164 166 167 169 171 174 175 177 183 185 186 187 191 192 196 199 201 202 203 205 207 209 211 213 214 215 216 219 220 221 222 226 228 232 234 236 238 244 4575 247 0 1 0 1 3 4 5 8 12 15 18 19 23 24 25 26 28 30 31 75 76 77 80 81 84 86 88 90 91 93 94 96 100 102 103 105 106 110 115 116 120 121 123 124 127 129 130 133 134 135 136 137 140 144 145 150 151 154 159 167 168 171 172 173 176 178 179 180 181 182 185 186 187 190 191 193 195 198 200 201 203 204 208 211 219 220 221 222 224 225 226 229 232 233 238 240 243 244 245 4576 247 0 1 0 2 3 6 9 10 11 14 19 21 22 23 24 25 26 27 30 31 32 33 34 35 41 43 47 49 50 4577 247 0 1 12 15 17 21 22 24 25 26 27 31 34 35 36 37 38 39 40 41 45 47 48 49 51 52 53 56 60 61 64 66 67 69 70 71 72 76 77 78 79 80 82 86 88 91 92 93 94 95 96 97 98 100 101 105 106 108 109 110 112 113 114 116 117 119 121 124 127 130 134 136 138 139 141 149 152 153 154 155 157 159 162 164 165 166 167 169 173 174 175 176 181 182 186 187 191 192 195 200 201 202 204 205 207 208 209 210 212 213 218 219 220 223 224 225 226 228 230 231 233 235 237 238 240 241 242 243 246 4578 247 1 0 e 4579 247 1 0 e 4580 247 1 0 e 4581 247 1 0 e 4582 247 1 0 e 4583 247 1 0 e 4584 247 1 0 f 4585 247 1 0 0 1 2 3 4 5 6 7 8 9 10 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 4586 247 1 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 4587 247 1 0 244 245 246 4588 247 1 0 e 4589 247 1 0 1 2 4 6 7 8 10 13 15 16 19 22 23 25 28 31 33 38 40 41 42 44 45 51 52 54 57 58 59 61 62 63 64 68 70 71 74 75 79 80 81 82 83 86 87 89 90 91 92 93 94 95 101 102 103 105 106 107 110 111 113 114 115 117 119 122 124 125 126 128 135 137 138 139 141 142 147 149 151 152 154 155 156 157 159 161 165 167 168 169 171 172 176 177 178 179 182 184 185 187 188 189 190 191 195 196 197 199 200 201 202 206 207 208 209 210 213 214 215 218 223 224 225 227 229 232 234 242 244 245 4590 247 1 0 1 2 3 4 7 8 19 21 22 23 24 26 27 28 32 34 35 36 38 39 40 41 42 45 47 48 49 52 55 56 57 58 59 64 68 69 72 73 74 76 79 81 91 92 94 95 96 102 105 106 109 110 111 112 115 116 117 122 124 125 127 132 134 138 139 141 142 144 147 150 151 152 153 155 156 158 160 161 162 163 168 172 173 174 175 177 178 181 184 187 188 190 191 193 194 198 200 202 203 206 210 211 215 216 217 218 219 221 222 225 226 227 229 230 231 233 234 238 239 240 241 242 4591 247 1 0 0 1 3 5 8 9 11 12 15 17 18 19 20 21 22 23 25 26 27 29 30 32 34 41 45 46 47 49 52 54 57 58 60 61 62 63 65 66 67 68 73 75 76 78 87 93 95 96 98 99 100 102 108 109 113 114 115 119 120 121 124 125 128 131 132 134 136 139 141 144 145 149 151 153 156 158 159 160 161 166 167 168 170 171 173 176 177 178 183 187 188 189 190 191 192 196 197 201 204 205 206 4592 247 1 0 14 19 20 23 26 30 31 33 34 35 39 43 44 45 46 53 55 56 60 62 63 64 65 66 68 69 70 78 79 81 83 84 85 86 87 88 90 91 93 94 96 98 99 101 103 104 108 110 115 116 118 119 121 122 123 124 128 132 135 136 137 139 142 151 152 154 155 156 159 160 163 164 165 166 167 168 169 170 171 173 175 176 177 181 184 186 187 188 191 192 193 195 198 205 208 210 211 216 218 219 225 226 227 229 230 234 236 238 239 240 242 243 244 245 4593 247 1 1 e 4594 247 1 1 e 4595 247 1 1 e 4596 247 1 1 e 4597 247 1 1 e 4598 247 1 1 e 4599 247 1 1 f 4600 247 1 1 0 1 2 3 4 5 6 7 8 9 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 4601 247 1 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 4602 247 1 1 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 4603 247 1 1 e 4604 247 1 1 0 1 2 6 7 8 10 12 13 15 16 18 19 23 25 26 29 32 34 36 37 39 40 42 43 46 48 49 51 52 54 57 59 60 61 62 63 65 69 75 77 80 83 84 85 86 88 95 96 101 102 104 110 111 112 113 114 115 116 117 119 121 123 124 126 127 128 132 134 135 136 137 139 142 145 149 150 151 152 155 156 158 159 162 164 165 168 169 174 178 179 181 183 184 185 186 187 191 192 197 198 199 200 203 204 205 210 212 215 218 219 220 224 225 226 227 229 230 237 238 240 241 242 243 246 4605 247 1 1 0 3 4 5 6 7 8 9 11 12 15 16 17 20 21 24 26 30 32 35 37 38 40 41 45 48 49 50 51 56 57 64 65 140 141 142 143 145 146 147 148 149 154 155 159 161 162 163 164 170 179 180 181 185 195 196 200 201 203 205 207 208 209 210 211 212 213 215 216 217 221 222 225 229 230 232 236 237 238 239 240 241 242 244 4606 247 1 1 0 4607 247 1 1 131 133 135 137 138 139 140 142 143 145 146 151 154 155 156 157 158 159 163 165 167 170 172 173 177 178 179 182 183 184 186 187 191 192 193 194 196 201 202 204 205 208 210 213 218 219 220 222 223 228 237 242 243 246 4608 0 0 0 e 4609 0 0 0 e 4610 0 0 0 e 4611 0 0 0 e 4612 0 0 0 e 4613 0 0 0 e 4614 0 0 0 e 4615 0 0 0 e 4616 0 0 0 e 4617 0 0 0 e 4618 0 0 0 e 4619 0 0 0 e 4620 0 0 0 e 4621 0 0 0 e 4622 0 0 0 e 4623 0 0 1 e 4624 0 0 1 e 4625 0 0 1 e 4626 0 0 1 e 4627 0 0 1 e 4628 0 0 1 e 4629 0 0 1 e 4630 0 0 1 e 4631 0 0 1 e 4632 0 0 1 e 4633 0 0 1 e 4634 0 0 1 e 4635 0 0 1 e 4636 0 0 1 e 4637 0 0 1 e 4638 0 1 0 e 4639 0 1 0 e 4640 0 1 0 e 4641 0 1 0 e 4642 0 1 0 e 4643 0 1 0 e 4644 0 1 0 e 4645 0 1 0 e 4646 0 1 0 e 4647 0 1 0 e 4648 0 1 0 e 4649 0 1 0 e 4650 0 1 0 e 4651 0 1 0 e 4652 0 1 0 e 4653 0 1 1 e 4654 0 1 1 e 4655 0 1 1 e 4656 0 1 1 e 4657 0 1 1 e 4658 0 1 1 e 4659 0 1 1 e 4660 0 1 1 e 4661 0 1 1 e 4662 0 1 1 e 4663 0 1 1 e 4664 0 1 1 e 4665 0 1 1 e 4666 0 1 1 e 4667 0 1 1 e 4668 1 0 0 f 4669 1 0 0 e 4670 1 0 0 f 4671 1 0 0 f 4672 1 0 0 e 4673 1 0 0 f 4674 1 0 0 f 4675 1 0 0 f 4676 1 0 0 f 4677 1 0 0 f 4678 1 0 0 f 4679 1 0 0 f 4680 1 0 0 f 4681 1 0 0 f 4682 1 0 0 e 4683 1 0 1 f 4684 1 0 1 e 4685 1 0 1 f 4686 1 0 1 f 4687 1 0 1 f 4688 1 0 1 f 4689 1 0 1 f 4690 1 0 1 f 4691 1 0 1 f 4692 1 0 1 f 4693 1 0 1 f 4694 1 0 1 f 4695 1 0 1 f 4696 1 0 1 f 4697 1 0 1 e 4698 1 1 0 f 4699 1 1 0 e 4700 1 1 0 f 4701 1 1 0 f 4702 1 1 0 f 4703 1 1 0 f 4704 1 1 0 f 4705 1 1 0 f 4706 1 1 0 f 4707 1 1 0 f 4708 1 1 0 f 4709 1 1 0 e 4710 1 1 0 f 4711 1 1 0 f 4712 1 1 0 f 4713 1 1 1 f 4714 1 1 1 e 4715 1 1 1 f 4716 1 1 1 f 4717 1 1 1 e 4718 1 1 1 f 4719 1 1 1 f 4720 1 1 1 f 4721 1 1 1 f 4722 1 1 1 f 4723 1 1 1 f 4724 1 1 1 e 4725 1 1 1 f 4726 1 1 1 f 4727 1 1 1 f 4728 31 0 0 f 4729 31 0 0 e 4730 31 0 0 0 1 4731 31 0 0 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 4732 31 0 0 0 4733 31 0 0 f 4734 31 0 0 f 4735 31 0 0 f 4736 31 0 0 f 4737 31 0 0 f 4738 31 0 0 f 4739 31 0 0 0 3 5 8 9 10 13 16 17 18 21 25 26 28 4740 31 0 0 0 1 2 3 4 5 6 7 8 9 11 13 14 16 17 18 21 22 24 26 27 29 4741 31 0 0 1 3 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 4742 31 0 0 0 1 2 3 4 5 6 7 8 12 13 14 18 4743 31 0 1 f 4744 31 0 1 e 4745 31 0 1 1 4746 31 0 1 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 4747 31 0 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 4748 31 0 1 f 4749 31 0 1 f 4750 31 0 1 f 4751 31 0 1 f 4752 31 0 1 f 4753 31 0 1 f 4754 31 0 1 1 2 3 4 5 7 10 14 15 18 19 20 25 27 4755 31 0 1 1 2 4 5 6 8 9 10 12 13 14 19 20 22 23 24 25 27 30 4756 31 0 1 0 1 3 4 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 4757 31 0 1 0 1 2 3 4 5 6 7 8 9 10 12 13 16 18 21 23 24 26 27 28 30 4758 31 1 0 f 4759 31 1 0 e 4760 31 1 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 4761 31 1 0 19 20 21 22 23 24 25 26 27 28 29 30 4762 31 1 0 0 1 2 3 4 5 6 7 4763 31 1 0 f 4764 31 1 0 f 4765 31 1 0 f 4766 31 1 0 f 4767 31 1 0 f 4768 31 1 0 f 4769 31 1 0 0 1 3 6 7 8 9 10 12 14 17 21 22 28 29 4770 31 1 0 0 2 3 5 6 8 10 14 15 16 17 18 19 20 21 23 25 26 27 29 30 4771 31 1 0 f 4772 31 1 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 22 30 4773 31 1 1 f 4774 31 1 1 e 4775 31 1 1 17 18 19 20 21 4776 31 1 1 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 4777 31 1 1 0 1 2 3 4 5 6 7 8 9 4778 31 1 1 f 4779 31 1 1 f 4780 31 1 1 f 4781 31 1 1 f 4782 31 1 1 f 4783 31 1 1 f 4784 31 1 1 0 1 7 8 9 10 11 12 13 14 15 17 20 22 23 25 26 28 29 30 4785 31 1 1 5 6 7 8 9 10 11 12 13 15 18 21 22 23 25 26 28 4786 31 1 1 0 1 4 6 7 9 10 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 4787 31 1 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 4788 32 0 0 f 4789 32 0 0 e 4790 32 0 0 14 15 16 17 18 19 20 4791 32 0 0 21 22 23 24 25 26 27 28 29 30 31 4792 32 0 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 4793 32 0 0 f 4794 32 0 0 f 4795 32 0 0 f 4796 32 0 0 f 4797 32 0 0 f 4798 32 0 0 f 4799 32 0 0 1 3 7 14 15 16 17 18 20 21 23 24 28 30 4800 32 0 0 1 4 5 6 7 8 9 10 11 12 13 14 17 19 20 22 23 24 25 27 29 30 31 4801 32 0 0 1 5 6 7 8 10 11 12 13 14 16 18 19 21 22 23 26 28 29 30 31 4802 32 0 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 25 28 29 4803 32 0 1 f 4804 32 0 1 e 4805 32 0 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 4806 32 0 1 30 31 4807 32 0 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 4808 32 0 1 f 4809 32 0 1 f 4810 32 0 1 f 4811 32 0 1 f 4812 32 0 1 f 4813 32 0 1 f 4814 32 0 1 0 1 4 5 8 9 10 12 17 18 20 21 22 23 25 28 31 4815 32 0 1 3 4 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 24 28 29 30 4816 32 0 1 f 4817 32 0 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 23 24 26 28 30 4818 32 1 0 f 4819 32 1 0 e 4820 32 1 0 7 8 9 10 11 12 13 14 15 16 17 18 4821 32 1 0 27 28 29 30 31 4822 32 1 0 0 1 2 4823 32 1 0 f 4824 32 1 0 f 4825 32 1 0 f 4826 32 1 0 f 4827 32 1 0 f 4828 32 1 0 f 4829 32 1 0 0 7 10 12 13 14 18 22 23 25 26 29 4830 32 1 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 31 4831 32 1 0 0 1 2 3 4 5 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 4832 32 1 0 f 4833 32 1 1 f 4834 32 1 1 e 4835 32 1 1 7 8 9 10 11 12 4836 32 1 1 30 31 4837 32 1 1 0 1 2 4838 32 1 1 f 4839 32 1 1 f 4840 32 1 1 f 4841 32 1 1 f 4842 32 1 1 f 4843 32 1 1 f 4844 32 1 1 2 4 5 6 9 12 14 15 19 20 22 26 27 29 30 31 4845 32 1 1 3 4 5 6 7 9 10 11 12 13 14 15 17 25 27 29 30 31 4846 32 1 1 0 1 4 6 8 10 12 18 19 20 21 22 23 24 25 26 27 28 29 30 31 4847 32 1 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 26 4848 33 0 0 f 4849 33 0 0 e 4850 33 0 0 13 14 15 16 17 4851 33 0 0 f 4852 33 0 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 4853 33 0 0 f 4854 33 0 0 f 4855 33 0 0 f 4856 33 0 0 f 4857 33 0 0 f 4858 33 0 0 f 4859 33 0 0 0 2 3 4 5 6 8 10 11 16 18 26 29 30 32 4860 33 0 0 0 1 2 6 7 8 9 10 12 16 18 19 20 22 23 26 27 29 30 32 4861 33 0 0 3 4 5 6 8 9 11 12 13 14 15 16 17 19 21 22 25 26 27 28 29 30 31 32 4862 33 0 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 21 22 24 27 28 30 4863 33 0 1 f 4864 33 0 1 e 4865 33 0 1 1 2 3 4 5 6 7 8 9 10 4866 33 0 1 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 4867 33 0 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 4868 33 0 1 f 4869 33 0 1 f 4870 33 0 1 f 4871 33 0 1 f 4872 33 0 1 f 4873 33 0 1 f 4874 33 0 1 0 1 4 5 7 8 9 13 14 15 17 20 21 22 23 25 28 30 31 4875 33 0 1 2 3 5 7 8 9 11 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 31 4876 33 0 1 0 1 4 6 7 8 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 4877 33 0 1 2 5 9 10 11 12 15 18 19 20 23 24 28 30 32 4878 33 1 0 f 4879 33 1 0 e 4880 33 1 0 24 25 26 27 28 29 4881 33 1 0 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 4882 33 1 0 f 4883 33 1 0 f 4884 33 1 0 f 4885 33 1 0 f 4886 33 1 0 f 4887 33 1 0 f 4888 33 1 0 f 4889 33 1 0 0 1 2 3 10 12 14 16 22 23 26 27 28 30 31 32 4890 33 1 0 2 3 4 5 6 10 11 16 20 21 30 31 4891 33 1 0 f 4892 33 1 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 27 29 30 31 4893 33 1 1 f 4894 33 1 1 e 4895 33 1 1 8 9 10 11 12 13 14 15 16 17 18 19 20 21 4896 33 1 1 25 26 27 28 29 30 31 32 4897 33 1 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 4898 33 1 1 f 4899 33 1 1 f 4900 33 1 1 f 4901 33 1 1 f 4902 33 1 1 f 4903 33 1 1 f 4904 33 1 1 0 8 9 11 14 16 17 18 19 20 21 24 26 27 29 30 4905 33 1 1 2 3 5 6 7 10 11 12 14 15 17 19 21 22 23 24 25 28 29 30 4906 33 1 1 1 2 9 12 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 4907 33 1 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 24 25 27 29 30 31 4908 63 0 0 f 4909 63 0 0 e 4910 63 0 0 4 5 6 7 8 9 10 11 12 13 14 4911 63 0 0 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 4912 63 0 0 0 1 2 3 4 4913 63 0 0 f 4914 63 0 0 f 4915 63 0 0 f 4916 63 0 0 f 4917 63 0 0 f 4918 63 0 0 f 4919 63 0 0 1 2 3 6 11 12 13 14 18 20 21 24 28 29 31 32 34 35 36 37 41 47 53 54 56 59 61 62 4920 63 0 0 0 1 3 5 6 7 12 14 16 18 19 21 22 23 30 31 34 37 39 40 41 43 46 47 48 49 50 51 52 53 58 59 60 61 62 4921 63 0 0 2 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 4922 63 0 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 49 52 53 57 58 61 4923 63 0 1 f 4924 63 0 1 e 4925 63 0 1 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 4926 63 0 1 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 4927 63 0 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 4928 63 0 1 f 4929 63 0 1 f 4930 63 0 1 f 4931 63 0 1 f 4932 63 0 1 f 4933 63 0 1 f 4934 63 0 1 2 4 7 10 14 16 17 18 19 21 22 27 29 34 38 39 41 43 47 48 49 50 52 53 54 55 58 61 62 4935 63 0 1 0 1 2 3 4 5 7 10 12 13 15 16 17 19 20 22 23 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 50 51 52 53 54 55 59 60 61 62 4936 63 0 1 1 2 3 4 7 8 10 12 13 18 21 23 26 27 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 4937 63 0 1 f 4938 63 1 0 f 4939 63 1 0 e 4940 63 1 0 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 4941 63 1 0 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 4942 63 1 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 4943 63 1 0 f 4944 63 1 0 f 4945 63 1 0 f 4946 63 1 0 f 4947 63 1 0 f 4948 63 1 0 f 4949 63 1 0 1 3 5 9 11 12 13 14 16 19 20 21 22 25 30 33 35 36 37 40 41 46 48 49 51 52 54 56 58 60 62 4950 63 1 0 1 4 5 6 7 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 35 36 38 39 40 41 45 48 49 51 60 62 4951 63 1 0 1 2 3 5 6 9 10 14 17 19 20 21 25 27 29 30 31 32 33 36 38 41 42 43 44 45 46 54 55 56 57 58 59 60 61 62 4952 63 1 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 42 44 45 49 50 53 54 55 57 58 61 62 4953 63 1 1 f 4954 63 1 1 e 4955 63 1 1 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 4956 63 1 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 4957 63 1 1 0 1 2 3 4 5 6 7 8 9 4958 63 1 1 f 4959 63 1 1 f 4960 63 1 1 f 4961 63 1 1 f 4962 63 1 1 f 4963 63 1 1 f 4964 63 1 1 0 1 2 3 4 7 10 11 12 13 15 16 18 19 20 27 32 33 35 37 39 40 43 45 46 47 50 52 54 56 57 61 62 4965 63 1 1 0 1 3 5 6 7 9 15 16 17 18 22 24 26 27 28 29 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 54 58 4966 63 1 1 1 2 3 6 8 9 11 17 19 21 23 24 25 29 32 36 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 4967 63 1 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 25 27 32 35 36 39 40 41 42 44 46 47 48 49 51 55 59 60 61 4968 64 0 0 f 4969 64 0 0 e 4970 64 0 0 e 4971 64 0 0 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 4972 64 0 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 4973 64 0 0 f 4974 64 0 0 f 4975 64 0 0 f 4976 64 0 0 f 4977 64 0 0 f 4978 64 0 0 f 4979 64 0 0 0 1 4 8 9 11 12 13 15 19 20 24 26 32 33 34 35 39 41 42 43 45 46 47 51 52 53 58 59 60 61 63 4980 64 0 0 1 3 4 7 9 10 12 13 14 16 20 21 22 23 24 25 26 27 30 31 34 36 41 42 43 44 47 48 51 54 55 58 59 60 61 62 4981 64 0 0 0 1 2 5 7 8 14 15 17 20 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 4982 64 0 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 62 63 4983 64 0 1 f 4984 64 0 1 e 4985 64 0 1 1 2 3 4 4986 64 0 1 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 4987 64 0 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 4988 64 0 1 f 4989 64 0 1 f 4990 64 0 1 f 4991 64 0 1 f 4992 64 0 1 f 4993 64 0 1 f 4994 64 0 1 0 2 4 7 8 9 10 11 14 15 17 19 21 25 26 30 34 36 41 47 49 50 51 52 53 54 56 57 58 59 60 4995 64 0 1 0 1 8 10 13 15 16 17 18 19 21 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 51 52 53 54 55 58 60 61 63 4996 64 0 1 1 2 5 7 9 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 4997 64 0 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 46 47 48 49 54 56 57 4998 64 1 0 f 4999 64 1 0 e 5000 64 1 0 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 5001 64 1 0 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 5002 64 1 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 5003 64 1 0 f 5004 64 1 0 f 5005 64 1 0 f 5006 64 1 0 f 5007 64 1 0 f 5008 64 1 0 f 5009 64 1 0 0 1 3 4 5 7 10 11 13 14 15 17 19 20 22 23 29 32 37 39 40 47 49 50 52 56 57 58 60 61 5010 64 1 0 0 1 6 7 8 10 11 12 13 14 15 16 17 18 19 21 22 24 28 29 31 33 35 38 40 44 46 51 56 58 59 61 62 63 5011 64 1 0 0 1 2 3 5 6 7 9 11 13 15 16 17 18 19 20 21 23 25 26 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 5012 64 1 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 59 60 62 63 5013 64 1 1 f 5014 64 1 1 e 5015 64 1 1 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 5016 64 1 1 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 5017 64 1 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 5018 64 1 1 f 5019 64 1 1 f 5020 64 1 1 f 5021 64 1 1 f 5022 64 1 1 f 5023 64 1 1 f 5024 64 1 1 2 7 8 10 12 13 14 15 16 18 19 24 25 26 27 30 31 32 33 35 36 37 38 39 40 41 43 44 45 51 52 54 57 59 5025 64 1 1 1 4 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 25 27 28 33 37 39 40 41 45 46 48 50 52 53 55 56 58 59 60 62 63 5026 64 1 1 1 3 5 7 9 10 15 16 18 19 21 23 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 5027 64 1 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 56 58 59 60 61 5028 65 0 0 f 5029 65 0 0 e 5030 65 0 0 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 5031 65 0 0 63 64 5032 65 0 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 5033 65 0 0 f 5034 65 0 0 f 5035 65 0 0 f 5036 65 0 0 f 5037 65 0 0 f 5038 65 0 0 f 5039 65 0 0 1 3 5 6 8 12 13 14 15 20 28 32 33 36 38 39 44 46 48 50 54 55 56 58 59 62 5040 65 0 0 2 3 4 5 6 8 12 16 17 19 20 21 22 27 28 29 33 34 36 37 40 41 42 43 45 48 49 50 52 53 54 55 56 58 59 62 5041 65 0 0 0 5 10 12 13 16 19 21 23 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 5042 65 0 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 27 28 29 32 33 34 35 36 41 42 45 47 53 57 60 61 5043 65 0 1 f 5044 65 0 1 e 5045 65 0 1 e 5046 65 0 1 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 5047 65 0 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 5048 65 0 1 f 5049 65 0 1 f 5050 65 0 1 f 5051 65 0 1 f 5052 65 0 1 f 5053 65 0 1 f 5054 65 0 1 0 2 4 7 9 10 14 16 17 19 22 23 25 27 29 35 37 38 39 40 41 46 48 50 52 53 55 57 58 59 61 62 63 5055 65 0 1 0 2 3 5 7 8 13 15 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 44 45 46 48 49 50 52 53 55 57 58 59 61 62 63 5056 65 0 1 2 3 4 5 8 9 11 12 14 15 16 17 19 20 22 23 24 25 26 28 29 30 32 33 35 36 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 5057 65 0 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 5058 65 1 0 f 5059 65 1 0 e 5060 65 1 0 38 39 40 41 42 43 44 45 46 47 5061 65 1 0 f 5062 65 1 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 5063 65 1 0 f 5064 65 1 0 f 5065 65 1 0 f 5066 65 1 0 f 5067 65 1 0 f 5068 65 1 0 f 5069 65 1 0 0 4 6 8 10 11 12 13 14 18 19 25 27 29 30 38 40 41 46 47 49 50 51 55 57 59 60 62 5070 65 1 0 0 1 5 6 7 10 12 13 15 16 17 18 19 20 21 22 23 24 25 26 27 28 31 32 39 40 45 48 50 51 52 56 59 62 64 5071 65 1 0 1 5 6 7 9 12 17 18 19 24 25 26 28 32 33 34 36 37 39 40 41 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 5072 65 1 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 19 20 21 23 28 29 30 32 33 34 35 36 41 42 43 44 46 51 53 54 55 58 61 63 64 5073 65 1 1 f 5074 65 1 1 e 5075 65 1 1 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 5076 65 1 1 51 52 53 54 55 56 57 58 59 60 61 62 63 64 5077 65 1 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 5078 65 1 1 f 5079 65 1 1 f 5080 65 1 1 f 5081 65 1 1 f 5082 65 1 1 f 5083 65 1 1 f 5084 65 1 1 1 2 3 4 6 7 8 9 10 11 13 16 18 19 20 22 23 24 25 28 30 33 36 37 39 40 42 44 45 46 47 50 52 54 55 60 64 5085 65 1 1 0 1 2 3 5 6 7 8 9 11 12 13 14 16 19 22 23 29 30 32 33 36 37 38 39 40 42 43 46 47 48 49 50 52 54 55 59 62 63 5086 65 1 1 0 3 4 5 7 9 10 11 12 13 14 15 16 18 19 20 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 5087 65 1 1 0 1 2 3 4 6 16 18 21 22 24 27 28 34 35 36 39 40 41 44 46 47 48 54 55 56 58 59 60 63 64 5088 211 0 0 f 5089 211 0 0 e 5090 211 0 0 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 5091 211 0 0 197 198 199 200 201 202 203 204 205 206 207 208 209 210 5092 211 0 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 5093 211 0 0 f 5094 211 0 0 f 5095 211 0 0 f 5096 211 0 0 f 5097 211 0 0 f 5098 211 0 0 f 5099 211 0 0 0 6 8 11 12 13 16 17 23 24 25 27 29 33 34 37 38 40 42 43 49 50 56 57 60 66 68 69 70 71 73 74 75 76 81 82 83 86 92 93 95 100 104 106 107 108 113 114 117 118 122 123 126 130 132 133 134 135 137 138 139 140 141 144 146 150 152 155 156 160 162 163 173 176 180 182 184 188 189 190 191 196 197 198 205 206 5100 211 0 0 4 5 7 9 11 13 14 16 18 20 23 24 25 26 29 30 33 34 36 41 43 49 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 144 146 147 148 149 150 152 153 154 160 165 168 169 170 172 173 174 175 177 178 179 186 187 192 194 199 205 206 208 209 5101 211 0 0 0 2 3 8 9 12 16 20 21 23 24 25 29 30 36 37 38 39 40 42 43 44 46 47 48 50 51 55 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 5102 211 0 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 164 165 166 168 169 172 174 175 179 185 186 189 190 191 194 197 200 201 202 207 208 5103 211 0 1 f 5104 211 0 1 e 5105 211 0 1 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 5106 211 0 1 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 5107 211 0 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 5108 211 0 1 f 5109 211 0 1 f 5110 211 0 1 f 5111 211 0 1 f 5112 211 0 1 f 5113 211 0 1 f 5114 211 0 1 0 1 3 10 13 14 17 19 20 24 27 28 31 33 35 37 38 39 41 42 44 45 46 47 48 50 51 60 61 63 64 65 66 67 69 70 71 72 73 76 79 82 83 85 87 89 93 97 99 100 101 102 104 105 106 111 112 113 114 116 120 121 122 125 126 127 128 129 130 131 132 133 135 136 139 140 142 146 148 149 150 151 152 153 156 157 159 160 163 164 165 166 167 168 169 170 171 175 176 177 179 180 183 185 186 187 188 190 191 194 196 199 201 202 203 205 206 208 5115 211 0 1 0 1 4 7 8 9 12 13 18 20 21 22 23 24 26 29 32 34 36 37 39 40 41 42 43 44 46 49 59 61 65 66 67 68 70 71 73 74 76 77 81 82 83 87 88 89 90 93 94 95 96 98 99 100 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 150 151 152 153 157 158 160 162 164 165 166 167 168 169 170 172 174 178 180 181 184 185 186 187 192 196 199 204 207 208 5116 211 0 1 1 4 6 9 10 11 14 15 16 20 21 22 23 25 26 27 31 34 35 36 37 40 42 44 45 47 49 50 51 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 5117 211 0 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 131 135 140 141 143 144 145 147 149 151 152 153 154 155 157 158 160 164 166 168 170 171 174 179 181 182 183 184 186 189 190 191 193 198 200 201 203 207 208 5118 211 1 0 f 5119 211 1 0 e 5120 211 1 0 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 5121 211 1 0 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 5122 211 1 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 5123 211 1 0 f 5124 211 1 0 f 5125 211 1 0 f 5126 211 1 0 f 5127 211 1 0 f 5128 211 1 0 f 5129 211 1 0 0 1 3 8 10 14 15 16 19 23 24 25 27 28 31 33 36 37 38 39 40 41 45 51 52 54 55 58 60 61 62 63 64 67 73 74 75 76 77 78 84 95 96 97 98 103 104 107 110 111 112 117 118 119 120 124 127 129 130 136 137 138 139 141 142 143 145 147 148 150 151 153 154 158 159 161 166 169 172 173 175 176 177 178 179 183 186 187 188 189 190 191 192 193 198 199 200 201 203 204 205 206 207 208 210 5130 211 1 0 1 3 4 7 10 12 14 16 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 115 118 119 120 121 123 124 125 129 130 132 137 138 140 141 143 144 145 146 153 159 167 173 176 177 178 179 181 183 184 186 188 192 194 196 200 201 202 204 206 5131 211 1 0 0 7 8 9 10 13 15 17 19 20 21 22 23 27 28 29 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 5132 211 1 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 124 126 127 129 131 132 133 136 140 144 145 146 147 151 153 157 158 159 160 162 163 168 169 170 172 173 174 175 176 177 178 181 183 184 185 186 188 189 191 193 195 197 199 208 209 210 5133 211 1 1 f 5134 211 1 1 e 5135 211 1 1 2 3 4 5 6 7 8 9 10 11 5136 211 1 1 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 5137 211 1 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 5138 211 1 1 f 5139 211 1 1 f 5140 211 1 1 f 5141 211 1 1 f 5142 211 1 1 f 5143 211 1 1 f 5144 211 1 1 0 2 3 6 8 10 12 14 15 16 17 19 21 22 23 24 25 28 30 31 33 34 35 37 39 43 44 46 47 50 53 55 57 60 68 69 73 79 80 81 83 84 85 86 90 94 95 101 102 103 104 105 109 110 111 112 114 116 117 118 122 123 124 125 129 130 131 134 139 142 143 144 145 147 148 151 152 154 158 159 160 162 164 165 166 172 173 176 177 183 184 187 190 192 194 195 197 200 202 203 210 5145 211 1 1 1 2 5 6 11 13 17 19 20 21 26 27 30 31 32 33 34 35 37 38 39 42 43 45 48 54 55 56 60 62 64 65 66 67 68 69 70 72 78 80 81 82 88 89 90 91 92 95 97 98 99 100 103 104 106 108 109 110 111 112 116 117 118 119 122 124 129 131 134 136 137 138 139 141 142 151 152 155 158 159 162 163 164 167 170 171 173 174 178 180 181 187 188 196 197 198 199 201 202 203 205 207 209 5146 211 1 1 3 4 5 6 7 11 12 13 15 16 22 23 25 28 32 33 36 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 5147 211 1 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 39 41 44 46 47 48 50 53 59 61 63 64 69 71 76 77 78 79 81 83 84 85 87 88 90 94 95 96 100 101 102 106 109 110 111 114 116 117 119 123 126 132 134 136 137 139 142 143 144 147 150 151 152 153 154 159 160 161 163 166 168 172 173 175 177 179 182 183 185 189 191 192 194 196 197 199 201 204 205 206 5148 224 0 0 f 5149 224 0 0 e 5150 224 0 0 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 5151 224 0 0 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 5152 224 0 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 5153 224 0 0 f 5154 224 0 0 f 5155 224 0 0 f 5156 224 0 0 f 5157 224 0 0 f 5158 224 0 0 f 5159 224 0 0 0 2 3 4 7 10 15 16 17 18 20 22 24 25 28 31 34 36 40 41 42 43 46 48 49 50 51 53 55 57 60 61 66 68 69 70 72 73 78 80 81 84 85 89 90 92 94 96 97 98 100 101 102 103 104 107 108 111 114 115 119 120 121 123 126 127 128 129 131 136 137 139 140 144 148 150 151 155 158 163 164 165 166 167 172 173 174 175 177 178 181 182 183 186 187 188 192 194 197 199 201 203 204 205 206 208 209 212 215 216 218 219 220 221 5160 224 0 0 0 1 6 7 9 10 12 13 14 17 18 19 20 21 22 24 25 29 32 33 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 176 177 178 180 181 185 186 188 190 192 194 196 199 205 206 207 209 212 213 214 215 217 222 5161 224 0 0 0 3 5 7 9 10 12 17 18 20 22 24 27 29 30 35 37 38 41 42 44 45 48 50 51 52 53 55 56 57 58 60 61 62 65 67 68 72 73 75 76 77 79 82 84 87 88 91 94 95 98 99 101 104 105 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 5162 224 0 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 183 184 185 186 190 191 194 195 196 197 199 207 211 212 214 215 217 219 222 5163 224 0 1 f 5164 224 0 1 e 5165 224 0 1 105 106 107 108 109 110 111 5166 224 0 1 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 5167 224 0 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 5168 224 0 1 f 5169 224 0 1 f 5170 224 0 1 f 5171 224 0 1 f 5172 224 0 1 f 5173 224 0 1 f 5174 224 0 1 0 2 4 5 7 9 11 12 13 14 15 17 19 21 24 25 26 29 34 36 40 41 43 46 47 48 50 52 53 54 55 56 61 62 63 64 65 67 68 69 71 72 73 74 76 78 79 80 81 83 84 86 88 89 90 92 95 97 98 100 104 105 106 107 109 110 114 116 117 118 120 122 124 125 128 129 133 134 136 137 143 144 149 150 151 153 156 157 158 160 162 163 164 165 167 168 170 172 176 178 181 183 184 185 190 193 196 199 200 202 203 204 207 208 210 215 216 217 220 222 5175 224 0 1 0 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 37 39 40 41 43 45 46 47 48 51 53 58 60 63 65 67 69 72 73 75 76 78 79 80 82 87 88 91 93 94 95 97 99 100 101 104 105 113 115 117 119 121 122 123 127 129 130 132 134 135 139 143 145 146 147 148 150 151 152 154 156 162 164 166 168 172 173 177 178 181 185 186 190 192 194 195 196 197 199 200 201 202 203 206 207 209 212 214 215 219 220 221 5176 224 0 1 2 5 9 12 13 15 19 21 24 27 28 29 30 31 33 35 37 38 39 45 49 52 53 54 59 62 63 66 67 69 70 71 74 78 80 82 83 85 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 5177 224 0 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 180 181 182 184 187 191 192 195 199 200 203 204 206 208 210 211 216 217 221 5178 224 1 0 f 5179 224 1 0 e 5180 224 1 0 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 5181 224 1 0 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 5182 224 1 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 5183 224 1 0 f 5184 224 1 0 f 5185 224 1 0 f 5186 224 1 0 f 5187 224 1 0 f 5188 224 1 0 f 5189 224 1 0 1 3 4 5 6 7 10 11 13 14 16 22 26 28 30 31 32 33 34 35 36 37 38 39 42 45 46 47 49 51 55 56 58 61 64 71 72 75 77 78 79 80 82 84 86 87 88 89 92 93 94 98 99 104 105 108 111 112 114 115 116 117 119 120 121 122 123 125 127 128 132 133 134 135 136 137 141 143 146 150 152 153 154 156 159 161 164 165 166 168 170 172 177 179 182 185 186 189 190 191 192 194 197 198 201 205 207 208 209 211 215 217 219 220 223 5190 224 1 0 1 4 5 8 13 15 16 17 20 21 27 28 29 32 33 35 36 37 39 45 48 50 51 53 54 55 58 65 66 67 68 70 71 72 73 76 77 78 87 88 89 90 100 105 106 107 111 112 113 116 119 122 123 124 128 129 131 132 133 137 139 141 142 145 146 151 154 156 157 159 160 161 163 164 165 166 168 172 173 174 176 177 178 180 186 190 191 194 195 197 199 200 203 205 208 210 211 212 216 217 219 222 5191 224 1 0 3 9 11 16 18 23 28 32 33 35 39 41 42 46 51 52 53 54 58 60 62 63 64 65 66 70 71 73 76 77 78 84 86 88 89 91 94 99 100 103 105 108 110 114 116 117 118 119 120 122 123 127 128 129 131 133 134 136 138 142 143 144 151 153 154 155 158 160 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 5192 224 1 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 44 50 51 52 57 59 61 63 67 69 71 76 77 78 80 81 82 83 84 88 89 92 93 98 99 102 103 104 106 108 109 110 111 113 114 116 118 119 123 128 132 133 134 137 138 140 141 146 148 149 151 153 154 158 166 169 170 173 175 179 180 181 182 184 185 186 187 189 191 192 193 194 197 198 199 202 203 206 207 208 210 211 213 214 216 217 219 222 5193 224 1 1 f 5194 224 1 1 e 5195 224 1 1 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 5196 224 1 1 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 5197 224 1 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 5198 224 1 1 f 5199 224 1 1 f 5200 224 1 1 f 5201 224 1 1 f 5202 224 1 1 f 5203 224 1 1 f 5204 224 1 1 2 3 5 6 8 10 11 14 19 21 22 23 24 29 32 42 43 45 47 50 55 56 57 60 61 62 63 65 66 67 70 71 72 73 74 76 77 78 81 82 83 86 89 91 92 94 95 97 98 101 103 104 105 107 108 110 112 113 116 117 120 121 123 125 126 128 130 131 134 135 138 141 142 145 146 148 150 151 153 154 156 158 159 160 161 162 165 168 169 170 172 174 177 178 180 186 188 189 191 192 193 194 195 196 199 203 204 208 209 210 211 215 217 220 221 222 5205 224 1 1 3 9 10 11 13 14 15 16 19 21 22 23 24 25 27 30 31 32 34 35 36 37 40 42 44 45 47 48 50 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 133 134 141 142 144 145 146 148 150 152 156 159 160 161 162 164 165 167 169 171 172 175 180 182 184 186 189 192 194 195 198 199 204 205 208 209 211 215 217 219 220 221 223 5206 224 1 1 0 1 4 5 6 8 10 12 13 14 16 19 21 22 23 24 25 26 28 30 31 35 36 37 39 47 49 50 51 52 53 55 56 59 62 63 65 66 68 69 73 74 76 85 88 89 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 5207 224 1 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 123 125 127 128 130 131 134 136 137 138 144 145 146 148 151 155 157 163 164 166 167 169 173 174 177 178 180 181 185 186 187 188 192 193 194 195 197 199 200 201 205 206 207 208 209 211 212 213 214 217 221 5208 247 0 0 f 5209 247 0 0 e 5210 247 0 0 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 5211 247 0 0 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 5212 247 0 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 5213 247 0 0 f 5214 247 0 0 f 5215 247 0 0 f 5216 247 0 0 f 5217 247 0 0 f 5218 247 0 0 f 5219 247 0 0 0 3 6 8 11 12 14 15 19 23 24 27 28 35 36 38 39 40 42 43 44 48 49 50 51 54 56 58 62 63 64 66 68 69 71 72 73 75 77 78 80 81 87 91 92 94 96 97 98 99 102 107 110 117 119 121 122 125 126 128 129 132 134 137 138 139 141 142 146 147 150 151 153 155 156 157 160 161 162 163 166 167 169 171 172 176 178 180 181 185 188 189 190 192 195 196 198 204 207 208 213 214 215 217 218 220 221 222 225 230 233 234 238 240 242 243 244 246 5220 247 0 0 0 1 5 6 9 10 12 14 15 16 22 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 107 108 109 111 112 113 114 116 119 122 123 124 130 131 133 134 140 141 143 148 149 155 156 160 161 162 164 165 166 168 169 170 171 172 174 176 178 179 180 181 182 187 188 191 194 196 197 198 199 200 201 202 205 206 215 217 218 221 222 223 225 228 234 235 237 242 243 244 5221 247 0 0 5 9 12 13 14 16 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 5222 247 0 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 240 241 244 5223 247 0 1 f 5224 247 0 1 e 5225 247 0 1 1 5226 247 0 1 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 5227 247 0 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 5228 247 0 1 f 5229 247 0 1 f 5230 247 0 1 f 5231 247 0 1 f 5232 247 0 1 f 5233 247 0 1 f 5234 247 0 1 1 2 3 4 5 6 10 11 12 13 14 15 16 17 20 21 22 27 31 32 33 34 35 36 37 46 48 50 51 53 56 60 63 65 68 69 70 71 72 80 83 84 87 88 89 91 93 95 96 97 100 103 105 106 107 108 111 112 113 114 115 118 120 122 124 126 127 133 134 135 137 138 145 146 149 150 152 153 155 158 159 160 161 162 164 165 168 170 172 173 174 175 176 177 184 185 190 193 195 196 197 199 200 201 203 204 206 207 208 213 214 216 218 220 221 223 224 225 226 227 228 230 231 242 243 245 5235 247 0 1 3 4 6 7 14 16 17 18 19 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 64 65 68 69 74 75 78 82 84 85 88 91 92 93 94 95 96 101 102 105 107 108 113 114 116 118 127 129 131 132 135 136 138 139 140 141 144 146 147 151 152 155 156 157 158 160 162 163 164 166 167 168 170 174 179 180 182 183 184 186 187 189 190 193 195 197 198 199 203 204 208 209 211 216 218 220 221 222 224 225 228 229 233 236 237 239 240 241 243 244 245 5236 247 0 1 1 4 7 8 10 11 12 16 19 20 23 24 26 27 28 30 31 36 38 40 41 43 44 47 48 49 51 52 53 54 55 60 64 66 68 69 70 71 74 76 77 79 80 81 82 83 84 88 89 91 93 98 100 101 104 105 106 107 108 111 112 115 116 117 118 119 120 122 126 130 133 134 136 137 138 139 142 144 146 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 5237 247 0 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 87 90 95 98 100 102 108 110 113 115 117 118 121 122 123 124 132 136 137 138 140 141 142 145 147 148 151 152 153 154 155 159 160 161 162 163 164 167 169 172 173 176 177 178 179 180 182 183 186 188 192 195 196 198 199 201 204 205 207 210 212 215 216 219 220 221 223 224 226 227 228 230 233 234 236 240 242 244 5238 247 1 0 f 5239 247 1 0 e 5240 247 1 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 5241 247 1 0 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 5242 247 1 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 5243 247 1 0 f 5244 247 1 0 f 5245 247 1 0 f 5246 247 1 0 f 5247 247 1 0 f 5248 247 1 0 f 5249 247 1 0 0 1 2 4 6 9 11 13 14 15 16 17 20 21 22 23 25 28 29 33 34 38 39 43 47 48 49 51 52 54 56 59 60 61 64 65 66 69 70 71 75 76 77 78 79 80 81 86 90 92 94 95 97 98 99 100 101 105 108 109 110 111 112 116 117 122 124 125 126 127 128 129 130 131 132 138 141 142 146 147 152 153 154 156 157 160 163 167 168 169 170 172 173 174 175 177 178 180 182 183 185 187 189 192 193 194 202 203 205 206 209 210 213 216 221 224 226 227 228 229 231 233 234 236 237 238 240 241 242 244 245 246 5250 247 1 0 1 2 5 6 7 8 9 10 11 13 14 16 18 19 22 24 25 27 28 31 35 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 168 169 170 175 176 178 179 181 183 186 188 189 190 192 195 196 197 199 202 203 204 206 208 209 212 213 218 221 223 224 225 226 227 228 236 238 239 241 244 245 246 5251 247 1 0 4 7 9 11 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 5252 247 1 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 63 65 68 69 71 73 75 77 80 86 89 92 93 94 95 96 100 101 104 105 108 109 110 111 112 114 117 118 119 121 122 124 125 129 130 134 139 140 142 143 145 147 150 151 153 155 156 159 163 164 165 166 172 173 176 177 180 181 184 188 189 193 194 196 197 199 201 204 209 210 212 213 217 218 222 223 225 226 227 228 230 235 236 237 239 240 245 246 5253 247 1 1 f 5254 247 1 1 e 5255 247 1 1 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 5256 247 1 1 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 5257 247 1 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 5258 247 1 1 f 5259 247 1 1 f 5260 247 1 1 f 5261 247 1 1 f 5262 247 1 1 f 5263 247 1 1 f 5264 247 1 1 0 1 3 6 9 11 13 15 16 17 18 19 21 23 25 26 29 31 32 33 34 37 38 39 40 42 44 45 46 47 48 49 51 52 53 54 55 56 57 60 61 63 64 67 70 71 81 83 84 86 87 90 92 95 97 98 99 100 102 104 105 106 110 112 113 115 120 122 123 124 125 128 130 131 132 133 135 136 139 141 144 145 149 150 154 155 160 162 164 167 170 171 177 178 179 182 183 184 185 186 189 190 193 194 196 197 198 201 203 204 205 208 210 212 213 214 215 216 217 220 221 222 223 224 227 231 232 233 234 235 236 240 242 245 5265 247 1 1 1 7 8 9 10 11 14 15 17 18 19 20 22 24 27 29 31 35 36 37 38 40 42 43 44 45 46 49 52 54 55 58 59 60 61 62 71 72 74 75 77 79 80 81 83 85 86 87 90 93 94 95 100 101 103 106 114 117 119 121 122 123 124 125 126 127 128 129 131 132 133 135 139 141 143 147 148 154 157 160 161 162 164 168 169 172 174 175 176 178 179 180 182 184 185 187 188 189 194 196 201 202 205 207 208 209 210 211 213 214 215 216 218 222 223 225 226 230 231 242 243 244 245 246 5266 247 1 1 0 2 3 9 10 11 13 15 16 17 22 25 30 33 35 37 38 39 41 42 43 45 46 48 50 51 52 53 56 57 58 61 63 65 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 5267 247 1 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 33 34 35 36 37 40 41 43 44 45 49 51 52 54 56 57 60 70 71 73 74 76 78 80 83 86 91 93 95 96 98 100 101 104 106 107 110 112 119 121 122 123 124 125 126 127 129 130 134 137 138 139 141 143 145 147 148 149 152 159 160 166 167 168 169 170 172 175 178 182 183 187 189 192 193 194 196 197 199 204 208 209 215 217 219 221 224 226 227 230 231 232 233 234 235 241 242 244 245 5268 -1 5269 -1 5270 -1 5271 -1 5272 -1 5273 -1 5274 -1 5275 -1 5276 -1 5277 -1 5278 -1 5279 -1 5280 -1 5281 -1 5282 -1 5283 -1 5284 -1 5285 -1 5286 -1 5287 -1 5288 -1 5289 -1 5290 -1 5291 -1 5292 -1 5293 -1 5294 -1 5295 -1 5296 -1 5297 -1 5298 -1 5299 -1 5300 -1 5301 -1 5302 -1 5303 -1 5304 -1 5305 -1 5306 -1 5307 -1 5308 -1 5309 -1 5310 -1 5311 -1 5312 -1 5313 -1 5314 -1 5315 -1 5316 -1 5317 -1 5318 -1 5319 -1 5320 -1 5321 -1 5322 -1 5323 -1 5324 -1 5325 -1 5326 -1 5327 -1 5328 -1 5329 -1 5330 -1 5331 -1 5332 -1 5333 0 5334 -1 5335 0 5336 0 5337 -1 5338 0 5339 -1 5340 -1 5341 0 5342 -1 5343 -1 5344 -1 5345 -1 5346 -1 5347 -1 5348 0 5349 -1 5350 -1 5351 0 5352 -1 5353 -1 5354 -1 5355 0 5356 -1 5357 -1 5358 -1 5359 -1 5360 -1 5361 -1 5362 -1 5363 0 5364 -1 5365 -1 5366 0 5367 0 5368 -1 5369 -1 5370 -1 5371 0 5372 -1 5373 -1 5374 -1 5375 -1 5376 -1 5377 -1 5378 0 5379 -1 5380 -1 5381 0 5382 -1 5383 0 5384 -1 5385 -1 5386 0 5387 -1 5388 -1 5389 -1 5390 -1 5391 -1 5392 -1 5393 0 5394 -1 5395 16 5396 0 5397 0 5398 3 5399 -1 5400 15 5401 29 5402 2 5403 -1 5404 -1 5405 -1 5406 -1 5407 -1 5408 0 5409 -1 5410 5 5411 25 5412 0 5413 1 5414 -1 5415 11 5416 29 5417 0 5418 -1 5419 -1 5420 -1 5421 -1 5422 -1 5423 0 5424 -1 5425 2 5426 30 5427 0 5428 0 5429 -1 5430 -1 5431 4 5432 0 5433 -1 5434 -1 5435 -1 5436 -1 5437 -1 5438 0 5439 -1 5440 0 5441 21 5442 -1 5443 0 5444 -1 5445 3 5446 29 5447 -1 5448 -1 5449 -1 5450 -1 5451 -1 5452 -1 5453 0 5454 -1 5455 4 5456 7 5457 0 5458 0 5459 -1 5460 19 5461 16 5462 1 5463 -1 5464 -1 5465 -1 5466 -1 5467 -1 5468 0 5469 -1 5470 1 5471 15 5472 0 5473 0 5474 -1 5475 6 5476 16 5477 2 5478 -1 5479 -1 5480 -1 5481 -1 5482 -1 5483 0 5484 -1 5485 18 5486 13 5487 0 5488 0 5489 -1 5490 24 5491 11 5492 0 5493 -1 5494 -1 5495 -1 5496 -1 5497 -1 5498 0 5499 -1 5500 1 5501 30 5502 0 5503 2 5504 -1 5505 6 5506 23 5507 0 5508 -1 5509 -1 5510 -1 5511 -1 5512 -1 5513 0 5514 -1 5515 9 5516 1 5517 0 5518 0 5519 -1 5520 17 5521 29 5522 2 5523 -1 5524 -1 5525 -1 5526 -1 5527 -1 5528 0 5529 -1 5530 2 5531 4 5532 0 5533 0 5534 -1 5535 12 5536 25 5537 2 5538 -1 5539 -1 5540 -1 5541 -1 5542 -1 5543 0 5544 -1 5545 0 5546 28 5547 0 5548 2 5549 -1 5550 28 5551 19 5552 0 5553 -1 5554 -1 5555 -1 5556 -1 5557 -1 5558 0 5559 -1 5560 3 5561 21 5562 0 5563 0 5564 -1 5565 11 5566 8 5567 1 5568 -1 5569 -1 5570 -1 5571 -1 5572 -1 5573 0 5574 -1 5575 2 5576 27 5577 0 5578 0 5579 -1 5580 38 5581 31 5582 4 5583 -1 5584 -1 5585 -1 5586 -1 5587 -1 5588 0 5589 -1 5590 24 5591 19 5592 0 5593 1 5594 -1 5595 11 5596 2 5597 0 5598 -1 5599 -1 5600 -1 5601 -1 5602 -1 5603 0 5604 -1 5605 18 5606 7 5607 0 5608 5 5609 -1 5610 1 5611 38 5612 0 5613 -1 5614 -1 5615 -1 5616 -1 5617 -1 5618 0 5619 -1 5620 31 5621 13 5622 0 5623 0 5624 -1 5625 10 5626 7 5627 0 5628 -1 5629 -1 5630 -1 5631 -1 5632 -1 5633 0 5634 -1 5635 3 5636 16 5637 0 5638 1 5639 -1 5640 36 5641 37 5642 4 5643 -1 5644 -1 5645 -1 5646 -1 5647 -1 5648 0 5649 -1 5650 12 5651 41 5652 0 5653 0 5654 -1 5655 5 5656 59 5657 0 5658 -1 5659 -1 5660 -1 5661 -1 5662 -1 5663 0 5664 -1 5665 15 5666 5 5667 0 5668 1 5669 -1 5670 -1 5671 14 5672 0 5673 -1 5674 -1 5675 -1 5676 -1 5677 -1 5678 0 5679 -1 5680 34 5681 11 5682 0 5683 2 5684 -1 5685 26 5686 51 5687 6 5688 -1 5689 -1 5690 -1 5691 -1 5692 -1 5693 0 5694 -1 5695 31 5696 53 5697 0 5698 5 5699 -1 5700 27 5701 14 5702 6 5703 -1 5704 -1 5705 -1 5706 -1 5707 -1 5708 0 5709 -1 5710 9 5711 45 5712 0 5713 2 5714 -1 5715 2 5716 1 5717 0 5718 -1 5719 -1 5720 -1 5721 -1 5722 -1 5723 0 5724 -1 5725 9 5726 47 5727 0 5728 0 5729 -1 5730 39 5731 1 5732 0 5733 -1 5734 -1 5735 -1 5736 -1 5737 -1 5738 0 5739 -1 5740 38 5741 25 5742 0 5743 1 5744 -1 5745 12 5746 56 5747 0 5748 -1 5749 -1 5750 -1 5751 -1 5752 -1 5753 0 5754 -1 5755 72 5756 18 5757 0 5758 0 5759 -1 5760 101 5761 170 5762 0 5763 -1 5764 -1 5765 -1 5766 -1 5767 -1 5768 0 5769 -1 5770 1 5771 23 5772 0 5773 3 5774 -1 5775 42 5776 79 5777 2 5778 -1 5779 -1 5780 -1 5781 -1 5782 -1 5783 0 5784 -1 5785 127 5786 92 5787 0 5788 0 5789 -1 5790 28 5791 162 5792 0 5793 -1 5794 -1 5795 -1 5796 -1 5797 -1 5798 0 5799 -1 5800 161 5801 119 5802 0 5803 1 5804 -1 5805 27 5806 166 5807 0 5808 -1 5809 -1 5810 -1 5811 -1 5812 -1 5813 0 5814 -1 5815 83 5816 32 5817 0 5818 0 5819 -1 5820 49 5821 73 5822 1 5823 -1 5824 -1 5825 -1 5826 -1 5827 -1 5828 0 5829 -1 5830 27 5831 43 5832 0 5833 1 5834 -1 5835 30 5836 16 5837 0 5838 -1 5839 -1 5840 -1 5841 -1 5842 -1 5843 0 5844 -1 5845 42 5846 105 5847 0 5848 0 5849 -1 5850 48 5851 82 5852 0 5853 -1 5854 -1 5855 -1 5856 -1 5857 -1 5858 0 5859 -1 5860 189 5861 205 5862 0 5863 0 5864 -1 5865 23 5866 146 5867 0 5868 -1 5869 -1 5870 -1 5871 -1 5872 -1 5873 0 5874 -1 5875 11 5876 17 5877 0 5878 2 5879 -1 5880 157 5881 145 5882 0 5883 -1 5884 -1 5885 -1 5886 -1 5887 -1 5888 0 5889 -1 5890 58 5891 121 5892 0 5893 0 5894 -1 5895 75 5896 245 5897 2 5898 -1 5899 -1 5900 -1 5901 -1 5902 -1 5903 0 5904 -1 5905 7 5906 226 5907 0 5908 3 5909 -1 5910 19 5911 19 5912 0 5913 -1 5914 -1 5915 -1 5916 -1 5917 -1 5918 0 5919 -1 5920 18 5921 55 5922 0 5923 0 5924 -1 5925 2 5926 177 5927 6 5928 -1 5929 -1 5930 -1 5931 -1 5932 -1 5933 -1 5934 -1 5935 -1 5936 -1 5937 -1 5938 -1 5939 -1 5940 -1 5941 -1 5942 -1 5943 -1 5944 -1 5945 -1 5946 -1 5947 -1 5948 -1 5949 -1 5950 -1 5951 -1 5952 -1 5953 -1 5954 -1 5955 -1 5956 -1 5957 -1 5958 -1 5959 -1 5960 -1 5961 -1 5962 -1 5963 -1 5964 -1 5965 -1 5966 -1 5967 -1 5968 -1 5969 -1 5970 -1 5971 -1 5972 -1 5973 -1 5974 -1 5975 -1 5976 -1 5977 -1 5978 -1 5979 -1 5980 -1 5981 -1 5982 -1 5983 -1 5984 -1 5985 -1 5986 -1 5987 -1 5988 0 5989 -1 5990 0 5991 0 5992 -1 5993 -1 5994 -1 5995 -1 5996 -1 5997 -1 5998 0 5999 -1 6000 -1 6001 0 6002 -1 6003 0 6004 -1 6005 0 6006 0 6007 -1 6008 -1 6009 -1 6010 -1 6011 -1 6012 -1 6013 -1 6014 -1 6015 0 6016 0 6017 0 6018 0 6019 -1 6020 -1 6021 0 6022 -1 6023 -1 6024 -1 6025 -1 6026 -1 6027 -1 6028 -1 6029 -1 6030 0 6031 -1 6032 -1 6033 0 6034 -1 6035 -1 6036 0 6037 -1 6038 -1 6039 -1 6040 -1 6041 -1 6042 -1 6043 0 6044 -1 6045 0 6046 0 6047 0 6048 0 6049 -1 6050 26 6051 18 6052 0 6053 -1 6054 -1 6055 -1 6056 -1 6057 -1 6058 5 6059 -1 6060 6 6061 7 6062 0 6063 0 6064 -1 6065 13 6066 14 6067 0 6068 -1 6069 -1 6070 -1 6071 -1 6072 -1 6073 0 6074 -1 6075 3 6076 28 6077 0 6078 0 6079 -1 6080 3 6081 22 6082 0 6083 -1 6084 -1 6085 -1 6086 -1 6087 -1 6088 3 6089 -1 6090 4 6091 13 6092 2 6093 0 6094 -1 6095 6 6096 17 6097 0 6098 -1 6099 -1 6100 -1 6101 -1 6102 -1 6103 0 6104 -1 6105 16 6106 10 6107 0 6108 0 6109 -1 6110 19 6111 7 6112 0 6113 -1 6114 -1 6115 -1 6116 -1 6117 -1 6118 0 6119 -1 6120 -1 6121 24 6122 0 6123 0 6124 -1 6125 1 6126 17 6127 0 6128 -1 6129 -1 6130 -1 6131 -1 6132 -1 6133 0 6134 -1 6135 6 6136 23 6137 2 6138 0 6139 -1 6140 7 6141 31 6142 0 6143 -1 6144 -1 6145 -1 6146 -1 6147 -1 6148 0 6149 -1 6150 6 6151 13 6152 0 6153 0 6154 -1 6155 12 6156 23 6157 0 6158 -1 6159 -1 6160 -1 6161 -1 6162 -1 6163 1 6164 -1 6165 3 6166 29 6167 -1 6168 0 6169 -1 6170 8 6171 29 6172 0 6173 -1 6174 -1 6175 -1 6176 -1 6177 -1 6178 2 6179 -1 6180 11 6181 29 6182 2 6183 0 6184 -1 6185 5 6186 6 6187 0 6188 -1 6189 -1 6190 -1 6191 -1 6192 -1 6193 0 6194 -1 6195 1 6196 22 6197 0 6198 0 6199 -1 6200 0 6201 18 6202 0 6203 -1 6204 -1 6205 -1 6206 -1 6207 -1 6208 2 6209 -1 6210 2 6211 26 6212 0 6213 0 6214 -1 6215 10 6216 23 6217 0 6218 -1 6219 -1 6220 -1 6221 -1 6222 -1 6223 2 6224 -1 6225 6 6226 2 6227 3 6228 0 6229 -1 6230 11 6231 6 6232 0 6233 -1 6234 -1 6235 -1 6236 -1 6237 -1 6238 3 6239 -1 6240 43 6241 35 6242 1 6243 0 6244 -1 6245 6 6246 38 6247 0 6248 -1 6249 -1 6250 -1 6251 -1 6252 -1 6253 0 6254 -1 6255 5 6256 57 6257 2 6258 0 6259 -1 6260 24 6261 20 6262 0 6263 -1 6264 -1 6265 -1 6266 -1 6267 -1 6268 2 6269 -1 6270 -1 6271 34 6272 -1 6273 0 6274 -1 6275 19 6276 53 6277 0 6278 -1 6279 -1 6280 -1 6281 -1 6282 -1 6283 1 6284 -1 6285 3 6286 51 6287 1 6288 0 6289 -1 6290 0 6291 16 6292 0 6293 -1 6294 -1 6295 -1 6296 -1 6297 -1 6298 0 6299 -1 6300 3 6301 62 6302 0 6303 0 6304 -1 6305 0 6306 26 6307 0 6308 -1 6309 -1 6310 -1 6311 -1 6312 -1 6313 0 6314 -1 6315 19 6316 28 6317 1 6318 0 6319 -1 6320 46 6321 9 6322 0 6323 -1 6324 -1 6325 -1 6326 -1 6327 -1 6328 3 6329 -1 6330 2 6331 42 6332 0 6333 0 6334 -1 6335 36 6336 22 6337 0 6338 -1 6339 -1 6340 -1 6341 -1 6342 -1 6343 1 6344 -1 6345 12 6346 27 6347 0 6348 0 6349 -1 6350 23 6351 40 6352 0 6353 -1 6354 -1 6355 -1 6356 -1 6357 -1 6358 0 6359 -1 6360 41 6361 22 6362 0 6363 0 6364 -1 6365 8 6366 36 6367 -1 6368 -1 6369 -1 6370 -1 6371 -1 6372 -1 6373 3 6374 -1 6375 10 6376 1 6377 0 6378 0 6379 -1 6380 18 6381 39 6382 0 6383 -1 6384 -1 6385 -1 6386 -1 6387 -1 6388 0 6389 -1 6390 13 6391 36 6392 0 6393 0 6394 -1 6395 1 6396 5 6397 0 6398 -1 6399 -1 6400 -1 6401 -1 6402 -1 6403 0 6404 -1 6405 -1 6406 6 6407 0 6408 0 6409 -1 6410 3 6411 197 6412 0 6413 -1 6414 -1 6415 -1 6416 -1 6417 -1 6418 1 6419 -1 6420 1 6421 49 6422 1 6423 0 6424 -1 6425 21 6426 39 6427 0 6428 -1 6429 -1 6430 -1 6431 -1 6432 -1 6433 0 6434 -1 6435 79 6436 91 6437 0 6438 0 6439 -1 6440 20 6441 68 6442 0 6443 -1 6444 -1 6445 -1 6446 -1 6447 -1 6448 6 6449 -1 6450 0 6451 72 6452 0 6453 0 6454 -1 6455 96 6456 190 6457 0 6458 -1 6459 -1 6460 -1 6461 -1 6462 -1 6463 0 6464 -1 6465 46 6466 41 6467 7 6468 0 6469 -1 6470 134 6471 19 6472 0 6473 -1 6474 -1 6475 -1 6476 -1 6477 -1 6478 0 6479 -1 6480 23 6481 154 6482 7 6483 0 6484 -1 6485 110 6486 217 6487 0 6488 -1 6489 -1 6490 -1 6491 -1 6492 -1 6493 1 6494 -1 6495 18 6496 166 6497 0 6498 0 6499 -1 6500 11 6501 193 6502 0 6503 -1 6504 -1 6505 -1 6506 -1 6507 -1 6508 1 6509 -1 6510 188 6511 15 6512 0 6513 0 6514 -1 6515 87 6516 181 6517 0 6518 -1 6519 -1 6520 -1 6521 -1 6522 -1 6523 0 6524 -1 6525 15 6526 107 6527 2 6528 0 6529 -1 6530 36 6531 144 6532 0 6533 -1 6534 -1 6535 -1 6536 -1 6537 -1 6538 1 6539 -1 6540 9 6541 207 6542 1 6543 0 6544 -1 6545 30 6546 69 6547 0 6548 -1 6549 -1 6550 -1 6551 -1 6552 -1 6553 3 6554 -1 6555 19 6556 8 6557 1 6558 0 6559 -1 6560 64 6561 219 6562 0 6563 -1 6564 -1 6565 -1 6566 -1 6567 -1 6568 0 6569 -1 6570 92 6571 118 6572 1 6573 0 6574 -1 6575 37 6576 19 6577 0 6578 -1 6579 -1 6580 -1 6581 -1 6582 -1 6583 3 6584 -1 6585 32 6586 67 6587 3 6588 0 6589 0 6590 0 6591 0 6592 0 6593 0 6594 0 6595 0 6596 0 6597 0 6598 0 6599 0 6600 0 6601 0 6602 0 6603 0 6604 0 6605 0 6606 0 6607 0 6608 0 6609 0 6610 0 6611 0 6612 0 6613 0 6614 0 6615 0 6616 0 6617 0 6618 0 6619 0 6620 0 6621 0 6622 0 6623 0 6624 0 6625 0 6626 0 6627 0 6628 0 6629 0 6630 0 6631 0 6632 0 6633 0 6634 0 6635 0 6636 0 6637 0 6638 0 6639 0 6640 0 6641 0 6642 0 6643 0 6644 0 6645 0 6646 0 6647 0 6648 0 6649 0 6650 0 6651 0 6652 0 6653 1 6654 0 6655 0 6656 1 6657 0 6658 1 6659 0 6660 0 6661 1 6662 0 6663 0 6664 0 6665 0 6666 0 6667 0 6668 1 6669 0 6670 0 6671 1 6672 0 6673 0 6674 0 6675 1 6676 1 6677 0 6678 0 6679 0 6680 0 6681 0 6682 0 6683 1 6684 0 6685 1 6686 1 6687 0 6688 0 6689 0 6690 0 6691 1 6692 1 6693 0 6694 0 6695 0 6696 0 6697 0 6698 1 6699 0 6700 0 6701 1 6702 1 6703 1 6704 0 6705 0 6706 0 6707 1 6708 0 6709 0 6710 0 6711 0 6712 0 6713 31 6714 0 6715 8 6716 12 6717 16 6718 16 6719 0 6720 0 6721 3 6722 9 6723 0 6724 0 6725 0 6726 0 6727 0 6728 31 6729 0 6730 1 6731 21 6732 18 6733 14 6734 0 6735 4 6736 1 6737 1 6738 0 6739 0 6740 0 6741 0 6742 0 6743 31 6744 0 6745 11 6746 22 6747 15 6748 16 6749 0 6750 0 6751 1 6752 0 6753 0 6754 0 6755 0 6756 0 6757 0 6758 31 6759 0 6760 22 6761 31 6762 15 6763 13 6764 0 6765 0 6766 16 6767 5 6768 0 6769 0 6770 0 6771 0 6772 0 6773 32 6774 0 6775 2 6776 26 6777 14 6778 14 6779 0 6780 4 6781 6 6782 14 6783 0 6784 0 6785 0 6786 0 6787 0 6788 32 6789 0 6790 7 6791 23 6792 30 6793 15 6794 0 6795 3 6796 3 6797 2 6798 0 6799 0 6800 0 6801 0 6802 0 6803 32 6804 0 6805 7 6806 30 6807 7 6808 15 6809 0 6810 0 6811 4 6812 1 6813 0 6814 0 6815 0 6816 0 6817 0 6818 32 6819 0 6820 17 6821 22 6822 8 6823 12 6824 0 6825 14 6826 12 6827 15 6828 0 6829 0 6830 0 6831 0 6832 0 6833 33 6834 0 6835 6 6836 23 6837 11 6838 13 6839 0 6840 2 6841 17 6842 8 6843 0 6844 0 6845 0 6846 0 6847 0 6848 33 6849 0 6850 1 6851 7 6852 29 6853 18 6854 0 6855 10 6856 9 6857 1 6858 0 6859 0 6860 0 6861 0 6862 0 6863 33 6864 0 6865 3 6866 8 6867 15 6868 14 6869 0 6870 4 6871 10 6872 16 6873 0 6874 0 6875 0 6876 0 6877 0 6878 33 6879 0 6880 5 6881 19 6882 6 6883 19 6884 0 6885 2 6886 7 6887 21 6888 0 6889 0 6890 0 6891 0 6892 0 6893 63 6894 0 6895 2 6896 40 6897 31 6898 33 6899 0 6900 2 6901 4 6902 15 6903 0 6904 0 6905 0 6906 0 6907 0 6908 63 6909 0 6910 20 6911 10 6912 2 6913 30 6914 0 6915 3 6916 24 6917 14 6918 0 6919 0 6920 0 6921 0 6922 0 6923 63 6924 0 6925 5 6926 50 6927 48 6928 25 6929 0 6930 21 6931 26 6932 32 6933 0 6934 0 6935 0 6936 0 6937 0 6938 63 6939 0 6940 30 6941 21 6942 4 6943 33 6944 0 6945 14 6946 7 6947 23 6948 0 6949 0 6950 0 6951 0 6952 0 6953 64 6954 0 6955 47 6956 40 6957 50 6958 29 6959 0 6960 6 6961 6 6962 27 6963 0 6964 0 6965 0 6966 0 6967 0 6968 64 6969 0 6970 3 6971 55 6972 33 6973 33 6974 0 6975 2 6976 19 6977 19 6978 0 6979 0 6980 0 6981 0 6982 0 6983 64 6984 0 6985 28 6986 16 6987 29 6988 35 6989 0 6990 21 6991 19 6992 16 6993 0 6994 0 6995 0 6996 0 6997 0 6998 64 6999 0 7000 1 7001 63 7002 56 7003 41 7004 0 7005 2 7006 30 7007 16 7008 0 7009 0 7010 0 7011 0 7012 0 7013 65 7014 0 7015 6 7016 8 7017 52 7018 37 7019 0 7020 9 7021 5 7022 19 7023 0 7024 0 7025 0 7026 0 7027 0 7028 65 7029 0 7030 7 7031 28 7032 36 7033 34 7034 0 7035 12 7036 25 7037 28 7038 0 7039 0 7040 0 7041 0 7042 0 7043 65 7044 0 7045 22 7046 13 7047 64 7048 26 7049 0 7050 1 7051 28 7052 0 7053 0 7054 0 7055 0 7056 0 7057 0 7058 65 7059 0 7060 16 7061 58 7062 22 7063 31 7064 0 7065 9 7066 19 7067 10 7068 0 7069 0 7070 0 7071 0 7072 0 7073 211 7074 0 7075 17 7076 192 7077 142 7078 100 7079 0 7080 9 7081 63 7082 78 7083 0 7084 0 7085 0 7086 0 7087 0 7088 211 7089 0 7090 48 7091 211 7092 66 7093 113 7094 0 7095 28 7096 13 7097 70 7098 0 7099 0 7100 0 7101 0 7102 0 7103 211 7104 0 7105 1 7106 95 7107 34 7108 99 7109 0 7110 82 7111 102 7112 52 7113 0 7114 0 7115 0 7116 0 7117 0 7118 211 7119 0 7120 9 7121 203 7122 50 7123 102 7124 0 7125 56 7126 69 7127 80 7128 0 7129 0 7130 0 7131 0 7132 0 7133 224 7134 0 7135 185 7136 131 7137 165 7138 126 7139 0 7140 38 7141 87 7142 50 7143 0 7144 0 7145 0 7146 0 7147 0 7148 224 7149 0 7150 56 7151 14 7152 105 7153 115 7154 0 7155 53 7156 66 7157 117 7158 0 7159 0 7160 0 7161 0 7162 0 7163 224 7164 0 7165 106 7166 83 7167 76 7168 124 7169 0 7170 58 7171 4 7172 78 7173 0 7174 0 7175 0 7176 0 7177 0 7178 224 7179 0 7180 17 7181 33 7182 106 7183 107 7184 0 7185 10 7186 79 7187 60 7188 0 7189 0 7190 0 7191 0 7192 0 7193 247 7194 0 7195 29 7196 6 7197 195 7198 127 7199 0 7200 95 7201 42 7202 72 7203 0 7204 0 7205 0 7206 0 7207 0 7208 247 7209 0 7210 12 7211 112 7212 6 7213 120 7214 0 7215 31 7216 119 7217 104 7218 0 7219 0 7220 0 7221 0 7222 0 7223 247 7224 0 7225 13 7226 33 7227 59 7228 125 7229 0 7230 69 7231 24 7232 142 7233 0 7234 0 7235 0 7236 0 7237 0 7238 247 7239 0 7240 101 7241 158 7242 144 7243 124 7244 0 7245 3 7246 97 7247 70 7248 1 7249 1 7250 1 7251 1 7252 1 7253 1 7254 1 7255 1 7256 1 7257 1 7258 1 7259 1 7260 1 7261 1 7262 1 7263 1 7264 1 7265 1 7266 1 7267 1 7268 1 7269 1 7270 1 7271 1 7272 1 7273 1 7274 1 7275 1 7276 1 7277 1 7278 1 7279 1 7280 1 7281 1 7282 1 7283 1 7284 1 7285 1 7286 1 7287 1 7288 1 7289 1 7290 1 7291 1 7292 1 7293 1 7294 1 7295 1 7296 1 7297 1 7298 1 7299 1 7300 1 7301 1 7302 1 7303 1 7304 1 7305 1 7306 1 7307 1 7308 1 7309 1 7310 1 7311 1 7312 1 7313 1 7314 1 7315 1 7316 1 7317 1 7318 1 7319 1 7320 1 7321 1 7322 1 7323 1 7324 1 7325 1 7326 1 7327 1 7328 1 7329 1 7330 1 7331 1 7332 1 7333 1 7334 1 7335 1 7336 1 7337 1 7338 1 7339 1 7340 1 7341 1 7342 1 7343 1 7344 1 7345 1 7346 1 7347 1 7348 1 7349 1 7350 1 7351 1 7352 1 7353 1 7354 1 7355 1 7356 1 7357 1 7358 1 7359 1 7360 1 7361 1 7362 1 7363 1 7364 1 7365 1 7366 1 7367 1 7368 1 7369 1 7370 1 7371 1 7372 1 7373 1 7374 1 7375 1 7376 1 7377 1 7378 1 7379 1 7380 1 7381 1 7382 1 7383 1 7384 1 7385 1 7386 1 7387 1 7388 1 7389 1 7390 1 7391 1 7392 1 7393 1 7394 1 7395 1 7396 1 7397 1 7398 1 7399 1 7400 1 7401 1 7402 1 7403 1 7404 1 7405 1 7406 1 7407 1 7408 1 7409 1 7410 1 7411 1 7412 1 7413 1 7414 1 7415 1 7416 1 7417 1 7418 1 7419 1 7420 1 7421 1 7422 1 7423 1 7424 1 7425 1 7426 1 7427 1 7428 1 7429 1 7430 1 7431 1 7432 1 7433 1 7434 1 7435 1 7436 1 7437 1 7438 1 7439 1 7440 1 7441 1 7442 1 7443 1 7444 1 7445 1 7446 1 7447 1 7448 1 7449 1 7450 1 7451 1 7452 1 7453 1 7454 1 7455 1 7456 1 7457 1 7458 1 7459 1 7460 1 7461 1 7462 1 7463 1 7464 1 7465 1 7466 1 7467 1 7468 1 7469 1 7470 1 7471 1 7472 1 7473 1 7474 1 7475 1 7476 1 7477 1 7478 1 7479 1 7480 1 7481 1 7482 1 7483 1 7484 1 7485 1 7486 1 7487 1 7488 1 7489 1 7490 1 7491 1 7492 1 7493 1 7494 1 7495 1 7496 1 7497 1 7498 1 7499 1 7500 1 7501 1 7502 1 7503 1 7504 1 7505 1 7506 1 7507 1 7508 1 7509 1 7510 1 7511 1 7512 1 7513 1 7514 1 7515 1 7516 1 7517 1 7518 1 7519 1 7520 1 7521 1 7522 1 7523 1 7524 1 7525 1 7526 1 7527 1 7528 1 7529 1 7530 1 7531 1 7532 1 7533 1 7534 1 7535 1 7536 1 7537 1 7538 1 7539 0 7540 1 7541 0 7542 1 7543 0 7544 1 7545 1 7546 1 7547 0 7548 1 7549 1 7550 1 7551 1 7552 1 7553 0 7554 1 7555 1 7556 1 7557 0 7558 1 7559 0 7560 1 7561 0 7562 1 7563 1 7564 1 7565 0 7566 1 7567 0 7568 1 7569 1 7570 1 7571 0 7572 1 7573 1 7574 1 7575 0 7576 1 7577 1 7578 1 7579 0 7580 1 7581 1 7582 1 7583 1 7584 1 7585 1 7586 1 7587 1 7588 1 7589 1 7590 1 7591 1 7592 1 7593 0 7594 1 7595 0 7596 1 7597 0 7598 1 7599 1 7600 1 7601 0 7602 1 7603 0 7604 1 7605 0 7606 1 7607 0 7608 1 7609 1 7610 1 7611 0 7612 1 7613 0 7614 1 7615 0 7616 1 7617 1 7618 1 7619 1 7620 1 7621 1 7622 1 7623 1 7624 1 7625 0 7626 1 7627 1 7628 1 7629 0 7630 1 7631 1 7632 1 7633 0 7634 1 7635 1 7636 1 7637 0 7638 1 7639 1 7640 1 7641 0 7642 1 7643 0 7644 1 7645 1 7646 1 7647 0 7648 1 7649 1 7650 1 7651 0 7652 1 7653 1 7654 1 7655 1 7656 1 7657 0 7658 1 7659 0 7660 1 7661 1 7662 1 7663 1 7664 1 7665 0 7666 1 7667 0 7668 1 7669 0 7670 1 7671 1 7672 1 7673 0 7674 1 7675 1 7676 1 7677 0 7678 1 7679 1 7680 1 7681 1 7682 1 7683 0 7684 1 7685 1 7686 1 7687 0 7688 1 7689 1 7690 1 7691 0 7692 1 7693 0 7694 1 7695 0 7696 1 7697 0 7698 1 7699 1 7700 1 7701 0 7702 1 7703 1 7704 1 7705 0 7706 1 7707 1 7708 1 7709 0 7710 1 7711 0 7712 1 7713 1 7714 1 7715 0 7716 1 7717 1 7718 1 7719 0 7720 1 7721 1 7722 1 7723 0 7724 1 7725 1 7726 1 7727 1 7728 1 7729 1 7730 1 7731 1 7732 1 7733 1 7734 1 7735 1 7736 1 7737 0 7738 1 7739 1 7740 1 7741 0 7742 1 7743 1 7744 1 7745 1 7746 1 7747 1 7748 1 7749 1 7750 1 7751 1 7752 1 7753 1 7754 1 7755 0 7756 1 7757 0 7758 1 7759 0 7760 1 7761 1 7762 1 7763 0 7764 1 7765 1 7766 1 7767 0 7768 1 7769 1 7770 1 7771 1 7772 1 7773 0 7774 1 7775 0 7776 1 7777 0 7778 1 7779 1 7780 1 7781 1 7782 1 7783 0 7784 1 7785 0 7786 1 7787 1 7788 1 7789 1 7790 1 7791 0 7792 1 7793 1 7794 1 7795 0 7796 1 7797 1 7798 1 7799 1 7800 1 7801 0 7802 1 7803 1 7804 1 7805 1 7806 1 7807 1 7808 1 7809 0 7810 1 7811 0 7812 1 7813 0 7814 1 7815 1 7816 1 7817 1 7818 1 7819 1 7820 1 7821 0 7822 1 7823 0 7824 1 7825 1 7826 1 7827 0 7828 1 7829 0 7830 1 7831 0 7832 1 7833 1 7834 1 7835 0 7836 1 7837 0 7838 1 7839 0 7840 1 7841 0 7842 1 7843 1 7844 1 7845 0 7846 1 7847 0 7848 1 7849 0 7850 1 7851 1 7852 1 7853 0 7854 1 7855 0 7856 1 7857 0 7858 1 7859 0 7860 1 7861 1 7862 1 7863 0 7864 1 7865 0 7866 1 7867 0 7868 1 7869 1 7870 1 7871 0 7872 1 7873 0 7874 1 7875 0 7876 1 7877 0 7878 1 7879 1 7880 1 7881 0 7882 1 7883 0 7884 1 7885 0 7886 1 7887 1 7888 1 7889 0 7890 1 7891 0 7892 1 7893 0 7894 1 7895 0 7896 1 7897 1 7898 1 7899 0 7900 1 7901 0 7902 1 7903 0 7904 1 7905 1 7906 1 7907 0 7908 1 7909 0 7910 1 7911 0 7912 1 7913 0 7914 1 7915 1 7916 1 7917 0 7918 1 7919 0 7920 1 7921 0 7922 1 7923 1 7924 1 7925 0 7926 1 7927 0 7928 1 7929 0 7930 1 7931 0 7932 1 7933 1 7934 1 7935 0 7936 1 7937 0 7938 1 7939 0 7940 1 7941 1 7942 1 7943 0 7944 1 7945 0 7946 1 7947 0 7948 1 7949 0 7950 1 7951 1 7952 1 7953 0 7954 1 7955 0 7956 1 7957 0 7958 1 7959 1 7960 1 7961 0 7962 1 7963 0 7964 1 7965 0 7966 1 7967 0 7968 1 7969 1 7970 1 7971 0 7972 1 7973 0 7974 1 7975 0 7976 1 7977 1 7978 1 7979 0 7980 1 7981 0 7982 1 7983 0 7984 1 7985 0 7986 1 7987 1 7988 1 7989 0 7990 1 7991 0 7992 1 7993 0 7994 1 7995 1 7996 1 7997 0 7998 1 7999 0 8000 1 8001 0 8002 1 8003 0 8004 1 8005 1 8006 1 8007 0 8008 1 8009 0 8010 1 8011 0 8012 1 8013 1 8014 1 8015 0 8016 1 8017 0 8018 1 8019 0 8020 1 8021 0 8022 1 8023 1 8024 1 8025 0 8026 1 8027 0 8028 1 8029 0 8030 1 8031 1 8032 1 8033 0 8034 1 8035 0 8036 1 8037 0 8038 1 8039 0 8040 1 8041 1 8042 1 8043 0 8044 1 8045 0 8046 1 8047 0 8048 1 8049 1 8050 1 8051 0 8052 1 8053 0 8054 1 8055 0 8056 1 8057 0 8058 1 8059 1 8060 1 8061 0 8062 1 8063 0 8064 1 8065 0 8066 1 8067 1 8068 1 8069 0 8070 1 8071 0 8072 1 8073 0 8074 1 8075 0 8076 1 8077 1 8078 1 8079 0 8080 1 8081 0 8082 1 8083 0 8084 1 8085 1 8086 1 8087 0 8088 1 8089 0 8090 1 8091 0 8092 1 8093 0 8094 1 8095 1 8096 1 8097 0 8098 1 8099 0 8100 1 8101 0 8102 1 8103 1 8104 1 8105 0 8106 1 8107 0 8108 1 8109 0 8110 1 8111 0 8112 1 8113 1 8114 1 8115 0 8116 1 8117 0 8118 1 8119 0 8120 1 8121 1 8122 1 8123 0 8124 1 8125 0 8126 1 8127 0 8128 1 8129 0 8130 1 8131 1 8132 1 8133 0 8134 1 8135 0 8136 1 8137 0 8138 1 8139 1 8140 1 8141 0 8142 1 8143 0 8144 1 8145 0 8146 1 8147 0 8148 1 8149 1 8150 1 8151 0 8152 1 8153 0 8154 1 8155 0 8156 1 8157 1 8158 1 8159 0 8160 1 8161 0 8162 1 8163 0 8164 1 8165 0 8166 1 8167 1 8168 1 8169 0 8170 1 8171 0 8172 1 8173 0 8174 1 8175 1 8176 1 8177 0 8178 1 8179 0 8180 1 8181 0 8182 1 8183 0 8184 1 8185 1 8186 1 8187 0 8188 1 8189 0 8190 1 8191 0 8192 1 8193 1 8194 1 8195 0 8196 1 8197 0 8198 1 8199 0 8200 1 8201 0 8202 1 8203 1 8204 1 8205 0 8206 1 8207 0 8208 1 8209 0 8210 1 8211 1 8212 1 8213 0 8214 1 8215 0 8216 1 8217 0 8218 1 8219 0 8220 1 8221 1 8222 1 8223 0 8224 1 8225 0 8226 1 8227 0 8228 1 8229 1 8230 1 8231 0 8232 1 8233 0 8234 1 8235 0 8236 1 8237 0 8238 1 8239 1 8240 1 8241 0 8242 1 8243 0 8244 1 8245 0 8246 1 8247 1 8248 1 8249 0 8250 1 8251 0 8252 1 8253 0 8254 1 8255 0 8256 1 8257 1 8258 1 8259 0 8260 1 8261 0 8262 1 8263 0 8264 1 8265 1 8266 1 8267 0 8268 1 8269 0 8270 1 8271 0 8272 1 8273 0 8274 1 8275 1 8276 1 8277 0 8278 1 8279 0 8280 1 8281 0 8282 1 8283 1 8284 1 8285 0 8286 1 8287 0 8288 1 8289 0 8290 1 8291 0 8292 1 8293 1 8294 1 8295 0 8296 1 8297 0 8298 1 8299 0 8300 1 8301 1 8302 1 8303 0 8304 1 8305 0 8306 1 8307 0 8308 1 8309 0 8310 1 8311 1 8312 1 8313 0 8314 1 8315 0 8316 1 8317 0 8318 1 8319 1 8320 1 8321 0 8322 1 8323 0 8324 1 8325 0 8326 1 8327 0 8328 1 8329 1 8330 1 8331 0 8332 1 8333 0 8334 1 8335 0 8336 1 8337 1 8338 1 8339 0 8340 1 8341 0 8342 1 8343 0 8344 1 8345 0 8346 1 8347 1 8348 1 8349 0 8350 1 8351 0 8352 1 8353 0 8354 1 8355 1 8356 1 8357 0 8358 1 8359 0 8360 1 8361 0 8362 1 8363 0 8364 1 8365 1 8366 1 8367 0 8368 1 8369 0 8370 1 8371 0 8372 1 8373 1 8374 1 8375 0 8376 1 8377 0 8378 1 8379 0 8380 1 8381 0 8382 1 8383 1 8384 1 8385 0 8386 1 8387 0 8388 1 8389 0 8390 1 8391 1 8392 1 8393 0 8394 1 8395 0 8396 1 8397 0 8398 1 8399 0 8400 1 8401 1 8402 1 8403 0 8404 1 8405 0 8406 1 8407 0 8408 1 8409 1 8410 1 8411 0 8412 1 8413 0 8414 1 8415 0 8416 1 8417 0 8418 1 8419 1 8420 1 8421 0 8422 1 8423 0 8424 1 8425 0 8426 1 8427 1 8428 1 8429 0 8430 1 8431 0 8432 1 8433 0 8434 1 8435 0 8436 1 8437 1 8438 1 8439 0 8440 1 8441 0 8442 1 8443 0 8444 1 8445 1 8446 1 8447 0 8448 1 8449 0 8450 1 8451 0 8452 1 8453 0 8454 1 8455 1 8456 1 8457 0 8458 1 8459 0 8460 1 8461 0 8462 1 8463 1 8464 1 8465 0 8466 1 8467 0 8468 1 8469 0 8470 1 8471 0 8472 1 8473 1 8474 1 8475 0 8476 1 8477 0 8478 1 8479 0 8480 1 8481 1 8482 1 8483 0 8484 1 8485 0 8486 1 8487 0 8488 1 8489 0 8490 1 8491 1 8492 1 8493 0 8494 1 8495 0 8496 1 8497 0 8498 1 8499 1 8500 1 8501 0 8502 1 8503 0 8504 1 8505 0 8506 1 8507 0 8508 1 8509 1 8510 1 8511 0 8512 1 8513 0 8514 1 8515 0 8516 1 8517 1 8518 1 8519 0 8520 1 8521 0 8522 1 8523 0 8524 1 8525 0 8526 1 8527 1 8528 1 8529 0 8530 1 8531 0 8532 1 8533 0 8534 1 8535 1 8536 1 8537 0 8538 1 8539 0 8540 1 8541 0 8542 1 8543 0 8544 1 8545 1 8546 1 8547 0 8548 1 8549 0 8550 1 8551 0 8552 1 8553 1 8554 1 8555 0 8556 1 8557 0 8558 1 8559 0 8560 1 8561 0 8562 1 8563 1 8564 1 8565 0 8566 1 8567 0 8568 1 8569 0 8570 1 8571 1 8572 1 8573 0 8574 1 8575 0 8576 1 8577 0 8578 1 8579 0 8580 1 8581 1 8582 1 8583 0 8584 1 8585 0 8586 1 8587 0 8588 1 8589 1 8590 1 8591 0 8592 1 8593 0 8594 1 8595 0 8596 1 8597 0 8598 1 8599 1 8600 1 8601 0 8602 1 8603 0 8604 1 8605 0 8606 1 8607 1 8608 1 8609 0 8610 1 8611 0 8612 1 8613 0 8614 1 8615 0 8616 1 8617 1 8618 1 8619 0 8620 1 8621 0 8622 1 8623 0 8624 1 8625 1 8626 1 8627 0 8628 1 8629 0 8630 1 8631 0 8632 1 8633 0 8634 1 8635 1 8636 1 8637 0 8638 1 8639 0 8640 1 8641 0 8642 1 8643 1 8644 1 8645 0 8646 1 8647 0 8648 1 8649 0 8650 1 8651 0 8652 1 8653 1 8654 1 8655 0 8656 1 8657 0 8658 1 8659 0 8660 1 8661 1 8662 1 8663 0 8664 1 8665 0 8666 1 8667 0 8668 1 8669 0 8670 1 8671 1 8672 1 8673 0 8674 1 8675 0 8676 1 8677 0 8678 1 8679 1 8680 1 8681 0 8682 1 8683 0 8684 1 8685 0 8686 1 8687 0 8688 1 8689 1 8690 1 8691 0 8692 1 8693 0 8694 1 8695 0 8696 1 8697 1 8698 1 8699 0 8700 1 8701 0 8702 1 8703 0 8704 1 8705 0 8706 1 8707 1 8708 1 8709 0 8710 1 8711 0 8712 1 8713 0 8714 1 8715 1 8716 1 8717 0 8718 1 8719 0 8720 1 8721 0 8722 1 8723 0 8724 1 8725 1 8726 1 8727 0 8728 1 8729 0 8730 1 8731 0 8732 1 8733 1 8734 1 8735 0 8736 1 8737 0 8738 1 8739 0 8740 1 8741 0 8742 1 8743 1 8744 1 8745 0 8746 1 8747 0 8748 1 8749 0 8750 1 8751 1 8752 1 8753 0 8754 1 8755 0 8756 1 8757 0 8758 1 8759 0 8760 1 8761 1 8762 1 8763 0 8764 1 8765 0 8766 1 8767 0 8768 1 8769 1 8770 1 8771 0 8772 1 8773 0 8774 1 8775 0 8776 1 8777 0 8778 1 8779 1 8780 1 8781 0 8782 1 8783 0 8784 1 8785 0 8786 1 8787 1 8788 1 8789 0 8790 1 8791 0 8792 1 8793 0 8794 1 8795 0 8796 1 8797 1 8798 1 8799 0 8800 1 8801 0 8802 1 8803 0 8804 1 8805 1 8806 1 8807 0 8808 1 8809 0 8810 1 8811 0 8812 1 8813 0 8814 1 8815 1 8816 1 8817 0 8818 1 8819 0 8820 1 8821 0 8822 1 8823 1 8824 1 8825 0 8826 1 8827 0 8828 1 8829 0 8830 1 8831 0 8832 1 8833 1 8834 1 8835 0 8836 1 8837 0 8838 1 8839 0 8840 1 8841 1 8842 1 8843 0 8844 1 8845 0 8846 1 8847 0 8848 1 8849 0 8850 1 8851 1 8852 1 8853 0 8854 1 8855 0 8856 1 8857 0 8858 1 8859 1 8860 1 8861 0 8862 1 8863 0 8864 1 8865 0 8866 1 8867 0 8868 1 8869 1 8870 1 8871 0 8872 1 8873 0 8874 1 8875 0 8876 1 8877 1 8878 1 8879 0 8880 1 8881 0 8882 1 8883 0 8884 1 8885 0 8886 1 8887 1 8888 1 8889 0 8890 1 8891 0 8892 1 8893 0 8894 1 8895 1 8896 1 8897 0 8898 1 8899 0 8900 1 8901 0 8902 1 8903 0 8904 1 8905 1 8906 1 8907 0 8908 1 8909 0 8910 1 8911 0 8912 1 8913 1 8914 1 8915 0 8916 1 8917 0 8918 1 8919 0 8920 1 8921 0 8922 1 8923 1 8924 1 8925 0 8926 1 8927 0 8928 1 8929 0 8930 1 8931 1 8932 1 8933 0 8934 1 8935 0 8936 1 8937 0 8938 1 8939 0 8940 1 8941 1 8942 1 8943 0 8944 1 8945 0 8946 1 8947 0 8948 1 8949 1 8950 1 8951 0 8952 1 8953 0 8954 1 8955 0 8956 1 8957 0 8958 1 8959 1 8960 1 8961 0 8962 1 8963 0 8964 1 8965 0 8966 1 8967 1 8968 1 8969 0 8970 1 8971 0 8972 1 8973 0 8974 1 8975 0 8976 1 8977 1 8978 1 8979 0 8980 1 8981 0 8982 1 8983 0 8984 1 8985 1 8986 1 8987 0 8988 1 8989 0 8990 1 8991 0 8992 1 8993 0 8994 1 8995 1 8996 1 8997 0 8998 1 8999 0 9000 1 9001 0 9002 1 9003 1 9004 1 9005 0 9006 1 9007 0 9008 1 9009 0 9010 1 9011 0 9012 1 9013 1 9014 1 9015 0 9016 1 9017 0 9018 1 9019 0 9020 1 9021 1 9022 1 9023 0 9024 1 9025 0 9026 1 9027 0 9028 1 9029 0 9030 1 9031 1 9032 1 9033 0 9034 1 9035 0 9036 1 9037 0 9038 1 9039 1 9040 1 9041 0 9042 1 9043 0 9044 1 9045 0 9046 1 9047 0 9048 1 9049 1 9050 1 9051 0 9052 1 9053 0 9054 1 9055 0 9056 1 9057 1 9058 1 9059 0 9060 1 9061 0 9062 1 9063 0 9064 1 9065 0 9066 1 9067 1 9068 1 9069 0 9070 1 9071 0 9072 1 9073 0 9074 1 9075 1 9076 1 9077 0 9078 1 9079 0 9080 1 9081 0 9082 1 9083 0 9084 1 9085 1 9086 1 9087 0 9088 1 9089 0 9090 1 9091 0 9092 1 9093 1 9094 1 9095 0 9096 1 9097 0 9098 1 9099 0 9100 1 9101 0 9102 1 9103 1 9104 1 9105 0 9106 1 9107 0 9108 1 9109 0 9110 1 9111 1 9112 1 9113 0 9114 1 9115 0 9116 1 9117 0 9118 1 9119 0 9120 1 9121 1 9122 1 9123 0 9124 1 9125 0 9126 1 9127 0 9128 1 9129 1 9130 1 9131 0 9132 1 9133 0 9134 1 9135 0 9136 1 9137 0 9138 1 9139 1 9140 1 9141 0 9142 1 9143 0 9144 1 9145 0 9146 1 9147 1 9148 1 9149 0 9150 1 9151 0 9152 1 9153 0 9154 1 9155 0 9156 1 9157 1 9158 1 9159 0 9160 1 9161 0 9162 1 9163 0 9164 1 9165 1 9166 1 9167 0 9168 1 9169 0 9170 1 9171 0 9172 1 9173 0 9174 1 9175 1 9176 1 9177 0 9178 1 9179 0 9180 1 9181 0 9182 1 9183 1 9184 1 9185 0 9186 1 9187 0 9188 1 9189 0 9190 1 9191 0 9192 1 9193 1 9194 1 9195 0 9196 1 9197 0 9198 1 9199 0 9200 1 9201 1 9202 1 9203 0 9204 1 9205 0 9206 1 9207 0 9208 1 9209 0 9210 1 9211 1 9212 1 9213 0 9214 1 9215 0 9216 1 9217 0 9218 1 9219 1 9220 1 9221 0 9222 1 9223 0 9224 1 9225 0 9226 1 9227 0 9228 1 9229 1 9230 1 9231 0 9232 1 9233 0 9234 1 9235 0 9236 1 9237 1 9238 1 9239 0 9240 1 9241 0 9242 1 9243 0 9244 1 9245 0 9246 1 9247 1 9248 1 9249 0 9250 1 9251 0 9252 1 9253 0 9254 1 9255 1 9256 1 9257 0 9258 1 9259 0 9260 1 9261 0 9262 1 9263 0 9264 1 9265 1 9266 1 9267 0 9268 1 9269 0 9270 1 9271 0 9272 1 9273 1 9274 1 9275 0 9276 1 9277 0 9278 1 9279 0 9280 1 9281 0 9282 1 9283 1 9284 1 9285 0 9286 1 9287 0 9288 1 9289 0 9290 1 9291 1 9292 1 9293 0 9294 1 9295 0 9296 1 9297 0 9298 1 9299 0 9300 1 9301 1 9302 1 9303 0 9304 1 9305 0 9306 1 9307 0 9308 1 9309 1 9310 1 9311 0 9312 1 9313 0 9314 1 9315 0 9316 1 9317 0 9318 1 9319 1 9320 1 9321 0 9322 1 9323 0 9324 1 9325 0 9326 1 9327 1 9328 1 9329 0 9330 1 9331 0 9332 1 9333 0 9334 1 9335 0 9336 1 9337 1 9338 1 9339 0 9340 1 9341 0 9342 1 9343 0 9344 1 9345 1 9346 1 9347 0 9348 1 9349 0 9350 1 9351 0 9352 1 9353 0 9354 1 9355 1 9356 1 9357 0 9358 1 9359 0 9360 1 9361 0 9362 1 9363 1 9364 1 9365 0 9366 1 9367 0 9368 1 9369 0 9370 1 9371 0 9372 1 9373 1 9374 1 9375 0 9376 1 9377 0 9378 1 9379 0 9380 1 9381 1 9382 1 9383 0 9384 1 9385 0 9386 1 9387 0 9388 1 9389 0 9390 1 9391 1 9392 1 9393 0 9394 1 9395 0 9396 1 9397 0 9398 1 9399 1 9400 1 9401 0 9402 1 9403 0 9404 1 9405 0 9406 1 9407 0 9408 1 9409 1 9410 1 9411 0 9412 1 9413 0 9414 1 9415 0 9416 1 9417 1 9418 1 9419 0 9420 1 9421 0 9422 1 9423 0 9424 1 9425 0 9426 1 9427 1 9428 1 9429 0 9430 1 9431 0 9432 1 9433 0 9434 1 9435 1 9436 1 9437 0 9438 1 9439 0 9440 1 9441 0 9442 1 9443 0 9444 1 9445 1 9446 1 9447 0 9448 1 9449 0 9450 1 9451 0 9452 1 9453 1 9454 1 9455 0 9456 1 9457 0 9458 1 9459 0 9460 1 9461 0 9462 1 9463 1 9464 1 9465 0 9466 1 9467 0 9468 1 9469 0 9470 1 9471 1 9472 1 9473 0 9474 1 9475 0 9476 1 9477 0 9478 1 9479 0 9480 1 9481 1 9482 1 9483 0 9484 1 9485 0 9486 1 9487 0 9488 1 9489 1 9490 1 9491 0 9492 1 9493 0 9494 1 9495 0 9496 1 9497 0 9498 1 9499 1 9500 1 9501 0 9502 1 9503 0 9504 1 9505 0 9506 1 9507 1 9508 1 9509 0 9510 1 9511 0 9512 1 9513 0 9514 1 9515 0 9516 1 9517 1 9518 1 9519 0 9520 1 9521 0 9522 1 9523 0 9524 1 9525 1 9526 1 9527 0 9528 1 9529 0 9530 1 9531 0 9532 1 9533 0 9534 1 9535 1 9536 1 9537 0 9538 1 9539 0 9540 1 9541 0 9542 1 9543 1 9544 1 9545 0 9546 1 9547 0 9548 1 9549 0 9550 1 9551 0 9552 1 9553 1 9554 1 9555 0 9556 1 9557 0 9558 1 9559 0 9560 1 9561 1 9562 1 9563 0 9564 1 9565 0 9566 1 9567 0 9568 1 9569 0 9570 1 9571 1 9572 1 9573 0 9574 1 9575 0 9576 1 9577 0 9578 1 9579 1 9580 1 9581 0 9582 1 9583 0 9584 1 9585 0 9586 1 9587 0 9588 1 9589 1 9590 1 9591 0 9592 1 9593 0 9594 1 9595 0 9596 1 9597 1 9598 1 9599 0 9600 1 9601 0 9602 1 9603 0 9604 1 9605 0 9606 1 9607 1 9608 1 9609 0 9610 1 9611 0 9612 1 9613 0 9614 1 9615 1 9616 1 9617 0 9618 1 9619 0 9620 1 9621 0 9622 1 9623 0 9624 1 9625 1 9626 1 9627 0 9628 1 9629 0 9630 1 9631 0 9632 1 9633 1 9634 1 9635 0 9636 1 9637 0 9638 1 9639 0 9640 1 9641 0 9642 1 9643 1 9644 1 9645 0 9646 1 9647 0 9648 1 9649 0 9650 1 9651 1 9652 1 9653 0 9654 1 9655 0 9656 1 9657 0 9658 1 9659 0 9660 1 9661 1 9662 1 9663 0 9664 1 9665 0 9666 1 9667 0 9668 1 9669 1 9670 1 9671 0 9672 1 9673 0 9674 1 9675 0 9676 1 9677 0 9678 1 9679 1 9680 1 9681 0 9682 1 9683 0 9684 1 9685 0 9686 1 9687 1 9688 1 9689 0 9690 1 9691 0 9692 1 9693 0 9694 1 9695 0 9696 1 9697 1 9698 1 9699 0 9700 1 9701 0 9702 1 9703 0 9704 1 9705 1 9706 1 9707 0 9708 1 9709 0 9710 1 9711 0 9712 1 9713 0 9714 1 9715 1 9716 1 9717 0 9718 1 9719 0 9720 1 9721 0 9722 1 9723 1 9724 1 9725 0 9726 1 9727 0 9728 1 9729 0 9730 1 9731 0 9732 1 9733 1 9734 1 9735 0 9736 1 9737 0 9738 1 9739 0 9740 1 9741 1 9742 1 9743 0 9744 1 9745 0 9746 1 9747 0 9748 1 9749 0 9750 1 9751 1 9752 1 9753 0 9754 1 9755 0 9756 1 9757 0 9758 1 9759 1 9760 1 9761 0 9762 1 9763 0 9764 1 9765 0 9766 1 9767 0 9768 1 9769 1 9770 1 9771 0 9772 1 9773 0 9774 1 9775 0 9776 1 9777 1 9778 1 9779 0 9780 1 9781 0 9782 1 9783 0 9784 1 9785 0 9786 1 9787 1 9788 1 9789 0 9790 1 9791 0 9792 1 9793 0 9794 1 9795 1 9796 1 9797 0 9798 1 9799 0 9800 1 9801 0 9802 1 9803 0 9804 1 9805 1 9806 1 9807 0 9808 1 9809 0 9810 1 9811 0 9812 1 9813 1 9814 1 9815 0 9816 1 9817 0 9818 1 9819 0 9820 1 9821 0 9822 1 9823 1 9824 1 9825 0 9826 1 9827 0 9828 1 9829 0 9830 1 9831 1 9832 1 9833 0 9834 1 9835 0 9836 1 9837 0 9838 1 9839 0 9840 1 9841 1 9842 1 9843 0 9844 1 9845 0 9846 1 9847 0 9848 1 9849 1 9850 1 9851 0 9852 1 9853 0 9854 1 9855 0 9856 1 9857 0 9858 1 9859 1 9860 1 9861 0 9862 1 9863 0 9864 1 9865 0 9866 1 9867 1 9868 1 9869 0 9870 1 9871 0 9872 1 9873 0 9874 1 9875 0 9876 1 9877 1 9878 1 9879 0 9880 1 9881 0 9882 1 9883 0 9884 1 9885 1 9886 1 9887 0 9888 1 9889 0 9890 1 9891 0 9892 1 9893 0 9894 1 9895 1 9896 1 9897 0 9898 1 9899 0 9900 1 9901 0 9902 1 9903 1 9904 1 9905 0 9906 1 9907 0 9908 1 9909 0 9910 1 9911 0 9912 1 9913 1 9914 1 9915 0 9916 1 9917 0 9918 1 9919 0 9920 1 9921 1 9922 1 9923 0 9924 1 9925 0 9926 1 9927 0 9928 1 9929 0 9930 1 9931 1 9932 1 9933 0 9934 1 9935 0 9936 1 9937 0 9938 1 9939 1 9940 1 9941 0 9942 1 9943 0 9944 1 9945 0 9946 1 9947 0 9948 1 9949 1 9950 1 9951 0 9952 1 9953 0 9954 1 9955 0 9956 1 9957 1 9958 1 9959 0 9960 1 9961 0 9962 1 9963 0 9964 1 9965 0 9966 1 9967 1 9968 1 9969 0 9970 1 9971 0 9972 1 9973 0 9974 1 9975 1 9976 1 9977 0 9978 1 9979 0 9980 1 9981 0 9982 1 9983 0 9984 1 9985 1 9986 1 9987 0 9988 1 9989 0 9990 1 9991 0 9992 1 9993 1 9994 1 9995 0 9996 1 9997 0 9998 1 9999 0 10000 1 10001 0 10002 1 10003 1 10004 1 10005 0 10006 1 10007 0 10008 1 10009 0 10010 1 10011 1 10012 1 10013 0 10014 1 10015 0 10016 1 10017 0 10018 1 10019 0 10020 1 10021 1 10022 1 10023 0 10024 1 10025 0 10026 1 10027 0 10028 1 10029 1 10030 1 10031 0 10032 1 10033 0 10034 1 10035 0 10036 1 10037 0 10038 1 10039 1 10040 1 10041 0 10042 1 10043 0 10044 1 10045 0 10046 1 10047 1 10048 1 10049 0 10050 1 10051 0 10052 1 10053 0 10054 1 10055 0 10056 1 10057 1 10058 1 10059 0 10060 1 10061 0 10062 1 10063 0 10064 1 10065 1 10066 1 10067 0 10068 1 10069 0 10070 1 10071 0 10072 1 10073 0 10074 1 10075 1 10076 1 10077 0 10078 1 10079 0 10080 1 10081 0 10082 1 10083 1 10084 1 10085 0 10086 1 10087 0 10088 1 10089 0 10090 1 10091 0 10092 1 10093 1 10094 1 10095 0 10096 1 10097 0 10098 1 10099 0 10100 1 10101 1 10102 1 10103 0 10104 1 10105 0 10106 1 10107 0 10108 1 10109 0 10110 1 10111 1 10112 1 10113 0 10114 1 10115 0 10116 1 10117 0 10118 1 10119 1 10120 1 10121 0 10122 1 10123 0 10124 1 10125 0 10126 1 10127 0 10128 1 10129 1 10130 1 10131 0 10132 1 10133 0 10134 1 10135 0 10136 1 10137 1 10138 1 10139 0 10140 1 10141 0 10142 1 10143 0 10144 1 10145 0 10146 1 10147 1 10148 1 10149 0 10150 1 10151 0 10152 1 10153 0 10154 1 10155 1 10156 1 10157 0 10158 1 10159 0 10160 1 10161 0 10162 1 10163 0 10164 1 10165 1 10166 1 10167 0 10168 1 10169 0 10170 1 10171 0 10172 1 10173 1 10174 1 10175 0 10176 1 10177 0 10178 1 10179 0 10180 1 10181 0 10182 1 10183 1 10184 1 10185 0 10186 1 10187 0 10188 1 10189 0 10190 1 10191 1 10192 1 10193 0 10194 1 10195 0 10196 1 10197 0 10198 1 10199 0 10200 1 10201 1 10202 1 10203 0 10204 1 10205 0 10206 1 10207 0 10208 1 10209 1 10210 1 10211 0 10212 1 10213 0 10214 1 10215 0 10216 1 10217 0 10218 1 10219 1 10220 1 10221 0 10222 1 10223 0 10224 1 10225 0 10226 1 10227 1 10228 1 10229 0 10230 1 10231 0 10232 1 10233 0 10234 1 10235 0 10236 1 10237 1 10238 1 10239 0 10240 1 10241 0 10242 1 10243 0 10244 1 10245 1 10246 1 10247 0 10248 1 10249 0 10250 1 10251 0 10252 1 10253 0 10254 1 10255 1 10256 1 10257 0 10258 1 10259 0 10260 1 10261 0 10262 1 10263 1 10264 1 10265 0 10266 1 10267 0 10268 1 10269 0 10270 1 10271 0 10272 1 10273 1 10274 1 10275 0 10276 1 10277 0 10278 1 10279 0 10280 1 10281 1 10282 1 10283 0 10284 1 10285 0 10286 1 10287 0 10288 1 10289 0 10290 1 10291 1 10292 1 10293 0 10294 1 10295 0 10296 1 10297 0 10298 1 10299 1 10300 1 10301 0 10302 1 10303 0 10304 1 10305 0 10306 1 10307 0 10308 1 10309 1 10310 1 10311 0 10312 1 10313 0 10314 1 10315 0 10316 1 10317 1 10318 1 10319 0 10320 1 10321 0 10322 1 10323 0 10324 1 10325 0 10326 1 10327 1 10328 1 10329 0 10330 1 10331 0 10332 1 10333 0 10334 1 10335 1 10336 1 10337 0 10338 1 10339 0 10340 1 10341 0 10342 1 10343 0 10344 1 10345 1 10346 1 10347 0 10348 1 10349 0 10350 1 10351 0 10352 1 10353 1 10354 1 10355 0 10356 1 10357 0 10358 1 10359 0 10360 1 10361 0 10362 1 10363 1 10364 1 10365 0 10366 1 10367 0 10368 1 10369 0 10370 1 10371 1 10372 1 10373 0 10374 1 10375 0 10376 1 10377 0 10378 1 10379 0 10380 1 10381 1 10382 1 10383 0 10384 1 10385 0 10386 1 10387 0 10388 1 10389 1 10390 1 10391 0 10392 1 10393 0 10394 1 10395 0 10396 1 10397 0 10398 1 10399 1 10400 1 10401 0 10402 1 10403 0 10404 1 10405 0 10406 1 10407 1 10408 1 10409 0 10410 1 10411 0 10412 1 10413 0 10414 1 10415 0 10416 1 10417 1 10418 1 10419 1 10420 1 10421 1 10422 1 10423 1 10424 1 10425 1 10426 1 10427 1 10428 1 10429 1 10430 1 10431 1 10432 1 10433 1 10434 1 10435 1 10436 1 10437 1 10438 1 10439 1 10440 1 10441 1 10442 1 10443 1 10444 1 10445 1 10446 1 10447 1 10448 1 10449 1 10450 1 10451 1 10452 1 10453 1 10454 1 10455 1 10456 1 10457 1 10458 1 10459 1 10460 1 10461 1 10462 1 10463 1 10464 1 10465 1 10466 1 10467 1 10468 1 10469 1 10470 1 10471 1 10472 1 10473 1 10474 1 10475 1 10476 1 10477 1 10478 1 10479 1 10480 1 10481 1 10482 1 10483 1 10484 1 10485 1 10486 1 10487 1 10488 1 10489 1 10490 1 10491 1 10492 1 10493 1 10494 1 10495 1 10496 1 10497 1 10498 1 10499 1 10500 1 10501 1 10502 1 10503 1 10504 1 10505 1 10506 1 10507 1 10508 1 10509 1 10510 1 10511 1 10512 1 10513 1 10514 1 10515 1 10516 1 10517 1 10518 1 10519 1 10520 1 10521 1 10522 1 10523 1 10524 1 10525 1 10526 1 10527 1 10528 1 10529 1 10530 1 10531 1 10532 1 10533 1 10534 1 10535 1 10536 1 10537 1 10538 1 10539 1 10540 1 10541 1 10542 1 10543 1 10544 1 10545 1 10546 1 10547 1 10548 1 10549 1 10550 1 10551 1 10552 1 10553 1 10554 1 10555 1 10556 1 10557 1 10558 1 10559 1 10560 1 10561 1 10562 1 10563 1 10564 1 10565 1 10566 1 10567 1 10568 1 10569 1 10570 1 10571 1 10572 1 10573 1 10574 1 10575 1 10576 1 10577 1 10578 1 10579 1 10580 1 10581 1 10582 1 10583 1 10584 1 10585 1 10586 1 10587 1 10588 1 10589 1 10590 1 10591 1 10592 1 10593 1 10594 1 10595 1 10596 1 10597 1 10598 1 10599 1 10600 1 10601 1 10602 1 10603 1 10604 1 10605 1 10606 1 10607 1 10608 1 10609 1 10610 1 10611 1 10612 1 10613 1 10614 1 10615 1 10616 1 10617 1 10618 1 10619 1 10620 1 10621 1 10622 1 10623 1 10624 1 10625 1 10626 1 10627 1 10628 1 10629 1 10630 1 10631 1 10632 1 10633 1 10634 1 10635 1 10636 1 10637 1 10638 1 10639 1 10640 1 10641 1 10642 1 10643 1 10644 1 10645 1 10646 1 10647 1 10648 1 10649 1 10650 1 10651 1 10652 1 10653 1 10654 1 10655 1 10656 1 10657 1 10658 1 10659 1 10660 1 10661 1 10662 1 10663 1 10664 1 10665 1 10666 1 10667 1 10668 1 10669 1 10670 1 10671 1 10672 1 10673 1 10674 1 10675 1 10676 1 10677 1 10678 1 10679 1 10680 1 10681 1 10682 1 10683 1 10684 1 10685 1 10686 1 10687 1 10688 1 10689 1 10690 1 10691 1 10692 1 10693 1 10694 1 10695 1 10696 1 10697 1 10698 1 10699 1 10700 1 10701 1 10702 1 10703 1 10704 1 10705 1 10706 1 10707 0 10708 1 10709 0 10710 1 10711 1 10712 1 10713 1 10714 1 10715 1 10716 1 10717 1 10718 1 10719 1 10720 1 10721 1 10722 1 10723 1 10724 1 10725 0 10726 1 10727 0 10728 1 10729 1 10730 1 10731 1 10732 1 10733 1 10734 1 10735 1 10736 1 10737 0 10738 1 10739 0 10740 1 10741 1 10742 1 10743 0 10744 1 10745 0 10746 1 10747 1 10748 1 10749 1 10750 1 10751 1 10752 1 10753 1 10754 1 10755 1 10756 1 10757 1 10758 1 10759 1 10760 1 10761 0 10762 1 10763 1 10764 1 10765 1 10766 1 10767 1 10768 1 10769 1 10770 1 10771 1 10772 1 10773 1 10774 1 10775 1 10776 1 10777 1 10778 1 10779 0 10780 1 10781 1 10782 1 10783 1 10784 1 10785 1 10786 1 10787 1 10788 1 10789 1 10790 1 10791 1 10792 1 10793 1 10794 1 10795 1 10796 1 10797 0 10798 1 10799 1 10800 1 10801 1 10802 1 10803 1 10804 1 10805 1 10806 1 10807 1 10808 1 10809 0 10810 1 10811 1 10812 1 10813 1 10814 1 10815 0 10816 1 10817 1 10818 1 10819 1 10820 1 10821 1 10822 1 10823 1 10824 1 10825 1 10826 1 10827 0 10828 1 10829 1 10830 1 10831 1 10832 1 10833 0 10834 1 10835 1 10836 1 10837 1 10838 1 10839 1 10840 1 10841 1 10842 1 10843 1 10844 1 10845 1 10846 1 10847 1 10848 1 10849 1 10850 1 10851 0 10852 1 10853 1 10854 1 10855 1 10856 1 10857 1 10858 1 10859 1 10860 1 10861 1 10862 1 10863 0 10864 1 10865 0 10866 1 10867 1 10868 1 10869 0 10870 1 10871 1 10872 1 10873 1 10874 1 10875 1 10876 1 10877 1 10878 1 10879 1 10880 1 10881 0 10882 1 10883 1 10884 1 10885 1 10886 1 10887 0 10888 1 10889 0 10890 1 10891 1 10892 1 10893 1 10894 1 10895 1 10896 1 10897 1 10898 1 10899 1 10900 1 10901 0 10902 1 10903 1 10904 1 10905 0 10906 1 10907 1 10908 1 10909 1 10910 1 10911 1 10912 1 10913 1 10914 1 10915 1 10916 1 10917 0 10918 1 10919 1 10920 1 10921 1 10922 1 10923 0 10924 1 10925 0 10926 1 10927 1 10928 1 10929 1 10930 1 10931 1 10932 1 10933 1 10934 1 10935 0 10936 1 10937 0 10938 1 10939 1 10940 1 10941 0 10942 1 10943 1 10944 1 10945 1 10946 1 10947 1 10948 1 10949 1 10950 1 10951 1 10952 1 10953 0 10954 1 10955 1 10956 1 10957 1 10958 1 10959 0 10960 1 10961 1 10962 1 10963 1 10964 1 10965 1 10966 1 10967 1 10968 1 10969 1 10970 1 10971 1 10972 1 10973 1 10974 1 10975 1 10976 1 10977 0 10978 1 10979 0 10980 1 10981 1 10982 1 10983 1 10984 1 10985 1 10986 1 10987 1 10988 1 10989 1 10990 1 10991 1 10992 1 10993 1 10994 1 10995 0 10996 1 10997 0 10998 1 10999 1 11000 1 11001 1 11002 1 11003 1 11004 1 11005 1 11006 1 11007 0 11008 1 11009 0 11010 1 11011 1 11012 1 11013 0 11014 1 11015 0 11016 1 11017 1 11018 1 11019 1 11020 1 11021 1 11022 1 11023 1 11024 1 11025 0 11026 1 11027 0 11028 1 11029 1 11030 1 11031 0 11032 1 11033 0 11034 1 11035 1 11036 1 11037 1 11038 1 11039 1 11040 1 11041 1 11042 1 11043 0 11044 1 11045 0 11046 1 11047 1 11048 1 11049 0 11050 1 11051 0 11052 1 11053 1 11054 1 11055 1 11056 1 11057 1 11058 1 11059 1 11060 1 11061 0 11062 1 11063 0 11064 1 11065 1 11066 1 11067 0 11068 1 11069 0 11070 1 11071 1 11072 1 11073 1 11074 1 11075 1 11076 1 11077 1 11078 1 11079 0 11080 1 11081 0 11082 1 11083 1 11084 1 11085 0 11086 1 11087 0 11088 1 11089 1 11090 1 11091 1 11092 1 11093 1 11094 1 11095 1 11096 1 11097 0 11098 1 11099 0 11100 1 11101 1 11102 1 11103 0 11104 1 11105 0 11106 1 11107 1 11108 1 11109 1 11110 1 11111 1 11112 1 11113 1 11114 1 11115 0 11116 1 11117 0 11118 1 11119 1 11120 1 11121 0 11122 1 11123 0 11124 1 11125 1 11126 1 11127 1 11128 1 11129 1 11130 1 11131 1 11132 1 11133 0 11134 1 11135 0 11136 1 11137 1 11138 1 11139 0 11140 1 11141 0 11142 1 11143 1 11144 1 11145 1 11146 1 11147 1 11148 1 11149 1 11150 1 11151 0 11152 1 11153 0 11154 1 11155 1 11156 1 11157 0 11158 1 11159 0 11160 1 11161 1 11162 1 11163 1 11164 1 11165 1 11166 1 11167 1 11168 1 11169 0 11170 1 11171 0 11172 1 11173 1 11174 1 11175 0 11176 1 11177 0 11178 1 11179 1 11180 1 11181 1 11182 1 11183 1 11184 1 11185 1 11186 1 11187 0 11188 1 11189 0 11190 1 11191 1 11192 1 11193 0 11194 1 11195 0 11196 1 11197 1 11198 1 11199 1 11200 1 11201 1 11202 1 11203 1 11204 1 11205 0 11206 1 11207 0 11208 1 11209 1 11210 1 11211 0 11212 1 11213 0 11214 1 11215 1 11216 1 11217 1 11218 1 11219 1 11220 1 11221 1 11222 1 11223 0 11224 1 11225 0 11226 1 11227 1 11228 1 11229 0 11230 1 11231 0 11232 1 11233 1 11234 1 11235 1 11236 1 11237 1 11238 1 11239 1 11240 1 11241 0 11242 1 11243 0 11244 1 11245 1 11246 1 11247 0 11248 1 11249 0 11250 1 11251 1 11252 1 11253 1 11254 1 11255 1 11256 1 11257 1 11258 1 11259 0 11260 1 11261 0 11262 1 11263 1 11264 1 11265 0 11266 1 11267 0 11268 1 11269 1 11270 1 11271 1 11272 1 11273 1 11274 1 11275 1 11276 1 11277 0 11278 1 11279 0 11280 1 11281 1 11282 1 11283 0 11284 1 11285 0 11286 1 11287 1 11288 1 11289 1 11290 1 11291 1 11292 1 11293 1 11294 1 11295 0 11296 1 11297 0 11298 1 11299 1 11300 1 11301 0 11302 1 11303 0 11304 1 11305 1 11306 1 11307 1 11308 1 11309 1 11310 1 11311 1 11312 1 11313 0 11314 1 11315 0 11316 1 11317 1 11318 1 11319 0 11320 1 11321 0 11322 1 11323 1 11324 1 11325 1 11326 1 11327 1 11328 1 11329 1 11330 1 11331 0 11332 1 11333 0 11334 1 11335 1 11336 1 11337 0 11338 1 11339 0 11340 1 11341 1 11342 1 11343 1 11344 1 11345 1 11346 1 11347 1 11348 1 11349 0 11350 1 11351 0 11352 1 11353 1 11354 1 11355 0 11356 1 11357 0 11358 1 11359 1 11360 1 11361 1 11362 1 11363 1 11364 1 11365 1 11366 1 11367 0 11368 1 11369 0 11370 1 11371 1 11372 1 11373 0 11374 1 11375 0 11376 1 11377 1 11378 1 11379 1 11380 1 11381 1 11382 1 11383 1 11384 1 11385 0 11386 1 11387 0 11388 1 11389 1 11390 1 11391 0 11392 1 11393 0 11394 1 11395 1 11396 1 11397 1 11398 1 11399 1 11400 1 11401 1 11402 1 11403 0 11404 1 11405 0 11406 1 11407 1 11408 1 11409 0 11410 1 11411 0 11412 1 11413 1 11414 1 11415 1 11416 1 11417 1 11418 1 11419 1 11420 1 11421 0 11422 1 11423 0 11424 1 11425 1 11426 1 11427 0 11428 1 11429 0 11430 1 11431 1 11432 1 11433 1 11434 1 11435 1 11436 1 11437 1 11438 1 11439 0 11440 1 11441 0 11442 1 11443 1 11444 1 11445 0 11446 1 11447 0 11448 1 11449 1 11450 1 11451 1 11452 1 11453 1 11454 1 11455 1 11456 1 11457 0 11458 1 11459 0 11460 1 11461 1 11462 1 11463 0 11464 1 11465 0 11466 1 11467 1 11468 1 11469 1 11470 1 11471 1 11472 1 11473 1 11474 1 11475 0 11476 1 11477 0 11478 1 11479 1 11480 1 11481 0 11482 1 11483 0 11484 1 11485 1 11486 1 11487 1 11488 1 11489 1 11490 1 11491 1 11492 1 11493 0 11494 1 11495 0 11496 1 11497 1 11498 1 11499 0 11500 1 11501 0 11502 1 11503 1 11504 1 11505 1 11506 1 11507 1 11508 1 11509 1 11510 1 11511 0 11512 1 11513 0 11514 1 11515 1 11516 1 11517 0 11518 1 11519 0 11520 1 11521 1 11522 1 11523 1 11524 1 11525 1 11526 1 11527 1 11528 1 11529 0 11530 1 11531 0 11532 1 11533 1 11534 1 11535 0 11536 1 11537 0 11538 1 11539 1 11540 1 11541 1 11542 1 11543 1 11544 1 11545 1 11546 1 11547 0 11548 1 11549 0 11550 1 11551 1 11552 1 11553 0 11554 1 11555 0 11556 1 11557 1 11558 1 11559 1 11560 1 11561 1 11562 1 11563 1 11564 1 11565 0 11566 1 11567 0 11568 1 11569 1 11570 1 11571 0 11572 1 11573 0 11574 1 11575 1 11576 1 11577 1 11578 1 11579 1 11580 1 11581 1 11582 1 11583 0 11584 1 11585 0 11586 1 11587 1 11588 1 11589 0 11590 1 11591 0 11592 1 11593 1 11594 1 11595 1 11596 1 11597 1 11598 1 11599 1 11600 1 11601 0 11602 1 11603 0 11604 1 11605 1 11606 1 11607 0 11608 1 11609 0 11610 1 11611 1 11612 1 11613 1 11614 1 11615 1 11616 1 11617 1 11618 1 11619 0 11620 1 11621 0 11622 1 11623 1 11624 1 11625 0 11626 1 11627 0 11628 1 11629 1 11630 1 11631 1 11632 1 11633 1 11634 1 11635 1 11636 1 11637 0 11638 1 11639 0 11640 1 11641 1 11642 1 11643 0 11644 1 11645 0 11646 1 11647 1 11648 1 11649 1 11650 1 11651 1 11652 1 11653 1 11654 1 11655 0 11656 1 11657 0 11658 1 11659 1 11660 1 11661 0 11662 1 11663 0 11664 1 11665 1 11666 1 11667 1 11668 1 11669 1 11670 1 11671 1 11672 1 11673 0 11674 1 11675 0 11676 1 11677 1 11678 1 11679 0 11680 1 11681 0 11682 1 11683 1 11684 1 11685 1 11686 1 11687 1 11688 1 11689 1 11690 1 11691 0 11692 1 11693 0 11694 1 11695 1 11696 1 11697 0 11698 1 11699 0 11700 1 11701 1 11702 1 11703 1 11704 1 11705 1 11706 1 11707 1 11708 1 11709 0 11710 1 11711 0 11712 1 11713 1 11714 1 11715 0 11716 1 11717 0 11718 1 11719 1 11720 1 11721 1 11722 1 11723 1 11724 1 11725 1 11726 1 11727 0 11728 1 11729 0 11730 1 11731 1 11732 1 11733 0 11734 1 11735 0 11736 1 11737 1 11738 1 11739 1 11740 1 11741 1 11742 1 11743 1 11744 1 11745 0 11746 1 11747 0 11748 1 11749 1 11750 1 11751 0 11752 1 11753 0 11754 1 11755 1 11756 1 11757 1 11758 1 11759 1 11760 1 11761 1 11762 1 11763 0 11764 1 11765 0 11766 1 11767 1 11768 1 11769 0 11770 1 11771 0 11772 1 11773 1 11774 1 11775 1 11776 1 11777 1 11778 1 11779 1 11780 1 11781 0 11782 1 11783 0 11784 1 11785 1 11786 1 11787 0 11788 1 11789 0 11790 1 11791 1 11792 1 11793 1 11794 1 11795 1 11796 1 11797 1 11798 1 11799 0 11800 1 11801 0 11802 1 11803 1 11804 1 11805 0 11806 1 11807 0 11808 1 11809 1 11810 1 11811 1 11812 1 11813 1 11814 1 11815 1 11816 1 11817 0 11818 1 11819 0 11820 1 11821 1 11822 1 11823 0 11824 1 11825 0 11826 1 11827 1 11828 1 11829 1 11830 1 11831 1 11832 1 11833 1 11834 1 11835 0 11836 1 11837 0 11838 1 11839 1 11840 1 11841 0 11842 1 11843 0 11844 1 11845 1 11846 1 11847 1 11848 1 11849 1 11850 1 11851 1 11852 1 11853 0 11854 1 11855 0 11856 1 11857 1 11858 1 11859 0 11860 1 11861 0 11862 1 11863 1 11864 1 11865 1 11866 1 11867 1 11868 1 11869 1 11870 1 11871 0 11872 1 11873 0 11874 1 11875 1 11876 1 11877 0 11878 1 11879 0 11880 1 11881 1 11882 1 11883 1 11884 1 11885 1 11886 1 11887 1 11888 1 11889 0 11890 1 11891 0 11892 1 11893 1 11894 1 11895 0 11896 1 11897 0 11898 1 11899 1 11900 1 11901 1 11902 1 11903 1 11904 1 11905 1 11906 1 11907 0 11908 1 11909 0 11910 1 11911 1 11912 1 11913 0 11914 1 11915 0 11916 1 11917 1 11918 1 11919 1 11920 1 11921 1 11922 1 11923 1 11924 1 11925 0 11926 1 11927 0 11928 1 11929 1 11930 1 11931 0 11932 1 11933 0 11934 1 11935 1 11936 1 11937 1 11938 1 11939 1 11940 1 11941 1 11942 1 11943 0 11944 1 11945 0 11946 1 11947 1 11948 1 11949 0 11950 1 11951 0 11952 1 11953 1 11954 1 11955 1 11956 1 11957 1 11958 1 11959 1 11960 1 11961 0 11962 1 11963 0 11964 1 11965 1 11966 1 11967 0 11968 1 11969 0 11970 1 11971 1 11972 1 11973 1 11974 1 11975 1 11976 1 11977 1 11978 1 11979 0 11980 1 11981 0 11982 1 11983 1 11984 1 11985 0 11986 1 11987 0 11988 1 11989 1 11990 1 11991 1 11992 1 11993 1 11994 1 11995 1 11996 1 11997 0 11998 1 11999 0 12000 1 12001 1 12002 1 12003 0 12004 1 12005 0 12006 1 12007 1 12008 1 12009 1 12010 1 12011 1 12012 1 12013 1 12014 1 12015 0 12016 1 12017 0 12018 1 12019 1 12020 1 12021 0 12022 1 12023 0 12024 1 12025 1 12026 1 12027 1 12028 1 12029 1 12030 1 12031 1 12032 1 12033 0 12034 1 12035 0 12036 1 12037 1 12038 1 12039 0 12040 1 12041 0 12042 1 12043 1 12044 1 12045 1 12046 1 12047 1 12048 1 12049 1 12050 1 12051 0 12052 1 12053 0 12054 1 12055 1 12056 1 12057 0 12058 1 12059 0 12060 1 12061 1 12062 1 12063 1 12064 1 12065 1 12066 1 12067 1 12068 1 12069 0 12070 1 12071 0 12072 1 12073 1 12074 1 12075 0 12076 1 12077 0 12078 1 12079 1 12080 1 12081 1 12082 1 12083 1 12084 1 12085 1 12086 1 12087 0 12088 1 12089 0 12090 1 12091 1 12092 1 12093 0 12094 1 12095 0 12096 1 12097 1 12098 1 12099 1 12100 1 12101 1 12102 1 12103 1 12104 1 12105 0 12106 1 12107 0 12108 1 12109 1 12110 1 12111 0 12112 1 12113 0 12114 1 12115 1 12116 1 12117 1 12118 1 12119 1 12120 1 12121 1 12122 1 12123 0 12124 1 12125 0 12126 1 12127 1 12128 1 12129 0 12130 1 12131 0 12132 1 12133 1 12134 1 12135 1 12136 1 12137 1 12138 1 12139 1 12140 1 12141 0 12142 1 12143 0 12144 1 12145 1 12146 1 12147 0 12148 1 12149 0 12150 1 12151 1 12152 1 12153 1 12154 1 12155 1 12156 1 12157 1 12158 1 12159 0 12160 1 12161 0 12162 1 12163 1 12164 1 12165 0 12166 1 12167 0 12168 1 12169 1 12170 1 12171 1 12172 1 12173 1 12174 1 12175 1 12176 1 12177 0 12178 1 12179 0 12180 1 12181 1 12182 1 12183 0 12184 1 12185 0 12186 1 12187 1 12188 1 12189 1 12190 1 12191 1 12192 1 12193 1 12194 1 12195 0 12196 1 12197 0 12198 1 12199 1 12200 1 12201 0 12202 1 12203 0 12204 1 12205 1 12206 1 12207 1 12208 1 12209 1 12210 1 12211 1 12212 1 12213 0 12214 1 12215 0 12216 1 12217 1 12218 1 12219 0 12220 1 12221 0 12222 1 12223 1 12224 1 12225 1 12226 1 12227 1 12228 1 12229 1 12230 1 12231 0 12232 1 12233 0 12234 1 12235 1 12236 1 12237 0 12238 1 12239 0 12240 1 12241 1 12242 1 12243 1 12244 1 12245 1 12246 1 12247 1 12248 1 12249 0 12250 1 12251 0 12252 1 12253 1 12254 1 12255 0 12256 1 12257 0 12258 1 12259 1 12260 1 12261 1 12262 1 12263 1 12264 1 12265 1 12266 1 12267 0 12268 1 12269 0 12270 1 12271 1 12272 1 12273 0 12274 1 12275 0 12276 1 12277 1 12278 1 12279 1 12280 1 12281 1 12282 1 12283 1 12284 1 12285 0 12286 1 12287 0 12288 1 12289 1 12290 1 12291 0 12292 1 12293 0 12294 1 12295 1 12296 1 12297 1 12298 1 12299 1 12300 1 12301 1 12302 1 12303 0 12304 1 12305 0 12306 1 12307 1 12308 1 12309 0 12310 1 12311 0 12312 1 12313 1 12314 1 12315 1 12316 1 12317 1 12318 1 12319 1 12320 1 12321 0 12322 1 12323 0 12324 1 12325 1 12326 1 12327 0 12328 1 12329 0 12330 1 12331 1 12332 1 12333 1 12334 1 12335 1 12336 1 12337 1 12338 1 12339 0 12340 1 12341 0 12342 1 12343 1 12344 1 12345 0 12346 1 12347 0 12348 1 12349 1 12350 1 12351 1 12352 1 12353 1 12354 1 12355 1 12356 1 12357 0 12358 1 12359 0 12360 1 12361 1 12362 1 12363 0 12364 1 12365 0 12366 1 12367 1 12368 1 12369 1 12370 1 12371 1 12372 1 12373 1 12374 1 12375 0 12376 1 12377 0 12378 1 12379 1 12380 1 12381 0 12382 1 12383 0 12384 1 12385 1 12386 1 12387 1 12388 1 12389 1 12390 1 12391 1 12392 1 12393 0 12394 1 12395 0 12396 1 12397 1 12398 1 12399 0 12400 1 12401 0 12402 1 12403 1 12404 1 12405 1 12406 1 12407 1 12408 1 12409 1 12410 1 12411 0 12412 1 12413 0 12414 1 12415 1 12416 1 12417 0 12418 1 12419 0 12420 1 12421 1 12422 1 12423 1 12424 1 12425 1 12426 1 12427 1 12428 1 12429 0 12430 1 12431 0 12432 1 12433 1 12434 1 12435 0 12436 1 12437 0 12438 1 12439 1 12440 1 12441 1 12442 1 12443 1 12444 1 12445 1 12446 1 12447 0 12448 1 12449 0 12450 1 12451 1 12452 1 12453 0 12454 1 12455 0 12456 1 12457 1 12458 1 12459 1 12460 1 12461 1 12462 1 12463 1 12464 1 12465 0 12466 1 12467 0 12468 1 12469 1 12470 1 12471 0 12472 1 12473 0 12474 1 12475 1 12476 1 12477 1 12478 1 12479 1 12480 1 12481 1 12482 1 12483 0 12484 1 12485 0 12486 1 12487 1 12488 1 12489 0 12490 1 12491 0 12492 1 12493 1 12494 1 12495 1 12496 1 12497 1 12498 1 12499 1 12500 1 12501 0 12502 1 12503 0 12504 1 12505 1 12506 1 12507 0 12508 1 12509 0 12510 1 12511 1 12512 1 12513 1 12514 1 12515 1 12516 1 12517 1 12518 1 12519 0 12520 1 12521 0 12522 1 12523 1 12524 1 12525 0 12526 1 12527 0 12528 1 12529 1 12530 1 12531 1 12532 1 12533 1 12534 1 12535 1 12536 1 12537 0 12538 1 12539 0 12540 1 12541 1 12542 1 12543 0 12544 1 12545 0 12546 1 12547 1 12548 1 12549 1 12550 1 12551 1 12552 1 12553 1 12554 1 12555 0 12556 1 12557 0 12558 1 12559 1 12560 1 12561 0 12562 1 12563 0 12564 1 12565 1 12566 1 12567 1 12568 1 12569 1 12570 1 12571 1 12572 1 12573 0 12574 1 12575 0 12576 1 12577 1 12578 1 12579 0 12580 1 12581 0 12582 1 12583 1 12584 1 12585 1 12586 1 12587 1 12588 1 12589 1 12590 1 12591 0 12592 1 12593 0 12594 1 12595 1 12596 1 12597 0 12598 1 12599 0 12600 1 12601 1 12602 1 12603 1 12604 1 12605 1 12606 1 12607 1 12608 1 12609 0 12610 1 12611 0 12612 1 12613 1 12614 1 12615 0 12616 1 12617 0 12618 1 12619 1 12620 1 12621 1 12622 1 12623 1 12624 1 12625 1 12626 1 12627 0 12628 1 12629 0 12630 1 12631 1 12632 1 12633 0 12634 1 12635 0 12636 1 12637 1 12638 1 12639 1 12640 1 12641 1 12642 1 12643 1 12644 1 12645 0 12646 1 12647 0 12648 1 12649 1 12650 1 12651 0 12652 1 12653 0 12654 1 12655 1 12656 1 12657 1 12658 1 12659 1 12660 1 12661 1 12662 1 12663 0 12664 1 12665 0 12666 1 12667 1 12668 1 12669 0 12670 1 12671 0 12672 1 12673 1 12674 1 12675 1 12676 1 12677 1 12678 1 12679 1 12680 1 12681 0 12682 1 12683 0 12684 1 12685 1 12686 1 12687 0 12688 1 12689 0 12690 1 12691 1 12692 1 12693 1 12694 1 12695 1 12696 1 12697 1 12698 1 12699 0 12700 1 12701 0 12702 1 12703 1 12704 1 12705 0 12706 1 12707 0 12708 1 12709 1 12710 1 12711 1 12712 1 12713 1 12714 1 12715 1 12716 1 12717 0 12718 1 12719 0 12720 1 12721 1 12722 1 12723 0 12724 1 12725 0 12726 1 12727 1 12728 1 12729 1 12730 1 12731 1 12732 1 12733 1 12734 1 12735 0 12736 1 12737 0 12738 1 12739 1 12740 1 12741 0 12742 1 12743 0 12744 1 12745 1 12746 1 12747 1 12748 1 12749 1 12750 1 12751 1 12752 1 12753 0 12754 1 12755 0 12756 1 12757 1 12758 1 12759 0 12760 1 12761 0 12762 1 12763 1 12764 1 12765 1 12766 1 12767 1 12768 1 12769 1 12770 1 12771 0 12772 1 12773 0 12774 1 12775 1 12776 1 12777 0 12778 1 12779 0 12780 1 12781 1 12782 1 12783 1 12784 1 12785 1 12786 1 12787 1 12788 1 12789 0 12790 1 12791 0 12792 1 12793 1 12794 1 12795 0 12796 1 12797 0 12798 1 12799 1 12800 1 12801 1 12802 1 12803 1 12804 1 12805 1 12806 1 12807 0 12808 1 12809 0 12810 1 12811 1 12812 1 12813 0 12814 1 12815 0 12816 1 12817 1 12818 1 12819 1 12820 1 12821 1 12822 1 12823 1 12824 1 12825 0 12826 1 12827 0 12828 1 12829 1 12830 1 12831 0 12832 1 12833 0 12834 1 12835 1 12836 1 12837 1 12838 1 12839 1 12840 1 12841 1 12842 1 12843 0 12844 1 12845 0 12846 1 12847 1 12848 1 12849 0 12850 1 12851 0 12852 1 12853 1 12854 1 12855 1 12856 1 12857 1 12858 1 12859 1 12860 1 12861 0 12862 1 12863 0 12864 1 12865 1 12866 1 12867 0 12868 1 12869 0 12870 1 12871 1 12872 1 12873 1 12874 1 12875 1 12876 1 12877 1 12878 1 12879 0 12880 1 12881 0 12882 1 12883 1 12884 1 12885 0 12886 1 12887 0 12888 1 12889 1 12890 1 12891 1 12892 1 12893 1 12894 1 12895 1 12896 1 12897 0 12898 1 12899 0 12900 1 12901 1 12902 1 12903 0 12904 1 12905 0 12906 1 12907 1 12908 1 12909 1 12910 1 12911 1 12912 1 12913 1 12914 1 12915 0 12916 1 12917 0 12918 1 12919 1 12920 1 12921 0 12922 1 12923 0 12924 1 12925 1 12926 1 12927 1 12928 1 12929 1 12930 1 12931 1 12932 1 12933 0 12934 1 12935 0 12936 1 12937 1 12938 1 12939 0 12940 1 12941 0 12942 1 12943 1 12944 1 12945 1 12946 1 12947 1 12948 1 12949 1 12950 1 12951 0 12952 1 12953 0 12954 1 12955 1 12956 1 12957 0 12958 1 12959 0 12960 1 12961 1 12962 1 12963 1 12964 1 12965 1 12966 1 12967 1 12968 1 12969 0 12970 1 12971 0 12972 1 12973 1 12974 1 12975 0 12976 1 12977 0 12978 1 12979 1 12980 1 12981 1 12982 1 12983 1 12984 1 12985 1 12986 1 12987 0 12988 1 12989 0 12990 1 12991 1 12992 1 12993 0 12994 1 12995 0 12996 1 12997 1 12998 1 12999 1 13000 1 13001 1 13002 1 13003 1 13004 1 13005 0 13006 1 13007 0 13008 1 13009 1 13010 1 13011 0 13012 1 13013 0 13014 1 13015 1 13016 1 13017 1 13018 1 13019 1 13020 1 13021 1 13022 1 13023 0 13024 1 13025 0 13026 1 13027 1 13028 1 13029 0 13030 1 13031 0 13032 1 13033 1 13034 1 13035 1 13036 1 13037 1 13038 1 13039 1 13040 1 13041 0 13042 1 13043 0 13044 1 13045 1 13046 1 13047 0 13048 1 13049 0 13050 1 13051 1 13052 1 13053 1 13054 1 13055 1 13056 1 13057 1 13058 1 13059 0 13060 1 13061 0 13062 1 13063 1 13064 1 13065 0 13066 1 13067 0 13068 1 13069 1 13070 1 13071 1 13072 1 13073 1 13074 1 13075 1 13076 1 13077 0 13078 1 13079 0 13080 1 13081 1 13082 1 13083 0 13084 1 13085 0 13086 1 13087 1 13088 1 13089 1 13090 1 13091 1 13092 1 13093 1 13094 1 13095 0 13096 1 13097 0 13098 1 13099 1 13100 1 13101 0 13102 1 13103 0 13104 1 13105 1 13106 1 13107 1 13108 1 13109 1 13110 1 13111 1 13112 1 13113 0 13114 1 13115 0 13116 1 13117 1 13118 1 13119 0 13120 1 13121 0 13122 1 13123 1 13124 1 13125 1 13126 1 13127 1 13128 1 13129 1 13130 1 13131 0 13132 1 13133 0 13134 1 13135 1 13136 1 13137 0 13138 1 13139 0 13140 1 13141 1 13142 1 13143 1 13144 1 13145 1 13146 1 13147 1 13148 1 13149 0 13150 1 13151 0 13152 1 13153 1 13154 1 13155 0 13156 1 13157 0 13158 1 13159 1 13160 1 13161 1 13162 1 13163 1 13164 1 13165 1 13166 1 13167 0 13168 1 13169 0 13170 1 13171 1 13172 1 13173 0 13174 1 13175 0 13176 1 13177 1 13178 1 13179 1 13180 1 13181 1 13182 1 13183 1 13184 1 13185 0 13186 1 13187 0 13188 1 13189 1 13190 1 13191 0 13192 1 13193 0 13194 1 13195 1 13196 1 13197 1 13198 1 13199 1 13200 1 13201 1 13202 1 13203 0 13204 1 13205 0 13206 1 13207 1 13208 1 13209 0 13210 1 13211 0 13212 1 13213 1 13214 1 13215 1 13216 1 13217 1 13218 1 13219 1 13220 1 13221 0 13222 1 13223 0 13224 1 13225 1 13226 1 13227 0 13228 1 13229 0 13230 1 13231 1 13232 1 13233 1 13234 1 13235 1 13236 1 13237 1 13238 1 13239 0 13240 1 13241 0 13242 1 13243 1 13244 1 13245 0 13246 1 13247 0 13248 1 13249 1 13250 1 13251 1 13252 1 13253 1 13254 1 13255 1 13256 1 13257 0 13258 1 13259 0 13260 1 13261 1 13262 1 13263 0 13264 1 13265 0 13266 1 13267 1 13268 1 13269 1 13270 1 13271 1 13272 1 13273 1 13274 1 13275 0 13276 1 13277 0 13278 1 13279 1 13280 1 13281 0 13282 1 13283 0 13284 1 13285 1 13286 1 13287 1 13288 1 13289 1 13290 1 13291 1 13292 1 13293 0 13294 1 13295 0 13296 1 13297 1 13298 1 13299 0 13300 1 13301 0 13302 1 13303 1 13304 1 13305 1 13306 1 13307 1 13308 1 13309 1 13310 1 13311 0 13312 1 13313 0 13314 1 13315 1 13316 1 13317 0 13318 1 13319 0 13320 1 13321 1 13322 1 13323 1 13324 1 13325 1 13326 1 13327 1 13328 1 13329 0 13330 1 13331 0 13332 1 13333 1 13334 1 13335 0 13336 1 13337 0 13338 1 13339 1 13340 1 13341 1 13342 1 13343 1 13344 1 13345 1 13346 1 13347 0 13348 1 13349 0 13350 1 13351 1 13352 1 13353 0 13354 1 13355 0 13356 1 13357 1 13358 1 13359 1 13360 1 13361 1 13362 1 13363 1 13364 1 13365 0 13366 1 13367 0 13368 1 13369 1 13370 1 13371 0 13372 1 13373 0 13374 1 13375 1 13376 1 13377 1 13378 1 13379 1 13380 1 13381 1 13382 1 13383 0 13384 1 13385 0 13386 1 13387 1 13388 1 13389 0 13390 1 13391 0 13392 1 13393 1 13394 1 13395 1 13396 1 13397 1 13398 1 13399 1 13400 1 13401 0 13402 1 13403 0 13404 1 13405 1 13406 1 13407 0 13408 1 13409 0 13410 1 13411 1 13412 1 13413 1 13414 1 13415 1 13416 1 13417 1 13418 1 13419 0 13420 1 13421 0 13422 1 13423 1 13424 1 13425 0 13426 1 13427 0 13428 1 13429 1 13430 1 13431 1 13432 1 13433 1 13434 1 13435 1 13436 1 13437 0 13438 1 13439 0 13440 1 13441 1 13442 1 13443 0 13444 1 13445 0 13446 1 13447 1 13448 1 13449 1 13450 1 13451 1 13452 1 13453 1 13454 1 13455 0 13456 1 13457 0 13458 1 13459 1 13460 1 13461 0 13462 1 13463 0 13464 1 13465 1 13466 1 13467 1 13468 1 13469 1 13470 1 13471 1 13472 1 13473 0 13474 1 13475 0 13476 1 13477 1 13478 1 13479 0 13480 1 13481 0 13482 1 13483 1 13484 1 13485 1 13486 1 13487 1 13488 1 13489 1 13490 1 13491 0 13492 1 13493 0 13494 1 13495 1 13496 1 13497 0 13498 1 13499 0 13500 1 13501 1 13502 1 13503 1 13504 1 13505 1 13506 1 13507 1 13508 1 13509 0 13510 1 13511 0 13512 1 13513 1 13514 1 13515 0 13516 1 13517 0 13518 1 13519 1 13520 1 13521 1 13522 1 13523 1 13524 1 13525 1 13526 1 13527 0 13528 1 13529 0 13530 1 13531 1 13532 1 13533 0 13534 1 13535 0 13536 1 13537 1 13538 1 13539 1 13540 1 13541 1 13542 1 13543 1 13544 1 13545 0 13546 1 13547 0 13548 1 13549 1 13550 1 13551 0 13552 1 13553 0 13554 1 13555 1 13556 1 13557 1 13558 1 13559 1 13560 1 13561 1 13562 1 13563 0 13564 1 13565 0 13566 1 13567 1 13568 1 13569 0 13570 1 13571 0 13572 1 13573 1 13574 1 13575 1 13576 1 13577 1 13578 1 13579 1 13580 1 13581 0 13582 1 13583 0 13584 0 0 0 e 13585 0 0 0 e 13586 0 0 0 e 13587 0 0 0 e 13588 0 0 0 e 13589 0 0 0 e 13590 0 0 0 e 13591 0 0 0 e 13592 0 0 0 e 13593 0 0 0 e 13594 0 0 0 e 13595 0 0 0 e 13596 0 0 0 e 13597 0 0 0 e 13598 0 0 0 e 13599 0 0 0 e 13600 0 0 0 e 13601 0 0 0 e 13602 0 0 0 e 13603 0 0 0 e 13604 0 0 0 e 13605 0 0 0 e 13606 0 0 0 e 13607 0 0 0 e 13608 0 0 0 e 13609 0 0 0 e 13610 0 0 0 e 13611 0 0 0 e 13612 0 0 0 e 13613 0 0 0 e 13614 0 0 0 e 13615 0 0 0 e 13616 0 0 0 e 13617 0 0 0 e 13618 0 0 0 e 13619 0 0 0 e 13620 0 0 0 e 13621 0 0 0 e 13622 0 0 0 e 13623 0 0 0 e 13624 0 0 0 e 13625 0 0 0 e 13626 0 0 0 e 13627 0 0 0 e 13628 0 0 0 e 13629 0 0 0 e 13630 0 0 0 e 13631 0 0 0 e 13632 0 0 0 e 13633 0 0 0 e 13634 0 0 0 e 13635 0 0 0 e 13636 0 0 0 e 13637 0 0 0 e 13638 0 0 0 e 13639 0 0 0 e 13640 0 0 0 e 13641 0 0 0 e 13642 0 0 0 e 13643 0 0 0 e 13644 0 0 0 e 13645 0 0 0 e 13646 0 0 0 e 13647 0 0 0 e 13648 0 0 0 e 13649 0 0 0 e 13650 0 0 0 e 13651 0 0 0 e 13652 0 0 0 e 13653 0 0 0 e 13654 0 0 0 e 13655 0 0 0 e 13656 0 0 1 e 13657 0 0 1 e 13658 0 0 1 e 13659 0 0 1 e 13660 0 0 1 e 13661 0 0 1 e 13662 0 0 1 e 13663 0 0 1 e 13664 0 0 1 e 13665 0 0 1 e 13666 0 0 1 e 13667 0 0 1 e 13668 0 0 1 e 13669 0 0 1 e 13670 0 0 1 e 13671 0 0 1 e 13672 0 0 1 e 13673 0 0 1 e 13674 0 0 1 e 13675 0 0 1 e 13676 0 0 1 e 13677 0 0 1 e 13678 0 0 1 e 13679 0 0 1 e 13680 0 0 1 e 13681 0 0 1 e 13682 0 0 1 e 13683 0 0 1 e 13684 0 0 1 e 13685 0 0 1 e 13686 0 0 1 e 13687 0 0 1 e 13688 0 0 1 e 13689 0 0 1 e 13690 0 0 1 e 13691 0 0 1 e 13692 0 0 1 e 13693 0 0 1 e 13694 0 0 1 e 13695 0 0 1 e 13696 0 0 1 e 13697 0 0 1 e 13698 0 0 1 e 13699 0 0 1 e 13700 0 0 1 e 13701 0 0 1 e 13702 0 0 1 e 13703 0 0 1 e 13704 0 0 1 e 13705 0 0 1 e 13706 0 0 1 e 13707 0 0 1 e 13708 0 0 1 e 13709 0 0 1 e 13710 0 0 1 e 13711 0 0 1 e 13712 0 0 1 e 13713 0 0 1 e 13714 0 0 1 e 13715 0 0 1 e 13716 0 0 1 e 13717 0 0 1 e 13718 0 0 1 e 13719 0 0 1 e 13720 0 0 1 e 13721 0 0 1 e 13722 0 0 1 e 13723 0 0 1 e 13724 0 0 1 e 13725 0 0 1 e 13726 0 0 1 e 13727 0 0 1 e 13728 0 1 0 e 13729 0 1 0 e 13730 0 1 0 e 13731 0 1 0 e 13732 0 1 0 e 13733 0 1 0 e 13734 0 1 0 e 13735 0 1 0 e 13736 0 1 0 e 13737 0 1 0 e 13738 0 1 0 e 13739 0 1 0 e 13740 0 1 0 e 13741 0 1 0 e 13742 0 1 0 e 13743 0 1 0 e 13744 0 1 0 e 13745 0 1 0 e 13746 0 1 0 e 13747 0 1 0 e 13748 0 1 0 e 13749 0 1 0 e 13750 0 1 0 e 13751 0 1 0 e 13752 0 1 0 e 13753 0 1 0 e 13754 0 1 0 e 13755 0 1 0 e 13756 0 1 0 e 13757 0 1 0 e 13758 0 1 0 e 13759 0 1 0 e 13760 0 1 0 e 13761 0 1 0 e 13762 0 1 0 e 13763 0 1 0 e 13764 0 1 0 e 13765 0 1 0 e 13766 0 1 0 e 13767 0 1 0 e 13768 0 1 0 e 13769 0 1 0 e 13770 0 1 0 e 13771 0 1 0 e 13772 0 1 0 e 13773 0 1 0 e 13774 0 1 0 e 13775 0 1 0 e 13776 0 1 0 e 13777 0 1 0 e 13778 0 1 0 e 13779 0 1 0 e 13780 0 1 0 e 13781 0 1 0 e 13782 0 1 0 e 13783 0 1 0 e 13784 0 1 0 e 13785 0 1 0 e 13786 0 1 0 e 13787 0 1 0 e 13788 0 1 0 e 13789 0 1 0 e 13790 0 1 0 e 13791 0 1 0 e 13792 0 1 0 e 13793 0 1 0 e 13794 0 1 0 e 13795 0 1 0 e 13796 0 1 0 e 13797 0 1 0 e 13798 0 1 0 e 13799 0 1 0 e 13800 0 1 1 e 13801 0 1 1 e 13802 0 1 1 e 13803 0 1 1 e 13804 0 1 1 e 13805 0 1 1 e 13806 0 1 1 e 13807 0 1 1 e 13808 0 1 1 e 13809 0 1 1 e 13810 0 1 1 e 13811 0 1 1 e 13812 0 1 1 e 13813 0 1 1 e 13814 0 1 1 e 13815 0 1 1 e 13816 0 1 1 e 13817 0 1 1 e 13818 0 1 1 e 13819 0 1 1 e 13820 0 1 1 e 13821 0 1 1 e 13822 0 1 1 e 13823 0 1 1 e 13824 0 1 1 e 13825 0 1 1 e 13826 0 1 1 e 13827 0 1 1 e 13828 0 1 1 e 13829 0 1 1 e 13830 0 1 1 e 13831 0 1 1 e 13832 0 1 1 e 13833 0 1 1 e 13834 0 1 1 e 13835 0 1 1 e 13836 0 1 1 e 13837 0 1 1 e 13838 0 1 1 e 13839 0 1 1 e 13840 0 1 1 e 13841 0 1 1 e 13842 0 1 1 e 13843 0 1 1 e 13844 0 1 1 e 13845 0 1 1 e 13846 0 1 1 e 13847 0 1 1 e 13848 0 1 1 e 13849 0 1 1 e 13850 0 1 1 e 13851 0 1 1 e 13852 0 1 1 e 13853 0 1 1 e 13854 0 1 1 e 13855 0 1 1 e 13856 0 1 1 e 13857 0 1 1 e 13858 0 1 1 e 13859 0 1 1 e 13860 0 1 1 e 13861 0 1 1 e 13862 0 1 1 e 13863 0 1 1 e 13864 0 1 1 e 13865 0 1 1 e 13866 0 1 1 e 13867 0 1 1 e 13868 0 1 1 e 13869 0 1 1 e 13870 0 1 1 e 13871 0 1 1 e 13872 1 0 0 e 13873 1 0 0 e 13874 1 0 0 e 13875 1 0 0 f 13876 1 0 0 e 13877 1 0 0 e 13878 1 0 0 f 13879 1 0 0 e 13880 1 0 0 f 13881 1 0 0 f 13882 1 0 0 f 13883 1 0 0 e 13884 1 0 0 f 13885 1 0 0 e 13886 1 0 0 e 13887 1 0 0 f 13888 1 0 0 f 13889 1 0 0 f 13890 1 0 0 e 13891 1 0 0 e 13892 1 0 0 e 13893 1 0 0 f 13894 1 0 0 e 13895 1 0 0 e 13896 1 0 0 f 13897 1 0 0 e 13898 1 0 0 f 13899 1 0 0 f 13900 1 0 0 f 13901 1 0 0 e 13902 1 0 0 f 13903 1 0 0 e 13904 1 0 0 f 13905 1 0 0 f 13906 1 0 0 f 13907 1 0 0 f 13908 1 0 0 e 13909 1 0 0 e 13910 1 0 0 e 13911 1 0 0 f 13912 1 0 0 e 13913 1 0 0 f 13914 1 0 0 f 13915 1 0 0 e 13916 1 0 0 f 13917 1 0 0 f 13918 1 0 0 f 13919 1 0 0 f 13920 1 0 0 e 13921 1 0 0 e 13922 1 0 0 e 13923 1 0 0 f 13924 1 0 0 e 13925 1 0 0 f 13926 1 0 0 e 13927 1 0 0 e 13928 1 0 0 e 13929 1 0 0 f 13930 1 0 0 e 13931 1 0 0 e 13932 1 0 0 f 13933 1 0 0 e 13934 1 0 0 f 13935 1 0 0 f 13936 1 0 0 f 13937 1 0 0 e 13938 1 0 0 f 13939 1 0 0 e 13940 1 0 0 e 13941 1 0 0 f 13942 1 0 0 e 13943 1 0 0 e 13944 1 0 1 e 13945 1 0 1 e 13946 1 0 1 e 13947 1 0 1 f 13948 1 0 1 e 13949 1 0 1 e 13950 1 0 1 f 13951 1 0 1 e 13952 1 0 1 f 13953 1 0 1 f 13954 1 0 1 f 13955 1 0 1 f 13956 1 0 1 e 13957 1 0 1 e 13958 1 0 1 f 13959 1 0 1 f 13960 1 0 1 f 13961 1 0 1 e 13962 1 0 1 e 13963 1 0 1 e 13964 1 0 1 e 13965 1 0 1 f 13966 1 0 1 e 13967 1 0 1 f 13968 1 0 1 f 13969 1 0 1 e 13970 1 0 1 f 13971 1 0 1 f 13972 1 0 1 f 13973 1 0 1 e 13974 1 0 1 e 13975 1 0 1 e 13976 1 0 1 f 13977 1 0 1 f 13978 1 0 1 f 13979 1 0 1 e 13980 1 0 1 e 13981 1 0 1 e 13982 1 0 1 e 13983 1 0 1 f 13984 1 0 1 e 13985 1 0 1 e 13986 1 0 1 f 13987 1 0 1 e 13988 1 0 1 f 13989 1 0 1 f 13990 1 0 1 f 13991 1 0 1 f 13992 1 0 1 f 13993 1 0 1 e 13994 1 0 1 e 13995 1 0 1 f 13996 1 0 1 f 13997 1 0 1 e 13998 1 0 1 e 13999 1 0 1 e 14000 1 0 1 e 14001 1 0 1 f 14002 1 0 1 e 14003 1 0 1 e 14004 1 0 1 f 14005 1 0 1 e 14006 1 0 1 f 14007 1 0 1 f 14008 1 0 1 f 14009 1 0 1 f 14010 1 0 1 e 14011 1 0 1 e 14012 1 0 1 f 14013 1 0 1 f 14014 1 0 1 f 14015 1 0 1 f 14016 1 1 0 e 14017 1 1 0 e 14018 1 1 0 e 14019 1 1 0 f 14020 1 1 0 e 14021 1 1 0 f 14022 1 1 0 f 14023 1 1 0 e 14024 1 1 0 f 14025 1 1 0 f 14026 1 1 0 f 14027 1 1 0 e 14028 1 1 0 e 14029 1 1 0 e 14030 1 1 0 f 14031 1 1 0 f 14032 1 1 0 e 14033 1 1 0 f 14034 1 1 0 e 14035 1 1 0 e 14036 1 1 0 e 14037 1 1 0 f 14038 1 1 0 e 14039 1 1 0 f 14040 1 1 0 f 14041 1 1 0 e 14042 1 1 0 f 14043 1 1 0 f 14044 1 1 0 f 14045 1 1 0 f 14046 1 1 0 f 14047 1 1 0 e 14048 1 1 0 e 14049 1 1 0 f 14050 1 1 0 f 14051 1 1 0 f 14052 1 1 0 e 14053 1 1 0 e 14054 1 1 0 e 14055 1 1 0 f 14056 1 1 0 e 14057 1 1 0 e 14058 1 1 0 f 14059 1 1 0 e 14060 1 1 0 f 14061 1 1 0 f 14062 1 1 0 f 14063 1 1 0 e 14064 1 1 0 f 14065 1 1 0 e 14066 1 1 0 f 14067 1 1 0 f 14068 1 1 0 e 14069 1 1 0 f 14070 1 1 0 e 14071 1 1 0 e 14072 1 1 0 e 14073 1 1 0 f 14074 1 1 0 e 14075 1 1 0 e 14076 1 1 0 f 14077 1 1 0 e 14078 1 1 0 f 14079 1 1 0 f 14080 1 1 0 f 14081 1 1 0 f 14082 1 1 0 f 14083 1 1 0 e 14084 1 1 0 e 14085 1 1 0 f 14086 1 1 0 e 14087 1 1 0 f 14088 1 1 1 e 14089 1 1 1 e 14090 1 1 1 e 14091 1 1 1 f 14092 1 1 1 e 14093 1 1 1 f 14094 1 1 1 f 14095 1 1 1 e 14096 1 1 1 f 14097 1 1 1 f 14098 1 1 1 f 14099 1 1 1 f 14100 1 1 1 e 14101 1 1 1 e 14102 1 1 1 e 14103 1 1 1 f 14104 1 1 1 f 14105 1 1 1 e 14106 1 1 1 e 14107 1 1 1 e 14108 1 1 1 e 14109 1 1 1 f 14110 1 1 1 e 14111 1 1 1 e 14112 1 1 1 f 14113 1 1 1 e 14114 1 1 1 f 14115 1 1 1 f 14116 1 1 1 f 14117 1 1 1 f 14118 1 1 1 f 14119 1 1 1 e 14120 1 1 1 f 14121 1 1 1 f 14122 1 1 1 e 14123 1 1 1 e 14124 1 1 1 e 14125 1 1 1 e 14126 1 1 1 e 14127 1 1 1 f 14128 1 1 1 e 14129 1 1 1 f 14130 1 1 1 f 14131 1 1 1 e 14132 1 1 1 f 14133 1 1 1 f 14134 1 1 1 f 14135 1 1 1 e 14136 1 1 1 f 14137 1 1 1 e 14138 1 1 1 f 14139 1 1 1 f 14140 1 1 1 f 14141 1 1 1 f 14142 1 1 1 e 14143 1 1 1 e 14144 1 1 1 e 14145 1 1 1 f 14146 1 1 1 e 14147 1 1 1 e 14148 1 1 1 f 14149 1 1 1 e 14150 1 1 1 f 14151 1 1 1 f 14152 1 1 1 f 14153 1 1 1 e 14154 1 1 1 e 14155 1 1 1 e 14156 1 1 1 e 14157 1 1 1 f 14158 1 1 1 e 14159 1 1 1 e 14160 31 0 0 e 14161 31 0 0 e 14162 31 0 0 e 14163 31 0 0 f 14164 31 0 0 e 14165 31 0 0 1 3 4 6 7 10 11 12 14 16 18 19 20 21 25 26 27 29 14166 31 0 0 f 14167 31 0 0 e 14168 31 0 0 f 14169 31 0 0 f 14170 31 0 0 f 14171 31 0 0 0 1 3 4 5 9 13 14 15 16 18 20 22 24 25 27 30 14172 31 0 0 1 3 4 8 10 11 12 14 15 19 21 22 23 24 25 26 27 30 14173 31 0 0 e 14174 31 0 0 4 5 6 10 12 15 16 17 20 23 25 26 27 29 30 14175 31 0 0 f 14176 31 0 0 0 2 5 11 13 16 17 20 21 23 24 27 28 30 14177 31 0 0 1 2 3 4 6 8 10 12 13 14 16 17 18 19 20 25 26 28 14178 31 0 0 e 14179 31 0 0 e 14180 31 0 0 e 14181 31 0 0 f 14182 31 0 0 e 14183 31 0 0 2 3 6 7 10 11 13 15 20 21 22 25 27 28 29 14184 31 0 0 f 14185 31 0 0 e 14186 31 0 0 f 14187 31 0 0 f 14188 31 0 0 f 14189 31 0 0 0 3 5 6 8 10 11 12 13 15 19 22 23 24 25 27 30 14190 31 0 0 1 5 8 9 11 12 14 15 18 20 22 23 24 25 27 29 30 14191 31 0 0 e 14192 31 0 0 0 1 2 4 5 6 8 9 10 11 12 14 16 19 21 22 24 25 26 28 29 14193 31 0 0 f 14194 31 0 0 0 3 6 7 10 11 14 15 16 17 19 21 22 24 25 28 29 14195 31 0 0 2 4 5 7 9 10 12 14 15 17 18 21 23 24 25 26 27 28 29 14196 31 0 0 e 14197 31 0 0 e 14198 31 0 0 e 14199 31 0 0 f 14200 31 0 0 e 14201 31 0 0 3 6 9 11 12 13 14 16 17 20 23 26 29 30 14202 31 0 0 f 14203 31 0 0 e 14204 31 0 0 f 14205 31 0 0 f 14206 31 0 0 f 14207 31 0 0 2 4 8 9 10 12 17 18 19 20 23 25 27 28 14208 31 0 0 3 5 6 9 11 12 13 15 18 19 21 23 25 28 29 30 14209 31 0 0 e 14210 31 0 0 5 7 12 13 14 15 17 18 21 26 14211 31 0 0 f 14212 31 0 0 0 1 8 9 12 15 16 19 23 25 27 29 14213 31 0 0 1 2 3 4 9 10 11 12 14 16 18 19 20 24 26 27 28 29 30 14214 31 0 0 e 14215 31 0 0 e 14216 31 0 0 e 14217 31 0 0 f 14218 31 0 0 e 14219 31 0 0 1 2 4 5 7 10 11 13 14 15 16 18 19 20 21 24 25 28 14220 31 0 0 f 14221 31 0 0 e 14222 31 0 0 f 14223 31 0 0 f 14224 31 0 0 f 14225 31 0 0 3 4 7 9 10 12 13 15 16 17 19 20 26 27 14226 31 0 0 0 5 6 11 13 16 17 18 20 22 23 25 26 29 14227 31 0 0 e 14228 31 0 0 0 2 4 5 8 9 10 11 13 14 17 19 20 22 23 24 25 28 30 14229 31 0 0 f 14230 31 0 0 0 1 2 4 6 12 13 20 21 23 24 25 28 29 30 14231 31 0 0 0 1 2 4 8 9 11 15 16 22 25 28 14232 31 0 1 e 14233 31 0 1 e 14234 31 0 1 e 14235 31 0 1 f 14236 31 0 1 e 14237 31 0 1 0 1 4 7 12 13 16 17 18 21 23 25 27 28 14238 31 0 1 f 14239 31 0 1 e 14240 31 0 1 f 14241 31 0 1 f 14242 31 0 1 f 14243 31 0 1 3 5 10 13 14 15 16 17 24 29 30 14244 31 0 1 0 4 6 7 10 11 14 17 18 22 23 24 28 14245 31 0 1 e 14246 31 0 1 1 3 5 6 9 13 15 16 20 21 24 25 26 28 29 14247 31 0 1 f 14248 31 0 1 1 2 5 6 7 8 9 10 13 16 17 18 22 23 25 26 29 30 14249 31 0 1 0 2 3 4 5 6 8 9 11 15 16 20 21 22 23 25 27 30 14250 31 0 1 e 14251 31 0 1 e 14252 31 0 1 e 14253 31 0 1 f 14254 31 0 1 e 14255 31 0 1 0 1 2 3 6 7 9 13 14 16 17 18 19 20 21 22 24 25 26 27 28 14256 31 0 1 f 14257 31 0 1 e 14258 31 0 1 f 14259 31 0 1 f 14260 31 0 1 f 14261 31 0 1 0 1 3 5 6 8 9 10 13 14 15 17 20 27 14262 31 0 1 2 4 11 12 14 16 17 18 22 23 25 26 30 14263 31 0 1 e 14264 31 0 1 1 2 3 4 6 8 10 12 16 17 21 22 25 27 29 30 14265 31 0 1 f 14266 31 0 1 0 1 4 5 9 11 12 18 19 20 22 23 24 25 28 29 14267 31 0 1 0 1 2 6 7 8 10 11 16 19 21 27 14268 31 0 1 e 14269 31 0 1 e 14270 31 0 1 e 14271 31 0 1 f 14272 31 0 1 e 14273 31 0 1 0 2 4 6 12 13 14 16 19 23 24 27 28 29 30 14274 31 0 1 f 14275 31 0 1 e 14276 31 0 1 f 14277 31 0 1 f 14278 31 0 1 f 14279 31 0 1 0 1 2 3 4 6 8 10 13 16 18 20 22 23 24 26 27 28 29 30 14280 31 0 1 0 1 2 3 6 7 11 14 15 16 18 27 29 30 14281 31 0 1 e 14282 31 0 1 1 3 5 6 7 8 9 11 13 14 16 20 21 23 24 25 27 30 14283 31 0 1 f 14284 31 0 1 0 1 3 5 8 10 11 12 17 18 21 22 24 25 26 27 29 14285 31 0 1 1 2 3 5 8 9 12 13 14 16 17 23 24 27 28 14286 31 0 1 e 14287 31 0 1 e 14288 31 0 1 e 14289 31 0 1 f 14290 31 0 1 e 14291 31 0 1 2 4 5 6 9 11 12 14 17 18 19 20 21 23 24 25 27 28 29 30 14292 31 0 1 f 14293 31 0 1 e 14294 31 0 1 f 14295 31 0 1 f 14296 31 0 1 f 14297 31 0 1 0 2 4 5 6 9 10 13 15 17 19 20 23 25 26 28 29 14298 31 0 1 0 1 3 4 5 6 9 10 13 14 15 17 20 21 27 30 14299 31 0 1 e 14300 31 0 1 0 3 6 9 11 12 14 15 16 19 23 24 25 27 30 14301 31 0 1 f 14302 31 0 1 1 2 4 8 9 10 11 12 15 17 21 22 23 24 25 27 28 29 14303 31 0 1 5 6 7 9 10 12 14 15 16 17 19 20 22 23 27 29 14304 31 1 0 e 14305 31 1 0 e 14306 31 1 0 e 14307 31 1 0 f 14308 31 1 0 e 14309 31 1 0 0 2 4 5 6 7 9 10 17 20 21 22 23 24 27 28 14310 31 1 0 f 14311 31 1 0 e 14312 31 1 0 f 14313 31 1 0 f 14314 31 1 0 f 14315 31 1 0 0 1 3 4 6 7 9 10 11 18 19 21 22 24 27 29 14316 31 1 0 0 2 3 5 6 7 9 10 12 13 14 17 22 24 26 27 29 30 14317 31 1 0 e 14318 31 1 0 2 5 11 15 16 19 20 22 28 29 14319 31 1 0 f 14320 31 1 0 2 3 4 5 8 11 12 13 17 18 23 24 25 26 27 29 14321 31 1 0 0 4 5 6 8 10 11 12 14 16 17 22 23 25 26 29 14322 31 1 0 e 14323 31 1 0 e 14324 31 1 0 e 14325 31 1 0 f 14326 31 1 0 e 14327 31 1 0 0 2 5 8 13 15 16 21 24 25 30 14328 31 1 0 f 14329 31 1 0 e 14330 31 1 0 f 14331 31 1 0 f 14332 31 1 0 f 14333 31 1 0 1 3 4 6 8 10 12 14 15 20 21 22 24 25 26 28 30 14334 31 1 0 1 3 4 5 6 8 13 16 18 21 24 25 27 28 30 14335 31 1 0 e 14336 31 1 0 7 8 9 13 15 16 17 22 23 24 25 26 27 28 30 14337 31 1 0 f 14338 31 1 0 0 1 5 8 10 11 13 16 18 20 21 22 24 25 27 29 30 14339 31 1 0 1 3 7 8 10 11 12 17 18 20 21 24 26 27 28 29 30 14340 31 1 0 e 14341 31 1 0 e 14342 31 1 0 e 14343 31 1 0 f 14344 31 1 0 e 14345 31 1 0 1 3 5 8 9 10 11 12 15 16 18 20 21 22 24 25 26 27 28 29 30 14346 31 1 0 f 14347 31 1 0 e 14348 31 1 0 f 14349 31 1 0 f 14350 31 1 0 f 14351 31 1 0 0 3 4 7 8 9 10 11 12 14 15 18 21 24 27 28 30 14352 31 1 0 0 1 3 12 13 15 19 20 22 24 26 27 29 14353 31 1 0 e 14354 31 1 0 1 2 7 8 9 11 12 17 18 23 27 28 14355 31 1 0 f 14356 31 1 0 0 6 13 15 18 20 21 22 26 28 30 14357 31 1 0 0 1 2 6 8 10 11 12 13 16 17 23 26 27 14358 31 1 0 e 14359 31 1 0 e 14360 31 1 0 e 14361 31 1 0 f 14362 31 1 0 e 14363 31 1 0 3 5 6 7 8 10 11 12 13 16 17 18 21 25 29 30 14364 31 1 0 f 14365 31 1 0 e 14366 31 1 0 f 14367 31 1 0 f 14368 31 1 0 f 14369 31 1 0 0 3 4 7 8 9 10 11 12 14 17 18 21 22 23 25 27 14370 31 1 0 1 2 5 6 8 10 11 14 16 17 24 26 27 28 14371 31 1 0 e 14372 31 1 0 1 2 5 7 8 9 10 11 12 16 18 23 25 29 14373 31 1 0 f 14374 31 1 0 0 1 7 10 13 14 15 16 17 18 22 24 26 27 28 14375 31 1 0 0 2 3 8 9 12 14 15 17 21 23 25 28 29 30 14376 31 1 1 e 14377 31 1 1 e 14378 31 1 1 e 14379 31 1 1 f 14380 31 1 1 e 14381 31 1 1 2 4 6 9 11 12 13 14 16 17 18 21 22 23 27 30 14382 31 1 1 f 14383 31 1 1 e 14384 31 1 1 f 14385 31 1 1 f 14386 31 1 1 f 14387 31 1 1 0 1 2 7 8 9 12 13 16 17 21 25 26 27 28 30 14388 31 1 1 0 1 3 5 11 12 19 23 24 25 27 28 29 14389 31 1 1 e 14390 31 1 1 0 1 2 3 5 6 10 16 17 18 19 23 27 14391 31 1 1 f 14392 31 1 1 0 1 3 6 7 9 10 11 15 17 18 25 26 28 29 30 14393 31 1 1 0 1 3 5 7 10 11 12 13 22 23 24 25 28 14394 31 1 1 e 14395 31 1 1 e 14396 31 1 1 e 14397 31 1 1 f 14398 31 1 1 e 14399 31 1 1 0 2 4 5 6 7 8 11 15 16 18 20 23 25 27 28 29 14400 31 1 1 f 14401 31 1 1 e 14402 31 1 1 f 14403 31 1 1 f 14404 31 1 1 f 14405 31 1 1 3 4 6 7 12 13 17 19 20 21 22 23 25 26 28 29 30 14406 31 1 1 1 4 5 7 8 9 10 13 14 15 17 19 20 22 24 25 28 14407 31 1 1 e 14408 31 1 1 0 2 5 7 8 10 11 12 13 14 15 16 19 21 22 23 24 25 28 30 14409 31 1 1 f 14410 31 1 1 0 1 2 3 4 7 9 10 13 14 16 19 20 22 24 25 26 30 14411 31 1 1 1 2 4 6 7 10 11 12 13 14 18 20 21 22 24 25 14412 31 1 1 e 14413 31 1 1 e 14414 31 1 1 e 14415 31 1 1 f 14416 31 1 1 e 14417 31 1 1 2 3 8 9 12 16 18 19 21 22 23 24 25 28 29 14418 31 1 1 f 14419 31 1 1 e 14420 31 1 1 f 14421 31 1 1 f 14422 31 1 1 f 14423 31 1 1 4 5 6 9 10 11 12 13 15 16 17 18 19 21 22 24 30 14424 31 1 1 0 5 6 9 14 16 19 20 23 25 27 29 14425 31 1 1 e 14426 31 1 1 2 3 5 6 7 11 12 17 18 20 22 23 24 25 27 29 14427 31 1 1 f 14428 31 1 1 0 2 4 5 7 8 9 10 11 12 16 20 21 22 23 24 25 26 28 29 30 14429 31 1 1 0 2 4 7 10 12 17 20 24 14430 31 1 1 e 14431 31 1 1 e 14432 31 1 1 e 14433 31 1 1 f 14434 31 1 1 e 14435 31 1 1 0 1 2 4 6 8 9 12 14 16 18 21 22 23 24 25 29 30 14436 31 1 1 f 14437 31 1 1 e 14438 31 1 1 f 14439 31 1 1 f 14440 31 1 1 f 14441 31 1 1 2 7 10 17 20 23 26 27 29 14442 31 1 1 0 8 9 12 13 16 18 21 22 23 25 26 27 29 14443 31 1 1 e 14444 31 1 1 1 2 6 7 8 9 10 12 13 14 16 17 18 21 22 25 29 30 14445 31 1 1 f 14446 31 1 1 0 1 5 8 9 11 12 13 14 15 16 17 18 19 20 21 22 25 14447 31 1 1 2 4 6 9 14 17 20 23 24 28 29 14448 32 0 0 e 14449 32 0 0 e 14450 32 0 0 e 14451 32 0 0 f 14452 32 0 0 e 14453 32 0 0 0 5 7 8 9 13 15 16 17 20 21 23 24 25 27 14454 32 0 0 f 14455 32 0 0 e 14456 32 0 0 f 14457 32 0 0 f 14458 32 0 0 f 14459 32 0 0 0 1 2 6 10 11 12 13 14 15 16 19 21 23 25 26 27 28 31 14460 32 0 0 2 3 4 5 7 9 10 12 15 16 18 19 22 23 24 25 26 27 30 31 14461 32 0 0 e 14462 32 0 0 0 1 4 5 7 8 11 12 14 16 20 22 23 25 26 27 28 30 31 14463 32 0 0 f 14464 32 0 0 3 4 5 6 7 8 11 12 15 16 17 18 21 23 24 25 26 27 31 14465 32 0 0 0 1 2 3 5 8 9 11 15 21 24 25 26 30 14466 32 0 0 e 14467 32 0 0 e 14468 32 0 0 e 14469 32 0 0 f 14470 32 0 0 e 14471 32 0 0 1 2 3 11 12 13 14 18 19 20 21 22 23 24 25 26 29 30 31 14472 32 0 0 f 14473 32 0 0 e 14474 32 0 0 f 14475 32 0 0 f 14476 32 0 0 f 14477 32 0 0 0 1 5 6 7 9 12 15 18 21 24 26 30 31 14478 32 0 0 5 8 9 10 11 12 14 18 19 22 23 25 27 30 14479 32 0 0 e 14480 32 0 0 0 1 2 3 4 7 8 10 11 15 16 18 20 21 26 27 28 29 14481 32 0 0 f 14482 32 0 0 0 3 5 6 11 12 13 14 15 23 24 27 29 31 14483 32 0 0 0 1 2 4 6 7 8 10 11 14 15 16 20 21 22 23 29 14484 32 0 0 e 14485 32 0 0 e 14486 32 0 0 e 14487 32 0 0 f 14488 32 0 0 e 14489 32 0 0 2 4 5 7 9 10 11 13 14 16 17 18 19 20 21 23 25 28 29 30 14490 32 0 0 f 14491 32 0 0 e 14492 32 0 0 f 14493 32 0 0 f 14494 32 0 0 f 14495 32 0 0 3 5 6 8 13 14 16 18 19 22 26 29 14496 32 0 0 1 4 6 8 10 11 16 18 20 21 22 24 25 29 30 31 14497 32 0 0 e 14498 32 0 0 0 3 9 11 14 16 17 18 20 22 23 26 27 29 14499 32 0 0 f 14500 32 0 0 0 1 2 4 6 9 11 17 18 19 22 23 24 25 27 29 14501 32 0 0 0 2 3 5 7 8 12 13 15 16 18 20 21 22 27 29 14502 32 0 0 e 14503 32 0 0 e 14504 32 0 0 e 14505 32 0 0 f 14506 32 0 0 e 14507 32 0 0 0 2 7 8 9 13 16 19 23 24 25 26 30 14508 32 0 0 f 14509 32 0 0 e 14510 32 0 0 f 14511 32 0 0 f 14512 32 0 0 f 14513 32 0 0 0 1 2 3 4 6 7 8 12 13 14 15 18 20 21 23 24 25 29 30 31 14514 32 0 0 0 1 2 3 4 5 7 9 15 17 20 22 23 26 27 29 30 31 14515 32 0 0 e 14516 32 0 0 1 2 4 7 8 9 15 18 20 21 28 29 14517 32 0 0 f 14518 32 0 0 0 2 9 10 11 15 16 19 23 24 27 29 14519 32 0 0 0 2 4 6 8 9 10 14 15 16 18 20 21 27 14520 32 0 1 e 14521 32 0 1 e 14522 32 0 1 e 14523 32 0 1 f 14524 32 0 1 e 14525 32 0 1 0 1 2 5 6 8 9 11 14 16 17 18 20 21 22 27 28 30 14526 32 0 1 f 14527 32 0 1 e 14528 32 0 1 f 14529 32 0 1 f 14530 32 0 1 f 14531 32 0 1 1 2 3 5 6 11 12 14 15 16 17 19 20 22 26 28 29 30 14532 32 0 1 0 1 2 5 7 9 10 12 13 15 18 20 21 24 27 30 14533 32 0 1 e 14534 32 0 1 0 1 4 5 8 10 11 12 14 16 18 22 24 26 29 14535 32 0 1 f 14536 32 0 1 0 1 2 3 4 7 8 11 12 16 17 18 19 21 23 24 29 30 14537 32 0 1 0 1 3 5 9 10 11 15 18 25 26 27 29 30 14538 32 0 1 e 14539 32 0 1 e 14540 32 0 1 e 14541 32 0 1 f 14542 32 0 1 e 14543 32 0 1 0 2 4 11 12 13 14 15 17 20 21 22 24 31 14544 32 0 1 f 14545 32 0 1 e 14546 32 0 1 f 14547 32 0 1 f 14548 32 0 1 f 14549 32 0 1 4 5 6 9 11 12 13 14 15 16 19 24 27 28 29 30 14550 32 0 1 2 4 6 15 16 17 18 20 21 23 25 26 28 29 14551 32 0 1 e 14552 32 0 1 0 2 3 4 5 12 13 18 23 25 26 28 30 31 14553 32 0 1 f 14554 32 0 1 0 1 2 4 5 6 7 12 13 14 18 20 23 27 28 29 30 14555 32 0 1 0 2 5 7 8 9 11 12 13 18 20 21 23 26 27 29 14556 32 0 1 e 14557 32 0 1 e 14558 32 0 1 e 14559 32 0 1 f 14560 32 0 1 e 14561 32 0 1 2 3 6 9 12 13 18 19 21 22 25 27 28 29 31 14562 32 0 1 f 14563 32 0 1 e 14564 32 0 1 f 14565 32 0 1 f 14566 32 0 1 f 14567 32 0 1 1 2 3 6 10 12 14 17 19 20 25 27 28 30 14568 32 0 1 1 2 3 5 7 9 15 16 17 19 20 21 22 28 14569 32 0 1 e 14570 32 0 1 0 2 6 7 10 17 23 25 28 29 31 14571 32 0 1 f 14572 32 0 1 3 4 7 11 12 13 17 19 20 21 22 24 26 27 28 30 14573 32 0 1 0 1 2 7 8 9 10 11 12 16 17 19 20 29 30 14574 32 0 1 e 14575 32 0 1 e 14576 32 0 1 e 14577 32 0 1 f 14578 32 0 1 e 14579 32 0 1 0 1 2 6 9 11 12 15 18 19 20 24 25 26 28 31 14580 32 0 1 f 14581 32 0 1 e 14582 32 0 1 f 14583 32 0 1 f 14584 32 0 1 f 14585 32 0 1 2 5 6 7 8 9 10 11 13 14 15 17 18 23 24 27 28 29 31 14586 32 0 1 0 9 10 11 12 13 18 19 22 25 28 29 31 14587 32 0 1 e 14588 32 0 1 1 3 4 6 9 10 12 14 16 17 18 20 21 22 24 25 26 28 29 31 14589 32 0 1 f 14590 32 0 1 0 2 3 4 5 6 8 9 10 13 14 16 17 19 25 26 27 28 29 30 31 14591 32 0 1 1 6 9 10 11 12 15 17 19 20 21 22 24 25 27 28 14592 32 1 0 e 14593 32 1 0 e 14594 32 1 0 e 14595 32 1 0 f 14596 32 1 0 e 14597 32 1 0 0 1 2 5 6 7 8 10 11 12 16 17 18 19 20 21 24 28 29 30 31 14598 32 1 0 f 14599 32 1 0 e 14600 32 1 0 f 14601 32 1 0 f 14602 32 1 0 f 14603 32 1 0 0 5 7 10 14 17 19 20 21 25 26 27 29 30 14604 32 1 0 1 4 5 8 10 13 14 15 18 22 24 25 30 31 14605 32 1 0 e 14606 32 1 0 4 5 6 7 8 9 15 16 17 21 22 24 26 30 31 14607 32 1 0 f 14608 32 1 0 0 2 3 4 5 6 7 11 12 13 14 15 16 18 19 21 23 24 25 14609 32 1 0 2 4 5 8 9 11 12 16 19 21 22 24 26 29 31 14610 32 1 0 e 14611 32 1 0 e 14612 32 1 0 e 14613 32 1 0 f 14614 32 1 0 e 14615 32 1 0 5 6 8 10 11 12 16 17 24 29 14616 32 1 0 f 14617 32 1 0 e 14618 32 1 0 f 14619 32 1 0 f 14620 32 1 0 f 14621 32 1 0 1 2 3 4 6 7 8 9 13 14 18 19 20 23 25 26 27 28 14622 32 1 0 0 1 2 3 5 8 9 10 12 13 14 17 20 22 25 27 14623 32 1 0 e 14624 32 1 0 2 3 9 10 12 13 15 17 22 28 29 30 14625 32 1 0 f 14626 32 1 0 0 1 7 10 12 18 20 21 22 23 27 14627 32 1 0 0 4 5 6 9 10 13 14 15 17 20 23 24 25 26 27 28 31 14628 32 1 0 e 14629 32 1 0 e 14630 32 1 0 e 14631 32 1 0 f 14632 32 1 0 e 14633 32 1 0 0 1 3 4 7 9 11 12 13 16 17 18 20 21 23 24 26 27 28 29 30 14634 32 1 0 f 14635 32 1 0 e 14636 32 1 0 f 14637 32 1 0 f 14638 32 1 0 f 14639 32 1 0 0 1 9 12 13 14 17 18 20 24 25 27 28 29 31 14640 32 1 0 0 4 5 6 9 10 12 13 14 16 17 18 21 22 24 26 27 30 14641 32 1 0 e 14642 32 1 0 0 1 3 4 11 15 16 17 20 23 24 26 27 28 29 14643 32 1 0 f 14644 32 1 0 0 1 4 6 8 11 14 18 20 23 24 26 29 30 31 14645 32 1 0 0 3 4 6 11 12 16 18 19 22 24 26 27 29 30 14646 32 1 0 e 14647 32 1 0 e 14648 32 1 0 e 14649 32 1 0 f 14650 32 1 0 e 14651 32 1 0 0 2 3 4 5 9 11 13 16 17 21 22 23 26 27 29 14652 32 1 0 f 14653 32 1 0 e 14654 32 1 0 f 14655 32 1 0 f 14656 32 1 0 f 14657 32 1 0 2 8 9 13 16 17 18 19 20 21 22 25 28 30 14658 32 1 0 0 1 2 3 4 7 8 9 12 13 14 17 20 23 25 30 31 14659 32 1 0 e 14660 32 1 0 0 1 2 3 4 6 7 12 14 18 20 24 25 26 28 29 31 14661 32 1 0 f 14662 32 1 0 2 4 5 9 14 15 20 23 26 28 14663 32 1 0 2 9 10 11 14 15 16 18 19 20 23 24 27 28 14664 32 1 1 e 14665 32 1 1 e 14666 32 1 1 e 14667 32 1 1 f 14668 32 1 1 e 14669 32 1 1 0 3 4 5 8 12 14 15 17 21 26 28 31 14670 32 1 1 f 14671 32 1 1 e 14672 32 1 1 f 14673 32 1 1 f 14674 32 1 1 f 14675 32 1 1 1 2 4 7 9 12 14 18 19 21 22 23 25 29 31 14676 32 1 1 0 1 2 3 6 7 9 10 13 14 19 22 23 28 29 31 14677 32 1 1 e 14678 32 1 1 0 3 4 6 7 9 12 13 14 19 22 23 31 14679 32 1 1 f 14680 32 1 1 0 1 2 4 5 9 10 12 13 16 17 20 24 26 27 28 30 31 14681 32 1 1 0 1 3 4 5 9 12 13 15 16 17 19 20 23 24 26 27 29 30 14682 32 1 1 e 14683 32 1 1 e 14684 32 1 1 e 14685 32 1 1 f 14686 32 1 1 e 14687 32 1 1 0 1 4 5 6 8 13 15 16 18 19 20 21 23 26 27 28 29 31 14688 32 1 1 f 14689 32 1 1 e 14690 32 1 1 f 14691 32 1 1 f 14692 32 1 1 f 14693 32 1 1 0 1 5 6 10 13 15 18 31 14694 32 1 1 3 6 7 9 11 12 13 14 16 18 20 22 24 25 26 27 29 30 31 14695 32 1 1 e 14696 32 1 1 3 4 6 9 10 11 12 13 15 17 18 19 21 23 24 25 26 28 29 30 14697 32 1 1 f 14698 32 1 1 4 11 14 17 19 21 22 24 25 27 28 14699 32 1 1 0 1 3 4 5 11 12 13 16 17 21 24 25 26 30 14700 32 1 1 e 14701 32 1 1 e 14702 32 1 1 e 14703 32 1 1 f 14704 32 1 1 e 14705 32 1 1 0 3 5 7 13 14 17 19 20 21 23 24 29 30 14706 32 1 1 f 14707 32 1 1 e 14708 32 1 1 f 14709 32 1 1 f 14710 32 1 1 f 14711 32 1 1 5 9 10 11 14 15 18 26 27 29 31 14712 32 1 1 1 3 4 7 9 10 11 13 14 15 17 19 20 21 27 29 31 14713 32 1 1 e 14714 32 1 1 0 1 3 5 6 8 13 16 17 19 23 24 25 27 28 29 30 31 14715 32 1 1 f 14716 32 1 1 0 3 4 7 8 9 10 11 12 16 17 23 25 26 27 28 29 30 14717 32 1 1 0 3 5 6 8 9 12 13 14 15 19 20 21 22 23 25 26 29 30 14718 32 1 1 e 14719 32 1 1 e 14720 32 1 1 e 14721 32 1 1 f 14722 32 1 1 e 14723 32 1 1 0 6 7 8 9 11 12 14 16 18 21 23 26 27 29 14724 32 1 1 f 14725 32 1 1 e 14726 32 1 1 f 14727 32 1 1 f 14728 32 1 1 f 14729 32 1 1 0 1 2 9 15 16 19 21 22 23 25 26 27 30 14730 32 1 1 1 2 5 6 7 8 9 10 11 14 15 16 18 21 22 23 25 26 27 28 29 14731 32 1 1 e 14732 32 1 1 2 3 7 10 11 12 13 14 15 17 19 22 23 24 25 26 27 31 14733 32 1 1 f 14734 32 1 1 0 1 2 3 6 7 8 9 10 11 12 14 17 19 22 25 27 30 31 14735 32 1 1 2 3 4 5 6 8 9 11 13 16 17 21 23 24 25 27 30 31 14736 33 0 0 e 14737 33 0 0 e 14738 33 0 0 e 14739 33 0 0 f 14740 33 0 0 e 14741 33 0 0 0 1 2 4 5 6 7 10 11 19 21 22 24 27 30 14742 33 0 0 f 14743 33 0 0 e 14744 33 0 0 f 14745 33 0 0 f 14746 33 0 0 f 14747 33 0 0 1 4 6 7 11 12 16 18 19 20 21 22 25 26 29 30 31 32 14748 33 0 0 0 4 8 15 18 20 21 23 24 25 27 28 31 14749 33 0 0 e 14750 33 0 0 0 1 5 7 11 12 13 14 15 16 18 19 20 21 23 24 28 30 31 14751 33 0 0 f 14752 33 0 0 2 7 8 10 11 13 16 20 21 23 25 26 27 30 31 32 14753 33 0 0 0 1 6 7 8 9 10 11 16 17 19 24 25 26 28 31 14754 33 0 0 e 14755 33 0 0 e 14756 33 0 0 e 14757 33 0 0 f 14758 33 0 0 e 14759 33 0 0 1 2 3 4 5 6 7 8 10 12 14 15 16 17 19 20 21 22 23 26 27 28 29 32 14760 33 0 0 f 14761 33 0 0 e 14762 33 0 0 f 14763 33 0 0 f 14764 33 0 0 f 14765 33 0 0 1 2 4 6 11 14 15 16 17 18 20 21 22 24 25 26 27 31 14766 33 0 0 2 3 10 11 12 13 15 16 17 19 20 21 22 23 24 27 28 32 14767 33 0 0 e 14768 33 0 0 1 2 6 9 11 14 16 23 24 26 29 30 31 32 14769 33 0 0 f 14770 33 0 0 0 5 6 7 9 15 16 17 19 20 21 22 24 25 26 27 28 30 31 32 14771 33 0 0 0 2 3 5 6 7 11 12 16 19 21 27 28 30 31 32 14772 33 0 0 e 14773 33 0 0 e 14774 33 0 0 e 14775 33 0 0 f 14776 33 0 0 e 14777 33 0 0 0 1 2 3 4 5 6 9 10 11 14 15 16 18 19 20 27 28 31 32 14778 33 0 0 f 14779 33 0 0 e 14780 33 0 0 f 14781 33 0 0 f 14782 33 0 0 f 14783 33 0 0 2 5 6 8 9 12 22 23 24 25 26 27 30 31 32 14784 33 0 0 0 3 5 6 10 12 14 15 19 22 23 24 25 28 29 14785 33 0 0 e 14786 33 0 0 0 3 4 5 6 8 10 11 13 18 19 21 22 23 24 26 27 28 31 14787 33 0 0 f 14788 33 0 0 0 5 7 8 11 12 13 17 20 23 26 30 32 14789 33 0 0 1 4 6 8 9 10 12 14 15 16 18 21 23 25 27 28 30 14790 33 0 0 e 14791 33 0 0 e 14792 33 0 0 e 14793 33 0 0 f 14794 33 0 0 e 14795 33 0 0 1 3 4 6 11 17 18 19 21 24 29 30 31 14796 33 0 0 f 14797 33 0 0 e 14798 33 0 0 f 14799 33 0 0 f 14800 33 0 0 f 14801 33 0 0 0 1 4 5 6 7 9 11 13 14 15 16 17 23 24 25 28 30 31 14802 33 0 0 3 7 9 12 14 15 19 20 22 23 24 26 30 32 14803 33 0 0 e 14804 33 0 0 2 4 5 6 7 10 13 14 15 17 18 19 20 21 22 23 27 29 30 14805 33 0 0 f 14806 33 0 0 0 1 2 3 4 5 6 16 19 20 28 29 31 32 14807 33 0 0 2 6 7 8 9 11 13 14 15 17 18 20 21 22 28 29 14808 33 0 1 e 14809 33 0 1 e 14810 33 0 1 e 14811 33 0 1 f 14812 33 0 1 e 14813 33 0 1 2 3 5 10 14 22 24 27 28 32 14814 33 0 1 f 14815 33 0 1 e 14816 33 0 1 f 14817 33 0 1 f 14818 33 0 1 f 14819 33 0 1 1 6 7 11 12 13 14 16 20 21 25 26 27 30 14820 33 0 1 0 1 2 5 6 7 10 11 13 14 15 18 20 21 22 23 24 26 14821 33 0 1 e 14822 33 0 1 1 2 3 7 14 15 16 19 20 22 26 27 28 29 30 31 32 14823 33 0 1 f 14824 33 0 1 0 1 8 9 10 11 14 15 16 17 18 20 24 26 27 29 30 31 32 14825 33 0 1 0 4 5 6 9 10 11 12 13 14 15 18 19 20 22 23 25 14826 33 0 1 e 14827 33 0 1 e 14828 33 0 1 e 14829 33 0 1 f 14830 33 0 1 e 14831 33 0 1 1 4 5 6 7 8 9 10 12 13 14 15 16 17 18 19 21 24 26 28 30 32 14832 33 0 1 f 14833 33 0 1 e 14834 33 0 1 f 14835 33 0 1 f 14836 33 0 1 f 14837 33 0 1 0 2 3 7 9 10 11 12 13 14 15 17 20 32 14838 33 0 1 1 3 6 8 9 11 12 19 20 21 25 27 29 30 32 14839 33 0 1 e 14840 33 0 1 0 5 9 10 14 15 16 17 19 21 23 25 27 28 29 30 31 32 14841 33 0 1 f 14842 33 0 1 0 1 3 6 11 14 16 17 18 21 22 24 25 26 27 29 30 32 14843 33 0 1 0 2 6 7 8 9 11 12 13 14 15 20 23 25 28 29 30 31 32 14844 33 0 1 e 14845 33 0 1 e 14846 33 0 1 e 14847 33 0 1 f 14848 33 0 1 e 14849 33 0 1 0 5 6 9 11 12 15 17 18 19 20 21 23 24 25 26 27 28 30 31 32 14850 33 0 1 f 14851 33 0 1 e 14852 33 0 1 f 14853 33 0 1 f 14854 33 0 1 f 14855 33 0 1 0 1 2 3 4 7 10 11 12 13 16 20 27 28 29 31 32 14856 33 0 1 1 2 3 5 8 9 13 17 19 21 22 24 25 27 30 31 14857 33 0 1 e 14858 33 0 1 0 2 3 4 6 7 10 16 21 23 27 29 14859 33 0 1 f 14860 33 0 1 5 6 8 10 12 15 16 17 19 23 28 29 30 31 14861 33 0 1 5 7 8 9 12 14 15 16 17 18 19 20 21 24 25 26 27 28 29 30 14862 33 0 1 e 14863 33 0 1 e 14864 33 0 1 e 14865 33 0 1 f 14866 33 0 1 e 14867 33 0 1 2 4 5 9 11 12 19 20 21 22 23 24 25 26 27 28 32 14868 33 0 1 f 14869 33 0 1 e 14870 33 0 1 f 14871 33 0 1 f 14872 33 0 1 f 14873 33 0 1 1 3 5 7 9 10 11 14 15 16 17 18 20 21 23 24 25 29 30 14874 33 0 1 2 4 5 6 7 9 11 12 15 17 18 24 27 29 31 14875 33 0 1 e 14876 33 0 1 0 3 5 9 10 13 14 17 18 19 21 22 23 25 28 30 31 32 14877 33 0 1 f 14878 33 0 1 1 4 7 9 12 13 14 15 16 17 18 19 20 21 24 25 28 30 31 14879 33 0 1 3 4 7 8 11 15 18 19 22 24 26 29 14880 33 1 0 e 14881 33 1 0 e 14882 33 1 0 e 14883 33 1 0 f 14884 33 1 0 e 14885 33 1 0 0 2 3 5 6 7 12 14 16 17 18 20 21 22 23 24 27 28 29 32 14886 33 1 0 f 14887 33 1 0 e 14888 33 1 0 f 14889 33 1 0 f 14890 33 1 0 f 14891 33 1 0 3 7 8 9 10 11 13 14 16 18 19 21 22 25 27 28 29 30 14892 33 1 0 3 6 8 9 10 11 12 13 14 15 16 19 21 23 24 26 27 30 31 14893 33 1 0 e 14894 33 1 0 1 2 3 6 8 9 10 11 13 14 15 17 19 22 25 26 28 30 14895 33 1 0 f 14896 33 1 0 0 1 2 4 5 8 10 11 13 21 22 23 24 26 29 32 14897 33 1 0 2 4 7 15 16 17 18 19 20 21 22 23 24 25 27 30 31 32 14898 33 1 0 e 14899 33 1 0 e 14900 33 1 0 e 14901 33 1 0 f 14902 33 1 0 e 14903 33 1 0 1 2 3 5 6 8 10 12 13 15 16 19 24 26 28 14904 33 1 0 f 14905 33 1 0 e 14906 33 1 0 f 14907 33 1 0 f 14908 33 1 0 f 14909 33 1 0 0 2 3 6 11 12 13 14 19 20 21 22 25 27 29 32 14910 33 1 0 1 4 5 6 7 8 9 10 11 13 15 18 22 25 29 32 14911 33 1 0 e 14912 33 1 0 1 4 10 12 13 14 16 17 20 21 22 25 26 27 30 31 14913 33 1 0 f 14914 33 1 0 1 2 3 6 12 15 16 17 18 19 22 24 25 26 28 31 14915 33 1 0 1 2 3 4 7 9 10 11 13 14 16 17 18 19 20 22 23 24 28 30 14916 33 1 0 e 14917 33 1 0 e 14918 33 1 0 e 14919 33 1 0 f 14920 33 1 0 e 14921 33 1 0 0 2 3 4 5 7 8 11 14 17 18 20 21 23 25 26 27 28 29 30 31 14922 33 1 0 f 14923 33 1 0 e 14924 33 1 0 f 14925 33 1 0 f 14926 33 1 0 f 14927 33 1 0 0 1 2 3 5 6 7 8 9 12 14 20 23 24 26 27 14928 33 1 0 3 6 10 11 16 17 19 21 22 24 25 26 29 14929 33 1 0 e 14930 33 1 0 0 5 6 7 8 9 13 14 15 16 17 19 20 21 22 23 25 29 30 14931 33 1 0 f 14932 33 1 0 1 2 3 5 6 8 9 11 12 14 15 16 17 18 21 22 26 27 14933 33 1 0 0 2 3 5 6 11 14 15 21 23 24 26 28 30 31 32 14934 33 1 0 e 14935 33 1 0 e 14936 33 1 0 e 14937 33 1 0 f 14938 33 1 0 e 14939 33 1 0 6 7 8 9 10 11 12 13 15 20 21 24 25 28 29 14940 33 1 0 f 14941 33 1 0 e 14942 33 1 0 f 14943 33 1 0 f 14944 33 1 0 f 14945 33 1 0 0 1 2 4 6 7 9 14 15 16 18 19 20 22 23 26 28 29 30 32 14946 33 1 0 0 1 4 6 7 8 10 13 14 15 17 18 19 21 23 25 28 29 32 14947 33 1 0 e 14948 33 1 0 0 1 3 6 7 9 10 11 12 13 15 21 22 26 14949 33 1 0 f 14950 33 1 0 0 2 3 4 7 10 12 13 14 15 16 17 19 20 21 23 24 25 29 31 32 14951 33 1 0 1 2 3 5 8 11 14 16 17 18 21 28 14952 33 1 1 e 14953 33 1 1 e 14954 33 1 1 e 14955 33 1 1 f 14956 33 1 1 e 14957 33 1 1 1 2 7 9 10 11 12 17 18 21 22 23 25 26 27 29 32 14958 33 1 1 f 14959 33 1 1 e 14960 33 1 1 f 14961 33 1 1 f 14962 33 1 1 f 14963 33 1 1 1 4 5 6 7 8 9 10 16 17 19 24 26 27 28 30 32 14964 33 1 1 1 2 4 5 8 10 11 12 13 14 15 17 19 21 22 23 25 26 27 28 30 31 32 14965 33 1 1 e 14966 33 1 1 0 2 3 7 8 10 11 13 16 18 19 20 21 23 24 25 28 32 14967 33 1 1 f 14968 33 1 1 0 4 10 11 12 14 15 17 18 20 21 23 26 27 28 31 14969 33 1 1 0 1 3 14 15 17 18 19 21 23 24 25 27 14970 33 1 1 e 14971 33 1 1 e 14972 33 1 1 e 14973 33 1 1 f 14974 33 1 1 e 14975 33 1 1 0 5 7 9 10 12 13 14 15 16 17 18 19 20 21 22 23 25 29 30 31 32 14976 33 1 1 f 14977 33 1 1 e 14978 33 1 1 f 14979 33 1 1 f 14980 33 1 1 f 14981 33 1 1 4 7 9 12 19 20 23 24 25 26 27 29 30 31 14982 33 1 1 1 2 5 6 9 13 14 17 19 20 22 23 29 32 14983 33 1 1 e 14984 33 1 1 1 4 5 7 9 10 11 12 16 17 20 25 29 31 32 14985 33 1 1 f 14986 33 1 1 0 1 2 3 11 13 14 20 22 24 26 27 28 30 31 14987 33 1 1 0 1 2 6 8 9 10 12 14 15 16 18 23 24 26 29 30 31 32 14988 33 1 1 e 14989 33 1 1 e 14990 33 1 1 e 14991 33 1 1 f 14992 33 1 1 e 14993 33 1 1 0 2 4 7 9 11 14 15 17 18 21 25 26 28 29 30 31 32 14994 33 1 1 f 14995 33 1 1 e 14996 33 1 1 f 14997 33 1 1 f 14998 33 1 1 f 14999 33 1 1 0 2 4 5 6 9 10 11 12 13 14 15 16 18 20 22 23 26 27 29 30 15000 33 1 1 0 1 3 4 5 6 7 8 9 12 17 19 20 22 23 25 28 30 31 15001 33 1 1 e 15002 33 1 1 0 1 2 3 4 5 9 14 15 16 18 19 21 24 30 15003 33 1 1 f 15004 33 1 1 0 1 2 6 8 10 12 13 14 17 18 23 24 25 26 30 15005 33 1 1 0 1 2 6 7 8 10 11 19 20 22 26 28 30 31 32 15006 33 1 1 e 15007 33 1 1 e 15008 33 1 1 e 15009 33 1 1 f 15010 33 1 1 e 15011 33 1 1 1 3 4 6 8 12 13 18 20 22 27 28 29 30 32 15012 33 1 1 f 15013 33 1 1 e 15014 33 1 1 f 15015 33 1 1 f 15016 33 1 1 f 15017 33 1 1 2 4 8 9 14 19 20 21 24 27 28 29 30 32 15018 33 1 1 0 1 2 6 7 8 13 14 17 19 21 22 24 25 27 28 29 30 31 15019 33 1 1 e 15020 33 1 1 0 2 5 6 7 8 10 11 12 14 15 16 17 18 19 20 22 23 24 26 27 29 31 15021 33 1 1 f 15022 33 1 1 0 3 6 11 14 19 22 23 26 28 29 30 31 15023 33 1 1 5 6 7 11 13 14 15 17 18 19 21 23 24 25 26 27 30 31 32 15024 63 0 0 e 15025 63 0 0 e 15026 63 0 0 e 15027 63 0 0 f 15028 63 0 0 e 15029 63 0 0 4 5 6 9 10 11 12 17 18 21 22 23 24 25 28 34 37 38 39 41 42 45 46 47 48 49 50 52 53 56 57 58 60 61 62 15030 63 0 0 f 15031 63 0 0 e 15032 63 0 0 f 15033 63 0 0 f 15034 63 0 0 f 15035 63 0 0 3 4 6 7 8 9 11 12 14 15 18 19 21 22 23 25 27 28 30 32 35 38 40 43 44 45 46 50 51 53 55 56 57 58 62 15036 63 0 0 1 2 10 13 14 19 20 27 28 29 34 35 36 39 40 41 43 44 47 48 49 50 54 55 56 59 60 61 15037 63 0 0 e 15038 63 0 0 5 13 14 17 19 21 22 24 26 27 29 31 33 34 38 39 40 44 49 51 56 57 58 59 60 62 15039 63 0 0 f 15040 63 0 0 0 1 2 10 14 15 16 17 19 21 24 27 28 29 31 32 37 38 39 41 43 46 48 54 55 56 58 59 60 62 15041 63 0 0 0 3 4 5 6 7 10 11 12 14 15 17 21 26 30 32 35 37 44 47 53 54 55 57 58 59 60 61 62 15042 63 0 0 e 15043 63 0 0 e 15044 63 0 0 e 15045 63 0 0 f 15046 63 0 0 e 15047 63 0 0 0 6 7 8 11 13 16 17 18 20 23 24 25 26 28 29 31 32 33 36 39 40 41 42 43 44 45 47 48 49 51 58 60 15048 63 0 0 f 15049 63 0 0 e 15050 63 0 0 f 15051 63 0 0 f 15052 63 0 0 f 15053 63 0 0 0 1 4 5 6 7 9 12 14 17 18 19 24 25 28 31 33 36 41 42 43 53 54 56 60 61 15054 63 0 0 1 3 4 5 6 7 8 9 10 11 12 17 18 19 21 22 24 26 28 29 32 33 34 35 36 37 38 39 40 42 43 44 48 54 55 57 60 61 62 15055 63 0 0 e 15056 63 0 0 0 1 2 5 9 10 15 17 18 20 23 24 25 28 29 30 32 33 34 39 40 44 45 47 53 56 57 60 62 15057 63 0 0 f 15058 63 0 0 2 3 4 7 9 10 11 13 14 18 19 20 21 23 25 27 28 29 30 33 34 35 38 40 41 46 47 49 52 53 56 57 60 62 15059 63 0 0 0 2 3 5 6 7 8 12 15 16 21 24 26 28 29 30 31 33 34 35 36 37 38 39 41 45 46 50 54 55 57 60 15060 63 0 0 e 15061 63 0 0 e 15062 63 0 0 e 15063 63 0 0 f 15064 63 0 0 e 15065 63 0 0 0 1 3 4 10 11 12 14 16 17 24 25 28 29 30 31 32 36 37 38 41 42 45 46 47 48 51 52 55 57 62 15066 63 0 0 f 15067 63 0 0 e 15068 63 0 0 f 15069 63 0 0 f 15070 63 0 0 f 15071 63 0 0 1 3 6 7 8 10 12 15 17 18 24 28 29 31 33 34 35 38 40 42 43 44 48 52 53 54 55 59 60 62 15072 63 0 0 2 7 9 11 12 13 15 16 17 20 22 23 24 27 29 30 31 32 36 39 41 42 43 46 52 55 56 57 59 62 15073 63 0 0 e 15074 63 0 0 1 2 3 8 9 11 13 14 15 19 21 23 28 29 35 36 41 43 44 45 46 49 52 53 57 58 59 60 61 15075 63 0 0 f 15076 63 0 0 4 5 6 9 10 12 13 16 18 20 21 22 24 25 26 27 28 29 31 33 36 37 38 40 42 45 46 50 53 56 15077 63 0 0 0 2 3 4 5 6 10 11 13 14 15 22 23 24 26 28 30 31 32 33 34 35 38 39 40 41 42 44 45 46 48 50 52 53 55 60 62 15078 63 0 0 e 15079 63 0 0 e 15080 63 0 0 e 15081 63 0 0 f 15082 63 0 0 e 15083 63 0 0 1 2 8 17 19 21 22 28 29 32 34 37 38 42 45 46 47 48 56 57 58 59 60 15084 63 0 0 f 15085 63 0 0 e 15086 63 0 0 f 15087 63 0 0 f 15088 63 0 0 f 15089 63 0 0 1 2 3 5 7 9 11 14 15 17 21 22 23 24 25 26 28 30 32 33 34 36 38 39 42 44 49 50 51 52 53 55 56 61 62 15090 63 0 0 1 2 3 6 11 13 19 21 24 25 30 31 33 35 36 43 45 51 53 56 57 59 62 15091 63 0 0 e 15092 63 0 0 7 8 9 11 14 15 16 19 20 22 24 25 26 27 28 30 33 34 35 41 44 47 48 51 52 54 55 57 58 60 62 15093 63 0 0 f 15094 63 0 0 4 5 6 8 10 13 14 16 18 20 23 27 29 31 33 34 36 37 38 39 41 43 44 45 46 49 50 52 54 56 59 61 62 15095 63 0 0 0 1 2 8 12 16 19 21 22 23 24 26 27 28 29 31 35 36 37 41 42 46 47 48 50 51 53 54 55 57 58 15096 63 0 1 e 15097 63 0 1 e 15098 63 0 1 e 15099 63 0 1 f 15100 63 0 1 e 15101 63 0 1 0 2 3 5 7 9 10 16 19 20 22 23 24 28 29 30 31 33 34 36 39 41 45 46 49 51 53 54 55 60 61 15102 63 0 1 f 15103 63 0 1 e 15104 63 0 1 f 15105 63 0 1 f 15106 63 0 1 f 15107 63 0 1 1 3 5 6 8 9 10 13 16 18 19 21 22 25 26 27 28 29 33 34 35 37 40 42 46 51 53 56 59 60 15108 63 0 1 4 6 12 15 16 17 19 20 25 26 28 33 34 36 37 41 42 43 45 46 48 51 53 55 57 58 15109 63 0 1 e 15110 63 0 1 0 3 5 15 16 18 19 20 21 22 23 25 26 30 31 34 35 40 42 44 45 46 47 49 52 55 57 59 62 15111 63 0 1 f 15112 63 0 1 0 1 2 4 6 8 12 15 16 20 21 23 27 28 29 30 32 34 35 36 37 39 40 42 43 44 46 49 50 52 55 56 57 58 60 61 62 15113 63 0 1 0 2 4 5 6 7 8 10 11 12 13 19 27 29 30 33 34 38 40 41 42 43 44 48 52 53 57 58 59 60 61 62 15114 63 0 1 e 15115 63 0 1 e 15116 63 0 1 e 15117 63 0 1 f 15118 63 0 1 e 15119 63 0 1 0 2 4 8 9 11 12 13 14 15 16 19 21 23 26 27 28 30 31 32 33 35 36 39 42 45 47 50 51 55 56 58 59 60 61 62 15120 63 0 1 f 15121 63 0 1 e 15122 63 0 1 f 15123 63 0 1 f 15124 63 0 1 f 15125 63 0 1 0 2 3 6 8 12 13 15 17 18 19 24 25 26 27 29 34 35 36 37 39 45 46 47 48 49 50 52 55 56 58 62 15126 63 0 1 1 2 4 5 7 9 10 13 18 19 25 26 27 28 32 34 35 36 42 43 46 47 49 51 53 54 57 61 62 15127 63 0 1 e 15128 63 0 1 1 2 3 4 5 9 10 11 14 15 16 17 23 24 26 28 29 31 32 33 34 35 36 38 41 43 46 47 53 60 61 15129 63 0 1 f 15130 63 0 1 0 1 4 5 7 11 12 14 15 16 17 23 24 25 27 28 29 32 34 40 41 43 47 49 51 52 53 55 57 58 60 61 62 15131 63 0 1 2 3 4 10 11 13 18 19 23 24 26 28 29 30 33 35 36 37 41 43 44 45 48 49 53 56 57 58 59 60 61 15132 63 0 1 e 15133 63 0 1 e 15134 63 0 1 e 15135 63 0 1 f 15136 63 0 1 e 15137 63 0 1 0 2 3 5 7 10 11 13 16 18 19 20 26 28 29 30 31 33 34 35 36 43 47 48 49 50 54 55 57 15138 63 0 1 f 15139 63 0 1 e 15140 63 0 1 f 15141 63 0 1 f 15142 63 0 1 f 15143 63 0 1 0 5 6 7 10 11 12 15 18 19 20 21 23 27 28 29 33 34 35 36 37 39 42 44 46 49 50 52 54 56 60 61 62 15144 63 0 1 1 2 3 5 9 11 12 13 14 21 25 26 27 28 30 31 33 34 35 36 41 45 46 47 49 51 52 53 57 15145 63 0 1 e 15146 63 0 1 0 5 6 7 10 11 12 13 15 18 21 26 28 29 30 31 33 36 37 39 42 47 48 50 51 52 56 58 59 62 15147 63 0 1 f 15148 63 0 1 2 3 5 10 11 12 16 19 21 23 24 25 27 28 29 30 33 35 36 37 38 41 43 48 49 52 53 55 57 58 60 61 62 15149 63 0 1 3 6 9 10 14 17 18 19 20 22 23 24 25 26 29 31 33 34 37 38 39 40 41 43 44 50 52 53 55 56 60 61 62 15150 63 0 1 e 15151 63 0 1 e 15152 63 0 1 e 15153 63 0 1 f 15154 63 0 1 e 15155 63 0 1 1 2 3 4 6 7 10 14 15 17 18 19 20 21 22 26 27 30 36 37 38 41 43 46 47 51 55 56 59 60 15156 63 0 1 f 15157 63 0 1 e 15158 63 0 1 f 15159 63 0 1 f 15160 63 0 1 f 15161 63 0 1 0 1 2 4 5 7 13 14 16 18 19 20 24 25 26 27 32 34 35 36 37 38 43 44 46 47 48 49 50 51 52 55 58 59 15162 63 0 1 1 2 4 5 6 7 11 13 14 16 17 19 20 21 22 23 24 26 27 28 30 32 33 35 36 38 40 43 48 50 51 53 58 59 61 15163 63 0 1 e 15164 63 0 1 1 2 4 6 8 11 13 15 16 17 18 20 21 22 24 27 28 33 40 41 44 46 49 50 53 57 59 60 61 15165 63 0 1 f 15166 63 0 1 1 2 4 6 8 9 12 13 17 22 23 25 28 30 31 32 35 36 39 41 42 44 47 49 51 52 54 58 59 61 62 15167 63 0 1 4 5 6 7 10 11 13 17 18 19 20 22 25 31 33 36 40 41 43 44 49 53 54 55 56 60 61 15168 63 1 0 e 15169 63 1 0 e 15170 63 1 0 e 15171 63 1 0 f 15172 63 1 0 e 15173 63 1 0 1 2 3 4 6 8 9 11 12 13 19 22 27 32 35 36 38 39 42 45 47 49 50 51 53 54 55 58 59 60 15174 63 1 0 f 15175 63 1 0 e 15176 63 1 0 f 15177 63 1 0 f 15178 63 1 0 f 15179 63 1 0 0 1 4 5 8 9 14 17 24 25 27 29 30 32 34 38 43 47 48 49 57 58 59 61 62 15180 63 1 0 2 3 4 5 6 7 9 11 13 16 17 18 19 28 31 32 33 34 35 36 38 43 44 47 50 51 55 57 15181 63 1 0 e 15182 63 1 0 2 3 6 7 8 9 10 11 12 15 16 17 19 21 22 25 28 29 30 33 35 37 38 40 41 43 45 46 50 51 52 53 54 56 58 59 62 15183 63 1 0 f 15184 63 1 0 0 3 6 7 10 12 13 14 15 18 19 21 22 24 28 29 31 32 33 34 36 37 43 44 46 48 49 51 52 55 56 57 59 61 62 15185 63 1 0 2 3 7 8 11 13 14 15 17 18 20 22 24 25 26 27 31 32 34 36 37 43 45 46 47 48 49 52 54 55 56 57 58 62 15186 63 1 0 e 15187 63 1 0 e 15188 63 1 0 e 15189 63 1 0 f 15190 63 1 0 e 15191 63 1 0 2 3 5 6 7 10 12 13 14 16 17 18 20 21 23 24 25 29 33 36 39 40 46 47 48 49 51 52 55 57 58 59 60 15192 63 1 0 f 15193 63 1 0 e 15194 63 1 0 f 15195 63 1 0 f 15196 63 1 0 f 15197 63 1 0 0 4 5 6 7 9 11 14 17 21 22 25 32 33 34 35 36 37 38 40 41 43 47 48 49 52 53 54 56 57 61 62 15198 63 1 0 1 2 3 4 6 7 9 19 20 22 25 26 29 32 33 39 40 41 42 47 48 49 50 51 54 55 57 62 15199 63 1 0 e 15200 63 1 0 3 4 5 7 8 9 10 11 15 16 18 19 20 22 23 26 27 28 30 32 34 35 38 39 42 44 47 48 51 54 55 56 57 58 59 61 62 15201 63 1 0 f 15202 63 1 0 2 4 6 7 10 11 15 17 21 22 25 28 32 39 40 41 42 49 50 53 54 55 57 62 15203 63 1 0 0 1 5 6 8 9 11 12 13 16 17 21 26 27 30 32 33 34 36 37 41 45 46 48 50 54 55 58 59 60 15204 63 1 0 e 15205 63 1 0 e 15206 63 1 0 e 15207 63 1 0 f 15208 63 1 0 e 15209 63 1 0 0 3 7 8 12 13 16 19 20 22 24 27 28 29 31 33 34 39 48 49 51 53 61 62 15210 63 1 0 f 15211 63 1 0 e 15212 63 1 0 f 15213 63 1 0 f 15214 63 1 0 f 15215 63 1 0 1 2 3 4 5 7 9 11 13 16 17 18 21 22 24 26 31 33 34 36 40 46 47 51 57 59 61 62 15216 63 1 0 0 1 2 3 4 9 12 13 15 17 20 21 26 28 31 34 35 37 39 40 41 43 44 46 52 53 60 61 15217 63 1 0 e 15218 63 1 0 0 1 2 3 5 8 9 12 13 15 22 23 24 28 29 30 31 32 33 34 36 38 42 43 46 48 50 52 53 54 55 15219 63 1 0 f 15220 63 1 0 1 3 4 8 9 11 12 14 24 25 26 27 28 29 32 34 35 36 38 39 44 46 47 51 52 53 54 56 57 59 60 61 62 15221 63 1 0 0 2 7 8 9 11 13 14 17 18 19 20 21 22 24 25 26 32 34 35 36 38 39 40 42 46 49 52 55 59 60 61 62 15222 63 1 0 e 15223 63 1 0 e 15224 63 1 0 e 15225 63 1 0 f 15226 63 1 0 e 15227 63 1 0 2 5 7 8 9 10 15 16 19 21 24 25 27 30 31 35 37 38 40 42 44 46 48 52 53 54 55 56 58 15228 63 1 0 f 15229 63 1 0 e 15230 63 1 0 f 15231 63 1 0 f 15232 63 1 0 f 15233 63 1 0 0 1 2 3 5 7 8 9 10 11 12 14 18 19 21 22 25 26 27 30 33 35 37 38 40 41 46 47 50 51 53 54 55 56 57 62 15234 63 1 0 0 2 3 4 5 6 7 9 11 14 16 19 22 24 25 26 30 33 36 43 44 45 47 49 50 51 52 54 55 57 60 62 15235 63 1 0 e 15236 63 1 0 2 3 4 6 16 21 24 29 31 32 35 39 40 41 45 46 47 48 52 53 55 57 60 61 15237 63 1 0 f 15238 63 1 0 0 1 2 3 6 9 10 11 12 14 15 17 19 20 23 24 28 31 35 39 41 47 49 50 53 55 57 60 61 62 15239 63 1 0 1 3 5 10 12 13 14 15 20 22 23 24 26 27 29 30 31 32 34 37 39 43 45 46 50 52 53 54 57 59 60 15240 63 1 1 e 15241 63 1 1 e 15242 63 1 1 e 15243 63 1 1 f 15244 63 1 1 e 15245 63 1 1 1 3 12 16 21 23 27 28 29 32 33 36 40 41 42 43 46 48 50 51 53 54 57 60 61 62 15246 63 1 1 f 15247 63 1 1 e 15248 63 1 1 f 15249 63 1 1 f 15250 63 1 1 f 15251 63 1 1 1 2 3 4 12 18 20 21 22 25 26 28 29 34 36 41 45 50 51 53 55 56 57 60 62 15252 63 1 1 1 2 5 6 7 9 11 12 13 17 21 23 24 29 30 33 34 35 36 37 38 40 41 42 43 44 48 53 59 15253 63 1 1 e 15254 63 1 1 0 3 4 8 11 14 15 19 20 22 24 26 28 30 33 37 38 41 42 43 45 47 49 50 52 53 54 55 59 60 61 15255 63 1 1 f 15256 63 1 1 1 2 3 8 12 14 15 16 17 18 20 24 25 26 27 29 31 32 33 35 37 41 42 45 50 52 54 56 15257 63 1 1 0 2 3 4 5 10 11 12 13 21 23 24 25 26 28 31 32 34 35 36 40 42 43 44 48 49 50 51 52 53 54 56 57 58 59 62 15258 63 1 1 e 15259 63 1 1 e 15260 63 1 1 e 15261 63 1 1 f 15262 63 1 1 e 15263 63 1 1 2 7 9 10 12 13 14 15 16 17 18 19 21 23 26 29 30 31 33 34 35 36 38 43 46 48 49 50 55 56 62 15264 63 1 1 f 15265 63 1 1 e 15266 63 1 1 f 15267 63 1 1 f 15268 63 1 1 f 15269 63 1 1 0 1 2 3 4 8 9 10 11 13 14 15 16 18 20 22 23 24 34 36 38 43 45 46 50 52 53 55 57 58 59 62 15270 63 1 1 0 2 6 7 8 10 11 12 13 14 19 20 23 24 26 29 35 36 39 40 42 43 45 47 48 49 50 51 54 56 58 15271 63 1 1 e 15272 63 1 1 0 1 2 3 4 7 9 10 14 17 21 23 25 27 29 34 36 38 40 41 42 45 47 48 49 54 55 58 61 62 15273 63 1 1 f 15274 63 1 1 0 2 3 4 5 6 8 9 10 12 13 14 15 18 19 20 22 23 24 26 29 30 32 33 35 36 39 40 42 43 44 45 46 49 53 55 57 59 60 62 15275 63 1 1 0 1 3 4 6 15 17 18 19 21 22 25 27 28 29 30 32 36 38 42 43 44 45 48 50 53 55 56 57 58 59 60 61 15276 63 1 1 e 15277 63 1 1 e 15278 63 1 1 e 15279 63 1 1 f 15280 63 1 1 e 15281 63 1 1 1 3 4 5 6 7 10 11 13 16 17 19 26 29 31 32 33 34 36 37 39 42 44 46 47 50 51 52 56 58 59 60 62 15282 63 1 1 f 15283 63 1 1 e 15284 63 1 1 f 15285 63 1 1 f 15286 63 1 1 f 15287 63 1 1 0 4 6 7 9 10 11 12 14 15 16 19 21 23 26 29 33 36 44 46 47 48 50 53 55 59 15288 63 1 1 2 3 5 6 7 12 13 15 16 17 22 23 24 25 27 29 31 32 33 36 38 40 42 43 44 47 49 50 53 56 57 59 61 62 15289 63 1 1 e 15290 63 1 1 1 3 4 5 6 7 9 10 12 13 14 15 17 18 19 23 25 29 30 31 32 34 36 42 49 55 58 59 61 62 15291 63 1 1 f 15292 63 1 1 2 3 7 8 12 13 19 20 21 22 23 26 28 29 32 34 38 40 45 46 47 55 56 57 59 60 61 15293 63 1 1 0 1 3 6 7 11 12 15 16 17 20 21 23 24 26 27 29 30 31 32 34 36 37 38 39 42 48 51 53 54 55 57 58 59 61 62 15294 63 1 1 e 15295 63 1 1 e 15296 63 1 1 e 15297 63 1 1 f 15298 63 1 1 e 15299 63 1 1 1 2 4 5 7 9 11 13 14 16 18 19 20 21 23 28 30 31 33 35 37 38 39 40 43 44 47 48 51 53 55 57 59 62 15300 63 1 1 f 15301 63 1 1 e 15302 63 1 1 f 15303 63 1 1 f 15304 63 1 1 f 15305 63 1 1 1 10 14 18 19 20 21 23 24 26 27 28 30 34 35 36 37 38 41 43 44 49 52 53 54 55 57 58 59 61 15306 63 1 1 2 5 9 10 12 14 16 17 19 22 25 26 29 30 31 32 33 34 36 38 41 42 44 47 49 50 51 53 54 55 56 57 59 60 61 62 15307 63 1 1 e 15308 63 1 1 0 1 2 3 5 6 7 13 14 17 18 19 21 22 23 25 28 32 33 36 40 41 42 44 45 47 48 50 51 53 54 55 56 59 15309 63 1 1 f 15310 63 1 1 2 3 5 7 8 9 11 12 15 16 17 18 19 21 22 23 24 28 29 30 35 41 45 46 48 49 51 54 58 60 15311 63 1 1 1 2 3 7 8 10 11 12 13 14 15 17 24 25 28 29 30 31 32 34 36 38 40 41 43 44 46 49 50 54 56 58 59 60 62 15312 64 0 0 e 15313 64 0 0 e 15314 64 0 0 e 15315 64 0 0 f 15316 64 0 0 e 15317 64 0 0 0 1 2 3 4 6 9 10 11 12 14 15 17 18 19 21 22 23 24 27 29 31 32 34 35 37 38 39 40 41 42 43 44 46 56 57 59 60 61 62 63 15318 64 0 0 f 15319 64 0 0 e 15320 64 0 0 f 15321 64 0 0 f 15322 64 0 0 f 15323 64 0 0 0 1 4 7 9 10 14 15 16 20 22 27 28 30 31 36 37 39 40 44 45 46 47 51 52 55 57 58 61 63 15324 64 0 0 0 1 3 4 5 6 9 10 11 12 13 14 16 17 19 21 22 23 24 25 29 32 33 36 37 38 39 40 41 42 43 45 48 51 53 54 55 56 57 60 62 15325 64 0 0 e 15326 64 0 0 1 2 3 4 5 6 7 8 9 10 12 14 16 17 19 20 22 23 26 27 28 29 31 32 34 35 37 38 40 41 43 44 47 49 50 52 53 54 56 57 59 60 61 62 15327 64 0 0 f 15328 64 0 0 1 3 4 5 6 7 8 11 12 13 15 20 22 23 25 26 27 28 31 33 34 35 36 37 38 43 44 45 46 48 50 51 53 54 55 56 57 58 15329 64 0 0 0 3 4 14 17 19 20 22 24 26 28 30 31 32 35 37 38 39 46 47 49 50 53 54 57 59 62 63 15330 64 0 0 e 15331 64 0 0 e 15332 64 0 0 e 15333 64 0 0 f 15334 64 0 0 e 15335 64 0 0 2 3 4 5 6 8 10 12 18 19 22 28 36 38 39 40 43 44 45 49 51 55 56 57 60 61 62 15336 64 0 0 f 15337 64 0 0 e 15338 64 0 0 f 15339 64 0 0 f 15340 64 0 0 f 15341 64 0 0 0 1 2 3 5 6 7 10 13 14 15 16 17 18 21 23 24 27 36 40 49 50 52 53 55 57 59 61 62 15342 64 0 0 0 2 3 8 9 11 12 13 16 17 18 19 20 25 28 30 31 33 34 35 37 40 41 43 46 49 50 52 54 58 61 62 63 15343 64 0 0 e 15344 64 0 0 0 1 2 4 8 9 14 15 16 17 19 23 25 26 27 28 29 30 32 33 34 38 40 42 46 53 55 56 58 61 62 63 15345 64 0 0 f 15346 64 0 0 0 1 4 7 8 12 14 15 19 20 21 22 23 24 25 28 31 32 33 35 37 38 39 40 43 45 46 47 50 52 53 54 55 56 59 62 15347 64 0 0 4 7 8 9 10 12 15 16 19 22 25 27 31 33 37 44 45 48 52 53 56 57 60 61 15348 64 0 0 e 15349 64 0 0 e 15350 64 0 0 e 15351 64 0 0 f 15352 64 0 0 e 15353 64 0 0 0 2 7 8 9 10 12 14 15 16 18 22 25 26 28 29 30 33 34 35 39 43 44 46 48 49 50 51 53 56 57 58 60 62 15354 64 0 0 f 15355 64 0 0 e 15356 64 0 0 f 15357 64 0 0 f 15358 64 0 0 f 15359 64 0 0 1 4 5 9 11 13 16 19 23 28 30 31 36 37 40 41 44 45 46 49 53 55 57 59 62 63 15360 64 0 0 0 2 3 6 10 11 12 13 16 17 18 20 25 27 31 32 34 36 37 38 40 41 43 45 48 49 51 53 54 59 61 62 15361 64 0 0 e 15362 64 0 0 8 9 14 18 19 20 21 27 29 30 34 35 36 38 39 40 44 45 46 49 50 52 54 55 56 57 58 59 60 61 15363 64 0 0 f 15364 64 0 0 3 6 9 10 12 13 20 25 28 29 30 31 33 34 35 37 39 40 42 43 44 46 48 50 51 52 53 55 56 57 59 60 61 62 63 15365 64 0 0 0 1 2 5 6 9 10 13 14 27 29 30 32 33 34 36 37 39 40 45 46 47 49 51 55 56 57 58 60 61 62 15366 64 0 0 e 15367 64 0 0 e 15368 64 0 0 e 15369 64 0 0 f 15370 64 0 0 e 15371 64 0 0 1 2 8 15 18 19 20 23 27 28 34 35 37 38 43 44 45 46 47 49 50 55 57 58 62 15372 64 0 0 f 15373 64 0 0 e 15374 64 0 0 f 15375 64 0 0 f 15376 64 0 0 f 15377 64 0 0 1 3 4 8 9 15 18 19 23 24 30 31 33 34 35 39 40 44 45 47 50 51 54 58 59 60 62 63 15378 64 0 0 1 2 3 6 8 10 13 19 21 23 25 26 27 29 30 31 32 33 34 39 40 43 45 49 51 52 54 55 57 58 59 60 61 62 63 15379 64 0 0 e 15380 64 0 0 0 1 2 7 8 9 10 11 12 15 17 18 19 22 23 25 26 27 28 29 30 31 33 35 38 39 41 42 43 46 49 57 60 15381 64 0 0 f 15382 64 0 0 0 1 2 5 11 12 15 17 21 22 23 24 28 29 30 31 33 34 35 39 41 42 45 48 49 50 51 53 54 57 58 60 62 15383 64 0 0 1 2 3 6 7 8 10 14 16 17 20 21 22 24 27 28 30 33 34 35 37 43 44 46 47 48 51 53 54 58 60 61 62 15384 64 0 1 e 15385 64 0 1 e 15386 64 0 1 e 15387 64 0 1 f 15388 64 0 1 e 15389 64 0 1 0 1 5 7 9 11 14 16 17 18 19 20 21 26 29 30 35 36 37 38 40 44 45 48 51 53 55 56 63 15390 64 0 1 f 15391 64 0 1 e 15392 64 0 1 f 15393 64 0 1 f 15394 64 0 1 f 15395 64 0 1 0 1 2 3 4 6 7 8 13 14 19 21 22 28 29 32 33 35 38 42 43 44 45 46 50 52 53 54 56 58 59 61 15396 64 0 1 0 4 6 10 13 14 17 18 21 24 32 33 34 35 36 38 40 41 42 44 45 46 49 51 53 57 58 62 15397 64 0 1 e 15398 64 0 1 0 2 3 4 5 7 8 11 13 15 16 17 18 20 22 23 24 28 31 32 34 35 38 40 41 43 44 45 46 47 50 52 53 55 57 58 59 60 62 63 15399 64 0 1 f 15400 64 0 1 0 4 6 14 15 16 17 18 20 23 24 26 27 28 29 30 31 35 39 40 41 42 43 45 46 47 48 49 51 52 53 54 55 56 57 58 59 61 63 15401 64 0 1 0 1 2 4 7 10 17 18 20 21 23 27 28 29 30 31 32 35 36 37 39 40 44 45 47 48 51 55 56 57 58 59 60 62 63 15402 64 0 1 e 15403 64 0 1 e 15404 64 0 1 e 15405 64 0 1 f 15406 64 0 1 e 15407 64 0 1 0 3 4 5 6 7 11 13 14 18 20 25 29 33 36 37 39 42 45 46 49 50 51 55 57 59 60 63 15408 64 0 1 f 15409 64 0 1 e 15410 64 0 1 f 15411 64 0 1 f 15412 64 0 1 f 15413 64 0 1 3 6 7 8 9 12 13 14 16 17 19 20 21 22 25 26 31 32 34 36 37 38 39 40 43 45 46 47 48 50 51 52 53 54 56 57 58 61 62 63 15414 64 0 1 1 9 10 11 12 13 14 17 22 31 33 35 36 37 38 40 41 44 45 46 48 55 56 57 61 63 15415 64 0 1 e 15416 64 0 1 1 4 6 10 13 14 15 19 21 24 25 29 30 31 36 38 40 41 42 43 44 45 46 47 48 50 52 54 55 56 58 60 61 15417 64 0 1 f 15418 64 0 1 1 2 6 9 11 12 14 15 17 20 21 23 29 30 31 32 36 38 41 43 46 47 48 49 51 52 54 56 59 62 15419 64 0 1 0 1 2 3 5 6 8 11 14 17 24 25 29 30 31 32 33 34 36 37 38 40 46 47 50 51 52 54 55 59 62 15420 64 0 1 e 15421 64 0 1 e 15422 64 0 1 e 15423 64 0 1 f 15424 64 0 1 e 15425 64 0 1 6 10 11 13 14 15 17 23 24 25 27 31 32 33 34 35 36 37 40 41 44 47 48 49 54 55 58 60 15426 64 0 1 f 15427 64 0 1 e 15428 64 0 1 f 15429 64 0 1 f 15430 64 0 1 f 15431 64 0 1 0 3 4 5 7 8 9 13 17 19 22 24 25 26 27 28 31 33 34 41 42 43 44 46 48 50 52 53 54 55 57 58 60 61 15432 64 0 1 0 2 4 16 18 19 22 23 29 30 33 37 38 39 41 42 43 47 48 49 50 54 55 56 58 60 61 62 15433 64 0 1 e 15434 64 0 1 3 12 15 19 20 22 23 25 29 30 31 34 38 39 40 43 44 45 46 48 49 51 53 55 56 57 60 61 63 15435 64 0 1 f 15436 64 0 1 1 3 7 8 9 10 14 17 19 20 21 23 25 26 28 31 33 34 39 40 44 46 50 52 54 57 58 59 61 62 15437 64 0 1 0 1 2 3 4 6 7 8 12 14 15 16 17 19 25 28 30 31 33 34 37 41 42 43 46 47 50 53 54 55 56 59 60 62 15438 64 0 1 e 15439 64 0 1 e 15440 64 0 1 e 15441 64 0 1 f 15442 64 0 1 e 15443 64 0 1 3 5 6 9 11 14 16 18 21 22 30 31 32 35 36 41 45 46 49 51 52 56 57 58 61 62 63 15444 64 0 1 f 15445 64 0 1 e 15446 64 0 1 f 15447 64 0 1 f 15448 64 0 1 f 15449 64 0 1 0 2 3 4 9 10 11 12 13 16 17 19 21 23 24 27 28 30 31 32 33 34 35 38 39 41 42 43 48 50 55 58 60 61 15450 64 0 1 0 4 8 12 14 15 16 17 18 20 24 26 30 32 34 35 40 42 44 45 47 54 56 57 58 59 61 15451 64 0 1 e 15452 64 0 1 0 1 5 6 7 9 12 13 16 18 20 21 22 23 24 26 29 30 32 34 36 37 40 41 45 46 50 53 54 55 57 60 61 62 63 15453 64 0 1 f 15454 64 0 1 2 7 8 9 12 14 15 16 17 19 20 22 23 24 27 32 34 35 36 38 39 43 44 46 51 54 56 59 60 61 15455 64 0 1 3 6 7 8 9 10 11 13 16 17 22 23 24 26 27 28 32 33 37 38 40 41 42 46 48 50 52 53 55 60 61 15456 64 1 0 e 15457 64 1 0 e 15458 64 1 0 e 15459 64 1 0 f 15460 64 1 0 e 15461 64 1 0 1 2 3 4 5 6 7 9 10 11 13 16 19 21 23 24 25 26 27 28 33 34 35 36 37 38 40 41 45 49 51 52 53 55 56 60 61 62 15462 64 1 0 f 15463 64 1 0 e 15464 64 1 0 f 15465 64 1 0 f 15466 64 1 0 f 15467 64 1 0 0 1 4 5 6 7 8 9 10 12 14 15 17 18 20 22 24 26 27 29 30 31 38 39 41 43 45 46 47 48 49 51 52 55 56 59 60 62 15468 64 1 0 0 2 3 4 5 6 7 8 10 13 16 18 19 20 25 30 32 33 35 38 41 43 44 45 46 49 51 53 55 56 57 15469 64 1 0 e 15470 64 1 0 0 1 4 5 6 8 12 14 20 21 23 24 26 28 30 31 33 36 37 38 39 41 49 50 56 60 63 15471 64 1 0 f 15472 64 1 0 5 6 7 8 10 14 15 17 19 20 21 22 23 24 27 28 30 31 32 33 36 39 43 44 45 46 47 48 50 51 53 57 58 59 61 62 15473 64 1 0 0 2 3 5 6 7 9 10 11 12 13 14 15 17 19 21 22 23 24 25 26 27 28 29 32 33 36 37 40 43 46 47 48 50 53 55 56 57 58 60 62 63 15474 64 1 0 e 15475 64 1 0 e 15476 64 1 0 e 15477 64 1 0 f 15478 64 1 0 e 15479 64 1 0 5 9 11 12 13 14 15 21 23 24 28 31 32 35 37 45 47 49 51 52 53 54 58 59 60 62 15480 64 1 0 f 15481 64 1 0 e 15482 64 1 0 f 15483 64 1 0 f 15484 64 1 0 f 15485 64 1 0 0 3 4 5 9 10 11 12 17 18 21 22 23 24 25 26 27 28 29 31 32 33 34 35 39 40 43 44 45 46 48 49 50 52 54 55 57 61 62 15486 64 1 0 1 3 4 5 6 7 10 13 14 15 16 17 24 25 26 29 30 31 34 37 39 40 44 47 52 54 55 57 59 62 63 15487 64 1 0 e 15488 64 1 0 0 1 5 9 10 13 14 18 20 21 22 23 24 26 33 35 36 37 39 41 43 44 50 53 55 56 57 62 63 15489 64 1 0 f 15490 64 1 0 3 4 5 6 8 11 15 16 17 19 20 22 23 27 28 29 30 31 34 36 37 38 39 41 43 45 46 48 49 55 58 61 63 15491 64 1 0 0 2 3 5 6 8 12 13 15 16 17 20 24 26 29 36 37 38 39 42 46 50 52 54 55 56 59 63 15492 64 1 0 e 15493 64 1 0 e 15494 64 1 0 e 15495 64 1 0 f 15496 64 1 0 e 15497 64 1 0 0 3 7 10 11 12 13 14 17 19 20 22 23 24 25 26 29 30 34 35 38 39 40 41 42 43 44 45 47 49 50 52 53 55 56 57 58 60 61 15498 64 1 0 f 15499 64 1 0 e 15500 64 1 0 f 15501 64 1 0 f 15502 64 1 0 f 15503 64 1 0 3 4 6 7 8 10 11 14 15 16 17 19 22 25 28 29 30 31 34 36 39 40 44 46 47 48 50 52 54 58 59 61 62 63 15504 64 1 0 1 3 5 6 11 14 16 18 20 21 22 24 30 32 36 41 43 45 50 54 56 57 62 15505 64 1 0 e 15506 64 1 0 0 3 5 6 7 8 10 14 15 16 20 21 23 24 25 29 33 34 35 36 37 38 39 41 48 51 53 54 56 57 58 60 62 15507 64 1 0 f 15508 64 1 0 1 2 4 5 7 9 11 12 13 14 15 19 25 26 29 34 37 39 40 41 43 47 48 49 53 54 56 57 58 59 60 15509 64 1 0 0 3 5 6 7 10 11 12 14 15 20 22 23 25 26 27 28 31 33 34 35 38 39 40 42 44 45 47 48 51 52 54 55 58 60 62 15510 64 1 0 e 15511 64 1 0 e 15512 64 1 0 e 15513 64 1 0 f 15514 64 1 0 e 15515 64 1 0 0 1 2 5 7 11 13 14 19 20 21 22 25 34 40 41 43 44 47 48 50 51 53 55 56 57 61 15516 64 1 0 f 15517 64 1 0 e 15518 64 1 0 f 15519 64 1 0 f 15520 64 1 0 f 15521 64 1 0 2 6 12 15 16 18 24 25 29 30 31 33 35 38 39 40 42 43 44 46 47 49 51 52 53 54 55 59 61 62 63 15522 64 1 0 0 1 3 6 7 8 9 10 12 23 24 26 30 35 36 37 38 39 40 43 44 48 52 53 54 57 58 59 61 62 63 15523 64 1 0 e 15524 64 1 0 6 7 8 10 11 12 13 14 15 18 21 22 24 27 30 34 35 37 38 40 42 43 45 47 51 53 59 60 61 15525 64 1 0 f 15526 64 1 0 1 2 3 4 5 6 7 9 11 12 13 14 17 19 20 24 27 30 31 33 36 38 39 42 46 47 50 52 54 55 56 60 62 15527 64 1 0 4 8 9 10 13 15 19 20 22 24 26 28 29 30 36 37 38 39 40 41 44 45 47 49 50 51 53 55 56 59 60 62 15528 64 1 1 e 15529 64 1 1 e 15530 64 1 1 e 15531 64 1 1 f 15532 64 1 1 e 15533 64 1 1 6 7 8 11 12 14 17 21 24 25 27 31 32 33 34 35 36 37 38 39 42 44 47 49 51 53 56 60 61 62 15534 64 1 1 f 15535 64 1 1 e 15536 64 1 1 f 15537 64 1 1 f 15538 64 1 1 f 15539 64 1 1 1 4 8 12 13 15 16 17 18 20 21 22 23 28 30 34 36 40 41 42 44 47 50 53 55 56 57 58 59 60 61 15540 64 1 1 0 3 4 5 7 8 11 12 13 14 16 17 18 22 24 25 27 28 29 31 33 36 37 39 40 42 43 46 49 51 52 55 57 58 60 62 15541 64 1 1 e 15542 64 1 1 0 2 3 5 10 11 12 13 14 15 16 18 19 20 21 22 24 25 26 28 29 30 31 34 38 39 41 42 44 45 49 52 53 54 55 56 59 61 62 15543 64 1 1 f 15544 64 1 1 2 3 4 5 6 9 13 14 15 16 17 18 19 20 21 23 25 28 30 32 33 36 38 40 44 47 52 53 54 56 58 60 61 62 15545 64 1 1 0 1 2 5 6 8 10 11 13 14 15 18 21 23 28 30 31 33 37 38 43 47 50 51 54 55 56 59 61 63 15546 64 1 1 e 15547 64 1 1 e 15548 64 1 1 e 15549 64 1 1 f 15550 64 1 1 e 15551 64 1 1 0 1 4 5 6 7 10 11 14 15 16 17 18 23 24 26 30 32 35 38 39 42 43 44 46 49 50 53 55 59 15552 64 1 1 f 15553 64 1 1 e 15554 64 1 1 f 15555 64 1 1 f 15556 64 1 1 f 15557 64 1 1 1 3 4 5 12 14 15 21 23 25 26 27 28 32 35 37 39 40 41 43 45 46 47 51 53 54 57 62 15558 64 1 1 0 4 5 7 8 9 10 12 14 16 19 20 25 26 29 30 33 34 36 40 41 42 43 45 46 48 51 53 55 59 61 62 63 15559 64 1 1 e 15560 64 1 1 0 1 2 3 4 7 9 10 11 12 13 14 15 16 18 20 24 30 32 33 35 38 41 46 49 50 52 54 55 56 58 61 62 15561 64 1 1 f 15562 64 1 1 0 1 6 7 9 11 15 16 19 22 25 27 28 31 33 34 35 37 38 39 40 41 43 45 46 48 49 53 54 55 56 58 63 15563 64 1 1 3 4 7 9 10 12 14 15 17 19 20 21 23 27 31 32 33 35 37 40 42 43 44 45 48 49 50 51 52 55 56 57 58 62 63 15564 64 1 1 e 15565 64 1 1 e 15566 64 1 1 e 15567 64 1 1 f 15568 64 1 1 e 15569 64 1 1 2 6 9 12 13 20 21 23 25 26 27 29 30 34 35 36 37 40 41 43 45 47 55 59 63 15570 64 1 1 f 15571 64 1 1 e 15572 64 1 1 f 15573 64 1 1 f 15574 64 1 1 f 15575 64 1 1 0 2 6 8 10 15 16 17 19 22 23 24 27 29 30 32 34 36 39 40 43 44 45 46 49 51 57 59 60 61 63 15576 64 1 1 1 2 6 8 11 12 13 16 17 20 21 22 24 25 28 29 32 34 36 37 39 40 41 43 44 45 47 49 53 54 56 58 59 61 63 15577 64 1 1 e 15578 64 1 1 3 4 5 6 7 10 12 14 18 19 21 22 25 27 28 29 30 31 32 33 34 35 36 37 38 40 41 43 47 48 51 55 58 59 62 15579 64 1 1 f 15580 64 1 1 1 4 7 9 10 11 16 17 23 24 25 26 29 31 32 33 36 37 40 41 42 47 49 51 54 59 61 62 63 15581 64 1 1 0 3 4 5 6 7 8 9 10 11 14 15 18 20 21 22 31 33 34 36 37 40 44 47 48 52 54 57 58 59 62 63 15582 64 1 1 e 15583 64 1 1 e 15584 64 1 1 e 15585 64 1 1 f 15586 64 1 1 e 15587 64 1 1 3 7 8 9 16 17 18 19 22 23 25 27 28 32 33 35 37 38 39 40 44 45 48 52 54 56 58 59 60 15588 64 1 1 f 15589 64 1 1 e 15590 64 1 1 f 15591 64 1 1 f 15592 64 1 1 f 15593 64 1 1 7 8 9 12 13 14 15 16 19 22 24 25 29 30 31 36 37 39 40 41 43 46 49 51 55 57 59 60 63 15594 64 1 1 0 1 3 5 6 8 9 10 13 14 15 16 17 18 19 22 27 28 29 30 31 34 35 37 40 43 44 46 47 50 52 53 54 55 58 60 61 15595 64 1 1 e 15596 64 1 1 3 4 5 7 8 9 10 11 12 14 16 18 19 21 22 24 25 26 27 28 29 33 36 38 39 41 42 48 50 52 53 54 55 58 63 15597 64 1 1 f 15598 64 1 1 1 2 5 6 8 9 10 11 20 24 26 28 30 32 33 34 36 37 38 39 42 43 44 45 46 50 52 54 56 58 59 60 61 63 15599 64 1 1 0 1 2 3 4 5 10 11 13 17 18 22 23 24 26 27 29 31 32 34 35 38 41 43 44 45 48 49 50 51 54 56 57 60 61 63 15600 65 0 0 e 15601 65 0 0 e 15602 65 0 0 e 15603 65 0 0 f 15604 65 0 0 e 15605 65 0 0 1 6 7 13 14 15 16 17 18 21 22 24 25 28 29 31 32 33 35 38 39 40 44 47 48 50 53 55 56 57 60 61 15606 65 0 0 f 15607 65 0 0 e 15608 65 0 0 f 15609 65 0 0 f 15610 65 0 0 f 15611 65 0 0 0 2 8 9 11 12 14 19 20 22 23 24 27 28 29 31 33 35 37 41 44 46 52 53 54 55 59 61 62 63 64 15612 65 0 0 0 1 3 4 7 8 9 10 11 13 15 17 20 24 26 29 34 36 39 40 41 42 44 48 49 51 52 53 54 55 57 59 62 63 64 15613 65 0 0 e 15614 65 0 0 0 2 4 5 7 9 10 11 12 13 14 15 18 22 24 25 26 28 29 31 34 35 36 38 40 43 45 46 47 51 52 55 57 58 59 60 62 63 15615 65 0 0 f 15616 65 0 0 0 1 3 4 5 6 9 10 12 13 14 17 19 20 21 22 23 24 25 26 28 29 30 32 38 42 49 52 55 57 58 59 60 61 64 15617 65 0 0 0 1 4 5 6 11 12 13 20 21 22 23 24 25 27 29 30 32 33 34 35 36 37 38 40 43 47 48 51 53 56 57 59 60 61 63 64 15618 65 0 0 e 15619 65 0 0 e 15620 65 0 0 e 15621 65 0 0 f 15622 65 0 0 e 15623 65 0 0 0 1 2 3 4 5 6 10 11 12 14 16 18 19 20 23 26 28 29 31 32 38 40 44 45 46 47 52 53 58 62 15624 65 0 0 f 15625 65 0 0 e 15626 65 0 0 f 15627 65 0 0 f 15628 65 0 0 f 15629 65 0 0 1 2 3 7 9 10 12 13 14 18 20 22 24 25 26 28 30 32 36 37 40 42 45 46 49 50 52 54 55 57 60 61 62 63 15630 65 0 0 3 4 6 10 11 12 15 16 18 21 22 23 24 26 27 29 31 33 34 38 40 41 43 44 45 47 52 55 56 58 63 15631 65 0 0 e 15632 65 0 0 0 5 9 15 16 17 18 21 23 24 25 28 31 32 33 36 37 38 40 41 42 46 47 49 51 54 60 61 63 64 15633 65 0 0 f 15634 65 0 0 0 2 4 7 14 18 19 21 28 29 34 36 40 42 44 48 54 55 56 57 59 60 61 15635 65 0 0 4 10 11 12 14 17 19 20 22 23 25 26 28 29 33 34 37 44 45 46 48 51 55 56 59 61 63 15636 65 0 0 e 15637 65 0 0 e 15638 65 0 0 e 15639 65 0 0 f 15640 65 0 0 e 15641 65 0 0 0 1 2 3 7 9 10 12 13 15 20 23 24 28 29 30 31 32 33 34 36 42 43 46 48 50 52 55 56 57 59 60 63 64 15642 65 0 0 f 15643 65 0 0 e 15644 65 0 0 f 15645 65 0 0 f 15646 65 0 0 f 15647 65 0 0 2 4 6 7 9 11 12 13 14 16 20 21 25 29 31 35 36 37 38 40 44 46 47 49 50 52 54 57 58 59 60 64 15648 65 0 0 0 2 3 8 9 11 12 15 17 18 21 22 24 27 28 29 30 31 32 36 37 38 40 43 45 47 48 53 54 55 58 60 61 63 15649 65 0 0 e 15650 65 0 0 0 2 3 4 6 8 10 11 12 14 16 17 19 20 23 25 26 28 29 31 36 39 40 42 43 44 45 46 48 52 58 62 63 64 15651 65 0 0 f 15652 65 0 0 1 2 3 5 7 8 13 15 17 18 19 22 23 24 29 30 31 32 33 37 41 42 44 45 47 48 49 50 51 53 54 56 57 60 62 63 15653 65 0 0 2 4 5 6 8 11 16 18 19 21 22 25 27 28 32 33 34 36 37 38 39 40 45 46 49 51 52 53 54 56 59 15654 65 0 0 e 15655 65 0 0 e 15656 65 0 0 e 15657 65 0 0 f 15658 65 0 0 e 15659 65 0 0 1 4 7 8 9 11 12 13 17 20 24 26 28 29 30 32 37 41 42 44 46 49 53 56 59 62 63 15660 65 0 0 f 15661 65 0 0 e 15662 65 0 0 f 15663 65 0 0 f 15664 65 0 0 f 15665 65 0 0 2 4 6 7 9 10 12 14 15 16 17 23 24 26 29 30 31 33 34 36 37 40 42 44 50 51 52 54 55 56 57 59 60 61 62 64 15666 65 0 0 0 1 2 5 7 8 9 12 13 14 16 17 24 26 27 28 31 32 38 39 45 46 48 50 52 60 61 63 64 15667 65 0 0 e 15668 65 0 0 1 3 4 10 19 20 21 24 25 27 28 29 30 32 33 35 37 39 44 46 48 51 52 55 57 58 60 62 63 15669 65 0 0 f 15670 65 0 0 1 2 3 7 8 9 10 12 15 18 19 20 21 24 29 30 32 35 36 37 38 39 42 44 54 55 56 57 60 61 62 63 15671 65 0 0 1 3 7 9 10 12 13 14 19 20 22 23 24 25 26 27 28 29 31 33 34 35 36 38 41 42 44 45 47 48 49 50 51 54 57 58 60 64 15672 65 0 1 e 15673 65 0 1 e 15674 65 0 1 e 15675 65 0 1 f 15676 65 0 1 e 15677 65 0 1 2 3 6 7 8 10 11 12 13 14 15 17 19 20 23 25 27 28 29 30 32 33 34 36 37 39 41 42 43 44 46 49 51 53 54 55 58 60 62 63 15678 65 0 1 f 15679 65 0 1 e 15680 65 0 1 f 15681 65 0 1 f 15682 65 0 1 f 15683 65 0 1 0 3 6 8 9 12 14 15 16 17 22 23 24 26 29 30 31 32 33 34 37 38 40 42 44 50 51 52 53 55 59 60 61 62 63 64 15684 65 0 1 6 7 11 12 13 14 16 17 18 19 21 24 27 28 30 32 34 36 37 39 41 42 43 44 45 47 50 51 52 55 57 58 61 62 15685 65 0 1 e 15686 65 0 1 0 1 2 4 5 6 7 8 9 12 14 16 17 20 22 23 26 31 32 35 38 40 42 43 45 50 52 55 56 59 61 62 15687 65 0 1 f 15688 65 0 1 2 3 5 6 8 9 10 12 14 19 20 23 29 31 34 35 39 44 46 47 48 49 50 51 54 55 56 58 63 64 15689 65 0 1 0 2 4 5 6 7 9 10 11 12 13 14 15 17 18 19 21 23 24 25 26 28 29 30 31 33 35 36 38 41 43 46 47 49 50 51 56 59 62 15690 65 0 1 e 15691 65 0 1 e 15692 65 0 1 e 15693 65 0 1 f 15694 65 0 1 e 15695 65 0 1 3 5 6 9 10 11 12 13 17 18 19 22 23 24 25 28 29 30 34 35 37 38 39 40 41 42 43 45 47 48 50 57 59 63 15696 65 0 1 f 15697 65 0 1 e 15698 65 0 1 f 15699 65 0 1 f 15700 65 0 1 f 15701 65 0 1 2 9 10 13 17 18 19 23 24 27 31 32 34 36 39 44 46 49 53 55 56 57 58 63 64 15702 65 0 1 4 6 7 8 10 16 17 19 22 26 27 29 30 31 32 35 36 37 38 41 42 46 50 51 52 53 56 57 60 61 63 15703 65 0 1 e 15704 65 0 1 2 6 7 12 14 18 20 23 25 28 30 32 33 34 35 37 38 40 42 43 44 45 51 53 54 55 62 64 15705 65 0 1 f 15706 65 0 1 0 3 5 6 8 9 12 14 16 17 18 19 21 23 25 28 31 32 33 35 40 41 42 43 49 50 51 52 55 56 57 59 61 63 64 15707 65 0 1 0 1 11 13 14 16 17 19 22 23 24 25 27 33 35 37 38 40 46 47 48 50 53 56 58 59 60 63 15708 65 0 1 e 15709 65 0 1 e 15710 65 0 1 e 15711 65 0 1 f 15712 65 0 1 e 15713 65 0 1 0 1 4 5 9 12 17 18 20 21 24 30 32 34 35 38 42 44 50 54 57 58 59 64 15714 65 0 1 f 15715 65 0 1 e 15716 65 0 1 f 15717 65 0 1 f 15718 65 0 1 f 15719 65 0 1 0 1 2 4 9 11 13 16 18 21 22 24 25 28 29 30 31 32 33 35 37 39 41 42 43 44 47 48 49 50 51 52 53 55 57 58 61 64 15720 65 0 1 0 1 6 7 9 10 11 12 15 18 20 21 22 24 26 27 28 30 34 36 37 40 42 43 44 46 48 49 51 58 61 62 63 64 15721 65 0 1 e 15722 65 0 1 0 2 3 4 5 7 8 10 12 13 15 19 23 29 31 33 34 35 36 38 39 41 44 45 50 51 52 56 57 58 59 60 61 62 63 64 15723 65 0 1 f 15724 65 0 1 0 1 2 3 4 5 7 9 13 14 15 16 18 19 20 22 23 24 25 27 28 30 33 36 37 40 41 42 45 46 49 52 53 54 55 56 58 60 61 62 64 15725 65 0 1 1 2 7 9 12 13 16 17 19 20 22 29 31 32 35 36 37 38 42 46 48 51 52 53 54 58 60 63 64 15726 65 0 1 e 15727 65 0 1 e 15728 65 0 1 e 15729 65 0 1 f 15730 65 0 1 e 15731 65 0 1 1 2 4 6 8 9 12 13 15 16 17 18 19 20 21 24 25 27 28 29 30 32 34 36 38 39 42 44 47 49 50 52 55 56 57 58 59 60 64 15732 65 0 1 f 15733 65 0 1 e 15734 65 0 1 f 15735 65 0 1 f 15736 65 0 1 f 15737 65 0 1 1 2 3 4 7 10 11 12 13 14 15 16 18 20 27 28 29 30 31 32 34 36 37 46 49 50 53 54 57 59 60 61 62 15738 65 0 1 0 1 3 5 7 13 14 16 19 20 21 22 23 25 26 28 30 31 35 37 38 42 43 45 46 47 50 53 55 56 57 58 59 61 64 15739 65 0 1 e 15740 65 0 1 0 3 4 5 6 8 9 11 12 14 18 19 22 26 28 31 34 37 38 39 42 44 45 47 48 50 52 53 54 57 60 61 15741 65 0 1 f 15742 65 0 1 0 1 3 4 7 10 11 12 13 14 16 18 22 24 25 29 30 32 34 36 39 40 42 43 44 45 46 47 49 51 53 55 56 63 15743 65 0 1 3 4 13 14 17 20 24 26 28 29 30 33 37 40 41 42 44 47 49 54 56 58 59 15744 65 1 0 e 15745 65 1 0 e 15746 65 1 0 e 15747 65 1 0 f 15748 65 1 0 e 15749 65 1 0 0 1 2 7 8 9 10 13 14 16 17 18 20 24 28 29 30 31 32 33 35 36 37 38 39 41 43 46 49 50 51 52 55 56 57 59 60 62 15750 65 1 0 f 15751 65 1 0 e 15752 65 1 0 f 15753 65 1 0 f 15754 65 1 0 f 15755 65 1 0 0 3 8 9 10 11 12 15 18 19 21 22 25 26 27 30 32 38 44 47 48 49 50 52 55 58 59 60 61 63 64 15756 65 1 0 3 5 7 8 9 18 19 20 21 22 24 25 28 32 33 36 37 38 39 40 44 48 50 51 53 56 57 58 59 15757 65 1 0 e 15758 65 1 0 0 1 2 3 4 5 6 8 9 15 20 21 23 25 27 29 30 31 32 33 34 36 38 39 41 43 45 46 47 53 55 56 57 59 60 62 15759 65 1 0 f 15760 65 1 0 0 1 4 5 6 7 9 11 12 16 20 24 29 30 31 32 33 36 37 40 44 46 48 50 51 59 62 63 15761 65 1 0 0 3 4 6 8 10 12 17 18 19 21 23 25 26 27 28 29 30 31 34 36 40 42 43 44 45 46 48 49 52 54 57 58 60 61 62 15762 65 1 0 e 15763 65 1 0 e 15764 65 1 0 e 15765 65 1 0 f 15766 65 1 0 e 15767 65 1 0 0 1 2 6 7 9 10 12 19 25 28 29 30 32 33 34 35 37 38 42 44 45 46 49 51 53 55 57 60 62 63 64 15768 65 1 0 f 15769 65 1 0 e 15770 65 1 0 f 15771 65 1 0 f 15772 65 1 0 f 15773 65 1 0 1 5 6 7 9 10 12 13 14 15 17 19 24 25 27 30 31 32 36 37 40 42 43 45 48 49 52 53 54 55 56 58 60 61 63 64 15774 65 1 0 2 4 7 12 13 17 20 22 24 27 29 30 31 33 35 37 38 39 43 44 45 48 49 51 56 58 61 63 15775 65 1 0 e 15776 65 1 0 0 1 2 3 4 6 7 8 9 10 16 17 18 21 22 23 24 27 29 32 33 34 37 40 42 44 45 46 48 49 50 52 53 54 55 56 61 62 63 64 15777 65 1 0 f 15778 65 1 0 0 3 4 6 13 15 18 23 24 25 26 27 29 33 34 37 38 40 42 44 45 49 50 51 53 54 56 57 60 61 15779 65 1 0 1 2 4 7 8 10 11 12 15 21 22 23 24 26 27 28 29 32 33 37 43 44 45 46 49 52 55 56 61 62 63 64 15780 65 1 0 e 15781 65 1 0 e 15782 65 1 0 e 15783 65 1 0 f 15784 65 1 0 e 15785 65 1 0 2 3 4 12 13 15 17 18 19 23 24 25 26 27 28 29 31 34 36 38 45 48 52 53 55 56 61 63 15786 65 1 0 f 15787 65 1 0 e 15788 65 1 0 f 15789 65 1 0 f 15790 65 1 0 f 15791 65 1 0 3 7 8 9 10 11 14 16 20 21 23 25 29 30 31 36 37 39 42 43 44 45 50 51 54 55 56 62 64 15792 65 1 0 1 6 8 11 12 13 14 16 17 18 19 20 21 22 27 29 31 32 33 34 37 38 41 42 43 44 45 48 49 51 52 55 56 57 58 59 60 62 63 15793 65 1 0 e 15794 65 1 0 0 1 4 5 6 7 8 9 11 12 13 14 15 17 18 19 20 21 22 23 25 27 30 34 35 38 39 42 47 49 50 52 54 58 59 60 61 62 63 15795 65 1 0 f 15796 65 1 0 0 1 2 4 5 7 9 11 12 13 15 16 18 21 23 24 26 27 29 31 32 36 37 41 44 45 50 51 54 59 61 62 63 64 15797 65 1 0 0 2 3 4 7 8 9 11 13 14 16 17 18 19 21 23 27 28 30 31 32 33 34 35 37 40 41 43 44 47 48 50 57 60 63 15798 65 1 0 e 15799 65 1 0 e 15800 65 1 0 e 15801 65 1 0 f 15802 65 1 0 e 15803 65 1 0 2 4 6 7 8 9 10 11 13 14 15 18 19 20 23 24 25 26 30 32 33 34 35 37 38 40 41 44 46 48 49 50 51 56 58 60 61 62 63 64 15804 65 1 0 f 15805 65 1 0 e 15806 65 1 0 f 15807 65 1 0 f 15808 65 1 0 f 15809 65 1 0 1 4 5 6 7 8 13 14 16 17 18 19 22 28 29 32 33 34 37 40 41 42 45 51 55 58 62 64 15810 65 1 0 0 1 4 5 7 8 9 14 16 17 18 19 20 21 24 25 26 27 28 30 31 32 35 37 38 41 42 43 45 52 53 54 55 56 57 58 59 61 15811 65 1 0 e 15812 65 1 0 0 2 4 5 6 7 8 9 12 13 14 16 19 21 24 26 28 29 30 34 37 40 41 42 43 45 46 51 53 55 56 57 59 60 64 15813 65 1 0 f 15814 65 1 0 4 6 9 10 11 12 15 16 17 24 27 30 31 32 33 34 35 37 39 40 42 44 45 48 49 50 52 55 56 57 58 62 15815 65 1 0 0 1 2 3 5 6 12 13 16 17 22 23 24 30 33 35 36 37 42 43 47 48 49 58 59 60 61 62 64 15816 65 1 1 e 15817 65 1 1 e 15818 65 1 1 e 15819 65 1 1 f 15820 65 1 1 e 15821 65 1 1 5 7 11 12 14 15 17 19 23 25 26 27 28 30 35 36 37 38 45 47 48 49 50 53 54 56 57 59 60 15822 65 1 1 f 15823 65 1 1 e 15824 65 1 1 f 15825 65 1 1 f 15826 65 1 1 f 15827 65 1 1 0 3 5 7 9 15 16 19 21 22 25 29 30 31 34 35 37 39 40 41 42 43 44 46 47 48 50 52 53 56 57 58 61 63 15828 65 1 1 0 2 3 4 6 7 9 10 11 12 13 15 16 17 18 19 22 23 24 25 27 30 32 33 35 37 39 40 44 45 47 48 51 52 54 55 60 62 15829 65 1 1 e 15830 65 1 1 0 3 4 6 7 8 10 11 12 13 18 21 22 23 26 27 28 30 31 34 36 37 40 43 44 45 46 49 50 51 52 54 55 56 58 59 60 61 62 15831 65 1 1 f 15832 65 1 1 0 2 4 7 8 10 14 16 18 21 23 24 25 28 29 30 33 34 35 38 39 40 41 43 48 50 51 53 54 55 56 59 60 64 15833 65 1 1 3 8 11 12 13 14 15 17 23 24 26 27 29 30 31 37 38 44 45 48 50 52 54 56 57 60 62 63 64 15834 65 1 1 e 15835 65 1 1 e 15836 65 1 1 e 15837 65 1 1 f 15838 65 1 1 e 15839 65 1 1 6 8 11 13 15 16 17 18 20 24 30 31 32 35 36 40 41 44 45 47 49 53 54 55 57 59 62 63 15840 65 1 1 f 15841 65 1 1 e 15842 65 1 1 f 15843 65 1 1 f 15844 65 1 1 f 15845 65 1 1 1 3 5 8 9 11 12 15 16 19 22 25 27 31 35 37 40 41 42 43 46 48 49 51 55 56 57 61 63 15846 65 1 1 0 1 3 5 8 10 11 12 14 15 17 19 20 21 22 23 26 29 33 34 35 36 38 40 41 43 44 46 48 49 51 52 53 54 57 58 59 62 63 15847 65 1 1 e 15848 65 1 1 0 1 2 4 8 9 12 13 15 18 20 23 24 32 34 35 36 37 39 40 41 43 44 47 48 51 53 56 57 58 60 63 64 15849 65 1 1 f 15850 65 1 1 1 2 4 5 7 8 9 15 16 17 21 25 27 32 34 35 36 37 38 39 40 44 45 48 50 55 57 60 61 62 63 15851 65 1 1 0 1 3 4 6 7 8 10 15 19 20 21 22 23 26 29 30 32 33 34 37 39 40 45 47 49 52 54 56 57 58 62 15852 65 1 1 e 15853 65 1 1 e 15854 65 1 1 e 15855 65 1 1 f 15856 65 1 1 e 15857 65 1 1 0 1 2 5 9 10 11 13 18 19 22 24 26 28 29 30 31 32 33 35 37 39 40 42 45 51 52 53 55 57 60 62 63 64 15858 65 1 1 f 15859 65 1 1 e 15860 65 1 1 f 15861 65 1 1 f 15862 65 1 1 f 15863 65 1 1 1 3 6 7 8 9 10 11 15 16 18 19 20 22 23 24 26 27 30 36 39 42 43 44 46 48 52 55 57 58 59 61 63 15864 65 1 1 0 2 3 5 7 9 11 12 13 17 21 22 24 25 26 28 30 31 32 33 34 37 38 39 40 42 43 46 47 54 55 56 59 60 62 63 64 15865 65 1 1 e 15866 65 1 1 1 4 10 13 14 16 18 20 21 28 33 34 38 39 40 41 43 45 50 52 53 54 58 62 63 15867 65 1 1 f 15868 65 1 1 0 1 2 4 6 8 9 10 11 14 15 18 20 21 24 25 26 27 33 38 41 42 43 45 46 50 56 60 62 15869 65 1 1 2 3 7 12 13 17 18 19 22 27 28 32 34 36 39 45 46 47 49 51 55 58 60 62 63 64 15870 65 1 1 e 15871 65 1 1 e 15872 65 1 1 e 15873 65 1 1 f 15874 65 1 1 e 15875 65 1 1 0 3 7 8 9 12 13 14 15 17 19 20 21 24 25 27 30 32 36 37 40 42 43 45 46 47 48 49 50 51 52 53 55 56 57 58 63 64 15876 65 1 1 f 15877 65 1 1 e 15878 65 1 1 f 15879 65 1 1 f 15880 65 1 1 f 15881 65 1 1 0 5 7 8 9 11 12 14 15 18 20 22 26 27 28 29 32 33 34 36 39 41 42 43 45 46 47 50 51 52 53 58 59 60 63 15882 65 1 1 3 4 6 7 9 12 20 27 28 32 33 35 38 39 43 45 47 50 52 56 57 59 60 61 63 64 15883 65 1 1 e 15884 65 1 1 0 3 8 10 13 14 15 16 17 18 24 27 28 29 30 35 36 37 39 40 44 45 47 48 50 52 54 55 57 58 60 61 62 15885 65 1 1 f 15886 65 1 1 3 6 7 10 12 17 19 20 23 26 30 35 36 38 40 42 43 44 49 51 54 55 56 60 62 64 15887 65 1 1 2 3 4 5 6 8 9 11 13 18 19 20 21 22 25 27 28 30 31 32 34 35 41 44 46 47 48 50 51 60 61 63 15888 211 0 0 e 15889 211 0 0 e 15890 211 0 0 e 15891 211 0 0 f 15892 211 0 0 e 15893 211 0 0 0 2 4 6 11 12 14 16 18 20 22 29 30 33 34 37 38 39 40 41 42 43 48 50 51 53 54 55 56 62 63 65 66 67 68 69 71 72 74 75 76 79 81 83 84 86 87 88 91 92 94 97 99 101 102 104 107 108 113 118 120 123 125 127 128 130 136 137 138 139 142 143 146 147 149 154 155 160 163 164 165 167 168 171 172 174 176 177 180 183 184 186 188 190 197 198 199 200 202 203 204 205 206 207 210 15894 211 0 0 f 15895 211 0 0 e 15896 211 0 0 f 15897 211 0 0 f 15898 211 0 0 f 15899 211 0 0 1 4 5 6 8 10 12 14 15 18 28 31 33 35 36 42 47 48 52 53 54 57 59 61 62 63 66 69 70 71 75 76 78 79 80 86 91 92 96 98 104 107 108 109 110 111 116 117 118 119 122 124 126 127 130 131 132 135 136 138 139 141 143 145 148 151 152 153 155 157 159 164 165 171 173 175 177 180 183 187 189 191 193 196 197 198 199 201 202 203 204 206 208 15900 211 0 0 0 1 2 3 7 8 11 12 15 18 20 21 22 23 26 27 29 32 33 34 35 38 39 42 44 45 49 51 52 54 56 58 59 71 72 75 78 84 87 88 90 92 93 95 97 99 100 101 102 103 105 110 111 112 115 116 117 118 122 123 126 127 128 131 134 135 139 140 142 143 144 145 146 148 150 151 152 153 154 156 157 159 161 162 163 164 165 166 168 169 170 171 173 175 176 180 183 191 194 196 197 199 200 202 203 206 207 15901 211 0 0 e 15902 211 0 0 1 2 3 8 9 10 11 12 13 14 16 17 18 19 22 25 29 30 31 32 33 34 37 38 40 43 46 49 51 52 57 58 59 60 61 63 64 66 69 70 71 74 75 76 77 81 82 84 86 88 89 90 91 92 95 96 99 102 104 105 107 111 124 125 127 129 130 133 134 139 140 141 142 143 144 148 149 150 154 156 158 161 162 163 165 167 168 169 170 171 172 173 174 175 177 180 182 183 185 190 191 192 194 202 205 206 207 208 15903 211 0 0 f 15904 211 0 0 4 6 8 9 11 12 13 14 16 18 20 24 25 27 28 32 33 34 35 41 46 48 49 50 51 53 56 59 60 61 62 63 64 65 66 70 71 75 76 79 81 82 83 84 87 88 89 90 91 92 93 94 95 97 99 104 105 107 108 110 113 114 116 119 120 123 124 128 129 132 133 134 135 137 142 143 144 145 147 148 149 150 151 154 158 160 161 162 163 164 166 170 171 174 183 185 186 187 189 192 196 197 198 203 204 208 209 15905 211 0 0 1 2 3 5 6 8 9 10 15 16 18 20 25 26 30 31 33 34 35 37 42 43 44 46 47 48 49 50 52 54 57 58 59 61 63 66 67 68 72 82 84 85 87 90 91 92 101 102 106 107 108 109 110 113 115 117 118 119 121 122 124 126 130 131 133 137 140 142 144 152 154 155 159 160 162 163 167 169 172 175 177 179 180 181 183 185 186 187 190 192 193 196 197 201 205 207 208 209 15906 211 0 0 e 15907 211 0 0 e 15908 211 0 0 e 15909 211 0 0 f 15910 211 0 0 e 15911 211 0 0 0 1 2 3 5 6 7 10 14 15 19 20 26 28 29 30 31 32 41 42 43 45 47 49 50 52 53 54 57 58 60 62 63 64 66 68 70 73 74 75 78 79 82 85 86 87 90 92 93 94 95 97 101 104 108 109 110 113 115 116 118 120 121 123 124 126 129 131 132 133 135 138 141 142 143 144 146 147 149 150 154 156 157 160 161 163 164 168 170 173 176 182 183 184 185 186 187 194 196 198 199 200 201 204 205 206 207 15912 211 0 0 f 15913 211 0 0 e 15914 211 0 0 f 15915 211 0 0 f 15916 211 0 0 f 15917 211 0 0 0 2 5 7 9 13 15 16 17 18 19 20 21 24 28 29 30 33 34 39 41 43 45 46 48 49 50 51 52 55 57 61 62 63 64 65 69 70 71 74 75 76 77 79 80 83 85 87 89 91 92 93 94 96 97 98 99 100 101 102 104 107 110 111 112 114 116 120 123 129 131 132 133 135 138 139 140 142 143 144 146 147 148 151 152 153 156 157 160 161 164 168 169 170 171 173 174 177 178 179 180 182 183 184 186 187 188 191 195 196 199 202 203 204 205 15918 211 0 0 2 9 10 11 12 15 17 25 27 29 30 31 33 35 41 45 50 51 52 53 54 56 65 70 74 75 77 79 81 84 86 87 88 93 94 95 96 97 99 103 104 106 107 109 110 111 112 115 116 118 119 122 123 125 126 128 129 133 135 136 137 138 140 141 142 143 144 146 147 149 151 154 155 157 159 160 163 166 169 172 175 176 181 183 186 187 188 190 191 192 193 194 195 197 199 200 201 205 207 209 15919 211 0 0 e 15920 211 0 0 0 1 3 5 6 7 8 10 12 13 15 17 20 21 22 25 32 33 36 41 42 44 47 49 51 52 53 55 56 57 59 60 61 63 64 68 70 73 74 80 83 85 86 89 92 96 97 98 99 101 102 103 104 105 106 108 110 111 112 114 116 121 122 126 129 130 132 133 135 136 138 139 141 142 144 147 148 149 152 154 155 156 162 163 165 166 167 169 170 171 174 176 179 181 188 190 191 192 194 195 197 198 199 201 203 208 209 15921 211 0 0 f 15922 211 0 0 1 2 3 5 6 7 8 10 11 14 16 20 21 22 23 30 31 34 35 37 38 41 42 44 45 46 47 49 52 56 57 58 63 64 65 66 68 69 70 71 73 79 82 84 88 90 92 93 94 95 96 97 99 101 102 103 104 109 110 111 113 114 115 120 130 131 133 134 136 140 147 148 149 150 152 154 156 160 162 165 168 169 170 171 173 175 178 179 181 188 189 194 195 198 201 203 204 206 207 208 210 15923 211 0 0 5 6 7 8 9 13 14 16 21 24 25 26 27 28 30 32 34 37 38 39 40 44 47 49 51 52 53 56 59 60 61 62 65 66 69 72 73 75 76 77 78 80 84 85 86 87 88 91 97 98 99 100 102 103 106 109 110 112 114 115 116 117 118 119 120 122 124 125 126 127 128 129 130 131 133 138 139 140 142 143 144 145 146 147 149 150 152 154 155 158 165 166 168 169 171 174 175 176 177 178 180 182 183 184 185 190 192 194 195 196 197 199 200 201 202 203 204 205 206 207 208 209 15924 211 0 0 e 15925 211 0 0 e 15926 211 0 0 e 15927 211 0 0 f 15928 211 0 0 e 15929 211 0 0 0 6 7 10 11 12 13 14 15 16 17 19 20 22 23 25 26 28 30 31 32 35 38 39 42 45 48 49 51 58 60 64 68 72 74 78 82 84 86 88 89 90 93 94 95 100 104 106 107 111 112 116 118 120 122 125 127 132 133 134 135 136 138 140 141 143 147 148 149 151 154 155 158 159 160 163 164 165 167 173 179 181 182 183 185 186 187 188 189 190 191 197 199 201 206 207 208 210 15930 211 0 0 f 15931 211 0 0 e 15932 211 0 0 f 15933 211 0 0 f 15934 211 0 0 f 15935 211 0 0 4 7 10 11 12 15 20 21 25 28 29 30 34 36 39 40 42 43 46 47 48 49 51 52 53 54 56 58 59 60 61 67 68 69 70 71 72 73 81 86 90 94 100 102 103 107 108 109 111 112 113 116 117 122 123 124 125 128 129 131 134 135 136 138 139 142 144 145 147 148 149 161 168 169 173 176 177 179 180 181 185 186 190 193 194 195 199 205 206 208 209 15936 211 0 0 0 1 2 4 5 6 8 17 20 21 22 27 31 32 35 41 42 43 44 48 49 50 51 52 53 57 60 61 63 65 66 68 70 76 77 78 79 81 82 87 88 89 91 93 94 95 97 101 102 103 106 109 110 111 113 114 115 116 118 119 121 122 123 124 125 128 129 130 132 133 140 148 151 154 155 160 161 162 163 164 165 166 167 172 173 174 176 179 181 182 183 184 186 188 189 191 192 195 198 200 202 203 204 207 208 209 210 15937 211 0 0 e 15938 211 0 0 3 5 6 7 8 9 12 14 16 22 26 32 33 36 40 42 43 44 45 47 50 51 52 53 58 59 60 63 64 65 67 68 71 72 74 75 77 78 79 81 82 84 86 89 90 94 96 98 99 100 102 103 105 106 107 108 114 115 117 119 120 123 134 135 137 138 139 145 147 148 149 150 152 157 158 159 160 164 168 174 175 178 180 181 182 183 187 188 190 191 192 193 195 197 203 204 206 209 210 15939 211 0 0 f 15940 211 0 0 1 4 5 6 7 8 11 16 18 19 25 26 27 29 31 33 36 40 41 46 47 48 50 52 55 58 63 67 68 73 74 79 80 83 84 85 86 90 92 93 95 98 100 102 106 108 111 112 113 114 115 118 119 120 121 123 124 126 128 129 131 136 137 138 139 142 143 146 147 148 149 151 153 154 161 166 167 169 170 171 174 175 176 179 181 182 183 184 185 186 187 194 195 196 197 198 200 204 205 207 209 210 15941 211 0 0 0 1 2 5 8 9 10 18 19 22 23 25 29 32 34 38 42 43 44 46 47 48 49 50 53 55 56 61 67 70 71 72 73 76 79 82 83 84 86 87 88 90 95 96 97 98 101 102 103 108 109 118 120 121 125 128 132 136 137 138 139 140 143 145 147 153 154 155 156 158 159 160 162 163 164 167 168 170 171 174 175 177 178 179 184 187 188 191 192 195 196 197 198 199 200 201 207 210 15942 211 0 0 e 15943 211 0 0 e 15944 211 0 0 e 15945 211 0 0 f 15946 211 0 0 e 15947 211 0 0 1 3 4 5 8 10 14 15 17 18 19 20 24 25 26 28 32 35 37 39 44 47 50 51 52 57 58 62 64 66 67 68 70 74 76 84 86 87 89 91 92 93 94 95 97 98 101 103 106 111 113 117 119 120 123 127 130 131 132 136 140 141 144 147 149 150 154 155 156 160 162 163 164 166 167 168 170 171 174 176 181 187 188 189 191 196 198 199 200 201 206 207 208 209 15948 211 0 0 f 15949 211 0 0 e 15950 211 0 0 f 15951 211 0 0 f 15952 211 0 0 f 15953 211 0 0 1 2 3 6 9 11 12 13 17 20 22 30 36 38 39 40 42 43 44 50 52 54 56 58 59 63 64 65 67 68 69 70 71 73 74 78 79 80 84 86 87 90 91 92 94 95 96 97 98 99 100 102 105 111 112 115 116 120 123 125 126 128 131 132 137 138 139 140 141 142 143 149 153 154 155 156 157 159 161 162 165 167 168 171 175 177 178 179 180 186 187 188 190 192 197 198 202 204 15954 211 0 0 1 3 4 5 6 7 8 9 10 11 12 16 19 20 21 22 27 28 29 30 37 39 40 42 43 48 51 54 55 56 59 63 64 69 72 76 77 78 79 81 87 88 89 90 93 94 99 100 101 103 104 105 107 108 111 113 117 122 123 125 126 127 128 130 131 134 138 139 140 142 143 147 149 151 156 159 160 161 162 165 172 176 177 180 181 182 183 188 189 191 192 195 197 199 201 202 206 208 210 15955 211 0 0 e 15956 211 0 0 0 2 3 7 9 10 12 15 23 24 29 30 32 33 34 36 43 45 46 47 49 51 55 56 57 60 62 63 64 65 67 68 72 73 76 77 79 80 82 84 87 91 92 94 95 96 97 98 99 101 104 109 114 117 119 121 122 124 126 127 129 130 131 132 136 137 138 142 143 144 146 150 151 152 153 155 158 159 160 161 162 163 165 167 168 172 173 174 177 178 179 181 182 187 199 200 201 204 206 209 15957 211 0 0 f 15958 211 0 0 3 4 6 7 8 14 15 16 19 20 22 24 31 32 33 34 35 37 40 41 42 47 48 49 50 51 53 56 57 60 61 63 64 67 68 69 71 72 73 75 77 78 80 81 82 88 89 90 91 92 94 95 96 98 99 101 102 103 104 106 109 110 112 113 116 117 118 119 120 121 122 123 125 126 127 128 130 136 138 139 141 143 145 148 149 151 152 154 155 158 160 161 165 166 167 168 169 170 172 176 178 179 184 187 188 191 192 193 202 203 205 209 15959 211 0 0 0 2 4 5 7 8 9 12 13 14 15 17 19 22 24 25 30 32 35 37 38 40 41 42 44 49 51 54 56 58 60 63 64 65 68 70 71 76 77 78 83 86 88 89 90 91 97 98 102 104 106 107 108 112 113 116 118 119 120 124 125 127 128 132 134 135 138 140 142 143 144 146 147 149 150 154 155 158 166 167 168 169 171 172 175 176 178 181 182 184 188 192 193 199 201 202 207 208 15960 211 0 1 e 15961 211 0 1 e 15962 211 0 1 e 15963 211 0 1 f 15964 211 0 1 e 15965 211 0 1 0 1 2 4 6 10 13 14 16 18 19 20 22 23 24 25 27 28 30 31 33 38 39 40 43 48 52 53 56 57 59 63 65 67 68 69 71 73 74 75 76 78 79 85 86 89 90 91 97 100 101 102 105 106 108 109 114 118 119 121 123 125 128 130 133 134 135 137 140 142 143 144 145 150 151 152 157 158 162 167 171 172 174 175 176 180 182 183 184 186 189 194 196 199 200 202 203 204 205 206 207 209 210 15966 211 0 1 f 15967 211 0 1 e 15968 211 0 1 f 15969 211 0 1 f 15970 211 0 1 f 15971 211 0 1 2 3 4 6 8 9 10 12 13 16 18 19 22 23 24 25 26 27 29 30 32 33 35 39 41 44 46 47 48 52 55 56 57 60 62 63 64 66 68 69 71 72 75 76 77 78 79 86 90 92 94 95 96 97 98 100 103 104 105 106 107 108 110 112 113 118 119 120 123 124 127 128 131 132 133 140 141 144 145 146 152 153 155 156 157 158 159 161 162 163 164 169 172 173 174 175 176 180 181 182 183 186 188 189 192 197 198 199 205 206 210 15972 211 0 1 1 2 5 7 8 12 13 20 23 24 26 27 28 30 34 35 38 40 42 43 44 52 53 55 58 62 63 64 65 70 73 74 76 78 80 82 83 85 87 91 92 95 97 99 102 103 104 105 107 109 111 114 124 125 126 127 128 130 131 133 134 136 137 139 140 141 142 145 146 148 149 150 154 156 157 159 160 161 162 164 166 174 175 182 183 193 194 197 198 199 203 204 207 208 209 15973 211 0 1 e 15974 211 0 1 1 2 7 8 9 11 14 15 16 19 20 21 26 29 30 32 33 34 39 42 43 44 45 49 51 52 56 58 62 63 68 71 72 74 75 83 84 85 87 89 91 93 94 95 97 101 105 110 112 115 117 118 119 120 122 126 127 130 131 132 137 138 141 142 147 150 151 155 156 164 165 166 167 168 171 176 180 181 186 188 190 192 194 195 198 200 204 206 207 208 209 210 15975 211 0 1 f 15976 211 0 1 0 1 3 5 6 7 10 11 16 17 18 20 24 25 26 27 28 29 30 31 32 33 34 36 37 42 43 44 46 47 49 53 54 56 57 58 59 60 61 63 64 68 69 70 73 74 77 79 80 85 87 88 90 95 102 104 105 106 108 109 110 111 114 115 118 119 120 124 125 129 130 132 134 135 137 139 140 142 145 146 147 149 150 155 156 157 161 162 165 167 169 170 172 181 182 188 189 192 194 196 198 201 202 206 208 209 210 15977 211 0 1 0 1 2 5 6 8 9 10 15 17 18 19 24 25 33 34 36 37 38 39 40 41 45 46 48 49 53 54 55 57 59 66 69 72 73 76 78 79 81 84 85 88 89 93 94 95 97 99 100 101 102 103 104 106 107 108 109 110 112 113 114 116 118 119 120 121 124 125 126 127 128 130 132 133 135 140 143 149 152 154 155 157 158 160 162 163 165 166 170 174 175 178 179 184 186 188 189 191 194 197 198 200 201 202 204 205 208 15978 211 0 1 e 15979 211 0 1 e 15980 211 0 1 e 15981 211 0 1 f 15982 211 0 1 e 15983 211 0 1 2 10 15 17 18 19 20 21 22 24 26 29 30 31 33 35 36 37 40 45 47 48 50 51 53 55 57 59 60 61 64 65 67 70 72 74 79 80 82 84 85 88 90 91 97 98 99 101 103 107 108 110 111 112 114 115 118 120 121 125 127 128 131 133 134 135 136 138 139 140 144 148 150 154 155 160 161 164 167 169 173 174 177 178 181 182 187 188 189 192 194 196 197 200 201 204 206 209 15984 211 0 1 f 15985 211 0 1 e 15986 211 0 1 f 15987 211 0 1 f 15988 211 0 1 f 15989 211 0 1 1 3 5 9 10 11 12 14 16 17 20 22 24 25 30 31 33 34 35 36 37 40 41 43 45 46 48 52 54 55 57 58 61 64 65 68 70 71 73 74 75 76 77 78 79 83 84 85 86 87 88 89 93 94 96 97 98 99 102 103 106 109 115 118 120 122 126 127 130 131 132 134 136 137 138 142 143 144 146 149 150 154 156 157 164 166 167 169 170 171 172 173 175 176 178 180 181 182 185 186 188 190 191 196 197 198 199 200 201 202 203 204 207 15990 211 0 1 3 7 8 9 11 13 20 23 27 28 29 32 36 37 39 41 42 43 45 47 49 53 54 60 61 62 63 65 67 68 69 70 74 75 78 79 80 82 85 86 90 92 97 101 103 106 107 108 109 110 111 113 114 115 116 117 119 120 121 123 127 131 133 134 135 137 138 139 140 141 142 145 146 155 156 157 158 161 162 163 164 165 166 167 169 170 173 175 179 180 183 184 185 186 187 188 191 194 196 202 203 204 206 208 209 15991 211 0 1 e 15992 211 0 1 2 5 8 9 10 11 13 16 17 18 21 23 24 26 29 30 31 33 35 36 39 41 44 45 46 47 48 49 52 53 55 57 60 63 66 68 69 70 72 74 75 77 78 82 85 86 88 90 91 94 95 96 98 99 101 102 105 107 111 112 118 121 122 123 124 125 126 127 129 131 132 137 139 141 142 144 145 151 152 154 155 158 163 164 167 170 174 179 181 187 188 191 194 196 200 201 202 203 207 208 209 210 15993 211 0 1 f 15994 211 0 1 1 3 7 12 13 16 19 22 24 27 28 30 32 33 34 39 40 42 43 46 47 48 50 51 52 53 55 56 57 58 59 60 61 63 64 70 72 73 74 77 79 82 84 87 88 90 91 94 95 99 100 103 106 111 116 117 119 122 124 125 128 129 131 132 136 138 139 140 142 144 145 146 148 151 152 153 156 157 158 159 160 161 163 165 166 169 172 173 175 176 179 182 186 190 191 194 195 197 199 205 208 15995 211 0 1 1 2 3 7 9 10 16 17 18 19 22 23 24 25 28 29 32 34 36 38 41 42 43 44 45 47 48 57 59 61 68 77 78 80 82 84 86 88 94 95 96 98 100 102 103 104 105 107 108 111 112 113 115 117 118 122 124 128 130 132 133 136 137 140 141 143 144 147 151 152 153 158 160 161 162 164 166 168 170 171 174 175 176 178 180 182 186 187 188 189 190 192 193 194 195 196 197 199 202 203 205 206 208 209 15996 211 0 1 e 15997 211 0 1 e 15998 211 0 1 e 15999 211 0 1 f 16000 211 0 1 e 16001 211 0 1 0 1 5 7 10 11 13 14 15 16 17 19 22 24 26 29 30 32 35 36 37 38 40 41 44 51 52 53 55 59 60 61 63 65 66 69 70 72 74 76 77 78 87 88 89 90 91 92 93 95 96 100 101 102 103 107 111 115 116 117 119 120 125 127 129 132 133 134 135 138 139 142 143 144 146 147 153 154 155 156 158 160 161 163 164 166 168 169 172 175 176 177 181 182 183 184 187 188 191 193 198 199 200 203 204 206 207 16002 211 0 1 f 16003 211 0 1 e 16004 211 0 1 f 16005 211 0 1 f 16006 211 0 1 f 16007 211 0 1 0 2 6 11 15 17 20 21 22 23 28 29 32 34 36 37 41 43 45 47 49 52 53 54 59 61 69 70 71 72 73 76 77 78 80 83 86 88 93 95 97 99 100 102 103 107 113 114 115 117 121 123 124 125 126 128 131 132 133 134 135 138 142 143 144 145 146 148 149 152 153 156 158 159 160 161 162 164 165 170 171 172 174 175 178 179 186 188 194 198 199 200 203 204 208 16008 211 0 1 1 5 7 8 9 13 15 17 20 21 22 24 25 26 28 31 33 35 36 37 38 39 42 43 47 48 49 51 52 53 55 56 59 60 61 62 64 67 68 72 76 77 79 80 83 85 86 88 89 91 92 93 94 101 102 105 107 108 109 110 115 116 117 119 120 122 123 125 127 128 130 133 134 136 140 142 146 152 154 156 158 159 160 161 163 164 169 170 173 174 175 177 180 181 182 183 184 185 186 187 188 189 190 191 192 194 195 196 202 210 16009 211 0 1 e 16010 211 0 1 2 3 6 9 12 13 14 15 18 19 23 25 27 29 30 32 33 39 41 42 45 47 50 51 54 55 57 58 60 61 62 63 64 66 67 68 70 73 74 75 76 78 79 82 83 84 86 87 89 92 94 95 96 97 98 99 103 107 108 110 112 113 119 121 122 125 126 128 129 133 137 140 143 145 148 149 152 158 162 165 166 167 168 170 171 172 177 178 181 185 190 191 195 200 202 203 204 206 209 16011 211 0 1 f 16012 211 0 1 0 1 2 3 4 5 9 13 15 17 21 24 25 29 30 31 32 33 34 35 36 45 48 49 50 52 55 57 59 60 61 62 64 65 70 72 74 78 79 81 85 87 89 92 94 96 97 98 101 102 104 105 106 111 117 119 121 122 124 125 126 127 128 129 133 134 136 138 139 140 141 142 145 146 147 148 149 152 155 158 159 160 161 164 165 166 167 169 170 172 174 178 184 185 186 189 192 194 195 197 199 204 208 16013 211 0 1 1 2 4 5 12 13 15 17 22 23 28 29 30 32 33 34 35 36 38 42 45 47 48 52 56 58 59 61 62 63 64 65 66 67 68 69 70 73 74 75 76 78 79 80 83 84 86 88 89 96 97 98 99 100 101 103 104 106 108 112 116 118 119 120 126 129 132 133 137 138 142 144 145 146 147 149 150 152 153 154 158 159 163 167 171 172 173 176 177 180 181 183 184 188 191 192 193 194 199 200 202 203 205 208 210 16014 211 0 1 e 16015 211 0 1 e 16016 211 0 1 e 16017 211 0 1 f 16018 211 0 1 e 16019 211 0 1 0 6 7 9 12 15 17 20 21 22 25 26 27 28 31 32 33 37 40 41 42 43 44 45 46 48 49 50 52 53 54 55 56 57 58 59 60 63 64 65 66 68 70 71 72 75 82 83 84 85 86 87 89 92 93 95 96 101 105 107 108 109 113 116 118 120 122 123 125 126 130 131 133 135 136 137 138 139 140 141 142 143 144 147 150 152 153 156 159 160 162 163 165 166 167 168 170 173 176 177 180 182 183 184 186 187 188 190 191 192 194 195 198 200 201 202 206 208 210 16020 211 0 1 f 16021 211 0 1 e 16022 211 0 1 f 16023 211 0 1 f 16024 211 0 1 f 16025 211 0 1 0 2 3 6 10 12 14 15 16 18 21 22 23 26 27 30 32 33 34 37 39 40 42 43 44 45 46 47 49 51 52 54 55 57 58 59 62 63 65 68 69 71 74 77 79 80 82 84 85 88 90 91 92 93 94 95 96 99 100 101 104 108 109 110 111 113 115 117 120 123 126 130 132 134 135 136 139 140 144 145 150 152 153 155 157 159 164 165 172 173 175 177 179 181 183 184 185 186 188 190 191 198 200 201 202 203 204 208 209 16026 211 0 1 1 2 4 7 10 12 17 18 19 20 21 22 23 24 25 27 28 29 32 33 37 39 42 44 53 56 59 65 66 67 70 71 72 73 74 78 79 80 81 84 86 87 88 89 90 94 95 96 98 100 101 106 107 108 109 111 112 113 115 117 118 120 121 122 124 127 128 131 133 135 136 139 140 141 143 144 145 147 148 151 152 153 155 157 158 168 169 170 171 172 177 179 181 182 184 185 188 190 191 192 193 195 197 202 204 206 207 210 16027 211 0 1 e 16028 211 0 1 0 1 2 3 4 5 7 10 13 14 17 21 25 36 40 41 42 44 45 47 48 49 51 52 53 56 57 58 62 63 65 66 70 73 74 75 76 78 79 82 83 88 89 90 93 94 95 96 97 102 108 110 111 112 113 114 116 118 119 121 124 130 132 134 135 136 139 140 142 143 144 145 147 148 150 154 157 158 159 164 167 168 170 171 172 174 175 178 180 181 184 191 192 194 195 196 198 200 204 205 209 16029 211 0 1 f 16030 211 0 1 0 1 2 4 6 9 12 13 16 21 23 24 26 27 28 29 31 32 34 36 37 38 40 45 46 47 52 53 55 58 59 62 63 64 65 70 74 75 76 77 78 80 81 82 83 84 85 86 87 90 92 93 97 98 99 101 103 104 105 107 108 111 113 114 115 116 118 120 121 122 123 124 132 135 137 138 140 142 145 154 155 159 164 170 172 173 175 177 179 180 181 182 184 185 191 192 195 196 197 203 204 205 206 208 16031 211 0 1 0 1 3 4 9 10 12 15 22 25 27 28 29 32 35 36 37 41 45 46 50 51 52 53 56 57 59 64 65 66 67 70 71 78 79 81 84 85 87 89 90 91 93 96 98 101 103 107 108 110 116 117 120 121 123 124 125 127 128 130 135 136 138 140 142 143 144 147 151 153 154 162 163 168 170 172 176 177 179 182 183 185 187 191 192 197 202 203 204 208 209 16032 211 1 0 e 16033 211 1 0 e 16034 211 1 0 e 16035 211 1 0 f 16036 211 1 0 e 16037 211 1 0 3 8 9 13 14 15 17 26 27 31 32 33 34 37 39 40 41 44 46 47 51 52 53 54 55 57 58 59 61 63 64 67 69 70 71 72 76 81 84 87 88 89 90 92 95 98 99 101 102 103 105 109 110 111 112 113 114 115 118 124 125 126 129 130 133 135 136 137 138 139 140 141 142 143 144 145 146 147 148 152 153 155 158 159 161 163 164 165 168 171 174 175 176 178 179 180 183 184 185 186 189 192 197 198 199 202 204 207 208 210 16038 211 1 0 f 16039 211 1 0 e 16040 211 1 0 f 16041 211 1 0 f 16042 211 1 0 f 16043 211 1 0 0 1 2 3 4 5 6 8 13 14 15 18 20 22 24 26 27 32 35 38 40 42 43 46 47 48 50 51 52 53 54 55 57 59 60 61 63 65 66 67 69 70 71 73 74 75 77 82 83 85 86 87 88 90 91 94 95 99 102 105 109 110 111 113 114 115 116 118 120 121 123 125 126 127 131 132 135 136 144 145 147 149 152 155 157 158 159 162 163 165 166 170 171 172 175 179 181 182 187 189 190 195 199 200 202 203 205 207 209 16044 211 1 0 0 1 4 5 7 8 12 13 14 18 21 26 28 29 30 31 34 36 39 40 41 43 44 48 49 50 52 53 54 58 59 62 63 64 65 67 70 74 75 76 79 81 84 85 86 91 92 93 95 96 97 99 109 110 111 112 114 115 117 118 119 125 126 127 128 130 131 132 137 139 140 142 144 145 147 150 151 154 155 157 158 159 161 162 164 169 174 176 177 181 183 191 192 194 195 196 201 202 203 210 16045 211 1 0 e 16046 211 1 0 0 2 4 6 10 17 18 19 21 24 25 29 30 33 34 37 39 40 42 47 48 52 53 55 56 57 60 62 66 75 77 78 82 90 92 94 95 96 100 101 104 105 108 109 110 113 116 117 118 123 124 126 127 128 133 134 136 137 138 139 140 141 142 146 150 152 155 158 160 162 164 167 172 174 176 178 180 181 182 183 184 186 188 189 190 191 194 196 198 200 202 203 204 205 207 16047 211 1 0 f 16048 211 1 0 1 2 4 8 11 13 14 15 16 18 20 23 25 26 34 36 37 38 39 41 43 44 50 53 55 56 58 62 63 64 66 67 69 71 72 73 77 78 79 81 83 84 87 88 90 92 93 94 95 97 98 99 100 105 106 108 109 112 114 116 119 120 122 123 124 125 126 128 129 130 131 132 138 141 142 143 145 149 152 155 160 162 163 164 169 170 171 172 174 178 180 182 183 185 186 187 190 193 199 204 206 207 209 16049 211 1 0 4 9 11 14 16 18 20 22 24 27 28 32 33 34 36 38 40 44 46 47 48 49 51 52 55 57 58 63 70 72 73 74 75 78 79 81 82 85 87 88 90 91 92 94 95 96 100 101 102 103 104 106 108 109 112 113 115 116 117 118 119 120 121 122 123 125 126 127 129 132 133 135 140 142 143 146 148 151 153 154 156 159 161 164 168 169 170 171 175 176 179 180 182 183 188 189 192 194 196 198 199 204 205 207 16050 211 1 0 e 16051 211 1 0 e 16052 211 1 0 e 16053 211 1 0 f 16054 211 1 0 e 16055 211 1 0 0 1 3 5 7 8 10 15 17 20 21 22 24 25 26 27 28 31 34 35 39 40 44 46 50 54 60 63 64 66 68 71 72 74 75 76 77 81 83 87 88 89 90 101 102 105 106 108 113 115 117 119 120 123 124 125 129 131 134 135 137 138 142 147 149 150 155 161 163 167 172 174 176 180 181 185 190 197 199 204 206 209 210 16056 211 1 0 f 16057 211 1 0 e 16058 211 1 0 f 16059 211 1 0 f 16060 211 1 0 f 16061 211 1 0 1 3 5 6 7 10 11 12 13 14 17 20 21 24 25 26 29 30 31 32 38 40 41 43 44 46 48 51 53 56 59 62 64 67 68 71 73 75 76 79 80 81 82 84 86 91 92 94 100 101 102 104 107 108 110 111 113 115 116 121 126 127 128 130 131 133 134 135 138 140 143 145 146 150 151 153 154 155 157 159 160 162 165 167 168 169 171 173 174 175 176 177 178 181 182 183 184 185 187 188 189 190 191 193 194 195 198 203 205 208 210 16062 211 1 0 0 2 3 4 5 7 10 12 13 15 18 19 20 22 24 25 26 28 30 31 32 33 35 37 38 39 40 41 43 47 48 51 60 62 67 69 70 72 73 74 78 80 84 88 89 90 93 94 95 102 103 105 107 111 112 115 116 117 119 120 121 124 126 127 131 132 134 135 136 137 138 141 143 146 149 151 152 155 156 158 160 162 165 168 170 171 173 174 175 177 179 180 182 183 184 185 187 190 191 193 195 196 197 207 16063 211 1 0 e 16064 211 1 0 0 1 3 4 7 10 12 13 14 15 17 19 21 23 24 25 26 27 34 36 40 41 42 43 44 45 46 48 51 52 53 54 55 56 57 58 59 61 63 74 76 77 79 80 81 82 83 86 89 92 96 100 101 106 110 112 113 118 120 121 122 123 126 128 131 133 135 137 138 139 141 142 144 146 147 155 156 160 161 164 166 169 170 171 172 173 174 175 177 178 179 183 184 186 188 189 190 192 194 196 197 198 200 201 202 203 204 205 207 208 210 16065 211 1 0 f 16066 211 1 0 0 2 3 7 10 11 13 15 16 19 20 22 23 24 25 27 28 30 31 32 33 37 38 41 43 44 45 48 49 51 54 57 61 62 64 66 67 69 71 73 74 78 84 86 89 91 92 95 96 97 98 100 104 110 111 116 117 119 120 121 122 123 125 126 128 130 131 132 134 135 136 140 142 144 149 152 157 158 161 162 165 166 176 177 178 179 180 183 187 190 191 193 195 196 201 202 203 207 209 210 16067 211 1 0 4 5 6 12 15 17 18 19 21 22 24 25 27 30 32 34 36 38 40 44 45 48 51 52 55 57 58 61 62 63 65 71 72 73 75 76 77 79 80 81 82 83 85 86 88 89 90 91 92 93 94 96 99 100 101 102 103 104 106 107 110 115 127 128 129 130 131 132 133 134 135 137 138 139 141 142 143 147 149 150 151 152 154 162 165 167 171 176 177 180 182 183 185 186 187 191 195 196 197 201 203 205 208 16068 211 1 0 e 16069 211 1 0 e 16070 211 1 0 e 16071 211 1 0 f 16072 211 1 0 e 16073 211 1 0 1 8 11 12 13 15 16 20 23 24 26 27 28 33 34 37 38 44 45 47 50 52 56 59 60 61 63 64 65 68 70 74 79 80 84 85 86 88 91 94 98 101 102 103 105 107 109 110 111 112 115 120 122 124 125 126 128 129 130 132 133 136 137 140 143 144 145 149 154 157 158 160 161 162 163 164 167 169 170 171 174 176 180 181 187 188 190 191 192 193 195 196 197 203 204 205 206 207 210 16074 211 1 0 f 16075 211 1 0 e 16076 211 1 0 f 16077 211 1 0 f 16078 211 1 0 f 16079 211 1 0 4 5 6 7 8 10 14 15 17 19 21 22 23 24 25 26 32 33 34 35 36 37 38 42 44 45 48 49 51 52 54 55 57 61 62 64 65 68 70 72 73 74 75 76 79 82 84 85 86 87 88 92 94 95 102 106 108 110 111 112 113 121 127 131 132 135 136 144 145 146 148 150 154 155 158 159 160 162 169 170 171 172 175 176 177 179 187 188 189 190 193 194 195 198 199 201 202 204 205 207 208 209 210 16080 211 1 0 1 3 5 6 8 9 15 16 17 18 20 21 24 27 30 35 39 41 47 53 55 56 57 58 62 64 65 67 70 74 76 79 80 81 84 85 87 88 89 90 91 93 96 97 99 106 108 111 118 119 121 122 123 124 132 133 134 137 141 143 145 151 154 155 156 157 161 162 164 165 168 169 170 172 175 180 181 183 185 186 188 190 194 198 199 201 203 206 207 208 16081 211 1 0 e 16082 211 1 0 0 3 4 6 11 12 13 14 16 17 19 24 25 28 29 30 36 37 38 41 43 44 45 47 48 50 52 53 56 57 58 61 62 63 64 66 67 69 70 72 77 81 83 84 85 87 88 94 97 98 99 100 101 105 106 110 111 114 118 119 120 123 127 130 131 133 136 138 140 141 142 143 144 145 148 151 154 155 156 157 158 159 161 162 164 166 168 169 170 171 172 173 174 175 177 178 183 184 185 186 188 189 194 196 197 198 199 200 202 207 16083 211 1 0 f 16084 211 1 0 0 7 9 11 13 15 16 19 20 21 25 26 27 29 33 34 35 37 39 40 41 45 49 50 52 54 55 58 59 63 64 65 66 68 70 71 72 77 78 79 81 82 85 87 90 91 93 94 96 98 99 100 101 102 103 107 109 111 112 114 115 118 123 125 132 134 136 138 142 143 144 145 146 149 150 151 153 154 155 156 161 162 165 166 168 169 179 180 186 190 191 192 200 201 205 207 208 209 210 16085 211 1 0 0 7 8 11 13 15 17 20 22 23 24 25 27 28 31 32 33 34 38 40 45 46 47 56 57 58 59 63 68 70 72 73 74 76 77 78 80 85 86 89 91 93 94 97 98 99 101 103 104 108 110 111 115 116 120 121 125 126 127 128 129 130 138 140 144 145 147 149 155 158 160 162 164 165 166 170 172 175 177 181 182 183 186 187 189 193 194 195 196 197 201 202 206 208 210 16086 211 1 0 e 16087 211 1 0 e 16088 211 1 0 e 16089 211 1 0 f 16090 211 1 0 e 16091 211 1 0 2 5 11 14 17 18 19 20 21 22 24 25 28 29 32 34 38 39 40 42 44 45 46 53 54 56 57 58 59 60 63 67 68 69 71 74 75 76 77 82 85 86 88 92 93 98 103 104 106 107 108 109 114 115 116 119 120 121 123 124 126 128 129 130 137 138 140 142 148 149 151 152 154 155 156 157 159 160 164 165 168 170 171 172 176 177 178 179 180 181 182 183 185 186 192 193 196 197 198 204 207 210 16092 211 1 0 f 16093 211 1 0 e 16094 211 1 0 f 16095 211 1 0 f 16096 211 1 0 f 16097 211 1 0 0 2 3 4 5 9 10 13 14 15 17 18 19 23 25 28 31 32 34 36 38 40 42 45 47 48 50 53 54 55 56 58 59 60 62 66 68 69 70 71 77 79 80 81 84 87 94 95 96 97 103 104 107 110 114 117 119 121 123 124 125 126 127 128 134 136 140 146 147 149 150 152 155 157 159 161 163 166 173 175 178 181 182 183 186 192 193 196 201 202 203 204 206 209 210 16098 211 1 0 0 1 2 3 5 7 9 11 12 13 14 15 16 20 23 26 27 28 29 31 32 35 37 38 40 41 44 47 49 53 54 55 57 58 62 67 69 72 74 75 76 78 83 86 90 91 92 93 94 98 99 102 104 105 108 110 112 114 115 116 117 119 122 123 124 125 128 130 133 136 137 138 139 140 142 143 144 145 146 148 151 154 156 158 159 161 163 164 165 169 177 178 179 182 183 185 189 191 192 193 194 197 198 199 200 205 206 207 208 210 16099 211 1 0 e 16100 211 1 0 0 1 2 3 5 6 7 8 9 11 12 13 22 23 24 25 26 27 32 36 38 39 42 43 47 48 52 55 56 57 58 62 71 72 74 75 77 78 81 85 88 90 91 93 95 96 97 101 103 105 106 107 108 109 110 112 114 115 119 120 121 122 124 127 128 129 132 135 138 140 141 142 143 145 146 149 152 155 156 157 159 161 162 167 169 172 175 177 179 180 181 182 183 186 190 191 192 193 194 198 199 203 206 207 16101 211 1 0 f 16102 211 1 0 4 5 11 14 15 18 21 25 29 30 31 37 38 41 43 47 48 50 54 55 58 59 61 62 63 64 69 70 72 76 77 78 80 81 82 86 87 88 89 90 91 92 93 94 95 97 98 99 100 101 103 104 107 113 115 118 121 124 125 126 128 129 130 131 132 134 135 136 139 141 143 144 145 151 152 153 154 155 156 157 158 159 160 161 162 163 165 167 168 169 170 172 176 177 178 180 182 183 184 185 186 187 188 189 191 192 194 195 196 198 199 201 203 205 16103 211 1 0 9 10 12 13 15 16 18 19 20 21 23 24 28 30 32 34 36 37 38 40 42 43 45 52 53 54 55 59 60 61 63 65 67 68 69 71 73 74 75 76 81 82 84 85 88 89 91 92 95 97 98 100 109 110 111 112 115 117 118 120 122 124 130 131 132 135 139 141 142 143 146 147 149 150 152 153 154 155 158 159 160 161 162 164 165 169 171 172 174 176 178 181 182 184 186 188 189 192 193 194 195 196 201 203 205 210 16104 211 1 1 e 16105 211 1 1 e 16106 211 1 1 e 16107 211 1 1 f 16108 211 1 1 e 16109 211 1 1 0 3 5 6 7 8 9 10 12 13 16 17 18 20 22 23 24 25 27 30 31 32 34 35 37 38 39 40 41 43 44 47 49 53 56 59 60 61 62 63 65 66 68 71 73 74 75 77 78 80 81 82 84 85 86 87 89 90 92 93 96 97 98 99 102 103 104 106 110 114 117 119 120 121 123 124 125 126 128 129 132 133 134 135 137 139 141 143 147 150 151 154 157 158 159 161 164 168 169 172 173 174 179 180 182 184 187 190 191 197 198 202 205 207 208 209 16110 211 1 1 f 16111 211 1 1 e 16112 211 1 1 f 16113 211 1 1 f 16114 211 1 1 f 16115 211 1 1 0 1 3 4 5 7 8 9 10 11 12 13 14 17 18 19 22 26 29 30 32 33 36 37 39 41 44 46 49 52 54 56 57 58 60 65 66 70 71 76 78 80 82 83 85 88 92 93 94 96 97 104 105 106 107 108 111 112 113 114 116 120 121 122 124 125 126 127 128 130 132 134 135 136 138 139 140 141 142 143 144 145 146 147 154 160 168 169 171 172 175 178 179 180 181 185 186 190 194 195 197 200 201 202 203 206 207 208 209 210 16116 211 1 1 0 1 4 8 9 11 14 16 17 18 20 21 23 25 26 28 31 36 37 38 41 43 46 48 49 50 51 53 55 56 58 60 63 64 69 70 71 72 76 78 79 81 83 84 85 90 91 92 94 96 98 99 101 102 106 108 109 110 111 114 118 119 120 121 122 124 125 126 127 128 129 130 132 136 138 140 141 146 147 154 156 157 158 159 160 161 163 165 167 168 169 171 172 173 175 178 179 180 182 183 185 192 193 194 201 203 204 205 206 207 209 210 16117 211 1 1 e 16118 211 1 1 0 1 2 3 7 8 15 16 18 20 21 22 23 25 26 28 31 33 34 35 38 40 42 44 45 46 49 50 52 54 57 58 61 63 64 66 69 70 73 75 76 84 87 96 97 98 100 101 103 105 106 111 112 113 117 119 120 121 127 132 133 136 138 140 146 147 153 157 159 161 162 166 172 173 174 175 177 178 182 184 186 190 193 194 195 198 199 200 202 203 205 206 210 16119 211 1 1 f 16120 211 1 1 0 1 2 4 5 7 9 10 11 12 13 15 17 18 19 20 22 23 25 27 29 30 31 32 33 36 39 42 46 47 49 50 52 53 54 59 62 65 66 67 70 71 72 73 74 76 77 78 80 81 83 87 88 89 90 94 99 100 102 105 106 108 109 113 115 118 121 122 125 126 127 130 131 132 139 140 141 144 145 150 153 154 156 157 159 161 162 166 167 168 170 171 176 177 178 181 182 184 185 186 188 194 195 196 199 200 203 205 209 210 16121 211 1 1 0 1 7 8 12 13 14 16 18 19 24 25 30 35 36 37 38 39 42 43 45 50 51 52 54 58 59 60 61 62 66 67 69 70 72 73 76 77 82 84 85 86 87 90 93 94 97 102 104 106 107 110 111 112 113 116 117 122 123 124 125 129 130 131 132 133 135 138 139 141 142 144 145 146 147 148 156 158 165 169 171 172 173 174 176 177 179 180 184 185 186 187 189 193 194 196 197 198 199 200 202 203 205 16122 211 1 1 e 16123 211 1 1 e 16124 211 1 1 e 16125 211 1 1 f 16126 211 1 1 e 16127 211 1 1 1 2 3 4 6 8 9 10 12 14 17 20 21 22 23 24 25 26 31 34 36 37 38 42 44 45 46 48 51 60 61 65 66 67 68 72 74 75 76 77 79 81 85 86 90 94 97 99 101 105 108 110 111 118 119 121 123 129 132 133 134 135 136 137 143 144 145 151 153 157 158 162 165 167 168 172 173 174 176 178 181 182 183 184 187 191 192 194 195 198 199 200 206 209 210 16128 211 1 1 f 16129 211 1 1 e 16130 211 1 1 f 16131 211 1 1 f 16132 211 1 1 f 16133 211 1 1 0 1 2 3 6 10 12 15 16 18 19 22 23 24 26 28 31 33 35 39 40 42 43 44 46 48 49 51 54 58 60 61 62 64 66 68 70 71 73 78 79 80 81 82 85 87 90 93 100 105 107 108 110 111 113 117 119 120 122 127 128 129 131 134 135 138 140 143 147 149 152 156 157 158 159 160 162 164 165 167 171 172 174 175 176 178 184 185 187 188 190 191 192 197 201 203 206 208 209 16134 211 1 1 1 2 4 5 6 8 11 13 15 16 20 21 22 23 26 30 31 33 36 38 39 40 41 42 43 44 46 47 48 49 51 52 56 58 60 61 62 64 67 70 73 75 77 78 80 81 82 83 87 88 89 92 94 99 101 103 104 106 107 115 116 117 118 120 121 122 125 126 127 128 130 133 135 137 138 139 143 145 146 148 150 153 154 155 157 162 167 170 171 172 174 179 180 184 189 190 191 192 193 197 198 201 203 204 205 209 16135 211 1 1 e 16136 211 1 1 1 2 3 4 8 9 12 14 16 20 21 23 24 26 28 29 32 35 37 40 41 42 43 46 47 48 51 53 61 62 63 66 67 68 69 70 71 72 73 75 78 80 82 83 84 88 89 92 95 97 98 100 101 103 105 106 107 109 110 111 112 113 114 115 120 121 122 123 124 125 126 128 130 131 134 135 136 147 157 158 161 163 164 165 167 169 171 174 175 176 178 180 182 183 184 185 187 188 189 192 195 197 198 199 200 201 202 205 208 16137 211 1 1 f 16138 211 1 1 0 1 3 6 9 10 11 12 14 16 17 19 23 24 26 27 31 32 33 34 36 37 38 40 41 42 44 45 46 47 48 53 54 57 61 66 68 69 70 71 73 76 81 82 83 84 85 87 88 91 93 95 97 100 101 102 104 106 109 110 111 112 113 114 120 121 123 124 126 129 132 135 136 143 144 149 150 152 153 155 157 159 160 161 163 165 166 167 168 169 176 177 178 180 183 185 186 187 188 189 190 191 192 194 195 196 198 199 203 204 206 209 210 16139 211 1 1 0 3 4 5 7 8 10 13 16 17 19 23 25 26 27 28 29 31 32 33 34 35 36 40 42 43 48 52 58 60 63 65 66 67 71 74 75 76 78 79 80 82 83 84 86 87 89 95 98 99 102 103 104 105 106 108 109 111 112 115 118 119 121 123 125 126 127 130 131 132 134 138 142 146 147 148 149 150 152 159 160 161 166 167 168 169 170 171 173 175 178 180 181 182 183 186 187 188 193 194 195 197 199 200 202 206 207 209 16140 211 1 1 e 16141 211 1 1 e 16142 211 1 1 e 16143 211 1 1 f 16144 211 1 1 e 16145 211 1 1 4 5 8 10 12 13 18 24 27 28 32 33 34 36 37 38 39 41 42 44 46 49 51 53 57 60 61 62 63 64 67 71 76 77 80 81 82 83 84 87 88 91 93 94 95 97 98 99 102 104 106 110 111 113 114 115 116 118 119 120 122 123 125 126 127 128 129 130 131 132 133 135 136 141 143 144 146 147 149 150 152 153 158 160 161 163 165 166 168 169 170 172 173 175 177 179 180 182 183 184 186 189 190 192 193 196 198 199 206 207 16146 211 1 1 f 16147 211 1 1 e 16148 211 1 1 f 16149 211 1 1 f 16150 211 1 1 f 16151 211 1 1 1 3 4 5 6 9 10 11 12 13 15 16 18 20 22 23 24 26 28 30 31 34 35 37 40 43 46 47 48 51 52 54 57 58 61 67 69 72 74 76 77 79 81 82 83 84 90 93 94 95 98 101 102 105 109 111 114 116 118 119 120 121 124 127 128 129 132 136 137 138 140 144 145 146 149 151 153 161 162 164 166 167 169 171 173 176 177 178 179 180 182 187 188 189 193 194 197 200 201 204 205 208 16152 211 1 1 3 4 5 9 10 11 13 15 16 20 22 25 26 27 29 31 33 34 37 38 39 40 42 49 50 53 54 55 59 61 62 63 65 67 68 69 70 71 73 75 76 77 78 80 81 82 85 86 87 90 91 93 94 95 96 97 98 100 101 110 111 112 113 116 119 120 122 123 126 130 133 134 135 139 142 145 146 147 150 151 152 153 154 157 158 159 167 170 171 172 175 178 179 180 181 182 183 184 185 187 190 191 192 193 199 200 201 202 203 206 207 208 209 210 16153 211 1 1 e 16154 211 1 1 0 1 3 8 14 18 21 22 23 26 28 30 31 35 36 37 42 44 45 46 48 49 55 56 57 58 59 61 63 65 68 69 70 71 73 75 81 82 83 85 87 88 90 95 97 99 101 102 103 104 106 108 109 110 112 114 115 118 120 121 122 124 128 129 132 136 137 138 139 140 142 143 144 145 146 149 150 153 154 158 161 162 163 165 167 168 170 171 172 173 174 175 176 182 183 185 189 190 192 197 201 203 204 206 208 209 210 16155 211 1 1 f 16156 211 1 1 0 3 6 7 9 10 11 12 16 20 22 23 25 27 28 31 32 33 39 41 42 46 47 48 52 53 55 56 57 58 59 63 65 71 73 75 78 79 81 84 85 87 89 90 91 94 97 98 99 102 103 106 111 113 116 122 123 125 127 128 135 137 139 141 142 143 144 148 149 150 153 154 155 161 163 165 166 167 168 169 170 172 173 176 177 178 179 180 181 182 183 185 186 187 191 193 194 201 204 205 206 207 209 16157 211 1 1 4 6 7 8 13 15 17 19 24 25 27 29 31 33 34 37 39 41 43 44 45 46 49 50 51 58 59 63 64 69 71 72 73 78 79 81 82 84 85 86 89 90 91 92 94 95 96 105 106 107 108 110 114 119 122 124 125 127 131 132 133 137 138 141 142 143 146 147 148 150 152 153 155 156 157 158 167 171 173 174 177 181 182 184 188 190 192 193 195 197 198 199 201 202 203 204 205 210 16158 211 1 1 e 16159 211 1 1 e 16160 211 1 1 e 16161 211 1 1 f 16162 211 1 1 e 16163 211 1 1 0 2 3 5 7 8 14 16 17 18 19 21 22 23 24 25 29 31 34 40 41 43 48 56 58 66 67 70 72 76 79 80 81 82 83 84 87 88 89 91 95 96 100 103 104 105 106 107 111 114 116 124 125 127 129 130 134 137 138 143 144 146 147 148 151 152 153 155 156 157 163 164 166 169 170 171 174 176 177 180 183 185 187 188 189 193 194 197 198 199 200 202 204 206 210 16164 211 1 1 f 16165 211 1 1 e 16166 211 1 1 f 16167 211 1 1 f 16168 211 1 1 f 16169 211 1 1 1 3 4 7 12 13 19 21 22 23 26 27 30 31 32 34 35 36 38 40 42 43 48 55 58 59 61 62 68 72 75 80 81 85 86 87 88 89 90 94 95 96 98 99 100 103 104 106 108 111 113 116 119 120 121 128 131 132 136 138 139 142 143 147 150 153 154 155 159 161 162 166 171 172 174 175 177 178 179 181 183 184 186 187 188 190 193 196 198 200 201 207 210 16170 211 1 1 0 3 4 5 6 7 10 11 13 15 16 18 21 22 23 24 25 27 29 31 32 33 34 35 38 39 40 41 42 44 45 49 50 51 52 55 57 59 61 62 64 68 71 73 74 76 78 83 84 85 86 91 93 95 97 103 109 110 111 114 116 118 120 123 125 126 127 128 132 136 137 138 140 141 142 144 145 146 147 149 151 152 153 154 156 157 158 159 163 164 165 168 169 170 172 173 174 175 178 179 182 185 188 191 192 193 194 196 198 201 202 203 205 206 207 210 16171 211 1 1 e 16172 211 1 1 1 3 4 8 9 11 14 15 16 18 21 29 30 31 34 36 37 38 39 40 42 45 48 50 52 54 56 60 64 65 66 67 68 69 71 72 74 76 78 79 81 86 88 91 92 93 95 96 99 100 101 103 108 113 114 115 119 120 121 122 125 129 130 132 135 136 137 139 142 143 145 146 149 151 152 157 162 164 165 167 168 170 171 172 173 174 178 179 182 187 188 189 193 194 196 197 199 202 204 206 208 16173 211 1 1 f 16174 211 1 1 1 2 3 7 11 12 18 19 20 21 22 24 29 30 31 33 35 36 37 38 40 41 42 43 46 48 49 51 52 55 57 59 61 63 64 65 66 67 68 70 71 73 75 81 83 84 85 86 88 89 92 93 95 96 97 103 105 106 107 109 112 113 115 116 119 122 126 127 131 132 133 134 139 141 144 145 146 147 148 150 152 153 155 156 158 160 162 163 165 167 169 171 172 173 174 175 177 178 181 182 183 186 188 189 190 191 193 194 195 199 201 204 210 16175 211 1 1 0 1 3 5 6 7 9 10 14 15 16 19 23 25 26 31 33 34 35 38 39 44 47 49 50 51 53 54 55 56 57 59 60 62 65 66 67 69 70 73 74 79 81 82 83 84 86 87 89 90 93 95 99 106 108 109 112 113 115 117 118 119 120 122 127 128 129 132 133 134 136 138 139 141 142 144 152 154 155 156 157 158 159 160 162 163 164 165 166 167 169 170 171 172 173 175 176 177 180 183 184 186 191 192 194 195 196 197 198 202 206 208 16176 224 0 0 e 16177 224 0 0 e 16178 224 0 0 e 16179 224 0 0 f 16180 224 0 0 e 16181 224 0 0 0 1 2 3 7 9 12 17 19 21 22 23 24 25 26 28 29 30 31 32 33 34 36 42 43 44 49 51 53 56 58 59 62 63 65 68 70 72 73 75 76 77 81 82 83 84 87 88 90 91 92 93 94 95 100 101 102 103 104 105 106 107 108 110 112 113 115 117 120 123 124 126 129 130 132 133 134 135 136 137 140 142 143 145 146 147 148 151 156 158 161 164 166 170 172 173 176 177 181 183 185 187 188 193 195 200 202 203 205 207 208 209 212 213 214 215 218 222 223 16182 224 0 0 f 16183 224 0 0 e 16184 224 0 0 f 16185 224 0 0 f 16186 224 0 0 f 16187 224 0 0 0 2 4 6 7 8 10 11 14 18 19 21 22 23 24 25 29 33 35 38 39 40 42 44 45 46 47 50 51 53 56 57 58 60 61 63 64 65 66 69 71 75 77 78 79 81 83 84 85 86 87 88 89 92 93 95 96 98 99 102 107 111 113 116 119 121 123 125 126 129 132 134 139 140 141 144 145 146 147 151 153 154 155 158 159 166 167 168 169 170 171 172 179 180 181 183 186 187 188 189 190 191 192 193 197 199 200 202 203 205 207 211 213 214 215 217 218 219 222 16188 224 0 0 2 3 6 8 10 14 15 16 18 19 21 22 23 26 27 28 29 32 36 37 39 42 43 44 45 46 51 54 55 56 58 59 64 67 69 71 74 77 78 79 82 85 89 90 94 95 96 98 103 104 106 108 109 112 114 116 117 118 120 121 122 124 127 128 129 130 131 134 135 137 142 144 146 147 149 150 153 154 157 159 160 162 165 167 171 172 175 176 182 183 192 194 197 199 201 202 204 207 208 209 210 211 213 214 217 218 219 16189 224 0 0 e 16190 224 0 0 0 1 4 5 6 9 10 12 15 16 18 20 22 25 26 27 33 38 39 41 44 45 46 47 48 49 51 53 55 56 58 59 61 63 64 65 66 69 73 74 77 81 83 84 85 88 93 95 99 100 105 106 107 108 113 114 115 120 121 122 123 124 126 130 132 134 135 137 138 139 141 143 144 146 148 150 153 155 156 160 162 165 167 168 170 173 175 177 179 181 184 185 187 189 192 194 201 202 203 204 205 206 208 209 212 213 214 215 216 220 221 223 16191 224 0 0 f 16192 224 0 0 0 5 7 8 10 11 14 20 23 25 26 32 33 34 36 41 43 46 47 52 53 58 59 60 66 67 69 71 72 73 74 76 77 81 82 83 84 89 93 94 96 101 104 106 107 108 119 121 123 125 129 130 131 132 136 139 140 142 144 146 148 152 154 158 159 160 161 162 163 168 170 171 172 173 175 178 179 184 186 189 192 196 198 199 200 201 202 203 204 206 207 209 210 211 212 215 218 219 16193 224 0 0 1 2 5 6 9 12 13 16 19 21 23 26 27 28 38 39 41 42 44 46 47 51 53 54 55 57 58 63 64 65 67 69 70 71 72 73 74 75 76 77 78 80 86 87 89 90 91 92 94 95 97 98 99 100 102 103 105 106 109 110 112 114 116 117 118 121 125 127 128 129 130 131 133 134 135 137 138 139 140 141 143 144 146 147 148 149 150 152 154 163 167 170 171 174 177 178 180 181 182 183 185 189 190 193 197 201 206 207 208 209 211 212 215 217 222 223 16194 224 0 0 e 16195 224 0 0 e 16196 224 0 0 e 16197 224 0 0 f 16198 224 0 0 e 16199 224 0 0 4 6 10 11 12 15 17 19 20 21 22 24 26 28 29 30 31 32 35 36 40 41 42 43 47 49 50 52 53 55 58 59 60 61 62 63 66 67 68 71 74 75 76 79 84 85 86 88 89 91 92 94 96 97 99 102 104 108 109 111 112 113 115 124 129 131 133 135 141 144 148 150 151 152 155 156 157 162 163 166 167 168 171 175 176 179 180 181 182 183 185 186 187 188 189 194 195 197 198 200 204 207 208 211 214 215 217 218 219 220 221 16200 224 0 0 f 16201 224 0 0 e 16202 224 0 0 f 16203 224 0 0 f 16204 224 0 0 f 16205 224 0 0 3 4 6 7 12 14 15 16 18 20 21 23 25 26 28 33 34 36 37 41 42 43 45 46 50 51 53 54 55 56 57 58 59 63 69 70 75 78 80 81 83 84 86 87 89 90 91 93 97 98 102 103 104 106 108 109 110 116 118 120 121 122 124 126 127 131 132 134 135 136 139 141 143 145 146 147 148 149 151 152 156 157 159 161 162 168 169 172 174 175 177 178 180 183 189 191 192 193 197 198 200 201 202 205 207 208 210 211 212 216 217 221 16206 224 0 0 0 1 4 6 10 11 15 16 18 19 20 22 24 26 29 30 31 32 37 38 39 41 43 45 46 52 54 55 56 59 61 62 66 67 69 71 72 73 76 78 80 81 82 87 88 90 93 94 95 101 103 104 105 107 108 109 111 112 116 119 120 125 129 130 131 132 134 135 136 137 138 139 140 142 143 145 150 152 154 155 159 160 163 164 167 170 175 179 180 183 186 187 188 191 192 193 197 201 202 203 205 206 207 209 210 215 216 217 219 221 223 16207 224 0 0 e 16208 224 0 0 0 1 4 5 6 8 10 13 15 16 19 20 21 22 23 24 27 29 30 32 35 39 40 44 47 48 49 50 56 57 59 60 63 64 65 66 67 68 69 70 71 74 76 78 80 81 82 86 87 88 89 90 91 95 96 98 99 101 102 105 106 107 108 109 111 115 116 118 119 121 124 125 127 130 133 134 135 137 138 143 144 145 146 153 154 156 159 160 164 169 170 171 174 175 179 180 181 188 189 191 192 193 195 203 204 205 206 212 214 216 218 220 221 223 16209 224 0 0 f 16210 224 0 0 0 2 3 4 8 9 11 12 13 17 18 22 23 24 27 29 30 33 37 38 41 44 45 51 52 54 56 60 61 64 65 67 71 77 79 80 81 83 87 93 94 99 102 103 104 106 108 110 111 114 115 116 117 118 121 122 123 124 128 132 134 135 137 143 144 146 150 151 154 156 157 159 161 162 164 165 168 169 170 172 175 176 179 180 181 182 189 191 192 195 197 200 202 203 204 209 212 216 217 218 220 221 223 16211 224 0 0 1 4 5 6 8 11 12 13 17 20 21 23 24 26 27 30 32 34 35 36 37 39 42 43 45 47 48 49 50 51 52 55 56 58 59 60 63 64 67 69 70 77 82 84 86 88 89 91 93 95 97 98 99 100 103 104 105 109 110 111 112 113 115 120 121 122 124 129 130 136 137 138 141 145 147 148 150 151 153 155 159 163 170 171 175 180 187 188 190 192 196 197 198 199 201 202 203 205 209 210 213 214 215 217 218 221 222 16212 224 0 0 e 16213 224 0 0 e 16214 224 0 0 e 16215 224 0 0 f 16216 224 0 0 e 16217 224 0 0 3 6 7 8 9 10 12 14 18 19 22 23 25 27 28 31 32 33 34 36 37 39 40 45 46 47 51 52 54 56 59 60 61 62 63 65 68 69 73 74 75 76 77 81 86 88 90 91 92 93 94 98 102 105 107 109 111 112 114 115 116 117 120 123 124 125 130 132 134 139 140 143 144 146 147 149 157 158 159 164 169 170 176 177 178 180 184 185 190 191 192 194 195 198 199 201 205 206 208 209 210 211 212 214 215 216 218 220 221 16218 224 0 0 f 16219 224 0 0 e 16220 224 0 0 f 16221 224 0 0 f 16222 224 0 0 f 16223 224 0 0 3 4 6 7 11 12 15 16 17 19 22 24 25 26 27 28 29 31 34 35 36 38 39 40 42 43 44 45 47 48 49 50 59 62 64 65 67 70 71 72 74 75 82 83 84 87 90 91 92 93 95 96 97 98 99 102 104 105 106 108 110 112 113 114 116 120 123 126 132 134 135 136 137 139 143 149 150 153 154 155 157 159 164 165 167 168 169 170 171 173 174 178 179 182 183 185 186 187 188 190 191 192 193 196 199 201 202 204 205 206 209 210 211 213 214 215 216 217 218 219 220 222 223 16224 224 0 0 1 7 9 12 14 15 16 17 18 20 22 23 25 30 31 35 36 41 42 44 47 49 51 54 55 56 58 61 62 63 67 68 69 72 73 75 77 78 79 80 81 82 86 88 89 92 94 96 102 106 107 108 109 110 111 112 114 115 116 117 119 120 121 122 123 125 127 131 132 140 143 144 146 147 149 152 155 158 159 160 162 163 164 169 170 173 175 177 178 180 182 183 184 185 186 189 195 197 199 200 201 204 205 208 209 210 211 215 219 220 16225 224 0 0 e 16226 224 0 0 0 1 4 7 9 14 18 19 20 22 24 25 27 29 30 32 35 36 37 38 42 43 44 48 50 51 52 53 56 57 60 63 65 66 68 69 75 76 79 80 82 84 86 87 90 95 101 104 105 107 109 111 112 115 118 119 120 121 122 127 130 131 137 138 144 145 150 152 153 157 158 159 161 165 166 167 169 171 173 175 176 177 185 188 191 193 195 198 199 200 201 202 204 210 211 212 214 215 219 220 221 222 16227 224 0 0 f 16228 224 0 0 3 4 6 7 9 10 11 15 16 18 21 23 25 26 28 29 30 35 38 39 41 42 43 44 46 47 51 53 54 56 58 62 64 65 70 72 73 75 76 77 78 81 83 84 88 89 90 91 93 96 97 99 105 108 109 110 112 114 115 123 124 125 126 127 128 130 131 132 136 139 142 145 147 152 155 159 160 162 163 166 168 172 174 177 182 184 186 192 194 197 198 201 209 210 211 213 214 217 219 221 222 16229 224 0 0 0 1 4 6 10 14 15 16 17 20 25 26 27 28 29 31 32 33 35 36 37 42 43 45 48 49 50 51 54 55 57 58 59 60 62 63 64 65 66 67 68 72 73 74 76 78 83 84 86 87 89 90 93 96 99 100 102 105 106 110 111 112 113 114 115 117 118 120 121 122 125 129 130 131 133 135 136 138 140 141 143 144 147 152 154 158 160 161 164 165 166 167 169 171 172 173 174 179 181 185 186 189 190 198 199 202 204 206 208 210 214 217 218 221 222 223 16230 224 0 0 e 16231 224 0 0 e 16232 224 0 0 e 16233 224 0 0 f 16234 224 0 0 e 16235 224 0 0 3 4 6 12 14 15 17 18 19 20 21 26 27 30 31 32 34 38 39 40 43 46 47 48 49 50 51 53 55 57 58 61 65 66 67 70 72 80 81 84 85 88 90 93 95 96 100 102 106 107 108 109 111 112 113 115 116 117 121 122 123 124 127 129 134 135 136 138 139 145 147 149 151 152 155 157 158 159 160 164 165 166 167 169 171 172 173 176 177 180 181 182 184 189 193 194 195 196 197 198 205 206 207 208 209 212 214 215 216 221 222 16236 224 0 0 f 16237 224 0 0 e 16238 224 0 0 f 16239 224 0 0 f 16240 224 0 0 f 16241 224 0 0 7 9 11 13 14 16 17 18 19 21 23 24 25 29 30 31 35 37 39 41 42 43 44 47 49 51 52 53 54 55 56 57 58 60 61 64 69 71 74 76 77 78 80 82 83 85 88 91 93 98 103 105 106 108 109 111 114 115 119 120 121 122 123 125 127 129 131 135 138 143 144 146 152 153 156 163 164 165 170 171 172 174 175 176 177 180 183 185 189 190 191 196 197 198 201 202 205 207 209 213 215 217 219 220 223 16242 224 0 0 1 4 5 6 8 9 10 11 14 15 20 21 24 27 28 29 30 32 33 34 35 36 39 42 43 44 45 46 47 48 51 53 57 58 59 61 64 65 66 67 71 76 79 81 82 83 86 87 89 90 91 92 93 94 96 97 101 103 104 105 106 107 108 110 112 113 119 121 123 124 127 129 131 133 140 142 143 147 150 151 154 156 160 161 162 164 166 168 170 171 172 173 176 177 183 185 189 192 194 196 197 198 199 202 206 208 210 213 214 215 216 220 221 223 16243 224 0 0 e 16244 224 0 0 4 5 9 11 14 17 19 20 22 23 24 26 27 28 32 33 35 36 37 38 40 42 43 44 45 48 49 55 58 60 62 64 67 68 70 71 72 73 74 76 77 78 79 80 81 83 86 87 88 89 92 93 94 95 98 101 102 104 105 106 107 108 113 115 119 121 124 127 128 129 132 136 139 140 141 145 146 147 150 154 155 156 157 158 160 162 163 175 180 182 185 188 190 191 195 196 197 201 205 209 210 212 213 214 216 217 218 223 16245 224 0 0 f 16246 224 0 0 0 1 2 3 6 7 8 14 15 17 20 22 26 28 31 32 33 34 37 43 44 46 48 51 55 56 59 62 66 67 70 72 75 76 77 78 79 83 84 85 88 89 93 94 95 97 99 103 104 106 107 109 111 113 115 116 117 119 120 121 123 124 126 130 132 135 136 140 141 142 144 147 149 153 156 157 162 163 164 166 170 173 174 177 178 179 180 182 189 198 199 203 206 209 211 215 217 218 219 220 16247 224 0 0 0 1 4 8 9 11 12 17 19 20 27 28 31 33 34 36 38 39 40 41 42 43 48 51 52 53 57 62 65 66 70 73 75 76 79 80 82 83 90 92 93 94 96 97 99 103 108 109 111 114 116 118 119 120 121 123 126 132 136 137 139 141 142 143 144 145 147 150 151 152 154 156 157 158 159 161 165 169 171 172 174 175 177 179 182 186 193 194 195 199 201 202 203 205 206 207 208 210 211 215 216 217 222 223 16248 224 0 1 e 16249 224 0 1 e 16250 224 0 1 e 16251 224 0 1 f 16252 224 0 1 e 16253 224 0 1 2 3 4 6 7 9 10 11 13 14 16 17 25 27 30 32 33 37 39 40 42 45 48 49 50 51 55 56 57 58 60 61 62 63 64 65 68 69 71 74 78 79 82 84 87 88 89 90 91 92 93 94 96 97 98 99 100 101 103 108 112 114 116 117 119 120 122 123 124 127 129 132 133 137 138 140 142 143 144 152 153 155 159 161 164 166 170 172 173 174 178 179 180 187 188 189 190 192 193 194 195 197 199 202 203 204 205 210 211 212 215 216 217 218 219 16254 224 0 1 f 16255 224 0 1 e 16256 224 0 1 f 16257 224 0 1 f 16258 224 0 1 f 16259 224 0 1 2 3 4 6 9 12 13 14 15 17 18 19 20 22 23 25 27 29 30 31 32 33 34 35 39 43 45 46 48 49 51 55 57 60 63 65 66 67 69 71 73 74 75 76 77 80 81 85 86 88 90 92 97 99 100 101 108 110 111 113 114 116 117 118 121 122 126 132 133 134 136 137 138 139 142 143 145 148 150 153 154 156 157 158 160 163 164 167 170 171 172 173 177 180 184 186 187 188 189 191 192 193 194 195 196 198 200 201 202 204 206 213 220 221 223 16260 224 0 1 2 4 5 6 8 9 10 11 13 14 16 18 22 23 26 31 37 38 40 41 43 48 50 53 54 55 57 59 61 63 65 66 67 68 69 73 75 76 77 79 82 83 85 86 87 88 90 94 95 96 97 98 99 100 104 105 107 108 109 110 111 113 114 115 116 118 119 120 122 123 124 125 126 127 128 131 132 133 134 135 138 140 145 146 147 149 150 153 155 156 157 158 159 164 166 168 169 170 171 173 174 176 177 180 182 183 184 185 186 187 188 189 192 193 194 195 197 202 203 205 208 209 210 211 212 214 215 217 218 222 16261 224 0 1 e 16262 224 0 1 1 3 5 6 7 9 10 12 13 14 15 16 18 19 20 22 26 27 28 29 31 32 33 34 36 37 39 40 41 43 44 46 47 48 51 52 56 58 63 64 67 68 70 71 80 81 82 83 84 86 87 89 91 93 94 96 97 98 99 101 102 103 104 109 110 113 114 116 117 120 125 128 133 137 138 139 140 142 145 146 148 149 150 151 153 155 156 157 158 159 165 166 168 171 172 174 177 180 186 189 193 194 196 197 198 199 207 209 210 211 216 218 219 221 16263 224 0 1 f 16264 224 0 1 0 2 5 9 10 11 20 21 22 24 25 28 29 30 33 34 35 36 39 40 41 42 46 48 50 52 53 54 55 56 61 62 63 64 65 66 69 72 78 81 82 84 85 89 90 91 92 93 94 96 98 104 105 106 111 115 116 117 122 125 126 129 130 131 135 137 141 143 144 146 147 151 152 154 156 157 158 162 163 164 166 167 169 171 172 173 175 178 181 188 192 196 197 199 200 201 202 203 204 207 211 213 216 217 218 219 220 223 16265 224 0 1 0 1 4 5 7 8 13 15 17 18 20 22 23 24 25 26 27 28 30 31 32 33 35 36 37 40 41 42 44 50 52 53 54 55 57 58 60 63 66 70 73 74 79 80 82 84 85 88 89 90 91 94 95 96 99 100 101 103 104 105 107 109 110 111 112 113 115 116 117 120 124 125 133 136 139 141 142 144 149 150 151 155 159 160 161 162 164 166 168 169 171 172 175 176 187 188 189 191 192 195 196 201 205 206 213 214 215 218 16266 224 0 1 e 16267 224 0 1 e 16268 224 0 1 e 16269 224 0 1 f 16270 224 0 1 e 16271 224 0 1 0 1 4 6 14 16 18 20 21 25 27 29 31 33 38 40 42 44 45 46 48 49 50 51 52 53 56 57 61 63 65 67 76 78 79 80 82 83 86 88 90 92 93 96 97 99 103 104 105 106 107 108 109 110 111 113 114 115 116 117 119 120 121 123 124 125 127 128 129 130 133 134 135 136 137 138 139 140 142 143 146 149 152 153 155 156 157 158 159 162 163 165 166 168 170 171 172 173 174 181 182 185 188 190 192 193 194 196 197 199 202 208 209 210 212 213 214 216 220 222 16272 224 0 1 f 16273 224 0 1 e 16274 224 0 1 f 16275 224 0 1 f 16276 224 0 1 f 16277 224 0 1 1 2 7 8 10 11 12 15 23 24 25 30 31 32 33 36 37 39 42 43 44 46 48 49 51 53 54 55 56 60 63 65 68 70 72 73 76 77 78 79 80 82 85 89 90 91 94 97 98 101 105 106 108 111 112 113 114 115 116 119 120 121 122 125 126 128 130 135 136 139 140 148 149 151 152 154 155 156 157 159 162 168 172 173 174 178 179 181 182 183 185 186 190 191 192 193 198 200 201 202 203 204 205 207 210 213 218 219 220 221 222 223 16278 224 0 1 0 1 2 5 8 12 13 18 22 23 24 25 26 27 35 37 39 41 44 45 50 51 53 58 59 60 64 65 68 69 71 72 73 75 76 77 78 80 81 82 86 87 88 89 90 94 96 97 99 100 101 102 105 108 111 112 116 117 119 120 123 124 125 127 128 129 131 135 139 140 141 142 143 145 148 149 150 151 154 155 157 158 160 162 167 168 170 178 181 184 185 188 191 194 195 196 198 200 202 203 204 208 210 211 212 215 217 221 222 223 16279 224 0 1 e 16280 224 0 1 1 2 3 7 8 10 11 12 16 19 20 21 22 23 24 25 28 30 31 33 34 40 43 44 45 47 49 51 52 54 55 58 59 61 62 63 64 65 67 69 78 83 84 86 87 88 89 90 92 93 94 96 100 101 102 108 110 111 112 114 115 116 117 118 119 121 122 124 125 126 127 132 137 138 141 148 149 150 152 153 154 156 160 163 164 165 166 168 169 173 174 175 176 178 179 181 183 184 187 188 189 193 195 196 199 200 201 211 213 214 219 220 16281 224 0 1 f 16282 224 0 1 1 3 4 6 7 9 11 13 15 16 17 20 23 25 26 30 33 39 41 45 49 50 52 56 58 60 61 62 63 64 70 71 75 79 81 82 86 89 99 100 102 104 105 106 110 111 113 114 117 118 119 122 123 127 128 129 130 131 133 134 136 137 142 145 146 147 148 149 152 156 166 167 172 174 177 178 179 180 183 184 187 188 189 194 196 199 200 201 204 206 209 214 216 218 219 220 16283 224 0 1 0 1 2 8 9 10 11 15 20 22 23 25 26 28 30 31 35 36 37 38 39 40 41 42 45 50 52 53 58 60 63 64 66 67 69 71 75 79 80 83 84 85 86 89 90 91 94 96 97 98 99 102 103 104 106 107 108 109 110 111 113 116 118 119 121 122 124 125 126 127 128 129 130 133 135 136 137 138 139 140 141 144 145 151 152 155 157 158 160 163 165 166 168 169 170 171 172 174 178 179 180 182 183 184 185 186 188 190 191 192 194 196 197 199 200 204 206 208 209 211 218 220 221 222 223 16284 224 0 1 e 16285 224 0 1 e 16286 224 0 1 e 16287 224 0 1 f 16288 224 0 1 e 16289 224 0 1 0 1 2 3 6 8 10 11 12 13 15 16 17 21 22 25 26 27 29 30 33 35 41 44 45 46 48 50 51 55 58 59 60 65 68 69 70 72 73 74 76 77 78 81 83 85 92 94 95 100 102 103 107 112 113 116 117 118 120 121 123 126 127 130 133 135 138 140 142 143 146 148 149 151 152 153 154 158 159 160 161 164 166 167 168 169 171 172 176 179 181 182 183 184 188 190 191 194 195 196 197 198 199 200 203 204 205 206 207 211 214 216 217 218 219 221 16290 224 0 1 f 16291 224 0 1 e 16292 224 0 1 f 16293 224 0 1 f 16294 224 0 1 f 16295 224 0 1 0 3 8 9 10 11 12 13 14 19 21 24 26 28 30 31 32 34 36 38 39 41 42 44 46 48 49 52 53 55 56 59 60 61 62 63 65 67 68 70 72 75 76 78 79 82 84 87 88 90 91 93 94 95 96 98 99 100 102 103 104 107 108 110 111 112 113 115 118 120 121 124 128 129 136 137 143 144 145 146 153 154 155 156 157 159 160 161 164 166 167 172 173 175 178 179 180 182 183 185 186 188 190 191 196 198 199 200 204 205 211 212 214 215 216 217 219 223 16296 224 0 1 1 2 4 5 7 9 12 14 15 16 17 18 21 24 25 26 28 34 37 38 40 42 44 50 51 54 57 58 62 63 66 67 69 73 74 75 79 80 82 84 85 86 88 89 92 94 96 97 100 107 109 110 113 120 121 123 127 129 133 134 135 136 137 138 140 141 142 143 147 149 152 153 155 157 158 159 160 163 164 165 166 167 168 171 174 175 177 178 179 180 181 184 185 187 188 190 191 192 193 194 195 196 198 199 200 202 206 207 209 210 212 214 220 16297 224 0 1 e 16298 224 0 1 1 5 9 10 11 13 14 15 17 21 22 23 27 31 33 34 35 36 39 42 43 44 46 49 50 52 56 60 61 62 65 69 73 77 78 79 80 83 84 87 88 90 91 93 95 96 97 98 100 102 105 107 108 111 112 113 114 115 120 123 125 126 128 129 130 131 132 134 138 140 148 149 150 153 155 156 160 161 163 167 168 172 173 174 175 180 182 186 187 193 195 196 197 198 199 200 203 206 207 210 213 214 215 216 217 218 220 222 16299 224 0 1 f 16300 224 0 1 0 2 3 5 6 8 9 10 13 14 15 16 17 20 21 23 24 25 27 30 32 33 35 36 37 39 40 42 44 45 46 47 48 51 53 55 56 57 58 59 60 61 63 64 66 69 74 77 80 81 82 89 92 94 96 97 98 100 102 103 105 107 110 113 114 115 117 118 119 120 122 123 124 125 127 128 135 136 137 138 141 142 144 145 148 150 151 153 156 157 158 159 160 165 170 171 172 173 175 176 178 180 181 184 185 187 190 192 193 194 196 198 200 201 202 203 204 208 210 214 216 220 222 16301 224 0 1 1 2 3 10 11 16 18 20 22 23 24 28 30 31 33 34 35 38 41 43 45 49 50 53 54 58 61 63 67 71 73 74 75 76 83 86 87 88 89 94 95 96 98 100 101 104 109 110 111 115 116 118 122 123 124 125 126 130 133 134 138 139 143 144 145 146 149 150 151 152 153 155 159 160 161 162 164 165 168 170 172 174 177 178 179 181 182 184 190 193 196 197 198 199 201 202 203 205 207 208 210 214 216 217 223 16302 224 0 1 e 16303 224 0 1 e 16304 224 0 1 e 16305 224 0 1 f 16306 224 0 1 e 16307 224 0 1 1 4 6 8 9 12 13 14 15 17 18 19 21 22 23 24 28 29 32 33 34 35 36 37 38 39 40 43 44 48 50 53 55 62 63 65 66 69 72 74 75 76 79 80 82 87 88 91 92 94 96 97 101 102 105 107 109 110 112 113 116 117 118 119 122 125 129 130 131 132 133 135 137 138 139 140 141 142 143 146 149 153 154 155 156 163 164 165 166 168 169 172 176 178 179 181 184 187 190 191 192 194 195 196 197 199 200 204 206 208 211 213 217 219 223 16308 224 0 1 f 16309 224 0 1 e 16310 224 0 1 f 16311 224 0 1 f 16312 224 0 1 f 16313 224 0 1 2 4 5 7 12 13 14 15 18 19 24 25 28 29 32 33 34 35 36 38 40 41 42 43 44 48 51 53 56 57 58 59 61 64 67 74 76 78 80 85 86 87 88 90 93 94 99 101 102 103 105 106 107 109 112 113 116 119 120 121 122 124 125 126 128 130 133 136 140 141 142 143 144 147 150 153 158 161 162 163 164 167 169 172 173 175 177 178 179 182 183 187 188 189 192 194 199 200 203 205 207 208 211 212 214 215 216 217 218 219 220 221 222 223 16314 224 0 1 1 3 6 8 10 15 16 17 18 21 24 26 27 29 32 33 37 42 44 45 47 48 51 53 55 56 58 62 64 65 68 69 74 79 80 82 83 86 89 91 92 94 95 101 103 104 109 118 119 120 122 123 125 126 127 130 131 132 134 135 136 140 144 145 146 148 151 152 153 154 156 157 158 159 161 162 168 171 172 173 174 175 176 177 178 179 182 183 185 187 188 190 191 193 195 198 199 200 202 203 205 206 209 210 211 212 213 214 217 16315 224 0 1 e 16316 224 0 1 0 4 7 8 9 10 12 13 18 21 22 23 24 25 26 27 32 33 35 36 37 38 39 40 41 42 46 47 48 49 54 57 61 62 63 66 68 71 75 76 77 78 79 80 82 85 87 88 89 93 95 97 101 102 103 104 107 111 115 117 118 121 122 123 124 125 126 128 136 137 138 139 140 142 144 148 150 153 156 159 160 161 172 174 175 182 183 186 187 188 190 191 193 195 197 199 202 204 205 208 209 210 213 220 16317 224 0 1 f 16318 224 0 1 3 8 10 11 13 14 16 17 18 19 21 23 25 26 27 32 35 36 37 39 42 45 46 47 50 51 54 55 57 58 59 60 61 63 66 74 75 76 77 78 81 83 87 88 91 93 94 95 100 101 102 104 105 106 107 108 109 111 113 114 115 121 123 124 125 127 129 141 143 144 145 149 151 152 153 155 156 157 158 160 164 165 166 171 173 176 177 179 180 181 182 183 184 186 190 191 192 197 198 199 204 205 206 207 208 210 211 214 215 216 217 219 222 223 16319 224 0 1 3 9 10 12 13 15 16 17 18 21 24 25 27 28 30 35 36 37 40 42 43 44 45 46 47 48 49 52 54 57 62 63 64 65 67 68 69 70 72 73 75 76 77 78 79 80 84 85 86 87 88 92 93 94 95 96 98 99 101 110 114 117 128 129 132 136 137 140 142 144 146 147 149 153 154 155 157 160 161 163 165 166 168 170 171 172 175 176 177 178 180 181 182 184 187 189 192 193 195 196 200 201 203 210 214 215 216 218 222 16320 224 1 0 e 16321 224 1 0 e 16322 224 1 0 e 16323 224 1 0 f 16324 224 1 0 e 16325 224 1 0 0 3 10 11 12 16 18 19 20 21 22 23 25 27 34 35 36 40 43 44 45 51 54 55 57 58 59 61 62 63 65 66 69 70 71 74 75 77 79 81 82 87 89 90 91 92 93 96 98 99 101 102 105 107 108 109 110 111 112 116 117 120 123 124 125 127 128 130 133 134 135 138 144 145 146 147 153 154 161 162 163 164 168 171 172 173 175 177 178 179 183 184 190 191 193 194 199 201 202 204 206 209 212 215 216 220 16326 224 1 0 f 16327 224 1 0 e 16328 224 1 0 f 16329 224 1 0 f 16330 224 1 0 f 16331 224 1 0 1 2 7 10 11 12 13 15 16 19 20 21 22 23 26 28 30 31 36 37 39 42 47 48 49 50 51 55 56 58 60 61 63 65 67 68 69 70 72 73 74 77 79 80 81 82 86 88 89 90 92 95 97 98 100 101 102 103 104 106 113 115 118 119 121 124 125 128 131 136 140 141 143 144 145 146 147 149 150 151 158 160 163 165 169 171 173 174 176 177 183 184 185 190 191 193 194 195 196 199 200 201 202 204 205 206 207 208 209 213 215 217 219 220 221 222 16332 224 1 0 0 1 3 4 5 6 7 9 12 14 18 20 21 24 25 27 28 29 31 32 33 35 38 39 40 43 47 49 52 53 54 55 61 62 63 66 67 68 70 71 72 77 78 79 80 83 84 88 89 90 91 92 93 94 97 99 102 103 107 108 110 111 116 117 118 119 120 121 122 123 125 126 127 130 131 134 135 136 137 138 139 141 143 145 148 151 152 153 154 156 157 160 161 162 165 168 170 171 174 175 177 181 184 186 188 189 190 191 192 193 197 198 201 203 205 206 207 208 213 215 216 219 222 16333 224 1 0 e 16334 224 1 0 0 2 6 7 9 10 12 13 15 19 21 22 24 32 34 36 37 39 40 43 45 46 47 49 52 54 55 57 58 59 63 64 71 72 73 74 75 76 78 79 86 87 89 90 96 97 98 103 105 106 107 109 110 111 112 116 119 123 124 125 126 127 128 129 131 132 134 137 139 140 142 143 144 149 151 153 156 159 162 164 165 168 169 172 175 176 181 182 184 186 187 188 189 196 197 198 199 200 203 204 207 208 209 210 213 214 218 222 223 16335 224 1 0 f 16336 224 1 0 0 3 7 8 9 10 11 14 16 17 20 22 24 25 26 31 32 33 34 35 38 40 41 44 45 47 48 49 54 55 56 60 63 65 66 69 70 73 76 77 79 80 81 85 92 93 96 97 98 99 100 105 106 108 111 114 118 119 120 123 124 125 126 127 128 129 130 133 134 135 136 140 143 144 153 154 156 157 160 161 162 163 164 165 166 167 169 171 174 176 178 180 186 189 190 192 193 195 197 198 199 200 201 202 205 206 209 211 213 215 217 219 220 221 223 16337 224 1 0 0 2 5 6 8 9 10 13 15 16 17 18 20 21 24 25 27 28 29 30 33 34 35 36 37 42 43 46 50 54 56 59 60 65 66 68 70 75 76 77 78 79 81 83 84 85 87 89 90 93 95 96 99 100 101 102 106 109 111 112 114 115 118 119 122 123 126 128 129 131 132 134 137 138 139 140 141 143 147 150 151 152 153 158 161 162 165 166 167 168 171 173 174 175 178 179 181 185 187 190 193 194 196 199 200 201 202 204 205 207 208 210 214 215 222 223 16338 224 1 0 e 16339 224 1 0 e 16340 224 1 0 e 16341 224 1 0 f 16342 224 1 0 e 16343 224 1 0 1 10 11 14 16 17 18 19 20 22 24 26 28 29 30 34 35 36 38 39 40 41 42 43 44 45 47 48 49 50 51 54 56 57 62 63 64 66 68 69 77 80 81 82 85 88 89 90 96 97 98 99 100 104 105 106 109 112 117 118 120 124 125 126 127 128 130 132 133 134 136 138 144 145 146 148 149 151 153 156 160 161 162 164 165 166 167 169 170 171 172 175 178 180 185 189 190 191 192 193 195 199 204 205 206 208 209 210 211 215 217 219 221 222 16344 224 1 0 f 16345 224 1 0 e 16346 224 1 0 f 16347 224 1 0 f 16348 224 1 0 f 16349 224 1 0 0 2 4 6 7 8 11 19 20 22 25 27 28 29 30 31 33 34 35 37 38 43 45 46 47 52 54 55 58 61 62 64 65 68 70 72 78 79 84 87 89 91 92 97 98 102 103 104 105 107 110 111 112 113 114 119 121 123 124 125 131 132 134 137 143 149 151 152 153 154 155 158 159 162 164 166 167 171 173 174 175 176 183 185 186 187 189 190 191 194 195 196 197 198 200 205 210 212 213 216 218 220 221 222 16350 224 1 0 1 4 6 7 8 9 11 12 16 17 18 19 20 23 28 30 33 35 38 39 41 42 53 55 56 59 60 63 65 66 68 69 72 76 77 78 79 83 84 86 87 88 90 91 94 95 96 97 99 101 105 107 108 110 111 114 116 119 120 124 126 127 128 130 132 133 134 136 143 148 149 150 154 156 157 158 159 160 161 163 164 165 170 171 172 174 176 182 183 184 185 186 187 189 192 193 196 197 198 199 201 202 203 208 209 210 211 213 214 217 218 219 220 16351 224 1 0 e 16352 224 1 0 1 2 3 4 5 6 7 8 9 10 14 15 16 18 21 23 26 28 30 33 35 36 38 39 40 41 45 51 52 53 58 62 63 65 66 67 69 70 72 73 75 76 77 80 81 83 84 85 88 90 92 95 97 98 99 100 101 102 104 107 109 117 120 122 123 124 125 126 128 129 130 131 133 137 138 139 142 143 144 147 148 149 151 152 153 154 155 156 158 159 161 162 163 164 165 166 168 169 175 178 186 188 189 191 192 193 194 195 196 197 199 200 201 202 203 204 206 208 209 210 211 216 218 221 16353 224 1 0 f 16354 224 1 0 0 3 4 5 6 7 9 10 12 13 14 15 16 17 18 19 21 26 30 33 36 37 40 41 42 43 44 45 48 53 58 61 62 63 64 65 68 69 70 71 72 77 78 79 85 86 87 88 89 92 93 96 97 98 99 100 101 102 106 109 113 114 115 117 118 120 121 122 123 124 127 130 132 133 134 136 137 138 140 142 144 145 148 149 150 151 152 153 155 157 158 159 160 161 163 164 165 167 168 169 170 173 174 177 178 180 181 182 183 184 186 189 192 195 202 203 206 207 209 210 213 219 221 222 16355 224 1 0 3 4 5 6 9 10 13 15 16 21 23 25 27 28 31 32 34 37 38 41 42 43 44 49 50 51 55 57 59 61 62 65 66 70 71 73 74 75 79 80 85 87 88 89 90 93 94 95 99 100 102 105 108 109 111 112 113 116 117 119 121 123 124 125 126 129 134 136 137 138 139 140 142 143 144 147 151 153 154 156 161 162 163 164 167 170 173 174 179 180 181 188 189 192 194 195 196 198 201 203 204 208 209 210 214 215 216 221 222 223 16356 224 1 0 e 16357 224 1 0 e 16358 224 1 0 e 16359 224 1 0 f 16360 224 1 0 e 16361 224 1 0 0 1 2 3 4 6 11 12 13 15 16 20 21 26 29 34 36 37 38 39 42 53 54 55 57 61 62 63 64 65 67 68 70 72 73 74 76 77 78 82 83 84 86 89 90 91 92 94 95 99 100 103 104 105 107 108 109 116 119 122 123 124 126 127 128 130 141 142 143 146 147 150 151 152 153 154 159 160 164 165 166 167 171 173 179 180 183 188 189 193 194 195 196 198 199 200 202 203 208 209 211 213 215 216 217 219 221 223 16362 224 1 0 f 16363 224 1 0 e 16364 224 1 0 f 16365 224 1 0 f 16366 224 1 0 f 16367 224 1 0 0 1 2 5 8 13 14 16 17 18 20 22 23 27 28 29 31 32 36 37 39 40 41 45 46 48 49 51 56 57 59 60 61 64 65 66 67 70 72 74 77 78 82 83 84 93 94 99 100 103 107 109 110 111 113 115 117 119 121 125 126 127 129 130 134 135 136 142 147 149 150 152 154 157 159 160 162 163 164 165 166 167 170 172 173 174 179 187 188 189 191 192 194 195 199 200 206 207 208 209 210 213 215 217 220 221 222 223 16368 224 1 0 1 3 5 6 7 9 11 14 15 17 20 21 23 24 25 28 32 33 36 37 40 41 44 48 50 51 53 54 55 56 57 61 62 65 68 69 71 73 76 78 79 80 82 89 90 91 94 95 101 103 105 109 115 116 117 121 122 123 125 126 127 131 132 133 136 137 138 139 140 144 145 150 151 153 154 155 156 157 158 162 166 169 171 175 179 180 182 184 185 187 188 190 191 192 193 197 198 199 200 201 202 203 205 206 207 212 214 215 216 219 220 222 223 16369 224 1 0 e 16370 224 1 0 1 3 4 6 7 10 11 13 15 17 19 22 24 26 27 28 29 30 32 35 36 37 39 42 43 44 46 52 53 54 55 57 58 59 61 66 71 72 73 74 75 77 78 82 85 91 93 95 99 100 102 105 107 108 114 115 116 120 121 125 127 128 131 132 136 139 140 142 144 145 146 147 148 151 152 153 154 160 161 163 164 167 168 170 171 172 173 174 175 177 181 186 187 189 192 193 194 195 198 200 202 203 205 207 208 209 212 216 221 223 16371 224 1 0 f 16372 224 1 0 2 3 4 6 8 9 12 13 14 15 16 20 21 22 24 25 26 28 32 33 34 37 38 40 42 43 44 45 46 47 48 51 52 53 55 56 57 59 62 63 65 67 68 71 72 74 75 76 77 79 81 82 84 85 87 88 92 97 101 103 106 111 112 113 114 115 116 119 120 121 123 127 129 132 133 135 139 142 145 148 149 151 152 153 157 161 162 164 168 172 173 174 176 177 178 179 180 185 186 188 189 190 192 193 197 198 201 204 206 207 209 211 213 216 218 219 221 222 223 16373 224 1 0 0 6 10 14 15 18 22 25 27 28 30 31 32 35 39 42 43 44 45 46 47 51 52 57 58 60 61 63 64 65 66 71 74 79 80 81 82 83 86 87 88 89 91 92 93 94 95 96 99 100 102 104 107 108 109 110 111 114 115 116 117 119 120 121 122 128 131 132 133 134 135 138 143 144 147 148 149 151 152 156 159 160 161 163 164 166 168 170 172 174 175 178 188 189 190 191 192 194 196 197 198 199 204 208 209 210 213 215 217 218 220 221 223 16374 224 1 0 e 16375 224 1 0 e 16376 224 1 0 e 16377 224 1 0 f 16378 224 1 0 e 16379 224 1 0 5 9 10 12 13 15 16 18 22 23 25 28 29 34 38 39 41 44 45 46 47 48 49 50 53 54 55 56 59 60 61 66 67 68 69 70 73 76 78 79 81 82 83 84 85 86 87 90 96 99 100 101 104 105 106 107 109 111 112 114 115 117 118 119 121 122 126 128 131 137 138 140 144 145 148 149 151 152 155 156 160 163 164 170 172 173 174 175 176 177 179 180 182 183 184 186 188 189 190 196 197 198 200 203 209 213 214 215 217 219 220 16380 224 1 0 f 16381 224 1 0 e 16382 224 1 0 f 16383 224 1 0 f 16384 224 1 0 f 16385 224 1 0 0 1 2 4 6 7 8 13 14 15 16 18 19 21 22 24 28 29 30 31 32 35 36 37 39 41 43 44 47 48 50 51 53 57 58 60 62 63 64 66 67 70 76 77 78 79 81 82 83 86 87 89 90 93 97 102 104 106 107 108 109 114 115 117 118 119 120 121 122 123 124 127 132 134 136 137 139 141 142 143 144 145 146 148 149 151 154 157 159 161 166 167 168 169 170 172 173 175 176 179 183 184 186 190 191 192 194 197 200 201 202 204 208 212 213 214 215 216 217 218 221 222 16386 224 1 0 1 3 4 5 8 10 12 14 15 16 18 19 20 21 23 24 31 33 35 36 37 40 42 43 44 45 53 58 59 60 63 65 66 67 68 71 72 75 77 79 82 83 88 93 95 96 98 100 103 104 105 106 108 109 110 113 115 117 119 120 125 127 129 133 135 143 145 149 153 154 156 161 162 164 168 169 171 172 173 174 176 178 180 182 185 186 188 190 193 194 195 199 200 201 202 203 204 205 208 209 210 211 217 218 16387 224 1 0 e 16388 224 1 0 5 13 14 16 19 20 27 28 29 31 33 35 37 39 41 43 45 46 52 53 54 56 58 59 62 64 71 73 75 76 78 80 82 84 86 87 88 89 90 91 92 95 96 97 99 101 102 104 108 110 114 116 117 119 122 124 128 129 132 134 135 137 141 142 143 145 149 151 152 153 155 157 160 161 163 164 166 169 170 172 178 179 182 186 190 192 195 197 199 200 203 204 207 208 210 212 215 216 219 220 223 16389 224 1 0 f 16390 224 1 0 2 3 6 9 13 17 18 24 25 28 32 33 38 39 42 43 47 49 51 54 55 60 61 62 63 64 67 70 71 72 73 76 77 80 82 83 84 85 86 91 94 95 97 98 99 101 102 103 108 110 111 112 113 114 115 116 117 119 121 122 124 125 128 131 134 135 140 141 143 144 145 146 148 149 151 152 155 157 159 161 162 163 164 165 169 170 171 172 174 178 179 182 184 186 191 192 194 195 200 203 204 207 208 210 212 213 215 218 219 220 222 223 16391 224 1 0 1 2 3 4 7 8 9 10 12 13 15 18 19 22 23 24 25 26 27 28 29 32 35 38 42 46 47 48 49 50 61 62 63 64 65 66 70 71 72 74 76 77 80 81 82 85 86 87 90 92 93 95 96 100 102 103 104 105 108 110 111 113 115 116 118 119 120 121 123 125 126 131 134 137 138 141 143 145 146 149 153 154 155 156 157 159 160 161 162 165 166 167 168 173 175 176 178 180 184 187 189 190 193 194 195 200 201 205 206 208 209 211 213 217 218 219 220 221 222 16392 224 1 1 e 16393 224 1 1 e 16394 224 1 1 e 16395 224 1 1 f 16396 224 1 1 e 16397 224 1 1 1 2 3 9 11 14 19 21 22 23 24 25 26 27 28 29 30 33 35 38 39 43 44 48 49 52 55 59 60 67 68 70 72 74 75 76 79 80 83 84 85 87 88 89 90 91 95 96 97 98 99 100 101 102 103 104 105 107 109 113 114 115 118 121 123 125 126 127 128 129 130 131 132 133 135 136 137 139 140 141 143 144 146 148 149 150 152 159 161 162 163 164 166 171 173 174 175 176 177 179 180 181 182 183 191 194 198 199 200 202 203 204 205 206 207 208 210 211 213 214 216 217 218 223 16398 224 1 1 f 16399 224 1 1 e 16400 224 1 1 f 16401 224 1 1 f 16402 224 1 1 f 16403 224 1 1 0 1 5 6 9 17 18 19 20 21 23 24 28 34 35 37 39 42 43 44 50 51 52 54 55 57 58 62 63 64 66 70 71 72 73 74 77 78 81 84 86 89 90 91 94 95 96 97 100 102 103 105 108 109 110 111 112 115 116 119 121 122 129 130 132 133 134 138 141 143 146 147 148 149 150 151 152 153 157 158 160 161 162 163 165 166 167 168 169 175 176 177 178 179 180 181 182 183 187 191 193 194 195 196 197 198 199 201 202 203 206 213 215 217 221 16404 224 1 1 0 4 5 8 14 15 16 18 19 22 24 26 28 30 31 32 33 35 36 39 40 41 44 46 47 48 49 50 51 56 59 60 63 65 69 71 73 79 81 82 86 88 90 91 94 95 98 100 104 105 106 108 114 115 116 118 119 120 121 122 126 127 128 129 131 133 141 142 143 144 147 148 151 154 155 156 157 158 160 161 164 168 169 170 172 174 175 176 179 180 181 182 185 187 188 191 193 194 195 199 201 206 208 211 215 216 217 218 219 220 16405 224 1 1 e 16406 224 1 1 0 4 10 11 12 13 17 19 26 32 33 34 35 37 39 42 44 46 49 50 54 55 56 57 58 62 69 71 72 73 75 77 80 82 84 85 90 91 92 94 95 96 100 101 103 104 105 106 107 108 111 118 119 120 124 127 128 129 131 132 133 134 136 137 140 141 146 147 148 151 152 153 155 157 158 160 162 165 166 170 173 174 175 177 178 187 190 191 192 193 196 200 202 205 207 211 214 215 216 16407 224 1 1 f 16408 224 1 1 1 5 10 12 19 20 22 23 27 28 33 36 37 38 39 44 45 46 49 53 55 58 59 60 61 64 65 66 68 71 72 73 75 76 77 78 79 80 86 88 89 91 92 93 97 98 114 115 116 117 119 121 122 126 127 129 131 135 136 138 140 142 144 145 146 147 150 151 152 153 156 157 160 161 162 163 166 168 169 170 172 173 174 175 177 179 180 182 183 184 187 189 191 192 194 195 197 201 202 204 209 212 215 217 218 219 220 222 16409 224 1 1 1 3 5 7 8 9 13 14 15 17 18 23 24 27 28 32 33 41 42 43 44 46 49 50 51 52 55 56 57 58 61 62 64 65 66 71 74 75 76 77 81 82 87 91 94 95 97 99 100 101 102 104 105 107 110 111 113 115 117 118 119 122 125 127 129 134 136 137 143 145 146 147 148 150 152 154 158 159 160 164 165 166 167 168 173 175 176 179 180 182 184 185 186 187 188 189 190 191 193 195 196 198 199 200 201 204 205 206 211 212 216 219 220 222 16410 224 1 1 e 16411 224 1 1 e 16412 224 1 1 e 16413 224 1 1 f 16414 224 1 1 e 16415 224 1 1 4 5 7 8 9 10 11 12 13 15 18 20 22 23 24 26 27 29 30 31 34 38 40 41 42 43 44 46 48 49 50 55 56 57 58 60 61 62 63 64 65 74 76 77 78 82 83 84 86 87 90 91 93 94 96 101 103 106 109 110 111 113 116 118 120 121 123 124 127 129 131 132 133 134 137 143 144 145 146 147 148 149 151 152 154 155 156 157 158 160 164 165 166 168 170 173 174 176 177 179 180 181 183 186 187 189 191 203 207 209 210 212 215 218 219 222 223 16416 224 1 1 f 16417 224 1 1 e 16418 224 1 1 f 16419 224 1 1 f 16420 224 1 1 f 16421 224 1 1 0 2 7 8 9 10 11 14 15 17 20 21 27 29 30 33 35 37 38 39 40 41 42 45 47 48 49 50 51 52 59 63 64 65 68 71 72 77 78 79 80 81 82 83 85 87 89 90 91 92 93 94 95 96 104 106 107 109 110 111 112 113 114 115 116 117 118 120 123 125 126 129 130 131 133 137 139 140 142 144 147 150 152 154 157 160 167 169 172 174 175 176 178 181 184 189 190 191 193 197 199 201 204 205 207 210 211 212 214 215 216 221 223 16422 224 1 1 0 7 9 12 13 14 15 16 17 18 19 21 22 26 27 29 33 34 35 40 41 42 43 45 46 48 54 56 59 61 63 65 66 67 72 73 74 76 77 78 82 84 86 87 88 90 92 93 96 106 109 110 114 116 117 119 121 124 125 126 127 129 131 133 135 141 142 143 145 148 153 156 161 162 163 166 167 169 171 172 177 178 183 185 189 190 193 195 196 197 198 200 201 203 205 210 211 212 217 218 221 222 223 16423 224 1 1 e 16424 224 1 1 2 5 6 8 11 12 13 21 22 23 25 27 30 31 33 35 36 38 40 43 44 45 51 55 56 57 58 60 61 64 65 70 74 78 79 80 83 85 86 88 90 91 95 99 100 104 106 112 113 116 117 118 121 123 126 127 128 130 131 132 133 134 135 137 139 142 143 147 149 151 152 153 155 158 162 165 166 167 168 171 172 174 175 176 178 179 182 183 186 189 190 191 193 195 196 201 208 211 212 213 214 215 217 219 220 222 223 16425 224 1 1 f 16426 224 1 1 0 1 2 3 7 9 10 11 14 15 18 21 24 25 27 28 29 30 31 32 34 36 37 38 39 40 41 42 43 45 46 47 48 49 50 52 54 55 56 57 58 59 60 62 63 64 65 67 68 70 92 95 99 100 103 104 105 107 109 111 112 113 116 117 118 123 124 125 126 131 133 134 136 145 146 148 149 151 153 154 156 157 159 160 161 162 165 166 169 171 173 174 175 177 178 183 186 188 191 195 198 199 203 207 210 211 212 218 220 221 16427 224 1 1 1 2 5 9 11 13 20 21 22 26 31 38 39 42 44 46 48 52 54 56 60 61 62 63 67 68 70 71 72 73 75 76 78 79 80 83 84 85 86 90 93 95 96 97 98 99 101 102 103 104 106 107 108 109 113 115 116 120 124 125 127 130 131 134 135 136 138 142 144 147 149 150 157 159 160 161 168 169 170 171 173 176 177 178 180 181 182 187 188 189 191 192 193 199 202 203 204 206 207 209 212 214 220 221 223 16428 224 1 1 e 16429 224 1 1 e 16430 224 1 1 e 16431 224 1 1 f 16432 224 1 1 e 16433 224 1 1 0 1 2 3 6 7 8 9 11 14 15 22 23 28 29 31 32 34 35 36 37 38 40 44 45 49 50 51 52 53 54 56 58 59 62 63 66 69 70 71 72 73 75 76 78 81 82 85 86 88 89 92 96 98 99 100 102 103 106 108 109 110 111 113 115 117 120 121 122 123 125 127 129 130 133 135 137 139 140 142 144 149 150 151 152 153 154 155 156 157 158 159 160 161 164 169 177 178 179 181 182 194 196 201 202 203 204 206 208 209 213 214 215 217 219 16434 224 1 1 f 16435 224 1 1 e 16436 224 1 1 f 16437 224 1 1 f 16438 224 1 1 f 16439 224 1 1 0 2 3 4 8 11 16 17 18 20 21 24 25 27 29 37 38 40 41 45 46 48 49 50 52 54 56 57 60 61 63 65 67 69 72 73 74 76 77 80 82 83 85 88 89 90 92 95 96 97 98 100 101 102 103 104 105 106 108 110 111 112 113 114 116 117 118 120 122 124 127 131 134 135 137 143 145 148 149 150 151 153 157 158 160 167 168 169 170 175 178 181 182 183 187 188 191 193 195 196 198 199 201 204 208 212 216 217 219 220 222 16440 224 1 1 1 7 8 11 12 15 16 17 19 21 23 24 26 27 28 33 35 36 37 38 39 41 42 48 49 50 52 56 57 59 62 63 66 69 72 74 77 80 82 84 85 86 88 92 95 96 99 103 104 109 110 111 115 120 121 122 124 127 128 129 130 135 139 141 142 147 148 149 152 154 155 156 159 167 168 169 170 172 174 176 181 182 183 185 186 191 195 196 197 198 199 201 205 207 209 215 218 219 222 223 16441 224 1 1 e 16442 224 1 1 0 1 2 3 4 5 6 8 9 11 12 13 14 16 18 20 22 25 27 30 31 33 34 35 36 39 41 42 44 45 46 50 52 53 54 56 59 62 63 65 66 69 70 71 72 73 77 78 79 81 82 85 88 89 92 96 97 100 102 103 107 111 112 114 118 121 122 125 128 129 131 134 135 136 137 139 141 142 145 146 147 150 153 154 155 156 158 159 162 163 164 167 169 170 171 172 174 177 182 183 184 185 187 188 192 194 195 196 198 202 204 205 206 208 210 211 213 214 220 221 222 223 16443 224 1 1 f 16444 224 1 1 0 1 2 3 6 7 8 9 11 12 15 17 18 19 20 24 25 26 33 44 45 46 48 49 53 54 55 59 60 61 64 65 66 68 69 70 76 79 81 85 87 89 90 92 94 98 103 104 105 107 109 111 113 115 116 117 118 120 121 122 126 127 128 129 130 135 137 138 139 142 143 144 145 146 147 148 149 150 152 153 154 157 160 162 163 164 166 168 169 172 173 175 176 178 179 181 186 187 190 191 193 194 196 197 199 200 201 203 204 205 206 207 211 213 215 216 220 16445 224 1 1 5 7 8 9 10 12 16 17 21 22 26 27 28 29 33 36 37 42 44 47 48 49 50 53 54 55 57 58 60 61 62 63 64 68 69 70 73 74 75 78 80 81 82 84 85 89 90 92 95 96 97 99 100 103 105 106 109 110 114 117 119 120 122 123 124 126 128 129 131 134 137 138 139 141 142 143 145 148 149 151 152 154 155 163 164 165 168 172 176 178 179 181 186 187 188 192 194 195 204 205 206 207 213 214 215 217 219 220 221 223 16446 224 1 1 e 16447 224 1 1 e 16448 224 1 1 e 16449 224 1 1 f 16450 224 1 1 e 16451 224 1 1 3 5 6 7 11 14 16 18 21 22 29 32 33 39 40 41 42 43 47 48 51 55 56 57 59 60 63 65 67 68 69 71 72 74 75 76 78 80 83 85 86 88 89 91 93 95 97 101 105 107 111 113 114 115 116 117 119 120 122 126 127 128 134 135 137 138 139 142 143 145 146 149 153 155 160 161 162 167 169 171 176 178 181 182 183 184 188 189 191 192 195 196 198 202 203 208 209 210 211 212 213 214 215 216 219 221 223 16452 224 1 1 f 16453 224 1 1 e 16454 224 1 1 f 16455 224 1 1 f 16456 224 1 1 f 16457 224 1 1 0 1 2 3 5 6 7 8 9 13 14 16 17 19 20 21 22 23 25 28 29 31 32 35 38 42 43 44 45 47 48 55 57 59 60 61 62 68 70 79 80 81 84 85 93 94 98 99 101 103 108 109 111 113 116 117 118 121 124 126 129 131 132 134 135 136 139 141 142 143 144 147 149 150 152 154 155 156 157 160 163 164 166 167 168 170 171 173 174 177 178 179 180 181 183 186 192 193 194 195 196 197 198 199 200 201 202 204 210 215 219 220 221 222 16458 224 1 1 1 4 5 7 8 9 10 14 15 16 17 20 21 25 30 31 33 35 36 37 38 39 40 41 45 48 49 50 51 52 56 60 63 65 66 68 69 70 74 75 77 78 79 80 81 82 84 85 86 87 93 95 96 98 99 100 101 105 108 111 112 115 117 118 119 122 123 134 135 141 144 150 151 152 153 157 158 159 163 164 166 169 170 171 172 173 175 177 178 179 181 182 184 186 189 190 191 194 195 199 201 202 204 206 209 211 212 215 219 223 16459 224 1 1 e 16460 224 1 1 2 3 4 5 6 8 9 11 15 17 18 23 24 25 28 29 33 35 36 39 41 42 43 46 47 49 51 53 57 58 60 62 68 76 82 83 87 92 94 95 96 97 99 103 104 105 110 111 112 113 114 118 119 120 125 128 129 130 135 136 140 142 143 144 145 148 150 151 155 157 162 163 165 166 170 173 177 178 180 181 184 189 191 192 198 199 201 203 205 207 212 213 214 215 221 16461 224 1 1 f 16462 224 1 1 0 1 2 4 5 6 11 12 13 14 18 21 26 27 30 32 33 35 39 40 41 42 43 44 45 51 53 55 62 67 68 69 70 72 73 75 76 80 81 82 83 86 87 91 92 93 95 97 98 99 100 103 105 106 107 111 112 114 117 119 120 122 123 126 127 130 132 136 140 143 144 148 151 152 154 156 160 161 162 163 168 172 173 175 176 178 179 180 182 183 185 189 192 195 200 201 202 203 205 206 209 212 217 218 220 222 16463 224 1 1 1 3 5 9 11 12 16 17 18 19 23 29 30 31 32 34 36 38 44 45 46 47 48 49 50 55 58 59 61 62 64 65 66 67 69 73 74 76 78 79 81 84 85 91 92 95 98 99 103 105 106 109 111 112 113 115 116 119 120 121 122 123 125 126 127 129 133 135 136 141 142 143 144 146 148 149 152 155 157 158 160 162 163 164 166 167 169 170 171 172 173 174 178 179 184 185 187 188 189 196 198 201 202 203 204 205 211 212 213 214 215 218 222 16464 247 0 0 e 16465 247 0 0 e 16466 247 0 0 e 16467 247 0 0 f 16468 247 0 0 e 16469 247 0 0 0 2 5 6 7 8 9 10 11 14 15 16 19 20 24 26 27 32 34 36 38 39 41 43 44 47 48 49 51 53 57 59 61 62 64 65 67 70 76 77 78 80 87 89 91 97 102 106 108 109 110 111 113 114 115 119 121 122 123 127 128 129 132 134 138 147 148 149 150 151 152 153 154 157 158 160 163 167 168 169 171 173 175 176 177 178 179 181 182 184 192 193 194 199 201 202 203 206 209 211 212 213 214 215 218 219 220 223 226 227 230 231 232 233 238 240 243 16470 247 0 0 f 16471 247 0 0 e 16472 247 0 0 f 16473 247 0 0 f 16474 247 0 0 f 16475 247 0 0 0 1 3 4 5 6 12 13 14 16 17 18 20 26 27 28 29 32 33 36 38 42 45 46 47 49 52 54 56 57 59 60 61 64 66 67 68 69 73 75 76 78 80 81 82 83 85 94 95 96 97 98 99 100 101 102 104 106 107 108 109 110 111 112 113 114 117 118 119 121 123 125 126 128 134 136 137 144 145 148 153 155 156 157 162 163 164 165 169 170 171 172 175 177 180 181 182 184 185 186 188 190 192 193 196 197 198 200 201 203 206 210 215 220 222 226 229 232 233 234 237 238 240 242 244 16476 247 0 0 1 2 3 6 7 8 10 11 12 13 16 21 22 23 24 26 29 31 32 34 37 45 46 48 49 52 55 56 61 63 64 70 71 72 73 75 76 79 81 85 88 90 96 98 100 103 105 106 108 109 110 112 115 116 117 119 121 126 127 128 131 132 134 138 141 144 145 147 148 150 151 155 156 158 159 160 161 162 163 167 168 169 170 172 174 175 177 178 181 183 184 185 186 187 188 191 195 196 197 198 199 200 201 205 207 208 209 210 212 215 216 219 220 221 222 227 228 229 230 231 232 233 235 236 238 239 241 244 245 246 16477 247 0 0 e 16478 247 0 0 0 3 4 6 8 9 11 12 15 18 22 24 25 26 28 29 31 33 34 39 41 42 47 48 50 52 53 54 55 56 57 58 60 63 64 65 69 71 72 73 77 78 79 80 81 83 84 85 87 88 92 95 97 98 99 102 113 114 116 120 122 123 124 131 132 134 135 136 140 141 144 146 148 150 151 152 153 154 155 159 160 161 168 169 171 172 173 175 180 187 193 194 198 205 206 207 213 214 215 216 217 221 222 223 224 228 229 230 231 239 243 245 246 16479 247 0 0 f 16480 247 0 0 1 3 9 11 12 14 15 16 18 20 23 24 25 26 27 29 32 33 36 37 38 40 42 44 45 48 50 51 58 62 66 68 69 71 72 75 80 81 82 88 90 92 93 94 97 100 101 102 103 107 108 109 110 112 113 114 115 120 122 123 125 126 127 128 130 131 133 135 137 138 139 140 141 144 149 150 153 154 155 156 157 158 159 161 163 164 165 166 167 168 169 170 171 176 177 180 184 187 189 191 192 193 194 196 197 199 200 202 204 205 207 208 209 210 214 216 217 218 220 223 229 237 238 239 240 241 16481 247 0 0 3 5 7 9 11 13 15 17 20 23 28 29 30 32 37 39 40 42 47 52 53 55 57 62 64 66 69 74 75 76 77 78 81 84 85 87 89 91 93 98 102 103 104 106 107 110 111 119 122 126 127 131 132 133 139 140 142 144 147 148 149 150 151 155 156 160 161 162 164 166 168 174 180 181 185 186 188 191 195 196 199 203 204 205 213 215 220 221 228 230 232 235 238 240 242 16482 247 0 0 e 16483 247 0 0 e 16484 247 0 0 e 16485 247 0 0 f 16486 247 0 0 e 16487 247 0 0 0 1 2 4 7 8 9 11 12 13 14 15 16 21 23 24 25 26 29 30 31 32 36 37 39 40 41 42 45 48 49 50 63 64 65 67 69 72 74 76 79 80 85 86 87 93 97 98 99 100 103 104 105 106 107 110 112 114 118 120 122 124 132 133 135 136 139 140 145 146 147 149 152 155 156 157 161 162 164 165 169 171 172 173 176 180 183 184 185 186 188 190 194 198 199 200 202 203 204 207 209 210 215 220 222 224 225 226 230 232 233 235 236 237 242 243 244 246 16488 247 0 0 f 16489 247 0 0 e 16490 247 0 0 f 16491 247 0 0 f 16492 247 0 0 f 16493 247 0 0 1 3 4 6 9 13 18 22 23 24 26 27 31 33 34 37 38 40 41 42 43 44 48 51 52 54 55 59 60 61 63 64 67 68 69 71 72 74 75 76 78 79 82 84 86 88 90 91 94 96 97 99 100 101 103 106 109 110 111 113 115 120 122 124 125 128 129 131 133 134 135 136 138 141 144 145 147 148 149 151 152 154 155 156 159 163 168 170 171 176 177 179 180 182 183 184 185 187 189 193 197 198 199 202 203 204 206 207 210 212 214 221 222 224 226 227 228 229 230 233 234 235 237 238 239 243 244 16494 247 0 0 1 2 3 4 6 9 12 20 23 25 26 28 30 31 32 33 34 35 41 42 45 46 47 49 51 54 55 57 59 60 62 63 64 65 66 70 71 75 77 79 80 81 82 86 98 100 104 106 113 114 117 118 119 120 122 124 126 129 130 133 138 139 140 141 144 146 148 149 151 159 165 166 167 170 178 180 185 187 189 190 191 196 197 201 203 205 207 212 213 216 217 220 222 226 229 230 231 232 234 238 240 242 244 246 16495 247 0 0 e 16496 247 0 0 0 2 3 6 8 14 18 23 24 25 26 28 29 38 40 47 48 52 53 55 57 60 62 64 66 68 69 72 73 74 80 85 87 88 90 91 92 93 94 95 96 97 98 99 105 106 107 111 112 113 115 117 118 121 122 125 126 128 129 134 135 137 138 139 140 142 143 144 146 148 150 153 155 156 162 163 164 166 169 173 174 177 178 185 187 191 192 194 195 196 197 199 200 201 204 207 208 212 213 214 215 216 217 218 224 229 232 233 236 237 239 241 243 245 246 16497 247 0 0 f 16498 247 0 0 1 2 6 7 9 11 17 18 19 20 21 23 25 31 35 36 37 38 39 40 42 44 45 46 47 48 49 50 51 52 53 54 55 56 63 64 74 81 83 84 86 87 91 92 93 94 98 99 103 104 105 107 111 114 116 117 120 121 123 124 125 127 130 131 132 133 134 136 137 141 143 145 147 148 149 151 152 155 157 158 159 160 163 169 170 171 174 175 178 179 181 182 186 187 188 189 190 191 194 195 197 199 200 206 207 209 210 211 212 214 216 217 219 220 221 222 223 226 227 229 233 235 239 243 244 16499 247 0 0 6 8 10 12 13 14 17 18 19 23 25 29 30 31 35 36 38 40 41 42 43 44 45 46 48 49 52 53 57 58 59 60 61 62 64 66 67 69 72 74 75 77 80 83 85 87 90 92 93 95 96 98 101 102 105 108 109 110 116 120 121 122 123 124 126 127 128 133 134 135 136 140 141 142 146 148 149 150 152 155 156 157 161 162 163 164 166 168 169 170 171 172 173 174 177 179 180 183 184 185 188 189 190 192 193 197 198 199 200 201 202 203 204 205 209 212 213 214 215 224 225 226 228 229 231 232 233 234 235 236 237 238 240 243 244 16500 247 0 0 e 16501 247 0 0 e 16502 247 0 0 e 16503 247 0 0 f 16504 247 0 0 e 16505 247 0 0 1 2 3 5 7 8 9 12 16 19 22 24 25 26 27 28 33 35 36 38 39 45 46 49 53 54 56 57 58 59 63 65 66 69 71 72 74 77 78 80 82 83 85 88 93 95 98 99 104 106 107 109 111 112 114 121 122 123 126 127 128 129 130 132 135 136 138 139 140 142 143 144 145 149 150 151 153 154 155 158 161 164 165 166 167 169 170 172 173 175 176 178 179 181 182 183 186 187 188 189 190 199 201 202 204 206 208 209 211 212 214 216 218 219 221 222 223 227 228 230 233 236 238 239 242 16506 247 0 0 f 16507 247 0 0 e 16508 247 0 0 f 16509 247 0 0 f 16510 247 0 0 f 16511 247 0 0 1 3 6 7 8 11 13 14 15 21 26 28 30 35 36 38 39 40 41 42 44 45 46 47 51 52 53 54 57 58 61 63 65 66 68 71 74 76 77 81 82 85 87 88 90 92 100 101 102 104 105 107 108 109 115 117 118 121 122 129 130 132 133 135 136 137 138 139 140 141 142 149 150 151 152 154 155 156 164 165 166 167 168 169 171 172 174 175 176 183 184 186 188 190 192 195 201 202 203 205 206 210 212 218 220 221 223 224 225 229 231 232 234 237 238 239 241 243 245 16512 247 0 0 0 3 7 12 14 15 19 20 22 23 25 26 29 30 31 32 34 36 39 40 41 43 46 47 48 50 51 53 54 55 56 57 59 62 64 65 66 67 69 70 72 75 76 78 79 82 83 86 87 90 91 92 93 95 96 97 98 100 102 103 104 106 108 112 113 119 120 123 125 126 128 130 131 132 133 135 139 140 143 146 147 148 150 155 156 157 158 159 161 165 167 170 171 172 173 174 177 180 182 185 188 192 193 194 196 199 200 201 202 203 204 205 209 210 212 214 218 222 224 225 226 227 230 231 233 234 237 238 239 240 243 244 16513 247 0 0 e 16514 247 0 0 1 3 6 7 9 10 13 14 17 18 21 24 25 26 28 30 32 33 38 39 41 44 46 47 48 49 52 53 58 61 64 65 66 68 69 74 76 79 81 82 83 87 88 93 94 95 102 103 104 106 107 108 112 116 117 119 121 122 125 127 129 136 138 139 142 144 146 147 148 150 153 154 155 158 159 160 168 170 172 173 174 175 177 178 181 187 189 190 193 194 195 198 200 201 203 204 206 208 209 213 214 215 217 218 219 220 221 224 225 226 229 231 232 233 234 235 241 243 244 246 16515 247 0 0 f 16516 247 0 0 0 2 3 6 9 14 17 18 22 24 26 33 34 35 37 39 40 41 47 52 53 54 55 57 59 62 63 65 67 68 69 70 71 73 75 77 81 82 84 85 86 88 90 92 93 94 96 99 101 102 103 104 108 109 110 112 113 116 118 119 120 121 122 124 125 126 127 129 130 131 132 133 135 136 137 139 140 141 143 144 145 149 151 152 159 161 164 165 167 168 170 171 173 174 176 177 178 179 180 181 182 183 188 191 193 196 198 199 200 201 202 204 206 215 216 219 220 222 225 226 227 229 230 234 236 237 238 242 243 244 16517 247 0 0 0 1 2 4 10 12 13 17 20 21 27 31 35 37 39 40 43 44 45 46 50 53 57 59 61 62 67 68 69 70 71 72 74 75 76 77 80 81 82 84 86 88 93 94 100 101 103 105 106 108 110 111 114 116 117 118 119 120 121 122 124 125 126 128 129 131 132 133 134 136 137 144 146 148 151 156 157 158 159 160 162 163 164 165 167 168 169 172 174 175 176 179 180 182 184 185 186 187 188 189 190 191 192 193 194 195 196 198 199 200 201 202 203 205 206 209 210 213 214 216 217 218 219 221 222 225 228 230 231 233 234 235 236 237 238 239 240 241 244 245 16518 247 0 0 e 16519 247 0 0 e 16520 247 0 0 e 16521 247 0 0 f 16522 247 0 0 e 16523 247 0 0 1 6 7 8 9 11 12 14 15 16 17 18 20 23 26 29 30 31 32 34 35 36 37 38 40 41 49 50 54 55 56 57 59 60 62 63 64 65 66 68 70 74 75 76 81 82 83 85 87 88 89 90 91 92 93 95 100 102 104 105 107 108 113 114 115 116 118 121 125 126 127 128 131 133 134 136 138 139 140 142 145 146 147 149 151 153 154 155 157 158 163 166 167 169 170 173 176 181 182 183 184 185 186 188 189 190 192 193 194 197 199 200 201 202 204 206 208 210 213 214 215 216 217 219 221 222 224 225 226 228 229 230 231 232 233 235 237 241 242 244 245 16524 247 0 0 f 16525 247 0 0 e 16526 247 0 0 f 16527 247 0 0 f 16528 247 0 0 f 16529 247 0 0 2 4 5 8 11 14 17 19 23 24 26 28 30 32 34 35 37 39 41 42 44 45 46 48 52 56 58 59 60 63 64 65 66 68 72 74 75 80 82 84 86 87 89 93 94 96 97 99 100 101 102 103 104 105 106 111 112 115 119 121 124 126 128 131 132 134 135 136 137 141 143 144 145 146 153 154 155 156 157 159 160 161 162 163 164 165 166 167 168 172 175 177 181 182 184 185 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 206 207 214 218 219 221 222 226 229 230 232 233 238 240 242 245 16530 247 0 0 0 3 4 8 9 11 13 14 16 17 18 19 21 22 23 24 26 27 28 29 33 37 39 40 41 42 43 44 45 48 54 55 56 57 58 62 63 66 67 68 70 71 73 74 75 76 79 81 82 83 85 86 88 89 90 93 94 95 96 97 99 102 103 104 106 107 108 114 115 117 118 121 123 129 131 134 136 138 140 142 143 144 145 146 149 150 151 154 155 156 161 165 166 167 169 176 177 178 180 184 189 190 191 192 193 195 196 197 198 200 202 203 204 205 207 208 209 211 213 214 216 218 220 223 226 229 230 233 235 236 238 239 241 243 244 16531 247 0 0 e 16532 247 0 0 0 1 2 4 8 9 13 15 18 20 22 23 24 25 27 28 29 34 36 38 39 41 43 44 45 48 51 52 54 55 57 58 60 62 68 70 71 74 76 79 80 81 82 83 85 86 87 88 89 92 93 94 98 101 103 104 105 106 107 110 111 113 114 115 116 118 122 125 126 127 128 130 140 147 148 151 155 157 162 163 164 165 166 167 171 173 175 178 179 180 182 184 186 187 191 192 193 195 196 198 200 206 208 209 211 212 214 215 216 217 218 219 221 222 224 227 228 229 234 236 237 238 239 242 244 245 16533 247 0 0 f 16534 247 0 0 0 1 2 3 5 7 8 9 10 11 13 15 17 18 19 20 22 23 24 30 31 32 33 34 36 38 39 40 41 42 44 45 48 50 52 53 55 56 57 60 61 63 64 65 73 74 76 79 86 93 95 96 99 100 101 103 104 105 107 109 111 113 114 117 118 122 124 125 127 129 130 132 133 136 141 142 145 146 147 148 149 152 153 154 155 156 158 162 163 165 169 170 171 173 175 176 178 179 180 181 182 183 184 185 186 187 188 189 195 197 199 201 203 204 205 206 208 209 211 212 214 215 216 217 218 219 220 223 226 227 229 231 232 233 234 235 236 237 239 242 244 245 246 16535 247 0 0 0 1 2 3 5 6 12 14 17 19 21 25 26 27 29 30 34 35 37 39 41 44 45 46 48 49 52 59 61 62 63 65 66 67 68 70 72 74 75 79 84 85 86 90 93 95 96 97 98 99 101 104 108 112 114 115 117 120 122 126 129 133 134 136 137 138 139 141 142 145 147 149 152 154 157 159 161 163 165 168 174 175 176 181 182 184 185 189 191 192 194 198 200 201 202 203 205 206 210 211 212 213 214 215 219 221 222 225 227 237 238 239 16536 247 0 1 e 16537 247 0 1 e 16538 247 0 1 e 16539 247 0 1 f 16540 247 0 1 e 16541 247 0 1 0 1 2 3 6 7 8 9 14 16 17 18 21 22 23 24 28 29 32 36 37 40 42 43 44 45 47 48 50 51 52 53 54 55 61 62 64 65 66 67 68 71 72 74 75 76 79 82 85 87 89 91 93 96 99 102 104 106 107 108 112 114 116 120 121 122 124 126 127 130 131 132 136 139 140 141 142 143 144 145 147 148 149 151 158 159 160 161 162 166 170 172 173 174 175 176 178 179 180 182 186 187 188 189 190 193 194 195 197 198 199 201 202 204 205 207 214 215 218 221 222 223 224 225 228 230 231 233 236 240 241 244 16542 247 0 1 f 16543 247 0 1 e 16544 247 0 1 f 16545 247 0 1 f 16546 247 0 1 f 16547 247 0 1 1 3 4 7 12 13 15 19 21 22 23 25 27 28 30 34 38 39 40 43 44 45 46 49 50 51 52 53 56 57 58 61 62 65 66 67 69 71 72 73 74 75 79 85 87 88 91 95 96 100 101 103 104 105 106 110 111 115 117 118 123 125 128 129 130 131 132 133 134 135 136 137 138 141 143 145 147 151 155 157 160 163 166 169 170 172 176 177 180 184 185 188 189 191 193 194 196 198 202 203 204 205 207 208 211 212 215 217 219 220 221 222 223 228 230 232 240 242 243 244 246 16548 247 0 1 1 4 5 6 7 11 14 15 18 19 20 22 23 26 31 33 34 35 36 37 38 41 43 45 46 47 49 51 54 55 56 57 61 71 73 74 75 76 79 81 82 85 88 90 94 95 98 99 103 107 108 109 110 111 112 113 116 117 118 119 121 125 127 131 132 133 135 137 138 139 140 141 142 143 144 147 150 154 155 161 164 165 168 171 174 176 179 180 186 187 188 197 198 199 200 201 202 207 208 209 210 212 214 216 217 219 222 223 224 229 232 233 237 240 242 243 244 16549 247 0 1 e 16550 247 0 1 0 5 8 9 18 19 20 21 22 24 26 28 30 31 32 37 40 41 43 45 47 50 53 54 56 57 58 59 62 63 64 65 67 68 69 72 73 76 77 81 82 83 84 87 89 90 97 102 107 109 111 112 113 114 117 119 120 121 125 126 127 129 131 133 135 137 138 141 144 145 146 148 149 151 152 159 161 162 163 164 165 167 168 173 176 178 179 181 182 186 187 191 192 195 197 198 199 204 205 206 207 208 215 218 219 222 227 229 230 233 234 236 237 238 239 242 243 244 246 16551 247 0 1 f 16552 247 0 1 1 5 6 7 10 11 13 14 15 17 18 21 24 25 27 28 29 31 33 35 36 39 42 43 45 46 47 49 51 52 53 55 56 61 63 64 65 67 68 69 70 73 75 78 79 81 82 84 86 88 90 91 94 101 102 103 104 106 108 118 120 121 125 126 130 135 136 137 142 143 144 148 149 151 152 153 155 156 159 163 164 165 166 168 169 170 173 176 179 181 184 185 188 189 192 193 195 196 197 200 202 204 205 206 207 210 211 215 216 219 221 224 225 226 227 228 231 233 236 237 245 16553 247 0 1 2 5 6 7 8 9 10 11 13 14 17 19 20 24 25 26 29 30 31 32 33 36 39 40 41 44 46 52 53 54 56 57 58 59 60 62 63 65 67 70 74 76 78 80 82 85 86 88 89 93 96 100 106 108 109 114 115 116 117 119 120 123 128 129 130 131 135 138 142 143 144 145 146 147 148 152 153 157 158 160 164 165 166 169 171 174 176 177 178 179 180 183 185 186 188 189 190 191 193 194 195 196 197 199 200 201 202 204 206 207 209 210 213 214 216 217 218 220 221 223 224 226 232 234 235 236 238 239 241 244 246 16554 247 0 1 e 16555 247 0 1 e 16556 247 0 1 e 16557 247 0 1 f 16558 247 0 1 e 16559 247 0 1 2 3 4 5 7 10 11 12 15 17 18 25 26 27 28 29 30 33 36 40 43 45 46 47 50 51 52 59 66 67 68 69 71 74 75 79 80 82 83 84 86 87 90 91 95 96 97 98 99 100 101 102 106 107 108 111 112 114 115 117 118 119 120 121 122 124 125 127 128 129 131 132 136 139 140 141 142 143 144 152 154 155 157 158 160 163 168 169 170 173 177 178 180 182 183 184 186 187 189 192 196 197 198 199 200 201 206 207 209 213 215 218 219 220 223 224 225 227 228 231 232 233 234 237 242 243 245 246 16560 247 0 1 f 16561 247 0 1 e 16562 247 0 1 f 16563 247 0 1 f 16564 247 0 1 f 16565 247 0 1 0 2 3 5 8 10 13 14 16 17 20 21 22 28 30 31 33 34 35 36 38 40 41 42 44 45 47 48 49 51 52 53 59 60 62 66 67 68 69 72 74 80 82 83 86 87 88 90 92 94 96 97 99 100 101 105 106 107 110 112 113 114 117 118 119 121 126 128 129 130 131 132 135 138 141 142 144 145 147 148 150 154 156 158 159 161 164 165 168 169 170 172 174 179 180 183 184 185 187 191 192 193 195 196 199 201 205 206 207 210 211 212 213 214 215 216 220 221 223 224 225 226 227 229 231 232 233 234 236 237 239 240 241 242 243 244 245 16566 247 0 1 0 2 5 6 7 8 9 10 11 12 13 15 16 17 18 20 23 26 29 30 33 34 36 37 39 40 43 44 45 47 48 50 52 56 57 60 62 63 64 65 67 68 69 71 73 76 77 78 81 82 83 89 90 91 92 93 94 95 96 98 99 102 103 106 107 109 112 116 117 118 119 121 122 124 125 127 130 131 133 134 135 136 137 138 140 142 143 144 148 154 159 160 162 164 165 166 167 169 172 173 174 175 181 182 183 185 186 187 190 191 193 199 200 201 203 204 206 207 209 211 212 213 214 215 216 217 218 219 220 222 226 227 230 233 235 238 239 242 243 246 16567 247 0 1 e 16568 247 0 1 0 2 3 6 7 10 12 14 17 18 21 23 25 26 28 31 33 34 35 37 39 42 43 45 47 48 49 52 53 56 57 59 61 62 63 64 65 67 68 69 70 71 73 74 75 76 78 79 82 87 89 90 92 97 99 100 102 103 104 105 106 107 112 114 115 116 118 119 121 123 125 129 137 138 139 144 145 147 150 152 156 157 158 160 162 164 165 168 170 172 174 175 177 178 182 184 187 193 194 196 199 200 203 204 206 207 212 214 215 216 221 222 223 224 225 227 228 229 230 231 235 238 239 240 243 244 245 16569 247 0 1 f 16570 247 0 1 0 2 4 5 7 10 13 14 15 16 19 20 21 22 26 29 30 32 33 34 35 39 40 43 46 54 55 56 58 61 62 65 66 67 70 71 72 74 77 79 81 83 84 85 87 90 91 93 94 95 97 98 99 101 102 104 105 106 108 112 113 114 115 116 118 120 121 122 125 126 127 128 129 130 134 137 138 139 140 143 146 147 148 149 151 154 155 157 158 160 161 162 165 166 169 173 176 179 181 183 184 186 189 195 196 200 201 202 206 208 212 213 214 215 217 219 221 222 223 224 226 227 228 229 231 232 234 236 237 238 239 240 241 243 244 246 16571 247 0 1 0 1 3 5 6 8 11 12 15 16 17 18 20 22 23 25 28 31 33 35 36 39 41 42 44 47 49 55 59 60 61 62 64 69 71 72 73 75 77 78 80 81 82 85 89 92 94 98 99 102 106 109 110 111 112 113 115 116 121 122 123 125 127 130 131 132 133 134 135 137 140 145 147 149 152 153 156 157 158 159 161 162 165 167 168 169 173 174 179 181 184 185 186 188 189 195 196 197 198 199 201 203 204 208 209 210 214 216 218 219 222 223 226 231 236 237 242 243 244 16572 247 0 1 e 16573 247 0 1 e 16574 247 0 1 e 16575 247 0 1 f 16576 247 0 1 e 16577 247 0 1 0 1 2 7 8 9 10 15 16 17 19 20 24 25 26 27 28 30 33 34 35 38 39 43 44 45 46 48 53 54 56 57 58 59 61 63 64 68 72 74 77 78 79 80 86 88 89 92 94 95 96 98 100 102 104 105 106 107 109 110 114 115 116 117 119 121 122 125 126 127 129 134 135 136 137 138 140 141 142 145 148 149 150 153 155 156 158 162 163 166 169 170 171 172 173 176 179 182 183 188 190 193 195 197 200 205 206 212 216 217 218 219 220 221 227 229 233 234 235 239 240 241 244 246 16578 247 0 1 f 16579 247 0 1 e 16580 247 0 1 f 16581 247 0 1 f 16582 247 0 1 f 16583 247 0 1 0 6 7 8 12 14 15 16 18 19 20 23 24 25 26 28 31 32 33 35 36 37 38 39 41 43 45 46 47 49 50 52 53 55 56 59 60 61 62 65 68 79 80 83 85 86 88 91 93 95 96 97 99 100 104 106 108 111 113 114 115 116 117 118 119 125 132 134 135 136 139 140 141 144 146 147 148 149 153 154 156 157 158 161 162 168 169 171 172 173 174 175 176 177 178 179 180 185 186 187 188 193 194 195 201 213 215 216 218 219 220 221 224 228 229 230 234 235 239 241 242 243 244 246 16584 247 0 1 1 7 9 10 11 13 14 15 20 21 22 25 29 30 31 32 36 37 38 41 43 44 46 47 48 52 53 54 56 64 67 71 73 74 80 82 83 85 86 91 92 93 94 95 98 100 105 106 107 109 113 114 115 116 117 119 121 122 125 127 132 134 139 141 143 144 146 151 152 156 157 164 166 168 172 173 175 176 181 182 184 186 187 188 192 193 195 196 199 201 202 210 211 213 216 219 220 225 228 230 233 234 235 239 240 241 242 243 244 16585 247 0 1 e 16586 247 0 1 0 1 3 5 6 7 9 12 13 16 19 20 22 25 28 33 35 36 38 40 41 42 43 44 46 47 48 52 54 55 60 61 62 63 64 65 66 67 70 73 74 76 77 78 79 83 84 86 90 92 95 97 99 102 103 105 108 110 112 115 119 121 127 129 130 131 133 134 136 138 139 141 142 144 146 151 153 155 157 158 159 162 163 165 167 168 169 170 172 173 174 175 176 177 180 181 185 186 187 188 189 194 196 199 203 204 206 207 208 209 211 212 213 216 218 219 220 222 224 225 226 227 230 241 243 244 245 16587 247 0 1 f 16588 247 0 1 0 1 3 4 5 6 9 10 12 14 16 18 20 22 25 26 28 30 31 33 36 38 40 41 43 44 47 48 50 52 53 54 58 60 62 66 68 69 71 73 74 80 82 84 86 88 90 91 92 93 98 99 102 103 107 108 110 112 113 114 115 117 121 124 125 126 127 130 132 133 135 138 139 140 141 143 147 149 150 152 154 156 160 162 163 165 166 173 175 177 179 184 185 186 187 190 192 193 195 196 197 201 202 203 204 205 208 209 218 219 221 224 225 228 229 230 232 234 235 243 244 245 16589 247 0 1 4 6 7 8 9 13 15 16 17 18 22 24 26 27 29 30 31 35 38 40 42 47 48 49 54 55 57 58 59 60 61 63 64 65 66 68 69 70 71 73 77 80 81 83 86 87 88 89 91 93 94 96 97 98 99 100 101 102 103 104 108 109 111 112 113 114 117 118 122 123 125 130 133 136 137 138 139 140 142 143 146 149 150 151 153 154 155 159 160 164 166 167 170 171 172 173 174 175 177 180 184 185 191 192 193 195 197 198 201 207 208 209 211 212 214 215 219 220 221 222 224 225 227 228 229 232 233 234 237 238 240 242 243 244 245 246 16590 247 0 1 e 16591 247 0 1 e 16592 247 0 1 e 16593 247 0 1 f 16594 247 0 1 e 16595 247 0 1 3 4 6 8 9 10 11 12 13 18 19 20 21 22 23 24 25 26 28 29 31 34 36 37 38 39 42 47 48 58 59 61 62 63 65 66 68 69 70 73 76 77 79 81 83 84 85 89 91 92 98 99 101 105 106 108 112 115 124 125 126 127 129 130 134 135 136 137 139 141 142 148 150 152 154 155 156 157 158 161 162 163 164 165 166 167 168 170 171 173 176 178 179 180 181 182 183 185 186 191 194 196 197 199 201 202 203 204 205 207 218 219 220 222 223 225 228 233 234 236 238 242 243 244 16596 247 0 1 f 16597 247 0 1 e 16598 247 0 1 f 16599 247 0 1 f 16600 247 0 1 f 16601 247 0 1 1 2 3 6 8 10 16 19 21 22 23 26 27 31 34 35 40 41 45 46 47 50 51 52 53 54 57 59 62 63 64 68 69 71 72 73 75 76 77 78 81 84 89 91 94 95 96 99 100 101 102 103 104 105 106 107 108 109 112 113 115 117 119 120 121 122 123 124 126 127 128 131 132 135 140 141 143 145 147 148 149 151 154 156 157 160 161 163 164 165 166 168 171 172 173 174 176 179 180 181 182 184 186 187 192 195 197 201 204 205 206 207 209 210 212 214 215 216 217 220 221 223 225 226 228 230 231 232 233 235 236 237 240 243 244 16602 247 0 1 0 1 2 3 4 5 7 8 10 12 15 19 25 26 27 37 40 42 43 45 46 47 50 54 55 56 57 58 62 64 65 66 67 68 69 71 73 74 75 76 77 80 82 85 88 89 90 91 93 95 96 98 105 108 109 111 112 116 118 119 121 122 123 124 126 129 130 131 132 139 141 142 145 146 149 150 151 152 153 154 156 158 161 168 169 172 179 180 182 183 188 190 193 197 198 200 202 203 204 207 209 210 216 218 219 220 223 225 227 228 231 232 234 235 237 238 239 240 243 244 245 16603 247 0 1 e 16604 247 0 1 0 3 4 5 7 9 12 13 14 16 17 19 24 25 26 27 28 29 31 32 33 34 35 38 39 42 43 45 48 49 52 53 54 55 56 57 58 59 62 65 67 68 72 77 78 79 84 85 87 88 92 94 96 98 99 100 103 104 111 117 121 124 127 130 132 134 135 136 139 142 143 144 145 148 149 150 151 157 159 164 171 172 174 175 179 182 183 187 188 189 190 195 197 199 201 202 205 209 211 212 216 217 219 222 223 224 226 234 237 238 239 240 243 244 245 16605 247 0 1 f 16606 247 0 1 0 1 2 7 8 9 10 13 15 17 19 20 22 23 27 31 32 33 37 40 41 44 45 46 48 50 51 52 53 56 57 60 63 65 67 68 70 71 74 77 78 81 82 86 89 90 93 95 96 98 100 101 106 107 109 110 111 113 115 117 119 120 122 127 128 131 132 133 136 138 140 141 142 144 149 154 161 162 164 166 167 169 170 172 173 174 175 182 183 184 188 189 192 194 196 202 203 205 206 209 210 211 213 217 219 221 225 226 229 231 234 236 238 241 242 243 244 16607 247 0 1 0 2 3 4 5 7 10 12 13 14 16 21 29 35 36 38 40 41 42 45 46 48 50 52 54 56 61 65 71 75 76 79 80 83 84 85 86 87 90 94 95 98 100 104 105 106 107 110 113 114 116 117 118 121 122 123 125 126 127 129 133 135 136 138 140 150 151 154 155 157 158 161 162 163 164 166 168 170 172 174 176 178 180 181 188 189 190 192 193 195 196 197 199 201 205 206 207 209 211 212 215 216 219 230 231 235 238 241 245 16608 247 1 0 e 16609 247 1 0 e 16610 247 1 0 e 16611 247 1 0 f 16612 247 1 0 e 16613 247 1 0 2 3 4 9 11 13 14 17 18 22 23 24 25 27 29 31 33 34 35 37 39 40 41 43 44 49 55 58 59 62 63 66 69 72 73 76 78 82 83 84 85 86 89 91 92 93 94 98 99 101 104 106 107 108 110 112 113 116 117 118 120 121 123 124 125 126 129 131 132 133 137 142 144 145 146 147 148 150 151 158 159 162 163 165 168 169 170 172 174 175 178 180 181 184 185 186 189 190 193 195 196 197 199 200 201 203 205 206 207 213 214 217 219 220 225 227 228 230 233 235 236 237 238 242 243 245 246 16614 247 1 0 f 16615 247 1 0 e 16616 247 1 0 f 16617 247 1 0 f 16618 247 1 0 f 16619 247 1 0 0 1 4 5 6 10 14 15 16 17 18 19 20 21 22 33 34 36 38 39 40 41 44 46 47 49 52 54 58 59 60 61 64 65 66 69 73 74 76 77 80 81 83 84 89 92 93 95 96 100 101 102 106 110 111 112 114 115 117 119 120 121 123 124 125 126 128 129 130 131 132 136 138 140 143 144 145 146 148 151 154 155 157 160 164 165 166 167 170 171 172 174 175 178 180 183 184 186 187 188 191 192 197 207 208 210 220 223 224 230 231 232 237 238 240 241 242 246 16620 247 1 0 0 1 2 4 9 10 11 16 17 18 21 24 30 33 35 37 39 40 42 46 48 49 50 52 53 54 57 58 59 61 62 63 64 66 73 74 75 77 80 83 89 91 92 96 98 101 102 103 104 105 106 108 111 112 113 115 117 120 121 124 125 126 127 128 129 130 132 133 135 138 140 142 143 146 147 151 152 155 158 161 162 163 166 167 168 169 171 175 176 179 181 182 188 190 192 196 197 200 201 203 204 205 206 207 208 210 212 213 214 218 220 223 224 225 227 228 229 241 242 244 245 246 16621 247 1 0 e 16622 247 1 0 0 4 5 6 7 8 10 11 13 14 15 19 20 22 23 24 25 26 28 31 32 33 34 35 36 37 39 48 51 52 54 55 59 60 61 62 63 65 69 70 71 75 76 79 80 82 83 84 86 87 88 90 91 93 94 95 98 99 101 102 103 105 109 115 116 118 119 120 121 122 124 126 128 129 131 132 133 134 136 138 140 142 144 148 151 153 155 165 166 169 170 173 175 177 180 181 184 185 188 192 193 196 198 199 200 201 204 205 209 210 214 217 221 224 225 226 229 232 233 235 237 239 243 244 16623 247 1 0 f 16624 247 1 0 2 4 5 6 9 11 18 20 21 22 23 32 34 36 37 38 40 41 45 46 49 50 51 54 55 56 57 58 59 64 66 67 73 74 75 76 79 81 82 83 85 88 92 93 95 99 100 101 105 106 111 115 116 117 118 119 122 124 128 129 130 134 135 137 139 140 144 145 146 147 148 149 154 156 159 160 164 165 167 168 169 170 171 174 175 177 178 180 182 184 185 187 188 189 191 193 196 197 200 201 203 206 209 210 212 215 217 220 221 224 225 226 228 229 230 232 238 239 242 244 246 16625 247 1 0 6 7 10 11 13 14 15 16 17 19 21 22 24 29 33 34 35 37 38 45 47 48 50 53 54 56 57 60 61 62 63 65 66 67 71 72 80 82 84 85 87 88 89 92 93 96 98 100 102 103 104 106 108 110 111 113 114 121 122 124 130 132 133 134 136 137 138 139 143 147 148 149 150 153 154 156 158 160 162 165 166 168 169 170 171 174 176 177 179 180 184 187 192 194 195 196 197 199 202 203 204 207 210 212 215 217 218 219 223 225 226 228 233 234 238 239 240 241 244 245 16626 247 1 0 e 16627 247 1 0 e 16628 247 1 0 e 16629 247 1 0 f 16630 247 1 0 e 16631 247 1 0 1 2 4 6 7 8 9 10 15 16 18 19 20 21 22 23 24 25 28 29 32 34 35 36 38 41 42 43 44 47 48 50 51 53 54 55 57 60 61 63 67 68 71 72 74 75 78 82 83 85 86 87 88 89 90 91 92 95 96 97 98 104 109 111 114 115 119 122 124 127 132 133 134 136 137 138 140 144 147 148 149 150 153 156 157 158 160 162 163 164 167 169 173 174 175 178 179 180 181 184 185 187 190 192 193 195 198 199 203 206 209 212 213 214 219 220 224 225 229 230 231 238 239 240 243 16632 247 1 0 f 16633 247 1 0 e 16634 247 1 0 f 16635 247 1 0 f 16636 247 1 0 f 16637 247 1 0 0 3 5 7 8 9 10 11 13 14 15 19 20 21 22 23 24 30 32 34 36 38 39 41 42 44 45 48 49 50 51 52 53 56 57 58 61 62 64 65 67 68 70 74 78 81 82 83 90 93 94 100 101 102 106 107 108 110 111 113 114 115 119 120 124 125 129 130 131 132 133 137 138 139 141 142 143 144 145 149 152 154 155 159 160 162 163 165 166 168 169 172 175 177 179 181 187 189 195 201 202 205 207 208 209 210 214 215 219 221 223 225 228 229 230 235 237 243 246 16638 247 1 0 0 3 4 10 11 13 14 18 19 20 21 23 25 29 30 35 37 39 40 42 45 46 48 49 51 53 54 55 56 58 59 60 61 67 69 70 73 78 80 85 96 97 101 103 104 105 110 112 113 114 116 117 121 125 126 128 133 134 135 136 141 144 147 149 152 153 154 155 156 157 161 162 164 165 167 168 169 170 172 174 175 176 178 179 181 183 184 186 190 191 192 193 195 197 202 204 205 206 207 208 209 210 212 216 218 221 222 224 228 229 230 233 234 237 238 241 242 244 245 246 16639 247 1 0 e 16640 247 1 0 0 2 3 4 5 6 11 15 19 20 22 24 26 27 29 30 35 39 41 43 44 45 49 51 53 55 58 59 61 68 69 73 74 76 78 79 82 83 86 87 89 90 91 93 95 97 103 107 108 110 112 113 115 117 118 119 120 125 126 127 131 132 133 134 135 138 140 141 142 143 144 145 146 148 150 151 152 154 157 159 161 162 163 165 166 167 169 170 172 173 174 175 176 177 179 184 186 187 190 191 192 194 197 200 202 203 204 205 206 207 209 211 213 214 215 217 218 219 220 221 222 223 229 230 231 232 233 234 235 238 239 242 243 245 246 16641 247 1 0 f 16642 247 1 0 0 2 3 8 9 10 13 16 17 18 19 24 25 27 28 29 31 35 36 37 40 42 45 47 48 50 52 54 55 56 58 59 62 63 66 70 72 75 77 78 81 82 84 85 87 90 93 95 96 97 101 103 105 106 107 108 109 112 114 115 118 119 120 121 130 131 134 135 137 138 140 142 144 145 149 151 152 156 158 160 164 165 167 168 172 173 174 175 176 179 181 182 183 188 189 190 191 193 196 197 199 209 211 214 215 217 218 220 221 222 224 226 227 228 229 233 235 236 237 243 244 245 246 16643 247 1 0 1 2 4 9 11 12 15 16 19 22 23 24 26 27 29 32 34 35 36 39 41 42 43 44 46 47 48 51 52 54 56 57 60 61 62 63 64 65 66 67 70 72 73 75 78 79 80 82 83 84 85 87 90 93 94 97 98 99 100 101 103 105 106 107 109 110 112 113 114 115 119 120 123 127 128 131 132 133 134 137 139 140 141 142 143 144 145 149 151 154 155 156 159 161 162 164 165 166 168 170 173 175 176 177 180 184 186 187 191 196 199 200 203 206 210 211 212 213 215 219 220 221 222 228 229 230 235 236 239 240 242 16644 247 1 0 e 16645 247 1 0 e 16646 247 1 0 e 16647 247 1 0 f 16648 247 1 0 e 16649 247 1 0 2 5 6 8 10 12 13 18 22 27 30 31 32 33 38 41 42 44 45 46 49 50 51 53 54 55 56 60 63 65 66 67 68 69 73 74 76 77 80 84 87 89 93 94 96 97 99 100 109 110 114 117 119 120 121 123 124 129 131 135 136 137 139 140 143 145 147 148 150 151 154 155 159 160 161 162 165 166 167 168 170 175 177 178 181 182 185 187 188 189 191 192 195 198 199 201 203 205 206 208 209 210 211 212 213 217 218 220 223 224 225 226 227 228 229 230 232 235 244 245 246 16650 247 1 0 f 16651 247 1 0 e 16652 247 1 0 f 16653 247 1 0 f 16654 247 1 0 f 16655 247 1 0 1 2 3 4 8 11 13 14 15 16 19 20 21 27 31 32 34 35 40 43 46 48 49 50 51 52 55 56 57 58 60 63 66 67 68 69 73 75 83 85 86 89 92 93 96 99 101 103 104 105 106 108 109 110 115 118 119 120 123 125 128 129 130 132 134 135 136 137 139 140 143 144 146 148 149 150 151 154 156 158 159 161 164 167 168 169 170 171 174 176 184 185 186 187 189 190 193 194 197 200 202 203 204 205 209 210 214 215 217 218 220 222 225 226 227 228 230 232 233 236 237 238 239 241 243 246 16656 247 1 0 3 5 6 9 15 19 20 22 23 24 25 28 29 33 35 36 43 44 45 46 48 50 51 53 54 58 61 62 63 64 66 68 69 70 74 76 77 78 79 80 81 82 85 86 87 91 94 96 97 98 99 100 104 106 107 108 110 111 113 115 116 118 120 124 127 128 130 131 132 133 134 137 141 144 145 148 149 150 151 153 154 155 158 160 162 165 166 167 168 170 171 175 176 177 179 180 182 183 185 186 189 190 191 193 195 196 200 203 204 205 206 207 208 210 212 215 224 225 227 229 233 235 236 238 240 242 244 16657 247 1 0 e 16658 247 1 0 1 2 3 7 10 11 12 13 15 16 17 19 20 22 27 29 32 35 38 39 40 41 42 45 48 49 51 54 59 60 63 64 66 68 70 71 73 75 76 77 79 81 83 84 88 91 92 95 96 98 99 100 101 102 103 104 105 106 108 109 112 113 114 115 119 120 122 123 124 127 130 133 136 137 138 140 141 142 143 144 145 147 148 149 150 151 153 156 157 162 163 164 165 167 168 169 171 172 173 174 175 176 178 179 180 181 185 188 189 190 192 193 195 196 197 198 199 200 201 202 203 204 207 208 211 212 213 214 216 218 219 221 224 225 228 229 232 233 235 237 238 240 242 243 245 16659 247 1 0 f 16660 247 1 0 4 6 7 9 11 14 15 17 21 22 23 24 26 27 29 31 33 34 35 37 38 39 43 46 47 50 51 53 54 59 61 64 70 71 72 74 76 77 78 80 81 84 88 89 90 91 96 97 102 104 105 107 113 114 118 119 120 121 122 126 131 132 135 137 138 139 143 145 149 152 154 155 156 160 161 165 169 171 177 178 179 180 182 184 185 187 189 191 193 195 196 197 200 202 203 204 211 212 215 216 217 218 220 225 226 232 235 236 237 244 245 16661 247 1 0 0 1 3 5 7 9 10 13 14 15 16 18 21 22 23 24 26 28 29 31 33 34 35 37 38 39 40 48 50 52 54 55 56 57 59 60 61 67 69 70 73 74 75 77 79 81 90 91 95 96 98 99 103 105 106 107 108 110 113 115 117 118 121 125 129 131 134 135 137 138 140 142 146 147 148 149 152 153 154 157 158 159 160 161 167 168 171 172 178 182 184 186 193 194 195 196 198 199 200 202 204 206 209 210 211 212 214 215 216 217 221 222 223 225 226 229 234 235 236 241 242 245 16662 247 1 0 e 16663 247 1 0 e 16664 247 1 0 e 16665 247 1 0 f 16666 247 1 0 e 16667 247 1 0 1 2 3 4 6 7 8 9 14 15 21 22 25 30 31 34 36 37 38 39 40 44 46 48 50 54 55 60 61 63 65 68 72 73 74 77 78 82 83 84 88 89 90 92 93 96 97 98 99 100 103 105 107 108 109 111 113 114 118 120 122 123 126 128 129 131 132 134 137 138 140 145 146 147 149 150 153 154 155 156 157 159 160 162 163 164 165 166 168 169 170 171 173 176 180 184 186 187 190 192 193 194 195 196 197 200 201 204 206 207 208 209 211 213 214 217 219 222 223 225 226 227 228 229 231 232 233 235 237 238 239 240 242 244 245 16668 247 1 0 f 16669 247 1 0 e 16670 247 1 0 f 16671 247 1 0 f 16672 247 1 0 f 16673 247 1 0 1 2 3 4 5 6 7 9 10 12 13 14 15 16 19 20 22 23 25 28 30 32 33 35 36 38 39 41 45 50 52 53 54 55 56 59 60 62 63 66 67 69 70 71 74 75 79 80 82 84 85 87 89 94 95 96 97 98 101 102 103 104 105 106 110 111 113 116 117 120 121 122 125 127 129 131 132 134 135 137 138 141 143 144 145 147 148 151 156 157 160 161 164 170 171 177 181 184 185 186 187 193 194 197 199 202 206 207 208 209 210 212 214 215 216 217 218 222 226 227 230 231 235 236 237 238 239 240 241 242 243 244 245 16674 247 1 0 0 4 8 9 10 15 16 17 19 27 29 33 34 37 39 40 43 44 45 46 51 53 55 56 58 63 64 69 71 73 74 75 77 79 81 82 83 88 90 98 99 101 102 104 105 108 109 111 112 114 118 123 124 125 130 133 134 135 144 145 151 152 153 154 156 158 159 161 163 166 167 168 169 174 179 181 184 186 187 190 191 194 195 196 198 199 201 203 205 207 209 210 211 212 214 215 217 219 222 225 229 230 231 232 234 237 240 16675 247 1 0 e 16676 247 1 0 0 1 2 3 5 6 7 9 10 11 12 13 14 15 16 17 22 23 26 27 28 30 31 33 34 36 37 42 45 48 49 50 51 53 54 56 57 59 60 64 66 67 68 69 70 73 74 76 78 80 86 88 89 90 91 96 97 98 99 100 101 104 106 107 112 113 114 116 119 122 123 124 126 127 129 132 133 135 136 138 140 141 142 143 144 145 146 147 150 151 152 153 155 156 158 164 165 167 171 174 175 177 178 185 189 191 193 196 197 200 201 205 208 209 210 211 215 216 218 222 223 226 228 230 231 232 233 236 238 239 241 242 243 244 245 246 16677 247 1 0 f 16678 247 1 0 0 2 4 7 8 10 13 14 16 17 18 20 22 23 24 25 27 28 31 32 34 35 38 40 46 50 52 53 57 61 62 64 65 69 70 71 75 76 77 82 84 85 86 88 89 90 91 92 93 95 96 99 101 102 103 106 107 111 112 113 114 115 116 117 119 120 121 122 124 125 131 134 135 136 137 138 139 141 142 144 145 146 147 150 154 155 157 159 161 162 163 165 166 168 173 174 176 177 180 184 189 191 192 194 200 201 202 204 206 210 212 217 218 219 221 228 229 230 231 232 236 238 240 241 244 245 246 16679 247 1 0 1 2 5 6 8 9 10 12 13 16 17 18 20 21 23 24 25 28 33 34 36 38 39 41 44 46 47 50 51 54 60 61 62 64 66 68 69 72 74 75 76 80 84 86 87 88 91 92 93 94 95 97 102 104 105 106 107 112 114 115 116 118 120 121 123 124 128 129 130 133 134 136 137 139 144 145 146 147 149 152 154 155 156 159 165 166 167 168 169 170 171 179 180 182 183 184 185 187 189 191 192 193 196 197 200 205 206 207 208 211 212 214 215 219 220 221 222 223 224 225 228 230 231 232 238 240 244 245 16680 247 1 1 e 16681 247 1 1 e 16682 247 1 1 e 16683 247 1 1 f 16684 247 1 1 e 16685 247 1 1 2 5 11 13 14 16 18 19 20 22 23 24 30 31 35 37 38 39 40 42 45 51 54 56 58 61 63 65 66 69 73 74 75 76 78 79 82 83 85 91 93 94 98 99 107 110 111 113 114 115 116 120 121 122 125 126 127 129 130 132 134 136 143 146 148 151 152 154 157 162 164 165 166 167 169 170 171 174 177 178 180 182 183 184 185 187 188 189 194 199 203 207 208 209 211 214 215 218 219 223 224 225 229 231 232 233 234 236 237 239 240 241 242 244 245 16686 247 1 1 f 16687 247 1 1 e 16688 247 1 1 f 16689 247 1 1 f 16690 247 1 1 f 16691 247 1 1 4 5 7 8 12 15 18 19 21 24 25 27 28 32 35 37 38 39 45 47 48 52 53 55 56 57 58 59 60 61 62 63 67 70 71 73 75 76 77 78 79 82 84 86 87 89 92 94 96 98 100 101 104 105 108 109 116 118 119 123 124 127 128 132 133 134 135 136 137 139 140 144 145 152 153 155 156 157 158 159 160 163 165 166 168 169 171 173 177 178 179 184 185 187 190 192 193 196 198 199 202 203 204 206 208 209 212 215 217 218 219 220 221 223 224 225 226 227 228 229 230 232 233 234 235 236 237 239 240 241 243 245 246 16692 247 1 1 2 11 13 14 16 19 26 27 30 31 32 36 37 38 40 41 44 45 46 47 50 51 52 55 56 58 60 61 63 69 72 73 75 76 78 81 85 88 91 92 93 97 100 101 102 103 104 106 109 110 111 112 113 116 119 120 121 123 124 125 126 127 128 137 138 139 140 142 146 148 150 155 158 160 162 164 165 168 171 172 177 182 184 185 190 191 192 195 197 198 200 203 206 207 211 212 213 215 216 217 224 226 229 230 233 234 235 237 238 239 241 242 244 245 16693 247 1 1 e 16694 247 1 1 0 1 2 4 8 9 14 17 22 24 25 28 30 31 32 33 35 37 40 43 44 49 51 57 58 60 61 63 64 65 66 72 73 77 78 79 80 82 84 86 89 90 92 95 96 98 102 105 106 107 108 110 112 113 114 118 119 122 123 124 126 127 129 131 133 135 136 137 138 139 141 144 145 146 150 151 152 153 154 155 159 161 162 164 165 167 168 169 172 173 174 176 178 180 181 182 183 184 185 186 187 190 192 194 195 201 202 203 204 205 210 212 213 215 217 218 219 224 226 230 231 233 234 236 238 239 16695 247 1 1 f 16696 247 1 1 0 2 4 6 7 9 10 11 14 16 17 18 20 22 23 24 26 28 32 34 35 36 37 38 40 41 52 54 56 57 58 59 64 67 68 69 71 72 73 74 75 79 80 81 82 83 85 88 89 90 94 95 98 101 103 104 106 107 108 110 111 112 113 116 117 119 120 123 124 126 129 130 131 132 133 134 137 139 140 142 143 144 147 148 149 151 153 154 155 156 157 161 164 165 166 168 171 173 174 177 180 181 182 183 185 186 190 191 197 199 201 202 203 204 207 215 216 223 225 226 227 228 230 231 234 235 236 237 238 242 243 245 16697 247 1 1 2 3 4 5 12 13 14 15 18 21 23 26 27 28 29 32 35 37 39 41 42 44 45 47 49 51 52 54 55 56 57 58 59 64 65 67 68 70 73 75 76 77 78 80 84 87 88 90 92 94 95 98 100 103 105 106 107 108 109 114 115 116 118 119 120 123 124 126 127 132 133 136 142 144 145 147 152 153 156 160 161 162 163 165 166 170 172 173 174 175 176 180 181 182 184 186 187 193 194 195 196 197 198 201 202 203 205 206 211 215 218 219 220 221 224 226 227 229 232 233 236 239 241 242 243 246 16698 247 1 1 e 16699 247 1 1 e 16700 247 1 1 e 16701 247 1 1 f 16702 247 1 1 e 16703 247 1 1 0 1 3 4 6 14 15 16 17 21 22 25 27 28 29 30 31 32 35 36 40 42 44 47 49 50 51 53 55 57 58 60 63 64 65 66 69 70 71 76 78 81 82 83 84 88 90 91 92 93 96 98 99 101 102 103 106 108 109 111 112 114 115 116 118 119 121 124 125 126 129 135 136 138 144 146 147 149 151 152 153 156 157 158 160 162 164 165 166 167 169 173 174 176 177 180 181 184 185 186 187 188 189 190 193 194 196 197 199 200 206 208 209 210 211 212 216 219 223 224 225 227 228 230 232 234 246 16704 247 1 1 f 16705 247 1 1 e 16706 247 1 1 f 16707 247 1 1 f 16708 247 1 1 f 16709 247 1 1 1 2 4 7 10 11 14 15 17 19 21 23 27 28 29 34 36 39 40 42 43 44 45 46 48 50 55 56 59 61 63 65 71 72 74 76 77 78 79 80 81 82 84 86 87 88 91 93 94 95 96 97 99 102 104 105 106 107 108 111 114 116 117 118 123 126 127 130 131 132 133 134 136 137 139 141 146 147 149 151 153 154 157 163 168 169 173 174 175 178 179 182 185 186 188 190 191 192 194 198 202 203 204 208 210 213 214 215 217 226 227 228 229 231 232 234 235 236 239 242 243 244 245 246 16710 247 1 1 2 3 4 6 7 8 10 11 12 15 18 21 22 23 25 26 28 29 35 38 41 42 47 48 51 53 54 55 56 57 59 60 63 64 65 66 68 69 72 74 75 76 78 80 81 83 84 86 87 89 90 101 102 103 105 106 109 110 111 112 114 115 116 117 118 120 121 125 128 129 130 132 138 140 143 144 150 151 152 156 157 158 159 160 163 164 168 169 170 171 176 177 178 179 182 184 187 188 190 191 192 193 195 197 198 200 201 202 204 207 210 211 212 213 214 216 219 220 221 222 224 228 230 231 232 233 234 235 238 239 240 246 16711 247 1 1 e 16712 247 1 1 1 4 6 11 13 15 16 18 19 25 26 27 30 33 34 35 37 40 41 45 48 50 52 54 55 58 59 60 63 65 66 67 68 71 72 74 78 81 82 87 88 89 91 93 94 95 96 97 98 100 101 103 107 110 111 112 113 118 122 123 125 126 127 129 132 133 136 137 138 141 144 145 147 151 152 154 156 157 161 162 170 171 174 180 183 184 185 187 188 195 196 197 202 203 204 205 207 212 213 215 216 217 221 222 224 227 230 231 232 233 234 236 237 241 242 244 16713 247 1 1 f 16714 247 1 1 2 3 6 7 9 13 15 18 19 21 23 26 27 30 31 33 34 35 38 39 42 43 44 46 51 53 59 63 64 66 68 69 70 73 74 77 78 79 85 86 87 91 93 94 97 98 99 100 101 103 104 107 108 109 110 114 117 120 121 124 125 126 127 128 129 130 137 140 141 142 143 149 150 154 157 159 163 165 167 168 175 176 177 179 180 185 187 188 189 190 192 199 200 201 205 207 208 210 211 212 214 218 219 221 224 226 228 231 233 236 237 239 243 244 16715 247 1 1 0 1 3 5 8 9 12 15 16 20 21 22 23 28 29 31 32 33 34 35 36 39 40 41 42 43 47 48 49 51 52 53 55 57 61 69 70 73 75 77 78 81 82 84 91 93 94 95 96 98 100 101 102 104 108 109 110 112 113 114 115 117 121 123 130 133 134 138 141 142 147 151 154 155 156 160 162 165 166 168 169 170 175 176 177 178 181 192 195 196 199 200 204 205 207 211 213 215 216 218 220 222 223 224 226 227 230 233 234 236 238 240 242 243 244 246 16716 247 1 1 e 16717 247 1 1 e 16718 247 1 1 e 16719 247 1 1 f 16720 247 1 1 e 16721 247 1 1 0 1 2 4 8 11 12 16 21 24 27 29 34 38 40 41 43 45 49 50 52 53 54 59 61 63 64 66 68 69 70 72 76 78 82 83 85 87 89 90 96 98 99 100 101 103 106 108 109 115 116 117 118 121 122 123 125 130 134 135 136 137 138 139 140 142 143 144 146 147 148 150 153 156 157 158 159 161 163 164 166 167 169 171 174 175 176 177 178 179 181 185 186 188 189 196 197 199 200 201 202 203 205 206 207 208 209 210 211 213 215 216 222 223 224 225 227 228 230 231 233 234 236 237 243 245 246 16722 247 1 1 f 16723 247 1 1 e 16724 247 1 1 f 16725 247 1 1 f 16726 247 1 1 f 16727 247 1 1 0 4 5 8 10 15 17 18 19 20 24 25 26 27 28 29 30 31 35 36 37 39 40 47 49 50 60 64 65 67 69 72 73 74 77 79 80 82 84 86 88 91 92 93 94 95 99 100 101 103 104 107 109 110 113 114 117 118 119 122 124 125 126 128 131 133 134 141 142 143 144 147 150 153 154 157 158 163 166 167 168 173 175 177 178 179 181 183 184 185 188 190 191 192 194 196 197 198 199 200 205 207 208 211 213 214 215 216 217 221 223 227 228 230 231 233 235 236 240 241 243 244 246 16728 247 1 1 3 9 10 12 13 15 18 20 22 25 26 31 34 35 36 42 43 45 46 47 49 50 53 54 57 58 59 60 61 62 65 69 71 74 82 84 86 89 92 94 99 101 102 106 108 110 113 114 117 118 122 124 128 129 131 132 136 138 139 140 141 142 145 146 147 149 151 153 157 158 160 163 165 166 169 170 171 173 175 176 177 178 180 181 183 184 189 190 191 193 194 195 196 197 198 199 201 202 203 204 206 207 209 210 211 212 214 215 216 219 221 222 224 225 227 230 231 233 234 236 237 238 240 241 16729 247 1 1 e 16730 247 1 1 0 3 4 6 9 13 14 16 17 20 23 24 30 32 35 36 38 46 49 51 53 54 56 58 60 62 63 64 68 70 72 74 76 79 81 82 83 84 85 86 87 89 91 94 95 96 99 100 102 103 105 106 111 118 129 130 133 134 135 136 137 138 139 142 143 147 148 151 153 155 156 157 160 162 165 166 167 168 169 170 173 175 176 179 180 181 182 190 192 193 195 198 201 203 204 205 207 209 211 212 218 219 220 221 222 223 226 227 228 229 232 233 237 239 240 241 242 244 245 246 16731 247 1 1 f 16732 247 1 1 8 9 10 11 12 13 14 17 19 23 24 25 26 28 29 33 34 35 36 37 38 39 40 41 44 46 58 60 62 64 65 66 67 68 69 70 72 74 75 76 77 78 79 80 84 85 86 89 90 93 101 102 105 107 110 114 117 119 120 122 124 128 129 130 132 134 135 138 139 141 143 147 149 150 152 153 155 157 160 162 164 165 167 168 170 173 175 177 178 181 182 187 189 190 191 193 195 197 198 201 202 203 204 206 207 209 211 212 217 218 219 220 221 222 223 224 226 229 230 231 232 233 234 237 240 241 246 16733 247 1 1 0 2 4 5 7 10 11 12 13 16 21 22 23 24 25 28 29 30 31 32 33 35 38 39 40 41 42 43 44 47 50 51 53 54 60 63 66 67 68 69 70 71 72 74 75 76 77 78 81 83 87 89 93 101 105 108 112 113 116 117 121 122 123 124 127 128 134 135 140 141 142 143 149 150 151 152 153 157 161 162 163 165 166 167 169 172 174 176 178 179 180 181 182 183 184 188 189 190 193 194 195 196 197 200 201 204 206 207 208 210 211 215 216 217 219 221 222 223 224 225 226 228 230 232 234 235 236 237 238 244 245 16734 247 1 1 e 16735 247 1 1 e 16736 247 1 1 e 16737 247 1 1 f 16738 247 1 1 e 16739 247 1 1 0 2 4 5 7 10 11 13 14 15 16 17 18 19 20 22 24 30 31 32 35 37 38 39 42 43 52 57 58 59 62 63 64 66 70 71 72 73 77 78 79 82 83 84 90 91 92 93 94 95 96 98 100 101 102 103 104 107 110 111 112 113 114 115 118 119 121 124 126 127 128 129 130 131 132 133 134 135 138 139 140 142 143 148 153 156 158 159 161 164 169 174 175 176 180 182 186 188 189 190 192 194 195 196 197 200 201 204 207 208 211 212 213 219 220 223 224 225 227 228 229 230 231 236 237 239 242 16740 247 1 1 f 16741 247 1 1 e 16742 247 1 1 f 16743 247 1 1 f 16744 247 1 1 f 16745 247 1 1 0 1 2 3 4 6 9 10 12 13 15 17 19 20 22 23 26 27 28 31 32 35 36 44 45 49 50 53 54 55 57 60 61 63 64 65 66 67 69 70 71 77 79 80 82 83 85 86 87 88 91 92 93 94 95 98 99 101 103 105 106 112 117 119 121 122 124 128 129 130 132 135 139 140 141 142 143 144 149 152 153 154 157 158 160 161 162 163 166 172 174 175 179 180 183 185 187 188 189 191 192 194 195 196 200 201 203 204 206 208 209 211 215 217 218 220 224 227 228 229 230 232 235 236 237 239 240 244 245 16746 247 1 1 1 3 5 7 8 9 11 14 15 19 23 25 27 28 33 35 36 37 38 39 43 44 46 47 50 51 54 55 56 59 60 61 62 63 66 68 70 72 76 80 82 84 85 86 87 88 91 94 95 96 98 99 100 101 103 105 109 111 115 118 120 122 123 124 125 126 129 132 134 140 141 145 147 148 149 150 151 153 154 155 156 159 161 163 169 170 172 174 177 178 180 181 182 184 185 187 189 190 193 195 197 199 204 205 207 208 211 216 221 222 223 224 228 229 230 232 234 235 238 240 241 246 16747 247 1 1 e 16748 247 1 1 1 2 5 7 8 15 18 19 20 21 22 23 24 25 27 28 29 30 32 33 34 35 36 37 38 39 42 43 44 46 47 48 49 50 52 53 57 62 64 67 71 72 74 76 77 80 82 86 87 91 92 93 94 95 99 101 102 105 106 108 110 111 112 113 115 118 120 121 124 129 131 132 137 143 144 146 148 149 150 152 153 154 155 159 160 161 162 163 165 166 167 168 172 175 176 178 179 180 181 183 184 187 189 190 195 200 201 202 205 210 212 214 215 218 219 223 224 225 228 229 230 231 232 233 235 236 239 240 243 16749 247 1 1 f 16750 247 1 1 0 1 3 4 5 7 8 15 16 17 19 20 21 23 26 28 30 31 32 33 34 35 36 38 40 41 42 43 45 46 48 51 52 56 58 59 60 62 63 65 66 70 75 78 84 85 86 87 89 90 91 93 94 95 96 98 100 101 105 107 108 114 117 118 120 121 123 126 128 129 131 133 135 136 139 140 141 150 151 154 155 156 157 158 163 166 168 170 171 172 174 178 179 180 181 182 185 186 187 189 191 193 194 195 197 200 202 203 205 207 209 210 212 214 215 217 218 219 220 222 225 230 232 233 236 237 240 241 242 16751 247 1 1 0 4 5 9 11 13 15 16 19 20 24 26 28 30 32 34 35 38 39 43 45 46 56 58 60 61 62 63 65 67 70 72 77 78 81 82 83 88 90 91 93 95 96 97 98 99 104 105 106 107 108 109 111 112 114 117 122 124 127 129 130 131 136 139 141 142 143 144 149 150 151 152 153 155 158 159 162 163 164 167 168 171 174 176 178 180 182 183 186 188 189 193 195 198 199 200 202 205 212 215 216 220 221 222 224 225 227 229 230 233 234 235 236 238 244 245 16752 0 0 0 e 16753 0 0 0 e 16754 0 0 0 e 16755 0 0 0 e 16756 0 0 0 e 16757 0 0 0 e 16758 0 0 0 e 16759 0 0 0 e 16760 0 0 0 e 16761 0 0 0 e 16762 0 0 0 e 16763 0 0 0 e 16764 0 0 0 e 16765 0 0 0 e 16766 0 0 0 e 16767 0 0 0 e 16768 0 0 0 e 16769 0 0 0 e 16770 0 0 0 e 16771 0 0 0 e 16772 0 0 0 e 16773 0 0 0 e 16774 0 0 0 e 16775 0 0 0 e 16776 0 0 0 e 16777 0 0 0 e 16778 0 0 0 e 16779 0 0 0 e 16780 0 0 0 e 16781 0 0 0 e 16782 0 0 0 e 16783 0 0 0 e 16784 0 0 0 e 16785 0 0 0 e 16786 0 0 0 e 16787 0 0 0 e 16788 0 0 0 e 16789 0 0 0 e 16790 0 0 0 e 16791 0 0 0 e 16792 0 0 0 e 16793 0 0 0 e 16794 0 0 0 e 16795 0 0 0 e 16796 0 0 0 e 16797 0 0 0 e 16798 0 0 0 e 16799 0 0 0 e 16800 0 0 0 e 16801 0 0 0 e 16802 0 0 0 e 16803 0 0 0 e 16804 0 0 0 e 16805 0 0 0 e 16806 0 0 0 e 16807 0 0 0 e 16808 0 0 0 e 16809 0 0 0 e 16810 0 0 0 e 16811 0 0 0 e 16812 0 0 0 e 16813 0 0 0 e 16814 0 0 0 e 16815 0 0 0 e 16816 0 0 0 e 16817 0 0 0 e 16818 0 0 0 e 16819 0 0 0 e 16820 0 0 0 e 16821 0 0 0 e 16822 0 0 0 e 16823 0 0 0 e 16824 0 0 1 e 16825 0 0 1 e 16826 0 0 1 e 16827 0 0 1 e 16828 0 0 1 e 16829 0 0 1 e 16830 0 0 1 e 16831 0 0 1 e 16832 0 0 1 e 16833 0 0 1 e 16834 0 0 1 e 16835 0 0 1 e 16836 0 0 1 e 16837 0 0 1 e 16838 0 0 1 e 16839 0 0 1 e 16840 0 0 1 e 16841 0 0 1 e 16842 0 0 1 e 16843 0 0 1 e 16844 0 0 1 e 16845 0 0 1 e 16846 0 0 1 e 16847 0 0 1 e 16848 0 0 1 e 16849 0 0 1 e 16850 0 0 1 e 16851 0 0 1 e 16852 0 0 1 e 16853 0 0 1 e 16854 0 0 1 e 16855 0 0 1 e 16856 0 0 1 e 16857 0 0 1 e 16858 0 0 1 e 16859 0 0 1 e 16860 0 0 1 e 16861 0 0 1 e 16862 0 0 1 e 16863 0 0 1 e 16864 0 0 1 e 16865 0 0 1 e 16866 0 0 1 e 16867 0 0 1 e 16868 0 0 1 e 16869 0 0 1 e 16870 0 0 1 e 16871 0 0 1 e 16872 0 0 1 e 16873 0 0 1 e 16874 0 0 1 e 16875 0 0 1 e 16876 0 0 1 e 16877 0 0 1 e 16878 0 0 1 e 16879 0 0 1 e 16880 0 0 1 e 16881 0 0 1 e 16882 0 0 1 e 16883 0 0 1 e 16884 0 0 1 e 16885 0 0 1 e 16886 0 0 1 e 16887 0 0 1 e 16888 0 0 1 e 16889 0 0 1 e 16890 0 0 1 e 16891 0 0 1 e 16892 0 0 1 e 16893 0 0 1 e 16894 0 0 1 e 16895 0 0 1 e 16896 0 1 0 e 16897 0 1 0 e 16898 0 1 0 e 16899 0 1 0 e 16900 0 1 0 e 16901 0 1 0 e 16902 0 1 0 e 16903 0 1 0 e 16904 0 1 0 e 16905 0 1 0 e 16906 0 1 0 e 16907 0 1 0 e 16908 0 1 0 e 16909 0 1 0 e 16910 0 1 0 e 16911 0 1 0 e 16912 0 1 0 e 16913 0 1 0 e 16914 0 1 0 e 16915 0 1 0 e 16916 0 1 0 e 16917 0 1 0 e 16918 0 1 0 e 16919 0 1 0 e 16920 0 1 0 e 16921 0 1 0 e 16922 0 1 0 e 16923 0 1 0 e 16924 0 1 0 e 16925 0 1 0 e 16926 0 1 0 e 16927 0 1 0 e 16928 0 1 0 e 16929 0 1 0 e 16930 0 1 0 e 16931 0 1 0 e 16932 0 1 0 e 16933 0 1 0 e 16934 0 1 0 e 16935 0 1 0 e 16936 0 1 0 e 16937 0 1 0 e 16938 0 1 0 e 16939 0 1 0 e 16940 0 1 0 e 16941 0 1 0 e 16942 0 1 0 e 16943 0 1 0 e 16944 0 1 0 e 16945 0 1 0 e 16946 0 1 0 e 16947 0 1 0 e 16948 0 1 0 e 16949 0 1 0 e 16950 0 1 0 e 16951 0 1 0 e 16952 0 1 0 e 16953 0 1 0 e 16954 0 1 0 e 16955 0 1 0 e 16956 0 1 0 e 16957 0 1 0 e 16958 0 1 0 e 16959 0 1 0 e 16960 0 1 0 e 16961 0 1 0 e 16962 0 1 0 e 16963 0 1 0 e 16964 0 1 0 e 16965 0 1 0 e 16966 0 1 0 e 16967 0 1 0 e 16968 0 1 1 e 16969 0 1 1 e 16970 0 1 1 e 16971 0 1 1 e 16972 0 1 1 e 16973 0 1 1 e 16974 0 1 1 e 16975 0 1 1 e 16976 0 1 1 e 16977 0 1 1 e 16978 0 1 1 e 16979 0 1 1 e 16980 0 1 1 e 16981 0 1 1 e 16982 0 1 1 e 16983 0 1 1 e 16984 0 1 1 e 16985 0 1 1 e 16986 0 1 1 e 16987 0 1 1 e 16988 0 1 1 e 16989 0 1 1 e 16990 0 1 1 e 16991 0 1 1 e 16992 0 1 1 e 16993 0 1 1 e 16994 0 1 1 e 16995 0 1 1 e 16996 0 1 1 e 16997 0 1 1 e 16998 0 1 1 e 16999 0 1 1 e 17000 0 1 1 e 17001 0 1 1 e 17002 0 1 1 e 17003 0 1 1 e 17004 0 1 1 e 17005 0 1 1 e 17006 0 1 1 e 17007 0 1 1 e 17008 0 1 1 e 17009 0 1 1 e 17010 0 1 1 e 17011 0 1 1 e 17012 0 1 1 e 17013 0 1 1 e 17014 0 1 1 e 17015 0 1 1 e 17016 0 1 1 e 17017 0 1 1 e 17018 0 1 1 e 17019 0 1 1 e 17020 0 1 1 e 17021 0 1 1 e 17022 0 1 1 e 17023 0 1 1 e 17024 0 1 1 e 17025 0 1 1 e 17026 0 1 1 e 17027 0 1 1 e 17028 0 1 1 e 17029 0 1 1 e 17030 0 1 1 e 17031 0 1 1 e 17032 0 1 1 e 17033 0 1 1 e 17034 0 1 1 e 17035 0 1 1 e 17036 0 1 1 e 17037 0 1 1 e 17038 0 1 1 e 17039 0 1 1 e 17040 1 0 0 e 17041 1 0 0 e 17042 1 0 0 e 17043 1 0 0 f 17044 1 0 0 e 17045 1 0 0 f 17046 1 0 0 f 17047 1 0 0 f 17048 1 0 0 f 17049 1 0 0 f 17050 1 0 0 f 17051 1 0 0 f 17052 1 0 0 f 17053 1 0 0 f 17054 1 0 0 e 17055 1 0 0 f 17056 1 0 0 f 17057 1 0 0 f 17058 1 0 0 e 17059 1 0 0 e 17060 1 0 0 e 17061 1 0 0 f 17062 1 0 0 e 17063 1 0 0 f 17064 1 0 0 f 17065 1 0 0 f 17066 1 0 0 f 17067 1 0 0 f 17068 1 0 0 f 17069 1 0 0 f 17070 1 0 0 e 17071 1 0 0 e 17072 1 0 0 f 17073 1 0 0 f 17074 1 0 0 e 17075 1 0 0 e 17076 1 0 0 e 17077 1 0 0 e 17078 1 0 0 e 17079 1 0 0 f 17080 1 0 0 e 17081 1 0 0 e 17082 1 0 0 f 17083 1 0 0 f 17084 1 0 0 f 17085 1 0 0 f 17086 1 0 0 f 17087 1 0 0 f 17088 1 0 0 e 17089 1 0 0 e 17090 1 0 0 f 17091 1 0 0 f 17092 1 0 0 f 17093 1 0 0 f 17094 1 0 0 e 17095 1 0 0 e 17096 1 0 0 e 17097 1 0 0 f 17098 1 0 0 e 17099 1 0 0 f 17100 1 0 0 f 17101 1 0 0 f 17102 1 0 0 f 17103 1 0 0 f 17104 1 0 0 f 17105 1 0 0 f 17106 1 0 0 e 17107 1 0 0 e 17108 1 0 0 f 17109 1 0 0 f 17110 1 0 0 e 17111 1 0 0 e 17112 1 0 1 e 17113 1 0 1 e 17114 1 0 1 e 17115 1 0 1 f 17116 1 0 1 e 17117 1 0 1 e 17118 1 0 1 f 17119 1 0 1 f 17120 1 0 1 f 17121 1 0 1 f 17122 1 0 1 f 17123 1 0 1 f 17124 1 0 1 f 17125 1 0 1 f 17126 1 0 1 f 17127 1 0 1 f 17128 1 0 1 f 17129 1 0 1 f 17130 1 0 1 e 17131 1 0 1 e 17132 1 0 1 e 17133 1 0 1 f 17134 1 0 1 e 17135 1 0 1 f 17136 1 0 1 f 17137 1 0 1 f 17138 1 0 1 f 17139 1 0 1 f 17140 1 0 1 f 17141 1 0 1 f 17142 1 0 1 f 17143 1 0 1 f 17144 1 0 1 f 17145 1 0 1 f 17146 1 0 1 f 17147 1 0 1 f 17148 1 0 1 e 17149 1 0 1 e 17150 1 0 1 e 17151 1 0 1 f 17152 1 0 1 e 17153 1 0 1 e 17154 1 0 1 f 17155 1 0 1 f 17156 1 0 1 f 17157 1 0 1 f 17158 1 0 1 f 17159 1 0 1 f 17160 1 0 1 f 17161 1 0 1 f 17162 1 0 1 e 17163 1 0 1 f 17164 1 0 1 f 17165 1 0 1 f 17166 1 0 1 e 17167 1 0 1 e 17168 1 0 1 e 17169 1 0 1 f 17170 1 0 1 e 17171 1 0 1 f 17172 1 0 1 f 17173 1 0 1 f 17174 1 0 1 f 17175 1 0 1 f 17176 1 0 1 f 17177 1 0 1 f 17178 1 0 1 f 17179 1 0 1 f 17180 1 0 1 f 17181 1 0 1 f 17182 1 0 1 e 17183 1 0 1 f 17184 1 1 0 e 17185 1 1 0 e 17186 1 1 0 e 17187 1 1 0 f 17188 1 1 0 e 17189 1 1 0 e 17190 1 1 0 f 17191 1 1 0 f 17192 1 1 0 f 17193 1 1 0 f 17194 1 1 0 f 17195 1 1 0 f 17196 1 1 0 e 17197 1 1 0 e 17198 1 1 0 e 17199 1 1 0 f 17200 1 1 0 e 17201 1 1 0 f 17202 1 1 0 e 17203 1 1 0 e 17204 1 1 0 e 17205 1 1 0 f 17206 1 1 0 e 17207 1 1 0 f 17208 1 1 0 f 17209 1 1 0 f 17210 1 1 0 f 17211 1 1 0 f 17212 1 1 0 f 17213 1 1 0 f 17214 1 1 0 f 17215 1 1 0 f 17216 1 1 0 f 17217 1 1 0 f 17218 1 1 0 e 17219 1 1 0 f 17220 1 1 0 e 17221 1 1 0 e 17222 1 1 0 e 17223 1 1 0 f 17224 1 1 0 e 17225 1 1 0 f 17226 1 1 0 f 17227 1 1 0 f 17228 1 1 0 f 17229 1 1 0 f 17230 1 1 0 f 17231 1 1 0 f 17232 1 1 0 e 17233 1 1 0 e 17234 1 1 0 e 17235 1 1 0 f 17236 1 1 0 e 17237 1 1 0 e 17238 1 1 0 e 17239 1 1 0 e 17240 1 1 0 e 17241 1 1 0 f 17242 1 1 0 e 17243 1 1 0 e 17244 1 1 0 f 17245 1 1 0 f 17246 1 1 0 f 17247 1 1 0 f 17248 1 1 0 f 17249 1 1 0 f 17250 1 1 0 e 17251 1 1 0 e 17252 1 1 0 e 17253 1 1 0 f 17254 1 1 0 f 17255 1 1 0 f 17256 1 1 1 e 17257 1 1 1 e 17258 1 1 1 e 17259 1 1 1 f 17260 1 1 1 e 17261 1 1 1 f 17262 1 1 1 f 17263 1 1 1 f 17264 1 1 1 f 17265 1 1 1 f 17266 1 1 1 f 17267 1 1 1 f 17268 1 1 1 f 17269 1 1 1 f 17270 1 1 1 f 17271 1 1 1 f 17272 1 1 1 f 17273 1 1 1 f 17274 1 1 1 e 17275 1 1 1 e 17276 1 1 1 e 17277 1 1 1 f 17278 1 1 1 e 17279 1 1 1 e 17280 1 1 1 f 17281 1 1 1 f 17282 1 1 1 f 17283 1 1 1 f 17284 1 1 1 f 17285 1 1 1 f 17286 1 1 1 f 17287 1 1 1 f 17288 1 1 1 f 17289 1 1 1 f 17290 1 1 1 e 17291 1 1 1 f 17292 1 1 1 e 17293 1 1 1 e 17294 1 1 1 e 17295 1 1 1 f 17296 1 1 1 e 17297 1 1 1 e 17298 1 1 1 f 17299 1 1 1 f 17300 1 1 1 f 17301 1 1 1 f 17302 1 1 1 f 17303 1 1 1 f 17304 1 1 1 f 17305 1 1 1 f 17306 1 1 1 e 17307 1 1 1 f 17308 1 1 1 e 17309 1 1 1 e 17310 1 1 1 e 17311 1 1 1 e 17312 1 1 1 e 17313 1 1 1 f 17314 1 1 1 e 17315 1 1 1 f 17316 1 1 1 f 17317 1 1 1 f 17318 1 1 1 f 17319 1 1 1 f 17320 1 1 1 f 17321 1 1 1 f 17322 1 1 1 f 17323 1 1 1 f 17324 1 1 1 e 17325 1 1 1 f 17326 1 1 1 f 17327 1 1 1 f 17328 31 0 0 e 17329 31 0 0 e 17330 31 0 0 e 17331 31 0 0 f 17332 31 0 0 e 17333 31 0 0 0 1 6 7 9 10 11 14 16 20 21 22 25 26 27 30 17334 31 0 0 f 17335 31 0 0 f 17336 31 0 0 f 17337 31 0 0 f 17338 31 0 0 f 17339 31 0 0 f 17340 31 0 0 1 3 4 6 8 10 11 12 13 17 18 19 20 21 22 23 24 26 27 30 17341 31 0 0 1 3 4 6 8 10 11 12 13 17 18 19 20 21 22 23 24 26 27 30 17342 31 0 0 0 3 5 7 9 10 12 14 15 16 17 18 19 21 25 29 30 17343 31 0 0 f 17344 31 0 0 3 4 5 11 13 14 16 20 21 22 25 26 27 29 30 17345 31 0 0 0 2 3 4 5 7 9 10 11 12 13 14 16 17 19 20 21 22 24 25 26 27 29 30 17346 31 0 0 e 17347 31 0 0 e 17348 31 0 0 e 17349 31 0 0 f 17350 31 0 0 e 17351 31 0 0 1 3 4 7 8 9 10 12 14 16 18 19 22 25 26 27 29 17352 31 0 0 f 17353 31 0 0 f 17354 31 0 0 f 17355 31 0 0 f 17356 31 0 0 f 17357 31 0 0 f 17358 31 0 0 0 2 3 6 7 8 9 10 11 12 13 14 15 17 18 22 24 25 28 29 17359 31 0 0 0 2 3 6 7 8 9 10 11 12 13 14 15 17 18 22 24 25 28 29 17360 31 0 0 0 3 4 5 8 11 12 15 16 18 19 20 22 24 25 26 28 29 17361 31 0 0 f 17362 31 0 0 0 2 4 6 10 11 16 17 19 20 22 25 27 29 17363 31 0 0 0 2 3 4 6 7 8 9 10 11 13 16 17 18 19 20 22 23 24 25 26 27 29 30 17364 31 0 0 e 17365 31 0 0 e 17366 31 0 0 e 17367 31 0 0 f 17368 31 0 0 e 17369 31 0 0 2 6 8 9 10 11 13 14 15 16 19 21 22 25 27 28 30 17370 31 0 0 f 17371 31 0 0 f 17372 31 0 0 f 17373 31 0 0 f 17374 31 0 0 f 17375 31 0 0 f 17376 31 0 0 2 6 7 9 10 11 12 17 18 19 21 22 23 25 27 28 30 17377 31 0 0 2 6 7 9 10 11 12 17 18 19 21 22 23 25 27 28 30 17378 31 0 0 1 2 3 6 15 16 19 20 22 25 26 28 17379 31 0 0 f 17380 31 0 0 2 3 4 6 8 11 13 16 17 18 19 20 21 27 28 29 30 17381 31 0 0 2 3 4 6 8 10 11 12 13 15 16 17 18 19 20 21 26 27 28 29 30 17382 31 0 0 e 17383 31 0 0 e 17384 31 0 0 e 17385 31 0 0 f 17386 31 0 0 e 17387 31 0 0 0 1 2 3 4 6 12 14 15 18 23 24 25 26 27 30 17388 31 0 0 f 17389 31 0 0 f 17390 31 0 0 f 17391 31 0 0 f 17392 31 0 0 f 17393 31 0 0 f 17394 31 0 0 1 2 3 4 5 6 8 12 13 14 16 18 22 24 25 26 28 29 17395 31 0 0 1 2 3 4 5 6 8 12 13 14 16 18 22 24 25 26 28 29 17396 31 0 0 1 2 4 5 8 9 10 12 13 14 16 18 23 25 26 27 28 29 30 17397 31 0 0 f 17398 31 0 0 1 2 3 4 5 6 9 11 14 15 17 18 22 24 25 26 28 29 17399 31 0 0 1 2 3 4 5 6 8 9 10 11 13 14 15 17 18 19 20 21 22 23 24 25 26 28 29 30 17400 31 0 1 e 17401 31 0 1 e 17402 31 0 1 e 17403 31 0 1 f 17404 31 0 1 e 17405 31 0 1 7 9 10 11 13 14 16 18 19 20 21 23 24 26 27 29 30 17406 31 0 1 f 17407 31 0 1 f 17408 31 0 1 f 17409 31 0 1 f 17410 31 0 1 f 17411 31 0 1 f 17412 31 0 1 0 3 4 5 6 10 11 12 13 16 20 21 23 25 27 28 29 17413 31 0 1 0 3 4 5 6 10 11 12 13 16 20 21 23 25 27 28 29 17414 31 0 1 0 7 8 9 10 11 15 19 24 26 27 29 30 17415 31 0 1 f 17416 31 0 1 0 4 5 6 7 9 13 17 19 21 23 28 17417 31 0 1 0 2 4 5 6 7 8 9 13 14 16 17 18 19 21 22 23 28 29 30 17418 31 0 1 e 17419 31 0 1 e 17420 31 0 1 e 17421 31 0 1 f 17422 31 0 1 e 17423 31 0 1 0 5 8 10 12 14 17 19 20 21 22 23 27 28 17424 31 0 1 f 17425 31 0 1 f 17426 31 0 1 f 17427 31 0 1 f 17428 31 0 1 f 17429 31 0 1 f 17430 31 0 1 2 5 6 7 8 9 11 18 19 21 22 25 26 27 17431 31 0 1 2 5 6 7 8 9 11 18 19 21 22 25 26 27 17432 31 0 1 1 3 4 5 7 8 10 11 12 14 16 18 21 23 29 30 17433 31 0 1 f 17434 31 0 1 0 1 2 3 4 5 8 13 17 19 23 24 25 30 17435 31 0 1 0 1 2 3 4 5 8 9 10 12 13 14 17 18 19 20 22 23 24 25 27 28 29 30 17436 31 0 1 e 17437 31 0 1 e 17438 31 0 1 e 17439 31 0 1 f 17440 31 0 1 e 17441 31 0 1 0 1 2 3 4 5 9 11 12 17 19 20 21 25 26 28 30 17442 31 0 1 f 17443 31 0 1 f 17444 31 0 1 f 17445 31 0 1 f 17446 31 0 1 f 17447 31 0 1 f 17448 31 0 1 0 3 4 5 6 7 8 9 11 12 13 14 22 23 24 26 29 17449 31 0 1 0 3 4 5 6 7 8 9 11 12 13 14 22 23 24 26 29 17450 31 0 1 1 2 4 5 6 8 9 10 13 15 16 17 18 20 22 23 24 26 28 30 17451 31 0 1 f 17452 31 0 1 7 8 12 14 17 20 21 24 25 29 30 17453 31 0 1 0 5 6 7 8 9 10 12 13 14 17 18 19 20 21 24 25 29 30 17454 31 0 1 e 17455 31 0 1 e 17456 31 0 1 e 17457 31 0 1 f 17458 31 0 1 e 17459 31 0 1 2 4 5 10 11 12 13 14 17 18 19 20 23 24 28 29 30 17460 31 0 1 f 17461 31 0 1 f 17462 31 0 1 f 17463 31 0 1 f 17464 31 0 1 f 17465 31 0 1 f 17466 31 0 1 0 1 5 7 8 13 17 18 23 24 26 27 29 17467 31 0 1 0 1 5 7 8 13 17 18 23 24 26 27 29 17468 31 0 1 1 3 4 7 8 10 12 13 14 17 18 22 28 29 17469 31 0 1 f 17470 31 0 1 1 2 4 9 11 12 15 18 19 22 23 24 25 26 28 29 30 17471 31 0 1 0 1 2 4 5 6 7 9 11 12 13 15 17 18 19 21 22 23 24 25 26 28 29 30 17472 31 1 0 e 17473 31 1 0 e 17474 31 1 0 e 17475 31 1 0 f 17476 31 1 0 e 17477 31 1 0 0 1 2 3 5 6 8 10 11 12 16 18 19 21 22 24 25 28 17478 31 1 0 f 17479 31 1 0 f 17480 31 1 0 f 17481 31 1 0 f 17482 31 1 0 f 17483 31 1 0 f 17484 31 1 0 0 1 2 6 7 11 17 18 19 20 21 22 27 28 29 17485 31 1 0 0 1 2 6 7 11 17 18 19 20 21 22 27 28 29 17486 31 1 0 0 4 5 7 8 9 11 12 13 16 17 19 20 22 23 29 30 17487 31 1 0 f 17488 31 1 0 2 3 5 6 7 8 9 11 12 13 14 16 17 19 20 21 22 23 25 26 29 17489 31 1 0 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 19 20 21 22 23 25 26 27 28 29 17490 31 1 0 e 17491 31 1 0 e 17492 31 1 0 e 17493 31 1 0 f 17494 31 1 0 e 17495 31 1 0 3 6 7 9 10 11 12 13 15 16 17 19 20 22 23 24 26 27 29 17496 31 1 0 f 17497 31 1 0 f 17498 31 1 0 f 17499 31 1 0 f 17500 31 1 0 f 17501 31 1 0 f 17502 31 1 0 1 2 6 8 9 10 11 13 17 18 20 21 22 24 25 27 29 17503 31 1 0 1 2 6 8 9 10 11 13 17 18 20 21 22 24 25 27 29 17504 31 1 0 0 3 4 6 9 12 13 14 19 23 29 30 17505 31 1 0 f 17506 31 1 0 2 7 8 9 10 11 12 13 14 18 20 22 24 25 26 29 17507 31 1 0 0 2 3 4 5 7 8 9 10 11 12 13 14 15 16 18 20 22 23 24 25 26 27 29 30 17508 31 1 0 e 17509 31 1 0 e 17510 31 1 0 e 17511 31 1 0 f 17512 31 1 0 e 17513 31 1 0 5 7 9 11 12 13 15 16 17 19 20 21 22 23 24 25 27 30 17514 31 1 0 f 17515 31 1 0 f 17516 31 1 0 f 17517 31 1 0 f 17518 31 1 0 f 17519 31 1 0 f 17520 31 1 0 0 1 2 3 5 9 11 12 15 17 19 21 22 23 24 27 28 30 17521 31 1 0 0 1 2 3 5 9 11 12 15 17 19 21 22 23 24 27 28 30 17522 31 1 0 0 3 7 9 12 13 14 15 16 17 19 22 23 28 30 17523 31 1 0 f 17524 31 1 0 0 1 5 6 7 9 12 13 15 16 17 19 22 24 25 27 28 29 30 17525 31 1 0 0 1 4 5 6 7 9 11 12 13 15 16 17 19 21 22 23 24 25 27 28 29 30 17526 31 1 0 e 17527 31 1 0 e 17528 31 1 0 e 17529 31 1 0 f 17530 31 1 0 e 17531 31 1 0 0 1 3 4 6 7 8 9 11 16 18 19 20 21 22 23 24 25 26 28 17532 31 1 0 f 17533 31 1 0 f 17534 31 1 0 f 17535 31 1 0 f 17536 31 1 0 f 17537 31 1 0 f 17538 31 1 0 1 6 10 13 16 18 20 21 24 25 26 28 29 17539 31 1 0 1 6 10 13 16 18 20 21 24 25 26 28 29 17540 31 1 0 1 4 5 8 9 14 15 17 19 20 22 25 27 28 17541 31 1 0 f 17542 31 1 0 0 1 2 4 6 9 10 11 15 16 21 23 29 30 17543 31 1 0 0 1 2 3 4 5 6 9 10 11 12 13 14 15 16 19 20 21 23 24 25 29 30 17544 31 1 1 e 17545 31 1 1 e 17546 31 1 1 e 17547 31 1 1 f 17548 31 1 1 e 17549 31 1 1 1 2 5 6 7 9 10 12 13 15 21 22 23 24 25 28 17550 31 1 1 f 17551 31 1 1 f 17552 31 1 1 f 17553 31 1 1 f 17554 31 1 1 f 17555 31 1 1 f 17556 31 1 1 2 4 5 6 7 8 11 12 14 15 18 19 20 21 23 24 26 27 29 17557 31 1 1 2 4 5 6 7 8 11 12 14 15 18 19 20 21 23 24 26 27 29 17558 31 1 1 0 2 3 4 5 6 7 8 15 16 18 19 21 24 26 28 29 30 17559 31 1 1 f 17560 31 1 1 2 9 11 13 14 16 19 20 24 25 17561 31 1 1 0 2 4 6 7 8 9 11 13 14 16 17 18 19 20 21 22 24 25 28 29 30 17562 31 1 1 e 17563 31 1 1 e 17564 31 1 1 e 17565 31 1 1 f 17566 31 1 1 e 17567 31 1 1 0 2 4 7 8 12 13 14 17 18 19 20 21 22 24 26 17568 31 1 1 f 17569 31 1 1 f 17570 31 1 1 f 17571 31 1 1 f 17572 31 1 1 f 17573 31 1 1 f 17574 31 1 1 1 3 4 5 8 9 10 11 13 16 18 20 21 22 23 25 26 27 28 29 17575 31 1 1 1 3 4 5 8 9 10 11 13 16 18 20 21 22 23 25 26 27 28 29 17576 31 1 1 0 1 2 3 4 10 12 13 14 15 16 17 18 20 21 23 25 26 27 28 29 17577 31 1 1 f 17578 31 1 1 0 1 2 3 6 7 8 10 12 13 14 15 17 18 19 20 21 22 23 24 25 26 27 28 17579 31 1 1 0 1 2 3 4 5 6 7 8 10 11 12 13 14 15 17 18 19 20 21 22 23 24 25 26 27 28 17580 31 1 1 e 17581 31 1 1 e 17582 31 1 1 e 17583 31 1 1 f 17584 31 1 1 e 17585 31 1 1 2 3 6 7 10 12 13 18 19 22 26 27 17586 31 1 1 f 17587 31 1 1 f 17588 31 1 1 f 17589 31 1 1 f 17590 31 1 1 f 17591 31 1 1 f 17592 31 1 1 1 3 4 5 7 14 15 20 21 23 25 26 17593 31 1 1 1 3 4 5 7 14 15 20 21 23 25 26 17594 31 1 1 2 7 8 9 12 13 15 18 19 21 25 29 30 17595 31 1 1 f 17596 31 1 1 0 1 2 3 10 11 14 15 16 18 20 21 22 25 26 27 28 29 30 17597 31 1 1 0 1 2 3 4 5 8 10 11 12 14 15 16 18 19 20 21 22 23 24 25 26 27 28 29 30 17598 31 1 1 e 17599 31 1 1 e 17600 31 1 1 e 17601 31 1 1 f 17602 31 1 1 e 17603 31 1 1 0 2 3 5 6 8 13 15 18 19 20 25 28 29 30 17604 31 1 1 f 17605 31 1 1 f 17606 31 1 1 f 17607 31 1 1 f 17608 31 1 1 f 17609 31 1 1 f 17610 31 1 1 0 1 2 4 7 8 10 12 16 17 18 23 24 25 26 28 29 17611 31 1 1 0 1 2 4 7 8 10 12 16 17 18 23 24 25 26 28 29 17612 31 1 1 3 5 8 9 12 14 17 18 20 22 23 25 26 29 30 17613 31 1 1 f 17614 31 1 1 0 3 4 7 9 12 13 15 16 17 18 20 23 24 25 26 29 17615 31 1 1 0 1 2 3 4 6 7 9 10 11 12 13 15 16 17 18 20 21 23 24 25 26 27 28 29 17616 32 0 0 e 17617 32 0 0 e 17618 32 0 0 e 17619 32 0 0 f 17620 32 0 0 e 17621 32 0 0 1 2 3 4 6 8 11 12 14 16 18 21 22 23 24 26 27 29 30 31 17622 32 0 0 f 17623 32 0 0 f 17624 32 0 0 f 17625 32 0 0 f 17626 32 0 0 f 17627 32 0 0 f 17628 32 0 0 0 1 2 8 9 11 12 13 14 15 19 24 26 27 17629 32 0 0 0 1 2 8 9 11 12 13 14 15 19 24 26 27 17630 32 0 0 3 5 8 9 12 16 19 20 23 24 26 27 28 29 31 17631 32 0 0 f 17632 32 0 0 1 2 3 5 8 9 10 13 14 15 17 18 24 25 27 28 30 17633 32 0 0 1 2 3 5 6 8 9 10 12 13 14 15 17 18 19 20 21 23 24 25 27 28 30 17634 32 0 0 e 17635 32 0 0 e 17636 32 0 0 e 17637 32 0 0 f 17638 32 0 0 e 17639 32 0 0 0 2 5 8 10 12 13 14 19 22 24 27 29 17640 32 0 0 f 17641 32 0 0 f 17642 32 0 0 f 17643 32 0 0 f 17644 32 0 0 f 17645 32 0 0 f 17646 32 0 0 3 6 11 13 14 17 20 23 29 31 17647 32 0 0 3 6 11 13 14 17 20 23 29 31 17648 32 0 0 1 2 6 7 8 10 13 16 17 18 21 23 27 29 30 31 17649 32 0 0 f 17650 32 0 0 0 4 6 7 8 9 10 11 18 19 21 25 27 29 30 17651 32 0 0 0 1 4 6 7 8 9 10 11 12 14 16 17 18 19 20 21 25 27 28 29 30 17652 32 0 0 e 17653 32 0 0 e 17654 32 0 0 e 17655 32 0 0 f 17656 32 0 0 e 17657 32 0 0 0 2 4 5 10 11 12 13 16 20 21 22 23 24 25 26 28 29 30 31 17658 32 0 0 f 17659 32 0 0 f 17660 32 0 0 f 17661 32 0 0 f 17662 32 0 0 f 17663 32 0 0 f 17664 32 0 0 0 1 2 7 8 9 12 14 16 20 22 24 26 28 31 17665 32 0 0 0 1 2 7 8 9 12 14 16 20 22 24 26 28 31 17666 32 0 0 4 5 7 8 9 11 13 14 18 21 22 25 26 31 17667 32 0 0 f 17668 32 0 0 1 5 6 8 10 13 14 15 17 19 23 26 27 31 17669 32 0 0 0 1 5 6 8 9 10 11 12 13 14 15 16 17 18 19 20 21 23 26 27 30 31 17670 32 0 0 e 17671 32 0 0 e 17672 32 0 0 e 17673 32 0 0 f 17674 32 0 0 e 17675 32 0 0 1 2 3 5 6 7 12 13 15 16 17 19 20 22 24 25 26 29 30 31 17676 32 0 0 f 17677 32 0 0 f 17678 32 0 0 f 17679 32 0 0 f 17680 32 0 0 f 17681 32 0 0 f 17682 32 0 0 0 4 5 7 10 12 16 18 20 21 23 26 27 29 17683 32 0 0 0 4 5 7 10 12 16 18 20 21 23 26 27 29 17684 32 0 0 5 7 13 14 16 17 18 19 21 22 23 25 26 27 28 17685 32 0 0 f 17686 32 0 0 0 1 2 6 7 10 11 12 13 15 18 19 21 22 23 25 26 29 31 17687 32 0 0 0 1 2 6 7 9 10 11 12 13 15 16 18 19 21 22 23 25 26 29 31 17688 32 0 1 e 17689 32 0 1 e 17690 32 0 1 e 17691 32 0 1 f 17692 32 0 1 e 17693 32 0 1 0 1 4 10 12 16 17 20 22 24 25 26 17694 32 0 1 f 17695 32 0 1 f 17696 32 0 1 f 17697 32 0 1 f 17698 32 0 1 f 17699 32 0 1 f 17700 32 0 1 2 3 6 8 10 11 12 14 16 17 18 19 21 22 25 27 30 31 17701 32 0 1 2 3 6 8 10 11 12 14 16 17 18 19 21 22 25 27 30 31 17702 32 0 1 0 2 3 4 5 8 11 13 16 22 24 25 30 31 17703 32 0 1 f 17704 32 0 1 0 1 2 6 11 13 17 19 25 28 31 17705 32 0 1 0 1 2 3 4 6 9 11 12 13 14 16 17 18 19 20 23 24 25 27 28 29 30 31 17706 32 0 1 e 17707 32 0 1 e 17708 32 0 1 e 17709 32 0 1 f 17710 32 0 1 e 17711 32 0 1 1 7 9 11 16 19 22 30 31 17712 32 0 1 f 17713 32 0 1 f 17714 32 0 1 f 17715 32 0 1 f 17716 32 0 1 f 17717 32 0 1 f 17718 32 0 1 0 1 2 7 8 12 16 21 24 25 27 17719 32 0 1 0 1 2 7 8 12 16 21 24 25 27 17720 32 0 1 2 3 4 6 7 8 10 12 14 16 17 18 20 25 27 29 31 17721 32 0 1 f 17722 32 0 1 1 2 5 6 7 8 9 11 18 19 20 25 27 28 30 17723 32 0 1 1 2 3 5 6 7 8 9 11 14 15 16 18 19 20 22 23 25 26 27 28 30 31 17724 32 0 1 e 17725 32 0 1 e 17726 32 0 1 e 17727 32 0 1 f 17728 32 0 1 e 17729 32 0 1 2 3 7 8 12 13 14 15 17 20 21 24 25 31 17730 32 0 1 f 17731 32 0 1 f 17732 32 0 1 f 17733 32 0 1 f 17734 32 0 1 f 17735 32 0 1 f 17736 32 0 1 1 4 6 7 11 15 19 20 21 22 23 25 26 27 28 30 17737 32 0 1 1 4 6 7 11 15 19 20 21 22 23 25 26 27 28 30 17738 32 0 1 2 3 6 7 8 10 14 15 16 18 21 30 31 17739 32 0 1 f 17740 32 0 1 1 2 3 5 6 8 9 12 15 16 19 20 21 24 25 26 28 29 17741 32 0 1 0 1 2 3 4 5 6 7 8 9 12 13 14 15 16 18 19 20 21 23 24 25 26 28 29 30 17742 32 0 1 e 17743 32 0 1 e 17744 32 0 1 e 17745 32 0 1 f 17746 32 0 1 e 17747 32 0 1 0 4 7 20 21 25 27 28 30 17748 32 0 1 f 17749 32 0 1 f 17750 32 0 1 f 17751 32 0 1 f 17752 32 0 1 f 17753 32 0 1 f 17754 32 0 1 4 8 9 11 12 13 14 17 18 20 22 24 29 31 17755 32 0 1 4 8 9 11 12 13 14 17 18 20 22 24 29 31 17756 32 0 1 3 4 7 9 10 11 12 13 15 17 22 24 25 28 29 31 17757 32 0 1 f 17758 32 0 1 2 4 9 12 17 18 19 23 25 31 17759 32 0 1 0 2 3 4 9 11 12 13 17 18 19 21 22 23 25 27 30 31 17760 32 1 0 e 17761 32 1 0 e 17762 32 1 0 e 17763 32 1 0 f 17764 32 1 0 e 17765 32 1 0 0 1 4 5 6 12 14 19 20 21 22 24 28 30 17766 32 1 0 f 17767 32 1 0 f 17768 32 1 0 f 17769 32 1 0 f 17770 32 1 0 f 17771 32 1 0 f 17772 32 1 0 0 1 2 3 4 7 8 10 11 12 16 17 19 23 25 28 31 17773 32 1 0 0 1 2 3 4 7 8 10 11 12 16 17 19 23 25 28 31 17774 32 1 0 2 6 9 10 12 14 15 16 17 18 23 24 25 26 27 30 31 17775 32 1 0 f 17776 32 1 0 2 3 4 5 8 11 14 18 19 20 21 23 24 26 27 28 30 17777 32 1 0 0 1 2 3 4 5 6 8 11 12 13 14 15 18 19 20 21 22 23 24 25 26 27 28 29 30 17778 32 1 0 e 17779 32 1 0 e 17780 32 1 0 e 17781 32 1 0 f 17782 32 1 0 e 17783 32 1 0 0 1 2 5 6 15 16 17 18 21 23 24 25 27 28 17784 32 1 0 f 17785 32 1 0 f 17786 32 1 0 f 17787 32 1 0 f 17788 32 1 0 f 17789 32 1 0 f 17790 32 1 0 3 8 10 12 14 15 17 19 20 21 22 23 24 25 26 28 29 30 17791 32 1 0 3 8 10 12 14 15 17 19 20 21 22 23 24 25 26 28 29 30 17792 32 1 0 1 5 6 7 9 11 14 15 24 25 26 27 28 17793 32 1 0 f 17794 32 1 0 1 2 3 5 6 7 8 10 11 12 13 14 15 19 25 29 30 31 17795 32 1 0 0 1 2 3 5 6 7 8 9 10 11 12 13 14 15 16 17 19 21 22 23 24 25 29 30 31 17796 32 1 0 e 17797 32 1 0 e 17798 32 1 0 e 17799 32 1 0 f 17800 32 1 0 e 17801 32 1 0 1 3 6 9 10 11 16 17 18 20 21 22 26 27 29 31 17802 32 1 0 f 17803 32 1 0 f 17804 32 1 0 f 17805 32 1 0 f 17806 32 1 0 f 17807 32 1 0 f 17808 32 1 0 1 3 4 5 7 14 15 17 20 22 26 27 29 30 31 17809 32 1 0 1 3 4 5 7 14 15 17 20 22 26 27 29 30 31 17810 32 1 0 0 1 3 4 5 6 10 12 13 16 17 18 19 21 22 23 25 26 28 17811 32 1 0 f 17812 32 1 0 1 5 6 7 9 11 13 16 17 18 20 21 22 23 24 25 29 30 31 17813 32 1 0 1 3 5 6 7 8 9 11 12 13 14 16 17 18 20 21 22 23 24 25 26 27 28 29 30 31 17814 32 1 0 e 17815 32 1 0 e 17816 32 1 0 e 17817 32 1 0 f 17818 32 1 0 e 17819 32 1 0 1 4 5 6 7 8 11 15 16 17 19 20 21 24 26 27 30 17820 32 1 0 f 17821 32 1 0 f 17822 32 1 0 f 17823 32 1 0 f 17824 32 1 0 f 17825 32 1 0 f 17826 32 1 0 1 4 6 9 12 13 17 20 22 24 25 26 28 29 31 17827 32 1 0 1 4 6 9 12 13 17 20 22 24 25 26 28 29 31 17828 32 1 0 0 1 3 8 10 11 13 15 16 19 20 21 23 24 25 28 29 17829 32 1 0 f 17830 32 1 0 1 3 8 9 12 15 16 18 19 22 25 26 27 28 17831 32 1 0 1 2 3 6 8 9 10 12 13 15 16 18 19 22 23 25 26 27 28 17832 32 1 1 e 17833 32 1 1 e 17834 32 1 1 e 17835 32 1 1 f 17836 32 1 1 e 17837 32 1 1 0 2 5 7 8 10 14 15 18 19 21 22 23 24 26 28 29 30 31 17838 32 1 1 f 17839 32 1 1 f 17840 32 1 1 f 17841 32 1 1 f 17842 32 1 1 f 17843 32 1 1 f 17844 32 1 1 1 3 5 6 12 13 17 19 20 21 27 28 30 31 17845 32 1 1 1 3 5 6 12 13 17 19 20 21 27 28 30 31 17846 32 1 1 2 3 5 7 10 11 15 18 19 23 24 25 26 29 31 17847 32 1 1 f 17848 32 1 1 0 2 4 5 6 9 11 14 15 16 17 18 21 24 26 27 30 17849 32 1 1 0 2 4 5 6 7 9 10 11 13 14 15 16 17 18 21 22 24 26 27 28 29 30 17850 32 1 1 e 17851 32 1 1 e 17852 32 1 1 e 17853 32 1 1 f 17854 32 1 1 e 17855 32 1 1 1 2 3 6 7 9 10 11 12 13 15 19 20 22 23 24 29 30 31 17856 32 1 1 f 17857 32 1 1 f 17858 32 1 1 f 17859 32 1 1 f 17860 32 1 1 f 17861 32 1 1 f 17862 32 1 1 0 1 3 4 5 8 9 11 12 13 18 19 22 25 26 27 30 17863 32 1 1 0 1 3 4 5 8 9 11 12 13 18 19 22 25 26 27 30 17864 32 1 1 3 5 8 9 11 12 15 16 18 19 20 21 23 26 27 28 29 30 31 17865 32 1 1 f 17866 32 1 1 2 4 6 7 9 11 13 14 16 17 19 21 22 23 26 27 29 30 17867 32 1 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 21 22 23 24 25 26 27 29 30 17868 32 1 1 e 17869 32 1 1 e 17870 32 1 1 e 17871 32 1 1 f 17872 32 1 1 e 17873 32 1 1 0 1 6 9 13 15 16 18 20 21 22 23 24 25 26 29 30 17874 32 1 1 f 17875 32 1 1 f 17876 32 1 1 f 17877 32 1 1 f 17878 32 1 1 f 17879 32 1 1 f 17880 32 1 1 0 1 2 8 9 11 12 13 15 16 17 18 20 21 22 25 27 30 31 17881 32 1 1 0 1 2 8 9 11 12 13 15 16 17 18 20 21 22 25 27 30 31 17882 32 1 1 1 6 10 11 14 15 17 19 20 28 17883 32 1 1 f 17884 32 1 1 1 2 5 6 8 9 12 17 24 25 26 27 28 17885 32 1 1 1 2 4 5 6 7 8 9 10 12 16 17 18 22 24 25 26 27 28 17886 32 1 1 e 17887 32 1 1 e 17888 32 1 1 e 17889 32 1 1 f 17890 32 1 1 e 17891 32 1 1 1 2 5 6 7 9 10 14 17 20 22 23 24 25 26 30 31 17892 32 1 1 f 17893 32 1 1 f 17894 32 1 1 f 17895 32 1 1 f 17896 32 1 1 f 17897 32 1 1 f 17898 32 1 1 2 3 7 8 9 11 12 13 14 17 18 19 23 24 25 26 29 31 17899 32 1 1 2 3 7 8 9 11 12 13 14 17 18 19 23 24 25 26 29 31 17900 32 1 1 0 2 5 8 10 11 13 14 15 16 17 19 20 21 22 23 24 29 30 17901 32 1 1 f 17902 32 1 1 0 1 2 4 5 6 7 9 11 12 14 20 22 23 24 26 27 28 29 31 17903 32 1 1 0 1 2 4 5 6 7 8 9 11 12 14 17 18 20 21 22 23 24 26 27 28 29 30 31 17904 33 0 0 e 17905 33 0 0 e 17906 33 0 0 e 17907 33 0 0 f 17908 33 0 0 e 17909 33 0 0 0 3 4 5 7 9 11 13 15 17 20 23 24 25 26 27 28 29 30 31 17910 33 0 0 f 17911 33 0 0 f 17912 33 0 0 f 17913 33 0 0 f 17914 33 0 0 f 17915 33 0 0 f 17916 33 0 0 0 1 2 3 6 7 8 9 10 16 18 21 25 28 29 30 31 32 17917 33 0 0 0 1 2 3 6 7 8 9 10 16 18 21 25 28 29 30 31 32 17918 33 0 0 1 3 4 6 7 8 13 15 17 20 21 22 23 26 28 29 32 17919 33 0 0 f 17920 33 0 0 3 4 6 10 12 13 14 20 22 29 31 32 17921 33 0 0 0 1 2 3 4 6 7 8 9 10 11 12 13 14 15 18 19 20 21 22 25 26 27 29 30 31 32 17922 33 0 0 e 17923 33 0 0 e 17924 33 0 0 e 17925 33 0 0 f 17926 33 0 0 e 17927 33 0 0 0 1 2 5 9 10 12 14 17 27 17928 33 0 0 f 17929 33 0 0 f 17930 33 0 0 f 17931 33 0 0 f 17932 33 0 0 f 17933 33 0 0 f 17934 33 0 0 2 4 5 7 8 9 11 12 15 16 19 20 22 23 24 25 26 27 28 29 17935 33 0 0 2 4 5 7 8 9 11 12 15 16 19 20 22 23 24 25 26 27 28 29 17936 33 0 0 1 3 6 9 10 11 13 14 15 16 17 20 22 25 29 30 17937 33 0 0 f 17938 33 0 0 2 5 6 7 8 9 11 12 13 14 15 17 19 20 21 23 26 30 32 17939 33 0 0 1 2 4 5 6 7 8 9 10 11 12 13 14 15 17 18 19 20 21 22 23 24 25 26 28 30 32 17940 33 0 0 e 17941 33 0 0 e 17942 33 0 0 e 17943 33 0 0 f 17944 33 0 0 e 17945 33 0 0 1 3 9 12 15 17 18 21 22 24 30 31 17946 33 0 0 f 17947 33 0 0 f 17948 33 0 0 f 17949 33 0 0 f 17950 33 0 0 f 17951 33 0 0 f 17952 33 0 0 1 4 5 6 9 11 14 15 17 18 20 21 23 25 27 30 31 17953 33 0 0 1 4 5 6 9 11 14 15 17 18 20 21 23 25 27 30 31 17954 33 0 0 1 4 5 6 10 13 14 21 26 27 17955 33 0 0 f 17956 33 0 0 1 5 7 9 12 13 14 17 18 21 22 23 24 25 26 28 30 17957 33 0 0 0 1 2 3 5 7 9 12 13 14 17 18 21 22 23 24 25 26 27 28 29 30 31 17958 33 0 0 e 17959 33 0 0 e 17960 33 0 0 e 17961 33 0 0 f 17962 33 0 0 e 17963 33 0 0 0 1 2 3 4 5 6 10 11 12 13 14 16 18 22 25 28 30 31 17964 33 0 0 f 17965 33 0 0 f 17966 33 0 0 f 17967 33 0 0 f 17968 33 0 0 f 17969 33 0 0 f 17970 33 0 0 0 1 3 4 9 10 12 14 18 19 21 22 24 27 29 32 17971 33 0 0 0 1 3 4 9 10 12 14 18 19 21 22 24 27 29 32 17972 33 0 0 0 1 2 5 6 7 8 10 12 14 17 19 20 21 22 28 29 31 32 17973 33 0 0 f 17974 33 0 0 2 5 6 8 12 13 14 15 17 21 22 23 26 27 28 29 30 31 17975 33 0 0 0 2 3 5 6 8 12 13 14 15 16 17 20 21 22 23 25 26 27 28 29 30 31 32 17976 33 0 1 e 17977 33 0 1 e 17978 33 0 1 e 17979 33 0 1 f 17980 33 0 1 e 17981 33 0 1 1 3 4 5 7 9 10 12 13 15 16 17 25 26 27 29 30 31 32 17982 33 0 1 f 17983 33 0 1 f 17984 33 0 1 f 17985 33 0 1 f 17986 33 0 1 f 17987 33 0 1 f 17988 33 0 1 0 3 5 8 9 13 14 19 22 24 29 30 32 17989 33 0 1 0 3 5 8 9 13 14 19 22 24 29 30 32 17990 33 0 1 3 4 5 6 7 8 11 12 16 17 18 20 24 25 26 27 28 30 31 17991 33 0 1 f 17992 33 0 1 1 3 4 5 6 7 9 10 11 14 19 20 22 23 25 30 31 17993 33 0 1 1 3 4 5 6 7 9 10 11 12 14 18 19 20 21 22 23 25 27 28 30 31 32 17994 33 0 1 e 17995 33 0 1 e 17996 33 0 1 e 17997 33 0 1 f 17998 33 0 1 e 17999 33 0 1 2 3 4 6 7 9 10 11 12 19 24 25 26 29 31 18000 33 0 1 f 18001 33 0 1 f 18002 33 0 1 f 18003 33 0 1 f 18004 33 0 1 f 18005 33 0 1 f 18006 33 0 1 2 5 11 12 14 20 21 24 27 30 31 32 18007 33 0 1 2 5 11 12 14 20 21 24 27 30 31 32 18008 33 0 1 0 1 3 5 6 7 8 9 10 14 15 17 21 26 27 29 30 31 32 18009 33 0 1 f 18010 33 0 1 1 2 4 5 9 10 11 13 17 18 22 25 26 27 28 29 30 18011 33 0 1 0 1 2 4 5 6 8 9 10 11 12 13 14 15 17 18 20 22 25 26 27 28 29 30 32 18012 33 0 1 e 18013 33 0 1 e 18014 33 0 1 e 18015 33 0 1 f 18016 33 0 1 e 18017 33 0 1 0 1 2 4 9 11 14 19 21 22 23 24 25 29 18018 33 0 1 f 18019 33 0 1 f 18020 33 0 1 f 18021 33 0 1 f 18022 33 0 1 f 18023 33 0 1 f 18024 33 0 1 2 3 5 7 8 9 11 14 15 19 21 24 25 28 32 18025 33 0 1 2 3 5 7 8 9 11 14 15 19 21 24 25 28 32 18026 33 0 1 2 3 5 6 8 9 10 13 14 15 20 21 23 24 26 28 30 31 18027 33 0 1 f 18028 33 0 1 0 1 2 3 4 6 7 8 9 11 12 14 23 26 29 30 32 18029 33 0 1 0 1 2 3 4 6 7 8 9 10 11 12 13 14 17 18 20 21 22 23 26 29 30 32 18030 33 0 1 e 18031 33 0 1 e 18032 33 0 1 e 18033 33 0 1 f 18034 33 0 1 e 18035 33 0 1 0 2 4 5 6 7 9 10 13 14 16 20 21 22 24 29 30 31 18036 33 0 1 f 18037 33 0 1 f 18038 33 0 1 f 18039 33 0 1 f 18040 33 0 1 f 18041 33 0 1 f 18042 33 0 1 2 3 5 7 8 9 10 11 14 15 16 17 18 19 20 21 22 23 24 25 26 30 32 18043 33 0 1 2 3 5 7 8 9 10 11 14 15 16 17 18 19 20 21 22 23 24 25 26 30 32 18044 33 0 1 2 4 5 7 8 9 12 15 16 17 18 19 20 22 23 25 27 28 29 18045 33 0 1 f 18046 33 0 1 1 4 6 7 10 11 13 14 16 24 26 28 30 32 18047 33 0 1 0 1 2 4 5 6 7 8 10 11 13 14 15 16 17 18 19 23 24 25 26 28 29 30 31 32 18048 33 1 0 e 18049 33 1 0 e 18050 33 1 0 e 18051 33 1 0 f 18052 33 1 0 e 18053 33 1 0 1 2 4 8 14 18 20 22 23 24 26 27 28 30 18054 33 1 0 f 18055 33 1 0 f 18056 33 1 0 f 18057 33 1 0 f 18058 33 1 0 f 18059 33 1 0 f 18060 33 1 0 0 2 5 7 8 10 11 12 13 14 15 18 20 21 22 25 31 32 18061 33 1 0 0 2 5 7 8 10 11 12 13 14 15 18 20 21 22 25 31 32 18062 33 1 0 2 3 5 6 7 8 9 10 12 13 14 16 20 22 23 24 26 28 29 31 18063 33 1 0 f 18064 33 1 0 1 2 3 4 5 6 8 11 16 17 20 25 28 18065 33 1 0 1 2 3 4 5 6 8 11 12 13 14 15 16 17 18 19 20 22 24 25 27 28 31 32 18066 33 1 0 e 18067 33 1 0 e 18068 33 1 0 e 18069 33 1 0 f 18070 33 1 0 e 18071 33 1 0 1 2 3 4 5 9 12 14 15 17 19 20 21 23 24 26 28 29 31 32 18072 33 1 0 f 18073 33 1 0 f 18074 33 1 0 f 18075 33 1 0 f 18076 33 1 0 f 18077 33 1 0 f 18078 33 1 0 1 2 3 5 6 8 12 13 14 15 17 18 19 20 21 24 26 27 28 29 30 18079 33 1 0 1 2 3 5 6 8 12 13 14 15 17 18 19 20 21 24 26 27 28 29 30 18080 33 1 0 0 2 3 5 9 12 14 16 17 19 20 22 25 28 30 32 18081 33 1 0 f 18082 33 1 0 2 4 6 7 8 9 11 12 13 14 17 19 20 21 23 24 26 31 18083 33 1 0 2 3 4 5 6 7 8 9 10 11 12 13 14 16 17 19 20 21 23 24 25 26 30 31 18084 33 1 0 e 18085 33 1 0 e 18086 33 1 0 e 18087 33 1 0 f 18088 33 1 0 e 18089 33 1 0 4 6 10 12 16 17 24 25 28 29 30 18090 33 1 0 f 18091 33 1 0 f 18092 33 1 0 f 18093 33 1 0 f 18094 33 1 0 f 18095 33 1 0 f 18096 33 1 0 0 1 2 3 4 6 8 10 11 14 17 21 22 24 27 28 31 32 18097 33 1 0 0 1 2 3 4 6 8 10 11 14 17 21 22 24 27 28 31 32 18098 33 1 0 0 1 2 4 5 6 7 8 9 12 13 14 16 17 18 19 20 22 23 24 26 27 28 29 30 31 18099 33 1 0 f 18100 33 1 0 0 1 3 4 6 7 12 13 15 16 18 20 21 24 29 30 31 32 18101 33 1 0 0 1 2 3 4 5 6 7 10 12 13 15 16 17 18 20 21 22 24 29 30 31 32 18102 33 1 0 e 18103 33 1 0 e 18104 33 1 0 e 18105 33 1 0 f 18106 33 1 0 e 18107 33 1 0 2 9 10 11 12 13 15 17 18 19 20 21 25 26 27 31 32 18108 33 1 0 f 18109 33 1 0 f 18110 33 1 0 f 18111 33 1 0 f 18112 33 1 0 f 18113 33 1 0 f 18114 33 1 0 0 1 2 4 6 10 12 13 17 21 26 27 18115 33 1 0 0 1 2 4 6 10 12 13 17 21 26 27 18116 33 1 0 1 3 4 5 9 12 13 14 15 16 19 21 23 24 28 29 30 32 18117 33 1 0 f 18118 33 1 0 0 1 2 3 7 10 13 17 18 19 21 22 25 28 31 18119 33 1 0 0 1 2 3 4 5 7 8 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 28 30 31 32 18120 33 1 1 e 18121 33 1 1 e 18122 33 1 1 e 18123 33 1 1 f 18124 33 1 1 e 18125 33 1 1 1 4 5 6 9 12 13 15 16 20 23 24 27 30 31 32 18126 33 1 1 f 18127 33 1 1 f 18128 33 1 1 f 18129 33 1 1 f 18130 33 1 1 f 18131 33 1 1 f 18132 33 1 1 0 1 2 4 5 9 12 15 16 20 23 24 27 29 30 32 18133 33 1 1 0 1 2 4 5 9 12 15 16 20 23 24 27 29 30 32 18134 33 1 1 0 1 2 4 6 7 10 11 13 14 15 18 19 23 24 26 27 28 31 32 18135 33 1 1 f 18136 33 1 1 2 4 5 6 8 9 10 14 15 19 20 21 24 28 29 31 18137 33 1 1 2 4 5 6 8 9 10 11 14 15 16 17 18 19 20 21 22 24 25 28 29 31 32 18138 33 1 1 e 18139 33 1 1 e 18140 33 1 1 e 18141 33 1 1 f 18142 33 1 1 e 18143 33 1 1 0 1 4 11 15 16 19 20 21 23 24 28 29 30 31 18144 33 1 1 f 18145 33 1 1 f 18146 33 1 1 f 18147 33 1 1 f 18148 33 1 1 f 18149 33 1 1 f 18150 33 1 1 3 5 6 7 8 9 11 13 18 19 21 24 25 26 27 28 18151 33 1 1 3 5 6 7 8 9 11 13 18 19 21 24 25 26 27 28 18152 33 1 1 0 1 2 3 4 5 6 7 8 9 10 11 12 14 17 21 24 27 28 18153 33 1 1 f 18154 33 1 1 3 4 5 6 7 8 9 10 12 13 14 18 20 21 26 27 28 31 32 18155 33 1 1 1 2 3 4 5 6 7 8 9 10 12 13 14 16 18 19 20 21 22 23 24 25 26 27 28 30 31 32 18156 33 1 1 e 18157 33 1 1 e 18158 33 1 1 e 18159 33 1 1 f 18160 33 1 1 e 18161 33 1 1 0 1 8 9 11 13 15 21 22 23 26 27 31 18162 33 1 1 f 18163 33 1 1 f 18164 33 1 1 f 18165 33 1 1 f 18166 33 1 1 f 18167 33 1 1 f 18168 33 1 1 0 5 7 8 12 13 20 22 27 28 31 32 18169 33 1 1 0 5 7 8 12 13 20 22 27 28 31 32 18170 33 1 1 1 2 5 6 11 12 13 16 17 20 21 22 23 26 27 28 29 30 32 18171 33 1 1 f 18172 33 1 1 0 2 3 6 7 8 9 10 16 17 18 19 21 23 24 26 27 29 31 18173 33 1 1 0 1 2 3 4 5 6 7 8 9 10 12 16 17 18 19 20 21 23 24 26 27 28 29 31 18174 33 1 1 e 18175 33 1 1 e 18176 33 1 1 e 18177 33 1 1 f 18178 33 1 1 e 18179 33 1 1 4 5 9 10 11 15 17 18 24 25 27 32 18180 33 1 1 f 18181 33 1 1 f 18182 33 1 1 f 18183 33 1 1 f 18184 33 1 1 f 18185 33 1 1 f 18186 33 1 1 1 5 7 8 9 10 11 12 16 17 20 21 22 24 25 26 30 31 32 18187 33 1 1 1 5 7 8 9 10 11 12 16 17 20 21 22 24 25 26 30 31 32 18188 33 1 1 0 3 4 6 7 9 10 12 15 16 17 18 19 21 22 24 26 28 29 31 18189 33 1 1 f 18190 33 1 1 0 1 4 7 9 10 11 13 18 20 21 24 25 28 30 31 18191 33 1 1 0 1 4 5 7 8 9 10 11 12 13 14 15 16 18 19 20 21 22 23 24 25 26 27 28 30 31 18192 63 0 0 e 18193 63 0 0 e 18194 63 0 0 e 18195 63 0 0 f 18196 63 0 0 e 18197 63 0 0 2 4 6 7 10 11 13 14 15 16 17 18 19 21 23 26 27 29 32 34 35 36 37 38 43 45 46 47 48 49 50 54 55 56 57 58 59 18198 63 0 0 f 18199 63 0 0 f 18200 63 0 0 f 18201 63 0 0 f 18202 63 0 0 f 18203 63 0 0 f 18204 63 0 0 1 3 4 5 6 7 10 12 14 15 16 18 19 23 26 29 30 32 33 35 36 37 44 48 53 55 57 58 60 61 62 18205 63 0 0 1 3 4 5 6 7 10 12 14 15 16 18 19 23 26 29 30 32 33 35 36 37 44 48 53 55 57 58 60 61 62 18206 63 0 0 0 1 3 4 7 8 13 14 15 16 17 21 27 29 30 32 33 39 40 41 44 45 46 47 48 53 54 57 59 60 61 18207 63 0 0 f 18208 63 0 0 0 1 5 6 8 9 12 15 18 19 20 21 22 24 25 27 28 30 34 35 38 42 43 44 45 46 49 56 57 59 18209 63 0 0 0 1 2 3 5 6 7 8 9 11 12 15 16 18 19 20 21 22 24 25 27 28 29 30 34 35 36 37 38 39 40 41 42 43 44 45 46 49 50 51 52 56 57 59 61 62 18210 63 0 0 e 18211 63 0 0 e 18212 63 0 0 e 18213 63 0 0 f 18214 63 0 0 e 18215 63 0 0 0 2 3 10 11 12 13 14 16 17 18 19 20 23 24 25 30 32 33 38 39 40 46 49 51 54 55 59 60 18216 63 0 0 f 18217 63 0 0 f 18218 63 0 0 f 18219 63 0 0 f 18220 63 0 0 f 18221 63 0 0 f 18222 63 0 0 2 5 8 9 10 11 12 13 17 20 21 22 23 26 27 28 32 37 38 41 44 46 50 52 56 57 59 61 18223 63 0 0 2 5 8 9 10 11 12 13 17 20 21 22 23 26 27 28 32 37 38 41 44 46 50 52 56 57 59 61 18224 63 0 0 1 2 3 6 8 9 10 12 15 16 18 19 23 28 29 32 36 38 39 43 44 46 48 49 52 53 56 57 59 60 61 62 18225 63 0 0 f 18226 63 0 0 0 3 4 6 7 8 10 11 12 14 18 19 21 23 24 28 31 33 34 39 40 42 43 44 48 52 53 55 56 59 60 61 62 18227 63 0 0 0 3 4 5 6 7 8 10 11 12 13 14 16 17 18 19 20 21 22 23 24 26 28 29 30 31 33 34 35 37 38 39 40 42 43 44 48 49 50 52 53 55 56 58 59 60 61 62 18228 63 0 0 e 18229 63 0 0 e 18230 63 0 0 e 18231 63 0 0 f 18232 63 0 0 e 18233 63 0 0 2 4 5 6 7 10 14 15 16 17 21 23 24 25 28 31 39 41 43 46 47 53 55 57 60 61 18234 63 0 0 f 18235 63 0 0 f 18236 63 0 0 f 18237 63 0 0 f 18238 63 0 0 f 18239 63 0 0 f 18240 63 0 0 0 2 4 9 11 14 16 17 22 23 24 25 26 27 30 31 32 33 36 37 38 43 44 46 47 51 52 53 56 60 18241 63 0 0 0 2 4 9 11 14 16 17 22 23 24 25 26 27 30 31 32 33 36 37 38 43 44 46 47 51 52 53 56 60 18242 63 0 0 0 1 4 8 9 10 12 17 18 21 22 23 24 27 29 31 32 33 35 36 39 43 45 47 51 52 53 54 55 58 61 18243 63 0 0 f 18244 63 0 0 0 1 2 3 4 6 10 12 14 15 16 18 19 21 22 23 26 27 28 29 31 33 38 39 40 44 47 50 51 53 54 62 18245 63 0 0 0 1 2 3 4 5 6 8 10 12 13 14 15 16 17 18 19 20 21 22 23 24 26 27 28 29 30 31 32 33 38 39 40 41 43 44 45 46 47 48 50 51 53 54 56 57 59 62 18246 63 0 0 e 18247 63 0 0 e 18248 63 0 0 e 18249 63 0 0 f 18250 63 0 0 e 18251 63 0 0 0 1 2 5 10 12 13 16 18 20 22 25 27 28 29 31 33 35 36 37 42 45 47 54 55 56 58 59 60 61 62 18252 63 0 0 f 18253 63 0 0 f 18254 63 0 0 f 18255 63 0 0 f 18256 63 0 0 f 18257 63 0 0 f 18258 63 0 0 1 2 3 4 8 9 10 11 13 15 17 18 23 26 27 28 30 31 33 34 39 40 42 44 50 51 52 56 58 60 61 18259 63 0 0 1 2 3 4 8 9 10 11 13 15 17 18 23 26 27 28 30 31 33 34 39 40 42 44 50 51 52 56 58 60 61 18260 63 0 0 4 5 6 7 8 10 13 14 15 17 18 19 20 23 24 25 26 29 30 31 35 38 39 43 45 47 48 50 51 54 56 57 58 61 18261 63 0 0 f 18262 63 0 0 0 3 4 5 7 9 10 11 13 16 17 18 19 23 26 27 28 29 30 35 37 38 40 41 44 45 47 48 51 52 53 54 55 58 59 61 18263 63 0 0 0 2 3 4 5 7 9 10 11 12 13 14 16 17 18 19 21 22 23 26 27 28 29 30 32 34 35 36 37 38 40 41 42 43 44 45 47 48 50 51 52 53 54 55 57 58 59 61 18264 63 0 1 e 18265 63 0 1 e 18266 63 0 1 e 18267 63 0 1 f 18268 63 0 1 e 18269 63 0 1 1 3 4 10 11 12 13 15 16 18 20 21 25 26 30 31 34 38 39 40 41 42 43 45 46 50 58 59 60 61 62 18270 63 0 1 f 18271 63 0 1 f 18272 63 0 1 f 18273 63 0 1 f 18274 63 0 1 f 18275 63 0 1 f 18276 63 0 1 1 3 5 12 15 16 18 19 20 24 31 33 35 37 38 39 45 46 48 49 51 52 53 54 55 56 58 60 62 18277 63 0 1 1 3 5 12 15 16 18 19 20 24 31 33 35 37 38 39 45 46 48 49 51 52 53 54 55 56 58 60 62 18278 63 0 1 0 1 3 6 8 9 10 15 17 18 20 21 23 24 25 26 27 29 30 32 36 37 38 39 40 41 47 50 52 55 56 57 58 60 61 62 18279 63 0 1 f 18280 63 0 1 0 11 13 14 19 23 26 27 30 32 34 35 39 41 43 44 48 51 52 54 56 57 59 18281 63 0 1 0 1 2 3 7 8 9 11 12 13 14 15 16 19 21 22 23 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 43 44 46 48 49 50 51 52 53 54 56 57 58 59 60 62 18282 63 0 1 e 18283 63 0 1 e 18284 63 0 1 e 18285 63 0 1 f 18286 63 0 1 e 18287 63 0 1 0 3 6 7 12 13 14 15 16 17 18 20 21 22 23 24 25 26 27 28 30 31 35 36 38 50 52 53 55 56 57 58 59 61 18288 63 0 1 f 18289 63 0 1 f 18290 63 0 1 f 18291 63 0 1 f 18292 63 0 1 f 18293 63 0 1 f 18294 63 0 1 7 9 13 18 19 21 23 25 28 32 33 37 38 39 43 45 46 48 49 52 53 56 57 58 59 62 18295 63 0 1 7 9 13 18 19 21 23 25 28 32 33 37 38 39 43 45 46 48 49 52 53 56 57 58 59 62 18296 63 0 1 3 6 8 9 15 19 21 24 28 32 33 34 37 39 40 41 43 45 46 49 51 52 55 56 60 61 62 18297 63 0 1 f 18298 63 0 1 0 1 2 3 4 7 12 14 16 17 19 20 21 22 23 24 26 29 30 33 37 41 42 43 45 48 49 51 52 56 58 61 18299 63 0 1 0 1 2 3 4 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 26 29 30 32 33 35 36 37 38 39 40 41 42 43 44 45 46 48 49 51 52 54 56 58 59 60 61 18300 63 0 1 e 18301 63 0 1 e 18302 63 0 1 e 18303 63 0 1 f 18304 63 0 1 e 18305 63 0 1 0 1 2 3 4 5 6 8 9 10 15 16 23 24 25 27 28 31 33 35 36 39 40 44 47 48 52 54 55 58 59 60 62 18306 63 0 1 f 18307 63 0 1 f 18308 63 0 1 f 18309 63 0 1 f 18310 63 0 1 f 18311 63 0 1 f 18312 63 0 1 3 4 5 9 11 12 14 15 16 18 20 21 22 25 26 28 30 31 32 33 34 35 36 39 40 42 43 44 45 46 47 48 49 51 52 53 56 58 60 18313 63 0 1 3 4 5 9 11 12 14 15 16 18 20 21 22 25 26 28 30 31 32 33 34 35 36 39 40 42 43 44 45 46 47 48 49 51 52 53 56 58 60 18314 63 0 1 0 6 10 12 13 15 16 18 19 21 23 24 29 30 31 33 35 38 39 41 44 45 51 54 55 56 61 18315 63 0 1 f 18316 63 0 1 0 1 2 5 10 11 13 15 18 20 23 26 27 28 29 30 32 33 34 36 38 40 41 44 46 48 49 50 51 55 56 58 61 62 18317 63 0 1 0 1 2 3 5 6 9 10 11 12 13 14 15 17 18 19 20 21 23 25 26 27 28 29 30 31 32 33 34 36 37 38 39 40 41 42 43 44 46 48 49 50 51 52 53 54 55 56 57 58 61 62 18318 63 0 1 e 18319 63 0 1 e 18320 63 0 1 e 18321 63 0 1 f 18322 63 0 1 e 18323 63 0 1 0 4 7 9 12 13 14 17 19 23 24 26 28 33 34 36 37 38 40 43 47 48 49 52 53 55 59 61 18324 63 0 1 f 18325 63 0 1 f 18326 63 0 1 f 18327 63 0 1 f 18328 63 0 1 f 18329 63 0 1 f 18330 63 0 1 0 1 5 8 10 14 17 18 19 23 26 29 32 34 37 38 42 43 44 45 48 49 54 56 57 58 60 61 62 18331 63 0 1 0 1 5 8 10 14 17 18 19 23 26 29 32 34 37 38 42 43 44 45 48 49 54 56 57 58 60 61 62 18332 63 0 1 3 4 7 8 9 10 11 12 14 17 18 23 24 28 30 32 35 36 37 38 39 40 42 43 44 45 48 49 50 51 54 60 62 18333 63 0 1 f 18334 63 0 1 0 1 4 5 7 8 9 10 12 14 15 17 18 20 21 22 26 27 28 30 31 39 41 43 46 47 48 49 50 51 52 53 57 62 18335 63 0 1 0 1 3 4 5 6 7 8 9 10 11 12 14 15 17 18 20 21 22 23 25 26 27 28 30 31 32 33 36 39 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 57 58 60 62 18336 63 1 0 e 18337 63 1 0 e 18338 63 1 0 e 18339 63 1 0 f 18340 63 1 0 e 18341 63 1 0 0 7 8 9 10 12 16 17 19 22 24 26 32 36 37 39 40 41 43 45 49 51 54 55 56 57 18342 63 1 0 f 18343 63 1 0 f 18344 63 1 0 f 18345 63 1 0 f 18346 63 1 0 f 18347 63 1 0 f 18348 63 1 0 0 7 8 9 10 12 13 15 16 19 20 22 23 24 28 32 33 34 36 38 39 40 41 43 44 45 46 47 48 49 50 51 56 57 58 59 61 18349 63 1 0 0 7 8 9 10 12 13 15 16 19 20 22 23 24 28 32 33 34 36 38 39 40 41 43 44 45 46 47 48 49 50 51 56 57 58 59 61 18350 63 1 0 1 2 4 7 10 11 13 14 15 16 17 18 22 25 27 31 32 35 37 39 42 47 54 55 58 59 61 62 18351 63 1 0 f 18352 63 1 0 2 4 5 6 8 13 14 16 18 20 24 25 27 30 31 33 34 37 38 40 41 42 44 45 46 47 49 51 53 57 59 60 18353 63 1 0 1 2 3 4 5 6 7 8 10 11 13 14 15 16 17 18 20 21 22 23 24 25 27 30 31 33 34 35 37 38 39 40 41 42 43 44 45 46 47 48 49 51 53 54 55 56 57 58 59 60 61 18354 63 1 0 e 18355 63 1 0 e 18356 63 1 0 e 18357 63 1 0 f 18358 63 1 0 e 18359 63 1 0 1 2 8 10 11 13 14 16 18 24 29 32 34 36 37 38 39 42 45 46 48 49 50 53 54 57 59 60 61 18360 63 1 0 f 18361 63 1 0 f 18362 63 1 0 f 18363 63 1 0 f 18364 63 1 0 f 18365 63 1 0 f 18366 63 1 0 1 3 4 5 9 11 13 14 15 17 18 19 20 21 22 24 31 33 34 36 41 42 43 44 45 48 51 53 54 59 61 62 18367 63 1 0 1 3 4 5 9 11 13 14 15 17 18 19 20 21 22 24 31 33 34 36 41 42 43 44 45 48 51 53 54 59 61 62 18368 63 1 0 0 1 2 3 4 12 14 16 19 20 22 23 24 25 33 37 38 39 40 41 42 43 45 48 49 50 51 53 54 55 56 60 61 18369 63 1 0 f 18370 63 1 0 1 2 3 4 7 10 12 14 15 18 20 21 22 23 27 28 29 32 33 34 35 39 40 43 44 46 48 49 55 56 58 59 61 62 18371 63 1 0 1 2 3 4 7 9 10 12 14 15 16 17 18 20 21 22 23 26 27 28 29 31 32 33 34 35 36 38 39 40 41 43 44 46 48 49 50 54 55 56 57 58 59 60 61 62 18372 63 1 0 e 18373 63 1 0 e 18374 63 1 0 e 18375 63 1 0 f 18376 63 1 0 e 18377 63 1 0 0 1 5 7 11 13 15 16 20 21 23 24 25 26 28 30 34 35 37 41 43 45 49 50 51 52 54 55 57 58 59 61 18378 63 1 0 f 18379 63 1 0 f 18380 63 1 0 f 18381 63 1 0 f 18382 63 1 0 f 18383 63 1 0 f 18384 63 1 0 2 3 5 7 8 9 13 14 15 22 25 27 28 29 30 32 33 37 38 42 43 45 46 47 48 50 52 53 57 58 61 62 18385 63 1 0 2 3 5 7 8 9 13 14 15 22 25 27 28 29 30 32 33 37 38 42 43 45 46 47 48 50 52 53 57 58 61 62 18386 63 1 0 3 4 6 8 11 12 13 16 17 22 23 24 26 28 32 33 35 36 37 39 41 43 44 45 47 48 49 50 53 54 55 57 62 18387 63 1 0 f 18388 63 1 0 2 5 6 7 14 15 17 18 20 21 23 24 29 30 31 32 33 34 36 37 41 48 50 51 54 56 60 62 18389 63 1 0 0 2 5 6 7 8 14 15 17 18 20 21 23 24 25 28 29 30 31 32 33 34 35 36 37 38 40 41 42 45 47 48 50 51 52 53 54 55 56 60 61 62 18390 63 1 0 e 18391 63 1 0 e 18392 63 1 0 e 18393 63 1 0 f 18394 63 1 0 e 18395 63 1 0 0 3 4 5 6 7 9 10 11 14 16 18 19 20 21 22 23 27 28 31 32 34 35 38 39 44 46 47 48 51 54 55 58 60 61 62 18396 63 1 0 f 18397 63 1 0 f 18398 63 1 0 f 18399 63 1 0 f 18400 63 1 0 f 18401 63 1 0 f 18402 63 1 0 0 1 3 4 5 6 8 10 12 14 16 17 18 19 21 22 23 26 30 36 37 38 39 41 44 45 47 48 56 58 18403 63 1 0 0 1 3 4 5 6 8 10 12 14 16 17 18 19 21 22 23 26 30 36 37 38 39 41 44 45 47 48 56 58 18404 63 1 0 0 1 2 3 4 5 6 10 13 14 16 18 23 24 25 26 30 31 32 34 35 37 41 42 43 44 45 46 49 50 51 52 54 55 56 60 61 18405 63 1 0 f 18406 63 1 0 0 4 5 6 9 11 14 15 17 18 20 21 22 23 24 26 29 31 33 36 39 40 41 42 44 45 48 50 53 61 18407 63 1 0 0 1 2 3 4 5 6 9 11 14 15 17 18 19 20 21 22 23 24 26 27 29 31 33 35 36 37 39 40 41 42 44 45 46 48 50 52 53 57 59 61 18408 63 1 1 e 18409 63 1 1 e 18410 63 1 1 e 18411 63 1 1 f 18412 63 1 1 e 18413 63 1 1 4 7 10 13 15 17 20 22 23 24 27 28 29 33 36 37 41 42 43 44 46 47 49 51 54 56 61 62 18414 63 1 1 f 18415 63 1 1 f 18416 63 1 1 f 18417 63 1 1 f 18418 63 1 1 f 18419 63 1 1 f 18420 63 1 1 0 2 3 6 7 11 12 14 15 16 23 24 26 27 30 31 33 34 35 37 41 48 52 53 54 55 57 58 60 61 18421 63 1 1 0 2 3 6 7 11 12 14 15 16 23 24 26 27 30 31 33 34 35 37 41 48 52 53 54 55 57 58 60 61 18422 63 1 1 1 4 6 8 9 10 12 13 16 17 18 19 20 21 22 23 24 25 26 28 29 30 32 35 36 39 40 41 43 44 45 47 48 49 50 51 52 53 54 55 57 60 18423 63 1 1 f 18424 63 1 1 1 2 4 7 10 13 18 21 22 23 25 30 31 33 35 37 38 41 42 43 46 47 48 49 51 52 54 55 56 60 18425 63 1 1 0 1 2 3 4 6 7 8 10 12 13 15 16 18 19 21 22 23 25 26 27 28 30 31 32 33 34 35 36 37 38 41 42 43 44 46 47 48 49 50 51 52 53 54 55 56 60 61 18426 63 1 1 e 18427 63 1 1 e 18428 63 1 1 e 18429 63 1 1 f 18430 63 1 1 e 18431 63 1 1 3 4 5 13 14 16 22 23 25 27 30 31 37 38 42 45 46 48 49 50 54 55 59 62 18432 63 1 1 f 18433 63 1 1 f 18434 63 1 1 f 18435 63 1 1 f 18436 63 1 1 f 18437 63 1 1 f 18438 63 1 1 2 3 6 7 12 13 14 15 16 19 23 26 29 35 36 37 38 44 47 48 49 53 54 57 58 59 60 18439 63 1 1 2 3 6 7 12 13 14 15 16 19 23 26 29 35 36 37 38 44 47 48 49 53 54 57 58 59 60 18440 63 1 1 0 1 3 7 8 9 11 12 13 16 17 18 19 21 22 23 25 28 29 31 33 35 37 38 40 41 44 46 49 51 52 57 58 60 62 18441 63 1 1 f 18442 63 1 1 4 6 7 9 11 12 13 14 17 18 19 20 24 26 27 30 34 36 37 40 42 45 46 52 53 59 60 18443 63 1 1 1 2 4 5 6 7 9 11 12 13 14 15 17 18 19 20 24 25 26 27 30 31 33 34 36 37 38 40 41 42 43 44 45 46 52 53 54 55 57 59 60 18444 63 1 1 e 18445 63 1 1 e 18446 63 1 1 e 18447 63 1 1 f 18448 63 1 1 e 18449 63 1 1 0 2 5 6 8 9 10 11 12 13 16 17 18 22 25 26 28 30 31 32 34 35 37 40 42 43 44 47 51 54 55 56 57 59 60 61 62 18450 63 1 1 f 18451 63 1 1 f 18452 63 1 1 f 18453 63 1 1 f 18454 63 1 1 f 18455 63 1 1 f 18456 63 1 1 0 2 4 5 6 7 14 15 16 21 22 23 24 25 26 28 29 34 38 39 40 43 44 46 47 48 54 57 59 60 61 18457 63 1 1 0 2 4 5 6 7 14 15 16 21 22 23 24 25 26 28 29 34 38 39 40 43 44 46 47 48 54 57 59 60 61 18458 63 1 1 3 4 5 6 7 13 16 17 18 19 20 22 25 26 28 29 30 36 37 41 42 44 46 52 58 60 61 62 18459 63 1 1 f 18460 63 1 1 1 4 6 11 13 14 15 20 21 22 26 27 29 30 32 33 34 35 37 39 41 42 44 47 48 51 54 56 57 59 60 61 18461 63 1 1 1 4 6 7 10 11 12 13 14 15 16 17 19 20 21 22 24 25 26 27 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 50 51 54 56 57 58 59 60 61 62 18462 63 1 1 e 18463 63 1 1 e 18464 63 1 1 e 18465 63 1 1 f 18466 63 1 1 e 18467 63 1 1 1 2 4 5 8 9 10 11 12 13 14 15 18 19 20 22 23 26 28 30 33 36 37 38 40 41 43 45 46 47 51 52 54 56 57 59 62 18468 63 1 1 f 18469 63 1 1 f 18470 63 1 1 f 18471 63 1 1 f 18472 63 1 1 f 18473 63 1 1 f 18474 63 1 1 1 2 5 6 7 10 11 12 13 19 21 26 31 33 36 37 43 44 45 48 49 52 53 55 59 60 62 18475 63 1 1 1 2 5 6 7 10 11 12 13 19 21 26 31 33 36 37 43 44 45 48 49 52 53 55 59 60 62 18476 63 1 1 3 6 7 13 14 15 16 17 20 22 23 24 26 27 30 32 33 39 41 43 44 47 49 50 51 52 53 54 55 56 57 62 18477 63 1 1 f 18478 63 1 1 2 3 8 9 12 13 14 16 17 19 20 22 26 28 31 34 35 37 40 41 42 43 45 49 52 54 56 57 58 60 61 18479 63 1 1 2 3 4 6 7 8 9 10 11 12 13 14 16 17 18 19 20 22 24 25 26 28 29 30 31 34 35 37 38 39 40 41 42 43 45 48 49 51 52 54 55 56 57 58 59 60 61 18480 64 0 0 e 18481 64 0 0 e 18482 64 0 0 e 18483 64 0 0 f 18484 64 0 0 e 18485 64 0 0 2 4 7 14 15 21 22 23 24 25 27 31 32 35 36 37 38 40 42 44 45 50 57 59 18486 64 0 0 f 18487 64 0 0 f 18488 64 0 0 f 18489 64 0 0 f 18490 64 0 0 f 18491 64 0 0 f 18492 64 0 0 1 4 9 10 11 14 15 17 18 20 21 23 25 28 29 32 33 37 38 39 40 41 42 43 44 46 50 53 54 55 56 59 61 62 18493 64 0 0 1 4 9 10 11 14 15 17 18 20 21 23 25 28 29 32 33 37 38 39 40 41 42 43 44 46 50 53 54 55 56 59 61 62 18494 64 0 0 0 2 9 13 14 15 18 19 21 25 26 27 29 33 35 37 39 40 42 45 46 47 49 50 51 52 54 56 57 60 61 62 18495 64 0 0 f 18496 64 0 0 0 4 5 6 7 9 10 11 12 13 14 15 16 18 19 20 21 23 24 25 27 28 29 33 34 37 38 39 40 41 44 47 48 50 52 55 61 62 63 18497 64 0 0 0 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 27 28 29 30 31 33 34 35 36 37 38 39 40 41 42 44 45 47 48 50 52 53 55 58 61 62 63 18498 64 0 0 e 18499 64 0 0 e 18500 64 0 0 e 18501 64 0 0 f 18502 64 0 0 e 18503 64 0 0 1 2 3 6 8 11 13 15 20 24 25 26 29 31 32 34 36 38 40 45 50 52 55 59 61 18504 64 0 0 f 18505 64 0 0 f 18506 64 0 0 f 18507 64 0 0 f 18508 64 0 0 f 18509 64 0 0 f 18510 64 0 0 0 1 3 4 7 10 16 18 19 20 22 27 29 30 32 34 35 38 39 40 41 45 48 50 51 53 55 56 57 58 60 61 62 63 18511 64 0 0 0 1 3 4 7 10 16 18 19 20 22 27 29 30 32 34 35 38 39 40 41 45 48 50 51 53 55 56 57 58 60 61 62 63 18512 64 0 0 1 2 3 5 7 8 9 11 13 16 20 23 27 30 31 32 37 39 40 42 46 49 50 55 56 57 58 62 18513 64 0 0 f 18514 64 0 0 0 5 14 15 19 20 21 24 26 28 29 31 33 34 35 36 38 39 43 44 46 47 48 50 54 57 58 62 63 18515 64 0 0 0 1 3 5 6 7 8 10 11 12 13 14 15 18 19 20 21 24 25 26 28 29 30 31 33 34 35 36 38 39 40 42 43 44 46 47 48 50 51 54 55 57 58 60 62 63 18516 64 0 0 e 18517 64 0 0 e 18518 64 0 0 e 18519 64 0 0 f 18520 64 0 0 e 18521 64 0 0 0 3 4 5 6 7 8 10 11 12 13 15 18 21 23 25 28 30 31 32 33 35 36 38 39 40 42 43 45 46 47 51 53 57 58 60 63 18522 64 0 0 f 18523 64 0 0 f 18524 64 0 0 f 18525 64 0 0 f 18526 64 0 0 f 18527 64 0 0 f 18528 64 0 0 0 4 6 11 12 16 19 22 24 25 26 28 29 30 31 37 38 39 41 42 43 48 49 51 55 59 61 62 63 18529 64 0 0 0 4 6 11 12 16 19 22 24 25 26 28 29 30 31 37 38 39 41 42 43 48 49 51 55 59 61 62 63 18530 64 0 0 1 3 4 5 6 8 9 12 13 15 17 18 19 20 21 22 25 28 29 32 34 35 37 42 47 48 49 51 52 58 61 18531 64 0 0 f 18532 64 0 0 3 5 7 17 20 21 22 27 29 31 33 34 35 39 40 41 46 47 52 53 57 58 59 60 62 18533 64 0 0 0 1 3 5 7 11 12 17 20 21 22 24 25 27 28 29 31 33 34 35 37 38 39 40 41 42 44 46 47 48 49 50 51 52 53 54 55 57 58 59 60 62 63 18534 64 0 0 e 18535 64 0 0 e 18536 64 0 0 e 18537 64 0 0 f 18538 64 0 0 e 18539 64 0 0 1 3 6 7 8 10 11 12 14 15 17 24 26 28 29 30 32 34 36 37 38 39 41 42 43 45 46 47 51 52 53 57 58 60 61 62 63 18540 64 0 0 f 18541 64 0 0 f 18542 64 0 0 f 18543 64 0 0 f 18544 64 0 0 f 18545 64 0 0 f 18546 64 0 0 0 2 3 6 7 8 10 11 13 14 17 19 21 26 27 29 35 36 39 40 42 46 51 53 54 55 57 58 59 60 63 18547 64 0 0 0 2 3 6 7 8 10 11 13 14 17 19 21 26 27 29 35 36 39 40 42 46 51 53 54 55 57 58 59 60 63 18548 64 0 0 1 2 6 9 10 11 13 15 19 22 27 28 30 33 36 38 48 49 53 54 57 63 18549 64 0 0 f 18550 64 0 0 1 5 6 7 9 11 18 22 23 27 28 29 30 32 33 36 38 43 44 47 48 49 55 56 57 58 59 61 18551 64 0 0 0 1 3 4 5 6 7 8 9 10 11 12 15 17 18 19 21 22 23 24 25 27 28 29 30 32 33 34 36 38 40 41 42 43 44 46 47 48 49 50 51 53 55 56 57 58 59 61 63 18552 64 0 1 e 18553 64 0 1 e 18554 64 0 1 e 18555 64 0 1 f 18556 64 0 1 e 18557 64 0 1 0 8 10 11 13 15 16 20 21 27 29 30 31 32 36 37 38 39 40 41 42 45 49 50 53 54 55 58 59 60 61 62 63 18558 64 0 1 f 18559 64 0 1 f 18560 64 0 1 f 18561 64 0 1 f 18562 64 0 1 f 18563 64 0 1 f 18564 64 0 1 0 1 3 6 7 8 10 11 12 13 15 16 18 20 22 26 34 35 36 37 39 40 42 43 44 46 47 49 52 53 54 57 58 59 60 18565 64 0 1 0 1 3 6 7 8 10 11 12 13 15 16 18 20 22 26 34 35 36 37 39 40 42 43 44 46 47 49 52 53 54 57 58 59 60 18566 64 0 1 0 2 3 4 6 7 8 9 10 11 12 14 17 18 20 21 22 24 25 27 28 29 30 31 32 33 35 38 40 41 42 43 45 48 50 51 57 58 61 62 18567 64 0 1 f 18568 64 0 1 0 4 6 7 9 10 14 16 17 18 24 26 29 30 34 35 36 37 38 42 43 44 45 50 51 56 57 58 60 61 62 63 18569 64 0 1 0 1 2 4 5 6 7 9 10 11 14 15 16 17 18 19 21 24 26 29 30 31 32 34 35 36 37 38 40 42 43 44 45 46 50 51 52 53 54 55 56 57 58 59 60 61 62 63 18570 64 0 1 e 18571 64 0 1 e 18572 64 0 1 e 18573 64 0 1 f 18574 64 0 1 e 18575 64 0 1 5 6 11 13 15 22 24 27 28 29 33 34 35 37 38 39 42 43 45 49 50 51 53 56 59 61 63 18576 64 0 1 f 18577 64 0 1 f 18578 64 0 1 f 18579 64 0 1 f 18580 64 0 1 f 18581 64 0 1 f 18582 64 0 1 0 2 4 5 6 7 13 14 15 17 18 20 23 25 26 27 30 32 34 35 37 38 39 43 45 47 48 51 52 59 60 61 63 18583 64 0 1 0 2 4 5 6 7 13 14 15 17 18 20 23 25 26 27 30 32 34 35 37 38 39 43 45 47 48 51 52 59 60 61 63 18584 64 0 1 1 2 3 4 5 7 9 10 11 12 16 17 21 22 23 24 25 26 27 28 29 32 35 36 37 38 42 44 46 49 50 52 53 55 56 57 59 60 61 63 18585 64 0 1 f 18586 64 0 1 2 7 8 10 11 12 13 16 18 20 21 23 24 25 27 28 29 30 31 33 37 42 44 47 57 59 62 63 18587 64 0 1 0 2 4 7 8 10 11 12 13 16 17 18 20 21 22 23 24 25 27 28 29 30 31 32 33 35 36 37 38 42 44 45 47 51 53 55 56 57 59 62 63 18588 64 0 1 e 18589 64 0 1 e 18590 64 0 1 e 18591 64 0 1 f 18592 64 0 1 e 18593 64 0 1 1 2 4 5 6 9 10 11 12 17 18 19 20 22 23 24 25 26 31 33 34 36 37 38 39 40 41 42 44 46 48 49 51 52 53 55 56 60 62 18594 64 0 1 f 18595 64 0 1 f 18596 64 0 1 f 18597 64 0 1 f 18598 64 0 1 f 18599 64 0 1 f 18600 64 0 1 1 3 6 9 10 13 15 19 21 22 26 27 28 29 30 32 34 35 36 37 40 45 47 51 55 56 57 58 59 60 62 18601 64 0 1 1 3 6 9 10 13 15 19 21 22 26 27 28 29 30 32 34 35 36 37 40 45 47 51 55 56 57 58 59 60 62 18602 64 0 1 0 1 4 5 6 7 11 16 17 26 28 29 30 32 34 35 37 38 39 40 44 45 46 47 48 49 53 54 55 56 57 59 60 61 63 18603 64 0 1 f 18604 64 0 1 2 4 5 7 8 9 11 12 13 15 16 17 21 24 25 28 31 32 33 35 36 37 38 39 41 44 45 46 47 48 53 54 55 56 57 61 18605 64 0 1 0 1 2 4 5 7 8 9 11 12 13 14 15 16 17 18 19 21 22 23 24 25 27 28 29 31 32 33 35 36 37 38 39 41 44 45 46 47 48 50 51 52 53 54 55 56 57 61 18606 64 0 1 e 18607 64 0 1 e 18608 64 0 1 e 18609 64 0 1 f 18610 64 0 1 e 18611 64 0 1 0 1 2 3 4 5 6 15 16 17 18 19 20 23 24 25 27 29 32 35 38 39 43 44 46 49 55 57 58 59 60 63 18612 64 0 1 f 18613 64 0 1 f 18614 64 0 1 f 18615 64 0 1 f 18616 64 0 1 f 18617 64 0 1 f 18618 64 0 1 0 4 5 6 7 8 9 13 16 21 22 24 28 29 30 31 32 34 35 37 38 40 42 44 46 47 48 51 52 55 56 57 59 60 63 18619 64 0 1 0 4 5 6 7 8 9 13 16 21 22 24 28 29 30 31 32 34 35 37 38 40 42 44 46 47 48 51 52 55 56 57 59 60 63 18620 64 0 1 0 6 7 9 13 15 17 18 25 26 30 32 34 36 37 40 42 43 46 47 49 50 51 54 55 56 57 18621 64 0 1 f 18622 64 0 1 0 2 4 5 6 7 10 11 12 13 14 15 16 17 18 20 21 23 24 28 29 30 32 34 35 37 38 39 42 43 45 46 47 49 56 57 59 18623 64 0 1 0 2 4 5 6 7 8 10 11 12 13 14 15 16 17 18 20 21 22 23 24 27 28 29 30 32 33 34 35 36 37 38 39 40 42 43 44 45 46 47 48 49 51 52 53 56 57 58 59 60 62 63 18624 64 1 0 e 18625 64 1 0 e 18626 64 1 0 e 18627 64 1 0 f 18628 64 1 0 e 18629 64 1 0 0 2 3 5 6 13 14 18 28 30 31 32 33 34 35 36 40 48 50 51 52 56 57 58 60 61 63 18630 64 1 0 f 18631 64 1 0 f 18632 64 1 0 f 18633 64 1 0 f 18634 64 1 0 f 18635 64 1 0 f 18636 64 1 0 0 1 2 3 4 5 7 9 11 15 17 19 23 25 26 28 31 34 36 41 45 49 51 52 53 56 58 59 60 62 18637 64 1 0 0 1 2 3 4 5 7 9 11 15 17 19 23 25 26 28 31 34 36 41 45 49 51 52 53 56 58 59 60 62 18638 64 1 0 1 2 6 9 10 11 12 16 17 18 19 24 26 27 28 29 34 35 36 51 52 53 54 55 57 58 60 18639 64 1 0 f 18640 64 1 0 0 2 3 4 9 11 13 17 20 26 27 28 31 34 39 41 42 44 46 50 54 55 56 57 58 59 60 61 62 18641 64 1 0 0 1 2 3 4 6 7 9 11 13 14 15 17 19 20 22 24 26 27 28 31 34 35 39 40 41 42 44 45 46 50 51 54 55 56 57 58 59 60 61 62 63 18642 64 1 0 e 18643 64 1 0 e 18644 64 1 0 e 18645 64 1 0 f 18646 64 1 0 e 18647 64 1 0 3 4 5 7 8 10 11 13 15 17 19 20 23 24 25 26 28 29 30 31 34 38 40 41 42 43 44 46 48 50 51 52 54 56 57 58 59 60 61 62 18648 64 1 0 f 18649 64 1 0 f 18650 64 1 0 f 18651 64 1 0 f 18652 64 1 0 f 18653 64 1 0 f 18654 64 1 0 1 3 9 10 13 14 15 16 18 19 20 23 25 27 28 29 31 32 34 36 38 41 43 48 50 51 52 54 55 57 58 59 60 61 62 63 18655 64 1 0 1 3 9 10 13 14 15 16 18 19 20 23 25 27 28 29 31 32 34 36 38 41 43 48 50 51 52 54 55 57 58 59 60 61 62 63 18656 64 1 0 1 5 6 8 13 18 19 20 21 22 24 25 27 28 30 33 34 36 38 39 40 42 44 48 51 55 56 58 59 60 62 63 18657 64 1 0 f 18658 64 1 0 1 7 8 11 12 13 14 15 18 21 28 32 33 34 37 39 42 43 45 46 48 50 54 55 56 62 18659 64 1 0 1 2 5 7 8 10 11 12 13 14 15 16 18 20 21 24 25 26 28 29 30 32 33 34 35 37 39 40 42 43 44 45 46 47 48 50 51 52 53 54 55 56 58 59 62 18660 64 1 0 e 18661 64 1 0 e 18662 64 1 0 e 18663 64 1 0 f 18664 64 1 0 e 18665 64 1 0 0 4 5 8 11 13 17 19 21 23 26 27 28 29 31 35 37 40 41 42 44 46 47 50 51 54 55 56 61 63 18666 64 1 0 f 18667 64 1 0 f 18668 64 1 0 f 18669 64 1 0 f 18670 64 1 0 f 18671 64 1 0 f 18672 64 1 0 0 4 5 7 9 10 11 12 13 14 15 16 19 20 23 25 26 27 28 29 31 33 36 38 39 41 42 44 48 51 52 54 57 58 60 62 18673 64 1 0 0 4 5 7 9 10 11 12 13 14 15 16 19 20 23 25 26 27 28 29 31 33 36 38 39 41 42 44 48 51 52 54 57 58 60 62 18674 64 1 0 3 4 6 7 9 14 16 17 18 19 21 23 26 28 29 31 33 34 35 37 38 39 40 43 44 45 47 48 50 52 53 58 59 62 18675 64 1 0 f 18676 64 1 0 1 3 4 6 7 8 9 10 12 13 15 17 20 21 22 24 28 30 31 34 36 38 41 42 44 47 49 52 53 55 57 58 60 61 18677 64 1 0 0 1 3 4 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 26 28 30 31 33 34 35 36 38 39 41 42 43 44 45 46 47 48 49 50 52 53 54 55 56 57 58 60 61 18678 64 1 0 e 18679 64 1 0 e 18680 64 1 0 e 18681 64 1 0 f 18682 64 1 0 e 18683 64 1 0 3 4 5 12 13 14 15 16 17 19 29 30 31 37 41 42 44 45 51 52 53 54 55 59 63 18684 64 1 0 f 18685 64 1 0 f 18686 64 1 0 f 18687 64 1 0 f 18688 64 1 0 f 18689 64 1 0 f 18690 64 1 0 3 4 6 8 14 18 20 21 22 23 26 28 30 32 35 36 39 40 41 43 44 45 50 51 53 54 55 56 58 59 60 61 63 18691 64 1 0 3 4 6 8 14 18 20 21 22 23 26 28 30 32 35 36 39 40 41 43 44 45 50 51 53 54 55 56 58 59 60 61 63 18692 64 1 0 1 2 5 8 9 11 12 13 15 17 18 19 20 21 23 26 31 33 35 36 37 38 39 40 44 45 48 50 56 57 58 61 18693 64 1 0 f 18694 64 1 0 0 1 3 4 6 7 12 13 14 15 17 22 25 26 27 28 31 34 36 38 40 42 43 44 49 50 53 54 55 60 61 62 63 18695 64 1 0 0 1 3 4 6 7 9 10 12 13 14 15 16 17 21 22 23 25 26 27 28 29 31 32 34 35 36 37 38 40 41 42 43 44 46 47 48 49 50 53 54 55 56 57 58 59 60 61 62 63 18696 64 1 1 e 18697 64 1 1 e 18698 64 1 1 e 18699 64 1 1 f 18700 64 1 1 e 18701 64 1 1 0 1 2 4 5 6 10 12 13 15 16 17 20 22 23 25 26 30 31 33 35 39 40 43 44 45 46 47 48 49 51 58 61 63 18702 64 1 1 f 18703 64 1 1 f 18704 64 1 1 f 18705 64 1 1 f 18706 64 1 1 f 18707 64 1 1 f 18708 64 1 1 0 3 4 5 8 10 11 12 14 15 16 17 19 21 24 29 34 35 42 45 48 50 54 56 58 60 61 62 18709 64 1 1 0 3 4 5 8 10 11 12 14 15 16 17 19 21 24 29 34 35 42 45 48 50 54 56 58 60 61 62 18710 64 1 1 1 3 4 5 6 8 9 10 12 13 14 15 17 19 21 22 25 26 28 33 34 37 38 40 42 43 45 46 47 50 51 53 54 57 58 18711 64 1 1 f 18712 64 1 1 0 2 6 8 9 12 16 18 19 20 21 24 26 27 32 34 36 37 38 39 40 43 44 45 46 48 49 51 52 53 55 58 59 18713 64 1 1 0 2 6 8 9 10 12 13 14 15 16 18 19 20 21 22 24 26 27 28 32 33 34 35 36 37 38 39 40 42 43 44 45 46 48 49 51 52 53 54 55 57 58 59 61 18714 64 1 1 e 18715 64 1 1 e 18716 64 1 1 e 18717 64 1 1 f 18718 64 1 1 e 18719 64 1 1 0 1 3 6 8 9 10 11 13 18 19 22 23 25 27 28 29 32 36 39 40 42 45 46 47 49 51 54 55 58 59 60 61 63 18720 64 1 1 f 18721 64 1 1 f 18722 64 1 1 f 18723 64 1 1 f 18724 64 1 1 f 18725 64 1 1 f 18726 64 1 1 1 7 8 9 12 15 16 19 21 23 25 26 28 30 32 33 34 38 42 46 50 51 52 54 57 60 62 63 18727 64 1 1 1 7 8 9 12 15 16 19 21 23 25 26 28 30 32 33 34 38 42 46 50 51 52 54 57 60 62 63 18728 64 1 1 1 6 7 10 11 12 13 20 24 25 26 27 29 30 32 34 37 38 39 41 42 43 44 52 53 55 56 58 60 61 62 63 18729 64 1 1 f 18730 64 1 1 0 1 2 5 7 8 10 11 12 13 17 20 21 22 23 25 26 29 30 33 34 35 36 38 39 40 42 43 46 47 48 51 55 56 58 61 62 63 18731 64 1 1 0 1 2 3 5 6 7 8 9 10 11 12 13 16 17 18 20 21 22 23 24 25 26 28 29 30 31 33 34 35 36 37 38 39 40 41 42 43 44 46 47 48 50 51 52 53 54 55 56 58 59 60 61 62 63 18732 64 1 1 e 18733 64 1 1 e 18734 64 1 1 e 18735 64 1 1 f 18736 64 1 1 e 18737 64 1 1 0 1 4 5 7 8 11 13 24 27 28 31 33 34 36 39 40 41 45 46 47 50 51 52 55 56 57 58 63 18738 64 1 1 f 18739 64 1 1 f 18740 64 1 1 f 18741 64 1 1 f 18742 64 1 1 f 18743 64 1 1 f 18744 64 1 1 2 3 5 6 8 12 13 14 16 19 21 22 26 32 33 36 38 39 40 41 43 44 47 48 50 54 55 56 58 60 62 63 18745 64 1 1 2 3 5 6 8 12 13 14 16 19 21 22 26 32 33 36 38 39 40 41 43 44 47 48 50 54 55 56 58 60 62 63 18746 64 1 1 1 5 7 8 9 10 11 12 13 14 15 18 19 20 21 22 23 25 28 29 32 37 41 44 48 51 52 54 56 57 59 60 61 63 18747 64 1 1 f 18748 64 1 1 1 3 7 9 12 13 14 15 16 19 20 23 25 26 29 31 32 36 37 41 42 45 49 52 53 54 57 59 60 61 62 18749 64 1 1 1 2 3 4 5 6 7 8 9 10 12 13 14 15 16 19 20 23 25 26 27 29 31 32 34 36 37 38 39 41 42 45 49 52 53 54 55 57 58 59 60 61 62 63 18750 64 1 1 e 18751 64 1 1 e 18752 64 1 1 e 18753 64 1 1 f 18754 64 1 1 e 18755 64 1 1 3 6 7 9 10 11 12 14 19 20 22 23 26 27 28 30 32 34 35 36 37 38 40 41 43 46 47 50 52 56 57 59 62 63 18756 64 1 1 f 18757 64 1 1 f 18758 64 1 1 f 18759 64 1 1 f 18760 64 1 1 f 18761 64 1 1 f 18762 64 1 1 2 5 7 8 10 11 12 14 15 20 22 23 28 29 36 37 39 42 44 45 51 52 54 58 61 63 18763 64 1 1 2 5 7 8 10 11 12 14 15 20 22 23 28 29 36 37 39 42 44 45 51 52 54 58 61 63 18764 64 1 1 1 4 6 8 9 10 14 15 16 18 19 21 22 23 25 27 28 29 31 32 33 35 39 40 49 50 51 52 53 54 55 56 58 60 63 18765 64 1 1 f 18766 64 1 1 0 1 4 5 7 8 9 12 13 14 16 17 20 24 26 27 33 34 36 37 39 40 41 43 45 48 49 50 54 55 57 58 59 63 18767 64 1 1 0 1 2 3 4 5 6 7 8 9 10 12 13 14 15 16 17 19 20 22 24 25 26 27 28 29 32 33 34 36 37 39 40 41 43 44 45 46 47 48 49 50 53 54 55 57 58 59 61 62 63 18768 65 0 0 e 18769 65 0 0 e 18770 65 0 0 e 18771 65 0 0 f 18772 65 0 0 e 18773 65 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 16 18 19 23 24 25 29 30 31 32 33 34 35 36 38 39 41 42 44 46 48 49 52 53 54 55 56 62 18774 65 0 0 f 18775 65 0 0 f 18776 65 0 0 f 18777 65 0 0 f 18778 65 0 0 f 18779 65 0 0 f 18780 65 0 0 0 1 4 5 9 10 11 12 13 20 24 27 28 29 31 32 35 37 41 44 45 46 53 56 57 59 60 61 62 63 18781 65 0 0 0 1 4 5 9 10 11 12 13 20 24 27 28 29 31 32 35 37 41 44 45 46 53 56 57 59 60 61 62 63 18782 65 0 0 0 1 3 4 5 7 9 10 11 15 16 20 21 23 26 27 29 32 33 34 35 36 38 39 40 41 42 44 47 48 51 53 54 57 60 61 62 18783 65 0 0 f 18784 65 0 0 0 3 4 6 7 10 12 16 17 20 21 22 28 29 30 31 32 33 34 35 37 38 42 43 44 47 49 51 52 53 57 62 18785 65 0 0 0 3 4 5 6 7 8 9 10 12 15 16 17 19 20 21 22 23 28 29 30 31 32 33 34 35 37 38 40 41 42 43 44 45 46 47 49 50 51 52 53 57 58 62 64 18786 65 0 0 e 18787 65 0 0 e 18788 65 0 0 e 18789 65 0 0 f 18790 65 0 0 e 18791 65 0 0 0 1 2 8 10 11 12 13 16 17 19 20 25 26 27 36 37 38 40 43 52 53 54 58 59 60 62 63 64 18792 65 0 0 f 18793 65 0 0 f 18794 65 0 0 f 18795 65 0 0 f 18796 65 0 0 f 18797 65 0 0 f 18798 65 0 0 0 6 8 9 12 13 15 16 18 19 22 23 24 25 26 27 28 29 31 36 37 38 39 40 42 48 50 52 53 56 59 62 64 18799 65 0 0 0 6 8 9 12 13 15 16 18 19 22 23 24 25 26 27 28 29 31 36 37 38 39 40 42 48 50 52 53 56 59 62 64 18800 65 0 0 0 1 2 3 4 5 6 8 10 11 13 14 15 16 17 19 21 26 27 28 30 31 33 34 37 38 40 45 48 49 52 53 54 55 56 58 59 60 62 63 18801 65 0 0 f 18802 65 0 0 0 2 3 4 5 6 10 16 18 21 23 24 32 35 37 42 43 44 45 46 49 50 51 52 55 56 57 58 62 64 18803 65 0 0 0 1 2 3 4 5 6 10 13 14 16 18 20 21 23 24 25 28 29 31 32 35 36 37 39 40 41 42 43 44 45 46 49 50 51 52 53 55 56 57 58 60 62 64 18804 65 0 0 e 18805 65 0 0 e 18806 65 0 0 e 18807 65 0 0 f 18808 65 0 0 e 18809 65 0 0 4 7 8 11 12 15 16 17 19 26 27 28 30 32 35 36 37 38 41 46 52 54 56 57 59 61 62 18810 65 0 0 f 18811 65 0 0 f 18812 65 0 0 f 18813 65 0 0 f 18814 65 0 0 f 18815 65 0 0 f 18816 65 0 0 0 6 8 10 12 13 16 17 18 20 24 25 30 31 35 36 40 42 46 47 48 49 51 52 55 60 18817 65 0 0 0 6 8 10 12 13 16 17 18 20 24 25 30 31 35 36 40 42 46 47 48 49 51 52 55 60 18818 65 0 0 0 5 7 8 9 10 11 13 14 17 19 20 22 24 27 28 31 32 33 37 38 41 43 44 48 50 51 52 53 57 61 63 64 18819 65 0 0 f 18820 65 0 0 0 3 8 11 14 15 17 18 22 24 27 28 31 32 33 34 35 37 39 42 43 44 45 46 48 50 52 53 54 60 61 18821 65 0 0 0 2 3 4 5 8 11 12 13 14 15 16 17 18 19 20 21 22 24 25 26 27 28 31 32 33 34 35 36 37 38 39 42 43 44 45 46 47 48 50 52 53 54 55 58 59 60 61 63 64 18822 65 0 0 e 18823 65 0 0 e 18824 65 0 0 e 18825 65 0 0 f 18826 65 0 0 e 18827 65 0 0 0 1 2 4 6 7 10 13 14 17 19 23 26 29 32 33 34 39 40 43 45 48 49 53 55 58 59 18828 65 0 0 f 18829 65 0 0 f 18830 65 0 0 f 18831 65 0 0 f 18832 65 0 0 f 18833 65 0 0 f 18834 65 0 0 1 2 5 6 7 8 9 10 11 13 16 17 19 20 23 24 25 31 32 36 38 39 40 41 42 46 48 51 52 54 55 57 59 62 64 18835 65 0 0 1 2 5 6 7 8 9 10 11 13 16 17 19 20 23 24 25 31 32 36 38 39 40 41 42 46 48 51 52 54 55 57 59 62 64 18836 65 0 0 2 5 9 10 11 12 13 14 17 19 22 25 26 27 29 30 31 35 37 39 40 41 43 44 48 49 50 52 53 54 56 57 60 62 64 18837 65 0 0 f 18838 65 0 0 2 3 5 6 12 13 16 17 19 20 21 23 25 27 28 29 31 32 34 37 38 42 43 47 49 50 52 56 57 59 61 62 18839 65 0 0 0 1 2 3 4 5 6 8 9 10 12 13 14 16 17 19 20 21 22 23 24 25 26 27 28 29 30 31 32 34 37 38 40 41 42 43 45 47 49 50 52 54 56 57 59 61 62 63 64 18840 65 0 1 e 18841 65 0 1 e 18842 65 0 1 e 18843 65 0 1 f 18844 65 0 1 e 18845 65 0 1 0 3 5 6 7 8 11 12 18 19 22 23 24 25 27 29 30 31 33 34 36 37 41 43 47 48 52 55 58 63 18846 65 0 1 f 18847 65 0 1 f 18848 65 0 1 f 18849 65 0 1 f 18850 65 0 1 f 18851 65 0 1 f 18852 65 0 1 0 1 2 3 5 8 9 10 11 14 15 17 22 23 30 34 35 43 47 49 50 51 53 54 55 56 57 58 61 63 18853 65 0 1 0 1 2 3 5 8 9 10 11 14 15 17 22 23 30 34 35 43 47 49 50 51 53 54 55 56 57 58 61 63 18854 65 0 1 1 2 3 5 6 9 10 13 14 16 18 25 26 29 31 32 35 42 45 46 47 52 53 54 56 58 59 62 63 18855 65 0 1 f 18856 65 0 1 1 2 3 6 7 11 15 16 17 18 19 23 24 30 35 36 38 39 40 41 42 43 46 47 48 50 52 55 56 57 58 59 60 61 18857 65 0 1 0 1 2 3 4 5 6 7 8 9 10 11 13 15 16 17 18 19 22 23 24 25 26 30 31 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 54 55 56 57 58 59 60 61 64 18858 65 0 1 e 18859 65 0 1 e 18860 65 0 1 e 18861 65 0 1 f 18862 65 0 1 e 18863 65 0 1 3 5 7 8 10 11 16 19 22 26 27 30 31 32 34 35 38 39 40 41 42 44 47 48 49 50 53 54 56 60 61 18864 65 0 1 f 18865 65 0 1 f 18866 65 0 1 f 18867 65 0 1 f 18868 65 0 1 f 18869 65 0 1 f 18870 65 0 1 2 3 4 5 8 9 10 11 13 16 17 19 21 24 25 29 30 31 33 36 37 40 46 47 49 50 51 52 55 56 57 58 60 61 64 18871 65 0 1 2 3 4 5 8 9 10 11 13 16 17 19 21 24 25 29 30 31 33 36 37 40 46 47 49 50 51 52 55 56 57 58 60 61 64 18872 65 0 1 0 1 3 5 6 9 10 11 12 13 15 16 19 20 22 23 26 28 30 32 37 38 39 40 43 45 47 48 49 50 51 53 58 61 62 18873 65 0 1 f 18874 65 0 1 0 1 2 3 6 7 8 9 11 14 20 21 22 24 25 26 28 30 31 32 34 36 37 39 41 42 43 44 46 48 51 57 58 59 62 64 18875 65 0 1 0 1 2 3 5 6 7 8 9 10 11 14 15 16 19 20 21 22 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 46 47 48 49 50 51 52 57 58 59 62 63 64 18876 65 0 1 e 18877 65 0 1 e 18878 65 0 1 e 18879 65 0 1 f 18880 65 0 1 e 18881 65 0 1 0 1 4 5 7 8 9 14 17 18 22 26 27 29 30 32 35 37 38 41 43 46 48 49 50 53 54 55 59 63 64 18882 65 0 1 f 18883 65 0 1 f 18884 65 0 1 f 18885 65 0 1 f 18886 65 0 1 f 18887 65 0 1 f 18888 65 0 1 2 3 4 6 7 8 12 17 18 19 25 26 31 36 39 40 41 43 44 45 48 49 51 53 55 56 58 59 62 63 64 18889 65 0 1 2 3 4 6 7 8 12 17 18 19 25 26 31 36 39 40 41 43 44 45 48 49 51 53 55 56 58 59 62 63 64 18890 65 0 1 2 5 9 14 16 17 26 27 28 29 30 33 34 35 36 37 38 40 44 49 50 51 61 62 64 18891 65 0 1 f 18892 65 0 1 5 9 11 13 16 17 19 21 25 26 28 30 34 35 40 47 49 50 51 52 57 63 64 18893 65 0 1 4 5 8 9 11 13 14 16 17 19 20 21 23 24 25 26 28 29 30 33 34 35 40 41 42 45 46 47 48 49 50 51 52 54 57 58 60 62 63 64 18894 65 0 1 e 18895 65 0 1 e 18896 65 0 1 e 18897 65 0 1 f 18898 65 0 1 e 18899 65 0 1 0 1 2 6 10 12 13 14 15 16 17 21 24 25 28 29 30 31 32 35 36 39 41 44 48 49 50 52 54 55 64 18900 65 0 1 f 18901 65 0 1 f 18902 65 0 1 f 18903 65 0 1 f 18904 65 0 1 f 18905 65 0 1 f 18906 65 0 1 6 7 8 10 11 12 14 17 18 19 21 23 24 26 27 29 31 33 35 36 39 42 45 46 47 49 50 51 53 54 58 59 62 64 18907 65 0 1 6 7 8 10 11 12 14 17 18 19 21 23 24 26 27 29 31 33 35 36 39 42 45 46 47 49 50 51 53 54 58 59 62 64 18908 65 0 1 0 2 4 5 6 7 8 12 14 15 17 20 27 28 29 30 31 33 35 36 37 38 42 44 45 46 48 51 52 53 54 58 61 63 18909 65 0 1 f 18910 65 0 1 1 4 5 6 8 9 11 12 14 16 18 19 23 27 28 32 33 34 35 38 42 44 45 46 47 49 50 51 52 53 54 61 18911 65 0 1 1 2 3 4 5 6 8 9 11 12 13 14 16 17 18 19 20 23 24 27 28 29 30 32 33 34 35 38 40 42 44 45 46 47 48 49 50 51 52 53 54 57 58 60 61 62 64 18912 65 1 0 e 18913 65 1 0 e 18914 65 1 0 e 18915 65 1 0 f 18916 65 1 0 e 18917 65 1 0 0 1 2 3 4 6 7 8 11 16 17 18 19 21 24 25 28 29 36 39 40 44 45 47 48 50 54 55 59 61 63 64 18918 65 1 0 f 18919 65 1 0 f 18920 65 1 0 f 18921 65 1 0 f 18922 65 1 0 f 18923 65 1 0 f 18924 65 1 0 1 4 8 10 11 12 13 14 15 16 17 18 23 27 29 30 31 33 40 45 47 48 52 54 56 58 59 60 61 62 64 18925 65 1 0 1 4 8 10 11 12 13 14 15 16 17 18 23 27 29 30 31 33 40 45 47 48 52 54 56 58 59 60 61 62 64 18926 65 1 0 0 1 7 8 9 10 11 13 14 15 17 19 20 21 24 29 34 35 36 37 39 40 43 46 47 52 53 55 57 59 62 63 64 18927 65 1 0 f 18928 65 1 0 0 1 2 3 5 7 13 14 17 22 25 26 27 28 29 30 33 35 36 37 39 41 44 46 50 51 52 53 54 57 62 63 18929 65 1 0 0 1 2 3 5 6 7 10 11 13 14 15 16 17 18 20 21 22 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 41 42 43 44 45 46 48 50 51 52 53 54 55 57 60 61 62 63 64 18930 65 1 0 e 18931 65 1 0 e 18932 65 1 0 e 18933 65 1 0 f 18934 65 1 0 e 18935 65 1 0 0 1 3 4 5 6 8 9 11 13 15 16 17 19 20 22 23 26 29 33 38 40 41 42 44 49 55 59 63 18936 65 1 0 f 18937 65 1 0 f 18938 65 1 0 f 18939 65 1 0 f 18940 65 1 0 f 18941 65 1 0 f 18942 65 1 0 7 9 11 12 13 15 18 21 22 24 26 27 29 30 31 39 42 46 47 49 51 52 53 55 58 59 62 63 64 18943 65 1 0 7 9 11 12 13 15 18 21 22 24 26 27 29 30 31 39 42 46 47 49 51 52 53 55 58 59 62 63 64 18944 65 1 0 0 6 7 8 14 15 17 18 22 23 25 27 28 29 31 33 35 36 38 39 43 45 46 47 48 51 52 54 57 58 60 62 18945 65 1 0 f 18946 65 1 0 1 4 6 7 9 15 16 18 20 22 23 26 27 30 34 35 37 38 39 40 44 45 47 48 51 54 55 56 57 59 64 18947 65 1 0 1 4 6 7 8 9 10 12 13 15 16 18 19 20 22 23 24 25 26 27 30 31 32 34 35 37 38 39 40 42 43 44 45 46 47 48 50 51 54 55 56 57 59 60 64 18948 65 1 0 e 18949 65 1 0 e 18950 65 1 0 e 18951 65 1 0 f 18952 65 1 0 e 18953 65 1 0 1 3 4 6 9 15 16 22 23 24 29 31 32 34 35 36 37 38 40 42 44 45 46 47 51 52 53 55 57 59 60 62 63 64 18954 65 1 0 f 18955 65 1 0 f 18956 65 1 0 f 18957 65 1 0 f 18958 65 1 0 f 18959 65 1 0 f 18960 65 1 0 0 4 5 10 16 19 22 23 24 26 29 30 31 36 37 43 44 45 46 47 50 51 52 53 55 58 60 61 18961 65 1 0 0 4 5 10 16 19 22 23 24 26 29 30 31 36 37 43 44 45 46 47 50 51 52 53 55 58 60 61 18962 65 1 0 0 4 6 8 11 15 16 18 19 20 21 22 23 24 26 27 28 30 31 32 35 36 37 39 41 42 43 44 46 47 49 50 52 53 62 18963 65 1 0 f 18964 65 1 0 1 5 6 7 8 9 10 11 12 13 15 16 17 20 21 22 25 26 28 29 30 32 39 40 42 43 47 49 52 58 61 64 18965 65 1 0 0 1 4 5 6 7 8 9 10 11 12 13 14 15 16 17 19 20 21 22 23 25 26 28 29 30 31 32 35 36 38 39 40 41 42 43 45 47 48 49 50 51 52 54 56 57 58 59 61 62 64 18966 65 1 0 e 18967 65 1 0 e 18968 65 1 0 e 18969 65 1 0 f 18970 65 1 0 e 18971 65 1 0 0 2 4 5 6 7 8 9 20 23 24 25 27 28 29 30 31 33 36 39 43 44 45 47 48 51 52 53 54 55 56 58 61 63 64 18972 65 1 0 f 18973 65 1 0 f 18974 65 1 0 f 18975 65 1 0 f 18976 65 1 0 f 18977 65 1 0 f 18978 65 1 0 0 5 6 9 11 12 13 15 16 17 18 20 21 22 23 24 28 30 31 33 35 36 41 43 46 49 56 57 58 59 60 62 18979 65 1 0 0 5 6 9 11 12 13 15 16 17 18 20 21 22 23 24 28 30 31 33 35 36 41 43 46 49 56 57 58 59 60 62 18980 65 1 0 4 5 6 8 9 10 12 14 16 18 19 22 24 29 30 34 35 37 42 44 45 46 48 49 52 54 55 56 57 59 60 63 64 18981 65 1 0 f 18982 65 1 0 1 6 7 9 10 11 12 14 16 19 22 24 25 26 29 31 32 33 34 37 40 46 48 52 53 55 56 59 61 62 64 18983 65 1 0 0 1 2 6 7 8 9 10 11 12 14 16 17 19 22 23 24 25 26 27 29 31 32 33 34 36 37 38 39 40 44 45 46 48 49 51 52 53 54 55 56 57 59 60 61 62 64 18984 65 1 1 e 18985 65 1 1 e 18986 65 1 1 e 18987 65 1 1 f 18988 65 1 1 e 18989 65 1 1 0 1 3 4 7 8 10 11 12 14 15 17 18 24 25 27 29 33 40 41 43 46 47 48 50 52 54 55 58 59 60 18990 65 1 1 f 18991 65 1 1 f 18992 65 1 1 f 18993 65 1 1 f 18994 65 1 1 f 18995 65 1 1 f 18996 65 1 1 1 2 3 5 6 7 9 11 13 14 16 17 18 19 20 21 22 23 24 28 39 43 47 50 56 57 58 59 62 64 18997 65 1 1 1 2 3 5 6 7 9 11 13 14 16 17 18 19 20 21 22 23 24 28 39 43 47 50 56 57 58 59 62 64 18998 65 1 1 1 5 6 7 10 11 12 13 15 16 17 22 25 26 28 31 39 40 42 47 49 51 56 58 59 62 63 64 18999 65 1 1 f 19000 65 1 1 7 9 10 11 13 15 20 21 23 24 27 28 30 33 34 35 37 38 40 41 43 44 46 47 48 52 53 55 57 58 63 19001 65 1 1 1 2 6 7 9 10 11 12 13 14 15 20 21 22 23 24 25 26 27 28 29 30 31 33 34 35 36 37 38 40 41 43 44 45 46 47 48 51 52 53 54 55 56 57 58 63 64 19002 65 1 1 e 19003 65 1 1 e 19004 65 1 1 e 19005 65 1 1 f 19006 65 1 1 e 19007 65 1 1 1 5 8 10 11 15 16 19 20 21 22 23 31 33 34 38 41 43 45 46 47 48 50 51 54 56 57 58 62 64 19008 65 1 1 f 19009 65 1 1 f 19010 65 1 1 f 19011 65 1 1 f 19012 65 1 1 f 19013 65 1 1 f 19014 65 1 1 0 3 4 5 6 9 10 11 12 14 16 17 18 20 22 24 25 27 29 30 31 34 36 37 38 40 41 46 47 52 55 57 58 60 64 19015 65 1 1 0 3 4 5 6 9 10 11 12 14 16 17 18 20 22 24 25 27 29 30 31 34 36 37 38 40 41 46 47 52 55 57 58 60 64 19016 65 1 1 1 2 4 5 7 9 10 13 14 15 17 18 22 26 27 28 32 34 35 37 40 42 45 47 48 49 53 55 59 60 61 63 19017 65 1 1 f 19018 65 1 1 0 3 4 5 6 8 9 10 11 13 16 17 18 19 23 24 27 32 33 35 36 39 44 45 46 47 48 50 51 52 54 55 58 59 64 19019 65 1 1 0 1 2 3 4 5 6 8 9 10 11 12 13 14 16 17 18 19 23 24 27 28 31 32 33 34 35 36 39 41 42 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 63 64 19020 65 1 1 e 19021 65 1 1 e 19022 65 1 1 e 19023 65 1 1 f 19024 65 1 1 e 19025 65 1 1 3 4 5 8 9 10 15 16 18 19 20 22 24 26 28 30 32 33 35 36 37 39 40 41 42 43 46 48 49 53 54 57 62 19026 65 1 1 f 19027 65 1 1 f 19028 65 1 1 f 19029 65 1 1 f 19030 65 1 1 f 19031 65 1 1 f 19032 65 1 1 0 1 3 6 8 9 10 13 14 19 20 22 24 26 27 28 31 34 36 38 41 42 43 44 45 49 52 54 55 56 57 58 59 61 62 19033 65 1 1 0 1 3 6 8 9 10 13 14 19 20 22 24 26 27 28 31 34 36 38 41 42 43 44 45 49 52 54 55 56 57 58 59 61 62 19034 65 1 1 0 1 4 5 6 7 8 9 10 11 14 15 16 18 20 21 23 26 30 36 39 40 44 47 48 51 52 53 58 59 60 61 19035 65 1 1 f 19036 65 1 1 0 1 3 5 6 7 10 11 13 14 15 18 20 22 25 29 31 32 33 34 36 37 43 45 47 54 55 58 59 62 19037 65 1 1 0 1 2 3 5 6 7 9 10 11 13 14 15 16 18 20 21 22 23 24 25 29 31 32 33 34 36 37 40 41 42 43 45 47 50 51 53 54 55 56 58 59 61 62 19038 65 1 1 e 19039 65 1 1 e 19040 65 1 1 e 19041 65 1 1 f 19042 65 1 1 e 19043 65 1 1 1 2 8 10 11 12 14 17 22 23 24 26 28 30 32 33 34 36 37 39 42 43 45 47 49 50 51 53 54 55 57 59 60 63 64 19044 65 1 1 f 19045 65 1 1 f 19046 65 1 1 f 19047 65 1 1 f 19048 65 1 1 f 19049 65 1 1 f 19050 65 1 1 0 1 2 3 5 9 10 11 12 16 17 22 23 24 28 29 30 31 32 33 34 36 37 38 40 41 43 44 45 47 48 49 54 56 19051 65 1 1 0 1 2 3 5 9 10 11 12 16 17 22 23 24 28 29 30 31 32 33 34 36 37 38 40 41 43 44 45 47 48 49 54 56 19052 65 1 1 0 1 3 4 5 6 7 9 10 13 16 18 22 23 24 28 29 30 31 32 34 35 37 38 39 40 46 48 49 52 55 56 57 58 59 60 61 63 64 19053 65 1 1 f 19054 65 1 1 1 3 4 5 6 9 11 12 13 14 19 20 22 23 26 27 28 29 30 32 37 38 40 43 44 45 49 50 51 52 53 54 63 19055 65 1 1 0 1 2 3 4 5 6 9 11 12 13 14 16 17 19 20 21 22 23 24 25 26 27 28 29 30 32 34 35 36 37 38 40 41 42 43 44 45 49 50 51 52 53 54 55 56 57 58 61 63 19056 211 0 0 e 19057 211 0 0 e 19058 211 0 0 e 19059 211 0 0 f 19060 211 0 0 e 19061 211 0 0 1 2 8 12 13 14 15 16 18 28 34 35 36 39 40 41 43 45 46 50 51 52 53 54 58 60 62 64 65 68 69 71 72 79 80 82 83 85 87 89 94 95 96 99 101 102 103 107 109 110 112 114 118 122 128 129 131 132 134 135 138 139 140 143 144 150 151 155 156 157 159 160 161 162 165 167 168 170 171 172 173 174 175 178 179 181 183 185 186 190 193 194 195 206 208 209 19062 211 0 0 f 19063 211 0 0 f 19064 211 0 0 f 19065 211 0 0 f 19066 211 0 0 f 19067 211 0 0 f 19068 211 0 0 3 6 8 9 10 13 15 21 23 25 28 32 33 36 37 38 39 40 41 42 43 46 47 48 51 54 55 57 61 62 64 65 67 68 71 72 74 76 77 79 81 82 83 86 90 91 95 97 98 100 103 104 105 107 108 109 111 112 114 115 116 120 123 124 126 129 130 132 133 135 136 137 139 140 141 142 147 148 149 151 154 155 156 157 161 164 165 167 169 170 172 174 175 176 178 179 182 184 187 189 190 191 192 195 198 199 202 203 204 205 206 207 208 209 210 19069 211 0 0 3 6 8 9 10 13 15 21 23 25 28 32 33 36 37 38 39 40 41 42 43 46 47 48 51 54 55 57 61 62 64 65 67 68 71 72 74 76 77 79 81 82 83 86 90 91 95 97 98 100 103 104 105 107 108 109 111 112 114 115 116 120 123 124 126 129 130 132 133 135 136 137 139 140 141 142 147 148 149 151 154 155 156 157 161 164 165 167 169 170 172 174 175 176 178 179 182 184 187 189 190 191 192 195 198 199 202 203 204 205 206 207 208 209 210 19070 211 0 0 2 3 4 7 9 10 12 17 21 24 25 27 28 30 34 36 41 43 45 47 48 49 50 57 58 60 61 66 67 68 71 73 74 76 79 82 83 86 87 89 90 92 94 95 96 97 98 99 100 102 104 105 106 107 109 115 116 123 124 126 127 128 129 130 131 137 138 140 142 144 146 147 151 152 153 154 155 156 157 158 159 160 161 162 163 170 172 173 175 178 179 180 181 183 184 186 187 188 189 190 191 192 193 194 195 196 197 203 205 206 207 19071 211 0 0 f 19072 211 0 0 2 7 10 11 14 17 18 19 20 23 24 26 28 30 32 33 34 35 38 40 41 43 47 48 49 51 53 54 55 56 57 59 60 62 63 65 66 67 68 69 71 73 74 75 76 77 79 80 81 82 84 85 87 88 89 91 95 100 101 102 105 108 109 111 112 114 120 121 122 126 128 130 131 133 135 141 142 143 145 147 149 150 153 155 160 161 162 164 166 168 171 172 174 178 179 181 182 183 184 188 189 190 191 192 193 196 198 199 202 204 205 206 209 210 19073 211 0 0 1 2 4 6 7 10 11 13 14 15 16 17 18 19 20 21 23 24 25 26 27 28 30 31 32 33 34 35 37 38 39 40 41 43 44 45 47 48 49 51 53 54 55 56 57 58 59 60 62 63 65 66 67 68 69 71 73 74 75 76 77 79 80 81 82 84 85 87 88 89 91 92 93 95 100 101 102 105 106 107 108 109 111 112 114 116 118 120 121 122 124 126 128 129 130 131 133 134 135 136 137 139 140 141 142 143 144 145 146 147 149 150 151 152 153 154 155 156 159 160 161 162 164 166 168 169 171 172 173 174 176 177 178 179 180 181 182 183 184 185 186 188 189 190 191 192 193 195 196 197 198 199 201 202 203 204 205 206 208 209 210 19074 211 0 0 e 19075 211 0 0 e 19076 211 0 0 e 19077 211 0 0 f 19078 211 0 0 e 19079 211 0 0 2 4 5 6 8 9 10 11 12 15 16 17 18 21 22 26 29 30 31 32 33 34 35 37 40 42 43 44 46 49 50 51 55 56 60 61 62 63 64 65 66 68 71 72 74 76 77 78 79 81 82 83 85 86 89 92 95 98 100 104 106 107 109 110 111 112 114 115 119 121 122 127 132 133 134 135 137 140 144 145 149 150 151 153 155 157 159 160 161 162 163 165 167 169 174 175 179 180 182 189 194 195 196 198 201 202 203 206 207 208 209 210 19080 211 0 0 f 19081 211 0 0 f 19082 211 0 0 f 19083 211 0 0 f 19084 211 0 0 f 19085 211 0 0 f 19086 211 0 0 2 3 5 7 8 9 10 11 12 13 17 19 21 24 25 28 29 33 35 36 39 45 48 49 51 52 55 59 63 68 69 70 74 75 79 82 84 86 88 92 94 96 99 103 104 106 109 111 114 117 118 121 123 128 129 133 139 141 143 144 149 150 151 152 154 156 157 158 159 160 163 165 167 168 169 173 174 178 179 181 182 184 186 187 189 193 195 201 202 203 204 205 208 19087 211 0 0 2 3 5 7 8 9 10 11 12 13 17 19 21 24 25 28 29 33 35 36 39 45 48 49 51 52 55 59 63 68 69 70 74 75 79 82 84 86 88 92 94 96 99 103 104 106 109 111 114 117 118 121 123 128 129 133 139 141 143 144 149 150 151 152 154 156 157 158 159 160 163 165 167 168 169 173 174 178 179 181 182 184 186 187 189 193 195 201 202 203 204 205 208 19088 211 0 0 1 4 5 7 9 13 14 15 19 22 27 29 31 32 33 35 39 41 43 44 45 46 51 52 53 54 59 61 62 63 65 66 67 70 71 72 73 74 75 76 78 80 82 85 86 87 89 90 91 92 94 99 100 101 102 103 104 105 107 111 112 115 118 119 123 124 128 137 141 143 144 145 146 149 150 156 157 158 162 163 164 167 168 169 173 176 178 180 181 182 187 188 194 196 199 200 201 202 204 206 207 209 210 19089 211 0 0 f 19090 211 0 0 2 3 4 5 7 8 12 13 23 24 26 27 28 29 30 35 38 40 41 42 43 44 45 49 51 52 53 54 55 57 58 60 62 63 64 65 66 69 70 72 73 76 77 78 84 91 92 94 95 97 99 100 104 105 106 107 109 110 111 112 115 117 119 121 122 123 124 125 126 128 129 130 134 136 137 138 140 141 143 145 146 147 148 149 152 155 156 157 158 159 160 161 170 171 174 175 181 185 186 188 189 190 191 192 194 199 200 202 207 208 209 210 19091 211 0 0 1 2 3 4 5 6 7 8 9 11 12 13 14 15 16 19 21 23 24 25 26 27 28 29 30 35 36 37 38 39 40 41 42 43 44 45 49 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 69 70 72 73 74 76 77 78 82 83 84 86 87 88 89 91 92 93 94 95 97 98 99 100 101 102 104 105 106 107 108 109 110 111 112 115 116 117 118 119 121 122 123 124 125 126 128 129 130 133 134 136 137 138 139 140 141 142 143 144 145 146 147 148 149 151 152 154 155 156 157 158 159 160 161 165 166 170 171 173 174 175 178 179 181 184 185 186 188 189 190 191 192 194 197 199 200 202 203 205 206 207 208 209 210 19092 211 0 0 e 19093 211 0 0 e 19094 211 0 0 e 19095 211 0 0 f 19096 211 0 0 e 19097 211 0 0 2 3 7 8 9 13 15 20 21 22 25 27 28 31 32 34 36 39 40 41 42 47 50 53 54 56 60 61 63 69 74 75 78 79 80 81 83 84 85 89 90 91 92 94 96 97 98 100 102 105 107 108 109 110 111 112 114 118 121 126 129 131 132 136 139 142 144 146 147 148 149 151 152 153 157 160 161 163 165 169 171 173 174 175 177 178 187 189 192 193 194 199 200 201 204 19098 211 0 0 f 19099 211 0 0 f 19100 211 0 0 f 19101 211 0 0 f 19102 211 0 0 f 19103 211 0 0 f 19104 211 0 0 1 3 4 5 8 9 14 17 18 19 20 21 22 23 25 26 27 28 31 32 34 35 40 41 42 45 46 47 48 49 50 52 53 56 64 70 74 77 79 80 81 83 84 85 90 91 92 95 96 100 102 104 105 106 107 108 109 110 111 112 114 115 117 119 124 125 129 130 135 138 139 141 142 146 147 150 151 156 157 158 160 164 165 173 174 175 177 178 179 180 182 184 186 187 190 192 194 195 197 199 205 207 208 209 210 19105 211 0 0 1 3 4 5 8 9 14 17 18 19 20 21 22 23 25 26 27 28 31 32 34 35 40 41 42 45 46 47 48 49 50 52 53 56 64 70 74 77 79 80 81 83 84 85 90 91 92 95 96 100 102 104 105 106 107 108 109 110 111 112 114 115 117 119 124 125 129 130 135 138 139 141 142 146 147 150 151 156 157 158 160 164 165 173 174 175 177 178 179 180 182 184 186 187 190 192 194 195 197 199 205 207 208 209 210 19106 211 0 0 0 2 6 7 8 10 16 18 19 22 23 24 25 27 28 30 32 33 34 35 37 38 41 42 43 45 49 51 54 55 57 58 59 63 66 68 69 70 72 74 78 79 87 90 92 95 102 104 105 106 108 109 110 114 115 116 119 125 127 129 131 132 135 136 138 139 141 143 145 149 151 153 154 155 156 158 160 163 165 166 169 171 172 173 176 177 179 180 181 182 185 186 188 189 191 192 193 194 197 198 199 205 207 208 209 210 19107 211 0 0 f 19108 211 0 0 0 1 2 9 10 12 13 19 20 21 23 33 34 37 38 39 40 41 43 44 45 47 49 50 51 52 54 56 60 61 62 64 65 66 68 69 71 72 73 74 76 79 82 84 85 87 89 92 94 98 99 101 102 103 104 108 109 111 117 119 120 121 126 127 128 129 130 131 132 134 136 138 139 142 143 144 145 148 149 152 153 154 157 159 160 161 162 165 166 169 171 173 174 176 178 179 186 187 190 191 193 195 196 203 208 19109 211 0 0 0 1 2 3 5 6 8 9 10 11 12 13 15 17 19 20 21 22 23 26 27 28 30 33 34 35 37 38 39 40 41 43 44 45 46 47 48 49 50 51 52 54 56 57 58 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 76 78 79 81 82 84 85 86 87 89 91 92 93 94 96 98 99 101 102 103 104 105 106 108 109 110 111 113 114 115 116 117 119 120 121 122 124 126 127 128 129 130 131 132 134 135 136 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 157 159 160 161 162 165 166 168 169 171 173 174 176 177 178 179 181 183 184 186 187 188 190 191 193 195 196 197 199 200 201 203 204 208 19110 211 0 0 e 19111 211 0 0 e 19112 211 0 0 e 19113 211 0 0 f 19114 211 0 0 e 19115 211 0 0 0 2 3 7 9 10 13 14 18 21 22 23 24 28 29 31 35 37 38 39 40 42 43 45 47 49 50 51 52 53 56 57 58 59 63 65 67 68 70 71 72 73 74 75 77 78 79 80 81 83 85 88 89 93 94 95 96 98 99 100 107 112 113 114 116 118 119 122 124 125 127 129 133 134 135 141 142 144 145 146 147 148 149 150 153 154 156 157 158 160 167 169 171 172 173 175 176 178 179 182 183 185 186 187 188 189 191 193 195 196 198 201 203 204 205 206 207 19116 211 0 0 f 19117 211 0 0 f 19118 211 0 0 f 19119 211 0 0 f 19120 211 0 0 f 19121 211 0 0 f 19122 211 0 0 0 1 2 4 6 7 10 12 17 23 27 29 30 32 33 35 40 42 43 44 48 49 50 52 54 56 58 59 61 64 65 67 69 74 80 82 83 85 91 95 98 102 104 105 106 108 110 111 114 115 123 124 126 128 129 130 134 135 140 141 147 151 152 154 155 156 159 161 165 167 169 170 172 177 178 179 182 184 185 187 190 193 194 195 196 198 201 202 203 204 208 19123 211 0 0 0 1 2 4 6 7 10 12 17 23 27 29 30 32 33 35 40 42 43 44 48 49 50 52 54 56 58 59 61 64 65 67 69 74 80 82 83 85 91 95 98 102 104 105 106 108 110 111 114 115 123 124 126 128 129 130 134 135 140 141 147 151 152 154 155 156 159 161 165 167 169 170 172 177 178 179 182 184 185 187 190 193 194 195 196 198 201 202 203 204 208 19124 211 0 0 6 7 10 11 12 13 14 15 16 20 22 23 26 27 32 33 34 35 36 37 38 40 41 43 48 49 51 56 59 60 70 74 75 76 78 79 83 84 85 87 90 92 94 96 99 100 103 106 108 109 110 114 118 119 120 121 123 124 125 126 127 130 131 132 133 134 137 139 143 144 146 149 152 153 154 155 156 157 159 162 165 168 169 173 174 176 177 178 180 182 183 185 187 188 189 190 193 196 197 198 199 200 202 205 206 208 209 210 19125 211 0 0 f 19126 211 0 0 0 3 4 7 8 10 13 14 15 16 17 18 20 24 27 30 32 40 41 42 44 50 51 52 56 60 62 66 67 68 74 75 76 77 79 82 83 84 87 88 89 94 95 96 97 98 102 105 108 109 111 114 121 122 123 125 128 130 131 133 135 137 140 144 146 148 154 155 156 159 160 161 162 164 172 173 174 175 176 177 178 179 182 183 184 185 186 187 189 192 195 197 198 199 202 205 206 209 210 19127 211 0 0 0 2 3 4 5 7 8 10 11 13 14 15 16 17 18 19 20 22 24 25 27 30 31 32 33 36 37 40 41 42 44 47 50 51 52 53 56 57 59 60 62 66 67 68 69 70 71 74 75 76 77 78 79 80 82 83 84 86 87 88 89 92 94 95 96 97 98 100 101 102 105 107 108 109 111 114 115 120 121 122 123 125 127 128 130 131 133 135 137 138 139 140 141 142 143 144 146 147 148 151 153 154 155 156 159 160 161 162 164 165 166 167 169 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 194 195 196 197 198 199 200 201 202 204 205 206 209 210 19128 211 0 1 e 19129 211 0 1 e 19130 211 0 1 e 19131 211 0 1 f 19132 211 0 1 e 19133 211 0 1 0 2 3 15 19 20 21 22 24 26 28 31 33 34 35 39 43 44 46 48 51 53 58 61 62 63 64 65 66 68 69 73 78 79 80 82 83 85 87 89 90 91 92 93 94 95 96 99 101 103 104 105 107 110 111 112 113 114 115 116 118 119 121 122 124 128 129 132 137 147 148 149 150 151 152 153 158 162 163 164 167 169 171 173 174 175 178 181 183 187 188 190 192 193 196 197 200 201 202 204 205 206 209 210 19134 211 0 1 f 19135 211 0 1 f 19136 211 0 1 f 19137 211 0 1 f 19138 211 0 1 f 19139 211 0 1 f 19140 211 0 1 0 3 5 6 7 9 10 11 12 13 14 16 17 18 19 21 22 23 24 27 28 30 31 32 34 37 38 40 41 43 44 51 53 54 55 57 58 61 65 67 68 73 78 79 80 81 82 83 84 86 89 90 91 92 97 99 103 105 106 109 111 112 113 114 115 117 119 120 122 123 127 128 129 130 134 136 137 138 140 147 150 152 153 156 157 158 159 161 163 164 167 171 175 176 177 179 183 184 187 190 191 192 195 197 198 199 200 202 204 208 209 19141 211 0 1 0 3 5 6 7 9 10 11 12 13 14 16 17 18 19 21 22 23 24 27 28 30 31 32 34 37 38 40 41 43 44 51 53 54 55 57 58 61 65 67 68 73 78 79 80 81 82 83 84 86 89 90 91 92 97 99 103 105 106 109 111 112 113 114 115 117 119 120 122 123 127 128 129 130 134 136 137 138 140 147 150 152 153 156 157 158 159 161 163 164 167 171 175 176 177 179 183 184 187 190 191 192 195 197 198 199 200 202 204 208 209 19142 211 0 1 1 2 4 7 9 10 12 14 15 16 18 21 23 24 29 30 31 32 34 35 36 38 41 43 46 47 48 53 59 64 68 70 75 77 78 83 84 85 89 90 91 92 95 96 97 99 101 103 107 110 111 114 118 120 121 123 126 129 132 136 137 138 140 141 146 147 148 149 151 154 155 156 158 162 164 165 166 167 168 169 171 172 173 178 179 180 182 184 187 188 190 193 194 196 197 198 204 208 19143 211 0 1 f 19144 211 0 1 0 1 2 9 11 13 14 16 17 21 24 25 26 27 28 34 35 36 38 40 46 47 48 52 53 54 55 56 57 58 61 62 65 67 68 71 75 76 77 78 79 81 82 84 85 86 89 90 91 92 93 95 96 98 99 100 102 104 105 106 108 109 112 116 118 121 123 124 126 127 128 129 131 134 135 137 140 141 144 145 146 147 149 151 152 153 154 155 157 158 160 162 163 165 166 167 168 170 171 179 181 182 187 189 190 191 193 194 195 196 197 199 202 203 204 205 206 19145 211 0 1 0 1 2 3 5 6 8 9 11 13 14 15 16 17 21 22 24 25 26 27 28 30 31 34 35 36 38 39 40 42 43 44 45 46 47 48 52 53 54 55 56 57 58 61 62 63 64 65 66 67 68 70 71 72 73 75 76 77 78 79 81 82 83 84 85 86 89 90 91 92 93 94 95 96 97 98 99 100 102 103 104 105 106 108 109 111 112 113 114 116 117 118 121 123 124 125 126 127 128 129 131 133 134 135 137 139 140 141 142 143 144 145 146 147 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 170 171 176 177 179 180 181 182 183 185 186 187 188 189 190 191 193 194 195 196 197 198 199 200 201 202 203 204 205 206 209 19146 211 0 1 e 19147 211 0 1 e 19148 211 0 1 e 19149 211 0 1 f 19150 211 0 1 e 19151 211 0 1 7 9 10 12 15 16 18 19 21 24 26 28 29 30 35 37 39 45 48 53 54 56 57 59 60 62 63 66 67 70 71 73 75 76 77 79 82 85 86 90 93 95 97 98 99 101 103 104 105 106 109 111 115 116 117 118 121 122 123 124 125 126 128 129 133 134 137 138 139 140 141 142 145 146 148 149 150 152 154 155 157 161 162 163 165 167 169 170 172 173 176 179 182 184 185 188 189 190 192 199 202 204 206 207 208 19152 211 0 1 f 19153 211 0 1 f 19154 211 0 1 f 19155 211 0 1 f 19156 211 0 1 f 19157 211 0 1 f 19158 211 0 1 1 5 6 7 8 11 12 14 15 17 18 23 24 25 26 28 29 32 34 40 42 43 44 45 51 52 53 54 55 56 57 59 60 62 63 64 65 70 71 72 73 74 75 79 80 81 82 83 84 85 86 88 89 96 98 100 101 103 105 106 107 110 111 112 113 114 115 116 119 123 124 127 128 130 131 134 135 137 138 141 144 146 147 148 152 153 157 167 169 172 173 174 176 177 179 180 181 182 183 187 188 190 192 194 197 198 199 200 203 204 205 207 208 210 19159 211 0 1 1 5 6 7 8 11 12 14 15 17 18 23 24 25 26 28 29 32 34 40 42 43 44 45 51 52 53 54 55 56 57 59 60 62 63 64 65 70 71 72 73 74 75 79 80 81 82 83 84 85 86 88 89 96 98 100 101 103 105 106 107 110 111 112 113 114 115 116 119 123 124 127 128 130 131 134 135 137 138 141 144 146 147 148 152 153 157 167 169 172 173 174 176 177 179 180 181 182 183 187 188 190 192 194 197 198 199 200 203 204 205 207 208 210 19160 211 0 1 0 2 4 5 6 8 12 13 14 17 19 20 23 26 28 31 32 33 36 37 38 39 49 53 54 55 56 57 59 62 65 66 68 69 73 76 77 78 80 83 86 89 91 93 95 96 97 99 100 101 103 104 105 107 108 110 112 116 121 123 124 125 126 127 128 130 133 135 136 137 138 141 142 146 148 150 151 152 154 155 156 159 160 163 165 166 167 168 169 174 175 176 178 179 180 181 182 183 184 187 188 189 190 191 193 194 196 197 201 202 203 206 208 209 19161 211 0 1 f 19162 211 0 1 0 2 6 9 14 15 16 17 24 25 26 28 29 34 35 36 37 40 42 44 45 46 47 51 54 57 59 60 61 63 66 69 70 73 74 77 78 79 80 82 84 85 86 87 88 90 95 96 102 103 104 105 106 109 114 115 116 117 118 119 120 121 125 126 128 130 133 134 136 137 138 140 142 144 145 147 153 154 155 157 160 162 165 166 167 168 169 171 173 174 176 178 182 183 187 189 192 193 194 196 197 200 19163 211 0 1 0 1 2 3 5 6 7 8 9 12 14 15 16 17 21 22 23 24 25 26 27 28 29 32 34 35 36 37 38 40 42 44 45 46 47 50 51 53 54 55 56 57 59 60 61 62 63 65 66 69 70 71 73 74 75 76 77 78 79 80 82 83 84 85 86 87 88 89 90 92 93 94 95 96 97 102 103 104 105 106 109 111 112 113 114 115 116 117 118 119 120 121 122 123 125 126 128 130 131 133 134 135 136 137 138 140 142 144 145 147 148 150 151 153 154 155 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 176 178 181 182 183 184 185 186 187 188 189 190 192 193 194 196 197 198 200 206 209 210 19164 211 0 1 e 19165 211 0 1 e 19166 211 0 1 e 19167 211 0 1 f 19168 211 0 1 e 19169 211 0 1 0 1 2 3 5 6 8 12 14 16 20 21 25 29 32 36 37 38 39 41 42 45 46 48 51 52 53 56 57 58 59 60 61 66 70 71 73 75 76 79 80 81 82 83 84 86 88 89 91 92 93 95 97 99 102 103 106 107 108 110 112 115 116 119 120 121 123 125 126 127 128 129 142 144 145 153 154 155 157 160 161 163 165 167 168 169 170 173 174 175 176 179 180 181 183 186 187 188 191 193 194 202 204 205 207 209 210 19170 211 0 1 f 19171 211 0 1 f 19172 211 0 1 f 19173 211 0 1 f 19174 211 0 1 f 19175 211 0 1 f 19176 211 0 1 0 3 7 9 11 12 13 14 15 17 21 23 26 27 29 30 31 34 35 36 38 42 44 45 46 48 50 52 54 56 57 59 60 62 64 65 68 69 70 73 76 79 80 82 83 85 88 89 91 95 96 97 99 100 103 104 105 107 109 111 112 114 117 118 120 121 123 125 126 128 132 135 137 141 146 147 149 151 152 153 154 155 156 157 159 164 165 166 170 171 175 178 179 182 183 185 186 188 192 195 198 199 200 201 202 204 208 19177 211 0 1 0 3 7 9 11 12 13 14 15 17 21 23 26 27 29 30 31 34 35 36 38 42 44 45 46 48 50 52 54 56 57 59 60 62 64 65 68 69 70 73 76 79 80 82 83 85 88 89 91 95 96 97 99 100 103 104 105 107 109 111 112 114 117 118 120 121 123 125 126 128 132 135 137 141 146 147 149 151 152 153 154 155 156 157 159 164 165 166 170 171 175 178 179 182 183 185 186 188 192 195 198 199 200 201 202 204 208 19178 211 0 1 0 1 2 3 5 6 7 11 12 13 15 16 17 18 19 20 25 26 27 35 36 38 40 41 43 44 47 51 52 53 56 57 62 64 67 68 69 72 75 76 77 80 81 83 84 86 87 90 91 92 93 96 99 104 107 109 112 114 115 116 117 123 128 129 130 134 136 139 140 143 144 147 149 153 155 157 158 160 161 162 163 165 167 168 170 171 172 174 175 178 179 183 185 188 190 195 197 198 201 204 205 19179 211 0 1 f 19180 211 0 1 1 4 6 8 12 13 14 16 17 20 21 24 28 29 30 38 42 44 45 46 47 48 49 51 52 53 54 55 59 63 65 67 68 74 81 82 85 87 89 90 91 93 95 96 97 98 99 100 104 105 106 111 115 117 119 120 122 126 127 128 129 130 131 132 133 135 136 138 140 144 145 146 148 151 152 155 158 160 161 163 164 165 166 167 169 173 174 176 177 178 179 182 183 185 186 187 189 192 193 196 197 200 202 203 205 207 209 210 19181 211 0 1 0 1 3 4 6 7 8 9 11 12 13 14 15 16 17 19 20 21 22 23 24 27 28 29 30 31 36 38 40 42 44 45 46 47 48 49 51 52 53 54 55 56 59 63 65 67 68 70 74 75 76 78 79 80 81 82 85 86 87 89 90 91 92 93 94 95 96 97 98 99 100 102 103 104 105 106 108 111 112 115 117 119 120 122 123 124 126 127 128 129 130 131 132 133 135 136 137 138 139 140 142 144 145 146 148 149 150 151 152 154 155 156 157 158 159 160 161 163 164 165 166 167 168 169 173 174 175 176 177 178 179 180 182 183 184 185 186 187 189 191 192 193 194 195 196 197 200 201 202 203 205 207 209 210 19182 211 0 1 e 19183 211 0 1 e 19184 211 0 1 e 19185 211 0 1 f 19186 211 0 1 e 19187 211 0 1 1 3 5 6 7 9 12 14 15 17 18 19 20 21 24 25 28 29 32 33 34 36 37 41 52 53 54 55 61 62 63 65 71 73 77 78 79 80 83 84 86 90 91 92 93 94 97 98 99 102 103 107 110 118 119 121 122 124 126 129 131 132 134 136 137 138 139 141 143 144 148 154 155 156 157 164 165 166 168 169 173 174 178 179 183 184 185 186 188 189 190 193 194 196 198 199 203 204 19188 211 0 1 f 19189 211 0 1 f 19190 211 0 1 f 19191 211 0 1 f 19192 211 0 1 f 19193 211 0 1 f 19194 211 0 1 0 1 2 6 13 14 15 21 22 26 27 30 36 38 42 43 46 48 49 50 52 56 60 61 62 63 70 71 72 73 74 78 84 85 87 89 92 97 98 99 101 102 105 107 110 111 112 114 115 118 119 123 127 129 130 132 133 134 136 138 139 141 142 145 146 147 149 150 152 156 157 159 160 166 169 171 172 173 176 179 180 183 185 188 189 193 194 195 196 197 205 208 209 19195 211 0 1 0 1 2 6 13 14 15 21 22 26 27 30 36 38 42 43 46 48 49 50 52 56 60 61 62 63 70 71 72 73 74 78 84 85 87 89 92 97 98 99 101 102 105 107 110 111 112 114 115 118 119 123 127 129 130 132 133 134 136 138 139 141 142 145 146 147 149 150 152 156 157 159 160 166 169 171 172 173 176 179 180 183 185 188 189 193 194 195 196 197 205 208 209 19196 211 0 1 0 1 2 3 5 7 10 11 12 13 14 15 16 17 21 22 26 29 30 32 37 38 39 41 42 44 45 49 50 51 55 56 60 61 62 63 66 67 69 71 72 75 76 77 80 81 86 88 90 91 93 95 99 101 102 110 113 115 120 122 123 126 127 128 130 133 134 138 139 140 145 147 149 151 154 155 156 157 158 159 160 161 164 166 172 177 181 183 184 187 192 193 195 196 198 200 202 203 204 207 208 209 19197 211 0 1 f 19198 211 0 1 2 6 8 9 10 11 12 15 17 18 19 21 22 24 25 27 28 32 34 36 44 45 48 49 52 53 55 56 57 59 61 63 64 67 68 69 72 73 74 75 76 77 78 80 82 83 86 92 93 95 96 97 98 99 101 102 104 105 108 110 111 113 114 115 116 118 120 122 123 124 126 127 128 130 133 134 138 141 142 143 145 146 149 150 151 152 154 155 156 158 159 160 161 166 167 171 174 175 176 177 181 185 190 194 195 197 198 199 201 202 205 208 19199 211 0 1 2 3 4 5 6 8 9 10 11 12 14 15 16 17 18 19 20 21 22 24 25 27 28 29 31 32 34 36 37 38 40 41 42 43 44 45 48 49 51 52 53 55 56 57 59 60 61 63 64 65 66 67 68 69 71 72 73 74 75 76 77 78 80 81 82 83 86 87 89 91 92 93 95 96 97 98 99 101 102 103 104 105 106 108 110 111 113 114 115 116 117 118 120 122 123 124 125 126 127 128 130 133 134 136 138 140 141 142 143 144 145 146 149 150 151 152 154 155 156 157 158 159 160 161 162 166 167 171 172 173 174 175 176 177 178 179 180 181 184 185 186 187 190 193 194 195 196 197 198 199 200 201 202 204 205 208 210 19200 211 1 0 e 19201 211 1 0 e 19202 211 1 0 e 19203 211 1 0 f 19204 211 1 0 e 19205 211 1 0 0 1 4 5 7 8 10 12 14 15 17 19 20 21 22 24 25 27 28 29 30 31 32 35 36 37 38 39 44 45 46 48 51 54 55 58 61 63 65 66 71 72 74 75 77 81 83 86 88 89 90 91 92 93 94 95 96 97 102 104 105 108 109 110 112 115 117 120 127 128 129 137 138 141 142 144 145 148 149 150 151 152 153 157 163 164 165 166 167 168 169 173 176 177 178 179 181 182 184 185 186 187 188 189 193 194 196 197 200 202 206 208 209 19206 211 1 0 f 19207 211 1 0 f 19208 211 1 0 f 19209 211 1 0 f 19210 211 1 0 f 19211 211 1 0 f 19212 211 1 0 0 1 4 5 7 8 9 13 14 15 16 18 20 21 23 25 27 28 31 33 37 41 43 46 48 49 50 51 52 53 54 55 56 58 59 60 65 66 67 70 71 72 74 76 77 78 79 80 81 82 84 87 88 92 93 94 96 98 100 101 103 111 112 115 116 117 121 122 124 125 126 127 129 130 131 132 134 137 138 139 142 146 150 151 153 157 159 160 162 166 167 170 171 172 174 176 177 179 182 183 184 185 188 189 191 192 193 197 199 202 204 205 208 209 19213 211 1 0 0 1 4 5 7 8 9 13 14 15 16 18 20 21 23 25 27 28 31 33 37 41 43 46 48 49 50 51 52 53 54 55 56 58 59 60 65 66 67 70 71 72 74 76 77 78 79 80 81 82 84 87 88 92 93 94 96 98 100 101 103 111 112 115 116 117 121 122 124 125 126 127 129 130 131 132 134 137 138 139 142 146 150 151 153 157 159 160 162 166 167 170 171 172 174 176 177 179 182 183 184 185 188 189 191 192 193 197 199 202 204 205 208 209 19214 211 1 0 6 7 10 11 13 15 20 21 23 25 27 28 31 32 33 35 36 37 38 41 43 44 46 48 50 53 55 56 57 58 59 62 64 65 67 68 69 72 76 78 79 80 85 86 88 89 92 93 95 96 97 98 99 100 104 105 106 107 109 113 114 115 117 125 128 132 133 134 136 137 140 141 142 143 145 146 147 149 151 153 155 156 157 161 162 164 165 166 167 168 169 171 172 174 179 182 183 186 187 191 194 197 200 201 205 206 207 209 19215 211 1 0 f 19216 211 1 0 0 3 4 6 7 8 12 13 18 19 20 21 22 25 30 32 33 40 42 43 54 55 59 61 64 65 66 69 70 75 76 77 82 83 84 85 86 87 88 89 90 92 93 94 95 96 99 103 104 106 109 110 117 120 121 122 123 124 126 127 128 130 132 133 138 139 141 143 146 150 156 158 159 160 161 163 164 165 170 172 176 178 182 183 184 186 187 188 189 190 191 192 197 198 199 200 201 203 204 207 208 209 210 19217 211 1 0 0 2 3 4 5 6 7 8 9 12 13 14 17 18 19 20 21 22 23 24 25 26 28 29 30 31 32 33 34 35 37 39 40 41 42 43 44 46 49 50 51 52 54 55 57 58 59 60 61 62 64 65 66 67 68 69 70 71 72 74 75 76 77 80 81 82 83 84 85 86 87 88 89 90 92 93 94 95 96 97 99 100 103 104 106 107 108 109 110 111 115 117 119 120 121 122 123 124 126 127 128 130 131 132 133 136 137 138 139 141 142 143 145 146 149 150 153 155 156 158 159 160 161 163 164 165 168 170 171 172 174 176 178 180 182 183 184 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 203 204 207 208 209 210 19218 211 1 0 e 19219 211 1 0 e 19220 211 1 0 e 19221 211 1 0 f 19222 211 1 0 e 19223 211 1 0 1 2 3 7 8 9 11 13 14 16 17 18 21 22 25 27 29 30 31 33 34 35 36 38 39 41 43 44 47 50 51 53 54 56 61 63 64 67 71 73 77 78 80 81 84 86 88 89 90 91 92 93 94 95 99 101 103 104 105 106 108 109 110 111 112 113 114 115 117 119 120 121 122 123 124 125 128 129 130 132 135 141 142 144 145 146 148 156 157 159 160 163 164 165 166 168 169 170 172 173 175 176 180 182 183 184 187 188 189 190 191 196 198 199 205 207 19224 211 1 0 f 19225 211 1 0 f 19226 211 1 0 f 19227 211 1 0 f 19228 211 1 0 f 19229 211 1 0 f 19230 211 1 0 2 3 4 6 7 8 9 10 12 16 17 25 27 28 31 32 33 34 35 37 40 42 43 44 48 49 50 55 57 59 61 62 63 64 65 66 70 72 74 76 78 79 80 81 82 86 91 94 95 99 100 101 102 105 106 109 110 112 113 118 119 120 122 124 127 128 130 131 133 135 136 139 145 147 150 156 157 159 161 162 163 164 165 166 169 173 174 179 181 182 183 197 198 200 202 204 205 206 208 209 19231 211 1 0 2 3 4 6 7 8 9 10 12 16 17 25 27 28 31 32 33 34 35 37 40 42 43 44 48 49 50 55 57 59 61 62 63 64 65 66 70 72 74 76 78 79 80 81 82 86 91 94 95 99 100 101 102 105 106 109 110 112 113 118 119 120 122 124 127 128 130 131 133 135 136 139 145 147 150 156 157 159 161 162 163 164 165 166 169 173 174 179 181 182 183 197 198 200 202 204 205 206 208 209 19232 211 1 0 1 5 6 7 8 12 13 14 15 16 17 18 20 21 23 24 26 29 30 31 32 33 36 37 39 41 43 45 46 48 49 50 52 55 56 59 60 61 62 63 64 65 66 67 68 72 73 76 78 80 81 82 83 88 89 91 92 93 95 96 99 100 101 103 104 108 110 111 113 115 117 118 120 122 128 129 131 132 136 137 138 139 140 141 144 145 146 148 149 150 151 153 158 161 162 163 173 176 178 179 181 183 185 187 189 190 192 193 197 198 199 202 203 204 207 208 19233 211 1 0 f 19234 211 1 0 2 4 5 8 14 15 16 17 18 19 22 26 27 31 32 34 38 40 42 44 45 47 48 50 52 54 55 56 57 58 59 62 63 64 65 72 74 75 76 78 79 80 81 82 85 87 90 91 92 93 94 95 99 100 101 102 103 104 105 106 107 108 109 110 111 113 115 117 118 119 121 122 127 128 130 133 137 140 141 144 146 149 153 154 155 157 158 161 162 163 165 166 167 168 171 173 174 175 177 180 182 185 187 188 192 193 194 196 197 199 201 202 204 205 207 208 209 19235 211 1 0 2 3 4 5 6 7 8 10 13 14 15 16 17 18 19 22 23 24 26 27 31 32 33 34 38 40 41 42 43 44 45 46 47 48 49 50 52 53 54 55 56 57 58 59 61 62 63 64 65 66 67 69 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 87 90 91 92 93 94 95 98 99 100 101 102 103 104 105 106 107 108 109 110 111 113 115 117 118 119 120 121 122 127 128 130 133 134 137 138 139 140 141 142 144 146 148 149 151 153 154 155 157 158 161 162 163 165 166 167 168 171 173 174 175 177 178 180 182 184 185 187 188 191 192 193 194 196 197 198 199 200 201 202 204 205 206 207 208 209 210 19236 211 1 0 e 19237 211 1 0 e 19238 211 1 0 e 19239 211 1 0 f 19240 211 1 0 e 19241 211 1 0 2 4 5 6 9 10 11 12 13 14 16 17 18 19 20 21 22 23 26 27 28 30 31 32 33 35 36 38 41 45 48 51 53 54 55 58 59 60 61 62 63 64 67 68 70 71 75 77 82 83 85 87 90 92 93 94 95 99 100 102 104 106 107 108 112 114 116 118 120 121 123 127 128 129 130 131 133 136 139 144 147 148 150 155 156 157 159 160 162 164 167 169 170 171 175 177 178 181 182 185 188 189 192 194 195 198 199 200 201 202 207 208 209 210 19242 211 1 0 f 19243 211 1 0 f 19244 211 1 0 f 19245 211 1 0 f 19246 211 1 0 f 19247 211 1 0 f 19248 211 1 0 0 2 3 4 8 9 11 12 13 14 15 16 19 21 24 25 26 27 28 29 31 32 35 36 37 40 41 44 47 48 50 51 55 58 60 62 63 66 70 71 77 84 85 88 91 94 95 96 97 101 103 105 107 109 110 111 116 117 118 119 120 122 124 125 127 128 129 130 132 135 136 137 138 140 141 144 146 147 149 150 152 153 154 155 156 159 160 163 164 165 166 167 168 171 176 186 192 193 195 196 197 199 201 202 203 206 208 19249 211 1 0 0 2 3 4 8 9 11 12 13 14 15 16 19 21 24 25 26 27 28 29 31 32 35 36 37 40 41 44 47 48 50 51 55 58 60 62 63 66 70 71 77 84 85 88 91 94 95 96 97 101 103 105 107 109 110 111 116 117 118 119 120 122 124 125 127 128 129 130 132 135 136 137 138 140 141 144 146 147 149 150 152 153 154 155 156 159 160 163 164 165 166 167 168 171 176 186 192 193 195 196 197 199 201 202 203 206 208 19250 211 1 0 0 2 4 7 8 9 12 13 16 18 20 21 23 24 26 29 30 33 36 37 39 42 46 48 49 50 51 53 54 58 59 62 63 70 71 72 73 74 77 78 83 87 88 90 92 93 95 100 103 107 108 112 113 116 117 119 121 122 123 124 126 127 128 131 133 134 135 136 139 141 145 148 149 152 161 162 163 164 165 166 167 168 170 172 174 178 180 183 185 187 188 189 192 196 199 201 206 209 210 19251 211 1 0 f 19252 211 1 0 4 5 7 8 10 12 14 18 20 21 22 24 25 31 37 38 40 41 42 43 45 50 51 52 55 59 60 61 62 67 68 71 74 75 80 81 83 85 86 87 90 91 92 93 97 98 103 107 108 109 112 113 117 119 122 125 128 130 131 132 133 134 138 139 140 143 144 145 146 148 151 153 155 156 157 159 161 162 163 164 168 171 173 178 180 186 190 193 197 199 200 201 202 206 207 208 209 19253 211 1 0 3 4 5 6 7 8 9 10 11 12 14 16 17 18 19 20 21 22 24 25 31 32 33 34 36 37 38 40 41 42 43 45 47 50 51 52 54 55 56 59 60 61 62 64 66 67 68 69 71 74 75 78 79 80 81 82 83 84 85 86 87 88 90 91 92 93 96 97 98 99 100 102 103 104 105 106 107 108 109 110 111 112 113 115 116 117 118 119 121 122 124 125 126 127 128 129 130 131 132 133 134 137 138 139 140 143 144 145 146 148 150 151 153 155 156 157 158 159 161 162 163 164 166 168 171 172 173 177 178 180 181 183 185 186 188 190 192 193 194 195 197 199 200 201 202 205 206 207 208 209 210 19254 211 1 0 e 19255 211 1 0 e 19256 211 1 0 e 19257 211 1 0 f 19258 211 1 0 e 19259 211 1 0 4 5 6 8 9 10 12 13 16 18 20 22 25 28 29 34 37 40 42 44 45 46 47 49 51 52 58 61 62 63 65 67 69 72 74 75 77 78 85 86 87 89 90 91 92 93 94 97 99 100 101 103 104 105 106 108 109 110 112 114 116 117 122 124 125 128 129 133 136 137 138 140 142 143 144 147 150 151 152 153 154 155 156 161 162 163 169 170 171 174 176 177 178 181 182 184 185 186 187 191 192 197 198 199 200 202 204 207 19260 211 1 0 f 19261 211 1 0 f 19262 211 1 0 f 19263 211 1 0 f 19264 211 1 0 f 19265 211 1 0 f 19266 211 1 0 0 1 3 6 13 17 20 22 24 27 30 31 34 35 36 37 41 42 43 47 48 49 51 58 59 60 61 62 69 72 81 84 86 88 89 91 92 93 97 99 100 101 103 106 107 108 112 114 115 116 119 121 122 123 124 129 130 132 135 136 138 139 141 142 145 149 152 156 157 158 161 162 164 167 169 171 172 177 178 180 182 183 184 187 189 191 192 194 195 196 201 205 206 207 208 209 19267 211 1 0 0 1 3 6 13 17 20 22 24 27 30 31 34 35 36 37 41 42 43 47 48 49 51 58 59 60 61 62 69 72 81 84 86 88 89 91 92 93 97 99 100 101 103 106 107 108 112 114 115 116 119 121 122 123 124 129 130 132 135 136 138 139 141 142 145 149 152 156 157 158 161 162 164 167 169 171 172 177 178 180 182 183 184 187 189 191 192 194 195 196 201 205 206 207 208 209 19268 211 1 0 0 5 6 8 9 10 11 14 16 17 18 21 27 28 29 31 37 38 40 42 44 45 47 48 50 51 52 56 57 59 60 63 64 65 68 72 74 79 82 84 86 89 91 93 94 98 100 102 104 106 107 108 110 113 114 118 119 121 122 123 124 125 131 136 140 142 147 148 155 156 157 161 163 164 165 166 167 171 173 175 177 180 181 182 191 193 198 199 200 202 205 206 207 208 19269 211 1 0 f 19270 211 1 0 0 3 4 5 7 9 11 12 16 17 20 23 24 26 28 30 31 32 33 34 35 36 37 38 39 40 42 43 46 50 52 53 58 60 61 62 63 64 65 68 75 76 81 82 84 85 86 89 91 94 98 99 103 104 105 106 107 108 113 114 116 121 123 125 126 127 129 130 131 132 134 135 136 137 139 140 141 144 147 148 149 150 151 152 154 157 161 165 168 169 171 173 174 176 178 179 181 182 186 190 191 198 199 201 202 203 204 205 206 207 209 19271 211 1 0 0 1 3 4 5 7 8 9 10 11 12 13 14 16 17 18 20 21 22 23 24 25 26 28 30 31 32 33 34 35 36 37 38 39 40 42 43 45 46 49 50 51 52 53 57 58 60 61 62 63 64 65 66 68 73 74 75 76 79 81 82 83 84 85 86 89 90 91 93 94 95 97 98 99 100 102 103 104 105 106 107 108 110 113 114 116 117 119 121 122 123 125 126 127 128 129 130 131 132 134 135 136 137 139 140 141 142 144 146 147 148 149 150 151 152 153 154 155 156 157 161 164 165 167 168 169 170 171 172 173 174 176 178 179 181 182 183 185 186 189 190 191 193 194 198 199 200 201 202 203 204 205 206 207 209 210 19272 211 1 1 e 19273 211 1 1 e 19274 211 1 1 e 19275 211 1 1 f 19276 211 1 1 e 19277 211 1 1 0 1 2 3 5 7 8 12 16 22 24 25 26 27 29 30 31 32 33 34 40 41 42 43 46 48 50 53 54 56 59 61 62 64 65 66 68 70 71 72 73 76 79 80 82 84 85 86 87 89 90 91 92 93 95 98 101 105 106 111 116 117 120 121 122 123 124 126 129 130 131 133 135 136 139 141 142 143 144 147 149 152 157 158 159 160 162 168 169 177 179 181 182 184 186 191 192 196 198 199 201 202 203 207 208 209 19278 211 1 1 f 19279 211 1 1 f 19280 211 1 1 f 19281 211 1 1 f 19282 211 1 1 f 19283 211 1 1 f 19284 211 1 1 2 5 6 7 11 13 14 19 20 21 25 26 27 28 30 32 33 36 41 43 47 49 50 54 55 56 58 59 60 61 64 65 66 67 68 69 72 73 76 77 78 80 81 82 84 85 87 89 90 91 92 96 99 103 105 108 110 111 112 113 114 115 118 119 121 122 123 129 131 133 134 136 137 138 139 147 148 151 154 158 159 161 162 164 166 169 171 173 174 179 181 182 183 184 185 189 191 192 195 196 200 202 205 206 209 19285 211 1 1 2 5 6 7 11 13 14 19 20 21 25 26 27 28 30 32 33 36 41 43 47 49 50 54 55 56 58 59 60 61 64 65 66 67 68 69 72 73 76 77 78 80 81 82 84 85 87 89 90 91 92 96 99 103 105 108 110 111 112 113 114 115 118 119 121 122 123 129 131 133 134 136 137 138 139 147 148 151 154 158 159 161 162 164 166 169 171 173 174 179 181 182 183 184 185 189 191 192 195 196 200 202 205 206 209 19286 211 1 1 0 1 4 6 8 9 10 11 12 13 14 16 18 19 22 25 27 31 32 33 35 38 40 41 43 44 49 51 55 58 59 60 62 63 67 75 76 81 82 83 87 88 90 95 96 97 101 102 105 107 109 111 112 114 122 123 124 125 126 128 130 131 132 137 139 140 142 143 144 145 148 149 155 159 162 164 166 169 176 177 179 180 181 185 189 191 192 195 196 197 198 200 202 206 19287 211 1 1 f 19288 211 1 1 2 3 5 6 7 9 11 12 13 16 21 23 25 27 29 31 32 34 37 41 44 45 46 47 48 52 53 54 56 58 66 67 68 73 74 80 81 82 83 84 85 86 87 89 93 94 95 96 99 100 101 103 107 108 115 116 118 121 122 124 127 128 129 130 131 134 135 137 138 142 143 144 145 146 147 150 153 154 158 160 161 162 164 165 168 170 172 174 175 177 179 183 186 189 190 192 193 194 195 200 201 203 206 207 210 19289 211 1 1 1 2 3 4 5 6 7 8 9 11 12 13 15 16 17 18 19 20 21 23 25 27 28 29 31 32 34 37 38 41 44 45 46 47 48 49 52 53 54 56 58 62 63 65 66 67 68 71 73 74 75 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 99 100 101 103 107 108 109 110 111 112 115 116 117 118 120 121 122 123 124 125 127 128 129 130 131 134 135 136 137 138 139 141 142 143 144 145 146 147 148 150 151 152 153 154 157 158 160 161 162 163 164 165 166 168 169 170 172 173 174 175 176 177 178 179 181 183 185 186 188 189 190 192 193 194 195 196 198 199 200 201 203 206 207 210 19290 211 1 1 e 19291 211 1 1 e 19292 211 1 1 e 19293 211 1 1 f 19294 211 1 1 e 19295 211 1 1 0 4 9 10 14 15 16 17 19 22 24 26 27 28 30 31 32 35 36 37 38 40 41 42 43 46 50 51 53 59 60 62 63 64 65 67 68 70 73 75 78 79 81 83 84 85 88 91 92 93 96 97 99 103 104 105 106 108 109 110 112 115 117 118 122 123 129 130 131 132 134 135 136 137 139 144 145 146 147 148 149 151 154 156 158 161 164 167 168 170 172 174 177 180 181 183 184 187 188 190 191 192 195 198 200 201 202 203 205 207 209 19296 211 1 1 f 19297 211 1 1 f 19298 211 1 1 f 19299 211 1 1 f 19300 211 1 1 f 19301 211 1 1 f 19302 211 1 1 0 1 3 4 5 8 10 13 16 17 19 23 24 30 33 34 36 38 40 41 42 44 46 47 48 49 50 53 57 59 62 63 65 66 67 69 71 76 77 78 79 80 81 84 85 89 90 91 93 96 101 103 106 109 110 112 114 116 118 121 124 125 126 127 130 135 136 142 143 148 150 151 152 155 156 160 162 164 165 169 170 172 176 177 178 179 181 182 186 188 191 192 195 197 201 202 206 209 19303 211 1 1 0 1 3 4 5 8 10 13 16 17 19 23 24 30 33 34 36 38 40 41 42 44 46 47 48 49 50 53 57 59 62 63 65 66 67 69 71 76 77 78 79 80 81 84 85 89 90 91 93 96 101 103 106 109 110 112 114 116 118 121 124 125 126 127 130 135 136 142 143 148 150 151 152 155 156 160 162 164 165 169 170 172 176 177 178 179 181 182 186 188 191 192 195 197 201 202 206 209 19304 211 1 1 0 1 2 3 6 8 10 11 14 17 19 22 23 24 26 28 29 30 31 32 33 34 35 36 37 39 42 43 44 45 46 51 52 55 56 59 60 63 64 66 67 68 70 72 73 74 77 78 79 81 82 87 89 90 97 102 103 104 105 108 114 119 125 126 127 128 129 131 134 136 138 139 140 142 143 145 147 148 149 150 154 155 158 159 162 163 165 166 169 172 176 177 179 180 183 184 185 186 191 192 194 197 198 199 201 202 206 208 19305 211 1 1 f 19306 211 1 1 0 1 3 4 8 9 11 12 13 14 15 16 18 19 20 21 22 24 25 28 29 31 32 33 35 37 40 41 43 46 48 51 53 56 57 59 60 61 62 63 64 66 69 70 72 74 76 77 78 81 84 86 87 90 91 93 94 96 98 101 107 113 114 117 120 124 127 128 132 133 137 141 142 145 146 147 148 149 151 153 154 156 159 160 162 163 166 170 171 172 173 176 177 179 180 188 189 190 191 193 198 199 200 201 202 203 204 205 207 208 210 19307 211 1 1 0 1 3 4 5 6 8 9 11 12 13 14 15 16 18 19 20 21 22 23 24 25 28 29 30 31 32 33 34 35 36 37 39 40 41 43 46 48 51 52 53 54 55 56 57 59 60 61 62 63 64 66 69 70 72 74 75 76 77 78 81 83 84 86 87 88 90 91 93 94 95 96 98 99 101 103 105 107 108 109 111 113 114 117 120 122 123 124 126 127 128 132 133 134 136 137 141 142 143 144 145 146 147 148 149 151 152 153 154 156 158 159 160 161 162 163 164 165 166 169 170 171 172 173 176 177 178 179 180 184 185 186 187 188 189 190 191 192 193 194 197 198 199 200 201 202 203 204 205 206 207 208 209 210 19308 211 1 1 e 19309 211 1 1 e 19310 211 1 1 e 19311 211 1 1 f 19312 211 1 1 e 19313 211 1 1 1 3 4 5 6 8 9 10 15 16 18 19 20 21 22 25 27 28 30 35 42 43 44 46 47 49 50 52 53 54 56 59 60 63 65 66 67 70 72 73 75 76 77 78 80 81 82 84 85 86 89 95 100 102 103 106 109 110 111 112 113 116 118 124 125 127 128 129 131 136 138 139 140 142 143 147 148 151 153 157 161 163 165 167 168 169 170 171 173 174 175 177 178 181 183 184 185 186 190 191 192 193 194 196 197 199 200 202 207 209 210 19314 211 1 1 f 19315 211 1 1 f 19316 211 1 1 f 19317 211 1 1 f 19318 211 1 1 f 19319 211 1 1 f 19320 211 1 1 2 3 4 5 7 10 12 13 16 17 18 22 25 27 28 30 32 33 34 35 36 38 39 40 41 43 45 46 48 49 50 57 59 64 67 68 70 71 72 76 78 79 81 82 83 89 91 92 93 95 96 97 98 99 104 105 106 107 109 111 114 115 116 117 120 121 123 125 126 128 132 133 135 136 140 141 145 148 150 151 155 160 162 163 167 169 172 174 178 180 181 183 185 186 187 188 189 191 195 197 198 199 200 201 203 207 208 19321 211 1 1 2 3 4 5 7 10 12 13 16 17 18 22 25 27 28 30 32 33 34 35 36 38 39 40 41 43 45 46 48 49 50 57 59 64 67 68 70 71 72 76 78 79 81 82 83 89 91 92 93 95 96 97 98 99 104 105 106 107 109 111 114 115 116 117 120 121 123 125 126 128 132 133 135 136 140 141 145 148 150 151 155 160 162 163 167 169 172 174 178 180 181 183 185 186 187 188 189 191 195 197 198 199 200 201 203 207 208 19322 211 1 1 2 4 7 12 13 14 17 20 22 23 24 27 28 29 33 34 39 41 45 46 47 48 49 50 53 55 56 58 59 61 64 66 68 69 72 73 76 78 81 82 84 87 88 90 91 96 98 102 103 104 107 111 115 117 118 120 124 125 128 130 133 136 140 143 144 146 149 153 155 157 162 163 165 170 172 173 175 178 179 180 182 187 189 191 193 196 197 198 202 205 206 207 209 210 19323 211 1 1 f 19324 211 1 1 2 4 6 8 10 12 13 14 16 17 18 20 22 24 25 27 30 32 34 36 37 38 41 42 43 45 48 51 52 54 55 58 59 64 66 67 68 69 75 79 80 81 82 85 87 88 89 93 94 96 99 103 104 106 107 108 109 110 111 112 113 115 118 122 123 124 125 127 129 130 135 136 137 138 139 140 141 143 144 145 146 150 151 152 153 154 155 158 159 160 161 164 167 173 175 176 177 179 181 182 184 186 188 189 190 191 194 196 201 202 203 204 205 206 208 209 19325 211 1 1 1 2 3 4 5 6 7 8 10 12 13 14 16 17 18 20 22 23 24 25 27 28 30 32 34 36 37 38 39 41 42 43 45 46 48 49 50 51 52 53 54 55 56 57 58 59 63 64 66 67 68 69 70 71 72 73 75 78 79 80 81 82 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 101 102 103 104 106 107 108 109 110 111 112 113 114 115 117 118 120 121 122 123 124 125 127 128 129 130 134 135 136 137 138 139 140 141 142 143 144 145 146 150 151 152 153 154 155 156 157 158 159 160 161 163 164 167 169 170 171 172 173 175 176 177 179 180 181 182 183 184 185 186 187 188 189 190 191 192 194 196 197 200 201 202 203 204 205 206 208 209 19326 211 1 1 e 19327 211 1 1 e 19328 211 1 1 e 19329 211 1 1 f 19330 211 1 1 e 19331 211 1 1 0 6 8 11 13 14 17 18 19 20 22 23 24 26 29 30 33 34 37 38 41 44 45 46 48 49 50 53 57 58 59 60 65 66 67 68 70 71 79 83 85 87 88 90 91 92 94 97 98 99 101 102 103 106 108 112 113 116 117 123 124 127 128 130 133 134 137 138 142 146 150 151 152 153 154 155 157 158 161 164 166 169 170 171 173 175 179 180 181 183 184 186 193 194 195 197 199 200 201 202 204 207 208 209 210 19332 211 1 1 f 19333 211 1 1 f 19334 211 1 1 f 19335 211 1 1 f 19336 211 1 1 f 19337 211 1 1 f 19338 211 1 1 2 5 9 12 13 14 15 17 18 20 22 23 29 30 31 32 33 37 38 39 44 45 46 48 49 50 51 52 53 54 56 64 65 66 69 71 72 73 75 76 79 80 82 83 85 89 90 92 94 95 96 101 104 105 108 109 111 113 114 116 118 119 120 123 124 126 127 128 131 133 138 141 144 146 147 148 149 150 151 154 155 157 158 161 163 164 166 168 169 170 172 174 175 176 177 183 185 186 187 188 191 194 196 197 199 205 206 208 210 19339 211 1 1 2 5 9 12 13 14 15 17 18 20 22 23 29 30 31 32 33 37 38 39 44 45 46 48 49 50 51 52 53 54 56 64 65 66 69 71 72 73 75 76 79 80 82 83 85 89 90 92 94 95 96 101 104 105 108 109 111 113 114 116 118 119 120 123 124 126 127 128 131 133 138 141 144 146 147 148 149 150 151 154 155 157 158 161 163 164 166 168 169 170 172 174 175 176 177 183 185 186 187 188 191 194 196 197 199 205 206 208 210 19340 211 1 1 1 2 3 5 6 8 11 12 13 15 16 19 20 21 23 26 28 37 38 39 42 43 46 56 58 59 60 62 63 67 70 75 76 78 80 84 85 86 88 89 91 92 94 99 101 103 105 106 109 112 113 115 116 119 120 123 124 129 130 131 132 134 136 137 141 144 145 147 152 153 155 157 158 159 161 162 165 169 171 172 173 175 176 177 178 185 186 189 191 192 193 196 197 200 201 203 204 205 206 207 19341 211 1 1 f 19342 211 1 1 0 1 2 3 4 6 8 9 10 11 12 13 17 18 19 20 21 22 24 25 27 29 30 31 33 34 37 38 40 41 43 47 49 50 52 53 54 57 59 60 62 64 65 66 68 69 71 73 74 75 77 78 79 80 81 82 83 85 87 88 90 92 94 95 98 99 102 103 106 109 115 116 118 119 120 121 123 125 131 132 136 138 140 141 142 145 150 157 158 159 164 165 170 174 178 179 180 181 183 184 185 190 191 192 194 195 199 200 201 202 203 205 207 208 210 19343 211 1 1 0 1 2 3 4 6 8 9 10 11 12 13 17 18 19 20 21 22 23 24 25 27 28 29 30 31 33 34 36 37 38 39 40 41 43 44 45 47 48 49 50 52 53 54 56 57 59 60 61 62 64 65 66 68 69 71 72 73 74 75 77 78 79 80 81 82 83 85 86 87 88 90 92 93 94 95 96 97 98 99 102 103 104 105 106 109 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 127 130 131 132 135 136 137 138 140 141 142 143 145 147 148 149 150 152 154 155 157 158 159 161 162 164 165 168 169 170 174 176 178 179 180 181 182 183 184 185 188 190 191 192 193 194 195 196 198 199 200 201 202 203 205 206 207 208 209 210 19344 224 0 0 e 19345 224 0 0 e 19346 224 0 0 e 19347 224 0 0 f 19348 224 0 0 e 19349 224 0 0 1 2 4 6 9 10 12 13 16 18 19 21 22 23 24 27 30 31 36 37 38 40 42 43 45 47 50 51 52 53 54 55 58 59 60 61 63 65 68 69 71 74 75 77 78 79 82 88 92 93 97 100 101 102 105 106 108 109 111 113 118 120 122 123 124 126 128 130 131 133 134 135 137 140 143 147 148 151 152 153 155 160 161 162 164 165 168 171 172 173 174 180 181 182 184 187 188 191 197 201 202 204 205 206 207 208 211 212 215 216 218 219 220 221 222 19350 224 0 0 f 19351 224 0 0 f 19352 224 0 0 f 19353 224 0 0 f 19354 224 0 0 f 19355 224 0 0 f 19356 224 0 0 0 1 5 7 8 10 12 13 14 15 16 17 18 22 23 25 27 29 32 33 37 42 45 50 51 53 54 55 57 58 59 60 61 63 64 65 68 69 74 75 76 77 78 81 83 85 86 87 88 90 91 94 96 99 101 102 103 105 106 108 109 110 111 113 114 115 116 118 119 120 121 122 125 126 130 131 133 134 136 137 138 143 146 148 149 151 152 157 159 162 165 166 168 169 170 175 181 182 187 189 190 193 194 195 196 197 200 201 202 203 205 206 207 209 210 212 213 214 215 218 222 223 19357 224 0 0 0 1 5 7 8 10 12 13 14 15 16 17 18 22 23 25 27 29 32 33 37 42 45 50 51 53 54 55 57 58 59 60 61 63 64 65 68 69 74 75 76 77 78 81 83 85 86 87 88 90 91 94 96 99 101 102 103 105 106 108 109 110 111 113 114 115 116 118 119 120 121 122 125 126 130 131 133 134 136 137 138 143 146 148 149 151 152 157 159 162 165 166 168 169 170 175 181 182 187 189 190 193 194 195 196 197 200 201 202 203 205 206 207 209 210 212 213 214 215 218 222 223 19358 224 0 0 1 2 3 4 5 7 8 10 14 17 18 20 21 24 25 26 29 30 31 32 33 34 35 36 39 42 43 44 45 48 51 52 53 55 56 57 60 62 64 65 67 68 69 72 75 78 80 83 85 86 87 88 89 94 96 98 99 100 103 104 105 106 109 110 111 114 119 121 123 124 126 127 128 129 130 131 134 138 141 146 147 148 150 154 156 157 160 164 165 166 167 169 171 172 173 179 180 181 183 187 192 193 194 196 197 200 201 202 203 204 215 216 218 219 220 223 19359 224 0 0 f 19360 224 0 0 0 1 3 4 5 6 8 9 11 14 15 16 18 20 24 25 27 29 32 33 34 37 38 40 42 44 45 46 47 49 51 55 57 58 59 60 62 64 65 66 68 69 70 71 73 75 76 78 79 81 82 87 90 93 94 96 97 98 99 100 101 102 103 105 106 109 112 114 116 120 121 124 126 128 129 131 133 134 135 136 137 142 144 145 149 150 151 152 157 158 160 165 168 172 175 176 177 180 181 186 187 189 197 198 205 206 208 210 211 213 219 19361 224 0 0 0 1 2 3 4 5 6 7 8 9 10 11 13 14 15 16 17 18 20 22 24 25 27 28 29 31 32 33 34 35 36 37 38 39 40 42 44 45 46 47 49 51 52 55 57 58 59 60 62 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 81 82 84 86 87 88 90 91 92 93 94 96 97 98 99 100 101 102 103 105 106 107 109 110 111 112 113 114 116 118 119 120 121 122 124 125 126 128 129 131 132 133 134 135 136 137 139 140 142 143 144 145 148 149 150 151 152 154 155 156 157 158 159 160 161 162 164 165 166 168 169 172 173 175 176 177 178 180 181 182 183 184 185 186 187 189 191 197 198 199 200 201 204 205 206 208 209 210 211 213 215 217 218 219 19362 224 0 0 e 19363 224 0 0 e 19364 224 0 0 e 19365 224 0 0 f 19366 224 0 0 e 19367 224 0 0 0 1 2 3 4 6 7 9 10 13 18 19 20 22 28 29 30 33 38 39 41 42 43 44 48 50 51 53 55 59 63 64 65 66 69 70 72 73 75 78 80 81 82 84 86 87 88 90 91 94 97 98 99 100 101 103 104 108 111 114 116 117 123 124 128 129 130 131 132 136 137 138 139 143 144 150 151 152 156 157 158 159 160 161 164 165 166 167 168 169 172 173 175 177 179 182 183 184 188 191 192 193 195 196 198 199 200 203 205 206 207 209 210 211 214 215 216 219 221 19368 224 0 0 f 19369 224 0 0 f 19370 224 0 0 f 19371 224 0 0 f 19372 224 0 0 f 19373 224 0 0 f 19374 224 0 0 0 1 3 5 9 10 11 14 15 20 21 22 24 27 28 30 31 33 34 35 36 37 38 40 41 43 44 46 48 50 52 53 54 55 56 58 59 60 66 69 71 72 73 74 75 76 77 79 80 83 84 86 87 89 90 95 98 99 102 105 106 110 119 125 127 130 131 132 134 135 137 139 143 145 147 149 150 152 154 156 162 164 165 167 168 170 172 173 174 176 179 180 183 188 189 190 193 195 196 197 198 199 201 202 203 204 205 212 213 217 218 220 223 19375 224 0 0 0 1 3 5 9 10 11 14 15 20 21 22 24 27 28 30 31 33 34 35 36 37 38 40 41 43 44 46 48 50 52 53 54 55 56 58 59 60 66 69 71 72 73 74 75 76 77 79 80 83 84 86 87 89 90 95 98 99 102 105 106 110 119 125 127 130 131 132 134 135 137 139 143 145 147 149 150 152 154 156 162 164 165 167 168 170 172 173 174 176 179 180 183 188 189 190 193 195 196 197 198 199 201 202 203 204 205 212 213 217 218 220 223 19376 224 0 0 1 2 3 4 5 6 7 8 9 10 12 14 15 16 22 23 27 28 29 30 32 33 36 37 39 40 44 48 49 50 53 63 65 68 69 74 76 78 81 82 85 86 87 90 91 92 94 98 99 103 104 106 108 109 110 113 114 115 116 117 118 121 122 125 126 128 129 132 133 134 135 137 140 142 144 147 149 150 152 153 154 155 156 159 161 162 164 165 166 168 170 171 173 174 182 183 185 186 187 190 193 194 196 197 198 199 200 201 204 206 207 208 211 214 215 217 218 222 223 19377 224 0 0 f 19378 224 0 0 1 3 6 10 12 13 17 19 26 27 28 29 30 31 32 34 36 37 38 40 41 42 43 44 45 47 48 49 50 51 55 58 61 68 70 71 72 74 75 77 78 80 83 84 85 86 91 93 94 96 98 99 100 102 103 104 105 108 110 112 113 116 118 119 120 122 123 124 125 127 130 131 132 133 134 135 136 141 142 144 146 147 148 150 152 155 157 158 161 163 164 166 169 170 171 172 173 175 177 178 182 184 186 189 190 198 199 201 202 204 209 211 214 217 218 219 220 19379 224 0 0 0 1 3 4 6 8 10 11 12 13 14 15 16 17 19 20 22 26 27 28 29 30 31 32 33 34 35 36 37 38 40 41 42 43 44 45 46 47 48 49 50 51 52 55 56 58 59 60 61 63 64 66 68 69 70 71 72 74 75 77 78 79 80 81 83 84 85 86 87 89 90 91 92 93 94 95 96 98 99 100 102 103 104 105 108 109 110 112 113 116 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 138 141 142 144 145 146 147 148 149 150 152 153 155 157 158 160 161 162 163 164 165 166 167 168 169 170 171 172 173 175 177 178 179 180 182 184 185 186 187 188 189 190 191 192 195 196 197 198 199 200 201 202 204 205 206 208 209 210 211 214 216 217 218 219 220 222 223 19380 224 0 0 e 19381 224 0 0 e 19382 224 0 0 e 19383 224 0 0 f 19384 224 0 0 e 19385 224 0 0 0 2 3 4 6 7 9 12 18 19 20 21 23 26 28 29 31 32 35 36 38 43 44 45 54 55 56 57 59 61 62 67 71 72 73 74 75 76 80 81 89 91 92 93 95 97 98 99 104 107 109 110 115 116 117 118 122 128 133 136 137 142 143 144 146 147 148 149 150 152 153 154 157 158 161 163 164 165 167 168 172 173 177 180 182 183 186 189 190 191 192 197 199 203 207 209 210 212 213 214 217 218 219 220 19386 224 0 0 f 19387 224 0 0 f 19388 224 0 0 f 19389 224 0 0 f 19390 224 0 0 f 19391 224 0 0 f 19392 224 0 0 0 1 3 4 10 11 13 16 23 24 25 26 29 30 32 34 35 36 38 40 41 44 45 46 47 50 57 59 60 62 64 65 70 73 74 76 77 78 79 81 83 85 86 87 88 90 92 93 94 95 96 101 102 103 104 105 106 107 108 109 110 111 112 114 116 117 119 124 126 127 130 131 133 134 137 138 140 141 143 144 145 147 148 149 150 151 152 153 155 158 159 161 162 163 166 167 169 171 172 174 175 177 178 180 183 186 187 188 194 195 196 197 198 199 200 201 202 203 205 207 208 212 216 217 218 219 222 223 19393 224 0 0 0 1 3 4 10 11 13 16 23 24 25 26 29 30 32 34 35 36 38 40 41 44 45 46 47 50 57 59 60 62 64 65 70 73 74 76 77 78 79 81 83 85 86 87 88 90 92 93 94 95 96 101 102 103 104 105 106 107 108 109 110 111 112 114 116 117 119 124 126 127 130 131 133 134 137 138 140 141 143 144 145 147 148 149 150 151 152 153 155 158 159 161 162 163 166 167 169 171 172 174 175 177 178 180 183 186 187 188 194 195 196 197 198 199 200 201 202 203 205 207 208 212 216 217 218 219 222 223 19394 224 0 0 0 1 4 7 10 11 14 15 17 21 24 28 30 31 36 37 39 41 42 47 49 50 51 52 56 57 58 59 60 61 62 65 67 68 69 70 71 72 73 75 77 78 79 80 81 82 83 88 89 91 92 93 95 96 97 98 99 101 102 104 107 109 110 112 114 115 116 119 122 123 125 126 128 129 132 133 135 137 138 140 142 144 145 147 148 149 155 159 165 166 167 169 173 174 176 178 179 180 182 184 186 187 190 191 192 194 196 197 198 200 202 203 207 208 210 211 212 213 214 216 217 223 19395 224 0 0 f 19396 224 0 0 0 3 7 9 10 11 14 18 21 22 24 26 28 29 36 42 43 44 45 54 61 62 63 65 67 69 71 74 75 76 81 82 83 84 86 88 90 99 101 102 104 105 107 109 111 113 118 120 121 122 126 127 128 130 131 132 133 135 136 137 138 139 140 142 146 147 148 149 151 154 155 157 160 163 164 165 166 167 168 169 170 174 176 183 184 188 189 191 193 194 197 198 200 201 202 206 207 208 209 213 214 216 219 221 222 223 19397 224 0 0 0 1 2 3 4 5 7 8 9 10 11 12 13 14 15 16 18 21 22 24 26 27 28 29 30 31 33 36 37 40 42 43 44 45 48 50 53 54 55 56 57 58 60 61 62 63 65 67 69 70 71 74 75 76 79 80 81 82 83 84 86 87 88 90 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 111 113 116 117 118 120 121 122 123 124 125 126 127 128 130 131 132 133 134 135 136 137 138 139 140 142 143 144 145 146 147 148 149 151 152 153 154 155 156 157 158 159 160 161 163 164 165 166 167 168 169 170 172 174 175 176 177 178 179 183 184 186 187 188 189 191 193 194 197 198 199 200 201 202 203 204 206 207 208 209 213 214 216 218 219 220 221 222 223 19398 224 0 0 e 19399 224 0 0 e 19400 224 0 0 e 19401 224 0 0 f 19402 224 0 0 e 19403 224 0 0 3 4 5 6 7 9 10 13 16 17 18 19 23 24 28 29 30 32 34 35 36 37 40 43 44 45 47 48 50 51 52 53 54 55 59 61 66 68 71 72 73 74 75 76 79 80 82 83 85 89 92 93 94 95 96 97 99 101 102 103 104 106 107 108 115 116 117 121 122 135 136 138 142 143 146 148 149 150 152 154 156 157 158 162 163 166 170 171 172 173 174 176 177 178 179 180 184 186 187 191 192 193 199 200 202 204 205 206 207 210 212 214 215 216 218 219 220 222 223 19404 224 0 0 f 19405 224 0 0 f 19406 224 0 0 f 19407 224 0 0 f 19408 224 0 0 f 19409 224 0 0 f 19410 224 0 0 3 4 5 7 10 11 12 14 15 17 22 23 24 27 28 30 32 35 37 38 40 41 43 44 46 50 51 53 54 56 59 60 61 62 63 68 70 71 72 74 75 76 77 80 85 86 89 90 91 92 93 94 98 101 108 109 110 111 113 115 116 118 121 124 125 131 132 133 136 137 139 140 142 146 148 149 151 152 153 155 156 157 159 160 161 162 163 165 168 169 172 174 176 177 179 180 181 182 183 184 185 186 188 189 191 192 194 197 198 199 200 203 204 206 207 208 211 218 219 222 223 19411 224 0 0 3 4 5 7 10 11 12 14 15 17 22 23 24 27 28 30 32 35 37 38 40 41 43 44 46 50 51 53 54 56 59 60 61 62 63 68 70 71 72 74 75 76 77 80 85 86 89 90 91 92 93 94 98 101 108 109 110 111 113 115 116 118 121 124 125 131 132 133 136 137 139 140 142 146 148 149 151 152 153 155 156 157 159 160 161 162 163 165 168 169 172 174 176 177 179 180 181 182 183 184 185 186 188 189 191 192 194 197 198 199 200 203 204 206 207 208 211 218 219 222 223 19412 224 0 0 3 5 6 10 11 13 14 19 21 23 24 25 26 31 32 38 39 41 42 43 44 48 49 54 57 58 59 61 65 66 67 70 71 74 75 76 79 80 82 84 85 86 88 89 91 92 93 96 97 99 101 102 103 106 108 109 111 118 119 120 122 123 124 126 127 130 131 135 136 139 143 144 145 147 148 150 151 153 154 157 160 161 165 166 168 172 173 174 183 187 188 189 191 192 198 201 204 206 208 210 212 217 218 19413 224 0 0 f 19414 224 0 0 0 1 3 4 9 10 11 15 16 17 22 23 25 27 28 29 30 31 34 36 37 38 39 40 41 42 43 46 47 52 55 56 58 59 61 62 63 67 70 72 73 81 82 84 87 88 89 90 91 92 93 94 95 97 98 99 101 102 104 109 110 111 113 116 119 122 131 134 139 142 143 144 147 148 149 150 156 157 158 160 167 168 169 170 171 173 174 177 179 180 181 183 185 190 192 194 205 206 208 209 211 212 213 214 218 219 220 221 19415 224 0 0 0 1 2 3 4 5 6 7 9 10 11 13 14 15 16 17 18 19 21 22 23 24 25 26 27 28 29 30 31 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 50 52 55 56 57 58 59 61 62 63 64 65 66 67 70 71 72 73 74 76 79 81 82 84 85 87 88 89 90 91 92 93 94 95 97 98 99 100 101 102 104 105 106 108 109 110 111 112 113 114 115 116 118 119 120 122 123 125 127 131 132 134 136 137 138 139 141 142 143 144 147 148 149 150 151 152 153 154 156 157 158 160 162 164 165 166 167 168 169 170 171 172 173 174 176 177 178 179 180 181 183 184 185 186 187 189 190 191 192 193 194 198 200 201 203 204 205 206 207 208 209 211 212 213 214 217 218 219 220 221 19416 224 0 1 e 19417 224 0 1 e 19418 224 0 1 e 19419 224 0 1 f 19420 224 0 1 e 19421 224 0 1 0 2 4 5 7 9 13 15 16 17 18 19 20 21 23 24 27 29 31 35 36 37 38 40 42 43 44 46 47 48 49 50 51 52 53 54 55 58 60 65 69 70 73 77 78 80 81 82 84 85 87 88 89 91 93 95 96 103 105 106 108 109 110 112 113 114 121 124 125 127 130 131 132 135 139 144 146 148 150 151 157 158 161 163 165 166 167 170 171 172 174 175 176 177 180 184 185 187 188 191 193 194 195 197 198 199 204 206 210 217 221 223 19422 224 0 1 f 19423 224 0 1 f 19424 224 0 1 f 19425 224 0 1 f 19426 224 0 1 f 19427 224 0 1 f 19428 224 0 1 1 2 3 4 6 11 14 16 18 19 20 21 23 25 26 28 33 35 39 42 43 44 45 49 51 52 53 54 57 58 60 61 62 64 71 72 74 75 77 80 81 83 87 96 97 98 104 105 106 107 108 111 112 113 114 119 120 121 122 123 129 133 134 135 136 137 138 139 140 142 143 145 147 149 150 151 152 153 154 158 162 164 165 167 172 176 177 180 183 184 190 191 193 197 199 201 204 205 206 207 208 211 214 216 218 220 222 19429 224 0 1 1 2 3 4 6 11 14 16 18 19 20 21 23 25 26 28 33 35 39 42 43 44 45 49 51 52 53 54 57 58 60 61 62 64 71 72 74 75 77 80 81 83 87 96 97 98 104 105 106 107 108 111 112 113 114 119 120 121 122 123 129 133 134 135 136 137 138 139 140 142 143 145 147 149 150 151 152 153 154 158 162 164 165 167 172 176 177 180 183 184 190 191 193 197 199 201 204 205 206 207 208 211 214 216 218 220 222 19430 224 0 1 2 3 4 5 6 8 11 14 17 19 24 28 30 31 32 34 35 38 40 42 43 44 45 48 52 53 56 57 58 59 61 62 66 67 68 69 70 71 73 74 76 77 81 82 86 89 91 93 94 95 97 100 105 106 108 110 112 114 116 118 119 122 123 125 127 128 129 131 135 137 141 142 145 146 149 152 153 156 157 158 160 164 170 171 173 174 175 177 179 186 189 190 191 192 193 195 198 199 200 201 202 205 207 209 210 211 213 215 218 219 220 221 222 223 19431 224 0 1 f 19432 224 0 1 0 1 2 5 9 10 11 12 14 17 20 21 24 26 27 28 29 30 31 32 33 34 38 39 41 42 43 45 48 50 54 57 64 71 72 74 77 78 81 82 83 84 86 90 91 94 98 99 100 102 103 104 106 109 110 111 114 116 117 118 120 121 122 125 126 127 129 130 134 136 137 138 140 141 146 148 149 151 152 155 158 159 163 164 167 171 173 177 178 180 184 185 191 192 194 195 196 198 199 200 202 203 210 211 213 216 217 219 221 222 223 19433 224 0 1 0 1 2 3 4 5 6 8 9 10 11 12 13 14 17 19 20 21 22 23 24 26 27 28 29 30 31 32 33 34 35 38 39 41 42 43 44 45 48 49 50 52 53 54 55 57 58 59 60 64 65 67 69 70 71 72 74 75 76 77 78 79 81 82 83 84 86 88 89 90 91 94 98 99 100 102 103 104 105 106 109 110 111 113 114 116 117 118 119 120 121 122 124 125 126 127 128 129 130 131 133 134 135 136 137 138 139 140 141 142 144 146 147 148 149 150 151 152 153 155 158 159 163 164 166 167 171 173 176 177 178 180 182 183 184 185 186 190 191 192 194 195 196 197 198 199 200 201 202 203 205 207 210 211 212 213 215 216 217 219 221 222 223 19434 224 0 1 e 19435 224 0 1 e 19436 224 0 1 e 19437 224 0 1 f 19438 224 0 1 e 19439 224 0 1 0 1 2 4 6 8 13 18 19 20 21 22 24 25 30 31 33 36 38 39 43 44 48 49 51 52 53 54 55 56 63 64 65 66 67 68 69 70 72 75 76 79 88 89 90 93 94 96 97 99 100 103 106 108 109 110 114 115 116 119 122 123 125 126 127 128 130 131 133 135 142 143 144 145 146 147 151 154 155 157 158 160 165 167 168 169 172 174 175 177 179 180 181 182 185 187 189 193 194 195 198 202 204 205 206 214 215 218 219 223 19440 224 0 1 f 19441 224 0 1 f 19442 224 0 1 f 19443 224 0 1 f 19444 224 0 1 f 19445 224 0 1 f 19446 224 0 1 1 2 6 10 11 12 13 14 15 16 17 18 19 20 21 22 24 27 28 31 32 36 38 39 41 42 44 52 54 55 56 58 60 63 65 71 72 73 75 79 80 83 84 86 88 90 91 92 97 99 100 101 103 104 105 106 109 111 113 114 118 120 121 122 123 126 127 133 135 136 137 139 140 142 145 146 150 153 154 157 161 162 163 164 165 166 168 169 171 175 180 181 182 183 184 185 187 188 189 194 197 198 200 204 205 206 207 208 211 214 215 216 218 219 220 222 19447 224 0 1 1 2 6 10 11 12 13 14 15 16 17 18 19 20 21 22 24 27 28 31 32 36 38 39 41 42 44 52 54 55 56 58 60 63 65 71 72 73 75 79 80 83 84 86 88 90 91 92 97 99 100 101 103 104 105 106 109 111 113 114 118 120 121 122 123 126 127 133 135 136 137 139 140 142 145 146 150 153 154 157 161 162 163 164 165 166 168 169 171 175 180 181 182 183 184 185 187 188 189 194 197 198 200 204 205 206 207 208 211 214 215 216 218 219 220 222 19448 224 0 1 0 1 2 3 4 8 10 13 16 17 18 21 24 26 27 28 29 32 35 36 37 41 42 44 46 47 49 50 51 54 57 60 61 62 63 66 67 68 69 72 74 75 76 83 84 89 92 95 97 98 100 102 103 104 106 107 108 112 113 114 116 118 120 123 125 126 127 128 129 131 134 136 139 140 141 142 145 146 149 150 152 154 156 157 159 161 163 166 167 168 170 172 173 174 176 177 178 179 180 181 183 184 187 188 189 190 192 195 198 201 202 205 206 208 209 212 215 216 218 219 223 19449 224 0 1 f 19450 224 0 1 0 2 4 5 8 10 12 13 15 16 17 23 24 25 26 29 37 39 44 45 46 47 51 52 54 55 58 59 63 65 67 68 69 70 71 72 73 75 76 78 81 82 85 86 87 89 90 91 94 95 96 97 99 100 102 103 105 106 107 111 114 115 116 117 118 120 121 122 125 126 128 130 132 133 135 136 137 138 139 142 143 145 146 148 149 150 151 152 153 154 157 162 165 167 168 170 173 175 182 184 185 186 188 190 192 194 195 197 198 201 202 203 204 206 208 214 217 218 220 221 222 223 19451 224 0 1 0 1 2 3 4 5 7 8 10 12 13 14 15 16 17 20 22 23 24 25 26 27 29 30 31 37 39 40 41 43 44 45 46 47 49 51 52 54 55 56 58 59 60 61 63 65 66 67 68 69 70 71 72 73 75 76 77 78 79 81 82 85 86 87 88 89 90 91 94 95 96 97 98 99 100 102 103 105 106 107 108 111 114 115 116 117 118 119 120 121 122 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 141 142 143 145 146 148 149 150 151 152 153 154 155 157 161 162 164 165 167 168 169 170 172 173 175 176 178 180 181 182 183 184 185 186 188 190 192 194 195 197 198 200 201 202 203 204 206 208 209 210 211 212 213 214 216 217 218 219 220 221 222 223 19452 224 0 1 e 19453 224 0 1 e 19454 224 0 1 e 19455 224 0 1 f 19456 224 0 1 e 19457 224 0 1 0 2 3 4 7 8 9 14 15 17 18 19 20 24 27 29 38 43 44 46 48 51 52 53 55 56 57 58 60 62 65 67 71 72 73 74 75 76 79 80 82 83 85 86 88 89 90 92 94 99 100 101 102 103 105 106 109 115 118 119 120 121 123 127 129 130 132 133 134 137 138 139 140 142 146 147 149 150 152 155 157 158 159 160 163 166 167 168 169 171 172 174 176 177 180 181 182 183 186 187 190 192 193 194 197 198 200 202 203 204 205 207 208 210 211 213 214 215 216 220 223 19458 224 0 1 f 19459 224 0 1 f 19460 224 0 1 f 19461 224 0 1 f 19462 224 0 1 f 19463 224 0 1 f 19464 224 0 1 0 1 2 8 12 15 16 19 21 22 26 27 28 29 31 32 36 38 39 40 41 43 46 48 53 54 55 57 58 60 62 64 66 68 75 76 77 78 79 89 90 91 93 95 96 99 100 101 106 109 111 113 118 121 123 125 126 131 132 136 141 146 147 148 149 152 153 156 157 158 159 161 162 169 170 171 172 176 178 179 183 184 187 189 190 191 192 193 194 196 198 201 207 208 210 211 212 213 214 215 219 222 19465 224 0 1 0 1 2 8 12 15 16 19 21 22 26 27 28 29 31 32 36 38 39 40 41 43 46 48 53 54 55 57 58 60 62 64 66 68 75 76 77 78 79 89 90 91 93 95 96 99 100 101 106 109 111 113 118 121 123 125 126 131 132 136 141 146 147 148 149 152 153 156 157 158 159 161 162 169 170 171 172 176 178 179 183 184 187 189 190 191 192 193 194 196 198 201 207 208 210 211 212 213 214 215 219 222 19466 224 0 1 0 1 2 3 5 7 8 9 10 11 14 15 16 17 18 19 20 21 25 29 30 32 35 37 38 39 41 42 43 45 46 48 49 50 52 54 55 57 59 60 62 63 64 66 67 68 70 73 76 77 78 79 80 81 85 87 88 89 91 94 95 96 98 99 100 101 104 106 107 110 113 114 116 119 121 122 125 127 130 133 139 140 143 145 149 154 155 156 158 160 165 166 167 170 171 172 174 175 182 183 184 185 187 190 192 194 197 199 202 205 207 212 215 217 219 220 223 19467 224 0 1 f 19468 224 0 1 0 2 7 9 10 11 12 14 15 16 17 19 21 25 32 34 35 38 39 41 42 43 44 45 46 47 48 51 53 55 56 57 62 63 64 65 66 69 76 79 80 81 82 84 86 87 88 92 98 100 101 102 106 108 110 111 112 113 115 116 119 121 124 126 128 130 131 133 135 138 141 144 147 148 149 150 153 158 160 162 166 169 170 171 172 173 175 177 183 185 187 190 191 192 193 195 199 202 206 207 208 210 212 215 217 218 219 221 222 223 19469 224 0 1 0 1 2 3 6 7 8 9 10 11 12 13 14 15 16 17 19 21 22 23 24 25 27 30 32 33 34 35 37 38 39 41 42 43 44 45 46 47 48 50 51 52 53 54 55 56 57 58 59 61 62 63 64 65 66 69 71 72 73 76 79 80 81 82 84 86 87 88 89 91 92 94 96 97 98 100 101 102 104 105 106 107 108 109 110 111 112 113 114 115 116 118 119 121 123 124 126 127 128 130 131 133 134 135 138 141 142 144 145 147 148 149 150 153 157 158 159 160 162 163 164 165 166 169 170 171 172 173 175 176 177 180 182 183 185 186 187 189 190 191 192 193 195 196 199 200 202 203 205 206 207 208 209 210 211 212 215 216 217 218 219 220 221 222 223 19470 224 0 1 e 19471 224 0 1 e 19472 224 0 1 e 19473 224 0 1 f 19474 224 0 1 e 19475 224 0 1 1 2 6 8 14 15 18 20 21 22 23 24 26 27 31 32 34 37 40 41 48 49 50 51 52 55 56 58 62 65 66 67 68 71 72 73 74 76 78 79 84 85 87 89 90 91 93 95 96 97 98 99 101 104 107 108 111 112 113 115 116 122 123 133 134 135 138 139 142 146 148 152 154 156 158 159 160 163 164 166 169 171 172 180 181 183 188 191 193 194 196 197 198 201 205 206 207 208 210 211 215 216 217 218 219 220 222 19476 224 0 1 f 19477 224 0 1 f 19478 224 0 1 f 19479 224 0 1 f 19480 224 0 1 f 19481 224 0 1 f 19482 224 0 1 1 3 4 7 8 11 12 13 15 18 19 21 22 23 24 28 29 32 33 36 37 39 40 42 43 48 53 54 58 62 64 66 67 68 69 70 71 73 74 75 80 86 87 88 89 90 92 93 94 95 96 98 99 101 102 103 104 105 106 108 109 110 111 114 115 116 117 118 119 121 125 131 134 137 138 140 141 142 144 145 147 148 149 152 153 154 156 158 160 164 166 167 168 169 171 174 179 181 183 185 189 191 193 195 196 197 198 199 200 202 205 206 207 208 209 210 212 213 216 221 223 19483 224 0 1 1 3 4 7 8 11 12 13 15 18 19 21 22 23 24 28 29 32 33 36 37 39 40 42 43 48 53 54 58 62 64 66 67 68 69 70 71 73 74 75 80 86 87 88 89 90 92 93 94 95 96 98 99 101 102 103 104 105 106 108 109 110 111 114 115 116 117 118 119 121 125 131 134 137 138 140 141 142 144 145 147 148 149 152 153 154 156 158 160 164 166 167 168 169 171 174 179 181 183 185 189 191 193 195 196 197 198 199 200 202 205 206 207 208 209 210 212 213 216 221 223 19484 224 0 1 0 2 3 5 6 8 17 19 20 21 23 25 27 28 32 36 37 38 39 43 45 46 47 48 50 51 53 54 56 57 61 62 64 66 67 69 70 71 72 79 80 81 82 84 86 87 89 91 92 95 98 99 101 105 106 109 112 114 115 116 118 121 125 126 127 129 133 134 135 136 141 142 144 145 147 150 151 154 156 157 160 161 162 164 166 167 168 172 174 175 176 178 180 181 182 183 184 185 187 188 189 191 193 194 197 198 202 205 209 210 212 213 215 216 217 218 219 221 223 19485 224 0 1 f 19486 224 0 1 0 6 7 9 10 11 12 18 19 20 21 22 23 24 29 34 35 36 37 38 40 41 43 44 45 48 51 53 54 55 59 63 64 66 67 70 76 77 79 81 82 84 85 88 89 93 94 97 98 99 101 105 106 108 111 112 115 116 117 118 119 120 123 124 128 130 134 136 138 139 140 141 142 143 151 152 154 155 156 158 159 161 162 163 165 169 170 171 172 173 174 176 180 181 187 190 191 193 194 197 198 199 200 201 202 203 208 209 210 213 214 215 218 219 222 223 19487 224 0 1 0 3 5 6 7 8 9 10 11 12 13 14 18 19 20 21 22 23 24 27 28 29 32 33 34 35 36 37 38 40 41 42 43 44 45 46 48 49 51 52 53 54 55 56 57 58 59 60 62 63 64 65 66 67 69 70 72 74 75 76 77 79 80 81 82 83 84 85 86 87 88 89 90 93 94 95 96 97 98 99 100 101 103 105 106 108 110 111 112 115 116 117 118 119 120 123 124 126 127 128 130 131 132 134 136 138 139 140 141 142 143 144 145 149 151 152 153 154 155 156 157 158 159 161 162 163 165 169 170 171 172 173 174 175 176 177 179 180 181 182 183 184 185 187 188 190 191 193 194 195 197 198 199 200 201 202 203 207 208 209 210 211 212 213 214 215 216 217 218 219 222 223 19488 224 1 0 e 19489 224 1 0 e 19490 224 1 0 e 19491 224 1 0 f 19492 224 1 0 e 19493 224 1 0 1 3 4 7 11 12 14 15 17 19 20 23 25 28 30 32 35 37 38 39 43 44 46 47 48 50 51 55 57 62 65 67 68 70 71 74 77 80 84 85 87 88 91 92 93 96 99 100 101 102 105 107 109 112 114 115 118 119 120 121 122 124 126 127 128 129 130 132 134 138 139 140 143 144 146 147 150 153 154 159 164 166 167 169 170 172 173 175 178 179 180 181 182 184 185 186 187 190 191 196 197 200 201 202 203 204 210 212 213 215 216 218 219 221 222 223 19494 224 1 0 f 19495 224 1 0 f 19496 224 1 0 f 19497 224 1 0 f 19498 224 1 0 f 19499 224 1 0 f 19500 224 1 0 1 3 5 7 9 11 12 14 15 16 19 20 21 22 23 24 26 28 29 32 33 36 37 44 49 56 59 61 66 69 71 73 76 77 78 81 82 83 87 88 89 90 91 93 95 97 99 100 101 105 106 110 111 113 114 115 118 120 127 129 130 134 135 136 137 143 147 148 151 152 156 157 161 162 163 165 166 168 170 171 172 174 176 181 189 190 191 192 193 194 195 196 197 201 206 207 211 212 213 217 19501 224 1 0 1 3 5 7 9 11 12 14 15 16 19 20 21 22 23 24 26 28 29 32 33 36 37 44 49 56 59 61 66 69 71 73 76 77 78 81 82 83 87 88 89 90 91 93 95 97 99 100 101 105 106 110 111 113 114 115 118 120 127 129 130 134 135 136 137 143 147 148 151 152 156 157 161 162 163 165 166 168 170 171 172 174 176 181 189 190 191 192 193 194 195 196 197 201 206 207 211 212 213 217 19502 224 1 0 0 1 3 4 7 9 11 12 13 14 20 21 25 26 27 29 32 34 35 36 38 40 41 43 44 45 49 52 53 56 64 66 67 68 69 71 72 73 74 75 76 78 79 83 85 88 90 92 95 96 98 103 105 106 107 109 110 115 116 117 119 121 125 127 132 133 135 136 138 139 140 141 145 146 148 151 160 161 162 164 168 171 173 174 175 176 177 178 179 182 184 185 186 187 194 196 198 199 200 206 209 210 211 213 215 216 218 220 19503 224 1 0 f 19504 224 1 0 0 3 6 11 12 14 17 18 19 20 22 25 26 33 35 37 39 41 43 47 54 55 56 60 61 64 65 67 68 70 71 74 76 81 83 84 86 87 88 92 93 94 95 97 98 103 104 110 111 114 117 122 126 127 129 130 131 134 135 137 139 142 143 145 146 147 148 152 153 155 158 159 161 162 164 165 168 169 174 175 177 178 181 182 183 184 186 188 189 191 197 198 199 200 204 206 209 210 212 213 215 216 219 221 222 223 19505 224 1 0 0 3 6 8 9 11 12 14 17 18 19 20 22 23 24 25 26 27 28 30 31 32 33 35 37 39 40 41 42 43 45 46 47 49 52 54 55 56 57 58 59 60 61 62 64 65 67 68 70 71 74 76 77 78 79 80 81 82 83 84 86 87 88 90 91 92 93 94 95 97 98 99 100 101 103 104 107 110 111 112 114 115 116 117 118 119 121 122 124 125 126 127 128 129 130 131 134 135 136 137 139 140 141 142 143 145 146 147 148 150 152 153 154 155 158 159 160 161 162 163 164 165 168 169 171 174 175 177 178 181 182 183 184 186 187 188 189 191 193 196 197 198 199 200 202 204 205 206 207 208 209 210 212 213 214 215 216 218 219 221 222 223 19506 224 1 0 e 19507 224 1 0 e 19508 224 1 0 e 19509 224 1 0 f 19510 224 1 0 e 19511 224 1 0 3 5 6 7 9 11 12 14 15 16 23 26 27 28 29 30 32 43 44 46 47 48 49 51 53 54 55 57 58 61 64 65 66 68 69 70 76 77 78 80 84 86 88 89 93 94 96 97 98 99 100 102 104 110 112 115 116 118 119 123 128 129 130 131 133 134 138 140 141 142 143 147 148 150 151 152 153 154 157 158 160 161 162 164 165 166 167 177 185 186 188 190 191 193 195 196 198 200 202 203 204 205 208 209 211 213 216 217 218 219 221 222 223 19512 224 1 0 f 19513 224 1 0 f 19514 224 1 0 f 19515 224 1 0 f 19516 224 1 0 f 19517 224 1 0 f 19518 224 1 0 0 1 2 4 6 7 12 13 14 16 17 18 19 20 26 27 31 35 36 38 42 45 46 47 48 49 50 51 52 53 54 57 60 61 65 68 69 70 73 74 76 79 89 90 95 97 98 100 101 102 103 108 109 110 116 117 118 120 121 125 126 127 128 129 130 132 133 137 140 144 145 146 147 148 149 151 152 153 154 156 157 158 160 161 162 163 164 166 167 172 173 174 175 176 178 179 183 184 187 195 196 198 200 202 203 204 206 207 208 209 212 213 215 218 219 220 221 223 19519 224 1 0 0 1 2 4 6 7 12 13 14 16 17 18 19 20 26 27 31 35 36 38 42 45 46 47 48 49 50 51 52 53 54 57 60 61 65 68 69 70 73 74 76 79 89 90 95 97 98 100 101 102 103 108 109 110 116 117 118 120 121 125 126 127 128 129 130 132 133 137 140 144 145 146 147 148 149 151 152 153 154 156 157 158 160 161 162 163 164 166 167 172 173 174 175 176 178 179 183 184 187 195 196 198 200 202 203 204 206 207 208 209 212 213 215 218 219 220 221 223 19520 224 1 0 1 2 3 4 5 7 9 14 16 18 19 21 22 23 25 26 28 31 34 38 42 43 44 45 47 49 50 51 52 53 54 57 58 61 66 69 70 71 73 75 77 78 79 80 83 87 88 89 90 92 94 98 99 101 102 107 108 110 111 112 115 117 118 120 121 122 123 124 126 128 129 134 135 138 141 144 145 149 150 152 153 154 155 157 160 161 164 170 171 172 175 176 182 185 186 188 190 192 194 195 197 199 202 204 207 208 209 213 216 218 220 221 222 223 19521 224 1 0 f 19522 224 1 0 0 1 2 4 7 8 12 18 22 24 25 26 28 29 31 33 37 39 43 44 45 50 51 53 54 56 57 58 61 63 64 72 73 75 77 79 81 83 84 86 89 90 91 92 94 95 96 97 98 99 104 105 108 109 112 113 114 117 118 120 121 125 127 128 130 134 138 142 143 144 145 148 150 153 154 155 156 158 159 161 163 167 168 172 173 175 176 177 178 181 182 183 184 185 187 190 191 192 194 196 198 199 200 202 207 208 212 214 215 219 220 223 19523 224 1 0 0 1 2 4 5 6 7 8 9 10 12 13 17 18 22 23 24 25 26 27 28 29 31 33 35 37 39 41 43 44 45 46 48 50 51 52 53 54 55 56 57 58 59 61 62 63 64 66 68 69 70 72 73 75 76 77 79 80 81 82 83 84 86 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 112 113 114 116 117 118 120 121 122 123 125 127 128 130 131 132 134 135 136 137 138 141 142 143 144 145 148 149 150 153 154 155 156 157 158 159 161 163 164 167 168 170 171 172 173 174 175 176 177 178 181 182 183 184 185 186 187 189 190 191 192 193 194 196 197 198 199 200 202 204 206 207 208 209 210 212 213 214 215 216 219 220 221 222 223 19524 224 1 0 e 19525 224 1 0 e 19526 224 1 0 e 19527 224 1 0 f 19528 224 1 0 e 19529 224 1 0 3 5 7 8 9 10 11 13 18 19 22 24 28 32 33 36 37 38 39 40 41 44 45 46 49 51 53 54 58 60 62 65 66 67 68 69 70 72 74 78 79 81 84 86 88 91 92 95 97 98 99 100 101 104 106 108 109 110 111 112 115 116 118 119 120 122 124 125 127 128 130 131 136 140 143 144 145 147 150 151 152 153 155 156 157 158 159 161 163 165 166 167 168 171 172 173 174 175 176 178 180 181 183 184 185 188 192 193 194 197 201 204 207 210 214 216 218 219 220 221 222 223 19530 224 1 0 f 19531 224 1 0 f 19532 224 1 0 f 19533 224 1 0 f 19534 224 1 0 f 19535 224 1 0 f 19536 224 1 0 0 1 2 3 5 8 9 16 17 18 19 23 25 26 28 37 38 39 43 44 45 47 48 52 53 56 60 61 62 63 67 70 71 72 73 75 76 77 80 81 82 83 84 85 86 87 91 94 95 96 98 99 100 102 103 106 108 110 111 114 117 118 119 122 123 125 126 132 133 137 138 144 145 146 148 149 151 152 153 154 156 158 159 160 161 163 164 171 172 173 175 176 177 180 183 188 189 191 192 194 195 196 201 206 210 212 214 221 222 19537 224 1 0 0 1 2 3 5 8 9 16 17 18 19 23 25 26 28 37 38 39 43 44 45 47 48 52 53 56 60 61 62 63 67 70 71 72 73 75 76 77 80 81 82 83 84 85 86 87 91 94 95 96 98 99 100 102 103 106 108 110 111 114 117 118 119 122 123 125 126 132 133 137 138 144 145 146 148 149 151 152 153 154 156 158 159 160 161 163 164 171 172 173 175 176 177 180 183 188 189 191 192 194 195 196 201 206 210 212 214 221 222 19538 224 1 0 1 4 6 9 10 11 13 14 15 16 17 19 20 22 26 27 29 30 34 36 38 39 41 42 43 45 46 54 55 56 57 58 59 61 63 64 67 68 70 75 79 83 84 86 88 89 93 97 99 101 103 107 108 109 113 115 116 119 120 121 124 125 126 128 135 136 137 139 141 142 143 144 146 147 150 154 157 161 162 165 168 169 170 172 173 174 177 179 180 181 189 190 192 194 195 200 203 215 216 217 219 220 221 223 19539 224 1 0 f 19540 224 1 0 2 3 4 5 7 9 13 14 18 19 20 25 28 29 30 33 36 38 39 46 48 49 52 53 54 63 65 67 70 72 74 75 76 77 79 80 81 83 86 87 88 92 93 99 100 104 107 109 111 112 113 114 116 117 119 122 127 128 129 132 133 134 135 136 141 144 145 147 148 149 151 156 157 161 162 165 169 170 171 172 173 176 177 179 181 182 183 185 187 188 194 195 197 199 200 201 202 204 206 207 208 210 212 220 221 19541 224 1 0 2 3 4 5 6 7 9 12 13 14 15 16 17 18 19 20 21 22 23 25 28 29 30 32 33 34 36 37 38 39 41 46 47 48 49 50 51 52 53 54 55 56 59 60 61 63 65 67 68 70 72 74 75 76 77 79 80 81 83 84 86 87 88 90 92 93 97 99 100 102 104 105 106 107 109 110 111 112 113 114 115 116 117 118 119 120 121 122 124 125 126 127 128 129 130 131 132 133 134 135 136 138 140 141 144 145 147 148 149 150 151 152 153 155 156 157 161 162 165 166 169 170 171 172 173 174 176 177 179 180 181 182 183 184 185 187 188 189 190 191 192 193 194 195 197 199 200 201 202 203 204 205 206 207 208 210 211 212 217 220 221 223 19542 224 1 0 e 19543 224 1 0 e 19544 224 1 0 e 19545 224 1 0 f 19546 224 1 0 e 19547 224 1 0 2 4 8 12 13 14 15 19 20 21 23 24 27 28 29 31 32 35 36 37 39 40 41 42 43 44 45 46 47 50 51 53 54 58 64 65 67 69 70 72 73 79 82 83 85 86 87 89 90 94 96 97 100 102 104 106 108 112 113 114 115 116 117 118 119 120 121 124 126 127 131 132 135 136 139 140 142 143 145 146 148 151 153 156 160 161 163 165 169 170 173 174 175 176 177 178 179 182 184 186 187 188 189 191 192 194 195 200 202 205 206 209 211 216 217 219 220 222 223 19548 224 1 0 f 19549 224 1 0 f 19550 224 1 0 f 19551 224 1 0 f 19552 224 1 0 f 19553 224 1 0 f 19554 224 1 0 3 5 6 9 10 11 13 14 15 18 20 23 26 27 29 31 32 33 34 36 39 42 43 46 47 48 50 51 52 59 60 61 62 63 64 65 69 71 72 74 76 78 80 81 83 85 86 87 88 90 91 92 93 94 95 99 100 101 103 104 107 108 111 120 121 123 124 129 130 136 137 140 144 145 146 149 151 152 153 154 155 156 158 160 161 162 166 170 172 173 175 176 178 179 182 185 186 188 189 190 191 192 193 198 200 202 211 212 214 215 216 217 219 220 221 222 223 19555 224 1 0 3 5 6 9 10 11 13 14 15 18 20 23 26 27 29 31 32 33 34 36 39 42 43 46 47 48 50 51 52 59 60 61 62 63 64 65 69 71 72 74 76 78 80 81 83 85 86 87 88 90 91 92 93 94 95 99 100 101 103 104 107 108 111 120 121 123 124 129 130 136 137 140 144 145 146 149 151 152 153 154 155 156 158 160 161 162 166 170 172 173 175 176 178 179 182 185 186 188 189 190 191 192 193 198 200 202 211 212 214 215 216 217 219 220 221 222 223 19556 224 1 0 0 3 4 7 8 15 16 17 18 20 21 23 24 25 26 27 28 29 30 37 43 44 45 46 47 48 51 53 54 55 57 58 60 62 64 66 69 73 76 77 79 83 86 87 88 90 91 92 93 94 95 96 97 98 100 102 105 106 108 109 113 115 116 117 119 122 125 132 138 141 142 143 144 145 147 148 149 150 154 155 158 159 162 164 167 168 171 173 174 175 176 178 179 183 184 188 190 192 193 195 197 198 201 204 205 207 210 212 215 216 217 218 219 221 222 19557 224 1 0 f 19558 224 1 0 0 2 5 6 7 8 9 11 12 13 14 16 17 18 19 21 24 26 27 29 34 35 36 37 38 39 40 41 43 44 46 47 48 49 52 53 59 61 63 64 66 67 69 70 71 72 74 77 81 82 84 86 88 92 93 95 98 100 101 103 104 108 110 113 114 115 116 119 120 122 123 126 129 130 136 138 139 140 141 144 145 147 152 154 156 157 158 161 162 163 165 167 170 173 174 176 177 178 182 184 185 186 187 190 191 193 194 196 200 202 206 209 210 211 218 219 220 221 222 223 19559 224 1 0 0 1 2 5 6 7 8 9 10 11 12 13 14 16 17 18 19 20 21 22 24 25 26 27 28 29 30 34 35 36 37 38 39 40 41 43 44 45 46 47 48 49 50 52 53 54 57 59 61 62 63 64 65 66 67 69 70 71 72 74 75 77 79 80 81 82 84 86 88 90 92 93 95 98 99 100 101 103 104 108 110 112 113 114 115 116 119 120 121 122 123 126 127 129 130 132 133 134 135 136 138 139 140 141 142 144 145 147 148 152 153 154 155 156 157 158 159 160 161 162 163 165 167 170 173 174 175 176 177 178 179 182 183 184 185 186 187 188 189 190 191 192 193 194 196 198 200 202 204 206 207 209 210 211 213 214 215 217 218 219 220 221 222 223 19560 224 1 1 e 19561 224 1 1 e 19562 224 1 1 e 19563 224 1 1 f 19564 224 1 1 e 19565 224 1 1 0 2 3 4 5 6 7 10 12 15 17 18 19 20 22 23 25 27 33 36 38 39 40 41 47 50 52 55 58 59 60 61 64 65 67 68 70 71 73 75 77 79 80 83 84 86 88 91 93 94 100 101 104 109 112 113 114 115 117 118 122 123 124 125 130 134 136 138 139 140 143 146 148 149 150 152 153 154 155 156 160 162 164 165 166 168 169 171 173 174 176 177 178 179 181 189 196 198 199 200 202 204 205 206 207 208 209 210 214 215 219 221 223 19566 224 1 1 f 19567 224 1 1 f 19568 224 1 1 f 19569 224 1 1 f 19570 224 1 1 f 19571 224 1 1 f 19572 224 1 1 0 1 3 5 9 10 14 16 17 20 23 24 26 28 29 30 31 32 34 40 42 44 45 48 49 50 51 55 60 63 64 65 66 67 72 75 76 77 79 80 83 85 86 87 92 93 94 95 96 97 98 99 105 108 112 113 116 119 120 121 123 126 131 132 138 139 140 141 143 144 145 146 152 153 156 158 160 161 162 166 167 168 170 171 178 179 180 183 184 185 187 188 189 191 192 197 201 202 203 208 209 211 217 220 222 223 19573 224 1 1 0 1 3 5 9 10 14 16 17 20 23 24 26 28 29 30 31 32 34 40 42 44 45 48 49 50 51 55 60 63 64 65 66 67 72 75 76 77 79 80 83 85 86 87 92 93 94 95 96 97 98 99 105 108 112 113 116 119 120 121 123 126 131 132 138 139 140 141 143 144 145 146 152 153 156 158 160 161 162 166 167 168 170 171 178 179 180 183 184 185 187 188 189 191 192 197 201 202 203 208 209 211 217 220 222 223 19574 224 1 1 0 7 10 11 12 13 15 16 18 20 24 25 27 31 32 33 35 37 38 39 45 49 50 56 57 58 69 73 74 75 77 79 80 82 90 91 92 93 98 99 101 103 104 105 106 108 110 111 112 113 117 118 119 122 127 128 130 133 135 136 139 140 142 146 147 148 150 152 153 156 157 159 162 169 172 174 178 180 181 182 183 189 194 198 199 201 205 207 213 215 217 220 222 19575 224 1 1 f 19576 224 1 1 0 1 2 7 10 11 15 16 17 20 21 22 23 24 27 28 33 34 35 37 38 39 41 42 43 46 48 51 54 56 60 61 62 64 65 68 69 72 73 75 80 81 82 85 86 87 88 91 92 94 95 98 99 103 106 108 110 112 113 114 120 121 123 131 132 133 134 135 137 139 140 143 144 148 150 157 158 159 162 163 166 172 173 175 179 180 185 186 187 189 190 191 193 194 197 198 202 203 205 206 207 209 210 214 215 216 218 221 19577 224 1 1 0 1 2 3 4 5 7 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 27 28 30 31 33 34 35 36 37 38 39 40 41 42 43 44 46 47 48 50 51 52 54 56 58 60 61 62 64 65 66 67 68 69 71 72 73 74 75 76 77 78 79 80 81 82 85 86 87 88 91 92 94 95 96 98 99 101 103 105 106 108 109 110 112 113 114 115 116 117 118 119 120 121 122 123 124 126 127 128 131 132 133 134 135 137 139 140 142 143 144 147 148 150 152 153 154 155 157 158 159 161 162 163 165 166 167 168 171 172 173 175 177 178 179 180 181 183 184 185 186 187 188 189 190 191 193 194 195 196 197 198 199 202 203 205 206 207 208 209 210 211 213 214 215 216 218 219 221 222 223 19578 224 1 1 e 19579 224 1 1 e 19580 224 1 1 e 19581 224 1 1 f 19582 224 1 1 e 19583 224 1 1 4 6 9 11 12 13 14 15 16 17 18 20 21 23 24 28 33 36 38 44 47 51 52 53 54 55 56 59 61 62 63 68 70 76 77 80 81 83 85 86 91 94 95 96 99 102 103 104 107 109 110 112 118 120 121 123 125 126 127 129 130 131 133 134 135 138 141 142 143 144 145 149 150 151 152 153 154 156 157 160 161 162 163 164 165 166 167 168 169 178 186 189 190 191 192 193 194 195 197 198 200 202 205 206 207 211 212 213 218 221 19584 224 1 1 f 19585 224 1 1 f 19586 224 1 1 f 19587 224 1 1 f 19588 224 1 1 f 19589 224 1 1 f 19590 224 1 1 0 1 2 4 7 8 9 12 13 15 16 20 23 24 26 28 29 31 32 34 35 38 42 43 46 52 53 55 58 62 65 66 67 69 72 79 81 84 85 86 88 89 90 93 95 96 98 99 105 107 109 110 111 112 114 115 117 120 124 125 126 127 129 130 131 132 134 144 149 153 156 158 161 164 166 168 170 172 173 174 175 178 182 186 188 189 190 191 197 198 203 206 207 209 211 213 215 217 219 220 222 19591 224 1 1 0 1 2 4 7 8 9 12 13 15 16 20 23 24 26 28 29 31 32 34 35 38 42 43 46 52 53 55 58 62 65 66 67 69 72 79 81 84 85 86 88 89 90 93 95 96 98 99 105 107 109 110 111 112 114 115 117 120 124 125 126 127 129 130 131 132 134 144 149 153 156 158 161 164 166 168 170 172 173 174 175 178 182 186 188 189 190 191 197 198 203 206 207 209 211 213 215 217 219 220 222 19592 224 1 1 2 3 8 9 12 16 22 23 26 29 31 32 34 36 38 39 40 43 48 49 50 53 55 56 57 58 60 63 64 66 68 69 71 72 74 76 78 79 80 81 85 86 88 89 90 96 98 99 100 101 103 113 114 115 116 117 120 122 124 127 133 135 137 139 141 143 144 145 148 149 150 152 153 154 155 159 161 163 164 165 168 169 170 174 178 179 181 184 186 187 190 191 193 194 196 198 200 201 202 204 205 206 213 214 215 216 217 218 221 223 19593 224 1 1 f 19594 224 1 1 0 5 6 8 9 10 11 13 14 15 20 21 23 24 27 29 30 31 33 35 36 39 43 44 48 49 50 51 52 54 56 59 62 68 70 72 74 75 76 78 79 81 83 84 87 89 90 91 93 98 100 101 103 108 110 116 117 118 120 121 122 123 127 128 130 131 132 136 137 139 143 144 146 147 149 150 151 152 153 154 158 159 160 161 162 163 166 171 172 173 175 178 181 184 187 188 190 191 193 195 196 200 201 202 203 204 206 207 208 209 213 214 220 19595 224 1 1 0 1 3 5 6 8 9 10 11 12 13 14 15 16 17 20 21 22 23 24 25 26 27 29 30 31 32 33 35 36 39 40 41 43 44 45 47 48 49 50 51 52 54 55 56 58 59 60 61 62 63 65 66 67 68 70 72 74 75 76 77 78 79 81 83 84 85 86 87 89 90 91 93 94 95 97 98 99 100 101 103 104 105 106 107 108 109 110 112 115 116 117 118 120 121 122 123 127 128 129 130 131 132 133 134 136 137 139 143 144 145 146 147 149 150 151 152 153 154 155 158 159 160 161 162 163 166 168 171 172 173 174 175 176 177 178 180 181 184 187 188 190 191 192 193 195 196 197 198 200 201 202 203 204 205 206 207 208 209 213 214 215 220 221 222 19596 224 1 1 e 19597 224 1 1 e 19598 224 1 1 e 19599 224 1 1 f 19600 224 1 1 e 19601 224 1 1 0 4 6 9 11 13 14 15 19 21 25 26 27 28 30 32 34 35 36 38 42 43 45 46 49 51 52 53 56 57 58 61 62 65 66 69 75 77 79 80 82 83 85 87 88 94 95 97 98 100 102 104 106 112 115 118 120 122 123 124 126 129 130 131 133 136 138 145 147 150 151 152 153 154 155 157 158 161 163 165 166 168 169 170 172 174 176 177 183 184 186 188 189 190 195 196 199 200 203 209 210 212 213 215 220 221 222 19602 224 1 1 f 19603 224 1 1 f 19604 224 1 1 f 19605 224 1 1 f 19606 224 1 1 f 19607 224 1 1 f 19608 224 1 1 0 1 2 4 5 7 8 9 11 12 13 14 15 17 18 20 22 23 24 25 27 30 31 37 38 45 47 48 51 53 54 56 57 64 66 67 69 71 74 75 78 81 83 84 87 89 94 95 96 97 98 102 103 104 105 110 111 114 119 124 127 128 132 137 138 140 144 145 149 150 154 160 162 163 164 167 168 169 171 173 176 177 179 183 184 186 188 190 191 192 193 194 196 197 199 200 201 202 204 206 208 212 213 218 19609 224 1 1 0 1 2 4 5 7 8 9 11 12 13 14 15 17 18 20 22 23 24 25 27 30 31 37 38 45 47 48 51 53 54 56 57 64 66 67 69 71 74 75 78 81 83 84 87 89 94 95 96 97 98 102 103 104 105 110 111 114 119 124 127 128 132 137 138 140 144 145 149 150 154 160 162 163 164 167 168 169 171 173 176 177 179 183 184 186 188 190 191 192 193 194 196 197 199 200 201 202 204 206 208 212 213 218 19610 224 1 1 2 10 11 16 17 18 20 22 25 26 27 32 33 34 35 37 41 43 45 48 50 51 53 55 58 59 60 63 65 66 68 69 70 72 74 78 83 85 86 87 89 93 96 97 98 99 100 101 102 103 105 107 111 112 113 114 115 116 117 118 120 122 123 124 127 135 137 138 139 140 143 146 148 150 151 152 153 154 155 160 161 162 165 167 168 170 171 172 178 180 181 184 185 187 189 191 192 199 200 201 202 206 207 214 215 217 218 219 220 222 19611 224 1 1 f 19612 224 1 1 0 1 2 3 5 6 8 9 10 12 14 16 18 20 26 28 29 30 32 42 44 45 46 47 48 50 51 52 54 57 58 60 62 64 66 68 70 71 73 77 78 81 86 87 89 90 91 93 96 98 99 101 102 103 105 107 108 113 114 116 117 120 123 124 125 127 128 129 130 132 137 140 141 142 145 146 148 149 150 151 153 154 156 157 159 160 161 163 165 166 167 172 174 178 181 183 184 185 186 188 191 194 195 197 198 199 200 203 204 205 210 211 213 214 215 216 217 219 220 221 222 19613 224 1 1 0 1 2 3 5 6 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 26 28 29 30 32 33 34 35 37 41 42 43 44 45 46 47 48 49 50 51 52 53 54 57 58 60 62 64 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 84 85 86 87 89 90 91 92 93 94 96 98 99 101 102 103 104 105 107 108 109 113 114 116 117 119 120 123 124 125 127 128 129 130 132 134 137 138 139 140 141 142 144 145 146 148 149 150 151 153 154 156 157 158 159 160 161 163 164 165 166 167 170 171 172 173 174 175 177 178 179 181 182 183 184 185 186 188 189 191 193 194 195 197 198 199 200 201 203 204 205 206 207 210 211 213 214 215 216 217 219 220 221 222 19614 224 1 1 e 19615 224 1 1 e 19616 224 1 1 e 19617 224 1 1 f 19618 224 1 1 e 19619 224 1 1 0 1 6 7 8 12 19 20 22 23 26 29 32 33 36 38 39 44 45 46 50 52 53 55 56 57 60 61 63 65 71 72 73 76 78 80 81 85 88 89 90 91 94 95 97 101 103 104 107 108 112 113 114 118 121 122 123 124 125 126 128 130 131 133 134 140 142 143 145 147 150 152 153 155 156 157 161 164 166 168 169 170 171 175 177 180 182 183 186 190 194 196 197 198 199 200 204 205 206 208 210 211 212 213 214 216 217 218 220 222 19620 224 1 1 f 19621 224 1 1 f 19622 224 1 1 f 19623 224 1 1 f 19624 224 1 1 f 19625 224 1 1 f 19626 224 1 1 0 1 2 3 5 6 10 11 12 14 16 18 20 23 24 26 28 31 33 34 35 36 37 39 40 42 43 45 50 52 55 56 57 59 63 66 68 71 72 73 74 76 78 79 80 81 83 87 89 90 91 94 95 97 98 107 108 110 111 112 114 116 120 121 126 127 129 131 133 134 140 143 144 145 146 150 153 163 168 169 170 173 175 176 183 185 190 191 192 194 197 198 200 202 203 205 206 210 211 212 215 217 219 222 19627 224 1 1 0 1 2 3 5 6 10 11 12 14 16 18 20 23 24 26 28 31 33 34 35 36 37 39 40 42 43 45 50 52 55 56 57 59 63 66 68 71 72 73 74 76 78 79 80 81 83 87 89 90 91 94 95 97 98 107 108 110 111 112 114 116 120 121 126 127 129 131 133 134 140 143 144 145 146 150 153 163 168 169 170 173 175 176 183 185 190 191 192 194 197 198 200 202 203 205 206 210 211 212 215 217 219 222 19628 224 1 1 0 8 14 16 20 21 23 25 26 27 30 32 36 37 38 41 42 46 47 48 51 52 53 54 56 60 62 63 64 70 73 74 77 81 82 84 85 86 87 89 95 97 99 100 106 110 113 114 119 121 122 123 124 126 128 131 132 135 136 137 139 144 146 148 149 152 154 155 157 160 163 164 165 166 167 168 170 171 178 183 186 187 189 193 194 196 197 200 201 205 206 207 209 210 215 216 218 223 19629 224 1 1 f 19630 224 1 1 3 9 10 11 12 13 16 18 19 20 22 23 27 28 29 31 33 34 38 39 45 46 47 50 52 53 57 58 59 62 63 65 69 71 73 75 76 78 80 81 82 86 87 88 89 90 93 96 98 103 104 105 106 107 108 110 111 113 115 116 117 119 120 123 124 125 127 130 131 132 134 135 136 139 140 142 145 146 148 151 152 153 154 155 159 160 164 167 168 169 170 171 174 177 178 181 184 185 186 190 191 192 195 196 197 203 204 209 210 211 212 213 214 215 216 217 218 221 19631 224 1 1 1 3 5 6 7 8 9 10 11 12 13 14 16 17 18 19 20 22 23 25 26 27 28 29 31 32 33 34 38 39 42 45 46 47 48 50 52 53 55 56 57 58 59 61 62 63 65 66 69 70 71 72 73 75 76 78 80 81 82 83 86 87 88 89 90 91 92 93 96 98 100 102 103 104 105 106 107 108 109 110 111 113 114 115 116 117 119 120 121 123 124 125 127 129 130 131 132 134 135 136 137 138 139 140 142 144 145 146 148 150 151 152 153 154 155 156 159 160 161 163 164 167 168 169 170 171 174 176 177 178 179 180 181 182 184 185 186 188 190 191 192 194 195 196 197 199 200 201 203 204 207 208 209 210 211 212 213 214 215 216 217 218 221 223 19632 247 0 0 e 19633 247 0 0 e 19634 247 0 0 e 19635 247 0 0 f 19636 247 0 0 e 19637 247 0 0 3 4 5 6 7 10 11 12 14 16 18 20 21 22 24 28 29 30 36 37 43 44 45 50 53 54 55 56 59 63 70 71 72 74 78 79 80 81 83 84 85 86 87 90 93 95 99 100 102 103 104 107 108 110 113 115 116 118 120 122 125 127 129 130 133 135 138 139 140 141 143 144 145 146 147 149 150 153 155 156 157 158 161 162 163 165 166 167 169 170 178 179 180 181 182 184 186 189 190 191 195 198 199 200 204 206 207 208 209 210 211 212 213 214 217 218 220 221 225 227 228 229 230 231 233 240 241 242 243 244 245 19638 247 0 0 f 19639 247 0 0 f 19640 247 0 0 f 19641 247 0 0 f 19642 247 0 0 f 19643 247 0 0 f 19644 247 0 0 0 2 3 5 8 9 12 16 17 18 22 23 25 28 31 32 33 34 36 37 38 39 40 41 42 43 50 55 57 65 68 71 74 75 76 77 78 79 81 83 85 87 88 89 94 95 103 104 113 116 117 119 123 124 129 130 131 134 135 136 139 140 141 143 144 145 147 149 150 151 154 156 158 160 161 165 167 169 170 171 172 174 175 178 179 181 182 186 187 188 191 194 199 200 202 203 204 205 210 212 213 214 217 219 222 224 225 226 228 231 232 233 234 235 236 239 244 246 19645 247 0 0 0 2 3 5 8 9 12 16 17 18 22 23 25 28 31 32 33 34 36 37 38 39 40 41 42 43 50 55 57 65 68 71 74 75 76 77 78 79 81 83 85 87 88 89 94 95 103 104 113 116 117 119 123 124 129 130 131 134 135 136 139 140 141 143 144 145 147 149 150 151 154 156 158 160 161 165 167 169 170 171 172 174 175 178 179 181 182 186 187 188 191 194 199 200 202 203 204 205 210 212 213 214 217 219 222 224 225 226 228 231 232 233 234 235 236 239 244 246 19646 247 0 0 2 6 7 9 10 11 12 15 20 21 22 23 25 27 28 29 35 36 38 41 43 45 46 47 48 51 52 53 54 56 58 59 63 64 65 67 72 73 76 78 79 82 85 86 89 91 97 101 102 104 108 112 113 114 115 116 119 122 124 126 129 130 132 133 134 138 139 140 145 147 149 150 151 153 156 157 160 162 163 164 168 174 175 178 179 181 182 185 186 188 190 191 194 196 197 198 199 201 203 207 208 210 211 212 213 216 218 219 221 222 223 230 231 235 237 238 241 245 246 19647 247 0 0 f 19648 247 0 0 1 2 3 6 8 10 11 12 14 18 20 21 22 23 25 29 32 33 38 41 46 47 49 50 52 53 55 56 59 61 64 65 66 69 71 72 73 74 76 77 78 81 82 84 85 87 89 90 91 101 104 106 107 108 109 112 113 114 115 116 117 120 125 127 129 131 132 135 136 139 140 141 143 144 145 147 148 149 151 153 154 155 156 161 165 167 168 169 170 171 173 174 176 178 179 182 184 185 187 189 190 191 195 196 198 199 202 203 205 206 208 209 214 216 217 218 220 221 222 226 228 229 231 234 235 236 237 239 240 241 243 244 245 19649 247 0 0 0 1 2 3 4 6 7 8 10 11 12 13 14 16 18 19 20 21 22 23 25 28 29 30 31 32 33 34 38 39 40 41 43 44 46 47 48 49 50 51 52 53 55 56 57 58 59 61 62 63 64 65 66 67 69 70 71 72 73 74 76 77 78 81 82 84 85 86 87 89 90 91 92 93 96 99 100 101 102 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 120 121 123 125 127 129 131 132 135 136 137 138 139 140 141 143 144 145 147 148 149 151 152 153 154 155 156 158 159 161 162 163 165 167 168 169 170 171 173 174 176 178 179 181 182 184 185 186 187 188 189 190 191 192 195 196 197 198 199 202 203 204 205 206 208 209 210 212 214 216 217 218 219 220 221 222 225 226 227 228 229 231 234 235 236 237 238 239 240 241 243 244 245 246 19650 247 0 0 e 19651 247 0 0 e 19652 247 0 0 e 19653 247 0 0 f 19654 247 0 0 e 19655 247 0 0 6 7 8 11 12 15 16 18 19 21 22 24 26 27 28 30 31 32 33 37 38 39 42 45 51 53 58 60 61 63 64 67 70 71 73 75 76 77 80 85 87 95 96 98 100 101 104 105 108 110 111 112 113 114 116 119 120 121 128 130 131 134 135 139 140 142 143 145 147 149 150 155 156 157 158 159 160 161 164 168 169 172 173 176 179 183 185 190 194 196 197 199 200 201 203 204 206 208 213 214 215 219 220 224 227 229 231 232 233 234 237 238 240 19656 247 0 0 f 19657 247 0 0 f 19658 247 0 0 f 19659 247 0 0 f 19660 247 0 0 f 19661 247 0 0 f 19662 247 0 0 0 1 2 4 9 10 11 12 13 16 17 19 20 21 23 25 28 29 30 31 32 33 37 38 40 41 43 45 49 53 55 56 57 59 61 64 65 66 67 69 73 74 75 79 80 81 84 87 89 91 92 93 94 96 97 101 103 104 106 108 111 116 117 121 122 124 125 126 128 130 135 136 140 144 146 147 149 151 152 154 157 158 159 160 161 164 167 168 172 174 175 176 178 182 185 186 187 188 189 190 191 193 194 200 202 203 204 206 207 208 209 212 214 219 221 222 223 224 225 228 230 231 232 235 236 238 239 240 243 19663 247 0 0 0 1 2 4 9 10 11 12 13 16 17 19 20 21 23 25 28 29 30 31 32 33 37 38 40 41 43 45 49 53 55 56 57 59 61 64 65 66 67 69 73 74 75 79 80 81 84 87 89 91 92 93 94 96 97 101 103 104 106 108 111 116 117 121 122 124 125 126 128 130 135 136 140 144 146 147 149 151 152 154 157 158 159 160 161 164 167 168 172 174 175 176 178 182 185 186 187 188 189 190 191 193 194 200 202 203 204 206 207 208 209 212 214 219 221 222 223 224 225 228 230 231 232 235 236 238 239 240 243 19664 247 0 0 0 1 2 3 4 5 7 8 10 14 15 21 24 25 26 27 31 32 33 34 35 36 38 41 42 43 45 46 47 51 52 53 55 59 61 62 64 68 70 72 73 74 77 78 79 80 83 84 85 86 88 92 93 94 95 100 103 104 106 109 113 117 118 121 122 124 125 126 130 134 136 137 138 139 140 144 150 151 153 154 156 157 158 162 163 164 165 168 171 173 174 178 179 180 181 183 184 187 189 191 196 197 198 199 200 204 206 208 209 210 211 212 214 215 216 217 218 220 224 225 226 227 232 233 234 235 237 238 240 241 243 245 246 19665 247 0 0 f 19666 247 0 0 1 2 3 4 9 11 13 15 18 20 21 24 26 27 28 29 30 32 33 35 39 42 43 46 47 48 49 50 51 52 55 57 58 60 61 64 65 71 72 73 74 77 78 79 80 81 82 83 85 86 87 88 89 90 91 92 95 100 103 105 107 108 110 117 120 124 127 128 131 132 133 134 136 141 142 143 147 151 152 153 157 161 164 166 169 170 171 172 173 174 177 181 184 185 186 187 188 191 195 196 197 200 203 205 207 208 209 212 213 214 215 216 218 220 221 223 225 226 228 231 232 233 234 236 239 245 246 19667 247 0 0 0 1 2 3 4 5 6 9 11 13 14 15 16 17 18 20 21 24 25 26 27 28 29 30 32 33 34 35 37 39 41 42 43 45 46 47 48 49 50 51 52 53 55 56 57 58 60 61 64 65 66 68 70 71 72 73 74 76 77 78 79 80 81 82 83 85 86 87 88 89 90 91 92 93 95 97 98 100 101 102 103 105 106 107 108 110 111 112 115 116 117 119 120 121 122 123 124 125 126 127 128 129 131 132 133 134 135 136 140 141 142 143 145 147 148 149 151 152 153 154 156 157 159 161 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 181 182 183 184 185 186 187 188 191 192 194 195 196 197 200 202 203 205 207 208 209 212 213 214 215 216 217 218 220 221 223 224 225 226 227 228 229 231 232 233 234 235 236 239 242 243 245 246 19668 247 0 0 e 19669 247 0 0 e 19670 247 0 0 e 19671 247 0 0 f 19672 247 0 0 e 19673 247 0 0 2 5 6 7 8 9 11 14 15 16 18 20 21 22 28 29 31 32 33 36 39 41 47 48 49 52 54 57 58 60 63 65 68 70 74 76 77 79 80 81 83 85 87 88 90 91 92 95 96 97 99 104 105 106 107 108 111 113 114 115 116 119 120 123 124 125 126 127 128 129 130 131 133 135 136 138 139 140 142 144 145 147 149 153 155 156 157 158 159 160 162 168 169 171 178 179 185 188 191 192 193 194 198 199 202 204 205 206 209 211 213 215 217 220 222 223 225 226 227 229 230 232 234 235 237 238 239 242 243 244 245 19674 247 0 0 f 19675 247 0 0 f 19676 247 0 0 f 19677 247 0 0 f 19678 247 0 0 f 19679 247 0 0 f 19680 247 0 0 0 2 3 4 6 9 10 11 13 14 18 23 25 26 29 30 32 33 35 38 39 40 41 44 46 47 48 49 51 54 57 58 59 61 62 64 73 74 75 76 77 78 79 82 83 84 85 90 91 93 97 98 99 100 101 104 107 108 116 120 123 125 127 128 129 131 132 133 134 135 136 139 141 143 145 149 150 151 154 155 159 161 162 164 165 166 167 168 170 175 176 177 178 181 183 184 189 191 192 193 194 195 196 197 199 203 205 206 209 210 211 213 214 218 219 221 224 226 227 231 232 233 234 237 238 239 242 243 245 19681 247 0 0 0 2 3 4 6 9 10 11 13 14 18 23 25 26 29 30 32 33 35 38 39 40 41 44 46 47 48 49 51 54 57 58 59 61 62 64 73 74 75 76 77 78 79 82 83 84 85 90 91 93 97 98 99 100 101 104 107 108 116 120 123 125 127 128 129 131 132 133 134 135 136 139 141 143 145 149 150 151 154 155 159 161 162 164 165 166 167 168 170 175 176 177 178 181 183 184 189 191 192 193 194 195 196 197 199 203 205 206 209 210 211 213 214 218 219 221 224 226 227 231 232 233 234 237 238 239 242 243 245 19682 247 0 0 0 1 6 11 12 13 15 16 18 19 20 21 22 23 26 28 30 33 34 35 37 41 44 45 51 54 58 60 62 65 67 68 73 74 75 76 79 80 81 82 83 85 87 90 92 93 94 97 98 103 104 106 107 110 113 117 119 120 122 123 124 125 126 128 129 130 134 137 138 139 140 141 146 147 149 150 153 154 157 158 160 164 175 176 178 186 187 190 192 194 195 196 198 200 203 204 205 206 207 210 212 214 216 217 218 221 222 225 226 228 229 230 231 234 235 238 240 241 242 243 245 19683 247 0 0 f 19684 247 0 0 1 3 4 6 8 14 18 23 25 26 29 30 32 33 35 37 38 39 43 47 51 52 53 54 56 57 58 59 60 63 65 67 68 70 72 73 79 80 81 82 85 86 88 91 92 93 97 101 104 105 109 110 111 113 115 120 122 123 127 130 131 137 138 141 143 145 146 147 151 152 154 155 156 157 158 161 163 170 171 172 174 177 179 180 181 182 183 184 186 187 190 191 194 196 198 199 200 201 202 203 207 209 210 214 216 217 226 228 229 231 232 233 237 239 242 243 244 245 19685 247 0 0 0 1 2 3 4 5 6 8 11 14 15 17 18 19 23 24 25 26 27 29 30 32 33 35 36 37 38 39 41 43 46 47 50 51 52 53 54 56 57 58 59 60 62 63 65 67 68 69 70 72 73 74 77 79 80 81 82 84 85 86 88 89 90 91 92 93 97 100 101 103 104 105 109 110 111 113 114 115 118 119 120 121 122 123 124 127 129 130 131 133 137 138 139 140 141 142 143 145 146 147 149 150 151 152 153 154 155 156 157 158 159 161 163 164 165 166 168 169 170 171 172 174 176 177 178 179 180 181 182 183 184 186 187 188 190 191 193 194 196 198 199 200 201 202 203 206 207 209 210 214 215 216 217 218 220 224 225 226 228 229 230 231 232 233 236 237 238 239 240 242 243 244 245 19686 247 0 0 e 19687 247 0 0 e 19688 247 0 0 e 19689 247 0 0 f 19690 247 0 0 e 19691 247 0 0 1 3 4 7 11 12 13 14 15 16 23 26 27 28 29 32 33 34 39 41 42 44 46 47 48 52 56 59 61 66 67 71 75 76 78 79 81 85 89 91 93 94 95 96 97 98 100 105 108 109 110 112 114 116 118 120 122 125 128 130 131 134 135 136 139 146 149 150 153 154 156 158 160 164 167 170 171 172 174 177 178 179 183 187 188 189 191 193 194 196 198 200 201 204 206 208 212 213 221 223 230 232 234 235 240 241 242 243 244 19692 247 0 0 f 19693 247 0 0 f 19694 247 0 0 f 19695 247 0 0 f 19696 247 0 0 f 19697 247 0 0 f 19698 247 0 0 2 3 4 5 6 7 10 12 13 14 15 16 18 19 20 22 24 28 29 30 32 34 35 37 38 39 41 42 44 45 46 49 51 53 55 57 61 67 70 71 73 75 76 79 81 82 84 87 88 89 92 93 94 99 100 101 102 104 105 109 114 116 119 123 128 131 133 134 136 138 140 142 144 145 146 149 155 156 157 163 166 169 170 172 174 175 177 180 182 184 186 187 192 196 198 200 202 203 204 205 206 209 210 213 220 222 224 226 227 230 232 233 235 239 241 243 244 245 19699 247 0 0 2 3 4 5 6 7 10 12 13 14 15 16 18 19 20 22 24 28 29 30 32 34 35 37 38 39 41 42 44 45 46 49 51 53 55 57 61 67 70 71 73 75 76 79 81 82 84 87 88 89 92 93 94 99 100 101 102 104 105 109 114 116 119 123 128 131 133 134 136 138 140 142 144 145 146 149 155 156 157 163 166 169 170 172 174 175 177 180 182 184 186 187 192 196 198 200 202 203 204 205 206 209 210 213 220 222 224 226 227 230 232 233 235 239 241 243 244 245 19700 247 0 0 0 4 5 8 9 11 13 14 15 16 19 20 22 23 24 25 28 29 30 31 37 38 41 42 43 44 45 49 55 59 62 63 65 66 67 68 69 70 72 73 74 76 78 79 87 88 89 90 95 100 103 108 114 115 116 118 119 124 125 128 129 130 131 134 135 136 137 138 139 142 143 144 145 146 147 148 150 152 154 155 156 157 159 160 162 163 165 166 168 169 170 171 172 173 174 175 176 179 180 182 183 185 186 188 192 199 200 202 203 205 206 210 213 215 216 220 221 222 226 227 228 230 231 232 233 234 239 240 242 19701 247 0 0 f 19702 247 0 0 2 3 5 6 7 11 12 13 14 15 19 20 21 23 24 25 26 27 29 33 35 36 37 39 41 42 44 45 46 50 54 56 57 60 62 65 66 68 76 80 84 86 87 89 90 91 93 95 96 99 100 102 104 107 108 109 110 111 116 118 121 123 124 126 128 129 134 136 138 139 141 142 143 146 149 150 151 152 153 155 162 163 164 166 168 169 171 172 173 174 177 178 179 180 181 183 184 185 189 195 196 201 204 206 207 208 209 210 211 217 220 221 222 223 226 227 231 233 234 235 237 238 241 242 243 244 19703 247 0 0 2 3 5 6 7 8 9 11 12 13 14 15 16 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 39 41 42 43 44 45 46 50 51 54 55 56 57 59 60 62 64 65 66 67 68 71 72 74 76 77 78 80 83 84 86 87 89 90 91 92 93 95 96 99 100 101 102 104 105 106 107 108 109 110 111 116 118 120 121 123 124 125 126 128 129 131 134 136 138 139 141 142 143 146 148 149 150 151 152 153 154 155 157 159 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 177 178 179 180 181 182 183 184 185 188 189 190 192 194 195 196 201 203 204 206 207 208 209 210 211 212 215 217 218 219 220 221 222 223 226 227 230 231 233 234 235 236 237 238 239 240 241 242 243 244 245 246 19704 247 0 1 e 19705 247 0 1 e 19706 247 0 1 e 19707 247 0 1 f 19708 247 0 1 e 19709 247 0 1 1 2 5 6 9 11 13 14 19 22 25 26 28 29 32 33 34 36 37 39 40 41 42 44 45 46 49 51 55 61 62 63 64 65 69 72 75 79 81 82 83 86 90 91 92 94 95 97 99 100 101 102 107 108 110 111 113 114 116 118 120 121 123 125 128 129 131 135 136 140 144 146 147 148 149 153 155 156 157 159 163 164 165 166 170 176 180 181 182 184 188 192 193 195 199 202 203 204 208 209 210 211 212 213 215 220 222 223 226 227 229 231 234 235 236 239 245 19710 247 0 1 f 19711 247 0 1 f 19712 247 0 1 f 19713 247 0 1 f 19714 247 0 1 f 19715 247 0 1 f 19716 247 0 1 2 3 4 5 6 8 9 11 12 14 15 16 17 18 19 20 21 22 24 25 26 28 29 30 32 33 34 35 36 37 39 40 41 42 43 44 46 47 49 50 58 61 64 69 73 77 79 80 84 85 86 87 89 92 93 94 97 98 99 100 106 107 110 113 116 119 120 123 131 135 136 137 142 143 146 147 150 152 155 156 159 160 161 162 166 170 172 175 176 178 181 182 185 189 195 198 199 200 201 203 206 207 208 209 212 213 216 217 221 222 223 224 226 228 229 231 235 236 238 239 240 241 242 243 244 246 19717 247 0 1 2 3 4 5 6 8 9 11 12 14 15 16 17 18 19 20 21 22 24 25 26 28 29 30 32 33 34 35 36 37 39 40 41 42 43 44 46 47 49 50 58 61 64 69 73 77 79 80 84 85 86 87 89 92 93 94 97 98 99 100 106 107 110 113 116 119 120 123 131 135 136 137 142 143 146 147 150 152 155 156 159 160 161 162 166 170 172 175 176 178 181 182 185 189 195 198 199 200 201 203 206 207 208 209 212 213 216 217 221 222 223 224 226 228 229 231 235 236 238 239 240 241 242 243 244 246 19718 247 0 1 0 4 7 11 14 15 16 21 24 29 32 33 34 35 37 41 43 46 47 48 52 53 55 56 57 61 64 67 69 71 72 73 75 76 78 79 82 91 93 95 98 103 105 106 108 109 110 113 114 115 118 119 120 123 125 126 127 129 135 138 141 142 143 144 145 146 148 149 151 153 154 155 157 159 160 161 165 166 169 170 171 172 174 175 181 182 185 187 189 190 193 195 196 199 201 202 207 208 209 210 212 213 214 216 217 220 221 224 225 226 227 230 231 235 236 237 239 240 243 245 246 19719 247 0 1 f 19720 247 0 1 1 4 6 7 9 10 11 14 18 21 22 24 27 28 30 31 33 43 47 51 53 54 59 60 61 62 64 66 68 69 70 75 77 78 79 81 82 83 84 85 89 92 94 95 96 98 99 101 103 104 105 108 116 117 121 124 126 127 128 129 132 133 134 135 140 141 143 144 145 147 149 151 153 156 159 161 162 163 165 166 167 169 172 173 175 178 179 181 182 183 184 187 191 194 195 198 199 201 204 206 208 209 212 214 219 220 221 222 223 226 227 228 230 233 234 237 241 242 244 245 246 19721 247 0 1 1 2 4 5 6 7 8 9 10 11 12 13 14 18 19 20 21 22 24 25 27 28 29 30 31 32 33 34 35 36 39 40 41 42 43 44 46 47 48 49 51 52 53 54 55 59 60 61 62 64 65 66 67 68 69 70 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 89 90 91 92 93 94 95 96 98 99 101 103 104 105 106 107 108 109 113 116 117 118 119 121 122 124 125 126 127 128 129 131 132 133 134 135 138 139 140 141 143 144 145 147 149 150 151 153 154 156 159 161 162 163 165 166 167 169 171 172 173 174 175 178 179 180 181 182 183 184 186 187 188 190 191 192 193 194 195 197 198 199 201 203 204 206 207 208 209 212 213 214 215 219 220 221 222 223 224 226 227 228 230 232 233 234 236 237 241 242 244 245 246 19722 247 0 1 e 19723 247 0 1 e 19724 247 0 1 e 19725 247 0 1 f 19726 247 0 1 e 19727 247 0 1 4 6 12 17 18 19 20 23 24 25 28 31 32 33 38 39 40 41 43 45 46 47 48 49 50 52 55 57 58 59 62 66 67 68 70 71 73 74 75 76 77 78 81 82 91 92 96 97 99 101 102 103 104 105 106 107 109 111 112 116 117 118 120 123 124 126 127 130 131 133 134 137 138 139 140 142 143 149 153 154 155 157 158 159 162 165 166 167 168 169 170 171 172 173 174 177 178 180 182 184 185 188 189 190 191 193 195 200 202 203 204 205 208 210 211 214 218 219 221 222 223 227 228 229 231 234 236 239 243 244 19728 247 0 1 f 19729 247 0 1 f 19730 247 0 1 f 19731 247 0 1 f 19732 247 0 1 f 19733 247 0 1 f 19734 247 0 1 0 1 3 9 10 13 15 17 20 21 25 26 27 29 30 35 36 37 39 43 49 50 54 55 59 63 64 65 66 71 73 74 75 79 80 82 84 85 87 89 90 93 95 96 97 101 103 104 105 107 109 110 112 113 114 115 117 118 119 120 123 126 131 133 136 137 139 140 141 143 144 145 148 150 151 152 154 156 157 161 162 163 164 166 173 174 175 176 179 180 186 188 194 195 196 197 201 202 204 205 209 211 212 213 216 218 219 223 224 226 227 233 234 235 236 239 241 242 246 19735 247 0 1 0 1 3 9 10 13 15 17 20 21 25 26 27 29 30 35 36 37 39 43 49 50 54 55 59 63 64 65 66 71 73 74 75 79 80 82 84 85 87 89 90 93 95 96 97 101 103 104 105 107 109 110 112 113 114 115 117 118 119 120 123 126 131 133 136 137 139 140 141 143 144 145 148 150 151 152 154 156 157 161 162 163 164 166 173 174 175 176 179 180 186 188 194 195 196 197 201 202 204 205 209 211 212 213 216 218 219 223 224 226 227 233 234 235 236 239 241 242 246 19736 247 0 1 1 5 6 7 9 10 13 15 18 22 27 28 29 33 34 35 36 37 38 40 43 45 46 47 50 51 52 53 54 58 60 62 65 69 73 75 76 77 78 81 87 90 92 93 94 98 99 103 106 110 111 113 115 117 119 126 127 130 131 132 133 135 139 140 141 142 143 144 146 148 150 152 155 158 159 160 162 167 169 170 172 173 175 177 178 181 183 185 186 187 189 190 191 195 196 197 198 200 201 204 205 207 208 211 213 214 216 217 219 220 221 222 223 226 233 234 235 236 237 238 244 246 19737 247 0 1 f 19738 247 0 1 0 3 6 8 10 11 12 15 16 18 19 21 22 23 24 25 28 29 31 33 36 38 39 41 42 47 48 49 50 51 52 54 55 57 60 61 63 65 68 72 73 74 77 79 80 81 82 83 85 87 88 89 93 95 97 101 102 104 105 107 108 109 110 111 112 113 116 117 120 121 122 127 129 131 134 139 142 143 147 151 155 156 158 163 164 166 167 168 170 171 173 174 175 176 178 180 183 184 186 187 188 192 194 196 197 203 208 213 218 220 224 226 230 231 232 236 237 239 241 243 244 245 246 19739 247 0 1 0 1 2 3 4 6 8 10 11 12 13 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 36 38 39 41 42 44 46 47 48 49 50 51 52 53 54 55 57 58 59 60 61 62 63 64 65 66 68 69 72 73 74 77 78 79 80 81 82 83 85 86 87 88 89 90 91 92 93 95 97 98 99 100 101 102 103 104 105 107 108 109 110 111 112 113 114 116 117 119 120 121 122 123 124 125 126 127 129 130 131 134 135 136 139 142 143 145 147 149 151 152 153 155 156 158 160 163 164 166 167 168 170 171 172 173 174 175 176 177 178 179 180 183 184 185 186 187 188 190 191 192 194 195 196 197 200 202 203 204 206 208 209 211 213 215 218 220 223 224 226 228 230 231 232 234 236 237 238 239 241 242 243 244 245 246 19740 247 0 1 e 19741 247 0 1 e 19742 247 0 1 e 19743 247 0 1 f 19744 247 0 1 e 19745 247 0 1 0 1 4 5 7 9 10 12 13 15 17 18 19 22 24 27 28 29 30 31 32 35 36 37 38 40 41 42 43 44 45 46 48 52 54 61 65 72 74 75 77 78 79 83 85 87 89 92 93 94 95 96 97 101 104 106 109 115 117 118 119 120 125 127 128 129 133 138 141 142 143 147 150 153 154 155 156 158 159 160 161 164 165 166 167 169 171 172 176 177 181 182 183 184 187 188 190 191 195 196 198 200 202 203 204 206 207 211 216 217 228 230 231 232 233 235 238 239 240 243 244 245 19746 247 0 1 f 19747 247 0 1 f 19748 247 0 1 f 19749 247 0 1 f 19750 247 0 1 f 19751 247 0 1 f 19752 247 0 1 0 1 2 3 5 6 7 13 14 16 18 19 22 32 34 36 37 42 43 45 49 51 53 55 60 62 63 64 65 66 67 68 72 73 76 79 81 82 83 84 85 86 87 89 94 96 97 98 99 102 103 107 108 109 110 113 116 117 120 121 124 126 127 129 130 131 132 133 134 136 137 139 140 142 144 147 149 150 154 156 164 165 167 168 169 170 171 172 173 174 175 176 178 181 183 188 189 190 191 192 193 195 196 197 198 199 201 202 205 210 212 231 232 233 236 237 238 239 240 241 243 244 245 19753 247 0 1 0 1 2 3 5 6 7 13 14 16 18 19 22 32 34 36 37 42 43 45 49 51 53 55 60 62 63 64 65 66 67 68 72 73 76 79 81 82 83 84 85 86 87 89 94 96 97 98 99 102 103 107 108 109 110 113 116 117 120 121 124 126 127 129 130 131 132 133 134 136 137 139 140 142 144 147 149 150 154 156 164 165 167 168 169 170 171 172 173 174 175 176 178 181 183 188 189 190 191 192 193 195 196 197 198 199 201 202 205 210 212 231 232 233 236 237 238 239 240 241 243 244 245 19754 247 0 1 2 3 5 6 7 10 12 14 17 18 19 22 26 29 30 31 32 34 37 39 43 45 47 48 52 54 56 57 58 64 65 66 68 71 74 75 78 80 86 88 92 93 94 95 96 97 101 103 106 107 108 110 111 112 116 117 119 121 124 129 130 132 135 136 137 138 139 141 142 145 147 148 149 150 152 153 154 155 162 164 167 169 170 171 172 174 175 178 181 182 184 185 187 191 192 196 199 201 202 205 207 211 212 215 218 219 220 222 223 224 228 235 236 237 238 240 242 243 244 246 19755 247 0 1 f 19756 247 0 1 1 4 5 9 10 11 15 16 17 19 20 21 22 23 24 26 27 30 31 32 35 36 37 41 43 45 46 47 48 49 50 52 55 56 58 59 60 61 62 63 64 65 67 68 69 72 73 75 76 77 78 79 80 81 83 85 86 87 89 90 91 92 93 94 95 96 98 100 102 103 105 106 108 109 110 111 114 115 116 117 118 120 121 123 125 130 134 135 137 138 141 143 146 153 155 156 157 158 159 160 161 167 168 173 178 179 180 183 184 186 187 189 190 193 194 195 197 201 202 206 207 209 212 213 215 217 218 220 222 226 227 230 231 233 235 236 240 241 242 243 244 245 246 19757 247 0 1 0 1 2 4 5 7 8 9 10 11 15 16 17 19 20 21 22 23 24 25 26 27 28 30 31 32 35 36 37 41 42 43 44 45 46 47 48 49 50 51 52 53 55 56 57 58 59 60 61 62 63 64 65 67 68 69 70 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 89 90 91 92 93 94 95 96 98 100 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 127 129 130 131 133 134 135 136 137 138 139 141 143 146 147 148 150 153 155 156 157 158 159 160 161 162 166 167 168 169 173 174 178 179 180 181 183 184 185 186 187 188 189 190 193 194 195 196 197 198 199 201 202 203 204 206 207 208 209 211 212 213 215 216 217 218 220 222 223 224 225 226 227 230 231 232 233 235 236 237 238 239 240 241 242 243 244 245 246 19758 247 0 1 e 19759 247 0 1 e 19760 247 0 1 e 19761 247 0 1 f 19762 247 0 1 e 19763 247 0 1 0 1 2 5 7 8 9 13 15 16 23 25 26 28 29 33 34 35 36 37 38 39 40 47 48 49 52 53 56 57 58 60 61 62 64 65 66 67 68 69 70 71 72 73 74 80 81 82 83 84 85 88 90 91 93 94 96 97 100 101 103 104 106 110 112 113 115 116 117 119 126 127 129 132 133 134 135 136 137 142 146 147 150 151 155 156 157 158 160 163 164 166 167 171 172 174 176 177 181 183 187 193 199 200 201 203 210 211 215 216 217 218 221 222 223 224 227 228 229 230 231 232 234 236 237 238 241 242 243 244 246 19764 247 0 1 f 19765 247 0 1 f 19766 247 0 1 f 19767 247 0 1 f 19768 247 0 1 f 19769 247 0 1 f 19770 247 0 1 0 2 4 6 9 10 12 16 17 18 20 21 23 24 27 28 29 31 32 35 36 37 39 40 41 45 46 48 49 50 52 56 57 59 61 62 71 73 75 82 83 84 85 87 88 89 90 92 93 94 97 98 101 103 104 105 106 111 112 114 115 118 119 121 124 125 126 128 130 139 140 141 143 146 149 151 152 153 154 155 156 157 159 161 163 165 166 173 175 176 181 188 190 194 195 196 197 203 205 206 208 209 210 212 213 217 223 224 227 229 230 231 234 237 238 240 245 246 19771 247 0 1 0 2 4 6 9 10 12 16 17 18 20 21 23 24 27 28 29 31 32 35 36 37 39 40 41 45 46 48 49 50 52 56 57 59 61 62 71 73 75 82 83 84 85 87 88 89 90 92 93 94 97 98 101 103 104 105 106 111 112 114 115 118 119 121 124 125 126 128 130 139 140 141 143 146 149 151 152 153 154 155 156 157 159 161 163 165 166 173 175 176 181 188 190 194 195 196 197 203 205 206 208 209 210 212 213 217 223 224 227 229 230 231 234 237 238 240 245 246 19772 247 0 1 0 1 3 4 5 7 9 13 17 19 20 24 25 26 29 37 39 40 42 46 47 48 51 53 56 57 58 60 62 64 65 66 67 68 69 70 73 74 75 76 78 79 80 82 86 89 90 91 92 95 97 98 100 102 108 111 114 115 117 118 119 121 122 125 127 128 129 130 131 133 135 137 138 142 143 145 147 148 150 154 157 160 164 165 168 174 175 178 180 181 186 187 189 193 194 196 197 199 201 202 203 205 206 207 209 213 214 215 216 221 223 226 230 233 235 236 237 238 240 242 244 245 246 19773 247 0 1 f 19774 247 0 1 0 4 6 8 9 11 13 14 15 17 18 20 21 24 25 27 28 30 31 34 36 37 38 40 43 46 47 49 52 53 54 60 62 64 65 67 68 73 75 79 80 81 83 87 88 89 94 98 99 103 104 105 106 110 112 114 120 121 122 124 128 132 133 135 136 137 138 139 141 146 147 150 152 153 154 155 159 160 167 170 171 174 177 179 180 183 184 186 192 194 195 196 197 198 201 206 207 208 210 211 214 217 218 219 221 223 225 226 228 229 230 232 234 237 238 240 241 244 246 19775 247 0 1 0 2 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 27 28 29 30 31 33 34 36 37 38 39 40 41 43 46 47 49 51 52 53 54 55 56 58 59 60 61 62 63 64 65 66 67 68 69 70 72 73 75 79 80 81 83 84 87 88 89 90 91 92 93 94 98 99 101 103 104 105 106 107 109 110 112 113 114 115 118 119 120 121 122 123 124 125 127 128 131 132 133 135 136 137 138 139 140 141 144 146 147 149 150 151 152 153 154 155 157 159 160 161 162 163 164 166 167 168 170 171 174 177 179 180 182 183 184 186 191 192 194 195 196 197 198 199 200 201 205 206 207 208 209 210 211 213 214 217 218 219 220 221 222 223 224 225 226 227 228 229 230 232 233 234 235 236 237 238 239 240 241 242 243 244 246 19776 247 1 0 e 19777 247 1 0 e 19778 247 1 0 e 19779 247 1 0 f 19780 247 1 0 e 19781 247 1 0 0 1 3 4 5 7 8 10 12 13 14 17 18 20 23 29 32 33 34 35 40 42 45 46 47 48 49 52 53 57 58 60 62 63 64 65 69 70 71 79 80 83 85 90 93 94 98 99 101 102 103 112 113 116 117 118 121 123 127 128 130 132 136 138 140 142 143 147 149 152 153 160 161 162 163 165 166 169 172 177 179 180 186 188 189 190 191 192 198 199 205 207 208 209 210 213 214 217 218 220 221 223 225 227 229 230 234 235 238 239 240 246 19782 247 1 0 f 19783 247 1 0 f 19784 247 1 0 f 19785 247 1 0 f 19786 247 1 0 f 19787 247 1 0 f 19788 247 1 0 0 1 3 4 6 7 8 11 13 16 18 20 22 24 25 26 32 33 34 35 37 38 42 43 48 49 50 51 57 58 59 67 68 70 72 73 74 75 81 85 86 87 88 90 91 92 95 98 100 101 102 104 105 108 109 110 112 114 116 119 120 122 123 125 126 127 134 135 136 139 140 141 143 145 146 150 153 155 156 157 158 163 164 166 167 169 170 172 173 176 182 183 186 187 189 191 193 196 198 201 202 204 207 209 211 214 215 217 218 219 220 221 224 225 226 227 229 234 238 239 242 243 245 19789 247 1 0 0 1 3 4 6 7 8 11 13 16 18 20 22 24 25 26 32 33 34 35 37 38 42 43 48 49 50 51 57 58 59 67 68 70 72 73 74 75 81 85 86 87 88 90 91 92 95 98 100 101 102 104 105 108 109 110 112 114 116 119 120 122 123 125 126 127 134 135 136 139 140 141 143 145 146 150 153 155 156 157 158 163 164 166 167 169 170 172 173 176 182 183 186 187 189 191 193 196 198 201 202 204 207 209 211 214 215 217 218 219 220 221 224 225 226 227 229 234 238 239 242 243 245 19790 247 1 0 0 1 3 4 8 11 13 14 15 18 19 20 21 22 23 25 26 27 29 32 33 35 36 39 40 42 45 47 48 49 50 51 52 59 60 61 63 65 69 71 75 76 78 79 82 84 86 89 92 93 96 97 98 99 102 103 108 112 114 115 119 121 124 125 131 134 135 136 141 142 146 147 148 150 152 154 155 156 161 163 166 167 171 175 176 179 185 190 191 194 196 197 201 203 207 208 209 210 213 214 215 216 217 222 223 224 225 229 230 231 232 233 235 237 238 240 241 244 246 19791 247 1 0 f 19792 247 1 0 0 3 4 6 9 10 11 15 20 25 26 27 28 29 30 33 35 39 44 45 47 49 54 55 58 62 63 66 67 68 70 71 77 79 80 84 85 90 91 92 94 96 100 101 105 108 109 111 117 118 119 122 123 124 125 127 131 133 135 136 137 139 142 143 144 146 149 157 158 163 164 165 167 169 171 174 177 178 179 183 184 185 186 187 189 191 193 196 197 198 200 203 204 205 208 209 210 214 215 216 217 218 220 225 228 232 233 235 236 237 238 240 241 242 243 245 246 19793 247 1 0 0 1 2 3 4 6 7 8 9 10 11 13 14 15 16 19 20 22 23 24 25 26 27 28 29 30 32 33 34 35 37 38 39 40 42 44 45 47 48 49 50 52 53 54 55 58 60 61 62 63 64 65 66 67 68 70 71 73 74 75 77 78 79 80 81 83 84 85 86 88 89 90 91 92 94 95 96 97 99 100 101 103 104 105 108 109 111 113 114 117 118 119 122 123 124 125 126 127 128 129 130 131 133 134 135 136 137 139 140 141 142 143 144 145 146 149 150 155 156 157 158 159 161 162 163 164 165 166 167 168 169 171 174 176 177 178 179 181 182 183 184 185 186 187 189 190 191 193 195 196 197 198 199 200 203 204 205 206 207 208 209 210 213 214 215 216 217 218 220 221 225 228 229 231 232 233 235 236 237 238 239 240 241 242 243 245 246 19794 247 1 0 e 19795 247 1 0 e 19796 247 1 0 e 19797 247 1 0 f 19798 247 1 0 e 19799 247 1 0 1 3 4 8 9 10 15 16 17 19 24 28 29 33 36 39 42 44 49 51 52 53 55 56 57 59 61 62 63 68 69 71 72 75 76 77 80 83 89 90 91 93 94 95 97 99 100 101 102 103 104 107 109 110 114 116 118 119 121 122 123 124 126 127 130 132 133 134 135 138 139 141 144 146 147 148 149 150 151 154 156 160 162 163 165 166 167 170 173 174 177 178 179 180 181 182 185 189 190 191 192 194 198 200 201 202 204 205 207 208 210 211 213 214 216 218 219 222 224 225 230 233 235 236 237 238 239 241 243 244 19800 247 1 0 f 19801 247 1 0 f 19802 247 1 0 f 19803 247 1 0 f 19804 247 1 0 f 19805 247 1 0 f 19806 247 1 0 0 2 5 6 7 9 16 17 19 20 23 26 28 30 33 34 35 36 37 38 40 43 45 48 49 50 55 56 61 62 63 64 65 66 69 70 75 78 79 81 85 90 91 93 94 97 98 99 100 103 104 106 107 108 109 110 112 114 117 119 123 124 128 129 131 133 134 143 144 149 150 151 152 154 155 156 157 159 160 161 164 166 167 168 169 171 173 174 175 176 180 182 183 184 185 186 188 191 193 196 197 199 200 202 205 208 211 212 214 217 218 219 222 223 224 225 227 228 230 231 232 240 241 243 19807 247 1 0 0 2 5 6 7 9 16 17 19 20 23 26 28 30 33 34 35 36 37 38 40 43 45 48 49 50 55 56 61 62 63 64 65 66 69 70 75 78 79 81 85 90 91 93 94 97 98 99 100 103 104 106 107 108 109 110 112 114 117 119 123 124 128 129 131 133 134 143 144 149 150 151 152 154 155 156 157 159 160 161 164 166 167 168 169 171 173 174 175 176 180 182 183 184 185 186 188 191 193 196 197 199 200 202 205 208 211 212 214 217 218 219 222 223 224 225 227 228 230 231 232 240 241 243 19808 247 1 0 0 3 4 7 10 17 18 19 20 27 28 29 32 35 36 37 42 43 44 48 49 51 56 57 61 62 68 69 70 73 74 76 78 79 81 82 86 88 90 93 94 96 98 99 100 111 115 118 120 121 122 123 125 132 133 135 136 137 144 148 150 152 153 156 157 158 159 163 165 166 168 170 171 172 173 177 178 180 182 183 187 190 192 196 199 200 202 206 207 208 209 210 211 213 214 216 220 222 223 224 227 228 229 232 234 237 238 240 241 243 244 19809 247 1 0 f 19810 247 1 0 0 1 2 3 4 6 7 9 11 12 13 16 17 23 24 27 28 29 31 32 34 35 36 38 41 44 45 47 49 51 52 55 56 57 58 59 64 66 67 68 69 72 75 77 78 79 80 81 83 85 86 88 89 90 96 102 103 104 106 110 111 114 115 124 125 126 129 130 131 133 134 136 138 140 141 145 147 149 150 151 152 155 157 159 160 162 164 166 167 168 169 171 175 177 179 180 182 183 184 185 188 189 191 192 195 196 198 199 202 203 204 209 211 213 214 216 218 219 220 222 223 224 226 228 229 233 234 235 243 19811 247 1 0 0 1 2 3 4 5 6 7 8 9 11 12 13 16 17 19 20 21 22 23 24 26 27 28 29 30 31 32 34 35 36 38 39 41 44 45 46 47 49 50 51 52 53 55 56 57 58 59 60 61 62 64 65 66 67 68 69 71 72 73 75 77 78 79 80 81 82 83 84 85 86 88 89 90 91 93 96 97 98 100 102 103 104 105 106 107 108 110 111 112 114 115 118 121 123 124 125 126 128 129 130 131 132 133 134 135 136 138 140 141 142 145 147 149 150 151 152 155 156 157 158 159 160 162 163 164 166 167 168 169 170 171 172 173 175 176 177 178 179 180 181 182 183 184 185 188 189 190 191 192 194 195 196 198 199 200 201 202 203 204 205 206 209 211 212 213 214 216 217 218 219 220 222 223 224 226 227 228 229 230 231 233 234 235 236 241 242 243 246 19812 247 1 0 e 19813 247 1 0 e 19814 247 1 0 e 19815 247 1 0 f 19816 247 1 0 e 19817 247 1 0 0 4 5 6 8 9 10 12 13 17 18 20 22 24 25 28 29 31 34 35 37 39 40 45 46 48 49 50 54 57 58 60 62 63 64 65 66 67 68 70 72 74 75 77 80 82 84 86 87 89 95 98 99 100 101 107 109 113 114 115 117 118 119 120 127 128 130 134 135 136 138 141 142 143 144 145 146 148 149 151 152 153 154 159 161 163 167 168 173 176 177 178 180 183 184 191 193 194 195 198 201 202 203 204 205 206 207 208 209 211 212 215 216 217 223 225 230 231 238 244 245 19818 247 1 0 f 19819 247 1 0 f 19820 247 1 0 f 19821 247 1 0 f 19822 247 1 0 f 19823 247 1 0 f 19824 247 1 0 1 2 5 6 7 9 13 15 16 17 18 23 24 25 26 27 29 31 32 34 37 39 40 42 47 49 51 53 55 56 58 60 62 63 64 65 66 67 68 70 71 72 73 74 75 76 78 82 88 91 92 95 98 100 111 112 116 117 118 119 124 125 126 129 130 133 134 138 139 140 143 144 145 147 149 151 153 154 155 156 157 160 161 162 163 164 168 170 178 179 183 186 189 190 192 193 195 197 199 200 204 205 206 207 209 210 211 215 216 224 225 232 233 234 237 239 243 245 19825 247 1 0 1 2 5 6 7 9 13 15 16 17 18 23 24 25 26 27 29 31 32 34 37 39 40 42 47 49 51 53 55 56 58 60 62 63 64 65 66 67 68 70 71 72 73 74 75 76 78 82 88 91 92 95 98 100 111 112 116 117 118 119 124 125 126 129 130 133 134 138 139 140 143 144 145 147 149 151 153 154 155 156 157 160 161 162 163 164 168 170 178 179 183 186 189 190 192 193 195 197 199 200 204 205 206 207 209 210 211 215 216 224 225 232 233 234 237 239 243 245 19826 247 1 0 2 5 6 7 8 9 10 15 18 19 20 24 26 27 28 29 33 34 35 36 37 39 43 44 45 48 50 51 52 55 56 59 61 62 64 65 67 69 70 71 73 74 76 79 84 85 86 88 94 95 96 97 98 100 103 109 110 111 115 120 121 123 124 126 127 129 131 133 134 135 138 139 140 141 142 145 147 149 150 151 154 156 157 159 160 161 162 163 164 165 166 169 170 172 173 176 177 178 179 181 182 183 185 188 189 191 192 194 195 202 203 204 207 208 210 213 215 216 217 218 219 220 223 226 227 228 231 233 234 241 242 243 244 19827 247 1 0 f 19828 247 1 0 5 6 9 11 12 15 16 18 21 22 23 25 29 30 31 32 36 37 40 41 43 48 50 54 55 58 59 61 62 64 65 67 68 69 71 72 74 75 76 79 81 82 83 85 87 91 94 104 105 107 110 111 113 115 116 117 118 122 123 125 126 127 130 131 132 135 138 140 145 147 148 154 155 157 158 159 161 162 163 164 165 166 170 172 173 174 176 180 182 184 185 187 188 189 190 191 192 194 195 197 198 199 201 204 208 209 210 211 213 214 215 218 221 223 226 227 228 229 230 236 237 238 239 240 241 243 246 19829 247 1 0 0 1 2 4 5 6 7 8 9 10 11 12 15 16 17 18 21 22 23 25 26 29 30 31 32 35 36 37 38 39 40 41 42 43 48 49 50 54 55 58 59 60 61 62 63 64 65 66 67 68 69 71 72 74 75 76 77 78 79 80 81 82 83 84 85 87 90 91 94 95 96 99 101 102 103 104 105 107 110 111 112 113 114 115 116 117 118 121 122 123 125 126 127 130 131 132 135 136 137 138 140 141 142 144 145 147 148 149 152 154 155 157 158 159 160 161 162 163 164 165 166 167 169 170 171 172 173 174 176 177 180 181 182 184 185 187 188 189 190 191 192 194 195 196 197 198 199 201 202 203 204 205 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 226 227 228 229 230 235 236 237 238 239 240 241 243 244 245 246 19830 247 1 0 e 19831 247 1 0 e 19832 247 1 0 e 19833 247 1 0 f 19834 247 1 0 e 19835 247 1 0 0 1 4 5 7 8 11 15 16 17 22 23 25 28 30 34 38 40 45 48 49 50 53 54 55 58 61 62 63 65 66 67 68 69 71 73 74 75 78 80 81 86 87 88 89 92 93 94 96 97 99 100 101 104 106 108 109 111 112 113 114 117 120 123 129 130 132 134 135 136 137 138 139 140 146 147 149 153 155 157 159 160 163 164 165 166 167 168 169 173 174 175 177 178 179 180 181 184 185 187 188 190 191 192 193 194 196 197 199 201 203 204 208 211 213 214 215 216 218 219 220 221 222 224 225 226 227 231 232 233 234 235 236 238 239 242 243 244 245 246 19836 247 1 0 f 19837 247 1 0 f 19838 247 1 0 f 19839 247 1 0 f 19840 247 1 0 f 19841 247 1 0 f 19842 247 1 0 0 1 2 4 10 12 13 14 17 18 19 20 21 22 23 24 30 31 36 37 38 42 43 56 58 60 63 64 65 67 68 69 70 71 73 74 75 79 80 81 82 83 88 89 93 97 100 104 106 108 110 112 113 117 119 120 121 124 125 126 128 129 133 134 136 137 139 140 143 145 147 149 150 152 158 159 164 166 167 168 170 171 172 173 174 176 178 180 181 183 184 185 189 193 194 196 197 199 200 201 202 203 204 205 206 207 209 210 212 214 215 218 219 224 226 227 228 229 230 231 232 233 234 235 236 237 238 240 241 19843 247 1 0 0 1 2 4 10 12 13 14 17 18 19 20 21 22 23 24 30 31 36 37 38 42 43 56 58 60 63 64 65 67 68 69 70 71 73 74 75 79 80 81 82 83 88 89 93 97 100 104 106 108 110 112 113 117 119 120 121 124 125 126 128 129 133 134 136 137 139 140 143 145 147 149 150 152 158 159 164 166 167 168 170 171 172 173 174 176 178 180 181 183 184 185 189 193 194 196 197 199 200 201 202 203 204 205 206 207 209 210 212 214 215 218 219 224 226 227 228 229 230 231 232 233 234 235 236 237 238 240 241 19844 247 1 0 0 1 4 6 9 12 15 18 22 23 25 27 28 29 30 31 36 37 38 40 42 43 46 47 48 49 50 53 54 56 59 60 65 66 68 69 71 74 75 77 83 88 90 91 92 99 101 102 107 109 110 111 115 116 117 118 119 121 123 125 127 128 129 130 132 134 135 136 137 138 140 141 142 143 146 149 150 152 157 158 161 169 171 172 174 175 176 177 182 184 187 188 193 194 196 197 198 200 203 204 206 207 208 209 210 213 214 215 216 218 219 220 223 224 227 234 236 237 238 239 240 241 243 244 245 246 19845 247 1 0 f 19846 247 1 0 0 2 3 4 7 12 13 15 17 18 20 21 26 29 31 32 34 35 36 37 38 39 45 48 50 52 54 56 57 58 64 65 67 68 70 72 73 74 76 77 78 81 82 85 86 88 89 93 94 96 98 99 100 101 103 104 105 106 108 109 110 113 115 116 118 119 120 122 125 127 128 130 131 133 135 136 139 143 145 148 151 152 156 157 159 161 162 164 167 168 169 170 171 174 175 176 179 180 181 182 183 184 186 187 188 190 193 194 196 199 202 203 206 208 212 215 216 218 219 221 222 223 224 225 226 227 228 234 235 236 237 240 241 242 243 246 19847 247 1 0 0 2 3 4 5 6 7 8 9 10 12 13 14 15 17 18 20 21 22 24 25 26 27 29 30 31 32 33 34 35 36 37 38 39 41 42 44 45 48 50 52 53 54 55 56 57 58 60 62 64 65 67 68 70 71 72 73 74 75 76 77 78 80 81 82 83 84 85 86 88 89 90 91 93 94 96 98 99 100 101 102 103 104 105 106 107 108 109 110 113 115 116 117 118 119 120 122 123 125 127 128 130 131 133 134 135 136 137 138 139 141 143 144 145 148 149 150 151 152 153 154 155 156 157 159 161 162 163 164 166 167 168 169 170 171 172 173 174 175 176 179 180 181 182 183 184 185 186 187 188 189 190 193 194 196 199 201 202 203 204 206 208 209 211 212 213 214 215 216 218 219 221 222 223 224 225 226 227 228 229 230 232 234 235 236 237 239 240 241 242 243 244 246 19848 247 1 1 e 19849 247 1 1 e 19850 247 1 1 e 19851 247 1 1 f 19852 247 1 1 e 19853 247 1 1 1 4 8 15 17 20 21 22 24 29 31 34 36 38 40 42 45 47 48 49 50 53 54 58 60 61 66 68 69 70 74 75 77 80 82 85 86 88 90 91 95 101 102 103 107 109 113 115 116 119 120 122 127 128 133 134 135 138 139 143 145 146 147 148 149 150 151 154 155 156 158 160 161 162 164 165 171 173 174 175 178 183 184 187 193 196 197 198 199 200 202 204 208 209 210 217 219 220 225 233 234 238 241 242 243 19854 247 1 1 f 19855 247 1 1 f 19856 247 1 1 f 19857 247 1 1 f 19858 247 1 1 f 19859 247 1 1 f 19860 247 1 1 2 3 4 6 7 9 10 11 12 17 19 22 23 25 29 30 33 35 36 38 42 43 44 51 52 54 55 57 60 62 68 69 71 74 76 78 80 84 85 87 88 89 91 95 96 98 99 102 103 104 105 107 108 111 112 113 115 116 117 118 119 120 122 124 125 126 127 129 131 134 136 139 140 141 142 143 144 145 146 148 152 153 154 156 157 160 161 164 166 167 168 170 171 173 174 175 176 177 181 182 183 184 185 187 189 193 203 206 207 208 212 215 217 219 221 222 223 227 228 229 230 234 235 237 238 240 242 243 244 245 246 19861 247 1 1 2 3 4 6 7 9 10 11 12 17 19 22 23 25 29 30 33 35 36 38 42 43 44 51 52 54 55 57 60 62 68 69 71 74 76 78 80 84 85 87 88 89 91 95 96 98 99 102 103 104 105 107 108 111 112 113 115 116 117 118 119 120 122 124 125 126 127 129 131 134 136 139 140 141 142 143 144 145 146 148 152 153 154 156 157 160 161 164 166 167 168 170 171 173 174 175 176 177 181 182 183 184 185 187 189 193 203 206 207 208 212 215 217 219 221 222 223 227 228 229 230 234 235 237 238 240 242 243 244 245 246 19862 247 1 1 0 1 3 5 6 10 12 13 19 20 21 22 24 25 27 28 30 31 32 33 36 42 44 45 46 49 52 53 54 55 56 58 59 61 64 65 66 67 71 73 76 77 78 80 81 82 83 84 85 86 87 89 90 91 92 97 103 109 110 112 113 115 116 118 121 122 124 126 129 130 133 135 139 145 150 151 153 156 157 160 162 165 167 169 170 171 175 177 179 182 183 184 185 186 187 188 191 192 193 195 196 197 198 200 204 205 207 208 209 210 220 225 228 230 231 232 237 240 242 244 19863 247 1 1 f 19864 247 1 1 2 3 7 8 17 18 19 21 23 24 26 27 29 35 40 41 43 45 49 51 52 56 61 62 63 65 67 69 70 72 75 79 81 85 86 97 99 100 102 104 107 108 109 110 112 115 121 122 123 124 128 130 131 132 133 137 139 140 145 147 148 149 158 160 161 163 164 167 169 170 171 172 176 177 179 180 184 185 186 190 193 194 195 198 199 200 201 202 203 209 211 213 215 217 219 221 222 223 224 225 226 229 232 233 235 237 243 245 246 19865 247 1 1 0 1 2 3 5 7 8 10 12 14 15 17 18 19 20 21 23 24 25 26 27 29 30 31 33 35 36 37 38 39 40 41 43 44 45 48 49 51 52 53 55 56 61 62 63 65 67 68 69 70 72 73 75 76 77 78 79 81 82 83 85 86 88 89 90 93 94 96 97 98 99 100 101 102 104 107 108 109 110 112 113 114 115 117 118 120 121 122 123 124 128 130 131 132 133 135 136 137 138 139 140 142 145 146 147 148 149 150 152 156 157 158 159 160 161 163 164 165 167 169 170 171 172 175 176 177 179 180 182 183 184 185 186 189 190 193 194 195 198 199 200 201 202 203 205 207 209 210 211 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 229 231 232 233 235 236 237 238 239 240 241 242 243 244 245 246 19866 247 1 1 e 19867 247 1 1 e 19868 247 1 1 e 19869 247 1 1 f 19870 247 1 1 e 19871 247 1 1 0 1 2 3 4 5 6 12 15 19 20 22 23 25 26 29 37 39 41 45 46 47 48 51 54 55 56 57 60 61 62 65 67 68 69 70 72 73 74 75 76 77 78 79 80 82 85 88 90 93 94 96 99 101 103 104 105 106 107 108 109 111 112 116 118 119 120 121 124 125 126 129 132 135 138 142 146 148 149 151 152 154 157 158 159 160 163 164 165 166 172 174 176 178 181 183 187 188 190 191 192 193 196 198 199 200 204 206 208 210 211 214 215 218 220 221 223 224 225 228 229 231 233 235 237 239 242 243 244 245 246 19872 247 1 1 f 19873 247 1 1 f 19874 247 1 1 f 19875 247 1 1 f 19876 247 1 1 f 19877 247 1 1 f 19878 247 1 1 0 1 3 5 6 8 9 11 13 16 17 20 22 24 27 32 33 36 37 40 41 44 45 46 47 49 50 53 54 55 57 58 59 69 70 72 73 75 76 78 81 82 87 91 92 93 94 98 99 102 108 111 112 116 117 121 122 125 126 127 129 131 135 136 137 138 139 142 144 146 149 150 151 152 153 156 158 160 164 165 166 167 168 169 170 171 176 177 178 179 180 182 183 185 186 187 189 199 202 203 204 209 214 215 217 218 220 221 222 226 227 228 230 232 233 236 238 243 244 246 19879 247 1 1 0 1 3 5 6 8 9 11 13 16 17 20 22 24 27 32 33 36 37 40 41 44 45 46 47 49 50 53 54 55 57 58 59 69 70 72 73 75 76 78 81 82 87 91 92 93 94 98 99 102 108 111 112 116 117 121 122 125 126 127 129 131 135 136 137 138 139 142 144 146 149 150 151 152 153 156 158 160 164 165 166 167 168 169 170 171 176 177 178 179 180 182 183 185 186 187 189 199 202 203 204 209 214 215 217 218 220 221 222 226 227 228 230 232 233 236 238 243 244 246 19880 247 1 1 0 7 8 10 11 18 19 22 24 26 27 28 31 32 33 37 44 45 46 48 49 50 52 53 54 55 56 57 59 61 62 64 66 70 72 74 75 76 77 78 79 80 81 83 84 85 87 88 89 90 91 92 93 95 97 102 103 104 105 106 107 108 109 110 111 112 113 116 117 119 120 121 122 123 124 125 126 127 128 132 135 137 140 145 146 148 150 151 153 154 155 156 157 158 159 162 164 166 170 171 172 175 176 179 180 183 184 186 187 188 189 196 198 199 200 201 202 203 206 208 209 210 211 214 216 217 218 219 220 222 224 226 227 228 229 230 231 232 233 234 235 242 243 244 245 246 19881 247 1 1 f 19882 247 1 1 2 9 12 13 14 15 16 17 19 20 21 22 28 29 34 35 36 37 40 49 50 52 53 57 60 61 62 64 66 67 70 72 74 76 77 80 85 86 87 88 90 92 93 94 95 97 98 99 100 101 102 103 105 106 108 112 113 114 116 117 119 120 123 124 125 126 128 129 130 131 133 135 136 138 140 142 143 145 148 149 151 152 154 155 157 162 163 166 167 168 169 171 174 175 182 184 185 190 191 192 193 194 195 197 198 203 204 208 209 210 211 213 218 219 220 222 223 225 226 228 229 230 233 234 238 239 242 246 19883 247 1 1 0 1 2 3 4 5 6 9 11 12 13 14 15 16 17 18 19 20 21 22 23 25 26 27 28 29 30 31 32 34 35 36 37 38 40 45 49 50 51 52 53 54 55 56 57 58 59 60 61 62 64 66 67 69 70 72 73 74 76 77 78 79 80 81 82 84 85 86 87 88 89 90 92 93 94 95 96 97 98 99 100 101 102 103 105 106 107 108 110 112 113 114 115 116 117 118 119 120 121 123 124 125 126 127 128 129 130 131 132 133 135 136 137 138 140 142 143 144 145 146 147 148 149 150 151 152 154 155 157 161 162 163 164 166 167 168 169 170 171 172 173 174 175 176 179 181 182 184 185 186 187 188 190 191 192 193 194 195 196 197 198 199 203 204 206 207 208 209 210 211 212 213 216 218 219 220 221 222 223 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 242 243 244 245 246 19884 247 1 1 e 19885 247 1 1 e 19886 247 1 1 e 19887 247 1 1 f 19888 247 1 1 e 19889 247 1 1 0 1 3 4 7 9 10 13 16 17 19 23 25 28 30 33 35 38 39 41 45 46 50 51 52 54 58 60 62 63 65 66 67 69 71 73 75 77 79 82 83 84 85 89 95 98 99 100 104 105 108 109 111 112 114 115 118 119 123 124 126 127 128 130 131 132 135 136 137 139 141 142 145 147 148 150 152 153 154 157 162 163 166 168 169 172 173 174 175 176 178 179 182 185 186 187 188 191 194 195 197 200 201 202 204 205 211 212 214 217 219 220 222 224 225 228 229 230 232 233 234 236 238 239 240 242 245 246 19890 247 1 1 f 19891 247 1 1 f 19892 247 1 1 f 19893 247 1 1 f 19894 247 1 1 f 19895 247 1 1 f 19896 247 1 1 8 9 12 13 15 16 17 23 24 25 26 27 31 32 33 41 43 44 45 46 47 50 51 52 55 58 59 60 63 65 67 69 70 78 79 80 81 85 87 89 93 96 97 99 103 104 105 107 110 114 115 117 119 120 121 124 125 126 127 129 130 131 134 135 138 139 141 142 143 144 145 148 149 150 151 152 154 155 156 157 158 160 163 164 166 167 168 169 170 172 173 174 175 178 181 182 185 188 190 192 196 202 204 205 206 209 210 211 212 213 216 217 220 222 223 228 229 230 232 234 235 237 240 243 244 246 19897 247 1 1 8 9 12 13 15 16 17 23 24 25 26 27 31 32 33 41 43 44 45 46 47 50 51 52 55 58 59 60 63 65 67 69 70 78 79 80 81 85 87 89 93 96 97 99 103 104 105 107 110 114 115 117 119 120 121 124 125 126 127 129 130 131 134 135 138 139 141 142 143 144 145 148 149 150 151 152 154 155 156 157 158 160 163 164 166 167 168 169 170 172 173 174 175 178 181 182 185 188 190 192 196 202 204 205 206 209 210 211 212 213 216 217 220 222 223 228 229 230 232 234 235 237 240 243 244 246 19898 247 1 1 0 5 7 9 12 13 16 17 18 19 20 21 25 26 28 33 34 35 37 38 39 40 41 44 46 47 49 50 54 55 59 60 66 67 69 71 72 73 75 78 80 81 82 88 89 91 93 94 97 100 101 105 107 109 112 113 114 115 120 121 124 126 129 130 131 132 137 138 140 142 147 148 149 151 152 154 155 156 157 159 160 161 162 166 169 170 171 172 173 177 178 179 180 182 183 184 185 186 194 196 198 201 204 205 207 208 210 211 212 213 214 217 218 219 220 224 225 226 227 229 231 232 234 239 240 242 243 19899 247 1 1 f 19900 247 1 1 0 3 5 6 8 9 11 13 14 16 20 21 22 23 24 29 30 33 34 36 37 38 40 46 47 48 49 52 53 57 58 59 60 61 62 63 64 65 68 70 71 72 75 78 82 83 85 88 95 97 104 105 108 115 117 119 124 125 127 128 129 134 137 141 143 145 149 151 153 155 156 157 158 159 160 164 167 169 172 173 177 178 179 182 183 185 186 188 189 192 193 194 195 196 198 201 202 204 205 208 213 214 215 216 217 218 219 224 225 227 229 232 233 234 235 236 238 239 242 243 245 246 19901 247 1 1 0 1 2 3 5 6 7 8 9 10 11 13 14 15 16 18 19 20 21 22 23 24 25 26 29 30 32 33 34 35 36 37 38 39 40 41 42 44 46 47 48 49 51 52 53 54 55 57 58 59 60 61 62 63 64 65 68 70 71 72 74 75 76 78 81 82 83 85 88 89 90 93 94 95 97 99 101 102 104 105 107 108 109 112 115 116 117 119 122 123 124 125 127 128 129 130 133 134 135 137 138 140 141 142 143 145 148 149 150 151 153 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 172 173 174 175 176 177 178 179 181 182 183 185 186 188 189 190 191 192 193 194 195 196 198 200 201 202 204 205 207 208 210 211 212 213 214 215 216 217 218 219 220 223 224 225 226 227 228 229 230 231 232 233 234 235 236 238 239 240 241 242 243 244 245 246 19902 247 1 1 e 19903 247 1 1 e 19904 247 1 1 e 19905 247 1 1 f 19906 247 1 1 e 19907 247 1 1 5 6 7 9 10 11 12 18 20 22 24 25 27 28 29 30 32 39 43 45 47 53 56 57 60 61 62 63 66 71 73 74 75 76 78 79 81 83 84 85 87 88 89 92 93 95 99 101 103 106 109 111 112 114 115 119 121 123 124 125 126 127 128 130 135 138 139 142 143 144 145 146 147 150 151 152 154 155 157 158 162 164 168 171 174 177 179 180 183 184 186 187 188 192 193 194 195 197 198 199 202 203 205 206 207 208 211 213 214 220 223 226 227 229 230 232 233 236 241 243 244 245 19908 247 1 1 f 19909 247 1 1 f 19910 247 1 1 f 19911 247 1 1 f 19912 247 1 1 f 19913 247 1 1 f 19914 247 1 1 3 5 6 9 12 13 14 15 16 17 19 20 21 22 23 25 27 28 30 31 32 34 36 37 38 40 42 44 45 47 48 51 54 57 68 70 71 73 80 81 82 85 86 87 88 89 90 95 97 103 104 108 110 111 113 117 120 125 126 127 128 133 134 138 140 141 143 147 149 152 153 154 156 157 159 160 161 162 164 165 166 167 169 171 172 174 176 182 185 186 187 190 193 194 195 196 197 198 199 200 202 203 204 205 206 207 211 212 214 215 216 217 218 220 221 222 225 228 231 234 237 238 239 240 243 246 19915 247 1 1 3 5 6 9 12 13 14 15 16 17 19 20 21 22 23 25 27 28 30 31 32 34 36 37 38 40 42 44 45 47 48 51 54 57 68 70 71 73 80 81 82 85 86 87 88 89 90 95 97 103 104 108 110 111 113 117 120 125 126 127 128 133 134 138 140 141 143 147 149 152 153 154 156 157 159 160 161 162 164 165 166 167 169 171 172 174 176 182 185 186 187 190 193 194 195 196 197 198 199 200 202 203 204 205 206 207 211 212 214 215 216 217 218 220 221 222 225 228 231 234 237 238 239 240 243 246 19916 247 1 1 2 3 6 8 9 10 12 13 15 17 18 19 20 22 23 25 29 30 31 32 33 34 37 38 40 43 45 46 47 48 49 50 51 55 57 58 59 61 62 64 65 66 67 68 71 72 73 74 76 77 80 83 84 85 86 89 91 92 100 101 103 109 110 111 112 113 114 115 116 117 118 125 126 127 128 130 131 132 137 138 139 142 145 151 153 155 157 158 161 164 165 166 171 172 173 176 177 178 180 184 190 191 192 194 195 196 197 201 204 205 206 208 210 211 212 213 215 217 219 220 222 223 225 226 230 231 234 235 237 242 243 246 19917 247 1 1 f 19918 247 1 1 0 1 2 3 4 7 8 10 12 16 17 19 28 29 32 35 37 38 40 41 43 45 47 49 50 51 52 53 57 58 62 65 66 67 68 69 71 73 75 77 78 79 82 85 86 87 88 89 93 95 96 98 99 101 103 104 105 108 112 113 114 116 117 119 120 122 123 126 128 133 134 136 140 141 142 144 146 147 149 151 154 155 156 157 159 161 163 166 168 170 174 175 176 177 178 180 184 187 188 189 190 193 194 195 197 199 201 203 206 210 211 212 213 221 223 224 226 229 231 232 233 234 238 240 241 243 244 245 19919 247 1 1 0 1 2 3 4 6 7 8 10 11 12 13 14 15 16 17 19 20 21 24 26 27 28 29 30 31 32 35 36 37 38 40 41 43 44 45 46 47 48 49 50 51 52 53 56 57 58 59 61 62 65 66 67 68 69 70 71 73 75 77 78 79 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 101 102 103 104 105 107 108 111 112 113 114 115 116 117 118 119 120 122 123 125 126 128 131 133 134 136 137 139 140 141 142 144 145 146 147 149 151 152 154 155 156 157 159 161 162 163 164 166 168 170 171 172 174 175 176 177 178 179 180 182 183 184 185 186 187 188 189 190 191 192 193 194 195 197 199 201 202 203 205 206 208 209 210 211 212 213 215 218 221 223 224 225 226 229 231 232 233 234 235 238 239 240 241 242 243 244 245 19920 0 0 0 e 19921 0 0 0 e 19922 0 0 0 e 19923 0 0 0 e 19924 0 0 0 e 19925 0 0 0 e 19926 0 0 0 e 19927 0 0 0 e 19928 0 0 0 e 19929 0 0 0 e 19930 0 0 0 e 19931 0 0 0 e 19932 0 0 0 e 19933 0 0 0 e 19934 0 0 0 e 19935 0 0 0 e 19936 0 0 0 e 19937 0 0 0 e 19938 0 0 0 e 19939 0 0 0 e 19940 0 0 0 e 19941 0 0 0 e 19942 0 0 0 e 19943 0 0 0 e 19944 0 0 0 e 19945 0 0 0 e 19946 0 0 0 e 19947 0 0 0 e 19948 0 0 0 e 19949 0 0 0 e 19950 0 0 0 e 19951 0 0 0 e 19952 0 0 0 e 19953 0 0 0 e 19954 0 0 0 e 19955 0 0 0 e 19956 0 0 0 e 19957 0 0 0 e 19958 0 0 0 e 19959 0 0 0 e 19960 0 0 0 e 19961 0 0 0 e 19962 0 0 0 e 19963 0 0 0 e 19964 0 0 0 e 19965 0 0 0 e 19966 0 0 0 e 19967 0 0 0 e 19968 0 0 0 e 19969 0 0 0 e 19970 0 0 0 e 19971 0 0 0 e 19972 0 0 0 e 19973 0 0 0 e 19974 0 0 0 e 19975 0 0 0 e 19976 0 0 0 e 19977 0 0 0 e 19978 0 0 0 e 19979 0 0 0 e 19980 0 0 0 e 19981 0 0 0 e 19982 0 0 0 e 19983 0 0 0 e 19984 0 0 0 e 19985 0 0 0 e 19986 0 0 0 e 19987 0 0 0 e 19988 0 0 0 e 19989 0 0 0 e 19990 0 0 0 e 19991 0 0 0 e 19992 0 0 1 e 19993 0 0 1 e 19994 0 0 1 e 19995 0 0 1 e 19996 0 0 1 e 19997 0 0 1 e 19998 0 0 1 e 19999 0 0 1 e 20000 0 0 1 e 20001 0 0 1 e 20002 0 0 1 e 20003 0 0 1 e 20004 0 0 1 e 20005 0 0 1 e 20006 0 0 1 e 20007 0 0 1 e 20008 0 0 1 e 20009 0 0 1 e 20010 0 0 1 e 20011 0 0 1 e 20012 0 0 1 e 20013 0 0 1 e 20014 0 0 1 e 20015 0 0 1 e 20016 0 0 1 e 20017 0 0 1 e 20018 0 0 1 e 20019 0 0 1 e 20020 0 0 1 e 20021 0 0 1 e 20022 0 0 1 e 20023 0 0 1 e 20024 0 0 1 e 20025 0 0 1 e 20026 0 0 1 e 20027 0 0 1 e 20028 0 0 1 e 20029 0 0 1 e 20030 0 0 1 e 20031 0 0 1 e 20032 0 0 1 e 20033 0 0 1 e 20034 0 0 1 e 20035 0 0 1 e 20036 0 0 1 e 20037 0 0 1 e 20038 0 0 1 e 20039 0 0 1 e 20040 0 0 1 e 20041 0 0 1 e 20042 0 0 1 e 20043 0 0 1 e 20044 0 0 1 e 20045 0 0 1 e 20046 0 0 1 e 20047 0 0 1 e 20048 0 0 1 e 20049 0 0 1 e 20050 0 0 1 e 20051 0 0 1 e 20052 0 0 1 e 20053 0 0 1 e 20054 0 0 1 e 20055 0 0 1 e 20056 0 0 1 e 20057 0 0 1 e 20058 0 0 1 e 20059 0 0 1 e 20060 0 0 1 e 20061 0 0 1 e 20062 0 0 1 e 20063 0 0 1 e 20064 0 1 0 e 20065 0 1 0 e 20066 0 1 0 e 20067 0 1 0 e 20068 0 1 0 e 20069 0 1 0 e 20070 0 1 0 e 20071 0 1 0 e 20072 0 1 0 e 20073 0 1 0 e 20074 0 1 0 e 20075 0 1 0 e 20076 0 1 0 e 20077 0 1 0 e 20078 0 1 0 e 20079 0 1 0 e 20080 0 1 0 e 20081 0 1 0 e 20082 0 1 0 e 20083 0 1 0 e 20084 0 1 0 e 20085 0 1 0 e 20086 0 1 0 e 20087 0 1 0 e 20088 0 1 0 e 20089 0 1 0 e 20090 0 1 0 e 20091 0 1 0 e 20092 0 1 0 e 20093 0 1 0 e 20094 0 1 0 e 20095 0 1 0 e 20096 0 1 0 e 20097 0 1 0 e 20098 0 1 0 e 20099 0 1 0 e 20100 0 1 0 e 20101 0 1 0 e 20102 0 1 0 e 20103 0 1 0 e 20104 0 1 0 e 20105 0 1 0 e 20106 0 1 0 e 20107 0 1 0 e 20108 0 1 0 e 20109 0 1 0 e 20110 0 1 0 e 20111 0 1 0 e 20112 0 1 0 e 20113 0 1 0 e 20114 0 1 0 e 20115 0 1 0 e 20116 0 1 0 e 20117 0 1 0 e 20118 0 1 0 e 20119 0 1 0 e 20120 0 1 0 e 20121 0 1 0 e 20122 0 1 0 e 20123 0 1 0 e 20124 0 1 0 e 20125 0 1 0 e 20126 0 1 0 e 20127 0 1 0 e 20128 0 1 0 e 20129 0 1 0 e 20130 0 1 0 e 20131 0 1 0 e 20132 0 1 0 e 20133 0 1 0 e 20134 0 1 0 e 20135 0 1 0 e 20136 0 1 1 e 20137 0 1 1 e 20138 0 1 1 e 20139 0 1 1 e 20140 0 1 1 e 20141 0 1 1 e 20142 0 1 1 e 20143 0 1 1 e 20144 0 1 1 e 20145 0 1 1 e 20146 0 1 1 e 20147 0 1 1 e 20148 0 1 1 e 20149 0 1 1 e 20150 0 1 1 e 20151 0 1 1 e 20152 0 1 1 e 20153 0 1 1 e 20154 0 1 1 e 20155 0 1 1 e 20156 0 1 1 e 20157 0 1 1 e 20158 0 1 1 e 20159 0 1 1 e 20160 0 1 1 e 20161 0 1 1 e 20162 0 1 1 e 20163 0 1 1 e 20164 0 1 1 e 20165 0 1 1 e 20166 0 1 1 e 20167 0 1 1 e 20168 0 1 1 e 20169 0 1 1 e 20170 0 1 1 e 20171 0 1 1 e 20172 0 1 1 e 20173 0 1 1 e 20174 0 1 1 e 20175 0 1 1 e 20176 0 1 1 e 20177 0 1 1 e 20178 0 1 1 e 20179 0 1 1 e 20180 0 1 1 e 20181 0 1 1 e 20182 0 1 1 e 20183 0 1 1 e 20184 0 1 1 e 20185 0 1 1 e 20186 0 1 1 e 20187 0 1 1 e 20188 0 1 1 e 20189 0 1 1 e 20190 0 1 1 e 20191 0 1 1 e 20192 0 1 1 e 20193 0 1 1 e 20194 0 1 1 e 20195 0 1 1 e 20196 0 1 1 e 20197 0 1 1 e 20198 0 1 1 e 20199 0 1 1 e 20200 0 1 1 e 20201 0 1 1 e 20202 0 1 1 e 20203 0 1 1 e 20204 0 1 1 e 20205 0 1 1 e 20206 0 1 1 e 20207 0 1 1 e 20208 1 0 0 e 20209 1 0 0 e 20210 1 0 0 e 20211 1 0 0 e 20212 1 0 0 e 20213 1 0 0 e 20214 1 0 0 f 20215 1 0 0 e 20216 1 0 0 f 20217 1 0 0 f 20218 1 0 0 f 20219 1 0 0 e 20220 1 0 0 e 20221 1 0 0 e 20222 1 0 0 f 20223 1 0 0 f 20224 1 0 0 f 20225 1 0 0 e 20226 1 0 0 e 20227 1 0 0 e 20228 1 0 0 e 20229 1 0 0 e 20230 1 0 0 e 20231 1 0 0 e 20232 1 0 0 f 20233 1 0 0 e 20234 1 0 0 f 20235 1 0 0 f 20236 1 0 0 f 20237 1 0 0 f 20238 1 0 0 e 20239 1 0 0 e 20240 1 0 0 f 20241 1 0 0 f 20242 1 0 0 e 20243 1 0 0 e 20244 1 0 0 e 20245 1 0 0 e 20246 1 0 0 e 20247 1 0 0 e 20248 1 0 0 e 20249 1 0 0 e 20250 1 0 0 f 20251 1 0 0 e 20252 1 0 0 f 20253 1 0 0 f 20254 1 0 0 f 20255 1 0 0 e 20256 1 0 0 e 20257 1 0 0 e 20258 1 0 0 f 20259 1 0 0 f 20260 1 0 0 e 20261 1 0 0 e 20262 1 0 0 e 20263 1 0 0 e 20264 1 0 0 e 20265 1 0 0 e 20266 1 0 0 e 20267 1 0 0 e 20268 1 0 0 f 20269 1 0 0 e 20270 1 0 0 f 20271 1 0 0 f 20272 1 0 0 f 20273 1 0 0 e 20274 1 0 0 f 20275 1 0 0 e 20276 1 0 0 e 20277 1 0 0 e 20278 1 0 0 f 20279 1 0 0 f 20280 1 0 1 e 20281 1 0 1 e 20282 1 0 1 e 20283 1 0 1 e 20284 1 0 1 e 20285 1 0 1 e 20286 1 0 1 f 20287 1 0 1 e 20288 1 0 1 f 20289 1 0 1 f 20290 1 0 1 f 20291 1 0 1 e 20292 1 0 1 f 20293 1 0 1 e 20294 1 0 1 e 20295 1 0 1 e 20296 1 0 1 e 20297 1 0 1 e 20298 1 0 1 e 20299 1 0 1 e 20300 1 0 1 e 20301 1 0 1 e 20302 1 0 1 e 20303 1 0 1 e 20304 1 0 1 f 20305 1 0 1 e 20306 1 0 1 f 20307 1 0 1 f 20308 1 0 1 f 20309 1 0 1 f 20310 1 0 1 e 20311 1 0 1 e 20312 1 0 1 e 20313 1 0 1 e 20314 1 0 1 e 20315 1 0 1 e 20316 1 0 1 e 20317 1 0 1 e 20318 1 0 1 e 20319 1 0 1 e 20320 1 0 1 e 20321 1 0 1 e 20322 1 0 1 f 20323 1 0 1 e 20324 1 0 1 f 20325 1 0 1 f 20326 1 0 1 f 20327 1 0 1 e 20328 1 0 1 f 20329 1 0 1 e 20330 1 0 1 e 20331 1 0 1 e 20332 1 0 1 e 20333 1 0 1 e 20334 1 0 1 e 20335 1 0 1 e 20336 1 0 1 e 20337 1 0 1 e 20338 1 0 1 e 20339 1 0 1 e 20340 1 0 1 f 20341 1 0 1 e 20342 1 0 1 f 20343 1 0 1 f 20344 1 0 1 f 20345 1 0 1 e 20346 1 0 1 f 20347 1 0 1 e 20348 1 0 1 f 20349 1 0 1 f 20350 1 0 1 e 20351 1 0 1 e 20352 1 1 0 e 20353 1 1 0 e 20354 1 1 0 e 20355 1 1 0 e 20356 1 1 0 e 20357 1 1 0 e 20358 1 1 0 f 20359 1 1 0 e 20360 1 1 0 f 20361 1 1 0 f 20362 1 1 0 f 20363 1 1 0 e 20364 1 1 0 e 20365 1 1 0 e 20366 1 1 0 e 20367 1 1 0 e 20368 1 1 0 f 20369 1 1 0 e 20370 1 1 0 e 20371 1 1 0 e 20372 1 1 0 e 20373 1 1 0 e 20374 1 1 0 e 20375 1 1 0 e 20376 1 1 0 f 20377 1 1 0 e 20378 1 1 0 f 20379 1 1 0 f 20380 1 1 0 f 20381 1 1 0 f 20382 1 1 0 f 20383 1 1 0 e 20384 1 1 0 e 20385 1 1 0 e 20386 1 1 0 f 20387 1 1 0 e 20388 1 1 0 e 20389 1 1 0 e 20390 1 1 0 e 20391 1 1 0 e 20392 1 1 0 e 20393 1 1 0 e 20394 1 1 0 f 20395 1 1 0 e 20396 1 1 0 f 20397 1 1 0 f 20398 1 1 0 f 20399 1 1 0 f 20400 1 1 0 f 20401 1 1 0 e 20402 1 1 0 f 20403 1 1 0 f 20404 1 1 0 f 20405 1 1 0 e 20406 1 1 0 e 20407 1 1 0 e 20408 1 1 0 e 20409 1 1 0 e 20410 1 1 0 e 20411 1 1 0 e 20412 1 1 0 f 20413 1 1 0 e 20414 1 1 0 f 20415 1 1 0 f 20416 1 1 0 f 20417 1 1 0 f 20418 1 1 0 f 20419 1 1 0 e 20420 1 1 0 f 20421 1 1 0 f 20422 1 1 0 f 20423 1 1 0 e 20424 1 1 1 e 20425 1 1 1 e 20426 1 1 1 e 20427 1 1 1 e 20428 1 1 1 e 20429 1 1 1 e 20430 1 1 1 f 20431 1 1 1 e 20432 1 1 1 f 20433 1 1 1 f 20434 1 1 1 f 20435 1 1 1 e 20436 1 1 1 f 20437 1 1 1 e 20438 1 1 1 e 20439 1 1 1 e 20440 1 1 1 f 20441 1 1 1 e 20442 1 1 1 e 20443 1 1 1 e 20444 1 1 1 e 20445 1 1 1 e 20446 1 1 1 e 20447 1 1 1 e 20448 1 1 1 f 20449 1 1 1 e 20450 1 1 1 f 20451 1 1 1 f 20452 1 1 1 f 20453 1 1 1 e 20454 1 1 1 f 20455 1 1 1 e 20456 1 1 1 e 20457 1 1 1 e 20458 1 1 1 f 20459 1 1 1 f 20460 1 1 1 e 20461 1 1 1 e 20462 1 1 1 e 20463 1 1 1 e 20464 1 1 1 e 20465 1 1 1 e 20466 1 1 1 f 20467 1 1 1 e 20468 1 1 1 f 20469 1 1 1 f 20470 1 1 1 f 20471 1 1 1 e 20472 1 1 1 e 20473 1 1 1 e 20474 1 1 1 e 20475 1 1 1 e 20476 1 1 1 f 20477 1 1 1 e 20478 1 1 1 e 20479 1 1 1 e 20480 1 1 1 e 20481 1 1 1 e 20482 1 1 1 e 20483 1 1 1 e 20484 1 1 1 f 20485 1 1 1 e 20486 1 1 1 f 20487 1 1 1 f 20488 1 1 1 f 20489 1 1 1 f 20490 1 1 1 e 20491 1 1 1 e 20492 1 1 1 e 20493 1 1 1 e 20494 1 1 1 f 20495 1 1 1 e 20496 31 0 0 e 20497 31 0 0 e 20498 31 0 0 e 20499 31 0 0 e 20500 31 0 0 e 20501 31 0 0 e 20502 31 0 0 f 20503 31 0 0 e 20504 31 0 0 f 20505 31 0 0 f 20506 31 0 0 f 20507 31 0 0 6 9 11 12 13 15 18 19 21 24 27 28 30 20508 31 0 0 1 3 4 8 10 11 16 18 19 20 21 22 24 26 28 20509 31 0 0 e 20510 31 0 0 1 2 3 4 9 11 12 13 16 17 20 24 25 28 30 20511 31 0 0 1 2 3 4 9 11 12 13 16 17 20 24 25 28 30 20512 31 0 0 0 2 3 5 7 13 16 18 20 21 22 24 29 20513 31 0 0 7 16 22 20514 31 0 0 e 20515 31 0 0 e 20516 31 0 0 e 20517 31 0 0 e 20518 31 0 0 e 20519 31 0 0 e 20520 31 0 0 f 20521 31 0 0 e 20522 31 0 0 f 20523 31 0 0 f 20524 31 0 0 f 20525 31 0 0 0 2 3 5 6 7 9 10 14 17 18 19 21 23 27 29 30 20526 31 0 0 0 3 4 6 7 9 10 11 13 14 17 21 22 27 28 30 20527 31 0 0 e 20528 31 0 0 0 1 3 4 6 8 9 11 12 14 16 17 18 21 23 24 25 27 29 30 20529 31 0 0 0 1 3 4 6 8 9 11 12 14 16 17 18 21 23 24 25 27 29 30 20530 31 0 0 1 2 3 6 7 15 18 20 22 23 26 28 29 20531 31 0 0 6 7 15 18 20 28 20532 31 0 0 e 20533 31 0 0 e 20534 31 0 0 e 20535 31 0 0 e 20536 31 0 0 e 20537 31 0 0 e 20538 31 0 0 f 20539 31 0 0 e 20540 31 0 0 f 20541 31 0 0 f 20542 31 0 0 f 20543 31 0 0 0 2 4 7 10 11 12 15 17 21 22 23 29 20544 31 0 0 1 4 5 6 7 11 13 15 19 20 22 23 24 25 26 27 29 20545 31 0 0 e 20546 31 0 0 1 2 3 4 5 6 10 13 14 18 19 20 21 22 23 24 25 26 27 28 20547 31 0 0 1 2 3 4 5 6 10 13 14 18 19 20 21 22 23 24 25 26 27 28 20548 31 0 0 4 9 11 15 16 17 19 20 27 29 20549 31 0 0 4 11 19 20 27 20550 31 0 0 e 20551 31 0 0 e 20552 31 0 0 e 20553 31 0 0 e 20554 31 0 0 e 20555 31 0 0 e 20556 31 0 0 f 20557 31 0 0 e 20558 31 0 0 f 20559 31 0 0 f 20560 31 0 0 f 20561 31 0 0 0 2 3 4 7 8 9 10 12 18 19 20 21 26 27 29 20562 31 0 0 0 3 5 9 11 12 13 14 15 18 23 24 25 26 27 28 29 20563 31 0 0 e 20564 31 0 0 0 2 3 4 5 6 9 10 11 12 13 14 15 16 20 21 22 24 27 29 20565 31 0 0 0 2 3 4 5 6 9 10 11 12 13 14 15 16 20 21 22 24 27 29 20566 31 0 0 4 10 12 13 15 16 17 19 20 22 28 30 20567 31 0 0 4 10 12 13 15 17 20 20568 31 0 1 e 20569 31 0 1 e 20570 31 0 1 e 20571 31 0 1 e 20572 31 0 1 e 20573 31 0 1 e 20574 31 0 1 f 20575 31 0 1 e 20576 31 0 1 f 20577 31 0 1 f 20578 31 0 1 f 20579 31 0 1 0 1 3 7 8 12 17 18 21 22 23 24 25 26 27 29 20580 31 0 1 0 1 2 3 4 7 8 10 14 15 16 17 18 21 24 27 20581 31 0 1 e 20582 31 0 1 1 2 4 7 9 10 11 16 23 24 25 26 27 30 20583 31 0 1 1 2 4 7 9 10 11 16 23 24 25 26 27 30 20584 31 0 1 0 2 3 7 10 12 13 14 16 17 18 22 27 28 30 20585 31 0 1 2 7 10 13 14 16 17 18 22 28 20586 31 0 1 e 20587 31 0 1 e 20588 31 0 1 e 20589 31 0 1 e 20590 31 0 1 e 20591 31 0 1 e 20592 31 0 1 f 20593 31 0 1 e 20594 31 0 1 f 20595 31 0 1 f 20596 31 0 1 f 20597 31 0 1 0 1 3 4 5 6 7 11 13 25 26 28 20598 31 0 1 0 4 7 8 11 12 15 19 20 21 24 26 30 20599 31 0 1 e 20600 31 0 1 0 1 4 5 6 8 10 11 12 13 14 15 21 22 23 24 26 20601 31 0 1 0 1 4 5 6 8 10 11 12 13 14 15 21 22 23 24 26 20602 31 0 1 1 3 4 6 8 9 10 11 12 13 14 15 19 20 22 27 28 30 20603 31 0 1 6 8 9 12 15 19 22 28 20604 31 0 1 e 20605 31 0 1 e 20606 31 0 1 e 20607 31 0 1 e 20608 31 0 1 e 20609 31 0 1 e 20610 31 0 1 f 20611 31 0 1 e 20612 31 0 1 f 20613 31 0 1 f 20614 31 0 1 f 20615 31 0 1 2 3 5 9 15 16 19 21 23 24 26 29 20616 31 0 1 0 4 5 6 7 12 13 14 16 18 21 22 27 28 30 20617 31 0 1 e 20618 31 0 1 0 6 10 11 14 15 18 19 20 22 24 27 29 30 20619 31 0 1 0 6 10 11 14 15 18 19 20 22 24 27 29 30 20620 31 0 1 0 2 7 8 9 11 12 13 14 15 17 19 20 21 22 23 24 25 27 20621 31 0 1 7 14 17 20 21 23 24 20622 31 0 1 e 20623 31 0 1 e 20624 31 0 1 e 20625 31 0 1 e 20626 31 0 1 e 20627 31 0 1 e 20628 31 0 1 f 20629 31 0 1 e 20630 31 0 1 f 20631 31 0 1 f 20632 31 0 1 f 20633 31 0 1 0 5 7 9 10 12 15 16 18 21 22 23 28 29 20634 31 0 1 0 1 2 3 8 9 12 14 15 18 19 20 24 25 26 27 28 29 20635 31 0 1 e 20636 31 0 1 1 2 4 6 9 11 13 14 18 22 23 25 26 20637 31 0 1 1 2 4 6 9 11 13 14 18 22 23 25 26 20638 31 0 1 0 5 9 10 13 15 17 18 19 23 26 27 28 20639 31 0 1 0 5 15 27 28 20640 31 1 0 e 20641 31 1 0 e 20642 31 1 0 e 20643 31 1 0 e 20644 31 1 0 e 20645 31 1 0 e 20646 31 1 0 f 20647 31 1 0 e 20648 31 1 0 f 20649 31 1 0 f 20650 31 1 0 f 20651 31 1 0 0 1 3 4 7 10 11 14 15 16 20 26 27 29 20652 31 1 0 0 1 2 3 5 6 13 18 19 21 23 28 20653 31 1 0 e 20654 31 1 0 0 1 7 9 10 11 13 14 15 20 23 24 25 28 30 20655 31 1 0 0 1 7 9 10 11 13 14 15 20 23 24 25 28 30 20656 31 1 0 2 3 4 7 8 10 16 17 18 19 20 23 26 20657 31 1 0 3 4 7 16 18 19 23 26 20658 31 1 0 e 20659 31 1 0 e 20660 31 1 0 e 20661 31 1 0 e 20662 31 1 0 e 20663 31 1 0 e 20664 31 1 0 f 20665 31 1 0 e 20666 31 1 0 f 20667 31 1 0 f 20668 31 1 0 f 20669 31 1 0 0 1 2 5 12 13 17 18 19 20 24 27 28 20670 31 1 0 0 7 8 9 11 12 15 16 18 22 23 24 26 27 28 20671 31 1 0 e 20672 31 1 0 0 1 2 3 13 14 18 19 22 25 28 29 30 20673 31 1 0 0 1 2 3 13 14 18 19 22 25 28 29 30 20674 31 1 0 0 2 3 4 7 9 11 12 16 17 19 24 26 27 30 20675 31 1 0 3 4 7 9 11 12 19 24 26 27 20676 31 1 0 e 20677 31 1 0 e 20678 31 1 0 e 20679 31 1 0 e 20680 31 1 0 e 20681 31 1 0 e 20682 31 1 0 f 20683 31 1 0 e 20684 31 1 0 f 20685 31 1 0 f 20686 31 1 0 f 20687 31 1 0 2 13 14 17 20 21 25 27 20688 31 1 0 0 1 5 7 9 10 11 12 13 14 18 21 22 23 25 26 27 20689 31 1 0 e 20690 31 1 0 2 4 6 7 8 9 10 12 16 17 18 21 23 24 25 26 27 20691 31 1 0 2 4 6 7 8 9 10 12 16 17 18 21 23 24 25 26 27 20692 31 1 0 1 3 4 5 6 7 9 11 13 15 16 17 18 19 29 30 20693 31 1 0 1 3 4 5 6 9 13 15 16 17 18 19 20694 31 1 0 e 20695 31 1 0 e 20696 31 1 0 e 20697 31 1 0 e 20698 31 1 0 e 20699 31 1 0 e 20700 31 1 0 f 20701 31 1 0 e 20702 31 1 0 f 20703 31 1 0 f 20704 31 1 0 f 20705 31 1 0 1 4 5 6 7 8 14 15 17 20 22 23 24 25 26 28 29 20706 31 1 0 1 2 5 8 9 10 16 17 18 19 20 21 22 23 24 25 28 30 20707 31 1 0 e 20708 31 1 0 0 1 2 5 6 7 8 9 10 13 16 19 22 23 24 25 29 30 20709 31 1 0 0 1 2 5 6 7 8 9 10 13 16 19 22 23 24 25 29 30 20710 31 1 0 1 2 3 6 9 10 13 14 15 16 18 20 23 25 29 20711 31 1 0 1 3 6 9 15 16 18 20 25 29 20712 31 1 1 e 20713 31 1 1 e 20714 31 1 1 e 20715 31 1 1 e 20716 31 1 1 e 20717 31 1 1 e 20718 31 1 1 f 20719 31 1 1 e 20720 31 1 1 f 20721 31 1 1 f 20722 31 1 1 f 20723 31 1 1 0 1 3 5 7 10 12 14 18 20 21 22 24 25 26 30 20724 31 1 1 1 8 9 12 16 17 20 22 25 20725 31 1 1 e 20726 31 1 1 0 2 3 4 7 11 13 15 16 19 21 22 24 25 26 30 20727 31 1 1 0 2 3 4 7 11 13 15 16 19 21 22 24 25 26 30 20728 31 1 1 1 2 6 8 10 11 12 15 17 21 23 24 28 29 20729 31 1 1 6 8 11 12 15 21 24 29 20730 31 1 1 e 20731 31 1 1 e 20732 31 1 1 e 20733 31 1 1 e 20734 31 1 1 e 20735 31 1 1 e 20736 31 1 1 f 20737 31 1 1 e 20738 31 1 1 f 20739 31 1 1 f 20740 31 1 1 f 20741 31 1 1 1 2 3 4 6 7 8 9 10 12 17 20 21 22 23 24 25 27 28 29 20742 31 1 1 0 1 2 3 4 6 8 13 15 16 18 21 22 23 24 25 27 28 30 20743 31 1 1 e 20744 31 1 1 0 2 3 4 9 10 14 15 18 19 21 22 24 25 26 20745 31 1 1 0 2 3 4 9 10 14 15 18 19 21 22 24 25 26 20746 31 1 1 1 3 4 5 8 10 12 15 16 17 18 19 21 23 26 27 28 20747 31 1 1 1 3 4 5 8 10 12 21 28 20748 31 1 1 e 20749 31 1 1 e 20750 31 1 1 e 20751 31 1 1 e 20752 31 1 1 e 20753 31 1 1 e 20754 31 1 1 f 20755 31 1 1 e 20756 31 1 1 f 20757 31 1 1 f 20758 31 1 1 f 20759 31 1 1 0 2 4 6 7 8 9 11 12 13 19 20 21 22 26 27 29 30 20760 31 1 1 0 4 5 7 8 11 14 15 18 21 28 29 30 20761 31 1 1 e 20762 31 1 1 0 9 12 13 15 18 20 21 22 24 28 20763 31 1 1 0 9 12 13 15 18 20 21 22 24 28 20764 31 1 1 0 1 2 3 4 8 10 11 15 16 17 18 22 23 27 29 30 20765 31 1 1 0 2 3 8 11 15 16 17 18 22 23 29 20766 31 1 1 e 20767 31 1 1 e 20768 31 1 1 e 20769 31 1 1 e 20770 31 1 1 e 20771 31 1 1 e 20772 31 1 1 f 20773 31 1 1 e 20774 31 1 1 f 20775 31 1 1 f 20776 31 1 1 f 20777 31 1 1 2 3 5 6 8 11 13 15 16 17 19 20 22 24 25 27 28 20778 31 1 1 0 1 2 3 5 7 8 9 11 13 16 18 20 21 24 26 28 30 20779 31 1 1 e 20780 31 1 1 0 2 3 4 5 7 8 10 13 14 15 16 17 20 25 27 28 29 20781 31 1 1 0 2 3 4 5 7 8 10 13 14 15 16 17 20 25 27 28 29 20782 31 1 1 0 5 6 8 9 14 16 17 18 20 22 26 29 30 20783 31 1 1 0 5 8 14 16 17 18 20 22 20784 32 0 0 e 20785 32 0 0 e 20786 32 0 0 e 20787 32 0 0 e 20788 32 0 0 e 20789 32 0 0 e 20790 32 0 0 f 20791 32 0 0 e 20792 32 0 0 f 20793 32 0 0 f 20794 32 0 0 f 20795 32 0 0 0 3 4 6 7 8 9 16 18 19 21 22 23 24 25 27 28 29 30 20796 32 0 0 3 4 6 7 8 10 12 14 16 25 26 27 28 29 31 20797 32 0 0 e 20798 32 0 0 1 2 3 4 5 6 7 9 11 13 17 18 19 22 24 25 27 28 29 30 20799 32 0 0 1 2 3 4 5 6 7 9 11 13 17 18 19 22 24 25 27 28 29 30 20800 32 0 0 0 1 3 4 5 6 7 8 9 10 11 12 17 19 25 26 28 29 20801 32 0 0 1 4 5 8 11 12 17 19 28 29 20802 32 0 0 e 20803 32 0 0 e 20804 32 0 0 e 20805 32 0 0 e 20806 32 0 0 e 20807 32 0 0 e 20808 32 0 0 f 20809 32 0 0 e 20810 32 0 0 f 20811 32 0 0 f 20812 32 0 0 f 20813 32 0 0 0 1 2 4 5 6 7 10 18 19 20 21 25 26 27 29 20814 32 0 0 1 2 4 5 7 11 13 14 15 17 18 20 28 29 30 20815 32 0 0 e 20816 32 0 0 0 2 5 9 11 12 14 17 18 22 26 28 29 30 31 20817 32 0 0 0 2 5 9 11 12 14 17 18 22 26 28 29 30 31 20818 32 0 0 1 4 5 6 7 8 10 11 15 17 18 21 22 23 24 25 27 28 30 31 20819 32 0 0 1 4 6 8 17 18 21 23 24 25 28 31 20820 32 0 0 e 20821 32 0 0 e 20822 32 0 0 e 20823 32 0 0 e 20824 32 0 0 e 20825 32 0 0 e 20826 32 0 0 f 20827 32 0 0 e 20828 32 0 0 f 20829 32 0 0 f 20830 32 0 0 f 20831 32 0 0 1 2 3 5 8 9 15 17 18 21 22 24 25 27 30 31 20832 32 0 0 0 1 2 5 8 9 11 13 14 15 16 17 18 19 20 21 27 28 31 20833 32 0 0 e 20834 32 0 0 0 2 6 7 10 12 13 15 18 20 21 22 29 30 20835 32 0 0 0 2 6 7 10 12 13 15 18 20 21 22 29 30 20836 32 0 0 0 1 2 5 7 8 11 12 14 16 18 19 23 24 30 20837 32 0 0 1 5 8 11 16 18 30 20838 32 0 0 e 20839 32 0 0 e 20840 32 0 0 e 20841 32 0 0 e 20842 32 0 0 e 20843 32 0 0 e 20844 32 0 0 f 20845 32 0 0 e 20846 32 0 0 f 20847 32 0 0 f 20848 32 0 0 f 20849 32 0 0 0 3 5 10 13 16 18 19 25 26 27 28 31 20850 32 0 0 1 2 3 4 5 10 11 13 14 17 19 21 22 25 28 29 20851 32 0 0 e 20852 32 0 0 0 1 4 5 6 14 15 17 20 22 26 28 29 30 31 20853 32 0 0 0 1 4 5 6 14 15 17 20 22 26 28 29 30 31 20854 32 0 0 0 3 5 9 10 11 12 13 14 16 18 20 21 22 23 24 27 29 30 20855 32 0 0 5 9 11 12 14 18 21 27 20856 32 0 1 e 20857 32 0 1 e 20858 32 0 1 e 20859 32 0 1 e 20860 32 0 1 e 20861 32 0 1 e 20862 32 0 1 f 20863 32 0 1 e 20864 32 0 1 f 20865 32 0 1 f 20866 32 0 1 f 20867 32 0 1 3 4 5 7 9 10 11 12 14 15 16 17 22 24 25 26 27 30 31 20868 32 0 1 0 1 2 4 8 10 11 12 13 14 15 16 20 21 22 23 24 25 26 28 31 20869 32 0 1 e 20870 32 0 1 1 5 6 9 16 19 22 24 26 27 28 30 20871 32 0 1 1 5 6 9 16 19 22 24 26 27 28 30 20872 32 0 1 1 2 4 5 6 7 9 11 15 16 17 18 20 22 23 24 25 26 27 29 20873 32 0 1 2 5 7 9 11 16 17 18 22 24 25 27 29 20874 32 0 1 e 20875 32 0 1 e 20876 32 0 1 e 20877 32 0 1 e 20878 32 0 1 e 20879 32 0 1 e 20880 32 0 1 f 20881 32 0 1 e 20882 32 0 1 f 20883 32 0 1 f 20884 32 0 1 f 20885 32 0 1 0 2 3 4 6 7 9 10 12 14 15 16 18 19 20 21 23 27 29 20886 32 0 1 6 7 9 10 13 14 17 18 20 22 24 26 31 20887 32 0 1 e 20888 32 0 1 1 2 3 4 5 6 8 9 12 14 17 19 23 24 27 29 30 31 20889 32 0 1 1 2 3 4 5 6 8 9 12 14 17 19 23 24 27 29 30 31 20890 32 0 1 1 2 4 5 6 7 12 13 15 16 17 18 19 22 27 28 29 30 20891 32 0 1 1 2 4 5 13 16 17 22 28 30 20892 32 0 1 e 20893 32 0 1 e 20894 32 0 1 e 20895 32 0 1 e 20896 32 0 1 e 20897 32 0 1 e 20898 32 0 1 f 20899 32 0 1 e 20900 32 0 1 f 20901 32 0 1 f 20902 32 0 1 f 20903 32 0 1 3 4 5 6 7 8 11 13 14 16 21 22 23 24 26 29 31 20904 32 0 1 1 2 3 6 8 9 10 12 13 14 15 16 26 27 30 20905 32 0 1 e 20906 32 0 1 0 4 6 7 9 10 13 16 18 20 27 29 20907 32 0 1 0 4 6 7 9 10 13 16 18 20 27 29 20908 32 0 1 1 2 4 5 11 12 13 15 19 20 21 24 26 30 31 20909 32 0 1 1 4 5 11 13 15 19 20 21 30 20910 32 0 1 e 20911 32 0 1 e 20912 32 0 1 e 20913 32 0 1 e 20914 32 0 1 e 20915 32 0 1 e 20916 32 0 1 f 20917 32 0 1 e 20918 32 0 1 f 20919 32 0 1 f 20920 32 0 1 f 20921 32 0 1 1 3 5 6 7 10 11 13 14 15 19 21 22 23 24 25 28 29 20922 32 0 1 1 2 3 5 6 7 9 10 11 12 13 14 15 18 19 25 26 27 28 20923 32 0 1 e 20924 32 0 1 0 11 13 14 17 21 22 24 28 29 30 31 20925 32 0 1 0 11 13 14 17 21 22 24 28 29 30 31 20926 32 0 1 0 1 5 6 9 12 14 18 20 22 23 24 27 29 20927 32 0 1 0 1 6 12 20 23 24 29 20928 32 1 0 e 20929 32 1 0 e 20930 32 1 0 e 20931 32 1 0 e 20932 32 1 0 e 20933 32 1 0 e 20934 32 1 0 f 20935 32 1 0 e 20936 32 1 0 f 20937 32 1 0 f 20938 32 1 0 f 20939 32 1 0 1 6 8 9 10 12 17 18 19 21 23 25 27 29 30 20940 32 1 0 0 2 4 5 7 8 10 11 15 16 17 20 21 23 24 25 26 27 29 20941 32 1 0 e 20942 32 1 0 5 6 9 10 11 17 18 19 20 21 22 24 25 29 31 20943 32 1 0 5 6 9 10 11 17 18 19 20 21 22 24 25 29 31 20944 32 1 0 1 2 3 4 5 8 10 15 18 21 22 23 27 29 30 31 20945 32 1 0 1 2 3 4 5 10 15 21 22 31 20946 32 1 0 e 20947 32 1 0 e 20948 32 1 0 e 20949 32 1 0 e 20950 32 1 0 e 20951 32 1 0 e 20952 32 1 0 f 20953 32 1 0 e 20954 32 1 0 f 20955 32 1 0 f 20956 32 1 0 f 20957 32 1 0 2 4 8 11 12 15 19 20 21 23 26 29 31 20958 32 1 0 0 2 3 6 8 10 11 14 15 16 18 19 20 21 22 25 26 27 20959 32 1 0 e 20960 32 1 0 0 4 7 10 11 12 13 14 15 16 17 19 20 23 24 26 28 30 31 20961 32 1 0 0 4 7 10 11 12 13 14 15 16 17 19 20 23 24 26 28 30 31 20962 32 1 0 0 2 3 6 7 8 9 10 11 13 14 16 21 26 29 20963 32 1 0 2 3 6 7 9 10 11 16 26 20964 32 1 0 e 20965 32 1 0 e 20966 32 1 0 e 20967 32 1 0 e 20968 32 1 0 e 20969 32 1 0 e 20970 32 1 0 f 20971 32 1 0 e 20972 32 1 0 f 20973 32 1 0 f 20974 32 1 0 f 20975 32 1 0 0 2 4 5 6 7 9 10 11 12 14 16 17 19 20 22 23 24 25 27 29 20976 32 1 0 0 3 4 6 9 13 16 17 19 21 22 24 25 27 28 29 31 20977 32 1 0 e 20978 32 1 0 0 1 3 8 9 10 12 15 17 18 20 22 25 28 29 30 31 20979 32 1 0 0 1 3 8 9 10 12 15 17 18 20 22 25 28 29 30 31 20980 32 1 0 2 3 4 7 8 9 10 11 18 19 20 21 24 25 28 20981 32 1 0 2 3 10 20 21 24 28 20982 32 1 0 e 20983 32 1 0 e 20984 32 1 0 e 20985 32 1 0 e 20986 32 1 0 e 20987 32 1 0 e 20988 32 1 0 f 20989 32 1 0 e 20990 32 1 0 f 20991 32 1 0 f 20992 32 1 0 f 20993 32 1 0 2 5 6 7 11 14 15 19 23 27 31 20994 32 1 0 0 4 5 9 11 12 13 14 19 20 21 22 25 26 31 20995 32 1 0 e 20996 32 1 0 6 7 10 16 17 21 22 23 24 25 28 20997 32 1 0 6 7 10 16 17 21 22 23 24 25 28 20998 32 1 0 0 2 4 5 12 13 14 16 18 21 22 28 29 30 31 20999 32 1 0 4 5 12 13 16 18 21 28 29 30 31 21000 32 1 1 e 21001 32 1 1 e 21002 32 1 1 e 21003 32 1 1 e 21004 32 1 1 e 21005 32 1 1 e 21006 32 1 1 f 21007 32 1 1 e 21008 32 1 1 f 21009 32 1 1 f 21010 32 1 1 f 21011 32 1 1 5 6 7 8 10 16 20 21 22 25 27 29 31 21012 32 1 1 1 2 5 10 11 13 14 19 20 25 26 31 21013 32 1 1 e 21014 32 1 1 0 5 6 7 8 14 15 16 18 19 20 21 22 23 24 25 29 30 21015 32 1 1 0 5 6 7 8 14 15 16 18 19 20 21 22 23 24 25 29 30 21016 32 1 1 0 2 4 6 7 8 12 15 17 20 23 25 26 27 29 30 21017 32 1 1 2 12 20 25 30 21018 32 1 1 e 21019 32 1 1 e 21020 32 1 1 e 21021 32 1 1 e 21022 32 1 1 e 21023 32 1 1 e 21024 32 1 1 f 21025 32 1 1 e 21026 32 1 1 f 21027 32 1 1 f 21028 32 1 1 f 21029 32 1 1 0 1 3 5 10 12 14 16 17 20 22 23 29 30 21030 32 1 1 3 5 8 9 10 11 13 16 17 18 19 20 21 24 25 26 30 31 21031 32 1 1 e 21032 32 1 1 0 1 2 3 4 5 7 8 10 13 14 15 16 17 18 19 20 22 23 24 25 29 31 21033 32 1 1 0 1 2 3 4 5 7 8 10 13 14 15 16 17 18 19 20 22 23 24 25 29 31 21034 32 1 1 0 2 3 8 10 13 15 16 17 18 21 26 27 30 21035 32 1 1 3 8 13 16 17 18 21 26 27 21036 32 1 1 e 21037 32 1 1 e 21038 32 1 1 e 21039 32 1 1 e 21040 32 1 1 e 21041 32 1 1 e 21042 32 1 1 f 21043 32 1 1 e 21044 32 1 1 f 21045 32 1 1 f 21046 32 1 1 f 21047 32 1 1 1 2 3 5 11 14 16 17 18 19 20 21 22 24 26 27 28 29 30 21048 32 1 1 0 1 3 4 5 9 12 13 14 15 16 17 18 19 20 21 22 23 24 25 27 28 21049 32 1 1 e 21050 32 1 1 1 4 5 6 8 10 11 14 15 18 19 21 22 28 29 30 21051 32 1 1 1 4 5 6 8 10 11 14 15 18 19 21 22 28 29 30 21052 32 1 1 0 2 3 5 6 7 8 9 10 16 17 20 25 21053 32 1 1 2 3 5 6 7 8 17 25 21054 32 1 1 e 21055 32 1 1 e 21056 32 1 1 e 21057 32 1 1 e 21058 32 1 1 e 21059 32 1 1 e 21060 32 1 1 f 21061 32 1 1 e 21062 32 1 1 f 21063 32 1 1 f 21064 32 1 1 f 21065 32 1 1 0 3 6 9 10 11 13 14 15 16 17 18 20 22 24 25 27 21066 32 1 1 1 3 11 12 13 14 15 16 19 20 21 24 25 28 29 30 21067 32 1 1 e 21068 32 1 1 0 1 3 5 8 9 11 12 13 14 15 17 20 21 22 23 25 28 30 21069 32 1 1 0 1 3 5 8 9 11 12 13 14 15 17 20 21 22 23 25 28 30 21070 32 1 1 5 6 8 13 15 16 17 18 19 21 22 23 24 28 30 31 21071 32 1 1 8 13 15 16 17 18 21 30 21072 33 0 0 e 21073 33 0 0 e 21074 33 0 0 e 21075 33 0 0 e 21076 33 0 0 e 21077 33 0 0 e 21078 33 0 0 f 21079 33 0 0 e 21080 33 0 0 f 21081 33 0 0 f 21082 33 0 0 f 21083 33 0 0 0 3 8 9 10 14 18 21 22 24 25 26 27 31 32 21084 33 0 0 0 1 5 8 9 13 15 16 17 19 20 21 22 23 25 26 27 29 30 32 21085 33 0 0 e 21086 33 0 0 2 4 6 8 10 12 13 17 20 21 22 24 25 26 27 28 29 30 21087 33 0 0 2 4 6 8 10 12 13 17 20 21 22 24 25 26 27 28 29 30 21088 33 0 0 0 3 5 6 7 8 11 13 21 23 26 28 29 30 31 21089 33 0 0 3 5 6 7 13 28 29 30 31 21090 33 0 0 e 21091 33 0 0 e 21092 33 0 0 e 21093 33 0 0 e 21094 33 0 0 e 21095 33 0 0 e 21096 33 0 0 f 21097 33 0 0 e 21098 33 0 0 f 21099 33 0 0 f 21100 33 0 0 f 21101 33 0 0 0 1 3 6 9 10 11 12 15 17 18 19 22 23 24 28 29 30 31 21102 33 0 0 2 3 9 11 16 20 24 25 27 28 32 21103 33 0 0 e 21104 33 0 0 1 3 5 9 10 13 17 19 21 22 25 27 28 29 32 21105 33 0 0 1 3 5 9 10 13 17 19 21 22 25 27 28 29 32 21106 33 0 0 0 1 2 6 8 11 12 13 15 21 22 25 27 30 31 21107 33 0 0 0 2 6 13 15 21 30 31 21108 33 0 0 e 21109 33 0 0 e 21110 33 0 0 e 21111 33 0 0 e 21112 33 0 0 e 21113 33 0 0 e 21114 33 0 0 f 21115 33 0 0 e 21116 33 0 0 f 21117 33 0 0 f 21118 33 0 0 f 21119 33 0 0 2 3 4 5 6 8 9 14 18 20 21 22 23 25 26 27 28 29 31 21120 33 0 0 1 2 3 4 6 7 8 13 15 16 17 18 21 22 24 25 26 29 30 32 21121 33 0 0 e 21122 33 0 0 0 2 5 6 7 10 11 12 13 14 18 22 29 31 21123 33 0 0 0 2 5 6 7 10 11 12 13 14 18 22 29 31 21124 33 0 0 2 5 8 13 14 16 18 19 21 23 26 28 29 30 31 21125 33 0 0 5 13 14 16 19 28 31 21126 33 0 0 e 21127 33 0 0 e 21128 33 0 0 e 21129 33 0 0 e 21130 33 0 0 e 21131 33 0 0 e 21132 33 0 0 f 21133 33 0 0 e 21134 33 0 0 f 21135 33 0 0 f 21136 33 0 0 f 21137 33 0 0 1 3 6 9 11 12 16 18 20 22 24 27 28 21138 33 0 0 0 5 6 10 11 12 14 17 19 20 24 26 27 21139 33 0 0 e 21140 33 0 0 0 2 3 5 7 8 9 10 12 15 19 20 21 22 23 24 25 27 28 29 31 21141 33 0 0 0 2 3 5 7 8 9 10 12 15 19 20 21 22 23 24 25 27 28 29 31 21142 33 0 0 4 7 8 12 14 16 17 18 21 28 29 31 21143 33 0 0 7 17 21 21144 33 0 1 e 21145 33 0 1 e 21146 33 0 1 e 21147 33 0 1 e 21148 33 0 1 e 21149 33 0 1 e 21150 33 0 1 f 21151 33 0 1 e 21152 33 0 1 f 21153 33 0 1 f 21154 33 0 1 f 21155 33 0 1 1 5 10 12 15 16 21 22 24 26 28 31 21156 33 0 1 0 5 6 7 10 11 12 13 14 16 17 18 19 20 25 26 29 30 31 21157 33 0 1 e 21158 33 0 1 2 3 5 7 8 12 13 15 18 19 20 21 22 24 26 27 29 21159 33 0 1 2 3 5 7 8 12 13 15 18 19 20 21 22 24 26 27 29 21160 33 0 1 0 2 3 4 8 9 11 15 16 17 19 20 21 22 24 25 26 30 32 21161 33 0 1 2 3 9 15 22 26 32 21162 33 0 1 e 21163 33 0 1 e 21164 33 0 1 e 21165 33 0 1 e 21166 33 0 1 e 21167 33 0 1 e 21168 33 0 1 f 21169 33 0 1 e 21170 33 0 1 f 21171 33 0 1 f 21172 33 0 1 f 21173 33 0 1 0 1 3 5 6 7 9 11 12 13 15 19 21 24 25 27 21174 33 0 1 8 10 11 13 14 15 17 24 25 26 27 31 32 21175 33 0 1 e 21176 33 0 1 0 1 5 6 7 8 9 11 12 13 14 15 19 21 24 26 28 21177 33 0 1 0 1 5 6 7 8 9 11 12 13 14 15 19 21 24 26 28 21178 33 0 1 0 1 2 4 5 8 9 11 12 13 17 18 19 22 23 24 25 26 30 31 32 21179 33 0 1 0 2 4 9 12 13 17 19 22 26 21180 33 0 1 e 21181 33 0 1 e 21182 33 0 1 e 21183 33 0 1 e 21184 33 0 1 e 21185 33 0 1 e 21186 33 0 1 f 21187 33 0 1 e 21188 33 0 1 f 21189 33 0 1 f 21190 33 0 1 f 21191 33 0 1 0 1 2 4 5 6 12 15 16 19 21 22 23 26 27 28 29 30 31 32 21192 33 0 1 0 3 5 7 11 12 14 16 17 19 22 23 24 25 26 27 28 30 31 32 21193 33 0 1 e 21194 33 0 1 1 2 3 4 5 9 11 12 13 18 21 27 30 32 21195 33 0 1 1 2 3 4 5 9 11 12 13 18 21 27 30 32 21196 33 0 1 0 2 4 6 7 8 11 12 13 14 16 19 20 21 24 26 28 31 32 21197 33 0 1 4 6 8 11 13 14 19 20 26 31 32 21198 33 0 1 e 21199 33 0 1 e 21200 33 0 1 e 21201 33 0 1 e 21202 33 0 1 e 21203 33 0 1 e 21204 33 0 1 f 21205 33 0 1 e 21206 33 0 1 f 21207 33 0 1 f 21208 33 0 1 f 21209 33 0 1 3 5 6 7 10 13 14 19 21 23 26 27 28 30 31 32 21210 33 0 1 1 2 5 7 8 9 12 13 14 18 20 21 22 25 26 27 28 29 31 32 21211 33 0 1 e 21212 33 0 1 4 6 7 8 11 13 15 21 22 23 24 26 27 28 29 32 21213 33 0 1 4 6 7 8 11 13 15 21 22 23 24 26 27 28 29 32 21214 33 0 1 0 1 2 3 4 6 8 11 12 16 23 25 26 27 30 32 21215 33 0 1 0 2 4 11 16 25 26 27 30 21216 33 1 0 e 21217 33 1 0 e 21218 33 1 0 e 21219 33 1 0 e 21220 33 1 0 e 21221 33 1 0 e 21222 33 1 0 f 21223 33 1 0 e 21224 33 1 0 f 21225 33 1 0 f 21226 33 1 0 f 21227 33 1 0 0 1 3 4 6 8 10 11 12 13 14 15 20 21 22 23 27 28 29 31 21228 33 1 0 0 1 5 7 9 12 14 16 18 19 20 21 22 25 27 32 21229 33 1 0 e 21230 33 1 0 0 1 6 8 10 11 14 15 18 19 21 26 28 21231 33 1 0 0 1 6 8 10 11 14 15 18 19 21 26 28 21232 33 1 0 0 1 2 4 5 6 8 9 10 12 13 18 20 22 23 26 27 28 31 21233 33 1 0 0 1 4 5 6 8 10 12 13 18 27 21234 33 1 0 e 21235 33 1 0 e 21236 33 1 0 e 21237 33 1 0 e 21238 33 1 0 e 21239 33 1 0 e 21240 33 1 0 f 21241 33 1 0 e 21242 33 1 0 f 21243 33 1 0 f 21244 33 1 0 f 21245 33 1 0 0 2 3 6 7 11 12 17 21 24 26 29 30 21246 33 1 0 3 4 11 12 13 15 18 20 23 30 31 32 21247 33 1 0 e 21248 33 1 0 2 4 6 7 8 9 10 11 12 14 19 23 25 27 28 29 30 31 21249 33 1 0 2 4 6 7 8 9 10 11 12 14 19 23 25 27 28 29 30 31 21250 33 1 0 3 8 13 14 16 17 18 21 22 25 30 31 32 21251 33 1 0 8 17 21 25 30 21252 33 1 0 e 21253 33 1 0 e 21254 33 1 0 e 21255 33 1 0 e 21256 33 1 0 e 21257 33 1 0 e 21258 33 1 0 f 21259 33 1 0 e 21260 33 1 0 f 21261 33 1 0 f 21262 33 1 0 f 21263 33 1 0 0 2 3 4 6 7 8 12 13 14 17 18 21 23 25 28 29 30 21264 33 1 0 0 7 8 11 13 16 17 20 22 23 25 28 29 30 31 21265 33 1 0 e 21266 33 1 0 1 2 3 5 6 7 9 10 12 14 15 16 18 19 24 25 27 28 29 32 21267 33 1 0 1 2 3 5 6 7 9 10 12 14 15 16 18 19 24 25 27 28 29 32 21268 33 1 0 5 8 9 12 13 14 16 17 21 24 27 28 29 30 21269 33 1 0 13 24 27 28 29 21270 33 1 0 e 21271 33 1 0 e 21272 33 1 0 e 21273 33 1 0 e 21274 33 1 0 e 21275 33 1 0 e 21276 33 1 0 f 21277 33 1 0 e 21278 33 1 0 f 21279 33 1 0 f 21280 33 1 0 f 21281 33 1 0 0 4 6 13 14 15 18 23 28 29 30 31 21282 33 1 0 0 5 6 7 10 12 13 16 17 18 21 23 24 25 26 27 29 21283 33 1 0 e 21284 33 1 0 0 1 4 6 7 9 10 14 18 19 20 21 22 24 25 26 27 21285 33 1 0 0 1 4 6 7 9 10 14 18 19 20 21 22 24 25 26 27 21286 33 1 0 0 1 3 10 11 14 15 17 20 21 23 24 28 29 30 21287 33 1 0 10 11 17 23 24 21288 33 1 1 e 21289 33 1 1 e 21290 33 1 1 e 21291 33 1 1 e 21292 33 1 1 e 21293 33 1 1 e 21294 33 1 1 f 21295 33 1 1 e 21296 33 1 1 f 21297 33 1 1 f 21298 33 1 1 f 21299 33 1 1 2 4 6 7 9 10 11 12 14 15 16 18 19 20 22 26 27 30 31 32 21300 33 1 1 0 1 2 4 5 6 9 11 12 13 14 16 17 19 20 21 23 27 29 30 32 21301 33 1 1 e 21302 33 1 1 0 1 2 4 6 7 9 10 12 16 22 23 25 26 28 31 32 21303 33 1 1 0 1 2 4 6 7 9 10 12 16 22 23 25 26 28 31 32 21304 33 1 1 2 6 10 12 15 16 17 19 20 23 25 26 31 32 21305 33 1 1 2 6 12 16 20 23 25 31 21306 33 1 1 e 21307 33 1 1 e 21308 33 1 1 e 21309 33 1 1 e 21310 33 1 1 e 21311 33 1 1 e 21312 33 1 1 f 21313 33 1 1 e 21314 33 1 1 f 21315 33 1 1 f 21316 33 1 1 f 21317 33 1 1 1 3 6 12 14 16 18 19 20 21 22 24 25 26 32 21318 33 1 1 0 4 5 8 9 10 12 20 22 23 26 32 21319 33 1 1 e 21320 33 1 1 0 2 4 5 7 8 9 10 14 16 17 20 25 26 27 29 21321 33 1 1 0 2 4 5 7 8 9 10 14 16 17 20 25 26 27 29 21322 33 1 1 1 9 11 13 14 17 19 21 22 25 26 30 32 21323 33 1 1 1 11 13 19 25 21324 33 1 1 e 21325 33 1 1 e 21326 33 1 1 e 21327 33 1 1 e 21328 33 1 1 e 21329 33 1 1 e 21330 33 1 1 f 21331 33 1 1 e 21332 33 1 1 f 21333 33 1 1 f 21334 33 1 1 f 21335 33 1 1 2 6 7 12 14 16 17 19 23 25 27 30 31 21336 33 1 1 0 2 5 9 11 12 15 16 18 19 20 21 23 25 28 29 30 21337 33 1 1 e 21338 33 1 1 0 1 3 5 6 7 9 10 11 15 18 20 22 23 24 27 29 30 32 21339 33 1 1 0 1 3 5 6 7 9 10 11 15 18 20 22 23 24 27 29 30 32 21340 33 1 1 1 2 4 5 6 7 8 10 12 13 14 19 20 21 22 29 31 32 21341 33 1 1 2 6 7 10 12 14 22 31 32 21342 33 1 1 e 21343 33 1 1 e 21344 33 1 1 e 21345 33 1 1 e 21346 33 1 1 e 21347 33 1 1 e 21348 33 1 1 f 21349 33 1 1 e 21350 33 1 1 f 21351 33 1 1 f 21352 33 1 1 f 21353 33 1 1 0 1 2 3 4 8 10 12 13 15 17 18 19 22 23 24 27 28 21354 33 1 1 4 5 9 18 19 20 24 26 28 30 32 21355 33 1 1 e 21356 33 1 1 0 1 3 4 5 7 8 10 12 16 20 25 27 28 30 31 21357 33 1 1 0 1 3 4 5 7 8 10 12 16 20 25 27 28 30 31 21358 33 1 1 3 4 5 6 8 12 15 16 17 18 21 22 25 26 27 29 30 31 21359 33 1 1 4 12 17 18 21 22 26 27 29 30 31 21360 63 0 0 e 21361 63 0 0 e 21362 63 0 0 e 21363 63 0 0 e 21364 63 0 0 e 21365 63 0 0 e 21366 63 0 0 f 21367 63 0 0 e 21368 63 0 0 f 21369 63 0 0 f 21370 63 0 0 f 21371 63 0 0 0 1 5 7 8 10 11 12 14 16 18 20 21 23 28 29 30 31 33 34 35 36 39 40 43 44 47 48 49 51 52 55 56 57 59 61 62 21372 63 0 0 0 1 2 3 4 8 9 10 11 12 14 17 18 20 22 23 26 28 29 30 31 32 33 34 35 36 37 39 40 42 44 45 46 48 49 52 56 59 62 21373 63 0 0 e 21374 63 0 0 3 10 11 13 14 18 19 23 24 27 28 29 31 32 33 34 39 40 43 47 48 50 52 53 54 55 60 61 21375 63 0 0 3 10 11 13 14 18 19 23 24 27 28 29 31 32 33 34 39 40 43 47 48 50 52 53 54 55 60 61 21376 63 0 0 0 1 6 10 13 14 16 18 19 20 21 22 23 27 30 35 36 38 39 41 43 44 45 54 55 56 59 21377 63 0 0 0 1 10 13 14 16 18 23 38 39 43 45 21378 63 0 0 e 21379 63 0 0 e 21380 63 0 0 e 21381 63 0 0 e 21382 63 0 0 e 21383 63 0 0 e 21384 63 0 0 f 21385 63 0 0 e 21386 63 0 0 f 21387 63 0 0 f 21388 63 0 0 f 21389 63 0 0 0 1 2 6 7 11 12 14 17 20 24 29 31 35 36 41 44 46 49 51 53 57 59 60 61 62 21390 63 0 0 2 3 8 10 13 14 17 18 21 22 25 26 29 30 31 33 34 35 39 41 43 44 54 55 56 57 58 60 61 21391 63 0 0 e 21392 63 0 0 1 2 8 13 14 15 16 17 23 26 27 29 31 32 37 41 42 43 44 47 49 51 53 54 55 57 58 59 60 61 62 21393 63 0 0 1 2 8 13 14 15 16 17 23 26 27 29 31 32 37 41 42 43 44 47 49 51 53 54 55 57 58 59 60 61 62 21394 63 0 0 0 2 3 4 5 7 8 10 11 15 16 17 21 23 25 26 27 28 29 30 32 33 35 37 38 43 44 46 49 50 51 52 54 59 61 21395 63 0 0 2 3 5 7 10 16 17 21 25 27 44 46 61 21396 63 0 0 e 21397 63 0 0 e 21398 63 0 0 e 21399 63 0 0 e 21400 63 0 0 e 21401 63 0 0 e 21402 63 0 0 f 21403 63 0 0 e 21404 63 0 0 f 21405 63 0 0 f 21406 63 0 0 f 21407 63 0 0 1 3 6 7 10 11 12 14 15 16 22 24 25 27 32 36 38 41 44 46 47 51 52 53 55 56 57 59 61 21408 63 0 0 2 5 7 11 14 15 16 19 23 24 27 28 31 35 37 39 41 49 51 52 53 54 55 58 59 62 21409 63 0 0 e 21410 63 0 0 0 1 3 4 7 8 9 14 16 18 19 24 25 27 29 30 32 34 35 36 41 42 46 48 49 50 54 55 58 62 21411 63 0 0 0 1 3 4 7 8 9 14 16 18 19 24 25 27 29 30 32 34 35 36 41 42 46 48 49 50 54 55 58 62 21412 63 0 0 1 2 3 5 7 10 11 14 15 18 19 20 22 23 27 28 29 30 31 32 34 39 40 41 46 48 49 52 53 57 59 60 62 21413 63 0 0 1 2 3 7 15 18 19 23 28 34 39 40 41 46 49 52 60 21414 63 0 0 e 21415 63 0 0 e 21416 63 0 0 e 21417 63 0 0 e 21418 63 0 0 e 21419 63 0 0 e 21420 63 0 0 f 21421 63 0 0 e 21422 63 0 0 f 21423 63 0 0 f 21424 63 0 0 f 21425 63 0 0 0 3 10 11 12 13 16 19 23 24 25 26 30 31 32 34 39 40 42 45 46 50 58 60 61 21426 63 0 0 3 4 7 11 12 14 15 16 17 18 23 24 25 26 29 30 31 33 34 35 37 38 39 44 50 51 52 54 56 57 58 60 21427 63 0 0 e 21428 63 0 0 0 3 4 6 7 8 9 11 12 16 18 23 25 27 28 29 31 34 36 44 45 47 52 55 57 58 60 61 62 21429 63 0 0 0 3 4 6 7 8 9 11 12 16 18 23 25 27 28 29 31 34 36 44 45 47 52 55 57 58 60 61 62 21430 63 0 0 2 3 6 7 8 11 13 17 19 20 21 22 23 25 27 30 31 32 36 38 40 45 46 48 51 55 56 57 21431 63 0 0 2 3 6 7 11 17 20 22 23 25 27 30 31 36 38 55 56 21432 63 0 1 e 21433 63 0 1 e 21434 63 0 1 e 21435 63 0 1 e 21436 63 0 1 e 21437 63 0 1 e 21438 63 0 1 f 21439 63 0 1 e 21440 63 0 1 f 21441 63 0 1 f 21442 63 0 1 f 21443 63 0 1 1 2 4 5 7 12 14 15 16 17 29 31 34 36 38 40 43 44 46 50 51 52 55 56 57 59 61 62 21444 63 0 1 0 1 2 4 8 10 11 15 16 17 18 19 24 25 26 27 29 30 32 34 35 36 37 38 39 41 43 44 45 47 48 53 54 56 57 62 21445 63 0 1 e 21446 63 0 1 1 3 6 8 9 10 11 12 13 18 19 20 21 26 27 28 31 32 33 34 37 38 40 46 47 48 49 51 52 53 58 59 60 62 21447 63 0 1 1 3 6 8 9 10 11 12 13 18 19 20 21 26 27 28 31 32 33 34 37 38 40 46 47 48 49 51 52 53 58 59 60 62 21448 63 0 1 0 2 4 5 6 8 10 12 18 20 21 22 28 29 31 34 37 38 39 44 46 47 48 49 51 52 53 54 55 60 62 21449 63 0 1 2 4 5 18 20 21 29 31 39 47 49 52 55 21450 63 0 1 e 21451 63 0 1 e 21452 63 0 1 e 21453 63 0 1 e 21454 63 0 1 e 21455 63 0 1 e 21456 63 0 1 f 21457 63 0 1 e 21458 63 0 1 f 21459 63 0 1 f 21460 63 0 1 f 21461 63 0 1 0 2 3 5 6 8 10 16 18 19 20 21 28 30 32 35 40 42 43 45 49 52 54 56 57 58 59 61 21462 63 0 1 2 4 5 6 7 8 9 10 11 13 14 15 16 17 20 21 22 24 25 30 31 34 37 40 41 42 44 45 47 48 50 51 53 55 56 57 21463 63 0 1 e 21464 63 0 1 0 1 3 5 8 11 12 15 17 18 20 21 22 23 24 25 29 31 33 34 35 36 41 45 47 49 52 57 58 60 21465 63 0 1 0 1 3 5 8 11 12 15 17 18 20 21 22 23 24 25 29 31 33 34 35 36 41 45 47 49 52 57 58 60 21466 63 0 1 1 3 4 5 9 10 11 14 15 16 17 20 22 24 25 26 28 30 31 34 35 36 41 42 45 48 49 50 51 53 54 55 56 57 59 61 62 21467 63 0 1 5 9 11 15 17 24 31 35 36 41 42 49 54 56 61 21468 63 0 1 e 21469 63 0 1 e 21470 63 0 1 e 21471 63 0 1 e 21472 63 0 1 e 21473 63 0 1 e 21474 63 0 1 f 21475 63 0 1 e 21476 63 0 1 f 21477 63 0 1 f 21478 63 0 1 f 21479 63 0 1 1 3 6 9 10 11 13 14 18 19 22 26 27 31 34 35 36 39 42 44 46 48 49 53 54 55 57 58 61 21480 63 0 1 0 2 6 8 9 10 12 18 19 20 21 22 24 25 28 30 31 32 33 35 37 39 40 43 44 48 52 54 55 56 59 62 21481 63 0 1 e 21482 63 0 1 1 2 5 8 9 11 13 15 16 17 18 20 23 28 30 33 35 36 37 38 39 40 42 46 49 51 53 54 57 58 61 21483 63 0 1 1 2 5 8 9 11 13 15 16 17 18 20 23 28 30 33 35 36 37 38 39 40 42 46 49 51 53 54 57 58 61 21484 63 0 1 0 1 2 3 4 5 6 7 8 10 11 12 14 15 17 23 27 28 31 32 35 39 42 45 47 48 49 52 53 54 56 59 60 21485 63 0 1 0 1 2 4 6 7 8 10 11 12 15 17 27 32 35 47 49 52 54 59 60 21486 63 0 1 e 21487 63 0 1 e 21488 63 0 1 e 21489 63 0 1 e 21490 63 0 1 e 21491 63 0 1 e 21492 63 0 1 f 21493 63 0 1 e 21494 63 0 1 f 21495 63 0 1 f 21496 63 0 1 f 21497 63 0 1 2 3 7 9 11 12 13 14 15 16 20 23 24 26 29 30 32 33 37 38 39 40 43 46 48 50 51 52 54 55 57 58 59 61 21498 63 0 1 1 2 3 5 6 7 8 11 12 13 14 16 18 19 23 24 26 28 29 30 32 34 37 39 40 41 42 43 44 46 47 48 49 51 53 54 55 57 59 60 21499 63 0 1 e 21500 63 0 1 0 1 4 5 7 8 10 11 12 14 15 16 17 19 20 22 23 25 28 29 30 31 33 36 37 39 40 42 43 46 49 55 57 61 21501 63 0 1 0 1 4 5 7 8 10 11 12 14 15 16 17 19 20 22 23 25 28 29 30 31 33 36 37 39 40 42 43 46 49 55 57 61 21502 63 0 1 0 1 2 4 6 7 10 12 18 19 22 24 25 30 34 36 37 40 42 43 46 47 49 50 51 52 53 55 57 58 59 61 62 21503 63 0 1 0 2 6 7 10 22 34 43 47 49 52 57 61 62 21504 63 1 0 e 21505 63 1 0 e 21506 63 1 0 e 21507 63 1 0 e 21508 63 1 0 e 21509 63 1 0 e 21510 63 1 0 f 21511 63 1 0 e 21512 63 1 0 f 21513 63 1 0 f 21514 63 1 0 f 21515 63 1 0 2 6 7 8 9 11 12 16 17 18 20 21 22 24 25 26 34 35 37 38 40 43 45 50 53 55 56 61 62 21516 63 1 0 0 1 2 3 5 7 8 9 11 13 15 17 18 19 20 21 23 24 27 28 30 31 34 35 38 39 40 41 42 44 45 46 48 49 51 54 56 59 61 62 21517 63 1 0 e 21518 63 1 0 0 2 4 5 7 8 15 17 18 19 22 23 25 26 29 34 37 38 44 45 48 52 53 54 56 57 58 60 62 21519 63 1 0 0 2 4 5 7 8 15 17 18 19 22 23 25 26 29 34 37 38 44 45 48 52 53 54 56 57 58 60 62 21520 63 1 0 3 4 6 7 8 16 17 18 21 23 24 29 30 31 35 36 38 39 42 43 44 47 49 50 51 52 57 58 59 60 61 21521 63 1 0 3 6 7 8 16 17 18 23 24 30 31 35 38 39 50 52 58 60 61 21522 63 1 0 e 21523 63 1 0 e 21524 63 1 0 e 21525 63 1 0 e 21526 63 1 0 e 21527 63 1 0 e 21528 63 1 0 f 21529 63 1 0 e 21530 63 1 0 f 21531 63 1 0 f 21532 63 1 0 f 21533 63 1 0 1 4 5 7 8 11 13 14 16 18 23 25 27 29 31 32 34 35 38 39 40 42 45 46 48 49 50 53 54 55 56 58 61 21534 63 1 0 4 5 7 8 9 15 20 25 27 28 32 37 39 41 43 44 48 49 50 54 55 56 58 59 21535 63 1 0 e 21536 63 1 0 1 2 3 4 6 7 8 9 11 12 13 15 18 19 20 21 22 23 24 26 27 28 29 31 32 33 34 35 37 38 41 44 48 49 52 55 57 58 60 21537 63 1 0 1 2 3 4 6 7 8 9 11 12 13 15 18 19 20 21 22 23 24 26 27 28 29 31 32 33 34 35 37 38 41 44 48 49 52 55 57 58 60 21538 63 1 0 0 2 4 5 12 13 14 16 17 20 21 23 26 29 30 33 34 35 37 39 41 44 45 48 49 50 52 55 56 57 60 21539 63 1 0 12 20 23 29 30 37 39 41 45 49 55 57 21540 63 1 0 e 21541 63 1 0 e 21542 63 1 0 e 21543 63 1 0 e 21544 63 1 0 e 21545 63 1 0 e 21546 63 1 0 f 21547 63 1 0 e 21548 63 1 0 f 21549 63 1 0 f 21550 63 1 0 f 21551 63 1 0 4 5 6 7 10 12 13 14 15 16 17 20 22 23 24 27 30 31 32 34 35 37 38 39 41 44 45 48 49 50 51 53 54 55 57 58 59 21552 63 1 0 1 4 7 8 10 12 13 16 24 27 28 29 33 34 45 46 47 51 52 53 55 56 58 59 61 62 21553 63 1 0 e 21554 63 1 0 0 1 2 4 5 9 10 11 12 13 14 15 16 19 22 27 28 30 32 33 34 35 36 40 41 43 44 46 47 48 52 54 55 56 57 58 59 61 21555 63 1 0 0 1 2 4 5 9 10 11 12 13 14 15 16 19 22 27 28 30 32 33 34 35 36 40 41 43 44 46 47 48 52 54 55 56 57 58 59 61 21556 63 1 0 1 2 7 10 15 16 17 21 22 24 25 27 30 33 34 35 40 42 43 44 45 46 47 48 50 53 54 56 60 62 21557 63 1 0 7 10 17 25 33 43 44 45 46 48 50 21558 63 1 0 e 21559 63 1 0 e 21560 63 1 0 e 21561 63 1 0 e 21562 63 1 0 e 21563 63 1 0 e 21564 63 1 0 f 21565 63 1 0 e 21566 63 1 0 f 21567 63 1 0 f 21568 63 1 0 f 21569 63 1 0 0 1 2 4 5 7 10 11 12 13 15 16 17 19 20 21 23 24 25 26 27 29 30 32 33 35 37 39 42 44 45 46 47 48 50 51 55 58 61 62 21570 63 1 0 3 4 5 7 9 12 15 17 18 20 22 23 25 26 27 30 32 33 35 36 37 38 40 42 44 48 49 51 54 55 57 58 62 21571 63 1 0 e 21572 63 1 0 6 7 11 12 13 14 16 17 18 19 21 22 23 26 27 28 30 31 32 36 38 39 42 45 46 47 48 50 51 54 55 56 57 59 60 62 21573 63 1 0 6 7 11 12 13 14 16 17 18 19 21 22 23 26 27 28 30 31 32 36 38 39 42 45 46 47 48 50 51 54 55 56 57 59 60 62 21574 63 1 0 0 2 3 6 8 10 12 13 14 15 20 21 23 24 27 31 32 34 36 37 42 45 46 47 53 54 56 60 61 21575 63 1 0 0 3 8 13 14 15 20 21 24 32 36 37 42 45 46 47 53 54 60 61 21576 63 1 1 e 21577 63 1 1 e 21578 63 1 1 e 21579 63 1 1 e 21580 63 1 1 e 21581 63 1 1 e 21582 63 1 1 f 21583 63 1 1 e 21584 63 1 1 f 21585 63 1 1 f 21586 63 1 1 f 21587 63 1 1 0 3 6 11 12 15 16 18 20 22 24 25 26 27 28 31 32 33 36 38 40 43 44 46 47 48 49 54 55 56 58 59 60 61 21588 63 1 1 0 1 2 4 7 9 12 13 15 17 18 19 22 26 27 29 32 34 36 41 42 46 47 49 50 53 54 56 57 60 61 21589 63 1 1 e 21590 63 1 1 3 7 8 10 11 12 14 15 17 18 19 22 23 27 31 32 34 36 39 42 45 46 47 48 49 50 51 53 54 55 57 61 21591 63 1 1 3 7 8 10 11 12 14 15 17 18 19 22 23 27 31 32 34 36 39 42 45 46 47 48 49 50 51 53 54 55 57 61 21592 63 1 1 0 2 7 8 9 10 11 14 17 20 21 22 23 25 27 29 30 33 37 39 40 42 43 44 45 47 48 51 55 57 60 62 21593 63 1 1 0 7 8 10 11 17 22 23 29 30 37 40 43 45 47 51 62 21594 63 1 1 e 21595 63 1 1 e 21596 63 1 1 e 21597 63 1 1 e 21598 63 1 1 e 21599 63 1 1 e 21600 63 1 1 f 21601 63 1 1 e 21602 63 1 1 f 21603 63 1 1 f 21604 63 1 1 f 21605 63 1 1 1 4 5 9 11 12 13 16 17 19 25 26 27 28 29 30 32 34 38 41 44 45 47 49 51 53 56 57 59 60 61 21606 63 1 1 0 5 6 7 9 11 12 13 17 18 21 22 23 24 25 26 27 28 29 33 34 35 36 37 38 40 41 44 46 49 50 51 52 53 55 58 62 21607 63 1 1 e 21608 63 1 1 0 7 8 13 15 18 19 24 25 29 30 34 35 36 37 38 39 44 45 49 51 53 56 57 58 60 61 21609 63 1 1 0 7 8 13 15 18 19 24 25 29 30 34 35 36 37 38 39 44 45 49 51 53 56 57 58 60 61 21610 63 1 1 4 7 10 11 13 15 16 18 19 20 21 22 25 26 27 29 31 32 34 35 36 38 40 41 46 48 49 52 54 56 57 58 21611 63 1 1 7 10 15 19 27 29 34 35 36 38 40 41 48 49 56 57 58 21612 63 1 1 e 21613 63 1 1 e 21614 63 1 1 e 21615 63 1 1 e 21616 63 1 1 e 21617 63 1 1 e 21618 63 1 1 f 21619 63 1 1 e 21620 63 1 1 f 21621 63 1 1 f 21622 63 1 1 f 21623 63 1 1 1 3 6 7 10 14 19 20 21 24 25 26 27 30 31 34 35 36 38 40 42 44 45 47 48 49 50 51 52 55 56 57 58 61 21624 63 1 1 0 1 4 5 7 9 10 11 20 21 22 23 24 25 30 31 33 35 36 37 38 41 42 43 47 49 52 53 56 57 58 59 60 62 21625 63 1 1 e 21626 63 1 1 8 9 11 13 15 19 20 22 24 25 27 28 29 30 31 36 38 43 46 48 49 51 56 59 62 21627 63 1 1 8 9 11 13 15 19 20 22 24 25 27 28 29 30 31 36 38 43 46 48 49 51 56 59 62 21628 63 1 1 1 2 3 6 7 8 11 12 13 20 21 23 24 25 31 34 35 36 37 38 39 41 43 44 45 49 53 56 58 60 61 62 21629 63 1 1 2 3 6 7 8 11 25 31 34 36 37 43 44 49 53 58 21630 63 1 1 e 21631 63 1 1 e 21632 63 1 1 e 21633 63 1 1 e 21634 63 1 1 e 21635 63 1 1 e 21636 63 1 1 f 21637 63 1 1 e 21638 63 1 1 f 21639 63 1 1 f 21640 63 1 1 f 21641 63 1 1 1 2 4 5 6 7 9 10 13 16 19 20 27 30 31 39 41 42 43 44 47 48 51 52 53 57 58 59 61 62 21642 63 1 1 0 2 3 4 12 13 15 16 17 19 20 29 30 33 35 39 40 41 42 43 44 47 49 50 52 54 56 57 58 60 61 21643 63 1 1 e 21644 63 1 1 1 2 4 6 7 8 9 10 11 12 15 16 17 18 20 22 24 25 28 29 30 32 35 36 39 40 43 45 48 51 58 62 21645 63 1 1 1 2 4 6 7 8 9 10 11 12 15 16 17 18 20 22 24 25 28 29 30 32 35 36 39 40 43 45 48 51 58 62 21646 63 1 1 1 3 4 9 10 13 14 17 18 23 24 25 26 31 34 35 36 40 42 46 47 49 50 51 54 57 58 59 60 61 62 21647 63 1 1 10 14 23 26 31 34 35 40 42 46 49 51 54 57 59 62 21648 64 0 0 e 21649 64 0 0 e 21650 64 0 0 e 21651 64 0 0 e 21652 64 0 0 e 21653 64 0 0 e 21654 64 0 0 f 21655 64 0 0 e 21656 64 0 0 f 21657 64 0 0 f 21658 64 0 0 f 21659 64 0 0 0 1 2 4 5 6 9 11 12 15 17 18 19 21 23 27 28 29 30 32 33 34 36 37 38 40 41 43 45 47 48 50 53 54 59 60 63 21660 64 0 0 3 5 7 8 10 14 15 16 17 19 20 23 25 26 28 32 40 41 42 45 47 50 52 58 60 61 63 21661 64 0 0 e 21662 64 0 0 1 2 3 12 13 18 19 20 21 25 27 28 29 30 32 33 35 36 37 41 42 46 47 48 50 51 53 54 55 56 58 59 21663 64 0 0 1 2 3 12 13 18 19 20 21 25 27 28 29 30 32 33 35 36 37 41 42 46 47 48 50 51 53 54 55 56 58 59 21664 64 0 0 1 4 11 16 18 21 22 25 27 29 32 34 35 36 38 42 43 44 48 50 51 53 55 58 59 61 63 21665 64 0 0 1 11 18 25 27 34 35 42 43 50 55 58 61 21666 64 0 0 e 21667 64 0 0 e 21668 64 0 0 e 21669 64 0 0 e 21670 64 0 0 e 21671 64 0 0 e 21672 64 0 0 f 21673 64 0 0 e 21674 64 0 0 f 21675 64 0 0 f 21676 64 0 0 f 21677 64 0 0 3 4 11 14 17 20 22 24 26 27 28 29 30 36 37 41 45 46 47 48 50 52 53 54 55 57 58 60 61 62 63 21678 64 0 0 0 3 5 6 10 11 13 15 23 25 27 28 30 31 32 36 38 40 41 43 44 45 46 50 51 52 53 54 56 59 60 63 21679 64 0 0 e 21680 64 0 0 1 2 5 6 12 16 18 19 21 22 24 26 27 31 35 39 40 42 43 44 46 48 49 51 52 55 59 60 61 62 21681 64 0 0 1 2 5 6 12 16 18 19 21 22 24 26 27 31 35 39 40 42 43 44 46 48 49 51 52 55 59 60 61 62 21682 64 0 0 3 4 7 8 11 12 15 18 20 21 22 27 31 32 34 35 36 39 40 41 42 43 45 47 56 57 60 61 63 21683 64 0 0 7 8 12 18 20 27 31 34 42 47 56 57 60 21684 64 0 0 e 21685 64 0 0 e 21686 64 0 0 e 21687 64 0 0 e 21688 64 0 0 e 21689 64 0 0 e 21690 64 0 0 f 21691 64 0 0 e 21692 64 0 0 f 21693 64 0 0 f 21694 64 0 0 f 21695 64 0 0 0 1 2 3 4 9 13 14 19 21 22 23 25 26 28 30 31 33 35 36 37 41 42 43 44 45 47 49 50 51 52 53 55 56 59 63 21696 64 0 0 0 1 2 3 4 10 11 12 14 16 17 18 19 22 24 25 26 30 33 36 37 40 43 44 47 48 52 54 57 58 61 62 63 21697 64 0 0 e 21698 64 0 0 1 2 4 6 7 8 9 10 11 13 17 18 19 26 28 29 32 34 36 37 39 40 41 43 44 45 48 49 53 54 55 56 57 59 21699 64 0 0 1 2 4 6 7 8 9 10 11 13 17 18 19 26 28 29 32 34 36 37 39 40 41 43 44 45 48 49 53 54 55 56 57 59 21700 64 0 0 0 2 5 7 8 9 10 11 12 15 18 19 21 25 27 29 31 33 36 37 39 42 44 46 47 48 49 50 51 52 56 21701 64 0 0 2 7 8 11 12 19 21 33 44 49 56 21702 64 0 0 e 21703 64 0 0 e 21704 64 0 0 e 21705 64 0 0 e 21706 64 0 0 e 21707 64 0 0 e 21708 64 0 0 f 21709 64 0 0 e 21710 64 0 0 f 21711 64 0 0 f 21712 64 0 0 f 21713 64 0 0 1 2 3 5 6 7 8 14 15 17 21 22 25 26 28 31 32 34 37 41 42 43 44 45 46 50 51 53 55 56 60 61 63 21714 64 0 0 3 6 9 13 15 18 20 23 24 27 29 33 38 40 42 50 52 55 56 58 59 21715 64 0 0 e 21716 64 0 0 0 1 2 4 5 6 7 12 13 14 17 18 21 23 26 27 34 40 41 42 43 44 45 46 48 49 50 52 58 59 60 63 21717 64 0 0 0 1 2 4 5 6 7 12 13 14 17 18 21 23 26 27 34 40 41 42 43 44 45 46 48 49 50 52 58 59 60 63 21718 64 0 0 3 4 7 11 17 19 21 23 24 26 27 30 31 33 34 37 38 39 42 44 45 46 48 52 54 55 56 57 58 60 21719 64 0 0 3 4 17 19 21 23 30 33 38 39 42 44 46 55 56 57 21720 64 0 1 e 21721 64 0 1 e 21722 64 0 1 e 21723 64 0 1 e 21724 64 0 1 e 21725 64 0 1 e 21726 64 0 1 f 21727 64 0 1 e 21728 64 0 1 f 21729 64 0 1 f 21730 64 0 1 f 21731 64 0 1 2 4 6 9 10 14 21 23 25 30 31 33 36 38 41 42 43 45 46 47 51 54 57 58 59 62 63 21732 64 0 1 2 4 5 6 9 11 15 17 19 23 25 26 29 31 34 36 37 38 41 43 45 46 47 51 53 55 56 60 62 21733 64 0 1 e 21734 64 0 1 0 1 3 4 13 15 17 19 21 25 31 33 34 37 41 42 43 44 47 48 49 50 52 54 56 60 61 21735 64 0 1 0 1 3 4 13 15 17 19 21 25 31 33 34 37 41 42 43 44 47 48 49 50 52 54 56 60 61 21736 64 0 1 0 1 4 5 6 8 9 12 13 15 16 19 22 26 29 32 33 34 35 36 39 41 45 48 49 50 52 53 54 57 58 59 60 63 21737 64 0 1 4 6 8 12 15 22 29 32 35 36 39 41 45 48 49 50 53 54 57 58 59 60 63 21738 64 0 1 e 21739 64 0 1 e 21740 64 0 1 e 21741 64 0 1 e 21742 64 0 1 e 21743 64 0 1 e 21744 64 0 1 f 21745 64 0 1 e 21746 64 0 1 f 21747 64 0 1 f 21748 64 0 1 f 21749 64 0 1 0 1 2 3 5 6 7 8 9 13 16 18 20 24 29 30 31 32 33 34 36 37 40 42 46 48 51 52 53 55 57 60 21750 64 0 1 0 2 3 4 5 7 10 11 13 17 18 20 22 23 24 27 29 33 36 38 40 41 44 45 47 52 55 57 59 60 61 63 21751 64 0 1 e 21752 64 0 1 0 1 3 7 9 11 13 14 15 19 22 23 26 27 28 30 31 37 39 41 42 43 45 46 47 48 50 52 55 56 58 59 60 61 21753 64 0 1 0 1 3 7 9 11 13 14 15 19 22 23 26 27 28 30 31 37 39 41 42 43 45 46 47 48 50 52 55 56 58 59 60 61 21754 64 0 1 1 2 3 4 8 12 15 17 21 26 30 36 37 39 40 41 43 44 46 50 51 53 55 60 62 21755 64 0 1 4 8 12 17 21 26 30 40 41 43 44 60 21756 64 0 1 e 21757 64 0 1 e 21758 64 0 1 e 21759 64 0 1 e 21760 64 0 1 e 21761 64 0 1 e 21762 64 0 1 f 21763 64 0 1 e 21764 64 0 1 f 21765 64 0 1 f 21766 64 0 1 f 21767 64 0 1 1 4 5 11 12 13 14 17 21 22 23 25 26 27 29 30 32 33 34 36 37 38 39 42 43 44 45 48 50 51 54 55 59 21768 64 0 1 1 2 3 4 6 8 9 11 12 14 16 17 22 23 24 28 29 31 32 34 35 36 37 38 40 43 44 47 48 49 50 52 53 54 55 58 63 21769 64 0 1 e 21770 64 0 1 0 2 5 6 8 10 11 16 18 19 21 22 23 25 31 32 35 36 39 40 42 46 48 56 58 60 63 21771 64 0 1 0 2 5 6 8 10 11 16 18 19 21 22 23 25 31 32 35 36 39 40 42 46 48 56 58 60 63 21772 64 0 1 0 1 2 3 5 6 7 11 12 13 17 18 19 20 21 23 28 33 36 37 41 42 44 46 48 50 51 54 55 60 61 62 63 21773 64 0 1 0 1 3 5 6 17 20 28 33 36 41 42 46 50 54 55 63 21774 64 0 1 e 21775 64 0 1 e 21776 64 0 1 e 21777 64 0 1 e 21778 64 0 1 e 21779 64 0 1 e 21780 64 0 1 f 21781 64 0 1 e 21782 64 0 1 f 21783 64 0 1 f 21784 64 0 1 f 21785 64 0 1 0 1 5 8 9 12 13 17 18 19 23 24 29 30 34 35 36 39 41 42 44 52 53 55 57 58 59 60 61 21786 64 0 1 0 1 3 5 6 8 9 10 11 12 16 17 18 19 23 27 29 32 35 37 39 40 42 43 45 46 48 49 50 52 54 56 63 21787 64 0 1 e 21788 64 0 1 0 1 2 4 8 9 12 15 16 18 19 20 21 23 27 28 29 30 31 33 38 39 41 45 55 56 59 62 63 21789 64 0 1 0 1 2 4 8 9 12 15 16 18 19 20 21 23 27 28 29 30 31 33 38 39 41 45 55 56 59 62 63 21790 64 0 1 0 2 4 5 8 10 11 13 18 20 21 23 25 26 27 28 29 31 35 39 40 41 42 44 46 48 50 51 53 54 55 56 57 58 59 60 62 63 21791 64 0 1 0 2 10 18 23 26 27 35 42 44 51 53 54 55 56 58 60 62 21792 64 1 0 e 21793 64 1 0 e 21794 64 1 0 e 21795 64 1 0 e 21796 64 1 0 e 21797 64 1 0 e 21798 64 1 0 f 21799 64 1 0 e 21800 64 1 0 f 21801 64 1 0 f 21802 64 1 0 f 21803 64 1 0 4 5 6 7 8 11 12 14 15 18 21 23 24 26 27 30 31 32 33 36 39 40 41 42 45 47 50 51 54 55 56 57 58 62 63 21804 64 1 0 5 9 10 11 12 15 16 18 19 20 22 25 26 29 31 32 33 36 38 42 44 48 49 51 55 57 60 61 63 21805 64 1 0 e 21806 64 1 0 0 4 5 6 9 10 13 14 16 18 20 23 27 29 30 31 33 36 38 40 42 48 50 52 55 56 57 58 59 60 61 62 63 21807 64 1 0 0 4 5 6 9 10 13 14 16 18 20 23 27 29 30 31 33 36 38 40 42 48 50 52 55 56 57 58 59 60 61 62 63 21808 64 1 0 0 3 4 5 7 9 10 11 16 18 19 20 22 25 27 30 32 34 35 39 42 43 44 46 47 48 49 50 52 54 59 60 62 63 21809 64 1 0 3 11 16 18 19 20 32 34 39 42 48 52 59 62 21810 64 1 0 e 21811 64 1 0 e 21812 64 1 0 e 21813 64 1 0 e 21814 64 1 0 e 21815 64 1 0 e 21816 64 1 0 f 21817 64 1 0 e 21818 64 1 0 f 21819 64 1 0 f 21820 64 1 0 f 21821 64 1 0 2 4 5 7 11 12 14 17 19 21 22 23 26 28 29 30 31 32 33 35 36 37 38 40 43 45 46 47 48 51 52 54 56 57 58 61 21822 64 1 0 1 5 9 11 12 17 22 24 25 26 28 30 32 37 38 40 45 46 47 48 52 55 21823 64 1 0 e 21824 64 1 0 1 2 3 4 5 7 11 14 15 16 20 21 24 28 29 30 32 33 34 35 36 38 40 41 42 43 45 46 47 48 51 52 53 54 55 59 21825 64 1 0 1 2 3 4 5 7 11 14 15 16 20 21 24 28 29 30 32 33 34 35 36 38 40 41 42 43 45 46 47 48 51 52 53 54 55 59 21826 64 1 0 6 9 17 20 23 24 25 26 30 31 35 39 40 44 45 46 48 50 59 60 62 21827 64 1 0 6 9 17 20 24 26 30 39 40 44 50 21828 64 1 0 e 21829 64 1 0 e 21830 64 1 0 e 21831 64 1 0 e 21832 64 1 0 e 21833 64 1 0 e 21834 64 1 0 f 21835 64 1 0 e 21836 64 1 0 f 21837 64 1 0 f 21838 64 1 0 f 21839 64 1 0 5 6 8 9 11 13 16 17 18 20 22 23 24 25 27 31 32 33 36 37 39 40 41 42 46 50 52 53 55 56 57 58 60 63 21840 64 1 0 2 9 10 11 16 18 19 20 21 22 23 24 25 26 27 28 32 36 37 38 40 42 43 44 47 50 53 55 56 58 59 62 21841 64 1 0 e 21842 64 1 0 0 3 6 7 8 9 10 11 14 15 16 17 19 20 22 24 25 28 31 32 33 35 38 39 41 42 43 49 51 55 56 57 59 60 61 62 63 21843 64 1 0 0 3 6 7 8 9 10 11 14 15 16 17 19 20 22 24 25 28 31 32 33 35 38 39 41 42 43 49 51 55 56 57 59 60 61 62 63 21844 64 1 0 0 2 3 4 5 6 8 9 10 17 20 21 23 24 25 26 27 29 32 35 36 38 39 40 41 42 46 47 53 55 58 59 60 63 21845 64 1 0 2 4 5 8 10 20 24 25 27 29 35 38 39 40 41 53 55 58 21846 64 1 0 e 21847 64 1 0 e 21848 64 1 0 e 21849 64 1 0 e 21850 64 1 0 e 21851 64 1 0 e 21852 64 1 0 f 21853 64 1 0 e 21854 64 1 0 f 21855 64 1 0 f 21856 64 1 0 f 21857 64 1 0 1 2 6 7 8 11 14 16 17 19 20 21 26 27 29 31 32 35 38 42 43 44 45 48 49 51 53 55 57 59 60 61 62 21858 64 1 0 3 6 7 8 9 10 11 12 15 17 19 20 21 24 25 28 30 34 35 36 37 38 39 40 41 42 43 45 46 47 48 52 53 54 55 56 57 59 63 21859 64 1 0 e 21860 64 1 0 0 2 3 5 6 8 13 14 18 22 27 29 32 34 36 37 39 41 42 43 44 45 46 47 49 51 55 57 59 60 61 63 21861 64 1 0 0 2 3 5 6 8 13 14 18 22 27 29 32 34 36 37 39 41 42 43 44 45 46 47 49 51 55 57 59 60 61 63 21862 64 1 0 2 4 6 9 10 11 12 13 14 16 19 21 22 23 24 26 27 34 36 37 38 40 41 43 44 49 51 52 54 55 57 59 61 63 21863 64 1 0 4 6 9 14 19 21 22 24 26 27 36 37 40 41 49 54 57 59 61 21864 64 1 1 e 21865 64 1 1 e 21866 64 1 1 e 21867 64 1 1 e 21868 64 1 1 e 21869 64 1 1 e 21870 64 1 1 f 21871 64 1 1 e 21872 64 1 1 f 21873 64 1 1 f 21874 64 1 1 f 21875 64 1 1 2 4 5 8 9 11 13 15 19 20 24 25 27 29 31 33 36 38 43 45 46 52 57 59 60 21876 64 1 1 1 2 5 6 8 9 12 13 14 15 17 19 21 23 25 29 31 32 34 35 36 37 39 40 41 44 45 47 48 49 50 55 57 60 61 21877 64 1 1 e 21878 64 1 1 0 3 4 5 6 7 8 13 18 19 20 21 22 24 26 28 29 30 31 34 37 38 42 44 46 48 51 54 56 57 58 59 60 61 62 63 21879 64 1 1 0 3 4 5 6 7 8 13 18 19 20 21 22 24 26 28 29 30 31 34 37 38 42 44 46 48 51 54 56 57 58 59 60 61 62 63 21880 64 1 1 1 3 4 6 7 9 12 14 15 16 20 23 27 28 30 32 34 35 37 38 39 40 43 48 49 51 53 54 55 58 61 21881 64 1 1 9 14 23 27 32 34 38 39 43 49 51 61 21882 64 1 1 e 21883 64 1 1 e 21884 64 1 1 e 21885 64 1 1 e 21886 64 1 1 e 21887 64 1 1 e 21888 64 1 1 f 21889 64 1 1 e 21890 64 1 1 f 21891 64 1 1 f 21892 64 1 1 f 21893 64 1 1 0 1 2 4 10 11 13 15 17 18 19 20 22 23 24 26 27 29 30 34 36 37 38 39 41 42 44 50 51 52 53 54 55 57 59 62 63 21894 64 1 1 0 1 4 7 12 13 15 18 21 22 23 24 28 33 34 35 38 39 40 42 43 46 47 48 49 52 56 57 58 61 62 21895 64 1 1 e 21896 64 1 1 0 1 3 6 8 9 13 16 17 18 20 21 22 23 24 25 27 28 33 35 40 42 50 53 54 55 58 62 63 21897 64 1 1 0 1 3 6 8 9 13 16 17 18 20 21 22 23 24 25 27 28 33 35 40 42 50 53 54 55 58 62 63 21898 64 1 1 3 5 10 11 12 14 17 19 22 23 24 25 29 30 31 34 35 40 41 43 46 47 48 52 55 56 57 58 60 61 62 63 21899 64 1 1 3 5 12 14 19 22 23 25 29 34 35 40 41 48 55 56 58 62 63 21900 64 1 1 e 21901 64 1 1 e 21902 64 1 1 e 21903 64 1 1 e 21904 64 1 1 e 21905 64 1 1 e 21906 64 1 1 f 21907 64 1 1 e 21908 64 1 1 f 21909 64 1 1 f 21910 64 1 1 f 21911 64 1 1 0 1 2 4 5 7 11 15 18 23 24 25 26 28 29 31 37 39 40 44 45 47 48 49 53 58 61 63 21912 64 1 1 8 9 11 13 14 16 18 20 22 24 26 30 31 32 35 36 39 41 43 52 54 55 56 57 58 61 62 63 21913 64 1 1 e 21914 64 1 1 2 3 4 6 7 8 10 13 14 15 19 22 25 27 28 30 31 32 33 34 36 37 39 40 49 51 55 56 57 58 59 62 63 21915 64 1 1 2 3 4 6 7 8 10 13 14 15 19 22 25 27 28 30 31 32 33 34 36 37 39 40 49 51 55 56 57 58 59 62 63 21916 64 1 1 1 5 9 10 12 14 19 20 21 22 23 25 27 30 32 34 37 38 40 41 42 43 45 47 49 50 53 54 55 56 58 59 60 63 21917 64 1 1 10 14 20 25 37 42 43 47 49 55 59 60 21918 64 1 1 e 21919 64 1 1 e 21920 64 1 1 e 21921 64 1 1 e 21922 64 1 1 e 21923 64 1 1 e 21924 64 1 1 f 21925 64 1 1 e 21926 64 1 1 f 21927 64 1 1 f 21928 64 1 1 f 21929 64 1 1 0 1 2 4 6 8 10 11 12 15 16 18 19 20 23 30 33 36 39 40 42 43 44 46 47 48 52 53 60 62 21930 64 1 1 2 4 7 8 9 15 16 17 19 20 21 22 23 28 30 36 37 38 40 42 43 44 46 48 51 54 56 58 59 62 63 21931 64 1 1 e 21932 64 1 1 0 3 7 8 10 13 14 19 21 25 26 27 29 30 33 35 38 39 40 41 44 46 48 49 50 52 58 59 61 63 21933 64 1 1 0 3 7 8 10 13 14 19 21 25 26 27 29 30 33 35 38 39 40 41 44 46 48 49 50 52 58 59 61 63 21934 64 1 1 0 2 3 4 6 7 10 11 12 13 15 16 18 19 22 23 24 25 28 29 36 38 39 40 41 42 43 44 46 49 51 54 58 59 60 21935 64 1 1 15 16 18 24 29 38 39 40 42 44 51 58 60 21936 65 0 0 e 21937 65 0 0 e 21938 65 0 0 e 21939 65 0 0 e 21940 65 0 0 e 21941 65 0 0 e 21942 65 0 0 f 21943 65 0 0 e 21944 65 0 0 f 21945 65 0 0 f 21946 65 0 0 f 21947 65 0 0 4 8 9 10 14 15 16 17 18 22 23 27 28 29 31 35 36 39 42 43 45 46 48 50 51 52 53 54 59 62 64 21948 65 0 0 2 3 4 7 9 12 13 16 20 22 24 25 28 29 31 33 34 37 39 40 41 43 44 45 46 48 50 51 52 53 57 58 60 61 64 21949 65 0 0 e 21950 65 0 0 0 3 4 6 8 9 11 12 13 14 15 16 17 18 20 22 23 24 27 29 30 35 36 39 41 42 43 46 49 50 52 53 54 55 56 58 61 62 21951 65 0 0 0 3 4 6 8 9 11 12 13 14 15 16 17 18 20 22 23 24 27 29 30 35 36 39 41 42 43 46 49 50 52 53 54 55 56 58 61 62 21952 65 0 0 3 4 7 11 14 15 18 19 21 22 23 24 26 27 31 32 33 34 35 38 39 41 43 46 47 48 49 50 51 52 53 54 55 57 58 59 62 21953 65 0 0 3 4 7 15 19 22 23 24 26 39 41 43 46 48 50 51 53 58 21954 65 0 0 e 21955 65 0 0 e 21956 65 0 0 e 21957 65 0 0 e 21958 65 0 0 e 21959 65 0 0 e 21960 65 0 0 f 21961 65 0 0 e 21962 65 0 0 f 21963 65 0 0 f 21964 65 0 0 f 21965 65 0 0 2 4 6 7 8 10 12 15 18 21 22 27 29 34 36 39 40 41 43 45 46 47 48 50 53 57 60 61 62 63 21966 65 0 0 0 5 9 10 11 12 14 20 21 23 25 27 28 31 32 34 38 39 42 43 44 45 48 49 50 51 52 55 57 58 62 64 21967 65 0 0 e 21968 65 0 0 0 5 7 8 10 12 16 20 23 25 28 31 32 34 38 40 41 42 43 44 47 52 53 54 55 60 61 62 63 21969 65 0 0 0 5 7 8 10 12 16 20 23 25 28 31 32 34 38 40 41 42 43 44 47 52 53 54 55 60 61 62 63 21970 65 0 0 0 1 2 4 5 7 8 10 11 13 15 16 17 18 19 20 21 23 26 27 33 34 36 39 40 41 42 44 47 48 49 51 52 53 54 55 58 59 60 21971 65 0 0 1 5 8 10 11 13 15 17 18 19 21 23 26 27 41 44 47 48 52 55 58 60 21972 65 0 0 e 21973 65 0 0 e 21974 65 0 0 e 21975 65 0 0 e 21976 65 0 0 e 21977 65 0 0 e 21978 65 0 0 f 21979 65 0 0 e 21980 65 0 0 f 21981 65 0 0 f 21982 65 0 0 f 21983 65 0 0 0 4 5 8 10 11 21 22 23 24 25 32 33 34 35 37 43 44 45 48 49 50 52 57 58 59 64 21984 65 0 0 0 3 4 5 12 17 19 21 23 27 30 32 37 38 39 41 42 46 47 48 49 52 53 56 58 60 61 62 63 64 21985 65 0 0 e 21986 65 0 0 4 5 6 7 8 12 15 16 18 20 21 24 25 27 28 29 30 33 34 36 37 39 41 44 47 48 49 51 52 53 54 55 56 58 59 21987 65 0 0 4 5 6 7 8 12 15 16 18 20 21 24 25 27 28 29 30 33 34 36 37 39 41 44 47 48 49 51 52 53 54 55 56 58 59 21988 65 0 0 1 4 7 8 9 10 12 15 16 17 18 20 21 24 25 29 30 32 34 35 36 40 42 43 44 45 46 48 49 50 51 52 55 57 58 60 61 62 64 21989 65 0 0 4 7 8 9 10 12 15 17 18 21 24 34 40 43 46 49 50 51 52 58 60 64 21990 65 0 0 e 21991 65 0 0 e 21992 65 0 0 e 21993 65 0 0 e 21994 65 0 0 e 21995 65 0 0 e 21996 65 0 0 f 21997 65 0 0 e 21998 65 0 0 f 21999 65 0 0 f 22000 65 0 0 f 22001 65 0 0 2 3 4 5 7 10 12 13 15 18 21 31 32 33 35 36 37 38 42 47 49 51 52 53 54 59 60 61 63 64 22002 65 0 0 0 1 3 5 7 9 11 12 15 16 17 18 20 22 24 28 31 33 34 35 38 39 42 44 45 48 50 51 53 57 58 61 63 64 22003 65 0 0 e 22004 65 0 0 3 6 8 11 13 14 15 16 17 22 25 26 29 30 38 43 44 46 47 49 51 53 55 56 58 61 62 22005 65 0 0 3 6 8 11 13 14 15 16 17 22 25 26 29 30 38 43 44 46 47 49 51 53 55 56 58 61 62 22006 65 0 0 0 1 2 4 6 8 9 13 14 17 18 21 23 24 26 27 30 33 36 38 39 40 41 42 44 45 46 49 51 52 53 60 62 64 22007 65 0 0 1 2 4 8 9 13 14 17 18 23 26 27 30 33 38 40 42 45 46 49 51 52 53 64 22008 65 0 1 e 22009 65 0 1 e 22010 65 0 1 e 22011 65 0 1 e 22012 65 0 1 e 22013 65 0 1 e 22014 65 0 1 f 22015 65 0 1 e 22016 65 0 1 f 22017 65 0 1 f 22018 65 0 1 f 22019 65 0 1 1 2 3 5 6 10 11 14 15 16 17 18 19 22 23 25 27 28 29 32 38 41 43 44 46 47 49 50 51 53 55 57 61 62 22020 65 0 1 5 6 7 9 10 11 13 16 17 19 24 25 26 27 28 29 30 31 35 38 39 41 42 43 44 46 47 51 52 53 54 57 60 64 22021 65 0 1 e 22022 65 0 1 0 1 4 13 14 15 21 22 25 26 31 35 36 37 39 40 41 44 46 48 55 60 63 64 22023 65 0 1 0 1 4 13 14 15 21 22 25 26 31 35 36 37 39 40 41 44 46 48 55 60 63 64 22024 65 0 1 0 1 2 5 9 10 12 16 18 19 20 24 25 31 33 35 36 37 38 39 40 41 45 46 47 50 52 54 55 56 57 58 22025 65 0 1 0 2 5 9 12 19 24 25 31 35 38 39 45 56 58 22026 65 0 1 e 22027 65 0 1 e 22028 65 0 1 e 22029 65 0 1 e 22030 65 0 1 e 22031 65 0 1 e 22032 65 0 1 f 22033 65 0 1 e 22034 65 0 1 f 22035 65 0 1 f 22036 65 0 1 f 22037 65 0 1 0 1 2 3 5 6 8 11 12 13 14 16 17 21 23 24 25 27 28 31 33 34 35 36 39 40 42 43 50 60 61 62 64 22038 65 0 1 0 1 6 7 8 9 12 14 18 22 23 24 25 26 27 28 31 33 34 37 40 42 43 44 48 50 52 55 61 63 64 22039 65 0 1 e 22040 65 0 1 6 7 9 10 11 12 16 17 18 20 21 22 26 28 31 32 36 40 42 43 50 52 53 60 61 22041 65 0 1 6 7 9 10 11 12 16 17 18 20 21 22 26 28 31 32 36 40 42 43 50 52 53 60 61 22042 65 0 1 1 3 4 6 9 10 11 12 20 22 24 25 26 27 30 31 36 40 43 47 48 50 51 52 53 55 56 58 59 60 61 62 63 64 22043 65 0 1 4 11 12 20 22 24 25 26 27 30 31 43 47 48 50 51 52 53 55 59 62 64 22044 65 0 1 e 22045 65 0 1 e 22046 65 0 1 e 22047 65 0 1 e 22048 65 0 1 e 22049 65 0 1 e 22050 65 0 1 f 22051 65 0 1 e 22052 65 0 1 f 22053 65 0 1 f 22054 65 0 1 f 22055 65 0 1 0 1 2 4 6 7 12 15 17 19 20 22 26 27 29 30 32 35 36 38 40 41 42 43 45 46 47 48 49 50 51 56 64 22056 65 0 1 0 5 6 9 10 18 19 20 24 25 26 27 30 32 36 42 43 44 47 48 49 50 51 55 56 58 60 61 63 64 22057 65 0 1 e 22058 65 0 1 0 2 4 6 7 10 11 12 13 14 15 17 18 19 21 22 23 24 25 26 27 29 30 33 34 35 37 38 39 41 42 43 45 46 47 48 49 50 52 55 59 64 22059 65 0 1 0 2 4 6 7 10 11 12 13 14 15 17 18 19 21 22 23 24 25 26 27 29 30 33 34 35 37 38 39 41 42 43 45 46 47 48 49 50 52 55 59 64 22060 65 0 1 5 8 10 13 15 18 19 20 23 24 28 29 34 35 38 40 41 42 43 45 46 47 49 50 56 59 61 22061 65 0 1 5 8 15 19 20 24 29 40 41 43 46 47 50 56 22062 65 0 1 e 22063 65 0 1 e 22064 65 0 1 e 22065 65 0 1 e 22066 65 0 1 e 22067 65 0 1 e 22068 65 0 1 f 22069 65 0 1 e 22070 65 0 1 f 22071 65 0 1 f 22072 65 0 1 f 22073 65 0 1 3 4 6 7 10 11 13 15 17 18 20 21 22 23 26 31 32 33 35 36 38 40 43 45 46 47 48 51 53 54 57 58 22074 65 0 1 0 3 4 5 6 9 10 13 15 21 23 24 25 31 32 33 34 35 37 39 42 43 46 50 51 52 54 55 57 58 22075 65 0 1 e 22076 65 0 1 1 2 6 9 10 11 12 15 16 17 18 20 21 23 24 25 31 35 36 37 40 41 42 51 53 54 55 56 57 61 63 64 22077 65 0 1 1 2 6 9 10 11 12 15 16 17 18 20 21 23 24 25 31 35 36 37 40 41 42 51 53 54 55 56 57 61 63 64 22078 65 0 1 0 1 2 3 4 5 7 8 9 15 16 19 22 26 28 29 31 33 36 37 39 40 41 45 49 52 54 56 58 59 61 63 64 22079 65 0 1 0 2 3 4 5 15 29 33 36 40 52 54 58 59 61 64 22080 65 1 0 e 22081 65 1 0 e 22082 65 1 0 e 22083 65 1 0 e 22084 65 1 0 e 22085 65 1 0 e 22086 65 1 0 f 22087 65 1 0 e 22088 65 1 0 f 22089 65 1 0 f 22090 65 1 0 f 22091 65 1 0 1 2 3 13 14 15 19 20 21 22 25 28 31 32 34 36 38 39 43 44 46 53 54 55 56 57 61 22092 65 1 0 1 2 4 5 6 7 9 10 12 14 18 24 25 29 30 33 34 36 37 39 40 43 47 48 52 53 57 58 59 60 61 22093 65 1 0 e 22094 65 1 0 4 7 8 12 15 16 18 19 20 23 25 26 27 29 33 34 36 37 39 41 42 43 46 48 49 50 51 52 54 61 62 63 22095 65 1 0 4 7 8 12 15 16 18 19 20 23 25 26 27 29 33 34 36 37 39 41 42 43 46 48 49 50 51 52 54 61 62 63 22096 65 1 0 0 3 6 9 12 13 15 16 17 18 19 20 21 25 26 27 28 29 32 33 38 42 44 46 47 49 50 51 52 53 55 56 57 58 60 62 63 22097 65 1 0 6 9 12 13 15 16 17 19 20 25 26 27 28 32 38 47 49 50 51 55 58 60 63 22098 65 1 0 e 22099 65 1 0 e 22100 65 1 0 e 22101 65 1 0 e 22102 65 1 0 e 22103 65 1 0 e 22104 65 1 0 f 22105 65 1 0 e 22106 65 1 0 f 22107 65 1 0 f 22108 65 1 0 f 22109 65 1 0 0 1 10 11 12 13 15 16 17 19 20 22 23 24 27 29 32 34 36 37 38 39 42 46 47 48 50 51 53 54 59 61 22110 65 1 0 0 1 2 3 5 7 8 15 19 21 23 25 27 29 35 38 40 45 47 48 50 53 54 56 60 61 64 22111 65 1 0 e 22112 65 1 0 0 7 8 9 11 12 13 14 16 17 18 19 20 22 24 25 29 33 35 37 41 42 44 45 46 48 49 51 52 53 54 55 56 60 61 62 22113 65 1 0 0 7 8 9 11 12 13 14 16 17 18 19 20 22 24 25 29 33 35 37 41 42 44 45 46 48 49 51 52 53 54 55 56 60 61 62 22114 65 1 0 1 2 3 5 8 9 10 11 12 15 16 18 19 22 24 28 29 30 32 33 36 37 39 40 43 44 45 47 52 54 58 61 62 63 64 22115 65 1 0 3 8 11 12 15 18 19 30 36 37 40 43 44 52 62 64 22116 65 1 0 e 22117 65 1 0 e 22118 65 1 0 e 22119 65 1 0 e 22120 65 1 0 e 22121 65 1 0 e 22122 65 1 0 f 22123 65 1 0 e 22124 65 1 0 f 22125 65 1 0 f 22126 65 1 0 f 22127 65 1 0 0 1 2 3 8 10 15 16 17 20 21 23 24 25 30 32 34 36 39 42 43 44 46 47 53 55 56 60 63 64 22128 65 1 0 1 2 3 7 9 10 11 12 13 14 15 23 24 25 26 27 30 31 35 36 37 38 40 41 44 49 50 51 52 54 55 57 58 63 64 22129 65 1 0 e 22130 65 1 0 0 1 2 4 7 8 9 10 11 15 18 19 21 22 27 28 30 32 33 34 35 40 45 47 51 52 54 56 59 60 63 22131 65 1 0 0 1 2 4 7 8 9 10 11 15 18 19 21 22 27 28 30 32 33 34 35 40 45 47 51 52 54 56 59 60 63 22132 65 1 0 2 4 9 10 12 16 21 23 27 31 32 35 37 38 39 41 45 46 48 49 50 52 54 55 58 59 60 61 62 22133 65 1 0 2 9 27 31 32 37 39 49 50 52 54 55 58 60 22134 65 1 0 e 22135 65 1 0 e 22136 65 1 0 e 22137 65 1 0 e 22138 65 1 0 e 22139 65 1 0 e 22140 65 1 0 f 22141 65 1 0 e 22142 65 1 0 f 22143 65 1 0 f 22144 65 1 0 f 22145 65 1 0 1 5 6 13 15 17 19 21 22 26 30 34 37 38 41 42 43 44 45 48 49 50 52 53 54 55 57 60 62 22146 65 1 0 0 1 2 3 6 8 9 11 13 14 15 16 18 19 21 22 24 30 35 36 39 40 41 42 45 49 50 51 52 53 54 55 58 59 60 61 63 22147 65 1 0 e 22148 65 1 0 0 1 2 3 4 5 6 7 21 22 24 25 27 30 32 33 35 36 38 41 43 45 47 49 52 54 55 59 22149 65 1 0 0 1 2 3 4 5 6 7 21 22 24 25 27 30 32 33 35 36 38 41 43 45 47 49 52 54 55 59 22150 65 1 0 3 8 10 11 12 13 17 19 20 21 23 27 29 31 33 34 35 37 38 41 43 47 49 51 52 53 54 56 61 63 22151 65 1 0 10 11 12 13 17 19 20 21 27 29 33 37 38 41 47 49 51 53 22152 65 1 1 e 22153 65 1 1 e 22154 65 1 1 e 22155 65 1 1 e 22156 65 1 1 e 22157 65 1 1 e 22158 65 1 1 f 22159 65 1 1 e 22160 65 1 1 f 22161 65 1 1 f 22162 65 1 1 f 22163 65 1 1 0 1 5 6 7 8 11 12 13 14 15 17 25 26 27 28 29 31 33 34 35 37 38 43 44 46 48 50 52 54 57 60 61 62 64 22164 65 1 1 0 3 4 5 13 15 17 18 19 20 22 23 24 26 27 29 33 39 40 41 43 45 46 47 48 50 51 52 53 54 56 61 63 22165 65 1 1 e 22166 65 1 1 0 1 2 5 6 8 9 10 11 12 13 18 20 24 26 28 29 30 31 32 33 34 36 37 39 40 43 44 45 46 49 50 53 54 57 58 61 64 22167 65 1 1 0 1 2 5 6 8 9 10 11 12 13 18 20 24 26 28 29 30 31 32 33 34 36 37 39 40 43 44 45 46 49 50 53 54 57 58 61 64 22168 65 1 1 4 8 9 11 12 13 14 15 20 21 22 23 28 30 31 32 35 36 47 49 52 56 60 63 64 22169 65 1 1 11 12 13 15 20 21 22 28 30 31 35 36 49 52 56 63 64 22170 65 1 1 e 22171 65 1 1 e 22172 65 1 1 e 22173 65 1 1 e 22174 65 1 1 e 22175 65 1 1 e 22176 65 1 1 f 22177 65 1 1 e 22178 65 1 1 f 22179 65 1 1 f 22180 65 1 1 f 22181 65 1 1 0 5 10 12 13 14 15 16 17 21 25 26 27 29 33 34 35 39 44 46 47 48 53 54 55 56 57 60 61 64 22182 65 1 1 4 6 7 8 10 11 13 14 18 22 24 26 27 28 30 31 33 39 40 42 43 45 47 50 51 52 53 55 58 59 62 63 22183 65 1 1 e 22184 65 1 1 2 3 5 6 7 8 9 10 11 13 16 19 21 22 23 24 25 28 30 35 38 39 40 41 42 45 46 49 50 51 52 53 55 56 57 58 59 60 61 22185 65 1 1 2 3 5 6 7 8 9 10 11 13 16 19 21 22 23 24 25 28 30 35 38 39 40 41 42 45 46 49 50 51 52 53 55 56 57 58 59 60 61 22186 65 1 1 0 7 13 16 19 20 21 22 24 25 27 29 30 35 36 37 38 44 45 46 47 49 51 52 55 56 57 58 60 61 22187 65 1 1 0 13 19 20 22 24 25 27 30 36 38 44 45 51 52 55 56 60 22188 65 1 1 e 22189 65 1 1 e 22190 65 1 1 e 22191 65 1 1 e 22192 65 1 1 e 22193 65 1 1 e 22194 65 1 1 f 22195 65 1 1 e 22196 65 1 1 f 22197 65 1 1 f 22198 65 1 1 f 22199 65 1 1 1 4 7 9 14 16 21 23 27 30 31 38 39 44 46 47 48 50 54 56 60 22200 65 1 1 0 2 5 7 8 9 10 12 13 14 16 21 23 25 26 29 30 31 33 35 36 37 38 39 40 41 42 43 44 45 46 50 53 55 56 57 59 60 62 22201 65 1 1 e 22202 65 1 1 2 3 5 6 8 11 13 14 15 20 23 26 27 30 32 33 36 38 40 41 44 48 49 50 52 53 57 62 63 22203 65 1 1 2 3 5 6 8 11 13 14 15 20 23 26 27 30 32 33 36 38 40 41 44 48 49 50 52 53 57 62 63 22204 65 1 1 2 3 4 7 8 9 10 11 12 13 14 15 16 18 19 22 26 27 29 30 31 32 33 34 35 38 40 41 43 44 45 46 51 52 56 57 58 60 61 63 64 22205 65 1 1 4 8 11 12 13 16 22 26 29 33 34 38 41 44 45 46 61 63 64 22206 65 1 1 e 22207 65 1 1 e 22208 65 1 1 e 22209 65 1 1 e 22210 65 1 1 e 22211 65 1 1 e 22212 65 1 1 f 22213 65 1 1 e 22214 65 1 1 f 22215 65 1 1 f 22216 65 1 1 f 22217 65 1 1 7 9 12 16 17 21 24 25 26 27 28 29 30 32 34 38 39 43 44 47 49 51 52 53 54 56 57 59 61 22218 65 1 1 0 1 2 4 8 12 13 14 19 21 22 24 26 27 28 31 32 33 34 35 38 40 43 48 56 22219 65 1 1 e 22220 65 1 1 2 3 6 8 10 11 12 14 16 17 19 21 22 23 24 29 30 31 32 33 38 39 40 42 44 45 46 48 52 54 55 59 60 62 63 22221 65 1 1 2 3 6 8 10 11 12 14 16 17 19 21 22 23 24 29 30 31 32 33 38 39 40 42 44 45 46 48 52 54 55 59 60 62 63 22222 65 1 1 2 4 5 8 9 13 15 18 21 22 23 25 26 27 28 29 31 32 33 35 36 37 41 42 43 46 47 48 54 57 59 62 22223 65 1 1 4 5 8 9 13 15 21 22 23 25 28 29 36 42 22224 211 0 0 e 22225 211 0 0 e 22226 211 0 0 e 22227 211 0 0 e 22228 211 0 0 e 22229 211 0 0 e 22230 211 0 0 f 22231 211 0 0 e 22232 211 0 0 f 22233 211 0 0 f 22234 211 0 0 f 22235 211 0 0 0 1 3 6 7 10 12 13 14 15 17 18 19 20 21 28 29 33 35 36 48 51 53 54 58 60 62 64 67 69 71 73 76 78 79 80 82 83 85 87 88 91 92 93 95 97 98 99 101 102 103 104 105 107 110 112 117 123 125 126 127 131 134 137 138 139 141 142 143 148 150 152 153 156 157 161 163 164 165 168 170 172 173 178 180 183 185 188 189 193 196 198 199 200 201 202 203 204 206 207 208 209 22236 211 0 0 0 2 3 4 7 9 14 15 16 18 19 20 22 23 25 26 28 32 36 39 41 43 46 49 50 53 56 57 58 62 66 68 73 76 78 80 81 82 86 90 91 92 93 94 96 97 99 100 101 102 106 110 113 114 115 118 120 121 123 126 128 131 135 137 139 143 148 150 151 155 160 164 165 166 168 173 174 175 176 179 180 185 186 187 192 193 194 196 197 198 200 201 202 204 205 207 22237 211 0 0 e 22238 211 0 0 1 2 5 9 10 11 13 14 15 18 19 21 22 23 28 29 30 31 33 35 36 37 38 40 41 45 47 49 50 51 52 53 54 59 60 62 64 67 70 72 77 79 80 82 85 86 88 91 96 97 100 102 103 107 108 109 111 115 116 117 119 121 122 123 130 132 136 137 138 139 140 144 145 146 147 148 150 151 152 153 154 157 162 164 165 168 172 173 174 175 177 180 183 184 185 188 189 190 192 194 195 200 202 203 207 209 210 22239 211 0 0 1 2 5 9 10 11 13 14 15 18 19 21 22 23 28 29 30 31 33 35 36 37 38 40 41 45 47 49 50 51 52 53 54 59 60 62 64 67 70 72 77 79 80 82 85 86 88 91 96 97 100 102 103 107 108 109 111 115 116 117 119 121 122 123 130 132 136 137 138 139 140 144 145 146 147 148 150 151 152 153 154 157 162 164 165 168 172 173 174 175 177 180 183 184 185 188 189 190 192 194 195 200 202 203 207 209 210 22240 211 0 0 11 13 15 17 21 24 25 26 27 28 29 30 32 33 37 38 41 44 45 47 49 51 53 57 60 61 62 63 64 66 69 70 72 73 74 76 81 83 84 90 94 96 97 98 99 100 106 108 113 114 119 120 122 124 125 126 128 131 132 133 138 140 142 144 145 148 149 150 151 153 154 155 156 157 159 161 162 164 165 166 170 171 172 173 175 177 178 180 181 183 184 186 187 188 190 193 196 198 199 200 201 202 204 208 210 22241 211 0 0 13 24 25 26 28 29 30 33 38 41 44 45 47 49 62 63 69 70 72 73 76 83 90 94 98 108 113 119 122 125 126 132 133 138 140 144 145 150 153 154 156 157 159 161 166 170 180 181 183 184 193 202 204 208 22242 211 0 0 e 22243 211 0 0 e 22244 211 0 0 e 22245 211 0 0 e 22246 211 0 0 e 22247 211 0 0 e 22248 211 0 0 f 22249 211 0 0 e 22250 211 0 0 f 22251 211 0 0 f 22252 211 0 0 f 22253 211 0 0 0 2 3 4 5 8 9 11 15 20 26 27 29 30 33 35 36 37 39 42 43 44 45 46 51 52 53 59 61 64 65 69 71 73 74 76 77 80 81 83 84 85 86 88 90 94 95 96 100 101 104 107 109 110 112 114 115 116 117 119 125 129 130 132 136 137 140 143 146 151 153 155 156 157 159 160 164 165 166 167 168 171 173 174 175 177 179 180 181 184 185 189 193 194 197 200 201 202 205 207 209 22254 211 0 0 1 2 3 4 5 10 12 16 17 18 20 21 25 26 27 29 31 32 34 35 38 40 41 42 43 53 54 56 57 60 61 63 67 68 71 74 78 79 80 82 83 84 85 87 89 90 92 94 100 102 104 105 106 108 110 111 112 113 114 115 116 124 126 128 129 131 137 142 145 146 148 152 153 155 158 163 164 165 166 168 172 178 180 183 185 186 187 189 193 200 201 203 205 207 209 210 22255 211 0 0 e 22256 211 0 0 8 9 16 17 18 19 21 28 32 33 34 39 41 45 46 47 49 50 51 52 56 57 58 59 61 63 64 67 68 69 70 71 72 75 76 78 81 85 86 89 91 92 93 94 97 100 104 105 107 111 113 115 119 120 121 122 123 124 129 130 133 134 135 136 138 139 140 141 142 144 145 149 152 153 154 155 159 160 161 164 165 167 169 170 171 172 175 178 179 182 183 185 186 187 189 190 192 193 195 196 197 198 200 203 204 208 22257 211 0 0 8 9 16 17 18 19 21 28 32 33 34 39 41 45 46 47 49 50 51 52 56 57 58 59 61 63 64 67 68 69 70 71 72 75 76 78 81 85 86 89 91 92 93 94 97 100 104 105 107 111 113 115 119 120 121 122 123 124 129 130 133 134 135 136 138 139 140 141 142 144 145 149 152 153 154 155 159 160 161 164 165 167 169 170 171 172 175 178 179 182 183 185 186 187 189 190 192 193 195 196 197 198 200 203 204 208 22258 211 0 0 1 4 6 7 9 11 12 15 17 18 19 20 22 26 27 30 31 34 37 38 39 40 42 43 44 45 46 48 49 51 52 56 58 60 61 62 63 65 67 68 70 71 72 74 75 77 80 83 84 86 88 89 90 92 93 96 97 98 99 100 101 102 103 105 107 108 109 115 116 119 124 125 127 136 137 139 143 144 146 147 148 150 151 153 156 157 161 162 164 165 166 167 168 170 172 173 174 175 177 178 180 186 192 194 195 197 198 199 201 203 204 206 208 22259 211 0 0 1 7 9 11 12 15 17 18 19 22 26 30 34 38 40 43 51 52 62 63 68 70 71 72 77 83 86 88 92 93 102 103 109 115 124 136 144 148 150 151 153 157 161 162 165 166 170 178 186 194 195 199 204 206 22260 211 0 0 e 22261 211 0 0 e 22262 211 0 0 e 22263 211 0 0 e 22264 211 0 0 e 22265 211 0 0 e 22266 211 0 0 f 22267 211 0 0 e 22268 211 0 0 f 22269 211 0 0 f 22270 211 0 0 f 22271 211 0 0 2 4 6 7 10 11 12 13 14 17 18 19 20 28 32 33 39 40 42 43 44 45 48 53 54 55 58 60 63 65 67 70 72 73 75 76 77 81 82 83 84 85 87 92 93 95 96 98 100 102 103 107 109 117 119 123 125 126 127 129 133 134 141 142 143 146 147 148 150 152 155 158 160 162 165 166 170 173 175 178 181 185 188 190 191 193 195 197 199 208 209 210 22272 211 0 0 1 4 5 6 8 9 11 16 21 22 23 24 28 32 34 35 41 43 45 47 48 49 57 58 60 62 63 64 66 68 70 75 76 77 78 79 83 85 87 88 91 92 94 96 97 98 99 103 104 105 107 110 111 114 115 118 119 120 122 123 124 129 137 138 139 140 141 142 144 145 152 153 154 155 159 163 164 166 169 170 172 173 174 175 178 179 180 182 183 185 187 189 193 202 203 206 207 208 209 22273 211 0 0 e 22274 211 0 0 1 6 7 8 12 15 17 19 20 21 22 23 26 27 28 33 34 35 38 40 43 45 46 47 48 50 51 53 54 56 59 60 61 64 68 69 70 71 75 78 79 81 82 83 88 89 91 92 93 95 97 99 100 101 102 103 106 111 114 115 116 117 119 120 121 122 124 127 128 130 131 133 134 135 136 140 141 144 146 147 151 152 155 157 158 161 163 165 169 170 174 176 177 179 180 181 182 183 184 186 190 195 197 199 203 204 205 208 209 22275 211 0 0 1 6 7 8 12 15 17 19 20 21 22 23 26 27 28 33 34 35 38 40 43 45 46 47 48 50 51 53 54 56 59 60 61 64 68 69 70 71 75 78 79 81 82 83 88 89 91 92 93 95 97 99 100 101 102 103 106 111 114 115 116 117 119 120 121 122 124 127 128 130 131 133 134 135 136 140 141 144 146 147 151 152 155 157 158 161 163 165 169 170 174 176 177 179 180 181 182 183 184 186 190 195 197 199 203 204 205 208 209 22276 211 0 0 0 3 5 7 9 10 11 14 15 17 26 27 31 32 33 34 36 39 42 44 45 49 51 53 54 57 59 62 66 67 68 70 71 72 73 77 78 79 80 82 83 85 87 89 91 94 96 97 100 103 105 107 108 109 110 111 114 119 120 121 124 126 127 132 133 134 135 136 138 139 144 146 150 152 154 155 156 158 160 161 164 168 171 172 173 175 176 178 180 181 182 183 185 186 190 191 196 197 198 201 203 204 205 206 207 209 22277 211 0 0 3 5 7 14 15 17 26 33 36 39 45 49 51 54 59 66 71 72 77 82 83 85 87 103 107 111 114 120 121 124 135 136 138 139 152 155 156 160 161 164 168 172 175 176 181 185 186 190 196 197 198 204 207 22278 211 0 0 e 22279 211 0 0 e 22280 211 0 0 e 22281 211 0 0 e 22282 211 0 0 e 22283 211 0 0 e 22284 211 0 0 f 22285 211 0 0 e 22286 211 0 0 f 22287 211 0 0 f 22288 211 0 0 f 22289 211 0 0 2 3 6 8 12 13 15 16 17 18 20 22 23 25 26 27 28 30 31 32 33 34 37 38 39 44 45 47 54 55 57 58 61 64 66 69 71 73 79 80 81 87 90 91 99 101 105 106 107 109 110 111 112 115 118 119 120 121 123 124 125 128 129 133 134 135 138 139 141 142 145 147 149 152 153 155 156 159 162 163 165 166 167 169 171 172 174 175 178 179 182 183 186 187 188 189 190 191 193 194 195 199 201 203 206 208 209 22290 211 0 0 0 1 3 6 9 10 13 14 15 19 20 23 24 25 26 28 31 33 34 35 38 41 42 44 45 47 49 50 51 54 60 61 62 64 65 67 74 75 76 78 81 83 85 87 89 92 94 96 101 102 103 105 106 109 111 112 113 114 116 117 120 122 124 125 126 127 128 130 133 135 137 138 139 140 146 147 149 151 153 156 158 159 160 161 164 170 172 174 175 176 178 179 182 183 187 188 190 191 193 195 197 199 200 203 204 205 206 209 22291 211 0 0 e 22292 211 0 0 0 1 3 5 8 10 11 12 13 15 18 22 23 24 25 26 30 35 38 40 41 43 44 45 50 52 53 55 59 60 62 64 66 68 69 70 71 72 75 77 82 86 87 88 94 96 97 100 103 105 106 107 108 112 115 116 118 120 122 124 125 129 130 134 135 136 137 139 140 141 142 143 144 146 147 148 151 152 154 156 158 161 162 163 165 169 170 172 173 175 177 181 184 186 187 188 189 192 194 195 196 202 206 207 22293 211 0 0 0 1 3 5 8 10 11 12 13 15 18 22 23 24 25 26 30 35 38 40 41 43 44 45 50 52 53 55 59 60 62 64 66 68 69 70 71 72 75 77 82 86 87 88 94 96 97 100 103 105 106 107 108 112 115 116 118 120 122 124 125 129 130 134 135 136 137 139 140 141 142 143 144 146 147 148 151 152 154 156 158 161 162 163 165 169 170 172 173 175 177 181 184 186 187 188 189 192 194 195 196 202 206 207 22294 211 0 0 0 3 5 6 10 11 13 14 16 20 21 23 24 25 26 27 28 30 31 32 34 35 39 40 41 44 47 49 52 53 55 56 59 60 64 68 69 70 71 72 74 75 76 78 85 86 87 88 90 91 92 95 97 102 104 105 106 109 110 111 112 116 119 120 121 122 123 125 126 127 128 129 130 133 135 136 145 148 149 151 152 155 158 159 161 164 165 167 169 173 174 175 180 181 183 184 185 186 188 194 195 198 201 202 204 205 208 210 22295 211 0 0 0 3 5 10 11 14 21 23 24 25 26 27 28 30 31 32 35 40 47 53 56 64 68 69 71 72 74 76 85 86 88 90 92 95 97 109 110 111 116 119 120 121 123 125 126 128 129 130 155 159 164 165 169 174 180 195 201 208 210 22296 211 0 1 e 22297 211 0 1 e 22298 211 0 1 e 22299 211 0 1 e 22300 211 0 1 e 22301 211 0 1 e 22302 211 0 1 f 22303 211 0 1 e 22304 211 0 1 f 22305 211 0 1 f 22306 211 0 1 f 22307 211 0 1 0 1 2 6 7 8 11 12 13 14 19 20 21 22 28 31 32 38 45 46 47 51 56 57 58 59 62 67 71 72 75 78 79 80 82 84 86 92 93 94 99 100 102 104 108 111 113 114 117 118 121 122 123 124 125 128 130 131 132 133 135 136 137 139 140 141 144 146 147 157 158 161 162 168 169 171 173 180 181 182 186 190 193 194 195 196 197 199 200 202 208 209 210 22308 211 0 1 2 3 4 8 9 10 13 14 15 16 17 19 20 21 22 23 24 28 32 36 37 38 39 40 41 42 43 45 46 48 50 51 52 53 54 55 56 59 61 65 66 75 78 81 82 84 85 87 88 89 90 92 94 96 98 100 102 105 106 107 109 110 111 112 113 115 116 117 119 120 123 125 130 133 134 135 136 137 138 139 140 141 142 143 144 145 148 149 155 159 160 164 167 168 169 170 171 172 177 178 180 182 184 185 186 193 196 197 199 200 201 202 206 207 209 22309 211 0 1 e 22310 211 0 1 2 4 5 9 11 15 17 18 20 21 22 30 31 33 36 37 38 42 43 47 50 51 53 55 59 60 64 65 66 67 70 71 72 73 74 78 80 81 84 85 89 90 91 92 95 97 98 99 101 102 104 107 108 113 114 116 117 118 119 120 121 122 123 126 131 133 134 135 138 140 142 146 149 154 155 157 159 167 168 171 172 173 178 179 181 183 187 188 189 193 194 195 198 200 201 203 204 205 209 22311 211 0 1 2 4 5 9 11 15 17 18 20 21 22 30 31 33 36 37 38 42 43 47 50 51 53 55 59 60 64 65 66 67 70 71 72 73 74 78 80 81 84 85 89 90 91 92 95 97 98 99 101 102 104 107 108 113 114 116 117 118 119 120 121 122 123 126 131 133 134 135 138 140 142 146 149 154 155 157 159 167 168 171 172 173 178 179 181 183 187 188 189 193 194 195 198 200 201 203 204 205 209 22312 211 0 1 0 1 2 5 6 7 8 9 12 14 15 16 20 22 23 25 26 27 29 32 34 37 41 48 49 50 51 53 55 56 58 66 67 68 69 70 72 74 75 76 79 80 81 84 85 86 89 90 91 92 102 103 104 105 106 107 113 115 116 125 126 127 129 135 138 139 140 142 143 146 148 150 152 161 162 167 168 171 174 175 176 177 178 179 181 183 184 185 188 190 193 194 201 202 203 205 206 209 22313 211 0 1 0 6 7 12 20 22 23 26 27 32 41 53 58 66 72 74 75 79 81 84 90 91 107 116 125 129 139 140 142 146 150 162 168 174 175 176 177 178 181 183 184 194 201 22314 211 0 1 e 22315 211 0 1 e 22316 211 0 1 e 22317 211 0 1 e 22318 211 0 1 e 22319 211 0 1 e 22320 211 0 1 f 22321 211 0 1 e 22322 211 0 1 f 22323 211 0 1 f 22324 211 0 1 f 22325 211 0 1 4 8 9 10 14 15 17 19 21 22 25 26 27 28 30 32 34 35 40 42 44 45 46 47 48 50 51 55 60 62 63 65 67 68 69 71 72 75 78 80 84 85 86 92 94 96 99 101 102 106 107 109 110 116 120 121 123 126 128 132 138 139 141 145 146 153 154 157 158 161 162 167 168 170 171 173 175 176 178 179 183 187 189 192 194 198 200 201 204 205 206 208 209 22326 211 0 1 2 4 5 7 11 13 15 17 18 22 23 26 27 29 31 33 36 37 41 42 43 47 51 52 53 55 58 59 60 61 62 64 67 68 69 74 75 76 78 79 80 81 82 84 94 96 99 100 102 104 105 114 118 119 123 124 126 132 134 138 139 140 142 143 144 145 148 149 153 155 156 161 162 164 165 166 169 170 173 175 176 179 183 186 188 190 192 193 195 196 200 205 207 210 22327 211 0 1 e 22328 211 0 1 0 1 2 13 14 16 18 19 21 26 30 33 34 37 38 39 43 47 50 51 56 57 58 61 64 66 69 70 71 74 79 82 83 84 85 87 88 89 90 92 94 96 97 98 99 100 101 102 103 104 108 109 114 123 124 128 131 132 134 135 136 141 142 143 145 148 150 152 157 158 160 163 164 165 166 170 173 175 180 181 182 183 185 187 188 191 192 194 197 198 199 201 203 204 208 209 210 22329 211 0 1 0 1 2 13 14 16 18 19 21 26 30 33 34 37 38 39 43 47 50 51 56 57 58 61 64 66 69 70 71 74 79 82 83 84 85 87 88 89 90 92 94 96 97 98 99 100 101 102 103 104 108 109 114 123 124 128 131 132 134 135 136 141 142 143 145 148 150 152 157 158 160 163 164 165 166 170 173 175 180 181 182 183 185 187 188 191 192 194 197 198 199 201 203 204 208 209 210 22330 211 0 1 0 1 3 4 6 7 10 11 12 14 16 19 20 22 26 29 33 44 46 47 48 52 54 56 57 58 60 61 62 64 66 67 69 71 73 75 78 79 80 83 84 87 89 92 95 98 99 102 108 111 113 114 118 119 125 126 127 128 129 130 132 133 134 138 143 147 148 150 151 153 155 156 158 159 160 161 162 163 164 165 168 169 170 176 177 179 180 181 182 184 185 187 198 201 202 203 208 22331 211 0 1 0 6 10 12 14 19 20 26 33 47 54 56 58 60 66 67 71 75 78 83 84 87 89 99 102 108 125 126 128 132 133 147 159 161 162 164 165 168 176 181 185 201 202 208 22332 211 0 1 e 22333 211 0 1 e 22334 211 0 1 e 22335 211 0 1 e 22336 211 0 1 e 22337 211 0 1 e 22338 211 0 1 f 22339 211 0 1 e 22340 211 0 1 f 22341 211 0 1 f 22342 211 0 1 f 22343 211 0 1 0 6 13 17 18 19 21 25 29 31 33 38 42 43 44 45 48 49 52 53 55 56 57 59 60 61 62 63 64 67 68 72 74 75 78 79 83 84 85 86 87 88 90 92 93 95 97 98 99 106 107 109 110 111 113 114 116 117 118 120 121 122 123 126 127 130 131 132 133 138 139 141 144 146 148 149 150 151 153 154 155 157 158 159 162 163 167 171 172 173 175 177 180 187 188 189 190 193 195 196 198 200 203 209 210 22344 211 0 1 1 2 6 7 9 10 14 18 19 20 23 25 27 29 30 32 33 34 36 37 41 42 43 46 47 48 49 50 51 55 56 57 58 60 62 63 65 66 71 74 75 76 77 78 80 81 83 84 85 86 87 92 93 94 96 97 101 105 107 108 109 112 113 115 118 119 120 121 123 124 126 127 130 134 135 138 139 143 144 145 146 151 153 154 156 157 162 163 165 167 168 170 177 178 183 188 189 192 194 196 199 200 201 206 209 210 22345 211 0 1 e 22346 211 0 1 0 3 5 7 8 11 14 15 18 21 22 27 28 29 30 31 34 35 36 39 41 42 43 45 47 53 54 55 59 62 68 69 73 74 75 76 79 80 81 84 87 88 89 90 91 92 93 97 98 99 103 106 107 108 110 111 112 115 116 118 119 121 122 126 127 128 129 130 132 133 139 142 144 145 147 149 151 152 154 157 158 161 162 164 166 167 168 169 170 173 174 175 176 177 178 180 182 183 185 186 187 188 189 192 194 196 199 202 203 205 206 207 208 22347 211 0 1 0 3 5 7 8 11 14 15 18 21 22 27 28 29 30 31 34 35 36 39 41 42 43 45 47 53 54 55 59 62 68 69 73 74 75 76 79 80 81 84 87 88 89 90 91 92 93 97 98 99 103 106 107 108 110 111 112 115 116 118 119 121 122 126 127 128 129 130 132 133 139 142 144 145 147 149 151 152 154 157 158 161 162 164 166 167 168 169 170 173 174 175 176 177 178 180 182 183 185 186 187 188 189 192 194 196 199 202 203 205 206 207 208 22348 211 0 1 0 1 8 10 14 15 19 20 21 22 23 24 25 27 29 32 34 35 36 39 40 41 42 43 45 46 49 52 55 57 58 59 60 61 62 65 68 69 70 71 72 73 74 75 76 81 82 86 87 88 89 91 92 97 102 105 109 110 111 112 113 114 117 118 120 122 124 126 128 132 134 137 138 140 141 144 146 147 149 151 161 162 165 167 168 172 174 175 176 177 178 179 181 182 183 186 187 188 195 196 197 198 199 201 206 208 209 22349 211 0 1 1 10 19 21 23 27 36 41 46 49 52 57 58 59 61 62 65 69 70 71 72 73 75 81 86 87 89 92 97 102 105 109 110 111 112 117 120 124 132 134 140 141 147 149 151 162 165 174 176 179 182 183 186 187 188 201 208 209 22350 211 0 1 e 22351 211 0 1 e 22352 211 0 1 e 22353 211 0 1 e 22354 211 0 1 e 22355 211 0 1 e 22356 211 0 1 f 22357 211 0 1 e 22358 211 0 1 f 22359 211 0 1 f 22360 211 0 1 f 22361 211 0 1 0 5 6 8 9 14 15 16 17 19 21 23 25 27 29 33 36 38 39 40 44 46 47 50 56 57 60 61 62 63 64 67 70 72 73 74 75 77 80 82 86 90 91 93 94 96 100 101 102 103 104 105 106 110 113 114 115 120 123 128 130 131 133 134 137 138 139 140 148 149 150 155 156 157 158 159 161 162 163 165 167 168 169 170 171 175 176 177 180 182 184 186 187 189 190 192 193 196 203 204 206 209 210 22362 211 0 1 0 2 4 7 8 12 16 17 21 22 27 30 33 34 37 41 44 45 47 48 49 52 54 59 63 67 69 70 74 81 82 83 85 87 90 91 92 94 95 98 99 100 101 105 106 107 115 117 123 125 126 127 129 130 133 134 135 136 137 141 142 143 144 148 149 150 153 155 156 158 160 168 169 170 174 176 178 179 182 183 190 192 194 198 200 202 204 205 206 207 209 22363 211 0 1 e 22364 211 0 1 0 4 5 6 10 11 12 14 16 17 18 20 22 25 28 30 31 36 42 44 45 46 48 49 50 51 53 55 57 58 60 61 64 66 67 68 72 74 76 78 79 81 85 87 92 93 94 95 97 98 99 100 103 105 111 112 113 119 120 121 123 124 126 127 129 130 132 134 138 139 144 145 146 151 153 154 159 162 165 166 167 169 171 172 173 175 176 179 180 181 182 184 185 189 192 194 201 204 208 209 22365 211 0 1 0 4 5 6 10 11 12 14 16 17 18 20 22 25 28 30 31 36 42 44 45 46 48 49 50 51 53 55 57 58 60 61 64 66 67 68 72 74 76 78 79 81 85 87 92 93 94 95 97 98 99 100 103 105 111 112 113 119 120 121 123 124 126 127 129 130 132 134 138 139 144 145 146 151 153 154 159 162 165 166 167 169 171 172 173 175 176 179 180 181 182 184 185 189 192 194 201 204 208 209 22366 211 0 1 1 3 4 9 11 12 13 14 16 18 22 23 26 27 28 29 33 36 41 44 46 47 49 51 53 54 57 62 63 65 69 70 71 72 79 82 85 86 87 90 91 92 93 94 95 96 100 101 103 105 107 110 112 113 114 117 119 122 123 124 125 126 127 130 134 136 140 141 142 143 144 145 148 151 152 154 155 157 162 164 165 166 167 168 170 171 173 175 177 183 184 186 187 192 194 196 197 199 202 204 208 209 210 22367 211 0 1 4 11 12 13 14 16 18 23 28 29 41 46 49 54 62 69 71 72 86 91 101 103 113 117 124 125 126 136 141 144 152 154 155 157 162 165 166 171 173 175 177 187 192 194 196 197 204 209 210 22368 211 1 0 e 22369 211 1 0 e 22370 211 1 0 e 22371 211 1 0 e 22372 211 1 0 e 22373 211 1 0 e 22374 211 1 0 f 22375 211 1 0 e 22376 211 1 0 f 22377 211 1 0 f 22378 211 1 0 f 22379 211 1 0 3 4 5 7 8 10 12 15 17 18 19 22 25 26 30 31 32 34 42 44 50 53 54 55 56 57 60 63 64 69 71 72 75 77 78 79 81 83 84 87 88 89 91 92 93 94 95 97 98 99 100 102 103 104 110 117 121 124 130 131 132 133 134 136 138 140 141 142 144 145 146 148 150 154 156 157 159 162 163 165 168 171 172 174 175 177 179 180 184 185 187 188 189 190 193 195 197 198 200 203 204 206 207 208 210 22380 211 1 0 0 1 4 6 7 9 14 15 16 18 25 28 29 31 32 34 35 36 37 38 39 43 46 48 49 53 54 56 58 61 68 69 73 75 76 77 78 79 80 82 83 85 88 90 93 95 97 98 100 102 103 104 105 106 107 108 109 110 111 113 114 115 118 121 122 123 124 127 128 131 132 133 134 135 136 138 139 142 147 148 152 153 154 155 158 160 161 162 163 164 165 167 170 172 173 174 175 178 179 181 184 188 189 191 192 195 197 198 201 202 203 204 205 206 207 209 210 22381 211 1 0 e 22382 211 1 0 0 1 4 7 11 13 19 20 22 23 25 26 28 31 34 35 36 38 40 45 46 47 51 52 54 56 59 60 61 62 65 72 73 74 77 78 79 82 84 87 88 89 90 91 92 95 100 101 102 106 107 109 110 114 115 116 118 119 122 123 124 126 128 130 132 134 136 137 142 143 144 146 147 148 150 151 152 153 154 155 156 157 159 161 166 168 170 176 177 178 179 181 182 185 188 189 191 192 196 197 198 199 203 204 206 207 209 210 22383 211 1 0 0 1 4 7 11 13 19 20 22 23 25 26 28 31 34 35 36 38 40 45 46 47 51 52 54 56 59 60 61 62 65 72 73 74 77 78 79 82 84 87 88 89 90 91 92 95 100 101 102 106 107 109 110 114 115 116 118 119 122 123 124 126 128 130 132 134 136 137 142 143 144 146 147 148 150 151 152 153 154 155 156 157 159 161 166 168 170 176 177 178 179 181 182 185 188 189 191 192 196 197 198 199 203 204 206 207 209 210 22384 211 1 0 0 1 6 7 8 9 10 11 15 19 21 24 25 27 30 32 34 37 38 41 43 45 46 47 48 50 53 54 56 57 59 61 65 67 68 73 75 77 78 82 85 86 88 89 91 92 97 98 103 104 105 106 108 110 111 112 113 116 118 121 125 127 131 132 133 135 140 143 145 147 148 149 152 153 156 157 161 162 166 167 168 175 178 185 186 187 188 194 195 196 197 198 200 201 202 207 208 209 210 22385 211 1 0 6 10 11 21 37 43 46 47 48 56 57 61 65 67 68 77 85 88 91 97 98 103 112 113 116 121 131 133 145 148 156 161 162 175 185 194 195 200 201 202 207 208 210 22386 211 1 0 e 22387 211 1 0 e 22388 211 1 0 e 22389 211 1 0 e 22390 211 1 0 e 22391 211 1 0 e 22392 211 1 0 f 22393 211 1 0 e 22394 211 1 0 f 22395 211 1 0 f 22396 211 1 0 f 22397 211 1 0 1 5 6 7 8 9 12 14 16 18 20 21 23 24 26 27 28 30 32 34 36 37 39 41 45 46 49 50 52 53 55 58 59 60 61 63 64 65 66 67 68 70 72 74 79 83 85 86 91 93 94 96 97 100 102 103 107 108 109 112 113 117 118 119 122 123 124 126 127 133 135 138 142 144 145 148 153 159 162 163 166 167 168 169 171 172 175 177 180 181 182 184 185 186 190 191 192 193 194 197 199 201 202 204 208 209 22398 211 1 0 0 1 7 9 10 13 14 15 16 17 18 19 21 22 23 24 27 32 33 34 36 40 41 42 44 45 47 50 51 52 53 55 56 57 58 60 63 64 67 69 72 74 76 81 84 85 87 89 90 96 97 100 101 102 104 105 106 107 108 113 114 115 118 119 121 125 126 127 128 129 131 132 133 135 136 138 139 143 144 146 151 153 156 157 159 160 161 162 163 164 165 171 176 178 180 182 183 189 192 194 198 200 204 205 206 208 209 210 22399 211 1 0 e 22400 211 1 0 0 2 3 4 5 10 12 13 17 19 20 21 22 23 25 26 27 28 30 32 38 39 40 43 45 47 48 49 55 58 59 60 61 65 66 67 69 71 73 74 75 77 80 81 82 87 90 92 94 96 97 98 103 105 107 108 109 110 111 112 113 114 116 121 122 126 129 131 133 136 137 139 140 143 144 147 148 149 152 154 155 156 159 161 162 166 170 176 177 179 181 182 185 187 190 193 194 195 196 197 198 201 203 205 209 22401 211 1 0 0 2 3 4 5 10 12 13 17 19 20 21 22 23 25 26 27 28 30 32 38 39 40 43 45 47 48 49 55 58 59 60 61 65 66 67 69 71 73 74 75 77 80 81 82 87 90 92 94 96 97 98 103 105 107 108 109 110 111 112 113 114 116 121 122 126 129 131 133 136 137 139 140 143 144 147 148 149 152 154 155 156 159 161 162 166 170 176 177 179 181 182 185 187 190 193 194 195 196 197 198 201 203 205 209 22402 211 1 0 0 1 4 5 7 9 10 11 13 14 15 16 17 18 19 20 21 23 26 27 28 29 31 34 39 43 46 47 48 49 50 51 52 54 56 57 63 64 68 69 73 74 75 76 77 78 79 81 82 85 87 89 91 93 94 96 98 99 101 102 103 104 105 106 107 108 110 113 117 119 120 121 122 123 124 125 127 129 131 132 134 135 137 144 145 146 148 151 154 157 158 159 160 162 163 164 165 166 168 170 171 178 180 182 184 185 186 188 189 191 194 198 200 204 205 206 207 209 22403 211 1 0 5 7 13 15 17 21 23 27 28 31 34 39 43 46 47 51 54 63 64 73 74 79 82 85 87 89 98 99 101 104 106 108 119 123 124 125 129 131 132 135 145 158 162 164 171 184 186 188 189 194 206 207 22404 211 1 0 e 22405 211 1 0 e 22406 211 1 0 e 22407 211 1 0 e 22408 211 1 0 e 22409 211 1 0 e 22410 211 1 0 f 22411 211 1 0 e 22412 211 1 0 f 22413 211 1 0 f 22414 211 1 0 f 22415 211 1 0 2 4 8 9 10 11 12 15 18 19 20 27 28 32 34 35 37 38 40 41 42 47 48 52 53 54 55 58 60 62 67 72 74 76 77 78 82 83 85 86 89 90 94 95 96 97 98 101 102 107 111 112 114 117 118 119 120 123 124 125 126 127 128 135 136 137 138 142 144 145 146 152 155 157 158 162 163 164 166 170 171 172 173 177 178 179 181 187 191 192 194 195 197 199 201 203 204 205 208 22416 211 1 0 3 4 5 7 9 12 16 18 19 21 25 26 27 28 30 31 34 37 38 39 40 44 45 46 47 49 51 53 55 56 58 61 63 67 70 71 78 83 86 87 88 93 100 101 105 110 111 112 116 120 121 122 123 124 125 127 129 132 133 135 136 137 144 145 146 148 149 150 151 152 153 154 156 160 161 163 164 165 166 167 168 172 173 174 177 178 180 181 184 185 186 190 194 197 200 201 202 203 204 205 210 22417 211 1 0 e 22418 211 1 0 2 3 4 5 6 12 16 18 19 21 22 23 27 28 32 34 35 37 39 40 43 44 45 46 47 48 49 50 55 56 58 59 60 63 64 68 69 70 71 74 76 77 78 79 81 83 86 88 89 91 92 94 95 96 98 99 100 101 102 111 114 116 117 118 119 121 122 125 128 130 131 133 137 138 141 145 146 148 149 152 154 157 166 169 170 172 174 177 178 179 180 184 185 186 187 188 192 194 195 196 197 202 204 205 207 208 210 22419 211 1 0 2 3 4 5 6 12 16 18 19 21 22 23 27 28 32 34 35 37 39 40 43 44 45 46 47 48 49 50 55 56 58 59 60 63 64 68 69 70 71 74 76 77 78 79 81 83 86 88 89 91 92 94 95 96 98 99 100 101 102 111 114 116 117 118 119 121 122 125 128 130 131 133 137 138 141 145 146 148 149 152 154 157 166 169 170 172 174 177 178 179 180 184 185 186 187 188 192 194 195 196 197 202 204 205 207 208 210 22420 211 1 0 3 6 9 12 13 15 16 17 21 22 23 25 31 32 33 34 36 37 40 41 42 44 45 47 48 55 56 60 61 63 69 70 71 72 75 77 78 81 82 88 90 91 94 95 96 97 99 100 101 102 107 109 112 114 116 120 123 125 126 128 129 131 132 136 139 141 146 148 150 153 155 156 159 162 164 165 166 171 173 175 178 181 182 183 184 186 187 190 191 192 194 197 198 199 200 202 206 207 208 209 22421 211 1 0 15 16 22 33 34 37 41 45 56 60 61 69 71 72 78 88 91 99 101 102 109 120 128 129 131 132 136 139 141 150 156 165 175 178 181 182 184 186 187 192 202 206 207 208 22422 211 1 0 e 22423 211 1 0 e 22424 211 1 0 e 22425 211 1 0 e 22426 211 1 0 e 22427 211 1 0 e 22428 211 1 0 f 22429 211 1 0 e 22430 211 1 0 f 22431 211 1 0 f 22432 211 1 0 f 22433 211 1 0 0 2 4 5 6 10 17 18 19 21 24 27 29 33 36 38 40 41 42 43 44 49 50 51 52 55 57 59 61 62 63 64 66 67 68 69 71 73 74 77 78 80 81 83 84 89 91 92 96 99 103 107 109 112 114 115 116 122 124 126 128 129 133 134 135 136 138 141 143 146 148 149 150 153 154 158 161 163 164 166 167 168 169 170 171 172 174 176 177 178 179 180 188 190 195 196 198 200 201 203 206 209 22434 211 1 0 0 2 5 6 7 8 9 10 11 13 16 18 21 22 24 29 34 35 38 39 42 43 46 48 49 52 55 57 58 59 60 63 64 66 67 68 70 72 73 74 77 78 79 80 83 85 87 90 92 95 96 97 98 101 102 104 105 106 107 108 109 110 111 112 116 117 122 124 125 127 128 129 132 133 134 136 137 140 143 144 145 147 148 149 153 154 156 157 158 159 160 163 167 169 173 174 175 178 180 181 184 187 190 192 194 195 196 198 200 202 205 207 208 209 210 22435 211 1 0 e 22436 211 1 0 0 1 4 5 6 7 8 10 12 15 18 19 22 23 24 26 29 32 33 34 35 36 38 39 40 41 42 43 46 47 48 49 50 53 54 55 57 59 60 61 63 64 65 66 67 69 72 74 76 77 82 83 85 86 88 91 94 97 98 99 100 103 104 107 108 109 113 116 117 118 124 125 126 128 129 136 138 139 146 147 149 151 153 155 156 157 160 162 163 164 167 168 171 173 175 178 179 183 184 185 186 187 188 189 197 200 201 205 207 209 22437 211 1 0 0 1 4 5 6 7 8 10 12 15 18 19 22 23 24 26 29 32 33 34 35 36 38 39 40 41 42 43 46 47 48 49 50 53 54 55 57 59 60 61 63 64 65 66 67 69 72 74 76 77 82 83 85 86 88 91 94 97 98 99 100 103 104 107 108 109 113 116 117 118 124 125 126 128 129 136 138 139 146 147 149 151 153 155 156 157 160 162 163 164 167 168 171 173 175 178 179 183 184 185 186 187 188 189 197 200 201 205 207 209 22438 211 1 0 0 2 5 7 11 12 16 23 24 26 29 30 33 34 36 37 41 43 45 48 49 52 53 54 55 57 59 60 62 65 66 67 68 71 72 74 80 81 83 84 86 89 90 93 94 96 100 101 103 106 108 110 111 114 116 118 121 122 123 124 128 129 130 131 135 136 139 140 141 146 147 148 149 153 154 158 160 161 165 170 174 175 176 177 178 181 182 183 184 185 188 189 190 191 192 195 196 197 203 204 208 210 22439 211 1 0 2 7 16 23 24 33 34 37 43 54 55 60 62 65 67 68 72 80 84 90 93 94 96 100 106 108 111 123 128 129 131 141 147 149 160 161 165 170 174 181 182 183 185 188 190 192 195 196 203 204 208 210 22440 211 1 1 e 22441 211 1 1 e 22442 211 1 1 e 22443 211 1 1 e 22444 211 1 1 e 22445 211 1 1 e 22446 211 1 1 f 22447 211 1 1 e 22448 211 1 1 f 22449 211 1 1 f 22450 211 1 1 f 22451 211 1 1 1 3 6 7 9 10 12 13 15 19 20 21 24 26 27 28 33 34 35 37 38 39 40 41 47 48 49 51 53 54 57 58 60 66 67 69 70 74 75 76 78 79 80 86 89 90 95 96 98 101 103 104 106 107 112 113 114 115 117 119 122 123 128 132 133 134 135 137 138 139 143 146 147 148 152 156 157 159 160 161 163 164 166 168 169 170 172 178 180 182 184 186 187 188 190 191 194 197 200 202 203 204 205 206 209 210 22452 211 1 1 0 2 5 8 11 12 13 14 15 17 19 20 21 24 27 28 30 31 32 38 40 43 46 53 54 55 58 59 60 61 62 63 65 67 72 73 75 77 79 81 82 85 87 88 90 91 97 99 100 103 105 106 108 111 112 116 117 119 121 122 123 127 128 130 131 132 134 138 139 140 141 142 143 151 153 154 155 157 158 161 165 166 167 170 173 174 175 178 179 180 182 190 191 193 195 196 200 202 204 205 206 208 209 210 22453 211 1 1 e 22454 211 1 1 0 2 3 7 8 10 11 12 13 16 18 22 25 28 32 37 41 42 43 44 48 50 51 52 53 55 57 61 62 67 68 69 70 72 73 77 78 79 81 82 83 86 87 91 93 95 97 105 106 107 109 110 111 113 114 115 117 118 119 122 123 125 128 129 130 135 136 138 140 145 148 151 152 153 154 155 156 159 162 163 166 168 170 171 172 177 178 179 181 182 183 184 185 186 187 188 190 192 193 194 197 198 199 201 202 204 205 208 22455 211 1 1 0 2 3 7 8 10 11 12 13 16 18 22 25 28 32 37 41 42 43 44 48 50 51 52 53 55 57 61 62 67 68 69 70 72 73 77 78 79 81 82 83 86 87 91 93 95 97 105 106 107 109 110 111 113 114 115 117 118 119 122 123 125 128 129 130 135 136 138 140 145 148 151 152 153 154 155 156 159 162 163 166 168 170 171 172 177 178 179 181 182 183 184 185 186 187 188 190 192 193 194 197 198 199 201 202 204 205 208 22456 211 1 1 0 3 5 6 8 10 13 16 17 19 21 22 24 25 26 33 35 36 38 39 40 41 42 44 46 47 49 50 52 54 55 57 59 61 63 65 70 73 78 81 82 85 88 94 95 98 100 101 102 104 106 109 110 111 113 114 115 116 119 120 122 123 124 125 126 129 130 132 134 135 136 137 138 141 142 143 145 146 149 150 151 153 154 156 157 158 162 164 165 166 167 168 169 170 172 173 176 177 180 186 188 189 190 193 194 196 197 198 199 200 201 202 204 206 207 22457 211 1 1 3 5 6 8 10 13 16 17 21 24 25 26 33 35 38 46 47 49 52 54 55 59 65 70 78 82 88 94 98 100 104 109 116 119 123 124 125 126 129 135 137 141 143 145 149 150 151 153 156 158 162 164 169 170 172 176 186 188 189 190 193 194 199 202 204 207 22458 211 1 1 e 22459 211 1 1 e 22460 211 1 1 e 22461 211 1 1 e 22462 211 1 1 e 22463 211 1 1 e 22464 211 1 1 f 22465 211 1 1 e 22466 211 1 1 f 22467 211 1 1 f 22468 211 1 1 f 22469 211 1 1 0 6 7 9 13 15 17 18 21 24 28 29 33 34 35 36 37 40 41 42 44 45 46 47 48 49 52 53 54 58 59 69 71 80 82 83 88 91 92 93 95 97 99 101 102 103 104 105 112 114 116 118 125 127 128 140 141 142 143 145 147 148 149 153 154 156 157 159 161 162 163 164 166 168 170 171 174 175 177 178 180 182 186 189 190 191 192 193 194 195 197 198 199 201 202 203 210 22470 211 1 1 3 4 5 7 10 13 15 17 18 21 22 23 24 28 29 33 35 36 37 38 41 42 44 45 48 56 57 58 59 61 63 64 65 66 69 70 71 72 75 77 78 82 84 85 86 87 88 90 94 97 98 99 104 105 106 109 110 111 113 116 117 122 123 124 125 129 130 131 138 139 141 143 144 145 148 149 150 153 159 162 163 164 170 171 177 178 179 181 183 186 187 188 190 192 193 195 197 199 203 204 205 207 208 209 210 22471 211 1 1 e 22472 211 1 1 1 3 5 6 8 14 17 18 21 22 24 25 27 30 31 33 34 36 37 38 41 42 43 47 49 50 52 53 54 55 59 60 62 63 67 76 79 84 89 92 96 97 99 100 101 104 105 106 107 109 110 111 118 119 129 133 139 141 145 146 147 150 152 153 154 159 160 161 162 166 167 168 170 171 176 180 181 182 184 186 188 191 192 196 203 205 210 22473 211 1 1 1 3 5 6 8 14 17 18 21 22 24 25 27 30 31 33 34 36 37 38 41 42 43 47 49 50 52 53 54 55 59 60 62 63 67 76 79 84 89 92 96 97 99 100 101 104 105 106 107 109 110 111 118 119 129 133 139 141 145 146 147 150 152 153 154 159 160 161 162 166 167 168 170 171 176 180 181 182 184 186 188 191 192 196 203 205 210 22474 211 1 1 0 5 7 8 14 15 17 19 21 27 29 33 34 35 36 38 39 40 44 45 47 48 49 50 53 54 55 59 61 63 64 66 67 69 70 72 73 75 76 77 78 79 83 86 87 91 93 96 100 101 102 103 104 106 107 108 110 112 116 121 122 123 126 128 130 131 133 134 136 139 140 143 144 145 149 150 151 153 155 159 160 162 163 168 171 172 173 174 176 178 179 181 182 183 186 187 188 190 192 195 196 197 199 202 203 205 207 210 22475 211 1 1 0 5 8 14 19 21 29 33 35 36 39 45 47 50 54 61 63 64 67 69 70 73 79 83 87 93 96 101 102 106 107 110 112 116 121 122 123 126 130 134 136 145 150 151 153 159 160 163 171 173 174 176 179 182 188 192 196 199 202 203 205 22476 211 1 1 e 22477 211 1 1 e 22478 211 1 1 e 22479 211 1 1 e 22480 211 1 1 e 22481 211 1 1 e 22482 211 1 1 f 22483 211 1 1 e 22484 211 1 1 f 22485 211 1 1 f 22486 211 1 1 f 22487 211 1 1 1 5 6 7 8 9 10 15 16 17 20 25 30 31 35 37 38 39 40 44 45 47 49 52 53 54 56 58 60 61 62 64 66 69 71 79 81 82 85 88 91 92 94 95 96 97 99 100 102 103 104 108 110 111 113 115 116 117 118 119 120 123 124 126 127 130 132 133 135 136 138 139 140 141 142 144 145 146 147 148 149 151 153 154 157 159 160 161 163 164 167 168 171 179 181 182 183 184 194 196 198 199 200 202 204 206 207 210 22488 211 1 1 0 1 2 4 6 7 11 12 13 14 15 16 18 19 22 23 25 26 29 32 33 34 35 38 39 40 41 44 51 52 53 56 61 62 64 66 67 68 69 70 71 72 77 78 79 82 89 90 91 92 94 96 97 99 100 102 105 106 107 108 109 110 111 113 116 117 118 120 124 126 127 130 131 132 133 136 143 144 145 147 149 153 154 156 157 163 165 167 171 172 173 175 176 177 178 180 184 186 187 188 192 195 198 200 203 205 22489 211 1 1 e 22490 211 1 1 2 10 14 19 21 23 25 29 30 31 33 35 40 41 42 45 47 48 49 50 53 55 56 57 63 68 69 70 71 72 73 75 76 77 78 79 82 83 86 88 89 90 96 97 98 99 101 102 104 105 107 108 109 115 116 117 119 120 124 126 129 131 132 133 134 135 136 139 141 142 143 146 150 152 156 158 159 160 162 163 165 168 169 170 172 173 174 177 178 180 181 182 183 184 187 190 195 197 198 200 201 203 204 209 210 22491 211 1 1 2 10 14 19 21 23 25 29 30 31 33 35 40 41 42 45 47 48 49 50 53 55 56 57 63 68 69 70 71 72 73 75 76 77 78 79 82 83 86 88 89 90 96 97 98 99 101 102 104 105 107 108 109 115 116 117 119 120 124 126 129 131 132 133 134 135 136 139 141 142 143 146 150 152 156 158 159 160 162 163 165 168 169 170 172 173 174 177 178 180 181 182 183 184 187 190 195 197 198 200 201 203 204 209 210 22492 211 1 1 1 3 4 5 11 12 13 14 15 16 17 18 21 22 24 27 30 31 34 35 36 37 41 42 45 48 49 50 52 56 57 62 63 65 66 68 70 72 73 74 76 77 78 80 81 82 83 87 89 91 92 96 98 99 101 102 105 106 108 109 110 111 112 115 116 117 118 119 122 126 129 131 132 136 139 144 145 148 154 155 157 159 160 161 162 164 166 167 168 170 174 177 178 179 183 185 186 187 188 190 192 193 194 195 197 198 200 201 202 204 205 206 208 22493 211 1 1 1 3 11 12 14 15 16 18 27 30 31 36 37 41 42 45 49 50 62 63 66 77 78 80 81 89 92 99 101 102 106 108 109 110 111 112 118 119 122 126 132 136 139 144 148 154 155 157 159 161 167 168 170 177 183 186 193 194 195 198 200 202 204 206 22494 211 1 1 e 22495 211 1 1 e 22496 211 1 1 e 22497 211 1 1 e 22498 211 1 1 e 22499 211 1 1 e 22500 211 1 1 f 22501 211 1 1 e 22502 211 1 1 f 22503 211 1 1 f 22504 211 1 1 f 22505 211 1 1 0 1 2 3 4 5 6 7 9 10 11 15 17 18 22 25 29 30 31 32 33 34 35 36 42 43 44 52 54 56 57 60 63 65 69 71 74 76 78 79 80 86 90 92 93 94 96 101 103 113 114 115 116 120 126 128 130 135 137 138 139 143 144 145 146 147 153 154 155 158 160 161 162 163 164 166 169 172 173 175 176 177 178 183 184 188 198 199 200 203 204 206 207 209 210 22506 211 1 1 0 5 6 10 11 12 15 16 17 18 20 21 22 23 24 26 27 28 29 30 32 34 36 37 38 41 44 45 47 48 49 52 53 55 57 58 59 60 63 64 66 67 69 71 73 76 82 87 90 91 92 94 96 97 103 107 108 109 114 115 116 119 120 122 125 126 131 132 133 134 135 138 142 144 145 147 149 150 151 152 153 158 159 160 162 164 165 171 172 175 176 178 185 186 187 190 191 192 193 195 196 197 198 202 204 207 208 210 22507 211 1 1 e 22508 211 1 1 0 1 4 5 6 7 14 15 16 17 18 23 27 30 38 40 42 44 47 50 52 55 56 58 59 60 61 65 70 72 73 75 77 80 82 83 84 86 88 89 91 92 93 94 95 99 100 102 103 106 110 112 113 114 117 118 119 122 125 127 129 136 137 138 141 143 144 151 152 153 154 156 158 159 160 164 166 167 169 171 172 173 174 175 178 180 183 186 187 189 190 194 196 201 202 203 205 206 207 208 209 22509 211 1 1 0 1 4 5 6 7 14 15 16 17 18 23 27 30 38 40 42 44 47 50 52 55 56 58 59 60 61 65 70 72 73 75 77 80 82 83 84 86 88 89 91 92 93 94 95 99 100 102 103 106 110 112 113 114 117 118 119 122 125 127 129 136 137 138 141 143 144 151 152 153 154 156 158 159 160 164 166 167 169 171 172 173 174 175 178 180 183 186 187 189 190 194 196 201 202 203 205 206 207 208 209 22510 211 1 1 0 1 5 11 12 17 18 21 26 27 29 31 32 33 35 37 39 44 45 46 48 49 50 52 55 58 59 62 63 64 66 71 72 73 75 76 78 79 81 82 83 84 86 88 89 93 98 101 104 106 108 109 111 112 114 115 116 117 119 120 122 127 131 135 136 139 141 142 143 144 145 146 147 148 149 151 154 155 156 158 160 161 163 166 168 171 173 174 176 177 178 180 184 187 188 189 190 192 196 198 200 207 22511 211 1 1 0 1 5 18 26 33 44 48 50 55 62 66 71 76 78 81 83 84 86 101 104 106 108 109 112 116 120 122 127 131 142 143 144 147 148 151 154 155 163 166 168 171 173 174 177 178 184 189 192 198 200 22512 224 0 0 e 22513 224 0 0 e 22514 224 0 0 e 22515 224 0 0 e 22516 224 0 0 e 22517 224 0 0 e 22518 224 0 0 f 22519 224 0 0 e 22520 224 0 0 f 22521 224 0 0 f 22522 224 0 0 f 22523 224 0 0 0 1 2 3 4 6 7 8 11 12 14 15 16 17 22 25 28 29 30 31 32 33 34 35 37 38 40 43 44 46 47 49 50 51 53 55 57 60 63 65 66 67 68 69 71 73 75 76 78 81 82 83 86 87 88 89 91 93 96 100 105 108 109 112 114 116 117 119 120 121 123 125 129 130 133 136 137 138 139 140 142 144 145 146 148 149 152 153 156 157 159 160 163 165 167 170 173 174 176 178 181 182 184 189 193 197 199 200 204 205 206 207 211 216 217 218 220 223 22524 224 0 0 0 1 5 9 10 12 13 14 19 22 25 27 28 29 30 31 32 37 38 39 40 41 42 45 46 47 49 51 54 55 58 61 65 67 68 72 74 77 79 80 81 86 88 89 90 93 94 95 96 101 102 105 106 107 108 110 112 114 116 117 118 119 123 125 126 130 131 133 135 136 138 142 144 145 146 151 152 154 157 158 159 160 165 166 167 168 169 174 175 177 179 181 182 185 186 187 192 193 194 196 197 199 201 203 206 208 212 213 216 218 220 222 223 22525 224 0 0 e 22526 224 0 0 2 6 7 8 14 17 18 20 22 23 25 26 29 30 31 33 34 37 41 43 44 49 50 53 54 55 57 58 59 60 61 63 64 69 71 73 77 78 80 81 82 83 84 85 86 88 89 90 92 95 96 97 98 100 105 106 107 109 112 113 116 117 118 120 121 122 130 132 133 136 138 140 143 145 147 148 149 152 154 155 156 161 162 164 167 170 172 175 178 179 184 187 188 197 199 204 205 207 210 211 212 214 215 216 218 219 220 222 22527 224 0 0 2 6 7 8 14 17 18 20 22 23 25 26 29 30 31 33 34 37 41 43 44 49 50 53 54 55 57 58 59 60 61 63 64 69 71 73 77 78 80 81 82 83 84 85 86 88 89 90 92 95 96 97 98 100 105 106 107 109 112 113 116 117 118 120 121 122 130 132 133 136 138 140 143 145 147 148 149 152 154 155 156 161 162 164 167 170 172 175 178 179 184 187 188 197 199 204 205 207 210 211 212 214 215 216 218 219 220 222 22528 224 0 0 2 3 5 6 7 11 14 16 17 25 31 32 34 37 44 46 47 51 55 57 59 60 61 63 64 66 68 70 72 74 75 76 77 80 81 85 87 89 93 98 104 106 108 110 111 113 116 117 120 121 122 124 125 126 127 131 132 133 134 135 136 137 139 141 142 143 144 147 150 153 155 156 158 159 160 162 163 164 165 167 168 169 170 172 173 174 175 179 180 183 185 186 187 188 189 190 191 193 197 200 207 208 209 210 213 216 219 223 22529 224 0 0 2 3 6 7 11 34 37 44 47 51 57 59 60 61 72 76 80 81 89 93 98 106 108 110 111 116 117 120 121 125 132 133 136 139 143 155 159 164 165 167 168 169 170 175 179 183 186 187 190 191 197 200 209 216 22530 224 0 0 e 22531 224 0 0 e 22532 224 0 0 e 22533 224 0 0 e 22534 224 0 0 e 22535 224 0 0 e 22536 224 0 0 f 22537 224 0 0 e 22538 224 0 0 f 22539 224 0 0 f 22540 224 0 0 f 22541 224 0 0 1 3 5 10 11 16 18 20 23 25 27 28 29 32 33 34 38 39 40 42 43 44 45 47 55 57 60 61 62 64 65 66 71 72 73 74 75 76 78 82 83 84 86 90 91 95 100 103 106 108 109 110 112 113 115 117 118 119 121 122 129 130 134 135 136 137 139 142 147 152 154 158 159 161 168 170 172 173 174 175 178 182 185 186 187 190 191 198 200 201 202 203 204 205 206 207 211 212 217 219 222 223 22542 224 0 0 1 3 5 8 13 15 17 21 23 24 25 26 28 29 30 32 37 38 39 41 43 44 45 46 48 50 52 55 56 58 59 61 63 65 68 69 72 73 75 76 79 85 91 93 94 96 97 98 99 100 103 105 106 111 112 113 116 118 120 123 125 128 131 132 133 134 136 137 138 139 142 145 150 155 157 158 164 166 167 169 170 171 174 175 179 180 186 187 189 190 194 198 199 201 207 208 210 211 212 213 214 217 218 219 220 221 22543 224 0 0 e 22544 224 0 0 1 3 7 9 16 17 19 20 22 25 28 33 34 35 38 39 41 43 49 52 54 60 61 64 68 69 72 76 77 78 80 82 83 85 86 87 90 91 96 98 99 104 105 106 107 108 109 111 115 120 124 125 126 127 129 130 131 135 138 141 145 149 150 154 157 160 163 164 166 168 169 170 171 172 173 175 176 177 179 183 184 185 186 188 190 193 203 205 206 207 210 211 212 214 215 217 219 220 221 22545 224 0 0 1 3 7 9 16 17 19 20 22 25 28 33 34 35 38 39 41 43 49 52 54 60 61 64 68 69 72 76 77 78 80 82 83 85 86 87 90 91 96 98 99 104 105 106 107 108 109 111 115 120 124 125 126 127 129 130 131 135 138 141 145 149 150 154 157 160 163 164 166 168 169 170 171 172 173 175 176 177 179 183 184 185 186 188 190 193 203 205 206 207 210 211 212 214 215 217 219 220 221 22546 224 0 0 0 1 2 6 7 9 10 11 12 13 14 17 20 21 24 27 29 32 33 34 37 38 39 40 41 46 47 48 49 50 51 52 55 56 61 62 63 64 65 67 70 72 74 85 89 96 97 100 101 102 103 107 108 109 112 113 114 118 119 120 125 126 129 130 132 133 137 138 140 142 143 144 145 148 149 151 155 159 164 165 168 172 175 176 179 182 183 184 188 189 190 191 192 195 196 197 199 201 203 204 206 207 208 209 210 213 217 218 221 22547 224 0 0 0 6 9 24 32 34 38 39 47 51 52 55 56 64 65 67 70 72 74 89 96 100 108 109 113 119 120 130 132 133 137 142 143 144 149 151 164 165 168 172 176 183 191 192 195 201 206 208 210 213 217 218 22548 224 0 0 e 22549 224 0 0 e 22550 224 0 0 e 22551 224 0 0 e 22552 224 0 0 e 22553 224 0 0 e 22554 224 0 0 f 22555 224 0 0 e 22556 224 0 0 f 22557 224 0 0 f 22558 224 0 0 f 22559 224 0 0 1 5 10 12 17 19 20 25 28 29 32 33 34 35 36 40 42 43 46 47 48 51 53 55 58 70 72 73 74 76 77 78 79 82 83 87 88 90 92 96 97 98 101 103 104 107 110 111 112 113 115 116 117 118 119 121 122 126 127 129 132 133 135 137 139 140 143 144 145 146 147 148 150 153 154 157 160 161 162 163 166 167 173 174 176 177 179 184 186 190 193 195 201 202 203 204 205 207 209 210 211 216 220 222 223 22560 224 0 0 0 2 4 6 13 15 16 19 20 21 23 24 25 27 28 30 31 32 36 37 38 39 41 43 44 48 49 52 53 55 60 64 65 66 68 69 72 73 74 78 79 85 86 87 91 92 93 98 103 108 112 113 114 116 117 118 119 122 123 124 128 130 132 136 137 138 139 145 147 148 150 151 152 153 154 155 160 161 162 163 165 167 168 169 170 171 173 176 177 179 182 183 185 186 187 189 192 199 201 202 203 204 207 208 209 210 215 217 218 220 222 223 22561 224 0 0 e 22562 224 0 0 1 3 6 7 9 10 12 13 15 16 19 20 22 23 28 33 34 35 37 38 39 45 48 49 51 53 54 55 61 63 67 71 72 73 77 81 83 84 85 89 91 93 95 97 98 99 103 104 105 109 110 111 114 120 121 124 125 128 131 133 134 138 139 140 141 142 145 146 148 150 151 156 157 158 159 161 162 163 164 165 168 171 176 178 179 181 182 183 186 189 190 191 192 193 197 198 200 201 205 206 209 211 212 215 216 222 223 22563 224 0 0 1 3 6 7 9 10 12 13 15 16 19 20 22 23 28 33 34 35 37 38 39 45 48 49 51 53 54 55 61 63 67 71 72 73 77 81 83 84 85 89 91 93 95 97 98 99 103 104 105 109 110 111 114 120 121 124 125 128 131 133 134 138 139 140 141 142 145 146 148 150 151 156 157 158 159 161 162 163 164 165 168 171 176 178 179 181 182 183 186 189 190 191 192 193 197 198 200 201 205 206 209 211 212 215 216 222 223 22564 224 0 0 0 6 14 15 16 17 19 21 22 23 25 27 30 32 34 35 37 39 41 43 44 45 47 48 49 50 52 59 60 61 62 65 67 69 71 73 76 77 79 80 82 83 84 88 89 90 92 93 94 95 96 98 102 103 104 107 109 112 115 116 117 118 120 121 122 124 125 127 130 131 133 137 139 141 145 147 148 151 157 158 159 160 161 162 164 166 168 172 173 174 176 179 181 182 183 185 186 187 188 189 190 191 192 195 196 199 201 204 206 207 209 210 211 212 213 214 215 216 217 218 220 223 22565 224 0 0 0 23 25 27 32 35 37 39 41 47 50 52 59 60 61 67 69 71 76 80 82 84 89 90 92 93 95 98 104 109 115 118 121 124 125 130 137 141 147 148 151 157 158 159 160 161 162 168 172 173 176 179 182 185 186 188 190 196 201 209 212 213 214 215 216 218 220 22566 224 0 0 e 22567 224 0 0 e 22568 224 0 0 e 22569 224 0 0 e 22570 224 0 0 e 22571 224 0 0 e 22572 224 0 0 f 22573 224 0 0 e 22574 224 0 0 f 22575 224 0 0 f 22576 224 0 0 f 22577 224 0 0 2 4 8 10 11 12 17 18 19 22 24 25 28 29 34 36 38 39 44 45 46 51 52 55 56 58 59 64 66 67 68 70 72 75 76 80 81 84 87 88 90 92 94 95 96 98 99 100 102 103 104 106 107 108 114 116 119 124 125 126 127 129 135 136 138 139 140 141 149 151 152 153 155 156 160 161 162 168 169 171 172 174 176 178 186 187 188 191 193 194 195 199 201 202 205 206 207 209 214 216 217 219 221 223 22578 224 0 0 0 2 3 4 6 7 8 9 13 15 16 19 20 21 23 24 25 26 27 28 30 32 36 39 41 42 43 44 48 49 51 52 53 54 56 59 60 64 65 66 75 77 81 82 84 85 86 87 90 91 93 96 98 99 100 101 105 107 109 110 111 112 113 115 116 117 118 119 122 123 126 128 129 131 132 133 135 138 139 141 142 143 144 146 152 156 158 159 160 161 162 163 164 166 168 171 174 175 177 179 181 186 188 191 196 200 201 203 204 206 214 215 216 219 220 221 22579 224 0 0 e 22580 224 0 0 1 2 6 7 8 10 11 12 13 15 17 19 22 24 26 27 31 33 35 37 38 41 43 44 45 46 51 52 54 56 57 63 66 67 70 71 74 75 76 77 83 84 89 90 91 93 94 95 99 100 102 104 107 112 115 116 117 119 120 121 122 123 124 126 128 131 132 136 139 140 143 144 145 146 147 148 149 150 151 152 154 155 156 159 160 161 162 166 167 168 170 171 172 174 175 184 185 187 189 190 192 193 194 196 197 199 200 203 204 208 209 210 213 214 215 216 218 222 22581 224 0 0 1 2 6 7 8 10 11 12 13 15 17 19 22 24 26 27 31 33 35 37 38 41 43 44 45 46 51 52 54 56 57 63 66 67 70 71 74 75 76 77 83 84 89 90 91 93 94 95 99 100 102 104 107 112 115 116 117 119 120 121 122 123 124 126 128 131 132 136 139 140 143 144 145 146 147 148 149 150 151 152 154 155 156 159 160 161 162 166 167 168 170 171 172 174 175 184 185 187 189 190 192 193 194 196 197 199 200 203 204 208 209 210 213 214 215 216 218 222 22582 224 0 0 5 6 8 10 11 12 14 17 18 19 20 22 23 24 27 28 29 33 35 38 40 41 43 47 48 49 50 51 56 57 59 60 65 66 67 69 72 74 76 79 83 84 85 86 87 88 90 92 93 94 95 96 97 98 99 100 101 103 109 110 111 112 115 120 122 127 130 131 134 135 137 138 139 140 141 142 143 147 148 149 153 154 159 160 162 163 164 166 169 172 173 174 179 183 187 188 189 190 191 194 195 196 202 203 205 207 210 211 212 216 217 219 223 22583 224 0 0 5 10 11 12 14 18 19 20 24 28 29 33 35 38 40 41 47 48 60 65 66 74 83 85 87 88 92 94 95 97 99 101 109 110 130 134 135 137 139 143 147 148 153 162 163 169 173 174 183 187 188 189 194 203 207 212 217 223 22584 224 0 1 e 22585 224 0 1 e 22586 224 0 1 e 22587 224 0 1 e 22588 224 0 1 e 22589 224 0 1 e 22590 224 0 1 f 22591 224 0 1 e 22592 224 0 1 f 22593 224 0 1 f 22594 224 0 1 f 22595 224 0 1 0 3 6 7 8 9 11 13 14 15 16 24 26 28 29 31 33 34 35 37 40 41 42 44 45 46 47 51 56 58 59 62 63 65 67 68 69 70 72 73 74 76 77 80 82 84 86 87 91 92 95 96 97 98 99 100 101 103 104 105 107 108 110 111 112 113 115 117 118 119 125 128 129 131 132 134 137 142 151 153 154 155 156 159 161 162 163 167 169 170 171 172 173 177 178 181 183 184 186 191 192 193 194 198 199 200 201 202 203 204 209 210 211 212 213 215 219 22596 224 0 1 2 3 5 6 8 9 11 13 14 15 16 17 18 19 20 23 25 26 27 31 34 35 36 37 39 40 41 44 49 51 53 54 55 57 58 59 60 68 69 71 72 73 74 75 87 89 93 94 95 102 105 106 110 112 114 115 116 118 130 131 132 133 134 136 137 138 139 141 143 146 148 149 151 152 153 157 158 159 167 170 171 172 174 176 177 179 181 182 184 186 188 190 192 196 197 204 205 207 208 209 212 214 215 220 222 223 22597 224 0 1 e 22598 224 0 1 0 3 8 10 17 20 24 26 27 28 29 30 32 33 38 40 42 44 45 46 47 48 51 56 58 59 60 61 63 64 68 69 71 79 82 83 84 85 87 90 92 93 95 98 103 104 105 107 110 111 112 113 114 115 116 117 118 119 121 124 126 128 129 130 137 144 145 147 148 150 152 153 155 158 161 162 163 164 170 172 173 174 175 176 177 179 185 186 187 189 191 192 194 195 196 197 198 199 201 204 206 207 210 212 213 214 215 216 217 218 219 220 221 222 22599 224 0 1 0 3 8 10 17 20 24 26 27 28 29 30 32 33 38 40 42 44 45 46 47 48 51 56 58 59 60 61 63 64 68 69 71 79 82 83 84 85 87 90 92 93 95 98 103 104 105 107 110 111 112 113 114 115 116 117 118 119 121 124 126 128 129 130 137 144 145 147 148 150 152 153 155 158 161 162 163 164 170 172 173 174 175 176 177 179 185 186 187 189 191 192 194 195 196 197 198 199 201 204 206 207 210 212 213 214 215 216 217 218 219 220 221 222 22600 224 0 1 3 6 7 8 11 12 15 16 23 24 26 27 29 35 36 38 39 40 41 43 45 46 47 53 62 64 67 68 69 71 72 73 74 76 80 81 82 84 86 87 88 89 91 96 97 99 100 101 102 103 104 105 106 107 110 111 112 113 115 116 117 118 119 120 122 124 126 127 128 130 131 132 133 135 139 140 142 143 145 148 150 151 153 156 158 159 160 161 162 163 167 168 169 170 175 177 178 180 181 184 185 186 187 189 190 194 195 196 198 201 202 203 206 207 208 209 211 212 213 216 220 221 22601 224 0 1 6 12 15 16 23 24 27 29 38 40 43 46 64 67 68 76 80 81 86 88 89 91 96 99 100 101 110 115 116 118 120 124 127 128 130 132 133 139 140 148 150 151 153 158 159 167 169 170 175 178 181 184 185 186 187 190 196 202 203 206 209 211 216 220 22602 224 0 1 e 22603 224 0 1 e 22604 224 0 1 e 22605 224 0 1 e 22606 224 0 1 e 22607 224 0 1 e 22608 224 0 1 f 22609 224 0 1 e 22610 224 0 1 f 22611 224 0 1 f 22612 224 0 1 f 22613 224 0 1 1 3 5 8 9 10 12 14 18 19 20 23 24 25 29 30 32 35 36 37 39 40 41 42 45 46 47 49 50 56 58 61 62 63 64 66 67 70 71 73 75 76 78 79 83 84 86 87 88 89 90 93 96 103 104 105 107 110 111 112 113 122 123 124 125 127 129 131 132 135 137 138 143 145 147 149 152 155 158 164 165 167 168 169 171 173 174 175 178 179 184 187 188 193 197 200 201 207 208 210 211 212 213 220 221 222 22614 224 0 1 0 4 5 7 9 10 11 12 14 15 17 18 20 21 22 26 31 32 33 35 36 37 44 48 49 51 52 54 57 58 59 62 63 65 66 67 68 72 74 76 77 78 79 80 83 87 90 95 98 101 106 110 112 116 117 120 121 122 127 129 131 132 133 136 137 138 141 145 149 152 154 159 162 166 171 173 174 176 178 182 183 185 187 188 190 192 193 200 201 203 204 207 208 210 211 213 214 215 218 220 221 222 223 22615 224 0 1 e 22616 224 0 1 0 2 6 9 13 15 16 18 20 21 26 27 29 30 32 33 34 38 39 41 43 44 46 47 48 49 51 52 53 55 58 59 60 61 63 65 67 71 73 74 75 78 79 81 82 83 84 85 86 87 89 90 92 93 96 97 98 100 108 109 111 112 114 115 117 118 120 122 123 125 126 128 129 130 131 134 135 136 141 144 146 149 150 155 162 163 164 165 169 170 174 176 177 178 182 183 184 189 190 191 192 193 195 196 197 199 200 204 206 207 208 212 215 217 219 222 22617 224 0 1 0 2 6 9 13 15 16 18 20 21 26 27 29 30 32 33 34 38 39 41 43 44 46 47 48 49 51 52 53 55 58 59 60 61 63 65 67 71 73 74 75 78 79 81 82 83 84 85 86 87 89 90 92 93 96 97 98 100 108 109 111 112 114 115 117 118 120 122 123 125 126 128 129 130 131 134 135 136 141 144 146 149 150 155 162 163 164 165 169 170 174 176 177 178 182 183 184 189 190 191 192 193 195 196 197 199 200 204 206 207 208 212 215 217 219 222 22618 224 0 1 0 3 6 7 8 13 18 20 24 25 29 30 34 36 37 40 41 42 44 46 48 49 50 54 57 58 60 61 62 64 65 66 67 72 74 75 77 78 80 81 82 84 90 92 94 95 98 99 100 101 103 107 110 113 117 119 124 125 127 129 130 132 133 134 138 140 141 142 144 147 149 150 153 154 155 156 157 158 160 161 162 163 164 165 167 175 177 178 179 180 181 184 185 187 188 191 192 193 194 195 196 198 199 203 205 206 207 208 209 210 211 213 214 216 218 219 222 22619 224 0 1 3 6 7 24 25 30 36 41 42 49 50 57 61 64 65 67 72 74 80 82 84 94 101 107 117 125 127 129 141 142 144 150 153 154 155 158 160 161 165 177 178 179 180 181 187 194 195 196 199 203 206 207 209 210 214 218 219 22620 224 0 1 e 22621 224 0 1 e 22622 224 0 1 e 22623 224 0 1 e 22624 224 0 1 e 22625 224 0 1 e 22626 224 0 1 f 22627 224 0 1 e 22628 224 0 1 f 22629 224 0 1 f 22630 224 0 1 f 22631 224 0 1 2 4 6 7 8 9 11 13 15 16 17 18 19 20 21 22 23 26 27 31 33 38 43 45 48 50 52 53 61 63 64 68 70 71 72 73 74 76 82 86 87 88 95 96 99 100 101 102 104 106 107 108 112 114 116 117 118 122 124 125 127 129 132 134 135 136 140 141 142 144 146 147 149 152 153 154 155 156 161 162 163 166 167 168 171 172 175 176 177 178 179 180 181 183 184 187 188 189 192 196 197 199 201 204 205 207 208 209 210 212 215 216 217 218 219 220 222 223 22632 224 0 1 0 2 8 9 10 11 13 14 16 18 19 20 21 22 24 25 34 35 37 40 41 44 47 48 50 53 54 55 56 61 62 63 64 66 69 70 72 75 76 77 78 81 82 84 85 87 89 91 92 94 95 96 104 105 108 110 113 114 116 121 122 123 125 126 127 129 131 133 135 136 137 139 142 143 145 148 149 150 152 153 155 157 158 159 160 164 165 167 169 171 175 177 181 184 185 188 190 191 194 199 200 201 205 206 208 210 215 216 217 219 220 22633 224 0 1 e 22634 224 0 1 0 2 3 4 6 7 8 10 13 14 15 20 21 23 25 28 29 30 31 33 34 38 40 41 43 44 46 48 50 52 56 57 58 59 60 61 62 64 68 71 73 74 77 78 79 80 83 84 85 87 90 96 97 98 99 102 103 112 113 116 117 121 123 125 128 129 136 137 138 139 143 149 152 153 156 158 159 163 165 168 172 176 177 181 182 184 185 187 190 191 194 195 197 202 203 204 205 207 208 209 212 213 215 216 217 218 221 223 22635 224 0 1 0 2 3 4 6 7 8 10 13 14 15 20 21 23 25 28 29 30 31 33 34 38 40 41 43 44 46 48 50 52 56 57 58 59 60 61 62 64 68 71 73 74 77 78 79 80 83 84 85 87 90 96 97 98 99 102 103 112 113 116 117 121 123 125 128 129 136 137 138 139 143 149 152 153 156 158 159 163 165 168 172 176 177 181 182 184 185 187 190 191 194 195 197 202 203 204 205 207 208 209 212 213 215 216 217 218 221 223 22636 224 0 1 2 3 5 9 12 13 15 17 18 20 22 23 25 27 29 31 32 37 38 39 40 43 44 45 50 52 53 54 59 60 61 62 63 64 68 69 70 71 76 77 78 82 85 86 87 88 90 91 92 94 95 96 99 105 106 108 110 112 113 114 117 118 121 127 128 130 131 132 138 140 141 142 143 145 146 147 148 149 151 152 153 155 158 160 161 163 164 165 166 168 169 171 175 176 178 179 182 185 187 192 195 200 201 202 204 207 208 210 212 214 217 219 221 22637 224 0 1 9 13 17 18 22 23 27 37 39 43 44 50 53 54 62 63 64 68 77 78 82 85 86 87 88 92 94 99 106 112 113 114 117 118 127 128 130 131 132 141 143 153 155 158 168 169 171 178 182 185 187 195 200 201 202 207 208 212 219 221 22638 224 0 1 e 22639 224 0 1 e 22640 224 0 1 e 22641 224 0 1 e 22642 224 0 1 e 22643 224 0 1 e 22644 224 0 1 f 22645 224 0 1 e 22646 224 0 1 f 22647 224 0 1 f 22648 224 0 1 f 22649 224 0 1 0 1 3 5 7 12 13 14 15 20 21 24 25 28 30 31 34 35 41 42 47 48 51 53 58 60 61 66 70 71 73 75 79 80 81 82 85 86 87 93 94 97 98 99 101 102 104 105 107 109 110 113 114 115 116 117 118 122 126 127 129 132 134 135 138 139 140 141 148 152 154 156 157 159 160 161 163 164 168 170 171 172 177 178 182 186 189 191 192 193 194 195 198 199 201 202 205 206 207 208 209 211 212 213 217 218 219 220 221 222 223 22650 224 0 1 0 3 4 6 9 10 11 12 13 17 20 21 22 24 25 26 27 28 29 33 35 39 41 42 43 44 48 49 50 51 52 53 54 57 60 61 62 63 64 66 68 71 73 74 75 81 82 84 85 86 88 89 91 92 94 97 98 100 101 104 108 121 123 125 127 128 130 131 134 140 141 145 147 149 152 153 156 157 158 161 166 167 170 175 177 178 179 180 183 184 185 187 188 191 196 203 204 205 208 210 211 214 216 219 222 223 22651 224 0 1 e 22652 224 0 1 0 3 6 7 8 10 14 17 19 20 23 24 25 26 30 32 34 36 37 41 42 43 45 47 49 50 56 60 64 66 69 70 71 72 73 74 76 78 81 82 83 84 87 89 93 94 95 99 102 105 106 109 111 114 117 119 120 121 123 125 126 127 131 132 136 138 140 142 145 146 147 148 150 155 159 160 161 162 163 174 175 177 178 179 181 183 185 189 192 193 197 199 201 203 206 207 209 210 211 212 215 217 219 220 221 223 22653 224 0 1 0 3 6 7 8 10 14 17 19 20 23 24 25 26 30 32 34 36 37 41 42 43 45 47 49 50 56 60 64 66 69 70 71 72 73 74 76 78 81 82 83 84 87 89 93 94 95 99 102 105 106 109 111 114 117 119 120 121 123 125 126 127 131 132 136 138 140 142 145 146 147 148 150 155 159 160 161 162 163 174 175 177 178 179 181 183 185 189 192 193 197 199 201 203 206 207 209 210 211 212 215 217 219 220 221 223 22654 224 0 1 0 1 3 4 5 6 7 8 9 10 14 17 19 20 21 22 24 26 27 30 31 32 33 34 35 36 37 38 40 42 43 44 45 49 54 56 57 58 59 60 61 62 63 64 65 66 68 70 72 73 75 77 79 80 84 88 91 94 95 97 102 107 110 111 112 115 117 121 127 129 130 133 134 135 136 137 147 153 154 159 163 164 165 166 167 168 174 175 176 178 180 182 183 185 187 189 190 191 192 193 194 195 196 198 199 200 204 207 208 210 212 213 217 219 220 221 223 22655 224 0 1 0 3 4 5 6 8 10 19 21 24 33 35 36 40 43 45 49 57 58 59 60 65 70 72 77 79 80 84 88 91 95 107 110 111 117 121 127 129 133 137 153 154 164 166 176 178 187 189 192 194 198 199 204 207 208 210 212 217 219 221 22656 224 1 0 e 22657 224 1 0 e 22658 224 1 0 e 22659 224 1 0 e 22660 224 1 0 e 22661 224 1 0 e 22662 224 1 0 f 22663 224 1 0 e 22664 224 1 0 f 22665 224 1 0 f 22666 224 1 0 f 22667 224 1 0 1 5 7 9 11 13 14 15 17 18 21 24 25 27 28 29 32 33 34 36 39 42 43 45 47 48 51 53 56 57 58 59 60 62 63 65 67 68 69 70 73 74 75 76 78 79 80 82 83 84 87 92 95 97 98 101 103 104 107 108 110 111 114 116 117 119 121 123 126 129 130 131 132 135 136 137 138 139 141 143 147 150 156 158 159 161 162 164 167 173 180 182 184 186 188 189 194 199 200 201 204 206 207 208 211 212 216 217 218 219 220 22668 224 1 0 0 2 4 5 6 7 8 12 13 15 17 18 19 21 24 27 28 29 30 31 33 34 36 37 41 42 43 44 46 47 50 51 56 57 59 60 62 64 65 66 67 68 71 74 75 76 77 78 81 83 85 88 91 92 95 96 99 100 101 102 103 104 105 106 107 109 110 111 112 116 117 118 119 123 124 125 126 127 128 131 132 134 135 136 137 138 140 141 143 144 145 147 150 151 152 154 156 159 160 161 162 163 164 166 167 171 173 174 177 179 181 182 183 188 189 191 193 199 200 201 202 203 204 211 213 214 215 218 220 22669 224 1 0 e 22670 224 1 0 1 2 3 4 7 10 12 13 17 18 19 20 21 22 24 25 26 27 28 29 32 34 35 36 40 42 46 47 48 49 50 51 54 57 60 61 68 69 70 71 72 73 76 77 78 79 80 81 82 85 86 90 94 95 96 97 99 100 103 104 105 106 107 108 109 110 112 113 114 115 119 120 123 125 126 128 129 130 131 139 144 148 149 152 153 156 158 159 161 165 166 169 171 173 178 179 184 185 186 187 193 194 196 197 198 200 203 205 207 209 210 214 218 220 222 22671 224 1 0 1 2 3 4 7 10 12 13 17 18 19 20 21 22 24 25 26 27 28 29 32 34 35 36 40 42 46 47 48 49 50 51 54 57 60 61 68 69 70 71 72 73 76 77 78 79 80 81 82 85 86 90 94 95 96 97 99 100 103 104 105 106 107 108 109 110 112 113 114 115 119 120 123 125 126 128 129 130 131 139 144 148 149 152 153 156 158 159 161 165 166 169 171 173 178 179 184 185 186 187 193 194 196 197 198 200 203 205 207 209 210 214 218 220 222 22672 224 1 0 1 2 4 5 6 11 13 16 18 19 21 23 28 34 35 36 37 41 42 44 46 48 49 52 53 54 55 56 59 61 62 63 64 65 66 67 71 75 76 81 82 83 84 85 86 87 88 92 95 97 98 99 105 108 109 110 112 115 121 122 125 127 128 132 133 134 136 139 142 144 146 147 151 153 155 156 157 158 159 165 167 169 170 173 174 175 176 177 178 183 185 186 188 192 194 195 198 199 201 205 208 210 211 212 214 215 220 222 223 22673 224 1 0 1 2 4 5 11 16 21 34 35 36 37 41 44 53 54 55 59 61 62 64 65 75 76 81 84 85 88 92 98 105 115 122 125 127 139 144 147 155 158 167 170 173 175 177 183 185 186 188 199 201 223 22674 224 1 0 e 22675 224 1 0 e 22676 224 1 0 e 22677 224 1 0 e 22678 224 1 0 e 22679 224 1 0 e 22680 224 1 0 f 22681 224 1 0 e 22682 224 1 0 f 22683 224 1 0 f 22684 224 1 0 f 22685 224 1 0 0 2 3 8 9 10 11 12 13 15 17 18 19 21 22 23 25 26 29 30 33 35 37 38 39 40 41 42 43 44 45 46 48 55 57 59 60 61 64 66 67 69 70 71 72 73 74 75 76 78 79 80 82 87 89 92 93 107 108 110 111 113 115 116 117 118 124 125 126 130 131 132 135 137 138 140 141 142 148 150 154 158 159 160 162 164 168 171 175 176 177 179 181 183 185 189 193 194 200 201 203 205 206 208 209 210 211 212 214 217 218 219 220 221 222 22686 224 1 0 0 1 2 4 7 9 10 11 14 17 21 22 24 27 32 34 35 38 39 40 44 46 49 50 51 52 53 55 58 59 60 63 64 65 66 70 72 74 75 76 88 91 92 95 98 99 100 101 102 103 105 106 110 111 112 115 116 117 119 121 125 126 127 129 131 132 134 138 140 141 147 149 150 152 154 155 157 158 160 163 164 167 168 173 174 182 185 187 189 193 194 195 196 198 199 203 208 209 210 212 213 216 217 220 223 22687 224 1 0 e 22688 224 1 0 2 4 5 6 10 11 16 19 21 23 24 25 29 34 35 37 39 40 42 45 46 53 55 56 57 59 61 63 66 67 68 69 70 71 73 75 76 79 81 83 84 85 86 88 93 94 95 97 98 100 101 103 105 106 108 109 112 113 116 117 118 122 125 127 129 130 132 136 137 139 140 141 143 145 148 150 151 152 157 158 159 160 161 162 166 172 173 174 178 184 185 190 193 194 195 198 200 202 203 204 205 208 209 210 213 214 216 218 220 221 22689 224 1 0 2 4 5 6 10 11 16 19 21 23 24 25 29 34 35 37 39 40 42 45 46 53 55 56 57 59 61 63 66 67 68 69 70 71 73 75 76 79 81 83 84 85 86 88 93 94 95 97 98 100 101 103 105 106 108 109 112 113 116 117 118 122 125 127 129 130 132 136 137 139 140 141 143 145 148 150 151 152 157 158 159 160 161 162 166 172 173 174 178 184 185 190 193 194 195 198 200 202 203 204 205 208 209 210 213 214 216 218 220 221 22690 224 1 0 0 2 3 4 5 12 14 15 19 28 29 31 34 35 39 41 42 45 47 49 50 51 54 55 58 63 64 65 66 71 72 76 77 78 80 81 82 83 84 85 86 89 90 91 94 98 100 101 103 106 109 111 112 114 115 117 119 122 123 125 126 127 129 131 132 134 135 136 137 140 141 147 148 150 152 153 158 159 160 162 163 164 166 167 169 170 171 172 175 177 178 182 183 187 196 197 198 199 200 201 202 203 206 207 212 217 218 219 220 22691 224 1 0 0 2 4 5 12 14 19 34 35 39 41 42 47 49 50 51 55 58 64 72 76 77 78 80 81 82 83 86 89 94 98 100 111 115 119 122 125 127 129 134 135 140 147 148 150 153 158 162 163 164 170 172 175 178 182 183 187 196 198 199 200 201 203 206 217 218 22692 224 1 0 e 22693 224 1 0 e 22694 224 1 0 e 22695 224 1 0 e 22696 224 1 0 e 22697 224 1 0 e 22698 224 1 0 f 22699 224 1 0 e 22700 224 1 0 f 22701 224 1 0 f 22702 224 1 0 f 22703 224 1 0 0 2 4 5 7 8 10 12 17 19 21 22 25 28 30 31 32 33 35 37 38 42 44 49 50 51 52 53 54 55 56 59 60 62 63 64 65 66 68 69 70 71 73 76 77 82 85 90 92 93 95 96 104 105 106 107 111 112 119 120 123 125 127 129 132 133 134 135 136 137 138 140 143 146 147 148 151 152 153 154 159 160 161 163 164 166 168 169 170 171 173 174 175 177 181 184 189 190 198 203 207 208 209 212 213 215 217 218 219 220 221 22704 224 1 0 1 3 7 8 9 12 13 15 16 17 19 20 21 22 23 24 25 26 28 29 30 31 32 34 35 37 38 40 43 45 46 49 52 53 56 57 58 60 61 63 64 66 70 71 72 74 75 76 82 85 86 88 89 90 91 94 98 99 100 101 102 103 104 106 107 108 109 114 115 121 123 125 127 132 135 136 137 138 139 140 144 145 147 149 151 152 155 157 158 159 160 163 165 166 168 169 170 171 177 179 184 185 188 189 191 193 194 195 196 197 198 200 201 209 211 213 214 216 218 22705 224 1 0 e 22706 224 1 0 1 3 4 9 10 14 16 20 23 27 31 34 36 38 39 40 44 46 47 48 49 50 51 55 56 57 61 62 63 65 66 67 68 69 70 71 75 76 77 78 79 80 81 85 86 87 88 91 94 96 97 99 102 103 104 106 107 110 119 120 121 122 124 125 126 127 130 131 132 133 134 135 138 140 142 144 146 147 148 150 151 152 153 154 155 156 157 158 160 161 163 164 165 170 172 174 176 180 183 186 188 189 191 192 193 194 195 196 198 201 202 206 207 208 211 212 213 216 219 220 221 222 223 22707 224 1 0 1 3 4 9 10 14 16 20 23 27 31 34 36 38 39 40 44 46 47 48 49 50 51 55 56 57 61 62 63 65 66 67 68 69 70 71 75 76 77 78 79 80 81 85 86 87 88 91 94 96 97 99 102 103 104 106 107 110 119 120 121 122 124 125 126 127 130 131 132 133 134 135 138 140 142 144 146 147 148 150 151 152 153 154 155 156 157 158 160 161 163 164 165 170 172 174 176 180 183 186 188 189 191 192 193 194 195 196 198 201 202 206 207 208 211 212 213 216 219 220 221 222 223 22708 224 1 0 0 1 4 6 10 12 15 16 17 18 20 22 23 26 29 31 33 38 40 41 42 43 46 47 52 54 57 58 59 61 62 63 64 67 74 76 77 81 82 83 85 87 89 91 92 94 95 98 99 100 104 106 107 108 113 116 121 124 128 129 131 133 134 135 136 137 138 139 140 141 144 146 147 148 149 150 152 154 155 161 162 165 168 171 173 174 177 178 180 181 182 185 187 188 190 193 194 195 196 199 201 203 206 207 209 210 211 212 213 217 218 221 222 22709 224 1 0 0 4 6 10 12 15 16 18 23 29 42 43 46 54 57 74 77 82 85 87 91 92 104 107 113 116 129 131 134 137 139 140 148 149 150 162 173 174 178 180 181 185 188 193 194 195 199 203 206 207 209 210 221 22710 224 1 0 e 22711 224 1 0 e 22712 224 1 0 e 22713 224 1 0 e 22714 224 1 0 e 22715 224 1 0 e 22716 224 1 0 f 22717 224 1 0 e 22718 224 1 0 f 22719 224 1 0 f 22720 224 1 0 f 22721 224 1 0 0 1 2 4 5 10 12 13 14 15 16 17 18 19 21 22 23 26 28 31 34 35 39 40 47 49 50 51 52 53 58 62 63 64 65 66 67 69 70 71 73 77 80 83 85 87 88 90 92 93 96 97 100 105 106 110 112 114 116 118 119 121 124 125 126 127 128 131 134 135 137 139 140 142 143 145 146 149 151 152 153 154 155 156 157 158 160 164 167 168 170 171 172 173 174 176 177 178 179 180 182 183 185 186 187 189 192 193 194 195 196 198 199 200 202 205 206 207 210 212 213 214 215 217 218 219 22722 224 1 0 4 5 10 11 12 13 14 17 18 19 21 22 23 25 26 27 31 32 33 34 35 36 42 44 45 46 49 51 54 55 57 58 59 67 68 72 74 75 76 77 78 83 86 87 89 91 93 95 97 98 101 103 106 108 109 110 112 116 121 123 124 125 126 131 133 134 135 138 141 142 144 146 147 148 149 150 152 156 157 158 163 165 166 169 170 171 174 176 177 180 182 185 186 188 189 190 192 198 199 200 204 206 207 211 213 215 216 219 22723 224 1 0 e 22724 224 1 0 0 1 3 6 8 10 11 12 13 15 16 17 18 20 23 24 25 26 33 37 38 39 42 43 46 48 49 50 51 58 59 62 63 69 75 78 81 83 84 85 88 90 93 95 101 102 103 104 106 108 109 110 116 117 118 119 121 123 124 125 127 129 131 134 136 138 139 141 143 145 148 149 152 153 154 159 161 163 168 171 173 174 176 177 178 179 180 181 183 184 188 189 190 191 192 194 196 197 198 206 209 212 214 216 218 220 221 223 22725 224 1 0 0 1 3 6 8 10 11 12 13 15 16 17 18 20 23 24 25 26 33 37 38 39 42 43 46 48 49 50 51 58 59 62 63 69 75 78 81 83 84 85 88 90 93 95 101 102 103 104 106 108 109 110 116 117 118 119 121 123 124 125 127 129 131 134 136 138 139 141 143 145 148 149 152 153 154 159 161 163 168 171 173 174 176 177 178 179 180 181 183 184 188 189 190 191 192 194 196 197 198 206 209 212 214 216 218 220 221 223 22726 224 1 0 2 3 5 8 9 10 13 16 17 18 21 22 23 24 25 27 29 30 31 33 34 38 41 42 44 46 47 48 49 56 57 60 63 64 65 70 73 74 76 77 79 80 84 86 87 91 94 98 99 100 101 104 106 107 110 111 112 113 117 119 122 123 124 125 134 135 136 137 138 139 140 142 143 147 150 152 155 160 161 162 163 166 167 169 170 173 174 175 178 180 182 183 184 186 188 190 192 196 208 209 210 213 217 218 219 22727 224 1 0 3 5 8 9 17 21 23 24 27 31 33 34 38 41 42 46 47 56 57 63 64 65 70 73 74 77 84 91 94 100 104 106 110 111 117 123 124 136 166 167 174 175 182 183 186 190 192 196 208 209 213 217 218 219 22728 224 1 1 e 22729 224 1 1 e 22730 224 1 1 e 22731 224 1 1 e 22732 224 1 1 e 22733 224 1 1 e 22734 224 1 1 f 22735 224 1 1 e 22736 224 1 1 f 22737 224 1 1 f 22738 224 1 1 f 22739 224 1 1 1 2 6 7 10 11 12 14 15 17 20 21 22 26 28 30 33 34 35 37 44 46 47 51 56 58 59 60 61 62 64 65 66 67 71 72 73 74 75 77 78 83 84 85 88 89 91 92 94 96 97 101 104 109 110 111 115 116 117 119 120 121 122 124 125 126 127 128 133 134 136 137 138 140 142 144 147 149 150 151 159 160 161 164 165 166 167 168 169 170 171 173 175 178 179 182 183 184 188 189 191 192 200 205 207 209 218 221 222 223 22740 224 1 1 3 5 8 9 10 12 13 14 15 16 20 21 22 25 28 32 33 36 37 38 39 40 42 45 49 50 52 53 55 56 57 61 62 64 65 67 68 72 74 78 79 81 84 85 88 89 90 92 93 95 96 97 101 102 103 105 107 109 110 111 112 116 118 119 121 122 123 124 126 130 131 133 134 135 136 137 138 140 141 143 144 145 147 150 153 155 159 163 170 172 174 175 178 181 182 183 186 187 188 192 193 194 198 200 201 202 203 205 206 208 209 210 213 215 217 218 223 22741 224 1 1 e 22742 224 1 1 4 5 6 7 8 9 11 16 18 23 29 31 33 36 38 40 44 45 46 47 49 51 53 54 56 58 60 67 68 71 72 73 75 76 81 86 88 89 90 91 94 95 96 98 100 103 106 108 110 111 112 116 118 121 123 126 127 128 131 132 133 134 135 139 140 141 142 143 147 148 153 156 159 160 161 164 167 168 169 170 172 173 175 178 180 182 183 188 189 190 192 194 195 196 198 201 202 203 204 206 208 209 210 213 215 217 218 219 220 221 223 22743 224 1 1 4 5 6 7 8 9 11 16 18 23 29 31 33 36 38 40 44 45 46 47 49 51 53 54 56 58 60 67 68 71 72 73 75 76 81 86 88 89 90 91 94 95 96 98 100 103 106 108 110 111 112 116 118 121 123 126 127 128 131 132 133 134 135 139 140 141 142 143 147 148 153 156 159 160 161 164 167 168 169 170 172 173 175 178 180 182 183 188 189 190 192 194 195 196 198 201 202 203 204 206 208 209 210 213 215 217 218 219 220 221 223 22744 224 1 1 2 4 6 9 11 12 15 17 19 20 21 23 24 26 27 30 31 32 35 36 37 40 43 44 47 49 50 56 58 60 61 63 66 69 73 74 79 81 82 83 86 87 89 92 94 95 96 97 100 101 102 105 107 109 112 115 116 118 123 124 126 127 131 132 133 136 137 139 141 145 147 148 153 158 165 166 167 170 171 172 180 185 188 190 192 194 195 197 198 199 201 202 205 207 209 210 217 218 221 222 22745 224 1 1 4 11 15 19 20 27 31 32 35 36 37 44 50 60 63 74 83 87 92 95 97 100 107 112 116 131 139 145 147 158 165 172 188 192 194 195 197 199 202 205 210 217 222 22746 224 1 1 e 22747 224 1 1 e 22748 224 1 1 e 22749 224 1 1 e 22750 224 1 1 e 22751 224 1 1 e 22752 224 1 1 f 22753 224 1 1 e 22754 224 1 1 f 22755 224 1 1 f 22756 224 1 1 f 22757 224 1 1 2 5 6 9 10 11 12 13 14 15 16 18 20 21 23 26 27 28 29 35 38 39 40 41 43 44 50 52 56 57 60 62 64 67 70 75 77 79 80 83 85 88 90 91 92 95 96 98 100 102 103 104 105 106 108 111 112 113 114 117 122 124 128 129 130 140 141 142 143 145 146 147 148 152 154 157 158 160 161 162 166 167 168 170 171 172 173 176 180 181 182 183 184 190 192 194 196 197 198 200 201 203 204 205 207 209 212 213 214 215 219 221 22758 224 1 1 2 5 6 8 9 11 12 13 15 16 17 20 27 29 31 36 37 38 39 40 41 43 44 45 46 48 49 50 54 55 56 57 58 60 63 73 75 76 77 80 82 84 85 86 88 89 90 92 93 97 98 99 104 105 107 108 109 111 114 116 117 118 119 120 123 125 127 128 130 131 137 139 140 142 144 145 146 147 148 152 153 160 164 165 166 168 169 171 173 176 177 178 182 186 187 188 190 192 194 195 196 199 203 205 208 210 212 213 214 215 216 217 218 219 221 22759 224 1 1 e 22760 224 1 1 0 1 3 6 7 8 10 12 14 15 18 21 25 26 27 28 30 31 34 35 36 38 39 40 41 43 44 45 50 51 53 54 55 56 57 59 64 68 69 72 75 77 79 81 82 84 85 87 88 89 90 91 95 97 100 101 102 105 107 108 110 111 117 119 122 123 126 127 131 132 133 136 137 138 139 141 142 143 148 149 152 156 157 161 164 165 167 171 177 178 182 184 186 187 194 195 198 199 200 203 205 207 208 212 214 215 216 217 218 219 22761 224 1 1 0 1 3 6 7 8 10 12 14 15 18 21 25 26 27 28 30 31 34 35 36 38 39 40 41 43 44 45 50 51 53 54 55 56 57 59 64 68 69 72 75 77 79 81 82 84 85 87 88 89 90 91 95 97 100 101 102 105 107 108 110 111 117 119 122 123 126 127 131 132 133 136 137 138 139 141 142 143 148 149 152 156 157 161 164 165 167 171 177 178 182 184 186 187 194 195 198 199 200 203 205 207 208 212 214 215 216 217 218 219 22762 224 1 1 0 3 6 11 13 14 15 20 21 23 24 26 27 33 35 37 39 42 45 49 50 52 53 54 57 59 60 61 62 64 69 70 73 74 78 79 81 82 83 84 85 87 88 89 90 91 92 93 95 96 97 102 103 104 105 112 115 117 118 119 120 122 123 125 126 128 134 136 138 142 147 149 150 155 158 163 164 167 168 170 172 173 174 176 177 178 180 181 185 187 188 190 192 196 197 199 202 204 205 207 208 211 213 220 222 22763 224 1 1 0 3 13 15 21 23 33 42 49 52 54 59 60 69 70 73 74 78 81 85 87 90 91 92 93 97 102 104 105 112 118 120 123 125 126 128 134 138 142 147 150 155 158 164 170 172 174 176 180 187 190 192 196 202 207 208 213 222 22764 224 1 1 e 22765 224 1 1 e 22766 224 1 1 e 22767 224 1 1 e 22768 224 1 1 e 22769 224 1 1 e 22770 224 1 1 f 22771 224 1 1 e 22772 224 1 1 f 22773 224 1 1 f 22774 224 1 1 f 22775 224 1 1 2 5 8 9 10 11 15 17 19 20 21 22 24 25 26 27 28 30 32 33 36 37 40 44 45 48 49 54 57 59 63 65 67 68 69 73 74 76 77 78 80 82 84 85 87 88 89 90 91 92 94 96 99 100 101 104 105 108 110 111 113 114 116 119 122 125 128 129 131 137 138 140 141 144 146 147 148 149 151 155 156 157 159 162 163 164 168 169 170 171 172 181 184 187 190 191 192 193 194 195 197 200 203 204 205 208 213 214 217 22776 224 1 1 1 4 5 6 7 9 10 12 13 15 17 18 19 20 21 22 23 24 29 30 31 32 35 37 38 39 40 42 43 47 50 53 55 56 57 61 66 69 75 76 77 78 85 89 90 91 92 93 95 99 100 101 104 105 106 107 109 110 111 117 118 119 122 125 127 129 130 139 144 145 146 147 149 150 151 155 158 159 161 162 163 168 172 173 174 177 179 182 183 184 188 190 191 192 193 194 197 198 201 202 204 206 211 217 22777 224 1 1 e 22778 224 1 1 1 3 4 10 11 12 15 16 18 20 25 29 30 31 32 34 35 39 40 41 42 45 53 55 56 57 60 61 67 68 71 75 77 79 80 81 82 84 87 93 94 95 97 101 102 103 106 108 111 112 115 116 117 121 123 127 129 130 131 132 133 134 137 138 140 141 143 145 146 147 151 152 153 156 157 160 162 163 165 169 170 172 173 176 182 186 195 197 199 200 201 203 204 205 206 207 208 210 212 213 214 215 217 219 221 223 22779 224 1 1 1 3 4 10 11 12 15 16 18 20 25 29 30 31 32 34 35 39 40 41 42 45 53 55 56 57 60 61 67 68 71 75 77 79 80 81 82 84 87 93 94 95 97 101 102 103 106 108 111 112 115 116 117 121 123 127 129 130 131 132 133 134 137 138 140 141 143 145 146 147 151 152 153 156 157 160 162 163 165 169 170 172 173 176 182 186 195 197 199 200 201 203 204 205 206 207 208 210 212 213 214 215 217 219 221 223 22780 224 1 1 1 4 5 8 11 18 21 23 24 26 27 30 34 36 38 39 40 41 43 45 47 49 50 51 52 54 56 57 59 63 68 69 72 73 76 77 78 80 81 86 87 90 91 92 94 96 97 98 99 100 101 103 104 105 110 113 114 117 123 124 125 127 128 129 130 131 132 133 134 135 136 141 143 144 148 149 150 153 156 159 161 162 164 165 167 170 171 176 177 178 179 182 183 186 188 194 197 198 199 201 203 205 208 210 212 213 214 217 218 219 22781 224 1 1 1 4 5 8 23 26 27 36 40 41 49 54 57 59 63 73 77 80 81 87 91 92 98 101 103 104 105 117 123 124 125 130 131 136 141 148 149 150 159 161 164 165 167 186 188 194 197 198 199 203 208 213 22782 224 1 1 e 22783 224 1 1 e 22784 224 1 1 e 22785 224 1 1 e 22786 224 1 1 e 22787 224 1 1 e 22788 224 1 1 f 22789 224 1 1 e 22790 224 1 1 f 22791 224 1 1 f 22792 224 1 1 f 22793 224 1 1 3 5 7 8 9 10 14 16 17 19 20 22 29 33 41 42 43 47 49 50 53 54 55 57 59 60 61 66 67 68 69 72 73 77 79 80 83 86 87 89 92 93 102 107 109 110 111 112 114 116 117 118 119 120 125 126 128 129 130 135 136 137 138 139 140 141 142 143 145 146 148 149 154 155 157 160 161 165 168 171 175 178 179 183 184 186 187 189 191 192 193 196 198 199 200 201 203 205 206 209 211 212 213 214 215 217 218 219 220 221 222 223 22794 224 1 1 0 1 5 8 9 12 13 14 16 19 23 24 27 31 33 35 36 37 38 39 42 45 47 48 49 50 52 54 55 58 59 60 62 63 64 66 67 68 69 72 74 80 81 83 86 87 88 89 91 92 94 95 98 102 104 105 107 108 109 111 112 113 114 115 117 118 120 122 123 125 126 127 132 134 140 141 143 146 147 150 151 152 153 154 156 159 160 161 163 169 170 173 175 177 178 181 184 188 189 191 193 195 197 199 201 203 204 206 209 210 211 217 218 222 223 22795 224 1 1 e 22796 224 1 1 2 5 7 8 10 11 12 13 17 19 21 23 25 26 27 29 30 33 34 35 36 39 40 42 43 44 45 48 49 53 54 55 56 57 58 59 60 61 64 68 69 72 73 75 76 79 81 83 84 86 89 92 93 94 97 98 100 102 103 105 106 111 115 116 119 120 121 123 124 125 128 130 131 135 138 139 142 143 144 146 153 156 158 159 160 164 165 166 169 171 175 179 181 183 184 185 186 189 191 193 196 198 199 202 207 209 210 211 212 214 215 217 223 22797 224 1 1 2 5 7 8 10 11 12 13 17 19 21 23 25 26 27 29 30 33 34 35 36 39 40 42 43 44 45 48 49 53 54 55 56 57 58 59 60 61 64 68 69 72 73 75 76 79 81 83 84 86 89 92 93 94 97 98 100 102 103 105 106 111 115 116 119 120 121 123 124 125 128 130 131 135 138 139 142 143 144 146 153 156 158 159 160 164 165 166 169 171 175 179 181 183 184 185 186 189 191 193 196 198 199 202 207 209 210 211 212 214 215 217 223 22798 224 1 1 1 2 3 4 5 6 8 9 10 12 20 22 24 26 28 31 32 34 35 36 37 39 40 41 43 45 49 50 52 53 54 55 56 59 60 61 62 63 64 65 66 67 68 69 70 72 78 79 88 89 90 93 97 100 102 103 104 105 109 111 113 114 115 118 119 120 121 124 125 126 128 131 132 134 135 137 139 140 141 144 148 151 153 155 160 161 162 163 164 165 166 168 170 171 176 179 180 181 183 185 186 187 188 191 192 195 196 199 203 204 205 206 207 211 213 214 215 216 217 218 219 221 22799 224 1 1 1 6 8 20 22 28 31 32 35 36 40 43 49 50 53 55 56 61 63 64 65 66 67 68 69 72 88 90 100 102 103 111 113 114 120 125 128 131 132 134 137 140 141 148 151 160 163 166 168 170 171 183 185 187 195 196 199 204 206 213 216 217 22800 247 0 0 e 22801 247 0 0 e 22802 247 0 0 e 22803 247 0 0 e 22804 247 0 0 e 22805 247 0 0 e 22806 247 0 0 f 22807 247 0 0 e 22808 247 0 0 f 22809 247 0 0 f 22810 247 0 0 f 22811 247 0 0 0 1 2 3 7 10 11 12 13 14 16 17 18 19 24 26 28 30 31 32 33 34 39 44 46 47 48 49 50 53 55 60 63 67 68 69 72 73 75 78 80 81 84 85 89 90 94 95 96 100 101 102 103 104 106 109 112 113 114 116 117 118 120 122 123 124 125 126 128 130 131 133 134 136 137 140 141 142 143 144 145 147 148 149 156 158 159 161 162 163 165 166 168 170 171 173 174 176 177 180 181 182 186 188 194 195 197 203 205 207 208 209 211 212 216 219 220 221 222 223 224 225 226 228 229 233 236 237 239 240 241 242 243 22812 247 0 0 2 10 11 13 15 17 19 20 28 32 36 37 40 42 46 47 51 53 55 56 57 58 59 62 64 69 70 73 75 76 78 80 84 85 86 87 89 90 91 93 94 98 102 103 106 108 109 112 113 114 115 117 118 119 120 121 122 125 127 131 132 133 134 135 137 139 141 147 148 150 151 153 154 155 159 160 161 164 167 168 169 170 174 175 176 178 179 180 181 184 186 188 190 191 195 196 197 198 199 201 203 206 208 209 210 211 212 214 215 216 217 218 219 221 222 223 225 226 228 229 230 232 242 244 245 246 22813 247 0 0 e 22814 247 0 0 0 1 2 3 5 6 9 10 11 13 14 15 17 18 19 23 25 26 27 28 29 30 31 32 33 34 36 42 43 45 47 48 52 53 54 57 58 61 62 65 69 75 77 79 81 83 84 88 92 94 98 102 103 104 107 108 109 110 112 115 118 120 122 123 124 125 128 129 130 133 134 135 136 138 139 141 147 148 151 152 155 156 157 158 159 160 161 163 166 168 169 172 173 174 177 178 182 183 186 189 191 193 194 195 196 197 199 200 201 202 203 204 205 207 208 211 214 215 216 217 219 221 222 223 224 225 226 227 228 231 234 239 242 243 244 245 246 22815 247 0 0 0 1 2 3 5 6 9 10 11 13 14 15 17 18 19 23 25 26 27 28 29 30 31 32 33 34 36 42 43 45 47 48 52 53 54 57 58 61 62 65 69 75 77 79 81 83 84 88 92 94 98 102 103 104 107 108 109 110 112 115 118 120 122 123 124 125 128 129 130 133 134 135 136 138 139 141 147 148 151 152 155 156 157 158 159 160 161 163 166 168 169 172 173 174 177 178 182 183 186 189 191 193 194 195 196 197 199 200 201 202 203 204 205 207 208 211 214 215 216 217 219 221 222 223 224 225 226 227 228 231 234 239 242 243 244 245 246 22816 247 0 0 1 11 13 17 21 22 28 32 33 34 40 41 45 46 47 48 53 57 58 60 61 62 63 64 65 67 69 73 74 75 76 77 78 79 81 84 85 86 89 92 96 97 101 103 104 106 107 108 109 110 112 114 115 116 117 118 122 124 126 127 130 131 134 136 137 139 142 145 146 149 150 151 153 157 158 159 161 166 168 169 170 173 174 175 176 177 180 187 191 193 195 197 200 202 206 207 211 215 216 217 221 223 224 226 229 234 236 237 239 240 241 242 22817 247 0 0 1 11 13 17 21 22 28 32 34 41 46 53 57 58 62 64 65 74 76 77 78 79 81 84 85 86 92 97 103 104 108 114 126 127 137 149 150 151 157 161 173 174 187 195 206 207 211 216 223 224 226 229 239 242 22818 247 0 0 e 22819 247 0 0 e 22820 247 0 0 e 22821 247 0 0 e 22822 247 0 0 e 22823 247 0 0 e 22824 247 0 0 f 22825 247 0 0 e 22826 247 0 0 f 22827 247 0 0 f 22828 247 0 0 f 22829 247 0 0 0 1 2 6 7 8 12 14 15 16 17 18 19 23 27 41 42 45 46 49 51 54 56 60 61 64 65 66 70 71 72 74 77 79 80 81 82 83 85 89 92 93 95 96 101 102 105 106 107 108 111 112 114 116 121 123 124 125 126 127 129 131 132 137 141 142 144 145 147 148 149 152 153 155 156 157 158 159 160 162 163 165 167 168 169 170 173 176 177 179 180 181 182 183 186 189 193 195 196 197 199 203 205 208 209 210 211 212 213 214 217 220 221 222 223 224 225 226 227 228 230 232 233 236 237 240 245 246 22830 247 0 0 0 1 5 6 8 9 12 15 20 21 22 24 26 28 29 30 31 34 35 37 39 40 41 43 45 46 48 49 50 51 52 53 55 58 60 61 69 72 73 74 75 76 77 79 80 82 83 87 93 94 95 96 101 104 109 111 113 114 115 118 119 120 124 126 127 128 132 133 135 137 143 147 153 156 159 160 161 162 163 167 169 171 173 175 176 177 181 182 183 184 187 188 189 195 196 197 198 201 202 203 204 207 209 211 212 213 215 217 219 221 223 225 226 229 230 231 232 233 234 239 245 246 22831 247 0 0 e 22832 247 0 0 0 1 3 8 9 13 16 17 23 24 25 27 30 34 36 38 39 41 43 44 45 47 48 50 51 52 54 55 58 59 60 61 66 71 73 77 84 86 88 89 91 94 95 96 97 98 102 103 104 110 112 113 114 117 118 119 121 122 123 125 126 129 131 132 135 136 137 142 143 151 154 155 156 158 164 165 167 169 171 172 173 174 178 179 183 188 190 191 192 195 196 198 205 207 211 213 215 217 219 222 224 227 228 231 232 235 237 238 239 240 245 22833 247 0 0 0 1 3 8 9 13 16 17 23 24 25 27 30 34 36 38 39 41 43 44 45 47 48 50 51 52 54 55 58 59 60 61 66 71 73 77 84 86 88 89 91 94 95 96 97 98 102 103 104 110 112 113 114 117 118 119 121 122 123 125 126 129 131 132 135 136 137 142 143 151 154 155 156 158 164 165 167 169 171 172 173 174 178 179 183 188 190 191 192 195 196 198 205 207 211 213 215 217 219 222 224 227 228 231 232 235 237 238 239 240 245 22834 247 0 0 1 2 7 9 11 13 16 17 18 19 23 25 27 28 34 35 36 38 43 49 50 55 57 58 62 63 64 65 66 67 69 75 76 82 83 84 86 87 89 91 93 94 96 97 99 100 101 105 111 112 114 117 119 120 121 124 126 128 131 132 133 134 136 139 140 141 142 146 147 151 153 155 157 161 162 164 165 167 169 170 171 172 176 178 180 187 189 190 191 192 193 194 195 196 204 205 206 207 209 210 215 216 217 222 225 226 230 231 232 233 236 239 240 245 246 22835 247 0 0 11 13 17 19 27 28 34 35 43 50 55 58 62 63 66 67 69 75 82 86 87 89 93 97 100 105 112 119 133 134 136 139 140 142 147 153 155 167 169 170 172 180 187 189 190 193 204 205 206 215 222 226 230 233 236 245 246 22836 247 0 0 e 22837 247 0 0 e 22838 247 0 0 e 22839 247 0 0 e 22840 247 0 0 e 22841 247 0 0 e 22842 247 0 0 f 22843 247 0 0 e 22844 247 0 0 f 22845 247 0 0 f 22846 247 0 0 f 22847 247 0 0 2 4 8 11 12 15 16 17 19 20 21 26 27 33 34 37 39 41 42 45 46 47 48 50 51 55 56 58 59 61 63 64 69 71 73 74 75 76 77 78 79 82 83 84 86 91 93 94 98 100 101 104 107 109 110 111 113 114 118 119 120 122 125 126 128 129 130 131 132 135 137 138 139 140 141 144 147 148 150 151 155 160 163 165 167 170 172 175 177 178 182 183 184 189 192 193 197 199 200 203 205 206 207 208 211 212 214 215 219 220 221 223 225 227 229 230 235 236 238 239 240 241 242 243 246 22848 247 0 0 0 1 2 3 4 5 7 9 15 21 22 25 26 30 31 33 34 35 36 37 38 39 40 41 47 48 49 50 52 53 54 56 57 65 68 71 76 77 79 80 83 86 88 92 93 94 96 98 99 101 102 103 112 113 114 115 117 121 126 129 130 131 132 133 134 136 137 138 150 151 155 158 159 161 162 163 164 165 167 168 169 170 176 177 178 181 184 185 191 194 195 197 198 199 200 201 205 206 209 210 211 218 219 220 223 224 226 229 235 238 239 240 241 244 245 246 22849 247 0 0 e 22850 247 0 0 2 3 4 7 9 10 11 12 13 14 18 19 20 21 22 24 25 26 28 29 31 32 34 35 36 38 41 44 47 48 50 53 54 56 57 58 60 63 64 66 67 68 69 72 76 77 82 85 86 88 90 91 92 96 99 100 102 103 104 107 109 111 115 117 118 121 122 124 126 127 128 129 131 136 137 143 144 147 151 156 157 158 160 164 165 166 167 171 172 173 174 179 180 181 182 183 184 185 187 188 191 192 195 198 199 200 202 204 206 208 210 213 216 217 218 219 220 222 223 224 227 228 230 234 236 237 238 239 241 243 245 246 22851 247 0 0 2 3 4 7 9 10 11 12 13 14 18 19 20 21 22 24 25 26 28 29 31 32 34 35 36 38 41 44 47 48 50 53 54 56 57 58 60 63 64 66 67 68 69 72 76 77 82 85 86 88 90 91 92 96 99 100 102 103 104 107 109 111 115 117 118 121 122 124 126 127 128 129 131 136 137 143 144 147 151 156 157 158 160 164 165 166 167 171 172 173 174 179 180 181 182 183 184 185 187 188 191 192 195 198 199 200 202 204 206 208 210 213 216 217 218 219 220 222 223 224 227 228 230 234 236 237 238 239 241 243 245 246 22852 247 0 0 2 3 6 8 9 10 11 12 13 14 19 22 23 24 28 29 35 36 37 39 40 41 42 43 44 46 48 51 54 56 58 59 62 63 64 66 69 72 73 74 75 77 81 83 86 87 89 90 91 92 93 95 96 107 109 111 112 115 116 118 121 122 126 128 130 131 132 136 142 143 144 146 147 148 149 150 152 153 158 160 164 166 168 169 170 173 183 185 187 189 190 194 196 198 199 202 203 209 210 211 212 214 217 218 219 220 221 222 225 226 227 230 231 232 233 234 236 238 240 243 244 245 22853 247 0 0 3 6 12 13 19 22 28 29 35 39 40 43 54 56 58 59 62 64 66 72 73 74 75 81 83 87 90 91 92 93 95 107 109 111 112 115 116 122 126 128 146 152 164 173 183 185 187 189 194 202 211 214 218 219 222 227 234 236 238 240 243 244 245 22854 247 0 0 e 22855 247 0 0 e 22856 247 0 0 e 22857 247 0 0 e 22858 247 0 0 e 22859 247 0 0 e 22860 247 0 0 f 22861 247 0 0 e 22862 247 0 0 f 22863 247 0 0 f 22864 247 0 0 f 22865 247 0 0 0 3 4 8 9 10 12 14 16 19 20 21 22 23 24 30 31 34 37 38 40 41 43 44 47 48 49 50 51 53 54 57 58 61 63 64 70 72 74 75 76 78 79 80 81 86 87 93 96 98 100 103 104 106 108 109 111 113 115 116 117 118 121 122 123 124 125 126 127 129 130 134 135 136 137 139 141 143 145 146 148 149 150 152 154 157 159 160 163 164 166 167 168 173 175 176 181 182 183 185 187 188 189 190 192 195 200 201 202 204 206 207 208 213 215 216 217 218 221 222 224 228 229 230 231 232 233 235 241 242 243 244 245 22866 247 0 0 1 3 5 6 7 8 10 13 18 20 21 22 30 31 32 33 34 36 37 38 39 41 43 44 45 49 52 54 56 58 59 62 66 69 72 73 76 78 82 85 86 89 91 93 95 97 99 100 101 104 106 107 108 109 112 114 117 118 120 121 123 124 126 129 132 134 136 137 139 144 146 147 149 152 153 155 157 159 160 162 163 164 165 167 170 171 172 175 176 178 182 183 184 185 186 188 189 190 191 193 194 196 197 204 205 207 209 223 225 228 229 233 234 239 241 244 245 246 22867 247 0 0 e 22868 247 0 0 1 5 6 7 9 12 13 14 17 22 23 24 29 30 31 32 36 37 40 42 45 46 47 49 51 53 54 57 59 60 62 63 64 65 67 68 70 71 72 73 77 79 80 82 86 87 90 92 93 96 97 99 104 105 106 108 109 111 115 116 117 118 121 122 123 124 128 129 132 133 135 141 142 143 146 147 149 152 153 157 158 160 163 164 165 166 170 173 176 177 180 181 182 184 186 187 189 191 193 194 196 198 199 200 203 205 208 209 212 214 217 219 220 221 222 228 231 232 233 234 235 241 242 243 244 245 22869 247 0 0 1 5 6 7 9 12 13 14 17 22 23 24 29 30 31 32 36 37 40 42 45 46 47 49 51 53 54 57 59 60 62 63 64 65 67 68 70 71 72 73 77 79 80 82 86 87 90 92 93 96 97 99 104 105 106 108 109 111 115 116 117 118 121 122 123 124 128 129 132 133 135 141 142 143 146 147 149 152 153 157 158 160 163 164 165 166 170 173 176 177 180 181 182 184 186 187 189 191 193 194 196 198 199 200 203 205 208 209 212 214 217 219 220 221 222 228 231 232 233 234 235 241 242 243 244 245 22870 247 0 0 1 2 4 5 6 7 13 14 18 20 22 26 29 30 31 33 36 39 40 41 47 48 51 52 54 56 57 58 60 61 64 68 69 73 74 75 78 79 80 82 84 85 86 88 90 93 94 95 100 101 102 104 108 112 113 114 115 116 117 121 122 124 125 128 129 130 131 132 135 136 137 139 148 150 153 154 158 161 165 168 170 172 174 178 180 182 186 187 188 189 191 193 195 196 198 199 200 201 203 207 212 213 215 218 220 221 224 228 231 234 236 240 245 22871 247 0 0 7 14 18 20 26 29 36 39 40 41 47 56 60 61 68 73 74 80 84 85 86 90 93 100 108 112 113 114 115 116 117 125 131 132 135 136 150 158 168 178 187 188 193 203 207 212 228 231 234 236 240 22872 247 0 1 e 22873 247 0 1 e 22874 247 0 1 e 22875 247 0 1 e 22876 247 0 1 e 22877 247 0 1 e 22878 247 0 1 f 22879 247 0 1 e 22880 247 0 1 f 22881 247 0 1 f 22882 247 0 1 f 22883 247 0 1 1 2 3 5 6 7 8 9 14 15 19 20 21 22 25 26 27 28 34 37 40 41 43 46 49 52 54 57 59 61 66 67 68 71 73 74 76 78 82 86 87 90 93 94 95 97 98 102 103 104 105 107 111 115 116 118 119 120 127 130 131 133 134 136 137 139 141 142 143 145 146 147 150 151 152 156 160 166 167 170 173 176 177 179 182 184 186 187 188 193 194 195 198 200 201 202 203 209 211 221 222 223 224 226 228 230 231 233 234 235 236 238 242 243 22884 247 0 1 0 2 4 5 6 7 8 10 11 14 18 23 26 28 29 31 36 39 40 42 47 48 52 56 57 59 60 61 62 66 70 72 73 77 82 84 85 87 88 89 90 91 92 93 99 100 102 103 106 110 111 112 115 117 118 120 121 123 124 125 126 127 130 132 133 138 139 142 144 145 146 148 149 150 159 160 161 163 164 165 166 167 168 169 170 174 177 178 181 182 183 185 187 190 191 194 196 197 199 201 203 206 207 208 209 213 215 216 217 223 225 226 228 233 234 235 237 238 240 241 242 244 246 22885 247 0 1 e 22886 247 0 1 0 1 5 7 10 11 22 23 25 28 29 31 32 33 35 36 37 38 39 41 42 45 46 47 50 51 52 53 56 57 58 59 60 62 67 68 70 73 74 75 76 77 79 82 91 95 96 97 98 99 101 102 103 105 106 111 112 113 114 118 120 124 125 126 128 129 135 136 147 148 153 154 156 157 158 159 161 163 165 166 168 170 172 173 174 178 179 183 184 187 188 189 192 193 200 202 205 206 208 209 212 213 215 217 218 220 222 223 224 226 228 230 232 233 234 235 236 237 239 241 244 245 22887 247 0 1 0 1 5 7 10 11 22 23 25 28 29 31 32 33 35 36 37 38 39 41 42 45 46 47 50 51 52 53 56 57 58 59 60 62 67 68 70 73 74 75 76 77 79 82 91 95 96 97 98 99 101 102 103 105 106 111 112 113 114 118 120 124 125 126 128 129 135 136 147 148 153 154 156 157 158 159 161 163 165 166 168 170 172 173 174 178 179 183 184 187 188 189 192 193 200 202 205 206 208 209 212 213 215 217 218 220 222 223 224 226 228 230 232 233 234 235 236 237 239 241 244 245 22888 247 0 1 7 10 11 14 15 17 18 20 22 24 25 26 28 30 31 32 36 37 44 47 49 51 53 56 58 60 61 63 65 66 67 68 71 76 77 79 80 82 86 88 89 90 92 95 98 99 102 103 104 111 112 116 117 118 119 120 124 127 128 130 132 133 138 139 140 142 143 144 145 147 148 150 151 152 153 157 163 165 167 170 172 175 177 178 180 181 183 184 189 193 195 196 197 198 199 204 210 214 215 216 219 220 221 224 225 226 228 229 233 234 238 240 241 242 244 245 22889 247 0 1 14 15 17 18 20 25 28 30 31 32 37 47 49 51 58 65 76 77 86 88 92 95 98 99 120 143 144 148 150 151 152 153 163 167 170 172 175 189 195 196 199 204 215 219 229 233 234 240 244 245 22890 247 0 1 e 22891 247 0 1 e 22892 247 0 1 e 22893 247 0 1 e 22894 247 0 1 e 22895 247 0 1 e 22896 247 0 1 f 22897 247 0 1 e 22898 247 0 1 f 22899 247 0 1 f 22900 247 0 1 f 22901 247 0 1 0 2 4 8 9 10 11 12 19 21 24 25 27 30 32 33 34 35 37 39 40 41 42 43 47 49 50 51 52 56 57 61 63 64 66 67 69 70 72 73 76 77 80 86 90 95 98 99 101 102 104 106 107 108 111 115 116 122 123 126 127 129 130 131 132 133 134 136 137 139 140 142 144 145 147 149 151 153 155 158 159 160 163 172 173 174 175 176 178 182 188 189 191 193 195 197 198 202 208 211 215 216 217 219 220 225 226 228 229 230 231 233 238 239 240 242 244 246 22902 247 0 1 0 4 5 6 8 9 12 15 18 19 22 25 28 29 33 34 37 40 41 42 43 44 48 52 54 58 59 64 66 70 72 73 75 77 81 91 93 97 98 99 101 104 105 109 110 111 112 114 115 119 120 121 122 124 125 126 128 129 132 133 135 136 137 141 142 145 147 149 150 152 155 160 161 162 163 164 168 169 170 172 173 174 175 176 177 178 180 184 185 190 193 194 195 196 199 203 204 206 207 209 210 211 217 218 219 221 222 225 229 231 233 234 237 238 241 243 245 246 22903 247 0 1 e 22904 247 0 1 0 1 2 3 4 6 8 9 10 13 14 15 17 18 23 24 27 28 30 31 32 34 35 36 39 47 51 52 53 55 57 60 63 64 65 66 67 70 71 72 76 77 80 82 83 89 90 93 95 96 98 100 103 104 110 112 113 114 118 122 123 125 126 130 131 132 134 135 136 137 139 141 144 146 147 148 152 154 157 158 161 166 167 170 171 175 177 178 184 186 187 189 192 193 194 197 200 207 211 212 213 221 222 224 225 226 229 230 233 234 235 237 238 239 241 242 243 244 22905 247 0 1 0 1 2 3 4 6 8 9 10 13 14 15 17 18 23 24 27 28 30 31 32 34 35 36 39 47 51 52 53 55 57 60 63 64 65 66 67 70 71 72 76 77 80 82 83 89 90 93 95 96 98 100 103 104 110 112 113 114 118 122 123 125 126 130 131 132 134 135 136 137 139 141 144 146 147 148 152 154 157 158 161 166 167 170 171 175 177 178 184 186 187 189 192 193 194 197 200 207 211 212 213 221 222 224 225 226 229 230 233 234 235 237 238 239 241 242 243 244 22906 247 0 1 0 1 2 5 7 8 10 12 13 14 16 17 18 19 21 29 30 32 33 34 36 39 42 44 45 47 48 50 54 55 56 58 59 61 65 66 70 71 72 73 74 75 76 78 79 80 84 88 92 93 94 96 97 98 99 101 102 104 105 106 107 109 110 114 115 116 117 119 121 124 126 131 134 135 136 137 138 140 143 144 146 154 156 158 159 160 162 165 168 169 170 178 179 180 181 185 186 192 193 194 196 197 198 200 202 204 206 208 210 211 215 219 220 225 226 228 230 231 232 233 235 238 240 241 245 22907 247 0 1 1 5 10 18 29 32 33 36 45 47 48 50 58 59 70 72 73 74 75 76 78 79 84 88 96 97 98 99 101 102 104 105 114 115 116 119 121 126 134 136 138 140 143 146 156 158 160 162 165 179 180 181 185 186 192 193 194 196 198 200 228 230 231 232 238 240 245 22908 247 0 1 e 22909 247 0 1 e 22910 247 0 1 e 22911 247 0 1 e 22912 247 0 1 e 22913 247 0 1 e 22914 247 0 1 f 22915 247 0 1 e 22916 247 0 1 f 22917 247 0 1 f 22918 247 0 1 f 22919 247 0 1 0 2 3 4 10 12 15 17 18 21 22 25 27 28 29 31 33 34 37 38 39 42 44 48 50 52 54 57 60 63 65 67 68 69 70 73 74 76 78 79 81 85 86 87 88 89 91 94 95 97 98 100 101 102 105 106 109 111 112 113 115 116 117 118 119 120 121 127 134 135 137 139 140 141 145 148 150 151 155 156 157 158 159 164 165 168 170 174 175 178 179 180 181 182 183 185 186 188 191 192 197 198 201 202 205 211 214 215 217 218 219 222 223 224 232 234 236 238 243 22920 247 0 1 0 1 3 5 6 10 11 13 15 16 18 22 23 24 26 28 30 37 38 39 43 45 46 49 50 51 52 53 55 56 59 60 63 64 67 70 71 72 76 78 80 82 83 86 88 89 90 91 94 95 96 98 101 102 104 107 108 111 112 114 115 116 119 123 126 129 131 136 137 139 140 141 143 144 146 147 148 149 153 154 155 157 158 159 162 163 164 165 167 168 169 170 171 172 175 181 184 190 191 192 193 194 195 196 198 203 204 205 206 208 213 214 217 219 223 226 227 231 232 233 234 235 238 240 242 243 22921 247 0 1 e 22922 247 0 1 0 2 3 4 7 12 13 14 15 16 17 19 21 22 23 24 27 28 29 30 31 33 36 37 38 42 45 46 48 51 53 54 58 59 61 62 63 64 66 67 68 69 75 79 80 81 82 84 85 86 87 88 89 90 92 93 94 96 97 99 100 104 105 107 109 110 112 113 114 116 119 122 123 125 128 129 131 135 137 138 140 141 142 143 144 147 148 149 157 158 161 163 165 166 167 168 169 171 172 173 174 175 177 180 181 182 183 185 187 188 193 194 195 196 197 199 201 202 204 205 206 208 210 215 217 218 229 231 234 237 239 243 244 245 246 22923 247 0 1 0 2 3 4 7 12 13 14 15 16 17 19 21 22 23 24 27 28 29 30 31 33 36 37 38 42 45 46 48 51 53 54 58 59 61 62 63 64 66 67 68 69 75 79 80 81 82 84 85 86 87 88 89 90 92 93 94 96 97 99 100 104 105 107 109 110 112 113 114 116 119 122 123 125 128 129 131 135 137 138 140 141 142 143 144 147 148 149 157 158 161 163 165 166 167 168 169 171 172 173 174 175 177 180 181 182 183 185 187 188 193 194 195 196 197 199 201 202 204 205 206 208 210 215 217 218 229 231 234 237 239 243 244 245 246 22924 247 0 1 1 2 6 7 8 10 12 13 14 20 22 23 24 27 28 30 33 34 37 42 43 44 45 49 50 53 54 56 59 63 65 67 68 71 72 74 75 78 79 81 83 89 91 93 94 95 96 97 98 104 106 108 109 112 113 116 117 118 120 124 127 131 132 133 134 135 137 140 141 142 143 144 146 147 149 152 153 154 155 156 158 160 161 162 163 164 165 166 167 168 171 173 174 175 177 178 181 182 184 187 188 190 193 195 196 197 198 199 202 205 210 211 213 215 217 218 219 221 224 225 227 228 230 231 232 233 235 237 239 242 22925 247 0 1 6 8 10 27 42 45 49 53 54 56 63 72 74 78 83 91 93 94 96 97 108 112 118 131 132 133 135 137 140 142 143 144 146 147 149 153 156 158 165 167 168 171 175 178 182 184 187 188 193 196 197 199 205 211 213 221 224 227 233 22926 247 0 1 e 22927 247 0 1 e 22928 247 0 1 e 22929 247 0 1 e 22930 247 0 1 e 22931 247 0 1 e 22932 247 0 1 f 22933 247 0 1 e 22934 247 0 1 f 22935 247 0 1 f 22936 247 0 1 f 22937 247 0 1 0 2 3 4 6 7 9 13 14 19 21 23 25 26 29 33 35 37 38 39 40 46 47 50 51 53 54 56 58 63 65 66 67 68 69 70 73 74 75 79 80 82 83 88 92 93 95 96 97 98 100 102 103 105 106 107 111 114 115 116 118 119 120 123 126 130 132 133 137 139 141 142 143 144 145 147 152 153 154 157 158 159 162 166 167 169 172 175 176 177 181 184 186 187 190 192 193 194 196 198 202 204 205 206 207 208 210 211 216 217 221 222 224 226 227 228 229 230 233 234 235 236 237 238 241 243 245 246 22938 247 0 1 1 7 8 9 11 12 14 18 21 23 24 25 27 29 30 32 33 34 35 38 40 42 43 45 46 47 49 52 53 55 56 59 68 69 70 71 73 75 78 79 84 86 87 88 90 92 94 95 96 97 100 104 105 106 109 111 112 114 115 116 117 118 119 124 129 130 132 135 136 141 142 145 148 149 153 154 156 157 158 160 161 163 164 165 166 167 171 172 174 181 182 183 186 189 190 194 197 199 200 201 203 204 208 209 211 214 215 216 217 223 227 229 232 233 235 238 243 244 245 246 22939 247 0 1 e 22940 247 0 1 1 3 8 9 10 11 12 13 20 21 23 25 27 30 31 32 33 34 37 40 43 44 46 48 50 53 55 56 57 58 60 63 65 67 68 69 71 72 73 75 79 80 85 87 88 89 91 94 95 97 98 100 103 105 106 113 114 115 116 117 118 119 120 121 127 131 132 133 134 138 139 140 142 145 146 148 149 150 151 152 156 157 159 161 162 165 167 170 171 173 175 178 180 181 182 183 186 188 192 196 197 203 204 208 210 211 213 215 216 219 220 223 224 225 227 228 229 230 231 232 234 235 236 240 244 245 22941 247 0 1 1 3 8 9 10 11 12 13 20 21 23 25 27 30 31 32 33 34 37 40 43 44 46 48 50 53 55 56 57 58 60 63 65 67 68 69 71 72 73 75 79 80 85 87 88 89 91 94 95 97 98 100 103 105 106 113 114 115 116 117 118 119 120 121 127 131 132 133 134 138 139 140 142 145 146 148 149 150 151 152 156 157 159 161 162 165 167 170 171 173 175 178 180 181 182 183 186 188 192 196 197 203 204 208 210 211 213 215 216 219 220 223 224 225 227 228 229 230 231 232 234 235 236 240 244 245 22942 247 0 1 0 3 4 5 7 8 9 10 12 13 15 16 17 19 21 23 27 29 30 37 38 40 41 42 44 48 49 55 56 57 58 60 61 62 63 67 70 71 73 75 76 77 79 81 83 85 86 88 89 90 93 95 97 100 105 108 109 113 115 116 118 120 121 122 127 129 133 136 137 138 141 142 143 144 145 146 149 150 153 154 155 157 158 159 160 161 162 163 164 170 171 173 174 175 176 179 183 185 186 187 188 190 191 193 194 198 201 203 205 206 211 212 220 221 224 225 227 231 232 233 236 238 241 242 22943 247 0 1 0 5 7 9 12 15 17 19 23 30 44 48 55 56 57 58 61 71 76 79 86 89 90 95 97 100 105 108 109 113 115 118 120 121 122 127 129 133 136 138 141 144 145 149 153 154 155 158 170 175 179 187 188 193 194 198 201 205 206 220 221 231 232 238 242 22944 247 1 0 e 22945 247 1 0 e 22946 247 1 0 e 22947 247 1 0 e 22948 247 1 0 e 22949 247 1 0 e 22950 247 1 0 f 22951 247 1 0 e 22952 247 1 0 f 22953 247 1 0 f 22954 247 1 0 f 22955 247 1 0 0 1 6 7 13 16 17 26 27 28 29 30 31 34 35 37 38 39 41 42 43 44 46 47 48 53 54 55 56 57 58 59 61 63 64 66 69 72 75 78 81 82 83 84 85 86 87 88 89 93 98 99 100 103 107 108 115 118 120 125 126 127 128 129 131 133 134 135 138 139 143 144 146 148 151 152 153 155 156 158 159 162 164 168 169 174 175 176 177 179 181 183 184 185 186 188 189 192 193 194 195 197 200 204 207 210 215 216 219 221 224 225 228 231 232 233 235 238 239 240 241 244 245 22956 247 1 0 0 2 3 7 10 14 17 21 24 35 36 38 39 40 41 43 47 49 51 52 53 55 56 57 58 60 64 65 71 72 73 74 78 79 80 82 83 84 87 88 91 92 93 95 97 99 101 102 104 105 108 111 112 114 115 118 120 121 123 124 125 128 129 130 133 137 141 144 146 149 150 152 154 158 161 162 163 166 167 171 173 174 177 178 179 180 181 182 185 186 187 189 191 193 195 198 200 207 211 212 218 219 222 223 226 228 229 230 231 234 235 239 240 241 242 243 246 22957 247 1 0 e 22958 247 1 0 0 1 2 3 4 6 7 9 11 12 14 20 21 22 24 25 36 37 38 40 43 44 49 52 54 56 57 58 63 64 65 66 67 68 69 70 71 77 79 81 85 86 88 89 93 96 98 101 103 105 106 107 110 111 113 115 116 117 118 119 120 123 125 128 130 133 134 136 137 141 143 144 146 147 149 150 155 158 160 161 163 164 169 170 171 172 173 174 175 177 178 179 181 183 188 190 191 194 195 196 200 203 207 208 210 212 213 217 218 224 225 229 230 233 234 240 241 242 243 244 245 246 22959 247 1 0 0 1 2 3 4 6 7 9 11 12 14 20 21 22 24 25 36 37 38 40 43 44 49 52 54 56 57 58 63 64 65 66 67 68 69 70 71 77 79 81 85 86 88 89 93 96 98 101 103 105 106 107 110 111 113 115 116 117 118 119 120 123 125 128 130 133 134 136 137 141 143 144 146 147 149 150 155 158 160 161 163 164 169 170 171 172 173 174 175 177 178 179 181 183 188 190 191 194 195 196 200 203 207 208 210 212 213 217 218 224 225 229 230 233 234 240 241 242 243 244 245 246 22960 247 1 0 1 2 3 4 8 10 13 15 18 19 22 23 24 25 27 28 30 36 37 38 39 40 41 44 47 48 49 50 53 54 56 58 59 60 61 65 67 70 72 73 74 75 78 86 87 88 89 90 91 93 95 96 97 98 100 102 103 105 106 107 108 112 113 114 121 123 124 127 130 132 133 137 142 146 148 149 150 152 153 154 155 158 159 160 161 162 166 167 169 171 175 176 177 179 180 181 182 183 184 185 186 189 194 195 198 199 203 204 205 206 208 209 211 212 214 215 217 219 221 222 223 224 225 226 229 231 233 234 238 241 242 245 22961 247 1 0 2 4 8 10 13 15 18 19 23 24 28 30 37 40 47 49 53 54 58 60 61 65 67 72 73 75 78 86 87 88 89 90 91 97 102 107 108 113 123 124 132 148 152 153 154 158 159 160 162 166 167 175 176 179 180 182 185 186 189 199 205 206 209 211 221 224 225 226 231 242 22962 247 1 0 e 22963 247 1 0 e 22964 247 1 0 e 22965 247 1 0 e 22966 247 1 0 e 22967 247 1 0 e 22968 247 1 0 f 22969 247 1 0 e 22970 247 1 0 f 22971 247 1 0 f 22972 247 1 0 f 22973 247 1 0 0 1 4 5 8 9 12 13 14 15 19 20 21 22 23 24 27 30 31 37 41 42 44 46 47 48 50 52 55 56 57 58 59 61 62 66 67 68 70 72 73 74 75 77 78 79 80 83 84 85 86 87 88 90 93 94 96 99 100 103 104 108 111 112 113 114 115 116 117 119 122 124 125 126 127 130 131 134 136 138 139 141 142 144 145 146 151 152 155 156 158 161 163 165 167 170 171 174 175 177 179 181 184 185 186 187 188 189 195 197 198 199 204 209 210 211 212 215 218 220 221 222 227 229 230 234 236 238 241 246 22974 247 1 0 1 2 3 4 5 9 12 14 16 20 21 25 27 29 30 31 32 37 38 40 42 43 44 45 47 48 49 51 52 57 58 59 60 61 65 66 68 69 70 71 72 73 75 77 81 85 87 93 94 96 97 98 99 101 102 104 108 109 110 114 115 116 120 121 122 123 124 127 130 131 133 136 139 143 149 150 152 153 155 157 158 161 163 164 166 167 168 170 172 174 178 179 181 187 196 198 199 200 201 204 206 208 213 214 215 220 221 222 234 236 238 240 242 244 246 22975 247 1 0 e 22976 247 1 0 1 3 6 7 9 11 13 14 15 16 21 22 23 24 29 32 33 36 37 38 40 44 47 48 49 51 52 54 55 58 59 63 64 67 73 74 76 79 80 81 82 83 84 88 91 92 94 95 96 98 102 103 104 105 107 109 110 112 114 115 116 119 120 122 123 124 125 127 128 137 139 140 142 143 144 145 147 149 156 157 159 160 161 165 166 167 168 171 172 174 179 180 181 184 185 187 189 190 194 195 197 201 206 207 209 210 212 214 215 218 219 220 221 227 229 231 232 233 234 236 237 240 242 244 245 22977 247 1 0 1 3 6 7 9 11 13 14 15 16 21 22 23 24 29 32 33 36 37 38 40 44 47 48 49 51 52 54 55 58 59 63 64 67 73 74 76 79 80 81 82 83 84 88 91 92 94 95 96 98 102 103 104 105 107 109 110 112 114 115 116 119 120 122 123 124 125 127 128 137 139 140 142 143 144 145 147 149 156 157 159 160 161 165 166 167 168 171 172 174 179 180 181 184 185 187 189 190 194 195 197 201 206 207 209 210 212 214 215 218 219 220 221 227 229 231 232 233 234 236 237 240 242 244 245 22978 247 1 0 0 1 2 3 4 5 6 8 10 11 14 17 20 21 22 24 25 28 29 31 32 35 40 42 44 45 47 48 49 52 54 57 58 59 60 62 63 64 66 67 68 72 74 79 80 81 83 89 95 98 100 102 106 107 108 110 111 115 117 119 120 121 122 123 124 126 129 130 134 135 136 137 139 143 145 147 148 149 150 153 156 158 161 162 163 169 170 175 177 178 182 183 188 190 194 196 198 201 202 203 205 207 208 210 212 213 215 216 217 219 221 222 225 226 229 230 231 234 235 245 22979 247 1 0 3 4 6 8 17 22 24 29 31 35 40 42 47 48 49 54 57 58 59 63 66 67 68 74 80 95 98 102 106 107 119 120 121 124 130 137 139 143 147 148 149 150 161 162 163 169 175 177 178 188 196 201 202 203 205 210 212 215 217 222 229 231 234 235 245 22980 247 1 0 e 22981 247 1 0 e 22982 247 1 0 e 22983 247 1 0 e 22984 247 1 0 e 22985 247 1 0 e 22986 247 1 0 f 22987 247 1 0 e 22988 247 1 0 f 22989 247 1 0 f 22990 247 1 0 f 22991 247 1 0 2 3 4 12 17 18 19 20 21 22 26 27 28 32 34 35 36 38 40 43 45 46 47 48 49 50 51 52 53 54 57 58 59 64 67 68 70 71 75 78 79 81 82 84 85 86 88 89 94 96 97 98 101 103 105 106 107 109 110 111 112 115 117 118 119 120 123 124 125 128 130 134 135 136 137 142 144 146 147 149 150 151 154 155 163 164 167 169 170 171 173 174 175 177 178 180 181 188 189 190 194 195 196 198 199 201 202 203 204 205 206 207 208 209 211 212 213 214 215 220 228 229 232 233 236 237 240 241 244 22992 247 1 0 2 3 7 8 9 10 11 12 13 16 20 22 25 26 27 28 29 34 35 38 40 41 43 44 46 48 50 51 52 57 58 59 60 67 72 75 76 79 80 81 83 85 86 87 88 89 90 91 93 95 97 98 99 100 101 103 106 108 109 112 113 121 122 124 128 129 130 131 132 134 136 137 138 140 142 143 144 150 151 153 156 158 159 161 162 164 165 166 167 168 169 178 179 180 182 185 186 189 191 199 203 204 205 206 209 213 214 216 217 218 221 223 225 229 231 233 234 235 236 237 239 243 245 22993 247 1 0 e 22994 247 1 0 1 2 3 5 10 11 12 15 16 18 19 20 22 23 24 27 28 30 32 33 36 37 42 44 52 55 56 57 59 60 63 65 68 69 70 72 73 74 75 76 82 84 86 92 98 99 101 105 106 110 111 112 113 114 117 118 119 122 124 126 127 128 129 130 131 132 138 141 144 146 149 150 151 152 153 155 158 159 161 162 163 164 169 170 171 172 173 177 178 180 181 183 184 187 188 190 191 192 193 194 195 199 201 202 203 204 205 208 210 211 212 213 215 217 218 221 224 227 230 231 234 238 245 22995 247 1 0 1 2 3 5 10 11 12 15 16 18 19 20 22 23 24 27 28 30 32 33 36 37 42 44 52 55 56 57 59 60 63 65 68 69 70 72 73 74 75 76 82 84 86 92 98 99 101 105 106 110 111 112 113 114 117 118 119 122 124 126 127 128 129 130 131 132 138 141 144 146 149 150 151 152 153 155 158 159 161 162 163 164 169 170 171 172 173 177 178 180 181 183 184 187 188 190 191 192 193 194 195 199 201 202 203 204 205 208 210 211 212 213 215 217 218 221 224 227 230 231 234 238 245 22996 247 1 0 0 1 2 4 5 9 13 15 17 18 19 21 22 23 26 27 28 29 31 34 36 38 42 47 48 50 54 55 56 57 58 60 61 66 68 70 71 72 73 75 76 77 78 79 84 87 89 91 92 96 97 104 105 107 108 109 110 114 117 119 120 122 123 124 125 127 128 129 132 133 134 135 136 137 138 139 140 141 142 145 146 147 148 151 152 154 155 157 160 161 162 163 166 169 170 172 173 174 175 176 177 178 183 185 186 187 188 190 191 192 193 198 199 200 201 203 204 206 210 212 218 221 222 224 226 227 228 229 230 231 233 238 240 241 242 244 246 22997 247 1 0 1 2 5 9 18 22 23 26 28 31 36 42 50 54 57 58 66 68 71 73 75 76 77 84 89 91 104 107 109 110 114 117 120 122 123 124 129 132 133 134 140 142 147 151 154 162 166 169 170 173 174 177 188 192 203 210 218 224 226 228 233 240 242 244 246 22998 247 1 0 e 22999 247 1 0 e 23000 247 1 0 e 23001 247 1 0 e 23002 247 1 0 e 23003 247 1 0 e 23004 247 1 0 f 23005 247 1 0 e 23006 247 1 0 f 23007 247 1 0 f 23008 247 1 0 f 23009 247 1 0 0 1 3 6 7 10 12 14 15 17 18 19 20 21 23 25 27 28 31 33 34 35 39 40 43 44 48 51 53 54 56 57 59 61 64 68 69 71 72 73 75 76 77 78 79 82 83 84 87 91 93 95 99 102 106 109 111 113 117 118 119 122 125 127 129 130 131 134 136 137 138 139 140 141 142 144 148 152 154 159 160 161 166 173 174 178 180 183 184 187 190 194 195 196 200 202 206 207 208 209 210 216 220 221 222 227 228 229 231 233 235 242 243 244 245 23010 247 1 0 0 3 6 7 8 11 14 17 18 22 23 24 27 30 31 32 34 36 37 39 40 41 47 50 51 53 54 56 58 60 61 63 68 69 71 72 73 75 77 78 79 80 81 82 86 88 89 90 92 93 98 101 103 104 106 107 109 110 114 115 116 119 123 128 129 130 132 133 135 138 139 140 142 144 145 147 149 150 153 157 158 160 161 162 163 164 165 170 172 173 174 175 176 178 179 185 186 187 188 189 192 197 198 200 201 202 203 204 208 211 212 213 216 219 221 224 226 230 234 235 236 239 240 241 242 244 246 23011 247 1 0 e 23012 247 1 0 0 1 2 3 5 6 8 11 12 13 14 15 16 18 19 23 26 27 29 32 35 39 40 41 42 45 48 52 53 57 58 59 60 63 64 65 66 68 71 72 76 77 78 79 87 90 92 95 97 102 104 106 107 108 109 110 113 115 117 118 119 121 125 128 129 130 131 133 135 136 137 138 139 140 143 145 146 147 148 150 154 158 159 160 161 162 169 171 173 174 175 177 178 181 186 187 189 190 192 193 194 196 197 198 200 204 208 210 214 215 217 218 219 220 226 232 233 234 235 236 239 240 241 245 23013 247 1 0 0 1 2 3 5 6 8 11 12 13 14 15 16 18 19 23 26 27 29 32 35 39 40 41 42 45 48 52 53 57 58 59 60 63 64 65 66 68 71 72 76 77 78 79 87 90 92 95 97 102 104 106 107 108 109 110 113 115 117 118 119 121 125 128 129 130 131 133 135 136 137 138 139 140 143 145 146 147 148 150 154 158 159 160 161 162 169 171 173 174 175 177 178 181 186 187 189 190 192 193 194 196 197 198 200 204 208 210 214 215 217 218 219 220 226 232 233 234 235 236 239 240 241 245 23014 247 1 0 0 1 2 3 7 8 10 11 12 15 16 18 19 21 22 24 25 27 31 34 35 36 37 38 44 45 47 49 52 54 55 58 59 60 61 62 63 66 67 71 72 73 75 76 81 82 87 88 89 90 92 96 100 101 103 104 105 107 109 110 111 112 113 119 124 125 126 127 129 131 132 133 134 139 144 145 146 151 153 156 157 158 159 160 162 163 164 165 168 172 173 175 178 179 183 184 185 187 188 190 191 193 197 198 202 203 204 206 209 211 212 213 214 215 218 222 223 227 232 233 235 239 240 242 243 245 246 23015 247 1 0 0 1 2 3 10 12 18 19 21 24 25 27 31 34 36 37 38 47 49 52 54 55 58 59 61 66 67 72 73 81 88 96 100 109 113 124 126 127 129 132 133 134 145 146 156 157 164 168 172 173 175 178 184 185 187 188 190 203 206 213 214 218 222 235 242 245 246 23016 247 1 1 e 23017 247 1 1 e 23018 247 1 1 e 23019 247 1 1 e 23020 247 1 1 e 23021 247 1 1 e 23022 247 1 1 f 23023 247 1 1 e 23024 247 1 1 f 23025 247 1 1 f 23026 247 1 1 f 23027 247 1 1 1 4 6 8 9 13 15 17 19 20 21 22 25 32 33 34 35 37 38 39 43 46 47 50 55 57 58 60 62 63 64 65 66 69 71 72 74 76 77 78 81 82 83 86 88 89 90 91 92 93 94 95 96 97 104 106 107 109 111 114 115 127 131 132 135 136 137 138 139 140 142 144 146 148 150 155 156 157 158 159 161 162 165 168 171 172 173 174 177 178 182 183 184 188 195 197 198 200 202 203 205 207 208 209 213 214 218 220 223 225 226 227 228 229 230 231 232 233 236 237 238 239 240 23028 247 1 1 1 3 8 11 12 13 14 15 16 17 20 21 23 24 26 27 28 32 33 34 38 42 45 53 54 57 59 61 66 67 69 70 71 72 73 76 77 81 83 84 86 87 90 91 92 94 97 99 102 106 107 113 115 118 119 121 126 127 130 131 133 135 137 138 141 142 144 147 150 151 155 156 159 160 162 164 165 166 168 169 170 172 173 174 176 180 185 186 192 193 195 196 198 199 201 203 205 209 210 211 215 218 219 220 225 232 237 238 239 240 241 242 245 246 23029 247 1 1 e 23030 247 1 1 0 2 3 4 9 10 11 13 14 15 16 20 23 28 31 32 34 35 36 41 42 44 45 47 52 53 55 57 61 63 66 68 69 71 72 75 77 78 79 83 85 86 87 91 93 94 95 101 105 107 110 111 112 114 116 117 121 123 124 125 126 129 130 131 132 133 135 136 137 138 142 144 145 146 147 151 158 159 161 162 163 164 166 169 170 171 173 175 178 179 180 181 182 186 187 189 190 191 192 193 194 197 198 199 201 202 203 206 207 208 210 211 213 215 216 218 221 224 225 226 228 229 234 235 236 237 238 239 241 242 243 244 246 23031 247 1 1 0 2 3 4 9 10 11 13 14 15 16 20 23 28 31 32 34 35 36 41 42 44 45 47 52 53 55 57 61 63 66 68 69 71 72 75 77 78 79 83 85 86 87 91 93 94 95 101 105 107 110 111 112 114 116 117 121 123 124 125 126 129 130 131 132 133 135 136 137 138 142 144 145 146 147 151 158 159 161 162 163 164 166 169 170 171 173 175 178 179 180 181 182 186 187 189 190 191 192 193 194 197 198 199 201 202 203 206 207 208 210 211 213 215 216 218 221 224 225 226 228 229 234 235 236 237 238 239 241 242 243 244 246 23032 247 1 1 0 1 2 5 7 8 14 16 19 22 25 29 30 32 33 37 38 43 44 49 51 52 53 54 56 58 60 61 63 65 66 67 68 69 73 76 78 81 84 86 87 90 95 98 101 102 103 104 106 107 108 109 111 112 115 116 117 122 123 124 125 130 133 135 138 139 140 141 142 143 149 151 157 158 161 162 164 175 177 178 179 180 184 185 186 187 188 189 192 194 195 196 198 202 203 205 207 208 210 212 214 215 218 223 224 226 229 230 231 232 234 240 242 243 23033 247 1 1 0 1 16 22 25 29 32 37 43 49 51 53 54 56 58 65 67 68 69 73 78 81 84 87 107 109 112 115 117 122 124 130 139 140 141 142 143 149 151 157 175 177 178 179 180 185 186 187 188 189 195 198 203 214 215 218 223 224 232 240 23034 247 1 1 e 23035 247 1 1 e 23036 247 1 1 e 23037 247 1 1 e 23038 247 1 1 e 23039 247 1 1 e 23040 247 1 1 f 23041 247 1 1 e 23042 247 1 1 f 23043 247 1 1 f 23044 247 1 1 f 23045 247 1 1 1 2 5 7 9 12 14 15 22 24 25 28 31 35 36 37 40 41 42 43 46 48 49 50 51 53 56 57 60 61 64 65 66 67 68 75 76 77 80 84 85 87 88 89 91 92 93 94 95 96 97 98 102 103 106 109 110 117 118 119 120 122 123 124 125 127 128 135 137 139 140 141 142 152 155 156 157 159 160 161 162 164 169 172 175 176 177 181 182 185 186 188 190 191 193 197 198 201 202 207 209 211 212 213 214 215 216 217 219 223 225 226 229 230 231 232 233 235 236 238 242 243 245 246 23046 247 1 1 1 3 8 12 13 15 16 17 18 19 20 22 24 25 27 30 33 35 37 38 43 45 46 47 48 49 50 51 54 55 58 59 63 65 67 68 71 72 73 74 75 77 78 81 82 83 85 86 87 91 92 93 97 101 107 108 112 117 118 125 126 127 128 130 135 137 138 140 141 142 143 150 151 152 155 156 158 159 160 161 162 163 164 166 170 173 175 180 188 192 195 196 199 200 206 207 208 211 215 216 217 219 220 221 223 224 225 226 227 228 230 231 232 233 234 237 243 244 246 23047 247 1 1 e 23048 247 1 1 0 3 5 6 8 9 11 12 13 16 20 24 25 26 28 31 34 35 37 38 44 45 46 47 50 52 54 58 60 64 66 68 69 70 73 74 76 78 79 80 81 85 86 87 89 93 95 101 102 103 104 106 107 108 109 110 111 112 113 116 121 122 124 128 129 132 134 135 136 137 139 140 143 145 148 149 150 152 154 155 156 160 161 162 163 164 165 167 168 169 171 173 174 176 178 179 182 184 185 187 188 191 193 194 196 198 205 206 209 210 213 214 216 217 218 219 222 223 226 227 228 229 231 233 235 236 239 246 23049 247 1 1 0 3 5 6 8 9 11 12 13 16 20 24 25 26 28 31 34 35 37 38 44 45 46 47 50 52 54 58 60 64 66 68 69 70 73 74 76 78 79 80 81 85 86 87 89 93 95 101 102 103 104 106 107 108 109 110 111 112 113 116 121 122 124 128 129 132 134 135 136 137 139 140 143 145 148 149 150 152 154 155 156 160 161 162 163 164 165 167 168 169 171 173 174 176 178 179 182 184 185 187 188 191 193 194 196 198 205 206 209 210 213 214 216 217 218 219 222 223 226 227 228 229 231 233 235 236 239 246 23050 247 1 1 0 2 3 4 5 9 12 14 15 16 19 21 24 26 28 29 31 33 35 36 37 40 41 43 48 49 51 53 57 58 59 60 62 69 72 73 74 78 79 82 83 84 93 95 97 98 102 105 107 110 113 116 118 120 121 124 125 126 128 129 130 135 137 138 142 143 148 149 152 153 154 155 156 157 159 160 161 162 167 169 171 175 177 178 180 182 183 186 189 191 192 196 202 203 204 206 209 211 214 215 216 219 222 224 226 228 230 232 233 237 238 240 243 246 23051 247 1 1 2 16 21 28 29 31 35 36 40 51 69 79 82 83 84 93 95 97 105 107 110 113 116 129 138 143 148 154 155 156 161 162 167 171 175 178 180 186 191 204 206 209 214 216 228 232 233 237 238 240 246 23052 247 1 1 e 23053 247 1 1 e 23054 247 1 1 e 23055 247 1 1 e 23056 247 1 1 e 23057 247 1 1 e 23058 247 1 1 f 23059 247 1 1 e 23060 247 1 1 f 23061 247 1 1 f 23062 247 1 1 f 23063 247 1 1 0 2 5 7 10 12 14 16 19 22 23 25 27 29 35 37 38 39 41 48 49 50 53 54 55 56 58 59 63 64 65 66 69 70 71 74 75 78 81 83 84 87 88 90 91 93 94 96 102 103 104 105 111 113 114 121 123 124 125 127 129 130 131 133 135 136 137 141 143 144 149 151 152 153 154 155 156 160 162 170 171 174 175 176 181 183 186 192 194 196 197 198 201 203 206 207 208 209 212 216 217 221 222 223 229 230 231 232 234 235 236 238 239 244 23064 247 1 1 2 3 4 5 7 9 10 11 13 14 16 19 21 22 25 26 28 30 32 33 34 36 43 47 48 49 50 54 55 57 60 63 68 70 72 75 76 77 78 79 80 81 86 87 88 90 91 94 95 96 97 98 99 101 104 105 107 108 111 112 113 114 116 117 118 119 121 122 123 125 128 133 136 137 138 139 140 142 143 145 148 151 154 155 156 159 160 161 162 163 164 167 170 172 175 179 180 182 183 184 185 186 187 188 189 191 192 194 196 197 201 203 205 206 207 210 211 212 213 214 217 220 221 225 226 228 233 235 236 239 242 244 245 246 23065 247 1 1 e 23066 247 1 1 1 2 3 5 7 8 10 14 17 18 21 22 25 27 28 35 37 38 40 41 44 46 48 50 54 55 58 60 62 64 66 67 69 73 76 78 79 80 81 87 88 89 91 95 96 98 99 100 104 105 106 107 108 109 110 111 112 114 115 116 118 119 121 122 127 130 132 134 135 136 137 138 139 140 141 142 143 145 146 148 154 155 158 159 160 161 164 167 169 170 172 173 175 177 182 183 184 186 188 193 194 199 203 204 206 210 211 212 213 214 217 218 219 221 224 226 227 228 229 230 231 233 234 237 238 239 241 242 243 245 23067 247 1 1 1 2 3 5 7 8 10 14 17 18 21 22 25 27 28 35 37 38 40 41 44 46 48 50 54 55 58 60 62 64 66 67 69 73 76 78 79 80 81 87 88 89 91 95 96 98 99 100 104 105 106 107 108 109 110 111 112 114 115 116 118 119 121 122 127 130 132 134 135 136 137 138 139 140 141 142 143 145 146 148 154 155 158 159 160 161 164 167 169 170 172 173 175 177 182 183 184 186 188 193 194 199 203 204 206 210 211 212 213 214 217 218 219 221 224 226 227 228 229 230 231 233 234 237 238 239 241 242 243 245 23068 247 1 1 0 1 3 4 8 9 11 14 17 19 24 27 28 32 35 36 39 41 42 43 44 49 53 54 55 56 57 58 59 61 68 69 70 73 74 78 80 82 84 85 87 88 89 90 91 92 93 98 101 102 103 105 107 108 111 116 119 122 125 126 127 129 131 133 135 136 137 138 139 140 141 142 145 146 150 151 152 153 155 156 158 161 162 163 164 166 167 174 175 177 178 179 181 182 183 184 186 188 189 190 191 192 193 194 195 200 201 202 213 215 219 222 223 224 225 226 230 234 236 237 238 242 23069 247 1 1 1 4 17 19 24 32 35 36 42 49 55 61 70 73 74 80 82 84 88 90 91 93 98 101 102 105 108 119 122 125 126 129 131 133 135 136 137 140 141 142 150 151 153 155 156 162 163 166 167 174 175 178 179 181 182 183 184 186 190 191 194 195 200 222 223 225 226 234 237 242 23070 247 1 1 e 23071 247 1 1 e 23072 247 1 1 e 23073 247 1 1 e 23074 247 1 1 e 23075 247 1 1 e 23076 247 1 1 f 23077 247 1 1 e 23078 247 1 1 f 23079 247 1 1 f 23080 247 1 1 f 23081 247 1 1 1 2 4 6 7 8 10 17 21 27 28 29 30 32 33 35 36 38 39 40 41 43 47 49 50 51 55 56 57 59 60 62 63 66 68 69 70 72 75 76 77 78 80 81 84 85 86 87 88 91 92 94 96 97 99 100 104 105 108 110 112 113 114 115 116 117 118 124 125 127 128 129 133 134 138 140 142 143 146 150 152 153 154 156 159 161 163 166 167 168 169 173 175 177 178 179 181 184 185 186 187 189 192 193 196 199 200 206 207 209 210 211 212 213 216 217 220 221 222 223 225 226 232 236 241 244 245 246 23082 247 1 1 0 1 2 4 5 6 9 11 13 14 18 19 22 23 24 25 28 30 31 32 33 35 36 39 41 42 45 46 47 49 50 51 53 54 56 58 59 61 62 64 65 74 75 76 77 78 80 82 85 86 87 88 89 90 94 98 99 100 103 106 110 112 113 114 117 121 122 123 125 127 129 130 131 133 134 135 137 141 142 144 149 150 151 152 153 154 156 157 159 160 161 162 164 165 166 168 170 171 175 176 177 181 182 184 185 188 189 191 192 194 195 197 198 201 209 211 212 214 218 219 222 223 224 225 226 228 229 230 231 233 235 237 238 239 240 244 246 23083 247 1 1 e 23084 247 1 1 1 2 6 9 10 11 13 14 17 18 19 21 22 23 24 29 31 32 34 36 37 40 45 46 48 49 51 52 54 56 58 61 66 67 71 72 75 77 80 81 86 88 89 90 92 94 95 98 99 100 102 104 105 108 109 111 112 113 116 118 119 120 121 122 123 125 126 127 129 131 132 135 137 138 140 142 143 150 153 155 156 157 159 160 161 162 163 170 172 173 176 177 182 183 186 191 194 196 198 200 201 202 203 206 210 211 212 213 214 218 220 221 223 227 233 234 235 237 245 246 23085 247 1 1 1 2 6 9 10 11 13 14 17 18 19 21 22 23 24 29 31 32 34 36 37 40 45 46 48 49 51 52 54 56 58 61 66 67 71 72 75 77 80 81 86 88 89 90 92 94 95 98 99 100 102 104 105 108 109 111 112 113 116 118 119 120 121 122 123 125 126 127 129 131 132 135 137 138 140 142 143 150 153 155 156 157 159 160 161 162 163 170 172 173 176 177 182 183 186 191 194 196 198 200 201 202 203 206 210 211 212 213 214 218 220 221 223 227 233 234 235 237 245 246 23086 247 1 1 2 3 5 8 9 10 11 23 24 25 28 32 35 36 37 39 40 41 42 43 47 49 50 51 54 58 62 64 67 70 71 73 74 75 76 83 84 88 92 95 97 99 102 103 104 105 107 109 111 113 114 118 120 123 125 127 128 129 130 131 134 141 143 144 145 149 151 153 154 155 156 158 159 162 164 166 168 169 170 171 172 173 174 176 177 178 180 185 186 189 190 193 194 197 199 200 202 205 206 208 209 211 212 213 214 216 217 219 220 223 229 231 232 239 241 242 244 245 23087 247 1 1 2 8 10 24 28 32 37 39 51 64 67 70 71 74 75 84 88 102 105 107 123 127 130 131 141 145 151 153 158 159 162 164 169 170 171 172 174 176 177 178 185 206 209 211 214 216 217 229 239 242 23088 0 0 0 e 23089 0 0 0 e 23090 0 0 0 e 23091 0 0 0 e 23092 0 0 0 e 23093 0 0 0 e 23094 0 0 0 e 23095 0 0 0 e 23096 0 0 0 e 23097 0 0 0 e 23098 0 0 0 e 23099 0 0 0 e 23100 0 0 0 e 23101 0 0 0 e 23102 0 0 0 e 23103 0 0 0 e 23104 0 0 0 e 23105 0 0 0 e 23106 0 0 0 e 23107 0 0 0 e 23108 0 0 0 e 23109 0 0 0 e 23110 0 0 0 e 23111 0 0 0 e 23112 0 0 0 e 23113 0 0 0 e 23114 0 0 0 e 23115 0 0 0 e 23116 0 0 0 e 23117 0 0 0 e 23118 0 0 0 e 23119 0 0 0 e 23120 0 0 0 e 23121 0 0 0 e 23122 0 0 0 e 23123 0 0 0 e 23124 0 0 0 e 23125 0 0 0 e 23126 0 0 0 e 23127 0 0 0 e 23128 0 0 0 e 23129 0 0 0 e 23130 0 0 0 e 23131 0 0 0 e 23132 0 0 0 e 23133 0 0 0 e 23134 0 0 0 e 23135 0 0 0 e 23136 0 0 0 e 23137 0 0 0 e 23138 0 0 0 e 23139 0 0 0 e 23140 0 0 0 e 23141 0 0 0 e 23142 0 0 0 e 23143 0 0 0 e 23144 0 0 0 e 23145 0 0 0 e 23146 0 0 0 e 23147 0 0 0 e 23148 0 0 0 e 23149 0 0 0 e 23150 0 0 0 e 23151 0 0 0 e 23152 0 0 0 e 23153 0 0 0 e 23154 0 0 0 e 23155 0 0 0 e 23156 0 0 0 e 23157 0 0 0 e 23158 0 0 0 e 23159 0 0 0 e 23160 0 0 1 e 23161 0 0 1 e 23162 0 0 1 e 23163 0 0 1 e 23164 0 0 1 e 23165 0 0 1 e 23166 0 0 1 e 23167 0 0 1 e 23168 0 0 1 e 23169 0 0 1 e 23170 0 0 1 e 23171 0 0 1 e 23172 0 0 1 e 23173 0 0 1 e 23174 0 0 1 e 23175 0 0 1 e 23176 0 0 1 e 23177 0 0 1 e 23178 0 0 1 e 23179 0 0 1 e 23180 0 0 1 e 23181 0 0 1 e 23182 0 0 1 e 23183 0 0 1 e 23184 0 0 1 e 23185 0 0 1 e 23186 0 0 1 e 23187 0 0 1 e 23188 0 0 1 e 23189 0 0 1 e 23190 0 0 1 e 23191 0 0 1 e 23192 0 0 1 e 23193 0 0 1 e 23194 0 0 1 e 23195 0 0 1 e 23196 0 0 1 e 23197 0 0 1 e 23198 0 0 1 e 23199 0 0 1 e 23200 0 0 1 e 23201 0 0 1 e 23202 0 0 1 e 23203 0 0 1 e 23204 0 0 1 e 23205 0 0 1 e 23206 0 0 1 e 23207 0 0 1 e 23208 0 0 1 e 23209 0 0 1 e 23210 0 0 1 e 23211 0 0 1 e 23212 0 0 1 e 23213 0 0 1 e 23214 0 0 1 e 23215 0 0 1 e 23216 0 0 1 e 23217 0 0 1 e 23218 0 0 1 e 23219 0 0 1 e 23220 0 0 1 e 23221 0 0 1 e 23222 0 0 1 e 23223 0 0 1 e 23224 0 0 1 e 23225 0 0 1 e 23226 0 0 1 e 23227 0 0 1 e 23228 0 0 1 e 23229 0 0 1 e 23230 0 0 1 e 23231 0 0 1 e 23232 0 1 0 e 23233 0 1 0 e 23234 0 1 0 e 23235 0 1 0 e 23236 0 1 0 e 23237 0 1 0 e 23238 0 1 0 e 23239 0 1 0 e 23240 0 1 0 e 23241 0 1 0 e 23242 0 1 0 e 23243 0 1 0 e 23244 0 1 0 e 23245 0 1 0 e 23246 0 1 0 e 23247 0 1 0 e 23248 0 1 0 e 23249 0 1 0 e 23250 0 1 0 e 23251 0 1 0 e 23252 0 1 0 e 23253 0 1 0 e 23254 0 1 0 e 23255 0 1 0 e 23256 0 1 0 e 23257 0 1 0 e 23258 0 1 0 e 23259 0 1 0 e 23260 0 1 0 e 23261 0 1 0 e 23262 0 1 0 e 23263 0 1 0 e 23264 0 1 0 e 23265 0 1 0 e 23266 0 1 0 e 23267 0 1 0 e 23268 0 1 0 e 23269 0 1 0 e 23270 0 1 0 e 23271 0 1 0 e 23272 0 1 0 e 23273 0 1 0 e 23274 0 1 0 e 23275 0 1 0 e 23276 0 1 0 e 23277 0 1 0 e 23278 0 1 0 e 23279 0 1 0 e 23280 0 1 0 e 23281 0 1 0 e 23282 0 1 0 e 23283 0 1 0 e 23284 0 1 0 e 23285 0 1 0 e 23286 0 1 0 e 23287 0 1 0 e 23288 0 1 0 e 23289 0 1 0 e 23290 0 1 0 e 23291 0 1 0 e 23292 0 1 0 e 23293 0 1 0 e 23294 0 1 0 e 23295 0 1 0 e 23296 0 1 0 e 23297 0 1 0 e 23298 0 1 0 e 23299 0 1 0 e 23300 0 1 0 e 23301 0 1 0 e 23302 0 1 0 e 23303 0 1 0 e 23304 0 1 1 e 23305 0 1 1 e 23306 0 1 1 e 23307 0 1 1 e 23308 0 1 1 e 23309 0 1 1 e 23310 0 1 1 e 23311 0 1 1 e 23312 0 1 1 e 23313 0 1 1 e 23314 0 1 1 e 23315 0 1 1 e 23316 0 1 1 e 23317 0 1 1 e 23318 0 1 1 e 23319 0 1 1 e 23320 0 1 1 e 23321 0 1 1 e 23322 0 1 1 e 23323 0 1 1 e 23324 0 1 1 e 23325 0 1 1 e 23326 0 1 1 e 23327 0 1 1 e 23328 0 1 1 e 23329 0 1 1 e 23330 0 1 1 e 23331 0 1 1 e 23332 0 1 1 e 23333 0 1 1 e 23334 0 1 1 e 23335 0 1 1 e 23336 0 1 1 e 23337 0 1 1 e 23338 0 1 1 e 23339 0 1 1 e 23340 0 1 1 e 23341 0 1 1 e 23342 0 1 1 e 23343 0 1 1 e 23344 0 1 1 e 23345 0 1 1 e 23346 0 1 1 e 23347 0 1 1 e 23348 0 1 1 e 23349 0 1 1 e 23350 0 1 1 e 23351 0 1 1 e 23352 0 1 1 e 23353 0 1 1 e 23354 0 1 1 e 23355 0 1 1 e 23356 0 1 1 e 23357 0 1 1 e 23358 0 1 1 e 23359 0 1 1 e 23360 0 1 1 e 23361 0 1 1 e 23362 0 1 1 e 23363 0 1 1 e 23364 0 1 1 e 23365 0 1 1 e 23366 0 1 1 e 23367 0 1 1 e 23368 0 1 1 e 23369 0 1 1 e 23370 0 1 1 e 23371 0 1 1 e 23372 0 1 1 e 23373 0 1 1 e 23374 0 1 1 e 23375 0 1 1 e 23376 1 0 0 e 23377 1 0 0 e 23378 1 0 0 e 23379 1 0 0 e 23380 1 0 0 e 23381 1 0 0 e 23382 1 0 0 e 23383 1 0 0 f 23384 1 0 0 e 23385 1 0 0 e 23386 1 0 0 e 23387 1 0 0 f 23388 1 0 0 e 23389 1 0 0 e 23390 1 0 0 e 23391 1 0 0 e 23392 1 0 0 e 23393 1 0 0 f 23394 1 0 0 e 23395 1 0 0 e 23396 1 0 0 e 23397 1 0 0 e 23398 1 0 0 e 23399 1 0 0 e 23400 1 0 0 e 23401 1 0 0 f 23402 1 0 0 e 23403 1 0 0 e 23404 1 0 0 e 23405 1 0 0 f 23406 1 0 0 e 23407 1 0 0 f 23408 1 0 0 e 23409 1 0 0 e 23410 1 0 0 e 23411 1 0 0 e 23412 1 0 0 e 23413 1 0 0 e 23414 1 0 0 e 23415 1 0 0 e 23416 1 0 0 e 23417 1 0 0 e 23418 1 0 0 e 23419 1 0 0 f 23420 1 0 0 e 23421 1 0 0 e 23422 1 0 0 e 23423 1 0 0 e 23424 1 0 0 e 23425 1 0 0 f 23426 1 0 0 e 23427 1 0 0 e 23428 1 0 0 e 23429 1 0 0 e 23430 1 0 0 e 23431 1 0 0 e 23432 1 0 0 e 23433 1 0 0 e 23434 1 0 0 e 23435 1 0 0 e 23436 1 0 0 e 23437 1 0 0 f 23438 1 0 0 e 23439 1 0 0 e 23440 1 0 0 e 23441 1 0 0 e 23442 1 0 0 e 23443 1 0 0 e 23444 1 0 0 e 23445 1 0 0 e 23446 1 0 0 e 23447 1 0 0 e 23448 1 0 1 e 23449 1 0 1 e 23450 1 0 1 e 23451 1 0 1 e 23452 1 0 1 e 23453 1 0 1 e 23454 1 0 1 e 23455 1 0 1 f 23456 1 0 1 e 23457 1 0 1 e 23458 1 0 1 e 23459 1 0 1 f 23460 1 0 1 e 23461 1 0 1 f 23462 1 0 1 e 23463 1 0 1 e 23464 1 0 1 e 23465 1 0 1 f 23466 1 0 1 e 23467 1 0 1 e 23468 1 0 1 e 23469 1 0 1 e 23470 1 0 1 e 23471 1 0 1 e 23472 1 0 1 e 23473 1 0 1 f 23474 1 0 1 e 23475 1 0 1 e 23476 1 0 1 e 23477 1 0 1 f 23478 1 0 1 e 23479 1 0 1 f 23480 1 0 1 e 23481 1 0 1 e 23482 1 0 1 e 23483 1 0 1 e 23484 1 0 1 e 23485 1 0 1 e 23486 1 0 1 e 23487 1 0 1 e 23488 1 0 1 e 23489 1 0 1 e 23490 1 0 1 e 23491 1 0 1 f 23492 1 0 1 e 23493 1 0 1 e 23494 1 0 1 e 23495 1 0 1 f 23496 1 0 1 e 23497 1 0 1 f 23498 1 0 1 e 23499 1 0 1 e 23500 1 0 1 e 23501 1 0 1 e 23502 1 0 1 e 23503 1 0 1 e 23504 1 0 1 e 23505 1 0 1 e 23506 1 0 1 e 23507 1 0 1 e 23508 1 0 1 e 23509 1 0 1 f 23510 1 0 1 e 23511 1 0 1 e 23512 1 0 1 e 23513 1 0 1 f 23514 1 0 1 e 23515 1 0 1 f 23516 1 0 1 e 23517 1 0 1 e 23518 1 0 1 e 23519 1 0 1 e 23520 1 1 0 e 23521 1 1 0 e 23522 1 1 0 e 23523 1 1 0 e 23524 1 1 0 e 23525 1 1 0 e 23526 1 1 0 e 23527 1 1 0 f 23528 1 1 0 e 23529 1 1 0 e 23530 1 1 0 e 23531 1 1 0 f 23532 1 1 0 e 23533 1 1 0 e 23534 1 1 0 e 23535 1 1 0 e 23536 1 1 0 e 23537 1 1 0 e 23538 1 1 0 e 23539 1 1 0 e 23540 1 1 0 e 23541 1 1 0 e 23542 1 1 0 e 23543 1 1 0 e 23544 1 1 0 e 23545 1 1 0 f 23546 1 1 0 e 23547 1 1 0 e 23548 1 1 0 e 23549 1 1 0 f 23550 1 1 0 e 23551 1 1 0 f 23552 1 1 0 e 23553 1 1 0 e 23554 1 1 0 e 23555 1 1 0 e 23556 1 1 0 e 23557 1 1 0 e 23558 1 1 0 e 23559 1 1 0 e 23560 1 1 0 e 23561 1 1 0 e 23562 1 1 0 e 23563 1 1 0 f 23564 1 1 0 e 23565 1 1 0 e 23566 1 1 0 e 23567 1 1 0 e 23568 1 1 0 e 23569 1 1 0 e 23570 1 1 0 e 23571 1 1 0 e 23572 1 1 0 e 23573 1 1 0 e 23574 1 1 0 e 23575 1 1 0 e 23576 1 1 0 e 23577 1 1 0 e 23578 1 1 0 e 23579 1 1 0 e 23580 1 1 0 e 23581 1 1 0 f 23582 1 1 0 e 23583 1 1 0 e 23584 1 1 0 e 23585 1 1 0 e 23586 1 1 0 e 23587 1 1 0 f 23588 1 1 0 e 23589 1 1 0 e 23590 1 1 0 e 23591 1 1 0 e 23592 1 1 1 e 23593 1 1 1 e 23594 1 1 1 e 23595 1 1 1 e 23596 1 1 1 e 23597 1 1 1 e 23598 1 1 1 e 23599 1 1 1 f 23600 1 1 1 e 23601 1 1 1 e 23602 1 1 1 e 23603 1 1 1 e 23604 1 1 1 e 23605 1 1 1 f 23606 1 1 1 e 23607 1 1 1 e 23608 1 1 1 e 23609 1 1 1 e 23610 1 1 1 e 23611 1 1 1 e 23612 1 1 1 e 23613 1 1 1 e 23614 1 1 1 e 23615 1 1 1 e 23616 1 1 1 e 23617 1 1 1 f 23618 1 1 1 e 23619 1 1 1 e 23620 1 1 1 e 23621 1 1 1 f 23622 1 1 1 e 23623 1 1 1 e 23624 1 1 1 e 23625 1 1 1 e 23626 1 1 1 e 23627 1 1 1 e 23628 1 1 1 e 23629 1 1 1 e 23630 1 1 1 e 23631 1 1 1 e 23632 1 1 1 e 23633 1 1 1 e 23634 1 1 1 e 23635 1 1 1 f 23636 1 1 1 e 23637 1 1 1 e 23638 1 1 1 e 23639 1 1 1 f 23640 1 1 1 e 23641 1 1 1 f 23642 1 1 1 e 23643 1 1 1 e 23644 1 1 1 e 23645 1 1 1 e 23646 1 1 1 e 23647 1 1 1 e 23648 1 1 1 e 23649 1 1 1 e 23650 1 1 1 e 23651 1 1 1 e 23652 1 1 1 e 23653 1 1 1 f 23654 1 1 1 e 23655 1 1 1 e 23656 1 1 1 e 23657 1 1 1 e 23658 1 1 1 e 23659 1 1 1 e 23660 1 1 1 e 23661 1 1 1 e 23662 1 1 1 e 23663 1 1 1 f 23664 31 0 0 e 23665 31 0 0 e 23666 31 0 0 e 23667 31 0 0 e 23668 31 0 0 e 23669 31 0 0 e 23670 31 0 0 e 23671 31 0 0 f 23672 31 0 0 e 23673 31 0 0 e 23674 31 0 0 e 23675 31 0 0 0 1 2 3 6 10 13 15 16 17 22 23 27 28 30 23676 31 0 0 e 23677 31 0 0 0 2 4 5 7 15 16 18 19 21 23 24 25 26 30 23678 31 0 0 e 23679 31 0 0 e 23680 31 0 0 e 23681 31 0 0 5 11 15 24 27 30 23682 31 0 0 e 23683 31 0 0 e 23684 31 0 0 e 23685 31 0 0 e 23686 31 0 0 e 23687 31 0 0 e 23688 31 0 0 e 23689 31 0 0 f 23690 31 0 0 e 23691 31 0 0 e 23692 31 0 0 e 23693 31 0 0 0 4 6 7 11 13 15 19 22 26 28 23694 31 0 0 e 23695 31 0 0 0 3 4 9 11 12 13 14 15 17 18 19 20 21 23 28 29 23696 31 0 0 e 23697 31 0 0 e 23698 31 0 0 e 23699 31 0 0 0 11 17 20 21 27 23700 31 0 0 e 23701 31 0 0 e 23702 31 0 0 e 23703 31 0 0 e 23704 31 0 0 e 23705 31 0 0 e 23706 31 0 0 e 23707 31 0 0 f 23708 31 0 0 e 23709 31 0 0 e 23710 31 0 0 e 23711 31 0 0 2 3 4 6 8 10 12 13 14 16 17 19 22 27 28 23712 31 0 0 e 23713 31 0 0 1 3 4 5 6 7 9 10 12 14 15 19 20 23 26 27 29 30 23714 31 0 0 e 23715 31 0 0 e 23716 31 0 0 e 23717 31 0 0 0 4 6 7 9 13 18 21 27 30 23718 31 0 0 e 23719 31 0 0 e 23720 31 0 0 e 23721 31 0 0 e 23722 31 0 0 e 23723 31 0 0 e 23724 31 0 0 e 23725 31 0 0 f 23726 31 0 0 e 23727 31 0 0 e 23728 31 0 0 e 23729 31 0 0 2 3 4 5 8 11 12 16 18 19 20 21 26 29 23730 31 0 0 e 23731 31 0 0 3 5 6 9 10 11 13 15 20 21 23 24 26 27 23732 31 0 0 e 23733 31 0 0 e 23734 31 0 0 e 23735 31 0 0 1 4 6 18 22 23 26 27 30 23736 31 0 1 e 23737 31 0 1 e 23738 31 0 1 e 23739 31 0 1 e 23740 31 0 1 e 23741 31 0 1 e 23742 31 0 1 e 23743 31 0 1 f 23744 31 0 1 e 23745 31 0 1 e 23746 31 0 1 e 23747 31 0 1 3 4 5 8 11 12 13 15 16 23 25 26 28 23748 31 0 1 e 23749 31 0 1 0 2 4 5 7 9 10 11 14 15 16 18 19 21 23 25 29 23750 31 0 1 e 23751 31 0 1 e 23752 31 0 1 e 23753 31 0 1 0 1 2 5 7 9 10 11 14 19 25 29 23754 31 0 1 e 23755 31 0 1 e 23756 31 0 1 e 23757 31 0 1 e 23758 31 0 1 e 23759 31 0 1 e 23760 31 0 1 e 23761 31 0 1 f 23762 31 0 1 e 23763 31 0 1 e 23764 31 0 1 e 23765 31 0 1 0 1 2 5 8 10 12 16 21 22 24 25 26 28 29 30 23766 31 0 1 e 23767 31 0 1 0 1 3 4 5 6 7 12 21 22 26 28 29 23768 31 0 1 e 23769 31 0 1 e 23770 31 0 1 e 23771 31 0 1 4 6 8 10 11 15 17 27 29 23772 31 0 1 e 23773 31 0 1 e 23774 31 0 1 e 23775 31 0 1 e 23776 31 0 1 e 23777 31 0 1 e 23778 31 0 1 e 23779 31 0 1 f 23780 31 0 1 e 23781 31 0 1 e 23782 31 0 1 e 23783 31 0 1 2 4 5 8 10 11 12 13 14 15 17 18 19 21 26 27 29 30 23784 31 0 1 e 23785 31 0 1 0 2 4 5 7 11 14 15 18 19 26 30 23786 31 0 1 e 23787 31 0 1 e 23788 31 0 1 e 23789 31 0 1 1 2 3 4 6 10 16 17 19 20 22 25 23790 31 0 1 e 23791 31 0 1 e 23792 31 0 1 e 23793 31 0 1 e 23794 31 0 1 e 23795 31 0 1 e 23796 31 0 1 e 23797 31 0 1 f 23798 31 0 1 e 23799 31 0 1 e 23800 31 0 1 e 23801 31 0 1 1 3 4 8 11 13 19 21 22 23 26 27 30 23802 31 0 1 e 23803 31 0 1 0 9 10 11 12 14 15 17 18 19 21 23 24 25 27 28 23804 31 0 1 e 23805 31 0 1 e 23806 31 0 1 e 23807 31 0 1 0 6 12 20 23 24 27 30 23808 31 1 0 e 23809 31 1 0 e 23810 31 1 0 e 23811 31 1 0 e 23812 31 1 0 e 23813 31 1 0 e 23814 31 1 0 e 23815 31 1 0 f 23816 31 1 0 e 23817 31 1 0 e 23818 31 1 0 e 23819 31 1 0 3 5 6 7 8 14 17 18 19 20 21 25 26 27 29 30 23820 31 1 0 e 23821 31 1 0 0 5 6 7 9 10 11 13 16 18 19 20 21 22 23 24 29 30 23822 31 1 0 e 23823 31 1 0 e 23824 31 1 0 e 23825 31 1 0 5 8 10 14 17 24 23826 31 1 0 e 23827 31 1 0 e 23828 31 1 0 e 23829 31 1 0 e 23830 31 1 0 e 23831 31 1 0 e 23832 31 1 0 e 23833 31 1 0 f 23834 31 1 0 e 23835 31 1 0 e 23836 31 1 0 e 23837 31 1 0 3 6 7 8 9 10 11 12 13 14 16 17 20 21 22 24 26 28 23838 31 1 0 e 23839 31 1 0 1 2 3 4 6 8 10 17 20 21 23 27 28 30 23840 31 1 0 e 23841 31 1 0 e 23842 31 1 0 e 23843 31 1 0 3 8 10 11 13 14 19 20 24 25 28 23844 31 1 0 e 23845 31 1 0 e 23846 31 1 0 e 23847 31 1 0 e 23848 31 1 0 e 23849 31 1 0 e 23850 31 1 0 e 23851 31 1 0 f 23852 31 1 0 e 23853 31 1 0 e 23854 31 1 0 e 23855 31 1 0 2 4 8 9 12 13 14 15 17 18 19 20 21 22 23 27 29 30 23856 31 1 0 e 23857 31 1 0 2 4 5 6 7 10 11 12 13 15 16 20 21 24 26 28 30 23858 31 1 0 e 23859 31 1 0 e 23860 31 1 0 e 23861 31 1 0 1 5 6 7 8 10 17 22 25 23862 31 1 0 e 23863 31 1 0 e 23864 31 1 0 e 23865 31 1 0 e 23866 31 1 0 e 23867 31 1 0 e 23868 31 1 0 e 23869 31 1 0 f 23870 31 1 0 e 23871 31 1 0 e 23872 31 1 0 e 23873 31 1 0 0 2 3 5 6 8 9 12 16 17 20 23 25 26 27 28 29 30 23874 31 1 0 e 23875 31 1 0 0 2 6 7 10 12 16 17 19 20 22 24 28 29 30 23876 31 1 0 e 23877 31 1 0 e 23878 31 1 0 e 23879 31 1 0 4 16 17 19 20 23880 31 1 1 e 23881 31 1 1 e 23882 31 1 1 e 23883 31 1 1 e 23884 31 1 1 e 23885 31 1 1 e 23886 31 1 1 e 23887 31 1 1 f 23888 31 1 1 e 23889 31 1 1 e 23890 31 1 1 e 23891 31 1 1 1 3 4 6 7 8 9 10 11 14 15 17 18 20 23 25 30 23892 31 1 1 e 23893 31 1 1 0 2 4 5 6 7 11 12 13 14 16 18 19 20 21 22 24 25 26 28 29 30 23894 31 1 1 e 23895 31 1 1 e 23896 31 1 1 e 23897 31 1 1 3 9 11 12 21 22 25 29 23898 31 1 1 e 23899 31 1 1 e 23900 31 1 1 e 23901 31 1 1 e 23902 31 1 1 e 23903 31 1 1 e 23904 31 1 1 e 23905 31 1 1 f 23906 31 1 1 e 23907 31 1 1 e 23908 31 1 1 e 23909 31 1 1 2 3 8 9 10 11 14 15 16 18 19 20 22 23 30 23910 31 1 1 e 23911 31 1 1 0 8 14 17 18 19 23 26 30 23912 31 1 1 e 23913 31 1 1 e 23914 31 1 1 e 23915 31 1 1 4 20 27 23916 31 1 1 e 23917 31 1 1 e 23918 31 1 1 e 23919 31 1 1 e 23920 31 1 1 e 23921 31 1 1 e 23922 31 1 1 e 23923 31 1 1 f 23924 31 1 1 e 23925 31 1 1 e 23926 31 1 1 e 23927 31 1 1 0 4 7 8 13 14 15 16 17 18 19 21 23 25 26 29 30 23928 31 1 1 e 23929 31 1 1 0 3 4 5 6 10 14 15 16 19 21 22 23 24 25 28 29 30 23930 31 1 1 e 23931 31 1 1 e 23932 31 1 1 e 23933 31 1 1 6 9 11 14 16 30 23934 31 1 1 e 23935 31 1 1 e 23936 31 1 1 e 23937 31 1 1 e 23938 31 1 1 e 23939 31 1 1 e 23940 31 1 1 e 23941 31 1 1 f 23942 31 1 1 e 23943 31 1 1 e 23944 31 1 1 e 23945 31 1 1 1 3 5 6 8 11 12 13 16 17 19 21 22 23 26 29 23946 31 1 1 e 23947 31 1 1 0 1 2 4 5 6 7 10 11 12 14 15 16 18 21 23 24 26 23948 31 1 1 e 23949 31 1 1 e 23950 31 1 1 e 23951 31 1 1 0 1 3 4 6 8 13 18 20 21 24 25 28 23952 32 0 0 e 23953 32 0 0 e 23954 32 0 0 e 23955 32 0 0 e 23956 32 0 0 e 23957 32 0 0 e 23958 32 0 0 e 23959 32 0 0 f 23960 32 0 0 e 23961 32 0 0 e 23962 32 0 0 e 23963 32 0 0 0 2 3 4 11 12 13 15 16 17 18 22 25 28 23964 32 0 0 e 23965 32 0 0 0 2 3 5 6 7 8 12 17 21 24 28 30 31 23966 32 0 0 e 23967 32 0 0 e 23968 32 0 0 e 23969 32 0 0 0 2 3 5 8 17 31 23970 32 0 0 e 23971 32 0 0 e 23972 32 0 0 e 23973 32 0 0 e 23974 32 0 0 e 23975 32 0 0 e 23976 32 0 0 e 23977 32 0 0 f 23978 32 0 0 e 23979 32 0 0 e 23980 32 0 0 e 23981 32 0 0 0 1 2 5 7 9 10 11 12 14 18 19 24 25 26 27 28 23982 32 0 0 e 23983 32 0 0 0 2 3 4 5 6 7 10 11 14 19 22 26 27 28 29 30 31 23984 32 0 0 e 23985 32 0 0 e 23986 32 0 0 e 23987 32 0 0 1 7 13 19 23 24 27 28 30 23988 32 0 0 e 23989 32 0 0 e 23990 32 0 0 e 23991 32 0 0 e 23992 32 0 0 e 23993 32 0 0 e 23994 32 0 0 e 23995 32 0 0 f 23996 32 0 0 e 23997 32 0 0 e 23998 32 0 0 e 23999 32 0 0 5 7 10 16 17 18 21 25 26 27 30 31 24000 32 0 0 e 24001 32 0 0 0 1 6 7 9 10 12 16 17 19 22 24 26 28 29 30 31 24002 32 0 0 e 24003 32 0 0 e 24004 32 0 0 e 24005 32 0 0 2 6 7 9 15 17 25 27 30 31 24006 32 0 0 e 24007 32 0 0 e 24008 32 0 0 e 24009 32 0 0 e 24010 32 0 0 e 24011 32 0 0 e 24012 32 0 0 e 24013 32 0 0 f 24014 32 0 0 e 24015 32 0 0 e 24016 32 0 0 e 24017 32 0 0 4 6 8 11 15 17 19 20 22 24 25 27 28 31 24018 32 0 0 e 24019 32 0 0 0 1 7 9 12 14 15 16 18 22 23 24 25 26 28 29 30 31 24020 32 0 0 e 24021 32 0 0 e 24022 32 0 0 e 24023 32 0 0 3 5 21 26 24024 32 0 1 e 24025 32 0 1 e 24026 32 0 1 e 24027 32 0 1 e 24028 32 0 1 e 24029 32 0 1 e 24030 32 0 1 e 24031 32 0 1 f 24032 32 0 1 e 24033 32 0 1 e 24034 32 0 1 e 24035 32 0 1 1 2 5 9 10 11 12 14 15 19 22 23 25 24036 32 0 1 e 24037 32 0 1 1 2 5 6 8 10 18 19 21 27 29 30 24038 32 0 1 e 24039 32 0 1 e 24040 32 0 1 e 24041 32 0 1 0 1 3 4 5 12 16 18 19 25 31 24042 32 0 1 e 24043 32 0 1 e 24044 32 0 1 e 24045 32 0 1 e 24046 32 0 1 e 24047 32 0 1 e 24048 32 0 1 e 24049 32 0 1 f 24050 32 0 1 e 24051 32 0 1 e 24052 32 0 1 e 24053 32 0 1 1 3 6 7 8 9 10 12 14 15 16 18 19 22 25 26 27 28 29 31 24054 32 0 1 e 24055 32 0 1 0 2 3 7 8 9 10 12 13 14 15 16 19 20 21 23 25 26 27 29 24056 32 0 1 e 24057 32 0 1 e 24058 32 0 1 e 24059 32 0 1 2 4 8 9 11 16 19 22 28 24060 32 0 1 e 24061 32 0 1 e 24062 32 0 1 e 24063 32 0 1 e 24064 32 0 1 e 24065 32 0 1 e 24066 32 0 1 e 24067 32 0 1 f 24068 32 0 1 e 24069 32 0 1 e 24070 32 0 1 e 24071 32 0 1 0 2 4 9 12 14 20 22 23 24 25 27 28 29 31 24072 32 0 1 e 24073 32 0 1 1 3 4 7 8 11 13 14 16 17 19 20 23 24 25 27 29 31 24074 32 0 1 e 24075 32 0 1 e 24076 32 0 1 e 24077 32 0 1 11 19 21 26 28 31 24078 32 0 1 e 24079 32 0 1 e 24080 32 0 1 e 24081 32 0 1 e 24082 32 0 1 e 24083 32 0 1 e 24084 32 0 1 e 24085 32 0 1 f 24086 32 0 1 e 24087 32 0 1 e 24088 32 0 1 e 24089 32 0 1 2 3 6 7 8 9 10 11 14 16 18 19 20 22 24 25 27 24090 32 0 1 e 24091 32 0 1 0 1 2 3 4 6 8 10 11 14 15 17 19 20 21 22 24 25 26 27 24092 32 0 1 e 24093 32 0 1 e 24094 32 0 1 e 24095 32 0 1 3 6 11 14 18 24 26 28 31 24096 32 1 0 e 24097 32 1 0 e 24098 32 1 0 e 24099 32 1 0 e 24100 32 1 0 e 24101 32 1 0 e 24102 32 1 0 e 24103 32 1 0 f 24104 32 1 0 e 24105 32 1 0 e 24106 32 1 0 e 24107 32 1 0 0 1 3 4 5 6 10 11 15 16 17 18 20 23 24 27 29 31 24108 32 1 0 e 24109 32 1 0 2 3 4 9 10 14 15 16 17 18 20 21 22 26 28 30 24110 32 1 0 e 24111 32 1 0 e 24112 32 1 0 e 24113 32 1 0 6 11 20 29 31 24114 32 1 0 e 24115 32 1 0 e 24116 32 1 0 e 24117 32 1 0 e 24118 32 1 0 e 24119 32 1 0 e 24120 32 1 0 e 24121 32 1 0 f 24122 32 1 0 e 24123 32 1 0 e 24124 32 1 0 e 24125 32 1 0 1 4 6 10 11 13 15 16 17 18 21 22 23 27 28 29 30 24126 32 1 0 e 24127 32 1 0 0 2 3 6 7 8 11 12 16 17 19 20 21 23 24 25 27 30 24128 32 1 0 e 24129 32 1 0 e 24130 32 1 0 e 24131 32 1 0 1 4 7 8 16 19 24132 32 1 0 e 24133 32 1 0 e 24134 32 1 0 e 24135 32 1 0 e 24136 32 1 0 e 24137 32 1 0 e 24138 32 1 0 e 24139 32 1 0 f 24140 32 1 0 e 24141 32 1 0 e 24142 32 1 0 e 24143 32 1 0 0 4 6 10 11 13 14 15 17 20 21 24 26 28 29 24144 32 1 0 e 24145 32 1 0 0 1 5 8 9 11 13 14 15 17 18 19 22 25 27 24146 32 1 0 e 24147 32 1 0 e 24148 32 1 0 e 24149 32 1 0 1 4 10 12 17 23 28 30 24150 32 1 0 e 24151 32 1 0 e 24152 32 1 0 e 24153 32 1 0 e 24154 32 1 0 e 24155 32 1 0 e 24156 32 1 0 e 24157 32 1 0 f 24158 32 1 0 e 24159 32 1 0 e 24160 32 1 0 e 24161 32 1 0 1 2 6 7 9 16 17 19 21 22 23 24 26 28 29 31 24162 32 1 0 e 24163 32 1 0 0 1 3 4 6 7 8 9 10 11 13 14 15 17 21 22 27 28 24164 32 1 0 e 24165 32 1 0 e 24166 32 1 0 e 24167 32 1 0 4 13 15 19 24 26 24168 32 1 1 e 24169 32 1 1 e 24170 32 1 1 e 24171 32 1 1 e 24172 32 1 1 e 24173 32 1 1 e 24174 32 1 1 e 24175 32 1 1 f 24176 32 1 1 e 24177 32 1 1 e 24178 32 1 1 e 24179 32 1 1 0 2 7 10 12 14 15 16 17 18 19 20 21 23 27 30 31 24180 32 1 1 e 24181 32 1 1 1 2 4 5 9 11 13 15 19 20 22 25 26 28 30 24182 32 1 1 e 24183 32 1 1 e 24184 32 1 1 e 24185 32 1 1 1 4 5 10 16 21 23 28 31 24186 32 1 1 e 24187 32 1 1 e 24188 32 1 1 e 24189 32 1 1 e 24190 32 1 1 e 24191 32 1 1 e 24192 32 1 1 e 24193 32 1 1 f 24194 32 1 1 e 24195 32 1 1 e 24196 32 1 1 e 24197 32 1 1 1 2 3 6 9 10 12 13 19 25 27 29 31 24198 32 1 1 e 24199 32 1 1 0 2 3 5 6 9 11 13 16 24 28 30 31 24200 32 1 1 e 24201 32 1 1 e 24202 32 1 1 e 24203 32 1 1 0 8 16 24204 32 1 1 e 24205 32 1 1 e 24206 32 1 1 e 24207 32 1 1 e 24208 32 1 1 e 24209 32 1 1 e 24210 32 1 1 e 24211 32 1 1 f 24212 32 1 1 e 24213 32 1 1 e 24214 32 1 1 e 24215 32 1 1 0 1 2 3 4 5 6 8 9 11 12 13 15 16 17 19 20 22 25 26 27 28 29 24216 32 1 1 e 24217 32 1 1 0 2 4 6 8 9 10 13 14 17 18 19 20 25 26 27 29 30 31 24218 32 1 1 e 24219 32 1 1 e 24220 32 1 1 e 24221 32 1 1 10 16 18 19 20 25 27 28 29 31 24222 32 1 1 e 24223 32 1 1 e 24224 32 1 1 e 24225 32 1 1 e 24226 32 1 1 e 24227 32 1 1 e 24228 32 1 1 e 24229 32 1 1 f 24230 32 1 1 e 24231 32 1 1 e 24232 32 1 1 e 24233 32 1 1 0 3 4 5 6 7 9 13 15 18 20 21 23 25 28 29 31 24234 32 1 1 e 24235 32 1 1 1 2 6 8 9 10 11 12 13 14 15 16 22 24 28 30 31 24236 32 1 1 e 24237 32 1 1 e 24238 32 1 1 e 24239 32 1 1 3 6 7 12 16 24 28 24240 33 0 0 e 24241 33 0 0 e 24242 33 0 0 e 24243 33 0 0 e 24244 33 0 0 e 24245 33 0 0 e 24246 33 0 0 e 24247 33 0 0 f 24248 33 0 0 e 24249 33 0 0 e 24250 33 0 0 e 24251 33 0 0 1 3 4 5 6 7 9 10 11 13 15 16 17 18 19 22 26 27 32 24252 33 0 0 e 24253 33 0 0 3 5 6 7 9 10 12 14 16 19 20 23 25 26 30 31 32 24254 33 0 0 e 24255 33 0 0 e 24256 33 0 0 e 24257 33 0 0 2 4 11 16 18 20 24 25 27 24258 33 0 0 e 24259 33 0 0 e 24260 33 0 0 e 24261 33 0 0 e 24262 33 0 0 e 24263 33 0 0 e 24264 33 0 0 e 24265 33 0 0 f 24266 33 0 0 e 24267 33 0 0 e 24268 33 0 0 e 24269 33 0 0 0 1 2 5 7 13 14 16 17 19 26 31 24270 33 0 0 e 24271 33 0 0 0 1 2 4 7 8 9 10 13 15 17 18 20 23 24 29 32 24272 33 0 0 e 24273 33 0 0 e 24274 33 0 0 e 24275 33 0 0 4 12 23 24 26 28 31 32 24276 33 0 0 e 24277 33 0 0 e 24278 33 0 0 e 24279 33 0 0 e 24280 33 0 0 e 24281 33 0 0 e 24282 33 0 0 e 24283 33 0 0 f 24284 33 0 0 e 24285 33 0 0 e 24286 33 0 0 e 24287 33 0 0 0 3 4 5 8 11 13 14 15 17 18 19 21 23 25 27 30 31 24288 33 0 0 e 24289 33 0 0 1 3 4 5 8 12 13 14 16 22 28 29 32 24290 33 0 0 e 24291 33 0 0 e 24292 33 0 0 e 24293 33 0 0 4 17 21 24294 33 0 0 e 24295 33 0 0 e 24296 33 0 0 e 24297 33 0 0 e 24298 33 0 0 e 24299 33 0 0 e 24300 33 0 0 e 24301 33 0 0 f 24302 33 0 0 e 24303 33 0 0 e 24304 33 0 0 e 24305 33 0 0 0 1 3 4 7 11 14 19 20 22 23 25 26 27 28 30 31 32 24306 33 0 0 e 24307 33 0 0 1 2 12 13 15 16 20 21 23 25 29 30 31 24308 33 0 0 e 24309 33 0 0 e 24310 33 0 0 e 24311 33 0 0 2 5 7 11 12 13 15 19 25 31 24312 33 0 1 e 24313 33 0 1 e 24314 33 0 1 e 24315 33 0 1 e 24316 33 0 1 e 24317 33 0 1 e 24318 33 0 1 e 24319 33 0 1 f 24320 33 0 1 e 24321 33 0 1 e 24322 33 0 1 e 24323 33 0 1 1 2 3 4 5 7 10 13 16 19 20 21 26 27 28 29 30 32 24324 33 0 1 e 24325 33 0 1 0 2 10 11 13 14 16 20 22 23 24 26 28 29 30 31 24326 33 0 1 e 24327 33 0 1 e 24328 33 0 1 e 24329 33 0 1 8 10 16 18 24 24330 33 0 1 e 24331 33 0 1 e 24332 33 0 1 e 24333 33 0 1 e 24334 33 0 1 e 24335 33 0 1 e 24336 33 0 1 e 24337 33 0 1 f 24338 33 0 1 e 24339 33 0 1 e 24340 33 0 1 e 24341 33 0 1 0 1 2 3 4 5 6 9 10 12 16 17 19 20 21 22 25 30 31 24342 33 0 1 e 24343 33 0 1 0 3 4 6 9 10 14 15 19 22 23 26 28 29 31 24344 33 0 1 e 24345 33 0 1 e 24346 33 0 1 e 24347 33 0 1 2 3 10 12 14 17 19 27 30 32 24348 33 0 1 e 24349 33 0 1 e 24350 33 0 1 e 24351 33 0 1 e 24352 33 0 1 e 24353 33 0 1 e 24354 33 0 1 e 24355 33 0 1 f 24356 33 0 1 e 24357 33 0 1 e 24358 33 0 1 e 24359 33 0 1 0 3 5 6 10 11 14 23 27 28 24360 33 0 1 e 24361 33 0 1 0 1 2 3 5 6 8 10 11 12 13 15 16 18 21 24 25 27 28 24362 33 0 1 e 24363 33 0 1 e 24364 33 0 1 e 24365 33 0 1 0 2 5 6 22 23 24 25 27 28 29 24366 33 0 1 e 24367 33 0 1 e 24368 33 0 1 e 24369 33 0 1 e 24370 33 0 1 e 24371 33 0 1 e 24372 33 0 1 e 24373 33 0 1 f 24374 33 0 1 e 24375 33 0 1 e 24376 33 0 1 e 24377 33 0 1 0 1 5 6 8 9 11 12 13 15 16 17 19 20 25 26 31 24378 33 0 1 e 24379 33 0 1 1 2 3 7 9 12 13 14 16 18 20 21 24 27 29 30 31 32 24380 33 0 1 e 24381 33 0 1 e 24382 33 0 1 e 24383 33 0 1 8 10 14 19 31 24384 33 1 0 e 24385 33 1 0 e 24386 33 1 0 e 24387 33 1 0 e 24388 33 1 0 e 24389 33 1 0 e 24390 33 1 0 e 24391 33 1 0 f 24392 33 1 0 e 24393 33 1 0 e 24394 33 1 0 e 24395 33 1 0 0 2 3 4 6 9 13 14 15 16 20 25 26 29 31 32 24396 33 1 0 e 24397 33 1 0 2 4 5 6 7 8 9 10 11 16 19 20 22 24 26 27 31 32 24398 33 1 0 e 24399 33 1 0 e 24400 33 1 0 e 24401 33 1 0 7 8 15 16 19 20 30 24402 33 1 0 e 24403 33 1 0 e 24404 33 1 0 e 24405 33 1 0 e 24406 33 1 0 e 24407 33 1 0 e 24408 33 1 0 e 24409 33 1 0 f 24410 33 1 0 e 24411 33 1 0 e 24412 33 1 0 e 24413 33 1 0 0 2 3 4 5 8 10 14 16 19 21 24 25 29 30 31 32 24414 33 1 0 e 24415 33 1 0 0 6 9 10 13 14 15 16 17 18 20 27 28 30 31 32 24416 33 1 0 e 24417 33 1 0 e 24418 33 1 0 e 24419 33 1 0 0 2 3 12 13 16 18 19 20 23 31 24420 33 1 0 e 24421 33 1 0 e 24422 33 1 0 e 24423 33 1 0 e 24424 33 1 0 e 24425 33 1 0 e 24426 33 1 0 e 24427 33 1 0 f 24428 33 1 0 e 24429 33 1 0 e 24430 33 1 0 e 24431 33 1 0 5 6 8 10 12 13 14 15 16 18 19 20 22 24 25 26 29 30 32 24432 33 1 0 e 24433 33 1 0 4 5 6 7 9 10 12 14 15 23 27 28 30 32 24434 33 1 0 e 24435 33 1 0 e 24436 33 1 0 e 24437 33 1 0 0 6 12 19 21 22 25 29 31 32 24438 33 1 0 e 24439 33 1 0 e 24440 33 1 0 e 24441 33 1 0 e 24442 33 1 0 e 24443 33 1 0 e 24444 33 1 0 e 24445 33 1 0 f 24446 33 1 0 e 24447 33 1 0 e 24448 33 1 0 e 24449 33 1 0 1 3 5 8 10 11 14 15 16 17 18 19 20 23 24 25 26 27 29 24450 33 1 0 e 24451 33 1 0 3 6 8 11 13 15 21 22 23 26 28 29 24452 33 1 0 e 24453 33 1 0 e 24454 33 1 0 e 24455 33 1 0 7 8 11 16 17 18 27 32 24456 33 1 1 e 24457 33 1 1 e 24458 33 1 1 e 24459 33 1 1 e 24460 33 1 1 e 24461 33 1 1 e 24462 33 1 1 e 24463 33 1 1 f 24464 33 1 1 e 24465 33 1 1 e 24466 33 1 1 e 24467 33 1 1 0 3 4 9 10 11 12 15 23 24 27 28 29 31 24468 33 1 1 e 24469 33 1 1 1 7 13 15 18 21 22 23 24 25 28 29 24470 33 1 1 e 24471 33 1 1 e 24472 33 1 1 e 24473 33 1 1 3 4 14 17 19 23 29 24474 33 1 1 e 24475 33 1 1 e 24476 33 1 1 e 24477 33 1 1 e 24478 33 1 1 e 24479 33 1 1 e 24480 33 1 1 e 24481 33 1 1 f 24482 33 1 1 e 24483 33 1 1 e 24484 33 1 1 e 24485 33 1 1 1 2 3 5 6 7 9 13 14 15 17 18 20 21 25 26 27 30 24486 33 1 1 e 24487 33 1 1 0 1 2 3 6 7 8 9 10 12 13 18 21 23 24 25 27 30 31 24488 33 1 1 e 24489 33 1 1 e 24490 33 1 1 e 24491 33 1 1 5 12 14 15 32 24492 33 1 1 e 24493 33 1 1 e 24494 33 1 1 e 24495 33 1 1 e 24496 33 1 1 e 24497 33 1 1 e 24498 33 1 1 e 24499 33 1 1 f 24500 33 1 1 e 24501 33 1 1 e 24502 33 1 1 e 24503 33 1 1 0 1 3 5 6 9 11 16 20 22 23 28 31 24504 33 1 1 e 24505 33 1 1 0 1 2 4 5 6 8 10 11 13 14 15 16 17 19 20 21 22 23 24 29 24506 33 1 1 e 24507 33 1 1 e 24508 33 1 1 e 24509 33 1 1 5 17 20 23 27 29 24510 33 1 1 e 24511 33 1 1 e 24512 33 1 1 e 24513 33 1 1 e 24514 33 1 1 e 24515 33 1 1 e 24516 33 1 1 e 24517 33 1 1 f 24518 33 1 1 e 24519 33 1 1 e 24520 33 1 1 e 24521 33 1 1 0 1 3 6 7 8 10 11 12 13 16 18 19 22 25 26 27 28 29 24522 33 1 1 e 24523 33 1 1 0 2 4 6 7 11 12 13 15 18 19 20 21 22 24 26 31 32 24524 33 1 1 e 24525 33 1 1 e 24526 33 1 1 e 24527 33 1 1 7 8 18 20 22 24 31 24528 63 0 0 e 24529 63 0 0 e 24530 63 0 0 e 24531 63 0 0 e 24532 63 0 0 e 24533 63 0 0 e 24534 63 0 0 e 24535 63 0 0 f 24536 63 0 0 e 24537 63 0 0 e 24538 63 0 0 e 24539 63 0 0 2 4 6 7 8 9 13 15 18 20 25 26 28 31 32 33 34 38 39 41 42 47 49 50 52 55 56 57 60 62 24540 63 0 0 e 24541 63 0 0 0 1 3 4 9 10 11 13 14 15 20 24 25 27 29 30 31 32 34 35 36 37 39 40 42 44 45 50 52 54 57 59 60 62 24542 63 0 0 e 24543 63 0 0 e 24544 63 0 0 e 24545 63 0 0 1 10 11 16 20 28 34 35 36 43 51 56 58 61 24546 63 0 0 e 24547 63 0 0 e 24548 63 0 0 e 24549 63 0 0 e 24550 63 0 0 e 24551 63 0 0 e 24552 63 0 0 e 24553 63 0 0 f 24554 63 0 0 e 24555 63 0 0 e 24556 63 0 0 e 24557 63 0 0 0 1 2 4 6 7 8 9 11 12 14 15 17 18 19 22 28 30 32 34 36 38 40 42 45 49 50 56 61 62 24558 63 0 0 e 24559 63 0 0 0 1 2 3 5 6 8 9 10 11 12 14 15 16 17 19 20 23 24 28 29 30 31 32 33 34 36 37 38 39 40 43 44 46 47 53 54 58 61 24560 63 0 0 e 24561 63 0 0 e 24562 63 0 0 e 24563 63 0 0 3 7 14 18 20 24 32 33 34 37 43 62 24564 63 0 0 e 24565 63 0 0 e 24566 63 0 0 e 24567 63 0 0 e 24568 63 0 0 e 24569 63 0 0 e 24570 63 0 0 e 24571 63 0 0 f 24572 63 0 0 e 24573 63 0 0 e 24574 63 0 0 e 24575 63 0 0 3 4 5 7 9 11 13 17 19 20 22 23 24 27 29 30 35 36 39 40 43 44 47 51 53 58 62 24576 63 0 0 e 24577 63 0 0 0 1 7 10 11 12 14 19 22 26 30 34 39 40 41 42 43 47 48 49 50 53 55 58 59 60 61 24578 63 0 0 e 24579 63 0 0 e 24580 63 0 0 e 24581 63 0 0 0 3 6 8 11 17 22 25 29 31 34 35 46 52 24582 63 0 0 e 24583 63 0 0 e 24584 63 0 0 e 24585 63 0 0 e 24586 63 0 0 e 24587 63 0 0 e 24588 63 0 0 e 24589 63 0 0 f 24590 63 0 0 e 24591 63 0 0 e 24592 63 0 0 e 24593 63 0 0 1 2 3 9 10 11 12 13 14 15 17 18 23 24 26 27 28 31 32 34 35 37 38 40 42 45 46 52 54 56 58 24594 63 0 0 e 24595 63 0 0 1 3 4 5 7 9 10 12 14 15 19 20 23 24 25 28 31 33 34 36 37 38 39 40 41 43 45 46 47 50 53 56 57 58 59 60 62 24596 63 0 0 e 24597 63 0 0 e 24598 63 0 0 e 24599 63 0 0 0 6 7 8 13 14 16 21 28 34 35 40 49 56 61 62 24600 63 0 1 e 24601 63 0 1 e 24602 63 0 1 e 24603 63 0 1 e 24604 63 0 1 e 24605 63 0 1 e 24606 63 0 1 e 24607 63 0 1 f 24608 63 0 1 e 24609 63 0 1 e 24610 63 0 1 e 24611 63 0 1 0 1 2 3 6 9 12 16 18 19 20 21 27 30 31 32 35 37 38 41 43 44 46 48 49 50 57 60 61 62 24612 63 0 1 e 24613 63 0 1 0 4 6 7 12 14 15 16 18 20 21 23 24 25 26 30 33 34 37 39 41 44 45 46 47 49 52 54 55 57 60 61 62 24614 63 0 1 e 24615 63 0 1 e 24616 63 0 1 e 24617 63 0 1 9 13 18 19 24 25 27 29 30 36 39 41 42 46 48 50 60 24618 63 0 1 e 24619 63 0 1 e 24620 63 0 1 e 24621 63 0 1 e 24622 63 0 1 e 24623 63 0 1 e 24624 63 0 1 e 24625 63 0 1 f 24626 63 0 1 e 24627 63 0 1 e 24628 63 0 1 e 24629 63 0 1 3 7 8 9 10 13 16 17 18 19 20 23 24 25 26 28 31 32 33 35 36 38 39 40 42 45 47 49 50 51 53 55 57 58 59 24630 63 0 1 e 24631 63 0 1 3 4 9 10 12 17 18 19 20 21 22 23 24 25 27 28 30 32 38 39 44 45 46 47 48 50 57 60 61 62 24632 63 0 1 e 24633 63 0 1 e 24634 63 0 1 e 24635 63 0 1 1 13 14 20 23 24 25 28 34 38 42 43 46 47 54 57 24636 63 0 1 e 24637 63 0 1 e 24638 63 0 1 e 24639 63 0 1 e 24640 63 0 1 e 24641 63 0 1 e 24642 63 0 1 e 24643 63 0 1 f 24644 63 0 1 e 24645 63 0 1 e 24646 63 0 1 e 24647 63 0 1 0 1 2 3 8 11 12 13 14 18 19 21 24 26 27 31 32 33 35 36 38 40 42 44 45 48 49 50 51 52 53 54 56 58 59 61 24648 63 0 1 e 24649 63 0 1 1 2 4 6 7 8 9 10 11 12 14 15 16 17 24 27 28 29 30 34 36 39 42 44 45 47 48 50 52 55 56 57 58 59 60 62 24650 63 0 1 e 24651 63 0 1 e 24652 63 0 1 e 24653 63 0 1 1 3 4 7 9 10 11 13 22 28 31 32 36 40 42 43 47 52 55 58 59 61 62 24654 63 0 1 e 24655 63 0 1 e 24656 63 0 1 e 24657 63 0 1 e 24658 63 0 1 e 24659 63 0 1 e 24660 63 0 1 e 24661 63 0 1 f 24662 63 0 1 e 24663 63 0 1 e 24664 63 0 1 e 24665 63 0 1 1 3 4 6 10 14 20 22 24 26 27 32 37 39 40 41 42 43 44 45 47 48 50 51 52 54 58 61 62 24666 63 0 1 e 24667 63 0 1 1 4 5 6 13 15 18 19 20 21 22 25 26 29 30 31 32 34 35 37 38 42 43 47 48 54 55 57 58 59 60 61 24668 63 0 1 e 24669 63 0 1 e 24670 63 0 1 e 24671 63 0 1 0 12 17 21 22 27 33 35 41 45 48 53 54 56 57 58 59 24672 63 1 0 e 24673 63 1 0 e 24674 63 1 0 e 24675 63 1 0 e 24676 63 1 0 e 24677 63 1 0 e 24678 63 1 0 e 24679 63 1 0 f 24680 63 1 0 e 24681 63 1 0 e 24682 63 1 0 e 24683 63 1 0 0 1 3 4 5 6 8 11 17 18 24 25 26 30 31 33 35 37 38 40 42 43 48 49 51 53 54 55 58 60 62 24684 63 1 0 e 24685 63 1 0 1 3 4 5 6 7 8 9 10 12 13 19 21 22 23 24 25 27 29 31 32 33 35 42 45 46 47 49 50 51 52 53 54 59 24686 63 1 0 e 24687 63 1 0 e 24688 63 1 0 e 24689 63 1 0 2 5 7 9 18 22 23 35 37 38 39 40 41 43 45 47 54 57 61 62 24690 63 1 0 e 24691 63 1 0 e 24692 63 1 0 e 24693 63 1 0 e 24694 63 1 0 e 24695 63 1 0 e 24696 63 1 0 e 24697 63 1 0 f 24698 63 1 0 e 24699 63 1 0 e 24700 63 1 0 e 24701 63 1 0 0 3 4 8 9 11 14 15 17 20 22 26 29 30 32 33 34 36 37 42 45 46 49 52 53 56 57 60 61 24702 63 1 0 e 24703 63 1 0 0 4 9 10 11 12 16 19 20 22 23 24 26 27 28 29 30 33 34 38 39 42 43 44 45 47 49 50 53 54 55 56 57 58 59 60 24704 63 1 0 e 24705 63 1 0 e 24706 63 1 0 e 24707 63 1 0 1 8 10 12 18 23 31 35 36 46 53 54 56 24708 63 1 0 e 24709 63 1 0 e 24710 63 1 0 e 24711 63 1 0 e 24712 63 1 0 e 24713 63 1 0 e 24714 63 1 0 e 24715 63 1 0 f 24716 63 1 0 e 24717 63 1 0 e 24718 63 1 0 e 24719 63 1 0 1 6 7 8 10 11 12 13 15 16 17 19 21 26 28 29 30 31 32 33 34 35 37 39 40 41 44 45 46 49 54 59 62 24720 63 1 0 e 24721 63 1 0 2 3 6 7 8 9 11 13 16 17 19 24 25 26 28 29 30 36 41 43 44 46 47 51 53 54 56 57 58 59 60 24722 63 1 0 e 24723 63 1 0 e 24724 63 1 0 e 24725 63 1 0 3 10 18 23 28 30 34 35 36 49 52 54 57 59 61 24726 63 1 0 e 24727 63 1 0 e 24728 63 1 0 e 24729 63 1 0 e 24730 63 1 0 e 24731 63 1 0 e 24732 63 1 0 e 24733 63 1 0 f 24734 63 1 0 e 24735 63 1 0 e 24736 63 1 0 e 24737 63 1 0 1 5 6 9 11 12 15 17 19 21 23 25 28 29 30 31 35 36 37 38 41 42 43 44 46 48 49 50 52 53 54 55 57 58 60 62 24738 63 1 0 e 24739 63 1 0 1 3 4 7 9 12 14 15 20 21 22 25 26 30 31 33 37 39 44 49 50 52 58 59 60 62 24740 63 1 0 e 24741 63 1 0 e 24742 63 1 0 e 24743 63 1 0 2 10 15 16 23 35 36 51 56 58 59 24744 63 1 1 e 24745 63 1 1 e 24746 63 1 1 e 24747 63 1 1 e 24748 63 1 1 e 24749 63 1 1 e 24750 63 1 1 e 24751 63 1 1 f 24752 63 1 1 e 24753 63 1 1 e 24754 63 1 1 e 24755 63 1 1 1 2 3 8 10 11 12 15 16 18 19 21 22 23 24 25 26 27 29 30 35 36 38 42 43 47 50 51 52 55 56 57 59 24756 63 1 1 e 24757 63 1 1 1 2 3 5 8 14 15 17 19 21 23 25 31 34 38 40 42 44 45 47 48 50 51 54 55 56 60 61 24758 63 1 1 e 24759 63 1 1 e 24760 63 1 1 e 24761 63 1 1 3 4 7 8 12 14 17 20 22 28 30 37 48 55 58 24762 63 1 1 e 24763 63 1 1 e 24764 63 1 1 e 24765 63 1 1 e 24766 63 1 1 e 24767 63 1 1 e 24768 63 1 1 e 24769 63 1 1 f 24770 63 1 1 e 24771 63 1 1 e 24772 63 1 1 e 24773 63 1 1 0 1 2 8 9 10 12 15 16 18 20 21 23 24 25 29 30 31 34 40 41 47 48 49 50 52 53 54 58 59 60 24774 63 1 1 e 24775 63 1 1 1 2 4 5 7 15 16 20 22 23 25 27 31 35 38 39 40 48 49 50 51 54 57 61 24776 63 1 1 e 24777 63 1 1 e 24778 63 1 1 e 24779 63 1 1 10 15 16 19 24 37 44 46 48 57 59 62 24780 63 1 1 e 24781 63 1 1 e 24782 63 1 1 e 24783 63 1 1 e 24784 63 1 1 e 24785 63 1 1 e 24786 63 1 1 e 24787 63 1 1 f 24788 63 1 1 e 24789 63 1 1 e 24790 63 1 1 e 24791 63 1 1 1 2 3 5 7 11 13 15 17 19 21 22 23 24 25 26 29 30 33 34 42 43 44 45 47 49 50 54 56 57 59 61 62 24792 63 1 1 e 24793 63 1 1 0 1 3 4 6 7 9 10 11 12 16 17 18 19 20 21 22 23 26 27 29 30 32 36 37 40 42 43 46 49 54 55 56 57 60 62 24794 63 1 1 e 24795 63 1 1 e 24796 63 1 1 e 24797 63 1 1 0 5 19 24 25 30 33 34 35 38 47 49 55 60 61 24798 63 1 1 e 24799 63 1 1 e 24800 63 1 1 e 24801 63 1 1 e 24802 63 1 1 e 24803 63 1 1 e 24804 63 1 1 e 24805 63 1 1 f 24806 63 1 1 e 24807 63 1 1 e 24808 63 1 1 e 24809 63 1 1 0 1 3 6 8 9 11 14 16 19 20 21 24 25 27 31 32 35 37 39 40 43 45 48 50 52 53 55 57 60 24810 63 1 1 e 24811 63 1 1 1 2 3 4 5 6 9 11 14 16 17 18 20 21 24 25 28 37 38 39 40 44 46 48 50 51 56 57 58 59 24812 63 1 1 e 24813 63 1 1 e 24814 63 1 1 e 24815 63 1 1 2 4 17 21 22 31 33 37 42 43 52 53 54 57 58 61 24816 64 0 0 e 24817 64 0 0 e 24818 64 0 0 e 24819 64 0 0 e 24820 64 0 0 e 24821 64 0 0 e 24822 64 0 0 e 24823 64 0 0 f 24824 64 0 0 e 24825 64 0 0 e 24826 64 0 0 e 24827 64 0 0 2 3 5 6 14 15 17 19 20 23 25 28 29 30 34 36 38 39 41 44 45 46 49 50 51 54 56 57 60 61 63 24828 64 0 0 e 24829 64 0 0 1 3 4 5 12 15 16 17 18 19 20 22 24 25 26 29 30 31 32 33 34 36 37 38 39 43 44 45 46 48 49 53 54 55 56 57 59 61 62 24830 64 0 0 e 24831 64 0 0 e 24832 64 0 0 e 24833 64 0 0 6 7 14 18 20 29 32 34 37 38 39 53 57 60 62 24834 64 0 0 e 24835 64 0 0 e 24836 64 0 0 e 24837 64 0 0 e 24838 64 0 0 e 24839 64 0 0 e 24840 64 0 0 e 24841 64 0 0 f 24842 64 0 0 e 24843 64 0 0 e 24844 64 0 0 e 24845 64 0 0 0 3 5 7 10 12 15 16 17 18 22 23 24 27 30 31 33 35 37 40 41 42 45 46 47 53 56 58 59 63 24846 64 0 0 e 24847 64 0 0 2 4 5 9 12 13 15 16 20 25 26 28 29 30 33 34 36 38 39 40 43 45 46 47 52 53 54 56 57 59 63 24848 64 0 0 e 24849 64 0 0 e 24850 64 0 0 e 24851 64 0 0 2 3 4 5 7 10 12 14 20 33 34 35 36 39 43 45 50 59 60 61 63 24852 64 0 0 e 24853 64 0 0 e 24854 64 0 0 e 24855 64 0 0 e 24856 64 0 0 e 24857 64 0 0 e 24858 64 0 0 e 24859 64 0 0 f 24860 64 0 0 e 24861 64 0 0 e 24862 64 0 0 e 24863 64 0 0 0 2 7 8 9 11 13 14 23 25 29 31 32 33 34 35 36 39 40 41 43 45 48 51 55 56 57 58 61 62 24864 64 0 0 e 24865 64 0 0 0 5 6 7 9 14 15 16 17 18 19 21 23 25 26 27 29 30 35 38 39 40 42 45 46 48 49 52 54 55 57 58 60 61 62 24866 64 0 0 e 24867 64 0 0 e 24868 64 0 0 e 24869 64 0 0 4 8 15 26 29 33 34 35 37 40 41 42 47 55 56 57 58 60 62 63 24870 64 0 0 e 24871 64 0 0 e 24872 64 0 0 e 24873 64 0 0 e 24874 64 0 0 e 24875 64 0 0 e 24876 64 0 0 e 24877 64 0 0 f 24878 64 0 0 e 24879 64 0 0 e 24880 64 0 0 e 24881 64 0 0 1 7 13 14 18 19 20 21 23 24 25 26 28 31 34 37 39 42 46 51 52 54 56 60 63 24882 64 0 0 e 24883 64 0 0 0 3 8 11 13 14 15 16 17 20 21 26 27 29 33 34 35 36 39 40 42 43 45 46 47 52 56 59 61 63 24884 64 0 0 e 24885 64 0 0 e 24886 64 0 0 e 24887 64 0 0 4 9 20 25 26 27 29 32 34 42 43 47 49 54 60 61 62 24888 64 0 1 e 24889 64 0 1 e 24890 64 0 1 e 24891 64 0 1 e 24892 64 0 1 e 24893 64 0 1 e 24894 64 0 1 e 24895 64 0 1 f 24896 64 0 1 e 24897 64 0 1 e 24898 64 0 1 e 24899 64 0 1 0 8 9 12 15 19 20 22 26 27 28 29 31 32 34 35 38 39 40 46 48 53 56 57 59 24900 64 0 1 e 24901 64 0 1 0 3 7 12 13 16 19 23 24 27 30 33 35 37 39 40 41 43 44 45 48 49 53 59 60 61 24902 64 0 1 e 24903 64 0 1 e 24904 64 0 1 e 24905 64 0 1 7 10 11 12 17 19 28 30 35 39 40 42 44 45 52 55 24906 64 0 1 e 24907 64 0 1 e 24908 64 0 1 e 24909 64 0 1 e 24910 64 0 1 e 24911 64 0 1 e 24912 64 0 1 e 24913 64 0 1 f 24914 64 0 1 e 24915 64 0 1 e 24916 64 0 1 e 24917 64 0 1 3 8 9 10 11 14 16 20 21 23 24 25 34 36 37 41 42 43 46 47 48 49 54 55 56 58 59 24918 64 0 1 e 24919 64 0 1 0 2 5 6 8 10 11 12 16 19 20 21 24 27 30 32 33 40 43 45 48 49 50 51 56 57 58 61 63 24920 64 0 1 e 24921 64 0 1 e 24922 64 0 1 e 24923 64 0 1 0 1 2 3 5 6 7 19 20 24 25 30 35 39 40 42 46 54 61 24924 64 0 1 e 24925 64 0 1 e 24926 64 0 1 e 24927 64 0 1 e 24928 64 0 1 e 24929 64 0 1 e 24930 64 0 1 e 24931 64 0 1 f 24932 64 0 1 e 24933 64 0 1 e 24934 64 0 1 e 24935 64 0 1 0 1 3 5 7 8 9 10 13 15 16 17 20 22 24 28 29 30 31 33 35 39 41 46 47 48 49 50 51 54 55 57 58 59 24936 64 0 1 e 24937 64 0 1 1 8 11 13 15 16 17 19 20 21 23 26 29 30 34 35 40 41 42 44 46 47 48 50 51 52 53 59 63 24938 64 0 1 e 24939 64 0 1 e 24940 64 0 1 e 24941 64 0 1 4 5 6 17 19 27 28 34 43 60 24942 64 0 1 e 24943 64 0 1 e 24944 64 0 1 e 24945 64 0 1 e 24946 64 0 1 e 24947 64 0 1 e 24948 64 0 1 e 24949 64 0 1 f 24950 64 0 1 e 24951 64 0 1 e 24952 64 0 1 e 24953 64 0 1 0 1 2 3 4 8 10 14 15 16 17 20 21 22 24 25 28 30 32 34 35 37 38 39 42 45 46 47 49 50 51 54 55 58 59 61 24954 64 0 1 e 24955 64 0 1 3 5 8 11 12 13 14 15 18 20 22 23 27 28 30 31 34 35 40 41 43 44 50 52 53 55 57 58 59 60 61 62 24956 64 0 1 e 24957 64 0 1 e 24958 64 0 1 e 24959 64 0 1 1 5 10 21 24 25 27 29 30 31 34 43 47 60 63 24960 64 1 0 e 24961 64 1 0 e 24962 64 1 0 e 24963 64 1 0 e 24964 64 1 0 e 24965 64 1 0 e 24966 64 1 0 e 24967 64 1 0 f 24968 64 1 0 e 24969 64 1 0 e 24970 64 1 0 e 24971 64 1 0 0 1 8 10 11 12 15 16 18 21 22 23 26 27 28 29 30 33 35 36 38 46 47 53 54 56 57 61 24972 64 1 0 e 24973 64 1 0 0 1 3 6 9 11 12 13 15 18 20 21 28 32 36 38 40 41 43 44 48 50 53 54 55 57 59 24974 64 1 0 e 24975 64 1 0 e 24976 64 1 0 e 24977 64 1 0 2 7 15 22 30 31 32 37 39 40 44 45 62 63 24978 64 1 0 e 24979 64 1 0 e 24980 64 1 0 e 24981 64 1 0 e 24982 64 1 0 e 24983 64 1 0 e 24984 64 1 0 e 24985 64 1 0 f 24986 64 1 0 e 24987 64 1 0 e 24988 64 1 0 e 24989 64 1 0 3 5 10 12 17 18 20 22 25 30 33 34 36 37 38 39 40 42 45 48 49 54 56 57 59 60 61 62 63 24990 64 1 0 e 24991 64 1 0 1 2 3 12 13 18 24 25 26 27 29 31 32 34 35 36 37 41 42 44 47 51 52 55 57 58 59 60 61 63 24992 64 1 0 e 24993 64 1 0 e 24994 64 1 0 e 24995 64 1 0 3 9 12 14 16 17 21 25 31 38 45 49 24996 64 1 0 e 24997 64 1 0 e 24998 64 1 0 e 24999 64 1 0 e 25000 64 1 0 e 25001 64 1 0 e 25002 64 1 0 e 25003 64 1 0 f 25004 64 1 0 e 25005 64 1 0 e 25006 64 1 0 e 25007 64 1 0 1 2 4 6 8 9 10 11 13 14 17 18 19 20 21 23 25 26 27 28 30 31 33 34 35 36 38 40 45 49 50 52 54 55 56 60 62 63 25008 64 1 0 e 25009 64 1 0 1 2 3 4 7 10 12 13 14 15 16 18 21 22 23 24 25 26 28 30 33 34 35 38 40 41 42 43 44 45 46 47 48 54 56 57 59 60 62 25010 64 1 0 e 25011 64 1 0 e 25012 64 1 0 e 25013 64 1 0 0 18 20 22 28 33 36 46 50 52 58 25014 64 1 0 e 25015 64 1 0 e 25016 64 1 0 e 25017 64 1 0 e 25018 64 1 0 e 25019 64 1 0 e 25020 64 1 0 e 25021 64 1 0 f 25022 64 1 0 e 25023 64 1 0 e 25024 64 1 0 e 25025 64 1 0 1 3 4 5 6 9 11 12 14 17 18 19 22 23 27 31 32 35 37 38 40 41 42 48 50 51 55 57 59 60 25026 64 1 0 e 25027 64 1 0 1 4 8 9 11 12 13 14 16 18 19 20 23 24 25 28 32 34 35 36 39 41 44 46 47 52 53 55 56 60 61 62 63 25028 64 1 0 e 25029 64 1 0 e 25030 64 1 0 e 25031 64 1 0 1 6 7 9 11 19 20 21 36 39 42 49 50 53 54 55 56 57 62 25032 64 1 1 e 25033 64 1 1 e 25034 64 1 1 e 25035 64 1 1 e 25036 64 1 1 e 25037 64 1 1 e 25038 64 1 1 e 25039 64 1 1 f 25040 64 1 1 e 25041 64 1 1 e 25042 64 1 1 e 25043 64 1 1 1 3 4 7 8 11 12 14 15 19 20 21 23 25 28 31 33 34 35 36 37 38 41 43 44 45 49 50 51 56 58 60 61 63 25044 64 1 1 e 25045 64 1 1 0 2 4 6 7 9 10 11 13 14 17 20 22 24 28 30 32 33 34 36 37 40 43 44 45 48 49 51 52 55 56 57 59 60 63 25046 64 1 1 e 25047 64 1 1 e 25048 64 1 1 e 25049 64 1 1 3 11 16 21 22 26 27 29 33 40 44 50 58 62 63 25050 64 1 1 e 25051 64 1 1 e 25052 64 1 1 e 25053 64 1 1 e 25054 64 1 1 e 25055 64 1 1 e 25056 64 1 1 e 25057 64 1 1 f 25058 64 1 1 e 25059 64 1 1 e 25060 64 1 1 e 25061 64 1 1 0 2 4 7 12 19 20 24 25 27 28 29 32 33 38 43 48 50 52 53 56 57 58 61 63 25062 64 1 1 e 25063 64 1 1 1 4 9 10 12 13 17 18 19 21 22 23 26 29 30 31 32 33 37 38 39 40 41 45 46 47 48 49 50 53 54 55 57 58 59 61 62 25064 64 1 1 e 25065 64 1 1 e 25066 64 1 1 e 25067 64 1 1 1 3 7 14 15 22 23 29 34 36 38 39 43 57 25068 64 1 1 e 25069 64 1 1 e 25070 64 1 1 e 25071 64 1 1 e 25072 64 1 1 e 25073 64 1 1 e 25074 64 1 1 e 25075 64 1 1 f 25076 64 1 1 e 25077 64 1 1 e 25078 64 1 1 e 25079 64 1 1 2 3 5 6 7 9 12 13 14 16 17 18 22 23 26 30 34 36 38 43 44 45 49 50 52 55 56 57 58 59 60 61 62 63 25080 64 1 1 e 25081 64 1 1 11 12 15 16 17 20 22 24 25 26 27 29 31 35 36 37 38 44 45 46 47 48 52 54 55 58 59 61 63 25082 64 1 1 e 25083 64 1 1 e 25084 64 1 1 e 25085 64 1 1 2 9 13 17 25 26 33 41 50 52 53 57 63 25086 64 1 1 e 25087 64 1 1 e 25088 64 1 1 e 25089 64 1 1 e 25090 64 1 1 e 25091 64 1 1 e 25092 64 1 1 e 25093 64 1 1 f 25094 64 1 1 e 25095 64 1 1 e 25096 64 1 1 e 25097 64 1 1 1 3 4 7 12 13 15 17 18 19 20 22 23 26 28 29 30 33 34 36 37 38 39 40 41 44 47 48 49 51 52 55 57 58 60 63 25098 64 1 1 e 25099 64 1 1 4 6 8 9 14 15 16 21 22 25 27 28 30 31 32 35 36 40 42 44 48 50 54 55 57 63 25100 64 1 1 e 25101 64 1 1 e 25102 64 1 1 e 25103 64 1 1 0 4 10 13 15 16 19 22 27 29 32 33 36 38 39 43 44 46 52 54 58 59 63 25104 65 0 0 e 25105 65 0 0 e 25106 65 0 0 e 25107 65 0 0 e 25108 65 0 0 e 25109 65 0 0 e 25110 65 0 0 e 25111 65 0 0 f 25112 65 0 0 e 25113 65 0 0 e 25114 65 0 0 e 25115 65 0 0 2 4 12 15 16 20 22 24 25 26 30 31 33 34 35 36 37 38 39 43 46 49 51 52 53 54 59 63 64 25116 65 0 0 e 25117 65 0 0 1 2 3 4 5 6 7 8 9 10 11 13 14 15 16 19 22 24 26 27 31 41 43 44 46 51 59 60 61 63 25118 65 0 0 e 25119 65 0 0 e 25120 65 0 0 e 25121 65 0 0 2 6 7 13 17 19 20 21 24 28 29 33 38 41 48 49 63 25122 65 0 0 e 25123 65 0 0 e 25124 65 0 0 e 25125 65 0 0 e 25126 65 0 0 e 25127 65 0 0 e 25128 65 0 0 e 25129 65 0 0 f 25130 65 0 0 e 25131 65 0 0 e 25132 65 0 0 e 25133 65 0 0 10 11 12 13 14 17 18 19 20 22 24 26 27 29 30 31 32 33 34 35 36 37 39 40 41 45 47 49 51 52 53 54 57 61 62 63 25134 65 0 0 e 25135 65 0 0 0 5 7 8 10 11 12 14 17 23 26 27 29 30 35 37 38 39 41 42 44 45 48 49 50 51 54 59 61 63 25136 65 0 0 e 25137 65 0 0 e 25138 65 0 0 e 25139 65 0 0 5 10 13 16 23 25 30 37 38 39 43 47 54 55 58 64 25140 65 0 0 e 25141 65 0 0 e 25142 65 0 0 e 25143 65 0 0 e 25144 65 0 0 e 25145 65 0 0 e 25146 65 0 0 e 25147 65 0 0 f 25148 65 0 0 e 25149 65 0 0 e 25150 65 0 0 e 25151 65 0 0 0 2 3 4 7 10 11 14 15 17 18 21 23 25 30 31 37 38 40 42 46 47 48 50 52 53 54 55 56 57 58 59 62 25152 65 0 0 e 25153 65 0 0 1 2 3 5 6 7 9 10 19 20 21 23 24 26 27 28 29 34 35 36 37 38 40 44 45 46 50 52 55 56 58 59 60 62 25154 65 0 0 e 25155 65 0 0 e 25156 65 0 0 e 25157 65 0 0 7 11 15 21 22 29 32 38 39 45 48 49 50 55 60 61 25158 65 0 0 e 25159 65 0 0 e 25160 65 0 0 e 25161 65 0 0 e 25162 65 0 0 e 25163 65 0 0 e 25164 65 0 0 e 25165 65 0 0 f 25166 65 0 0 e 25167 65 0 0 e 25168 65 0 0 e 25169 65 0 0 0 1 2 3 4 6 8 9 11 12 13 16 18 19 20 22 25 26 27 30 31 32 34 35 38 39 40 41 44 49 50 51 52 54 55 56 57 58 59 60 62 25170 65 0 0 e 25171 65 0 0 0 2 3 6 7 8 9 11 13 15 17 18 19 20 24 26 27 28 29 30 31 32 33 34 36 37 39 42 43 46 47 48 49 50 51 52 53 55 64 25172 65 0 0 e 25173 65 0 0 e 25174 65 0 0 e 25175 65 0 0 1 15 20 23 25 31 42 47 50 52 53 55 56 58 64 25176 65 0 1 e 25177 65 0 1 e 25178 65 0 1 e 25179 65 0 1 e 25180 65 0 1 e 25181 65 0 1 e 25182 65 0 1 e 25183 65 0 1 f 25184 65 0 1 e 25185 65 0 1 e 25186 65 0 1 e 25187 65 0 1 0 1 2 3 7 11 14 15 18 19 20 24 27 30 31 33 36 38 39 40 43 46 47 51 54 55 57 61 62 25188 65 0 1 e 25189 65 0 1 0 1 3 4 5 7 10 12 15 16 17 18 19 20 27 32 33 35 38 39 40 41 43 44 45 46 47 48 49 50 51 54 55 58 59 64 25190 65 0 1 e 25191 65 0 1 e 25192 65 0 1 e 25193 65 0 1 0 6 18 22 23 27 30 31 33 37 38 45 51 55 56 57 60 61 63 64 25194 65 0 1 e 25195 65 0 1 e 25196 65 0 1 e 25197 65 0 1 e 25198 65 0 1 e 25199 65 0 1 e 25200 65 0 1 e 25201 65 0 1 f 25202 65 0 1 e 25203 65 0 1 e 25204 65 0 1 e 25205 65 0 1 0 1 2 4 6 8 10 14 15 16 19 21 23 25 26 31 32 33 34 35 36 37 38 39 40 42 43 49 50 53 54 56 59 64 25206 65 0 1 e 25207 65 0 1 0 4 5 6 12 16 17 19 23 25 26 27 28 29 31 33 35 36 41 42 44 45 46 47 48 50 52 57 59 60 62 63 25208 65 0 1 e 25209 65 0 1 e 25210 65 0 1 e 25211 65 0 1 0 3 4 6 8 11 12 18 19 24 25 30 37 41 43 59 60 62 63 64 25212 65 0 1 e 25213 65 0 1 e 25214 65 0 1 e 25215 65 0 1 e 25216 65 0 1 e 25217 65 0 1 e 25218 65 0 1 e 25219 65 0 1 f 25220 65 0 1 e 25221 65 0 1 e 25222 65 0 1 e 25223 65 0 1 4 7 11 15 18 20 22 24 25 26 27 30 33 34 36 37 38 39 46 48 50 54 55 56 59 61 62 63 25224 65 0 1 e 25225 65 0 1 0 3 4 5 6 7 8 9 11 16 17 19 21 24 25 28 29 31 33 34 35 36 37 38 39 40 42 45 46 48 50 54 56 58 59 60 62 25226 65 0 1 e 25227 65 0 1 e 25228 65 0 1 e 25229 65 0 1 4 5 11 15 19 25 26 31 34 39 43 44 45 52 54 59 60 25230 65 0 1 e 25231 65 0 1 e 25232 65 0 1 e 25233 65 0 1 e 25234 65 0 1 e 25235 65 0 1 e 25236 65 0 1 e 25237 65 0 1 f 25238 65 0 1 e 25239 65 0 1 e 25240 65 0 1 e 25241 65 0 1 4 5 6 10 12 15 16 17 18 20 23 26 27 29 30 32 33 37 38 40 46 47 48 49 52 55 57 61 62 25242 65 0 1 e 25243 65 0 1 1 2 5 6 8 11 12 14 17 18 20 21 24 25 26 27 29 30 31 32 35 37 39 42 44 45 50 55 58 59 61 25244 65 0 1 e 25245 65 0 1 e 25246 65 0 1 e 25247 65 0 1 1 4 9 10 15 21 22 28 31 32 35 36 37 41 48 50 57 59 60 25248 65 1 0 e 25249 65 1 0 e 25250 65 1 0 e 25251 65 1 0 e 25252 65 1 0 e 25253 65 1 0 e 25254 65 1 0 e 25255 65 1 0 f 25256 65 1 0 e 25257 65 1 0 e 25258 65 1 0 e 25259 65 1 0 0 1 2 3 5 7 12 14 17 18 19 20 24 25 26 27 30 32 34 35 37 40 41 44 47 48 56 57 58 60 64 25260 65 1 0 e 25261 65 1 0 1 3 4 6 8 9 10 11 19 20 30 31 35 41 43 45 52 53 56 57 62 25262 65 1 0 e 25263 65 1 0 e 25264 65 1 0 e 25265 65 1 0 5 7 22 25 30 36 47 48 56 59 61 62 64 25266 65 1 0 e 25267 65 1 0 e 25268 65 1 0 e 25269 65 1 0 e 25270 65 1 0 e 25271 65 1 0 e 25272 65 1 0 e 25273 65 1 0 f 25274 65 1 0 e 25275 65 1 0 e 25276 65 1 0 e 25277 65 1 0 0 4 5 8 9 10 11 12 14 16 17 20 22 23 25 26 27 30 31 33 35 38 40 41 42 44 45 46 47 49 50 51 52 54 55 61 25278 65 1 0 e 25279 65 1 0 0 3 7 8 9 13 14 15 19 20 21 22 24 25 27 28 29 30 31 34 35 36 37 38 40 41 42 44 45 47 48 49 50 51 52 53 55 56 58 63 64 25280 65 1 0 e 25281 65 1 0 e 25282 65 1 0 e 25283 65 1 0 8 10 11 28 30 32 36 45 47 48 52 61 63 64 25284 65 1 0 e 25285 65 1 0 e 25286 65 1 0 e 25287 65 1 0 e 25288 65 1 0 e 25289 65 1 0 e 25290 65 1 0 e 25291 65 1 0 f 25292 65 1 0 e 25293 65 1 0 e 25294 65 1 0 e 25295 65 1 0 1 3 4 6 7 8 9 14 15 19 20 21 24 25 27 28 31 32 37 38 41 50 52 53 55 57 59 60 25296 65 1 0 e 25297 65 1 0 1 3 7 10 13 14 17 20 21 24 26 29 31 32 33 37 38 41 42 45 46 47 48 54 55 56 61 62 63 25298 65 1 0 e 25299 65 1 0 e 25300 65 1 0 e 25301 65 1 0 2 3 7 8 13 15 20 22 23 24 32 35 39 40 58 61 25302 65 1 0 e 25303 65 1 0 e 25304 65 1 0 e 25305 65 1 0 e 25306 65 1 0 e 25307 65 1 0 e 25308 65 1 0 e 25309 65 1 0 f 25310 65 1 0 e 25311 65 1 0 e 25312 65 1 0 e 25313 65 1 0 1 3 5 10 11 12 14 18 21 22 23 26 31 32 35 36 37 39 40 41 43 44 46 52 53 55 57 58 60 62 25314 65 1 0 e 25315 65 1 0 0 1 2 4 6 8 11 12 14 17 18 19 20 21 22 26 28 30 31 33 37 38 43 44 48 50 51 53 54 57 58 59 61 62 63 64 25316 65 1 0 e 25317 65 1 0 e 25318 65 1 0 e 25319 65 1 0 0 3 9 11 17 19 28 34 40 41 42 43 44 56 63 64 25320 65 1 1 e 25321 65 1 1 e 25322 65 1 1 e 25323 65 1 1 e 25324 65 1 1 e 25325 65 1 1 e 25326 65 1 1 e 25327 65 1 1 f 25328 65 1 1 e 25329 65 1 1 e 25330 65 1 1 e 25331 65 1 1 1 2 3 5 10 11 13 14 19 20 24 30 32 34 35 36 37 40 41 42 43 46 47 48 49 53 55 56 59 60 61 62 64 25332 65 1 1 e 25333 65 1 1 0 1 4 6 8 10 11 15 18 19 20 21 22 23 24 29 30 32 35 36 39 43 44 45 46 47 48 50 51 53 54 56 57 58 60 61 62 63 64 25334 65 1 1 e 25335 65 1 1 e 25336 65 1 1 e 25337 65 1 1 1 11 13 19 25 39 40 44 48 58 59 60 61 62 63 25338 65 1 1 e 25339 65 1 1 e 25340 65 1 1 e 25341 65 1 1 e 25342 65 1 1 e 25343 65 1 1 e 25344 65 1 1 e 25345 65 1 1 f 25346 65 1 1 e 25347 65 1 1 e 25348 65 1 1 e 25349 65 1 1 2 3 4 6 11 12 13 14 15 16 17 18 20 22 24 25 26 28 29 32 33 34 41 42 43 47 49 51 53 55 56 57 58 60 64 25350 65 1 1 e 25351 65 1 1 3 6 7 8 9 12 13 15 16 17 18 19 20 23 24 27 28 30 32 35 37 38 40 42 43 44 46 47 48 49 50 51 54 55 58 61 62 64 25352 65 1 1 e 25353 65 1 1 e 25354 65 1 1 e 25355 65 1 1 1 5 6 12 15 16 18 20 24 31 34 36 41 44 51 55 25356 65 1 1 e 25357 65 1 1 e 25358 65 1 1 e 25359 65 1 1 e 25360 65 1 1 e 25361 65 1 1 e 25362 65 1 1 e 25363 65 1 1 f 25364 65 1 1 e 25365 65 1 1 e 25366 65 1 1 e 25367 65 1 1 0 2 3 6 7 13 15 17 19 20 26 28 29 30 31 37 38 41 46 47 48 60 61 62 63 64 25368 65 1 1 e 25369 65 1 1 1 2 5 12 13 15 16 20 23 24 28 31 35 37 39 42 46 47 48 51 52 53 54 55 56 57 58 59 62 63 64 25370 65 1 1 e 25371 65 1 1 e 25372 65 1 1 e 25373 65 1 1 12 18 27 32 35 36 39 44 47 50 53 59 62 63 25374 65 1 1 e 25375 65 1 1 e 25376 65 1 1 e 25377 65 1 1 e 25378 65 1 1 e 25379 65 1 1 e 25380 65 1 1 e 25381 65 1 1 f 25382 65 1 1 e 25383 65 1 1 e 25384 65 1 1 e 25385 65 1 1 4 5 6 7 9 10 11 12 13 14 15 16 18 20 21 22 23 24 27 28 29 32 36 40 41 42 47 48 49 50 54 55 57 63 25386 65 1 1 e 25387 65 1 1 0 1 3 4 8 9 12 13 14 17 19 21 22 23 24 25 26 27 28 30 38 42 45 46 48 56 59 63 64 25388 65 1 1 e 25389 65 1 1 e 25390 65 1 1 e 25391 65 1 1 2 3 5 21 23 24 33 34 35 55 58 61 25392 211 0 0 e 25393 211 0 0 e 25394 211 0 0 e 25395 211 0 0 e 25396 211 0 0 e 25397 211 0 0 e 25398 211 0 0 e 25399 211 0 0 f 25400 211 0 0 e 25401 211 0 0 e 25402 211 0 0 e 25403 211 0 0 1 3 4 5 6 7 8 9 12 16 17 20 22 23 25 32 34 36 37 39 42 44 45 52 53 54 55 57 60 62 64 66 68 69 70 72 76 78 81 83 84 85 86 87 89 91 92 93 94 96 98 99 100 102 103 104 105 106 108 111 114 115 116 119 120 124 126 127 133 134 135 139 140 143 144 145 148 152 154 158 159 161 162 170 171 175 176 179 180 182 187 192 193 194 196 197 199 200 202 203 205 206 207 209 25404 211 0 0 e 25405 211 0 0 2 5 7 10 14 16 19 20 23 25 28 29 34 35 36 37 42 43 48 52 53 55 57 60 61 64 67 69 72 76 78 80 81 82 83 84 86 92 93 94 95 98 100 102 103 104 108 110 111 113 115 119 121 124 127 128 131 132 134 135 136 143 145 146 147 148 149 150 152 154 156 160 161 163 165 166 169 170 171 173 176 179 181 183 187 188 189 191 192 193 194 196 198 199 202 203 210 25406 211 0 0 e 25407 211 0 0 e 25408 211 0 0 e 25409 211 0 0 0 6 9 10 13 19 20 32 41 43 50 53 58 62 64 68 70 71 79 81 82 86 91 93 95 100 103 114 124 128 141 149 150 158 162 163 164 167 174 175 180 183 187 193 196 197 201 204 207 25410 211 0 0 e 25411 211 0 0 e 25412 211 0 0 e 25413 211 0 0 e 25414 211 0 0 e 25415 211 0 0 e 25416 211 0 0 e 25417 211 0 0 f 25418 211 0 0 e 25419 211 0 0 e 25420 211 0 0 e 25421 211 0 0 0 2 3 6 7 8 9 12 15 16 19 20 21 25 26 27 28 30 33 34 36 38 41 43 46 47 48 49 52 54 55 56 59 62 63 64 65 66 68 69 71 73 74 76 80 82 84 90 93 94 95 97 98 99 102 104 106 109 110 111 112 118 123 124 127 128 130 131 134 135 138 140 142 143 145 146 148 152 153 154 156 157 160 161 162 163 164 167 168 170 174 175 177 178 179 180 182 184 186 189 191 193 194 195 196 197 200 201 202 204 206 207 208 210 25422 211 0 0 e 25423 211 0 0 1 2 6 11 13 15 16 18 19 20 23 25 27 29 31 32 33 34 35 37 39 40 42 45 46 49 50 52 54 63 66 67 68 70 71 72 73 75 76 80 83 87 88 89 91 94 95 96 97 98 99 101 102 103 105 106 113 115 117 118 121 123 130 132 133 136 138 139 140 147 149 150 151 152 157 158 159 161 165 166 171 172 175 176 178 181 182 184 186 189 191 194 195 197 203 204 205 206 207 209 25424 211 0 0 e 25425 211 0 0 e 25426 211 0 0 e 25427 211 0 0 4 9 16 19 21 23 25 29 40 41 46 59 61 64 70 71 72 75 82 83 84 86 87 91 97 98 100 103 104 105 109 113 116 118 120 126 130 138 141 144 153 155 157 161 165 167 172 174 178 179 181 183 191 193 198 201 205 209 25428 211 0 0 e 25429 211 0 0 e 25430 211 0 0 e 25431 211 0 0 e 25432 211 0 0 e 25433 211 0 0 e 25434 211 0 0 e 25435 211 0 0 f 25436 211 0 0 e 25437 211 0 0 e 25438 211 0 0 e 25439 211 0 0 7 9 10 12 13 14 15 16 24 30 31 34 38 40 42 44 46 50 53 55 61 62 64 65 67 68 73 76 79 81 82 84 85 86 87 89 90 92 93 94 97 99 100 102 104 105 108 110 111 114 115 116 117 119 121 123 125 130 135 138 139 142 146 147 148 149 150 152 153 154 155 157 160 161 163 169 170 171 172 174 175 176 177 178 183 184 186 187 188 189 190 191 197 199 205 206 207 25440 211 0 0 e 25441 211 0 0 1 2 3 5 7 8 9 10 13 16 17 18 21 24 26 27 30 31 33 37 42 43 47 48 54 55 56 57 58 61 62 64 66 70 71 73 74 75 76 77 78 79 81 90 93 94 97 103 104 105 107 108 110 114 115 116 120 121 122 124 125 127 128 129 131 133 134 136 139 142 143 144 145 147 148 149 150 151 152 153 154 161 163 164 165 166 171 176 177 178 179 180 181 182 184 185 186 191 193 196 198 199 200 201 202 25442 211 0 0 e 25443 211 0 0 e 25444 211 0 0 e 25445 211 0 0 2 3 6 14 17 23 36 37 43 51 58 63 64 69 77 79 80 83 89 94 101 110 111 112 113 114 117 127 132 134 135 138 140 145 146 149 150 158 162 171 175 180 187 191 192 195 202 209 210 25446 211 0 0 e 25447 211 0 0 e 25448 211 0 0 e 25449 211 0 0 e 25450 211 0 0 e 25451 211 0 0 e 25452 211 0 0 e 25453 211 0 0 f 25454 211 0 0 e 25455 211 0 0 e 25456 211 0 0 e 25457 211 0 0 4 5 8 9 11 12 13 14 15 17 18 19 20 21 23 25 26 30 33 35 36 38 42 43 44 45 47 51 52 56 57 59 61 62 65 67 69 70 72 73 74 75 81 82 83 84 85 86 87 89 94 95 96 97 99 102 104 105 106 107 108 109 110 111 116 118 119 120 121 124 125 126 127 129 132 136 137 138 140 142 143 145 146 147 148 150 151 153 154 155 160 161 163 164 165 166 169 171 172 173 174 178 180 182 183 184 187 189 190 191 195 196 198 199 200 201 202 25458 211 0 0 e 25459 211 0 0 1 3 4 9 12 16 18 20 22 25 30 31 32 35 37 39 40 41 43 48 52 54 56 58 61 64 65 68 69 71 74 75 76 78 79 80 83 84 87 89 91 92 95 97 99 100 102 104 106 107 108 109 110 113 118 119 122 124 126 127 130 131 132 133 135 138 139 143 145 146 147 149 151 154 155 157 158 159 161 162 163 164 165 166 167 170 172 181 184 193 196 200 202 203 204 205 207 25460 211 0 0 e 25461 211 0 0 e 25462 211 0 0 e 25463 211 0 0 0 3 17 18 30 36 44 46 47 50 54 55 56 57 59 65 67 76 78 88 90 98 99 101 111 123 126 137 140 148 153 154 158 166 175 176 178 182 184 187 203 204 210 25464 211 0 1 e 25465 211 0 1 e 25466 211 0 1 e 25467 211 0 1 e 25468 211 0 1 e 25469 211 0 1 e 25470 211 0 1 e 25471 211 0 1 f 25472 211 0 1 e 25473 211 0 1 e 25474 211 0 1 e 25475 211 0 1 0 1 2 4 6 9 10 15 16 20 22 25 27 29 30 31 35 37 38 43 44 49 51 52 54 56 58 60 62 63 65 69 71 75 76 78 79 80 82 83 86 87 90 91 92 93 95 99 104 106 110 114 116 119 121 122 123 125 126 127 129 132 137 140 145 147 148 150 154 156 158 159 160 161 162 163 164 165 166 167 179 180 181 182 183 184 185 186 188 189 191 193 196 197 198 199 200 201 202 203 205 210 25476 211 0 1 e 25477 211 0 1 3 4 5 7 9 10 11 13 14 17 18 19 21 22 24 27 31 32 33 34 35 36 37 38 39 40 42 46 47 50 51 53 56 57 61 62 65 68 69 73 74 75 78 79 80 81 82 85 86 88 90 91 93 95 98 102 103 106 107 108 109 110 111 112 118 120 126 127 128 129 130 133 141 145 147 152 155 156 158 159 161 163 165 167 170 171 175 176 177 178 180 183 184 185 186 187 190 191 194 195 197 199 202 203 204 205 206 207 208 209 210 25478 211 0 1 e 25479 211 0 1 e 25480 211 0 1 e 25481 211 0 1 0 8 19 24 25 26 34 38 39 42 44 56 65 68 71 75 78 83 85 88 90 97 98 101 106 110 114 118 121 122 131 134 140 144 146 154 162 163 167 169 170 171 173 176 177 178 184 186 196 197 198 199 206 207 25482 211 0 1 e 25483 211 0 1 e 25484 211 0 1 e 25485 211 0 1 e 25486 211 0 1 e 25487 211 0 1 e 25488 211 0 1 e 25489 211 0 1 f 25490 211 0 1 e 25491 211 0 1 e 25492 211 0 1 e 25493 211 0 1 2 3 7 9 10 12 13 15 19 22 25 26 28 30 32 34 35 38 39 40 42 44 45 48 50 51 56 57 61 63 69 70 71 73 74 75 77 78 80 82 83 85 86 87 88 89 91 92 95 98 101 102 105 106 109 112 114 116 117 118 121 122 123 125 130 132 135 136 137 138 145 147 149 151 152 153 155 156 157 158 159 160 162 164 165 166 171 174 177 182 183 184 188 190 195 196 197 200 202 204 207 208 210 25494 211 0 1 e 25495 211 0 1 1 4 7 8 10 11 12 13 14 16 19 20 21 23 27 28 32 33 34 35 37 38 41 48 49 52 53 57 60 62 63 66 69 70 71 73 74 75 79 81 83 84 85 90 92 93 98 99 103 106 107 108 110 116 118 120 121 122 123 127 128 129 133 134 135 137 138 140 142 144 145 147 152 156 157 159 160 161 162 164 165 168 169 170 171 174 178 179 180 183 185 188 190 193 194 195 196 197 199 200 201 206 207 208 209 210 25496 211 0 1 e 25497 211 0 1 e 25498 211 0 1 e 25499 211 0 1 7 11 16 17 18 24 27 28 36 40 41 48 49 52 54 56 58 61 64 66 75 83 87 97 98 105 107 110 114 120 129 138 144 145 156 164 168 170 178 183 187 190 196 203 204 207 25500 211 0 1 e 25501 211 0 1 e 25502 211 0 1 e 25503 211 0 1 e 25504 211 0 1 e 25505 211 0 1 e 25506 211 0 1 e 25507 211 0 1 f 25508 211 0 1 e 25509 211 0 1 e 25510 211 0 1 e 25511 211 0 1 0 2 4 7 9 13 19 24 25 26 27 30 31 34 35 37 38 40 41 43 46 47 49 51 52 54 55 56 57 59 60 61 62 63 64 67 69 70 71 72 73 75 76 77 79 80 81 84 86 87 88 89 93 94 95 97 100 101 102 105 106 107 110 111 112 113 116 117 118 120 123 124 125 126 127 128 129 130 132 135 136 137 138 140 142 144 145 146 147 148 150 154 156 158 161 163 164 167 169 170 171 172 175 177 179 180 181 182 184 187 188 189 190 191 198 203 208 210 25512 211 0 1 e 25513 211 0 1 0 1 2 3 6 7 8 9 10 12 13 15 16 24 27 28 29 30 31 32 33 38 41 42 43 44 46 47 49 51 53 58 61 62 64 66 67 68 69 71 72 73 74 75 77 79 80 81 83 85 87 90 91 93 95 97 98 100 108 109 111 113 114 115 117 118 119 121 124 125 128 132 133 134 135 136 139 140 141 142 147 150 151 152 155 156 157 158 159 163 166 173 174 175 178 179 180 182 183 184 185 187 188 191 192 193 194 196 197 201 202 203 204 205 25514 211 0 1 e 25515 211 0 1 e 25516 211 0 1 e 25517 211 0 1 0 3 5 6 7 14 15 18 22 26 28 34 35 36 38 41 43 45 50 51 52 53 54 56 60 65 67 69 74 76 78 79 80 84 85 88 89 101 105 115 117 122 123 124 127 128 129 130 131 133 134 135 143 144 146 151 152 174 176 180 181 182 183 189 191 194 195 196 204 205 25518 211 0 1 e 25519 211 0 1 e 25520 211 0 1 e 25521 211 0 1 e 25522 211 0 1 e 25523 211 0 1 e 25524 211 0 1 e 25525 211 0 1 f 25526 211 0 1 e 25527 211 0 1 e 25528 211 0 1 e 25529 211 0 1 2 4 5 6 7 9 10 12 13 16 17 19 23 27 28 29 31 32 33 34 40 41 45 46 47 49 52 58 59 60 63 64 65 66 69 71 73 77 78 87 89 92 93 94 95 98 101 106 108 111 113 114 115 116 117 120 124 125 126 128 131 137 138 139 140 141 142 146 149 151 152 154 155 156 157 158 160 161 163 168 169 173 175 176 177 178 179 181 184 186 188 192 195 199 200 203 204 209 25530 211 0 1 e 25531 211 0 1 0 1 2 3 5 10 11 13 14 15 17 18 19 21 22 23 27 29 30 33 34 35 38 39 41 42 43 44 45 46 48 50 53 54 59 62 63 65 67 71 74 76 79 80 82 85 86 91 92 95 97 98 103 105 109 114 118 119 120 125 127 128 135 137 139 141 143 144 148 150 154 155 158 160 161 162 167 169 170 171 176 177 178 180 181 182 185 187 195 196 197 198 199 201 202 203 207 208 25532 211 0 1 e 25533 211 0 1 e 25534 211 0 1 e 25535 211 0 1 15 18 21 24 29 40 42 44 48 52 65 72 76 78 83 87 88 90 97 99 103 110 113 115 128 133 136 137 148 151 152 153 154 155 158 163 164 169 174 175 180 184 186 187 188 189 192 195 198 199 200 206 208 25536 211 1 0 e 25537 211 1 0 e 25538 211 1 0 e 25539 211 1 0 e 25540 211 1 0 e 25541 211 1 0 e 25542 211 1 0 e 25543 211 1 0 f 25544 211 1 0 e 25545 211 1 0 e 25546 211 1 0 e 25547 211 1 0 0 1 3 9 13 18 19 20 21 23 24 25 26 27 28 32 39 40 41 42 45 48 50 51 52 53 56 58 62 63 65 66 67 68 71 72 73 74 75 76 77 78 80 82 84 86 90 94 95 96 97 100 102 104 106 110 111 115 117 120 121 124 126 128 129 132 137 138 140 143 147 148 150 152 157 159 161 162 163 164 165 167 169 171 172 175 179 180 182 186 188 189 190 194 195 196 197 198 199 201 203 204 206 207 209 25548 211 1 0 e 25549 211 1 0 3 9 10 13 14 15 17 19 20 21 22 23 25 27 29 30 31 32 33 34 39 40 44 45 48 50 51 53 54 59 60 61 62 63 64 68 69 70 71 72 75 80 82 84 85 86 88 89 91 92 94 95 96 100 103 106 107 108 110 111 113 116 117 118 119 120 122 123 124 125 126 128 130 131 134 135 136 137 138 139 141 142 143 144 145 148 151 152 153 154 156 157 158 159 161 162 163 165 166 167 168 170 171 174 175 177 181 183 184 191 193 195 196 198 200 203 204 206 210 25550 211 1 0 e 25551 211 1 0 e 25552 211 1 0 e 25553 211 1 0 0 1 4 7 18 20 24 26 27 28 33 34 36 38 50 53 58 63 75 76 80 85 86 98 99 106 107 109 118 119 121 123 124 130 131 134 138 141 145 147 148 153 169 173 175 176 180 182 185 187 195 196 199 202 203 205 209 210 25554 211 1 0 e 25555 211 1 0 e 25556 211 1 0 e 25557 211 1 0 e 25558 211 1 0 e 25559 211 1 0 e 25560 211 1 0 e 25561 211 1 0 f 25562 211 1 0 e 25563 211 1 0 e 25564 211 1 0 e 25565 211 1 0 0 1 4 5 8 9 10 11 12 13 14 15 16 18 20 23 24 26 29 31 32 34 36 39 40 41 44 49 51 52 53 56 57 60 62 65 68 69 70 73 74 75 76 77 79 83 84 85 86 87 90 91 94 95 96 98 100 102 103 104 106 107 108 109 111 112 113 115 117 120 121 124 125 126 127 128 130 135 137 139 141 143 151 152 154 155 159 161 168 171 172 175 176 177 178 179 180 183 191 192 194 195 197 199 203 206 207 208 25566 211 1 0 e 25567 211 1 0 1 3 6 9 11 14 19 22 26 28 29 33 35 44 46 47 50 51 52 56 58 59 60 61 62 64 67 69 71 73 75 76 78 80 81 83 86 88 89 90 91 92 93 97 99 101 103 104 105 106 107 108 109 111 115 116 118 119 121 123 124 125 129 130 131 132 134 135 141 142 143 148 150 157 158 159 160 161 162 163 168 169 170 172 173 174 175 180 184 185 186 187 189 190 194 195 196 199 201 204 207 208 25568 211 1 0 e 25569 211 1 0 e 25570 211 1 0 e 25571 211 1 0 2 6 7 8 9 10 20 21 23 33 40 47 51 54 61 63 79 80 84 86 87 93 100 109 110 122 125 126 127 130 133 139 140 142 146 149 150 154 155 156 167 168 169 175 178 183 187 190 191 194 195 199 201 210 25572 211 1 0 e 25573 211 1 0 e 25574 211 1 0 e 25575 211 1 0 e 25576 211 1 0 e 25577 211 1 0 e 25578 211 1 0 e 25579 211 1 0 f 25580 211 1 0 e 25581 211 1 0 e 25582 211 1 0 e 25583 211 1 0 1 3 4 5 8 11 12 13 14 16 17 18 19 23 25 27 28 29 30 31 32 33 34 36 37 40 41 42 49 50 52 53 58 62 63 66 67 68 70 71 72 74 75 78 80 82 83 85 86 88 91 92 95 101 102 103 104 107 113 114 118 119 121 122 123 124 125 128 131 132 133 136 137 140 143 144 145 147 148 149 151 153 154 156 157 163 164 168 175 176 180 183 185 186 187 189 190 192 193 198 199 201 206 207 209 25584 211 1 0 e 25585 211 1 0 2 3 6 7 10 11 14 17 18 20 21 23 24 29 31 34 36 37 39 40 42 45 46 47 48 51 53 54 58 59 61 62 63 67 70 72 73 74 76 78 79 80 82 84 85 86 89 90 91 92 93 94 95 97 98 101 102 104 107 108 110 111 112 113 115 116 118 121 123 124 126 127 129 131 132 134 135 136 138 139 140 141 142 143 144 147 148 151 153 154 157 160 161 163 164 166 167 168 169 171 172 175 177 178 183 187 196 198 204 205 208 25586 211 1 0 e 25587 211 1 0 e 25588 211 1 0 e 25589 211 1 0 3 5 8 9 11 19 23 26 34 38 41 45 51 54 56 63 65 66 67 74 75 76 81 85 90 92 94 96 98 104 108 110 113 117 119 121 124 127 132 159 162 166 177 182 183 197 199 205 25590 211 1 0 e 25591 211 1 0 e 25592 211 1 0 e 25593 211 1 0 e 25594 211 1 0 e 25595 211 1 0 e 25596 211 1 0 e 25597 211 1 0 f 25598 211 1 0 e 25599 211 1 0 e 25600 211 1 0 e 25601 211 1 0 0 1 2 3 4 9 10 12 14 15 17 18 20 21 26 28 31 35 38 41 42 43 44 49 51 54 56 58 60 61 62 63 64 67 69 73 74 76 77 79 83 86 87 91 93 95 96 98 101 107 108 110 113 114 115 116 120 122 123 127 129 130 134 137 139 141 142 146 148 153 154 156 157 160 161 163 164 165 167 168 170 171 172 174 175 176 177 178 180 181 183 184 185 191 192 193 194 195 197 199 200 201 206 207 208 209 210 25602 211 1 0 e 25603 211 1 0 0 1 5 7 8 10 11 15 16 17 18 21 22 24 25 26 30 32 34 37 41 43 45 46 48 54 58 59 60 61 63 66 67 77 78 79 83 84 85 93 94 95 96 97 98 102 104 105 106 107 108 109 110 112 115 117 118 119 122 123 124 125 126 127 128 129 133 134 135 136 137 138 139 141 145 148 161 163 164 166 167 168 169 170 172 174 175 181 182 183 184 188 189 192 193 194 197 201 202 205 208 209 210 25604 211 1 0 e 25605 211 1 0 e 25606 211 1 0 e 25607 211 1 0 0 4 27 28 29 35 37 38 41 44 48 49 54 57 61 64 66 76 78 80 81 86 95 106 116 119 121 123 125 128 141 144 146 149 154 157 159 162 170 173 174 175 195 205 206 208 210 25608 211 1 1 e 25609 211 1 1 e 25610 211 1 1 e 25611 211 1 1 e 25612 211 1 1 e 25613 211 1 1 e 25614 211 1 1 e 25615 211 1 1 f 25616 211 1 1 e 25617 211 1 1 e 25618 211 1 1 e 25619 211 1 1 1 2 4 8 11 13 15 17 19 22 23 29 30 33 34 36 37 40 42 43 44 45 46 47 48 49 51 53 56 60 61 65 67 68 70 72 73 77 79 87 88 90 96 100 101 102 105 107 112 113 114 115 116 117 122 125 127 131 133 134 137 138 143 144 145 148 150 151 154 156 157 159 164 165 167 168 170 171 173 175 176 178 182 183 186 188 189 190 191 192 194 196 198 202 205 206 207 208 210 25620 211 1 1 e 25621 211 1 1 0 2 5 6 9 14 15 16 17 20 21 22 23 24 25 29 30 33 34 35 36 38 42 43 44 46 47 49 51 52 53 54 55 56 57 60 68 70 72 74 75 76 77 80 81 83 84 85 86 87 88 90 91 92 96 97 98 100 102 103 104 105 107 109 112 114 117 120 123 124 125 126 128 129 130 131 133 137 139 140 143 144 148 150 151 152 154 157 158 161 162 163 164 166 172 175 176 179 180 182 183 184 191 195 196 200 202 204 207 208 25622 211 1 1 e 25623 211 1 1 e 25624 211 1 1 e 25625 211 1 1 1 6 7 13 21 22 23 28 30 31 32 33 34 40 41 49 50 56 67 75 83 88 103 105 108 116 118 124 125 126 127 128 138 141 142 145 147 148 149 150 152 154 156 163 167 171 182 189 190 194 195 202 203 204 208 209 25626 211 1 1 e 25627 211 1 1 e 25628 211 1 1 e 25629 211 1 1 e 25630 211 1 1 e 25631 211 1 1 e 25632 211 1 1 e 25633 211 1 1 f 25634 211 1 1 e 25635 211 1 1 e 25636 211 1 1 e 25637 211 1 1 4 8 9 10 11 13 14 15 16 18 19 20 21 22 24 25 30 39 44 45 48 49 50 52 63 66 69 70 72 73 74 77 79 83 88 91 97 99 100 101 102 106 108 109 112 114 117 119 121 122 124 125 126 128 129 130 132 135 136 137 140 148 149 151 153 155 157 158 159 162 163 164 166 168 169 172 173 174 175 176 177 178 181 187 188 189 191 194 195 198 199 200 201 205 206 207 25638 211 1 1 e 25639 211 1 1 1 2 4 5 10 11 13 15 16 20 21 23 25 27 29 30 31 32 33 35 36 38 40 41 42 44 47 49 52 54 58 59 61 62 65 66 69 72 74 75 76 78 84 87 88 90 91 95 98 99 104 107 108 110 114 116 119 120 121 122 123 125 126 127 129 130 134 136 137 138 139 141 143 146 153 155 156 157 158 160 161 162 163 171 173 175 176 180 182 183 185 186 188 190 191 194 196 197 198 201 204 205 207 25640 211 1 1 e 25641 211 1 1 e 25642 211 1 1 e 25643 211 1 1 0 3 11 19 21 24 26 35 42 52 55 61 66 78 79 87 90 92 93 97 107 109 113 116 127 128 129 130 133 139 140 141 161 167 168 171 173 174 175 176 177 178 187 192 196 200 202 207 209 25644 211 1 1 e 25645 211 1 1 e 25646 211 1 1 e 25647 211 1 1 e 25648 211 1 1 e 25649 211 1 1 e 25650 211 1 1 e 25651 211 1 1 f 25652 211 1 1 e 25653 211 1 1 e 25654 211 1 1 e 25655 211 1 1 0 2 3 4 12 13 15 16 17 18 19 21 22 28 31 32 33 36 39 40 41 42 45 47 49 50 54 57 60 62 64 65 69 70 71 74 76 77 78 79 82 84 87 88 90 91 94 95 98 100 102 103 106 107 112 114 117 118 121 122 124 127 129 130 131 136 137 139 142 143 146 147 150 152 155 159 165 167 172 174 175 180 181 184 185 186 188 190 191 193 194 199 202 203 205 206 207 208 209 210 25656 211 1 1 e 25657 211 1 1 0 2 4 6 7 8 9 11 12 19 20 22 24 26 28 29 30 33 34 37 38 39 42 44 46 47 50 53 54 58 59 61 63 67 70 71 73 74 76 77 80 81 82 84 85 86 87 89 90 91 92 94 96 97 98 101 102 103 105 106 108 110 111 113 115 116 118 119 121 122 123 130 131 132 133 136 138 140 141 143 144 146 147 148 149 150 151 152 154 156 158 161 165 166 169 170 171 172 173 174 175 177 178 180 183 184 187 191 193 195 198 199 201 202 204 205 208 25658 211 1 1 e 25659 211 1 1 e 25660 211 1 1 e 25661 211 1 1 6 8 12 14 20 27 28 34 37 45 53 58 61 62 63 65 69 77 78 83 86 88 90 93 94 98 102 106 109 112 113 114 118 120 123 132 134 135 136 140 142 143 145 147 150 154 161 162 166 168 172 176 178 181 182 185 190 194 196 201 203 206 25662 211 1 1 e 25663 211 1 1 e 25664 211 1 1 e 25665 211 1 1 e 25666 211 1 1 e 25667 211 1 1 e 25668 211 1 1 e 25669 211 1 1 f 25670 211 1 1 e 25671 211 1 1 e 25672 211 1 1 e 25673 211 1 1 0 2 4 5 6 9 11 14 17 22 23 27 29 31 33 34 35 36 38 39 40 45 47 50 51 52 55 58 59 61 66 67 73 75 79 81 83 84 86 87 92 93 95 96 97 98 99 101 102 105 106 107 108 109 114 115 118 121 122 123 125 126 127 128 130 131 132 134 137 138 139 141 142 143 144 145 147 148 149 150 152 154 155 158 159 165 169 171 173 175 181 183 185 189 190 192 193 199 200 203 25674 211 1 1 e 25675 211 1 1 0 1 2 4 5 6 7 8 11 13 16 21 23 24 27 28 31 34 37 41 42 43 44 48 50 53 54 60 61 62 63 64 65 68 74 75 76 79 80 82 85 86 89 90 92 93 95 96 98 99 100 102 104 105 107 109 110 111 112 113 116 117 118 120 123 125 127 130 132 133 135 136 137 138 139 141 142 146 152 153 154 156 159 160 161 163 164 165 166 169 171 172 176 179 180 181 183 184 186 187 188 190 191 193 194 195 196 197 200 201 205 206 208 25676 211 1 1 e 25677 211 1 1 e 25678 211 1 1 e 25679 211 1 1 9 11 14 16 17 21 22 27 37 39 43 44 49 50 52 55 57 59 62 63 75 77 82 83 84 85 98 100 101 106 107 109 114 119 122 123 125 126 135 140 148 150 151 161 164 171 175 177 178 179 180 188 191 193 194 197 198 204 206 25680 224 0 0 e 25681 224 0 0 e 25682 224 0 0 e 25683 224 0 0 e 25684 224 0 0 e 25685 224 0 0 e 25686 224 0 0 e 25687 224 0 0 f 25688 224 0 0 e 25689 224 0 0 e 25690 224 0 0 e 25691 224 0 0 0 1 3 5 10 12 13 14 15 16 17 18 19 23 24 28 32 33 34 35 38 42 43 46 47 48 54 55 57 58 60 61 66 67 70 72 74 75 81 84 85 86 91 94 98 101 103 104 109 111 114 115 116 117 118 119 120 121 123 125 128 129 130 131 133 134 136 137 142 147 148 149 151 152 155 156 158 162 167 170 174 176 177 178 181 182 183 184 194 197 201 202 206 207 208 210 211 213 214 215 216 217 219 220 25692 224 0 0 e 25693 224 0 0 0 2 4 5 7 8 9 11 12 13 16 17 19 21 22 23 25 26 28 29 34 36 38 39 40 42 43 46 50 53 55 56 59 61 63 64 66 67 69 70 73 75 79 80 86 88 90 91 92 94 95 97 98 99 100 101 104 105 108 111 112 114 115 116 117 119 122 127 130 131 138 140 141 142 143 145 146 148 149 153 155 157 158 159 160 161 162 165 170 173 175 176 177 179 180 182 186 187 189 190 195 197 199 201 204 205 208 211 212 214 216 217 219 220 25694 224 0 0 e 25695 224 0 0 e 25696 224 0 0 e 25697 224 0 0 7 8 12 15 21 24 25 33 34 38 42 43 46 48 54 55 58 63 65 66 68 70 71 74 76 78 82 84 89 90 91 92 93 98 100 103 107 109 113 114 117 122 124 126 133 135 142 151 156 157 168 179 180 183 187 192 207 208 213 216 217 219 25698 224 0 0 e 25699 224 0 0 e 25700 224 0 0 e 25701 224 0 0 e 25702 224 0 0 e 25703 224 0 0 e 25704 224 0 0 e 25705 224 0 0 f 25706 224 0 0 e 25707 224 0 0 e 25708 224 0 0 e 25709 224 0 0 1 2 5 7 10 15 16 18 20 25 27 29 33 34 36 37 38 39 41 42 44 46 56 58 59 60 61 62 63 64 66 69 70 73 75 76 77 78 79 80 81 82 84 85 90 91 92 94 96 99 100 102 103 104 105 109 110 111 113 114 115 118 123 124 125 128 130 131 135 136 137 138 139 141 143 150 153 154 155 157 158 159 165 167 169 173 174 176 178 179 182 184 187 189 193 204 206 210 215 216 219 222 25710 224 0 0 e 25711 224 0 0 2 4 5 7 9 10 11 12 15 17 18 21 22 23 25 29 31 34 36 41 45 50 51 52 54 58 59 63 64 66 67 68 71 78 79 80 81 82 83 85 91 92 93 99 100 102 103 104 108 110 113 118 119 120 124 125 126 132 135 137 138 141 142 144 145 146 149 150 154 157 159 160 161 163 164 170 174 177 179 180 184 185 188 189 191 192 193 195 197 201 202 203 205 207 208 209 210 211 217 218 219 220 222 25712 224 0 0 e 25713 224 0 0 e 25714 224 0 0 e 25715 224 0 0 8 9 12 14 15 16 36 38 39 46 47 48 51 53 61 64 65 67 75 89 94 96 105 112 114 120 134 136 139 143 147 151 156 159 160 163 168 173 174 175 176 194 201 212 217 220 223 25716 224 0 0 e 25717 224 0 0 e 25718 224 0 0 e 25719 224 0 0 e 25720 224 0 0 e 25721 224 0 0 e 25722 224 0 0 e 25723 224 0 0 f 25724 224 0 0 e 25725 224 0 0 e 25726 224 0 0 e 25727 224 0 0 2 3 4 5 7 8 10 12 13 17 21 24 26 29 32 33 39 40 41 42 44 45 47 48 49 51 54 55 57 58 59 61 62 63 65 66 69 70 71 72 73 74 77 78 79 81 83 84 88 90 91 92 97 100 102 104 107 108 109 110 112 113 114 116 117 120 121 122 123 125 126 128 129 132 133 136 140 141 145 146 148 149 152 154 155 156 158 161 163 167 170 172 175 176 177 178 180 182 186 187 188 191 192 195 196 199 201 202 203 204 206 207 208 210 216 217 220 222 25728 224 0 0 e 25729 224 0 0 0 4 7 9 10 11 12 15 18 19 22 23 24 25 26 27 28 30 33 34 39 40 43 44 45 46 47 50 52 53 55 57 58 62 63 67 68 71 72 73 76 79 80 83 85 87 88 90 91 92 93 94 97 98 99 102 106 112 113 114 115 118 120 121 125 126 127 128 129 130 134 135 136 138 140 144 148 150 151 152 153 156 157 159 160 161 163 166 168 169 172 173 174 175 180 183 193 195 196 197 199 200 201 203 204 206 208 210 213 215 218 219 220 25730 224 0 0 e 25731 224 0 0 e 25732 224 0 0 e 25733 224 0 0 1 4 18 26 28 30 31 40 43 44 50 53 54 56 68 78 83 86 94 97 98 99 106 113 115 116 122 129 130 133 134 145 146 161 168 171 174 175 176 178 179 184 185 186 191 194 197 199 202 206 207 208 218 222 25734 224 0 0 e 25735 224 0 0 e 25736 224 0 0 e 25737 224 0 0 e 25738 224 0 0 e 25739 224 0 0 e 25740 224 0 0 e 25741 224 0 0 f 25742 224 0 0 e 25743 224 0 0 e 25744 224 0 0 e 25745 224 0 0 2 3 4 8 11 14 16 17 20 24 27 28 31 33 36 39 46 47 48 49 55 57 59 60 63 64 65 66 67 68 75 77 79 80 83 87 88 89 92 93 95 97 99 100 102 106 107 108 109 114 116 118 120 122 124 125 126 127 129 132 137 138 139 141 145 146 147 148 150 154 155 156 161 163 164 166 167 168 171 177 178 179 180 184 185 186 188 191 192 194 198 199 200 201 202 203 205 206 210 211 213 214 215 217 220 222 25746 224 0 0 e 25747 224 0 0 1 2 7 8 9 11 13 14 16 17 18 19 21 22 23 25 26 27 28 30 32 33 37 40 41 42 44 45 46 47 48 49 50 51 52 53 54 56 57 62 66 67 70 73 74 76 77 81 84 89 90 91 92 93 94 96 97 98 100 101 104 107 108 109 112 113 114 118 119 120 121 123 124 127 130 136 137 138 139 140 144 145 146 149 150 152 155 156 160 163 164 165 167 168 171 173 176 178 179 181 186 188 191 192 193 194 195 196 197 198 199 202 203 204 205 207 209 210 212 213 214 215 217 221 25748 224 0 0 e 25749 224 0 0 e 25750 224 0 0 e 25751 224 0 0 0 2 3 5 14 19 22 23 24 25 27 28 30 32 34 37 38 41 48 55 57 58 64 67 69 70 75 76 77 79 80 81 86 87 91 98 102 110 111 114 115 118 120 122 129 132 133 136 139 140 141 144 148 151 152 154 163 166 169 176 181 183 186 189 191 197 206 207 211 212 215 216 217 218 221 223 25752 224 0 1 e 25753 224 0 1 e 25754 224 0 1 e 25755 224 0 1 e 25756 224 0 1 e 25757 224 0 1 e 25758 224 0 1 e 25759 224 0 1 f 25760 224 0 1 e 25761 224 0 1 e 25762 224 0 1 e 25763 224 0 1 0 2 6 7 8 9 10 11 12 14 15 16 17 18 19 22 23 24 27 31 32 33 34 35 36 37 38 39 44 45 46 48 50 51 52 57 58 59 60 61 68 69 70 71 72 73 74 76 77 80 81 82 84 85 86 90 93 96 100 101 103 104 105 106 112 113 115 117 118 119 122 124 125 127 129 130 131 133 135 136 138 139 141 142 143 147 148 149 151 152 153 154 155 160 161 163 164 166 170 173 176 178 181 183 185 187 188 190 193 195 197 198 200 202 203 204 205 208 209 210 211 212 213 214 215 217 25764 224 0 1 e 25765 224 0 1 1 5 6 8 10 11 12 13 14 16 20 21 22 31 32 33 34 36 37 38 46 50 54 56 58 61 64 66 70 71 72 76 77 84 86 87 89 91 92 96 98 99 100 101 102 103 105 106 108 112 113 114 117 119 122 124 126 127 129 130 132 134 137 141 142 144 146 149 150 151 153 154 156 157 161 162 165 167 168 169 172 175 176 179 182 183 184 185 187 191 195 196 197 198 199 200 202 203 204 206 208 209 211 214 216 217 221 223 25766 224 0 1 e 25767 224 0 1 e 25768 224 0 1 e 25769 224 0 1 6 18 19 25 27 28 36 37 40 51 57 60 68 69 76 78 79 85 86 89 91 92 98 107 118 119 122 124 126 134 141 143 144 146 149 151 157 159 162 169 173 175 178 179 180 198 200 204 214 219 223 25770 224 0 1 e 25771 224 0 1 e 25772 224 0 1 e 25773 224 0 1 e 25774 224 0 1 e 25775 224 0 1 e 25776 224 0 1 e 25777 224 0 1 f 25778 224 0 1 e 25779 224 0 1 e 25780 224 0 1 e 25781 224 0 1 2 3 4 6 8 9 10 12 13 15 16 17 18 19 21 22 24 25 28 29 30 31 34 35 38 39 42 43 44 45 46 47 48 51 52 55 56 58 65 66 68 71 73 74 76 78 81 82 84 85 86 90 92 93 95 97 99 100 102 103 104 106 115 116 117 119 121 122 123 125 130 131 134 140 141 142 143 144 145 148 151 152 153 155 156 158 159 160 161 162 163 164 166 171 172 173 176 177 180 182 183 185 187 188 192 193 196 197 200 201 202 207 208 209 210 212 214 215 216 219 221 222 223 25782 224 0 1 e 25783 224 0 1 0 3 5 6 7 15 16 17 19 21 23 24 25 27 32 38 39 43 44 45 49 51 52 53 54 56 57 64 65 68 72 73 75 77 79 80 81 82 85 86 88 92 93 95 96 97 99 101 107 110 111 113 115 116 118 120 122 130 131 135 136 138 139 140 141 142 144 146 148 149 150 151 153 155 156 160 162 166 168 169 171 174 176 177 178 179 180 181 185 189 190 192 193 196 198 199 201 203 206 207 209 210 214 215 216 25784 224 0 1 e 25785 224 0 1 e 25786 224 0 1 e 25787 224 0 1 7 9 12 13 16 18 22 24 27 28 35 37 38 42 45 46 49 50 58 61 63 66 71 80 91 96 100 105 106 108 110 116 117 118 122 123 128 134 141 153 154 159 160 161 165 175 181 182 185 186 187 199 202 203 205 207 214 216 217 219 25788 224 0 1 e 25789 224 0 1 e 25790 224 0 1 e 25791 224 0 1 e 25792 224 0 1 e 25793 224 0 1 e 25794 224 0 1 e 25795 224 0 1 f 25796 224 0 1 e 25797 224 0 1 e 25798 224 0 1 e 25799 224 0 1 0 6 8 9 11 12 16 17 20 23 27 29 30 31 32 35 37 38 39 41 47 50 51 53 60 61 62 63 64 65 67 68 70 71 72 73 74 75 77 80 82 84 85 87 88 90 93 94 95 98 99 102 103 104 106 107 109 110 111 112 114 115 116 122 124 127 129 130 132 137 141 145 146 147 148 149 152 153 156 160 161 164 166 167 168 169 176 177 179 182 184 185 191 192 193 196 197 199 202 205 206 207 209 212 213 216 217 219 220 221 223 25800 224 0 1 e 25801 224 0 1 0 1 6 10 12 15 16 23 24 27 28 31 32 33 34 36 37 40 43 44 45 47 49 51 53 54 55 58 59 62 65 66 72 73 75 76 77 78 80 82 83 85 86 88 89 94 95 96 97 98 100 102 103 108 110 111 113 114 115 117 120 121 122 124 125 126 127 128 129 131 135 136 137 139 143 144 148 149 150 151 153 154 156 157 159 160 161 165 168 169 170 174 176 178 179 181 183 184 187 189 192 193 194 196 199 203 204 206 207 208 209 211 213 214 217 218 219 220 25802 224 0 1 e 25803 224 0 1 e 25804 224 0 1 e 25805 224 0 1 2 8 9 16 27 29 31 40 45 46 47 53 62 65 68 73 82 85 88 94 100 109 111 119 124 139 144 145 150 157 160 186 187 190 191 199 202 203 207 211 212 223 25806 224 0 1 e 25807 224 0 1 e 25808 224 0 1 e 25809 224 0 1 e 25810 224 0 1 e 25811 224 0 1 e 25812 224 0 1 e 25813 224 0 1 f 25814 224 0 1 e 25815 224 0 1 e 25816 224 0 1 e 25817 224 0 1 2 5 6 9 10 14 15 16 20 21 23 25 26 29 30 33 34 38 42 47 50 52 54 55 56 58 59 60 61 62 63 68 69 71 72 73 74 75 77 80 81 84 85 86 88 89 90 91 93 96 100 102 105 106 109 112 113 118 120 122 123 124 125 126 127 129 130 131 132 133 135 137 138 140 144 145 147 148 149 150 154 155 160 162 164 165 167 168 169 170 172 176 181 185 186 188 193 195 196 201 203 204 212 215 216 218 221 25818 224 0 1 e 25819 224 0 1 3 6 8 9 11 12 14 15 19 22 29 31 33 34 35 37 38 39 40 42 43 44 45 46 54 55 58 59 62 63 64 65 68 71 72 74 75 76 77 80 81 82 84 85 88 94 98 100 101 103 106 114 116 117 118 119 123 124 128 129 130 131 132 134 136 137 139 141 145 146 148 152 154 156 158 164 165 168 169 171 172 173 176 179 180 181 182 185 186 187 189 193 194 195 196 201 204 205 209 211 212 215 218 222 25820 224 0 1 e 25821 224 0 1 e 25822 224 0 1 e 25823 224 0 1 13 14 17 19 28 29 31 32 35 37 40 44 45 47 53 56 58 62 67 69 70 72 73 77 84 88 101 105 106 107 108 110 117 118 125 129 135 136 141 146 149 150 152 156 157 158 172 194 195 196 197 198 200 201 203 206 215 218 219 25824 224 1 0 e 25825 224 1 0 e 25826 224 1 0 e 25827 224 1 0 e 25828 224 1 0 e 25829 224 1 0 e 25830 224 1 0 e 25831 224 1 0 f 25832 224 1 0 e 25833 224 1 0 e 25834 224 1 0 e 25835 224 1 0 0 2 4 8 9 16 19 26 28 29 30 32 37 44 46 49 50 52 55 58 59 60 62 64 67 68 70 71 72 73 74 80 82 85 88 89 93 95 96 100 102 104 105 107 108 111 113 114 117 118 120 121 123 125 128 136 138 140 141 142 143 145 147 149 150 151 153 160 161 163 164 165 166 168 169 175 176 179 180 181 182 183 185 186 187 190 191 192 193 200 203 207 210 211 212 216 218 219 223 25836 224 1 0 e 25837 224 1 0 3 6 7 9 11 13 16 17 19 20 22 23 29 30 31 34 35 36 37 38 39 42 43 47 48 49 50 51 52 53 54 57 59 60 62 71 72 74 75 77 78 80 81 83 84 85 86 88 91 92 96 97 99 101 102 104 110 114 117 118 125 128 129 132 133 135 137 139 140 147 150 151 154 155 156 159 162 166 167 170 175 177 178 179 181 183 184 186 187 188 189 190 193 194 195 197 198 200 201 202 207 212 213 215 217 218 220 221 222 25838 224 1 0 e 25839 224 1 0 e 25840 224 1 0 e 25841 224 1 0 2 9 11 18 24 28 29 31 38 39 42 47 51 52 56 65 73 75 79 81 85 89 90 91 94 104 110 114 119 122 130 132 133 142 154 158 161 162 163 168 170 175 176 177 182 186 200 206 214 25842 224 1 0 e 25843 224 1 0 e 25844 224 1 0 e 25845 224 1 0 e 25846 224 1 0 e 25847 224 1 0 e 25848 224 1 0 e 25849 224 1 0 f 25850 224 1 0 e 25851 224 1 0 e 25852 224 1 0 e 25853 224 1 0 5 6 7 9 16 17 18 20 21 22 23 24 25 26 27 28 30 31 34 35 36 47 48 49 50 51 52 53 58 59 62 66 68 69 71 72 74 77 78 79 81 83 85 86 88 91 92 93 94 95 96 97 98 101 102 104 107 108 109 110 113 114 117 118 119 120 121 127 128 129 131 132 133 134 137 139 140 141 142 143 145 147 149 151 153 156 158 160 161 162 164 165 166 167 169 171 174 176 177 178 179 184 189 192 193 197 198 199 201 204 205 206 210 215 218 219 221 222 223 25854 224 1 0 e 25855 224 1 0 5 6 10 12 19 21 24 26 27 28 33 35 36 39 40 44 45 46 47 50 51 54 55 56 57 58 60 61 62 64 69 72 73 74 75 76 77 78 79 80 81 82 84 85 87 89 92 93 94 95 99 101 102 104 105 106 109 114 116 117 120 122 123 125 126 127 129 131 132 134 137 138 139 140 144 145 146 147 148 149 151 154 155 157 158 159 160 164 166 167 169 170 173 176 178 179 182 183 185 186 187 188 192 193 194 197 199 200 205 206 208 209 212 214 217 219 221 223 25856 224 1 0 e 25857 224 1 0 e 25858 224 1 0 e 25859 224 1 0 0 1 2 9 10 17 21 27 28 32 40 41 42 44 48 49 66 67 69 81 82 88 89 97 98 103 108 113 116 117 126 128 137 144 146 155 159 163 166 168 174 175 181 184 187 188 192 207 212 216 217 219 223 25860 224 1 0 e 25861 224 1 0 e 25862 224 1 0 e 25863 224 1 0 e 25864 224 1 0 e 25865 224 1 0 e 25866 224 1 0 e 25867 224 1 0 f 25868 224 1 0 e 25869 224 1 0 e 25870 224 1 0 e 25871 224 1 0 1 2 5 6 7 8 9 10 11 14 17 21 23 26 27 28 30 31 32 33 34 35 41 42 45 52 53 56 57 58 60 64 65 66 72 73 75 82 83 84 85 86 90 92 93 103 106 109 110 112 115 116 117 118 119 122 123 124 126 133 134 136 138 140 143 147 149 154 155 158 163 164 165 166 171 173 176 178 179 182 186 188 189 191 192 196 199 201 202 203 205 206 207 209 210 212 215 216 217 218 221 222 223 25872 224 1 0 e 25873 224 1 0 1 3 4 5 6 7 12 14 15 16 18 20 21 22 24 27 28 29 30 32 35 39 40 41 45 49 50 52 53 54 55 60 62 63 64 65 67 69 70 71 72 73 75 76 77 80 81 84 87 89 93 95 96 97 98 100 101 104 105 107 109 110 112 114 116 117 120 121 122 123 124 125 126 127 128 129 130 132 134 136 142 143 144 149 150 152 162 163 165 169 170 172 173 175 177 179 180 181 182 183 187 191 192 193 194 196 198 199 200 201 203 205 206 207 208 209 211 212 214 216 217 221 222 25874 224 1 0 e 25875 224 1 0 e 25876 224 1 0 e 25877 224 1 0 3 6 8 14 27 29 33 59 62 64 71 77 80 82 85 98 99 101 106 110 114 123 124 128 131 132 134 139 142 144 145 147 157 158 160 162 170 171 174 175 177 182 187 190 191 192 194 212 213 214 217 221 223 25878 224 1 0 e 25879 224 1 0 e 25880 224 1 0 e 25881 224 1 0 e 25882 224 1 0 e 25883 224 1 0 e 25884 224 1 0 e 25885 224 1 0 f 25886 224 1 0 e 25887 224 1 0 e 25888 224 1 0 e 25889 224 1 0 3 4 5 6 7 10 11 15 17 18 19 21 23 25 27 30 34 35 36 40 41 42 43 44 45 47 49 50 53 54 57 58 60 61 62 63 64 68 73 74 75 78 80 82 84 91 92 93 94 97 99 101 102 106 107 110 116 119 123 125 126 128 130 131 132 134 135 139 140 142 143 145 146 147 148 149 153 154 157 159 160 161 164 165 166 167 171 173 180 183 184 185 186 189 190 191 194 195 196 197 198 199 200 201 203 204 205 206 207 208 209 210 213 215 216 217 218 219 220 221 222 223 25890 224 1 0 e 25891 224 1 0 1 3 5 6 7 9 11 14 15 16 19 22 23 24 28 29 33 34 35 36 37 40 41 42 43 45 46 47 50 51 52 53 54 56 57 58 59 60 62 65 66 68 71 74 79 80 84 86 87 89 90 91 92 93 96 99 100 101 103 107 108 109 110 114 117 119 120 121 122 123 124 125 126 131 133 134 135 136 138 139 141 143 144 146 151 153 154 155 156 157 161 163 166 168 169 174 176 177 178 179 182 185 189 191 192 193 196 198 199 200 201 202 205 206 208 209 214 216 218 223 25892 224 1 0 e 25893 224 1 0 e 25894 224 1 0 e 25895 224 1 0 2 13 14 16 20 24 29 32 35 45 46 47 53 56 63 71 79 80 84 97 101 103 107 112 116 120 121 122 125 126 138 139 141 147 149 156 158 180 182 185 187 190 192 194 200 201 202 203 204 205 208 210 211 214 219 220 221 25896 224 1 1 e 25897 224 1 1 e 25898 224 1 1 e 25899 224 1 1 e 25900 224 1 1 e 25901 224 1 1 e 25902 224 1 1 e 25903 224 1 1 f 25904 224 1 1 e 25905 224 1 1 e 25906 224 1 1 e 25907 224 1 1 0 4 5 6 7 11 12 15 16 17 19 20 21 23 24 25 26 27 29 30 32 33 37 38 40 42 45 46 50 51 52 53 54 58 60 64 67 68 69 70 72 73 74 79 81 85 88 93 96 98 99 101 102 103 106 108 109 110 111 114 116 119 121 122 127 132 135 137 138 139 140 141 142 143 144 150 152 153 154 155 156 157 158 159 160 161 164 166 168 169 170 175 176 178 179 181 185 186 187 195 198 200 201 203 204 209 211 214 216 218 219 220 222 223 25908 224 1 1 e 25909 224 1 1 0 1 2 4 5 10 11 12 13 15 19 21 22 23 25 27 28 31 37 38 39 40 41 43 44 45 46 49 51 52 53 54 56 59 60 61 62 64 65 66 68 69 70 71 72 74 75 78 79 82 85 89 91 93 96 97 98 99 100 101 107 108 110 113 115 116 117 118 119 120 122 126 130 131 136 137 140 141 142 144 151 155 156 157 158 159 161 162 163 170 174 176 177 178 179 182 183 184 191 195 196 197 201 203 206 209 212 215 217 219 221 223 25910 224 1 1 e 25911 224 1 1 e 25912 224 1 1 e 25913 224 1 1 4 9 11 14 23 24 32 40 45 48 49 62 63 69 78 86 87 93 95 99 100 104 108 111 112 114 116 117 121 122 125 126 130 137 144 145 150 157 162 163 169 170 173 179 184 185 189 194 196 199 203 207 211 216 223 25914 224 1 1 e 25915 224 1 1 e 25916 224 1 1 e 25917 224 1 1 e 25918 224 1 1 e 25919 224 1 1 e 25920 224 1 1 e 25921 224 1 1 f 25922 224 1 1 e 25923 224 1 1 e 25924 224 1 1 e 25925 224 1 1 2 4 7 9 10 14 16 18 20 23 26 28 29 30 31 32 34 38 40 42 44 48 54 59 60 61 62 63 66 69 70 72 79 81 82 83 84 85 86 88 90 91 92 95 96 97 99 101 102 104 105 107 109 110 114 115 116 117 118 119 120 121 124 128 132 133 136 138 139 140 142 143 144 145 146 150 151 152 153 154 155 156 157 158 159 160 161 162 164 165 168 170 171 175 176 177 179 181 183 184 188 190 191 192 194 196 199 201 207 210 212 213 214 216 218 219 223 25926 224 1 1 e 25927 224 1 1 2 3 5 8 10 11 12 13 15 16 17 18 20 22 26 29 31 32 37 40 43 46 49 50 53 58 60 63 64 65 67 69 75 76 81 83 84 85 87 89 93 95 98 99 104 105 107 110 111 114 117 119 120 121 122 127 128 130 131 137 138 139 141 142 143 145 146 147 148 150 151 152 153 154 156 159 162 163 164 168 174 175 177 178 179 182 185 186 188 190 192 193 195 196 197 199 200 201 206 209 214 216 218 219 220 221 25928 224 1 1 e 25929 224 1 1 e 25930 224 1 1 e 25931 224 1 1 2 5 7 12 16 20 24 27 29 37 41 44 52 59 60 67 71 75 76 80 81 84 91 104 107 112 113 124 131 133 135 142 146 160 163 164 165 167 169 184 187 188 193 195 196 197 199 213 221 25932 224 1 1 e 25933 224 1 1 e 25934 224 1 1 e 25935 224 1 1 e 25936 224 1 1 e 25937 224 1 1 e 25938 224 1 1 e 25939 224 1 1 f 25940 224 1 1 e 25941 224 1 1 e 25942 224 1 1 e 25943 224 1 1 1 2 4 6 7 9 10 13 14 16 19 21 22 23 24 28 30 31 32 34 35 39 41 42 47 50 54 55 56 58 65 66 67 69 73 75 76 79 81 82 86 87 90 91 93 94 95 96 99 100 102 103 104 105 108 109 110 111 117 118 119 121 125 126 127 128 129 132 133 134 139 140 141 142 143 144 145 149 150 153 154 155 159 161 162 163 167 171 173 174 175 177 178 179 182 183 184 187 188 191 192 193 198 200 201 203 204 205 207 214 217 218 219 223 25944 224 1 1 e 25945 224 1 1 5 6 7 8 9 13 14 16 19 22 24 25 27 28 30 32 35 36 38 39 41 43 44 47 48 49 50 55 57 58 61 62 63 64 66 67 68 69 70 72 75 76 77 78 82 83 84 86 90 93 96 99 102 103 104 106 108 110 112 113 115 116 117 122 123 126 128 130 131 133 134 137 138 141 142 145 148 149 150 156 158 161 163 164 167 169 172 173 174 176 177 178 179 180 183 184 185 187 188 192 193 195 197 198 200 201 202 204 205 206 207 208 210 212 215 217 218 221 222 25946 224 1 1 e 25947 224 1 1 e 25948 224 1 1 e 25949 224 1 1 0 3 7 8 15 16 23 29 31 32 34 41 43 44 48 50 53 61 64 66 72 73 77 85 95 102 104 108 113 116 120 123 126 128 135 137 142 146 149 153 155 157 162 166 167 168 175 186 189 202 208 219 220 25950 224 1 1 e 25951 224 1 1 e 25952 224 1 1 e 25953 224 1 1 e 25954 224 1 1 e 25955 224 1 1 e 25956 224 1 1 e 25957 224 1 1 f 25958 224 1 1 e 25959 224 1 1 e 25960 224 1 1 e 25961 224 1 1 0 1 2 9 10 11 14 15 17 19 20 21 22 23 24 25 29 31 33 38 40 42 43 46 48 49 50 51 55 57 58 61 62 64 65 66 67 68 70 73 76 77 78 79 83 84 87 88 90 91 92 97 98 99 100 101 103 106 107 108 111 112 116 117 118 120 126 128 132 134 135 138 139 140 141 145 147 149 150 151 152 153 154 155 156 160 165 169 170 171 173 174 177 178 181 182 183 185 188 193 194 197 201 202 204 206 207 208 211 212 213 217 220 25962 224 1 1 e 25963 224 1 1 2 3 4 6 7 8 9 12 13 15 16 19 20 21 22 25 27 28 30 31 34 36 37 38 39 40 42 48 49 51 52 57 58 59 60 61 62 65 66 68 69 70 73 74 75 78 83 87 90 92 93 94 96 102 105 107 111 113 114 115 117 118 122 127 128 129 134 135 137 138 139 142 143 146 150 151 152 153 154 161 163 166 167 169 170 175 176 177 184 186 188 189 192 193 195 198 202 203 204 207 209 211 212 213 215 216 217 219 220 221 222 223 25964 224 1 1 e 25965 224 1 1 e 25966 224 1 1 e 25967 224 1 1 3 4 7 16 18 28 35 41 44 46 50 54 62 65 75 76 77 78 81 82 90 110 132 134 141 148 149 160 161 168 170 175 178 183 187 188 194 196 198 204 212 217 219 25968 247 0 0 e 25969 247 0 0 e 25970 247 0 0 e 25971 247 0 0 e 25972 247 0 0 e 25973 247 0 0 e 25974 247 0 0 e 25975 247 0 0 f 25976 247 0 0 e 25977 247 0 0 e 25978 247 0 0 e 25979 247 0 0 0 1 6 7 8 11 12 14 16 18 20 23 25 26 27 28 29 30 31 32 33 34 35 36 39 43 44 49 51 52 55 56 57 58 59 60 65 66 67 68 69 71 73 75 76 78 79 80 85 89 90 91 92 93 94 95 98 99 101 106 107 108 113 114 115 117 118 123 124 125 126 127 132 137 138 139 140 144 145 146 147 150 153 154 155 156 159 162 165 169 171 172 174 176 178 179 181 182 186 187 188 189 191 192 193 194 195 197 200 205 206 207 212 213 214 216 218 223 224 225 226 228 229 232 235 237 243 244 245 246 25980 247 0 0 e 25981 247 0 0 0 1 4 8 9 10 11 16 18 26 28 30 34 36 45 46 48 49 52 53 56 58 59 60 63 64 68 69 70 71 72 76 78 79 80 83 84 85 87 89 90 91 93 94 98 99 100 101 102 103 104 107 108 110 111 114 116 117 120 126 136 137 139 143 149 150 152 153 154 158 159 160 164 165 167 168 169 171 172 173 174 177 178 180 181 182 183 184 186 187 188 189 190 191 192 193 195 196 197 201 204 206 209 210 211 212 214 216 217 219 222 227 228 229 232 233 234 235 237 238 240 241 243 25982 247 0 0 e 25983 247 0 0 e 25984 247 0 0 e 25985 247 0 0 5 11 15 20 23 24 27 29 30 34 53 54 55 56 57 58 62 63 64 69 93 95 96 104 105 108 110 118 136 138 139 142 143 145 150 155 156 160 165 166 177 179 181 183 188 192 194 198 208 213 214 220 225 231 233 243 25986 247 0 0 e 25987 247 0 0 e 25988 247 0 0 e 25989 247 0 0 e 25990 247 0 0 e 25991 247 0 0 e 25992 247 0 0 e 25993 247 0 0 f 25994 247 0 0 e 25995 247 0 0 e 25996 247 0 0 e 25997 247 0 0 0 1 2 4 5 7 10 18 19 20 22 24 26 27 28 29 30 34 35 36 37 41 48 49 50 55 57 61 64 65 66 68 71 72 74 75 76 77 78 81 84 86 88 89 91 94 95 99 104 105 106 109 114 115 118 119 121 125 128 130 133 135 137 138 141 144 145 147 149 152 155 156 158 159 162 163 164 165 167 170 171 172 173 174 175 176 177 179 180 181 182 184 185 186 187 193 194 195 201 202 203 205 207 209 211 213 214 215 216 219 222 224 225 226 227 228 229 231 233 235 237 239 241 246 25998 247 0 0 e 25999 247 0 0 1 2 3 5 6 8 12 13 19 21 22 23 24 27 28 30 33 34 35 36 37 38 39 42 46 47 48 50 51 52 54 55 56 59 60 62 63 65 66 68 69 70 73 74 77 79 81 82 85 86 88 90 91 92 93 94 96 98 99 101 104 106 107 110 111 113 114 115 116 117 118 119 121 124 126 127 128 129 130 131 136 140 143 146 147 149 150 151 152 155 158 160 161 165 166 169 170 171 173 174 177 186 187 188 189 191 195 197 198 200 201 204 206 207 211 213 214 215 217 218 219 220 222 224 225 226 227 228 229 231 232 233 237 239 241 243 244 246 26000 247 0 0 e 26001 247 0 0 e 26002 247 0 0 e 26003 247 0 0 2 3 16 18 21 26 29 31 36 45 49 55 58 60 66 71 76 86 89 96 100 106 107 111 114 115 117 129 130 132 133 136 148 149 155 163 164 171 172 181 186 193 196 201 203 204 205 217 223 224 225 232 233 238 239 240 241 244 245 26004 247 0 0 e 26005 247 0 0 e 26006 247 0 0 e 26007 247 0 0 e 26008 247 0 0 e 26009 247 0 0 e 26010 247 0 0 e 26011 247 0 0 f 26012 247 0 0 e 26013 247 0 0 e 26014 247 0 0 e 26015 247 0 0 0 3 5 6 7 9 10 11 13 14 16 20 21 22 25 28 29 32 34 35 36 38 39 44 51 52 53 54 55 59 60 63 65 67 69 72 83 84 85 87 88 90 91 93 98 101 103 110 112 113 114 121 122 123 125 126 128 129 130 131 133 134 137 138 140 142 144 146 147 149 150 151 156 157 159 161 163 164 165 166 167 170 175 176 177 178 179 184 189 190 194 195 196 197 200 206 207 210 212 213 214 217 223 227 228 229 230 232 233 235 238 243 244 245 246 26016 247 0 0 e 26017 247 0 0 2 5 6 7 8 9 13 17 18 19 20 21 23 24 27 29 31 34 37 40 41 44 45 46 48 49 50 52 57 59 61 62 63 64 65 68 71 73 75 76 77 79 80 86 87 90 91 93 97 101 102 104 107 109 110 111 112 113 119 120 125 127 128 129 130 131 132 133 135 137 138 140 141 143 144 145 149 150 154 165 168 170 172 175 178 179 181 186 187 191 194 195 199 204 205 213 214 215 216 217 218 221 223 227 229 230 231 232 235 236 237 238 240 242 244 245 246 26018 247 0 0 e 26019 247 0 0 e 26020 247 0 0 e 26021 247 0 0 2 9 11 18 31 45 48 49 53 58 68 70 72 75 84 91 93 98 101 102 103 106 107 117 133 145 148 155 161 167 170 181 183 184 191 192 207 211 216 217 220 227 229 231 236 240 241 245 26022 247 0 0 e 26023 247 0 0 e 26024 247 0 0 e 26025 247 0 0 e 26026 247 0 0 e 26027 247 0 0 e 26028 247 0 0 e 26029 247 0 0 f 26030 247 0 0 e 26031 247 0 0 e 26032 247 0 0 e 26033 247 0 0 0 1 2 4 5 6 8 9 11 17 18 19 21 27 28 30 32 33 38 40 41 42 43 44 46 47 48 49 51 53 54 56 58 62 63 64 65 66 68 72 73 76 77 78 84 85 88 89 90 91 95 96 98 99 101 102 104 105 108 110 111 113 115 118 122 126 129 130 135 137 139 140 141 143 148 149 151 154 160 161 165 166 169 170 171 173 178 179 180 181 183 184 185 187 188 190 191 194 196 199 201 206 210 211 212 213 214 215 217 220 222 223 226 227 229 234 235 238 241 242 243 26034 247 0 0 e 26035 247 0 0 6 7 9 10 11 12 14 16 17 18 20 21 22 23 24 28 29 30 34 35 36 37 40 43 44 47 53 57 60 62 63 64 65 66 67 68 71 72 73 77 79 80 85 87 88 89 90 93 101 102 104 106 109 113 115 116 117 118 119 120 121 125 126 127 128 134 136 138 139 143 145 146 148 149 151 155 158 160 162 166 168 169 175 179 182 183 184 185 186 189 191 192 196 197 198 199 200 201 203 205 206 207 209 210 217 218 219 220 222 223 225 228 229 230 231 232 234 236 241 242 243 245 26036 247 0 0 e 26037 247 0 0 e 26038 247 0 0 e 26039 247 0 0 0 4 6 8 14 15 23 28 29 31 34 35 40 41 46 49 51 63 64 65 69 73 76 79 85 86 90 99 102 103 104 115 116 122 123 130 131 132 136 137 141 143 144 147 149 154 159 167 175 176 182 189 192 193 195 196 201 204 217 219 223 229 236 237 241 26040 247 0 1 e 26041 247 0 1 e 26042 247 0 1 e 26043 247 0 1 e 26044 247 0 1 e 26045 247 0 1 e 26046 247 0 1 e 26047 247 0 1 f 26048 247 0 1 e 26049 247 0 1 e 26050 247 0 1 e 26051 247 0 1 8 11 12 13 14 16 21 22 23 25 28 30 31 32 33 34 35 36 38 41 43 45 48 51 52 54 55 56 57 58 60 64 65 66 68 71 72 74 77 79 80 82 86 87 88 94 95 96 98 99 100 101 105 110 111 112 114 115 118 119 121 124 125 126 128 130 134 136 137 141 142 143 145 148 149 155 156 161 162 164 167 168 170 171 176 177 179 182 183 185 187 188 193 195 196 197 200 201 203 206 207 208 213 214 215 216 217 224 225 226 230 231 232 233 234 235 236 238 239 241 242 243 244 26052 247 0 1 e 26053 247 0 1 0 2 3 8 9 12 14 16 18 19 20 25 26 27 29 30 32 34 36 39 41 46 48 52 53 54 58 59 61 62 65 69 70 71 72 78 80 81 82 83 84 86 88 89 90 92 93 95 96 97 100 103 105 107 111 113 114 115 117 120 122 129 130 132 137 140 141 144 148 150 151 152 155 156 157 159 161 166 170 175 176 177 179 181 183 185 186 191 196 198 200 201 205 208 210 211 214 215 217 219 222 224 226 227 228 229 231 232 233 234 236 238 240 241 26054 247 0 1 e 26055 247 0 1 e 26056 247 0 1 e 26057 247 0 1 7 8 12 13 14 28 30 33 43 47 48 50 64 69 75 76 81 85 90 93 98 101 103 107 115 118 119 120 126 127 128 133 134 137 141 142 151 152 157 163 171 174 175 176 179 183 184 191 199 206 207 208 209 211 214 222 232 233 240 26058 247 0 1 e 26059 247 0 1 e 26060 247 0 1 e 26061 247 0 1 e 26062 247 0 1 e 26063 247 0 1 e 26064 247 0 1 e 26065 247 0 1 f 26066 247 0 1 e 26067 247 0 1 e 26068 247 0 1 e 26069 247 0 1 0 1 3 4 6 8 10 13 15 16 24 25 30 31 34 35 38 39 42 43 45 47 48 50 51 54 56 59 62 66 69 70 71 72 75 76 80 83 85 86 87 88 90 100 101 102 104 105 111 119 121 122 124 127 130 131 132 133 134 137 142 144 146 147 149 155 161 162 163 166 167 169 170 172 173 176 177 178 179 182 185 186 188 189 191 192 193 195 196 197 199 202 203 204 208 209 210 212 215 216 218 220 221 222 225 230 233 234 235 236 237 238 240 245 26070 247 0 1 e 26071 247 0 1 4 6 16 17 21 26 27 28 30 32 35 36 39 41 43 44 45 46 47 48 53 56 59 60 63 64 65 66 68 69 72 73 75 78 80 81 83 84 85 87 89 90 93 96 98 99 103 104 106 108 110 117 118 119 120 121 124 125 126 128 132 135 136 137 139 141 143 145 148 151 152 155 157 164 165 166 167 168 170 173 176 178 180 183 184 187 189 191 193 201 203 204 205 207 211 214 216 220 225 227 228 229 230 232 235 240 241 26072 247 0 1 e 26073 247 0 1 e 26074 247 0 1 e 26075 247 0 1 1 2 5 6 9 15 20 22 30 31 37 38 39 44 45 51 55 62 65 66 76 79 87 93 101 104 105 112 116 127 128 131 132 142 144 148 152 155 157 162 163 167 175 177 178 180 185 198 204 206 211 215 223 226 229 236 239 240 26076 247 0 1 e 26077 247 0 1 e 26078 247 0 1 e 26079 247 0 1 e 26080 247 0 1 e 26081 247 0 1 e 26082 247 0 1 e 26083 247 0 1 f 26084 247 0 1 e 26085 247 0 1 e 26086 247 0 1 e 26087 247 0 1 0 2 4 5 6 7 13 14 16 17 25 27 28 30 31 34 35 41 42 47 48 50 51 54 55 56 59 61 65 68 71 72 73 74 75 78 79 82 83 90 93 94 97 99 100 103 105 108 109 110 114 116 117 119 120 121 123 125 126 129 130 131 133 136 137 141 145 146 147 149 152 154 155 156 157 159 161 162 164 165 171 173 174 178 179 181 182 183 187 188 190 195 196 197 198 200 201 202 203 206 207 208 211 213 216 218 219 220 222 223 225 229 233 234 235 236 237 240 242 243 244 245 246 26088 247 0 1 e 26089 247 0 1 0 1 6 7 8 9 10 11 12 14 15 18 19 20 22 24 25 26 27 29 31 32 33 36 37 39 40 42 43 44 45 50 52 53 54 55 58 59 61 62 64 65 66 67 68 70 71 72 73 74 75 76 80 83 84 88 93 94 95 96 97 98 99 102 105 107 108 111 112 113 115 116 117 119 122 125 131 132 134 135 138 140 142 144 147 150 151 152 153 157 158 159 160 162 163 164 165 166 168 169 171 172 175 176 178 180 181 183 187 190 192 193 194 195 197 201 208 210 211 213 214 215 218 219 220 221 222 223 225 226 227 228 232 233 234 240 243 246 26090 247 0 1 e 26091 247 0 1 e 26092 247 0 1 e 26093 247 0 1 0 1 5 11 16 17 21 26 29 35 41 44 47 49 55 64 67 73 74 79 80 85 88 90 106 110 114 116 119 126 134 139 142 148 150 152 153 155 158 165 168 179 180 186 190 193 195 197 199 205 225 234 240 244 245 26094 247 0 1 e 26095 247 0 1 e 26096 247 0 1 e 26097 247 0 1 e 26098 247 0 1 e 26099 247 0 1 e 26100 247 0 1 e 26101 247 0 1 f 26102 247 0 1 e 26103 247 0 1 e 26104 247 0 1 e 26105 247 0 1 1 6 7 9 12 15 17 22 24 27 28 29 31 34 35 36 39 42 43 45 46 47 49 50 51 52 54 56 57 58 61 62 63 65 67 68 71 74 76 78 80 82 84 86 88 91 93 98 101 102 104 106 107 110 111 112 117 119 120 123 124 125 126 128 133 135 137 141 143 144 146 147 148 149 152 153 157 159 162 166 168 171 172 175 177 179 181 183 188 190 191 192 193 194 195 196 197 198 200 201 206 212 215 218 219 222 223 224 228 229 230 232 233 234 235 236 238 239 241 243 244 26106 247 0 1 e 26107 247 0 1 1 4 5 6 7 9 10 11 12 13 15 17 19 21 24 27 28 30 31 33 36 41 44 45 46 48 51 53 55 57 58 59 61 62 63 64 67 68 70 76 78 79 80 82 83 86 89 91 92 94 96 97 99 103 105 111 112 113 114 117 118 120 123 124 125 127 128 130 132 133 136 137 138 139 141 142 144 145 146 148 150 151 152 153 154 156 157 159 161 164 165 167 168 170 173 174 176 177 179 182 183 189 191 192 193 195 196 197 199 200 204 207 208 209 216 217 218 221 224 226 232 235 236 237 239 240 241 242 246 26108 247 0 1 e 26109 247 0 1 e 26110 247 0 1 e 26111 247 0 1 1 4 8 10 18 26 27 40 50 52 57 59 67 71 75 82 84 86 89 90 95 100 103 105 108 114 115 116 125 126 129 130 131 136 140 141 142 143 147 150 155 156 167 171 176 178 179 180 187 191 194 196 199 201 203 206 207 211 212 215 216 217 219 220 231 242 26112 247 1 0 e 26113 247 1 0 e 26114 247 1 0 e 26115 247 1 0 e 26116 247 1 0 e 26117 247 1 0 e 26118 247 1 0 e 26119 247 1 0 f 26120 247 1 0 e 26121 247 1 0 e 26122 247 1 0 e 26123 247 1 0 1 3 7 10 12 15 16 17 19 20 27 31 32 36 38 39 41 42 44 46 47 48 49 52 56 58 59 61 65 67 68 69 77 78 79 80 81 82 84 85 88 89 91 92 94 95 96 97 99 100 102 103 105 106 110 111 112 115 116 118 121 123 125 127 128 133 134 135 137 138 139 140 141 143 144 147 148 149 150 151 152 153 155 156 161 165 166 167 169 174 175 176 177 182 183 184 185 188 189 191 194 197 198 201 205 206 207 210 211 215 216 217 222 224 227 228 230 231 232 234 235 236 237 240 241 242 243 244 245 26124 247 1 0 e 26125 247 1 0 0 1 2 3 4 7 8 9 14 16 17 18 19 20 22 23 24 25 29 30 31 33 34 37 38 40 42 44 46 47 50 52 57 58 59 61 62 63 67 70 72 73 74 75 80 82 83 84 85 88 89 90 92 93 98 99 100 101 104 105 107 109 112 115 118 119 121 124 127 128 130 131 133 136 141 142 144 146 148 149 152 155 156 157 158 159 162 163 165 170 171 173 174 177 179 180 181 183 185 186 188 192 193 196 198 200 201 204 209 212 215 217 219 226 228 229 230 231 232 235 237 239 240 242 244 26126 247 1 0 e 26127 247 1 0 e 26128 247 1 0 e 26129 247 1 0 3 8 19 29 30 33 42 52 58 67 69 76 77 89 96 101 103 104 111 113 114 115 120 121 123 124 126 135 146 149 154 156 157 162 167 175 182 188 190 191 195 202 205 209 210 211 214 217 221 227 228 231 237 238 242 243 246 26130 247 1 0 e 26131 247 1 0 e 26132 247 1 0 e 26133 247 1 0 e 26134 247 1 0 e 26135 247 1 0 e 26136 247 1 0 e 26137 247 1 0 f 26138 247 1 0 e 26139 247 1 0 e 26140 247 1 0 e 26141 247 1 0 0 2 9 11 14 15 16 17 18 19 21 24 25 29 30 32 35 36 38 39 40 41 42 43 44 48 49 50 51 52 53 56 59 60 62 65 66 67 68 70 72 74 79 80 81 87 89 90 91 92 94 95 98 99 103 105 106 108 109 110 111 113 114 115 120 121 125 126 130 133 136 137 140 141 142 143 144 145 147 148 149 150 153 156 157 159 162 164 165 166 168 169 170 172 174 176 178 180 183 187 193 196 197 200 201 205 207 208 209 212 215 216 219 222 223 225 226 227 228 229 230 232 233 235 240 244 26142 247 1 0 e 26143 247 1 0 0 1 2 6 7 11 12 13 15 17 18 19 20 21 23 27 28 30 31 32 33 39 41 42 44 46 47 49 50 51 54 55 58 61 62 66 67 71 79 80 81 82 87 88 89 90 92 93 94 97 98 99 102 103 104 105 106 110 113 114 117 119 120 123 125 126 128 129 131 133 134 136 137 140 146 149 153 154 156 157 158 160 166 168 171 172 173 175 177 180 181 182 184 185 186 188 189 190 191 192 196 197 199 201 202 203 204 205 206 208 210 211 217 218 219 220 221 222 223 225 226 227 228 230 238 240 244 245 26144 247 1 0 e 26145 247 1 0 e 26146 247 1 0 e 26147 247 1 0 1 2 8 12 16 18 21 25 26 27 33 38 42 46 50 51 58 59 61 62 63 70 77 78 87 89 91 97 99 100 101 111 115 119 127 129 132 139 141 146 148 150 152 154 162 163 166 171 173 174 176 177 180 181 182 185 188 191 198 200 202 206 208 209 218 219 221 224 226 228 229 240 241 243 26148 247 1 0 e 26149 247 1 0 e 26150 247 1 0 e 26151 247 1 0 e 26152 247 1 0 e 26153 247 1 0 e 26154 247 1 0 e 26155 247 1 0 f 26156 247 1 0 e 26157 247 1 0 e 26158 247 1 0 e 26159 247 1 0 0 3 4 12 13 14 15 16 17 20 22 23 31 34 36 37 39 40 42 43 44 51 53 57 58 60 61 64 65 70 72 74 76 77 78 79 80 81 83 84 85 87 89 90 91 93 94 95 97 99 101 102 103 106 107 108 114 115 116 117 119 121 122 124 127 132 133 134 135 136 140 143 144 148 152 153 156 159 162 166 167 168 174 175 177 180 184 186 188 189 191 192 193 194 195 197 198 199 200 201 202 203 204 206 208 209 212 217 219 222 226 228 230 232 235 237 238 239 241 242 243 244 245 246 26160 247 1 0 e 26161 247 1 0 5 6 8 9 11 12 15 18 19 23 25 27 29 31 38 40 43 45 46 47 50 51 52 54 55 58 59 61 62 65 66 67 69 72 73 76 77 84 88 89 92 94 97 101 102 104 105 106 107 108 112 113 114 115 117 120 121 122 123 129 130 131 132 133 135 136 138 139 140 143 145 146 147 148 151 154 156 158 159 161 162 164 165 171 172 174 180 181 183 187 188 190 193 194 196 198 199 200 201 202 203 205 207 209 211 212 213 214 220 222 224 225 226 227 230 233 235 237 238 239 240 242 243 245 26162 247 1 0 e 26163 247 1 0 e 26164 247 1 0 e 26165 247 1 0 0 3 11 23 26 31 32 38 39 40 46 62 63 66 71 73 74 81 84 88 91 95 96 99 103 105 106 113 116 119 120 125 126 132 133 134 136 142 144 145 151 154 156 157 158 162 164 175 176 179 186 187 195 196 200 201 203 205 206 208 209 211 218 221 231 232 233 234 235 239 240 242 246 26166 247 1 0 e 26167 247 1 0 e 26168 247 1 0 e 26169 247 1 0 e 26170 247 1 0 e 26171 247 1 0 e 26172 247 1 0 e 26173 247 1 0 f 26174 247 1 0 e 26175 247 1 0 e 26176 247 1 0 e 26177 247 1 0 2 5 7 11 14 15 17 21 23 26 27 29 30 32 35 38 40 41 42 43 44 45 46 47 49 50 51 55 57 60 61 64 65 67 68 69 70 73 77 78 81 82 84 85 86 87 88 89 96 98 99 100 101 102 105 109 114 115 116 118 121 124 125 127 128 131 132 133 134 135 136 137 138 139 141 143 144 145 147 148 149 150 151 156 158 161 162 163 167 168 169 170 172 173 174 177 178 179 180 181 182 183 184 185 186 188 192 194 198 200 204 205 206 207 210 211 212 214 216 220 221 224 227 230 231 233 237 238 239 240 243 245 246 26178 247 1 0 e 26179 247 1 0 1 2 3 6 8 9 10 12 13 15 16 17 18 19 22 23 24 25 26 29 31 32 34 36 38 39 41 43 44 45 46 49 51 54 56 57 60 61 63 65 69 71 72 73 74 77 78 79 80 82 85 88 89 90 92 98 99 106 107 108 109 110 111 112 113 114 116 118 121 122 126 128 129 133 135 136 139 140 142 143 144 145 147 151 155 163 165 169 173 176 177 178 179 182 183 185 187 189 193 196 197 198 199 200 201 203 204 207 210 215 217 218 219 223 224 227 229 230 231 232 233 234 235 238 239 243 244 246 26180 247 1 0 e 26181 247 1 0 e 26182 247 1 0 e 26183 247 1 0 5 6 12 13 22 25 27 31 35 36 37 38 42 51 52 53 54 57 60 66 72 75 79 80 85 89 96 100 112 117 118 125 129 131 134 136 137 144 145 146 151 154 158 161 162 163 172 174 175 176 177 178 181 183 203 207 215 216 218 223 227 230 233 241 242 245 26184 247 1 1 e 26185 247 1 1 e 26186 247 1 1 e 26187 247 1 1 e 26188 247 1 1 e 26189 247 1 1 e 26190 247 1 1 e 26191 247 1 1 f 26192 247 1 1 e 26193 247 1 1 e 26194 247 1 1 e 26195 247 1 1 0 1 3 4 5 9 11 13 16 18 20 21 23 25 27 28 29 30 33 34 37 41 43 46 48 49 53 54 57 58 59 63 64 65 66 68 69 71 75 76 78 80 81 83 85 86 94 95 96 98 106 107 110 111 113 117 118 120 121 122 123 124 126 128 130 131 133 134 135 136 137 140 142 143 144 148 149 151 153 155 157 158 159 164 165 166 167 170 174 175 177 178 182 184 185 186 187 188 189 191 192 194 195 197 200 201 203 204 208 213 215 218 219 220 221 226 228 229 233 234 236 237 240 243 244 245 246 26196 247 1 1 e 26197 247 1 1 2 4 7 10 12 14 15 16 19 20 22 23 24 25 27 29 31 36 39 40 48 51 52 55 57 58 59 60 62 64 65 66 73 74 75 76 77 79 81 85 87 88 89 90 91 93 95 96 100 101 104 107 109 111 112 113 116 119 122 123 124 126 127 128 130 131 134 135 136 138 139 140 142 143 145 146 151 154 156 159 160 163 164 166 168 169 171 172 179 180 181 182 184 186 187 188 189 191 193 194 195 197 201 202 206 208 211 212 213 214 215 217 218 220 223 225 226 227 228 230 233 234 235 240 243 246 26198 247 1 1 e 26199 247 1 1 e 26200 247 1 1 e 26201 247 1 1 0 1 5 13 15 17 22 23 26 27 31 34 41 42 45 59 61 62 69 76 82 83 96 97 105 110 115 117 118 126 130 134 135 140 142 143 152 154 156 165 166 174 175 177 179 189 192 199 200 202 205 207 211 214 223 227 228 232 240 26202 247 1 1 e 26203 247 1 1 e 26204 247 1 1 e 26205 247 1 1 e 26206 247 1 1 e 26207 247 1 1 e 26208 247 1 1 e 26209 247 1 1 f 26210 247 1 1 e 26211 247 1 1 e 26212 247 1 1 e 26213 247 1 1 2 3 8 12 13 16 18 20 21 22 23 24 26 28 30 33 34 35 36 37 38 40 41 45 47 48 50 52 53 54 56 57 60 61 66 67 68 71 72 74 75 76 79 82 83 84 85 86 89 91 93 94 95 96 102 103 104 105 108 109 110 111 112 113 117 122 124 125 126 128 130 134 135 136 140 141 142 145 154 156 161 163 167 171 173 174 176 177 178 179 180 181 183 184 185 186 188 190 192 193 194 195 196 197 198 199 201 205 207 209 210 211 212 213 214 218 219 222 224 226 227 232 233 238 239 243 244 245 246 26214 247 1 1 e 26215 247 1 1 1 2 4 5 6 7 8 10 13 16 17 19 23 25 26 27 29 30 32 33 34 35 37 42 43 48 49 52 58 59 61 64 66 68 70 72 73 74 76 79 80 81 83 85 87 93 94 95 96 97 99 101 104 107 109 110 112 115 117 118 120 122 124 125 127 130 131 134 138 139 141 144 145 148 149 150 151 153 154 159 160 162 165 167 170 171 174 182 184 185 186 189 191 195 196 197 198 201 202 205 206 207 210 213 214 216 217 218 220 223 224 226 227 230 233 234 236 237 240 242 245 246 26216 247 1 1 e 26217 247 1 1 e 26218 247 1 1 e 26219 247 1 1 4 5 9 10 11 12 18 24 26 32 37 38 40 48 50 51 54 56 57 58 60 66 68 70 73 75 80 84 85 95 97 99 100 104 105 109 111 115 123 125 130 138 145 151 161 164 166 192 196 197 210 221 228 231 233 239 240 26220 247 1 1 e 26221 247 1 1 e 26222 247 1 1 e 26223 247 1 1 e 26224 247 1 1 e 26225 247 1 1 e 26226 247 1 1 e 26227 247 1 1 f 26228 247 1 1 e 26229 247 1 1 e 26230 247 1 1 e 26231 247 1 1 0 1 2 3 5 6 8 9 10 12 13 16 18 21 22 23 24 25 28 29 31 32 35 36 38 39 40 42 43 45 46 47 50 54 55 57 58 59 60 65 66 67 68 69 72 74 75 76 79 80 82 83 85 91 94 96 97 98 102 103 106 107 108 109 110 112 114 116 117 120 122 123 124 125 126 129 130 132 134 135 139 141 142 143 146 147 150 151 153 154 155 160 161 164 165 166 167 170 172 174 175 176 177 178 179 180 183 184 185 186 187 189 190 191 193 195 196 197 199 200 201 202 203 207 208 209 215 217 218 222 225 226 227 228 229 232 233 234 235 236 239 240 242 243 245 246 26232 247 1 1 e 26233 247 1 1 0 1 2 3 4 5 6 7 8 12 16 17 18 20 21 24 26 29 30 31 32 33 34 37 40 43 44 45 47 49 52 53 54 55 57 58 59 60 61 62 66 67 72 73 74 75 78 79 83 86 87 89 91 95 96 98 99 100 104 109 111 113 114 119 121 122 123 124 126 127 128 129 130 132 133 134 135 139 141 144 146 148 151 152 153 154 155 158 159 167 168 169 171 172 173 175 179 180 182 183 185 186 187 190 192 194 196 197 200 201 204 205 207 210 212 213 214 216 217 219 221 226 227 229 231 232 233 236 237 242 245 246 26234 247 1 1 e 26235 247 1 1 e 26236 247 1 1 e 26237 247 1 1 1 12 14 17 20 21 24 29 30 37 40 47 50 60 64 71 75 79 86 88 101 103 104 113 119 120 121 123 125 126 136 137 138 139 142 144 147 148 152 153 154 156 157 158 164 166 167 174 178 180 189 197 198 200 202 203 208 210 221 223 225 226 232 236 240 245 246 26238 247 1 1 e 26239 247 1 1 e 26240 247 1 1 e 26241 247 1 1 e 26242 247 1 1 e 26243 247 1 1 e 26244 247 1 1 e 26245 247 1 1 f 26246 247 1 1 e 26247 247 1 1 e 26248 247 1 1 e 26249 247 1 1 3 5 6 8 9 10 11 13 16 17 18 26 29 30 32 33 34 35 36 38 40 42 43 45 46 47 55 57 58 63 65 67 68 70 71 76 79 82 83 85 89 90 92 93 94 95 96 97 100 101 102 104 110 114 116 117 118 119 122 124 126 130 131 132 134 135 138 141 142 143 144 146 147 161 163 165 168 170 172 174 178 180 182 183 185 186 188 190 191 192 193 194 195 197 200 201 204 205 206 207 208 213 217 218 220 222 223 224 227 230 231 232 233 237 240 244 26250 247 1 1 e 26251 247 1 1 1 7 8 11 21 26 28 29 30 31 32 35 37 38 40 46 47 48 56 58 61 63 64 65 66 69 70 72 73 74 80 81 82 83 87 88 91 92 93 94 95 96 97 100 102 103 107 108 109 111 113 114 115 118 119 122 125 127 128 129 131 133 137 143 145 146 147 150 151 152 153 155 156 157 158 159 160 163 165 167 168 169 175 177 179 184 185 187 193 195 196 197 199 201 202 203 207 209 211 213 214 216 218 223 225 226 231 232 234 238 239 246 26252 247 1 1 e 26253 247 1 1 e 26254 247 1 1 e 26255 247 1 1 8 12 13 14 15 21 27 35 42 49 53 56 58 59 61 64 71 78 79 84 93 98 104 108 115 116 119 127 128 130 136 139 141 146 148 152 155 161 164 167 168 172 176 182 184 192 199 201 219 236 240 241 26256 0 0 0 e 26257 0 0 0 e 26258 0 0 0 e 26259 0 0 0 e 26260 0 0 0 e 26261 0 0 0 e 26262 0 0 0 e 26263 0 0 0 e 26264 0 0 0 e 26265 0 0 0 e 26266 0 0 0 e 26267 0 0 0 e 26268 0 0 0 e 26269 0 0 0 e 26270 0 0 0 e 26271 0 0 0 e 26272 0 0 0 e 26273 0 0 0 e 26274 0 0 0 e 26275 0 0 0 e 26276 0 0 0 e 26277 0 0 0 e 26278 0 0 0 e 26279 0 0 0 e 26280 0 0 0 e 26281 0 0 0 e 26282 0 0 0 e 26283 0 0 0 e 26284 0 0 0 e 26285 0 0 0 e 26286 0 0 0 e 26287 0 0 0 e 26288 0 0 0 e 26289 0 0 0 e 26290 0 0 0 e 26291 0 0 0 e 26292 0 0 0 e 26293 0 0 0 e 26294 0 0 0 e 26295 0 0 0 e 26296 0 0 0 e 26297 0 0 0 e 26298 0 0 0 e 26299 0 0 0 e 26300 0 0 0 e 26301 0 0 0 e 26302 0 0 0 e 26303 0 0 0 e 26304 0 0 0 e 26305 0 0 0 e 26306 0 0 0 e 26307 0 0 0 e 26308 0 0 0 e 26309 0 0 0 e 26310 0 0 0 e 26311 0 0 0 e 26312 0 0 0 e 26313 0 0 0 e 26314 0 0 0 e 26315 0 0 0 e 26316 0 0 0 e 26317 0 0 0 e 26318 0 0 0 e 26319 0 0 0 e 26320 0 0 0 e 26321 0 0 0 e 26322 0 0 0 e 26323 0 0 0 e 26324 0 0 0 e 26325 0 0 0 e 26326 0 0 0 e 26327 0 0 0 e 26328 0 0 1 e 26329 0 0 1 e 26330 0 0 1 e 26331 0 0 1 e 26332 0 0 1 e 26333 0 0 1 e 26334 0 0 1 e 26335 0 0 1 e 26336 0 0 1 e 26337 0 0 1 e 26338 0 0 1 e 26339 0 0 1 e 26340 0 0 1 e 26341 0 0 1 e 26342 0 0 1 e 26343 0 0 1 e 26344 0 0 1 e 26345 0 0 1 e 26346 0 0 1 e 26347 0 0 1 e 26348 0 0 1 e 26349 0 0 1 e 26350 0 0 1 e 26351 0 0 1 e 26352 0 0 1 e 26353 0 0 1 e 26354 0 0 1 e 26355 0 0 1 e 26356 0 0 1 e 26357 0 0 1 e 26358 0 0 1 e 26359 0 0 1 e 26360 0 0 1 e 26361 0 0 1 e 26362 0 0 1 e 26363 0 0 1 e 26364 0 0 1 e 26365 0 0 1 e 26366 0 0 1 e 26367 0 0 1 e 26368 0 0 1 e 26369 0 0 1 e 26370 0 0 1 e 26371 0 0 1 e 26372 0 0 1 e 26373 0 0 1 e 26374 0 0 1 e 26375 0 0 1 e 26376 0 0 1 e 26377 0 0 1 e 26378 0 0 1 e 26379 0 0 1 e 26380 0 0 1 e 26381 0 0 1 e 26382 0 0 1 e 26383 0 0 1 e 26384 0 0 1 e 26385 0 0 1 e 26386 0 0 1 e 26387 0 0 1 e 26388 0 0 1 e 26389 0 0 1 e 26390 0 0 1 e 26391 0 0 1 e 26392 0 0 1 e 26393 0 0 1 e 26394 0 0 1 e 26395 0 0 1 e 26396 0 0 1 e 26397 0 0 1 e 26398 0 0 1 e 26399 0 0 1 e 26400 0 1 0 e 26401 0 1 0 e 26402 0 1 0 e 26403 0 1 0 e 26404 0 1 0 e 26405 0 1 0 e 26406 0 1 0 e 26407 0 1 0 e 26408 0 1 0 e 26409 0 1 0 e 26410 0 1 0 e 26411 0 1 0 e 26412 0 1 0 e 26413 0 1 0 e 26414 0 1 0 e 26415 0 1 0 e 26416 0 1 0 e 26417 0 1 0 e 26418 0 1 0 e 26419 0 1 0 e 26420 0 1 0 e 26421 0 1 0 e 26422 0 1 0 e 26423 0 1 0 e 26424 0 1 0 e 26425 0 1 0 e 26426 0 1 0 e 26427 0 1 0 e 26428 0 1 0 e 26429 0 1 0 e 26430 0 1 0 e 26431 0 1 0 e 26432 0 1 0 e 26433 0 1 0 e 26434 0 1 0 e 26435 0 1 0 e 26436 0 1 0 e 26437 0 1 0 e 26438 0 1 0 e 26439 0 1 0 e 26440 0 1 0 e 26441 0 1 0 e 26442 0 1 0 e 26443 0 1 0 e 26444 0 1 0 e 26445 0 1 0 e 26446 0 1 0 e 26447 0 1 0 e 26448 0 1 0 e 26449 0 1 0 e 26450 0 1 0 e 26451 0 1 0 e 26452 0 1 0 e 26453 0 1 0 e 26454 0 1 0 e 26455 0 1 0 e 26456 0 1 0 e 26457 0 1 0 e 26458 0 1 0 e 26459 0 1 0 e 26460 0 1 0 e 26461 0 1 0 e 26462 0 1 0 e 26463 0 1 0 e 26464 0 1 0 e 26465 0 1 0 e 26466 0 1 0 e 26467 0 1 0 e 26468 0 1 0 e 26469 0 1 0 e 26470 0 1 0 e 26471 0 1 0 e 26472 0 1 1 e 26473 0 1 1 e 26474 0 1 1 e 26475 0 1 1 e 26476 0 1 1 e 26477 0 1 1 e 26478 0 1 1 e 26479 0 1 1 e 26480 0 1 1 e 26481 0 1 1 e 26482 0 1 1 e 26483 0 1 1 e 26484 0 1 1 e 26485 0 1 1 e 26486 0 1 1 e 26487 0 1 1 e 26488 0 1 1 e 26489 0 1 1 e 26490 0 1 1 e 26491 0 1 1 e 26492 0 1 1 e 26493 0 1 1 e 26494 0 1 1 e 26495 0 1 1 e 26496 0 1 1 e 26497 0 1 1 e 26498 0 1 1 e 26499 0 1 1 e 26500 0 1 1 e 26501 0 1 1 e 26502 0 1 1 e 26503 0 1 1 e 26504 0 1 1 e 26505 0 1 1 e 26506 0 1 1 e 26507 0 1 1 e 26508 0 1 1 e 26509 0 1 1 e 26510 0 1 1 e 26511 0 1 1 e 26512 0 1 1 e 26513 0 1 1 e 26514 0 1 1 e 26515 0 1 1 e 26516 0 1 1 e 26517 0 1 1 e 26518 0 1 1 e 26519 0 1 1 e 26520 0 1 1 e 26521 0 1 1 e 26522 0 1 1 e 26523 0 1 1 e 26524 0 1 1 e 26525 0 1 1 e 26526 0 1 1 e 26527 0 1 1 e 26528 0 1 1 e 26529 0 1 1 e 26530 0 1 1 e 26531 0 1 1 e 26532 0 1 1 e 26533 0 1 1 e 26534 0 1 1 e 26535 0 1 1 e 26536 0 1 1 e 26537 0 1 1 e 26538 0 1 1 e 26539 0 1 1 e 26540 0 1 1 e 26541 0 1 1 e 26542 0 1 1 e 26543 0 1 1 e 26544 1 0 0 e 26545 1 0 0 e 26546 1 0 0 e 26547 1 0 0 f 26548 1 0 0 e 26549 1 0 0 f 26550 1 0 0 e 26551 1 0 0 e 26552 1 0 0 e 26553 1 0 0 e 26554 1 0 0 e 26555 1 0 0 e 26556 1 0 0 e 26557 1 0 0 e 26558 1 0 0 e 26559 1 0 0 f 26560 1 0 0 e 26561 1 0 0 e 26562 1 0 0 e 26563 1 0 0 e 26564 1 0 0 e 26565 1 0 0 f 26566 1 0 0 e 26567 1 0 0 f 26568 1 0 0 e 26569 1 0 0 e 26570 1 0 0 e 26571 1 0 0 e 26572 1 0 0 e 26573 1 0 0 e 26574 1 0 0 e 26575 1 0 0 e 26576 1 0 0 e 26577 1 0 0 e 26578 1 0 0 e 26579 1 0 0 f 26580 1 0 0 e 26581 1 0 0 e 26582 1 0 0 e 26583 1 0 0 f 26584 1 0 0 e 26585 1 0 0 f 26586 1 0 0 e 26587 1 0 0 e 26588 1 0 0 e 26589 1 0 0 e 26590 1 0 0 e 26591 1 0 0 e 26592 1 0 0 e 26593 1 0 0 e 26594 1 0 0 e 26595 1 0 0 e 26596 1 0 0 e 26597 1 0 0 e 26598 1 0 0 e 26599 1 0 0 e 26600 1 0 0 e 26601 1 0 0 f 26602 1 0 0 e 26603 1 0 0 e 26604 1 0 0 e 26605 1 0 0 e 26606 1 0 0 e 26607 1 0 0 e 26608 1 0 0 e 26609 1 0 0 e 26610 1 0 0 e 26611 1 0 0 e 26612 1 0 0 e 26613 1 0 0 e 26614 1 0 0 e 26615 1 0 0 e 26616 1 0 1 e 26617 1 0 1 e 26618 1 0 1 e 26619 1 0 1 f 26620 1 0 1 e 26621 1 0 1 e 26622 1 0 1 e 26623 1 0 1 e 26624 1 0 1 e 26625 1 0 1 e 26626 1 0 1 e 26627 1 0 1 e 26628 1 0 1 e 26629 1 0 1 e 26630 1 0 1 e 26631 1 0 1 f 26632 1 0 1 e 26633 1 0 1 f 26634 1 0 1 e 26635 1 0 1 e 26636 1 0 1 e 26637 1 0 1 f 26638 1 0 1 e 26639 1 0 1 e 26640 1 0 1 e 26641 1 0 1 e 26642 1 0 1 e 26643 1 0 1 e 26644 1 0 1 e 26645 1 0 1 e 26646 1 0 1 e 26647 1 0 1 e 26648 1 0 1 e 26649 1 0 1 e 26650 1 0 1 e 26651 1 0 1 e 26652 1 0 1 e 26653 1 0 1 e 26654 1 0 1 e 26655 1 0 1 f 26656 1 0 1 e 26657 1 0 1 e 26658 1 0 1 e 26659 1 0 1 e 26660 1 0 1 e 26661 1 0 1 e 26662 1 0 1 e 26663 1 0 1 e 26664 1 0 1 e 26665 1 0 1 e 26666 1 0 1 e 26667 1 0 1 e 26668 1 0 1 e 26669 1 0 1 e 26670 1 0 1 e 26671 1 0 1 e 26672 1 0 1 e 26673 1 0 1 f 26674 1 0 1 e 26675 1 0 1 e 26676 1 0 1 e 26677 1 0 1 e 26678 1 0 1 e 26679 1 0 1 e 26680 1 0 1 e 26681 1 0 1 e 26682 1 0 1 e 26683 1 0 1 e 26684 1 0 1 e 26685 1 0 1 e 26686 1 0 1 e 26687 1 0 1 e 26688 1 1 0 e 26689 1 1 0 e 26690 1 1 0 e 26691 1 1 0 f 26692 1 1 0 e 26693 1 1 0 e 26694 1 1 0 e 26695 1 1 0 e 26696 1 1 0 e 26697 1 1 0 e 26698 1 1 0 e 26699 1 1 0 e 26700 1 1 0 e 26701 1 1 0 e 26702 1 1 0 e 26703 1 1 0 e 26704 1 1 0 e 26705 1 1 0 e 26706 1 1 0 e 26707 1 1 0 e 26708 1 1 0 e 26709 1 1 0 f 26710 1 1 0 e 26711 1 1 0 f 26712 1 1 0 e 26713 1 1 0 e 26714 1 1 0 e 26715 1 1 0 e 26716 1 1 0 e 26717 1 1 0 e 26718 1 1 0 e 26719 1 1 0 e 26720 1 1 0 e 26721 1 1 0 f 26722 1 1 0 e 26723 1 1 0 e 26724 1 1 0 e 26725 1 1 0 e 26726 1 1 0 e 26727 1 1 0 f 26728 1 1 0 e 26729 1 1 0 e 26730 1 1 0 e 26731 1 1 0 e 26732 1 1 0 e 26733 1 1 0 e 26734 1 1 0 e 26735 1 1 0 e 26736 1 1 0 e 26737 1 1 0 e 26738 1 1 0 e 26739 1 1 0 f 26740 1 1 0 e 26741 1 1 0 e 26742 1 1 0 e 26743 1 1 0 e 26744 1 1 0 e 26745 1 1 0 f 26746 1 1 0 e 26747 1 1 0 e 26748 1 1 0 e 26749 1 1 0 e 26750 1 1 0 e 26751 1 1 0 e 26752 1 1 0 e 26753 1 1 0 e 26754 1 1 0 e 26755 1 1 0 e 26756 1 1 0 e 26757 1 1 0 f 26758 1 1 0 e 26759 1 1 0 e 26760 1 1 1 e 26761 1 1 1 e 26762 1 1 1 e 26763 1 1 1 f 26764 1 1 1 e 26765 1 1 1 e 26766 1 1 1 e 26767 1 1 1 e 26768 1 1 1 e 26769 1 1 1 e 26770 1 1 1 e 26771 1 1 1 e 26772 1 1 1 e 26773 1 1 1 e 26774 1 1 1 e 26775 1 1 1 f 26776 1 1 1 e 26777 1 1 1 e 26778 1 1 1 e 26779 1 1 1 e 26780 1 1 1 e 26781 1 1 1 f 26782 1 1 1 e 26783 1 1 1 f 26784 1 1 1 e 26785 1 1 1 e 26786 1 1 1 e 26787 1 1 1 e 26788 1 1 1 e 26789 1 1 1 e 26790 1 1 1 e 26791 1 1 1 e 26792 1 1 1 e 26793 1 1 1 f 26794 1 1 1 e 26795 1 1 1 f 26796 1 1 1 e 26797 1 1 1 e 26798 1 1 1 e 26799 1 1 1 f 26800 1 1 1 e 26801 1 1 1 e 26802 1 1 1 e 26803 1 1 1 e 26804 1 1 1 e 26805 1 1 1 e 26806 1 1 1 e 26807 1 1 1 e 26808 1 1 1 e 26809 1 1 1 e 26810 1 1 1 e 26811 1 1 1 e 26812 1 1 1 e 26813 1 1 1 e 26814 1 1 1 e 26815 1 1 1 e 26816 1 1 1 e 26817 1 1 1 f 26818 1 1 1 e 26819 1 1 1 e 26820 1 1 1 e 26821 1 1 1 e 26822 1 1 1 e 26823 1 1 1 e 26824 1 1 1 e 26825 1 1 1 e 26826 1 1 1 e 26827 1 1 1 e 26828 1 1 1 e 26829 1 1 1 e 26830 1 1 1 e 26831 1 1 1 f 26832 31 0 0 e 26833 31 0 0 e 26834 31 0 0 e 26835 31 0 0 f 26836 31 0 0 e 26837 31 0 0 1 4 5 6 8 9 10 11 12 15 16 18 20 22 24 26 30 26838 31 0 0 e 26839 31 0 0 e 26840 31 0 0 e 26841 31 0 0 e 26842 31 0 0 e 26843 31 0 0 e 26844 31 0 0 e 26845 31 0 0 e 26846 31 0 0 e 26847 31 0 0 0 3 4 5 7 8 12 14 15 16 19 20 21 22 24 25 29 26848 31 0 0 e 26849 31 0 0 3 7 10 12 20 21 23 26850 31 0 0 e 26851 31 0 0 e 26852 31 0 0 e 26853 31 0 0 f 26854 31 0 0 e 26855 31 0 0 0 2 3 9 11 12 15 17 22 25 26 27 29 30 26856 31 0 0 e 26857 31 0 0 e 26858 31 0 0 e 26859 31 0 0 e 26860 31 0 0 e 26861 31 0 0 e 26862 31 0 0 e 26863 31 0 0 e 26864 31 0 0 e 26865 31 0 0 0 1 2 5 9 10 11 12 14 15 19 20 23 25 26 27 28 26866 31 0 0 e 26867 31 0 0 5 19 22 23 26868 31 0 0 e 26869 31 0 0 e 26870 31 0 0 e 26871 31 0 0 f 26872 31 0 0 e 26873 31 0 0 1 2 4 7 8 9 10 11 12 13 14 15 19 22 24 26 28 30 26874 31 0 0 e 26875 31 0 0 e 26876 31 0 0 e 26877 31 0 0 e 26878 31 0 0 e 26879 31 0 0 e 26880 31 0 0 e 26881 31 0 0 e 26882 31 0 0 e 26883 31 0 0 0 1 2 3 7 8 9 11 12 13 16 21 24 26 27 29 26884 31 0 0 e 26885 31 0 0 0 5 6 7 11 20 21 27 29 26886 31 0 0 e 26887 31 0 0 e 26888 31 0 0 e 26889 31 0 0 f 26890 31 0 0 e 26891 31 0 0 0 2 4 7 8 9 11 13 15 17 19 20 24 26 27 29 26892 31 0 0 e 26893 31 0 0 e 26894 31 0 0 e 26895 31 0 0 e 26896 31 0 0 e 26897 31 0 0 e 26898 31 0 0 e 26899 31 0 0 e 26900 31 0 0 e 26901 31 0 0 0 2 5 6 8 9 10 11 12 15 16 17 18 21 23 24 27 28 26902 31 0 0 e 26903 31 0 0 3 9 16 17 20 21 26 28 26904 31 0 1 e 26905 31 0 1 e 26906 31 0 1 e 26907 31 0 1 f 26908 31 0 1 e 26909 31 0 1 1 3 4 5 6 8 9 10 18 21 22 23 24 26 26910 31 0 1 e 26911 31 0 1 e 26912 31 0 1 e 26913 31 0 1 e 26914 31 0 1 e 26915 31 0 1 e 26916 31 0 1 e 26917 31 0 1 e 26918 31 0 1 e 26919 31 0 1 0 1 3 6 8 9 14 15 16 17 19 21 23 27 26920 31 0 1 e 26921 31 0 1 1 3 8 11 16 22 27 28 26922 31 0 1 e 26923 31 0 1 e 26924 31 0 1 e 26925 31 0 1 f 26926 31 0 1 e 26927 31 0 1 0 1 3 4 5 9 12 13 14 16 24 25 26 27 28 26928 31 0 1 e 26929 31 0 1 e 26930 31 0 1 e 26931 31 0 1 e 26932 31 0 1 e 26933 31 0 1 e 26934 31 0 1 e 26935 31 0 1 e 26936 31 0 1 e 26937 31 0 1 1 5 6 7 8 9 10 11 14 16 18 19 20 24 27 29 26938 31 0 1 e 26939 31 0 1 3 5 13 20 23 24 26940 31 0 1 e 26941 31 0 1 e 26942 31 0 1 e 26943 31 0 1 f 26944 31 0 1 e 26945 31 0 1 0 2 4 5 6 7 8 12 14 15 16 18 20 23 28 30 26946 31 0 1 e 26947 31 0 1 e 26948 31 0 1 e 26949 31 0 1 e 26950 31 0 1 e 26951 31 0 1 e 26952 31 0 1 e 26953 31 0 1 e 26954 31 0 1 e 26955 31 0 1 1 2 6 8 12 13 15 16 18 20 22 23 24 27 28 29 26956 31 0 1 e 26957 31 0 1 9 16 24 26958 31 0 1 e 26959 31 0 1 e 26960 31 0 1 e 26961 31 0 1 f 26962 31 0 1 e 26963 31 0 1 0 5 7 10 12 14 16 21 25 26 27 26964 31 0 1 e 26965 31 0 1 e 26966 31 0 1 e 26967 31 0 1 e 26968 31 0 1 e 26969 31 0 1 e 26970 31 0 1 e 26971 31 0 1 e 26972 31 0 1 e 26973 31 0 1 0 2 3 9 10 15 16 20 22 30 26974 31 0 1 e 26975 31 0 1 0 5 9 13 26976 31 1 0 e 26977 31 1 0 e 26978 31 1 0 e 26979 31 1 0 f 26980 31 1 0 e 26981 31 1 0 6 7 8 9 11 13 18 19 22 24 25 26 27 30 26982 31 1 0 e 26983 31 1 0 e 26984 31 1 0 e 26985 31 1 0 e 26986 31 1 0 e 26987 31 1 0 e 26988 31 1 0 e 26989 31 1 0 e 26990 31 1 0 e 26991 31 1 0 0 4 5 6 7 8 12 14 15 17 22 25 26 26992 31 1 0 e 26993 31 1 0 3 7 9 13 19 26 26994 31 1 0 e 26995 31 1 0 e 26996 31 1 0 e 26997 31 1 0 f 26998 31 1 0 e 26999 31 1 0 0 2 4 5 6 7 12 14 16 18 19 22 23 24 26 29 27000 31 1 0 e 27001 31 1 0 e 27002 31 1 0 e 27003 31 1 0 e 27004 31 1 0 e 27005 31 1 0 e 27006 31 1 0 e 27007 31 1 0 e 27008 31 1 0 e 27009 31 1 0 4 5 6 11 12 15 20 21 23 26 28 29 27010 31 1 0 e 27011 31 1 0 0 12 13 14 16 17 24 26 27 28 27012 31 1 0 e 27013 31 1 0 e 27014 31 1 0 e 27015 31 1 0 f 27016 31 1 0 e 27017 31 1 0 0 1 3 4 7 10 11 13 15 16 18 19 21 22 23 24 26 27 29 30 27018 31 1 0 e 27019 31 1 0 e 27020 31 1 0 e 27021 31 1 0 e 27022 31 1 0 e 27023 31 1 0 e 27024 31 1 0 e 27025 31 1 0 e 27026 31 1 0 e 27027 31 1 0 2 6 7 10 11 12 15 18 20 21 22 24 26 27 30 27028 31 1 0 e 27029 31 1 0 5 8 9 14 21 22 23 25 27 27030 31 1 0 e 27031 31 1 0 e 27032 31 1 0 e 27033 31 1 0 f 27034 31 1 0 e 27035 31 1 0 1 3 4 6 7 9 11 15 16 18 21 26 27 29 27036 31 1 0 e 27037 31 1 0 e 27038 31 1 0 e 27039 31 1 0 e 27040 31 1 0 e 27041 31 1 0 e 27042 31 1 0 e 27043 31 1 0 e 27044 31 1 0 e 27045 31 1 0 0 1 3 4 5 7 8 12 14 15 16 17 19 20 21 22 23 25 26 27 28 29 27046 31 1 0 e 27047 31 1 0 3 5 9 19 28 30 27048 31 1 1 e 27049 31 1 1 e 27050 31 1 1 e 27051 31 1 1 f 27052 31 1 1 e 27053 31 1 1 1 2 5 6 10 12 14 15 16 19 21 22 23 24 28 27054 31 1 1 e 27055 31 1 1 e 27056 31 1 1 e 27057 31 1 1 e 27058 31 1 1 e 27059 31 1 1 e 27060 31 1 1 e 27061 31 1 1 e 27062 31 1 1 e 27063 31 1 1 0 3 5 9 13 16 17 18 21 22 24 25 29 27064 31 1 1 e 27065 31 1 1 3 4 10 18 22 27066 31 1 1 e 27067 31 1 1 e 27068 31 1 1 e 27069 31 1 1 f 27070 31 1 1 e 27071 31 1 1 0 2 3 5 8 11 13 14 17 19 20 21 22 23 24 27 28 29 27072 31 1 1 e 27073 31 1 1 e 27074 31 1 1 e 27075 31 1 1 e 27076 31 1 1 e 27077 31 1 1 e 27078 31 1 1 e 27079 31 1 1 e 27080 31 1 1 e 27081 31 1 1 0 3 5 7 8 9 10 11 12 14 15 16 17 19 20 21 22 26 29 27082 31 1 1 e 27083 31 1 1 5 7 9 11 16 17 22 23 25 27084 31 1 1 e 27085 31 1 1 e 27086 31 1 1 e 27087 31 1 1 f 27088 31 1 1 e 27089 31 1 1 1 4 6 7 8 9 11 12 13 14 16 17 22 23 24 25 28 29 30 27090 31 1 1 e 27091 31 1 1 e 27092 31 1 1 e 27093 31 1 1 e 27094 31 1 1 e 27095 31 1 1 e 27096 31 1 1 e 27097 31 1 1 e 27098 31 1 1 e 27099 31 1 1 1 3 7 9 10 12 15 16 21 22 23 28 30 27100 31 1 1 e 27101 31 1 1 1 2 5 6 16 20 28 30 27102 31 1 1 e 27103 31 1 1 e 27104 31 1 1 e 27105 31 1 1 f 27106 31 1 1 e 27107 31 1 1 1 3 4 7 8 10 11 13 14 16 19 21 22 24 25 28 30 27108 31 1 1 e 27109 31 1 1 e 27110 31 1 1 e 27111 31 1 1 e 27112 31 1 1 e 27113 31 1 1 e 27114 31 1 1 e 27115 31 1 1 e 27116 31 1 1 e 27117 31 1 1 3 5 6 13 14 16 17 18 20 21 22 23 25 27 29 27118 31 1 1 e 27119 31 1 1 21 24 30 27120 32 0 0 e 27121 32 0 0 e 27122 32 0 0 e 27123 32 0 0 f 27124 32 0 0 e 27125 32 0 0 0 1 2 5 7 9 10 12 13 15 16 21 22 23 24 26 28 31 27126 32 0 0 e 27127 32 0 0 e 27128 32 0 0 e 27129 32 0 0 e 27130 32 0 0 e 27131 32 0 0 e 27132 32 0 0 e 27133 32 0 0 e 27134 32 0 0 e 27135 32 0 0 0 3 4 5 6 7 8 9 10 11 16 17 18 20 21 22 23 24 25 30 31 27136 32 0 0 e 27137 32 0 0 0 4 8 12 13 19 25 28 27138 32 0 0 e 27139 32 0 0 e 27140 32 0 0 e 27141 32 0 0 f 27142 32 0 0 e 27143 32 0 0 4 5 6 7 11 12 13 16 19 20 21 22 23 24 26 28 29 30 27144 32 0 0 e 27145 32 0 0 e 27146 32 0 0 e 27147 32 0 0 e 27148 32 0 0 e 27149 32 0 0 e 27150 32 0 0 e 27151 32 0 0 e 27152 32 0 0 e 27153 32 0 0 0 1 2 3 5 6 7 8 9 12 13 14 17 18 19 20 21 22 23 24 26 27 28 31 27154 32 0 0 e 27155 32 0 0 12 17 19 20 24 26 27156 32 0 0 e 27157 32 0 0 e 27158 32 0 0 e 27159 32 0 0 f 27160 32 0 0 e 27161 32 0 0 1 5 6 7 13 15 16 17 18 21 22 25 26 27 28 30 27162 32 0 0 e 27163 32 0 0 e 27164 32 0 0 e 27165 32 0 0 e 27166 32 0 0 e 27167 32 0 0 e 27168 32 0 0 e 27169 32 0 0 e 27170 32 0 0 e 27171 32 0 0 2 4 6 7 9 11 13 14 15 17 20 21 22 26 27 29 27172 32 0 0 e 27173 32 0 0 2 11 12 14 15 18 23 27 28 27174 32 0 0 e 27175 32 0 0 e 27176 32 0 0 e 27177 32 0 0 f 27178 32 0 0 e 27179 32 0 0 0 1 2 7 10 11 13 14 16 17 19 21 22 23 25 26 27 29 31 27180 32 0 0 e 27181 32 0 0 e 27182 32 0 0 e 27183 32 0 0 e 27184 32 0 0 e 27185 32 0 0 e 27186 32 0 0 e 27187 32 0 0 e 27188 32 0 0 e 27189 32 0 0 0 3 5 6 8 9 10 12 13 18 20 21 22 26 28 27190 32 0 0 e 27191 32 0 0 3 4 5 6 17 21 22 25 29 27192 32 0 1 e 27193 32 0 1 e 27194 32 0 1 e 27195 32 0 1 f 27196 32 0 1 e 27197 32 0 1 3 5 7 8 12 13 15 17 19 20 23 29 30 27198 32 0 1 e 27199 32 0 1 e 27200 32 0 1 e 27201 32 0 1 e 27202 32 0 1 e 27203 32 0 1 e 27204 32 0 1 e 27205 32 0 1 e 27206 32 0 1 e 27207 32 0 1 0 1 2 4 5 9 10 11 13 14 16 18 19 25 26 29 27208 32 0 1 e 27209 32 0 1 12 13 18 22 28 27210 32 0 1 e 27211 32 0 1 e 27212 32 0 1 e 27213 32 0 1 f 27214 32 0 1 e 27215 32 0 1 0 1 4 5 8 9 10 11 12 13 14 15 16 18 19 20 21 23 24 27 28 29 30 31 27216 32 0 1 e 27217 32 0 1 e 27218 32 0 1 e 27219 32 0 1 e 27220 32 0 1 e 27221 32 0 1 e 27222 32 0 1 e 27223 32 0 1 e 27224 32 0 1 e 27225 32 0 1 0 3 5 7 9 10 11 12 14 16 23 24 25 27 31 27226 32 0 1 e 27227 32 0 1 2 5 7 9 17 20 24 25 27 28 29 27228 32 0 1 e 27229 32 0 1 e 27230 32 0 1 e 27231 32 0 1 f 27232 32 0 1 e 27233 32 0 1 0 2 5 8 10 12 14 18 20 22 29 27234 32 0 1 e 27235 32 0 1 e 27236 32 0 1 e 27237 32 0 1 e 27238 32 0 1 e 27239 32 0 1 e 27240 32 0 1 e 27241 32 0 1 e 27242 32 0 1 e 27243 32 0 1 4 6 7 9 10 11 12 15 16 18 20 21 25 26 28 31 27244 32 0 1 e 27245 32 0 1 9 12 17 18 19 21 25 26 28 29 27246 32 0 1 e 27247 32 0 1 e 27248 32 0 1 e 27249 32 0 1 f 27250 32 0 1 e 27251 32 0 1 0 1 3 4 6 7 13 14 19 21 22 24 25 26 27 30 27252 32 0 1 e 27253 32 0 1 e 27254 32 0 1 e 27255 32 0 1 e 27256 32 0 1 e 27257 32 0 1 e 27258 32 0 1 e 27259 32 0 1 e 27260 32 0 1 e 27261 32 0 1 2 3 4 6 7 9 10 13 14 15 17 20 22 25 26 28 30 31 27262 32 0 1 e 27263 32 0 1 8 9 13 14 19 21 27264 32 1 0 e 27265 32 1 0 e 27266 32 1 0 e 27267 32 1 0 f 27268 32 1 0 e 27269 32 1 0 1 3 9 11 18 20 24 25 26 27 29 30 31 27270 32 1 0 e 27271 32 1 0 e 27272 32 1 0 e 27273 32 1 0 e 27274 32 1 0 e 27275 32 1 0 e 27276 32 1 0 e 27277 32 1 0 e 27278 32 1 0 e 27279 32 1 0 0 1 3 4 5 9 11 13 17 19 20 29 30 31 27280 32 1 0 e 27281 32 1 0 0 2 4 8 16 18 19 22 25 28 30 27282 32 1 0 e 27283 32 1 0 e 27284 32 1 0 e 27285 32 1 0 f 27286 32 1 0 e 27287 32 1 0 1 2 4 6 7 8 9 11 14 16 17 20 22 24 27 31 27288 32 1 0 e 27289 32 1 0 e 27290 32 1 0 e 27291 32 1 0 e 27292 32 1 0 e 27293 32 1 0 e 27294 32 1 0 e 27295 32 1 0 e 27296 32 1 0 e 27297 32 1 0 1 3 7 8 10 11 12 13 17 19 20 21 22 26 27 29 30 27298 32 1 0 e 27299 32 1 0 1 9 21 24 28 29 27300 32 1 0 e 27301 32 1 0 e 27302 32 1 0 e 27303 32 1 0 f 27304 32 1 0 e 27305 32 1 0 0 1 7 9 10 12 16 19 22 23 24 29 30 31 27306 32 1 0 e 27307 32 1 0 e 27308 32 1 0 e 27309 32 1 0 e 27310 32 1 0 e 27311 32 1 0 e 27312 32 1 0 e 27313 32 1 0 e 27314 32 1 0 e 27315 32 1 0 1 3 8 10 11 12 14 16 17 19 20 21 22 23 24 25 26 27316 32 1 0 e 27317 32 1 0 8 9 12 16 22 26 29 31 27318 32 1 0 e 27319 32 1 0 e 27320 32 1 0 e 27321 32 1 0 f 27322 32 1 0 e 27323 32 1 0 0 1 2 3 9 10 12 14 17 19 20 23 26 27 28 30 31 27324 32 1 0 e 27325 32 1 0 e 27326 32 1 0 e 27327 32 1 0 e 27328 32 1 0 e 27329 32 1 0 e 27330 32 1 0 e 27331 32 1 0 e 27332 32 1 0 e 27333 32 1 0 3 5 6 8 9 10 11 14 15 16 22 29 30 27334 32 1 0 e 27335 32 1 0 2 19 21 22 27 28 27336 32 1 1 e 27337 32 1 1 e 27338 32 1 1 e 27339 32 1 1 f 27340 32 1 1 e 27341 32 1 1 0 3 4 5 9 12 13 16 17 20 21 26 27342 32 1 1 e 27343 32 1 1 e 27344 32 1 1 e 27345 32 1 1 e 27346 32 1 1 e 27347 32 1 1 e 27348 32 1 1 e 27349 32 1 1 e 27350 32 1 1 e 27351 32 1 1 1 3 4 9 13 17 18 19 20 24 26 30 31 27352 32 1 1 e 27353 32 1 1 0 6 8 9 25 29 30 31 27354 32 1 1 e 27355 32 1 1 e 27356 32 1 1 e 27357 32 1 1 f 27358 32 1 1 e 27359 32 1 1 1 2 3 5 8 10 12 14 20 21 24 25 26 27 30 31 27360 32 1 1 e 27361 32 1 1 e 27362 32 1 1 e 27363 32 1 1 e 27364 32 1 1 e 27365 32 1 1 e 27366 32 1 1 e 27367 32 1 1 e 27368 32 1 1 e 27369 32 1 1 0 2 4 5 7 10 12 13 15 19 20 21 22 25 26 27 31 27370 32 1 1 e 27371 32 1 1 1 2 6 10 11 18 24 29 27372 32 1 1 e 27373 32 1 1 e 27374 32 1 1 e 27375 32 1 1 f 27376 32 1 1 e 27377 32 1 1 0 3 4 6 9 10 11 13 16 18 19 21 23 25 28 29 27378 32 1 1 e 27379 32 1 1 e 27380 32 1 1 e 27381 32 1 1 e 27382 32 1 1 e 27383 32 1 1 e 27384 32 1 1 e 27385 32 1 1 e 27386 32 1 1 e 27387 32 1 1 0 2 4 6 7 8 9 11 14 17 18 20 23 24 26 28 29 30 27388 32 1 1 e 27389 32 1 1 1 3 8 9 10 12 15 23 28 30 27390 32 1 1 e 27391 32 1 1 e 27392 32 1 1 e 27393 32 1 1 f 27394 32 1 1 e 27395 32 1 1 0 2 3 4 5 6 7 8 9 12 15 16 17 19 21 22 26 28 29 31 27396 32 1 1 e 27397 32 1 1 e 27398 32 1 1 e 27399 32 1 1 e 27400 32 1 1 e 27401 32 1 1 e 27402 32 1 1 e 27403 32 1 1 e 27404 32 1 1 e 27405 32 1 1 0 1 3 8 12 13 14 17 18 19 22 29 31 27406 32 1 1 e 27407 32 1 1 6 7 8 10 21 23 26 27408 33 0 0 e 27409 33 0 0 e 27410 33 0 0 e 27411 33 0 0 f 27412 33 0 0 e 27413 33 0 0 3 4 6 7 8 12 15 16 17 18 20 26 27 28 29 30 31 27414 33 0 0 e 27415 33 0 0 e 27416 33 0 0 e 27417 33 0 0 e 27418 33 0 0 e 27419 33 0 0 e 27420 33 0 0 e 27421 33 0 0 e 27422 33 0 0 e 27423 33 0 0 0 3 5 6 7 9 10 11 13 15 16 17 20 21 24 25 26 27 28 29 31 32 27424 33 0 0 e 27425 33 0 0 2 5 20 21 29 32 27426 33 0 0 e 27427 33 0 0 e 27428 33 0 0 e 27429 33 0 0 f 27430 33 0 0 e 27431 33 0 0 0 1 2 3 5 6 7 8 10 13 14 15 16 18 19 21 22 24 26 27 27432 33 0 0 e 27433 33 0 0 e 27434 33 0 0 e 27435 33 0 0 e 27436 33 0 0 e 27437 33 0 0 e 27438 33 0 0 e 27439 33 0 0 e 27440 33 0 0 e 27441 33 0 0 0 2 5 6 7 8 10 11 12 17 18 20 22 24 26 27 28 27442 33 0 0 e 27443 33 0 0 7 8 9 11 12 20 22 23 27 27444 33 0 0 e 27445 33 0 0 e 27446 33 0 0 e 27447 33 0 0 f 27448 33 0 0 e 27449 33 0 0 0 2 3 4 5 7 8 10 11 13 15 17 18 19 20 21 22 23 24 25 28 29 30 31 27450 33 0 0 e 27451 33 0 0 e 27452 33 0 0 e 27453 33 0 0 e 27454 33 0 0 e 27455 33 0 0 e 27456 33 0 0 e 27457 33 0 0 e 27458 33 0 0 e 27459 33 0 0 1 2 3 5 7 10 11 12 13 14 22 23 29 30 27460 33 0 0 e 27461 33 0 0 0 6 8 10 15 18 19 21 24 29 27462 33 0 0 e 27463 33 0 0 e 27464 33 0 0 e 27465 33 0 0 f 27466 33 0 0 e 27467 33 0 0 0 1 2 4 6 7 9 11 15 20 22 24 26 29 31 32 27468 33 0 0 e 27469 33 0 0 e 27470 33 0 0 e 27471 33 0 0 e 27472 33 0 0 e 27473 33 0 0 e 27474 33 0 0 e 27475 33 0 0 e 27476 33 0 0 e 27477 33 0 0 1 4 6 9 10 12 16 17 19 26 32 27478 33 0 0 e 27479 33 0 0 0 5 14 23 28 32 27480 33 0 1 e 27481 33 0 1 e 27482 33 0 1 e 27483 33 0 1 f 27484 33 0 1 e 27485 33 0 1 3 4 5 6 8 9 10 12 16 17 22 23 24 28 31 27486 33 0 1 e 27487 33 0 1 e 27488 33 0 1 e 27489 33 0 1 e 27490 33 0 1 e 27491 33 0 1 e 27492 33 0 1 e 27493 33 0 1 e 27494 33 0 1 e 27495 33 0 1 1 2 5 12 13 16 17 18 19 20 21 22 24 25 26 27 29 27496 33 0 1 e 27497 33 0 1 6 10 17 19 22 23 28 27498 33 0 1 e 27499 33 0 1 e 27500 33 0 1 e 27501 33 0 1 f 27502 33 0 1 e 27503 33 0 1 0 1 3 7 10 11 12 13 14 16 18 21 22 23 26 32 27504 33 0 1 e 27505 33 0 1 e 27506 33 0 1 e 27507 33 0 1 e 27508 33 0 1 e 27509 33 0 1 e 27510 33 0 1 e 27511 33 0 1 e 27512 33 0 1 e 27513 33 0 1 1 2 3 6 7 9 13 14 17 20 23 26 27 30 32 27514 33 0 1 e 27515 33 0 1 2 3 4 8 9 18 25 27 28 29 27516 33 0 1 e 27517 33 0 1 e 27518 33 0 1 e 27519 33 0 1 f 27520 33 0 1 e 27521 33 0 1 1 2 3 5 6 9 10 11 14 17 19 21 28 29 32 27522 33 0 1 e 27523 33 0 1 e 27524 33 0 1 e 27525 33 0 1 e 27526 33 0 1 e 27527 33 0 1 e 27528 33 0 1 e 27529 33 0 1 e 27530 33 0 1 e 27531 33 0 1 1 3 7 13 14 15 18 23 24 26 27 30 32 27532 33 0 1 e 27533 33 0 1 0 6 7 8 10 14 16 17 19 20 23 26 29 31 32 27534 33 0 1 e 27535 33 0 1 e 27536 33 0 1 e 27537 33 0 1 f 27538 33 0 1 e 27539 33 0 1 1 2 3 4 5 6 12 13 14 15 16 17 18 20 21 23 26 28 29 32 27540 33 0 1 e 27541 33 0 1 e 27542 33 0 1 e 27543 33 0 1 e 27544 33 0 1 e 27545 33 0 1 e 27546 33 0 1 e 27547 33 0 1 e 27548 33 0 1 e 27549 33 0 1 0 2 6 8 10 12 14 20 23 25 26 31 27550 33 0 1 e 27551 33 0 1 0 8 9 27 29 27552 33 1 0 e 27553 33 1 0 e 27554 33 1 0 e 27555 33 1 0 f 27556 33 1 0 e 27557 33 1 0 0 1 3 4 5 6 9 13 14 15 16 20 21 24 27 28 29 30 31 32 27558 33 1 0 e 27559 33 1 0 e 27560 33 1 0 e 27561 33 1 0 e 27562 33 1 0 e 27563 33 1 0 e 27564 33 1 0 e 27565 33 1 0 e 27566 33 1 0 e 27567 33 1 0 1 3 4 6 8 11 12 15 16 17 18 19 21 23 27 32 27568 33 1 0 e 27569 33 1 0 1 3 5 8 19 23 26 31 32 27570 33 1 0 e 27571 33 1 0 e 27572 33 1 0 e 27573 33 1 0 f 27574 33 1 0 e 27575 33 1 0 1 5 6 11 13 15 16 17 19 20 24 26 29 31 32 27576 33 1 0 e 27577 33 1 0 e 27578 33 1 0 e 27579 33 1 0 e 27580 33 1 0 e 27581 33 1 0 e 27582 33 1 0 e 27583 33 1 0 e 27584 33 1 0 e 27585 33 1 0 2 3 4 7 8 9 10 12 15 16 17 19 20 21 22 25 26 28 29 30 31 32 27586 33 1 0 e 27587 33 1 0 2 3 7 12 15 19 20 21 22 27 28 27588 33 1 0 e 27589 33 1 0 e 27590 33 1 0 e 27591 33 1 0 f 27592 33 1 0 e 27593 33 1 0 3 6 7 10 11 12 13 14 15 17 18 21 23 24 26 27 29 30 31 27594 33 1 0 e 27595 33 1 0 e 27596 33 1 0 e 27597 33 1 0 e 27598 33 1 0 e 27599 33 1 0 e 27600 33 1 0 e 27601 33 1 0 e 27602 33 1 0 e 27603 33 1 0 2 5 6 7 8 9 10 13 14 15 18 20 22 24 25 27 29 30 31 27604 33 1 0 e 27605 33 1 0 0 1 5 8 13 18 19 20 25 26 28 32 27606 33 1 0 e 27607 33 1 0 e 27608 33 1 0 e 27609 33 1 0 f 27610 33 1 0 e 27611 33 1 0 0 3 4 11 13 14 16 17 20 21 25 29 30 27612 33 1 0 e 27613 33 1 0 e 27614 33 1 0 e 27615 33 1 0 e 27616 33 1 0 e 27617 33 1 0 e 27618 33 1 0 e 27619 33 1 0 e 27620 33 1 0 e 27621 33 1 0 0 2 5 7 8 9 10 19 22 23 25 27 28 27622 33 1 0 e 27623 33 1 0 8 12 13 14 18 19 21 22 26 28 27624 33 1 1 e 27625 33 1 1 e 27626 33 1 1 e 27627 33 1 1 f 27628 33 1 1 e 27629 33 1 1 1 5 6 7 12 13 14 16 18 19 21 22 24 27630 33 1 1 e 27631 33 1 1 e 27632 33 1 1 e 27633 33 1 1 e 27634 33 1 1 e 27635 33 1 1 e 27636 33 1 1 e 27637 33 1 1 e 27638 33 1 1 e 27639 33 1 1 3 7 9 10 12 14 17 18 20 22 23 26 27 27640 33 1 1 e 27641 33 1 1 0 5 6 9 10 14 17 20 23 26 31 27642 33 1 1 e 27643 33 1 1 e 27644 33 1 1 e 27645 33 1 1 f 27646 33 1 1 e 27647 33 1 1 6 7 9 11 12 13 15 16 19 20 25 26 27 29 31 32 27648 33 1 1 e 27649 33 1 1 e 27650 33 1 1 e 27651 33 1 1 e 27652 33 1 1 e 27653 33 1 1 e 27654 33 1 1 e 27655 33 1 1 e 27656 33 1 1 e 27657 33 1 1 1 2 7 9 10 16 17 24 25 26 28 31 27658 33 1 1 e 27659 33 1 1 3 5 8 9 11 18 20 26 31 27660 33 1 1 e 27661 33 1 1 e 27662 33 1 1 e 27663 33 1 1 f 27664 33 1 1 e 27665 33 1 1 1 3 4 5 6 7 9 12 14 15 17 19 20 23 24 25 31 32 27666 33 1 1 e 27667 33 1 1 e 27668 33 1 1 e 27669 33 1 1 e 27670 33 1 1 e 27671 33 1 1 e 27672 33 1 1 e 27673 33 1 1 e 27674 33 1 1 e 27675 33 1 1 3 5 6 7 11 12 13 16 17 20 21 22 25 27 27676 33 1 1 e 27677 33 1 1 3 5 6 15 24 25 27 28 27678 33 1 1 e 27679 33 1 1 e 27680 33 1 1 e 27681 33 1 1 f 27682 33 1 1 e 27683 33 1 1 2 6 7 11 12 13 16 18 19 20 22 24 27 28 29 30 27684 33 1 1 e 27685 33 1 1 e 27686 33 1 1 e 27687 33 1 1 e 27688 33 1 1 e 27689 33 1 1 e 27690 33 1 1 e 27691 33 1 1 e 27692 33 1 1 e 27693 33 1 1 0 1 3 4 6 7 11 13 23 24 25 26 30 31 27694 33 1 1 e 27695 33 1 1 2 3 4 5 7 8 14 18 20 22 24 26 27 31 32 27696 63 0 0 e 27697 63 0 0 e 27698 63 0 0 e 27699 63 0 0 f 27700 63 0 0 e 27701 63 0 0 0 1 2 3 6 7 8 9 11 12 13 17 18 19 20 21 22 24 25 26 27 28 29 31 32 34 36 37 38 39 40 42 43 46 47 49 50 52 53 55 60 61 27702 63 0 0 e 27703 63 0 0 e 27704 63 0 0 e 27705 63 0 0 e 27706 63 0 0 e 27707 63 0 0 e 27708 63 0 0 e 27709 63 0 0 e 27710 63 0 0 e 27711 63 0 0 0 2 4 7 8 10 12 14 15 16 20 21 24 25 27 29 30 31 32 34 38 39 41 43 44 45 46 48 49 50 51 53 54 55 57 58 59 27712 63 0 0 e 27713 63 0 0 0 10 11 16 20 23 27 34 35 43 44 49 51 52 53 55 58 27714 63 0 0 e 27715 63 0 0 e 27716 63 0 0 e 27717 63 0 0 f 27718 63 0 0 e 27719 63 0 0 0 1 2 3 5 7 9 10 11 12 13 14 15 17 20 23 24 25 29 32 37 38 41 44 46 51 53 54 58 59 62 27720 63 0 0 e 27721 63 0 0 e 27722 63 0 0 e 27723 63 0 0 e 27724 63 0 0 e 27725 63 0 0 e 27726 63 0 0 e 27727 63 0 0 e 27728 63 0 0 e 27729 63 0 0 3 4 6 7 9 11 12 15 16 17 18 19 20 22 24 27 35 37 39 40 46 47 49 51 52 54 58 61 27730 63 0 0 e 27731 63 0 0 6 8 16 30 32 34 42 49 27732 63 0 0 e 27733 63 0 0 e 27734 63 0 0 e 27735 63 0 0 f 27736 63 0 0 e 27737 63 0 0 4 5 6 8 9 15 18 19 23 26 28 29 30 34 35 36 37 39 40 42 44 46 48 49 52 53 54 57 58 60 61 27738 63 0 0 e 27739 63 0 0 e 27740 63 0 0 e 27741 63 0 0 e 27742 63 0 0 e 27743 63 0 0 e 27744 63 0 0 e 27745 63 0 0 e 27746 63 0 0 e 27747 63 0 0 0 3 5 6 9 13 14 17 19 21 22 24 25 26 27 31 32 35 36 37 38 39 40 43 44 45 47 53 54 55 56 59 60 61 27748 63 0 0 e 27749 63 0 0 3 8 9 11 19 31 32 33 34 39 40 41 43 45 46 50 55 56 61 27750 63 0 0 e 27751 63 0 0 e 27752 63 0 0 e 27753 63 0 0 f 27754 63 0 0 e 27755 63 0 0 0 1 2 4 5 6 8 11 12 14 15 19 20 21 23 25 27 28 30 31 32 35 37 44 48 49 51 54 55 57 58 59 62 27756 63 0 0 e 27757 63 0 0 e 27758 63 0 0 e 27759 63 0 0 e 27760 63 0 0 e 27761 63 0 0 e 27762 63 0 0 e 27763 63 0 0 e 27764 63 0 0 e 27765 63 0 0 2 5 7 10 12 16 17 19 21 22 29 32 33 35 39 42 43 45 46 47 49 53 56 58 59 61 62 27766 63 0 0 e 27767 63 0 0 2 4 5 6 9 10 11 22 23 28 31 33 36 43 47 58 60 61 27768 63 0 1 e 27769 63 0 1 e 27770 63 0 1 e 27771 63 0 1 f 27772 63 0 1 e 27773 63 0 1 0 1 2 3 4 5 6 10 15 16 21 24 25 28 30 31 34 37 38 39 41 42 44 47 48 49 51 52 53 55 56 57 58 59 60 61 62 27774 63 0 1 e 27775 63 0 1 e 27776 63 0 1 e 27777 63 0 1 e 27778 63 0 1 e 27779 63 0 1 e 27780 63 0 1 e 27781 63 0 1 e 27782 63 0 1 e 27783 63 0 1 0 1 3 4 5 6 7 10 11 12 13 17 19 20 26 30 31 32 36 37 38 39 43 44 46 47 48 51 53 54 55 56 58 59 61 27784 63 0 1 e 27785 63 0 1 1 13 17 19 31 38 43 44 45 47 49 50 53 60 27786 63 0 1 e 27787 63 0 1 e 27788 63 0 1 e 27789 63 0 1 f 27790 63 0 1 e 27791 63 0 1 0 2 3 4 6 7 8 9 10 11 12 13 15 19 20 23 24 25 29 37 38 40 41 42 43 44 46 48 50 51 54 58 59 60 27792 63 0 1 e 27793 63 0 1 e 27794 63 0 1 e 27795 63 0 1 e 27796 63 0 1 e 27797 63 0 1 e 27798 63 0 1 e 27799 63 0 1 e 27800 63 0 1 e 27801 63 0 1 0 2 3 4 6 7 8 11 12 13 14 17 18 19 21 22 23 24 25 26 27 29 31 32 33 34 36 38 40 41 45 46 48 50 51 54 55 56 60 61 62 27802 63 0 1 e 27803 63 0 1 14 23 26 27 28 30 32 38 42 49 54 57 60 27804 63 0 1 e 27805 63 0 1 e 27806 63 0 1 e 27807 63 0 1 f 27808 63 0 1 e 27809 63 0 1 0 1 2 9 11 12 13 15 20 21 24 29 34 35 36 37 40 41 44 45 47 48 49 51 53 58 61 62 27810 63 0 1 e 27811 63 0 1 e 27812 63 0 1 e 27813 63 0 1 e 27814 63 0 1 e 27815 63 0 1 e 27816 63 0 1 e 27817 63 0 1 e 27818 63 0 1 e 27819 63 0 1 1 3 4 5 6 8 10 14 17 18 19 20 21 22 23 24 26 27 29 30 33 34 35 36 37 40 41 43 44 46 47 48 49 51 53 56 57 58 59 61 27820 63 0 1 e 27821 63 0 1 4 11 14 16 24 30 31 32 35 39 48 49 59 62 27822 63 0 1 e 27823 63 0 1 e 27824 63 0 1 e 27825 63 0 1 f 27826 63 0 1 e 27827 63 0 1 2 4 5 6 7 8 12 13 15 16 17 21 25 26 32 34 35 36 39 40 41 43 44 45 47 48 49 50 51 52 55 60 62 27828 63 0 1 e 27829 63 0 1 e 27830 63 0 1 e 27831 63 0 1 e 27832 63 0 1 e 27833 63 0 1 e 27834 63 0 1 e 27835 63 0 1 e 27836 63 0 1 e 27837 63 0 1 0 2 4 5 8 11 12 13 15 20 25 28 29 30 31 32 34 35 36 37 38 41 43 46 47 48 49 50 52 56 61 62 27838 63 0 1 e 27839 63 0 1 0 2 7 24 25 32 34 38 42 43 49 59 60 61 27840 63 1 0 e 27841 63 1 0 e 27842 63 1 0 e 27843 63 1 0 f 27844 63 1 0 e 27845 63 1 0 4 8 11 15 18 20 23 24 25 27 30 31 32 35 36 37 39 40 42 44 49 50 55 56 57 58 61 27846 63 1 0 e 27847 63 1 0 e 27848 63 1 0 e 27849 63 1 0 e 27850 63 1 0 e 27851 63 1 0 e 27852 63 1 0 e 27853 63 1 0 e 27854 63 1 0 e 27855 63 1 0 0 1 2 3 5 7 11 12 13 15 16 17 21 27 28 30 32 34 35 43 44 47 48 50 51 54 57 58 59 60 62 27856 63 1 0 e 27857 63 1 0 2 5 8 10 13 20 21 22 23 24 27 31 33 41 42 43 47 48 49 50 53 54 27858 63 1 0 e 27859 63 1 0 e 27860 63 1 0 e 27861 63 1 0 f 27862 63 1 0 e 27863 63 1 0 2 3 4 6 9 13 15 16 18 19 20 21 22 23 24 28 29 30 32 35 36 39 40 41 44 45 47 48 50 51 52 53 54 55 57 58 59 60 61 27864 63 1 0 e 27865 63 1 0 e 27866 63 1 0 e 27867 63 1 0 e 27868 63 1 0 e 27869 63 1 0 e 27870 63 1 0 e 27871 63 1 0 e 27872 63 1 0 e 27873 63 1 0 0 4 6 8 9 10 12 15 18 19 21 23 24 29 30 31 32 33 37 38 39 40 46 48 49 50 51 55 60 61 27874 63 1 0 e 27875 63 1 0 3 5 20 31 42 44 45 49 51 53 54 55 60 27876 63 1 0 e 27877 63 1 0 e 27878 63 1 0 e 27879 63 1 0 f 27880 63 1 0 e 27881 63 1 0 1 2 4 6 13 15 16 19 20 21 22 24 26 30 33 34 35 39 40 41 43 44 46 47 48 49 52 54 55 57 59 27882 63 1 0 e 27883 63 1 0 e 27884 63 1 0 e 27885 63 1 0 e 27886 63 1 0 e 27887 63 1 0 e 27888 63 1 0 e 27889 63 1 0 e 27890 63 1 0 e 27891 63 1 0 5 7 8 9 13 16 21 23 24 27 28 31 34 37 38 39 40 42 43 44 45 46 49 52 53 54 56 58 61 62 27892 63 1 0 e 27893 63 1 0 7 8 12 17 19 30 40 42 44 49 50 53 55 58 60 61 27894 63 1 0 e 27895 63 1 0 e 27896 63 1 0 e 27897 63 1 0 f 27898 63 1 0 e 27899 63 1 0 2 4 7 9 10 12 14 15 16 18 20 21 22 24 25 27 28 32 34 36 43 44 46 47 48 49 52 53 54 55 56 60 61 62 27900 63 1 0 e 27901 63 1 0 e 27902 63 1 0 e 27903 63 1 0 e 27904 63 1 0 e 27905 63 1 0 e 27906 63 1 0 e 27907 63 1 0 e 27908 63 1 0 e 27909 63 1 0 0 5 9 10 11 13 15 18 19 20 21 23 27 30 31 33 34 36 38 39 40 43 44 47 48 52 53 54 55 56 59 62 27910 63 1 0 e 27911 63 1 0 6 12 13 18 20 24 29 35 39 43 51 53 27912 63 1 1 e 27913 63 1 1 e 27914 63 1 1 e 27915 63 1 1 f 27916 63 1 1 e 27917 63 1 1 2 4 5 6 7 8 9 10 12 14 17 18 19 20 21 22 24 25 26 29 30 31 33 37 40 42 43 44 47 50 52 53 54 55 56 59 62 27918 63 1 1 e 27919 63 1 1 e 27920 63 1 1 e 27921 63 1 1 e 27922 63 1 1 e 27923 63 1 1 e 27924 63 1 1 e 27925 63 1 1 e 27926 63 1 1 e 27927 63 1 1 0 1 4 8 12 15 16 19 20 21 26 27 28 30 32 33 37 39 40 42 44 45 51 52 54 55 57 60 61 27928 63 1 1 e 27929 63 1 1 4 9 13 16 21 26 32 33 36 43 51 52 55 57 27930 63 1 1 e 27931 63 1 1 e 27932 63 1 1 e 27933 63 1 1 f 27934 63 1 1 e 27935 63 1 1 0 2 8 9 11 12 15 16 18 19 20 21 22 23 25 27 28 29 31 32 36 37 38 39 40 41 42 43 46 49 52 57 58 60 27936 63 1 1 e 27937 63 1 1 e 27938 63 1 1 e 27939 63 1 1 e 27940 63 1 1 e 27941 63 1 1 e 27942 63 1 1 e 27943 63 1 1 e 27944 63 1 1 e 27945 63 1 1 3 9 10 11 14 16 18 19 20 22 26 27 30 33 34 35 37 38 45 46 47 50 51 57 60 61 27946 63 1 1 e 27947 63 1 1 3 11 18 21 24 25 34 37 38 42 44 45 47 49 51 55 27948 63 1 1 e 27949 63 1 1 e 27950 63 1 1 e 27951 63 1 1 f 27952 63 1 1 e 27953 63 1 1 3 5 7 9 10 12 15 16 18 24 25 29 30 37 39 42 44 46 48 49 50 54 57 58 60 61 62 27954 63 1 1 e 27955 63 1 1 e 27956 63 1 1 e 27957 63 1 1 e 27958 63 1 1 e 27959 63 1 1 e 27960 63 1 1 e 27961 63 1 1 e 27962 63 1 1 e 27963 63 1 1 2 3 9 10 11 15 17 24 25 26 29 30 32 34 35 37 39 41 43 44 47 49 50 52 53 57 59 62 27964 63 1 1 e 27965 63 1 1 0 2 8 12 25 28 31 33 35 37 38 39 42 50 54 57 59 60 61 27966 63 1 1 e 27967 63 1 1 e 27968 63 1 1 e 27969 63 1 1 f 27970 63 1 1 e 27971 63 1 1 1 4 5 7 9 10 11 12 13 17 20 23 25 28 29 31 32 33 35 36 38 42 46 47 49 54 55 61 27972 63 1 1 e 27973 63 1 1 e 27974 63 1 1 e 27975 63 1 1 e 27976 63 1 1 e 27977 63 1 1 e 27978 63 1 1 e 27979 63 1 1 e 27980 63 1 1 e 27981 63 1 1 0 2 3 6 8 12 13 14 20 23 31 33 34 35 36 38 41 44 45 47 48 50 53 58 61 27982 63 1 1 e 27983 63 1 1 5 12 21 27 32 37 43 44 54 55 56 57 27984 64 0 0 e 27985 64 0 0 e 27986 64 0 0 e 27987 64 0 0 f 27988 64 0 0 e 27989 64 0 0 1 2 3 4 5 6 10 15 16 19 20 21 22 24 26 28 29 31 32 33 34 35 36 38 40 41 43 44 45 46 47 50 51 52 55 56 58 59 62 27990 64 0 0 e 27991 64 0 0 e 27992 64 0 0 e 27993 64 0 0 e 27994 64 0 0 e 27995 64 0 0 e 27996 64 0 0 e 27997 64 0 0 e 27998 64 0 0 e 27999 64 0 0 1 2 3 4 6 9 10 16 17 18 20 28 29 30 31 37 40 43 45 47 49 50 51 52 55 59 60 61 62 28000 64 0 0 e 28001 64 0 0 1 3 4 15 21 24 26 31 45 49 55 56 62 63 28002 64 0 0 e 28003 64 0 0 e 28004 64 0 0 e 28005 64 0 0 f 28006 64 0 0 e 28007 64 0 0 2 3 8 9 10 11 12 21 24 28 29 35 44 45 49 50 51 52 54 55 62 63 28008 64 0 0 e 28009 64 0 0 e 28010 64 0 0 e 28011 64 0 0 e 28012 64 0 0 e 28013 64 0 0 e 28014 64 0 0 e 28015 64 0 0 e 28016 64 0 0 e 28017 64 0 0 0 2 5 7 14 16 17 19 21 22 25 26 28 33 36 37 39 40 43 45 46 47 50 52 56 57 59 62 28018 64 0 0 e 28019 64 0 0 4 5 8 11 28 31 33 35 39 42 47 50 53 61 62 28020 64 0 0 e 28021 64 0 0 e 28022 64 0 0 e 28023 64 0 0 f 28024 64 0 0 e 28025 64 0 0 0 2 3 5 6 9 10 12 13 16 20 21 24 25 27 28 30 31 32 33 34 35 36 37 45 46 47 48 51 55 57 58 59 61 62 63 28026 64 0 0 e 28027 64 0 0 e 28028 64 0 0 e 28029 64 0 0 e 28030 64 0 0 e 28031 64 0 0 e 28032 64 0 0 e 28033 64 0 0 e 28034 64 0 0 e 28035 64 0 0 3 4 6 9 10 11 13 15 17 21 22 23 26 28 29 30 31 32 33 35 36 37 38 39 40 43 49 54 57 58 62 63 28036 64 0 0 e 28037 64 0 0 3 17 20 21 22 29 32 39 40 41 43 44 49 50 51 54 58 60 62 28038 64 0 0 e 28039 64 0 0 e 28040 64 0 0 e 28041 64 0 0 f 28042 64 0 0 e 28043 64 0 0 0 1 3 5 6 7 8 10 11 16 18 20 21 22 25 26 29 31 32 33 34 36 39 40 42 43 50 53 56 58 61 28044 64 0 0 e 28045 64 0 0 e 28046 64 0 0 e 28047 64 0 0 e 28048 64 0 0 e 28049 64 0 0 e 28050 64 0 0 e 28051 64 0 0 e 28052 64 0 0 e 28053 64 0 0 0 3 4 5 9 10 13 15 17 18 22 29 30 31 32 36 40 41 46 47 50 52 55 57 58 62 63 28054 64 0 0 e 28055 64 0 0 5 14 16 17 18 21 34 35 39 45 49 55 56 59 28056 64 0 1 e 28057 64 0 1 e 28058 64 0 1 e 28059 64 0 1 f 28060 64 0 1 e 28061 64 0 1 0 1 2 5 6 8 9 10 11 13 19 21 22 26 27 28 29 31 32 34 35 37 39 40 42 44 49 51 52 55 56 58 63 28062 64 0 1 e 28063 64 0 1 e 28064 64 0 1 e 28065 64 0 1 e 28066 64 0 1 e 28067 64 0 1 e 28068 64 0 1 e 28069 64 0 1 e 28070 64 0 1 e 28071 64 0 1 2 3 4 5 9 10 18 24 26 27 29 30 32 34 35 36 37 38 39 49 55 60 61 62 28072 64 0 1 e 28073 64 0 1 6 12 13 15 16 19 23 26 28 31 38 40 49 60 28074 64 0 1 e 28075 64 0 1 e 28076 64 0 1 e 28077 64 0 1 f 28078 64 0 1 e 28079 64 0 1 0 1 2 3 4 5 7 9 11 12 14 15 18 19 23 24 25 27 29 32 35 39 41 48 49 51 53 54 55 58 59 61 62 28080 64 0 1 e 28081 64 0 1 e 28082 64 0 1 e 28083 64 0 1 e 28084 64 0 1 e 28085 64 0 1 e 28086 64 0 1 e 28087 64 0 1 e 28088 64 0 1 e 28089 64 0 1 1 2 4 8 17 19 20 21 23 24 25 26 28 30 31 32 33 35 36 38 41 44 45 47 51 52 53 57 58 60 62 63 28090 64 0 1 e 28091 64 0 1 6 11 15 19 25 30 31 35 37 41 51 54 61 63 28092 64 0 1 e 28093 64 0 1 e 28094 64 0 1 e 28095 64 0 1 f 28096 64 0 1 e 28097 64 0 1 0 2 3 9 10 11 12 16 19 20 23 27 28 29 30 31 32 33 34 36 38 41 42 44 46 47 48 52 53 55 56 57 58 59 60 61 62 63 28098 64 0 1 e 28099 64 0 1 e 28100 64 0 1 e 28101 64 0 1 e 28102 64 0 1 e 28103 64 0 1 e 28104 64 0 1 e 28105 64 0 1 e 28106 64 0 1 e 28107 64 0 1 1 5 8 9 13 14 16 17 18 20 22 23 24 25 29 34 37 39 40 42 43 46 47 50 51 55 56 58 60 28108 64 0 1 e 28109 64 0 1 1 5 6 9 10 11 15 17 23 25 31 36 41 44 56 58 28110 64 0 1 e 28111 64 0 1 e 28112 64 0 1 e 28113 64 0 1 f 28114 64 0 1 e 28115 64 0 1 0 3 6 8 9 10 11 13 18 19 21 23 24 27 28 30 35 45 46 53 56 57 59 60 61 28116 64 0 1 e 28117 64 0 1 e 28118 64 0 1 e 28119 64 0 1 e 28120 64 0 1 e 28121 64 0 1 e 28122 64 0 1 e 28123 64 0 1 e 28124 64 0 1 e 28125 64 0 1 0 1 2 3 4 7 11 12 16 17 18 21 23 24 26 29 31 33 35 42 43 48 49 51 53 56 59 60 61 62 63 28126 64 0 1 e 28127 64 0 1 11 14 15 22 28 49 50 51 54 60 62 28128 64 1 0 e 28129 64 1 0 e 28130 64 1 0 e 28131 64 1 0 f 28132 64 1 0 e 28133 64 1 0 0 2 6 9 10 11 13 15 16 17 18 20 21 22 25 26 29 31 32 37 38 39 40 41 42 44 45 48 50 51 53 56 58 59 60 62 63 28134 64 1 0 e 28135 64 1 0 e 28136 64 1 0 e 28137 64 1 0 e 28138 64 1 0 e 28139 64 1 0 e 28140 64 1 0 e 28141 64 1 0 e 28142 64 1 0 e 28143 64 1 0 1 3 6 11 12 13 14 16 17 25 26 27 28 29 30 33 34 35 38 41 43 44 45 50 51 53 54 57 58 59 62 28144 64 1 0 e 28145 64 1 0 2 11 18 19 21 22 32 34 45 46 48 51 52 55 57 58 59 62 28146 64 1 0 e 28147 64 1 0 e 28148 64 1 0 e 28149 64 1 0 f 28150 64 1 0 e 28151 64 1 0 1 2 5 7 9 12 14 17 19 21 22 23 28 30 33 34 35 36 37 38 39 40 41 45 46 48 54 55 56 58 60 61 62 28152 64 1 0 e 28153 64 1 0 e 28154 64 1 0 e 28155 64 1 0 e 28156 64 1 0 e 28157 64 1 0 e 28158 64 1 0 e 28159 64 1 0 e 28160 64 1 0 e 28161 64 1 0 2 3 4 5 8 13 14 18 19 20 21 23 25 29 30 32 34 39 41 42 45 48 49 50 54 56 57 59 60 28162 64 1 0 e 28163 64 1 0 2 4 5 14 15 18 19 22 26 32 33 34 39 42 43 44 47 52 54 57 58 61 63 28164 64 1 0 e 28165 64 1 0 e 28166 64 1 0 e 28167 64 1 0 f 28168 64 1 0 e 28169 64 1 0 1 2 4 5 9 11 12 13 14 17 19 23 26 31 34 36 38 41 43 44 47 48 49 50 56 58 62 63 28170 64 1 0 e 28171 64 1 0 e 28172 64 1 0 e 28173 64 1 0 e 28174 64 1 0 e 28175 64 1 0 e 28176 64 1 0 e 28177 64 1 0 e 28178 64 1 0 e 28179 64 1 0 0 1 2 4 5 10 11 13 15 16 17 18 19 23 24 25 27 28 30 32 36 39 40 41 42 43 45 47 48 50 51 53 55 56 58 62 63 28180 64 1 0 e 28181 64 1 0 7 14 24 30 31 34 43 52 58 60 28182 64 1 0 e 28183 64 1 0 e 28184 64 1 0 e 28185 64 1 0 f 28186 64 1 0 e 28187 64 1 0 0 2 5 6 7 10 11 12 17 21 23 24 27 28 31 32 33 36 40 44 45 46 50 51 53 54 57 58 28188 64 1 0 e 28189 64 1 0 e 28190 64 1 0 e 28191 64 1 0 e 28192 64 1 0 e 28193 64 1 0 e 28194 64 1 0 e 28195 64 1 0 e 28196 64 1 0 e 28197 64 1 0 0 1 4 7 9 11 13 15 16 17 19 20 21 22 23 29 30 31 33 36 38 40 41 42 45 46 47 49 51 52 53 55 56 58 59 60 62 28198 64 1 0 e 28199 64 1 0 1 3 4 5 6 7 12 14 19 26 32 42 44 47 55 62 28200 64 1 1 e 28201 64 1 1 e 28202 64 1 1 e 28203 64 1 1 f 28204 64 1 1 e 28205 64 1 1 2 3 5 7 12 23 24 31 32 34 37 39 41 42 44 49 50 51 53 54 55 59 60 61 62 63 28206 64 1 1 e 28207 64 1 1 e 28208 64 1 1 e 28209 64 1 1 e 28210 64 1 1 e 28211 64 1 1 e 28212 64 1 1 e 28213 64 1 1 e 28214 64 1 1 e 28215 64 1 1 0 2 3 6 7 8 9 11 12 15 17 20 21 22 25 26 28 29 32 33 35 37 38 39 41 42 44 45 46 47 49 51 53 54 55 57 58 63 28216 64 1 1 e 28217 64 1 1 0 2 3 6 8 12 13 26 30 31 49 61 28218 64 1 1 e 28219 64 1 1 e 28220 64 1 1 e 28221 64 1 1 f 28222 64 1 1 e 28223 64 1 1 2 3 4 8 10 11 14 17 20 21 22 23 25 26 27 29 30 31 32 33 34 35 38 40 41 44 45 48 49 50 51 52 53 54 57 59 62 28224 64 1 1 e 28225 64 1 1 e 28226 64 1 1 e 28227 64 1 1 e 28228 64 1 1 e 28229 64 1 1 e 28230 64 1 1 e 28231 64 1 1 e 28232 64 1 1 e 28233 64 1 1 0 2 3 5 6 7 8 11 13 16 19 20 23 24 25 26 30 31 32 33 34 35 39 40 43 46 47 48 49 50 52 53 57 58 62 63 28234 64 1 1 e 28235 64 1 1 6 15 17 29 31 34 37 39 40 42 43 46 47 49 53 59 28236 64 1 1 e 28237 64 1 1 e 28238 64 1 1 e 28239 64 1 1 f 28240 64 1 1 e 28241 64 1 1 0 2 7 9 10 11 13 16 17 18 19 20 24 29 30 31 33 37 40 43 45 48 51 52 53 56 58 28242 64 1 1 e 28243 64 1 1 e 28244 64 1 1 e 28245 64 1 1 e 28246 64 1 1 e 28247 64 1 1 e 28248 64 1 1 e 28249 64 1 1 e 28250 64 1 1 e 28251 64 1 1 1 3 5 7 10 12 13 14 15 18 19 21 22 24 25 29 30 33 34 36 37 38 39 40 44 45 46 47 48 50 51 55 56 58 59 60 63 28252 64 1 1 e 28253 64 1 1 1 4 5 11 15 16 18 19 21 23 29 34 50 61 28254 64 1 1 e 28255 64 1 1 e 28256 64 1 1 e 28257 64 1 1 f 28258 64 1 1 e 28259 64 1 1 0 2 3 5 7 8 14 15 16 17 18 19 20 21 27 28 29 31 33 36 37 39 41 44 45 47 48 50 54 55 58 61 63 28260 64 1 1 e 28261 64 1 1 e 28262 64 1 1 e 28263 64 1 1 e 28264 64 1 1 e 28265 64 1 1 e 28266 64 1 1 e 28267 64 1 1 e 28268 64 1 1 e 28269 64 1 1 1 3 4 8 12 13 14 18 19 20 22 24 26 28 30 31 35 38 39 40 41 45 49 50 51 53 54 55 56 58 60 61 62 63 28270 64 1 1 e 28271 64 1 1 0 1 6 9 11 17 18 19 21 24 28 30 33 35 39 41 45 47 52 53 55 58 28272 65 0 0 e 28273 65 0 0 e 28274 65 0 0 e 28275 65 0 0 f 28276 65 0 0 e 28277 65 0 0 2 3 4 7 8 9 12 13 21 22 23 25 27 31 32 35 37 38 40 42 43 48 49 50 51 53 54 55 57 58 59 28278 65 0 0 e 28279 65 0 0 e 28280 65 0 0 e 28281 65 0 0 e 28282 65 0 0 e 28283 65 0 0 e 28284 65 0 0 e 28285 65 0 0 e 28286 65 0 0 e 28287 65 0 0 2 3 4 6 9 14 16 17 20 23 24 25 27 29 32 33 35 36 37 38 39 42 47 48 49 50 51 52 53 55 56 59 62 63 64 28288 65 0 0 e 28289 65 0 0 0 3 6 8 14 18 23 26 31 32 33 35 36 38 41 55 57 60 28290 65 0 0 e 28291 65 0 0 e 28292 65 0 0 e 28293 65 0 0 f 28294 65 0 0 e 28295 65 0 0 3 9 10 11 14 18 19 21 22 24 26 28 29 30 33 35 37 41 43 48 49 51 52 53 55 60 61 62 64 28296 65 0 0 e 28297 65 0 0 e 28298 65 0 0 e 28299 65 0 0 e 28300 65 0 0 e 28301 65 0 0 e 28302 65 0 0 e 28303 65 0 0 e 28304 65 0 0 e 28305 65 0 0 0 2 4 5 6 7 10 14 15 16 23 24 27 28 29 30 32 33 37 41 44 45 46 48 51 55 57 59 62 63 64 28306 65 0 0 e 28307 65 0 0 3 5 11 16 23 24 27 29 33 39 40 47 50 53 55 60 64 28308 65 0 0 e 28309 65 0 0 e 28310 65 0 0 e 28311 65 0 0 f 28312 65 0 0 e 28313 65 0 0 7 10 11 13 14 15 16 19 20 22 23 24 27 30 31 32 33 40 44 47 48 51 52 55 56 57 58 28314 65 0 0 e 28315 65 0 0 e 28316 65 0 0 e 28317 65 0 0 e 28318 65 0 0 e 28319 65 0 0 e 28320 65 0 0 e 28321 65 0 0 e 28322 65 0 0 e 28323 65 0 0 1 3 5 6 8 11 12 13 14 18 19 20 21 23 26 27 29 35 37 38 39 42 43 44 49 50 51 58 60 62 63 28324 65 0 0 e 28325 65 0 0 0 10 15 17 19 25 30 32 35 36 38 47 48 51 52 54 59 60 61 28326 65 0 0 e 28327 65 0 0 e 28328 65 0 0 e 28329 65 0 0 f 28330 65 0 0 e 28331 65 0 0 1 3 4 5 6 8 10 11 12 13 15 16 18 19 21 23 24 26 27 28 29 32 33 34 35 36 37 38 39 41 42 44 47 48 49 50 52 53 55 58 59 28332 65 0 0 e 28333 65 0 0 e 28334 65 0 0 e 28335 65 0 0 e 28336 65 0 0 e 28337 65 0 0 e 28338 65 0 0 e 28339 65 0 0 e 28340 65 0 0 e 28341 65 0 0 2 3 11 12 14 15 16 17 18 20 24 25 30 34 36 37 38 39 40 41 43 44 47 48 49 50 52 53 56 59 61 63 28342 65 0 0 e 28343 65 0 0 3 10 12 16 20 21 27 28 30 31 38 42 50 51 56 57 62 28344 65 0 1 e 28345 65 0 1 e 28346 65 0 1 e 28347 65 0 1 f 28348 65 0 1 e 28349 65 0 1 0 1 2 3 6 10 11 12 16 21 24 28 29 30 31 35 36 40 41 43 45 46 48 50 52 54 55 57 60 61 28350 65 0 1 e 28351 65 0 1 e 28352 65 0 1 e 28353 65 0 1 e 28354 65 0 1 e 28355 65 0 1 e 28356 65 0 1 e 28357 65 0 1 e 28358 65 0 1 e 28359 65 0 1 0 2 4 10 11 12 13 14 15 16 17 18 19 20 22 23 26 27 28 29 30 32 35 38 39 43 44 45 46 47 52 54 55 59 61 62 63 28360 65 0 1 e 28361 65 0 1 12 13 14 16 17 22 23 31 32 54 55 59 64 28362 65 0 1 e 28363 65 0 1 e 28364 65 0 1 e 28365 65 0 1 f 28366 65 0 1 e 28367 65 0 1 0 4 5 6 8 9 15 16 19 20 23 24 28 30 31 32 35 37 38 40 43 45 46 48 51 52 53 54 56 58 59 61 28368 65 0 1 e 28369 65 0 1 e 28370 65 0 1 e 28371 65 0 1 e 28372 65 0 1 e 28373 65 0 1 e 28374 65 0 1 e 28375 65 0 1 e 28376 65 0 1 e 28377 65 0 1 0 1 2 6 8 9 10 11 17 18 19 20 21 22 23 27 29 30 31 34 35 37 38 42 43 44 45 46 47 50 51 52 58 60 62 63 28378 65 0 1 e 28379 65 0 1 4 15 16 17 20 23 31 34 37 41 43 44 45 47 52 54 56 28380 65 0 1 e 28381 65 0 1 e 28382 65 0 1 e 28383 65 0 1 f 28384 65 0 1 e 28385 65 0 1 0 3 4 5 7 8 10 11 12 14 16 19 22 23 24 25 27 32 33 36 37 39 40 41 42 43 46 48 52 53 55 56 57 61 63 64 28386 65 0 1 e 28387 65 0 1 e 28388 65 0 1 e 28389 65 0 1 e 28390 65 0 1 e 28391 65 0 1 e 28392 65 0 1 e 28393 65 0 1 e 28394 65 0 1 e 28395 65 0 1 2 5 6 10 14 16 21 22 23 24 25 26 27 29 30 32 36 39 41 44 45 48 49 51 55 56 57 58 28396 65 0 1 e 28397 65 0 1 3 13 17 18 25 26 27 30 32 36 37 39 44 45 46 47 52 60 61 63 28398 65 0 1 e 28399 65 0 1 e 28400 65 0 1 e 28401 65 0 1 f 28402 65 0 1 e 28403 65 0 1 1 8 9 11 13 15 17 18 19 23 24 25 26 27 30 31 34 35 40 41 42 44 47 50 51 52 53 54 55 56 60 62 64 28404 65 0 1 e 28405 65 0 1 e 28406 65 0 1 e 28407 65 0 1 e 28408 65 0 1 e 28409 65 0 1 e 28410 65 0 1 e 28411 65 0 1 e 28412 65 0 1 e 28413 65 0 1 1 4 7 8 9 13 15 17 20 24 29 30 33 35 36 38 40 41 43 45 47 50 51 53 60 61 28414 65 0 1 e 28415 65 0 1 0 1 2 3 7 14 15 17 34 48 54 55 56 61 28416 65 1 0 e 28417 65 1 0 e 28418 65 1 0 e 28419 65 1 0 f 28420 65 1 0 e 28421 65 1 0 1 3 4 7 8 9 12 16 18 21 22 24 27 28 30 35 36 38 39 41 42 46 48 51 56 57 58 60 61 62 28422 65 1 0 e 28423 65 1 0 e 28424 65 1 0 e 28425 65 1 0 e 28426 65 1 0 e 28427 65 1 0 e 28428 65 1 0 e 28429 65 1 0 e 28430 65 1 0 e 28431 65 1 0 0 3 4 8 11 12 13 15 16 17 20 23 24 26 31 34 35 36 37 40 42 46 47 48 49 50 51 53 55 56 58 61 62 63 28432 65 1 0 e 28433 65 1 0 2 5 10 11 15 17 18 19 33 36 49 50 52 54 57 28434 65 1 0 e 28435 65 1 0 e 28436 65 1 0 e 28437 65 1 0 f 28438 65 1 0 e 28439 65 1 0 4 5 6 10 11 13 14 16 18 21 26 27 28 32 33 35 36 40 42 43 45 47 51 53 55 56 58 59 60 28440 65 1 0 e 28441 65 1 0 e 28442 65 1 0 e 28443 65 1 0 e 28444 65 1 0 e 28445 65 1 0 e 28446 65 1 0 e 28447 65 1 0 e 28448 65 1 0 e 28449 65 1 0 1 2 3 4 6 14 17 18 19 20 21 23 24 25 29 30 33 34 35 36 39 42 45 51 52 56 57 59 61 62 28450 65 1 0 e 28451 65 1 0 1 12 14 20 31 32 42 49 59 28452 65 1 0 e 28453 65 1 0 e 28454 65 1 0 e 28455 65 1 0 f 28456 65 1 0 e 28457 65 1 0 2 6 8 14 17 18 21 22 23 24 27 29 34 37 38 42 43 45 47 49 50 51 52 53 54 55 61 62 28458 65 1 0 e 28459 65 1 0 e 28460 65 1 0 e 28461 65 1 0 e 28462 65 1 0 e 28463 65 1 0 e 28464 65 1 0 e 28465 65 1 0 e 28466 65 1 0 e 28467 65 1 0 0 1 2 3 4 5 9 10 13 14 15 16 19 20 26 30 31 34 35 36 37 39 41 43 45 47 48 49 50 52 53 55 56 57 58 59 62 28468 65 1 0 e 28469 65 1 0 1 3 4 5 8 14 16 17 20 22 28 36 43 49 50 60 28470 65 1 0 e 28471 65 1 0 e 28472 65 1 0 e 28473 65 1 0 f 28474 65 1 0 e 28475 65 1 0 0 1 2 3 8 10 16 17 19 20 21 23 24 26 28 30 31 33 34 35 43 45 48 49 52 55 56 59 60 61 62 64 28476 65 1 0 e 28477 65 1 0 e 28478 65 1 0 e 28479 65 1 0 e 28480 65 1 0 e 28481 65 1 0 e 28482 65 1 0 e 28483 65 1 0 e 28484 65 1 0 e 28485 65 1 0 1 4 6 9 12 14 15 21 25 26 28 31 32 33 34 35 36 37 38 41 43 44 46 47 49 51 52 54 55 56 58 59 64 28486 65 1 0 e 28487 65 1 0 1 3 6 8 20 35 36 37 42 58 59 63 64 28488 65 1 1 e 28489 65 1 1 e 28490 65 1 1 e 28491 65 1 1 f 28492 65 1 1 e 28493 65 1 1 1 2 5 6 7 8 9 10 14 17 18 20 22 23 24 25 28 29 32 34 35 37 38 39 40 41 44 45 46 48 50 51 52 55 57 60 61 62 28494 65 1 1 e 28495 65 1 1 e 28496 65 1 1 e 28497 65 1 1 e 28498 65 1 1 e 28499 65 1 1 e 28500 65 1 1 e 28501 65 1 1 e 28502 65 1 1 e 28503 65 1 1 0 3 5 6 7 8 9 11 16 17 22 23 24 26 29 30 31 32 33 36 38 40 41 42 43 45 47 50 53 54 55 56 60 61 62 64 28504 65 1 1 e 28505 65 1 1 6 7 9 10 15 19 20 21 27 32 35 43 45 46 49 54 60 61 28506 65 1 1 e 28507 65 1 1 e 28508 65 1 1 e 28509 65 1 1 f 28510 65 1 1 e 28511 65 1 1 0 6 7 8 9 10 12 14 16 17 18 19 20 21 27 29 33 35 39 40 43 44 47 50 51 52 53 59 61 63 28512 65 1 1 e 28513 65 1 1 e 28514 65 1 1 e 28515 65 1 1 e 28516 65 1 1 e 28517 65 1 1 e 28518 65 1 1 e 28519 65 1 1 e 28520 65 1 1 e 28521 65 1 1 1 3 7 10 12 15 18 22 23 24 25 26 29 33 34 35 36 37 39 43 51 53 56 57 59 61 63 28522 65 1 1 e 28523 65 1 1 2 6 11 12 14 15 22 26 30 34 39 41 51 52 28524 65 1 1 e 28525 65 1 1 e 28526 65 1 1 e 28527 65 1 1 f 28528 65 1 1 e 28529 65 1 1 4 6 7 8 9 11 13 15 18 19 20 21 23 24 25 26 31 32 33 35 39 41 42 44 48 49 51 52 53 54 55 56 57 58 60 63 28530 65 1 1 e 28531 65 1 1 e 28532 65 1 1 e 28533 65 1 1 e 28534 65 1 1 e 28535 65 1 1 e 28536 65 1 1 e 28537 65 1 1 e 28538 65 1 1 e 28539 65 1 1 4 5 8 9 11 12 13 14 15 17 18 19 23 25 31 34 35 36 37 38 39 40 41 44 45 46 47 48 49 51 52 54 55 56 57 58 59 60 61 63 64 28540 65 1 1 e 28541 65 1 1 3 8 9 13 17 19 23 27 29 35 43 50 51 61 28542 65 1 1 e 28543 65 1 1 e 28544 65 1 1 e 28545 65 1 1 f 28546 65 1 1 e 28547 65 1 1 0 2 5 6 7 8 9 10 12 13 14 18 19 21 22 23 26 28 32 34 37 38 40 41 42 43 44 46 48 49 52 54 55 57 61 62 28548 65 1 1 e 28549 65 1 1 e 28550 65 1 1 e 28551 65 1 1 e 28552 65 1 1 e 28553 65 1 1 e 28554 65 1 1 e 28555 65 1 1 e 28556 65 1 1 e 28557 65 1 1 0 5 6 7 9 10 12 13 14 18 21 22 24 25 26 28 33 34 38 40 41 45 48 49 50 55 56 57 58 60 62 63 64 28558 65 1 1 e 28559 65 1 1 4 9 10 13 17 19 20 24 29 38 44 46 48 50 51 52 55 57 63 64 28560 211 0 0 e 28561 211 0 0 e 28562 211 0 0 e 28563 211 0 0 f 28564 211 0 0 e 28565 211 0 0 1 3 4 6 8 9 11 12 14 18 19 20 21 22 24 28 30 35 36 37 39 40 41 42 43 46 47 48 49 50 51 52 55 56 58 59 60 61 63 65 66 68 70 71 73 81 82 86 88 89 92 93 96 98 100 101 105 106 107 109 110 111 112 113 114 117 118 119 120 123 125 130 132 133 134 136 139 142 145 146 148 149 151 153 154 155 156 161 162 164 165 166 167 170 171 175 179 181 182 183 184 186 187 188 189 192 194 195 196 197 198 200 202 204 28566 211 0 0 e 28567 211 0 0 e 28568 211 0 0 e 28569 211 0 0 e 28570 211 0 0 e 28571 211 0 0 e 28572 211 0 0 e 28573 211 0 0 e 28574 211 0 0 e 28575 211 0 0 3 4 5 10 15 21 23 27 28 31 32 37 40 41 43 45 48 49 50 51 53 54 55 56 57 63 66 68 72 73 75 79 80 81 82 86 87 88 89 91 92 95 103 104 106 107 108 109 110 117 118 119 121 122 123 124 125 126 128 129 131 132 134 135 136 140 141 143 144 145 146 147 150 151 155 156 157 158 159 161 165 166 167 168 169 170 172 173 174 179 180 181 183 184 190 192 195 196 197 199 200 201 202 204 205 207 208 28576 211 0 0 e 28577 211 0 0 1 3 5 8 11 17 21 34 41 44 48 49 60 66 67 68 79 80 82 83 86 88 98 101 102 103 106 109 115 118 120 121 123 124 128 133 137 138 140 144 147 152 156 162 163 164 165 171 172 177 180 181 193 194 207 28578 211 0 0 e 28579 211 0 0 e 28580 211 0 0 e 28581 211 0 0 f 28582 211 0 0 e 28583 211 0 0 1 2 3 6 8 10 11 13 20 21 22 23 24 27 28 29 31 32 34 35 40 42 44 46 48 50 51 55 56 57 58 60 61 67 68 69 70 72 73 74 75 80 83 84 85 86 88 89 90 92 94 95 96 98 101 102 104 105 109 110 111 112 113 114 115 116 117 120 122 124 125 130 131 132 133 134 135 136 138 139 140 141 142 143 144 145 146 148 149 150 151 153 155 156 157 160 163 166 169 178 181 182 184 187 188 189 191 194 195 196 197 202 203 204 207 209 28584 211 0 0 e 28585 211 0 0 e 28586 211 0 0 e 28587 211 0 0 e 28588 211 0 0 e 28589 211 0 0 e 28590 211 0 0 e 28591 211 0 0 e 28592 211 0 0 e 28593 211 0 0 0 4 6 7 16 19 21 22 23 24 27 28 30 33 35 37 44 49 50 51 53 55 56 62 64 65 66 67 68 69 70 71 73 74 75 77 78 81 82 85 86 87 90 94 95 98 99 105 106 111 112 114 115 116 117 119 120 123 125 128 129 130 131 133 134 139 140 145 150 151 153 155 157 158 161 162 165 167 168 172 174 175 176 177 178 180 181 182 186 187 188 190 191 192 196 198 199 200 201 202 204 206 208 209 28594 211 0 0 e 28595 211 0 0 13 22 24 27 28 35 39 41 42 43 46 48 54 58 59 61 62 64 68 71 76 89 90 93 99 103 106 111 113 119 121 122 127 132 136 137 139 148 152 154 165 171 175 177 182 186 196 200 204 205 206 28596 211 0 0 e 28597 211 0 0 e 28598 211 0 0 e 28599 211 0 0 f 28600 211 0 0 e 28601 211 0 0 0 4 5 6 8 10 11 12 13 17 18 19 20 21 23 24 26 27 28 31 32 33 34 35 37 41 44 45 53 56 59 60 61 63 67 69 71 72 74 78 79 80 81 82 84 86 87 89 92 93 94 99 102 103 104 105 110 113 114 115 118 119 122 125 127 129 130 131 134 142 143 146 147 148 152 154 155 158 159 160 162 164 168 169 170 174 175 176 177 178 179 183 184 186 189 193 194 203 204 206 207 210 28602 211 0 0 e 28603 211 0 0 e 28604 211 0 0 e 28605 211 0 0 e 28606 211 0 0 e 28607 211 0 0 e 28608 211 0 0 e 28609 211 0 0 e 28610 211 0 0 e 28611 211 0 0 0 1 4 5 8 9 10 13 20 21 22 24 27 29 39 42 44 45 51 54 55 60 63 64 66 67 68 71 73 74 75 76 78 79 85 86 88 89 93 95 96 97 100 102 103 104 105 106 108 110 111 113 116 117 120 121 122 123 125 127 133 134 135 139 140 141 142 143 144 145 151 152 153 155 158 159 161 162 167 168 172 173 174 177 179 181 183 185 186 187 188 192 193 195 196 201 207 208 209 28612 211 0 0 e 28613 211 0 0 3 10 11 14 25 26 27 41 52 53 58 60 61 62 64 66 69 75 81 83 84 87 88 93 95 96 98 103 108 109 111 113 115 118 121 124 125 131 139 140 146 155 156 158 165 168 170 171 172 174 181 187 189 193 201 203 205 28614 211 0 0 e 28615 211 0 0 e 28616 211 0 0 e 28617 211 0 0 f 28618 211 0 0 e 28619 211 0 0 0 1 2 4 7 8 9 11 12 13 14 15 18 19 20 22 23 26 27 28 29 31 38 46 47 49 55 56 59 60 61 62 64 65 66 69 70 71 72 73 78 79 80 84 86 88 91 93 96 97 98 100 103 105 106 107 108 109 111 113 118 119 120 121 122 123 124 125 127 128 129 131 133 135 136 138 139 142 143 144 145 149 151 152 153 154 155 156 158 159 162 163 166 168 170 172 173 175 176 178 179 182 185 192 193 197 198 199 201 206 208 209 28620 211 0 0 e 28621 211 0 0 e 28622 211 0 0 e 28623 211 0 0 e 28624 211 0 0 e 28625 211 0 0 e 28626 211 0 0 e 28627 211 0 0 e 28628 211 0 0 e 28629 211 0 0 3 5 7 9 10 13 15 18 19 21 22 24 25 26 28 30 31 33 34 37 41 46 47 48 51 54 55 56 61 63 65 66 69 70 73 75 79 85 87 88 92 94 95 96 98 99 102 105 106 108 109 110 113 119 122 123 127 128 131 133 134 137 141 146 148 149 151 152 153 154 155 157 159 160 164 165 167 169 170 171 173 174 175 178 179 180 181 184 185 186 187 188 189 192 196 197 201 202 204 206 207 208 209 28630 211 0 0 e 28631 211 0 0 3 4 8 11 12 17 23 26 27 30 31 39 41 48 57 62 67 82 85 89 96 99 103 112 113 114 120 121 122 123 129 134 138 141 143 145 156 161 167 170 176 178 181 183 186 199 28632 211 0 1 e 28633 211 0 1 e 28634 211 0 1 e 28635 211 0 1 f 28636 211 0 1 e 28637 211 0 1 0 1 2 3 6 8 11 12 15 16 17 19 23 26 28 36 37 38 39 42 43 44 45 46 47 48 50 53 54 55 57 58 62 64 65 66 68 69 73 75 76 78 79 83 86 87 89 93 94 95 96 97 99 100 101 104 107 108 109 110 113 115 117 118 120 122 123 125 126 128 131 135 136 138 139 142 143 146 147 149 151 154 157 158 161 163 166 168 172 179 182 183 184 185 187 188 189 192 194 196 197 198 199 205 206 207 209 210 28638 211 0 1 e 28639 211 0 1 e 28640 211 0 1 e 28641 211 0 1 e 28642 211 0 1 e 28643 211 0 1 e 28644 211 0 1 e 28645 211 0 1 e 28646 211 0 1 e 28647 211 0 1 0 2 8 9 10 12 13 14 15 17 20 22 23 25 26 29 30 31 32 34 35 37 38 39 42 43 44 46 47 48 49 53 54 57 61 62 63 64 67 68 69 70 71 72 76 77 78 80 81 82 83 86 88 89 91 93 95 96 100 101 102 107 108 110 112 114 116 120 121 123 128 129 134 137 138 139 140 141 143 144 145 146 149 150 151 153 154 155 156 157 158 161 162 163 164 166 167 168 169 170 171 173 175 177 181 183 185 187 189 191 193 196 197 198 202 204 205 28648 211 0 1 e 28649 211 0 1 0 1 5 11 12 15 18 19 20 21 27 29 31 35 37 45 46 51 61 64 65 80 83 91 115 121 123 130 131 133 136 140 141 142 145 148 150 153 160 163 165 167 168 175 179 180 193 194 203 28650 211 0 1 e 28651 211 0 1 e 28652 211 0 1 e 28653 211 0 1 f 28654 211 0 1 e 28655 211 0 1 0 1 2 4 7 9 10 11 13 14 15 17 19 20 23 25 26 27 28 31 32 35 37 38 39 41 42 43 47 49 50 52 54 56 57 59 60 61 63 65 66 67 69 70 71 74 75 76 78 80 81 82 83 85 89 90 92 98 99 101 102 103 106 108 109 110 111 112 114 115 119 124 125 127 130 136 137 138 139 140 144 149 150 151 152 154 155 156 158 160 162 164 165 166 167 168 170 171 172 175 177 179 182 185 189 190 200 203 206 207 209 210 28656 211 0 1 e 28657 211 0 1 e 28658 211 0 1 e 28659 211 0 1 e 28660 211 0 1 e 28661 211 0 1 e 28662 211 0 1 e 28663 211 0 1 e 28664 211 0 1 e 28665 211 0 1 0 7 9 11 16 21 24 25 29 30 31 32 33 36 38 39 40 45 48 51 52 54 57 61 62 63 64 65 66 69 71 72 74 75 76 77 78 80 82 83 86 88 91 92 94 96 98 99 100 101 102 104 107 109 110 111 112 113 116 119 121 123 124 125 129 131 133 135 136 139 140 142 143 144 145 146 148 149 150 151 154 155 156 157 159 162 164 165 166 168 173 174 175 178 181 182 184 188 191 193 194 195 197 198 199 200 201 202 203 205 207 208 209 210 28666 211 0 1 e 28667 211 0 1 0 13 14 16 27 31 33 40 43 53 55 57 62 63 66 70 72 76 86 100 102 104 106 109 110 111 114 116 119 120 124 125 129 130 132 137 140 144 149 153 156 160 164 176 177 181 185 186 187 188 202 204 205 207 28668 211 0 1 e 28669 211 0 1 e 28670 211 0 1 e 28671 211 0 1 f 28672 211 0 1 e 28673 211 0 1 0 4 7 8 10 12 14 16 18 20 21 24 26 27 28 30 31 34 36 39 40 43 45 50 52 54 55 57 60 64 66 67 73 74 75 76 81 82 85 87 89 94 96 97 98 103 106 107 108 109 112 113 114 116 117 118 120 122 123 124 125 128 130 131 132 134 135 136 138 142 146 147 149 152 153 155 156 160 161 167 168 172 174 175 176 178 185 186 187 191 193 197 199 201 205 207 28674 211 0 1 e 28675 211 0 1 e 28676 211 0 1 e 28677 211 0 1 e 28678 211 0 1 e 28679 211 0 1 e 28680 211 0 1 e 28681 211 0 1 e 28682 211 0 1 e 28683 211 0 1 0 1 3 5 6 8 11 12 13 15 16 17 18 19 21 23 26 29 31 34 35 38 39 41 42 45 46 47 50 51 53 56 57 58 61 62 63 69 70 71 74 81 82 85 86 88 91 92 93 95 98 100 101 102 103 104 107 111 112 113 114 115 116 118 121 122 124 126 127 129 130 133 134 135 136 137 138 140 141 142 147 148 149 150 151 152 153 154 156 157 158 159 162 164 165 166 167 170 172 178 179 181 182 183 186 187 188 191 194 196 197 198 199 200 202 203 206 28684 211 0 1 e 28685 211 0 1 1 3 4 5 8 10 13 19 22 23 33 34 36 41 43 48 53 58 59 60 62 64 66 68 77 86 91 92 103 106 116 119 133 142 149 150 155 158 163 165 176 183 190 196 198 199 205 206 207 28686 211 0 1 e 28687 211 0 1 e 28688 211 0 1 e 28689 211 0 1 f 28690 211 0 1 e 28691 211 0 1 1 2 6 7 8 9 10 12 13 14 15 16 17 18 19 23 26 27 28 32 33 42 43 45 46 48 49 51 52 53 54 59 60 63 65 67 69 72 73 76 81 87 88 89 90 93 95 96 98 99 101 104 105 107 109 111 112 113 114 116 118 119 121 124 128 129 132 133 135 136 137 138 140 141 143 144 146 147 148 149 151 152 153 157 158 160 163 165 166 168 170 171 174 177 178 180 185 186 189 190 194 195 197 203 204 205 206 208 209 28692 211 0 1 e 28693 211 0 1 e 28694 211 0 1 e 28695 211 0 1 e 28696 211 0 1 e 28697 211 0 1 e 28698 211 0 1 e 28699 211 0 1 e 28700 211 0 1 e 28701 211 0 1 1 3 5 7 8 9 11 12 13 14 15 18 19 20 21 22 25 27 29 34 37 38 39 41 42 46 49 50 51 53 54 58 60 61 63 64 65 66 67 68 70 71 72 74 75 77 78 79 81 89 91 95 96 97 98 100 105 106 110 112 115 118 120 121 122 123 124 125 126 127 130 131 133 134 136 139 146 148 149 153 157 158 160 162 163 166 167 169 172 175 176 178 180 181 183 186 188 192 193 194 195 196 199 203 204 206 28702 211 0 1 e 28703 211 0 1 5 7 10 11 15 17 18 21 34 38 40 41 43 48 49 55 67 70 72 76 78 80 83 90 97 100 108 113 115 122 126 129 133 135 142 153 157 159 161 170 174 177 178 179 181 182 199 200 205 208 28704 211 1 0 e 28705 211 1 0 e 28706 211 1 0 e 28707 211 1 0 f 28708 211 1 0 e 28709 211 1 0 3 4 5 6 8 9 14 20 21 22 24 25 28 29 30 31 32 34 35 43 44 50 54 58 59 60 61 62 63 65 66 70 71 72 77 78 79 84 86 88 91 94 96 97 98 100 101 102 103 104 109 113 114 117 118 121 122 125 126 129 132 135 136 141 142 143 144 145 151 158 159 163 164 166 167 168 169 170 172 173 177 178 179 182 184 185 186 187 189 190 192 193 195 202 203 207 210 28710 211 1 0 e 28711 211 1 0 e 28712 211 1 0 e 28713 211 1 0 e 28714 211 1 0 e 28715 211 1 0 e 28716 211 1 0 e 28717 211 1 0 e 28718 211 1 0 e 28719 211 1 0 0 1 3 8 9 10 12 13 14 16 18 23 26 29 30 31 32 33 35 37 38 39 42 43 44 46 47 50 53 54 56 57 59 63 64 65 67 73 74 78 82 83 84 86 88 90 93 94 95 98 101 104 105 107 108 109 110 112 114 116 121 124 127 129 135 137 139 142 147 148 149 151 155 158 160 161 163 164 165 166 167 169 170 172 176 177 178 181 182 185 188 189 190 193 195 197 198 202 205 207 209 210 28720 211 1 0 e 28721 211 1 0 2 3 7 15 19 34 35 38 39 41 50 53 66 67 75 76 78 82 84 86 93 109 113 115 129 133 136 137 155 156 165 167 170 186 188 191 201 209 28722 211 1 0 e 28723 211 1 0 e 28724 211 1 0 e 28725 211 1 0 f 28726 211 1 0 e 28727 211 1 0 0 2 3 4 6 7 8 11 12 13 14 16 20 23 24 27 30 31 32 33 34 36 37 39 41 42 43 44 47 48 49 50 51 54 55 56 58 59 60 61 62 65 66 68 76 78 79 81 87 90 92 93 94 96 97 98 99 103 104 106 108 109 112 113 114 116 122 126 129 136 138 139 141 144 145 147 149 151 152 153 159 161 163 166 168 169 171 172 177 179 185 186 187 188 190 192 193 194 197 200 201 206 207 28728 211 1 0 e 28729 211 1 0 e 28730 211 1 0 e 28731 211 1 0 e 28732 211 1 0 e 28733 211 1 0 e 28734 211 1 0 e 28735 211 1 0 e 28736 211 1 0 e 28737 211 1 0 0 8 10 12 13 15 16 17 23 24 25 29 31 34 39 42 43 44 45 46 47 48 49 50 51 52 53 56 58 59 61 73 76 77 78 82 83 84 85 88 89 90 91 94 97 98 101 107 108 109 110 111 112 114 115 116 117 118 119 121 124 126 127 128 130 131 132 133 135 138 139 142 143 144 148 150 151 152 154 158 159 162 163 164 165 166 167 168 170 171 174 175 177 179 180 181 184 185 187 189 190 192 195 196 197 200 201 203 204 205 206 207 209 28738 211 1 0 e 28739 211 1 0 7 15 17 18 26 31 33 36 39 42 43 44 48 55 58 59 63 64 68 71 84 86 90 97 102 105 106 118 119 121 127 130 131 135 137 138 147 153 154 162 163 165 166 170 173 175 179 181 184 189 191 192 195 196 197 199 201 205 208 210 28740 211 1 0 e 28741 211 1 0 e 28742 211 1 0 e 28743 211 1 0 f 28744 211 1 0 e 28745 211 1 0 1 7 8 10 11 13 14 15 16 17 18 19 20 21 26 27 30 31 33 35 40 43 46 49 52 53 54 55 57 58 59 61 62 64 65 69 70 75 76 81 82 83 84 85 86 89 91 92 93 96 98 102 104 105 110 115 119 125 126 130 132 133 134 135 136 139 140 141 143 145 146 147 151 152 153 156 157 158 159 161 168 173 175 176 178 180 186 187 190 191 195 196 197 198 199 203 204 205 206 207 210 28746 211 1 0 e 28747 211 1 0 e 28748 211 1 0 e 28749 211 1 0 e 28750 211 1 0 e 28751 211 1 0 e 28752 211 1 0 e 28753 211 1 0 e 28754 211 1 0 e 28755 211 1 0 0 3 5 10 12 13 14 15 18 19 21 22 23 25 26 27 28 34 36 37 39 40 41 45 47 48 49 51 52 53 55 57 58 59 60 61 62 63 64 66 68 69 70 73 74 75 77 79 83 84 86 87 88 90 92 94 96 100 101 102 104 106 107 108 109 110 111 112 113 114 118 119 123 124 125 126 129 131 133 134 135 136 138 140 144 145 147 148 150 151 153 155 157 158 164 165 167 169 170 171 172 173 179 181 183 188 190 191 193 195 200 204 210 28756 211 1 0 e 28757 211 1 0 10 11 17 19 22 25 26 29 30 37 41 42 44 51 62 72 73 75 79 83 94 110 111 113 117 127 130 139 143 150 157 158 159 162 167 171 175 183 186 187 188 192 195 197 199 200 206 210 28758 211 1 0 e 28759 211 1 0 e 28760 211 1 0 e 28761 211 1 0 f 28762 211 1 0 e 28763 211 1 0 0 2 3 6 10 14 15 16 17 18 19 23 25 26 27 28 29 31 34 35 36 37 38 39 40 41 44 47 49 51 53 55 56 59 61 62 65 67 70 72 74 75 76 77 78 80 82 87 88 89 90 91 92 95 97 98 99 100 101 103 105 106 108 109 110 111 112 113 117 119 121 122 127 133 135 136 139 140 141 142 143 144 147 148 150 153 154 155 157 158 159 162 164 167 177 182 183 185 186 187 188 191 192 195 196 197 201 202 203 206 207 208 28764 211 1 0 e 28765 211 1 0 e 28766 211 1 0 e 28767 211 1 0 e 28768 211 1 0 e 28769 211 1 0 e 28770 211 1 0 e 28771 211 1 0 e 28772 211 1 0 e 28773 211 1 0 2 5 9 11 14 15 17 20 21 23 25 29 30 32 35 37 42 46 49 51 52 55 57 58 61 64 65 66 67 69 70 72 73 75 76 77 79 80 82 84 85 86 87 90 91 92 93 94 95 103 104 106 109 111 112 113 114 118 119 125 126 128 129 130 131 132 133 134 138 140 141 142 146 150 152 153 155 157 158 160 162 166 171 172 173 175 176 177 178 179 180 181 182 186 187 188 189 190 192 194 195 196 198 199 201 202 203 205 207 209 28774 211 1 0 e 28775 211 1 0 6 8 13 18 20 29 31 34 37 38 40 43 44 54 55 56 61 67 69 72 80 83 86 90 98 99 102 105 109 111 113 114 119 121 123 125 126 127 131 135 136 156 157 165 166 175 180 184 190 194 196 199 201 206 207 209 210 28776 211 1 1 e 28777 211 1 1 e 28778 211 1 1 e 28779 211 1 1 f 28780 211 1 1 e 28781 211 1 1 0 1 2 3 4 5 7 9 10 11 13 14 15 16 19 22 33 34 36 41 42 43 44 45 46 47 50 53 54 55 59 60 61 62 64 65 66 70 73 77 79 81 83 84 86 87 88 90 91 92 93 95 96 99 101 103 104 105 106 108 110 111 114 115 118 120 121 122 123 129 131 132 133 134 137 138 140 141 144 145 150 152 153 154 156 158 161 163 164 168 171 172 173 175 176 180 183 184 187 188 189 192 193 195 197 198 200 203 206 207 208 28782 211 1 1 e 28783 211 1 1 e 28784 211 1 1 e 28785 211 1 1 e 28786 211 1 1 e 28787 211 1 1 e 28788 211 1 1 e 28789 211 1 1 e 28790 211 1 1 e 28791 211 1 1 0 1 2 3 5 6 7 9 11 12 15 16 21 23 26 29 31 33 34 35 36 39 40 41 44 45 48 51 52 55 57 60 63 64 65 68 69 75 76 78 79 80 85 87 90 91 93 94 95 97 99 102 106 109 110 111 112 113 115 119 124 125 126 128 129 130 131 132 133 136 137 139 141 142 143 145 146 147 148 149 151 152 154 155 158 159 163 164 166 169 173 175 177 179 185 186 188 190 191 194 202 204 205 206 207 209 28792 211 1 1 e 28793 211 1 1 1 8 9 14 19 21 35 38 39 41 43 44 45 49 51 59 60 61 67 69 77 79 82 90 93 95 100 102 104 114 117 118 119 123 124 125 130 134 135 139 145 146 159 164 165 169 171 176 178 188 190 191 193 202 28794 211 1 1 e 28795 211 1 1 e 28796 211 1 1 e 28797 211 1 1 f 28798 211 1 1 e 28799 211 1 1 0 6 9 10 12 13 17 18 19 20 22 24 25 26 27 29 33 35 38 40 41 42 43 44 48 49 50 51 53 55 56 58 59 63 65 68 70 71 73 74 76 79 82 87 88 90 91 92 94 96 98 99 100 101 102 105 109 114 115 116 118 119 120 121 122 123 124 127 128 129 130 132 133 134 136 138 142 143 144 145 147 152 155 156 158 161 162 164 165 167 168 173 174 176 178 179 180 183 184 186 188 189 190 192 193 194 195 196 198 199 201 202 203 204 205 207 210 28800 211 1 1 e 28801 211 1 1 e 28802 211 1 1 e 28803 211 1 1 e 28804 211 1 1 e 28805 211 1 1 e 28806 211 1 1 e 28807 211 1 1 e 28808 211 1 1 e 28809 211 1 1 1 2 3 4 6 9 14 16 17 20 21 22 23 24 25 26 27 29 30 32 37 40 41 42 43 44 46 48 50 52 54 55 57 61 63 64 66 67 71 72 73 76 77 78 80 82 83 88 92 93 94 96 97 98 99 100 101 107 109 111 112 113 116 119 121 122 123 126 127 128 129 130 133 135 137 142 144 147 151 152 153 155 156 158 159 160 162 163 164 167 168 169 170 171 172 173 174 175 176 177 179 183 184 185 186 188 190 193 194 195 196 198 200 202 204 205 206 209 28810 211 1 1 e 28811 211 1 1 5 6 7 18 28 43 44 46 52 54 56 59 65 67 69 70 72 74 76 80 84 87 93 95 100 101 105 109 115 126 129 142 147 148 151 154 155 156 158 163 168 178 181 185 187 189 194 196 197 200 208 209 28812 211 1 1 e 28813 211 1 1 e 28814 211 1 1 e 28815 211 1 1 f 28816 211 1 1 e 28817 211 1 1 1 2 4 5 7 9 10 11 13 14 16 17 18 23 24 26 29 30 31 32 35 38 41 43 44 48 50 56 58 59 62 63 64 65 66 70 71 74 75 77 82 83 84 87 89 90 91 94 98 99 100 102 104 105 108 109 110 111 113 114 116 117 118 120 121 125 126 127 129 130 133 134 135 137 140 141 143 144 145 147 148 151 152 158 159 161 167 169 171 172 174 184 185 186 189 191 193 195 197 198 204 206 208 209 210 28818 211 1 1 e 28819 211 1 1 e 28820 211 1 1 e 28821 211 1 1 e 28822 211 1 1 e 28823 211 1 1 e 28824 211 1 1 e 28825 211 1 1 e 28826 211 1 1 e 28827 211 1 1 1 2 3 6 9 11 12 14 15 16 17 20 21 22 23 27 28 29 30 31 33 34 35 36 38 39 41 43 44 46 47 48 49 50 53 56 58 60 61 62 63 67 68 69 71 72 77 78 81 87 90 91 92 94 95 96 97 100 102 105 107 108 110 111 112 113 115 121 123 124 125 131 133 134 135 136 141 142 143 145 150 152 153 158 160 161 163 164 165 168 171 172 173 176 179 181 182 183 185 189 190 191 193 195 197 198 200 201 202 203 204 206 209 210 28828 211 1 1 e 28829 211 1 1 0 9 11 15 24 29 41 44 46 47 52 54 57 63 70 73 75 76 82 83 88 90 110 115 118 119 125 126 129 132 137 138 139 140 144 157 159 160 166 169 174 176 180 181 187 189 193 195 198 200 201 202 207 210 28830 211 1 1 e 28831 211 1 1 e 28832 211 1 1 e 28833 211 1 1 f 28834 211 1 1 e 28835 211 1 1 1 5 10 11 12 13 16 23 24 25 27 30 32 34 39 42 45 46 50 51 52 53 54 56 57 61 62 65 68 69 73 74 75 76 78 80 81 84 86 87 90 93 94 98 102 103 105 110 111 115 118 119 120 121 123 125 127 132 135 137 141 145 147 152 153 156 157 159 161 163 165 166 167 171 173 176 177 180 181 183 185 189 191 192 193 194 197 199 200 202 205 206 207 208 209 28836 211 1 1 e 28837 211 1 1 e 28838 211 1 1 e 28839 211 1 1 e 28840 211 1 1 e 28841 211 1 1 e 28842 211 1 1 e 28843 211 1 1 e 28844 211 1 1 e 28845 211 1 1 1 4 5 6 7 8 12 15 18 23 24 25 31 32 34 35 37 39 40 42 45 46 48 49 50 51 52 53 54 55 57 58 59 60 61 63 65 70 75 76 78 80 82 84 86 88 89 90 91 93 99 101 102 104 105 106 108 109 112 114 115 118 120 122 124 125 127 128 129 131 133 134 136 137 141 142 143 144 147 149 150 152 156 160 162 165 167 170 172 174 179 180 181 182 183 185 186 187 188 189 191 193 194 197 198 200 203 204 206 207 209 28846 211 1 1 e 28847 211 1 1 1 12 15 17 19 22 27 31 32 34 38 40 41 42 45 50 57 59 68 73 77 80 87 89 91 93 98 104 108 109 114 115 120 126 137 140 148 156 157 161 164 171 178 194 202 203 208 209 210 28848 224 0 0 e 28849 224 0 0 e 28850 224 0 0 e 28851 224 0 0 f 28852 224 0 0 e 28853 224 0 0 0 1 2 6 7 16 18 19 20 22 34 35 38 39 40 46 48 49 51 57 58 59 60 62 65 66 67 69 70 71 72 73 77 78 80 81 83 87 92 101 104 105 106 108 110 115 116 117 119 121 125 127 129 132 133 134 135 140 142 149 151 152 154 158 162 163 164 165 166 169 170 174 175 176 177 178 179 180 182 184 185 186 187 189 192 195 202 204 214 216 221 222 28854 224 0 0 e 28855 224 0 0 e 28856 224 0 0 e 28857 224 0 0 e 28858 224 0 0 e 28859 224 0 0 e 28860 224 0 0 e 28861 224 0 0 e 28862 224 0 0 e 28863 224 0 0 0 1 2 3 4 5 6 8 11 12 14 15 16 18 23 25 27 28 32 34 36 38 40 41 42 45 47 48 49 50 52 53 54 56 58 61 63 64 65 66 68 74 76 77 78 84 89 94 96 99 100 101 102 103 104 106 108 113 115 116 119 120 122 123 124 126 130 131 132 133 136 137 139 140 142 143 144 145 146 148 149 150 152 154 157 158 159 160 164 165 167 173 174 179 180 182 183 186 187 188 192 196 198 201 203 205 206 209 210 211 212 216 218 221 222 223 28864 224 0 0 e 28865 224 0 0 3 5 6 10 17 23 26 27 31 39 46 52 53 54 58 59 61 66 70 71 73 77 85 88 90 94 122 128 131 134 143 150 153 162 177 180 182 183 186 188 191 192 193 196 202 205 209 210 220 221 28866 224 0 0 e 28867 224 0 0 e 28868 224 0 0 e 28869 224 0 0 f 28870 224 0 0 e 28871 224 0 0 0 1 2 6 7 8 10 11 17 18 19 24 25 26 27 28 34 35 36 37 38 39 42 43 44 45 46 47 48 49 50 52 54 55 56 59 60 61 63 66 67 68 70 72 74 75 77 78 80 82 83 84 85 87 89 91 92 93 94 96 97 99 101 106 107 109 111 114 115 118 124 127 129 130 132 134 137 139 141 142 143 146 148 150 151 152 155 156 157 158 161 162 164 169 171 173 175 180 184 187 189 190 191 192 193 194 195 203 205 207 208 209 211 212 215 216 222 28872 224 0 0 e 28873 224 0 0 e 28874 224 0 0 e 28875 224 0 0 e 28876 224 0 0 e 28877 224 0 0 e 28878 224 0 0 e 28879 224 0 0 e 28880 224 0 0 e 28881 224 0 0 1 3 4 5 6 9 11 12 13 16 18 19 20 24 25 26 28 29 30 33 34 35 39 43 44 46 47 51 57 59 61 62 64 65 66 67 68 69 71 72 75 77 80 88 91 92 93 94 102 103 104 107 108 111 114 115 117 118 119 120 121 124 125 126 127 128 129 130 131 132 133 134 136 137 142 146 148 149 150 153 154 155 158 159 160 162 164 166 168 169 170 171 172 175 176 177 178 182 183 184 187 189 191 193 194 195 196 199 200 201 204 206 210 214 215 220 221 222 223 28882 224 0 0 e 28883 224 0 0 4 5 6 9 19 22 23 26 31 36 39 40 43 46 63 67 72 73 75 78 79 80 85 86 92 94 96 103 111 112 113 118 121 141 145 146 152 153 164 170 172 174 176 179 180 186 194 195 197 199 200 205 209 212 214 215 219 28884 224 0 0 e 28885 224 0 0 e 28886 224 0 0 e 28887 224 0 0 f 28888 224 0 0 e 28889 224 0 0 3 11 14 15 18 20 21 28 29 33 35 37 39 41 48 50 51 52 53 54 61 62 63 64 66 67 68 70 74 76 77 78 81 84 89 90 91 92 93 95 96 98 99 103 104 105 108 110 112 115 117 118 119 120 121 122 123 126 131 132 133 134 135 136 137 139 142 146 147 149 150 152 153 156 158 160 163 164 167 169 172 174 176 177 180 182 186 188 190 192 195 197 199 201 205 206 208 210 212 213 214 217 222 223 28890 224 0 0 e 28891 224 0 0 e 28892 224 0 0 e 28893 224 0 0 e 28894 224 0 0 e 28895 224 0 0 e 28896 224 0 0 e 28897 224 0 0 e 28898 224 0 0 e 28899 224 0 0 0 1 3 4 7 10 14 15 16 17 18 19 20 21 22 24 25 26 29 31 38 39 42 43 44 45 50 51 52 54 57 61 62 63 64 65 66 70 72 74 76 79 81 82 83 86 88 89 93 94 101 102 103 104 106 107 109 112 113 114 115 118 119 121 122 130 131 132 135 139 140 142 145 146 148 150 151 152 153 155 156 160 161 162 164 165 166 167 168 169 171 174 176 177 180 181 183 191 192 193 197 200 202 203 206 207 208 209 211 215 218 220 221 28900 224 0 0 e 28901 224 0 0 2 4 8 17 28 34 45 46 47 48 49 50 59 61 66 69 70 71 72 73 75 76 83 93 96 98 101 106 110 111 117 118 119 123 124 129 131 140 142 144 150 151 154 160 163 164 168 171 172 175 178 179 185 187 191 193 195 196 199 200 206 207 208 211 213 221 223 28902 224 0 0 e 28903 224 0 0 e 28904 224 0 0 e 28905 224 0 0 f 28906 224 0 0 e 28907 224 0 0 0 1 2 3 5 11 13 14 17 19 20 21 23 25 27 28 30 31 37 38 39 41 42 43 44 45 48 49 51 54 55 57 58 59 61 62 63 67 69 70 72 73 75 76 79 81 82 83 86 89 91 94 95 97 99 100 103 104 106 107 108 114 116 117 118 123 124 125 126 128 130 131 134 136 137 139 141 142 143 144 145 147 148 150 152 157 158 161 163 164 167 171 177 178 180 181 183 185 188 189 190 191 192 193 194 195 197 201 203 205 206 207 209 212 213 218 28908 224 0 0 e 28909 224 0 0 e 28910 224 0 0 e 28911 224 0 0 e 28912 224 0 0 e 28913 224 0 0 e 28914 224 0 0 e 28915 224 0 0 e 28916 224 0 0 e 28917 224 0 0 0 1 2 5 9 11 13 15 21 23 28 32 33 37 42 44 52 59 62 68 70 71 79 82 85 90 98 99 102 103 105 106 107 108 109 111 112 113 114 115 116 117 118 119 120 122 127 129 131 132 133 137 138 139 141 142 143 147 149 151 152 154 155 160 161 162 163 165 166 167 172 173 174 175 177 178 181 182 183 184 185 186 187 188 189 193 194 195 196 199 203 205 206 208 211 212 213 214 215 219 220 28918 224 0 0 e 28919 224 0 0 3 11 21 22 23 24 29 30 34 45 46 50 52 53 55 56 59 61 69 78 82 87 97 101 102 103 104 106 107 109 113 114 119 131 135 138 139 141 143 144 152 154 155 161 169 171 173 177 200 204 205 206 217 219 28920 224 0 1 e 28921 224 0 1 e 28922 224 0 1 e 28923 224 0 1 f 28924 224 0 1 e 28925 224 0 1 0 3 4 7 9 11 13 14 15 17 18 19 22 23 25 26 27 28 29 30 37 38 39 40 42 45 48 51 52 54 55 56 58 59 63 64 65 68 70 73 74 75 77 81 83 84 85 86 87 89 90 91 93 94 95 96 102 103 104 105 106 108 109 110 111 112 113 114 115 116 117 118 120 123 126 128 130 133 137 138 140 141 143 144 147 151 152 153 154 157 159 163 164 170 172 173 175 177 180 181 183 186 187 190 191 192 193 195 197 199 200 201 203 204 205 206 210 212 216 220 221 222 28926 224 0 1 e 28927 224 0 1 e 28928 224 0 1 e 28929 224 0 1 e 28930 224 0 1 e 28931 224 0 1 e 28932 224 0 1 e 28933 224 0 1 e 28934 224 0 1 e 28935 224 0 1 0 1 3 4 5 7 13 14 15 22 23 24 26 27 28 30 31 35 36 39 40 42 43 46 49 52 53 56 57 61 62 64 66 69 70 71 72 73 74 75 76 78 80 81 83 86 87 89 92 93 96 97 98 102 103 104 106 107 110 113 114 123 124 126 127 128 130 131 132 136 137 138 139 142 148 151 157 158 159 163 166 167 169 170 172 175 176 178 180 181 182 183 184 185 186 187 194 195 196 197 199 201 202 203 205 206 207 208 210 215 216 217 218 219 221 28936 224 0 1 e 28937 224 0 1 1 3 8 9 15 17 19 20 24 27 28 31 33 40 44 47 53 64 72 76 78 83 87 88 94 95 97 99 109 116 118 122 125 127 136 137 139 145 151 153 157 159 162 164 169 172 179 180 182 188 190 193 197 203 204 205 214 215 218 221 223 28938 224 0 1 e 28939 224 0 1 e 28940 224 0 1 e 28941 224 0 1 f 28942 224 0 1 e 28943 224 0 1 0 1 2 4 7 8 9 11 12 16 17 18 20 24 33 34 35 38 42 46 48 50 51 52 55 56 60 61 62 64 65 69 74 75 76 79 80 82 83 84 85 86 87 94 95 97 100 101 102 105 106 107 110 118 119 120 123 126 127 132 136 140 141 145 147 148 150 151 152 154 156 157 158 159 160 163 165 170 171 175 176 177 178 179 181 182 183 195 200 205 211 214 215 216 217 219 223 28944 224 0 1 e 28945 224 0 1 e 28946 224 0 1 e 28947 224 0 1 e 28948 224 0 1 e 28949 224 0 1 e 28950 224 0 1 e 28951 224 0 1 e 28952 224 0 1 e 28953 224 0 1 0 2 3 4 9 10 13 14 15 18 23 24 27 28 29 30 35 38 40 42 43 49 52 54 55 56 57 60 61 62 63 65 68 70 71 77 81 84 85 86 89 90 91 96 97 98 100 102 103 108 111 112 114 115 116 118 119 120 122 125 127 129 131 132 133 134 135 136 137 138 140 141 143 144 145 149 151 153 154 159 160 163 164 165 167 170 172 173 174 175 176 177 178 179 181 186 187 189 191 192 197 198 200 201 205 206 207 209 211 213 214 215 216 219 220 28954 224 0 1 e 28955 224 0 1 1 6 7 9 10 12 13 15 20 22 25 26 28 29 37 38 39 41 42 46 48 56 57 59 61 63 66 68 77 83 85 90 96 97 112 114 118 119 120 129 133 134 136 139 142 143 147 154 155 158 159 161 179 184 187 203 207 28956 224 0 1 e 28957 224 0 1 e 28958 224 0 1 e 28959 224 0 1 f 28960 224 0 1 e 28961 224 0 1 1 3 5 8 9 12 19 20 21 23 26 27 28 30 38 42 46 47 48 50 51 54 56 57 60 62 65 66 67 69 70 71 72 73 76 79 80 84 86 88 90 91 93 95 96 97 98 100 101 103 105 109 113 115 116 119 122 123 126 127 129 131 134 135 137 140 141 142 143 146 151 152 154 156 157 159 160 162 164 165 168 169 170 175 176 180 181 183 191 192 195 196 199 201 203 205 206 213 215 216 218 220 223 28962 224 0 1 e 28963 224 0 1 e 28964 224 0 1 e 28965 224 0 1 e 28966 224 0 1 e 28967 224 0 1 e 28968 224 0 1 e 28969 224 0 1 e 28970 224 0 1 e 28971 224 0 1 2 3 5 6 7 8 10 11 14 15 17 18 19 23 24 29 32 33 34 38 39 40 42 43 48 49 51 52 56 58 59 60 61 62 63 66 70 71 78 79 81 83 84 88 89 90 94 99 101 105 106 108 111 112 114 116 117 118 124 127 131 132 133 134 135 139 142 143 147 148 149 150 151 152 154 157 160 162 164 165 167 168 170 174 177 179 181 184 185 187 191 192 193 194 197 200 201 203 204 205 207 208 211 212 214 215 216 219 223 28972 224 0 1 e 28973 224 0 1 4 15 25 29 31 35 40 42 43 48 58 61 64 67 76 80 94 95 99 102 104 112 118 119 128 135 137 138 141 142 144 145 147 149 151 152 157 159 162 165 168 169 172 173 176 183 184 188 196 197 200 204 210 212 216 28974 224 0 1 e 28975 224 0 1 e 28976 224 0 1 e 28977 224 0 1 f 28978 224 0 1 e 28979 224 0 1 0 1 2 3 8 10 11 12 13 15 17 20 22 23 24 26 27 28 29 32 33 37 40 42 43 46 49 50 51 53 54 56 59 61 64 67 69 75 77 79 80 81 82 84 86 87 88 93 94 95 98 102 103 105 107 108 109 110 111 112 116 119 120 121 127 131 133 135 136 137 138 139 140 141 142 146 148 151 152 153 156 160 165 168 172 174 176 177 179 181 182 186 188 189 190 194 195 196 197 199 201 209 212 214 216 218 221 222 223 28980 224 0 1 e 28981 224 0 1 e 28982 224 0 1 e 28983 224 0 1 e 28984 224 0 1 e 28985 224 0 1 e 28986 224 0 1 e 28987 224 0 1 e 28988 224 0 1 e 28989 224 0 1 0 2 3 4 15 16 17 18 23 24 25 27 29 32 34 35 37 38 47 48 49 50 54 55 56 57 58 60 61 64 65 66 67 69 72 74 75 76 77 81 84 85 87 88 89 90 93 98 100 101 102 106 107 108 109 110 111 116 118 120 123 124 125 126 127 128 129 130 137 138 139 141 142 144 145 148 149 150 152 153 154 157 158 159 161 162 164 165 166 170 172 174 176 177 178 180 184 186 188 190 191 192 193 194 195 198 199 200 202 204 206 210 211 213 214 215 216 218 220 221 222 28990 224 0 1 e 28991 224 0 1 4 12 15 17 20 22 38 39 40 42 55 57 59 65 70 75 77 78 85 86 87 89 93 101 105 109 112 113 119 122 132 134 137 138 140 144 148 157 160 163 166 170 174 177 180 184 188 189 191 197 201 212 28992 224 1 0 e 28993 224 1 0 e 28994 224 1 0 e 28995 224 1 0 f 28996 224 1 0 e 28997 224 1 0 0 3 4 6 7 10 11 12 13 14 18 19 20 21 26 31 33 34 37 39 41 44 46 48 49 52 53 54 55 56 60 65 66 68 69 71 72 73 75 77 79 80 88 89 93 94 96 98 104 105 108 109 113 114 116 118 119 124 125 126 127 129 131 133 137 140 141 142 143 145 154 157 159 160 162 167 169 170 172 173 177 178 179 180 181 186 187 190 192 193 195 197 198 199 200 201 203 206 207 209 210 212 213 214 217 220 222 223 28998 224 1 0 e 28999 224 1 0 e 29000 224 1 0 e 29001 224 1 0 e 29002 224 1 0 e 29003 224 1 0 e 29004 224 1 0 e 29005 224 1 0 e 29006 224 1 0 e 29007 224 1 0 1 3 5 10 11 13 14 16 17 20 21 22 23 29 31 32 35 38 42 44 49 50 51 55 56 57 58 59 61 63 64 67 73 74 77 81 82 83 87 88 89 91 93 94 95 96 97 98 100 101 105 108 111 118 119 120 121 123 125 126 128 132 135 139 140 143 145 146 148 150 151 152 156 157 160 162 165 170 171 175 176 177 178 180 181 182 184 188 190 191 194 195 196 197 198 199 200 201 204 206 208 212 214 217 218 219 29008 224 1 0 e 29009 224 1 0 2 3 4 9 10 14 15 21 25 28 29 31 32 34 35 36 39 40 41 43 44 45 46 56 59 75 77 82 85 87 97 102 105 106 107 108 111 118 120 123 124 130 137 138 139 140 141 148 153 157 162 163 165 166 171 177 180 190 194 201 203 208 210 214 29010 224 1 0 e 29011 224 1 0 e 29012 224 1 0 e 29013 224 1 0 f 29014 224 1 0 e 29015 224 1 0 0 2 4 6 7 8 10 15 17 22 26 27 41 42 43 46 50 53 54 55 56 58 60 62 67 69 71 72 74 75 76 79 80 88 89 90 94 95 96 98 100 103 104 105 106 112 113 115 117 119 120 121 123 126 132 133 136 137 138 143 145 146 147 148 150 155 158 159 160 165 166 167 168 169 171 173 174 175 176 177 178 182 184 188 192 193 194 195 197 198 200 204 207 212 214 216 218 221 222 29016 224 1 0 e 29017 224 1 0 e 29018 224 1 0 e 29019 224 1 0 e 29020 224 1 0 e 29021 224 1 0 e 29022 224 1 0 e 29023 224 1 0 e 29024 224 1 0 e 29025 224 1 0 0 1 2 4 7 8 12 15 16 20 26 27 28 29 30 33 34 35 36 37 39 40 42 44 45 46 48 51 54 58 64 65 67 68 72 73 74 79 89 93 94 95 97 99 100 104 105 107 108 110 113 116 117 118 121 125 127 132 136 137 139 140 141 142 145 149 151 152 154 155 157 161 163 164 165 166 167 169 171 173 174 175 178 179 180 181 184 185 187 188 191 192 195 196 197 199 200 202 203 204 207 209 218 219 220 221 29026 224 1 0 e 29027 224 1 0 3 5 8 15 18 23 27 30 31 34 48 57 59 64 71 76 78 87 89 91 93 95 101 104 105 111 117 119 124 146 147 148 151 153 158 161 163 166 169 170 177 178 179 181 185 192 193 194 195 202 204 212 213 29028 224 1 0 e 29029 224 1 0 e 29030 224 1 0 e 29031 224 1 0 f 29032 224 1 0 e 29033 224 1 0 3 4 5 9 13 15 16 17 19 20 24 25 29 30 31 32 33 34 35 36 39 41 43 45 49 53 54 56 57 58 60 63 66 68 71 72 74 78 79 80 82 85 88 90 92 96 97 99 101 102 106 108 109 111 114 115 116 119 120 124 126 127 131 132 134 136 137 138 141 143 148 149 150 152 154 155 156 157 160 161 162 163 165 167 168 169 172 173 174 176 179 184 186 188 190 191 193 194 195 196 198 202 204 205 207 209 210 213 214 217 218 223 29034 224 1 0 e 29035 224 1 0 e 29036 224 1 0 e 29037 224 1 0 e 29038 224 1 0 e 29039 224 1 0 e 29040 224 1 0 e 29041 224 1 0 e 29042 224 1 0 e 29043 224 1 0 0 4 9 10 11 14 17 19 21 23 27 31 34 36 37 39 41 42 43 46 48 50 52 53 54 56 57 58 59 60 61 65 67 68 71 73 79 81 82 83 85 86 87 90 93 96 98 101 102 104 107 112 114 115 116 117 118 119 120 122 123 124 125 126 128 135 137 140 143 145 147 149 150 152 154 155 157 158 159 160 162 163 168 172 174 175 176 178 180 183 185 189 192 193 194 195 196 198 201 202 203 204 206 207 210 213 214 217 218 219 221 222 29044 224 1 0 e 29045 224 1 0 5 13 14 21 23 29 36 37 38 44 45 54 55 56 59 61 69 70 72 73 75 80 84 86 88 98 111 113 114 119 132 138 139 141 143 144 145 147 148 150 159 165 167 169 174 176 190 195 196 206 208 209 215 219 29046 224 1 0 e 29047 224 1 0 e 29048 224 1 0 e 29049 224 1 0 f 29050 224 1 0 e 29051 224 1 0 1 4 5 7 8 9 11 18 25 28 29 30 33 36 37 40 41 45 46 48 50 52 54 55 56 59 60 61 64 65 66 67 68 71 73 75 77 82 88 91 93 100 102 106 107 111 113 114 115 120 121 122 124 126 129 135 136 139 140 141 142 144 145 148 149 151 152 154 156 157 158 160 164 165 166 175 176 177 179 181 182 185 186 187 192 193 196 198 200 204 205 207 208 210 219 220 221 222 29052 224 1 0 e 29053 224 1 0 e 29054 224 1 0 e 29055 224 1 0 e 29056 224 1 0 e 29057 224 1 0 e 29058 224 1 0 e 29059 224 1 0 e 29060 224 1 0 e 29061 224 1 0 0 1 2 3 5 6 9 14 15 19 21 24 26 27 28 29 30 34 36 38 39 41 42 44 45 47 48 50 51 53 54 55 56 58 60 65 67 69 72 76 80 81 82 83 85 87 88 89 91 92 94 95 97 100 101 104 108 112 113 114 115 117 118 120 121 122 124 127 128 130 132 133 137 139 140 142 143 148 149 153 154 156 157 158 159 160 161 162 163 166 168 170 174 178 180 181 184 185 189 190 193 194 195 196 198 201 203 204 206 211 214 215 217 218 220 221 223 29062 224 1 0 e 29063 224 1 0 1 8 9 10 13 15 16 18 23 26 28 31 32 37 46 48 54 68 71 73 74 79 84 85 86 87 89 91 99 103 104 108 111 112 124 137 138 142 148 152 163 165 170 171 172 174 181 186 191 192 197 202 203 205 206 208 220 222 29064 224 1 1 e 29065 224 1 1 e 29066 224 1 1 e 29067 224 1 1 f 29068 224 1 1 e 29069 224 1 1 3 4 5 6 7 8 11 14 16 17 21 23 25 26 29 30 32 35 36 37 38 39 42 43 44 45 46 47 48 53 55 59 60 61 63 66 69 71 72 74 75 77 79 81 83 86 87 88 89 90 91 92 93 94 97 99 101 102 104 105 109 111 115 116 118 119 121 124 128 129 132 134 135 136 138 140 144 145 147 148 153 155 157 160 162 163 164 165 167 168 171 172 177 181 183 184 185 186 187 188 189 191 193 194 196 198 199 200 202 204 206 207 211 212 213 215 216 218 219 221 222 223 29070 224 1 1 e 29071 224 1 1 e 29072 224 1 1 e 29073 224 1 1 e 29074 224 1 1 e 29075 224 1 1 e 29076 224 1 1 e 29077 224 1 1 e 29078 224 1 1 e 29079 224 1 1 2 4 11 12 13 14 15 17 19 20 21 23 24 27 29 30 32 35 36 38 39 43 44 45 47 48 49 55 59 62 63 67 71 75 77 79 82 85 86 87 93 94 96 102 104 105 106 107 109 112 113 115 116 119 122 127 130 132 137 138 141 142 143 145 146 147 148 149 151 153 154 158 161 162 163 164 165 166 167 168 171 172 173 174 178 180 182 183 184 185 186 187 188 189 191 193 194 195 198 199 200 201 202 211 214 215 216 218 220 221 222 223 29080 224 1 1 e 29081 224 1 1 2 4 8 9 11 14 15 19 26 27 37 39 48 56 57 58 65 66 73 74 75 77 81 94 98 99 100 105 106 107 115 125 128 129 143 148 151 152 154 157 160 166 167 173 187 190 195 203 208 215 223 29082 224 1 1 e 29083 224 1 1 e 29084 224 1 1 e 29085 224 1 1 f 29086 224 1 1 e 29087 224 1 1 0 1 2 3 4 5 6 10 12 13 16 18 20 21 22 23 24 26 27 28 29 30 32 35 38 40 41 42 44 46 47 48 49 51 52 55 56 58 62 63 64 66 68 69 70 71 72 73 75 76 78 79 81 85 86 87 89 96 99 100 102 103 104 105 107 110 114 117 121 122 123 126 128 131 132 135 137 138 142 144 145 146 147 151 154 155 156 157 159 161 163 165 166 168 170 172 173 174 175 176 177 178 183 184 185 186 187 188 191 193 194 196 197 198 199 201 204 205 206 207 208 209 210 211 212 214 215 219 220 221 222 223 29088 224 1 1 e 29089 224 1 1 e 29090 224 1 1 e 29091 224 1 1 e 29092 224 1 1 e 29093 224 1 1 e 29094 224 1 1 e 29095 224 1 1 e 29096 224 1 1 e 29097 224 1 1 0 4 5 6 7 10 11 12 16 17 19 20 21 22 23 25 27 28 30 33 34 35 39 41 43 44 45 46 47 51 52 53 54 55 57 59 60 61 63 65 67 68 69 71 76 77 78 80 81 82 83 87 89 91 94 95 96 97 102 103 105 106 108 112 113 114 115 120 121 122 123 124 127 130 133 134 135 138 139 141 143 145 146 148 149 158 160 162 163 164 168 169 170 171 173 174 175 176 178 180 182 185 188 189 190 192 195 198 199 202 206 207 209 210 211 212 214 215 216 217 218 219 222 29098 224 1 1 e 29099 224 1 1 2 3 9 12 15 17 20 22 28 29 31 32 36 37 41 48 52 54 59 60 64 70 72 75 78 82 83 84 87 91 94 95 103 104 105 110 114 115 118 120 121 123 126 129 133 141 144 148 149 158 163 164 165 166 167 172 178 179 182 184 186 189 190 192 198 204 209 214 220 222 29100 224 1 1 e 29101 224 1 1 e 29102 224 1 1 e 29103 224 1 1 f 29104 224 1 1 e 29105 224 1 1 0 2 3 5 6 7 12 17 18 20 21 24 25 26 27 29 30 32 33 34 36 37 39 41 43 45 49 50 52 59 60 61 63 64 68 73 78 79 81 85 86 87 88 89 90 91 92 94 95 100 101 102 103 105 107 110 111 115 116 117 118 119 120 121 122 123 125 126 127 129 131 132 133 134 136 140 145 148 151 154 155 159 161 162 164 165 167 169 172 173 174 178 180 182 184 185 186 191 193 194 195 196 198 199 201 204 205 206 209 211 218 220 221 223 29106 224 1 1 e 29107 224 1 1 e 29108 224 1 1 e 29109 224 1 1 e 29110 224 1 1 e 29111 224 1 1 e 29112 224 1 1 e 29113 224 1 1 e 29114 224 1 1 e 29115 224 1 1 0 1 2 6 9 10 11 12 15 19 20 27 31 32 33 34 36 37 39 41 42 43 45 46 48 49 50 53 54 56 57 58 59 60 61 62 63 66 68 69 70 71 72 74 75 78 79 80 83 84 85 89 91 92 93 95 96 97 98 99 100 101 104 105 106 107 108 110 111 113 115 118 121 122 123 128 130 132 133 136 137 140 141 142 143 152 153 154 156 159 161 162 163 166 167 168 169 171 173 176 177 180 187 192 194 198 199 201 204 205 206 209 211 213 214 216 218 219 222 29116 224 1 1 e 29117 224 1 1 10 16 17 21 22 24 25 29 32 34 36 41 45 53 54 57 59 65 72 78 81 82 83 87 88 95 101 106 108 112 114 119 130 135 136 141 152 160 164 182 189 195 204 209 213 220 29118 224 1 1 e 29119 224 1 1 e 29120 224 1 1 e 29121 224 1 1 f 29122 224 1 1 e 29123 224 1 1 0 1 2 4 5 7 10 11 12 13 16 17 20 21 22 23 28 29 31 32 33 34 35 36 40 45 46 47 56 57 58 60 61 64 67 68 69 72 74 77 79 82 84 86 88 89 90 91 92 95 98 101 102 105 107 108 109 111 115 116 119 123 124 125 126 134 135 136 138 139 140 142 144 148 149 151 153 154 155 157 159 161 163 164 165 166 167 170 172 176 177 178 183 184 186 189 192 195 197 198 199 202 204 206 207 209 211 212 213 215 221 222 223 29124 224 1 1 e 29125 224 1 1 e 29126 224 1 1 e 29127 224 1 1 e 29128 224 1 1 e 29129 224 1 1 e 29130 224 1 1 e 29131 224 1 1 e 29132 224 1 1 e 29133 224 1 1 0 3 4 6 8 9 12 13 15 16 18 19 23 24 26 27 28 29 32 34 36 37 43 46 47 50 53 54 55 57 58 59 61 62 64 65 69 72 74 75 78 80 82 83 84 86 87 88 92 96 98 99 100 101 102 103 108 109 110 112 114 115 121 123 124 129 130 134 137 138 139 140 142 145 146 148 152 154 157 159 161 162 163 164 166 167 168 170 174 176 178 179 181 182 183 186 189 190 194 195 197 198 200 205 209 210 212 215 217 218 220 221 222 223 29134 224 1 1 e 29135 224 1 1 0 2 7 13 17 20 22 33 36 41 43 46 56 60 63 84 89 91 94 107 113 114 115 116 119 121 126 127 131 136 141 145 147 151 157 160 167 169 174 181 204 206 209 214 223 29136 247 0 0 e 29137 247 0 0 e 29138 247 0 0 e 29139 247 0 0 f 29140 247 0 0 e 29141 247 0 0 0 1 7 8 11 13 15 16 19 21 25 28 30 34 35 36 38 40 41 44 46 47 48 50 53 56 57 58 60 61 62 64 65 66 67 68 69 71 72 74 75 76 77 78 79 85 86 89 90 93 94 97 104 106 107 109 110 114 115 116 117 118 120 121 122 125 126 127 129 131 133 136 140 142 144 145 146 147 148 149 152 154 156 161 163 165 168 169 170 171 178 179 183 188 190 195 197 200 201 207 208 210 211 212 214 218 220 221 223 225 226 229 230 232 233 237 241 29142 247 0 0 e 29143 247 0 0 e 29144 247 0 0 e 29145 247 0 0 e 29146 247 0 0 e 29147 247 0 0 e 29148 247 0 0 e 29149 247 0 0 e 29150 247 0 0 e 29151 247 0 0 0 1 2 3 4 5 6 7 8 9 10 12 15 18 22 25 26 31 32 33 34 38 40 44 47 49 51 52 53 54 55 57 58 60 64 65 68 69 74 75 77 82 84 85 86 87 89 91 92 94 96 97 105 106 110 111 114 116 118 119 120 121 124 125 126 129 131 133 134 137 138 139 140 143 145 146 148 149 150 151 154 156 161 162 168 169 170 172 173 177 181 182 183 184 186 187 188 189 190 191 194 197 198 200 213 214 215 219 221 224 225 226 231 236 238 239 240 241 242 243 244 245 29152 247 0 0 e 29153 247 0 0 2 12 16 20 21 22 28 29 33 36 40 42 47 50 51 55 60 69 76 79 81 86 87 94 104 112 113 117 119 121 128 132 136 138 148 150 151 152 158 164 165 168 171 181 185 186 188 189 191 194 195 196 200 204 207 208 227 228 237 29154 247 0 0 e 29155 247 0 0 e 29156 247 0 0 e 29157 247 0 0 f 29158 247 0 0 e 29159 247 0 0 0 3 5 10 13 14 15 16 17 22 24 26 27 28 29 30 33 36 37 38 41 44 49 50 54 56 57 59 60 65 66 67 71 73 75 76 77 80 82 84 85 86 87 88 91 93 94 95 97 98 99 101 102 104 105 107 108 109 110 113 114 115 118 120 122 124 125 126 128 129 131 132 137 139 140 144 148 149 150 153 154 156 157 158 165 166 167 168 169 170 171 178 182 183 186 187 189 191 192 193 194 196 197 199 200 201 202 203 207 208 209 210 213 214 215 217 218 220 223 228 231 234 235 237 240 29160 247 0 0 e 29161 247 0 0 e 29162 247 0 0 e 29163 247 0 0 e 29164 247 0 0 e 29165 247 0 0 e 29166 247 0 0 e 29167 247 0 0 e 29168 247 0 0 e 29169 247 0 0 2 5 11 12 14 19 23 26 27 34 36 37 38 39 41 43 46 49 50 51 52 53 55 57 60 61 62 64 68 69 70 71 72 75 77 78 82 83 85 86 89 93 95 96 98 99 101 103 104 105 107 109 110 111 112 113 115 117 118 119 120 122 123 124 125 126 127 128 131 132 136 138 140 141 142 143 145 148 150 154 155 156 159 160 164 165 166 168 171 172 173 175 176 181 185 187 191 192 193 194 199 200 201 207 208 210 211 212 213 215 216 218 219 221 223 225 226 231 232 234 235 236 237 238 240 242 243 245 29170 247 0 0 e 29171 247 0 0 0 5 9 12 13 24 25 26 36 40 43 46 47 48 57 62 65 67 69 75 77 81 87 88 95 100 104 111 112 116 120 130 131 142 144 146 148 158 162 164 168 170 174 180 182 183 184 188 189 195 196 202 203 216 218 223 224 230 231 232 235 240 242 244 245 29172 247 0 0 e 29173 247 0 0 e 29174 247 0 0 e 29175 247 0 0 f 29176 247 0 0 e 29177 247 0 0 0 1 11 12 13 14 16 18 20 25 26 28 29 30 31 35 36 37 39 41 42 43 44 47 48 51 52 53 54 56 57 58 59 60 61 64 65 67 69 70 71 72 74 75 76 79 80 81 82 83 85 86 88 89 90 94 97 99 100 101 109 114 115 116 117 119 120 124 125 126 127 128 129 130 131 132 138 139 143 144 146 147 149 151 153 155 156 157 158 159 160 161 163 164 165 172 173 175 176 177 180 181 184 192 193 195 197 199 201 204 207 209 210 212 214 216 217 218 222 224 229 231 232 236 242 243 245 29178 247 0 0 e 29179 247 0 0 e 29180 247 0 0 e 29181 247 0 0 e 29182 247 0 0 e 29183 247 0 0 e 29184 247 0 0 e 29185 247 0 0 e 29186 247 0 0 e 29187 247 0 0 2 3 4 5 7 9 14 15 17 20 23 24 25 26 27 29 31 32 33 36 37 38 39 42 43 47 50 51 52 53 54 59 60 64 66 68 70 73 74 75 76 77 79 80 81 82 86 89 90 91 92 93 94 98 99 100 102 103 104 107 108 111 112 113 114 115 116 119 120 121 124 126 127 131 134 137 138 141 142 143 144 146 148 149 154 155 159 161 164 165 167 168 169 170 171 172 176 177 183 184 185 187 188 189 191 193 195 199 203 205 206 207 209 210 211 215 216 219 220 221 223 228 229 231 232 235 236 237 238 242 245 246 29188 247 0 0 e 29189 247 0 0 1 3 5 6 8 10 14 21 22 23 29 32 34 37 39 41 50 52 54 59 64 69 76 81 85 92 106 109 112 116 118 121 126 128 129 132 136 144 146 150 157 159 160 162 175 183 185 186 187 199 202 203 212 214 218 220 230 231 241 245 29190 247 0 0 e 29191 247 0 0 e 29192 247 0 0 e 29193 247 0 0 f 29194 247 0 0 e 29195 247 0 0 5 7 9 14 16 17 19 20 22 23 24 25 26 27 28 29 34 35 37 38 39 40 44 48 49 51 52 54 55 57 58 61 62 63 67 70 74 78 80 83 84 85 86 87 88 93 94 95 98 99 100 101 107 120 127 128 130 131 134 136 140 142 144 149 150 155 156 157 158 159 160 161 166 167 168 169 171 173 174 178 179 181 182 184 187 189 192 193 195 198 203 208 211 212 215 216 217 218 219 220 225 227 228 232 234 235 236 241 244 245 29196 247 0 0 e 29197 247 0 0 e 29198 247 0 0 e 29199 247 0 0 e 29200 247 0 0 e 29201 247 0 0 e 29202 247 0 0 e 29203 247 0 0 e 29204 247 0 0 e 29205 247 0 0 1 3 7 8 9 12 13 19 21 24 25 28 31 34 36 37 38 40 41 50 52 53 54 55 57 58 59 61 62 64 68 69 74 76 77 79 81 83 85 89 93 96 100 101 102 103 104 106 108 109 111 114 116 117 118 119 120 121 123 126 127 128 130 132 137 138 140 141 142 143 144 149 150 151 153 158 159 162 163 164 165 166 167 168 170 172 173 174 176 177 179 184 185 187 188 189 191 195 196 197 203 204 208 216 217 218 222 225 226 227 228 231 235 238 240 241 243 246 29206 247 0 0 e 29207 247 0 0 1 2 8 9 18 23 24 26 31 37 42 46 50 53 55 56 57 62 63 67 80 82 83 85 89 94 96 98 106 112 114 128 131 141 143 146 147 148 153 158 160 168 171 172 173 174 178 182 185 186 187 190 191 192 193 197 200 201 204 208 225 233 234 239 241 242 29208 247 0 1 e 29209 247 0 1 e 29210 247 0 1 e 29211 247 0 1 f 29212 247 0 1 e 29213 247 0 1 0 1 2 6 7 10 12 16 18 19 21 22 23 24 25 26 29 30 32 33 38 39 40 41 42 43 46 48 49 50 51 52 53 54 55 56 57 62 74 75 76 77 80 83 86 90 91 94 95 96 100 104 109 110 112 116 120 122 124 125 126 130 132 134 136 138 141 142 148 149 150 153 154 155 156 157 160 162 163 165 174 175 181 182 184 189 190 194 195 198 202 203 204 205 208 209 212 214 216 218 219 221 230 231 232 233 234 236 238 239 240 242 243 245 29214 247 0 1 e 29215 247 0 1 e 29216 247 0 1 e 29217 247 0 1 e 29218 247 0 1 e 29219 247 0 1 e 29220 247 0 1 e 29221 247 0 1 e 29222 247 0 1 e 29223 247 0 1 0 4 7 8 9 11 17 18 19 21 22 27 30 31 33 34 35 39 40 41 42 43 44 45 46 50 56 58 59 62 70 71 72 75 76 78 84 85 88 90 96 99 100 102 105 106 108 112 116 117 119 120 121 122 123 125 127 131 133 134 135 136 137 138 140 141 144 145 147 151 153 158 160 161 162 163 164 165 169 171 173 178 180 181 182 183 185 186 190 191 192 196 197 199 201 202 203 205 206 208 212 213 214 215 218 222 224 228 229 231 233 237 239 240 244 245 246 29224 247 0 1 e 29225 247 0 1 0 6 9 10 11 14 23 26 28 30 35 41 47 57 69 75 80 83 85 87 88 89 90 91 98 99 100 101 104 108 112 117 121 125 127 128 134 136 140 141 146 149 151 155 163 164 171 176 177 180 191 192 193 205 209 214 222 223 226 231 237 246 29226 247 0 1 e 29227 247 0 1 e 29228 247 0 1 e 29229 247 0 1 f 29230 247 0 1 e 29231 247 0 1 0 1 4 7 8 9 13 17 18 20 23 24 27 28 29 30 31 32 41 42 43 47 48 51 52 54 55 56 59 62 65 66 67 69 71 72 73 74 78 80 84 88 89 92 93 96 101 103 104 107 108 111 116 118 121 122 124 126 127 131 132 133 134 135 137 138 141 143 146 148 149 150 152 155 156 158 162 165 167 168 169 171 172 174 176 177 178 179 184 185 186 187 188 189 190 192 193 194 196 198 204 206 207 208 210 212 213 214 215 216 217 218 219 221 224 226 229 230 231 232 234 235 236 237 239 245 29232 247 0 1 e 29233 247 0 1 e 29234 247 0 1 e 29235 247 0 1 e 29236 247 0 1 e 29237 247 0 1 e 29238 247 0 1 e 29239 247 0 1 e 29240 247 0 1 e 29241 247 0 1 2 3 6 10 11 12 15 18 20 23 25 26 28 29 30 31 34 38 43 44 47 48 49 50 52 53 54 55 59 60 61 63 64 65 68 69 71 72 76 78 83 84 85 86 87 88 89 93 95 98 100 102 106 107 110 112 113 117 119 124 126 129 131 132 133 134 135 136 138 140 148 151 152 154 157 162 163 167 168 169 170 180 182 185 189 192 193 194 195 197 198 199 200 202 203 205 206 207 208 209 210 216 217 218 219 221 222 223 224 226 227 231 233 235 237 239 241 244 246 29242 247 0 1 e 29243 247 0 1 0 5 14 24 27 31 34 45 49 61 69 72 76 79 81 84 88 94 97 107 109 110 116 123 125 127 134 138 144 146 147 149 158 165 167 168 170 171 176 179 189 196 203 209 215 216 224 225 228 230 233 237 238 239 241 29244 247 0 1 e 29245 247 0 1 e 29246 247 0 1 e 29247 247 0 1 f 29248 247 0 1 e 29249 247 0 1 1 2 3 11 14 18 19 20 22 23 24 25 27 30 32 33 38 40 43 47 48 50 52 53 55 57 58 59 60 63 68 70 71 74 75 76 78 81 82 84 86 88 89 90 91 94 96 98 99 100 101 110 111 113 115 116 119 120 122 125 126 129 130 132 136 137 140 144 147 148 150 151 152 153 154 156 157 162 164 167 168 169 170 171 176 180 183 186 188 190 192 194 195 196 198 199 201 202 204 205 206 207 209 216 218 219 220 223 224 225 226 227 234 237 238 239 240 243 244 29250 247 0 1 e 29251 247 0 1 e 29252 247 0 1 e 29253 247 0 1 e 29254 247 0 1 e 29255 247 0 1 e 29256 247 0 1 e 29257 247 0 1 e 29258 247 0 1 e 29259 247 0 1 2 5 9 10 11 13 14 15 18 20 25 26 28 30 31 32 34 35 37 38 42 45 48 49 51 52 53 54 55 60 61 62 65 66 69 71 72 74 75 76 77 78 82 83 84 86 87 88 89 90 93 97 101 102 104 105 106 109 111 112 117 118 119 121 122 123 125 126 128 131 132 134 136 137 139 143 145 146 147 151 152 155 156 157 158 160 165 167 172 173 174 175 180 181 182 184 185 188 189 190 192 193 194 195 197 199 201 202 203 205 208 209 214 215 216 217 218 222 224 226 228 230 231 232 235 236 237 238 239 241 242 244 246 29260 247 0 1 e 29261 247 0 1 0 1 10 13 21 24 27 28 36 50 51 56 59 65 75 81 90 98 101 105 107 115 119 121 123 132 133 138 140 142 145 146 147 148 149 152 154 162 164 165 167 171 172 173 184 196 199 200 202 209 214 228 230 231 235 236 241 246 29262 247 0 1 e 29263 247 0 1 e 29264 247 0 1 e 29265 247 0 1 f 29266 247 0 1 e 29267 247 0 1 1 3 5 6 7 8 16 17 18 19 20 24 26 27 29 30 32 36 37 38 39 43 44 47 49 50 54 56 57 59 60 61 65 66 68 69 70 76 82 83 84 85 89 92 93 94 95 96 102 105 106 109 111 114 115 116 121 122 123 124 126 127 128 133 134 135 136 141 143 144 146 147 148 156 158 159 162 163 165 166 170 171 172 175 176 178 179 182 183 184 186 189 191 194 196 197 198 202 204 208 212 214 217 218 219 220 222 225 226 228 230 232 233 235 237 239 240 243 244 29268 247 0 1 e 29269 247 0 1 e 29270 247 0 1 e 29271 247 0 1 e 29272 247 0 1 e 29273 247 0 1 e 29274 247 0 1 e 29275 247 0 1 e 29276 247 0 1 e 29277 247 0 1 1 5 7 8 9 10 11 12 17 19 20 22 24 25 26 29 30 31 33 34 37 38 39 43 45 47 51 54 55 56 59 60 61 63 68 69 70 74 76 77 78 79 80 85 86 87 88 89 91 93 96 107 108 111 114 116 118 121 122 126 127 129 132 135 137 140 142 143 146 147 152 153 154 156 158 160 161 163 165 169 171 172 173 176 177 178 180 181 184 185 188 191 192 193 195 200 202 203 205 206 207 210 211 214 215 216 218 219 223 224 226 227 229 230 232 234 235 236 238 239 245 246 29278 247 0 1 e 29279 247 0 1 1 4 6 9 11 13 15 20 22 27 29 30 32 34 36 38 50 52 54 59 62 63 69 71 75 82 83 92 94 98 106 110 112 113 115 116 119 120 127 131 136 138 141 145 149 161 162 163 164 178 184 185 189 190 191 197 199 204 205 210 213 218 222 226 227 229 231 236 238 29280 247 1 0 e 29281 247 1 0 e 29282 247 1 0 e 29283 247 1 0 f 29284 247 1 0 e 29285 247 1 0 0 1 2 3 5 6 11 12 14 15 16 17 18 21 23 24 25 26 28 32 36 38 40 43 45 46 48 49 50 52 54 57 58 59 61 65 73 75 76 82 83 84 85 87 88 90 91 97 98 99 100 104 105 107 109 111 113 114 116 123 124 125 129 133 134 136 138 142 143 145 147 148 152 153 156 158 161 162 163 164 165 166 169 170 171 173 174 177 181 182 184 186 187 188 190 193 194 197 198 199 200 206 207 211 214 217 218 221 223 224 226 229 230 234 236 239 240 242 243 244 245 29286 247 1 0 e 29287 247 1 0 e 29288 247 1 0 e 29289 247 1 0 e 29290 247 1 0 e 29291 247 1 0 e 29292 247 1 0 e 29293 247 1 0 e 29294 247 1 0 e 29295 247 1 0 0 2 5 6 8 9 11 12 13 15 16 17 18 24 25 28 30 39 40 44 46 48 49 52 58 59 70 71 73 74 75 77 78 79 82 83 85 86 94 95 97 98 99 101 108 109 111 112 113 116 117 119 122 126 127 129 138 139 141 143 146 147 155 160 163 165 166 167 168 171 172 173 174 176 178 179 182 183 190 191 193 197 198 202 203 204 206 208 209 211 212 213 215 216 218 219 226 234 235 237 239 242 243 244 245 29296 247 1 0 e 29297 247 1 0 7 9 12 17 18 23 27 32 34 38 41 42 43 44 46 48 57 67 68 70 71 85 86 87 88 97 99 112 116 117 120 125 129 138 143 150 166 177 181 188 191 193 195 198 205 211 220 227 231 233 234 239 245 29298 247 1 0 e 29299 247 1 0 e 29300 247 1 0 e 29301 247 1 0 f 29302 247 1 0 e 29303 247 1 0 0 4 8 9 12 13 14 15 17 21 25 26 27 29 30 32 33 35 37 40 41 42 43 45 47 49 51 52 53 54 57 59 60 62 63 66 67 69 70 72 73 77 78 79 80 82 83 84 85 88 89 92 96 97 98 100 101 102 103 104 105 106 108 109 113 116 118 121 122 127 133 134 136 137 139 140 141 144 148 150 153 157 161 162 163 164 165 167 168 169 171 173 174 178 180 181 183 184 185 187 188 189 192 196 197 199 201 203 207 208 209 210 211 212 214 221 222 223 229 230 231 234 235 236 237 238 239 240 241 242 243 29304 247 1 0 e 29305 247 1 0 e 29306 247 1 0 e 29307 247 1 0 e 29308 247 1 0 e 29309 247 1 0 e 29310 247 1 0 e 29311 247 1 0 e 29312 247 1 0 e 29313 247 1 0 0 1 2 5 6 9 11 12 13 14 15 17 20 22 25 26 28 32 33 34 39 40 45 46 48 49 52 53 56 57 63 64 65 66 67 68 69 73 79 80 82 83 86 87 88 89 90 91 92 93 94 96 98 102 104 105 107 108 110 111 117 118 122 123 126 127 128 130 131 134 135 137 138 139 140 143 147 148 149 150 151 156 157 158 162 164 167 168 169 172 173 174 175 176 177 179 180 181 183 185 186 187 190 194 195 197 199 201 202 203 207 209 211 213 217 218 220 222 223 226 228 229 230 231 236 239 240 244 29314 247 1 0 e 29315 247 1 0 0 1 7 9 21 22 23 25 28 33 37 46 47 64 69 74 78 102 116 128 134 139 147 153 167 169 173 174 175 177 182 184 199 200 202 210 212 225 226 227 228 235 240 29316 247 1 0 e 29317 247 1 0 e 29318 247 1 0 e 29319 247 1 0 f 29320 247 1 0 e 29321 247 1 0 2 4 5 6 9 12 13 15 17 18 20 21 22 28 29 30 31 33 36 41 42 45 47 48 49 51 52 54 56 59 62 63 68 69 74 75 77 78 80 82 83 84 85 86 87 90 91 92 94 96 98 100 102 107 110 112 113 115 116 118 120 121 123 127 128 129 131 135 136 137 142 145 150 151 152 154 156 157 159 160 161 164 165 166 167 170 171 172 173 174 176 178 179 181 182 185 186 188 189 191 192 193 194 195 197 199 202 205 206 207 208 209 210 212 213 214 216 217 218 220 224 229 231 236 239 246 29322 247 1 0 e 29323 247 1 0 e 29324 247 1 0 e 29325 247 1 0 e 29326 247 1 0 e 29327 247 1 0 e 29328 247 1 0 e 29329 247 1 0 e 29330 247 1 0 e 29331 247 1 0 2 7 9 11 13 14 16 19 20 21 25 28 33 36 37 39 43 44 46 49 50 51 53 54 56 57 65 66 67 69 70 72 73 74 76 78 79 80 87 88 89 90 91 92 95 96 97 98 99 102 103 104 105 106 107 108 111 112 113 114 115 116 117 121 124 126 128 130 131 133 137 138 139 141 143 145 147 148 151 152 154 155 157 158 159 160 161 168 169 170 171 175 176 185 186 190 192 193 195 196 198 199 200 201 203 204 205 208 209 210 212 213 217 219 220 222 223 224 225 227 228 232 234 236 239 240 241 242 245 29332 247 1 0 e 29333 247 1 0 0 11 13 15 24 39 49 52 55 59 61 62 67 73 74 78 79 84 86 90 92 97 110 112 126 129 135 136 142 151 155 157 160 167 171 173 175 176 177 179 180 184 188 194 196 205 213 216 218 219 222 225 227 228 229 235 240 246 29334 247 1 0 e 29335 247 1 0 e 29336 247 1 0 e 29337 247 1 0 f 29338 247 1 0 e 29339 247 1 0 1 4 6 8 9 11 12 14 15 18 20 21 24 28 29 30 31 32 35 36 38 39 40 43 44 46 48 49 51 53 57 59 60 62 63 64 67 70 72 75 76 77 78 79 80 85 89 94 96 100 102 103 105 106 108 109 110 111 114 118 119 122 123 124 125 127 129 130 133 135 136 138 139 140 141 146 147 148 149 157 158 159 160 161 164 165 166 169 172 173 180 181 182 187 190 198 201 202 204 206 207 212 213 214 218 220 221 222 224 228 230 234 235 236 237 238 240 242 243 29340 247 1 0 e 29341 247 1 0 e 29342 247 1 0 e 29343 247 1 0 e 29344 247 1 0 e 29345 247 1 0 e 29346 247 1 0 e 29347 247 1 0 e 29348 247 1 0 e 29349 247 1 0 0 2 4 5 7 8 9 13 14 19 20 21 24 25 28 30 32 34 36 37 38 39 40 42 43 44 46 50 51 52 54 56 57 61 62 63 66 67 68 73 74 76 77 79 80 81 82 84 87 90 92 94 95 98 101 103 104 106 108 109 113 116 118 119 122 123 124 126 127 130 131 132 137 138 139 141 142 145 147 148 149 150 151 155 156 157 159 160 163 166 168 170 171 172 175 176 178 182 185 186 187 188 189 190 192 193 194 195 197 198 199 200 202 203 205 207 208 209 210 211 212 214 218 219 222 223 225 226 230 231 232 235 236 237 238 239 244 29350 247 1 0 e 29351 247 1 0 0 2 6 10 13 20 25 29 32 41 42 56 64 65 71 72 74 77 78 87 88 90 94 95 97 101 106 119 121 125 137 148 151 155 158 169 172 178 182 192 195 199 204 205 206 211 216 221 223 225 226 227 233 239 241 242 244 29352 247 1 1 e 29353 247 1 1 e 29354 247 1 1 e 29355 247 1 1 f 29356 247 1 1 e 29357 247 1 1 0 1 2 3 5 10 11 15 16 18 20 22 23 25 26 28 30 32 33 36 37 38 39 40 41 42 44 47 48 51 54 55 57 59 60 63 65 67 68 70 71 72 73 75 77 78 80 82 84 85 92 93 95 96 97 98 101 104 110 112 113 114 115 117 118 119 124 125 127 128 136 137 138 140 143 147 150 151 152 154 155 161 163 165 166 168 169 171 173 177 181 186 190 191 194 197 198 199 202 203 210 211 214 215 217 219 221 222 223 225 229 231 234 237 238 239 241 243 246 29358 247 1 1 e 29359 247 1 1 e 29360 247 1 1 e 29361 247 1 1 e 29362 247 1 1 e 29363 247 1 1 e 29364 247 1 1 e 29365 247 1 1 e 29366 247 1 1 e 29367 247 1 1 0 1 2 3 5 8 10 12 13 15 17 21 22 23 24 25 27 30 31 33 34 37 39 40 41 42 43 44 47 48 49 50 51 55 60 61 62 63 66 68 69 70 71 72 73 76 78 80 82 83 91 97 98 100 102 104 105 108 109 111 112 115 117 120 123 127 129 130 131 132 134 135 136 137 138 142 143 148 152 155 156 159 160 161 164 165 166 169 170 172 174 175 177 178 179 181 183 187 189 191 194 196 197 199 201 202 203 208 209 211 217 218 221 222 224 228 229 230 231 238 240 241 242 244 29368 247 1 1 e 29369 247 1 1 3 5 11 13 14 17 35 37 39 40 41 46 47 49 50 51 52 54 55 69 70 77 86 88 90 92 94 96 110 126 130 132 143 145 147 148 153 155 158 161 165 175 182 191 193 196 210 212 215 216 217 218 223 234 235 242 29370 247 1 1 e 29371 247 1 1 e 29372 247 1 1 e 29373 247 1 1 f 29374 247 1 1 e 29375 247 1 1 4 5 6 7 10 13 14 17 20 23 26 27 28 30 32 34 35 36 38 40 41 42 43 44 45 47 48 49 53 60 63 66 68 69 70 77 79 80 83 85 89 90 92 98 101 102 103 106 111 112 113 114 115 116 122 126 127 128 129 133 134 135 137 141 143 144 146 147 148 152 156 159 160 162 165 167 168 173 175 178 180 181 185 186 187 189 190 193 194 195 196 197 198 199 201 202 203 204 206 207 213 214 215 216 218 219 223 225 226 227 228 229 230 232 233 236 237 241 242 243 246 29376 247 1 1 e 29377 247 1 1 e 29378 247 1 1 e 29379 247 1 1 e 29380 247 1 1 e 29381 247 1 1 e 29382 247 1 1 e 29383 247 1 1 e 29384 247 1 1 e 29385 247 1 1 1 6 8 10 11 13 15 17 20 22 23 24 26 27 28 31 32 35 36 37 41 46 48 49 53 55 57 59 60 64 72 75 77 78 79 84 86 87 88 89 91 93 94 95 96 97 98 99 100 101 102 105 106 109 111 112 114 117 119 124 126 127 128 131 134 136 137 142 143 146 148 149 155 161 162 164 168 169 171 172 173 179 180 182 183 184 186 187 189 190 194 195 196 197 210 212 213 214 216 218 219 221 222 224 230 233 236 240 244 245 29386 247 1 1 e 29387 247 1 1 2 9 12 14 16 31 32 35 36 58 63 67 71 72 73 92 94 95 97 101 103 108 110 111 115 123 127 133 137 144 145 150 155 162 164 165 166 168 170 171 177 180 182 191 193 195 196 204 209 214 217 221 230 231 232 236 238 240 244 246 29388 247 1 1 e 29389 247 1 1 e 29390 247 1 1 e 29391 247 1 1 f 29392 247 1 1 e 29393 247 1 1 0 1 2 4 5 9 11 13 14 16 18 20 21 22 23 24 28 30 31 33 34 35 39 41 42 43 44 45 50 53 56 58 59 60 61 62 63 65 66 67 70 71 72 73 74 75 76 80 81 84 85 86 87 90 91 94 95 97 98 101 104 105 106 107 110 111 115 117 118 123 124 130 131 132 133 134 135 136 137 144 150 151 152 154 155 156 158 161 162 164 165 167 168 169 170 174 176 185 186 189 191 192 202 206 208 213 215 216 219 221 222 225 226 227 229 231 233 235 237 238 243 245 246 29394 247 1 1 e 29395 247 1 1 e 29396 247 1 1 e 29397 247 1 1 e 29398 247 1 1 e 29399 247 1 1 e 29400 247 1 1 e 29401 247 1 1 e 29402 247 1 1 e 29403 247 1 1 0 4 10 11 14 15 16 17 21 25 26 28 29 31 32 34 36 37 39 41 44 45 46 49 50 52 53 55 57 58 62 63 67 68 71 74 75 81 82 83 85 87 88 90 91 94 97 99 100 102 103 104 106 107 108 109 110 111 118 119 125 126 129 132 133 134 136 138 140 141 142 143 144 145 147 149 153 154 158 159 160 161 162 166 167 168 172 173 175 176 179 180 181 182 183 189 190 191 196 197 198 200 201 203 204 210 212 214 215 216 217 219 221 222 225 227 230 231 232 233 240 241 29404 247 1 1 e 29405 247 1 1 1 5 8 10 13 14 17 20 21 23 28 32 39 43 46 50 54 57 58 60 61 68 72 73 78 79 81 82 88 89 90 92 96 99 111 113 114 115 116 120 127 133 139 142 143 149 152 156 161 172 184 189 199 207 209 211 214 215 221 222 225 226 228 229 232 236 238 244 29406 247 1 1 e 29407 247 1 1 e 29408 247 1 1 e 29409 247 1 1 f 29410 247 1 1 e 29411 247 1 1 0 1 2 3 4 6 7 8 9 10 11 12 13 14 15 17 20 21 27 28 29 30 31 33 34 37 44 48 50 51 54 63 64 69 71 72 73 74 75 76 79 80 82 83 84 85 89 90 92 95 96 99 101 102 105 108 109 111 114 115 116 120 121 122 123 125 126 127 130 131 132 133 134 138 140 144 145 147 150 153 155 156 158 161 162 165 166 167 169 173 176 177 178 179 181 183 184 188 190 192 193 194 196 197 199 200 201 204 205 211 213 217 218 219 225 226 227 228 230 234 235 236 240 241 244 245 29412 247 1 1 e 29413 247 1 1 e 29414 247 1 1 e 29415 247 1 1 e 29416 247 1 1 e 29417 247 1 1 e 29418 247 1 1 e 29419 247 1 1 e 29420 247 1 1 e 29421 247 1 1 0 3 8 11 12 13 14 15 16 20 21 22 26 31 38 39 41 45 46 49 51 53 54 56 59 60 62 63 65 67 69 73 75 77 78 81 82 84 86 88 89 93 94 97 98 102 103 104 105 107 108 109 111 113 115 117 119 122 124 126 127 133 134 135 137 138 139 141 142 143 145 150 154 155 156 158 159 161 162 163 165 169 171 173 175 178 180 181 183 184 185 186 188 190 192 193 194 195 197 198 200 201 202 203 205 211 212 213 217 218 220 224 225 226 227 229 231 233 234 235 236 237 238 239 240 244 246 29422 247 1 1 e 29423 247 1 1 3 4 6 10 12 17 21 22 23 25 26 32 35 52 53 62 63 67 75 86 87 92 96 98 99 101 104 106 112 115 118 120 128 130 131 134 139 141 145 157 174 181 182 198 211 212 213 215 220 221 223 226 232 233 234 235 237 239 240 243 244 29424 0 0 0 e 29425 0 0 0 e 29426 0 0 0 e 29427 0 0 0 e 29428 0 0 0 e 29429 0 0 0 e 29430 0 0 0 e 29431 0 0 0 e 29432 0 0 0 e 29433 0 0 0 e 29434 0 0 0 e 29435 0 0 0 e 29436 0 0 0 e 29437 0 0 0 e 29438 0 0 0 e 29439 0 0 0 e 29440 0 0 0 e 29441 0 0 0 e 29442 0 0 0 e 29443 0 0 0 e 29444 0 0 0 e 29445 0 0 0 e 29446 0 0 0 e 29447 0 0 0 e 29448 0 0 0 e 29449 0 0 0 e 29450 0 0 0 e 29451 0 0 0 e 29452 0 0 0 e 29453 0 0 0 e 29454 0 0 0 e 29455 0 0 0 e 29456 0 0 0 e 29457 0 0 0 e 29458 0 0 0 e 29459 0 0 0 e 29460 0 0 0 e 29461 0 0 0 e 29462 0 0 0 e 29463 0 0 0 e 29464 0 0 0 e 29465 0 0 0 e 29466 0 0 0 e 29467 0 0 0 e 29468 0 0 0 e 29469 0 0 0 e 29470 0 0 0 e 29471 0 0 0 e 29472 0 0 0 e 29473 0 0 0 e 29474 0 0 0 e 29475 0 0 0 e 29476 0 0 0 e 29477 0 0 0 e 29478 0 0 0 e 29479 0 0 0 e 29480 0 0 0 e 29481 0 0 0 e 29482 0 0 0 e 29483 0 0 0 e 29484 0 0 0 e 29485 0 0 0 e 29486 0 0 0 e 29487 0 0 0 e 29488 0 0 0 e 29489 0 0 0 e 29490 0 0 0 e 29491 0 0 0 e 29492 0 0 0 e 29493 0 0 0 e 29494 0 0 0 e 29495 0 0 0 e 29496 0 0 1 e 29497 0 0 1 e 29498 0 0 1 e 29499 0 0 1 e 29500 0 0 1 e 29501 0 0 1 e 29502 0 0 1 e 29503 0 0 1 e 29504 0 0 1 e 29505 0 0 1 e 29506 0 0 1 e 29507 0 0 1 e 29508 0 0 1 e 29509 0 0 1 e 29510 0 0 1 e 29511 0 0 1 e 29512 0 0 1 e 29513 0 0 1 e 29514 0 0 1 e 29515 0 0 1 e 29516 0 0 1 e 29517 0 0 1 e 29518 0 0 1 e 29519 0 0 1 e 29520 0 0 1 e 29521 0 0 1 e 29522 0 0 1 e 29523 0 0 1 e 29524 0 0 1 e 29525 0 0 1 e 29526 0 0 1 e 29527 0 0 1 e 29528 0 0 1 e 29529 0 0 1 e 29530 0 0 1 e 29531 0 0 1 e 29532 0 0 1 e 29533 0 0 1 e 29534 0 0 1 e 29535 0 0 1 e 29536 0 0 1 e 29537 0 0 1 e 29538 0 0 1 e 29539 0 0 1 e 29540 0 0 1 e 29541 0 0 1 e 29542 0 0 1 e 29543 0 0 1 e 29544 0 0 1 e 29545 0 0 1 e 29546 0 0 1 e 29547 0 0 1 e 29548 0 0 1 e 29549 0 0 1 e 29550 0 0 1 e 29551 0 0 1 e 29552 0 0 1 e 29553 0 0 1 e 29554 0 0 1 e 29555 0 0 1 e 29556 0 0 1 e 29557 0 0 1 e 29558 0 0 1 e 29559 0 0 1 e 29560 0 0 1 e 29561 0 0 1 e 29562 0 0 1 e 29563 0 0 1 e 29564 0 0 1 e 29565 0 0 1 e 29566 0 0 1 e 29567 0 0 1 e 29568 0 1 0 e 29569 0 1 0 e 29570 0 1 0 e 29571 0 1 0 e 29572 0 1 0 e 29573 0 1 0 e 29574 0 1 0 e 29575 0 1 0 e 29576 0 1 0 e 29577 0 1 0 e 29578 0 1 0 e 29579 0 1 0 e 29580 0 1 0 e 29581 0 1 0 e 29582 0 1 0 e 29583 0 1 0 e 29584 0 1 0 e 29585 0 1 0 e 29586 0 1 0 e 29587 0 1 0 e 29588 0 1 0 e 29589 0 1 0 e 29590 0 1 0 e 29591 0 1 0 e 29592 0 1 0 e 29593 0 1 0 e 29594 0 1 0 e 29595 0 1 0 e 29596 0 1 0 e 29597 0 1 0 e 29598 0 1 0 e 29599 0 1 0 e 29600 0 1 0 e 29601 0 1 0 e 29602 0 1 0 e 29603 0 1 0 e 29604 0 1 0 e 29605 0 1 0 e 29606 0 1 0 e 29607 0 1 0 e 29608 0 1 0 e 29609 0 1 0 e 29610 0 1 0 e 29611 0 1 0 e 29612 0 1 0 e 29613 0 1 0 e 29614 0 1 0 e 29615 0 1 0 e 29616 0 1 0 e 29617 0 1 0 e 29618 0 1 0 e 29619 0 1 0 e 29620 0 1 0 e 29621 0 1 0 e 29622 0 1 0 e 29623 0 1 0 e 29624 0 1 0 e 29625 0 1 0 e 29626 0 1 0 e 29627 0 1 0 e 29628 0 1 0 e 29629 0 1 0 e 29630 0 1 0 e 29631 0 1 0 e 29632 0 1 0 e 29633 0 1 0 e 29634 0 1 0 e 29635 0 1 0 e 29636 0 1 0 e 29637 0 1 0 e 29638 0 1 0 e 29639 0 1 0 e 29640 0 1 1 e 29641 0 1 1 e 29642 0 1 1 e 29643 0 1 1 e 29644 0 1 1 e 29645 0 1 1 e 29646 0 1 1 e 29647 0 1 1 e 29648 0 1 1 e 29649 0 1 1 e 29650 0 1 1 e 29651 0 1 1 e 29652 0 1 1 e 29653 0 1 1 e 29654 0 1 1 e 29655 0 1 1 e 29656 0 1 1 e 29657 0 1 1 e 29658 0 1 1 e 29659 0 1 1 e 29660 0 1 1 e 29661 0 1 1 e 29662 0 1 1 e 29663 0 1 1 e 29664 0 1 1 e 29665 0 1 1 e 29666 0 1 1 e 29667 0 1 1 e 29668 0 1 1 e 29669 0 1 1 e 29670 0 1 1 e 29671 0 1 1 e 29672 0 1 1 e 29673 0 1 1 e 29674 0 1 1 e 29675 0 1 1 e 29676 0 1 1 e 29677 0 1 1 e 29678 0 1 1 e 29679 0 1 1 e 29680 0 1 1 e 29681 0 1 1 e 29682 0 1 1 e 29683 0 1 1 e 29684 0 1 1 e 29685 0 1 1 e 29686 0 1 1 e 29687 0 1 1 e 29688 0 1 1 e 29689 0 1 1 e 29690 0 1 1 e 29691 0 1 1 e 29692 0 1 1 e 29693 0 1 1 e 29694 0 1 1 e 29695 0 1 1 e 29696 0 1 1 e 29697 0 1 1 e 29698 0 1 1 e 29699 0 1 1 e 29700 0 1 1 e 29701 0 1 1 e 29702 0 1 1 e 29703 0 1 1 e 29704 0 1 1 e 29705 0 1 1 e 29706 0 1 1 e 29707 0 1 1 e 29708 0 1 1 e 29709 0 1 1 e 29710 0 1 1 e 29711 0 1 1 e 29712 1 0 0 e 29713 1 0 0 e 29714 1 0 0 e 29715 1 0 0 f 29716 1 0 0 e 29717 1 0 0 f 29718 1 0 0 e 29719 1 0 0 f 29720 1 0 0 e 29721 1 0 0 e 29722 1 0 0 e 29723 1 0 0 f 29724 1 0 0 e 29725 1 0 0 f 29726 1 0 0 e 29727 1 0 0 f 29728 1 0 0 e 29729 1 0 0 f 29730 1 0 0 e 29731 1 0 0 e 29732 1 0 0 e 29733 1 0 0 f 29734 1 0 0 e 29735 1 0 0 e 29736 1 0 0 e 29737 1 0 0 f 29738 1 0 0 e 29739 1 0 0 e 29740 1 0 0 e 29741 1 0 0 e 29742 1 0 0 e 29743 1 0 0 e 29744 1 0 0 e 29745 1 0 0 f 29746 1 0 0 e 29747 1 0 0 f 29748 1 0 0 e 29749 1 0 0 e 29750 1 0 0 e 29751 1 0 0 f 29752 1 0 0 e 29753 1 0 0 e 29754 1 0 0 e 29755 1 0 0 f 29756 1 0 0 e 29757 1 0 0 e 29758 1 0 0 e 29759 1 0 0 e 29760 1 0 0 e 29761 1 0 0 f 29762 1 0 0 e 29763 1 0 0 e 29764 1 0 0 e 29765 1 0 0 e 29766 1 0 0 e 29767 1 0 0 e 29768 1 0 0 e 29769 1 0 0 f 29770 1 0 0 e 29771 1 0 0 f 29772 1 0 0 e 29773 1 0 0 f 29774 1 0 0 e 29775 1 0 0 e 29776 1 0 0 e 29777 1 0 0 e 29778 1 0 0 e 29779 1 0 0 e 29780 1 0 0 e 29781 1 0 0 e 29782 1 0 0 e 29783 1 0 0 f 29784 1 0 1 e 29785 1 0 1 e 29786 1 0 1 e 29787 1 0 1 f 29788 1 0 1 e 29789 1 0 1 e 29790 1 0 1 e 29791 1 0 1 f 29792 1 0 1 e 29793 1 0 1 e 29794 1 0 1 e 29795 1 0 1 e 29796 1 0 1 e 29797 1 0 1 f 29798 1 0 1 e 29799 1 0 1 f 29800 1 0 1 e 29801 1 0 1 f 29802 1 0 1 e 29803 1 0 1 e 29804 1 0 1 e 29805 1 0 1 f 29806 1 0 1 e 29807 1 0 1 f 29808 1 0 1 e 29809 1 0 1 f 29810 1 0 1 e 29811 1 0 1 e 29812 1 0 1 e 29813 1 0 1 e 29814 1 0 1 e 29815 1 0 1 f 29816 1 0 1 e 29817 1 0 1 e 29818 1 0 1 e 29819 1 0 1 f 29820 1 0 1 e 29821 1 0 1 e 29822 1 0 1 e 29823 1 0 1 f 29824 1 0 1 e 29825 1 0 1 f 29826 1 0 1 e 29827 1 0 1 f 29828 1 0 1 e 29829 1 0 1 e 29830 1 0 1 e 29831 1 0 1 e 29832 1 0 1 e 29833 1 0 1 f 29834 1 0 1 e 29835 1 0 1 e 29836 1 0 1 e 29837 1 0 1 f 29838 1 0 1 e 29839 1 0 1 e 29840 1 0 1 e 29841 1 0 1 f 29842 1 0 1 e 29843 1 0 1 e 29844 1 0 1 e 29845 1 0 1 f 29846 1 0 1 e 29847 1 0 1 e 29848 1 0 1 e 29849 1 0 1 f 29850 1 0 1 e 29851 1 0 1 f 29852 1 0 1 e 29853 1 0 1 f 29854 1 0 1 e 29855 1 0 1 e 29856 1 1 0 e 29857 1 1 0 e 29858 1 1 0 e 29859 1 1 0 f 29860 1 1 0 e 29861 1 1 0 e 29862 1 1 0 e 29863 1 1 0 f 29864 1 1 0 e 29865 1 1 0 e 29866 1 1 0 e 29867 1 1 0 f 29868 1 1 0 e 29869 1 1 0 e 29870 1 1 0 e 29871 1 1 0 e 29872 1 1 0 e 29873 1 1 0 e 29874 1 1 0 e 29875 1 1 0 e 29876 1 1 0 e 29877 1 1 0 f 29878 1 1 0 e 29879 1 1 0 f 29880 1 1 0 e 29881 1 1 0 f 29882 1 1 0 e 29883 1 1 0 e 29884 1 1 0 e 29885 1 1 0 e 29886 1 1 0 e 29887 1 1 0 e 29888 1 1 0 e 29889 1 1 0 f 29890 1 1 0 e 29891 1 1 0 f 29892 1 1 0 e 29893 1 1 0 e 29894 1 1 0 e 29895 1 1 0 f 29896 1 1 0 e 29897 1 1 0 f 29898 1 1 0 e 29899 1 1 0 f 29900 1 1 0 e 29901 1 1 0 e 29902 1 1 0 e 29903 1 1 0 e 29904 1 1 0 e 29905 1 1 0 f 29906 1 1 0 e 29907 1 1 0 f 29908 1 1 0 e 29909 1 1 0 f 29910 1 1 0 e 29911 1 1 0 e 29912 1 1 0 e 29913 1 1 0 f 29914 1 1 0 e 29915 1 1 0 e 29916 1 1 0 e 29917 1 1 0 f 29918 1 1 0 e 29919 1 1 0 e 29920 1 1 0 e 29921 1 1 0 e 29922 1 1 0 e 29923 1 1 0 f 29924 1 1 0 e 29925 1 1 0 f 29926 1 1 0 e 29927 1 1 0 f 29928 1 1 1 e 29929 1 1 1 e 29930 1 1 1 e 29931 1 1 1 f 29932 1 1 1 e 29933 1 1 1 e 29934 1 1 1 e 29935 1 1 1 f 29936 1 1 1 e 29937 1 1 1 e 29938 1 1 1 e 29939 1 1 1 f 29940 1 1 1 e 29941 1 1 1 f 29942 1 1 1 e 29943 1 1 1 f 29944 1 1 1 e 29945 1 1 1 f 29946 1 1 1 e 29947 1 1 1 e 29948 1 1 1 e 29949 1 1 1 f 29950 1 1 1 e 29951 1 1 1 f 29952 1 1 1 e 29953 1 1 1 f 29954 1 1 1 e 29955 1 1 1 e 29956 1 1 1 e 29957 1 1 1 f 29958 1 1 1 e 29959 1 1 1 f 29960 1 1 1 e 29961 1 1 1 e 29962 1 1 1 e 29963 1 1 1 e 29964 1 1 1 e 29965 1 1 1 e 29966 1 1 1 e 29967 1 1 1 f 29968 1 1 1 e 29969 1 1 1 e 29970 1 1 1 e 29971 1 1 1 f 29972 1 1 1 e 29973 1 1 1 e 29974 1 1 1 e 29975 1 1 1 e 29976 1 1 1 e 29977 1 1 1 f 29978 1 1 1 e 29979 1 1 1 e 29980 1 1 1 e 29981 1 1 1 f 29982 1 1 1 e 29983 1 1 1 e 29984 1 1 1 e 29985 1 1 1 f 29986 1 1 1 e 29987 1 1 1 e 29988 1 1 1 e 29989 1 1 1 f 29990 1 1 1 e 29991 1 1 1 e 29992 1 1 1 e 29993 1 1 1 e 29994 1 1 1 e 29995 1 1 1 f 29996 1 1 1 e 29997 1 1 1 f 29998 1 1 1 e 29999 1 1 1 f 30000 31 0 0 e 30001 31 0 0 e 30002 31 0 0 e 30003 31 0 0 f 30004 31 0 0 e 30005 31 0 0 1 6 7 12 13 16 24 25 27 28 29 30006 31 0 0 e 30007 31 0 0 f 30008 31 0 0 e 30009 31 0 0 e 30010 31 0 0 e 30011 31 0 0 0 4 5 7 9 14 15 19 20 21 24 25 26 28 29 30 30012 31 0 0 e 30013 31 0 0 0 3 4 5 6 9 10 12 13 14 17 19 21 23 24 25 27 30014 31 0 0 e 30015 31 0 0 0 3 4 6 8 9 12 13 18 22 25 26 30 30016 31 0 0 e 30017 31 0 0 4 5 12 13 14 15 16 17 19 21 22 27 28 29 30018 31 0 0 e 30019 31 0 0 e 30020 31 0 0 e 30021 31 0 0 f 30022 31 0 0 e 30023 31 0 0 0 1 3 4 6 7 9 11 12 13 15 17 19 20 22 24 27 28 29 30 30024 31 0 0 e 30025 31 0 0 f 30026 31 0 0 e 30027 31 0 0 e 30028 31 0 0 e 30029 31 0 0 1 2 3 4 5 6 7 9 14 16 17 19 21 22 23 29 30 30030 31 0 0 e 30031 31 0 0 1 2 3 7 10 13 14 17 19 20 22 25 29 30 30032 31 0 0 e 30033 31 0 0 2 4 6 7 10 11 12 13 15 19 21 22 23 25 29 30034 31 0 0 e 30035 31 0 0 3 4 5 6 7 8 9 10 12 13 14 15 17 18 22 24 27 28 29 30036 31 0 0 e 30037 31 0 0 e 30038 31 0 0 e 30039 31 0 0 f 30040 31 0 0 e 30041 31 0 0 1 3 7 8 12 14 16 17 21 24 25 26 27 30 30042 31 0 0 e 30043 31 0 0 f 30044 31 0 0 e 30045 31 0 0 e 30046 31 0 0 e 30047 31 0 0 3 4 5 7 8 9 11 13 14 15 16 17 19 27 28 30 30048 31 0 0 e 30049 31 0 0 1 3 5 7 8 9 10 12 14 19 22 24 25 26 29 30 30050 31 0 0 e 30051 31 0 0 3 4 7 10 11 12 14 16 19 21 22 23 24 25 26 29 30 30052 31 0 0 e 30053 31 0 0 0 8 9 11 12 16 19 20 21 25 27 30 30054 31 0 0 e 30055 31 0 0 e 30056 31 0 0 e 30057 31 0 0 f 30058 31 0 0 e 30059 31 0 0 0 2 3 8 9 12 13 14 20 22 24 25 30 30060 31 0 0 e 30061 31 0 0 f 30062 31 0 0 e 30063 31 0 0 e 30064 31 0 0 e 30065 31 0 0 0 1 6 7 9 11 12 17 19 20 21 22 23 25 27 30 30066 31 0 0 e 30067 31 0 0 0 3 8 9 13 15 16 18 20 22 26 27 29 30068 31 0 0 e 30069 31 0 0 0 1 2 3 7 10 13 14 16 20 21 24 25 27 30 30070 31 0 0 e 30071 31 0 0 2 4 6 7 10 11 13 15 16 18 19 20 21 24 27 28 29 30 30072 31 0 1 e 30073 31 0 1 e 30074 31 0 1 e 30075 31 0 1 f 30076 31 0 1 e 30077 31 0 1 2 4 5 6 9 10 13 15 20 23 25 27 28 29 30078 31 0 1 e 30079 31 0 1 f 30080 31 0 1 e 30081 31 0 1 e 30082 31 0 1 e 30083 31 0 1 0 1 2 5 6 7 9 10 11 13 16 17 21 22 25 27 28 30084 31 0 1 e 30085 31 0 1 5 6 7 8 9 12 16 19 21 24 25 28 30086 31 0 1 e 30087 31 0 1 0 1 6 7 9 11 12 13 14 16 18 19 20 21 25 27 28 29 30 30088 31 0 1 e 30089 31 0 1 0 5 7 17 19 21 22 26 27 28 29 30090 31 0 1 e 30091 31 0 1 e 30092 31 0 1 e 30093 31 0 1 f 30094 31 0 1 e 30095 31 0 1 2 7 10 13 14 16 17 18 19 20 21 22 26 27 30 30096 31 0 1 e 30097 31 0 1 f 30098 31 0 1 e 30099 31 0 1 e 30100 31 0 1 e 30101 31 0 1 4 6 8 11 12 13 14 16 19 23 25 26 30102 31 0 1 e 30103 31 0 1 0 3 4 7 8 12 13 19 21 22 24 26 27 30 30104 31 0 1 e 30105 31 0 1 2 7 8 9 14 15 16 19 23 25 26 28 30 30106 31 0 1 e 30107 31 0 1 0 2 5 7 9 10 11 13 14 15 16 17 18 21 22 24 25 26 28 29 30108 31 0 1 e 30109 31 0 1 e 30110 31 0 1 e 30111 31 0 1 f 30112 31 0 1 e 30113 31 0 1 0 1 2 6 7 9 11 13 15 16 18 19 21 23 24 25 27 28 30114 31 0 1 e 30115 31 0 1 f 30116 31 0 1 e 30117 31 0 1 e 30118 31 0 1 e 30119 31 0 1 1 5 9 10 11 13 15 16 17 18 19 21 22 23 25 29 30120 31 0 1 e 30121 31 0 1 0 1 2 3 4 7 9 11 12 13 17 18 19 21 23 24 26 27 30 30122 31 0 1 e 30123 31 0 1 0 1 4 5 6 7 8 9 11 12 15 16 17 18 19 21 22 24 28 29 30124 31 0 1 e 30125 31 0 1 0 1 3 4 5 9 11 12 15 18 21 23 24 26 27 28 30126 31 0 1 e 30127 31 0 1 e 30128 31 0 1 e 30129 31 0 1 f 30130 31 0 1 e 30131 31 0 1 0 1 3 5 9 10 12 13 15 16 19 21 23 25 26 28 30132 31 0 1 e 30133 31 0 1 f 30134 31 0 1 e 30135 31 0 1 e 30136 31 0 1 e 30137 31 0 1 1 6 11 17 20 23 24 26 30 30138 31 0 1 e 30139 31 0 1 1 4 5 7 8 10 14 19 20 21 22 23 25 27 29 30140 31 0 1 e 30141 31 0 1 2 3 5 7 8 9 10 18 21 24 27 28 30142 31 0 1 e 30143 31 0 1 1 2 3 5 8 9 10 12 13 14 17 18 20 21 22 23 24 27 28 30 30144 31 1 0 e 30145 31 1 0 e 30146 31 1 0 e 30147 31 1 0 f 30148 31 1 0 e 30149 31 1 0 1 2 4 6 7 8 10 11 13 15 16 21 24 25 28 29 30150 31 1 0 e 30151 31 1 0 f 30152 31 1 0 e 30153 31 1 0 e 30154 31 1 0 e 30155 31 1 0 0 4 5 7 8 9 10 14 15 19 23 30 30156 31 1 0 e 30157 31 1 0 4 6 8 10 11 12 13 14 16 17 20 22 23 25 26 30158 31 1 0 e 30159 31 1 0 5 7 9 10 12 17 18 20 23 27 28 29 30160 31 1 0 e 30161 31 1 0 2 4 5 8 10 11 12 14 15 16 19 21 22 23 24 30 30162 31 1 0 e 30163 31 1 0 e 30164 31 1 0 e 30165 31 1 0 f 30166 31 1 0 e 30167 31 1 0 0 3 4 5 6 7 10 11 12 13 14 15 17 22 25 26 27 28 29 30168 31 1 0 e 30169 31 1 0 f 30170 31 1 0 e 30171 31 1 0 e 30172 31 1 0 e 30173 31 1 0 8 10 11 13 14 18 19 20 28 29 30 30174 31 1 0 e 30175 31 1 0 3 6 9 10 11 12 14 15 16 17 21 24 25 27 29 30 30176 31 1 0 e 30177 31 1 0 1 2 5 6 9 19 20 22 25 30178 31 1 0 e 30179 31 1 0 0 1 2 3 4 5 11 13 15 17 18 19 20 21 23 24 25 27 30 30180 31 1 0 e 30181 31 1 0 e 30182 31 1 0 e 30183 31 1 0 f 30184 31 1 0 e 30185 31 1 0 1 8 9 10 13 15 17 21 22 29 30186 31 1 0 e 30187 31 1 0 f 30188 31 1 0 e 30189 31 1 0 e 30190 31 1 0 e 30191 31 1 0 2 3 4 7 8 9 10 14 15 16 20 21 26 27 28 29 30 30192 31 1 0 e 30193 31 1 0 0 2 5 6 7 15 20 21 22 24 25 26 27 29 30194 31 1 0 e 30195 31 1 0 0 1 2 3 5 6 8 12 13 14 18 20 21 24 27 28 30196 31 1 0 e 30197 31 1 0 3 4 5 6 7 11 13 14 16 17 18 22 23 27 29 30198 31 1 0 e 30199 31 1 0 e 30200 31 1 0 e 30201 31 1 0 f 30202 31 1 0 e 30203 31 1 0 4 5 7 8 14 17 21 24 26 27 30 30204 31 1 0 e 30205 31 1 0 f 30206 31 1 0 e 30207 31 1 0 e 30208 31 1 0 e 30209 31 1 0 3 4 6 7 10 12 16 20 23 25 26 27 30 30210 31 1 0 e 30211 31 1 0 0 1 3 8 10 11 12 13 14 15 18 19 20 21 22 26 27 29 30212 31 1 0 e 30213 31 1 0 0 1 2 3 7 9 10 12 13 14 16 19 21 22 28 29 30 30214 31 1 0 e 30215 31 1 0 0 1 2 3 4 5 7 11 13 14 18 21 22 23 25 27 28 30216 31 1 1 e 30217 31 1 1 e 30218 31 1 1 e 30219 31 1 1 f 30220 31 1 1 e 30221 31 1 1 1 4 10 11 12 13 16 17 18 21 22 23 26 29 30 30222 31 1 1 e 30223 31 1 1 f 30224 31 1 1 e 30225 31 1 1 e 30226 31 1 1 e 30227 31 1 1 0 2 5 6 13 14 16 19 20 21 22 23 25 30228 31 1 1 e 30229 31 1 1 1 5 6 8 9 13 14 16 17 20 21 22 28 30230 31 1 1 e 30231 31 1 1 0 3 4 5 6 8 10 12 14 17 18 19 20 22 23 24 25 28 30 30232 31 1 1 e 30233 31 1 1 0 5 6 7 8 12 13 15 16 17 18 20 21 22 23 27 30 30234 31 1 1 e 30235 31 1 1 e 30236 31 1 1 e 30237 31 1 1 f 30238 31 1 1 e 30239 31 1 1 0 1 8 9 10 11 14 15 16 17 23 26 27 28 30240 31 1 1 e 30241 31 1 1 f 30242 31 1 1 e 30243 31 1 1 e 30244 31 1 1 e 30245 31 1 1 0 1 4 5 13 17 18 19 22 26 28 30 30246 31 1 1 e 30247 31 1 1 0 2 3 4 6 11 14 19 20 23 25 27 30248 31 1 1 e 30249 31 1 1 0 1 2 3 4 5 9 13 14 15 23 24 27 28 30 30250 31 1 1 e 30251 31 1 1 0 2 4 5 6 7 9 11 12 13 14 15 16 20 23 25 27 28 30252 31 1 1 e 30253 31 1 1 e 30254 31 1 1 e 30255 31 1 1 f 30256 31 1 1 e 30257 31 1 1 0 5 8 9 12 13 14 16 17 19 21 22 23 24 26 27 28 30258 31 1 1 e 30259 31 1 1 f 30260 31 1 1 e 30261 31 1 1 e 30262 31 1 1 e 30263 31 1 1 3 4 7 8 9 12 17 22 26 27 30264 31 1 1 e 30265 31 1 1 0 1 2 4 6 8 11 12 15 16 17 18 19 20 21 25 26 27 28 29 30 30266 31 1 1 e 30267 31 1 1 0 5 7 8 9 12 14 17 20 21 30268 31 1 1 e 30269 31 1 1 0 2 5 7 11 12 14 16 17 18 21 26 27 28 29 30270 31 1 1 e 30271 31 1 1 e 30272 31 1 1 e 30273 31 1 1 f 30274 31 1 1 e 30275 31 1 1 4 5 7 9 11 12 13 22 23 25 29 30276 31 1 1 e 30277 31 1 1 f 30278 31 1 1 e 30279 31 1 1 e 30280 31 1 1 e 30281 31 1 1 1 3 4 6 7 9 10 12 13 14 18 20 21 23 27 29 30282 31 1 1 e 30283 31 1 1 0 1 2 3 4 9 10 13 14 16 17 19 20 21 22 24 26 30 30284 31 1 1 e 30285 31 1 1 0 1 3 4 5 7 10 11 12 13 14 15 22 23 26 27 28 30 30286 31 1 1 e 30287 31 1 1 4 5 6 9 13 14 15 19 20 22 23 24 26 28 29 30288 32 0 0 e 30289 32 0 0 e 30290 32 0 0 e 30291 32 0 0 f 30292 32 0 0 e 30293 32 0 0 0 1 2 3 4 5 7 8 11 12 14 15 16 17 19 20 21 22 25 26 27 29 30 30294 32 0 0 e 30295 32 0 0 f 30296 32 0 0 e 30297 32 0 0 e 30298 32 0 0 e 30299 32 0 0 1 4 5 8 9 11 14 15 18 19 20 21 24 25 27 28 29 31 30300 32 0 0 e 30301 32 0 0 0 1 4 10 12 14 15 19 21 22 23 27 28 29 31 30302 32 0 0 e 30303 32 0 0 2 4 5 6 9 14 19 21 22 23 25 26 28 31 30304 32 0 0 e 30305 32 0 0 2 3 5 8 9 12 14 16 20 22 23 25 26 28 30 30306 32 0 0 e 30307 32 0 0 e 30308 32 0 0 e 30309 32 0 0 f 30310 32 0 0 e 30311 32 0 0 0 1 2 3 4 5 6 7 10 13 14 15 20 21 23 27 28 29 31 30312 32 0 0 e 30313 32 0 0 f 30314 32 0 0 e 30315 32 0 0 e 30316 32 0 0 e 30317 32 0 0 1 2 4 5 11 12 14 16 17 18 20 29 30 30318 32 0 0 e 30319 32 0 0 0 1 2 5 6 9 10 11 12 13 14 15 18 19 21 22 24 26 27 28 30 30320 32 0 0 e 30321 32 0 0 0 4 6 9 11 12 14 16 17 20 21 28 29 30 30322 32 0 0 e 30323 32 0 0 0 1 2 6 7 9 15 17 19 21 22 24 26 27 28 30324 32 0 0 e 30325 32 0 0 e 30326 32 0 0 e 30327 32 0 0 f 30328 32 0 0 e 30329 32 0 0 1 5 8 9 10 11 13 16 19 20 22 23 26 27 30 31 30330 32 0 0 e 30331 32 0 0 f 30332 32 0 0 e 30333 32 0 0 e 30334 32 0 0 e 30335 32 0 0 0 1 2 3 11 13 17 19 22 24 25 28 30336 32 0 0 e 30337 32 0 0 0 3 4 5 6 7 8 9 10 12 13 15 16 17 19 20 21 22 23 24 25 26 30338 32 0 0 e 30339 32 0 0 1 2 4 5 6 7 8 9 11 12 15 17 24 25 26 30 30340 32 0 0 e 30341 32 0 0 0 3 4 5 7 10 13 15 17 19 20 21 24 25 26 29 30 30342 32 0 0 e 30343 32 0 0 e 30344 32 0 0 e 30345 32 0 0 f 30346 32 0 0 e 30347 32 0 0 4 6 7 10 13 15 16 17 18 20 21 22 25 27 29 30 31 30348 32 0 0 e 30349 32 0 0 f 30350 32 0 0 e 30351 32 0 0 e 30352 32 0 0 e 30353 32 0 0 0 2 4 5 7 8 13 16 17 18 20 22 25 28 29 30354 32 0 0 e 30355 32 0 0 1 2 3 5 7 8 9 10 16 21 27 28 29 30356 32 0 0 e 30357 32 0 0 1 3 5 8 10 11 12 13 15 17 19 20 21 23 24 26 27 30 30358 32 0 0 e 30359 32 0 0 0 1 2 4 7 8 9 11 12 13 15 16 18 19 26 29 30 30360 32 0 1 e 30361 32 0 1 e 30362 32 0 1 e 30363 32 0 1 f 30364 32 0 1 e 30365 32 0 1 2 3 4 5 6 13 15 17 20 23 27 28 29 30 30366 32 0 1 e 30367 32 0 1 f 30368 32 0 1 e 30369 32 0 1 e 30370 32 0 1 e 30371 32 0 1 0 6 7 8 9 12 13 15 16 17 20 21 25 27 28 31 30372 32 0 1 e 30373 32 0 1 0 1 3 4 5 12 13 14 15 17 18 19 21 24 26 28 30 31 30374 32 0 1 e 30375 32 0 1 0 1 2 6 7 9 12 18 19 20 22 23 24 25 27 29 30376 32 0 1 e 30377 32 0 1 0 1 2 7 10 12 13 16 19 22 23 24 25 26 29 30 30378 32 0 1 e 30379 32 0 1 e 30380 32 0 1 e 30381 32 0 1 f 30382 32 0 1 e 30383 32 0 1 3 4 6 7 9 11 13 15 22 26 28 30 30384 32 0 1 e 30385 32 0 1 f 30386 32 0 1 e 30387 32 0 1 e 30388 32 0 1 e 30389 32 0 1 2 3 4 6 7 9 10 11 12 14 16 17 18 19 21 26 30 30390 32 0 1 e 30391 32 0 1 0 6 8 10 12 13 18 20 30 30392 32 0 1 e 30393 32 0 1 1 3 5 10 13 15 18 20 22 23 24 25 30 30394 32 0 1 e 30395 32 0 1 1 2 3 4 7 8 9 11 13 17 18 19 20 21 23 25 28 31 30396 32 0 1 e 30397 32 0 1 e 30398 32 0 1 e 30399 32 0 1 f 30400 32 0 1 e 30401 32 0 1 1 3 4 5 6 7 9 11 13 18 19 21 24 25 28 31 30402 32 0 1 e 30403 32 0 1 f 30404 32 0 1 e 30405 32 0 1 e 30406 32 0 1 e 30407 32 0 1 7 9 10 11 14 15 16 17 18 19 20 24 26 27 28 30 31 30408 32 0 1 e 30409 32 0 1 0 3 9 13 14 15 17 20 21 24 25 29 30410 32 0 1 e 30411 32 0 1 3 5 6 7 11 14 15 17 19 20 21 23 25 27 29 30412 32 0 1 e 30413 32 0 1 4 6 7 8 10 11 14 15 16 20 22 25 27 29 30 30414 32 0 1 e 30415 32 0 1 e 30416 32 0 1 e 30417 32 0 1 f 30418 32 0 1 e 30419 32 0 1 3 4 8 10 14 15 17 18 23 24 26 29 30 31 30420 32 0 1 e 30421 32 0 1 f 30422 32 0 1 e 30423 32 0 1 e 30424 32 0 1 e 30425 32 0 1 1 6 8 11 12 14 15 17 19 21 22 23 29 30426 32 0 1 e 30427 32 0 1 0 2 5 7 8 12 13 14 15 16 17 18 19 20 23 25 26 27 30 30428 32 0 1 e 30429 32 0 1 1 3 4 6 7 8 9 11 12 13 15 16 19 20 21 23 24 26 28 29 31 30430 32 0 1 e 30431 32 0 1 1 3 4 5 8 9 10 12 13 14 16 18 19 21 22 25 26 29 31 30432 32 1 0 e 30433 32 1 0 e 30434 32 1 0 e 30435 32 1 0 f 30436 32 1 0 e 30437 32 1 0 2 3 4 6 7 10 11 15 16 18 22 23 25 26 29 31 30438 32 1 0 e 30439 32 1 0 f 30440 32 1 0 e 30441 32 1 0 e 30442 32 1 0 e 30443 32 1 0 0 2 3 4 5 6 9 12 15 16 19 20 21 22 24 25 29 30 31 30444 32 1 0 e 30445 32 1 0 1 3 5 6 7 8 10 13 14 15 16 17 24 27 29 30 31 30446 32 1 0 e 30447 32 1 0 1 2 4 5 7 11 16 17 18 22 23 25 26 27 28 29 30 30448 32 1 0 e 30449 32 1 0 9 12 15 17 22 23 31 30450 32 1 0 e 30451 32 1 0 e 30452 32 1 0 e 30453 32 1 0 f 30454 32 1 0 e 30455 32 1 0 0 3 5 6 9 11 12 24 27 30456 32 1 0 e 30457 32 1 0 f 30458 32 1 0 e 30459 32 1 0 e 30460 32 1 0 e 30461 32 1 0 1 2 3 4 5 7 8 10 11 12 15 17 19 20 21 23 25 26 27 29 31 30462 32 1 0 e 30463 32 1 0 0 2 4 6 9 10 11 12 13 15 19 20 23 24 28 30 31 30464 32 1 0 e 30465 32 1 0 2 4 6 9 10 12 14 15 18 21 22 26 29 30466 32 1 0 e 30467 32 1 0 2 3 6 8 10 12 15 18 19 22 25 26 27 29 30 31 30468 32 1 0 e 30469 32 1 0 e 30470 32 1 0 e 30471 32 1 0 f 30472 32 1 0 e 30473 32 1 0 2 4 6 10 15 20 21 22 25 27 29 30 31 30474 32 1 0 e 30475 32 1 0 f 30476 32 1 0 e 30477 32 1 0 e 30478 32 1 0 e 30479 32 1 0 2 6 7 8 12 14 16 18 19 21 22 23 27 28 30 31 30480 32 1 0 e 30481 32 1 0 5 6 7 8 9 12 13 14 16 19 21 22 24 25 26 28 30 30482 32 1 0 e 30483 32 1 0 1 3 8 9 11 12 14 15 16 18 21 22 24 25 28 30 31 30484 32 1 0 e 30485 32 1 0 1 7 9 11 12 13 15 18 19 21 24 26 27 28 29 31 30486 32 1 0 e 30487 32 1 0 e 30488 32 1 0 e 30489 32 1 0 f 30490 32 1 0 e 30491 32 1 0 0 3 4 6 7 8 12 14 15 16 18 20 21 22 23 24 28 31 30492 32 1 0 e 30493 32 1 0 f 30494 32 1 0 e 30495 32 1 0 e 30496 32 1 0 e 30497 32 1 0 3 4 6 7 8 11 14 16 17 20 24 26 27 28 30 30498 32 1 0 e 30499 32 1 0 3 5 6 7 9 13 15 16 18 23 25 27 29 30 31 30500 32 1 0 e 30501 32 1 0 0 1 7 8 9 13 16 17 18 21 22 23 24 26 28 30502 32 1 0 e 30503 32 1 0 3 5 6 8 9 10 11 13 15 17 18 21 23 24 26 29 31 30504 32 1 1 e 30505 32 1 1 e 30506 32 1 1 e 30507 32 1 1 f 30508 32 1 1 e 30509 32 1 1 0 1 2 4 7 8 9 12 13 17 21 24 25 26 29 30 30510 32 1 1 e 30511 32 1 1 f 30512 32 1 1 e 30513 32 1 1 e 30514 32 1 1 e 30515 32 1 1 2 4 6 8 10 11 17 18 20 22 25 26 27 29 30 30516 32 1 1 e 30517 32 1 1 0 1 4 5 8 9 11 14 19 20 22 23 24 26 27 30518 32 1 1 e 30519 32 1 1 0 3 6 11 12 13 14 18 20 21 22 24 25 29 30 31 30520 32 1 1 e 30521 32 1 1 2 11 13 15 17 19 23 26 28 29 30 31 30522 32 1 1 e 30523 32 1 1 e 30524 32 1 1 e 30525 32 1 1 f 30526 32 1 1 e 30527 32 1 1 1 2 3 6 7 9 10 11 14 15 18 20 21 22 23 24 25 26 28 30 30528 32 1 1 e 30529 32 1 1 f 30530 32 1 1 e 30531 32 1 1 e 30532 32 1 1 e 30533 32 1 1 0 2 4 5 7 8 10 12 14 16 17 19 20 22 23 25 26 29 30 31 30534 32 1 1 e 30535 32 1 1 0 1 4 6 9 10 12 16 18 23 24 25 26 29 30 30536 32 1 1 e 30537 32 1 1 2 4 5 7 8 11 12 13 15 16 20 21 24 25 26 27 28 29 31 30538 32 1 1 e 30539 32 1 1 0 2 5 7 8 12 14 15 16 18 21 23 25 30540 32 1 1 e 30541 32 1 1 e 30542 32 1 1 e 30543 32 1 1 f 30544 32 1 1 e 30545 32 1 1 0 4 6 7 9 11 12 13 15 20 23 28 29 31 30546 32 1 1 e 30547 32 1 1 f 30548 32 1 1 e 30549 32 1 1 e 30550 32 1 1 e 30551 32 1 1 0 2 5 7 8 9 10 11 12 13 17 18 21 23 25 27 29 30 31 30552 32 1 1 e 30553 32 1 1 0 3 4 7 8 11 12 14 15 16 17 19 22 25 26 28 29 30 31 30554 32 1 1 e 30555 32 1 1 0 3 4 5 6 9 14 15 18 19 20 21 22 25 26 28 30556 32 1 1 e 30557 32 1 1 0 3 4 5 6 8 10 17 18 19 21 24 25 29 30 31 30558 32 1 1 e 30559 32 1 1 e 30560 32 1 1 e 30561 32 1 1 f 30562 32 1 1 e 30563 32 1 1 0 1 2 3 4 8 9 11 12 14 19 20 21 24 26 30564 32 1 1 e 30565 32 1 1 f 30566 32 1 1 e 30567 32 1 1 e 30568 32 1 1 e 30569 32 1 1 0 1 3 5 6 8 10 11 12 13 16 17 19 20 21 23 27 29 30 31 30570 32 1 1 e 30571 32 1 1 4 5 6 8 12 18 19 20 22 25 26 28 30572 32 1 1 e 30573 32 1 1 8 9 10 14 15 16 19 20 25 29 30 31 30574 32 1 1 e 30575 32 1 1 1 2 7 8 9 12 13 15 18 19 20 21 22 24 25 26 27 28 30 31 30576 33 0 0 e 30577 33 0 0 e 30578 33 0 0 e 30579 33 0 0 f 30580 33 0 0 e 30581 33 0 0 0 1 6 7 8 9 12 14 22 23 25 27 28 30 31 30582 33 0 0 e 30583 33 0 0 f 30584 33 0 0 e 30585 33 0 0 e 30586 33 0 0 e 30587 33 0 0 1 3 4 6 7 8 9 12 13 14 18 20 21 22 23 26 27 32 30588 33 0 0 e 30589 33 0 0 0 3 5 7 8 11 12 14 16 17 18 20 23 25 26 28 30 31 32 30590 33 0 0 e 30591 33 0 0 0 2 4 5 11 12 13 14 15 16 18 19 20 21 23 25 26 27 28 29 30 31 32 30592 33 0 0 e 30593 33 0 0 0 2 3 4 5 6 7 8 13 15 16 17 21 22 24 26 29 32 30594 33 0 0 e 30595 33 0 0 e 30596 33 0 0 e 30597 33 0 0 f 30598 33 0 0 e 30599 33 0 0 1 3 4 5 6 7 9 11 13 14 18 21 24 25 26 28 30 30600 33 0 0 e 30601 33 0 0 f 30602 33 0 0 e 30603 33 0 0 e 30604 33 0 0 e 30605 33 0 0 0 1 2 3 4 5 7 11 13 15 17 20 22 23 26 27 31 32 30606 33 0 0 e 30607 33 0 0 1 2 3 4 8 9 12 17 18 24 25 26 27 28 32 30608 33 0 0 e 30609 33 0 0 0 3 4 5 6 7 8 10 14 16 17 18 22 23 25 26 28 29 32 30610 33 0 0 e 30611 33 0 0 3 9 10 11 12 16 17 20 23 25 26 27 30612 33 0 0 e 30613 33 0 0 e 30614 33 0 0 e 30615 33 0 0 f 30616 33 0 0 e 30617 33 0 0 0 2 4 7 9 10 14 15 16 20 21 23 25 28 30 31 32 30618 33 0 0 e 30619 33 0 0 f 30620 33 0 0 e 30621 33 0 0 e 30622 33 0 0 e 30623 33 0 0 1 5 6 8 10 12 13 17 19 20 23 25 26 27 28 29 30 30624 33 0 0 e 30625 33 0 0 1 2 3 5 7 9 11 12 15 17 20 21 25 26 27 29 30 32 30626 33 0 0 e 30627 33 0 0 1 4 6 7 8 9 10 13 14 21 22 25 28 29 30 31 30628 33 0 0 e 30629 33 0 0 1 2 6 8 9 10 11 14 16 19 20 21 22 27 28 29 30 31 32 30630 33 0 0 e 30631 33 0 0 e 30632 33 0 0 e 30633 33 0 0 f 30634 33 0 0 e 30635 33 0 0 2 5 6 7 8 9 12 13 15 16 17 18 20 23 24 28 32 30636 33 0 0 e 30637 33 0 0 f 30638 33 0 0 e 30639 33 0 0 e 30640 33 0 0 e 30641 33 0 0 0 2 3 4 5 6 7 10 11 14 19 20 22 24 25 29 30 31 30642 33 0 0 e 30643 33 0 0 0 1 3 4 5 6 7 8 10 11 12 13 14 15 20 21 24 27 28 29 30 30644 33 0 0 e 30645 33 0 0 0 1 2 3 4 5 6 7 9 10 12 14 16 17 18 19 23 29 30 31 30646 33 0 0 e 30647 33 0 0 0 1 2 3 4 6 7 8 9 10 12 15 17 19 23 24 25 28 29 30648 33 0 1 e 30649 33 0 1 e 30650 33 0 1 e 30651 33 0 1 f 30652 33 0 1 e 30653 33 0 1 0 1 2 3 4 5 8 10 12 13 15 20 21 22 27 29 32 30654 33 0 1 e 30655 33 0 1 f 30656 33 0 1 e 30657 33 0 1 e 30658 33 0 1 e 30659 33 0 1 0 1 3 6 7 11 12 18 22 24 26 27 28 30 32 30660 33 0 1 e 30661 33 0 1 0 3 4 5 6 7 8 12 15 16 18 19 20 21 23 25 28 30 31 32 30662 33 0 1 e 30663 33 0 1 0 8 9 11 14 15 19 20 27 30664 33 0 1 e 30665 33 0 1 0 1 2 5 7 9 13 14 20 22 23 24 25 30 31 30666 33 0 1 e 30667 33 0 1 e 30668 33 0 1 e 30669 33 0 1 f 30670 33 0 1 e 30671 33 0 1 1 3 4 5 6 9 10 11 12 13 14 16 18 19 20 22 24 25 28 29 30 30672 33 0 1 e 30673 33 0 1 f 30674 33 0 1 e 30675 33 0 1 e 30676 33 0 1 e 30677 33 0 1 0 1 2 6 8 9 10 11 14 15 17 18 19 20 22 28 29 30 30678 33 0 1 e 30679 33 0 1 1 2 6 8 11 12 13 14 15 20 23 25 27 29 31 32 30680 33 0 1 e 30681 33 0 1 0 5 14 15 18 19 22 24 25 26 27 30682 33 0 1 e 30683 33 0 1 1 2 4 5 6 10 11 12 16 17 19 20 21 24 26 27 29 31 30684 33 0 1 e 30685 33 0 1 e 30686 33 0 1 e 30687 33 0 1 f 30688 33 0 1 e 30689 33 0 1 1 2 3 4 8 9 10 13 15 16 17 19 20 21 27 29 30 31 32 30690 33 0 1 e 30691 33 0 1 f 30692 33 0 1 e 30693 33 0 1 e 30694 33 0 1 e 30695 33 0 1 1 3 6 11 14 16 17 19 20 21 24 26 27 29 30696 33 0 1 e 30697 33 0 1 0 3 4 7 9 10 13 14 18 19 21 27 32 30698 33 0 1 e 30699 33 0 1 3 4 5 6 7 8 12 13 14 16 17 19 20 21 24 25 26 30 30700 33 0 1 e 30701 33 0 1 1 3 7 8 9 10 14 16 18 19 25 26 29 30 31 30702 33 0 1 e 30703 33 0 1 e 30704 33 0 1 e 30705 33 0 1 f 30706 33 0 1 e 30707 33 0 1 1 7 12 14 16 22 29 31 30708 33 0 1 e 30709 33 0 1 f 30710 33 0 1 e 30711 33 0 1 e 30712 33 0 1 e 30713 33 0 1 1 6 8 16 18 22 23 26 29 30 32 30714 33 0 1 e 30715 33 0 1 1 6 8 10 11 13 17 23 24 25 26 29 30 30716 33 0 1 e 30717 33 0 1 3 4 6 9 10 12 13 14 15 19 22 25 26 27 28 31 32 30718 33 0 1 e 30719 33 0 1 0 2 3 5 8 9 10 12 19 20 21 23 24 25 29 30720 33 1 0 e 30721 33 1 0 e 30722 33 1 0 e 30723 33 1 0 f 30724 33 1 0 e 30725 33 1 0 0 1 3 6 7 10 12 13 15 19 22 23 24 25 29 30 31 30726 33 1 0 e 30727 33 1 0 f 30728 33 1 0 e 30729 33 1 0 e 30730 33 1 0 e 30731 33 1 0 0 3 7 10 12 13 14 15 16 23 24 30 30732 33 1 0 e 30733 33 1 0 5 8 13 14 16 19 21 22 25 26 29 30 31 30734 33 1 0 e 30735 33 1 0 0 1 3 6 7 8 9 11 12 13 14 16 17 19 20 21 23 24 27 31 32 30736 33 1 0 e 30737 33 1 0 0 5 6 9 10 11 13 14 20 21 22 23 25 26 27 28 29 30 31 32 30738 33 1 0 e 30739 33 1 0 e 30740 33 1 0 e 30741 33 1 0 f 30742 33 1 0 e 30743 33 1 0 2 3 4 7 8 10 11 12 13 14 17 21 22 31 32 30744 33 1 0 e 30745 33 1 0 f 30746 33 1 0 e 30747 33 1 0 e 30748 33 1 0 e 30749 33 1 0 0 2 4 5 14 16 18 19 20 21 25 26 27 29 30 31 30750 33 1 0 e 30751 33 1 0 0 3 5 6 8 9 10 11 13 15 16 17 20 24 25 29 31 30752 33 1 0 e 30753 33 1 0 0 3 6 10 12 13 17 19 22 24 25 30 31 30754 33 1 0 e 30755 33 1 0 0 1 3 4 6 7 10 19 21 23 24 25 26 27 28 29 30 32 30756 33 1 0 e 30757 33 1 0 e 30758 33 1 0 e 30759 33 1 0 f 30760 33 1 0 e 30761 33 1 0 0 2 3 4 7 8 9 13 15 17 22 23 24 25 26 27 28 31 32 30762 33 1 0 e 30763 33 1 0 f 30764 33 1 0 e 30765 33 1 0 e 30766 33 1 0 e 30767 33 1 0 0 4 9 10 14 15 16 28 30768 33 1 0 e 30769 33 1 0 1 2 5 7 12 13 14 16 17 20 21 23 24 28 32 30770 33 1 0 e 30771 33 1 0 0 2 3 5 6 7 12 13 14 15 20 22 23 26 27 28 30 31 30772 33 1 0 e 30773 33 1 0 2 5 10 12 15 16 18 19 21 23 25 28 29 30 31 32 30774 33 1 0 e 30775 33 1 0 e 30776 33 1 0 e 30777 33 1 0 f 30778 33 1 0 e 30779 33 1 0 0 1 2 3 4 5 6 7 8 11 13 16 22 23 28 29 30 32 30780 33 1 0 e 30781 33 1 0 f 30782 33 1 0 e 30783 33 1 0 e 30784 33 1 0 e 30785 33 1 0 1 2 4 5 7 13 15 17 19 20 23 24 26 31 32 30786 33 1 0 e 30787 33 1 0 3 4 5 6 7 8 9 10 12 13 14 16 20 21 22 23 25 26 27 31 30788 33 1 0 e 30789 33 1 0 1 2 4 5 15 16 17 18 19 21 26 27 32 30790 33 1 0 e 30791 33 1 0 0 1 2 6 7 8 10 14 15 19 23 26 27 28 30 31 30792 33 1 1 e 30793 33 1 1 e 30794 33 1 1 e 30795 33 1 1 f 30796 33 1 1 e 30797 33 1 1 0 2 7 9 11 14 16 18 19 20 24 30 32 30798 33 1 1 e 30799 33 1 1 f 30800 33 1 1 e 30801 33 1 1 e 30802 33 1 1 e 30803 33 1 1 2 3 4 5 7 10 11 14 17 20 21 25 26 27 28 29 30 32 30804 33 1 1 e 30805 33 1 1 0 4 5 7 9 12 14 17 18 19 20 23 24 25 28 31 30806 33 1 1 e 30807 33 1 1 2 4 5 9 11 12 13 15 17 19 22 24 25 27 29 32 30808 33 1 1 e 30809 33 1 1 1 6 11 12 15 19 20 21 22 26 28 30 31 30810 33 1 1 e 30811 33 1 1 e 30812 33 1 1 e 30813 33 1 1 f 30814 33 1 1 e 30815 33 1 1 2 4 5 7 8 9 12 13 16 19 20 21 24 28 29 32 30816 33 1 1 e 30817 33 1 1 f 30818 33 1 1 e 30819 33 1 1 e 30820 33 1 1 e 30821 33 1 1 0 8 9 10 15 16 18 19 20 23 24 25 26 28 30822 33 1 1 e 30823 33 1 1 0 1 2 3 4 6 7 8 9 10 11 12 13 14 18 19 24 26 27 29 30824 33 1 1 e 30825 33 1 1 0 2 5 9 12 13 14 17 19 20 21 24 27 28 29 31 32 30826 33 1 1 e 30827 33 1 1 1 3 4 5 6 19 24 25 26 31 32 30828 33 1 1 e 30829 33 1 1 e 30830 33 1 1 e 30831 33 1 1 f 30832 33 1 1 e 30833 33 1 1 0 2 7 9 12 16 18 21 22 24 25 27 29 30834 33 1 1 e 30835 33 1 1 f 30836 33 1 1 e 30837 33 1 1 e 30838 33 1 1 e 30839 33 1 1 0 5 6 13 15 17 18 24 26 28 30 32 30840 33 1 1 e 30841 33 1 1 0 1 7 8 10 12 16 19 22 23 24 25 29 30 32 30842 33 1 1 e 30843 33 1 1 0 7 10 11 12 13 15 25 28 29 30844 33 1 1 e 30845 33 1 1 0 1 2 5 6 9 11 13 17 19 20 21 23 24 25 27 30 30846 33 1 1 e 30847 33 1 1 e 30848 33 1 1 e 30849 33 1 1 f 30850 33 1 1 e 30851 33 1 1 2 4 7 8 9 10 12 13 14 16 17 19 21 22 23 25 28 29 30 30852 33 1 1 e 30853 33 1 1 f 30854 33 1 1 e 30855 33 1 1 e 30856 33 1 1 e 30857 33 1 1 1 2 3 5 6 8 9 10 12 15 22 25 26 28 30 32 30858 33 1 1 e 30859 33 1 1 0 3 5 7 13 16 17 21 23 26 28 29 31 30860 33 1 1 e 30861 33 1 1 6 7 8 9 10 11 17 22 23 26 28 29 30862 33 1 1 e 30863 33 1 1 1 3 4 8 9 16 19 22 24 26 29 30864 63 0 0 e 30865 63 0 0 e 30866 63 0 0 e 30867 63 0 0 f 30868 63 0 0 e 30869 63 0 0 1 2 3 4 7 9 10 13 17 23 27 28 35 36 38 41 44 45 46 47 48 55 56 58 59 60 30870 63 0 0 e 30871 63 0 0 f 30872 63 0 0 e 30873 63 0 0 e 30874 63 0 0 e 30875 63 0 0 2 4 8 10 12 13 15 19 20 21 22 23 26 29 32 33 36 38 40 42 45 46 48 49 50 52 54 55 57 58 59 61 62 30876 63 0 0 e 30877 63 0 0 1 2 3 5 7 13 14 16 17 19 22 23 24 30 31 33 34 39 41 42 43 44 45 46 47 48 52 55 56 60 61 30878 63 0 0 e 30879 63 0 0 0 4 5 6 9 11 14 16 18 23 25 27 28 30 32 33 34 39 44 45 48 51 55 56 57 60 61 62 30880 63 0 0 e 30881 63 0 0 0 2 4 9 12 13 14 19 20 22 25 27 30 35 36 38 40 41 45 47 48 51 53 56 60 61 62 30882 63 0 0 e 30883 63 0 0 e 30884 63 0 0 e 30885 63 0 0 f 30886 63 0 0 e 30887 63 0 0 0 1 2 4 5 6 7 8 9 10 14 16 18 19 20 22 27 28 30 33 34 36 41 42 43 45 46 48 49 51 56 57 60 62 30888 63 0 0 e 30889 63 0 0 f 30890 63 0 0 e 30891 63 0 0 e 30892 63 0 0 e 30893 63 0 0 0 1 3 5 7 10 11 12 13 14 15 16 17 22 23 27 29 30 31 32 35 36 37 40 41 42 43 48 51 53 54 55 56 57 59 60 62 30894 63 0 0 e 30895 63 0 0 0 1 5 8 9 10 12 13 15 18 20 21 22 28 30 31 36 37 38 39 40 45 49 50 52 53 54 57 58 59 61 62 30896 63 0 0 e 30897 63 0 0 0 8 9 10 12 13 14 17 20 23 24 26 27 31 34 37 39 40 41 42 45 53 54 55 56 58 59 61 30898 63 0 0 e 30899 63 0 0 0 3 5 7 8 9 16 17 18 24 26 29 30 31 33 35 47 50 54 57 58 60 30900 63 0 0 e 30901 63 0 0 e 30902 63 0 0 e 30903 63 0 0 f 30904 63 0 0 e 30905 63 0 0 0 1 7 8 9 16 18 21 23 27 28 29 30 31 32 33 34 35 38 41 42 45 46 49 50 51 52 57 61 30906 63 0 0 e 30907 63 0 0 f 30908 63 0 0 e 30909 63 0 0 e 30910 63 0 0 e 30911 63 0 0 0 2 3 4 10 11 12 13 14 21 22 26 27 28 29 30 32 36 38 39 43 44 45 46 47 48 49 50 53 55 56 57 60 61 30912 63 0 0 e 30913 63 0 0 0 1 2 5 6 7 8 9 10 14 15 20 21 25 30 31 33 35 38 41 43 46 47 52 53 54 59 60 62 30914 63 0 0 e 30915 63 0 0 0 1 2 3 6 8 9 10 11 12 14 15 16 17 18 20 21 26 27 30 33 34 36 37 39 41 43 46 47 48 52 58 59 62 30916 63 0 0 e 30917 63 0 0 0 2 4 8 9 10 14 15 16 17 18 19 20 25 29 33 34 36 37 41 42 46 48 52 53 62 30918 63 0 0 e 30919 63 0 0 e 30920 63 0 0 e 30921 63 0 0 f 30922 63 0 0 e 30923 63 0 0 1 4 8 9 10 12 14 15 16 18 19 22 23 24 25 26 27 28 30 37 38 41 42 44 47 48 60 61 30924 63 0 0 e 30925 63 0 0 f 30926 63 0 0 e 30927 63 0 0 e 30928 63 0 0 e 30929 63 0 0 0 1 6 7 8 9 12 13 14 16 17 18 22 23 25 27 28 31 34 36 42 43 44 46 48 51 52 53 55 57 60 61 62 30930 63 0 0 e 30931 63 0 0 2 3 4 6 9 10 11 13 14 16 17 21 22 23 28 29 30 31 33 34 35 37 39 40 46 55 56 57 59 60 62 30932 63 0 0 e 30933 63 0 0 4 6 10 11 12 14 15 16 21 24 27 28 29 31 32 34 35 36 38 39 42 43 47 48 51 52 54 57 59 60 30934 63 0 0 e 30935 63 0 0 0 1 4 5 9 10 12 13 16 17 18 19 21 27 29 31 33 34 35 37 38 39 41 51 52 54 55 60 61 62 30936 63 0 1 e 30937 63 0 1 e 30938 63 0 1 e 30939 63 0 1 f 30940 63 0 1 e 30941 63 0 1 3 4 6 8 9 13 18 19 20 22 24 26 27 28 29 32 33 35 39 40 41 45 46 47 48 49 50 51 52 54 55 56 57 58 59 60 61 30942 63 0 1 e 30943 63 0 1 f 30944 63 0 1 e 30945 63 0 1 e 30946 63 0 1 e 30947 63 0 1 3 9 10 11 13 16 18 23 26 27 29 31 33 36 39 40 41 43 48 49 51 52 55 60 61 62 30948 63 0 1 e 30949 63 0 1 1 5 7 9 10 16 17 22 23 25 29 32 33 34 36 37 39 40 44 45 46 47 48 50 52 53 56 57 60 61 62 30950 63 0 1 e 30951 63 0 1 2 3 4 5 7 8 11 14 15 17 18 19 20 21 23 24 25 28 30 34 35 36 42 45 46 50 51 52 56 58 30952 63 0 1 e 30953 63 0 1 0 4 6 7 8 10 13 14 15 17 23 25 28 30 35 38 39 40 42 44 46 47 49 50 51 57 59 60 61 62 30954 63 0 1 e 30955 63 0 1 e 30956 63 0 1 e 30957 63 0 1 f 30958 63 0 1 e 30959 63 0 1 0 2 6 7 11 12 13 15 18 20 21 22 25 29 30 32 33 34 37 38 40 43 45 46 48 49 50 51 52 55 57 62 30960 63 0 1 e 30961 63 0 1 f 30962 63 0 1 e 30963 63 0 1 e 30964 63 0 1 e 30965 63 0 1 0 2 4 5 8 11 12 18 19 20 23 24 25 29 30 31 32 34 35 36 38 39 41 43 48 49 50 52 54 56 57 58 59 30966 63 0 1 e 30967 63 0 1 0 1 6 7 9 12 15 16 17 18 19 21 25 26 27 29 30 32 34 35 37 38 39 40 43 45 48 50 55 56 58 60 61 62 30968 63 0 1 e 30969 63 0 1 1 6 7 8 11 12 13 15 16 17 18 19 25 27 28 30 33 37 38 39 43 44 45 49 50 51 53 54 56 61 30970 63 0 1 e 30971 63 0 1 0 6 8 10 12 14 19 20 21 23 26 27 30 31 33 36 38 39 44 45 48 50 51 53 54 58 30972 63 0 1 e 30973 63 0 1 e 30974 63 0 1 e 30975 63 0 1 f 30976 63 0 1 e 30977 63 0 1 1 2 6 10 11 12 14 15 17 18 21 22 25 26 27 28 30 33 35 36 40 41 47 48 49 50 52 53 54 57 58 61 30978 63 0 1 e 30979 63 0 1 f 30980 63 0 1 e 30981 63 0 1 e 30982 63 0 1 e 30983 63 0 1 1 4 5 10 11 12 13 15 16 18 20 22 24 25 28 29 30 31 33 35 36 38 39 43 44 48 50 55 56 57 58 61 30984 63 0 1 e 30985 63 0 1 0 1 2 5 6 7 8 9 10 12 15 16 19 22 23 26 34 37 41 42 45 52 59 60 61 62 30986 63 0 1 e 30987 63 0 1 3 4 5 7 10 11 12 13 16 17 18 21 22 23 25 28 29 31 32 33 37 38 40 41 42 43 45 46 47 48 49 50 51 53 57 59 61 62 30988 63 0 1 e 30989 63 0 1 3 4 9 10 11 12 15 16 18 21 23 24 29 32 34 36 37 39 41 44 49 52 57 58 61 30990 63 0 1 e 30991 63 0 1 e 30992 63 0 1 e 30993 63 0 1 f 30994 63 0 1 e 30995 63 0 1 0 1 4 6 8 11 12 13 14 15 16 17 18 20 23 24 33 34 35 37 41 42 44 45 46 47 49 50 52 55 56 58 60 62 30996 63 0 1 e 30997 63 0 1 f 30998 63 0 1 e 30999 63 0 1 e 31000 63 0 1 e 31001 63 0 1 4 6 7 8 9 10 13 17 19 20 21 22 23 24 26 29 32 37 38 39 40 43 46 48 52 53 55 56 57 58 59 31002 63 0 1 e 31003 63 0 1 1 2 3 5 7 9 10 11 12 15 16 18 23 24 25 27 30 31 32 33 34 36 37 40 41 43 46 48 50 52 56 60 31004 63 0 1 e 31005 63 0 1 1 3 6 7 9 10 15 17 21 22 23 24 28 29 31 34 40 41 43 44 47 50 53 54 55 56 57 31006 63 0 1 e 31007 63 0 1 0 2 4 6 11 12 13 16 17 18 20 21 24 26 27 29 32 33 43 46 47 48 49 50 53 54 58 61 62 31008 63 1 0 e 31009 63 1 0 e 31010 63 1 0 e 31011 63 1 0 f 31012 63 1 0 e 31013 63 1 0 0 4 5 6 11 12 13 14 19 20 23 24 26 27 28 29 31 33 34 37 38 39 40 41 43 44 48 50 51 52 54 55 56 57 58 59 60 31014 63 1 0 e 31015 63 1 0 f 31016 63 1 0 e 31017 63 1 0 e 31018 63 1 0 e 31019 63 1 0 0 2 4 5 6 7 8 9 11 12 13 14 15 16 18 19 22 26 27 33 35 37 38 41 42 44 46 53 54 56 58 61 31020 63 1 0 e 31021 63 1 0 1 2 3 5 8 10 11 12 15 18 19 21 23 31 33 35 36 37 39 41 45 46 47 48 49 50 52 55 56 59 60 62 31022 63 1 0 e 31023 63 1 0 0 1 2 4 6 7 8 9 11 13 14 15 16 17 18 21 24 25 26 27 28 32 33 36 39 40 44 45 46 50 52 53 55 59 62 31024 63 1 0 e 31025 63 1 0 0 3 6 8 9 10 11 12 13 14 17 21 22 25 30 31 33 34 36 39 44 47 48 49 50 51 55 58 60 31026 63 1 0 e 31027 63 1 0 e 31028 63 1 0 e 31029 63 1 0 f 31030 63 1 0 e 31031 63 1 0 1 4 6 8 11 14 15 16 17 18 19 20 22 23 24 26 27 28 29 30 32 36 38 40 44 46 49 51 54 56 59 62 31032 63 1 0 e 31033 63 1 0 f 31034 63 1 0 e 31035 63 1 0 e 31036 63 1 0 e 31037 63 1 0 2 3 4 6 10 12 13 18 22 23 24 26 27 28 30 31 32 37 39 41 42 43 45 46 47 48 50 51 54 55 58 62 31038 63 1 0 e 31039 63 1 0 2 7 11 13 15 16 18 20 21 22 25 26 30 31 32 33 34 36 38 40 42 43 44 46 47 49 53 54 55 56 60 62 31040 63 1 0 e 31041 63 1 0 3 5 6 7 9 10 12 13 15 17 19 22 24 26 37 41 43 48 49 50 51 52 53 54 56 58 60 61 31042 63 1 0 e 31043 63 1 0 2 3 5 6 12 17 22 23 24 29 31 33 37 40 46 47 49 52 53 54 55 56 57 61 62 31044 63 1 0 e 31045 63 1 0 e 31046 63 1 0 e 31047 63 1 0 f 31048 63 1 0 e 31049 63 1 0 1 2 4 7 10 12 13 14 16 17 20 21 22 23 25 28 33 37 40 42 43 45 48 49 50 52 55 57 61 31050 63 1 0 e 31051 63 1 0 f 31052 63 1 0 e 31053 63 1 0 e 31054 63 1 0 e 31055 63 1 0 0 7 9 10 12 13 14 18 19 24 25 26 27 31 38 39 40 42 45 46 48 50 51 53 55 57 59 60 31056 63 1 0 e 31057 63 1 0 0 1 2 3 5 6 7 8 9 11 12 13 15 25 27 28 29 31 32 34 36 37 39 42 45 46 50 52 54 55 58 31058 63 1 0 e 31059 63 1 0 1 3 4 6 7 8 10 11 12 13 14 16 20 21 23 24 25 26 28 29 31 35 37 40 41 42 43 44 46 51 52 56 58 60 61 62 31060 63 1 0 e 31061 63 1 0 0 4 9 10 13 14 17 19 20 21 24 25 27 31 40 41 42 45 49 50 51 53 55 58 60 61 31062 63 1 0 e 31063 63 1 0 e 31064 63 1 0 e 31065 63 1 0 f 31066 63 1 0 e 31067 63 1 0 1 2 3 7 8 9 13 15 17 19 21 23 24 30 31 32 33 34 37 40 41 42 44 46 48 50 55 56 57 60 62 31068 63 1 0 e 31069 63 1 0 f 31070 63 1 0 e 31071 63 1 0 e 31072 63 1 0 e 31073 63 1 0 1 3 6 7 8 9 10 13 15 16 18 20 22 23 24 29 33 34 36 38 41 42 45 46 47 48 49 50 51 52 57 58 61 31074 63 1 0 e 31075 63 1 0 1 2 4 5 7 8 9 11 12 14 16 18 20 21 22 26 30 31 32 33 34 35 36 38 41 46 48 49 52 54 56 57 62 31076 63 1 0 e 31077 63 1 0 0 1 3 4 5 11 12 13 14 17 18 19 20 22 23 25 29 34 35 36 37 39 40 44 45 46 47 51 52 53 55 58 59 60 61 62 31078 63 1 0 e 31079 63 1 0 0 6 9 13 14 15 17 19 22 25 26 33 34 36 39 40 41 43 45 46 47 48 50 51 54 55 56 61 31080 63 1 1 e 31081 63 1 1 e 31082 63 1 1 e 31083 63 1 1 f 31084 63 1 1 e 31085 63 1 1 0 4 11 14 15 17 18 22 23 24 26 30 33 37 38 41 50 51 52 53 54 55 59 60 62 31086 63 1 1 e 31087 63 1 1 f 31088 63 1 1 e 31089 63 1 1 e 31090 63 1 1 e 31091 63 1 1 0 1 2 4 5 6 8 9 10 14 15 16 25 26 31 33 35 36 37 38 45 47 48 50 51 54 56 58 59 61 62 31092 63 1 1 e 31093 63 1 1 0 4 5 6 7 8 9 10 11 12 14 15 16 17 22 25 26 27 28 29 33 34 36 39 43 44 46 47 48 54 55 58 61 62 31094 63 1 1 e 31095 63 1 1 2 3 4 7 8 9 11 12 14 15 17 19 21 22 27 28 31 32 33 36 38 40 45 46 49 50 56 57 60 31096 63 1 1 e 31097 63 1 1 7 9 10 13 18 20 21 24 26 29 30 33 34 36 37 38 40 41 43 46 49 51 53 54 56 57 58 59 31098 63 1 1 e 31099 63 1 1 e 31100 63 1 1 e 31101 63 1 1 f 31102 63 1 1 e 31103 63 1 1 0 3 4 5 7 8 10 11 15 17 21 23 24 26 29 31 33 34 35 36 37 38 39 41 43 45 48 49 50 52 55 56 58 59 60 62 31104 63 1 1 e 31105 63 1 1 f 31106 63 1 1 e 31107 63 1 1 e 31108 63 1 1 e 31109 63 1 1 0 1 3 6 10 12 13 14 16 17 18 19 24 27 29 30 31 32 33 34 35 38 41 48 49 50 51 53 55 56 59 61 62 31110 63 1 1 e 31111 63 1 1 1 2 3 4 5 7 9 16 18 19 22 23 25 26 27 28 35 36 38 42 43 44 48 55 58 59 60 61 31112 63 1 1 e 31113 63 1 1 1 2 4 8 14 15 17 21 22 24 25 27 28 31 33 34 35 36 39 42 47 48 50 51 54 55 56 59 31114 63 1 1 e 31115 63 1 1 1 2 4 5 6 8 9 13 14 20 21 23 26 28 31 33 37 39 40 43 44 45 46 47 48 49 50 51 53 55 56 57 58 60 31116 63 1 1 e 31117 63 1 1 e 31118 63 1 1 e 31119 63 1 1 f 31120 63 1 1 e 31121 63 1 1 1 7 8 10 11 12 13 16 17 18 19 20 21 24 26 27 28 33 34 35 36 37 39 43 45 48 51 52 53 55 56 59 60 61 62 31122 63 1 1 e 31123 63 1 1 f 31124 63 1 1 e 31125 63 1 1 e 31126 63 1 1 e 31127 63 1 1 6 7 14 15 18 19 21 23 24 34 35 36 39 40 42 43 49 50 51 52 62 31128 63 1 1 e 31129 63 1 1 0 2 4 5 10 11 13 15 16 17 23 26 27 31 32 35 40 43 45 46 51 53 54 55 56 58 60 31130 63 1 1 e 31131 63 1 1 2 6 7 12 13 18 20 22 23 27 29 30 37 38 40 41 42 45 48 50 58 60 31132 63 1 1 e 31133 63 1 1 0 2 3 4 7 9 10 11 12 13 14 15 16 17 20 22 23 26 28 29 30 31 34 35 36 37 39 41 44 45 46 47 48 50 53 56 57 58 31134 63 1 1 e 31135 63 1 1 e 31136 63 1 1 e 31137 63 1 1 f 31138 63 1 1 e 31139 63 1 1 0 2 3 5 6 8 10 11 12 13 15 20 21 22 23 24 25 29 30 35 40 43 47 48 49 51 57 58 59 60 31140 63 1 1 e 31141 63 1 1 f 31142 63 1 1 e 31143 63 1 1 e 31144 63 1 1 e 31145 63 1 1 0 3 4 5 8 9 11 13 16 17 18 22 23 24 25 27 29 31 32 34 36 37 40 43 44 47 48 49 50 51 54 55 56 57 58 59 61 62 31146 63 1 1 e 31147 63 1 1 1 2 7 8 9 10 11 13 14 15 16 22 26 27 31 43 49 51 52 59 31148 63 1 1 e 31149 63 1 1 3 4 5 7 9 11 12 16 18 19 21 22 23 26 28 30 34 36 38 40 41 42 44 45 46 48 52 53 54 55 56 59 61 62 31150 63 1 1 e 31151 63 1 1 1 3 5 7 9 11 14 15 17 18 20 24 27 29 32 34 36 37 38 39 41 44 45 46 47 50 51 53 54 55 56 57 60 31152 64 0 0 e 31153 64 0 0 e 31154 64 0 0 e 31155 64 0 0 f 31156 64 0 0 e 31157 64 0 0 2 3 5 6 10 11 12 13 14 15 19 20 21 22 23 24 26 30 32 33 38 39 41 42 47 48 51 54 57 58 59 31158 64 0 0 e 31159 64 0 0 f 31160 64 0 0 e 31161 64 0 0 e 31162 64 0 0 e 31163 64 0 0 0 1 7 8 9 16 17 20 28 30 31 32 34 35 38 39 40 41 42 43 44 46 48 49 50 52 53 55 56 57 58 59 60 61 31164 64 0 0 e 31165 64 0 0 5 7 8 9 12 13 14 15 18 19 20 22 24 26 28 29 32 33 37 38 40 42 44 45 50 52 53 55 59 60 61 63 31166 64 0 0 e 31167 64 0 0 0 2 5 6 7 8 9 11 13 15 18 19 22 24 25 27 28 29 30 33 37 38 39 40 41 43 45 47 48 49 52 53 55 60 63 31168 64 0 0 e 31169 64 0 0 0 1 4 5 6 7 10 11 12 13 15 16 18 20 21 27 29 30 31 32 36 39 41 46 51 54 56 61 62 63 31170 64 0 0 e 31171 64 0 0 e 31172 64 0 0 e 31173 64 0 0 f 31174 64 0 0 e 31175 64 0 0 1 5 9 12 15 17 19 23 24 26 27 28 29 32 34 37 38 39 40 43 46 47 49 50 51 58 62 31176 64 0 0 e 31177 64 0 0 f 31178 64 0 0 e 31179 64 0 0 e 31180 64 0 0 e 31181 64 0 0 1 3 4 5 7 9 11 14 15 17 19 20 21 22 25 26 29 30 31 35 36 38 39 41 42 44 50 51 52 54 55 56 58 60 61 62 31182 64 0 0 e 31183 64 0 0 3 4 5 7 9 10 13 16 17 18 23 25 26 27 30 31 33 34 36 37 39 40 44 45 46 47 48 49 50 54 55 57 60 31184 64 0 0 e 31185 64 0 0 0 5 9 12 14 15 16 17 18 21 22 23 24 27 28 31 34 36 37 43 44 45 49 53 56 58 59 31186 64 0 0 e 31187 64 0 0 0 3 4 5 6 7 9 11 12 14 15 17 24 26 28 29 33 35 37 40 45 46 49 52 55 56 57 58 60 61 62 63 31188 64 0 0 e 31189 64 0 0 e 31190 64 0 0 e 31191 64 0 0 f 31192 64 0 0 e 31193 64 0 0 1 2 4 5 6 10 12 15 16 17 18 20 21 23 24 25 26 28 29 30 32 33 36 38 40 41 44 45 47 48 51 53 62 63 31194 64 0 0 e 31195 64 0 0 f 31196 64 0 0 e 31197 64 0 0 e 31198 64 0 0 e 31199 64 0 0 1 2 4 5 7 9 12 13 15 17 18 19 22 23 27 28 30 31 35 40 41 46 47 48 51 52 53 55 56 59 60 63 31200 64 0 0 e 31201 64 0 0 0 1 2 3 4 5 6 9 11 12 13 15 19 21 23 24 29 30 31 32 33 34 38 39 41 42 43 44 46 51 53 54 55 56 57 60 61 63 31202 64 0 0 e 31203 64 0 0 2 3 4 15 17 18 19 21 22 24 25 26 27 28 29 31 32 33 34 36 37 39 40 41 43 44 47 48 49 50 51 52 54 56 57 63 31204 64 0 0 e 31205 64 0 0 0 4 6 8 9 11 12 13 14 15 16 17 18 19 23 25 27 28 29 31 32 34 37 39 40 41 44 46 49 50 53 54 56 58 60 61 62 31206 64 0 0 e 31207 64 0 0 e 31208 64 0 0 e 31209 64 0 0 f 31210 64 0 0 e 31211 64 0 0 0 2 6 8 12 14 15 16 17 18 20 21 22 24 27 28 29 30 31 32 33 34 37 38 39 41 45 46 48 49 52 54 56 57 60 63 31212 64 0 0 e 31213 64 0 0 f 31214 64 0 0 e 31215 64 0 0 e 31216 64 0 0 e 31217 64 0 0 0 1 3 6 7 10 11 13 14 15 16 19 20 26 27 28 30 31 33 37 38 40 44 45 46 48 49 52 57 58 62 31218 64 0 0 e 31219 64 0 0 0 2 3 4 6 8 9 13 14 15 17 20 25 28 29 31 34 36 38 39 41 42 44 45 47 48 49 51 52 53 56 57 58 59 60 31220 64 0 0 e 31221 64 0 0 1 5 6 8 9 10 11 12 14 15 16 18 19 21 24 26 28 30 31 32 34 36 40 41 42 44 45 46 48 49 50 53 55 56 57 58 60 61 62 63 31222 64 0 0 e 31223 64 0 0 3 4 7 9 13 14 15 16 17 19 20 21 22 23 24 26 28 30 31 33 36 38 40 42 44 47 48 52 56 57 58 60 61 62 31224 64 0 1 e 31225 64 0 1 e 31226 64 0 1 e 31227 64 0 1 f 31228 64 0 1 e 31229 64 0 1 0 1 3 4 6 8 13 14 15 17 18 21 22 25 26 28 36 39 40 41 44 45 48 49 50 52 53 54 56 57 58 61 62 31230 64 0 1 e 31231 64 0 1 f 31232 64 0 1 e 31233 64 0 1 e 31234 64 0 1 e 31235 64 0 1 0 1 3 5 6 8 10 11 13 15 16 19 21 23 24 25 27 28 32 34 35 38 39 42 43 44 45 50 52 54 55 56 57 60 31236 64 0 1 e 31237 64 0 1 0 3 5 6 10 11 12 13 15 17 19 20 21 24 30 31 32 34 36 37 43 44 45 46 52 55 56 57 59 60 62 63 31238 64 0 1 e 31239 64 0 1 0 3 4 5 9 13 14 15 17 21 28 32 34 36 37 40 41 43 48 50 51 53 54 56 59 62 63 31240 64 0 1 e 31241 64 0 1 2 3 5 9 14 15 16 20 21 24 28 31 34 35 37 43 44 45 47 49 50 51 52 53 54 59 60 61 63 31242 64 0 1 e 31243 64 0 1 e 31244 64 0 1 e 31245 64 0 1 f 31246 64 0 1 e 31247 64 0 1 0 1 2 3 11 14 16 17 18 19 20 21 23 27 30 34 35 36 38 42 43 44 45 46 47 48 49 50 55 56 57 58 61 31248 64 0 1 e 31249 64 0 1 f 31250 64 0 1 e 31251 64 0 1 e 31252 64 0 1 e 31253 64 0 1 0 1 2 5 6 7 8 9 11 18 19 21 22 24 25 27 29 31 33 34 36 37 42 45 46 52 53 55 56 59 60 63 31254 64 0 1 e 31255 64 0 1 1 2 3 5 6 8 9 10 11 14 17 20 21 22 24 25 26 27 28 29 32 34 37 40 43 44 45 48 50 51 53 56 59 60 62 63 31256 64 0 1 e 31257 64 0 1 5 6 7 9 10 12 14 15 16 21 23 24 25 26 27 29 30 31 32 33 34 38 40 52 54 57 58 61 62 31258 64 0 1 e 31259 64 0 1 4 5 6 7 8 9 11 13 14 18 20 21 22 25 27 28 30 31 32 33 34 35 36 44 45 47 48 49 51 53 56 59 63 31260 64 0 1 e 31261 64 0 1 e 31262 64 0 1 e 31263 64 0 1 f 31264 64 0 1 e 31265 64 0 1 0 2 4 5 6 7 8 10 13 14 15 16 17 21 22 24 28 31 32 35 36 38 39 41 43 46 48 54 55 56 59 60 61 31266 64 0 1 e 31267 64 0 1 f 31268 64 0 1 e 31269 64 0 1 e 31270 64 0 1 e 31271 64 0 1 2 7 9 10 11 12 13 14 15 16 20 23 24 26 30 32 35 39 41 43 45 47 48 54 55 57 58 59 60 62 31272 64 0 1 e 31273 64 0 1 1 4 6 7 8 12 14 15 17 18 21 25 26 27 29 31 32 33 35 36 37 39 41 44 45 48 49 52 53 56 61 31274 64 0 1 e 31275 64 0 1 0 1 3 4 5 6 8 9 10 11 12 13 14 15 16 18 19 24 25 27 29 31 35 36 37 38 39 41 43 45 46 47 48 51 55 56 59 60 61 31276 64 0 1 e 31277 64 0 1 0 5 7 9 12 14 15 16 17 18 23 25 26 28 29 33 34 36 37 39 42 43 46 53 55 56 57 60 61 63 31278 64 0 1 e 31279 64 0 1 e 31280 64 0 1 e 31281 64 0 1 f 31282 64 0 1 e 31283 64 0 1 0 1 3 4 5 6 11 13 15 16 19 22 23 24 26 28 29 30 31 32 35 40 43 45 46 50 51 52 53 58 61 62 63 31284 64 0 1 e 31285 64 0 1 f 31286 64 0 1 e 31287 64 0 1 e 31288 64 0 1 e 31289 64 0 1 1 3 7 8 9 10 12 13 16 18 19 24 26 27 28 29 30 31 33 35 36 37 41 42 45 47 48 49 50 51 52 53 54 55 57 59 61 63 31290 64 0 1 e 31291 64 0 1 0 1 2 3 5 6 7 10 12 13 16 17 21 22 25 26 27 29 31 34 35 37 38 39 40 41 43 45 46 48 50 51 57 60 61 31292 64 0 1 e 31293 64 0 1 0 1 4 7 8 9 14 16 17 22 26 31 32 34 37 39 40 42 43 46 47 50 53 56 57 60 62 31294 64 0 1 e 31295 64 0 1 0 1 2 3 4 5 7 9 11 14 16 17 19 20 21 22 23 25 26 28 33 34 39 40 41 43 44 48 49 50 54 55 56 60 62 31296 64 1 0 e 31297 64 1 0 e 31298 64 1 0 e 31299 64 1 0 f 31300 64 1 0 e 31301 64 1 0 0 1 2 5 6 8 9 11 13 15 16 17 19 22 23 25 26 27 29 32 35 36 39 43 45 48 49 51 52 53 54 56 57 59 60 61 31302 64 1 0 e 31303 64 1 0 f 31304 64 1 0 e 31305 64 1 0 e 31306 64 1 0 e 31307 64 1 0 0 2 3 7 8 9 12 13 14 16 17 19 20 23 25 26 27 28 29 31 32 33 35 36 38 39 40 41 42 43 45 46 47 49 50 51 52 53 55 56 60 62 31308 64 1 0 e 31309 64 1 0 1 2 4 6 7 8 11 12 13 15 17 19 20 21 24 25 28 31 36 39 40 41 42 44 45 48 51 58 60 31310 64 1 0 e 31311 64 1 0 0 3 4 10 11 15 16 18 20 21 22 25 26 28 29 30 32 33 34 35 36 37 38 42 45 46 48 49 56 60 61 31312 64 1 0 e 31313 64 1 0 2 3 4 5 9 11 12 13 15 18 19 21 22 25 27 29 32 34 36 37 38 42 43 44 49 50 51 53 54 59 60 62 63 31314 64 1 0 e 31315 64 1 0 e 31316 64 1 0 e 31317 64 1 0 f 31318 64 1 0 e 31319 64 1 0 0 1 2 6 7 8 10 12 13 14 15 17 19 21 24 26 29 30 32 34 35 36 37 38 39 43 46 47 49 50 51 52 55 56 61 62 63 31320 64 1 0 e 31321 64 1 0 f 31322 64 1 0 e 31323 64 1 0 e 31324 64 1 0 e 31325 64 1 0 0 3 6 8 12 17 21 23 29 31 32 37 40 45 47 50 52 54 55 58 60 61 62 31326 64 1 0 e 31327 64 1 0 2 3 4 5 6 8 9 14 18 19 27 28 29 31 34 36 37 38 39 40 43 44 51 54 55 56 59 60 61 62 31328 64 1 0 e 31329 64 1 0 0 2 3 5 7 8 9 10 11 12 14 19 20 22 23 30 32 34 35 37 39 40 41 45 50 51 52 54 55 56 57 58 59 60 62 31330 64 1 0 e 31331 64 1 0 6 7 9 10 12 13 14 17 19 20 22 25 26 28 29 30 31 32 33 35 36 37 39 41 42 43 45 50 51 52 53 55 57 58 60 62 63 31332 64 1 0 e 31333 64 1 0 e 31334 64 1 0 e 31335 64 1 0 f 31336 64 1 0 e 31337 64 1 0 0 2 4 7 8 9 15 16 17 18 23 24 29 33 37 40 42 43 44 46 48 49 50 52 53 54 55 59 61 31338 64 1 0 e 31339 64 1 0 f 31340 64 1 0 e 31341 64 1 0 e 31342 64 1 0 e 31343 64 1 0 3 7 8 9 10 11 13 17 20 24 25 27 28 29 34 38 39 40 42 43 45 51 54 55 56 57 60 63 31344 64 1 0 e 31345 64 1 0 1 4 9 10 13 15 16 19 22 23 24 25 30 31 33 37 38 39 40 42 43 46 47 50 51 52 53 57 58 59 62 31346 64 1 0 e 31347 64 1 0 0 1 5 11 14 15 18 22 23 26 28 29 30 32 33 35 38 40 43 45 48 49 50 54 57 59 61 62 63 31348 64 1 0 e 31349 64 1 0 5 6 7 8 13 14 17 19 20 26 27 28 30 36 39 42 43 46 47 48 49 51 52 54 55 56 59 61 62 31350 64 1 0 e 31351 64 1 0 e 31352 64 1 0 e 31353 64 1 0 f 31354 64 1 0 e 31355 64 1 0 0 1 2 3 4 5 7 9 10 13 14 16 17 22 25 26 27 28 29 32 33 36 37 40 42 44 46 47 51 53 55 56 58 61 62 63 31356 64 1 0 e 31357 64 1 0 f 31358 64 1 0 e 31359 64 1 0 e 31360 64 1 0 e 31361 64 1 0 1 2 4 7 12 17 18 19 20 22 25 26 27 28 29 30 31 35 36 39 42 45 49 50 57 58 59 61 62 31362 64 1 0 e 31363 64 1 0 3 9 13 14 15 18 20 21 23 28 29 33 34 35 38 39 40 50 53 55 57 61 62 63 31364 64 1 0 e 31365 64 1 0 2 3 5 6 9 10 13 14 15 17 20 21 26 27 30 31 36 40 43 44 45 46 47 49 50 52 55 61 62 31366 64 1 0 e 31367 64 1 0 0 5 9 11 14 15 16 17 18 19 22 23 24 25 27 31 33 37 39 40 43 45 46 47 50 52 56 57 60 61 62 31368 64 1 1 e 31369 64 1 1 e 31370 64 1 1 e 31371 64 1 1 f 31372 64 1 1 e 31373 64 1 1 2 5 6 9 10 12 14 15 16 17 19 20 21 22 23 24 25 26 30 31 32 33 35 36 39 40 43 44 46 47 50 53 55 59 60 31374 64 1 1 e 31375 64 1 1 f 31376 64 1 1 e 31377 64 1 1 e 31378 64 1 1 e 31379 64 1 1 0 2 9 12 14 16 17 21 23 24 26 27 28 31 32 33 34 35 37 38 41 43 44 45 48 51 52 53 56 57 62 63 31380 64 1 1 e 31381 64 1 1 0 1 2 3 6 7 8 9 12 18 20 21 26 28 30 31 32 33 34 37 40 42 43 44 47 53 56 58 59 60 62 63 31382 64 1 1 e 31383 64 1 1 0 3 5 9 10 11 14 15 18 19 24 25 27 31 36 37 38 42 49 52 54 56 57 58 59 61 62 31384 64 1 1 e 31385 64 1 1 1 2 3 6 7 8 9 11 12 13 17 18 19 20 21 22 23 24 26 27 28 30 31 38 39 40 41 42 43 45 46 47 49 51 52 53 54 56 57 58 60 62 63 31386 64 1 1 e 31387 64 1 1 e 31388 64 1 1 e 31389 64 1 1 f 31390 64 1 1 e 31391 64 1 1 3 4 5 8 9 11 17 18 20 21 25 26 31 32 33 34 36 37 38 39 40 42 44 45 46 48 50 51 53 54 56 57 58 31392 64 1 1 e 31393 64 1 1 f 31394 64 1 1 e 31395 64 1 1 e 31396 64 1 1 e 31397 64 1 1 0 3 6 8 10 14 16 18 21 22 24 26 28 30 31 45 47 48 49 50 51 53 54 55 56 58 60 61 62 63 31398 64 1 1 e 31399 64 1 1 1 2 4 5 7 8 10 11 13 15 16 18 19 20 22 24 28 30 33 37 40 42 48 50 51 53 58 59 60 61 31400 64 1 1 e 31401 64 1 1 0 4 5 6 7 9 11 12 13 14 15 16 17 20 21 22 25 28 30 33 35 40 45 47 50 51 52 54 56 62 31402 64 1 1 e 31403 64 1 1 0 3 4 6 7 10 14 16 17 19 20 21 24 26 32 36 37 39 40 43 45 46 48 49 50 52 57 59 61 62 63 31404 64 1 1 e 31405 64 1 1 e 31406 64 1 1 e 31407 64 1 1 f 31408 64 1 1 e 31409 64 1 1 1 2 3 7 8 9 10 11 13 14 15 22 23 26 28 30 32 33 43 44 45 46 49 50 51 53 54 55 57 61 62 31410 64 1 1 e 31411 64 1 1 f 31412 64 1 1 e 31413 64 1 1 e 31414 64 1 1 e 31415 64 1 1 4 5 6 8 9 10 11 12 13 16 22 23 27 30 31 33 34 35 36 40 41 42 45 48 51 53 61 62 63 31416 64 1 1 e 31417 64 1 1 0 1 2 5 7 9 11 14 15 16 17 19 20 23 26 27 28 29 31 32 34 36 38 40 44 46 47 48 51 53 54 55 57 58 60 31418 64 1 1 e 31419 64 1 1 0 1 3 4 7 8 12 15 17 18 19 20 21 22 26 28 29 30 34 35 41 43 44 46 47 51 57 59 63 31420 64 1 1 e 31421 64 1 1 0 1 4 5 6 10 13 14 15 18 19 21 22 23 26 28 30 31 33 34 44 45 48 50 51 52 53 55 56 57 59 61 31422 64 1 1 e 31423 64 1 1 e 31424 64 1 1 e 31425 64 1 1 f 31426 64 1 1 e 31427 64 1 1 2 3 5 6 8 9 14 16 17 18 19 20 21 22 23 25 28 29 31 32 34 37 41 42 43 45 52 58 31428 64 1 1 e 31429 64 1 1 f 31430 64 1 1 e 31431 64 1 1 e 31432 64 1 1 e 31433 64 1 1 2 6 7 10 11 15 17 22 23 24 25 33 36 39 41 48 51 53 55 31434 64 1 1 e 31435 64 1 1 3 8 11 14 15 16 17 19 22 25 27 28 29 30 35 36 37 41 43 44 45 46 47 48 50 51 52 53 56 59 61 63 31436 64 1 1 e 31437 64 1 1 0 5 6 7 8 10 11 13 14 15 18 23 24 25 26 28 29 31 32 34 36 38 39 41 43 47 49 50 52 53 54 55 56 57 58 62 63 31438 64 1 1 e 31439 64 1 1 0 1 3 6 7 10 14 18 21 25 27 28 29 32 34 35 39 40 45 46 47 51 52 54 56 57 58 60 61 62 63 31440 65 0 0 e 31441 65 0 0 e 31442 65 0 0 e 31443 65 0 0 f 31444 65 0 0 e 31445 65 0 0 0 1 3 4 7 8 9 12 14 16 18 21 23 26 28 29 31 32 34 35 36 37 38 39 40 43 44 45 47 50 52 56 58 59 61 62 31446 65 0 0 e 31447 65 0 0 f 31448 65 0 0 e 31449 65 0 0 e 31450 65 0 0 e 31451 65 0 0 0 2 3 5 6 12 13 15 16 17 18 23 25 26 28 30 34 35 36 37 38 40 41 46 47 48 50 51 54 55 56 58 61 62 63 64 31452 65 0 0 e 31453 65 0 0 0 1 6 7 11 12 13 16 19 20 21 23 24 26 28 30 34 35 36 39 40 41 42 43 44 47 48 50 51 54 58 60 62 63 64 31454 65 0 0 e 31455 65 0 0 0 2 4 5 7 8 14 15 16 17 22 23 25 26 27 28 29 33 35 38 39 40 41 42 43 44 50 54 55 56 59 62 64 31456 65 0 0 e 31457 65 0 0 0 2 4 5 9 13 14 16 17 18 22 23 26 27 31 32 33 34 35 36 38 39 43 46 47 48 52 54 58 61 62 63 64 31458 65 0 0 e 31459 65 0 0 e 31460 65 0 0 e 31461 65 0 0 f 31462 65 0 0 e 31463 65 0 0 0 2 3 4 5 7 9 10 14 16 17 18 19 21 22 24 25 26 29 32 35 37 38 41 42 43 47 50 53 54 57 58 59 64 31464 65 0 0 e 31465 65 0 0 f 31466 65 0 0 e 31467 65 0 0 e 31468 65 0 0 e 31469 65 0 0 0 1 3 4 5 7 8 15 16 17 18 19 20 24 26 30 31 32 33 37 38 39 40 41 43 46 47 48 53 55 56 57 59 60 61 31470 65 0 0 e 31471 65 0 0 1 2 3 12 13 14 15 16 18 21 24 25 26 31 34 36 38 39 40 43 45 46 51 53 56 57 58 63 64 31472 65 0 0 e 31473 65 0 0 0 1 3 4 6 10 13 14 15 17 20 21 23 24 28 31 33 35 36 37 39 40 41 42 46 51 52 53 55 56 58 62 64 31474 65 0 0 e 31475 65 0 0 0 1 3 4 5 6 7 8 9 11 13 14 16 17 18 20 21 22 23 24 25 27 29 30 33 34 35 36 37 38 39 40 41 42 43 46 47 49 51 53 57 58 59 31476 65 0 0 e 31477 65 0 0 e 31478 65 0 0 e 31479 65 0 0 f 31480 65 0 0 e 31481 65 0 0 5 6 8 12 13 17 18 19 20 21 23 25 27 32 34 37 38 41 42 44 45 46 48 49 51 52 53 57 59 64 31482 65 0 0 e 31483 65 0 0 f 31484 65 0 0 e 31485 65 0 0 e 31486 65 0 0 e 31487 65 0 0 0 2 3 4 7 9 10 16 17 18 19 25 27 29 30 34 35 40 41 42 43 44 45 49 50 52 54 55 56 57 59 61 62 64 31488 65 0 0 e 31489 65 0 0 5 6 7 9 11 12 18 20 21 22 24 26 27 29 31 32 38 39 42 46 47 56 64 31490 65 0 0 e 31491 65 0 0 1 2 4 5 6 8 9 10 11 12 13 17 18 19 21 23 25 26 27 28 30 31 32 34 36 37 38 39 43 48 49 54 55 56 60 31492 65 0 0 e 31493 65 0 0 1 4 5 7 9 11 13 18 20 22 23 24 32 34 36 37 39 40 41 43 44 45 46 47 50 51 53 55 56 57 59 60 31494 65 0 0 e 31495 65 0 0 e 31496 65 0 0 e 31497 65 0 0 f 31498 65 0 0 e 31499 65 0 0 0 4 5 8 11 14 17 20 21 22 23 25 28 30 32 33 34 35 36 39 40 42 43 44 49 52 55 56 59 60 63 31500 65 0 0 e 31501 65 0 0 f 31502 65 0 0 e 31503 65 0 0 e 31504 65 0 0 e 31505 65 0 0 0 4 6 8 9 14 16 18 21 23 25 26 27 29 30 32 33 36 37 38 41 44 45 46 50 52 53 54 55 59 60 61 62 31506 65 0 0 e 31507 65 0 0 1 2 5 9 10 11 14 16 17 18 22 26 28 29 34 35 36 37 40 41 45 46 48 49 50 51 53 55 57 60 64 31508 65 0 0 e 31509 65 0 0 0 3 4 5 6 7 8 11 13 14 17 18 20 23 24 25 26 29 30 32 33 34 36 37 40 42 51 55 57 61 63 31510 65 0 0 e 31511 65 0 0 0 1 2 4 5 9 10 11 12 13 16 17 22 26 27 30 31 33 35 36 37 39 41 43 44 45 47 50 52 54 55 58 60 61 31512 65 0 1 e 31513 65 0 1 e 31514 65 0 1 e 31515 65 0 1 f 31516 65 0 1 e 31517 65 0 1 1 3 7 8 11 13 16 17 18 20 21 22 26 27 28 29 33 34 35 36 38 39 40 42 43 47 53 54 63 31518 65 0 1 e 31519 65 0 1 f 31520 65 0 1 e 31521 65 0 1 e 31522 65 0 1 e 31523 65 0 1 0 2 4 5 8 12 14 15 16 19 20 21 22 24 26 28 30 33 35 37 40 43 47 50 51 54 55 57 58 60 63 64 31524 65 0 1 e 31525 65 0 1 2 3 5 8 9 11 12 13 17 20 21 22 25 26 28 32 38 42 43 44 49 52 54 57 58 60 63 64 31526 65 0 1 e 31527 65 0 1 2 3 5 6 8 9 13 14 17 19 20 21 24 27 28 30 31 33 34 35 38 39 40 41 42 43 46 47 48 49 51 53 54 55 56 57 60 62 64 31528 65 0 1 e 31529 65 0 1 0 5 6 8 9 11 12 13 14 16 17 19 20 21 22 26 28 31 33 38 39 40 42 43 44 48 49 53 56 59 60 63 31530 65 0 1 e 31531 65 0 1 e 31532 65 0 1 e 31533 65 0 1 f 31534 65 0 1 e 31535 65 0 1 3 6 7 12 14 18 21 22 25 26 27 31 32 35 36 38 39 40 43 45 46 47 49 50 51 52 53 55 58 59 60 62 64 31536 65 0 1 e 31537 65 0 1 f 31538 65 0 1 e 31539 65 0 1 e 31540 65 0 1 e 31541 65 0 1 0 1 2 3 4 5 6 7 19 23 29 33 34 35 39 42 44 45 47 49 52 54 57 59 62 31542 65 0 1 e 31543 65 0 1 0 1 2 3 4 10 11 12 14 16 17 18 19 20 21 24 25 26 29 32 37 38 39 40 41 42 43 50 52 55 59 61 63 64 31544 65 0 1 e 31545 65 0 1 1 2 3 4 5 6 7 8 9 15 17 18 19 23 24 26 28 29 31 33 35 37 39 48 49 50 52 53 54 55 56 58 60 61 63 31546 65 0 1 e 31547 65 0 1 0 1 2 3 4 7 8 9 10 13 14 15 17 18 20 21 22 24 27 32 33 34 35 36 37 38 39 42 44 45 49 51 53 54 55 57 58 61 62 31548 65 0 1 e 31549 65 0 1 e 31550 65 0 1 e 31551 65 0 1 f 31552 65 0 1 e 31553 65 0 1 0 4 5 6 11 13 15 16 17 19 20 21 26 29 33 34 36 37 38 43 46 47 49 50 51 52 56 58 62 31554 65 0 1 e 31555 65 0 1 f 31556 65 0 1 e 31557 65 0 1 e 31558 65 0 1 e 31559 65 0 1 2 3 4 5 9 11 12 14 15 17 18 19 22 23 25 27 28 29 34 35 36 37 38 39 41 42 44 46 47 48 49 51 52 56 58 31560 65 0 1 e 31561 65 0 1 4 5 7 14 15 22 23 26 29 33 34 36 39 43 44 45 46 55 56 59 61 63 64 31562 65 0 1 e 31563 65 0 1 0 1 4 6 9 12 13 14 15 20 24 26 27 28 29 30 32 33 34 43 44 45 51 55 56 57 60 61 62 64 31564 65 0 1 e 31565 65 0 1 0 1 3 5 11 12 13 14 15 17 19 20 21 24 26 27 28 30 31 33 34 37 39 41 44 45 46 51 52 54 58 61 62 63 31566 65 0 1 e 31567 65 0 1 e 31568 65 0 1 e 31569 65 0 1 f 31570 65 0 1 e 31571 65 0 1 1 2 3 4 5 7 10 11 12 15 16 17 18 19 25 27 29 32 37 44 45 49 51 55 57 58 59 60 61 31572 65 0 1 e 31573 65 0 1 f 31574 65 0 1 e 31575 65 0 1 e 31576 65 0 1 e 31577 65 0 1 2 4 8 9 12 13 14 15 16 17 21 22 24 25 26 27 28 30 31 35 38 39 40 41 42 44 46 48 51 52 53 57 59 60 61 62 63 64 31578 65 0 1 e 31579 65 0 1 1 5 6 7 8 11 12 14 15 19 21 23 24 25 29 30 31 32 37 38 42 45 46 47 53 56 58 59 61 62 63 31580 65 0 1 e 31581 65 0 1 1 2 4 6 7 16 17 18 19 21 23 24 26 29 30 36 37 38 39 41 44 47 48 51 52 54 59 60 62 63 31582 65 0 1 e 31583 65 0 1 1 5 6 7 13 15 20 21 22 23 24 25 27 29 34 36 37 38 40 41 43 44 48 51 52 53 54 55 56 57 59 60 31584 65 1 0 e 31585 65 1 0 e 31586 65 1 0 e 31587 65 1 0 f 31588 65 1 0 e 31589 65 1 0 1 2 5 6 7 9 10 11 12 13 16 20 22 23 25 31 34 36 37 40 42 46 48 49 51 54 55 57 61 63 64 31590 65 1 0 e 31591 65 1 0 f 31592 65 1 0 e 31593 65 1 0 e 31594 65 1 0 e 31595 65 1 0 0 1 3 5 7 8 9 10 12 15 16 20 21 23 25 27 30 33 34 37 41 44 45 46 47 48 50 52 53 54 55 57 59 61 62 31596 65 1 0 e 31597 65 1 0 0 1 3 4 6 9 11 12 13 14 15 17 20 21 25 27 31 32 33 34 35 37 38 39 47 49 52 57 58 60 63 31598 65 1 0 e 31599 65 1 0 0 3 7 8 9 13 17 18 19 22 23 26 27 28 29 32 34 36 38 40 42 44 45 47 49 50 51 57 59 62 63 64 31600 65 1 0 e 31601 65 1 0 0 3 13 14 16 17 18 27 28 29 34 36 37 41 43 45 48 49 51 52 54 58 59 61 62 63 64 31602 65 1 0 e 31603 65 1 0 e 31604 65 1 0 e 31605 65 1 0 f 31606 65 1 0 e 31607 65 1 0 1 2 5 6 7 9 12 13 16 18 22 23 24 25 26 30 31 32 37 39 40 41 42 43 44 50 51 52 53 54 55 56 57 60 63 64 31608 65 1 0 e 31609 65 1 0 f 31610 65 1 0 e 31611 65 1 0 e 31612 65 1 0 e 31613 65 1 0 0 1 3 6 9 10 14 15 17 18 19 20 21 22 23 25 26 27 29 31 37 38 39 42 46 48 50 52 53 54 55 57 58 61 63 64 31614 65 1 0 e 31615 65 1 0 0 3 4 5 6 7 10 12 14 16 17 18 20 21 25 27 28 29 31 32 33 34 35 39 40 42 43 44 45 49 50 52 53 54 56 59 60 61 62 63 64 31616 65 1 0 e 31617 65 1 0 0 2 4 7 10 14 16 19 21 22 25 28 38 40 43 44 46 49 50 51 54 56 57 60 62 63 31618 65 1 0 e 31619 65 1 0 0 1 5 6 7 9 11 12 13 14 15 20 21 22 23 25 26 27 28 31 32 34 38 40 41 42 45 46 49 51 53 54 55 56 59 62 64 31620 65 1 0 e 31621 65 1 0 e 31622 65 1 0 e 31623 65 1 0 f 31624 65 1 0 e 31625 65 1 0 0 1 5 6 7 9 10 12 18 21 22 23 29 30 31 35 42 43 45 47 51 52 57 59 60 62 31626 65 1 0 e 31627 65 1 0 f 31628 65 1 0 e 31629 65 1 0 e 31630 65 1 0 e 31631 65 1 0 0 3 4 5 10 12 14 15 16 18 19 20 23 24 26 27 28 29 32 34 45 46 47 48 54 56 57 58 61 63 64 31632 65 1 0 e 31633 65 1 0 0 3 6 9 14 18 19 20 21 27 29 36 37 38 39 40 41 43 47 48 50 54 55 56 57 58 59 60 61 63 31634 65 1 0 e 31635 65 1 0 0 1 2 3 4 5 6 7 9 12 13 16 17 19 22 24 25 27 28 32 33 34 35 36 39 41 42 43 46 47 48 49 51 54 55 56 64 31636 65 1 0 e 31637 65 1 0 2 4 6 8 12 13 14 15 19 20 21 23 25 28 30 31 34 37 38 39 40 44 45 46 47 48 50 51 52 56 57 60 61 64 31638 65 1 0 e 31639 65 1 0 e 31640 65 1 0 e 31641 65 1 0 f 31642 65 1 0 e 31643 65 1 0 1 2 3 4 6 7 9 10 11 12 14 15 16 17 18 20 21 27 28 33 37 38 40 41 43 46 48 50 51 56 57 60 61 62 64 31644 65 1 0 e 31645 65 1 0 f 31646 65 1 0 e 31647 65 1 0 e 31648 65 1 0 e 31649 65 1 0 1 4 5 7 9 11 12 14 17 20 21 23 25 26 29 30 33 35 40 42 43 45 46 47 49 50 51 53 54 56 58 59 60 62 63 64 31650 65 1 0 e 31651 65 1 0 1 4 8 9 13 14 20 21 22 26 28 29 30 32 34 36 38 39 42 44 45 46 50 51 53 55 62 63 64 31652 65 1 0 e 31653 65 1 0 0 1 4 5 8 9 11 12 19 20 23 27 31 32 36 38 40 41 42 44 50 52 53 54 55 56 57 62 63 64 31654 65 1 0 e 31655 65 1 0 1 2 3 5 6 11 12 15 16 20 21 23 24 25 26 27 28 32 34 35 36 37 38 40 45 46 47 48 49 54 55 56 57 60 61 64 31656 65 1 1 e 31657 65 1 1 e 31658 65 1 1 e 31659 65 1 1 f 31660 65 1 1 e 31661 65 1 1 3 4 5 6 7 10 12 13 14 16 19 21 22 23 24 28 30 32 33 35 36 37 42 44 46 47 48 49 52 56 58 59 60 62 63 31662 65 1 1 e 31663 65 1 1 f 31664 65 1 1 e 31665 65 1 1 e 31666 65 1 1 e 31667 65 1 1 0 2 3 4 5 7 8 9 10 13 19 20 21 27 32 33 34 38 40 43 45 46 48 52 54 55 57 59 62 63 31668 65 1 1 e 31669 65 1 1 0 2 3 5 6 11 13 16 18 19 20 21 22 23 24 26 28 32 36 41 43 44 45 47 50 51 54 55 56 57 61 62 31670 65 1 1 e 31671 65 1 1 0 1 2 3 8 10 11 12 13 14 17 19 20 22 23 24 27 29 34 37 38 40 42 44 47 48 54 55 57 59 60 61 62 63 64 31672 65 1 1 e 31673 65 1 1 0 5 6 12 15 16 18 20 21 22 23 24 26 27 28 30 34 35 36 38 41 42 45 46 51 52 53 54 57 59 60 61 62 63 64 31674 65 1 1 e 31675 65 1 1 e 31676 65 1 1 e 31677 65 1 1 f 31678 65 1 1 e 31679 65 1 1 1 3 4 5 6 8 9 10 11 13 15 16 17 21 22 23 24 26 30 32 35 39 40 42 47 49 51 52 54 55 56 57 60 61 62 63 31680 65 1 1 e 31681 65 1 1 f 31682 65 1 1 e 31683 65 1 1 e 31684 65 1 1 e 31685 65 1 1 0 2 3 5 6 7 8 10 12 13 14 15 18 19 21 22 23 24 26 27 28 29 32 33 34 35 38 39 42 43 44 45 47 48 49 51 52 53 56 57 58 61 62 64 31686 65 1 1 e 31687 65 1 1 0 4 7 8 13 14 16 17 18 20 21 23 26 27 28 29 32 34 35 36 39 40 41 42 43 45 48 53 55 58 59 60 61 63 31688 65 1 1 e 31689 65 1 1 0 2 4 5 6 8 9 10 15 16 17 19 22 25 30 31 34 39 40 41 42 43 44 47 48 53 55 58 61 62 64 31690 65 1 1 e 31691 65 1 1 1 7 8 9 10 12 13 16 17 18 20 24 26 27 28 29 30 31 32 33 36 39 40 42 44 46 48 50 52 57 58 59 60 62 63 64 31692 65 1 1 e 31693 65 1 1 e 31694 65 1 1 e 31695 65 1 1 f 31696 65 1 1 e 31697 65 1 1 0 1 2 6 9 10 12 14 15 16 17 22 23 24 29 32 34 39 44 47 49 50 51 52 53 55 57 58 59 60 62 63 31698 65 1 1 e 31699 65 1 1 f 31700 65 1 1 e 31701 65 1 1 e 31702 65 1 1 e 31703 65 1 1 1 3 8 12 13 14 16 19 20 23 25 26 28 29 30 31 33 34 35 36 37 38 40 41 43 45 46 47 48 49 52 53 54 59 60 61 31704 65 1 1 e 31705 65 1 1 4 6 10 11 12 14 16 17 20 23 25 26 27 28 29 30 31 36 38 41 44 47 48 49 51 53 54 55 56 57 58 59 60 61 62 31706 65 1 1 e 31707 65 1 1 0 2 3 4 7 8 9 10 11 13 14 17 18 20 21 24 25 27 28 31 33 35 36 38 39 40 45 50 51 52 53 54 55 61 62 31708 65 1 1 e 31709 65 1 1 0 1 2 3 6 8 9 10 12 13 14 15 16 18 20 21 23 25 29 30 31 32 33 35 36 44 45 46 50 51 53 57 62 31710 65 1 1 e 31711 65 1 1 e 31712 65 1 1 e 31713 65 1 1 f 31714 65 1 1 e 31715 65 1 1 2 7 10 13 15 16 17 20 21 22 24 26 28 29 30 31 33 35 36 37 42 43 44 46 47 48 50 51 53 55 56 59 61 62 63 64 31716 65 1 1 e 31717 65 1 1 f 31718 65 1 1 e 31719 65 1 1 e 31720 65 1 1 e 31721 65 1 1 1 5 7 10 11 12 14 17 24 25 26 27 28 31 32 35 42 43 45 51 53 54 55 58 59 61 62 63 64 31722 65 1 1 e 31723 65 1 1 1 11 14 19 20 21 22 25 27 30 31 35 37 39 41 42 43 45 48 49 51 53 55 56 60 64 31724 65 1 1 e 31725 65 1 1 2 4 5 8 10 18 23 24 25 26 36 39 40 41 42 43 45 46 48 49 51 52 56 57 59 62 31726 65 1 1 e 31727 65 1 1 0 5 7 10 12 15 20 23 26 28 30 31 32 33 34 35 37 38 39 42 45 46 48 50 52 53 54 56 59 60 61 62 63 31728 211 0 0 e 31729 211 0 0 e 31730 211 0 0 e 31731 211 0 0 f 31732 211 0 0 e 31733 211 0 0 0 1 2 3 4 5 8 9 11 12 13 14 15 16 20 24 28 30 31 34 35 37 40 41 49 53 54 60 63 64 66 67 71 72 76 77 78 80 82 87 88 89 93 95 96 98 100 103 104 105 108 109 110 111 114 116 119 123 125 126 129 131 132 133 134 135 137 140 141 142 145 146 149 151 154 155 158 166 167 170 173 175 176 183 184 188 190 191 192 198 199 201 202 203 204 207 208 209 31734 211 0 0 e 31735 211 0 0 f 31736 211 0 0 e 31737 211 0 0 e 31738 211 0 0 e 31739 211 0 0 1 4 5 6 7 10 13 14 17 25 26 30 32 33 35 41 43 46 48 49 50 51 52 53 54 55 56 57 58 59 60 62 64 65 66 67 68 69 72 74 75 79 80 81 86 87 88 93 95 96 100 104 105 107 108 110 112 113 115 116 117 118 120 121 123 124 125 128 129 132 133 134 137 140 141 145 146 153 154 155 158 159 160 161 162 166 167 168 169 170 173 179 181 182 186 190 191 196 197 198 202 205 208 209 210 31740 211 0 0 e 31741 211 0 0 0 1 2 3 4 6 7 9 12 16 17 18 20 22 23 26 36 39 40 41 43 44 45 47 48 49 51 54 55 57 59 60 61 64 65 67 68 69 70 71 74 77 80 84 88 89 91 93 97 101 103 109 110 113 114 115 120 126 127 131 133 134 136 138 140 141 144 147 152 154 156 157 158 162 164 165 166 167 168 169 171 172 173 176 180 181 182 183 185 188 194 197 200 201 206 208 210 31742 211 0 0 e 31743 211 0 0 1 4 6 9 10 11 15 19 20 22 24 29 35 37 41 46 49 50 51 54 55 57 63 64 67 74 81 85 86 88 89 90 91 93 95 97 100 103 105 106 109 110 112 113 115 117 118 119 120 122 123 125 132 134 135 137 141 143 148 153 154 157 159 162 163 164 167 168 170 172 173 174 175 176 182 184 186 187 189 193 194 195 197 199 201 202 203 205 206 207 208 209 210 31744 211 0 0 e 31745 211 0 0 0 2 3 9 11 13 14 21 24 31 32 34 35 37 40 43 44 45 46 47 48 49 51 53 54 55 56 58 62 63 64 65 66 67 68 69 75 76 77 78 80 82 83 84 85 88 89 91 94 95 96 99 105 107 109 110 112 118 119 121 123 124 125 129 130 133 135 138 140 143 144 146 148 150 153 154 156 157 159 162 163 164 166 167 170 172 173 174 179 182 183 190 191 193 196 197 198 199 202 203 204 31746 211 0 0 e 31747 211 0 0 e 31748 211 0 0 e 31749 211 0 0 f 31750 211 0 0 e 31751 211 0 0 0 3 5 6 7 10 18 22 24 26 28 33 35 36 37 38 41 42 44 45 46 49 50 51 55 56 61 62 63 64 66 69 70 72 74 75 77 78 79 80 81 82 83 85 86 87 91 92 94 95 96 97 99 100 101 107 110 112 113 116 119 121 122 127 130 131 135 136 137 138 140 141 142 143 144 145 151 156 159 160 162 164 167 178 180 186 188 191 192 195 196 197 198 199 203 207 208 209 31752 211 0 0 e 31753 211 0 0 f 31754 211 0 0 e 31755 211 0 0 e 31756 211 0 0 e 31757 211 0 0 1 2 3 9 10 13 14 16 17 18 19 22 24 26 29 30 32 34 35 37 38 40 41 43 45 46 47 50 52 60 65 67 68 69 70 74 76 80 81 84 85 87 88 89 90 92 93 94 95 97 99 102 103 106 107 108 109 110 115 116 120 121 125 127 131 137 139 140 141 142 143 144 145 146 149 151 152 153 155 159 161 163 164 166 167 168 169 170 172 177 178 181 182 183 185 186 187 188 189 194 195 198 199 203 206 208 31758 211 0 0 e 31759 211 0 0 1 2 4 6 12 14 17 18 20 21 28 30 33 34 35 37 39 40 43 44 47 48 49 51 52 53 54 60 62 63 66 67 72 73 76 79 81 82 84 85 89 90 91 93 94 95 97 98 102 103 104 105 107 109 110 111 112 113 115 117 119 120 122 125 128 129 130 131 133 134 136 144 149 151 153 155 156 163 164 166 167 168 170 174 176 178 179 182 183 186 187 188 189 193 194 197 198 201 202 203 205 207 210 31760 211 0 0 e 31761 211 0 0 1 5 10 11 13 14 15 17 18 19 20 21 22 23 24 25 26 27 30 32 33 37 40 43 44 45 46 48 50 53 54 55 59 60 61 62 68 69 70 72 73 77 79 80 82 83 84 85 87 88 92 94 95 97 99 101 102 103 105 113 114 115 118 121 124 125 126 127 128 129 131 134 136 137 138 140 141 145 146 147 148 150 153 155 156 157 158 160 161 162 163 164 167 168 169 170 171 173 174 178 180 183 187 188 189 190 192 196 198 200 202 203 204 206 208 209 31762 211 0 0 e 31763 211 0 0 0 1 3 6 7 10 11 12 14 17 18 19 20 21 23 24 25 26 27 31 33 35 36 38 39 43 45 49 51 52 55 57 59 60 61 65 67 68 69 70 71 75 79 80 82 84 86 88 90 91 92 93 95 99 100 101 103 106 107 111 113 114 117 119 120 121 122 125 126 127 128 129 131 132 133 138 141 142 143 144 146 148 150 152 153 155 157 160 161 162 163 166 167 168 170 171 172 173 177 180 181 182 183 187 189 190 193 194 195 198 199 203 205 207 209 210 31764 211 0 0 e 31765 211 0 0 e 31766 211 0 0 e 31767 211 0 0 f 31768 211 0 0 e 31769 211 0 0 1 2 6 9 10 12 13 14 15 17 18 21 22 24 25 26 29 31 32 33 34 35 37 39 40 43 46 47 51 53 56 57 58 59 60 62 63 65 66 67 68 70 71 74 75 76 80 81 84 86 89 96 97 99 101 103 107 108 109 111 112 116 118 122 124 126 127 133 137 139 140 141 142 145 146 149 150 153 154 156 157 158 162 165 166 167 168 170 174 177 178 179 180 186 189 194 195 197 199 203 204 209 210 31770 211 0 0 e 31771 211 0 0 f 31772 211 0 0 e 31773 211 0 0 e 31774 211 0 0 e 31775 211 0 0 0 1 2 5 9 10 11 14 15 17 21 22 23 27 28 30 32 33 40 41 44 45 46 47 48 49 50 51 57 59 60 61 62 63 65 66 69 70 71 73 74 75 78 79 80 82 84 85 87 90 94 98 100 102 103 104 105 107 108 109 110 111 114 115 116 117 121 125 128 129 132 133 134 137 140 141 142 143 144 148 151 154 156 160 163 164 165 166 168 169 173 174 175 176 177 180 183 184 185 186 188 189 190 191 192 193 195 196 197 198 200 201 203 205 206 207 209 210 31776 211 0 0 e 31777 211 0 0 4 6 8 9 10 15 16 19 20 21 22 24 26 33 34 37 38 39 40 41 43 44 46 47 48 49 51 52 57 58 59 63 64 66 68 69 71 74 76 79 81 82 84 86 92 95 96 98 99 100 104 106 107 108 110 112 113 115 116 120 121 122 125 127 130 134 137 138 140 141 143 145 146 150 151 157 159 160 162 165 166 167 169 173 175 176 179 180 182 184 186 190 193 194 195 196 198 202 203 204 206 207 208 210 31778 211 0 0 e 31779 211 0 0 1 4 5 7 8 10 12 13 14 15 16 18 19 20 22 25 27 28 30 32 36 38 42 43 44 47 49 51 53 54 58 61 63 64 66 69 70 71 72 75 77 82 84 85 86 88 91 92 97 98 102 106 108 109 111 112 113 117 119 120 123 126 130 137 139 142 143 145 151 152 155 156 159 161 162 163 164 166 168 170 174 176 177 178 179 181 182 183 184 185 188 190 192 193 194 195 196 198 203 204 206 208 31780 211 0 0 e 31781 211 0 0 0 1 2 6 12 18 19 20 21 27 29 30 34 35 36 39 40 41 42 44 45 47 49 52 56 58 61 63 64 65 68 69 74 75 77 79 80 81 82 85 88 92 99 102 107 111 113 115 118 120 121 122 124 125 127 128 130 133 134 135 138 141 143 144 147 148 149 150 156 158 161 164 165 166 167 168 171 175 176 177 179 181 182 183 184 185 186 188 191 195 198 200 201 202 203 205 206 207 31782 211 0 0 e 31783 211 0 0 e 31784 211 0 0 e 31785 211 0 0 f 31786 211 0 0 e 31787 211 0 0 3 4 5 7 10 11 13 14 15 19 20 21 22 23 25 26 28 30 32 35 37 38 39 40 41 44 47 48 50 51 55 58 60 61 65 67 69 72 73 74 79 80 82 83 84 86 89 92 93 94 96 97 98 100 102 103 105 107 108 109 110 111 112 114 115 116 118 123 132 134 136 138 139 140 141 142 143 146 147 148 149 153 155 156 158 160 164 166 167 168 169 170 171 174 175 176 178 179 181 184 187 188 190 191 192 196 197 199 200 201 206 208 209 31788 211 0 0 e 31789 211 0 0 f 31790 211 0 0 e 31791 211 0 0 e 31792 211 0 0 e 31793 211 0 0 3 4 5 7 8 10 14 15 17 18 19 21 23 25 26 27 34 35 37 38 39 40 42 44 45 46 47 52 55 57 60 64 65 66 67 72 76 77 78 79 83 86 88 89 91 94 95 96 100 107 108 109 110 111 112 113 114 116 120 121 122 123 124 127 128 130 132 133 135 136 138 140 143 144 145 146 148 149 158 159 160 162 164 165 166 168 171 175 176 177 178 182 183 185 186 188 193 195 196 198 201 202 203 205 207 31794 211 0 0 e 31795 211 0 0 1 3 4 5 7 10 11 13 14 15 17 21 23 24 25 26 27 29 30 31 32 34 35 39 40 42 47 49 50 51 52 54 59 62 63 64 65 66 73 74 75 79 83 84 88 89 90 91 93 94 97 98 99 100 102 105 107 108 109 113 117 119 120 122 125 126 127 128 129 131 132 138 145 146 147 150 152 153 155 156 158 160 163 164 167 168 172 173 174 178 179 180 181 185 188 190 191 193 194 202 207 208 210 31796 211 0 0 e 31797 211 0 0 1 3 12 16 20 21 22 26 27 30 33 41 42 43 44 45 47 48 50 52 54 55 60 62 63 64 65 66 67 68 72 73 74 77 78 80 81 84 85 91 93 97 98 100 101 105 106 107 108 110 112 113 114 115 116 117 118 119 120 121 124 127 128 129 130 131 132 133 134 135 136 140 141 144 145 146 150 153 155 156 160 162 164 165 168 173 174 175 178 179 180 182 183 184 185 188 194 196 197 200 201 202 203 209 210 31798 211 0 0 e 31799 211 0 0 0 1 2 3 4 7 9 13 14 16 19 20 21 23 26 27 31 33 34 37 38 41 42 44 51 52 56 57 59 63 64 65 66 67 68 73 75 76 77 79 80 81 84 87 88 91 96 97 98 99 101 107 108 111 112 114 117 118 119 122 125 128 131 138 140 142 143 145 146 147 149 150 151 152 153 157 160 162 165 167 170 172 174 175 176 177 183 184 186 188 189 193 197 198 199 200 202 204 205 209 210 31800 211 0 1 e 31801 211 0 1 e 31802 211 0 1 e 31803 211 0 1 f 31804 211 0 1 e 31805 211 0 1 0 2 3 4 9 11 12 16 18 20 23 25 26 27 29 30 32 35 36 37 42 44 46 47 48 49 51 52 53 54 56 57 61 62 65 68 70 72 73 74 75 81 82 85 89 91 92 97 98 99 105 106 110 111 113 114 115 118 119 122 123 124 127 129 130 134 135 137 139 141 144 148 152 156 159 163 164 166 167 168 169 170 172 174 175 176 177 178 179 182 183 188 189 193 196 197 199 200 201 203 205 206 207 208 209 210 31806 211 0 1 e 31807 211 0 1 f 31808 211 0 1 e 31809 211 0 1 e 31810 211 0 1 e 31811 211 0 1 0 3 4 12 14 15 17 20 23 31 33 34 35 36 37 39 42 43 45 47 49 50 52 53 54 55 56 57 58 59 62 64 68 70 71 73 74 77 78 81 86 88 89 90 91 92 101 102 110 112 113 115 116 118 119 120 121 124 132 133 137 140 141 144 145 146 148 149 150 155 158 159 161 162 163 164 166 167 168 170 172 173 177 178 179 182 185 187 188 189 191 192 193 194 196 198 204 209 210 31812 211 0 1 e 31813 211 0 1 0 1 4 5 8 9 14 16 18 21 24 25 26 27 28 31 33 35 37 42 43 44 46 47 48 49 60 61 63 66 67 71 72 75 76 79 81 82 83 87 88 89 91 94 95 96 97 98 100 102 103 104 108 109 112 114 115 116 118 119 120 121 128 130 131 132 133 134 135 143 144 146 148 149 151 152 153 156 157 158 159 162 165 166 168 170 172 176 178 180 183 184 186 187 189 190 193 194 196 197 198 199 200 201 202 203 204 207 31814 211 0 1 e 31815 211 0 1 0 1 2 3 4 6 7 8 10 12 13 14 16 17 20 21 24 25 26 27 29 30 31 34 35 39 41 45 47 49 50 53 55 56 57 59 61 62 64 66 67 69 70 71 73 74 77 81 84 86 90 92 94 95 99 101 105 106 109 110 111 113 114 115 117 118 120 121 124 125 126 130 132 133 137 141 142 143 144 145 147 150 151 152 153 154 156 157 159 160 161 162 165 168 169 170 171 175 176 177 179 180 181 184 188 189 190 195 196 197 198 204 208 31816 211 0 1 e 31817 211 0 1 0 4 5 8 11 16 17 18 19 21 24 25 27 28 29 31 32 33 36 37 38 40 41 44 46 48 50 52 53 55 59 60 64 65 67 69 71 73 76 77 79 80 81 82 85 86 88 89 93 97 98 99 102 103 104 105 106 108 110 112 116 117 118 121 124 129 131 132 133 134 135 136 138 146 147 148 150 151 153 156 157 164 165 166 167 168 177 178 183 184 185 186 189 191 194 195 196 198 199 202 207 209 210 31818 211 0 1 e 31819 211 0 1 e 31820 211 0 1 e 31821 211 0 1 f 31822 211 0 1 e 31823 211 0 1 4 9 11 12 18 21 22 32 34 36 37 38 39 40 41 42 43 45 50 51 53 57 58 60 61 62 63 65 68 69 71 72 73 74 76 77 78 82 86 88 89 90 91 92 93 94 96 97 100 101 103 104 105 107 108 109 110 113 114 115 117 125 127 128 129 131 132 133 134 136 139 142 143 145 149 150 151 152 153 156 157 159 160 161 162 165 166 170 173 175 176 177 181 184 186 187 189 190 191 192 193 196 200 202 205 206 208 31824 211 0 1 e 31825 211 0 1 f 31826 211 0 1 e 31827 211 0 1 e 31828 211 0 1 e 31829 211 0 1 0 1 4 5 6 7 8 9 10 11 12 13 15 16 17 19 20 21 22 23 25 26 27 31 33 35 37 38 39 43 47 48 51 52 55 56 57 58 59 60 61 62 63 65 66 67 73 74 76 79 86 88 90 96 97 98 99 100 102 103 104 105 108 110 111 113 114 115 116 117 118 120 122 123 124 125 129 131 132 133 138 139 142 143 147 148 149 151 152 153 158 161 162 163 165 167 169 172 173 174 175 177 178 179 181 185 188 189 191 193 194 195 197 202 203 206 210 31830 211 0 1 e 31831 211 0 1 0 2 3 8 9 11 13 15 16 17 18 20 21 22 24 25 26 27 28 29 30 33 35 37 41 43 44 45 46 48 49 50 51 52 53 54 56 57 62 63 67 68 69 70 76 78 79 81 84 86 89 90 91 93 97 100 102 108 112 113 115 125 126 128 130 134 135 136 141 142 147 151 152 155 159 163 164 166 170 171 173 175 176 177 181 183 186 188 192 193 198 199 200 201 202 203 204 206 207 208 31832 211 0 1 e 31833 211 0 1 0 2 3 4 6 10 12 13 14 16 17 19 20 23 25 27 28 29 31 32 33 35 36 38 41 43 45 46 47 49 50 52 53 54 57 58 60 61 62 64 65 66 68 69 74 77 81 88 89 93 94 95 96 100 103 104 107 108 110 111 112 114 115 117 118 119 123 124 125 128 130 131 132 133 136 138 143 145 148 151 155 156 157 160 161 162 169 171 177 178 179 180 181 183 184 185 191 192 202 204 207 208 209 31834 211 0 1 e 31835 211 0 1 0 1 4 6 8 9 10 11 18 20 22 25 29 30 31 34 35 36 37 38 39 43 48 53 55 58 61 64 65 68 69 71 74 78 79 81 83 89 91 94 95 98 100 101 102 103 105 108 109 110 112 114 115 117 122 123 124 125 127 129 130 131 132 133 143 144 145 146 147 149 150 153 154 155 156 157 159 164 168 171 172 173 174 179 180 183 187 188 197 198 199 201 202 203 204 209 31836 211 0 1 e 31837 211 0 1 e 31838 211 0 1 e 31839 211 0 1 f 31840 211 0 1 e 31841 211 0 1 0 1 2 3 8 12 14 15 17 18 20 23 26 27 35 37 41 42 45 46 49 50 55 56 60 61 62 64 69 70 71 72 73 74 75 76 77 80 82 83 84 85 86 87 91 92 95 96 103 106 111 112 114 115 117 118 120 123 124 125 126 127 132 133 136 138 140 143 146 147 148 149 151 153 154 157 159 161 164 165 166 167 169 170 172 183 187 189 191 192 193 199 202 206 207 209 31842 211 0 1 e 31843 211 0 1 f 31844 211 0 1 e 31845 211 0 1 e 31846 211 0 1 e 31847 211 0 1 1 3 5 7 9 12 14 16 20 21 23 25 26 29 30 31 33 35 40 43 45 46 48 49 51 52 55 56 57 60 61 62 63 64 65 67 68 71 75 77 78 79 80 81 84 86 89 91 92 93 97 98 100 101 102 105 106 110 111 112 114 117 121 122 123 126 127 128 129 130 136 137 139 140 142 148 149 150 154 157 158 159 166 167 169 170 171 172 175 180 181 183 184 185 189 190 193 194 200 201 202 203 204 205 207 210 31848 211 0 1 e 31849 211 0 1 9 10 11 12 13 16 19 20 21 26 27 29 30 31 32 36 37 38 39 41 42 44 46 47 48 50 51 53 54 55 57 59 60 62 63 64 65 68 72 75 76 79 82 83 85 87 88 89 90 98 100 103 104 105 107 109 110 111 117 119 120 121 125 126 127 131 132 133 134 136 139 141 142 146 147 150 154 155 156 158 160 161 163 164 165 174 175 177 178 179 182 184 185 187 189 190 192 194 195 200 201 202 204 205 208 209 31850 211 0 1 e 31851 211 0 1 0 1 2 4 8 11 13 14 16 20 27 30 31 32 42 47 50 51 52 53 55 56 58 59 63 66 67 70 77 78 80 84 89 90 92 94 95 99 101 102 103 104 106 107 108 109 112 114 115 117 118 121 123 124 125 127 128 129 134 138 139 140 141 142 143 144 147 148 149 150 151 153 155 157 158 161 164 165 167 168 171 172 175 180 182 184 186 188 191 194 195 196 198 201 202 203 204 205 208 209 31852 211 0 1 e 31853 211 0 1 1 7 8 10 11 12 20 21 23 24 26 29 30 35 37 38 40 41 42 43 46 47 50 51 52 57 61 62 64 65 66 68 69 70 72 74 75 76 77 80 81 83 84 86 88 89 91 92 97 98 99 100 102 104 107 110 111 112 113 115 117 118 119 122 125 126 127 128 130 131 132 134 135 136 137 141 142 144 145 146 147 149 153 154 156 157 160 162 163 165 167 170 174 175 176 177 178 179 180 181 182 183 184 185 186 194 196 198 199 207 208 31854 211 0 1 e 31855 211 0 1 e 31856 211 0 1 e 31857 211 0 1 f 31858 211 0 1 e 31859 211 0 1 2 3 4 8 12 13 14 16 17 23 26 27 30 32 33 35 37 47 49 51 53 59 64 66 72 73 74 75 78 79 80 85 86 87 90 91 93 94 97 98 99 103 105 106 107 109 113 115 116 118 121 122 123 124 125 128 130 135 141 142 143 144 146 147 149 151 154 160 164 165 166 167 168 174 177 179 181 182 183 184 185 189 193 195 196 198 199 200 202 204 205 206 208 31860 211 0 1 e 31861 211 0 1 f 31862 211 0 1 e 31863 211 0 1 e 31864 211 0 1 e 31865 211 0 1 0 1 2 3 4 5 6 7 9 12 14 15 18 19 22 23 25 26 28 30 31 32 33 35 37 39 40 42 46 50 54 56 59 63 64 67 71 73 74 76 78 79 82 84 89 90 92 93 98 100 102 103 104 107 109 112 118 119 120 122 125 131 133 135 136 139 140 141 142 143 144 145 146 147 148 151 152 154 155 156 158 159 161 165 166 167 168 171 172 173 177 178 179 183 187 189 190 193 197 198 200 201 202 205 210 31866 211 0 1 e 31867 211 0 1 0 1 2 4 5 8 9 10 11 12 13 14 15 16 19 21 24 25 26 27 29 30 32 33 35 36 37 39 41 42 44 45 46 47 51 52 53 54 55 57 59 60 63 65 66 71 78 79 87 89 90 93 95 96 100 101 103 107 108 112 113 114 115 117 118 119 120 123 125 126 129 132 133 135 138 139 140 145 147 148 150 151 152 154 159 161 162 164 167 168 169 170 174 180 181 182 185 186 191 194 195 198 201 202 205 206 210 31868 211 0 1 e 31869 211 0 1 1 3 4 5 6 9 10 11 13 14 19 23 26 27 30 34 35 36 38 39 40 44 45 47 49 50 52 53 54 55 56 59 62 66 67 68 72 73 77 81 83 85 86 87 88 89 90 92 95 96 101 103 105 110 112 113 114 115 116 121 123 125 126 127 128 129 130 131 133 134 137 138 140 144 146 149 150 152 153 155 157 159 161 162 163 166 167 168 170 177 181 182 183 184 185 187 190 192 194 197 198 199 200 202 205 210 31870 211 0 1 e 31871 211 0 1 2 6 7 8 13 15 19 20 25 27 28 33 34 35 36 39 41 42 43 44 50 51 54 57 58 60 61 62 63 64 69 70 71 77 79 80 81 83 87 88 89 90 92 94 101 102 104 106 109 111 114 117 118 123 124 125 126 127 128 129 130 131 135 136 137 138 139 141 145 150 151 154 156 160 161 165 166 169 170 177 178 179 180 181 184 187 189 190 194 195 196 198 200 202 204 209 210 31872 211 1 0 e 31873 211 1 0 e 31874 211 1 0 e 31875 211 1 0 f 31876 211 1 0 e 31877 211 1 0 1 5 6 7 10 14 15 16 22 23 25 26 28 29 30 31 32 41 42 43 45 46 47 51 52 54 58 59 61 62 64 69 70 71 72 73 74 75 76 77 78 79 82 84 88 92 94 95 99 100 101 102 103 104 105 106 108 109 114 116 119 121 124 125 129 132 134 137 138 142 143 144 145 146 148 154 158 159 162 163 164 165 168 170 172 173 174 175 177 182 183 184 185 186 189 191 192 194 195 198 199 200 201 203 207 209 31878 211 1 0 e 31879 211 1 0 f 31880 211 1 0 e 31881 211 1 0 e 31882 211 1 0 e 31883 211 1 0 1 2 3 4 5 6 9 12 13 14 16 19 20 23 24 27 28 29 33 34 40 42 43 46 47 49 51 52 54 55 57 61 63 65 66 67 68 69 70 74 78 79 80 81 83 84 85 88 91 92 96 97 98 100 103 104 106 107 112 113 114 117 119 120 122 123 125 126 127 128 130 134 135 138 141 143 145 146 147 153 154 155 156 165 168 169 171 173 175 177 179 180 182 186 187 189 190 192 193 195 198 199 200 204 206 207 208 209 31884 211 1 0 e 31885 211 1 0 6 7 13 14 15 16 17 18 20 21 23 27 29 31 33 36 40 46 47 49 52 56 57 60 61 63 65 69 70 71 76 79 81 86 87 89 91 92 94 98 104 105 106 108 113 121 123 128 129 130 134 137 138 144 145 146 150 156 157 158 159 160 161 162 165 167 170 171 178 179 180 183 184 185 195 196 197 198 201 203 207 208 209 31886 211 1 0 e 31887 211 1 0 0 1 3 4 5 9 11 13 16 21 25 27 28 32 34 36 37 38 39 41 42 45 49 56 58 59 61 62 63 65 67 69 70 71 74 76 79 80 81 82 83 84 86 87 89 91 93 99 100 101 103 104 105 108 112 113 114 115 116 117 122 124 125 126 129 130 131 133 134 135 137 138 140 141 143 144 148 151 153 154 155 156 158 159 160 163 164 165 172 174 177 178 179 180 181 183 184 190 193 194 196 199 202 203 207 208 209 31888 211 1 0 e 31889 211 1 0 0 1 3 5 6 7 9 10 11 14 15 16 18 19 23 28 29 30 32 33 37 40 42 43 46 47 50 51 52 53 54 55 57 58 59 63 64 66 67 68 70 72 73 74 75 76 78 79 80 81 83 85 88 91 94 95 100 101 104 106 107 108 109 111 122 123 124 126 127 128 129 130 132 134 135 137 139 141 143 144 148 151 153 154 155 157 158 163 167 169 170 176 177 179 180 181 184 188 191 196 198 199 204 206 207 208 31890 211 1 0 e 31891 211 1 0 e 31892 211 1 0 e 31893 211 1 0 f 31894 211 1 0 e 31895 211 1 0 0 3 4 10 13 15 17 18 19 22 23 24 25 26 27 28 31 32 34 35 36 39 40 43 45 46 48 49 52 54 55 56 57 59 61 62 67 68 69 70 78 80 83 86 92 94 96 97 100 102 103 104 108 111 112 113 114 118 119 120 123 125 126 128 130 131 133 134 139 140 141 142 144 146 148 151 152 160 164 165 169 171 172 173 175 180 181 185 186 187 191 197 198 199 200 201 202 203 204 206 210 31896 211 1 0 e 31897 211 1 0 f 31898 211 1 0 e 31899 211 1 0 e 31900 211 1 0 e 31901 211 1 0 0 2 4 6 8 10 11 12 14 16 17 18 21 24 26 28 33 34 36 39 41 45 47 48 49 50 51 54 55 58 59 60 61 62 63 64 66 69 70 71 72 74 75 76 77 80 82 83 85 86 88 90 95 96 97 98 99 100 101 104 105 106 108 109 110 112 114 115 116 118 119 120 122 123 124 125 128 129 130 135 136 137 141 144 146 147 149 151 152 153 156 167 168 171 172 174 177 178 179 181 183 184 185 188 191 199 203 206 207 208 209 31902 211 1 0 e 31903 211 1 0 1 2 3 6 11 14 15 17 18 19 20 21 24 28 29 32 33 35 37 39 43 44 46 47 48 49 50 51 52 54 56 58 59 61 64 70 71 72 74 75 76 78 79 83 84 88 94 96 97 104 107 108 109 111 113 114 118 120 121 122 123 125 128 129 130 134 136 137 138 140 146 147 148 151 154 155 157 159 160 163 164 165 167 168 171 172 173 180 181 182 185 188 189 193 196 197 198 199 200 202 203 204 206 31904 211 1 0 e 31905 211 1 0 0 2 3 4 5 9 10 11 19 21 22 23 24 25 26 27 31 33 37 42 45 50 53 54 55 60 62 63 64 66 68 71 74 76 79 84 85 87 90 91 92 99 101 104 114 115 116 117 119 120 121 125 126 128 129 131 134 135 137 140 142 146 147 148 150 152 153 154 155 159 160 165 166 167 169 170 172 175 177 178 179 180 183 184 185 188 190 195 196 200 201 203 208 209 31906 211 1 0 e 31907 211 1 0 0 1 2 3 4 7 8 10 15 17 18 19 21 22 24 25 26 31 33 35 36 37 39 40 41 44 45 47 49 50 54 55 56 57 58 59 60 61 62 63 65 67 70 74 75 76 77 78 79 85 86 87 92 93 94 95 96 99 103 105 107 109 111 112 113 114 115 116 117 121 122 123 127 128 129 132 134 137 138 141 142 143 145 147 148 151 152 153 154 157 159 163 164 166 167 168 169 170 173 174 178 179 181 182 184 187 188 190 191 192 197 198 203 207 209 210 31908 211 1 0 e 31909 211 1 0 e 31910 211 1 0 e 31911 211 1 0 f 31912 211 1 0 e 31913 211 1 0 2 3 4 5 8 11 12 13 18 19 21 24 27 30 31 32 33 34 35 36 38 39 42 44 51 53 55 58 59 60 61 64 71 73 77 78 79 80 82 85 87 89 90 92 94 97 98 99 102 103 108 111 112 113 116 121 122 126 127 129 130 131 132 133 136 137 138 139 140 141 142 143 144 146 147 148 156 160 161 162 163 164 167 169 170 172 173 174 175 176 177 178 179 182 184 186 188 190 191 193 194 195 197 198 200 202 203 205 206 208 209 210 31914 211 1 0 e 31915 211 1 0 f 31916 211 1 0 e 31917 211 1 0 e 31918 211 1 0 e 31919 211 1 0 1 3 4 5 6 8 10 13 16 21 24 25 28 31 32 35 36 37 38 39 42 45 47 50 53 54 55 57 58 62 63 68 70 71 74 76 77 78 79 85 86 95 98 99 102 103 106 107 109 110 112 113 115 117 120 122 125 126 128 133 134 136 138 139 140 142 143 144 145 147 152 153 155 157 159 160 162 163 164 166 168 172 173 174 176 179 182 183 184 185 186 187 189 191 192 197 199 203 205 206 207 208 209 31920 211 1 0 e 31921 211 1 0 0 2 4 6 8 10 12 13 14 15 16 19 22 23 26 27 34 36 39 40 42 45 49 52 58 59 63 64 67 68 69 74 75 78 79 80 83 87 88 90 92 95 96 101 102 105 107 110 113 115 118 120 121 125 129 130 132 133 134 136 139 141 143 144 146 148 149 150 151 152 156 158 162 163 165 167 168 170 176 178 179 181 184 185 186 187 189 193 196 197 199 203 204 205 31922 211 1 0 e 31923 211 1 0 3 5 6 10 11 12 13 17 18 23 24 30 36 37 39 40 41 42 43 44 45 46 47 49 50 51 52 53 67 71 73 75 76 79 80 81 84 86 87 88 89 90 91 92 93 95 100 101 102 103 107 110 111 112 113 114 118 119 123 126 128 129 133 134 135 136 137 139 140 141 144 146 147 152 155 156 157 158 161 163 165 170 171 174 175 180 182 185 186 187 190 192 193 194 195 197 198 201 202 204 205 206 207 208 209 210 31924 211 1 0 e 31925 211 1 0 0 1 6 8 10 12 15 17 18 26 27 28 29 30 33 34 35 36 38 40 41 43 45 54 55 59 61 65 66 67 68 69 70 71 72 73 74 75 77 78 79 80 82 86 87 88 90 91 94 96 97 98 99 101 102 103 108 110 111 112 113 114 115 116 122 123 125 126 127 128 129 130 131 132 135 139 140 145 146 147 149 150 151 152 157 158 159 161 162 163 164 165 166 169 171 172 173 175 176 179 180 181 182 183 184 186 188 190 191 193 194 198 199 201 202 203 31926 211 1 0 e 31927 211 1 0 e 31928 211 1 0 e 31929 211 1 0 f 31930 211 1 0 e 31931 211 1 0 6 7 10 11 12 13 14 16 17 19 21 22 23 24 26 31 32 35 36 38 41 45 46 48 57 58 59 61 63 65 66 68 69 70 73 74 75 76 77 79 81 83 85 86 87 88 89 91 92 93 94 96 97 98 99 100 109 111 112 113 115 116 118 123 127 129 130 133 135 137 141 144 145 147 149 153 157 159 160 162 169 170 171 172 174 175 176 181 182 186 187 188 191 192 194 195 196 200 202 203 204 205 207 209 210 31932 211 1 0 e 31933 211 1 0 f 31934 211 1 0 e 31935 211 1 0 e 31936 211 1 0 e 31937 211 1 0 0 4 9 10 12 15 19 21 22 25 26 28 29 33 35 36 38 39 40 42 53 56 60 61 63 66 67 71 72 73 74 75 76 77 79 82 84 91 92 94 95 102 103 105 106 107 109 110 112 118 120 121 125 128 130 131 132 134 135 136 140 141 145 148 149 150 152 153 154 155 157 158 159 160 164 165 166 168 172 173 175 177 179 181 183 185 190 191 193 195 196 197 200 202 203 204 205 207 210 31938 211 1 0 e 31939 211 1 0 3 5 8 10 13 20 22 25 26 27 28 29 32 33 34 36 39 40 42 46 47 48 50 53 54 55 56 57 58 61 62 64 65 66 75 82 83 86 87 89 91 92 96 97 98 103 105 107 109 111 113 114 115 117 118 119 125 126 128 129 130 131 132 134 141 143 144 145 148 150 155 159 160 162 163 165 167 168 169 172 174 178 180 181 185 189 192 197 200 204 206 208 209 210 31940 211 1 0 e 31941 211 1 0 1 2 5 6 7 8 13 15 16 20 21 22 24 30 31 32 34 38 39 42 44 45 46 50 51 52 54 55 56 57 58 59 60 63 64 65 66 67 73 74 76 79 81 85 86 87 91 92 93 97 98 101 102 107 109 111 114 116 118 119 122 123 124 125 126 127 128 131 132 133 134 136 138 139 140 143 145 148 149 150 152 154 157 159 160 163 164 165 166 168 170 175 176 178 179 180 182 183 184 186 187 188 189 191 192 196 197 199 200 202 205 206 207 208 31942 211 1 0 e 31943 211 1 0 0 5 8 11 12 13 14 15 17 18 21 22 23 24 26 30 31 32 36 37 40 41 46 47 50 52 53 54 57 60 61 62 64 65 67 69 71 72 73 74 75 76 78 79 82 83 86 88 89 90 91 92 95 96 97 101 103 105 109 110 111 113 115 116 117 118 122 124 125 127 128 142 144 146 147 148 149 150 151 152 153 154 155 157 158 161 162 164 165 167 170 172 180 181 182 189 191 193 194 197 198 200 201 204 205 206 208 31944 211 1 1 e 31945 211 1 1 e 31946 211 1 1 e 31947 211 1 1 f 31948 211 1 1 e 31949 211 1 1 0 4 9 13 15 17 19 20 21 22 24 26 31 32 33 35 37 40 41 42 44 47 48 49 50 51 52 53 54 55 57 61 64 65 66 67 68 71 72 75 77 78 80 81 83 87 89 91 93 94 96 97 99 101 102 104 106 109 110 114 115 118 119 121 123 124 126 131 132 133 134 135 137 140 142 144 145 149 150 152 155 156 167 169 171 173 176 179 184 185 187 188 192 193 194 196 203 208 209 31950 211 1 1 e 31951 211 1 1 f 31952 211 1 1 e 31953 211 1 1 e 31954 211 1 1 e 31955 211 1 1 0 1 4 5 6 7 8 13 15 16 17 18 24 25 26 28 32 35 36 37 41 47 48 49 50 51 52 53 54 57 59 60 62 64 65 66 68 70 71 72 73 74 75 77 79 81 82 83 84 86 87 88 90 94 95 99 101 103 105 108 111 113 114 115 116 119 121 122 123 128 130 131 132 133 134 137 139 142 144 146 147 149 151 152 153 155 158 159 160 164 165 167 168 169 170 171 172 174 175 180 182 184 185 186 187 191 193 194 195 198 199 200 205 206 208 209 31956 211 1 1 e 31957 211 1 1 2 7 11 12 13 14 16 17 18 19 21 22 24 25 27 29 31 32 34 36 39 40 41 42 43 44 45 46 48 49 57 58 60 63 64 67 68 70 75 79 80 81 85 86 88 89 90 98 100 101 102 105 109 112 113 114 115 122 124 125 126 129 134 135 137 140 141 142 147 148 149 153 154 156 161 162 163 165 168 169 170 173 174 175 178 183 188 189 190 191 192 193 194 195 200 202 205 210 31958 211 1 1 e 31959 211 1 1 2 5 7 8 11 12 15 16 17 19 20 21 22 26 27 28 32 33 35 40 42 44 45 46 48 49 50 53 54 56 60 64 65 66 68 69 73 75 76 77 78 81 85 86 87 89 90 91 92 94 96 100 102 103 105 107 108 110 111 112 113 115 116 117 119 121 123 124 125 126 128 130 136 138 143 147 148 151 155 156 157 160 161 164 168 170 171 173 174 176 177 178 181 182 184 185 186 189 193 195 196 201 203 205 206 207 209 210 31960 211 1 1 e 31961 211 1 1 0 1 2 3 6 8 9 11 15 16 17 19 20 21 22 25 26 29 33 36 37 40 42 44 45 46 50 54 55 58 59 60 63 71 72 74 76 79 80 85 86 87 88 90 92 93 94 96 99 101 103 104 106 107 108 113 115 117 120 121 125 128 130 132 133 135 136 140 141 143 144 147 148 152 153 155 157 158 160 161 166 168 172 174 177 179 180 181 182 185 186 187 189 190 192 193 195 198 203 204 207 208 31962 211 1 1 e 31963 211 1 1 e 31964 211 1 1 e 31965 211 1 1 f 31966 211 1 1 e 31967 211 1 1 1 2 3 5 6 7 9 10 16 21 25 26 31 32 34 38 39 41 45 46 49 50 51 52 56 58 64 65 66 69 71 73 75 77 78 79 80 81 83 84 85 87 88 92 93 94 95 96 97 101 102 103 104 106 109 110 117 121 122 124 125 129 130 131 132 133 134 136 137 138 141 143 145 149 150 151 152 154 155 159 160 161 162 163 164 165 167 169 170 171 172 174 175 179 184 187 188 190 191 197 198 199 200 201 202 205 207 209 31968 211 1 1 e 31969 211 1 1 f 31970 211 1 1 e 31971 211 1 1 e 31972 211 1 1 e 31973 211 1 1 1 3 5 6 8 12 13 14 16 17 19 23 24 30 32 33 35 37 38 39 40 42 44 49 52 54 55 57 58 60 62 64 65 67 69 71 72 74 75 77 78 81 84 85 86 91 93 95 100 102 103 107 109 110 112 116 117 120 121 122 123 125 127 128 130 131 132 133 135 136 139 140 146 147 149 150 151 153 154 155 157 161 162 163 165 168 169 170 172 173 174 175 180 182 184 186 187 189 190 194 195 196 197 198 202 203 209 31974 211 1 1 e 31975 211 1 1 4 5 6 8 11 12 17 18 21 22 23 24 25 27 28 29 30 31 33 36 37 38 39 42 46 47 49 51 53 56 57 58 60 61 64 65 66 67 68 69 70 71 72 73 77 80 81 84 85 88 90 91 95 98 99 100 102 103 109 110 111 112 116 117 118 119 121 125 127 128 130 131 132 133 134 135 136 144 146 147 149 152 153 154 156 158 159 160 161 162 165 169 170 171 173 174 177 178 179 188 190 193 194 195 199 201 203 204 31976 211 1 1 e 31977 211 1 1 2 4 6 7 8 10 12 13 17 18 19 21 24 25 26 29 31 32 33 34 35 36 41 43 46 47 48 49 51 54 56 57 59 63 64 65 67 68 70 71 72 74 78 80 81 82 84 85 90 92 94 96 98 99 101 104 105 107 109 110 111 113 114 115 117 118 123 125 126 128 129 130 133 135 136 139 140 143 144 147 148 149 150 151 152 153 160 161 163 167 171 173 175 176 180 181 187 190 191 192 193 196 198 199 200 203 204 206 209 31978 211 1 1 e 31979 211 1 1 0 8 11 18 21 23 24 25 28 30 33 34 35 36 37 41 42 47 49 54 55 57 58 59 62 69 73 74 77 79 85 86 88 90 92 95 97 98 103 105 106 113 117 119 121 122 123 124 125 126 131 132 136 137 139 141 142 143 145 146 150 156 157 160 162 163 165 166 167 168 171 173 174 178 180 182 184 185 187 189 192 193 195 196 197 198 200 201 203 207 31980 211 1 1 e 31981 211 1 1 e 31982 211 1 1 e 31983 211 1 1 f 31984 211 1 1 e 31985 211 1 1 0 4 5 9 10 11 12 13 16 18 19 21 23 25 27 28 32 33 34 38 39 41 42 44 46 51 53 54 55 56 60 61 62 64 65 66 68 69 70 72 73 75 76 80 86 87 94 97 100 103 105 109 110 111 119 120 121 125 127 128 129 130 135 137 138 139 141 142 143 144 145 149 151 152 153 156 157 158 160 161 162 166 167 168 169 170 172 175 179 181 182 183 185 188 190 193 194 195 196 197 198 199 200 204 205 31986 211 1 1 e 31987 211 1 1 f 31988 211 1 1 e 31989 211 1 1 e 31990 211 1 1 e 31991 211 1 1 0 1 3 11 12 13 16 19 20 21 24 26 31 41 47 51 54 55 57 60 62 63 65 72 75 79 80 83 87 88 90 93 101 102 104 105 106 110 111 113 115 116 120 121 122 123 125 127 128 130 131 132 134 135 137 138 140 142 143 144 145 147 148 150 156 158 161 164 165 166 167 170 171 174 175 176 177 179 182 185 188 192 197 200 201 203 205 207 209 31992 211 1 1 e 31993 211 1 1 0 2 3 10 12 13 15 16 17 18 21 23 24 25 26 28 30 32 33 35 37 39 44 45 46 47 48 49 52 53 55 56 57 58 61 62 63 64 66 68 70 76 79 82 83 86 87 89 92 95 96 98 99 100 101 102 106 108 109 110 113 115 117 118 120 122 124 128 131 134 136 137 138 139 140 141 142 144 146 147 149 151 152 155 156 157 159 160 162 164 165 166 175 178 179 182 184 186 187 188 190 191 192 193 197 198 199 203 205 206 207 209 210 31994 211 1 1 e 31995 211 1 1 0 1 2 4 7 10 15 16 18 19 20 21 23 25 31 33 35 38 42 43 45 47 48 52 53 54 55 57 58 61 64 66 67 70 71 72 75 76 78 81 83 88 89 90 91 92 93 94 96 97 98 99 100 104 108 109 110 111 113 114 115 116 117 118 119 120 124 128 129 132 134 136 137 138 142 144 146 147 149 151 152 154 155 157 158 159 161 163 165 167 169 170 172 176 178 179 180 181 185 186 189 194 196 197 198 199 202 203 204 205 208 209 210 31996 211 1 1 e 31997 211 1 1 0 2 3 4 6 7 9 10 13 17 18 23 25 26 27 29 30 32 34 35 38 39 42 43 46 48 54 58 59 64 65 67 69 70 72 73 74 75 76 77 79 84 85 86 90 91 93 94 95 96 97 99 101 106 107 108 109 121 122 124 126 129 130 132 133 138 141 143 146 149 150 151 154 155 156 157 158 159 160 162 164 165 166 167 170 171 172 173 175 176 177 179 181 184 189 190 191 195 196 201 202 203 205 206 207 209 31998 211 1 1 e 31999 211 1 1 e 32000 211 1 1 e 32001 211 1 1 f 32002 211 1 1 e 32003 211 1 1 6 9 10 12 13 15 17 18 21 25 26 28 31 32 33 36 38 41 42 43 44 46 47 49 52 53 54 56 57 58 64 65 66 67 71 73 74 75 78 82 83 85 87 88 89 93 94 96 97 105 107 111 112 114 117 120 121 122 124 125 127 129 131 135 137 139 141 142 144 149 154 156 158 160 164 166 173 174 179 180 181 186 189 190 192 193 194 195 197 198 199 205 206 207 210 32004 211 1 1 e 32005 211 1 1 f 32006 211 1 1 e 32007 211 1 1 e 32008 211 1 1 e 32009 211 1 1 0 1 2 4 5 6 9 10 11 12 13 14 20 21 24 26 27 28 31 33 34 35 38 42 43 44 45 46 47 48 49 52 54 58 59 61 64 66 67 69 72 73 75 77 79 80 85 88 89 91 92 97 98 99 101 102 104 105 106 107 108 109 110 113 118 119 120 121 124 130 132 137 139 140 141 142 143 145 146 148 150 152 153 154 155 157 158 160 163 165 166 169 170 171 176 181 182 184 186 187 188 190 191 193 197 198 199 200 203 204 205 208 210 32010 211 1 1 e 32011 211 1 1 1 2 5 6 7 9 11 12 13 14 17 18 19 21 22 23 26 27 28 31 35 37 38 39 40 46 47 49 50 51 52 55 56 58 60 64 65 68 72 73 74 75 76 77 78 80 82 83 84 86 87 88 89 93 94 97 98 101 102 103 104 105 106 107 108 109 110 111 113 118 120 122 124 130 131 134 135 137 138 139 141 142 143 144 146 149 154 156 158 162 163 164 165 166 171 173 174 175 177 179 180 181 183 184 185 187 189 190 191 193 196 198 200 201 203 204 205 206 208 210 32012 211 1 1 e 32013 211 1 1 0 2 3 5 8 11 12 16 18 21 24 31 36 37 40 41 43 44 46 50 51 52 53 54 56 58 59 61 62 64 65 67 70 72 73 74 75 78 80 82 84 85 86 88 91 92 93 94 95 97 99 100 101 102 103 104 107 109 110 111 113 115 117 119 120 124 125 126 127 129 131 132 133 136 138 142 144 145 146 147 149 151 152 156 157 159 160 162 165 167 169 170 172 173 175 177 179 180 181 184 186 187 189 191 192 193 194 195 196 197 198 199 202 203 204 205 209 210 32014 211 1 1 e 32015 211 1 1 0 7 8 9 10 13 14 15 16 17 19 20 21 24 25 27 29 30 31 32 34 35 37 38 44 45 46 49 50 51 52 56 57 59 61 63 65 67 69 79 80 81 82 83 88 89 91 95 98 101 102 104 106 107 109 110 111 113 116 120 121 122 123 124 125 128 129 131 134 136 138 139 141 145 147 150 152 154 155 156 159 160 164 165 169 171 172 173 174 175 176 178 179 182 183 184 185 186 188 189 190 193 199 200 205 207 209 210 32016 224 0 0 e 32017 224 0 0 e 32018 224 0 0 e 32019 224 0 0 f 32020 224 0 0 e 32021 224 0 0 0 5 7 8 11 14 15 19 20 21 22 23 25 27 29 30 33 34 35 36 37 38 39 41 42 43 46 47 48 50 51 53 54 55 57 59 60 65 68 69 70 72 73 78 80 81 85 86 87 88 90 91 92 95 97 100 102 103 104 106 108 109 111 112 113 114 116 117 119 122 127 128 130 131 132 133 135 136 138 139 147 149 150 151 152 156 159 160 163 164 165 167 170 171 172 176 177 181 186 188 190 191 194 199 200 202 203 206 208 213 214 215 217 218 221 223 32022 224 0 0 e 32023 224 0 0 f 32024 224 0 0 e 32025 224 0 0 e 32026 224 0 0 e 32027 224 0 0 0 2 4 11 12 15 17 19 23 26 31 34 37 40 42 44 47 48 51 52 54 55 58 62 63 66 68 69 70 72 74 77 78 80 82 87 89 90 91 92 93 95 96 97 99 101 102 103 104 108 109 111 112 113 114 117 118 120 122 124 125 127 132 133 139 140 143 146 148 154 156 157 158 160 161 169 172 174 175 178 185 187 189 190 191 194 195 198 199 200 201 202 209 212 213 215 217 218 219 223 32028 224 0 0 e 32029 224 0 0 0 1 2 4 6 17 19 22 24 26 30 31 33 38 39 40 46 47 50 51 52 53 57 58 61 63 64 65 70 72 74 76 77 81 84 86 87 89 91 92 93 94 95 96 98 100 101 102 103 105 106 107 108 114 115 116 118 123 126 128 129 130 131 132 133 134 135 136 137 138 139 140 144 147 148 151 152 153 154 157 158 161 164 165 167 168 170 171 174 178 184 188 192 193 194 195 196 197 203 206 207 209 211 216 217 219 220 221 223 32030 224 0 0 e 32031 224 0 0 3 5 7 8 9 12 17 19 21 22 23 26 29 32 34 35 37 39 40 42 45 51 52 53 55 56 57 58 59 61 62 63 65 69 70 71 72 74 76 77 79 80 83 84 90 92 93 95 98 100 103 105 106 107 108 109 110 113 114 115 121 123 126 128 130 132 133 134 135 138 139 144 145 146 147 148 149 150 151 152 154 155 159 161 163 165 166 175 176 177 178 179 180 185 186 187 188 189 194 198 201 204 208 209 210 212 216 218 219 220 221 222 32032 224 0 0 e 32033 224 0 0 2 3 4 7 9 10 13 14 15 16 18 21 22 23 25 28 30 33 34 40 43 44 45 49 51 52 56 63 70 71 73 75 78 79 80 81 82 83 84 85 87 92 93 94 95 96 97 101 102 104 105 107 108 109 110 115 116 118 119 120 124 127 130 131 134 135 136 145 147 148 149 151 152 153 155 157 158 160 162 163 165 167 169 170 173 174 177 178 180 181 183 188 189 191 192 195 197 201 205 206 207 209 215 218 220 222 32034 224 0 0 e 32035 224 0 0 e 32036 224 0 0 e 32037 224 0 0 f 32038 224 0 0 e 32039 224 0 0 0 2 4 5 6 7 8 9 10 12 13 15 16 27 31 32 35 36 37 38 39 40 41 44 45 49 50 51 52 56 57 59 61 62 69 71 72 77 78 80 81 83 89 92 94 95 97 99 100 102 103 104 110 111 113 114 115 117 118 119 120 125 127 128 129 130 131 134 136 137 139 142 145 147 148 153 154 155 156 158 159 161 162 166 167 170 171 173 175 176 180 181 182 184 185 191 192 193 197 199 202 203 205 207 209 212 215 217 219 220 222 223 32040 224 0 0 e 32041 224 0 0 f 32042 224 0 0 e 32043 224 0 0 e 32044 224 0 0 e 32045 224 0 0 0 2 5 7 13 15 16 17 18 19 22 23 25 26 29 31 32 34 35 36 37 38 39 40 41 42 45 46 47 53 54 55 58 62 63 66 67 68 71 72 74 75 76 80 83 84 97 98 100 101 102 104 106 107 109 110 111 112 113 114 116 117 120 121 123 124 126 127 128 130 135 137 139 141 143 144 145 148 152 153 156 157 159 161 162 166 168 170 172 174 176 177 178 181 182 183 185 190 192 195 201 203 204 205 207 208 209 210 211 215 216 218 32046 224 0 0 e 32047 224 0 0 0 10 11 12 13 18 19 25 27 28 30 31 32 37 38 39 42 43 45 49 51 53 55 56 57 58 59 60 61 62 63 64 65 66 68 69 71 74 78 79 83 85 92 95 99 100 101 102 105 106 109 113 115 117 119 120 121 123 124 125 126 128 131 135 137 140 142 143 146 147 148 149 150 151 152 154 155 156 157 158 159 162 163 166 167 169 171 174 175 177 180 191 194 195 196 197 198 199 200 201 202 205 206 207 208 212 213 214 218 219 222 223 32048 224 0 0 e 32049 224 0 0 3 4 6 7 9 10 12 13 15 27 29 30 32 33 34 36 40 41 51 52 54 55 56 57 59 61 62 65 67 68 70 71 72 73 74 75 77 78 82 83 87 92 95 96 97 100 102 103 104 105 107 113 114 117 120 125 126 127 131 133 135 137 138 139 140 141 142 143 145 146 149 153 162 164 166 168 170 172 174 176 181 193 196 201 204 205 207 210 212 213 215 216 218 220 221 223 32050 224 0 0 e 32051 224 0 0 1 4 7 8 9 10 13 14 17 19 20 21 22 25 27 28 29 31 33 34 38 39 41 42 43 46 47 48 50 51 52 53 55 60 62 64 72 74 75 76 77 78 79 80 81 82 85 86 89 90 92 93 95 96 97 100 105 109 113 117 121 122 131 133 135 139 142 143 144 145 147 154 157 158 160 161 164 166 167 169 172 173 177 178 180 183 187 188 190 191 192 193 194 195 196 197 198 199 202 205 212 213 214 215 217 219 220 222 32052 224 0 0 e 32053 224 0 0 e 32054 224 0 0 e 32055 224 0 0 f 32056 224 0 0 e 32057 224 0 0 0 1 2 7 8 10 11 12 13 14 15 17 18 19 20 23 24 26 27 29 32 34 35 36 37 38 46 47 49 50 53 55 57 58 59 60 63 64 65 66 67 68 72 73 76 78 81 84 85 88 91 92 95 98 100 101 102 103 104 106 107 108 109 110 111 112 117 118 119 121 122 127 134 135 137 138 140 141 143 145 148 149 152 154 159 161 163 166 167 170 174 176 178 179 182 184 185 186 188 196 197 199 203 211 212 214 216 217 218 219 220 221 32058 224 0 0 e 32059 224 0 0 f 32060 224 0 0 e 32061 224 0 0 e 32062 224 0 0 e 32063 224 0 0 0 3 6 7 8 9 13 14 15 16 17 19 25 28 29 34 37 44 48 51 56 58 61 64 68 71 74 77 79 80 82 83 84 85 88 89 90 91 93 94 95 96 98 101 102 103 105 106 109 113 114 115 117 118 119 122 127 129 131 132 133 135 137 138 139 141 142 146 149 152 153 154 155 156 157 158 161 162 163 165 167 172 173 174 176 179 180 183 184 185 187 189 190 195 196 199 202 204 208 212 214 216 218 219 220 222 32064 224 0 0 e 32065 224 0 0 0 4 6 7 9 10 11 12 13 14 17 18 19 20 22 25 26 28 29 33 34 38 39 41 42 45 47 50 52 53 55 56 61 62 64 65 66 69 71 74 75 78 79 80 81 82 83 84 86 88 90 91 93 96 98 99 100 102 104 105 107 110 113 114 117 118 119 120 121 122 124 128 131 136 137 141 143 144 146 147 149 150 153 157 158 162 163 166 168 170 174 175 176 177 178 179 180 181 184 185 188 190 191 193 194 195 196 197 199 200 211 217 218 219 220 222 32066 224 0 0 e 32067 224 0 0 0 2 3 4 6 7 8 9 16 17 19 21 25 30 31 34 35 39 40 41 44 48 50 52 55 56 58 59 65 71 72 74 77 78 79 80 82 83 85 87 88 91 93 95 98 101 104 105 107 108 109 110 114 119 122 124 125 126 128 129 131 134 138 139 140 142 143 144 145 147 148 151 153 154 157 159 162 164 167 173 174 175 177 179 180 181 187 188 191 193 194 195 208 211 212 214 217 218 219 220 221 223 32068 224 0 0 e 32069 224 0 0 1 4 7 8 9 11 12 13 14 16 17 19 20 21 22 25 26 30 35 38 39 40 44 45 51 58 59 61 62 63 64 66 67 69 70 71 72 73 74 77 78 82 83 86 89 90 91 93 94 95 96 98 100 102 104 105 106 107 108 110 114 116 119 121 122 124 128 129 130 132 134 135 141 143 145 146 148 149 150 153 154 155 156 160 162 163 167 169 170 171 173 177 181 186 189 190 191 192 193 195 196 197 202 204 205 212 213 218 32070 224 0 0 e 32071 224 0 0 e 32072 224 0 0 e 32073 224 0 0 f 32074 224 0 0 e 32075 224 0 0 0 1 2 3 6 7 10 11 12 14 15 17 19 22 23 24 25 27 28 31 34 35 36 37 38 44 46 50 52 53 60 61 65 68 69 70 71 76 80 82 85 86 87 94 95 103 104 106 107 108 112 113 114 116 117 118 122 123 124 125 126 132 133 135 138 139 140 143 146 149 150 151 153 154 155 156 157 159 161 165 167 168 170 171 172 175 176 181 183 184 186 189 191 192 193 196 197 198 199 201 203 204 205 206 207 210 211 214 215 219 221 32076 224 0 0 e 32077 224 0 0 f 32078 224 0 0 e 32079 224 0 0 e 32080 224 0 0 e 32081 224 0 0 2 4 5 6 8 11 15 18 19 20 21 22 26 27 30 34 35 36 44 46 47 51 52 57 58 59 60 62 63 66 67 69 72 77 78 80 82 83 85 86 90 91 92 93 94 95 96 98 100 101 104 105 106 107 110 114 118 123 124 125 126 127 128 130 132 133 137 138 139 142 146 150 153 157 158 159 160 162 164 165 168 169 170 171 172 174 175 181 183 186 188 190 195 196 198 200 202 205 208 212 213 214 215 216 218 219 222 32082 224 0 0 e 32083 224 0 0 0 1 4 6 7 10 11 12 13 14 15 16 18 20 22 26 29 32 33 35 38 40 47 48 51 52 53 54 57 58 60 62 63 68 70 72 74 75 76 78 80 83 88 90 91 92 93 96 97 98 99 101 103 106 107 108 109 111 113 114 116 118 119 120 121 122 123 124 126 127 129 133 135 136 138 139 143 144 147 150 153 154 155 156 157 158 160 162 164 166 167 168 169 170 172 174 175 178 179 181 183 184 186 187 190 191 192 193 195 196 198 199 200 202 203 204 205 206 209 211 212 215 216 219 220 222 32084 224 0 0 e 32085 224 0 0 0 1 2 3 4 7 8 10 11 13 14 15 16 19 20 21 22 27 28 31 32 33 36 38 44 45 48 50 51 52 53 54 55 56 57 59 60 66 67 68 71 72 76 78 82 83 84 87 88 89 92 94 95 98 99 101 102 103 104 105 108 109 111 112 115 120 123 125 128 129 133 134 135 137 138 139 146 149 152 153 154 155 157 158 160 161 163 165 166 168 170 171 173 174 176 178 180 181 185 186 187 189 190 191 193 194 195 198 199 201 202 203 206 208 214 216 218 219 220 222 32086 224 0 0 e 32087 224 0 0 5 10 11 12 14 15 16 18 19 22 23 24 26 27 28 31 32 34 35 39 43 45 48 49 50 51 52 53 54 57 59 60 61 63 67 69 73 74 77 79 81 86 88 89 91 92 93 98 100 101 102 103 107 111 112 113 114 116 117 118 119 120 122 124 125 127 128 129 131 132 133 135 138 141 142 143 144 147 148 150 155 156 158 160 161 162 168 171 172 173 174 175 176 178 182 185 186 187 190 191 192 193 195 199 201 202 206 207 210 213 217 218 219 223 32088 224 0 1 e 32089 224 0 1 e 32090 224 0 1 e 32091 224 0 1 f 32092 224 0 1 e 32093 224 0 1 1 3 8 10 14 17 19 21 22 23 28 30 31 32 34 36 40 42 44 46 50 51 53 54 58 61 65 66 67 71 72 76 77 78 81 82 84 85 86 88 89 93 94 95 96 97 98 99 100 102 103 109 112 114 117 118 120 122 124 125 126 127 129 130 132 133 136 138 142 144 145 146 147 148 152 153 154 155 156 157 162 164 165 166 167 169 171 172 173 175 176 177 178 181 182 184 185 186 187 190 191 192 193 195 196 198 201 204 206 207 209 211 212 215 216 220 32094 224 0 1 e 32095 224 0 1 f 32096 224 0 1 e 32097 224 0 1 e 32098 224 0 1 e 32099 224 0 1 0 2 4 6 9 15 18 19 20 22 23 28 29 30 31 32 33 34 36 38 39 40 41 42 43 44 45 47 48 49 51 57 62 64 69 70 74 75 76 78 79 80 81 83 84 86 88 93 95 96 98 99 102 105 107 108 109 116 117 120 123 124 128 129 130 131 132 133 134 135 137 138 139 141 142 143 145 146 147 148 149 150 152 159 161 163 166 168 170 172 173 174 175 179 180 192 197 200 204 205 207 208 210 213 216 218 219 221 223 32100 224 0 1 e 32101 224 0 1 1 3 5 6 7 8 9 10 13 14 15 18 20 21 22 24 27 28 35 38 41 42 43 45 46 47 48 49 51 52 54 55 56 58 59 60 61 62 67 71 75 78 80 81 82 83 85 87 90 93 94 95 96 98 100 104 105 106 107 108 109 111 112 114 115 118 119 121 123 128 130 131 134 136 137 139 140 142 144 145 147 148 150 153 155 157 159 160 162 165 166 168 169 174 180 181 182 184 185 186 188 191 193 195 196 197 200 201 202 205 206 207 209 210 212 213 214 215 216 217 220 32102 224 0 1 e 32103 224 0 1 0 1 2 3 4 7 11 14 15 17 21 24 26 27 28 29 33 34 35 36 39 43 47 48 49 50 51 55 57 58 59 61 62 64 66 69 71 72 78 80 82 83 85 86 88 90 91 92 96 97 98 99 100 101 104 108 109 113 116 117 118 120 122 124 125 126 128 130 132 137 139 146 147 148 150 155 157 158 159 160 161 162 164 165 166 167 169 170 171 173 174 176 178 183 190 191 192 197 198 202 204 205 208 209 212 214 216 217 219 220 32104 224 0 1 e 32105 224 0 1 2 3 4 6 7 9 12 13 14 17 19 22 23 24 25 26 31 32 33 34 35 36 38 40 41 44 45 50 51 54 56 61 65 67 69 71 73 74 78 80 84 85 86 88 89 90 91 93 94 95 96 97 98 99 101 102 103 104 106 107 108 110 111 112 113 114 116 118 122 125 127 130 131 132 134 135 138 142 143 145 147 148 149 150 151 156 157 160 161 162 164 170 174 176 177 178 179 181 183 184 187 188 189 190 193 201 203 205 206 207 208 209 213 214 216 218 220 223 32106 224 0 1 e 32107 224 0 1 e 32108 224 0 1 e 32109 224 0 1 f 32110 224 0 1 e 32111 224 0 1 1 2 5 6 7 9 10 13 14 15 18 23 24 25 27 30 32 33 34 36 37 39 40 41 43 44 46 49 50 51 54 58 59 61 64 66 68 71 73 74 76 77 78 80 81 83 85 87 91 93 95 96 99 101 102 103 104 106 107 109 111 114 115 119 121 123 124 125 126 127 128 130 135 136 138 140 141 147 149 150 151 152 154 156 159 160 161 163 165 166 168 169 170 171 172 173 177 179 181 182 186 188 189 191 192 193 194 197 198 201 204 205 207 208 209 210 212 215 216 219 222 32112 224 0 1 e 32113 224 0 1 f 32114 224 0 1 e 32115 224 0 1 e 32116 224 0 1 e 32117 224 0 1 0 1 4 6 8 11 13 14 15 16 20 21 23 24 25 26 29 36 42 43 44 45 47 48 50 53 54 55 58 59 60 61 62 65 67 68 70 72 74 76 77 78 80 83 84 85 88 90 91 92 94 95 96 97 99 100 101 102 106 107 108 112 119 121 124 125 126 127 132 133 135 136 137 138 141 143 144 146 147 148 150 151 152 153 154 155 156 157 159 160 162 164 168 169 171 175 176 178 182 183 184 185 191 193 194 195 196 197 198 199 201 205 207 208 209 210 211 212 216 217 218 219 220 221 32118 224 0 1 e 32119 224 0 1 0 1 3 7 8 10 11 12 13 17 18 19 23 24 25 26 29 32 35 36 37 38 39 40 41 43 45 46 47 49 51 53 54 56 57 61 62 65 68 70 71 72 79 81 82 84 86 87 91 92 93 94 96 99 104 105 106 110 111 112 113 115 117 121 124 127 129 131 133 136 138 140 141 143 147 149 151 152 154 156 161 163 164 165 167 171 172 174 176 183 184 187 188 189 190 196 197 198 200 203 204 205 207 209 216 217 218 220 221 222 32120 224 0 1 e 32121 224 0 1 0 2 3 5 6 11 13 14 17 18 19 22 25 26 28 33 37 38 40 41 42 44 45 47 49 52 53 55 58 59 61 68 69 70 72 76 78 79 80 81 82 84 86 87 89 90 93 95 96 98 103 104 105 106 108 111 112 113 114 116 117 119 121 122 125 126 127 129 130 132 133 134 138 141 142 143 148 150 151 152 153 155 157 161 165 167 168 169 170 171 174 175 177 178 180 182 184 185 186 188 189 191 193 194 198 200 202 206 207 208 210 217 219 32122 224 0 1 e 32123 224 0 1 0 2 3 5 7 10 13 16 17 19 21 22 24 25 27 29 30 31 32 35 41 42 44 45 50 52 56 59 60 61 63 66 68 69 70 71 72 74 76 77 79 80 82 84 85 86 87 89 92 95 96 97 98 100 102 108 114 119 122 123 124 125 129 131 133 134 136 137 141 143 145 146 149 150 154 155 157 158 159 161 162 164 165 166 168 169 170 171 172 173 174 175 177 180 181 183 185 186 191 194 196 200 201 202 204 208 210 211 212 214 215 217 218 219 220 221 32124 224 0 1 e 32125 224 0 1 e 32126 224 0 1 e 32127 224 0 1 f 32128 224 0 1 e 32129 224 0 1 2 6 7 8 9 13 14 15 16 17 19 24 25 27 28 29 30 33 34 35 37 40 41 43 46 50 51 52 54 62 63 65 67 69 70 72 76 79 80 82 84 85 86 88 90 92 93 94 96 104 105 108 109 111 116 118 119 120 121 123 124 127 128 130 132 137 138 140 142 144 146 147 149 150 152 153 154 155 158 159 160 161 165 166 168 169 170 171 173 176 178 181 182 184 185 187 188 189 190 191 192 195 196 199 203 204 205 206 207 208 209 212 216 217 219 220 222 32130 224 0 1 e 32131 224 0 1 f 32132 224 0 1 e 32133 224 0 1 e 32134 224 0 1 e 32135 224 0 1 2 4 6 7 8 10 11 13 14 16 21 22 24 28 30 31 37 38 39 40 42 43 47 48 50 51 52 54 57 59 60 61 62 64 65 67 69 70 71 72 75 78 79 83 84 85 87 90 95 96 98 99 100 108 109 111 112 114 117 120 121 123 124 126 130 131 133 136 140 144 145 146 147 149 150 151 154 155 158 159 164 170 171 172 173 177 178 182 186 187 195 196 198 199 200 202 204 205 207 209 210 212 213 216 217 218 220 221 223 32136 224 0 1 e 32137 224 0 1 2 3 6 7 8 10 12 13 15 17 18 21 25 27 31 32 35 36 38 39 40 42 43 46 49 50 52 54 59 60 61 62 68 70 71 72 73 74 75 77 79 80 83 84 88 89 92 94 100 102 105 107 109 110 113 114 118 119 120 123 124 126 128 131 132 137 139 140 142 145 146 149 153 154 155 157 161 166 171 172 175 177 180 181 182 183 184 185 186 188 190 192 194 196 197 198 199 201 202 203 206 210 211 213 214 217 218 221 32138 224 0 1 e 32139 224 0 1 0 1 2 5 7 8 10 11 12 13 15 18 19 21 23 24 26 32 33 35 38 42 43 45 48 49 51 54 55 56 59 62 63 64 65 66 67 68 70 71 74 76 77 78 80 81 83 84 85 86 88 89 91 92 93 96 97 98 100 101 104 105 107 109 110 111 113 114 119 120 125 127 129 130 133 138 139 145 148 149 152 155 156 164 169 170 173 174 176 177 182 184 185 186 195 197 198 199 202 207 209 210 212 218 221 32140 224 0 1 e 32141 224 0 1 0 1 3 4 5 6 8 9 10 13 17 19 20 21 23 26 29 32 33 40 42 44 46 47 48 49 51 56 58 60 61 64 65 66 67 69 71 72 80 81 82 83 86 91 93 94 96 97 98 99 100 103 105 107 108 110 111 114 115 118 120 121 122 123 126 127 129 132 134 136 137 138 139 140 143 144 145 147 149 150 151 154 158 160 161 164 165 170 171 173 175 177 178 181 183 185 186 188 189 191 193 194 195 196 198 199 201 204 207 208 209 210 213 215 217 218 221 223 32142 224 0 1 e 32143 224 0 1 e 32144 224 0 1 e 32145 224 0 1 f 32146 224 0 1 e 32147 224 0 1 1 3 8 11 12 13 17 19 20 21 22 24 25 26 27 28 29 32 34 35 36 39 40 41 42 43 44 46 48 50 51 53 56 62 63 64 65 66 67 70 71 72 73 74 75 76 77 78 79 81 82 83 84 86 87 91 92 93 94 95 96 97 98 99 100 101 102 103 105 106 109 111 112 115 116 120 121 122 124 125 129 132 138 139 140 143 144 145 149 150 152 153 154 157 158 159 160 163 164 165 166 169 170 172 174 175 179 181 184 185 186 188 189 191 193 194 196 197 199 204 208 213 216 219 220 221 222 32148 224 0 1 e 32149 224 0 1 f 32150 224 0 1 e 32151 224 0 1 e 32152 224 0 1 e 32153 224 0 1 0 1 2 3 4 6 8 9 10 11 13 15 17 19 20 21 24 25 27 29 31 33 35 36 40 41 42 43 45 49 50 55 56 59 60 61 63 65 66 68 69 74 75 76 78 80 81 83 84 86 89 94 95 96 98 100 101 104 106 107 110 111 112 113 116 117 118 119 120 121 122 123 124 125 127 128 129 130 131 132 134 138 142 144 145 148 149 153 154 158 160 162 166 172 173 176 177 178 181 183 185 186 187 188 190 191 194 195 198 200 204 205 209 214 215 219 221 223 32154 224 0 1 e 32155 224 0 1 1 2 4 12 13 15 17 19 20 21 23 26 28 29 30 32 33 34 36 38 40 41 42 44 45 48 49 51 53 55 61 62 63 64 65 67 70 71 73 76 77 79 81 83 85 86 87 90 91 93 94 95 98 99 101 102 103 106 108 110 115 119 120 122 123 126 127 128 129 134 135 137 142 143 144 148 149 151 153 154 155 157 161 163 166 167 171 174 176 179 181 183 184 188 189 192 193 198 199 200 202 205 208 209 210 212 214 216 218 219 32156 224 0 1 e 32157 224 0 1 0 4 10 11 12 15 19 20 24 30 31 40 41 42 46 49 50 53 55 61 62 63 64 65 66 69 71 74 78 80 83 86 88 89 91 93 96 97 99 103 105 106 108 110 112 113 115 117 118 119 121 125 127 131 132 135 136 137 141 142 143 145 149 150 156 157 159 160 164 170 172 174 175 176 177 179 181 182 184 185 192 196 199 201 202 203 204 206 208 209 210 211 214 217 223 32158 224 0 1 e 32159 224 0 1 0 4 5 6 7 8 10 12 14 15 16 19 26 27 28 29 34 35 38 39 41 42 43 48 50 51 53 54 58 59 61 62 69 70 72 74 76 77 80 82 83 84 86 87 88 90 92 93 95 98 99 100 104 113 116 117 120 124 125 127 129 130 131 135 138 140 141 142 146 148 149 151 152 154 156 158 159 162 163 165 168 171 172 173 176 177 179 185 189 191 196 199 202 204 205 207 216 217 220 222 223 32160 224 1 0 e 32161 224 1 0 e 32162 224 1 0 e 32163 224 1 0 f 32164 224 1 0 e 32165 224 1 0 0 1 2 3 6 10 11 13 15 16 18 19 20 21 23 24 26 27 29 32 36 38 40 41 44 47 48 49 52 53 55 56 58 62 64 65 66 67 71 75 76 78 79 84 85 87 91 97 98 103 104 105 106 107 111 112 113 115 117 118 119 120 125 126 127 128 129 132 133 134 135 137 139 141 143 144 145 146 150 152 154 157 158 159 164 168 169 172 173 177 178 179 181 191 192 193 195 196 199 203 207 210 211 212 216 217 218 219 222 223 32166 224 1 0 e 32167 224 1 0 f 32168 224 1 0 e 32169 224 1 0 e 32170 224 1 0 e 32171 224 1 0 4 8 9 13 14 15 16 17 18 19 20 21 23 24 25 26 27 30 33 35 36 38 42 44 48 49 50 56 57 58 59 60 63 64 67 68 70 71 74 75 77 80 81 83 84 86 91 94 97 98 99 100 103 104 106 107 108 109 110 117 125 127 129 133 134 135 136 140 142 145 150 152 153 154 155 157 160 161 163 167 170 176 178 183 184 185 186 187 188 189 190 194 197 198 200 201 204 207 209 210 211 212 213 216 217 218 220 221 223 32172 224 1 0 e 32173 224 1 0 2 4 8 9 11 12 13 17 18 21 23 24 26 28 29 30 33 34 36 39 41 42 43 44 47 53 57 58 60 62 63 65 68 69 70 73 76 77 81 82 85 86 87 88 90 91 92 93 94 97 100 102 105 108 109 111 115 118 120 121 122 123 125 126 127 128 132 134 139 140 141 142 148 150 152 153 160 161 162 163 166 168 171 175 176 177 179 180 181 183 184 188 189 192 196 198 200 204 206 207 213 215 217 219 220 221 223 32174 224 1 0 e 32175 224 1 0 6 9 14 15 16 18 19 22 24 27 28 29 31 32 34 35 37 42 46 47 52 53 58 59 60 61 63 64 65 73 76 79 83 86 88 89 90 93 94 99 102 103 106 107 109 110 113 116 117 121 122 123 126 129 130 131 132 133 135 136 137 138 139 140 142 143 144 145 146 148 149 150 151 157 159 164 166 168 170 174 175 179 180 181 183 184 185 186 187 191 194 195 198 200 203 206 209 210 214 215 216 217 219 220 221 223 32176 224 1 0 e 32177 224 1 0 0 1 2 5 8 14 15 16 17 21 23 25 28 30 31 33 34 35 37 38 40 41 42 43 48 50 56 58 59 61 62 64 66 67 71 77 78 81 84 85 87 89 93 95 99 103 105 107 109 110 111 120 122 123 124 125 127 131 132 133 135 137 139 140 142 144 145 146 147 149 150 151 152 159 164 165 168 169 173 175 177 181 183 185 186 188 190 192 193 194 195 196 197 202 204 205 206 207 209 212 214 215 216 219 221 223 32178 224 1 0 e 32179 224 1 0 e 32180 224 1 0 e 32181 224 1 0 f 32182 224 1 0 e 32183 224 1 0 2 4 7 9 10 12 15 17 18 21 22 24 25 27 28 32 34 35 36 42 43 44 46 49 54 64 66 70 71 72 74 75 76 78 79 83 84 86 88 90 92 98 99 100 101 102 103 106 107 108 109 110 114 116 117 118 119 122 123 124 128 131 133 134 137 142 143 144 145 146 147 148 149 150 151 153 154 155 160 166 167 168 172 175 176 178 179 180 182 185 190 192 193 201 202 205 206 209 210 213 217 218 219 221 222 32184 224 1 0 e 32185 224 1 0 f 32186 224 1 0 e 32187 224 1 0 e 32188 224 1 0 e 32189 224 1 0 1 5 6 7 8 10 11 13 15 16 18 19 20 30 31 32 34 36 38 39 44 47 48 49 52 55 58 60 61 62 64 68 70 71 73 78 79 80 81 82 84 85 86 87 88 89 90 93 94 95 96 97 98 100 101 109 110 111 114 115 116 119 120 121 122 123 131 132 134 135 137 141 142 146 147 148 149 152 155 158 163 165 166 167 168 169 170 171 173 176 177 180 182 185 186 187 188 189 190 192 193 194 195 196 200 202 204 205 208 210 212 215 216 217 223 32190 224 1 0 e 32191 224 1 0 1 3 4 6 7 9 10 11 13 15 17 18 19 20 21 24 25 27 28 29 30 32 34 35 36 37 38 39 40 41 42 43 46 47 50 54 57 58 60 61 63 66 71 73 74 75 77 78 81 82 84 86 89 92 93 99 100 101 102 103 104 105 106 107 111 116 117 120 121 122 124 126 132 133 135 136 137 138 142 143 146 151 158 159 167 169 171 174 175 177 178 179 182 183 184 191 195 196 197 198 200 201 203 206 207 208 209 214 215 219 222 223 32192 224 1 0 e 32193 224 1 0 1 4 5 6 8 12 14 15 16 18 20 21 27 28 30 31 32 34 35 36 38 41 43 44 45 46 48 50 51 52 53 54 55 56 58 62 66 67 70 72 76 77 78 79 80 84 85 86 87 88 90 92 93 95 96 97 98 100 108 109 110 112 113 115 121 123 126 128 135 136 138 142 143 144 145 147 148 150 153 154 156 163 164 168 169 171 172 173 176 177 178 180 181 183 191 192 193 196 200 202 207 208 209 210 215 218 221 222 223 32194 224 1 0 e 32195 224 1 0 1 6 8 9 11 14 15 17 18 19 22 23 25 26 28 29 30 31 32 33 34 36 37 38 39 41 43 45 48 49 52 55 56 57 58 61 62 63 69 74 77 78 79 82 83 85 90 91 92 94 96 97 100 104 105 106 107 109 112 114 115 118 119 121 124 127 130 132 136 137 138 141 142 143 144 145 146 149 155 156 163 166 171 173 174 176 177 179 182 183 187 190 193 194 195 196 198 203 204 205 207 213 216 218 221 32196 224 1 0 e 32197 224 1 0 e 32198 224 1 0 e 32199 224 1 0 f 32200 224 1 0 e 32201 224 1 0 0 1 3 5 6 8 9 12 19 23 24 25 30 34 35 37 39 40 41 43 45 49 51 54 55 57 62 63 64 65 66 67 68 70 71 72 74 78 80 81 85 87 88 92 93 96 100 103 104 105 106 109 110 112 113 116 117 118 119 123 125 127 129 133 134 136 137 138 139 140 145 146 149 151 152 153 154 156 161 162 163 165 168 169 174 175 177 179 181 184 186 187 189 191 192 196 197 199 200 201 208 209 212 213 214 215 216 217 218 220 32202 224 1 0 e 32203 224 1 0 f 32204 224 1 0 e 32205 224 1 0 e 32206 224 1 0 e 32207 224 1 0 0 3 4 5 6 7 9 10 11 16 18 19 21 26 29 30 31 32 36 37 39 41 42 43 44 45 46 48 49 58 60 62 65 66 68 69 70 71 75 79 80 82 83 89 90 91 92 94 99 100 101 103 105 106 108 109 110 112 113 114 115 116 117 118 119 124 125 127 131 132 134 135 136 138 140 141 146 147 148 152 156 158 159 161 162 163 164 166 167 170 171 172 174 175 179 182 183 185 186 188 190 191 192 194 195 201 202 204 206 207 210 211 215 218 219 222 32208 224 1 0 e 32209 224 1 0 1 4 6 7 8 10 11 12 13 15 16 17 19 21 24 25 26 27 30 31 36 38 41 44 45 47 51 53 59 61 62 63 66 67 69 71 72 73 76 77 81 83 85 87 88 90 93 95 98 99 102 103 107 108 109 114 115 118 120 121 122 124 125 126 129 130 132 133 136 137 139 140 144 162 169 176 177 180 181 185 189 190 191 193 194 195 198 199 204 205 206 210 214 218 219 221 223 32210 224 1 0 e 32211 224 1 0 1 2 3 5 6 7 11 12 13 18 21 22 23 24 25 28 29 30 31 36 37 38 39 40 44 47 48 49 50 51 52 56 60 61 62 63 64 65 66 69 72 76 77 78 81 82 83 84 85 86 87 90 91 92 93 94 95 98 99 100 101 102 105 107 110 111 112 116 118 119 121 122 123 130 132 135 137 140 141 142 144 147 152 153 154 155 156 158 161 163 164 166 167 168 169 172 173 176 177 178 179 180 182 184 185 186 187 188 190 191 192 193 195 196 197 199 200 202 207 208 210 215 216 217 220 221 222 223 32212 224 1 0 e 32213 224 1 0 0 2 3 9 12 13 14 15 16 17 18 19 24 26 29 30 31 32 41 44 46 48 49 50 51 52 53 54 55 56 58 59 60 63 66 67 68 69 71 72 73 74 76 77 81 82 83 84 87 89 94 99 101 102 108 109 111 114 115 116 117 118 121 126 127 130 131 132 133 134 135 136 137 138 142 143 144 145 146 148 151 152 154 155 157 159 160 162 164 167 169 170 171 173 174 175 176 180 185 187 188 190 192 194 197 200 201 203 204 205 206 209 210 211 213 215 221 222 32214 224 1 0 e 32215 224 1 0 e 32216 224 1 0 e 32217 224 1 0 f 32218 224 1 0 e 32219 224 1 0 0 2 6 9 10 11 12 20 21 22 24 26 30 31 32 36 40 42 43 44 46 48 50 51 56 57 58 64 65 66 67 68 70 71 72 73 74 75 77 81 83 85 88 89 90 93 94 96 99 100 102 107 113 115 123 127 128 129 130 132 134 136 138 140 142 144 145 149 150 151 152 154 161 162 165 168 170 171 172 174 175 179 180 181 182 183 185 187 190 191 193 194 195 200 203 204 209 212 215 217 218 219 221 223 32220 224 1 0 e 32221 224 1 0 f 32222 224 1 0 e 32223 224 1 0 e 32224 224 1 0 e 32225 224 1 0 0 1 5 6 8 11 13 14 15 21 23 24 25 27 28 29 30 36 37 45 46 48 49 51 53 54 55 57 59 67 76 77 81 85 86 90 93 98 101 104 106 108 109 110 111 113 114 124 127 130 132 133 135 136 137 138 140 142 143 144 147 148 150 151 153 156 158 159 161 162 166 168 172 179 181 182 183 184 185 186 188 192 193 196 197 199 200 202 205 206 207 208 209 213 214 215 32226 224 1 0 e 32227 224 1 0 1 2 5 6 7 8 13 14 15 17 18 20 23 26 27 29 30 31 32 33 36 38 39 43 46 47 48 51 52 53 54 55 58 59 61 63 64 65 67 68 70 72 73 80 85 91 93 94 97 102 103 108 110 112 113 114 116 118 120 121 124 125 126 128 130 132 133 135 139 140 143 148 149 150 151 152 153 155 156 158 159 160 161 163 166 167 168 170 171 174 175 176 178 179 181 182 184 186 187 188 189 190 191 192 193 198 201 203 204 206 207 208 209 211 218 221 222 223 32228 224 1 0 e 32229 224 1 0 1 2 3 5 7 9 10 15 17 18 19 20 22 25 26 27 28 29 30 33 34 35 40 45 46 51 53 54 57 59 61 62 63 65 67 68 70 76 77 78 79 80 81 82 88 90 93 94 97 98 99 100 101 102 104 108 109 110 111 114 116 117 124 125 127 132 133 136 139 141 145 146 147 149 150 152 156 157 158 160 161 164 170 172 173 174 175 179 180 182 183 186 187 188 189 190 193 195 196 201 203 204 205 206 207 208 209 211 212 215 217 218 219 222 223 32230 224 1 0 e 32231 224 1 0 0 5 6 7 8 9 11 12 13 17 18 19 20 25 26 27 28 30 31 35 37 39 43 45 46 49 51 52 54 55 56 60 62 63 64 65 67 72 73 74 75 77 79 83 84 86 87 88 90 91 92 93 98 101 105 106 108 109 110 111 114 116 117 118 120 121 122 129 131 135 136 137 139 142 145 147 149 151 153 167 169 170 172 173 177 180 182 184 185 186 187 189 192 193 195 196 197 198 199 204 205 207 208 210 213 215 220 223 32232 224 1 1 e 32233 224 1 1 e 32234 224 1 1 e 32235 224 1 1 f 32236 224 1 1 e 32237 224 1 1 0 2 3 4 7 8 10 13 16 19 21 22 23 26 29 31 33 34 40 44 45 46 47 49 50 51 52 53 58 59 61 62 64 65 66 68 69 71 73 74 76 77 80 82 83 87 88 89 92 94 95 96 99 101 102 103 104 105 106 107 110 113 114 115 121 122 128 133 135 136 138 141 143 144 146 148 150 151 156 158 159 160 161 164 165 167 168 169 170 172 176 178 179 182 183 184 185 187 189 190 192 194 195 197 198 200 201 202 203 209 210 211 213 214 216 217 220 222 223 32238 224 1 1 e 32239 224 1 1 f 32240 224 1 1 e 32241 224 1 1 e 32242 224 1 1 e 32243 224 1 1 1 3 4 6 7 8 9 10 12 13 16 22 23 28 29 31 35 36 37 40 41 47 50 51 55 58 59 60 63 65 67 70 71 74 77 79 80 81 86 94 95 96 102 105 106 109 110 113 116 117 118 120 121 124 125 126 127 128 129 130 132 135 136 137 141 143 144 146 148 152 155 157 159 160 161 162 164 167 168 170 172 173 174 176 178 180 181 185 186 189 190 191 193 196 198 203 204 205 209 211 214 216 217 222 223 32244 224 1 1 e 32245 224 1 1 3 5 6 8 12 15 16 19 24 27 29 31 32 33 34 36 39 40 41 43 45 49 53 54 56 58 62 64 65 67 69 72 73 74 78 79 84 86 87 88 89 91 92 95 96 97 98 100 103 104 108 114 116 121 124 125 127 129 133 134 138 141 143 148 149 150 151 152 155 156 158 161 162 163 164 165 166 167 168 169 172 173 176 177 179 180 182 183 185 190 191 193 194 195 197 198 202 204 207 209 210 215 217 219 220 222 32246 224 1 1 e 32247 224 1 1 2 3 4 5 8 10 11 12 14 17 18 23 24 26 27 28 29 31 35 36 38 42 43 44 46 47 50 52 57 58 59 60 61 62 63 64 65 67 69 70 72 73 76 77 79 81 83 84 86 87 88 90 92 94 95 96 97 99 101 108 110 111 113 115 116 117 118 119 120 122 123 125 127 130 131 132 133 134 136 137 141 144 146 150 151 153 161 162 167 170 172 173 177 178 182 184 186 187 189 191 193 194 197 198 200 206 208 211 213 216 217 218 221 222 32248 224 1 1 e 32249 224 1 1 1 5 7 13 14 18 23 26 27 28 30 31 32 34 35 36 37 39 40 44 45 48 49 51 57 58 59 60 65 66 69 72 73 77 79 83 86 87 88 89 93 95 97 98 99 102 103 104 106 108 113 114 115 116 120 122 123 124 126 128 129 130 131 132 133 135 136 137 139 140 144 145 146 147 148 149 150 151 152 153 154 155 158 159 161 162 165 168 170 171 173 177 178 179 180 182 184 185 187 188 189 190 194 195 196 197 200 201 203 206 208 210 213 215 218 222 223 32250 224 1 1 e 32251 224 1 1 e 32252 224 1 1 e 32253 224 1 1 f 32254 224 1 1 e 32255 224 1 1 2 3 4 5 8 9 11 12 16 21 24 26 28 30 32 35 37 40 41 43 45 46 47 48 53 58 60 62 63 64 65 66 68 73 75 78 80 81 82 84 86 87 88 91 92 93 94 95 96 97 99 101 103 107 108 114 115 118 120 122 123 125 126 130 131 132 136 137 141 142 145 147 150 152 153 155 156 162 166 170 171 173 175 177 179 182 183 186 191 195 196 200 201 204 209 210 213 215 218 219 220 222 32256 224 1 1 e 32257 224 1 1 f 32258 224 1 1 e 32259 224 1 1 e 32260 224 1 1 e 32261 224 1 1 1 2 5 6 8 10 11 12 13 14 15 16 17 19 20 21 22 25 26 29 32 33 35 37 39 41 42 43 48 50 52 55 57 60 62 64 65 66 68 69 70 71 72 75 77 78 79 80 82 83 84 87 88 90 99 100 101 108 109 111 113 115 116 119 120 121 122 123 126 129 130 131 132 133 135 136 138 139 140 141 143 144 150 151 153 154 156 159 161 163 167 169 172 174 179 184 185 190 192 193 194 195 197 198 201 203 206 210 214 215 216 217 218 219 222 223 32262 224 1 1 e 32263 224 1 1 1 5 6 7 9 12 14 15 21 22 26 29 31 32 33 34 35 36 37 38 40 44 48 49 50 51 52 53 55 59 61 63 64 66 67 69 70 74 75 76 77 79 80 81 82 84 87 89 90 91 94 96 97 98 100 101 103 106 111 113 115 117 118 119 120 121 124 127 128 130 131 134 135 136 137 139 140 141 142 144 147 150 152 155 157 158 161 163 165 166 167 168 170 171 173 174 175 178 179 181 184 185 188 190 192 199 200 202 203 205 206 207 208 209 210 212 213 214 215 216 220 222 223 32264 224 1 1 e 32265 224 1 1 0 4 5 8 9 12 14 15 17 20 22 24 26 29 31 32 34 35 38 39 40 41 42 44 47 50 51 52 54 56 59 61 63 64 65 67 68 69 74 75 77 80 85 86 87 89 94 98 99 100 105 106 110 111 113 117 123 124 126 127 131 134 136 137 138 139 140 142 143 144 145 146 147 149 154 155 160 163 164 165 169 171 172 173 178 180 181 183 190 191 192 193 194 197 199 203 204 205 206 207 208 210 220 221 32266 224 1 1 e 32267 224 1 1 0 2 3 7 11 12 14 15 16 17 19 20 22 25 26 27 30 35 36 42 45 46 48 53 54 55 57 58 60 61 64 66 67 69 70 73 77 79 80 81 84 86 88 92 96 97 98 99 100 101 102 103 105 106 107 110 115 118 119 122 123 124 126 127 128 132 133 134 135 137 138 140 141 142 143 144 145 147 148 149 151 152 153 156 157 158 159 160 161 162 163 165 171 172 173 174 176 177 178 179 181 186 188 189 190 191 195 196 199 200 202 206 207 211 213 214 215 216 217 219 220 221 223 32268 224 1 1 e 32269 224 1 1 e 32270 224 1 1 e 32271 224 1 1 f 32272 224 1 1 e 32273 224 1 1 3 6 8 9 11 12 14 17 20 23 24 25 26 35 36 41 43 44 48 49 50 51 52 53 54 55 56 57 58 59 60 64 65 69 70 77 78 81 84 88 91 93 96 97 98 100 101 102 104 106 108 109 110 114 116 118 119 122 123 129 131 132 135 137 140 142 144 145 151 153 154 155 157 158 160 163 164 165 168 169 170 172 173 174 175 176 179 182 183 186 187 189 193 195 197 201 202 204 208 212 216 217 220 222 223 32274 224 1 1 e 32275 224 1 1 f 32276 224 1 1 e 32277 224 1 1 e 32278 224 1 1 e 32279 224 1 1 0 5 7 8 12 14 16 18 19 20 21 24 25 26 27 30 33 36 40 45 47 48 51 52 54 58 61 65 66 67 68 69 72 74 77 78 79 80 85 90 92 93 94 95 98 100 101 104 105 107 108 110 113 114 116 117 118 119 120 122 124 129 131 135 138 139 142 144 146 150 151 153 155 156 158 160 161 162 163 165 169 170 172 174 175 176 178 179 181 186 187 189 190 191 193 197 201 202 206 207 212 215 216 217 218 219 222 223 32280 224 1 1 e 32281 224 1 1 3 4 5 6 13 14 16 17 19 23 25 29 30 31 32 33 34 35 36 40 41 43 44 48 52 53 57 59 62 68 71 73 74 75 77 81 82 84 88 89 93 94 98 100 103 105 106 108 110 114 116 119 121 124 126 129 130 132 133 136 138 139 140 144 147 149 151 152 153 156 158 160 162 163 165 169 171 173 177 179 180 181 185 186 188 189 190 191 193 194 195 196 199 201 202 203 204 207 208 210 211 215 216 219 220 222 32282 224 1 1 e 32283 224 1 1 4 5 7 10 13 17 19 24 25 27 28 30 31 33 34 38 42 44 45 47 49 50 51 52 53 54 59 61 63 66 70 74 76 77 78 82 83 84 90 91 92 95 97 98 100 103 105 106 108 109 111 112 113 114 115 116 117 118 120 122 125 126 131 132 133 135 138 139 140 141 142 146 148 152 153 155 157 160 162 164 165 168 169 170 172 174 175 178 179 180 181 182 185 186 189 193 195 196 198 201 202 203 204 210 211 212 213 214 217 219 221 222 32284 224 1 1 e 32285 224 1 1 0 1 3 4 6 8 9 10 11 13 15 16 17 19 21 23 24 25 27 32 33 34 37 39 42 45 50 52 54 57 58 60 61 64 68 70 73 74 76 77 78 79 81 85 88 89 91 92 93 94 96 99 101 102 105 107 108 109 110 113 117 121 123 125 126 128 129 130 133 134 135 136 137 138 140 141 143 146 147 148 149 152 155 156 157 158 159 160 161 162 164 165 166 169 171 173 176 177 187 190 193 195 198 201 202 205 206 215 220 223 32286 224 1 1 e 32287 224 1 1 e 32288 224 1 1 e 32289 224 1 1 f 32290 224 1 1 e 32291 224 1 1 1 2 3 4 5 8 11 15 17 25 27 28 30 32 33 34 35 36 38 39 40 42 43 44 46 52 53 54 56 57 62 65 66 68 69 71 74 75 77 79 81 83 85 88 90 92 95 102 103 104 105 106 109 110 111 112 114 117 124 125 127 131 132 134 135 136 138 141 145 148 149 150 154 155 157 158 159 162 168 170 174 178 181 182 184 190 191 192 193 197 198 200 201 202 204 206 208 209 211 216 217 218 221 32292 224 1 1 e 32293 224 1 1 f 32294 224 1 1 e 32295 224 1 1 e 32296 224 1 1 e 32297 224 1 1 0 2 4 5 7 12 13 14 16 21 22 24 29 30 31 35 44 45 47 50 52 53 56 59 61 62 65 66 68 69 71 72 74 75 76 77 79 80 81 82 87 90 96 97 102 105 106 107 109 110 115 117 119 120 121 122 123 124 126 128 129 132 135 136 137 138 139 142 146 147 148 152 153 155 156 157 158 159 160 162 165 167 169 172 175 179 182 183 185 187 188 193 198 200 201 204 205 207 208 211 212 215 216 217 220 221 223 32298 224 1 1 e 32299 224 1 1 0 5 9 14 15 16 22 23 24 25 30 31 32 35 37 40 41 42 44 45 47 49 51 52 55 57 58 61 63 64 65 66 68 70 73 74 77 79 80 81 83 85 88 90 100 102 103 104 113 114 116 118 119 120 121 122 127 129 133 138 139 140 141 144 146 148 149 151 152 154 159 163 166 167 168 169 170 171 172 177 178 180 182 185 186 187 189 190 191 194 195 196 197 198 199 201 202 205 206 207 208 209 210 211 212 213 216 217 220 32300 224 1 1 e 32301 224 1 1 1 2 3 5 6 7 8 13 14 16 17 19 20 23 25 29 30 31 36 37 38 40 43 44 45 46 51 60 61 62 64 65 68 75 77 78 80 81 83 86 88 89 95 96 97 98 100 101 102 103 105 109 112 114 115 116 117 118 121 123 124 125 127 130 131 132 135 136 138 140 145 146 147 150 151 155 156 159 166 169 171 172 175 176 177 178 182 185 186 187 188 197 203 206 208 211 213 214 215 217 219 220 221 222 223 32302 224 1 1 e 32303 224 1 1 0 3 5 8 9 10 11 12 17 23 25 29 30 32 33 34 38 42 44 45 47 48 49 50 51 52 55 56 58 59 60 62 65 69 73 75 76 77 80 82 85 86 87 96 97 98 99 103 105 108 109 112 115 116 117 119 120 121 123 124 126 127 128 130 131 132 133 136 137 145 146 148 150 152 154 155 156 157 159 160 161 163 166 167 169 171 172 176 177 179 182 183 184 185 189 190 192 195 196 197 198 199 200 201 202 204 205 206 207 208 209 210 211 215 221 222 32304 247 0 0 e 32305 247 0 0 e 32306 247 0 0 e 32307 247 0 0 f 32308 247 0 0 e 32309 247 0 0 0 1 2 7 8 9 13 15 16 20 23 26 34 41 42 44 48 49 50 58 59 63 64 68 71 75 77 82 83 84 91 92 93 94 97 98 99 102 103 106 107 111 112 113 117 118 119 120 121 122 123 124 127 129 130 131 133 134 135 138 139 140 141 144 145 146 148 149 150 151 152 153 157 159 160 162 163 166 167 168 170 171 178 179 180 181 182 183 187 188 189 191 194 195 196 198 199 200 204 205 206 207 208 209 210 211 213 214 215 216 217 218 219 220 222 223 226 228 230 231 232 235 238 241 243 245 246 32310 247 0 0 e 32311 247 0 0 f 32312 247 0 0 e 32313 247 0 0 e 32314 247 0 0 e 32315 247 0 0 0 2 3 6 8 10 11 14 18 20 22 23 25 30 31 35 38 42 43 46 49 50 51 52 55 56 57 60 61 62 64 66 67 70 72 74 75 77 81 83 84 86 88 89 91 94 95 103 106 107 108 109 110 111 113 115 117 118 119 125 126 128 134 138 139 140 141 143 145 151 154 157 159 160 162 163 165 166 167 168 169 171 173 177 178 180 181 182 183 184 185 186 187 189 190 191 192 195 196 197 199 201 206 208 212 214 216 219 220 221 224 227 228 232 235 237 238 240 246 32316 247 0 0 e 32317 247 0 0 1 3 4 5 6 7 9 10 11 14 16 17 18 19 30 31 32 34 35 37 38 40 43 44 45 47 48 50 53 54 55 57 61 65 68 69 70 77 79 80 81 84 85 88 89 90 92 93 95 96 97 99 100 104 105 106 107 109 110 112 114 115 121 123 124 125 126 127 128 130 132 133 134 135 136 138 141 142 144 145 149 152 153 155 156 158 159 160 163 165 166 171 176 177 180 181 182 184 187 188 189 190 191 193 194 195 196 200 201 204 205 207 208 209 211 212 213 215 218 219 221 222 223 224 226 227 228 231 232 233 235 236 237 238 239 240 243 245 246 32318 247 0 0 e 32319 247 0 0 0 1 3 5 6 8 14 23 24 25 27 28 34 36 38 39 40 41 42 43 44 47 50 51 53 55 56 58 61 64 65 66 67 68 72 73 75 76 82 84 85 88 89 91 95 96 97 99 100 102 104 105 106 107 108 110 111 115 116 120 122 123 124 125 129 130 131 132 133 135 137 140 141 142 143 144 145 146 148 149 152 153 154 156 158 159 160 162 164 165 166 169 173 174 175 176 178 180 181 182 183 184 186 190 191 192 196 197 200 203 205 206 207 210 211 215 216 218 219 222 223 224 225 231 232 234 235 241 242 246 32320 247 0 0 e 32321 247 0 0 0 7 9 10 11 14 16 17 19 22 31 34 38 40 44 46 48 49 55 58 61 66 68 69 70 73 74 76 77 81 83 90 92 93 95 99 101 108 109 111 112 114 115 117 118 120 123 124 127 130 132 133 136 137 140 141 144 145 146 147 151 152 153 154 156 158 159 160 163 165 166 167 168 173 175 177 178 180 181 182 186 189 193 195 197 199 201 202 205 206 207 213 215 216 219 222 224 225 226 227 228 230 238 240 243 244 246 32322 247 0 0 e 32323 247 0 0 e 32324 247 0 0 e 32325 247 0 0 f 32326 247 0 0 e 32327 247 0 0 0 1 4 11 12 14 17 19 22 23 25 27 32 34 35 36 37 38 44 45 46 48 50 52 53 55 56 58 60 63 64 67 70 71 72 78 80 81 84 85 87 90 91 92 94 96 99 100 102 105 106 107 109 110 111 117 118 121 126 129 133 134 135 136 137 143 144 145 148 150 155 158 159 165 168 169 173 180 183 185 186 187 189 190 192 194 199 200 201 204 208 209 211 213 214 215 216 218 221 222 224 225 228 229 231 232 235 236 237 238 239 240 242 243 246 32328 247 0 0 e 32329 247 0 0 f 32330 247 0 0 e 32331 247 0 0 e 32332 247 0 0 e 32333 247 0 0 0 2 4 5 6 7 8 9 11 12 15 17 18 20 21 23 25 29 31 32 33 36 37 38 41 42 44 46 47 48 51 60 66 67 68 70 71 73 74 75 76 77 78 80 81 82 83 84 86 87 89 97 98 99 104 106 108 110 112 115 117 119 120 122 123 125 126 128 130 131 134 139 140 141 142 145 146 148 150 154 155 158 159 161 164 165 167 168 169 173 174 176 178 183 184 185 187 188 189 191 194 195 196 200 202 203 207 209 210 211 212 213 218 219 220 221 224 225 226 228 230 238 240 242 244 245 246 32334 247 0 0 e 32335 247 0 0 2 3 5 6 9 10 11 13 15 18 21 29 30 31 32 38 39 41 42 47 48 53 55 56 57 60 61 63 65 67 68 70 72 74 76 80 81 82 90 91 94 95 96 97 98 99 101 105 106 107 111 112 118 119 120 121 122 131 134 137 139 140 141 142 143 145 147 154 155 156 158 160 162 164 165 166 168 170 171 173 174 176 180 181 182 184 185 186 187 189 190 193 195 196 199 203 204 207 210 213 218 219 221 222 223 224 226 227 228 229 230 234 238 239 240 241 243 244 245 32336 247 0 0 e 32337 247 0 0 0 1 2 5 7 8 9 10 11 12 13 15 16 17 18 24 27 28 36 38 39 40 41 43 47 49 52 54 56 57 58 60 63 65 67 68 69 71 73 75 76 79 80 84 85 86 91 94 96 97 99 103 104 107 111 112 114 116 119 120 122 123 128 130 131 133 136 138 139 140 141 145 147 150 151 159 161 163 165 166 167 168 172 175 178 182 185 186 189 190 192 193 194 195 198 201 205 206 208 213 217 220 221 222 224 226 227 228 230 231 234 236 237 240 244 245 32338 247 0 0 e 32339 247 0 0 0 1 2 3 5 7 9 12 17 20 21 22 26 27 30 31 36 38 39 40 41 42 44 48 50 53 55 56 60 62 63 64 65 66 68 70 71 74 77 78 83 84 87 88 90 93 94 97 101 102 104 105 106 107 110 112 114 116 117 118 122 123 124 126 129 131 134 135 136 137 139 140 146 150 153 155 156 160 162 163 165 167 168 169 170 172 177 178 184 187 189 190 192 193 194 195 196 200 203 206 207 210 211 213 214 217 219 221 223 224 225 231 232 233 235 239 241 245 32340 247 0 0 e 32341 247 0 0 e 32342 247 0 0 e 32343 247 0 0 f 32344 247 0 0 e 32345 247 0 0 1 2 3 6 9 10 12 19 20 21 26 27 28 29 35 36 40 42 43 44 49 50 52 55 56 58 59 60 62 69 77 79 84 85 87 88 89 90 91 93 95 96 97 98 100 102 104 106 111 112 114 115 118 125 128 130 131 132 133 137 138 141 143 146 147 150 151 152 156 159 160 164 165 166 168 169 170 171 172 173 174 177 178 179 181 185 189 190 191 199 202 203 205 208 211 213 217 218 219 220 221 222 223 228 229 231 232 234 238 241 243 244 32346 247 0 0 e 32347 247 0 0 f 32348 247 0 0 e 32349 247 0 0 e 32350 247 0 0 e 32351 247 0 0 0 1 10 11 17 19 23 24 26 27 30 32 33 35 36 38 39 41 43 44 46 47 48 51 54 55 59 61 62 63 65 66 68 70 72 74 78 82 86 87 92 93 97 99 100 101 102 103 104 106 108 109 111 112 113 115 117 120 122 123 124 125 126 127 129 130 131 136 140 142 144 145 146 147 148 153 154 158 160 162 164 171 173 174 175 176 178 181 183 186 192 193 196 199 204 205 206 212 213 214 215 216 218 219 220 221 222 224 225 228 231 234 235 237 240 243 244 32352 247 0 0 e 32353 247 0 0 0 1 2 3 8 12 15 21 24 26 29 32 35 40 42 43 44 46 47 49 51 52 53 54 55 57 59 60 62 63 64 66 68 69 71 79 81 82 83 84 85 86 87 88 89 90 91 93 96 99 101 103 105 106 107 110 112 115 118 119 122 123 126 130 131 135 139 140 143 144 145 147 148 150 152 153 154 155 156 157 163 164 165 166 170 171 174 176 179 184 187 191 192 193 194 198 199 200 201 202 204 207 208 209 210 212 215 217 218 219 223 227 228 232 234 235 236 238 240 241 242 243 246 32354 247 0 0 e 32355 247 0 0 3 4 5 7 9 11 15 17 18 21 23 24 26 27 28 29 30 32 33 34 37 42 45 46 48 49 51 55 57 61 63 65 74 75 76 78 80 82 83 85 87 88 90 91 92 93 94 95 97 98 100 103 105 107 111 113 114 116 117 118 122 123 124 126 127 128 130 136 139 142 144 146 148 151 152 154 161 163 164 166 167 168 169 171 172 173 175 176 177 178 179 180 185 186 188 189 193 194 196 198 201 203 204 208 210 214 216 219 220 221 222 223 226 227 235 238 239 241 242 244 32356 247 0 0 e 32357 247 0 0 4 6 7 8 9 12 15 20 21 23 25 27 28 30 33 34 35 36 37 42 43 46 48 50 52 53 54 56 57 61 62 65 67 69 70 72 74 75 81 82 84 86 89 94 96 97 98 99 105 107 108 109 111 113 114 115 118 120 124 125 126 135 139 140 144 146 147 149 150 154 155 156 158 159 160 161 162 163 164 165 167 172 174 175 176 178 181 182 184 186 190 191 194 196 197 199 203 204 205 206 207 209 210 214 221 224 225 227 229 231 232 233 234 235 239 240 246 32358 247 0 0 e 32359 247 0 0 e 32360 247 0 0 e 32361 247 0 0 f 32362 247 0 0 e 32363 247 0 0 1 2 3 4 9 10 11 13 15 17 18 21 24 26 28 29 30 33 43 45 47 51 53 55 60 62 65 66 70 71 72 75 76 77 78 81 84 85 87 89 93 94 95 96 100 105 108 110 111 115 117 118 119 120 122 125 130 131 132 133 136 137 138 141 145 147 148 151 152 155 157 161 163 164 165 167 168 169 172 173 174 175 176 178 179 180 182 184 187 188 189 192 193 195 196 199 201 205 209 210 211 213 215 216 217 218 219 220 228 229 233 234 235 236 237 239 240 242 244 32364 247 0 0 e 32365 247 0 0 f 32366 247 0 0 e 32367 247 0 0 e 32368 247 0 0 e 32369 247 0 0 1 2 4 6 8 14 15 16 19 22 27 29 30 36 42 43 44 51 53 54 56 60 61 64 65 68 70 71 72 77 79 80 84 85 87 88 90 91 92 93 94 95 97 98 99 100 102 105 107 109 112 115 116 119 120 121 125 126 127 129 131 132 133 136 138 139 140 141 142 143 144 145 150 151 152 153 154 155 157 161 163 166 167 170 172 174 177 178 180 182 186 188 190 191 192 193 194 195 196 198 199 200 202 206 208 213 218 219 222 223 224 229 230 231 232 233 236 237 239 240 241 242 243 32370 247 0 0 e 32371 247 0 0 0 1 3 4 8 11 16 17 19 20 21 25 26 27 28 29 30 32 35 36 37 39 42 43 44 45 47 48 49 51 52 53 56 57 58 59 60 61 64 65 67 68 72 74 75 78 79 80 82 83 85 86 88 89 90 91 92 95 96 99 100 101 102 103 105 106 109 112 114 117 120 122 123 124 127 128 129 131 132 134 137 138 139 142 145 146 147 148 150 151 152 153 154 159 161 162 167 171 175 177 178 181 183 184 187 189 190 191 193 194 195 200 201 207 209 211 212 213 214 219 220 228 229 230 231 232 234 236 241 242 243 244 245 32372 247 0 0 e 32373 247 0 0 5 6 7 11 13 14 15 16 17 18 19 20 23 25 26 28 29 30 31 32 33 35 37 41 45 46 47 52 53 54 55 58 59 60 62 63 64 65 67 69 70 73 74 76 78 79 80 82 84 86 87 93 94 95 97 99 101 102 104 108 110 113 115 116 117 120 123 125 130 131 132 133 134 136 144 146 148 149 152 154 155 156 157 160 161 162 163 166 173 175 176 177 178 179 182 185 186 189 192 193 194 195 196 198 204 205 206 209 210 211 212 213 214 215 218 221 223 225 234 235 236 238 240 241 242 32374 247 0 0 e 32375 247 0 0 0 4 5 6 9 11 12 17 20 21 23 25 27 30 31 32 34 35 36 39 40 42 43 45 48 51 53 56 57 59 61 62 63 66 67 69 72 73 74 75 76 77 78 79 83 84 86 88 89 92 93 95 97 100 104 105 109 110 111 112 113 115 117 118 120 121 123 124 125 127 128 130 131 133 134 138 141 144 148 149 153 154 155 156 158 160 162 164 165 166 167 170 172 173 175 178 179 180 183 184 185 188 189 191 197 200 201 203 205 206 207 211 215 217 221 222 225 226 232 236 237 240 242 246 32376 247 0 1 e 32377 247 0 1 e 32378 247 0 1 e 32379 247 0 1 f 32380 247 0 1 e 32381 247 0 1 3 4 5 7 10 11 13 16 18 20 21 22 26 27 28 32 34 39 40 42 44 46 47 48 49 51 52 56 57 62 64 65 66 71 76 77 79 80 81 82 85 86 88 89 90 94 98 100 104 105 106 107 108 110 113 114 115 116 117 118 119 120 121 125 126 129 130 139 143 144 147 151 153 156 157 158 160 161 163 165 167 170 171 172 175 176 177 179 181 182 183 184 190 191 194 195 200 205 208 209 212 214 218 219 221 222 223 224 225 228 229 230 231 233 235 236 238 242 243 245 32382 247 0 1 e 32383 247 0 1 f 32384 247 0 1 e 32385 247 0 1 e 32386 247 0 1 e 32387 247 0 1 2 4 5 6 7 8 9 11 12 14 17 18 23 26 28 30 31 34 35 36 39 41 43 44 45 46 47 48 49 51 52 55 57 58 59 60 63 69 70 73 75 77 78 79 81 84 86 89 90 91 92 94 97 101 102 105 109 111 114 115 116 118 119 120 121 123 124 125 126 127 128 129 130 131 136 140 142 143 144 150 152 153 154 156 158 160 162 163 164 165 166 168 169 173 174 175 176 178 183 184 185 186 188 194 195 196 199 200 202 203 205 207 208 209 210 211 212 213 215 217 218 219 220 222 223 226 227 229 232 234 235 236 238 240 242 243 245 32388 247 0 1 e 32389 247 0 1 0 1 3 7 9 12 13 15 16 18 20 21 22 23 27 29 30 32 33 38 42 44 46 47 49 52 53 54 58 59 60 61 63 64 66 67 68 69 74 76 77 80 83 86 87 88 89 90 91 92 96 99 101 103 105 106 108 112 113 122 123 128 129 130 132 138 139 145 147 148 149 150 152 153 157 158 160 161 162 163 164 169 171 173 177 182 185 186 187 188 189 198 199 201 202 203 204 208 210 212 214 215 217 218 220 221 222 225 226 227 230 231 233 234 236 237 239 244 32390 247 0 1 e 32391 247 0 1 0 1 3 4 6 7 8 9 10 16 17 18 19 20 21 23 25 27 29 30 31 33 35 36 40 45 49 50 51 53 60 61 63 67 69 70 72 75 76 78 79 84 86 89 91 96 98 99 100 102 105 107 109 115 117 118 122 125 127 129 130 131 140 143 144 146 147 153 154 155 156 157 159 160 161 163 166 169 174 175 180 182 183 187 188 189 194 196 197 199 202 205 206 207 208 210 218 220 221 227 228 229 231 232 236 237 238 240 242 244 245 32392 247 0 1 e 32393 247 0 1 3 8 9 10 11 14 18 21 22 25 26 29 34 36 37 39 40 41 43 49 50 54 55 57 58 59 60 61 62 63 65 66 68 69 70 73 75 78 80 82 84 85 86 90 91 92 93 95 97 98 99 102 103 105 107 109 110 111 112 113 115 117 118 119 120 121 125 126 129 131 132 133 135 136 137 139 141 145 147 148 149 156 160 161 162 165 167 169 171 175 176 180 182 185 188 189 192 193 194 195 199 200 206 209 210 212 213 215 218 219 221 222 223 225 226 228 229 231 233 234 235 239 240 241 246 32394 247 0 1 e 32395 247 0 1 e 32396 247 0 1 e 32397 247 0 1 f 32398 247 0 1 e 32399 247 0 1 0 1 3 6 7 9 10 11 12 13 14 15 18 19 20 21 22 28 31 32 33 34 37 39 41 44 46 48 49 51 54 55 58 64 66 70 71 74 75 76 77 79 80 82 84 85 86 88 89 90 94 96 97 99 102 104 105 107 108 109 110 113 114 115 117 120 121 122 123 125 127 128 129 130 133 134 140 142 144 150 151 153 154 155 156 158 159 160 161 165 167 169 172 173 175 177 179 182 183 185 188 191 192 193 196 197 199 201 204 205 209 210 211 213 215 217 221 224 225 226 231 232 233 235 237 238 239 240 241 242 244 32400 247 0 1 e 32401 247 0 1 f 32402 247 0 1 e 32403 247 0 1 e 32404 247 0 1 e 32405 247 0 1 0 1 4 6 10 11 12 15 17 19 22 25 27 28 31 32 34 37 38 40 46 47 48 49 51 52 53 54 55 59 63 68 69 72 75 76 77 83 84 85 87 88 90 91 93 94 96 97 103 104 108 109 111 112 115 119 121 122 124 128 130 131 132 133 139 140 142 143 144 145 147 153 154 155 156 157 158 162 163 165 166 169 170 171 172 178 180 183 184 185 187 188 189 190 191 193 197 201 203 208 209 212 214 215 217 219 221 227 228 230 231 233 239 242 243 32406 247 0 1 e 32407 247 0 1 0 2 5 7 8 10 12 17 18 20 21 24 26 27 29 30 31 40 44 45 46 48 49 50 54 56 59 61 62 66 67 68 72 73 74 76 77 78 82 83 84 85 94 95 96 97 98 102 104 105 106 107 108 112 115 116 120 121 122 125 127 128 132 135 140 141 143 144 145 147 149 153 154 155 156 158 160 162 164 169 173 174 176 179 181 183 184 185 190 191 193 196 197 201 202 203 204 205 207 209 210 212 213 216 217 218 220 221 224 225 226 227 231 233 234 236 238 239 241 244 245 246 32408 247 0 1 e 32409 247 0 1 1 4 6 8 11 12 14 15 16 17 18 19 20 22 23 24 25 29 30 33 35 38 39 41 43 44 45 47 49 52 53 54 60 61 62 63 64 65 67 68 69 71 78 80 81 89 90 91 95 96 99 100 103 104 105 106 107 108 110 111 112 114 115 120 121 122 123 124 125 126 128 129 130 134 135 136 137 140 141 142 143 144 145 147 148 150 152 154 156 158 166 167 168 169 173 174 178 179 181 182 184 185 187 188 189 190 191 194 199 200 202 204 205 208 209 210 211 213 214 218 219 220 222 223 228 230 233 235 238 239 241 32410 247 0 1 e 32411 247 0 1 2 4 8 9 14 15 16 17 18 19 21 22 25 29 31 32 34 38 39 40 41 42 45 46 47 49 50 51 52 53 55 59 60 61 64 65 66 67 71 72 74 75 76 78 79 80 82 84 86 89 90 93 95 97 99 100 101 102 104 105 106 108 110 113 116 117 119 121 122 123 127 129 130 131 134 135 136 137 138 139 140 147 148 149 151 153 155 157 158 159 166 168 170 172 178 180 181 185 186 190 191 194 195 197 199 200 201 202 203 206 207 209 212 215 216 218 219 220 221 224 227 228 232 233 234 237 243 245 246 32412 247 0 1 e 32413 247 0 1 e 32414 247 0 1 e 32415 247 0 1 f 32416 247 0 1 e 32417 247 0 1 0 1 3 6 7 9 10 12 13 16 17 20 21 24 25 26 29 32 33 38 40 41 42 43 49 50 58 59 62 63 64 70 72 73 76 77 78 80 81 85 87 90 91 93 94 96 97 98 102 106 109 112 113 116 117 121 123 124 125 127 128 129 135 136 138 140 143 145 146 148 150 154 155 158 161 163 165 167 172 173 174 176 177 178 179 181 182 185 190 197 201 202 205 206 208 209 210 211 212 213 215 216 217 222 225 226 227 228 231 233 235 236 237 238 240 241 244 245 32418 247 0 1 e 32419 247 0 1 f 32420 247 0 1 e 32421 247 0 1 e 32422 247 0 1 e 32423 247 0 1 3 4 5 11 13 16 19 20 22 25 26 27 28 29 31 32 34 37 38 40 41 42 43 44 50 51 53 54 60 62 64 66 67 68 70 72 73 76 79 82 84 87 88 90 92 93 94 96 98 99 102 103 104 105 108 111 113 114 115 116 118 122 123 124 126 127 132 133 134 136 137 138 141 145 147 148 149 152 153 154 155 156 157 159 160 162 164 166 170 172 173 175 180 183 184 185 190 195 196 197 199 200 201 202 205 206 211 225 227 232 233 235 236 238 239 245 32424 247 0 1 e 32425 247 0 1 0 4 7 9 10 13 19 20 22 25 27 28 29 30 32 34 35 36 38 39 40 45 46 54 55 57 58 59 60 63 64 66 68 71 72 73 76 78 79 81 83 85 86 88 91 92 93 95 100 101 102 103 104 106 109 111 112 113 114 115 116 117 119 121 124 125 126 130 131 132 133 134 135 136 137 141 149 150 152 154 155 157 159 160 161 162 163 164 166 167 169 171 172 173 174 180 182 183 184 185 189 192 193 199 203 208 209 210 211 213 216 217 218 220 221 222 224 226 231 232 233 234 235 237 239 240 242 243 32426 247 0 1 e 32427 247 0 1 0 1 3 6 7 9 10 11 16 17 18 19 21 24 25 26 27 30 31 33 36 38 39 40 43 46 47 48 52 55 56 57 59 61 62 65 67 68 69 72 74 75 76 77 78 80 81 83 85 87 90 96 99 100 102 104 105 109 111 113 120 121 122 123 124 125 126 129 130 131 133 135 138 140 141 142 143 150 151 152 156 159 160 162 163 164 165 167 168 169 170 172 174 175 177 179 180 181 184 185 188 189 192 193 198 199 202 203 207 211 212 216 218 220 221 222 225 228 229 230 231 232 237 238 240 241 243 244 246 32428 247 0 1 e 32429 247 0 1 0 2 4 7 8 10 11 13 14 16 18 20 25 27 28 30 32 33 39 40 41 42 43 44 45 46 47 50 53 58 62 65 68 69 70 72 73 74 76 78 79 82 84 89 90 91 94 95 97 98 99 101 102 103 104 106 110 113 115 116 120 121 122 123 125 130 134 135 138 144 146 149 152 155 157 158 160 162 163 169 171 175 177 178 180 181 186 197 199 200 202 205 206 208 212 213 215 217 220 222 223 224 226 228 229 232 233 235 237 238 239 240 241 242 244 245 32430 247 0 1 e 32431 247 0 1 e 32432 247 0 1 e 32433 247 0 1 f 32434 247 0 1 e 32435 247 0 1 0 1 4 5 6 7 10 14 15 17 18 19 20 22 25 26 28 29 31 32 33 34 36 37 40 42 44 45 48 50 52 53 54 55 56 57 60 61 64 66 67 68 70 71 72 73 75 77 78 80 81 82 83 84 85 86 90 94 97 98 101 104 105 106 108 109 111 112 115 116 122 123 126 127 129 132 133 134 135 136 137 138 139 140 143 144 145 147 149 151 152 153 159 161 164 165 167 168 170 172 177 185 186 187 190 191 193 196 199 200 206 207 211 212 220 221 224 226 227 228 230 231 233 235 238 239 241 245 32436 247 0 1 e 32437 247 0 1 f 32438 247 0 1 e 32439 247 0 1 e 32440 247 0 1 e 32441 247 0 1 3 6 14 16 17 19 21 22 25 26 30 31 33 37 40 41 42 43 44 48 50 51 52 54 57 60 61 62 63 66 68 70 71 72 79 81 84 85 87 91 92 93 95 96 99 101 103 104 106 107 108 109 111 114 115 116 117 118 120 121 122 130 132 133 134 136 138 140 141 143 144 145 148 149 154 155 157 158 160 164 165 168 169 170 173 174 175 177 178 179 180 183 185 189 191 192 194 196 197 198 204 205 206 207 210 211 213 214 217 220 222 226 227 228 230 231 233 234 235 239 241 243 245 246 32442 247 0 1 e 32443 247 0 1 0 2 3 4 5 7 11 12 14 18 19 20 21 25 27 32 34 35 36 38 41 52 53 54 59 60 61 63 64 66 67 71 73 75 76 77 80 82 83 85 87 89 90 91 92 93 94 95 98 99 100 102 104 105 107 108 111 112 114 118 119 121 122 123 124 126 127 128 130 131 132 135 137 138 142 144 145 148 150 153 155 157 158 161 165 166 167 169 170 171 172 173 174 175 176 178 179 180 181 182 184 187 191 192 194 197 198 199 200 201 203 204 207 208 211 216 219 220 222 223 224 225 226 228 229 230 232 235 236 237 238 239 242 243 244 246 32444 247 0 1 e 32445 247 0 1 0 2 3 4 6 7 10 13 15 16 17 18 19 20 21 23 24 25 26 27 30 31 32 33 36 37 38 40 41 46 48 50 53 54 55 56 59 63 64 66 68 69 71 74 79 80 82 83 84 90 91 93 95 96 99 100 103 104 105 106 107 108 110 114 115 116 117 119 121 124 125 128 130 133 134 135 138 147 148 150 151 152 153 158 159 162 168 169 171 172 173 175 176 178 183 184 189 190 192 193 195 196 200 204 209 210 212 213 214 216 217 219 222 224 225 226 229 230 231 233 235 236 239 240 241 242 32446 247 0 1 e 32447 247 0 1 1 4 5 6 8 11 12 13 14 16 17 18 20 21 22 24 25 28 29 30 31 32 33 34 36 38 40 41 43 45 46 47 48 50 51 52 55 58 59 63 65 67 69 71 72 75 79 82 85 86 90 91 92 93 95 96 98 99 100 101 102 105 106 107 109 111 115 116 117 122 123 125 127 129 130 134 138 147 148 149 150 151 152 153 155 157 159 160 161 163 165 166 169 170 174 178 180 181 185 187 188 197 200 201 202 203 204 210 211 213 214 218 219 221 224 229 231 232 233 234 235 238 246 32448 247 1 0 e 32449 247 1 0 e 32450 247 1 0 e 32451 247 1 0 f 32452 247 1 0 e 32453 247 1 0 0 6 7 9 10 16 17 22 24 25 26 27 29 30 32 33 34 37 39 40 42 43 49 50 52 54 55 57 59 60 63 65 68 72 76 77 79 80 83 84 89 94 98 100 102 106 111 113 114 119 121 122 125 126 127 129 130 131 133 135 136 138 143 144 145 149 150 153 154 155 156 157 160 165 166 168 169 173 176 177 179 183 186 190 192 193 194 195 196 197 199 200 201 203 205 209 211 213 214 215 217 219 220 221 223 224 225 226 227 228 229 232 233 237 239 241 242 243 245 32454 247 1 0 e 32455 247 1 0 f 32456 247 1 0 e 32457 247 1 0 e 32458 247 1 0 e 32459 247 1 0 3 7 10 11 12 13 18 19 20 21 23 25 26 27 29 34 36 38 39 41 43 46 48 56 57 58 59 60 61 63 65 66 67 68 69 73 74 76 77 78 80 81 82 83 84 85 87 89 91 92 95 99 100 102 103 104 105 106 107 110 111 112 114 115 116 117 122 123 124 127 131 132 136 137 138 139 141 143 144 145 147 150 151 152 157 158 160 161 162 164 165 166 168 170 171 172 175 176 177 180 181 182 184 185 189 192 196 197 198 202 203 208 212 213 214 215 217 218 219 220 221 222 224 225 227 228 229 230 231 233 236 237 240 243 244 245 32460 247 1 0 e 32461 247 1 0 0 4 5 6 7 8 10 12 13 14 16 18 19 20 23 24 29 33 34 37 41 42 43 44 45 47 48 50 51 52 57 58 59 60 61 63 64 70 71 73 74 77 83 85 87 88 90 95 96 97 101 103 104 105 108 109 110 112 113 116 117 120 122 124 127 133 136 139 142 146 147 148 151 152 155 156 158 160 162 164 165 166 167 171 174 175 176 177 178 179 180 182 183 184 185 187 190 193 194 196 197 200 201 202 205 207 208 209 210 211 215 217 218 219 221 223 234 237 240 242 244 32462 247 1 0 e 32463 247 1 0 0 1 3 7 8 9 11 12 13 16 17 18 21 22 23 24 26 28 32 38 41 42 43 44 45 46 52 53 54 56 57 58 60 61 62 63 64 65 66 67 68 70 71 72 76 79 82 84 85 87 89 90 91 95 96 97 98 99 100 103 104 105 106 108 111 113 114 118 120 124 126 130 131 132 136 142 145 148 149 150 153 155 156 158 159 161 162 163 164 165 166 168 171 173 178 179 184 186 191 192 193 202 205 206 215 217 218 219 220 221 223 226 227 230 234 238 241 244 246 32464 247 1 0 e 32465 247 1 0 0 2 6 7 10 16 17 19 23 26 27 28 30 33 34 36 42 43 47 48 51 54 58 59 60 63 64 65 71 73 74 76 77 78 79 80 81 83 84 85 86 87 91 97 102 103 104 108 109 112 113 114 116 119 122 123 128 130 132 133 138 141 142 143 144 145 147 151 152 154 155 156 157 158 160 162 164 165 166 169 170 174 176 177 178 180 185 186 187 190 191 197 198 205 208 210 213 215 217 218 220 222 223 225 226 235 237 239 240 241 246 32466 247 1 0 e 32467 247 1 0 e 32468 247 1 0 e 32469 247 1 0 f 32470 247 1 0 e 32471 247 1 0 0 1 3 4 6 7 8 9 11 12 13 14 15 18 19 21 22 25 27 28 30 31 33 34 35 37 38 45 49 51 52 53 56 57 58 61 64 65 68 72 73 75 76 77 80 81 83 84 85 86 89 90 91 92 97 98 99 103 104 105 106 107 110 114 115 116 117 120 123 124 127 129 130 136 138 140 141 142 145 148 149 150 151 153 155 157 158 159 160 161 163 165 170 177 178 179 182 183 186 187 188 189 190 191 192 193 194 195 196 197 199 201 205 206 207 209 210 211 214 215 216 218 219 223 226 234 235 237 239 240 242 243 244 246 32472 247 1 0 e 32473 247 1 0 f 32474 247 1 0 e 32475 247 1 0 e 32476 247 1 0 e 32477 247 1 0 0 2 3 4 7 8 10 12 13 17 19 23 24 25 26 27 30 31 37 38 39 40 41 46 48 49 50 51 53 55 56 59 61 63 66 68 72 74 75 79 80 81 83 84 85 88 90 91 93 96 97 99 102 103 106 109 110 114 115 116 118 122 124 127 128 129 131 132 133 134 140 143 146 147 150 152 154 157 158 161 162 164 167 170 171 174 178 183 184 185 187 188 189 190 191 192 193 194 196 197 198 202 206 211 212 213 218 219 221 222 223 226 227 230 233 235 236 237 238 242 243 244 245 246 32478 247 1 0 e 32479 247 1 0 1 2 4 6 9 10 12 13 14 15 16 21 24 26 28 30 34 36 37 38 39 41 44 46 50 51 55 56 59 60 61 62 63 65 69 71 72 73 76 78 80 81 83 84 85 86 87 95 98 99 102 104 105 106 107 109 111 113 114 116 117 121 122 125 131 133 136 137 140 141 144 146 147 149 152 154 155 159 161 162 163 164 165 167 168 169 170 171 172 174 175 177 178 179 180 184 187 189 190 191 192 194 207 208 210 211 212 213 215 217 218 219 220 222 224 225 226 230 231 235 237 238 241 244 246 32480 247 1 0 e 32481 247 1 0 1 5 6 7 8 9 10 12 15 16 18 19 20 21 22 24 26 33 34 38 40 45 48 49 50 53 55 56 57 59 64 65 68 69 72 74 75 76 77 78 81 87 96 100 102 106 108 109 111 113 114 116 117 118 119 120 121 122 125 127 128 133 136 140 141 142 143 146 147 150 151 152 154 155 157 158 159 160 161 163 167 170 171 172 175 177 178 180 183 185 188 189 198 199 205 206 207 210 213 214 215 216 217 218 220 221 223 224 229 230 231 233 234 238 239 240 241 242 243 32482 247 1 0 e 32483 247 1 0 1 2 5 10 13 16 17 18 20 23 27 28 31 32 33 34 36 37 39 40 43 44 47 49 51 56 57 58 59 60 63 64 65 66 71 75 77 79 82 84 86 87 88 89 91 92 96 99 101 104 106 107 108 112 113 114 117 118 121 124 129 130 133 135 136 137 147 148 149 150 153 155 157 158 162 163 164 165 168 172 173 175 179 180 181 182 183 184 185 187 189 190 191 192 194 197 203 204 207 209 210 211 216 218 219 220 222 227 228 230 231 232 233 235 236 237 238 242 243 245 246 32484 247 1 0 e 32485 247 1 0 e 32486 247 1 0 e 32487 247 1 0 f 32488 247 1 0 e 32489 247 1 0 0 1 4 5 6 9 12 15 16 18 19 21 24 25 26 27 28 29 31 33 34 36 37 38 39 45 52 53 54 55 58 62 63 64 65 67 68 69 70 74 75 76 77 78 82 84 88 90 93 94 96 101 102 111 114 116 118 119 121 122 123 125 129 130 132 134 135 136 141 143 144 147 151 154 155 158 159 161 163 166 170 171 172 173 174 175 178 179 180 182 184 185 186 189 190 192 195 199 200 201 202 203 204 205 206 210 212 213 214 217 218 219 220 221 224 225 229 231 232 234 235 238 239 240 241 243 244 32490 247 1 0 e 32491 247 1 0 f 32492 247 1 0 e 32493 247 1 0 e 32494 247 1 0 e 32495 247 1 0 0 6 7 11 12 13 15 16 17 21 24 26 27 29 30 32 33 35 36 37 38 40 41 42 43 48 52 60 61 66 67 70 71 73 76 77 80 83 85 86 88 89 90 93 97 101 102 107 108 109 112 114 116 117 121 123 124 126 127 129 130 132 135 138 139 140 141 143 144 145 146 147 149 150 151 152 157 158 160 166 167 168 172 174 175 181 182 183 184 185 186 188 193 196 197 198 202 203 208 210 211 215 217 218 219 220 222 223 224 225 226 229 230 232 235 239 240 241 243 244 32496 247 1 0 e 32497 247 1 0 2 3 4 5 9 13 14 17 19 21 22 23 27 30 31 33 36 37 41 43 44 48 53 55 57 58 59 60 61 65 66 68 73 78 80 81 82 84 85 88 90 91 95 97 98 105 106 107 110 113 114 116 118 120 121 123 126 127 129 130 131 135 137 142 143 147 148 152 153 158 159 160 161 165 166 167 168 172 173 177 180 181 182 183 187 193 194 195 196 197 201 202 204 205 208 209 211 214 215 217 218 219 227 228 229 237 239 240 241 242 32498 247 1 0 e 32499 247 1 0 1 5 6 7 8 9 10 11 12 13 17 18 20 21 22 23 25 26 27 30 31 32 33 34 37 38 39 43 46 49 51 53 57 59 61 63 65 66 69 72 74 75 76 77 79 86 88 89 90 91 93 94 96 99 100 103 104 105 110 112 113 114 115 116 118 120 121 123 125 126 127 128 129 130 131 133 135 138 139 140 142 144 146 151 152 156 157 158 159 160 163 164 169 170 171 172 174 176 179 180 182 184 185 188 190 193 194 196 197 201 202 203 204 205 206 208 209 212 213 214 217 218 219 220 222 227 228 230 231 232 233 237 238 239 241 245 32500 247 1 0 e 32501 247 1 0 1 3 5 6 7 8 10 11 13 14 15 24 25 27 28 34 35 36 39 40 41 42 46 47 49 50 51 53 54 63 64 65 67 70 72 78 79 80 81 85 86 87 88 89 90 94 95 96 101 103 104 105 106 108 109 110 113 114 115 116 125 126 127 128 130 134 136 137 138 146 147 149 150 155 156 159 160 162 163 165 166 167 170 172 173 175 179 180 181 185 187 188 196 198 199 200 202 207 211 212 215 218 222 223 226 229 230 231 232 233 234 236 237 238 239 242 243 245 32502 247 1 0 e 32503 247 1 0 e 32504 247 1 0 e 32505 247 1 0 f 32506 247 1 0 e 32507 247 1 0 5 7 8 11 12 14 15 17 18 22 23 24 25 27 29 33 34 35 36 38 40 41 43 46 47 49 50 51 53 54 55 56 57 58 60 62 64 65 66 67 69 72 74 75 76 77 78 79 81 82 83 84 86 87 89 90 92 93 94 95 97 98 99 101 102 105 108 109 112 113 114 117 119 124 128 134 135 137 138 139 140 143 147 148 150 152 154 155 160 162 163 164 165 166 167 168 169 170 171 172 177 178 181 182 183 184 185 186 189 190 193 196 197 200 203 205 206 207 209 211 212 214 215 219 223 227 232 233 234 237 239 240 241 242 243 32508 247 1 0 e 32509 247 1 0 f 32510 247 1 0 e 32511 247 1 0 e 32512 247 1 0 e 32513 247 1 0 4 7 8 9 11 13 15 17 18 19 21 22 24 25 28 29 30 31 32 33 36 38 39 40 43 44 45 47 50 52 55 56 58 63 64 67 69 71 72 75 76 79 81 82 84 85 86 87 90 93 94 95 96 97 99 100 104 106 108 111 112 113 114 115 116 119 121 122 124 131 132 134 136 137 140 142 145 146 147 148 149 152 153 156 159 160 164 168 172 173 175 180 184 188 189 192 199 202 203 211 215 216 220 223 226 227 238 240 241 242 243 245 246 32514 247 1 0 e 32515 247 1 0 1 7 10 11 13 16 21 22 26 27 29 31 32 33 37 38 41 43 44 45 46 47 51 55 57 59 60 61 63 65 67 71 78 80 83 86 87 90 92 96 97 100 104 105 110 111 112 113 114 117 119 120 121 123 125 128 129 130 131 133 134 136 139 140 142 143 145 146 147 148 150 151 154 158 159 160 162 165 169 174 177 179 181 182 186 188 189 191 194 195 196 198 203 207 210 211 215 216 219 220 221 224 226 227 228 229 233 235 239 240 244 245 32516 247 1 0 e 32517 247 1 0 2 3 5 7 8 9 10 11 12 13 14 16 17 18 19 20 23 27 29 30 31 32 35 36 39 40 44 45 48 49 54 59 60 61 64 66 69 70 71 72 74 75 76 77 78 81 86 89 90 91 93 94 95 96 98 99 100 101 103 104 105 109 110 111 112 113 114 115 116 118 119 120 121 123 125 128 130 131 132 136 140 141 142 144 146 148 149 159 163 166 167 170 172 176 178 180 181 183 184 186 187 188 190 191 193 194 198 201 204 205 208 209 213 214 216 218 225 228 232 233 238 239 241 242 32518 247 1 0 e 32519 247 1 0 4 6 7 11 14 15 18 19 21 24 25 26 27 28 30 31 33 35 36 39 40 42 43 45 48 51 52 53 54 55 59 62 63 66 67 69 71 72 75 76 77 80 82 83 84 88 91 94 95 97 106 109 111 112 120 125 126 129 130 131 132 133 134 135 138 142 145 148 150 156 157 159 161 163 164 167 171 173 176 180 182 183 185 190 194 195 209 212 213 214 216 218 222 225 226 228 230 232 233 237 239 240 242 246 32520 247 1 1 e 32521 247 1 1 e 32522 247 1 1 e 32523 247 1 1 f 32524 247 1 1 e 32525 247 1 1 1 2 5 6 7 9 10 11 18 19 20 21 22 23 25 26 27 28 30 33 39 43 44 45 46 49 52 57 64 65 66 71 72 73 74 76 77 78 79 80 81 83 90 91 92 95 99 100 102 106 107 109 110 111 112 114 115 116 117 122 126 127 132 134 135 136 137 138 139 141 142 145 147 148 149 152 159 160 161 164 165 167 168 170 173 175 177 178 181 185 186 187 190 192 193 194 195 196 198 199 200 202 206 207 209 210 211 212 215 218 219 225 231 232 235 236 238 239 240 241 242 243 245 246 32526 247 1 1 e 32527 247 1 1 f 32528 247 1 1 e 32529 247 1 1 e 32530 247 1 1 e 32531 247 1 1 1 2 7 8 12 14 15 17 18 20 22 23 25 27 28 30 31 32 38 39 42 43 45 46 50 51 54 55 56 57 60 61 73 74 81 83 84 85 87 90 91 92 93 94 95 96 99 102 104 105 108 114 115 116 117 119 120 124 127 135 136 138 145 150 151 158 161 164 166 169 170 172 173 174 175 176 177 178 179 180 181 182 184 185 187 188 189 190 191 193 194 196 199 200 201 202 204 208 209 210 211 214 215 216 217 221 222 227 228 229 234 235 237 238 241 242 243 244 32532 247 1 1 e 32533 247 1 1 5 10 11 12 18 22 26 27 29 31 33 35 36 37 38 40 41 42 43 47 48 52 53 55 58 59 60 62 65 66 67 68 69 71 72 76 77 79 80 82 83 86 87 88 91 92 94 95 97 98 99 100 102 103 108 109 110 111 113 114 115 120 121 122 123 125 126 128 129 131 132 134 138 141 144 148 149 151 152 155 160 161 163 167 168 172 173 174 175 176 177 178 179 180 184 185 189 190 192 196 197 198 199 200 203 204 205 206 207 208 209 210 211 217 218 220 221 222 223 225 226 228 229 231 234 241 246 32534 247 1 1 e 32535 247 1 1 0 1 2 5 8 12 15 17 19 21 22 23 25 27 29 31 32 33 34 35 38 39 43 46 48 49 51 53 63 64 65 67 68 69 70 72 73 74 76 80 82 83 84 85 87 88 91 95 96 99 101 102 103 106 107 108 110 116 118 119 121 124 125 126 127 128 129 131 132 133 134 135 136 138 142 143 144 145 146 148 150 151 154 155 156 160 164 165 167 168 169 170 172 174 176 178 182 187 192 196 198 200 201 203 204 205 206 207 208 210 212 213 215 216 218 220 221 224 228 232 233 234 237 238 240 241 32536 247 1 1 e 32537 247 1 1 0 1 2 3 4 7 8 9 11 12 14 15 16 17 18 24 26 28 29 30 34 38 40 42 47 49 50 51 52 54 56 59 61 62 63 64 65 66 68 69 71 72 73 74 77 78 82 83 84 85 86 87 88 89 96 97 100 102 104 105 106 110 113 114 115 119 120 122 123 125 127 128 131 132 133 134 135 137 138 141 144 145 147 148 152 154 156 159 160 161 163 174 175 176 177 180 185 186 192 194 195 197 198 200 201 202 203 204 208 216 217 220 224 225 228 230 233 234 235 236 237 238 239 240 241 242 243 244 245 32538 247 1 1 e 32539 247 1 1 e 32540 247 1 1 e 32541 247 1 1 f 32542 247 1 1 e 32543 247 1 1 3 5 7 10 11 13 14 16 17 18 19 22 23 24 30 31 32 34 35 36 38 40 41 44 51 52 54 56 57 58 59 61 62 64 67 68 69 72 74 76 78 79 82 84 86 89 91 96 101 102 105 106 107 108 109 110 113 114 115 119 121 122 123 125 127 129 131 135 137 138 140 141 142 143 146 147 148 154 155 158 159 160 162 164 165 167 168 169 171 172 173 174 177 178 182 183 184 185 187 188 190 191 197 200 205 206 207 208 209 211 214 215 216 218 219 221 222 223 227 231 232 240 241 245 32544 247 1 1 e 32545 247 1 1 f 32546 247 1 1 e 32547 247 1 1 e 32548 247 1 1 e 32549 247 1 1 0 1 2 3 6 8 13 14 16 18 20 22 23 25 30 33 34 36 37 38 40 41 43 46 47 50 52 54 55 56 57 58 59 61 62 65 67 69 70 71 74 78 80 85 86 87 88 89 90 91 94 96 97 98 99 100 102 103 109 110 111 113 114 116 117 121 122 124 127 128 129 132 133 136 140 141 142 143 144 145 152 153 156 158 160 162 164 165 167 168 169 170 175 176 178 179 181 182 183 185 186 187 188 189 192 193 194 197 198 199 202 203 204 205 208 211 212 213 216 218 220 221 222 228 230 233 234 235 237 240 242 243 244 246 32550 247 1 1 e 32551 247 1 1 0 1 2 5 6 8 9 14 16 18 20 21 23 27 33 34 35 36 37 39 40 43 44 45 47 49 50 52 58 59 60 63 65 66 68 69 70 77 78 80 81 82 83 85 86 87 89 90 93 96 97 98 99 100 101 104 105 106 109 110 112 114 115 117 118 119 120 126 134 137 139 142 144 145 148 149 151 155 156 157 161 162 163 165 166 168 172 177 178 180 181 189 190 191 193 194 195 196 197 199 202 203 204 207 211 215 216 223 228 229 230 233 235 237 238 239 240 242 244 245 246 32552 247 1 1 e 32553 247 1 1 1 2 3 5 7 15 18 20 21 23 24 25 27 30 32 35 36 44 47 49 50 51 53 58 62 63 65 66 68 69 75 80 81 82 85 89 90 92 95 96 97 98 101 104 105 106 107 108 109 110 111 114 117 118 123 127 128 130 132 135 136 140 142 148 149 151 152 153 155 156 157 159 160 162 165 166 167 168 170 171 173 174 176 177 178 179 180 181 185 190 191 194 196 197 198 199 200 201 203 205 206 207 211 213 221 222 223 224 226 227 228 229 234 236 237 238 239 240 242 243 244 245 32554 247 1 1 e 32555 247 1 1 0 9 10 11 13 16 19 20 22 23 24 27 28 30 33 34 35 36 37 40 43 44 45 46 48 49 51 52 53 55 57 58 60 62 63 64 67 69 71 72 76 78 79 81 84 85 86 91 93 96 97 99 100 102 105 106 108 110 113 114 122 126 127 128 129 130 132 134 136 139 140 141 143 145 146 147 148 149 150 151 153 154 155 156 161 162 163 164 166 167 169 171 176 177 178 179 181 182 186 187 188 191 192 193 195 196 199 200 202 204 205 208 209 210 211 213 215 216 217 220 222 223 224 230 231 233 234 235 237 241 242 244 245 246 32556 247 1 1 e 32557 247 1 1 e 32558 247 1 1 e 32559 247 1 1 f 32560 247 1 1 e 32561 247 1 1 1 2 5 6 9 10 14 16 17 20 22 25 29 31 32 35 37 39 40 41 45 46 47 48 49 51 53 54 56 58 61 63 66 74 81 83 84 87 88 89 91 92 94 96 97 98 101 102 105 106 107 111 113 115 116 117 118 119 120 121 122 123 125 126 128 129 130 131 132 133 136 139 140 141 142 148 149 151 152 153 156 158 161 163 164 165 167 170 174 175 176 177 179 180 183 185 190 191 194 197 199 201 203 205 208 209 210 211 214 215 218 219 220 221 222 224 226 230 231 234 235 238 240 241 246 32562 247 1 1 e 32563 247 1 1 f 32564 247 1 1 e 32565 247 1 1 e 32566 247 1 1 e 32567 247 1 1 7 9 10 13 17 18 19 20 22 25 29 39 41 42 45 46 47 51 53 55 58 60 61 63 64 67 72 73 74 78 79 81 86 92 94 97 100 102 103 106 110 112 115 118 119 121 122 124 127 130 131 132 135 137 138 140 141 144 145 146 147 148 151 152 153 154 158 161 162 163 164 168 171 172 173 174 177 178 179 180 183 184 186 187 189 190 193 195 196 198 202 203 204 205 206 207 209 211 212 220 221 222 223 225 227 228 233 234 235 237 243 246 32568 247 1 1 e 32569 247 1 1 1 6 7 17 18 19 22 25 27 28 29 30 32 35 36 38 39 43 44 45 48 55 57 59 60 64 65 68 73 76 77 79 81 82 83 84 89 91 97 98 102 103 106 110 113 117 119 120 121 122 130 135 136 138 139 140 141 143 144 145 149 153 155 157 161 162 163 173 178 179 183 185 188 189 190 191 192 193 194 199 200 201 202 206 207 208 209 210 211 212 214 216 218 219 220 221 222 223 224 226 227 228 230 233 234 235 236 238 239 241 242 244 32570 247 1 1 e 32571 247 1 1 2 6 7 10 14 15 16 17 20 21 25 28 29 30 31 34 38 39 42 43 51 52 54 56 60 61 62 63 64 65 68 69 70 74 76 77 79 83 84 86 89 90 91 94 96 97 99 101 102 104 106 108 109 110 111 114 115 118 122 124 128 130 132 135 137 138 140 141 142 143 144 147 148 149 150 151 154 155 156 158 161 164 165 166 171 172 173 178 179 184 185 186 188 192 193 195 197 198 200 201 203 206 208 209 210 211 212 213 214 216 221 226 228 231 232 235 236 237 241 242 244 32572 247 1 1 e 32573 247 1 1 1 3 5 6 9 10 11 12 16 20 22 24 26 27 30 32 34 35 36 40 41 42 47 49 50 51 53 54 55 58 62 63 64 67 68 73 75 76 79 81 85 88 89 90 91 92 95 96 97 98 100 101 103 110 112 114 115 116 117 119 121 123 124 125 126 131 132 133 134 135 138 141 142 143 144 146 148 149 150 151 155 156 159 164 168 171 172 173 174 175 176 180 182 183 185 188 190 192 193 196 197 198 203 205 206 208 210 213 214 215 217 218 223 224 225 226 228 229 230 231 233 239 242 243 32574 247 1 1 e 32575 247 1 1 e 32576 247 1 1 e 32577 247 1 1 f 32578 247 1 1 e 32579 247 1 1 0 1 6 7 9 10 15 19 22 26 27 28 30 31 36 40 42 44 46 48 50 52 53 54 57 65 66 80 83 87 88 89 93 94 95 96 97 98 100 104 105 106 112 113 117 120 121 124 126 127 128 129 130 131 139 141 144 145 148 149 151 153 158 161 163 165 166 167 168 170 174 178 180 185 186 188 189 190 192 193 194 196 197 199 203 204 205 210 214 215 216 219 221 223 224 227 231 232 233 234 236 238 239 243 244 245 246 32580 247 1 1 e 32581 247 1 1 f 32582 247 1 1 e 32583 247 1 1 e 32584 247 1 1 e 32585 247 1 1 1 9 12 13 14 15 16 21 22 30 31 32 33 34 35 36 37 39 40 42 44 45 46 48 49 50 51 52 55 61 62 63 65 67 71 73 74 75 77 79 81 82 83 84 85 86 87 88 89 90 91 93 98 100 101 103 105 106 107 109 111 113 115 117 119 121 128 129 130 133 134 135 139 140 143 154 156 157 158 160 163 164 165 167 171 172 174 175 176 177 178 179 181 182 187 189 190 191 192 193 197 200 204 205 206 209 210 216 217 218 219 224 228 231 232 234 236 237 241 244 245 246 32586 247 1 1 e 32587 247 1 1 0 1 2 4 7 8 9 11 15 16 18 19 22 29 30 32 36 37 39 40 41 43 44 45 46 47 49 51 55 58 59 61 63 65 69 70 77 79 80 81 83 84 85 86 89 93 95 97 98 99 100 101 106 107 109 110 112 115 116 117 120 121 122 126 127 129 130 131 132 136 137 140 143 145 148 149 150 154 155 156 157 158 159 160 161 162 163 167 169 172 173 174 178 181 182 183 186 187 189 190 191 192 193 194 195 197 198 200 202 203 204 205 210 212 216 217 220 225 228 230 231 232 233 235 237 239 240 241 243 32588 247 1 1 e 32589 247 1 1 0 1 2 4 10 11 14 16 17 18 19 22 23 25 29 30 31 34 36 37 39 40 43 45 47 49 50 51 52 55 56 58 59 61 64 65 68 69 70 72 73 75 78 79 80 83 87 92 94 96 97 98 102 103 105 106 108 110 113 114 116 118 121 123 124 125 126 128 130 131 132 134 135 136 138 141 149 154 155 158 159 160 165 166 167 168 170 171 172 174 177 185 186 188 189 190 192 196 197 198 199 201 203 204 206 207 208 209 210 212 213 219 220 227 232 233 234 236 237 238 244 245 32590 247 1 1 e 32591 247 1 1 0 3 4 5 7 8 12 14 15 16 18 20 23 29 30 32 33 34 35 36 38 39 41 42 43 44 45 48 52 53 54 56 57 60 61 63 64 65 66 72 76 78 80 81 83 85 86 88 89 95 96 97 98 100 101 102 104 106 112 114 116 120 123 127 129 131 137 140 142 147 148 150 153 154 156 157 159 161 162 164 165 167 169 170 171 172 173 174 181 183 185 186 187 189 190 194 195 196 199 201 203 205 208 209 214 215 216 219 220 222 223 225 230 232 234 238 240 243 tla-1.3.5+dfsg/src/hackerlab/tests/bitset-tests/=scaffolding/0000755000175000017500000000000010457621774022625 5ustar userusertla-1.3.5+dfsg/src/hackerlab/tests/bitset-tests/=scaffolding/gen-bitset-test.scm0000644000175000017500000003167710457621774026365 0ustar useruser;;; tag: Tom Lord Tue Dec 4 14:59:22 2001 (=scaffolding/gen-bitset-test.scm) ;;; ;;; gen-bitset-test.scm - ;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; Copyright (C) 2000 Free Software Foundation, Inc. ;;; ;;; See the file "COPYING" for further information about ;;; the copyright and warranty status of this work. ;;; (define-module (vu-tests gen-bitset-test) :use-module (standard string-parsing) :use-module (standard list-lib) :use-module (unix output-files)) (define (generate-bitset-tests filename) (with-overwriting-output-file filename (lambda () (generate-tests-bitset-n) (generate-tests-bitset) (generate-tests-bitset-range) (generate-tests-2-bitset)))) (define bits-per-subset 32) (define sample-set-sizes `(0 1 ,(1- bits-per-subset) ,bits-per-subset ,(1+ bits-per-subset) ,(1- (* 2 bits-per-subset)) ,(* 2 bits-per-subset) ,(1+ (* 2 bits-per-subset)) ,(- (* 7 bits-per-subset) 13) ,(* 7 bits-per-subset) ,(+ (* 7 bits-per-subset) 23))) (define fenceposts `("0 0" "0 1" "1 0" "1 1")) (define generate-set-fns (list (lambda (size) (list "e" '())) (lambda (size) (if (= size 0) (list "e" ()) (list "f" (iota size)))) (lambda (size) (let ((s (filter (lambda (n) (toss?)) (iota size)))) (list (apply join-fields-with " " (map ->string s)) s))))) (define (set-name s) (car s)) (define (set-members s) (cadr s)) (define generate-range-fns (list ;; full range ;; (lambda (size) (list 0 size)) ;; random empty range ;; (lambda (size) (let* ((a (roll (1+ size))) (b (roll (max 1 a)))) (list a b))) ;; random non-empty range ;; (lambda (size) (let* ((a (roll (1+ size))) (b (roll (max 1 a)))) (list b a))) ;; random tail range ;; (lambda (size) (list (roll (max 1 size)) size)) ;; random head range ;; (lambda (size) (list 0 (roll (1+ size)))))) (define (range-start range) (car range)) (define (range-end range) (cadr range)) (define generate-index-fns (list (lambda (size) 0) (lambda (size) (max 0 (1- size))) (lambda (size) (roll (max 1 size))))) (define test-id-counter 0) (define (test-id) test-id-counter) (define (test-id+) (let ((n test-id-counter)) (set! test-id-counter (1+ test-id-counter)) n)) (define (a-set size set fence) (display* "a " size " " fence " " (set-name set) "\n")) (define (b-set size set fence) (display* "b " size " " fence " " (set-name set) "\n")) (define (param-n n) (display* "n " n "\n")) (define (param-range rng) (display* "r " (range-start rng) " " (range-end rng) "\n")) (define (op name) (display* "# " (test-id) " " name "\n")) (define (answer) (display* 'ANSWER: (test-id+) " ")) (define (clear) (display* "c\n")) (define (->0/1 x) (if x 1 0)) (define (list->set-name size lst) (cond ((null? lst) "e") ((= size (list-length lst)) "f") (#t (apply join-fields-with " " (map ->string lst))))) (define bitset-n-fns (list ;; is_member ;; (lambda (size set fence index) (a-set size set fence) (param-n index) (op "is_member") (answer) (display* (->string (->0/1 (memq index (set-members set)))) "\n") (clear)) ;; bitset_adjoin ;; (lambda (size set fence index) (a-set size set fence) (param-n index) (op "adjoin") (answer) (display* size " " fence " " (list->set-name size (ordered-lset-adjoin = < (set-members set) index)) "\n") (clear)) ;; bitset_remove ;; (lambda (size set fence index) (a-set size set fence) (param-n index) (op "remove") (answer) (display* size " " fence " " (list->set-name size (ordered-lset-delete = < (set-members set) index)) "\n") (clear)) ;; bitset_toggle ;; (lambda (size set fence index) (a-set size set fence) (param-n index) (op "toggle") (answer) (display* size " " fence " " (let* ((sm (set-members set)) (as (if (memq index sm) (ordered-lset-delete = < (set-members set) index) (ordered-lset-adjoin = < (set-members set) index)))) (list->set-name size as)) "\n") (clear)) )) (define (generate-tests-bitset-n) (for bitset-n-fns (lambda (fn) (for sample-set-sizes (lambda (size) ; (pk 'size size) (if (> size 0) (for fenceposts (lambda (fence) ; (pk 'fence fence :size size) (for generate-set-fns (lambda (gen-set) (for generate-index-fns (lambda (gen-index) ; (pk 'params :size size :fence fence :gen-set gen-set :gen-index gen-index) (let* ((set (gen-set size)) (index (gen-index size))) ; (pk 'set-index :set set :index index) (fn size set fence index)))))))))))))) (define bitset-fns (list ;; is_empty ;; (lambda (size set fence) (a-set size set fence) (op "is_empty") (answer) (display* (->0/1 (null? (set-members set))) "\n") (clear)) ;; is_full ;; (lambda (size set fence) (a-set size set fence) (op "is_full") (answer) (display* (->0/1 (= size (list-length (set-members set)))) "\n") (clear)) ;; dup ;; (lambda (size set fence) (a-set size set fence) (op "dup") (answer) (display* size " " (list->set-name size (set-members set)) "\n") (clear)) ;; clear ;; (lambda (size set fence) (a-set size set fence) (op "clear") (answer) (display* size " " fence " e" "\n") (clear)) ;; fill ;; (lambda (size set fence) (a-set size set fence) (op "fill") (answer) (display* size " " fence (if (= size 0) " e" " f") "\n") (clear)) ;; complement ;; (lambda (size set fence) (a-set size set fence) (op "complement") (answer) (display* size " " fence " " (list->set-name size (ordered-lset-difference = < (iota size) (set-members set))) "\n") (clear)) ;; ffs ;; (lambda (size set fence) (a-set size set fence) (op "ffs") (answer) (display* (let ((set (set-members set))) (if set (car set) -1)) "\n") (clear)) ;; ffc ;; (lambda (size set fence) (a-set size set fence) (op "ffc") (answer) (display* (let ((clear (ordered-lset-difference = < (iota size) (set-members set)))) (if clear (car clear) -1)) "\n") (clear)) ;; population ;; (lambda (size set fence) (a-set size set fence) (op "population") (answer) (display* (list-length (set-members set)) "\n") (clear)) )) (define (generate-tests-bitset) (for bitset-fns (lambda (fn) (for sample-set-sizes (lambda (size) ; (pk 'size size) (for fenceposts (lambda (fence) ; (pk 'fence fence :size size) (for generate-set-fns (lambda (gen-set) ; (pk 'params :size size :fence fence :gen-set gen-set) (let* ((set (gen-set size))) ; (pk 'set-index :set set) (fn size set fence))))))))))) (define bitset-range-fns (list ;; is_empty_range ;; (lambda (size set fence rng) (a-set size set fence) (param-range rng) (op "is_empty_range") (answer) (let* ((s (set-members set)) (subset (ordered-lset-intersection = < (apply range rng) s))) (display* (->0/1 (null? subset)) "\n")) (clear)) ;; is_full_range ;; (lambda (size set fence rng) (a-set size set fence) (param-range rng) (op "is_full_range") (answer) (let* ((s (set-members set)) (subset (ordered-lset-intersection = < (apply range rng) s))) (display* (->0/1 (= (max 0 (- (range-end rng) (range-start rng))) (list-length subset))) "\n")) (clear)) ;; clear_range ;; (lambda (size set fence rng) (a-set size set fence) (param-range rng) (op "clear_range") (answer) (let* ((s (set-members set)) (set (ordered-lset-difference = < s (apply range rng)))) (display* size " " fence " " (list->set-name size set) "\n")) (clear)) ;; fill_range ;; (lambda (size set fence rng) (a-set size set fence) (param-range rng) (op "fill_range") (answer) (let* ((s (set-members set)) (set (ordered-lset-union = < s (apply range rng)))) (display* size " " fence " " (list->set-name size set) "\n")) (clear)) ;; ffs_range ;; (lambda (size set fence rng) (a-set size set fence) (param-range rng) (op "ffs_range") (answer) (let* ((s (set-members set)) (subset (ordered-lset-intersection = < (apply range rng) s))) (display* (if (null? subset) -1 (car subset)) "\n")) (clear)) ;; ffc_range ;; (lambda (size set fence rng) (a-set size set fence) (param-range rng) (op "ffc_range") (answer) (let* ((s (set-members set)) (subset (ordered-lset-difference = < (apply range rng) s))) (display* (if (null? subset) -1 (car subset)) "\n")) (clear)) ;; population_range ;; (lambda (size set fence rng) (a-set size set fence) (param-range rng) (op "population_range") (answer) (let* ((s (set-members set)) (subset (ordered-lset-intersection = < (apply range rng) s))) (display* (list-length subset) "\n")) (clear)) )) (define (generate-tests-bitset-range) (for bitset-range-fns (lambda (fn) (for sample-set-sizes (lambda (size) ; (pk 'size size) (for fenceposts (lambda (fence) ; (pk 'fence fence :size size) (for generate-set-fns (lambda (gen-set) (for generate-range-fns (lambda (gen-rng) ; (pk 'params :size size :fence fence :gen-set gen-set :gen-rng gen-rng) (let* ((set (gen-set size)) (rng (gen-rng size))) ; (pk 'set-index :set set :rng rng) (fn size set fence rng))))))))))))) (define 2-bitset-fns (list ;; is_equal ;; (lambda (size set-a fence-a set-b fence-b) (a-set size set-a fence-a) (b-set size set-b fence-b) (op "is_equal") (answer) (display* (->0/1 (equal? (set-members set-a) (set-members set-b))) "\n") (clear)) ;; is_subset ;; (lambda (size set-a fence-a set-b fence-b) (a-set size set-a fence-a) (b-set size set-b fence-b) (op "is_subset") (answer) (display* (->0/1 (ordered-lset<= = < (set-members set-a) (set-members set-b))) "\n") (clear)) ;; assign ;; (lambda (size set-a fence-a set-b fence-b) (a-set size set-a fence-a) (b-set size set-b fence-b) (op "assign") (answer) (display* size " " fence-a " " (list->set-name size (set-members set-b)) "\n") (clear)) ;; union ;; (lambda (size set-a fence-a set-b fence-b) (a-set size set-a fence-a) (b-set size set-b fence-b) (op "union") (answer) (display* size " " fence-a " " (list->set-name size (ordered-lset-union = < (set-members set-a) (set-members set-b))) "\n") (clear)) ;; intersection ;; (lambda (size set-a fence-a set-b fence-b) (a-set size set-a fence-a) (b-set size set-b fence-b) (op "intersection") (answer) (display* size " " fence-a " " (list->set-name size (ordered-lset-intersection = < (set-members set-a) (set-members set-b))) "\n") (clear)) ;; difference ;; (lambda (size set-a fence-a set-b fence-b) (a-set size set-a fence-a) (b-set size set-b fence-b) (op "difference") (answer) (display* size " " fence-a " " (list->set-name size (ordered-lset-difference = < (set-members set-a) (set-members set-b))) "\n") (clear)) ;; revdifference ;; (lambda (size set-a fence-a set-b fence-b) (a-set size set-a fence-a) (b-set size set-b fence-b) (op "revdifference") (answer) (display* size " " fence-a " " (list->set-name size (ordered-lset-difference = < (set-members set-b) (set-members set-a))) "\n") (clear)) ;; xor ;; (lambda (size set-a fence-a set-b fence-b) (a-set size set-a fence-a) (b-set size set-b fence-b) (op "xor") (answer) (display* size " " fence-a " " (list->set-name size (ordered-lset-xor = < (set-members set-a) (set-members set-b))) "\n") (clear)) )) (define (generate-tests-2-bitset) (for 2-bitset-fns (lambda (fn) (for sample-set-sizes (lambda (size) (for fenceposts (lambda (fence-a) (for fenceposts (lambda (fence-b) (for generate-set-fns (lambda (gen-set-a) (for generate-set-fns (lambda (gen-set-b) (let* ((set-a (gen-set-a size)) (set-b (gen-set-b size))) (fn size set-a fence-a set-a fence-a) (fn size set-a fence-a set-b fence-b))))))))))))))) (define (toss?) (zero? (logand (random32) 1))) (define (roll n) (modulo (random32) n)) (define (for list fn) (for-each fn list)) tla-1.3.5+dfsg/src/hackerlab/tests/bitset-tests/unit-bits.c0000644000175000017500000002671110457621774022342 0ustar useruser/* unit-bits.c - test bits.c * **************************************************************** * Copyright (C) 2000 Thomas Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/char/str.h" #include "hackerlab/bitsets/bits.h" #include "hackerlab/cmd/main.h" static t_uchar * program_name = "unit-bits"; static t_uchar * usage = "[options]"; static t_uchar * version_string = "1.0"; #define OPTS(OP, OP2) \ OP (opt_help_msg, "h", "help", 0, \ "Display a help message and exit.") \ OP (opt_version, "V", "version", 0, \ "Display a release identifier string") \ OP2 (opt_version, 0, 0, 0, "and exit.") \ OP (opt_iterations, "i", "iterations n", 1, \ "Run all tests `n' times.") enum options { OPTS (OPT_ENUM, OPT_IGN) }; struct opt_desc opts[] = { OPTS (OPT_DESC, OPT_DESC) {-1, 0, 0, 0, 0} }; #if 1 struct bits_tree_rule rules[] = {{16, 256*16, 12, 0xfff}, {16, 256, 0, 0}, {0, 256, 0, 0}}; #else struct bits_tree_rule rules[] = {{256, 256, 8, 0xff}, {0, 256, 0, 0}}; #endif static bits make_test_set (bitset members) { bits answer; int x; answer = bits_alloc (0, rules); for (x = 0; x < 65536; ++x) if (bitset_is_member (members, x)) bits_adjoin (answer, x); bits_compact (answer); return answer; } static int test_no = 0; static int compare_test_result (bits test_answer, bitset answer) { int x; for (x = 0; x < 65536; ++x) if (bitset_is_member (answer, x) != bits_is_member (test_answer, x)) panic ("test failed"); bits_compact (test_answer); for (x = 0; x < 65536; ++x) if (bitset_is_member (answer, x) != bits_is_member (test_answer, x)) panic ("test failed"); return 1; } static void free_test_set (bits b) { bits_free (b); } static bitset make_empty_bitset (void) { return bitset_alloc (lim_use_must_malloc, 65536); } static bitset make_full_bitset (void) { bitset b; b = bitset_alloc (lim_use_must_malloc, 65536); bitset_fill (65536, b); return b; } static bitset make_random_bitset (void) { bitset b; int x; b = bitset_alloc (lim_use_must_malloc, 65536); for (x = 0; x < 65536; ++x) if (random () & 1) bitset_adjoin (b, x); return b; } static bitset (*contents_fns[])(void) = { make_empty_bitset, make_full_bitset, make_random_bitset, 0 }; static int make_zero_index (void) { return 0; } static int make_max_index (void) { return 65535; } static int make_random_index (void) { return random () % 65536; } static int (*index_fns[])(void) = { make_zero_index, make_max_index, make_random_index, 0 }; static void make_full_range (int * from, int * to) { *from = 0; *to = 65536; } static void make_empty_range (int * from, int * to) { *from = random () % 65537; if (!*from) *to = 0; else *to = random () % *from; } static void make_small_random_range (int * from, int * to) { *from = random () % (65536 - 256); *to = *from + random () % 256; } static void make_medium_random_range (int * from, int * to) { *from = random () % (65536 - 256); *to = *from + random () % 256; } static void make_large_random_range (int * from, int * to) { *to = 1024 + (random () % (65537 - 1024)); *from = random () % (*to - 768); } static void make_tail_range (int * from, int * to) { *from = random () % 65537; *to = 65536; } static void make_head_range (int * from, int * to) { *from = 0; *to = random () % 65537; } static void (*range_fns[])(int *, int *) = { make_full_range, make_empty_range, make_small_random_range, make_medium_random_range, make_large_random_range, make_tail_range, make_head_range, 0 }; int main (int argc, char * argv[]) { int errn; int o; struct opt_parsed * option; int iterations; option = 0; iterations = 1; while (1) { o = opt_standard (lim_use_must_malloc, &option, opts, &argc, argv, program_name, usage, version_string, 0, opt_help_msg, opt_none, opt_version); if (o == opt_none) break; switch (o) { default: safe_printfmt (2, "unhandled option `%s'\n", option->opt_string); panic ("internal error parsing arguments"); usage_error: opt_usage (2, argv[0], program_name, usage, 1); panic_exit (); bogus_arg: safe_printfmt (2, "ill-formed argument for `%s' (`%s')\n", option->opt_string, option->arg_string); goto usage_error; case opt_iterations: if (cvt_decimal_to_uint (&errn, &iterations, option->arg_string, str_length (option->arg_string))) goto bogus_arg; break; } } while (iterations--) { /* functions that operate on a bitset */ { int contents_fn; for (contents_fn = 0; contents_fns [contents_fn]; ++contents_fn) { enum bitset_fn { is_empty, is_full, population, clear, fill, complement, ffs, ffc, max_bitset_fn = ffc } fn; for (fn = 0; fn <= max_bitset_fn; ++fn) { bitset b; bits b16; ++test_no; b = contents_fns[contents_fn](); b16 = make_test_set (b); switch (fn) { default: panic ("missing test fn"); case is_empty: if (!(bitset_is_empty (65536, b) == bits_is_empty (b16))) panic ("bitset_is_empty test failed"); break; case is_full: if (!(bitset_is_full (65536, b) == bits_is_full (b16))) panic ("bitset_is_full test failed"); break; case population: if (!(bitset_population (65536, b) == bits_population (b16))) panic ("bitset_population test failed"); break; case ffs: if (!(bitset_ffs (65536, b) == bits_ffs (b16))) panic ("bitset_ffs test failed"); break; case ffc: if (!(bitset_ffc (65536, b) == bits_ffc (b16))) panic ("bitset_ffc test failed"); break; case clear: bitset_clear (65536, b); bits_clear (b16); compare_test_result (b16, b); break; case fill: bitset_fill (65536, b); bits_fill (b16); compare_test_result (b16, b); break; case complement: bitset_complement (65536, b); bits_complement (b16); compare_test_result (b16, b); break; } free_test_set (b16); bitset_free (lim_use_must_malloc, b); } } } /* functions that operate on a bitset and index */ { int contents_fn; for (contents_fn = 0; contents_fns [contents_fn]; ++contents_fn) { int index_fn; for (index_fn = 0; index_fns [index_fn]; ++index_fn) { enum bitset_n_fn { is_member, adjoin, remove, toggle, max_bitset_n_fn = toggle } fn; for (fn = 0; fn <= max_bitset_n_fn; ++fn) { bitset b; bits b16; int n; ++test_no; b = contents_fns[contents_fn] (); b16 = make_test_set (b); n = index_fns[index_fn] (); switch (fn) { default: panic ("missing test fn"); case is_member: if (bitset_is_member (b, n) != bits_is_member (b16, n)) panic ("bitset_is_member test failed"); break; case adjoin: bitset_adjoin (b, n); bits_adjoin (b16, n); compare_test_result (b16, b); break; case remove: bitset_remove (b, n); bits_remove (b16, n); compare_test_result (b16, b); break; case toggle: bitset_toggle (b, n); bits_toggle (b16, n); compare_test_result (b16, b); break; } free_test_set (b16); bitset_free (lim_use_must_malloc, b); } } } } /* functions that operate on a bitset and range */ { int contents_fn; for (contents_fn = 0; contents_fns [contents_fn]; ++contents_fn) { int range_fn; for (range_fn = 0; range_fns [range_fn]; ++range_fn) { enum bitset_range_fn { is_empty_range, is_full_range, clear_range, fill_range, population_range, ffs_range, ffc_range, max_bitset_range_fn = ffc_range } fn; for (fn = 0; fn <= max_bitset_range_fn; ++fn) { bitset b; bits b16; int from; int to; ++test_no; b = contents_fns[contents_fn](); b16 = make_test_set (b); range_fns[range_fn] (&from, &to); switch (fn) { default: panic ("missing test fn"); case is_empty_range: if (bitset_is_empty_range (b, from, to) != bits_is_empty_range (b16, from, to)) panic ("bitset_is_empty_range test failed"); break; case is_full_range: if (bitset_is_full_range (b, from, to) != bits_is_full_range (b16, from, to)) panic ("bitset_is_empty_range test failed"); break; case population_range: if (bitset_population_range (b, from, to) != bits_population_range (b16, from, to)) panic ("bitset_population_range test failed"); break; case ffs_range: if (bitset_ffs_range (b, from, to) != bits_ffs_range (b16, from, to)) panic ("bitset_ffs_range test failed"); break; case ffc_range: if (bitset_ffc_range (b, from, to) != bits_ffc_range (b16, from, to)) panic ("bitset_ffc_range test failed"); break; case clear_range: bitset_clear_range (b, from, to); bits_clear_range (b16, from, to); compare_test_result (b16, b); break; case fill_range: bitset_fill_range (b, from, to); bits_fill_range (b16, from, to); compare_test_result (b16, b); break; } free_test_set (b16); bitset_free (lim_use_must_malloc, b); } } } } /* * two_bitsets; */ { int contents_fn_a; for (contents_fn_a = 0; contents_fns [contents_fn_a]; ++contents_fn_a) { int contents_fn_b; for (contents_fn_b = 0; contents_fns [contents_fn_b]; ++contents_fn_b) { enum two_bitsets_fn { is_equal, is_subset, assign, union_, intersection, difference, revdifference, xor, max_two_bitsets_fn = xor } fn; for (fn = 0; fn <= max_two_bitsets_fn; ++fn) { bitset a; bitset b; bits a16; bits b16; ++test_no; a = contents_fns[contents_fn_a](); b = contents_fns[contents_fn_b](); a16 = make_test_set (a); b16 = make_test_set (b); switch (fn) { default: panic ("missing test fn"); case is_equal: if (!(bitset_is_equal (65536, a, b) == bits_is_equal (a16, b16))) panic ("bitset_is_equal test failed"); break; case is_subset: if (!(bitset_is_subset (65536, a, b) == bits_is_subset (a16, b16))) panic ("bitset_is_subset test failed"); break; case assign: bitset_assign (65536, a, b); bits_assign (a16, b16); compare_test_result (a16, a); break; case union_: bitset_union (65536, a, b); bits_union (a16, b16); compare_test_result (a16, a); break; case intersection: bitset_intersection (65536, a, b); bits_intersection (a16, b16); compare_test_result (a16, a); break; case difference: bitset_difference (65536, a, b); bits_difference (a16, b16); compare_test_result (a16, a); break; case revdifference: bitset_revdifference (65536, a, b); bits_revdifference (a16, b16); compare_test_result (a16, a); break; case xor: bitset_xor (65536, a, b); bits_xor (a16, b16); compare_test_result (a16, a); break; } free_test_set (a16); free_test_set (b16); bitset_free (lim_use_must_malloc, a); bitset_free (lim_use_must_malloc, b); } } } } } safe_printfmt (1, "completed %d tests\n", test_no); return 0; } tla-1.3.5+dfsg/src/hackerlab/tests/bitset-tests/unit-bitset-tree.sh0000644000175000017500000000036410457621774024014 0ustar useruser#!/bin/sh # tag: Tom Lord Tue Dec 4 14:54:32 2001 (bitset-tests/unit-bitset-tree.sh) # set -e arg0="$0" srcdir=`dirname "$arg0"` echo "================ unit-bitset-tree: bitset trees ================" ./unit-bitset-tree echo "...passed" tla-1.3.5+dfsg/src/hackerlab/tests/bitset-tests/Makefile.in0000644000175000017500000000061710457621774022322 0ustar useruser# tag: Tom Lord Tue Dec 4 14:52:15 2001 (bitset-tests/Makefile.in) # tested-headers := bits.h \ bits-print.h \ bitset-tree.h \ bitset-tree-print.h \ bitset.h \ bitset-print.h \ uni-bits.h test-headers := $(addprefix hackerlab/bitsets/, $(tested-headers)) libs := $(objroot)/hackerlab/libhackerlab/libhackerlab.a -lm include $(makefiles)/unit-tests.mk tla-1.3.5+dfsg/src/hackerlab/tests/bitset-tests/DESC0000644000175000017500000000450710457621774020720 0ustar useruser# tag: Tom Lord Tue Dec 4 15:05:27 2001 (bitset-tests/DESC) # We test the installed header files to make sure they compile. unit-bitset Reads a test script that describes a series of set operations. Writes a file of results. Compares the expected and actual results. The test script and results are generated by a Scheme program using lists to represent sets. Each operation is tested for a variety of bitset sizes including 0, 1, sizeof(subset) - 1, sizeof (subset), and several others. At each size, the operation is tried with fencepost bits (the bits before and after the set) set to all four possible combinations (0/0, 0/1, 1/0, 1/1) and these bits are watched for overwrites. For each size/fencepost combination, operations are repeated with empty sets, full sets, and random sets. When an operation requires a bit position, it is tried with position 0, position `n-1' (the last bit in an n-bit set), and a random position. When an operation requires a range of bits, it is tried with the entire set, a randomly chosen empty range, a randomly chosen non-empty range, and randomly chosen prefix and suffix ranges (ranges beginning at 0 or ending at `n-1'.) (These tests caught many bugs that were not otherwise detected as the bitset library was written and modified.) unit-bitset-tree This test works by constructing equivalent flat bitsets and bitset trees, performing operations on both, and comparing the results. Tests are repeated for full bitsets, empty bitsets, and randomly populated bitsets. Tests that require a bit index are repeated with index 0, index `n-1' (for an n-bit set) and a randomly chosen idnex. Tests that require a range of indexes are repeated for the entire bitset, for a randomly chosen empty range, a randomly chosen non-empty ranges of various sizes, and random prefix and suffix ranges. Bitset trees are compacted upon construction. After they are operated on, the result is tested without compaction, then is compacted, then tested again. A weakness of this test is that only one `bits_tree_rule' is tested. bits This is the same as the bitset tree tests, using `bits' instead of `bits_tree'. bitset_print bitset_tree_print bits_print uni_bits These are not directly tested, but if they don't work correctly, other tests (notably the unicode database) will (likely) fail. tla-1.3.5+dfsg/src/hackerlab/tests/bitset-tests/unit-bitset-tree.c0000644000175000017500000003001010457621774023613 0ustar useruser/* unit-bitset-tree.c - test bitset-tree.c * **************************************************************** * Copyright (C) 2000 Thomas Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/char/str.h" #include "hackerlab/bitsets/bitset-tree.h" #include "hackerlab/cmd/main.h" static t_uchar * program_name = "unit-bitset-tree"; static t_uchar * usage = "[options]"; static t_uchar * version_string = "1.0"; #define OPTS(OP, OP2) \ OP (opt_help_msg, "h", "help", 0, \ "Display a help message and exit.") \ OP (opt_version, "V", "version", 0, \ "Display a release identifier string") \ OP2 (opt_version, 0, 0, 0, "and exit.") \ OP (opt_iterations, "i", "iterations n", 1, \ "Run all tests `n' times.") enum options { OPTS (OPT_ENUM, OPT_IGN) }; struct opt_desc opts[] = { OPTS (OPT_DESC, OPT_DESC) {-1, 0, 0, 0, 0} }; #if 1 struct bits_tree_rule rules[] = {{16, 256*16, 12, 0xfff}, {16, 256, 0, 0}, {0, 256, 0, 0}}; #else struct bits_tree_rule rules[] = {{256, 256, 8, 0xff}, {0, 256, 0, 0}}; #endif static bits_tree make_test_set (bitset members) { bits_tree answer; int x; answer = bits_tree_alloc (0, rules); for (x = 0; x < 65536; ++x) if (bitset_is_member (members, x)) bits_tree_adjoin (0, rules, answer, x); bits_tree_compact (0, rules, answer); return answer; } static int test_no = 0; static int compare_test_result (bits_tree test_answer, bitset answer) { int x; for (x = 0; x < 65536; ++x) if (bitset_is_member (answer, x) != bits_tree_is_member (0, rules, test_answer, x)) panic ("test failed"); bits_tree_compact (0, rules, test_answer); for (x = 0; x < 65536; ++x) if (bitset_is_member (answer, x) != bits_tree_is_member (0, rules, test_answer, x)) panic ("test failed"); return 1; } static void free_test_set (bits_tree b) { bits_tree_free (0, rules, b); } static bitset make_empty_bitset (void) { return bitset_alloc (lim_use_must_malloc, 65536); } static bitset make_full_bitset (void) { bitset b; b = bitset_alloc (lim_use_must_malloc, 65536); bitset_fill (65536, b); return b; } static bitset make_random_bitset (void) { bitset b; int x; b = bitset_alloc (lim_use_must_malloc, 65536); for (x = 0; x < 65536; ++x) if (random () & 1) bitset_adjoin (b, x); return b; } static bitset (*contents_fns[])(void) = { make_empty_bitset, make_full_bitset, make_random_bitset, 0 }; static int make_zero_index (void) { return 0; } static int make_max_index (void) { return 65535; } static int make_random_index (void) { return random () % 65536; } static int (*index_fns[])(void) = { make_zero_index, make_max_index, make_random_index, 0 }; static void make_full_range (int * from, int * to) { *from = 0; *to = 65536; } static void make_empty_range (int * from, int * to) { *from = random () % 65537; if (!*from) *to = 0; else *to = random () % *from; } static void make_small_random_range (int * from, int * to) { *from = random () % (65536 - 256); *to = *from + random () % 256; } static void make_medium_random_range (int * from, int * to) { *from = random () % (65536 - 256); *to = *from + random () % 256; } static void make_large_random_range (int * from, int * to) { *to = 1024 + (random () % (65537 - 1024)); *from = random () % (*to - 768); } static void make_tail_range (int * from, int * to) { *from = random () % 65537; *to = 65536; } static void make_head_range (int * from, int * to) { *from = 0; *to = random () % 65537; } static void (*range_fns[])(int *, int *) = { make_full_range, make_empty_range, make_small_random_range, make_medium_random_range, make_large_random_range, make_tail_range, make_head_range, 0 }; int main (int argc, char * argv[]) { int errn; int o; struct opt_parsed * option; int iterations; option = 0; iterations = 1; while (1) { o = opt_standard (lim_use_must_malloc, &option, opts, &argc, argv, program_name, usage, version_string, 0, opt_help_msg, opt_none, opt_version); if (o == opt_none) break; switch (o) { default: safe_printfmt (2, "unhandled option `%s'\n", option->opt_string); panic ("internal error parsing arguments"); usage_error: opt_usage (2, argv[0], program_name, usage, 1); panic_exit (); bogus_arg: safe_printfmt (2, "ill-formed argument for `%s' (`%s')\n", option->opt_string, option->arg_string); goto usage_error; case opt_iterations: if (cvt_decimal_to_uint (&errn, &iterations, option->arg_string, str_length (option->arg_string))) goto bogus_arg; break; } } while (iterations--) { /* functions that operate on a bitset */ { int contents_fn; for (contents_fn = 0; contents_fns [contents_fn]; ++contents_fn) { enum bitset_fn { is_empty, is_full, population, clear, fill, complement, ffs, ffc, max_bitset_fn = ffc } fn; for (fn = 0; fn <= max_bitset_fn; ++fn) { bitset b; bits_tree b16; ++test_no; b = contents_fns[contents_fn](); b16 = make_test_set (b); switch (fn) { default: panic ("missing test fn"); case is_empty: if (!(bitset_is_empty (65536, b) == bits_tree_is_empty (0, rules, b16))) panic ("bitset_is_empty test failed"); break; case is_full: if (!(bitset_is_full (65536, b) == bits_tree_is_full (0, rules, b16))) panic ("bitset_is_full test failed"); break; case population: if (!(bitset_population (65536, b) == bits_tree_population (0, rules, b16))) panic ("bitset_population test failed"); break; case ffs: if (!(bitset_ffs (65536, b) == bits_tree_ffs (0, rules, b16))) panic ("bitset_ffs test failed"); break; case ffc: if (!(bitset_ffc (65536, b) == bits_tree_ffc (0, rules, b16))) panic ("bitset_ffc test failed"); break; case clear: bitset_clear (65536, b); bits_tree_clear (0, rules, b16); compare_test_result (b16, b); break; case fill: bitset_fill (65536, b); bits_tree_fill (0, rules, b16); compare_test_result (b16, b); break; case complement: bitset_complement (65536, b); bits_tree_complement (0, rules, b16); compare_test_result (b16, b); break; } free_test_set (b16); bitset_free (lim_use_must_malloc, b); } } } /* functions that operate on a bitset and index */ { int contents_fn; for (contents_fn = 0; contents_fns [contents_fn]; ++contents_fn) { int index_fn; for (index_fn = 0; index_fns [index_fn]; ++index_fn) { enum bitset_n_fn { is_member, adjoin, remove, toggle, max_bitset_n_fn = toggle } fn; for (fn = 0; fn <= max_bitset_n_fn; ++fn) { bitset b; bits_tree b16; int n; ++test_no; b = contents_fns[contents_fn] (); b16 = make_test_set (b); n = index_fns[index_fn] (); switch (fn) { default: panic ("missing test fn"); case is_member: if (bitset_is_member (b, n) != bits_tree_is_member (0, rules, b16, n)) panic ("bitset_is_member test failed"); break; case adjoin: bitset_adjoin (b, n); bits_tree_adjoin (0, rules, b16, n); compare_test_result (b16, b); break; case remove: bitset_remove (b, n); bits_tree_remove (0, rules, b16, n); compare_test_result (b16, b); break; case toggle: bitset_toggle (b, n); bits_tree_toggle (0, rules, b16, n); compare_test_result (b16, b); break; } free_test_set (b16); bitset_free (lim_use_must_malloc, b); } } } } /* functions that operate on a bitset and range */ { int contents_fn; for (contents_fn = 0; contents_fns [contents_fn]; ++contents_fn) { int range_fn; for (range_fn = 0; range_fns [range_fn]; ++range_fn) { enum bitset_range_fn { is_empty_range, is_full_range, clear_range, fill_range, population_range, ffs_range, ffc_range, max_bitset_range_fn = ffc_range } fn; for (fn = 0; fn <= max_bitset_range_fn; ++fn) { bitset b; bits_tree b16; int from; int to; ++test_no; b = contents_fns[contents_fn](); b16 = make_test_set (b); range_fns[range_fn] (&from, &to); switch (fn) { default: panic ("missing test fn"); case is_empty_range: if (bitset_is_empty_range (b, from, to) != bits_tree_is_empty_range (0, rules, b16, from, to)) panic ("bitset_is_empty_range test failed"); break; case is_full_range: if (bitset_is_full_range (b, from, to) != bits_tree_is_full_range (0, rules, b16, from, to)) panic ("bitset_is_empty_range test failed"); break; case population_range: if (bitset_population_range (b, from, to) != bits_tree_population_range (0, rules, b16, from, to)) panic ("bitset_population_range test failed"); break; case ffs_range: if (bitset_ffs_range (b, from, to) != bits_tree_ffs_range (0, rules, b16, from, to)) panic ("bitset_ffs_range test failed"); break; case ffc_range: if (bitset_ffc_range (b, from, to) != bits_tree_ffc_range (0, rules, b16, from, to)) panic ("bitset_ffc_range test failed"); break; case clear_range: bitset_clear_range (b, from, to); bits_tree_clear_range (0, rules, b16, from, to); compare_test_result (b16, b); break; case fill_range: bitset_fill_range (b, from, to); bits_tree_fill_range (0, rules, b16, from, to); compare_test_result (b16, b); break; } free_test_set (b16); bitset_free (lim_use_must_malloc, b); } } } } /* * two_bitsets; */ { int contents_fn_a; for (contents_fn_a = 0; contents_fns [contents_fn_a]; ++contents_fn_a) { int contents_fn_b; for (contents_fn_b = 0; contents_fns [contents_fn_b]; ++contents_fn_b) { enum two_bitsets_fn { is_equal, is_subset, assign, union_, intersection, difference, revdifference, xor, max_two_bitsets_fn = xor } fn; for (fn = 0; fn <= max_two_bitsets_fn; ++fn) { bitset a; bitset b; bits_tree a16; bits_tree b16; ++test_no; a = contents_fns[contents_fn_a](); b = contents_fns[contents_fn_b](); a16 = make_test_set (a); b16 = make_test_set (b); switch (fn) { default: panic ("missing test fn"); case is_equal: if (!(bitset_is_equal (65536, a, b) == bits_tree_is_equal (0, rules, a16, b16))) panic ("bitset_is_equal test failed"); break; case is_subset: if (!(bitset_is_subset (65536, a, b) == bits_tree_is_subset (0, rules, a16, b16))) panic ("bitset_is_subset test failed"); break; case assign: bitset_assign (65536, a, b); bits_tree_assign (0, rules, a16, b16); compare_test_result (a16, a); break; case union_: bitset_union (65536, a, b); bits_tree_union (0, rules, a16, b16); compare_test_result (a16, a); break; case intersection: bitset_intersection (65536, a, b); bits_tree_intersection (0, rules, a16, b16); compare_test_result (a16, a); break; case difference: bitset_difference (65536, a, b); bits_tree_difference (0, rules, a16, b16); compare_test_result (a16, a); break; case revdifference: bitset_revdifference (65536, a, b); bits_tree_revdifference (0, rules, a16, b16); compare_test_result (a16, a); break; case xor: bitset_xor (65536, a, b); bits_tree_xor (0, rules, a16, b16); compare_test_result (a16, a); break; } free_test_set (a16); free_test_set (b16); bitset_free (lim_use_must_malloc, a); bitset_free (lim_use_must_malloc, b); } } } } } safe_printfmt (1, "completed %d tests\n", test_no); return 0; } tla-1.3.5+dfsg/src/hackerlab/tests/bitset-tests/unit-bitset.sh0000744000175000017500000000045310457621774023057 0ustar useruser#!/bin/sh # tag: Tom Lord Tue Dec 4 14:54:31 2001 (bitset-tests/unit-bitset.sh) # set -e arg0="$0" srcdir=`dirname "$arg0"` echo "================ unit-bitset: basic bitset tests ================" ./unit-bitset < $srcdir/unit-bitset.tests | cmp $srcdir/unit-bitset.answers - echo "...passed" tla-1.3.5+dfsg/src/hackerlab/tests/bitset-tests/unit-bits.sh0000644000175000017500000000056110457621774022525 0ustar useruser#!/bin/sh # Copyright (C) 2002 Tom Lord # # See the file "COPYING" for further information about # the copyright and warranty status of this work. # set -e arg0="$0" srcdir=`dirname "$arg0"` echo "================ unit-bits: generic bitsets ================" ./unit-bits echo "...passed" # tag: Tom Lord Tue Dec 4 14:54:31 2001 (bitset-tests/unit-bits.sh) # tla-1.3.5+dfsg/src/hackerlab/tests/bitset-tests/PLUGIN/0000755000175000017500000000000010457621774021247 5ustar userusertla-1.3.5+dfsg/src/hackerlab/tests/bitset-tests/PLUGIN/REQ0000644000175000017500000000002710457621774021620 0ustar userusermem-tests bitset-tests tla-1.3.5+dfsg/src/hackerlab/tests/bitset-tests/PLUGIN/OPT0000644000175000017500000000000010457621774021622 0ustar userusertla-1.3.5+dfsg/src/hackerlab/tests/mem-tests/0000755000175000017500000000000010457621774017535 5ustar userusertla-1.3.5+dfsg/src/hackerlab/tests/mem-tests/unit-alloc-limits.c0000644000175000017500000002424710457621774023260 0ustar useruser/* unit-alloc-limits.c - test alloc-limits.c * **************************************************************** * Copyright (C) 2000 Thomas Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/bugs/panic.h" #include "hackerlab/bugs/test-coverage.h" #include "hackerlab/os/time.h" #include "hackerlab/char/str.h" #include "hackerlab/arrays/ar.h" #include "hackerlab/fmt/cvt.h" #include "hackerlab/mem/alloc-limits.h" #include "hackerlab/cmd/main.h" static t_uchar * program_name = "unit-alloc-limits"; static t_uchar * usage = "[options]"; static t_uchar * version_string = "1.0"; #define OPTS(OP, OP2) \ OP (opt_help_msg, "h", "help", 0, \ "Display a help message and exit.") \ OP (opt_version, "V", "version", 0, \ "Display a release identifier string") \ OP2 (opt_version, 0, 0, 0, "and exit.") \ OP (opt_iterations, "i", "iterations=n", 1, \ "Perform `n' test operations.") \ OP (opt_reseed, "r", "reseed", 0, \ "Reseed the random number generator from the time of day.") \ OP2(opt_reseed, 0, 0, 0, \ "Print the new seed value.") \ OP (opt_seed, "s", "seed=n", 1, \ "Seed the random number generator with the number `n'.") \ OP (opt_threshold, "t", "threshold=n", 1, \ "Set the GC threshold.") \ OP (opt_failure_pt, "f", "failure-point=n", 1, \ "Set the allocation failure point.") enum options { OPTS (OPT_ENUM, OPT_IGN) }; struct opt_desc opts[] = { OPTS (OPT_DESC, OPT_DESC) {-1, 0, 0, 0, 0} }; static unsigned int rnd (int bound) { return ((unsigned int)random ()) % bound; } static t_uchar ** allocated = 0; static size_t * allocated_size = 0; static t_uchar * aside = 0; /* memory being realloced -- should not be GCed */ static size_t aside_size = 0; static size_t threshold = 4096; static size_t failure_pt = 8192; static size_t amt_used = 0; static alloc_limits limits; #define TEST_COVERAGE_LIST(MACRO) \ TEST_COVERAGE_ ## MACRO (alloc_gc); \ TEST_COVERAGE_ ## MACRO (alloc_no_gc); \ TEST_COVERAGE_ ## MACRO (alloc_fail); \ TEST_COVERAGE_ ## MACRO (alloc_no_fail); \ TEST_COVERAGE_ ## MACRO (realloc_gc); \ TEST_COVERAGE_ ## MACRO (realloc_no_gc); \ TEST_COVERAGE_ ## MACRO (realloc_fail); \ TEST_COVERAGE_ ## MACRO (realloc_no_fail) TEST_COVERAGE_LIST(DECL); static void check_test_engine (void) { int x; size_t accounted; accounted = 0; for (x = ar_size ((void *)allocated, lim_use_must_malloc, sizeof (*allocated)) - 1; x >= 0; --x) accounted += allocated_size[x]; accounted += aside_size; if (accounted != amt_used) panic ("test engine error"); } static void free_memory (int pos) { check_test_engine (); if ((pos < 0) || (pos >= ar_size ((void *)allocated, lim_use_must_malloc, sizeof (*allocated)))) panic ("bad pos in free_memory"); lim_free (limits, allocated[pos]); amt_used -= allocated_size[pos]; allocated[pos] = allocated[ar_size((void *)allocated, lim_use_must_malloc, sizeof (*allocated)) - 1]; allocated_size[pos] = allocated_size[ar_size((void *)allocated, lim_use_must_malloc, sizeof (*allocated)) - 1]; ar_pop ((void **)&allocated, lim_use_must_malloc, sizeof (void *)); ar_pop ((void **)&allocated_size, lim_use_must_malloc, sizeof (size_t)); check_test_engine (); } static size_t want; static int free_memory_fn_expected; static int free_memory_fn_called; static int can_free_memory; static void free_memory_fn (void * closure, size_t amt) { if (!free_memory_fn_expected) panic ("unexpected call to free_memory_fn"); free_memory_fn_called = 1; if (closure != (void *)0xac1dc0de) panic ("bad closure in free_memory_fn"); if (want != amt) panic ("bad amt passed to free_memory_fn"); if (can_free_memory) while (ar_size ((void *)allocated, lim_use_must_malloc, sizeof (*allocated)) && (lim_in_use (limits) + amt >= lim_threshold (limits))) free_memory (0); } static void alloc_test (int force_gc, int force_fail) { void * answer; if (force_gc) { if (amt_used < threshold) want = threshold - amt_used + 1; else want = 1; } else { want = rnd (threshold - sizeof (size_t)); if (want == 0) want = 1; } if (force_fail) can_free_memory = 0; else can_free_memory = rnd (2); free_memory_fn_expected = ((want + amt_used) >= threshold); free_memory_fn_called = 0; if (free_memory_fn_expected) TEST_COVERED (alloc_gc); else TEST_COVERED (alloc_no_gc); answer = lim_malloc (limits, want); if (free_memory_fn_expected != free_memory_fn_expected) panic ("free_memory_fn_expected != free_memory_fn_called"); if (!answer) { TEST_COVERED (alloc_fail); if (!lim_failure_pt (limits) || (want + lim_in_use (limits) < lim_failure_pt (limits))) panic ("allocation below failure point failed"); return; } else { TEST_COVERED (alloc_no_fail); if (lim_failure_pt (limits) && (lim_in_use (limits) > lim_failure_pt (limits))) panic ("allocation succeeded above failure point"); } *(void **)ar_push ((void **)&allocated, lim_use_must_malloc, sizeof (void *)) = answer; *(size_t *)ar_push ((void **)&allocated_size, lim_use_must_malloc, sizeof (size_t)) = want; amt_used += want; } static void realloc_test (int force_gc, int force_fail) { int pos; size_t will_be; void * answer; while (!ar_size ((void *)allocated, lim_use_must_malloc, sizeof (*allocated))) alloc_test (0, 0); pos = rnd (ar_size ((void *)allocated, lim_use_must_malloc, sizeof (*allocated))); aside = allocated[pos]; aside_size = allocated_size[pos]; allocated[pos] = allocated[ar_size((void *)allocated, lim_use_must_malloc, sizeof (*allocated)) - 1]; allocated_size[pos] = allocated_size[ar_size((void *)allocated, lim_use_must_malloc, sizeof (*allocated)) - 1]; ar_pop ((void **)&allocated, lim_use_must_malloc, sizeof (void *)); ar_pop ((void **)&allocated_size, lim_use_must_malloc, sizeof (size_t)); if (force_gc) { if (amt_used < threshold) will_be = aside_size + (threshold - amt_used) + 1; else will_be = aside_size; } else { will_be = rnd (threshold); if (will_be == 0) will_be = 1; } if (force_fail) can_free_memory = 0; else can_free_memory = rnd (2); free_memory_fn_expected = ((will_be - aside_size + amt_used) >= threshold); free_memory_fn_called = 0; if (free_memory_fn_expected) TEST_COVERED (realloc_gc); else TEST_COVERED (realloc_no_gc); want = will_be - aside_size; answer = lim_realloc (limits, aside, will_be); if (free_memory_fn_expected != free_memory_fn_expected) panic ("free_memory_fn_expected != free_memory_fn_called"); if (!answer) { TEST_COVERED (realloc_fail); if (!lim_failure_pt (limits) || (will_be < aside_size) || (want + lim_in_use (limits) < lim_failure_pt (limits))) panic ("allocation below failure point failed"); *(void **)ar_push ((void **)&allocated, lim_use_must_malloc, sizeof (void *)) = aside; *(size_t *)ar_push ((void **)&allocated_size, lim_use_must_malloc, sizeof (size_t)) = aside_size; aside = 0; aside_size = 0; return; } else { TEST_COVERED (realloc_no_fail); if (lim_failure_pt (limits) && (lim_in_use (limits) > lim_failure_pt (limits))) panic ("allocation succeeded above failure point"); } *(void **)ar_push ((void **)&allocated, lim_use_must_malloc, sizeof (void *)) = answer; *(size_t *)ar_push ((void **)&allocated_size, lim_use_must_malloc, sizeof (size_t)) = will_be; amt_used += (will_be - aside_size); aside = 0; aside_size = 0; } static void free_test () { while (!amt_used) alloc_test (0, 0); free_memory (0); } static void init_test (void) { limits = make_alloc_limits ("test limits", threshold, failure_pt, 0, free_memory_fn, (void *)0xac1dc0de); } static void run_tests (int iter) { enum test_cases { test_alloc, test_realloc, test_free, n_tests }; init_test (); while (iter--) { check_test_engine (); switch (rnd (n_tests)) { default: panic ("bogus random number"); case test_alloc: alloc_test (0, 0); break; case test_realloc: realloc_test (0, 0); break; case test_free: free_test (); break; } } } int main (int argc, char * argv[]) { int errn; int o; struct opt_parsed * option; unsigned int iter; option = 0; iter = 10000; while (1) { o = opt_standard (lim_use_must_malloc, &option, opts, &argc, argv, program_name, usage, version_string, 0, opt_help_msg, opt_none, opt_version); if (o == opt_none) break; switch (o) { default: safe_printfmt (2, "unhandled option `%s'\n", option->opt_string); panic ("internal error parsing arguments"); usage_error: opt_usage (2, argv[0], program_name, usage, 1); panic_exit (); bogus_arg: safe_printfmt (2, "ill-formed argument for `%s' (`%s')\n", option->opt_string, option->arg_string); goto usage_error; case opt_iterations: if (cvt_decimal_to_uint (&errn, &iter, option->arg_string, str_length (option->arg_string))) goto bogus_arg; break; case opt_reseed: { unsigned long t; t = time(0); printfmt (&errn, 1, "RNG seed == %lu\n", t); srandom (t); } break; case opt_seed: { unsigned long t; if (cvt_decimal_to_ulong (&errn, &t, option->arg_string, str_length (option->arg_string))) goto bogus_arg; printfmt (&errn, 1, "RNG seed == %lu\n", t); srandom (t); break; } case opt_threshold: { unsigned long t; if (cvt_decimal_to_ulong (&errn, &t, option->arg_string, str_length (option->arg_string))) goto bogus_arg; threshold = (size_t) t; break; } case opt_failure_pt: { unsigned long t; if (cvt_decimal_to_ulong (&errn, &t, option->arg_string, str_length (option->arg_string))) goto bogus_arg; failure_pt = (size_t) t; break; } } } run_tests (iter); alloc_test (1, 0); alloc_test (1, 1); realloc_test (1, 0); realloc_test (1, 1); TEST_COVERAGE_LIST(CHECK); safe_printfmt (1, "%d iterations completed\n", iter); exit (0); } tla-1.3.5+dfsg/src/hackerlab/tests/mem-tests/unit-mem.sh0000644000175000017500000000031410457621774021622 0ustar useruser#!/bin/sh # tag: Tom Lord Tue Dec 4 14:54:29 2001 (mem-tests/unit-mem.sh) # set -e arg0="$0" srcdir=`dirname "$arg0"` echo ================ unit-mem tests ================ ./unit-mem echo ...passed tla-1.3.5+dfsg/src/hackerlab/tests/mem-tests/unit-must-malloc.sh0000644000175000017500000000034410457621774023304 0ustar useruser#!/bin/sh # tag: Tom Lord Tue Dec 4 14:54:29 2001 (mem-tests/unit-must-malloc.sh) # set -e arg0="$0" srcdir=`dirname "$arg0"` echo ================ unit-must-malloc tests ================ ./unit-must-malloc echo ...passed tla-1.3.5+dfsg/src/hackerlab/tests/mem-tests/unit-mem.c0000644000175000017500000001127710457621774021444 0ustar useruser/* unit-mem.c - test mem.c * **************************************************************** * Copyright (C) 2000 Thomas Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/bugs/panic.h" #include "hackerlab/bugs/test-coverage.h" #include "hackerlab/mem/mem.h" #include "hackerlab/cmd/main.h" static t_uchar * program_name = "unit-mem"; static t_uchar * usage = "[options]"; static t_uchar * version_string = "1.0"; #define OPTS(OP, OP2) \ OP (opt_help_msg, "h", "help", 0, \ "Display a help message and exit.") \ OP (opt_version, "V", "version", 0, \ "Display a release identifier string") \ OP2 (opt_version, 0, 0, 0, "and exit.") enum options { OPTS (OPT_ENUM, OPT_IGN) }; struct opt_desc opts[] = { OPTS (OPT_DESC, OPT_DESC) {-1, 0, 0, 0, 0} }; #define HASH8(X) ((((X) >> 8) & 0xff) ^ ((X) & 0xff)) int main (int argc, char * argv[]) { int o; struct opt_parsed * option; option = 0; while (1) { o = opt_standard (lim_use_must_malloc, &option, opts, &argc, argv, program_name, usage, version_string, 0, opt_help_msg, opt_none, opt_version); if (o == opt_none) break; switch (o) { default: safe_printfmt (2, "unhandled option `%s'\n", option->opt_string); panic ("internal error parsing arguments"); } } safe_printfmt (1, " mem_set tests...\n"); { t_uchar buffer[1024]; int from; int to; for (from = 0; from < 13; ++from) for (to = from; to < from + 64; ++to) { int x; mem_set (buffer, '1', sizeof (buffer)); mem_set (buffer + from, '2', to - from); for (x = 0; x < sizeof (buffer); ++x) invariant (((x >= from) && (x < to)) ? (buffer[x] == '2') : (buffer[x] == '1')); } } safe_printfmt (1, " mem_set0 tests...\n"); { t_uchar buffer[1024]; int from; int to; for (from = 0; from < 13; ++from) for (to = from; to < from + 64; ++to) { int x; mem_set (buffer, '1', sizeof (buffer)); mem_set0 (buffer + from, to - from); for (x = 0; x < sizeof (buffer); ++x) invariant (((x >= from) && (x < to)) ? (buffer[x] == 0) : (buffer[x] == '1')); } } safe_printfmt (1, " mem_move tests...\n"); { t_uchar buffer[1024]; int left; int right; int size; for (left = 0; left < 13; ++left) for (right = left; right < left + 32; ++right) for (size = 0; size < 64; ++size) { int x; for (x = 0; x < sizeof (buffer); ++x) buffer[x] = HASH8 (x); mem_move (buffer + left, buffer + right, size); for (x = 0; x < sizeof (buffer); ++x) { invariant (((x >= left) && (x < (left + size))) ? (buffer[x] == HASH8 (right + (x - left))) : (buffer[x] == HASH8 (x))); } for (x = 0; x < sizeof (buffer); ++x) buffer[x] = HASH8 (x); mem_move (buffer + right, buffer + left, size); for (x = 0; x < sizeof (buffer); ++x) { invariant (((x >= right) && (x < (right + size))) ? (buffer[x] == HASH8 (left + (x - right))) : (buffer[x] == HASH8 (x))); } } } safe_printfmt (1, " mem_cmp tests...\n"); { t_uchar buffer[1024]; int left; int right; int size; for (left = 0; left < 13; ++left) for (right = left; right < left + 32; ++right) for (size = 0; size < 64; ++size) { int x; int cmp; for (x = 0; x < sizeof (buffer); ++x) buffer[x] = HASH8 (x); cmp = 0; for (x = 0; x < size; ++x) if (buffer[left + x] < buffer[right + x]) { cmp = -1; break; } else if (buffer[left + x] > buffer[right + x]) { cmp = 1; break; } invariant (cmp == mem_cmp (buffer + left, buffer + right, size)); invariant ((-cmp) == mem_cmp (buffer + right, buffer + left, size)); } } safe_printfmt (1, " mem_occurrences tests...\n"); { t_uchar buffer[1024]; int x; for (x = 0; x < sizeof (buffer); ++x) buffer[x] = HASH8 (x); for (x = 0; x < 256; ++x) { int occur; int y; occur = 0; for (y = 0; y < sizeof (buffer); ++y) { if (buffer[y] == x) ++occur; } invariant (occur == mem_occurrences (buffer, x, sizeof (buffer))); } { t_uchar buffer[1024]; int from; int to; for (from = 0; from < 13; ++from) for (to = from; to < from + 64; ++to) { int y; int occur; x = random () % 256; occur = 0; for (y = from; y < to; ++y) { if (buffer[y] == x) ++occur; } invariant (occur == mem_occurrences (buffer + from, x, to - from)); } } } return 0; } tla-1.3.5+dfsg/src/hackerlab/tests/mem-tests/Makefile.in0000644000175000017500000000046210457621774021604 0ustar useruser# tag: Tom Lord Tue Dec 4 14:52:15 2001 (mem-tests/Makefile.in) # tested-headers := alloc-limits.h \ mem.h \ must-malloc.h test-headers := $(addprefix hackerlab/mem/, $(tested-headers)) libs := $(objroot)/hackerlab/libhackerlab/libhackerlab.a -lm include $(makefiles)/unit-tests.mk tla-1.3.5+dfsg/src/hackerlab/tests/mem-tests/DESC0000644000175000017500000000241610457621774020201 0ustar useruser# tag: Tom Lord Tue Dec 4 15:05:26 2001 (mem-tests/DESC) # We test the installed header files to make sure they compile. unit-mem mem_set mem_set0 test for a variety of boundary conditions mem_move test for a variety of boundary and overlap conditions mem_cmp test for a variety of boundary conditions. missing tests for the case when mem_cmp returns 0. mem_occurrences test for counting a variety of values and boundary conditions. unit-must-malloc Perform a malloc stress test which consists of a series of random allocations, reallocations, and frees. For historic reasons, this also tests some functions from "flux/char/str.h": str_alloc_cat, str_save_n, and str_save. This doesn't test the underlying malloc very effectively. For example, the contents of allocated regions are not checked for overwrites. unit-alloc-limits Perform a malloc stress test using the `lim_' functions. Keep track of the total amount of memory currently allocated. Make sure that if an allocation limit is reached, allocation fails or forces GC, as appropriate. Forces the condition of exceeding allocation limits to occur. Uses `flux/bugs/test-coverage.h' to ensure that all interesting cases are reached during the random sequence of allocation operations. tla-1.3.5+dfsg/src/hackerlab/tests/mem-tests/unit-must-malloc.c0000644000175000017500000001477510457621774023131 0ustar useruser/* unit-must-malloc.c - test must-malloc.c * **************************************************************** * Copyright (C) 2000 Thomas Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/bugs/panic.h" #include "hackerlab/bugs/test-coverage.h" #include "hackerlab/os/time.h" #include "hackerlab/char/str.h" #include "hackerlab/mem/mem.h" #include "hackerlab/mem/must-malloc.h" #include "hackerlab/arrays/ar.h" #include "hackerlab/fmt/cvt.h" #include "hackerlab/cmd/main.h" static t_uchar * program_name = "unit-must-malloc"; static t_uchar * usage = "[options]"; static t_uchar * version_string = "1.0"; #define OPTS(OP, OP2) \ OP (opt_help_msg, "h", "help", 0, \ "Display a help message and exit.") \ OP (opt_version, "V", "version", 0, \ "Display a release identifier string") \ OP2 (opt_version, 0, 0, 0, "and exit.") \ OP (opt_iterations, "i", "iterations=n", 1, \ "Perform `n' test operations.") \ OP (opt_reseed, "r", "reseed", 0, \ "Reseed the random number generator from the time of day.") \ OP2(opt_reseed, 0, 0, 0, \ "Print the new seed value.") \ OP (opt_seed, "s", "seed=n", 1, \ "Seed the random number generator with the number `n'.") enum options { OPTS (OPT_ENUM, OPT_IGN) }; struct opt_desc opts[] = { OPTS (OPT_DESC, OPT_DESC) {-1, 0, 0, 0, 0} }; enum test_case { malloc_test, strsav_test, strnsav_test, strcat_test, #define allocation_test_max strcat_test realloc_test, free_test #define test_max free_test }; static unsigned int rnd (int bound) { return ((unsigned int)random ()) % bound; } static void malloc_stress_test (int iter) { t_uchar ** allocated; size_t * allocated_size; int pagesize; int small_allocation_range; int allocation_range; size_t amt_used; allocated = 0; allocated_size = 0; pagesize = getpagesize (); small_allocation_range = pagesize; allocation_range = 4 * pagesize; amt_used = 0; while (iter--) { int max; enum test_case test; if (ar_size ((void *)allocated, lim_use_must_malloc, sizeof (*allocated))) max = test_max; else max = allocation_test_max; if (amt_used >= 4194304) test = free_test; else test = rnd (max + 1); switch (test) { case malloc_test: { size_t amt; t_uchar * mem; amt = (rnd (2) ? rnd (small_allocation_range + 1) : (small_allocation_range + rnd (allocation_range + 1))); mem = must_malloc (amt); amt_used += amt; *(t_uchar **)ar_push ((void **)&allocated, lim_use_must_malloc, sizeof (t_uchar *)) = mem; *(size_t *)ar_push ((void **)&allocated_size, lim_use_must_malloc, sizeof (size_t)) = amt; } break; case strsav_test: { t_uchar * mem; mem = str_save (lim_use_must_malloc, "hello world"); invariant (str_cmp ("hello world", mem) == 0); amt_used += 12; *(t_uchar **)ar_push ((void **)&allocated, lim_use_must_malloc, sizeof (t_uchar *)) = mem; *(size_t *)ar_push ((void **)&allocated_size, lim_use_must_malloc, sizeof (size_t)) = 12; } break; case strnsav_test: { t_uchar * mem; mem = str_save_n (lim_use_must_malloc, "hello world", 11); invariant (str_cmp ("hello world", mem) == 0); amt_used += 12; *(t_uchar **)ar_push ((void **)&allocated, lim_use_must_malloc, sizeof (t_uchar *)) = mem; *(size_t *)ar_push ((void **)&allocated_size, lim_use_must_malloc, sizeof (size_t)) = 12; } break; case strcat_test: { t_uchar * mem; mem = str_alloc_cat (lim_use_must_malloc, "Hello ", "world!"); invariant (str_cmp ("Hello world!", mem) == 0); amt_used += 13; *(t_uchar **)ar_push ((void **)&allocated, lim_use_must_malloc, sizeof (t_uchar *)) = mem; *(size_t *)ar_push ((void **)&allocated_size, lim_use_must_malloc, sizeof (size_t)) = 13; } break; case realloc_test: { int which; size_t amt; size_t old_amt; which = rnd (ar_size ((void *)allocated, lim_use_must_malloc, sizeof (*allocated))); old_amt = allocated_size[which]; amt = (rnd (2) ? rnd (small_allocation_range + 1) : (small_allocation_range + rnd (allocation_range + 1))); amt_used -= old_amt; amt_used += amt; allocated[which] = must_realloc (allocated[which], amt); allocated_size[which] = amt; } break; case free_test: { int which; which = rnd (ar_size ((void *)allocated, lim_use_must_malloc, sizeof (*allocated))); must_free (allocated[which]); amt_used -= allocated_size[which]; mem_move ((t_uchar *)&allocated[which], (t_uchar *)&allocated[which + 1], sizeof (t_uchar *) * (ar_size ((void *)allocated, lim_use_must_malloc, sizeof (*allocated)) - (which + 1))); ar_pop ((void **)&allocated, lim_use_must_malloc, sizeof (t_uchar *)); mem_move ((t_uchar *)&allocated_size[which], (t_uchar *)&allocated_size[which + 1], sizeof (size_t) * (ar_size ((void *)allocated_size, lim_use_must_malloc, sizeof (*allocated_size)) - (which + 1))); ar_pop ((void **)&allocated_size, lim_use_must_malloc, sizeof (size_t)); } break; } } } int main (int argc, char * argv[]) { int errn; int o; struct opt_parsed * option; unsigned int iter; option = 0; iter = 10000; while (1) { o = opt_standard (lim_use_must_malloc, &option, opts, &argc, argv, program_name, usage, version_string, 0, opt_help_msg, opt_none, opt_version); if (o == opt_none) break; switch (o) { default: safe_printfmt (2, "unhandled option `%s'\n", option->opt_string); panic ("internal error parsing arguments"); usage_error: opt_usage (2, argv[0], program_name, usage, 1); panic_exit (); bogus_arg: safe_printfmt (2, "ill-formed argument for `%s' (`%s')\n", option->opt_string, option->arg_string); goto usage_error; case opt_iterations: if (cvt_decimal_to_uint (&errn, &iter, option->arg_string, str_length (option->arg_string))) goto bogus_arg; break; case opt_reseed: { unsigned long t; t = time(0); printfmt (&errn, 1, "RNG seed == %lu\n", t); srandom (t); } break; case opt_seed: { unsigned long t; if (cvt_decimal_to_ulong (&errn, &t, option->arg_string, str_length (option->arg_string))) goto bogus_arg; printfmt (&errn, 1, "RNG seed == %lu\n", t); srandom (t); } } } malloc_stress_test (iter); safe_printfmt (1, "%d iterations completed\n", iter); exit (0); } tla-1.3.5+dfsg/src/hackerlab/tests/mem-tests/PLUGIN/0000755000175000017500000000000010457621774020533 5ustar userusertla-1.3.5+dfsg/src/hackerlab/tests/mem-tests/PLUGIN/REQ0000644000175000017500000000003110457621774021077 0ustar userusermachine-tests mem-tests tla-1.3.5+dfsg/src/hackerlab/tests/mem-tests/unit-alloc-limits.sh0000644000175000017500000000035410457621774023441 0ustar useruser#!/bin/sh # tag: Tom Lord Tue Dec 4 14:54:29 2001 (mem-tests/unit-alloc-limits.sh) # set -e arg0="$0" srcdir=`dirname "$arg0"` echo ================ unit-alloc-limits tests ================ ./unit-alloc-limits echo ...passed tla-1.3.5+dfsg/src/hackerlab/tests/rx-tests/0000755000175000017500000000000010457621774017410 5ustar userusertla-1.3.5+dfsg/src/hackerlab/tests/rx-tests/unit-dfa-utf.sh0000755000175000017500000000040410457621774022250 0ustar useruser#!/bin/sh # tag: Tom Lord Tue Dec 4 14:54:35 2001 (rx-tests/unit-dfa-utf.sh) # set -e arg0="$0" srcdir=`dirname "$arg0"` echo "================ unit-dfa-utf: dfa tests for UTF-16 and UTF-8 using one NFA ================" ./unit-dfa-utf echo "...passed" tla-1.3.5+dfsg/src/hackerlab/tests/rx-tests/unit-dfa-iso8859-1.sh0000755000175000017500000000043410457621774022743 0ustar useruser#!/bin/sh # tag: Tom Lord Tue Dec 4 14:54:36 2001 (rx-tests/unit-dfa-iso8859-1.sh) # set -e arg0="$0" srcdir=`dirname "$arg0"` echo "================ unit-dfa-iso8859-1: dfa tests for ascii8 strings of unicode characters ================" ./unit-dfa-iso8859-1 echo "...passed" tla-1.3.5+dfsg/src/hackerlab/tests/rx-tests/unit-dfa-iso8859-1.c0000644000175000017500000001756010457621774022560 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:41:20 2001 (unit-dfa-iso8859-1.c) */ /* unit-dfa-iso8859-1.c - * **************************************************************** * Copyright (C) 2000 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/bugs/panic.h" #include "hackerlab/rx/tree.h" #include "hackerlab/rx/nfa.h" #include "hackerlab/rx/dfa-iso8859-1.h" #include "hackerlab/cmd/main.h" static t_uchar * program_name = "unit-dfa-iso8859_1"; static t_uchar * usage = "[options]"; static t_uchar * version_string = "1.0"; #define OPTS(OP, OP2) \ OP (opt_help_msg, "h", "help", 0, \ "Display a help message and exit.") \ OP (opt_version, "V", "version", 0, \ "Display a release identifier string") \ OP2 (opt_version, 0, 0, 0, "and exit.") enum options { OPTS (OPT_ENUM, OPT_IGN) }; struct opt_desc opts[] = { OPTS (OPT_DESC, OPT_DESC) {-1, 0, 0, 0, 0} }; int main (int argc, char * argv[]) { int o; struct opt_parsed * option; option = 0; while (1) { o = opt_standard (lim_use_must_malloc, &option, opts, &argc, argv, program_name, usage, version_string, 0, opt_help_msg, opt_none, opt_version); if (o == opt_none) break; switch (o) { default: safe_printfmt (2, "unhandled option `%s'\n", option->opt_string); panic ("internal error parsing arguments"); #if 0 usage_error: opt_usage (2, argv[0], program_name, usage, 1); panic_exit (); bogus_arg: safe_printfmt (2, "ill-formed argument for `%s' (`%s')\n", option->opt_string, option->arg_string); goto usage_error; #endif } } { int adv; int label; int adv_to_final; size_t amt; t_uchar string[100]; size_t pos; bits a; bits b; bits big0; bits big1; bits big2; bits c; struct rx_exp_node * a_node; struct rx_exp_node * b_node; struct rx_exp_node * b_star_node; struct rx_exp_node * big0_node; struct rx_exp_node * big1_node; struct rx_exp_node * big2_node; struct rx_exp_node * big01_node; struct rx_exp_node * bigs_node; struct rx_exp_node * bigs_star_node; struct rx_exp_node * c_node; struct rx_exp_node * a_and_b_star_node; struct rx_exp_node * a_and_b_star_and_bigs_star_node; struct rx_exp_node * a_and_b_star_and_bigs_star_and_c_node; struct rx_nfa * nfa; struct rx_nfa_state * start; struct rx_nfa_state * end; struct rx_dfa * dfa; a = bits_alloc (rx_nfa_cache_limits (), uni_bits_tree_rule); b = bits_alloc (rx_nfa_cache_limits (), uni_bits_tree_rule); big0 = bits_alloc (rx_nfa_cache_limits (), uni_bits_tree_rule); big1 = bits_alloc (rx_nfa_cache_limits (), uni_bits_tree_rule); big2 = bits_alloc (rx_nfa_cache_limits (), uni_bits_tree_rule); c = bits_alloc (rx_nfa_cache_limits (), uni_bits_tree_rule); bits_adjoin (a, 'a'); bits_adjoin (b, 'b'); bits_adjoin (big0, 0x8a); bits_adjoin (big1, 'x'); bits_adjoin (big2, 0xf5); bits_adjoin (c, 'c'); a_node = rx_mk_r_cset_take (r_cset, 1 << 21, a); b_node = rx_mk_r_cset_take (r_cset, 1 << 21, b); big0_node = rx_mk_r_cset_take (r_cset, 1 << 21, big0); big1_node = rx_mk_r_cset_take (r_cset, 1 << 21, big1); big2_node = rx_mk_r_cset_take (r_cset, 1 << 21, big2); c_node = rx_mk_r_cset_take (r_cset, 1 << 21, c); b_star_node = rx_mk_r_monop (r_star, b_node); big01_node = rx_mk_r_binop (r_concat, big0_node, big1_node); bigs_node = rx_mk_r_binop (r_concat, big01_node, big2_node); bigs_star_node = rx_mk_r_monop (r_star, bigs_node); a_and_b_star_node = rx_mk_r_binop (r_concat, a_node, b_star_node); a_and_b_star_and_bigs_star_node = rx_mk_r_binop (r_concat, a_and_b_star_node, bigs_star_node); a_and_b_star_and_bigs_star_and_c_node = rx_mk_r_binop (r_concat, a_and_b_star_and_bigs_star_node, c_node); nfa = rx_nfa_xalloc (1 << 21); start = end = 0; rx_build_nfa (nfa, a_and_b_star_and_bigs_star_and_c_node, &start, &end); rx_set_start_state (nfa, start); rx_set_state_label (nfa, end, 69); dfa = rx_dfa_alloc (lim_use_must_malloc); rx_init_dfa_from_nfa (dfa, nfa); pos = 0; string[pos++] = 'a'; string[pos++] = 'b'; string[pos++] = 'x'; string[pos++] = 'b'; string[pos++] = 'b'; string[pos++] = 'c'; rx_dfa_goto_start_superstate (dfa, 1); adv = rx_dfa_iso8859_1_fits (&label, dfa, string, pos); if (adv < 0) panic ("out of memory"); if (label) panic ("bogus string fits"); pos = 0; string[pos++] = 'a'; string[pos++] = 'b'; string[pos++] = 'b'; string[pos++] = 'b'; string[pos++] = 'b'; string[pos++] = 'c'; rx_dfa_goto_start_superstate (dfa, 1); adv = rx_dfa_iso8859_1_fits (&label, dfa, string, pos); if (adv < 0) panic ("out of memory"); if (!label) panic ("good string fails"); pos = 0; string[pos++] = 'a'; string[pos++] = 'b'; string[pos++] = 'x'; string[pos++] = 'x'; string[pos++] = 'b'; string[pos++] = 'b'; string[pos++] = 'c'; rx_dfa_goto_start_superstate (dfa, 1); adv = rx_dfa_iso8859_1_fits (&label, dfa, string, pos); if (adv < 0) panic ("out of memory"); if (label) panic ("bogus string fits"); pos = 0; string[pos++] = 'a'; string[pos++] = 'b'; string[pos++] = 'b'; string[pos++] = 'b'; string[pos++] = 0x8a; string[pos++] = 'x'; string[pos++] = 0xf5; string[pos++] = 'c'; rx_dfa_goto_start_superstate (dfa, 1); adv = rx_dfa_iso8859_1_fits (&label, dfa, string, pos); if (adv < 0) panic ("out of memory"); if (!label) panic ("good string fails"); rx_dfa_goto_start_superstate (dfa, 1); adv_to_final = rx_dfa_iso8859_1_advance_to_final (&amt, dfa, string, pos); if (adv_to_final < 0) panic ("out of memory"); if (!adv_to_final || !dfa->final_tag || (pos != amt)) panic ("good string doesn't fit (2)"); if (dfa->final_tag != 69) panic ("bogus final tag"); if (dfa->final_tag != 69) panic ("bogus final tag"); { size_t threshold; size_t failure_pt; size_t in_use; size_t high_water_mark; int dfa_hits; int dfa_misses; int dfa_total_hits; int dfa_total_misses; rx_dfa_cache_statistics (&threshold, &failure_pt, &in_use, &high_water_mark, &dfa_hits, &dfa_misses, &dfa_total_hits, &dfa_total_misses); safe_printfmt (1, "dfa cache stats:\n threshold %lu; failure_pt %lu\n in_use %lu; high_water_mark %lu\n hits %d; misses %d; total_hits %d; total_misses %d\n", (unsigned long)threshold, (unsigned long)failure_pt, (unsigned long)in_use, (unsigned long)high_water_mark, dfa_hits, dfa_misses, dfa_total_hits, dfa_total_misses); } { size_t threshold; size_t failure_pt; size_t in_use; size_t high_water_mark; int nfa_hits; int nfa_misses; int nfa_saves; rx_nfa_cache_statistics (&threshold, &failure_pt, &in_use, &high_water_mark, &nfa_hits, &nfa_misses, &nfa_saves); safe_printfmt (1, "nfa cache stats:\n threshold %lu; failure_pt %lu\n in_use %lu; high_water_mark %lu\n hits %d; misses %d; saves %d\n", (unsigned long)threshold, (unsigned long)failure_pt, (unsigned long)in_use, (unsigned long)high_water_mark, nfa_hits, nfa_misses, nfa_saves); } rx_clear_dfa_state (dfa); rx_free_nfa (nfa); rx_free_exp (a_and_b_star_and_bigs_star_and_c_node); { size_t dfa_bytes; size_t nfa_bytes; dfa_bytes = rx_flush_dfa_cache (); safe_printfmt (1, "memory retained by dfa cache: %lu bytes\n", (unsigned long)dfa_bytes); nfa_bytes = rx_flush_nfa_cache (); safe_printfmt (1, "memory retained by nfa cache: %lu bytes\n", (unsigned long)nfa_bytes); if (dfa_bytes || nfa_bytes) exit (1); } } return 0; } tla-1.3.5+dfsg/src/hackerlab/tests/rx-tests/unit-dfa-utf8.sh0000755000175000017500000000035610457621774022346 0ustar useruser#!/bin/sh # tag: Tom Lord Tue Dec 4 14:54:35 2001 (rx-tests/unit-dfa-utf8.sh) # set -e arg0="$0" srcdir=`dirname "$arg0"` echo "================ unit-dfa-utf8: dfa tests for UTF-8 ================" ./unit-dfa-utf8 echo "...passed" tla-1.3.5+dfsg/src/hackerlab/tests/rx-tests/unit-dfa-utf8.c0000644000175000017500000002166010457621774022154 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:41:17 2001 (unit-dfa-utf8.c) */ /* unit-dfa-utf8.c - * **************************************************************** * Copyright (C) 2000 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/bugs/panic.h" #include "hackerlab/rx/tree.h" #include "hackerlab/rx/nfa.h" #include "hackerlab/rx/dfa-utf8.h" #include "hackerlab/cmd/main.h" static t_uchar * program_name = "unit-dfa-utf8"; static t_uchar * usage = "[options]"; static t_uchar * version_string = "1.0"; #define OPTS(OP, OP2) \ OP (opt_help_msg, "h", "help", 0, \ "Display a help message and exit.") \ OP (opt_version, "V", "version", 0, \ "Display a release identifier string") \ OP2 (opt_version, 0, 0, 0, "and exit.") enum options { OPTS (OPT_ENUM, OPT_IGN) }; struct opt_desc opts[] = { OPTS (OPT_DESC, OPT_DESC) {-1, 0, 0, 0, 0} }; int main (int argc, char * argv[]) { int o; struct opt_parsed * option; option = 0; while (1) { o = opt_standard (lim_use_must_malloc, &option, opts, &argc, argv, program_name, usage, version_string, 0, opt_help_msg, opt_none, opt_version); if (o == opt_none) break; switch (o) { default: safe_printfmt (2, "unhandled option `%s'\n", option->opt_string); panic ("internal error parsing arguments"); #if 0 usage_error: opt_usage (2, argv[0], program_name, usage, 1); panic_exit (); bogus_arg: safe_printfmt (2, "ill-formed argument for `%s' (`%s')\n", option->opt_string, option->arg_string); goto usage_error; #endif } } { int fits; int label; int adv_to_final; size_t amt; t_uchar string[100]; size_t pos; bits a; bits b; bits big0; bits big1; bits big2; bits c; struct rx_exp_node * a_node; struct rx_exp_node * b_node; struct rx_exp_node * b_star_node; struct rx_exp_node * big0_node; struct rx_exp_node * big1_node; struct rx_exp_node * big2_node; struct rx_exp_node * big01_node; struct rx_exp_node * bigs_node; struct rx_exp_node * bigs_star_node; struct rx_exp_node * c_node; struct rx_exp_node * a_and_b_star_node; struct rx_exp_node * a_and_b_star_and_bigs_star_node; struct rx_exp_node * a_and_b_star_and_bigs_star_and_c_node; struct rx_nfa * nfa; struct rx_nfa_state * start; struct rx_nfa_state * end; struct rx_dfa * dfa; a = bits_alloc (rx_nfa_cache_limits (), uni_bits_tree_rule); b = bits_alloc (rx_nfa_cache_limits (), uni_bits_tree_rule); big0 = bits_alloc (rx_nfa_cache_limits (), uni_bits_tree_rule); big1 = bits_alloc (rx_nfa_cache_limits (), uni_bits_tree_rule); big2 = bits_alloc (rx_nfa_cache_limits (), uni_bits_tree_rule); c = bits_alloc (rx_nfa_cache_limits (), uni_bits_tree_rule); bits_adjoin (a, 'a'); bits_adjoin (b, 'b'); bits_adjoin (big0, 0xfe); bits_adjoin (big1, 0x2200); bits_adjoin (big2, 0x10023); bits_adjoin (c, 'c'); a_node = rx_mk_r_cset_take (r_cset, 1 << 21, a); b_node = rx_mk_r_cset_take (r_cset, 1 << 21, b); big0_node = rx_mk_r_cset_take (r_cset, 1 << 21, big0); big1_node = rx_mk_r_cset_take (r_cset, 1 << 21, big1); big2_node = rx_mk_r_cset_take (r_cset, 1 << 21, big2); c_node = rx_mk_r_cset_take (r_cset, 1 << 21, c); b_star_node = rx_mk_r_monop (r_star, b_node); big01_node = rx_mk_r_binop (r_concat, big0_node, big1_node); bigs_node = rx_mk_r_binop (r_concat, big01_node, big2_node); bigs_star_node = rx_mk_r_monop (r_star, bigs_node); a_and_b_star_node = rx_mk_r_binop (r_concat, a_node, b_star_node); a_and_b_star_and_bigs_star_node = rx_mk_r_binop (r_concat, a_and_b_star_node, bigs_star_node); a_and_b_star_and_bigs_star_and_c_node = rx_mk_r_binop (r_concat, a_and_b_star_and_bigs_star_node, c_node); nfa = rx_nfa_xalloc (1 << 21); start = end = 0; rx_build_nfa (nfa, a_and_b_star_and_bigs_star_and_c_node, &start, &end); rx_set_start_state (nfa, start); rx_set_state_label (nfa, end, 69); dfa = rx_dfa_alloc (lim_use_must_malloc); rx_init_dfa_from_nfa (dfa, nfa); pos = 0; uni_utf8_iput (string, &pos, sizeof (string), 'a'); uni_utf8_iput (string, &pos, sizeof (string), 'b'); uni_utf8_iput (string, &pos, sizeof (string), 'x'); uni_utf8_iput (string, &pos, sizeof (string), 'b'); uni_utf8_iput (string, &pos, sizeof (string), 'b'); uni_utf8_iput (string, &pos, sizeof (string), 'c'); rx_dfa_goto_start_superstate (dfa, 1); fits = rx_dfa_utf8_fits (&label, dfa, string, pos); if (fits < 0) panic ("out of memory"); if (label) panic ("bogus string fits"); pos = 0; uni_utf8_iput (string, &pos, sizeof (string), 'a'); uni_utf8_iput (string, &pos, sizeof (string), 'b'); uni_utf8_iput (string, &pos, sizeof (string), 'b'); uni_utf8_iput (string, &pos, sizeof (string), 'b'); uni_utf8_iput (string, &pos, sizeof (string), 'b'); uni_utf8_iput (string, &pos, sizeof (string), 'c'); rx_dfa_goto_start_superstate (dfa, 1); fits = rx_dfa_utf8_fits (&label, dfa, string, pos); if (fits < 0) panic ("out of memory"); if (!label) panic ("good string fails"); pos = 0; uni_utf8_iput (string, &pos, sizeof (string), 'a'); uni_utf8_iput (string, &pos, sizeof (string), 'b'); uni_utf8_iput (string, &pos, sizeof (string), 0xfe); uni_utf8_iput (string, &pos, sizeof (string), 0x2200); uni_utf8_iput (string, &pos, sizeof (string), 0xfe); uni_utf8_iput (string, &pos, sizeof (string), 0x10023); uni_utf8_iput (string, &pos, sizeof (string), 0x2200); uni_utf8_iput (string, &pos, sizeof (string), 0x10023); uni_utf8_iput (string, &pos, sizeof (string), 'b'); uni_utf8_iput (string, &pos, sizeof (string), 'b'); uni_utf8_iput (string, &pos, sizeof (string), 'c'); rx_dfa_goto_start_superstate (dfa, 1); fits = rx_dfa_utf8_fits (&label, dfa, string, pos); if (fits < 0) panic ("out of memory"); if (label) panic ("bogus string fits"); pos = 0; uni_utf8_iput (string, &pos, sizeof (string), 'a'); uni_utf8_iput (string, &pos, sizeof (string), 'b'); uni_utf8_iput (string, &pos, sizeof (string), 'b'); uni_utf8_iput (string, &pos, sizeof (string), 'b'); uni_utf8_iput (string, &pos, sizeof (string), 0xfe); uni_utf8_iput (string, &pos, sizeof (string), 0x2200); uni_utf8_iput (string, &pos, sizeof (string), 0x10023); uni_utf8_iput (string, &pos, sizeof (string), 0xfe); uni_utf8_iput (string, &pos, sizeof (string), 0x2200); uni_utf8_iput (string, &pos, sizeof (string), 0x10023); uni_utf8_iput (string, &pos, sizeof (string), 'c'); rx_dfa_goto_start_superstate (dfa, 1); fits = rx_dfa_utf8_fits (&label, dfa, string, pos); if (fits < 0) panic ("out of memory"); if (!label) panic ("good string fails"); rx_dfa_goto_start_superstate (dfa, 1); adv_to_final = rx_dfa_utf8_advance_to_final (&amt, dfa, string, pos); if (adv_to_final < 0) panic ("out of memory"); if (!adv_to_final || !dfa->final_tag || (pos != amt)) panic ("good string doesn't fit (2)"); if (dfa->final_tag != 69) panic ("bogus final tag"); { { size_t threshold; size_t failure_pt; size_t in_use; size_t high_water_mark; int dfa_hits; int dfa_misses; int dfa_total_hits; int dfa_total_misses; rx_dfa_cache_statistics (&threshold, &failure_pt, &in_use, &high_water_mark, &dfa_hits, &dfa_misses, &dfa_total_hits, &dfa_total_misses); safe_printfmt (1, "dfa cache stats:\n threshold %lu; failure_pt %lu\n in_use %lu; high_water_mark %lu\n hits %d; misses %d; total_hits %d; total_misses %d\n", (unsigned long)threshold, (unsigned long)failure_pt, (unsigned long)in_use, (unsigned long)high_water_mark, dfa_hits, dfa_misses, dfa_total_hits, dfa_total_misses); } { size_t threshold; size_t failure_pt; size_t in_use; size_t high_water_mark; int nfa_hits; int nfa_misses; int nfa_saves; rx_nfa_cache_statistics (&threshold, &failure_pt, &in_use, &high_water_mark, &nfa_hits, &nfa_misses, &nfa_saves); safe_printfmt (1, "nfa cache stats:\n threshold %lu; failure_pt %lu\n in_use %lu; high_water_mark %lu\n hits %d; misses %d; saves %d\n", (unsigned long)threshold, (unsigned long)failure_pt, (unsigned long)in_use, (unsigned long)high_water_mark, nfa_hits, nfa_misses, nfa_saves); } rx_clear_dfa_state (dfa); rx_free_nfa (nfa); rx_free_exp (a_and_b_star_and_bigs_star_and_c_node); { size_t dfa_bytes; size_t nfa_bytes; dfa_bytes = rx_flush_dfa_cache (); safe_printfmt (1, "memory retained by dfa cache: %lu bytes\n", (unsigned long)dfa_bytes); nfa_bytes = rx_flush_nfa_cache (); safe_printfmt (1, "memory retained by nfa cache: %lu bytes\n", (unsigned long)nfa_bytes); if (dfa_bytes || nfa_bytes) exit (1); } } } return 0; } tla-1.3.5+dfsg/src/hackerlab/tests/rx-tests/unit-dfa-utf16.sh0000755000175000017500000000036210457621774022422 0ustar useruser#!/bin/sh # tag: Tom Lord Tue Dec 4 14:54:35 2001 (rx-tests/unit-dfa-utf16.sh) # set -e arg0="$0" srcdir=`dirname "$arg0"` echo "================ unit-dfa-utf16: dfa tests for UTF-16 ================" ./unit-dfa-utf16 echo "...passed" tla-1.3.5+dfsg/src/hackerlab/tests/rx-tests/unit-dfa-utf-no-surrogates.sh0000755000175000017500000000051210457621774025056 0ustar useruser#!/bin/sh # tag: Tom Lord Tue Dec 4 14:54:35 2001 (rx-tests/unit-dfa-utf-no-surrogates.sh) # set -e arg0="$0" srcdir=`dirname "$arg0"` echo "================ unit-dfa-utf-no-surrogates: dfa tests for UTF-16 and UTF-8 using one NFA and no surrogate characters ================" ./unit-dfa-utf-no-surrogates echo "...passed" tla-1.3.5+dfsg/src/hackerlab/tests/rx-tests/unit-dfa-utf16.c0000644000175000017500000001553210457621774022234 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:41:18 2001 (unit-dfa-utf16.c) */ /* unit-dfa-utf16.c - * **************************************************************** * Copyright (C) 2000 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/bugs/panic.h" #include "hackerlab/rx/tree.h" #include "hackerlab/rx/nfa.h" #include "hackerlab/rx/dfa-utf16.h" #include "hackerlab/cmd/main.h" static t_uchar * program_name = "unit-dfa-utf16"; static t_uchar * usage = "[options]"; static t_uchar * version_string = "1.0"; #define OPTS(OP, OP2) \ OP (opt_help_msg, "h", "help", 0, \ "Display a help message and exit.") \ OP (opt_version, "V", "version", 0, \ "Display a release identifier string") \ OP2 (opt_version, 0, 0, 0, "and exit.") enum options { OPTS (OPT_ENUM, OPT_IGN) }; struct opt_desc opts[] = { OPTS (OPT_DESC, OPT_DESC) {-1, 0, 0, 0, 0} }; int main (int argc, char * argv[]) { int o; struct opt_parsed * option; option = 0; while (1) { o = opt_standard (lim_use_must_malloc, &option, opts, &argc, argv, program_name, usage, version_string, 0, opt_help_msg, opt_none, opt_version); if (o == opt_none) break; switch (o) { default: safe_printfmt (2, "unhandled option `%s'\n", option->opt_string); panic ("internal error parsing arguments"); #if 0 usage_error: opt_usage (2, argv[0], program_name, usage, 1); panic_exit (); bogus_arg: safe_printfmt (2, "ill-formed argument for `%s' (`%s')\n", option->opt_string, option->arg_string); goto usage_error; #endif } } { int fits; int label; int adv_to_final; size_t amt; t_unichar string[9]; int x; bits a; bits b; bits big; bits c; struct rx_exp_node * a_node; struct rx_exp_node * b_node; struct rx_exp_node * b_star_node; struct rx_exp_node * big_node; struct rx_exp_node * big_star_node; struct rx_exp_node * c_node; struct rx_exp_node * a_and_b_star_node; struct rx_exp_node * a_and_b_star_and_big_star_node; struct rx_exp_node * a_and_b_star_and_big_star_and_c_node; struct rx_nfa * nfa; struct rx_nfa_state * start; struct rx_nfa_state * end; struct rx_dfa * dfa; a = bits_alloc (rx_nfa_cache_limits (), uni_bits_tree_rule); b = bits_alloc (rx_nfa_cache_limits (), uni_bits_tree_rule); big = bits_alloc (rx_nfa_cache_limits (), uni_bits_tree_rule); c = bits_alloc (rx_nfa_cache_limits (), uni_bits_tree_rule); bits_adjoin (a, 'a'); bits_adjoin (b, 'b'); bits_adjoin (big, 0x10023); bits_adjoin (c, 'c'); a_node = rx_mk_r_cset_take (r_cset, 1 << 21, a); b_node = rx_mk_r_cset_take (r_cset, 1 << 21, b); big_node = rx_mk_r_cset_take (r_cset, 1 << 21, big); c_node = rx_mk_r_cset_take (r_cset, 1 << 21, c); b_star_node = rx_mk_r_monop (r_star, b_node); big_star_node = rx_mk_r_monop (r_star, big_node); a_and_b_star_node = rx_mk_r_binop (r_concat, a_node, b_star_node); a_and_b_star_and_big_star_node = rx_mk_r_binop (r_concat, a_and_b_star_node, big_star_node); a_and_b_star_and_big_star_and_c_node = rx_mk_r_binop (r_concat, a_and_b_star_and_big_star_node, c_node); nfa = rx_nfa_xalloc (1 << 21); start = end = 0; rx_build_nfa (nfa, a_and_b_star_and_big_star_and_c_node, &start, &end); rx_set_start_state (nfa, start); rx_set_state_label (nfa, end, 69); dfa = rx_dfa_alloc (lim_use_must_malloc); rx_init_dfa_from_nfa (dfa, nfa); string[0] = 'a'; for (x = 0; x < 4; ++x) string[x] = 'b'; string[4] = 'c'; rx_dfa_goto_start_superstate (dfa, 2); fits = rx_dfa_utf16_fits (&label, dfa, string, 5); if (fits < 0) panic ("out of memory"); if (label) panic ("bogus string fits"); string[0] = 'a'; for (x = 1; x < 4; ++x) string[x] = 'b'; string[4] = 'c'; rx_dfa_goto_start_superstate (dfa, 2); fits = rx_dfa_utf16_fits (&label, dfa, string, 5); if (fits < 0) panic ("out of memory"); if (!label) panic ("good string doesn't fit"); string[0] = 'a'; string[1] = 'b'; string[2] = 0xdb00; string[3] = 0xdc23; string[4] = 'c'; rx_dfa_goto_start_superstate (dfa, 2); fits = rx_dfa_utf16_fits (&label, dfa, string, 5); if (fits < 0) panic ("out of memory"); if (label) panic ("bogus string fits"); string[0] = 'a'; string[1] = 'b'; string[2] = 0xd800; string[3] = 0xdc23; string[4] = 0xd800; string[5] = 0xdc23; string[6] = 0xd800; string[7] = 0xdc23; string[8] = 'c'; rx_dfa_goto_start_superstate (dfa, 2); fits = rx_dfa_utf16_fits (&label, dfa, string, 9); if (fits < 0) panic ("out of memory"); if (!label) panic ("good string doesn't fit"); rx_dfa_goto_start_superstate (dfa, 2); adv_to_final = rx_dfa_utf16_advance_to_final (&amt, dfa, string, 9); if (adv_to_final < 0) panic ("out of memory"); if (!adv_to_final || (9 != amt)) panic ("good string doesn't fit (2)"); if (dfa->final_tag != 69) panic ("bogus final tag"); { { size_t threshold; size_t failure_pt; size_t in_use; size_t high_water_mark; int dfa_hits; int dfa_misses; int dfa_total_hits; int dfa_total_misses; rx_dfa_cache_statistics (&threshold, &failure_pt, &in_use, &high_water_mark, &dfa_hits, &dfa_misses, &dfa_total_hits, &dfa_total_misses); safe_printfmt (1, "dfa cache stats:\n threshold %lu; failure_pt %lu\n in_use %lu; high_water_mark %lu\n hits %d; misses %d; total_hits %d; total_misses %d\n", (unsigned long)threshold, (unsigned long)failure_pt, (unsigned long)in_use, (unsigned long)high_water_mark, dfa_hits, dfa_misses, dfa_total_hits, dfa_total_misses); } { size_t threshold; size_t failure_pt; size_t in_use; size_t high_water_mark; int nfa_hits; int nfa_misses; int nfa_saves; rx_nfa_cache_statistics (&threshold, &failure_pt, &in_use, &high_water_mark, &nfa_hits, &nfa_misses, &nfa_saves); safe_printfmt (1, "nfa cache stats:\n threshold %lu; failure_pt %lu\n in_use %lu; high_water_mark %lu\n hits %d; misses %d; saves %d\n", (unsigned long)threshold, (unsigned long)failure_pt, (unsigned long)in_use, (unsigned long)high_water_mark, nfa_hits, nfa_misses, nfa_saves); } rx_clear_dfa_state (dfa); rx_free_nfa (nfa); rx_free_exp (a_and_b_star_and_big_star_and_c_node); { size_t dfa_bytes; size_t nfa_bytes; dfa_bytes = rx_flush_dfa_cache (); safe_printfmt (1, "memory retained by dfa cache: %lu bytes\n", (unsigned long)dfa_bytes); nfa_bytes = rx_flush_nfa_cache (); safe_printfmt (1, "memory retained by nfa cache: %lu bytes\n", (unsigned long)nfa_bytes); if (dfa_bytes || nfa_bytes) exit (1); } } } return 0; } tla-1.3.5+dfsg/src/hackerlab/tests/rx-tests/Makefile.in0000644000175000017500000000067110457621774021461 0ustar useruser# tag: Tom Lord Tue Dec 4 14:52:15 2001 (rx-tests/Makefile.in) # tested-headers := tree.h \ super.h \ nfa.h \ nfa-cache.h \ escape.h \ dfa.h \ dfa-utf8.h \ dfa-utf16.h \ dfa-cache.h \ dfa-iso8859-1.h \ dbug.h \ bits-tree-rules.h test-headers := $(addprefix hackerlab/rx/, $(tested-headers)) libs := $(objroot)/hackerlab/libhackerlab/libhackerlab.a -lm include $(makefiles)/unit-tests.mk tla-1.3.5+dfsg/src/hackerlab/tests/rx-tests/DESC0000644000175000017500000000130710457621774020052 0ustar useruser# tag: Tom Lord Tue Dec 4 15:05:29 2001 (rx-tests/DESC) # We test the installed header files to make sure they compile. unit-dfa-ascii8 unit-dfa-utf8 unit-dfa-utf16 Build a few expression trees by hand and use them for DFA string comparisons, using a single string encoding. These test low level functionality in Rx. unit-dfa-utf-no-surrogates uni-dfa-utf Build a few expression trees by hand and use them for DFA string comparisons. In these tests, a single DFA is used with both utf8 and utf16 encodings. These tests are very basic and don't exercise Rx heavily. They are mostly useful during development to quickly debug some kinds of regressions. The tests in ../rx-posix test Rx heavily. tla-1.3.5+dfsg/src/hackerlab/tests/rx-tests/PLUGIN/0000755000175000017500000000000010457621774020406 5ustar userusertla-1.3.5+dfsg/src/hackerlab/tests/rx-tests/PLUGIN/REQ0000644000175000017500000000002710457621774020757 0ustar useruserbitset-tests rx-tests tla-1.3.5+dfsg/src/hackerlab/tests/rx-tests/unit-dfa-utf-no-surrogates.c0000644000175000017500000003141710457621774024673 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:41:19 2001 (unit-dfa-utf-no-surrogates.c) */ /* unit-dfa-utf-no-surrogates.c - * **************************************************************** * Copyright (C) 2000 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/bugs/panic.h" #include "hackerlab/rx/tree.h" #include "hackerlab/rx/nfa.h" #include "hackerlab/rx/dfa-iso8859-1.h" #include "hackerlab/rx/dfa-utf8.h" #include "hackerlab/rx/dfa-utf16.h" #include "hackerlab/cmd/main.h" static t_uchar * program_name = "unit-dfa-utf-no-surrogates"; static t_uchar * usage = "[options]"; static t_uchar * version_string = "1.0"; #define OPTS(OP, OP2) \ OP (opt_help_msg, "h", "help", 0, \ "Display a help message and exit.") \ OP (opt_version, "V", "version", 0, \ "Display a release identifier string") \ OP2 (opt_version, 0, 0, 0, "and exit.") enum options { OPTS (OPT_ENUM, OPT_IGN) }; struct opt_desc opts[] = { OPTS (OPT_DESC, OPT_DESC) {-1, 0, 0, 0, 0} }; int main (int argc, char * argv[]) { int o; struct opt_parsed * option; option = 0; while (1) { o = opt_standard (lim_use_must_malloc, &option, opts, &argc, argv, program_name, usage, version_string, 0, opt_help_msg, opt_none, opt_version); if (o == opt_none) break; switch (o) { default: safe_printfmt (2, "unhandled option `%s'\n", option->opt_string); panic ("internal error parsing arguments"); #if 0 usage_error: opt_usage (2, argv[0], program_name, usage, 1); panic_exit (); bogus_arg: safe_printfmt (2, "ill-formed argument for `%s' (`%s')\n", option->opt_string, option->arg_string); goto usage_error; #endif } } { int fits; int label; int adv_to_final; size_t amt; t_uchar string[100]; size_t pos; bits a; bits b; bits big0; bits big1; bits big2; bits c; struct rx_exp_node * a_node; struct rx_exp_node * b_node; struct rx_exp_node * b_star_node; struct rx_exp_node * big0_node; struct rx_exp_node * big1_node; struct rx_exp_node * big2_node; struct rx_exp_node * big01_node; struct rx_exp_node * bigs_node; struct rx_exp_node * bigs_star_node; struct rx_exp_node * c_node; struct rx_exp_node * a_and_b_star_node; struct rx_exp_node * a_and_b_star_and_bigs_star_node; struct rx_exp_node * a_and_b_star_and_bigs_star_and_c_node; struct rx_nfa * nfa; struct rx_nfa_state * start; struct rx_nfa_state * end; struct rx_dfa * dfa; a = bits_alloc (rx_nfa_cache_limits (), uni_bits_tree_rule); b = bits_alloc (rx_nfa_cache_limits (), uni_bits_tree_rule); big0 = bits_alloc (rx_nfa_cache_limits (), uni_bits_tree_rule); big1 = bits_alloc (rx_nfa_cache_limits (), uni_bits_tree_rule); big2 = bits_alloc (rx_nfa_cache_limits (), uni_bits_tree_rule); c = bits_alloc (rx_nfa_cache_limits (), uni_bits_tree_rule); bits_adjoin (a, 'a'); bits_adjoin (b, 'b'); bits_adjoin (big0, 'w'); bits_adjoin (big1, 'x'); bits_adjoin (big2, 'y'); bits_adjoin (c, 'c'); a_node = rx_mk_r_cset_take (r_cset, 1 << 21, a); b_node = rx_mk_r_cset_take (r_cset, 1 << 21, b); big0_node = rx_mk_r_cset_take (r_cset, 1 << 21, big0); big1_node = rx_mk_r_cset_take (r_cset, 1 << 21, big1); big2_node = rx_mk_r_cset_take (r_cset, 1 << 21, big2); c_node = rx_mk_r_cset_take (r_cset, 1 << 21, c); b_star_node = rx_mk_r_monop (r_star, b_node); big01_node = rx_mk_r_binop (r_concat, big0_node, big1_node); bigs_node = rx_mk_r_binop (r_concat, big01_node, big2_node); bigs_star_node = rx_mk_r_monop (r_star, bigs_node); a_and_b_star_node = rx_mk_r_binop (r_concat, a_node, b_star_node); a_and_b_star_and_bigs_star_node = rx_mk_r_binop (r_concat, a_and_b_star_node, bigs_star_node); a_and_b_star_and_bigs_star_and_c_node = rx_mk_r_binop (r_concat, a_and_b_star_and_bigs_star_node, c_node); nfa = rx_nfa_xalloc (1 << 21); start = end = 0; rx_build_nfa (nfa, a_and_b_star_and_bigs_star_and_c_node, &start, &end); rx_set_start_state (nfa, start); rx_set_state_label (nfa, end, 69); dfa = rx_dfa_alloc (lim_use_must_malloc); rx_init_dfa_from_nfa (dfa, nfa); pos = 0; uni_utf16_iput (string, &pos, sizeof (string), 'a'); uni_utf16_iput (string, &pos, sizeof (string), 'b'); uni_utf16_iput (string, &pos, sizeof (string), 'b'); uni_utf16_iput (string, &pos, sizeof (string), 'b'); uni_utf16_iput (string, &pos, sizeof (string), 'b'); uni_utf16_iput (string, &pos, sizeof (string), 'c'); rx_dfa_goto_start_superstate (dfa, 2); fits = rx_dfa_utf16_fits (&label, dfa, (t_unichar *)string, pos / 2); if (fits < 0) panic ("out of memory"); if (!label) panic ("good string fails"); pos = 0; uni_utf8_iput (string, &pos, sizeof (string), 'a'); uni_utf8_iput (string, &pos, sizeof (string), 'b'); uni_utf8_iput (string, &pos, sizeof (string), 'x'); uni_utf8_iput (string, &pos, sizeof (string), 'b'); uni_utf8_iput (string, &pos, sizeof (string), 'b'); uni_utf8_iput (string, &pos, sizeof (string), 'c'); rx_dfa_goto_start_superstate (dfa, 1); fits = rx_dfa_utf8_fits (&label, dfa, string, pos); if (fits < 0) panic ("out of memory"); if (label) panic ("bogus string fits"); pos = 0; uni_utf16_iput (string, &pos, sizeof (string), 'a'); uni_utf16_iput (string, &pos, sizeof (string), 'b'); uni_utf16_iput (string, &pos, sizeof (string), 'x'); uni_utf16_iput (string, &pos, sizeof (string), 'b'); uni_utf16_iput (string, &pos, sizeof (string), 'b'); uni_utf16_iput (string, &pos, sizeof (string), 'c'); rx_dfa_goto_start_superstate (dfa, 2); fits = rx_dfa_utf16_fits (&label, dfa, (t_unichar *)string, pos / 2); if (fits < 0) panic ("out of memory"); if (label) panic ("bogus string fits"); pos = 0; uni_utf8_iput (string, &pos, sizeof (string), 'a'); uni_utf8_iput (string, &pos, sizeof (string), 'b'); uni_utf8_iput (string, &pos, sizeof (string), 'b'); uni_utf8_iput (string, &pos, sizeof (string), 'b'); uni_utf8_iput (string, &pos, sizeof (string), 'b'); uni_utf8_iput (string, &pos, sizeof (string), 'c'); rx_dfa_goto_start_superstate (dfa, 1); fits = rx_dfa_utf8_fits (&label, dfa, string, pos); if (fits < 0) panic ("out of memory"); if (!label) panic ("good string fails"); pos = 0; uni_utf16_iput (string, &pos, sizeof (string), 'a'); uni_utf16_iput (string, &pos, sizeof (string), 'b'); uni_utf16_iput (string, &pos, sizeof (string), 'b'); uni_utf16_iput (string, &pos, sizeof (string), 'b'); uni_utf16_iput (string, &pos, sizeof (string), 'b'); uni_utf16_iput (string, &pos, sizeof (string), 'c'); rx_dfa_goto_start_superstate (dfa, 2); fits = rx_dfa_utf16_fits (&label, dfa, (t_unichar *)string, pos / 2); if (fits < 0) panic ("out of memory"); if (!label) panic ("good string fails"); pos = 0; uni_utf8_iput (string, &pos, sizeof (string), 'a'); uni_utf8_iput (string, &pos, sizeof (string), 'b'); uni_utf8_iput (string, &pos, sizeof (string), 'w'); uni_utf8_iput (string, &pos, sizeof (string), 'x'); uni_utf8_iput (string, &pos, sizeof (string), 'w'); uni_utf8_iput (string, &pos, sizeof (string), 'y'); uni_utf8_iput (string, &pos, sizeof (string), 'x'); uni_utf8_iput (string, &pos, sizeof (string), 'y'); uni_utf8_iput (string, &pos, sizeof (string), 'b'); uni_utf8_iput (string, &pos, sizeof (string), 'b'); uni_utf8_iput (string, &pos, sizeof (string), 'c'); rx_dfa_goto_start_superstate (dfa, 1); fits = rx_dfa_utf8_fits (&label, dfa, string, pos); if (fits < 0) panic ("out of memory"); if (label) panic ("bogus string fits"); pos = 0; uni_utf16_iput (string, &pos, sizeof (string), 'a'); uni_utf16_iput (string, &pos, sizeof (string), 'b'); uni_utf16_iput (string, &pos, sizeof (string), 'w'); uni_utf16_iput (string, &pos, sizeof (string), 'x'); uni_utf16_iput (string, &pos, sizeof (string), 'w'); uni_utf16_iput (string, &pos, sizeof (string), 'x'); uni_utf16_iput (string, &pos, sizeof (string), 'x'); uni_utf16_iput (string, &pos, sizeof (string), 'y'); uni_utf16_iput (string, &pos, sizeof (string), 'b'); uni_utf16_iput (string, &pos, sizeof (string), 'b'); uni_utf16_iput (string, &pos, sizeof (string), 'c'); rx_dfa_goto_start_superstate (dfa, 2); fits = rx_dfa_utf16_fits (&label, dfa, (t_unichar *)string, pos / 2); if (fits < 0) panic ("out of memory"); if (label) panic ("bogus string fits"); pos = 0; uni_utf8_iput (string, &pos, sizeof (string), 'a'); uni_utf8_iput (string, &pos, sizeof (string), 'b'); uni_utf8_iput (string, &pos, sizeof (string), 'b'); uni_utf8_iput (string, &pos, sizeof (string), 'b'); uni_utf8_iput (string, &pos, sizeof (string), 'w'); uni_utf8_iput (string, &pos, sizeof (string), 'x'); uni_utf8_iput (string, &pos, sizeof (string), 'y'); uni_utf8_iput (string, &pos, sizeof (string), 'w'); uni_utf8_iput (string, &pos, sizeof (string), 'x'); uni_utf8_iput (string, &pos, sizeof (string), 'y'); uni_utf8_iput (string, &pos, sizeof (string), 'c'); rx_dfa_goto_start_superstate (dfa, 1); fits = rx_dfa_utf8_fits (&label, dfa, string, pos); if (fits < 0) panic ("out of memory"); if (!label) panic ("good string fails"); rx_dfa_goto_start_superstate (dfa, 1); adv_to_final = rx_dfa_utf8_advance_to_final (&amt, dfa, string, pos); if (adv_to_final < 0) panic ("out of memory"); if (!adv_to_final || !dfa->final_tag || (pos != amt)) panic ("good string doesn't fit (2)"); if (dfa->final_tag != 69) panic ("bogus final tag"); pos = 0; uni_utf16_iput (string, &pos, sizeof (string), 'a'); uni_utf16_iput (string, &pos, sizeof (string), 'b'); uni_utf16_iput (string, &pos, sizeof (string), 'b'); uni_utf16_iput (string, &pos, sizeof (string), 'b'); uni_utf16_iput (string, &pos, sizeof (string), 'w'); uni_utf16_iput (string, &pos, sizeof (string), 'x'); uni_utf16_iput (string, &pos, sizeof (string), 'y'); uni_utf16_iput (string, &pos, sizeof (string), 'w'); uni_utf16_iput (string, &pos, sizeof (string), 'x'); uni_utf16_iput (string, &pos, sizeof (string), 'y'); uni_utf16_iput (string, &pos, sizeof (string), 'c'); rx_dfa_goto_start_superstate (dfa, 2); fits = rx_dfa_utf16_fits (&label, dfa, (t_unichar *)string, pos / 2); if (fits < 0) panic ("out of memory"); if (!label) panic ("good string fails"); rx_dfa_goto_start_superstate (dfa, 2); adv_to_final = rx_dfa_utf16_advance_to_final (&amt, dfa, (t_unichar *)string, pos / 2); if (adv_to_final < 0) panic ("out of memory"); if (!adv_to_final || ((pos / 2) != amt)) panic ("good string doesn't fit (2)"); if (dfa->final_tag != 69) panic ("bogus final tag"); { size_t threshold; size_t failure_pt; size_t in_use; size_t high_water_mark; int dfa_hits; int dfa_misses; int dfa_total_hits; int dfa_total_misses; rx_dfa_cache_statistics (&threshold, &failure_pt, &in_use, &high_water_mark, &dfa_hits, &dfa_misses, &dfa_total_hits, &dfa_total_misses); safe_printfmt (1, "dfa cache stats:\n threshold %lu; failure_pt %lu\n in_use %lu; high_water_mark %lu\n hits %d; misses %d; total_hits %d; total_misses %d\n", (unsigned long)threshold, (unsigned long)failure_pt, (unsigned long)in_use, (unsigned long)high_water_mark, dfa_hits, dfa_misses, dfa_total_hits, dfa_total_misses); } { size_t threshold; size_t failure_pt; size_t in_use; size_t high_water_mark; int nfa_hits; int nfa_misses; int nfa_saves; rx_nfa_cache_statistics (&threshold, &failure_pt, &in_use, &high_water_mark, &nfa_hits, &nfa_misses, &nfa_saves); safe_printfmt (1, "nfa cache stats:\n threshold %lu; failure_pt %lu\n in_use %lu; high_water_mark %lu\n hits %d; misses %d; saves %d\n", (unsigned long)threshold, (unsigned long)failure_pt, (unsigned long)in_use, (unsigned long)high_water_mark, nfa_hits, nfa_misses, nfa_saves); } rx_clear_dfa_state (dfa); rx_free_nfa (nfa); rx_free_exp (a_and_b_star_and_bigs_star_and_c_node); { size_t dfa_bytes; size_t nfa_bytes; dfa_bytes = rx_flush_dfa_cache (); safe_printfmt (1, "memory retained by dfa cache: %lu bytes\n", (unsigned long)dfa_bytes); nfa_bytes = rx_flush_nfa_cache (); safe_printfmt (1, "memory retained by nfa cache: %lu bytes\n", (unsigned long)nfa_bytes); if (dfa_bytes || nfa_bytes) exit (1); } } return 0; } tla-1.3.5+dfsg/src/hackerlab/tests/rx-tests/unit-dfa-utf.c0000644000175000017500000003026510457621774022065 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:41:18 2001 (unit-dfa-utf.c) */ /* unit-dfa-utf.c - * **************************************************************** * Copyright (C) 2000 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/bugs/panic.h" #include "hackerlab/rx/tree.h" #include "hackerlab/rx/nfa.h" #include "hackerlab/rx/dfa-utf8.h" #include "hackerlab/rx/dfa-utf16.h" #include "hackerlab/cmd/main.h" static t_uchar * program_name = "unit-dfa-utf"; static t_uchar * usage = "[options]"; static t_uchar * version_string = "1.0"; #define OPTS(OP, OP2) \ OP (opt_help_msg, "h", "help", 0, \ "Display a help message and exit.") \ OP (opt_version, "V", "version", 0, \ "Display a release identifier string") \ OP2 (opt_version, 0, 0, 0, "and exit.") enum options { OPTS (OPT_ENUM, OPT_IGN) }; struct opt_desc opts[] = { OPTS (OPT_DESC, OPT_DESC) {-1, 0, 0, 0, 0} }; int main (int argc, char * argv[]) { int o; struct opt_parsed * option; option = 0; while (1) { o = opt_standard (lim_use_must_malloc, &option, opts, &argc, argv, program_name, usage, version_string, 0, opt_help_msg, opt_none, opt_version); if (o == opt_none) break; switch (o) { default: safe_printfmt (2, "unhandled option `%s'\n", option->opt_string); panic ("internal error parsing arguments"); #if 0 usage_error: opt_usage (2, argv[0], program_name, usage, 1); panic_exit (); bogus_arg: safe_printfmt (2, "ill-formed argument for `%s' (`%s')\n", option->opt_string, option->arg_string); goto usage_error; #endif } } { int adv; int adv_to_final; int label; size_t amt; t_uchar string[100]; size_t pos; bits a; bits b; bits big0; bits big1; bits big2; bits c; struct rx_exp_node * a_node; struct rx_exp_node * b_node; struct rx_exp_node * b_star_node; struct rx_exp_node * big0_node; struct rx_exp_node * big1_node; struct rx_exp_node * big2_node; struct rx_exp_node * big01_node; struct rx_exp_node * bigs_node; struct rx_exp_node * bigs_star_node; struct rx_exp_node * c_node; struct rx_exp_node * a_and_b_star_node; struct rx_exp_node * a_and_b_star_and_bigs_star_node; struct rx_exp_node * a_and_b_star_and_bigs_star_and_c_node; struct rx_nfa * nfa; struct rx_nfa_state * start; struct rx_nfa_state * end; struct rx_dfa * dfa; a = bits_alloc (rx_nfa_cache_limits (), uni_bits_tree_rule); b = bits_alloc (rx_nfa_cache_limits (), uni_bits_tree_rule); big0 = bits_alloc (rx_nfa_cache_limits (), uni_bits_tree_rule); big1 = bits_alloc (rx_nfa_cache_limits (), uni_bits_tree_rule); big2 = bits_alloc (rx_nfa_cache_limits (), uni_bits_tree_rule); c = bits_alloc (rx_nfa_cache_limits (), uni_bits_tree_rule); bits_adjoin (a, 'a'); bits_adjoin (b, 'b'); bits_adjoin (big0, 0xfe); bits_adjoin (big1, 0x2200); bits_adjoin (big2, 0x10023); bits_adjoin (c, 'c'); a_node = rx_mk_r_cset_take (r_cset, 1 << 21, a); b_node = rx_mk_r_cset_take (r_cset, 1 << 21, b); big0_node = rx_mk_r_cset_take (r_cset, 1 << 21, big0); big1_node = rx_mk_r_cset_take (r_cset, 1 << 21, big1); big2_node = rx_mk_r_cset_take (r_cset, 1 << 21, big2); c_node = rx_mk_r_cset_take (r_cset, 1 << 21, c); b_star_node = rx_mk_r_monop (r_star, b_node); big01_node = rx_mk_r_binop (r_concat, big0_node, big1_node); bigs_node = rx_mk_r_binop (r_concat, big01_node, big2_node); bigs_star_node = rx_mk_r_monop (r_star, bigs_node); a_and_b_star_node = rx_mk_r_binop (r_concat, a_node, b_star_node); a_and_b_star_and_bigs_star_node = rx_mk_r_binop (r_concat, a_and_b_star_node, bigs_star_node); a_and_b_star_and_bigs_star_and_c_node = rx_mk_r_binop (r_concat, a_and_b_star_and_bigs_star_node, c_node); nfa = rx_nfa_xalloc (1 << 21); start = end = 0; rx_build_nfa (nfa, a_and_b_star_and_bigs_star_and_c_node, &start, &end); rx_set_start_state (nfa, start); rx_set_state_label (nfa, end, 69); dfa = rx_dfa_alloc (lim_use_must_malloc); rx_init_dfa_from_nfa (dfa, nfa); pos = 0; uni_utf8_iput (string, &pos, sizeof (string), 'a'); uni_utf8_iput (string, &pos, sizeof (string), 'b'); uni_utf8_iput (string, &pos, sizeof (string), 'x'); uni_utf8_iput (string, &pos, sizeof (string), 'b'); uni_utf8_iput (string, &pos, sizeof (string), 'b'); uni_utf8_iput (string, &pos, sizeof (string), 'c'); rx_dfa_goto_start_superstate (dfa, 1); adv = rx_dfa_utf8_fits (&label, dfa, string, pos); if (adv < 0) panic ("out of memory"); if (label) panic ("bogus string fits"); pos = 0; uni_utf16_iput (string, &pos, sizeof (string), 'a'); uni_utf16_iput (string, &pos, sizeof (string), 'b'); uni_utf16_iput (string, &pos, sizeof (string), 'x'); uni_utf16_iput (string, &pos, sizeof (string), 'b'); uni_utf16_iput (string, &pos, sizeof (string), 'b'); uni_utf16_iput (string, &pos, sizeof (string), 'c'); rx_dfa_goto_start_superstate (dfa, 2); adv = rx_dfa_utf16_fits (&label, dfa, (t_unichar *)string, pos / 2); if (adv < 0) panic ("out of memory"); if (label) panic ("bogus string fits"); pos = 0; uni_utf8_iput (string, &pos, sizeof (string), 'a'); uni_utf8_iput (string, &pos, sizeof (string), 'b'); uni_utf8_iput (string, &pos, sizeof (string), 'b'); uni_utf8_iput (string, &pos, sizeof (string), 'b'); uni_utf8_iput (string, &pos, sizeof (string), 'b'); uni_utf8_iput (string, &pos, sizeof (string), 'c'); rx_dfa_goto_start_superstate (dfa, 1); adv = rx_dfa_utf8_fits (&label, dfa, string, pos); if (adv < 0) panic ("out of memory"); if (!label) panic ("good string fails"); pos = 0; uni_utf16_iput (string, &pos, sizeof (string), 'a'); uni_utf16_iput (string, &pos, sizeof (string), 'b'); uni_utf16_iput (string, &pos, sizeof (string), 'b'); uni_utf16_iput (string, &pos, sizeof (string), 'b'); uni_utf16_iput (string, &pos, sizeof (string), 'b'); uni_utf16_iput (string, &pos, sizeof (string), 'c'); rx_dfa_goto_start_superstate (dfa, 2); adv = rx_dfa_utf16_fits (&label, dfa, (t_unichar *)string, pos / 2); if (adv < 0) panic ("out of memory"); if (!label) panic ("good string fails"); pos = 0; uni_utf8_iput (string, &pos, sizeof (string), 'a'); uni_utf8_iput (string, &pos, sizeof (string), 'b'); uni_utf8_iput (string, &pos, sizeof (string), 0xfe); uni_utf8_iput (string, &pos, sizeof (string), 0x2200); uni_utf8_iput (string, &pos, sizeof (string), 0xfe); uni_utf8_iput (string, &pos, sizeof (string), 0x10023); uni_utf8_iput (string, &pos, sizeof (string), 0x2200); uni_utf8_iput (string, &pos, sizeof (string), 0x10023); uni_utf8_iput (string, &pos, sizeof (string), 'b'); uni_utf8_iput (string, &pos, sizeof (string), 'b'); uni_utf8_iput (string, &pos, sizeof (string), 'c'); rx_dfa_goto_start_superstate (dfa, 1); adv = rx_dfa_utf8_fits (&label, dfa, string, pos); if (adv < 0) panic ("out of memory"); if (label) panic ("bogus string fits"); pos = 0; uni_utf16_iput (string, &pos, sizeof (string), 'a'); uni_utf16_iput (string, &pos, sizeof (string), 'b'); uni_utf16_iput (string, &pos, sizeof (string), 0xfe); uni_utf16_iput (string, &pos, sizeof (string), 0x2200); uni_utf16_iput (string, &pos, sizeof (string), 0xfe); uni_utf16_iput (string, &pos, sizeof (string), 0x10023); uni_utf16_iput (string, &pos, sizeof (string), 0x2200); uni_utf16_iput (string, &pos, sizeof (string), 0x10023); uni_utf16_iput (string, &pos, sizeof (string), 'b'); uni_utf16_iput (string, &pos, sizeof (string), 'b'); uni_utf16_iput (string, &pos, sizeof (string), 'c'); rx_dfa_goto_start_superstate (dfa, 2); adv = rx_dfa_utf16_fits (&label, dfa, (t_unichar *)string, pos / 2); if (adv < 0) panic ("out of memory"); if (label) panic ("bogus string fits"); pos = 0; uni_utf8_iput (string, &pos, sizeof (string), 'a'); uni_utf8_iput (string, &pos, sizeof (string), 'b'); uni_utf8_iput (string, &pos, sizeof (string), 'b'); uni_utf8_iput (string, &pos, sizeof (string), 'b'); uni_utf8_iput (string, &pos, sizeof (string), 0xfe); uni_utf8_iput (string, &pos, sizeof (string), 0x2200); uni_utf8_iput (string, &pos, sizeof (string), 0x10023); uni_utf8_iput (string, &pos, sizeof (string), 0xfe); uni_utf8_iput (string, &pos, sizeof (string), 0x2200); uni_utf8_iput (string, &pos, sizeof (string), 0x10023); uni_utf8_iput (string, &pos, sizeof (string), 'c'); rx_dfa_goto_start_superstate (dfa, 1); adv = rx_dfa_utf8_fits (&label, dfa, string, pos); if (adv < 0) panic ("out of memory"); if (!label) panic ("good string fails"); rx_dfa_goto_start_superstate (dfa, 1); adv_to_final = rx_dfa_utf8_advance_to_final (&amt, dfa, string, pos); if (adv_to_final < 0) panic ("out of memory"); if (!adv_to_final || !dfa->final_tag || (pos != amt)) panic ("good string doesn't fit (2)"); if (dfa->final_tag != 69) panic ("bogus final tag"); pos = 0; uni_utf16_iput (string, &pos, sizeof (string), 'a'); uni_utf16_iput (string, &pos, sizeof (string), 'b'); uni_utf16_iput (string, &pos, sizeof (string), 'b'); uni_utf16_iput (string, &pos, sizeof (string), 'b'); uni_utf16_iput (string, &pos, sizeof (string), 0xfe); uni_utf16_iput (string, &pos, sizeof (string), 0x2200); uni_utf16_iput (string, &pos, sizeof (string), 0x10023); uni_utf16_iput (string, &pos, sizeof (string), 0xfe); uni_utf16_iput (string, &pos, sizeof (string), 0x2200); uni_utf16_iput (string, &pos, sizeof (string), 0x10023); uni_utf16_iput (string, &pos, sizeof (string), 'c'); rx_dfa_goto_start_superstate (dfa, 2); adv = rx_dfa_utf16_fits (&label, dfa, (t_unichar *)string, pos / 2); if (adv < 0) panic ("out of memory"); if (!label) panic ("good string fails"); rx_dfa_goto_start_superstate (dfa, 2); adv_to_final = rx_dfa_utf16_advance_to_final (&amt, dfa, (t_unichar *)string, pos / 2); if (adv_to_final < 0) panic ("out of memory"); if (!adv_to_final || (amt != (pos / 2))) panic ("good string doesn't fit (2)"); if (dfa->final_tag != 69) panic ("bogus final tag"); { size_t threshold; size_t failure_pt; size_t in_use; size_t high_water_mark; int dfa_hits; int dfa_misses; int dfa_total_hits; int dfa_total_misses; rx_dfa_cache_statistics (&threshold, &failure_pt, &in_use, &high_water_mark, &dfa_hits, &dfa_misses, &dfa_total_hits, &dfa_total_misses); safe_printfmt (1, "dfa cache stats:\n threshold %lu; failure_pt %lu\n in_use %lu; high_water_mark %lu\n hits %d; misses %d; total_hits %d; total_misses %d\n", (unsigned long)threshold, (unsigned long)failure_pt, (unsigned long)in_use, (unsigned long)high_water_mark, dfa_hits, dfa_misses, dfa_total_hits, dfa_total_misses); } { size_t threshold; size_t failure_pt; size_t in_use; size_t high_water_mark; int nfa_hits; int nfa_misses; int nfa_saves; rx_nfa_cache_statistics (&threshold, &failure_pt, &in_use, &high_water_mark, &nfa_hits, &nfa_misses, &nfa_saves); safe_printfmt (1, "nfa cache stats:\n threshold %lu; failure_pt %lu\n in_use %lu; high_water_mark %lu\n hits %d; misses %d; saves %d\n", (unsigned long)threshold, (unsigned long)failure_pt, (unsigned long)in_use, (unsigned long)high_water_mark, nfa_hits, nfa_misses, nfa_saves); } rx_clear_dfa_state (dfa); rx_free_nfa (nfa); rx_free_exp (a_and_b_star_and_bigs_star_and_c_node); { size_t dfa_bytes; size_t nfa_bytes; dfa_bytes = rx_flush_dfa_cache (); safe_printfmt (1, "memory retained by dfa cache: %lu bytes\n", (unsigned long)dfa_bytes); nfa_bytes = rx_flush_nfa_cache (); safe_printfmt (1, "memory retained by nfa cache: %lu bytes\n", (unsigned long)nfa_bytes); if (dfa_bytes || nfa_bytes) exit (1); } } return 0; } tla-1.3.5+dfsg/src/hackerlab/tests/os-tests/0000755000175000017500000000000010457621774017400 5ustar userusertla-1.3.5+dfsg/src/hackerlab/tests/os-tests/Makefile.in0000644000175000017500000000137610457621774021454 0ustar useruser# tag: Tom Lord Tue Dec 4 14:52:21 2001 (os-tests/Makefile.in) # tested-headers := arpa/inet.h \ char-class-locale.h \ char-cmp-locale.h \ dirent.h \ errno.h \ errno-to-string.h \ exit-status.h \ exit.h \ fcntl.h \ limits.h \ malloc.h \ math.h \ netdb.h \ netinet/in.h \ pwd.h \ setjmp.h \ signal.h \ stdarg.h \ stddef.h \ stdlib.h \ sys/socket.h \ sys/stat.h \ sys/time.h \ sys/types.h \ sys/un.h \ sys/wait.h \ unistd.h \ utime.h test-headers := $(addprefix hackerlab/os/, $(tested-headers)) libs := $(objroot)/hackerlab/libhackerlab/libhackerlab.a -lm include $(makefiles)/unit-tests.mk tla-1.3.5+dfsg/src/hackerlab/tests/os-tests/DESC0000644000175000017500000000167610457621774020053 0ustar useruser# tag: Tom Lord Tue Dec 4 15:05:19 2001 (os-tests/DESC) # flux/os contains trivial wrappers for standard header files. The wrappers perform three functions: 1. They simplify porting. 2. They record the dependencies of flux on the host system. 3. They automatically include pre-requisit headers. For example, "flux/os/dirent.h" includes "flux/os/sys/types.h" (which includes ) as well as . There is only one function to test in this directory: errno_to_string. Since that function is trivial (it wraps `strerror' so that programs don't have to include "") no test is provided. We test to make sure each of the header files compiles correctly. We don't directly test the definitions in these header files. For completeness, such tests should be added, specifically testing for the features used by flux. As a practical matter, if these header files break, other directories will fail to compile. tla-1.3.5+dfsg/src/hackerlab/tests/os-tests/PLUGIN/0000755000175000017500000000000010457621774020376 5ustar userusertla-1.3.5+dfsg/src/hackerlab/tests/os-tests/PLUGIN/REQ0000644000175000017500000000002610457621774020746 0ustar useruserbugs-tests os-tests tla-1.3.5+dfsg/src/hackerlab/tests/machine-tests/0000755000175000017500000000000010457621774020363 5ustar userusertla-1.3.5+dfsg/src/hackerlab/tests/machine-tests/Makefile.in0000644000175000017500000000035510457621774022433 0ustar useruser# tag: Tom Lord Tue Dec 4 14:46:50 2001 (Makefile.in) # test-headers := $(addprefix hackerlab/machine/, alignment.h endian.h types.h) libs := $(objroot)/hackerlab/libhackerlab/libhackerlab.a -lm include $(makefiles)/unit-tests.mk tla-1.3.5+dfsg/src/hackerlab/tests/machine-tests/DESC0000644000175000017500000000063710457621774021032 0ustar useruser# tag: Tom Lord Tue Dec 4 15:04:36 2001 (machine-tests/DESC) # There are no functions to test in this directory. We test to make sure each of the header files compiles correctly. We don't directly test the definitions in these header files. For completeness, such tests should be added. As a practical matter, the definitions are very simple and if they break, tests of other directories are likely to fail. tla-1.3.5+dfsg/src/hackerlab/tests/machine-tests/PLUGIN/0000755000175000017500000000000010457621774021361 5ustar userusertla-1.3.5+dfsg/src/hackerlab/tests/machine-tests/PLUGIN/REQ0000644000175000017500000000003110457621774021725 0ustar useruserbugs-tests machine-tests tla-1.3.5+dfsg/src/hackerlab/tests/fmt-tests/0000755000175000017500000000000010457621774017545 5ustar userusertla-1.3.5+dfsg/src/hackerlab/tests/fmt-tests/unit-cvt.sh0000744000175000017500000001631510457621774021661 0ustar useruser#!/bin/sh # tag: Tom Lord Tue Dec 4 14:54:28 2001 (fmt-tests/unit-cvt.sh) # set -e arg0="$0" srcdir=`dirname "$arg0"` echo ================ unit-cvt tests ================ intsize=`./unit-cvt --si` longsize=`./unit-cvt --sl` if [ $longsize -eq 4 ] ; then maxuld=4294967295 uldovfl=4294967296 maxulx=ffffffff ulxovfl=100000000 maxulX=FFFFFFFF ulXovfl=100000000 maxulo=37777777777 uloovfl=40000000000 maxld=2147483647 minld=-2147483648 ldovfl=2147483648 ldunfl=-2147483649 maxlx=7fffffff minlx=-80000000 lxovfl=80000000 lxunfl=-80000001 maxlX=7FFFFFFF minlX=-80000000 lXovfl=80000000 lXunfl=-80000001 maxlo=17777777777 minlo=-20000000000 loovfl=20000000000 lounfl=-20000000001 elif [ $longsize -eq 8 ] ; then maxuld=18446744073709551615 uldovfl=18446744073709551616 maxulx=ffffffffffffffff ulxovfl=10000000000000000 maxulX=FFFFFFFFFFFFFFFF ulXovfl=10000000000000000 maxulo=1777777777777777777777 uloovfl=2000000000000000000000 maxld=9223372036854775807 minld=-9223372036854775808 ldovfl=9223372036854775808 ldunfl=-9223372036854775809 maxlx=7fffffffffffffff minlx=-8000000000000000 lxovfl=8000000000000000 lxunfl=-8000000000000001 maxlX=7FFFFFFFFFFFFFFF minlX=-8000000000000000 lXovfl=8000000000000000 lXunfl=-8000000000000001 maxlo=777777777777777777777 minlo=-1000000000000000000000 loovfl=1000000000000000000000 lounfl=-1000000000000000000001 else echo "odd word size ($longsize bytes)" 1>&2 exit 1 fi echo unsigned long decimals... for uld in 0 1 13 1023 $maxuld ; do # echo "uld = %uld " `./unit-cvt --uld $uld` test `./unit-cvt --uld $uld` = $uld done # echo "uld = $uldovfl " `./unit-cvt --uld $uldovfl` test `./unit-cvt --uld $uldovfl` = ERANGE echo unsigned long hex... for ulx in 0 1 13 1023 cafe $maxulx ; do # echo "ulx = %ulx " `./unit-cvt --ulx $ulx` test `./unit-cvt --ulx $ulx` = $ulx done # echo "ulx = $ulxovfl " `./unit-cvt --ulx $ulxovfl` test `./unit-cvt --ulx $ulxovfl` = ERANGE echo unsigned long HEX... for ulX in 0 1 13 1023 CAFE $maxulX ; do # echo "ulX = %ulX " `./unit-cvt --ulX $ulX` test `./unit-cvt --ulX $ulX` = $ulX done # echo "ulX = $ulXovfl " `./unit-cvt --ulX $ulXovfl` test `./unit-cvt --ulX $ulXovfl` = ERANGE # echo "ulX = cafe (=> CAFE) " `./unit-cvt --ulX cafe` test `./unit-cvt --ulX cafe` = CAFE echo unsigned long octal... for ulo in 0 1 13 1023 7654 $maxulo ; do # echo "ulo = $ulo " `./unit-cvt --ulo $ulo` test `./unit-cvt --ulo $ulo` = $ulo done # echo "ulo = $uloovfl " `./unit-cvt --ulo $uloovfl` test `./unit-cvt --ulo $uloovfl` = ERANGE echo long decimals... for ld in 0 1 13 1023 -1 -9 -21 -1023 $maxld $minld ; do # echo "ld == $ld " `./unit-cvt --ld $ld` test `./unit-cvt --ld $ld` = $ld done # echo "ld = $ldovfl " `./unit-cvt --ld $ldovfl` test `./unit-cvt --ld $ldovfl` = ERANGE # echo "ld = $ldunfl " `./unit-cvt --ld $ldunfl` test `./unit-cvt --ld $ldunfl` = ERANGE echo long hex... for lx in 0 1 13 1023 -1 -9 -21 -1023 cafe -babe $maxlx $minlx ; do # echo "lx == $lx " `./unit-cvt --lx $lx` test `./unit-cvt --lx $lx` = $lx done # echo "lx = $lxovfl " `./unit-cvt --lx $lxovfl` test `./unit-cvt --lx $lxovfl` = ERANGE # echo "lx = $lxunfl " `./unit-cvt --lx $lxunfl` test `./unit-cvt --lx $lxunfl` = ERANGE echo long HEX... for lX in 0 1 13 1023 -1 -9 -21 -1023 CAFE -BABE $maxlX $minlX ; do # echo "lX == $lX " `./unit-cvt --lX $lX` test `./unit-cvt --lX $lX` = $lX done # echo "lX = $lXovfl " `./unit-cvt --lX $lXovfl` test `./unit-cvt --lX $lXovfl` = ERANGE # echo "lX = $lXunfl " `./unit-cvt --lX $lXunfl` test `./unit-cvt --lX $lXunfl` = ERANGE echo long octal... for lo in 0 1 13 1023 -7654 $maxlo ; do # echo "lo = $lo " `./unit-cvt --lo $lo` test `./unit-cvt --lo $lo` = $lo done # echo "lo = $loovfl " `./unit-cvt --lo $loovfl` test `./unit-cvt --lo $loovfl` = ERANGE if [ $intsize -eq 4 ] ; then maxud=4294967295 udovfl=4294967296 maxux=ffffffff uxovfl=100000000 maxuX=FFFFFFFF uXovfl=100000000 maxuo=37777777777 uoovfl=40000000000 maxd=2147483647 mind=-2147483648 dovfl=2147483648 dunfl=-2147483649 maxx=7fffffff minx=-80000000 xovfl=80000000 xunfl=-80000001 maxX=7FFFFFFF minX=-80000000 Xovfl=80000000 Xunfl=-80000001 maxo=17777777777 mino=-20000000000 oovfl=20000000000 ounfl=-20000000001 elif [ $intsize -eq 8 ] ; then maxud=18446744073709551615 udovfl=18446744073709551616 maxux=ffffffffffffffff uxovfl=10000000000000000 maxuX=FFFFFFFFFFFFFFFF uXovfl=10000000000000000 maxd=9223372036854775807 mind=-9223372036854775808 dovfl=9223372036854775808 dunfl=-9223372036854775809 maxx=7fffffffffffffff minx=-8000000000000000 xovfl=8000000000000000 xunfl=-8000000000000001 maxX=7FFFFFFFFFFFFFFF minX=-8000000000000000 Xovfl=8000000000000000 Xunfl=-8000000000000001 maxo=777777777777777777777 mino=-1000000000000000000000 oovfl=1000000000000000000000 ounfl=-1000000000000000000001 else echo "odd int size ($intsize bytes)" 1>&2 exit 1 fi echo unsigned int decimals... for ud in 0 1 13 1023 $maxud ; do # echo "ud = $ud " `./unit-cvt --ud $ud` test `./unit-cvt --ud $ud` = $ud done # echo "ud = $udovfl " `./unit-cvt --ud $udovfl` test `./unit-cvt --ud $udovfl` = ERANGE echo unsigned int hex... for ux in 0 1 13 1023 cafe $maxux ; do # echo "ux = $ux " `./unit-cvt --ux $ux` test `./unit-cvt --ux $ux` = $ux done # echo "ux = $uxovfl " `./unit-cvt --ux $uxovfl` test `./unit-cvt --ux $uxovfl` = ERANGE echo unsigned int HEX... for uX in 0 1 13 1023 CAFE $maxuX ; do # echo "uX = $uX " `./unit-cvt --uX $uX` test `./unit-cvt --uX $uX` = $uX done # echo "uX = $uXovfl " `./unit-cvt --uX $uXovfl` test `./unit-cvt --uX $uXovfl` = ERANGE # echo "uX = cafe (=> CAFE) " `./unit-cvt --uX cafe` test `./unit-cvt --uX cafe` = CAFE echo unsigned int octal... for uo in 0 1 13 1023 7654 $maxuo ; do # echo "uo = $uo " `./unit-cvt --uo $uo` test `./unit-cvt --uo $uo` = $uo done # echo "uo = $uoovfl " `./unit-cvt --uo $uoovfl` test `./unit-cvt --uo $uoovfl` = ERANGE echo int decimals... for d in 0 1 13 1023 -1 -9 -21 -1023 $maxd $mind ; do # echo "d == $d " `./unit-cvt --d $d` test `./unit-cvt --d $d` = $d done # echo "d = $dovfl " `./unit-cvt --d $dovfl` test `./unit-cvt --d $dovfl` = ERANGE # echo "d = $dunfl " `./unit-cvt --d $dunfl` test `./unit-cvt --d $dunfl` = ERANGE echo int hex... for x in 0 1 13 1023 -1 -9 -21 -1023 cafe -babe $maxx $minx ; do # echo "x == $x " `./unit-cvt --x $x` test `./unit-cvt --x $x` = $x done # echo "x = $xovfl " `./unit-cvt --x $xovfl` test `./unit-cvt --x $xovfl` = ERANGE # echo "x = $xunfl " `./unit-cvt --x $xunfl` test `./unit-cvt --x $xunfl` = ERANGE echo int HEX... for X in 0 1 13 1023 -1 -9 -21 -1023 CAFE -BABE $maxX $minX ; do # echo "X == $X " `./unit-cvt --X $X` test `./unit-cvt --X $X` = $X done # echo "X = $Xovfl " `./unit-cvt --X $Xovfl` test `./unit-cvt --X $Xovfl` = ERANGE # echo "X = $Xunfl " `./unit-cvt --X $Xunfl` test `./unit-cvt --X $Xunfl` = ERANGE echo int octal... for o in 0 1 13 1023 -7654 $maxo ; do # echo "o = $o " `./unit-cvt --o $o` test `./unit-cvt --o $o` = $o done # echo "o = $oovfl " `./unit-cvt --o $oovfl` test `./unit-cvt --o $oovfl` = ERANGE echo ...passed tla-1.3.5+dfsg/src/hackerlab/tests/fmt-tests/unit-cvt.c0000644000175000017500000003414310457621774021467 0ustar useruser/* unit-cvt.c - test cvt.c * **************************************************************** * Copyright (C) 2000 Thomas Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/os/errno.h" #include "hackerlab/fmt/cvt.h" #include "hackerlab/cmd/main.h" static t_uchar * program_name = "unit-cvt"; static t_uchar * usage = "[options]"; static t_uchar * version_string = "1.0"; #define OPTS(OP, OP2) \ OP (opt_help_msg, "h", "help", 0, \ "Display a help message and exit.") \ OP (opt_version, "V", "version", 0, \ "Display a release identifier string") \ OP2 (opt_version, 0, 0, 0, "and exit.") \ OP (opt_sizeof_long, 0, "sl", 0, \ "Print the number of bytes in a long integer.") \ OP (opt_sizeof_int, 0, "si", 0, \ "Print the number of bytes in an integer.") \ OP (opt_ulong_decimal, 0, "uld N", 1, \ "Decimal number to unsigned long.") \ OP (opt_long_decimal, 0, "ld N", 1, \ "Decimal number to long.") \ OP (opt_uint_decimal, 0, "ud N", 1, \ "Decimal number to unsigned integer.") \ OP (opt_int_decimal, 0, "d N", 1, \ "Decimal number to integer.") \ OP (opt_ulong_hex, 0, "ulx N", 1, \ "Hexadecimal number to unsigned long.") \ OP (opt_long_hex, 0, "lx N", 1, \ "Hexadecimal number to long.") \ OP (opt_uint_hex, 0, "ux N", 1, \ "Hexadecimal number to unsigned integer.") \ OP (opt_int_hex, 0, "x N", 1, \ "Hexadecimal number to integer.") \ OP (opt_ulong_HEX, 0, "ulX N", 1, \ "Hexadecimal number to unsigned long.") \ OP (opt_long_HEX, 0, "lX N", 1, \ "Hexadecimal number to long.") \ OP (opt_uint_HEX, 0, "uX N", 1, \ "Hexadecimal number to unsigned integer.") \ OP (opt_int_HEX, 0, "X N", 1, \ "Hexadecimal number to integer.") \ OP (opt_ulong_octal, 0, "ulo N", 1, \ "Octal number to unsigned long.") \ OP (opt_long_octal, 0, "lo N", 1, \ "Octal number to long.") \ OP (opt_uint_octal, 0, "uo N", 1, \ "Octal number to unsigned integer.") \ OP (opt_int_octal, 0, "o N", 1, \ "Octal number to integer.") enum options { OPTS (OPT_ENUM, OPT_IGN) }; struct opt_desc opts[] = { OPTS (OPT_DESC, OPT_DESC) {-1, 0, 0, 0, 0} }; static long cast_long (long * x) { return * x; } static long cast_int (int * x) { return (long)*x; } static long cast_uint (unsigned int * x) { return (long)((unsigned long)*x); } int main (int argc, char * argv[]) { int o; struct opt_parsed * option; option = 0; while (1) { int errn; unsigned long ul; unsigned int ui; long l; int i; void * answer; int (*cvt_fn)(); void (*cvt_back_fn)(); long (*cast_fn)(); o = opt_standard (lim_use_must_malloc, &option, opts, &argc, argv, program_name, usage, version_string, 0, opt_help_msg, opt_none, opt_version); if (o == opt_none) break; switch (o) { default: safe_printfmt (2, "unhandled option `%s'\n", option->opt_string); panic ("internal error parsing arguments"); #if 0 usage_error: opt_usage (2, argv[0], program_name, usage, 1); panic_exit (); bogus_arg: safe_printfmt (2, "ill-formed argument for `%s' (`%s')\n", option->opt_string, option->arg_string); goto usage_error; #endif case opt_sizeof_long: printfmt (&errn, 1, "%lu\n", (t_ulong)sizeof (long)); break; case opt_sizeof_int: printfmt (&errn, 1, "%lu\n", (t_ulong)sizeof (int)); break; case opt_ulong_decimal: answer = (void *)&ul; cvt_fn = cvt_decimal_to_ulong; cvt_back_fn = (void (*)())cvt_ulong_to_decimal; cast_fn = cast_long; goto generic_cvt_test; case opt_long_decimal: answer = (void *)&l; cvt_fn = cvt_decimal_to_long; cvt_back_fn = (void (*)())cvt_long_to_decimal; cast_fn = cast_long; goto generic_cvt_test; case opt_uint_decimal: answer = (void *)&ui; cvt_fn = cvt_decimal_to_uint; cvt_back_fn = (void (*)())cvt_ulong_to_decimal; cast_fn = cast_uint; goto generic_cvt_test; case opt_int_decimal: answer = (void *)&i; cvt_fn = cvt_decimal_to_int; cvt_back_fn = (void (*)())cvt_long_to_decimal; cast_fn = cast_int; goto generic_cvt_test; case opt_ulong_hex: answer = (void *)&ul; cvt_fn = cvt_hex_to_ulong; cvt_back_fn = (void (*)())cvt_ulong_to_hex; cast_fn = cast_long; goto generic_cvt_test; case opt_long_hex: answer = (void *)&l; cvt_fn = cvt_hex_to_long; cvt_back_fn = (void (*)())cvt_long_to_hex; cast_fn = cast_long; goto generic_cvt_test; case opt_uint_hex: answer = (void *)&ui; cvt_fn = cvt_hex_to_uint; cvt_back_fn = (void (*)())cvt_ulong_to_hex; cast_fn = cast_uint; goto generic_cvt_test; case opt_int_hex: answer = (void *)&i; cvt_fn = cvt_hex_to_int; cvt_back_fn = (void (*)())cvt_long_to_hex; cast_fn = cast_int; goto generic_cvt_test; case opt_ulong_HEX: answer = (void *)&ul; cvt_fn = cvt_hex_to_ulong; cvt_back_fn = (void (*)())cvt_ulong_to_HEX; cast_fn = cast_long; goto generic_cvt_test; case opt_long_HEX: answer = (void *)&l; cvt_fn = cvt_hex_to_long; cvt_back_fn = (void (*)())cvt_long_to_HEX; cast_fn = cast_long; goto generic_cvt_test; case opt_uint_HEX: answer = (void *)&ui; cvt_fn = cvt_hex_to_uint; cvt_back_fn = (void (*)())cvt_ulong_to_HEX; cast_fn = cast_uint; goto generic_cvt_test; case opt_int_HEX: answer = (void *)&i; cvt_fn = cvt_hex_to_int; cvt_back_fn = (void (*)())cvt_long_to_HEX; cast_fn = cast_int; goto generic_cvt_test; case opt_ulong_octal: answer = (void *)&ul; cvt_fn = cvt_octal_to_ulong; cvt_back_fn = (void (*)())cvt_ulong_to_octal; cast_fn = cast_long; goto generic_cvt_test; case opt_long_octal: answer = (void *)&l; cvt_fn = cvt_octal_to_long; cvt_back_fn = (void (*)())cvt_long_to_octal; cast_fn = cast_long; goto generic_cvt_test; case opt_uint_octal: answer = (void *)&ui; cvt_fn = cvt_octal_to_uint; cvt_back_fn = (void (*)())cvt_ulong_to_octal; cast_fn = cast_uint; goto generic_cvt_test; case opt_int_octal: answer = (void *)&i; cvt_fn = cvt_octal_to_int; cvt_back_fn = (void (*)())cvt_long_to_octal; cast_fn = cast_int; goto generic_cvt_test; generic_cvt_test: if (cvt_fn (&errn, answer, option->arg_string, str_length (option->arg_string))) printfmt (&errn, 1, "%s\n", ((errn == EINVAL) ? "EINVAL" : ((errn == ERANGE) ? "ERANGE" : "unexpected errno value"))); else { t_uchar buf[100]; cvt_back_fn (buf, cast_fn (answer)); printfmt (&errn, 1, "%s\n", buf); } break; } { t_uchar nbuf[32]; size_t needed; invariant ((cvt_long_to_decimal (nbuf, -1) == 2) && !str_cmp (nbuf, "-1")); invariant ((cvt_long_to_HEX (nbuf, -1) == 2) && !str_cmp (nbuf, "-1")); invariant ((cvt_long_to_hex (nbuf, -1) == 2) && !str_cmp (nbuf, "-1")); invariant ((cvt_long_to_octal (nbuf, -1) == 2) && !str_cmp (nbuf, "-1")); invariant (cvt_ulong_to_decimal_n (nbuf, 32, 123, &needed) == 0 && str_cmp (nbuf,"123") == 0 && needed == 3); invariant (cvt_ulong_to_decimal_n (nbuf, 2, 123, &needed) == -1 && needed == 3); invariant (cvt_long_to_decimal_n (nbuf, 32, -123, &needed) == 0 && str_cmp (nbuf,"-123") == 0 && needed == 4); invariant (cvt_long_to_decimal_n (nbuf, 2, -123, &needed) == -1 && needed == 4); invariant (cvt_ulong_to_octal_n (nbuf, 32, 123, &needed) == 0 && str_cmp (nbuf,"173") == 0 && needed == 3); invariant (cvt_ulong_to_octal_n (nbuf, 2, 123, &needed) == -1 && needed == 3); invariant (cvt_long_to_octal_n (nbuf, 32, -123, &needed) == 0 && str_cmp (nbuf,"-173") == 0 && needed == 4); invariant (cvt_long_to_octal_n (nbuf, 2, -123, &needed) == -1 && needed == 4); invariant (cvt_ulong_to_HEX_n (nbuf, 32, 123, &needed) == 0 && str_cmp (nbuf,"7B") == 0 && needed == 2); invariant (cvt_ulong_to_HEX_n (nbuf, 1, 123, &needed) == -1 && needed == 2); invariant (cvt_long_to_HEX_n (nbuf, 32, -123, &needed) == 0 && str_cmp (nbuf,"-7B") == 0 && needed == 3); invariant (cvt_long_to_HEX_n (nbuf, 1, -123, &needed) == -1 && needed == 3); invariant (cvt_ulong_to_hex_n (nbuf, 32, 123, &needed) == 0 && str_cmp (nbuf,"7b") == 0 && needed == 2); invariant (cvt_ulong_to_hex_n (nbuf, 1, 123, &needed) == -1 && needed == 2); invariant (cvt_long_to_hex_n (nbuf, 32, -123, &needed) == 0 && str_cmp (nbuf,"-7b") == 0 && needed == 3); invariant (cvt_long_to_hex_n (nbuf, 1, -123, &needed) == -1 && needed == 3); } { const t_uchar * good="1234567noobar"; const t_uchar * ngood="-1234567noobar"; const t_uchar * bad="+noobar1234567"; const t_uchar * toobig="1234567123456712345671234567noobar"; int err; unsigned long ul; unsigned int ui; long sl; int si; size_t consumed; invariant (cvt_scan_decimal_to_ulong (&err, &ul, &consumed, good, 13) == 0 && ul == 1234567 && consumed == 7); invariant (cvt_scan_decimal_to_ulong (&err, &ul, &consumed, bad, 14) == -1 && err == EINVAL); invariant (cvt_scan_decimal_to_ulong (&err, &ul, &consumed, toobig, 34) == -1 && err == ERANGE); invariant (cvt_scan_decimal_to_uint (&err, &ui, &consumed, good, 13) == 0 && ui == 1234567 && consumed == 7); invariant (cvt_scan_decimal_to_uint (&err, &ui, &consumed, bad, 13) == -1 && err == EINVAL); invariant (cvt_scan_decimal_to_uint (&err, &ui, &consumed, toobig, 34) == -1 && err == ERANGE); invariant (cvt_scan_decimal_to_long (&err, &sl, &consumed, ngood, 14) == 0 && sl == -1234567 && consumed == 8); invariant (cvt_scan_decimal_to_long (&err, &sl, &consumed, bad, 13) == -1 && err == EINVAL); invariant (cvt_scan_decimal_to_long (&err, &sl, &consumed, toobig, 34) == -1 && err == ERANGE); invariant (cvt_scan_decimal_to_int (&err, &si, &consumed, ngood, 14) == 0 && si == -1234567 && consumed == 8); invariant (cvt_scan_decimal_to_int (&err, &si, &consumed, bad, 13) == -1 && err == EINVAL); invariant (cvt_scan_decimal_to_int (&err, &si, &consumed, toobig, 34) == -1 && err == ERANGE); invariant (cvt_scan_hex_to_ulong (&err, &ul, &consumed, good, 13) == 0 && ul == 0x1234567 && consumed == 7); invariant (cvt_scan_hex_to_ulong (&err, &ul, &consumed, bad, 14) == -1 && err == EINVAL); invariant (cvt_scan_hex_to_ulong (&err, &ul, &consumed, toobig, 34) == -1 && err == ERANGE); invariant (cvt_scan_hex_to_uint (&err, &ui, &consumed, good, 13) == 0 && ui == 0x1234567 && consumed == 7); invariant (cvt_scan_hex_to_uint (&err, &ui, &consumed, bad, 13) == -1 && err == EINVAL); invariant (cvt_scan_hex_to_uint (&err, &ui, &consumed, toobig, 34) == -1 && err == ERANGE); invariant (cvt_scan_hex_to_long (&err, &sl, &consumed, ngood, 14) == 0 && sl == -0x1234567 && consumed == 8); invariant (cvt_scan_hex_to_long (&err, &sl, &consumed, bad, 13) == -1 && err == EINVAL); invariant (cvt_scan_hex_to_long (&err, &sl, &consumed, toobig, 34) == -1 && err == ERANGE); invariant (cvt_scan_hex_to_int (&err, &si, &consumed, ngood, 14) == 0 && si == -0x1234567 && consumed == 8); invariant (cvt_scan_hex_to_int (&err, &si, &consumed, bad, 13) == -1 && err == EINVAL); invariant (cvt_scan_hex_to_int (&err, &si, &consumed, toobig, 34) == -1 && err == ERANGE); invariant (cvt_scan_octal_to_ulong (&err, &ul, &consumed, good, 13) == 0 && ul == 01234567 && consumed == 7); invariant (cvt_scan_octal_to_ulong (&err, &ul, &consumed, bad, 14) == -1 && err == EINVAL); invariant (cvt_scan_octal_to_ulong (&err, &ul, &consumed, toobig, 34) == -1 && err == ERANGE); invariant (cvt_scan_octal_to_uint (&err, &ui, &consumed, good, 13) == 0 && ui == 01234567 && consumed == 7); invariant (cvt_scan_octal_to_uint (&err, &ui, &consumed, bad, 13) == -1 && err == EINVAL); invariant (cvt_scan_octal_to_uint (&err, &ui, &consumed, toobig, 34) == -1 && err == ERANGE); invariant (cvt_scan_octal_to_long (&err, &sl, &consumed, ngood, 14) == 0 && sl == -01234567 && consumed == 8); invariant (cvt_scan_octal_to_long (&err, &sl, &consumed, bad, 13) == -1 && err == EINVAL); invariant (cvt_scan_octal_to_long (&err, &sl, &consumed, toobig, 34) == -1 && err == ERANGE); invariant (cvt_scan_octal_to_int (&err, &si, &consumed, ngood, 14) == 0 && si == -01234567 && consumed == 8); invariant (cvt_scan_octal_to_int (&err, &si, &consumed, bad, 13) == -1 && err == EINVAL); invariant (cvt_scan_octal_to_int (&err, &si, &consumed, toobig, 34) == -1 && err == ERANGE); } } return 0; } tla-1.3.5+dfsg/src/hackerlab/tests/fmt-tests/Makefile.in0000644000175000017500000000031510457621774021611 0ustar useruser# tag: Tom Lord Tue Dec 4 14:52:18 2001 (fmt-tests/Makefile.in) # test-headers := hackerlab/fmt/cvt.h libs := $(objroot)/hackerlab/libhackerlab/libhackerlab.a -lm include $(makefiles)/unit-tests.mk tla-1.3.5+dfsg/src/hackerlab/tests/fmt-tests/DESC0000644000175000017500000000054410457621774020211 0ustar useruser# tag: Tom Lord Tue Dec 4 15:05:26 2001 (fmt-tests/DESC) # We test the installed header files to make sure they compile. unit-cvt Convert various sized integers from decimal to hex and back again. unit-cvt.sh contains a fairly systematic test of the conversion functions. MISSING There is no cvt-double test yet because cvt-double isn't done. tla-1.3.5+dfsg/src/hackerlab/tests/fmt-tests/PLUGIN/0000755000175000017500000000000010457621774020543 5ustar userusertla-1.3.5+dfsg/src/hackerlab/tests/fmt-tests/PLUGIN/REQ0000644000175000017500000000002510457621774021112 0ustar userusermem-tests fmt-tests tla-1.3.5+dfsg/src/hackerlab/tests/Makefile.in0000644000175000017500000000012710457621774017664 0ustar useruser# tag: Tom Lord Tue Dec 4 14:46:49 2001 (Makefile.in) # include $(makefiles)/dirs.mk tla-1.3.5+dfsg/src/hackerlab/tests/rx-posix-tests/0000755000175000017500000000000010457621774020550 5ustar userusertla-1.3.5+dfsg/src/hackerlab/tests/rx-posix-tests/test-rx.sh0000755000175000017500000000471510457621774022524 0ustar useruser#!/bin/sh # tag: Tom Lord Tue Dec 4 14:54:34 2001 (rx-posix-tests/test-rx.sh) # set -e arg0="$0" srcdir=`dirname "$arg0"` echo "================ test-rx: rx validation tests ================" echo echo "---------------- quick test ----------------" echo "% time ./test-rx --iterations=1 --repeat=1" time ./test-rx --iterations=1 --repeat=1 echo "...passed" echo echo "---------------- default cache sizes ----------------" echo "% time ./test-rx --iterations=2 --repeat=3" time ./test-rx --iterations=2 --repeat=3 echo "...passed" echo echo "---------------- very small cache sizes ----------------" echo "| (long running test < 5 minutes) |" echo "--------------------------------------------------------" echo "% time ./test-rx --dfa-cache-threshold=10240 --nfa-cache-threshold=10240 --iterations=1 --repeat=1" time ./test-rx --dfa-cache-threshold=10240 --nfa-cache-threshold=10240 --iterations=1 --repeat=1 echo "...passed" echo echo "---------------- very large cache sizes ----------------" echo "% time ./test-rx --dfa-cache-threshold=8388608 --nfa-cache-threshold=8388608 --iterations=2 --repeat=3" time ./test-rx --dfa-cache-threshold=8388608 --nfa-cache-threshold=8388608 --iterations=2 --repeat=3 echo "...passed" echo echo # # # echo "================ timing tests ================" # echo # # echo # echo "---------------- very small cache sizes ----------------" # echo "% time ./test-rx --dfa-cache-threshold=32768 --nfa-cache-threshold=32768 --iterations=1 --repeat=3" # /usr/bin/time ./test-rx --dfa-cache-threshold=32768 --nfa-cache-threshold=32768 --iterations=1 --repeat=3 # echo "...passed" # echo # # echo # echo "---------------- small cache sizes ----------------" # echo "% time ./test-rx --dfa-cache-threshold=65536 --nfa-cache-threshold=65536 --iterations=1 --repeat=3" # /usr/bin/time ./test-rx --dfa-cache-threshold=65536 --nfa-cache-threshold=65536 --iterations=1 --repeat=3 # echo "...passed" # echo # # # echo # echo "---------------- default cache sizes ----------------" # echo "% time ./test-rx --iterations=1 --repeat=3" # /usr/bin/time ./test-rx --iterations=1 --repeat=3 # echo "...passed" # echo # # echo # echo "---------------- very large cache sizes ----------------" # echo "% time ./test-rx --dfa-cache-threshold=8388608 --nfa-cache-threshold=8388608 --iterations=1 --repeat=3" # /usr/bin/time ./test-rx --dfa-cache-threshold=8388608 --nfa-cache-threshold=8388608 --iterations=1 --repeat=3 # echo "...passed" # # tla-1.3.5+dfsg/src/hackerlab/tests/rx-posix-tests/test-rx.h0000644000175000017500000000060010457621774022323 0ustar useruser/* test-rx.h - test rx.h * **************************************************************** * Copyright (C) 2000 Thomas Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef RX_TESTS_TEST_RXH #define RX_TESTS_TEST_RXH /* automatically generated __STDC__ prototypes */ #endif /* RX_TESTS_TEST_RXH */ tla-1.3.5+dfsg/src/hackerlab/tests/rx-posix-tests/test-search.c0000644000175000017500000000533110457621774023140 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:41:16 2001 (test-search.c) */ /* test-search.c - * **************************************************************** * Copyright (C) YEAR NAME * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/rx-posix/regexps.h" #include "hackerlab/cmd/main.h" static t_uchar * program_name = "test-search"; static t_uchar * usage = "[options] regexp file"; static t_uchar * version_string = "1.0"; #define OPTS(OP, OP2) \ OP (opt_help_msg, "h", "help", 0, \ "Display a help message and exit.") \ OP (opt_version, "V", "version", 0, \ "Display a release identifier string") \ OP2 (opt_version, 0, 0, 0, "and exit.") enum options { OPTS (OPT_ENUM, OPT_IGN) }; struct opt_desc opts[] = { OPTS (OPT_DESC, OPT_DESC) {-1, 0, 0, 0, 0} }; void panic_exit (void) { exit (2); } int main (int argc, char * argv[]) { int o; struct opt_parsed * option; regex_t regexp; int fd; t_uchar * buf; size_t len; int exec_stat; regmatch_t match_pos_space[1]; regmatch_t * match_pos = match_pos_space; option = 0; while (1) { o = opt_standard (lim_use_must_malloc, &option, opts, &argc, argv, program_name, usage, version_string, 0, opt_help_msg, opt_none, opt_version); if (o == opt_none) break; switch (o) { default: safe_printfmt (2, "unhandled option `%s'\n", option->opt_string); panic ("internal error parsing arguments"); usage_error: opt_usage (2, argv[0], program_name, usage, 1); panic_exit (); #if 0 bogus_arg: safe_printfmt (2, "ill-formed argument for `%s' (`%s')\n", option->opt_string, option->arg_string); goto usage_error; #endif } } if (argc != 3) goto usage_error; if (regcomp (®exp, argv[1], REG_EXTENDED | REG_NEWLINE)) { safe_printfmt (2, "unable to compile regexp\n"); panic_exit (); } fd = safe_open (argv[2], O_RDONLY, 0); safe_file_to_string (&buf, &len, fd); exec_stat = regnexec (®exp, buf, len, 1, &match_pos, 0); if (exec_stat == REG_NOMATCH) { safe_printfmt (1, "no match found\n"); exit (1); } else if (exec_stat) { safe_printfmt (2, "regexec error (%d)\n", exec_stat); panic ("regexec failure"); } else { size_t newlines; t_uchar * beg; t_uchar * end; newlines = mem_occurrences (buf, '\n', match_pos[0].rm_so); end = str_chr_index (buf + match_pos[0].rm_so, '\n'); if (!end) end = buf + len; beg = str_chr_rindex_n (buf, match_pos[0].rm_so, '\n'); if (!beg) beg = buf; beg = beg + 1; safe_printfmt (1, "%d:%.*s\n", (int)(newlines + 1), (int)(end - beg), beg); } return 0; } tla-1.3.5+dfsg/src/hackerlab/tests/rx-posix-tests/test-rx.c0000644000175000017500000002033410457621774022324 0ustar useruser/* test-rx.c - Correctness tests for Rx * **************************************************************** * Copyright (C) 2000 Thomas Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/rx-posix/regexps.h" #include "hackerlab/cmd/main.h" #include "hackerlab/tests/rx-posix-tests/test-rx.h" #include "hackerlab/tests/rx-posix-tests/test-decls.h" static t_uchar * program_name = "test-rx"; static t_uchar * usage = "[options]"; static t_uchar * version_string = "1.0"; #define OPTS(OP, OP2) \ OP (opt_help_msg, "h", "help", 0, \ "Display a help message and exit.") \ OP (opt_version, "V", "version", 0, \ "Display a release identifier string") \ OP2 (opt_version, 0, 0, 0, "and exit.") \ OP (opt_random, "r", "random", 0, \ "Run the tests in random order.") \ OP (opt_iterations, "i", "iterations=n", 1, \ "Iterate N times.") \ OP (opt_repeat, 0, "repeat=n", 1, \ "Repeat each test N times per iteration.") \ OP (opt_number, "n", "number=n", 1, \ "Run only test #N.") \ OP (opt_verbose, "v", "verbose", 0, \ "Run tests verbosely.") \ OP (opt_quiet, "q", "quiet", 0, \ "Produce no (ordinary) output.") \ OP (opt_dfa_cache_threshold, "D", "dfa-cache-threshold=N", 1, \ "Set the DFA cache GC threshold.") \ OP (opt_nfa_cache_threshold, "N", "nfa-cache-threshold=N", 1, \ "Set the NFA cache GC threshold.") enum options { OPTS (OPT_ENUM, OPT_IGN) }; struct opt_desc opts[] = { OPTS (OPT_DESC, OPT_DESC) {-1, 0, 0, 0, 0} }; static int exit_status = 0; static void test_failed (struct rx_test * test) { safe_printfmt (2, "FAILED: %s\n pattern: %s\n string: %s\n", test->name, test->pattern, test->string); exit_status = 1; } static int n_comps = 0; static int n_execs = 0; static void run_a_test (struct rx_test * test) { regex_t preg; int comp_result; int exec_result; regmatch_t pmatch[10]; comp_result = regcomp (&preg, test->pattern, test->cflags); ++n_comps; if (comp_result != test->compile_error) { char errbuf[1000]; regerror (comp_result, &preg, errbuf, sizeof (errbuf)); test_failed (test); safe_printfmt (2, " Expected regcomp to return %d, actually returned %d (%s)\n", test->compile_error, comp_result, errbuf); if (!comp_result) regfree (&preg); return; } if (comp_result) return; exec_result = regexec (&preg, test->string, test->n_match, pmatch, test->eflags); ++n_execs; if (!exec_result != test->is_match) { test_failed (test); safe_printfmt (2, " Expected regexec to return %d, actually returned %d\n", !test->is_match, exec_result); regfree (&preg); return; } { int x; for (x = 0; x < test->n_match; ++x) { if ( (pmatch[x].rm_so != test->pmatch[x].rm_so) || (pmatch[x].rm_eo != test->pmatch[x].rm_eo)) { test_failed (test); safe_printfmt (2, " Expected pmatch[%d] to be { rm_so == %d, rm_eo == %d } but got {%d, %d}.\n", x, (int)test->pmatch[x].rm_so, (int)test->pmatch[x].rm_eo, (int)pmatch[x].rm_so, (int)pmatch[x].rm_eo); regfree (&preg); return; } } } regfree (&preg); return; } int main (int argc, char * argv[]) { int errn; int x; int noisy; int quiet; int repeats; int iterations; int random_order; int number; unsigned long cache_size; int o; struct opt_parsed * option; noisy = 0; quiet = 0; iterations = 1; repeats = 1; random_order = 0; number = -1; option = 0; while (1) { o = opt_standard (lim_use_must_malloc, &option, opts, &argc, argv, program_name, usage, version_string, 0, opt_help_msg, opt_none, opt_version); if (o == opt_none) break; switch (o) { default: safe_printfmt (2, "unhandled option `%s'\n", option->opt_string); panic ("internal error parsing arguments"); usage_error: opt_usage (2, argv[0], program_name, usage, 1); panic_exit (); bogus_arg: safe_printfmt (2, "ill-formed argument for `%s' (`%s')\n", option->opt_string, option->arg_string); goto usage_error; case opt_random: random_order = 1; break; case opt_iterations: if (cvt_decimal_to_uint (&errn, &iterations, option->arg_string, str_length (option->arg_string))) goto bogus_arg; break; case opt_repeat: if (cvt_decimal_to_uint (&errn, &repeats, option->arg_string, str_length (option->arg_string))) goto bogus_arg; break; case opt_number: if (cvt_decimal_to_int (&errn, &number, option->arg_string, str_length (option->arg_string))) goto bogus_arg; if (number >= ((sizeof (rx_tests) / sizeof (rx_tests[0])) - 1)) { safe_printfmt (2, "test number out of range\n"); exit (1); } break; case opt_dfa_cache_threshold: if (cvt_decimal_to_ulong (&errn, &cache_size, option->arg_string, str_length (option->arg_string))) goto bogus_arg; rx_set_dfa_cache_threshold ((size_t)cache_size); break; case opt_nfa_cache_threshold: if (cvt_decimal_to_ulong (&errn, &cache_size, option->arg_string, str_length (option->arg_string))) goto bogus_arg; rx_set_nfa_cache_threshold ((size_t)cache_size); break; case opt_verbose: noisy = 1; break; case opt_quiet: quiet = 1; break; } } if (noisy && quiet) { safe_printfmt (2, "Can not be both verbose and quiet\n"); goto usage_error; } while (iterations--) { int r; if (number >= 0) { if (noisy) safe_printfmt (1, "%d %s\n", number, rx_tests[number].name); for (r = 0; r < repeats; ++r) { if (noisy && (repeats > 1)) safe_printfmt (1, "...%d", r); run_a_test (&rx_tests[number]); } if (noisy && (repeats > 1)) safe_printfmt (1, "\n"); } else { for (x = 0; rx_tests[x].pattern; ++x) { int y; if (random_order) y = random () % ((sizeof (rx_tests) / sizeof (rx_tests[0])) - 1); else y = x; if (noisy) safe_printfmt (1, "%d %s\n", y, rx_tests[y].name); for (r = 0; r < repeats; ++r) { if (noisy && (repeats > 1)) safe_printfmt (1, "...%d", r); run_a_test (&rx_tests[y]); } if (noisy && (repeats > 1)) safe_printfmt (1, "\n"); } } } if (!quiet) { size_t threshold; size_t failure_pt; size_t in_use; size_t high_water_mark; int dfa_hits; int dfa_misses; int dfa_total_hits; int dfa_total_misses; rx_dfa_cache_statistics (&threshold, &failure_pt, &in_use, &high_water_mark, &dfa_hits, &dfa_misses, &dfa_total_hits, &dfa_total_misses); safe_printfmt (1, "dfa cache stats:\n threshold %lu; failure_pt %lu\n in_use %lu; high_water_mark %lu\n hits %d; misses %d; total_hits %d; total_misses %d\n", (unsigned long)threshold, (unsigned long)failure_pt, (unsigned long)in_use, (unsigned long)high_water_mark, dfa_hits, dfa_misses, dfa_total_hits, dfa_total_misses); } if (!quiet) { size_t threshold; size_t failure_pt; size_t in_use; size_t high_water_mark; int nfa_hits; int nfa_misses; int nfa_saves; rx_nfa_cache_statistics (&threshold, &failure_pt, &in_use, &high_water_mark, &nfa_hits, &nfa_misses, &nfa_saves); safe_printfmt (1, "nfa cache stats:\n threshold %lu; failure_pt %lu\n in_use %lu; high_water_mark %lu\n hits %d; misses %d; saves %d\n", (unsigned long)threshold, (unsigned long)failure_pt, (unsigned long)in_use, (unsigned long)high_water_mark, nfa_hits, nfa_misses, nfa_saves); } { size_t dfa_bytes; size_t nfa_bytes; dfa_bytes = rx_flush_dfa_cache (); nfa_bytes = rx_flush_nfa_cache (); if (!quiet || dfa_bytes || nfa_bytes) { safe_printfmt (1, "memory retained by dfa cache: %lu bytes\n", (unsigned long)dfa_bytes); safe_printfmt (1, "memory retained by nfa cache: %lu bytes\n", (unsigned long)nfa_bytes); } if (dfa_bytes || nfa_bytes) exit_status = 1; } if (!quiet) { safe_printfmt (1, "%d regcomps, %d regexecs\n", n_comps, n_execs); safe_printfmt (1, "Posix and Rx extension validation tests %s\n", exit_status ? "failed" : "passed"); } exit (exit_status); } tla-1.3.5+dfsg/src/hackerlab/tests/rx-posix-tests/=generic-test-regex.c0000644000175000017500000000535110457621774024516 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:41:09 2001 (=generic-test-regex.c) */ /* =generic-test-regex.c - Correctness tests for Rx * **************************************************************** * Copyright (C) 2000 Thomas Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include #include #include struct regmatch_answer { regoff_t rm_so; regoff_t rm_eo; }; struct rx_test { unsigned char * name; unsigned char * pattern; int cflags; int compile_error; unsigned char * string; int eflags; int is_match; size_t n_match; struct regmatch_answer pmatch[11]; }; #include "posix-test-cases.h" static int exit_status = 0; static void test_failed (struct rx_test * test, int warning_only) { fprintf (stderr, "%s: %s\n pattern: %s\n string: %s\n", (warning_only ? "WARNING" : "FAILED"), test->name, test->pattern, test->string); exit_status = 1; } static int n_comps = 0; static int n_execs = 0; static void run_a_test (struct rx_test * test) { regex_t preg; int comp_result; int exec_result; regmatch_t pmatch[10]; comp_result = regcomp (&preg, test->pattern, test->cflags); ++n_comps; if (comp_result != test->compile_error) { char errbuf[1000]; int warning; warning = ((!comp_result) == (!test->compile_error)); regerror (comp_result, &preg, errbuf, sizeof (errbuf)); test_failed (test, warning); fprintf (stderr, " Expected regcomp to return %d, actually returned %d (%s)\n", test->compile_error, comp_result, errbuf); if (!warning) { if (!comp_result) regfree (&preg); return; } } if (comp_result) return; exec_result = regexec (&preg, test->string, test->n_match, pmatch, test->eflags); ++n_execs; if (!exec_result != test->is_match) { test_failed (test, 0); fprintf (stderr, " Expected regexec to return %d, actually returned %d\n", !test->is_match, exec_result); regfree (&preg); return; } { int x; for (x = 0; x < test->n_match; ++x) { if ( (pmatch[x].rm_so != test->pmatch[x].rm_so) || (pmatch[x].rm_eo != test->pmatch[x].rm_eo)) { test_failed (test, 0); fprintf (stderr, " Expected pmatch[%d] to be { rm_so == %d, rm_eo == %d } but got {%d, %d}.\n", x, (int)test->pmatch[x].rm_so, (int)test->pmatch[x].rm_eo, (int)pmatch[x].rm_so, (int)pmatch[x].rm_eo); regfree (&preg); return; } } } regfree (&preg); return; } int main (int argc, char * argv[]) { int x; for (x = 0; rx_tests[x].pattern; ++x) { printf ("%d %s\n", x, rx_tests[x].name); run_a_test (&rx_tests[x]); } exit (exit_status); } tla-1.3.5+dfsg/src/hackerlab/tests/rx-posix-tests/test-decls.h0000644000175000017500000000137210457621774022773 0ustar useruser/* test-decls.h - test decls.h * **************************************************************** * Copyright (C) 2000 Thomas Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef RX_TESTS_TEST_DECLSH #define RX_TESTS_TEST_DECLSH #include "hackerlab/rx-posix/regexps.h" struct regmatch_answer { regoff_t rm_so; regoff_t rm_eo; }; struct rx_test { t_uchar * name; t_uchar * pattern; int cflags; int compile_error; t_uchar * string; int eflags; int is_match; size_t n_match; struct regmatch_answer pmatch[11]; }; #include "hackerlab/tests/rx-posix-tests/test-cases.h" /* automatically generated __STDC__ prototypes */ #endif /* RX_TESTS_TEST_DECLSH */ tla-1.3.5+dfsg/src/hackerlab/tests/rx-posix-tests/test-dbug.c0000644000175000017500000000603310457621774022614 0ustar useruser/* test-dbug.c - test dbug.c * **************************************************************** * Copyright (C) 2000 Thomas Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/os/sys/types.h" #include "hackerlab/rx/dbug.h" #include "hackerlab/rx/nfa.h" #include "hackerlab/rx-posix/re8-parse.h" #include "hackerlab/rx-posix/regexps.h" #include "hackerlab/cmd/main.h" static t_uchar * program_name = "dbug-comp"; static t_uchar * usage = "[options] reegxp"; static t_uchar * version_string = "1.0"; #define OPTS(OP, OP2) \ OP (opt_help_msg, "h", "help", 0, \ "Display a help message and exit.") \ OP (opt_version, "V", "version", 0, \ "Display a release identifier string") \ OP2 (opt_version, 0, 0, 0, "and exit.") \ OP (opt_extended, "x", "extended", 0, \ "Parse using ERE (extended) syntax.") \ OP (opt_newline, "n", "newline", 0, \ "Parse assuming newline separates lines.") \ OP (opt_dfa, "d", "dfa", 0, \ "Parse using DFA-only language variant.") \ OP (opt_nfa, "N", "nfa", 0, \ "Print the resulting nfa.") enum options { OPTS (OPT_ENUM, OPT_IGN) }; struct opt_desc opts[] = { OPTS (OPT_DESC, OPT_DESC) {-1, 0, 0, 0, 0} }; int main (int argc, char * argv[]) { int errn; int extended; int newline; int dfa; int nfa; int o; struct opt_parsed * option; extended = 0; newline = 0; dfa = 0; nfa = 0; option = 0; while (1) { o = opt_standard (lim_use_must_malloc, &option, opts, &argc, argv, program_name, usage, version_string, 0, opt_help_msg, opt_none, opt_version); if (o == opt_none) break; switch (o) { default: safe_printfmt (2, "unhandled option `%s'\n", option->opt_string); panic ("internal error parsing arguments"); usage_error: opt_usage (2, argv[0], program_name, usage, 1); panic_exit (); #if 0 bogus_arg: safe_printfmt (2, "ill-formed argument for `%s' (`%s')\n", option->opt_string, option->arg_string); goto usage_error; #endif case opt_extended: extended = 1; break; case opt_newline: newline = 1; break; case opt_dfa: dfa = 1; break; case opt_nfa: nfa = 1; break; } } if (argc != 2) goto usage_error; { struct rx_exp_node * exp; struct rx_exp_node ** subexps; int nsub; int err; err = rx_parse (&exp, &nsub, (char *)argv[1], str_length (argv[1]), extended, newline, dfa, 256, 0); if (err) printfmt (&errn, 1, "compilation error (%d): %s\n", err, rx_error_msg[err]); else { subexps = 0; nsub = 1; rx_analyze_rexp (&subexps, &nsub, exp); rx_print_rexp (1, 256, 0, exp); if (nfa) { struct rx_nfa * rx; struct rx_nfa_state * start; struct rx_nfa_state * end; printfmt (&errn, 1, "\n\n"); rx = rx_nfa_xalloc (256); start = end = 0; rx_build_nfa (rx, exp, &start, &end); rx_set_start_state (rx, start); rx_set_state_label (rx, end, 1); rx_print_nfa (1, rx); } } } return 0; } tla-1.3.5+dfsg/src/hackerlab/tests/rx-posix-tests/posix-test-cases.h0000644000175000017500000025016110457621774024141 0ustar useruserstruct rx_test rx_tests[] = { { "posix-2.8.3.1-0", "a", 0, 0, "a", 0, 1, 1, {{0, 1}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.1-1", "\\.", 0, 0, ".", 0, 1, 1, {{0, 1}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.1-2", "\\[", 0, 0, "[", 0, 1, 1, {{0, 1}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.1-3", "\\\\", 0, 0, "\\", 0, 1, 1, {{0, 1}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.1-4", "\\*", 0, 0, "*", 0, 1, 1, {{0, 1}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.1-5", "\\^", 0, 0, "^", 0, 1, 1, {{0, 1}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.1-6", "\\$", 0, 0, "$", 0, 1, 1, {{0, 1}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.1-7", "\\", 0, REG_EESCAPE, "", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.1-8", "x\\.", 0, 0, "x.", 0, 1, 1, {{0, 2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.1-9", "x\\[", 0, 0, "x[", 0, 1, 1, {{0, 2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.1-10", "x\\\\", 0, 0, "x\\", 0, 1, 1, {{0, 2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.1-11", "x\\*", 0, 0, "x*", 0, 1, 1, {{0, 2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.1-12", "x\\^", 0, 0, "x^", 0, 1, 1, {{0, 2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.1-13", "x\\$", 0, 0, "x$", 0, 1, 1, {{0, 2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.1-14", "x\\", 0, REG_EESCAPE, "", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.1.3-0", ".", 0, 0, "a", 0, 1, 1, {{0, 1}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.1.3-1", ".", 0, 0, "\n", 0, 1, 1, {{0, 1}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-0", "[]x]", 0, 0, "]", 0, 1, 1, {{0, 1}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-0", "[]x]", REG_EXTENDED, 0, "]", 0, 1, 1, {{0, 1}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-1", "[]x]", 0, 0, "x", 0, 1, 1, {{0, 1}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-1", "[]x]", REG_EXTENDED, 0, "x", 0, 1, 1, {{0, 1}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-2", "[]", 0, REG_EBRACK, "", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-2", "[]", REG_EXTENDED, REG_EBRACK, "", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-3", "[.]", 0, 0, ".", 0, 1, 1, {{0, 1}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-3", "[.]", REG_EXTENDED, 0, ".", 0, 1, 1, {{0, 1}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-4", "[.]", 0, 0, "a", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-4", "[.]", REG_EXTENDED, 0, "a", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-5", "[*]", 0, 0, "*", 0, 1, 1, {{0, 1}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-5", "[*]", REG_EXTENDED, 0, "*", 0, 1, 1, {{0, 1}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-6", "[[]", 0, 0, "[", 0, 1, 1, {{0, 1}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-6", "[[]", REG_EXTENDED, 0, "[", 0, 1, 1, {{0, 1}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-7", "[\\]", 0, 0, "\\", 0, 1, 1, {{0, 1}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-7", "[\\]", REG_EXTENDED, 0, "\\", 0, 1, 1, {{0, 1}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-8", "[[.]", 0, REG_ECOLLATE, "", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-8", "[[.]", REG_EXTENDED, REG_ECOLLATE, "", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-9", "[[=]", 0, REG_ECOLLATE, "", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-9", "[[=]", REG_EXTENDED, REG_ECOLLATE, "", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-10", "[[:]", 0, REG_ECTYPE, "", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-10", "[[:]", REG_EXTENDED, REG_ECTYPE, "", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-11", "[abc]", 0, 0, "a", 0, 1, 1, {{0, 1}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-11", "[abc]", REG_EXTENDED, 0, "a", 0, 1, 1, {{0, 1}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-12", "[abc]", 0, 0, "b", 0, 1, 1, {{0, 1}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-12", "[abc]", REG_EXTENDED, 0, "b", 0, 1, 1, {{0, 1}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-13", "[abc]", 0, 0, "c", 0, 1, 1, {{0, 1}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-13", "[abc]", REG_EXTENDED, 0, "c", 0, 1, 1, {{0, 1}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-14", "[abc]", 0, 0, "d", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-14", "[abc]", REG_EXTENDED, 0, "d", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-15", "x[abc]", 0, 0, "xa", 0, 1, 1, {{0, 2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-15", "x[abc]", REG_EXTENDED, 0, "xa", 0, 1, 1, {{0, 2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-16", "x[abc]", 0, 0, "xb", 0, 1, 1, {{0, 2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-16", "x[abc]", REG_EXTENDED, 0, "xb", 0, 1, 1, {{0, 2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-17", "x[abc]", 0, 0, "xc", 0, 1, 1, {{0, 2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-17", "x[abc]", REG_EXTENDED, 0, "xc", 0, 1, 1, {{0, 2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-18", "x[abc]", 0, 0, "xd", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-18", "x[abc]", REG_EXTENDED, 0, "xd", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-19", "[^abc]", 0, 0, "a", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-19", "[^abc]", REG_EXTENDED, 0, "a", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-20", "[^abc]", 0, 0, "b", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-20", "[^abc]", REG_EXTENDED, 0, "b", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-21", "[^abc]", 0, 0, "c", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-21", "[^abc]", REG_EXTENDED, 0, "c", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-22", "[^abc]", 0, 0, "d", 0, 1, 1, {{0, 1}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-22", "[^abc]", REG_EXTENDED, 0, "d", 0, 1, 1, {{0, 1}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-23", "x[^abc]", 0, 0, "xa", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-23", "x[^abc]", REG_EXTENDED, 0, "xa", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-24", "x[^abc]", 0, 0, "xb", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-24", "x[^abc]", REG_EXTENDED, 0, "xb", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-25", "x[^abc]", 0, 0, "xc", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-25", "x[^abc]", REG_EXTENDED, 0, "xc", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-26", "x[^abc]", 0, 0, "xd", 0, 1, 1, {{0, 2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-26", "x[^abc]", REG_EXTENDED, 0, "xd", 0, 1, 1, {{0, 2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-27", "[[:alnum:]][[:alnum:]]*", 0, 0, "%abc123890XYZ=", 0, 1, 1, {{1, 13}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-27", "[[:alnum:]][[:alnum:]]*", REG_EXTENDED, 0, "%abc123890XYZ=", 0, 1, 1, {{1, 13}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-28", "[[:cntrl:]][[:cntrl:]]*", 0, 0, "%\n\t\015\f ", 0, 1, 1, {{1, 5}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-28", "[[:cntrl:]][[:cntrl:]]*", REG_EXTENDED, 0, "%\n\t\015\f ", 0, 1, 1, {{1, 5}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-29", "[[:lower:]][[:lower:]]*", 0, 0, "AbcdE", 0, 1, 1, {{1, 4}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-29", "[[:lower:]][[:lower:]]*", REG_EXTENDED, 0, "AbcdE", 0, 1, 1, {{1, 4}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-30", "[[:lower:]][[:lower:]]*", REG_ICASE, 0, "AbcdE", 0, 1, 1, {{0, 5}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-30", "[[:lower:]][[:lower:]]*", REG_EXTENDED | REG_ICASE, 0, "AbcdE", 0, 1, 1, {{0, 5}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-31", "[[:space:]][[:space:]]*", REG_ICASE, 0, "x \t\f\nx", 0, 1, 1, {{1, 5}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-31", "[[:space:]][[:space:]]*", REG_EXTENDED | REG_ICASE, 0, "x \t\f\nx", 0, 1, 1, {{1, 5}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-32", "[[:alpha:]][[:alpha:]]*", 0, 0, "%abC123890xyz=", 0, 1, 1, {{1, 4}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-32", "[[:alpha:]][[:alpha:]]*", REG_EXTENDED, 0, "%abC123890xyz=", 0, 1, 1, {{1, 4}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-33", "[[:digit:]][[:digit:]]*", 0, 0, "%abC123890xyz=", 0, 1, 1, {{4, 10}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-33", "[[:digit:]][[:digit:]]*", REG_EXTENDED, 0, "%abC123890xyz=", 0, 1, 1, {{4, 10}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-34", "[[:print:]][[:print:]]*", 0, 0, "\n %abC12\f", 0, 1, 1, {{1, 8}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-34", "[[:print:]][[:print:]]*", REG_EXTENDED, 0, "\n %abC12\f", 0, 1, 1, {{1, 8}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-35", "[[:upper:]][[:upper:]]*", 0, 0, "\n aBCDEFGHIJKLMNOPQRSTUVWXYz", 0, 1, 1, {{3, 27}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-35", "[[:upper:]][[:upper:]]*", REG_EXTENDED, 0, "\n aBCDEFGHIJKLMNOPQRSTUVWXYz", 0, 1, 1, {{3, 27}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-36", "[[:upper:]][[:upper:]]*", REG_ICASE, 0, "\n aBCDEFGHIJKLMNOPQRSTUVWXYz", 0, 1, 1, {{2, 28}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-36", "[[:upper:]][[:upper:]]*", REG_EXTENDED | REG_ICASE, 0, "\n aBCDEFGHIJKLMNOPQRSTUVWXYz", 0, 1, 1, {{2, 28}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-37", "[[:blank:]][[:blank:]]*", REG_ICASE, 0, "\na \t b", 0, 1, 1, {{2, 5}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-37", "[[:blank:]][[:blank:]]*", REG_EXTENDED | REG_ICASE, 0, "\na \t b", 0, 1, 1, {{2, 5}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-38", "[[:graph:]][[:graph:]]*", 0, 0, "\n %abC12\f", 0, 1, 1, {{2, 8}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-38", "[[:graph:]][[:graph:]]*", REG_EXTENDED, 0, "\n %abC12\f", 0, 1, 1, {{2, 8}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-39", "[[:punct:]][[:punct:]]*", 0, 0, "a~!@#$%^&*()_+=-`[]{};':\"|\\,./?>< ", 0, 1, 1, {{1, 33}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-39", "[[:punct:]][[:punct:]]*", REG_EXTENDED, 0, "a~!@#$%^&*()_+=-`[]{};':\"|\\,./?>< ", 0, 1, 1, {{1, 33}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-40", "[[:xdigit:]][[:xdigit:]]*", 0, 0, "-0123456789ABCDEFabcdef", 0, 1, 1, {{1, 23}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-40", "[[:xdigit:]][[:xdigit:]]*", REG_EXTENDED, 0, "-0123456789ABCDEFabcdef", 0, 1, 1, {{1, 23}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-41", "[a-z][a-z]*", 0, 0, "ABCabcxyzABC", 0, 1, 1, {{3, 9}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-41", "[a-z][a-z]*", REG_EXTENDED, 0, "ABCabcxyzABC", 0, 1, 1, {{3, 9}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-42", "[a-z][z-a]*", 0, REG_ERANGE, "", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-42", "[a-z][z-a]*", REG_EXTENDED, REG_ERANGE, "", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-43", "[a-a][a-a]*", 0, 0, "zaaaaab", 0, 1, 1, {{1, 6}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-43", "[a-a][a-a]*", REG_EXTENDED, 0, "zaaaaab", 0, 1, 1, {{1, 6}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-44", "[a-a][a-a]*", REG_ICASE, 0, "ZAAAAAB", 0, 1, 1, {{1, 6}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-44", "[a-a][a-a]*", REG_EXTENDED | REG_ICASE, 0, "ZAAAAAB", 0, 1, 1, {{1, 6}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-45", "[--Z][--Z]*", 0, 0, "!ABC-./XYZ~", 0, 1, 1, {{1, 10}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-45", "[--Z][--Z]*", REG_EXTENDED, 0, "!ABC-./XYZ~", 0, 1, 1, {{1, 10}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-46", "[*--Z][*--Z]*", 0, 0, "!+*,---ABC", 0, 1, 1, {{1, 7}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-46", "[*--Z][*--Z]*", REG_EXTENDED, 0, "!+*,---ABC", 0, 1, 1, {{1, 7}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-47", "[a-][a-]*", 0, 0, "xa-a--a-ay", 0, 1, 1, {{1, 9}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-47", "[a-][a-]*", REG_EXTENDED, 0, "xa-a--a-ay", 0, 1, 1, {{1, 9}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-48", "[a[.-.]z][a[.-.]z]*", 0, 0, "ba-a-a-zw", 0, 1, 1, {{1, 8}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-48", "[a[.-.]z][a[.-.]z]*", REG_EXTENDED, 0, "ba-a-a-zw", 0, 1, 1, {{1, 8}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-49", "[[.a.]-[.z.]][[.a.]-z]*", 0, 0, "ABCabcxyzABC", 0, 1, 1, {{3, 9}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-49", "[[.a.]-[.z.]][[.a.]-z]*", REG_EXTENDED, 0, "ABCabcxyzABC", 0, 1, 1, {{3, 9}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-50", "[[.a.]-[.a.]][[.a.]-[.a.]]*", 0, 0, "zaaaaab", 0, 1, 1, {{1, 6}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-50", "[[.a.]-[.a.]][[.a.]-[.a.]]*", REG_EXTENDED, 0, "zaaaaab", 0, 1, 1, {{1, 6}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-51", "[a-[.a.]][[.a.]-a]*", REG_ICASE, 0, "ZAAAAAB", 0, 1, 1, {{1, 6}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-51", "[a-[.a.]][[.a.]-a]*", REG_EXTENDED | REG_ICASE, 0, "ZAAAAAB", 0, 1, 1, {{1, 6}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-52", "[[.-.]-[.Z.]][[.-.]-[.Z.]]*", 0, 0, "!ABC-./XYZ~", 0, 1, 1, {{1, 10}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-52", "[[.-.]-[.Z.]][[.-.]-[.Z.]]*", REG_EXTENDED, 0, "!ABC-./XYZ~", 0, 1, 1, {{1, 10}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-53", "[*--Z][*-[.-.]Z]*", 0, 0, "!+*,---ZABC", 0, 1, 1, {{1, 8}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-53", "[*--Z][*-[.-.]Z]*", REG_EXTENDED, 0, "!+*,---ZABC", 0, 1, 1, {{1, 8}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-54", "[[:digit:]a-z#$%][[:digit:]a-z#$%]*", 0, 0, "__abc#lmn012$x%yz789*", 0, 1, 1, {{2, 20}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-54", "[[:digit:]a-z#$%][[:digit:]a-z#$%]*", REG_EXTENDED, 0, "__abc#lmn012$x%yz789*", 0, 1, 1, {{2, 20}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-55", "[[:digit:]a-z#$%][[:digit:]a-z#$%]*", REG_ICASE, 0, "__abcLMN012x%#$yz789*", 0, 1, 1, {{2, 20}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-55", "[[:digit:]a-z#$%][[:digit:]a-z#$%]*", REG_EXTENDED | REG_ICASE, 0, "__abcLMN012x%#$yz789*", 0, 1, 1, {{2, 20}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-56", "[^[:digit:]a-z#$%][^[:digit:]a-z#$%]*", 0, 0, "abc#lmn012$x%yz789--@*,abc", 0, 1, 1, {{18, 23}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-56", "[^[:digit:]a-z#$%][^[:digit:]a-z#$%]*", REG_EXTENDED, 0, "abc#lmn012$x%yz789--@*,abc", 0, 1, 1, {{18, 23}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-57", "[^[:digit:]a-z#$%][^[:digit:]a-z#$%]*", REG_ICASE, 0, "abC#LMn012$x%yz789--@*,abc", 0, 1, 1, {{18, 23}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-57", "[^[:digit:]a-z#$%][^[:digit:]a-z#$%]*", REG_EXTENDED | REG_ICASE, 0, "abC#LMn012$x%yz789--@*,abc", 0, 1, 1, {{18, 23}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-58", "[^-][^-]*", 0, 0, "---afd*(&,ml---", 0, 1, 1, {{3, 12}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-58", "[^-][^-]*", REG_EXTENDED, 0, "---afd*(&,ml---", 0, 1, 1, {{3, 12}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-59", "[^--Z][^--Z]*", 0, 0, "---AFD*(&,ml---", 0, 1, 1, {{6, 12}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-59", "[^--Z][^--Z]*", REG_EXTENDED, 0, "---AFD*(&,ml---", 0, 1, 1, {{6, 12}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-60", "[^--Z][^--Z]*", REG_ICASE, 0, "---AFD*(&,ml---", 0, 1, 1, {{6, 10}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-60", "[^--Z][^--Z]*", REG_EXTENDED | REG_ICASE, 0, "---AFD*(&,ml---", 0, 1, 1, {{6, 10}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.3-0", "abc[def]ghi", 0, 0, "xabcdghiy", 0, 1, 1, {{1, 8}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.3-1", "abc\\(\\(de\\)\\(fg\\)\\)hi", 0, 0, "xabcdefghiy", 0, 1, 1, {{1, 10}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.3-2", "abc*def", 0, 0, "xabdefy", 0, 1, 1, {{1, 6}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.3-3", "abc*def", 0, 0, "xabcdefy", 0, 1, 1, {{1, 7}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.3-4", "abc*def", 0, 0, "xabcccccccdefy", 0, 1, 1, {{1, 13}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.3-5", "abc\\(def\\)*ghi", 0, 0, "xabcghiy", 0, 1, 1, {{1, 7}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.3-6", "abc\\(def\\)*ghi", 0, 0, "xabcdefghi", 0, 1, 1, {{1, 10}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.3-7", "abc\\(def\\)*ghi", 0, 0, "xabcdefdefdefghi", 0, 1, 1, {{1, 16}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.3-8", "abc\\{0,1\\}def", 0, 0, "xabdefy", 0, 1, 1, {{1, 6}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.3-9", "abc\\{0,1\\}def", 0, 0, "xabcdefy", 0, 1, 1, {{1, 7}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.3-10", "abc\\{0,1\\}def", 0, 0, "xabccdefy", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.3-11", "abc\\{1,3\\}def", 0, 0, "xabdefy", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.3-12", "abc\\{1,3\\}def", 0, 0, "xabcdefy", 0, 1, 1, {{1, 7}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.3-13", "abc\\{1,3\\}def", 0, 0, "xabccdefy", 0, 1, 1, {{1, 8}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.3-14", "abc\\{1,3\\}def", 0, 0, "xabcccdefy", 0, 1, 1, {{1, 9}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.3-15", "abc\\{1,3\\}def", 0, 0, "xabccccdefy", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.3-16", "abc\\{1,\\}def", 0, 0, "xabdefy", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.3-17", "abc\\{1,\\}def", 0, 0, "xabcdefy", 0, 1, 1, {{1, 7}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.3-18", "abc\\{1,\\}def", 0, 0, "xabccdefy", 0, 1, 1, {{1, 8}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.3-19", "abc\\{1,\\}def", 0, 0, "xabcccdefy", 0, 1, 1, {{1, 9}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.3-20", "abc\\{1,\\}def", 0, 0, "xabccccdefy", 0, 1, 1, {{1, 10}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.3-21", "abc\\{3\\}def", 0, 0, "xabdefy", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.3-22", "abc\\{3\\}def", 0, 0, "xabcdefy", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.3-23", "abc\\{3\\}def", 0, 0, "xabccdefy", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.3-24", "abc\\{3\\}def", 0, 0, "xabcccdefy", 0, 1, 1, {{1, 9}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.3-25", "abc\\{3\\}def", 0, 0, "xabccccdefy", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.3-26", "abc\\{ 1,3\\}def", 0, REG_BADBR, "", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.3-27", "abc\\{1 ,3\\}def", 0, REG_BADBR, "", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.3-28", "abc\\{1, 3\\}def", 0, REG_BADBR, "", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.3-29", "abc\\{1,3 \\}def", 0, REG_BADBR, "", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.3-30", "\\(\\(a*\\)\\)*x\\2", 0, 0, "ax", 0, 1, 3, {{0, 2}, {1, 1}, {1, 1}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.3-31", "\\(\\(a*\\)\\)*x\\2", 0, 0, "axa", 0, 1, 3, {{0, 3}, {0, 1}, {0, 1}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.3-32", "\\(\\(abc\\)*\\(abc\\)*\\)\\3", 0, 0, "abcabc", 0, 1, 4, {{0, 6}, {0, 3}, {-1, -1}, {0, 3}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.3-33", "\\(\\(abc\\)\\{0,1\\}\\(abc\\)\\{0,1\\}\\)\\3", 0, 0, "abcabc", 0, 1, 4, {{0, 6}, {0, 3}, {-1, -1}, {0, 3}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.3-34", "\\(\\(abc\\)\\{0,2\\}\\(abc\\)\\{0,2\\}\\)\\3", 0, 0, "abcabc", 0, 1, 4, {{0, 6}, {0, 3}, {-1, -1}, {0, 3}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.3-35", "a\\(b\\)c\\2", 0, REG_ESUBREG, "", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.3-36", "\\(abc\\)\\1", REG_ICASE, 0, "abcabc", 0, 1, 2, {{0, 6}, {0, 3}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.3-37", "\\(abc\\)\\1", REG_ICASE, 0, "aBcAbC", 0, 1, 2, {{0, 6}, {0, 3}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.5-0", "^abc", 0, 0, "abcdef", 0, 1, 1, {{0, 3}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.5-1", "^abc", 0, 0, "xyzabcdef", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.5-2", "^abc", 0, 0, "\nabcdef", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.5-3", "abc$", 0, 0, "defabc", 0, 1, 1, {{3, 6}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.5-4", "abc$", 0, 0, "defabc\n", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.5-5", "^abc$", 0, 0, "abc", 0, 1, 1, {{0, 3}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.5-6", "^abc$", 0, 0, "\nabc\n", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.5-7", "a\\{0,1\\}^bc", 0, 0, "bc", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.5-8", "a\\{0,1\\}^bc", 0, 0, "^bc", 0, 1, 1, {{0, 3}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.5-9", "a\\{0,1\\}^bc", 0, 0, "a^bc", 0, 1, 1, {{0, 4}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.5-10", "a^bc", 0, 0, "abc", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.5-11", "a^bc", 0, 0, "a^bc", 0, 1, 1, {{0, 4}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.5-12", "ab$c\\{0,1\\}", 0, 0, "ab", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.5-13", "ab$c\\{0,1\\}", 0, 0, "ab$", 0, 1, 1, {{0, 3}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.5-14", "ab$c\\{0,1\\}", 0, 0, "ab$c", 0, 1, 1, {{0, 4}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.5-15", "ab$c", 0, 0, "abc", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.5-16", "ab$c", 0, 0, "ab\nc", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.5-17", "ab$c", 0, 0, "ab$", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.5-18", "ab$c", 0, 0, "ab$c", 0, 1, 1, {{0, 4}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.1.1-0", "a", REG_EXTENDED, 0, "a", 0, 1, 1, {{0, 1}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.1.2-0", "\\.", REG_EXTENDED, 0, "a.b", 0, 1, 1, {{1, 2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.1.2-1", "\\[", REG_EXTENDED, 0, "a[b", 0, 1, 1, {{1, 2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.1.2-2", "\\\\", REG_EXTENDED, 0, "a\\b", 0, 1, 1, {{1, 2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.1.2-3", "\\(", REG_EXTENDED, 0, "a(b", 0, 1, 1, {{1, 2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.1.2-4", "\\*", REG_EXTENDED, 0, "a*b", 0, 1, 1, {{1, 2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.1.2-5", "\\+", REG_EXTENDED, 0, "a+b", 0, 1, 1, {{1, 2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.1.2-6", "\\?", REG_EXTENDED, 0, "a?b", 0, 1, 1, {{1, 2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.1.2-7", "\\|", REG_EXTENDED, 0, "a|b", 0, 1, 1, {{1, 2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.1.2-8", "\\^", REG_EXTENDED, 0, "a^b", 0, 1, 1, {{1, 2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.1.2-9", "\\$", REG_EXTENDED, 0, "a$b", 0, 1, 1, {{1, 2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.1.3-0", ".", REG_EXTENDED, 0, "a", 0, 1, 1, {{0, 1}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.1.3-1", ".", REG_EXTENDED, 0, "\n", 0, 1, 1, {{0, 1}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.3-0", "abc[def]ghi", REG_EXTENDED, 0, "xabcdghiy", 0, 1, 1, {{1, 8}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.3-1", "abc((de)(fg))hi", REG_EXTENDED, 0, "xabcdefghiy", 0, 1, 1, {{1, 10}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.3-2", "abc*def", REG_EXTENDED, 0, "xabdefy", 0, 1, 1, {{1, 6}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.3-3", "abc*def", REG_EXTENDED, 0, "xabcdefy", 0, 1, 1, {{1, 7}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.3-4", "abc*def", REG_EXTENDED, 0, "xabcccccccdefy", 0, 1, 1, {{1, 13}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.3-5", "abc(def)*ghi", REG_EXTENDED, 0, "xabcghiy", 0, 1, 1, {{1, 7}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.3-6", "abc(def)*ghi", REG_EXTENDED, 0, "xabcdefghi", 0, 1, 1, {{1, 10}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.3-7", "abc(def)*ghi", REG_EXTENDED, 0, "xabcdefdefdefghi", 0, 1, 1, {{1, 16}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.3-8", "abc+def", REG_EXTENDED, 0, "xabdefy", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.3-9", "abc+def", REG_EXTENDED, 0, "xabcdefy", 0, 1, 1, {{1, 7}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.3-10", "abc+def", REG_EXTENDED, 0, "xabcccccccdefy", 0, 1, 1, {{1, 13}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.3-11", "abc(def)+ghi", REG_EXTENDED, 0, "xabcghiy", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.3-12", "abc(def)+ghi", REG_EXTENDED, 0, "xabcdefghi", 0, 1, 1, {{1, 10}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.3-13", "abc(def)+ghi", REG_EXTENDED, 0, "xabcdefdefdefghi", 0, 1, 1, {{1, 16}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.3-14", "abc?def", REG_EXTENDED, 0, "xabdefy", 0, 1, 1, {{1, 6}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.3-15", "abc?def", REG_EXTENDED, 0, "xabcdefy", 0, 1, 1, {{1, 7}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.3-16", "abc?def", REG_EXTENDED, 0, "xabcccccccdefy", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.3-17", "abc(def)?ghi", REG_EXTENDED, 0, "xabcghiy", 0, 1, 1, {{1, 7}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.3-18", "abc(def)?ghi", REG_EXTENDED, 0, "xabcdefghi", 0, 1, 1, {{1, 10}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.3-19", "abc(def)?ghi", REG_EXTENDED, 0, "xabcdefdefdefghi", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.3-20", "abc{0,1}def", REG_EXTENDED, 0, "xabdefy", 0, 1, 1, {{1, 6}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.3-21", "abc{0,1}def", REG_EXTENDED, 0, "xabcdefy", 0, 1, 1, {{1, 7}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.3-22", "abc{0,1}def", REG_EXTENDED, 0, "xabccdefy", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.3-23", "abc{1,3}def", REG_EXTENDED, 0, "xabdefy", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.3-24", "abc{1,3}def", REG_EXTENDED, 0, "xabcdefy", 0, 1, 1, {{1, 7}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.3-25", "abc{1,3}def", REG_EXTENDED, 0, "xabccdefy", 0, 1, 1, {{1, 8}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.3-26", "abc{1,3}def", REG_EXTENDED, 0, "xabcccdefy", 0, 1, 1, {{1, 9}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.3-27", "abc{1,3}def", REG_EXTENDED, 0, "xabccccdefy", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.3-28", "abc{1,}def", REG_EXTENDED, 0, "xabdefy", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.3-29", "abc{1,}def", REG_EXTENDED, 0, "xabcdefy", 0, 1, 1, {{1, 7}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.3-30", "abc{1,}def", REG_EXTENDED, 0, "xabccdefy", 0, 1, 1, {{1, 8}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.3-31", "abc{1,}def", REG_EXTENDED, 0, "xabcccdefy", 0, 1, 1, {{1, 9}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.3-32", "abc{1,}def", REG_EXTENDED, 0, "xabccccdefy", 0, 1, 1, {{1, 10}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.3-33", "abc{3}def", REG_EXTENDED, 0, "xabdefy", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.3-34", "abc{3}def", REG_EXTENDED, 0, "xabcdefy", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.3-35", "abc{3}def", REG_EXTENDED, 0, "xabccdefy", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.3-36", "abc{3}def", REG_EXTENDED, 0, "xabcccdefy", 0, 1, 1, {{1, 9}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.3-37", "abc{3}def", REG_EXTENDED, 0, "xabccccdefy", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.3-38", "abc{ 1,3}def", REG_EXTENDED, REG_BADBR, "", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.3-39", "abc{1 ,3}def", REG_EXTENDED, REG_BADBR, "", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.3-40", "abc{1, 3}def", REG_EXTENDED, REG_BADBR, "", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.3-41", "abc{1,3 }def", REG_EXTENDED, REG_BADBR, "", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.3-42", "(wee|week)(night|knights)s*", REG_EXTENDED, 0, "weeknights", 0, 1, 3, {{0, 10}, {0, 3}, {3, 10}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.3-43", "(a|aaa)*", REG_EXTENDED, 0, "aaaa", 0, 1, 2, {{0, 4}, {1, 4}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.3-44", "(a|aaa){0,100}", REG_EXTENDED, 0, "aaaa", 0, 1, 2, {{0, 4}, {1, 4}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.3-45", "(wee|week)(night|knights)(s*)", REG_EXTENDED, 0, "weeknights", 0, 1, 4, {{0, 10}, {0, 3}, {3, 10}, {10, 10}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.3-46", "(week|wee)(knights|night)", REG_EXTENDED, 0, "weeknights", 0, 1, 3, {{0, 10}, {0, 3}, {3, 10}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.3-47", "(aaa|a)+", REG_EXTENDED, 0, "aaaa", 0, 1, 2, {{0, 4}, {1, 4}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.3-48", "(a*)*x\\1", REG_EXTENDED, 0, "aaaax", 0, 1, 2, {{0, 5}, {4, 4}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.3-49", "(a*)*x\\1(a*)", REG_EXTENDED, 0, "aaaaxaa", 0, 1, 3, {{0, 7}, {2, 4}, {7, 7}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.3-50", "(a*)*x(\\1a*)", REG_EXTENDED, 0, "aaaaxaa", 0, 1, 3, {{0, 7}, {2, 4}, {5, 7}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.3-51", "(a*)*x(\\1x)*(.*)", REG_EXTENDED, 0, "aaaaxxyy", 0, 1, 4, {{0, 8}, {4, 4}, {5, 6}, {6, 8}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.3-52", "(a{0,}){0,}x\\1", REG_EXTENDED, 0, "aaaax", 0, 1, 2, {{0, 5}, {4, 4}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.3-53", "(a{0,}){0,}x\\1(a{0,})", REG_EXTENDED, 0, "aaaaxaa", 0, 1, 3, {{0, 7}, {2, 4}, {7, 7}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.3-54", "(a{0,}){0,}x(\\1x){0,}(.{0,})", REG_EXTENDED, 0, "aaaaxxyy", 0, 1, 4, {{0, 8}, {4, 4}, {5, 6}, {6, 8}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.6-0", "a{0,1}^bc", REG_EXTENDED, 0, "bc", 0, 1, 1, {{0, 2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.6-1", "a{0,1}^bc", REG_EXTENDED, 0, "^bc", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.6-2", "a{0,1}^bc", REG_EXTENDED, 0, "a^bc", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.6-3", "a^bc", REG_EXTENDED, 0, "abc", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.6-4", "a^bc", REG_EXTENDED, 0, "a^bc", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.6-5", "ab$c{0,1}", REG_EXTENDED, 0, "ab", 0, 1, 1, {{0, 2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.6-6", "ab$c{0,1}", REG_EXTENDED, 0, "ab$", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.6-7", "ab$c{0,1}", REG_EXTENDED, 0, "ab$c", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.6-8", "ab$c", REG_EXTENDED, 0, "abc", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.6-9", "ab$c", REG_EXTENDED, 0, "ab\nc", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.6-10", "ab$c", REG_EXTENDED, 0, "ab$", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.6-11", "ab$c", REG_EXTENDED, 0, "ab$c", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-case-0", "xx", REG_ICASE, 0, "xX", 0, 1, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-case-0", "xx", REG_EXTENDED | REG_ICASE, 0, "xX", 0, 1, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-case-1", "xX", REG_ICASE, 0, "xx", 0, 1, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-case-1", "xX", REG_EXTENDED | REG_ICASE, 0, "xx", 0, 1, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-case-2", "x x", REG_ICASE, 0, "x X", 0, 1, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-case-2", "x x", REG_EXTENDED | REG_ICASE, 0, "x X", 0, 1, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-case-3", "x X", REG_ICASE, 0, "x x", 0, 1, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-case-3", "x X", REG_EXTENDED | REG_ICASE, 0, "x x", 0, 1, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-case-4", "x X", REG_ICASE, 0, "x y x", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-case-4", "x X", REG_EXTENDED | REG_ICASE, 0, "x y x", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-nosub-0", "^*x", REG_NOSUB, 0, "*x", 0, 1, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-nosub-1", "\\(*x\\)", REG_NOSUB, 0, "*x", 0, 1, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-nosub-3", "*x", REG_NOSUB, 0, "*x", 0, 1, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-nosub-4", "a\\{2,5\\}", REG_NOSUB, 0, "a", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-nosub-5", "a{2,5}", REG_EXTENDED | REG_NOSUB, 0, "a", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-nosub-6", "a\\{2,5\\}", REG_NOSUB, 0, "aa", 0, 1, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-nosub-7", "a{2,5}", REG_EXTENDED | REG_NOSUB, 0, "aa", 0, 1, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-nosub-8", "a\\{2,5\\}", REG_NOSUB, 0, "aaa", 0, 1, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-nosub-9", "a{2,5}", REG_EXTENDED | REG_NOSUB, 0, "aaa", 0, 1, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-nosub-10", "a\\{2,5\\}", REG_NOSUB, 0, "aaaa", 0, 1, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-nosub-11", "a{2,5}", REG_EXTENDED | REG_NOSUB, 0, "aaaa", 0, 1, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-nosub-12", "a\\{2,5\\}", REG_NOSUB, 0, "aaaaa", 0, 1, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-nosub-13", "a{2,5}", REG_EXTENDED | REG_NOSUB, 0, "aaaaa", 0, 1, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-nosub-14", "a\\{2,5\\}", REG_NOSUB, 0, "aaaaaa", 0, 1, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-nosub-15", "a{2,5}", REG_EXTENDED | REG_NOSUB, 0, "aaaaaa", 0, 1, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-nosub-16", "(abcd){10,11}", REG_EXTENDED | REG_NOSUB, 0, "abcd", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-nosub-17", "back-tracking oriented stream-of-solution functions", REG_EXTENDED | REG_NOSUB, 0, "in the spec, and the back-tracking oriented stream-of-solution functions", 0, 1, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-not_ol-0", "^abc", 0, 0, "abcdef", REG_NOTBOL, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-not_ol-0", "^abc", REG_EXTENDED, 0, "abcdef", REG_NOTBOL, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-not_ol-1", "^abc", 0, 0, "xyz\nabcdef", REG_NOTBOL, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-not_ol-1", "^abc", REG_EXTENDED, 0, "xyz\nabcdef", REG_NOTBOL, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-not_ol-2", "^abc", 0, 0, "xyzabcdef", REG_NOTBOL, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-not_ol-2", "^abc", REG_EXTENDED, 0, "xyzabcdef", REG_NOTBOL, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-not_ol-3", "^abc", 0, 0, "\nabcdef", REG_NOTBOL, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-not_ol-3", "^abc", REG_EXTENDED, 0, "\nabcdef", REG_NOTBOL, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-not_ol-4", "abc$", 0, 0, "defabc", REG_NOTEOL, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-not_ol-4", "abc$", REG_EXTENDED, 0, "defabc", REG_NOTEOL, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-not_ol-5", "abc$", 0, 0, "defabc\nghi", REG_NOTEOL, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-not_ol-5", "abc$", REG_EXTENDED, 0, "defabc\nghi", REG_NOTEOL, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-not_ol-6", "abc$", 0, 0, "defabc\n", REG_NOTEOL, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-not_ol-6", "abc$", REG_EXTENDED, 0, "defabc\n", REG_NOTEOL, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-not_ol-7", "^abc$", 0, 0, "abc", REG_NOTEOL, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-not_ol-7", "^abc$", REG_EXTENDED, 0, "abc", REG_NOTEOL, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-not_ol-8", "^abc$", 0, 0, "abc", REG_NOTBOL, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-not_ol-8", "^abc$", REG_EXTENDED, 0, "abc", REG_NOTBOL, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-not_ol-9", "^abc$", 0, 0, "abc", REG_NOTBOL | REG_NOTEOL, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-not_ol-9", "^abc$", REG_EXTENDED, 0, "abc", REG_NOTBOL | REG_NOTEOL, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-not_ol-10", "^abc$", 0, 0, "\nabc\n", REG_NOTBOL, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-not_ol-10", "^abc$", REG_EXTENDED, 0, "\nabc\n", REG_NOTBOL, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-not_ol-11", "^abc$", 0, 0, "\nabc\n", REG_NOTEOL, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-not_ol-11", "^abc$", REG_EXTENDED, 0, "\nabc\n", REG_NOTEOL, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-not_ol-12", "^abc$", 0, 0, "\nabc\n", REG_NOTBOL | REG_NOTEOL, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-not_ol-12", "^abc$", REG_EXTENDED, 0, "\nabc\n", REG_NOTBOL | REG_NOTEOL, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-complex-not_ol-0", "^a(b)*c", REG_EXTENDED, 0, "abcdef", REG_NOTBOL, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-complex-not_ol-1", "^a(b)*c", REG_EXTENDED, 0, "xyz\nabcdef", REG_NOTBOL, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-complex-not_ol-2", "^a(b)*c", REG_EXTENDED, 0, "xyzabcdef", REG_NOTBOL, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-complex-not_ol-3", "^a(b)*c", REG_EXTENDED, 0, "\nabcdef", REG_NOTBOL, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-complex-not_ol-4", "a(b)*c$", REG_EXTENDED, 0, "defabc", REG_NOTEOL, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-complex-not_ol-5", "a(b)*c$", REG_EXTENDED, 0, "defabc\nghi", REG_NOTEOL, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-complex-not_ol-6", "a(b)*c$", REG_EXTENDED, 0, "defabc\n", REG_NOTEOL, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-complex-not_ol-7", "^a(b)*c$", REG_EXTENDED, 0, "abc", REG_NOTEOL, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-complex-not_ol-8", "^a(b)*c$", REG_EXTENDED, 0, "abc", REG_NOTBOL, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-complex-not_ol-9", "^a(b)*c$", REG_EXTENDED, 0, "abc", REG_NOTBOL | REG_NOTEOL, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-complex-not_ol-10", "^a(b)*c$", REG_EXTENDED, 0, "\nabc\n", REG_NOTBOL, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-complex-not_ol-11", "^a(b)*c$", REG_EXTENDED, 0, "\na(b)*c\n", REG_NOTEOL, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-complex-not_ol-12", "^a(b)*c$", REG_EXTENDED, 0, "\nabc\n", REG_NOTBOL | REG_NOTEOL, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-newline-0", ".", 0, 0, "\n", 0, 1, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-newline-0", ".", REG_EXTENDED, 0, "\n", 0, 1, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-newline-1", ".", REG_NEWLINE, 0, "\n", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-newline-1", ".", REG_EXTENDED | REG_NEWLINE, 0, "\n", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-newline-2", "^abc", REG_NEWLINE, 0, "xyz\nabcdef\nxyz", 0, 1, 1, {{4, 7}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-newline-2", "^abc", REG_EXTENDED | REG_NEWLINE, 0, "xyz\nabcdef\nxyz", 0, 1, 1, {{4, 7}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-newline-3", "^abc", REG_NEWLINE, 0, "xyz\nxabcdef\nxyz", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-newline-3", "^abc", REG_EXTENDED | REG_NEWLINE, 0, "xyz\nxabcdef\nxyz", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-newline-4", "z$\nabc", REG_NEWLINE, 0, "xyz\nabcdef\nxyz", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-newline-5", "z$\nabc", REG_EXTENDED | REG_NEWLINE, 0, "xyz\nabcdef\nxyz", 0, 1, 1, {{2, 7}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-newline-6", "^abc", REG_NEWLINE, 0, "abc\nabcdef\nxyz", REG_NOTBOL, 1, 1, {{4, 7}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-newline-6", "^abc", REG_EXTENDED | REG_NEWLINE, 0, "abc\nabcdef\nxyz", REG_NOTBOL, 1, 1, {{4, 7}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-newline-7", "def$", REG_NEWLINE, 0, "xyz\nabcdef\nxyz", 0, 1, 1, {{7, 10}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-newline-7", "def$", REG_EXTENDED | REG_NEWLINE, 0, "xyz\nabcdef\nxyz", 0, 1, 1, {{7, 10}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-newline-8", "def$", REG_NEWLINE, 0, "xyz\nxabcdefx\nxyz", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-newline-8", "def$", REG_EXTENDED | REG_NEWLINE, 0, "xyz\nxabcdefx\nxyz", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-newline-9", "def$\nx", REG_NEWLINE, 0, "xyz\nabcdef\nxyz", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-newline-10", "def$\nx", REG_EXTENDED | REG_NEWLINE, 0, "xyz\nabcdef\nxyz", 0, 1, 1, {{7, 12}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-complex-newline-2", "^a(b)*c", REG_EXTENDED | REG_NEWLINE, 0, "xyz\nabcdef\nxyz", 0, 1, 2, {{4, 7}, {5, 6}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-complex-newline-3", "^a(b)*c", REG_EXTENDED | REG_NEWLINE, 0, "xyz\nxabcdef\nxyz", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-complex-newline-4", "z$\na(b)*c", REG_NEWLINE, 0, "xyz\nabcdef\nxyz", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-complex-newline-5", "z$\na(b)*c", REG_EXTENDED | REG_NEWLINE, 0, "xyz\nabcdef\nxyz", 0, 1, 2, {{2, 7}, {5, 6}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-complex-newline-6", "^a(b)*c", REG_EXTENDED | REG_NEWLINE, 0, "abc\nabcdef\nxyz", REG_NOTBOL, 1, 2, {{4, 7}, {5, 6}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-complex-newline-7", "d(e)f$", REG_EXTENDED | REG_NEWLINE, 0, "xyz\nabcdef\nxyz", 0, 1, 2, {{7, 10}, {8, 9}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-complex-newline-8", "d(e)f$", REG_EXTENDED | REG_NEWLINE, 0, "xyz\nxabcdefx\nxyz", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-complex-newline-9", "d(e)f$\nx", REG_NEWLINE, 0, "xyz\nabcdef\nxyz", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-complex-newline-10", "d(e)f$\nx", REG_EXTENDED | REG_NEWLINE, 0, "xyz\nabcdef\nxyz", 0, 1, 2, {{7, 12}, {8, 9}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-check-0", "^*x", 0, 0, "*x", 0, 1, 1, {{0, 2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-check-1", "\\(*x\\)", 0, 0, "*x", 0, 1, 2, {{0, 2}, {0, 2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-check-2", "*x", 0, 0, "*x", 0, 1, 1, {{0, 2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-check-3", "a\\{2,5\\}", 0, 0, "a", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-check-4", "a\\{2,5\\}", 0, 0, "aa", 0, 1, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-check-5", "a\\{2,5\\}", 0, 0, "aaa", 0, 1, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-check-6", "a\\{2,5\\}", 0, 0, "aaaa", 0, 1, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-check-7", "a\\{2,5\\}", 0, 0, "aaaaa", 0, 1, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-check-8", "a\\{2,5\\}", 0, 0, "aaaaaa", 0, 1, 1, {{0, 5}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-check-9", "(abcd){10,11}", REG_EXTENDED, 0, "abcd", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-check-10", "(abcd){9223372036854775808}", REG_EXTENDED, REG_BADBR, "", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-check-11", "back-tracking oriented stream-of-solution functions", REG_EXTENDED, 0, "in the spec, and the back-tracking oriented stream-of-solution functions", 0, 1, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-check-13", "\\(\\([-[:alnum:]]*\\)\\([-[:alnum:]][-[:alnum:]][-[:alnum:]]*\\)\\)--.*--\\(\\3\\)", 0, 0, "abcq--xyz--cq--abcq--xyz--foo--aqbc--xyz--sdlfj--abcq--sdlfq", 0, 1, 5, {{0, 53}, {0, 19}, {0, 15}, {15, 19}, {49, 53}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, {0, 0, 0, 0, 0, 0, 0, 0, {{0, 0}}} }; tla-1.3.5+dfsg/src/hackerlab/tests/rx-posix-tests/test-rx-size.c0000644000175000017500000000027310457621774023274 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:41:04 2001 (test-rx-size.c) */ void regexec(void); void regcomp(void); void regerror(void); int main () { regexec(); regcomp(); regerror(); return 0; } tla-1.3.5+dfsg/src/hackerlab/tests/rx-posix-tests/=pseudo-grep.c0000644000175000017500000000261110457621774023243 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:41:11 2001 (=pseudo-grep.c) */ /* =pseudo-grep.c - a pseudo-grep program for testing * **************************************************************** * Copyright (C) 2001 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include #include #include #ifdef RX #include "hackerlab/rx-posix/regex.h" #else #include #endif int main (int argc, char * argv[]) { char str[1024]; regex_t re; regmatch_t pos[1]; if (argc != 2) { fprintf (stderr, "usage: pseudo-grep regexp\n"); exit (1); } if (regcomp (&re, argv[1], REG_EXTENDED)) { fprintf (stderr, "regcomp error\n"); exit (1); } while (fgets (str, sizeof (str), stdin)) { int stat; int len; len = strlen (str); if (len && (str[len - 1] == '\n')) str[len - 1] = 0; stat = regexec (&re, str, 1, pos, 0); if (stat == REG_NOMATCH) continue; if (stat) { fprintf (stderr, "regexec error\n"); exit (1); } printf ("%.*s{{{%.*s}}}%.*s\n", (int)(pos[0].rm_so), str, (int)(pos[0].rm_eo - pos[0].rm_so), str + pos[0].rm_so, (int)(strlen (str) - pos[0].rm_eo), str + pos[0].rm_eo); } if (!feof (stdin)) { fprintf (stderr, "fgets error\n"); exit (1); } return 0; } tla-1.3.5+dfsg/src/hackerlab/tests/rx-posix-tests/Makefile.in0000644000175000017500000000054510457621774022621 0ustar useruser# tag: Tom Lord Tue Dec 4 14:52:14 2001 (rx-posix-tests/Makefile.in) # tested-headers := errnorx.h \ limits.h \ match-regexp.h \ posix.h \ re8-parse.h \ regexps.h test-headers := $(addprefix hackerlab/rx-posix/, $(tested-headers)) libs := $(objroot)/hackerlab/libhackerlab/libhackerlab.a -lm include $(makefiles)/unit-tests.mk tla-1.3.5+dfsg/src/hackerlab/tests/rx-posix-tests/DESC0000644000175000017500000000574710457621774021226 0ustar useruser# tag: Tom Lord Tue Dec 4 15:05:29 2001 (rx-posix-tests/DESC) # We test the installed header files to make sure they compile. test-rx Run a long series of hand-coded regexp tests. Each test tries to compile an expression and checks the result (which may be an expected failure). If the expression compiles, compare it to a string and check the result (which again, may be an expected failure). If the match succeeds, check the subexpression positions returned by `regexec'. Command line options can vary the NFA and DFA cache sizes. `test-rx.sh' runs with small, medium, and large caches. The complete set of tests can be repeated more than once and within each run of tests, each individual test can be repeated. `test-rx.sh' does this. If all tests pass, the NFA and DFA caches are flushed and the amount of memory retained by Rx is checked (using the features of "flux/mem/alloc-limits.h"). If Rx has leaked storage, the test fails. If a particular test fails, its test number and name are printed along with a description of the failure. The rest of the tests are run. "test-rx" exits with a non-0 status. This program can be used for debugging too, by specifying a specific test on the command line, or by asking that tests be run in random order. Tests are defined in "test-rx.scm" -- a Scheme program which generates header files for "test-rx.c" (the tests can also be run from Scheme). A subset of the tests test whether Rx conforms to the Posix.2 specification for regexps. Many subtle cases are tested and every other implementation we have tested fails some of these Posix-specific tests [19-Oct-2000]. test-rx exercises Rx's low-level features heavily, for strings of 8-bit characters. +generic-test-regex.c This program is not compiled automatically. +generic-test-regex is a simplified version of test-rx. It can be used to run the Posix-specific test cases with libc regex (or, with slight modification, any other version of regcomp/regexec). gcc -o +generic-test-regex -g ./+generic-test-regex.c On most systems, this is a good way to find bugs in other implementations. posix-decl-test.c A compile-only test. This program includes these files: #include #include #include "flux/rx-posix/regex.h" #include "flux/rx-posix/limits.h" It contains do-nothing code that verifies the presence of required fields in `regex_t' and `regmatch_t', definitions for required `regcomp' and `regexec' flags, and definitions for return values from `regcomp' and `regmatch', a definition for `RE_DUP_MAX'. Also contains redundant extern declarations for `regcomp', regexec', `regerror', and `regfree' to verify type signatures. rx-size A compile only program. This can be used to figure out what files are linked to a program that calls `regexec', `regcomp', and `regerror'. dbug-comp Not a test -- a debugging tool Compile a regexp supplied on the command line and print information about the compiled expression. tla-1.3.5+dfsg/src/hackerlab/tests/rx-posix-tests/unit-regex.c0000644000175000017500000000417610457621774023013 0ustar useruser/* unit-regex.c - A test of posix declarations. * **************************************************************** * Copyright (C) 2000 Thomas Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ /**************************************************************** * This program does no useful computation. * * * It does contain `#include' directives and declarations that can be * used to (partially) verify posix conformance. If this program * compiles correctly, the regexp declarations required by Posix * appear to be in order. * */ /**************************************************************** * A native implementation would use: * * #include * #include * #include * * to obtain all of the regexp declarations plus RE_DUP_MAX. * * As a non-native implementation, Rx uses: * */ #include "hackerlab/os/sys/types.h" #include "hackerlab/os/limits.h" #include "hackerlab/os/stdlib.h" #include "hackerlab/rx-posix/regexps.h" #include "hackerlab/rx-posix/limits.h" extern int regcomp (regex_t *preg, const char *pattern, int cflags); extern int regexec (const regex_t *preg, const char *string, size_t nmatch, regmatch_t pmatch[], int eflags); extern size_t regerror (int errcode, const regex_t *preg, char *errbuf, size_t errbuf_size); extern void regfree (regex_t *preg); int main (int argc, char * argv[]) { regex_t a_regex; regmatch_t a_regmatch; int cflags; int eflags; int ret_val; int dup_max; /* Required fields: */ a_regex.re_nsub = 1; a_regmatch.rm_so = 1; a_regmatch.rm_eo = 1; /* flags: */ cflags = (REG_EXTENDED | REG_ICASE | REG_NOSUB | REG_NEWLINE); eflags = (REG_NOTBOL | REG_NOTEOL); /* Return values: */ ret_val = REG_NOMATCH; ret_val = REG_BADPAT; ret_val = REG_ECOLLATE; ret_val = REG_ECTYPE; ret_val = REG_EESCAPE; ret_val = REG_ESUBREG; ret_val = REG_EBRACK; ret_val = REG_EPAREN; ret_val = REG_EBRACE; ret_val = REG_BADBR; ret_val = REG_ERANGE; ret_val = REG_ESPACE; ret_val = REG_BADRPT; dup_max = RE_DUP_MAX; exit (0); } tla-1.3.5+dfsg/src/hackerlab/tests/rx-posix-tests/=test.tcl0000644000175000017500000007710010457621774022335 0ustar useruser proc re-test { test_name pattern string should_match a b c d e f g h i j k } { set does_match [ regexp pattern string aa bb cc dd ee ff gg hh ii jj kk ] if {[expr $should_match != $does_match]} { puts "ERROR $test_name : should_match == $should_match, does_match == $does_match" } } re-test "posix-2.8.3.2-0" "[]x]" "]" 1 {0 0} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-2 -2} re-test "posix-2.8.3.2-1" "[]x]" "x" 1 {0 0} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-2 -2} re-test "posix-2.8.3.2-3" "[.]" "." 1 {0 0} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-2 -2} re-test "posix-2.8.3.2-4" "[.]" "a" 0 {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} re-test "posix-2.8.3.2-5" "[*]" "*" 1 {0 0} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-2 -2} re-test "posix-2.8.3.2-6" "[[]" "[" 1 {0 0} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-2 -2} re-test "posix-2.8.3.2-7" "[\\]" "\\" 1 {0 0} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-2 -2} re-test "posix-2.8.3.2-11" "[abc]" "a" 1 {0 0} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-2 -2} re-test "posix-2.8.3.2-12" "[abc]" "b" 1 {0 0} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-2 -2} re-test "posix-2.8.3.2-13" "[abc]" "c" 1 {0 0} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-2 -2} re-test "posix-2.8.3.2-14" "[abc]" "d" 0 {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} re-test "posix-2.8.3.2-15" "x[abc]" "xa" 1 {0 1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-2 -2} re-test "posix-2.8.3.2-16" "x[abc]" "xb" 1 {0 1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-2 -2} re-test "posix-2.8.3.2-17" "x[abc]" "xc" 1 {0 1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-2 -2} re-test "posix-2.8.3.2-18" "x[abc]" "xd" 0 {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} re-test "posix-2.8.3.2-19" "[^abc]" "a" 0 {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} re-test "posix-2.8.3.2-20" "[^abc]" "b" 0 {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} re-test "posix-2.8.3.2-21" "[^abc]" "c" 0 {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} re-test "posix-2.8.3.2-22" "[^abc]" "d" 1 {0 0} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-2 -2} re-test "posix-2.8.3.2-23" "x[^abc]" "xa" 0 {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} re-test "posix-2.8.3.2-24" "x[^abc]" "xb" 0 {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} re-test "posix-2.8.3.2-25" "x[^abc]" "xc" 0 {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} re-test "posix-2.8.3.2-26" "x[^abc]" "xd" 1 {0 1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-2 -2} re-test "posix-2.8.3.2-27" "[[:alnum:]][[:alnum:]]*" "%abc123890XYZ=" 1 {1 12} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-2 -2} re-test "posix-2.8.3.2-28" "[[:cntrl:]][[:cntrl:]]*" "%\n\t\015\f " 1 {1 4} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-2 -2} re-test "posix-2.8.3.2-29" "[[:lower:]][[:lower:]]*" "AbcdE" 1 {1 3} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-2 -2} re-test "posix-2.8.3.2-30" "[[:lower:]][[:lower:]]*" "AbcdE" 1 {0 4} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-2 -2} re-test "posix-2.8.3.2-30" "[[:lower:]][[:lower:]]*" "AbcdE" 1 {0 4} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-2 -2} re-test "posix-2.8.3.2-31" "[[:space:]][[:space:]]*" "x \t\f\nx" 1 {1 4} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-2 -2} re-test "posix-2.8.3.2-31" "[[:space:]][[:space:]]*" "x \t\f\nx" 1 {1 4} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-2 -2} re-test "posix-2.8.3.2-32" "[[:alpha:]][[:alpha:]]*" "%abC123890xyz=" 1 {1 3} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-2 -2} re-test "posix-2.8.3.2-33" "[[:digit:]][[:digit:]]*" "%abC123890xyz=" 1 {4 9} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-2 -2} re-test "posix-2.8.3.2-34" "[[:print:]][[:print:]]*" "\n %abC12\f" 1 {1 7} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-2 -2} re-test "posix-2.8.3.2-35" "[[:upper:]][[:upper:]]*" "\n aBCDEFGHIJKLMNOPQRSTUVWXYz" 1 {3 26} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-2 -2} re-test "posix-2.8.3.2-36" "[[:upper:]][[:upper:]]*" "\n aBCDEFGHIJKLMNOPQRSTUVWXYz" 1 {2 27} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-2 -2} re-test "posix-2.8.3.2-36" "[[:upper:]][[:upper:]]*" "\n aBCDEFGHIJKLMNOPQRSTUVWXYz" 1 {2 27} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-2 -2} re-test "posix-2.8.3.2-37" "[[:blank:]][[:blank:]]*" "\na \t b" 1 {2 4} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-2 -2} re-test "posix-2.8.3.2-37" "[[:blank:]][[:blank:]]*" "\na \t b" 1 {2 4} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-2 -2} re-test "posix-2.8.3.2-38" "[[:graph:]][[:graph:]]*" "\n %abC12\f" 1 {2 7} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-2 -2} re-test "posix-2.8.3.2-39" "[[:punct:]][[:punct:]]*" "a~!@#$%^&*()_+=-`[]{};':\"|\\,./?>< " 1 {1 32} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-2 -2} re-test "posix-2.8.3.2-40" "[[:xdigit:]][[:xdigit:]]*" "-0123456789ABCDEFabcdef" 1 {1 22} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-2 -2} re-test "posix-2.8.3.2-41" "[a-z][a-z]*" "ABCabcxyzABC" 1 {3 8} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-2 -2} re-test "posix-2.8.3.2-43" "[a-a][a-a]*" "zaaaaab" 1 {1 5} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-2 -2} re-test "posix-2.8.3.2-44" "[a-a][a-a]*" "ZAAAAAB" 1 {1 5} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-2 -2} re-test "posix-2.8.3.2-44" "[a-a][a-a]*" "ZAAAAAB" 1 {1 5} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-2 -2} re-test "posix-2.8.3.2-45" "[--Z][--Z]*" "!ABC-./XYZ~" 1 {1 9} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-2 -2} re-test "posix-2.8.3.2-46" "[*--Z][*--Z]*" "!+*,---ABC" 1 {1 6} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-2 -2} re-test "posix-2.8.3.2-47" "[a-][a-]*" "xa-a--a-ay" 1 {1 8} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-2 -2} re-test "posix-2.8.3.2-48" "[a[.-.]z][a[.-.]z]*" "ba-a-a-zw" 1 {1 7} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-2 -2} re-test "posix-2.8.3.2-49" "[[.a.]-[.z.]][[.a.]-z]*" "ABCabcxyzABC" 1 {3 8} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-2 -2} re-test "posix-2.8.3.2-50" "[[.a.]-[.a.]][[.a.]-[.a.]]*" "zaaaaab" 1 {1 5} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-2 -2} re-test "posix-2.8.3.2-51" "[a-[.a.]][[.a.]-a]*" "ZAAAAAB" 1 {1 5} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-2 -2} re-test "posix-2.8.3.2-51" "[a-[.a.]][[.a.]-a]*" "ZAAAAAB" 1 {1 5} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-2 -2} re-test "posix-2.8.3.2-52" "[[.-.]-[.Z.]][[.-.]-[.Z.]]*" "!ABC-./XYZ~" 1 {1 9} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-2 -2} re-test "posix-2.8.3.2-53" "[*--Z][*-[.-.]Z]*" "!+*,---ZABC" 1 {1 7} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-2 -2} re-test "posix-2.8.3.2-54" "[[:digit:]a-z#$%][[:digit:]a-z#$%]*" "__abc#lmn012$x%yz789*" 1 {2 19} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-2 -2} re-test "posix-2.8.3.2-55" "[[:digit:]a-z#$%][[:digit:]a-z#$%]*" "__abcLMN012x%#$yz789*" 1 {2 19} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-2 -2} re-test "posix-2.8.3.2-55" "[[:digit:]a-z#$%][[:digit:]a-z#$%]*" "__abcLMN012x%#$yz789*" 1 {2 19} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-2 -2} re-test "posix-2.8.3.2-56" "[^[:digit:]a-z#$%][^[:digit:]a-z#$%]*" "abc#lmn012$x%yz789--@*,abc" 1 {18 22} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-2 -2} re-test "posix-2.8.3.2-57" "[^[:digit:]a-z#$%][^[:digit:]a-z#$%]*" "abC#LMn012$x%yz789--@*,abc" 1 {18 22} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-2 -2} re-test "posix-2.8.3.2-57" "[^[:digit:]a-z#$%][^[:digit:]a-z#$%]*" "abC#LMn012$x%yz789--@*,abc" 1 {18 22} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-2 -2} re-test "posix-2.8.3.2-58" "[^-][^-]*" "---afd*(&,ml---" 1 {3 11} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-2 -2} re-test "posix-2.8.3.2-59" "[^--Z][^--Z]*" "---AFD*(&,ml---" 1 {6 11} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-2 -2} re-test "posix-2.8.3.2-60" "[^--Z][^--Z]*" "---AFD*(&,ml---" 1 {6 9} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-2 -2} re-test "posix-2.8.3.2-60" "[^--Z][^--Z]*" "---AFD*(&,ml---" 1 {6 9} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-2 -2} re-test "posix-2.8.3.3-36" "\\(abc\\)\\1" "abcabc" 1 {0 5} {0 2} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-2 -2} re-test "posix-2.8.3.3-37" "\\(abc\\)\\1" "aBcAbC" 1 {0 5} {0 2} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-2 -2} re-test "posix-2.8.4.1.1-0" "a" "a" 1 {0 0} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-2 -2} re-test "posix-2.8.4.1.2-0" "\\." "a.b" 1 {1 1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-2 -2} re-test "posix-2.8.4.1.2-1" "\\[" "a[b" 1 {1 1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-2 -2} re-test "posix-2.8.4.1.2-2" "\\\\" "a\\b" 1 {1 1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-2 -2} re-test "posix-2.8.4.1.2-3" "\\(" "a(b" 1 {1 1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-2 -2} re-test "posix-2.8.4.1.2-4" "\\*" "a*b" 1 {1 1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-2 -2} re-test "posix-2.8.4.1.2-5" "\\+" "a+b" 1 {1 1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-2 -2} re-test "posix-2.8.4.1.2-6" "\\?" "a?b" 1 {1 1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-2 -2} re-test "posix-2.8.4.1.2-7" "\\|" "a|b" 1 {1 1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-2 -2} re-test "posix-2.8.4.1.2-8" "\\^" "a^b" 1 {1 1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-2 -2} re-test "posix-2.8.4.1.2-9" "\\$" "a$b" 1 {1 1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-2 -2} re-test "posix-2.8.4.1.3-0" "." "a" 1 {0 0} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-2 -2} re-test "posix-2.8.4.1.3-1" "." "\n" 1 {0 0} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-2 -2} re-test "posix-2.8.4.3-0" "abc[def]ghi" "xabcdghiy" 1 {1 7} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-2 -2} re-test "posix-2.8.4.3-1" "abc((de)(fg))hi" "xabcdefghiy" 1 {1 9} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-2 -2} re-test "posix-2.8.4.3-2" "abc*def" "xabdefy" 1 {1 5} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-2 -2} re-test "posix-2.8.4.3-3" "abc*def" "xabcdefy" 1 {1 6} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-2 -2} re-test "posix-2.8.4.3-4" "abc*def" "xabcccccccdefy" 1 {1 12} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-2 -2} re-test "posix-2.8.4.3-5" "abc(def)*ghi" "xabcghiy" 1 {1 6} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-2 -2} re-test "posix-2.8.4.3-6" "abc(def)*ghi" "xabcdefghi" 1 {1 9} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-2 -2} re-test "posix-2.8.4.3-7" "abc(def)*ghi" "xabcdefdefdefghi" 1 {1 15} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-2 -2} re-test "posix-2.8.4.3-8" "abc+def" "xabdefy" 0 {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} re-test "posix-2.8.4.3-9" "abc+def" "xabcdefy" 1 {1 6} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-2 -2} re-test "posix-2.8.4.3-10" "abc+def" "xabcccccccdefy" 1 {1 12} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-2 -2} re-test "posix-2.8.4.3-11" "abc(def)+ghi" "xabcghiy" 0 {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} re-test "posix-2.8.4.3-12" "abc(def)+ghi" "xabcdefghi" 1 {1 9} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-2 -2} re-test "posix-2.8.4.3-13" "abc(def)+ghi" "xabcdefdefdefghi" 1 {1 15} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-2 -2} re-test "posix-2.8.4.3-14" "abc?def" "xabdefy" 1 {1 5} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-2 -2} re-test "posix-2.8.4.3-15" "abc?def" "xabcdefy" 1 {1 6} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-2 -2} re-test "posix-2.8.4.3-16" "abc?def" "xabcccccccdefy" 0 {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} re-test "posix-2.8.4.3-17" "abc(def)?ghi" "xabcghiy" 1 {1 6} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-2 -2} re-test "posix-2.8.4.3-18" "abc(def)?ghi" "xabcdefghi" 1 {1 9} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-2 -2} re-test "posix-2.8.4.3-19" "abc(def)?ghi" "xabcdefdefdefghi" 0 {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} re-test "posix-2.8.4.3-20" "abc{0,1}def" "xabdefy" 1 {1 5} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-2 -2} re-test "posix-2.8.4.3-21" "abc{0,1}def" "xabcdefy" 1 {1 6} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-2 -2} re-test "posix-2.8.4.3-22" "abc{0,1}def" "xabccdefy" 0 {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} re-test "posix-2.8.4.3-23" "abc{1,3}def" "xabdefy" 0 {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} re-test "posix-2.8.4.3-24" "abc{1,3}def" "xabcdefy" 1 {1 6} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-2 -2} re-test "posix-2.8.4.3-25" "abc{1,3}def" "xabccdefy" 1 {1 7} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-2 -2} re-test "posix-2.8.4.3-26" "abc{1,3}def" "xabcccdefy" 1 {1 8} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-2 -2} re-test "posix-2.8.4.3-27" "abc{1,3}def" "xabccccdefy" 0 {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} re-test "posix-2.8.4.3-28" "abc{1,}def" "xabdefy" 0 {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} re-test "posix-2.8.4.3-29" "abc{1,}def" "xabcdefy" 1 {1 6} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-2 -2} re-test "posix-2.8.4.3-30" "abc{1,}def" "xabccdefy" 1 {1 7} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-2 -2} re-test "posix-2.8.4.3-31" "abc{1,}def" "xabcccdefy" 1 {1 8} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-2 -2} re-test "posix-2.8.4.3-32" "abc{1,}def" "xabccccdefy" 1 {1 9} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-2 -2} re-test "posix-2.8.4.3-33" "abc{3}def" "xabdefy" 0 {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} re-test "posix-2.8.4.3-34" "abc{3}def" "xabcdefy" 0 {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} re-test "posix-2.8.4.3-35" "abc{3}def" "xabccdefy" 0 {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} re-test "posix-2.8.4.3-36" "abc{3}def" "xabcccdefy" 1 {1 8} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-2 -2} re-test "posix-2.8.4.3-37" "abc{3}def" "xabccccdefy" 0 {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} re-test "posix-2.8.4.3-42" "(wee|week)(night|knights)s*" "weeknights" 1 {0 9} {0 2} {3 9} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-2 -2} re-test "posix-2.8.4.3-43" "(a|aaa)*" "aaaa" 1 {0 3} {1 3} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-2 -2} re-test "posix-2.8.4.3-44" "(a|aaa){0,100}" "aaaa" 1 {0 3} {1 3} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-2 -2} re-test "posix-2.8.4.3-45" "(wee|week)(night|knights)(s*)" "weeknights" 1 {0 9} {0 2} {3 9} {10 9} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-2 -2} re-test "posix-2.8.4.3-46" "(week|wee)(knights|night)" "weeknights" 1 {0 9} {0 2} {3 9} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-2 -2} re-test "posix-2.8.4.3-47" "(aaa|a)+" "aaaa" 1 {0 3} {1 3} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-2 -2} re-test "posix-2.8.4.3-48" "(a*)*x\\1" "aaaax" 1 {0 4} {4 3} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-2 -2} re-test "posix-2.8.4.3-49" "(a*)*x\\1(a*)" "aaaaxaa" 1 {0 6} {2 3} {7 6} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-2 -2} re-test "posix-2.8.4.3-50" "(a*)*x(\\1a*)" "aaaaxaa" 1 {0 6} {2 3} {5 6} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-2 -2} re-test "posix-2.8.4.3-51" "(a*)*x(\\1x)*(.*)" "aaaaxxyy" 1 {0 7} {4 3} {5 5} {6 7} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-2 -2} re-test "posix-2.8.4.3-52" "(a{0,}){0,}x\\1" "aaaax" 1 {0 4} {4 3} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-2 -2} re-test "posix-2.8.4.3-53" "(a{0,}){0,}x\\1(a{0,})" "aaaaxaa" 1 {0 6} {2 3} {7 6} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-2 -2} re-test "posix-2.8.4.3-54" "(a{0,}){0,}x(\\1x){0,}(.{0,})" "aaaaxxyy" 1 {0 7} {4 3} {5 5} {6 7} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-2 -2} re-test "posix-2.8.4.6-0" "a{0,1}^bc" "bc" 1 {0 1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-2 -2} re-test "posix-2.8.4.6-1" "a{0,1}^bc" "^bc" 0 {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} re-test "posix-2.8.4.6-2" "a{0,1}^bc" "a^bc" 0 {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} re-test "posix-2.8.4.6-3" "a^bc" "abc" 0 {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} re-test "posix-2.8.4.6-4" "a^bc" "a^bc" 0 {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} re-test "posix-2.8.4.6-5" "ab$c{0,1}" "ab" 1 {0 1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-2 -2} re-test "posix-2.8.4.6-6" "ab$c{0,1}" "ab$" 0 {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} re-test "posix-2.8.4.6-7" "ab$c{0,1}" "ab$c" 0 {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} re-test "posix-2.8.4.6-8" "ab$c" "abc" 0 {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} re-test "posix-2.8.4.6-9" "ab$c" "ab\nc" 0 {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} re-test "posix-2.8.4.6-10" "ab$c" "ab$" 0 {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} re-test "posix-2.8.4.6-11" "ab$c" "ab$c" 0 {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} re-test "posix-case-0" "xx" "xX" 1 {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} re-test "posix-case-0" "xx" "xX" 1 {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} re-test "posix-case-1" "xX" "xx" 1 {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} re-test "posix-case-1" "xX" "xx" 1 {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} re-test "posix-case-2" "x x" "x X" 1 {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} re-test "posix-case-2" "x x" "x X" 1 {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} re-test "posix-case-3" "x X" "x x" 1 {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} re-test "posix-case-3" "x X" "x x" 1 {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} re-test "posix-case-4" "x X" "x y x" 0 {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} re-test "posix-case-4" "x X" "x y x" 0 {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} re-test "posix-nosub-0" "^*x" "*x" 1 {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} re-test "posix-nosub-1" "\\(*x\\)" "*x" 1 {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} re-test "posix-nosub-3" "*x" "*x" 1 {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} re-test "posix-nosub-4" "a\\{2,5\\}" "a" 0 {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} re-test "posix-nosub-5" "a{2,5}" "a" 0 {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} re-test "posix-nosub-6" "a\\{2,5\\}" "aa" 1 {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} re-test "posix-nosub-7" "a{2,5}" "aa" 1 {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} re-test "posix-nosub-8" "a\\{2,5\\}" "aaa" 1 {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} re-test "posix-nosub-9" "a{2,5}" "aaa" 1 {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} re-test "posix-nosub-10" "a\\{2,5\\}" "aaaa" 1 {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} re-test "posix-nosub-11" "a{2,5}" "aaaa" 1 {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} re-test "posix-nosub-12" "a\\{2,5\\}" "aaaaa" 1 {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} re-test "posix-nosub-13" "a{2,5}" "aaaaa" 1 {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} re-test "posix-nosub-14" "a\\{2,5\\}" "aaaaaa" 1 {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} re-test "posix-nosub-15" "a{2,5}" "aaaaaa" 1 {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} re-test "posix-nosub-16" "(abcd){10,11}" "abcd" 0 {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} re-test "posix-nosub-17" "back-tracking oriented stream-of-solution functions" "in the spec, and the back-tracking oriented stream-of-solution functions" 1 {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} re-test "posix-not_ol-0" "^abc" "abcdef" 0 {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} re-test "posix-not_ol-1" "^abc" "xyz\nabcdef" 0 {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} re-test "posix-not_ol-2" "^abc" "xyzabcdef" 0 {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} re-test "posix-not_ol-3" "^abc" "\nabcdef" 0 {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} re-test "posix-not_ol-4" "abc$" "defabc" 0 {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} re-test "posix-not_ol-5" "abc$" "defabc\nghi" 0 {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} re-test "posix-not_ol-6" "abc$" "defabc\n" 0 {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} re-test "posix-not_ol-7" "^abc$" "abc" 0 {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} re-test "posix-not_ol-8" "^abc$" "abc" 0 {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} re-test "posix-not_ol-9" "^abc$" "abc" 0 {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} re-test "posix-not_ol-10" "^abc$" "\nabc\n" 0 {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} re-test "posix-not_ol-11" "^abc$" "\nabc\n" 0 {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} re-test "posix-not_ol-12" "^abc$" "\nabc\n" 0 {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} re-test "posix-complex-not_ol-0" "^a(b)*c" "abcdef" 0 {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} re-test "posix-complex-not_ol-1" "^a(b)*c" "xyz\nabcdef" 0 {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} re-test "posix-complex-not_ol-2" "^a(b)*c" "xyzabcdef" 0 {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} re-test "posix-complex-not_ol-3" "^a(b)*c" "\nabcdef" 0 {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} re-test "posix-complex-not_ol-4" "a(b)*c$" "defabc" 0 {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} re-test "posix-complex-not_ol-5" "a(b)*c$" "defabc\nghi" 0 {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} re-test "posix-complex-not_ol-6" "a(b)*c$" "defabc\n" 0 {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} re-test "posix-complex-not_ol-7" "^a(b)*c$" "abc" 0 {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} re-test "posix-complex-not_ol-8" "^a(b)*c$" "abc" 0 {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} re-test "posix-complex-not_ol-9" "^a(b)*c$" "abc" 0 {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} re-test "posix-complex-not_ol-10" "^a(b)*c$" "\nabc\n" 0 {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} re-test "posix-complex-not_ol-11" "^a(b)*c$" "\na(b)*c\n" 0 {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} re-test "posix-complex-not_ol-12" "^a(b)*c$" "\nabc\n" 0 {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} re-test "posix-newline-0" "." "\n" 1 {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} re-test "posix-newline-1" "." "\n" 0 {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} re-test "posix-newline-1" "." "\n" 0 {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} re-test "posix-newline-2" "^abc" "xyz\nabcdef\nxyz" 1 {4 6} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-2 -2} re-test "posix-newline-2" "^abc" "xyz\nabcdef\nxyz" 1 {4 6} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-2 -2} re-test "posix-newline-3" "^abc" "xyz\nxabcdef\nxyz" 0 {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} re-test "posix-newline-3" "^abc" "xyz\nxabcdef\nxyz" 0 {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} re-test "posix-newline-4" "z$\nabc" "xyz\nabcdef\nxyz" 0 {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} re-test "posix-newline-5" "z$\nabc" "xyz\nabcdef\nxyz" 1 {2 6} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-2 -2} re-test "posix-newline-6" "^abc" "abc\nabcdef\nxyz" 1 {4 6} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-2 -2} re-test "posix-newline-6" "^abc" "abc\nabcdef\nxyz" 1 {4 6} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-2 -2} re-test "posix-newline-7" "def$" "xyz\nabcdef\nxyz" 1 {7 9} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-2 -2} re-test "posix-newline-7" "def$" "xyz\nabcdef\nxyz" 1 {7 9} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-2 -2} re-test "posix-newline-8" "def$" "xyz\nxabcdefx\nxyz" 0 {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} re-test "posix-newline-8" "def$" "xyz\nxabcdefx\nxyz" 0 {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} re-test "posix-newline-9" "def$\nx" "xyz\nabcdef\nxyz" 0 {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} re-test "posix-newline-10" "def$\nx" "xyz\nabcdef\nxyz" 1 {7 11} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-2 -2} re-test "posix-complex-newline-2" "^a(b)*c" "xyz\nabcdef\nxyz" 1 {4 6} {5 5} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-2 -2} re-test "posix-complex-newline-3" "^a(b)*c" "xyz\nxabcdef\nxyz" 0 {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} re-test "posix-complex-newline-4" "z$\na(b)*c" "xyz\nabcdef\nxyz" 0 {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} re-test "posix-complex-newline-5" "z$\na(b)*c" "xyz\nabcdef\nxyz" 1 {2 6} {5 5} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-2 -2} re-test "posix-complex-newline-6" "^a(b)*c" "abc\nabcdef\nxyz" 1 {4 6} {5 5} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-2 -2} re-test "posix-complex-newline-7" "d(e)f$" "xyz\nabcdef\nxyz" 1 {7 9} {8 8} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-2 -2} re-test "posix-complex-newline-8" "d(e)f$" "xyz\nxabcdefx\nxyz" 0 {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} re-test "posix-complex-newline-9" "d(e)f$\nx" "xyz\nabcdef\nxyz" 0 {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} re-test "posix-complex-newline-10" "d(e)f$\nx" "xyz\nabcdef\nxyz" 1 {7 11} {8 8} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-2 -2} re-test "posix-check-9" "(abcd){10,11}" "abcd" 0 {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} re-test "posix-check-11" "back-tracking oriented stream-of-solution functions" "in the spec, and the back-tracking oriented stream-of-solution functions" 1 {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} tla-1.3.5+dfsg/src/hackerlab/tests/rx-posix-tests/PLUGIN/0000755000175000017500000000000010457621774021546 5ustar userusertla-1.3.5+dfsg/src/hackerlab/tests/rx-posix-tests/PLUGIN/REQ0000644000175000017500000000003110457621774022112 0ustar useruserrx-tests rx-posix-tests tla-1.3.5+dfsg/src/hackerlab/tests/rx-posix-tests/test-cases.h0000644000175000017500000025545110457621774023010 0ustar useruserstruct rx_test rx_tests[] = { { "posix-2.8.3.1-0", "a", 0, 0, "a", 0, 1, 1, {{0, 1}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.1-1", "\\.", 0, 0, ".", 0, 1, 1, {{0, 1}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.1-2", "\\[", 0, 0, "[", 0, 1, 1, {{0, 1}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.1-3", "\\\\", 0, 0, "\\", 0, 1, 1, {{0, 1}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.1-4", "\\*", 0, 0, "*", 0, 1, 1, {{0, 1}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.1-5", "\\^", 0, 0, "^", 0, 1, 1, {{0, 1}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.1-6", "\\$", 0, 0, "$", 0, 1, 1, {{0, 1}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.1-7", "\\", 0, REG_EESCAPE, "", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.1-8", "x\\.", 0, 0, "x.", 0, 1, 1, {{0, 2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.1-9", "x\\[", 0, 0, "x[", 0, 1, 1, {{0, 2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.1-10", "x\\\\", 0, 0, "x\\", 0, 1, 1, {{0, 2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.1-11", "x\\*", 0, 0, "x*", 0, 1, 1, {{0, 2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.1-12", "x\\^", 0, 0, "x^", 0, 1, 1, {{0, 2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.1-13", "x\\$", 0, 0, "x$", 0, 1, 1, {{0, 2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.1-14", "x\\", 0, REG_EESCAPE, "", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.1.3-0", ".", 0, 0, "a", 0, 1, 1, {{0, 1}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.1.3-1", ".", 0, 0, "\n", 0, 1, 1, {{0, 1}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-0", "[]x]", 0, 0, "]", 0, 1, 1, {{0, 1}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-0", "[]x]", REG_EXTENDED, 0, "]", 0, 1, 1, {{0, 1}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-1", "[]x]", 0, 0, "x", 0, 1, 1, {{0, 1}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-1", "[]x]", REG_EXTENDED, 0, "x", 0, 1, 1, {{0, 1}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-2", "[]", 0, REG_EBRACK, "", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-2", "[]", REG_EXTENDED, REG_EBRACK, "", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-3", "[.]", 0, 0, ".", 0, 1, 1, {{0, 1}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-3", "[.]", REG_EXTENDED, 0, ".", 0, 1, 1, {{0, 1}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-4", "[.]", 0, 0, "a", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-4", "[.]", REG_EXTENDED, 0, "a", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-5", "[*]", 0, 0, "*", 0, 1, 1, {{0, 1}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-5", "[*]", REG_EXTENDED, 0, "*", 0, 1, 1, {{0, 1}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-6", "[[]", 0, 0, "[", 0, 1, 1, {{0, 1}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-6", "[[]", REG_EXTENDED, 0, "[", 0, 1, 1, {{0, 1}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-7", "[\\]", 0, 0, "\\", 0, 1, 1, {{0, 1}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-7", "[\\]", REG_EXTENDED, 0, "\\", 0, 1, 1, {{0, 1}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-8", "[[.]", 0, REG_ECOLLATE, "", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-8", "[[.]", REG_EXTENDED, REG_ECOLLATE, "", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-9", "[[=]", 0, REG_ECOLLATE, "", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-9", "[[=]", REG_EXTENDED, REG_ECOLLATE, "", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-10", "[[:]", 0, REG_ECTYPE, "", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-10", "[[:]", REG_EXTENDED, REG_ECTYPE, "", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-11", "[abc]", 0, 0, "a", 0, 1, 1, {{0, 1}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-11", "[abc]", REG_EXTENDED, 0, "a", 0, 1, 1, {{0, 1}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-12", "[abc]", 0, 0, "b", 0, 1, 1, {{0, 1}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-12", "[abc]", REG_EXTENDED, 0, "b", 0, 1, 1, {{0, 1}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-13", "[abc]", 0, 0, "c", 0, 1, 1, {{0, 1}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-13", "[abc]", REG_EXTENDED, 0, "c", 0, 1, 1, {{0, 1}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-14", "[abc]", 0, 0, "d", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-14", "[abc]", REG_EXTENDED, 0, "d", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-15", "x[abc]", 0, 0, "xa", 0, 1, 1, {{0, 2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-15", "x[abc]", REG_EXTENDED, 0, "xa", 0, 1, 1, {{0, 2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-16", "x[abc]", 0, 0, "xb", 0, 1, 1, {{0, 2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-16", "x[abc]", REG_EXTENDED, 0, "xb", 0, 1, 1, {{0, 2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-17", "x[abc]", 0, 0, "xc", 0, 1, 1, {{0, 2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-17", "x[abc]", REG_EXTENDED, 0, "xc", 0, 1, 1, {{0, 2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-18", "x[abc]", 0, 0, "xd", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-18", "x[abc]", REG_EXTENDED, 0, "xd", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-19", "[^abc]", 0, 0, "a", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-19", "[^abc]", REG_EXTENDED, 0, "a", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-20", "[^abc]", 0, 0, "b", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-20", "[^abc]", REG_EXTENDED, 0, "b", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-21", "[^abc]", 0, 0, "c", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-21", "[^abc]", REG_EXTENDED, 0, "c", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-22", "[^abc]", 0, 0, "d", 0, 1, 1, {{0, 1}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-22", "[^abc]", REG_EXTENDED, 0, "d", 0, 1, 1, {{0, 1}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-23", "x[^abc]", 0, 0, "xa", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-23", "x[^abc]", REG_EXTENDED, 0, "xa", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-24", "x[^abc]", 0, 0, "xb", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-24", "x[^abc]", REG_EXTENDED, 0, "xb", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-25", "x[^abc]", 0, 0, "xc", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-25", "x[^abc]", REG_EXTENDED, 0, "xc", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-26", "x[^abc]", 0, 0, "xd", 0, 1, 1, {{0, 2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-26", "x[^abc]", REG_EXTENDED, 0, "xd", 0, 1, 1, {{0, 2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-27", "[[:alnum:]][[:alnum:]]*", 0, 0, "%abc123890XYZ=", 0, 1, 1, {{1, 13}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-27", "[[:alnum:]][[:alnum:]]*", REG_EXTENDED, 0, "%abc123890XYZ=", 0, 1, 1, {{1, 13}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-28", "[[:cntrl:]][[:cntrl:]]*", 0, 0, "%\n\t\015\f ", 0, 1, 1, {{1, 5}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-28", "[[:cntrl:]][[:cntrl:]]*", REG_EXTENDED, 0, "%\n\t\015\f ", 0, 1, 1, {{1, 5}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-29", "[[:lower:]][[:lower:]]*", 0, 0, "AbcdE", 0, 1, 1, {{1, 4}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-29", "[[:lower:]][[:lower:]]*", REG_EXTENDED, 0, "AbcdE", 0, 1, 1, {{1, 4}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-30", "[[:lower:]][[:lower:]]*", REG_ICASE, 0, "AbcdE", 0, 1, 1, {{0, 5}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-30", "[[:lower:]][[:lower:]]*", REG_EXTENDED | REG_ICASE, 0, "AbcdE", 0, 1, 1, {{0, 5}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-31", "[[:space:]][[:space:]]*", REG_ICASE, 0, "x \t\f\nx", 0, 1, 1, {{1, 5}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-31", "[[:space:]][[:space:]]*", REG_EXTENDED | REG_ICASE, 0, "x \t\f\nx", 0, 1, 1, {{1, 5}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-32", "[[:alpha:]][[:alpha:]]*", 0, 0, "%abC123890xyz=", 0, 1, 1, {{1, 4}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-32", "[[:alpha:]][[:alpha:]]*", REG_EXTENDED, 0, "%abC123890xyz=", 0, 1, 1, {{1, 4}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-33", "[[:digit:]][[:digit:]]*", 0, 0, "%abC123890xyz=", 0, 1, 1, {{4, 10}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-33", "[[:digit:]][[:digit:]]*", REG_EXTENDED, 0, "%abC123890xyz=", 0, 1, 1, {{4, 10}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-34", "[[:print:]][[:print:]]*", 0, 0, "\n %abC12\f", 0, 1, 1, {{1, 8}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-34", "[[:print:]][[:print:]]*", REG_EXTENDED, 0, "\n %abC12\f", 0, 1, 1, {{1, 8}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-35", "[[:upper:]][[:upper:]]*", 0, 0, "\n aBCDEFGHIJKLMNOPQRSTUVWXYz", 0, 1, 1, {{3, 27}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-35", "[[:upper:]][[:upper:]]*", REG_EXTENDED, 0, "\n aBCDEFGHIJKLMNOPQRSTUVWXYz", 0, 1, 1, {{3, 27}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-36", "[[:upper:]][[:upper:]]*", REG_ICASE, 0, "\n aBCDEFGHIJKLMNOPQRSTUVWXYz", 0, 1, 1, {{2, 28}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-36", "[[:upper:]][[:upper:]]*", REG_EXTENDED | REG_ICASE, 0, "\n aBCDEFGHIJKLMNOPQRSTUVWXYz", 0, 1, 1, {{2, 28}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-37", "[[:blank:]][[:blank:]]*", REG_ICASE, 0, "\na \t b", 0, 1, 1, {{2, 5}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-37", "[[:blank:]][[:blank:]]*", REG_EXTENDED | REG_ICASE, 0, "\na \t b", 0, 1, 1, {{2, 5}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-38", "[[:graph:]][[:graph:]]*", 0, 0, "\n %abC12\f", 0, 1, 1, {{2, 8}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-38", "[[:graph:]][[:graph:]]*", REG_EXTENDED, 0, "\n %abC12\f", 0, 1, 1, {{2, 8}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-39", "[[:punct:]][[:punct:]]*", 0, 0, "a~!@#$%^&*()_+=-`[]{};':\"|\\,./?>< ", 0, 1, 1, {{1, 33}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-39", "[[:punct:]][[:punct:]]*", REG_EXTENDED, 0, "a~!@#$%^&*()_+=-`[]{};':\"|\\,./?>< ", 0, 1, 1, {{1, 33}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-40", "[[:xdigit:]][[:xdigit:]]*", 0, 0, "-0123456789ABCDEFabcdef", 0, 1, 1, {{1, 23}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-40", "[[:xdigit:]][[:xdigit:]]*", REG_EXTENDED, 0, "-0123456789ABCDEFabcdef", 0, 1, 1, {{1, 23}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-41", "[a-z][a-z]*", 0, 0, "ABCabcxyzABC", 0, 1, 1, {{3, 9}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-41", "[a-z][a-z]*", REG_EXTENDED, 0, "ABCabcxyzABC", 0, 1, 1, {{3, 9}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-42", "[a-z][z-a]*", 0, REG_ERANGE, "", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-42", "[a-z][z-a]*", REG_EXTENDED, REG_ERANGE, "", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-43", "[a-a][a-a]*", 0, 0, "zaaaaab", 0, 1, 1, {{1, 6}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-43", "[a-a][a-a]*", REG_EXTENDED, 0, "zaaaaab", 0, 1, 1, {{1, 6}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-44", "[a-a][a-a]*", REG_ICASE, 0, "ZAAAAAB", 0, 1, 1, {{1, 6}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-44", "[a-a][a-a]*", REG_EXTENDED | REG_ICASE, 0, "ZAAAAAB", 0, 1, 1, {{1, 6}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-45", "[--Z][--Z]*", 0, 0, "!ABC-./XYZ~", 0, 1, 1, {{1, 10}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-45", "[--Z][--Z]*", REG_EXTENDED, 0, "!ABC-./XYZ~", 0, 1, 1, {{1, 10}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-46", "[*--Z][*--Z]*", 0, 0, "!+*,---ABC", 0, 1, 1, {{1, 7}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-46", "[*--Z][*--Z]*", REG_EXTENDED, 0, "!+*,---ABC", 0, 1, 1, {{1, 7}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-47", "[a-][a-]*", 0, 0, "xa-a--a-ay", 0, 1, 1, {{1, 9}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-47", "[a-][a-]*", REG_EXTENDED, 0, "xa-a--a-ay", 0, 1, 1, {{1, 9}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-48", "[a[.-.]z][a[.-.]z]*", 0, 0, "ba-a-a-zw", 0, 1, 1, {{1, 8}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-48", "[a[.-.]z][a[.-.]z]*", REG_EXTENDED, 0, "ba-a-a-zw", 0, 1, 1, {{1, 8}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-49", "[[.a.]-[.z.]][[.a.]-z]*", 0, 0, "ABCabcxyzABC", 0, 1, 1, {{3, 9}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-49", "[[.a.]-[.z.]][[.a.]-z]*", REG_EXTENDED, 0, "ABCabcxyzABC", 0, 1, 1, {{3, 9}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-50", "[[.a.]-[.a.]][[.a.]-[.a.]]*", 0, 0, "zaaaaab", 0, 1, 1, {{1, 6}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-50", "[[.a.]-[.a.]][[.a.]-[.a.]]*", REG_EXTENDED, 0, "zaaaaab", 0, 1, 1, {{1, 6}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-51", "[a-[.a.]][[.a.]-a]*", REG_ICASE, 0, "ZAAAAAB", 0, 1, 1, {{1, 6}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-51", "[a-[.a.]][[.a.]-a]*", REG_EXTENDED | REG_ICASE, 0, "ZAAAAAB", 0, 1, 1, {{1, 6}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-52", "[[.-.]-[.Z.]][[.-.]-[.Z.]]*", 0, 0, "!ABC-./XYZ~", 0, 1, 1, {{1, 10}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-52", "[[.-.]-[.Z.]][[.-.]-[.Z.]]*", REG_EXTENDED, 0, "!ABC-./XYZ~", 0, 1, 1, {{1, 10}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-53", "[*--Z][*-[.-.]Z]*", 0, 0, "!+*,---ZABC", 0, 1, 1, {{1, 8}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-53", "[*--Z][*-[.-.]Z]*", REG_EXTENDED, 0, "!+*,---ZABC", 0, 1, 1, {{1, 8}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-54", "[[:digit:]a-z#$%][[:digit:]a-z#$%]*", 0, 0, "__abc#lmn012$x%yz789*", 0, 1, 1, {{2, 20}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-54", "[[:digit:]a-z#$%][[:digit:]a-z#$%]*", REG_EXTENDED, 0, "__abc#lmn012$x%yz789*", 0, 1, 1, {{2, 20}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-55", "[[:digit:]a-z#$%][[:digit:]a-z#$%]*", REG_ICASE, 0, "__abcLMN012x%#$yz789*", 0, 1, 1, {{2, 20}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-55", "[[:digit:]a-z#$%][[:digit:]a-z#$%]*", REG_EXTENDED | REG_ICASE, 0, "__abcLMN012x%#$yz789*", 0, 1, 1, {{2, 20}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-56", "[^[:digit:]a-z#$%][^[:digit:]a-z#$%]*", 0, 0, "abc#lmn012$x%yz789--@*,abc", 0, 1, 1, {{18, 23}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-56", "[^[:digit:]a-z#$%][^[:digit:]a-z#$%]*", REG_EXTENDED, 0, "abc#lmn012$x%yz789--@*,abc", 0, 1, 1, {{18, 23}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-57", "[^[:digit:]a-z#$%][^[:digit:]a-z#$%]*", REG_ICASE, 0, "abC#LMn012$x%yz789--@*,abc", 0, 1, 1, {{18, 23}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-57", "[^[:digit:]a-z#$%][^[:digit:]a-z#$%]*", REG_EXTENDED | REG_ICASE, 0, "abC#LMn012$x%yz789--@*,abc", 0, 1, 1, {{18, 23}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-58", "[^-][^-]*", 0, 0, "---afd*(&,ml---", 0, 1, 1, {{3, 12}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-58", "[^-][^-]*", REG_EXTENDED, 0, "---afd*(&,ml---", 0, 1, 1, {{3, 12}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-59", "[^--Z][^--Z]*", 0, 0, "---AFD*(&,ml---", 0, 1, 1, {{6, 12}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-59", "[^--Z][^--Z]*", REG_EXTENDED, 0, "---AFD*(&,ml---", 0, 1, 1, {{6, 12}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-60", "[^--Z][^--Z]*", REG_ICASE, 0, "---AFD*(&,ml---", 0, 1, 1, {{6, 10}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.2-60", "[^--Z][^--Z]*", REG_EXTENDED | REG_ICASE, 0, "---AFD*(&,ml---", 0, 1, 1, {{6, 10}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.3-0", "abc[def]ghi", 0, 0, "xabcdghiy", 0, 1, 1, {{1, 8}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.3-1", "abc\\(\\(de\\)\\(fg\\)\\)hi", 0, 0, "xabcdefghiy", 0, 1, 1, {{1, 10}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.3-2", "abc*def", 0, 0, "xabdefy", 0, 1, 1, {{1, 6}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.3-3", "abc*def", 0, 0, "xabcdefy", 0, 1, 1, {{1, 7}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.3-4", "abc*def", 0, 0, "xabcccccccdefy", 0, 1, 1, {{1, 13}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.3-5", "abc\\(def\\)*ghi", 0, 0, "xabcghiy", 0, 1, 1, {{1, 7}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.3-6", "abc\\(def\\)*ghi", 0, 0, "xabcdefghi", 0, 1, 1, {{1, 10}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.3-7", "abc\\(def\\)*ghi", 0, 0, "xabcdefdefdefghi", 0, 1, 1, {{1, 16}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.3-8", "abc\\{0,1\\}def", 0, 0, "xabdefy", 0, 1, 1, {{1, 6}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.3-9", "abc\\{0,1\\}def", 0, 0, "xabcdefy", 0, 1, 1, {{1, 7}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.3-10", "abc\\{0,1\\}def", 0, 0, "xabccdefy", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.3-11", "abc\\{1,3\\}def", 0, 0, "xabdefy", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.3-12", "abc\\{1,3\\}def", 0, 0, "xabcdefy", 0, 1, 1, {{1, 7}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.3-13", "abc\\{1,3\\}def", 0, 0, "xabccdefy", 0, 1, 1, {{1, 8}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.3-14", "abc\\{1,3\\}def", 0, 0, "xabcccdefy", 0, 1, 1, {{1, 9}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.3-15", "abc\\{1,3\\}def", 0, 0, "xabccccdefy", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.3-16", "abc\\{1,\\}def", 0, 0, "xabdefy", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.3-17", "abc\\{1,\\}def", 0, 0, "xabcdefy", 0, 1, 1, {{1, 7}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.3-18", "abc\\{1,\\}def", 0, 0, "xabccdefy", 0, 1, 1, {{1, 8}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.3-19", "abc\\{1,\\}def", 0, 0, "xabcccdefy", 0, 1, 1, {{1, 9}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.3-20", "abc\\{1,\\}def", 0, 0, "xabccccdefy", 0, 1, 1, {{1, 10}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.3-21", "abc\\{3\\}def", 0, 0, "xabdefy", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.3-22", "abc\\{3\\}def", 0, 0, "xabcdefy", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.3-23", "abc\\{3\\}def", 0, 0, "xabccdefy", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.3-24", "abc\\{3\\}def", 0, 0, "xabcccdefy", 0, 1, 1, {{1, 9}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.3-25", "abc\\{3\\}def", 0, 0, "xabccccdefy", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.3-26", "abc\\{ 1,3\\}def", 0, REG_BADBR, "", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.3-27", "abc\\{1 ,3\\}def", 0, REG_BADBR, "", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.3-28", "abc\\{1, 3\\}def", 0, REG_BADBR, "", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.3-29", "abc\\{1,3 \\}def", 0, REG_BADBR, "", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.3-30", "\\(\\(a*\\)\\)*x\\2", 0, 0, "ax", 0, 1, 3, {{0, 2}, {1, 1}, {1, 1}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.3-31", "\\(\\(a*\\)\\)*x\\2", 0, 0, "axa", 0, 1, 3, {{0, 3}, {0, 1}, {0, 1}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.3-32", "\\(\\(abc\\)*\\(abc\\)*\\)\\3", 0, 0, "abcabc", 0, 1, 4, {{0, 6}, {0, 3}, {-1, -1}, {0, 3}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.3-33", "\\(\\(abc\\)\\{0,1\\}\\(abc\\)\\{0,1\\}\\)\\3", 0, 0, "abcabc", 0, 1, 4, {{0, 6}, {0, 3}, {-1, -1}, {0, 3}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.3-34", "\\(\\(abc\\)\\{0,2\\}\\(abc\\)\\{0,2\\}\\)\\3", 0, 0, "abcabc", 0, 1, 4, {{0, 6}, {0, 3}, {-1, -1}, {0, 3}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.3-35", "a\\(b\\)c\\2", 0, REG_ESUBREG, "", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.3-36", "\\(abc\\)\\1", REG_ICASE, 0, "abcabc", 0, 1, 2, {{0, 6}, {0, 3}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.3-37", "\\(abc\\)\\1", REG_ICASE, 0, "aBcAbC", 0, 1, 2, {{0, 6}, {0, 3}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.5-0", "^abc", 0, 0, "abcdef", 0, 1, 1, {{0, 3}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.5-1", "^abc", 0, 0, "xyzabcdef", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.5-2", "^abc", 0, 0, "\nabcdef", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.5-3", "abc$", 0, 0, "defabc", 0, 1, 1, {{3, 6}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.5-4", "abc$", 0, 0, "defabc\n", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.5-5", "^abc$", 0, 0, "abc", 0, 1, 1, {{0, 3}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.5-6", "^abc$", 0, 0, "\nabc\n", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.5-7", "a\\{0,1\\}^bc", 0, 0, "bc", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.5-8", "a\\{0,1\\}^bc", 0, 0, "^bc", 0, 1, 1, {{0, 3}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.5-9", "a\\{0,1\\}^bc", 0, 0, "a^bc", 0, 1, 1, {{0, 4}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.5-10", "a^bc", 0, 0, "abc", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.5-11", "a^bc", 0, 0, "a^bc", 0, 1, 1, {{0, 4}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.5-12", "ab$c\\{0,1\\}", 0, 0, "ab", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.5-13", "ab$c\\{0,1\\}", 0, 0, "ab$", 0, 1, 1, {{0, 3}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.5-14", "ab$c\\{0,1\\}", 0, 0, "ab$c", 0, 1, 1, {{0, 4}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.5-15", "ab$c", 0, 0, "abc", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.5-16", "ab$c", 0, 0, "ab\nc", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.5-17", "ab$c", 0, 0, "ab$", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.3.5-18", "ab$c", 0, 0, "ab$c", 0, 1, 1, {{0, 4}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.1.1-0", "a", REG_EXTENDED, 0, "a", 0, 1, 1, {{0, 1}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.1.2-0", "\\.", REG_EXTENDED, 0, "a.b", 0, 1, 1, {{1, 2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.1.2-1", "\\[", REG_EXTENDED, 0, "a[b", 0, 1, 1, {{1, 2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.1.2-2", "\\\\", REG_EXTENDED, 0, "a\\b", 0, 1, 1, {{1, 2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.1.2-3", "\\(", REG_EXTENDED, 0, "a(b", 0, 1, 1, {{1, 2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.1.2-4", "\\*", REG_EXTENDED, 0, "a*b", 0, 1, 1, {{1, 2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.1.2-5", "\\+", REG_EXTENDED, 0, "a+b", 0, 1, 1, {{1, 2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.1.2-6", "\\?", REG_EXTENDED, 0, "a?b", 0, 1, 1, {{1, 2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.1.2-7", "\\|", REG_EXTENDED, 0, "a|b", 0, 1, 1, {{1, 2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.1.2-8", "\\^", REG_EXTENDED, 0, "a^b", 0, 1, 1, {{1, 2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.1.2-9", "\\$", REG_EXTENDED, 0, "a$b", 0, 1, 1, {{1, 2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.1.3-0", ".", REG_EXTENDED, 0, "a", 0, 1, 1, {{0, 1}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.1.3-1", ".", REG_EXTENDED, 0, "\n", 0, 1, 1, {{0, 1}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.3-0", "abc[def]ghi", REG_EXTENDED, 0, "xabcdghiy", 0, 1, 1, {{1, 8}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.3-1", "abc((de)(fg))hi", REG_EXTENDED, 0, "xabcdefghiy", 0, 1, 1, {{1, 10}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.3-2", "abc*def", REG_EXTENDED, 0, "xabdefy", 0, 1, 1, {{1, 6}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.3-3", "abc*def", REG_EXTENDED, 0, "xabcdefy", 0, 1, 1, {{1, 7}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.3-4", "abc*def", REG_EXTENDED, 0, "xabcccccccdefy", 0, 1, 1, {{1, 13}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.3-5", "abc(def)*ghi", REG_EXTENDED, 0, "xabcghiy", 0, 1, 1, {{1, 7}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.3-6", "abc(def)*ghi", REG_EXTENDED, 0, "xabcdefghi", 0, 1, 1, {{1, 10}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.3-7", "abc(def)*ghi", REG_EXTENDED, 0, "xabcdefdefdefghi", 0, 1, 1, {{1, 16}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.3-8", "abc+def", REG_EXTENDED, 0, "xabdefy", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.3-9", "abc+def", REG_EXTENDED, 0, "xabcdefy", 0, 1, 1, {{1, 7}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.3-10", "abc+def", REG_EXTENDED, 0, "xabcccccccdefy", 0, 1, 1, {{1, 13}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.3-11", "abc(def)+ghi", REG_EXTENDED, 0, "xabcghiy", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.3-12", "abc(def)+ghi", REG_EXTENDED, 0, "xabcdefghi", 0, 1, 1, {{1, 10}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.3-13", "abc(def)+ghi", REG_EXTENDED, 0, "xabcdefdefdefghi", 0, 1, 1, {{1, 16}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.3-14", "abc?def", REG_EXTENDED, 0, "xabdefy", 0, 1, 1, {{1, 6}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.3-15", "abc?def", REG_EXTENDED, 0, "xabcdefy", 0, 1, 1, {{1, 7}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.3-16", "abc?def", REG_EXTENDED, 0, "xabcccccccdefy", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.3-17", "abc(def)?ghi", REG_EXTENDED, 0, "xabcghiy", 0, 1, 1, {{1, 7}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.3-18", "abc(def)?ghi", REG_EXTENDED, 0, "xabcdefghi", 0, 1, 1, {{1, 10}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.3-19", "abc(def)?ghi", REG_EXTENDED, 0, "xabcdefdefdefghi", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.3-20", "abc{0,1}def", REG_EXTENDED, 0, "xabdefy", 0, 1, 1, {{1, 6}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.3-21", "abc{0,1}def", REG_EXTENDED, 0, "xabcdefy", 0, 1, 1, {{1, 7}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.3-22", "abc{0,1}def", REG_EXTENDED, 0, "xabccdefy", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.3-23", "abc{1,3}def", REG_EXTENDED, 0, "xabdefy", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.3-24", "abc{1,3}def", REG_EXTENDED, 0, "xabcdefy", 0, 1, 1, {{1, 7}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.3-25", "abc{1,3}def", REG_EXTENDED, 0, "xabccdefy", 0, 1, 1, {{1, 8}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.3-26", "abc{1,3}def", REG_EXTENDED, 0, "xabcccdefy", 0, 1, 1, {{1, 9}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.3-27", "abc{1,3}def", REG_EXTENDED, 0, "xabccccdefy", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.3-28", "abc{1,}def", REG_EXTENDED, 0, "xabdefy", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.3-29", "abc{1,}def", REG_EXTENDED, 0, "xabcdefy", 0, 1, 1, {{1, 7}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.3-30", "abc{1,}def", REG_EXTENDED, 0, "xabccdefy", 0, 1, 1, {{1, 8}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.3-31", "abc{1,}def", REG_EXTENDED, 0, "xabcccdefy", 0, 1, 1, {{1, 9}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.3-32", "abc{1,}def", REG_EXTENDED, 0, "xabccccdefy", 0, 1, 1, {{1, 10}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.3-33", "abc{3}def", REG_EXTENDED, 0, "xabdefy", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.3-34", "abc{3}def", REG_EXTENDED, 0, "xabcdefy", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.3-35", "abc{3}def", REG_EXTENDED, 0, "xabccdefy", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.3-36", "abc{3}def", REG_EXTENDED, 0, "xabcccdefy", 0, 1, 1, {{1, 9}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.3-37", "abc{3}def", REG_EXTENDED, 0, "xabccccdefy", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.3-38", "abc{ 1,3}def", REG_EXTENDED, REG_BADBR, "", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.3-39", "abc{1 ,3}def", REG_EXTENDED, REG_BADBR, "", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.3-40", "abc{1, 3}def", REG_EXTENDED, REG_BADBR, "", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.3-41", "abc{1,3 }def", REG_EXTENDED, REG_BADBR, "", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.3-42", "(wee|week)(night|knights)s*", REG_EXTENDED, 0, "weeknights", 0, 1, 3, {{0, 10}, {0, 3}, {3, 10}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.3-43", "(a|aaa)*", REG_EXTENDED, 0, "aaaa", 0, 1, 2, {{0, 4}, {1, 4}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.3-44", "(a|aaa){0,100}", REG_EXTENDED, 0, "aaaa", 0, 1, 2, {{0, 4}, {1, 4}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.3-45", "(wee|week)(night|knights)(s*)", REG_EXTENDED, 0, "weeknights", 0, 1, 4, {{0, 10}, {0, 3}, {3, 10}, {10, 10}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.3-46", "(week|wee)(knights|night)", REG_EXTENDED, 0, "weeknights", 0, 1, 3, {{0, 10}, {0, 3}, {3, 10}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.3-47", "(aaa|a)+", REG_EXTENDED, 0, "aaaa", 0, 1, 2, {{0, 4}, {1, 4}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.3-48", "(a*)*x\\1", REG_EXTENDED, 0, "aaaax", 0, 1, 2, {{0, 5}, {4, 4}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.3-49", "(a*)*x\\1(a*)", REG_EXTENDED, 0, "aaaaxaa", 0, 1, 3, {{0, 7}, {2, 4}, {7, 7}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.3-50", "(a*)*x(\\1a*)", REG_EXTENDED, 0, "aaaaxaa", 0, 1, 3, {{0, 7}, {2, 4}, {5, 7}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.3-51", "(a*)*x(\\1x)*(.*)", REG_EXTENDED, 0, "aaaaxxyy", 0, 1, 4, {{0, 8}, {4, 4}, {5, 6}, {6, 8}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.3-52", "(a{0,}){0,}x\\1", REG_EXTENDED, 0, "aaaax", 0, 1, 2, {{0, 5}, {4, 4}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.3-53", "(a{0,}){0,}x\\1(a{0,})", REG_EXTENDED, 0, "aaaaxaa", 0, 1, 3, {{0, 7}, {2, 4}, {7, 7}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.3-54", "(a{0,}){0,}x(\\1x){0,}(.{0,})", REG_EXTENDED, 0, "aaaaxxyy", 0, 1, 4, {{0, 8}, {4, 4}, {5, 6}, {6, 8}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.6-0", "a{0,1}^bc", REG_EXTENDED, 0, "bc", 0, 1, 1, {{0, 2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.6-1", "a{0,1}^bc", REG_EXTENDED, 0, "^bc", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.6-2", "a{0,1}^bc", REG_EXTENDED, 0, "a^bc", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.6-3", "a^bc", REG_EXTENDED, 0, "abc", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.6-4", "a^bc", REG_EXTENDED, 0, "a^bc", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.6-5", "ab$c{0,1}", REG_EXTENDED, 0, "ab", 0, 1, 1, {{0, 2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.6-6", "ab$c{0,1}", REG_EXTENDED, 0, "ab$", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.6-7", "ab$c{0,1}", REG_EXTENDED, 0, "ab$c", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.6-8", "ab$c", REG_EXTENDED, 0, "abc", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.6-9", "ab$c", REG_EXTENDED, 0, "ab\nc", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.6-10", "ab$c", REG_EXTENDED, 0, "ab$", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-2.8.4.6-11", "ab$c", REG_EXTENDED, 0, "ab$c", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-case-0", "xx", REG_ICASE, 0, "xX", 0, 1, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-case-0", "xx", REG_EXTENDED | REG_ICASE, 0, "xX", 0, 1, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-case-1", "xX", REG_ICASE, 0, "xx", 0, 1, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-case-1", "xX", REG_EXTENDED | REG_ICASE, 0, "xx", 0, 1, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-case-2", "x x", REG_ICASE, 0, "x X", 0, 1, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-case-2", "x x", REG_EXTENDED | REG_ICASE, 0, "x X", 0, 1, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-case-3", "x X", REG_ICASE, 0, "x x", 0, 1, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-case-3", "x X", REG_EXTENDED | REG_ICASE, 0, "x x", 0, 1, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-case-4", "x X", REG_ICASE, 0, "x y x", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-case-4", "x X", REG_EXTENDED | REG_ICASE, 0, "x y x", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-nosub-0", "^*x", REG_NOSUB, 0, "*x", 0, 1, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-nosub-1", "\\(*x\\)", REG_NOSUB, 0, "*x", 0, 1, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-nosub-3", "*x", REG_NOSUB, 0, "*x", 0, 1, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-nosub-4", "a\\{2,5\\}", REG_NOSUB, 0, "a", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-nosub-5", "a{2,5}", REG_EXTENDED | REG_NOSUB, 0, "a", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-nosub-6", "a\\{2,5\\}", REG_NOSUB, 0, "aa", 0, 1, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-nosub-7", "a{2,5}", REG_EXTENDED | REG_NOSUB, 0, "aa", 0, 1, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-nosub-8", "a\\{2,5\\}", REG_NOSUB, 0, "aaa", 0, 1, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-nosub-9", "a{2,5}", REG_EXTENDED | REG_NOSUB, 0, "aaa", 0, 1, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-nosub-10", "a\\{2,5\\}", REG_NOSUB, 0, "aaaa", 0, 1, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-nosub-11", "a{2,5}", REG_EXTENDED | REG_NOSUB, 0, "aaaa", 0, 1, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-nosub-12", "a\\{2,5\\}", REG_NOSUB, 0, "aaaaa", 0, 1, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-nosub-13", "a{2,5}", REG_EXTENDED | REG_NOSUB, 0, "aaaaa", 0, 1, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-nosub-14", "a\\{2,5\\}", REG_NOSUB, 0, "aaaaaa", 0, 1, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-nosub-15", "a{2,5}", REG_EXTENDED | REG_NOSUB, 0, "aaaaaa", 0, 1, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-nosub-16", "(abcd){10,11}", REG_EXTENDED | REG_NOSUB, 0, "abcd", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-nosub-17", "back-tracking oriented stream-of-solution functions", REG_EXTENDED | REG_NOSUB, 0, "in the spec, and the back-tracking oriented stream-of-solution functions", 0, 1, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-not_ol-0", "^abc", 0, 0, "abcdef", REG_NOTBOL, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-not_ol-0", "^abc", REG_EXTENDED, 0, "abcdef", REG_NOTBOL, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-not_ol-1", "^abc", 0, 0, "xyz\nabcdef", REG_NOTBOL, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-not_ol-1", "^abc", REG_EXTENDED, 0, "xyz\nabcdef", REG_NOTBOL, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-not_ol-2", "^abc", 0, 0, "xyzabcdef", REG_NOTBOL, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-not_ol-2", "^abc", REG_EXTENDED, 0, "xyzabcdef", REG_NOTBOL, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-not_ol-3", "^abc", 0, 0, "\nabcdef", REG_NOTBOL, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-not_ol-3", "^abc", REG_EXTENDED, 0, "\nabcdef", REG_NOTBOL, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-not_ol-4", "abc$", 0, 0, "defabc", REG_NOTEOL, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-not_ol-4", "abc$", REG_EXTENDED, 0, "defabc", REG_NOTEOL, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-not_ol-5", "abc$", 0, 0, "defabc\nghi", REG_NOTEOL, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-not_ol-5", "abc$", REG_EXTENDED, 0, "defabc\nghi", REG_NOTEOL, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-not_ol-6", "abc$", 0, 0, "defabc\n", REG_NOTEOL, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-not_ol-6", "abc$", REG_EXTENDED, 0, "defabc\n", REG_NOTEOL, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-not_ol-7", "^abc$", 0, 0, "abc", REG_NOTEOL, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-not_ol-7", "^abc$", REG_EXTENDED, 0, "abc", REG_NOTEOL, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-not_ol-8", "^abc$", 0, 0, "abc", REG_NOTBOL, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-not_ol-8", "^abc$", REG_EXTENDED, 0, "abc", REG_NOTBOL, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-not_ol-9", "^abc$", 0, 0, "abc", REG_NOTBOL | REG_NOTEOL, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-not_ol-9", "^abc$", REG_EXTENDED, 0, "abc", REG_NOTBOL | REG_NOTEOL, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-not_ol-10", "^abc$", 0, 0, "\nabc\n", REG_NOTBOL, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-not_ol-10", "^abc$", REG_EXTENDED, 0, "\nabc\n", REG_NOTBOL, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-not_ol-11", "^abc$", 0, 0, "\nabc\n", REG_NOTEOL, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-not_ol-11", "^abc$", REG_EXTENDED, 0, "\nabc\n", REG_NOTEOL, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-not_ol-12", "^abc$", 0, 0, "\nabc\n", REG_NOTBOL | REG_NOTEOL, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-not_ol-12", "^abc$", REG_EXTENDED, 0, "\nabc\n", REG_NOTBOL | REG_NOTEOL, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-complex-not_ol-0", "^a(b)*c", REG_EXTENDED, 0, "abcdef", REG_NOTBOL, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-complex-not_ol-1", "^a(b)*c", REG_EXTENDED, 0, "xyz\nabcdef", REG_NOTBOL, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-complex-not_ol-2", "^a(b)*c", REG_EXTENDED, 0, "xyzabcdef", REG_NOTBOL, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-complex-not_ol-3", "^a(b)*c", REG_EXTENDED, 0, "\nabcdef", REG_NOTBOL, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-complex-not_ol-4", "a(b)*c$", REG_EXTENDED, 0, "defabc", REG_NOTEOL, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-complex-not_ol-5", "a(b)*c$", REG_EXTENDED, 0, "defabc\nghi", REG_NOTEOL, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-complex-not_ol-6", "a(b)*c$", REG_EXTENDED, 0, "defabc\n", REG_NOTEOL, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-complex-not_ol-7", "^a(b)*c$", REG_EXTENDED, 0, "abc", REG_NOTEOL, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-complex-not_ol-8", "^a(b)*c$", REG_EXTENDED, 0, "abc", REG_NOTBOL, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-complex-not_ol-9", "^a(b)*c$", REG_EXTENDED, 0, "abc", REG_NOTBOL | REG_NOTEOL, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-complex-not_ol-10", "^a(b)*c$", REG_EXTENDED, 0, "\nabc\n", REG_NOTBOL, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-complex-not_ol-11", "^a(b)*c$", REG_EXTENDED, 0, "\na(b)*c\n", REG_NOTEOL, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-complex-not_ol-12", "^a(b)*c$", REG_EXTENDED, 0, "\nabc\n", REG_NOTBOL | REG_NOTEOL, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-newline-0", ".", 0, 0, "\n", 0, 1, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-newline-0", ".", REG_EXTENDED, 0, "\n", 0, 1, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-newline-1", ".", REG_NEWLINE, 0, "\n", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-newline-1", ".", REG_EXTENDED | REG_NEWLINE, 0, "\n", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-newline-2", "^abc", REG_NEWLINE, 0, "xyz\nabcdef\nxyz", 0, 1, 1, {{4, 7}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-newline-2", "^abc", REG_EXTENDED | REG_NEWLINE, 0, "xyz\nabcdef\nxyz", 0, 1, 1, {{4, 7}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-newline-3", "^abc", REG_NEWLINE, 0, "xyz\nxabcdef\nxyz", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-newline-3", "^abc", REG_EXTENDED | REG_NEWLINE, 0, "xyz\nxabcdef\nxyz", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-newline-4", "z$\nabc", REG_NEWLINE, 0, "xyz\nabcdef\nxyz", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-newline-5", "z$\nabc", REG_EXTENDED | REG_NEWLINE, 0, "xyz\nabcdef\nxyz", 0, 1, 1, {{2, 7}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-newline-6", "^abc", REG_NEWLINE, 0, "abc\nabcdef\nxyz", REG_NOTBOL, 1, 1, {{4, 7}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-newline-6", "^abc", REG_EXTENDED | REG_NEWLINE, 0, "abc\nabcdef\nxyz", REG_NOTBOL, 1, 1, {{4, 7}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-newline-7", "def$", REG_NEWLINE, 0, "xyz\nabcdef\nxyz", 0, 1, 1, {{7, 10}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-newline-7", "def$", REG_EXTENDED | REG_NEWLINE, 0, "xyz\nabcdef\nxyz", 0, 1, 1, {{7, 10}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-newline-8", "def$", REG_NEWLINE, 0, "xyz\nxabcdefx\nxyz", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-newline-8", "def$", REG_EXTENDED | REG_NEWLINE, 0, "xyz\nxabcdefx\nxyz", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-newline-9", "def$\nx", REG_NEWLINE, 0, "xyz\nabcdef\nxyz", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-newline-10", "def$\nx", REG_EXTENDED | REG_NEWLINE, 0, "xyz\nabcdef\nxyz", 0, 1, 1, {{7, 12}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-complex-newline-2", "^a(b)*c", REG_EXTENDED | REG_NEWLINE, 0, "xyz\nabcdef\nxyz", 0, 1, 2, {{4, 7}, {5, 6}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-complex-newline-3", "^a(b)*c", REG_EXTENDED | REG_NEWLINE, 0, "xyz\nxabcdef\nxyz", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-complex-newline-4", "z$\na(b)*c", REG_NEWLINE, 0, "xyz\nabcdef\nxyz", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-complex-newline-5", "z$\na(b)*c", REG_EXTENDED | REG_NEWLINE, 0, "xyz\nabcdef\nxyz", 0, 1, 2, {{2, 7}, {5, 6}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-complex-newline-6", "^a(b)*c", REG_EXTENDED | REG_NEWLINE, 0, "abc\nabcdef\nxyz", REG_NOTBOL, 1, 2, {{4, 7}, {5, 6}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-complex-newline-7", "d(e)f$", REG_EXTENDED | REG_NEWLINE, 0, "xyz\nabcdef\nxyz", 0, 1, 2, {{7, 10}, {8, 9}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-complex-newline-8", "d(e)f$", REG_EXTENDED | REG_NEWLINE, 0, "xyz\nxabcdefx\nxyz", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-complex-newline-9", "d(e)f$\nx", REG_NEWLINE, 0, "xyz\nabcdef\nxyz", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-complex-newline-10", "d(e)f$\nx", REG_EXTENDED | REG_NEWLINE, 0, "xyz\nabcdef\nxyz", 0, 1, 2, {{7, 12}, {8, 9}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-check-0", "^*x", 0, 0, "*x", 0, 1, 1, {{0, 2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-check-1", "\\(*x\\)", 0, 0, "*x", 0, 1, 2, {{0, 2}, {0, 2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-check-2", "*x", 0, 0, "*x", 0, 1, 1, {{0, 2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-check-3", "a\\{2,5\\}", 0, 0, "a", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-check-4", "a\\{2,5\\}", 0, 0, "aa", 0, 1, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-check-5", "a\\{2,5\\}", 0, 0, "aaa", 0, 1, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-check-6", "a\\{2,5\\}", 0, 0, "aaaa", 0, 1, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-check-7", "a\\{2,5\\}", 0, 0, "aaaaa", 0, 1, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-check-8", "a\\{2,5\\}", 0, 0, "aaaaaa", 0, 1, 1, {{0, 5}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-check-9", "(abcd){10,11}", REG_EXTENDED, 0, "abcd", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-check-10", "(abcd){9223372036854775808}", REG_EXTENDED, REG_BADBR, "", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-check-11", "back-tracking oriented stream-of-solution functions", REG_EXTENDED, 0, "in the spec, and the back-tracking oriented stream-of-solution functions", 0, 1, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "posix-check-13", "\\(\\([-[:alnum:]]*\\)\\([-[:alnum:]][-[:alnum:]][-[:alnum:]]*\\)\\)--.*--\\(\\3\\)", 0, 0, "abcq--xyz--cq--abcq--xyz--foo--aqbc--xyz--sdlfj--abcq--sdlfq", 0, 1, 5, {{0, 53}, {0, 19}, {0, 15}, {15, 19}, {49, 53}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "rx-0", "[[:(abc\\|\\(def\\)):]]*\\1", 0, 0, "defabcdef", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "rx-1", "\\(\\(a\\?\\)\\)*xa*", 0, 0, "axa", 0, 1, 3, {{0, 3}, {0, 1}, {0, 1}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "rx-2", "\\(abc\\|abcd\\)\\(d\\|\\)", 0, 0, "abcd", 0, 1, 3, {{0, 4}, {0, 4}, {4, 4}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "rx-3", "(abcd|){2,3}", REG_EXTENDED, 0, "abcd", 0, 1, 2, {{0, 4}, {0, 4}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "rx-4", "(abcd|){10,11}", REG_EXTENDED, 0, "abcd", 0, 1, 2, {{0, 4}, {0, 4}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "rx-5", "(abcd){256}", REG_EXTENDED, REG_BADBR, "", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "rx-6", "(abcd){0,256}", REG_EXTENDED, REG_BADBR, "", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "rx-7", "a{1,}", REG_EXTENDED, 0, "aaaaa", 0, 1, 1, {{0, 5}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "rx-8", "\\(abc$\\)", 0, 0, "abc", 0, 1, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "rx-9", "[[:(abc$):]]", 0, 0, "abc", 0, 1, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "rx-10", "[[:(abc$):]]", 0, 0, "abc$", 0, 0, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "rx-11", "(abc|abcd)(d|)", REG_EXTENDED, 0, "abcd", 0, 1, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, { "rx-12", "(ab(c)d|abc)(d|)", REG_EXTENDED, 0, "abcd", 0, 1, 0, {{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}} }, {0, 0, 0, 0, 0, 0, 0, 0, {{0, 0}}} }; tla-1.3.5+dfsg/src/hackerlab/tests/rx-posix-tests/test-rx.scm0000644000175000017500000013021310457621774022662 0ustar useruser;;; test-rx.scm - Rx tests and C code generator ;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; Copyright (C) 1999, 2000 Free Software Foundation, Inc. ;;; ;;; See the file "COPYING" for further information about ;;; the copyright and warranty status of this work. ;;; (define-module (test-rx) :use-module (standard string-parsing) :use-module (unix output-files)) (define (run-tests) (do ((n 0 (1+ n)) (tests rx-tests (cdr tests))) ((null? tests) #t) (apply expand-compile-flags run-a-test n (car tests)))) (define (run-test name) (apply expand-compile-flags run-a-test 0 name (assq-ref rx-tests name))) (define last-compile #f) (define last-compiled #f) (define last-exec #f) (define (expand-compile-flags fn test-number test-name compile compile-error exec exec-result) (let ((compile-flags (cadr compile))) (cond ((eq? 'REG_BOTH compile-flags) (fn test-number test-name (list (car compile) #f) compile-error exec exec-result) (fn test-number test-name (list (car compile) 'REG_EXTENDED) compile-error exec exec-result)) ((and (list? compile-flags) (memq 'REG_BOTH compile-flags)) (let ((bflags (delq 'REG_BOTH compile-flags)) (eflags (map (lambda (x) (if (eq? x 'REG_BOTH) 'REG_EXTENDED x)) compile-flags))) (fn test-number test-name (list (car compile) bflags) compile-error exec exec-result) (fn test-number test-name (list (car compile) eflags) compile-error exec exec-result))) (#t (fn test-number test-name compile compile-error exec exec-result))))) (define (run-a-test test-number test-name compile compile-error exec exec-result) (display* test-number ": " test-name "\n") (set! last-compile compile) (set! last-compiled 'not-reached) (set! last-exec 'not-reached) (let ((compiled (apply regcomp compile))) (set! last-compiled compiled) (if compile-error (cond ((compiled-regexp? compiled) (test-error #f test-name "compilation expected to fail but didn't" compiled)) ((not (eq? compiled compile-error)) (test-error #t test-name "compilation expected to fail but didn't" compiled))) (if (not (compiled-regexp? compiled)) (test-error #f test-name "incorrect compilation error (no error expected)" compiled) (begin (set! last-exec exec) (let ((execed (apply regexec compiled (copy-tree exec)))) (if (not (equal? execed exec-result)) (test-error #f test-name "incorrect regexec result" execed) #t)))))) (force-output)) (define (test-error warning-only? name message bogus-result) (force-output) (with-output-to-port (current-error-port) (lambda () (apply-to-args (assq-ref rx-tests name) (lambda (compile compile-error exec exec-result) (display* "### " (if warning-only? "WARNING" "ERROR") " on test " name "\n" "\tdiagnosis: " message "\n" "\tgot: " (->string bogus-result) "\n" "\tregcomp: " (->string compile) "\n" "\tregcomp error: " (->string (or compile-error 'no-error)) "\n" "\tregexec: " (->string exec) "\n" "\tregexec result: " (->string exec-result) "\n") (force-output)))))) (define (generate-test-cases) (define (flags-string flags) (cond ((null? flags) "0") ((symbol? flags) flags) (#t (apply join-fields-with " | " flags)))) (define (doit posix-only?) (display* "struct rx_test rx_tests[] =\n" "{\n") (for-each (lambda (test) (apply-to-args (cons (lambda (test-number test-name compile compile-error exec exec-result) (and (or (not posix-only?) (regexec (once (regcomp "^posix" #f)) test-name #f)) (display* " {\n" " " (->string (symbol->string test-name)) ",\n" " " (->string (car compile)) ",\n" ; pattern " " (flags-string (cadr compile)) ",\n" ; cflags " " (or compile-error 0) ",\n" ; compile error " " (if exec (->string (car exec)) "\"\"") ",\n" ; string " " (if (and exec (cddr exec)) (flags-string (caddr exec)) 0) ",\n" ; eflags " " (if exec-result 1 0) ",\n" ; is_match " " (if (vector? exec-result) (vector-length exec-result) 0) ",\n") ; n_match (display* " {") (if (not (vector? exec-result)) (display* "{-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}, {-2, -2}") (begin (vector-for-each (lambda (n) (display* "{" (car n) ", " (cdr n) "}, ")) exec-result) (for-each (lambda (ign) (display* "{-2, -2}, ")) (range (- 10 (vector-length exec-result)))) (display* "{-2, -2}"))) (display* "}\n" " },\n"))) (cons 0 test)) expand-compile-flags)) rx-tests) (display* " {0, 0, 0, 0, 0, 0, 0, 0, {{0, 0}}}\n") (display* "};\n")) (with-overwriting-output-file "test-cases.h" (lambda () (doit #f))) (with-overwriting-output-file "posix-test-cases.h" (lambda () (doit #t)))) (define (generate-tcl-test-cases) (define (flags-string flags) (cond ((null? flags) "0") ((symbol? flags) flags) (#t (apply join-fields-with " | " flags)))) (define (doit) (for-each (lambda (test) (apply-to-args (cons (lambda (test-number test-name compile compile-error exec exec-result) (and (regexec (once (regcomp "^posix" #f)) test-name #f) (cadr compile) (not compile-error) (display* " test" " " (->string (symbol->string test-name)) ; pattern name " " (->string (car compile)) ; pattern " " (if exec (->string (car exec)) "\"\"") ; string " " (if exec-result 1 0); is_match " " ) (if (not (vector? exec-result)) (display* "{-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1} {-1 -1}") (begin (vector-for-each (lambda (n) (display* "{" (car n) " " (if (<= 0 (cdr n)) (1- (cdr n)) -1) "} ")) exec-result) (for-each (lambda (ign) (display* "{-1 -1} ")) (range (- 10 (vector-length exec-result)))) (display* "{-2 -2}"))) (display* " \n"))) (cons 0 test)) expand-compile-flags)) rx-tests) (display* " {0, 0, 0, 0, 0, 0, 0, 0, {{0, 0}}}\n") (display* "};\n")) (doit)) (define rx-tests '( ;; Posix Conformance Tests ;; ;; The tests on this page are organized with respect to section 2.8 ;; of Posix.2 ("Regular Expression Notation"). ;; ;; Every matcher that claims to support Posix should pass these ;; tests (at least). ;; ;; ; posix.2 2.8.3.1 ; ; "BREs matching a single character or collating element" ; ; ordinary character ; (posix-2.8.3.1-0 ("a" #f) #f ("a" #(0)) #((0 . 1))) ; special character preceeded by a backslash ; (posix-2.8.3.1-1 ("\\." #f) #f ("." #(0)) #((0 . 1))) (posix-2.8.3.1-2 ("\\[" #f) #f ("[" #(0)) #((0 . 1))) (posix-2.8.3.1-3 ("\\\\" #f) #f ("\\" #(0)) #((0 . 1))) (posix-2.8.3.1-4 ("\\*" #f) #f ("*" #(0)) #((0 . 1))) (posix-2.8.3.1-5 ("\\^" #f) #f ("^" #(0)) #((0 . 1))) (posix-2.8.3.1-6 ("\\$" #f) #f ("$" #(0)) #((0 . 1))) (posix-2.8.3.1-7 ("\\" #f) REG_EESCAPE #f #f) (posix-2.8.3.1-8 ("x\\." #f) #f ("x." #(0)) #((0 . 2))) (posix-2.8.3.1-9 ("x\\[" #f) #f ("x[" #(0)) #((0 . 2))) (posix-2.8.3.1-10 ("x\\\\" #f) #f ("x\\" #(0)) #((0 . 2))) (posix-2.8.3.1-11 ("x\\*" #f) #f ("x*" #(0)) #((0 . 2))) (posix-2.8.3.1-12 ("x\\^" #f) #f ("x^" #(0)) #((0 . 2))) (posix-2.8.3.1-13 ("x\\$" #f) #f ("x$" #(0)) #((0 . 2))) (posix-2.8.3.1-14 ("x\\" #f) REG_EESCAPE #f #f) ; 2.8.3.1.3 ; ; "Periods in BREs" ; ; match any character except NUL. ; NUL is used as end-of-string by regexec. ; (posix-2.8.3.1.3-0 ("." #f) #f ("a" #(0)) #((0 . 1))) (posix-2.8.3.1.3-1 ("." #f) #f ("\n" #(0)) #((0 . 1))) ; 2.8.3.2 ; ; "RE Bracket Expressions" ; ; item 1 ; ; An initial ] is interpreted as an ordinary character. ; (posix-2.8.3.2-0 ("[]x]" REG_BOTH) #f ("]" #(0)) #((0 . 1))) (posix-2.8.3.2-1 ("[]x]" REG_BOTH) #f ("x" #(0)) #((0 . 1))) (posix-2.8.3.2-2 ("[]" REG_BOTH) REG_EBRACK #f #f) ; . * [ \ are ordinary ; (posix-2.8.3.2-3 ("[.]" REG_BOTH) #f ("." #(0)) #((0 . 1))) (posix-2.8.3.2-4 ("[.]" REG_BOTH) #f ("a" #(0)) #f) (posix-2.8.3.2-5 ("[*]" REG_BOTH) #f ("*" #(0)) #((0 . 1))) (posix-2.8.3.2-6 ("[[]" REG_BOTH) #f ("[" #(0)) #((0 . 1))) (posix-2.8.3.2-7 ("[\\]" REG_BOTH) #f ("\\" #(0)) #((0 . 1))) ; [. [= and [: are special (tests or correct uses later) ; (posix-2.8.3.2-8 ("[[.]" REG_BOTH) REG_ECOLLATE #f #f) (posix-2.8.3.2-9 ("[[=]" REG_BOTH) REG_ECOLLATE #f #f) (posix-2.8.3.2-10 ("[[:]" REG_BOTH) REG_ECTYPE #f #f) ; a matching list (more complex tests later) ; (posix-2.8.3.2-11 ("[abc]" REG_BOTH) #f ("a" #(0)) #((0 . 1))) (posix-2.8.3.2-12 ("[abc]" REG_BOTH) #f ("b" #(0)) #((0 . 1))) (posix-2.8.3.2-13 ("[abc]" REG_BOTH) #f ("c" #(0)) #((0 . 1))) (posix-2.8.3.2-14 ("[abc]" REG_BOTH) #f ("d" #(0)) #f) (posix-2.8.3.2-15 ("x[abc]" REG_BOTH) #f ("xa" #(0)) #((0 . 2))) (posix-2.8.3.2-16 ("x[abc]" REG_BOTH) #f ("xb" #(0)) #((0 . 2))) (posix-2.8.3.2-17 ("x[abc]" REG_BOTH) #f ("xc" #(0)) #((0 . 2))) (posix-2.8.3.2-18 ("x[abc]" REG_BOTH) #f ("xd" #(0)) #f) ; a nonmatching list (more complex tests follow) ; (posix-2.8.3.2-19 ("[^abc]" REG_BOTH) #f ("a" #(0)) #f) (posix-2.8.3.2-20 ("[^abc]" REG_BOTH) #f ("b" #(0)) #f) (posix-2.8.3.2-21 ("[^abc]" REG_BOTH) #f ("c" #(0)) #f) (posix-2.8.3.2-22 ("[^abc]" REG_BOTH) #f ("d" #(0)) #((0 . 1))) (posix-2.8.3.2-23 ("x[^abc]" REG_BOTH) #f ("xa" #(0)) #f) (posix-2.8.3.2-24 ("x[^abc]" REG_BOTH) #f ("xb" #(0)) #f) (posix-2.8.3.2-25 ("x[^abc]" REG_BOTH) #f ("xc" #(0)) #f) (posix-2.8.3.2-26 ("x[^abc]" REG_BOTH) #f ("xd" #(0)) #((0 . 2))) ; Following the order of documentation in Posix.2, ; tests for collating elements go here. ; ; But we want to test character ranges first, ; sol collating element tests are further ; down. ; ; [=equiv=] equivalence classes ; ; These can not be implemented in a portable way, ; at all. (They can be implemented in a way that ; is integrated in a non-portable way with ; `setlocale'.) ; ; standard character classes: ; (posix-2.8.3.2-27 ("[[:alnum:]][[:alnum:]]*" REG_BOTH) #f ("%abc123890XYZ=" #(0)) #((1 . 13))) (posix-2.8.3.2-28 ("[[:cntrl:]][[:cntrl:]]*" REG_BOTH) #f ("%\n\t\r\f " #(0)) #((1 . 5))) (posix-2.8.3.2-29 ("[[:lower:]][[:lower:]]*" REG_BOTH) #f ("AbcdE" #(0)) #((1 . 4))) (posix-2.8.3.2-30 ("[[:lower:]][[:lower:]]*" (REG_BOTH REG_ICASE)) #f ("AbcdE" #(0)) #((0 . 5))) (posix-2.8.3.2-31 ("[[:space:]][[:space:]]*" (REG_BOTH REG_ICASE)) #f ("x \t\f\nx" #(0)) #((1 . 5))) (posix-2.8.3.2-32 ("[[:alpha:]][[:alpha:]]*" REG_BOTH) #f ("%abC123890xyz=" #(0)) #((1 . 4))) (posix-2.8.3.2-33 ("[[:digit:]][[:digit:]]*" REG_BOTH) #f ("%abC123890xyz=" #(0)) #((4 . 10))) (posix-2.8.3.2-34 ("[[:print:]][[:print:]]*" REG_BOTH) #f ("\n %abC12\f" #(0)) #((1 . 8))) (posix-2.8.3.2-35 ("[[:upper:]][[:upper:]]*" REG_BOTH) #f ("\n aBCDEFGHIJKLMNOPQRSTUVWXYz" #(0)) #((3 . 27))) (posix-2.8.3.2-36 ("[[:upper:]][[:upper:]]*" (REG_BOTH REG_ICASE)) #f ("\n aBCDEFGHIJKLMNOPQRSTUVWXYz" #(0)) #((2 . 28))) (posix-2.8.3.2-37 ("[[:blank:]][[:blank:]]*" (REG_BOTH REG_ICASE)) #f ("\na \t b" #(0)) #((2 . 5))) (posix-2.8.3.2-38 ("[[:graph:]][[:graph:]]*" REG_BOTH) #f ("\n %abC12\f" #(0)) #((2 . 8))) (posix-2.8.3.2-39 ("[[:punct:]][[:punct:]]*" REG_BOTH) #f ("a~!@#$%^&*()_+=-`[]{};':\"|\\,./?>< " #(0)) #((1 . 33))) (posix-2.8.3.2-40 ("[[:xdigit:]][[:xdigit:]]*" REG_BOTH) #f ("-0123456789ABCDEFabcdef" #(0)) #((1 . 23))) ; range expressions ; ; These tests presume that the C locale is being used. ; (posix-2.8.3.2-41 ("[a-z][a-z]*" REG_BOTH) #f ("ABCabcxyzABC" #(0)) #((3 . 9))) ; out of order ranges are invalid ; (posix-2.8.3.2-42 ("[a-z][z-a]*" REG_BOTH) REG_ERANGE #f #f) ; single character ranges are valid ; (posix-2.8.3.2-43 ("[a-a][a-a]*" REG_BOTH) #f ("zaaaaab" #(0)) #((1 . 6))) (posix-2.8.3.2-44 ("[a-a][a-a]*" (REG_BOTH REG_ICASE)) #f ("ZAAAAAB" #(0)) #((1 . 6))) ; - first stands for itself ; (posix-2.8.3.2-45 ("[--Z][--Z]*" REG_BOTH) #f ("!ABC-./XYZ~" #(0)) #((1 . 10))) ; - last in a range stands for itself ; (posix-2.8.3.2-46 ("[*--Z][*--Z]*" REG_BOTH) #f ("!+*,---ABC" #(0)) #((1 . 7))) ; - last in the expression stands for itself (posix-2.8.3.2-47 ("[a-][a-]*" REG_BOTH) #f ("xa-a--a-ay" #(0)) #((1 . 9))) ; [.col.] collating elements ; ; Support for multi-character collating elements ; can not be fully implemented in a portable way. ; ; These test single character collating elements, ; presuming the C locale. ; ; These tests won't detect an implementation that ; supports collating elements but is not ; locale-sensative. ; (posix-2.8.3.2-48 ("[a[.-.]z][a[.-.]z]*" REG_BOTH) #f ("ba-a-a-zw" #((0))) #((1 . 8))) (posix-2.8.3.2-49 ("[[.a.]-[.z.]][[.a.]-z]*" REG_BOTH) #f ("ABCabcxyzABC" #(0)) #((3 . 9))) (posix-2.8.3.2-50 ("[[.a.]-[.a.]][[.a.]-[.a.]]*" REG_BOTH) #f ("zaaaaab" #(0)) #((1 . 6))) (posix-2.8.3.2-51 ("[a-[.a.]][[.a.]-a]*" (REG_BOTH REG_ICASE)) #f ("ZAAAAAB" #(0)) #((1 . 6))) (posix-2.8.3.2-52 ("[[.-.]-[.Z.]][[.-.]-[.Z.]]*" REG_BOTH) #f ("!ABC-./XYZ~" #(0)) #((1 . 10))) ; - last in a range stands for itself ; (posix-2.8.3.2-53 ("[*--Z][*-[.-.]Z]*" REG_BOTH) #f ("!+*,---ZABC" #(0)) #((1 . 8))) ; complex character sets ; (posix-2.8.3.2-54 ("[[:digit:]a-z#$%][[:digit:]a-z#$%]*" REG_BOTH) #f ("__abc#lmn012$x%yz789*" #(0)) #((2 . 20))) (posix-2.8.3.2-55 ("[[:digit:]a-z#$%][[:digit:]a-z#$%]*" (REG_BOTH REG_ICASE)) #f ("__abcLMN012x%#$yz789*" #(0)) #((2 . 20))) ; negated character sets ; (posix-2.8.3.2-56 ("[^[:digit:]a-z#$%][^[:digit:]a-z#$%]*" REG_BOTH) #f ("abc#lmn012$x%yz789--@*,abc" #(0)) #((18 . 23))) (posix-2.8.3.2-57 ("[^[:digit:]a-z#$%][^[:digit:]a-z#$%]*" (REG_BOTH REG_ICASE)) #f ("abC#LMn012$x%yz789--@*,abc" #(0)) #((18 . 23))) ; special case of [^- ...] (posix-2.8.3.2-58 ("[^-][^-]*" REG_BOTH) #f ("---afd*(&,ml---" #(0)) #((3 . 12))) (posix-2.8.3.2-59 ("[^--Z][^--Z]*" REG_BOTH) #f ("---AFD*(&,ml---" #(0)) #((6 . 12))) (posix-2.8.3.2-60 ("[^--Z][^--Z]*" (REG_BOTH REG_ICASE)) #f ("---AFD*(&,ml---" #(0)) #((6 . 10))) ; BREs Matching Multiple Characters ; ; simple concatenation ; (posix-2.8.3.3-0 ("abc[def]ghi" #f) #f ("xabcdghiy" #(0)) #((1 . 8))) ; simple use of BRE subexpressions ; (posix-2.8.3.3-1 ("abc\\(\\(de\\)\\(fg\\)\\)hi" #f) #f ("xabcdefghiy" #(0)) #((1 . 10))) ; simple use of * ; (posix-2.8.3.3-2 ("abc*def" #f) #f ("xabdefy" #(0)) #((1 . 6))) (posix-2.8.3.3-3 ("abc*def" #f) #f ("xabcdefy" #(0)) #((1 . 7))) (posix-2.8.3.3-4 ("abc*def" #f) #f ("xabcccccccdefy" #(0)) #((1 . 13))) (posix-2.8.3.3-5 ("abc\\(def\\)*ghi" #f) #f ("xabcghiy" #(0)) #((1 . 7))) (posix-2.8.3.3-6 ("abc\\(def\\)*ghi" #f) #f ("xabcdefghi" #(0)) #((1 . 10))) (posix-2.8.3.3-7 ("abc\\(def\\)*ghi" #f) #f ("xabcdefdefdefghi" #(0)) #((1 . 16))) ; simple use of {} ; (posix-2.8.3.3-8 ("abc\\{0,1\\}def" #f) #f ("xabdefy" #(0)) #((1 . 6))) (posix-2.8.3.3-9 ("abc\\{0,1\\}def" #f) #f ("xabcdefy" #(0)) #((1 . 7))) (posix-2.8.3.3-10 ("abc\\{0,1\\}def" #f) #f ("xabccdefy" #(0)) #f) (posix-2.8.3.3-11 ("abc\\{1,3\\}def" #f) #f ("xabdefy" #(0)) #f) (posix-2.8.3.3-12 ("abc\\{1,3\\}def" #f) #f ("xabcdefy" #(0)) #((1 . 7))) (posix-2.8.3.3-13 ("abc\\{1,3\\}def" #f) #f ("xabccdefy" #(0)) #((1 . 8))) (posix-2.8.3.3-14 ("abc\\{1,3\\}def" #f) #f ("xabcccdefy" #(0)) #((1 . 9))) (posix-2.8.3.3-15 ("abc\\{1,3\\}def" #f) #f ("xabccccdefy" #(0)) #f) (posix-2.8.3.3-16 ("abc\\{1,\\}def" #f) #f ("xabdefy" #(0)) #f) (posix-2.8.3.3-17 ("abc\\{1,\\}def" #f) #f ("xabcdefy" #(0)) #((1 . 7))) (posix-2.8.3.3-18 ("abc\\{1,\\}def" #f) #f ("xabccdefy" #(0)) #((1 . 8))) (posix-2.8.3.3-19 ("abc\\{1,\\}def" #f) #f ("xabcccdefy" #(0)) #((1 . 9))) (posix-2.8.3.3-20 ("abc\\{1,\\}def" #f) #f ("xabccccdefy" #(0)) #((1 . 10))) (posix-2.8.3.3-21 ("abc\\{3\\}def" #f) #f ("xabdefy" #(0)) #f) (posix-2.8.3.3-22 ("abc\\{3\\}def" #f) #f ("xabcdefy" #(0)) #f) (posix-2.8.3.3-23 ("abc\\{3\\}def" #f) #f ("xabccdefy" #(0)) #f) (posix-2.8.3.3-24 ("abc\\{3\\}def" #f) #f ("xabcccdefy" #(0)) #((1 . 9))) (posix-2.8.3.3-25 ("abc\\{3\\}def" #f) #f ("xabccccdefy" #(0)) #f) ; syntax errors with {} (posix-2.8.3.3-26 ("abc\\{ 1,3\\}def" #f) REG_BADBR #f #f) (posix-2.8.3.3-27 ("abc\\{1 ,3\\}def" #f) REG_BADBR #f #f) (posix-2.8.3.3-28 ("abc\\{1, 3\\}def" #f) REG_BADBR #f #f) (posix-2.8.3.3-29 ("abc\\{1,3 \\}def" #f) REG_BADBR #f #f) ; backreferences ; (posix-2.8.3.3-30 ("\\(\\(a*\\)\\)*x\\2" #f) #f ("ax" #(0 1 2)) #((0 . 2) (1 . 1) (1 . 1))) (posix-2.8.3.3-31 ("\\(\\(a*\\)\\)*x\\2" #f) #f ("axa" #(0 1 2)) #((0 . 3) (0 . 1) (0 . 1))) (posix-2.8.3.3-32 ("\\(\\(abc\\)*\\(abc\\)*\\)\\3" #f) #f ("abcabc" #(0 1 2 3)) #((0 . 6) (0 . 3) (-1 . -1) (0 . 3))) (posix-2.8.3.3-33 ("\\(\\(abc\\)\\{0,1\\}\\(abc\\)\\{0,1\\}\\)\\3" #f) #f ("abcabc" #(0 1 2 3)) #((0 . 6) (0 . 3) (-1 . -1) (0 . 3))) (posix-2.8.3.3-34 ("\\(\\(abc\\)\\{0,2\\}\\(abc\\)\\{0,2\\}\\)\\3" #f) #f ("abcabc" #(0 1 2 3)) #((0 . 6) (0 . 3) (-1 . -1) (0 . 3))) (posix-2.8.3.3-35 ("a\\(b\\)c\\2" #f) REG_ESUBREG #f #f) (posix-2.8.3.3-36 ("\\(abc\\)\\1" REG_ICASE) #f ("abcabc" #(0 1)) #((0 . 6) (0 . 3))) (posix-2.8.3.3-37 ("\\(abc\\)\\1" REG_ICASE) #f ("aBcAbC" #(0 1)) #((0 . 6) (0 . 3))) ; anchors ; (posix-2.8.3.5-0 ("^abc" #f) #f ("abcdef" #(0)) #((0 . 3))) (posix-2.8.3.5-1 ("^abc" #f) #f ("xyzabcdef" #(0)) #f) (posix-2.8.3.5-2 ("^abc" #f) #f ("\nabcdef" #(0)) #f) (posix-2.8.3.5-3 ("abc$" #f) #f ("defabc" #(0)) #((3 . 6))) (posix-2.8.3.5-4 ("abc$" #f) #f ("defabc\n" #(0)) #f) (posix-2.8.3.5-5 ("^abc$" #f) #f ("abc" #(0)) #((0 . 3))) (posix-2.8.3.5-6 ("^abc$" #f) #f ("\nabc\n" #(0)) #f) ; ^ and $ are not special character when not used ; as anchors (in BRE). This refers to 2.8.3.1.2, but the ; tests here with the anchor tests. ; (posix-2.8.3.5-7 ("a\\{0,1\\}^bc" #f) #f ("bc" #(0)) #f) (posix-2.8.3.5-8 ("a\\{0,1\\}^bc" #f) #f ("^bc" #(0)) #((0 . 3))) (posix-2.8.3.5-9 ("a\\{0,1\\}^bc" #f) #f ("a^bc" #(0)) #((0 . 4))) (posix-2.8.3.5-10 ("a^bc" #f) #f ("abc" #(0)) #f) (posix-2.8.3.5-11 ("a^bc" #f) #f ("a^bc" #(0)) #((0 . 4))) (posix-2.8.3.5-12 ("ab$c\\{0,1\\}" #f) #f ("ab" #(0)) #f) (posix-2.8.3.5-13 ("ab$c\\{0,1\\}" #f) #f ("ab$" #(0)) #((0 . 3))) (posix-2.8.3.5-14 ("ab$c\\{0,1\\}" #f) #f ("ab$c" #(0)) #((0 . 4))) (posix-2.8.3.5-15 ("ab$c" #f) #f ("abc" #(0)) #f) (posix-2.8.3.5-16 ("ab$c" #f) #f ("ab\nc" #(0)) #f) (posix-2.8.3.5-17 ("ab$c" #f) #f ("ab$" #(0)) #f) (posix-2.8.3.5-18 ("ab$c" #f) #f ("ab$c" #(0)) #((0 . 4))) ; EREs Matching a Single Character or Collating Element ; ; ordinary character ; (posix-2.8.4.1.1-0 ("a" REG_EXTENDED) #f ("a" #(0)) #((0 . 1))) ; quoted special characters ; (posix-2.8.4.1.2-0 ("\\." REG_EXTENDED) #f ("a.b" #(0)) #((1 . 2))) (posix-2.8.4.1.2-1 ("\\[" REG_EXTENDED) #f ("a[b" #(0)) #((1 . 2))) (posix-2.8.4.1.2-2 ("\\\\" REG_EXTENDED) #f ("a\\b" #(0)) #((1 . 2))) (posix-2.8.4.1.2-3 ("\\(" REG_EXTENDED) #f ("a(b" #(0)) #((1 . 2))) ; close paren is special only when matched with ; an open paren. ; (posix-2.8.4.1.2-4 ("\\*" REG_EXTENDED) #f ("a*b" #(0)) #((1 . 2))) (posix-2.8.4.1.2-5 ("\\+" REG_EXTENDED) #f ("a+b" #(0)) #((1 . 2))) (posix-2.8.4.1.2-6 ("\\?" REG_EXTENDED) #f ("a?b" #(0)) #((1 . 2))) (posix-2.8.4.1.2-7 ("\\|" REG_EXTENDED) #f ("a|b" #(0)) #((1 . 2))) (posix-2.8.4.1.2-8 ("\\^" REG_EXTENDED) #f ("a^b" #(0)) #((1 . 2))) (posix-2.8.4.1.2-9 ("\\$" REG_EXTENDED) #f ("a$b" #(0)) #((1 . 2))) ; Periods in EREs ; (posix-2.8.4.1.3-0 ("." REG_EXTENDED) #f ("a" #(0)) #((0 . 1))) (posix-2.8.4.1.3-1 ("." REG_EXTENDED) #f ("\n" #(0)) #((0 . 1))) ; Bracket Expressions in EREs ; ; Bracket expressions in EREs are the same as bracket ; expressions in BREs. The bracket tests above (posix-2.8.3.2) ; test both BREs and EREs. ; ; EREs Matching Mulitple Characters ; simple concatenation ; (posix-2.8.4.3-0 ("abc[def]ghi" REG_EXTENDED) #f ("xabcdghiy" #(0)) #((1 . 8))) ; simple use of BRE subexpressions ; (posix-2.8.4.3-1 ("abc((de)(fg))hi" REG_EXTENDED) #f ("xabcdefghiy" #(0)) #((1 . 10))) ; simple use of * ; (posix-2.8.4.3-2 ("abc*def" REG_EXTENDED) #f ("xabdefy" #(0)) #((1 . 6))) (posix-2.8.4.3-3 ("abc*def" REG_EXTENDED) #f ("xabcdefy" #(0)) #((1 . 7))) (posix-2.8.4.3-4 ("abc*def" REG_EXTENDED) #f ("xabcccccccdefy" #(0)) #((1 . 13))) (posix-2.8.4.3-5 ("abc(def)*ghi" REG_EXTENDED) #f ("xabcghiy" #(0)) #((1 . 7))) (posix-2.8.4.3-6 ("abc(def)*ghi" REG_EXTENDED) #f ("xabcdefghi" #(0)) #((1 . 10))) (posix-2.8.4.3-7 ("abc(def)*ghi" REG_EXTENDED) #f ("xabcdefdefdefghi" #(0)) #((1 . 16))) ; simple use of + ; (posix-2.8.4.3-8 ("abc+def" REG_EXTENDED) #f ("xabdefy" #(0)) #f) (posix-2.8.4.3-9 ("abc+def" REG_EXTENDED) #f ("xabcdefy" #(0)) #((1 . 7))) (posix-2.8.4.3-10 ("abc+def" REG_EXTENDED) #f ("xabcccccccdefy" #(0)) #((1 . 13))) (posix-2.8.4.3-11 ("abc(def)+ghi" REG_EXTENDED) #f ("xabcghiy" #(0)) #f) (posix-2.8.4.3-12 ("abc(def)+ghi" REG_EXTENDED) #f ("xabcdefghi" #(0)) #((1 . 10))) (posix-2.8.4.3-13 ("abc(def)+ghi" REG_EXTENDED) #f ("xabcdefdefdefghi" #(0)) #((1 . 16))) ; simple use of ? ; (posix-2.8.4.3-14 ("abc?def" REG_EXTENDED) #f ("xabdefy" #(0)) #((1 . 6))) (posix-2.8.4.3-15 ("abc?def" REG_EXTENDED) #f ("xabcdefy" #(0)) #((1 . 7))) (posix-2.8.4.3-16 ("abc?def" REG_EXTENDED) #f ("xabcccccccdefy" #(0)) #f) (posix-2.8.4.3-17 ("abc(def)?ghi" REG_EXTENDED) #f ("xabcghiy" #(0)) #((1 . 7))) (posix-2.8.4.3-18 ("abc(def)?ghi" REG_EXTENDED) #f ("xabcdefghi" #(0)) #((1 . 10))) (posix-2.8.4.3-19 ("abc(def)?ghi" REG_EXTENDED) #f ("xabcdefdefdefghi" #(0)) #f) ; simple use of {} ; (posix-2.8.4.3-20 ("abc{0,1}def" REG_EXTENDED) #f ("xabdefy" #(0)) #((1 . 6))) (posix-2.8.4.3-21 ("abc{0,1}def" REG_EXTENDED) #f ("xabcdefy" #(0)) #((1 . 7))) (posix-2.8.4.3-22 ("abc{0,1}def" REG_EXTENDED) #f ("xabccdefy" #(0)) #f) (posix-2.8.4.3-23 ("abc{1,3}def" REG_EXTENDED) #f ("xabdefy" #(0)) #f) (posix-2.8.4.3-24 ("abc{1,3}def" REG_EXTENDED) #f ("xabcdefy" #(0)) #((1 . 7))) (posix-2.8.4.3-25 ("abc{1,3}def" REG_EXTENDED) #f ("xabccdefy" #(0)) #((1 . 8))) (posix-2.8.4.3-26 ("abc{1,3}def" REG_EXTENDED) #f ("xabcccdefy" #(0)) #((1 . 9))) (posix-2.8.4.3-27 ("abc{1,3}def" REG_EXTENDED) #f ("xabccccdefy" #(0)) #f) (posix-2.8.4.3-28 ("abc{1,}def" REG_EXTENDED) #f ("xabdefy" #(0)) #f) (posix-2.8.4.3-29 ("abc{1,}def" REG_EXTENDED) #f ("xabcdefy" #(0)) #((1 . 7))) (posix-2.8.4.3-30 ("abc{1,}def" REG_EXTENDED) #f ("xabccdefy" #(0)) #((1 . 8))) (posix-2.8.4.3-31 ("abc{1,}def" REG_EXTENDED) #f ("xabcccdefy" #(0)) #((1 . 9))) (posix-2.8.4.3-32 ("abc{1,}def" REG_EXTENDED) #f ("xabccccdefy" #(0)) #((1 . 10))) (posix-2.8.4.3-33 ("abc{3}def" REG_EXTENDED) #f ("xabdefy" #(0)) #f) (posix-2.8.4.3-34 ("abc{3}def" REG_EXTENDED) #f ("xabcdefy" #(0)) #f) (posix-2.8.4.3-35 ("abc{3}def" REG_EXTENDED) #f ("xabccdefy" #(0)) #f) (posix-2.8.4.3-36 ("abc{3}def" REG_EXTENDED) #f ("xabcccdefy" #(0)) #((1 . 9))) (posix-2.8.4.3-37 ("abc{3}def" REG_EXTENDED) #f ("xabccccdefy" #(0)) #f) ; syntax errors with {} ; (posix-2.8.4.3-38 ("abc{ 1,3}def" REG_EXTENDED) REG_BADBR #f #f) (posix-2.8.4.3-39 ("abc{1 ,3}def" REG_EXTENDED) REG_BADBR #f #f) (posix-2.8.4.3-40 ("abc{1, 3}def" REG_EXTENDED) REG_BADBR #f #f) (posix-2.8.4.3-41 ("abc{1,3 }def" REG_EXTENDED) REG_BADBR #f #f) ; ERE alternation ; ; The whole string should be matched. ; ; The length of each subexpression, left-to-right, top-to-bottom ; should be maximized. ; ; The grammar (Posix.2 2.8.5.2) says that the two outermost ; subexpressions are: ; ; (wee|week)(night|knights) ; s* ; ; So, compared to "weeknights", ; ; 0 == weeknights ; 1 == wee -- not week ; 2 == knights -- not night ; (posix-2.8.4.3-42 ("(wee|week)(night|knights)s*" REG_EXTENDED) #f ("weeknights" #(0 1 2)) #((0 . 10) (0 . 3) (3 . 10))) (posix-2.8.4.3-43 ("(a|aaa)*" REG_EXTENDED) #f ("aaaa" #(0 1)) #((0 . 4) (1 . 4))) (posix-2.8.4.3-44 ("(a|aaa){0,100}" REG_EXTENDED) #f ("aaaa" #(0 1)) #((0 . 4) (1 . 4))) ; same thing, checking the "s*" subexpression. ;; (posix-2.8.4.3-45 ("(wee|week)(night|knights)(s*)" REG_EXTENDED) #f ("weeknights" #(0 1 2 3)) #((0 . 10) (0 . 3) (3 . 10) (10 . 10))) ; This illustrates semantic differences between Posix and Perl ; (posix-2.8.4.3-46 ("(week|wee)(knights|night)" REG_EXTENDED) #f ("weeknights" #(0 1 2)) #((0 . 10) (0 . 3) (3 . 10))) ; This illustrates that RE+ is not the same as RE RE* ; (posix-2.8.4.3-47 ("(aaa|a)+" REG_EXTENDED) #f ("aaaa" #(0 1)) #((0 . 4) (1 . 4))) ; this is a case that some versions of Rx got wrong ; (posix-2.8.4.3-48 ("(a*)*x\\1" REG_EXTENDED) #f ("aaaax" #(0 1)) #((0 . 5) (4 . 4))) ; this is a case that some versions of Rx got wrong ; (posix-2.8.4.3-49 ("(a*)*x\\1(a*)" REG_EXTENDED) #f ("aaaaxaa" #(0 1 2)) #((0 . 7) (2 . 4) (7 . 7))) (posix-2.8.4.3-50 ("(a*)*x(\\1a*)" REG_EXTENDED) #f ("aaaaxaa" #(0 1 2)) #((0 . 7) (2 . 4) (5 . 7))) ; this is a case that some versions of Rx got wrong ; (posix-2.8.4.3-51 ("(a*)*x(\\1x)*(.*)" REG_EXTENDED) #f ("aaaaxxyy" #(0 1 2 3)) #((0 . 8) (4 . 4) (5 . 6) (6 . 8))) (posix-2.8.4.3-52 ("(a{0,}){0,}x\\1" REG_EXTENDED) #f ("aaaax" #(0 1)) #((0 . 5) (4 . 4))) (posix-2.8.4.3-53 ("(a{0,}){0,}x\\1(a{0,})" REG_EXTENDED) #f ("aaaaxaa" #(0 1 2)) #((0 . 7) (2 . 4) (7 . 7))) (posix-2.8.4.3-54 ("(a{0,}){0,}x(\\1x){0,}(.{0,})" REG_EXTENDED) #f ("aaaaxxyy" #(0 1 2 3)) #((0 . 8) (4 . 4) (5 . 6) (6 . 8))) ; ^ and $ are always special in an ERE ; (posix-2.8.4.6-0 ("a{0,1}^bc" REG_EXTENDED) #f ("bc" #(0)) #((0 . 2))) (posix-2.8.4.6-1 ("a{0,1}^bc" REG_EXTENDED) #f ("^bc" #(0)) #f) (posix-2.8.4.6-2 ("a{0,1}^bc" REG_EXTENDED) #f ("a^bc" #(0)) #f) (posix-2.8.4.6-3 ("a^bc" REG_EXTENDED) #f ("abc" #(0)) #f) (posix-2.8.4.6-4 ("a^bc" REG_EXTENDED) #f ("a^bc" #(0)) #f) (posix-2.8.4.6-5 ("ab$c{0,1}" REG_EXTENDED) #f ("ab" #(0)) #((0 . 2))) (posix-2.8.4.6-6 ("ab$c{0,1}" REG_EXTENDED) #f ("ab$" #(0)) #f) (posix-2.8.4.6-7 ("ab$c{0,1}" REG_EXTENDED) #f ("ab$c" #(0)) #f) (posix-2.8.4.6-8 ("ab$c" REG_EXTENDED) #f ("abc" #(0)) #f) (posix-2.8.4.6-9 ("ab$c" REG_EXTENDED) #f ("ab\nc" #(0)) #f) (posix-2.8.4.6-10 ("ab$c" REG_EXTENDED) #f ("ab$" #(0)) #f) (posix-2.8.4.6-11 ("ab$c" REG_EXTENDED) #f ("ab$c" #(0)) #f) ;; Posix Conformance Tests (Part II) ;; ;; The tests on this page are organized with respect to section B.5 ;; of Posix.2 ("C Binding for RE Matching"). ;; ;; Most of regexp interface is tested above, including the tricky ;; question of what values are returned in `pmatch'. ;; ;; This section tests these compile flags: ;; ;; REG_ICASE -- ignore case ;; REG_NOSUB -- ignore `pmatch' ;; REG_NEWLINE -- treat newline as an end-of-string marker ;; ;; and these exec flags: ;; ;; REG_NOTBOL -- the beginning of the string is not ;; matched by ^ ;; REG_NOTEOL -- the end of the string is not matched ;; by $ ;; ;; Every matcher that claims to support Posix should pass these ;; tests (at least). ;; ;; ;; Posix REG_ICASE Tests ;; ;; These test REG_ICASE. The tests for bracket expressions ;; above (2.8.3.2) also includes tests of REG_ICASE. ;; ;; Every matcher that claims to support Posix should pass these ;; tests (at least). ;; (posix-case-0 ("xx" (REG_BOTH REG_ICASE)) #f ("xX" #f) #t) (posix-case-1 ("xX" (REG_BOTH REG_ICASE)) #f ("xx" #f) #t) (posix-case-2 ("x x" (REG_BOTH REG_ICASE)) #f ("x X" #f) #t) (posix-case-3 ("x X" (REG_BOTH REG_ICASE)) #f ("x x" #f) #t) (posix-case-4 ("x X" (REG_BOTH REG_ICASE)) #f ("x y x" #f) #f) ; REG_NOSUB ; (posix-nosub-0 ("^*x" REG_NOSUB) #f ("*x" #f #f) #t) (posix-nosub-1 ("\\(*x\\)" REG_NOSUB) #f ("*x" #f #f) #t) (posix-nosub-3 ("*x" REG_NOSUB) #f ("*x" #f #f) #t) (posix-nosub-4 ("a\\{2,5\\}" REG_NOSUB) #f ("a" #f #f) #f) (posix-nosub-5 ("a{2,5}" (REG_EXTENDED REG_NOSUB)) #f ("a" #f #f) #f) (posix-nosub-6 ("a\\{2,5\\}" REG_NOSUB) #f ("aa" #f #f) #t) (posix-nosub-7 ("a{2,5}" (REG_EXTENDED REG_NOSUB)) #f ("aa" #f #f) #t) (posix-nosub-8 ("a\\{2,5\\}" REG_NOSUB) #f ("aaa" #f #f) #t) (posix-nosub-9 ("a{2,5}" (REG_EXTENDED REG_NOSUB)) #f ("aaa" #f #f) #t) (posix-nosub-10 ("a\\{2,5\\}" REG_NOSUB) #f ("aaaa" #f #f) #t) (posix-nosub-11 ("a{2,5}" (REG_EXTENDED REG_NOSUB)) #f ("aaaa" #f #f) #t) (posix-nosub-12 ("a\\{2,5\\}" REG_NOSUB) #f ("aaaaa" #f #f) #t) (posix-nosub-13 ("a{2,5}" (REG_EXTENDED REG_NOSUB)) #f ("aaaaa" #f #f) #t) (posix-nosub-14 ("a\\{2,5\\}" REG_NOSUB) #f ("aaaaaa" #f #f) #t) (posix-nosub-15 ("a{2,5}" (REG_EXTENDED REG_NOSUB)) #f ("aaaaaa" #f #f) #t) (posix-nosub-16 ("(abcd){10,11}" (REG_EXTENDED REG_NOSUB)) #f ("abcd" #f #f) #f) (posix-nosub-17 ("back-tracking oriented stream-of-solution functions" (REG_EXTENDED REG_NOSUB)) #f ("in the spec, and the back-tracking oriented stream-of-solution functions" #f #f) #t) ; REG_EOL/REG_BOL ; (posix-not_ol-0 ("^abc" REG_BOTH) #f ("abcdef" #(0) REG_NOTBOL) #f) (posix-not_ol-1 ("^abc" REG_BOTH) #f ("xyz\nabcdef" #(0) REG_NOTBOL) #f) (posix-not_ol-2 ("^abc" REG_BOTH) #f ("xyzabcdef" #(0) REG_NOTBOL) #f) (posix-not_ol-3 ("^abc" REG_BOTH) #f ("\nabcdef" #(0) REG_NOTBOL) #f) (posix-not_ol-4 ("abc$" REG_BOTH) #f ("defabc" #(0) REG_NOTEOL) #f) (posix-not_ol-5 ("abc$" REG_BOTH) #f ("defabc\nghi" #(0) REG_NOTEOL) #f) (posix-not_ol-6 ("abc$" REG_BOTH) #f ("defabc\n" #(0) REG_NOTEOL) #f) (posix-not_ol-7 ("^abc$" REG_BOTH) #f ("abc" #(0) REG_NOTEOL) #f) (posix-not_ol-8 ("^abc$" REG_BOTH) #f ("abc" #(0) REG_NOTBOL) #f) (posix-not_ol-9 ("^abc$" REG_BOTH) #f ("abc" #(0) (REG_NOTBOL REG_NOTEOL)) #f) (posix-not_ol-10 ("^abc$" REG_BOTH) #f ("\nabc\n" #(0) REG_NOTBOL) #f) (posix-not_ol-11 ("^abc$" REG_BOTH) #f ("\nabc\n" #(0) REG_NOTEOL) #f) (posix-not_ol-12 ("^abc$" REG_BOTH) #f ("\nabc\n" #(0) (REG_NOTBOL REG_NOTEOL)) #f) (posix-complex-not_ol-0 ("^a(b)*c" REG_EXTENDED) #f ("abcdef" #(0 1) REG_NOTBOL) #f) (posix-complex-not_ol-1 ("^a(b)*c" REG_EXTENDED) #f ("xyz\nabcdef" #(0 1) REG_NOTBOL) #f) (posix-complex-not_ol-2 ("^a(b)*c" REG_EXTENDED) #f ("xyzabcdef" #(0 1) REG_NOTBOL) #f) (posix-complex-not_ol-3 ("^a(b)*c" REG_EXTENDED) #f ("\nabcdef" #(0 1) REG_NOTBOL) #f) (posix-complex-not_ol-4 ("a(b)*c$" REG_EXTENDED) #f ("defabc" #(0 1) REG_NOTEOL) #f) (posix-complex-not_ol-5 ("a(b)*c$" REG_EXTENDED) #f ("defabc\nghi" #(0 1) REG_NOTEOL) #f) (posix-complex-not_ol-6 ("a(b)*c$" REG_EXTENDED) #f ("defabc\n" #(0 1) REG_NOTEOL) #f) (posix-complex-not_ol-7 ("^a(b)*c$" REG_EXTENDED) #f ("abc" #(0 1) REG_NOTEOL) #f) (posix-complex-not_ol-8 ("^a(b)*c$" REG_EXTENDED) #f ("abc" #(0 1) REG_NOTBOL) #f) (posix-complex-not_ol-9 ("^a(b)*c$" REG_EXTENDED) #f ("abc" #(0 1) (REG_NOTBOL REG_NOTEOL)) #f) (posix-complex-not_ol-10 ("^a(b)*c$" REG_EXTENDED) #f ("\nabc\n" #(0 1) REG_NOTBOL) #f) (posix-complex-not_ol-11 ("^a(b)*c$" REG_EXTENDED) #f ("\na(b)*c\n" #(0 1) REG_NOTEOL) #f) (posix-complex-not_ol-12 ("^a(b)*c$" REG_EXTENDED) #f ("\nabc\n" #(0 1) (REG_NOTBOL REG_NOTEOL)) #f) ; REG_NEWLINE ; (posix-newline-0 ("." REG_BOTH) #f ("\n" #f) #t) (posix-newline-1 ("." (REG_BOTH REG_NEWLINE)) #f ("\n" #f) #f) (posix-newline-2 ("^abc" (REG_BOTH REG_NEWLINE)) #f ("xyz\nabcdef\nxyz" #(0)) #((4 . 7))) (posix-newline-3 ("^abc" (REG_BOTH REG_NEWLINE)) #f ("xyz\nxabcdef\nxyz" #(0)) #f) (posix-newline-4 ("z$\nabc" REG_NEWLINE) #f ("xyz\nabcdef\nxyz" #(0)) #f) (posix-newline-5 ("z$\nabc" (REG_EXTENDED REG_NEWLINE)) #f ("xyz\nabcdef\nxyz" #(0)) #((2 . 7))) (posix-newline-6 ("^abc" (REG_BOTH REG_NEWLINE)) #f ("abc\nabcdef\nxyz" #(0) REG_NOTBOL) #((4 . 7))) (posix-newline-7 ("def$" (REG_BOTH REG_NEWLINE)) #f ("xyz\nabcdef\nxyz" #(0)) #((7 . 10))) (posix-newline-8 ("def$" (REG_BOTH REG_NEWLINE)) #f ("xyz\nxabcdefx\nxyz" #(0)) #f) (posix-newline-9 ("def$\nx" REG_NEWLINE) #f ("xyz\nabcdef\nxyz" #(0)) #f) (posix-newline-10 ("def$\nx" (REG_EXTENDED REG_NEWLINE)) #f ("xyz\nabcdef\nxyz" #(0)) #((7 . 12))) ; REG_NEWLINE tests with more complicated regexps. ; (posix-complex-newline-2 ("^a(b)*c" (REG_EXTENDED REG_NEWLINE)) #f ("xyz\nabcdef\nxyz" #(0 1)) #((4 . 7) (5 . 6))) (posix-complex-newline-3 ("^a(b)*c" (REG_EXTENDED REG_NEWLINE)) #f ("xyz\nxabcdef\nxyz" #(0 1)) #f) (posix-complex-newline-4 ("z$\na(b)*c" REG_NEWLINE) #f ("xyz\nabcdef\nxyz" #(0 1)) #f) (posix-complex-newline-5 ("z$\na(b)*c" (REG_EXTENDED REG_NEWLINE)) #f ("xyz\nabcdef\nxyz" #(0 1)) #((2 . 7) (5 . 6))) (posix-complex-newline-6 ("^a(b)*c" (REG_EXTENDED REG_NEWLINE)) #f ("abc\nabcdef\nxyz" #(0 1) REG_NOTBOL) #((4 . 7) (5 . 6))) (posix-complex-newline-7 ("d(e)f$" (REG_EXTENDED REG_NEWLINE)) #f ("xyz\nabcdef\nxyz" #(0 1)) #((7 . 10) (8 . 9))) (posix-complex-newline-8 ("d(e)f$" (REG_EXTENDED REG_NEWLINE)) #f ("xyz\nxabcdefx\nxyz" #(0 1)) #f) (posix-complex-newline-9 ("d(e)f$\nx" REG_NEWLINE) #f ("xyz\nabcdef\nxyz" #(0 1)) #f) (posix-complex-newline-10 ("d(e)f$\nx" (REG_EXTENDED REG_NEWLINE)) #f ("xyz\nabcdef\nxyz" #(0 1)) #((7 . 12) (8 . 9))) ;; Miscellaneous Posix Tests ;; ;; The test for some Posix bugs found in older versions of Rx, but ;; not caught by the systematic Posix tests above, and for ;; conditions that trigger or defeat various optimizations in ;; Rx that might not otherwise be tested by the tests above. ;; ;; Every matcher that claims to support Posix should pass these ;; tests (at least). ;; ; In BRE, * is not special at the beginning of an expression, of ; a parenthesized expression, or following an anchoring "^". ; (posix-check-0 ("^*x" #f) #f ("*x" #(0)) #((0 . 2))) (posix-check-1 ("\\(*x\\)" #f) #f ("*x" #(0 1)) #((0 . 2) (0 . 2))) (posix-check-2 ("*x" #f) #f ("*x" #(0)) #((0 . 2))) (posix-check-3 ("a\\{2,5\\}" #f) #f ("a" #f) #f) (posix-check-4 ("a\\{2,5\\}" #f) #f ("aa" #f) #t) (posix-check-5 ("a\\{2,5\\}" #f) #f ("aaa" #f) #t) (posix-check-6 ("a\\{2,5\\}" #f) #f ("aaaa" #f) #t) (posix-check-7 ("a\\{2,5\\}" #f) #f ("aaaaa" #f) #t) (posix-check-8 ("a\\{2,5\\}" #f) #f ("aaaaaa" #(0)) #((0 . 5))) (posix-check-9 ("(abcd){10,11}" REG_EXTENDED) #f ("abcd" #(0 1)) #f) ; Arguably, this is a legal regexp on machines with ; sizeof(long) > 8. On all other machines, though, ; this checks that numbers in {} expressions are ; parsed with some sanity. ; (posix-check-10 ("(abcd){9223372036854775808}" REG_EXTENDED) REG_BADBR #f #f) (posix-check-11 ("back-tracking oriented stream-of-solution functions" REG_EXTENDED) #f ("in the spec, and the back-tracking oriented stream-of-solution functions" #f) #t) ;; These next three tests are about the worst case possible ;; for `regexec'. ;; ;;; (posix-check-12 ("\\([-[:alnum:]][-[:alnum:]][-[:alnum:]]*\\)--.*--\\1" REG_NOSUB) ;;; #f ;;; ("abcd--abcx--mlkj--oiu--xcvxcv--234--anb--abcq--xyz--abcq--lmno--aqbc--sdlfj--abcq--xy8--yabc--dsfl--weoru--sdlfj" #f) ;;; #t) ;;; (posix-check-13 ("\\(\\([-[:alnum:]]*\\)\\([-[:alnum:]][-[:alnum:]][-[:alnum:]]*\\)\\)--.*--\\(\\3\\)" #f) #f ("abcq--xyz--cq--abcq--xyz--foo--aqbc--xyz--sdlfj--abcq--sdlfq" #(0 1 2 3 4)) #((0 . 53) (0 . 19) (0 . 15) (15 . 19) (49 . 53))) ;;; (posix-check-13 ("\\(\\([-[:alnum:]]*\\)\\([-[:alnum:]][-[:alnum:]][-[:alnum:]]*\\)\\)--.*--\\(\\3\\)" #f) ;;; #f ;;; ("abcd--abcx--mlkj--oiu--xcvxcv--234--anb--abcq--xyz--cq--abcq--lmno--aqbc--sdlfj--abcq--xy8--yabc--dsfl--weoru--sdlfq" #(0 1 2 3 4)) ;;; #((41 . 8) (0 . 0))) ;;; ;;; (posix-check-14 ("\\([-[:alnum:]][-[:alnum:]][-[:alnum:]]*\\)--.*--\\1" #f) ;;; #f ;;; ("abcd--abcx--mlkj--oiu--xcvxcv--234--anb--abcq--xyz--abcq--lmno--aqbc--sdlfj--abcq--xy8--yabc--dsfl--weoru--sdlfj" #(0 1)) ;;; #((41 . 81) (41 . 45))) ;;; ;; Rx Tests ;; ;; Miscellaneous tests of some Rx-specific extensions ;; and limits. ;; ;; (rx-0 ("[[:(abc\\|\\(def\\)):]]*\\1" #f) #f ("defabcdef" #f) #f) (rx-1 ("\\(\\(a\\?\\)\\)*xa*" #f) #f ("axa" #(0 1 2)) #((0 . 3) (0 . 1) (0 . 1))) (rx-2 ("\\(abc\\|abcd\\)\\(d\\|\\)" #f) #f ("abcd" #(0 1 2)) #((0 . 4) (0 . 4) (4 . 4))) (rx-3 ("(abcd|){2,3}" REG_EXTENDED) #f ("abcd" #(0 1)) #((0 . 4) (0 . 4))) (rx-4 ("(abcd|){10,11}" REG_EXTENDED) #f ("abcd" #(0 1)) #((0 . 4) (0 . 4))) (rx-5 ("(abcd){256}" REG_EXTENDED) REG_BADBR #f #f) (rx-6 ("(abcd){0,256}" REG_EXTENDED) REG_BADBR #f #f) (rx-7 ("a{1,}" REG_EXTENDED) #f ("aaaaa" #(0)) #((0 . 5))) (rx-8 ("\\(abc$\\)" #f) #f ("abc" 0) "abc") (rx-9 ("[[:(abc$):]]" #f) #f ("abc" 0) "abc") (rx-10 ("[[:(abc$):]]" #f) #f ("abc$" #f) #f) (rx-11 ("(abc|abcd)(d|)" REG_EXTENDED) #f ("abcd" (0 1 2)) ("abcd" "abcd" "")) (rx-12 ("(ab(c)d|abc)(d|)" REG_EXTENDED) #f ("abcd" (0 1 2 3)) ("abcd" "abcd" "c" "")) )) tla-1.3.5+dfsg/src/hackerlab/tests/arrays-tests/0000755000175000017500000000000010457621774020260 5ustar userusertla-1.3.5+dfsg/src/hackerlab/tests/arrays-tests/unit-ar.sh0000744000175000017500000000054110457621774022174 0ustar useruser#!/bin/sh # Copyright (C) 2001,2002 Tom Lord # # See the file "COPYING" for further information about # the copyright and warranty status of this work. # set -e arg0="$0" srcdir=`dirname "$arg0"` echo ================ unit-ar tests ================ ./unit-ar echo ...passed # tag: Tom Lord Tue Dec 4 14:54:30 2001 (arrays-tests/unit-ar.sh) # tla-1.3.5+dfsg/src/hackerlab/tests/arrays-tests/unit-pow2-array.sh0000744000175000017500000000056210457621774023600 0ustar useruser#!/bin/sh # Copyright (C) 2002 Tom Lord # # See the file "COPYING" for further information about # the copyright and warranty status of this work. # set -e arg0="$0" srcdir=`dirname "$arg0"` echo ================ unit-pow2-array tests ================ ./unit-pow2-array echo ...passed # tag: Tom Lord Tue Dec 4 14:54:30 2001 (arrays-tests/unit-pow2-array.sh) # tla-1.3.5+dfsg/src/hackerlab/tests/arrays-tests/Makefile.in0000644000175000017500000000047410457621774022332 0ustar useruser# tag: Tom Lord Tue Dec 4 14:52:15 2001 (arrays-tests/Makefile.in) # tested-headers := ar.h \ pow2-array.h \ pow2-array-compact.h test-headers := $(addprefix hackerlab/arrays/, $(tested-headers)) libs := $(objroot)/hackerlab/libhackerlab/libhackerlab.a -lm include $(makefiles)/unit-tests.mk tla-1.3.5+dfsg/src/hackerlab/tests/arrays-tests/unit-pow2-array.c0000644000175000017500000000552610457621774023414 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:40:35 2001 (unit-pow2-array.c) */ /* unit-pow2-array.c - * **************************************************************** * Copyright (C) 2000 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/cmd/main.h" #include "hackerlab/arrays/pow2-array-compact.h" #define array_size 0x10000 static int normal_array[array_size]; struct test_array { pow2_array_rules rules; pow2_array array; }; static struct test_array test_arrays[4]; static int default_page[array_size]; int main (int argc, char * argv[]) { int default_value; int x; int y; int z; default_value = (random () % INT_MAX); for (x = 0; x < array_size; ++x) { normal_array[x] = default_value; default_page[x] = default_value; } test_arrays[0].rules = make_pow2_array_rules (lim_use_must_malloc, sizeof (int), (void *)default_page, 15, (size_t)1, 0, (size_t)0x7fff); test_arrays[1].rules = make_pow2_array_rules (lim_use_must_malloc, sizeof (int), (void *)default_page, 13, (size_t)7, 9, (size_t)0xf, 0, (size_t)0x1ff); test_arrays[2].rules = make_pow2_array_rules (lim_use_must_malloc, sizeof (int), (void *)default_page, 12, (size_t)0xf, 8, (size_t)0xf, 0, (size_t)0xff); test_arrays[3].rules = make_pow2_array_rules (lim_use_must_malloc, sizeof (int), (void *)default_page, 12, (size_t)0xf, 8, (size_t)0xf, 6, (size_t)3, 0, (size_t)0x3f); for (y = 0; y < 4; ++y) test_arrays[y].array = pow2_array_alloc (lim_use_must_malloc, test_arrays[y].rules); for (x = 0; x <= (2 * array_size); ++x) { if ((x % 0x100) == 0) { if ((x % 0x1000) == 0) safe_printfmt (1, "...%d\n", x); for (y = 0; y < array_size; ++y) { int reference; reference = normal_array[y]; for (z = 0; z < 4; ++z) { if (reference != (*(int *)pow2_array_rref (test_arrays[z].array, y))) { safe_printfmt (2, "Array %d differs at position %d at iteration %d\n", z, y, x); exit (1); } } } } { int pos; int new_value; pos = (random () % array_size); new_value = (random () % INT_MAX); normal_array[pos] = new_value; for (y = 0; y < 4; ++y) { *(int *)pow2_array_ref (test_arrays[y].array, pos) = new_value; } } } safe_printfmt (1, "testing pow2_array_compact...\n"); for (z = 0; z < 4; ++z) pow2_array_compact (test_arrays[z].array, 0, 0, 0); for (y = 0; y < array_size; ++y) { int reference; reference = normal_array[y]; for (z = 0; z < 4; ++z) { if (reference != (*(int *)pow2_array_rref (test_arrays[z].array, y))) { safe_printfmt (2, "Array %d differs at position %d at iteration %d\n", z, y, x); exit (1); } } } safe_printfmt (1, "completed pow2-array tests successfully"); exit (0); } tla-1.3.5+dfsg/src/hackerlab/tests/arrays-tests/DESC0000644000175000017500000000171110457621774020721 0ustar useruser# tag: Tom Lord Tue Dec 4 15:05:27 2001 (arrays-tests/DESC) # We test the installed header files to make sure they compile. unit-ar Perform a random sequence of calls to the functions in "flux/arrays/ar.h" creating a number of test arrays and operating on them. Elements of test arrays are initialized with hash values based on their index. These values are checked whenever the array is operated on, to look for signs of overwrite. The alignment of arrays is also checked (it should agree with FLUX_ALIGNMENT defined in "flux/machine/alignment.h") unit-pow2-array Perform a series of random updates to a number of test arrays, each of which uses a different `pow2_array_rules' (tree structure). Perform the same updates on a flat array. Periodically compare all of the arrays to make sure they are equal. Note that pow2_array_print is not tested. However, if that function breaks, other tests (e.g. unicode database tests) will fail. tla-1.3.5+dfsg/src/hackerlab/tests/arrays-tests/PLUGIN/0000755000175000017500000000000010457621774021256 5ustar userusertla-1.3.5+dfsg/src/hackerlab/tests/arrays-tests/PLUGIN/REQ0000644000175000017500000000003010457621774021621 0ustar userusermem-tests arrays-tests tla-1.3.5+dfsg/src/hackerlab/tests/arrays-tests/unit-ar.c0000644000175000017500000001506310457621774022010 0ustar useruser/* unit-ar.c - test ar.c * **************************************************************** * Copyright (C) 2000 Thomas Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/machine/alignment.h" #include "hackerlab/bugs/panic.h" #include "hackerlab/char/str.h" #include "hackerlab/arrays/ar.h" #include "hackerlab/fmt/cvt.h" #include "hackerlab/cmd/main.h" static t_uchar * program_name = "unit-ar"; static t_uchar * usage = "[options]"; static t_uchar * version_string = "1.0"; #define OPTS(OP, OP2) \ OP (opt_help_msg, "h", "help", 0, \ "Display a help message and exit.") \ OP (opt_version, "V", "version", 0, \ "Display a release identifier string") \ OP2 (opt_version, 0, 0, 0, "and exit.") \ OP (opt_iterations, "i", "iterations n", 1, \ "Perform tests.") enum options { OPTS (OPT_ENUM, OPT_IGN) }; struct opt_desc opts[] = { OPTS (OPT_DESC, OPT_DESC) {-1, 0, 0, 0, 0} }; #define HASH_INDEX(X) ((((X) >> 8) & 0xff) ^ ((X) & 0xff)) static void check_array (size_t size, unsigned long * ar) { int x; invariant (0 == ((unsigned long)ar & (MACHINE_ALIGNMENT - 1))); invariant (size == ar_size ((void *)ar, lim_use_must_malloc, sizeof (*ar))); for (x = 0; x < size; ++x) invariant (ar[x] == HASH_INDEX (x)); } int main (int argc, char * argv[]) { int errn; int o; struct opt_parsed * option; unsigned int iterations; option = 0; iterations = 10000; while (1) { o = opt_standard (lim_use_must_malloc, &option, opts, &argc, argv, program_name, usage, version_string, 0, opt_help_msg, opt_none, opt_version); if (o == opt_none) break; switch (o) { default: safe_printfmt (2, "unhandled option `%s'\n", option->opt_string); panic ("internal error parsing arguments"); usage_error: opt_usage (2, argv[0], program_name, usage, 1); panic_exit (); bogus_arg: safe_printfmt (2, "ill-formed argument for `%s' (`%s')\n", option->opt_string, option->arg_string); goto usage_error; case opt_iterations: if (cvt_decimal_to_uint (&errn, &iterations, option->arg_string, str_length (option->arg_string))) goto bogus_arg; break; } } { # define MAX_ARRAYS 1024 unsigned long * arrays[1024]; size_t sizes[1024]; int n_arrays; enum ar_op { op_new = 0, op_ar_size, op_ar_setsize, op_ar_compact, op_ar_free, op_push, op_pop, op_copy, n_ops = op_copy + 1 }; int counts[n_ops]; int x; for (x = 0; x < n_ops; ++x) counts[x] = 0; n_arrays = 0; while (iterations--) { int choose; enum ar_op op; if (!n_arrays) { op = op_new; choose = 0; } else { op = (enum ar_op)(random () % n_ops); choose = (random () % n_arrays); } counts[op]++; switch (op) { { case op_new: if (n_arrays == MAX_ARRAYS) break; else { size_t size; int x; size = 1 + random () % 1024; arrays[n_arrays] = 0; ar_setsize ((void **)&arrays[n_arrays], lim_use_must_malloc, size, sizeof (unsigned long)); for (x = 0; x < size; ++x) arrays[n_arrays][x] = HASH_INDEX(x); sizes[n_arrays] = size; ++n_arrays; } case op_copy: if (n_arrays == MAX_ARRAYS) break; else { check_array (sizes[choose], arrays[choose]); arrays[n_arrays] = (unsigned long *)ar_copy ((void *)arrays[choose], lim_use_must_malloc, sizeof (unsigned long)); sizes[n_arrays] = sizes[choose]; check_array (sizes[n_arrays], arrays[n_arrays]); ++n_arrays; } case op_ar_size: check_array (sizes[choose], arrays[choose]); invariant (sizes[choose] == ar_size ((void *)arrays[choose], lim_use_must_malloc, sizeof (*arrays[choose]))); break; case op_ar_compact: check_array (sizes[choose], arrays[choose]); ar_compact ((void **)&arrays[choose], lim_use_must_malloc, sizeof (unsigned long)); check_array (sizes[choose], arrays[choose]); break; case op_push: check_array (sizes[choose], arrays[choose]); *(unsigned long *)ar_push ((void **)&arrays[choose], lim_use_must_malloc, sizeof (unsigned long)) = HASH_INDEX(sizes[choose]); ++sizes[choose]; check_array (sizes[choose], arrays[choose]); break; case op_pop: { unsigned long val; check_array (sizes[choose], arrays[choose]); if (!sizes[choose]) break; val = arrays[choose][sizes[choose] - 1]; invariant (val == *(unsigned long *)ar_pop ((void **)&arrays[choose], lim_use_must_malloc, sizeof (unsigned long))); --sizes[choose]; check_array (sizes[choose], arrays[choose]); break; } case op_ar_setsize: { size_t size; size_t old_size; size_t smaller; size_t x; check_array (sizes[choose], arrays[choose]); old_size = sizes[choose]; size = random () % 1024; smaller = (old_size < size ? old_size : size); ar_setsize ((void **)&arrays[choose], lim_use_must_malloc, size, sizeof (unsigned long)); sizes[choose] = size; for (x = 0; x < smaller; ++x) invariant (arrays[choose][x] == HASH_INDEX (x)); for (x = smaller; x < size; ++x) { arrays[choose][x] = HASH_INDEX (x); } check_array (sizes[choose], arrays[choose]); break; } case op_ar_free: { unsigned long * ar; check_array (sizes[choose], arrays[choose]); ar = arrays[choose]; arrays[choose] = arrays[n_arrays - 1]; sizes[choose ] = sizes[n_arrays - 1]; --n_arrays; ar_free ((void **)&ar, lim_use_must_malloc); invariant (ar == 0); break; } default: while (1) panic ("unknown operation"); } } } { int total; total = 0; safe_printfmt (1, "op_new: %d tests\n", counts[op_new]); total += counts[op_new]; safe_printfmt (1, "op_ar_size: %d tests\n", counts[op_ar_size]); total += counts[op_ar_size]; safe_printfmt (1, "op_ar_setsize: %d tests\n", counts[op_ar_setsize]); total += counts[op_ar_setsize]; safe_printfmt (1, "op_ar_compact: %d tests\n", counts[op_ar_compact]); total += counts[op_ar_compact]; safe_printfmt (1, "op_ar_free: %d tests\n", counts[op_ar_free]); total += counts[op_ar_free]; safe_printfmt (1, "op_push: %d tests\n", counts[op_push]); total += counts[op_push]; safe_printfmt (1, "op_pop: %d tests\n", counts[op_pop]); total += counts[op_pop]; safe_printfmt (1, "op_copy: %d tests\n", counts[op_copy]); total += counts[op_copy]; safe_printfmt (1, "TOTAL tests: %d\n", total); } } return 0; } tla-1.3.5+dfsg/src/hackerlab/tests/uni-tests/0000755000175000017500000000000010457621774017552 5ustar userusertla-1.3.5+dfsg/src/hackerlab/tests/uni-tests/cvt_opt.h0000644000175000017500000000155410457621774021406 0ustar useruser/* cvt_opt.h: conversion options parsing * **************************************************************** * Copyright (C) 2004 by Jose Antonio Ortega Ruiz * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__UNI_TESTS__CVT_OPT_H #define INCLUDE__UNI_TESTS__CVT_OPT_H #include "hackerlab/cmd/main.h" typedef enum { cvt_8_16 = 0, cvt_8_32, cvt_16_8, cvt_16_32, cvt_32_8, cvt_32_16 } conversion_t; extern void cvt_option_setup (t_uchar * program_name, t_uchar * usage, t_uchar * version); extern conversion_t cvt_option (int argc, char * argv[], int * non_native); #endif /* INCLUDE__UNI_TESTS__CVT_OPT_H */ /* arch-tag: Jose Antonio Ortega Ruiz Sun Feb 29 2004 20:40:01 (cvt_opt.h) */ tla-1.3.5+dfsg/src/hackerlab/tests/uni-tests/unit-coding.sh0000644000175000017500000000436610457621774022337 0ustar useruser#!/bin/sh # tag: Tom Lord Tue Dec 4 14:54:36 2001 (uni-tests/unit-coding.sh) # set -e arg0="$0" srcdir=`dirname "$arg0"` echo "================ unit-coding: UTF-8/UTF-16/UTF-32 conversion tests ================" echo "Native byte order tests..." ./unit-cvt --8-to-16 < $srcdir/demo.utf8 > ,ref-utf16 ./unit-cvt --16-to-8 < ,ref-utf16 > ,ref-utf8 ./unit-cvt --8-to-32 < $srcdir/demo.utf8 > ,ref-utf32 ./unit-cvt --32-to-8 < ,ref-utf32 > ,,ref-utf8 ./unit-cvt --16-to-32 < ,ref-utf16 > ,,ref-utf32 ./unit-cvt --32-to-16 < ,ref-utf32 > ,,ref-utf16 cmp $srcdir/demo.utf8 ,ref-utf8 cmp $srcdir/demo.utf8 ,,ref-utf8 cmp ,ref-utf32 ,,ref-utf32 cmp ,ref-utf16 ,,ref-utf16 # # ./unit-coding --8-to-16 < $srcdir/demo.utf8 > ,uni-utf16 # ./unit-coding --16-to-8 < ,uni-utf16 > ,uni-utf8 # ./unit-coding --8-to-32 < $srcdir/demo.utf8 > ,uni-utf32 # ./unit-coding --32-to-8 < ,ref-utf32 > ,,uni-utf8 # ./unit-coding --16-to-32 < ,ref-utf16 > ,,uni-utf32 # ./unit-coding --32-to-16 < ,ref-utf32 > ,,uni-utf16 # # cmp ,ref-utf16 ,uni-utf16 # cmp ,ref-utf8 ,uni-utf8 # cmp ,ref-utf32 ,uni-utf32 # cmp ,ref-utf8 ,,uni-utf8 # cmp ,ref-utf16 ,,uni-utf16 # cmp ,ref-utf32 ,,uni-utf32 # # ./unit-coding --32-to-8 < ,uni-utf32 > ,,uni-utf8 # ./unit-coding --16-to-32 < ,uni-utf16 > ,,uni-utf32 # ./unit-coding --32-to-16 < ,uni-utf32 > ,,uni-utf16 # # cmp ,ref-utf8 ,,uni-utf8 # cmp ,ref-utf16 ,,uni-utf16 # cmp ,ref-utf32 ,,uni-utf32 # # echo "...passed" # # echo "Non-native byte order tests..." # # ./unit-coding -n --8-to-16 < $srcdir/demo.utf8 > ,uni-utf16 # ./unit-coding -n --16-to-8 < ,uni-utf16 > ,uni-utf8 # ./unit-coding -n --8-to-32 < $srcdir/demo.utf8 > ,uni-utf32 # ./unit-coding -n --32-to-8 < ,ref-utf32 > ,,uni-utf8 # ./unit-coding -n --16-to-32 < ,ref-utf16 > ,,uni-utf32 # ./unit-coding -n --32-to-16 < ,ref-utf32 > ,,uni-utf16 # # cmp ,ref-utf16 ,uni-utf16 # cmp ,ref-utf8 ,uni-utf8 # cmp ,ref-utf32 ,uni-utf32 # cmp ,ref-utf8 ,,uni-utf8 # cmp ,ref-utf32 ,,uni-utf32 # cmp ,ref-utf16 ,,uni-utf16 # # ./unit-coding -n --32-to-8 < ,uni-utf32 > ,,uni-utf8 # ./unit-coding -n --16-to-32 < ,uni-utf16 > ,,uni-utf32 # ./unit-coding -n --32-to-16 < ,uni-utf32 > ,,uni-utf16 # # cmp ,ref-utf8 ,,uni-utf8 # cmp ,ref-utf16 ,,uni-utf16 # cmp ,ref-utf32 ,,uni-utf32 # echo "...passed" tla-1.3.5+dfsg/src/hackerlab/tests/uni-tests/cvt_opt.c0000644000175000017500000000576610457621774021412 0ustar useruser/* cvt_opt.c: cvt_opt implementation * **************************************************************** * Copyright (C) 2004 by Jose Antonio Ortega Ruiz * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/tests/uni-tests/cvt_opt.h" static t_uchar * program_name = "test program"; static t_uchar * usage = "[options] < input-file"; static t_uchar * version_string = "1.0"; #define OPTS(OP, OP2) \ OP (opt_help_msg, "h", "help", 0, \ "Display a help message and exit.") \ OP (opt_version, "V", "version", 0, \ "Display a release identifier string") \ OP2 (opt_version, 0, 0, 0, "and exit.") \ OP (opt_non_native, "n", "non_native", 0, \ "Use non-native byte order.") \ OP (opt_cvt_8_16, 0, "8-to-16", 0, \ "Convert UTF-8 to UTF-16.") \ OP (opt_cvt_8_32, 0, "8-to-32", 0, \ "Convert UTF-8 to UTF-32.") \ OP (opt_cvt_16_8, 0, "16-to-8", 0, \ "Convert UTF-16 to UTF-8.") \ OP (opt_cvt_16_32, 0, "16-to-32", 0, \ "Convert UTF-16 to UTF-32.") \ OP (opt_cvt_32_8, 0, "32-to-8", 0, \ "Convert UTF-32 to UTF-8.") \ OP (opt_cvt_32_16, 0, "32-to-16", 0, \ "Convert UTF-32 to UTF-16.") enum options { OPTS (OPT_ENUM, OPT_IGN) }; struct opt_desc opts[] = { OPTS (OPT_DESC, OPT_DESC) {-1, 0, 0, 0, 0} }; void cvt_option_setup (t_uchar * pn, t_uchar * usg, t_uchar * ver) { if (pn) program_name = pn; if (usg) usage = usg; if (ver) version_string = ver; } conversion_t cvt_option (int argc, char * argv[], int * non_native) { conversion_t fromto; int o; struct opt_parsed * option; fromto = -1; option = 0; if (non_native) *non_native = 0; while (1) { o = opt_standard (lim_use_must_malloc, &option, opts, &argc, argv, program_name, usage, version_string, 0, opt_help_msg, opt_none, opt_version); if (o == opt_none) break; switch (o) { default: safe_printfmt (2, "unhandled option `%s'\n", option->opt_string); panic ("internal error parsing arguments"); usage_error: opt_usage (2, argv[0], program_name, usage, 1); panic_exit (); #if 0 bogus_arg: safe_printfmt (2, "ill-formed argument for `%s' (`%s')\n", option->opt_string, option->arg_string); goto usage_error; #endif case opt_non_native: if (non_native) *non_native = 1; break; case opt_cvt_8_16: fromto = cvt_8_16; break; case opt_cvt_8_32: fromto = cvt_8_32; break; case opt_cvt_16_8: fromto = cvt_16_8; break; case opt_cvt_16_32: fromto = cvt_16_32; break; case opt_cvt_32_8: fromto = cvt_32_8; break; case opt_cvt_32_16: fromto = cvt_32_16; break; } } if ((argc != 1) || (fromto == -1)) goto usage_error; return fromto; } /* arch-tag: Jose Antonio Ortega Ruiz Sun Feb 29 2004 21:13:10 (cvt_opt.c) */ tla-1.3.5+dfsg/src/hackerlab/tests/uni-tests/unit-cvt.c0000644000175000017500000000557610457621774021504 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:41:20 2001 (unit-cvt.c) */ /* unit-cvt.c - * **************************************************************** * Copyright (C) 2000, 2004 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/tests/uni-tests/cvtutf.h" #include "hackerlab/tests/uni-tests/cvt_opt.h" int main (int argc, char * argv[]) { int errn; conversion_t fromto; t_uchar * file_contents; size_t len; size_t allocated; t_uchar * converted_text; t_uchar * converted_end; ConversionResult result; size_t write_amt; if (vu_file_to_string (&errn, &file_contents, &len, 0)) panic ("error reading file"); allocated = len * 6; converted_text = (t_uchar *)must_malloc (allocated); converted_end = converted_text; cvt_option_setup ("unit-cvt", 0, 0); fromto = cvt_option (argc, argv, 0); switch (fromto) { default: panic ("Unsupported conversion"); break; case cvt_8_16: result = ConvertUTF8toUTF16 ((const UTF8 **)&file_contents, (UTF8 *)(file_contents + len), (UTF16 **)&converted_end, (UTF16 *)(converted_end + allocated), strictConversion); break; case cvt_8_32: result = ConvertUTF8toUTF32 ((const UTF8 **)&file_contents, (UTF8 *)(file_contents + len), (UTF32 **)&converted_end, (UTF32 *)(converted_end + allocated), strictConversion); break; case cvt_16_8: result = ConvertUTF16toUTF8 ((const UTF16 **)&file_contents, (UTF16 *)(file_contents + len), (UTF8 **)&converted_end, (UTF8 *)(converted_end + allocated), strictConversion); break; case cvt_16_32: result = ConvertUTF16toUTF32 ((const UTF16 **)&file_contents, (UTF16 *)(file_contents + len), (UTF32 **)&converted_end, (UTF32 *)(converted_end + allocated), strictConversion); break; case cvt_32_8: result = ConvertUTF32toUTF8 ((const UTF32 **)&file_contents, (UTF32 *)(file_contents + len), (UTF8 **)&converted_end, (UTF8 *)(converted_end + allocated), strictConversion); break; case cvt_32_16: result = ConvertUTF32toUTF16 ((const UTF32 **)&file_contents, (UTF32 *)(file_contents + len), (UTF16 **)&converted_end, (UTF16 *)(converted_end + allocated), strictConversion); break; } if (conversionOK != result) panic ("conversion failure"); write_amt = (converted_end - converted_text); if (write_amt != vu_write_retry (&errn, 1, converted_text, write_amt)) panic ("write failure"); return 0; } tla-1.3.5+dfsg/src/hackerlab/tests/uni-tests/Makefile.in0000644000175000017500000000041710457621774021621 0ustar useruser# tag: Tom Lord Tue Dec 4 14:46:56 2001 (Makefile.in) # tested-headers := coding.h \ unidata.h test-headers := $(addprefix hackerlab/uni/, $(tested-headers)) libs := $(objroot)/hackerlab/libhackerlab/libhackerlab.a -lm include $(makefiles)/unit-tests.mk tla-1.3.5+dfsg/src/hackerlab/tests/uni-tests/DESC0000644000175000017500000000133210457621774020212 0ustar useruser# tag: Tom Lord Tue Dec 4 15:05:30 2001 (uni-tests/DESC) # We test the installed header files to make sure they compile. unit-coding, unit-cvt Both programs convert between UTF-8, UTF-16 and UTF-32. unit-cvt is based on "ConvertUTF.c" (called "cvtutf.c" here). ConvertUTF.c is distributed on the CD-ROM that comes with the Unicode standard and from the unicode.org web site (we took it from there). It is used here as a reference implementation of conversions. unit-coding is based on the conversion functions in "hackerlab/uni/coding.h". unit-coding.sh converts a UTF-8 file to UTF-16 and UTF-32, and back again, using both native and non-native byte order, comparing the results produced by the two programs. tla-1.3.5+dfsg/src/hackerlab/tests/uni-tests/cvtutf.c0000644000175000017500000003770410457621774021244 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:41:20 2001 (cvtutf.c) */ /* ================================================================ */ /* * Copyright 2001 Unicode, Inc. * * Disclaimer * * This source code is provided as is by Unicode, Inc. No claims are * made as to fitness for any particular purpose. No warranties of any * kind are expressed or implied. The recipient agrees to determine * applicability of information provided. If this file has been * purchased on magnetic or optical media from Unicode, Inc., the * sole remedy for any claim will be exchange of defective media * within 90 days of receipt. * * Limitations on Rights to Redistribute This Code * * Unicode, Inc. hereby grants the right to freely use the information * supplied in this file in the creation of products supporting the * Unicode Standard, and to make copies of this file in any form * for internal or external distribution as long as this notice * remains attached. */ /* --------------------------------------------------------------------- Conversions between UTF32, UTF-16, and UTF-8. Source code file. Author: Mark E. Davis, 1994. Rev History: Rick McGowan, fixes & updates May 2001. Sept 2001: fixed const & error conditions per mods suggested by S. Parent & A. Lillich. See the header file "ConvertUTF.h" for complete documentation. ------------------------------------------------------------------------ */ #include "hackerlab/tests/uni-tests/cvtutf.h" #ifdef CVTUTF_DEBUG #include #endif static const int halfShift = 10; /* used for shifting by 10 bits */ static const UTF32 halfBase = 0x0010000UL; static const UTF32 halfMask = 0x3FFUL; #define UNI_SUR_HIGH_START (UTF32)0xD800 #define UNI_SUR_HIGH_END (UTF32)0xDBFF #define UNI_SUR_LOW_START (UTF32)0xDC00 #define UNI_SUR_LOW_END (UTF32)0xDFFF #define false 0 #define true 1 /* --------------------------------------------------------------------- */ ConversionResult ConvertUTF32toUTF16 ( const UTF32** sourceStart, const UTF32* sourceEnd, UTF16** targetStart, UTF16* targetEnd, ConversionFlags flags) { ConversionResult result = conversionOK; const UTF32* source = *sourceStart; UTF16* target = *targetStart; while (source < sourceEnd) { UTF32 ch; if (target >= targetEnd) { result = targetExhausted; break; } ch = *source++; if (ch <= UNI_MAX_BMP) { /* Target is a character <= 0xFFFF */ if ((flags == strictConversion) && (ch >= UNI_SUR_HIGH_START && ch <= UNI_SUR_LOW_END)) { --source; /* return to the illegal value itself */ result = sourceIllegal; break; } else { *target++ = ch; /* normal case */ } } else if (ch > UNI_MAX_UTF16) { if (flags == strictConversion) { result = sourceIllegal; } else { *target++ = UNI_REPLACEMENT_CHAR; } } else { /* target is a character in range 0xFFFF - 0x10FFFF. */ if (target + 1 >= targetEnd) { --source; /* Back up source pointer! */ result = targetExhausted; break; } ch -= halfBase; *target++ = (ch >> halfShift) + UNI_SUR_HIGH_START; *target++ = (ch & halfMask) + UNI_SUR_LOW_START; } } *sourceStart = source; *targetStart = target; return result; } /* --------------------------------------------------------------------- */ ConversionResult ConvertUTF16toUTF32 ( const UTF16** sourceStart, const UTF16* sourceEnd, UTF32** targetStart, UTF32* targetEnd, ConversionFlags flags) { ConversionResult result = conversionOK; const UTF16* source = *sourceStart; UTF32* target = *targetStart; UTF32 ch, ch2; while (source < sourceEnd) { const UTF16* oldSource = source; /* In case we have to back up because of target overflow. */ ch = *source++; if (ch >= UNI_SUR_HIGH_START && ch <= UNI_SUR_HIGH_END && source < sourceEnd) { ch2 = *source; if (ch2 >= UNI_SUR_LOW_START && ch2 <= UNI_SUR_LOW_END) { ch = ((ch - UNI_SUR_HIGH_START) << halfShift) + (ch2 - UNI_SUR_LOW_START) + halfBase; ++source; } else if (flags == strictConversion) { /* it's an unpaired high surrogate */ --source; /* return to the illegal value itself */ result = sourceIllegal; break; } } else if ((flags == strictConversion) && (ch >= UNI_SUR_LOW_START && ch <= UNI_SUR_LOW_END)) { /* an unpaired low surrogate */ --source; /* return to the illegal value itself */ result = sourceIllegal; break; } if (target >= targetEnd) { source = oldSource; /* Back up source pointer! */ result = targetExhausted; break; } *target++ = ch; } *sourceStart = source; *targetStart = target; #ifdef CVTUTF_DEBUG if (result == sourceIllegal) { fprintf(stderr, "ConvertUTF16toUTF32 illegal seq 0x%04x,%04x\n", ch, ch2); fflush(stderr); } #endif return result; } /* --------------------------------------------------------------------- */ /* * Index into the table below with the first byte of a UTF-8 sequence to * get the number of trailing bytes that are supposed to follow it. */ static const char trailingBytesForUTF8[256] = { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, 3,3,3,3,3,3,3,3,4,4,4,4,5,5,5,5 }; /* * Magic values subtracted from a buffer value during UTF8 conversion. * This table contains as many values as there might be trailing bytes * in a UTF-8 sequence. */ static const UTF32 offsetsFromUTF8[6] = { 0x00000000UL, 0x00003080UL, 0x000E2080UL, 0x03C82080UL, 0xFA082080UL, 0x82082080UL }; /* * Once the bits are split out into bytes of UTF-8, this is a mask OR-ed * into the first byte, depending on how many bytes follow. There are * as many entries in this table as there are UTF-8 sequence types. * (I.e., one byte sequence, two byte... six byte sequence.) */ static const UTF8 firstByteMark[7] = { 0x00, 0x00, 0xC0, 0xE0, 0xF0, 0xF8, 0xFC }; /* --------------------------------------------------------------------- */ /* The interface converts a whole buffer to avoid function-call overhead. * Constants have been gathered. Loops & conditionals have been removed as * much as possible for efficiency, in favor of drop-through switches. * (See "Note A" at the bottom of the file for equivalent code.) * If your compiler supports it, the "isLegalUTF8" call can be turned * into an inline function. */ /* --------------------------------------------------------------------- */ ConversionResult ConvertUTF16toUTF8 ( const UTF16** sourceStart, const UTF16* sourceEnd, UTF8** targetStart, UTF8* targetEnd, ConversionFlags flags) { ConversionResult result = conversionOK; const UTF16* source = *sourceStart; UTF8* target = *targetStart; while (source < sourceEnd) { UTF32 ch; unsigned short bytesToWrite = 0; const UTF32 byteMask = 0xBF; const UTF32 byteMark = 0x80; const UTF16* oldSource = source; /* In case we have to back up because of target overflow. */ ch = *source++; /* If we have a surrogate pair, convert to UTF32 first. */ if (ch >= UNI_SUR_HIGH_START && ch <= UNI_SUR_HIGH_END && source < sourceEnd) { UTF32 ch2 = *source; if (ch2 >= UNI_SUR_LOW_START && ch2 <= UNI_SUR_LOW_END) { ch = ((ch - UNI_SUR_HIGH_START) << halfShift) + (ch2 - UNI_SUR_LOW_START) + halfBase; ++source; } else if (flags == strictConversion) { /* it's an unpaired high surrogate */ --source; /* return to the illegal value itself */ result = sourceIllegal; break; } } else if ((flags == strictConversion) && (ch >= UNI_SUR_LOW_START && ch <= UNI_SUR_LOW_END)) { --source; /* return to the illegal value itself */ result = sourceIllegal; break; } /* Figure out how many bytes the result will require */ if (ch < (UTF32)0x80) { bytesToWrite = 1; } else if (ch < (UTF32)0x800) { bytesToWrite = 2; } else if (ch < (UTF32)0x10000) { bytesToWrite = 3; } else if (ch < (UTF32)0x200000) { bytesToWrite = 4; } else { bytesToWrite = 2; ch = UNI_REPLACEMENT_CHAR; } target += bytesToWrite; if (target > targetEnd) { source = oldSource; /* Back up source pointer! */ target -= bytesToWrite; result = targetExhausted; break; } switch (bytesToWrite) { /* note: everything falls through. */ case 4: *--target = (ch | byteMark) & byteMask; ch >>= 6; case 3: *--target = (ch | byteMark) & byteMask; ch >>= 6; case 2: *--target = (ch | byteMark) & byteMask; ch >>= 6; case 1: *--target = ch | firstByteMark[bytesToWrite]; } target += bytesToWrite; } *sourceStart = source; *targetStart = target; return result; } /* --------------------------------------------------------------------- */ /* * Utility routine to tell whether a sequence of bytes is legal UTF-8. * This must be called with the length pre-determined by the first byte. * If not calling this from ConvertUTF8to*, then the length can be set by: * length = trailingBytesForUTF8[*source]+1; * and the sequence is illegal right away if there aren't that many bytes * available. * If presented with a length > 4, this returns false. The Unicode * definition of UTF-8 goes up to 4-byte sequences. */ static Boolean isLegalUTF8(const UTF8 *source, int length) { UTF8 a; const UTF8 *srcptr = source+length; switch (length) { default: return false; /* Everything else falls through when "true"... */ case 4: if ((a = (*--srcptr)) < 0x80 || a > 0xBF) return false; case 3: if ((a = (*--srcptr)) < 0x80 || a > 0xBF) return false; case 2: if ((a = (*--srcptr)) > 0xBF) return false; switch (*source) { /* no fall-through in this inner switch */ case 0xE0: if (a < 0xA0) return false; break; case 0xF0: if (a < 0x90) return false; break; case 0xF4: if (a > 0x8F) return false; break; default: if (a < 0x80) return false; } case 1: if (*source >= 0x80 && *source < 0xC2) return false; if (*source > 0xF4) return false; } return true; } /* --------------------------------------------------------------------- */ /* * Exported function to return whether a UTF-8 sequence is legal or not. * This is not used here; it's just exported. */ Boolean isLegalUTF8Sequence(const UTF8 *source, const UTF8 *sourceEnd) { int length = trailingBytesForUTF8[*source]+1; if (source+length > sourceEnd) { return false; } return isLegalUTF8(source, length); } /* --------------------------------------------------------------------- */ ConversionResult ConvertUTF8toUTF16 ( const UTF8** sourceStart, const UTF8* sourceEnd, UTF16** targetStart, UTF16* targetEnd, ConversionFlags flags) { ConversionResult result = conversionOK; const UTF8* source = *sourceStart; UTF16* target = *targetStart; while (source < sourceEnd) { UTF32 ch = 0; unsigned short extraBytesToRead = trailingBytesForUTF8[*source]; if (source + extraBytesToRead >= sourceEnd) { result = sourceExhausted; break; } /* Do this check whether lenient or strict */ if (! isLegalUTF8(source, extraBytesToRead+1)) { result = sourceIllegal; break; } /* * The cases all fall through. See "Note A" below. */ switch (extraBytesToRead) { case 3: ch += *source++; ch <<= 6; case 2: ch += *source++; ch <<= 6; case 1: ch += *source++; ch <<= 6; case 0: ch += *source++; } ch -= offsetsFromUTF8[extraBytesToRead]; if (target >= targetEnd) { source -= (extraBytesToRead+1); /* Back up source pointer! */ result = targetExhausted; break; } if (ch <= UNI_MAX_BMP) { /* Target is a character <= 0xFFFF */ if ((flags == strictConversion) && (ch >= UNI_SUR_HIGH_START && ch <= UNI_SUR_LOW_END)) { source -= (extraBytesToRead+1); /* return to the illegal value itself */ result = sourceIllegal; break; } else { *target++ = ch; /* normal case */ } } else if (ch > UNI_MAX_UTF16) { if (flags == strictConversion) { result = sourceIllegal; source -= (extraBytesToRead+1); /* return to the start */ break; /* Bail out; shouldn't continue */ } else { *target++ = UNI_REPLACEMENT_CHAR; } } else { /* target is a character in range 0xFFFF - 0x10FFFF. */ if (target + 1 >= targetEnd) { source -= (extraBytesToRead+1); /* Back up source pointer! */ result = targetExhausted; break; } ch -= halfBase; *target++ = (ch >> halfShift) + UNI_SUR_HIGH_START; *target++ = (ch & halfMask) + UNI_SUR_LOW_START; } } *sourceStart = source; *targetStart = target; return result; } /* --------------------------------------------------------------------- */ ConversionResult ConvertUTF32toUTF8 ( const UTF32** sourceStart, const UTF32* sourceEnd, UTF8** targetStart, UTF8* targetEnd, ConversionFlags flags) { ConversionResult result = conversionOK; const UTF32* source = *sourceStart; UTF8* target = *targetStart; while (source < sourceEnd) { UTF32 ch; unsigned short bytesToWrite = 0; const UTF32 byteMask = 0xBF; const UTF32 byteMark = 0x80; ch = *source++; /* surrogates of any stripe are not legal UTF32 characters */ if (flags == strictConversion ) { if ((ch >= UNI_SUR_HIGH_START) && (ch <= UNI_SUR_LOW_END)) { --source; /* return to the illegal value itself */ result = sourceIllegal; break; } } /* Figure out how many bytes the result will require */ if (ch < (UTF32)0x80) { bytesToWrite = 1; } else if (ch < (UTF32)0x800) { bytesToWrite = 2; } else if (ch < (UTF32)0x10000) { bytesToWrite = 3; } else if (ch < (UTF32)0x200000) { bytesToWrite = 4; } else { bytesToWrite = 2; ch = UNI_REPLACEMENT_CHAR; } target += bytesToWrite; if (target > targetEnd) { --source; /* Back up source pointer! */ target -= bytesToWrite; result = targetExhausted; break; } switch (bytesToWrite) { /* note: everything falls through. */ case 4: *--target = (ch | byteMark) & byteMask; ch >>= 6; case 3: *--target = (ch | byteMark) & byteMask; ch >>= 6; case 2: *--target = (ch | byteMark) & byteMask; ch >>= 6; case 1: *--target = ch | firstByteMark[bytesToWrite]; } target += bytesToWrite; } *sourceStart = source; *targetStart = target; return result; } /* --------------------------------------------------------------------- */ ConversionResult ConvertUTF8toUTF32 ( const UTF8** sourceStart, const UTF8* sourceEnd, UTF32** targetStart, UTF32* targetEnd, ConversionFlags flags) { ConversionResult result = conversionOK; const UTF8* source = *sourceStart; UTF32* target = *targetStart; while (source < sourceEnd) { UTF32 ch = 0; unsigned short extraBytesToRead = trailingBytesForUTF8[*source]; if (source + extraBytesToRead >= sourceEnd) { result = sourceExhausted; break; } /* Do this check whether lenient or strict */ if (! isLegalUTF8(source, extraBytesToRead+1)) { result = sourceIllegal; break; } /* * The cases all fall through. See "Note A" below. */ switch (extraBytesToRead) { case 3: ch += *source++; ch <<= 6; case 2: ch += *source++; ch <<= 6; case 1: ch += *source++; ch <<= 6; case 0: ch += *source++; } ch -= offsetsFromUTF8[extraBytesToRead]; if (target >= targetEnd) { source -= (extraBytesToRead+1); /* Back up the source pointer! */ result = targetExhausted; break; } if (ch <= UNI_MAX_UTF32) { *target++ = ch; } else { /* i.e., ch > UNI_MAX_UTF32 */ *target++ = UNI_REPLACEMENT_CHAR; } } *sourceStart = source; *targetStart = target; return result; } /* --------------------------------------------------------------------- Note A. The fall-through switches in UTF-8 reading code save a temp variable, some decrements & conditionals. The switches are equivalent to the following loop: { int tmpBytesToRead = extraBytesToRead+1; do { ch += *source++; --tmpBytesToRead; if (tmpBytesToRead) ch <<= 6; } while (tmpBytesToRead > 0); } In UTF-8 writing code, the switches on "bytesToWrite" are similarly unrolled loops. --------------------------------------------------------------------- */ tla-1.3.5+dfsg/src/hackerlab/tests/uni-tests/cvtutf.h0000644000175000017500000001366310457621774021247 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:41:21 2001 (cvtutf.h) */ /* ================================================================ */ /* * Copyright 2001 Unicode, Inc. * * Disclaimer * * This source code is provided as is by Unicode, Inc. No claims are * made as to fitness for any particular purpose. No warranties of any * kind are expressed or implied. The recipient agrees to determine * applicability of information provided. If this file has been * purchased on magnetic or optical media from Unicode, Inc., the * sole remedy for any claim will be exchange of defective media * within 90 days of receipt. * * Limitations on Rights to Redistribute This Code * * Unicode, Inc. hereby grants the right to freely use the information * supplied in this file in the creation of products supporting the * Unicode Standard, and to make copies of this file in any form * for internal or external distribution as long as this notice * remains attached. */ /* --------------------------------------------------------------------- Conversions between UTF32, UTF-16, and UTF-8. Header file. Several funtions are included here, forming a complete set of conversions between the three formats. UTF-7 is not included here, but is handled in a separate source file. Each of these routines takes pointers to input buffers and output buffers. The input buffers are const. Each routine converts the text between *sourceStart and sourceEnd, putting the result into the buffer between *targetStart and targetEnd. Note: the end pointers are *after* the last item: e.g. *(sourceEnd - 1) is the last item. The return result indicates whether the conversion was successful, and if not, whether the problem was in the source or target buffers. (Only the first encountered problem is indicated.) After the conversion, *sourceStart and *targetStart are both updated to point to the end of last text successfully converted in the respective buffers. Input parameters: sourceStart - pointer to a pointer to the source buffer. The contents of this are modified on return so that it points at the next thing to be converted. targetStart - similarly, pointer to pointer to the target buffer. sourceEnd, targetEnd - respectively pointers to the ends of the two buffers, for overflow checking only. These conversion functions take a ConversionFlags argument. When this flag is set to strict, both irregular sequences and isolated surrogates will cause an error. When the flag is set to lenient, both irregular sequences and isolated surrogates are converted. Whether the flag is strict or lenient, all illegal sequences will cause an error return. This includes sequences such as: , , or in UTF-8, and values above 0x10FFFF in UTF-32. Conformant code must check for illegal sequences. When the flag is set to lenient, characters over 0x10FFFF are converted to the replacement character; otherwise (when the flag is set to strict) they constitute an error. Output parameters: The value "sourceIllegal" is returned from some routines if the input sequence is malformed. When "sourceIllegal" is returned, the source value will point to the illegal value that caused the problem. E.g., in UTF-8 when a sequence is malformed, it points to the start of the malformed sequence. Author: Mark E. Davis, 1994. Rev History: Rick McGowan, fixes & updates May 2001. Fixes & updates, Sept 2001. ------------------------------------------------------------------------ */ /* --------------------------------------------------------------------- The following 4 definitions are compiler-specific. The C standard does not guarantee that wchar_t has at least 16 bits, so wchar_t is no less portable than unsigned short! All should be unsigned values to avoid sign extension during bit mask & shift operations. ------------------------------------------------------------------------ */ #include "hackerlab/machine/types.h" typedef unsigned long UTF32; /* at least 32 bits */ typedef unsigned short UTF16; /* at least 16 bits */ /* typedef unsigned char UTF8; */ /* typically 8 bits */ typedef t_uchar UTF8; typedef unsigned char Boolean; /* 0 or 1 */ /* Some fundamental constants */ #define UNI_REPLACEMENT_CHAR (UTF32)0x0000FFFD #define UNI_MAX_BMP (UTF32)0x0000FFFF #define UNI_MAX_UTF16 (UTF32)0x0010FFFF #define UNI_MAX_UTF32 (UTF32)0x7FFFFFFF typedef enum { conversionOK, /* conversion successful */ sourceExhausted, /* partial character in source, but hit end */ targetExhausted, /* insuff. room in target for conversion */ sourceIllegal /* source sequence is illegal/malformed */ } ConversionResult; typedef enum { strictConversion = 0, lenientConversion } ConversionFlags; /* This is for C++ and does no harm in C */ #ifdef __cplusplus extern "C" { #endif ConversionResult ConvertUTF8toUTF16 ( const UTF8** sourceStart, const UTF8* sourceEnd, UTF16** targetStart, UTF16* targetEnd, ConversionFlags flags); ConversionResult ConvertUTF16toUTF8 ( const UTF16** sourceStart, const UTF16* sourceEnd, UTF8** targetStart, UTF8* targetEnd, ConversionFlags flags); ConversionResult ConvertUTF8toUTF32 ( const UTF8** sourceStart, const UTF8* sourceEnd, UTF32** targetStart, UTF32* targetEnd, ConversionFlags flags); ConversionResult ConvertUTF32toUTF8 ( const UTF32** sourceStart, const UTF32* sourceEnd, UTF8** targetStart, UTF8* targetEnd, ConversionFlags flags); ConversionResult ConvertUTF16toUTF32 ( const UTF16** sourceStart, const UTF16* sourceEnd, UTF32** targetStart, UTF32* targetEnd, ConversionFlags flags); ConversionResult ConvertUTF32toUTF16 ( const UTF32** sourceStart, const UTF32* sourceEnd, UTF16** targetStart, UTF16* targetEnd, ConversionFlags flags); Boolean isLegalUTF8Sequence(const UTF8 *source, const UTF8 *sourceEnd); #ifdef __cplusplus } #endif /* --------------------------------------------------------------------- */ tla-1.3.5+dfsg/src/hackerlab/tests/uni-tests/PLUGIN/0000755000175000017500000000000010457621774020550 5ustar userusertla-1.3.5+dfsg/src/hackerlab/tests/uni-tests/PLUGIN/REQ0000644000175000017500000000010310457621774021114 0ustar useruserbitset-tests uni-tests mem-tests uni-tests hash-tests uni-tests tla-1.3.5+dfsg/src/hackerlab/tests/uni-tests/demo.utf80000600000175000017500000003212610457621774021302 0ustar useruserUTF-8 encoded sample plain-text file ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾ Markus Kuhn [ˈmaʳkÊŠs kuËn] — 1999-08-20 The ASCII compatible UTF-8 encoding of ISO 10646 and Unicode plain-text files is defined in RFC 2279 and in ISO 10646-1 Annex R. Using Unicode/UTF-8, you can write in emails and source code things such as Mathematics and Sciences: ∮ Eâ‹…da = Q, n → ∞, ∑ f(i) = ∠g(i), ∀x∈â„: ⌈x⌉ = −⌊−x⌋, α ∧ ¬β = ¬(¬α ∨ β), â„• ⊆ â„•â‚€ ⊂ ℤ ⊂ ℚ ⊂ ℠⊂ â„‚, ⊥ < a ≠ b ≡ c ≤ d ≪ ⊤ ⇒ (A ⇔ B), 2Hâ‚‚ + Oâ‚‚ ⇌ 2Hâ‚‚O, R = 4.7 kΩ, ⌀ 200 mm Linguistics and dictionaries: ði ıntəˈnæʃənÉ™l fəˈnÉ›tık É™soÊŠsiˈeıʃn Y [ˈÊpsilÉ”n], Yen [jÉ›n], Yoga [ˈjoËgÉ‘] APL: ((Vâ³V)=â³â´V)/Vâ†,V ⌷â†â³â†’â´âˆ†âˆ‡âŠƒâ€¾âŽâ•⌈ Nicer typography in plain text files: â•”â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•— â•‘ â•‘ â•‘ • ‘single’ and “double†quotes â•‘ â•‘ â•‘ â•‘ • Curly apostrophes: “We’ve been here†║ â•‘ â•‘ â•‘ • Latin-1 apostrophe and accents: '´` â•‘ â•‘ â•‘ â•‘ • ‚deutsche‘ „Anführungszeichen“ â•‘ â•‘ â•‘ â•‘ • †, ‡, ‰, •, 3–4, —, −5/+5, â„¢, … â•‘ â•‘ â•‘ â•‘ • ASCII safety test: 1lI|, 0OD, 8B â•‘ â•‘ ╭─────────╮ â•‘ â•‘ • the euro symbol: │ € 14.95 │ â•‘ â•‘ ╰─────────╯ â•‘ ╚â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â• Greek (in Polytonic): The Greek anthem: Σὲ γνωÏίζω ἀπὸ τὴν κόψη τοῦ σπαθιοῦ τὴν Ï„ÏομεÏá½µ, σὲ γνωÏίζω ἀπὸ τὴν ὄψη ποὺ μὲ βία μετÏάει τὴ γῆ. ᾿Απ᾿ τὰ κόκκαλα βγαλμένη τῶν ῾Ελλήνων τὰ ἱεÏá½± καὶ σὰν Ï€Ïῶτα ἀνδÏειωμένη χαῖÏε, ὦ χαῖÏε, ᾿ΕλευθεÏιά! From a speech of Demosthenes in the 4th century BC: Οá½Ï‡á½¶ ταá½Ï„á½° παÏίσταταί μοι γιγνώσκειν, ὦ ἄνδÏες ᾿Αθηναῖοι, ὅταν τ᾿ εἰς τὰ Ï€Ïάγματα ἀποβλέψω καὶ ὅταν Ï€Ïὸς τοὺς λόγους οὓς ἀκούω· τοὺς μὲν Î³á½°Ï Î»á½¹Î³Î¿Ï…Ï‚ πεÏá½¶ τοῦ τιμωÏήσασθαι Φίλιππον á½Ïá¿¶ γιγνομένους, τὰ δὲ Ï€Ïάγματ᾿ εἰς τοῦτο Ï€Ïοήκοντα, ὥσθ᾿ ὅπως μὴ πεισόμεθ᾿ αá½Ï„οὶ Ï€ÏότεÏον κακῶς σκέψασθαι δέον. οá½Î´á½³Î½ οὖν ἄλλο μοι δοκοῦσιν οἱ τὰ τοιαῦτα λέγοντες á¼¢ τὴν ὑπόθεσιν, πεÏá½¶ á¼§Ï‚ βουλεύεσθαι, οá½Ï‡á½¶ τὴν οὖσαν παÏιστάντες ὑμῖν á¼Î¼Î±Ïτάνειν. á¼Î³á½¼ δέ, ὅτι μέν ποτ᾿ á¼Î¾á¿†Î½ τῇ πόλει καὶ τὰ αὑτῆς ἔχειν ἀσφαλῶς καὶ Φίλιππον τιμωÏήσασθαι, καὶ μάλ᾿ ἀκÏιβῶς οἶδα· á¼Ï€á¾¿ á¼Î¼Î¿á¿¦ γάÏ, οὠπάλαι γέγονεν ταῦτ᾿ ἀμφότεÏα· νῦν μέντοι πέπεισμαι τοῦθ᾿ ἱκανὸν Ï€Ïολαβεῖν ἡμῖν εἶναι τὴν Ï€Ïώτην, ὅπως τοὺς συμμάχους σώσομεν. á¼á½°Î½ Î³á½°Ï Ï„Î¿á¿¦Ï„Î¿ βεβαίως ὑπάÏξῃ, τότε καὶ πεÏá½¶ τοῦ τίνα τιμωÏήσεταί τις καὶ ὃν Ï„Ïόπον á¼Î¾á½³ÏƒÏ„αι σκοπεῖν· Ï€Ïὶν δὲ τὴν á¼€Ïχὴν á½€Ïθῶς ὑποθέσθαι, μάταιον ἡγοῦμαι πεÏá½¶ τῆς τελευτῆς á½Î½Ï„ινοῦν ποιεῖσθαι λόγον. Δημοσθένους, Γ´ ᾿Ολυνθιακὸς Georgian: From a Unicode conference invitation: გთხáƒáƒ•თ áƒáƒ®áƒšáƒáƒ•ე გáƒáƒ˜áƒáƒ áƒáƒ— რეგისტრáƒáƒªáƒ˜áƒ Unicode-ის მეáƒáƒ—ე სáƒáƒ”რთáƒáƒ¨áƒáƒ áƒ˜áƒ¡áƒ კáƒáƒœáƒ¤áƒ”რენციáƒáƒ–ე დáƒáƒ¡áƒáƒ¡áƒ¬áƒ áƒ”ბáƒáƒ“, რáƒáƒ›áƒ”ლიც გáƒáƒ˜áƒ›áƒáƒ áƒ—ებრ10-12 მáƒáƒ áƒ¢áƒ¡, ქ. მáƒáƒ˜áƒœáƒªáƒ¨áƒ˜, გერმáƒáƒœáƒ˜áƒáƒ¨áƒ˜. კáƒáƒœáƒ¤áƒ”რენცირშეჰკრებს ერთáƒáƒ“ მსáƒáƒ¤áƒšáƒ˜áƒáƒ¡ ექსპერტებს ისეთ დáƒáƒ áƒ’ებში რáƒáƒ’áƒáƒ áƒ˜áƒªáƒáƒ ინტერნეტი დრUnicode-ი, ინტერნáƒáƒªáƒ˜áƒáƒœáƒáƒšáƒ˜áƒ–áƒáƒªáƒ˜áƒ დრლáƒáƒ™áƒáƒšáƒ˜áƒ–áƒáƒªáƒ˜áƒ, Unicode-ის გáƒáƒ›áƒáƒ§áƒ”ნებრáƒáƒžáƒ”რáƒáƒªáƒ˜áƒ£áƒš სისტემებსáƒ, დრგáƒáƒ›áƒáƒ§áƒ”ნებით პრáƒáƒ’რáƒáƒ›áƒ”ბში, შრიფტებში, ტექსტების დáƒáƒ›áƒ£áƒ¨áƒáƒ•ებáƒáƒ¡áƒ დრმრáƒáƒ•áƒáƒšáƒ”ნáƒáƒ•áƒáƒœ კáƒáƒ›áƒžáƒ˜áƒ£áƒ¢áƒ”რულ სისტემებში. Russian: From a Unicode conference invitation: ЗарегиÑтрируйтеÑÑŒ ÑÐµÐ¹Ñ‡Ð°Ñ Ð½Ð° ДеÑÑтую Международную Конференцию по Unicode, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ ÑоÑтоитÑÑ 10-12 марта 1997 года в Майнце в Германии. ÐšÐ¾Ð½Ñ„ÐµÑ€ÐµÐ½Ñ†Ð¸Ñ Ñоберет широкий круг ÑкÑпертов по вопроÑам глобального Интернета и Unicode, локализации и интернационализации, воплощению и применению Unicode в различных операционных ÑиÑтемах и программных приложениÑÑ…, шрифтах, верÑтке и многоÑзычных компьютерных ÑиÑтемах. Thai (UCS Level 2): Excerpt from a poetry on The Romance of The Three Kingdoms (a Chinese classic 'San Gua'): [----------------------------|------------------------] ๠à¹à¸œà¹ˆà¸™à¸”ินฮั่นเสื่อมโทรมà¹à¸ªà¸™à¸ªà¸±à¸‡à¹€à¸§à¸Š พระปà¸à¹€à¸à¸¨à¸à¸­à¸‡à¸šà¸¹à¹Šà¸à¸¹à¹‰à¸‚ึ้นใหม่ สิบสองà¸à¸©à¸±à¸•ริย์à¸à¹ˆà¸­à¸™à¸«à¸™à¹‰à¸²à¹à¸¥à¸–ัดไป สององค์ไซร้โง่เขลาเบาปัà¸à¸à¸² ทรงนับถือขันทีเป็นที่พึ่ง บ้านเมืองจึงวิปริตเป็นนัà¸à¸«à¸™à¸² โฮจิ๋นเรียà¸à¸—ัพทั่วหัวเมืองมา หมายจะฆ่ามดชั่วตัวสำคัภเหมือนขับไสไล่เสือจาà¸à¹€à¸„หา รับหมาป่าเข้ามาเลยอาสัภà¸à¹ˆà¸²à¸¢à¸­à¹‰à¸­à¸‡à¸­à¸¸à¹‰à¸™à¸¢à¸¸à¹à¸¢à¸à¹ƒà¸«à¹‰à¹à¸•à¸à¸à¸±à¸™ ใช้สาวนั้นเป็นชนวนชื่นชวนใจ พลันลิฉุยà¸à¸¸à¸¢à¸à¸µà¸à¸¥à¸±à¸šà¸à¹ˆà¸­à¹€à¸«à¸•ุ ช่างอาเพศจริงหนาฟ้าร้องไห้ ต้องรบราฆ่าฟันจนบรรลัย ฤๅหาใครค้ำชูà¸à¸¹à¹‰à¸šà¸£à¸£à¸¥à¸±à¸‡à¸à¹Œ ฯ (The above is a two-column text. If combining characters are handled correctly, the lines of the second column should be aligned with the | character above.) Ethiopian: Proverbs in the Amharic language: ሰማይ አይታረስ ንጉሥ አይከሰስᢠብላ ካለአእንደአባቴ በቆመጠáŠá¢ ጌጥ ያለቤቱ á‰áˆáŒ¥áŠ“ áŠá‹á¢ ደሀ በሕáˆáˆ™ ቅቤ ባይጠጣ ንጣት በገደለá‹á¢ የአá ወለáˆá‰³ በቅቤ አይታሽáˆá¢ አይጥ በበላ ዳዋ ተመታᢠሲተረጉሙ ይደረáŒáˆ™á¢ ቀስ በቀስᥠዕንá‰áˆ‹áˆ በእáŒáˆ© ይሄዳáˆá¢ ድር ቢያብር አንበሳ ያስርᢠሰዠእንደቤቱ እንጅ እንደ ጉረቤቱ አይተዳደርáˆá¢ እáŒá‹œáˆ­ የከáˆá‰°á‹áŠ• ጉሮሮ ሳይዘጋዠአይድርáˆá¢ የጎረቤት ሌባᥠቢያዩት ይስቅ ባያዩት ያጠáˆá‰…ᢠሥራ ከመáታት áˆáŒ„ን ላá‹á‰³á‰µá¢ ዓባይ ማደሪያ የለá‹á¥ áŒáŠ•á‹µ ይዞ ይዞራáˆá¢ የእስላሠአገሩ መካ የአሞራ አገሩ ዋርካᢠተንጋሎ ቢተበተመáˆáˆ¶ ባá‰á¢ ወዳጅህ ማር ቢሆን ጨርስህ አትላሰá‹á¢ እáŒáˆ­áˆ…ን በáራሽህ áˆáŠ­ ዘርጋᢠRunes: ᚻᛖ ᚳᚹᚫᚦ ᚦᚫᛠᚻᛖ ᛒᚢᛞᛖ ᚩᚾ ᚦᚫᛗ ᛚᚪᚾᛞᛖ ᚾᚩᚱᚦᚹᛖᚪᚱᛞᚢᛗ áš¹á›áš¦ ᚦᚪ ᚹᛖᛥᚫ (Old English, which transcribed into Latin reads 'He cwaeth that he bude thaem lande northweardum with tha Westsae.' and means 'He said that he lived in the northern land near the Western Sea.') Braille: ⡌â â §â ‘ â ¼â â ’ â¡â œâ ‡â ‘⠹⠰⠎ ⡣⠕⠌ â¡â œâ ‡â ‘â ¹ â ºâ â Ž ⠙⠑â â ™â ’ â žâ • ⠃⠑⠛⠔ ⠺⠊⠹⠲ ⡹⠻⠑ â Šâ Ž â â • ⠙⠳⠃⠞ â ±â â žâ ‘â §â » â â ƒâ ³â ž â ¹â â žâ ² ⡹⠑ ⠗⠑⠛⠊⠌⠻ â •â ‹ ⠙⠊⠎ ⠃⠥⠗⠊â â ‡ â ºâ â Ž â Žâ Šâ ›â â « ⠃⠹ ⠹⠑ ⠊⠇⠻⠛⠹â â â â ‚ ⠹⠑ ⠊⠇⠻⠅⠂ ⠹⠑ â ¥â â ™â »â žâ â …⠻⠂ â â â ™ ⠹⠑ â ¡â Šâ ‘â ‹ â â ³â —â â »â ² ⡎⠊⠗⠕⠕⠛⠑ â Žâ Šâ ›â â « â Šâ žâ ² â¡â â ™ ⡎⠊⠗⠕⠕⠛⠑⠰⠎ â â â â ‘ â ºâ â Ž ⠛⠕⠕⠙ â ¥â â •â  â °â¡¡â â â ›â ‘â ‚ â ‹â •â — â â â ¹â ¹â ”â › ⠙⠑ â ¡â •â Žâ ‘ â žâ • â â ¥â ž ⠙⠊⠎ â ™â â â ™ â žâ •â ² ⡕⠇⠙ â¡â œâ ‡â ‘â ¹ â ºâ â Ž â â Ž ⠙⠑â â ™ â â Ž â  â ™â •â •â —â ¤â â â Šâ ‡â ² â¡â ”⠙⠖ ⡊ ⠙⠕â â °â ž â â ‘â â  â žâ • â Žâ â ¹ â ¹â â ž ⡊ â …â â ªâ ‚ â •â ‹ â â ¹ â ªâ  â …â â ªâ ‡â «â ›â ‘â ‚ â ±â â ž ⠹⠻⠑ â Šâ Ž â â œâ žâ Šâ Šâ ¥â ‡â œâ ‡â ¹ ⠙⠑â â ™ â â ƒâ ³â ž â  â ™â •â •â —â ¤â â â Šâ ‡â ² ⡊ â â Šâ £â ž â ™â â §â ‘ ⠃⠑⠲ ⠔⠊⠇⠔⠫⠂ â â ¹â Žâ ‘⠇⠋⠂ â žâ • ⠗⠑⠛⠜⠙ â  â Šâ •â ‹â ‹â ”â ¤â â â Šâ ‡ â â Ž ⠹⠑ ⠙⠑â â ™â ‘â Œ â â Šâ ‘â Šâ ‘ â •â ‹ â Šâ —â •â â â •â â ›â »â ¹ â ” ⠹⠑ â žâ —â â ™â ‘â ² ⡃⠥⠞ ⠹⠑ â ºâ Šâ Žâ ™â •â  â •â ‹ ⠳⠗ â â â Šâ ‘⠌⠕⠗⠎ â Šâ Ž â ” ⠹⠑ â Žâ Šâ â Šâ ‡â ‘â † â â â ™ â â ¹ â ¥â â ™â â ‡â ‡â ªâ « â ™â â â ™â Ž â ©â â ‡â ‡ â â •â ž ⠙⠊⠌⠥⠗⠃ â Šâ žâ ‚ â •â — ⠹⠑ ⡊⠳â â žâ —⠹⠰⠎ ⠙⠕â â ‘ â ‹â •â —â ² ⡹⠳ ⠺⠊⠇⠇ ⠹⠻⠑⠋⠕⠗⠑ â â »â â Šâ ž â â ‘ â žâ • â —â ‘â â ‘â â žâ ‚ â ‘â â â ™â â žâ Šâ Šâ â ‡â ‡â ¹â ‚ â ¹â â ž â¡â œâ ‡â ‘â ¹ â ºâ â Ž â â Ž ⠙⠑â â ™ â â Ž â  â ™â •â •â —â ¤â â â Šâ ‡â ² (The first couple of paragraphs of "A Christmas Carol" by Dickens) Compact font selection example text: ABCDEFGHIJKLMNOPQRSTUVWXYZ /0123456789 abcdefghijklmnopqrstuvwxyz £©µÀÆÖÞßéöÿ –—‘“â€â€žâ€ â€¢â€¦â€°â„¢Å“ŠŸž€ ΑΒΓΔΩαβγδω ÐБВГДабвгд ∀∂∈â„∧∪≡∞ ↑↗↨↻⇣ â”┼╔╘░►☺♀ ï¬ï¿½â‘€â‚‚ἠḂӥẄÉËâŽ×ԱრGreetings in various languages: Hello world, ΚαλημέÏα κόσμε, コンニãƒãƒ Box drawing alignment tests: â–ˆ â–‰ â•”â•â•╦â•â•â•— ┌──┬──┠╭──┬──╮ ╭──┬──╮ â”â”â”┳â”â”┓ ┎┒â”┑ â•· â•» â”┯┓ ┌┰┠▊ ╱╲╱╲╳╳╳ ║┌─╨─â”â•‘ │╔â•â•§â•╗│ │╒â•╪â•╕│ │╓─â•─╖│ ┃┌─╂─â”┃ ┗╃╄┙ ╶┼╴╺╋╸┠┼┨ â”╋┥ â–‹ ╲╱╲╱╳╳╳ ║│╲ ╱│║ │║ ║│ ││ │ ││ │║ ┃ ║│ ┃│ â•¿ │┃ â”╅╆┓ ╵ ╹ â”—â”·â”› └┸┘ â–Œ ╱╲╱╲╳╳╳ â• â•¡ ╳ ╞╣ ├╢ ╟┤ ├┼─┼─┼┤ ├╫─╂─╫┤ ┣┿╾┼╼┿┫ ┕┛┖┚ ┌┄┄┠╎ â”┅┅┓ ┋ ■╲╱╲╱╳╳╳ ║│╱ ╲│║ │║ ║│ ││ │ ││ │║ ┃ ║│ ┃│ ╽ │┃ ░░▒▒▓▓██ ┊ ┆ ╎ ╠┇ ┋ â–Ž ║└─╥─┘║ │╚â•╤â•â•│ │╘â•╪â•╛│ │╙─╀─╜│ ┃└─╂─┘┃ ░░▒▒▓▓██ ┊ ┆ ╎ ╠┇ ┋ ■╚â•â•â•©â•â•╠└──┴──┘ ╰──┴──╯ ╰──┴──╯ â”—â”â”â”»â”â”â”› └╌╌┘ ╎ â”—â•â•â”› ┋ â–▂▃▄▅▆▇█ tla-1.3.5+dfsg/src/hackerlab/tests/uni-tests/unit-coding.c0000644000175000017500000001227710457621774022147 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:41:21 2001 (unit-coding.c) */ /* unit-coding.c - * **************************************************************** * Copyright (C) 2000, 2004 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/uni/coding.h" #include "hackerlab/tests/uni-tests/cvt_opt.h" #if 0 typedef int (* conv_fun_t) (t_uchar *, size_t *, size_t, t_uchar *, size_t *, size_t); static int identity (t_uchar * to, size_t * tpos, size_t allocated, t_uchar * from, size_t * fpos, size_t len) { to = memcpy ((void *) (to + (*tpos)) , (void *) (from + (*fpos)), len); *tpos += len; *fpos += len; return 0; } static const char * name (conversion_t t) { switch (t) { case cvt_8_16: return "8 -> 16"; case cvt_8_32: return "8 -> 32"; case cvt_16_8: return "16 -> 8"; case cvt_16_32: return "16 -> 32"; case cvt_32_8: return "32 -> 8"; case cvt_32_16: return "32 -> 16"; default: panic ("Unsupported conversion"); return 0; } } static conv_fun_t conv_fun (conversion_t t) { switch (t) { case cvt_8_16: return uni_utf8_to_utf16; case cvt_8_32: return uni_utf8_to_utf32; case cvt_16_8: return uni_utf16_to_utf8; case cvt_16_32: return uni_utf16_to_utf32; case cvt_32_8: return uni_utf32_to_utf8; case cvt_32_16: return uni_utf32_to_utf16; default: panic ("Unsupported conversion"); return 0; } } #if MACHINE_IS_BIGENDIAN #define IF_BIGENDIAN(A, B) A #else #define IF_BIGENDIAN(A, B) A #endif static conv_fun_t non_native_conv_fun (conversion_t t) { switch (t) { case cvt_8_16: return IF_BIGENDIAN (uni_utf8_to_utf16le, uni_utf8_to_utf16be); case cvt_8_32: return IF_BIGENDIAN (uni_utf8_to_utf32le, uni_utf8_to_utf32be); case cvt_16_8: return IF_BIGENDIAN (uni_utf16le_to_utf8, uni_utf16be_to_utf8); case cvt_16_32: return IF_BIGENDIAN (uni_utf16le_to_utf32le, uni_utf16be_to_utf32be); case cvt_32_8: return IF_BIGENDIAN (uni_utf32le_to_utf8, uni_utf32be_to_utf8); case cvt_32_16: return IF_BIGENDIAN (uni_utf32le_to_utf16le, uni_utf32be_to_utf16be); default: panic ("Unsupported conversion"); return 0; } } static conv_fun_t to_non_native_fun (conversion_t t) { switch (t) { case cvt_8_16: case cvt_8_32: return identity; case cvt_16_8: case cvt_16_32: return IF_BIGENDIAN (uni_utf16_to_utf16le, uni_utf16_to_utf16be); case cvt_32_8: case cvt_32_16: return IF_BIGENDIAN (uni_utf32_to_utf32le, uni_utf32_to_utf32be); default: panic ("Unsupported conversion"); return 0; } } static conv_fun_t to_native_fun (conversion_t t) { switch (t) { case cvt_16_8: case cvt_32_8: return identity; case cvt_8_16: case cvt_32_16: return IF_BIGENDIAN (uni_utf16le_to_utf16, uni_utf16be_to_utf16); case cvt_8_32: case cvt_16_32: return IF_BIGENDIAN (uni_utf32le_to_utf32, uni_utf32be_to_utf32); default: panic ("Unsupported conversion"); return 0; } } static void cvt_panic (const char * fmt, conversion_t t) { safe_printfmt (2, (char *)fmt, name(t)); panic_exit(); } #endif int main (int argc, char * argv[]) { #if 0 int errn; int non_native; conversion_t fromto; t_uchar * file_contents; size_t len; size_t file_pos; t_uchar * converted_text; size_t allocated; size_t converted_pos; if (vu_file_to_string (&errn, &file_contents, &len, 0)) panic ("error reading file"); allocated = len * 6; converted_text = (t_uchar *)must_malloc (allocated); converted_pos = 0; file_pos = 0; cvt_option_setup ("unit-coding", 0, 0); fromto = cvt_option (argc, argv, &non_native); if (!non_native) { if (conv_fun(fromto) (converted_text, &converted_pos, allocated, file_contents, &file_pos, len)) cvt_panic ("%s conversion failed", fromto); } else { if (to_non_native_fun(fromto) (converted_text, &converted_pos, allocated, file_contents, &file_pos, len)) cvt_panic ("%s conversion: initial translation to non-native failed", fromto); else { t_uchar * nn_converted_text; size_t nn_converted_pos; size_t nn_file_pos; nn_converted_text = (t_uchar *)must_malloc (allocated); nn_converted_pos = 0; nn_file_pos = 0; if (non_native_conv_fun(fromto) (nn_converted_text, &nn_converted_pos, allocated, converted_text, &nn_file_pos, converted_pos)) cvt_panic ("%s non-native conversion failed", fromto); converted_pos = 0; file_pos = 0; if (to_native_fun(fromto) (converted_text, &converted_pos, allocated, nn_converted_text, &file_pos, nn_converted_pos)) cvt_panic ("%s conversion: final translation to native failed", fromto); } } if (converted_pos != vu_write_retry (&errn, 1, converted_text, converted_pos)) cvt_panic ("%s conversion: write failure", fromto); #endif return 0; } tla-1.3.5+dfsg/src/hackerlab/tests/fs-tests/0000755000175000017500000000000010457621774017367 5ustar userusertla-1.3.5+dfsg/src/hackerlab/tests/fs-tests/Makefile.in0000644000175000017500000000110110457621774021425 0ustar useruser# tag: Tom Lord Tue Dec 4 14:52:13 2001 (fs-tests/Makefile.in) # libs := $(objroot)/hackerlab/libhackerlab/libhackerlab.a -lm mains := $(notdir $(wildcard $(srcdir)/unit-*.c)) test-progs := $(patsubst %.c, %, $(mains)) test-scripts := $(wildcard $(srcdir)/*.sh) include $(makefiles)/programs.mk all: test: tests-timestamp tests-timestamp: $(test-progs) $(test-scripts) set -e ; \ for s in $(test-scripts) ; do \ $(cfg__posix_shell) $$s; \ done touch tests-timestamp clean: clean-timestamp clean-timestamp: test ! -e tests-timestamp || rm tests-timestamp tla-1.3.5+dfsg/src/hackerlab/tests/fs-tests/DESC0000644000175000017500000000042010457621774020024 0ustar useruser# tag: Tom Lord Tue Dec 4 15:05:28 2001 (fs-tests/DESC) # We test the installed header files to make sure they compile. unit-file-names Has command line options for each function in "file-names.h". unit-file-names.sh contains hand written tests for each function. tla-1.3.5+dfsg/src/hackerlab/tests/fs-tests/unit-file-names.c0000644000175000017500000001173310457621774022535 0ustar useruser/* unit-file-names.c - test file-names.c * **************************************************************** * Copyright (C) 2000 Thomas Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/bugs/panic.h" #include "hackerlab/fs/file-names.h" #include "hackerlab/cmd/main.h" static t_uchar * program_name = "unit-file-names.c"; static t_uchar * usage = "[options]"; static t_uchar * version_string = "1.0"; #define OPTS(OP, OP2) \ OP (opt_help_msg, "h", "help", 0, \ "Display a help message and exit.") \ OP (opt_version, "V", "version", 0, \ "Display a release identifier string") \ OP2 (opt_version, 0, 0, 0, "and exit.") \ OP (opt_home, 0, "home", 0, \ "Display the users home directory") \ OP (opt_is_absolute, "a", "is-absolute file-name", 1, \ "Output `yes' if `file-name' is absolute, `no' otherwise.") \ OP (opt_expand, "x", "expand file-name", 1, \ "Display `file-name', expanded.") \ OP (opt_tail, "t", "tail file-name", 1, \ "Display the tail of `file-name'.") \ OP (opt_as_directory, "D", "as-directory file-name", 1, \ "Display `file-name' as a directory name.") \ OP (opt_file_name_from_directory, "F", "directory-file-name dir-name", 1, \ "Display `dir-name' as a file name.") \ OP (opt_file_name_directory, "d", "file-name-directory file-name", 1, \ "Display the directory part of `file-name'.") \ OP (opt_file_name_in_vicinity, "v", "in-vicinity dir", 1, \ "Display \"some-file\" and \"some/file\" in-vicinity of `dir'.") \ OP (opt_path, "p", "path path", 1, \ "Parse `path' and display a list of its elements.") \ OP (opt_which, "w", "which executable", 1, \ "Find `executable' on $PATH and display its location.") enum options { OPTS (OPT_ENUM, OPT_IGN) }; struct opt_desc opts[] = { OPTS (OPT_DESC, OPT_DESC) {-1, 0, 0, 0, 0} }; int main (int argc, char * argv[]) { int o; struct opt_parsed * option; option = 0; while (1) { o = opt_standard (lim_use_must_malloc, &option, opts, &argc, argv, program_name, usage, version_string, 0, opt_help_msg, opt_none, opt_version); if (o == opt_none) break; switch (o) { default: safe_printfmt (2, "unhandled option `%s'\n", option->opt_string); panic ("internal error parsing arguments"); #if 0 usage_error: opt_usage (2, argv[0], program_name, usage, 1); panic_exit (); bogus_arg: safe_printfmt (2, "ill-formed argument for `%s' (`%s')\n", option->opt_string, option->arg_string); goto usage_error; #endif case opt_home: safe_printfmt (1, "%s\n", file_name_home_directory ()); break; case opt_is_absolute: safe_printfmt (1, "%s\n", file_name_is_absolute (option->arg_string) ? "yes" : "no"); break; case opt_expand: { t_uchar * f; f = file_name_tilde_expand (lim_use_must_malloc, option->arg_string); safe_printfmt (1, "%s\n", f); lim_free (lim_use_must_malloc, f); break; } case opt_tail: { t_uchar * f; f = file_name_tail (lim_use_must_malloc, option->arg_string); safe_printfmt (1, "%s\n", f); lim_free (lim_use_must_malloc, f); break; } case opt_as_directory: { t_uchar * f; f = file_name_as_directory (lim_use_must_malloc, option->arg_string); safe_printfmt (1, "%s\n", f); lim_free (lim_use_must_malloc, f); break; } case opt_file_name_from_directory: { t_uchar * f; f = file_name_from_directory (lim_use_must_malloc, option->arg_string); safe_printfmt (1, "%s\n", f); lim_free (lim_use_must_malloc, f); break; } case opt_file_name_directory: { t_uchar * f; f = file_name_directory (lim_use_must_malloc, option->arg_string); safe_printfmt (1, "%s\n", f); lim_free (lim_use_must_malloc, f); break; } case opt_file_name_in_vicinity: { t_uchar * f; if (argc < 2) { safe_printfmt (2, "missing second argument to --in-vicinity\n"); opt_usage (2, argv[0], program_name, usage, 1); panic_exit (); } f = file_name_in_vicinity (lim_use_must_malloc, option->arg_string, argv[1]); safe_printfmt (1, "%s\n", f); lim_free (lim_use_must_malloc, f); opt_shift (&argc, argv); break; } case opt_path: { t_uchar ** f; int x; f = path_parse (lim_use_must_malloc, option->arg_string); for (x = 0; f && f[x]; ++x) safe_printfmt (1, "%s\n", f[x]); free_path (lim_use_must_malloc, f); break; } case opt_which: { t_uchar ** f; t_uchar * x; f = path_parse (lim_use_must_malloc, getenv ("PATH")); x = path_find_executable (lim_use_must_malloc, (const t_uchar **)f, option->arg_string); if (!x) safe_printfmt (1, "%s not found\n", option->arg_string); else safe_printfmt (1, "%s\n", x); free_path (lim_use_must_malloc, f); lim_free (lim_use_must_malloc, x); break; } } } return 0; } tla-1.3.5+dfsg/src/hackerlab/tests/fs-tests/unit-file-names.sh0000744000175000017500000000541110457621774022722 0ustar useruser#!/bin/sh # tag: Tom Lord Tue Dec 4 14:54:32 2001 (fs-tests/unit-file-names.sh) # set -e arg0="$0" srcdir=`dirname "$arg0"` echo ================ unit-file-names tests ================ echo home... test `./unit-file-names --home` = `echo ~/ | sed 's,^//,/,'` echo is-absolute... test `./unit-file-names --is-absolute /this/is` = yes test `./unit-file-names --is-absolute /` = yes test `./unit-file-names --is-absolute this/is/not` = no test `./unit-file-names --is-absolute ./this/is/not` = no echo expand... test `./unit-file-names --expand /no/change` = /no/change test `./unit-file-names --expand "~/some/file"` = `echo ~/some/file | sed 's,^//,/,'` test `./unit-file-names --expand "~root/some/file"` = `echo ~root/some/file | sed 's,^//,/,'` test `./unit-file-names --expand "~no_such_user/some/file"` = `echo ~no_such_user/some/file` echo tail... test `./unit-file-names --tail /usr/bin/ls` = ls test x`./unit-file-names --tail /usr/bin/` = x test `./unit-file-names --tail ls` = "ls" echo as-directory... test `./unit-file-names --as-directory /usr/bin/ls` = /usr/bin/ls/ test `./unit-file-names --as-directory /usr/bin/` = /usr/bin/ test `./unit-file-names --as-directory /usr/bin////` = /usr/bin/ test `./unit-file-names --as-directory ls` = ls/ echo directory-file-name... test `./unit-file-names --directory-file-name /usr/bin/ls` = /usr/bin/ls test `./unit-file-names --directory-file-name ls` = ls test `./unit-file-names --directory-file-name /usr/bin/` = /usr/bin test `./unit-file-names --directory-file-name /usr/bin/////` = /usr/bin test `./unit-file-names --directory-file-name /` = / echo file-name-directory... test `./unit-file-names --file-name-directory /usr/bin/ls` = /usr/bin/ test `./unit-file-names --file-name-directory /usr/bin/////ls` = /usr/bin/ test `./unit-file-names --file-name-directory /usr/bin/` = /usr/bin/ test `./unit-file-names --file-name-directory /usr/bin` = /usr/ test `./unit-file-names --file-name-directory /` = / test `./unit-file-names --file-name-directory ls` = "(null)" echo in-vicinity... test `./unit-file-names --in-vicinity /usr/bin ls` = /usr/bin/ls test `./unit-file-names --in-vicinity /usr/bin/ ls` = /usr/bin/ls test `./unit-file-names --in-vicinity /usr/bin/// ls` = /usr/bin/ls test `./unit-file-names --in-vicinity /etc /usr/bin/ls` = /usr/bin/ls test `./unit-file-names --in-vicinity "" ls` = ls echo path... rm -f ,path echo /bin > ,path echo /usr/bin >> ,path echo . >> ,path echo /usr/local/bin >> ,path ./unit-file-names --path /bin:/usr/bin::/usr/local/bin | cmp - ,path echo which... test `./unit-file-names --which ls` = `which ls` test `./unit-file-names --which cat` = `which cat` # `which test` doesn't reliably return a path when /bin/sh # is zsh. # # test `./unit-file-names --which test` = `which test` echo ...passed tla-1.3.5+dfsg/src/hackerlab/tests/fs-tests/PLUGIN/0000755000175000017500000000000010457621774020365 5ustar userusertla-1.3.5+dfsg/src/hackerlab/tests/fs-tests/PLUGIN/REQ0000644000175000017500000000002410457621774020733 0ustar userusermem-tests fs-tests tla-1.3.5+dfsg/src/hackerlab/tests/PLUGIN/0000755000175000017500000000000010457621774016615 5ustar userusertla-1.3.5+dfsg/src/hackerlab/tests/PLUGIN/REQ0000644000175000017500000000002310457621774017162 0ustar useruserlibhackerlab tests tla-1.3.5+dfsg/src/hackerlab/tests/PLUGIN/DIRS0000644000175000017500000000000010457621774017267 0ustar userusertla-1.3.5+dfsg/src/hackerlab/tests/char-tests/0000755000175000017500000000000010457621774017674 5ustar userusertla-1.3.5+dfsg/src/hackerlab/tests/char-tests/unit-str.sh0000744000175000017500000000031610457621774022016 0ustar useruser#!/bin/sh # tag: Tom Lord Tue Dec 4 14:54:27 2001 (char-tests/unit-str.sh) # set -e arg0="$0" srcdir=`dirname "$arg0"` echo ================ unit-str tests ================ ./unit-str echo ...passed tla-1.3.5+dfsg/src/hackerlab/tests/char-tests/unit-char-name.sh0000744000175000017500000000042310457621774023040 0ustar useruser#!/bin/sh # tag: Tom Lord Tue Dec 4 14:54:27 2001 (char-tests/unit-char-name.sh) # set -e arg0="$0" srcdir=`dirname "$arg0"` echo ================ unit-char-name tests ================ rm -f ,msg ./unit-char-name > ,msg cmp ,msg $srcdir/unit-char-name.h echo ...passed tla-1.3.5+dfsg/src/hackerlab/tests/char-tests/unit-char-name.c0000644000175000017500000000321110457621774022645 0ustar useruser/* unit-char-name.c - test char-name.c * **************************************************************** * Copyright (C) 2000 Thomas Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/bugs/panic.h" #include "hackerlab/char/char-name.h" #include "hackerlab/cmd/main.h" #include "hackerlab/tests/char-tests/unit-char-name.h" static t_uchar * program_name = "unit-char-name"; static t_uchar * usage = "[options]"; static t_uchar * version_string = "1.0"; #define OPTS(OP, OP2) \ OP (opt_help_msg, "h", "help", 0, \ "Display a help message and exit.") \ OP (opt_version, "V", "version", 0, \ "Display a release identifier string") \ OP2 (opt_version, 0, 0, 0, "and exit.") enum options { OPTS (OPT_ENUM, OPT_IGN) }; struct opt_desc opts[] = { OPTS (OPT_DESC, OPT_DESC) {-1, 0, 0, 0, 0} }; int main (int argc, char * argv[]) { int o; struct opt_parsed * option; option = 0; while (1) { o = opt_standard (lim_use_must_malloc, &option, opts, &argc, argv, program_name, usage, version_string, 0, opt_help_msg, opt_none, opt_version); if (o == opt_none) break; switch (o) { default: safe_printfmt (2, "unhandled option `%s'\n", option->opt_string); panic ("internal error parsing arguments"); } } { unsigned int x; safe_printfmt (1, "static t_uchar test[] = \""); for (x = 0; x < 256; ++x) { safe_printfmt (1, "%s", char_name[x]); } safe_printfmt (1, "\";\n"); for (x = 0; x < 256; ++x) { invariant (test[x] == x); } } return 0; } tla-1.3.5+dfsg/src/hackerlab/tests/char-tests/unit-char-class.c0000644000175000017500000000710210457621774023035 0ustar useruser/* unit-char-class.c - test char-class.c * **************************************************************** * Copyright (C) 2000 Thomas Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/bugs/panic.h" #include "hackerlab/char/char-class.h" #include "hackerlab/char/char-name.h" #include "hackerlab/cmd/main.h" #include "hackerlab/tests/char-tests/unit-char-class.h" static t_uchar * program_name = "unit-char-class"; static t_uchar * usage = "[options]"; static t_uchar * version_string = "1.0"; #define OPTS(OP, OP2) \ OP (opt_help_msg, "h", "help", 0, \ "Display a help message and exit.") \ OP (opt_version, "V", "version", 0, \ "Display a release identifier string") \ OP2 (opt_version, 0, 0, 0, "and exit.") enum options { OPTS (OPT_ENUM, OPT_IGN) }; struct opt_desc opts[] = { OPTS (OPT_DESC, OPT_DESC) {-1, 0, 0, 0, 0} }; int main (int argc, char * argv[]) { int o; struct opt_parsed * option; option = 0; while (1) { o = opt_standard (lim_use_must_malloc, &option, opts, &argc, argv, program_name, usage, version_string, 0, opt_help_msg, opt_none, opt_version); if (o == opt_none) break; switch (o) { default: safe_printfmt (2, "unhandled option `%s'\n", option->opt_string); panic ("internal error parsing arguments"); } } { int x; int count; #define CATEGORIES(FN) \ CATEGORY_##FN (char_is_ascii) \ CATEGORY_##FN (char_is_upper) \ CATEGORY_##FN (char_is_lower) \ CATEGORY_##FN (char_is_alpha) \ CATEGORY_##FN (char_is_digit) \ CATEGORY_##FN (char_is_alnum) \ CATEGORY_##FN (char_is_control) \ CATEGORY_##FN (char_is_printable) \ CATEGORY_##FN (char_is_space) \ CATEGORY_##FN (char_is_graph) \ CATEGORY_##FN (char_is_c_id) \ CATEGORY_##FN (char_is_xdigit) \ CATEGORY_##FN (char_is_odigit) \ CATEGORY_##FN (char_is_punct) \ CATEGORY_##FN (char_is_blank) #define CATEGORY_COGEN(FN) \ safe_printfmt (1, "static t_uchar test_%s[] = \"", (#FN)); \ for (x = 0; x < 256; ++x) \ { \ if (FN (x)) \ safe_printfmt (1, "%s", char_name[x]); \ } \ safe_printfmt (1, "\";\n"); CATEGORIES(COGEN); #define CATEGORY_TEST(FN) \ for (x = 0; x < (sizeof (test_##FN) - 1); ++x) \ { \ int y; \ y = test_##FN [x]; \ invariant (FN (y)); \ } \ count = 0; \ for (x = 0; x < 256; ++x) \ { \ if (FN (x)) \ ++count; \ } \ invariant ((sizeof (test_##FN) - 1) == count); CATEGORIES(TEST); for (x = 0; x < 256; ++x) { if (!char_is_alpha (x)) { invariant (char_to_lower (x) == x); invariant (char_to_lower (x) == char_to_upper (x)); } else if (char_is_upper (x)) { invariant (char_to_lower (x) != x); invariant (char_to_upper (x) == x); invariant (char_to_upper (char_to_lower (x)) == x); invariant ((x - 'A') == (char_to_lower (x) - 'a')); } else if (char_is_lower (x)) { invariant (char_to_lower (x) == x); invariant (char_to_upper (x) != x); invariant (char_to_lower (char_to_upper (x)) == x); invariant ((x - 'a') == (char_to_upper (x) - 'A')); } else panic ("unrecognized character"); } { char * h0 = "0123456789abcdefghijklmnopqrstuvwxyz"; char * h1 = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; for (x = 0; x < 36; ++x) { invariant (x == char_digit_value (h0[x])); invariant (x == char_digit_value (h1[x])); } for (x = 0; x < 256; ++x) { invariant (char_is_alnum (x) || (char_digit_value (x) == -1)); } } } return 0; } tla-1.3.5+dfsg/src/hackerlab/tests/char-tests/Makefile.in0000644000175000017500000000037510457621774021746 0ustar useruser# tag: Tom Lord Tue Dec 4 14:52:18 2001 (char-tests/Makefile.in) # tested-headers := char-class.h char-name.h str.h tested-prefix := hackerlab/char libs := $(objroot)/hackerlab/libhackerlab/libhackerlab.a -lm include $(makefiles)/unit-tests.mk tla-1.3.5+dfsg/src/hackerlab/tests/char-tests/DESC0000644000175000017500000000154410457621774020341 0ustar useruser# tag: Tom Lord Tue Dec 4 15:05:25 2001 (char-tests/DESC) # We test the installed header files to make sure they compile. unit-char-class Compare the character classes defined by "flux/char/char-class.h" to some hard-coded character classes in the tests. Test some invariants such as that the `to_lower' of an `is_upper' character is not the character itself. Test the value of `digit_value' for all characters. unit-char-name Test the arrach `char_name' (which contains C names for each character) by generating a C string constant which is compared to part of the source for unit-char-name (see unit-char-name.sh) unit-str Hand written invariant tests for all of the `str_' functions EXCEPT `str_save', `str_save_n', and `str_alloc_cat'. Those exceptions are tested in "mem-tests". The hand written tests hit a variety of boundary cases. tla-1.3.5+dfsg/src/hackerlab/tests/char-tests/unit-str.c0000644000175000017500000005737410457621774021645 0ustar useruser/* unit-str.c - test str.c * **************************************************************** * Copyright (C) 2000, 2003 Thomas Lord * Copyright (C) 2002 Scott Parish * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/bugs/panic.h" #include "hackerlab/char/str.h" #include "hackerlab/cmd/main.h" static t_uchar * program_name = "unit-str"; static t_uchar * usage = "[options]"; static t_uchar * version_string = "1.0"; #define OPTS(OP, OP2) \ OP (opt_help_msg, "h", "help", 0, \ "Display a help message and exit.") \ OP (opt_version, "V", "version", 0, \ "Display a release identifier string") \ OP2 (opt_version, 0, 0, 0, "and exit.") enum options { OPTS (OPT_ENUM, OPT_IGN) }; struct opt_desc opts[] = { OPTS (OPT_DESC, OPT_DESC) {-1, 0, 0, 0, 0} }; int main (int argc, char * argv[]) { int o; struct opt_parsed * option; option = 0; while (1) { o = opt_standard (lim_use_must_malloc, &option, opts, &argc, argv, program_name, usage, version_string, 0, opt_help_msg, opt_none, opt_version); if (o == opt_none) break; switch (o) { default: safe_printfmt (2, "unhandled option `%s'\n", option->opt_string); panic ("internal error parsing arguments"); } } { static t_uchar alnum[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; static t_uchar lcalnum[] = "0123456789abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz"; t_uchar buffer[1024]; int x; invariant (str_length (0) == 0); invariant (str_length ("") == 0); invariant (str_length ("a") == 1); invariant (str_length ("abc") == 3); invariant (str_length ("abcd") == 4); invariant (str_length ("abcde") == 5); invariant (str_length ("abcdefg") == 7); invariant (str_length ("abcdefgh") == 8); invariant (str_length ("abcdefghi") == 9); invariant (str_length ("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz") == 62); invariant (str_length_n (0, 5) == 0); invariant (str_length_n ("", 5) == 0); invariant (str_length_n ("a", 5) == 1); invariant (str_length_n ("abc", 5) == 3); invariant (str_length_n ("abcd", 5) == 4); invariant (str_length_n ("abcde", 5) == 5); invariant (str_length_n ("abcdefg", 5) == 5); invariant (str_length_n ("abcdefgh", 5) == 5); invariant (str_length_n ("abcdefghi", 5) == 5); invariant (str_length_n ("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz", 5) == 5); for (x = 'a'; x <= 'z'; ++x) { invariant (str_chr_index (lcalnum, x) == (lcalnum + 10 + (x - 'a'))); invariant (str_chr_rindex (lcalnum, x) == (lcalnum + 36 + (x - 'a'))); invariant (str_chr_index_n (lcalnum, 62, x) == (lcalnum + 10 + (x - 'a'))); invariant (str_chr_rindex_n (lcalnum, 62, x) == (lcalnum + 36 + (x - 'a'))); } { t_uchar * buffer2; invariant (!str_cmp (0, "")); invariant (!str_cmp ("", 0)); invariant (str_cmp ("", "a") == -1); invariant (str_cmp (0, "a") == -1); invariant (str_cmp ("a", "") == 1); invariant (str_cmp ("a", 0) == 1); invariant (!str_cmp ("a", "a")); invariant (str_cmp ("abcdefg", "abcdefh") == -1); invariant (str_cmp ("abcdefh", "abcdefg") == 1); invariant (str_cmp ("abcdefg", "abcdefg") == 0); invariant (!str_cmp (alnum, alnum)); invariant (!str_cmp (lcalnum, lcalnum)); invariant (str_cmp (alnum, lcalnum) == -1); invariant (str_cmp (lcalnum, alnum) == 1); invariant (str_cmp_n ("", sizeof ("") - 1, "a", sizeof ("a") - 1) == -1); invariant (str_cmp_n (0, 0, "a", sizeof ("a") - 1) == -1); invariant (str_cmp_n ("a", sizeof ("a") - 1, "", sizeof ("") - 1) == 1); invariant (str_cmp_n ("a", sizeof ("a") - 1, 0, 0) == 1); invariant (!str_cmp_n ("a", sizeof ("a") - 1, "a", sizeof ("a") - 1)); invariant (str_cmp_n ("abcdefg", sizeof ("abcdefg") - 1, "abcdefh", sizeof ("abcdefh") - 1) == -1); invariant (str_cmp_n ("abcdefh", sizeof ("abcdefh") - 1, "abcdefg", sizeof ("abcdefg") - 1) == 1); invariant (str_cmp_n ("abcdefg", sizeof ("abcdefg") - 1, "abcdefg", sizeof ("abcdefg") - 1) == 0); invariant (!str_cmp_n (alnum, sizeof (alnum) - 1, alnum, sizeof (alnum) - 1)); invariant (!str_cmp_n (lcalnum, sizeof (lcalnum) - 1, lcalnum, sizeof (lcalnum) - 1)); invariant (str_cmp_n (alnum, sizeof (alnum) - 1, lcalnum, sizeof (lcalnum) - 1) == -1); invariant (str_cmp_n (lcalnum, sizeof (lcalnum) - 1, alnum, sizeof (alnum) - 1) == 1); invariant (str_casecmp ("", "a") == -1); invariant (str_casecmp (0, "a") == -1); invariant (str_casecmp ("a", "") == 1); invariant (str_casecmp ("a", 0) == 1); invariant (!str_casecmp ("a", "a")); invariant (str_casecmp ("abcdefg", "abcdefh") == -1); invariant (str_casecmp ("abcdefh", "abcdefg") == 1); invariant (str_casecmp ("abcdefg", "abcdefg") == 0); invariant (!str_casecmp (alnum, alnum)); invariant (!str_casecmp (lcalnum, lcalnum)); invariant (!str_casecmp (alnum, lcalnum)); invariant (!str_casecmp (lcalnum, alnum)); invariant (str_casecmp_n ("", sizeof ("") - 1, "a", sizeof ("a") - 1) == -1); invariant (str_casecmp_n (0, 0, "a", sizeof ("a") - 1) == -1); invariant (str_casecmp_n ("a", sizeof ("a") - 1, "", sizeof ("") - 1) == 1); invariant (str_casecmp_n ("a", sizeof ("a") - 1, 0, 0) == 1); invariant (!str_casecmp_n ("a", sizeof ("a") - 1, "a", sizeof ("a") - 1)); invariant (str_casecmp_n ("abcdefg", sizeof ("abcdefg") - 1, "abcdefh", sizeof ("abcdefh") - 1) == -1); invariant (str_casecmp_n ("abcdefh", sizeof ("abcdefh") - 1, "abcdefg", sizeof ("abcdefg") - 1) == 1); invariant (str_casecmp_n ("abcdefg", sizeof ("abcdefg") - 1, "abcdefg", sizeof ("abcdefg") - 1) == 0); invariant (!str_casecmp_n (alnum, sizeof (alnum) - 1, alnum, sizeof (alnum) - 1)); invariant (!str_casecmp_n (lcalnum, sizeof (lcalnum) - 1, lcalnum, sizeof (lcalnum) - 1)); invariant (!str_casecmp_n (alnum, sizeof (alnum) - 1, lcalnum, sizeof (lcalnum) - 1)); invariant (!str_casecmp_n (lcalnum, sizeof (lcalnum) - 1, alnum, sizeof (alnum) - 1)); invariant (!str_cmp_prefix ("01234", alnum)); invariant (str_cmp_prefix ("abc", "ABCDEFGHIJKL") == 1); invariant (str_cmp_prefix ("ABC", "ABCDEFGHIJKL") == 0); invariant (str_cmp_prefix ("ABB", "ABCDEFGHIJKL") == -1); invariant (str_cmp_prefix ("", "ABCDEFGHIJKL") == 0); invariant (str_cmp_prefix (0, "ABCDEFGHIJKL") == 0); invariant (str_cmp_prefix ("abc", "a") == 1); invariant (str_cmp_prefix ("abc", "") == 1); invariant (str_cmp_prefix ("abc", 0) == 1); invariant (str_cmp_prefix_n ("01234", (size_t)5, alnum, str_length (alnum)) == 0); invariant (str_cmp_prefix_n ("abcxyzzy", (size_t)3, "ABCDEFGHIJKL", (size_t)12) == 1); invariant (str_cmp_prefix_n ("ABC", (size_t)3, "ABCDEFGHIJKL", (size_t)12) == 0); invariant (str_cmp_prefix_n ("ABBfoo", (size_t)3, "ABCDEFGHIJKL", (size_t)12) == -1); invariant (str_cmp_prefix_n ("", (size_t)0, "ABCDEFGHIJKL", (size_t)12) == 0); invariant (str_cmp_prefix_n (0, (size_t)0, "ABCDEFGHIJKL", (size_t)12) == 0); invariant (str_cmp_prefix_n ("abc", (size_t)3, "abc", (size_t)1) == 1); invariant (str_cmp_prefix_n ("abcxyz", (size_t)3, "", (size_t)0) == 1); invariant (str_cmp_prefix_n ("abc", (size_t)3, 0, (size_t)0) == 1); invariant (str_casecmp_prefix ("01234", alnum) == 0); invariant (str_casecmp_prefix ("abc", "ABCDEFGHIJKL") == 0); invariant (str_casecmp_prefix ("ABC", "ABCDEFGHIJKL") == 0); invariant (str_casecmp_prefix ("ABB", "ABCDEFGHIJKL") == -1); invariant (str_casecmp_prefix ("", "ABCDEFGHIJKL") == 0); invariant (str_casecmp_prefix (0, "ABCDEFGHIJKL") == 0); invariant (str_casecmp_prefix ("abc", "a") == 1); invariant (str_casecmp_prefix ("abc", "") == 1); invariant (str_casecmp_prefix ("abc", 0) == 1); invariant (str_casecmp_prefix_n ("01234", (size_t)5, alnum, str_length (alnum)) == 0); invariant (str_casecmp_prefix_n ("abcxyzzy", (size_t)3, "ABCDEFGHIJKL", (size_t)12) == 0); invariant (str_casecmp_prefix_n ("ABC", (size_t)3, "ABCDEFGHIJKL", (size_t)12) == 0); invariant (str_casecmp_prefix_n ("ABBfoo", (size_t)3, "ABCDEFGHIJKL", (size_t)12) == -1); invariant (str_casecmp_prefix_n ("", (size_t)0, "ABCDEFGHIJKL", (size_t)12) == 0); invariant (str_casecmp_prefix_n (0, (size_t)0, "ABCDEFGHIJKL", (size_t)12) == 0); invariant (str_casecmp_prefix_n ("abc", (size_t)3, "abc", (size_t)1) == 1); invariant (str_casecmp_prefix_n ("abcxyz", (size_t)3, "", (size_t)0) == 1); invariant (str_casecmp_prefix_n ("abc", (size_t)3, 0, (size_t)0) == 1); buffer[0] = 1; str_cpy (buffer, 0); invariant (str_length (buffer) == 0); str_cpy (buffer, "abc"); invariant (str_cmp (buffer, "abc") == 0); str_cpy (buffer, "abcd"); invariant (str_cmp (buffer, "abcd") == 0); str_cpy (buffer, "abcde"); invariant (str_cmp (buffer, "abcde") == 0); str_cpy (buffer, "abcdefg"); invariant (str_cmp (buffer, "abcdefg") == 0); str_cpy (buffer, "abcdefgh"); invariant (str_cmp (buffer, "abcdefgh") == 0); str_cpy (buffer, "abcdefghi"); invariant (str_cmp (buffer, "abcdefghi") == 0); str_cpy (buffer, alnum); invariant (str_cmp (buffer, alnum) == 0); buffer[0] = 1; str_cpy_n (buffer, 0, 1); invariant (str_length (buffer) == 0); str_cpy_n (buffer, "abc", sizeof ("abc") - 1); invariant (str_cmp (buffer, "abc") == 0); str_cpy_n (buffer, "abc", 100 + sizeof ("abc") - 1); invariant (str_cmp (buffer, "abc") == 0); str_cpy_n (buffer, "abcd", sizeof ("abcd") - 1); invariant (str_cmp (buffer, "abcd") == 0); str_cpy_n (buffer, "abcde", sizeof ("abcde") - 1); invariant (str_cmp (buffer, "abcde") == 0); str_cpy_n (buffer, "abcdefg", sizeof ("abcdefg") - 1); invariant (str_cmp (buffer, "abcdefg") == 0); str_cpy_n (buffer, "abcdefgh", sizeof ("abcdefgh") - 1); invariant (str_cmp (buffer, "abcdefgh") == 0); str_cpy_n (buffer, "abcdefghi", sizeof ("abcdefghi") - 1); invariant (str_cmp (buffer, "abcdefghi") == 0); str_cpy_n (buffer, alnum, sizeof (alnum) - 1); invariant (str_cmp (buffer, alnum) == 0); buffer[0] = 0; str_cat (buffer, 0); invariant (str_cmp (buffer, "") == 0); str_cat (buffer, "one"); invariant (str_cmp (buffer, "one") == 0); str_cat (buffer, " "); invariant (str_cmp (buffer, "one ") == 0); str_cat (buffer, "two three four"); invariant (str_cmp (buffer, "one two three four") == 0); str_cat (buffer, ""); invariant (str_cmp (buffer, "one two three four") == 0); str_cat (buffer, 0); invariant (str_cmp (buffer, "one two three four") == 0); str_cat (buffer, " five."); invariant (str_cmp (buffer, "one two three four five.") == 0); buffer[0] = 0; str_cat_n (buffer, 0, 0); invariant (str_cmp (buffer, "") == 0); str_cat_n (buffer, "one", sizeof ("one")); invariant (str_cmp (buffer, "one") == 0); str_cat_n (buffer, " ", sizeof (" ")); invariant (str_cmp (buffer, "one ") == 0); str_cat_n (buffer, "two three four", sizeof ("two three four")); invariant (str_cmp (buffer, "one two three four") == 0); str_cat_n (buffer, "", sizeof ("")); invariant (str_cmp (buffer, "one two three four") == 0); str_cat_n (buffer, 0, 0); invariant (str_cmp (buffer, "one two three four") == 0); str_cat_n (buffer, " five.", sizeof (" five.")); invariant (str_cmp (buffer, "one two three four five.") == 0); str_cat_n (buffer, " xyzzy", 2); invariant (str_cmp (buffer, "one two three four five. x") == 0); /* pending copyright paperwork: * * BEGIN Scott's code */ buffer[0] = 0; str_cat_many (buffer, str_end); invariant (str_cmp (buffer, "") == 0); str_cat_many (buffer, "one", str_end); invariant (str_cmp (buffer, "one") == 0); str_cat_many (buffer, " ", str_end); invariant (str_cmp (buffer, "one ") == 0); str_cat_many (buffer, "two", " ", 0, "three", " four", str_end); invariant (str_cmp (buffer, "one two three four") == 0); str_cat_many (buffer, "", str_end); invariant (str_cmp (buffer, "one two three four") == 0); str_cat_many (buffer, str_end); invariant (str_cmp (buffer, "one two three four") == 0); str_cat_many (buffer, 0, str_end); invariant (str_cmp (buffer, "one two three four") == 0); str_cat_many (buffer, " ", 0, "five.", str_end); invariant (str_cmp (buffer, "one two three four five.") == 0); buffer2 = str_alloc_cat_many (0, buffer, str_end); invariant (str_cmp (buffer2, "one two three four five.") == 0); buffer2 = str_alloc_cat_many (0, buffer, " six", str_end); invariant (str_cmp (buffer2, "one two three four five. six") == 0); lim_free(0, buffer2); buffer2 = str_alloc_cat_many (0, buffer, " six", str_end); invariant (str_cmp (buffer2, "one two three four five. six") == 0); /* * pending copyright paperwork: * * END Scott's code */ } { invariant (!str_cmp (0, str_save (lim_use_must_malloc, (t_uchar *)""))); invariant (!str_cmp ("", str_save (lim_use_must_malloc, 0))); invariant (str_cmp ("", str_save (lim_use_must_malloc, (t_uchar *)"a")) == -1); invariant (str_cmp (0, str_save (lim_use_must_malloc, (t_uchar *)"a")) == -1); invariant (str_cmp ("a", str_save (lim_use_must_malloc, (t_uchar *)"")) == 1); invariant (str_cmp ("a", str_save (lim_use_must_malloc, 0)) == 1); invariant (!str_cmp ("a", str_save (lim_use_must_malloc, (t_uchar *)"a"))); invariant (str_cmp ("abcdefg", str_save (lim_use_must_malloc, (t_uchar *)"abcdefh")) == -1); invariant (str_cmp ("abcdefh", str_save (lim_use_must_malloc, (t_uchar *)"abcdefg")) == 1); invariant (str_cmp ("abcdefg", str_save (lim_use_must_malloc, (t_uchar *)"abcdefg")) == 0); invariant (!str_cmp (alnum, str_save (lim_use_must_malloc, (t_uchar *)alnum))); invariant (!str_cmp (lcalnum, str_save (lim_use_must_malloc, (t_uchar *)lcalnum))); invariant (str_cmp (alnum, str_save (lim_use_must_malloc, (t_uchar *)lcalnum)) == -1); invariant (str_cmp (lcalnum, str_save (lim_use_must_malloc, (t_uchar *)alnum)) == 1); invariant (str_cmp_n ("", sizeof ("") - 1, str_save_n (lim_use_must_malloc, (t_uchar *)"a", sizeof ("a") - 1), sizeof ("a") - 1) == -1); invariant (str_cmp_n (0, 0, str_save_n (lim_use_must_malloc, (t_uchar *)"a", sizeof ("a") - 1), sizeof ("a") - 1) == -1); invariant (str_cmp_n ("a", sizeof ("a") - 1, str_save_n (lim_use_must_malloc, (t_uchar *)"", sizeof ("") - 1), sizeof ("") - 1) == 1); invariant (str_cmp_n ("a", sizeof ("a") - 1, str_save_n (lim_use_must_malloc, 0, 0), 0) == 1); invariant (str_cmp_n ("a", sizeof ("a") - 1, str_save_n (lim_use_must_malloc, 0, 0), 0) == 1); invariant (!str_cmp_n ("a", sizeof ("a") - 1, "a", sizeof ("a") - 1)); invariant (str_cmp_n ("abcdefg", sizeof ("abcdefg") - 1, str_save_n (lim_use_must_malloc, (t_uchar *)"abcdefh", sizeof ("abcdefh") - 1), sizeof ("abcdefh") - 1) == -1); invariant (str_cmp_n ("abcdefh", sizeof ("abcdefh") - 1, str_save_n (lim_use_must_malloc, (t_uchar *)"abcdefg", sizeof ("abcdefg") - 1), sizeof ("abcdefg") - 1) == 1); invariant (str_cmp_n ("abcdefg", sizeof ("abcdefg") - 1, str_save_n (lim_use_must_malloc, (t_uchar *)"abcdefg", sizeof ("abcdefg") - 1), sizeof ("abcdefg") - 1) == 0); invariant (!str_cmp_n (alnum, sizeof (alnum) - 1, str_save_n (lim_use_must_malloc, (t_uchar *)alnum, sizeof (alnum) - 1), sizeof (alnum) - 1)); invariant (!str_cmp_n (lcalnum, sizeof (lcalnum) - 1, str_save_n (lim_use_must_malloc, (t_uchar *)lcalnum, sizeof (lcalnum) - 1), sizeof (lcalnum) - 1)); invariant (str_cmp_n (alnum, sizeof (alnum) - 1, str_save_n (lim_use_must_malloc, (t_uchar *)lcalnum, sizeof (lcalnum) - 1), sizeof (lcalnum) - 1) == -1); invariant (str_cmp_n (lcalnum, sizeof (lcalnum) - 1, str_save_n (lim_use_must_malloc, (t_uchar *)alnum, sizeof (alnum) - 1), sizeof (alnum) - 1) == 1); invariant (!str_cmp (0, str_save_trimming (lim_use_must_malloc, (t_uchar *)" \n\t\t"))); invariant (!str_cmp ("", str_save_trimming (lim_use_must_malloc, 0))); invariant (str_cmp ("", str_save_trimming (lim_use_must_malloc, (t_uchar *)"\t\n\n\n\t a\n \n")) == -1); invariant (str_cmp (0, str_save_trimming (lim_use_must_malloc, (t_uchar *)"a ")) == -1); invariant (str_cmp ("a", str_save_trimming (lim_use_must_malloc, (t_uchar *)"\t ")) == 1); invariant (str_cmp ("a", str_save_trimming (lim_use_must_malloc, 0)) == 1); invariant (!str_cmp ("a", str_save_trimming (lim_use_must_malloc, (t_uchar *)"a"))); invariant (str_cmp ("abcdefg", str_save_trimming (lim_use_must_malloc, (t_uchar *)"abcdefh")) == -1); invariant (str_cmp ("abcdefh", str_save_trimming (lim_use_must_malloc, (t_uchar *)" abcdefg")) == 1); invariant (str_cmp ("abcdefg", str_save_trimming (lim_use_must_malloc, (t_uchar *)"\nabcdefg\n")) == 0); invariant (!str_cmp (alnum, str_save_trimming (lim_use_must_malloc, (t_uchar *)alnum))); invariant (!str_cmp (lcalnum, str_save_trimming (lim_use_must_malloc, (t_uchar *)lcalnum))); invariant (str_cmp (alnum, str_save_trimming (lim_use_must_malloc, (t_uchar *)lcalnum)) == -1); invariant (str_cmp (lcalnum, str_save_trimming (lim_use_must_malloc, (t_uchar *)alnum)) == 1); invariant (str_cmp_n ("", sizeof ("") - 1, str_save_trimming_n (lim_use_must_malloc, (t_uchar *)"\t\na ", sizeof ("\t\na ") - 1), sizeof ("a") - 1) == -1); invariant (str_cmp_n (0, 0, str_save_trimming_n (lim_use_must_malloc, (t_uchar *)"a ", sizeof ("a ") - 1), sizeof ("a") - 1) == -1); invariant (str_cmp_n ("a", sizeof ("a") - 1, str_save_trimming_n (lim_use_must_malloc, (t_uchar *)"", sizeof ("") - 1), sizeof ("") - 1) == 1); invariant (str_cmp_n ("a", sizeof ("a") - 1, str_save_trimming_n (lim_use_must_malloc, 0, 0), 0) == 1); invariant (str_cmp_n ("a", sizeof ("a") - 1, str_save_trimming_n (lim_use_must_malloc, 0, 0), 0) == 1); invariant (str_cmp_n ("abcdefg", sizeof ("abcdefg") - 1, str_save_trimming_n (lim_use_must_malloc, (t_uchar *)"abcdefh", sizeof ("abcdefh") - 1), sizeof ("abcdefh") - 1) == -1); invariant (str_cmp_n ("abcdefh", sizeof ("abcdefh") - 1, str_save_trimming_n (lim_use_must_malloc, (t_uchar *)"\tabcdefg\n\t\n", sizeof ("\tabcdefg\n\t\n") - 1), sizeof ("abcdefg") - 1) == 1); invariant (str_cmp_n ("abcdefg", sizeof ("abcdefg") - 1, str_save_trimming_n (lim_use_must_malloc, (t_uchar *)"\tabcdefg\n\t", sizeof ("\tabcdefg\n\t") - 1), sizeof ("abcdefg") - 1) == 0); invariant (!str_cmp_n (alnum, sizeof (alnum) - 1, str_save_trimming_n (lim_use_must_malloc, (t_uchar *)alnum, sizeof (alnum) - 1), sizeof (alnum) - 1)); invariant (!str_cmp_n (lcalnum, sizeof (lcalnum) - 1, str_save_trimming_n (lim_use_must_malloc, (t_uchar *)lcalnum, sizeof (lcalnum) - 1), sizeof (lcalnum) - 1)); invariant (str_cmp_n (alnum, sizeof (alnum) - 1, str_save_trimming_n (lim_use_must_malloc, (t_uchar *)lcalnum, sizeof (lcalnum) - 1), sizeof (lcalnum) - 1) == -1); invariant (str_cmp_n (lcalnum, sizeof (lcalnum) - 1, str_save_trimming_n (lim_use_must_malloc, (t_uchar *)alnum, sizeof (alnum) - 1), sizeof (alnum) - 1) == 1); } { t_uchar * b; buffer[0] = 0; b = str_alloc_cat (lim_use_must_malloc, buffer, 0); invariant (str_cmp (b, "") == 0); b = str_alloc_cat (lim_use_must_malloc, b, "one"); invariant (str_cmp (b, "one") == 0); b = str_alloc_cat (lim_use_must_malloc, b, " "); invariant (str_cmp (b, "one ") == 0); b = str_alloc_cat (lim_use_must_malloc, b, "two three four"); invariant (str_cmp (b, "one two three four") == 0); b = str_alloc_cat (lim_use_must_malloc, b, ""); invariant (str_cmp (b, "one two three four") == 0); b = str_alloc_cat (lim_use_must_malloc, b, 0); invariant (str_cmp (b, "one two three four") == 0); b = str_alloc_cat (lim_use_must_malloc, b, " five."); invariant (str_cmp (b, "one two three four five.") == 0); buffer[0] = 0; b = str_alloc_cat_n (lim_use_must_malloc, buffer, 0, 0); invariant (str_cmp (b, "") == 0); b = str_alloc_cat_n (lim_use_must_malloc, b, "one", sizeof ("one")); invariant (str_cmp (b, "one") == 0); b = str_alloc_cat_n (lim_use_must_malloc, b, " ", sizeof (" ")); invariant (str_cmp (b, "one ") == 0); b = str_alloc_cat_n (lim_use_must_malloc, b, "two three four", sizeof ("two three four")); invariant (str_cmp (b, "one two three four") == 0); b = str_alloc_cat_n (lim_use_must_malloc, b, "", sizeof ("")); invariant (str_cmp (b, "one two three four") == 0); b = str_alloc_cat_n (lim_use_must_malloc, b, 0, 0); invariant (str_cmp (b, "one two three four") == 0); b = str_alloc_cat_n (lim_use_must_malloc, b, " five.", sizeof (" five.")); invariant (str_cmp (b, "one two three four five.") == 0); b = str_alloc_cat_n (lim_use_must_malloc, b, " xyzzy", 2); invariant (str_cmp (b, "one two three four five. x") == 0); /* pending copyright paperwork: * * BEGIN Scott's code */ buffer[0] = 0; b = str_alloc_cat_many (lim_use_must_malloc, buffer, str_end); invariant (str_cmp (b, "") == 0); b = str_alloc_cat_many (lim_use_must_malloc, buffer, 0, str_end); invariant (str_cmp (b, "") == 0); b = str_alloc_cat_many (lim_use_must_malloc, b, "one", str_end); invariant (str_cmp (b, "one") == 0); b = str_alloc_cat_many (lim_use_must_malloc, b, " ", str_end); invariant (str_cmp (b, "one ") == 0); b = str_alloc_cat_many (lim_use_must_malloc, b, "two", " ", "three", 0, " four", str_end); invariant (str_cmp (b, "one two three four") == 0); b = str_alloc_cat_many (lim_use_must_malloc, b, "", str_end); invariant (str_cmp (b, "one two three four") == 0); b = str_alloc_cat_many (lim_use_must_malloc, b, str_end); invariant (str_cmp (b, "one two three four") == 0); b = str_alloc_cat_many (lim_use_must_malloc, b, " ", 0, "five.", str_end); invariant (str_cmp (b, "one two three four five.") == 0); buffer[0] = 0; b = str_save (lim_use_must_malloc, ""); invariant (str_cmp (b, "") == 0); b = str_realloc_cat_many (lim_use_must_malloc, b, str_end); invariant (str_cmp (b, "") == 0); b = str_realloc_cat_many (lim_use_must_malloc, b, "", str_end); invariant (str_cmp (b, "") == 0); b = str_realloc_cat_many (lim_use_must_malloc, b, 0, str_end); invariant (str_cmp (b, "") == 0); b = str_realloc_cat_many (lim_use_must_malloc, b, "one", str_end); invariant (str_cmp (b, "one") == 0); b = str_realloc_cat_many (lim_use_must_malloc, b, " ", str_end); invariant (str_cmp (b, "one ") == 0); b = str_realloc_cat_many (lim_use_must_malloc, b, "two", " ", "three", 0, " four", str_end); invariant (str_cmp (b, "one two three four") == 0); b = str_realloc_cat_many (lim_use_must_malloc, b, "", str_end); invariant (str_cmp (b, "one two three four") == 0); b = str_realloc_cat_many (lim_use_must_malloc, b, str_end); invariant (str_cmp (b, "one two three four") == 0); b = str_realloc_cat_many (lim_use_must_malloc, b, " ", 0, "five.", str_end); invariant (str_cmp (b, "one two three four five.") == 0); /* * pending copyright paperwork: * * END Scott's code */ } } return 0; } tla-1.3.5+dfsg/src/hackerlab/tests/char-tests/unit-pika-escaping.c0000644000175000017500000001203410457621774023530 0ustar useruser/* unit-pika-escaping.c - test pika-escaping.c * **************************************************************** * Copyright (C) 2004, Christian Thaeter * Copyright (C) 2000, 2003 Thomas Lord * Copyright (C) 2002 Scott Parish * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/bugs/panic.h" #include "hackerlab/char/str.h" #include "hackerlab/fmt/cvt.h" #include "hackerlab/char/pika-escaping.h" #include "hackerlab/char/pika-escaping-utils.h" #include "hackerlab/vu/safe-printfmt.h" #include "hackerlab/cmd/main.h" static t_uchar * program_name = "unit-escapeing"; static t_uchar * usage = "[options]"; static t_uchar * version_string = "1.0"; #define OPTS(OP, OP2) \ OP (opt_help_msg, "h", "help", 0, \ "Display a help message and exit.") \ OP (opt_version, "V", "version", 0, \ "Display a release identifier string") \ OP2 (opt_version, 0, 0, 0, "and exit.") enum options { OPTS (OPT_ENUM, OPT_IGN) }; struct opt_desc opts[] = { OPTS (OPT_DESC, OPT_DESC) {-1, 0, 0, 0, 0} }; int main (int argc, char * argv[]) { int o; struct opt_parsed * option; option = 0; while (1) { o = opt_standard (lim_use_must_malloc, &option, opts, &argc, argv, program_name, usage, version_string, 0, opt_help_msg, opt_none, opt_version); if (o == opt_none) break; switch (o) { default: safe_printfmt (2, "unhandled option `%s'\n", option->opt_string); panic ("internal error parsing arguments"); } } { t_uchar out[256]; size_t result_needed; size_t str_used; t_uchar * test; t_uchar * test_back; invariant (pika_escape_iso8859_1_n (0, (size_t)0, 0, "foobar", (size_t)6) == 6); invariant (pika_escape_iso8859_1_n (0, (size_t)0, 0, "foo\tbar", (size_t)7) == 7); invariant (pika_escape_iso8859_1_n (0, (size_t)0, char_class_space, "foo\tbar", (size_t)7) == 12); invariant (pika_escape_iso8859_1_n (0, (size_t)0, char_class_control, "foo\tbar", (size_t)7) == 12); invariant (pika_escape_iso8859_1_n (0, (size_t)0, 0, "foo\020bar", (size_t)7) == 7); invariant (pika_escape_iso8859_1_n (0, (size_t)0, char_class_control, "foo\020bar", (size_t)7) == 13); invariant (pika_escape_iso8859_1_n (0, (size_t)0, char_class_space, "foo\020bar", (size_t)7) == 7); invariant ((pika_escape_iso8859_1_n (out, (size_t)255, 0, "foo bar", (size_t)7) == 7) && !str_cmp (out, "foo bar")); invariant ((pika_escape_iso8859_1_n (out, (size_t)255, 0, "foo\tbar", (size_t)7) == 7) && !str_cmp (out, "foo\tbar")); invariant ((pika_escape_iso8859_1_n (out, (size_t)255, char_class_control, "foo\tbar", (size_t)7) == 12) && !str_cmp (out, "foo\\(tab)bar")); invariant ((pika_escape_iso8859_1_n (out, (size_t)255, char_class_space, "foo\tbar", (size_t)7) == 12) && !str_cmp (out, "foo\\(tab)bar")); invariant ((pika_escape_iso8859_1_n (out, (size_t)255, 0, "foo\020bar", (size_t)7) == 7) && !str_cmp (out, "foo\020bar")); invariant ((pika_escape_iso8859_1_n (out, (size_t)255, char_class_control, "foo\020bar", (size_t)7) == 13) && !str_cmp (out, "foo\\(U+10)bar")); invariant ((pika_escape_iso8859_1_n (out, (size_t)255, char_class_space, "foo\020bar", (size_t)7) == 7) && !str_cmp (out, "foo\020bar")); invariant (pika_unescape_iso8859_1_n (&result_needed, &str_used, out, (size_t)3, "foo", (size_t)3) == -1); invariant (pika_unescape_iso8859_1_n (&result_needed, &str_used, out, (size_t)256, "foo\\(sp)bar", (size_t)11) == 0 && str_cmp(out, "foo bar") == 0 && result_needed == 7 && str_used == 11); invariant (pika_unescape_iso8859_1_n (&result_needed, &str_used, out, (size_t)256, "foo\\(U+20)bar", (size_t)13) == 0 && str_cmp(out, "foo bar") == 0 && result_needed == 7 && str_used == 13); invariant (pika_unescape_iso8859_1_n (&result_needed, &str_used, out, (size_t)3, "foo\\(sp)bar", (size_t)11) == -1 && result_needed == 7 && str_used == 3); invariant (pika_unescape_iso8859_1_n (&result_needed, &str_used, out, (size_t)4, "foo\\(sp)bar", (size_t)11) == -1 && result_needed == 7 && str_used == 8); invariant ( (test = pika_save_escape_iso8859_1 (0, 0, char_class_control, "foo\abar")) && str_cmp (test, "foo\\(U+7)bar") == 0); invariant ( (test_back = pika_save_unescape_iso8859_1 (0, 0, test)) && !str_cmp (test_back, "foo\abar")); invariant ( (test = pika_save_escape_iso8859_1 (0, 0, char_class_control | char_class_space | char_class_non_ascii, "foo\tbar")) && !str_cmp (test, "foo\\(tab)bar")); lim_free (0,test); lim_free (0,test_back); } return 0; } tla-1.3.5+dfsg/src/hackerlab/tests/char-tests/unit-char-class.h0000644000175000017500000000271610457621774023050 0ustar useruserstatic t_uchar test_char_is_ascii[] = "\000\001\002\003\004\005\006\a\010\t\n\013\f\r\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037 !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\177"; static t_uchar test_char_is_upper[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; static t_uchar test_char_is_lower[] = "abcdefghijklmnopqrstuvwxyz"; static t_uchar test_char_is_alpha[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; static t_uchar test_char_is_digit[] = "0123456789"; static t_uchar test_char_is_alnum[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; static t_uchar test_char_is_control[] = "\000\001\002\003\004\005\006\a\010\t\n\013\f\r\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037"; static t_uchar test_char_is_printable[] = " !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~"; static t_uchar test_char_is_space[] = "\t\n\013\f\r "; static t_uchar test_char_is_graph[] = "!\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~"; static t_uchar test_char_is_c_id[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz"; static t_uchar test_char_is_xdigit[] = "0123456789ABCDEFabcdef"; static t_uchar test_char_is_odigit[] = "01234567"; static t_uchar test_char_is_punct[] = "!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~"; static t_uchar test_char_is_blank[] = "\t "; tla-1.3.5+dfsg/src/hackerlab/tests/char-tests/PLUGIN/0000755000175000017500000000000010457621774020672 5ustar userusertla-1.3.5+dfsg/src/hackerlab/tests/char-tests/PLUGIN/REQ0000644000175000017500000000003110457621774021236 0ustar userusermachine-tests char-tests tla-1.3.5+dfsg/src/hackerlab/tests/char-tests/unit-char-class.sh0000644000175000017500000000043010457621774023222 0ustar useruser#!/bin/sh # tag: Tom Lord Tue Dec 4 14:54:26 2001 (char-tests/unit-char-class.sh) # set -e arg0="$0" srcdir=`dirname "$arg0"` echo ================ unit-char-class tests ================ rm -f ,msg ./unit-char-class > ,msg cmp ,msg $srcdir/unit-char-class.h echo ...passed tla-1.3.5+dfsg/src/hackerlab/tests/char-tests/unit-char-name.h0000644000175000017500000000136710457621774022664 0ustar useruserstatic t_uchar test[] = "\000\001\002\003\004\005\006\a\010\t\n\013\f\r\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037 !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\177\200\201\202\203\204\205\206\207\210\211\212\213\214\215\216\217\220\221\222\223\224\225\226\227\230\231\232\233\234\235\236\237\240\241\242\243\244\245\246\247\250\251\252\253\254\255\256\257\260\261\262\263\264\265\266\267\270\271\272\273\274\275\276\277\300\301\302\303\304\305\306\307\310\311\312\313\314\315\316\317\320\321\322\323\324\325\326\327\330\331\332\333\334\335\336\337\340\341\342\343\344\345\346\347\350\351\352\353\354\355\356\357\360\361\362\363\364\365\366\367\370\371\372\373\374\375\376\377"; tla-1.3.5+dfsg/src/hackerlab/tests/char-tests/unit-pika-escaping.sh0000644000175000017500000000033310457621774023717 0ustar useruser#!/bin/sh # tag: Christian Thaeter (char-tests/unit-pika-escaping.sh) # set -e arg0="$0" srcdir=`dirname "$arg0"` echo ================ unit-pika-escaping tests ================ ./unit-pika-escaping echo ...passed tla-1.3.5+dfsg/src/hackerlab/qlinks/0000755000175000017500000000000010457621774015756 5ustar userusertla-1.3.5+dfsg/src/hackerlab/qlinks/qlinks.h0000644000175000017500000000144110457621774017430 0ustar useruser/* qlinks.h: * **************************************************************** * Copyright (C) 2004 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBAWIKI__QLINKS_H #define INCLUDE__LIBAWIKI__QLINKS_H typedef struct qlinks t_qlinks; struct qlinks { struct qlinks * _next; struct qlinks * _prev; }; /* automatically generated __STDC__ prototypes */ extern void init_qlinks (t_qlinks * links); extern void uninit_qlinks (t_qlinks * links); extern void qlinks_prepend (t_qlinks * head, t_qlinks * this); extern void * qlinks_next (t_qlinks * q); extern void qlinks_unlink (t_qlinks * q); #endif /* INCLUDE__LIBAWIKI__QLINKS_H */ /* tag: Tom Lord Tue Oct 26 14:19:32 2004 (qlinks.h) */ tla-1.3.5+dfsg/src/hackerlab/qlinks/qlinks.c0000644000175000017500000000211110457621774017416 0ustar useruser/* qlinks.c: * **************************************************************** * Copyright (C) 2004 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/mem/mem.h" #include "hackerlab/qlinks/qlinks.h" void init_qlinks (t_qlinks * links) { if (links) { links->_next = links; links->_prev = links; } } void uninit_qlinks (t_qlinks * links) { if (links) { mem_set0 ((t_uchar *)links, sizeof (*links)); } } void qlinks_prepend (t_qlinks * head, t_qlinks * this) { if (head && this) { this->_prev = head->_prev; this->_next = head; head->_prev = this; this->_prev->_next = this; } } void * qlinks_next (t_qlinks * q) { if (!q || (q == q->_next)) return 0; return (void *)q->_next; } void qlinks_unlink (t_qlinks * q) { if (q) { q->_next->_prev = q->_prev; q->_prev->_next = q->_next; q->_prev = q; q->_next = q; } } /* tag: Tom Lord Tue Oct 26 14:20:01 2004 (qlinks.c) */ tla-1.3.5+dfsg/src/hackerlab/qlinks/Makefile.in0000644000175000017500000000027510457621774020027 0ustar useruserinclude $(makefiles)/library-objects.mk ifeq ($(cgs__install_hackerlab),1) include $(makefiles)/install-includes.mk endif # tag: Tom Lord Sat Nov 20 15:14:28 2004 (qlinks/Makefile.in) # tla-1.3.5+dfsg/src/hackerlab/qlinks/PLUGIN/0000755000175000017500000000000010457621774016754 5ustar userusertla-1.3.5+dfsg/src/hackerlab/qlinks/PLUGIN/REQ0000644000175000017500000000004110457621774017321 0ustar userusermem qlinks qlinks libhackerlab tla-1.3.5+dfsg/src/hackerlab/rx/0000755000175000017500000000000010457621774015106 5ustar userusertla-1.3.5+dfsg/src/hackerlab/rx/tree.c0000644000175000017500000003545110457621774016221 0ustar useruser/* tree.c - parse trees for regexps * **************************************************************** * Copyright (C) 1998, 2000 Thomas Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/bugs/panic.h" #include "hackerlab/char/str.h" #include "hackerlab/mem/mem.h" #include "hackerlab/rx/nfa-cache.h" #include "hackerlab/rx/tree.h" static unsigned long exps_allocated = 0; static unsigned long exps_freed = 0; /**************************************************************** *(h0 "Regexp Expression Trees" * :subtitle "rx/rexp.c" * :includes ("rx/tree.h")) * * * Every regexp has a natural representation as a syntax tree. The * type `struct rx_exp_node' is used to represent one node of such a * tree. Functions are provided that construct and manipulate * expression trees representing regexps. * * Syntax trees can be constructed directly by programs as a way to * specify a regexp and strings obeying standard regexp syntax can be * parsed to produce syntax trees. Regexp parsing is explained in * xref:"Regexp Parsing". The topic of this chapter is the output * of parsing: the data structure used to represent a regexp syntax * tree. * * Rx is able to compute some analytic (recursively defined) * properties of regexp expression tree nodes. Therefore, the Rx * representation of expression tree nodes contains some "extra" * fields to hold that data. * * Rx is able to translate an expression tree into an NFA and * indirectly into a DFA. The performance of this translation is * commonly critical and is greatly improved by caching information * in still more "extra" fields of expression nodes. */ /*(menu) */ /*(include-documentation "tree.h") */ /**************************************************************** *(h1 "Regexp Tree Allocation and Initialization") */ /*(c rx_exp_node) * struct rx_exp_node * rx_exp_node (int type); * * Allocate a new expression node and initialize its type * and reference count. The reference count is initialized to 1, * the type to `type', and all other fields to 0. * * If the allocation fails, return 0. * */ struct rx_exp_node * rx_exp_node (enum rx_exp_node_type type) { struct rx_exp_node *n; n = (struct rx_exp_node *) rx_nfa_cache_malloc (sizeof (*n)); if (!n) return 0; ++exps_allocated; mem_set0 ((char *)n, sizeof (*n)); n->type = type; n->refs = 1; return n; } /*(c rx_mk_r_cset) * struct rx_exp_node * rx_mk_r_cset (enum rx_exp_node_type type, * int size, bits b); * * Allocate a new character set expression node. The reference count * is initialized to 1, the type to `type', the `cset' field to a * newly allocated copy of `b', the `cset_size' field to `size', and * all other fields to 0. * * If any allocation fails, return 0; * * `type' should be `r_cset'. */ struct rx_exp_node * rx_mk_r_cset (enum rx_exp_node_type type, int size, bits b) { struct rx_exp_node * n; if (type != r_cset) panic ("unreasonable rexp node type in rx_mk_r_cset"); n = rx_exp_node (type); if (!n) return 0; n->cset = bits_dup (b); if (!n->cset) { rx_free_exp (n); return 0; } n->cset_size = size; return n; } /*(c rx_mk_r_cset_take) * struct rx_exp_node * rx_mk_r_cset_take (enum rx_exp_node_type type, * int size, bits b); * * Allocate a new character set expression node. The reference count * is initialized to 1, the type to `type', the `cset' field to a * newly allocated copy of `b', the `cset_size' field to `size', and * all other fields to 0. * * If any allocation fails, return 0. * * `type' should be `r_cset'. */ struct rx_exp_node * rx_mk_r_cset_take (enum rx_exp_node_type type, int size, bits b) { struct rx_exp_node * n; if (type != r_cset) panic ("unreasonable rexp node type in rx_mk_r_cset_take"); n = rx_exp_node (type); if (!n) return 0; n->cset = b; n->cset_size = size; return n; } /*(c rx_mk_r_binop) * struct rx_exp_node * rx_mk_r_binop (enum rx_exp_node_type type, * struct rx_exp_node * a, * struct rx_exp_node * b); * * Allocate a regexp expression node with two subexpressions. The * reference count is initialized to 1, the type to `type', the `left' * and `right' fields to `a' and `b', and all other fields to 0. * * If any allocation fails, return 0. * * The reference counts of `a' and `b' are not modified by this * function -- the caller's reference count to those nodes is taken * over by this function. * * `type' should be `r_concat' `r_right_concat' or `r_alternate'. */ struct rx_exp_node * rx_mk_r_binop (enum rx_exp_node_type type, struct rx_exp_node * a, struct rx_exp_node * b) { struct rx_exp_node * n; if ((type != r_concat) && (type != r_right_concat) && (type != r_alternate)) panic ("unreasonable rexp node type in rx_mk_r_binop"); n = rx_exp_node (type); if (!n) return 0; n->left = a; n->right = b; return n; } /*(c rx_mk_r_monop) * struct rx_exp_node * rx_mk_r_monop (enum rx_exp_node_type type, * struct rx_exp_node * a); * * Allocate a regexp expression node with one subexpression. The * reference count is initialized to 1, the type to `type', the `left' * field to `a', and all other fields to 0. * * If any allocation fails, return 0. * * The reference count of `a' is not modified by this function -- the * caller's reference count to that node is taken over by this * function. * * `type' should be `r_star', `r_interval', `r_parens', or `r_context'. */ struct rx_exp_node * rx_mk_r_monop (enum rx_exp_node_type type, struct rx_exp_node * a) { struct rx_exp_node * n; if ( (type != r_star) && (type != r_interval) && (type != r_parens) && (type != r_context)) panic ("unreasonable rexp node type in rx_mk_r_monop"); n = rx_exp_node (type); if (!n) return 0; n->left = a; n->right = 0; return n; } /*(c rx_mk_r_str) * struct rx_exp_node * rx_mk_r_str (enum rx_exp_node_type type, * const t_uchar * s, * size_t len, * enum uni_encoding_scheme encoding); * * Allocate a regexp expression node whose parameter is a string. The * reference count is initialized to 1, the type to `type', the `str' * field to a newly allocated copy of the `len'-byte string `s', the * `str_len' field is initialized to `len', and all other fields to 0. * * If any allocation fails, return 0. * * `type' should be `r_string'. */ struct rx_exp_node * rx_mk_r_str (enum rx_exp_node_type type, const t_uchar * s, size_t len, enum uni_encoding_scheme encoding) { struct rx_exp_node *n; if (type != r_string) panic ("unreasonable rexp node type in rx_mk_r_str_c"); n = rx_exp_node (type); if (!n) return 0; n->str = (t_uchar *)rx_nfa_cache_malloc (len); if (len && !n->str) { rx_free_exp (n); return 0; } mem_move (n->str, s, len); n->str_len = len; n->encoding = encoding; return n; } /*(c rx_mk_r_int) * struct rx_exp_node * rx_mk_r_int (enum rx_exp_node_type type, * int intval); * * Allocate a regexp expression node whose parameter is an integer. * The reference count is initialized to 1, the type to `type', the * `intval' field is initialized to `intval', and all other fields to * 0. * * If any allocation fails, return 0. * * `type' should be `r_cut', `r_parens', or `r_context'. */ struct rx_exp_node * rx_mk_r_int (enum rx_exp_node_type type, int intval) { struct rx_exp_node * n; if ( (type != r_cut) && (type != r_parens) && (type != r_context)) panic ("unreasonable rexp node type in rx_mk_r_int"); n = rx_exp_node (type); if (!n) return 0; n->intval = intval; return n; } /*(c rx_mk_r_subexp_int) * struct rx_exp_node * rx_mk_r_subexp_int (enum rx_exp_node_type type, * struct rx_exp_node * subexp, * int intval); * * Allocate a regexp expression node whose parameters are a * subexpression and an integer. The reference count is initialized * to 1, the type to `type', the `left' field is initialized to * `subexp', the `intval' field is initialized to `intval', and all * other fields to 0. * * The reference count of `subexp' is not modified by this function -- * the caller's reference count to that node is taken over by this * function. * * If any allocation fails, return 0. * * `type' should be `r_parens'. `intval' is the subexpression number * for this parenthesized expression (the number used for * backreferences). If `intval' is 0, this is an anonymous * subexpression (it can not be backreferenced). */ struct rx_exp_node * rx_mk_r_subexp_int (enum rx_exp_node_type type, struct rx_exp_node * subexp, int intval) { struct rx_exp_node * n; if (type != r_parens) panic ("unreasonable rexp node type in rx_mk_r_subexp_int"); n = rx_exp_node (type); if (!n) return 0; n->left = subexp; n->intval = intval; return n; } /*(c rx_mk_r_int2) * struct rx_exp_node * rx_mk_r_int2 (enum rx_exp_node_type type, * int intval, * int intval2); * * Allocate a regexp expression node whose parameters are two * integers. The reference count is initialized to 1, the type to * `type', the `intval' and `intval2' fields are initialized to `intval' and `intval2', and all * other fields to 0. * * If any allocation fails, return 0. * * `type' should be `r_interval'. */ struct rx_exp_node * rx_mk_r_int2 (enum rx_exp_node_type type, int intval, int intval2) { struct rx_exp_node * n; if (type != r_interval) panic ("unreasonable rexp node type in rx_mk_r_int2"); n = rx_exp_node (type); if (!n) return 0; n->intval = intval; n->intval2 = intval2; return n; } /*(c rx_mk_r_subexp_int2) * struct rx_exp_node * rx_mk_r_subexp_int2 (enum rx_exp_node_type type, * struct rx_exp_node * subexp, * int intval, * int intval2); * * Allocate a regexp expression node whose parameters are a * subexpression and two integers. The reference count is initialized * to 1, the type to `type', the `left' field is initialized to * `subexp', the `intval' and `intval2' fields are initialized to * `intval' and `intval2', and all other fields to 0. * * The reference count of `subexp' is not modified by this function -- * the caller's reference count to that node is taken over by this * function. * * If any allocation fails, return 0. * * `type' should be `r_interval'. The two integer parameters are the * lower and upper bound of the iteration. */ struct rx_exp_node * rx_mk_r_subexp_int2 (enum rx_exp_node_type type, struct rx_exp_node * subexp, int intval, int intval2) { struct rx_exp_node * n; if (type != r_interval) panic ("unreasonable rexp node type in rx_mk_r_int2"); n = rx_exp_node (type); if (!n) return 0; n->left = subexp; n->intval = intval; n->intval2 = intval2; return n; } /**************************************************************** *(h1 "Regexp Tree Reference Counting and Copying.") * */ /*(c rx_save_exp) * void rx_save_exp (struct rx_exp_node * node); * * Increment the reference count of `node'. */ void rx_save_exp (struct rx_exp_node * node) { if (node) ++node->refs; } /*(c rx_free_exp) * void rx_free_exp (struct rx_exp_node * node); * * Decrement the reference count of `node'. If it drops to 0, free * the node, free all allocated data attached to it, and recursively * `rx_free_exp' the sub-expressions of `node'. */ void rx_free_exp (struct rx_exp_node * node) { if (node && !--node->refs) { if (node->cr) { node->next_same_nfa->prev_same_nfa = node->prev_same_nfa; node->prev_same_nfa->next_same_nfa = node->next_same_nfa; } if (node->cset) bits_free (node->cset); if (node->str) rx_nfa_cache_free (node->str); rx_free_exp (node->left); rx_free_exp (node->right); rx_free_exp (node->simplified); rx_nfa_cache_free ((char *)node); ++exps_freed; /* safe_printfmt (1, "free %lx\n", (unsigned long)node); */ } } /**************************************************************** *(h1 "Regexp Tree Hashing and Equality") * */ /*(c rx_exp_equal) * int rx_exp_equal (struct rx_exp_node * a, struct rx_exp_node * b); * * Return 1 if two regexp expression trees are "equal", 0 otherwise. * * "Equal" means that the two trees have identical structure which is * a sufficient but not necessary condition of the two patterns * matching the same set of strings with identical results. */ int rx_exp_equal (struct rx_exp_node * a, struct rx_exp_node * b) { int ret; if (a == b) return 1; if ((a == 0) || (b == 0)) return 0; if (a->type != b->type) return 0; switch (a->type) { case r_cset: ret = ( (a->cset_size == b->cset_size) && bits_is_equal (a->cset, b->cset)); break; case r_string: ret = ( (a->str_len == b->str_len) && !str_cmp_n (a->str, a->str_len, b->str, a->str_len)); break; case r_cut: ret = (a->intval == b->intval); break; case r_concat: case r_right_concat: case r_alternate: ret = ( rx_exp_equal (a->left, b->left) && rx_exp_equal (a->right, b->right)); break; case r_star: ret = rx_exp_equal (a->left, b->left); break; case r_interval: ret = ( (a->intval == b->intval) && (a->intval2 == b->intval2) && rx_exp_equal (a->left, b->left)); break; case r_parens: ret = ( (a->intval == b->intval) && rx_exp_equal (a->left, b->left)); break; case r_context: ret = (a->intval == b->intval); break; default: return 0; } return ret; } static unsigned long exp_hash (struct rx_exp_node * node, unsigned long seed) { unsigned long contribution; if (!node) return seed; /* This is just made up and should be checked out. */ contribution = ( node->type ^ str_hash_n (node->str, node->str_len) ^ ((seed << 3) + node->intval) ^ ((seed << 3) + node->intval2)); seed = contribution ^ (seed << 11) ^ (seed >> (8 * sizeof (seed) - 11)); seed = exp_hash (node->left, seed); seed = exp_hash (node->right, seed); return seed; } /*(c rx_exp_hash) * unsigned long rx_exp_hash (struct rx_exp_node * node); * * Compute a word-sized hash value for an expression tree. Regexps * which are equal (in the sense of `rx_exp_equal') have equal hash * values (in the sense of `=='). */ unsigned long rx_exp_hash (struct rx_exp_node * node) { return exp_hash (node, 0); } tla-1.3.5+dfsg/src/hackerlab/rx/dfa-utf8.c0000644000175000017500000003064510457621774016700 0ustar useruser/* dfa-utf8.c - utf8 functions that manipulate regexps as DFAs * **************************************************************** * Copyright (C) 1998, 2000 Thomas Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/bugs/panic.h" #include "hackerlab/rx/escape.h" #include "hackerlab/rx/super.h" #include "hackerlab/rx/dfa-utf8.h" /************************************************************************ *(h0 "DFA String Comparisons for 8-bit Character Storage Units" * :includes ("rx/dfa.h" * "rx/dfa_utf8.h")) * * * A common use for regular expressions is to compile them to DFA and * compare them to strings using a loop that advances through DFA * states. * * In Rx, the DFA data structure has been heavily optimized for such * loops. The functions in this chapter implement the most common * kinds of DFA loop, taking full advantage of the Rx optimizations. */ /*(menu) */ /************************************************************************ *(h1 "DFA Comparison Functions for 16-bit Character Storage Units") * * The functions in this section compare an input string to a regular * expression by advancing through DFA states according to the * characters in the input string. */ /*(c rx_dfa_utf8_fits) * int rx_dfa_utf8_fits (struct rx_dfa * frame, * const t_uint16 * burst, * size_t len); * * * Compare a DFA to string: is the entire string matched by the DFA? * Return a non-zero value (the state-label of the final DFA state) if * the string matches, 0 otherwise. * * This function works by advancing the DFA through all of the * characters in the input string and checking the state label of the * last state reached. If that label is not 0, then the string * matches. If that label is 0, or if an illegal input character is * reached before the end of the input string, the string does not * match. * * It is possible to asynchronously abort a call to this function. * See xref:"Exiting Long-running Matches". */ int rx_dfa_utf8_fits (int * label, struct rx_dfa * frame, const t_uchar * burst, size_t len) { int adv; adv = rx_dfa_utf8_advance (frame, burst, len); if (adv < 0) return -1; else if (!adv) { *label = 0; return 0; } else { *label = frame->final_tag; return 0; } } /*(c rx_dfa_utf8_advance) * int rx_dfa_advance (struct rx_dfa * frame, * const t_uchar * burst, * size_t len); * * * Advance a DFA, reading characters from the input string. Stop at * the end of the string, returning 1 or when a character is * encountered for which no transition is defined, returning 0. * * This is similar to `rx_dfa_fits', except that in this case, we * don't care about the state label of the final state. * * It is possible to asynchronously abort a call to this function. * See xref:"Exiting Long-running Matches". */ int rx_dfa_utf8_advance (struct rx_dfa * frame, const t_uchar * burst, size_t len) { rx_transition_table inx_table; if (!len) return 1; inx_table = frame->state->transitions; rx_unlock_superstate (frame->rx, frame->state); frame->state = 0; while (len--) { struct rx_inx * inx; rx_transition_table next_table; if (rx_poll) (*rx_poll)(); inx = rx_transition8 (inx_table, *burst); next_table = (rx_transition_table)inx->data; while (!next_table) { struct rx_superstate * state; t_uchar byte0; t_uchar byte1; t_uchar byte2; t_uchar byte3; t_unicode c; state = rx_transitions_to_suprestate (inx_table); switch ((long)inx->inx) { case rx_bogus_utf8: goto handle_as_backtrack; case rx_2byte_utf8: if (!len) goto handle_as_backtrack; byte0 = *burst; byte1 = burst[1]; ++burst; --len; if ((byte1 & 0xc0) != 0x80) goto handle_as_backtrack; c = ((byte0 & 0x1f) << 6) | (byte1 & 0x3f); goto handle_huge_char; case rx_3byte_utf8: if (len < 2) goto handle_as_backtrack; byte0 = *burst; byte1 = burst[1]; byte2 = burst[2]; burst += 2; len -= 2; if ( ((byte0 == 0xe0) ? ((byte1 < 0xa0) || (byte1 > 0xbf)) : ((byte1 & 0xc0) != 0x80)) || ((byte2 & 0xc0) != 0x80)) goto handle_as_backtrack; c = ((byte0 & 0xf) << 12) | ((byte1 & 0x3f) << 6) | (byte2 & 0x3f); goto handle_huge_char; case rx_4byte_utf8: if (len < 3) goto handle_as_backtrack; byte0 = *burst; byte1 = burst[1]; byte2 = burst[2]; byte3 = burst[3]; burst += 3; len -= 3; if ( ((byte0 == 0xf0) ? ((byte1 < 0x90) || (byte1 > 0xbf)) : ((byte0 == 0xf4) ? ((byte1 < 0x80) || (byte1 > 0x8f)) : ((byte1 & 0xc0) != 0x80))) || ((byte2 & 0xc0) != 0x80) || ((byte3 & 0xc0) != 0x80)) goto handle_as_backtrack; c = ((byte0 & 0x7) << 18) | ((byte1 & 0x3f) << 12) | ((byte2 & 0x3f) << 6) | (byte3 & 0x3f); goto handle_huge_char; handle_huge_char: { inx = rx_transition21 (state->huge_char_transitions, c); next_table = (rx_transition_table)inx->data; while (!next_table) { switch ((enum rx_opcode)inx->inx) { default: case rx_huge_char: goto handle_by_panic; case rx_backtrack: goto handle_as_backtrack; case rx_cache_miss: inx = rx_handle_cache_miss (frame->rx, state, c, inx->data_2); if (!inx) { frame->state = 0; frame->final_tag = 0; return -1; } next_table = (rx_transition_table)inx->data; continue; } } continue; } case rx_backtrack: handle_as_backtrack: /* RX_BACKTRACK means that we've reached the empty * superstate, indicating that match can't succeed * from this point. */ frame->state = 0; frame->final_tag = 0; return 0; case rx_cache_miss: /* Because the superstate NFA is lazily constructed, * and in fact may erode from underneath us, we sometimes * have to construct the next instruction from the hard way. * This invokes one step in the lazy-conversion. */ inx = rx_handle_cache_miss (frame->rx, state, *burst, inx->data_2); if (!inx) { frame->state = 0; frame->final_tag = 0; return -1; } next_table = (rx_transition_table)inx->data; continue; /* No other instructions are legal here. */ default: handle_by_panic: panic ("unrecognized instruction in rx_dfa_advance"); } } inx_table = next_table; ++burst; } frame->state = rx_transitions_to_suprestate (inx_table); frame->final_tag = frame->state->members->state_label; rx_lock_superstate (frame->rx, frame->state); return 1; } /*(c rx_dfa_utf8_advance_to_final) * size_t rx_dfa_utf8_advance_to_final (struct rx_dfa * frame, * const t_uchar * burst, * size_t len); * * Advance a DFA, reading characters from a string. * * Stop at the end of the string, a character with no transition, or * when a superstate is encountered with a non-0 label. Return the * number of characters read from the string. * * This function stops on a transition *into* a state with a non-0 * state label. It doesn't matter if the machine is initially in a * state with a non-0 label: the machine will consume the first input * character regardless. That means that if your regular expression * can match the empty string, you must detect this condition before * calling `rx_dfa_advance_to_final' by checking `dfa->final_tag' * after setting the start state of the DFA. * * If the match stopped in a final state, `dfa->final_tag' contains * the non-0 state label of the final state, otherwise, it contains 0. * If the match stopped on an illegal character, `dfa->state' is 0, * otherwise it is non-0. * * It is possible to asynchronously abort a call to this function. * See xref:"Exiting Long-running Matches". */ int rx_dfa_utf8_advance_to_final (size_t * amt, struct rx_dfa * frame, const t_uchar * burst, size_t len) { size_t initial_len; rx_transition_table inx_table; if (!len) { *amt = 0; return 1; } initial_len = len; inx_table = frame->state->transitions; rx_unlock_superstate (frame->rx, frame->state); frame->state = 0; while (len--) { struct rx_inx * inx; rx_transition_table next_table; if (rx_poll) (*rx_poll)(); inx = rx_transition8 (inx_table, *burst); next_table = (rx_transition_table)inx->data; while (!next_table) { struct rx_superstate * state; t_uchar byte0; t_uchar byte1; t_uchar byte2; t_uchar byte3; t_unicode c; state = rx_transitions_to_suprestate (inx_table); switch ((enum rx_opcode)inx->inx) { case rx_bogus_utf8: goto handle_as_backtrack; case rx_2byte_utf8: if (!len) goto handle_as_backtrack; byte0 = *burst; byte1 = burst[1]; ++burst; --len; if ((byte1 & 0xc0) != 0x80) goto handle_as_backtrack; c = ((byte0 & 0x1f) << 6) | (byte1 & 0x3f); goto handle_huge_char; case rx_3byte_utf8: if (len < 2) goto handle_as_backtrack; byte0 = *burst; byte1 = burst[1]; byte2 = burst[2]; burst += 2; len -= 2; if ( ((byte0 == 0xe0) ? ((byte1 < 0xa0) || (byte1 > 0xbf)) : ((byte1 & 0xc0) != 0x80)) || ((byte2 & 0xc0) != 0x80)) goto handle_as_backtrack; c = ((byte0 & 0xf) << 12) | ((byte1 & 0x3f) << 6) | (byte2 & 0x3f); goto handle_huge_char; case rx_4byte_utf8: if (len < 3) goto handle_as_backtrack; byte0 = *burst; byte1 = burst[1]; byte2 = burst[2]; byte3 = burst[3]; burst += 3; len -= 3; if ( ((byte0 == 0xf0) ? ((byte1 < 0x90) || (byte1 > 0xbf)) : ((byte0 == 0xf4) ? ((byte1 < 0x80) || (byte1 > 0x8f)) : ((byte1 & 0xc0) != 0x80))) || ((byte2 & 0xc0) != 0x80) || ((byte3 & 0xc0) != 0x80)) goto handle_as_backtrack; c = ((byte0 & 0xf) << 18) | ((byte1 & 0x3f) << 12) | ((byte2 & 0x3f) << 6) | (byte3 & 0x3f); goto handle_huge_char; handle_huge_char: { inx = rx_transition21 (state->huge_char_transitions, c); next_table = (rx_transition_table)inx->data; while (!next_table) { switch ((enum rx_opcode)inx->inx) { default: case rx_huge_char: goto handle_by_panic; case rx_backtrack: goto handle_as_backtrack; case rx_cache_miss: inx = rx_handle_cache_miss (frame->rx, state, c, inx->data_2); if (!inx) { frame->state = 0; frame->final_tag = 0; return -1; } next_table = (rx_transition_table)inx->data; continue; } } continue; } case rx_backtrack: handle_as_backtrack: /* RX_BACKTRACK means that we've reached the empty * superstate, indicating that match can't succeed * from this point. */ frame->state = 0; frame->final_tag = 0; *amt = (initial_len - len) - 1; return 0; case rx_cache_miss: /* Because the superstate NFA is lazily constructed, * and in fact may erode from underneath us, we sometimes * have to construct the next instruction from the hard way. * This invokes one step in the lazy-conversion. */ inx = rx_handle_cache_miss (frame->rx, state, *burst, inx->data_2); if (!inx) { frame->state = 0; frame->final_tag = 0; return -1; } next_table = (rx_transition_table)inx->data; continue; /* No other instructions are legal here. */ default: handle_by_panic: while (1) panic ("unrecognized instruction in rx_dfa_advance_to_final"); } } if (inx->data_2) { frame->state = rx_transitions_to_suprestate (next_table); rx_lock_superstate (frame->rx, frame->state); frame->final_tag = (long)inx->data_2; *amt = (initial_len - len); return 1; } inx_table = next_table; ++burst; } /* Consumed all of the characters. */ frame->state = rx_transitions_to_suprestate (inx_table); rx_lock_superstate (frame->rx, frame->state); frame->final_tag = 0; *amt = initial_len; return 1; } tla-1.3.5+dfsg/src/hackerlab/rx/super.c0000644000175000017500000017152210457621774016420 0ustar useruser/* super.c - lazilly constructed DFAs * **************************************************************** * Copyright (C) 1998, 2000 Thomas Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/bugs/panic.h" #include "hackerlab/mem/mem.h" #include "hackerlab/rx/bits-tree-rules.h" #include "hackerlab/rx/dfa-cache.h" #include "hackerlab/rx/super.h" /* __STDC__ prototypes for static functions */ static void free_some_dfa_memory (void * ign, size_t needed); static int rx_dfa_cache_prepare (size_t amt); static void * rx_dfa_cache_malloc (size_t size); static void * rx_dfa_cache_soft_malloc (size_t size); static void rx_dfa_cache_free (void * mem); static struct rx_superset * rx_protect_superset (struct rx_nfa * rx, struct rx_superset * set); static void rx_release_superset (struct rx_superset *set); static struct rx_superset * rx_superset_cons (struct rx_nfa * rx, struct rx_nfa_state *car, struct rx_superset *cdr); static struct hashtree_item * superset_allocator (void * val, struct hashtree_rules * rules); static struct rx_superset * rx_superstate_eclosure_union (struct rx_nfa * rx, struct rx_superset *set, struct rx_nfa_state_set *ecl) ; static int supersetcmp (void * va, void * vb, struct hashtree_rules * rules); static struct hashtree * super_hash_allocator (struct hashtree_rules * rules); static void super_hash_liberator (struct hashtree * hash, struct hashtree_rules * rules); static void superset_hash_item_liberator (struct hashtree_item * it, struct hashtree_rules * rules); static void install_cache_miss_transition (struct rx_super_edge * e); static void semifree_superstate (); static void refresh_semifree_superstate (struct rx_superstate * super); static void rx_refresh_this_superstate (struct rx_superstate * superstate); static struct rx_superstate * rx_superstate (struct rx_nfa *rx, struct rx_superset *set, int storage_unit_size); static int solve_destination (struct rx_nfa * rx, struct rx_inx * inx_out, struct rx_super_edge * e, int storage_unit_size); static int compute_super_edge_cset (struct rx_nfa *rx, bits csetout, struct rx_superstate * superstate, unsigned int chr); static struct rx_super_edge * rx_super_edge (struct rx_nfa *rx, struct rx_superstate *super, bits cset); static int install_partial_transition (struct rx_superstate *super, struct rx_inx *answer, struct rx_super_edge * edge, bitset_subset set, int chr); #define COPIES_32 \ X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X #define COPIES_64 \ X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X, \ X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X #define COPIES_256 \ X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X, \ X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X, \ X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X, \ X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X, \ X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X, \ X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X, \ X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X, \ X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X #if rx_page1_size21 == 256 # define COPIES_PAGE1_21_SIZE COPIES_256 #elif rx_page1_size21 == 32 # define COPIES_PAGE1_21_SIZE COPIES_32 #else # error you broke fragile code #endif #if rx_page2_size21 == 256 # define COPIES_PAGE2_21_SIZE COPIES_256 #elif rx_page2_size21 == 32 # define COPIES_PAGE2_21_SIZE COPIES_32 #else # error you broke fragile code #endif #if bits_per_subset == 32 # define COPIES_BPS COPIES_32 # define COPIES_PAGE2_SIZE X, X, X, X, X, X, X, X # define COPIES_PAGE3_21_SIZE X, X, X, X, X, X, X, X #elif bits_per_subset == 64 # define COPIES_BPS COPIES_64 # define COPIES_PAGE2_SIZE X, X, X, X # define COPIES_PAGE3_21_SIZE X, X, X, X #else # error "odd bits_per_subset in super.c" #endif /* Default value for leaf nodes of multi-level transition tables: */ #undef X #define X {0, 0, (void *)rx_cache_miss, 0} static struct rx_inx rx_shared_cache_miss_page[256] = {COPIES_256}; /* Fixed backtrack page for leaf nodes of multi-level transition tables: */ #undef X #define X {0, 0, (void *)rx_backtrack, 0} static struct rx_inx rx_shared_backtrack_page[256] = {COPIES_256}; /* Fixed value for high-surrogate leaf nodes of 16-bit tables: */ #undef X #define X {0, 0, (void *)rx_huge_char, 0} static struct rx_inx rx_huge_char_page[256] = {COPIES_256}; #ifdef RX_LARGE_TABLES /* Default value for page2 of 21-bit tables: */ #undef X #define X rx_shared_cache_miss_page static struct rx_inx * rx_huge_char_second_level_page[rx_page2_size21] = { COPIES_256 }; /* Default value for huge_char_transitions: */ #undef X #define X rx_huge_char_second_level_page static struct rx_inx ** rx_default_huge_char_transitions[rx_page1_size21] = { COPIES_32 }; #else /* ndef RX_LARGE_TABLES */ #undef X #define X rx_shared_cache_miss_page static struct rx_inx * rx_default_small_table_page2[rx_page2_size] = { COPIES_PAGE2_SIZE }; #undef X #define X rx_shared_backtrack_page static struct rx_inx * rx_small_table_backtrack_page2[rx_page2_size] = { COPIES_PAGE2_SIZE }; #undef X #define X rx_huge_char_page static struct rx_inx * rx_huge_char_page2[rx_page2_size] = { COPIES_PAGE2_SIZE }; #undef X #define X rx_shared_cache_miss_page static struct rx_inx * rx_huge_char_third_level_page[rx_page3_size21] = { COPIES_PAGE3_21_SIZE }; #undef X #define X rx_huge_char_third_level_page static struct rx_inx ** rx_huge_char_second_level_page[rx_page2_size21] = { COPIES_PAGE2_21_SIZE }; #undef X #define X rx_huge_char_second_level_page static struct rx_inx *** rx_default_huge_char_transitions[rx_page1_size21] = { COPIES_PAGE1_21_SIZE }; #endif /************************************************************************ *(h0 "The Superstate DFA" * :subtitle "rx/super.c" * :includes ("rx/super.h")) * * It is well known that there is a mapping from non-deterministic * finite-state automata to equivalent deterministic finite-state * automata (a good text book about compiler construction explains * this). That mapping is important to applications which use regular * expressions for efficient pattern matching. When a regular * expression comparison is implemented using a single pass with a * non-deterministic automata with `K' states, the comparison * algorithm may run for a number of steps which is proportional to * `K*N' for a length `N' input string (where each step is relatively * expensive). When implemented using backtracking, `N**K' * (relatively inexpensive) steps may be required. On the other hand, * when regular expression comparison is implemented using a * deterministic automata, the algorithm requires a number of * instructions which is linear in the length of the input string * (order `N' (inexpensive) steps). * * The catch is that, using brute force, it is expensive (in time and * space) to build a DFA from a typical regular expression NFA. An * NFA with `K' states can yield a DFA with order `2^K' states. * * The trick is that, during most matches using typical regexps, only * a small portion of the total potential number of DFA states are * actually needed -- time and space can be saved by building DFA * states on-demand. During any match, only two DFA states are needed * at a time -- if the total number of DFA states encountered during a * match is very large, space can be saved (at the expense of time) by * discarding less frequently used DFA states and reconstructing them * on demand. * * The functions in this chapter do the trick: they build a DFA on * demand, keeping a cache of frequently used states, and discarding * infrequently used states if the cache grows too large. * * As a result, DFA-style matching using the functions here provide * matching in order `N' (inexpensive) steps for most patterns (by * acting like a DFA match). In the worst case (when the cache is not * effective), these functions provide matching in order `N*K' * (relatively expensive) steps (by acting like a one-pass NFA match). * */ /*(menu) */ /*(h1 "The DFA Virtual Machine") * * The view taken by the design of Rx is that a DFA built from a * regexp is a kind of program which can be interpreted by a * virtual machine. * * The basic operation of this machine is that it has one register: a * DFA state. In each cycle, it reads one input character and * tries to advance to the next DFA state by looking that character up * in the transition table for the current state. * * The machine's outputs are the state label of the current DFA state, * a flag that indicates whether or not the current state has outgoing * edges (whether or not any input characters are valid), and a signal * that occurs when there is no transition for an input character. * * Implementing this virtual machine is complicated by the fact that * its program, the DFA, is not constructed all at once and might not * exist in its entirety at any one time. The virtual machine interpreter * has to be able to handle the case when the next state reached after * some input character hasn't been built yet or has been flushed * from the DFA cache. */ /*(include-documentation "super.h") */ /************************************************************************ * The Rx DFA Cache * * The DFA state cache is kept in a structure referenced through * the global pointer `rx_default_cache'. In the future, this * may be exposed as an interface to the library: allowing separate * caches for regexps with different priorities. */ struct rx_cache; struct rx_cache { struct hashtree_rules superset_hashtree_rules; struct rx_superstate * lru_superstate; /* * The least recently used live superstate. This is the next * superstate that will become semifree. Superstates are linked on * this queue by `next_recyclable' and `prev_recyclable'. */ struct rx_superstate * semifree_superstate; /* * The least recently used semifree superstate. This is the next * superstate that will become completely freed. Superstates are * linked on this queue by `next_recyclable' and `prev_recyclable'. */ /* Allocation counts. The number of various kinds of objects * currently allocated. This is used for debugging and for tuning * the rate at which states are semifreed. */ int hash_tables; int supersets; int super_edges; int superstates; int semifree_superstates; /* The ratio of cache hits to cache misses when searching for * superstates. This ratio is weighted in favor of recent * cache probes. */ int hits; int misses; int total_hits; int total_misses; /* A hash table mapping `car' and `cdr' to NFA states. */ struct hashtree superset_table; }; static struct rx_cache * rx_default_cache; int rx_superstate_counter = 0; /************************************************************************ * DFA Cache Allocation * * These malloc-like functions add or subtract from the `bytes_used' field * of the DFA state cache. They discard states from an over-full cache. */ #ifndef RX_DEFAULT_DFA_CACHE_SIZE /* This is an upper bound on the number of bytes that may (normally) * be allocated for DFA states. If this threshold would be exceeded, * Rx tries to flush some DFA states from the cache. */ #define RX_DEFAULT_DFA_CACHE_SIZE (sizeof (void *) * (1 << 16)) #endif alloc_limits rx__dfa_alloc_limits; static void free_some_dfa_memory (void * ign, size_t needed) { while ( (lim_in_use (rx__dfa_alloc_limits) + needed > lim_threshold (rx__dfa_alloc_limits)) && (0 <= rx__really_free_superstate ())) ; } void rx__init_dfa_alloc_limits (void) { static int init = 1; if (init) { rx__dfa_alloc_limits = make_alloc_limits ("Rx DFA cache", RX_DEFAULT_DFA_CACHE_SIZE, 0, 0, free_some_dfa_memory, 0); init = 0; } } size_t rx_dfa_cache_failure_pt (void) { rx__init_dfa_alloc_limits (); return lim_failure_pt (rx__dfa_alloc_limits); } void rx__dfa_cache_statistics (size_t * threshold, size_t * failure_pt, size_t * in_use, size_t * high_water_mark, int * hits, int * misses, int * total_hits, int * total_misses) { rx__init_dfa_alloc_limits (); if (threshold) *threshold = rx_dfa_cache_threshold (); if (failure_pt) *failure_pt = rx_dfa_cache_failure_pt (); if (in_use) *in_use = rx_dfa_cache_in_use (); if (high_water_mark) *high_water_mark = rx_dfa_cache_high_water_mark (); if (hits) *hits = rx_default_cache->hits; if (misses) *misses = rx_default_cache->misses; if (total_hits) *total_hits = rx_default_cache->total_hits; if (total_misses) *total_misses = rx_default_cache->total_misses; } void rx_set_dfa_cache_failure_pt (size_t n) { rx__init_dfa_alloc_limits (); lim_set_failure_pt (rx__dfa_alloc_limits, n); } static int rx_dfa_cache_prepare (size_t amt) { rx__init_dfa_alloc_limits (); return lim_prepare (rx__dfa_alloc_limits, amt); } /* static char * rx_dfa_cache_malloc (int size); * * Allocate memory for the DFA state cache. If this allocation would * overflow the cache then this function first tries to reduce the cache * size by flushing old DFA statess. */ static void * rx_dfa_cache_malloc (size_t size) { void * answer; rx__init_dfa_alloc_limits (); answer = lim_malloc (rx__dfa_alloc_limits, size); return answer; } static void * rx_dfa_cache_soft_malloc (size_t size) { void * answer; rx__init_dfa_alloc_limits (); answer = lim_soft_malloc (rx__dfa_alloc_limits, size); return answer; } /* static void rx_dfa_cache_free (char * mem); * * Free memory for the DFA state cache. */ static void rx_dfa_cache_free (void * mem) { lim_free (rx__dfa_alloc_limits, mem); } /************************************************************************ * The NFA State Set Cache * * Each DFA state points to a set of NFA states. That set is stored * in the NFA state set cache which is part of the DFA state cache. * * These are the hash-table hook functions for the NFA state set * cache. */ /* (c rx_protect_superset) * struct rx_superset * rx_protect_superset (struct rx_nfa * rx, struct rx_superset * set); * * Increment the reference count of a superset. See xref:"struct * rx_superset" and xref:"rx_release_superset". */ static struct rx_superset * rx_protect_superset (struct rx_nfa * rx, struct rx_superset * set) { if (set) ++set->refs; return set; } /* (c rx_release_superset) * void rx_release_superset (struct rx_superset *set); * * Decrement the reference count on a superset. If it becomes 0, * then free storage used by the set. */ static void rx_release_superset (struct rx_superset *set) { if (set && !--set->refs) { if (set->nfa_state) set->nfa_state->superstate_set = 0; rx_release_superset (set->cdr); hashtree_delete (&set->hash_item, &rx_default_cache->superset_hashtree_rules); rx_dfa_cache_free ((char *)set); --rx_default_cache->supersets; } } /* This adds an element to a superstate set. These sets are lists, such * that lists with == elements are ==. * * * on entry: * CDR has at least one reference which is taken over by this * function (becomes the reference of the set returned to its cdr) * * on exit: * set returned has one reference which is for the caller. */ static struct rx_superset * rx_superset_cons (struct rx_nfa * rx, struct rx_nfa_state *car, struct rx_superset *cdr) { struct rx_cache * cache = rx_default_cache; if (!car && !cdr) return 0; { struct rx_superset template; struct hashtree_item * hit; struct rx_superset * answer; template.car = car; template.cdr = cdr; template.id = rx->rx_id; rx_dfa_cache_prepare (4 * sizeof (struct hashtree *) + sizeof (struct rx_superset)); hit = hashtree_store (&cache->superset_table, (unsigned long)car ^ car->id ^ (unsigned long)cdr, (void *)&template, &cache->superset_hashtree_rules); if (!hit) return 0; answer = (struct rx_superset *)hit->key; rx_protect_superset (rx, answer); if (answer->refs != 1) rx_release_superset (cdr); return answer; } } #define rx_abs(A) (((A) > 0) ? (A) : -(A)) /* * static int superset_allocator (int * errn, * struct hashtree_item ** retv, * void * val, * struct hashtree_rules * rules); * * Hash tree allocation function for supersets. * * on entry: * CDR of `val' at least one reference which is taken over by this * function (becomes the reference of the set returned to its cdr) * * on exit: * Set returned has a reference count of 0. */ static struct hashtree_item * superset_allocator (void * val, struct hashtree_rules * rules) { struct rx_cache * cache; struct rx_superset * template; struct rx_superset * newset; cache = ((struct rx_cache *) ((char *)rules - (unsigned long)(&((struct rx_cache *)0)->superset_hashtree_rules))); template = (struct rx_superset *)val; newset = ((struct rx_superset *) rx_dfa_cache_soft_malloc (sizeof (*template))); if (!newset) return 0; ++cache->supersets; { long cdrfinal; long cdredges; cdrfinal = (template->cdr ? template->cdr->state_label : 0); cdredges = (template->cdr ? template->cdr->has_cset_edges : 0); if (!template->car->state_label) newset->state_label = cdrfinal; else if (rx_abs (template->car->state_label) < rx_abs (cdrfinal)) newset->state_label = template->car->state_label; else if (template->car->state_label > 0) newset->state_label = template->car->state_label; else newset->state_label = cdrfinal; newset->has_cset_edges = (template->car->has_cset_edges || cdredges); } newset->refs = 0; newset->id = template->id; newset->car = template->car; newset->cdr = template->cdr; newset->superstate[0] = 0; newset->superstate[1] = 0; newset->nfa_state = 0; newset->hash_item.key = (void *)newset; newset->hash_item.binding = 0; return &newset->hash_item; } /* This computes a union of two NFA state sets. The sets do not have the * same representation though. One is a RX_SUPERSET structure (part * of the superstate NFA) and the other is an NFA_STATE_SET (part of the NFA). * * On exit, `set' has at least one reference which is for the caller. */ static struct rx_superset * rx_superstate_eclosure_union (struct rx_nfa * rx, struct rx_superset *set, struct rx_nfa_state_set *ecl) { if (!ecl) { rx_protect_superset (rx, set); return set; } if (!set) return rx_superset_cons (rx, ecl->car, rx_superstate_eclosure_union (rx, 0, ecl->cdr)); if (set->car == ecl->car) return rx_superstate_eclosure_union (rx, set, ecl->cdr); { struct rx_superset * tail; struct rx_nfa_state * first; if (set->car->id < ecl->car->id) { tail = rx_superstate_eclosure_union (rx, set->cdr, ecl); if (!tail) return 0; first = set->car; } else { tail = rx_superstate_eclosure_union (rx, set, ecl->cdr); if (!tail) return 0; first = ecl->car; } { struct rx_superset * answer; answer = rx_superset_cons (rx, first, tail); if (!answer) { rx_release_superset (tail); return 0; } return answer; } } } static int supersetcmp (void * va, void * vb, struct hashtree_rules * rules) { struct rx_superset * a = (struct rx_superset *)va; struct rx_superset * b = (struct rx_superset *)vb; a = (struct rx_superset *)va; b = (struct rx_superset *)vb; return ( (a == b) || ( a && b && (a->id == b->id) && (a->car == b->car) && (a->cdr == b->cdr))); } static struct hashtree * super_hash_allocator (struct hashtree_rules * rules) { struct rx_cache * cache; struct hashtree * it; cache = ((struct rx_cache *) ((char *)rules - (unsigned long)(&((struct rx_cache *)0)->superset_hashtree_rules))); it = ((struct hashtree *) rx_dfa_cache_soft_malloc (sizeof (struct hashtree))); if (!it) return 0; ++cache->hash_tables; return it; } static void super_hash_liberator (struct hashtree * hash, struct hashtree_rules * rules) { rx_dfa_cache_free ((char *)hash); --rx_default_cache->hash_tables; } static void superset_hash_item_liberator (struct hashtree_item * it, struct hashtree_rules * rules) { } /************************************************************************ * The Default DFA State Cache * * * */ static struct rx_cache default_cache = { { supersetcmp, super_hash_allocator, super_hash_liberator, superset_allocator, superset_hash_item_liberator, }, 0, /* lru_superstate */ 0, /* semifree_superstate */ 0, /* hash_tables */ 0, /* super_edges */ 0, /* supersets */ 0, /* superstates */ 0, /* semifree_superstates */ 0, /* hits */ 0, /* misses */ 0, /* total hits */ 0, /* total misses */ { /* hash table */ 0, 0, 0, {0} } }; static struct rx_cache * rx_default_cache = &default_cache; /************************************************************************ * Making DFA States Semifree and Restoring Them to Live State * */ /* static void install_cache_miss_transition (struct rx_super_edge * e); * * Install the instruction `answer' in the transition table of `super' * for all instructions built for `e'. */ static void install_cache_miss_transition (struct rx_super_edge * e) { struct rx_inx * transitions; transitions = e->inx_list; while (transitions) { transitions->inx = (void *)rx_cache_miss; transitions->data = 0; transitions->data_2 = (void *)e; transitions = transitions->next_same_edge; } e->inx_list = 0; } /* static void semifree_superstate (); * * Select the most recently used live superstate that is not locked and * make it semifree. * * This function makes all incoming instruction frames cache miss * instructions. It moves the state from the `lru_superstate' queue * of the cache to the `semifree_superstate' queue. */ static void semifree_superstate () { struct rx_cache * cache = rx_default_cache; int disqualified; disqualified = cache->semifree_superstates; if (disqualified == cache->superstates) return; while (cache->lru_superstate->locks) { cache->lru_superstate = cache->lru_superstate->next_recyclable; ++disqualified; if (disqualified == cache->superstates) return; } { struct rx_superstate * it; it = cache->lru_superstate; it->next_recyclable->prev_recyclable = it->prev_recyclable; it->prev_recyclable->next_recyclable = it->next_recyclable; cache->lru_superstate = (it == it->next_recyclable ? 0 : it->next_recyclable); if (!cache->semifree_superstate) { cache->semifree_superstate = it; it->next_recyclable = it; it->prev_recyclable = it; } else { it->prev_recyclable = cache->semifree_superstate->prev_recyclable; it->next_recyclable = cache->semifree_superstate; it->prev_recyclable->next_recyclable = it; it->next_recyclable->prev_recyclable = it; } { struct rx_super_edge *e; it->is_semifree = 1; ++cache->semifree_superstates; e = it->incoming_edges; if (e) { e->prev_same_dest->next_same_dest = 0; while (e) { install_cache_miss_transition (e); e = e->next_same_dest; } e = it->incoming_edges; e->prev_same_dest->next_same_dest = e; } } } } /* static void refresh_semifree_superstate (struct rx_superstate * super); * * Make `super', which may or may not be in a semifree state, a live * superstate. * * This moves the state to the back of the `lru_superstate' queue. */ static void refresh_semifree_superstate (struct rx_superstate * super) { struct rx_cache * cache = rx_default_cache; if (cache->semifree_superstate == super) cache->semifree_superstate = (super->prev_recyclable == super ? 0 : super->prev_recyclable); else if (cache->lru_superstate == super) cache->lru_superstate = (super->prev_recyclable == super ? 0 : super->prev_recyclable); super->next_recyclable->prev_recyclable = super->prev_recyclable; super->prev_recyclable->next_recyclable = super->next_recyclable; if (!cache->lru_superstate) (cache->lru_superstate = super->next_recyclable = super->prev_recyclable = super); else { super->next_recyclable = cache->lru_superstate; super->prev_recyclable = cache->lru_superstate->prev_recyclable; super->next_recyclable->prev_recyclable = super; super->prev_recyclable->next_recyclable = super; } if (super->is_semifree) { super->is_semifree = 0; --cache->semifree_superstates; } } /* void rx_refresh_this_superstate (struct rx_superstate * superstate); * * If this state is semifree, pass it to `refresh_semifree_superstate'. * Otherwise, move this state to the rear of the `lru_superstate' queue. */ static void rx_refresh_this_superstate (struct rx_superstate * superstate) { struct rx_cache * cache = rx_default_cache; if (superstate->is_semifree) refresh_semifree_superstate (superstate); else if (cache->lru_superstate == superstate) cache->lru_superstate = superstate->next_recyclable; else if (superstate != cache->lru_superstate->prev_recyclable) { superstate->next_recyclable->prev_recyclable = superstate->prev_recyclable; superstate->prev_recyclable->next_recyclable = superstate->next_recyclable; superstate->next_recyclable = cache->lru_superstate; superstate->prev_recyclable = cache->lru_superstate->prev_recyclable; superstate->next_recyclable->prev_recyclable = superstate; superstate->prev_recyclable->next_recyclable = superstate; } } /************************************************************************ * Really Freeing DFA States * * After becoming semifree, a DFA state may eventually be freed for * real -- meaning that the memory it occupies is recycled. * */ /* This tries to add a new superstate to the superstate freelist. * It might, as a result, free some edge pieces or hash tables. * If nothing can be freed because too many locks are being held, fail. */ /* int rx__really_free_superstate (); * * Attempt to reduce memory usage of the DFA state cache by truly * freeing one superstate. Return -1 if no state could be freed, 0 * otherwise. */ int rx__really_free_superstate (void) { struct rx_cache * cache = rx_default_cache; struct rx_superstate * it; if (!cache->superstates) return -1; /* If the rate of cache misses is high, we semifree superstates at a * rate proportional to our need to truly free states, but greater. * That way the total amount of work done freeing states remains * proportional to the work needed, but a spike in demand for memory * will cause a larger spike in the amount of effort put into * rescuing the most desirable states in the cache. * * For example, as this is written, when the cache miss rate is * high, states are semifreed at a rate 3x the rate at which they * are truly freed. If, after a period of running mostly out of the * cache, we suddenly have to free 1/3 of the states in the cache to * make room for new states, the remaining 2/3 of the old states * will all have been marked semifree and thus the most useful of * those states will have a high probability of being rescued even * if the demand for memory continues. They will have a fighting * chance against those new states which were needed once but which * aren't otherwise very useful. * * We semifree states at this accelerated rate when the cache miss * rate is high because in that case, we expect the cache miss rate * to remain high, and so we expect the high demand on memory to * continue. * * When the cache miss rate is low, we look at the number of * semifree states compared to the total number of states. If that * ratio is low (there aren't many semifree states), then we again * semifree states at an accelerated rate. If that ratio is high * (there are quite a few semifree states), then we only semifree * one state for every state truly freed. The idea is that a low * cache miss rate predicts a low demand on memory. When demand on * memory is low, we want to maintain a constant sized queue of * semifree states which is a fraction of the total number of * states. The existence of that queue helps us from throwing away * useful DFA states while demand on memory is low while the fixed * size of that queue means that the overhead of maintaining it is a * small constant multiple of the time spent truly freeing states. */ if ( (cache->misses < cache->hits) || (3 * cache->semifree_superstates >= cache->superstates)) semifree_superstate (cache); else { semifree_superstate (cache); semifree_superstate (cache); semifree_superstate (cache); } /* At this point, if no states are semifree, then all states are * locked and no states can be freed. */ if (!cache->semifree_superstate) return -1; /* Remove the oldest semifree state from the queue of all semifree * states. Correct the counters that count DFA states. */ { it = cache->semifree_superstate; it->next_recyclable->prev_recyclable = it->prev_recyclable; it->prev_recyclable->next_recyclable = it->next_recyclable; cache->semifree_superstate = ((it == it->next_recyclable) ? 0 : it->next_recyclable); --cache->semifree_superstates; --cache->superstates; } /* Unlink the queue of incoming edges and clear the `future' field * of those edges which otherwise points to this state. */ if (it->incoming_edges) { struct rx_super_edge * e; it->incoming_edges->prev_same_dest->next_same_dest = 0; e = it->incoming_edges; while (e) { struct rx_super_edge * et; et = e; e = e->next_same_dest; et->prev_same_dest = et->next_same_dest = 0; et->future = 0; } } /* Free all outgoing edges and remove them from the `incoming_edges' * queue of their destination states. */ { struct rx_super_edge *tc; tc = it->outgoing_edges; while (tc) { struct rx_super_edge *tct; tct = tc; tc = tc->next_same_present; if (tct->future) { if (tct->future->incoming_edges == tct) { tct->future->incoming_edges = tct->next_same_dest; if (tct->future->incoming_edges == tct) tct->future->incoming_edges = 0; } tct->next_same_dest->prev_same_dest = tct->prev_same_dest; tct->prev_same_dest->next_same_dest = tct->next_same_dest; } bits_free (tct->cset); rx_dfa_cache_free ((char *)tct); --cache->super_edges; } } #ifdef RX_LARGE_TABLES { /* free second level transition tables */ if (it->storage_unit_size == 2) { int x; for (x = 0; x < 256; ++x) { if ( (((struct rx_inx **)it->transitions)[x] != rx_shared_cache_miss_page) && (((struct rx_inx **)it->transitions)[x] != rx_shared_backtrack_page) && (((struct rx_inx **)it->transitions)[x] != rx_huge_char_page)) rx_dfa_cache_free ((void *)((struct rx_inx **)it->transitions)[x]); } } } #else { /* free second level transition tables */ if (it->storage_unit_size == 2) { int x; for (x = 0; x < 256; ++x) { if ( (((struct rx_inx ***)it->transitions)[x] != rx_default_small_table_page2) && (((struct rx_inx ***)it->transitions)[x] != rx_small_table_backtrack_page2) && (((struct rx_inx ***)it->transitions)[x] != rx_huge_char_page2)) { int y; struct rx_inx ** page2; page2 = ((struct rx_inx ***)it->transitions)[x]; for (y = 0; y < rx_page2_size; ++y) { if (page2[y] != rx_shared_cache_miss_page) { rx_dfa_cache_free ((void *)page2[y]); } } rx_dfa_cache_free ((void *)page2); } } } } #endif if (it->huge_char_transitions != rx_default_huge_char_transitions) { int x; #ifdef RX_LARGE_TABLES for (x = 0; x < rx_page1_size21; ++x) { struct rx_inx ** sub; sub = it->huge_char_transitions[x]; if (sub != rx_huge_char_second_level_page) { int z; for (z = 0; z < rx_page2_size21; ++z) { struct rx_inx * leaf; leaf = sub[z]; if (leaf != rx_shared_cache_miss_page) rx_dfa_cache_free ((void *)leaf); } rx_dfa_cache_free ((void *)sub); } } #else for (x = 0; x < rx_page1_size21; ++x) { struct rx_inx *** sub; sub = it->huge_char_transitions[x]; if (sub != rx_huge_char_second_level_page) { int z; for (z = 0; z < rx_page2_size21; ++z) { struct rx_inx ** subsub; subsub = sub[z]; if (subsub != rx_huge_char_third_level_page) { int zz; for (zz = 0; zz < rx_page3_size21; ++zz) { struct rx_inx * leaf; leaf = subsub[zz]; if (leaf != rx_shared_cache_miss_page) rx_dfa_cache_free ((void *)leaf); } rx_dfa_cache_free ((void *)subsub); } } rx_dfa_cache_free ((void *)sub); } } #endif rx_dfa_cache_free ((void *)it->huge_char_transitions); } /* Clear the pointer to this state in the NFA set of this state. */ if (it->members->superstate[0] == it) it->members->superstate[0] = 0; if (it->members->superstate[1] == it) it->members->superstate[1] = 0; /* Release the NFA set. */ rx_release_superset (it->members); /* Free the memory of this DFA state. */ rx_dfa_cache_free ((char *)it); return 0; } /************************************************************************ *(h1 "Building DFA States") * * * */ /* struct rx_superstate * rx_superstate (struct rx_nfa *rx, * struct rx_superset *set, * int storage_unit_size); * * Retrieve a DFA state from the cache or construct a new state for a * give NFA state set. * * This may cause old states to be flushed from the DFA state cache. */ static struct rx_superstate * rx_superstate (struct rx_nfa *rx, struct rx_superset *set, int storage_unit_size) { struct rx_cache * cache; struct rx_superstate * superstate; int has_huge_table; has_huge_table = 0; if (rx->local_cset_size == 256) has_huge_table = 0; else if (rx->local_cset_size == (1 << 21)) has_huge_table = 1; else panic ("odd sized cset in rx_superstate"); cache = rx_default_cache; superstate = 0; /* Does the superstate already exist in the cache? */ if (set->superstate[storage_unit_size - 1]) { ++cache->hits; ++cache->total_hits; while ((cache->hits + cache->misses) > 256) { cache->hits >>= 1; cache->misses >>= 1; } superstate = set->superstate[storage_unit_size - 1]; rx_refresh_this_superstate (superstate); return superstate; } /* This point reached only for cache misses. */ ++cache->misses; ++cache->total_misses; while ((cache->hits + cache->misses) > 256) { cache->hits >>= 1; cache->misses >>= 1; } if (!has_huge_table) { int superstate_size; superstate_size = (sizeof (*superstate) + (sizeof (struct rx_inx) * 256)); superstate = ((struct rx_superstate *) rx_dfa_cache_malloc (superstate_size)); if (!superstate) return 0; superstate->storage_unit_size = storage_unit_size; superstate->has_huge_table = 0; mem_set0 ((void *)&superstate->transitions, sizeof (rx_shared_cache_miss_page)); /* mem_move ((void *)&superstate->transitions, (void *)rx_shared_cache_miss_page, sizeof (rx_shared_cache_miss_page)); */ } else { int x; int superstate_size; superstate_size = 0; if (storage_unit_size == 2) superstate_size = (sizeof (*superstate) + (sizeof (struct rx_inx *) * 256)); else if (storage_unit_size == 1) superstate_size = (sizeof (*superstate) + (sizeof (struct rx_inx) * 256)); else panic ("odd storage unit size in rx_superstate"); superstate = ((struct rx_superstate *) rx_dfa_cache_malloc (superstate_size)); if (!superstate) return 0; superstate->storage_unit_size = storage_unit_size; superstate->has_huge_table = 1; if (storage_unit_size == 2) { #ifdef RX_LARGE_TABLES { for (x = 0; x < 0xd8; ++x) ((struct rx_inx **)superstate->transitions)[x] = rx_shared_cache_miss_page; for (x = 0xd8; x < 0xdc; ++x) ((struct rx_inx **)superstate->transitions)[x] = rx_huge_char_page; for (x = 0xdc; x < 0xe0; ++x) ((struct rx_inx **)superstate->transitions)[x] = rx_shared_backtrack_page; for (x = 0xe0; x < 256; ++x) ((struct rx_inx **)superstate->transitions)[x] = rx_shared_cache_miss_page; } #else { for (x = 0; x < 0xd8; ++x) ((struct rx_inx ***)superstate->transitions)[x] = rx_default_small_table_page2; for (x = 0xd8; x < 0xdc; ++x) ((struct rx_inx ***)superstate->transitions)[x] = rx_huge_char_page2; for (x = 0xdc; x < 0xe0; ++x) ((struct rx_inx ***)superstate->transitions)[x] = rx_small_table_backtrack_page2; for (x = 0xe0; x < 256; ++x) ((struct rx_inx ***)superstate->transitions)[x] = rx_default_small_table_page2; } #endif } else if (storage_unit_size == 1) { mem_move ((void *)&superstate->transitions, (void *)rx_shared_cache_miss_page, 128 * sizeof (struct rx_inx)); /* no valid multi-byte encodings begin with 80..c1 */ for (x = 0x80; x < 0xc2; ++x) { ((struct rx_inx *)&superstate->transitions)[x].data = (void *)0; ((struct rx_inx *)&superstate->transitions)[x].data_2 = (void *)0; ((struct rx_inx *)&superstate->transitions)[x].inx = (void *)rx_bogus_utf8; ((struct rx_inx *)&superstate->transitions)[x].next_same_edge = (struct rx_inx *)0; } /* valid 2 byte encodings begin with c2..df */ for (x = 0xc2; x < 0xe0; ++x) { ((struct rx_inx *)&superstate->transitions)[x].data = (void *)0; ((struct rx_inx *)&superstate->transitions)[x].data_2 = (void *)0; ((struct rx_inx *)&superstate->transitions)[x].inx = (void *)rx_2byte_utf8; ((struct rx_inx *)&superstate->transitions)[x].next_same_edge = (struct rx_inx *)0; } /* valid 3 byte encodings begin with e0..ef */ for (x = 0xe0; x < 0xf0; ++x) { ((struct rx_inx *)&superstate->transitions)[x].data = (void *)0; ((struct rx_inx *)&superstate->transitions)[x].data_2 = (void *)0; ((struct rx_inx *)&superstate->transitions)[x].inx = (void *)rx_3byte_utf8; ((struct rx_inx *)&superstate->transitions)[x].next_same_edge = (struct rx_inx *)0; } /* valid 4 byte encodings begin with f0..f4 */ for (x = 0xf0; x < 0xf5; ++x) { ((struct rx_inx *)&superstate->transitions)[x].data = (void *)0; ((struct rx_inx *)&superstate->transitions)[x].data_2 = (void *)0; ((struct rx_inx *)&superstate->transitions)[x].inx = (void *)rx_4byte_utf8; ((struct rx_inx *)&superstate->transitions)[x].next_same_edge = (struct rx_inx *)0; } /* no valid multi-byte encodings begin with f5..ff */ for (x = 0xf5; x <= 0xff; ++x) { ((struct rx_inx *)&superstate->transitions)[x].data = (void *)0; ((struct rx_inx *)&superstate->transitions)[x].data_2 = (void *)0; ((struct rx_inx *)&superstate->transitions)[x].inx = (void *)rx_bogus_utf8; ((struct rx_inx *)&superstate->transitions)[x].next_same_edge = (struct rx_inx *)0; } } else panic ("odd storage unit size in rx_superstate"); } superstate->huge_char_transitions = rx_default_huge_char_transitions; ++cache->superstates; superstate->seq = rx_superstate_counter++; superstate->table_id = -1; if (!cache->lru_superstate) (cache->lru_superstate = superstate->next_recyclable = superstate->prev_recyclable = superstate); else { superstate->next_recyclable = cache->lru_superstate; superstate->prev_recyclable = cache->lru_superstate->prev_recyclable; ( superstate->prev_recyclable->next_recyclable = superstate->next_recyclable->prev_recyclable = superstate); } superstate->outgoing_edges = 0; superstate->incoming_edges = 0; superstate->members = set; set->superstate[storage_unit_size - 1] = superstate; rx_protect_superset (rx, set); superstate->is_semifree = 0; superstate->rx_id = rx->rx_id; superstate->locks = 0; return superstate; } /*(c rx_nfa_state_to_superstate) * struct rx_superstate * * rx_nfa_state_to_superstate (struct rx_nfa * rx, * struct rx_nfa_state * nfa_state, * int storage_unit_size); * * Construct the DFA state whose NFA state set is the epsilon closure * of `nfa_state' in the NFA `rx'. Return that superstate, with no * new locks applied to it. */ struct rx_superstate * rx_nfa_state_to_superstate (struct rx_nfa * rx, struct rx_nfa_state * nfa_state, int storage_unit_size) { struct rx_nfa_state_set * epsilon_closure; struct rx_superset * contents; struct rx_superstate * answer; /* Compute the superstate set for this NFA state and * aquire a reference count for it. * * Ensure that a reference to this set is cached in * the NFA state. */ if (nfa_state->superstate_set) { contents = nfa_state->superstate_set; rx_protect_superset (rx, contents); } else { epsilon_closure = rx_state_closure (rx, nfa_state); if (!epsilon_closure) return 0; contents = rx_superstate_eclosure_union (rx, 0, epsilon_closure); if (!contents) return 0; /* rx_superstate_eclosure_union gives us a reference count */ nfa_state->superstate_set = contents; contents->nfa_state = nfa_state; } /* Aquire a superstate for this superstate_set and drop * the reference count on the set. */ if ( contents->superstate[storage_unit_size - 1] && (contents->superstate[storage_unit_size - 1]->rx_id == rx->rx_id)) { answer = contents->superstate[storage_unit_size - 1]; /* Treat this as a cache hit that contributes longevity * to the cache entry and that turns a semifree state * into a live state: */ rx_refresh_this_superstate (answer); rx_release_superset (contents); return answer; } else { answer = rx_superstate (rx, contents, storage_unit_size); rx_release_superset (contents); return answer; /* might be 0 */ } } /* void rx_clear_superstate_table_ids (struct rx_nfa * nfa); * * SHOULD BE VOID? */ void rx_clear_superstate_table_ids (struct rx_nfa * nfa) { struct rx_superstate * qs[2]; int x; qs[0] = rx_default_cache->semifree_superstate; qs[1] = rx_default_cache->lru_superstate; for (x = 0; x < 2; ++x) { struct rx_superstate * q; struct rx_superstate * it; q = qs[x]; it = q; if (q) do { it->table_id = -1; it = it->next_recyclable; } while (it != q); } } /************************************************************************ * Low Level Support for Handling Cache Misses in the Dfa State Cache * * */ /*(c solve_destination) * static void solve_destination (struct rx_nfa * rx, * struct rx_inx * inx_out, * struct rx_super_edge * e, * int storage_unit_size); * * Compute the destination state for DFA edge `e'. * * As a side effect, set the `future' field of `e'. * * Return an `rx_next_char' instruction frame in `inx_out'. The * `data' field of the instruction will point to the destination * state. This instruction can be copied into transition table * entries for edge `e'. */ static int solve_destination (struct rx_nfa * rx, struct rx_inx * inx_out, struct rx_super_edge * e, int storage_unit_size) { struct rx_superset * nfa_state; struct rx_superset * solution; struct rx_superstate *dest; if (e->is_backtrack) { inx_out->inx = (void *) rx_backtrack; inx_out->data = 0; inx_out->data_2 = 0; return 0; } solution = 0; /* Iterate over all NFA states in the state set of this superstate. */ for (nfa_state = e->present->members; nfa_state; nfa_state = nfa_state->cdr) { struct rx_nfa_edge * ne; /* Iterate over all edges of each NFA state. */ for (ne = nfa_state->car->edges; ne; ne = ne->next) /* If we find an edge that is labeled with * the characters we are solving for..... */ if ((ne->type == ne_cset) && bits_is_subset (ne->cset, e->cset)) { struct rx_nfa_state * n; struct rx_superset * old_sol; n = ne->dest; old_sol = solution; { struct rx_nfa_state_set * set; set = rx_state_closure (rx, n); if (!set) { rx_release_superset (old_sol); return -1; } solution = rx_superstate_eclosure_union (rx, solution, set); if (!solution) { rx_release_superset (old_sol); return -1; } } rx_release_superset (old_sol); } } if (solution == 0) { e->is_backtrack = 1; inx_out->inx = (void *) rx_backtrack; inx_out->data = 0; inx_out->data_2 = 0; return 0; } dest = rx_superstate (rx, solution, storage_unit_size); rx_release_superset (solution); if (!dest) return -1; e->future = dest; if (!dest->incoming_edges) { dest->incoming_edges = e; e->next_same_dest = e->prev_same_dest = e; } else { e->next_same_dest = dest->incoming_edges; e->prev_same_dest = dest->incoming_edges->prev_same_dest; e->next_same_dest->prev_same_dest = e; e->prev_same_dest->next_same_dest = e; } inx_out->data = (void *)&dest->transitions; inx_out->data_2 = (void *) dest->members->state_label; inx_out->inx = (void *) rx_next_char; return 0; } /* static int compute_super_edge_cset (struct rx_nfa *rx, * bits csetout, * struct rx_superstate * superstate, * t_uchar chr); * * For DFA state `superstate' and character `chr', compute a character * set which is the label of the DFA edge defining transitions out of * `superstate' on input character `chr'. * * This character set can then be used to compute the NFA state set of * the destination state of the transition. See `solve_destination'. * * 0 == backtrack * n > 0 == n_nfa_edges * n < 0 == ESPACE */ static int compute_super_edge_cset (struct rx_nfa *rx, bits csetout, struct rx_superstate * superstate, unsigned int chr) { int n_nfa_edges; struct rx_superset * stateset; stateset = superstate->members; if (bits_fill (csetout)) return -1; n_nfa_edges = 0; while (stateset) { struct rx_nfa_edge *e; for (e = stateset->car->edges; e; e = e->next) if (e->type == ne_cset) { if (!bits_is_member (e->cset, chr)) { if (bits_difference (csetout, e->cset)) return -1; } else { if (bits_intersection (csetout, e->cset)) return -1; } ++n_nfa_edges; } stateset = stateset->cdr; } return n_nfa_edges; } /* static struct rx_super_edge * rx_super_edge (struct rx_nfa *rx, struct rx_superstate *super, bits cset); * * Construct a new DFA edge, originating in state `super', and * defining transitions for characters in `cset'. */ static struct rx_super_edge * rx_super_edge (struct rx_nfa *rx, struct rx_superstate *super, bits cset) { struct rx_super_edge *tc; tc = ((struct rx_super_edge *) rx_dfa_cache_malloc (sizeof (struct rx_super_edge))); if (!tc) return 0; mem_set0 ((void *)tc, sizeof (struct rx_super_edge)); ++rx_default_cache->super_edges; tc->next_same_present = super->outgoing_edges; super->outgoing_edges = tc; tc->cset = cset; tc->present = super; tc->inx_list = 0; tc->is_backtrack = 0; return tc; } /* static void install_partial_transition (struct rx_superstate *super, * struct rx_inx *answer, * struct rx_super_edge * edge, * bitset_subset set, * int offset); * * Fill in entries in the transition table of `super'. * * Entry `N' is filled if `N' is in the range: * * offset .. offset + bits_per_subset * * and: * * set & (1 << (N - offset)) * * is not 0. * * Filled entries are filled with a copy of `*answer'. * * This function is useful when handling a cache miss. It is * expensive to fill in the entire transition table and often, only a * few entries in a narrow range (such as lower case letters) will * every be needed. When a missing entry is discovered, we fill in * only a narrow region of the table around the missing entry. */ static int install_partial_transition (struct rx_superstate *super, struct rx_inx *answer, struct rx_super_edge * edge, bitset_subset set, int chr) { int x; bitset_subset pos; struct rx_inx * inxs; if (!super->has_huge_table || ((super->storage_unit_size == 1) && (chr < 0x80))) inxs = rx_subset_transitions8 (super->transitions, chr); else { if ((super->storage_unit_size == 1) || (chr > 0xffff)) { #ifdef RX_LARGE_TABLES { struct rx_inx ** page2_21; struct rx_inx * page3_21; if (super->huge_char_transitions == rx_default_huge_char_transitions) { struct rx_inx *** ht; ht = (struct rx_inx ***)rx_dfa_cache_malloc (rx_page1_size21 * sizeof (struct rx_inx **)); if (!ht) return -1; super->huge_char_transitions = ht; mem_move ((t_uchar *)super->huge_char_transitions, (t_uchar *)rx_default_huge_char_transitions, sizeof (rx_default_huge_char_transitions)); } page2_21 = rx_page2_21 (super->huge_char_transitions, chr); if (page2_21 == rx_huge_char_second_level_page) { page2_21 = (struct rx_inx **)rx_dfa_cache_malloc (rx_page2_size21 * sizeof (struct rx_inx *)); if (!page2_21) return -1; mem_move ((t_uchar *)page2_21, (t_uchar *)rx_huge_char_second_level_page, rx_page2_size21 * sizeof (struct rx_inx *)); rx_page2_21 (super->huge_char_transitions, chr) = page2_21; } page3_21 = rx_page3_21 (super->huge_char_transitions, chr); if (page3_21 == rx_shared_cache_miss_page) { page3_21 = (struct rx_inx *)rx_dfa_cache_malloc (256 * sizeof (struct rx_inx)); if (!page3_21) return -1; mem_move ((t_uchar *)page3_21, (t_uchar *)rx_shared_cache_miss_page, 256 * sizeof (struct rx_inx)); rx_page3_21(super->huge_char_transitions, chr) = page3_21; } } #else { struct rx_inx *** page2_21; struct rx_inx ** page3_21; struct rx_inx * page4_21; if (super->huge_char_transitions == rx_default_huge_char_transitions) { struct rx_inx **** ht; ht = (struct rx_inx ****)rx_dfa_cache_malloc (rx_page1_size21 * sizeof (struct rx_inx ***)); if (!ht) return -1; super->huge_char_transitions = ht; mem_move ((t_uchar *)super->huge_char_transitions, (t_uchar *)rx_default_huge_char_transitions, sizeof (rx_default_huge_char_transitions)); } page2_21 = rx_page2_21 (super->huge_char_transitions, chr); if (page2_21 == rx_huge_char_second_level_page) { page2_21 = (struct rx_inx ***)rx_dfa_cache_malloc (rx_page2_size21 * sizeof (struct rx_inx **)); if (!page2_21) return -1; mem_move ((t_uchar *)page2_21, (t_uchar *)rx_huge_char_second_level_page, rx_page2_size21 * sizeof (struct rx_inx **)); rx_page2_21 (super->huge_char_transitions, chr) = page2_21; } page3_21 = rx_page3_21 (super->huge_char_transitions, chr); if (page3_21 == rx_huge_char_third_level_page) { page3_21 = (struct rx_inx **)rx_dfa_cache_malloc (rx_page3_size21 * sizeof (struct rx_inx *)); if (!page3_21) return -1; mem_move ((t_uchar *)page3_21, (t_uchar *)rx_huge_char_third_level_page, rx_page3_size21 * sizeof (struct rx_inx *)); rx_page3_21(super->huge_char_transitions, chr) = page3_21; } page4_21 = rx_page4_21 (super->huge_char_transitions, chr); if (page4_21 == rx_shared_cache_miss_page) { page4_21 = (struct rx_inx *)rx_dfa_cache_malloc (rx_page4_size21 * sizeof (struct rx_inx)); if (!page4_21) return -1; mem_move ((t_uchar *)page4_21, (t_uchar *)rx_shared_cache_miss_page, rx_page4_size21 * sizeof (struct rx_inx)); rx_page4_21 (super->huge_char_transitions, chr) = page4_21; } } #endif inxs = rx_subset_transition21 (super->huge_char_transitions, chr); } else { /* (storage_unit_size == 2) && (chr > 0xffff) */ #ifdef RX_LARGE_TABLES { struct rx_inx * page2_16; page2_16 = rx_page2_16 (super->transitions, chr); if (page2_16 == rx_shared_cache_miss_page) { page2_16 = (struct rx_inx *)rx_dfa_cache_malloc (256 * sizeof (struct rx_inx)); if (!page2_16) return -1; mem_move ((t_uchar *)page2_16, (t_uchar *)rx_shared_cache_miss_page, 256 * sizeof (struct rx_inx)); rx_page2_16(super->transitions, chr) = page2_16; } inxs = rx_subset_transitions16 (super->transitions, chr); } #else { struct rx_inx ** page2_16; struct rx_inx * page3_16; page2_16 = rx_page2_16 (super->transitions, chr); if (page2_16 == rx_default_small_table_page2) { page2_16 = (struct rx_inx **)rx_dfa_cache_malloc (rx_page2_size * sizeof (struct rx_inx *)); if (!page2_16) return -1; mem_move ((t_uchar *)page2_16, (t_uchar *)rx_default_small_table_page2, rx_page2_size * sizeof (struct rx_inx *)); rx_page2_16(super->transitions, chr) = page2_16; } page3_16 = rx_page3_16 (super->transitions, chr); if (page3_16 == rx_shared_cache_miss_page) { page3_16 = (struct rx_inx *)rx_dfa_cache_malloc (rx_page3_size * sizeof (struct rx_inx)); if (!page3_16) return -1; mem_move ((t_uchar *)page3_16, (t_uchar *)rx_shared_cache_miss_page, rx_page3_size * sizeof (struct rx_inx)); rx_page3_16(super->transitions, chr) = page3_16; } inxs = rx_subset_transitions16 (super->transitions, chr); } #endif } } for (x = 0, pos = 1; x < bits_per_subset; ++x, pos <<= 1) { if (set & pos) { inxs[x] = *answer; inxs[x].next_same_edge = edge->inx_list; edge->inx_list = &inxs[x]; } } return 0; } /************************************************************************ *(h1 "DFA State Transition Cache Misses") * * */ /*(c rx_handle_cache_miss) * struct rx_inx * rx_handle_cache_miss (struct rx_nfa * rx, * struct rx_superstate * super, * t_uchar chr, * void * data_2); * * Recover from an `rx_cache_miss' instruction. * * `rx' and `super' are the NFA and superstate. `chr' is the input * character for which the transition table of `super' contains * an `rx_cache_miss' instruction. * * `data_2' is the `data_2' field of the `rx_cache_miss' instruction * that caused us to call `rx_handle_cache_miss'. * * We return a pointer to another instruction (perhaps the corrected * transition table entry) which replaces the cache miss instruction. * The caller of this function can continue by re-dispatching on the * new instruction (which is permitted to be another cache miss * instruction). */ struct rx_inx * rx_handle_cache_miss (struct rx_nfa * rx, struct rx_superstate * super, unsigned int chr, void * data_2) { struct rx_super_edge * e; /* There are three kinds of cache miss. * * The first occurs when a transition is taken that has never been * computed during the lifetime of the source superstate. In this * case, no DFA edge exists for this transition. The cache miss is * handled by calling `compute_super_edge_cset' and building a new * DFA edge. If `compute_super_edge_cset' tells us that no * transition is defined, we fill in the transition table with * `rx_backtrack' instructions and return one of those. * * The second kind of cache miss occurs when we have a DFA edge * (pointed to by `data_2') but the destination superstate of that * edge isn't known. `solve_destination' is used to construct the * destination superstate or find it in the DFA cache. We return a * `rx_next_char' instruction. * * Finally, the third kind of cache miss occurs when the destination * superstate of a transition is known but is or was in a `semi-free * state'. That case is handled by `refresh_semifree_superstate'. * We return an `rx_next_char' instruction. * */ /* If the `rx_cache_miss' instruction contained a pointer to an * existing DFA edge, that pointer was passed to us as `data_2'. */ e = data_2; retry: if (!e) { /* A missing DFA edge. Look for it in the cache. */ for (e = super->outgoing_edges; e; e = e->next_same_present) if (bits_is_member (e->cset, chr)) goto retry; /* A DFA edge missing from the cache. Try to build it now. */ { bits trcset; rx_lock_superstate (rx, super); if (super->has_huge_table) trcset = bits_alloc (rx__dfa_alloc_limits, uni_bits_tree_rule); else trcset = bits_alloc (rx__dfa_alloc_limits, rx_8bit_bits_tree_rule); if (!trcset) { rx_unlock_superstate (rx, super); return 0; } { int nfa_edges; nfa_edges = compute_super_edge_cset (rx, trcset, super, chr); if (nfa_edges < 0) { rx_unlock_superstate (rx, super); return 0; } #if 0 else if (!nfa_edges) { static struct rx_inx backtrack = { 0, 0, (void *)rx_backtrack, 0 }; rx_unlock_superstate (rx, super); bits_free (trcset); return &backtrack; } #endif else { e = rx_super_edge (rx, super, trcset); rx_unlock_superstate (rx, super); if (!e) return 0; goto retry; } } } } else if (e->future) { struct rx_inx inx; /* We know the superstate edge and its destination state, but * the instruction frame contained a stale `rx_cache_miss' * instruction (the instruction itself, not the state, was the * stale part of the cache). We must now replace the * instruction with an `rx_next_char' instruction. * * Its possible that the destination state is in a semifree * state and must be refreshed. */ refresh_semifree_superstate (e->future); rx_lock_superstate (rx, super); inx.data = (void *)&e->future->transitions; inx.data_2 = (void *)e->future->members->state_label; inx.inx = (void *)rx_next_char; { bitset_subset s; if ( bits_get_subset (&s, e->cset, chr) || install_partial_transition (super, &inx, e, s, chr)) { rx_unlock_superstate (rx, super); return 0; } } rx_unlock_superstate (rx, super); if (!super->has_huge_table || ((super->storage_unit_size == 1) && (chr < 0x80))) return rx_transition8 (&super->transitions, chr); else if ((super->storage_unit_size == 2) && (chr < (1 << 16))) return rx_transition16 (&super->transitions, chr); else return rx_transition21 (super->huge_char_transitions, chr); } else { struct rx_inx inx; /* A DFA edge with no known destination state. We must now * compute the destination state and fill in transition table * entries with `rx_next_char' instructions. */ rx_lock_superstate (rx, super); { bitset_subset s; struct rx_superstate * destination; if (solve_destination (rx, &inx, e, super->storage_unit_size)) { rx_unlock_superstate (rx, super); return 0; } if (inx.inx == (void *)rx_next_char) { destination = rx_transitions_to_suprestate ((rx_transition_table)(inx.data)); rx_lock_superstate (rx, destination); } else destination = 0; if (bits_get_subset (&s, e->cset, chr) || install_partial_transition (super, &inx, e, s, chr)) { if (destination) rx_unlock_superstate (rx, destination); rx_unlock_superstate (rx, super); return 0; } if (destination) rx_unlock_superstate (rx, destination); } rx_unlock_superstate (rx, super); if (!super->has_huge_table || ((super->storage_unit_size == 1) && (chr < 0x80))) return rx_transition8 (&super->transitions, chr); else if ((super->storage_unit_size == 2) && (chr < (1 << 16))) return rx_transition16 (&super->transitions, chr); else return rx_transition21 (super->huge_char_transitions, chr); } } /************************************************************************ * DFA Cache Debugging Tools * * I sometimes use this code to debug this file. */ #if 0 static int qlen (struct rx_superstate * q) { int count = 1; struct rx_superstate * it; if (!q) return 0; for (it = q->next_recyclable; it != q; it = it->next_recyclable) ++count; return count; } static void check_cache () { struct rx_cache * cache = rx_default_cache; int total = cache->superstates; int semi = cache->semifree_superstates; total = cache->superstates; semi = cache->semifree_superstates; if (semi != qlen (cache->semifree_superstate)) panic ("failed cache check in rx"); if ((total - semi) != qlen (cache->lru_superstate)) panic ("failed cache check in rx (2)"); } #endif tla-1.3.5+dfsg/src/hackerlab/rx/super.h0000644000175000017500000006325410457621774016427 0ustar useruser/* super.h - decls for lazilly constructed DFAs * **************************************************************** * Copyright (C) 1998, 2000 Thomas Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__RX__SUPER_H #define INCLUDE__RX__SUPER_H /* #define RX_LARGE_TABLES */ struct rx_superset; struct rx_super_edge; struct rx_superstate; #include "hackerlab/mem/alloc-limits.h" #include "hackerlab/bitsets/bitset.h" #include "hackerlab/hash/hashtree.h" #include "hackerlab/rx/nfa.h" /************************************************************************ *(h1 "Superstate Data Structures") * * * One state of the DFA is called a "superstate" because it * represents the composition of one or more NFA states. The * functions in this chapter build superstates and edges between * them. * * A DFA can be prohibitively large -- too large to keep in memory all * at once. So these functions help you to build only the superstates * you actually need. While you keep those states locked, they remain * in memory; when unlocked, they can be discarded and recycled. * * As you fill the superstate cache with DFA states you visit often, * you'll want to follow transitions between those DFA states as * quickly as possible. For that reason, the data structures in this * chapter are slightly complicated: to heavily optimize the case when * you are tracing through the DFA graph entirely out of the * superstate cache. In the optimized case, you can advance a DFA * through one state transition with only 10-20 machine instructions. * That number of instructions, multiplied by the length of the input * string, is the entire overhead of a DFA comparison running out * of the cache! */ /************************************************************************ *(h2 "DFA State Transition Tables") * * A regular expression DFA is represented by a collection of * transition tables, one per DFA state. If the character set has `N' * characters, the transition tables have `N' entries. * * Each entry in a transition table is one instruction for a virtual * machine. */ /*(c #s"struct rx_inx" :category type) * struct rx_inx; * * This structure holds one instruction for a virtual machine that * interprets the DFA. For example, a structure of this type is used * to represent one entry in the transition table of a DFA state. * * This structure type is padded to a power-of-2 bytes because in some * critical code, we dispatch by indexing an array of these * structures. If that indexing can be accomplished by just a shift * of the index, we're much happier than if it requires a full-fledged * multiplication. * * An instruction includes an opcode and two operands. The opcode is * stored in the field `inx' and the operands are stored in the fields * `data' and `data_2'. The field `data' is only used by one * instruction (`rx_next_char'). For all other instructions, `data' * is set to 0. This is used to speed up dispatching: the field * `data' is fetched and tested before the field `inx'. If data is * not 0, there is no need to fetch the field `inx' at all -- we * already know it contains `rx_next_char' and we already have the * primary operand to that instruction in a register. * * In the case of a `rx_next_char' instruction, the primary operand is * a pointer to the transition table of the destination DFA state. * The secondary operand is the state label of the destination state. * Thus, the state transition part of a DFA matching loop is something * like: * * while (1) * { * // Presume that the current transition table entry * // for the next input character (`input_char') contains * // the virtual instruction `rx_next_char'. * // * // Fetch the operands for that instruction: * // * next_state_table * = (struct rx_inx *)current_state_table[input_char].data; * next_state_label * = (long)current_state_table[input_char].data_2; * * // Now check, is it really a `rx_next_char' instruction? * // * if (!next_state_table) * { * // Primary operand was 0 -- not really `rx_next_char'. * // * ... handle a cache miss or illegal input character * ... patch up the values of `next_state_table' and * ... `next_state_label' * } * * // Advance to the next DFA state: * // * current_state_table = next_state_table; * current_state_label = next_state_label; * * // Test whether or not it is a final state: * // * if (current_state_label) * { * // we have reached a final state in the DFA * ... perhaps return or perhaps continue to look for * ... a longer match. * } * * // Process further input. * // * input_char = read_next_char (); * } * * * Here are the details of the strucure type: * insert*/ struct rx_inx { void * data; /* The primary operand of this instruction. For efficient indexing, this must be the first field of the structure.*/ void * data_2; /* The secondary operand of this instruction.*/ void * inx; /* The opcode for this instruction. This field is declared `void *' to force it to occupy exactly one word. In fact it holds a value of type `enum rx_opcode'.*/ struct rx_inx * next_same_edge; /* A list of instruction frames, anchored at e->inx_list, of instructions built for the same edge. */ }; /*end-insert */ /*(c #s"enum rx_opcode" :category type) * enum rx_opcode; * * This type represents opcodes for a regular expression DFA virtual * machine. * insert*/ enum rx_opcode { rx_cache_miss = 0, /* must be 0 */ /* An `rx_cache_miss' instruction means that a transition has been reached whose edge or destination state is not currently in the DFA cache. If the edge is missing from the cache, then `data' and `data_2' are 0. If the edge is in the cache, but the destination state is either not in the cache or is unknown to the edge, then `data' is 0 and `data_2' points to the edge.*/ rx_next_char = rx_cache_miss + 1, /* An `rx_next_char' instruction means that a transition has been reached to a DFA state that is known to be in the DFA state cache. `data' points to the transition table of the destination state (the `transitions' field of a `struct rx_superstate'). `data_2' is set to the state label of the destination state. If the `data' field of a `struct rx_inx' is not 0, then the `inx' field is guaranteed to be `rx_next_char'. If the insruction is `rx_next_char', a DFA interpreter is almost certain to need the value in `data'. A DFA interpreter should optimize this instruction above all others. This suggests that interpreters should dispatch first on the value in `data' (on whether or not it is 0), and then (if `data' is 0) on the instruction in field `inx'.*/ rx_backtrack = rx_next_char + 1, /* An `rx_backtrack' instruction means that there is no transition defined for an input character. If the DFA is being used for regular expression comparison, this means that the input does not match.*/ rx_huge_char = rx_backtrack + 1, /* An `rx_huge_char' instruction means that the the character is a UTF-16 high surrogate. */ rx_bogus_utf8 = rx_backtrack + 1, /* Second, third or fourth byte of a UTF-8 character. */ rx_2byte_utf8 = rx_bogus_utf8 + 1, /* First byte of a 2-byte UTF-8 character. */ rx_3byte_utf8 = rx_2byte_utf8 + 1, /* First byte of a 3-byte UTF-8 character. */ rx_4byte_utf8 = rx_3byte_utf8 + 1, /* First byte of a 4-byte UTF-8 character. */ rx_num_instructions = rx_4byte_utf8 + 1, }; /*end-insert */ /************************************************************************ *(h2 "DFA States") * */ /*(c #s"struct rx_superstate" :category type) * struct rx_superstate; * * This structure holds one state in a regular expression DFA. * insert*/ struct rx_super_transition; /* no such structure */ typedef struct rx_super_transition ** rx_transition_table; struct rx_superstate { struct rx_superset * members; /* A list of NFA states: the NFA state set corresponding to this DFA state. No two DFA states have the same set of members. */ struct rx_super_edge * outgoing_edges; /* A list of outgoing DFA edges, linked by `next_same_present'. At any time, some edges for this state may be missing from the list (because they are missing from the DFA cache). To build a complete DFA, it is necessary to traverse the complete transition table of every state, keeping locks on each state encountered so that none are flushed from the DFA cache. (Be advised: DFA graphs can be quite large.)*/ struct rx_super_edge * incoming_edges; /* A queue of incoming DFA edges, linked by `next_same_dest' and `prev_same_dest'. Again, those edges not in the DFA cache are missing from this list. Also missing from this list are edges that are in the cache, but that do not yet know their destination state.*/ /* Superstate Locks and Superstate Cache Management * * Every superstate has a lock count -- a kind of reference * count. While your code holds a pointer to a superstate, that * superstate should have a non-0 lock count unless you are * certain that none of the functions that allocate storage in * the DFA cache will be called. You can use `rx_lock_superstate' * and `rx_unlock_superstate' to manipulate this reference count. * * The gory details of memory management for DFA states is * interesting and relevant to programmers who want to obtain the * best performance from this library. Many of those details are * explained here. * * Upon creation, superstates are given a lock count of 0 and are * added to the back of a queue of live superstates. When a * cache-hit yields an already existing superstate, it is moved * back to back of that queue. Thus, the states most recently * returned from the DFA cache tend to be at the back of the queue * of live states. * * While a state has a lock count of 0, it is a candidate to be * made semifree and then truly free. This can happen any time the * old state reaches the _front_ of the queue of live states and * new states or edges are allocated in the DFA cache (such as * during a call to `rx_handle_cache_miss'). When this occurs, * incoming transitions to the state are modified to cause cache * misses, the state is moved from the queue of live states to the * back of the queue of semifree states, and the state is a * candidate to become truly free. To convert a state which is * semifree back to a live state, use `rx_refresh_this_superstate'. * * When a state becomes semifree, there are two possibilities of * what will happen next. One possibility is that Rx will reclaim * the state's storage. This will happen if the state reaches the * _front_ of the queue of semifree states at a time when Rx detects * that the DFA cache is over-full. * * The other possibility is that a semifree state will be * referenced by a DFA transition which results in a cache miss. * The cache miss handler reverts the semifree state to a live * state. Restoring the state this way is less expensive than * rebuilding the state from scratch and gives us the information * that the state is useful enough to keep in the cache. In * effect, we use the cache misses that restore semifree states to * sort the two queues of DFA states, moving popular states to the * back of those queues, and letting unpopular states drift to the * front of the live queue, then through the semifree queue, and * finally into being recycled. * * There is a (soft) upper bound on the amount of memory Rx will use * for caching superstates. While that upper bound is exceeded, Rx * tries to free some superstates which have a lock count of 0, * starting with the head of the queue of semifree states. */ int locks; /* A reference count. */ int is_semifree; /* Is this state live or semifree? */ struct rx_superstate * next_recyclable; struct rx_superstate * prev_recyclable; /* While a DFA state is live, these links place the state on a queue of all live DFA states. While the state is semifree, these links place the state on queue of all semifree DFA states.*/ /* At run-time, a matcher follows transitions from one superstate * to the next. At times, a destination state may be missing from * the superstate cache or from a particular instruction frame. In * those cases, a destination superset (set of NFA states) is * computed, and that is used as a key to search the cache of DFA * states. If a cache entry is found (and valid) then the * superstate is missing only from the instruction frame, which is * then filled in, and the transition resumed normally. If no * cache entry is found, a new superstate is constructed for that * superset. * * The following field (`rx_id') is used when validating cache * entries in the superstate cache keyed on supersets. If a cache * search for a particular DFA state yields this state, the result * is only valid if this field agrees with the `rx_id' field of the * NFA. * * This field is necessary because of the possibility of the * following (unlikely but not impossible) sequence of events: * * The caller allocates an NFA (call it "NFA A"). * * The caller builds DFA states based on NFA A. * * The caller frees NFA A. The DFA states continue to exist * until flushed from the DFA cache from lack of use. * * The caller allocates a new NFA ("NFA B") which happens * to use the same region of the heap as NFA A. * By coincidence, some of the NFA states sets for NFA A * and NFA B hash to the same value. Consequently, when * looking for a DFA state built for NFA B, the cache probe * might yield a stale DFA state built for NFA A. * * But luckilly, NFA A and NFA B are guaranteed to have * different values for the field `rx_id'. By comparing * the `rx_id' field of NFA B to the superstate yielded by * the cache probe, we can know to invalidate that cache * entry. */ int rx_id; /* Superstates of a given NFA are numbered sequentially. The * sequence number counter is the global variable * `rx_superstate_counter' which programs are free to modify. * * Sequence numbers are useful for applications which manipulate the * DFA graph in ways other than simply following transition tables. */ int seq; /* The following field is used by `rx_mkstatic', which builds a * complete DFA by examining superstates. */ long table_id; int storage_unit_size; /* see nfa.h */ int has_huge_table; /* yes for Unicode */ #ifdef RX_LARGE_TABLES struct rx_inx *** huge_char_transitions; #else struct rx_inx **** huge_char_transitions; #endif /* struct rx_inx transitions[1]; */ struct rx_super_transition * transitions[1]; }; /*end-insert */ #define rx_transitions_to_suprestate(T) ((struct rx_superstate *) \ ((char *)(T) \ - ((unsigned long) \ ((struct rx_superstate *)0)->transitions))) #define rx_transition8(T,N) (((struct rx_inx *)(T)) + (N)) #define rx_subset_transitions8(T,N) (((struct rx_inx *)(T)) + bitset_subset_offset(N)) #ifdef RX_LARGE_TABLES # define rx_page1_index16(N) ((N) >> 8) # define rx_page2_index16(N) ((N) & 0xff) # define rx_page2_subset_index16(N) bitset_subset_offset (rx_page2_index16(N)) # define rx_page1_16(T) ((struct rx_inx **)(T)) # define rx_page2_16(T,N) rx_page1_16 (T)[rx_page1_index16(N)] # define rx_transition16(T,N) (rx_page2_16 ((T), (N)) + rx_page2_index16 (N)) # define rx_subset_transitions16(T,N) (rx_page2_16 ((T), (N)) + rx_page2_subset_index16 (N)) # define rx_page1_size21 32 # define rx_page2_size21 256 # define rx_page1_index21(N) ((N) >> 16) # define rx_page2_index21(N) (((N) >> 8) & 0xff) # define rx_page3_index21(N) ((N) & 0xff) # define rx_page3_subset_index21(N) bitset_subset_offset (rx_page3_index21 (N)) # define rx_page2_21(T,N) ((T)[rx_page1_index21 (N)]) # define rx_page3_21(T,N) rx_page2_21 ((T), (N))[rx_page2_index21 (N)] # define rx_transition21(T,N) (rx_page3_21 ((T), (N)) + rx_page3_index21 (N)) # define rx_subset_transition21(T,N) (rx_page3_21 ((T), (N)) + rx_page3_subset_index21 (N)) #else /* !defined(RX_LARGE_TABLES) */ # if (bits_per_subset == 32) # define rx_page2_size (8) # define rx_page3_size bits_per_subset # define rx_page1_index16(N) ((N) >> 8) # define rx_page2_index16(N) (((N) >> 5) & 0x7) # define rx_page3_index16(N) ((N) & 0x1f) # define rx_page1_size21 256 # define rx_page2_size21 32 # define rx_page3_size21 (8) # define rx_page4_size21 bits_per_subset # define rx_page1_index21(N) ((N) >> 13) # define rx_page2_index21(N) (((N) >> 8) & 0x1f) # define rx_page3_index21(N) (((N) >> 5) & 0x7) # define rx_page4_index21(N) ((N) & 0x1f) # elif (bits_per_subset == 64) # define rx_page2_size (4) # define rx_page3_size bits_per_subset # define rx_page1_index16(N) ((N) >> 8) # define rx_page2_index16(N) (((N) >> 6) & 0x3) # define rx_page3_index16(N) ((N) & 0x3f) # define rx_page1_size21 256 # define rx_page2_size21 32 # define rx_page3_size21 (8) # define rx_page4_size21 bits_per_subset # define rx_page1_index21(N) ((N) >> 13) # define rx_page2_index21(N) (((N) >> 8) & 0x1f) # define rx_page3_index21(N) (((N) >> 6) & 0x3) # define rx_page4_index21(N) ((N) & 0x3f) # else # error "odd bits_per_subset in hackerlab/rx/super.h" # endif # define rx_page1_16(T) ((struct rx_inx ***)(T)) # define rx_page2_16(T,N) rx_page1_16 (T)[rx_page1_index16(N)] # define rx_page3_16(T,N) rx_page2_16 (T,N)[rx_page2_index16(N)] # define rx_page3_subset_index16(N) bitset_subset_offset (rx_page3_index16(N)) # define rx_transition16(T,N) (rx_page3_16 ((T), (N)) + rx_page3_index16 (N)) # define rx_subset_transitions16(T,N) (rx_page3_16 ((T), (N)) + rx_page3_subset_index16 (N)) # define rx_page1_21(T) (T) # define rx_page2_21(T,N) rx_page1_21(T)[rx_page1_index21(N)] # define rx_page3_21(T,N) rx_page2_21((T),(N))[rx_page2_index21(N)] # define rx_page4_21(T,N) rx_page3_21((T),(N))[rx_page3_index21(N)] # define rx_page4_subset_index21(N) bitset_subset_offset (rx_page4_index21 (N)) # define rx_transition21(T,N) (rx_page4_21 ((T), (N)) + rx_page4_index21 (N)) # define rx_subset_transition21(T,N) (rx_page4_21 ((T), (N)) + rx_page4_subset_index21 (N)) #endif /*(c rx_lock_superstate :category macro) * #define rx_lock_superstate(RX_NFA, SUPERSTATE) * * Increment the reference count of a DFA state. */ #define rx_lock_superstate(R,S) ((S)->locks++) /*(c rx_unlock_superstate :category macro) * #define rx_unlock_superstate(RX_NFA, SUPERSTATE) * * Decrement the reference count of a DFA state. */ #define rx_unlock_superstate(R,S) (--(S)->locks) /*(c rx_superstate_transition_table :category macro) * #define rx_superstate_transition_table(RX_NFA, SUPERSTATE) * * As a function: * * extern struct rx_inx * * rx_superstate_transition_table (struct rx_nfa * rx, * struct rx_superstate * state); * * Return the DFA state transition table that corresponds to a * particular superstate */ #define rx_superstate_transition_table(RX_NFA, SUPERSTATE) \ &((SUPERSTATE)->transitions) /*(c rx_transition_table_superstate :category macro) * #define rx_transition_table_superstate(RX_NFA, TABLE) * * As a function: * * extern struct rx_superstate * * rx_superstate_transition_table (struct rx_nfa * rx, * struct rx_inx * table); * * Return the superstate that corresponds to a particular * DFA state transition table. */ #define rx_transition_table_superstate(RX_NFA, TABLE) \ ((struct rx_superstate *)\ ( ((char *)(TABLE)) - (char *)(&((struct rx_superstate *)0)->transitions))) /*(c rx_superstate_counter :category variable) * extern int rx_superstate_counter; * * As DFA states are allocated, they are assigned sequential * numbers. The number of the next DFA state is stored in this * variable. */ extern int rx_superstate_counter; /************************************************************************ *(h2 "DFA Edges") * */ /*(c #s"struct rx_super_edge" :category type) * * This structure holds one edge of a regular expression DFA. * * All DFA edges are character set edges -- they are labeled by * a non-empty set of characters. No two of the character sets * of edges originating in a common DFA state intersect. * insert*/ struct rx_super_edge { bits cset; /* The character set of this edge.*/ struct rx_superstate * present; /* The DFA source state of this edge. If the edge exists, this state is guaranteed to be in the cache.*/ struct rx_superstate * future; /* The DFA destination state of this edge. This state may or may not be in the DFA cache, and if it is in the cache, this edge may or may not "know" about it. If the state is in the cache and this edge "knows" about it, then this field points to the state. Otherwise, this field contains 0.*/ struct rx_inx * inx_list; /* A list of instruction frames, linked by next_same_edge, built for this edge. */ struct rx_super_edge * next_same_present; /* This points to the next edge in a list of DFA edges sharing a common starting state. The list starts at `present->outgoing_edges'.*/ struct rx_super_edge * next_same_dest; struct rx_super_edge * prev_same_dest; /* These link this edge into a queue of edges sharing a common DFA ending state. These fields are only valid if `future' is not 0. In that case, this edge is stored on the queue `future->incoming_edges'.*/ int is_backtrack; }; /*end-insert */ /************************************************************************ *(h2 "Sets of NFA States") * * Every state of a DFA corresponds to a non-empty set of NFA states. * No two DFA states share the same set of NFA states. * */ /*(c #s"struct rx_superset" :category type) * struct rx_superset; * * This structure holds a set of NFA states and is used to represent * the set of states that comprise a single DFA state. In xref:"The * NFA Data Types" we encountered another representation for sets of * NFA states, used for computing epsilon closures of NFA states. * Unfortunately, the requirements of computing epsilon closures and * of computing DFA states are too different, so two representations * are needed. * * For equal `car' and `cdr' (in the sense of `=='), there is at most * one of these structures. * * The empty set is *not* represented by `(struct rx_superset *)0' * but instead by a superset structure with `car' and `cdr' equal to * 0. Thus, the last element of every `struct rx_superste' list * (linked by `cdr' pointers) is a structure with `car' and `cdr' 0. * (This simplifies hash-consing sets of these structures). * insert*/ struct rx_superset { struct rx_nfa_state * car; /* This points to the first NFA state in the set. The list of states is kept sorted by id number, from least to greatest. Note that if the NFA has been freed but the superset has not, then this pointer is invalid. This condition can be detected by comparing the `id' field of this structure with the `rx_id' field of the NFA over which this set was supposedly built. If the two numbers agree, then the `car' pointer is valid. If the two numbers disagree, then this set was actually built for an NFA that no longer exists: it is a stale entry in the cache of supersets.*/ struct rx_superset * cdr; /* This points to the rest of this set.*/ long state_label; /* If all of the state labels of the NFA states in this set are 0, then this field is 0. Otherwise, this field is the NFA state label with the smallest magnitude.*/ int has_cset_edges; /* This is the logical-or (`||') of the same field of the `cdr', and the same-named field of the `car'. If it is 0, then this superset corresponds to a dead-end DFA state (no outgoing edges).*/ /* Cache management data. */ int refs; /* A reference count. */ int id; /* See `car', above. */ struct hashtree_item hash_item; /* For hash-consing lists */ struct rx_nfa_state * nfa_state; /* If this superset is discovered to be the eclosure of a single NFA state by `rx_nfa_state_to_superstate', this field points to that NFA state. The state points back to this set in the field `superstate_set'. If the NFA is subsequently freed, this field is reset to 0.*/ struct rx_superstate * superstate[2]; /* If the DFA states for this superset exists (in the cache of DFA states), then this field points to those DFA state. superstate[0] for 1-byte storage unit size, superstate[1] for 2-byte storage unit size. */ }; /*end-insert */ extern alloc_limits rx__dfa_alloc_limits; /* automatically generated __STDC__ prototypes */ extern void rx__init_dfa_alloc_limits (void); extern size_t rx_dfa_cache_failure_pt (void); extern void rx__dfa_cache_statistics (size_t * threshold, size_t * failure_pt, size_t * in_use, size_t * high_water_mark, int * hits, int * misses, int * total_hits, int * total_misses); extern void rx_set_dfa_cache_failure_pt (size_t n); extern int rx__really_free_superstate (void); extern struct rx_superstate * rx_nfa_state_to_superstate (struct rx_nfa * rx, struct rx_nfa_state * nfa_state, int storage_unit_size); extern void rx_clear_superstate_table_ids (struct rx_nfa * nfa); extern struct rx_inx * rx_handle_cache_miss (struct rx_nfa * rx, struct rx_superstate * super, unsigned int chr, void * data_2) ; #endif /* INCLUDE__RX__SUPER_H */ tla-1.3.5+dfsg/src/hackerlab/rx/dfa-cache.h0000644000175000017500000000170410457621774017054 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:41:37 2001 (dfa-cache.h) */ /* dfa-cache.h - * **************************************************************** * Copyright (C) 2000 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__RX__DFA_CACHE_H #define INCLUDE__RX__DFA_CACHE_H #include "hackerlab/machine/types.h" /* automatically generated __STDC__ prototypes */ extern void rx_set_dfa_cache_threshold (size_t n); extern size_t rx_dfa_cache_threshold (void); extern size_t rx_dfa_cache_in_use (void); extern size_t rx_dfa_cache_high_water_mark (void); extern void rx_dfa_cache_statistics (size_t * threshold, size_t * ign, size_t * in_use, size_t * high_water_mark, int * hits, int * misses, int * total_hits, int * total_misses); extern size_t rx_flush_dfa_cache (void); #endif /* INCLUDE__RX__DFA_CACHE_H */ tla-1.3.5+dfsg/src/hackerlab/rx/escape.c0000644000175000017500000000756610457621774016530 0ustar useruser/* escape.c - exitting long-running matches * **************************************************************** * Copyright (C) 1999, 2000 Thomas Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/rx/escape.h" /* For those reasons, Rx makes provisions for asynchronously aborting * a long-running match. Matches by `regexec', `regnexec', the * functions in xref:"DFA String Comparisons" and the functions in * xref:"Regexp Matching" can be aborted. When `regexec' or * `regnexec' is aborted, it returns `REG_MATCH_INTERRUPTED'. Other * functions are aborted by calling `longjmp' to return to a point * outside the call to the function. */ /************************************************************************ *(h1 "Escaping Long-Running Matches" * :includes ("hackerlab/rx/escape.h")) * * |escaping long-running regexp matches| * |aborting long-running regexp matches| * |asynchronously aborting long-running regexp matches| * |$REG_MATCH_INTERRUPTED| * * Regexp searches can take a long time. Rx makes provisions for * asynchronously aborting a long-running match. When `regexec' or * `regnexec' is aborted, it returns `REG_MATCH_INTERRUPTED'. Callers * of other match functions (such as `rx_xml_is_match') can catch * asynchronous interrupts using the jump buffer `rx_escape_jmp_buf' * (documented below). * * Asynchronous match interrupts are permitted whenever Rx calls the * function pointed to by `rx_poll' (see below). If that pointer is * 0, no interrupts will occur. If it points to a function, that * function may cause an interrupt by calling `longjmp' to reach * the point from which the interrupt resumes. * * By convention, the global jump buffer `rx_escape_jmp_buf' is used. * To cause an interrupt the next time `rx_poll' is called, set * `rx_poll' to the function `rx_escape' which performs a `longjmp' to * `rx_escape_jmp_buf'. * */ /*(c rx_poll :category variable) * extern void (*rx_poll)(void); * * A function pointer that is called by Rx (if not 0) whenever it is * safe to interrupt an on-going search. */ void (*rx_poll)(void) = 0; /*(c rx_escape_jmp_buf) * * The conventionally used jump buffer for defining where to resume * execution after an Rx match function is interrupted. * * See xref:"rx_escape". */ jmp_buf rx_escape_jmp_buf; /*(c rx_escape) * void rx_escape (void); * * This function is conventionally used for interrupting a * long-running Rx match function. To cause an interrupt of an * on-going match from an asynchronously called function, such as a * signal handler, assign `rx_escape' to `rx_poll' and return normally * from the asynchronously called function. When `rx_poll' is next * called, `rx_escape' will assign 0 to `rx_poll' and `longjmp' to * `rx_escape_jmp_buf'. `rx_escape' is quite simple: * insert*/ void rx_escape (void) { rx_poll = 0; longjmp (rx_escape_jmp_buf, 1); } /*end-insert * * * Here is how `rx_escape' might be used in conjunction with * a signal handler while using `regexec': * * * void * match_fn (void) * { * int status; * ...; * status = regexec (...); * rx_poll = 0; // prevent a race condition * if (status == REG_MATCH_INTERRUPTED) * { * "matching was cut short"; * } * } * * void * signal_handler (int signal) * { * rx_poll = rx_escape; // interrupt an ongoing match. * } * * * Here is how the same signal handler might be used in conjunction with a * Unicode regular expression match function (such as `rx_xml_is_match'): * * * void * match_fn (void) * { * int status; * ...; * if (setjmp (rx_escape_jmp_buf)) * { * "matching was cut short"; * return; * } * status = xml_is_match (...); * rx_poll = 0; // prevent a race condition * ... * } * */ tla-1.3.5+dfsg/src/hackerlab/rx/tuning.doc0000644000175000017500000000152010457621774017077 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:57:15 2001 (tuning.doc) */ /************************************************************************ *(h0 "Tuning Posix Regexp and XML Regular Expression Performance") * * Some programs use Posix regexps or XML Regular Expressions heavily. * The performance of pattern matching (both speed and memory * use) may be important in such programs. * * The Hackerlab C Library pattern matching functions afford programs * the opportunity to make space-for-time trade-offs: you can * minimize the amount of memory used for pattern matching at the * cost of speed, or maximize speed, at the cost of memory. This * chapter provides the details. * * */ /*(menu) */ /*(include-documentation "nfa-cache.c") */ /*(include-documentation "dfa-cache.c") */ /*(include-documentation "cache-sizes.doc") */ tla-1.3.5+dfsg/src/hackerlab/rx/dfa-iso8859-1.c0000644000175000017500000002326610457621774017301 0ustar useruser/* dfa-iso8859-1.c - 8-bit functions that manipulate regexps as DFAs * **************************************************************** * Copyright (C) 1998, 2000 Thomas Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/bugs/panic.h" #include "hackerlab/rx/escape.h" #include "hackerlab/rx/super.h" #include "hackerlab/rx/dfa-iso8859-1.h" /************************************************************************ *(h0 "DFA String Comparisons for iso8859_1 Strings" * :includes ("hackerlab/rx/dfa.h" * "hackerlab/rx/dfa-iso8859-1.h")) * * * A common use for regular expressions is to compile them to DFA and * compare them to strings using a loop that advances through DFA * states. * * In Rx, the DFA data structure has been heavily optimized for such * loops. The functions in this chapter implement the most common * kinds of DFA loop, taking full advantage of the Rx optimizations. */ /*(menu) */ /************************************************************************ *(h1 "DFA Comparison Functions for iso8859_1 Strings") * * The functions in this section compare an input string to a regular * expression by advancing through DFA states according to the * characters in the input string. */ /*(c rx_dfa_iso8859_1_fits) * int rx_dfa_iso8859_1_fits (struct rx_dfa * frame, * const t_uint16 * burst, * size_t len); * * * Compare a DFA to string: is the entire string matched by the DFA? * Return a non-zero value (the state-label of the final DFA state) if * the string matches, 0 otherwise. * * This function works by advancing the DFA through all of the * characters in the input string and checking the state label of the * last state reached. If that label is not 0, then the string * matches. If that label is 0, or if an illegal input character is * reached before the end of the input string, the string does not * match. * * It is possible to asynchronously abort a call to this function. * See xref:"Exiting Long-running Matches". */ int rx_dfa_iso8859_1_fits (int * label, struct rx_dfa * frame, const t_uchar * burst, size_t len) { int adv; adv = rx_dfa_iso8859_1_advance (frame, burst, len); if (adv < 0) return -1; else if (!adv) { *label = 0; return 0; } else { *label = frame->final_tag; return 0; } } /*(c rx_dfa_iso8859_1_advance) * int rx_dfa_advance (struct rx_dfa * frame, * const t_uchar * burst, * size_t len); * * * Advance a DFA, reading characters from the input string. Stop at * the end of the string, returning 1 or when a character is * encountered for which no transition is defined, returning 0. * * This is similar to `rx_dfa_fits', except that in this case, we * don't care about the state label of the final state. * * It is possible to asynchronously abort a call to this function. * See xref:"Exiting Long-running Matches". */ int rx_dfa_iso8859_1_advance (struct rx_dfa * frame, const t_uchar * burst, size_t len) { rx_transition_table inx_table; if (!len) return 1; inx_table = frame->state->transitions; rx_unlock_superstate (frame->rx, frame->state); frame->state = 0; while (len--) { struct rx_inx * inx; rx_transition_table next_table; if (rx_poll) (*rx_poll)(); inx = rx_transition8 (inx_table, *burst); next_table = (rx_transition_table)inx->data; while (!next_table) { struct rx_superstate * state; t_unicode c; state = rx_transitions_to_suprestate (inx_table); switch ((long)inx->inx) { case rx_bogus_utf8: case rx_2byte_utf8: case rx_3byte_utf8: case rx_4byte_utf8: c = *burst; { inx = rx_transition21 (state->huge_char_transitions, c); next_table = (rx_transition_table)inx->data; while (!next_table) { switch ((enum rx_opcode)inx->inx) { default: case rx_huge_char: goto handle_by_panic; case rx_backtrack: goto handle_as_backtrack; case rx_cache_miss: inx = rx_handle_cache_miss (frame->rx, state, c, inx->data_2); if (!inx) { frame->state = 0; frame->final_tag = 0; return -1; } next_table = (rx_transition_table)inx->data; continue; } } continue; } case rx_backtrack: handle_as_backtrack: /* RX_BACKTRACK means that we've reached the empty * superstate, indicating that match can't succeed * from this point. */ frame->state = 0; frame->final_tag = 0; return 0; case rx_cache_miss: /* Because the superstate NFA is lazily constructed, * and in fact may erode from underneath us, we sometimes * have to construct the next instruction from the hard way. * This invokes one step in the lazy-conversion. */ inx = rx_handle_cache_miss (frame->rx, state, *burst, inx->data_2); if (!inx) { frame->state = 0; frame->final_tag = 0; return -1; } next_table = (rx_transition_table)inx->data; continue; /* No other instructions are legal here. */ default: handle_by_panic: panic ("unrecognized instruction in rx_dfa_advance"); } } inx_table = next_table; ++burst; } frame->state = rx_transitions_to_suprestate (inx_table); frame->final_tag = frame->state->members->state_label; rx_lock_superstate (frame->rx, frame->state); return 1; } /*(c rx_dfa_iso8859_1_advance_to_final) * size_t rx_dfa_iso8859_1_advance_to_final (struct rx_dfa * frame, * const t_uchar * burst, * size_t len); * * Advance a DFA, reading characters from a string. * * Stop at the end of the string, a character with no transition, or * when a superstate is encountered with a non-0 label. Return the * number of characters read from the string. * * This function stops on a transition *into* a state with a non-0 * state label. It doesn't matter if the machine is initially in a * state with a non-0 label: the machine will consume the first input * character regardless. That means that if your regular expression * can match the empty string, you must detect this condition before * calling `rx_dfa_advance_to_final' by checking `dfa->final_tag' * after setting the start state of the DFA. * * If the match stopped in a final state, `dfa->final_tag' contains * the non-0 state label of the final state, otherwise, it contains 0. * If the match stopped on an illegal character, `dfa->state' is 0, * otherwise it is non-0. * * It is possible to asynchronously abort a call to this function. * See xref:"Exiting Long-running Matches". */ int rx_dfa_iso8859_1_advance_to_final (size_t * amt, struct rx_dfa * frame, const t_uchar * burst, size_t len) { size_t initial_len; rx_transition_table inx_table; if (!len) { *amt = 0; return 1; } initial_len = len; inx_table = frame->state->transitions; rx_unlock_superstate (frame->rx, frame->state); frame->state = 0; while (len--) { struct rx_inx * inx; rx_transition_table next_table; if (rx_poll) (*rx_poll)(); inx = rx_transition8 (inx_table, *burst); next_table = (rx_transition_table)inx->data; while (!next_table) { struct rx_superstate * state; t_unicode c; state = rx_transitions_to_suprestate (inx_table); switch ((enum rx_opcode)inx->inx) { case rx_bogus_utf8: case rx_2byte_utf8: case rx_3byte_utf8: case rx_4byte_utf8: c = *burst; { inx = rx_transition21 (state->huge_char_transitions, c); next_table = (rx_transition_table)inx->data; while (!next_table) { switch ((enum rx_opcode)inx->inx) { default: case rx_huge_char: goto handle_by_panic; case rx_backtrack: goto handle_as_backtrack; case rx_cache_miss: inx = rx_handle_cache_miss (frame->rx, state, c, inx->data_2); if (!inx) { frame->state = 0; frame->final_tag = 0; return -1; } next_table = (rx_transition_table)inx->data; continue; } } continue; } case rx_backtrack: handle_as_backtrack: /* RX_BACKTRACK means that we've reached the empty * superstate, indicating that match can't succeed * from this point. */ frame->state = 0; frame->final_tag = 0; *amt = (initial_len - len) - 1; return 0; case rx_cache_miss: /* Because the superstate NFA is lazily constructed, * and in fact may erode from underneath us, we sometimes * have to construct the next instruction from the hard way. * This invokes one step in the lazy-conversion. */ inx = rx_handle_cache_miss (frame->rx, state, *burst, inx->data_2); if (!inx) { frame->state = 0; frame->final_tag = 0; return -1; } next_table = (rx_transition_table)inx->data; continue; /* No other instructions are legal here. */ default: handle_by_panic: while (1) panic ("unrecognized instruction in rx_dfa_advance_to_final"); } } if (inx->data_2) { frame->state = rx_transitions_to_suprestate (next_table); rx_lock_superstate (frame->rx, frame->state); frame->final_tag = (long)inx->data_2; *amt = (initial_len - len); return 1; } inx_table = next_table; ++burst; } /* Consumed all of the characters. */ frame->state = rx_transitions_to_suprestate (inx_table); rx_lock_superstate (frame->rx, frame->state); frame->final_tag = 0; *amt = initial_len; return 1; } tla-1.3.5+dfsg/src/hackerlab/rx/dfa-iso8859-1.h0000644000175000017500000000164210457621774017300 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:41:38 2001 (dfa-iso8859-1.h) */ /* dfa-iso8859-1.h - * **************************************************************** * Copyright (C) 2000 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__RX__DFA_ISO8859_1_H #define INCLUDE__RX__DFA_ISO8859_1_H #include "hackerlab/machine/types.h" #include "hackerlab/rx/dfa.h" /* automatically generated __STDC__ prototypes */ extern int rx_dfa_iso8859_1_fits (int * label, struct rx_dfa * frame, const t_uchar * burst, size_t len); extern int rx_dfa_iso8859_1_advance (struct rx_dfa * frame, const t_uchar * burst, size_t len); extern int rx_dfa_iso8859_1_advance_to_final (size_t * amt, struct rx_dfa * frame, const t_uchar * burst, size_t len); #endif /* INCLUDE__RX__DFA_ISO8859_1_H */ tla-1.3.5+dfsg/src/hackerlab/rx/nfa.c0000644000175000017500000007342610457621774016032 0ustar useruser/* nfa.c - functions for manipulating regexps as NFAs * **************************************************************** * Copyright (C) 1998, 2000, 2004 Thomas Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/bugs/panic.h" #include "hackerlab/os/setjmp.h" #include "hackerlab/mem/mem.h" #include "hackerlab/uni/coding.h" #include "hackerlab/rx/nfa-cache.h" #include "hackerlab/rx/nfa.h" /* __STDC__ prototypes for static functions */ static void rx_build_nfa_internal (struct rx_nfa *rx, struct rx_exp_node *rexp, struct rx_nfa_state **start, struct rx_nfa_state **end, jmp_buf * err_escape); static int unfa_equal (void * va, void * vb, struct hashtree_rules * rules); static struct hashtree * unfa_hash_alloc (struct hashtree_rules * rules); static void unfa_free_hash (struct hashtree * tab, struct hashtree_rules * rules); static struct hashtree_item * unfa_hash_item_alloc (void * key, struct hashtree_rules * rules); static void unfa_free_hash_item (struct hashtree_item * item, struct hashtree_rules * rules); static struct rx_cached_rexp * canonical_unfa (struct hashtree * table, struct rx_exp_node * rexp, int cset_size); static struct rx_nfa * rx_unfa_to_nfa (struct rx_cached_rexp * cr, struct rx_exp_node * exp, int cset_size); static void rx_free_nfa_graph (struct rx_nfa *rx); static void nfa_set_freer (struct hashtree_item * node, struct hashtree_rules * rules); static int nfa_set_cmp (void * va, void * vb); static int nfa_set_equal (void * va, void * vb, struct hashtree_rules * rules); static struct hashtree * nfa_set_hash_alloc (struct hashtree_rules * rules); static void nfa_set_free_hash (struct hashtree * tab, struct hashtree_rules * rules); static struct hashtree_item * nfa_set_hash_item_alloc (void * key, struct hashtree_rules * rules); static void nfa_set_free_hash_item (struct hashtree_item * item, struct hashtree_rules * rules); static struct rx_nfa_state_set * nfa_set_cons (struct rx_nfa * rx, struct hashtree * memo, struct rx_nfa_state * state, struct rx_nfa_state_set * set); static struct rx_nfa_state_set * nfa_set_adjoin (struct rx_nfa * rx, struct hashtree * memo, struct rx_nfa_state * state, struct rx_nfa_state_set * set); static struct rx_nfa_state_set * nfa_set_union (struct rx_nfa * rx, struct hashtree * memo, struct rx_nfa_state_set * a, struct rx_nfa_state_set * b); static int eclose_node (struct rx_nfa * rx, struct rx_nfa_state * outnode, struct rx_nfa_state * node); static struct hashtree_rules nfa_set_hash_rules; static int n_edges_allocated = 0; /************************************************************************ *(h0 "Non-deterministic Finite-state Automata" * :includes ("rx/nfa.h")) * * * A regexp which is a regular expression has a natural representation * as a non-deterministic finite-state automata which in turn has a * natural representation as a graph of states and edges. * * To compare a regular expression to a string, Rx builds an NFA from * the expression, and then a DFA (deterministic automata) from the NFA. * * The functions and types in this chapter are concerned with representing * and building non-deterministic finite-state automata. * * Equal regexps (in the sense of `rx_exp_equal') must always yield * equivalent non-deterministic finite-state automata. We can take * advantage of this to save space and time by reusing a single NFA * whenever two regexps are equal. * * The savings is large: not only do we avoid allocating a second NFA, * but more importantly, we will build only a single DFA for the two * regexps. Cache space for DFA is precious and it is expensive to * build a DFA. * * Procedures are provided which maintain a cached mapping from * regexps to NFA. Using this interface, equal regexps * (`rx_exp_equal') will tend to yield NFA which are equal (`=='). */ /*(menu) */ /*(include-documentation "nfa.h") */ /************************************************************************ *(h1 "Translating an Expression Tree to an NFA") * * Given a *regular expression* (not a *true regexp*) syntax tree (see * xref:"Regexp Expression Trees"), this function builds an NFA for * the expression. */ /*(c rx_build_nfa) * void rx_build_nfa (struct rx_nfa *rx, * struct rx_exp_node *rexp, * struct rx_nfa_state **start, * struct rx_nfa_state **end); * * Build an NFA for regular expression `rexp'. * * States and edges of the NFA are added to `rx'. * * `*start' and `*end' are filled in with the start * and end states of the automata. They may be initialized * to 0, or to pre-existing NFA states. * * The start state returned by this function does not automatically * become the start state of the overall NFA and the end state * returned by this function does not automatically have a non-0 state * label (unless the expression ends with a "cut" operator). See * xref:"The Last Step of Building an NFA". */ int rx_build_nfa (struct rx_nfa *rx, struct rx_exp_node *rexp, struct rx_nfa_state **start, struct rx_nfa_state **end) { jmp_buf err_escape; if (setjmp (err_escape)) { return -1; } rx_build_nfa_internal (rx, rexp, start, end, &err_escape); return 0; } static void rx_build_nfa_internal (struct rx_nfa *rx, struct rx_exp_node *rexp, struct rx_nfa_state **start, struct rx_nfa_state **end, jmp_buf * err_escape) { struct rx_nfa_edge *edge; if (!*start) { *start = rx_nfa_state (rx); if (!*start) longjmp (*err_escape, 1); } if (!*end) { *end = rx_nfa_state (rx); if (!*end) longjmp (*err_escape, 1); } if (!rexp) { if (!rx_nfa_edge (rx, ne_epsilon, *start, *end)) longjmp (*err_escape, 1); return; } switch (rexp->type) { case r_cset: { bits cset; cset = bits_dup (rexp->cset); if (!cset) longjmp (*err_escape, 1); edge = rx_nfa_cset_edge (rx, ne_cset, cset, *start, *end); if (!edge) longjmp (*err_escape, 1); return; } case r_string: { t_uchar * str; size_t pos; size_t len; struct rx_nfa_state * from; bits cset; uni_iscan_fn scan; str = rexp->str; len = rexp->str_len; scan = uni_encoding_iscan_fn (rexp->encoding); pos = 0; from = *start; while (pos < len) { t_unicode c; struct rx_nfa_state * to; c = scan (str, &pos, len); invariant ((c != UNI_SCAN_INPUT_TRUNCATED) && !uni_is_bogus (c)); if (pos == len) to = *end; else { to = rx_nfa_state (rx); if (!to) longjmp (*err_escape, 1); } cset = bits_alloc (rx_nfa_cache_limits (), rx->bitset_rule); if (!cset) longjmp (*err_escape, 1); if (bits_adjoin (cset, c)) { bits_free (cset); longjmp (*err_escape, 1); } edge = rx_nfa_cset_edge (rx, ne_cset, cset, from, to); if (!edge) longjmp (*err_escape, 1); from = to; } return; } case r_interval: case r_star: { struct rx_nfa_state * star_start; struct rx_nfa_state * star_end; star_start = 0; star_end = 0; rx_build_nfa_internal (rx, rexp->left, &star_start, &star_end, err_escape); if ( !rx_nfa_edge (rx, ne_epsilon, star_start, star_end) || !rx_nfa_edge (rx, ne_epsilon, *start, star_start) || !rx_nfa_edge (rx, ne_epsilon, star_end, *end) || !rx_nfa_edge (rx, ne_epsilon, star_end, star_start)) longjmp (*err_escape, 1); return; } case r_cut: { struct rx_nfa_state * cut_end; cut_end = rx_nfa_state (rx); if (!cut_end) longjmp (*err_escape, 1); if (!rx_nfa_edge (rx, ne_epsilon, *start, cut_end)) longjmp (*err_escape, 1); cut_end->state_label = rexp->intval; return; } case r_parens: rx_build_nfa_internal (rx, rexp->left, start, end, err_escape); return; case r_right_concat: case r_concat: { struct rx_nfa_state *shared; shared = 0; rx_build_nfa_internal (rx, rexp->left, start, &shared, err_escape); rx_build_nfa_internal (rx, rexp->right, &shared, end, err_escape); return; } case r_alternate: { struct rx_nfa_state *ls = 0; struct rx_nfa_state *le = 0; struct rx_nfa_state *rs = 0; struct rx_nfa_state *re = 0; ls = 0; le = 0; rs = 0; re = 0; rx_build_nfa_internal (rx, rexp->left, &ls, &le, err_escape); rx_build_nfa_internal (rx, rexp->right, &rs, &re, err_escape); if ( !rx_nfa_edge (rx, ne_epsilon, *start, ls) || !rx_nfa_edge (rx, ne_epsilon, *start, rs) || !rx_nfa_edge (rx, ne_epsilon, le, *end) || !rx_nfa_edge (rx, ne_epsilon, re, *end)) longjmp (*err_escape, 1); return; } case r_context: if (!rx_nfa_edge (rx, ne_epsilon, *start, *end)) longjmp (*err_escape, 1); return; default: panic ("unreconized node type in rx_build_nfa_internal"); } } /************************************************************************ *(h1 "Shared NFA Functions") * */ struct rx_cached_rexp { struct rx_unfa unfa; struct rx_cached_rexp * next; struct rx_cached_rexp * prev; struct hashtree_item * hash_item; }; static int delayed = 0; static struct hashtree unfa_table = { 0 }; static struct rx_cached_rexp * free_queue = 0; static int unfa_hits = 0; static int unfa_misses = 0; static int unfa_saves = 0; void rx__nfa_cache_statistics (size_t * threshold, size_t * failure_pt, size_t * in_use, size_t * high_water_mark, int * hits, int * misses, int * saves) { if (threshold) *threshold = rx_nfa_cache_threshold (); if (failure_pt) *failure_pt = rx_nfa_cache_failure_pt (); if (high_water_mark) *high_water_mark = rx_nfa_cache_high_water_mark (); if (in_use) *in_use = rx_nfa_cache_in_use (); if (hits) *hits = unfa_hits; if (misses) *misses = unfa_misses; if (saves) *saves = unfa_saves; } static int unfa_equal (void * va, void * vb, struct hashtree_rules * rules) { return rx_exp_equal ((struct rx_exp_node *)va, (struct rx_exp_node *)vb); } static struct hashtree * unfa_hash_alloc (struct hashtree_rules * rules) { return (struct hashtree *)rx_nfa_cache_soft_malloc (sizeof (struct hashtree)); } static void unfa_free_hash (struct hashtree * tab, struct hashtree_rules * rules) { rx_nfa_cache_free ((char *)tab); } static struct hashtree_item * unfa_hash_item_alloc (void * key, struct hashtree_rules * rules) { struct hashtree_item * it; it = (struct hashtree_item *)rx_nfa_cache_soft_malloc (sizeof (*it)); if (!it) return 0; it->key = key; it->binding = 0; return it; } static void unfa_free_hash_item (struct hashtree_item * item, struct hashtree_rules * rules) { rx_nfa_cache_free ((char *)item); } static struct hashtree_rules unfa_rules = { unfa_equal, unfa_hash_alloc, unfa_free_hash, unfa_hash_item_alloc, unfa_free_hash_item }; static struct rx_cached_rexp * canonical_unfa (struct hashtree * table, struct rx_exp_node * rexp, int cset_size) { struct hashtree_item * it; it = hashtree_store (table, rx_exp_hash (rexp), rexp, &unfa_rules); if (!it) return 0; if (it->binding == 0) { struct rx_cached_rexp * cr; cr = (struct rx_cached_rexp *)rx_nfa_cache_malloc (sizeof (*cr)); if (!cr) { hashtree_delete (it, &unfa_rules); return 0; } if (it->key == (void *)rexp) rx_save_exp (rexp); mem_set0 ((char *)cr, sizeof (*cr)); it->binding = (void *)cr; cr->unfa.nfa = 0; cr->unfa.exp = rexp; cr->hash_item = it; if (rexp) { rexp->next_same_nfa = rexp; rexp->prev_same_nfa = rexp; } rx_save_exp (rexp); } return (struct rx_cached_rexp *)it->binding; } static struct rx_nfa * rx_unfa_to_nfa (struct rx_cached_rexp * cr, struct rx_exp_node * exp, int cset_size) { struct rx_nfa * new_rx; if (cr->unfa.nfa) return cr->unfa.nfa; new_rx = rx_nfa_xalloc (cset_size); if (!new_rx) return 0; { struct rx_nfa_state * start; struct rx_nfa_state * end; start = end = 0; if (rx_build_nfa (new_rx, exp, &start, &end)) { rx_free_nfa (new_rx); return 0; } end->state_label = 1L; rx_set_start_state (new_rx, start); } cr->unfa.nfa = new_rx; return new_rx; } /*(c rx_unfa) * struct rx_unfa * rx_unfa (struct rx_exp_node * exp, * int cset_size); * * Construct a unique NFA for regexp `exp'. For equal * (`rx_exp_equal') arguments, an equal (`==') value is usually, but * not always returned. For equal (`==') arguments, an equal (`==') * value is always returned. */ struct rx_unfa * rx_unfa (struct rx_exp_node * exp, int cset_size) { struct rx_cached_rexp * cr; if (exp && exp->cr) { ++unfa_hits; cr = exp->cr; } else { cr = canonical_unfa (&unfa_table, exp, cset_size); if (!cr) return 0; if (exp) { exp->cr = cr; exp->next_same_nfa = cr->unfa.exp; exp->prev_same_nfa = cr->unfa.exp->prev_same_nfa; exp->next_same_nfa->prev_same_nfa = exp; exp->prev_same_nfa->next_same_nfa = exp; } if (cr->unfa.nfa) ++unfa_hits; else ++unfa_misses; } if (cr->next) { if (free_queue == cr) { free_queue = cr->next; if (free_queue == cr) free_queue = 0; } cr->next->prev = cr->prev; cr->prev->next = cr->next; cr->next = 0; cr->prev = 0; --delayed; ++unfa_saves; } ++cr->unfa.refs; if (!rx_unfa_to_nfa (cr, exp, cset_size)) { rx_free_unfa (&cr->unfa); return 0; } return &cr->unfa; } /*(c rx_save_unfa) * void rx_save_unfa (struct rx_unfa * unfa); * * Increment the reference count for a unique NFA. */ void rx_save_unfa (struct rx_unfa * unfa) { ++(unfa->refs); } /*(c rx_free_unfa) * void rx_free_unfa (struct rx_unfa * unfa); * * Decrement the reference count for a unique NFA. If the * reference count drops to 0, the NFA may be destroyed. * * In fact, a queue is kept of unique NFA with 0 references. The NFA * on that queue can be spared death by a call to `rx_unfa'. If the * queue size exceeds a fixed limit, the oldest NFA are finally * discarded from the queue. See also the next function: * `rx_set_unfa_release_delay'. */ void rx_free_unfa (struct rx_unfa * unfa) { struct rx_cached_rexp * cr; cr = (struct rx_cached_rexp *)unfa; if (!cr) return; if (!--cr->unfa.refs) { if (!free_queue) { free_queue = cr; cr->next = cr->prev = cr; } else { cr->next = free_queue; cr->prev = free_queue->prev; cr->next->prev = cr; cr->prev->next = cr; } ++delayed; } else return; } int rx__really_free_unfa (void) { if (!delayed) return -1; else { struct rx_cached_rexp * it; it = free_queue; if (it->unfa.refs) panic ("freeing unfa with non-0 refs"); free_queue = it->next; if (!--delayed) free_queue = 0; it->prev->next = it->next; it->next->prev = it->prev; if (it->unfa.exp) { struct rx_exp_node * same_nfa; same_nfa = it->unfa.exp; same_nfa->prev_same_nfa->next_same_nfa = 0; do { struct rx_exp_node * next; next = same_nfa->next_same_nfa; same_nfa->next_same_nfa = 0; same_nfa->prev_same_nfa = 0; same_nfa->cr = 0; same_nfa = next; } while (same_nfa); } rx_free_exp ((struct rx_exp_node *)it->hash_item->key); hashtree_delete (it->hash_item, &unfa_rules); rx_free_nfa (it->unfa.nfa); rx_free_exp (it->unfa.exp); rx_nfa_cache_free (it); return 0; } } /************************************************************************ *(h1 "Low-level NFA Functions") * * These are the low-level functions for building NFA. */ /*(menu) */ /************************************************************************ *(h2 "Allocating and Freeing an NFA") * */ static unsigned long rx_id = 0; /*(c rx_nfa_xalloc) * struct rx_nfa * rx_nfa_xalloc (int cset_size); * * Allocate and return a new non-deterministic automata. * Initially, the automata has no states or edges. * * This function panics if allocation fails or * if more than `2**(8*sizeof(unsigned long))' * automata have been allocated. * * The next step in creating an automata is to add * states and edges. See xref:"rx_build_nfa" and * xref:"Building an NFA State by State". */ struct rx_nfa * rx_nfa_xalloc (int cset_size) { struct rx_nfa * new_rx; if ((cset_size != 256) && (cset_size != (1 << 21))) panic ("unhandled cset_size in rx_nfa_xalloc"); new_rx = (struct rx_nfa *)rx_nfa_cache_malloc (sizeof (*new_rx)); if (!new_rx) return 0; mem_set0 ((char *)new_rx, sizeof (*new_rx)); new_rx->rx_id = rx_id++; if (rx_id == 0) panic ("rx id wraparound!"); new_rx->local_cset_size = cset_size; switch (cset_size) { case 256: new_rx->bitset_rule = rx_8bit_bits_tree_rule; break; case (1 << 21): new_rx->bitset_rule = uni_bits_tree_rule; break; default: panic ("unrecognized cset size in rx_nfa_xalloc"); break; } return new_rx; } static void rx_free_nfa_graph (struct rx_nfa *rx) { while (rx->nfa_states) { while (rx->nfa_states->edges) { if (rx->nfa_states->edges->cset) bits_free (rx->nfa_states->edges->cset); { struct rx_nfa_edge * e; e = rx->nfa_states->edges; rx->nfa_states->edges = rx->nfa_states->edges->next; rx_nfa_cache_free (e); } --n_edges_allocated; } { struct rx_nfa_state *n; n = rx->nfa_states; if (n->superstate_set) n->superstate_set->nfa_state = 0; rx->nfa_states = rx->nfa_states->next; rx_nfa_cache_free (n); } } } static void nfa_set_freer (struct hashtree_item * node, struct hashtree_rules * rules) { rx_nfa_cache_free ((char *)node->key); } /*(c rx_free_nfa) * void rx_free_nfa (struct rx_nfa * rx); * * Release all storage associated with the NFA `rx'. */ void rx_free_nfa (struct rx_nfa * rx) { hashtree_free_static (&rx->set_list_memo, nfa_set_freer, &nfa_set_hash_rules); mem_set0 ((char *)&rx->set_list_memo, sizeof (rx->set_list_memo)); rx_free_nfa_graph (rx); rx_nfa_cache_free (rx); } /************************************************************************ *(h2 "Building an NFA State by State") * * It is possible to construct an NFA without building an * expression tree first. These functions construct states * and edges. */ /*(c rx_nfa_state) * struct rx_nfa_state * rx_nfa_state (struct rx_nfa *rx); * * Allocate a new NFA state for the NFA `rx'. * * This function calls `panic' and does not return * if an allocation failure occurs. */ struct rx_nfa_state * rx_nfa_state (struct rx_nfa *rx) { struct rx_nfa_state * n; n = (struct rx_nfa_state *)rx_nfa_cache_malloc (sizeof (*n)); if (!n) return 0; mem_set0 ((char *)n, sizeof (*n)); n->id = rx->nfa_state_id++; n->next = rx->nfa_states; rx->nfa_states = n; return n; } /*(c rx_nfa_edge) * struct rx_nfa_edge * rx_nfa_edge (struct rx_nfa *rx, * enum rx_nfa_etype type, * struct rx_nfa_state *start, * struct rx_nfa_state *dest); * * * Allocate a new NFA edge for the NFA `rx'. * * `type' indicates which kind of edge is being built. If the type is * `ne_cset', then the `cset' field of the new edge should be set to a * privately allocated character set. See xref:"struct rx_nfa_edge", but * also see the next function, `rx_nfa_cset_edge' * * `start' and `dest' describe the source and destination states * of the edge. * * This function calls `panic' and does not return if an allocation * failure occurs. */ struct rx_nfa_edge * rx_nfa_edge (struct rx_nfa *rx, enum rx_nfa_etype type, struct rx_nfa_state *start, struct rx_nfa_state *dest) { struct rx_nfa_edge *e; e = (struct rx_nfa_edge *)rx_nfa_cache_malloc (sizeof (*e)); if (!e) return 0; mem_set0 ((t_uchar *)e, sizeof (*e)); e->type = type; e->cset = 0; e->dest = dest; e->next = start->edges; start->edges = e; if (type == ne_cset) start->has_cset_edges = 1; ++n_edges_allocated; return e; } /* THESE TWO FUNCTIONS MUST BE ADJACENT FOR THE MANUAL TO READ * CORRECTLY. (rx_nfa_edge, rx_nfa_cset_edge) */ /*(c rx_nfa_cset_edge) * struct rx_nfa_edge * rx_nfa_cset_edge (struct rx_nfa *rx, * enum rx_nfa_etype type, * bits cset, * struct rx_nfa_state *start, * struct rx_nfa_state *dest); * * * Allocate a new NFA edge for the NFA `rx'. The new edge will * have a character set label. * * `type' indicates which kind of edge is being built. Ordinarily * this should be `ne_cset'. * * `cset' is used to initialize the field `cset' field of the edge. * `cset' is not copied and will be freed by `rx_nfa_cache_free' when this * edge is freed. * * `start' and `dest' describe the source and destination states * of the edge. * * This function returns 0 if an allocation failure occurs. In that * case, `cset' is not freed. */ struct rx_nfa_edge * rx_nfa_cset_edge (struct rx_nfa *rx, enum rx_nfa_etype type, bits cset, struct rx_nfa_state *start, struct rx_nfa_state *dest) { struct rx_nfa_edge *e; e = rx_nfa_edge (rx, type, start, dest); if (!e) return 0; e->cset = cset; return e; } /************************************************************************ *(h2 "The Last Step of Building an NFA") * * * After building an NFA graph, the last step is to distinguish the * unique start state of the NFA and label all of the final states * with non-0 labels. */ /*(c rx_set_start_state) * void rx_set_start_state (struct rx_nfa * rx, struct rx_nfa_state * n); * * Set the start state of the NFA `rx'. */ void rx_set_start_state (struct rx_nfa * rx, struct rx_nfa_state * n) { rx->start_nfa_state = n; n->is_start = 1; } /*(c rx_set_state_label) * void rx_set_state_label (struct rx_nfa * rx, * struct rx_nfa_state * n, * int label) * * Set the label of state `n' to `label'. */ void rx_set_state_label (struct rx_nfa * rx, struct rx_nfa_state * n, int label) { n->state_label = label; } /************************************************************************ * Managing Sets of NFA States * */ /* static int nfa_set_cmp (void * va, void * vb); * * Compare two NFA state sets. The ordering of state sets * is well defined but unspecified. Return -1 if `va' is * less than `vb', 1 if it is greater, and 0 if they are equal. */ static int nfa_set_cmp (void * va, void * vb) { struct rx_nfa_state_set * a; struct rx_nfa_state_set * b; a = (struct rx_nfa_state_set *)va; b = (struct rx_nfa_state_set *)vb; return ((va == vb) ? 0 : (!va ? -1 : (!vb ? 1 : (a->car->id < b->car->id ? -1 : (a->car->id > b->car->id ? 1 : nfa_set_cmp ((void *)a->cdr, (void *)b->cdr)))))); } /* static int nfa_set_equal (void * va, void * vb, struct hashtree_rules * rules); * * Return 1 if `va' and `vb' are equal state sets. * We know that if they are equal, their `cdr's must be equal * in the sense of `==', but their cars need not be. */ static int nfa_set_equal (void * va, void * vb, struct hashtree_rules * rules) { struct rx_nfa_state_set * a; struct rx_nfa_state_set * b; a = (struct rx_nfa_state_set *)va; b = (struct rx_nfa_state_set *)vb; return ( (a == b) || ( a && b && (a->car->id == b->car->id) && (a->cdr == b->cdr))); } static struct hashtree * nfa_set_hash_alloc (struct hashtree_rules * rules) { return (struct hashtree *)rx_nfa_cache_soft_malloc (sizeof (struct hashtree)); } static void nfa_set_free_hash (struct hashtree * tab, struct hashtree_rules * rules) { rx_nfa_cache_free ((char *)tab); } static struct hashtree_item * nfa_set_hash_item_alloc (void * key, struct hashtree_rules * rules) { struct hashtree_item * it; it = (struct hashtree_item *)rx_nfa_cache_soft_malloc (sizeof (*it)); if (!it) return 0; it->key = key; it->binding = 0; return it; } static void nfa_set_free_hash_item (struct hashtree_item * item, struct hashtree_rules * rules) { rx_nfa_cache_free ((char *)item); } static struct hashtree_rules nfa_set_hash_rules = { nfa_set_equal, nfa_set_hash_alloc, nfa_set_free_hash, nfa_set_hash_item_alloc, nfa_set_free_hash_item }; /* static struct rx_nfa_state_set * nfa_set_cons (struct rx_nfa * rx, * struct hashtree * memo, * struct rx_nfa_state * state, * struct rx_nfa_state_set * set); * * Construct a new state set by adding a new state to the head of the list. * For equal `set' and `state', return equal (`==') results. */ static struct rx_nfa_state_set * nfa_set_cons (struct rx_nfa * rx, struct hashtree * memo, struct rx_nfa_state * state, struct rx_nfa_state_set * set) { struct rx_nfa_state_set template; struct hashtree_item * node; unsigned long hash_value; template.car = state; template.cdr = set; hash_value = ( (unsigned long)set ^ (((unsigned long)state) << 19) ^ (((unsigned long)state) >> (8 * sizeof (unsigned long) - 19))); node = hashtree_store (memo, hash_value, &template, &nfa_set_hash_rules); if (!node) return 0; if (node->key == &template) { struct rx_nfa_state_set * l; l = (struct rx_nfa_state_set *) rx_nfa_cache_malloc (sizeof (*l)); if (!l) { node->key = 0; hashtree_delete (node, &nfa_set_hash_rules); return 0; } *l = template; node->key = (void *) l; } return (struct rx_nfa_state_set *)node->key; } /* static struct rx_nfa_state_set * nfa_set_adjoin (struct rx_nfa * rx, * struct hashtree * memo, * struct rx_nfa_state * state, * struct rx_nfa_state_set * set); * * Construct a state set by adding a state to the appropriate position * in the (sorted) list. * * For equal `set' and `state', return equal (`==') results. */ static struct rx_nfa_state_set * nfa_set_adjoin (struct rx_nfa * rx, struct hashtree * memo, struct rx_nfa_state * state, struct rx_nfa_state_set * set) { if (!set || (state->id < set->car->id)) return nfa_set_cons (rx, memo, state, set); if (state->id == set->car->id) return set; else { struct rx_nfa_state_set * newcdr; newcdr = nfa_set_adjoin (rx, memo, state, set->cdr); if (!newcdr) return 0; if (newcdr != set->cdr) set = nfa_set_cons (rx, memo, set->car, newcdr); return set; } } /* static struct rx_nfa_state_set * nfa_set_union (struct rx_nfa * rx, * struct hashtree * memo, * struct rx_nfa_state_set * a, * struct rx_nfa_state_set * b); * * Construct a state set containing the members of `a' and `b'. * * For equal sets of members, return equal (`==') results. */ static struct rx_nfa_state_set * nfa_set_union (struct rx_nfa * rx, struct hashtree * memo, struct rx_nfa_state_set * a, struct rx_nfa_state_set * b) { if (!a) return b; if (!b) return a; if (a->car->id < b->car->id) { struct rx_nfa_state_set * u; u = nfa_set_union (rx, memo, a->cdr, b); if (!u) return 0; return nfa_set_cons (rx, memo, a->car, u); } else if (b->car->id < a->car->id) { struct rx_nfa_state_set * u; u = nfa_set_union (rx, memo, b->cdr, a); if (!u) return 0; return nfa_set_cons (rx, memo, b->car, u); } else return nfa_set_union (rx, memo, a, b->cdr); } /************************************************************************ *(h2 "Computing Epsilon Closures") * * Given an NFA and a state `S' from that NFA, there is a set of NFA * states which is the set of all states that can be reached from `S' * by following 0 or more epsilon edges. This set plays an important * role in the construction of a deterministic automata from a * non-deterministic automata. The function in this section computes * that set. * */ /* static void eclose_node (struct rx_nfa * rx, * struct rx_nfa_state * outnode, * struct rx_nfa_state * node); * * Compute the epsilon closure of one node of the `nfa' graph. * Do this by traversing epsilon edges while avoiding cycles. */ static int eclose_node (struct rx_nfa * rx, struct rx_nfa_state * outnode, struct rx_nfa_state * node) { struct rx_nfa_edge *e; if (node->closure_computed) { outnode->closure = nfa_set_union (rx, &rx->set_list_memo, outnode->closure, node->closure); if (!outnode->closure) return -1; } if (node->mark) return 0; node->mark = 1; outnode->closure = nfa_set_adjoin (rx, &rx->set_list_memo, node, outnode->closure); if (!outnode->closure) { node->mark = 0; return -1; } e = node->edges; while (e) { if (e->type == ne_epsilon) { if (eclose_node (rx, outnode, e->dest)) { node->mark = 0; return -1; } } e = e->next; } node->mark = 0; return 0; } /*(c rx_state_closure) * struct rx_nfa_state_set * rx_state_closure (struct rx_nfa * rx, * struct rx_nfa_state * n); * * Return the state set which is the epsilon-edge closure of NFA state * `n' in NFA `rx'. This function records its result so that * subsequent calls with the same arguments run faster. The first * call for particular arguments can be slow, depending on the size * and structure of the NFA graph. * * If an allocation failure occurs, this function panics and exits. */ struct rx_nfa_state_set * rx_state_closure (struct rx_nfa * rx, struct rx_nfa_state * n) { if (!n->closure_computed) { if (eclose_node (rx, n, n)) return 0; n->closure_computed = 1; return n->closure; } return n->closure; } tla-1.3.5+dfsg/src/hackerlab/rx/bits-tree-rules.h0000644000175000017500000000105510457621774020306 0ustar useruser/* bits-tree-rules.h - declarations for unicode bitset trees * **************************************************************** * Copyright (C) 2000 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__RX__BITS_TREE_RULES_H #define INCLUDE__RX__BITS_TREE_RULES_H #include "hackerlab/bitsets/uni-bits.h" extern struct bits_tree_rule rx_8bit_bits_tree_rule[]; /* automatically generated __STDC__ prototypes */ #endif /* INCLUDE__RX__BITS_TREE_RULES_H */ tla-1.3.5+dfsg/src/hackerlab/rx/dfa-utf8.h0000644000175000017500000000155110457621774016677 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:41:38 2001 (dfa-utf8.h) */ /* dfa-utf8.h - * **************************************************************** * Copyright (C) 2000 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__RX__DFA_UTF8_H #define INCLUDE__RX__DFA_UTF8_H #include "hackerlab/machine/types.h" #include "hackerlab/rx/dfa.h" /* automatically generated __STDC__ prototypes */ extern int rx_dfa_utf8_fits (int * label, struct rx_dfa * frame, const t_uchar * burst, size_t len); extern int rx_dfa_utf8_advance (struct rx_dfa * frame, const t_uchar * burst, size_t len); extern int rx_dfa_utf8_advance_to_final (size_t * amt, struct rx_dfa * frame, const t_uchar * burst, size_t len); #endif /* INCLUDE__RX__DFA_UTF8_H */ tla-1.3.5+dfsg/src/hackerlab/rx/dfa-utf16.c0000644000175000017500000002362410457621774016756 0ustar useruser/* dfa-utf16.c - utf16 functions that manipulate regexps as DFAs * **************************************************************** * Copyright (C) 1998, 2000 Thomas Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/bugs/panic.h" #include "hackerlab/rx/escape.h" #include "hackerlab/rx/super.h" #include "hackerlab/rx/dfa-utf16.h" /************************************************************************ *(h0 "DFA String Comparisons for 16-bit Character Storage Units" * :includes ("rx/dfa.h" * "rx/dfa_utf16.h")) * * * A common use for regular expressions is to compile them to DFA and * compare them to strings using a loop that advances through DFA * states. * * In Rx, the DFA data structure has been heavily optimized for such * loops. The functions in this chapter implement the most common * kinds of DFA loop, taking full advantage of the Rx optimizations. */ /*(menu) */ /************************************************************************ *(h1 "DFA Comparison Functions for 16-bit Character Storage Units") * * The functions in this section compare an input string to a regular * expression by advancing through DFA states according to the * characters in the input string. */ /*(c rx_dfa_utf16_fits) * int rx_dfa_utf16_fits (struct rx_dfa * frame, * const t_uint16 * burst, * size_t len); * * * Compare a DFA to string: is the entire string matched by the DFA? * Return a non-zero value (the state-label of the final DFA state) if * the string matches, 0 otherwise. * * This function works by advancing the DFA through all of the * characters in the input string and checking the state label of the * last state reached. If that label is not 0, then the string * matches. If that label is 0, or if an illegal input character is * reached before the end of the input string, the string does not * match. * * It is possible to asynchronously abort a call to this function. * See xref:"Exiting Long-running Matches". */ int rx_dfa_utf16_fits (int * label, struct rx_dfa * frame, const t_uint16 * burst, size_t len) { int adv; adv = rx_dfa_utf16_advance (frame, burst, len); if (adv < 0) return -1; else if (!adv) { *label = 0; return 0; } else { *label = frame->final_tag; return 0; } } /*(c rx_dfa_utf16_advance) * int rx_dfa_advance (struct rx_dfa * frame, * const t_uint16 * burst, * size_t len); * * * Advance a DFA, reading characters from the input string. Stop at * the end of the string, returning 1 or when a character is * encountered for which no transition is defined, returning 0. * * This is similar to `rx_dfa_fits', except that in this case, we * don't care about the state label of the final state. * * It is possible to asynchronously abort a call to this function. * See xref:"Exiting Long-running Matches". */ int rx_dfa_utf16_advance (struct rx_dfa * frame, const t_uint16 * burst, size_t len) { rx_transition_table inx_table; if (!len) return 1; inx_table = frame->state->transitions; rx_unlock_superstate (frame->rx, frame->state); frame->state = 0; while (len--) { struct rx_inx * inx; rx_transition_table next_table; if (rx_poll) (*rx_poll)(); inx = rx_transition16 (inx_table, *burst); next_table = (rx_transition_table)inx->data; while (!next_table) { struct rx_superstate * state; state = rx_transitions_to_suprestate (inx_table); switch ((long)inx->inx) { case rx_huge_char: { t_uint16 hi; t_uint16 lo; t_unicode c; hi = *burst; if (!len) goto handle_as_backtrack; --len; ++burst; lo = *burst; if (!uni_is_low_surrogate (lo)) goto handle_as_backtrack; c = uni_assemble_surrogates (hi, lo); inx = rx_transition21 (state->huge_char_transitions, c); next_table = (rx_transition_table)inx->data; while (!next_table) { switch ((enum rx_opcode)inx->inx) { default: case rx_huge_char: goto handle_by_panic; case rx_backtrack: goto handle_as_backtrack; case rx_cache_miss: inx = rx_handle_cache_miss (frame->rx, state, c, inx->data_2); if (!inx) { frame->state = 0; frame->final_tag = 0; return -1; } next_table = (rx_transition_table)inx->data; continue; } } continue; } case rx_backtrack: handle_as_backtrack: /* RX_BACKTRACK means that we've reached the empty * superstate, indicating that match can't succeed * from this point. */ frame->state = 0; frame->final_tag = 0; return 0; case rx_cache_miss: /* Because the superstate NFA is lazily constructed, * and in fact may erode from underneath us, we sometimes * have to construct the next instruction from the hard way. * This invokes one step in the lazy-conversion. */ inx = rx_handle_cache_miss (frame->rx, state, *burst, inx->data_2); if (!inx) { frame->state = 0; frame->final_tag = 0; return -1; } next_table = (rx_transition_table)inx->data; continue; /* No other instructions are legal here. */ default: handle_by_panic: panic ("unrecognized instruction in rx_dfa_advance"); } } inx_table = next_table; ++burst; } frame->state = rx_transitions_to_suprestate (inx_table); frame->final_tag = frame->state->members->state_label; rx_lock_superstate (frame->rx, frame->state); return 1; } /*(c rx_dfa_utf16_advance_to_final) * size_t rx_dfa_utf16_advance_to_final (struct rx_dfa * frame, * const t_uint16 * burst, * size_t len); * * Advance a DFA, reading characters from a string. * * Stop at the end of the string, a character with no transition, or * when a superstate is encountered with a non-0 label. Return the * number of characters read from the string. * * This function stops on a transition *into* a state with a non-0 * state label. It doesn't matter if the machine is initially in a * state with a non-0 label: the machine will consume the first input * character regardless. That means that if your regular expression * can match the empty string, you must detect this condition before * calling `rx_dfa_advance_to_final' by checking `dfa->final_tag' * after setting the start state of the DFA. * * If the match stopped in a final state, `dfa->final_tag' contains * the non-0 state label of the final state, otherwise, it contains 0. * If the match stopped on an illegal character, `dfa->state' is 0, * otherwise it is non-0. * * It is possible to asynchronously abort a call to this function. * See xref:"Exiting Long-running Matches". */ int rx_dfa_utf16_advance_to_final (size_t * amt, struct rx_dfa * frame, const t_uint16 * burst, size_t len) { size_t initial_len; rx_transition_table inx_table; if (!len) { *amt = 0; return 1; } initial_len = len; inx_table = frame->state->transitions; rx_unlock_superstate (frame->rx, frame->state); frame->state = 0; while (len--) { struct rx_inx * inx; rx_transition_table next_table; if (rx_poll) (*rx_poll)(); inx = rx_transition16 (inx_table, *burst); next_table = (rx_transition_table)inx->data; while (!next_table) { struct rx_superstate * state; state = rx_transitions_to_suprestate (inx_table); switch ((enum rx_opcode)inx->inx) { case rx_huge_char: { t_uint16 hi; t_uint16 lo; t_unicode c; hi = *burst; if (!len) goto handle_as_backtrack; --len; ++burst; lo = *burst; if (!uni_is_low_surrogate (lo)) goto handle_as_backtrack; c = uni_assemble_surrogates (hi, lo); inx = rx_transition21 (state->huge_char_transitions, c); next_table = (rx_transition_table)inx->data; while (!next_table) { switch ((enum rx_opcode)inx->inx) { default: case rx_huge_char: goto handle_by_panic; case rx_backtrack: goto handle_as_backtrack; case rx_cache_miss: inx = rx_handle_cache_miss (frame->rx, state, c, inx->data_2); if (!inx) { frame->state = 0; frame->final_tag = 0; return -1; } next_table = (rx_transition_table)inx->data; continue; } } continue; } case rx_backtrack: handle_as_backtrack: /* RX_BACKTRACK means that we've reached the empty * superstate, indicating that match can't succeed * from this point. */ frame->state = 0; frame->final_tag = 0; *amt = (initial_len - len) - 1; return 0; case rx_cache_miss: /* Because the superstate NFA is lazily constructed, * and in fact may erode from underneath us, we sometimes * have to construct the next instruction from the hard way. * This invokes one step in the lazy-conversion. */ inx = rx_handle_cache_miss (frame->rx, state, *burst, inx->data_2); if (!inx) { frame->state = 0; frame->final_tag = 0; return -1; } next_table = (rx_transition_table)inx->data; continue; /* No other instructions are legal here. */ default: handle_by_panic: while (1) panic ("unrecognized instruction in rx_dfa_advance_to_final"); } } if (inx->data_2) { frame->state = rx_transitions_to_suprestate (next_table); rx_lock_superstate (frame->rx, frame->state); frame->final_tag = (long)inx->data_2; *amt = (initial_len - len); return 1; } inx_table = next_table; ++burst; } /* Consumed all of the characters. */ frame->state = rx_transitions_to_suprestate (inx_table); rx_lock_superstate (frame->rx, frame->state); frame->final_tag = 0; *amt = initial_len; return 0; } tla-1.3.5+dfsg/src/hackerlab/rx/dbug.c0000644000175000017500000001626210457621774016202 0ustar useruser/* dbug.c - debugging routines for rx * **************************************************************** * Copyright (C) 1998, 2000 Thomas Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/char/char-name.h" #include "hackerlab/char/char-class.h" #include "hackerlab/uni/coding.h" #include "hackerlab/bitsets/bits.h" #include "hackerlab/vu/vu.h" #include "hackerlab/vu/printfmt.h" #include "hackerlab/rx/dbug.h" /************************************************************************ *(h0 "Rx Debugging Functions" * :include ("rx/dbug.h")) * * * The functions in this section are for printing debugging information * from applications that use Rx. */ #ifdef HAVE_POSITIONAL_ARRAY_INITS #define AT(X) [X] = #else #define AT(X) #endif #define RX_EXP_NODE_TYPE_NAME(X) #X, static char *node_type_names[] = { RX_EXP_NODE_TYPES(NAME) }; static void print_cset_char (int fd, int x) { int errn; if ((x == ']') || (x == '[') || (x == '-') || (x == '^')) printfmt (&errn, fd, "\\%c", x); else if (x < 256) printfmt (&errn, fd, "%s", char_name[x]); else printfmt (&errn, fd, "\\u%04x", x); } static void print_cset (int fd, int cset_size, bits cs) { int x; int errn; if (!cs) printfmt (&errn, fd, "nil"); else { printfmt (&errn, fd, "["); x = 0; while (x < cset_size) { int y; x = bits_ffs_range (cs, x, cset_size); if (x < 0) break; y = bits_ffc_range (cs, x, cset_size); if (y < 0) y = cset_size + 1; print_cset_char (fd, x); if ((y - 1) != x) { printfmt (&errn, fd, "-"); print_cset_char (fd, (y - 1)); } x = y; } printfmt (&errn, fd, "]"); } } static void print_string (int fd, enum uni_encoding_scheme encoding, t_uchar * str, size_t str_len, t_uchar bracket) { int errn; if (!str && bracket) printfmt (&errn, fd, "nil"); else { size_t pos; if (bracket) printfmt (&errn, fd, "\""); pos = 0; while (pos < str_len) { t_unicode c; c = (uni_encoding_iscan_fn (encoding)) (str, &pos, str_len); if (c < 256) printfmt (&errn, fd, "%s", char_name[c]); else print_cset_char (fd, c); } if (bracket) printfmt (&errn, fd, "\""); } } static void spaces (int fd, int n) { int errn; while (n--) printfmt (&errn, fd, " "); } /*(c rx_print_rexp) * void rx_print_rexp (int fd, * int cset_size, * int indent, * struct rx_exp_node * rexp); * * Print the expression `rexp' as a list of nodes, using indenting to * indicate subexpression nesting. See xref:"Regexp Expression * Trees". * * `fd' is the descriptor on which to print the expression. * * `cset_size' is the character set size of the expression (usually * 256). * * `indent' is the initial level of indenting for the printed * expression (usually 0). */ void rx_print_rexp (int fd, int cset_size, int indent, struct rx_exp_node * rexp) { int errn; spaces (fd, indent); if (!rexp) printfmt (&errn, fd, "nil\n"); else { printfmt (&errn, fd, "Node %lx type %d (%s), iv=%ld(%c), iv2=%ld, len=%ld obs=%d max_paren=%d, min_paren=%d cs=", (unsigned long) rexp, rexp->type, node_type_names[rexp->type], rexp->intval, (( (0 <= rexp->intval) && (256 > rexp->intval) && char_is_printable (rexp->intval)) ? (char)rexp->intval : ' '), rexp->intval2, rexp->len, rexp->observed, rexp->max_enclosed_paren, rexp->min_enclosed_paren); print_cset (fd, cset_size, rexp->cset); printfmt (&errn, fd, " s="); print_string (fd, rexp->encoding, rexp->str, rexp->str_len, 1); printfmt (&errn, fd, "\n"); if (rexp->left || rexp->right) { rx_print_rexp (fd, cset_size, indent + 2, rexp->left); rx_print_rexp (fd, cset_size, indent + 2, rexp->right); } } } /*(c rx_unparse_print_rexp) * void rx_unparse_print_rexp (int fd, * int cset_size, * struct rx_exp_node * rexp); * * Print the expression `rexp' using regexp syntax. * See xref:"Regexp Expression Trees". */ void rx_unparse_print_rexp (int fd, int cset_size, struct rx_exp_node * rexp) { int errn; if (!rexp) return; else switch (rexp->type) { case r_cset: if (1 != bits_population (rexp->cset)) print_cset (fd, cset_size, rexp->cset); else { int x; x = bits_ffs (rexp->cset); print_cset_char (fd, x); } break; case r_string: print_string (fd, rexp->encoding, rexp->str, rexp->str_len, 0); break; case r_parens: printfmt (&errn, fd, "("); rx_unparse_print_rexp (fd, cset_size, rexp->left); printfmt (&errn, fd, ")"); break; case r_context: printfmt (&errn, fd, "\\%c", (char)rexp->intval); break; case r_cut: printfmt (&errn, fd, "[[:cut %ld:]]", rexp->intval); break; case r_concat: rx_unparse_print_rexp (fd, cset_size, rexp->left); rx_unparse_print_rexp (fd, cset_size, rexp->right); break; case r_right_concat: rx_unparse_print_rexp (fd, cset_size, rexp->left); rx_unparse_print_rexp (fd, cset_size, rexp->right); break; case r_alternate: rx_unparse_print_rexp (fd, cset_size, rexp->left); printfmt (&errn, fd, "|"); rx_unparse_print_rexp (fd, cset_size, rexp->right); break; case r_star: rx_unparse_print_rexp (fd, cset_size, rexp->left); printfmt (&errn, fd, "*"); break; case r_interval: rx_unparse_print_rexp (fd, cset_size, rexp->left); printfmt (&errn, fd, "{%ld,%ld}", rexp->intval, rexp->intval2); break; } } static void rx_print_nfa_state (int fd, struct rx_nfa * rx, struct rx_nfa_state * state) { int errn; struct rx_nfa_edge * e; printfmt (&errn, fd, "state %d, state_label %ld, is_start %d\n", state->id, state->state_label, state->is_start); for (e = state->edges; e; e = e->next) { printfmt (&errn, fd, "\tEdge %s to %d ", (e->type == ne_cset ? "cset" : (e->type == ne_epsilon ? "epsilon" : "side effect")), e->dest->id); if (e->type == ne_cset) print_cset (fd, rx->local_cset_size, e->cset); else printfmt (&errn, fd, "epsilon"); printfmt (&errn, fd, "\n"); } } /*(c rx_print_nfa) * void rx_print_nfa (int fd, struct rx_nfa * rx); * * Print the NFA `rx' as a list of nodes and edges. See * xref:"Non-deterministic Finite-state Automata". * * `fd' is the descriptor on which to print the NFA. */ void rx_print_nfa (int fd, struct rx_nfa * rx) { struct rx_nfa_state * state; for (state = rx->nfa_states; state; state = state->next) rx_print_nfa_state (fd, rx, state); } /*(c rx_print_superstate) * void rx_print_superstate (int fd, struct rx_superstate * state); * * Print the DFA state `state' as a list of the NFA states that it * contains. See xref:"The Superstate DFA". * * `fd' is the descriptor on which to print the NFA. */ void rx_print_superstate (int fd, struct rx_superstate * state) { struct rx_superset * set; int errn; printfmt (&errn, fd, "superstate: "); set = state->members; while (set->car) { printfmt (&errn, fd, "%d ", set->car->id); set = set->cdr; } printfmt (&errn, fd, "\n"); } tla-1.3.5+dfsg/src/hackerlab/rx/dfa-utf16.h0000644000175000017500000000157510457621774016764 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:41:38 2001 (dfa-utf16.h) */ /* dfa-utf16.h - * **************************************************************** * Copyright (C) 2000 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__RX__DFA_UTF16_H #define INCLUDE__RX__DFA_UTF16_H #include "hackerlab/machine/types.h" #include "hackerlab/rx/dfa.h" /* automatically generated __STDC__ prototypes */ extern int rx_dfa_utf16_fits (int * label, struct rx_dfa * frame, const t_uint16 * burst, size_t len); extern int rx_dfa_utf16_advance (struct rx_dfa * frame, const t_uint16 * burst, size_t len); extern int rx_dfa_utf16_advance_to_final (size_t * amt, struct rx_dfa * frame, const t_uint16 * burst, size_t len); #endif /* INCLUDE__RX__DFA_UTF16_H */ tla-1.3.5+dfsg/src/hackerlab/rx/dfa.h0000644000175000017500000000507210457621774016015 0ustar useruser/* dfa.h - decls for manipulating regexps as DFAs * **************************************************************** * Copyright (C) 1998, 2000 Thomas Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__RX__DFA_H #define INCLUDE__RX__DFA_H /************************************************************************ *(h1 "DFA Data Structures") * */ #include "hackerlab/mem/alloc-limits.h" #include "hackerlab/rx/nfa.h" #include "hackerlab/rx/dfa-cache.h" #include "hackerlab/rx/super.h" /*(c #s"struct rx_dfa" :category type) * * This structure type holds pointers to an NFA and one state of the * DFA built from that NFA. In addition, it contains a copy of the * state label from that DFA state. * * In effect, this structure represents a virtual machine whose * semantics are defined by the NFA, whose internal state is * represented by the DFA state, and whose output is represented by * the state label and by a flag that says whether or not the machine * is able to accept additional characters from its current state. * * Rx provides functions which can advance these machines through * successive states by following transitions indicated by the * characters of an input string. * insert*/ struct rx_dfa { struct rx_nfa * rx; /* The NFA */ struct rx_superstate * state; /* The DFA state */ long final_tag; /* The DFA state label */ /* When a `struct rx_dfa' is first allocated, all of those fields * are 0. When the `state' field is not 0, it holds a lock on the * superstate it points to. */ }; /*end-insert */ /* automatically generated __STDC__ prototypes */ extern struct rx_dfa * rx_dfa_alloc (alloc_limits limits); extern void rx_dfa_free (alloc_limits limits, struct rx_dfa * dfa); extern void rx_init_dfa_from_nfa (struct rx_dfa * frame, struct rx_nfa * rx); extern void rx_init_dfa_from_dfa (struct rx_dfa * dest, struct rx_dfa * src); extern void rx_clear_dfa_state (struct rx_dfa * frame); extern int rx_dfa_goto_start_superstate (struct rx_dfa * frame, int storage_unit_size); extern int rx_dfa_can_continue (struct rx_dfa * frame); extern int rx_dfa_tag (struct rx_dfa * frame); extern int rx_dfa_fits (int * label, struct rx_dfa * frame, const t_uchar * burst, size_t len); extern int rx_dfa_advance (struct rx_dfa * frame, const t_uchar * burst, size_t len); extern int rx_dfa_advance_to_final (size_t * amt, struct rx_dfa * frame, const t_uchar * burst, size_t len); #endif /* INCLUDE__RX__DFA_H */ tla-1.3.5+dfsg/src/hackerlab/rx/bits-tree-rules.c0000644000175000017500000000066710457621774020311 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:41:38 2001 (bits-tree-rules.c) */ /* uni-bits.c - unicode bitset tree rules * **************************************************************** * Copyright (C) 2000 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/rx/bits-tree-rules.h" struct bits_tree_rule rx_8bit_bits_tree_rule[] = {{0, 256, 0, 0}}; tla-1.3.5+dfsg/src/hackerlab/rx/Makefile.in0000644000175000017500000000027110457621774017153 0ustar useruser include $(makefiles)/library-objects.mk ifeq ($(cgs__install_hackerlab),1) include $(makefiles)/install-includes.mk endif # tag: Tom Lord Tue Dec 4 14:52:23 2001 (rx/Makefile.in) # tla-1.3.5+dfsg/src/hackerlab/rx/tree.h0000644000175000017500000002006210457621774016216 0ustar useruser/* tree.h - parse tree decls for regexps * **************************************************************** * Copyright (C) 1998, 2000 Thomas Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__RX__TREE_H #define INCLUDE__RX__TREE_H #include "hackerlab/machine/types.h" #include "hackerlab/uni/coding.h" #include "hackerlab/bitsets/bits.h" #include "hackerlab/rx/bits-tree-rules.h" /*(h1 "The Expression Tree Structure") * */ /*(c #s"enum rx_exp_node_type" :category type) * enum rx_exp_node_type; * * Every expression node is tagged with a type that describes how * the node should be interpreted. * * The Rx representation of regexp expression trees contains a simple * optimization: a sub-tree which consists entirely of concatenations * of singleton character set nodes can be replaced by a single * node of type `r_string'. * * insert*/ #define RX_EXP_NODE_TYPES(FN) \ /* Match from a character set. `a' or `[a-z]' \ */ \ RX_EXP_NODE_TYPE_##FN(r_cset) \ \ /* Match two subexpressions in order. `ab' \ */ \ RX_EXP_NODE_TYPE_##FN(r_concat) \ \ /* Match two subexpressions in order. -no syntax- \ * However, maximize the length of the _right_ subexpression \ * not the _left_ subexpression. This is used to implement + \ * and {n,} \ */ \ RX_EXP_NODE_TYPE_##FN(r_right_concat) \ \ /* Choose one of two subexpressions. `a\|b' \ */ \ RX_EXP_NODE_TYPE_##FN(r_alternate) \ \ /* Match the subexpression any number of times. `a*' \ */ \ RX_EXP_NODE_TYPE_##FN(r_star) \ \ /* Shorthand for a concatenation of characters \ */ \ RX_EXP_NODE_TYPE_##FN(r_string) \ \ /* Generates a tagged, final nfa state. \ */ \ RX_EXP_NODE_TYPE_##FN(r_cut) \ \ /* Counted subexpression. `a{4, 1000}' \ */ \ RX_EXP_NODE_TYPE_##FN(r_interval) \ \ /* Parenthesized subexpression \ */ \ RX_EXP_NODE_TYPE_##FN(r_parens) \ \ /* Context-sensative operator such as "^" and "\1" \ */ \ RX_EXP_NODE_TYPE_##FN(r_context) #define RX_EXP_NODE_TYPE_ENUM(X) X, enum rx_exp_node_type { RX_EXP_NODE_TYPES(ENUM) }; /*end-insert */ /*(c #s"struct rx_exp_node" :category type) * struct rx_exp_node; * * This is the type of one node of a regexp expression tree. * insert*/ struct rx_exp_node { /* This is a reference counted structure type. * See `rx_save_exp' and `rx_free_exp'. */ int refs; /* The expression type of this node. */ enum rx_exp_node_type type; /* If the node is of type `r_cset', these describe the character set * matched. */ int cset_size; bits cset; /* If the node is of type `r_interval' ("a{x,y}"), then these * describe the range of the interval (`intval' is `x' and `intval2' * is `y'). * * If the node is of type `r_cut', `intval' is the state label * generated by the cut. * * If the node is of type `r_parens', `intval' is the expression * number (for backreferences and `pmatch' data from `regexec') or * 0, if the expression is an anonymous subexpression (formed by * `[[:(...):]]'.) * * If the node is of type `r_context', `invtval' is the context * operator. Valid operators are '$' and '^' (anchors), and '0' * .. '9' (backreferences). * */ long intval; long intval2; /* If the node is of type `r_concat', `r_right_concat' or * `r_alternate', these are the left and right children of * the node. * * If the node is of type `r_star', `r_interval' or `r_parens', then * `left' is the child of the node. */ struct rx_exp_node *left; struct rx_exp_node *right; /* If the node is of type `r_string', this is the contents of the * string. This string is not 0-terminated. */ t_uchar * str; size_t str_len; enum uni_encoding_scheme encoding; /* Intervals, parentheses and context operators are special because * they are not expressible as regular expressions. Also, any * composite expression with a subexpression which is not a regular * expression is itself not a regular expression. * * `rx_analyze_rexp' fills in this field with a non-zero value for * expression nodes which are "not a regular expression". * * If this field is not 0, a backtracking search may be necessay * when comparing this regexp to a string. */ int observed; /* If an `observed' regexp contains only parenthesized * subexpressions and no other non-regular-expression operators * (anchors or backreferences) then backtracking search is only * necessary if the caller of the regexp comparison function wants * to know the positions of matching subexpressions (the * `regmatch_t' data in Posix interfaces). If the caller only wants * to know the start and end positions of the overall match, and the * pattern contains no anchors or backreferences, then a DFA * (non-backtracking) algorithm can be used even if `observed' is * non-0. * * If `observed' is not 0, then `observation_contingent' is * useful. If `observation_contingent' is 1, the pattern * contains no anchors or backreferences implying that a fast * DFA search may be possible. */ int observation_contingent; /* We have two strategies available for matching: * * the NFA technique: potentially slow, but space efficient. * the NFA->DFA technique: more reliable throughput but higher * latency; much less space efficient. * * `small_advised_p' is set to a non-0 value by `rx_analyze_rexp' if * it seems that the NFA technique will not be too slow. */ int small_advised_p; /* Some expressions match only strings of one particular length. * Knowing that length, if it is defined, leads to some easy and * rewarding optimizations. * * `rx_analyze_rexp' fills in this field with that length, or -1 if * no such length can be computed for this expression. */ long len; /* In the tree rooted at this node, what is the maximum and * minimum subexpression number of an enclosed subexpression. * * This is needed during matching when matching a parenthesized * subexpression. For trees with no numbered subexpressions, * these values are 0. */ int max_enclosed_paren; int min_enclosed_paren; /* These fields are used to cache results computed by * `rx_simplify_rexp' and `rx_unfa'. */ struct rx_exp_node * simplified; struct rx_cached_rexp * cr; struct rx_exp_node * next_same_nfa; struct rx_exp_node * prev_same_nfa; }; /*end-insert */ /* automatically generated __STDC__ prototypes */ extern struct rx_exp_node * rx_exp_node (enum rx_exp_node_type type); extern struct rx_exp_node * rx_mk_r_cset (enum rx_exp_node_type type, int size, bits b); extern struct rx_exp_node * rx_mk_r_cset_take (enum rx_exp_node_type type, int size, bits b); extern struct rx_exp_node * rx_mk_r_binop (enum rx_exp_node_type type, struct rx_exp_node * a, struct rx_exp_node * b); extern struct rx_exp_node * rx_mk_r_monop (enum rx_exp_node_type type, struct rx_exp_node * a); extern struct rx_exp_node * rx_mk_r_str (enum rx_exp_node_type type, const t_uchar * s, size_t len, enum uni_encoding_scheme encoding); extern struct rx_exp_node * rx_mk_r_int (enum rx_exp_node_type type, int intval); extern struct rx_exp_node * rx_mk_r_subexp_int (enum rx_exp_node_type type, struct rx_exp_node * subexp, int intval); extern struct rx_exp_node * rx_mk_r_int2 (enum rx_exp_node_type type, int intval, int intval2); extern struct rx_exp_node * rx_mk_r_subexp_int2 (enum rx_exp_node_type type, struct rx_exp_node * subexp, int intval, int intval2); extern void rx_save_exp (struct rx_exp_node * node); extern void rx_free_exp (struct rx_exp_node * node); extern int rx_exp_equal (struct rx_exp_node * a, struct rx_exp_node * b); extern unsigned long rx_exp_hash (struct rx_exp_node * node); #endif /* INCLUDE__RX__TREE_H */ tla-1.3.5+dfsg/src/hackerlab/rx/regexps-formally.c0000644000175000017500000000162110457621774020552 0ustar useruser/* regexps-formally.c - describing regexps formally * **************************************************************** * Copyright (C) 2000 Thomas Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ /*(h0 "Describing Regexps Formally") This chapter is not ready yet. The *Posix.2* standard (*ISO/IEC 994502: 1993 (ANSI/IEEE Std 1003.2 - 1992*)), section *2.8*, titled *Regular Expression Notation* is, at this time, the only formal description available for regexp syntax and semantics. It is written in somewhat obscure english and does not cover Unicode regexps. In the future, we hope to provide an upwardly compatible formal description of regexps, covering both ASCII and Unicode regexps, and expressed in a more precise notation, suitable as a basis for formal proofs and for the automatic generation of validation tests. */ tla-1.3.5+dfsg/src/hackerlab/rx/nfa-cache.c0000644000175000017500000001765310457621774017073 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:41:37 2001 (nfa-cache.c) */ /* nfa-cache.c - * **************************************************************** * Copyright (C) 2000 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/rx/nfa.h" #include "hackerlab/rx/nfa-cache.h" /************************************************************************ *(h1 "Tuning the NFA Cache Size" * :includes ("hackerlab/rx/nfa-cache.h")) * * |NFA cache| * |cache (NFA)| * |NFA| * |non-deterministic finite automata| * When Rx compiles a regexp or regular expression, it builds a tree * structure that describes the syntax of the expression. Later, some * or all of the tree is converted to a graph, representing a * non-deterministic finite automata (NFA). * * Rx maintains a cache so that whenever two expressions have equivalent * tree structure, they are likely to share a single NFA. This cache * speeds up the processing of regexps by avoiding redundant NFA construction. * * Note that the NFA cache can preserve NFA beyond the lifetime of a * single compiled expression. If an expression is compiled, then * matched, then freed, then recompiled, the recompiled expression * will sometimes re-use the NFA cached from the first compile. * * |deterministic finite automata| * |DFA| * During matching, NFA are incrementally converted to deterministic * automata (DFA). Another cache is kept of DFA fragments (see * xref:"Tuning the DFA Cache Size"). Here again, the NFA cache speeds up * processing: when a single NFA is re-used, the DFA cache is made * more effective. * * This chapter presents functions which are used to monitor and tune * the performance of the NFA cache. Be sure to also read * xref:"The Impact of NFA and DFA Cache Sizes". */ /************************************************************************ *(h2 "The NFA Cache Replacement Strategy") * * |cache replacement strategy (NFA)| * |NFA cache replacement strategy| * NFA cache entries are approximately sorted from most to least * recently used. When cache space is exhausted, the least recently * used entries are discarded. * */ #ifndef RX_DEFAULT_NFA_CACHE_SIZE #define RX_DEFAULT_NFA_CACHE_SIZE (sizeof (void *) * (1 << 16)) #endif static alloc_limits nfa_alloc_limits; void rx_free_some_nfa_memory (void * ign, size_t needed) { while ( (lim_in_use (nfa_alloc_limits) + needed > lim_threshold (nfa_alloc_limits)) && (0 <= rx__really_free_unfa ())) ; } static void init_nfa_alloc_limits (void) { static int init = 1; if (init) { nfa_alloc_limits = make_alloc_limits ("Rx NFA cache", RX_DEFAULT_NFA_CACHE_SIZE, 0, 0, rx_free_some_nfa_memory, 0); init = 0; } } alloc_limits rx_nfa_cache_limits (void) { init_nfa_alloc_limits (); return nfa_alloc_limits; } /************************************************************************ *(h2 "The Advisory NFA Cache Limit") * * |NFA cache limit| * |cache limit (NFA)| * |advisory limit| * |NFA cache threshold| * |cache threshold (NFA)| * The size of the NFA cache is regulated by an advisory limit called * the "cache threshold". The threshold is a size (expressed in bytes) * which represents an ideal limit on the amount of memory used by the * NFA cache. * * If an allocation within the NFA cache would cause the total amount * of memory used by the cache to exceed the threshold, Rx attempts to * discard sufficient cache entries to avoid exceeding the threshold. * This is not always possible. When necessary for correct operation, * Rx will exceed the cache threshold: usually by a small amount; * rarely by a large amount. (That is why the threshold is called an * ^advisory^ limit.) * * The default threshold is `1MB'. */ /*(c rx_set_nfa_cache_threshold) * void rx_set_nfa_cache_threshold (size_t n); * * Set the advisory NFA cache limit to `n'. */ void rx_set_nfa_cache_threshold (size_t n) { init_nfa_alloc_limits (); lim_set_threshold (nfa_alloc_limits, n); } /*(c rx_nfa_cache_threshold) * size_t rx_nfa_cache_threshold (void); * * Return the current NFA cache limit. */ size_t rx_nfa_cache_threshold (void) { init_nfa_alloc_limits (); return lim_threshold (nfa_alloc_limits); } /* Not yet documented. */ void rx_set_nfa_cache_failure_pt (size_t n) { init_nfa_alloc_limits (); lim_set_failure_pt (nfa_alloc_limits, n); } size_t rx_nfa_cache_failure_pt (void) { init_nfa_alloc_limits (); return lim_failure_pt (nfa_alloc_limits); } /************************************************************************ *(h2 "NFA Cache Statistics") * * |NFA cache statistics| * |cache statistics (NFA)| * These functions report statistics about the NFA cache. * */ /*(c rx_nfa_cache_in_use) * size_t rx_nfa_cache_in_use (void); * * Return the amount of memory currently in use by the NFA cache. */ size_t rx_nfa_cache_in_use (void) { init_nfa_alloc_limits (); return lim_in_use (nfa_alloc_limits); } /*(c rx_nfa_cache_high_water_mark) * size_t rx_nfa_cache_high_water_mark (void); * * Return the largest amount of memory ever used at one time by the * NFA cache. */ size_t rx_nfa_cache_high_water_mark (void) { init_nfa_alloc_limits (); return lim_high_water_mark (nfa_alloc_limits); } /*(c rx_nfa_cache_statistics) * void rx_nfa_cache_statistics (size_t * threshold, * size_t * ign, * size_t * in_use, * size_t * high_water_mark, * int * hits, * int * misses, * int * ign2); * * Return statistics about the effectiveness of the NFA cache. * * All parameters are used to return values. Any parameter may be 0. * * `threshold' returns the NFA cache threshold. * * `ign' is reserved for future use and should be ignored. * * `in_use' returns the number of bytes currently used by the NFA cache. * * `high_water_mark' returns the largest number of bytes ever used by the * NFA cache. * * `hits' returns the number of cache hits that have occured within * the NFA cache. * * `misses' returns the number of cache misses that have occured within * the NFA cache. * * `ign2' is reserved for future use and should be ignored. */ void rx_nfa_cache_statistics (size_t * threshold, size_t * ign, size_t * in_use, size_t * high_water_mark, int * hits, int * misses, int * ign2) { rx__nfa_cache_statistics (threshold, ign, in_use, high_water_mark, hits, misses, ign2); } /************************************************************************ *(h2 "Flushing the NFA Cache") * * |cache flushing (NFA)| * |NFA cache flushing| */ /*(c rx_flush_nfa_cache) * size_t rx_flush_nfa_cache (void); * * Attempt to flush all entries from the NFA cache. If there exist * compiled regexps (that have not been freed), it may not be possible * to entirely empty the NFA cache. * * Return the number of bytes still allocated to the NFA cache after * the flush. */ size_t rx_flush_nfa_cache (void) { while (0 <= rx__really_free_unfa ()) ; return rx_nfa_cache_in_use (); } void * rx_nfa_cache_malloc (size_t size) { void * answer; init_nfa_alloc_limits (); answer = lim_malloc (nfa_alloc_limits, size); return answer; } void * rx_nfa_cache_soft_malloc (size_t size) { void * answer; init_nfa_alloc_limits (); answer = lim_soft_malloc (nfa_alloc_limits, size); return answer; } void * rx_nfa_cache_realloc (void * prev, size_t size) { void * answer; init_nfa_alloc_limits (); answer = lim_realloc (nfa_alloc_limits, prev, size); return answer; } /* static void rx_cache_free (int size, char * mem); * * Free memory for the NFA state cache. */ void rx_nfa_cache_free (void * mem) { lim_free (nfa_alloc_limits, mem); } tla-1.3.5+dfsg/src/hackerlab/rx/cache-sizes.doc0000644000175000017500000001335210457621774017777 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:57:15 2001 (cache-sizes.doc) */ /* cache-sizes.c - * **************************************************************** * Copyright (C) 2000 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ /************************************************************************ *(h1 "The Impact of NFA and DFA Cache Sizes") * * |cache sizes (impact of)| * |NFA cache| * |cache (NFA)| * |DFA cache| * |cache (DFA)| * This chapter discusses strategies for choosing sizes for the NFA * and DFA caches (see xref:"Tuning the NFA Cache Size" and xref:"Tuning the * DFA Cache Size"). * */ /*(h2 "What Do Caches Effect?") * * |matching speed| * |speed| * |performance| * * Both caches predominately effect the speed of regexp matching * functions such as the Posix function `regexec' or the Unicode * function `rx_xml_is_match'. Both NFA and DFA construction takes * place during matching -- not during compiling. * */ /*(h2 "What Determines Cache Effectiveness?") * * |cache effectiveness| * The variety of expressions matched and the frequency of their use * determines the effectiveness of both caches. An expression that * is frequently re-used will tend to remain in the caches. An * expression that is infrequently used will tend to be flushed from * the caches. * * |thrashing| * |cache thrashing| * Thrashing can occur if no expressions are frequently enough re-used * to remain in the caches even though some expressions are re-used * many times. Future releases of Rx will contain improved caching * strategies to reduce the likely-hood of this kind of thrashing. * * Thrashing can also occur if either or both of the caches is too * small. * * DFA cache entries are keyed by sets of NFA states. Thus, the * effectiveness of the DFA cache is limited by the effectiveness * of the NFA cache. If an NFA is flushed from the NFA cache, * all cached DFA fragments for that NFA become useless (and are * eventually flushed from the cache.) * * NFA cache entries are keyed on syntax trees for patterns and * sub-patterns. Thus, the effectiveness of the NFA cache is limited * by the frequency with which patterns (and sub-patterns) having * equivalent syntax trees are re-used. * * If the same pattern is compiled twice, yielding distinct but * equivalent syntax trees, both compilations will re-use the same NFA * cache entries. Nevertheless, in some applications performance * can be improved by avoiding recompilation (keeping a separate cache * of compiled expresses) in order to avoid the cost of redundantly * parsing expressions and building syntax trees. */ /*(h2 "Choosing Cache Sizes") * * Choosing cache sizes can be tricky: two values (the cache sizes), * whose effects are not independent, must be determined. * * Complicating matters further, cache usage is heavily dependent * on the particular expressions compiled and matches performed, and the * order in which those compilations and matches occur. There is no * mathematically simple relation between cache size and overall * performance. * * Caches may be too small, which leads to expensive cache misses, or * too large, which leads to wasted memory. Both conditions can be * detected by varying the cache sizes on successive test runs and * observing the values returned by `rx_nfa_cache_statistics' and * `rx_dfa_cache_statistics'. If lowering a cache size has little * effect on the ratio of cache hits to cache misses, the cache was * too large. If raising a cache size increases the hit/miss ratio, * the cache was too small. Once again, note that improving the * hit/miss ratio for the NFA cache may, as a side effect, improve * the hit/miss ratio for the DFA cache. * * One possible strategy for choosing cache sizes is to simply accept * the default (1MB for each cache). For many applications, the default * will yield acceptable performance. * * Another possible strategy is as follows: * * \Choose A Maximum/ Decide on a total amount of memory that you can afford * to dedicate to both caches. Having made that decision, you must then * decide how to divide that memory between the NFA and DFA caches. Unfortunately, * there is no simple answer which is guaranteed to be optimal: the best ratio * of NFA cache size to DFA cache size depends on the regexp usage patterns * of your particular application. * * \Determine the Ratio of NFA Cache Size to DFA Cache Size/ You can simply * divide memory equally between the two caches, or you can experiment. * If you decide to experiment, make sure that you can run repeatable tests * which use regexps in a characteristic way. If your application uses a * fixed set of regexps in a regular way, designing tests will be easy. * If your application allows users to choose the regexps and how they * are used, designing tests will be a challenge. * * Run your test programs repeatedly, varying the ratio of NFA cache * size to DFA cache size. Compare the ratios of hits to misses in * both caches and the overall throughput of your application. * Presumably your goal is to optimize overall throughput; the * hit/miss ratios will help you understand how the cache size ratio * effects the behavior of Rx. * * \Optionally, Minimize the Cache Sizes/ After choosing a ratio of * NFA to DFA cache sizes, you have the opportunity to reduce the size * of the caches. Run your test program, reducing the size of one * cache at a time, until the hit/miss ratio for that cache worsens * significantly. Then, choose the smallest cache size that does not * adversely effect the hit/miss ratio. Done correctly, this should * have no adverse effect on the throughput of your program. * */ tla-1.3.5+dfsg/src/hackerlab/rx/PLUGIN/0000755000175000017500000000000010457621774016104 5ustar userusertla-1.3.5+dfsg/src/hackerlab/rx/PLUGIN/REQ0000644000175000017500000000002510457621774016453 0ustar userusermem rx rx libboot tla-1.3.5+dfsg/src/hackerlab/rx/dbug.h0000644000175000017500000000150310457621774016177 0ustar useruser/* dbug.h - debugging decls for rx * **************************************************************** * Copyright (C) 1998, 2000 Thomas Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__RX__DBUG_H #define INCLUDE__RX__DBUG_H #include "hackerlab/rx/tree.h" #include "hackerlab/rx/nfa.h" #include "hackerlab/rx/super.h" /* automatically generated __STDC__ prototypes */ extern void rx_print_rexp (int fd, int cset_size, int indent, struct rx_exp_node * rexp); extern void rx_unparse_print_rexp (int fd, int cset_size, struct rx_exp_node * rexp); extern void rx_print_nfa (int fd, struct rx_nfa * rx); extern void rx_print_superstate (int fd, struct rx_superstate * state); #endif /* INCLUDE__RX__DBUG_H */ tla-1.3.5+dfsg/src/hackerlab/rx/escape.h0000644000175000017500000000107410457621774016521 0ustar useruser/* escape.h - Non-local exits from long-running Rx functions. * **************************************************************** * Copyright (C) 1999, 2000 Thomas Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__RX__ESCAPE_H #define INCLUDE__RX__ESCAPE_H #include "hackerlab/os/setjmp.h" extern jmp_buf rx_escape_jmp_buf; extern void (*rx_poll)(void); /* automatically generated __STDC__ prototypes */ extern void rx_escape (void); #endif /* INCLUDE__RX__ESCAPE_H */ tla-1.3.5+dfsg/src/hackerlab/rx/nfa-cache.h0000644000175000017500000000251110457621774017063 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:41:37 2001 (nfa-cache.h) */ /* nfa-cache.h - * **************************************************************** * Copyright (C) 2000 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__RX__NFA_CACHE_H #define INCLUDE__RX__NFA_CACHE_H #include "hackerlab/mem/alloc-limits.h" /* automatically generated __STDC__ prototypes */ extern void rx_free_some_nfa_memory (void * ign, size_t needed); extern alloc_limits rx_nfa_cache_limits (void); extern void rx_set_nfa_cache_threshold (size_t n); extern size_t rx_nfa_cache_threshold (void); extern void rx_set_nfa_cache_failure_pt (size_t n); extern size_t rx_nfa_cache_failure_pt (void); extern size_t rx_nfa_cache_in_use (void); extern size_t rx_nfa_cache_high_water_mark (void); extern void rx_nfa_cache_statistics (size_t * threshold, size_t * ign, size_t * in_use, size_t * high_water_mark, int * hits, int * misses, int * ign2); extern size_t rx_flush_nfa_cache (void); extern void * rx_nfa_cache_malloc (size_t size); extern void * rx_nfa_cache_soft_malloc (size_t size); extern void * rx_nfa_cache_realloc (void * prev, size_t size); extern void rx_nfa_cache_free (void * mem); #endif /* INCLUDE__RX__NFA_CACHE_H */ tla-1.3.5+dfsg/src/hackerlab/rx/dfa-cache.c0000644000175000017500000001556210457621774017056 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:41:37 2001 (dfa-cache.c) */ /* dfa-cache.c - * **************************************************************** * Copyright (C) 2000 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/mem/alloc-limits.h" #include "hackerlab/rx/super.h" #include "hackerlab/rx/dfa-cache.h" /************************************************************************ *(h1 "Tuning the DFA Cache Size" * :includes ("hackerlab/rx/dfa-cache.h")) * * |DFA cache| * |cache (DFA)| * |deterministic finite automata| * When Rx compiles a regexp or regular expression, it builds a tree * structure that describes the syntax of the expression. Later, some * or all of the tree is converted to a graph, representing a * non-deterministic finite automata (NFA). During matching, NFA are * incrementally converted to deterministic finite automata (DFA). * * Rx maintains a cache of DFA fragments. When part of a DFA is * needed, the cache is used to avoid redundant construction. Because * DFA can be quite large, DFA fragments are sometimes flushed from * the cache to make room. * * Note that the DFA cache can preserve DFA fragments beyond the * lifetime of a single compiled expression. If an expression is * compiled, then matched, then freed, then recompiled, the recompiled * expression will sometimes re-use DFA fragments cached from the * first compile. * * This chapter presents functions which are used to monitor and tune * the performance of the DFA cache. Be sure to also read * xref:"The Impact of NFA and DFA Cache Sizes". */ /************************************************************************ *(h2 "The DFA Cache Replacement Strategy") * * |cache replacement strategy (DFA)| * |DFA cache replacement strategy| * DFA cache entries are approximately sorted from most to least * recently used. When cache space is exhausted, the least recently * used entries are discarded. * */ /************************************************************************ *(h2 "The advisory DFA cache Limit") * * |DFA cache limit| * |cache limit (DFA)| * |advisory limit| * |DFA cache threshold| * |cache threshold (DFA)| * The size of the DFA cache is regulated by an advisory limit called * the "cache threshold". The threshold is a size (expressed in bytes) * which represents an ideal limit on the amount of memory used by the * DFA cache. * * If an allocation within the DFA cache would cause the total amount * of memory used by the cache to exceed the threshold, Rx attempts to * discard sufficient cache entries to avoid exceeding the threshold. * This is not always possible. When necessary for correct operation, * Rx will exceed the cache threshold: usually by a small amount; * sometimes by a large amount. (That is why the threshold is called an * ^advisory^ limit.) * * The default threshold is `1MB'. */ /*(c rx_set_dfa_cache_threshold) * void rx_set_dfa_cache_threshold (size_t n); * * Set the advisory DFA cache limit to `n'. */ void rx_set_dfa_cache_threshold (size_t n) { rx__init_dfa_alloc_limits (); lim_set_threshold (rx__dfa_alloc_limits, n); } /*(c rx_dfa_cache_threshold) * size_t rx_dfa_cache_threshold (void); * * Return the current DFA cache limit. */ size_t rx_dfa_cache_threshold (void) { rx__init_dfa_alloc_limits (); return lim_threshold (rx__dfa_alloc_limits); } /************************************************************************ *(h2 "DFA Cache Statistics") * * |DFA cache statistics| * |cache statistics (DFA)| * These functions report statistics about the DFA cache. * */ /*(c rx_dfa_cache_in_use) * size_t rx_dfa_cache_in_use (void); * * Return the amount of memory currently in use by the DFA cache. */ size_t rx_dfa_cache_in_use (void) { rx__init_dfa_alloc_limits (); return lim_in_use (rx__dfa_alloc_limits); } /*(c rx_dfa_cache_high_water_mark) * size_t rx_dfa_cache_high_water_mark (void); * * Return the largest amount of memory ever used at one time by the * DFA cache. */ size_t rx_dfa_cache_high_water_mark (void) { rx__init_dfa_alloc_limits (); return lim_high_water_mark (rx__dfa_alloc_limits); } /*(c rx_dfa_cache_statistics) * void rx_dfa_cache_statistics (size_t * threshold, * size_t * ign, * size_t * in_use, * size_t * high_water_mark, * int * hits, * int * misses, * int * total_hits, * int * total_misses); * * Return statistics about the effectiveness of the DFA cache. * * All parameters are used to return values. Any parameter may be 0. * * `threshold' returns the DFA cache threshold. * * `ign' is reserved for future use and should be ignored. * * `in_use' returns the number of bytes currently used by the DFA cache. * * `high_water_mark' returns the largest number of bytes ever used by the * DFA cache. * * `hits' returns an indication of the number of cache hits that have * occured within the DFA cache. (See below.) * * `misses' returns an indication the number of cache misses that have * occured within the DFA cache. (See below.) * * Note: The values returned in `hits' and `misses' are scaled to give * greater weight to recent cache activity, and reduced weight to older * cache activity. It is the ratio of `hits' to `misses', not their * absolute values, that is interesting. * * `total_hits' returns the exact number of cache hits that have occured * within the DFA cache over the lifetime of the process. * * `total_misses' returns the exact number of cache misses that have occured * within the DFA cache over the lifetime of the process. * */ void rx_dfa_cache_statistics (size_t * threshold, size_t * ign, size_t * in_use, size_t * high_water_mark, int * hits, int * misses, int * total_hits, int * total_misses) { rx__dfa_cache_statistics (threshold, ign, in_use, high_water_mark, hits, misses, total_hits, total_misses); } /************************************************************************ *(h2 "Flushing the DFA Cache") * * |cache flushing (DFA)| * |DFA cache flushing| */ /*(c rx_flush_dfa_cache) * size_t rx_flush_dfa_cache (); * * Attempt to flush all entries from the DFA cache. If there exist * locked DFA states, it may not be possible to entirely empty the DFA * cache. (It is not possible to create locked DFA states using only * the portion of the interface to Rx that is currently documented.) * * Return the number of bytes still allocated to the DFA cache after * the flush. */ size_t rx_flush_dfa_cache (void) { while (!rx__really_free_superstate ()) ; return lim_in_use (rx__dfa_alloc_limits); } tla-1.3.5+dfsg/src/hackerlab/rx/dfa.c0000644000175000017500000002673710457621774016023 0ustar useruser/* dfa.c - functions that manipulate regexps as DFAs * **************************************************************** * Copyright (C) 1998, 2000 Thomas Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/bugs/panic.h" #include "hackerlab/mem/mem.h" #include "hackerlab/rx/escape.h" #include "hackerlab/rx/dfa.h" /************************************************************************ *(h0 "DFA String Comparisons" * :includes ("rx/dfa.h")) * * * A common use for regular expressions is to compile them to DFA and * compare them to strings using a loop that advances through DFA * states. * * In Rx, the DFA data structure has been heavily optimized for such * loops. The functions in this chapter implement the most common * kinds of DFA loop, taking full advantage of the Rx optimizations. */ /*(menu) */ /*(include-documentation "dfa.h") */ /************************************************************************ *(h1 "DFA Allocation Functions") * */ /*(c rx_dfa_alloc) * struct rx_dfa * rx_dfa_alloc (alloc_limits limits); * * Allocate a new DFA, initially not pointing to any NFA or DFA state. * */ struct rx_dfa * rx_dfa_alloc (alloc_limits limits) { struct rx_dfa * a; a = (struct rx_dfa *)lim_malloc (limits, sizeof (*a)); mem_set0 ((t_uchar *)a, sizeof (*a)); return a; } /*(c rx_dfa_free) * void rx_free_dfa (alloc_limits limits, struct rx_dfa * dfa); * * Release all storage associated with `dfa'. */ void rx_dfa_free (alloc_limits limits, struct rx_dfa * dfa) { if (dfa->rx) rx_clear_dfa_state (dfa); lim_free (limits, dfa); } /************************************************************************ *(h1 "Initializing a DFA") * */ /*(c rx_init_dfa_from_nfa) * void rx_init_dfa_from_nfa (struct rx_dfa * frame, struct rx_nfa * rx); * * Make `rx' the NFA of DFA machine `frame'. * * The DFA machine must not already have a current DFA state (must be * in state 0). See xref:"rx_clear_dfa_state". * * This function sets the DFA used by `frame', but does not set the * current DFA state of `frame'. */ void rx_init_dfa_from_nfa (struct rx_dfa * frame, struct rx_nfa * rx) { frame->rx = rx; frame->state = 0; frame->final_tag = 0; } /*(c rx_init_dfa_from_dfa) * void rx_init_dfa_from_dfa (struct rx_dfa * dest, struct rx_dfa * src); * * Make the NFA and DFA state of `src' the NFA and DFA state of * `dest'. After a call to this function (which is inexpensive), you * have two DFA machines in equivalent states. * * The DFA machine `dest' must not already have a current DFA state * (`state' must be in state 0). See xref:"rx_clear_dfa_state". */ void rx_init_dfa_from_dfa (struct rx_dfa * dest, struct rx_dfa * src) { dest->rx = src->rx; dest->state = src->state; dest->final_tag = src->final_tag; if (dest->state) rx_lock_superstate (dest->rx, dest->state); } /*(c rx_clear_dfa_state) * void rx_clear_dfa_state (struct rx_dfa * frame); * * Clear the DFA state of DFA machine `frame'. */ void rx_clear_dfa_state (struct rx_dfa * frame) { if (frame->state) { rx_unlock_superstate (frame->rx, frame->state); frame->state = 0; frame->final_tag = 0; } } /* rx_dfa_goto_start_superstate * * Return (or initialize) a DFA to its start state. */ /*(c rx_dfa_goto_start_superstate) * void rx_dfa_goto_start_superstate (struct rx_dfa * frame, * int storage_unit_size); * * Return state machine `frame' to its starting state. * * The starting state is a DFA state built from the epsilon closure of * the starting state of the NFA. See xref:"rx_set_start_state". */ int rx_dfa_goto_start_superstate (struct rx_dfa * frame, int storage_unit_size) { struct rx_superstate * start_state; start_state = rx_nfa_state_to_superstate (frame->rx, frame->rx->start_nfa_state, storage_unit_size); if (!start_state) return -1; if (frame->state) rx_unlock_superstate (frame->rx, frame->state); frame->state = start_state; frame->final_tag = start_state->members->state_label; rx_lock_superstate (frame->rx, frame->state); return 0; } /************************************************************************ *(h1 "DFA Comparison Functions") * * The functions in this section compare an input string to a regular * expression by advancing through DFA states according to the * characters in the input string. */ /*(c rx_dfa_can_continue) * int rx_dfa_can_continue (struct rx_dfa * frame); * * Return a non-zero value if there exist characters for which the * current state of DFA machine `frame' has transitions defined. If * this function returns 0, then the machine is in a dead-end state. */ int rx_dfa_can_continue (struct rx_dfa * frame) { return ( frame->state && frame->state->members->has_cset_edges); } int rx_dfa_tag (struct rx_dfa * frame) { return frame->final_tag; } /*(c rx_dfa_fits) * int rx_dfa_fits (int * label, * struct rx_dfa * frame, * const t_uchar * burst, * size_t len); * * * Compare a DFA to string: is the entire string matched by the DFA? * Return -1 if an error occurs, 0 otherwise. * * The final state label reached is returned in `*label': 0 if * if the string does not match, non-0 if it does. * * It is possible to asynchronously abort a call to this function. * See xref:"Exiting Long-running Matches". */ int rx_dfa_fits (int * label, struct rx_dfa * frame, const t_uchar * burst, size_t len) { int adv; adv = rx_dfa_advance (frame, burst, len); if (adv < 0) return -1; else if (!adv) { *label = 0; return 0; } else { *label = frame->final_tag; return 0; } } /*(c rx_dfa_advance) * int rx_dfa_advance (struct rx_dfa * frame, * const t_uchar * burst, * size_t len); * * * Advance a DFA, reading characters from the input string. Stop at * the end of the string, returning 1 or when a character is * encountered for which no transition is defined, returning 0. * -1 == ESPACE. * * This is similar to `rx_dfa_fits', except that in this case, we * don't care about the state label of the final state. * * It is possible to asynchronously abort a call to this function. * See xref:"Exiting Long-running Matches". */ int rx_dfa_advance (struct rx_dfa * frame, const t_uchar * burst, size_t len) { rx_transition_table inx_table; if (!len) return 1; inx_table = frame->state->transitions; rx_unlock_superstate (frame->rx, frame->state); frame->state = 0; while (len--) { struct rx_inx * inx; rx_transition_table next_table; if (rx_poll) (*rx_poll)(); inx = rx_transition8 (inx_table, *burst); next_table = (rx_transition_table)inx->data; while (!next_table) { struct rx_superstate * state; state = rx_transitions_to_suprestate (inx_table); switch ((long)inx->inx) { case rx_backtrack: /* RX_BACKTRACK means that we've reached the empty * superstate, indicating that match can't succeed * from this point. */ frame->state = 0; frame->final_tag = 0; return 0; case rx_cache_miss: /* Because the superstate NFA is lazily constructed, * and in fact may erode from underneath us, we sometimes * have to construct the next instruction from the hard way. * This invokes one step in the lazy-conversion. */ inx = rx_handle_cache_miss (frame->rx, state, *burst, inx->data_2); if (!inx) { frame->state = 0; frame->final_tag = 0; return -1; } next_table = (rx_transition_table)inx->data; continue; /* No other instructions are legal here. */ default: panic ("unrecognized instruction in rx_dfa_advance"); } } inx_table = next_table; ++burst; } frame->state = rx_transitions_to_suprestate (inx_table); frame->final_tag = frame->state->members->state_label; rx_lock_superstate (frame->rx, frame->state); return 1; } /*(c rx_dfa_advance_to_final) * size_t rx_dfa_advance_to_final (struct rx_dfa * frame, * const t_uchar * burst, * size_t len); * * Advance a DFA, reading characters from a string. * * Stop at the end of the string, a character with no transition, or * when a superstate is encountered with a non-0 label. Return the * number of characters read from the string. * * 0 == backtrack, 1 == found final state or ran out of characters, -1 == ESPACE * * This function stops on a transition *into* a state with a non-0 * state label. It doesn't matter if the machine is initially in a * state with a non-0 label: the machine will consume the first input * character regardless. That means that if your regular expression * can match the empty string, you must detect this condition before * calling `rx_dfa_advance_to_final' by checking `dfa->final_tag' * after setting the start state of the DFA. * * If the match stopped in a final state, `dfa->final_tag' contains * the non-0 state label of the final state, otherwise, it contains 0. * If the match stopped on an illegal character, `dfa->state' is 0, * otherwise it is non-0. * * It is possible to asynchronously abort a call to this function. * See xref:"Exiting Long-running Matches". */ int rx_dfa_advance_to_final (size_t * amt, struct rx_dfa * frame, const t_uchar * burst, size_t len) { size_t initial_len; rx_transition_table inx_table; if (!len) { *amt = 0; return 1; } initial_len = len; inx_table = frame->state->transitions; rx_unlock_superstate (frame->rx, frame->state); frame->state = 0; while (len--) { struct rx_inx * inx; rx_transition_table next_table; if (rx_poll) (*rx_poll)(); inx = rx_transition8 (inx_table, *burst); next_table = (rx_transition_table)inx->data; while (!next_table) { struct rx_superstate * state; state = rx_transitions_to_suprestate (inx_table); switch ((long)inx->inx) { case rx_backtrack: /* RX_BACKTRACK means that we've reached the empty * superstate, indicating that match can't succeed * from this point. */ frame->state = 0; frame->final_tag = 0; *amt = (initial_len - len) - 1; return 0; case rx_cache_miss: /* Because the superstate NFA is lazily constructed, * and in fact may erode from underneath us, we sometimes * have to construct the next instruction from the hard way. * This invokes one step in the lazy-conversion. */ inx = rx_handle_cache_miss (frame->rx, state, *burst, inx->data_2); if (!inx) { frame->state = 0; frame->final_tag = 0; return -1; } next_table = (rx_transition_table)inx->data; continue; /* No other instructions are legal here. */ default: while (1) panic ("unrecognized instruction in rx_dfa_advance_to_final"); } } if (inx->data_2) { frame->state = rx_transitions_to_suprestate (next_table); rx_lock_superstate (frame->rx, frame->state); frame->final_tag = (long)inx->data_2; *amt = (initial_len - len); return 1; } inx_table = next_table; ++burst; } /* Consumed all of the characters. */ frame->state = rx_transitions_to_suprestate (inx_table); rx_lock_superstate (frame->rx, frame->state); frame->final_tag = 0; *amt = initial_len; return 1; } tla-1.3.5+dfsg/src/hackerlab/rx/nfa.h0000644000175000017500000001525010457621774016026 0ustar useruser/* nfa.h - decls for manipulating regexps as NFAs * **************************************************************** * Copyright (C) 1998, 2000 Thomas Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__RX__NFA_H #define INCLUDE__RX__NFA_H struct rx_nfa; struct rx_nfa_state; struct rx_superset; #include "hackerlab/hash/hashtree.h" #include "hackerlab/bitsets/bits.h" #include "hackerlab/rx/bits-tree-rules.h" #include "hackerlab/rx/tree.h" #include "hackerlab/rx/nfa-cache.h" #include "hackerlab/rx/super.h" /************************************************************************ *(h1 "The NFA Data Types") * * * */ /*(c #s"struct rx_nfa" :category type) * * This structure type is used to hold a non-deterministic * finite automata. * insert*/ struct rx_nfa { unsigned long rx_id; /* Each NFA has a unique ID assigned by `rx_nfa_xalloc'. */ int local_cset_size; /* Either 256 (8-bit ascii) or 1<<21 (Unicode). */ struct bits_tree_rule * bitset_rule; struct rx_nfa_state * nfa_states; /* The list of states in this NFA, linked by the field `next'. This is filled in by `rx_nfa_state'. */ int nfa_state_id; /* NFA states are assigned sequential ids. This is the id of the next state.*/ struct rx_nfa_state * start_nfa_state; /* The starting state of the NFA. This field must be filled in by a call to `rx_set_start_state' once the start state has been created. */ struct hashtree set_list_memo; /* A hash table used to allocate NFA state sets with the property that equal sets are `=='. */ }; /*end-insert */ /*(c #s"struct rx_nfa_state" :category type) * * This structure type holds one state of an NFA. * insert*/ struct rx_nfa_state { unsigned int id; /* NFA states are assigned sequential ids.*/ long state_label; /* Each state has a label. If the label is non-0, the state is a final state. In the DFA, a superstate is given a state label which is the smallest magnitude of the non-0 state labels of the NFA states it contains. If all of the NFA states have a state label 0, then so does the DFA state. */ struct rx_nfa_edge *edges; /* A list of NFA edges originating in this state. The edges are linked by the field `next'. */ t_uchar is_start; /* Set to `1' by `rx_set_start_state' and is otherwise 0.*/ t_uchar has_cset_edges; /* Set to `1' by `rx_nfa_edge' and is otherwise 0. This is used during DFA matching to recognize dead-end states.*/ t_uchar closure_computed; /* Set to `1' by `rx_state_closure' and is otherwise 0.*/ struct rx_nfa_state_set * closure; /* This is set to the state's epsilon closure by `rx_state_closure' and is otherwise 0.*/ struct rx_superset * superstate_set; /* This field is set by `rx_nfa_state_to_superstate' to cache the superstate set of the eclosure of this NFA state. This field does not have a reference count to the set. Instead, if the set is freed, this field is set to 0. The superstate set points back to this state in the field `nfa_state'. */ t_uchar mark; /* This is used by various graph traversal algorithms. */ struct rx_nfa_state *next; /* This link is to the next state of the same NFA in the list of all states starting at `nfa->nfa_states'. */ }; /*end-insert */ /*(c #s"struct rx_nfa_edge" :other-terms "enum rx_nfa_etype" :category type) * enum rx_nfa_etype; * struct rx_nfa_edge; * * This structure type holds one edge of an NFA. * insert*/ /* enum rx_nfa_etype; * * There are two types of NFA edges: character sets and "epsilon". An * epsilon edge represents a transition that can be taken immediately * whenever the source state is reached. A character set transition * can be taken only by matching character in the set. */ enum rx_nfa_etype { ne_cset, ne_epsilon }; /* struct rx_nfa_edge; * * One NFA edge. */ struct rx_nfa_edge { enum rx_nfa_etype type; /* Which type of edge? */ struct rx_nfa_state *dest; /* What is the destination state? */ bits cset; /* If the edge is a character set edge (`ne_cset'), this is the set of characters it matches. */ struct rx_nfa_edge *next; /* Next edge for the same source node. */ }; /*end-insert */ /*(c #s"struct rx_nfa_state_set" :category type) * * This structure type holds a set of NFA states, represented as a * list. It is used to represent the epsilon closure of an NFA node. * Any two NFA sets with the same elements are equal in the sense of * `==' if they were returned by `rx_state_closure'. * insert*/ struct rx_nfa_state_set { struct rx_nfa_state * car; struct rx_nfa_state_set * cdr; }; /*end-insert */ /************************************************************************ *(h1 "Shared NFA Data Structures") * * * We have a structure type which represents a cached NFA: */ /*(c #s"struct rx_unfa" :category type) * struct rx_unfa; * * This structure holds a regexp expression tree and an NFA for that * expression. There is at most one of these structures for each * expression. * insert*/ struct rx_unfa { int refs; /* A reference count. */ struct rx_exp_node * exp; /* A queue of regexps with the same NFA. */ struct rx_nfa * nfa; /* The NFA. */ }; /*end-insert */ /* automatically generated __STDC__ prototypes */ extern int rx_build_nfa (struct rx_nfa *rx, struct rx_exp_node *rexp, struct rx_nfa_state **start, struct rx_nfa_state **end); extern void rx__nfa_cache_statistics (size_t * threshold, size_t * failure_pt, size_t * in_use, size_t * high_water_mark, int * hits, int * misses, int * saves); extern struct rx_unfa * rx_unfa (struct rx_exp_node * exp, int cset_size); extern void rx_save_unfa (struct rx_unfa * unfa); extern void rx_free_unfa (struct rx_unfa * unfa); extern int rx__really_free_unfa (void); extern struct rx_nfa * rx_nfa_xalloc (int cset_size); extern void rx_free_nfa (struct rx_nfa * rx); extern struct rx_nfa_state * rx_nfa_state (struct rx_nfa *rx); extern struct rx_nfa_edge * rx_nfa_edge (struct rx_nfa *rx, enum rx_nfa_etype type, struct rx_nfa_state *start, struct rx_nfa_state *dest); extern struct rx_nfa_edge * rx_nfa_cset_edge (struct rx_nfa *rx, enum rx_nfa_etype type, bits cset, struct rx_nfa_state *start, struct rx_nfa_state *dest); extern void rx_set_start_state (struct rx_nfa * rx, struct rx_nfa_state * n); extern void rx_set_state_label (struct rx_nfa * rx, struct rx_nfa_state * n, int label); extern struct rx_nfa_state_set * rx_state_closure (struct rx_nfa * rx, struct rx_nfa_state * n); #endif /* INCLUDE__RX__NFA_H */ tla-1.3.5+dfsg/src/hackerlab/fmt/0000755000175000017500000000000010457621774015243 5ustar userusertla-1.3.5+dfsg/src/hackerlab/fmt/conversions.doc0000644000175000017500000000070410457621774020303 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:57:14 2001 (conversions.doc) */ /************************************************************************ *(h0 "Converting Between Numbers and Strings") * The functions in this chapter convert between numbers and ASCII strings. \NOTE:/ Floating point conversions are not included with this release of the Hackerlab C Library. They will be included in a future release. */ /*(include-documentation "cvt.c") */ tla-1.3.5+dfsg/src/hackerlab/fmt/cvt-double-constants.h0000644000175000017500000000047410457621774021477 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:41:27 2001 (cvt-double-constants.h) */ /* This file is generated automatically by "variable-cogen". * Do not edit it. */ enum base100_constants { powers_table_frequency = 32, pow2_base100_non_expt = -1088 - 1, pow2_base100_min_expt = -1088, pow2_base100_max_expt = 992, }; tla-1.3.5+dfsg/src/hackerlab/fmt/cvt.c0000644000175000017500000011721110457621774016206 0ustar useruser/* cvt.c - converting integers to and from strings * **************************************************************** * Copyright (C) 1998, 2000 Thomas Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/os/errno.h" #include "hackerlab/char/char-class.h" #include "hackerlab/char/str.h" #include "hackerlab/fmt/cvt.h" /************************************************************************ *(h1 "Converting Integers to and from Strings" * :include ("hackerlab/fmt/cvt.h")) * * The functions in this chapter convert between integer types and * strings. */ /*(menu) */ /************************************************************************ *(h2 "Converting Integers to Strings") * */ /*(c cvt_ulong_to_decimal) * size_t cvt_ulong_to_decimal (t_uchar * nbuf, unsigned long n); * * Convert `n' to a 0-terminated decimal number. * * Return the number of digits in the output. */ size_t cvt_ulong_to_decimal (t_uchar * nbuf, unsigned long n) { size_t x; size_t y; size_t used; if (!n) { nbuf[0] = '0'; nbuf[1] = 0; return 1; } x = 0; while (n) { nbuf[x] = '0' + n % 10; n /= 10; x += 1; } nbuf[x] = 0; y = 0; used = x--; while (x > y) { int c; c = nbuf[x]; nbuf[x] = nbuf[y]; nbuf[y] = c; --x; ++y; } return used; } /*(c cvt_ulong_to_decimal_n) * int cvt_ulong_to_decimal_n (t_uchar * nbuf, * size_t buflen, * unsigned long n, * size_t * needed); * * Convert `n' to a 0-terminated decimal number written to `nbuf' with * has the size of `buflen'. Stores the size which would be needed by * the conversion in `*needed' if it is not null (even on failure). * * Return 0 on success and -1 if the buffer is too small. */ int cvt_ulong_to_decimal_n (t_uchar * nbuf, size_t buflen, unsigned long n, size_t * needed) { size_t used; t_uchar tmp[sizeof (unsigned long)*2 + (sizeof (unsigned long) + 1)/2 + 1]; used = cvt_ulong_to_decimal (tmp, n); if (needed) *needed = used; if (used >= buflen) return -1; (void) str_cpy (nbuf, tmp); return 0; } /*(c cvt_long_to_decimal) * void cvt_long_to_decimal (t_uchar * nbuf, long n); * * Convert `n' to a 0-terminated decimal number. * * Return the number of digits in the output. */ size_t cvt_long_to_decimal (t_uchar * nbuf, long n) { if (n < 0) { nbuf[0] = '-'; return 1 + cvt_ulong_to_decimal (nbuf + 1, -n); } else return cvt_ulong_to_decimal (nbuf, n); } /*(c cvt_long_to_decimal_n) * int cvt_long_to_decimal_n (t_uchar * nbuf, * size_t buflen, * unsigned long n, * size_t * needed); * * Convert `n' to a 0-terminated decimal number written to `nbuf' with * has the size of `buflen'. Stores the size which would be needed by * the conversion in `*needed' if it is not null (even on failure). * * Return 0 on success and -1 if the buffer is too small. */ int cvt_long_to_decimal_n (t_uchar * nbuf, size_t buflen, long n, size_t * needed) { size_t used; t_uchar tmp[sizeof (unsigned long)*2 + (sizeof (unsigned long) + 1)/2 + 2]; if (n < 0) { tmp[0] = '-'; used = 1 + cvt_ulong_to_decimal (tmp + 1, -n); } else used = cvt_ulong_to_decimal (tmp, n); if (needed) *needed = used; if (used >= buflen) return -1; (void) str_cpy (nbuf, tmp); return 0; } /*(c cvt_ulong_to_octal) * size_t cvt_ulong_to_octal (t_uchar * nbuf, unsigned long n); * * Convert `n' to a 0-terminated octal number. */ size_t cvt_ulong_to_octal (t_uchar * nbuf, unsigned long n) { size_t x; size_t y; size_t used; if (!n) { nbuf[0] = '0'; nbuf[1] = 0; return 1; } x = 0; while (n) { nbuf[x] = '0' + n % 8; n /= 8; x += 1; } nbuf[x] = 0; y = 0; used = x--; while (x > y) { int c; c = nbuf[x]; nbuf[x] = nbuf[y]; nbuf[y] = c; --x; ++y; } return used; } /*(c cvt_ulong_to_octal_n) * int cvt_ulong_to_octal_n (t_uchar * nbuf, * size_t buflen, * unsigned long n, * size_t * needed); * * Convert `n' to a 0-terminated octal number written to `nbuf' with * has the size of `buflen'. Stores the size which would be needed by * the conversion in `*needed' if it is not null (even on failure). * * Return 0 on success and -1 if the buffer is too small */ int cvt_ulong_to_octal_n (t_uchar * nbuf, size_t buflen, unsigned long n, size_t * needed) { size_t used; t_uchar tmp[(sizeof (unsigned long)*8 + 2)/3 + 1]; used = cvt_ulong_to_octal (tmp, n); if (needed) *needed = used; if (used >= buflen) return -1; (void) str_cpy (nbuf, tmp); return 0; } /*(c cvt_long_to_octal) * void cvt_long_to_octal (t_uchar * nbuf, long n); * * Convert `n' to a 0-terminated octal number. * * Return the number of digits in the output. */ size_t cvt_long_to_octal (t_uchar * nbuf, long n) { if (n < 0) { nbuf[0] = '-'; return 1 + cvt_ulong_to_octal (nbuf + 1, -n); } else return cvt_ulong_to_octal (nbuf, n); } /*(c cvt_long_to_octal_n) * int cvt_long_to_octal_n (t_uchar * nbuf, * size_t buflen, * unsigned long n, * size_t * needed); * * Convert `n' to a 0-terminated octal number written to `nbuf' with * has the size of `buflen'. Stores the size which would be needed by * the conversion in `*needed' if it is not null (even on failure). * * Return 0 on success and -1 if the buffer is too small. */ int cvt_long_to_octal_n (t_uchar * nbuf, size_t buflen, long n, size_t * needed) { size_t used; t_uchar tmp[(sizeof (unsigned long)*8 + 2)/3 + 2]; if (n < 0) { tmp[0] = '-'; used = 1 + cvt_ulong_to_octal (tmp + 1, -n); } else used = cvt_ulong_to_octal (tmp, n); if (needed) *needed = used; if (used >= buflen) return -1; (void) str_cpy (nbuf, tmp); return 0; } /*(c cvt_ulong_to_HEX) * size_t cvt_ulong_to_HEX (t_uchar * nbuf, unsigned long n); * * Convert `n' to a 0-terminated hexadecimal number using upper-case * hex digits "A..F". * * Return the number of digits in the output. */ size_t cvt_ulong_to_HEX (t_uchar * nbuf, unsigned long n) { static const t_uchar * HEX = "0123456789ABCDEF"; size_t x; size_t y; size_t needed; if (!n) { nbuf[0] = '0'; nbuf[1] = 0; return 1; } x = 0; while (n) { nbuf[x] = HEX[n % 16]; n /= 16; x += 1; } nbuf[x] = 0; y = 0; needed = x--; while (x > y) { int c; c = nbuf[x]; nbuf[x] = nbuf[y]; nbuf[y] = c; --x; ++y; } return needed; } /*(c cvt_ulong_to_HEX_n) * int cvt_ulong_to_HEX_n (t_uchar * nbuf, * size_t buflen, * unsigned long n, * size_t * needed); * * Convert `n' to a 0-terminated octal number hexadecimal number using * upper-case written to `nbuf' with has the size of `buflen'. hex * digits "A..F". Stores the size which would be needed by the * conversion in `*needed' if it is not null (even on failure). * * Return 0 on success and -1 if the buffer is too small. */ int cvt_ulong_to_HEX_n (t_uchar * nbuf, size_t buflen, unsigned long n, size_t * needed) { size_t used; t_uchar tmp[sizeof (unsigned long)*2 + 1]; used = cvt_ulong_to_HEX (tmp, n); if (needed) *needed = used; if (used >= buflen) return -1; (void) str_cpy (nbuf, tmp); return 0; } /*(c cvt_long_to_HEX) * size_t cvt_long_to_HEX (t_uchar * nbuf, long n); * * Convert `n' to a 0-terminated hexadecimal number using upper-case * hex digits "A..F". * * Return the number of digits in the output. */ size_t cvt_long_to_HEX (t_uchar * nbuf, long n) { if (n < 0) { nbuf[0] = '-'; return 1 + cvt_ulong_to_HEX (nbuf + 1, -n); } else return cvt_ulong_to_HEX (nbuf, n); } /*(c cvt_long_to_HEX_n) * int cvt_long_to_HEX_n (t_uchar * nbuf, * size_t buflen, * unsigned long n, * size_t * needed); * * Convert `n' to a 0-terminated octal number hexadecimal number using * upper-case written to `nbuf' with has the size of `buflen'. hex * digits "A..F". Stores the size which would be needed by the * conversion in `*needed' if it is not null (even on failure). * * Return 0 on success and -1 if the buffer is too small. */ int cvt_long_to_HEX_n (t_uchar * nbuf, size_t buflen, long n, size_t * needed) { size_t used; t_uchar tmp[sizeof (unsigned long)*2 + 2]; if (n < 0) { tmp[0] = '-'; used = 1 + cvt_ulong_to_HEX (tmp + 1, -n); } else used = cvt_ulong_to_HEX (tmp, n); if (needed) *needed = used; if (used >= buflen) return -1; (void) str_cpy (nbuf, tmp); return 0; } /*(c cvt_ulong_to_hex) * void cvt_ulong_to_hex (t_uchar * nbuf, unsigned long n); * * Convert `n' to a 0-terminated hexadecimal number using lower-case * hex digits "a..f". * * Return the number of digits in the output. */ size_t cvt_ulong_to_hex (t_uchar * nbuf, unsigned long n) { static const t_uchar * hex = "0123456789abcdef"; size_t x; size_t y; size_t needed; if (!n) { nbuf[0] = '0'; nbuf[1] = 0; return 1; } x = 0; while (n) { nbuf[x] = hex[n % 16]; n /= 16; x += 1; } nbuf[x] = 0; y = 0; needed = x--; while (x > y) { int c; c = nbuf[x]; nbuf[x] = nbuf[y]; nbuf[y] = c; --x; ++y; } return needed; } /*(c cvt_ulong_to_hex_n) * int cvt_ulong_to_hex_n (t_uchar * nbuf, * size_t buflen, * unsigned long n, * size_t * needed); * * Convert `n' to a 0-terminated octal number hexadecimal number using * lower-case written to `nbuf' with has the size of `buflen'. hex * digits "a..f". Stores the size which would be needed by the * conversion in `*needed' if it is not null (even on failure). * * Return 0 on success and -1 if the buffer is too small. */ int cvt_ulong_to_hex_n (t_uchar * nbuf, size_t buflen, unsigned long n, size_t * needed) { size_t used; t_uchar tmp[sizeof (unsigned long)*2 + 1]; used = cvt_ulong_to_hex (tmp, n); if (needed) *needed = used; if (used >= buflen) return -1; (void) str_cpy (nbuf, tmp); return 0; } /*(c cvt_long_to_hex) * size_t cvt_long_to_hex (t_uchar * nbuf, long n); * * Convert `n' to a 0-terminated hexadecimal number using upper-case * hex digits "A..F". * * Return the number of digits in the output. */ size_t cvt_long_to_hex (t_uchar * nbuf, long n) { if (n < 0) { nbuf[0] = '-'; return 1 + cvt_ulong_to_hex (nbuf + 1, -n); } else return cvt_ulong_to_hex (nbuf, n); } /*(c cvt_long_to_hex_n) * int cvt_long_to_hex_n (t_uchar * nbuf, * size_t buflen, * unsigned long n, * size_t * needed); * * Convert `n' to a 0-terminated octal number hexadecimal number using * lower-case written to `nbuf' with has the size of `buflen'. hex * digits "a..f". Stores the size which would be needed by the * conversion in `*needed' if it is not null (even on failure). * * Return 0 on success and -1 if the buffer is too small. */ int cvt_long_to_hex_n (t_uchar * nbuf, size_t buflen, long n, size_t * needed) { size_t used; t_uchar tmp[sizeof (unsigned long)*2 + 2]; if (n < 0) { tmp[0] = '-'; used = 1 + cvt_ulong_to_hex (tmp + 1, -n); } else used = cvt_ulong_to_hex (tmp, n); if (needed) *needed = used; if (used >= buflen) return -1; (void) str_cpy (nbuf, tmp); return 0; } /************************************************************************ *(h2 "Converting Decimal Strings to Integers") * */ /*(c cvt_decimal_to_ulong) * int cvt_decimal_to_ulong (int * errn, * unsigned long * answerp, * const t_uchar * text, * size_t len); * * Convert the decimal number `text' to an unsigned long integer. * * Return 0 upon success, -1 on error. * * On error, `*errn' may be: * * ERANGE the decimal number will not fit in an `unsigned long'. * EINVAL `text' is not a valid number. */ int cvt_decimal_to_ulong (int * errn, unsigned long * answerp, const t_uchar * text, size_t len) { size_t consumed; unsigned long answer; if (cvt_scan_decimal_to_ulong (errn, &answer, &consumed, text, len) == -1) return -1; if (consumed != len) { if (errn) *errn = EINVAL; return -1; } *answerp = answer; return 0; } /*(c cvt_scan_decimal_to_ulong) * int cvt_scan_decimal_to_ulong (int * errn, * unsigned long * answerp, * size_t * consumed, * const t_uchar * text, * size_t len); * * Convert a decimal begining at `text' to an unsigned long integer. * Pass the actual characters parsed back in `*consumed' if `consumed' is not null. * * Return 0 upon success, -1 on error. * * On error, `*errn' may be: * * ERANGE the decimal number will not fit in an `unsigned long'. * EINVAL `text' can not be parsed as a valid number. */ int cvt_scan_decimal_to_ulong (int * errn, unsigned long * answerp, size_t * consumed, const t_uchar * text, size_t len) { unsigned long answer; size_t initial_len; initial_len = len; answer = 0; if (len == 0) goto einval; if (len && (*text == '+')) { ++text; --len; } if (!char_is_digit (*text)) { einval: if (errn) *errn = EINVAL; return -1; } while (len && char_is_digit (*text)) { int digit; unsigned long next; digit = *text - '0'; next = answer * 10 + digit; if (answer && (next <= answer)) { if (errn) *errn = ERANGE; return -1; } answer = next; ++text; --len; } *answerp = answer; if (consumed) *consumed = initial_len - len; return 0; } /*(c cvt_decimal_to_uint) * int cvt_decimal_to_uint (int * errn, * unsigned int * answerp, * const t_uchar * text, * size_t len); * * Convert the decimal number `text' to an unsigned integer. * * Return 0 upon success, -1 on error. * * On error, `*errn' may be: * * ERANGE the decimal number will not fit in an `unsigned int'. * EINVAL `text' is not a valid number. */ int cvt_decimal_to_uint (int * errn, unsigned int * answerp, const t_uchar * text, size_t len) { size_t consumed; unsigned int answer; if( cvt_scan_decimal_to_uint (errn, &answer, &consumed, text, len) == -1) return -1; if (consumed != len) { if (errn) *errn = EINVAL; return -1; } *answerp = answer; return 0; } /*(c cvt_scan_decimal_to_uint) * int cvt_scan_decimal_to_uint (int * errn, * unsigned int * answerp, * size_t * consumed, * const t_uchar * text, * size_t len); * * Convert a decimal begining at `text' to an unsigned integer. * Pass the actual characters parsed back in `*consumed' if `consumed' is not null. * * Return 0 upon success, -1 on error. * * On error, `*errn' may be: * * ERANGE the decimal number will not fit in an `unsigned long'. * EINVAL `text' can not be parsed as a valid number. */ int cvt_scan_decimal_to_uint (int * errn, unsigned int * answerp, size_t * consumed, const t_uchar * text, size_t len) { unsigned int answer; size_t initial_len; initial_len = len; answer = 0; if (len == 0) goto einval; if (len && (*text == '+')) { ++text; --len; } if (!char_is_digit (*text)) { einval: if (errn) *errn = EINVAL; return -1; } while (len && char_is_digit (*text)) { int digit; unsigned int next; digit = *text - '0'; next = answer * 10 + digit; if (answer && (next <= answer)) { if (errn) *errn = ERANGE; return -1; } answer = next; ++text; --len; } *answerp = answer; if (consumed) *consumed = initial_len - len; return 0; } /*(c cvt_decimal_to_long) * int cvt_decimal_to_long (int * errn, * long * answerp, * const t_uchar * text, * size_t len); * * Convert the decimal number `text' to a long integer. * * Return 0 upon success, -1 on error. * * On error, `*errn' may be: * * ERANGE the decimal number will not fit in a `long'. * EINVAL `text' is not a valid number. */ int cvt_decimal_to_long (int * errn, long * answerp, const t_uchar * text, size_t len) { long answer; size_t consumed; if( cvt_scan_decimal_to_long (errn, &answer, &consumed, text, len) == -1) return -1; if (consumed != len) { if (errn) *errn = EINVAL; return -1; } *answerp = answer; return 0; } /*(c cvt_scan_decimal_to_long) * int cvt_scan_decimal_to_long (int * errn, * long * answerp, * size_t * consumed, * const t_uchar * text, * size_t len); * * Convert a decimal begining at `text' to a long integer. * Pass the actual characters parsed back in `*consumed' if `consumed' is not null. * * Return 0 upon success, -1 on error. * * On error, `*errn' may be: * * ERANGE the decimal number will not fit in an `unsigned long'. * EINVAL `text' can not be parsed as a valid number. */ int cvt_scan_decimal_to_long (int * errn, long * answerp, size_t * consumed, const t_uchar * text, size_t len) { long answer; int sign; size_t initial_len; initial_len = len; answer = 0; if (len == 0) goto einval; if (len && (*text == '-')) { sign = -1; ++text; --len; } else { sign = 1; if (len && (*text == '+')) { ++text; --len; } } if (!char_is_digit (*text)) { einval: if (errn) *errn = EINVAL; return -1; } while (len && char_is_digit (*text)) { int digit; long next; digit = *text - '0'; next = answer * 10 + sign * digit; if (answer && ((sign > 0) ? (next <= answer) : (answer <= next))) { if (errn) *errn = ERANGE; return -1; } answer = next; ++text; --len; } *answerp = answer; if (consumed) *consumed = initial_len - len; return 0; } /*(c cvt_decimal_to_int) * int cvt_decimal_to_int (int * errn, * int * answerp, * const t_uchar * text, * size_t len); * * Convert the decimal number `text' to an integer. * * Return 0 upon success, -1 on error. * * On error, `*errn' may be: * * ERANGE the decimal number will not fit in an `int'. * EINVAL `text' is not a valid number. */ int cvt_decimal_to_int (int * errn, int * answerp, const t_uchar * text, size_t len) { size_t consumed; int answer; if( cvt_scan_decimal_to_int (errn, &answer, &consumed, text, len) == -1) return -1; if (consumed != len) { if (errn) *errn = EINVAL; return -1; } *answerp = answer; return 0; } /*(c cvt_scan_decimal_to_int) * int cvt_scan_decimal_to_int (int * errn, * int * answerp, * size_t * consumed, * const t_uchar * text, * size_t len); * * Convert a decimal begining at `text' to an integer. * Pass the actual characters parsed back in `*consumed' if `consumed' is not null. * * Return 0 upon success, -1 on error. * * On error, `*errn' may be: * * ERANGE the decimal number will not fit in an `unsigned long'. * EINVAL `text' can not be parsed as a valid number. */ int cvt_scan_decimal_to_int (int * errn, int * answerp, size_t * consumed, const t_uchar * text, size_t len) { int answer; int sign; size_t initial_len; initial_len = len; answer = 0; if (len == 0) goto einval; if (len && (*text == '-')) { sign = -1; ++text; --len; } else { sign = 1; if (len && (*text == '+')) { ++text; --len; } } if (!char_is_digit (*text)) { einval: if (errn) if (errn) *errn = EINVAL; return -1; } while (len && char_is_digit (*text)) { int digit; int next; digit = *text - '0'; next = answer * 10 + sign * digit; if (answer && ((sign > 0) ? (next <= answer) : (answer <= next))) { if (errn) *errn = ERANGE; return -1; } answer = next; ++text; --len; } *answerp = answer; if (consumed) *consumed = initial_len - len; return 0; } /************************************************************************ *(h2 "Converting Hexadecimal Strings to Integers") * */ /*(c cvt_hex_to_ulong) * int cvt_hex_to_ulong (int * errn, * unsigned long * answerp, * const t_uchar * text, * size_t len); * * Convert the hexadecimal number `text' to an unsigned long integer. * * Return 0 upon success, -1 on error. * * On error, `*errn' may be: * * ERANGE the hexadecimal number will not fit in an `unsigned long'. * EINVAL `text' is not a valid hexadecimal number. */ int cvt_hex_to_ulong (int * errn, unsigned long * answerp, const t_uchar * text, size_t len) { size_t consumed; unsigned long answer; if( cvt_scan_hex_to_ulong (errn, &answer, &consumed, text, len) == -1) return -1; if (consumed != len) { if (errn) *errn = EINVAL; return -1; } *answerp = answer; return 0; } /*(c cvt_scan_hex_to_ulong) * int cvt_scan_hex_to_ulong (int * errn, * unsigned long * answerp, * size_t * consumed, * const t_uchar * text, * size_t len); * * Convert a hexadecimal begining at `text' to an unsigned long integer. * Pass the actual characters parsed back in `*consumed' if `consumed' is not null. * * Return 0 upon success, -1 on error. * * On error, `*errn' may be: * * ERANGE the decimal number will not fit in an `unsigned long'. * EINVAL `text' can not be parsed as a valid number. */ int cvt_scan_hex_to_ulong (int * errn, unsigned long * answerp, size_t * consumed, const t_uchar * text, size_t len) { unsigned long answer; size_t initial_len; initial_len = len; answer = 0; if (len == 0) goto einval; if (len && (*text == '+')) { ++text; --len; } if (!char_is_xdigit (*text)) { einval: if (errn) *errn = EINVAL; return -1; } while (len && char_is_xdigit (*text)) { int digit; unsigned long next; digit = char_digit_value (*text); next = answer * 16 + digit; if (answer && (next <= answer)) { if (errn) *errn = ERANGE; return -1; } answer = next; ++text; --len; } *answerp = answer; if (consumed) *consumed = initial_len - len; return 0; } /*(c cvt_hex_to_uint) * int cvt_hex_to_uint (int * errn, * unsigned int * answerp, * const t_uchar * text, * size_t len); * * Convert the hexadecimal number `text' to an unsigned integer. * * Return 0 upon success, -1 on error. * * On error, `*errn' may be: * * ERANGE the hexadecimal number will not fit in an `unsigned int'. * EINVAL `text' is not a valid hexadecimal number. */ int cvt_hex_to_uint (int * errn, unsigned int * answerp, const t_uchar * text, size_t len) { size_t consumed; unsigned int answer; if( cvt_scan_hex_to_uint (errn, &answer, &consumed, text, len) == -1) return -1; if (consumed != len) { if (errn) *errn = EINVAL; return -1; } *answerp = answer; return 0; } /*(c cvt_scan_hex_to_uint) * int cvt_scan_hex_to_uint (int * errn, * unsigned int * answerp, * size_t * consumed, * const t_uchar * text, * size_t len); * * Convert a hexadecimal begining at `text' to an unsigned integer. * Pass the actual characters parsed back in `*consumed' if `consumed' is not null. * * Return 0 upon success, -1 on error. * * On error, `*errn' may be: * * ERANGE the decimal number will not fit in an `unsigned long'. * EINVAL `text' can not be parsed as a valid number. */ int cvt_scan_hex_to_uint (int * errn, unsigned int * answerp, size_t * consumed, const t_uchar * text, size_t len) { unsigned int answer; size_t initial_len; initial_len = len; answer = 0; if (len == 0) goto einval; if (len && (*text == '+')) { ++text; --len; } if (!char_is_xdigit (*text)) { einval: if (errn) *errn = EINVAL; return -1; } while (len && char_is_xdigit (*text)) { int digit; unsigned int next; digit = char_digit_value (*text); next = answer * 16 + digit; if (answer && (next <= answer)) { if (errn) *errn = ERANGE; return -1; } answer = next; ++text; --len; } *answerp = answer; if (consumed) *consumed = initial_len - len; return 0; } /*(c cvt_hex_to_long) * int cvt_hex_to_long (int * errn, * long * answerp, * const t_uchar * text, * size_t len); * * Convert the hexadecimal number `text' to a long integer. * * Return 0 upon success, -1 on error. * * On error, `*errn' may be: * * ERANGE the hexadecimal number will not fit in a `long'. * EINVAL `text' is not a valid hexadecimal number. */ int cvt_hex_to_long (int * errn, long * answerp, const t_uchar * text, size_t len) { long answer; size_t consumed; if( cvt_scan_hex_to_long (errn, &answer, &consumed, text, len) == -1) return -1; if (consumed != len) { if (errn) *errn = EINVAL; return -1; } *answerp = answer; return 0; } /*(c cvt_scan_hex_to_long) * int cvt_scan_hex_to_long (int * errn, * long * answerp, * size_t * consumed, * const t_uchar * text, * size_t len); * * Convert a hexadecimal begining at `text' to a long integer. * Pass the actual characters parsed back in `*consumed' if `consumed' is not null. * * Return 0 upon success, -1 on error. * * On error, `*errn' may be: * * ERANGE the decimal number will not fit in an `unsigned long'. * EINVAL `text' can not be parsed as a valid number. */ int cvt_scan_hex_to_long (int * errn, long * answerp, size_t * consumed, const t_uchar * text, size_t len) { long answer; int sign; size_t initial_len; initial_len = len; answer = 0; if (len == 0) goto einval; if (len && (*text == '-')) { sign = -1; ++text; --len; } else { sign = 1; if (len && (*text == '+')) { ++text; --len; } } if (!char_is_xdigit (*text)) { einval: if (errn) *errn = EINVAL; return -1; } while (len && char_is_xdigit (*text)) { int digit; long next; digit = char_digit_value (*text); next = answer * 16 + sign * digit; if (answer && ((sign > 0) ? (next <= answer) : (answer <= next))) { if (errn) *errn = ERANGE; return -1; } answer = next; ++text; --len; } *answerp = answer; if (consumed) *consumed = initial_len - len; return 0; } /*(c cvt_hex_to_int) * int cvt_hex_to_int (int * errn, * int * answerp, * const t_uchar * text, * size_t len); * * Convert the hexadecimal number `text' to an integer. * * Return 0 upon success, -1 on error. * * On error, `*errn' may be: * * ERANGE the hexadecimal number will not fit in an `int'. * EINVAL `text' is not a valid hexadecimal number. */ int cvt_hex_to_int (int * errn, int * answerp, const t_uchar * text, size_t len) { size_t consumed; int answer; if( cvt_scan_hex_to_int (errn, &answer, &consumed, text, len) == -1) return -1; if (consumed != len) { if (errn) *errn = EINVAL; return -1; } *answerp = answer; return 0; } /*(c cvt_scan_hex_to_int) * int cvt_scan_hex_to_int (int * errn, * int * answerp, * size_t * consumed, * const t_uchar * text, * size_t len); * * Convert a hexadecimal begining at `text' to an integer. * Pass the actual characters parsed back in `*consumed' if `consumed' is not null. * * Return 0 upon success, -1 on error. * * On error, `*errn' may be: * * ERANGE the decimal number will not fit in an `unsigned long'. * EINVAL `text' can not be parsed as a valid number. */ int cvt_scan_hex_to_int (int * errn, int * answerp, size_t * consumed, const t_uchar * text, size_t len) { int answer; int sign; size_t initial_len; initial_len = len; answer = 0; if (len == 0) goto einval; if (len && (*text == '-')) { sign = -1; ++text; --len; } else { sign = 1; if (len && (*text == '+')) { ++text; --len; } } if (!char_is_xdigit (*text)) { einval: if (errn) *errn = EINVAL; return -1; } while (len && char_is_xdigit (*text)) { int digit; int next; digit = char_digit_value (*text); next = answer * 16 + sign * digit; if (answer && ((sign > 0) ? (next <= answer) : (answer <= next))) { if (errn) *errn = ERANGE; return -1; } answer = next; ++text; --len; } *answerp = answer; if (consumed) *consumed = initial_len - len; return 0; } /************************************************************************ *(h2 "Converting Octal Strings to Integers") * */ /*(c cvt_octal_to_ulong) * int cvt_octal_to_ulong (int * errn, * unsigned long * answerp, * const t_uchar * text, * size_t len); * * Convert the octal number `text' to an unsigned long integer. * * Return 0 upon success, -1 on error. * * On error, `*errn' may be: * * ERANGE the octal number will not fit in an `unsigned long'. * EINVAL `text' is not a valid octal number. */ int cvt_octal_to_ulong (int * errn, unsigned long * answerp, const t_uchar * text, size_t len) { size_t consumed; unsigned long answer; if( cvt_scan_octal_to_ulong (errn, &answer, &consumed, text, len) == -1) return -1; if (consumed != len) { if (errn) *errn = EINVAL; return -1; } *answerp = answer; return 0; } /*(c cvt_scan_octal_to_ulong) * int cvt_scan_octal_to_ulong (int * errn, * unsigned long * answerp, * size_t * consumed, * const t_uchar * text, * size_t len); * * Convert a octal begining at `text' to an unsigned long integer. * Pass the actual characters parsed back in `*consumed' if `consumed' is not null. * * Return 0 upon success, -1 on error. * * On error, `*errn' may be: * * ERANGE the decimal number will not fit in an `unsigned long'. * EINVAL `text' can not be parsed as a valid number. */ int cvt_scan_octal_to_ulong (int * errn, unsigned long * answerp, size_t * consumed, const t_uchar * text, size_t len) { unsigned long answer; size_t initial_len; initial_len = len; answer = 0; if (len == 0) goto einval; if (len && (*text == '+')) { ++text; --len; } if (!char_is_odigit (*text)) { einval: if (errn) *errn = EINVAL; return -1; } while (len && char_is_odigit (*text)) { int digit; unsigned long next; digit = *text - '0'; next = answer * 8 + digit; if (answer && (next <= answer)) { if (errn) *errn = ERANGE; return -1; } answer = next; ++text; --len; } *answerp = answer; if (consumed) *consumed = initial_len - len; return 0; } /*(c cvt_octal_to_uint) * int cvt_octal_to_uint (int * errn, * unsigned int * answerp, * const t_uchar * text, * size_t len); * * Convert the octal number `text' to an unsigned integer. * * Return 0 upon success, -1 on error. * * On error, `*errn' may be: * * ERANGE the octal number will not fit in an `unsigned int'. * EINVAL `text' is not a valid octal number. */ int cvt_octal_to_uint (int * errn, unsigned int * answerp, const t_uchar * text, size_t len) { size_t consumed; unsigned int answer; if( cvt_scan_octal_to_uint (errn, &answer, &consumed, text, len) == -1) return -1; if (consumed != len) { if (errn) *errn = EINVAL; return -1; } *answerp = answer; return 0; } /*(c cvt_scan_octal_to_uint) * int cvt_scan_octal_to_uint (int * errn, * unsigned int * answerp, * size_t * consumed, * const t_uchar * text, * size_t len); * * Convert a octal begining at `text' to an unsigned integer. * Pass the actual characters parsed back in `*consumed' if `consumed' is not null. * * Return 0 upon success, -1 on error. * * On error, `*errn' may be: * * ERANGE the decimal number will not fit in an `unsigned long'. * EINVAL `text' can not be parsed as a valid number. */ int cvt_scan_octal_to_uint (int * errn, unsigned int * answerp, size_t * consumed, const t_uchar * text, size_t len) { unsigned int answer; size_t initial_len; initial_len = len; answer = 0; if (len == 0) goto einval; if (len && (*text == '+')) { ++text; --len; } if (!char_is_odigit (*text)) { einval: if (errn) *errn = EINVAL; return -1; } while (len && char_is_odigit (*text)) { int digit; unsigned int next; digit = *text - '0'; next = answer * 8 + digit; if (answer && (next <= answer)) { if (errn) *errn = ERANGE; return -1; } answer = next; ++text; --len; } *answerp = answer; if (consumed) *consumed = initial_len - len; return 0; } /*(c cvt_octal_to_long) * int cvt_octal_to_long (int * errn, * long * answerp, * const t_uchar * text, * size_t len); * * Convert the octal number `text' to a long integer. * * Return 0 upon success, -1 on error. * * On error, `*errn' may be: * * ERANGE the octal number will not fit in a `long'. * EINVAL `text' is not a valid octal number. */ int cvt_octal_to_long (int * errn, long * answerp, const t_uchar * text, size_t len) { long answer; size_t consumed; if( cvt_scan_octal_to_long (errn, &answer, &consumed, text, len) == -1) return -1; if (consumed != len) { if (errn) *errn = EINVAL; return -1; } *answerp = answer; return 0; } /*(c cvt_scan_octal_to_long) * int cvt_scan_octal_to_long (int * errn, * long * answerp, * size_t * consumed, * const t_uchar * text, * size_t len); * * Convert a octal begining at `text' to a long integer. * Pass the actual characters parsed back in `*consumed' if `consumed' is not null. * * Return 0 upon success, -1 on error. * * On error, `*errn' may be: * * ERANGE the decimal number will not fit in an `unsigned long'. * EINVAL `text' can not be parsed as a valid number. */ int cvt_scan_octal_to_long (int * errn, long * answerp, size_t * consumed, const t_uchar * text, size_t len) { long answer; int sign; size_t initial_len; initial_len = len; answer = 0; if (len == 0) goto einval; if (len && (*text == '-')) { sign = -1; ++text; --len; } else { sign = 1; if (len && (*text == '+')) { ++text; --len; } } if (!char_is_odigit (*text)) { einval: if (errn) *errn = EINVAL; return -1; } while (len && char_is_odigit (*text)) { int digit; long next; digit = *text - '0'; next = answer * 8 + sign * digit; if (answer && ((sign > 0) ? (next <= answer) : (answer <= next))) { if (errn) *errn = ERANGE; return -1; } answer = next; ++text; --len; } *answerp = answer; if (consumed) *consumed = initial_len - len; return 0; } /*(c cvt_octal_to_int) * int cvt_octal_to_int (int * errn, * int * answerp, * const t_uchar * text, * size_t len); * * Convert the octal number `text' to an integer. * * Return 0 upon success, -1 on error. * * On error, `*errn' may be: * * ERANGE the octal number will not fit in an `int'. * EINVAL `text' is not a valid octal number. */ int cvt_octal_to_int (int * errn, int * answerp, const t_uchar * text, size_t len) { size_t consumed; int answer; if( cvt_scan_octal_to_int (errn, &answer, &consumed, text, len) == -1) return -1; if (consumed != len) { if (errn) *errn = EINVAL; return -1; } *answerp = answer; return 0; } /*(c cvt_scan_octal_to_int) * int cvt_scan_octal_to_int (int * errn, * int * answerp, * size_t * consumed, * const t_uchar * text, * size_t len); * * Convert a octal begining at `text' to an integer. * Pass the actual characters parsed back in `*consumed' if `consumed' is not null. * * Return 0 upon success, -1 on error. * * On error, `*errn' may be: * * ERANGE the decimal number will not fit in an `unsigned long'. * EINVAL `text' can not be parsed as a valid number. */ int cvt_scan_octal_to_int (int * errn, int * answerp, size_t * consumed, const t_uchar * text, size_t len) { int answer; int sign; size_t initial_len; initial_len = len; answer = 0; if (len == 0) goto einval; if (len && (*text == '-')) { sign = -1; ++text; --len; } else { sign = 1; if (len && (*text == '+')) { ++text; --len; } } if (!char_is_odigit (*text)) { einval: if (errn) *errn = EINVAL; return -1; } while (len && char_is_odigit (*text)) { int digit; int next; digit = *text - '0'; next = answer * 8 + sign * digit; if (answer && ((sign > 0) ? (next <= answer) : (answer <= next))) { if (errn) *errn = ERANGE; return -1; } answer = next; ++text; --len; } *answerp = answer; if (consumed) *consumed = initial_len - len; return 0; } tla-1.3.5+dfsg/src/hackerlab/fmt/=scaffolding/0000755000175000017500000000000010457621774017617 5ustar userusertla-1.3.5+dfsg/src/hackerlab/fmt/=scaffolding/=pow2-base100-tables.scm0000644000175000017500000002121210457621774023706 0ustar useruser;;; tag: Tom Lord Tue Dec 4 14:59:28 2001 (=scaffolding/=pow2-base100-tables.scm) ;;; ;;; =pow2-base100-tables.scm - generate tables for floating point conversion ;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; Copyright (C) 1998, 1999, 2000 Tom Lord ;;; ;;; See the file "COPYING" for further information about ;;; the copyright and warranty status of this work. ;;; ;;; This software comes with NO WARRANTY. ;;; The Liberty Software License, version 2: ;;; 1. This license is valid for all people. ;;; 2. You may use this software without restriction. ;;; (define-module (vu =pow2-base100-tables) :use-module (cogen autogen)) (define (=pow2-base100-tables-generates) `(("cvt-double-tables.h" ,generate-base100-tables.h) ("cvt-double-constants.h" ,generate-constants))) (define (generate-base100-tables.h) (generate-ascii100-table) (generate-mod100-table) (generate-quotient100-table) (generate-pow2-table)) ;;; *** Start "/bin/bash -c gprof ,try gmon.out" in ~/hacking/src/vu/ at 02:42:04 ;;; Flat profile: ;;; ;;; ./,try .0000005 (mod/quotient tables, shifts in pow2_base100) ;;; Each sample counts as 0.01 seconds. ;;; % cumulative self self total ;;; time seconds seconds calls Ts/call Ts/call name ;;; % cumulative self self total ;;; time seconds seconds calls us/call us/call name ;;; 29.47 0.28 0.28 mem_move ;;; 28.42 0.55 0.27 28000 9.64 9.64 weird_base100_add ;;; 26.32 0.80 0.25 29000 8.62 8.62 weird_pow2_base100 ;;; ;;; ecvt (wrong answer) ;;; time ./,try .0000005 ;;; 0.10user 0.01system 0:00.13elapsed 84%CPU (0avgtext+0avgdata 0maxresident)k ;;; 50000000000000000000000000000000000000000000000000000000000000000000 ;;; ;;; sprintf ;;; time ./,try .0000005 ;;; 0.18user 0.01system 0:00.21elapsed 90%CPU (0avgtext+0avgdata 0maxresident)k ;;; 4.99999999999999977374055912943129342806969361845403909683227539062500e-07 ;;; time ./,try ;;; f = 3.273390607896141870013189696827599152216642046043064789483291368096133796404674554883270092325904157150886684127560071009217256545885393053328527589376e+150; ;;; 3.27339060789614187001318969682759915221664204604306478948329136809613e+150 ;;; 0.51user 0.02system 0:00.55elapsed 96%CPU (0avgtext+0avgdata 0maxresident)k ;;; ;;; double_to_string ;;; 4.9999999999999997737405591294312934280696936184540390968322753906250e-7 ;;; ;;; powers-table-frequence == 6 ;;; text data bss dec hex filename ;;; 3578 54995 ... ... ... ../=build/vu/base100.o ;;; time ./,try .0000005 ;;; 2.46user 0.03system 0:02.52elapsed 98%CPU (0avgtext+0avgdata 0maxresident)k ;;; ;;; powers-table-frequence == 32 ;;; text data bss dec hex filename ;;; 3562 10970 ... ... ... ../=build/vu/base100.o ;;; time ./,try .0000005 ;;; 2.85user 0.04system 0:02.96elapsed 97%CPU (0avgtext+0avgdata 0maxresident)k ;;; time ./,try .0000005 (mod/quotient tables) ;;; 1.20user 0.01system 0:01.23elapsed 98%CPU (0avgtext+0avgdata 0maxresident)k ;;; time ./,try .0000005 (mod/quotient tables, shifts in pow2_base100) ;;; 1.16user 0.03system 0:01.21elapsed 98%CPU (0avgtext+0avgdata 0maxresident)k ;;; time ./,try .0000005 (mod/quotient tables, shifts in pow2_base100, pow2_base100 on demand) ;;; 0.91user 0.04system 0:00.97elapsed 97%CPU (0avgtext+0avgdata 0maxresident)k ;;; time ./,try .0000005 (mod/quotient tables, shifts, pow2_base100 on demand, -O2) ;;; 0.62user 0.03system 0:00.68elapsed 95%CPU (0avgtext+0avgdata 0maxresident)k ;;; time ./,try 2048 ;;; 0.84user 0.01system 0:00.87elapsed 97%CPU (0avgtext+0avgdata 0maxresident)k ;;; time ./,try ;;; f = 3.273390607896141870013189696827599152216642046043064789483291368096133796404674554883270092325904157150886684127560071009217256545885393053328527589376e+150; ;;; 3273390607896141870013189696827599152216642046043064789483291368096133796404674554883270092325904157150886684127560071009217256545885393053328527589376.0e0 ;;; 6.08user 0.02system 0:06.14elapsed 99%CPU (0avgtext+0avgdata 0maxresident)k ;;; time ./,try mod/quotient tables ;;; 2.32user 0.02system 0:02.55elapsed 91%CPU (0avgtext+0avgdata 0maxresident)k ;;; ;;; ;;; powers-table-frequence == 64 ;;; text data bss dec hex filename ;;; 3562 5927 ... ... ... ../=build/vu/base100.o ;;; time ./,try .0000005 ;;; 3.25user 0.03system 0:03.35elapsed 97%CPU (0avgtext+0avgdata 0maxresident)k ;;; ;;; powers-table-frequence == 312 ;;; text data bss dec hex filename ;;; 3514 2284 ... ... ... ../=build/vu/base100.o ;;; time ./,try .0000005 ;;; 7.11user 0.02system 0:07.17elapsed 99%CPU (0avgtext+0avgdata 0maxresident)k ;;; (begin (define powers-table-frequency 32) (define max-positive-power (* powers-table-frequency (quotient 1023 powers-table-frequency))) (define max-negative-power-magnitude (* powers-table-frequency (+ (if (zero? (modulo 1088 powers-table-frequency)) 0 1) (quotient 1088 powers-table-frequency))))) (define (generate-constants) (display* "enum base100_constants\n") (display* "{\n") (display* " powers_table_frequency = " powers-table-frequency ",\n") (display* " pow2_base100_non_expt = -" max-negative-power-magnitude " - 1,\n") (display* " pow2_base100_min_expt = -" max-negative-power-magnitude ",\n") (display* " pow2_base100_max_expt = " max-positive-power ",\n") (display* "};\n")) (define (generate-ascii100-table) (display "static t_uchar * base100_digits_to_ascii_table[100] = \n") (display "{\n") (display " ") (let loop ((x 0)) (and (< x 100) (begin (if (< x 10) (begin (display "\"0") (display x) "\"") (begin (display "\"") (display x) "\"")) (display "\", ") (if (= 9 (modulo x 10)) (display "\n ")) (loop (+ x 1))))) (display "\n};\n\n")) (define (generate-mod100-table) (let ((domain (+ (* 64 99) (quotient (* 64 99) 100)))) (display* "static t_uchar mod100_table[" domain "] = \n") (display "{\n") (display " ") (let loop ((x 0)) (and (< x domain) (begin (display (modulo x 100)) (display ", ") (if (= 9 (modulo x 10)) (display "\n ")) (loop (+ x 1))))) (display "\n};\n\n"))) (define (generate-quotient100-table) (let ((domain (+ (* 64 99) (quotient (* 64 99) 100)))) (display* "static t_uchar quotient100_table[" domain "] = \n") (display "{\n") (display " ") (let loop ((x 0)) (and (< x domain) (begin (display (quotient x 100)) (display ", ") (if (= 9 (modulo x 10)) (display "\n ")) (loop (+ x 1))))) (display "\n};\n\n"))) (define (generate-pow2-table) (let ((positive-powers (positive-powers-table)) (negative-powers (negative-powers-table))) (display* "static struct base100_float pow2_table[] = \n") (display* "{\n") (let loop ((expt2 (- max-negative-power-magnitude)) (expt100 (/ (- max-negative-power-magnitude) 2)) (l negative-powers)) (and l (let ((digits (base100-digits (car l)))) (display* " {\n") (display* " " expt2 ", " expt100 ", " (length digits) ",\n") (display-base100-digits digits) (display* " },\n") (loop (+ powers-table-frequency expt2) (+ expt100 (/ powers-table-frequency 2)) (cdr l))))) (let loop ((expt2 0) (l positive-powers)) (and l (let ((digits (base100-digits (car l)))) (display* " {\n") (display* " " expt2 ", 0, " (length digits) ",\n") (display-base100-digits digits) (display* " },\n") (loop (+ powers-table-frequency expt2) (cdr l))))) (display* "};\n"))) (define (base100-digits n) (if (= n 0) '(0) (let loop ((k n) (answer ())) (if (= 0 k) answer (loop (quotient k 100) (cons (modulo k 100) answer)))))) (define (display-base100-digits digits) (let loop ((d digits)) (and d (begin (display* " \"") (let loop2 ((l d) (i 0)) (and (< i 16) (begin (display* "\\" (number->string (car l) 8)) (and (cdr l) (loop2 (cdr l) (+ i 1)))))) (display* "\"\n") (loop (and (> (length d) 16) (list-cdr-ref d 16))))))) (define (positive-powers-table) (let loop ((x 0) (n 1)) (if (<= x max-positive-power) (begin (if (= 0 (modulo x powers-table-frequency)) (cons n (loop (1+ x) (* n 2))) (loop (1+ x) (* n 2))))))) (define (negative-powers-table) (reverse (cdr (let loop ((x 0) (q 1)) (if (<= x max-negative-power-magnitude) (begin (if (= 0 (modulo x powers-table-frequency)) (cons q (loop (1+ x) (quotient (* 10 q) 2))) (loop (1+ x) (quotient (* 10 q) 2))))))))) tla-1.3.5+dfsg/src/hackerlab/fmt/cvt-double-tables.h0000644000175000017500000025774310457621774020752 0ustar useruser/* tag: Tom Lord Tue Dec 4 14:41:27 2001 (cvt-double-tables.h) */ /* This file is generated automatically by "variable-cogen". * Do not edit it. */ static t_uchar * base100_digits_to_ascii_table[100] = { "00", "01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30", "31", "32", "33", "34", "35", "36", "37", "38", "39", "40", "41", "42", "43", "44", "45", "46", "47", "48", "49", "50", "51", "52", "53", "54", "55", "56", "57", "58", "59", "60", "61", "62", "63", "64", "65", "66", "67", "68", "69", "70", "71", "72", "73", "74", "75", "76", "77", "78", "79", "80", "81", "82", "83", "84", "85", "86", "87", "88", "89", "90", "91", "92", "93", "94", "95", "96", "97", "98", "99", }; static t_uchar mod100_table[6399] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, }; static t_uchar quotient100_table[6399] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, }; static struct base100_float pow2_table[] = { { -1088, -544, 381, "\3\1\67\45\46\133\103\114\55\63\125\131\50\46\75\72" "\71\115\14\22\132\125\106\135\17\136\106\60\61\74\6\44" "\35\23\20\24\37\103\125\24\25\50\25\74\66\56\66\37" "\130\53\0\64\56\134\102\135\143\114\36\55\12\5\3\136" "\140\6\104\71\116\72\127\134\50\105\123\7\143\60\75\75" "\7\26\14\100\5\106\134\70\17\16\2\105\32\112\125\137" "\11\133\2\11\56\53\37\50\31\120\16\43\111\36\40\75" "\100\23\1\71\24\63\132\102\74\124\33\41\15\114\65\76" "\37\47\34\30\24\15\116\62\41\0\52\33\54\5\36\113" "\77\35\141\27\31\115\134\33\114\45\126\3\60\127\130\61" "\2\133\31\100\31\32\120\43\52\121\121\110\3\3\112\51" "\101\12\116\116\52\72\125\76\0\131\26\134\57\50\4\70" "\70\123\135\113\114\0\46\120\11\63\42\131\102\123\122\71" "\120\125\100\104\127\133\23\137\65\30\51\120\31\120\7\135" "\7\120\23\35\44\56\105\112\133\101\124\75\13\13\35\140" "\53\46\52\141\15\126\40\126\130\126\4\41\106\72\73\112" "\22\71\142\3\124\41\110\21\111\13\133\5\47\46\107\5" "\5\102\42\122\67\135\67\4\76\52\64\130\64\123\14\102" "\25\16\66\136\62\133\17\33\105\20\25\134\102\141\127\53" "\10\136\33\27\106\17\21\44\114\32\132\1\20\32\65\32" "\1\76\142\105\114\114\131\0\133\0\7\26\61\105\37\142" "\27\74\55\37\112\53\60\125\63\6\1\140\113\137\124\26" "\46\135\124\60\114\61\103\73\70\112\140\124\16\105\124\105" "\15\30\21\121\35\53\55\125\71\14\131\6\31" }, { -1056, -528, 370, "\1\35\63\77\54\102\42\7\111\50\114\76\30\61\77\114" "\57\2\42\45\32\76\44\131\101\35\67\12\55\72\7\41" "\17\42\71\10\1\115\124\20\3\4\131\115\20\3\3\22" "\57\5\72\100\11\47\6\67\64\35\26\26\130\70\3\112" "\140\103\137\57\60\23\127\20\4\24\14\66\62\50\56\73" "\66\11\112\17\125\74\143\34\34\66\114\15\131\70\60\74" "\43\100\72\135\113\55\121\36\64\72\113\32\102\77\26\10" "\112\52\11\125\17\25\47\32\110\33\100\12\32\31\57\115" "\115\67\133\32\124\111\143\117\131\117\33\53\112\126\122\65" "\123\37\135\114\14\46\6\124\11\75\73\76\40\142\61\120" "\104\56\25\73\126\14\114\10\1\142\24\142\55\54\140\0" "\45\66\131\20\25\63\14\32\142\13\143\24\25\136\37\101" "\47\114\107\137\114\16\52\21\135\115\106\141\61\140\65\106" "\72\11\50\23\103\5\126\23\125\45\135\70\61\12\57\35" "\4\120\137\74\52\102\137\126\36\62\116\40\40\111\143\12" "\22\53\134\1\131\106\45\55\62\1\76\14\26\113\4\44" "\112\124\36\34\2\111\45\126\7\133\11\104\137\117\55\41" "\75\2\44\34\3\111\131\77\2\56\52\35\12\110\56\104" "\65\124\56\130\11\112\47\114\130\30\133\55\60\44\46\117" "\52\140\33\73\126\43\22\13\73\65\43\55\14\134\22\21" "\34\142\116\10\105\60\140\42\13\72\42\70\106\44\105\53" "\30\71\55\137\32\117\45\25\101\61\65\141\14\11\111\136" "\20\22\20\5\64\2\62\112\15\134\45\50\46\105\76\131" "\6\31" }, { -1024, -512, 358, "\67\76\104\56\56\32\120\3\55\115\31\72\21\135\41\12" "\12\20\5\60\3\143\63\17\72\35\71\77\123\37\125\52" "\25\120\13\10\106\42\117\66\131\77\71\7\131\113\37\33" "\113\63\51\1\104\42\135\33\72\137\33\63\34\121\10\66" "\3\130\44\62\33\25\50\3\11\77\54\52\141\5\34\32" "\136\61\123\123\0\5\122\75\143\2\65\104\74\100\73\11" "\1\117\120\47\14\75\111\70\31\135\43\64\11\46\14\106" "\20\76\101\51\100\65\141\45\22\1\26\117\61\134\16\117" "\11\133\25\31\17\131\115\23\31\35\71\76\22\105\143\55" "\26\23\46\53\112\127\44\34\137\13\35\1\32\33\34\124" "\143\100\16\70\21\106\56\75\33\123\124\60\47\63\30\120" "\34\143\64\107\54\17\14\143\121\10\41\120\34\72\120\141" "\65\107\142\134\61\2\47\116\26\26\35\0\112\121\74\45" "\115\101\126\101\116\42\124\17\126\135\140\76\122\71\42\35" "\50\63\22\37\50\117\55\45\16\20\10\115\22\3\7\7" "\17\136\12\63\14\13\106\34\63\132\42\115\126\134\101\106" "\4\26\56\41\13\2\113\6\4\3\75\125\66\4\100\21" "\133\65\114\43\3\125\107\33\13\117\22\122\31\57\71\132" "\41\6\136\110\51\122\52\104\53\34\10\41\64\21\57\30" "\71\135\114\105\73\107\21\37\64\37\135\61\54\135\25\56" "\100\133\45\43\33\34\52\33\46\63\65\51\20\131\25\113" "\73\140\105\71\130\26\103\2\56\17\53\2\111\13\70\42" "\133\122\14\131\6\31" }, { -992, -496, 347, "\27\131\17\60\77\44\122\50\41\2\16\76\134\42\61\35" "\107\137\52\23\113\51\2\107\17\110\66\36\37\72\127\11" "\127\114\113\35\24\141\142\70\30\24\41\103\27\111\106\71" "\70\26\4\5\77\21\52\25\77\0\75\13\117\133\100\120" "\66\102\77\26\135\7\136\35\40\134\4\24\76\111\73\74" "\11\15\5\37\51\14\46\57\1\52\111\136\64\47\10\104" "\126\104\51\110\70\53\124\46\104\137\122\105\71\14\3\116" "\115\73\5\4\56\14\70\45\50\121\6\32\101\113\65\127" "\124\142\103\41\21\133\102\72\52\110\54\31\45\24\67\74" "\123\101\25\106\62\111\43\100\4\115\135\116\133\63\11\113" "\16\37\20\140\24\6\27\27\127\115\51\131\12\34\54\57" "\16\35\23\17\5\117\136\13\3\77\52\25\105\114\142\143" "\23\115\14\113\31\132\25\72\77\124\34\142\7\43\74\33" "\66\102\112\2\61\133\5\126\116\64\56\73\31\75\117\71" "\50\15\66\116\135\142\23\12\4\116\102\105\137\110\11\17" "\103\111\52\14\4\35\35\5\10\15\137\44\127\141\17\73" "\56\124\132\15\36\56\27\1\55\143\117\102\30\140\130\21" "\42\14\60\143\24\53\124\111\10\33\141\74\116\52\56\117" "\43\12\10\104\101\40\40\77\76\142\3\105\111\23\64\61" "\31\56\27\2\101\32\7\27\100\117\100\123\30\40\123\15" "\7\141\14\11\20\72\5\134\3\17\126\16\143\16\120\15" "\65\72\127\0\35\54\136\76\131\6\31" }, { -960, -480, 336, "\12\32\15\52\0\40\55\136\6\27\42\0\111\26\35\14" "\122\140\125\25\132\65\6\123\10\2\131\135\5\26\32\24" "\46\57\54\113\50\6\120\137\60\42\37\74\123\45\72\54" "\133\40\135\73\7\70\22\106\46\63\44\123\14\31\65\31" "\73\73\41\127\107\120\41\77\74\143\33\64\123\101\7\40" "\130\113\37\112\142\6\44\143\70\14\1\46\47\142\103\111" "\7\134\12\141\132\54\125\15\140\11\5\127\111\141\7\26" "\13\115\100\56\117\51\27\122\31\112\141\6\24\27\55\140" "\143\62\141\73\57\142\47\125\127\142\75\104\101\15\45\16" "\106\26\23\133\31\104\52\27\3\136\117\71\5\43\72\123" "\52\100\113\76\107\37\140\52\101\44\102\15\30\35\77\101" "\125\44\33\123\131\107\35\56\57\45\17\14\131\46\3\7" "\104\143\47\35\12\45\107\20\52\57\125\77\75\7\120\33" "\125\51\54\0\62\132\134\123\107\102\120\46\132\42\123\61" "\70\35\15\143\102\67\121\141\130\107\24\14\105\26\137\132" "\57\115\43\120\137\54\106\140\25\35\52\65\33\2\140\53" "\100\137\34\52\77\135\26\57\41\37\62\71\3\30\134\30" "\113\0\56\24\134\76\14\130\46\106\117\24\31\127\4\40" "\132\13\126\130\15\32\122\71\45\71\143\37\36\130\110\52" "\51\107\21\52\113\111\120\25\35\121\36\33\110\31\107\36" "\72\54\25\30\112\114\107\22\105\27\142\7\14\131\6\31" }, { -928, -464, 325, "\4\50\110\14\123\21\1\30\50\122\24\3\56\127\116\101" "\73\25\43\104\41\120\113\30\57\16\46\71\135\117\14\33" "\101\63\132\20\67\114\104\13\141\16\42\50\103\102\32\6" "\37\116\140\47\33\136\52\37\30\0\113\44\16\73\127\41" "\136\44\44\115\15\6\120\31\44\57\53\64\43\31\121\2" "\14\46\46\5\13\72\0\15\35\50\14\136\136\112\52\70" "\112\57\116\53\110\60\21\116\6\41\131\1\101\137\56\12" "\113\71\36\26\62\53\124\72\76\135\50\5\40\24\104\52" "\143\51\104\50\51\142\111\121\100\125\111\21\34\71\123\42" "\111\15\2\131\3\10\15\65\17\115\111\54\110\37\4\115" "\15\71\132\14\47\7\34\114\117\73\132\32\135\34\120\136" "\17\64\142\32\133\41\104\100\117\40\50\62\2\50\134\101" "\44\42\106\101\77\27\27\141\50\107\27\127\62\131\43\105" "\105\45\110\67\73\135\143\136\126\31\134\114\0\72\133\111" "\16\24\35\17\12\11\111\143\44\5\127\110\54\113\112\116" "\26\21\42\123\22\14\32\14\57\40\113\44\35\130\102\52" "\52\141\31\126\115\22\14\53\56\67\102\61\20\22\134\132" "\14\46\120\26\53\32\140\17\101\43\130\141\100\7\37\11" "\64\53\140\0\66\130\35\61\77\3\140\130\37\71\65\43" "\44\55\16\41\52\2\13\34\115\47\26\12\6\77\22\63" "\23\76\131\6\31" }, { -896, -448, 314, "\1\131\34\123\61\116\102\123\137\45\67\100\2\67\74\34" "\124\30\62\100\42\133\61\52\57\77\66\123\124\62\74\40" "\32\36\111\31\31\121\32\106\110\23\61\24\77\33\2\62" "\64\141\60\117\126\70\124\21\44\127\142\64\2\4\67\43" "\4\62\134\62\50\6\71\60\7\100\127\23\4\141\13\75" "\57\50\133\31\107\110\47\132\77\125\3\10\62\73\37\72" "\102\2\101\10\6\112\105\13\133\46\22\74\51\24\37\6" "\72\20\33\13\75\20\24\46\16\111\102\55\16\100\71\46" "\65\103\44\0\16\113\0\131\62\31\35\27\52\60\111\61" "\76\55\10\104\75\42\45\20\66\50\6\40\124\3\55\37" "\104\70\45\53\41\36\17\130\37\143\51\66\106\106\16\104" "\37\3\21\60\13\5\55\131\104\6\16\21\62\47\112\73" "\73\53\61\24\25\140\47\106\35\13\33\26\50\134\137\115" "\32\13\54\142\76\125\101\70\70\71\30\47\22\25\136\30" "\131\114\105\103\102\102\66\116\50\34\45\67\127\140\27\137" "\100\15\116\41\47\1\115\26\56\132\117\135\72\3\130\51" "\112\26\133\125\120\11\55\102\25\61\26\21\123\75\103\72" "\24\33\64\15\64\12\66\53\65\52\101\53\22\105\67\20" "\13\74\36\105\71\110\64\77\45\106\70\143\0\102\23\47" "\113\62\122\15\4\40\14\131\6\31" }, { -864, -432, 302, "\121\35\127\33\22\57\75\75\71\102\124\63\33\41\67\56" "\125\137\122\62\35\1\27\4\115\102\64\124\53\103\4\20" "\124\76\4\130\34\130\131\101\111\22\125\62\66\115\34\130" "\42\143\115\101\40\100\27\142\101\56\120\17\11\21\64\65" "\25\61\51\132\0\35\127\114\116\34\111\131\112\120\43\123" "\66\43\107\0\127\61\117\51\36\142\11\10\110\60\103\126" "\57\21\114\140\22\126\0\34\22\124\44\113\21\37\5\14" "\75\105\10\22\22\72\131\133\143\100\41\45\70\117\20\0" "\51\4\120\24\134\11\107\24\32\53\73\106\46\26\47\117" "\36\142\32\127\1\62\66\133\107\74\15\31\36\142\103\31" "\30\60\125\35\6\100\14\67\47\0\55\35\35\117\31\31" "\107\143\47\74\110\62\54\23\60\135\105\102\142\141\34\47" "\73\25\14\61\123\110\20\74\132\106\106\32\55\55\20\105" "\113\110\35\103\75\14\73\67\130\140\3\45\52\57\40\124" "\127\51\136\7\131\45\21\33\14\46\20\34\77\3\32\5" "\71\65\34\130\57\12\117\127\105\12\32\137\60\112\75\143" "\120\126\37\132\27\114\133\124\120\47\110\77\30\124\114\62" "\116\44\1\71\134\42\72\7\27\30\56\125\32\36\50\37" "\0\23\33\117\103\63\32\7\71\54\76\131\6\31" }, { -832, -416, 291, "\42\133\113\45\54\100\141\110\131\33\57\21\116\36\3\14" "\135\120\22\27\66\21\56\12\1\141\36\125\62\132\22\25" "\125\71\15\112\41\110\41\24\116\41\107\35\62\54\15\124" "\51\106\75\42\27\12\7\45\126\124\124\70\55\65\13\17" "\100\132\105\53\23\20\124\32\5\13\30\112\122\71\1\137" "\135\53\30\14\111\77\50\137\77\134\137\112\41\111\102\125" "\50\130\51\110\116\36\102\24\72\106\141\47\112\4\135\44" "\67\102\75\74\21\107\127\134\66\132\34\106\141\22\60\112" "\20\62\63\32\112\25\11\63\17\133\24\46\2\35\112\55" "\36\72\104\106\72\107\126\57\34\124\103\72\51\70\15\105" "\17\44\133\143\16\103\46\111\37\4\76\122\71\36\56\34" "\24\40\45\136\104\27\71\40\101\26\36\115\63\126\37\62" "\34\50\45\107\74\6\15\6\73\76\102\124\121\47\67\74" "\57\67\131\45\22\56\52\106\56\122\72\62\116\120\43\30" "\56\130\43\62\53\47\23\143\27\123\122\106\134\46\56\114" "\123\33\106\60\30\33\106\43\15\15\41\15\27\124\11\74" "\73\122\43\66\117\25\13\35\65\125\100\32\33\50\12\135" "\26\141\143\113\67\132\100\114\133\126\7\137\2\12\71\14" "\131\6\31" }, { -800, -400, 280, "\16\143\105\104\15\131\70\36\137\60\21\100\54\45\76\120" "\101\43\43\47\140\20\140\27\133\10\35\117\45\41\54\57" "\75\115\12\125\72\64\23\3\2\115\11\104\14\123\141\51" "\60\44\30\30\131\100\114\34\0\72\74\143\65\123\100\17" "\2\77\16\106\26\133\75\45\72\5\45\64\21\116\1\40" "\17\76\27\52\132\130\137\122\116\51\37\16\36\32\23\17" "\11\6\51\70\12\33\34\32\70\121\126\44\51\52\11\5" "\40\1\43\130\36\66\133\141\5\26\104\103\124\120\73\120" "\122\4\115\4\143\111\105\65\116\41\57\65\31\25\46\45" "\110\65\5\60\10\72\137\2\21\105\40\111\63\132\103\43" "\120\134\11\3\1\0\137\47\77\112\10\62\133\15\74\125" "\14\52\42\76\26\133\42\42\31\73\135\5\24\126\143\63" "\43\45\57\63\1\7\104\102\133\125\143\63\130\54\123\133" "\102\122\30\101\72\50\67\127\36\5\102\130\141\51\142\110" "\4\3\22\52\76\42\5\35\114\44\133\6\54\13\12\137" "\114\60\33\120\123\12\13\35\33\40\133\130\104\57\11\37" "\10\112\100\76\111\76\72\24\134\57\43\36\117\32\37\24" "\130\140\77\105\76\131\6\31" }, { -768, -384, 269, "\6\54\13\60\114\137\141\15\41\10\26\106\44\62\41\104" "\125\31\5\24\60\15\37\54\47\101\77\43\124\36\113\106" "\143\40\35\40\44\32\135\33\70\3\105\100\76\131\110\64" "\31\75\32\6\104\125\76\22\10\61\16\102\107\61\57\57" "\26\107\132\56\31\112\100\71\42\73\4\64\26\15\112\66" "\65\35\65\113\132\120\74\62\130\4\134\116\127\7\31\133" "\0\34\77\53\120\33\5\103\21\57\124\3\60\2\42\31" "\135\24\105\74\33\143\105\74\106\72\67\43\114\103\135\7" "\111\35\17\25\114\113\67\117\37\2\16\13\25\72\20\47" "\110\44\123\120\107\131\127\55\21\46\124\105\3\27\71\107" "\43\52\102\60\117\133\16\114\125\32\104\64\54\123\62\102" "\62\136\5\141\143\115\26\40\73\104\65\76\62\107\104\104" "\101\41\55\100\122\137\47\53\115\141\64\134\33\67\143\23" "\133\142\122\45\117\25\74\67\15\73\74\115\15\106\26\110" "\133\135\103\30\42\12\16\55\141\62\44\115\35\131\37\55" "\15\0\101\137\53\114\40\134\4\131\55\105\0\33\3\141" "\55\57\41\2\132\7\133\20\122\14\131\6\31" }, { -736, -368, 258, "\2\114\100\64\41\16\11\3\32\101\51\127\50\137\30\140" "\112\17\41\61\2\42\35\103\36\44\130\64\117\31\24\33" "\76\25\13\121\122\50\72\114\35\23\105\132\140\60\66\71" "\72\60\40\44\110\134\104\66\30\0\137\26\56\43\115\23" "\57\114\70\141\22\110\14\17\46\130\63\130\122\54\101\52" "\30\43\110\41\61\65\16\75\130\12\76\125\37\126\17\17" "\137\43\34\27\10\104\3\37\44\57\6\125\55\41\131\127" "\32\24\13\110\75\76\4\4\102\23\4\72\44\131\1\55" "\61\134\117\7\76\101\110\52\55\26\132\46\62\57\105\132" "\30\7\33\100\34\64\64\120\107\55\33\31\116\25\60\63" "\55\53\132\121\137\143\7\70\4\71\33\27\26\142\64\44" "\43\107\130\43\74\46\132\4\110\64\47\16\110\22\23\50" "\112\25\100\107\24\51\32\45\0\10\32\16\36\23\111\143" "\117\44\33\45\65\42\0\10\15\33\10\53\56\71\50\73" "\40\105\66\127\67\56\2\52\70\11\11\45\110\46\100\121" "\143\10\25\61\50\44\135\76\1\17\63\125\105\136\76\131" "\6\31" }, { -704, -352, 247, "\1\22\121\122\26\131\42\57\60\131\105\105\24\31\44\56" "\135\136\53\35\5\54\62\47\123\54\135\137\33\74\133\34" "\73\116\101\131\5\117\124\24\14\110\27\31\11\43\101\116" "\130\102\55\1\77\20\53\53\137\75\44\117\25\111\100\16" "\2\111\103\130\140\131\107\65\132\44\61\7\122\143\126\44" "\112\4\52\70\54\123\51\24\71\2\27\67\140\17\61\106" "\62\25\46\74\7\47\11\50\1\35\125\131\130\125\1\30" "\43\30\12\11\57\3\54\107\47\131\20\75\30\1\104\14" "\64\100\10\64\30\15\123\113\53\132\15\0\54\7\63\16" "\106\124\53\77\135\35\57\114\25\116\13\50\124\54\46\46" "\132\72\12\102\5\116\6\101\67\42\107\33\53\31\127\65" "\134\54\137\51\77\105\132\121\77\40\131\20\3\10\12\110" "\134\61\50\112\6\56\30\124\143\53\102\116\11\31\20\1" "\131\45\126\103\32\32\142\62\70\142\43\103\66\113\105\13" "\54\63\27\61\75\111\117\30\40\33\41\36\77\31\141\24" "\120\27\7\14\131\6\31" }, { -672, -336, 235, "\63\3\24\46\16\140\23\66\71\121\121\57\142\51\41\44" "\35\77\136\31\41\64\106\100\16\70\127\117\121\116\131\77" "\142\131\27\43\53\53\43\134\16\131\24\26\5\136\64\3" "\24\72\54\44\30\4\110\13\100\132\33\120\130\121\46\71" "\117\126\7\43\21\116\77\22\133\101\17\32\43\124\71\114" "\14\116\60\67\2\32\31\133\136\3\12\73\137\110\102\20" "\66\64\143\130\27\44\12\20\52\57\26\63\2\2\133\33" "\47\15\55\43\65\17\104\34\52\143\52\24\11\77\34\143" "\67\10\115\50\12\37\17\26\131\15\4\140\54\131\101\76" "\50\25\50\5\141\135\31\113\53\15\125\107\140\53\33\4" "\61\16\134\13\67\11\64\37\1\33\34\76\62\62\117\31" "\107\51\136\102\75\6\72\74\0\25\14\10\53\56\26\12" "\61\25\17\53\121\44\67\25\1\105\74\104\36\27\73\77" "\105\52\66\30\65\43\73\26\104\31\13\132\32\25\76\106" "\126\115\43\16\112\114\23\76\131\6\31" }, { -640, -320, 224, "\25\133\120\135\61\0\124\3\3\141\64\105\37\7\16\13" "\24\123\32\36\120\127\26\14\50\44\76\40\110\74\56\10" "\47\6\16\113\15\17\65\57\46\33\51\57\11\20\101\106" "\55\45\21\72\134\73\52\61\37\134\70\56\105\42\0\132" "\32\114\75\37\36\27\53\133\50\76\101\134\13\46\5\120" "\71\104\124\106\46\6\33\140\77\127\122\110\11\30\103\41" "\46\22\117\66\141\16\76\4\77\55\62\24\33\23\101\44" "\65\125\30\74\136\64\27\71\70\101\104\57\120\36\113\132" "\5\44\103\17\31\65\52\113\113\132\13\1\125\30\67\16" "\130\24\1\57\71\26\43\31\102\132\125\57\71\122\134\107" "\44\67\117\11\56\43\64\70\11\101\27\54\4\37\76\0" "\53\37\32\43\41\132\66\32\64\13\22\72\135\23\42\14" "\136\113\62\46\110\101\40\2\55\131\124\103\136\132\51\104" "\120\35\126\65\32\122\67\35\41\105\35\40\14\131\6\31" }, { -608, -304, 213, "\11\51\45\61\57\36\72\16\12\124\134\60\4\122\36\137" "\111\120\40\135\44\15\12\43\66\34\131\64\56\25\11\34" "\71\114\71\113\62\27\65\136\103\114\47\46\14\50\143\115" "\17\17\23\105\33\60\133\132\136\27\127\103\130\63\120\112" "\20\1\35\40\31\124\0\131\143\4\45\67\120\114\110\112" "\55\127\25\32\20\51\6\21\127\71\127\5\13\76\15\102" "\126\106\0\51\55\3\67\1\2\43\133\103\64\43\12\122" "\105\141\53\26\51\104\125\31\4\131\26\141\70\10\102\4" "\51\1\7\65\5\10\100\16\41\13\143\117\1\126\101\142" "\121\60\127\114\45\31\14\52\31\12\65\126\44\107\76\110" "\4\102\103\16\107\70\10\107\65\40\33\33\137\137\14\14" "\25\3\31\127\26\124\121\23\50\101\15\65\136\56\52\31" "\114\14\43\22\114\75\102\125\41\13\0\73\117\115\77\122" "\54\76\131\6\31" }, { -576, -288, 202, "\4\4\37\112\75\23\64\23\61\6\77\5\143\65\42\45" "\134\74\40\124\41\27\134\22\130\33\40\51\15\72\125\120" "\75\72\123\22\66\12\104\121\110\52\13\44\4\133\21\75" "\10\11\130\53\21\5\101\113\124\133\5\55\0\122\22\77" "\104\26\101\121\7\76\131\64\126\42\76\76\100\102\140\55" "\3\127\32\47\24\110\122\23\102\123\101\123\113\0\20\67" "\126\34\72\57\75\133\13\133\114\67\36\7\105\73\32\53" "\15\5\72\125\43\50\34\22\35\3\74\11\120\32\26\2" "\34\125\12\14\17\45\117\45\24\6\50\130\13\35\45\101" "\134\100\105\65\3\12\143\123\104\3\100\141\102\0\50\121" "\40\107\57\53\122\123\36\15\111\10\56\125\53\23\74\135" "\114\66\132\66\136\140\73\50\10\32\7\125\121\36\43\132" "\132\126\56\72\43\71\14\131\6\31" }, { -544, -272, 191, "\1\111\101\36\33\36\43\25\103\123\135\140\23\125\60\142" "\127\62\113\107\35\11\121\44\54\55\134\15\101\132\67\16" "\35\54\33\116\23\61\64\12\2\136\2\116\124\106\14\103" "\130\10\75\11\25\65\1\34\122\65\101\15\46\137\123\62" "\140\45\12\21\134\50\67\74\6\63\35\113\41\143\46\114" "\70\125\31\125\7\54\60\53\143\117\135\64\45\122\104\75" "\72\114\122\46\20\37\110\63\62\131\41\75\120\100\54\3" "\42\127\136\135\42\17\127\100\33\53\40\110\65\10\73\106" "\3\42\10\111\34\70\142\11\31\70\105\53\112\105\14\140" "\1\2\126\71\111\52\76\22\105\142\32\14\133\124\31\72" "\23\2\76\31\30\47\105\71\116\3\12\75\125\104\107\142" "\74\45\111\16\3\60\61\50\64\130\105\76\131\6\31" }, { -512, -256, 179, "\112\72\42\7\37\24\2\6\112\40\132\140\65\17\56\35" "\41\123\111\114\57\17\42\74\4\6\131\52\107\63\123\41" "\24\76\116\46\62\106\13\123\4\135\75\112\131\4\0\52" "\116\3\44\17\13\74\40\67\123\75\1\55\42\14\110\120" "\137\26\65\2\102\4\126\20\60\35\73\24\124\105\16\121" "\32\7\134\37\127\121\45\112\137\24\50\112\32\100\43\32" "\35\51\54\101\66\44\62\77\133\57\101\51\52\21\32\5" "\130\62\107\24\3\20\126\122\36\3\26\33\52\35\113\77" "\105\134\101\43\2\17\41\110\6\5\123\44\63\102\34\100" "\74\3\75\35\33\53\43\63\124\105\104\101\111\32\61\132" "\10\17\41\23\131\21\131\71\130\40\104\73\57\51\122\14" "\131\6\31" }, { -480, -240, 168, "\40\3\41\35\64\35\35\75\57\132\127\41\77\54\25\123" "\76\47\37\112\45\33\104\11\123\104\0\47\22\133\0\142" "\65\125\47\100\125\112\116\64\116\101\63\122\101\25\74\76" "\25\113\142\56\121\14\1\12\123\53\21\104\116\66\71\42" "\113\133\41\4\126\116\60\142\105\50\43\77\51\103\106\45" "\52\100\131\142\70\25\50\26\133\71\37\131\72\24\35\56" "\54\123\56\111\107\47\35\123\67\72\126\107\125\71\62\33" "\102\77\57\117\47\143\30\15\130\63\35\122\22\7\107\57" "\23\130\122\16\72\50\10\73\125\114\40\70\124\7\10\31" "\136\114\26\116\76\13\105\134\77\137\125\7\117\137\53\54" "\3\51\136\136\76\131\6\31" }, { -448, -224, 157, "\15\113\122\12\32\122\141\47\115\77\102\116\141\64\75\106" "\6\63\75\44\2\30\102\52\137\60\32\127\120\55\22\106" "\133\127\20\63\126\26\120\43\116\24\56\31\77\63\135\100" "\17\142\60\102\70\24\7\126\56\121\34\141\53\120\141\35" "\60\36\114\104\121\46\104\132\0\115\67\75\73\0\131\7" "\113\50\136\30\134\37\66\41\7\143\102\36\70\55\26\54" "\73\32\60\125\131\34\17\137\3\44\47\134\54\60\64\36" "\103\121\31\131\112\142\124\126\121\30\110\130\125\45\124\52" "\40\30\21\104\30\16\16\107\113\56\121\12\141\35\35\2" "\67\134\112\120\113\110\44\60\7\14\131\6\31" }, { -416, -208, 146, "\5\132\133\6\37\65\122\127\10\143\104\71\17\104\117\141" "\141\42\0\26\37\14\116\10\44\20\115\2\56\66\72\72" "\140\141\132\11\25\115\143\20\40\122\24\100\66\143\7\143" "\21\35\32\55\43\16\112\115\42\132\11\40\133\33\77\0" "\101\114\52\15\75\1\70\74\45\6\55\137\70\101\56\77" "\55\114\63\70\12\67\13\63\77\136\65\22\43\64\121\117" "\27\13\25\140\133\12\121\76\104\4\23\136\137\42\77\21" "\51\21\70\102\40\40\122\3\34\44\11\123\51\17\102\136" "\27\72\24\76\41\76\10\114\54\77\102\37\1\23\76\131" "\6\31" }, { -384, -192, 135, "\2\65\117\51\123\111\17\100\134\27\33\50\30\67\72\36" "\66\43\56\122\44\22\124\141\1\11\67\121\74\74\74\40" "\14\47\57\102\141\130\134\143\57\47\40\50\112\35\5\71" "\124\34\76\35\102\55\133\5\115\62\131\72\56\74\24\107" "\42\30\53\76\103\2\116\7\6\43\114\114\21\141\116\53" "\127\20\61\141\43\105\62\102\130\32\72\122\6\104\30\46" "\6\124\11\64\122\107\120\116\7\13\5\15\122\117\110\15" "\112\115\65\2\42\61\62\60\136\51\66\50\62\43\7\125" "\31\66\40\14\131\6\31" }, { -352, -176, 124, "\1\11\0\45\107\132\52\10\101\124\35\105\111\113\15\73" "\37\12\101\17\13\34\114\47\123\65\54\131\123\104\14\122" "\43\14\104\6\74\17\130\75\42\104\130\140\136\52\27\52" "\3\44\104\142\107\14\70\44\52\31\51\54\141\72\72\14" "\133\51\101\51\135\51\24\113\54\74\101\143\124\106\106\102" "\12\121\41\6\72\4\2\137\74\131\67\27\4\35\74\44" "\1\75\44\53\42\102\26\1\135\3\45\15\37\60\131\75" "\0\56\64\10\35\24\7\54\76\131\6\31" }, { -320, -160, 112, "\56\121\103\77\66\105\25\142\40\107\67\124\136\15\125\126" "\114\70\143\17\2\41\46\117\51\123\37\77\45\17\66\65" "\126\3\123\33\102\111\143\140\61\60\102\43\11\113\47\32" "\56\41\54\36\65\117\6\37\52\0\23\77\133\113\41\112" "\23\133\61\37\24\56\14\32\134\41\120\113\34\134\106\132" "\112\66\17\21\30\55\26\132\132\77\63\23\52\40\133\61" "\133\112\51\12\1\16\137\100\142\16\74\71\14\131\6\31" }, { -288, -144, 101, "\24\12\114\56\123\46\73\60\117\75\60\2\121\134\114\27" "\116\62\41\76\100\122\111\133\141\112\66\22\105\105\5\22" "\47\142\46\37\27\42\1\60\16\120\74\70\11\41\1\105" "\13\103\101\33\42\47\11\15\7\120\21\53\131\135\71\136" "\76\122\143\100\126\31\131\137\120\107\137\62\37\53\0\52" "\127\23\142\30\33\73\54\73\35\67\5\101\115\134\11\15" "\105\76\131\6\31" }, { -256, -128, 90, "\10\77\75\104\67\62\136\54\56\31\46\77\63\126\34\0" "\47\137\107\13\74\0\44\54\44\34\15\125\2\45\3\57" "\1\104\73\22\3\20\30\33\5\117\107\62\113\3\57\26" "\130\26\101\74\66\110\135\136\75\61\102\43\140\143\62\142" "\136\104\37\136\102\135\101\36\3\115\106\72\7\57\112\104" "\76\57\13\3\102\122\14\131\6\31" }, { -224, -112, 79, "\3\106\134\6\17\6\127\52\15\125\111\21\43\32\17\57" "\77\137\15\44\113\100\115\127\71\117\12\2\55\36\47\5" "\131\21\72\15\50\11\70\35\43\131\141\37\24\122\110\40" "\10\53\113\44\41\131\23\15\74\1\17\132\33\4\137\103" "\46\60\134\110\65\125\110\66\142\23\136\76\131\6\31" }, { -192, -96, 68, "\1\73\36\133\133\13\40\55\26\115\2\130\120\47\115\103" "\107\22\5\73\13\4\67\63\134\75\127\126\7\46\125\125" "\41\126\20\35\1\63\36\72\20\11\53\10\142\112\110\1" "\122\104\73\50\142\42\56\134\75\13\43\66\27\134\111\7" "\14\131\6\31" }, { -160, -80, 56, "\104\52\33\114\71\123\74\24\125\51\23\115\41\67\132\115" "\135\74\141\102\132\50\15\6\131\30\102\103\122\67\143\117" "\135\6\24\64\11\33\5\45\22\23\100\113\64\133\13\134" "\21\127\32\23\76\131\6\31" }, { -128, -64, 45, "\35\46\111\72\115\5\71\22\114\143\25\124\15\53\5\70" "\16\23\55\56\102\46\133\135\2\22\120\45\107\127\134\101" "\105\74\53\16\126\44\121\117\40\14\131\6\31" }, { -96, -48, 34, "\14\76\21\112\60\43\44\22\130\126\72\114\71\4\55\30" "\71\140\112\115\15\2\140\21\54\44\120\114\40\54\76\131" "\6\31" }, { -64, -32, 23, "\5\52\12\12\126\30\33\64\25\106\3\110\100\0\53\61" "\106\125\71\14\131\6\31" }, { -32, -16, 12, "\2\40\123\6\53\101\46\105\76\131\6\31" }, { 0, 0, 1, "\1" }, { 32, 0, 5, "\52\136\140\110\140" }, { 64, 0, 10, "\22\54\103\54\7\45\11\67\20\20" }, { 96, 0, 15, "\7\134\34\20\31\16\32\53\45\73\43\53\137\3\44" }, { 128, 0, 20, "\3\50\34\27\102\134\11\46\56\42\77\45\56\7\53\21" "\104\25\16\70" }, { 160, 0, 25, "\1\56\17\1\77\111\36\132\35\22\24\44\124\123\33\20" "\34\36\23\101\73\40\66\35\114" }, { 192, 0, 29, "\76\115\12\21\43\46\102\120\114\46\43\116\136\27\24\114" "\102\51\75\2\43\66\54\56\50\42\63\34\140" }, { 224, 0, 34, "\32\137\143\56\102\107\62\77\141\136\102\106\17\10\106\23" "\77\6\111\77\107\54\52\31\50\71\30\121\12\44\12\30" "\134\20" }, { 256, 0, 39, "\13\71\134\10\134\45\37\75\137\52\43\106\142\62\10\104" "\117\7\125\40\105\142\56\101\100\5\100\3\136\71\72\50" "\7\133\37\35\77\143\44" }, { 288, 0, 44, "\4\141\40\40\44\50\141\126\100\25\67\46\26\60\16\104" "\24\124\1\0\55\75\62\117\111\57\107\112\50\56\47\114" "\131\37\73\61\106\14\65\41\113\65\36\70" }, { 320, 0, 49, "\2\15\73\127\3\73\24\133\0\122\47\62\25\106\75\105" "\67\25\16\74\33\4\64\27\70\101\33\105\136\106\51\74" "\116\26\25\141\31\116\6\50\67\0\26\140\24\126\135\101" "\114" }, { 352, 0, 53, "\133\111\143\54\77\140\2\126\4\100\53\34\43\121\24\123" "\57\114\37\126\31\143\70\103\37\30\61\61\62\43\65\71" "\66\114\133\62\53\65\135\134\40\34\0\112\25\30\50\62" "\33\56\25\124\140" }, { 384, 0, 58, "\47\50\24\6\23\77\136\57\134\14\33\132\50\12\1\53" "\75\46\5\7\141\47\33\4\101\54\102\103\136\122\135\50" "\52\55\110\21\107\61\110\12\75\16\16\32\76\66\130\61" "\17\100\10\6\76\117\132\36\104\20" }, { 416, 0, 63, "\20\134\36\40\120\12\36\44\51\41\20\132\37\130\70\46" "\135\126\23\74\107\73\130\46\125\73\134\15\104\106\11\17" "\132\30\116\122\67\100\137\106\55\37\30\124\45\127\31\103" "\13\35\24\142\41\62\33\124\5\141\141\31\130\137\44" }, { 448, 0, 68, "\7\32\123\127\30\35\70\6\131\5\61\40\46\7\130\120" "\4\65\53\65\100\15\74\104\111\22\6\2\121\61\1\143" "\22\6\47\34\121\15\47\117\27\40\75\133\5\7\15\114" "\43\101\70\7\76\64\20\6\32\75\115\135\43\42\74\20" "\34\75\56\70" }, { 480, 0, 73, "\3\14\21\60\67\3\17\143\26\37\46\17\141\26\141\135" "\20\77\5\112\125\142\16\32\100\141\13\62\125\133\70\137" "\140\31\45\21\46\121\141\101\76\1\24\36\75\3\6\42" "\133\141\13\73\122\105\37\14\16\6\76\34\137\54\117\113" "\103\134\130\34\65\6\35\1\114" }, { 512, 0, 78, "\1\42\7\120\117\35\136\31\141\11\137\112\2\61\142\24" "\72\56\14\112\117\44\72\24\73\27\135\45\115\27\70\16" "\53\110\21\100\3\0\111\66\105\114\120\22\112\35\121\102" "\132\42\33\105\0\37\125\121\126\60\74\62\125\45\65\130" "\34\13\136\101\105\136\100\41\100\132\6\10\50\140" }, { 544, 0, 82, "\71\72\74\140\71\1\64\133\44\143\141\60\134\131\123\120" "\70\115\135\65\25\27\13\52\100\65\35\3\104\140\107\40" "\136\37\64\12\40\73\62\54\112\0\123\110\7\122\14\142" "\2\141\17\22\142\114\70\12\132\103\55\113\115\6\72\5" "\63\3\33\3\74\23\36\131\136\37\62\112\11\111\55\110" "\54\20" }, { 576, 0, 87, "\30\111\36\50\16\111\12\55\42\6\5\2\64\12\23\100" "\107\132\3\63\37\42\133\1\25\22\47\133\50\77\5\74" "\134\131\110\31\12\101\37\126\107\106\37\100\1\6\14\53" "\4\61\131\73\114\107\52\74\20\15\135\47\43\15\101\3" "\53\6\113\14\11\140\113\56\17\63\1\131\37\103\133\102" "\6\115\25\60\105\133\44" }, { 608, 0, 92, "\12\76\33\73\125\77\43\42\23\111\117\21\100\15\12\61" "\45\31\56\73\22\76\43\55\50\77\124\77\142\130\122\114" "\50\10\7\13\141\25\106\54\125\57\123\31\0\55\36\55" "\125\107\41\115\116\101\131\110\61\36\2\3\6\135\17\126" "\113\36\66\16\57\130\23\3\143\71\65\37\112\106\46\127" "\102\31\51\103\7\126\53\120\77\55\76\70" }, { 640, 0, 97, "\4\70\30\50\75\114\26\23\64\22\100\13\107\74\71\0" "\35\15\30\131\40\34\62\110\60\67\143\36\71\133\134\63" "\116\143\33\63\103\24\126\115\46\101\5\133\34\13\37\111" "\107\47\141\116\100\27\11\71\43\136\50\111\12\104\127\4" "\110\15\113\53\117\142\31\32\75\37\141\26\25\51\130\31" "\23\136\103\53\74\32\61\62\10\34\112\23\26\56\74\45" "\114" }, { 672, 0, 102, "\1\137\137\65\40\52\76\135\105\112\115\133\50\20\5\74" "\101\72\51\120\130\134\107\36\60\112\77\124\61\41\102\26" "\2\56\64\121\56\64\102\24\11\122\55\114\57\27\64\43" "\64\130\46\111\62\12\43\131\0\61\70\124\70\117\13\35" "\120\16\132\122\142\42\1\106\130\67\15\21\13\11\112\40" "\61\62\55\41\16\43\7\104\31\1\1\107\55\46\17\117" "\142\61\132\12\140\140" }, { 704, 0, 106, "\124\20\25\112\52\57\111\141\75\17\125\72\46\14\74\122" "\5\126\60\120\66\44\124\63\106\116\21\63\141\30\136\54" "\132\143\107\54\104\113\40\135\17\46\22\102\55\120\54\16" "\17\25\140\37\110\113\1\105\130\63\60\42\10\37\11\20" "\0\35\50\126\22\12\4\62\44\41\4\36\11\43\143\34" "\43\116\111\120\67\13\43\107\6\102\24\14\75\61\20\42" "\114\42\6\134\2\115\110\62\24\20" }, { 736, 0, 111, "\44\16\111\116\103\16\101\22\47\74\136\125\135\22\2\23" "\27\102\62\131\111\36\7\21\0\23\27\17\136\113\54\107" "\62\52\60\12\34\76\41\50\117\127\137\22\75\130\111\131" "\53\140\14\33\61\32\116\45\120\43\17\75\143\141\121\143" "\130\40\53\50\51\35\75\142\117\65\32\40\133\1\76\37" "\51\131\141\11\116\114\77\53\40\140\132\64\117\6\74\63" "\66\126\50\136\24\15\35\10\23\130\104\16\6\127\44" }, { 768, 0, 116, "\17\64\63\120\134\36\7\10\135\63\60\141\136\130\56\31" "\2\67\64\70\130\74\21\13\102\140\75\13\47\5\24\46" "\2\74\62\137\32\126\45\104\126\41\10\116\50\130\34\100" "\100\115\137\4\127\111\6\141\15\12\111\24\75\107\72\0" "\54\13\60\16\47\16\54\34\110\113\4\13\121\15\134\4" "\55\61\114\2\10\61\132\67\62\32\64\125\77\17\142\54" "\60\31\32\35\143\23\45\20\56\127\62\131\34\56\125\46" "\20\5\116\70" }, { 800, 0, 121, "\6\102\120\16\53\34\117\125\52\112\7\142\63\117\7\25" "\31\115\141\16\57\72\40\27\17\132\121\74\47\76\71\121" "\21\100\3\110\45\121\114\40\7\17\25\53\26\0\127\17" "\66\35\7\52\134\143\12\73\42\41\30\4\55\130\130\1" "\101\51\23\44\62\120\44\41\70\5\27\36\123\0\56\11" "\63\71\71\137\16\1\55\72\56\36\116\34\73\13\121\50" "\30\110\131\101\1\75\43\130\102\1\142\20\132\112\120\45" "\57\100\75\35\13\77\127\111\114" }, { 832, 0, 126, "\2\126\46\132\47\22\57\61\75\24\54\22\116\47\41\103" "\60\46\61\7\25\111\133\110\21\6\64\64\136\51\54\141" "\2\37\12\100\0\65\64\132\51\73\42\64\124\32\72\30" "\76\123\113\52\135\73\62\134\22\143\141\24\7\53\140\126" "\7\71\7\41\114\106\4\55\2\74\51\70\55\117\76\5" "\14\127\53\7\141\134\14\12\26\102\120\14\75\57\131\116" "\115\76\55\4\0\10\27\21\55\30\112\113\135\5\65\74" "\103\45\72\44\17\43\127\127\12\100\112\35\64\140" }, { 864, 0, 131, "\1\27\0\37\67\110\37\44\24\125\103\124\112\57\104\40" "\27\102\54\17\111\22\105\22\7\17\6\73\54\135\7\3" "\75\122\66\137\67\25\137\42\134\36\36\12\44\126\135\66" "\1\61\42\46\26\106\132\62\40\26\16\35\137\64\104\134" "\3\127\102\137\137\44\0\105\141\113\61\53\130\24\75\52" "\11\10\125\131\141\35\42\116\33\10\41\22\130\55\123\113" "\124\43\55\5\60\63\113\102\133\102\32\133\31\60\33\61" "\10\13\33\102\130\24\37\53\47\34\65\43\104\20\11\102" "\77\140\20" }, { 896, 0, 135, "\64\122\136\65\13\43\102\64\56\43\27\47\116\61\20\63" "\102\6\63\130\57\40\74\44\14\17\26\14\117\74\106\132" "\32\103\47\2\67\103\30\125\136\112\51\110\67\130\114\71" "\22\116\136\103\53\136\143\40\71\14\126\116\130\27\57\67" "\137\2\104\67\45\31\5\46\141\124\76\135\137\114\132\123" "\126\104\47\143\0\62\124\20\127\37\63\114\114\52\100\51" "\5\36\30\27\35\10\25\13\130\50\51\60\2\122\134\113" "\17\75\111\130\46\47\104\142\114\106\44\57\100\131\65\125" "\120\131\115\45\143\123\44" }, { 928, 0, 140, "\26\105\0\115\41\130\41\43\141\26\127\10\32\105\35\75" "\14\133\64\47\42\140\110\136\25\133\31\26\25\41\17\110" "\54\31\44\50\37\45\122\50\70\37\34\21\126\32\137\67" "\12\110\6\105\65\75\132\100\76\67\10\23\56\77\44\125" "\143\114\136\60\50\102\77\31\56\106\127\17\111\123\10\55" "\73\113\137\131\114\15\41\36\52\52\134\16\26\56\141\57" "\54\110\51\10\122\27\76\66\2\50\71\13\2\14\32\2" "\62\103\17\25\27\72\7\106\134\110\30\53\131\44\20\51" "\11\12\126\3\62\27\26\140\26\51\136\70" }, { 960, 0, 145, "\11\112\65\16\1\15\143\143\132\120\43\41\122\46\116\113" "\22\123\12\127\76\32\125\113\137\0\113\32\126\117\6\55" "\110\14\136\126\132\114\100\32\12\30\101\75\62\101\130\24" "\12\31\134\31\36\61\20\27\16\10\102\121\123\55\133\105" "\126\64\3\11\50\56\71\117\127\35\77\14\101\42\23\65" "\14\115\105\143\70\57\36\35\127\7\131\101\66\132\5\44" "\60\43\33\143\73\42\117\25\123\116\127\44\125\73\117\31" "\47\60\112\136\71\56\44\44\17\56\131\101\75\34\33\111" "\130\3\12\52\115\66\106\121\122\125\131\143\23\16\13\11" "\114" }, { 992, 0, 150, "\4\22\67\120\61\104\25\43\103\26\55\57\125\42\116\132" "\77\24\110\62\66\127\66\71\30\112\6\66\7\107\61\137" "\55\107\104\45\135\55\103\121\110\124\131\5\75\103\30\130" "\13\136\72\12\133\102\133\10\51\133\141\141\125\130\110\126" "\33\26\43\74\21\40\120\100\113\75\63\20\77\7\122\116" "\105\50\65\106\50\107\64\34\104\1\7\32\114\2\60\127" "\33\35\74\113\125\30\3\65\45\117\35\4\75\105\72\7" "\71\114\53\71\115\143\4\6\3\135\77\64\106\12\4\45" "\44\30\11\77\5\65\52\52\43\66\2\142\135\6\50\13" "\10\34\42\100\10\140" }, }; tla-1.3.5+dfsg/src/hackerlab/fmt/Makefile.in0000644000175000017500000000027210457621774017311 0ustar useruser include $(makefiles)/library-objects.mk ifeq ($(cgs__install_hackerlab),1) include $(makefiles)/install-includes.mk endif # tag: Tom Lord Tue Dec 4 14:52:09 2001 (fmt/Makefile.in) # tla-1.3.5+dfsg/src/hackerlab/fmt/cvt-double.h0000644000175000017500000000125310457621774017461 0ustar useruser/* cvt-double.h - decls for converting floating point to and from strings * **************************************************************** * Copyright (C) 1998, 2000 Thomas Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__FMT__CVT_DOUBLE_H #define INCLUDE__FMT__CVT_DOUBLE_H #include "hackerlab/machine/types.h" /* automatically generated __STDC__ prototypes */ extern int cvt_double_to_decimal (t_uchar * buffer, int * base10_expt, double k, int precision, char format); extern int main (int argc, char * argv[]); #endif /* INCLUDE__FMT__CVT_DOUBLE_H */ tla-1.3.5+dfsg/src/hackerlab/fmt/cvt-double.c0000644000175000017500000005642510457621774017467 0ustar useruser/* cvt-double.c - converting floating point to and from strings * **************************************************************** * Copyright (C) 1998, 2000 Thomas Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/bugs/panic.h" #include "hackerlab/char/char-class.h" #include "hackerlab/char/str.h" #include "hackerlab/mem/mem.h" #include "hackerlab/fmt/cvt.h" #include "hackerlab/fmt/cvt-double.h" /**************************************************************** * Serious Bugs (fix NOW!): * * Todo: * */ /************************************************************************ *(h0 "Converting Floating Point to and from Strings" * :include ("fmt/cvt-double.h")) * * This functionality is not complete yet. */ /************************************************************************ * Converting Floating Point To and From Strings (Internals) * * Conversion to the formats used by `printfmt' (similar to `printf') * is in three stages: * * 1. Convert from double-precision floating point to * binary-encoded base 100 semi-normalized floating point. * 2. Convert from base 100 to ASCII-encoded decimal scientific * notation. * 3. Convert from scientific notation to the requested output * format. * * Not supported (yet) is conversion to minimal-length formats. * Instead, the precision of the output must be explicitly supplied by * the caller. More decimal digits may be produced by the conversion * than are warranted by the underlying floating-point precision (this * is a bug that will be fixed in the future.) * * The initial conversion to base 100 works by adding (in base 100) * powers of two. * * A double precision binary floating point number: * * b0 b1 b2 b3 ... x 2^K for k in [-1075...970] * with bits b0, b1, ... in {0,1} * is: * * b0 * 2^K + b1 * 2^(K-1) + .... * * To convert a binary floating point number to decimal, the values * 2^K are computed using a multi-precision binary encoded base 100 * representation using a combination of table look-ups and easy * power-of-two, single-digit (base 100) multiplications. Addition * using that representation is trivial and so is conversion to * decimal. * * The base-100 powers-of-two table is generated by * "=pow2-base100-tables.scm" and its size can be changed staticly * without modifying the code. The larger the table, the faster * conversion runs. The table can be quite small and still produce * good results. The algorithm also uses tables to handle * single-digit overflow during addition and multiplication: * * quotient100_table[x] == x / 100 // for x in [0 .. 64 * 99] * mod100_table[x] == x % 100 // for x in [0 .. 64 * 99] * * Table lookup in that range seems to be non-trivially faster than * the divide instruction on the author's machine. Presumably * table-lookup isn't slow on any machine. * * This technique is referred to in "How to Print Floating-Point * Numbers Accurately" (Guy L. Steele and Jon L. White, `Proceedings * of the ACM SIGPLAN '90 Conference on Programming Language Design * and Implementation') as "gross overkill" but (assuming this * algorithm can be trivially extended to support minimal-length * formats) "gross overkill" is competitive on modern machines, * especially in terms of simplicity and implementation size. * * This code is not especially optimized. Many uses of `mem_move' * could be eliminated, probably resulting in a large speed-up. The * addition and multiplication loops can probably be slightly * improved. * * Conversion from decimal to binary floating point hasn't been * implemented yet but will probably also work by brute-force: a * precise conversion form decimal to multi-precision binary encoded * base 100 floating point-(or some other base 10^n) followed by a * rounding-conversion to base2 using multi-precision divides by * powers of two. */ #include "hackerlab/fmt/cvt-double-constants.h" struct base100_float { int base2_expt; int base100_expt; int n_digits; t_uchar * digits; }; #define pow2_enough_base100_digits 1024 /* larger than needed */ #define pow2_enough_base10_digits (2 * pow2_enough_base100_digits) /* larger than needed */ struct base100_float_temp { struct base100_float n; t_uchar digit_space[pow2_enough_base100_digits]; }; #include "hackerlab/fmt/cvt-double-tables.h" #if 0 #define MOD100(N) ((N)%100) #define QUOT100(N) ((N)/100) #else #define MOD100(N) mod100_table[(N)] #define QUOT100(N) quotient100_table[(N)] #endif static void weird_pow2_base100 (struct base100_float * answer, int n, int n_in_answer) { int biased_n; int nearest_in_table; int pow2_from_table; int pow2_from_answer; if ((n < pow2_base100_min_expt) || (n > 1023)) panic ("pow2_base100 exponent out of range"); biased_n = n - pow2_base100_min_expt; nearest_in_table = biased_n / powers_table_frequency; pow2_from_table = biased_n % powers_table_frequency; if ( (n_in_answer == pow2_base100_non_expt) || ((n - n_in_answer) > pow2_from_table)) { answer->base2_expt = pow2_table[nearest_in_table].base2_expt; answer->base100_expt = pow2_table[nearest_in_table].base100_expt; answer->n_digits = pow2_table[nearest_in_table].n_digits; mem_move (answer->digits, pow2_table[nearest_in_table].digits, answer->n_digits); n_in_answer = nearest_in_table; pow2_from_answer = pow2_from_table; } else pow2_from_answer = n - n_in_answer; while (pow2_from_answer) { int mult_digits; t_uchar * mult; t_uchar * prod; t_uchar carry; int log2_factor_from_answer; if (pow2_from_answer <= 6) { log2_factor_from_answer = pow2_from_answer; pow2_from_answer = 0; } else { log2_factor_from_answer = 6; pow2_from_answer -= 6; } prod = answer->digits + pow2_enough_base100_digits - 1; mult = answer->digits + answer->n_digits - 1; mult_digits = answer->n_digits; carry = 0; while (mult_digits) { int digit_result; digit_result = carry + (*mult << log2_factor_from_answer); *prod = MOD100 (digit_result); carry = QUOT100 (digit_result); --prod; --mult; --mult_digits; } if (!carry) ++prod; else *prod = carry; answer->n_digits = (answer->digits + pow2_enough_base100_digits) - prod; mem_move (answer->digits, prod, answer->n_digits); answer->base2_expt = n; while (0 == answer->digits[answer->n_digits - 1]) { ++answer->base100_expt; --answer->n_digits; } } } static void weird_base100_add (struct base100_float * answer, struct base100_float * k) { int carry; t_uchar * sum; t_uchar * m; t_uchar * n; t_uchar * m_stop; t_uchar * n_stop; int m_digits; int n_digits; int digit; m = answer->digits + answer->n_digits - 1; m_stop = answer->digits; m_digits = answer->n_digits; n = k->digits + k->n_digits - 1; n_stop = k->digits; n_digits = k->n_digits; sum = answer->digits + pow2_enough_base100_digits - 1; carry = 0; if (answer->base100_expt < k->base100_expt) { int x; x = k->base100_expt - answer->base100_expt; while ((m >= m_stop) && x) { *sum = *m; --m; --sum; --x; } if (x) while (x--) { *sum = 0; --sum; } } while ((m >= m_stop) && (n >= n_stop)) { digit = *m + *n + carry; *sum = MOD100 (digit); carry = QUOT100 (digit); --m; --n; --sum; } while (m >= m_stop) { digit = *m + carry; *sum = MOD100 (digit); carry = QUOT100 (digit); --m; --sum; } while (n >= n_stop) { digit = *n + carry; *sum = MOD100 (digit); carry = QUOT100 (digit); --n; --sum; } if (!carry) ++sum; else *sum = carry; /* answer->base100_expt = k->base100_expt; */ answer->n_digits = (answer->digits + pow2_enough_base100_digits - sum); mem_move (answer->digits, sum, answer->n_digits); } static void double_to_base100 (struct base100_float * answer, double aDouble) { int raw_exponent; int base2_exponent; int implicit_bit; unsigned long long fraction; struct base100_float_temp temp; union { double dbl; unsigned long long lng; } double_to_long; if (aDouble == 0.0) { answer->base2_expt = 0; answer->base100_expt = 0; answer->n_digits = 1; answer->digits[0] = 0; return; } temp.n.digits = temp.digit_space; double_to_long.dbl = aDouble; raw_exponent = ((*(unsigned long long *)&double_to_long.lng) >> 52) & 0x7ff; base2_exponent = (!raw_exponent ? 0 : raw_exponent - 1023) - 52; implicit_bit = (raw_exponent ? 1 : 0); fraction = ((*(unsigned long long *)&double_to_long.lng) & 0xfffffffffffffLL); if (implicit_bit) fraction |= 0x10000000000000LL; if (!fraction) panic ("unexpected nan in double_to_base100"); while (!(fraction & 1)) { ++base2_exponent; fraction >>= 1; } weird_pow2_base100 (&temp.n, base2_exponent, pow2_base100_non_expt); answer->base2_expt = temp.n.base2_expt; answer->base100_expt = temp.n.base100_expt; answer->n_digits = temp.n.n_digits; mem_move (answer->digits, temp.n.digits, temp.n.n_digits); while (fraction) { ++base2_exponent; fraction >>= 1; if (fraction & 1) { weird_pow2_base100 (&temp.n, base2_exponent, temp.n.base2_expt); weird_base100_add (answer, &temp.n); } } } /* double_to_e_decimal * * Fill buffer with: * * (-)?[0-9]\.[0-9]*[eE][+-](0[1-9]|[1-9][0-9]+) * * Giving as many digits as necessary to precisely represent * `k', presuming that `k' is infinite precision. (A smaller * number of digits may be enough to represent the actual bit * pattern of (the finite precision value) `k'.) */ static int double_to_e_decimal (t_uchar * buffer, int * base10_expt, double k, char e) { struct base100_float_temp answer; int d; int b; t_uchar * digs; int expt10; int shift; answer.n.digits = answer.digit_space; b = 0; if (k < 0) { buffer[b++] = '-'; k = -k; } double_to_base100 (&answer.n, k); digs = base100_digits_to_ascii_table[answer.n.digits[0]]; if (digs[0] != '0') { buffer[b++] = digs[0]; buffer[b++] = '.'; buffer[b++] = digs[1]; shift = 0; } else { buffer[b++] = digs[1]; buffer[b++] = '.'; shift = 1; } d = 1; while (d < answer.n.n_digits) { buffer[b++] = base100_digits_to_ascii_table[answer.n.digits[d]][0]; buffer[b++] = base100_digits_to_ascii_table[answer.n.digits[d]][1]; ++d; } expt10 = -shift + -1 + 2 * (answer.n.n_digits + answer.n.base100_expt); *base10_expt = expt10; buffer[b++] = e; if (expt10 > 0) buffer[b++] = '+'; cvt_long_to_decimal (buffer + b, (long)expt10); { int l; l = str_length (buffer + b); b += l; if (l == 2) { buffer[b] = buffer[b - 1]; buffer[b - 1] = '0'; ++b; } } buffer[b] = 0; return b; } static int fix_e_decimal_precision (t_uchar * output, t_uchar * input, int precision) { int x; int exponent_adjust; int exponent_position_in_input = -1; int exponent_position_in_output = -1; /* From the FreeBSD man-page: * * eE The double argument is rounded and converted in the style * [-]d.ddde+-dd where there is one digit before the decimal-point * character and the number of digits after it is equal to the pre- * cision; if the precision is missing, it is taken as 6; if the * precision is zero, no decimal-point character appears. An E con- * version uses the letter E (rather than e) to introduce the expo- * nent. The exponent always contains at least two digits; if the * value is zero, the exponent is 00. * * * Thanks to `double_to_e_decimal' we already have: * * (-)?[0-9]\.[0-9]*[eE][+-](0[1-9]|[1-9][0-9]+) * * Where the mantissa contains all of the digits from conversion to decimal * and the exponent contains as few digits as possible. * */ exponent_adjust = 0; if (precision == 0) { if ((input[2] >= '5') && (input[2] <= '9')) { if (input[0] == 9) { /* e.g.: 9.9e10 --> 1e11 */ exponent_adjust = 1; output[0] = 1; } else { /* e.g.: 8.9e10 --> 9e10 */ output[0] = input[0] + 1; } } else { output[0] = input[0]; } for (x = 2; char_to_lower (input[x]) != 'e'; ++x) ; output[1] = input[x]; exponent_position_in_input = x + 1; exponent_position_in_output = 2; /* `exponent_position_in_input' is the position of a decimal number. * * `exponent_position_in_output' is where to store that number, * properly formatted. * * `exponent_adjust' is either 0 or 1 and should be added to the * exponent from the input before formatting the output. * * The output contains a single digit decimal number and 'e' or 'E'. */ } else { output[0] = input[0]; output[1] = '.'; x = 0; while ( (x < precision) && char_is_digit (input[x + 2])) { output[x + 2] = input[x + 2]; ++x; } if (x < precision) { while (x < precision) output[x++] = '0'; } else { if ( (input[x + 2] >= '5') && (input[x + 2] <= '9')) { int y; int carry; re_round: carry = 1; y = x; while (carry && (y > 1)) { int old_digit; int new_carry; int new_digit; old_digit = output[y + 2] - '0'; new_carry = ((old_digit + carry) >= 10); new_digit = (new_carry ? carry : old_digit + 1); output[y + 2] = new_digit; carry = new_carry; --y; } if (carry) { if (output[0] != '9') output[0]++; else { mem_move (output + 3, output + 2, x - 2); output[2] = '0'; output[1] = '1'; exponent_adjust = 1; } if ( (output[x + 2] >= '5') && (output[x + 2] <= '9')) goto re_round; } } } /* `exponent_position_in_input' is the position of a decimal number. * * `exponent_position_in_output' is where to store that number, * properly formatted. * * `exponent_adjust' is either 0 or 1 and should be added to the * exponent from the input before formatting the output. * * The output contains a fraction with a single digit to the * left of the decimal number and followed by 'e' or 'E'. */ } /* `exponent_position_in_input' is the position of a decimal number. * * `exponent_position_in_output' is where to store that number, * properly formatted. * * `exponent_adjust' is either 0 or 1 and should be added to the * exponent from the input before formatting the output. */ { int raw_exponent; int real_exponent; int abs_exponent; int errn; invariant (exponent_position_in_input != -1); invariant (exponent_position_in_output != -1); if (cvt_decimal_to_int (&errn, &raw_exponent, input + exponent_position_in_input, str_length (input + exponent_position_in_input))) panic ("absurd exponent in `fix_e_decimal_precision'"); real_exponent = raw_exponent + exponent_adjust; if (real_exponent >= 0) { output[exponent_position_in_output] = '+'; ++exponent_position_in_output; abs_exponent = real_exponent; } else { output[exponent_position_in_output] = '-'; ++exponent_position_in_output; abs_exponent = -real_exponent; } if (abs_exponent < 10) { output[exponent_position_in_output] = '0'; ++exponent_position_in_output; } cvt_ulong_to_decimal (output + exponent_position_in_output, abs_exponent); return str_length (output); } } static int e_decimal_to_fp_decimal (t_uchar * fpd, t_uchar * ed, int base10_expt, int precision) { int x; int e; int fix_ed; x = 0; e = 0; fix_ed = 0; if (base10_expt == 0) { fpd[x++] = ed[e++]; if (!precision) { done: if (fix_ed) { ed[0] = ed[1]; ed[1] = '.'; } while ((x > 1) && (fpd[x-2] != '.') && (fpd[x - 1] == '0')) --x; fpd[x] = 0; return x; } fpd[x++] = ed[e++]; /* '.' */ } else if (base10_expt > 0) { fpd[x++] = ed[e++]; e++; /* '.' */ while (base10_expt && (char_to_lower (ed[e]) != 'e')) { fpd[x++] = ed[e++]; --base10_expt; } while (base10_expt) { fpd[x++] = '0'; --base10_expt; } if (!precision) goto done; fpd[x++] = '.'; } else { fpd[x++] = '0'; fpd[x++] = '.'; while (base10_expt < -1) { fpd[x++] = '0'; ++base10_expt; } ed[1] = ed[0]; fix_ed = 1; e = 1; } while (precision && (char_to_lower (ed[e]) != 'e')) { fpd[x++] = ed[e++]; --precision; } { int z; z = x - 1; if ((ed[e] >= '5') && (ed[e] <= '9')) { while (z) { if (fpd[z] != '9') { ++fpd[z]; goto done; } else { fpd[z] = '0'; --z; } } mem_move (fpd, fpd+1, x - 1); x += 1; } goto done; } } static int e_decimal_to_g_decimal (t_uchar * answer, t_uchar * ed, int base10_expt, int precision) { #if 1 return -1; #else if ((base10_expt < -4) || (base10_expt >= precision)) { str_cpy (answer, ed); return fix_e_decimal_precision (answer, precision); } else return e_decimal_to_fp_decimal (answer, ed, base10_expt, precision); #endif } /*c * int cvt_double_to_decimal (t_uchar * buffer, * int * base10_expt, * double k, * int precision, * char format); * * Convert `k' to a decimal number. * * [interface not stable] */ int cvt_double_to_decimal (t_uchar * buffer, int * base10_expt, double k, int precision, char format) { t_uchar temp[pow2_enough_base10_digits]; int e; int l; int be; if (!base10_expt) base10_expt = &be; if (precision < 0) precision = 6; if (format == 'E') e = 'E'; else e = 'e'; double_to_e_decimal (temp, base10_expt, k, e); switch (format) { case 'e': case 'E': l = fix_e_decimal_precision (buffer, temp, precision); str_cpy (buffer, temp); return l; case 'f': return e_decimal_to_fp_decimal (buffer, temp, *base10_expt, precision); case 'g': return e_decimal_to_g_decimal (buffer, temp, *base10_expt, precision); default: while (1) panic ("unrecognized floating-point format in cvt_double_to_decimal"); } } #ifdef TEST_CVT_DOUBLE /* gcc -DTEST_CVT_DOUBLE -g -I.. -o ,test-cvt-double cvt-double.c ../=build/vu/libvu.a */ #include #include #include #include #include #include #include #include #include #include #include #include "hackerlab/cmd/opt.h" #include "hackerlab/char/char-class.h" #include "hackerlab/arrays/ar.h" #include "hackerlab/char/str.h" #include "hackerlab/rx-posix/regex.h" #include "hackerlab/bitsets/bitset.h" #include "hackerlab/vu/printfmt.h" #include "hackerlab/vu/vu.h" #include "hackerlab/vu/vfdbuf.h" #include "hackerlab/vu/url-fd.h" #include "hackerlab/vu-network/url-socket.h" #include "hackerlab/mem/must-malloc.h" #include "hackerlab/hash/hashtree.h" #include "hackerlab/fs/file-names.h" #include "hackerlab/vu/safe.h" #define OPTS(OP, OP2) \ OP (opt_help_msg, "h", "help", 0, \ "Display a help message and exit.") \ OP (opt_version, "V", "version", 0, \ "Display a release identifier string") \ OP2 (opt_version, 0, 0, 0, "and exit.") \ OP (opt_power, "p", "power=n", 1, \ "Display the nth power of 2, base 100.") \ OP (opt_float100, "c", "base100=n", 1, \ "Display N (a double) in base 100.") \ OP (opt_sci, "s", "sci=p,n", 1, \ "Display N (a double) in base 10 scientific") \ OP2 (opt_sci, 0, 0, 1, "notation with precision P.") enum options { OPTS (OPT_ENUM, OPT_IGN) }; struct opt_desc opts[] = { OPTS (OPT_DESC, OPT_DESC) {-1, 0, 0, 0, 0} }; static void usage (int fd, t_uchar * prog, int suggest_help) { int errn; if (0 > printfmt (&errn, fd, "usage: %s [options] [input-file]\n", prog)) panic ("unable to write usage message"); if ( suggest_help && (0 > printfmt (&errn, fd, "try %s --help\n", prog))) panic ("unable to write usage message"); } static void help (int fd, char * prog) { int errn; usage (fd, prog, 0); vu_write (&errn, fd, "\n", 1); opt_help (fd, opts); } static void version (int fd) { int errn; if (0 > printfmt (&errn, fd, "cvt-double test scaffolding\n")) panic ("unable to write release identifier"); } static void print_base100 (int fd, struct base100_float * n) { int x; /* safe_printfmt (fd, "(00)."); */ for (x = 0; x < n->n_digits; ++x) safe_printfmt (fd, "(%s)", base100_digits_to_ascii_table[n->digits[x]]); safe_printfmt (fd, " x 100^%d", n->base100_expt); } int main (int argc, char * argv[]) { int errn; int o; t_uchar * opt_string; t_uchar * opt_arg; t_uchar opt_string_space[3]; struct base100_float_temp temp_power; int last_power_of_2; last_power_of_2 = pow2_base100_non_expt; if (!argc) argv0 = "(argc == 0\?\?\?)"; else argv0 = file_name_tail (lim_use_must_malloc, argv[0]); while (1) { o = opt_low (&opt_string, &opt_arg, 0, opts, &argc, argv, opt_string_space); if (o == opt_none) break; switch (o) { default: if (argc < 1) panic ("internal error parsing arguments"); printfmt (&errn, 2, "unhandled option `%s'\n", argv[1]); usage_error: usage (2, argv[0], 1); exit (1); missing_arg: printfmt (&errn, 2, "missing argument for `%s'\n", opt_string); goto usage_error; bogus_arg: printfmt (&errn, 2, "ill-formed argument for `%s' (`%s')\n", opt_string, opt_arg); goto usage_error; case opt_help_msg: help (1, argv[0]); exit (0); case opt_version: version (1); exit (0); case opt_power: { int power_of_2; if (!opt_arg) goto missing_arg; if (cvt_decimal_to_int (&errn, &power_of_2, opt_arg, str_length (opt_arg))) goto bogus_arg; temp_power.n.digits = temp_power.digit_space; weird_pow2_base100 (&temp_power.n, power_of_2, last_power_of_2); last_power_of_2 = power_of_2; print_base100 (1, &temp_power.n); break; } case opt_float100: { double n; struct base100_float_temp temp; if (!opt_arg) goto missing_arg; n = strtod (opt_arg, 0); temp.n.digits = temp.digit_space; double_to_base100 (&temp.n, n); print_base100 (1, &temp.n); break; } case opt_sci: { t_uchar * comma; int precision; double n; t_uchar cvt[1024]; int base10_expt; if (!opt_arg) goto missing_arg; comma = str_chr_index (opt_arg, ','); if (!comma) goto bogus_arg; if (cvt_decimal_to_uint (&errn, &precision, opt_arg, comma - opt_arg)) goto bogus_arg; n = strtod (comma + 1, 0); if (precision > 512) { panic ("unsupported precision"); } cvt_double_to_decimal (cvt, &base10_expt, n, precision, 'e'); printfmt (&errn, 1, "%s\n", cvt); break; } } } return 0; } #endif tla-1.3.5+dfsg/src/hackerlab/fmt/cvt.h0000644000175000017500000001566310457621774016223 0ustar useruser/* cvt.h - declarations for integer/string conversions * **************************************************************** * Copyright (C) 1998, 2000 Thomas Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__FMT__CVT_H #define INCLUDE__FMT__CVT_H #include "hackerlab/machine/types.h" /* automatically generated __STDC__ prototypes */ extern size_t cvt_ulong_to_decimal (t_uchar * nbuf, unsigned long n); extern int cvt_ulong_to_decimal_n (t_uchar * nbuf, size_t buflen, unsigned long n, size_t * needed); extern size_t cvt_long_to_decimal (t_uchar * nbuf, long n); extern int cvt_long_to_decimal_n (t_uchar * nbuf, size_t buflen, long n, size_t * needed); extern size_t cvt_ulong_to_octal (t_uchar * nbuf, unsigned long n); extern int cvt_ulong_to_octal_n (t_uchar * nbuf, size_t buflen, unsigned long n, size_t * needed); extern size_t cvt_long_to_octal (t_uchar * nbuf, long n); extern int cvt_long_to_octal_n (t_uchar * nbuf, size_t buflen, long n, size_t * needed); extern size_t cvt_ulong_to_HEX (t_uchar * nbuf, unsigned long n); extern int cvt_ulong_to_HEX_n (t_uchar * nbuf, size_t buflen, unsigned long n, size_t * needed); extern size_t cvt_long_to_HEX (t_uchar * nbuf, long n); extern int cvt_long_to_HEX_n (t_uchar * nbuf, size_t buflen, long n, size_t * needed); extern size_t cvt_ulong_to_hex (t_uchar * nbuf, unsigned long n); extern int cvt_ulong_to_hex_n (t_uchar * nbuf, size_t buflen, unsigned long n, size_t * needed); extern size_t cvt_long_to_hex (t_uchar * nbuf, long n); extern int cvt_long_to_hex_n (t_uchar * nbuf, size_t buflen, long n, size_t * needed); extern int cvt_decimal_to_ulong (int * errn, unsigned long * answerp, const t_uchar * text, size_t len); extern int cvt_scan_decimal_to_ulong (int * errn, unsigned long * answerp, size_t * consumed, const t_uchar * text, size_t len); extern int cvt_decimal_to_uint (int * errn, unsigned int * answerp, const t_uchar * text, size_t len); extern int cvt_scan_decimal_to_uint (int * errn, unsigned int * answerp, size_t * consumed, const t_uchar * text, size_t len); extern int cvt_decimal_to_long (int * errn, long * answerp, const t_uchar * text, size_t len); extern int cvt_scan_decimal_to_long (int * errn, long * answerp, size_t * consumed, const t_uchar * text, size_t len); extern int cvt_decimal_to_int (int * errn, int * answerp, const t_uchar * text, size_t len); extern int cvt_scan_decimal_to_int (int * errn, int * answerp, size_t * consumed, const t_uchar * text, size_t len); extern int cvt_hex_to_ulong (int * errn, unsigned long * answerp, const t_uchar * text, size_t len); extern int cvt_scan_hex_to_ulong (int * errn, unsigned long * answerp, size_t * consumed, const t_uchar * text, size_t len); extern int cvt_hex_to_uint (int * errn, unsigned int * answerp, const t_uchar * text, size_t len); extern int cvt_scan_hex_to_uint (int * errn, unsigned int * answerp, size_t * consumed, const t_uchar * text, size_t len); extern int cvt_hex_to_long (int * errn, long * answerp, const t_uchar * text, size_t len); extern int cvt_scan_hex_to_long (int * errn, long * answerp, size_t * consumed, const t_uchar * text, size_t len); extern int cvt_hex_to_int (int * errn, int * answerp, const t_uchar * text, size_t len); extern int cvt_scan_hex_to_int (int * errn, int * answerp, size_t * consumed, const t_uchar * text, size_t len); extern int cvt_octal_to_ulong (int * errn, unsigned long * answerp, const t_uchar * text, size_t len); extern int cvt_scan_octal_to_ulong (int * errn, unsigned long * answerp, size_t * consumed, const t_uchar * text, size_t len); extern int cvt_octal_to_uint (int * errn, unsigned int * answerp, const t_uchar * text, size_t len); extern int cvt_scan_octal_to_uint (int * errn, unsigned int * answerp, size_t * consumed, const t_uchar * text, size_t len); extern int cvt_octal_to_long (int * errn, long * answerp, const t_uchar * text, size_t len); extern int cvt_scan_octal_to_long (int * errn, long * answerp, size_t * consumed, const t_uchar * text, size_t len); extern int cvt_octal_to_int (int * errn, int * answerp, const t_uchar * text, size_t len); extern int cvt_scan_octal_to_int (int * errn, int * answerp, size_t * consumed, const t_uchar * text, size_t len); #endif /* INCLUDE__FMT__CVT_H */ tla-1.3.5+dfsg/src/hackerlab/fmt/PLUGIN/0000755000175000017500000000000010457621774016241 5ustar userusertla-1.3.5+dfsg/src/hackerlab/fmt/PLUGIN/REQ0000644000175000017500000000002510457621774016610 0ustar useruseros fmt fmt libboot tla-1.3.5+dfsg/src/hackerlab/ChangeLog0000644000175000017500000005200610457621774016232 0ustar useruser# do not edit -- automatically generated by arch changelog # tag: automatic-ChangeLog--lord@emf.net--gnu-arch-2004/hackerlab--devo--1.1 # 2004-10-05 21:24:38 GMT Tom Lord patch-2 Summary: add ChangeLog Revision: hackerlab--devo--1.1--patch-2 Added a ChangeLog file. new files: ChangeLog 2004-10-05 21:17:08 GMT Tom Lord patch-1 Summary: Massive Log Pruning Revision: hackerlab--devo--1.1--patch-1 All but the direct line of ancestry logs (and associated ChangeLogs and Thanks) have been removed. removed files: =THANKS =TODO COPYING.PIW ChangeLog ChangeLog.d/.arch-ids/=id ChangeLog.d/lord@emf.net--2003/.arch-ids/=id ChangeLog.d/lord@emf.net--2003/ChangeLog.hackerlab--devo--1.0 ChangeLog.d/lord@regexps.com--2001Q4/.arch-ids/=id ChangeLog.d/lord@regexps.com--2001Q4/ChangeLog.devo--1.0 ChangeLog.d/lord@regexps.com--2002/.arch-ids/=id ChangeLog.d/lord@regexps.com--2002/ChangeLog.devo--1.0 ChangeLog.d/lord@regexps.com--2002/ChangeLog.lord--1.0 piw-glob/.arch-ids/=id piw-glob/Makefile.in piw-glob/UNPLUGGED/.arch-ids/=dont-care piw-glob/UNPLUGGED/.arch-ids/=id piw-glob/UNPLUGGED/REQ piw-glob/piw-glob.c piw-malloc/.arch-ids/=default piw-malloc/=scaffolding/.arch-ids/=id piw-malloc/=scaffolding/log-cogen.scm piw-malloc/=scaffolding/log-formats.scm piw-malloc/Makefile.in piw-malloc/UNPLUGGED/.arch-ids/=dont-care piw-malloc/UNPLUGGED/.arch-ids/=id piw-malloc/UNPLUGGED/REQ piw-malloc/errno.c piw-malloc/errno.h piw-malloc/gcc.c piw-malloc/libc-malloc.c piw-malloc/libc-malloc.h piw-malloc/log-printing.c piw-malloc/log-printing.h piw-malloc/logging.c piw-malloc/logging.h piw-malloc/malloc.h piw-malloc/piw-malloc.c piw-malloc/piw-malloc.doc piw-malloc/piw-malloc.h piw-malloc/piw-variables.c piw-malloc/piw-variables.h piw-malloc/piw-write-barriers.c piw-malloc/piw-write-barriers.h piw-malloc/watchpt-breakpoints.c piw-malloc/watchpt-breakpoints.h piw-malloc/write-barrier-breakpoints.c piw-malloc/write-barrier-breakpoints.h piw-malloc/write-barriers.c piw-malloc/write-barriers.h piw/.arch-ids/=id piw/=later/.arch-ids/=id piw/=later/backtrace.c piw/Makefile.in piw/UNPLUGGED/.arch-ids/=dont-care piw/UNPLUGGED/.arch-ids/=id piw/UNPLUGGED/REQ piw/gdb.c piw/gdb.h piw/instrumentation.doc piw/log.c piw/log.h piw/piw.c piw/piw.h piw/variables.c piw/variables.h removed directories: ChangeLog.d ChangeLog.d/.arch-ids ChangeLog.d/lord@emf.net--2003 ChangeLog.d/lord@emf.net--2003/.arch-ids ChangeLog.d/lord@regexps.com--2001Q4 ChangeLog.d/lord@regexps.com--2001Q4/.arch-ids ChangeLog.d/lord@regexps.com--2002 ChangeLog.d/lord@regexps.com--2002/.arch-ids piw piw-glob piw-glob/.arch-ids piw-glob/UNPLUGGED piw-glob/UNPLUGGED/.arch-ids piw-malloc piw-malloc/.arch-ids piw-malloc/=scaffolding piw-malloc/=scaffolding/.arch-ids piw-malloc/UNPLUGGED piw-malloc/UNPLUGGED/.arch-ids piw/.arch-ids piw/=later piw/=later/.arch-ids piw/UNPLUGGED piw/UNPLUGGED/.arch-ids 2004-10-05 20:56:34 GMT Tom Lord base-0 Summary: tag of lord@emf.net--2004/hackerlab--devo--1.0--patch-96 Revision: hackerlab--devo--1.1--base-0 (automatically generated log message) new patches: a.rottmann@gmx.at--2004-main/hackerlab--devo--1.0--patch-2 chth@gmx.net--tla2004/hackerlab--escapes--1.0--patch-7 chth@gmx.net--tla2004/hackerlab--escapes--1.0--patch-8 chth@gmx.net--tla2004/hackerlab--escapes--1.0--patch-9 chth@gmx.net--tla2004/hackerlab--escapes--1.0--patch-10 chth@gmx.net--tla2004/hackerlab--escapes--1.0--patch-11 chth@gmx.net--tla2004/hackerlab--escapes--1.0--patch-12 chth@gmx.net--tla2004/hackerlab--escapes--1.0--patch-13 chth@gmx.net--tla2004/hackerlab--escapes--1.0--patch-15 chth@gmx.net--tla2004/hackerlab--escapes--1.0--patch-16 chth@gmx.net--tla2004/hackerlab--escapes--1.0--patch-17 chth@gmx.net--tla2004/hackerlab--escapes--1.0--patch-18 chth@gmx.net--tla2004/hackerlab--pika-escapes--1.0--base-0 chth@gmx.net--tla2004/hackerlab--pika-escapes--1.0--patch-1 chth@gmx.net--tla2004/hackerlab--pika-escapes--1.0--patch-2 giles@nemeton.com.au--2003-GPL/hackerlab--giles--1.0--base-0 giles@nemeton.com.au--2003-GPL/hackerlab--giles--1.0--patch-1 giles@nemeton.com.au--2003-GPL/hackerlab--giles--1.0--patch-2 giles@nemeton.com.au--2003-GPL/hackerlab--giles--1.0--patch-3 giles@nemeton.com.au--2003-GPL/hackerlab--giles--1.0--patch-4 giles@nemeton.com.au--2003-GPL/hackerlab--giles--1.0--patch-5 giles@nemeton.com.au--2003-GPL/hackerlab--giles--1.0--patch-6 giles@nemeton.com.au--2003-GPL/hackerlab--giles--1.0--patch-7 giles@nemeton.com.au--2003-GPL/hackerlab--giles--1.0--patch-8 giles@nemeton.com.au--2003-GPL/hackerlab--giles--1.0--patch-9 giles@nemeton.com.au--2003-GPL/hackerlab--giles--1.0--patch-10 giles@nemeton.com.au--2003-GPL/hackerlab--giles--1.0--patch-11 giles@nemeton.com.au--2003-GPL/hackerlab--giles--1.0--patch-12 giles@nemeton.com.au--2003-GPL/hackerlab--giles--1.0--patch-13 giles@nemeton.com.au--2003-GPL/hackerlab--giles--1.0--patch-14 giles@nemeton.com.au--2003-GPL/hackerlab--giles--1.0--patch-15 jao@gnu.org--2004/hackerlab--devo--1.0--base-0 jao@gnu.org--2004/hackerlab--devo--1.0--patch-1 jao@gnu.org--2004/hackerlab--devo--1.0--patch-2 jao@gnu.org--2004/hackerlab--devo--1.0--patch-3 jao@gnu.org--2004/hackerlab--devo--1.0--patch-4 jao@gnu.org--2004/hackerlab--devo--1.0--patch-5 jao@gnu.org--2004/hackerlab--devo--1.0--patch-6 jao@gnu.org--2004/hackerlab--devo--1.0--patch-7 jao@gnu.org--2004/hackerlab--devo--1.0--patch-8 jao@gnu.org--2004/hackerlab--devo--1.0--patch-9 jao@gnu.org--2004/hackerlab--devo--1.0--patch-10 jao@gnu.org--2004/hackerlab--devo--1.0--patch-11 jao@gnu.org--2004/hackerlab--devo--1.0--patch-12 jao@gnu.org--2004/hackerlab--devo--1.0--patch-13 jao@gnu.org--2004/hackerlab--devo--1.0--patch-14 jao@gnu.org--2004/hackerlab--devo--1.0--patch-15 jao@gnu.org--2004/hackerlab--devo--1.0--patch-16 jao@gnu.org--2004/hackerlab--devo--1.0--patch-17 jao@gnu.org--2004/hackerlab--devo--1.0--patch-18 jao@gnu.org--2004/hackerlab--devo--1.0--patch-19 jao@gnu.org--2004/hackerlab--devo--1.0--patch-20 jao@gnu.org--2004/hackerlab--devo--1.0--patch-21 jao@gnu.org--2004/hackerlab--devo--1.0--patch-22 jivera@flame.org--2004/hackerlab--splay--1.0--base-0 jivera@flame.org--2004/hackerlab--splay--1.0--patch-1 jivera@flame.org--2004/hackerlab--strings--1.0--base-0 jivera@flame.org--2004/hackerlab--strings--1.0--patch-1 jivera@flame.org--2004/hackerlab--strings--1.0--patch-2 jivera@flame.org--2004/hackerlab--udstr-patches--1.0--base-0 jivera@flame.org--2004/hackerlab--udstr-patches--1.0--patch-1 jivera@flame.org--2004/hackerlab--udstr-patches--1.0--patch-2 jivera@flame.org--2004/hackerlab--udstr-patches--1.0--patch-3 jivera@flame.org--2004/hackerlab--udstr-patches--1.0--patch-4 jivera@flame.org--2004/hackerlab--udstr-patches--1.0--patch-5 jivera@flame.org--2004/hackerlab--udstr-patches--1.0--patch-6 jivera@flame.org--2004/hackerlab--udstr-patches--1.0--patch-7 jivera@flame.org--2004/hackerlab--udstr-patches--1.0--patch-8 jivera@flame.org--2004/hackerlab--udstr-patches--1.0--patch-9 lord@emf.net--2003/hackerlab--devo--1.0--base-0 lord@emf.net--2003/hackerlab--devo--1.0--patch-1 lord@emf.net--2003/hackerlab--devo--1.0--patch-2 lord@emf.net--2003/hackerlab--devo--1.0--patch-3 lord@emf.net--2003/hackerlab--devo--1.0--patch-4 lord@emf.net--2003/hackerlab--devo--1.0--patch-5 lord@emf.net--2003/hackerlab--devo--1.0--patch-6 lord@emf.net--2003/hackerlab--devo--1.0--patch-7 lord@emf.net--2003/hackerlab--devo--1.0--patch-8 lord@emf.net--2003/hackerlab--devo--1.0--patch-9 lord@emf.net--2003/hackerlab--devo--1.0--patch-10 lord@emf.net--2003/hackerlab--devo--1.0--patch-11 lord@emf.net--2003/hackerlab--devo--1.0--patch-12 lord@emf.net--2003/hackerlab--devo--1.0--patch-13 lord@emf.net--2003/hackerlab--devo--1.0--patch-14 lord@emf.net--2003/hackerlab--devo--1.0--patch-15 lord@emf.net--2003/hackerlab--devo--1.0--patch-16 lord@emf.net--2003/hackerlab--devo--1.0--patch-17 lord@emf.net--2003/hackerlab--devo--1.0--patch-18 lord@emf.net--2003/hackerlab--devo--1.0--patch-19 lord@emf.net--2003/hackerlab--devo--1.0--patch-20 lord@emf.net--2003/hackerlab--devo--1.0--patch-21 lord@emf.net--2003/hackerlab--devo--1.0--patch-22 lord@emf.net--2003/hackerlab--devo--1.0--patch-23 lord@emf.net--2003b/hackerlab--devo--1.0--base-0 lord@emf.net--2003b/hackerlab--devo--1.0--patch-1 lord@emf.net--2003b/hackerlab--devo--1.0--patch-2 lord@emf.net--2003b/hackerlab--devo--1.0--patch-3 lord@emf.net--2003b/hackerlab--devo--1.0--patch-4 lord@emf.net--2003b/hackerlab--devo--1.0--patch-5 lord@emf.net--2003b/hackerlab--devo--1.0--patch-6 lord@emf.net--2003b/hackerlab--devo--1.0--patch-7 lord@emf.net--2003b/hackerlab--devo--1.0--patch-8 lord@emf.net--2003b/hackerlab--devo--1.0--patch-9 lord@emf.net--2003b/hackerlab--devo--1.0--patch-10 lord@emf.net--2003b/hackerlab--devo--1.0--patch-11 lord@emf.net--2003b/hackerlab--devo--1.0--patch-12 lord@emf.net--2003b/hackerlab--devo--1.0--patch-13 lord@emf.net--2003b/hackerlab--devo--1.0--patch-14 lord@emf.net--2003b/hackerlab--devo--1.0--patch-15 lord@emf.net--2003b/hackerlab--devo--1.0--patch-16 lord@emf.net--2003b/hackerlab--devo--1.0--patch-17 lord@emf.net--2003b/hackerlab--devo--1.0--patch-18 lord@emf.net--2003b/hackerlab--devo--1.0--patch-19 lord@emf.net--2003b/hackerlab--devo--1.0--patch-20 lord@emf.net--2003b/hackerlab--devo--1.0--patch-21 lord@emf.net--2003b/hackerlab--devo--1.0--patch-22 lord@emf.net--2003b/hackerlab--devo--1.0--patch-23 lord@emf.net--2003b/hackerlab--devo--1.0--patch-24 lord@emf.net--2003b/hackerlab--devo--1.0--patch-25 lord@emf.net--2003b/hackerlab--devo--1.0--patch-26 lord@emf.net--2003b/hackerlab--devo--1.0--patch-27 lord@emf.net--2003b/hackerlab--devo--1.0--patch-28 lord@emf.net--2003b/hackerlab--devo--1.0--patch-29 lord@emf.net--2003b/hackerlab--devo--1.0--patch-30 lord@emf.net--2003b/hackerlab--devo--1.0--patch-31 lord@emf.net--2003b/hackerlab--devo--1.0--patch-32 lord@emf.net--2003b/hackerlab--devo--1.0--patch-33 lord@emf.net--2003b/hackerlab--devo--1.0--patch-34 lord@emf.net--2003b/hackerlab--devo--1.0--patch-35 lord@emf.net--2003b/hackerlab--devo--1.0--patch-36 lord@emf.net--2004/hackerlab--devo--1.0--base-0 lord@emf.net--2004/hackerlab--devo--1.0--patch-1 lord@emf.net--2004/hackerlab--devo--1.0--patch-2 lord@emf.net--2004/hackerlab--devo--1.0--patch-3 lord@emf.net--2004/hackerlab--devo--1.0--patch-4 lord@emf.net--2004/hackerlab--devo--1.0--patch-5 lord@emf.net--2004/hackerlab--devo--1.0--patch-6 lord@emf.net--2004/hackerlab--devo--1.0--patch-7 lord@emf.net--2004/hackerlab--devo--1.0--patch-8 lord@emf.net--2004/hackerlab--devo--1.0--patch-9 lord@emf.net--2004/hackerlab--devo--1.0--patch-10 lord@emf.net--2004/hackerlab--devo--1.0--patch-11 lord@emf.net--2004/hackerlab--devo--1.0--patch-12 lord@emf.net--2004/hackerlab--devo--1.0--patch-13 lord@emf.net--2004/hackerlab--devo--1.0--patch-14 lord@emf.net--2004/hackerlab--devo--1.0--patch-15 lord@emf.net--2004/hackerlab--devo--1.0--patch-16 lord@emf.net--2004/hackerlab--devo--1.0--patch-17 lord@emf.net--2004/hackerlab--devo--1.0--patch-18 lord@emf.net--2004/hackerlab--devo--1.0--patch-19 lord@emf.net--2004/hackerlab--devo--1.0--patch-20 lord@emf.net--2004/hackerlab--devo--1.0--patch-21 lord@emf.net--2004/hackerlab--devo--1.0--patch-22 lord@emf.net--2004/hackerlab--devo--1.0--patch-23 lord@emf.net--2004/hackerlab--devo--1.0--patch-24 lord@emf.net--2004/hackerlab--devo--1.0--patch-25 lord@emf.net--2004/hackerlab--devo--1.0--patch-26 lord@emf.net--2004/hackerlab--devo--1.0--patch-27 lord@emf.net--2004/hackerlab--devo--1.0--patch-28 lord@emf.net--2004/hackerlab--devo--1.0--patch-29 lord@emf.net--2004/hackerlab--devo--1.0--patch-30 lord@emf.net--2004/hackerlab--devo--1.0--patch-31 lord@emf.net--2004/hackerlab--devo--1.0--patch-32 lord@emf.net--2004/hackerlab--devo--1.0--patch-33 lord@emf.net--2004/hackerlab--devo--1.0--patch-34 lord@emf.net--2004/hackerlab--devo--1.0--patch-35 lord@emf.net--2004/hackerlab--devo--1.0--patch-36 lord@emf.net--2004/hackerlab--devo--1.0--patch-37 lord@emf.net--2004/hackerlab--devo--1.0--patch-38 lord@emf.net--2004/hackerlab--devo--1.0--patch-39 lord@emf.net--2004/hackerlab--devo--1.0--patch-40 lord@emf.net--2004/hackerlab--devo--1.0--patch-41 lord@emf.net--2004/hackerlab--devo--1.0--patch-42 lord@emf.net--2004/hackerlab--devo--1.0--patch-43 lord@emf.net--2004/hackerlab--devo--1.0--patch-44 lord@emf.net--2004/hackerlab--devo--1.0--patch-45 lord@emf.net--2004/hackerlab--devo--1.0--patch-46 lord@emf.net--2004/hackerlab--devo--1.0--patch-47 lord@emf.net--2004/hackerlab--devo--1.0--patch-48 lord@emf.net--2004/hackerlab--devo--1.0--patch-49 lord@emf.net--2004/hackerlab--devo--1.0--patch-50 lord@emf.net--2004/hackerlab--devo--1.0--patch-51 lord@emf.net--2004/hackerlab--devo--1.0--patch-52 lord@emf.net--2004/hackerlab--devo--1.0--patch-53 lord@emf.net--2004/hackerlab--devo--1.0--patch-54 lord@emf.net--2004/hackerlab--devo--1.0--patch-55 lord@emf.net--2004/hackerlab--devo--1.0--patch-56 lord@emf.net--2004/hackerlab--devo--1.0--patch-57 lord@emf.net--2004/hackerlab--devo--1.0--patch-58 lord@emf.net--2004/hackerlab--devo--1.0--patch-59 lord@emf.net--2004/hackerlab--devo--1.0--patch-60 lord@emf.net--2004/hackerlab--devo--1.0--patch-61 lord@emf.net--2004/hackerlab--devo--1.0--patch-62 lord@emf.net--2004/hackerlab--devo--1.0--patch-63 lord@emf.net--2004/hackerlab--devo--1.0--patch-64 lord@emf.net--2004/hackerlab--devo--1.0--patch-65 lord@emf.net--2004/hackerlab--devo--1.0--patch-66 lord@emf.net--2004/hackerlab--devo--1.0--patch-67 lord@emf.net--2004/hackerlab--devo--1.0--patch-68 lord@emf.net--2004/hackerlab--devo--1.0--patch-69 lord@emf.net--2004/hackerlab--devo--1.0--patch-70 lord@emf.net--2004/hackerlab--devo--1.0--patch-71 lord@emf.net--2004/hackerlab--devo--1.0--patch-72 lord@emf.net--2004/hackerlab--devo--1.0--patch-73 lord@emf.net--2004/hackerlab--devo--1.0--patch-74 lord@emf.net--2004/hackerlab--devo--1.0--patch-75 lord@emf.net--2004/hackerlab--devo--1.0--patch-76 lord@emf.net--2004/hackerlab--devo--1.0--patch-77 lord@emf.net--2004/hackerlab--devo--1.0--patch-78 lord@emf.net--2004/hackerlab--devo--1.0--patch-79 lord@emf.net--2004/hackerlab--devo--1.0--patch-80 lord@emf.net--2004/hackerlab--devo--1.0--patch-81 lord@emf.net--2004/hackerlab--devo--1.0--patch-82 lord@emf.net--2004/hackerlab--devo--1.0--patch-83 lord@emf.net--2004/hackerlab--devo--1.0--patch-84 lord@emf.net--2004/hackerlab--devo--1.0--patch-85 lord@emf.net--2004/hackerlab--devo--1.0--patch-86 lord@emf.net--2004/hackerlab--devo--1.0--patch-87 lord@emf.net--2004/hackerlab--devo--1.0--patch-88 lord@emf.net--2004/hackerlab--devo--1.0--patch-89 lord@emf.net--2004/hackerlab--devo--1.0--patch-90 lord@emf.net--2004/hackerlab--devo--1.0--patch-91 lord@emf.net--2004/hackerlab--devo--1.0--patch-92 lord@emf.net--2004/hackerlab--devo--1.0--patch-93 lord@emf.net--2004/hackerlab--devo--1.0--patch-94 lord@emf.net--2004/hackerlab--devo--1.0--patch-95 lord@emf.net--2004/hackerlab--devo--1.0--patch-96 lord@regexps.com--2001Q4/hackerlab--devo--1.0--base-0 lord@regexps.com--2001Q4/hackerlab--devo--1.0--patch-1 lord@regexps.com--2001Q4/hackerlab--devo--1.0--patch-2 lord@regexps.com--2001Q4/hackerlab--devo--1.0--patch-3 lord@regexps.com--2001Q4/hackerlab--devo--1.0--patch-4 lord@regexps.com--2002/hackerlab--devo--1.0--base-0 lord@regexps.com--2002/hackerlab--devo--1.0--patch-1 lord@regexps.com--2002/hackerlab--devo--1.0--patch-2 lord@regexps.com--2002/hackerlab--devo--1.0--patch-3 lord@regexps.com--2002/hackerlab--devo--1.0--patch-4 lord@regexps.com--2002/hackerlab--devo--1.0--patch-5 lord@regexps.com--2002/hackerlab--devo--1.0--patch-6 lord@regexps.com--2002/hackerlab--devo--1.0--patch-7 lord@regexps.com--2002/hackerlab--devo--1.0--patch-8 lord@regexps.com--2002/hackerlab--devo--1.0--patch-9 lord@regexps.com--2002/hackerlab--devo--1.0--patch-10 lord@regexps.com--2002/hackerlab--devo--1.0--patch-11 lord@regexps.com--2002/hackerlab--devo--1.0--patch-12 lord@regexps.com--2002/hackerlab--devo--1.0--patch-13 lord@regexps.com--2002/hackerlab--devo--1.0--patch-14 lord@regexps.com--2002/hackerlab--devo--1.0--patch-15 lord@regexps.com--2002/hackerlab--devo--1.0--patch-16 lord@regexps.com--2002/hackerlab--devo--1.0--patch-17 lord@regexps.com--2002/hackerlab--devo--1.0--patch-18 lord@regexps.com--2002/hackerlab--devo--1.0--patch-19 lord@regexps.com--2002/hackerlab--devo--1.0--patch-20 lord@regexps.com--2002/hackerlab--lord--1.0--base-0 lord@regexps.com--2002/hackerlab--lord--1.0--patch-1 lord@regexps.com--2002/hackerlab--lord--1.0--patch-2 lord@regexps.com--2002/hackerlab--lord--1.0--patch-3 lord@regexps.com--2002/hackerlab--lord--1.0--patch-4 lord@regexps.com--2002/hackerlab--lord--1.0--patch-5 lord@regexps.com--2002/hackerlab--lord--1.0--patch-6 lord@regexps.com--2002/hackerlab--lord--1.0--patch-7 lord@regexps.com--2002/hackerlab--lord--1.0--patch-8 lord@regexps.com--2002/hackerlab--lord--1.0--patch-9 lord@regexps.com--2002/hackerlab--lord--1.0--patch-10 lord@regexps.com--2002/hackerlab--lord--1.0--patch-11 lord@regexps.com--2002/hackerlab--lord--1.0--patch-12 lord@regexps.com--2002/hackerlab--lord--1.0--patch-13 lord@regexps.com--2002/hackerlab--lord--1.0--patch-14 lord@regexps.com--2002/hackerlab--lord--1.0--patch-15 lord@regexps.com--2002/hackerlab--lord--1.0--patch-16 lord@regexps.com--2002/hackerlab--lord--1.0--patch-17 lord@regexps.com--2002/hackerlab--lord--1.0--patch-18 lord@regexps.com--2002/hackerlab--lord--1.0--patch-19 lord@regexps.com--2002/hackerlab--lord--1.0--patch-20 lord@regexps.com--2002/hackerlab--lord--1.0--patch-21 lord@regexps.com--2002/hackerlab--lord--1.0--patch-22 lord@regexps.com--2002/hackerlab--lord--1.0--patch-23 lord@regexps.com--2002/hackerlab--lord--1.0--patch-24 lord@regexps.com--2002/hackerlab--lord--1.0--patch-25 lord@regexps.com--2002/hackerlab--lord--1.0--patch-26 lord@regexps.com--2002/hackerlab--lord--1.0--patch-27 lord@regexps.com--2002/hackerlab--lord--1.0--patch-28 lord@regexps.com--2002/hackerlab--lord--1.0--patch-29 lord@regexps.com--2002/hackerlab--lord--1.0--patch-30 lord@regexps.com--2002/hackerlab--lord--1.0--patch-31 lord@regexps.com--2002/hackerlab--lord--1.0--patch-32 lord@regexps.com--2002/hackerlab--lord--1.0--patch-33 lord@regexps.com--2002/hackerlab--lord--1.0--patch-34 lord@regexps.com--2002/hackerlab--lord--1.0--patch-35 lord@regexps.com--2002/hackerlab--lord--1.0--patch-36 lord@regexps.com--2002/hackerlab--lord--1.0--patch-37 lord@regexps.com--2002/hackerlab--lord--1.0--patch-38 lord@regexps.com--2002/hackerlab--lord--1.0--patch-39 lord@regexps.com--2002/hackerlab--lord--1.0--patch-40 lord@regexps.com--2002/hackerlab--lord--1.0--patch-41 lord@regexps.com--public-2001Q4/hackerlab--devo--1.0--base-0 rbtcollins@hotmail.com--barch/gcc-warnings--1.0--base-0 rbtcollins@hotmail.com--barch/gcc-warnings--1.0--patch-1 rbtcollins@hotmail.com--barch/gcc-warnings--1.0--patch-2 rbtcollins@hotmail.com--barch/gcc-warnings--1.0--patch-3 rbtcollins@hotmail.com--barch/gcc-warnings--1.0--patch-4 rbtcollins@hotmail.com--barch/gcc-warnings--1.0--patch-5 rbtcollins@hotmail.com--barch/gcc-warnings--1.0--patch-6 rbtcollins@hotmail.com--barch/gcc-warnings--1.0--patch-7 rbtcollins@hotmail.com--barch/gcc-warnings--1.0--patch-8 rbtcollins@hotmail.com--barch/gcc-warnings--1.0--patch-9 rbtcollins@hotmail.com--barch/gcc-warnings--1.0--patch-10 rbtcollins@hotmail.com--barch/gcc-warnings--1.0--patch-11 rbtcollins@hotmail.com--barch/gcc-warnings--1.0--patch-12 rbtcollins@hotmail.com--barch/gcc-warnings--1.0--patch-13 rbtcollins@hotmail.com--barch/hackerlab--integration--1.0--patch-10 tez@kamihira.com--2004s/hackerlab--OP2-eliminate--0.1--base-0 tez@kamihira.com--2004s/hackerlab--OP2-eliminate--0.1--patch-1 tla-1.3.5+dfsg/src/hackerlab/=README0000644000175000017500000001037510457621774015440 0ustar useruser The hackerlab C Library Standard `libc' is a drag. Use this instead. Some notable subcomponents: The `os' module provides a portable interface to those low-level parts of `libc' that can't be avoided. `mem' provides replacements for `memcpy' and friends. It provides an allocation interface layered on top of `malloc' that let's you write library routines that: (a) are agnostic as to whether malloc failures cause the program to stop or the function to return an error, (b) are able to partition allocations into separate pools (e.g., to trigger GC for some kinds of allocation but not others), (c) have lots of annoying extra parameters to get used to. `arrays' lets you allocate chunks of memory that can tell you how large they are ("variable size arrays"). It also has a module for huge but sparse arrays (a little unicode, anyone?). `bitsets' has an exhaustive supply of `bitset' functions and, also, some modules for huge but sparse bitset arrays (a little more unicode, anyone?). `cmd' is moving towards a `getopt' replacement. It's already nicer than `getopt', but there's more to do. `fs' provides some file-name manipulation functions. Since gaining experience with this API, I've decided that it's completely wrong. `hash' provides an in-core hash-table module which is not optimal in either space or time, but not too bad in either, either -- so it makes a good default choice when you don't have any specific requirements beyond "a hash table". The API needs some work. `hash' also has some functions for computing hash values. More are needed. `rx', `rx-posix', and `rx-xml' are the best regular expression and regexp libraries on earth (supporting both 8-bit and Unicode characters). So there. `sb' is a program (kind of odd for a library) which is like simplified `cat', except that it can read and write from unix and internet sockets, acting as either client or server. (This program is included with the library since at one time, it was used by the build process. I don't think it is anymore and this program might eventually move to another package.) A neat thing about this program is its simplicity. Because it uses the hackerlab C library, and in particular `cmd' and `VU', `sb' is all of 189 lines long (last I checked). (NOTE: the `sb' program has been "unplugged", meaning that it is not built or installed by default. If you reall want it, rename sb/UNPLUGGED to sb/PLUGIN though be aware that careless use of sb can lead to security issues (since it can be told to behave as a promiscuous internet server).). `str' is a string library to replace the `str*' functions in `libc'. After gaining some experience, I've decided that this API has its strong points, but also has its problems. More functions and some changes to existing functions are needed. `uni', `unicode', and `unidata' are the first steps towards a nice `unicode' library, run-time agnostic with respect to coding system and written in sublimely classical `C' style. There's much more to add, though. `vu' is a virtual file system interface. It provides all of the file system functions, but with a layer of indirection so that processes can define per-process file-system semantics. You can "stack" the handlers for a particular descriptor. One of the stackable handlers is a buffering package that replaces `stdio'. `vu' is awesome. There's a *little bit* more to do to make it perfect. `vu-network' extends the file system namespace with handlers for (non-standard) URLs for unix and internet domain sockets. Still needed are: more data structures, especially for (attributed and structured) text processing; better string functions; a `find'-like file system walker; a generic module for parsing input into fields; better support for temporary files; more for sorting and related functions, both in-core and disk-resident; disk-resident hash tables; a reader and writer for Scheme-like data structures; a GC-based implementation of Scheme-like data structures; a couple of VM implementations, covering signifcant space/time/complexity trade-offs in the VM design space. Probably some other things I've forgotten at the moment. Have fun, Tom Lord Report bugs, ask for help, offer money, or volunteer to help by writing "lord@regexps.com". # tag: Tom Lord Thu Jan 10 02:57:12 2002 (hackerlab/=README) # tla-1.3.5+dfsg/src/Maintfile0000644000175000017500000000212410457621764014372 0ustar useruser# arch-tag: Tom Lord Tue Dec 4 15:04:23 2001 (src/Maintfile) # # MAINTFILE - # ################################################################ # Copyright (C) 2001 Thomas Lord # # See the file "COPYING" for further information about # the copyright and warranty status of this work. ################################################################ # This is a makefile. Use `make -f MAINTFILE ' # # These make targets are useful for building tags files for # all of the source in this package. # # Build a tag file of all source files. # tags: etags */*.[ch] */*/*.[ch] */*/*/*.[ch] */*/*.scm */*/*/*.scm \ --language=c */*/*.doc */*/*/*.doc # Build a tag file of all source files and makefiles. # # There are no tags of interest in makefiles, but it is # useful to emacs users to have makefiles listed in TAGS. # That way, for example, the emacs command `tags-query-replace' # will search makefiles. # bigtags: etags */*.[ch] */*/*.[ch] */*/*/*.[ch] */*/*.scm */*/*/*.scm \ --language=c */*/*.doc */*/*/*.doc --language=none \ --regex="!no-matches!" */*/*.mk */*.in */*/*.in *.in tla-1.3.5+dfsg/src/tla/0000755000175000017500000000000010457622000013300 5ustar userusertla-1.3.5+dfsg/src/tla/revision0000644000175000017500000000006010457622000015055 0ustar useruser#define TLA_REVISION "tla--atai--1.3--patch-72" tla-1.3.5+dfsg/src/tla/libfsutils/0000755000175000017500000000000010457622000015460 5ustar userusertla-1.3.5+dfsg/src/tla/libfsutils/tmp-files.h0000644000175000017500000000145610457622000017537 0ustar useruser/* tmp-files.h: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBFSUTILS__TMP_FILES_H #define INCLUDE__LIBFSUTILS__TMP_FILES_H #include "hackerlab/machine/types.h" /* automatically generated __STDC__ prototypes */ extern t_uchar * tmp_file_name (const t_uchar * dir, const t_uchar * basename); extern t_uchar * tmp_seq_file (const t_uchar * dir, const t_uchar * basename); extern t_uchar * tmp_file_name_in_tmp (t_uchar const * const basename); # #endif /* INCLUDE__LIBFSUTILS__TMP_FILES_H */ /* tag: Tom Lord Sat Jan 5 15:26:10 2002 (tmp-files.h) */ tla-1.3.5+dfsg/src/tla/libfsutils/dir-as-cwd.h0000644000175000017500000000110310457622000017556 0ustar useruser/* dir-as-cwd.h: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBFSUTILS__DIR_AS_CWD_H #define INCLUDE__LIBFSUTILS__DIR_AS_CWD_H #include "hackerlab/machine/types.h" /* automatically generated __STDC__ prototypes */ extern t_uchar * directory_as_cwd (const t_uchar * dir); #endif /* INCLUDE__LIBFSUTILS__DIR_AS_CWD_H */ /* tag: Tom Lord Sat Jan 5 15:26:10 2002 (dir-as-cwd.h) */ tla-1.3.5+dfsg/src/tla/libfsutils/read-line.c0000644000175000017500000000211110457622000017457 0ustar useruser/* read-line.c: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/char/char-class.h" #include "hackerlab/char/str.h" #include "hackerlab/vu/safe.h" #include "tla/libfsutils/read-line.h" t_uchar * read_line_from_fd (int in_fd) { t_uchar * buf; long len; t_uchar * start; buf = 0; len = 0; safe_next_line (&buf, &len, in_fd); if (!len) { return 0; } else { while (len && char_is_space (buf[len - 1])) --len; start = buf; while (len && char_is_blank (*buf)) { --len; ++buf; } return str_save_n (0, start, (size_t)len); } } t_uchar * read_line_from_file (const t_uchar * path) { int in_fd; t_uchar * answer; in_fd = safe_open (path, O_RDONLY, 0); answer = read_line_from_fd (in_fd); safe_close (in_fd); return answer; } /* tag: Tom Lord Fri May 16 16:49:28 2003 (read-line.c) */ tla-1.3.5+dfsg/src/tla/libfsutils/rmrf.h0000644000175000017500000000075610457622000016607 0ustar useruser/* rmrf.h: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBFSUTILS__RMRF_H #define INCLUDE__LIBFSUTILS__RMRF_H /* automatically generated __STDC__ prototypes */ extern void rmrf_file (t_uchar * path); #endif /* INCLUDE__LIBFSUTILS__RMRF_H */ /* tag: Tom Lord Sat Jan 5 15:26:10 2002 (rmrf.h) */ tla-1.3.5+dfsg/src/tla/libfsutils/rmrf.c0000644000175000017500000000302310457622000016570 0ustar useruser/* rmrf.c: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/os/errno.h" #include "hackerlab/os/errno-to-string.h" #include "hackerlab/char/str.h" #include "hackerlab/fs/file-names.h" #include "hackerlab/vu/safe.h" #include "tla/libfsutils/dir-listing.h" #include "tla/libfsutils/rmrf.h" void rmrf_file (t_uchar * path) { int errn; struct stat stat_buf; if (vu_lstat (&errn, path, &stat_buf)) { if (errn == ENOENT) return; else { safe_printfmt (2, "rmrf_file: I/O error (%s) from lstat for %s\n", errno_to_string (errn), path); exit (2); } } if (!S_ISDIR (stat_buf.st_mode)) { safe_unlink (path); } else { rel_table contents; int lim; int x; contents = directory_files (path); lim = rel_n_records (contents); for (x = 0; x < lim; ++x) { t_uchar * sub_path; if (!str_cmp (".", rel_peek_str (contents, x, 0))) continue; if (!str_cmp ("..", rel_peek_str (contents, x, 0))) continue; sub_path = file_name_in_vicinity (0, path, rel_peek_str (contents, x, 0)); rmrf_file (sub_path); lim_free (0, sub_path); } rel_free_table (contents); safe_rmdir (path); } } /* tag: Tom Lord Tue May 13 16:29:13 2003 (rmrf.c) */ tla-1.3.5+dfsg/src/tla/libfsutils/tmp-files.c0000644000175000017500000000415610457622000017532 0ustar useruser/* tmp-files.c: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/os/time.h" #include "hackerlab/os/sys/types.h" #include "hackerlab/os/unistd.h" #include "hackerlab/fmt/cvt.h" #include "hackerlab/char/str.h" #include "hackerlab/char/str-many.h" #include "hackerlab/vu/safe.h" #include "hackerlab/fs/file-names.h" #include "hackerlab/vu/safe.h" #include "tla/libfsutils/tmp-files.h" static int seq = 0; t_uchar * tmp_file_name (const t_uchar * dir, const t_uchar * basename) { time_t now; pid_t pid; t_uchar now_str[32]; t_uchar pid_str[32]; t_uchar seq_str[32]; t_uchar * path; now = time (0); pid = getpid (); ++seq; cvt_ulong_to_decimal (now_str, (unsigned long)now); cvt_ulong_to_decimal (pid_str, (unsigned long)pid); cvt_ulong_to_decimal (seq_str, (unsigned long)seq); path = file_name_in_vicinity (0, dir, basename); path = str_realloc_cat_many (0, path, ".", now_str, ".", pid_str, ".", seq_str, str_end); return path; } t_uchar * tmp_seq_file (const t_uchar * dir, const t_uchar * basename) { int seq = 0; while (1) { t_uchar seq_str[32]; t_uchar * path = 0; cvt_ulong_to_decimal (seq_str, (unsigned long)seq); path = file_name_in_vicinity (0, dir, basename); path = str_realloc_cat_many (0, path, ".", seq_str, str_end); if (safe_access (path, F_OK)) return path; ++seq; lim_free (0, path); path = 0; } } /** * \brief return a semi-random pathname, honouring TMP * * \return a absolute path */ t_uchar * tmp_file_name_in_tmp (t_uchar const * const basename) { t_uchar * tmpdir = tmp_dir(NULL); t_uchar * talloced_result = str_replace (tmpdir, tmp_file_name (tmpdir, basename)); t_uchar * result = str_save (0, talloced_result); lim_free (0, talloced_result); return result; } /* tag: Tom Lord Thu May 15 23:22:25 2003 (tmp-files.c) */ tla-1.3.5+dfsg/src/tla/libfsutils/ensure-dir.h0000644000175000017500000000110710457622000017705 0ustar useruser/* ensure-dir.h: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBFSUTILS__ENSURE_DIR_H #define INCLUDE__LIBFSUTILS__ENSURE_DIR_H #include "hackerlab/machine/types.h" /* automatically generated __STDC__ prototypes */ extern void ensure_directory_exists (const t_uchar * name); #endif /* INCLUDE__LIBFSUTILS__ENSURE_DIR_H */ /* tag: Tom Lord Sat Jan 5 15:26:10 2002 (ensure-dir.h) */ tla-1.3.5+dfsg/src/tla/libfsutils/copy-file.h0000644000175000017500000000210410457622000017515 0ustar useruser/* copy-file.h: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBFSUTILS__COPY_FILE_H #define INCLUDE__LIBFSUTILS__COPY_FILE_H #include "tla/libawk/relational.h" /* automatically generated __STDC__ prototypes */ extern void copy_fd (int in_fd, int out_fd); extern void copy_file (const char * from, const char * to); extern void copy_symlink (const char * from, const char * to); extern void copy_file_or_symlink (const char * from, const char * to); extern void copy_permissions (const char * from, const char * to, int full_meta); extern void copy_file_list (const t_uchar * dest_dir, const t_uchar * src_dir, rel_table index, int full_meta); #endif /* INCLUDE__LIBFSUTILS__COPY_FILE_H */ /* tag: Tom Lord Sat Jan 5 15:26:10 2002 (copy-file.h) */ tla-1.3.5+dfsg/src/tla/libfsutils/link-target.c0000644000175000017500000000162410457622000020050 0ustar useruser/* link-target.c: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/mem/mem.h" #include "hackerlab/vu/safe.h" #include "tla/libfsutils/link-target.h" t_uchar * link_target (const char * path) { char * link_buf; int link_buf_size; int link_size; link_buf = lim_malloc (0, 1024); link_buf_size = 1024; while (1) { link_size = safe_readlink (path, link_buf, link_buf_size); if (link_size < link_buf_size) break; link_buf = lim_realloc (0, link_buf, link_buf_size * 2); link_buf_size *= 2; } link_buf = lim_realloc (0, link_buf, link_size + 1); link_buf[link_size] = 0; return (t_uchar *)link_buf; } /* tag: Tom Lord Wed May 14 18:35:14 2003 (link-target.c) */ tla-1.3.5+dfsg/src/tla/libfsutils/copy-file.c0000644000175000017500000000720110457622000017513 0ustar useruser/* copy-file.c: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/fs/file-names.h" #include "hackerlab/vu/safe.h" #include "tla/libfsutils/link-target.h" #include "tla/libfsutils/ensure-dir.h" #include "tla/libfsutils/copy-file.h" void copy_fd (int in_fd, int out_fd) { static t_uchar buf[8192]; long amt; while (1) { amt = safe_read_retry (in_fd, buf, sizeof (buf)); if (!amt) break; safe_write_retry (out_fd, buf, amt); } } void copy_file (const char * from, const char * to) { int in_fd; int out_fd; in_fd = safe_open (from, O_RDONLY, 0); out_fd = safe_open (to, O_WRONLY | O_EXCL | O_CREAT, 0666); copy_fd (in_fd, out_fd); safe_close (in_fd); safe_close (out_fd); } void copy_symlink (const char * from, const char * to) { t_uchar * target; target = link_target (from); safe_symlink (target, to); lim_free (0, target); } void copy_file_or_symlink (const char * from, const char * to) { struct stat stat_buf; safe_lstat (from, &stat_buf); if (S_ISLNK (stat_buf.st_mode)) copy_symlink (from, to); else copy_file (from, to); } void copy_permissions (const char * from, const char * to, int full_meta) { struct stat from_stat_buf; struct stat to_stat_buf; mode_t mode; safe_lstat (from, &from_stat_buf); safe_lstat (to, &to_stat_buf); if (full_meta) { mode = from_stat_buf.st_mode & 07777; } else { mode = from_stat_buf.st_mode & 0777; } if (!S_ISLNK (from_stat_buf.st_mode) && !S_ISLNK (to_stat_buf.st_mode)) { safe_chmod (to, mode); if (full_meta) safe_chown (to, from_stat_buf.st_uid, from_stat_buf.st_gid); } } void copy_file_list (const t_uchar * dest_dir, const t_uchar * src_dir, rel_table index, int full_meta) { int x; for (x = 0; x < rel_n_records (index); ++x) { t_uchar * src_path = 0; t_uchar * dest_path = 0; t_uchar * dest_path_dir = 0; struct stat stat_buf; mode_t src_mode; src_path = file_name_in_vicinity (0, src_dir, rel_peek_str (index, x, 0)); dest_path = file_name_in_vicinity (0, dest_dir, rel_peek_str (index, x, 0)); dest_path_dir = file_name_directory_file (0, dest_path); ensure_directory_exists (dest_path_dir); safe_lstat (src_path, &stat_buf); if (full_meta) { src_mode = stat_buf.st_mode & 07777; } else { src_mode = stat_buf.st_mode & 0777; } if (S_ISLNK (stat_buf.st_mode)) { copy_symlink (src_path, dest_path); } else if (S_ISDIR (stat_buf.st_mode)) { ensure_directory_exists (dest_path); safe_chmod (dest_path, src_mode); if (full_meta) safe_chown (dest_path, stat_buf.st_uid, stat_buf.st_gid); } else { int in_fd; int out_fd; in_fd = safe_open (src_path, O_RDONLY, 0); out_fd = safe_open (dest_path, O_WRONLY | O_EXCL | O_CREAT, src_mode); safe_fchmod (out_fd, src_mode); if (full_meta) safe_fchown (out_fd, stat_buf.st_uid, stat_buf.st_gid); copy_fd (in_fd, out_fd); safe_close (in_fd); safe_close (out_fd); } lim_free (0, src_path); lim_free (0, dest_path); lim_free (0, dest_path_dir); } } /* tag: Tom Lord Wed May 14 18:34:05 2003 (copy-file.c) */ tla-1.3.5+dfsg/src/tla/libfsutils/link-target.h0000644000175000017500000000110110457622000020043 0ustar useruser/* link-target.h: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBFSUTILS__LINK_TARGET_H #define INCLUDE__LIBFSUTILS__LINK_TARGET_H #include "hackerlab/machine/types.h" /* automatically generated __STDC__ prototypes */ extern t_uchar * link_target (const char * path); #endif /* INCLUDE__LIBFSUTILS__LINK_TARGET_H */ /* tag: Tom Lord Sat Jan 5 15:26:10 2002 (link-target.h) */ tla-1.3.5+dfsg/src/tla/libfsutils/same.c0000644000175000017500000000236510457622000016557 0ustar useruser/* same.c: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/vu/vu.h" #include "tla/libfsutils/same.h" /*(c names_same_inode) * int names_same_inode (const t_uchar * a, const t_uchar * b); * * Return non-0 iff A and B are paths naming the * same inode. */ int names_same_inode (const t_uchar * a, const t_uchar * b) { int errn; struct stat a_stat; struct stat b_stat; if (vu_stat (&errn, a, &a_stat)) return 0; if (vu_stat (&errn, b, &b_stat)) return 0; return ((a_stat.st_ino == b_stat.st_ino) && (a_stat.st_dev == b_stat.st_dev)); } /*(c on_same_device) * int on_same_device (const t_uchar * a, const t_uchar * b); * * Return non-0 iff A and B are paths naming existing * files (of any kind) on the same device. */ int on_same_device (const t_uchar * a, const t_uchar * b) { int errn; struct stat a_stat; struct stat b_stat; if (vu_stat (&errn, a, &a_stat)) return 0; if (vu_stat (&errn, b, &b_stat)) return 0; return (a_stat.st_dev == b_stat.st_dev); } /* tag: Tom Lord Fri Dec 5 13:48:29 2003 (same.c) */ tla-1.3.5+dfsg/src/tla/libfsutils/file-contents.c0000644000175000017500000000223110457622000020374 0ustar useruser/* file-contents.c: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/char/str.h" #include "hackerlab/vu/safe.h" #include "tla/libfsutils/file-contents.h" t_uchar * file_contents (const t_uchar * path) { int in_fd; t_uchar * buf = 0; size_t len = 0; in_fd = safe_open (path, O_RDONLY, 0); safe_file_to_string (&buf, &len, in_fd); safe_close (in_fd); buf = lim_realloc (0, buf, len + 1); buf[len] = 0; return buf; } t_uchar * file_contents_trimming (const t_uchar * path) { t_uchar * intermediate = 0; t_uchar * answer = 0; intermediate = file_contents (path); if (!intermediate) return 0; answer = str_save_trimming (0, intermediate); lim_free (0, intermediate); return answer; } t_uchar * fd_contents (int in_fd) { t_uchar * buf = 0; size_t len = 0; safe_file_to_string (&buf, &len, in_fd); buf = lim_realloc (0, buf, len + 1); buf[len] = 0; return buf; } /* tag: Tom Lord Thu May 22 19:46:48 2003 (file-contents.c) */ tla-1.3.5+dfsg/src/tla/libfsutils/read-line.h0000644000175000017500000000111410457622000017466 0ustar useruser/* read-line.h: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBFSUTILS__READ_LINE_H #define INCLUDE__LIBFSUTILS__READ_LINE_H /* automatically generated __STDC__ prototypes */ extern t_uchar * read_line_from_fd (int in_fd); extern t_uchar * read_line_from_file (const t_uchar * path); #endif /* INCLUDE__LIBFSUTILS__READ_LINE_H */ /* tag: Tom Lord Sat Jan 5 15:26:10 2002 (read-line.h) */ tla-1.3.5+dfsg/src/tla/libfsutils/Makefile.in0000644000175000017500000000014610457622000017526 0ustar useruser include $(makefiles)/library.mk # tag: Tom Lord Mon May 12 15:29:35 2003 (libfsutils/Makefile.in) # tla-1.3.5+dfsg/src/tla/libfsutils/find-utils.c0000644000175000017500000000251510457622000017705 0ustar useruser/* find-utils.c: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/mem/mem.h" #include "hackerlab/char/str.h" #include "hackerlab/fs/file-names.h" #include "hackerlab/vu/safe.h" #include "tla/libfsutils/dir-listing.h" #include "tla/libfsutils/find-utils.h" void find_files (rel_table * out, t_uchar * path) { struct stat stat_buf; safe_lstat (path, &stat_buf); if (!S_ISDIR (stat_buf.st_mode)) { rel_add_records (out, rel_singleton_record_taking (rel_make_field_str (path)), rel_record_null); } else { rel_table contents; int lim; int x; contents = directory_files (path); lim = rel_n_records (contents); for (x = 0; x < lim; ++x) { if (str_cmp (rel_peek_str (contents, x, 0), ".") && str_cmp (rel_peek_str (contents, x, 0), "..")) { t_uchar * sub_path; sub_path = file_name_in_vicinity (0, path, rel_peek_str (contents, x, 0)); find_files (out, sub_path); lim_free (0, sub_path); } } rel_free_table (contents); } } /* tag: Tom Lord Thu May 15 14:55:04 2003 (find-utils.c) */ tla-1.3.5+dfsg/src/tla/libfsutils/link-tree.c0000644000175000017500000000664610457622000017532 0ustar useruser/* link-tree.c: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/char/str.h" #include "hackerlab/fs/file-names.h" #include "hackerlab/vu/safe.h" #include "tla/libfsutils/dir-listing.h" #include "tla/libfsutils/copy-file.h" #include "tla/libfsutils/link-target.h" #include "tla/libfsutils/link-tree.h" void build_link_tree (t_uchar * from, t_uchar * to, int full_meta) { struct stat statb; safe_lstat (from, &statb); if (S_ISDIR (statb.st_mode)) { t_ulong desired_mode; rel_table contents = rel_table_nil; int x; if (full_meta) { desired_mode = (statb.st_mode & 07777); } else { desired_mode = (statb.st_mode & 0777); } safe_mkdir (to, desired_mode); safe_chmod (to, desired_mode); if (full_meta) { safe_chown (to, statb.st_uid, statb.st_gid); } contents = directory_files (from); for (x = 0; x < rel_n_records (contents); ++x) { if (str_cmp (".", rel_peek_str (contents, x, 0)) && str_cmp ("..", rel_peek_str (contents, x, 0))) { t_uchar * sub_from = 0; t_uchar * sub_to = 0; sub_from = file_name_in_vicinity (0, from, rel_peek_str (contents, x, 0)); sub_to = file_name_in_vicinity (0, to, rel_peek_str (contents, x, 0)); build_link_tree (sub_from, sub_to, full_meta); lim_free (0, sub_from); lim_free (0, sub_to); } } rel_free_table (contents); } else if (S_ISLNK (statb.st_mode)) { copy_symlink (from, to); } else { safe_link (from, to); } } void build_partial_link_tree (t_uchar * from, t_uchar * to, rel_table inventory, int full_meta) { int x; struct stat statb; /* inventory must be sorted and must include directories */ for (x = -1; x < rel_n_records (inventory); ++x) { t_uchar * from_path = 0; t_uchar * to_path = 0; if (x == -1) { from_path = str_save (0, from); to_path = str_save (0, to); } else { const t_uchar * rel_path; rel_path = rel_peek_str (inventory, x, 0); from_path = file_name_in_vicinity (0, from, rel_path); to_path = file_name_in_vicinity (0, to, rel_path); } safe_lstat (from_path, &statb); if (S_ISDIR (statb.st_mode)) { t_ulong desired_mode; if (full_meta) { desired_mode = (statb.st_mode & 07777); } else { desired_mode = (statb.st_mode & 0777); } safe_mkdir (to_path, desired_mode); safe_chmod (to_path, desired_mode); if (full_meta) { safe_chown (to_path, statb.st_uid, statb.st_gid); } } else if (S_ISLNK (statb.st_mode)) { copy_symlink (from_path, to_path); } else { safe_link (from_path, to_path); } lim_free (0, from_path); lim_free (0, to_path); } } /* tag: Tom Lord Fri May 30 15:11:13 2003 (link-tree.c) */ tla-1.3.5+dfsg/src/tla/libfsutils/safety.c0000644000175000017500000000132210457622000017115 0ustar useruser/* safety.c: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/char/char-class.h" #include "hackerlab/char/str.h" #include "tla/libfsutils/safety.h" int is_non_upwards_relative_path (const t_uchar * path) { if (path && (*path == '/')) return 0; while (path && *path) { if (!str_cmp_prefix ("../", path) || !str_cmp_prefix ("..", path)) return 0; path = str_chr_index (path, '/'); if (path) ++path; } return 1; } /* tag: Tom Lord Fri May 30 00:42:45 2003 (safety.c) */ tla-1.3.5+dfsg/src/tla/libfsutils/ensure-dir.c0000644000175000017500000000150210457622000017677 0ustar useruser/* ensure-dir.c: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/char/str.h" #include "hackerlab/vu/safe.h" #include "hackerlab/fs/file-names.h" #include "tla/libfsutils/ensure-dir.h" void ensure_directory_exists (const t_uchar * name) { if (safe_file_is_directory_following (name)) { return; } { t_uchar * parent = 0; parent = file_name_directory_file (0, name); if (parent) ensure_directory_exists (parent); if (!safe_file_is_directory_following (name)) safe_mkdir (name, 0777); lim_free (0, parent); return; } } /* tag: Tom Lord Mon May 12 15:29:46 2003 (ensure-dir.c) */ tla-1.3.5+dfsg/src/tla/libfsutils/PLUGIN/0000755000175000017500000000000010457622000016456 5ustar userusertla-1.3.5+dfsg/src/tla/libfsutils/PLUGIN/REQ0000644000175000017500000000003010457622000017021 0ustar useruserlibfsutils libfsutils tla-1.3.5+dfsg/src/tla/libfsutils/safety.h0000644000175000017500000000102010457622000017115 0ustar useruser/* safety.h: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBFSUTILS__SAFETY_H #define INCLUDE__LIBFSUTILS__SAFETY_H /* automatically generated __STDC__ prototypes */ extern int is_non_upwards_relative_path (const t_uchar * path); #endif /* INCLUDE__LIBFSUTILS__SAFETY_H */ /* tag: Tom Lord Sat Jan 5 15:26:10 2002 (safety.h) */ tla-1.3.5+dfsg/src/tla/libfsutils/same.h0000644000175000017500000000111510457622000016554 0ustar useruser/* same.h: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBFSUTILS__SAME_H #define INCLUDE__LIBFSUTILS__SAME_H /* automatically generated __STDC__ prototypes */ extern int names_same_inode (const t_uchar * a, const t_uchar * b); extern int on_same_device (const t_uchar * a, const t_uchar * b); #endif /* INCLUDE__LIBFSUTILS__SAME_H */ /* tag: Tom Lord Fri Dec 5 13:48:26 2003 (same.h) */ tla-1.3.5+dfsg/src/tla/libfsutils/find-utils.h0000644000175000017500000000110210457622000017701 0ustar useruser/* find-utils.h: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBFSUTILS__FIND_UTILS_H #define INCLUDE__LIBFSUTILS__FIND_UTILS_H #include "tla/libawk/relational.h" /* automatically generated __STDC__ prototypes */ extern void find_files (rel_table * out, t_uchar * path); #endif /* INCLUDE__LIBFSUTILS__FIND_UTILS_H */ /* tag: Tom Lord Sat Jan 5 15:26:10 2002 (find-utils.h) */ tla-1.3.5+dfsg/src/tla/libfsutils/file-contents.h0000644000175000017500000000127210457622000020405 0ustar useruser/* file-contents.h: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBFSUTILS__FILE_CONTENTS_H #define INCLUDE__LIBFSUTILS__FILE_CONTENTS_H #include "hackerlab/machine/types.h" /* automatically generated __STDC__ prototypes */ extern t_uchar * file_contents (const t_uchar * path); extern t_uchar * file_contents_trimming (const t_uchar * path); extern t_uchar * fd_contents (int in_fd); #endif /* INCLUDE__LIBFSUTILS__FILE_CONTENTS_H */ /* tag: Tom Lord Sat Jan 5 15:26:10 2002 (file-contents.h) */ tla-1.3.5+dfsg/src/tla/libfsutils/dir-as-cwd.c0000644000175000017500000000130710457622000017557 0ustar useruser/* dir-as-cwd.c: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/fs/file-names.h" #include "hackerlab/fs/cwd.h" #include "hackerlab/vu/safe.h" #include "tla/libfsutils/dir-as-cwd.h" t_uchar * directory_as_cwd (const t_uchar * dir) { int here_fd; t_uchar * answer = 0; here_fd = safe_open (".", O_RDONLY, 0); safe_chdir (dir); answer = safe_current_working_directory (); safe_fchdir (here_fd); safe_close (here_fd); return answer; } /* tag: Tom Lord Fri May 30 21:47:40 2003 (dir-as-cwd.c) */ tla-1.3.5+dfsg/src/tla/libfsutils/dir-listing.h0000644000175000017500000000120510457622000020054 0ustar useruser/* dir-listing.h: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBFSUTILS__DIR_LISTING_H #define INCLUDE__LIBFSUTILS__DIR_LISTING_H #include "tla/libawk/relational.h" /* automatically generated __STDC__ prototypes */ extern rel_table directory_files (const t_uchar * path); extern rel_table maybe_directory_files (const t_uchar * path); #endif /* INCLUDE__LIBFSUTILS__DIR_LISTING_H */ /* tag: Tom Lord Sat Jan 5 15:26:10 2002 (dir-listing.h) */ tla-1.3.5+dfsg/src/tla/libfsutils/dir-listing.c0000644000175000017500000000227010457622000020052 0ustar useruser/* dir-listing.c: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/vu/safe.h" #include "tla/libfsutils/dir-listing.h" rel_table directory_files (const t_uchar * path) { rel_table answer; DIR * dir; char * file; answer = rel_table_nil; safe_opendir (&dir, path); while (!safe_readdir (&file, dir)) { rel_add_records (&answer, rel_singleton_record_taking (rel_make_field_str (file)), rel_record_null); lim_free (0, file); } safe_closedir (dir); return answer; } rel_table maybe_directory_files (const t_uchar * path) { int errn; rel_table answer; DIR * dir; char * file; answer = rel_table_nil; if (!vu_opendir (&errn, &dir, path)) { while (!safe_readdir (&file, dir)) { rel_add_records (&answer, rel_singleton_record_taking (rel_make_field_str (file)), rel_record_null); lim_free (0, file); } safe_closedir (dir); } return answer; } /* tag: Tom Lord Tue May 13 09:13:46 2003 (dir-listing.c) */ tla-1.3.5+dfsg/src/tla/libfsutils/string-files.c0000644000175000017500000000220710457622000020233 0ustar useruser/* string-files.c: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/bugs/panic.h" #include "hackerlab/mem/mem.h" #include "hackerlab/char/str.h" #include "hackerlab/vu/safe.h" #include "hackerlab/vu/vu-virtual-null.h" #include "tla/libfsutils/string-files.h" int make_output_to_string_fd (void) { int errn; int fd; fd = vu_make_virtual_null_fd (&errn, O_WRONLY); invariant (fd >= 0); safe_buffer_fd (fd, 0, O_WRONLY, 0); safe_set_dont_flush (fd, 1); return fd; } t_uchar * string_fd_close (int fd) { t_uchar * bufbase; long bufsize; t_uchar * write_pos; long buffered; int has_zero_byte; t_uchar * answer = 0; safe_getbuf (&bufbase, &bufsize, &write_pos, &buffered, &has_zero_byte, fd); answer = lim_malloc (0, write_pos - bufbase + 1); mem_move (answer, bufbase, write_pos - bufbase); answer[write_pos - bufbase] = 0; safe_close (fd); return answer; } /* tag: Tom Lord Sun May 25 11:13:05 2003 (string-files.c) */ tla-1.3.5+dfsg/src/tla/libfsutils/link-tree.h0000644000175000017500000000144510457622000017527 0ustar useruser/* link-tree.h: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBFSUTILS__LINK_TREE_H #define INCLUDE__LIBFSUTILS__LINK_TREE_H #include "tla/libawk/relational.h" /* automatically generated __STDC__ prototypes */ extern void build_link_tree (t_uchar * from, t_uchar * to, int full_meta); extern void build_partial_link_tree (t_uchar * from, t_uchar * to, rel_table inventory, int full_meta); #endif /* INCLUDE__LIBFSUTILS__LINK_TREE_H */ /* tag: Tom Lord Sat Jan 5 15:26:10 2002 (link-tree.h) */ tla-1.3.5+dfsg/src/tla/libfsutils/string-files.h0000644000175000017500000000110510457622000020234 0ustar useruser/* string-files.h: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBFSUTILS__STRING_FILES_H #define INCLUDE__LIBFSUTILS__STRING_FILES_H /* automatically generated __STDC__ prototypes */ extern int make_output_to_string_fd (void); extern t_uchar * string_fd_close (int fd); #endif /* INCLUDE__LIBFSUTILS__STRING_FILES_H */ /* tag: Tom Lord Sat Jan 5 15:26:10 2002 (string-files.h) */ tla-1.3.5+dfsg/src/tla/tla/0000755000175000017500000000000010457622000014060 5ustar userusertla-1.3.5+dfsg/src/tla/tla/Makefile.in0000644000175000017500000000173010457622000016126 0ustar useruserlibs := ../libarch/libarch.a \ ../libfsutils/libfsutils.a \ ../libawk/libawk.a \ ../libdate/libdate.a \ $(objroot)/hackerlab/libhackerlab/libhackerlab.a \ ../../libneon/src/libneon.la \ -lm mains := tla.c include $(makefiles)/library.mk programs := $(patsubst %.c, %$(cfg__exec_suffix), $(mains)) progdepfiles := $(patsubst %.c, %.d, $(mains)) all: $(programs) Programs ifndef no-Programs-rule Programs: $(programs) echo $(programs) | sed -f $(makefiles)/column.sed > Programs endif $(programs):%$(cfg__exec_suffix):%.o $(thelib) $(filter-out -L%, $(filter-out -l%, $(libs))) $(SHELL) $(objroot)/libneon/libtool --mode=link $(CC) $(CFLAGS) -L../../expat -o $@ $< $(thelib) $(libs) clean: clean-prog clean-prog: for f in $(programs) $(progdepfiles) $(patsubst %.c, %.o, $(mains)) Programs ; do \ test ! -e $$f || rm $$f ; \ done include $(makefiles)/install-programs.mk # tag: Tom Lord Mon May 12 11:12:24 2003 (utils-arch/Makefile.in) # tla-1.3.5+dfsg/src/tla/tla/PLUGIN/0000755000175000017500000000000010457622000015056 5ustar userusertla-1.3.5+dfsg/src/tla/tla/PLUGIN/REQ0000644000175000017500000000006610457622000015432 0ustar useruserlibarch tla libawk tla libfsutils tla libdate tla tla-1.3.5+dfsg/src/tla/tla/tla.c0000644000175000017500000000663610457622000015017 0ustar useruser/* tla.c * **************************************************************** * Copyright (C) 2003 Tom Lord, Stig Brautaset * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "config-options.h" #include "hackerlab/bugs/panic.h" #include "hackerlab/char/str.h" #include "hackerlab/vu/safe.h" #include "tla/libarch/cmds.h" #include "tla/revision" #if cfg__enable_pathcompress==1 #include "hackerlab/vu/vu-pathcompress.h" #endif int main (int argc, char * argv[]) { int x; char * cmd; if (argc <= 0) panic ("tla invoked with argc <= 0 ?!?"); if (argc == 1) { usage_error: safe_printfmt (2, "usage: tla command ...\n"); safe_printfmt (2, " (try 'tla -h')\n"); exit (1); } cmd = argv[1]; if (!str_cmp (cmd, "-h") || !str_cmp (cmd, "--help") || !str_cmp (cmd, "-H")) { safe_printfmt (1, "invoke arch commands\n"); safe_printfmt (1, "usage: tla COMMAND [PARAMS ...]\n"); safe_printfmt (1, "\n"); safe_printfmt (1, " -h, --help Display a help message and exit.\n"); safe_printfmt (1, " -H Display a verbose help message and exit.\n"); safe_printfmt (1, " -V, --version Display a release identifier string\n"); safe_printfmt (1, " and exit.\n"); safe_printfmt (1, "\n"); safe_printfmt (1, "\n"); safe_printfmt (1, "To see a list of available subcommands, run:\n"); safe_printfmt (1, "\n"); safe_printfmt (1, " tla help\n"); safe_printfmt (1, "\n"); exit (0); } if (!str_cmp (cmd, "-V") || !str_cmp (cmd, "--version")) { safe_printfmt (1, cfg__std__package "\n"); #ifdef TLA_REVISION safe_printfmt(1, "%s, ", TLA_REVISION); #endif safe_printfmt (1, "built on %s\n", __DATE__); safe_printfmt (1, "\n"); safe_printfmt (1, "Copyright 2003, 2004, 2005, 2006 Free Software Foundation, Inc. and contributors\n"); safe_printfmt (1, "Written by Thomas Lord, et al. See the AUTHORS file for a list.\n"); safe_printfmt (1, "\n"); safe_printfmt (1, "This is free software; see the source for copying conditions.\n"); safe_printfmt (1, "There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\n"); safe_printfmt (1, "PARTICULAR PURPOSE.\n"); safe_printfmt (1, "\n"); safe_printfmt (1, "Report problems to " cfg__tla_bug_mail "\n"); safe_printfmt (1, "See: " cfg__tla_web_url "\n"); safe_printfmt (1, "\n"); exit (0); } if (cmd[0] == '-') goto usage_error; #if cfg__enable_pathcompress==1 if (1) { regex_t reg; char* pattern = ""; regcomp(®, pattern, 0); vu_push_name_handler("pathcompress", NULL, ®, 0, &pathcompress_fs_vtable, NULL, 0); } #endif for (x = 0; arch_commands[x].name; ++x) { if (!str_cmp (cmd, arch_commands[x].name) && arch_commands[x].fn) { t_uchar * full_program_name = 0; int answer; full_program_name = str_alloc_cat (0, "tla ", arch_commands[x].name); answer = arch_commands[x].fn (full_program_name, argc - 1, argv + 1); lim_free (0, full_program_name); return answer; } } safe_printfmt (2, "tla: unrecognized command (%s)\n", cmd); safe_printfmt (2, " (try 'tla help')\n"); exit (1); return 1; } /* tag: Tom Lord Tue Jun 10 17:07:03 2003 (tla.c) */ tla-1.3.5+dfsg/src/tla/README0000644000175000017500000001210110457622000014153 0ustar useruserGNU Arch 1.3.5 Copyright 2003, 2004, 2005, 2006 Free Software Foundation, Inc. and contributors (see the file AUTHORS for a more complete list) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version This is GNU Arch version 1.3.5, a revision control system. This version of GNU Arch is also known as tla. GNU Arch was invented and mainly written by Tom Lord . Significant parts of this program were written by Robert Collins and James Blackwell as independent contributors or employees at Canonical Ltd. Currently it is maintained by Andy Tai . CHANGES IN 1.3.5 * Fixes for Bugs 11731, 11701, 7502, 16334, 16539, 16538, 16780 * Enhanced support for several different ssh implementations by Ludovic Courtès * SHA1 checksums * Undo command specific file selection, by Ludovic * Microsoft Windows NT FTP server support * commit and undo commands allow file exclusion with the -x option * library-dir as alias for my-revision-library * archive-register as alias for register-archive * Cygwin support, file name compression patches from Lode Leroy , incorporated into tla proper (see notes below) * apply-delta now supports diff3 style merge (via the -t option) * honor --skip-present for replay, patch by Ludovic 32-bit Windows, Cygwin notes: Now the Cygwin specific changes to tla by Lode Leroy are incorporated into the tla proper. However, to get tla to work on Cygwin requires more than changes to tla; changes to GNU diff, tar and patch are necessary. Since these tools are outside the Arch Project's control, here the patches to them are just distributed together with tla in the cygwin/ directory; follow the instructions in the cygwin/BUILD.txt file for installing tla on cygwin. Thanks to Lode Leroy for his efforts in getting tla to work on Cygwin. CHANGES IN 1.3.4 Version 1.3.4 makes no changes to the underlying infrastructure of tla; the main changes are in the user interface, the adaption of many commands from bazaar, a fork of the earlier versions of tla by Robert Collins and Canonical. Specifically, tla now supports the following new commands: tla lint is an alias for tla tree-lint tla add is an alias for tla add-id tla branch [options] [SOURCE] BRANCH behaves like tla tag except that it can use the current directory as the source and then switch the current directory to the new branch tla diff [options] [revisions] -- [files...] functions similar to tla what-changed --diffs but supports the following additional usage for some common operations: tla diff -L compares the current tree with the latest versions in the repository (what is commonly called the 'HEAD' version in CVS) tla diff -s shows the names of the changed files only (by default diff shows the whole changes) tla diff -- file1 file2 ... shows only the changes in the specified files tla diff -D -D ... allows command line options to be passed to 'diff' when display differences between versions (note these options are not used for actual changeset computation) tla export [options] [revision] DIR allows the full source tree of particular revision to be placed in a directory DIR excluding meta files used by Arch/tla. tla switch [options] [package] changes the current source directory to a particular revision with uncommitted changed preserved. tla tree-id tla tree-revision prints the tree revision name the current directory corresponds to In addition, a new "basic" help mode is provided: tla help -b only shows the "basic" commands necessary for using tla, reducing the complexity of the help messages and making tla less intimidating to new users. ARCHIVE FORMAT NOTES Note since tla version 1.3.2, tla creates "baz" format archives by default. If you want your archives to be readable by tla versions earlier than 1.3.2, pass the -t or --tla option to 'tla make-archive' For more information about GNU Arch (tla), see the Arch wiki at http://wiki.gnuarch.org/ A mailing list for Arch users is available at gnu-arch-users@gnu.org (go to http://lists.gnu.org/mailman/listinfo/gnu-arch-users to subscribe or to access the mailing list archives) To report bugs, go to http://savannah.gnu.org/bugs/?group=gnu-arch&func=additem FINALLY, THE MEANING OF "TLA" Some thought tla stands for "Tom Lord's Arch." Accord to Tom: ("Tom Lord's Arch") is not what TLA stands for, although the coincidence that it could be read that way made for some amusing discussions on IRC, way back when. TLA is a punning acronym that I chose because it could stand for "true love, always" and "three letter acronym". The former because of a misplaced faith in humanity. The latter because it is a traditional hacker joke. -t tla-1.3.5+dfsg/src/tla/AUTHORS0000644000175000017500000000070510457622000014352 0ustar useruser(Note this list is not complete at this time. More names will be added gradually) Tom Lord Robert Collins James Blackwell Aaron Bentley Ludovic Courtès Derek Zhou Lode Leroy Sergio Gelato Aldrik KLEBER Andy Tai tla-1.3.5+dfsg/src/tla/cygwin/0000755000175000017500000000000010457622000014600 5ustar userusertla-1.3.5+dfsg/src/tla/cygwin/pathcompress-0.20.tar.gz0000644000175000017500000001756710457622000021034 0ustar useruser‹ÿ é@ì=ksÛF’ù*Vé?Œ™È")¾õJ$ÓÅ’mÉrJ²7WeûX0$±ŠÖfu?û>_÷¼0x’’hmîÖ¬ÄgúÝ3Ý™èÑÄô¦~@ðÕm÷»ïVþévwºûûûð·ÛÝëwÅßû+>ßõºÝý~¿»·p½ííÞþwdwõ¢d?³02B¾;;;¹(ƒ›^ûFέ§é ?~Æÿ¯&†;¦Ž7^.:·Øÿýý^Úÿ»½íÞw¤»2 J>ÿæþWÞ&#/ ‘ctÌÛñÜv·ûë•õÊM·Ýûi½²Ж=õ:¥nD-¢š¶IF7%¡‘9it4±CrCƒÐö\2 iHŽß]þØÞ&#Û¡®1¥¡¤ý#@–$ÿèc_…w$òH4¡Ä±Ãˆx#2§ŽÓºv½¹ÛB¶€ºzH…%ÓÛ ÚÈ©èÜ’v»ÝQä:ðMrÛ\Ðtl»cMb`æ¶"{J‰çG@å€Ð/¾DäýÙÑðìÝ›AµMýðjjµó(qåPbGmR“çF(Ú-ruK¦ ¾q 0.Î{äjf;VX—¢ì¡â("ÍH®À sRm6q<¶¦4Ó*©…á$/#:2\rAmsò?A¹%š.1®B4M“Ðê{‚m†`G8ž;nïˆÌíhÚV?º8?=SÁˆP#CÇoG积ªRÀ]è0ÙØQ‡  ‘m†lœX4¢ÁÔv™â#B§)MŒ±a»8j~à=¦D×âu@-Ø&yã]·Ê ;oyà“(&Ô6sÒ²­0i‡¿z—¼&o©íR‡ü5P4¶QæEÃqnÓŸ‰ñJþ@ªö ïÖ+D}`’ªpýñ»ó÷¿½ÿõÕ»·¿]œ\^]¼úõôo'—ƒ^m_ádºáp~°™¤Ð0ÏÖFöbÔˆКùŽm%–P3ò`Hô lšµƒáºÐú @ÔGJ0’` Át%S‡-Z#Ié€~3‚kÊFUÁ¸´¨-1ÍÕ8é1›Ã°Cc´íâš Ö™%´60ØèÔnÉ´±€Ax Ö-t…j[4†#5`Tú=kf‚è`qá'5º<œkgf)Z›'ä­šOpšàa¢ÚÄp-HUgŠs*šx³ñãÒ-1J\h 0YMrK#)ÀO‚¿éYŒ;¸ïÖttGJk[ćYéÏ®À׌1¸ÒGQI CãÔø;(€%]Š@Ñpg>Ú !üzå¡ñ?›ÿé«Ì0 óÿþÞþn*ÿïôì[þ‚Ï÷¶kÂl¡ähGƒ¨=yY©¨ÆêÄ0!*8ÆUçfÿµ'ÕâÎVx"À²è€‘($¨/ÂȲ=”FoÂ9À%„ð៼=ú!†êáÙÉ9ÙîïïýX©@€ Q``Bkœƒáé;œÿ ¦ü/P±D 5g€!À qŒ¦Q½òG’ÄñéE'ñ!\c/¢Cl‡T[»™ 1þAoí9´7És¸l2Žuò‚tëä–f|=ÕªÐK6 =/­OnU€"é;B¨k8<Ò® ™^ôëäùsR{†ÒÖ%E#%…FÌDŠÜÔúØëöw>Šö8 h=º†ê[kÜf1N“œ8;A×B¡‹N±IªáA¬ÍšÔw£µÓ 7B¦i!¾fÚãGY F’Fb`•ø_î`Ì>dÀ$ä@~k‡‡š©ÐÃ7ޤ—¾ƒÜ`žë‚ûT½­Ø¡™9ÎüóŸŒÀ³wïÚP¹N DZ*k„Ô`ØšS¿ÆéVÛÕú`ЭcIwj½Œ²cO‡£€ÒH†0hYÓs¡P˜Ñ˜¡¸ˆMÁRü€ðÑ_G"S¨ <ÉèSF©(]*‘™;;¡°¼b. £`fF¼¾¸št;I±YØ3&÷àêÊ`Ò» t#¬6øTˆá=5*4&—ÃÓË‹“75 Ù£á² ›k؉ÔlºÐáÎCiW¯‚Õ´2Äx~n4Ú 9^UHPÕjìAÍÉ0¡LS 3Jµk´A…àø4' ]Æš`€ß?\^((A% ÆÙ¦'ÖýMt/¹=ãº:¢ˆö)ˆV¼À¥•İØb9qL§QÒ¤Ãõ0·‰ÛòÇʈ—tN–ƒ¥#Q£4‡1FóŸ`¡²clÌ‹˜y>Ø[½¦Ê„LN?” c3Ž_ÇuU€Ãj<8^j¬s©°lT”1ZOcRWä†ÿ‹ûáîab"«¦p+Zà #›M!áúæãgÌíˆ2¦_†˜ýÇHK• pãæªU™ñƒ)„Ó®üæ„ú74™þ=H€Ê/œ2ˆ/bsµƒ÷¡Ç¡Ag¾Ýï̭΄BŒnͽÀ±:Ä4‡±(Ȫè@m°(À ²ôÀ;Ší]¬Gà¡•éÛý¬éØ·%&=^3SÎ'˜æjþKÖ"Ã…ÈQ~³Ú¦_(ÏP@þ «‚|lv6y`ñÆ«wHx^L€|úTã·ZR|G“YE½…PlƤÁn6±Lb-=Þ2‹[ú¼¥¥‘"[²}(øI-¡½YuB©¦faiù—=144fãÞçfµĘÌ'=9s à ÞÉÂ3†ýºœºiýb–‚HN>[sÇ3Ç]žip¸§ŒÓ‡ßš˜ ½Ã"ü`c³iµÓêÂÆd¤î‚€%­Íd­YXA÷Sк3¶•3âÙ̶?+y´ˆžê.LË W—¢UÈ)U¸ Sø½ÏÙÍ GŒV†ñµÞê%b‚l–âÆSåeÑ ©¹(‹×ô¹ ·s#¸w#¿}¸ü59:ªz‡ä†ÒÝ"ÍcPf¡³QåÚ@ÔFŒÚs¸hJH"/@Æðgádˆ«.ÉáZl3|°€ú”QÀú?QNŒÂáM„‹ºŽ“¾«|·|#4`§WE ”…lÿò\Ê.Yß²εŒ¢JÉÂÊ(h`€zŽ[Áývýç­qM1«¯€¸ø”¯ÿôz½þ~zýgïÛþÏ“|.Þ½{S w}¬À¾¡³òë»·'òC »ê¬@©¼?;"Ø„]uïÇ ‘V¯Ý¯T./^±.©wÂÀ¬üòáôì8nb•Êé9‚µN¡0êüŠÖ+g§¿`ß™jéÄëFŽ}¥¾T*¯^Ÿ½¹dÄ_ñk ô;ÜÚ’ÖÚ€ P;–@¬ ˆcüaMŽF ðˆÑ0º†˜NÈÿSþg¿š^ôÄËJEÁve&wüÊÊVGÎÇBÂþ“}C@\üð3áÌW¤×–&Ãe=ÂWÖ~6}‰R‚n¥ÕÔ°DÖ1äAoż‚«È±ÊWœÈ§D þT%-“üðBQ²~ñP:I=R»–•JFÕƒŒöf‰-¾°Ê¥5" °Xƒ ‘ÆÃ„óÚšM}Hsäø9‡¹u|rvòþµÂ]1àÑ™…AG¬ivÄ*g²qh¸¡ntéæB{RDè6옞;²ÇiÄ©aNl—vlJéÈÏ¢±iâîiÇÞûq¯å›-¾ÜÙno·{º¨¸…•H©pOéFiù±cÝú4,Åùº/FÏu„\pÎŒ‹IÅY•; -ïNç‘î|8>wg±‹ÝYŒ»”;‹ÑKÝYá!*Ñ'w?îåº,™ûø-7âdDfzè¬àá‡! ÷æ+¹„oó—sl>n¹WUÚx´có)Ý÷ŠÀ’îM2¼¿‡ŽÏ\¬ðb?ã.åêbôro§S÷Òq¸SŽb×—ãg†B.ôý=üh2ÜÑåV[Êß I,åö…Tr]8smh_]Bf{FÔ€;è%„É?ÑJƒÀõ–@’TÝà³›†Ô „–QI‘ÆC±P%Æ`!îrƒ¯=×Êç…hÎιÃX>L-B^"R-"‘E÷« ÄÇÉB#.5b–¡²ÔØY†PyæZDA¦¢Q–G uך4—}©¸¹H€É*V&¿}žâ“]ÿ‹.+ä±èüw·—^ÿÝÝÛÿ¶þûŸÿOçÿvº?í­`Û_ÛaJoÚk[i%¾tŒ0J$ú±B¾;ZÉì8æmóîY®ÎíÈœ¨îÞgÑnÀcÓß<À­QÅ7Håé4m§TíÑåjƶQ›òÁxka³»ƒØšØ d %{„Ø¿ÒmBvÒÿîO´U¨ÌáÇàb ƒ „5·¶ü´…¶ïÜðÙ(¶\ïdóSwÝ ’³Ÿ°‘ggº(„îl¦7Ë ®~¯ñÛçÏ÷Éæÿd)¹ ,ÿïîíÿöû½ôþï^o¿ÿ-ÿ?Å'ή¿Û®åÍ! ¿ÄçI²‰Xo“w /S€ì†4Õ(rv’¨¸•á­"—Ÿ½{Cº °jª>ÀNºRrãÙ±¼¡ëEp{6çüGÓ¨‰Ïÿá³;Njäb9æg4tvÇ'¿|P Gü«ÖˈÄûSV¶;–`]Äùø/§ÛÓ$ÖqÕ2²œi½òúôì v¸yO@ bª,êww~Äv˜6yXvn}”`Ÿ9D# 2÷‚kcˆy‚hø`Üu‘Ìät5 Höm~Ü žùe?žtÏ‘_úðÏT«`JȘF v-­G“„ö?¨7ÊtÔë‡QñM¨CiÄ&”UŽ-+–rJìÀpæ ¬uv<èXž*4,;ÏûÍŒ‹81‘‹ÓÐwǧE”ìýV͈©âÅ`‡üN¼ ÒðÈ/~6ÿýô|»?|}z~<<>zÄ$YFd0±~=:?>;!“×ÐÈÔ(KŒ,ÑÎ,æôâ`‚Á(\:·zÂùyFמN˜[M¥Ð"_1´",&#[ˆšž{3Œ¼áhæ8ÃXdA#nà˜šƒã.˜˜Â¡ipf)èÆ?¯í Œ^ƒµŠ= \W¦áHÏäôüoGg§ÇCnö!|ùp¢LĪdéL„fÝe¯|Ž…Ón›GVÀFDQ€sÀÀ{g¼®dHê9m€ð^BDÎ6Ýe„t0,y¡Œ*g†B–Àw±ÖrÄæ(-yK]ú¬Ð®j.$™¢?^áÑvîÙ+&i/g .rÎÒ6z¨Ú¥Ôb½‘N5_ŸÒP£ä^>Þq‹"dŠìFØ„8™;yóbcÿtø¦íøs ¥ZIó-T*3KuRDW¤¿ÝÔGêÌ÷©lîž©ŽÑä׉gUX‹þüŠP-õØÎ0UCd’áªPP:ù28©k'©w^ŸrvN'¨ a8æ¯uÌ CMëbNàýzÜ4Ò®çú5ÇÃ¥ž¿wÇ žò‰Â¿tz*Ø›²µž’p¨#Ø,KË+tn ‰s+8/Í“¬„ðs|DBÆ’¹ "²&iÌå:„àÅW0~"`  tâaÀX‘Ç–6Ú›üW_>¹!j¾|rƒÑã•¡hò ®Å¼Ælk ø4LþÇßÚ:|\—Ч6ÿåÓ©³I¸Xsò2i..ÈÚ¼ÕÊæ²ÆŒ1À4‹ñ>õ4çº~¨qPñÇë-…z¼<èšz‘<ó2Þ÷1ˆâ¯•…ñó šmH‰ ) ÿ#†éamàëî¥Y *Q’›üq¤HUn¥)W‰¹ÙN OSŸÏ¦œÏ‰Òj-Î'af¹0z [+³ê]· ÔŒsp‘–*õ•)™.!ÿL‚è)´À ÷VQÝ\è¥eUtÀj®¿èü@RTå…LÚP#DT ™œ¥Mqk¥~Ùßé¦)ˆÕ„´kDošzq¡KRTkäTù%Sš¯˜âÄ•W)%êΕI ®%…Ò"é—”}%’g]r³5°¶aYE‹—D1q °:õnhš@†äg[K"Ì|¸ó¢Å8ÿêåлςõÿÉ*x,ØÿïîôwÒëÿýî·÷ÿ<ÉG_-–ï;Ÿ^œ½=¹$Uõ"¬êcÃdþòò=óÄáƒ^)^2þ{¡ìüçOµ­’Ç‚ù¿×ßM¿ÿsggg÷ÛüŠOù>_¼MWº'Çæޛ܀`»r:Ò/¾¾ˆÄ|ðÐŽ¾(ãÍ"ö þ¦.’Ä‘l\Ka‰Kj IÖÆúû• £ÉÙ³w©²WVmW†¥‚ÕÙÜ7Ië%ÿ XÔÄ%â7¶&ŒœAY Èœp€r_±m·Lê˜ÁB¹oI2QÁ³óRõõJì9SîÑ_×SØÓOwßtÓÜúØß òÕ\܆bOÛÑ{xj;•ä µjgäy¸÷ÆþríòÀT988ÔTGˆJæâ[w)„ΕèHÞÒhÑìÊøGù\9z'­&§Òé?ŒN§Ù´§øNÑ6Ë ³?[{Bˆ´Cú_YNBf>,p=r9c´«üEjÅÑ)áDJ©2¥t”'ÊÌÏíÄ ÒÒÜRî‹„ñø²Ô—qVu9•„he­ÃIÜÍà©NH‰R%ñ–`”%b%?ê&ß³–á]ê-ÊxV)‡£V.êì˜Nâð…2 ö_¢W `eª$"J±b‹is2Ïr ‹EÜ7WìjKùúûvÔë¤!½=$šôÌ#%À×Yªd#¶M4dªaïJYJó\Eâ­”ø²Ó)ôfйîÏ4ç\·É[¥£ãc<['Ÿ¸M: )›uIáØ ÏšïAöÂP¥E†ªèÉê›O6iTF[¿ƒÊ;^1á¯ÌäÚéKRÜÀ²Ê ì 8¬”oÁѱªè]d&ð3f†ÐD\lF×T•µïZUhc98ÝžHúéæ\J©¤ÎC梉ž&ÚLÝ.Nøbÿ>2W«Üäºdj¹=¦pá°ÀV%«€Y™D¹§&à·…Á¯öÉÞÿgÞòhå÷ÿ;½ÝÌúßÞöö·ûÿ§ø”ßÿk§w ÎîÆ øà);?—îÊy ¨¤W$g*ÍÒ¡§Cd’M†iýã¼–†_©Øïdå™Aÿ%®þ×#lÀŒ ô÷¥þø›]9j3ÀXkÆu•ÊÞºæj'+£X6WÀW™ªàÌ5W!o4Føs¤Ác&¬b‘»È°ÎHç)¬pb¥…«Ó]œä œò@(Œ‡ôGÏýiåM >L ¯ê–MȶÓ”›LÉÇÕÃg:¤üº jE-ÑZ×ÒÈ>›Á ß*z&8¹1–>›ä œƒÔêb‚|ö‘0tÇÏÕ'–„þ·½cíiä~æ_„J ˆG9éN:J%zJ«H§PW©½;¡hYèªy‘,ÔÞ¯g<~îxw³Yî²? Øã{<3žÛæëŸ,åB¿hÕ;;üÖ;‚‡¦ïGäI&_u¶;Ÿ'³Ç„ð3µ4µ}ÿ›ÍV&= CÁþ}e †oÞ1ö=¼G®ÿɧML}QÍ“ù´îv€ù£ã¾Á|Z¹' J\¼*[É–Œ@„ {ˆBª©Dâ͇EšþS" ÅßEšËoá™æd Á(ûòu:ÊEÕì‚l«…£[¿M!9*¨vg“ÚH¿×?€-ÀÀ¥ƒ(Ÿè$«@b¥íl]ž¦[²­Ey‰üM”7ÆÞH4Þ$¸r¯ µA‚ N{ƒ‹#N¯=s2Á¥=_™Ê¸­”:\­ðª<Þ—V$:ËDÖ $`S’*³^JØÁ€7?ëlðwHúê;òð> ߢ¥]97Ù•u<~}~W¢ËÙåz4¼Y¬Î9]ŠpÉÏ·†gDÅt>N¯²áü±š­V«bBÿi`…0܈iBšZèÜŠ쎩ΫWigœÝüw&iz±âdž {Õ© N4ɧó,]ìïï«ÙÝÁqìlwN/ߟõN.va®õgšqÃlÅIòyN™Kö-ŒÊ¶éÞw‡ïB¨}||£ܺTÀ¢àxkÙ™©kºpÀÀØyÝ[ÿdr‘”²gÀíß ñ š}!û'MD®“( ]³r¨r±£ T£Ç¥]ü—¥M[½j7HlKA°áˆ d76#k22V^£ébyOŽb:áó.EÕ¯ÄÇ8Y ämXcÐØ;Xn-…Ö8xz£ [IZù¾!%—J@,ËúŸX”¿ô'g¶ï9‚ÞYßuZß?Q( Úá]pa[¹,Ò¬÷œÏäåbx/ÝÉZ…'NºÍiŸ!I]7úຬm„Øê+áVîP å²­<ÆÑ)]¨í³z nZŸÂ!@,UÞåJœ„&)5L¦w“¼ùÆ»BGœµo‘&/f [ø9‰D{k :ñ×qüp4š&bO9Îò…øM~PC#/ËÍóñ£òÜšÊèOÑ4Zw5…mlc¢¸& ü1Í+¯«’¶KxVÕ ˜ÑvJ ” "…• Á]Éè£ä 'é2Dz‘Yk,rkú'˘¾™ s-]f¹1œi›ØU t[õ24¬bö:]í-!;±5Ë8Ã$ӣދ Pp¸ÒþZž³û(`,AìO•èû'-áènRhHÑ‘–n¼ _š»<$²›ç—ýsAõü¸çH@±2öê§Áé,#ª"l¿/p=Ýꨄ”R£F±ÀéŠ,Ì"ÕÇ€>Oœ[kÔé¶µie¸Q·`±öfЯËלLçc¿¦úNÖ„$S‹·‹ š\¢E dòºl ªš;Áv æÊA%›M5Ëê߀ju`ÂÞYkËfNÇqªÍFtœz¹þ°Ü·ó!«„ÈßJ:ØÒƒPI|uØ–uU.í´uæd³ 2„ÈzΉ‚œä¨ÅnÙ‚Æ£9ÍÞ¬r³µßª~©:±›æÞtƒ±#/N¼¥ °õ2ôÙ»O€Ø‰~¸Ãü¡½^)æ8ækˆêóàT°]‹^~^ó<ü¬*W@¼—p|„ ©rÑ·GLëZÑ gŸ,ÔõçÉýÒ‹ ÷õZcyA ÿ,«ÛçÓ+ŸÖ˜Q¬Š±QeVmÚNJ[pà™IK€ìI—wˆßìzærÏäizjˆ¤q ·êž¡æžÇv ’*i@³ A™„ qË&,èÞ²E0wT$ ÇE㺩¿Á)g6çM”Ï3 U…'­$V…`Èìkž¨Ó)g ¬í²ƒ]¬]ñÃ^‹Çñ3Œ»—ðáËß¿­bvç™ðzâ|aþØ„$g!¯˜•ô}ä³IzZÅ_X-¥P^T¡qëÙP$è×Õ“•²²Ýa&¬Kô 3ªTýÉsÓïòŒß9ªj ‘ Â(C ýLlj kDžllk¢¸ñ³>ð‡yÈdlß .ûZÉ .›<µü:™ä£`Nr2¾’÷HËŠë$$C'‚z Âmô |šKêÄ6V+Um“ø«»Y«©¹¯$1~~Š´\÷08…“ôaM’ÝT\ÈSwh‘Gý¶G%nÀžä×l ´Z=ԢتßÝ$íE×bL³E’Íð‰8wA©×9Œ п?>^þ »±ó÷ýß?ô½Ëþ Ñ?ùÐÿ«wvîååîv¾½Ì;hl2ùû_Ö¿ºêþ烷þý¯oÞÆû_¿II—øZîjkè…®…Xb‰%–Xb‰%–Xb‰%–Xb‰%–Xb‰%–Xb‰%–—Pþº«pÈtla-1.3.5+dfsg/src/tla/cygwin/patch-2.5.8-8-pathcompress.diff0000644000175000017500000001123010457622000022051 0ustar useruserdiff -bruw patch-2.5.8-8-orig/inp.c patch-2.5.8-8/inp.c --- patch-2.5.8-8-orig/inp.c 2003-09-07 10:22:05.000000000 +0200 +++ patch-2.5.8-8/inp.c 2004-08-20 12:17:31.080267200 +0200 @@ -235,6 +235,10 @@ When creating files, the files do not actually exist. */ if (size) { +#ifdef PATHCOMPRESS + char compressed_filename[4096]; + filename = pathcompress_compress_path(filename, compressed_filename); +#endif #ifdef __CYGWIN__ int ifd = open (filename, O_RDONLY|(binary_transput?:O_TEXT)); #else diff -bruw patch-2.5.8-8-orig/patch.c patch-2.5.8-8/patch.c --- patch-2.5.8-8-orig/patch.c 2003-08-19 13:24:17.000000000 +0200 +++ patch-2.5.8-8/patch.c 2004-08-20 12:15:11.820020800 +0200 @@ -380,6 +380,11 @@ if (! dry_run) { time_t t; +#ifdef PATHCOMPRESS + char compressed_outname[4096]; + outname = pathcompress_compress_path(outname, compressed_outname); +#endif + move_file (TMPOUTNAME, &TMPOUTNAME_needs_removal, outname, instat.st_mode, @@ -426,7 +431,13 @@ strcpy (rej, outname); addext (rej, ".rej", '#'); } +#ifdef PATHCOMPRESS + char uncompressed_rej[4096]; + pathcompress_uncompress_path(rej, uncompressed_rej); + say (" -- saving rejects to file %s", quotearg (uncompressed_rej)); +#else say (" -- saving rejects to file %s", quotearg (rej)); +#endif if (! dry_run) { move_file (TMPREJNAME, &TMPREJNAME_needs_removal, @@ -790,11 +801,23 @@ /* Process any filename args. */ if (optind < Argc) { +#ifdef PATHCOMPRESS + char compressed_inname[4096]; + pathcompress_compress_path(Argv[optind++], compressed_inname); + inname = savestr(compressed_inname); +#else inname = savestr (Argv[optind++]); +#endif invc = -1; if (optind < Argc) { +#ifdef PATHCOMPRESS + char compressed_inname[4096]; + pathcompress_compress_path(Argv[optind++], compressed_inname); + patchname = savestr(compressed_inname); +#else patchname = savestr (Argv[optind++]); +#endif if (optind < Argc) { fprintf (stderr, "%s: %s: extra operand\n", diff -bruw patch-2.5.8-8-orig/pch.c patch-2.5.8-8/pch.c --- patch-2.5.8-8-orig/pch.c 2003-08-19 13:24:17.000000000 +0200 +++ patch-2.5.8-8/pch.c 2004-08-20 12:19:13.197104000 +0200 @@ -149,6 +149,10 @@ } else { +#ifdef PATHCOMPRESS + char compressed_filename[4096]; + filename = pathcompress_compress_path(filename, compressed_filename); +#endif #if HAVE_SETMODE_DOS pfp = fopen (filename, binary_transput ? "rb" : "rt"); #else @@ -264,7 +268,13 @@ inname = fetchname (buf, 0, (time_t *) 0); if (inname) { +#ifdef PATHCOMPRESS + char compressed_inname[4096]; + pathcompress_compress_path(inname, compressed_inname); + if (stat (compressed_inname, &instat) == 0) +#else if (stat (inname, &instat) == 0) +#endif { inerrno = 0; invc = -1; @@ -537,6 +547,10 @@ for (i = OLD; i <= INDEX; i++) if (name[i]) { +#ifdef PATHCOMPRESS + char compressed_filename[4096]; + pathcompress_compress_path(name[i], compressed_filename); +#endif if (i0 != NONE && strcmp (name[i0], name[i]) == 0) { /* It's the same name as before; reuse stat results. */ @@ -544,7 +558,11 @@ if (! stat_errno[i]) st[i] = st[i0]; } +#ifdef PATHCOMPRESS + else if (stat (compressed_filename, &st[i]) != 0) +#else else if (stat (name[i], &st[i]) != 0) +#endif stat_errno[i] = errno; else { diff -bruw patch-2.5.8-8-orig/util.c patch-2.5.8-8/util.c --- patch-2.5.8-8-orig/util.c 2003-09-07 10:22:05.000000000 +0200 +++ patch-2.5.8-8/util.c 2004-08-20 12:15:12.010294400 +0200 @@ -61,6 +61,13 @@ move_file (char const *from, int volatile *from_needs_removal, char *to, mode_t mode, int backup) { +#ifdef PATHCOMPRESS + char compressed_from[4096]; + from = pathcompress_compress_path(from, compressed_from); + char compressed_to[4096]; + to = pathcompress_compress_path(to, compressed_to); +#endif + struct stat to_st; int to_errno = ! backup ? -1 : stat (to, &to_st) == 0 ? 0 : errno; @@ -192,6 +199,10 @@ int create_file (char const *file, int open_flags, mode_t mode) { +#ifdef PATHCOMPRESS + char compressed_file[4096]; + file = pathcompress_compress_path(file, compressed_file); +#endif int fd; mode |= S_IRUSR | S_IWUSR; mode &= ~ (S_IXUSR | S_IXGRP | S_IXOTH); @@ -211,6 +222,12 @@ int tofd; int fromfd; size_t i; +#ifdef PATHCOMPRESS + char compressed_from[4096]; + from = pathcompress_compress_path(from, compressed_from); + char compressed_to[4096]; + to = pathcompress_compress_path(to, compressed_to); +#endif #ifdef __CYGWIN__ if ((fromfd = open (from, O_RDONLY | (binary_transput ?: O_TEXT))) < 0) tla-1.3.5+dfsg/src/tla/cygwin/expat-configure.diff0000644000175000017500000000334710457622000020541 0ustar useruserdiff -u expat/configure expat/configure --- expat/configure 2005-03-16 10:13:11.470139200 +0100 +++ expat/configure 2005-03-16 11:28:40.823028800 +0100 @@ -4762,11 +4762,11 @@ done; fi~ '"$ltdll_cmds"' - $CC -Wl,--base-file,$output_objdir/$soname-base '$lt_cv_cc_dll_switch' -Wl,-e,'$dll_entry' -o $output_objdir/$soname '$ltdll_obj'$libobjs $deplibs $compiler_flags~ + $CC -shared -Wl,--base-file,$output_objdir/$soname-base '$lt_cv_cc_dll_switch' -Wl,-e,'$dll_entry' -o $output_objdir/$soname '$ltdll_obj'$libobjs $deplibs $compiler_flags~ $DLLTOOL --as=$AS --dllname $soname --exclude-symbols '$dll_exclude_symbols' --def $output_objdir/$soname-def --base-file $output_objdir/$soname-base --output-exp $output_objdir/$soname-exp~ - $CC -Wl,--base-file,$output_objdir/$soname-base $output_objdir/$soname-exp '$lt_cv_cc_dll_switch' -Wl,-e,'$dll_entry' -o $output_objdir/$soname '$ltdll_obj'$libobjs $deplibs $compiler_flags~ + $CC -shared -Wl,--base-file,$output_objdir/$soname-base $output_objdir/$soname-exp '$lt_cv_cc_dll_switch' -Wl,-e,'$dll_entry' -o $output_objdir/$soname '$ltdll_obj'$libobjs $deplibs $compiler_flags~ $DLLTOOL --as=$AS --dllname $soname --exclude-symbols '$dll_exclude_symbols' --def $output_objdir/$soname-def --base-file $output_objdir/$soname-base --output-exp $output_objdir/$soname-exp --output-lib $output_objdir/$libname.dll.a~ - $CC $output_objdir/$soname-exp '$lt_cv_cc_dll_switch' -Wl,-e,'$dll_entry' -o $output_objdir/$soname '$ltdll_obj'$libobjs $deplibs $compiler_flags' + $CC -shared $output_objdir/$soname-exp '$lt_cv_cc_dll_switch' -Wl,-e,'$dll_entry' -o $output_objdir/$soname '$ltdll_obj'$libobjs $deplibs $compiler_flags' ;; netbsd*) tla-1.3.5+dfsg/src/tla/cygwin/tar-1.13.25.5-pathcompress.diff0000644000175000017500000001173410457622000021704 0ustar useruserdiff -bruw tar-1.13.25-5-orig/src/create.c tar-1.13.25-5/src/create.c --- tar-1.13.25-5-orig/src/create.c 2002-05-17 03:21:16.000000000 +0200 +++ tar-1.13.25-5/src/create.c 2004-08-20 15:23:36.194913600 +0200 @@ -903,6 +903,13 @@ time_t original_ctime; struct utimbuf restore_times; +#ifdef PATHCOMPRESS + char compressed[4096]; + //printf("dump_file %s", p); + p = pathcompress_compress_path(p, compressed); + //printf(" -> %s\n", p); +#endif + /* FIXME: `header' might be used uninitialized in this function. Reported by Bruno Haible. */ @@ -985,10 +992,22 @@ /* Build new prototype name. Ensure exactly one trailing slash. */ +#ifndef PATHCOMPRESS len = strlen (p); buflen = len + NAME_FIELD_SIZE; namebuf = xmalloc (buflen + 1); memcpy (namebuf, p, len); +#else + { + char uncompressed[4096]=""; + pathcompress_uncompress_path(p, uncompressed); + //printf("p='%s' -> uncompressed='%s'\n", p, uncompressed); + len = strlen(uncompressed); + buflen = len + NAME_FIELD_SIZE; + namebuf = xmalloc (buflen + 1); + memcpy (namebuf, uncompressed, len); + } +#endif while (len >= 1 && ISSLASH (namebuf[len - 1])) len--; namebuf[len++] = '/'; @@ -1108,6 +1127,13 @@ (entrylen = strlen (entry)) != 0; entry += entrylen + 1) { +#ifdef PATHCOMPRESS + //printf("readdir: entry %s\n", entry->d_name); + if (strcmp(entry, "=dirnames")==0) { + continue; + } +#endif + if (buflen <= len + entrylen) { buflen = len + entrylen; @@ -1317,8 +1343,16 @@ /* If the file is sparse, we've already taken care of this. */ if (!header_moved) +#ifdef PATHCOMPRESS + { + char uncompressed[4096]; + pathcompress_uncompress_path(p, uncompressed); + //printf("readdir: %s ->> %s\n", p, uncompressed); + header = start_header (uncompressed, ¤t_stat); + } +#else header = start_header (p, ¤t_stat); - +#endif /* Mark contiguous files, if we support them. */ if (archive_format != V7_FORMAT && S_ISCTG (current_stat.st_mode)) diff -bruw tar-1.13.25-5-orig/src/extract.c tar-1.13.25-5/src/extract.c --- tar-1.13.25-5-orig/src/extract.c 2002-05-17 03:27:50.000000000 +0200 +++ tar-1.13.25-5/src/extract.c 2004-10-06 11:12:01.178804800 +0200 @@ -142,6 +142,11 @@ { mode_t mode; +#ifdef PATHCOMPRESS + char compressed[4096]; + file_name = pathcompress_compress_path(file_name, compressed); +#endif + if (0 < same_permissions_option && permstatus != INTERDIR_PERMSTATUS) { @@ -216,6 +221,11 @@ { struct utimbuf utimbuf; +#ifdef PATHCOMPRESS + char compressed[4096]; + file_name = pathcompress_compress_path(file_name, compressed); +#endif + if (typeflag != SYMTYPE) { /* We do the utime before the chmod because some versions of utime are @@ -355,6 +365,9 @@ int invert_permissions; int status; +#ifdef PATHCOMPRESS + char abspath[4096]; +#endif for (cursor = cursor0; *cursor; cursor++) { @@ -377,6 +390,11 @@ *cursor = '\0'; /* truncate the path there */ mode = MODE_RWX & ~ newdir_umask; invert_permissions = we_are_root ? 0 : MODE_WXUSR & ~ mode; +#ifdef PATHCOMPRESS + pathcompress_add_path(file_name, abspath); + file_name = pathcompress_compress_path(file_name, abspath); + pathcompress_add_pathid(file_name); +#endif status = mkdir (file_name, mode ^ invert_permissions); if (status == 0) @@ -608,6 +626,9 @@ int interdir_made = 0; char typeflag; union block *exhdr; +#ifdef PATHCOMPRESS + char abspath[4096]; +#endif #define CURRENT_FILE_NAME (skipcrud + current_file_name) @@ -806,7 +827,12 @@ WARN ((0, 0, _("Extracting contiguous files as regular files"))); } } +#ifdef PATHCOMPRESS + pathcompress_compress_path(CURRENT_FILE_NAME, abspath); + fd = open (abspath, openflag, current_stat.st_mode); +#else fd = open (CURRENT_FILE_NAME, openflag, mode); +#endif #endif /* not O_CTG */ @@ -1153,7 +1179,17 @@ & MODE_RWX); again_dir: +#ifdef PATHCOMPRESS + { + char abspath[4096]; + pathcompress_add_path(CURRENT_FILE_NAME, abspath); + pathcompress_compress_path(CURRENT_FILE_NAME, abspath); + status = mkdir (abspath, mode); + pathcompress_add_pathid(CURRENT_FILE_NAME); + } +#else status = mkdir (CURRENT_FILE_NAME, mode); +#endif if (status != 0) { diff -bruw tar-1.13.25-5-orig/src/names.c tar-1.13.25-5/src/names.c --- tar-1.13.25-5-orig/src/names.c 2002-05-17 03:21:16.000000000 +0200 +++ tar-1.13.25-5/src/names.c 2004-08-20 15:23:36.395201600 +0200 @@ -351,6 +351,16 @@ while (cursor > name_buffer && ISSLASH (*cursor)) *cursor-- = '\0'; +#ifdef PATHCOMPRESS + { + char compressed_name[4096]; + //printf("name: '%s' len=%d\n", name_buffer, name_buffer_length); + pathcompress_compress_path(name_buffer, compressed_name); + //printf("comp: '%s'\n", compressed_name); + strcpy(name_buffer, compressed_name); + } +#endif + if (chdir_flag) { if (chdir (name_buffer) < 0) tla-1.3.5+dfsg/src/tla/cygwin/diffutils-2.8.7-1-pathcompress.diff0000644000175000017500000001114710457622000022745 0ustar useruserdiff -bruw diffutils-2.8.7-1-orig/lib/exclude.c diffutils-2.8.7-1/lib/exclude.c --- diffutils-2.8.7-1-orig/lib/exclude.c 2003-10-27 09:41:23.000000000 +0100 +++ diffutils-2.8.7-1/lib/exclude.c 2004-08-20 12:13:53.146894400 +0200 @@ -138,6 +138,15 @@ { size_t exclude_count = ex->exclude_count; +#ifdef PATHCOMPRESS + if (f) + { + if (strcmp(f,"=dirnames")==0) + { + return true; + } + } +#endif /* If no options are given, the default is to include. */ if (exclude_count == 0) return false; diff -bruw diffutils-2.8.7-1-orig/src/context.c diffutils-2.8.7-1/src/context.c --- diffutils-2.8.7-1-orig/src/context.c 2004-04-12 09:44:35.000000000 +0200 +++ diffutils-2.8.7-1/src/context.c 2004-08-20 12:13:53.196966400 +0200 @@ -64,7 +64,13 @@ verify (info_preserved, sizeof inf->stat.st_mtime <= sizeof sec); sprintf (buf, "%ld.%.9d", sec, nsec); } +#ifdef PATHCOMPRESS + char uncompressed_name[4096]; + pathcompress_uncompress_path(inf->name, uncompressed_name); + fprintf (outfile, "%s %s\t%s\n", mark, uncompressed_name, buf); +#else fprintf (outfile, "%s %s\t%s\n", mark, inf->name, buf); +#endif } } diff -bruw diffutils-2.8.7-1-orig/src/diff.c diffutils-2.8.7-1/src/diff.c --- diffutils-2.8.7-1-orig/src/diff.c 2004-04-12 09:44:35.000000000 +0200 +++ diffutils-2.8.7-1/src/diff.c 2004-11-08 10:08:33.184814400 +0100 @@ -273,6 +273,11 @@ re_set_syntax (RE_SYNTAX_GREP | RE_NO_POSIX_BACKTRACKING); excluded = new_exclude (); +#ifdef PATHCOMPRESS + binary = true; + set_binary_mode (STDOUT_FILENO, true); +#endif + /* Decode the options. */ while ((c = getopt_long (argc, argv, shortopts, longopts, 0)) != -1) @@ -759,8 +764,17 @@ try_help ("extra operand `%s'", argv[optind + 2]); } +#if PATHCOMPRESS + char compressed_file0[4096]; + char compressed_file1[4096]; + pathcompress_compress_path(argv[optind], compressed_file0); + pathcompress_compress_path(argv[optind+1], compressed_file1); + exit_status = compare_files ((struct comparison *) 0, + compressed_file0, compressed_file1); +#else exit_status = compare_files ((struct comparison *) 0, argv[optind], argv[optind + 1]); +#endif } } @@ -1049,6 +1063,10 @@ char const *name = name0 == 0 ? name1 : name0; char const *dir = parent->file[name0 == 0].name; +#ifdef PATHCOMPRESS + char uncompressed_dir[4096]; + dir = pathcompress_uncompress_path(dir, uncompressed_dir); +#endif /* See POSIX 1003.1-2001 for this format. */ message ("Only in %s: %s\n", dir, name); @@ -1244,6 +1262,11 @@ char const *dir = parent->file[cmp.file[0].desc == NONEXISTENT].name; +#ifdef PATHCOMPRESS + char uncompressed_dir[4096]; + dir = pathcompress_uncompress_path(dir, uncompressed_dir); +#endif + /* See POSIX 1003.1-2001 for this format. */ message ("Only in %s: %s\n", dir, name0); diff -bruw diffutils-2.8.7-1-orig/src/diff3.c diffutils-2.8.7-1/src/diff3.c --- diffutils-2.8.7-1-orig/src/diff3.c 2004-04-12 09:44:35.000000000 +0200 +++ diffutils-2.8.7-1/src/diff3.c 2004-10-07 09:08:27.966227200 +0200 @@ -322,6 +322,20 @@ for (i = tag_count; i < 3; i++) tag_strings[i] = file[i]; +#ifdef PATHCOMPRESS + char* compressed_file[3]; + char compressed_file0[4096]; + char compressed_file1[4096]; + char compressed_file2[4096]; + compressed_file[0]= compressed_file0; + compressed_file[1]= compressed_file1; + compressed_file[2]= compressed_file2; + pathcompress_compress_path(file[0], compressed_file[0]); + pathcompress_compress_path(file[1], compressed_file[1]); + pathcompress_compress_path(file[2], compressed_file[2]); + file = compressed_file; +#endif + /* Always compare file1 to file2, even if file2 is "-". This is needed for -mAeExX3. Using the file0 as the common file would produce wrong results, because if the diff -bruw diffutils-2.8.7-1-orig/src/util.c diffutils-2.8.7-1/src/util.c --- diffutils-2.8.7-1-orig/src/util.c 2004-04-12 09:44:35.000000000 +0200 +++ diffutils-2.8.7-1/src/util.c 2004-08-20 12:13:53.407268800 +0200 @@ -155,11 +155,21 @@ static char const *current_name1; static bool currently_recursive; +#ifdef PATHCOMPRESS + char uncompressed_name0[4096]; + char uncompressed_name1[4096]; +#endif + void setup_output (char const *name0, char const *name1, bool recursive) { +#ifdef PATHCOMPRESS + current_name0 = pathcompress_uncompress_path(name0, uncompressed_name0); + current_name1 = pathcompress_uncompress_path(name1, uncompressed_name1); +#else current_name0 = name0; current_name1 = name1; +#endif currently_recursive = recursive; outfile = 0; } tla-1.3.5+dfsg/src/tla/cygwin/gnu-patch-test.diff0000644000175000017500000000111210457622000020270 0ustar useruserdiff -u build-tools/auto-conf-lib/gnu-patch-test build-tools/auto-conf-lib/gnu-patch-test --- build-tools/auto-conf-lib/gnu-patch-test 2005-03-16 10:11:34.700992000 +0100 +++ build-tools/auto-conf-lib/gnu-patch-test 2005-03-16 10:54:28.011230400 +0100 @@ -116,7 +116,7 @@ FAIL="" -if [ -x "`which "$PATCHPROG" 2>/dev/null`" ] ; then +if [ -x "$PATCHPROG" -o -x "`which "$PATCHPROG" 2>/dev/null`" ] ; then testresults "$ORIG_A" "$PATCHED_A" "$EXPECTED_A" "$ORIG_PRISTINE_A" "$PATCH_A" testresults "$ORIG_B" "$PATCHED_B" "$EXPECTED_B" "$ORIG_PRISTINE_B" "$PATCH_B" tla-1.3.5+dfsg/src/tla/cygwin/BUILD.txt0000644000175000017500000000233010457622000016176 0ustar useruser build procedure for pathcompress tools get and uncompress pathcompress-0.20.tar.gz make copy the binaries to /usr/share/tla/bin build procedure for tar,diff,diff3,patch get and uncompress the correct source distribution apply the patch: path -p1 configure --bindir=/usr/share/tla/libexec make CFLAGS="-DPATHCOMPRESS=1" copy the binaries to /usr/share/tla/libexec build procedure for tla run configure ../src/configure \ --with-gnu-diff=/usr/share/tla/libexec/diff.exe \ --with-gnu-diff3=/usr/share/tla/libexec/diff3.exe \ --with-gnu-tar=/usr/share/tla/libexec/tar.exe \ --with-gnu-patch=/usr/share/tla/libexec/patch.exe \ --with-posix-shell=/usr/bin/bash make cp tla/tla/tla.exe /usr/share/tla/bin Remarks * tla does not like the CR vss CR/LF issue, so you should make sure that the directories in which you use arch (including ~/.tla-params, {archives}, working directory) are mounted as binary in cygwin * Apparently there could be a problem when the filesystem is FAT, so it is advised to use NTFS * There is an environment setting to disable DAV if your proxy doesn't support it: export TLA_DISABLE_DAV=1 tla-1.3.5+dfsg/src/tla/COPYING0000644000175000017500000004405510457622000014343 0ustar useruserAll or most of the source files in this distribution refer to this file for copyright and warranty information. This file should be included whenever those files are redistributed. This software is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License, version 2, as published by the Free Software Foundation. That license is reproduced below. GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License. # tag: Tom Lord Fri Jan 11 15:49:48 2002 (file-utils/COPYING) # tla-1.3.5+dfsg/src/tla/Makefile.in0000644000175000017500000000013010457622000015337 0ustar useruser include $(makefiles)/dirs.mk # tag: Tom Lord Tue Dec 4 14:47:25 2001 (Makefile.in) # tla-1.3.5+dfsg/src/tla/libarch/0000755000175000017500000000000010457622000014704 5ustar userusertla-1.3.5+dfsg/src/tla/libarch/cmd-build-config.c0000644000175000017500000001172210457622000020156 0ustar useruser/* build-config.c * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "config-options.h" #include "hackerlab/cmd/main.h" #include "tla/libarch/namespace.h" #include "tla/libarch/project-tree.h" #include "tla/libarch/configs.h" #include "tla/libarch/cmd.h" #include "tla/libarch/cmd-build-config.h" static t_uchar * usage = "[options] config"; static t_uchar * version_string = (cfg__std__package " from regexps.com\n" "\n" "Copyright 2003 Tom Lord\n" "\n" "This is free software; see the source for copying conditions.\n" "There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\n" "PARTICULAR PURPOSE.\n" "\n" "Report bugs to " cfg__tla_bug_mail ".\n" "\n" cfg__std__release_id_string "\n"); #define OPTS(OP) \ OP (opt_help_msg, "h", "help", 0, \ "Display a help message and exit.") \ OP (opt_long_help, "H", 0, 0, \ "Display a verbose help message and exit.") \ OP (opt_version, "V", "version", 0, \ "Display a release identifier string\n" \ "and exit.") \ OP (opt_dir, "d", "dir DIR", 1, \ "cd to DIR first") \ OP (opt_no_pristines, 0, "no-pristines", 0, \ "don't create pristine copies") \ OP (opt_hardlinks, 0, "link", 0, \ "hardlink files to revision library instead of copying") \ OP (opt_library, 0, "library", 0, \ "ensure revisions are in the revision library") \ OP (opt_sparse, 0, "sparse", 0, \ "add library entries sparsely (--link, --library)") \ OP (opt_release_id, "r", "release-id", 0, \ "overwrite ./=RELEASE-ID for this config") t_uchar arch_cmd_build_config_help[] = ("instantiate a multi-project config\n" "Build the named configuration. See also" " \"tla cat-config -H\".\n"); enum options { OPTS (OPT_ENUM) }; static struct opt_desc opts[] = { OPTS (OPT_DESC) {-1, 0, 0, 0, 0} }; int arch_cmd_build_config (t_uchar * program_name, int argc, char * argv[]) { int o; struct opt_parsed * option; t_uchar * dir = 0; struct arch_build_config_params params = {0, }; dir = str_save (0, "."); safe_buffer_fd (1, 0, O_WRONLY, 0); option = 0; while (1) { o = opt_standard (lim_use_must_malloc, &option, opts, &argc, argv, program_name, usage, version_string, arch_cmd_build_config_help, opt_help_msg, opt_long_help, opt_version); if (o == opt_none) break; switch (o) { default: safe_printfmt (2, "unhandled option `%s'\n", option->opt_string); panic ("internal error parsing arguments"); usage_error: opt_usage (2, argv[0], program_name, usage, 1); exit (1); /* bogus_arg: */ safe_printfmt (2, "ill-formed argument for `%s' (`%s')\n", option->opt_string, option->arg_string); goto usage_error; case opt_dir: { lim_free (0, dir); dir = str_save (0, option->arg_string); break; } case opt_no_pristines: { params.no_pristines = 1; break; } case opt_hardlinks: { params.hardlinks = 1; break; } case opt_library: { params.library = 1; break; } case opt_sparse: { params.sparse = 1; break; } case opt_release_id: { params.release_id = 1; break; } } } if (argc != 2) goto usage_error; { t_uchar * config; t_uchar * tree_root = 0; t_uchar * def_archive = 0; config = argv[1]; if (!arch_valid_config_name (config)) { safe_printfmt (2, "%s: invalid config name (%s)\n", argv[0], config); exit (2); } tree_root = arch_tree_root (0, dir, 0); if (!tree_root) { safe_printfmt (2, "%s: not in project tree (%s)\n", argv[0], dir); exit (1); } { /* possibly get the default archive from the project tree */ t_uchar * tree_version = arch_tree_version (tree_root); if (tree_version) { def_archive = arch_parse_package_name (arch_ret_archive, 0, tree_version); lim_free (0, tree_version); } } arch_build_config (tree_root, config, ¶ms, def_archive); lim_free (0, def_archive); lim_free (0, tree_root); } lim_free (0, dir); return 0; } /* tag: Tom Lord Mon Jun 2 21:41:48 2003 (buildcfg.c) */ tla-1.3.5+dfsg/src/tla/libarch/archive-snapshot.h0000644000175000017500000000123310457622000020332 0ustar useruser/* archive-snapshot.h: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__ARCHIVE_SNAPSHOT_H #define INCLUDE__LIBARCH__ARCHIVE_SNAPSHOT_H #include "hackerlab/machine/types.h" #include "tla/libarch/archive.h" /* automatically generated __STDC__ prototypes */ extern void archive_snapshot (struct arch_archive * arch, t_uchar * limit, t_uchar * dir); #endif /* INCLUDE__LIBARCH__ARCHIVE_SNAPSHOT_H */ /* tag: Tom Lord Sat Jan 5 15:26:10 2002 (archive-snapshot.h) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-versions.h0000644000175000017500000000124210457622000017465 0ustar useruser/* cmd-versions.h: * **************************************************************** * Copyright (C) 2003 Tom Lord, Stig Brautaset * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__CMD_VERSIONS_H #define INCLUDE__LIBARCH__CMD_VERSIONS_H #include "hackerlab/machine/types.h" extern t_uchar arch_cmd_versions_help[]; /* automatically generated __STDC__ prototypes */ extern int arch_cmd_versions (t_uchar * program_name, int argc, char * argv[]); #endif /* INCLUDE__LIBARCH__CMD_VERSIONS_H */ /* tag: Stig Brautaset Sat Jun 7 17:52:36 BST 2003 (cmd-versions.h) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-rbrowse.h0000644000175000017500000000130710457622000017302 0ustar useruser/* cmd-rbrowse.h: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__CMD_RBROWSE_H #define INCLUDE__LIBARCH__CMD_RBROWSE_H #include "hackerlab/machine/types.h" extern t_uchar arch_cmd_rbrowse_help[]; /* automatically generated __STDC__ prototypes */ extern int arch_cmd_rbrowse (t_uchar * program_name, int argc, char * argv[]); #endif /* INCLUDE__LIBARCH__CMD_RBROWSE_H */ /* tag: James Blackwell Thu Dec 11 16:48:53 EST 2003 (cmd-rbrowse.h) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-add-log-version.c0000644000175000017500000001224610457622000020610 0ustar useruser/* add-log.c * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "config-options.h" #include "hackerlab/cmd/main.h" #include "tla/libarch/namespace.h" #include "tla/libarch/project-tree.h" #include "tla/libarch/patch-logs.h" #include "tla/libarch/cmd.h" #include "tla/libarch/cmd-add-log-version.h" static t_uchar * usage = "[options] [archive]/version"; static t_uchar * version_string = (cfg__std__package " from regexps.com\n" "\n" "Copyright 2003 Tom Lord\n" "\n" "This is free software; see the source for copying conditions.\n" "There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\n" "PARTICULAR PURPOSE.\n" "\n" "Report bugs to " cfg__tla_bug_mail ".\n" "\n" cfg__std__release_id_string "\n"); #define OPTS(OP) \ OP (opt_help_msg, "h", "help", 0, \ "Display a help message and exit.") \ OP (opt_long_help, "H", 0, 0, \ "Display a verbose help message and exit.") \ OP (opt_version, "V", "version", 0, \ "Display a release identifier string\n" \ "and exit.") \ OP (opt_archive, "A", "archive", 1, \ "Override `my-default-archive'") \ OP (opt_dir, "d", "dir DIR", 1, \ "cd to DIR first") t_uchar arch_cmd_add_log_version_help[] = ("add a patch log version to a project tree\n" "Add an initially empty list of patch log for VERSION to the project tree\n" "containing DIR (or the current directory).\n" "\n" "A project tree patch log is a pre-requisite for checking the\n" "directory in on that version, or updating with patches from that\n" "version.\n" "\n" "Note that versions recorded for a project tree are\n" "recorded by fully qualified version names: an archive name\n" "plus the name of a version within that archive.\n"); enum options { OPTS (OPT_ENUM) }; static struct opt_desc opts[] = { OPTS (OPT_DESC) {-1, 0, 0, 0, 0} }; int arch_cmd_add_log_version (t_uchar * program_name, int argc, char * argv[]) { int o; struct opt_parsed * option; t_uchar * default_archive = 0; char * dir = 0; default_archive = 0; dir = str_save (0, "."); safe_buffer_fd (1, 0, O_WRONLY, 0); option = 0; while (1) { o = opt_standard (lim_use_must_malloc, &option, opts, &argc, argv, program_name, usage, version_string, arch_cmd_add_log_version_help, opt_help_msg, opt_long_help, opt_version); if (o == opt_none) break; switch (o) { default: safe_printfmt (2, "unhandled option `%s'\n", option->opt_string); panic ("internal error parsing arguments"); usage_error: opt_usage (2, argv[0], program_name, usage, 1); exit (1); /* bogus_arg: */ safe_printfmt (2, "ill-formed argument for `%s' (`%s')\n", option->opt_string, option->arg_string); goto usage_error; case opt_archive: { default_archive = str_save (0, option->arg_string); break; } case opt_dir: { dir = str_save (0, option->arg_string); break; } } } if (argc != 2) goto usage_error; { t_uchar * version_spec; t_uchar * tree_root = 0; t_uchar * archive = 0; t_uchar * version = 0; version_spec = argv[1]; if (default_archive) { if (!arch_valid_archive_name (default_archive)) { safe_printfmt (2, "%s: invalid archive name (%s)\n", argv[0], default_archive); exit (1); } } if (!arch_valid_package_name (version_spec, arch_maybe_archive, arch_req_version, 0)) { safe_printfmt (2, "%s: invalid version name (%s)\n", argv[0], version_spec); exit (1); } archive = arch_parse_package_name (arch_ret_archive, default_archive, version_spec); version = arch_parse_package_name (arch_ret_non_archive, 0, version_spec); tree_root = arch_tree_root (0, dir, 0); if (!tree_root) { safe_printfmt (2, "%s: not in project tree (%s)\n", argv[0], dir); exit (1); } arch_add_log_version (tree_root, archive, version); lim_free (0, tree_root); lim_free (0, archive); lim_free (0, version); } lim_free (0, default_archive); lim_free (0, dir); return 0; } /* tag: Tom Lord Mon May 12 20:00:50 2003 (add-log.c) */ tla-1.3.5+dfsg/src/tla/libarch/my.h0000644000175000017500000000336310457622000015507 0ustar useruser/* my.h: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__MY_H #define INCLUDE__LIBARCH__MY_H #include "tla/libawk/relational.h" enum arch_library_path_type { arch_library_path_search_only = 1, arch_library_path_add_only = 2, arch_library_path_search_order = 3, arch_library_path_add_order = 4, }; enum arch_library_edit_op { arch_library_first, arch_library_last, arch_library_remove }; /* automatically generated __STDC__ prototypes */ extern t_uchar * arch_my_arch_params (void); extern void arch_ensure_my_arch_params (void); extern t_uchar * arch_my_hook_script (void); extern t_uchar * arch_my_id_file (void); extern void arch_set_my_id (const t_uchar * id); extern t_uchar * arch_my_id (void); extern t_uchar * arch_my_id_uid (void); extern t_uchar * arch_my_default_archive (const t_uchar * default_archive); extern void arch_set_my_default_archive (const t_uchar * archive); extern void arch_delete_my_default_archive (void); extern t_uchar * arch_my_archive_locations_dir (void); extern rel_table arch_my_library_path (enum arch_library_path_type path_type); extern void arch_set_my_library_path (enum arch_library_path_type path_type, enum arch_library_edit_op op, const t_uchar * dir_spec); extern t_uchar * arch_my_util_path_file (void); extern t_uchar ** arch_my_util_path (void); extern t_uchar * arch_my_metadata_rules_file (void); extern int arch_my_allow_full_meta (void); #endif /* INCLUDE__LIBARCH__MY_H */ /* tag: Tom Lord Sat Jan 5 15:26:10 2002 (my.h) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-library-versions.h0000644000175000017500000000133210457622000021127 0ustar useruser/* cmd-library-versions.h: * **************************************************************** * Copyright (C) 2003 Tom Lord, Stig Brautaset * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__CMD_LIBRARY_VERSIONS_H #define INCLUDE__LIBARCH__CMD_LIBRARY_VERSIONS_H #include "hackerlab/machine/types.h" extern t_uchar arch_cmd_library_versions_help[]; /* automatically generated __STDC__ prototypes */ extern int arch_cmd_library_versions (t_uchar * program_name, int argc, char * argv[]); #endif /* INCLUDE__LIBARCH__CMD_LIBRARY_VERSIONS_H */ /* tag: Stig Brautaset Sat Jun 7 15:16:05 BST 2003 (cmd-library-versions.h) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-switch.c0000644000175000017500000002053410457622000017116 0ustar useruser/* cmd-switch.c * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "config-options.h" #include "hackerlab/cmd/main.h" #include "hackerlab/fs/file-names.h" #include "tla/libfsutils/rmrf.h" #include "tla/libarch/archive.h" #include "tla/libarch/chatter.h" #include "tla/libarch/inode-sig.h" #include "tla/libarch/local-cache.h" #include "tla/libarch/make-changeset.h" #include "tla/libarch/my.h" #include "tla/libarch/namespace.h" #include "tla/libarch/project-tree.h" #include "tla/libarch/proj-tree-lint.h" #include "tla/libarch/patch-logs.h" #include "tla/libarch/changeset-report.h" #include "tla/libarch/cmdutils.h" #include "tla/libarch/cmd.h" #include "tla/libarch/cmd-apply-delta.h" #include "tla/libarch/cmd-switch.h" /* gettext support not uet incorporated into tla, reserve the gettext notation for later */ #define _(x) (x) #define N_(x) (x) static t_uchar * usage = "[options] [package]"; static t_uchar * version_string = (cfg__std__package " from regexps.com\n" "\n" "Copyright 2003 Tom Lord\n" "\n" "This is free software; see the source for copying conditions.\n" "There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\n" "PARTICULAR PURPOSE.\n" "\n" "Report bugs to " cfg__tla_bug_mail ".\n" "\n" cfg__std__release_id_string "\n"); #define OPTS(OP) \ OP (opt_help_msg, "h", "help", 0, \ "Display a help message and exit.") \ OP (opt_long_help, "H", 0, 0, \ "Display a verbose help message and exit.") \ OP (opt_version, "V", "version", 0, \ "Display a release identifier string and exit.") \ OP (opt_archive, "A", "archive", 1, \ N_("Override `my-default-archive'.")) \ OP (opt_dir, "d", "dir DIR", 1, \ "Change to DIR first.") \ OP (opt_quiet, "q", "quiet", 0, \ "Suppress progress information") t_uchar arch_cmd_switch_help[] = ( "change the working trees version\n" "change the working trees version to that of package, and make\n" "equivalent to revision. Preserves uncommitted changes.\n" "\n" "Note: tla automatically switches to the _latest_ revision in the\n" "supplied version if no revision explicitly specified.\n"); enum options { OPTS (OPT_ENUM) }; static struct opt_desc opts[] = { OPTS (OPT_DESC) {-1, 0, 0, 0, 0} }; int arch_cmd_switch (t_uchar * program_name, int argc, char * argv[]) { int o; struct opt_parsed * option; t_uchar * dir = 0; t_uchar * default_archive = 0; int quiet = 0; dir = str_save (0, "."); safe_buffer_fd (1, 0, O_WRONLY, 0); option = 0; while (1) { if ((argc > 1) && !str_cmp ("--", argv[1])) break; o = opt_standard (lim_use_must_malloc, &option, opts, &argc, argv, program_name, usage, version_string, arch_cmd_switch_help, opt_help_msg, opt_long_help, opt_version); if (o == opt_none) break; switch (o) { default: safe_printfmt (2, "unhandled option `%s'\n", option->opt_string); panic ("internal error parsing arguments"); usage_error: opt_usage (2, argv[0], program_name, usage, 1); exit (1); /* bogus_arg: */ safe_printfmt (2, "ill-formed argument for `%s' (`%s')\n", option->opt_string, option->arg_string); goto usage_error; case opt_archive: { lim_free (0, default_archive); default_archive = str_save (0, option->arg_string); break; } case opt_dir: { lim_free (0, dir); dir = str_save (0, option->arg_string); break; } case opt_quiet: { quiet = 1; break; } } } { t_uchar * tree_root = 0; t_uchar * fqvsn = 0; t_uchar * rvsnspec = 0; t_uchar * archive = 0; t_uchar * revision = 0; t_uchar * log_file = 0; t_uchar * tree_arch = 0; t_uchar * latest_log = 0; t_uchar * version = 0; t_uchar * tree_revision = 0; t_uchar * current_spec = 0; t_uchar * tag_spec = 0; int commandline_rvsn = 0; int result; { t_uchar *arch = 0, *tag = 0; tag_spec = argv[1]; arch_separate_arch_name_from_fqrvsn(tag_spec, &arch, &tag); if (arch[0]) { if (default_archive) { safe_printfmt (2, "default archive specified multiple times! Operation aborts\n"); exit (2); } lim_free(0, default_archive); default_archive = arch; } lim_free(0, tag); } if (default_archive && !arch_valid_archive_name (default_archive)) { safe_printfmt (2, "%s: invalid archive name: %s\n", argv[0], default_archive); exit (2); } tree_root = arch_tree_root (0, dir, 0); if (!tree_root) { safe_printfmt (2, "%s: not in a project tree\n dir: %s\n", argv[0], dir); exit (2); } if (argc != 2) { safe_printfmt (2, "%s: sno target version or revision provided.\n", argv[0]); exit(2); } fqvsn = str_save (0, argv[1]); if (!fqvsn) { safe_printfmt (2, "%s: no tree-version set\n tree: %s\n", argv[0], tree_root); exit (2); } commandline_rvsn = arch_valid_package_name (fqvsn, arch_maybe_archive, arch_req_patch_level, 0); tree_arch = arch_parse_package_name (arch_ret_archive, 0, fqvsn); tree_revision = arch_parse_package_name (arch_ret_non_archive, 0, fqvsn); invariant (!!tree_arch); if (!arch_valid_package_name (tree_revision, arch_no_archive, arch_req_version, 0)) { rvsnspec = str_save (0, fqvsn); } else { struct arch_archive *arch = arch_archive_connect (tree_arch, 0); invariant (!!arch); latest_log = arch_archive_latest_revision(arch, tree_revision, 0); arch_archive_close (arch); if (!latest_log) { safe_printfmt (2, "%s: tree shows no revisions in version\n tree: %s\n version: %s\n", argv[0], tree_root, fqvsn); exit (2); } rvsnspec = str_alloc_cat_many (0, fqvsn, "--", latest_log, str_end); } lim_free (0, fqvsn); lim_free (0, tree_arch); lim_free (0, tree_revision); lim_free (0, latest_log); if (!arch_valid_package_name (rvsnspec, arch_maybe_archive, arch_req_patch_level, 0)) { safe_printfmt (2, "%s: illegal revision name: %s\n", argv[0], rvsnspec); exit (2); } archive = arch_parse_package_name (arch_ret_archive, default_archive, rvsnspec); revision = arch_parse_package_name (arch_ret_non_archive, 0, rvsnspec); version = arch_parse_package_name (arch_ret_package_version, 0, rvsnspec); if (commandline_rvsn) arch_check_revision_local (archive, revision); current_spec = arch_get_tree_fqrevision(tree_root); tree_arch = arch_parse_package_name (arch_ret_archive, default_archive, current_spec); tree_revision = arch_parse_package_name (arch_ret_non_archive, 0, current_spec); /*arch_tree_ensure_no_conflicts (tree);*/ /* remember that call_cmd never returns, so we have to set the * tree version now, before we move on to appylying the delta */ arch_set_tree_version (tree_root, archive, version); result = arch_call_cmd (arch_cmd_apply_delta, argv[0], "-A", tree_arch, "-d", tree_root, tree_revision, rvsnspec, NULL); lim_free (0, rvsnspec); lim_free (0, tree_root); lim_free (0, archive); lim_free (0, revision); lim_free (0, version); lim_free (0, tree_arch); lim_free (0, tree_revision); lim_free (0, current_spec); lim_free (0, dir); lim_free (0, default_archive); return result; } } /* tag: Tom Lord Fri May 23 14:06:15 2003 (cmd-switch.c) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-cat-log.c0000644000175000017500000001165610457622000017150 0ustar useruser/* cat-log.c * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "config-options.h" #include "hackerlab/cmd/main.h" #include "tla/libarch/namespace.h" #include "tla/libarch/project-tree.h" #include "tla/libarch/patch-logs.h" #include "tla/libarch/cmd.h" #include "tla/libarch/cmd-cat-log.h" #include "tla/libarch/cmdutils.h" static t_uchar * usage = "[options] revision-spec"; static t_uchar * version_string = (cfg__std__package " from regexps.com\n" "\n" "Copyright 2003 Tom Lord\n" "\n" "This is free software; see the source for copying conditions.\n" "There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\n" "PARTICULAR PURPOSE.\n" "\n" "Report bugs to " cfg__tla_bug_mail ".\n" "\n" cfg__std__release_id_string "\n"); #define OPTS(OP) \ OP (opt_help_msg, "h", "help", 0, \ "Display a help message and exit.") \ OP (opt_long_help, "H", 0, 0, \ "Display a verbose help message and exit.") \ OP (opt_version, "V", "version", 0, \ "Display a release identifier string\n" \ "and exit.") \ OP (opt_archive, "A", "archive", 1, \ "Override `my-default-archive'") \ OP (opt_dir, "d", "dir DIR", 1, \ "cd to DIR first") t_uchar arch_cmd_cat_log_help[] = ("print the contents of a project tree log entry\n" "Retrieve and print the patch log for the indicated\n" "revision from a project tree.\n"); enum options { OPTS (OPT_ENUM) }; static struct opt_desc opts[] = { OPTS (OPT_DESC) {-1, 0, 0, 0, 0} }; int arch_cmd_cat_log (t_uchar * program_name, int argc, char * argv[]) { int o; struct opt_parsed * option; t_uchar * default_archive = 0; char * dir = 0; default_archive = 0; dir = str_save (0, "."); safe_buffer_fd (1, 0, O_WRONLY, 0); option = 0; while (1) { o = opt_standard (lim_use_must_malloc, &option, opts, &argc, argv, program_name, usage, version_string, arch_cmd_cat_log_help, opt_help_msg, opt_long_help, opt_version); if (o == opt_none) break; switch (o) { default: safe_printfmt (2, "unhandled option `%s'\n", option->opt_string); panic ("internal error parsing arguments"); usage_error: opt_usage (2, argv[0], program_name, usage, 1); exit (1); /* bogus_arg: */ safe_printfmt (2, "ill-formed argument for `%s' (`%s')\n", option->opt_string, option->arg_string); goto usage_error; case opt_archive: { default_archive = str_save (0, option->arg_string); break; } case opt_dir: { dir = str_save (0, option->arg_string); break; } } } if (argc != 2) goto usage_error; { t_uchar * revision_spec; t_uchar * tree_root = 0; t_uchar * archive = 0; t_uchar * revision = 0; t_uchar * log_path = 0; if (default_archive) { if (!arch_valid_archive_name (default_archive)) { safe_printfmt (2, "%s: invalid archive name (%s)\n", argv[0], default_archive); exit (1); } } tree_root = arch_tree_root (0, dir, 0); if (!tree_root) { safe_printfmt (2, "%s: not in project tree (%s)\n", argv[0], dir); exit (1); } revision_spec = arch_fqrvsn_from_tree_and_input (argv[0], argv[1], tree_root); archive = arch_parse_package_name (arch_ret_archive, default_archive, revision_spec); revision = arch_parse_package_name (arch_ret_non_archive, 0, revision_spec); log_path = arch_log_file (tree_root, archive, revision); if (safe_access (log_path, F_OK)) { safe_printfmt (2, "%s: no log for revision (%s/%s)\n tree: %s\n", argv[0], archive, revision, tree_root); exit (1); } { int in_fd; char buf[8192]; long amt; in_fd = safe_open (log_path, O_RDONLY, 0); while (1) { amt = safe_read_retry (in_fd, buf, sizeof (buf)); if (!amt) break; safe_write_retry (1, buf, amt); } } lim_free (0, tree_root); lim_free (0, archive); lim_free (0, revision); lim_free (0, log_path); } lim_free (0, default_archive); lim_free (0, dir); return 0; } /* tag: Tom Lord Tue May 13 12:19:10 2003 (cat-log.c) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-id.h0000644000175000017500000000117510457622000016216 0ustar useruser/* cmd-id.h: * **************************************************************** * Copyright (C) 2003 Tom Lord, Stig Brautaset * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__CMD_ID_H #define INCLUDE__LIBARCH__CMD_ID_H #include "hackerlab/machine/types.h" extern t_uchar arch_cmd_id_help[]; /* automatically generated __STDC__ prototypes */ extern int arch_cmd_id (t_uchar * program_name, int argc, char * argv[]); #endif /* INCLUDE__LIBARCH__CMD_ID_H */ /* tag: Stig Brautaset Sat Jun 7 14:32:18 BST 2003 (cmd-inv-tag.h) */ tla-1.3.5+dfsg/src/tla/libarch/cmd.h0000644000175000017500000000131310457622000015616 0ustar useruser/* cmd.h: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__CMD_H #define INCLUDE__LIBARCH__CMD_H #include "hackerlab/machine/types.h" #include "tla/libarch/arch.h" typedef int (*arch_cmd_fn) (t_uchar * prog_name, int argc, char * argv[]); /* automatically generated __STDC__ prototypes */ extern int arch_call_cmd (arch_cmd_fn fn, t_uchar * prog_name, ...); /* must terminate list with (char*)0, NOT 0 or NULL ! */ #endif /* INCLUDE__LIBARCH__CMD_H */ /* tag: Tom Lord Sat Jan 5 15:26:10 2002 (cmd.h) */ tla-1.3.5+dfsg/src/tla/libarch/hooks.c0000644000175000017500000000707110457622000016200 0ustar useruser/* hooks.c: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/bugs/panic.h" #include "hackerlab/os/stdarg.h" #include "hackerlab/os/sys/types.h" #include "hackerlab/os/unistd.h" #include "hackerlab/os/sys/wait.h" #include "hackerlab/os/signal.h" #include "hackerlab/char/str.h" #include "hackerlab/fs/file-names.h" #include "hackerlab/arrays/ar.h" #include "hackerlab/vu/safe.h" #include "tla/libarch/my.h" #include "tla/libarch/hooks.h" extern char ** environ; int arch_run_hook (t_uchar * name, ...) { t_uchar * hook_script = 0; int exit_status = 0; hook_script = arch_my_hook_script (); if (hook_script) { va_list ap; t_uchar * hook_tail = 0; t_uchar ** argv = 0; t_uchar ** env = 0; int x; int pid; hook_tail = file_name_tail (0, hook_script); *(t_uchar **)ar_push ((void **)&argv, 0, sizeof (t_uchar *)) = str_save (0, hook_tail); *(t_uchar **)ar_push ((void **)&argv, 0, sizeof (t_uchar *)) = str_save (0, name); *(t_uchar **)ar_push ((void **)&argv, 0, sizeof (t_uchar *)) = 0; va_start (ap, name); while (1) { t_uchar * var; t_uchar * val; var = va_arg (ap, t_uchar *); if (!var) break; val = va_arg (ap, t_uchar *); invariant (!!val); *(t_uchar **)ar_push ((void **)&env, 0, sizeof (t_uchar *)) = str_alloc_cat_many (0, var, "=", val, str_end); } va_end (ap); for (x = 0; environ[x]; ++x) *(t_uchar **)ar_push ((void **)&env, 0, sizeof (t_uchar *)) = str_save (0, environ[x]); *(t_uchar **)ar_push ((void **)&env, 0, sizeof (t_uchar *)) = 0; pid = fork (); if (pid == -1) panic ("unable to fork for hook"); if (pid) { int status; int wait_pid; wait_pid = waitpid (pid, &status, 0); if (wait_pid < 0) { panic_msg ("error waiting for hook subprocess"); kill (0, SIGKILL); panic ("error waiting for hook subprocess"); } if (WIFSIGNALED (status)) { safe_printfmt (2, "\n"); safe_printfmt (2, "arch_run_hook: hook subprocess killed by signal %d\n", WTERMSIG (status)); safe_printfmt (2, "\n"); exit (2); return -1; } else if (!WIFEXITED (status)) { panic_msg ("waitpid returned for a non-exited hook process"); kill (0, SIGKILL); panic ("waitpid returned for a non-exited hook process and kill failed"); return -1; } else { exit_status = WEXITSTATUS (status); } } else { execve (hook_script, (char **)argv, (char **)env); panic ("invoke_tar_extract: execve for hook script returned to caller"); exit (2); } lim_free (0, hook_tail); for (x = 0; x < ar_size ((void *)argv, 0, sizeof (t_uchar *)); ++x) { lim_free (0, argv[x]); } ar_free ((void **)&argv, 0); for (x = 0; x < ar_size ((void *)env, 0, sizeof (t_uchar *)); ++x) { lim_free (0, env[x]); } ar_free ((void **)&env, 0); } lim_free (0, hook_script); return exit_status; } /* tag: Tom Lord Mon Jun 16 17:47:47 2003 (hooks.c) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-archive-fixup.c0000644000175000017500000000733210457622000020370 0ustar useruser/* archive-fixup.c * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "config-options.h" #include "hackerlab/cmd/main.h" #include "tla/libarch/namespace.h" #include "tla/libarch/project-tree.h" #include "tla/libarch/my.h" #include "tla/libarch/archive.h" #include "tla/libarch/cmd.h" #include "tla/libarch/cmd-archive-fixup.h" static t_uchar * usage = "[options]"; static t_uchar * version_string = (cfg__std__package " from regexps.com\n" "\n" "Copyright 2003 Tom Lord\n" "\n" "This is free software; see the source for copying conditions.\n" "There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\n" "PARTICULAR PURPOSE.\n" "\n" "Report bugs to " cfg__tla_bug_mail ".\n" "\n" cfg__std__release_id_string "\n"); #define OPTS(OP) \ OP (opt_help_msg, "h", "help", 0, \ "Display a help message and exit.") \ OP (opt_long_help, "H", 0, 0, \ "Display a verbose help message and exit.") \ OP (opt_version, "V", "version", 0, \ "Display a release identifier string\n" \ "and exit.") \ OP (opt_archive, "A", "archive", 1, \ "Override `my-default-archive'") t_uchar arch_cmd_archive_fixup_help[] = ("fix ancillary files in an archive\n" "This is a kind of \"catch-all\" command to fix the non-standard,\n" "non-transactional state of an archive. Currently its sole\n" "function is to repair .listing files in archives that use them.\n"); enum options { OPTS (OPT_ENUM) }; static struct opt_desc opts[] = { OPTS (OPT_DESC) {-1, 0, 0, 0, 0} }; int arch_cmd_archive_fixup (t_uchar *program_name, int argc, char * argv[]) { int o; struct opt_parsed * option; t_uchar * default_archive; default_archive = 0; safe_buffer_fd (1, 0, O_WRONLY, 0); option = 0; while (1) { o = opt_standard (lim_use_must_malloc, &option, opts, &argc, argv, program_name, usage, version_string, arch_cmd_archive_fixup_help, opt_help_msg, opt_long_help, opt_version); if (o == opt_none) break; switch (o) { default: safe_printfmt (2, "unhandled option `%s'\n", option->opt_string); panic ("internal error parsing arguments"); usage_error: opt_usage (2, argv[0], program_name, usage, 1); exit (1); /* bogus_arg: */ safe_printfmt (2, "ill-formed argument for `%s' (`%s')\n", option->opt_string, option->arg_string); goto usage_error; case opt_archive: { default_archive = str_save (0, option->arg_string); break; } } } if (argc != 1) goto usage_error; default_archive = arch_my_default_archive (default_archive); if (!arch_valid_archive_name (default_archive)) { safe_printfmt (2, "%s: invalid archive name (%s)\n", argv[0], default_archive); exit (1); } { struct arch_archive * arch = 0; arch = arch_archive_connect (default_archive, 0); arch_archive_repair_non_txnal (1, arch); arch_archive_close (arch); } return 0; } /* tag: Tom Lord Fri Jun 13 23:48:45 2003 (cmd-archive-fixup.c) */ tla-1.3.5+dfsg/src/tla/libarch/cmdutils.h0000644000175000017500000000416510457622000016707 0ustar useruser/* cmdutils.h: * **************************************************************** * Copyright (C) 2004 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__CMDUTILS_H #define INCLUDE__LIBARCH__CMDUTILS_H #include "tla/libarch/namespace.h" #include "tla/libarch/archive.h" /* automatically generated __STDC__ prototypes */ extern t_uchar * arch_fqrvsn_from_tree_and_input (t_uchar *cmd, t_uchar * string, t_uchar * dir); extern void arch_check_for (struct arch_archive * arch, enum arch_valid_package_name_types type, t_uchar * package); extern void arch_print_missing (struct arch_archive * arch, enum arch_valid_package_name_types type, enum arch_valid_package_name_types supplied_type, t_uchar * spec); extern void arch_check_library_for_revision (t_uchar * archive, t_uchar * revision); extern t_uchar * arch_determine_revision (struct arch_archive ** arch, t_uchar * default_archive, t_uchar * revision_spec, t_uchar * cmd_name); extern void arch_check_directory (t_uchar *path, int check_write); extern void arch_check_uri (t_uchar * uri); extern void arch_check_revision_local (t_uchar * archive, t_uchar * revision); extern int arch_check_arch (struct arch_archive * arch); extern t_uchar * str_replace (t_uchar *current, t_uchar *replacement); extern int arch_separate_arch_name_from_fqrvsn(const t_uchar *name, t_uchar **archive, t_uchar **fqrvsn); extern t_uchar * arch_interpret_delta_path (t_uchar ** arch, t_uchar ** rev, t_uchar * scratch_dir, t_uchar * default_archive, t_uchar * spec, t_uchar * cache_dir); #endif /* INCLUDE__LIBARCH__CMDUTILS_H */ /* tag: Tom Lord Fri Jan 9 20:27:20 2004 (cmdutils.h) */ tla-1.3.5+dfsg/src/tla/libarch/inv-ids.c0000644000175000017500000013601310457622000016425 0ustar useruser/* inv-ids.c: * **************************************************************** * Copyright (C) 2002, 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/bugs/panic.h" #include "hackerlab/os/errno.h" #include "hackerlab/os/errno-to-string.h" #include "hackerlab/os/time.h" #include "hackerlab/os/sys/types.h" #include "hackerlab/os/unistd.h" #include "hackerlab/mem/mem.h" #include "hackerlab/char/char-class.h" #include "hackerlab/char/str.h" #include "hackerlab/fmt/cvt.h" #include "hackerlab/fs/file-names.h" #include "hackerlab/vu/safe.h" #include "tla/libfsutils/ensure-dir.h" #include "tla/libarch/my.h" #include "tla/libarch/project-tree.h" #include "tla/libarch/patch-logs.h" #include "tla/libarch/invent.h" #include "tla/libarch/inode-sig.h" #include "tla/libarch/inv-ids.h" enum ftag_method { ftag_names, ftag_implicit, ftag_tagline, ftag_explicit }; /* __STDC__ prototypes for static functions */ static t_uchar * file_id (int * errn, struct alloc_limits * limits, enum ftag_method method, int untagged_is_source, const t_uchar * path, assoc_table id_tagging_shortcut, struct stat * known_lstat, assoc_table * explicit_skips); static int is_at_or_underneath_archdir (const char * rel_file); static int filename_matches (regex_t * pattern, const char * filename); static t_uchar * explicit_id (int * errn, assoc_table * skips, struct alloc_limits * limits, const t_uchar * arg_file, const t_uchar * id_file, const t_uchar * prefix, const t_uchar * postfix); static t_uchar * implicit_id (int * errn, struct alloc_limits * limits, const t_uchar * file, const t_uchar * basename, const t_uchar * prefix, struct stat * statb, assoc_table id_tagging_shortcut); static long smash_non_graphical (t_uchar * buf, long amt); t_uchar * arch_log_file_id (const t_uchar * archive, const t_uchar * revision) { t_uchar * log_file_path = 0; t_uchar * answer = 0; log_file_path = arch_log_file (".", archive, revision); answer = str_alloc_cat (0, "A_", log_file_path); lim_free (0, log_file_path); return answer; } assoc_table arch_filenames_ids (rel_table * file_list, const t_uchar * tree_root) { struct arch_inventory_options options = {0, }; int i = 0; int file_size = rel_n_records (* file_list); assoc_table id_list = 0; options.categories = arch_inventory_source; options.want_ids = 1; options.include_excluded = 1; arch_get_inventory_naming_conventions (&options, tree_root); for (i = 0; i != file_size; ++ i) { t_uchar * id = arch_inventory_id (options.method, 0, rel_peek_str (*file_list, i, 0), 0, 0, 0); assoc_set_taking (&id_list, rel_make_field_str (id), rel_get_field (*file_list, i, 0)); lim_free (0, id); } arch_free_inventory_naming_conventions (&options); return id_list; } t_uchar * arch_inventory_id (enum arch_id_tagging_method method, int untagged_is_source, const t_uchar * path, assoc_table id_tagging_shortcut, struct stat * known_lstat, assoc_table * explicit_skips) { int errn; t_uchar * answer; enum ftag_method m; if (method == arch_unspecified_id_tagging) { t_uchar * dir = 0; t_uchar * root = 0; dir = file_name_directory_file (0, path); root = arch_tree_root (0, dir, 0); if (!root) { method = arch_names_id_tagging; untagged_is_source = 1; } else { enum arch_inventory_category untagged_category; method = arch_tree_id_tagging_method (&untagged_category, root, 0); untagged_is_source = (untagged_category == arch_inventory_source); } lim_free (0, dir); lim_free (0, root); } switch (method) { default: panic ("unrecognized method in arch_inventory_id"); break; case arch_names_id_tagging: { m = ftag_names; break; } case arch_explicit_id_tagging: { m = ftag_explicit; break; } case arch_implicit_id_tagging: { m = ftag_implicit; break; } case arch_tagline_id_tagging: { m = ftag_tagline; break; } } errn = 0; answer = file_id (&errn, 0, m, untagged_is_source, path, id_tagging_shortcut, known_lstat, explicit_skips); if (!answer && errn) { safe_printfmt (2, "error finding file id (%d: %s)\n path: %s\n", errn, errno_to_string(errn), path); panic ("arch_inventory_id"); } return answer; } t_uchar * arch_id_tagging_method_name (enum arch_id_tagging_method m) { switch (m) { default: panic ("unknown id tagging method (arch_id_tagging_method_name)"); return 0; /* not reached */ case arch_names_id_tagging: return str_save (0, "names"); case arch_implicit_id_tagging: return str_save (0, "implicit"); case arch_tagline_id_tagging: return str_save (0, "tagline"); case arch_explicit_id_tagging: return str_save (0, "explicit"); } } enum arch_id_tagging_method arch_id_tagging_method_from_name (const t_uchar * name) { if (!str_casecmp (name, "explicit")) return arch_explicit_id_tagging; else if (!str_casecmp (name, "implicit")) return arch_implicit_id_tagging; else if (!str_casecmp (name, "tagline")) return arch_tagline_id_tagging; else if (!str_casecmp (name, "names")) return arch_names_id_tagging; else { safe_printfmt (2, "no such id tagging method (%s)\n", name); exit (2); return arch_names_id_tagging; /* notreached */ } } t_uchar * arch_default_id_tagging_method_contents (enum arch_id_tagging_method method) { t_uchar * method_name = 0; t_uchar * excludes_regexp = 0; t_uchar * junk_regexp = 0; t_uchar * backup_regexp = 0; t_uchar * precious_regexp = 0; t_uchar * unrecognized_regexp = 0; t_uchar * source_regexp = 0; t_uchar * answer = 0; if (method == arch_unspecified_id_tagging) method = arch_tagline_id_tagging; method_name = arch_id_tagging_method_name (method); excludes_regexp = arch_default_naming_conventions_regexp (arch_inventory_excludes); backup_regexp = arch_default_naming_conventions_regexp (arch_inventory_backup); junk_regexp = arch_default_naming_conventions_regexp (arch_inventory_junk); precious_regexp = arch_default_naming_conventions_regexp (arch_inventory_precious); unrecognized_regexp = arch_default_naming_conventions_regexp (arch_inventory_unrecognized); source_regexp = arch_default_naming_conventions_regexp (arch_inventory_source); answer = str_alloc_cat_many (0, ("# id tagging method\n" "#\n" "# This determines how \"inventory ids\", strings conveying\n" "# logical file identity, are computed for each file, directory\n" "# and symbolic link.\n" "#\n" "# The choices are:\n" "#\n" "# tagline: inventory ids may be set using add-id, or omitted\n" "# (though tree-lint warns about omitted ids), or in\n" "# text files, set in a comment line near the top or\n" "# bottom of the file of a form like \" arch-tag: \".\n" "# Renames of files with no id are treated as a combined\n" "# add and delete (e.g., local changes can be lost).\n" "#\n" "# explicit: ids must be set using add-id. Files passing the naming\n" "# conventions for source, but lacking add-id ids, are treated\n" "# as unrecognized files (see below).\n" "#\n" "# names: ids are not used. All renames are treated as add+delete\n" "#\n" "# implicit: similar to tagline, but in addition, the id comment\n" "# may be of the form \" - \", where\n" "# is the basename of the file. This method\n" "# is not recommended, but is retained for backwards\n" "# compatibility.\n" "#\n" "\n"), ("explicit\n" "\n"), ("# disposition of untagged source files\n" "#\n" "# (NOTE: this option must follow the tagline/explicit/names/implicit\n" "# directive.)\n" "#\n" "# By default, the explicit method treats untagged files matching the naming\n" "# conventions for source files as unrecognized and the implicit and tagline\n" "# methods treat such untagged files as source.\n" "#\n" "# You can override those default treatments of untagged files by specifying\n" "# which inventory category (see below) should be used for files whose names\n" "# suggest they are source but which lack ids.\n" "#\n" "# This feature may be especially convenient when importing sources that do\n" "# not use file naming conventions that can be conveniently described with\n" "# the regexps below.\n" "#\n" "# Uncomment one of these lines as appropriate to override the default:\n" "#\n" "# untagged-source source\n" "untagged-source precious\n" "# untagged-source backup\n" "# untagged-source junk\n" "# untagged-source unrecognized\n" "#\n" "\n"), ("# naming convention regexps\n" "#\n" "# For various commands, arch traverses your project trees, categorizing\n" "# the files found there. For example, when importing a project for\n" "# the first time, this traversal determines which files are included\n" "# in the import.\n" "#\n" "# The categories of greatest importance are defined in terms of three\n" "# questions:\n" "#\n" "# 1) If arch makes a local copy of this tree, should this file be included\n" "# in the copy?\n" "#\n" "# 2) Is it generally safe to remove this file based only on how it is named?\n" "# For example, can it be safely clobbered by a new file of the same name?\n" "#\n" "# 3) Should this file be archived along with the project? For example,\n" "# should it be included when importing the project for the first time?\n" "#\n" "# The primary categories are:\n" "#\n" "# category: copy locally? safe to clobber? archive?\n" "#\n" "# junk no yes no\n" "# backup no no no\n" "# precious yes no no\n" "# source yes no yes\n" "#\n" "# There are two additional categories, unrelated to those questions:\n" "#\n" "# excluded -- during a traversal by inventory, this file (and,\n" "# if a directory, its contents) are simply ignored unless the\n" "# --all flag is specified. This category is usually used to\n" "# omit arch's own control files from a listing.\n" "#\n" "# unrecognized -- a category for files whose name fits no other pattern.\n" "# Usually, the presence of unrecognized files is treated as an\n" "# error. You can use the naming conventions to define certain\n" "# names as \"deliberately unrecognized\" -- i.e., filenames whose\n" "# presence in a source tree you _want_ to be treated as an error\n" "#\n" "# The traveral algorithm is described here, along with lines you can edit to\n" "# customize the naming conventions.\n" "#\n" "# Starting at \".\" within a project tree (usually at the root of the\n" "# project tree) consider each filename in that directory.\n" "#\n" "# The files \".\" and \"..\" are simply ignored.\n" "#\n" "# Files containing \"illegal characters\" are characterized as unrecognized.\n" "# If they are directories, traversal does _not_ descend into those directories.\n" "# Currently, the illegal characters are *, ?, [, ], \\, space, and tab.\n" "# (The set of illegal characters may shrink in future releases.)\n" "#\n" "# In an interactive call to inventory _without_ the --all flag,\n" "# names are next compared to the exclude regexp defined here. Those that\n" "# are ignored and not descended below. (Most arch operations performing\n" "# traversals internally, e.g. import, do not use this pattern\n" "# and skip this step of the algorithm.\n" "#\n"), "\n", "exclude ", excludes_regexp, "\n", "\n", ("# If the file has a name that begins with \"++\", it is categorized as\n" "# _precious_. Names of this form are hard-wired and reserved for use by arch\n" "# itself. Traversal does not descend into precious directories, but when a\n" "# precious directory is copied, its contents are recursively copied.\n" "#\n" "# Files and directories that reach this stage and which arch recognizes as its\n" "# own control files are classified at this step as source. Traversal _does_\n" "# descend into source directories.\n" "#\n" "# If the file has a name that begins with \",,\", it is categorized as _junk_.\n" "# Names of this form are hard-wired and reserved for use by arch and other tools,\n" "# and arch may clobber such files without warning. In a project tree, when no \n" "# arch commands are running, it is safe for users to delete any \",,\" files. \n" "# Although the general rule for junk files is that arch is free to clobber them,\n" "# in fact, arch will only ever clobber files starting with \",,\".\n" "#\n" "# Traversal does not descend into junk directories.\n" "#\n" "# For your convenience, at this step of the traversal, you can classify\n" "# additional files as junk or precious:\n" "#\n"), "\n", "junk ", junk_regexp, "\n", "\n", "precious ", precious_regexp, "\n", "\n", ("# Files matching the following regexp are classified as backup files, and\n" "# traversal does not descend into backup directories:\n" "#\n"), "\n", "backup ", backup_regexp, "\n", "\n", ("# If you want to force certain filenames to be treated as errors when present,\n" "# you can add them to the regexp for deliberately unrecognized files. Traversal\n" "# does not descend into unrecognized directories.\n"), "\n", "unrecognized ", unrecognized_regexp, "\n", "\n", ("# Files which match the following pattern are treated as source files.\n" "# Traversal _does_ descend into source directories:\n"), "\n", "source ", source_regexp, "\n", "\n", ("# Any files not classified by the above rules are classified as unrecognized.\n" "# Traversal does not descend into unrecognized directories.\n" "\n"), str_end); lim_free (0, method_name); lim_free (0, excludes_regexp); lim_free (0, junk_regexp); lim_free (0, backup_regexp); lim_free (0, precious_regexp); lim_free (0, unrecognized_regexp); lim_free (0, source_regexp); return answer; } t_uchar * arch_tree_id_tagging_method_file (const t_uchar * tree_root) { t_uchar * ctl_dir; t_uchar * answer; ctl_dir = arch_tree_ctl_dir (tree_root); answer = file_name_in_vicinity (0, ctl_dir, "=tagging-method"); lim_free (0, ctl_dir); return answer; } enum arch_id_tagging_method arch_tree_id_tagging_method (enum arch_inventory_category * cat_var, const t_uchar * tree_root, int strict) { struct arch_inventory_options options; enum arch_id_tagging_method answer; mem_set0 ((t_uchar *)&options, sizeof (options)); arch_get_inventory_naming_conventions (&options, tree_root); if (cat_var) { *cat_var = options.untagged_source_category; } answer = options.method; arch_free_inventory_naming_conventions (&options); return answer; } void arch_set_tree_id_tagging_method (const t_uchar * tree_root, enum arch_id_tagging_method method) { int errn; t_uchar * method_name; t_uchar * method_file; t_uchar * method_dir; t_uchar * method_tmp; int out_fd; method_name = arch_id_tagging_method_name (method); method_file = arch_tree_id_tagging_method_file (tree_root); method_dir = file_name_directory_file (0, method_file); method_tmp = file_name_in_vicinity (0, method_dir, ",,tagging-method"); vu_unlink (&errn, method_tmp); out_fd = safe_open (method_tmp, O_WRONLY | O_CREAT | O_EXCL, 0666); if (safe_access (method_file, F_OK)) { safe_printfmt (out_fd, "%s\n", method_name); } else { int in_fd; t_uchar * line; long len; int emitted_method; in_fd = safe_open (method_file, O_RDONLY, 0); emitted_method = 0; while (1) { t_uchar * pos; t_uchar * lim; int line_maybe_specifies_method; enum arch_id_tagging_method maybe_method; int replace_with_method_name; safe_next_line (&line, &len, in_fd); if (!line) break; lim = line + len; pos = line; line_maybe_specifies_method = 0; replace_with_method_name = 0; while ((pos < lim) && char_is_blank (*pos)) ++pos; if (((lim - pos) >= (sizeof ("names") - 1)) && !str_casecmp_n ("names", sizeof ("names") - 1, pos, sizeof ("names") - 1)) { line_maybe_specifies_method = 1; maybe_method = arch_names_id_tagging; pos += sizeof ("names") - 1; } else if (((lim - pos) >= (sizeof ("explicit") - 1)) && !str_casecmp_n ("explicit", sizeof ("explicit") - 1, pos, sizeof ("explicit") - 1)) { line_maybe_specifies_method = 1; maybe_method = arch_explicit_id_tagging; pos += sizeof ("explicit") - 1; } else if (((lim - pos) >= (sizeof ("implicit") - 1)) && !str_casecmp_n ("implicit", sizeof ("implicit") - 1, pos, sizeof ("implicit") - 1)) { line_maybe_specifies_method = 1; maybe_method = arch_implicit_id_tagging; pos += sizeof ("implicit") - 1; } else if (((lim - pos) >= (sizeof ("tagline") - 1)) && !str_casecmp_n ("tagline", sizeof ("tagline") - 1, pos, sizeof ("tagline") - 1)) { line_maybe_specifies_method = 1; maybe_method = arch_tagline_id_tagging; pos += sizeof ("tagline") - 1; } if (line_maybe_specifies_method) { while ((pos < lim) && char_is_space (*pos)) ++pos; if (pos == lim) replace_with_method_name = 1; } if (replace_with_method_name) { safe_printfmt (out_fd, "%s\n", method_name); emitted_method = 1; } else { safe_printfmt (out_fd, "%.*s", (int)len, line); if (len && (line[len - 1] != '\n')) safe_printfmt (out_fd, "\n"); } } if (!emitted_method) safe_printfmt (out_fd, "%s\n", method_name); safe_close (in_fd); } safe_close (out_fd); safe_rename (method_tmp, method_file); lim_free (0, method_name); lim_free (0, method_file); lim_free (0, method_dir); lim_free (0, method_tmp); } t_uchar * arch_explicit_id_file_for (const t_uchar * path) { int errn; struct stat stat_buf; int is_file; t_uchar * parent_dir; t_uchar * dot_arch_dir; t_uchar * id_file_basename; t_uchar * id_file_path; if (vu_lstat (&errn, path, &stat_buf)) { if (errn != ENOENT) { safe_printfmt (2, "i/o error (%d: %s) for vu_lstat of %s\n", errn, errno_to_string (errn), path); exit (2); } is_file = 1; } else { is_file = !S_ISDIR (stat_buf.st_mode); } if (is_file) parent_dir = file_name_directory_file (0, path); else parent_dir = str_save (0, path); dot_arch_dir = file_name_in_vicinity (0, parent_dir, ".arch-ids"); if (is_file) { id_file_basename = file_name_tail (0, path); id_file_basename = str_realloc_cat (0, id_file_basename, ".id"); } else id_file_basename = str_save (0, "=id"); id_file_path = file_name_in_vicinity (0, dot_arch_dir, id_file_basename); lim_free (0, parent_dir); lim_free (0, dot_arch_dir); lim_free (0, id_file_basename); return id_file_path; } t_uchar * arch_generate_id (void) { static unsigned long seq = 0; time_t now; char * now_str; t_uchar * nl; t_uchar * my_id; pid_t my_pid; t_uchar my_pid_str[128]; t_uchar seq_str[128]; t_uchar * id; if (0 > time (&now)) panic ("unable to get time of day in arch_generate_id"); now_str = ctime (&now); nl = str_chr_index (now_str, '\n'); if (nl) *nl = 0; my_id = arch_my_id (); my_pid = getpid (); cvt_ulong_to_decimal (my_pid_str, (unsigned long)my_pid); cvt_ulong_to_decimal (seq_str, (unsigned long)seq); ++seq; id = str_alloc_cat_many (0, my_id, " ", now_str, " ", my_pid_str, ".", seq_str, str_end); lim_free (0, my_id); return id; } int arch_add_explicit_id (const t_uchar * path, const t_uchar * id) { t_uchar * id_file; t_uchar * id_dir; int out_fd; int r = 1; id_file = arch_explicit_id_file_for (path); if (!safe_access (id_file, F_OK)) { safe_printfmt (2, "attempt to id already tagged file: %s\n", path); r = 0; } else { id_dir = file_name_directory_file (0, id_file); ensure_directory_exists (id_dir); out_fd = safe_open (id_file, O_WRONLY | O_CREAT | O_EXCL, 0666); safe_printfmt (out_fd, "%s\n", id); safe_close (out_fd); lim_free (0, id_dir); } lim_free (0, id_file); return r; } void arch_delete_explicit_id (const t_uchar * path) { t_uchar * id_file; id_file = arch_explicit_id_file_for (path); if (!safe_access (id_file, F_OK)) safe_unlink (id_file); else { safe_printfmt (2, "attempt to remove non-existent id for %s\n", path); exit (2); } lim_free (0, id_file); } void arch_move_explicit_id (const t_uchar * from, const t_uchar * to) { t_uchar * old_id_file; t_uchar * new_id_file; t_uchar * new_id_dir; old_id_file = arch_explicit_id_file_for (from); new_id_file = arch_explicit_id_file_for (to); new_id_dir = file_name_directory_file (0, new_id_file); ensure_directory_exists (new_id_dir); safe_rename (old_id_file, new_id_file); lim_free (0, old_id_file); lim_free (0, new_id_file); lim_free (0, new_id_dir); } t_uchar * arch_strong_explicit_dflt_file (const t_uchar * dir) { t_uchar * dot_arch_dir; t_uchar * answer; dot_arch_dir = file_name_in_vicinity (0, dir, ".arch-ids"); answer = file_name_in_vicinity (0, dot_arch_dir, "=all"); lim_free (0, dot_arch_dir); return answer; } t_uchar * arch_weak_explicit_dflt_file (const t_uchar * dir) { t_uchar * dot_arch_dir; t_uchar * answer; dot_arch_dir = file_name_in_vicinity (0, dir, ".arch-ids"); answer = file_name_in_vicinity (0, dot_arch_dir, "=default"); lim_free (0, dot_arch_dir); return answer; } t_uchar * arch_dont_care_explicit_dflt_file (const t_uchar * dir) { t_uchar * dot_arch_dir; t_uchar * answer; dot_arch_dir = file_name_in_vicinity (0, dir, ".arch-ids"); answer = file_name_in_vicinity (0, dot_arch_dir, "=dont-care"); lim_free (0, dot_arch_dir); return answer; } int arch_is_dont_care_explicit_dflt_dir (const t_uchar * dir) { t_uchar * file = 0; int answer; file = arch_dont_care_explicit_dflt_file (dir); answer = !safe_access (file, F_OK); lim_free (0, file); return answer; } void arch_delete_strong_explicit_default (const t_uchar * dir) { t_uchar * file; file = arch_strong_explicit_dflt_file (dir); if (safe_access (file, F_OK)) { safe_printfmt (2, "attempt to delete non-existing strong explicit default in %s\n", dir); exit (2); } safe_unlink (dir); lim_free (0, file); } void arch_delete_weak_explicit_default (const t_uchar * dir) { t_uchar * file; file = arch_weak_explicit_dflt_file (dir); if (safe_access (file, F_OK)) { safe_printfmt (2, "attempt to delete non-existing weak explicit default in %s\n", dir); exit (2); } safe_unlink (dir); lim_free (0, file); } void arch_delete_dont_care_explicit_default (const t_uchar * dir) { t_uchar * file; file = arch_dont_care_explicit_dflt_file (dir); if (safe_access (file, F_OK)) { safe_printfmt (2, "attempt to delete non-existing dont-care explicit default in %s\n", dir); exit (2); } safe_unlink (dir); lim_free (0, file); } void arch_set_strong_explicit_default (const t_uchar * dir, const t_uchar * id) { t_uchar * file; t_uchar * file_dir; int out_fd; file = arch_strong_explicit_dflt_file (dir); file_dir = file_name_directory_file (0, file); if (!safe_access (file, F_OK)) { safe_printfmt (2, "attempt to overwrite strong explicit default in %s\n", dir); exit (2); } ensure_directory_exists (file_dir); out_fd = safe_open (file, O_WRONLY | O_CREAT | O_EXCL, 0666); safe_printfmt (out_fd, "%s\n", id); safe_close (out_fd); lim_free (0, file); lim_free (0, file_dir); } void arch_set_weak_explicit_default (const t_uchar * dir, const t_uchar * id) { t_uchar * file; t_uchar * file_dir; int out_fd; file = arch_weak_explicit_dflt_file (dir); file_dir = file_name_directory_file (0, file); if (!safe_access (file, F_OK)) { safe_printfmt (2, "attempt to overwrite weak explicit default in %s\n", dir); exit (2); } ensure_directory_exists (file_dir); out_fd = safe_open (file, O_WRONLY | O_CREAT | O_EXCL, 0666); safe_printfmt (out_fd, "%s\n", id); safe_close (out_fd); lim_free (0, file); lim_free (0, file_dir); } void arch_set_dont_care_explicit_default (const t_uchar * dir) { t_uchar * file; t_uchar * file_dir; int out_fd; file = arch_dont_care_explicit_dflt_file (dir); file_dir = file_name_directory_file (0, file); if (safe_access (file, F_OK)) { ensure_directory_exists (file_dir); out_fd = safe_open (file, O_WRONLY | O_CREAT | O_EXCL, 0666); safe_close (out_fd); } lim_free (0, file); lim_free (0, file_dir); } /*(c file_id) * static t_uchar * file_id (int * errn, * struct alloc_limits * limits, * enum ftag_method method, * const t_uchar * path, * assoc_table id_tagging_shortcut, * struct stat * known_lstat, * assoc_table * explicit_skips) * * Return a newly allocated string containing the inventory id * of the file `path' using inventory method `method'. * * Return 0 and set `*errn' if the id can not be computed. * If no I/O error occurs, the file does not have an explicit * id, but `method' is `ftag_explicit', `*errn' is set to 0. */ static t_uchar * file_id (int * errn, struct alloc_limits * limits, enum ftag_method method, int untagged_is_source, const t_uchar * path, assoc_table id_tagging_shortcut, struct stat * known_lstat, assoc_table * explicit_skips) { t_uchar * answer = 0; t_uchar * as_file = 0; t_uchar * basename = 0; t_uchar * dir = 0; t_uchar * dir_as_file = 0; t_uchar * dir_basename = 0; t_uchar * id_file = 0; struct stat stat_buf; int is_dir; int is_symlink; if (!path) { *errn = EINVAL; return_answer: lim_free (limits, as_file); lim_free (limits, basename); lim_free (limits, dir); lim_free (limits, dir_as_file); lim_free (limits, dir_basename); lim_free (limits, id_file); return answer; } as_file = file_name_from_directory (limits, path); if (!as_file) { enomem_error: *errn = ENOMEM; goto return_answer; } if (method == ftag_names) { answer = str_alloc_cat (limits, "?", as_file); if (!answer) goto enomem_error; else goto return_answer; } basename = file_name_tail (limits, as_file); dir = file_name_directory (limits, as_file); if (!dir) dir = str_save (limits, "."); if (!(basename && dir)) goto enomem_error; dir_as_file = file_name_from_directory (limits, dir); if (!dir_as_file) goto enomem_error; dir_basename = file_name_tail (limits, dir_as_file); if (!dir_basename) goto enomem_error; /* Explicit id files use their contents as id, with the * prefix 'E'. */ if (!str_cmp (dir_basename, ".arch-ids")) { answer = explicit_id (errn, 0, limits, path, as_file, "E_", 0); goto return_answer; } /* Explicit id file directories: */ if (!str_cmp (basename, ".arch-ids")) { long amt; answer = str_alloc_cat (limits, "D_", as_file); if (!answer) goto enomem_error; amt = smash_non_graphical (answer, str_length (answer)); answer[amt] = 0; goto return_answer; } /* Paths beginning with "./{arch}" are tagged with their own * path name, with the prefix "A_". The presumptions are that these * files never move, and that if a file is present, its contents are * invariant. */ if (is_at_or_underneath_archdir (as_file)) { long amt; answer = str_alloc_cat (limits, "A_", as_file); if (!answer) goto enomem_error; amt = smash_non_graphical (answer, str_length (answer)); answer[amt] = 0; goto return_answer; } /* Try for an explicit id: */ if (known_lstat) stat_buf = *known_lstat; else if (0 > vu_lstat (errn, as_file, &stat_buf)) goto return_answer; if (S_ISDIR (stat_buf.st_mode)) { is_dir = 1; is_symlink = 0; id_file = file_name_in_vicinity (limits, as_file, ".arch-ids/=id"); if (!id_file) goto enomem_error; } else { is_dir = 0; is_symlink = S_ISLNK (stat_buf.st_mode); id_file = file_name_in_vicinity (limits, dir, ".arch-ids/"); if (!id_file) goto enomem_error; id_file = str_realloc_cat (limits, id_file, basename); if (!id_file) goto enomem_error; id_file = str_realloc_cat (limits, id_file, ".id"); if (!id_file) goto enomem_error; } *errn = 0; answer = explicit_id (errn, 0, limits, path, id_file, "x_", 0); if (answer || (*errn != ENOENT)) goto return_answer; else { /* Is there a .arch-ids/=all file here? */ lim_free (limits, id_file); if (is_dir) id_file = file_name_in_vicinity (limits, as_file, ".arch-ids/=all"); else id_file = file_name_in_vicinity (limits, dir, ".arch-ids/=all"); if (!id_file) goto enomem_error; *errn = 0; answer = explicit_id (errn, explicit_skips, limits, path, id_file, "a_", (is_dir ? (t_uchar *)"./." : basename)); if (answer || (*errn != ENOENT)) goto return_answer; if ((method == ftag_implicit) && !is_dir && !is_symlink) { *errn = 0; answer = implicit_id (errn, limits, path, basename, "i_", &stat_buf, id_tagging_shortcut); if (answer || *errn) goto return_answer; } if ((method == ftag_tagline) && !is_dir && !is_symlink) { *errn = 0; answer = implicit_id (errn, limits, path, 0, "i_", &stat_buf, id_tagging_shortcut); if (answer || *errn) goto return_answer; } /* is there an "=default" id? */ lim_free (limits, id_file); if (is_dir) id_file = file_name_in_vicinity (limits, as_file, ".arch-ids/=default"); else id_file = file_name_in_vicinity (limits, dir, ".arch-ids/=default"); if (!id_file) goto enomem_error; *errn = 0; answer = explicit_id (errn, explicit_skips, limits, path, id_file, "w_", (is_dir ? (t_uchar *)"./." : basename)); if (answer || (*errn != ENOENT)) goto return_answer; /* no explicit, =all, implicit, tagline, or =default id. */ if (untagged_is_source) { int skipped; lim_free (limits, id_file); id_file = file_name_in_vicinity (limits, dir, ".arch-ids/=dont-care"); if (!id_file) goto enomem_error; skipped = (explicit_skips && !!assoc_get_str_taking (*explicit_skips, rel_make_field_str (id_file))); if (!skipped && (0 <= vu_lstat (errn, id_file, &stat_buf))) { long amt; answer = str_alloc_cat (limits, "k_", as_file); if (!answer) goto enomem_error; amt = smash_non_graphical (answer, str_length (answer)); answer[amt] = 0; goto return_answer; } if (!skipped && explicit_skips) assoc_set_taking (explicit_skips, rel_make_field_str (id_file), rel_make_field_str ("yes")); if (*errn == ENOENT) { long amt; answer = str_alloc_cat (limits, "?_", as_file); if (!answer) goto enomem_error; amt = smash_non_graphical (answer, str_length (answer)); answer[amt] = 0; goto return_answer; } else goto return_answer; } else { *errn = 0; goto return_answer; } } } t_uchar * arch_id_from_explicit_file (int *errn, const t_uchar * path) { return explicit_id (errn, 0, 0, 0, path, "x_", 0); } static int is_at_or_underneath_archdir (const char * rel_file) { static int compiled = 0; static regex_t pattern = {0,}; if (!compiled) { int re_error; re_error = regcomp (&pattern, "^(.*/)?(\\{arch\\}(/[a-zA-Z=][^/~]*)*|\\{arch\\}/\\.arch-project-tree)$", REG_EXTENDED); invariant (!re_error); compiled = 1; } return filename_matches (&pattern, rel_file); } static int filename_matches (regex_t * pattern, const char * filename) { int answer; answer = regexec (pattern, filename, 0, 0, 0); if (answer == REG_NOMATCH) return 0; if (answer == REG_NOERROR) return 1; panic ("unexpected regexec error in arch_inventory_traversal"); return -1; } static t_uchar * explicit_id (int * errn, assoc_table * skips, struct alloc_limits * limits, const t_uchar * arg_file, const t_uchar * id_file, const t_uchar * prefix, const t_uchar * postfix) { int id_fd; t_uchar * answer; char buf[1024]; long amt; int ign; if (skips && assoc_get_str_taking (*skips, rel_make_field_str (id_file))) { *errn = ENOENT; return 0; } id_fd = vu_open (errn, id_file, O_RDONLY, 0); if (id_fd < 0) { if (skips) assoc_set_taking (skips, rel_make_field_str (id_file), rel_make_field_str ("yes")); return 0; } answer = str_save (limits, prefix); if (!answer) { enomem_error: *errn = ENOMEM; if (answer) lim_free (limits, answer); return 0; } while (1) { t_uchar * eol; amt = vu_read_retry (errn, id_fd, buf, sizeof (buf)); if (amt < 0) { lim_free (limits, answer); vu_close (&ign, id_fd); return 0; } if (!amt) break; eol = str_chr_index_n (buf, amt, '\n'); if (!eol) { t_uchar * old_answer; amt = smash_non_graphical (buf, amt); old_answer = answer; answer = str_realloc_cat_n (limits, answer, buf, amt); if (!answer) goto enomem_error; } else { t_uchar * old_answer; amt = eol - (t_uchar *)buf; amt = smash_non_graphical (buf, amt); old_answer = answer; answer = str_realloc_cat_n (limits, answer, buf, amt); if (!answer) goto enomem_error; break; } } answer = str_realloc_cat (limits, answer, (postfix ? postfix : (t_uchar *)"")); if (!answer) goto enomem_error; vu_close (&ign, id_fd); return answer; } static t_uchar * implicit_id (int * errn, struct alloc_limits * limits, const t_uchar * file, const t_uchar * basename, const t_uchar * prefix, struct stat * statb, assoc_table id_tagging_shortcut) { int file_fd; struct stat file_stat_buf; char buf[1025]; int amt; int line; int bottom; if (id_tagging_shortcut) { t_uchar * signature = arch_statb_inode_sig (statb); const t_uchar * cached_id = assoc_get_str_taking (id_tagging_shortcut, rel_make_field_str (signature)); lim_free (0, signature); if (cached_id && (cached_id[0] == 'i') && (cached_id[1] == '_')) return str_save (0, cached_id); else if (cached_id) return 0; } /* This is a slightly screwy, historic interface. * * Passing `base != 0' means the old, larch-style tag syntax. * * Passing `base == 0' means tagline syntax. */ /* Search the file itself (last, then first 1K) for a line beginning: * * tla-style tagline id tagging (basename == 0) * ----------------------------------------- * * arch-tag: * * * larch-style implicit id tagging (basename != 0) * -------------------------------------------- * * basename- * * or * * tag: * * after the dash, skip any blanks -- the rest is the id. */ file_fd = vu_open (errn, file, O_RDONLY, 0); if (file_fd < 0) return 0; if (0 > vu_fstat (errn, file_fd, &file_stat_buf)) goto error_return; for (bottom = 1; bottom >= 0; --bottom) { if (!bottom) { if (0 > vu_lseek (errn, file_fd, 0, SEEK_SET)) { int ign; error_return: vu_close (&ign, file_fd); return 0; } amt = vu_read_retry (errn, file_fd, buf, sizeof (buf) - 1); if (amt < 0) goto error_return; } else { char * x; if (file_stat_buf.st_size > sizeof (buf)) amt = sizeof (buf); else continue; /* Yes, this is a off by one error. However changing it * breaks existing file-ids */ if (0 > vu_lseek (errn, file_fd, -1026, SEEK_END)) goto error_return; amt = vu_read_retry (errn, file_fd, buf, sizeof (buf)); if (amt < 0) goto error_return; x = str_chr_index_n (buf, amt, '\n'); if (!x) continue; amt = amt - (1 + x - buf); mem_move (buf, x + 1, amt); } buf[amt] = 0; line = 0; while (1) { int is_inventory_id; /* skip punctuation and blanks at the start of the line */ while ((line < amt) && (char_is_punct (buf[line]) || char_is_blank (buf[line]))) ++line; if (line == amt) break; if (buf[line] == '\n') { ++line; continue; } is_inventory_id = (basename ? !str_cmp_prefix ("tag:", buf + line) : !str_cmp_prefix ("arch-tag:", buf + line)); if ( !is_inventory_id && (!basename || str_cmp_prefix (basename, buf + line))) { t_uchar * eol; not_this_line: eol = str_chr_index_n (buf + line, amt - line, '\n'); if (!eol) break; line = eol - (t_uchar *)buf; } else { t_uchar * eol; if (is_inventory_id) line += (basename ? str_length ("tag:") : str_length ("arch-tag:")); else line += str_length (basename); if (!is_inventory_id) { while ((line < amt) && char_is_blank (buf[line])) ++line; if (line == amt) break; if (buf[line] != '-') goto not_this_line; ++line; } if (line == amt) break; /* This is the tag line. */ while ((line < amt) && char_is_blank (buf[line])) ++line; eol = str_chr_index_n (buf + line, amt - line, '\n'); if (!eol) /* end of buffer no eol */ { eol = buf + amt; if (!bottom) if (file_stat_buf.st_size > sizeof (buf)) safe_printfmt (2, "Warning: top-of-file truncated tag in: %s\n", file); } if (0 == (eol - (t_uchar *)(buf + line))) { /* an empty id */ break; } { long size; t_uchar * answer; size = smash_non_graphical (buf + line, eol - (t_uchar *)(buf + line)); answer = str_alloc_cat_n (limits, prefix, buf + line, size); if (0 > vu_close (errn, file_fd)) goto error_return; if (!answer) *errn = ENOMEM; return answer; } } } } if (0 > vu_close (errn, file_fd)) goto error_return; *errn = 0; return 0; } static long smash_non_graphical (t_uchar * buf, long amt) { long x; while (amt > 0) { if (!char_is_graph (buf[amt - 1])) --amt; else break; } for (x = 0; x < amt; ++x) { if (!char_is_graph (buf[x])) buf[x] = '_'; } return amt; } int str_cmp_suffix_n(t_uchar * a_string, t_uchar * b_string, int length) { int len_a = str_length(a_string); int len_b = str_length(b_string); int cmp_length = (len_a < len_b) ? len_a : len_b; cmp_length = (cmp_length < length) ? cmp_length : length; return str_cmp(a_string + len_a - cmp_length, b_string + len_b - cmp_length); } /* tag: Tom Lord Wed May 14 07:20:26 2003 (inv-tags.c) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-find-pristine.h0000644000175000017500000000130510457622000020370 0ustar useruser/* cmd-find-pristine.h: * **************************************************************** * Copyright (C) 2003 Tom Lord, Stig Brautaset * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__CMD_FIND_PRISTINE_H #define INCLUDE__LIBARCH__CMD_FIND_PRISTINE_H #include "hackerlab/machine/types.h" extern t_uchar arch_cmd_find_pristine_help[]; /* automatically generated __STDC__ prototypes */ extern int arch_cmd_find_pristine (t_uchar * program_name, int argc, char * argv[]); #endif /* INCLUDE__LIBARCH__CMD_FIND_PRISTINE_H */ /* tag: Stig Brautaset Sat Jun 7 14:12:48 BST 2003 (cmd-find-pristine.h) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-cat-archive-log.h0000644000175000017500000000132310457622000020562 0ustar useruser/* cmd-cat-archive-log.h: * **************************************************************** * Copyright (C) 2003 Tom Lord, Stig Brautaset * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__CMD_CAT_ARCHIVE_LOG_H #define INCLUDE__LIBARCH__CMD_CAT_ARCHIVE_LOG_H #include "hackerlab/machine/types.h" extern t_uchar arch_cmd_cat_archive_log_help[]; /* automatically generated __STDC__ prototypes */ extern int arch_cmd_cat_archive_log (t_uchar * program_name, int argc, char * argv[]); #endif /* INCLUDE__LIBARCH__CMD_CAT_ARCHIVE_LOG_H */ /* tag: Stig Brautaset Sat Jun 7 13:25:47 BST 2003 (cmd-cat-archive-log.h) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-add-id.c0000644000175000017500000001025510457622000016736 0ustar useruser/* add-id.c * **************************************************************** * Copyright (C) 2001, 2002, 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "config-options.h" #include "hackerlab/cmd/main.h" #include "tla/libarch/changelogs.h" #include "tla/libarch/inv-ids.h" #include "tla/libarch/cmd.h" #include "tla/libarch/cmd-add-id.h" static t_uchar * usage = "[options] file ..."; static t_uchar * version_string = (cfg__std__package " from regexps.com\n" "\n" "Copyright 2001, 2002, 2003 Tom Lord\n" "\n" "This is free software; see the source for copying conditions.\n" "There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\n" "PARTICULAR PURPOSE.\n" "\n" "Report bugs to " cfg__tla_bug_mail ".\n" "\n" cfg__std__release_id_string "\n"); #define OPTS(OP) \ OP (opt_help_msg, "h", "help", 0, \ "Display a help message and exit.") \ OP (opt_long_help, "H", 0, 0, \ "Display a verbose help message and exit.") \ OP (opt_version, "V", "version", 0, \ "Display a release identifier string\n" \ "and exit.") \ OP (opt_stop_on_error, "s", "stop-on-error", 0, \ "stop adding further on error (default to continue)") \ OP (opt_id, "i", "id ID", 1, \ "Specify ID, instead of using auto-generated id.") t_uchar arch_cmd_add_id_help[] = ("add an explicit inventory id\n" "Create an explicit inventory id for FILE (which may be a\n" "regular file, symbolic link, or directory).\n"); enum options { OPTS (OPT_ENUM) }; static struct opt_desc opts[] = { OPTS (OPT_DESC) {-1, 0, 0, 0, 0} }; int arch_cmd_add_id (t_uchar *program_name, int argc, char * argv[]) { int o; struct opt_parsed * option; char * id = 0; int stop_on_error = 0; safe_buffer_fd (1, 0, O_WRONLY, 0); option = 0; while (1) { o = opt_standard (lim_use_must_malloc, &option, opts, &argc, argv, program_name, usage, version_string, arch_cmd_add_id_help, opt_help_msg, opt_long_help, opt_version); if (o == opt_none) break; switch (o) { default: safe_printfmt (2, "unhandled option `%s'\n", option->opt_string); panic ("internal error parsing arguments"); usage_error: opt_usage (2, argv[0], program_name, usage, 1); exit (1); /* bogus_arg: */ safe_printfmt (2, "ill-formed argument for `%s' (`%s')\n", option->opt_string, option->arg_string); goto usage_error; case opt_id: { id = str_save(0, option->arg_string); break; } case opt_stop_on_error: { stop_on_error = 1; break; } } } if (argc < 2) goto usage_error; { int a, r; for (a = 1; a < argc; ++a) { t_uchar * file; t_uchar * tagline_id; t_uchar * new_explicit_id; file = argv[a]; if (!safe_access (file, F_OK)) tagline_id = arch_inventory_id (arch_tagline_id_tagging, 0, file, 0, 0, 0); else tagline_id = 0; if (!tagline_id || !arch_id_indicates_changelog (tagline_id)) if (!id) new_explicit_id = arch_generate_id (); else new_explicit_id = id; else new_explicit_id = str_save (0, 2 + tagline_id); r = arch_add_explicit_id (file, new_explicit_id); if ((r == 0) && stop_on_error) { safe_printfmt (2, "error detected, stop adding here\n"); exit(1); } lim_free (0, new_explicit_id); lim_free (0, tagline_id); } } return 0; } /* tag: Tom Lord Wed May 14 12:24:43 2003 (add-tag.c) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-tree-lint.c0000644000175000017500000001326610457622000017524 0ustar useruser/* cmd-tree-lint.c * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "config-options.h" #include "hackerlab/cmd/main.h" #include "tla/libarch/project-tree.h" #include "tla/libarch/proj-tree-lint.h" #include "tla/libarch/cmd.h" #include "tla/libarch/cmd-tree-lint.h" static t_uchar * usage = "[options] [dir]"; static t_uchar * version_string = (cfg__std__package " from regexps.com\n" "\n" "Copyright 2003 Tom Lord\n" "\n" "This is free software; see the source for copying conditions.\n" "There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\n" "PARTICULAR PURPOSE.\n" "\n" "Report bugs to " cfg__tla_bug_mail ".\n" "\n" cfg__std__release_id_string "\n"); #define OPTS(OP) \ OP (opt_help_msg, "h", "help", 0, \ "Display a help message and exit.") \ OP (opt_long_help, "H", 0, 0, \ "Display a verbose help message and exit.") \ OP (opt_version, "V", "version", 0, \ "Display a release identifier string\n" \ "and exit.") \ OP (opt_broken_symlink, "s", "broken-symlinks", 0, \ "Just list broken symlinks") \ OP (opt_unrecognized_files, "u", "unrecognized-files", 0, \ "Just list files violating naming conventions") \ OP (opt_untagged_files, "t", "untagged-files", 0, \ "Just list files lacking inventory ids") \ OP (opt_missing_files, "m", "missing-files", 0, \ "Just list inventory ids lacking corresponding files") \ OP (opt_duplicate_ids, "d", "duplicate-ids", 0, \ "Just list duplicated ids") \ OP (opt_strict, 0, "strict", 0, \ "exit with non-0 status on _any_ oddity") \ OP (opt_unescaped, 0, "unescaped", 0, \ "show filenames in unescaped form") t_uchar arch_cmd_tree_lint_help[] = ("audit a source tree\n" "Audit a source tree for missing files, untagged files, duplicate ids,\n" "and files not matching recognized naming conventions.\n\n" "The default is to list files failing any of those tests. Enabling any\n" "of the `specific' tests disables the rest, unless they're explicitly\n" "enabled on the command line. Therefore, \"tla tree-lint\" is\n" "equivalent to \"tla tree-lint -sutmd\""); enum options { OPTS (OPT_ENUM) }; static struct opt_desc opts[] = { OPTS (OPT_DESC) {-1, 0, 0, 0, 0} }; int arch_cmd_tree_lint (t_uchar * program_name, int argc, char * argv[]) { int o; struct opt_parsed * option; char * dir; int strict = 0; int filter_output = 0; t_uint categories = 0; int escape_classes = arch_escape_classes; safe_buffer_fd (1, 0, O_WRONLY, 0); option = 0; while (1) { o = opt_standard (lim_use_must_malloc, &option, opts, &argc, argv, program_name, usage, version_string, arch_cmd_tree_lint_help, opt_help_msg, opt_long_help, opt_version); if (o == opt_none) break; switch (o) { default: safe_printfmt (2, "unhandled option `%s'\n", option->opt_string); panic ("internal error parsing arguments"); usage_error: opt_usage (2, argv[0], program_name, usage, 1); exit (1); /* bogus_arg: */ safe_printfmt (2, "ill-formed argument for `%s' (`%s')\n", option->opt_string, option->arg_string); goto usage_error; case opt_strict: { strict = 1; break; } case opt_broken_symlink: { filter_output = 1; categories = categories | symlinks_sans_targets; break; } case opt_unrecognized_files: { filter_output = 1; categories = categories | unrecognized_files; break; } case opt_untagged_files: { filter_output = 1; categories = categories | untagged_files; break; } case opt_missing_files: { filter_output = 1; categories = categories | ids_sans_files; break; } case opt_duplicate_ids: { filter_output = 1; categories = categories | duplicate_id_groups; break; } case opt_unescaped: { escape_classes = 0; break; } } } if (argc > 2) goto usage_error; if (argc == 1) dir = "."; else dir = argv[1]; { struct arch_tree_lint_result * result; int status; t_uchar * tree_root = 0; tree_root = arch_tree_root (0, dir, 0); if (!tree_root) { safe_printfmt (2, "%s: directory is not in a project tree.\n", argv[0]); exit (1); } result = arch_tree_lint (tree_root); if (filter_output) status = arch_print_filtered_tree_lint_report (1, result, categories, escape_classes); else status = arch_print_tree_lint_report (1, result, escape_classes); if (strict) exit (status != 0); else exit (status < 0); lim_free (0, tree_root); } return 0; } /* tag: Tom Lord Mon May 12 12:25:44 2003 (tree-lint.c) */ tla-1.3.5+dfsg/src/tla/libarch/archive-pfs.h0000644000175000017500000000224110457622000017263 0ustar useruser/* archive-pfs.h: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__ARCHIVE_PFS_H #define INCLUDE__LIBARCH__ARCHIVE_PFS_H #include "tla/libarch/archive.h" #include "tla/libarch/pfs.h" struct arch_pfs_archive { struct arch_archive arch; struct arch_pfs_session * pfs; struct arch_archive * from_arch; t_uchar * txn_signature_file; rel_table deferred_sha1_sums; int txn_signature_fd; }; /* automatically generated __STDC__ prototypes */ extern void arch_pfs_make_archive (const t_uchar * name, const t_uchar *location, const t_uchar * version, const t_uchar * mirror_of, int dot_listing_lossage, int signed_archive); extern void arch_pfs_archive_connect (struct arch_archive ** a); #endif /* INCLUDE__LIBARCH__ARCHIVE_PFS_H */ /* tag: Tom Lord Sat Jan 5 15:26:10 2002 (archive-pfs.h) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-import.h0000644000175000017500000000122410457622000017127 0ustar useruser/* cmd-import.h: * **************************************************************** * Copyright (C) 2003 Tom Lord, Stig Brautaset * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__CMD_IMPORT_H #define INCLUDE__LIBARCH__CMD_IMPORT_H #include "hackerlab/machine/types.h" extern t_uchar arch_cmd_import_help[]; /* automatically generated __STDC__ prototypes */ extern int arch_cmd_import (t_uchar * program_name, int argc, char * argv[]); #endif /* INCLUDE__LIBARCH__CMD_IMPORT_H */ /* tag: Stig Brautaset Sat Jun 7 14:20:13 BST 2003 (cmd-imprev.h) */ tla-1.3.5+dfsg/src/tla/libarch/archive-cache.h0000644000175000017500000000144710457622000017545 0ustar useruser/* archive-cache.h: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__ARCHIVE_CACHE_H #define INCLUDE__LIBARCH__ARCHIVE_CACHE_H #include "tla/libarch/archive.h" /* automatically generated __STDC__ prototypes */ extern void arch_archive_cache (int chatter_fd, struct arch_archive * arch, const t_uchar * archive, const t_uchar * revision, const t_uchar * cache_dir); #endif /* INCLUDE__LIBARCH__ARCHIVE_CACHE_H */ /* tag: Tom Lord Sat Jan 5 15:26:10 2002 (archive-cache.h) */ tla-1.3.5+dfsg/src/tla/libarch/archive.h0000644000175000017500000005021310457622000016477 0ustar useruser/* archive.h: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__ARCHIVE_H #define INCLUDE__LIBARCH__ARCHIVE_H #include "tla/libawk/relational.h" #include "tla/libarch/hooks.h" #include "tla/libarch/archive-version.h" struct arch_archive_vtable; enum arch_revision_type { arch_import_revision, arch_simple_revision, arch_continuation_revision }; enum arch_revision_lock_state { arch_revision_unlocked, arch_revision_user_locked, arch_revision_txn_locked, arch_revision_unknown_lock_state, arch_revision_illegal_lock_state, }; struct arch_archive { struct arch_archive_vtable * vtable; int refs; struct arch_archive * next; t_uchar * name; t_uchar * official_name; t_uchar * location; t_uchar * version; enum arch_archive_access access; enum arch_archive_type type; t_uchar * mirror_of; t_uchar * client_anticipates_mirror; int http_blows; int signed_archive; }; struct arch_archive_vtable { t_uchar * type; void (*close) (struct arch_archive * a); t_uchar * (*archive_version) (struct arch_archive * a); rel_table (*categories) (struct arch_archive * a); rel_table (*branches) (struct arch_archive * a, const t_uchar * category); rel_table (*versions) (struct arch_archive * a, const t_uchar * package); rel_table (*revisions) (struct arch_archive * a, const t_uchar * version); t_uchar * (*archive_log) (struct arch_archive *, const t_uchar * revision); int (*revision_type) (enum arch_revision_type * type, int * is_cached, struct arch_archive * a, const t_uchar * revision); void (*get_patch) (int out_fd, struct arch_archive * a, const t_uchar * revision); void (*get_cached) (int out_fd, struct arch_archive * a, const t_uchar * revision); void (*get_import) (int out_fd, struct arch_archive * a, const t_uchar * revision); t_uchar * (*get_continuation) (struct arch_archive * a, const t_uchar * revision); t_uchar * (*get_meta_info) (struct arch_archive * a, const t_uchar * meta_info_name); int (*make_category) (t_uchar ** errstr, struct arch_archive * a, const t_uchar * category); int (*make_branch) (t_uchar ** errstr, struct arch_archive * a, const t_uchar * branch); int (*make_version) (t_uchar ** errstr, struct arch_archive * a, const t_uchar * version); int (*lock_revision) (t_uchar ** errstr, struct arch_archive * a, const t_uchar * version, const t_uchar * prev_level, const t_uchar * uid, const t_uchar * txn_id, const t_uchar * new_level); int (*revision_ready) (t_uchar ** errstr, struct arch_archive *a, const t_uchar * version, const t_uchar * prev_level, const t_uchar * uid, const t_uchar * txn_id, const t_uchar * new_level); int (*finish_revision) (t_uchar ** errstr, struct arch_archive * a, const t_uchar * version, const t_uchar * prev_level, const t_uchar * uid, const t_uchar * txn_id, const t_uchar * new_level); int (*break_revision_lock) (t_uchar ** errstr, struct arch_archive * a, const t_uchar * version, const t_uchar * prev_level, const t_uchar * uid, const t_uchar * txn_id); enum arch_revision_lock_state (*lock_state) (t_uchar ** prev_level_ret, t_uchar ** uid_ret, t_uchar ** txn_id_ret, struct arch_archive * a, const t_uchar * version); int (*put_log) (t_uchar ** errstr, struct arch_archive * a, const t_uchar * version, const t_uchar * prev_level, const t_uchar * uid, const t_uchar * txn_id, const t_uchar * log_text); int (*put_continuation) (t_uchar ** errstr, struct arch_archive * a, const t_uchar * version, const t_uchar * prev_level, const t_uchar * uid, const t_uchar * txn_id, const t_uchar * continuation); int (*put_changeset) (t_uchar ** errstr, struct arch_archive * a, const t_uchar * version, const t_uchar * prev_level, const t_uchar * uid, const t_uchar * txn_id, const t_uchar * level, int in_fd); int (*put_import) (t_uchar ** errstr, struct arch_archive * a, const t_uchar * version, const t_uchar * prev_level, const t_uchar * uid, const t_uchar * txn_id, const t_uchar * level, int in_fd); int (*put_cached) (t_uchar ** errstr, struct arch_archive * a, const t_uchar * revision, int in_fd); int (*delete_cached) (t_uchar ** errstr, struct arch_archive * a, const t_uchar * revision); void (*repair_non_txnal) (int chatter_fd, struct arch_archive * a); }; /* automatically generated __STDC__ prototypes */ extern void arch_make_archive (const t_uchar * name, const t_uchar * location, const t_uchar * mirror_of, int dot_listing_lossage, int signed_archive, int tla_archive); extern struct arch_archive * arch_archive_connect_location (const t_uchar * name, const t_uchar * location, const t_uchar * want_mirror_of); extern struct arch_archive * arch_archive_connect (const t_uchar * name, const t_uchar * want_mirror_of); extern void arch_archive_close (struct arch_archive * arch); extern t_uchar * arch_archive_version (struct arch_archive * arch); extern rel_table arch_archive_categories (struct arch_archive * arch); extern rel_table arch_archive_branches (struct arch_archive * arch, const t_uchar * category); extern rel_table arch_archive_versions (struct arch_archive * arch, const t_uchar * package); extern t_uchar * arch_archive_latest_revision (struct arch_archive * arch, const t_uchar * version, int full); extern rel_table arch_archive_revisions (struct arch_archive * arch, const t_uchar * version, int full); extern t_uchar * arch_archive_log (struct arch_archive * arch, const t_uchar * revision); extern void arch_revision_type (enum arch_revision_type * type, int * is_cached, struct arch_archive * arch, const t_uchar * revision); extern int arch_revision_exists (struct arch_archive * arch, const t_uchar * revision); extern void arch_get_patch_targz (int out_fd, struct arch_archive * arch, const t_uchar * revision); extern void arch_get_patch (struct arch_archive * arch, const t_uchar * revision, const t_uchar * dest_dir); extern void arch_get_cached_revision_targz (int out_fd, struct arch_archive * arch, const t_uchar * revision); extern void arch_get_cached_revision (struct arch_archive * arch, const t_uchar * revision, const t_uchar * dest_dir); extern void arch_get_import_targz (int out_fd, struct arch_archive * arch, const t_uchar * revision); extern void arch_get_import_revision (struct arch_archive * arch, const t_uchar * revision, const t_uchar * dest_dir); extern t_uchar * arch_get_continuation (struct arch_archive * arch, const t_uchar * revision); extern t_uchar * arch_get_meta_info (struct arch_archive * arch, const t_uchar * meta_info_name); extern t_uchar * arch_get_meta_info_trimming (struct arch_archive * arch, const t_uchar * meta_info_name); extern int arch_make_category (t_uchar ** errstr, struct arch_archive * arch, const t_uchar * category); extern int arch_make_branch (t_uchar ** errstr, struct arch_archive * arch, const t_uchar * branch); extern int arch_make_version (t_uchar ** errstr, struct arch_archive * arch, const t_uchar * version); extern int arch_archive_lock_revision (t_uchar ** errstr, struct arch_archive * a, const t_uchar * version, const t_uchar * prev_level, const t_uchar * uid, const t_uchar * txn_id, const t_uchar * new_level); extern int arch_revision_ready (t_uchar ** errstr, struct arch_archive *a, const t_uchar * version, const t_uchar * prev_level, const t_uchar * uid, const t_uchar * txn_id, const t_uchar * new_level); extern int arch_archive_finish_revision (t_uchar ** errstr, struct arch_archive * a, const t_uchar * version, const t_uchar * prev_level, const t_uchar * uid, const t_uchar * txn_id, const t_uchar * new_level); extern enum arch_revision_lock_state arch_archive_revision_lock_state (t_uchar ** prev_level_ret, t_uchar ** uid_ret, t_uchar ** txn_id_ret, struct arch_archive * a, const t_uchar * version); extern int arch_archive_break_revision_lock (t_uchar ** errstr, struct arch_archive * a, const t_uchar * version, const t_uchar * prev_level, const t_uchar * uid, const t_uchar * txn_id); extern int arch_archive_put_log (t_uchar ** errstr, struct arch_archive * a, const t_uchar * version, const t_uchar * prev_level, const t_uchar * uid, const t_uchar * txn_id, const t_uchar * log_text); extern int arch_archive_put_continuation (t_uchar ** errstr, struct arch_archive * a, const t_uchar * version, const t_uchar * prev_level, const t_uchar * uid, const t_uchar * txn_id, const t_uchar * continuation); extern int arch_archive_put_changeset_targz (t_uchar ** errstr, struct arch_archive * a, const t_uchar * version, const t_uchar * prev_level, const t_uchar * uid, const t_uchar * txn_id, const t_uchar * level, int in_fd); extern int arch_archive_put_changeset (t_uchar ** errstr, struct arch_archive * a, const t_uchar * version, const t_uchar * prev_level, const t_uchar * uid, const t_uchar * txn_id, const t_uchar * level, const t_uchar * dir); extern int arch_archive_put_import_targz (t_uchar ** errstr, struct arch_archive * a, const t_uchar * version, const t_uchar * prev_level, const t_uchar * uid, const t_uchar * txn_id, const t_uchar * level, int in_fd); extern int arch_archive_put_import (t_uchar ** errstr, struct arch_archive * a, const t_uchar * version, const t_uchar * prev_level, const t_uchar * uid, const t_uchar * txn_id, const t_uchar * level, const t_uchar * dir); extern int arch_archive_put_cached_targz (t_uchar ** errstr, struct arch_archive * a, const t_uchar * revision, int in_fd); extern int arch_archive_put_cached (t_uchar ** errstr, struct arch_archive * a, const t_uchar * revision, const t_uchar * dir); extern int arch_archive_delete_cached (t_uchar ** errstr, struct arch_archive * a, const t_uchar * revision); extern void arch_archive_repair_non_txnal (int chatter_fd, struct arch_archive * a); extern t_uchar * arch_generate_txn_id (void); extern t_uchar * arch_previous_revision (struct arch_archive * arch, const t_uchar * revision); extern t_uchar * arch_ancestor_revision (struct arch_archive * arch, const t_uchar * revision); extern t_uchar * archive_tmp_file_name (const t_uchar * dir, const t_uchar * basename); extern t_uchar * make_tmp_tar_archive (const t_uchar * dir); extern int arch_get_meta_int_info(struct arch_archive * arch, const t_uchar * key); extern t_uchar * arch_fs_archive_category_path (const struct arch_archive * arch, const t_uchar * archive_path, const t_uchar * category); extern t_uchar * arch_fs_archive_branch_path (const struct arch_archive * arch, const t_uchar * archive_path, const t_uchar * package); extern t_uchar * arch_fs_archive_version_path (const struct arch_archive * arch, const t_uchar * archive_path, const t_uchar * version); extern t_uchar * arch_fs_archive_revision_path (const struct arch_archive * arch, const t_uchar * archive_path, const t_uchar * revision); extern t_uchar * arch_fs_archive_revision_log_path (const struct arch_archive * arch, const t_uchar * archive_path, const t_uchar * revision); extern t_uchar * arch_fs_archive_changeset_path (const struct arch_archive * arch, const t_uchar * archive_path, const t_uchar * revision); extern t_uchar * arch_fs_archive_import_path (const struct arch_archive * arch, const t_uchar * archive_path, const t_uchar * revision); extern t_uchar * arch_fs_archive_cached_path (const struct arch_archive * arch, const t_uchar * archive_path, const t_uchar * revision); extern t_uchar * arch_fs_archive_cached_checksum_path (const struct arch_archive * arch, const t_uchar * archive_path, const t_uchar * revision); extern t_uchar * arch_fs_archive_continuation_path (const struct arch_archive * arch, const t_uchar * archive_path, const t_uchar * revision); extern t_uchar * arch_fs_archive_revision_lock_unlocked_path (const struct arch_archive * arch, const t_uchar * archive_path, const t_uchar * version, const t_uchar * prev_level); extern t_uchar * arch_fs_archive_revision_lock_locked_path (const struct arch_archive * arch, const t_uchar * archive_path, const t_uchar * version, const t_uchar * prev_level, const t_uchar * arch_user_id, const t_uchar * txn_id); extern t_uchar * arch_fs_archive_revision_lock_locked_contents_path (const struct arch_archive * arch, const t_uchar * archive_path, const t_uchar * version, const t_uchar * prev_level, const t_uchar * arch_user_id, const t_uchar * txn_id); extern t_uchar * arch_fs_archive_revision_lock_broken_path (const struct arch_archive * arch, const t_uchar * archive_path, const t_uchar * version, const t_uchar * prev_level); #endif /* INCLUDE__LIBARCH__ARCHIVE_H */ /* tag: Tom Lord Sat Jan 5 15:26:10 2002 (archive.h) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-undo.c0000644000175000017500000002573710457622000016574 0ustar useruser/* cmd-undo.c * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "config-options.h" #include "hackerlab/cmd/main.h" #include "hackerlab/fs/file-names.h" #include "hackerlab/vu/safe-vfdbuf.h" #include "tla/libfsutils/rmrf.h" #include "tla/libarch/namespace.h" #include "tla/libarch/project-tree.h" #include "tla/libarch/patch-logs.h" #include "tla/libarch/local-cache.h" #include "tla/libarch/proj-tree-lint.h" #include "tla/libarch/inode-sig.h" #include "tla/libarch/undo.h" #include "tla/libarch/cmdutils.h" #include "tla/libarch/cmd.h" #include "tla/libarch/cmd-undo.h" #include "tla/libarch/invent.h" /* __STDC__ prototypes for static functions */ static t_uchar * usage = "[options] [revision] [-- file ...]"; static t_uchar * version_string = (cfg__std__package " from regexps.com\n" "\n" "Copyright 2003 Tom Lord\n" "\n" "This is free software; see the source for copying conditions.\n" "There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\n" "PARTICULAR PURPOSE.\n" "\n" "Report bugs to " cfg__tla_bug_mail ".\n" "\n" cfg__std__release_id_string "\n"); #define OPTS(OP) \ OP (opt_help_msg, "h", "help", 0, \ "Display a help message and exit.") \ OP (opt_long_help, "H", 0, 0, \ "Display a verbose help message and exit.") \ OP (opt_version, "V", "version", 0, \ "Display a release identifier string\n" \ "and exit.") \ OP (opt_archive, "A", "archive", 1, \ "Override `my-default-archive'") \ OP (opt_dir, "d", "dir DIR", 1, \ "cd to DIR first") \ OP (opt_output_dir, "o", "output PATCH-DIR", 1, \ "save changeset in PATCH-DIR") \ OP (opt_no_output, "n", "no-output", 0, \ "do not save the changeset") \ OP (opt_forward, "N", "forward", 0, \ "pass the --forward option to `patch'") \ OP (opt_quiet, "q", "quiet", 0, \ "no progress reports while computing changeset") \ OP (opt_exclude, "x", "exclude FILE", 1, \ "exclude FILE from the files to commit") \ OP (opt_unescaped, 0, "unescaped", 0, \ "show filenames in unescaped form") t_uchar arch_cmd_undo_help[] = ("undo and save changes in a project tree\n" "Compute a patch set describing the changes from REVISION\n" "to the project tree containing DIR. Save the patch in\n" "PATCH-DIR (which must not already exist) and apply the patch\n" "in reverse to the project tree containing DIR.\n" "\n" "The effect is to remove local changes in the DIR project tree\n" "but save them in a convenient form.\n" "\n" "If FILE (a list of file names) is specified, then only\n" "changes to those files will be undone.\n" "\n" "If REVISION is not specified, the latest ancestor of the\n" "default version of project tree is used.\n" "\n" "If REVISION is specified as a VERSION, the latest ancestor\n" "of the project tree in that VERSION is used.\n" "\n" "If DIR is not specified, \".\" is assumed.\n" "\n" "If PATCH-DIR is not specified, a temporary file-name of the\n" "matching ,,undo-* is used.\n" "\n" "If --no-output is specified, the patch set is not saved.\n" "\n" "See also \"tla redo -H\" and \"tla changes -H\".\n"); enum options { OPTS (OPT_ENUM) }; static struct opt_desc opts[] = { OPTS (OPT_DESC) {-1, 0, 0, 0, 0} }; int arch_cmd_undo (t_uchar * program_name, int argc, char * argv[]) { int o; struct opt_parsed * option; t_uchar * dir = 0; t_uchar * output = 0; t_uchar * default_archive = 0; int forward = 0; int quiet = 0; int no_output = 0; int exit_status = 0; int opt_end_with_double_dash = 0; int escape_classes = arch_escape_classes; rel_table exclude_list = rel_table_nil; dir = str_save (0, "."); safe_buffer_fd (1, 0, O_WRONLY, 0); option = 0; while (1) { o = opt_standard (lim_use_must_malloc, &option, opts, &argc, argv, program_name, usage, version_string, arch_cmd_undo_help, opt_help_msg, opt_long_help, opt_version); if (o == opt_none) break; if (o == opt_double_dash) { opt_end_with_double_dash = 1; break; } switch (o) { default: safe_printfmt (2, "unhandled option `%s'\n", option->opt_string); panic ("internal error parsing arguments"); usage_error: opt_usage (2, argv[0], program_name, usage, 1); exit (1); /* bogus_arg: */ safe_printfmt (2, "ill-formed argument for `%s' (`%s')\n", option->opt_string, option->arg_string); goto usage_error; case opt_archive: { lim_free (0, default_archive); default_archive = str_save (0, option->arg_string); break; } case opt_dir: { lim_free (0, dir); dir = str_save (0, option->arg_string); break; } case opt_output_dir: { lim_free (0, output); output = str_save (0, option->arg_string); break; } case opt_no_output: { no_output = 1; break; } case opt_forward: { forward = 1; break; } case opt_exclude: { t_uchar * normalized_path = normal_from_path(option->arg_string); rel_add_records (&exclude_list, rel_singleton_record_taking (rel_make_field_str (normalized_path)), rel_record_null); lim_free(0, normalized_path); normalized_path = 0; break; } case opt_quiet: { quiet = 1; break; } case opt_unescaped: { escape_classes = 0; break; } } } { t_uchar * tree_root = 0; t_uchar * fqvsn = 0; t_uchar * tree_arch = 0; t_uchar * tree_version = 0; t_uchar * rvsnspec = 0; t_uchar * archive = 0; t_uchar * revision = 0; rel_table file_list = rel_table_nil; rel_table file_list2 = rel_table_nil; if (default_archive && !arch_valid_archive_name (default_archive)) { safe_printfmt (2, "%s: invalid archive name: %s\n", argv[0], default_archive); exit (2); } tree_root = arch_tree_root (0, dir, 0); if (!tree_root) { safe_printfmt (2, "%s: not in a project tree\n dir: %s\n", argv[0], dir); exit (2); } fqvsn = arch_tree_version (tree_root); if (!fqvsn) { safe_printfmt (2, "%s: no tree-version set\n tree: %s\n", argv[0], tree_root); exit (2); } tree_arch = arch_parse_package_name (arch_ret_archive, 0, fqvsn); tree_version = arch_parse_package_name (arch_ret_non_archive, 0, fqvsn); invariant (!!tree_arch); invariant (arch_valid_package_name (tree_version, arch_no_archive, arch_req_version, 0)); if (argc == 1 || opt_end_with_double_dash) { t_uchar * latest_log = 0; latest_log = arch_highest_patch_level (tree_root, tree_arch, tree_version); rvsnspec = str_alloc_cat_many (0, fqvsn, "--", latest_log, str_end); lim_free (0, latest_log); } else { rvsnspec = arch_fqrvsn_from_tree_and_input (argv[0], argv[1], tree_root); if (!rvsnspec) { safe_printfmt (2, "%s: illegal revision name: %s\n", argv[0], rvsnspec); exit (2); } } if (argc > 2 || opt_end_with_double_dash) /* File arguments. */ { int argx = opt_end_with_double_dash ? 1 : 2; if (!opt_end_with_double_dash && str_cmp (argv[argx], "--") == 0) argx++; if (argx == argc) /* --, but no files specified; should this be an error? */ goto usage_error; while (argx < argc) rel_add_records (&file_list, rel_make_record_1_taking (rel_make_field_str (argv[argx++])), rel_record_null); } lim_free (0, fqvsn); lim_free (0, tree_arch); lim_free (0, tree_version); archive = arch_parse_package_name (arch_ret_archive, default_archive, rvsnspec); revision = arch_parse_package_name (arch_ret_non_archive, 0, rvsnspec); if (!output) { output = arch_next_undo_changeset (0, tree_root); } { struct arch_tree_lint_result * lint = 0; if (!quiet) safe_printfmt (1, "* linting the source tree\n"); lint = arch_tree_lint (tree_root); if (0 > arch_print_tree_lint_report ((quiet ? 2 : 1), lint, escape_classes)) { exit (1); } } { t_uchar * orig_tree = 0; assoc_table inode_shortcut = 0; orig_tree = arch_find_or_make_local_copy ((quiet ? -1 : 1), tree_root, 0, 0, archive, revision); if (!orig_tree) { safe_printfmt (2, "%s: no local copies to compare to (%s/%s)\n consider `add-pristine --help'\n", argv[0], archive, revision); exit (2); } arch_read_inode_sig (0, &inode_shortcut, tree_root, archive, revision); if ((rel_n_records(file_list) == 0) && (rel_n_records(exclude_list) > 0)) file_list = arch_source_files_file_list(tree_root, 0, 0); file_list2 = rel_table_substract(file_list, exclude_list); arch_undo ((quiet ? -1 : 1), output, no_output, tree_root, orig_tree, file_list2, inode_shortcut, forward, escape_classes); lim_free (0, orig_tree); free_assoc_table (inode_shortcut); } rel_free_table (file_list); rel_free_table (file_list2); lim_free (0, rvsnspec); lim_free (0, tree_root); lim_free (0, archive); lim_free (0, revision); } lim_free (0, dir); lim_free (0, output); lim_free (0, default_archive); return exit_status; } /* tag: Tom Lord Wed Jun 4 23:33:25 2003 (cmd-undo-changes.c) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-touch.c0000644000175000017500000001051310457622000016733 0ustar useruser/* touch.c * **************************************************************** * Copyright (C) 2001, 2002, 2003, 2005 Free Software Foundation, Inc. * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "config-options.h" #include "hackerlab/cmd/main.h" #include "tla/libarch/changelogs.h" #include "tla/libarch/inv-ids.h" #include "tla/libarch/cmd.h" #include "tla/libarch/cmd-touch.h" static t_uchar * usage = "[options] file ..."; static t_uchar * version_string = (cfg__std__package " from regexps.com\n" "\n" "Copyright 2001, 2002, 2003, 2005 Free Software Foundation, Inc.\n" "\n" "This is free software; see the source for copying conditions.\n" "There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\n" "PARTICULAR PURPOSE.\n" "\n" "Report bugs to " cfg__tla_bug_mail ".\n" "\n" cfg__std__release_id_string "\n"); #define OPTS(OP) \ OP (opt_help_msg, "h", "help", 0, \ "Display a help message and exit.") \ OP (opt_long_help, "H", 0, 0, \ "Display a verbose help message and exit.") \ OP (opt_version, "V", "version", 0, \ "Display a release identifier string\n" \ "and exit.") \ OP (opt_id, "i", "id ID", 1, \ "Specify ID, instead of using auto-generated id.") t_uchar arch_cmd_touch_help[] = ("add an explicit inventory id, touching the file.\n" "Create an explicit inventory id for FILE (which may be a\n" "regular file, symbolic link, or directory).\n" "This command also sets the modification and access times\n" "of the file, creating it if necessary.\n"); enum options { OPTS (OPT_ENUM) }; static struct opt_desc opts[] = { OPTS (OPT_DESC) {-1, 0, 0, 0, 0} }; int arch_cmd_touch (t_uchar *program_name, int argc, char * argv[]) { int o; struct opt_parsed * option; char * id = 0; safe_buffer_fd (1, 0, O_WRONLY, 0); option = 0; while (1) { o = opt_standard (lim_use_must_malloc, &option, opts, &argc, argv, program_name, usage, version_string, arch_cmd_touch_help, opt_help_msg, opt_long_help, opt_version); if (o == opt_none) break; switch (o) { default: safe_printfmt (2, "unhandled option `%s'\n", option->opt_string); panic ("internal error parsing arguments"); usage_error: opt_usage (2, argv[0], program_name, usage, 1); exit (1); /* bogus_arg: */ safe_printfmt (2, "ill-formed argument for `%s' (`%s')\n", option->opt_string, option->arg_string); goto usage_error; case opt_id: { id = str_save(0, option->arg_string); break; } } } if (argc < 2) goto usage_error; { int a; for (a = 1; a < argc; ++a) { t_uchar * file; t_uchar * tagline_id; t_uchar * new_explicit_id; int use_utimes; file = argv[a]; if (!safe_access (file, F_OK)) { tagline_id = arch_inventory_id (arch_tagline_id_tagging, 0, file, 0, 0, 0); use_utimes = 1; } else { tagline_id = 0; use_utimes = 0; } if (!tagline_id || !arch_id_indicates_changelog (tagline_id)) if (!id) new_explicit_id = arch_generate_id (); else new_explicit_id = id; else new_explicit_id = str_save (0, 2 + tagline_id); arch_add_explicit_id (file, new_explicit_id); if (use_utimes) { utimes (file, 0); } else { int fd; fd = safe_open (file, O_WRONLY | O_CREAT, 0777); safe_close (fd); } lim_free (0, new_explicit_id); lim_free (0, tagline_id); } } return 0; } /* tag: Tom Lord Sun Mar 20 17:51:55 2005 (libarch/cmd-touch.c) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-inventory.c0000644000175000017500000002577110457622000017662 0ustar useruser/* cmd-inventory.c: file inventories * **************************************************************** * Copyright (C) 2002, 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "config-options.h" #include "hackerlab/cmd/main.h" #include "hackerlab/vu/safe.h" #include "hackerlab/char/pika-escaping-utils.h" #include "tla/libarch/project-tree.h" #include "tla/libarch/invent.h" #include "tla/libarch/cmd.h" #include "tla/libarch/cmd-inventory.h" #include "hackerlab/os/errno-to-string.h" static t_uchar * usage = "[options] [--] [dir]*"; static t_uchar * version_string = (cfg__std__package " from regexps.com\n" "\n" "Copyright 2002 Tom Lord\n" "\n" "This is free software; see the source for copying conditions.\n" "There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\n" "PARTICULAR PURPOSE.\n" "\n" "Report bugs to " cfg__tla_bug_mail ".\n" "\n" cfg__std__release_id_string "\n"); #define OPTS(OP) \ OP (opt_help_msg, "h", "help", 0, \ "display help") \ OP (opt_long_help, "H", 0, 0, \ "Display a verbose help message and exit.") \ OP (opt_version, "V", "version", 0, \ "display version info\n") \ OP (opt_source, "s", "source", 0, \ "list source files") \ OP (opt_precious, "p", "precious", 0, \ "list precious files") \ OP (opt_backups, "b", "backups", 0, \ "list backup files") \ OP (opt_junk, "j", "junk", 0, \ "list junk files") \ OP (opt_unrecognized, "u", "unrecognized", 0, \ "list unrecognized files") \ OP (opt_trees, "t", "trees", 0, \ "list roots of nested trees\n") \ OP (opt_directories, "d", "directories", 0, \ "list only directories") \ OP (opt_files, "f", "files", 0, \ "list only non-directories") \ OP (opt_both, "B", "both", 0, \ "list both dirs and files") \ OP (opt_kind, 0, "kind", 0, \ "indicate file kinds\n") \ OP (opt_all, 0, "all", 0, \ "include arch control files") \ OP (opt_nested, 0, "nested", 0, \ "include nested trees\n") \ OP (opt_ids, 0, "ids", 0, \ "list with ids (source files only)") \ OP (opt_untagged, 0, "untagged", 0, \ "include files that are missing ids\n") \ OP (opt_explicit, 0, "explicit", 0, \ "use explicit file ids") \ OP (opt_implicit, 0, "implicit", 0, \ "permit implicit file ids") \ OP (opt_tagline, 0, "tagline", 0, \ "permit tagline file ids") \ OP (opt_names, 0, "names", 0, \ "use name-based file ids") \ OP (opt_unescaped, 0, "unescaped", 0, \ "show filenames in unescaped form") t_uchar arch_cmd_inventory_help[] = ("inventory a source tree\n" "With no arguments, print a human-readable inventory report.\n" "\n" "With category options (--source etc) limit the report to just\n" "those files. With no other options, the report includes all\n" "sections and files.\n" "\n" "The options -d, -f, and -B cancel each other.\n" "\n" "If a directory is precious, junk, or unrecognized, only the\n" "directory name itself is printed -- its contents are not\n" "searched.\n" "\n" "Each command option implies the corresponding category option\n" "(e.g. \"--source-command\" implies \"--source\"). The exit\n" "status of the command is ignored.\n"); enum options { OPTS (OPT_ENUM) }; static struct opt_desc opts[] = { OPTS (OPT_DESC) {-1, 0, 0, 0, 0} }; /* __STDC__ prototypes for static functions */ static void inventory_printer (const t_uchar * path, struct stat * stat_buf, enum arch_inventory_category category, const t_uchar * id, int has_source_name, void * closure, int escape_classes); static int show_dirs = 0; static int show_files = 1; static int show_kind = 0; static int show_ids; static int n_categories = 0; int arch_cmd_inventory (t_uchar * program_name, int argc, char * argv[]) { int o; struct opt_parsed * option; struct arch_inventory_options inv_options; int escape_classes = arch_escape_classes; option = 0; mem_set0 ((t_uchar *)&inv_options, sizeof (inv_options)); while (1) { o = opt_standard (lim_use_must_malloc, &option, opts, &argc, argv, program_name, usage, version_string, arch_cmd_inventory_help, opt_help_msg, opt_long_help, opt_version); if (o == opt_none) break; switch (o) { default: safe_printfmt (2, "unhandled option `%s'\n", option->opt_string); panic ("internal error parsing arguments"); usage_error: opt_usage (2, argv[0], program_name, usage, 1); exit (1); /* bogus_arg: */ safe_printfmt (2, "ill-formed argument for `%s' (`%s')\n", option->opt_string, option->arg_string); goto usage_error; case opt_source: inv_options.categories |= arch_inventory_source; break; case opt_precious: inv_options.categories |= arch_inventory_precious; break; case opt_backups: inv_options.categories |= arch_inventory_backup; break; case opt_junk: inv_options.categories |= arch_inventory_junk; break; case opt_unrecognized: inv_options.categories |= arch_inventory_unrecognized; break; case opt_trees: inv_options.categories |= arch_inventory_tree; break; case opt_directories: show_dirs = 1; show_files = 0; break; case opt_files: show_dirs = 0; show_files = 1; break; case opt_both: show_dirs = 1; show_files = 1; break; case opt_kind: show_kind = 1; break; case opt_all: inv_options.include_excluded = 1; break; case opt_nested: inv_options.nested = 1; break; case opt_ids: inv_options.want_ids = 1; show_ids = 1; break; case opt_untagged: inv_options.treat_unrecognized_source_as_source = 1; break; case opt_explicit: inv_options.override_method = 1; inv_options.method = arch_explicit_id_tagging; break; case opt_implicit: inv_options.override_method = 1; inv_options.method = arch_implicit_id_tagging; break; case opt_tagline: inv_options.override_method = 1; inv_options.method = arch_tagline_id_tagging; break; case opt_names: inv_options.override_method = 1; inv_options.method = arch_names_id_tagging; break; case opt_unescaped: escape_classes = 0; break; } } n_categories = 0; if (inv_options.categories & arch_inventory_source) ++n_categories; if (inv_options.categories & arch_inventory_precious) ++n_categories; if (inv_options.categories & arch_inventory_backup) ++n_categories; if (inv_options.categories & arch_inventory_junk) ++n_categories; if (inv_options.categories & arch_inventory_tree) ++n_categories; if (inv_options.categories & arch_inventory_unrecognized) ++n_categories; if (!n_categories) { n_categories = 6; inv_options.categories = arch_inventory_source | arch_inventory_precious | arch_inventory_backup | arch_inventory_tree | arch_inventory_unrecognized; } if (argc == 1) { argv[1] = "."; ++argc; } { int x; int errn; int re_error; for (x = 1; x < argc; ++x) { t_uchar * tree_root; char * bad_file; errn = 0; re_error = 0; if ( vu_access(&errn, argv[x], X_OK | F_OK ) == -1) { safe_printfmt (2, "inventory: Cannot access directory %s\n%s\n", argv[x], errno_to_string(errn)); exit (2); } tree_root = arch_tree_root (0, argv[x], 0); arch_get_inventory_naming_conventions (&inv_options, tree_root); bad_file = 0; arch_inventory_traversal (&inv_options, argv[x], inventory_printer, 0, escape_classes); arch_free_inventory_naming_conventions (&inv_options); lim_free (0, tree_root); } } return 0; } static void inventory_printer (const t_uchar * path, struct stat * stat_buf, enum arch_inventory_category category, const t_uchar * id, int has_source_name, void * closure, int escape_classes) { if ((category != arch_inventory_tree) && !show_dirs && S_ISDIR (stat_buf->st_mode)) return; if (!show_files && !S_ISDIR (stat_buf->st_mode)) return; if (n_categories > 1) { t_uchar * quest = (has_source_name ? "?" : " "); switch (category) { case arch_inventory_source: safe_printfmt (1, "S "); break; case arch_inventory_precious: safe_printfmt (1, "P%s ", quest); break; case arch_inventory_backup: safe_printfmt (1, "B%s ", quest); break; case arch_inventory_junk: safe_printfmt (1, "J%s ", quest); break; case arch_inventory_tree: safe_printfmt (1, "T%s ", quest); break; case arch_inventory_unrecognized: safe_printfmt (1, "U%s ", quest); break; case arch_inventory_excludes: break; } } if (show_kind) { if (S_ISDIR (stat_buf->st_mode)) safe_printfmt (1, "d "); else if (S_ISLNK (stat_buf->st_mode)) safe_printfmt (1, "> "); else safe_printfmt (1, "r "); } if (path[0] == '.' && path[1] == '/') path += 2; { t_uchar * item; item = pika_save_escape_iso8859_1 (0, 0, escape_classes, path); safe_printfmt (1, "%s%s%s\n", item, (show_ids ? "\t" : ""), (show_ids ? (id ? (char *)id : "???") : "")); lim_free (0, item); } } /* tag: Tom Lord Wed May 14 10:52:12 2003 (srcfind.c) */ tla-1.3.5+dfsg/src/tla/libarch/configs.c0000644000175000017500000003127310457622000016506 0ustar useruser/* configs.c: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/bugs/panic.h" #include "hackerlab/os/errno.h" #include "hackerlab/os/errno-to-string.h" #include "hackerlab/char/char-class.h" #include "hackerlab/char/str.h" #include "hackerlab/char/pika-escaping-utils.h" #include "hackerlab/fs/file-names.h" #include "hackerlab/fs/cwd.h" #include "hackerlab/vu/safe.h" #include "hackerlab/arrays/ar.h" #include "tla/libfsutils/ensure-dir.h" #include "tla/libfsutils/safety.h" #include "tla/libfsutils/tmp-files.h" #include "tla/libfsutils/read-line.h" #include "tla/libarch/arch.h" #include "tla/libarch/namespace.h" #include "tla/libarch/project-tree.h" #include "tla/libarch/patch-logs.h" #include "tla/libarch/cmd.h" #include "tla/libarch/cmd-get.h" #include "tla/libarch/configs.h" /* __STDC__ prototypes for static functions */ t_uchar * arch_config_path (t_uchar * tree_root, t_uchar * config_name) { t_uchar * rel = 0; t_uchar * answer = 0; invariant (arch_valid_config_name (config_name)); rel = file_name_in_vicinity (0, "configs", config_name); if (safe_access(rel, F_OK)) { rel = file_name_in_vicinity (0, "", config_name); } answer = file_name_in_vicinity (0, tree_root, rel); lim_free (0, rel); return answer; } rel_table arch_read_config (t_uchar * tree_root, t_uchar * config_name) { t_uchar * config_path = 0; int in_fd; rel_table answer = rel_table_nil; invariant (arch_valid_config_name (config_name)); config_path = arch_config_path (tree_root, config_name); in_fd = safe_open (config_path, O_RDONLY, 0); while (1) { t_uchar * line = 0; t_uchar * pos; line = read_line_from_fd (in_fd); if (!line) break; for (pos = line; char_is_space (*pos); ++pos) ; if (*pos && (*pos != '#')) { t_uchar * end; t_uchar * loc = 0; t_uchar * rev = 0; for (pos = line; char_is_space (*pos); ++pos) ; for (end = pos; *end && !char_is_space (*end); ++end) ; if (end == pos) { safe_printfmt (2, "arch_read_config: illegal config file (%s)\n", config_name); exit (2); } loc = pika_save_unescape_iso8859_1_n (0, 0, pos, end - pos ); for (pos = end; char_is_space (*pos); ++pos) ; for (end = pos; *end && !char_is_space (*end); ++end) ; if (end == pos) { safe_printfmt (2, "arch_read_config: illegal config file (%s)\n", config_name); exit (2); } rev = pika_save_unescape_iso8859_1_n (0, 0, pos, end - pos ); if (!is_non_upwards_relative_path (loc) || !arch_valid_package_name (rev, arch_maybe_archive, arch_req_package, 1)) { safe_printfmt (2, "arch_read_config: illegal config file (%s)\n", config_name); exit (2); } rel_add_records (&answer, rel_make_record_2_taking (rel_make_field_str (loc), rel_make_field_str (rev)), rel_record_null); lim_free (0, loc); lim_free (0, rev); } lim_free (0, line); } lim_free (0, config_path); return answer; } rel_table arch_config_from_tree (t_uchar * tree_root, rel_table config_in) { int here_fd; int x; rel_table answer = rel_table_nil; here_fd = safe_open (".", O_RDONLY, 0); for (x = 0; x < rel_n_records (config_in); ++x) { t_uchar * subtree_path_spec = 0; t_uchar * subtree_path = 0; t_uchar * archive = 0; t_uchar * version = 0; t_uchar * subtree_root = 0; t_uchar * level = 0; t_uchar * revision = 0; t_uchar * fqr = 0; subtree_path_spec = file_name_in_vicinity (0, tree_root, rel_peek_str (config_in, x, 0)); safe_chdir (subtree_path_spec); subtree_path = safe_current_working_directory (); safe_fchdir (here_fd); subtree_root = arch_tree_root (0, subtree_path, 0); invariant (subtree_root && !str_cmp (subtree_root, subtree_path)); archive = arch_parse_package_name (arch_ret_archive, 0, rel_peek_str (config_in, x, 1)); if (arch_valid_package_name (rel_peek_str (config_in, x, 1), arch_maybe_archive, arch_req_version, 1)) version = arch_parse_package_name (arch_ret_package_version, 0, rel_peek_str (config_in, x, 1)); else { t_uchar * package = 0; package = arch_parse_package_name (arch_ret_package, 0, rel_peek_str (config_in, x, 1)); version = arch_latest_logged_version (subtree_root, archive, package); lim_free (0, package); } level = arch_highest_patch_level (subtree_root, archive, version); if (level) { revision = str_alloc_cat_many (0, version, "--", level, str_end); fqr = arch_fully_qualify (archive, revision); } else fqr = arch_fully_qualify (archive, version); rel_add_records (&answer, rel_make_record_2_taking (rel_get_field (config_in, x, 0), rel_make_field_str (fqr)), rel_record_null); lim_free (0, subtree_path_spec); lim_free (0, subtree_path); lim_free (0, archive); lim_free (0, version); lim_free (0, subtree_root); lim_free (0, level); lim_free (0, revision); lim_free (0, fqr); } safe_close (here_fd); return answer; } int arch_begin_new_config (t_uchar * tree_root, t_uchar * name, int force) { int ign; t_uchar * config_file = 0; t_uchar * config_dir = 0; t_uchar * name_tail = 0; t_uchar * tmp_tail = 0; t_uchar * config_tmp = 0; int answer; invariant (arch_valid_config_name (name)); config_file = arch_config_path (tree_root, name); config_dir = file_name_directory_file (0, config_file); name_tail = file_name_tail (0, name); tmp_tail = str_alloc_cat (0, ",,", name_tail); config_tmp = file_name_in_vicinity (0, config_dir, tmp_tail); if (!force && !safe_access (config_file, F_OK)) { safe_printfmt (2, "arch_begin_new_config: config already exists (%s)\n", name); exit (2); } ensure_directory_exists (config_dir); vu_unlink (&ign, config_tmp); answer = safe_open (config_tmp, O_WRONLY | O_CREAT | O_EXCL, 0666); lim_free (0, config_file); lim_free (0, config_dir); lim_free (0, name_tail); lim_free (0, tmp_tail); lim_free (0, config_tmp); return answer; } void arch_finish_new_config (int fd, t_uchar * tree_root, t_uchar * name, int force) { t_uchar * config_file = 0; t_uchar * config_dir = 0; t_uchar * name_tail = 0; t_uchar * tmp_tail = 0; t_uchar * config_tmp = 0; invariant (arch_valid_config_name (name)); config_file = arch_config_path (tree_root, name); config_dir = file_name_directory_file (0, config_file); name_tail = file_name_tail (0, name); tmp_tail = str_alloc_cat (0, ",,", name_tail); config_tmp = file_name_in_vicinity (0, config_dir, tmp_tail); safe_close (fd); if (!force && !safe_access (config_file, F_OK)) { safe_printfmt (2, "arch_begin_new_config: config already exists (%s)\n", name); exit (2); } safe_rename (config_tmp, config_file); lim_free (0, config_file); lim_free (0, config_dir); lim_free (0, name_tail); lim_free (0, tmp_tail); lim_free (0, config_tmp); } void arch_build_config (t_uchar * tree_root, t_uchar * config_name, struct arch_build_config_params * params, t_uchar * default_archive) { rel_table config = rel_table_nil; int x; config = arch_read_config (tree_root, config_name); /* Ensure a shallowist to deepest sort */ rel_sort_table_by_field (0, config, 0); /* move conflicting dirs and files */ for (x = 0; x < rel_n_records (config); ++x) { int errn; t_uchar * path = 0; t_uchar * path_dir = 0; t_uchar * path_tail = 0; t_uchar * saved_tail = 0; t_uchar * saved_path = 0; path = file_name_in_vicinity (0, tree_root, rel_peek_str (config, x, 0)); path_dir = file_name_directory_file (0, path); path_tail = file_name_tail (0, path); saved_tail = str_alloc_cat (0, "++saved.", path_tail); saved_path = tmp_file_name (path_dir, saved_tail); if (vu_rename (&errn, path, saved_path) && (errn != ENOENT)) { safe_printfmt (2, "build-config: unable to set aside conflicting directory %s\n", path); exit (2); } lim_free (0, path); lim_free (0, path_dir); lim_free (0, path_tail); lim_free (0, saved_tail); lim_free (0, saved_path); } /* build desired trees. */ for (x = 0; x < rel_n_records (config); ++x) { t_uchar * path_to_subtree = 0; t_uchar * path_to_subtree_dir = 0; const t_uchar * revspec; int status; path_to_subtree = file_name_in_vicinity (0, tree_root, rel_peek_str (config, x, 0)); path_to_subtree_dir = file_name_directory_file (0, path_to_subtree); ensure_directory_exists (path_to_subtree_dir); revspec = rel_peek_str (config, x, 1); { char ** argv = 0; char * revspec_copy = 0; char * path_to_subtree_copy = 0; /* call `get' -- build an argv for it */ *(char **)ar_push ((void **)&argv, 0, sizeof (char *)) = "get"; if (default_archive) { *(char **)ar_push ((void **)&argv, 0, sizeof (char *)) = "-A"; *(char **)ar_push ((void **)&argv, 0, sizeof (char *)) = default_archive; } if (params->no_pristines) { *(char **)ar_push ((void **)&argv, 0, sizeof (char *)) = "--no-pristine"; } if (params->hardlinks) { *(char **)ar_push ((void **)&argv, 0, sizeof (char *)) = "--link"; } if (params->library) { *(char **)ar_push ((void **)&argv, 0, sizeof (char *)) = "--library"; } if (params->sparse) { *(char **)ar_push ((void **)&argv, 0, sizeof (char *)) = "--sparse"; } revspec_copy = str_save (0, revspec); path_to_subtree_copy = str_save (0, path_to_subtree); *(char **)ar_push ((void **)&argv, 0, sizeof (char *)) = revspec_copy; *(char **)ar_push ((void **)&argv, 0, sizeof (char *)) = path_to_subtree_copy; *(char **)ar_push ((void **)&argv, 0, sizeof (char *)) = 0; status = arch_cmd_get ("get", (ar_size ((void *)argv, 0, sizeof (char *)) - 1), argv); ar_free ((void **)&argv, 0); lim_free (0, revspec_copy); lim_free (0, path_to_subtree_copy); } if (status) { safe_printfmt (2, "unable to build %s at %s\n", revspec, path_to_subtree); exit (status); } lim_free (0, path_to_subtree); lim_free (0, path_to_subtree_dir); } if (params->release_id) { int errn; t_uchar * tree_version = 0; t_uchar * tree_revision = 0; t_uchar * release_id_file = 0; rel_table snapped_config = rel_table_nil; int out_fd; tree_version = arch_tree_version (tree_root); if (tree_version) { t_uchar * archive = 0; t_uchar * version = 0; t_uchar * level = 0; archive = arch_parse_package_name (arch_ret_archive, 0, tree_version); version = arch_parse_package_name (arch_ret_non_archive, 0, tree_version); level = arch_highest_patch_level (tree_root, archive, version); tree_revision = str_alloc_cat_many (0, tree_version, "--", level, str_end); lim_free (0, archive); lim_free (0, version); lim_free (0, level); } snapped_config = arch_config_from_tree (tree_root, config); release_id_file = file_name_in_vicinity (0, tree_root, "=RELEASE-ID"); invariant (!vu_unlink (&errn, release_id_file) || (errn == ENOENT)); out_fd = safe_open (release_id_file, O_WRONLY | O_CREAT | O_EXCL, 0666); safe_printfmt (out_fd, "# automatically generated release id (by tla build-config)\n"); safe_printfmt (out_fd, "#\n"); safe_printfmt (out_fd, "\n"); safe_printfmt (out_fd, "%s(%s)\n", (tree_revision ? tree_revision : (t_uchar *)""), config_name); safe_printfmt (out_fd, "\n"); rel_print_pika_escape_iso8859_1_table (out_fd, arch_escape_classes, snapped_config); safe_close (out_fd); lim_free (0, tree_version); lim_free (0, tree_revision); lim_free (0, release_id_file); rel_free_table (snapped_config); } rel_free_table (config); } /* tag: Tom Lord Fri May 30 00:05:24 2003 (configs.c) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-find-pristine.c0000644000175000017500000001327010457622000020367 0ustar useruser/* cmd-find-pristine.c * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "config-options.h" #include "hackerlab/cmd/main.h" #include "tla/libarch/namespace.h" #include "tla/libarch/project-tree.h" #include "tla/libarch/pristines.h" #include "tla/libarch/cmd.h" #include "tla/libarch/cmd-find-pristine.h" static t_uchar * usage = "[options] revision"; static t_uchar * version_string = (cfg__std__package " from regexps.com\n" "\n" "Copyright 2003 Tom Lord\n" "\n" "This is free software; see the source for copying conditions.\n" "There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\n" "PARTICULAR PURPOSE.\n" "\n" "Report bugs to " cfg__tla_bug_mail ".\n" "\n" cfg__std__release_id_string "\n"); #define OPTS(OP) \ OP (opt_help_msg, "h", "help", 0, \ "Display a help message and exit.") \ OP (opt_long_help, "H", 0, 0, \ "Display a verbose help message and exit.") \ OP (opt_version, "V", "version", 0, \ "Display a release identifier string\n" \ "and exit.") \ OP (opt_archive, "A", "archive", 1, \ "Override `my-default-archive'") \ OP (opt_dir, "d", "dir DIR", 1, \ "cd to DIR first") \ OP (opt_unlocked, "u", "unlocked", 0, \ "return only an unlocked pristine") \ OP (opt_locked, "l", "locked", 0, \ "return only a locked pristine") \ OP (opt_no_siblings, "t", "tree-only", 0, \ "search this tree only, not siblings") \ OP (opt_silent, "s", "silent", 0, \ "exit status only") t_uchar arch_cmd_find_pristine_help[] = ("find and print the path to a pristine revision\n" "Print the location of a pristine copy of the indicated revision\n"); enum options { OPTS (OPT_ENUM) }; static struct opt_desc opts[] = { OPTS (OPT_DESC) {-1, 0, 0, 0, 0} }; int arch_cmd_find_pristine (t_uchar * program_name, int argc, char * argv[]) { int o; struct opt_parsed * option; int silent; int pristine_type; enum arch_pristine_search_scope scope; char * dir; t_uchar * default_archive; silent = 0; pristine_type = arch_any_pristine; scope = arch_tree_and_sibling_pristine_search; dir = str_save (0, "."); default_archive = 0; safe_buffer_fd (1, 0, O_WRONLY, 0); option = 0; while (1) { o = opt_standard (lim_use_must_malloc, &option, opts, &argc, argv, program_name, usage, version_string, arch_cmd_find_pristine_help, opt_help_msg, opt_long_help, opt_version); if (o == opt_none) break; switch (o) { default: safe_printfmt (2, "unhandled option `%s'\n", option->opt_string); panic ("internal error parsing arguments"); usage_error: opt_usage (2, argv[0], program_name, usage, 1); exit (1); /* bogus_arg: */ safe_printfmt (2, "ill-formed argument for `%s' (`%s')\n", option->opt_string, option->arg_string); goto usage_error; case opt_archive: { lim_free (0, default_archive); default_archive = str_save (0, option->arg_string); break; } case opt_dir: { lim_free (0, dir); dir = str_save (0, option->arg_string); break; } case opt_silent: { silent = 1; break; } case opt_unlocked: { pristine_type = arch_unlocked_pristine; break; } case opt_locked: { pristine_type = arch_locked_pristine; break; } case opt_no_siblings: { scope = arch_tree_pristine_search; break; } } } if (argc != 2) goto usage_error; { t_uchar * revspec; t_uchar * tree_root = 0; t_uchar * archive = 0; t_uchar * revision = 0; t_uchar * pristine_path = 0; int is_locked = 0; if (default_archive && !arch_valid_archive_name (default_archive)) { safe_printfmt (2, "%s: invalid archive name (%s)\n", argv[0], default_archive); exit (2); } revspec = argv[1]; if (!arch_valid_package_name (revspec, arch_maybe_archive, arch_req_patch_level, 0)) { safe_printfmt (2, "%s: invalid revision name (%s)\n", argv[0], revspec); exit (2); } archive = arch_parse_package_name (arch_ret_archive, default_archive, revspec); revision = arch_parse_package_name (arch_ret_non_archive, 0, revspec); tree_root = arch_tree_root (0, dir, 0); if (!tree_root) { safe_printfmt (2, "%s: directory is not a project tree (%s)\n", argv[0], dir); exit (2); } pristine_path = arch_find_pristine (&is_locked, tree_root, archive, revision, pristine_type, scope); if (pristine_path) safe_printfmt (1, "%s\n", pristine_path); else { if (!silent) { safe_printfmt (2, "%s: unable to find pristine for %s/%s\n", argv[0], archive, revision); } exit (1); } } return 0; } /* tag: Tom Lord Wed May 21 19:30:43 2003 (find-pristine.c) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-rbrowse.c0000644000175000017500000004700710457622000017304 0ustar useruser/* cmd-rbrowse.c * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "config-options.h" #include "hackerlab/cmd/main.h" #include "hackerlab/char/str.h" #include "tla/libarch/my.h" #include "tla/libarch/namespace.h" #include "tla/libarch/cmd-rbrowse.h" #include "tla/libarch/patch-logs.h" #include "tla/libarch/project-tree.h" #include "tla/libarch/archive.h" #include "tla/libarch/archives.h" /* __STDC__ prototypes for static functions */ static void rbrowse_print_logs (rel_table patch_output, int summarized_headers); static rel_table rbrowse_patchlog (struct arch_archive * arch, regex_t patch_regex_needle, const t_uchar * version, rel_table saved_since); static int rbrowse_since_has_newest (t_uchar * revision, rel_table saved_since); static t_uchar * rbrowse_revision_range (const t_uchar * latest_revision); static void rbrowse_build_since_table (struct arch_archive *arch, const t_uchar *version, rel_table * since_output); static rel_table rbrowse_load_since (const t_uchar *filename); static void rbrowse_save_since (const t_uchar *filename, int snap_force, rel_table since_table); static t_uchar * usage = "[options] [[ARCHIVE_NAME/]LIMIT_REGEX]"; static t_uchar * version_string = (cfg__std__package " from regexps.com\n" "\n" "Copyright 2003 Tom Lord\n" "\n" "This is free software; see the source for copying conditions.\n" "There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\n" "PARTICULAR PURPOSE.\n" "\n" "Report bugs to " cfg__tla_bug_mail ".\n" "\n" cfg__std__release_id_string "\n"); #define OPTS(OP) \ OP (opt_help_msg, "h", "help", 0, \ "Display a help message and exit.") \ OP (opt_long_help, "H", 0, 0, \ "Display a verbose help message and exit.") \ OP (opt_version, "V", "version", 0, \ "Display a release identifier string") \ OP (opt_all_archives, 0, "all", 0, \ "Search all archives") \ OP (opt_since, 0, "since SNAP-FILE", 1, \ "Only show differences since SNAP-FILE") \ OP (opt_snap, 0, "snap SNAP-FILE", 1, \ "Snap an archive") \ OP (opt_snap_force, "f", "snap-force", 0, \ "Force snap writing") \ OP (opt_log_reverse, "r", 0 , 0, \ "Reverse patch logs") \ OP (opt_log_summary, "s", 0 , 0, \ "Print the summary of matching patches") \ OP (opt_log_creator, "c", 0 , 0, \ "Print the creator of matching patches") \ OP (opt_log_date, "D", 0 , 0, \ "Print the date of matching patches") \ OP (opt_patch_regex, 0, "patch-regex REGEX", 1, \ "Only show revisions that contain [REGEX]\n" \ "(implies -s)") \ OP (opt_archive, "A", "archive", 1, \ "Use [archive] instead of default") \ OP (opt_unhide_sealed, 0, "show-sealed", 0, \ "Do not hide sealed branches") t_uchar arch_cmd_rbrowse_help[] = ("print an outline describing an archive's contents\n" "\n" "an outline of an archive will be printed, showing the\n" "categories, branches and revisions of the specified archive\n" "if no archive is given then `my-default-archive` is used.\n" "\n" "If [LIMIT REGEX] is specified, revisions will only be shown\n" "if the category, branch or version matches [LIMIT REGEX]. If\n" "--patch-regex [REGEX] is given, then only patchlogs matching\n" "[REGEX] will be given" ); enum options { OPTS (OPT_ENUM) }; static struct opt_desc opts[] = { OPTS (OPT_DESC) {-1, 0, 0, 0, 0} }; int arch_cmd_rbrowse (t_uchar * program_name, int argc, char * argv[]) { int o; int w; int all_archives = 0; int snap_force = 0; int summarized_headers = 0; int want_logs = 0; int unhide_sealed = 0; int log_reverse=0; struct opt_parsed * option = 0; regex_t patch_regex_needle; regex_t limit_regex_needle; t_uchar * errname; t_uchar * snap_file = 0; t_uchar * since_filename = 0; t_uchar * default_archive = 0; t_uchar * patch_regex = 0; t_uchar * limit_regex = 0; rel_table since_output = rel_table_nil; rel_table saved_since = rel_table_nil; rel_table archive_list = rel_table_nil; errname = argv[0]; /* safe_buffer_fd (1, 0, O_WRONLY, 0); */ while (1) { o = opt_standard (lim_use_must_malloc, &option, opts, &argc, argv, program_name, usage, version_string, arch_cmd_rbrowse_help, opt_help_msg, opt_long_help, opt_version); if (o == opt_none) break; switch (o) { default: safe_printfmt (2, "unhandled option `%s'\n", option->opt_string); panic ("internal error parsing arguments"); usage_error: opt_usage (2, argv[0], program_name, usage, 1); exit (1); /* bogus_arg: */ safe_printfmt (2, "ill-formed argument for `%s' (`%s')\n", option->opt_string, option->arg_string); goto usage_error; case opt_all_archives: { all_archives = 1; break; } case opt_snap: { snap_file = str_save(0, option->arg_string); break; } case opt_snap_force: { snap_force = 1; break; } case opt_since: { if (since_filename) panic("snap-file specified more than once!"); since_filename = str_save(0, option->arg_string); break; } case opt_archive: { default_archive = str_save(0, option->arg_string); break; } case opt_log_summary: { summarized_headers |= arch_include_summary; want_logs = 1; break; } case opt_log_creator: { summarized_headers |= arch_include_creator; want_logs = 1; break; } case opt_log_date: { summarized_headers |= arch_include_date; want_logs = 1; break; } case opt_log_reverse: { log_reverse = (! log_reverse); want_logs = 1; break; } case opt_unhide_sealed: { unhide_sealed = 1; break; } case opt_patch_regex: { if (patch_regex) panic("patch regex given more than once!"); patch_regex = str_save(0, option->arg_string); summarized_headers |= arch_include_summary; want_logs = 1; break; } } } if (argc > 2) goto usage_error; /* This is slightly long. Basically, we're checking to see if we were * given an limit regex that looks like archive_name/regex. If so, then * we need to split them up. */ if (argc == 1) limit_regex = str_save (0, ".*"); else { t_uchar *slash; /* Did the user give us something resembling archive/regex ? */ if ( 0 == (slash = str_chr_index (argv[1], '/'))) limit_regex = str_save (0, argv[1]); else { if (default_archive) panic ("Archive specified twice! "); limit_regex = str_save(0, argv[1]); default_archive = str_separate (&limit_regex, "/"); if (! limit_regex) limit_regex = str_save (0, ".*"); /* limit_regex unset, so make something sensible */ } } if (!default_archive) default_archive = arch_my_default_archive (default_archive); if (regcomp(&limit_regex_needle, limit_regex, REG_EXTENDED)) panic ("Invalid regular expression given for limit."); if (! patch_regex) patch_regex = str_save(0, ".*"); if (regcomp(&patch_regex_needle, patch_regex, REG_EXTENDED)) panic ("Invalid regular expression given for patch."); if (since_filename) saved_since = rbrowse_load_since (since_filename); if (!arch_valid_archive_name (default_archive)) panic ("Invalid archive given"); if (! all_archives) { rel_add_records (&archive_list, rel_singleton_record_taking (rel_make_field_str (default_archive)), rel_record_null); } else { archive_list = arch_registered_archives (); } for (w = 0; w < rel_n_records (archive_list); w++) { int x; int y; int z; int shown_archive = 0; struct arch_archive * arch = 0; rel_table categories = rel_table_nil; if (str_cmp("-MIRROR", str_chr_rindex(rel_peek_str (archive_list, w, 0), '-')) == 0 || str_cmp("-SOURCE", str_chr_rindex(rel_peek_str (archive_list, w, 0), '-')) == 0 ) continue; arch = arch_archive_connect(rel_peek_str (archive_list, w, 0), 0); categories = arch_archive_categories(arch); for (x = 0; x < rel_n_records (categories); ++x) { int shown_category = 0; rel_table branches = rel_table_nil; branches = arch_archive_branches(arch, rel_peek_str (categories, x, 0)); for (y = 0; y < rel_n_records (branches); ++y) { int shown_branch = 0; rel_table versions = rel_table_nil; versions = arch_archive_versions(arch, rel_peek_str (branches, y, 0)); for (z = 0; z < rel_n_records (versions); ++z) { int needshow = 0; int version_show = 0; int since_changed = 0; int limit_since; int have_patches=0; int sealed_branch; t_uchar * patch; t_uchar * only_patch; t_uchar * patch_line = 0; rel_table patch_output; patch = arch_archive_latest_revision(arch, rel_peek_str (versions, z, 0),1); if (!patch) { only_patch = str_save (0, ""); } else { only_patch = arch_parse_package_name (arch_ret_patch_level, 0, patch); } if (! since_filename) { since_changed = 1; limit_since = 1; } else { limit_since = 0; since_changed = ! rbrowse_since_has_newest (patch, saved_since); } if (snap_file) rbrowse_build_since_table (arch, rel_peek_str (versions, z, 0), &since_output); if (regexec (&limit_regex_needle, rel_peek_str (versions, z, 0), 0, 0, 0) == 0) version_show = 1; needshow = needshow || since_changed; needshow = needshow && version_show; if (needshow && want_logs) { patch_output = rbrowse_patchlog(arch, patch_regex_needle, rel_peek_str (versions, z, 0), saved_since); have_patches = !! rel_n_records(patch_output); needshow = needshow && have_patches; } if (needshow) { sealed_branch = ! str_cmp_prefix ("version", only_patch); needshow = needshow && !(sealed_branch && !(unhide_sealed) ); } if (needshow) { if (!shown_archive) { shown_archive = 1; safe_printfmt (1,"%s\n", rel_peek_str (archive_list, w, 0)); } if (!shown_category) { shown_category = 1; safe_printfmt (1, " %s\n", rel_peek_str (categories, x, 0)); } if (!shown_branch) { shown_branch = 1; safe_printfmt(1, " %s\n", rel_peek_str (branches, y, 0)); } safe_printfmt(1, " %s\n", rel_peek_str (versions, z, 0)); patch_line = rbrowse_revision_range (only_patch); safe_printfmt(1, " %s\n\n", patch_line); lim_free(0, patch_line); if (want_logs) { if (log_reverse && rel_n_records(patch_output) > 1) rel_reverse_table (patch_output); rbrowse_print_logs (patch_output, summarized_headers); } } if (have_patches) rel_free_table(patch_output); lim_free(0, patch); lim_free(0, only_patch); } rel_free_table(versions); } rel_free_table(branches); } rel_free_table(categories); } if (snap_file) { if (!rel_n_records (since_output)) panic("Nothing to Snap!"); else { rbrowse_save_since (snap_file, snap_force, since_output); rel_free_table (since_output); } } return 0; } static void rbrowse_print_logs (rel_table patch_output, int summarized_headers) { int x; for (x = 0 ; x < rel_n_records(patch_output); ++x) { assoc_table headers = 0; t_uchar * this_revision; t_uchar * patch_name; arch_parse_log (0, &headers, 0, rel_peek_str (patch_output, x, 0)); this_revision = str_save (0, assoc_get_str_taking (headers, rel_make_field_str ("revision"))); patch_name = arch_parse_package_name (arch_ret_patch_level, 0, this_revision); if (summarized_headers) { safe_printfmt(1, " %s\n", patch_name); arch_print_headers_summary (1, 18, headers, summarized_headers); safe_printfmt(1, "\n"); free_assoc_table (headers); } lim_free(0, this_revision); lim_free(0, patch_name); } } static rel_table rbrowse_patchlog (struct arch_archive * arch, regex_t patch_regex_needle, const t_uchar * version, rel_table saved_since) { rel_table revisions; rel_table patch_output = rel_table_nil; int saw_since; int x=0; saw_since = (! rel_n_records(saved_since)); revisions = arch_archive_revisions(arch, version, 1); for (x = 0; x < rel_n_records(revisions); ++x) { int y; int missing_in_since = 1; t_uchar *revisions_version; revisions_version = arch_parse_package_name (arch_ret_package_version, 0, rel_peek_str (revisions, x, 0)); /* First, see if our revision exists in the since file */ for (y=0; y < rel_n_records(saved_since); ++y) { t_uchar *since_version; since_version = arch_parse_package_name (arch_ret_package_version, 0, rel_peek_str (saved_since, y, 0)); if (str_cmp(revisions_version, since_version) == 0) missing_in_since = 0; lim_free (0, since_version); } if (saw_since || missing_in_since) { t_uchar * log; t_uchar * revision; t_uchar * summary; assoc_table headers = 0; revision = str_chr_index (rel_peek_str (revisions, x, 0), '/'); revision++; log = arch_archive_log(arch, revision); arch_parse_log (0, &headers, 0, log); summary = str_save (0, assoc_get_str_taking (headers, rel_make_field_str ("summary"))); if (regexec (&patch_regex_needle, summary, 0, 0, 0) == 0) { rel_add_records (&patch_output, rel_singleton_record_taking (rel_make_field_str (log)), rel_record_null); } lim_free(0, summary); lim_free(0, log); free_assoc_table (headers); } if (! saw_since) { int z; for (z = 0 ; z < rel_n_records(saved_since); z++) { if ( str_cmp(rel_peek_str (revisions, x, 0), rel_peek_str (saved_since, z, 0)) == 0) saw_since = 1; } } lim_free (0, revisions_version); } return patch_output; } static int rbrowse_since_has_newest (t_uchar * revision, rel_table saved_since) { int exists=0; int x; for (x=0; x < rel_n_records (saved_since); ++x) { if (str_cmp (revision, rel_peek_str (saved_since, x, 0)) == 0) exists = 1; } return exists; } static t_uchar * rbrowse_revision_range (const t_uchar * latest_revision) { t_uchar *retval; if (str_length (latest_revision) < 1) { retval = str_save (0, ""); } else if (str_cmp(latest_revision, "base-0") == 0) { retval = str_save (0, "base-0"); } else retval = str_alloc_cat_many (0, "base-0 .. ", latest_revision, str_end); return retval; } static void rbrowse_build_since_table (struct arch_archive *arch, const t_uchar *version, rel_table * since_output) { t_uchar *latest_revision; latest_revision = arch_archive_latest_revision (arch, version, 1); rel_add_records (since_output, rel_singleton_record_taking (rel_make_field_str (latest_revision)),rel_record_null); lim_free(0, latest_revision); } static rel_table rbrowse_load_since (const t_uchar *filename) { int in_fd; rel_table since_table; int x; in_fd = safe_open (filename, O_RDONLY, 0); since_table = rel_read_table (in_fd, 1, "rbrowse_load_since" , filename); for (x=0; x < rel_n_records( since_table ); ++x) { if (! arch_valid_package_name( rel_peek_str (since_table, x, 0), arch_maybe_archive, arch_req_version, 1)) { safe_printfmt (2, "illegal line ('%s') in since file '%s'\n", rel_peek_str (since_table, x, 0), filename); exit(1); } } safe_close (in_fd); return since_table; } static void rbrowse_save_since (const t_uchar *filename, int snap_force, rel_table since_table) { int out_fd; int x; out_fd = safe_open (filename, O_WRONLY | O_CREAT | (snap_force ? 0 : O_EXCL), 0666); for (x = 0; x < rel_n_records(since_table); ++x) { safe_printfmt(out_fd, "%s\n", rel_peek_str (since_table, x, 0)); } safe_close (out_fd); } /* tag: James Blackwell Thu Dec 11 16:50:14 EST 2003 (cmd-rbrowse.c) */ tla-1.3.5+dfsg/src/tla/libarch/arbdelta.h0000644000175000017500000000157710457622000016645 0ustar useruser/* arbdelta.h: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__ARBDELTA_H #define INCLUDE__LIBARCH__ARBDELTA_H #include "tla/libarch/archive.h" /* automatically generated __STDC__ prototypes */ extern void arch_arbitrary_delta (int chatter_fd, t_uchar * output_dir, t_uchar * tmp_dir, t_uchar * tree_root, struct arch_archive * orig_arch, t_uchar * orig_archive, t_uchar * orig_revision, struct arch_archive * mod_arch, t_uchar * mod_archive, t_uchar * mod_revision, int escape_classes); #endif /* INCLUDE__LIBARCH__ARBDELTA_H */ /* tag: Tom Lord Sat Jan 5 15:26:10 2002 (arbdelta.h) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-replay.c0000644000175000017500000003556710457622000017125 0ustar useruser/* cmd-replay.c: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "config-options.h" #include "hackerlab/cmd/main.h" #include "hackerlab/fs/file-names.h" #include "hackerlab/fs/cwd.h" #include "hackerlab/vu/vu-dash.h" #include "tla/libfsutils/tmp-files.h" #include "tla/libfsutils/rmrf.h" #include "tla/libfsutils/copy-file.h" #include "tla/libfsutils/dir-as-cwd.h" #include "tla/libarch/namespace.h" #include "tla/libarch/project-tree.h" #include "tla/libarch/my.h" #include "tla/libarch/missing.h" #include "tla/libarch/whats-new.h" #include "tla/libarch/invent.h" #include "tla/libarch/archive.h" #include "tla/libarch/pristines.h" #include "tla/libarch/build-revision.h" #include "tla/libarch/replay.h" #include "tla/libarch/cmd.h" #include "tla/libarch/cmd-replay.h" #include "tla/libarch/cmdutils.h" static t_uchar * usage = "[options] [version/revision...]"; static t_uchar * version_string = (cfg__std__package " from regexps.com\n" "\n" "Copyright 2003 Tom Lord\n" "\n" "This is free software; see the source for copying conditions.\n" "There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\n" "PARTICULAR PURPOSE.\n" "\n" "Report bugs to " cfg__tla_bug_mail ".\n" "\n" cfg__std__release_id_string "\n"); #define OPTS(OP) \ OP (opt_help_msg, "h", "help", 0, \ "Display a help message and exit.") \ OP (opt_long_help, "H", 0, 0, \ "Display a verbose help message and exit.") \ OP (opt_version, "V", "version", 0, \ "Display a release identifier string\n" \ "and exit.") \ OP (opt_archive, "A", "archive", 1, \ "Override `my-default-archive'") \ OP (opt_list, 0, "list FILE", 1, \ "read a list of patches to apply") \ OP (opt_new, 0, "new", 0, \ "replay only new patches") \ OP (opt_reverse, 0, "reverse", 0, \ "reverse the named patch") \ OP (opt_forward, "N", "forward", 0, \ "pass the --forward option to `patch'") \ OP (opt_dir, "d", "dir DIR", 1, \ "Operate on project tree in DIR (default `.')") \ OP (opt_dest, 0, "dest DEST", 1, \ "Instead of modifying the project tree in-place,\n" \ "make a copy of it to DEST and apply the result to that") \ OP (opt_skip_present, 0, "skip-present", 0, \ "skip patches that contain 1 or more patch logs already in this tree") \ OP (opt_unescaped, 0, "unescaped", 0, \ "show filenames in unescaped form") t_uchar arch_cmd_replay_help[] = ("apply revision changesets to a project tree\n" "The result is formed by applying patches in the latest revision of\n" "VERSION (or the default version of the project tree), stopping after\n" "the first patch that causes conflicts. If multiple VERSIONs are\n" "specified, they are applied in turn.\n" "\n" "If one or more specific REVISIONs (including patch-levels) is specified\n" "instead, only those patch sets, and no others, will be applied.\n" "\n" "With the --list option, read a list of patches to apply from FILE\n" "(- for standard input). Complete revision names should be listed, one\n" "per line. replay will stop at the first patch in the list that causes\n" "a merge conflict, leaving behind files with names of the form:\n" "\n" " ,,replay.conflicts-in -- the name of the patch that caused conflicts\n" "\n" " ,,replay.remaining -- the list of patches not yet applied\n" ); enum options { OPTS (OPT_ENUM) }; static struct opt_desc opts[] = { OPTS (OPT_DESC) {-1, 0, 0, 0, 0} }; enum op { arch_replay_op_unspecified, arch_replay_op_missing, arch_replay_op_exact, arch_replay_op_list, arch_replay_op_new, }; int arch_cmd_replay (t_uchar * program_name, int argc, char * argv[]) { int o; struct opt_parsed * option; t_uchar * default_archive = 0; t_uchar * list_file = 0; t_uchar * dir = 0; t_uchar * dest = 0; int reverse = 0; int forward = 0; int skip_present = 0; enum op action = arch_replay_op_unspecified; int escape_classes = arch_escape_classes; int exit_status = 0; vu_push_dash_handler (0); safe_buffer_fd (1, 0, O_WRONLY, 0); option = 0; while (1) { o = opt_standard (lim_use_must_malloc, &option, opts, &argc, argv, program_name, usage, version_string, arch_cmd_replay_help, opt_help_msg, opt_long_help, opt_version); if (o == opt_none) break; switch (o) { default: safe_printfmt (2, "unhandled option `%s'\n", option->opt_string); panic ("internal error parsing arguments"); usage_error: opt_usage (2, argv[0], program_name, usage, 1); exit (1); /* bogus_arg: */ safe_printfmt (2, "ill-formed argument for `%s' (`%s')\n", option->opt_string, option->arg_string); goto usage_error; case opt_archive: { lim_free (0, default_archive); default_archive = str_save (0, option->arg_string); break; } case opt_list: { action = arch_replay_op_list; lim_free (0, list_file); list_file = str_save (0, option->arg_string); break; } case opt_new: { action = arch_replay_op_new; break; } case opt_dir: { lim_free (0, dir); dir = str_save (0, option->arg_string); break; } case opt_dest: { lim_free (0, dest); dest = str_save (0, option->arg_string); break; } case opt_reverse: { reverse = 1; break; } case opt_forward: { forward = 1; break; } case opt_skip_present: { skip_present = 1; break; } case opt_unescaped: { escape_classes = 0; break; } } } if (! dir) dir = str_save (0, "."); if (default_archive && !arch_valid_archive_name (default_archive)) { safe_printfmt (2, "%s: invalid archive name (%s)\n", argv[0], default_archive); exit (1); } { t_uchar * tree_root = 0; tree_root = arch_tree_root (0, dir, 0); if (!tree_root) { safe_printfmt (2, "%s: dir not in a project tree (%s)\n", argv[0], dir); exit (1); } if (dest) { t_uchar * dest_dir_spec = 0; t_uchar * dest_dir = 0; t_uchar * dest_tail = 0; dest_dir_spec = file_name_directory_file (0, dest); if (!dest_dir_spec) dest_dir_spec = str_save (-0, "."); dest_dir = directory_as_cwd (dest_dir_spec); dest_tail = file_name_tail (0, dest); lim_free (0, dest); dest = file_name_in_vicinity (0, dest_dir, dest_tail); lim_free (0, dest_dir_spec); lim_free (0, dest_dir); lim_free (0, dest_tail); } /* Validate arguments. */ if (argc == 1) /* No arguments. */ { if (action == arch_replay_op_unspecified) action = arch_replay_op_missing; /* use default */ } else /* At least one version/revision argument. */ { int i; if (action == arch_replay_op_list) { safe_printfmt (2, "%s: --list requires no arguments\n", argv[0]); exit (1); } /* If no specific operation was specified, pick one based on what sort of argument the user gave. */ if (action == arch_replay_op_unspecified) { if (arch_valid_package_name (argv[1], arch_maybe_archive, arch_req_patch_level, 1)) action = arch_replay_op_exact; /* a revision arg */ else action = arch_replay_op_missing; /* (maybe) a version arg */ } /* Make sure all arguments are syntactically correct. */ for (i = 1; i < argc; i++) if (! arch_valid_package_name (argv[i], arch_maybe_archive, (action == arch_replay_op_exact ? arch_req_patch_level : arch_req_version), 0)) { safe_printfmt (2, "%s: invalid %s spec (%s)\n", argv[0], (action == arch_replay_op_exact ? "revision" : "version"), argv[i]); exit (1); } } if (dest) { rel_table to_copy = rel_table_nil; const int full_meta = arch_tree_has_meta_flag (tree_root); safe_printfmt (1, "* copying target tree\n"); safe_flush (1); to_copy = arch_source_inventory (tree_root, 1, 1, 0); safe_mkdir (dest, 0777); copy_file_list (dest, tree_root, to_copy, full_meta); rel_free_table (to_copy); } else { dest = str_save (0, tree_root); } switch (action) { default: { panic ("internal error -- unrecognized `op'"); break; /* notreached */ } case arch_replay_op_exact: { int i; for (i = 1; i < argc && exit_status == 0; i++) { t_uchar * archive = arch_parse_package_name (arch_ret_archive, default_archive, argv[i]); struct arch_archive *arch = arch_archive_connect (archive, 0); t_uchar * revision = arch_parse_package_name (arch_ret_non_archive, 0, argv[i]); arch_check_for (arch, arch_req_patch_level, revision); if ((!skip_present) || (!arch_revision_has_present_patch (tree_root, arch, revision))) exit_status = arch_replay_exact (1, 0, dest, arch, revision, reverse, forward, escape_classes); lim_free (0, revision); lim_free (0, archive); arch_archive_close (arch); } break; } case arch_replay_op_missing: case arch_replay_op_new: { int total_records = 0; int arg; if (reverse) { safe_printfmt (2, "%s: --reverse requires a specific revision\n", argv[0]); exit (1); } /* Note the trick we use here: we use a do-while loop to * iterate over the arguments; in the case where the initial * loop index is already past the loop bound, the loop will * still be executed once, which the loop body will consider * to mean `use the default'. */ arg = 1; do { t_uchar * src_spec = 0; t_uchar * archive = 0; struct arch_archive * arch = 0; t_uchar * version = 0; rel_table revisions = rel_table_nil; int records, x; if (arg == argc) /* Actually no argument were specified, use the default. */ src_spec = arch_tree_version (tree_root); else src_spec = argv[arg]; archive = arch_parse_package_name (arch_ret_archive, default_archive, src_spec); arch = arch_archive_connect (archive, 0); version = arch_parse_package_name (arch_ret_non_archive, 0, src_spec); arch_check_for (arch, arch_req_version, src_spec); if (action == arch_replay_op_missing) revisions = arch_missing (tree_root, arch, version, skip_present); else revisions = arch_whats_new (tree_root, arch, version, skip_present); records = rel_n_records (revisions); total_records += records; for (x = 0; x < records; ++x) { const t_uchar * t; t_uchar * new_t = 0; t = rel_peek_str (revisions, x, 0); new_t = str_alloc_cat_many (0, version, "--", t, str_end); rel_set_taking (revisions, x, 0, rel_make_field_str (new_t)); lim_free (0, new_t); } exit_status = arch_replay_list (1, 0, dest, arch, revisions, 0, forward, escape_classes); lim_free (0, version); rel_free_table (revisions); lim_free (0, archive); arch_archive_close (arch); } while (exit_status == 0 && ++arg < argc); if (total_records == 0) safe_printfmt (1, "* tree is already up to date\n"); break; } case arch_replay_op_list: { int in_fd = -1; rel_table revisions = rel_table_nil; int x; in_fd = safe_open (list_file, O_RDONLY, 0); revisions = rel_read_table (in_fd, 1, argv[0], list_file); for (x = 0; x < rel_n_records (revisions); ++x) { if (!arch_valid_package_name (rel_peek_str (revisions, x, 0), arch_maybe_archive, arch_req_patch_level, 0)) { safe_printfmt (2, "%s: invalid revision name in input list (%s)\n", argv[0], rel_peek_str (revisions, x, 0)); exit (1); } } exit_status = arch_replay_fqlist (1, 0, dest, default_archive, revisions, reverse, forward, escape_classes); safe_close (in_fd); rel_free_table (revisions); break; } } lim_free (0, tree_root); } lim_free (0, dir); lim_free (0, dest); lim_free (0, default_archive); lim_free (0, list_file); if (exit_status) { safe_printfmt (2, "\nreplay: conflicts occured during replay\n"); } return exit_status; } /* tag: Tom Lord Mon Jun 2 16:50:36 2003 (cmd-replay.c) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-archives.h0000644000175000017500000000124510457622000017424 0ustar useruser/* cmd-archives.h: * **************************************************************** * Copyright (C) 2003 Tom Lord, Stig Brautaset * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__CMD_ARCHIVES_H #define INCLUDE__LIBARCH__CMD_ARCHIVES_H #include "hackerlab/machine/types.h" extern t_uchar arch_cmd_archives_help[]; /* automatically generated __STDC__ prototypes */ extern int arch_cmd_archives (t_uchar * program_name, int argc, char * argv[]); #endif /* INCLUDE__LIBARCH__CMD_ARCHIVES_H */ /* tag: Stig Brautaset Sat Jun 7 15:40:51 BST 2003 (cmd-ls-archives.h) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-branch.c0000644000175000017500000003145010457622000017051 0ustar useruser/* cmd-branch.c * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "config-options.h" #include "hackerlab/cmd/main.h" #include "hackerlab/fs/file-names.h" #include "hackerlab/fs/cwd.h" #include "tla/libfsutils/tmp-files.h" #include "tla/libfsutils/file-contents.h" #include "tla/libfsutils/rmrf.h" #include "tla/libarch/namespace.h" #include "tla/libarch/project-tree.h" #include "tla/libarch/patch-logs.h" #include "tla/libarch/archive.h" #include "tla/libarch/build-revision.h" #include "tla/libarch/proj-tree-lint.h" #include "tla/libarch/tag.h" #include "tla/libarch/cmd-tag.h" #include "tla/libarch/cmd-switch.h" #include "tla/libarch/cmdutils.h" #include "tla/libarch/archive-setup.h" static t_uchar * usage = "[options] [SOURCE] BRANCH"; static t_uchar * version_string = (cfg__std__package " from regexps.com\n" "\n" "Copyright 2003 Tom Lord\n" "\n" "This is free software; see the source for copying conditions.\n" "There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\n" "PARTICULAR PURPOSE.\n" "\n" "Report bugs to " cfg__tla_bug_mail ".\n" "\n" cfg__std__release_id_string "\n"); #define OPTS(OP) \ OP (opt_help_msg, "h", "help", 0, \ "Display a help message and exit.") \ OP (opt_long_help, "H", 0, 0, \ "Display a verbose help message and exit.") \ OP (opt_version, "V", "version", 0, \ "Display a release identifier string\n" \ "and exit.") \ OP (opt_archive, "A", "archive", 1, \ "Override `my-default-archive'") \ OP (opt_log, "l", "log FILE", 1, \ "commit with log file FILE") \ OP (opt_no_cacherev, 0, "no-cacherev", 0, \ "Do not cacherev tag even if different archive") \ OP (opt_seal, 0, "seal", 0, \ "create a version-0 revision") \ OP (opt_fix, 0, "fix", 0, \ "create a versionfix revision") \ t_uchar arch_cmd_branch_help[] = ("create a continuation revision \n" "Create the continuation revision BRANCH (branch point or tag)\n" "which is equivalent to SOURCE (plus a log entry).\n" "If no log entry is provided, a trivial log entry will be created.\n" "\n" "If SOURCE is not specified, the current project tree revision is used, \n" "and the project tree is switched to BRANCH\n" ); enum options { OPTS (OPT_ENUM) }; static struct opt_desc opts[] = { OPTS (OPT_DESC) {-1, 0, 0, 0, 0} }; int arch_cmd_branch (t_uchar * program_name, int argc, char * argv[]) { int o; struct opt_parsed * option; t_uchar * default_archive = 0; t_uchar * log_file = 0; int do_cacherev = 1; int seal = 0; int fix = 0; int setup = 0; safe_buffer_fd (1, 0, O_WRONLY, 0); option = 0; while (1) { o = opt_standard (lim_use_must_malloc, &option, opts, &argc, argv, program_name, usage, version_string, arch_cmd_branch_help, opt_help_msg, opt_long_help, opt_version); if (o == opt_none) break; switch (o) { default: safe_printfmt (2, "unhandled option `%s'\n", option->opt_string); panic ("internal error parsing arguments"); usage_error: opt_usage (2, argv[0], program_name, usage, 1); exit (1); /* bogus_arg: */ safe_printfmt (2, "ill-formed argument for `%s' (`%s')\n", option->opt_string, option->arg_string); goto usage_error; case opt_archive: { default_archive = str_save (0, option->arg_string); break; } case opt_log: { log_file = str_save (0, option->arg_string); break; } case opt_no_cacherev: { do_cacherev = 0; break; } case opt_seal: { seal = 1; break; } case opt_fix: { fix = 1; break; } } } if (argc < 2 || argc > 3) goto usage_error; { t_uchar * tree_root = 0; t_uchar * local_spec = 0; t_uchar * source_spec = 0; t_uchar * tag_spec = 0; t_uchar * source_revision = 0; t_uchar * tag_archive = 0; t_uchar * tag_version = 0; t_uchar * log = 0; struct arch_archive * source_arch = 0; struct arch_archive * tag_arch = 0; rel_table tag_version_revisions = rel_table_nil; t_uchar * last_level = 0; enum arch_patch_level_type last_level_type; enum arch_patch_level_type desired_level_type; t_ulong last_n; t_ulong desired_n; t_uchar * desired_level = 0; t_uchar * tag_revision = 0; if (argc == 3) { source_spec = argv[1]; tag_spec = argv[2]; } else { tree_root = arch_tree_root(0, ".", 0); if (!tree_root) { safe_printfmt (2, "%s: directory (%s) is not in a project tree\n", argv[0], "."); exit (1); } local_spec = arch_get_tree_fqrevision(tree_root); if (!local_spec) { safe_printfmt (2, "%s: unable to determine project tree identifier.\n tree: %s\n", argv[0], tree_root); exit (2); } source_spec = local_spec; tag_spec = argv[1]; } { t_uchar *arch = 0, *tag = 0; arch_separate_arch_name_from_fqrvsn(tag_spec, &arch, &tag); if (arch[0]) { if (default_archive) { safe_printfmt (2, "default archive specified multiple times! Operation aborts\n"); exit (2); } lim_free(0, default_archive); default_archive = arch; } lim_free(0, tag); } if (default_archive) { if (!arch_valid_archive_name (default_archive)) { safe_printfmt (2, "%s: invalid archive name (%s)\n", argv[0], default_archive); exit (1); } } if (log_file) { log = file_contents (log_file); if (!arch_valid_log_file (log)) { safe_printfmt (2, "%s: invalid log file (%s)\n", argv[0], log_file); exit (1); } } if (!arch_valid_package_name (tag_spec, arch_maybe_archive, arch_req_version, 0)) { safe_printfmt (2, "%s: invalid version name -- %s\n", argv[0], tag_spec); exit (1); } tag_archive = arch_parse_package_name (arch_ret_archive, default_archive, tag_spec); tag_version = arch_parse_package_name (arch_ret_non_archive, default_archive, tag_spec); if (arch_is_system_package_name (tag_version)) { safe_printfmt (2, "%s: user's can not tag in system versions\n version: %s\n", argv[0], tag_version); exit (2); } source_revision = arch_determine_revision (&source_arch, default_archive, source_spec, argv[0]); arch_setup_archive_simple (1, tag_archive, tag_version); if (!str_cmp (source_arch->name, tag_archive)) tag_arch = source_arch; else tag_arch = arch_archive_connect (tag_archive, 0); arch_check_for (tag_arch, arch_req_version, tag_version); tag_version_revisions = arch_archive_revisions (tag_arch, tag_version, 0); if (!rel_n_records (tag_version_revisions)) { desired_level_type = arch_is_base0_level; desired_n = 0; } else { last_level = str_save (0, rel_peek_str (tag_version_revisions, rel_n_records (tag_version_revisions) - 1, 0)); last_level_type = arch_analyze_patch_level (&last_n, last_level); switch (last_level_type) { default: panic ("NOT IMPLEMENTED YET"); panic ("internal error"); break; case arch_is_base0_level: { if (seal) { desired_level_type = arch_is_version_level; desired_n = 0; } else if (fix) { safe_printfmt (2, "%s: can not --fix before --seal", argv[0]); exit (2); } else { desired_level_type = arch_is_patch_level; desired_n = 1; } break; } case arch_is_patch_level: { if (seal) { desired_level_type = arch_is_version_level; desired_n = 0; } else if (fix) { safe_printfmt (2, "%s: can not --fix before --seal", argv[0]); exit (2); } else { desired_level_type = arch_is_patch_level; desired_n = last_n + 1; } break; } case arch_is_version_level: { if (seal) { safe_printfmt (2, "%s: version already sealed", argv[0]); exit (2); } else if (fix) { desired_level_type = arch_is_versionfix_level; desired_n = 1; } else { safe_printfmt (2, "%s: cannot commit to sealed version with --fix", argv[0]); exit (2); } break; } case arch_is_versionfix_level: { if (seal) { safe_printfmt (2, "%s: version already sealed", argv[0]); exit (2); } else if (fix) { desired_level_type = arch_is_versionfix_level; desired_n = last_n + 1; } else { safe_printfmt (2, "%s: cannot commit to sealed version with --fix", argv[0]); exit (2); } break; } } } desired_level = arch_form_patch_level (desired_level_type, desired_n); tag_revision = str_alloc_cat_many (0, tag_version, "--", desired_level, str_end); arch_tag (1, tag_arch, tag_revision, source_arch, source_revision, log); if ( do_cacherev && str_cmp(tag_archive, source_arch->official_name) != 0) { t_uchar * tmp_dir; t_uchar * pristine_dir; safe_printfmt (1, "* Archive caching revision\n"); safe_flush (1); tmp_dir = tmp_file_name (".", ",,archive-cache-revision"); pristine_dir = file_name_in_vicinity (0, tmp_dir, tag_revision); safe_mkdir (tmp_dir, 0777); safe_mkdir (pristine_dir, 0777); arch_build_revision (1, pristine_dir, tag_arch, tag_archive, tag_revision, "."); { t_uchar * errstr; if (arch_archive_put_cached (&errstr, tag_arch, tag_revision, pristine_dir)) { safe_printfmt (2, "Warning: %s: was unable to cache revision %s/%s (%s)\n", argv[0], tag_archive, tag_revision, errstr); } else { safe_printfmt (1, "* Made cached revision of %s/%s \n", tag_archive, tag_revision); } } rmrf_file (tmp_dir); rmrf_file (tmp_dir); lim_free (0, pristine_dir); lim_free (0, tmp_dir); } if (log_file) safe_unlink (log_file); if (source_arch != tag_arch) arch_archive_close (source_arch); arch_archive_close (tag_arch); if (local_spec) { int result = arch_call_cmd(arch_cmd_switch, argv[0], "-d", tree_root, "-A", tag_archive, tag_revision, NULL); } lim_free (0, source_revision); lim_free (0, tag_archive); lim_free (0, tag_version); lim_free (0, log); rel_free_table (tag_version_revisions); lim_free (0, last_level); lim_free (0, desired_level); lim_free (0, local_spec); lim_free (0, tag_revision); lim_free (0, tree_root); } lim_free (0, default_archive); return 0; } /* tag: Tom Lord Tue May 27 23:03:10 2003 (cmd-branch.c) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-archive-meta-info.c0000644000175000017500000001002010457622000021100 0ustar useruser/* archive-meta-info.c * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "config-options.h" #include "hackerlab/cmd/main.h" #include "tla/libarch/namespace.h" #include "tla/libarch/project-tree.h" #include "tla/libarch/my.h" #include "tla/libarch/archive.h" #include "tla/libarch/cmd.h" #include "tla/libarch/cmd-archive-meta-info.h" static t_uchar * usage = "[options] item-name"; static t_uchar * version_string = (cfg__std__package " from regexps.com\n" "\n" "Copyright 2003 Tom Lord\n" "\n" "This is free software; see the source for copying conditions.\n" "There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\n" "PARTICULAR PURPOSE.\n" "\n" "Report bugs to " cfg__tla_bug_mail ".\n" "\n" cfg__std__release_id_string "\n"); #define OPTS(OP) \ OP (opt_help_msg, "h", "help", 0, \ "Display a help message and exit.") \ OP (opt_long_help, "H", 0, 0, \ "Display a verbose help message and exit.") \ OP (opt_version, "V", "version", 0, \ "Display a release identifier string\n" \ "and exit.") \ OP (opt_archive, "A", "archive", 1, \ "Override `my-default-archive'") t_uchar arch_cmd_archive_meta_info_help[] = ("report meta-info from an archive\n" "Print the contents of a meta-info file from an archive.\n" "For example,\n" "\n" " % tla archive-meta-info name\n" "\n" "prints the official name of your default archive.\n"); enum options { OPTS (OPT_ENUM) }; static struct opt_desc opts[] = { OPTS (OPT_DESC) {-1, 0, 0, 0, 0} }; int arch_cmd_archive_meta_info (t_uchar *program_name, int argc, char * argv[]) { int o; int result=0; struct opt_parsed * option; t_uchar * default_archive; default_archive = 0; safe_buffer_fd (1, 0, O_WRONLY, 0); option = 0; while (1) { o = opt_standard (lim_use_must_malloc, &option, opts, &argc, argv, program_name, usage, version_string, arch_cmd_archive_meta_info_help, opt_help_msg, opt_long_help, opt_version); if (o == opt_none) break; switch (o) { default: safe_printfmt (2, "unhandled option `%s'\n", option->opt_string); panic ("internal error parsing arguments"); usage_error: opt_usage (2, argv[0], program_name, usage, 1); exit (1); /* bogus_arg: */ safe_printfmt (2, "ill-formed argument for `%s' (`%s')\n", option->opt_string, option->arg_string); goto usage_error; case opt_archive: { default_archive = str_save (0, option->arg_string); break; } } } if (argc != 2) goto usage_error; default_archive = arch_my_default_archive (default_archive); if (!arch_valid_archive_name (default_archive)) { safe_printfmt (2, "%s: invalid archive name (%s)\n", argv[0], default_archive); exit (1); } { struct arch_archive * arch = 0; t_uchar * info = 0; arch = arch_archive_connect (default_archive, 0); info = arch_get_meta_info (arch, argv[1]); result = ! info; safe_printfmt (1, "%s", (info ? info : (t_uchar *)"")); arch_archive_close (arch); lim_free (0, info); } return result; } /* tag: Tom Lord Mon Jun 9 22:33:13 2003 (cmd-archive-meta-info.c) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-library-add.h0000644000175000017500000000126710457622000020016 0ustar useruser/* cmd-library-add.h: * **************************************************************** * Copyright (C) 2003 Tom Lord, Stig Brautaset * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__CMD_LIBRARY_ADD_H #define INCLUDE__LIBARCH__CMD_LIBRARY_ADD_H #include "hackerlab/machine/types.h" extern t_uchar arch_cmd_library_add_help[]; /* automatically generated __STDC__ prototypes */ extern int arch_cmd_library_add (t_uchar * program_name, int argc, char * argv[]); #endif /* INCLUDE__LIBARCH__CMD_LIBRARY_ADD_H */ /* tag: Stig Brautaset Sat Jun 7 14:35:59 BST 2003 (cmd-library-add.h) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-missing.c0000644000175000017500000002476610457622000017301 0ustar useruser/* cmd-missing.c * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "config-options.h" #include "hackerlab/cmd/main.h" #include "hackerlab/fs/file-names.h" #include "tla/libfsutils/rmrf.h" #include "tla/libarch/namespace.h" #include "tla/libarch/project-tree.h" #include "tla/libarch/patch-logs.h" #include "tla/libarch/local-cache.h" #include "tla/libarch/make-changeset.h" #include "tla/libarch/archive.h" #include "tla/libarch/missing.h" #include "tla/libarch/changeset-report.h" #include "tla/libarch/cmdutils.h" #include "tla/libarch/cmd-missing.h" static t_uchar * usage = "[options] [version]"; static t_uchar * version_string = (cfg__std__package " from regexps.com\n" "\n" "Copyright 2003 Tom Lord\n" "\n" "This is free software; see the source for copying conditions.\n" "There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\n" "PARTICULAR PURPOSE.\n" "\n" "Report bugs to " cfg__tla_bug_mail ".\n" "\n" cfg__std__release_id_string "\n"); #define OPTS(OP) \ OP (opt_help_msg, "h", "help", 0, \ "Display a help message and exit.") \ OP (opt_long_help, "H", 0, 0, \ "Display a verbose help message and exit.") \ OP (opt_version, "V", "version", 0, \ "Display a release identifier string\n" \ "and exit.") \ OP (opt_archive, "A", "archive", 1, \ "Override `my-default-archive'") \ OP (opt_quiet, "q", "quiet", 0, \ "produce no ordinary output") \ OP (opt_exit_status, "x", "exit-status", 0, \ "exit non-0 if patches are missing") \ OP (opt_dir, "d", "dir DIR", 1, \ "cd to DIR first") \ OP (opt_reverse, "r", "reverse", 0, \ "sort from newest to oldest") \ OP (opt_summary, "s", "summary", 0, \ "display a summary of each missing patch") \ OP (opt_creator, "c", "creator", 0, \ "display the creator of each missing patch") \ OP (opt_date, "D", "date", 0, \ "display the date of each missing patch") \ OP (opt_full, "f", "full", 0, \ "print full revision names") \ OP (opt_merges, 0, "merges", 0, \ "print a merge list for each missing patch") \ OP (opt_skip_present, 0, "skip-present", 0, \ "skip patches that contain 1 or more patch logs already in this tree") t_uchar arch_cmd_missing_help[] = ("print patches missing from a project tree\n" "Print a list of patches missing in the project tree containing\n" "DIR (or the current directory) for VERSION (or the default version.\n" "of the project tree).\n" "\n" "The flag --merges means, for each patch, to print the list of patches\n" "included in the patch in two columns. For example:\n" "\n" " PATCH-A PATCH-A\n" " PATCH-A PATCH-B\n" " PATCH-A PATCH-C\n" "\n" "means that PATCH-A includes the changes from PATCH-B and PATCH-C.\n" "(Every patch includes at least itself.)\n" "\n" "With -x, if there are missing patches, the command exits with\n" "status 1, otherwise with status 0.\n" "\n" "With -q, produce no output.\n" "\n" "WARNING: At this time, some error conditions *also* exit with\n" "error status 1, however, in situations where the caller is\n" "not concerned with errors, the exit status is still useful.\n"); enum options { OPTS (OPT_ENUM) }; static struct opt_desc opts[] = { OPTS (OPT_DESC) {-1, 0, 0, 0, 0} }; int arch_cmd_missing (t_uchar * program_name, int argc, char * argv[]) { int o; struct opt_parsed * option; t_uchar * default_archive = 0; t_uchar * dir = 0; int exit_status = 0; int exit_status_significant = 0; int quiet = 0; int reverse = 0; int summarized_headers = 0; int full = 0; int merges = 0; int skip_present = 0; dir = str_save (0, "."); safe_buffer_fd (1, 0, O_WRONLY, 0); option = 0; while (1) { o = opt_standard (lim_use_must_malloc, &option, opts, &argc, argv, program_name, usage, version_string, arch_cmd_missing_help, opt_help_msg, opt_long_help, opt_version); if (o == opt_none) break; switch (o) { default: safe_printfmt (2, "unhandled option `%s'\n", option->opt_string); panic ("internal error parsing arguments"); usage_error: opt_usage (2, argv[0], program_name, usage, 1); exit (1); /* bogus_arg: */ safe_printfmt (2, "ill-formed argument for `%s' (`%s')\n", option->opt_string, option->arg_string); goto usage_error; case opt_archive: { lim_free (0, default_archive); default_archive = str_save (0, option->arg_string); break; } case opt_dir: { lim_free (0, dir); dir = str_save (0, option->arg_string); break; } case opt_quiet: { quiet = 1; break; } case opt_exit_status: { exit_status_significant = 1; break; } case opt_full: { full = 1; break; } case opt_reverse: { reverse = 1; break; } case opt_summary: { summarized_headers |= arch_include_summary; break; } case opt_creator: { summarized_headers |= arch_include_creator; break; } case opt_date: { summarized_headers |= arch_include_date; break; } case opt_merges: { merges = 1; break; } case opt_skip_present: { skip_present = 1; break; } } } if (argc > 2) goto usage_error; { t_uchar * tree_root = 0; t_uchar * vsnspec = 0; t_uchar * archive = 0; t_uchar * version= 0; struct arch_archive * arch = 0; rel_table whats_missing = rel_table_nil; if (default_archive && !arch_valid_archive_name (default_archive)) { safe_printfmt (2, "%s: invalid archive name: %s\n", argv[0], default_archive); exit (1); } tree_root = arch_tree_root (0, dir, 0); if (!tree_root) { safe_printfmt (2, "%s: not in a project tree\n dir: %s\n", argv[0], dir); exit (1); } if (argc == 2) vsnspec = str_save (0, argv[1]); else { vsnspec = arch_tree_version (tree_root); if (!vsnspec) { safe_printfmt (2, "%s: tree has no default version\n tree: %s\n", argv[0], tree_root); exit (1); } } if (!arch_valid_package_name (vsnspec, arch_maybe_archive, arch_req_version, 0)) { safe_printfmt (2, "%s: illegal version name: %s\n", argv[0], vsnspec); exit (2); } archive = arch_parse_package_name (arch_ret_archive, default_archive, vsnspec); version = arch_parse_package_name (arch_ret_non_archive, 0, vsnspec); arch = arch_archive_connect (archive, 0); arch_check_for (arch, arch_req_version, version); whats_missing = arch_missing (tree_root, arch, version, skip_present); if (rel_n_records (whats_missing)) { exit_status = 1; } if (!quiet) { if (reverse) arch_sort_table_by_patch_level_field (1, whats_missing, 0); { int x; for (x = 0; x < rel_n_records (whats_missing); ++x) { if (!summarized_headers) { if (full) safe_printfmt (1, "%s/%s--%s\n", archive, version, rel_peek_str (whats_missing, x, 0)); else safe_printfmt (1, "%s\n", rel_peek_str (whats_missing, x, 0)); } else { t_uchar * revision = 0; t_uchar * log = 0; t_uchar * body = 0; assoc_table headers = 0; revision = str_alloc_cat_many (0, version, "--", rel_peek_str (whats_missing, x, 0), str_end); log = arch_archive_log (arch, revision); arch_parse_log (0, &headers, (const t_uchar **)&body, log); if (!merges) { if (full) safe_printfmt (1, "%s/%s--%s\n", archive, version, rel_peek_str (whats_missing, x, 0)); else safe_printfmt (1, "%s\n", rel_peek_str (whats_missing, x, 0)); } else { panic ("--merge not yet"); } arch_print_headers_summary (1, 4, headers, summarized_headers); lim_free (0, revision); lim_free (0, log); lim_free (0, body); free_assoc_table (headers); } } } } arch_archive_close (arch); lim_free (0, vsnspec); lim_free (0, tree_root); lim_free (0, archive); lim_free (0, version); rel_free_table (whats_missing); } lim_free (0, dir); lim_free (0, default_archive); if (exit_status_significant) return exit_status; else return 0; } /* tag: Tom Lord Sat May 24 23:36:40 2003 (whats-missing.c) */ tla-1.3.5+dfsg/src/tla/libarch/replay.h0000644000175000017500000000324010457622000016350 0ustar useruser/* replay.h: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__REPLAY_H #define INCLUDE__LIBARCH__REPLAY_H #include "tla/libarch/archive.h" /* automatically generated __STDC__ prototypes */ extern int arch_replay_exact (int chatter_fd, int no_patch_noise, const t_uchar * tree_root, struct arch_archive * arch, const t_uchar * revision, int reverse, int forward, int escape_classes); extern int arch_replay_list (int chatter_fd, int no_patch_noise, const t_uchar * tree_root, struct arch_archive * arch, rel_table revisions, int reverse, int forward, int escape_classes); extern int arch_replay_fqlist (int chatter_fd, int no_patch_noise, const t_uchar * tree_root, const t_uchar * default_archive, rel_table revisions, int reverse, int forward, int escape_classes); #endif /* INCLUDE__LIBARCH__REPLAY_H */ /* tag: Tom Lord Sat Jan 5 15:26:10 2002 (replay.h) */ tla-1.3.5+dfsg/src/tla/libarch/pfs.c0000644000175000017500000003133710457622000015647 0ustar useruser/* pfs.c: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/char/str.h" #include "hackerlab/fs/file-names.h" #include "hackerlab/vu/safe.h" #include "tla/libfsutils/tmp-files.h" #include "tla/libarch/archive.h" #include "tla/libarch/archives.h" #include "tla/libarch/pfs-dav.h" #include "tla/libarch/pfs-sftp.h" #include "tla/libarch/pfs-ftp.h" #include "tla/libarch/pfs-fs.h" #include "tla/libarch/pfs.h" /* __STDC__ prototypes for static functions */ static int dot_listings_equal (rel_table a, rel_table b); void arch_pfs_rmrf_file (struct arch_pfs_session * pfs, const t_uchar * path) { int dir_check; dir_check = arch_pfs_is_dir (pfs, path); if (!dir_check) { arch_pfs_rm (pfs, path, 1); } else if (dir_check > 0) { rel_table contents = rel_table_nil; int x; contents = arch_pfs_directory_files (pfs, path, 1); for (x = 0; x < rel_n_records (contents); ++x) { t_uchar * subpath = 0; subpath = file_name_in_vicinity (0, path, rel_peek_str (contents, x, 0)); arch_pfs_rmrf_file (pfs, subpath); lim_free (0, subpath); } arch_pfs_rmdir (pfs, path, 1); rel_free_table (contents); } /* dir_check < 0 indicates an error, presumably ENOENT */ } void arch_pfs_pfs_make_archive (const t_uchar * name, const t_uchar * uri, const t_uchar * version, const t_uchar *mirror_of, int dot_listing_lossage, int signed_archive) { struct arch_pfs_sftp_session * p; struct arch_pfs_session *pfs; t_uchar * meta_info_path = 0; t_uchar * name_file_path = 0; t_uchar * archive_version_path = 0; t_uchar * tmp_path; t_uchar * archdir; t_uchar * hosturi; int name_fd; int version_fd; /* TODO: handle URIs like 'sftp://amit@cvs:~f' semi-reasonably * The following code can mangle URIs, since it doesn't ignore the protocol * part. IMHO, it doesn't belong in a general function like this * one. - aaron.bentley@utoronto.ca */ tmp_path = file_name_from_directory (0, uri); /* remove any trailing '/' */ archdir = file_name_tail (0, tmp_path); hosturi = file_name_directory (0, tmp_path); lim_free (0, tmp_path); pfs = arch_pfs_connect (hosturi); p = (struct arch_pfs_sftp_session *)pfs; pfs->vtable->mkdir (pfs, archdir, 0777, 0); meta_info_path = file_name_in_vicinity (0, archdir, "=meta-info"); archive_version_path = file_name_in_vicinity (0, archdir, ".archive-version"); name_file_path = file_name_in_vicinity (0, meta_info_path, "name"); pfs->vtable->mkdir (pfs, meta_info_path, 0777, 0); if (mirror_of) { tmp_path = tmp_file_name ("/tmp", ",,pfs-sftp-file-contents"); name_fd = safe_open (tmp_path, O_RDWR | O_CREAT | O_EXCL, 0000); safe_unlink (tmp_path); safe_printfmt (name_fd, "%s\n", mirror_of); safe_lseek (name_fd, (off_t)0, SEEK_SET); pfs->vtable->put_file (pfs, name_file_path, 0666, name_fd, 0); name_file_path = file_name_in_vicinity (0, meta_info_path, "mirror"); safe_lseek (name_fd, (off_t)0, SEEK_SET); pfs->vtable->put_file (pfs, name_file_path, 0666, name_fd, 0); safe_close (name_fd); } else { tmp_path = tmp_file_name ("/tmp", ",,pfs-sftp-file-contents"); name_fd = safe_open (tmp_path, O_RDWR | O_CREAT | O_EXCL, 0000); safe_unlink (tmp_path); safe_printfmt (name_fd, "%s\n", name); safe_lseek (name_fd, (off_t)0, SEEK_SET); pfs->vtable->put_file (pfs, name_file_path, 0666, name_fd, 0); safe_close (name_fd); } if (dot_listing_lossage) { t_uchar * tmp_blowage_path = 0; int tmp_blowage_fd = 0; t_uchar * http_blows_path = 0; tmp_blowage_path = tmp_file_name ("/tmp", ",,pfs-http-blows"); tmp_blowage_fd = safe_open (tmp_blowage_path, O_RDWR | O_CREAT | O_EXCL, 0000); safe_unlink (tmp_blowage_path); safe_printfmt (tmp_blowage_fd, "it sure does\n"); http_blows_path = file_name_in_vicinity (0, meta_info_path, "http-blows"); safe_lseek (tmp_blowage_fd, (off_t)0, SEEK_SET); pfs->vtable->put_file (pfs, http_blows_path, 0666, tmp_blowage_fd, 0); lim_free (0, tmp_blowage_path); safe_close (tmp_blowage_fd); lim_free (0, http_blows_path); } if (signed_archive) { t_uchar * tmp_signage_path = 0; int tmp_signage_fd = 0; t_uchar * http_signed_path = 0; tmp_signage_path = tmp_file_name ("/tmp", ",,pfs-signed-archive"); tmp_signage_fd = safe_open (tmp_signage_path, O_RDWR | O_CREAT | O_EXCL, 0000); safe_unlink (tmp_signage_path); safe_printfmt (tmp_signage_fd, "system cracking is (nearly always) lame\n"); http_signed_path = file_name_in_vicinity (0, meta_info_path, "signed-archive"); safe_lseek (tmp_signage_fd, (off_t)0, SEEK_SET); pfs->vtable->put_file (pfs, http_signed_path, 0666, tmp_signage_fd, 0); lim_free (0, tmp_signage_path); safe_close (tmp_signage_fd); lim_free (0, http_signed_path); } tmp_path = tmp_file_name ("/tmp", ",,pfs-sftp-file-contents"); version_fd = safe_open (tmp_path, O_RDWR | O_CREAT | O_EXCL, 0000); safe_unlink (tmp_path); safe_printfmt (version_fd, "%s\n", version); safe_lseek (version_fd, (off_t)0, SEEK_SET); pfs->vtable->put_file (pfs, archive_version_path, 0666, name_fd, 0); safe_close (version_fd); if (dot_listing_lossage) { arch_pfs_update_listing_file (pfs, meta_info_path); arch_pfs_update_listing_file (pfs, archdir); } arch_set_archive_location (name, uri, 0, ARCH_REG_FAIL_NORM); lim_free (0, meta_info_path); lim_free (0, name_file_path); lim_free (0, archive_version_path); lim_free (0, hosturi); lim_free (0, archdir); } int arch_valid_uri (const t_uchar * uri) { int answer = 1; if (arch_pfs_sftp_supported_protocol (uri)) { t_uchar * user = 0, * hostname = 0, * port = 0; char * path = 0; answer = (arch_pfs_sftp_parse_uri (&user, &hostname, &port, &path, uri) == 0); lim_free (0, user); lim_free (0, hostname); lim_free (0, port); lim_free (0, path); } return answer; } struct arch_pfs_session * arch_pfs_connect (const t_uchar * uri) { struct arch_pfs_session * answer = 0; if (arch_pfs_dav_supported_protocol (uri)) { return arch_pfs_dav_connect (uri); } else if (arch_pfs_sftp_supported_protocol (uri)) { return arch_pfs_sftp_connect (uri); } else if (arch_pfs_ftp_supported_protocol (uri)) { return arch_pfs_ftp_connect (uri); } else { return arch_pfs_fs_connect (uri); } return answer; } t_uchar * arch_pfs_file_contents (struct arch_pfs_session * pfs, const t_uchar * path, int soft_errors) { return pfs->vtable->file_contents (pfs, path, soft_errors); } rel_table arch_pfs_directory_files (struct arch_pfs_session * pfs, const t_uchar * path, int soft_errors) { return pfs->vtable->directory_files (pfs, path, soft_errors); } int arch_pfs_file_exists (struct arch_pfs_session * pfs, const t_uchar * path) { return pfs->vtable->file_exists (pfs, path); } int arch_pfs_get_file (struct arch_pfs_session * pfs, int out_fd, const t_uchar * path, int soft_errors) { return pfs->vtable->get_file (pfs, out_fd, path, soft_errors); } int arch_pfs_put_file (struct arch_pfs_session * pfs, const t_uchar * path, mode_t perms, int in_fd, int soft_errors) { return pfs->vtable->put_file (pfs, path, perms, in_fd, soft_errors); } int arch_pfs_put_atomic (struct arch_pfs_session * pfs, t_uchar ** errstr, const t_uchar * path, mode_t perms, int in_fd, int replace, int soft_errors) { int result = 0; t_uchar * tmp_dir = file_name_directory_file (0, path); t_uchar * tmp_file = tmp_file_name (tmp_dir, ",,upload-tmp"); arch_pfs_rmrf_file (pfs, tmp_file); if (!arch_pfs_put_file (pfs, tmp_file, perms, in_fd, soft_errors)) { if (replace) arch_pfs_rmrf_file (pfs, path); if (arch_pfs_rename (pfs, errstr, tmp_file, path, soft_errors)) result = -1; } else result = -1; lim_free (0, tmp_dir); lim_free (0, tmp_file); return result; } int arch_pfs_mkdir (struct arch_pfs_session * pfs, const t_uchar * path, mode_t perms, int soft_errors) { return pfs->vtable->mkdir (pfs, path, perms, soft_errors); } int arch_pfs_rename (struct arch_pfs_session * pfs, t_uchar ** errstr, const t_uchar * from, const t_uchar * to, int soft_errors) { return pfs->vtable->rename (pfs, errstr, from, to, soft_errors); } int arch_pfs_is_dir (struct arch_pfs_session * pfs, const t_uchar * path) { return pfs->vtable->is_dir (pfs, path); } int arch_pfs_rmdir (struct arch_pfs_session * pfs, const t_uchar * path, int soft_errors) { return pfs->vtable->rmdir (pfs, path, soft_errors); } int arch_pfs_rm (struct arch_pfs_session * pfs, const t_uchar * path, int soft_errors) { return pfs->vtable->rm (pfs, path, soft_errors); } void arch_pfs_update_listing_file (struct arch_pfs_session * session, const t_uchar * dir) { t_uchar * tmp_path = 0; int tmp_fd = 0; t_uchar * dot_listing_path = 0; t_uchar * dot_listing_tmp = 0; rel_table files_before = rel_table_nil; rel_table files_after = rel_table_nil; tmp_path = tmp_file_name ("/tmp", ",,pfs-dot-listing"); tmp_fd = safe_open (tmp_path, O_RDWR | O_CREAT | O_EXCL, 0000); safe_unlink (tmp_path); dot_listing_path = file_name_in_vicinity (0, dir, ".listing"); dot_listing_tmp = archive_tmp_file_name (dir, ",,dot-listing"); while (1) { int x; files_before = arch_pfs_directory_files (session, dir, 0); if (rel_n_records (files_before)) rel_sort_table_by_field (0, files_before, 0); for (x = 0; x < rel_n_records (files_before); ++x) { const t_uchar * file_name; file_name = rel_peek_str (files_before, x, 0); if ( (('.' != file_name[0]) && (',' != file_name[0])) || !str_cmp (".archive-version", file_name)) { safe_printfmt (tmp_fd, "%s\r\n", rel_peek_str (files_before, x, 0)); } } safe_lseek (tmp_fd, (off_t)0, SEEK_SET); arch_pfs_put_atomic (session, 0, dot_listing_path, 0444, tmp_fd, 1, 0); files_after = arch_pfs_directory_files (session, dir, 0); if (rel_n_records (files_after)) rel_sort_table_by_field (0, files_after, 0); if (!dot_listings_equal (files_before, files_after)) { safe_ftruncate (tmp_fd, (long)0); rel_free_table (files_before); rel_free_table (files_after); files_before = rel_table_nil; files_after = rel_table_nil; } else { break; } } lim_free (0, tmp_path); safe_close (tmp_fd); lim_free (0, dot_listing_path); lim_free (0, dot_listing_tmp); rel_free_table (files_before); rel_free_table (files_after); } static int dot_listings_equal (rel_table a, rel_table b) { int ax; int bx; if ((!rel_n_records (a) && rel_n_records (b)) || (rel_n_records (a) && !rel_n_records (b))) return 0; ax = 0; bx = 0; while ((ax < rel_n_records (a)) || (bx < rel_n_records (b))) { if ((ax < rel_n_records (a)) && (rel_peek_str (a, ax, 0)[0] == '.')) { ++ax; continue; } if ((ax < rel_n_records (a)) && (rel_peek_str (a, ax, 0)[0] == ',')) { ++ax; continue; } if ((bx < rel_n_records (b)) && (rel_peek_str (b, bx, 0)[0] == '.')) { ++bx; continue; } if ((bx < rel_n_records (b)) && (rel_peek_str (b, bx, 0)[0] == ',')) { ++bx; continue; } if ((ax == rel_n_records (a)) || (bx == rel_n_records (b))) return 0; if (str_cmp (rel_peek_str (a, ax, 0), rel_peek_str (b, bx, 0))) return 0; ++ax; ++bx; } if ((ax != rel_n_records (a)) || (bx != rel_n_records (b))) return 0; return 1; } /* tag: Tom Lord Thu Jun 5 15:12:22 2003 (pfs.c) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-cachedrevs.c0000644000175000017500000001143610457622000017725 0ustar useruser/* cachedrevs.c * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "config-options.h" #include "hackerlab/cmd/main.h" #include "hackerlab/fs/file-names.h" #include "hackerlab/fs/cwd.h" #include "tla/libfsutils/tmp-files.h" #include "tla/libfsutils/rmrf.h" #include "tla/libarch/namespace.h" #include "tla/libarch/project-tree.h" #include "tla/libarch/my.h" #include "tla/libarch/archive.h" #include "tla/libarch/pristines.h" #include "tla/libarch/build-revision.h" #include "tla/libarch/cmd.h" #include "tla/libarch/cmd-cachedrevs.h" static t_uchar * usage = "[options] [version]"; static t_uchar * version_string = (cfg__std__package " from regexps.com\n" "\n" "Copyright 2003 Tom Lord\n" "\n" "This is free software; see the source for copying conditions.\n" "There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\n" "PARTICULAR PURPOSE.\n" "\n" "Report bugs to " cfg__tla_bug_mail ".\n" "\n" cfg__std__release_id_string "\n"); #define OPTS(OP) \ OP (opt_help_msg, "h", "help", 0, \ "Display a help message and exit.") \ OP (opt_long_help, "H", 0, 0, \ "Display a verbose help message and exit.") \ OP (opt_version, "V", "version", 0, \ "Display a release identifier string\n" \ "and exit.") \ OP (opt_archive, "A", "archive", 1, \ "Override `my-default-archive'") t_uchar arch_cmd_cachedrevs_help[] = ("list cached revisions in an archive\n" "Report which revisions of VERSION have been cached\n" "as whole trees in the archive.\n" "\n" "See also \"tla cacherev -H\".\n"); enum options { OPTS (OPT_ENUM) }; static struct opt_desc opts[] = { OPTS (OPT_DESC) {-1, 0, 0, 0, 0} }; int arch_cmd_cachedrevs (t_uchar *program_name, int argc, char * argv[]) { int o; struct opt_parsed * option; t_uchar * default_archive = 0; safe_buffer_fd (1, 0, O_WRONLY, 0); option = 0; while (1) { o = opt_standard (lim_use_must_malloc, &option, opts, &argc, argv, program_name, usage, version_string, arch_cmd_cachedrevs_help, opt_help_msg, opt_long_help, opt_version); if (o == opt_none) break; switch (o) { default: safe_printfmt (2, "unhandled option `%s'\n", option->opt_string); panic ("internal error parsing arguments"); usage_error: opt_usage (2, argv[0], program_name, usage, 1); exit (1); /* bogus_arg: */ safe_printfmt (2, "ill-formed argument for `%s' (`%s')\n", option->opt_string, option->arg_string); goto usage_error; case opt_archive: { lim_free (0, default_archive); default_archive = str_save (0, option->arg_string); break; } } } if (argc > 2) goto usage_error; default_archive = arch_my_default_archive (default_archive); { t_uchar * version_spec; t_uchar * archive = 0; t_uchar * version = 0; struct arch_archive * arch = 0; if (argc == 2) version_spec = str_save(0, argv[1]); else version_spec = arch_try_tree_version(program_name); if (!arch_valid_package_name (version_spec, arch_maybe_archive, arch_req_version, 0)) { safe_printfmt (2, "%s: invalid version spec (%s)\n", argv[0], version_spec); exit (2); } archive = arch_parse_package_name (arch_ret_archive, default_archive, version_spec); version = arch_parse_package_name (arch_ret_non_archive, 0, version_spec); arch = arch_archive_connect (archive, 0); { rel_table revisions = rel_table_nil; int x; revisions = arch_archive_revisions (arch, version, 2); for (x = 0; x < rel_n_records (revisions); ++x) { int is_cached; arch_revision_type (0, &is_cached, arch, rel_peek_str (revisions, x, 0)); if (is_cached) safe_printfmt (1, "%s\n", rel_peek_str (revisions, x, 0)); } rel_free_table (revisions); } arch_archive_close (arch); lim_free (0, archive); lim_free (0, version); } lim_free (0, default_archive); return 0; } /* tag: Tom Lord Thu May 29 23:36:53 2003 (cachedrevs.c) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-archive-mirror.c0000644000175000017500000001630310457622000020545 0ustar useruser/* archive-mirror.c * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "config-options.h" #include "hackerlab/cmd/main.h" #include "tla/libarch/namespace.h" #include "tla/libarch/archive.h" #include "tla/libarch/archives.h" #include "tla/libarch/archive-mirror.h" #include "tla/libarch/my.h" #include "tla/libarch/cmd.h" #include "tla/libarch/cmd-archive-mirror.h" static t_uchar * usage = "[options] [from [to] [limit]]"; static t_uchar * version_string = (cfg__std__package " from regexps.com\n" "\n" "Copyright 2003 Tom Lord\n" "\n" "This is free software; see the source for copying conditions.\n" "There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\n" "PARTICULAR PURPOSE.\n" "\n" "Report bugs to " cfg__tla_bug_mail ".\n" "\n" cfg__std__release_id_string "\n"); #define OPTS(OP) \ OP (opt_help_msg, "h", "help", 0, \ "Display a help message and exit.") \ OP (opt_long_help, "H", 0, 0, \ "Display a verbose help message and exit.") \ OP (opt_version, "V", "version", 0, \ "Display a release identifier string\n" \ "and exit.") \ OP (opt_no_cachedrevs, 0, "no-cached", 0, \ "don't copy cached revisions") \ OP (opt_summary, "s", "summary", 0, \ "print the summary of each patch") \ OP (opt_id_cachedrevs, 0, "cached-tags", 0, \ "copy only cachedrevs for tags to other archives") t_uchar arch_cmd_archive_mirror_help[] = ("update an archive mirror\n" "If no arguments are given, update your `my-default-archive'-MIRROR\n" "archive with the contents of `my-default-archive'.\n" "\n" "If a [FROM] archive is given, update the [FROM]-MIRROR archive with\n" "the contents of the [FROM] archive\n" "\n" "If both [FROM] and [TO] archives are specified, update [TO] with\n" "the contents of [FROM]\n" "\n" "If LIMIT is provided, it should be a category, branch,\n" "version, or revision name. Only the indicated part\n" "of FROM will be copied to TO. If LIMIT is a revision,\n" "then cached revisions will be copied and deleted to TO.\n" "\n" "(see \"tla make-archive -H\".).\n"); enum options { OPTS (OPT_ENUM) }; static struct opt_desc opts[] = { OPTS (OPT_DESC) {-1, 0, 0, 0, 0} }; int arch_cmd_archive_mirror (t_uchar * program_name, int argc, char * argv[]) { int o; struct opt_parsed * option; struct arch_archive_mirror_options * mirror_opts = 0; mirror_opts = lim_malloc (0, sizeof (*mirror_opts)); mem_set0 ((t_uchar *)mirror_opts, sizeof (*mirror_opts)); mirror_opts->print_summary = 0; mirror_opts->cachedrevs = arch_mirror_all_cachedrevs; safe_buffer_fd (1, 0, O_WRONLY, 0); option = 0; while (1) { o = opt_standard (lim_use_must_malloc, &option, opts, &argc, argv, program_name, usage, version_string, arch_cmd_archive_mirror_help, opt_help_msg, opt_long_help, opt_version); if (o == opt_none) break; switch (o) { default: safe_printfmt (2, "unhandled option `%s'\n", option->opt_string); panic ("internal error parsing arguments"); usage_error: opt_usage (2, argv[0], program_name, usage, 1); exit (1); /* bogus_arg: */ safe_printfmt (2, "ill-formed argument for `%s' (`%s')\n", option->opt_string, option->arg_string); goto usage_error; case opt_no_cachedrevs: { mirror_opts->cachedrevs = arch_mirror_skip_cachedrevs; break; } case opt_summary: { mirror_opts->print_summary = 1; break; } case opt_id_cachedrevs: { mirror_opts->cachedrevs = arch_mirror_foreign_continuation_cachedrevs; break; } } } if (argc > 4) goto usage_error; { int a; t_uchar * from_name = 0; t_uchar * ambiguous_param = 0; t_uchar * to_name = 0; t_uchar * limit_spec = 0; struct arch_archive * from = 0; t_uchar * official_from_name = 0; struct arch_archive * to = 0; a = 1; if (a >= argc) { from_name = arch_my_default_archive (0); if (!from_name) { safe_printfmt (2, "%s: no default archive set\n", argv[0]); exit (1); } } else { from_name = str_save (0, argv[a]); ++a; } if (a < argc) { ambiguous_param = str_save (0, argv[2]); ++a; } if (ambiguous_param && arch_valid_archive_name (ambiguous_param)) { to_name = str_save (0, ambiguous_param); limit_spec = (argc > a ? str_save (0, argv[a]) : 0); } else { if (argc > (a + 1)) goto usage_error; to_name = arch_mirrored_at (from_name); if (!to_name) { to_name = arch_mirrored_from (from_name); if (to_name) { t_uchar * t; t = from_name; from_name = to_name; to_name = t; } else { safe_printfmt (2, "%s: no mirror or source registered for %s\n", argv[0], from_name); exit (1); } } if (ambiguous_param) { limit_spec = ambiguous_param; ambiguous_param = 0; } } if (limit_spec && !arch_valid_package_name (limit_spec, arch_no_archive, arch_req_category, 1)) { safe_printfmt (2, "%s: invalid limit spec name (%s)\n", argv[0], limit_spec); exit (2); } from = arch_archive_connect (from_name, 0); official_from_name = arch_get_meta_info_trimming (from, "name"); to = arch_archive_connect (to_name, official_from_name); arch_archive_mirror (1, from, to, limit_spec, mirror_opts); arch_archive_close (to); lim_free (0, official_from_name); arch_archive_close (from); lim_free (0, from_name); lim_free (0, ambiguous_param); lim_free (0, to_name); lim_free (0, limit_spec); } lim_free (0, mirror_opts); return 0; } /* tag: Tom Lord Tue Jun 10 14:15:27 2003 (cmd-archive-mirror.c) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-delete-id.h0000644000175000017500000000125210457622000017452 0ustar useruser/* cmd-delete-id.h: * **************************************************************** * Copyright (C) 2003 Tom Lord, Stig Brautaset * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__CMD_DELETE_ID_H #define INCLUDE__LIBARCH__CMD_DELETE_ID_H #include "hackerlab/machine/types.h" extern t_uchar arch_cmd_delete_id_help[]; /* automatically generated __STDC__ prototypes */ extern int arch_cmd_delete_id (t_uchar * program_name, int argc, char * argv[]); #endif /* INCLUDE__LIBARCH__CMD_DELETE_ID_H */ /* tag: Stig Brautaset Sat Jun 7 13:47:19 BST 2003 (cmd-delete-tag.h) */ tla-1.3.5+dfsg/src/tla/libarch/changeset-utils.h0000644000175000017500000000305610457622000020160 0ustar useruser/* changeset-utils.h: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__CHANGESET_UTILS_H #define INCLUDE__LIBARCH__CHANGESET_UTILS_H #include "tla/libawk/relational.h" #include "tla/libarch/inv-ids.h" struct arch_changeset_inventory { /* [0] == loc; [1] == id (sort by 1) */ rel_table dirs; rel_table files; enum arch_id_tagging_method method; }; /* automatically generated __STDC__ prototypes */ extern void arch_changeset_inventory (struct arch_changeset_inventory * inv_out, const t_uchar * tree_root, const t_uchar * path, enum arch_id_tagging_method method, enum arch_inventory_category untagged_source_category, int escape_classes); extern void arch_free_changeset_inventory_data (struct arch_changeset_inventory * i); extern rel_table arch_read_changeset_index (const t_uchar * path); extern rel_table arch_read_changeset_dir_metadata (const t_uchar * path); extern mode_t arch_read_permissions_patch (long * uid, long * gid, const t_uchar * file); extern mode_t arch_parse_permissions_params (long * uid, long * gid, const t_uchar * const line); #endif /* INCLUDE__LIBARCH__CHANGESET_UTILS_H */ /* tag: Tom Lord Sat Jan 5 15:26:10 2002 (changeset-utils.h) */ tla-1.3.5+dfsg/src/tla/libarch/archive-mirror.h0000644000175000017500000000322310457622000020006 0ustar useruser/* archive-mirror.h: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__ARCHIVE_MIRROR_H #define INCLUDE__LIBARCH__ARCHIVE_MIRROR_H #include "hackerlab/machine/types.h" #include "tla/libarch/archive.h" enum arch_archive_mirror_cachedrevs { arch_mirror_skip_cachedrevs, arch_mirror_foreign_continuation_cachedrevs, arch_mirror_all_cachedrevs }; struct arch_archive_mirror_options { enum arch_archive_mirror_cachedrevs cachedrevs; int print_summary; /* whether or not to print a summary of new patches */ }; /* automatically generated __STDC__ prototypes */ extern void arch_archive_mirror (int chatter_fd, struct arch_archive * arch, struct arch_archive * to_arch, t_uchar * limit, struct arch_archive_mirror_options * archive_mirror_opts); extern void mirror_cached_revision (int is_cached, struct arch_archive_mirror_options * archive_mirror_opts, enum arch_revision_type type, struct arch_archive * arch, struct arch_archive * to_arch, const t_uchar * revision, const t_uchar * continuation_archive); #endif /* INCLUDE__LIBARCH__ARCHIVE_MIRROR_H */ /* tag: Tom Lord Sat Jan 5 15:26:10 2002 (archive-mirror.h) */ tla-1.3.5+dfsg/src/tla/libarch/archive-version.h0000644000175000017500000000200010457622000020151 0ustar useruser/* archive-version.h: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__ARCHIVE_VERSION_H #define INCLUDE__LIBARCH__ARCHIVE_VERSION_H #include "hackerlab/machine/types.h" extern const char arch_tree_format_1_str[]; extern const char arch_tree_format_2_str[]; enum arch_archive_access { arch_archive_readable, arch_archive_writable, arch_archive_incompatible }; enum arch_archive_type { arch_archive_tla, arch_archive_baz }; /* automatically generated __STDC__ prototypes */ extern t_uchar * arch_archive_version_for_new_archive (int tla_archive); extern enum arch_archive_access arch_archive_access (t_uchar * version); extern enum arch_archive_type arch_archive_type (t_uchar * version); #endif /* INCLUDE__LIBARCH__ARCHIVE_VERSION_H */ /* tag: Tom Lord Sat Jan 5 15:26:10 2002 (archive-version.h) */ tla-1.3.5+dfsg/src/tla/libarch/star-merge.c0000644000175000017500000002566110457622000017130 0ustar useruser/* star-merge.c: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/mem/mem.h" #include "hackerlab/char/str.h" #include "hackerlab/fs/file-names.h" #include "hackerlab/fs/cwd.h" #include "hackerlab/vu/safe.h" #include "tla/libfsutils/tmp-files.h" #include "tla/libfsutils/rmrf.h" #include "tla/libarch/namespace.h" #include "tla/libarch/patch-logs.h" #include "tla/libarch/merge-points.h" #include "tla/libarch/local-cache.h" #include "tla/libarch/make-changeset.h" #include "tla/libarch/apply-changeset.h" #include "tla/libarch/chatter.h" #include "tla/libarch/inode-sig.h" #include "tla/libarch/invent.h" #include "tla/libarch/star-merge.h" /* __STDC__ prototypes for static functions */ static void star_merge_callback (void * vfd, const char * fmt, va_list ap); static assoc_table tag_index_to_full_paths (t_uchar * tree_root); /* * * star-merge FROM MY-TREE [MY-VERSION] * * from-patch-j is the latest rev from FROM's version in both my tree * and FROM * * from-patch-k is the latest rev in FROM merging * my-version-m into FROM where my-version-m * is present in MY-TREE. * * * if j > k * delta(from-patch-j,from-patch-k)[my-tree] * else * delta(my-version-m,from-patch-k)[my-tree] * fi */ t_uchar * arch_nearest_star_ancester (t_uchar * from_tree_root, t_uchar * from_archive, t_uchar * from_revision, t_uchar * to_tree_root, t_uchar * to_archive, t_uchar * to_version) { t_uchar * from_version = 0; rel_table to_logs_for_from_version = rel_table_nil; rel_table from_logs_for_from_version = rel_table_nil; rel_table common_from_logs = rel_table_nil; t_uchar * latest_common_from_revision = 0; rel_table from_merges_from_to = rel_table_nil; t_uchar * highest_common_to_revision = 0; t_uchar * from_rev_of_highest_common_to_revision = 0; t_uchar * answer = 0; int x; from_version = arch_parse_package_name (arch_ret_package_version, 0, from_revision); to_logs_for_from_version = arch_logs (to_tree_root, from_archive, from_version, 0); from_logs_for_from_version = arch_logs (from_tree_root, from_archive, from_version, 0); rel_sort_table_by_field (0, to_logs_for_from_version, 0); rel_sort_table_by_field (0, from_logs_for_from_version, 0); common_from_logs = rel_join (-1, rel_join_output (1,0, -1), 0, 0, to_logs_for_from_version, from_logs_for_from_version); arch_sort_table_by_patch_level_field (1, common_from_logs, 0); if (rel_n_records (common_from_logs)) latest_common_from_revision = str_alloc_cat_many (0, from_version, "--", rel_peek_str (common_from_logs, 0, 0), str_end); from_merges_from_to = arch_tree_merge_points (from_tree_root, from_archive, from_version, to_archive, to_version); arch_sort_table_by_name_field (1, from_merges_from_to, 1); for (x = 0; !highest_common_to_revision && (x < rel_n_records (from_merges_from_to)); ++x) { if (arch_tree_has_log (to_tree_root, to_archive, rel_peek_str (from_merges_from_to, x, 1))) { highest_common_to_revision = str_save (0, rel_peek_str (from_merges_from_to, x, 1)); from_rev_of_highest_common_to_revision = str_alloc_cat_many (0, from_version, "--", rel_peek_str (from_merges_from_to, x, 0), str_end); } } if (!from_rev_of_highest_common_to_revision && !latest_common_from_revision) { answer = 0; } else if (!from_rev_of_highest_common_to_revision) { answer = arch_fully_qualify (from_archive, latest_common_from_revision); } else if (!latest_common_from_revision) { answer = arch_fully_qualify (to_archive, highest_common_to_revision); } else if (0 < arch_names_cmp (from_rev_of_highest_common_to_revision, latest_common_from_revision)) { answer = arch_fully_qualify (to_archive, highest_common_to_revision); } else { answer = arch_fully_qualify (from_archive, latest_common_from_revision); } lim_free (0, from_version); rel_free_table (to_logs_for_from_version); rel_free_table (from_logs_for_from_version); rel_free_table (common_from_logs); lim_free (0, latest_common_from_revision); rel_free_table (from_merges_from_to); lim_free (0, highest_common_to_revision); lim_free (0, from_rev_of_highest_common_to_revision); return answer; } int arch_star_merge (int chatter_fd, struct arch_archive * from_arch, t_uchar * from_archive, t_uchar * from_revision, t_uchar * to_tree_root, struct arch_archive * to_arch, t_uchar * to_archive, t_uchar * to_version, t_uchar * cache_dir, t_uchar * changeset_output, int use_diff3, int forward, int escape_classes) { int answer = 2; t_uchar * tmp_dir = 0; t_uchar * changeset = 0; t_uchar * from_tree_root = 0; t_uchar * fq_orig_revision = 0; t_uchar * orig_archive = 0; t_uchar * orig_revision = 0; tmp_dir = tmp_file_name (to_tree_root, ",,star-merge"); if (!changeset_output) changeset = file_name_in_vicinity (0, tmp_dir, ",,changeset"); else changeset = str_save (0, changeset_output); rmrf_file (tmp_dir); safe_mkdir (tmp_dir, 0777); from_tree_root = arch_find_or_make_tmp_local_copy (chatter_fd, tmp_dir, to_tree_root, cache_dir, from_arch, from_archive, from_revision); fq_orig_revision = arch_nearest_star_ancester (from_tree_root, from_archive, from_revision, to_tree_root, to_archive, to_version); if (!fq_orig_revision) { safe_printfmt (2, "star-merge: unable to merge unrelated trees.\n"); answer = 2; } else { t_uchar * orig_tree_root = 0; struct arch_make_changeset_report make_report = {0, }; struct arch_apply_changeset_report apply_report = {0, }; assoc_table inode_shortcut = 0; arch_chatter (chatter_fd, "* star-merge by delta(%s,%s/%s)[%s]\n", fq_orig_revision, from_archive, from_revision, to_tree_root); orig_archive = arch_parse_package_name (arch_ret_archive, 0, fq_orig_revision); orig_revision = arch_parse_package_name (arch_ret_non_archive, 0, fq_orig_revision); orig_tree_root = arch_find_or_make_tmp_local_copy (chatter_fd, tmp_dir, to_tree_root, cache_dir, (str_cmp (orig_archive, from_archive) ? 0 : from_arch), orig_archive, orig_revision); if (changeset_output) { make_report.callback = star_merge_callback; make_report.thunk = (void *)(long)chatter_fd; } arch_read_inode_sig (0, &inode_shortcut, from_tree_root, orig_archive, orig_revision); arch_make_changeset (&make_report, orig_tree_root, from_tree_root, changeset, arch_unspecified_id_tagging, arch_inventory_unrecognized, rel_table_nil, inode_shortcut, 0, escape_classes); if (changeset_output) answer = 0; else { assoc_table older_files_table = 0; assoc_table yours_files_table = 0; if (use_diff3) { older_files_table = tag_index_to_full_paths (orig_tree_root); yours_files_table = tag_index_to_full_paths (from_tree_root); } apply_report.callback = star_merge_callback; apply_report.thunk = (void *)(long)chatter_fd; arch_chatter (chatter_fd, "* applying changeset\n"); safe_flush (chatter_fd); arch_apply_changeset (&apply_report, changeset, to_tree_root, arch_unspecified_id_tagging, arch_inventory_unrecognized, 0, forward, use_diff3, older_files_table, yours_files_table, escape_classes); if (arch_conflicts_occured (&apply_report)) answer = 1; else answer = 0; free_assoc_table (older_files_table); free_assoc_table (yours_files_table); } arch_free_make_changeset_report_data (&make_report); arch_free_apply_changeset_report_data (&apply_report); lim_free (0, orig_tree_root); free_assoc_table (inode_shortcut); } rmrf_file (tmp_dir); lim_free (0, tmp_dir); lim_free (0, from_tree_root); lim_free (0, fq_orig_revision); lim_free (0, orig_archive); lim_free (0, orig_revision); return answer; } static void star_merge_callback (void * vfd, const char * fmt, va_list ap) { int fd; fd = (int)(t_ulong)vfd; if (fd >= 0) { safe_printfmt_va_list (fd, fmt, ap); safe_flush (fd); } } static assoc_table tag_index_to_full_paths (t_uchar * tree_root) { rel_table index = rel_table_nil; assoc_table answer = 0; int x; index = arch_source_inventory (tree_root, 1, 0, 0); for (x = 0; x < rel_n_records (index); ++x) { rel_field relpath_field; rel_field id_field; t_uchar * full_path, *cwd = 0, *tpath; relpath_field = rel_get_field (index, x, 0); id_field = rel_get_field (index, x, 1); full_path = file_name_in_vicinity (0, tree_root, rel_field_str (relpath_field)); if (!file_name_is_absolute(full_path)) { cwd = safe_current_working_directory (); tpath = full_path; full_path = str_alloc_cat_many(0, cwd, "/", tpath, str_end); lim_free(0, cwd); lim_free(0, tpath); } assoc_set_taking (&answer, rel_field_ref (id_field), rel_make_field_str (full_path)); rel_field_unref (relpath_field); rel_field_unref (id_field); lim_free (0, full_path); } rel_free_table (index); return answer; } extern void arch_merge3(int chatter_fd, t_uchar * mine_tree_root, t_uchar * base_tree_root, t_uchar * other_tree_root, int escape_classes) { struct arch_make_changeset_report make_report = {0, }; struct arch_apply_changeset_report apply_report = {0, }; assoc_table older_files_table; assoc_table yours_files_table; t_uchar * tmp_dir = tmp_file_name (mine_tree_root, ",,star-merge"); t_uchar * changeset = file_name_in_vicinity (0, tmp_dir, ",,changeset"); assoc_table inode_shortcut = 0; t_uchar * base_revision = arch_tree_latest_revision (base_tree_root); rmrf_file (tmp_dir); safe_mkdir (tmp_dir, 0777); if (chatter_fd != -1) { make_report.callback = star_merge_callback; make_report.thunk = (void *)(long)chatter_fd; apply_report.callback = star_merge_callback; apply_report.thunk = (void *)(long)chatter_fd; } older_files_table = tag_index_to_full_paths (base_tree_root); yours_files_table = tag_index_to_full_paths (other_tree_root); arch_read_inode_sig (0, &inode_shortcut, base_tree_root, other_tree_root, base_revision); arch_make_changeset (&make_report, base_tree_root, other_tree_root, changeset, arch_unspecified_id_tagging, arch_inventory_unrecognized, rel_table_nil, inode_shortcut, 0, escape_classes); arch_apply_changeset (&apply_report, changeset, mine_tree_root, arch_unspecified_id_tagging, arch_inventory_unrecognized, 0, 0, 1, older_files_table, yours_files_table, escape_classes); rmrf_file (tmp_dir); } /* tag: Tom Lord Sat Jun 28 16:40:26 2003 (star-merge.c) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-library-branches.c0000644000175000017500000000766610457622000021057 0ustar useruser/* cmd-library-branches.c * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "config-options.h" #include "hackerlab/cmd/main.h" #include "tla/libarch/namespace.h" #include "tla/libarch/project-tree.h" #include "tla/libarch/my.h" #include "tla/libarch/libraries.h" #include "tla/libarch/cmd-library-branches.h" static t_uchar * usage = "[options] [category]"; static t_uchar * version_string = (cfg__std__package " from regexps.com\n" "\n" "Copyright 2003 Tom Lord\n" "\n" "This is free software; see the source for copying conditions.\n" "There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\n" "PARTICULAR PURPOSE.\n" "\n" "Report bugs to " cfg__tla_bug_mail ".\n" "\n" cfg__std__release_id_string "\n"); #define OPTS(OP) \ OP (opt_help_msg, "h", "help", 0, \ "Display a help message and exit.") \ OP (opt_long_help, "H", 0, 0, \ "Display a verbose help message and exit.") \ OP (opt_version, "V", "version", 0, \ "Display a release identifier string\n" \ "and exit.") \ OP (opt_archive, "A", "archive", 1, \ "Override `my-default-archive'") t_uchar arch_cmd_library_branches_help[] = ("list the branches in a library category\n" "List all branches within CATEGORY in the revision library.\n"); enum options { OPTS (OPT_ENUM) }; static struct opt_desc opts[] = { OPTS (OPT_DESC) {-1, 0, 0, 0, 0} }; int arch_cmd_library_branches (t_uchar * program_name, int argc, char * argv[]) { int o; struct opt_parsed * option; t_uchar * default_archive; default_archive = 0; safe_buffer_fd (1, 0, O_WRONLY, 0); option = 0; while (1) { o = opt_standard (lim_use_must_malloc, &option, opts, &argc, argv, program_name, usage, version_string, arch_cmd_library_branches_help, opt_help_msg, opt_long_help, opt_version); if (o == opt_none) break; switch (o) { default: safe_printfmt (2, "unhandled option `%s'\n", option->opt_string); panic ("internal error parsing arguments"); usage_error: opt_usage (2, argv[0], program_name, usage, 1); exit (1); /* bogus_arg: */ safe_printfmt (2, "ill-formed argument for `%s' (`%s')\n", option->opt_string, option->arg_string); goto usage_error; case opt_archive: { default_archive = str_save (0, option->arg_string); break; } } } if (argc > 2) goto usage_error; default_archive = arch_my_default_archive (default_archive); { t_uchar * cat_spec = 0; t_uchar * archive = 0; t_uchar * cat = 0; rel_table branches = rel_table_nil; if (argc == 2) { cat_spec = str_save (0, argv[1]); if (!arch_valid_package_name (cat_spec, arch_maybe_archive, arch_req_category, 0)) { safe_printfmt (2, "%s: invalid category name (%s)\n", argv[0], cat_spec); exit (2); } } else cat_spec = arch_try_tree_version (program_name); archive = arch_parse_package_name (arch_ret_archive, default_archive, cat_spec); cat = arch_parse_package_name (arch_ret_category, 0, cat_spec); branches = arch_library_branches (archive, cat); rel_print_table (1, branches); lim_free (0, cat_spec); } return 0; } /* tag: Tom Lord Wed May 21 14:49:30 2003 (library-branches.c) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-remove-log-version.c0000644000175000017500000001135010457622000021350 0ustar useruser/* cmd-remove-log-version.c * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "config-options.h" #include "hackerlab/cmd/main.h" #include "tla/libarch/namespace.h" #include "tla/libarch/project-tree.h" #include "tla/libarch/patch-logs.h" #include "tla/libarch/cmd-remove-log-version.h" static t_uchar * usage = "[options] [archive]/version"; static t_uchar * version_string = (cfg__std__package " from regexps.com\n" "\n" "Copyright 2003 Tom Lord\n" "\n" "This is free software; see the source for copying conditions.\n" "There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\n" "PARTICULAR PURPOSE.\n" "\n" "Report bugs to " cfg__tla_bug_mail ".\n" "\n" cfg__std__release_id_string "\n"); #define OPTS(OP) \ OP (opt_help_msg, "h", "help", 0, \ "Display a help message and exit.") \ OP (opt_long_help, "H", 0, 0, \ "Display a verbose help message and exit.") \ OP (opt_version, "V", "version", 0, \ "Display a release identifier string\n" \ "and exit.") \ OP (opt_archive, "A", "archive", 1, \ "Override `my-default-archive'") \ OP (opt_dir, "d", "dir DIR", 1, \ "cd to DIR first") t_uchar arch_cmd_remove_log_version_help[] = ("remove a version's patch log from a project tree\n" "Remove the patch log for VERSION from the project tree containing DIR\n" "(or the current directory).\n" "\n" "Use this command with caution -- it erases revision history from\n" "the project tree!\n"); enum options { OPTS (OPT_ENUM) }; static struct opt_desc opts[] = { OPTS (OPT_DESC) {-1, 0, 0, 0, 0} }; int arch_cmd_remove_log_version (t_uchar * program_name, int argc, char * argv[]) { int o; struct opt_parsed * option; t_uchar * default_archive = 0; char * dir = 0; dir = str_save (0, "."); safe_buffer_fd (1, 0, O_WRONLY, 0); option = 0; while (1) { o = opt_standard (lim_use_must_malloc, &option, opts, &argc, argv, program_name, usage, version_string, arch_cmd_remove_log_version_help, opt_help_msg, opt_long_help, opt_version); if (o == opt_none) break; switch (o) { default: safe_printfmt (2, "unhandled option `%s'\n", option->opt_string); panic ("internal error parsing arguments"); usage_error: opt_usage (2, argv[0], program_name, usage, 1); exit (1); /* bogus_arg: */ safe_printfmt (2, "ill-formed argument for `%s' (`%s')\n", option->opt_string, option->arg_string); goto usage_error; case opt_archive: { default_archive = str_save (0, option->arg_string); break; } case opt_dir: { dir = str_save (0, option->arg_string); break; } } } if (argc != 2) goto usage_error; { t_uchar * version_spec; t_uchar * tree_root = 0; t_uchar * archive = 0; t_uchar * version = 0; version_spec = argv[1]; if (default_archive) { if (!arch_valid_archive_name (default_archive)) { safe_printfmt (2, "%s: invalid archive name (%s)\n", argv[0], default_archive); exit (1); } } if (!arch_valid_package_name (version_spec, arch_maybe_archive, arch_req_version, 0)) { safe_printfmt (2, "%s: invalid version name (%s)\n", argv[0], version_spec); exit (1); } archive = arch_parse_package_name (arch_ret_archive, default_archive, version_spec); version = arch_parse_package_name (arch_ret_non_archive, 0, version_spec); tree_root = arch_tree_root (0, dir, 0); if (!tree_root) { safe_printfmt (2, "%s: not in project tree (%s)\n", argv[0], dir); exit (1); } arch_remove_log_version (tree_root, archive, version); lim_free (0, tree_root); lim_free (0, archive); lim_free (0, version); } lim_free (0, default_archive); lim_free (0, dir); return 0; } /* tag: Tom Lord Tue May 13 16:35:47 2003 (remove-log.c) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-inventory.h0000644000175000017500000000124710457622000017657 0ustar useruser/* cmd-inventory.h: * **************************************************************** * Copyright (C) 2003 Tom Lord, Stig Brautaset * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__CMD_INVENTORY_H #define INCLUDE__LIBARCH__CMD_INVENTORY_H #include "hackerlab/machine/types.h" extern t_uchar arch_cmd_inventory_help[]; /* automatically generated __STDC__ prototypes */ extern int arch_cmd_inventory (t_uchar * program_name, int argc, char * argv[]); #endif /* INCLUDE__LIBARCH__CMD_INVENTORY_H */ /* tag: Stig Brautaset Sat Jun 7 17:22:19 BST 2003 (cmd-srcfind.h) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-delete-id.c0000644000175000017500000000573010457622000017452 0ustar useruser/* cmd-delete-id.c * **************************************************************** * Copyright (C) 2001, 2002, 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "config-options.h" #include "hackerlab/cmd/main.h" #include "tla/libarch/inv-ids.h" #include "tla/libarch/cmd.h" #include "tla/libarch/cmd-delete-id.h" static t_uchar * usage = "[options] file ..."; static t_uchar * version_string = (cfg__std__package " from regexps.com\n" "\n" "Copyright 2001, 2002, 2003 Tom Lord\n" "\n" "This is free software; see the source for copying conditions.\n" "There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\n" "PARTICULAR PURPOSE.\n" "\n" "Report bugs to " cfg__tla_bug_mail ".\n" "\n" cfg__std__release_id_string "\n"); #define OPTS(OP) \ OP (opt_help_msg, "h", "help", 0, \ "Display a help message and exit.") \ OP (opt_long_help, "H", 0, 0, \ "Display a verbose help message and exit.") \ OP (opt_version, "V", "version", 0, \ "Display a release identifier string\n" \ "and exit.") t_uchar arch_cmd_delete_id_help[] = ("remove an explicit inventory id\n" "Remove an explicit inventory id for FILE (which may be a\n" "regular file, symbolic link, or directory).\n"); enum options { OPTS (OPT_ENUM) }; static struct opt_desc opts[] = { OPTS (OPT_DESC) {-1, 0, 0, 0, 0} }; int arch_cmd_delete_id (t_uchar * program_name, int argc, char * argv[]) { int o; struct opt_parsed * option; safe_buffer_fd (1, 0, O_WRONLY, 0); option = 0; while (1) { o = opt_standard (lim_use_must_malloc, &option, opts, &argc, argv, program_name, usage, version_string, arch_cmd_delete_id_help, opt_help_msg, opt_long_help, opt_version); if (o == opt_none) break; switch (o) { default: safe_printfmt (2, "unhandled option `%s'\n", option->opt_string); panic ("internal error parsing arguments"); usage_error: opt_usage (2, argv[0], program_name, usage, 1); exit (1); /* bogus_arg: */ safe_printfmt (2, "ill-formed argument for `%s' (`%s')\n", option->opt_string, option->arg_string); goto usage_error; } } if (argc < 2) goto usage_error; { int a; for (a = 1; a < argc; ++a) { t_uchar * file; file = argv[a]; arch_delete_explicit_id (file); } } return 0; } /* tag: Tom Lord Wed May 14 12:24:43 2003 (delete-tag.c) */ tla-1.3.5+dfsg/src/tla/libarch/pfs-sftp.h0000644000175000017500000000162010457622000016616 0ustar useruser/* pfs-sftp.h: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__PFS_SFTP_H #define INCLUDE__LIBARCH__PFS_SFTP_H #include "tla/libarch/pfs.h" /* automatically generated __STDC__ prototypes */ extern int arch_pfs_sftp_supported_protocol (const t_uchar * uri); extern struct arch_pfs_session * arch_pfs_sftp_connect (const t_uchar * uri); extern int arch_pfs_sftp_parse_uri (t_uchar ** user, t_uchar ** hostname, t_uchar ** port, char ** path, const t_uchar * uri); #endif /* INCLUDE__LIBARCH__PFS_SFTP_H */ /* tag: Tom Lord Sat Jan 5 15:26:10 2002 (pfs-sftp.h) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-apply-delta.h0000644000175000017500000000123410457622000020032 0ustar useruser/* cmd-apply-delta.h: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__CMD_APPLY_DELTA_H #define INCLUDE__LIBARCH__CMD_APPLY_DELTA_H #include "hackerlab/machine/types.h" extern t_uchar arch_cmd_apply_delta_help[]; /* automatically generated __STDC__ prototypes */ extern int arch_cmd_apply_delta (t_uchar * program_name, int argc, char * argv[]); #endif /* INCLUDE__LIBARCH__CMD_APPLY_DELTA_H */ /* tag: Tom Lord Sat Jan 5 15:26:10 2002 (cmd-deltapatch.h) */ tla-1.3.5+dfsg/src/tla/libarch/pristines.h0000644000175000017500000000566210457622000017106 0ustar useruser/* pristines.h: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__PRISTINES_H #define INCLUDE__LIBARCH__PRISTINES_H #include "hackerlab/machine/types.h" #include "tla/libawk/relational.h" #include "tla/libarch/archive.h" enum arch_pristine_types { arch_unlocked_pristine = 1, /* must be first */ arch_locked_pristine = 2, arch_any_pristine = (arch_unlocked_pristine | arch_locked_pristine), }; enum arch_pristine_search_scope { arch_tree_pristine_search, arch_tree_and_sibling_pristine_search, arch_cache_dir_pristine_search, }; /* automatically generated __STDC__ prototypes */ extern void arch_make_pristine (const t_uchar * tree_root, const t_uchar * archive, const t_uchar * revision); extern void arch_add_pristine (int chatter_fd, const t_uchar * tree_root, struct arch_archive * arch, const t_uchar * archive, const t_uchar * revision); extern t_uchar * arch_pristine_loc (const t_uchar * archive, const t_uchar * revision, int locked_p); extern t_uchar * arch_pristine_path (const t_uchar * tree_root, const t_uchar * archive, const t_uchar * revision, int locked_p); extern void arch_install_pristine (const t_uchar * tree_root, const t_uchar * archive, const t_uchar * revision, const t_uchar * source); extern void arch_lock_pristine (const t_uchar * tree_root, const t_uchar * archive, const t_uchar * revision); extern void arch_unlock_pristine (const t_uchar * tree_root, const t_uchar * archive, const t_uchar * revision); extern rel_table arch_pristines (const t_uchar * tree_root, const t_uchar * archive_limit, const t_uchar * limit, int pristine_types); extern t_uchar * arch_find_pristine (int * is_locked, const t_uchar * tree_root_or_root_dir, const t_uchar * archive, const t_uchar * revision, int pristine_types, enum arch_pristine_search_scope scope); #endif /* INCLUDE__LIBARCH__PRISTINES_H */ /* tag: Tom Lord Sat Jan 5 15:26:10 2002 (pristines.h) */ tla-1.3.5+dfsg/src/tla/libarch/invent.h0000644000175000017500000000715510457622000016370 0ustar useruser/* inv.h: file inventories * **************************************************************** * Copyright (C) 2002, 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__FILE_UTILS__INV_H #define INCLUDE__FILE_UTILS__INV_H #include "hackerlab/os/sys/stat.h" #include "hackerlab/machine/types.h" #include "hackerlab/rx-posix/regex.h" #include "tla/libawk/relational.h" #include "tla/libarch/inv-ids.h" struct arch_inventory_regexps { regex_t excludes_pattern; regex_t junk_pattern; regex_t backup_pattern; regex_t precious_pattern; regex_t unrecognized_pattern; regex_t source_pattern; }; struct arch_inventory_options { t_uint categories; /* set of enum inv_category */ int want_ids; /* go to the expense of computing file ids? */ int treat_unrecognized_source_as_source; /* report source-named files that are missing ids? */ enum arch_id_tagging_method method; /* id tagging method */ enum arch_inventory_category untagged_source_category; /* what are untagged files matching source? */ int nested; /* search in nested trees? */ int include_excluded; /* ignore the `excludes_pattern'? */ int override_method; /* override tree's id tagging methods? */ struct arch_inventory_regexps regexps; }; typedef void (*inv_callback) (const t_uchar * path, struct stat * stat_buf, enum arch_inventory_category category, const t_uchar * id, int has_source_name, void * closure, int escape_classes); /* automatically generated __STDC__ prototypes */ extern rel_table arch_source_inventory (const t_uchar * tree_root, int include_ctl, int include_precious, int include_nested); extern rel_table arch_source_files_inventory (const t_uchar * tree_root, int include_ctl, int include_precious); extern rel_table arch_source_files_file_list(const t_uchar * tree_root, int include_ctl, int include_precious); extern t_uchar * arch_default_naming_conventions_regexp (enum arch_inventory_category cat); extern t_uchar * arch_ancient_default_naming_conventions_regexp (enum arch_inventory_category cat); extern t_uchar * arch_null_default_naming_conventions_regexp (enum arch_inventory_category cat); extern void arch_get_inventory_naming_conventions (struct arch_inventory_options * options, const char * tree_root); extern void arch_free_inventory_naming_conventions (struct arch_inventory_options * options); extern void arch_inventory_traversal (struct arch_inventory_options * options, const t_uchar * root, inv_callback callback, void * closure, int escape_classes); extern int arch_is_control_file (const char * rel_file, const char * filename); extern t_uchar * normal_from_path (t_uchar const *path); extern t_uchar * prefix_from_path (t_uchar const *path); #endif /* INCLUDE__FILE_UTILS__INV_H */ /* tag: Tom Lord Wed May 14 11:10:28 2003 (invent.h) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-parse-package-name.h0000644000175000017500000000135010457622000021236 0ustar useruser/* cmd-parse-package-name.h: * **************************************************************** * Copyright (C) 2003 Tom Lord, Stig Brautaset * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__CMD_PARSE_PACKAGE_NAME_H #define INCLUDE__LIBARCH__CMD_PARSE_PACKAGE_NAME_H #include "hackerlab/machine/types.h" extern t_uchar arch_cmd_parse_package_name_help[]; /* automatically generated __STDC__ prototypes */ extern int arch_cmd_parse_package_name (t_uchar * program_name, int argc, char * argv[]); #endif /* INCLUDE__LIBARCH__CMD_PARSE_PACKAGE_NAME_H */ /* tag: Stig Brautaset Sat Jun 7 16:53:59 BST 2003 (cmd-parse-package-name.h) */ tla-1.3.5+dfsg/src/tla/libarch/import.c0000644000175000017500000003622510457622000016372 0ustar useruser/* import.c: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/bugs/panic.h" #include "hackerlab/os/time.h" #include "hackerlab/char/str.h" #include "hackerlab/fs/file-names.h" #include "hackerlab/vu/safe.h" #include "tla/libdate/date-string.h" #include "tla/libfsutils/rmrf.h" #include "tla/libfsutils/string-files.h" #include "tla/libfsutils/copy-file.h" #include "tla/libfsutils/tmp-files.h" #include "tla/libfsutils/rmrf.h" #include "tla/libarch/patch-logs.h" #include "tla/libarch/invent.h" #include "tla/libarch/my.h" #include "tla/libarch/hooks.h" #include "tla/libarch/namespace.h" #include "tla/libarch/pristines.h" #include "tla/libarch/project-tree.h" #include "tla/libarch/changelogs.h" #include "tla/libarch/local-cache.h" #include "tla/libarch/import.h" /* __STDC__ prototypes for static functions */ static t_uchar * arch_prepare_import_pristine (t_uchar ** changelog_loc_ret, t_uchar ** cooked_log_ret, t_uchar * tree_root, t_uchar * raw_log, t_uchar * archive, t_uchar * version, int full_meta); static void arch_import_mid_commit (t_uchar * tree_root, t_uchar * cooked_log); static void arch_finish_import (t_uchar * tree_root, t_uchar * archive, t_uchar * version, t_uchar * pristine, t_uchar * changelog_loc, int full_meta); static void arch_import_failed (t_uchar * tree_root, t_uchar * archive, t_uchar * version, t_uchar * pristine); static rel_table all_patches (t_uchar * tree_root); void arch_import (struct arch_archive * arch, t_uchar * version, t_uchar * tree_root, t_uchar * raw_log) { t_uchar * changelog_loc = 0; t_uchar * errstr; t_uchar * pristine_path = 0; t_uchar * cooked_log = 0; t_uchar * my_uid = 0; t_uchar * txn_id = 0; t_uchar * revision; const int full_meta = arch_tree_has_meta_flag (tree_root); revision = str_alloc_cat (0, version, "--base-0"); pristine_path = arch_prepare_import_pristine (&changelog_loc, &cooked_log, tree_root, raw_log, arch->name, version, full_meta); my_uid = arch_my_id_uid (); txn_id = arch_generate_txn_id (); if (arch_revision_exists (arch, revision)) { safe_printfmt (2, "arch_import: the revision already exists\n revision: %s/%s\n", arch->official_name, revision); exit (2); } if (arch_archive_lock_revision (&errstr, arch, version, 0, my_uid, txn_id, "base-0")) { safe_printfmt (2, "arch_import: unable to acquire revision lock (%s)\n tree: %s\n revision: %s/%s--base-0\n", errstr, tree_root, arch->name, version); exit (2); } if (arch_archive_put_log (&errstr, arch, version, 0, my_uid, txn_id, cooked_log)) { safe_printfmt (2, "arch_import: unable to send log message to archive (%s)\n tree: %s\n revision: %s/%s\n", errstr, tree_root, arch->name, version); exit (2); } if (arch_archive_put_import (&errstr, arch, version, 0, my_uid, txn_id, "base-0", pristine_path)) { safe_printfmt (2, "arch_import: unable to send import tree to archive (%s)\n tree: %s\n revision: %s/%s\n", errstr, tree_root, arch->name, version); exit (2); } if (arch_revision_ready (&errstr, arch, version, 0, my_uid, txn_id, "base-0")) { safe_printfmt (2, "arch_import: error sending tree to archive (%s)\n tree: %s\n revision: %s/%s\n", errstr, tree_root, arch->name, version); exit (2); } arch_import_mid_commit (tree_root, cooked_log); if (arch_archive_finish_revision (&errstr, arch, version, 0, my_uid, txn_id, "base-0")) { arch_import_failed (tree_root, arch->name, version, pristine_path); safe_printfmt (2, "arch_import: unable to complete import transaction (%s)\n tree: %s\n revision: %s/%s\n", errstr, tree_root, arch->name, version); exit (2); } arch_finish_import (tree_root, arch->name, version, pristine_path, changelog_loc, full_meta); arch_run_hook ("import", "ARCH_ARCHIVE", arch->name, "ARCH_REVISION", revision, "ARCH_TREE_ROOT", tree_root, (t_uchar*)0); lim_free (0, revision); lim_free (0, changelog_loc); lim_free (0, pristine_path); lim_free (0, cooked_log); lim_free (0, my_uid); lim_free (0, txn_id); } static t_uchar * arch_prepare_import_pristine (t_uchar ** changelog_loc_ret, t_uchar ** cooked_log_ret, t_uchar * tree_root, t_uchar * raw_log, t_uchar * archive, t_uchar * version, int full_meta) { t_uchar * tmp_stem = 0; t_uchar * tmp_path = 0; t_uchar * revision = 0; t_uchar * pristine_path = 0; rel_table inventory = rel_table_nil; rel_table new_files_list = rel_table_nil; t_uchar * log_message = 0; t_uchar * pristine_log_path = 0; int pristine_log_fd; /**************************************************************** * double check that we were handed a valid log message, if any */ if (raw_log) invariant (arch_valid_log_file (raw_log)); /**************************************************************** * make a temp dir for the pristine copy of the import */ tmp_stem = str_alloc_cat_many (0, ",,import.", version, "--base-0--", archive, str_end); tmp_path = tmp_file_name (tree_root, tmp_stem); rmrf_file (tmp_path); safe_mkdir (tmp_path, 0777); revision = str_alloc_cat (0, version, "--base-0"); pristine_path = file_name_in_vicinity (0, tmp_path, revision); inventory = arch_source_inventory (tree_root, 1, 0, 0); safe_mkdir (pristine_path, 0777); copy_file_list (pristine_path, tree_root, inventory, full_meta); /**************************************************************** * As long as the cache is hot with directories and inodes, compute * a list of files for the New-files: header in the log message. */ new_files_list = arch_source_files_inventory (tree_root, 0, 0); /**************************************************************** * Create a log message for the newly committed base-0. * * Although the message is empty at this point, it's important for * it to appear in directory listings of the patch-log, so that it * shows up in the New-patches: header. */ pristine_log_path = arch_log_file (pristine_path, archive, revision); pristine_log_fd = safe_open (pristine_log_path, O_WRONLY | O_CREAT | O_EXCL, 0666); /**************************************************************** * Generate the actual log message, adding automatically generated * headers either to the supplied raw-log or to a default raw-log. */ { t_uchar * my_id = 0; time_t now; t_uchar * std_date = 0; t_uchar * human_date = 0; int log_fd; rel_table patches = rel_table_nil; t_uchar * eoh; my_id = arch_my_id (); now = time(0); std_date = standard_date (now); human_date = pretty_date (now); log_fd = make_output_to_string_fd (); safe_printfmt (log_fd, "Revision: %s--base-0\n", version); safe_printfmt (log_fd, "Archive: %s\n", archive); safe_printfmt (log_fd, "Creator: %s\n", my_id); safe_printfmt (log_fd, "Date: %s\n", human_date); safe_printfmt (log_fd, "Standard-date: %s\n", std_date); /******************************** * Copy headers from the raw log */ if (raw_log) { eoh = raw_log; while (1) { eoh = str_chr_index (eoh, '\n'); if (!eoh || (eoh[1] == '\n') || (!eoh[1])) break; ++eoh; } if (eoh) { eoh = eoh + 1; safe_printfmt (log_fd, "%.*s", (int)(eoh - raw_log), raw_log); } } else { safe_printfmt (log_fd, "Summary: initial import\n"); } /******************************** * automatic headers for New-files: and New-patches: */ arch_print_log_list_header (log_fd, "New-files", new_files_list, 0); patches = all_patches (pristine_path); arch_print_log_list_header (log_fd, "New-patches", patches, 0); /******************************** * copy or generate the log body */ if (!raw_log) safe_printfmt (log_fd, "\n\n(automatically generated log message)\n"); else { if (*eoh) { safe_printfmt (log_fd, "%s", eoh); } else { safe_printfmt (log_fd, "\n\n"); } } /******************************** * oh... did i mention we were writing * the log to a string? */ log_message = string_fd_close (log_fd); lim_free (0, my_id); lim_free (0, std_date); lim_free (0, human_date); rel_free_table (patches); } /**************************************************************** * Write the log into the patch-log of the pristine tree. */ safe_printfmt (pristine_log_fd, "%s", log_message); safe_close (pristine_log_fd); /**************************************************************** * If the import tree has a ChangeLog for this version, * update it in the pristine tree. */ { int x; t_uchar * changelog_id_suffix = 0; t_uchar * changelog_x_id = 0; t_uchar * changelog_i_id = 0; changelog_id_suffix = str_alloc_cat_many (0, "_automatic-ChangeLog--", archive, "/", version, str_end); changelog_x_id = str_alloc_cat (0, "x", changelog_id_suffix); changelog_i_id = str_alloc_cat (0, "i", changelog_id_suffix); for (x = 0; x < rel_n_records (inventory); ++x) { if (!str_cmp (changelog_x_id, rel_peek_str (inventory, x, 1)) || !str_cmp (changelog_i_id, rel_peek_str (inventory, x, 1))) { struct stat clstatb; t_uchar * changelog_path = 0; mode_t clmode; int out_fd = -1; if (changelog_loc_ret) *changelog_loc_ret = str_save (0, rel_peek_str (inventory, x, 0)); changelog_path = file_name_in_vicinity (0, pristine_path, rel_peek_str (inventory, x, 0)); safe_stat (changelog_path, &clstatb); if (full_meta) { clmode = clstatb.st_mode & 07777; } else { clmode = clstatb.st_mode & 0777; } out_fd = safe_open (changelog_path, O_WRONLY | O_CREAT | O_TRUNC, clmode); safe_fchmod (out_fd, clmode); if (full_meta) safe_fchown (out_fd, clstatb.st_uid, clstatb.st_gid); arch_generate_changelog (out_fd, pristine_path, 0, 0, 0, 0, archive, version); safe_close (out_fd); lim_free (0, changelog_path); break; } } lim_free (0, changelog_id_suffix); lim_free (0, changelog_x_id); lim_free (0, changelog_i_id); } /**************************************************************** * Give a copy of the log to the caller. */ if (cooked_log_ret) *cooked_log_ret = str_save (0, log_message); lim_free (0, tmp_stem); lim_free (0, tmp_path); lim_free (0, revision); rel_free_table (inventory); rel_free_table (new_files_list); lim_free (0, log_message); lim_free (0, pristine_log_path); /**************************************************************** * Give the user the path to the pristine tree for base-0. * It's up tot he caller to stash this in the archive. */ return pristine_path; } static void arch_import_mid_commit (t_uchar * tree_root, t_uchar * cooked_log) { arch_start_tree_commit (tree_root, cooked_log); } static void arch_finish_import (t_uchar * tree_root, t_uchar * archive, t_uchar * version, t_uchar * pristine, t_uchar * changelog_loc, int full_meta) { t_uchar * revision = 0; t_uchar * pristine_dir = 0; t_uchar * pristine_dir_tail = 0; revision = str_alloc_cat (0, version, "--base-0"); /**************************************************************** * txnally install the log file in the patch log */ arch_finish_tree_commit (tree_root, archive, revision, changelog_loc, full_meta); /**************************************************************** * Install the pristine tree unless we have a greedy library * that is eager to slurp it up. * * If we don't snarf the library here, it'll be deleted * during "clean up", below. */ if (!arch_greedy_library_wants_revision (archive, revision)) arch_install_pristine (tree_root, archive, revision, pristine); /**************************************************************** * clean up */ pristine_dir = file_name_directory_file (0, pristine); invariant (!!pristine_dir); pristine_dir_tail = file_name_tail (0, pristine_dir); invariant (!str_cmp_prefix (",,import.", pristine_dir_tail)); rmrf_file (pristine_dir); lim_free (0, revision); lim_free (0, pristine_dir); lim_free (0, pristine_dir_tail); } static void arch_import_failed (t_uchar * tree_root, t_uchar * archive, t_uchar * version, t_uchar * pristine) { t_uchar * revision = 0; t_uchar * pristine_dir = 0; t_uchar * pristine_dir_tail = 0; revision = str_alloc_cat (0, version, "--base-0"); /**************************************************************** * get out of mid-commit state in the project tree */ arch_abort_tree_commit (tree_root, archive, revision); /**************************************************************** * clean up */ pristine_dir = file_name_directory_file (0, pristine); invariant (!!pristine_dir); pristine_dir_tail = file_name_tail (0, pristine_dir); invariant (str_cmp_prefix (",,import.", pristine_dir_tail)); rmrf_file (pristine_dir); lim_free (0, revision); lim_free (0, pristine_dir); lim_free (0, pristine_dir_tail); } static rel_table all_patches (t_uchar * tree_root) { rel_table log_versions = rel_table_nil; rel_table answer = rel_table_nil; int x; log_versions = arch_log_versions (tree_root, 0, 0, 0, 0); for (x = 0; x < rel_n_records (log_versions); ++x) { t_uchar * archive = 0; t_uchar * version = 0; rel_table patch_list = rel_table_nil; archive = arch_parse_package_name (arch_ret_archive, 0, rel_peek_str (log_versions, x, 0)); version = arch_parse_package_name (arch_ret_non_archive, 0, rel_peek_str (log_versions, x, 0)); patch_list = arch_logs (tree_root, archive, version, 1); rel_append_x (&answer, patch_list); lim_free (0, archive); lim_free (0, version); rel_free_table (patch_list); } rel_free_table (log_versions); return answer; } /* tag: Tom Lord Sat May 24 22:40:45 2003 (import.c) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-library-versions.c0000644000175000017500000001046410457622000021130 0ustar useruser/* cmd-library-versions.c * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "config-options.h" #include "hackerlab/cmd/main.h" #include "tla/libarch/namespace.h" #include "tla/libarch/project-tree.h" #include "tla/libarch/my.h" #include "tla/libarch/libraries.h" #include "tla/libarch/cmd-library-versions.h" static t_uchar * usage = "[options] [branch]"; static t_uchar * version_string = (cfg__std__package " from regexps.com\n" "\n" "Copyright 2003 Tom Lord\n" "\n" "This is free software; see the source for copying conditions.\n" "There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\n" "PARTICULAR PURPOSE.\n" "\n" "Report bugs to " cfg__tla_bug_mail ".\n" "\n" cfg__std__release_id_string "\n"); #define OPTS(OP) \ OP (opt_help_msg, "h", "help", 0, \ "Display a help message and exit.") \ OP (opt_long_help, "H", 0, 0, \ "Display a verbose help message and exit.") \ OP (opt_version, "V", "version", 0, \ "Display a release identifier string\n" \ "and exit.") \ OP (opt_archive, "A", "archive", 1, \ "Override `my-default-archive'") \ OP (opt_reverse, "r", "reverse", 0, \ "sort from newest to oldest") t_uchar arch_cmd_library_versions_help[] = ("list the versions in a library branch\n" "List all versions within a particular archive/branch with\n" "records in the revision library.\n"); enum options { OPTS (OPT_ENUM) }; static struct opt_desc opts[] = { OPTS (OPT_DESC) {-1, 0, 0, 0, 0} }; int arch_cmd_library_versions (t_uchar * program_name, int argc, char * argv[]) { int o; struct opt_parsed * option; t_uchar * default_archive; int reverse; default_archive = 0; reverse = 0; safe_buffer_fd (1, 0, O_WRONLY, 0); option = 0; while (1) { o = opt_standard (lim_use_must_malloc, &option, opts, &argc, argv, program_name, usage, version_string, arch_cmd_library_versions_help, opt_help_msg, opt_long_help, opt_version); if (o == opt_none) break; switch (o) { default: safe_printfmt (2, "unhandled option `%s'\n", option->opt_string); panic ("internal error parsing arguments"); usage_error: opt_usage (2, argv[0], program_name, usage, 1); exit (1); /* bogus_arg: */ safe_printfmt (2, "ill-formed argument for `%s' (`%s')\n", option->opt_string, option->arg_string); goto usage_error; case opt_archive: { default_archive = str_save (0, option->arg_string); break; } case opt_reverse: { reverse = 1; break; } } } if (argc > 2) goto usage_error; default_archive = arch_my_default_archive (default_archive); { t_uchar * branch_spec = 0; t_uchar * archive = 0; t_uchar * branch = 0; rel_table versions = rel_table_nil; if (argc == 2) { branch_spec = str_save (0, argv[1]); if (!arch_valid_package_name (branch_spec, arch_maybe_archive, arch_req_package, 0)) { safe_printfmt (2, "%s: invalid branch name (%s)\n", argv[0], branch_spec); exit (2); } } else branch_spec = arch_try_tree_version (program_name); archive = arch_parse_package_name (arch_ret_archive, default_archive, branch_spec); branch = arch_parse_package_name (arch_ret_package, 0, branch_spec); versions = arch_library_versions (archive, branch); if (reverse) arch_sort_table_by_name_field (1, versions, 0); rel_print_table (1, versions); lim_free (0, branch_spec); } return 0; } /* tag: Tom Lord Wed May 21 14:51:35 2003 (library-versions.c) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-pristines.h0000644000175000017500000000125410457622000017640 0ustar useruser/* cmd-pristines.h: * **************************************************************** * Copyright (C) 2003 Tom Lord, Stig Brautaset * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__CMD_PRISTINES_H #define INCLUDE__LIBARCH__CMD_PRISTINES_H #include "hackerlab/machine/types.h" extern t_uchar arch_cmd_pristines_help[]; /* automatically generated __STDC__ prototypes */ extern int arch_cmd_pristines (t_uchar * program_name, int argc, char * argv[]); #endif /* INCLUDE__LIBARCH__CMD_PRISTINES_H */ /* tag: Stig Brautaset Sat Jun 7 15:45:56 BST 2003 (cmd-ls-pristines.h) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-diff.c0000644000175000017500000003716010457622000016530 0ustar useruser/* cmd-diff.c * * vim:smartindent ts=8:sts=2:sta:et:ai:shiftwidth=2 **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "config-options.h" #include "hackerlab/cmd/main.h" #include "hackerlab/fs/file-names.h" #include "hackerlab/os/errno.h" #include "tla/libfsutils/rmrf.h" #include "tla/libfsutils/tmp-files.h" #include "tla/libarch/namespace.h" #include "tla/libarch/project-tree.h" #include "tla/libarch/patch-logs.h" #include "tla/libarch/local-cache.h" #include "tla/libarch/make-changeset.h" #include "tla/libarch/changeset-report.h" #include "tla/libarch/inode-sig.h" #include "tla/libarch/chatter.h" #include "tla/libarch/archive.h" #include "tla/libarch/cmdutils.h" #include "tla/libarch/cmd.h" #include "tla/libarch/cmd-diff.h" #include "tla/libarch/cmd-versions.h" #include "tla/libarch/invent.h" /* gettext support not yet incorporated into tla, reserve the gettext notation for later */ #define _(x) (x) #define N_(x) (x) /* __STDC__ prototypes for static functions */ static void make_changeset_callback (void * ign, char * fmt, va_list ap); static t_uchar * usage = N_("[options] [revision] [-- files...]"); static t_uchar * version_string = (cfg__std__package " from regexps.com\n" "\n" "Copyright 2003 Tom Lord\n" "\n" "This is free software; see the source for copying conditions.\n" "There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\n" "PARTICULAR PURPOSE.\n" "\n" "Report bugs to " cfg__tla_bug_mail ".\n" "\n" cfg__std__release_id_string "\n"); #define OPTS(OP) \ OP (opt_help_msg, "h", "help", 0, \ N_("Display a help message and exit.")) \ OP (opt_long_help, "H", 0, 0, \ N_("Display a verbose help message and exit.")) \ OP (opt_version, "V", "version", 0, \ N_("Display a release identifier string and exit.")) \ OP (opt_archive, "A", "archive", 1, \ N_("Override `my-default-archive'.")) \ OP (opt_dir, "d", "dir DIR", 1, \ N_("Change to DIR first.")) \ OP (opt_output_dir, "o", "output DIR", 1, \ N_("Save changeset in DIR.")) \ OP (opt_verbose, "v", "verbose", 0, \ N_("Verbose changeset report.")) \ OP (opt_quiet, "q", "quiet", 0, \ N_("Suppress progress information")) \ OP (opt_nodiffs, "s", "summary", 0, \ N_("Do not include diffs in the output.")) \ OP (opt_keep, "k", "keep", 0, \ N_("Don't remove the output directory " \ "on termination.")) \ OP (opt_latest, "L", "latest", 0, \ N_("compare against the latest revision (HEAD) in branch"))\ OP (opt_exclude, "x", "exclude FILE", 1, \ "exclude FILE from the files to commit") \ OP (opt_hardlinks, 0, "link", 0, \ N_("hardlink unchanged files to revision library"))\ OP (opt_unescaped, 0, "unescaped", 0, \ N_("show filenames in unescaped form"))\ OP (opt_limit, 0, "limit LIMITS", 1, \ N_("limit the diff to LIMITS")) \ OP (opt_diff_opts, "D", "diff-options", 1, \ N_("specify options for `diff' (for display only)")) t_uchar arch_cmd_diff_help[] = N_("report about local changes in a project tree\n" "Generate a patch report describing the differences between the\n" "project tree containing DIR (or the current directory) and\n" "REVISION.\n" "\n" "The default patch level for a given version is the latest level for\n" "which the project tree has a patch. The default archive and version\n" "is as printed by \"tla tree-version\".\n"); enum options { OPTS (OPT_ENUM) }; static struct opt_desc opts[] = { OPTS (OPT_DESC) {-1, 0, 0, 0, 0} }; int arch_cmd_diff (t_uchar * program_name, int argc, char * argv[]) { int o; struct opt_parsed * option; t_uchar * dir = 0; t_uchar * output = 0; t_uchar * default_archive = 0; t_uchar ** diff_opts = 0; unsigned diff_opt_count = 0; t_uchar *limit_string = 0; int diffs = 1; int keep = 0; int verbose = 0; int quiet = 0; int exit_status = 0; int link_same = 0; int escape_classes = arch_escape_classes; int latest = 0; int files_specified = 0; rel_table exclude_list; dir = str_save (0, "."); exclude_list = rel_table_nil; safe_buffer_fd (1, 0, O_WRONLY, 0); option = 0; while (1) { if ((argc > 1) && !str_cmp ("--", argv[1])) break; o = opt_standard (lim_use_must_malloc, &option, opts, &argc, argv, program_name, usage, version_string, arch_cmd_diff_help, opt_help_msg, opt_long_help, opt_version); if (o == opt_none) break; switch (o) { default: safe_printfmt (2, "unhandled option `%s'\n", option->opt_string); panic ("internal error parsing arguments"); usage_error: opt_usage (2, argv[0], program_name, usage, 1); exit (1); /* bogus_arg: */ safe_printfmt (2, "ill-formed argument for `%s' (`%s')\n", option->opt_string, option->arg_string); goto usage_error; case opt_archive: { lim_free (0, default_archive); default_archive = str_save (0, option->arg_string); break; } case opt_dir: { lim_free (0, dir); dir = str_save (0, option->arg_string); break; } case opt_output_dir: { lim_free (0, output); output = str_save (0, option->arg_string); keep = 1; break; } case opt_nodiffs: { diffs = 0; break; } case opt_keep: { keep = 1; break; } case opt_quiet: { quiet = 1; break; } case opt_verbose: { verbose = 1; break; } case opt_hardlinks: { link_same = 1; break; } case opt_unescaped: { escape_classes = 0; break; } case opt_limit: { lim_free (0, limit_string); limit_string = str_save (0, option->arg_string); break; } case opt_latest: { latest = 1; break; } case opt_exclude: { t_uchar * normalized_path = normal_from_path(option->arg_string); rel_add_records (&exclude_list, rel_singleton_record_taking (rel_make_field_str (normalized_path)), rel_record_null); lim_free(0, normalized_path); normalized_path = 0; files_specified = 1; break; } case opt_diff_opts: { diff_opt_count++; diff_opts = lim_realloc (0, diff_opts, (diff_opt_count + 1) * sizeof (diff_opts[0])); diff_opts[diff_opt_count - 1] = str_save (0, option->arg_string); diff_opts[diff_opt_count] = 0; break; } } } { int argn; t_uchar * tree_root = 0; t_uchar * fqvsn = 0; t_uchar * rvsnspec = 0; t_uchar * archive = 0; t_uchar * revision = 0; t_uchar * log_file = 0; t_uchar * tree_arch = 0; t_uchar * tree_version = 0; t_uchar * latest_log = 0; t_uchar * local_spec = 0; rel_table limits = rel_table_nil; rel_table file_list = rel_table_nil; rel_table file_list2 = rel_table_nil; int commandline_rvsn = 0; if (default_archive && !arch_valid_archive_name (default_archive)) { safe_printfmt (2, "%s: invalid archive name: %s\n", argv[0], default_archive); exit (2); } tree_root = arch_tree_root (0, dir, 0); if (!tree_root) { safe_printfmt (2, "%s: not in a project tree\n dir: %s\n", argv[0], dir); exit (2); } local_spec = arch_get_tree_fqrevision(tree_root); if (!local_spec) { safe_printfmt (2, "%s: unable to determine project tree identifier.\n tree: %s\n", argv[0], tree_root); exit (2); } if (!quiet) arch_chatter (1, "* local directory is at %s\n", local_spec); argn = 1; if ((argc > argn) && str_cmp (argv[argn], "--")) { fqvsn = str_save (0, argv[argn]); ++argn; commandline_rvsn = arch_valid_package_name (fqvsn, arch_maybe_archive, arch_req_patch_level, 0); } else { fqvsn = arch_tree_version (tree_root); if (!fqvsn) { safe_printfmt (2, "%s: no tree-version set\n tree: %s\n", argv[0], tree_root); exit (2); } } tree_arch = arch_parse_package_name (arch_ret_archive, 0, fqvsn); if (!tree_arch) { safe_printfmt(2, "please check if you mistakenly provided file names for " "revision names?\n"); exit(2); } tree_version = arch_parse_package_name (arch_ret_non_archive, 0, fqvsn); invariant (!!tree_arch); if (!arch_valid_package_name (tree_version, arch_no_archive, arch_req_version, 0)) { rvsnspec = str_save (0, fqvsn); } else { if (latest) { rel_table archive_levels ; struct arch_archive *arch = arch_archive_connect (tree_arch, 0); invariant (!!arch); archive_levels = arch_archive_revisions (arch, tree_version, 0); if (!rel_n_records (archive_levels)) { safe_printfmt (2, "%s: (WEIRD ERROR!) archive has no revisions for version (%s/%s)\n", argv[0], tree_arch, tree_version); exit (1); } latest_log = str_save (0, rel_peek_str (archive_levels, rel_n_records (archive_levels) - 1, 0)); rel_free_table (archive_levels); arch_archive_close (arch); } else latest_log = arch_highest_patch_level (tree_root, tree_arch, tree_version); if (!latest_log) { safe_printfmt (2, "%s: tree shows no revisions in version\n tree: %s\n version: %s\n", argv[0], tree_root, fqvsn); exit (2); } rvsnspec = str_alloc_cat_many (0, fqvsn, "--", latest_log, str_end); } lim_free (0, fqvsn); lim_free (0, tree_arch); lim_free (0, tree_version); lim_free (0, latest_log); if (argc > argn) { t_uchar *normalized_path = 0; if (str_cmp (argv[argn], "--")) goto usage_error; files_specified = 1; ++argn; if (argc <= argn) goto usage_error; while (argc > argn) { normalized_path = normal_from_path(argv[argn]); rel_add_records (&file_list, rel_singleton_record_taking (rel_make_field_str (normalized_path)), rel_record_null); ++argn; lim_free(0, normalized_path); normalized_path = 0; } } if (limit_string) { rel_add_records (&limits, rel_singleton_record_taking (rel_make_field_str (limit_string)), rel_record_null); } if (!arch_valid_package_name (rvsnspec, arch_maybe_archive, arch_req_patch_level, 0)) { safe_printfmt (2, "%s: illegal revision name: %s\n", argv[0], rvsnspec); exit (2); } archive = arch_parse_package_name (arch_ret_archive, default_archive, rvsnspec); revision = arch_parse_package_name (arch_ret_non_archive, 0, rvsnspec); invariant (!!archive); if (commandline_rvsn) arch_check_revision_local (archive, revision); if (!output) { t_uchar * output_basename = 0; output_basename = str_alloc_cat_many (0, ",,what-changed.", revision, "--", archive, str_end); output = file_name_in_vicinity (0, tree_root, output_basename); rmrf_file (output); lim_free (0, output_basename); } /**************************************************************** * The heart of the matter. */ { t_uchar * orig_tree = 0; struct arch_make_changeset_report make_report = {0, }; struct arch_changeset_report report = {rel_table_nil, }; assoc_table inode_shortcut = 0; /* if (!quiet) arch_chatter (1, "* looking for %s/%s to compare with\n", archive, revision); */ /*message show the same information as the string below, so commented out */ orig_tree = arch_find_or_make_local_copy ((quiet ? -1 : 1), tree_root, 0, 0, archive, revision); if (!orig_tree) { safe_printfmt (2, "%s: no local copies to compare to (%s/%s)\n consider `add-pristine --help'\n", argv[0], archive, revision); exit (2); } if (!quiet) arch_chatter (1, "* comparing to %s/%s\n", archive, revision); if (!quiet) make_report.callback = make_changeset_callback; if (files_specified) { if (rel_n_records (file_list) == 0) file_list = arch_source_files_file_list(tree_root, 0, 0); file_list2 = rel_table_substract(file_list, exclude_list); } else arch_read_inode_sig (0, &inode_shortcut, tree_root, archive, revision); if (files_specified ) arch_make_files_changeset (&make_report, output, file_list2, orig_tree, tree_root, arch_unspecified_id_tagging, arch_inventory_unrecognized, escape_classes); else arch_make_changeset (&make_report, orig_tree, tree_root, output, arch_unspecified_id_tagging, arch_inventory_unrecognized, limits, inode_shortcut, link_same, escape_classes); arch_evaluate_changeset (&report, output); exit_status = arch_any_changes (&report); if (exit_status && (diffs || verbose)) { if (!quiet) safe_printfmt (1, "\n"); if (verbose) /* verbose is a superset of diffs */ arch_print_changeset (1, &report, diffs, escape_classes); else arch_print_changeset_custom_diffs (1, &report, orig_tree, tree_root, diff_opts, escape_classes); } arch_free_make_changeset_report_data (&make_report); arch_free_changeset_report_data (&report); lim_free (0, orig_tree); /* remove the changeset info unless the user requested it persist */ if (!keep) rmrf_file (output); free_assoc_table (inode_shortcut); } { unsigned i; for (i = 0; i < diff_opt_count; i++) lim_free (0, diff_opts[i]); } lim_free (0, diff_opts); lim_free (0, rvsnspec); lim_free (0, tree_root); lim_free (0, archive); lim_free (0, revision); lim_free (0, log_file); lim_free (0, limit_string); lim_free (0, local_spec); rel_free_table (limits); rel_free_table(file_list); rel_free_table(file_list2); } lim_free (0, dir); lim_free (0, output); lim_free (0, default_archive); exit (exit_status); return 0; } static void make_changeset_callback (void * ign, char * fmt, va_list ap) { safe_printfmt_va_list (1, fmt, ap); safe_flush (1); } /* tag: Tom Lord Fri May 23 14:06:15 2003 (cmd-diff.c) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-cacherev.h0000644000175000017500000000124210457622000017375 0ustar useruser/* cmd-cacherev.h: * **************************************************************** * Copyright (C) 2003 Tom Lord, Stig Brautaset * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__CMD_CACHEREV_H #define INCLUDE__LIBARCH__CMD_CACHEREV_H #include "hackerlab/machine/types.h" extern t_uchar arch_cmd_cacherev_help[]; /* automatically generated __STDC__ prototypes */ extern int arch_cmd_cacherev (t_uchar * program_name, int argc, char * argv[]); #endif /* INCLUDE__LIBARCH__CMD_CACHEREV_H */ /* tag: Stig Brautaset Sat Jun 7 13:21:02 BST 2003 (cmd-cacherev.h) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-id.c0000644000175000017500000001153110457622000016206 0ustar useruser/* cmd-id.c * **************************************************************** * Copyright (C) 2001, 2002, 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "config-options.h" #include "hackerlab/cmd/main.h" #include "hackerlab/char/pika-escaping-utils.h" #include "tla/libarch/inv-ids.h" #include "tla/libarch/cmd.h" #include "tla/libarch/cmd-id.h" static t_uchar * usage = "[options] file ..."; static t_uchar * version_string = (cfg__std__package " from regexps.com\n" "\n" "Copyright 2001, 2002, 2003 Tom Lord\n" "\n" "This is free software; see the source for copying conditions.\n" "There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\n" "PARTICULAR PURPOSE.\n" "\n" "Report bugs to " cfg__tla_bug_mail ".\n" "\n" cfg__std__release_id_string "\n"); #define OPTS(OP) \ OP (opt_help_msg, "h", "help", 0, \ "Display a help message and exit.") \ OP (opt_long_help, "H", 0, 0, \ "Display a verbose help message and exit.") \ OP (opt_version, "V", "version", 0, \ "Display a release identifier string\n" \ "and exit.") \ OP (opt_implicit, 0, "implicit", 0, \ "Use the implicit id tagging method.") \ OP (opt_tagline, 0, "tagline", 0, \ "Use the tagline id tagging method (default).") \ OP (opt_explicit, 0, "explicit", 0, \ "Use the explicit id tagging method.") \ OP (opt_names, 0, "names", 0, \ "Use the names id tagging method.") \ OP (opt_silent, 0, "silent", 0, \ "No output -- exit status only.") \ OP (opt_unescaped, 0, "unescaped", 0, \ "show filenames in unescaped form") t_uchar arch_cmd_id_help[] = ("report the inventory id for a file\n" "Print a file's inventory id.\n"); enum options { OPTS (OPT_ENUM) }; static struct opt_desc opts[] = { OPTS (OPT_DESC) {-1, 0, 0, 0, 0} }; int arch_cmd_id (t_uchar * program_name, int argc, char * argv[]) { int o; struct opt_parsed * option; int silent; enum arch_id_tagging_method method; int escape_classes = arch_escape_classes; safe_buffer_fd (1, 0, O_WRONLY, 0); option = 0; silent = 0; method = arch_tagline_id_tagging; while (1) { o = opt_standard (lim_use_must_malloc, &option, opts, &argc, argv, program_name, usage, version_string, arch_cmd_id_help, opt_help_msg, opt_long_help, opt_version); if (o == opt_none) break; switch (o) { default: safe_printfmt (2, "unhandled option `%s'\n", option->opt_string); panic ("internal error parsing arguments"); usage_error: opt_usage (2, argv[0], program_name, usage, 1); exit (1); /* bogus_arg: */ safe_printfmt (2, "ill-formed argument for `%s' (`%s')\n", option->opt_string, option->arg_string); goto usage_error; case opt_implicit: method = arch_implicit_id_tagging; break; case opt_tagline: method = arch_tagline_id_tagging; break; case opt_explicit: method = arch_explicit_id_tagging; break; case opt_names: method = arch_names_id_tagging; break; case opt_silent: silent = 1; break; case opt_unescaped: escape_classes = 0; break; } } if (argc < 2) goto usage_error; { int a; for (a = 1; a < argc; ++a) { t_uchar * answer; answer = arch_inventory_id (method, 0, argv[a], 0, 0, 0); if (!answer) { if (!silent) { t_uchar * escaped_tmp; escaped_tmp = pika_save_escape_iso8859_1 (0, 0, escape_classes, argv[a]); safe_printfmt (2, "\n"); safe_printfmt (2, "%s: untagged file\n", argv[0]); safe_printfmt (2, " %s\n", escaped_tmp); safe_printfmt (2, "\n"); lim_free (0, escaped_tmp); } exit (1); } else { if (!silent) { t_uchar * escaped_tmp; escaped_tmp = pika_save_escape_iso8859_1 (0, 0, escape_classes, argv[a]); safe_printfmt (1, "%s\t%s\n", escaped_tmp, answer); lim_free (0, escaped_tmp); } lim_free (0, answer); } } } return 0; } /* tag: Tom Lord Wed May 14 08:06:44 2003 (inv-tag.c) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-apply-changeset.h0000644000175000017500000000132010457622000020676 0ustar useruser/* cmd-apply-changeset.h: * **************************************************************** * Copyright (C) 2003 Tom Lord, Stig Brautaset * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__CMD_APPLY_CHANGESET_H #define INCLUDE__LIBARCH__CMD_APPLY_CHANGESET_H #include "hackerlab/machine/types.h" extern t_uchar arch_cmd_apply_changeset_help[]; /* automatically generated __STDC__ prototypes */ extern int arch_cmd_apply_changeset (t_uchar * program_name, int argc, char * argv[]); #endif /* INCLUDE__LIBARCH__CMD_APPLY_CHANGESET_H */ /* tag: Stig Brautaset Sat Jun 7 14:06:55 BST 2003 (cmd-do-changeset.h) */ tla-1.3.5+dfsg/src/tla/libarch/namespace.h0000644000175000017500000000655610457622000017025 0ustar useruser/* namespace.h: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__NAMESPACE_H #define INCLUDE__LIBARCH__NAMESPACE_H #include "hackerlab/machine/types.h" #include "tla/libawk/relational.h" #define arch_archive_re "[-a-zA-Z0-9]+[[:(\\.[-a-zA-Z0-9]*):]]*@[-a-zA-Z0-9.]*[[:(--[-a-zA-Z0-9.]*):]]?" #define arch_base_re "[[:([a-zA-Z][[:([a-zA-Z0-9]*[[:(-[a-zA-Z0-9]+):]]?):]]*):]]" #define arch_vsn_re "[[:([0-9]+\\.[0-9]+):]]" #define arch_lvl_re "[[:(base-0|[[:([[:(patch|version|versionfix:)]]-[[:digit:]]+):]]):]]" enum arch_valid_package_name_archive { arch_maybe_archive, arch_req_archive, arch_no_archive, }; enum arch_valid_package_name_types { arch_req_category, arch_req_package, arch_req_version, arch_req_patch_level, }; enum arch_parse_package_name_type { arch_ret_archive, arch_ret_non_archive, arch_ret_category, arch_ret_branch, arch_ret_package, arch_ret_version, arch_ret_patch_level, arch_ret_package_version, }; enum arch_patch_level_type { arch_is_base0_level, arch_is_patch_level, arch_is_version_level, arch_is_versionfix_level, }; /* automatically generated __STDC__ prototypes */ extern int arch_valid_id (const t_uchar * id); extern int arch_valid_archive_name (const t_uchar * name); extern int arch_valid_patch_level_name (const t_uchar * name); extern int arch_valid_config_name (const t_uchar * name); extern int arch_valid_package_name (const t_uchar * name, enum arch_valid_package_name_archive archive_disposition, enum arch_valid_package_name_types type, int tolerant); extern int arch_is_system_package_name (const t_uchar * name); extern t_uchar * arch_parse_package_name (enum arch_parse_package_name_type type, const t_uchar * default_archive, const t_uchar * name); extern t_uchar * arch_fully_qualify (const t_uchar * default_archive, const t_uchar * name); extern int arch_names_cmp (const t_uchar * a, const t_uchar * b); extern void arch_sort_table_by_name_field (int reverse_p, rel_table table, int field); extern void arch_sort_table_by_patch_level_field (int reverse_p, rel_table table, int field); extern int arch_patch_lvl_cmp (const t_uchar * a, const t_uchar * b); extern rel_table arch_pick_archives_by_field (rel_table in, int field); extern rel_table arch_pick_categories_by_field (rel_table in, int field); extern rel_table arch_pick_branches_by_field (rel_table in, int field); extern rel_table arch_pick_versions_by_field (rel_table in, int field); extern rel_table arch_pick_revisions_by_field (rel_table in, int field); extern rel_table arch_pick_patch_levels_by_field (rel_table in, int field); extern enum arch_patch_level_type arch_analyze_patch_level (t_ulong * n, const t_uchar * patch_level); extern t_uchar * arch_form_patch_level (enum arch_patch_level_type type, t_ulong n); #endif /* INCLUDE__LIBARCH__NAMESPACE_H */ /* tag: Tom Lord Sat Jan 5 15:26:10 2002 (namespace.h) */ tla-1.3.5+dfsg/src/tla/libarch/copy-project-tree.h0000644000175000017500000000120110457622000020422 0ustar useruser/* copy-project-tree.h: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__COPY_PROJECT_TREE_H #define INCLUDE__LIBARCH__COPY_PROJECT_TREE_H #include "hackerlab/machine/types.h" /* automatically generated __STDC__ prototypes */ extern void arch_copy_project_tree (t_uchar * from, t_uchar * to, int precious, int nested); #endif /* INCLUDE__LIBARCH__COPY_PROJECT_TREE_H */ /* tag: Tom Lord Sat Jan 5 15:26:10 2002 (copy-project-tree.h) */ tla-1.3.5+dfsg/src/tla/libarch/changeset-report.c0000644000175000017500000012455010457622000020331 0ustar useruser/* changeset-report.c: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/bugs/panic.h" #include "hackerlab/char/str.h" #include "hackerlab/fs/file-names.h" #include "hackerlab/vu/safe.h" #include "hackerlab/arrays/ar.h" #include "hackerlab/char/pika-escaping-utils.h" #include "tla/libfsutils/read-line.h" #include "tla/libawk/relassoc.h" #include "tla/libfsutils/find-utils.h" #include "tla/libfsutils/ensure-dir.h" #include "tla/libfsutils/copy-file.h" #include "tla/libarch/diffs.h" #include "tla/libarch/changeset-utils.h" #include "tla/libarch/changeset-report.h" /* __STDC__ prototypes for static functions */ static void fix_mod_locs (assoc_table loc_of, rel_table table); static void arch_print_file_metadata_diffs (int out_fd, struct arch_changeset_report * report, int escape_classes); static void arch_print_dir_metadata_diffs (int out_fd, struct arch_changeset_report * report, int escape_classes); static void print_custom_diffs(int fd, struct arch_changeset_report * report, t_uchar * orig_dir, t_uchar * mod_dir, t_uchar ** opts); static void arch_print_file_diffs (int out_fd, struct arch_changeset_report * report, int escape_classes); static void arch_print_added_file_diffs (int out_fd, struct arch_changeset_report * report, int escape_classes); static void print_removed_file_diffs (int fd, struct arch_changeset_report * report, t_uchar ** opts); static void print_file_metadata (int out_fd, struct arch_changeset_report * report, int escape_classes); static void print_dir_metadata (int out_fd, struct arch_changeset_report * report, int escape_classes); static void print_diffs_new(int fd, struct arch_changeset_report * report); static char * no_dot (char *name); static void report_unique_files_and_symlinks (rel_table * files, rel_table * symlinks, rel_table index, t_uchar * archive_dir, t_uchar * archive_basename); static void find_renames (rel_table * out, rel_table common, assoc_table orig_dir_id_of, assoc_table mod_dir_id_of); int arch_any_changes (struct arch_changeset_report * report) { return (rel_n_records (report->removed_dirs) || rel_n_records (report->added_dirs) || rel_n_records (report->removed_files) || rel_n_records (report->added_files) || rel_n_records (report->removed_symlinks) || rel_n_records (report->added_symlinks) || rel_n_records (report->renamed_files) || rel_n_records (report->renamed_dirs) || rel_n_records (report->patched_regular_files) || rel_n_records (report->patched_symlinks) || rel_n_records (report->patched_binaries) || rel_n_records (report->file_metadata_changed) || rel_n_records (report->dir_metadata_changed) || rel_n_records (report->symlink_to_file) || rel_n_records (report->file_to_symlink)); } void arch_evaluate_changeset (struct arch_changeset_report * report, t_uchar * path) { t_uchar * orig_files_index_path = 0; t_uchar * orig_dirs_index_path = 0; t_uchar * mod_files_index_path = 0; t_uchar * mod_dirs_index_path = 0; rel_table removed_dirs_index = rel_table_nil; rel_table added_dirs_index = rel_table_nil; rel_table removed_files_and_symlinks_index = rel_table_nil; rel_table added_files_and_symlinks_index = rel_table_nil; rel_table common_files_index = rel_table_nil; /* [0] origloc [1] modloc [2] id */ rel_table common_dirs_index = rel_table_nil; /* [0] origloc [1] modloc [2] id */ assoc_table orig_dir_loc_of = 0; assoc_table orig_dir_id_of = 0; assoc_table orig_file_loc_of = 0; assoc_table orig_file_id_of = 0; assoc_table mod_dir_loc_of = 0; assoc_table mod_dir_id_of = 0; assoc_table mod_file_loc_of = 0; assoc_table mod_file_id_of = 0; orig_files_index_path = file_name_in_vicinity (0, path, "orig-files-index"); orig_dirs_index_path = file_name_in_vicinity (0, path, "orig-dirs-index"); mod_files_index_path = file_name_in_vicinity (0, path, "mod-files-index"); mod_dirs_index_path = file_name_in_vicinity (0, path, "mod-dirs-index"); report->orig_files_index = arch_read_changeset_index (orig_files_index_path); report->orig_dirs_index = arch_read_changeset_index (orig_dirs_index_path); report->mod_files_index = arch_read_changeset_index (mod_files_index_path); report->mod_dirs_index = arch_read_changeset_index (mod_dirs_index_path); /* just to be sure: */ rel_sort_table_by_field (0, report->orig_files_index, 1); rel_sort_table_by_field (0, report->orig_dirs_index, 1); rel_sort_table_by_field (0, report->mod_files_index, 1); rel_sort_table_by_field (0, report->mod_dirs_index, 1); orig_dir_id_of = rel_to_assoc (report->orig_dirs_index, 0, 1); orig_dir_loc_of = rel_to_assoc (report->orig_dirs_index, 1, 0); orig_file_id_of = rel_to_assoc (report->orig_files_index, 0, 1); orig_file_loc_of = rel_to_assoc (report->orig_files_index, 1, 0); mod_dir_id_of = rel_to_assoc (report->mod_dirs_index, 0, 1); mod_dir_loc_of = rel_to_assoc (report->mod_dirs_index, 1, 0); mod_file_id_of = rel_to_assoc (report->mod_files_index, 0, 1); mod_file_loc_of = rel_to_assoc (report->mod_files_index, 1, 0); /**************************************************************** * Removed and added directories */ { t_uchar * original_only_dir_metadata_file = 0; t_uchar * modified_only_dir_metadata_file = 0; rel_table original_only_dir_metadata = rel_table_nil; rel_table modified_only_dir_metadata = rel_table_nil; rel_table orig_dirs_by_name = rel_table_nil; rel_table mod_dirs_by_name = rel_table_nil; rel_table t; /* [0] name [1] id -- sort 0*/ rel_table t2; /* [0] name [1] id [2] name -- sort 0 -- of dirs sans perms */ original_only_dir_metadata_file = file_name_in_vicinity (0, path, "original-only-dir-metadata"); modified_only_dir_metadata_file = file_name_in_vicinity (0, path, "modified-only-dir-metadata"); original_only_dir_metadata = arch_read_changeset_dir_metadata (original_only_dir_metadata_file); modified_only_dir_metadata = arch_read_changeset_dir_metadata (modified_only_dir_metadata_file); orig_dirs_by_name = rel_copy_table (report->orig_dirs_index); rel_sort_table_by_field (0, orig_dirs_by_name, 0); mod_dirs_by_name = rel_copy_table (report->mod_dirs_index); rel_sort_table_by_field (0, mod_dirs_by_name, 0); removed_dirs_index = rel_join (1, rel_join_output (1,0, 1,1, -1), 1, 1, report->orig_dirs_index, report->mod_dirs_index); added_dirs_index = rel_join (2, rel_join_output (2,0, 2,1, -1), 1, 1, report->orig_dirs_index, report->mod_dirs_index); t = rel_copy_table (removed_dirs_index); rel_sort_table_by_field (0, t, 0); report->removed_dirs = rel_join (-1, rel_join_output (1,0, 1,1, 2,1, -1), 0, 0, t, original_only_dir_metadata); t2 = rel_join (1, rel_join_output (1,0, 1,1, 1,0, -1), 0, 0, t, original_only_dir_metadata); rel_append_x (&report->removed_dirs, t2); rel_sort_table_by_field (0, report->removed_dirs, 0); rel_free_table (t); rel_free_table (t2); invariant (rel_n_records (report->removed_dirs) == rel_n_records (removed_dirs_index)); t = rel_copy_table (added_dirs_index); rel_sort_table_by_field (0, t, 0); report->added_dirs = rel_join (-1, rel_join_output (1,0, 1,1, 2,1, -1), 0, 0, t, modified_only_dir_metadata); t2 = rel_join (1, rel_join_output (1,0, 1,1, 1,0, -1), 0, 0, t, modified_only_dir_metadata); rel_append_x (&report->added_dirs, t2); rel_sort_table_by_field (0, report->added_dirs, 0); rel_free_table (t); rel_free_table (t2); invariant (rel_n_records (report->added_dirs) == rel_n_records (added_dirs_index)); lim_free (0, original_only_dir_metadata_file); lim_free (0, modified_only_dir_metadata_file); rel_free_table (original_only_dir_metadata); rel_free_table (modified_only_dir_metadata); rel_free_table (orig_dirs_by_name); rel_free_table (mod_dirs_by_name); } /**************************************************************** * Removed and added filenames and symlinks */ removed_files_and_symlinks_index = rel_join (1, rel_join_output (1,0, 1,1, -1), 1, 1, report->orig_files_index, report->mod_files_index); added_files_and_symlinks_index = rel_join (2, rel_join_output (2,0, 2,1, -1), 1, 1, report->orig_files_index, report->mod_files_index); report_unique_files_and_symlinks (&report->removed_files, &report->removed_symlinks, removed_files_and_symlinks_index, path, "removed-files-archive"); report_unique_files_and_symlinks (&report->added_files, &report->added_symlinks, added_files_and_symlinks_index, path, "new-files-archive"); /**************************************************************** * renamed files and dirs */ common_dirs_index = rel_join (-1, rel_join_output (1,0, 2,0, 1,1, -1), 1, 1, report->orig_dirs_index, report->mod_dirs_index); common_files_index = rel_join (-1, rel_join_output (1,0, 2,0, 1,1, -1), 1, 1, report->orig_files_index, report->mod_files_index); find_renames (&report->renamed_dirs, common_dirs_index, orig_dir_id_of, mod_dir_id_of); find_renames (&report->renamed_files, common_files_index, orig_dir_id_of, mod_dir_id_of); /**************************************************************** * Identify patches */ { int lim; int x; int here_fd; t_uchar * patches_root; rel_table patches_files = rel_table_nil; assoc_table saw_patches_file = 0; patches_root = file_name_in_vicinity (0, path, "patches"); here_fd = safe_open (".", O_RDONLY, 0); safe_chdir (patches_root); find_files (&patches_files, "."); safe_fchdir (here_fd); safe_close (here_fd); saw_patches_file = rel_to_assoc (patches_files, 0, 0); lim = rel_n_records (patches_files); for (x = 0; x < lim; ++x) { const t_uchar * patch_file; t_uchar * patch_file_tail = 0; t_uchar * patch_file_suffix = 0; t_uchar * patch_file_loc = 0; rel_table * dest = 0; t_uchar * complement_patch = 0; t_uchar * patch_file_path = 0; rel_field id_field = rel_field_nil; patch_file = rel_peek_str (patches_files, x, 0); patch_file_suffix = str_chr_rindex (patch_file, '.'); patch_file_tail = file_name_tail (0, patch_file); /* Compute the loc and the appropriate table for this * this patch. (patch_file_loc and dest) */ if (!str_cmp (patch_file_tail, "=dir-meta-orig")) { patch_file_loc = file_name_directory_file (0, patch_file); dest = &report->dir_metadata_changed; id_field = assoc_get_taking (mod_dir_id_of, rel_make_field_str (patch_file_loc)); } else if (!str_cmp (patch_file_suffix, ".link-orig")) { patch_file_loc = str_save_n (0, patch_file, patch_file_suffix - patch_file); complement_patch = str_alloc_cat (0, patch_file_loc, ".link-mod"); if (assoc_get_str_taking (saw_patches_file, rel_make_field_str (complement_patch))) dest = &report->patched_symlinks; else dest = &report->symlink_to_file; id_field = assoc_get_taking (mod_file_id_of, rel_make_field_str (patch_file_loc)); } else if (!str_cmp (patch_file_suffix, ".original")) { patch_file_loc = str_save_n (0, patch_file, patch_file_suffix - patch_file); complement_patch = str_alloc_cat (0, patch_file_loc, ".modified"); if (assoc_get_str_taking (saw_patches_file, rel_make_field_str (complement_patch))) dest = &report->patched_binaries; else dest = &report->file_to_symlink; id_field = assoc_get_taking (mod_file_id_of, rel_make_field_str (patch_file_loc)); } else if (!str_cmp (patch_file_suffix, ".patch")) { patch_file_loc = str_save_n (0, patch_file, patch_file_suffix - patch_file); dest = &report->patched_regular_files; id_field = assoc_get_taking (mod_file_id_of, rel_make_field_str (patch_file_loc)); } else if (!str_cmp (patch_file_suffix, ".meta-orig")) { patch_file_loc = str_save_n (0, patch_file, patch_file_suffix - patch_file); dest = &report->file_metadata_changed; id_field = assoc_get_taking (mod_file_id_of, rel_make_field_str (patch_file_loc)); } else { id_field = rel_field_nil; } if (dest && patch_file_loc) { patch_file_path = file_name_in_vicinity (0, patches_root, patch_file_loc); rel_add_records (dest, rel_make_record_3_taking (rel_make_field_str (patch_file_loc), rel_field_ref (id_field), rel_make_field_str (patch_file_path)), rel_record_null); } rel_field_unref (id_field); lim_free (0, patch_file_tail); lim_free (0, patch_file_loc); lim_free (0, complement_patch); lim_free (0, patch_file_path); } lim_free (0, patches_root); rel_free_table (patches_files); free_assoc_table (saw_patches_file); } rel_sort_table_by_field (0, report->removed_dirs, 0); rel_sort_table_by_field (0, report->added_dirs, 0); rel_sort_table_by_field (0, report->removed_files, 0); rel_sort_table_by_field (0, report->added_files, 0); rel_sort_table_by_field (0, report->removed_symlinks, 0); rel_sort_table_by_field (0, report->added_symlinks, 0); rel_sort_table_by_field (0, report->renamed_files, 0); rel_sort_table_by_field (0, report->renamed_dirs, 0); rel_sort_table_by_field (0, report->patched_regular_files, 0); rel_sort_table_by_field (0, report->patched_symlinks, 0); rel_sort_table_by_field (0, report->patched_binaries, 0); rel_sort_table_by_field (0, report->file_metadata_changed, 0); rel_sort_table_by_field (0, report->dir_metadata_changed, 0); rel_sort_table_by_field (0, report->symlink_to_file, 0); rel_sort_table_by_field (0, report->file_to_symlink, 0); lim_free (0, orig_files_index_path); lim_free (0, orig_dirs_index_path); lim_free (0, mod_files_index_path); lim_free (0, mod_dirs_index_path); rel_free_table (removed_dirs_index); rel_free_table (added_dirs_index); rel_free_table (removed_files_and_symlinks_index); rel_free_table (added_files_and_symlinks_index); free_assoc_table (orig_dir_loc_of); free_assoc_table (orig_dir_id_of); free_assoc_table (orig_file_loc_of); free_assoc_table (orig_file_id_of); free_assoc_table (mod_dir_loc_of); free_assoc_table (mod_dir_id_of); free_assoc_table (mod_file_loc_of); free_assoc_table (mod_file_id_of); rel_free_table (common_files_index); rel_free_table (common_dirs_index); } void arch_reverse_changeset (struct arch_changeset_report * report) { rel_table t; int x; assoc_table new_mod_file_loc_of = 0; assoc_table new_mod_dir_loc_of = 0; t = report->orig_files_index; report->orig_files_index = report->mod_files_index; report->mod_files_index = t; t = report->orig_dirs_index; report->orig_dirs_index = report->mod_dirs_index; report->mod_dirs_index = t; t = report->removed_dirs; report->removed_dirs = report->added_dirs; report->added_dirs = t; t = report->removed_files; report->removed_files = report->added_files; report->added_files = t; t = report->removed_symlinks; report->removed_symlinks = report->added_symlinks; report->added_symlinks = t; for (x = 0; x < rel_n_records (report->renamed_files); ++x) { t_uchar * s; s = str_save (0, rel_peek_str (report->renamed_files, x, 0)); rel_set_taking (report->renamed_files, x, 0, rel_get_field (report->renamed_files, x, 1)); rel_set_taking (report->renamed_files, x, 1, rel_make_field_str (s)); lim_free (0, s); } for (x = 0; x < rel_n_records (report->renamed_dirs); ++x) { t_uchar * s; s = str_save (0, rel_peek_str (report->renamed_dirs, x, 0)); rel_set_taking (report->renamed_dirs, x, 0, rel_get_field (report->renamed_dirs, x, 1)); rel_set_taking (report->renamed_dirs, x, 1, rel_make_field_str (s)); lim_free (0, s); } new_mod_file_loc_of = rel_to_assoc (report->mod_files_index, 1, 0); new_mod_dir_loc_of = rel_to_assoc (report->mod_dirs_index, 1, 0); fix_mod_locs (new_mod_file_loc_of, report->patched_regular_files); fix_mod_locs (new_mod_file_loc_of, report->patched_symlinks); fix_mod_locs (new_mod_file_loc_of, report->patched_binaries); fix_mod_locs (new_mod_file_loc_of, report->file_metadata_changed); fix_mod_locs (new_mod_dir_loc_of, report->dir_metadata_changed); fix_mod_locs (new_mod_file_loc_of, report->symlink_to_file); fix_mod_locs (new_mod_file_loc_of, report->file_to_symlink); } static void fix_mod_locs (assoc_table loc_of, rel_table table) { int x; for (x = 0; x < rel_n_records (table); ++x) { rel_field id_field; rel_field new_loc_field; id_field = rel_get_field (table, x, 1); new_loc_field = assoc_get_taking (loc_of, id_field); rel_set_taking (table, x, 0, new_loc_field); } } static void arch_print_file_metadata_diffs (int out_fd, struct arch_changeset_report * report, int escape_classes) { int x; for (x = 0; x < rel_n_records (report->file_metadata_changed); ++x) { t_uchar * orig_meta_path = 0; t_uchar * mod_meta_path = 0; t_uchar * orig_meta = 0; t_uchar * mod_meta = 0; t_uchar * file_metadata_changed = 0; file_metadata_changed = pika_save_escape_iso8859_1 (0, 0, escape_classes, rel_peek_str (report->file_metadata_changed, x, 0)); safe_printfmt (out_fd, " %s\n", file_metadata_changed); orig_meta_path = str_alloc_cat (0, rel_peek_str (report->file_metadata_changed, x, 2), ".meta-orig"); mod_meta_path = str_alloc_cat (0, rel_peek_str (report->file_metadata_changed, x, 2), ".meta-mod"); orig_meta = read_line_from_file (orig_meta_path); mod_meta = read_line_from_file (mod_meta_path); safe_printfmt (out_fd, " %s\n => %s\n", orig_meta, mod_meta); lim_free (0, file_metadata_changed); lim_free (0, orig_meta_path); lim_free (0, mod_meta_path); lim_free (0, orig_meta); lim_free (0, mod_meta); } } static void arch_print_dir_metadata_diffs (int out_fd, struct arch_changeset_report * report, int escape_classes) { int x; for (x = 0; x < rel_n_records (report->dir_metadata_changed); ++x) { t_uchar * orig_meta_path = 0; t_uchar * mod_meta_path = 0; t_uchar * orig_meta = 0; t_uchar * mod_meta = 0; t_uchar * dir_metadata_changed = 0; dir_metadata_changed = pika_save_escape_iso8859_1 (0, 0, escape_classes, rel_peek_str (report->dir_metadata_changed, x, 0)); safe_printfmt (out_fd, " %s\n", dir_metadata_changed); orig_meta_path = file_name_in_vicinity (0, rel_peek_str (report->dir_metadata_changed, x, 2), "=dir-meta-orig"); mod_meta_path = file_name_in_vicinity (0, rel_peek_str (report->dir_metadata_changed, x, 2), "=dir-meta-mod"); orig_meta = read_line_from_file (orig_meta_path); mod_meta = read_line_from_file (mod_meta_path); safe_printfmt (out_fd, " %s\n => %s\n", orig_meta, mod_meta); lim_free (0, dir_metadata_changed); lim_free (0, orig_meta_path); lim_free (0, mod_meta_path); lim_free (0, orig_meta); lim_free (0, mod_meta); } } static void arch_print_file_diffs (int out_fd, struct arch_changeset_report * report, int escape_classes) { int x; for (x = 0; x < rel_n_records (report->patched_regular_files); ++x) { t_uchar * patch_file; int in_fd; patch_file = str_alloc_cat (0, rel_peek_str (report->patched_regular_files, x, 2), ".patch"); in_fd = safe_open (patch_file, O_RDONLY, 0); copy_fd (in_fd, out_fd); safe_printfmt (out_fd, "\n\n"); safe_close (in_fd); lim_free (0, patch_file); } } static void arch_print_added_file_diffs (int out_fd, struct arch_changeset_report * report, int escape_classes) { int x; for (x = 0; x < rel_n_records (report->added_files); ++x) { arch_really_invoke_diff (1, "/dev/null", NULL, rel_peek_str (report->added_files, x, 2), NULL, NULL); } } static void print_file_metadata (int out_fd, struct arch_changeset_report * report, int escape_classes) { if (rel_n_records(report->file_metadata_changed) > 0) { safe_printfmt (out_fd, "* file metadata changed\n\n"); arch_print_file_metadata_diffs (out_fd, report, escape_classes); safe_printfmt (out_fd, "\n"); } } static void print_dir_metadata (int out_fd, struct arch_changeset_report * report, int escape_classes) { if (rel_n_records(report->dir_metadata_changed) > 0) { safe_printfmt (out_fd, "* dir metadata changed\n\n"); arch_print_dir_metadata_diffs (out_fd, report, escape_classes); safe_printfmt (out_fd, "\n"); } } static void print_diffs_new(int out_fd, struct arch_changeset_report * report) { if (rel_n_records(report->patched_regular_files)) { safe_printfmt (out_fd, "* modified files\n\n"); arch_print_file_diffs (out_fd, report, 0); safe_printfmt (out_fd, "\n"); } if (rel_n_records(report->added_files)) { safe_printfmt (out_fd, "* added files\n\n"); arch_print_added_file_diffs (out_fd, report, 0); safe_printfmt (out_fd, "\n"); } print_removed_file_diffs(out_fd, report, NULL); } /** * \brief Write custom diffs for to a file descriptor * * The changeset report is used to determine which files to diff, and the * partial file paths. The orig_dir and mod_dir are used to produce full * paths. diff is invoked to produce the output. * * \param report The report to use for output * \param orig_dir The path to a copy of the ORIG tree * \param mod_dir The path to a copy of the MOD tree */ static void print_custom_diffs (int out_fd, struct arch_changeset_report * report, t_uchar * orig_dir, t_uchar * mod_dir, t_uchar ** opts) { if (rel_n_records(report->patched_regular_files)) { int x; rel_field key; assoc_table orig_paths = rel_to_assoc (report->orig_files_index, out_fd, 0); safe_printfmt ( out_fd, "* modified files\n\n"); for (x = 0; x < rel_n_records (report->patched_regular_files); ++x) { t_uchar *id = str_save(0, rel_peek_str(report->patched_regular_files, x, 1)) /*report->patched_regular_files[x][1]*/; t_uchar *id2 = str_save(0, rel_peek_str(report->patched_regular_files, x, 0)) /*report->patched_regular_files[x][1]*/; t_uchar *orig_part_path; t_uchar *orig_path; t_uchar *mod_path; key = rel_make_field_str(id); rel_field_ref(key); orig_part_path = assoc_get_str_taking(orig_paths, key) /*assoc_ref(orig_paths, id)*/; orig_path = file_name_in_vicinity(0, orig_dir, orig_part_path); mod_path = file_name_in_vicinity(0, mod_dir, id2 /*report->patched_regular_files[x][0]*/); arch_really_invoke_diff ( out_fd, orig_path, orig_part_path, mod_path, id2 /*report->patched_regular_files[x][0]*/, (char **)opts); rel_field_unref(key); lim_free(0, mod_path); lim_free(0, orig_path); lim_free(0, id); lim_free(0, id2); } safe_printfmt ( out_fd, "\n"); free_assoc_table (orig_paths); } if (rel_n_records(report->added_files)) { int x; safe_printfmt (1, "* added files\n\n"); for (x = 0; x < rel_n_records (report->added_files); ++x) { t_uchar *id = str_save(0, rel_peek_str(report->added_files, x, 2)); t_uchar *id2 = str_save(0, rel_peek_str(report->added_files, x, 0)); arch_really_invoke_diff ( out_fd, "/dev/null", NULL, id /*report->added_files[x][2]*/, id2 /*report->added_files[x][0]*/, (char**)opts); lim_free(0, id); lim_free(0, id2); } safe_printfmt ( out_fd, "\n"); } print_removed_file_diffs ( out_fd, report, opts); } /** * \brief Print the diffs for any removed files to output. * * If no files were removed, no output is produced * \param report The changeset report to generate results for * \param opts Additional parameters to pass to diff, or NULL */ static void print_removed_file_diffs (int out_fd, struct arch_changeset_report * report, t_uchar ** opts) { if (rel_n_records(report->removed_files)) { int x; safe_printfmt ( out_fd, "* removed files\n\n"); for (x = 0; x < rel_n_records (report->removed_files); ++x) { t_uchar *id = str_save(0, rel_peek_str(report->removed_files, x, 2)); t_uchar *id2 = str_save(0, rel_peek_str(report->removed_files, x, 0)); arch_really_invoke_diff ( out_fd, id /*report->removed_files[x][2]*/, id2 /*report->removed_files[x][0]*/, "/dev/null", NULL, (char**)opts); lim_free(0, id); lim_free(0, id2); } safe_printfmt ( out_fd, "\n"); } } /** * \brief Write a changeset report with custom diffs to a file descriptor * * \param report The report to use for output * \param orig_dir The path to a copy of the ORIG tree * \param mod_dir The path to a copy of the MOD tree * \param escape_classes The types of characters that should be escaped * \todo Consider reimplementing so that a custom changeset is generated, not * custom diffs. */ void arch_print_changeset_custom_diffs (int out_fd, struct arch_changeset_report * report, t_uchar * orig_dir, t_uchar * mod_dir, t_uchar ** opts, int escape_classes) { print_file_metadata ( out_fd, report, escape_classes); print_dir_metadata ( out_fd, report, escape_classes); if (opts == NULL) print_diffs_new ( out_fd, report); else print_custom_diffs ( out_fd, report, orig_dir, mod_dir, opts); } void arch_print_changeset_diffs (int out_fd, struct arch_changeset_report * report, int escape_classes) { if (rel_n_records (report->file_metadata_changed)) { safe_printfmt (out_fd, "* file metadata changed\n\n"); arch_print_file_metadata_diffs (out_fd, report, escape_classes); safe_printfmt (out_fd, "\n"); } if (rel_n_records (report->dir_metadata_changed)) { safe_printfmt (out_fd, "* dir metadata changed\n\n"); arch_print_dir_metadata_diffs (out_fd, report, escape_classes); safe_printfmt (out_fd, "\n"); } if (rel_n_records (report->patched_regular_files)) { safe_printfmt (out_fd, "* modified files\n\n"); arch_print_file_diffs (out_fd, report, escape_classes); safe_printfmt (out_fd, "\n"); } if (rel_n_records (report->added_files)) { safe_printfmt (out_fd, "* added files\n\n"); arch_print_added_file_diffs (out_fd, report, escape_classes); safe_printfmt (out_fd, "\n"); } } static char * no_dot (char *name) { if (name[0] == '.' && name[1] == '/') return name + 2; else return name; } void arch_print_changeset (int out_fd, struct arch_changeset_report * report, int diffs, int escape_classes) { int x; if (rel_n_records (report->removed_dirs)) { safe_printfmt (out_fd, "* removed directories\n\n"); for (x = 0; x < rel_n_records (report->removed_dirs); ++x) { t_uchar * item; item = pika_save_escape_iso8859_1 (0, 0, escape_classes, rel_peek_str (report->removed_dirs, x, 0)); safe_printfmt (out_fd, " %s\n", no_dot (item)); lim_free (0, item); } safe_printfmt (out_fd, "\n"); } if (rel_n_records (report->added_dirs)) { safe_printfmt (out_fd, "* added directories\n\n"); for (x = 0; x < rel_n_records (report->added_dirs); ++x) { t_uchar * item; item = pika_save_escape_iso8859_1 (0, 0, escape_classes, rel_peek_str (report->added_dirs, x, 0)); safe_printfmt (out_fd, " %s\n", no_dot (item)); lim_free (0, item); } safe_printfmt (out_fd, "\n"); } if (rel_n_records (report->removed_files)) { safe_printfmt (out_fd, "* removed files\n\n"); for (x = 0; x < rel_n_records (report->removed_files); ++x) { t_uchar * item; item = pika_save_escape_iso8859_1 (0, 0, escape_classes, rel_peek_str (report->removed_files, x, 0)); safe_printfmt (out_fd, " %s\n", no_dot (item)); lim_free (0, item); } safe_printfmt (out_fd, "\n"); } if (rel_n_records (report->added_files)) { safe_printfmt (out_fd, "* added files\n\n"); for (x = 0; x < rel_n_records (report->added_files); ++x) { t_uchar * item; item = pika_save_escape_iso8859_1 (0, 0, escape_classes, rel_peek_str (report->added_files, x, 0)); safe_printfmt (out_fd, " %s\n", no_dot (item)); lim_free (0, item); } safe_printfmt (out_fd, "\n"); } if (rel_n_records (report->removed_symlinks)) { safe_printfmt (out_fd, "* removed symlinks\n\n"); for (x = 0; x < rel_n_records (report->removed_symlinks); ++x) { t_uchar * item; item = pika_save_escape_iso8859_1 (0, 0, escape_classes, rel_peek_str (report->removed_symlinks, x, 0)); safe_printfmt (out_fd, " %s\n", no_dot (item)); lim_free (0, item); } safe_printfmt (out_fd, "\n"); } if (rel_n_records (report->added_symlinks)) { safe_printfmt (out_fd, "* added symlinks\n\n"); for (x = 0; x < rel_n_records (report->added_symlinks); ++x) { t_uchar * item; item = pika_save_escape_iso8859_1 (0, 0, escape_classes, rel_peek_str (report->added_symlinks, x, 0)); safe_printfmt (out_fd, " %s\n", no_dot (item)); lim_free (0, item); } safe_printfmt (out_fd, "\n"); } if (rel_n_records (report->renamed_files)) { safe_printfmt (out_fd, "* renamed files and symlinks\n\n"); for (x = 0; x < rel_n_records (report->renamed_files); ++x) { t_uchar * item1; t_uchar * item2; item1 = pika_save_escape_iso8859_1 (0, 0, escape_classes, rel_peek_str (report->renamed_files, x, 0)); item2 = pika_save_escape_iso8859_1 (0, 0, escape_classes, rel_peek_str (report->renamed_files, x, 1)); safe_printfmt (out_fd, " %s\n => %s\n\n", no_dot (item1), no_dot (item2)); lim_free (0, item2); lim_free (0, item1); } } if (rel_n_records (report->renamed_dirs)) { safe_printfmt (out_fd, "* renamed directories\n\n"); for (x = 0; x < rel_n_records (report->renamed_dirs); ++x) { t_uchar * item1; t_uchar * item2; item1 = pika_save_escape_iso8859_1 (0, 0, escape_classes, rel_peek_str (report->renamed_dirs, x, 0)); item2 = pika_save_escape_iso8859_1 (0, 0, escape_classes, rel_peek_str (report->renamed_dirs, x, 1)); safe_printfmt (out_fd, " %s\n => %s\n\n", no_dot (item1), no_dot (item2)); lim_free (0, item2); lim_free (0, item1); } } if (rel_n_records (report->file_to_symlink)) { safe_printfmt (out_fd, "* files replaced by symlinks \n\n"); for (x = 0; x < rel_n_records (report->file_to_symlink); ++x) { t_uchar * item; item = pika_save_escape_iso8859_1 (0, 0, escape_classes, rel_peek_str (report->file_to_symlink, x, 0)); safe_printfmt (out_fd, " %s\n", no_dot (item)); lim_free (0, item); } safe_printfmt (out_fd, "\n"); } if (rel_n_records (report->symlink_to_file)) { safe_printfmt (out_fd, "* symlinks replaced by files\n\n"); for (x = 0; x < rel_n_records (report->symlink_to_file); ++x) { t_uchar * item; item = pika_save_escape_iso8859_1 (0, 0, escape_classes, rel_peek_str (report->symlink_to_file, x, 0)); safe_printfmt (out_fd, " %s\n", no_dot (item)); lim_free (0, item); } safe_printfmt (out_fd, "\n"); } if (rel_n_records (report->file_metadata_changed)) { safe_printfmt (out_fd, "* file metadata changed\n\n"); if (diffs) { arch_print_file_metadata_diffs (out_fd, report, escape_classes); } else { for (x = 0; x < rel_n_records (report->file_metadata_changed); ++x) { t_uchar * item; item = pika_save_escape_iso8859_1 (0, 0, escape_classes, rel_peek_str (report->file_metadata_changed, x, 0)); safe_printfmt (out_fd, " %s\n", no_dot (item)); lim_free (0, item); } } safe_printfmt (out_fd, "\n"); } if (rel_n_records (report->dir_metadata_changed)) { safe_printfmt (out_fd, "* dir metadata changed\n\n"); if (diffs) { arch_print_dir_metadata_diffs (out_fd, report, escape_classes); } else { for (x = 0; x < rel_n_records (report->dir_metadata_changed); ++x) { t_uchar * item; item = pika_save_escape_iso8859_1 (0, 0, escape_classes, rel_peek_str (report->dir_metadata_changed, x, 0)); safe_printfmt (out_fd, " %s\n", no_dot (item)); lim_free (0, item); } } safe_printfmt (out_fd, "\n"); } if (rel_n_records (report->patched_symlinks)) { safe_printfmt (out_fd, "* retargeted symlinks\n\n"); for (x = 0; x < rel_n_records (report->patched_symlinks); ++x) { t_uchar * item; item = pika_save_escape_iso8859_1 (0, 0, escape_classes, rel_peek_str (report->patched_symlinks, x, 0)); safe_printfmt (out_fd, " %s\n", no_dot (item)); lim_free (0, item); } safe_printfmt (out_fd, "\n"); } if (rel_n_records (report->patched_binaries)) { safe_printfmt (out_fd, "* modified binary files\n\n"); for (x = 0; x < rel_n_records (report->patched_binaries); ++x) { t_uchar * item; item = pika_save_escape_iso8859_1 (0, 0, escape_classes, rel_peek_str (report->patched_binaries, x, 0)); safe_printfmt (out_fd, " %s\n", no_dot (item)); lim_free (0, item); } safe_printfmt (out_fd, "\n"); } if (rel_n_records (report->patched_regular_files)) { safe_printfmt (out_fd, "* modified files\n\n"); if (diffs) { arch_print_file_diffs (out_fd, report, escape_classes); } else { for (x = 0; x < rel_n_records (report->patched_regular_files); ++x) { t_uchar * item; item = pika_save_escape_iso8859_1 (0, 0, escape_classes, rel_peek_str (report->patched_regular_files, x, 0)); safe_printfmt (out_fd, " %s\n", no_dot (item)); lim_free (0, item); } } safe_printfmt (out_fd, "\n"); } } void arch_free_changeset_report_data (struct arch_changeset_report * r) { rel_free_table (r->orig_files_index); r->orig_files_index = rel_table_nil; rel_free_table (r->orig_dirs_index); r->orig_dirs_index = rel_table_nil; rel_free_table (r->mod_files_index); r->mod_files_index = rel_table_nil; rel_free_table (r->mod_dirs_index); r->mod_dirs_index = rel_table_nil; rel_free_table (r->removed_dirs); r->removed_dirs = rel_table_nil; rel_free_table (r->added_dirs); r->added_dirs = rel_table_nil; rel_free_table (r->removed_files); r->removed_files = rel_table_nil; rel_free_table (r->added_files); r->added_files = rel_table_nil; rel_free_table (r->removed_symlinks); r->removed_symlinks = rel_table_nil; rel_free_table (r->added_symlinks); r->added_symlinks = rel_table_nil; rel_free_table (r->renamed_files); r->renamed_files = rel_table_nil; rel_free_table (r->renamed_dirs); r->renamed_dirs = rel_table_nil; rel_free_table (r->patched_regular_files); r->patched_regular_files = rel_table_nil; rel_free_table (r->patched_symlinks); r->patched_symlinks = rel_table_nil; rel_free_table (r->patched_binaries); r->patched_binaries = rel_table_nil; rel_free_table (r->file_metadata_changed); r->file_metadata_changed = rel_table_nil; rel_free_table (r->dir_metadata_changed); r->dir_metadata_changed = rel_table_nil; rel_free_table (r->symlink_to_file); r->symlink_to_file = rel_table_nil; rel_free_table (r->file_to_symlink); r->file_to_symlink = rel_table_nil; } static void report_unique_files_and_symlinks (rel_table * files, rel_table * symlinks, rel_table index, t_uchar * archive_dir, t_uchar * archive_basename) { t_uchar * archive = 0; int lim; int x; archive = file_name_in_vicinity (0, archive_dir, archive_basename); lim = rel_n_records (index); for (x = 0; x < lim; ++x) { t_uchar * archive_path; struct stat stat_buf; archive_path = file_name_in_vicinity (0, archive, rel_peek_str (index, x, 0)); safe_lstat (archive_path, &stat_buf); if (S_ISLNK (stat_buf.st_mode)) { rel_add_records (symlinks, rel_make_record_3_taking (rel_get_field (index, x, 0), rel_get_field (index, x, 1), rel_make_field_str (archive_path)), rel_record_null); } else { rel_add_records (files, rel_make_record_3_taking (rel_get_field (index, x, 0), rel_get_field (index, x, 1), rel_make_field_str (archive_path)), rel_record_null); } lim_free (0, archive_path); } rel_sort_table_by_field (0, *files, 0); rel_sort_table_by_field (0, *symlinks, 0); lim_free (0, archive); } static void find_renames (rel_table * out, rel_table common, assoc_table orig_dir_id_of, assoc_table mod_dir_id_of) { int lim; int x; lim = rel_n_records (common); for (x = 0; x < lim; ++x) { rel_field orig_loc_field; rel_field mod_loc_field; rel_field id_field; const t_uchar * orig_loc; const t_uchar * mod_loc; const t_uchar * id; t_uchar * orig_basename = 0; t_uchar * mod_basename = 0; t_uchar * orig_dir = 0; t_uchar * mod_dir = 0; const t_uchar * orig_dir_id; const t_uchar * mod_dir_id; orig_loc_field = rel_get_field (common, x, 0); orig_loc = rel_field_str (orig_loc_field); mod_loc_field = rel_get_field (common, x, 1); mod_loc = rel_field_str (mod_loc_field); id_field = rel_get_field (common, x, 2); id = rel_field_str (id_field); orig_basename = file_name_tail (0, orig_loc); mod_basename = file_name_tail (0, mod_loc); orig_dir = file_name_directory_file (0, orig_loc); mod_dir = file_name_directory_file (0, mod_loc); orig_dir_id = assoc_get_str_taking (orig_dir_id_of, rel_make_field_str (orig_dir)); mod_dir_id = assoc_get_str_taking (mod_dir_id_of, rel_make_field_str (mod_dir)); /* The conditional subexpression here attempts to identify renames * even when the the changeset is missing locs and ids for * one or both of the containing dirs of the object under consideration. * */ if (str_cmp (orig_basename, mod_basename) || ((orig_dir_id && mod_dir_id) ? str_cmp (orig_dir_id, mod_dir_id) : str_cmp (orig_dir, mod_dir))) { rel_field_ref (orig_loc_field); rel_field_ref (mod_loc_field); rel_field_ref (id_field); rel_add_records (out, rel_make_record_3_taking (orig_loc_field, mod_loc_field, id_field), rel_record_null); } rel_field_unref (orig_loc_field); rel_field_unref (mod_loc_field); rel_field_unref (id_field); lim_free (0, orig_basename); lim_free (0, mod_basename); lim_free (0, orig_dir); lim_free (0, mod_dir); } } /* tag: Tom Lord Thu May 15 13:07:24 2003 (changeset-report.c) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-new-merges.h0000644000175000017500000000126010457622000017666 0ustar useruser/* cmd-new-merges.h: * **************************************************************** * Copyright (C) 2003 Tom Lord, Stig Brautaset * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__CMD_NEW_MERGES_H #define INCLUDE__LIBARCH__CMD_NEW_MERGES_H #include "hackerlab/machine/types.h" extern t_uchar arch_cmd_new_merges_help[]; /* automatically generated __STDC__ prototypes */ extern int arch_cmd_new_merges (t_uchar * program_name, int argc, char * argv[]); #endif /* INCLUDE__LIBARCH__CMD_NEW_MERGES_H */ /* tag: Stig Brautaset Sat Jun 7 16:45:23 BST 2003 (cmd-new-merges.h) */ tla-1.3.5+dfsg/src/tla/libarch/cmds.h0000644000175000017500000000147610457622000016013 0ustar useruser/* cmds.h: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__CMDS_H #define INCLUDE__LIBARCH__CMDS_H #include "hackerlab/machine/types.h" enum arch_command_level { arch_level_basic = 1, arch_level_advanced, arch_level_guru, arch_level_deprecated, }; struct arch_command { t_uchar * name; int (*fn) (t_uchar * name, int argc, char * argv[]); t_uchar * long_help; t_uchar * alias_of; enum arch_command_level level; }; extern struct arch_command arch_commands[]; /* automatically generated __STDC__ prototypes */ #endif /* INCLUDE__LIBARCH__CMDS_H */ /* tag: Tom Lord Sat Jan 5 15:26:10 2002 (cmds.h) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-valid-package-name.c0000644000175000017500000001500310457622000021216 0ustar useruser/* cmd-valid-package-name.c: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "config-options.h" #include "hackerlab/cmd/main.h" #include "tla/libarch/namespace.h" #include "tla/libarch/cmd-valid-package-name.h" static t_uchar * usage = "[options] name"; static t_uchar * version_string = (cfg__std__package " from regexps.com\n" "\n" "Copyright 2003 Tom Lord\n" "\n" "This is free software; see the source for copying conditions.\n" "There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\n" "PARTICULAR PURPOSE.\n" "\n" "Report bugs to " cfg__tla_bug_mail ".\n" "\n" cfg__std__release_id_string "\n"); #define OPTS(OP) \ OP (opt_help_msg, "h", "help", 0, \ "Display a help message and exit.") \ OP (opt_long_help, "H", 0, 0, \ "Display a verbose help message and exit.") \ OP (opt_version, "V", "version", 0, \ "Display a release identifier string\n" \ "and exit.") \ OP (opt_errname, "e", "errname", 1, \ "specify program name for errors") \ OP (opt_archive, 0, "archive", 0, \ "require and explicit archive") \ OP (opt_no_archive, 0, "no-archive", 0, \ "prohibit and explicit archive") \ OP (opt_category, "c", "category", 0, \ "require a category") \ OP (opt_package, "p", "package", 0, \ "require category, permit branch") \ OP (opt_vsn, "v", "vsn", 0, \ "require a version number") \ OP (opt_level, "l", "patch-level", 0, \ "require a patch level") \ OP (opt_lvl, 0, "lvl", 0, \ "synonym for --patch-level") \ OP (opt_tolerant, "t", "tolerant", 0, \ "tolerate more specific names") t_uchar arch_cmd_valid_package_name_help[] = ("test a package name for validity\n" "Exit with status 0 if PACKAGE is a valid package name,\n" "status 1 otherwise.\n" "\n" "By default, require a basename or basename plus branch label.\n" "\n" "Options -v and -l cancel -b and vice versa.\n" "\n" "Option -l implies -v.\n" "\n" "If an error name is specified (-e or --errname), then invalid\n" "names cause an error message on stdout. Otherwise, the exit\n" "status is the only output.\n" "\n" "By default, validation is strict. For example, -b checks\n" "for a valid basename and does not permit a branch label\n" "or version number.\n" "\n" "With -t, more specific names are permitted. For example, -b\n" "will permit a branch name, version number, and patch level.\n"); enum options { OPTS (OPT_ENUM) }; static struct opt_desc opts[] = { OPTS (OPT_DESC) {-1, 0, 0, 0, 0} }; int arch_cmd_valid_package_name (t_uchar * program_name, int argc, char * argv[]) { int o; struct opt_parsed * option; t_uchar * errname; enum arch_valid_package_name_archive archive_disposition; enum arch_valid_package_name_archive package_name_type; char * type_name; int tolerant; int result; errname = 0; archive_disposition = arch_maybe_archive; package_name_type = arch_req_package; type_name = "package"; tolerant = 0; safe_buffer_fd (1, 0, O_WRONLY, 0); option = 0; while (1) { o = opt_standard (lim_use_must_malloc, &option, opts, &argc, argv, program_name, usage, version_string, arch_cmd_valid_package_name_help, opt_help_msg, opt_long_help, opt_version); if (o == opt_none) break; switch (o) { default: safe_printfmt (2, "unhandled option `%s'\n", option->opt_string); panic ("internal error parsing arguments"); usage_error: opt_usage (2, argv[0], program_name, usage, 1); exit (1); /* bogus_arg: */ safe_printfmt (2, "ill-formed argument for `%s' (`%s')\n", option->opt_string, option->arg_string); goto usage_error; case opt_errname: { errname = str_save (0, option->arg_string); break; } case opt_archive: { archive_disposition = arch_req_archive; break; } case opt_no_archive: { archive_disposition = arch_no_archive; break; } case opt_category: { package_name_type = arch_req_category; type_name = "category"; break; } case opt_package: { package_name_type = arch_req_package; type_name = "package"; break; } case opt_vsn: { package_name_type = arch_req_version; type_name = "version"; break; } case opt_level: case opt_lvl: { package_name_type = arch_req_patch_level; type_name = "patch-level"; break; } case opt_tolerant: { tolerant = 1; break; } } } if (argc != 2) goto usage_error; result = arch_valid_package_name (argv[1], archive_disposition, package_name_type, tolerant); if (!result) { if (errname) { safe_printfmt (2, "%s: invalid %s id (%s)\n", errname, type_name, argv[1]); } exit (1); } return 0; } /* tag: Tom Lord Mon May 12 11:13:10 2003 (valid-package-name.c) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-archive-fixup.h0000644000175000017500000000125210457622000020370 0ustar useruser/* cmd-archive-fixup.h: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__CMD_ARCHIVE_FIXUP_H #define INCLUDE__LIBARCH__CMD_ARCHIVE_FIXUP_H #include "hackerlab/machine/types.h" extern t_uchar arch_cmd_archive_fixup_help[]; /* automatically generated __STDC__ prototypes */ extern int arch_cmd_archive_fixup (t_uchar *program_name, int argc, char * argv[]); #endif /* INCLUDE__LIBARCH__CMD_ARCHIVE_FIXUP_H */ /* tag: Tom Lord Sat Jan 5 15:26:10 2002 (cmd-archive-fixup.h) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-make-version.c0000644000175000017500000001036410457622000020215 0ustar useruser/* cmd-make-version.c * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "config-options.h" #include "hackerlab/cmd/main.h" #include "tla/libarch/namespace.h" #include "tla/libarch/project-tree.h" #include "tla/libarch/my.h" #include "tla/libarch/archive.h" #include "tla/libarch/cmd-make-version.h" static t_uchar * usage = "[options] version"; static t_uchar * version_string = (cfg__std__package " from regexps.com\n" "\n" "Copyright 2003 Tom Lord\n" "\n" "This is free software; see the source for copying conditions.\n" "There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\n" "PARTICULAR PURPOSE.\n" "\n" "Report bugs to " cfg__tla_bug_mail ".\n" "\n" cfg__std__release_id_string "\n"); #define OPTS(OP) \ OP (opt_help_msg, "h", "help", 0, \ "Display a help message and exit.") \ OP (opt_long_help, "H", 0, 0, \ "Display a verbose help message and exit.") \ OP (opt_version, "V", "version", 0, \ "Display a release identifier string\n" \ "and exit.") \ OP (opt_archive, "A", "archive", 1, \ "Override `my-default-archive'") t_uchar arch_cmd_make_version_help[] = ("create a new archive version\n" "Create VERSION as a version in the indicated archive.\n" "The branch for this version must not already exist.\n"); enum options { OPTS (OPT_ENUM) }; static struct opt_desc opts[] = { OPTS (OPT_DESC) {-1, 0, 0, 0, 0} }; int arch_cmd_make_version (t_uchar * program_name, int argc, char * argv[]) { int o; struct opt_parsed * option; t_uchar * default_archive; default_archive = 0; safe_buffer_fd (1, 0, O_WRONLY, 0); option = 0; while (1) { o = opt_standard (lim_use_must_malloc, &option, opts, &argc, argv, program_name, usage, version_string, arch_cmd_make_version_help, opt_help_msg, opt_long_help, opt_version); if (o == opt_none) break; switch (o) { default: safe_printfmt (2, "unhandled option `%s'\n", option->opt_string); panic ("internal error parsing arguments"); usage_error: opt_usage (2, argv[0], program_name, usage, 1); exit (1); /* bogus_arg: */ safe_printfmt (2, "ill-formed argument for `%s' (`%s')\n", option->opt_string, option->arg_string); goto usage_error; case opt_archive: { default_archive = str_save (0, option->arg_string); break; } } } if (argc != 2) goto usage_error; default_archive = arch_my_default_archive (default_archive); { t_uchar * version_spec; t_uchar * archive = 0; t_uchar * version = 0; struct arch_archive * arch = 0; t_uchar * errstr = 0; version_spec = argv[1]; if (!arch_valid_package_name (version_spec, arch_maybe_archive, arch_req_version, 0)) { safe_printfmt (2, "%s: invalid version name (%s)\n", argv[0], version_spec); exit (2); } if (arch_is_system_package_name (version_spec)) { safe_printfmt (2, "%s: user's can not create system versions\n branch: %s\n", argv[0], version_spec); exit (2); } archive = arch_parse_package_name (arch_ret_archive, default_archive, version_spec); version = arch_parse_package_name (arch_ret_package_version, 0, version_spec); arch = arch_archive_connect (archive, 0); if (arch_make_version (&errstr, arch, version)) { safe_printfmt (2, "%s: unable to create version %s (%s)\n archive: %s\n", argv[0], version, errstr, archive); exit (1); } } return 0; } /* tag: Tom Lord Wed May 21 09:17:22 2003 (make-version.c) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-categories.h0000644000175000017500000000126010457622000017742 0ustar useruser/* cmd-categories.h: * **************************************************************** * Copyright (C) 2003 Tom Lord, Stig Brautaset * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__CMD_CATEGORIES_H #define INCLUDE__LIBARCH__CMD_CATEGORIES_H #include "hackerlab/machine/types.h" extern t_uchar arch_cmd_categories_help[]; /* automatically generated __STDC__ prototypes */ extern int arch_cmd_categories (t_uchar * program_name, int argc, char * argv[]); #endif /* INCLUDE__LIBARCH__CMD_CATEGORIES_H */ /* tag: Stig Brautaset Sat Jun 7 13:32:42 BST 2003 (cmd-categories.h) */ tla-1.3.5+dfsg/src/tla/libarch/undo.h0000644000175000017500000000157010457622000016025 0ustar useruser/* undo.h: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__UNDO_H #define INCLUDE__LIBARCH__UNDO_H #include "hackerlab/machine/types.h" /* automatically generated __STDC__ prototypes */ extern void arch_undo (int chatter_fd, t_uchar * dest_dir, int delete_changeset, t_uchar * tree_root, t_uchar * baseline_root, rel_table file_list, assoc_table inode_shortcut, int forward, int escape_classes); extern t_uchar * arch_latest_undo_changeset (t_ulong * level_n, t_uchar * tree_root); extern t_uchar * arch_next_undo_changeset (t_ulong * level_n, t_uchar * tree_root); #endif /* INCLUDE__LIBARCH__UNDO_H */ /* tag: Tom Lord Sat Jan 5 15:26:10 2002 (undo.h) */ tla-1.3.5+dfsg/src/tla/libarch/inode-sig.c0000644000175000017500000004204510457622000016733 0ustar useruser/* inode-sig.c: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/bugs/panic.h" #include "hackerlab/mem/mem.h" #include "hackerlab/char/str.h" #include "hackerlab/fs/file-names.h" #include "hackerlab/vu/safe.h" #include "tla/libfsutils/ensure-dir.h" #include "tla/libfsutils/dir-listing.h" #include "tla/libfsutils/string-files.h" #include "tla/libawk/relational.h" #include "tla/libawk/relassoc.h" #include "tla/libarch/namespace.h" #include "tla/libarch/invent.h" #include "tla/libarch/inode-sig.h" #define MAX_INODE_SIG_FILES 5 /* __STDC__ prototypes for static functions */ static void arch_update_inode_sig (rel_table sig, assoc_table newsig, assoc_table id_list); static void inode_sig_callback (const t_uchar * path, struct stat * stat_buf, enum arch_inventory_category category, const t_uchar * id, int has_source_name, void * closure, int escape_classes); static t_uchar * arch_inode_sig_dir (const t_uchar * tree_root); static t_uchar * arch_inode_sig_file (const t_uchar * tree_root, const t_uchar * archive, const t_uchar * revision); static t_uchar * arch_inode_sig_tmp_file (const t_uchar * tree_root, const t_uchar * archive, const t_uchar * revision); static int arch_creat_inode_sig_file (const t_uchar * tree_root, const t_uchar * archive, const t_uchar * revision); static void arch_finish_inode_sig_file (const t_uchar * tree_root, const t_uchar * archive, const t_uchar * revision, int fd); static void arch_prune_inode_sig_dir (const t_uchar * tree_root, const t_uchar * current_inode_sig_file); static void prune_old_ctime_cruft (rel_table the_table); static void prune_old_dev_cruft (rel_table the_table); t_uchar * arch_statb_inode_sig (struct stat * statb) { int fd = make_output_to_string_fd (); safe_printfmt (fd, "ino=%lu:mtime=%lu:size=%lu", (t_ulong)statb->st_ino, (t_ulong)statb->st_mtime, (t_ulong)statb->st_size); return string_fd_close (fd); } rel_table arch_tree_inode_sig (const t_uchar * tree_root) { struct arch_inventory_options options = {0, }; int here_fd; rel_table answer = rel_table_nil; here_fd = safe_open (".", O_RDONLY, 0); safe_chdir (tree_root); options.categories = arch_inventory_source; options.want_ids = 1; options.include_excluded = 1; arch_get_inventory_naming_conventions (&options, "."); arch_inventory_traversal (&options, ".", inode_sig_callback, (void *)&answer, 0); arch_free_inventory_naming_conventions (&options); rel_sort_table_by_field (0, answer, 0); safe_fchdir (here_fd); safe_close (here_fd); return answer; } void arch_snap_inode_sig (const t_uchar * tree_root, const t_uchar * archive, const t_uchar * revision) { rel_table sig = arch_tree_inode_sig (tree_root); int fd = arch_creat_inode_sig_file (tree_root, archive, revision); rel_print_table (fd, sig); arch_finish_inode_sig_file (tree_root, archive, revision, fd); rel_free_table (sig); } void arch_snap_inode_sig_files (const t_uchar * tree_root, const t_uchar * archive, const t_uchar * prev_revision, const t_uchar * revision, rel_table file_list) { rel_table oldsig; assoc_table newsig_as; rel_table newsig_rel; assoc_table id_list; int fd = -1; arch_read_inode_sig (&oldsig, 0, tree_root, archive, prev_revision); newsig_rel = arch_tree_inode_sig (tree_root); newsig_as = rel_to_assoc (newsig_rel, 0, 1); id_list = arch_filenames_ids ( &file_list, tree_root); arch_update_inode_sig (oldsig, newsig_as, id_list); fd = arch_creat_inode_sig_file (tree_root, archive, revision); rel_print_table (fd, oldsig); arch_finish_inode_sig_file (tree_root, archive, revision, fd); rel_free_table (oldsig); rel_free_table (newsig_rel); free_assoc_table (newsig_as); free_assoc_table (id_list); } static void arch_update_inode_sig (rel_table sig, assoc_table newsig, assoc_table id_list) { int sig_size = rel_n_records (sig); int i; for (i = 0; i != sig_size; ++ i) { if (assoc_get_str_taking (id_list, rel_get_field (sig, i, 0))) { rel_record new_record = rel_record_nil; rel_field vals_field = assoc_get_taking (newsig, rel_get_field (sig, i, 0)); invariant (rel_field_str (vals_field) != 0); new_record = rel_make_record_2_taking (rel_get_field (sig, i, 0), rel_field_ref (vals_field)); rel_set_record (sig, i, new_record); rel_field_unref (vals_field); } } } int arch_valid_inode_sig (const t_uchar * tree_root, const t_uchar * archive, const t_uchar * revision) { int result = 1; t_uchar * sig_file = arch_inode_sig_file(tree_root, archive, revision); if (safe_access (sig_file, F_OK)) { safe_printfmt (2, "Missing inode signature. Cannot verify reference tree integrity: you should remove and recreate this reference tree.\n tree: %s\n archive: %s\n revision: %s\n", tree_root, archive, revision); } else { rel_table existing_sig = rel_table_nil; rel_table current_sig = arch_tree_inode_sig (tree_root); arch_read_inode_sig (&existing_sig, NULL, tree_root, archive, revision); /* Is there a convenience function (a rel_join magic foo?) for this */ if (rel_n_records (existing_sig) == rel_n_records (current_sig)) { int counter,inner; for (counter = 0; counter < rel_n_records (existing_sig); ++counter) for (inner = 0; inner < 2; ++inner) if (str_cmp (rel_peek_str (existing_sig, counter, inner), rel_peek_str (current_sig, counter, inner))) result = 0; } else result = 0; rel_free_table (existing_sig); rel_free_table (current_sig); } lim_free (0, sig_file); return result; } void arch_read_inode_sig (rel_table * as_table, assoc_table * as_assoc, const t_uchar * tree_root, const t_uchar * archive, const t_uchar * revision) { t_uchar * sig_file = arch_inode_sig_file (tree_root, archive, revision); if (as_table) *as_table = rel_table_nil; if (as_assoc) *as_assoc = 0; if (!safe_access (sig_file, F_OK)) { int fd = safe_open (sig_file, O_RDONLY, 0); rel_table the_table; the_table = rel_read_table (fd, 2, "arch", sig_file); prune_old_ctime_cruft (the_table); prune_old_dev_cruft (the_table); if (as_assoc) *as_assoc = rel_to_assoc (the_table, 0, 1); if (as_table) *as_table = the_table; else rel_free_table (the_table); safe_close (fd); } lim_free (0, sig_file); } void arch_read_id_shortcut (assoc_table * ids_shortcut, const t_uchar * tree_root) { t_uchar * inode_sig_dir = arch_inode_sig_dir (tree_root); rel_table dir_listing = maybe_directory_files (inode_sig_dir); assoc_table answer = 0; assoc_table rejected = 0; int x; for (x = 0; x < rel_n_records (dir_listing); ++x) { t_uchar * path = file_name_in_vicinity (0, inode_sig_dir, rel_peek_str (dir_listing, x, 0)); t_uchar * pct = str_chr_index (rel_peek_str (dir_listing, x, 0), '%'); if (pct && str_cmp (".", rel_peek_str (dir_listing, x, 0)) && str_cmp ("..", rel_peek_str (dir_listing, x, 0))) { t_uchar * maybe_archive = str_save_n (0, rel_peek_str (dir_listing, x, 0), pct - rel_peek_str (dir_listing, x, 0)); t_uchar * maybe_revision = str_save (0, pct + 1); if (arch_valid_archive_name (maybe_archive) && arch_valid_package_name (maybe_revision, arch_no_archive, arch_req_patch_level, 0)) { rel_table sig_table = rel_table_nil; int y; arch_read_inode_sig (&sig_table, 0, tree_root, maybe_archive, maybe_revision); for (y = 0; y < rel_n_records (sig_table); ++y) { rel_field this_id_field; rel_field this_sig_field; const t_uchar * is_rejected; const t_uchar * already_have; this_id_field = rel_get_field (sig_table, y, 0); this_sig_field = rel_get_field (sig_table, y, 1); rel_field_ref (this_sig_field); is_rejected = assoc_get_str_taking (rejected, this_sig_field); rel_field_ref (this_sig_field); already_have = assoc_get_str_taking (answer, this_sig_field); if (!is_rejected) { if (already_have) { if (!str_cmp (rel_field_str (this_id_field), already_have)) { assoc_del_taking (answer, rel_field_ref (this_sig_field)); assoc_set_taking (&rejected, rel_field_ref (this_sig_field), rel_make_field_str ("yes")); } } else { assoc_set_taking (&answer, rel_field_ref (this_sig_field), rel_field_ref (this_id_field)); } } rel_field_unref (this_id_field); rel_field_unref (this_sig_field); } rel_free_table (sig_table); } lim_free (0, maybe_archive); lim_free (0, maybe_revision); } lim_free (0, path); } lim_free (0, inode_sig_dir); rel_free_table (dir_listing); free_assoc_table (rejected); *ids_shortcut = answer; } static void inode_sig_callback (const t_uchar * path, struct stat * stat_buf, enum arch_inventory_category category, const t_uchar * id, int has_source_name, void * closure, int escape_classes) { rel_table * answer = (rel_table *)closure; t_uchar * signature = arch_statb_inode_sig (stat_buf); if (!S_ISDIR (stat_buf->st_mode) && !S_ISLNK (stat_buf->st_mode)) rel_add_records (answer, rel_make_record_2_taking (rel_make_field_str (id), rel_make_field_str (signature)), rel_record_null); lim_free(0, signature); } static t_uchar * arch_inode_sig_dir (const t_uchar * tree_root) { return file_name_in_vicinity (0, tree_root, "{arch}/,,inode-sigs"); } static t_uchar * arch_inode_sig_file (const t_uchar * tree_root, const t_uchar * archive, const t_uchar * revision) { t_uchar * inode_sig_dir = arch_inode_sig_dir (tree_root); t_uchar * basename = str_alloc_cat_many (0, archive, "%", revision, str_end); t_uchar * answer = file_name_in_vicinity (0, inode_sig_dir, basename); lim_free (0, inode_sig_dir); lim_free (0, basename); return answer; } static t_uchar * arch_inode_sig_tmp_file (const t_uchar * tree_root, const t_uchar * archive, const t_uchar * revision) { t_uchar * inode_sig_dir = arch_inode_sig_dir (tree_root); t_uchar * basename = str_alloc_cat_many (0, ",,", archive, "%", revision, str_end); t_uchar * answer = file_name_in_vicinity (0, inode_sig_dir, basename); lim_free (0, inode_sig_dir); lim_free (0, basename); return answer; } static int arch_creat_inode_sig_file (const t_uchar * tree_root, const t_uchar * archive, const t_uchar * revision) { t_uchar * inode_sig_dir = arch_inode_sig_dir (tree_root); t_uchar * inode_sig_tmp_file = arch_inode_sig_tmp_file (tree_root, archive, revision); int ign; int answer; ensure_directory_exists (inode_sig_dir); vu_unlink (&ign, inode_sig_tmp_file); answer = safe_open (inode_sig_tmp_file, (O_WRONLY | O_CREAT | O_EXCL), 0444); lim_free (0, inode_sig_dir); lim_free (0, inode_sig_tmp_file); return answer; } static void arch_finish_inode_sig_file (const t_uchar * tree_root, const t_uchar * archive, const t_uchar * revision, int fd) { t_uchar * inode_sig_tmp_file = arch_inode_sig_tmp_file (tree_root, archive, revision); t_uchar * inode_sig_file = arch_inode_sig_file (tree_root, archive, revision); safe_close (fd); safe_rename (inode_sig_tmp_file, inode_sig_file); arch_prune_inode_sig_dir (tree_root, inode_sig_file); lim_free (0, inode_sig_tmp_file); lim_free (0, inode_sig_file); } static void arch_prune_inode_sig_dir (const t_uchar * tree_root, const t_uchar * current_inode_sig_file) { t_uchar * inode_sig_dir = arch_inode_sig_dir (tree_root); rel_table dir_listing = maybe_directory_files (inode_sig_dir); int dead_one = -1; time_t oldest_time; int n_inode_sig_files; int x; do { n_inode_sig_files = 0; for (x = 0; x < rel_n_records (dir_listing); ++x) { t_uchar * path = file_name_in_vicinity (0, inode_sig_dir, rel_peek_str (dir_listing, x, 0)); t_uchar * pct = str_chr_index (rel_peek_str (dir_listing, x, 0), '%'); if (pct && str_cmp (".", rel_peek_str (dir_listing, x, 0)) && str_cmp ("..", rel_peek_str (dir_listing, x, 0))) { t_uchar * maybe_archive = str_save_n (0, rel_peek_str (dir_listing, x, 0), pct - rel_peek_str (dir_listing, x, 0)); t_uchar * maybe_revision = str_save (0, pct + 1); if (arch_valid_archive_name (maybe_archive) && arch_valid_package_name (maybe_revision, arch_no_archive, arch_req_patch_level, 0)) { struct stat statb; ++n_inode_sig_files; safe_lstat (path, &statb); if (str_cmp (current_inode_sig_file, path) && ((dead_one < 0) || (statb.st_mtime < oldest_time))) { dead_one = x; oldest_time = statb.st_mtime; } } lim_free (0, maybe_archive); lim_free (0, maybe_revision); } lim_free (0, path); } if (n_inode_sig_files > MAX_INODE_SIG_FILES) { t_uchar * dead_path = file_name_in_vicinity (0, inode_sig_dir, rel_peek_str (dir_listing, dead_one, 0)); safe_unlink (dead_path); --n_inode_sig_files; lim_free (0, dead_path); } } while (n_inode_sig_files > MAX_INODE_SIG_FILES); /* usually only one iteration expected */ lim_free (0, inode_sig_dir); rel_free_table (dir_listing); } static void prune_old_ctime_cruft (rel_table the_table) { int x; #undef MIN #define MIN(A,B) (((A) < (B)) ? (A) : (B)) for (x = 0; x < rel_n_records (the_table); ++x) { const t_uchar * sig = rel_peek_str (the_table, x, 1); const t_uchar * third_colon; const t_uchar * fourth_colon; t_uchar * fixed_sig = 0; third_colon = str_chr_index (sig, ':'); if (!third_colon) return; third_colon = str_chr_index (third_colon + 1, ':'); if (!third_colon) return; third_colon = str_chr_index (third_colon + 1, ':'); if (!third_colon) return; if (str_cmp_n (third_colon + 1, MIN (5, str_length (third_colon + 1)), "ctime", (size_t)5)) return; fourth_colon = str_chr_index (third_colon + 1, ':'); if (!fourth_colon) return; fixed_sig = str_save_n (0, sig, third_colon - sig); fixed_sig = str_realloc_cat_n (0, fixed_sig, fourth_colon, 1 + str_length (fourth_colon)); rel_set_taking (the_table, x, 1, rel_make_field_str (fixed_sig)); lim_free (0, fixed_sig); } } static void prune_old_dev_cruft (rel_table the_table) { int x; #undef MIN #define MIN(A,B) (((A) < (B)) ? (A) : (B)) for (x = 0; x < rel_n_records (the_table); ++x) { const t_uchar * sig = rel_peek_str (the_table, x, 1); const t_uchar * first_colon; if (str_cmp_n (sig, MIN (3, str_length (sig)), "dev", (size_t)3)) return; first_colon = str_chr_index (sig, ':'); if (!first_colon) return; rel_set_taking (the_table, x, 1, rel_make_field_str_n (first_colon + 1, str_length (first_colon))); } } /* tag: Tom Lord Fri Sep 12 09:56:44 2003 (inode-sig.c) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-branches.c0000644000175000017500000000773010457622000017405 0ustar useruser/* branches.c * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "config-options.h" #include "hackerlab/cmd/main.h" #include "tla/libarch/namespace.h" #include "tla/libarch/project-tree.h" #include "tla/libarch/my.h" #include "tla/libarch/archive.h" #include "tla/libarch/cmd.h" #include "tla/libarch/cmd-branches.h" static t_uchar * usage = "[options] [category]"; static t_uchar * version_string = (cfg__std__package " from regexps.com\n" "\n" "Copyright 2003 Tom Lord\n" "\n" "This is free software; see the source for copying conditions.\n" "There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\n" "PARTICULAR PURPOSE.\n" "\n" "Report bugs to " cfg__tla_bug_mail ".\n" "\n" cfg__std__release_id_string "\n"); #define OPTS(OP) \ OP (opt_help_msg, "h", "help", 0, \ "Display a help message and exit.") \ OP (opt_long_help, "H", 0, 0, \ "Display a verbose help message and exit.") \ OP (opt_version, "V", "version", 0, \ "Display a release identifier string\n" \ "and exit.") \ OP (opt_archive, "A", "archive", 1, \ "Override `my-default-archive'") t_uchar arch_cmd_branches_help[] = ("list the branches in an archive category\n" "Print a list of the branches within CATEGORY\n"); enum options { OPTS (OPT_ENUM) }; static struct opt_desc opts[] = { OPTS (OPT_DESC) {-1, 0, 0, 0, 0} }; int arch_cmd_branches (t_uchar * program_name, int argc, char * argv[]) { int o; struct opt_parsed * option; t_uchar * default_archive; default_archive = 0; safe_buffer_fd (1, 0, O_WRONLY, 0); option = 0; while (1) { o = opt_standard (lim_use_must_malloc, &option, opts, &argc, argv, program_name, usage, version_string, arch_cmd_branches_help, opt_help_msg, opt_long_help, opt_version); if (o == opt_none) break; switch (o) { default: safe_printfmt (2, "unhandled option `%s'\n", option->opt_string); panic ("internal error parsing arguments"); usage_error: opt_usage (2, argv[0], program_name, usage, 1); exit (1); /* bogus_arg: */ safe_printfmt (2, "ill-formed argument for `%s' (`%s')\n", option->opt_string, option->arg_string); goto usage_error; case opt_archive: { default_archive = str_save (0, option->arg_string); break; } } } if (argc > 2) goto usage_error; default_archive = arch_my_default_archive (default_archive); { t_uchar * cat_spec = 0; t_uchar * archive = 0; t_uchar * cat = 0; struct arch_archive * arch = 0; rel_table branches = rel_table_nil; if (argc == 2) { cat_spec = str_save (0, argv[1]); if (!arch_valid_package_name (cat_spec, arch_maybe_archive, arch_req_category, 0)) { safe_printfmt (2, "%s: invalid category name (%s)\n", argv[0], cat_spec); exit (2); } } else cat_spec = arch_try_tree_version (program_name); archive = arch_parse_package_name (arch_ret_archive, default_archive, cat_spec); cat = arch_parse_package_name (arch_ret_category, 0, cat_spec); arch = arch_archive_connect (archive, 0); branches = arch_archive_branches (arch, cat); rel_print_table (1, branches); lim_free (0, cat_spec); } return 0; } /* tag: Tom Lord Tue May 20 14:38:14 2003 (branches.c) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-archive-version.c0000644000175000017500000000723510457622000020724 0ustar useruser/* archive-version.c * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "config-options.h" #include "hackerlab/cmd/main.h" #include "tla/libarch/namespace.h" #include "tla/libarch/project-tree.h" #include "tla/libarch/my.h" #include "tla/libarch/archive.h" #include "tla/libarch/cmd.h" #include "tla/libarch/cmd-archive-version.h" static t_uchar * usage = "[options]"; static t_uchar * version_string = (cfg__std__package " from regexps.com\n" "\n" "Copyright 2003 Tom Lord\n" "\n" "This is free software; see the source for copying conditions.\n" "There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\n" "PARTICULAR PURPOSE.\n" "\n" "Report bugs to " cfg__tla_bug_mail ".\n" "\n" cfg__std__release_id_string "\n"); #define OPTS(OP) \ OP (opt_help_msg, "h", "help", 0, \ "Display a help message and exit.") \ OP (opt_long_help, "H", 0, 0, \ "Display a verbose help message and exit.") \ OP (opt_version, "V", "version", 0, \ "Display a release identifier string\n" \ "and exit.") \ OP (opt_archive, "A", "archive", 1, \ "Override `my-default-archive'") t_uchar arch_cmd_archive_version_help[] = ("list the archive-version in an archive\n" "Print the archive format identifier string\n" "of an arch archive.\n"); enum options { OPTS (OPT_ENUM) }; static struct opt_desc opts[] = { OPTS (OPT_DESC) {-1, 0, 0, 0, 0} }; int arch_cmd_archive_version (t_uchar *program_name, int argc, char * argv[]) { int o; struct opt_parsed * option; t_uchar * default_archive; default_archive = 0; safe_buffer_fd (1, 0, O_WRONLY, 0); option = 0; while (1) { o = opt_standard (lim_use_must_malloc, &option, opts, &argc, argv, program_name, usage, version_string, arch_cmd_archive_version_help, opt_help_msg, opt_long_help, opt_version); if (o == opt_none) break; switch (o) { default: safe_printfmt (2, "unhandled option `%s'\n", option->opt_string); panic ("internal error parsing arguments"); usage_error: opt_usage (2, argv[0], program_name, usage, 1); exit (1); /* bogus_arg: */ safe_printfmt (2, "ill-formed argument for `%s' (`%s')\n", option->opt_string, option->arg_string); goto usage_error; case opt_archive: { default_archive = str_save (0, option->arg_string); break; } } } if (argc != 1) goto usage_error; default_archive = arch_my_default_archive (default_archive); if (!arch_valid_archive_name (default_archive)) { safe_printfmt (2, "%s: invalid archive name (%s)\n", argv[0], default_archive); exit (1); } { struct arch_archive * arch = 0; t_uchar * version = 0; arch = arch_archive_connect (default_archive, 0); version = arch_archive_version (arch); safe_printfmt (1, "%s\n", version); arch_archive_close (arch); lim_free (0, version); } return 0; } /* tag: Tom Lord Thu Jun 5 16:30:06 2003 (archive-version.c) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-rm.c0000644000175000017500000000615010457622000016231 0ustar useruser/* cmd-mv.c * **************************************************************** * Copyright (C) 2001, 2002, 2003, 2004 Tom Lord, Stefanie Tellex * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "config-options.h" #include "hackerlab/cmd/main.h" #include "hackerlab/fs/file-names.h" #include "tla/libarch/inv-ids.h" #include "tla/libarch/cmd-rm.h" #include #include #include static t_uchar * usage = "[options] file..."; static t_uchar * version_string = (cfg__std__package " from regexps.com\n" "\n" "Copyright 2001, 2002, 2003 Tom Lord\n" "\n" "This is free software; see the source for copying conditions.\n" "There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\n" "PARTICULAR PURPOSE.\n" "\n" "Report bugs to " cfg__tla_bug_mail ".\n" "\n"); #define OPTS(OP) \ OP (opt_help_msg, "h", "help", 0, \ "Display a help message and exit.") \ OP (opt_long_help, "H", 0, 0, \ "Display a verbose help message and exit.") \ OP (opt_version, "V", "version", 0, \ "Display a release identifier string\n" \ "and exit.") t_uchar arch_cmd_rm_help[] = ("remove a file (or dir, or symlink) and its explicit inventory tag\n" "This command is suitable as a replacement for rm(1) within any tla\n" "tree for any remove operation, regardless of id tagging method.\n"); enum options { OPTS (OPT_ENUM) }; static struct opt_desc opts[] = { OPTS (OPT_DESC) {-1, 0, 0, 0, 0} }; int arch_cmd_rm (t_uchar * program_name, int argc, char * argv[]) { int o; struct opt_parsed * option; safe_buffer_fd (1, 0, O_WRONLY, 0); option = 0; while (1) { o = opt_standard (lim_use_must_malloc, &option, opts, &argc, argv, program_name, usage, version_string, arch_cmd_rm_help, opt_help_msg, opt_long_help, opt_version); if (o == opt_none) break; switch (o) { default: safe_printfmt (2, "unhandled option `%s'\n", option->opt_string); panic ("internal error parsing arguments"); usage_error: opt_usage (2, argv[0], program_name, usage, 1); exit (1); /* bogus_arg: */ safe_printfmt (2, "ill-formed argument for `%s' (`%s')\n", option->opt_string, option->arg_string); goto usage_error; } } if (argc < 2) goto usage_error; { int a; for (a = 1; a < argc; ++a) { t_uchar * file; struct stat buf; file = argv[a]; safe_lstat(file, &buf); if (!S_ISDIR(buf.st_mode)) { arch_delete_explicit_id (file); safe_unlink(file); } else { safe_printfmt (2, "attempt to remove directory %s\n", file); exit (2); } } } return 0; } /* * tag: */ tla-1.3.5+dfsg/src/tla/libarch/cmd-undo.h0000644000175000017500000000116510457622000016566 0ustar useruser/* cmd-undo.h: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__CMD_UNDO_H #define INCLUDE__LIBARCH__CMD_UNDO_H #include "hackerlab/machine/types.h" extern t_uchar arch_cmd_undo_help[]; /* automatically generated __STDC__ prototypes */ extern int arch_cmd_undo (t_uchar * program_name, int argc, char * argv[]); #endif /* INCLUDE__LIBARCH__CMD_UNDO_H */ /* tag: Tom Lord Sat Jan 5 15:26:10 2002 (cmd-undo-changes.h) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-commit.h0000644000175000017500000000122410457622000017105 0ustar useruser/* cmd-commit.h: * **************************************************************** * Copyright (C) 2003 Tom Lord, Stig Brautaset * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__CMD_COMMIT_H #define INCLUDE__LIBARCH__CMD_COMMIT_H #include "hackerlab/machine/types.h" extern t_uchar arch_cmd_commit_help[]; /* automatically generated __STDC__ prototypes */ extern int arch_cmd_commit (t_uchar * program_name, int argc, char * argv[]); #endif /* INCLUDE__LIBARCH__CMD_COMMIT_H */ /* tag: Stig Brautaset Sat Jun 7 13:42:05 BST 2003 (cmd-cmtrev.h) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-uncacherev.c0000644000175000017500000001142610457622000017740 0ustar useruser/* cmd-uncacherev.c * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "config-options.h" #include "hackerlab/cmd/main.h" #include "hackerlab/fs/file-names.h" #include "hackerlab/fs/cwd.h" #include "tla/libfsutils/tmp-files.h" #include "tla/libfsutils/rmrf.h" #include "tla/libarch/namespace.h" #include "tla/libarch/project-tree.h" #include "tla/libarch/my.h" #include "tla/libarch/archive.h" #include "tla/libarch/pristines.h" #include "tla/libarch/build-revision.h" #include "tla/libarch/cmd-uncacherev.h" static t_uchar * usage = "[options] revision [dir]"; static t_uchar * version_string = (cfg__std__package " from regexps.com\n" "\n" "Copyright 2003 Tom Lord\n" "\n" "This is free software; see the source for copying conditions.\n" "There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\n" "PARTICULAR PURPOSE.\n" "\n" "Report bugs to " cfg__tla_bug_mail ".\n" "\n" cfg__std__release_id_string "\n"); #define OPTS(OP) \ OP (opt_help_msg, "h", "help", 0, \ "Display a help message and exit.") \ OP (opt_long_help, "H", 0, 0, \ "Display a verbose help message and exit.") \ OP (opt_version, "V", "version", 0, \ "Display a release identifier string\n" \ "and exit.") \ OP (opt_archive, "A", "archive", 1, \ "Override `my-default-archive'") t_uchar arch_cmd_uncacherev_help[] = ("remove a cached full source tree from an archive\n" "Remove the cached form of REVISION from its archive.\n" "\n" "If REVISION is not specified, but the command is run from within\n" "a project tree, uncache the latest revision in the default\n" "version of that tree.\n" "\n" "Also see \"tla cacherev -H\".\n"); enum options { OPTS (OPT_ENUM) }; static struct opt_desc opts[] = { OPTS (OPT_DESC) {-1, 0, 0, 0, 0} }; int arch_cmd_uncacherev (t_uchar * program_name, int argc, char * argv[]) { int o; struct opt_parsed * option; t_uchar * default_archive = 0; safe_buffer_fd (1, 0, O_WRONLY, 0); option = 0; while (1) { o = opt_standard (lim_use_must_malloc, &option, opts, &argc, argv, program_name, usage, version_string, arch_cmd_uncacherev_help, opt_help_msg, opt_long_help, opt_version); if (o == opt_none) break; switch (o) { default: safe_printfmt (2, "unhandled option `%s'\n", option->opt_string); panic ("internal error parsing arguments"); usage_error: opt_usage (2, argv[0], program_name, usage, 1); exit (1); /* bogus_arg: */ safe_printfmt (2, "ill-formed argument for `%s' (`%s')\n", option->opt_string, option->arg_string); goto usage_error; case opt_archive: { lim_free (0, default_archive); default_archive = str_save (0, option->arg_string); break; } } } if (argc != 2) goto usage_error; default_archive = arch_my_default_archive (default_archive); { t_uchar * revision_spec; t_uchar * archive = 0; t_uchar * revision = 0; struct arch_archive * arch = 0; revision_spec = argv[1]; if (!arch_valid_package_name (revision_spec, arch_maybe_archive, arch_req_patch_level, 1)) { safe_printfmt (2, "%s: invalid revision spec (%s)\n", argv[0], revision_spec); exit (2); } archive = arch_parse_package_name (arch_ret_archive, default_archive, revision_spec); revision = arch_parse_package_name (arch_ret_non_archive, 0, revision_spec); arch = arch_archive_connect (archive, 0); { t_uchar * errstr; if (arch_archive_delete_cached (&errstr, arch, revision)) { safe_printfmt (2, "%s: unable to delete cached revision of %s/%s (%s)\n", argv[0], archive, revision, errstr); exit (1); } } arch_archive_close (arch); lim_free (0, archive); lim_free (0, revision); } lim_free (0, default_archive); return 0; } /* tag: Tom Lord Thu May 29 23:16:23 2003 (uncacherev.c) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-make-version.h0000644000175000017500000000127610457622000020224 0ustar useruser/* cmd-make-version.h: * **************************************************************** * Copyright (C) 2003 Tom Lord, Stig Brautaset * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__CMD_MAKE_VERSION_H #define INCLUDE__LIBARCH__CMD_MAKE_VERSION_H #include "hackerlab/machine/types.h" extern t_uchar arch_cmd_make_version_help[]; /* automatically generated __STDC__ prototypes */ extern int arch_cmd_make_version (t_uchar * program_name, int argc, char * argv[]); #endif /* INCLUDE__LIBARCH__CMD_MAKE_VERSION_H */ /* tag: Stig Brautaset Sat Jun 7 16:00:59 BST 2003 (cmd-make-version.h) */ tla-1.3.5+dfsg/src/tla/libarch/make-changeset.c0000644000175000017500000023536310457622000017740 0ustar useruser/* make-changeset.c: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/bugs/panic.h" #include "hackerlab/mem/mem.h" #include "hackerlab/char/str.h" #include "hackerlab/char/char-class.h" #include "hackerlab/arrays/ar.h" #include "hackerlab/sort/qsort.h" #include "hackerlab/fs/file-names.h" #include "hackerlab/fs/cwd.h" #include "hackerlab/vu/safe.h" #include "hackerlab/char/pika-escaping-utils.h" #include "tla/libfsutils/ensure-dir.h" #include "tla/libfsutils/dir-as-cwd.h" #include "tla/libfsutils/copy-file.h" #include "tla/libfsutils/link-target.h" #include "tla/libawk/associative.h" #include "tla/libarch/arch.h" #include "tla/libarch/diffs.h" #include "tla/libarch/invent.h" #include "tla/libarch/project-tree.h" #include "tla/libarch/make-changeset.h" /* __STDC__ prototypes for static functions */ static void invoke_report_callback (struct arch_make_changeset_report * report, const char * fmt, ...) __attribute__((format (printf, 2, 3))); static const char * no_dot (const char *name); static void compute_renames (rel_table * out, assoc_table loc_of_orig_X_id, assoc_table mod_dir_id_of, assoc_table orig_container_dir_id_of_X_id, rel_table X_index); static void write_dir_metadata (const t_uchar * file, const t_uchar * tree_root, rel_table dirs, int full_meta); static void copy_files_and_symlinks (const t_uchar * dest, const t_uchar * tree_root, rel_table loc_list, int full_meta); static void emit_dir_patches (rel_table * orig_index_names_output, rel_table * mod_index_names_output, struct arch_make_changeset_report * report, const t_uchar * patches, const t_uchar * orig, const t_uchar * orig_loc, const t_uchar * mod, const t_uchar * mod_loc, int escape_classes, int full_meta); static void emit_file_or_symlink_patches (rel_table * orig_index_names_output, rel_table * mod_index_names_output, struct arch_make_changeset_report * report, const t_uchar * patches, const t_uchar * orig, const t_uchar * orig_loc, const t_uchar * mod, const t_uchar * mod_loc, const t_uchar * id, assoc_table inode_sig_shortcuts_of_mod, int link_same, int escape_classes, int full_meta); static void compute_parent_dir_closure (rel_table * orig_newname_dirs, rel_table * mod_newname_dirs, rel_table orig_newname_files, rel_table mod_newname_files, assoc_table orig_dir_loc_of, assoc_table orig_dir_id_of, assoc_table orig_container_dir_id_of_dir_id, assoc_table orig_container_dir_id_of_file_id, assoc_table mod_dir_loc_of, assoc_table mod_dir_id_of, assoc_table mod_container_dir_id_of_dir_id, assoc_table mod_container_dir_id_of_file_id, assoc_table orig_file_id_of, assoc_table mod_file_id_of); static void schedule_missing_containers (rel_table * added_orig_container_ids, assoc_table * orig_has_dir_id, rel_table * added_mod_container_ids, assoc_table * mod_has_dir_id, rel_table locs_in, assoc_table id_of_dir_loc, assoc_table first_container_id_of_id, assoc_table container_id_of_dir_id, assoc_table orig_dir_loc_of, assoc_table mod_dir_loc_of); static void container_closure (rel_table * locs_out, assoc_table * has_ids, const t_uchar * deep_id, assoc_table dir_loc_of, assoc_table container_dir_id_of_dir_id); static void link_force (const t_uchar *old_path, const t_uchar *new_path); static int cut_field_0[] = { 0, -1 }; static int cut_field_1[] = { 1, -1 }; void arch_free_make_changeset_report_data (struct arch_make_changeset_report * report) { arch_free_changeset_inventory_data (&report->orig_index); arch_free_changeset_inventory_data (&report->mod_index); free_assoc_table (report->orig_dir_id_of); free_assoc_table (report->orig_dir_loc_of); free_assoc_table (report->orig_file_id_of); free_assoc_table (report->orig_file_loc_of); free_assoc_table (report->mod_dir_id_of); free_assoc_table (report->mod_dir_loc_of); free_assoc_table (report->mod_file_id_of); free_assoc_table (report->mod_file_loc_of); free_assoc_table (report->orig_container_dir_id_of_dir_id); free_assoc_table (report->orig_container_dir_id_of_file_id); free_assoc_table (report->mod_container_dir_id_of_dir_id); free_assoc_table (report->mod_container_dir_id_of_file_id); rel_free_table (report->renamed_dirs); rel_free_table (report->renamed_files); rel_free_table (report->modified_files); rel_free_table (report->perms_changed_files); rel_free_table (report->perms_changed_dirs); rel_free_table (report->added_files); rel_free_table (report->added_dirs); rel_free_table (report->removed_files); rel_free_table (report->removed_dirs); } #if !defined(__GNUC__) # undef __attribute__ # define __attribute__(X) #endif static void __attribute__((format (printf, 2, 3))) invoke_report_callback (struct arch_make_changeset_report * report, const char * fmt, ...) { va_list ap; va_start (ap, fmt); report->callback (report->thunk, fmt, ap); va_end (ap); } static const char * no_dot (const char *name) { if (name[0] == '.' && name[1] == '/') return name + 2; else return name; } void arch_make_changeset (struct arch_make_changeset_report * report, const t_uchar * orig_spec, const t_uchar * mod_spec, const t_uchar * dest_spec, enum arch_id_tagging_method method, enum arch_inventory_category untagged_source_category, rel_table limits_spec, assoc_table inode_sig_shortcuts_of_mod, int link_same, int escape_classes) { int here_fd; t_uchar * orig; t_uchar * mod; t_uchar * orig_root; t_uchar * mod_root; int full_meta; t_uchar * dest; rel_table limits = rel_table_nil; assoc_table loc_transl = 0; int lim; int x; rel_table orig_full_index = rel_table_nil; rel_table mod_full_index = rel_table_nil; rel_table mod_full_index_by_name = rel_table_nil; rel_table orig_full_index_by_name = rel_table_nil; rel_table orig_dirs_full_index_by_name = rel_table_nil; rel_table mod_dirs_full_index_by_name = rel_table_nil; rel_table orig_dir_ids = rel_table_nil; rel_table mod_dir_ids = rel_table_nil; rel_table original_only_dir_ids = rel_table_nil; rel_table modified_only_dir_ids = rel_table_nil; rel_table dir_ids_in_both = rel_table_nil; rel_table original_only_dirs = rel_table_nil; rel_table modified_only_dirs = rel_table_nil; rel_table renamed_dirs = rel_table_nil; rel_table orig_files_full_index_by_name = rel_table_nil; rel_table mod_files_full_index_by_name = rel_table_nil; rel_table orig_file_ids = rel_table_nil; rel_table mod_file_ids = rel_table_nil; rel_table original_only_file_ids = rel_table_nil; rel_table modified_only_file_ids = rel_table_nil; rel_table original_only_files = rel_table_nil; rel_table modified_only_files = rel_table_nil; rel_table file_ids_in_both = rel_table_nil; rel_table renamed_files = rel_table_nil; rel_table files_in_both = rel_table_nil; rel_table dirs_in_both = rel_table_nil; assoc_table orig_ids_seen = 0; assoc_table mod_ids_seen = 0; t_uchar * original_only_dir_metadata_file = 0; t_uchar * modified_only_dir_metadata_file = 0; t_uchar * removed_files_archive_dir = 0; t_uchar * new_files_archive_dir = 0; t_uchar * patches_dir = 0; t_uchar * orig_files_index_file = 0; t_uchar * orig_dirs_index_file = 0; t_uchar * mod_files_index_file = 0; t_uchar * mod_dirs_index_file = 0; rel_table orig_files_index_names_output = rel_table_nil; rel_table orig_dirs_index_names_output = rel_table_nil; rel_table mod_files_index_names_output = rel_table_nil; rel_table mod_dirs_index_names_output = rel_table_nil; here_fd = safe_open (".", O_RDONLY, 0); safe_chdir (orig_spec); orig_root = arch_tree_root (0, ".", 0); orig = safe_current_working_directory (); safe_fchdir (here_fd); safe_chdir (mod_spec); mod_root = arch_tree_root (0, ".", 0); mod = safe_current_working_directory (); safe_fchdir (here_fd); full_meta = arch_tree_has_meta_flag (mod_root); /* canonicalize limits * * In other words, turn them into mod-tree locs, and eliminate * nested limits. */ if (rel_n_records (limits_spec)) { rel_table lim_spec_locs = rel_table_nil; int mod_root_length; int l; mod_root_length = str_length (mod_root); for (l = 0; l < rel_n_records (limits_spec); ++l) { const t_uchar * spec; t_uchar * spec_dir = 0; t_uchar * spec_tail = 0; t_uchar * spec_dir_abs = 0; t_uchar * spec_loc = 0; spec = rel_peek_str (limits_spec, l, 0); spec_dir = file_name_directory_file (0, spec); if (!spec_dir) spec_dir = str_save (0, "."); spec_tail = file_name_tail (0, spec); spec_dir_abs = directory_as_cwd (spec_dir); if (str_cmp_prefix (mod_root, spec_dir_abs) || (spec_dir_abs[mod_root_length] && (spec_dir_abs[mod_root_length] != '/'))) { safe_printfmt (2, "make-changeset: limit %s is not in tree %s\n", spec, mod_root); exit (2); } spec_loc = str_alloc_cat_many (0, ".", spec_dir_abs + mod_root_length, "/", spec_tail, str_end); rel_add_records (&lim_spec_locs, rel_singleton_record_taking (rel_make_field_str (spec_loc)), rel_record_null); lim_free (0, spec_dir); lim_free (0, spec_tail); lim_free (0, spec_dir_abs); lim_free (0, spec_loc); } for (l = 0; l < rel_n_records (lim_spec_locs); ++l) { int m; int dont_want = 0; for (m = 0; (!dont_want && (m < rel_n_records (limits))); ++m) { if (file_name_is_path_prefix (rel_peek_str (limits, m, 0), rel_peek_str (lim_spec_locs, l, 0))) { dont_want = 1; } else if (file_name_is_path_prefix (rel_peek_str (lim_spec_locs, l, 0), rel_peek_str (limits, m, 0))) { rel_set_taking (limits, m, 0, rel_get_field (lim_spec_locs, l, 0)); dont_want = 1; } } if (!dont_want) rel_add_records (&limits, rel_singleton_record_taking (rel_get_field (lim_spec_locs, l, 0)), rel_record_null); } rel_sort_table_by_field (0, limits, 0); rel_free_table (lim_spec_locs); } /* create the output directory */ safe_mkdir (dest_spec, 0777); safe_chdir (dest_spec); dest = safe_current_working_directory (); safe_fchdir (here_fd); /* inventory orig and mod */ mem_set0 ((t_uchar *)&report->orig_index, sizeof (report->orig_index)); mem_set0 ((t_uchar *)&report->mod_index, sizeof (report->mod_index)); arch_changeset_inventory (&report->orig_index, orig_root, orig, method, untagged_source_category, escape_classes); arch_changeset_inventory (&report->mod_index, mod_root, mod, method, untagged_source_category, escape_classes); orig_full_index = rel_copy_table (report->orig_index.dirs); rel_append_x (&orig_full_index, report->orig_index.files); rel_add_records (&orig_full_index, rel_make_record_2_taking (rel_make_field_str ("."), rel_make_field_str ("?_.")), rel_record_null); rel_sort_table_by_field (0, orig_full_index, 1); mod_full_index = rel_copy_table (report->mod_index.dirs); rel_append_x (&mod_full_index, report->mod_index.files); rel_add_records (&mod_full_index, rel_make_record_2_taking (rel_make_field_str ("."), rel_make_field_str ("?_.")), rel_record_null); rel_sort_table_by_field (0, mod_full_index, 1); mod_full_index_by_name = rel_copy_table (mod_full_index); rel_sort_table_by_field (0, mod_full_index_by_name, 0); orig_full_index_by_name = rel_copy_table (orig_full_index); rel_sort_table_by_field (0, orig_full_index_by_name, 0); /* if limits were specified, smudge the MOD index and load-up the translation table */ if (rel_n_records (limits)) { /* The goal here is to create a fake mod index -- the index of the * mod tree as it would be after we ignore changes outside the limits. * * If there were apparently renames across the limit boundaries, we have to * fail. * * Additionally, we need a "mod-path-translation" -- a mapping from fake-inventory * locs to actual mod locs to use when diffing. If we want to pretend/presume * that some item hasn't been modified, it's left out of this translation. */ /* Three cases of items to deal with in the fake inventory: * * 1) Items common to both ORIG and MOD * 2) Items unique to ORIG * 3) Items unique to MOD * * * Little lemma: for each (canonicalized) limit $PREFIX/$TAIL, * the item in MOD with loc $PREFIX must exist in ORIG. Because, * otherwise, the limit wants to add files to dirs that have not been * added to ORIG (a user error). * */ /* currently, limits is just [0] == mod_path */ exit (2); } orig_dirs_full_index_by_name = rel_copy_table (report->orig_index.dirs); rel_sort_table_by_field (0, orig_dirs_full_index_by_name, 0); mod_dirs_full_index_by_name = rel_copy_table (report->mod_index.dirs); rel_sort_table_by_field (0, mod_dirs_full_index_by_name, 0); orig_dir_ids = rel_cut (cut_field_1, report->orig_index.dirs); mod_dir_ids = rel_cut (cut_field_1, report->mod_index.dirs); original_only_dir_ids = rel_join (1, rel_join_output (1,0, -1), 0, 0, orig_dir_ids, mod_dir_ids); modified_only_dir_ids = rel_join (2, rel_join_output (2,0, -1), 0, 0, orig_dir_ids, mod_dir_ids); dir_ids_in_both = rel_join (-1, rel_join_output (0,0, -1), 0, 0, orig_dir_ids, mod_dir_ids); original_only_dirs = rel_join (-1, rel_join_output (2,0, -1), 0, 1, original_only_dir_ids, report->orig_index.dirs); rel_sort_table_by_field (0, original_only_dirs, 0); modified_only_dirs = rel_join (-1, rel_join_output (2,0, -1), 0, 1, modified_only_dir_ids, report->mod_index.dirs); rel_sort_table_by_field (0, modified_only_dirs, 0); /**************************************************************** * build associative tables to and from ids and locs */ lim = rel_n_records (report->orig_index.dirs); for (x = 0; x < lim; ++x) { assoc_set_taking (&report->orig_dir_id_of, rel_get_field (report->orig_index.dirs, x, 0), rel_get_field (report->orig_index.dirs, x, 1)); assoc_set_taking (&report->orig_dir_loc_of, rel_get_field (report->orig_index.dirs, x, 1), rel_get_field (report->orig_index.dirs, x, 0)); } lim = rel_n_records (report->orig_index.files); for (x = 0; x < lim; ++x) { assoc_set_taking (&report->orig_file_id_of, rel_get_field (report->orig_index.files, x, 0), rel_get_field (report->orig_index.files, x, 1)); assoc_set_taking (&report->orig_file_loc_of, rel_get_field (report->orig_index.files, x, 1), rel_get_field (report->orig_index.files, x, 0)); } lim = rel_n_records (report->mod_index.dirs); for (x = 0; x < lim; ++x) { assoc_set_taking (&report->mod_dir_id_of, rel_get_field (report->mod_index.dirs, x, 0), rel_get_field (report->mod_index.dirs, x, 1)); assoc_set_taking (&report->mod_dir_loc_of, rel_get_field (report->mod_index.dirs, x, 1), rel_get_field (report->mod_index.dirs, x, 0)); } lim = rel_n_records (report->mod_index.files); for (x = 0; x < lim; ++x) { assoc_set_taking (&report->mod_file_id_of, rel_get_field (report->mod_index.files, x, 0), rel_get_field (report->mod_index.files, x, 1)); assoc_set_taking (&report->mod_file_loc_of, rel_get_field (report->mod_index.files, x, 1), rel_get_field (report->mod_index.files, x, 0)); } assoc_set_taking (&report->orig_dir_id_of, rel_make_field_str ("."), rel_make_field_str ("?_.")); assoc_set_taking (&report->mod_dir_id_of, rel_make_field_str ("."), rel_make_field_str ("?_.")); assoc_set_taking (&report->orig_dir_loc_of, rel_make_field_str ("?_."), rel_make_field_str (".")); assoc_set_taking (&report->mod_dir_loc_of, rel_make_field_str ("?_."), rel_make_field_str (".")); arch_make_changeset_compute_container_map (&report->orig_container_dir_id_of_dir_id, report->orig_dir_id_of, report->orig_index.dirs); arch_make_changeset_compute_container_map (&report->orig_container_dir_id_of_file_id, report->orig_dir_id_of, report->orig_index.files); arch_make_changeset_compute_container_map (&report->mod_container_dir_id_of_dir_id, report->mod_dir_id_of, report->mod_index.dirs); arch_make_changeset_compute_container_map (&report->mod_container_dir_id_of_file_id, report->mod_dir_id_of, report->mod_index.files); /**************************************************************** * figure out which directories have been renamed. */ compute_renames (&renamed_dirs, report->orig_dir_loc_of, report->mod_dir_id_of, report->orig_container_dir_id_of_dir_id, report->mod_index.dirs); /**************************************************************** * file lists */ orig_files_full_index_by_name = rel_copy_table (report->orig_index.files); rel_sort_table_by_field (0, orig_files_full_index_by_name, 0); mod_files_full_index_by_name = rel_copy_table (report->mod_index.files); rel_sort_table_by_field (0, mod_files_full_index_by_name, 0); orig_file_ids = rel_cut (cut_field_1, report->orig_index.files); mod_file_ids = rel_cut (cut_field_1, report->mod_index.files); original_only_file_ids = rel_join (1, rel_join_output (1,0, -1), 0, 0, orig_file_ids, mod_file_ids); modified_only_file_ids = rel_join (2, rel_join_output (2,0, -1), 0, 0, orig_file_ids, mod_file_ids); file_ids_in_both = rel_join (-1, rel_join_output (1,0, -1), 0, 0, orig_file_ids, mod_file_ids); original_only_files = rel_join (-1, rel_join_output (2,0, -1), 0, 1, original_only_file_ids, report->orig_index.files); rel_sort_table_by_field (0, original_only_files, 0); modified_only_files = rel_join (-1, rel_join_output (2,0, -1), 0, 1, modified_only_file_ids, report->mod_index.files); rel_sort_table_by_field (0, modified_only_files, 0); compute_renames (&renamed_files, report->orig_file_loc_of, report->mod_dir_id_of, report->orig_container_dir_id_of_file_id, report->mod_index.files); /*************************************************************** * {files,dir}_in_both [0] orig_loc [1] mod_loc */ { rel_table tmp_table; tmp_table = rel_join (-1, rel_join_output (1,0, 2,0, -1), 0, 1, file_ids_in_both, report->mod_index.files); files_in_both = rel_join (-1, rel_join_output (2,0, 1,1, 1,0, -1), 0, 1, tmp_table, report->orig_index.files); rel_free_table (tmp_table); } { rel_table tmp_table; tmp_table = rel_join (-1, rel_join_output (1,0, 2,0, -1), 0, 1, dir_ids_in_both, report->mod_index.dirs); dirs_in_both = rel_join (-1, rel_join_output (2,0, 1,1, -1), 0, 1, tmp_table, report->orig_index.dirs); rel_free_table (tmp_table); } /**************************************************************** * Check for Duplicate Inventory Ids */ lim = rel_n_records (report->orig_index.dirs); for (x = 0; x < lim; ++x) { const t_uchar * seen; seen = assoc_get_str_taking (orig_ids_seen, rel_get_field (report->orig_index.dirs, x, 1)); if (seen) panic ("duplicate ids in ORIG tree, try tree-lint"); assoc_set_taking (&orig_ids_seen, rel_get_field (report->orig_index.dirs, x, 1), rel_get_field (report->orig_index.dirs, x, 0)); } lim = rel_n_records (report->orig_index.files); for (x = 0; x < lim; ++x) { const t_uchar * seen; seen = assoc_get_str_taking (orig_ids_seen, rel_get_field (report->orig_index.files, x, 1)); if (seen) panic ("duplicate ids in ORIG tree, try tree-lint"); assoc_set_taking (&orig_ids_seen, rel_get_field (report->orig_index.files, x, 1), rel_get_field (report->orig_index.files, x, 0)); } lim = rel_n_records (report->mod_index.dirs); for (x = 0; x < lim; ++x) { const t_uchar * seen; seen = assoc_get_str_taking (mod_ids_seen, rel_get_field (report->mod_index.dirs, x, 1)); if (seen) panic ("duplicate ids in MOD tree, try tree-lint"); assoc_set_taking (&mod_ids_seen, rel_get_field (report->mod_index.dirs, x, 1), rel_get_field (report->mod_index.dirs, x, 0)); } lim = rel_n_records (report->mod_index.files); for (x = 0; x < lim; ++x) { const t_uchar * seen; seen = assoc_get_str_taking (mod_ids_seen, rel_get_field (report->mod_index.files, x, 1)); if (seen) panic ("duplicate ids in MOD tree, try tree-lint"); assoc_set_taking (&mod_ids_seen, rel_get_field (report->mod_index.files, x, 1), rel_get_field (report->mod_index.files, x, 0)); } /**************************************************************** * Capture the Permissions of Removed and New Directories */ original_only_dir_metadata_file = file_name_in_vicinity (0, dest, "original-only-dir-metadata"); modified_only_dir_metadata_file = file_name_in_vicinity (0, dest, "modified-only-dir-metadata"); write_dir_metadata (original_only_dir_metadata_file, orig, original_only_dirs, full_meta); write_dir_metadata (modified_only_dir_metadata_file, mod, modified_only_dirs, full_meta); if (report) { report->removed_dirs = rel_copy_table (original_only_dirs); report->added_dirs = rel_copy_table (modified_only_dirs); if (report->callback) { lim = rel_n_records (report->removed_dirs); for (x = 0; x < lim; ++x) { t_uchar * escape_tmp; escape_tmp = pika_save_escape_iso8859_1 (0, 0, escape_classes, rel_peek_str (report->removed_dirs, x, 0)); invoke_report_callback (report, "D/ %s\n", no_dot (escape_tmp)); lim_free (0, escape_tmp); } lim = rel_n_records (report->added_dirs); for (x = 0; x < lim; ++x) { t_uchar * escape_tmp; escape_tmp = pika_save_escape_iso8859_1 (0, 0, escape_classes, rel_peek_str (report->added_dirs, x, 0)); invoke_report_callback (report, "A/ %s\n", no_dot (escape_tmp)); lim_free (0, escape_tmp); } } } /**************************************************************** * Save Copies of new and removed files. */ removed_files_archive_dir = file_name_in_vicinity (0, dest, "removed-files-archive"); new_files_archive_dir = file_name_in_vicinity (0, dest, "new-files-archive"); safe_mkdir (removed_files_archive_dir, 0777); safe_mkdir (new_files_archive_dir, 0777); copy_files_and_symlinks (removed_files_archive_dir, orig, original_only_files, full_meta); copy_files_and_symlinks (new_files_archive_dir, mod, modified_only_files, full_meta); if (report) { report->removed_files = rel_copy_table (original_only_files); report->added_files = rel_copy_table (modified_only_files); if (report->callback) { lim = rel_n_records (report->removed_files); for (x = 0; x < lim; ++x) { t_uchar * escape_tmp; escape_tmp = pika_save_escape_iso8859_1 (0, 0, escape_classes, rel_peek_str (report->removed_files, x, 0)); invoke_report_callback (report, "D %s\n", no_dot (escape_tmp)); lim_free (0, escape_tmp); } lim = rel_n_records (report->added_files); for (x = 0; x < lim; ++x) { t_uchar * escape_tmp; escape_tmp = pika_save_escape_iso8859_1 (0, 0, escape_classes, rel_peek_str (report->added_files, x, 0)); invoke_report_callback (report, "A %s\n", no_dot (escape_tmp)); lim_free (0, escape_tmp); } } } /**************************************************************** * Save patches for common files and directories. */ patches_dir = file_name_in_vicinity (0, dest, "patches"); safe_mkdir (patches_dir, 0777); lim = rel_n_records (files_in_both); for (x = 0; x < lim; ++x) { emit_file_or_symlink_patches (&orig_files_index_names_output, &mod_files_index_names_output, report, patches_dir, orig, rel_peek_str (files_in_both, x, 0), mod, rel_peek_str (files_in_both, x, 1), rel_peek_str (files_in_both, x, 2), inode_sig_shortcuts_of_mod, link_same, escape_classes, full_meta); } lim = rel_n_records (dirs_in_both); for (x = 0; x < lim; ++x) { emit_dir_patches (&orig_dirs_index_names_output, &mod_dirs_index_names_output, report, patches_dir, orig, rel_peek_str (dirs_in_both, x, 0), mod, rel_peek_str (dirs_in_both, x, 1), escape_classes, full_meta); } /**************************************************************** * Write the file indexes. */ orig_files_index_file = file_name_in_vicinity (0, dest, "orig-files-index"); orig_dirs_index_file = file_name_in_vicinity (0, dest, "orig-dirs-index"); mod_files_index_file = file_name_in_vicinity (0, dest, "mod-files-index"); mod_dirs_index_file = file_name_in_vicinity (0, dest, "mod-dirs-index"); { rel_table orig_newname_dir_names = rel_table_nil; rel_table orig_newname_file_names = rel_table_nil; rel_table mod_newname_dir_names = rel_table_nil; rel_table mod_newname_file_names = rel_table_nil; rel_table orig_dirs_index_final = rel_table_nil; rel_table orig_files_index_final = rel_table_nil; rel_table mod_dirs_index_final = rel_table_nil; rel_table mod_files_index_final = rel_table_nil; int orig_dirs_index_fd; int orig_files_index_fd; int mod_dirs_index_fd; int mod_files_index_fd; orig_newname_dir_names = rel_cut (cut_field_0, renamed_dirs); orig_newname_file_names = rel_cut (cut_field_0, renamed_files); mod_newname_dir_names = rel_cut (cut_field_1, renamed_dirs); mod_newname_file_names = rel_cut (cut_field_1, renamed_files); rel_append_x (&orig_newname_dir_names, original_only_dirs); rel_append_x (&orig_newname_file_names, original_only_files); rel_append_x (&mod_newname_dir_names, modified_only_dirs); rel_append_x (&mod_newname_file_names, modified_only_files); compute_parent_dir_closure (&orig_newname_dir_names, &mod_newname_dir_names, orig_newname_file_names, mod_newname_file_names, report->orig_dir_loc_of, report->orig_dir_id_of, report->orig_container_dir_id_of_dir_id, report->orig_container_dir_id_of_file_id, report->mod_dir_loc_of, report->mod_dir_id_of, report->mod_container_dir_id_of_dir_id, report->mod_container_dir_id_of_file_id, report->orig_file_id_of, report->mod_file_id_of); rel_append_x (&orig_dirs_index_names_output, orig_newname_dir_names); rel_append_x (&orig_files_index_names_output, orig_newname_file_names); rel_append_x (&mod_dirs_index_names_output, mod_newname_dir_names); rel_append_x (&mod_files_index_names_output, mod_newname_file_names); rel_sort_table_by_field (0, orig_dirs_index_names_output, 0); rel_sort_table_by_field (0, orig_files_index_names_output, 0); rel_sort_table_by_field (0, mod_dirs_index_names_output, 0); rel_sort_table_by_field (0, mod_files_index_names_output, 0); rel_uniq_by_field (&orig_dirs_index_names_output, 0); rel_uniq_by_field (&orig_files_index_names_output, 0); rel_uniq_by_field (&mod_dirs_index_names_output, 0); rel_uniq_by_field (&mod_files_index_names_output, 0); orig_dirs_index_final = rel_join (-1, rel_join_output (2,0, 2,1, -1), 0, 0, orig_dirs_index_names_output, orig_dirs_full_index_by_name); orig_files_index_final = rel_join (-1, rel_join_output (2,0, 2,1, -1), 0, 0, orig_files_index_names_output, orig_files_full_index_by_name); mod_dirs_index_final = rel_join (-1, rel_join_output (2,0, 2,1, -1), 0, 0, mod_dirs_index_names_output, mod_dirs_full_index_by_name); mod_files_index_final = rel_join (-1, rel_join_output (2,0, 2,1, -1), 0, 0, mod_files_index_names_output, mod_files_full_index_by_name); rel_sort_table_by_field (0, orig_dirs_index_final, 1); rel_sort_table_by_field (0, orig_files_index_final, 1); rel_sort_table_by_field (0, mod_dirs_index_final, 1); rel_sort_table_by_field (0, mod_files_index_final, 1); orig_dirs_index_fd = safe_open (orig_dirs_index_file, O_WRONLY | O_CREAT | O_EXCL, 0666); orig_files_index_fd = safe_open (orig_files_index_file, O_WRONLY | O_CREAT | O_EXCL, 0666); mod_dirs_index_fd = safe_open (mod_dirs_index_file, O_WRONLY | O_CREAT | O_EXCL, 0666); mod_files_index_fd = safe_open (mod_files_index_file, O_WRONLY | O_CREAT | O_EXCL, 0666); rel_print_pika_escape_iso8859_1_table_sp (orig_dirs_index_fd, arch_escape_classes, orig_dirs_index_final); rel_print_pika_escape_iso8859_1_table_sp (orig_files_index_fd, arch_escape_classes, orig_files_index_final); rel_print_pika_escape_iso8859_1_table_sp (mod_dirs_index_fd, arch_escape_classes, mod_dirs_index_final); rel_print_pika_escape_iso8859_1_table_sp (mod_files_index_fd, arch_escape_classes, mod_files_index_final); safe_close (orig_dirs_index_fd); safe_close (orig_files_index_fd); safe_close (mod_dirs_index_fd); safe_close (mod_files_index_fd); rel_free_table (orig_newname_dir_names); rel_free_table (orig_newname_file_names); rel_free_table (mod_newname_dir_names); rel_free_table (mod_newname_file_names); if (report) { lim = rel_n_records (renamed_dirs); for (x = 0; x < lim; ++x) { rel_add_records (&report->renamed_dirs, rel_copy_record (rel_peek_record (renamed_dirs, x)), rel_record_null); if (report->callback) { t_uchar * escape_tmp0; t_uchar * escape_tmp1; escape_tmp0 = pika_save_escape_iso8859_1 (0, 0, escape_classes, rel_peek_str (report->renamed_dirs, x, 0)); escape_tmp1 = pika_save_escape_iso8859_1 (0, 0, escape_classes, rel_peek_str (report->renamed_dirs, x, 1)); invoke_report_callback (report, "/> %s\t%s\n", no_dot (escape_tmp0), no_dot (escape_tmp1)); lim_free (0, escape_tmp1); lim_free (0, escape_tmp0); } } lim = rel_n_records (renamed_files); for (x = 0; x < lim; ++x) { rel_add_records (&report->renamed_files, rel_copy_record (rel_peek_record (renamed_files, x)), rel_record_null); if (report->callback) { t_uchar * escape_tmp0; t_uchar * escape_tmp1; escape_tmp0 = pika_save_escape_iso8859_1 (0, 0, escape_classes, rel_peek_str (report->renamed_files, x, 0)); escape_tmp1 = pika_save_escape_iso8859_1 (0, 0, escape_classes, rel_peek_str (report->renamed_files, x, 1)); invoke_report_callback (report, "=> %s\t%s\n", no_dot (escape_tmp0), no_dot (escape_tmp1)); lim_free (0, escape_tmp1); lim_free (0, escape_tmp0); } } } } safe_fchdir (here_fd); safe_close (here_fd); lim_free (0, orig); lim_free (0, mod); lim_free (0, orig_root); lim_free (0, mod_root); lim_free (0, dest); rel_free_table (limits); free_assoc_table (loc_transl); rel_free_table (orig_full_index); rel_free_table (mod_full_index); rel_free_table (mod_full_index_by_name); rel_free_table (orig_full_index_by_name); rel_free_table (orig_dirs_full_index_by_name); rel_free_table (mod_dirs_full_index_by_name); rel_free_table (orig_dir_ids); rel_free_table (mod_dir_ids); rel_free_table (original_only_dir_ids); rel_free_table (modified_only_dir_ids); rel_free_table (dir_ids_in_both); rel_free_table (original_only_dirs); rel_free_table (modified_only_dirs); rel_free_table (renamed_dirs); rel_free_table (orig_files_full_index_by_name); rel_free_table (mod_files_full_index_by_name); rel_free_table (orig_file_ids); rel_free_table (mod_file_ids); rel_free_table (original_only_file_ids); rel_free_table (modified_only_file_ids); rel_free_table (original_only_files); rel_free_table (modified_only_files); rel_free_table (file_ids_in_both); rel_free_table (renamed_files); rel_free_table (files_in_both); rel_free_table (dirs_in_both); free_assoc_table (orig_ids_seen); free_assoc_table (mod_ids_seen); lim_free (0, original_only_dir_metadata_file); lim_free (0, modified_only_dir_metadata_file); lim_free (0, removed_files_archive_dir); lim_free (0, new_files_archive_dir); lim_free (0, patches_dir); lim_free (0, orig_files_index_file); lim_free (0, orig_dirs_index_file); lim_free (0, mod_files_index_file); lim_free (0, mod_dirs_index_file); rel_free_table (orig_files_index_names_output); rel_free_table (orig_dirs_index_names_output); rel_free_table (mod_files_index_names_output); rel_free_table (mod_dirs_index_names_output); } void arch_make_empty_changeset (struct arch_make_changeset_report * make_report, struct arch_changeset_report * report, const t_uchar * changeset_path) { t_uchar * new_files_archive = 0; t_uchar * removed_files_archive = 0; t_uchar * patches = 0; t_uchar * original_only_dir_metadata = 0; t_uchar * modified_only_dir_metadata = 0; t_uchar * orig_files_index = 0; t_uchar * orig_dirs_index = 0; t_uchar * mod_files_index = 0; t_uchar * mod_dirs_index = 0; int fd; new_files_archive = file_name_in_vicinity (0, changeset_path, "new-files-archive"); removed_files_archive = file_name_in_vicinity (0, changeset_path, "removed-files-archive"); patches = file_name_in_vicinity (0, changeset_path, "patches"); original_only_dir_metadata = file_name_in_vicinity (0, changeset_path, "original-only-dir-metadata"); modified_only_dir_metadata = file_name_in_vicinity (0, changeset_path, "modified-only-dir-metadata"); orig_files_index = file_name_in_vicinity (0, changeset_path, "orig-files-index"); orig_dirs_index = file_name_in_vicinity (0, changeset_path, "orig-dirs-index"); mod_files_index = file_name_in_vicinity (0, changeset_path, "mod-files-index"); mod_dirs_index = file_name_in_vicinity (0, changeset_path, "mod-dirs-index"); safe_mkdir (changeset_path, 0777); safe_mkdir (patches, 0777); safe_mkdir (new_files_archive, 0777); safe_mkdir (removed_files_archive, 0777); fd = safe_open (original_only_dir_metadata, O_WRONLY | O_CREAT | O_EXCL, 0666); safe_close (fd); fd = safe_open (modified_only_dir_metadata, O_WRONLY | O_CREAT | O_EXCL, 0666); safe_close (fd); fd = safe_open (orig_files_index, O_WRONLY | O_CREAT | O_EXCL, 0666); safe_close (fd); fd = safe_open (orig_dirs_index, O_WRONLY | O_CREAT | O_EXCL, 0666); safe_close (fd); fd = safe_open (mod_files_index, O_WRONLY | O_CREAT | O_EXCL, 0666); safe_close (fd); fd = safe_open (mod_dirs_index, O_WRONLY | O_CREAT | O_EXCL, 0666); safe_close (fd); assoc_set_taking (&make_report->orig_dir_id_of, rel_make_field_str ("."), rel_make_field_str ("?_.")); assoc_set_taking (&make_report->mod_dir_id_of, rel_make_field_str ("."), rel_make_field_str ("?_.")); assoc_set_taking (&make_report->orig_dir_loc_of, rel_make_field_str ("?_."), rel_make_field_str (".")); assoc_set_taking (&make_report->mod_dir_loc_of, rel_make_field_str ("?_."), rel_make_field_str (".")); lim_free (0, new_files_archive); lim_free (0, removed_files_archive); lim_free (0, patches); lim_free (0, original_only_dir_metadata); lim_free (0, modified_only_dir_metadata); lim_free (0, orig_files_index); lim_free (0, orig_dirs_index); lim_free (0, mod_files_index); lim_free (0, mod_dirs_index); } void arch_changeset_rewrite_indexes (const t_uchar * changeset_path, struct arch_changeset_report * report) { int ign; t_uchar * orig_dirs_index_path = 0; t_uchar * orig_files_index_path = 0; t_uchar * mod_dirs_index_path = 0; t_uchar * mod_files_index_path = 0; int orig_dirs_index_fd = -1; int orig_files_index_fd = -1; int mod_dirs_index_fd = -1; int mod_files_index_fd = -1; orig_dirs_index_path = file_name_in_vicinity (0, changeset_path, "orig-dirs-index"); orig_files_index_path = file_name_in_vicinity (0, changeset_path, "orig-files-index"); mod_dirs_index_path = file_name_in_vicinity (0, changeset_path, "mod-dirs-index"); mod_files_index_path = file_name_in_vicinity (0, changeset_path, "mod-files-index"); vu_unlink (&ign, orig_dirs_index_path); orig_dirs_index_fd = safe_open (orig_dirs_index_path, O_WRONLY | O_CREAT | O_EXCL, 0444); vu_unlink (&ign, orig_files_index_path); orig_files_index_fd = safe_open (orig_files_index_path, O_WRONLY | O_CREAT | O_EXCL, 0444); vu_unlink (&ign, mod_dirs_index_path); mod_dirs_index_fd = safe_open (mod_dirs_index_path, O_WRONLY | O_CREAT | O_EXCL, 0444); vu_unlink (&ign, mod_files_index_path); mod_files_index_fd = safe_open (mod_files_index_path, O_WRONLY | O_CREAT | O_EXCL, 0444); rel_sort_table_by_field (0, report->orig_dirs_index, 1); rel_sort_table_by_field (0, report->orig_files_index, 1); rel_sort_table_by_field (0, report->mod_dirs_index, 1); rel_sort_table_by_field (0, report->mod_files_index, 1); rel_print_pika_escape_iso8859_1_table_sp (orig_dirs_index_fd, arch_escape_classes, report->orig_dirs_index); rel_print_pika_escape_iso8859_1_table_sp (orig_files_index_fd, arch_escape_classes, report->orig_files_index); rel_print_pika_escape_iso8859_1_table_sp (mod_dirs_index_fd, arch_escape_classes, report->mod_dirs_index); rel_print_pika_escape_iso8859_1_table_sp (mod_files_index_fd, arch_escape_classes, report->mod_files_index); safe_close (orig_dirs_index_fd); safe_close (orig_files_index_fd); safe_close (mod_dirs_index_fd); safe_close (mod_files_index_fd); lim_free (0, orig_dirs_index_path); lim_free (0, orig_files_index_path); lim_free (0, mod_dirs_index_path); lim_free (0, mod_files_index_path); } int arch_changeset_add_file (t_uchar ** path_ret, struct arch_changeset_report * report, struct arch_make_changeset_report * make_report, const t_uchar * changeset_path, const t_uchar * mod_loc, const t_uchar * id) { int ign; t_uchar * new_file_archive_path = 0; t_uchar * new_file_path = 0; t_uchar * new_file_dir_path = 0; t_uchar * loc_dir = 0; rel_field loc_dir_id_field; int dest_fd = -1; new_file_archive_path = file_name_in_vicinity (0, changeset_path, "new-files-archive"); new_file_path = file_name_in_vicinity (0, new_file_archive_path, mod_loc); if (path_ret) *path_ret = str_save (0, new_file_path); new_file_dir_path = file_name_directory_file (0, new_file_path); ensure_directory_exists (new_file_dir_path); vu_unlink (&ign, new_file_path); dest_fd = safe_open (new_file_path, O_WRONLY | O_CREAT | O_EXCL, 0666); /* update the changeset report. */ rel_add_records (&report->mod_files_index, rel_make_record_2_taking (rel_make_field_str (mod_loc), rel_make_field_str (id)), rel_record_null); rel_sort_table_by_field (0, report->mod_files_index, 0); rel_uniq_by_field (&report->mod_files_index, 0); rel_add_records (&report->added_files, rel_make_record_3_taking (rel_make_field_str (mod_loc), rel_make_field_str (id), rel_make_field_str (new_file_path)), rel_record_null); rel_sort_table_by_field (0, report->added_files, 0); rel_uniq_by_field (&report->added_files, 0); /* update the make-changeset report. */ assoc_set_taking (&make_report->mod_file_id_of, rel_make_field_str (mod_loc), rel_make_field_str (id)); assoc_set_taking (&make_report->mod_file_loc_of, rel_make_field_str (id), rel_make_field_str (mod_loc)); rel_add_records (&make_report->mod_index.files, rel_make_record_2_taking (rel_make_field_str (mod_loc), rel_make_field_str (id)), rel_record_null); rel_sort_table_by_field (0, make_report->mod_index.files, 1); rel_uniq_by_field (&make_report->mod_index.files, 1); rel_add_records (&make_report->added_files, rel_singleton_record_taking (rel_make_field_str (mod_loc)), rel_record_null); rel_sort_table_by_field (0, make_report->added_files, 0); rel_uniq_by_field (&make_report->added_files, 0); loc_dir = file_name_directory_file (0, mod_loc); loc_dir_id_field = assoc_get_taking (make_report->mod_dir_id_of, rel_make_field_str (loc_dir)); if (rel_field_str (loc_dir_id_field)) { assoc_set_taking (&make_report->mod_container_dir_id_of_file_id, rel_make_field_str (id), rel_field_ref (loc_dir_id_field)); } rel_field_unref (loc_dir_id_field); lim_free (0, new_file_archive_path); lim_free (0, new_file_path); lim_free (0, new_file_dir_path); lim_free (0, loc_dir); return dest_fd; } int arch_changeset_add_diffs (struct arch_changeset_report * report, struct arch_make_changeset_report * make_report, const t_uchar * changeset_path, const t_uchar * orig_loc, const t_uchar * mod_loc, const t_uchar * id) { int ign; t_uchar * patches_path = 0; t_uchar * patch_path = 0; t_uchar * patch_dir_path = 0; t_uchar * orig_loc_dir = 0; rel_field orig_loc_dir_id_field; t_uchar * mod_loc_dir = 0; rel_field mod_loc_dir_id_field; int dest_fd = -1; patches_path = file_name_in_vicinity (0, changeset_path, "patches"); patch_path = file_name_in_vicinity (0, patches_path, mod_loc); patch_path = str_realloc_cat (0, patch_path, ".patch"); patch_dir_path = file_name_directory_file (0, patch_path); ensure_directory_exists (patch_dir_path); vu_unlink (&ign, patch_path); dest_fd = safe_open (patch_path, O_WRONLY | O_CREAT | O_EXCL, 0666); /* update the changeset report. */ if (report) { rel_add_records (&report->mod_files_index, rel_make_record_2_taking (rel_make_field_str (mod_loc), rel_make_field_str (id)), rel_record_null); rel_sort_table_by_field (0, report->mod_files_index, 0); rel_uniq_by_field (&report->mod_files_index, 0); rel_add_records (&report->orig_files_index, rel_make_record_2_taking (rel_make_field_str (orig_loc), rel_make_field_str (id)), rel_record_null); rel_sort_table_by_field (0, report->orig_files_index, 0); rel_uniq_by_field (&report->orig_files_index, 0); rel_add_records (&report->patched_regular_files, rel_make_record_3_taking (rel_make_field_str (mod_loc), rel_make_field_str (id), rel_make_field_str (patch_path)), rel_record_null); rel_sort_table_by_field (0, report->patched_regular_files, 0); rel_uniq_by_field (&report->patched_regular_files, 0); } /* update the make-changeset report. */ assoc_set_taking (&make_report->mod_file_id_of, rel_make_field_str (mod_loc), rel_make_field_str (id)); assoc_set_taking (&make_report->mod_file_loc_of, rel_make_field_str (id), rel_make_field_str (mod_loc)); assoc_set_taking (&make_report->orig_file_id_of, rel_make_field_str (orig_loc), rel_make_field_str (id)); assoc_set_taking (&make_report->orig_file_loc_of, rel_make_field_str (id), rel_make_field_str (orig_loc)); rel_add_records (&make_report->mod_index.files, rel_make_record_2_taking (rel_make_field_str (mod_loc), rel_make_field_str (id)), rel_record_null); rel_sort_table_by_field (0, make_report->mod_index.files, 1); rel_uniq_by_field (&make_report->mod_index.files, 1); rel_add_records (&make_report->orig_index.files, rel_make_record_2_taking (rel_make_field_str (orig_loc), rel_make_field_str (id)), rel_record_null); rel_sort_table_by_field (0, make_report->orig_index.files, 1); rel_uniq_by_field (&make_report->orig_index.files, 1); rel_add_records (&make_report->modified_files, rel_make_record_2_taking (rel_make_field_str (orig_loc), rel_make_field_str (mod_loc)), rel_record_null); rel_sort_table_by_field (0, make_report->modified_files, 0); rel_uniq_by_field (&make_report->modified_files, 0); mod_loc_dir = file_name_directory_file (0, mod_loc); mod_loc_dir_id_field = assoc_get_taking (make_report->mod_dir_id_of, rel_make_field_str (mod_loc_dir)); if (rel_field_str (mod_loc_dir_id_field)) { assoc_set_taking (&make_report->mod_container_dir_id_of_file_id, rel_make_field_str (id), rel_field_ref (mod_loc_dir_id_field)); } orig_loc_dir = file_name_directory_file (0, orig_loc); orig_loc_dir_id_field = assoc_get_taking (make_report->orig_dir_id_of, rel_make_field_str (orig_loc_dir)); if (rel_field_str (orig_loc_dir_id_field)) { assoc_set_taking (&make_report->orig_container_dir_id_of_file_id, rel_make_field_str (id), rel_field_ref (orig_loc_dir_id_field)); } rel_field_unref (mod_loc_dir_id_field); rel_field_unref (orig_loc_dir_id_field); lim_free (0, patches_path); lim_free (0, patch_path); lim_free (0, patch_dir_path); lim_free (0, orig_loc_dir); lim_free (0, mod_loc_dir); return dest_fd; } void arch_make_changeset_compute_container_map (assoc_table * out, assoc_table dir_id_of, rel_table index) { int lim; int x; lim = rel_n_records (index); for (x = 0; x < lim; ++x) { const t_uchar * item; rel_field id_field; t_uchar * dir_as_file = 0; rel_field container_id_field; item = rel_peek_str (index, x, 0); id_field = rel_get_field (index, x, 1); dir_as_file = file_name_directory_file (0, item); container_id_field = assoc_get_taking (dir_id_of, rel_make_field_str (dir_as_file)); invariant (!!rel_field_str (container_id_field)); assoc_set_taking (out, rel_field_ref (id_field), rel_field_ref (container_id_field)); rel_field_unref (id_field); rel_field_unref (container_id_field); lim_free (0, dir_as_file); } } static void compute_renames (rel_table * out, assoc_table loc_of_orig_X_id, assoc_table mod_dir_id_of, assoc_table orig_container_dir_id_of_X_id, rel_table X_index) { int lim; int x; lim = rel_n_records (X_index); for (x = 0; x < lim; ++x) { t_uchar * container = 0; t_uchar * tail = 0; rel_field id_field; rel_field orig_field; t_uchar * orig_tail = 0; rel_field mod_container_id_field; rel_field orig_container_id_field; container = file_name_directory_file (0, rel_peek_str (X_index, x, 0)); tail = file_name_tail (0, rel_peek_str (X_index, x, 0)); id_field = rel_get_field (X_index, x, 1); orig_field = assoc_get_taking (loc_of_orig_X_id, rel_field_ref (id_field)); orig_tail = (rel_field_str (orig_field) ? file_name_tail (0, rel_field_str (orig_field)) : 0); mod_container_id_field = assoc_get_taking (mod_dir_id_of, rel_make_field_str (container)); orig_container_id_field = assoc_get_taking (orig_container_dir_id_of_X_id, rel_field_ref (id_field)); if (rel_field_str (orig_field) && (str_cmp (orig_tail, tail) || (!rel_field_str (mod_container_id_field) && str_cmp (rel_peek_str (X_index, x, 0), rel_field_str (orig_field))) || str_cmp (rel_field_str (mod_container_id_field), rel_field_str (orig_container_id_field)))) { rel_add_records (out, rel_make_record_2_taking (rel_field_ref (orig_field), rel_get_field (X_index, x, 0)), rel_record_null); } rel_field_unref (id_field); rel_field_unref (orig_field); rel_field_unref (mod_container_id_field); rel_field_unref (orig_container_id_field); lim_free (0, container); lim_free (0, tail); lim_free (0, orig_tail); } rel_sort_table_by_field (0, *out, 1); } static void write_dir_metadata (const t_uchar * file, const t_uchar * tree_root, rel_table dirs, int full_meta) { int out_fd; int lim; int x; out_fd = safe_open (file, O_WRONLY | O_CREAT | O_EXCL, 0666); lim = rel_n_records (dirs); for (x = 0; x < lim; ++x) { t_uchar * path; t_uchar * escape_tmp; struct stat stat_buf; path = file_name_in_vicinity (0, tree_root, rel_peek_str (dirs, x, 0)); safe_stat (path, &stat_buf); escape_tmp = pika_save_escape_iso8859_1 (0, 0, arch_escape_classes, rel_peek_str (dirs, x, 0)); if (!full_meta) { safe_printfmt (out_fd, "--permissions %lo\t%s\n", (unsigned long)(stat_buf.st_mode & 0777), escape_tmp); } else { safe_printfmt (out_fd, "--permissions %lo,%ld,%ld\t%s\n", (unsigned long)(stat_buf.st_mode & 07777), (long)stat_buf.st_uid, (long)stat_buf.st_gid, escape_tmp); } lim_free (0, escape_tmp); lim_free (0, path); } safe_close (out_fd); } static void copy_files_and_symlinks (const t_uchar * dest, const t_uchar * tree_root, rel_table loc_list, int full_meta) { int lim; int x; lim = rel_n_records (loc_list); for (x = 0; x < lim; ++x) { const t_uchar * loc; t_uchar * source_name = 0; t_uchar * dest_name = 0; t_uchar * dest_dir = 0; loc = rel_peek_str (loc_list, x, 0); source_name = file_name_in_vicinity (0, tree_root, loc); dest_name = file_name_in_vicinity (0, dest, loc); dest_dir = file_name_directory_file (0, dest_name); ensure_directory_exists (dest_dir); copy_file_or_symlink (source_name, dest_name); copy_permissions (source_name, dest_name, full_meta); lim_free (0, source_name); lim_free (0, dest_name); lim_free (0, dest_dir); } } static void emit_dir_patches (rel_table * orig_index_names_output, rel_table * mod_index_names_output, struct arch_make_changeset_report * report, const t_uchar * patches, const t_uchar * orig, const t_uchar * orig_loc, const t_uchar * mod, const t_uchar * mod_loc, int escape_classes, int full_meta) { t_uchar * orig_path; t_uchar * mod_path; struct stat orig_stat; struct stat mod_stat; t_ulong orig_mode; t_ulong mod_mode; long orig_uid; long mod_uid; long orig_gid; long mod_gid; orig_path = file_name_in_vicinity (0, orig, orig_loc); mod_path = file_name_in_vicinity (0, mod, mod_loc); safe_stat (orig_path, &orig_stat); safe_stat (mod_path, &mod_stat); if (full_meta) { orig_mode = (t_ulong)(orig_stat.st_mode & 07777); mod_mode = (t_ulong)(mod_stat.st_mode & 07777); } else { orig_mode = (t_ulong)(orig_stat.st_mode & 0777); mod_mode = (t_ulong)(mod_stat.st_mode & 0777); } orig_uid = orig_stat.st_uid; mod_uid = mod_stat.st_uid; orig_gid = orig_stat.st_gid; mod_gid = mod_stat.st_gid; if ((orig_mode != mod_mode) || (full_meta && ((orig_uid != mod_uid) || (orig_gid != mod_gid)))) { t_uchar * patches_dir; t_uchar * orig_patch; t_uchar * mod_patch; int orig_patch_fd; int mod_patch_fd; rel_add_records (orig_index_names_output, rel_singleton_record_taking (rel_make_field_str (orig_loc)), rel_record_null); rel_add_records (mod_index_names_output, rel_singleton_record_taking (rel_make_field_str (mod_loc)), rel_record_null); if (report) { rel_add_records (&report->perms_changed_dirs, rel_make_record_2_taking (rel_make_field_str (orig_loc), rel_make_field_str (mod_loc)), rel_record_null); if (report->callback) { t_uchar * escape_tmp; escape_tmp = pika_save_escape_iso8859_1 (0, 0, escape_classes, mod_loc); invoke_report_callback (report, "-/ %s\n", no_dot (escape_tmp)); lim_free (0, escape_tmp); } } patches_dir = file_name_in_vicinity (0, patches, mod_loc); orig_patch = file_name_in_vicinity (0, patches_dir, "=dir-meta-orig"); mod_patch = file_name_in_vicinity (0, patches_dir, "=dir-meta-mod"); ensure_directory_exists (patches_dir); orig_patch_fd = safe_open (orig_patch, O_WRONLY | O_CREAT | O_EXCL, 0666); mod_patch_fd = safe_open (mod_patch, O_WRONLY | O_CREAT | O_EXCL, 0666); if (!full_meta) { safe_printfmt (orig_patch_fd, "--permissions %lo\n", orig_mode); safe_printfmt (mod_patch_fd, "--permissions %lo\n", mod_mode); } else { safe_printfmt (orig_patch_fd, "--permissions %lo,%ld,%ld\n", orig_mode, orig_uid, orig_gid); safe_printfmt (mod_patch_fd, "--permissions %lo,%ld,%ld\n", mod_mode, mod_uid, mod_gid); } safe_close (orig_patch_fd); safe_close (mod_patch_fd); lim_free (0, patches_dir); lim_free (0, orig_patch); lim_free (0, mod_patch); } lim_free (0, orig_path); lim_free (0, mod_path); } static void emit_file_or_symlink_patches (rel_table * orig_index_names_output, rel_table * mod_index_names_output, struct arch_make_changeset_report * report, const t_uchar * patches, const t_uchar * orig, const t_uchar * orig_loc, const t_uchar * mod, const t_uchar * mod_loc, const t_uchar * id, assoc_table inode_sig_shortcuts_of_mod, int link_same, int escape_classes, int full_meta) { t_uchar * orig_path = 0; t_uchar * mod_path = 0; struct stat orig_stat; struct stat mod_stat; int orig_is_symlink; int mod_is_symlink; t_uchar * patch_base_file = 0; t_uchar * patch_file_dir = 0; orig_path = file_name_in_vicinity (0, orig, orig_loc); mod_path = file_name_in_vicinity (0, mod, mod_loc); safe_lstat (orig_path, &orig_stat); safe_lstat (mod_path, &mod_stat); orig_is_symlink = S_ISLNK (orig_stat.st_mode); mod_is_symlink = S_ISLNK (mod_stat.st_mode); if (orig_is_symlink && mod_is_symlink) { t_uchar * orig_target; t_uchar * mod_target; orig_target = link_target (orig_path); mod_target = link_target (mod_path); if (str_cmp (orig_target, mod_target)) { t_uchar * patch_basename_path; t_uchar * orig_patch; t_uchar * mod_patch; t_uchar * patch_dir; int orig_out_fd; int mod_out_fd; rel_add_records (orig_index_names_output, rel_singleton_record_taking (rel_make_field_str (orig_loc)), rel_record_null); rel_add_records (mod_index_names_output, rel_singleton_record_taking (rel_make_field_str (mod_loc)), rel_record_null); if (report) { rel_add_records (&report->modified_files, rel_make_record_2_taking (rel_make_field_str (orig_loc), rel_make_field_str (mod_loc)), rel_record_null); if (report->callback) { t_uchar * escape_tmp; escape_tmp = pika_save_escape_iso8859_1 (0, 0, escape_classes, mod_loc); invoke_report_callback (report, "-> %s\n", no_dot (escape_tmp)); lim_free (0, escape_tmp); } } patch_basename_path = file_name_in_vicinity (0, patches, mod_loc); orig_patch = str_alloc_cat (0, patch_basename_path, ".link-orig"); mod_patch = str_alloc_cat (0, patch_basename_path, ".link-mod"); patch_dir = file_name_directory_file (0, patch_basename_path); ensure_directory_exists (patch_dir); orig_out_fd = safe_open (orig_patch, O_WRONLY | O_CREAT | O_EXCL, 0666); mod_out_fd = safe_open (mod_patch, O_WRONLY | O_CREAT | O_EXCL, 0666); safe_printfmt (orig_out_fd, "%s\n", orig_target); safe_printfmt (mod_out_fd, "%s\n", mod_target); lim_free (0, patch_basename_path); lim_free (0, orig_patch); lim_free (0, mod_patch); lim_free (0, patch_dir); } lim_free (0, orig_target); lim_free (0, mod_target); } else if (orig_is_symlink) { t_uchar * orig_target; t_uchar * patch_basename_path; t_uchar * orig_patch; t_uchar * mod_patch; t_uchar * patch_dir; int orig_out_fd; rel_add_records (orig_index_names_output, rel_singleton_record_taking (rel_make_field_str (orig_loc)), rel_record_null); rel_add_records (mod_index_names_output, rel_singleton_record_taking (rel_make_field_str (mod_loc)), rel_record_null); if (report) { rel_add_records (&report->modified_files, rel_make_record_2_taking (rel_make_field_str (orig_loc), rel_make_field_str (mod_loc)), rel_record_null); if (report->callback) { t_uchar * escape_tmp; escape_tmp = pika_save_escape_iso8859_1 (0, 0, escape_classes, mod_loc); invoke_report_callback (report, "lf %s\n", no_dot (escape_tmp)); lim_free (0, escape_tmp); } } orig_target = link_target (orig_path); patch_basename_path = file_name_in_vicinity (0, patches, mod_loc); orig_patch = str_alloc_cat (0, patch_basename_path, ".link-orig"); mod_patch = str_alloc_cat (0, patch_basename_path, ".modified"); patch_dir = file_name_directory_file (0, patch_basename_path); ensure_directory_exists (patch_dir); orig_out_fd = safe_open (orig_patch, O_WRONLY | O_CREAT | O_EXCL, 0666); safe_printfmt (orig_out_fd, "%s\n", orig_target); copy_file (mod_path, mod_patch); copy_permissions (mod_path, mod_patch, full_meta); lim_free (0, orig_target); lim_free (0, patch_basename_path); lim_free (0, orig_patch); lim_free (0, mod_patch); lim_free (0, patch_dir); } else if (mod_is_symlink) { t_uchar * mod_target; t_uchar * patch_basename_path; t_uchar * orig_patch; t_uchar * mod_patch; t_uchar * patch_dir; int mod_out_fd; rel_add_records (orig_index_names_output, rel_singleton_record_taking (rel_make_field_str (orig_loc)), rel_record_null); rel_add_records (mod_index_names_output, rel_singleton_record_taking (rel_make_field_str (mod_loc)), rel_record_null); if (report) { rel_add_records (&report->modified_files, rel_make_record_2_taking (rel_make_field_str (orig_loc), rel_make_field_str (mod_loc)), rel_record_null); if (report->callback) { t_uchar * escape_tmp; escape_tmp = pika_save_escape_iso8859_1 (0, 0, escape_classes, mod_loc); invoke_report_callback (report, "fl %s\n", no_dot (escape_tmp)); lim_free (0, escape_tmp); } } mod_target = link_target (mod_path); patch_basename_path = file_name_in_vicinity (0, patches, mod_loc); orig_patch = str_alloc_cat (0, patch_basename_path, ".original"); mod_patch = str_alloc_cat (0, patch_basename_path, ".link-mod"); patch_dir = file_name_directory_file (0, patch_basename_path); ensure_directory_exists (patch_dir); mod_out_fd = safe_open (mod_patch, O_WRONLY | O_CREAT | O_EXCL, 0666); safe_printfmt (mod_out_fd, "%s\n", mod_target); copy_file (orig_path, orig_patch); copy_permissions (orig_path, orig_patch, full_meta); lim_free (0, mod_target); lim_free (0, patch_basename_path); lim_free (0, orig_patch); lim_free (0, mod_patch); lim_free (0, patch_dir); } else { int ign; mode_t orig_mode; mode_t mod_mode; long orig_uid; long mod_uid; long orig_gid; long mod_gid; t_uchar * diff_file; int diff_fd; int diff_stat; int is_changed; is_changed = 0; if (arch_file_stats_differ (&orig_stat, &mod_stat) == 0) goto path_free; patch_base_file = file_name_in_vicinity (0, patches, mod_loc); patch_file_dir = file_name_directory_file (0, patch_base_file); if (full_meta) { orig_mode = orig_stat.st_mode & 07777; mod_mode = mod_stat.st_mode & 07777; } else { orig_mode = orig_stat.st_mode & 0777; mod_mode = mod_stat.st_mode & 0777; } orig_uid = orig_stat.st_uid; mod_uid = mod_stat.st_uid; orig_gid = orig_stat.st_gid; mod_gid = mod_stat.st_gid; if ((orig_mode != mod_mode) || (full_meta && ((orig_uid != mod_uid) || (orig_gid != mod_gid)))) { t_uchar * orig_patch_meta_file; t_uchar * mod_patch_meta_file; int orig_meta_fd; int mod_meta_fd; rel_add_records (orig_index_names_output, rel_singleton_record_taking (rel_make_field_str (orig_loc)), rel_record_null); rel_add_records (mod_index_names_output, rel_singleton_record_taking (rel_make_field_str (mod_loc)), rel_record_null); if (report) { rel_add_records (&report->perms_changed_files, rel_make_record_2_taking (rel_make_field_str (orig_loc), rel_make_field_str (mod_loc)), rel_record_null); if (report->callback) { t_uchar * escape_tmp; escape_tmp = pika_save_escape_iso8859_1 (0, 0, escape_classes, mod_loc); invoke_report_callback (report, "-- %s\n", no_dot (escape_tmp)); lim_free (0, escape_tmp); } } orig_patch_meta_file = str_alloc_cat (0, patch_base_file, ".meta-orig"); mod_patch_meta_file = str_alloc_cat (0, patch_base_file, ".meta-mod"); ensure_directory_exists (patch_file_dir); orig_meta_fd = safe_open (orig_patch_meta_file, O_WRONLY | O_EXCL | O_CREAT, 0666); mod_meta_fd = safe_open (mod_patch_meta_file, O_WRONLY | O_EXCL | O_CREAT, 0666); if (!full_meta) { safe_printfmt (orig_meta_fd, "--permissions %lo\n", (t_ulong)orig_mode); safe_printfmt (mod_meta_fd, "--permissions %lo\n", (t_ulong)mod_mode); } else { safe_printfmt (orig_meta_fd, "--permissions %lo,%ld,%ld\n", (t_ulong)orig_mode, orig_uid, orig_gid); safe_printfmt (mod_meta_fd, "--permissions %lo,%ld,%ld\n", (t_ulong)mod_mode, mod_uid, mod_gid); } safe_close (orig_meta_fd); safe_close (mod_meta_fd); lim_free (0, orig_patch_meta_file); lim_free (0, mod_patch_meta_file); is_changed = 1; } if ((arch_inode_sigs_differ (&mod_stat, id, inode_sig_shortcuts_of_mod) == 0) || (arch_filename_contents_differ (orig_path, mod_path) == 0)) { if (orig_stat.st_dev == mod_stat.st_dev && link_same) link_force (orig_path, mod_path); goto path_free; } ensure_directory_exists (patch_file_dir); diff_file = str_alloc_cat (0, patch_base_file, ".patch"); vu_unlink (&ign, diff_file); diff_fd = safe_open (diff_file, O_RDWR | O_EXCL | O_CREAT, 0666); diff_stat = arch_really_invoke_diff (diff_fd, orig_path, orig_loc, mod_path, mod_loc, NULL); invariant (diff_stat!=0); if (diff_stat == 1) { t_uchar diff_pseudo_magic[sizeof ("binary files ")]; long amt; /* diff might have just said "binary files differ" or something * similar. */ safe_lseek (diff_fd, (off_t)0, SEEK_SET); amt = safe_read (diff_fd, diff_pseudo_magic, sizeof (diff_pseudo_magic) - 1); if (amt > 0) { diff_pseudo_magic[amt] = 0; if (!str_casecmp (diff_pseudo_magic, "binary files ")) diff_stat = 2; } } if (diff_stat == 2) safe_unlink (diff_file); /* diff_stat: 0 == same, 1 == patch in diff_fd, 2 == differing binary files */ switch (diff_stat) { case 1: { rel_add_records (orig_index_names_output, rel_singleton_record_taking (rel_make_field_str (orig_loc)), rel_record_null); rel_add_records (mod_index_names_output, rel_singleton_record_taking (rel_make_field_str (mod_loc)), rel_record_null); if (report) { rel_add_records (&report->modified_files, rel_make_record_2_taking (rel_make_field_str (orig_loc), rel_make_field_str (mod_loc)), rel_record_null); if (report->callback) { t_uchar * escape_tmp; escape_tmp = pika_save_escape_iso8859_1 (0, 0, escape_classes, mod_loc); invoke_report_callback (report, "M %s\n", no_dot (escape_tmp)); lim_free (0, escape_tmp); } } is_changed = 1; lim_free (0, diff_file); break; } case 2: { t_uchar * orig_copy; t_uchar * mod_copy; rel_add_records (orig_index_names_output, rel_singleton_record_taking (rel_make_field_str (orig_loc)), rel_record_null); rel_add_records (mod_index_names_output, rel_singleton_record_taking (rel_make_field_str (mod_loc)), rel_record_null); if (report) { rel_add_records (&report->modified_files, rel_make_record_2_taking (rel_make_field_str (orig_loc), rel_make_field_str (mod_loc)), rel_record_null); if (report->callback) { t_uchar * escape_tmp; escape_tmp = pika_save_escape_iso8859_1 (0, 0, escape_classes, mod_loc); invoke_report_callback (report, "Mb %s\n", no_dot (escape_tmp)); lim_free (0, escape_tmp); } } orig_copy = str_alloc_cat (0, patch_base_file, ".original"); mod_copy = str_alloc_cat (0, patch_base_file, ".modified"); copy_file (orig_path, orig_copy); copy_permissions (orig_path, orig_copy, full_meta); copy_file (mod_path, mod_copy); copy_permissions (mod_path, mod_copy, full_meta); lim_free (0, orig_copy); lim_free (0, mod_copy); is_changed = 1; break; } default: { break; } } #if 0 if (is_changed) { *(int *)ar_push ((void **)&map.changed_files[0], 0, sizeof (int)) = map.common_files[0][x]; *(int *)ar_push ((void **)&map.changed_files[1], 0, sizeof (int)) = map.common_files[1][x]; } #endif safe_close (diff_fd); } path_free: lim_free (0, patch_base_file); lim_free (0, patch_file_dir); lim_free (0, orig_path); lim_free (0, mod_path); } static void compute_parent_dir_closure (rel_table * orig_newname_dirs, rel_table * mod_newname_dirs, rel_table orig_newname_files, rel_table mod_newname_files, assoc_table orig_dir_loc_of, assoc_table orig_dir_id_of, assoc_table orig_container_dir_id_of_dir_id, assoc_table orig_container_dir_id_of_file_id, assoc_table mod_dir_loc_of, assoc_table mod_dir_id_of, assoc_table mod_container_dir_id_of_dir_id, assoc_table mod_container_dir_id_of_file_id, assoc_table orig_file_id_of, assoc_table mod_file_id_of) { assoc_table orig_has_dir_id = 0; assoc_table mod_has_dir_id = 0; rel_table added_orig_container_ids = rel_table_nil; /* just the deepest new id */ rel_table added_mod_container_ids = rel_table_nil; /* just the deepest new id */ int lim; int x; /* Note what dir ids are already in the * final indexes. */ lim = rel_n_records (*orig_newname_dirs); for (x = 0; x < lim; ++x) { rel_field loc_field; rel_field id_field; loc_field = rel_get_field (*orig_newname_dirs, x, 0); id_field = assoc_get_taking (orig_dir_id_of, rel_field_ref (loc_field)); assoc_set_taking (&orig_has_dir_id, rel_field_ref (id_field), rel_field_ref (loc_field)); rel_field_unref (id_field); rel_field_unref (loc_field); } lim = rel_n_records (*mod_newname_dirs); for (x = 0; x < lim; ++x) { rel_field loc_field; rel_field id_field; loc_field = rel_get_field (*mod_newname_dirs, x, 0); id_field = assoc_get_taking (mod_dir_id_of, rel_field_ref (loc_field)); assoc_set_taking (&mod_has_dir_id, rel_field_ref (id_field), rel_field_ref (loc_field)); rel_field_unref (id_field); rel_field_unref (loc_field); } /* For each newname dir in one tree, * find the deepest container in that * tree that is present in each tree * but not in that tree's index, * and slate it for addition to the index. */ schedule_missing_containers (&added_orig_container_ids, &orig_has_dir_id, &added_mod_container_ids, &mod_has_dir_id, *orig_newname_dirs, orig_dir_id_of, orig_container_dir_id_of_dir_id, orig_container_dir_id_of_dir_id, orig_dir_loc_of, mod_dir_loc_of); schedule_missing_containers (&added_orig_container_ids, &orig_has_dir_id, &added_mod_container_ids, &mod_has_dir_id, orig_newname_files, orig_dir_id_of, orig_container_dir_id_of_file_id, orig_container_dir_id_of_dir_id, orig_dir_loc_of, mod_dir_loc_of); schedule_missing_containers (&added_orig_container_ids, &orig_has_dir_id, &added_mod_container_ids, &mod_has_dir_id, *mod_newname_dirs, mod_dir_id_of, mod_container_dir_id_of_dir_id, mod_container_dir_id_of_dir_id, orig_dir_loc_of, mod_dir_loc_of); schedule_missing_containers (&added_orig_container_ids, &orig_has_dir_id, &added_mod_container_ids, &mod_has_dir_id, mod_newname_files, mod_dir_id_of, mod_container_dir_id_of_file_id, mod_container_dir_id_of_dir_id, orig_dir_loc_of, mod_dir_loc_of); /* Add the closure of container paths of added containers * to the output lists. */ lim = rel_n_records (added_orig_container_ids); for (x = 0; x < lim; ++x) { container_closure (orig_newname_dirs, &orig_has_dir_id, rel_peek_str (added_orig_container_ids, x, 0), orig_dir_loc_of, orig_container_dir_id_of_dir_id); } lim = rel_n_records (added_mod_container_ids); for (x = 0; x < lim; ++x) { container_closure (mod_newname_dirs, &mod_has_dir_id, rel_peek_str (added_mod_container_ids, x, 0), mod_dir_loc_of, mod_container_dir_id_of_dir_id); } free_assoc_table (orig_has_dir_id); free_assoc_table (mod_has_dir_id); rel_free_table (added_orig_container_ids); rel_free_table (added_mod_container_ids); } static void schedule_missing_containers (rel_table * added_orig_container_ids, assoc_table * orig_has_dir_id, rel_table * added_mod_container_ids, assoc_table * mod_has_dir_id, rel_table locs_in, assoc_table id_of_dir_loc, assoc_table first_container_id_of_id, assoc_table container_id_of_dir_id, assoc_table orig_dir_loc_of, assoc_table mod_dir_loc_of) { int lim; int x; lim = rel_n_records (locs_in); for (x = 0; x < lim; ++x) { t_uchar * loc = 0; rel_field id_field; rel_field container_id_field; int added_orig; int added_mod; loc = str_save (0, rel_peek_str (locs_in, x, 0)); id_field = assoc_get_taking (id_of_dir_loc, rel_make_field_str (loc)); container_id_field = assoc_get_taking (first_container_id_of_id, rel_field_ref (id_field)); added_orig = 0; added_mod = 0; while ((!added_orig || !added_mod) && rel_field_str (container_id_field) && str_cmp (rel_field_str (id_field), "?_.")) { t_uchar * t = 0; if (!added_orig && !assoc_get_str_taking (*orig_has_dir_id, rel_field_ref (container_id_field)) && assoc_get_str_taking (orig_dir_loc_of, rel_field_ref (container_id_field))) { rel_add_records (added_orig_container_ids, rel_singleton_record_taking (rel_field_ref (container_id_field)), rel_record_null); added_orig = 1; } if (!added_mod && !assoc_get_str_taking (*mod_has_dir_id, rel_field_ref (container_id_field)) && assoc_get_str_taking (mod_dir_loc_of, rel_field_ref (container_id_field))) { rel_add_records (added_mod_container_ids, rel_singleton_record_taking (rel_field_ref (container_id_field)), rel_record_null); added_mod = 1; } t = loc; loc = file_name_directory_file (0, loc); rel_field_unref (id_field); id_field = assoc_get_taking (id_of_dir_loc, rel_make_field_str (loc)); container_id_field = assoc_get_taking (container_id_of_dir_id, rel_field_ref (id_field)); lim_free (0, t); } rel_field_unref (id_field); rel_field_unref (container_id_field); lim_free (0, loc); } } static void container_closure (rel_table * locs_out, assoc_table * has_ids, const t_uchar * deep_id, assoc_table dir_loc_of, assoc_table container_dir_id_of_dir_id) { while (deep_id && str_cmp (deep_id, "?_.")) { if (!assoc_get_str_taking (*has_ids, rel_make_field_str (deep_id))) { rel_field deep_loc_field; deep_loc_field = assoc_get_taking (dir_loc_of, rel_make_field_str (deep_id)); rel_add_records (locs_out, rel_singleton_record_taking (rel_field_ref (deep_loc_field)), rel_record_null); assoc_set_taking (has_ids, rel_make_field_str (deep_id), rel_field_ref (deep_loc_field)); rel_field_unref (deep_loc_field); } deep_id = assoc_get_str_taking (container_dir_id_of_dir_id, rel_make_field_str (deep_id)); } } static void link_force (const t_uchar *old_path, const t_uchar *new_path) { t_uchar *dir; t_uchar *tmp_nam; dir = file_name_directory (0, new_path); tmp_nam = file_name_in_vicinity (0, dir, ",,tmp"); safe_link (old_path, tmp_nam); safe_rename (tmp_nam, new_path); lim_free (0, dir); lim_free (0, tmp_nam); } /* tag: Tom Lord Wed May 14 18:53:05 2003 (make-changeset.c) */ tla-1.3.5+dfsg/src/tla/libarch/changelogs.h0000644000175000017500000000213510457622000017170 0ustar useruser/* changelogs.h: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__CHANGELOGS_H #define INCLUDE__LIBARCH__CHANGELOGS_H /* automatically generated __STDC__ prototypes */ extern int arch_id_indicates_changelog (const t_uchar * id); extern void arch_parse_changelog_id (t_uchar ** archive, t_uchar ** version, const t_uchar * id); extern void arch_generate_changelog (int out_fd, const t_uchar * tree_root, int no_files, int untagged, const t_uchar * new_entry_patch_lvl, const t_uchar * new_entry_file, const t_uchar * archive, const t_uchar * version); #endif /* INCLUDE__LIBARCH__CHANGELOGS_H */ /* tag: Tom Lord Sat Jan 5 15:26:10 2002 (changelogs.h) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-library-categories.c0000644000175000017500000000722510457622000021406 0ustar useruser/* cmd-library-categories.c * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "config-options.h" #include "hackerlab/cmd/main.h" #include "tla/libarch/namespace.h" #include "tla/libarch/project-tree.h" #include "tla/libarch/my.h" #include "tla/libarch/libraries.h" #include "tla/libarch/cmd-library-categories.h" static t_uchar * usage = "[options] [archive]"; static t_uchar * version_string = (cfg__std__package " from regexps.com\n" "\n" "Copyright 2003 Tom Lord\n" "\n" "This is free software; see the source for copying conditions.\n" "There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\n" "PARTICULAR PURPOSE.\n" "\n" "Report bugs to " cfg__tla_bug_mail ".\n" "\n" cfg__std__release_id_string "\n"); #define OPTS(OP) \ OP (opt_help_msg, "h", "help", 0, \ "Display a help message and exit.") \ OP (opt_long_help, "H", 0, 0, \ "Display a verbose help message and exit.") \ OP (opt_version, "V", "version", 0, \ "Display a release identifier string\n" \ "and exit.") \ OP (opt_archive, "A", "archive", 1, \ "Override `my-default-archive'") t_uchar arch_cmd_library_categories_help[] = ("list the categories in your revision library\n" "List all categories within a given archive in the revision library.\n"); enum options { OPTS (OPT_ENUM) }; static struct opt_desc opts[] = { OPTS (OPT_DESC) {-1, 0, 0, 0, 0} }; int arch_cmd_library_categories (t_uchar * program_name, int argc, char * argv[]) { int o; struct opt_parsed * option; t_uchar * default_archive = 0; t_uchar * archive = 0; safe_buffer_fd (1, 0, O_WRONLY, 0); option = 0; while (1) { o = opt_standard (lim_use_must_malloc, &option, opts, &argc, argv, program_name, usage, version_string, arch_cmd_library_categories_help, opt_help_msg, opt_long_help, opt_version); if (o == opt_none) break; switch (o) { default: safe_printfmt (2, "unhandled option `%s'\n", option->opt_string); panic ("internal error parsing arguments"); usage_error: opt_usage (2, argv[0], program_name, usage, 1); exit (1); /* bogus_arg: */ safe_printfmt (2, "ill-formed argument for `%s' (`%s')\n", option->opt_string, option->arg_string); goto usage_error; case opt_archive: { lim_free (0, default_archive); default_archive = str_save (0, option->arg_string); break; } } } if (argc > 2) goto usage_error; if (argc == 2) archive = str_save (0, argv[1]); else archive = arch_my_default_archive (default_archive); if (!arch_valid_archive_name (archive)) { if (archive) safe_printfmt (2, "%s: invalid archive name (%s)\n", argv[0], archive); else safe_printfmt (2, "%s: no default archive set\n", argv[0]); exit (1); } { rel_table cats = rel_table_nil; cats = arch_library_categories (archive); rel_print_table (1, cats); } return 0; } /* tag: Tom Lord Wed May 21 14:46:21 2003 (library-categories.c) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-make-category.h0000644000175000017500000000130510457622000020345 0ustar useruser/* cmd-make-category.h: * **************************************************************** * Copyright (C) 2003 Tom Lord, Stig Brautaset * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__CMD_MAKE_CATEGORY_H #define INCLUDE__LIBARCH__CMD_MAKE_CATEGORY_H #include "hackerlab/machine/types.h" extern t_uchar arch_cmd_make_category_help[]; /* automatically generated __STDC__ prototypes */ extern int arch_cmd_make_category (t_uchar * program_name, int argc, char * argv[]); #endif /* INCLUDE__LIBARCH__CMD_MAKE_CATEGORY_H */ /* tag: Stig Brautaset Sat Jun 7 15:57:57 BST 2003 (cmd-make-category.h) */ tla-1.3.5+dfsg/src/tla/libarch/chatter.h0000644000175000017500000000127610457622000016515 0ustar useruser/* chatter.h: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__CHATTER_H #define INCLUDE__LIBARCH__CHATTER_H #if !defined(__GNUC__) # undef __attribute__ # define __attribute__(X) #endif extern void arch_chatter (int fd, char * fmt, ...) __attribute__((format (printf, 2, 3))); /* automatically generated __STDC__ prototypes */ extern void arch_chatter (int chatter_fd, char * format, ...); #endif /* INCLUDE__LIBARCH__CHATTER_H */ /* tag: Tom Lord Sat Jan 5 15:26:10 2002 (chatter.h) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-library-log.c0000644000175000017500000001045410457622000020040 0ustar useruser/* cmd-library-log.c * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "config-options.h" #include "hackerlab/cmd/main.h" #include "tla/libarch/my.h" #include "tla/libarch/libraries.h" #include "tla/libarch/namespace.h" #include "tla/libarch/cmdutils.h" #include "tla/libarch/cmd-library-log.h" static t_uchar * usage = "[options] revision"; static t_uchar * version_string = (cfg__std__package " from regexps.com\n" "\n" "Copyright 2003 Tom Lord\n" "\n" "This is free software; see the source for copying conditions.\n" "There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\n" "PARTICULAR PURPOSE.\n" "\n" "Report bugs to " cfg__tla_bug_mail ".\n" "\n" cfg__std__release_id_string "\n"); #define OPTS(OP) \ OP (opt_help_msg, "h", "help", 0, \ "Display a help message and exit.") \ OP (opt_long_help, "H", 0, 0, \ "Display a verbose help message and exit.") \ OP (opt_version, "V", "version", 0, \ "Display a release identifier string\n" \ "and exit.") \ OP (opt_archive, "A", "archive", 1, \ "Override `my-default-archive'") \ OP (opt_silent, "s", "silent", 0, \ "suppress reassuring messages") t_uchar arch_cmd_library_log_help[] = ("output a log message from the revision library\n" "Print the log message for REVISION from the library.\n"); enum options { OPTS (OPT_ENUM) }; static struct opt_desc opts[] = { OPTS (OPT_DESC) {-1, 0, 0, 0, 0} }; int arch_cmd_library_log (t_uchar * program_name, int argc, char * argv[]) { int o; struct opt_parsed * option; t_uchar * default_archive; int silent; default_archive = 0; silent = 0; safe_buffer_fd (1, 0, O_WRONLY, 0); option = 0; while (1) { o = opt_standard (lim_use_must_malloc, &option, opts, &argc, argv, program_name, usage, version_string, arch_cmd_library_log_help, opt_help_msg, opt_long_help, opt_version); if (o == opt_none) break; switch (o) { default: safe_printfmt (2, "unhandled option `%s'\n", option->opt_string); panic ("internal error parsing arguments"); usage_error: opt_usage (2, argv[0], program_name, usage, 1); exit (1); /* bogus_arg: */ safe_printfmt (2, "ill-formed argument for `%s' (`%s')\n", option->opt_string, option->arg_string); goto usage_error; case opt_archive: { default_archive = str_save (0, option->arg_string); break; } case opt_silent: { silent = 1; break; } } } if (argc != 2) goto usage_error; { t_uchar * revspec; t_uchar * archive = 0; t_uchar * revision = 0; t_uchar * answer; revspec = argv[1]; if (!arch_valid_package_name (revspec, arch_maybe_archive, arch_req_patch_level, 0)) { safe_printfmt (2, "%s: invalid revision name (%s)\n", argv[0], revspec); exit (2); } archive = arch_parse_package_name (arch_ret_archive, default_archive, revspec); if (!archive) { safe_printfmt (2, "%s: no archive specified for library-log\n", argv[0]); exit (2); } revision = arch_parse_package_name (arch_ret_non_archive, 0, revspec); arch_check_library_for_revision (archive, revision); answer = arch_library_log (archive, revision); if (answer) safe_printfmt (1, "%s\n", answer); else { if (!silent) { safe_printfmt (2, "%s: revision not present in library (%s/%s)\n", argv[0], archive, revision); } exit (1); } } return 0; } /* tag: Tom Lord Wed May 21 14:05:20 2003 (library-log.c) */ tla-1.3.5+dfsg/src/tla/libarch/changelogs.c0000644000175000017500000002446210457622000017172 0ustar useruser/* changelogs.c: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/bugs/panic.h" #include "hackerlab/char/char-class.h" #include "hackerlab/char/str.h" #include "hackerlab/vu/safe.h" #include "hackerlab/rx-posix/regex.h" #include "tla/libarch/patch-logs.h" #include "tla/libarch/inv-ids.h" #include "tla/libarch/namespace.h" #include "tla/libarch/changelogs.h" #define arch_changelog_id_re "^([ix]_automatic-ChangeLog--)(" arch_archive_re ")/(" arch_base_re ")(--" arch_base_re ")?(--" arch_vsn_re ")$" /* __STDC__ prototypes for static functions */ static regex_t * changelog_id_pattern (void); static void generate_changelog_entry (int out_fd, const t_uchar * archive, const t_uchar * version, const t_uchar * patch_lvl, const t_uchar * file, int no_files); static void changelog_file_list (int out_fd, assoc_table headers, const t_uchar * header, const t_uchar * exclude); static void changelog_file_pair_list (int out_fd, assoc_table headers, const t_uchar * header); int arch_id_indicates_changelog (const t_uchar * id) { regex_t * pattern; pattern = changelog_id_pattern (); if (!regexec (pattern, id, 0, 0, 0)) return 1; else return 0; } void arch_parse_changelog_id (t_uchar ** archive, t_uchar ** version, const t_uchar * id) { regex_t * pattern; regmatch_t pmatch[6]; pattern = changelog_id_pattern (); invariant (!regexec (pattern, id, 6, pmatch, 0)); *archive = str_save_n (0, id + pmatch[2].rm_so, pmatch[2].rm_eo - pmatch[2].rm_so); *version = str_save_n (0, id + pmatch[3].rm_so, pmatch[5].rm_eo - pmatch[3].rm_so); } void arch_generate_changelog (int out_fd, const t_uchar * tree_root, int no_files, int untagged, const t_uchar * new_entry_patch_lvl, const t_uchar * new_entry_file, const t_uchar * archive, const t_uchar * version) { rel_table log_ls; int lim; int x; if (!arch_valid_package_name (version, arch_no_archive, arch_req_version, 0)) { safe_printfmt (2, "changelog: invalid version name (%s)\n", version); exit (1); } log_ls = arch_logs (tree_root, archive, version, 0); arch_sort_table_by_patch_level_field (1, log_ls, 0); { t_uchar * tag_name; if (untagged) tag_name = "non-id"; else if (arch_implicit_id_tagging == arch_tree_id_tagging_method (0, tree_root, 0)) tag_name = "tag"; else tag_name = "arch-tag"; safe_printfmt (out_fd, "# do not edit -- automatically generated by arch changelog\n# %s: automatic-ChangeLog--%s/%s\n#\n\n", tag_name, archive, version); } if (new_entry_patch_lvl) { generate_changelog_entry (out_fd, archive, version, new_entry_patch_lvl, new_entry_file, no_files); } lim = rel_n_records (log_ls); for (x = 0; x < lim; ++x) { generate_changelog_entry (out_fd, archive, version, rel_peek_str (log_ls, x, 0), rel_peek_str (log_ls, x, 1), no_files); } rel_free_table (log_ls); } static regex_t * changelog_id_pattern (void) { static int compiled = 0; static regex_t pattern; if (!compiled) { if (regcomp (&pattern, arch_changelog_id_re, REG_EXTENDED)) panic ("unable to compile arch_changelog_id_re"); compiled = 1; } return &pattern; } static void generate_changelog_entry (int out_fd, const t_uchar * archive, const t_uchar * version, const t_uchar * patch_lvl, const t_uchar * file, int no_files) { int in_fd; t_uchar * log = 0; size_t len; assoc_table headers = 0; t_uchar * body = 0; in_fd = safe_open (file, O_RDONLY, 0); safe_file_to_string (&log, &len, in_fd); safe_close (in_fd); log = lim_realloc (0, log, len + 1); log[len] = 0; headers = 0; body = 0; arch_parse_log (0, &headers, (const t_uchar **)&body, log); lim_free (0, log); /* print the first line (date, creator, patch level) */ { const t_uchar * raw_date; t_uchar * cooked_date = 0; const t_uchar * creator; raw_date = assoc_get_str_taking (headers, rel_make_field_str ("standard-date")); if (raw_date) { const t_uchar * from; const t_uchar * to; from = raw_date; while (*from && char_is_space (*from)) ++from; to = from; while (*to && !char_is_space (*to)) ++to; while (*to && char_is_space (*to)) ++to; while (*to && !char_is_space (*to)) ++to; cooked_date = str_save_n (0, from, to - from); cooked_date = str_realloc_cat (0, cooked_date, " GMT"); } else { cooked_date = str_save (0, "\?\?\?\?-\?\?-\?\? GMT"); } creator = assoc_get_str_taking (headers, rel_make_field_str ("creator")); if (!creator) creator = "????"; safe_printfmt (out_fd, "%s\t%s\t%s\n", cooked_date, creator, patch_lvl); lim_free (0, cooked_date); } safe_printfmt (out_fd, "\n"); /* Print the summary: */ { const t_uchar * summary; summary = assoc_get_str_taking (headers, rel_make_field_str ("summary")); if (!summary) summary = ""; safe_printfmt (out_fd, " Summary:\n %s\n", summary); } /* Print the revision name: */ { const t_uchar * revision; revision = assoc_get_str_taking (headers, rel_make_field_str ("revision")); if (!revision) revision = ""; safe_printfmt (out_fd, " Revision:\n %s\n", revision); } safe_printfmt (out_fd, "\n"); /* Print the revision body: */ { t_uchar * eol; t_uchar * pos; pos = body; while (*pos) { eol = str_chr_index (pos, '\n'); if (eol) { safe_printfmt (out_fd, " %.*s\n", (int)(eol - pos), pos); pos = eol + 1; } else { safe_printfmt (out_fd, " %s\n", pos); break; } } } safe_printfmt (out_fd, "\n"); /* file lists */ if (!no_files) { t_uchar * revision = 0; t_uchar * fqrev = 0; t_uchar * excluded_patch_file = 0; revision = str_alloc_cat_many (0, version, "--", patch_lvl, str_end); fqrev = arch_fully_qualify (archive, revision); excluded_patch_file = arch_log_file (".", archive, revision); changelog_file_list (out_fd, headers, "new-files", excluded_patch_file + 2); changelog_file_list (out_fd, headers, "removed-files", 0); changelog_file_list (out_fd, headers, "modified-files", 0); changelog_file_pair_list (out_fd, headers, "renamed-files"); changelog_file_list (out_fd, headers, "new-directories", 0); changelog_file_list (out_fd, headers, "removed-directories", 0); changelog_file_list (out_fd, headers, "modified-directories", 0); changelog_file_pair_list (out_fd, headers, "renamed-directories"); changelog_file_list (out_fd, headers, "new-patches", fqrev); lim_free (0, revision); lim_free (0, fqrev); lim_free (0, excluded_patch_file); } safe_printfmt (out_fd, "\n"); lim_free (0, body); free_assoc_table (headers); } static void changelog_file_list (int out_fd, assoc_table headers, const t_uchar * header, const t_uchar * exclude) { const t_uchar * value; int width; int items_on_line; int printed_header; value = assoc_get_str_taking (headers, rel_make_field_str (header)); if (!value) return; printed_header = 0; width = 0; items_on_line = 0; while (1) { const t_uchar * end; while (char_is_space (*value)) ++value; if (!*value) break; end = value; while (*end && !char_is_space (*end)) ++end; if (!exclude || str_cmp_n (exclude, str_length (exclude), value, end - value)) { if (!printed_header) { t_uchar * fixed_header = 0; fixed_header = str_save (0, header); { t_uchar * h; for (h = fixed_header; *h; ++h) if (*h == '-') *h = ' '; safe_printfmt (out_fd, " %s:\n ", fixed_header); } lim_free (0, fixed_header); printed_header = 1; } if ((items_on_line == 0) || ((width + (1 + end - value)) < 64)) { width += (end - value) + 1; ++items_on_line; safe_printfmt (out_fd, " %.*s", (int)(end - value), value); } else { safe_printfmt (out_fd, "\n %.*s", (int)(end - value), value); width = (end - value) + 1; items_on_line = 1; } } value = end; } if (printed_header) safe_printfmt (out_fd, "\n\n"); } static void changelog_file_pair_list (int out_fd, assoc_table headers, const t_uchar * header) { const t_uchar * value; int printed_header = 0; value = assoc_get_str_taking (headers, rel_make_field_str (header)); if (!value) return; while (1) { const t_uchar * end_1; const t_uchar * start_2; const t_uchar * end_2; while (char_is_space (*value)) ++value; if (!*value) break; end_1 = value; while (*end_1 && !char_is_space (*end_1)) ++end_1; if (!*end_1) panic ("corrupt log file"); start_2 = end_1; while (char_is_space (*start_2)) ++start_2; if (!*start_2) panic ("corrupt log file"); end_2 = start_2; while (*end_2 && !char_is_space (*end_2)) ++end_2; if (!printed_header) { t_uchar * fixed_header = 0; fixed_header = str_save (0, header); { t_uchar * h; for (h = fixed_header; *h; ++h) if (*h == '-') *h = ' '; safe_printfmt (out_fd, " %s:\n", fixed_header); } lim_free (0, fixed_header); printed_header = 1; } safe_printfmt (out_fd, " %.*s\n ==> %.*s\n", (end_1 - value), value, (end_2 - start_2), start_2); value = end_2; } if (printed_header) safe_printfmt (out_fd, "\n"); } /* tag: Tom Lord Wed May 14 12:14:01 2003 (changelogs.c) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-uncacherev.h0000644000175000017500000000126010457622000017740 0ustar useruser/* cmd-uncacherev.h: * **************************************************************** * Copyright (C) 2003 Tom Lord, Stig Brautaset * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__CMD_UNCACHEREV_H #define INCLUDE__LIBARCH__CMD_UNCACHEREV_H #include "hackerlab/machine/types.h" extern t_uchar arch_cmd_uncacherev_help[]; /* automatically generated __STDC__ prototypes */ extern int arch_cmd_uncacherev (t_uchar * program_name, int argc, char * argv[]); #endif /* INCLUDE__LIBARCH__CMD_UNCACHEREV_H */ /* tag: Stig Brautaset Sat Jun 7 17:48:13 BST 2003 (cmd-uncacherev.h) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-library-archives.c0000644000175000017500000000567510457622000021074 0ustar useruser/* cmd-library-archives.c * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "config-options.h" #include "hackerlab/cmd/main.h" #include "tla/libarch/namespace.h" #include "tla/libarch/project-tree.h" #include "tla/libarch/my.h" #include "tla/libarch/libraries.h" #include "tla/libarch/cmd-library-archives.h" static t_uchar * usage = "[options]"; static t_uchar * version_string = (cfg__std__package " from regexps.com\n" "\n" "Copyright 2003 Tom Lord\n" "\n" "This is free software; see the source for copying conditions.\n" "There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\n" "PARTICULAR PURPOSE.\n" "\n" "Report bugs to " cfg__tla_bug_mail ".\n" "\n" cfg__std__release_id_string "\n"); #define OPTS(OP) \ OP (opt_help_msg, "h", "help", 0, \ "Display a help message and exit.") \ OP (opt_long_help, "H", 0, 0, \ "Display a verbose help message and exit.") \ OP (opt_version, "V", "version", 0, \ "Display a release identifier string\n" \ "and exit.") t_uchar arch_cmd_library_archives_help[] = ("list the archives in your revision library\n" "List all archives with records in the revision library.\n"); enum options { OPTS (OPT_ENUM) }; static struct opt_desc opts[] = { OPTS (OPT_DESC) {-1, 0, 0, 0, 0} }; int arch_cmd_library_archives (t_uchar * program_name, int argc, char * argv[]) { int o; struct opt_parsed * option; safe_buffer_fd (1, 0, O_WRONLY, 0); option = 0; while (1) { o = opt_standard (lim_use_must_malloc, &option, opts, &argc, argv, program_name, usage, version_string, arch_cmd_library_archives_help, opt_help_msg, opt_long_help, opt_version); if (o == opt_none) break; switch (o) { default: safe_printfmt (2, "unhandled option `%s'\n", option->opt_string); panic ("internal error parsing arguments"); usage_error: opt_usage (2, argv[0], program_name, usage, 1); exit (1); /* bogus_arg: */ safe_printfmt (2, "ill-formed argument for `%s' (`%s')\n", option->opt_string, option->arg_string); goto usage_error; } } if (argc != 1) goto usage_error; { rel_table archs = rel_table_nil; archs = arch_library_archives (); rel_print_table (1, archs); } return 0; } /* tag: Tom Lord Wed May 21 15:13:45 2003 (library-archives.c) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-cachedrevs.h0000644000175000017500000000126010457622000017724 0ustar useruser/* cmd-cachedrevs.h: * **************************************************************** * Copyright (C) 2003 Tom Lord, Stig Brautaset * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__CMD_CACHEDREVS_H #define INCLUDE__LIBARCH__CMD_CACHEDREVS_H #include "hackerlab/machine/types.h" extern t_uchar arch_cmd_cachedrevs_help[]; /* automatically generated __STDC__ prototypes */ extern int arch_cmd_cachedrevs (t_uchar * program_name, int argc, char * argv[]); #endif /* INCLUDE__LIBARCH__CMD_CACHEDREVS_H */ /* tag: Stig Brautaset Sat Jun 7 13:13:27 BST 2003 (cmd-cachedrevs.h) */ tla-1.3.5+dfsg/src/tla/libarch/ancestry.h0000644000175000017500000000121510457622000016704 0ustar useruser/* ancestry.h: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__ANCESTRY_H #define INCLUDE__LIBARCH__ANCESTRY_H #include "tla/libawk/relational.h" #include "tla/libarch/archive.h" /* automatically generated __STDC__ prototypes */ extern rel_table arch_trace_ancestry (struct arch_archive * arch, t_uchar * archive, t_uchar * revision, int merges); #endif /* INCLUDE__LIBARCH__ANCESTRY_H */ /* tag: Tom Lord Sat Jan 5 15:26:10 2002 (ancestry.h) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-log-for-merge.h0000644000175000017500000000130510457622000020257 0ustar useruser/* cmd-log-for-merge.h: * **************************************************************** * Copyright (C) 2003 Tom Lord, Stig Brautaset * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__CMD_LOG_FOR_MERGE_H #define INCLUDE__LIBARCH__CMD_LOG_FOR_MERGE_H #include "hackerlab/machine/types.h" extern t_uchar arch_cmd_log_for_merge_help[]; /* automatically generated __STDC__ prototypes */ extern int arch_cmd_log_for_merge (t_uchar * program_name, int argc, char * argv[]); #endif /* INCLUDE__LIBARCH__CMD_LOG_FOR_MERGE_H */ /* tag: Stig Brautaset Sat Jun 7 15:32:32 BST 2003 (cmd-log-for-merge.h) */ tla-1.3.5+dfsg/src/tla/libarch/invent.c0000644000175000017500000012316110457622000016357 0ustar useruser/* invent.c: project tree inventory library routines * **************************************************************** * Copyright (C) 2002, 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/bugs/panic.h" #include "hackerlab/os/errno.h" #include "hackerlab/mem/mem.h" #include "hackerlab/char/char-class.h" #include "hackerlab/char/str.h" #include "hackerlab/arrays/ar.h" #include "hackerlab/fs/file-names.h" #include "hackerlab/vu/safe.h" #include "tla/libarch/inode-sig.h" #include "tla/libarch/inv-ids.h" #include "tla/libarch/invent.h" struct directory_regexps { regex_t * regexps[sizeof (struct arch_inventory_regexps) / sizeof (regex_t)]; struct arch_inventory_regexps storage; #define DIR_REGEXP(dir_re, name) \ (dir_re)->regexps[offsetof (struct arch_inventory_regexps, name##_pattern) / sizeof (regex_t)] }; /* __STDC__ prototypes for static functions */ static void copy_options_but_regexps (struct arch_inventory_options * dest, const struct arch_inventory_options * src); static void source_inventory_callback (const t_uchar * path, struct stat * statb, enum arch_inventory_category category, const t_uchar * id, int has_source_name, void * closure, int escape_classes); static void source_inventory_files_callback (const t_uchar * path, struct stat * statb, enum arch_inventory_category category, const t_uchar * id, int has_source_name, void * closure, int escape_classes); static void source_path_name_files_callback (const t_uchar * path, struct stat * statb, enum arch_inventory_category category, const t_uchar * id, int has_source_name, void * closure, int escape_classes); static void arch_inventory_traversal_internal (struct arch_inventory_options * options, const t_uchar * root, inv_callback callback, void * closure, assoc_table id_tagging_shortcut, assoc_table * explicit_skips, int escape_classes); static int cmp_files (const void * va, const void * vb); static int right_order_for_recursion (char * a, char * b); static int contains_illegal_character (const char * filename); static int filename_matches (regex_t * pattern, const char * filename); static int is_control_file (const char * rel_file, const char * filename); static int is_nested_tree (const char * path); static int is_comment_line (const t_uchar * line, long len); static int sets_re (const char * kw, char ** re, const t_uchar * line, long len); static int sets_id_tagging_method (const char * kw, enum arch_id_tagging_method * method_var, enum arch_inventory_category * untagged_category_var, enum arch_id_tagging_method method, enum arch_inventory_category untagged_category, const t_uchar * line, long len); static int sets_untagged_source_disposition (enum arch_inventory_category * untagged_category_var, const t_uchar * saved_line, long saved_len); static void read_directory_regexps (struct directory_regexps * regexps, const char * dir_name); static void free_directory_regexps (struct directory_regexps * regexps); rel_table arch_source_inventory (const t_uchar * tree_root, int include_ctl, int include_precious, int include_nested) { int here_fd; rel_table answer = rel_table_nil; struct arch_inventory_options options; here_fd = safe_open (".", O_RDONLY, 0); safe_chdir (tree_root); mem_set0 ((t_uchar *)&options, sizeof (options)); options.categories = arch_inventory_source | (include_precious ? arch_inventory_precious : 0); options.want_ids = 1; options.method = arch_names_id_tagging; /* default only */ options.nested = include_nested; options.include_excluded = !!include_ctl; arch_get_inventory_naming_conventions (&options, "."); arch_inventory_traversal (&options, ".", source_inventory_callback, (void *)&answer, 0); arch_free_inventory_naming_conventions (&options); safe_fchdir (here_fd); safe_close (here_fd); return answer; } rel_table arch_source_files_inventory (const t_uchar * tree_root, int include_ctl, int include_precious) { int here_fd; rel_table answer = rel_table_nil; struct arch_inventory_options options; here_fd = safe_open (".", O_RDONLY, 0); safe_chdir (tree_root); mem_set0 ((t_uchar *)&options, sizeof (options)); options.categories = arch_inventory_source | (include_precious ? arch_inventory_precious : 0); options.want_ids = 1; options.method = arch_names_id_tagging; /* default only */ options.nested = 0; options.include_excluded = !!include_ctl; arch_get_inventory_naming_conventions (&options, "."); arch_inventory_traversal (&options, ".", source_inventory_files_callback, (void *)&answer, 0); arch_free_inventory_naming_conventions (&options); safe_fchdir (here_fd); safe_close (here_fd); return answer; } rel_table arch_source_files_file_list (const t_uchar * tree_root, int include_ctl, int include_precious) { int here_fd; rel_table answer = rel_table_nil; struct arch_inventory_options options; here_fd = safe_open (".", O_RDONLY, 0); safe_chdir (tree_root); mem_set0 ((t_uchar *)&options, sizeof (options)); options.categories = arch_inventory_source | (include_precious ? arch_inventory_precious : 0); options.want_ids = 1; options.method = arch_names_id_tagging; /* default only */ options.nested = 0; options.include_excluded = !!include_ctl; arch_get_inventory_naming_conventions (&options, "."); arch_inventory_traversal (&options, ".", source_path_name_files_callback, (void *)&answer, 0); arch_free_inventory_naming_conventions (&options); safe_fchdir (here_fd); safe_close (here_fd); return answer; } static void copy_options_but_regexps (struct arch_inventory_options * dest, const struct arch_inventory_options * src) { dest->categories = src->categories; dest->method = src->method; dest->want_ids = src->want_ids; dest->treat_unrecognized_source_as_source = src->treat_unrecognized_source_as_source; dest->nested = src->nested; dest->include_excluded = src->include_excluded; dest->override_method = src->override_method; } static void source_inventory_callback (const t_uchar * path, struct stat * statb, enum arch_inventory_category category, const t_uchar * id, int has_source_name, void * closure, int escape_classes) { rel_table * answer = (rel_table *)closure; rel_add_records (answer, rel_make_record_2_taking (rel_make_field_str (path), rel_make_field_str (id)), rel_record_null); } static void source_inventory_files_callback (const t_uchar * path, struct stat * statb, enum arch_inventory_category category, const t_uchar * id, int has_source_name, void * closure, int escape_classes) { rel_table * answer = (rel_table *)closure; if (!S_ISDIR (statb->st_mode)) rel_add_records (answer, rel_make_record_2_taking (rel_make_field_str (path), rel_make_field_str (id)), rel_record_null); } static void source_path_name_files_callback (const t_uchar * path, struct stat * statb, enum arch_inventory_category category, const t_uchar * id, int has_source_name, void * closure, int escape_classes) { rel_table * answer = (rel_table *)closure; if (!S_ISDIR (statb->st_mode)) rel_add_records (answer, rel_make_record_1_taking (rel_make_field_str (path)), rel_record_null); } t_uchar * arch_default_naming_conventions_regexp (enum arch_inventory_category cat) { switch (cat) { default: { panic ("unrecognized inventory category (arch_default_naming_conventions_regexp)"); return 0; /* not reached */ } case arch_inventory_source: { return str_save (0, "^[_=a-zA-Z0-9].*$"); } case arch_inventory_precious: { return str_save (0, "^(\\+.*|\\.gdbinit|\\.#ckpts-lock|=build\\.*|=install\\.*|CVS|CVS\\.adm|RCS|RCSLOG|SCCS|TAGS|\\.svn)$"); } case arch_inventory_backup: { return str_save (0, "^.*(~|\\.~[0-9]+~|\\.bak|\\.swp|\\.orig|\\.rej|\\.original|\\.modified|\\.reject)$"); } case arch_inventory_junk: { return str_save (0, "^(,.*)$"); } case arch_inventory_unrecognized: { return str_save (0, "^(.*\\.(o|a|so|core|so(\\.[[:digit:]]+)*)|core)$"); } case arch_inventory_excludes: { return str_save (0, "^(.arch-ids|\\{arch\\}|\\.arch-inventory)$"); } } } t_uchar * arch_ancient_default_naming_conventions_regexp (enum arch_inventory_category cat) { switch (cat) { default: { panic ("unrecognized inventory category (arch_ancient_default_naming_conventions_regexp)"); return 0; /* not reached */ } case arch_inventory_source: { return str_save (0, "^([_=a-zA-Z0-9].*|\\.arch-ids|\\{arch\\}|\\.arch-project-tree)$"); } case arch_inventory_precious: { return str_save (0, "^(\\+.*|\\.gdbinit|\\.#ckpts-lock|=build\\.*|=install\\.*|CVS|CVS\\.adm|RCS|RCSLOG|SCCS|TAGS)$"); } case arch_inventory_backup: { return str_save (0, "^.*(~|\\.~[0-9]+~|\\.bak|\\.orig|\\.rej|\\.original|\\.modified|\\.reject)$"); } case arch_inventory_junk: { return str_save (0, "^(,.*)$"); } case arch_inventory_unrecognized: { return str_save (0, "^(.*\\.(o|a|so|core)|core)$"); } case arch_inventory_excludes: { return str_save (0, "^(.arch-ids|\\{arch\\}|\\.arch-inventory)$"); } } } t_uchar * arch_null_default_naming_conventions_regexp (enum arch_inventory_category cat) { switch (cat) { default: { panic ("unrecognized inventory category (arch_null_default_naming_conventions_regexp)"); return 0; /* not reached */ } case arch_inventory_source: { return str_save (0, ".*"); } case arch_inventory_precious: { return str_save (0, "^$"); } case arch_inventory_backup: { return str_save (0, "^$"); } case arch_inventory_junk: { return str_save (0, "^$"); } case arch_inventory_unrecognized: { return str_save (0, "^$"); } case arch_inventory_excludes: { return str_save (0, "^(.arch-ids|\\{arch\\})$"); } } } void arch_get_inventory_naming_conventions (struct arch_inventory_options * options, const char * tree_root) { char * excludes = 0; char * junk = 0; char * backup = 0; char * precious = 0; char * unrecognized = 0; char * source = 0; int re_error; if (tree_root) { t_uchar * id_tagging_method_file; id_tagging_method_file = arch_tree_id_tagging_method_file (tree_root); if (!safe_access (id_tagging_method_file, F_OK)) { int in_fd; t_uchar * line; long len; enum arch_id_tagging_method tree_method = arch_names_id_tagging; enum arch_inventory_category untagged_source_category = arch_inventory_precious; in_fd = safe_open (id_tagging_method_file, O_RDONLY, 0); while (1) { safe_next_line (&line, &len, in_fd); if (!len) break; (void)(!is_comment_line (line, len) && !sets_id_tagging_method ("implicit", &tree_method, &untagged_source_category, arch_implicit_id_tagging, arch_inventory_source, line, len) && !sets_id_tagging_method ("tagline", &tree_method, &untagged_source_category, arch_tagline_id_tagging, arch_inventory_source, line, len) && !sets_id_tagging_method ("explicit", &tree_method, &untagged_source_category, arch_explicit_id_tagging, arch_inventory_precious, line, len) && !sets_id_tagging_method ("names", &tree_method, &untagged_source_category, arch_names_id_tagging, arch_inventory_source, line, len) && !sets_untagged_source_disposition (&untagged_source_category, line, len) && !sets_re ("exclude", &excludes, line, len) && !sets_re ("junk", &junk, line, len) && !sets_re ("backup", &backup, line, len) && !sets_re ("precious", &precious, line, len) && !sets_re ("unrecognized", &unrecognized, line, len) && !sets_re ("source", &source, line, len)); } safe_close (in_fd); if (!options->override_method) { options->method = tree_method; options->untagged_source_category = untagged_source_category; } } /* default naming conventions. */ if (excludes == NULL) excludes = arch_ancient_default_naming_conventions_regexp (arch_inventory_excludes); if (junk == NULL) junk = arch_ancient_default_naming_conventions_regexp (arch_inventory_junk); if (backup == NULL) backup = arch_ancient_default_naming_conventions_regexp (arch_inventory_backup); if (precious == NULL) precious = arch_ancient_default_naming_conventions_regexp (arch_inventory_precious); if (unrecognized == NULL) unrecognized = arch_ancient_default_naming_conventions_regexp (arch_inventory_unrecognized); if (source == NULL) source = arch_ancient_default_naming_conventions_regexp (arch_inventory_source); lim_free (0, id_tagging_method_file); } else { excludes = arch_null_default_naming_conventions_regexp (arch_inventory_excludes); junk = arch_null_default_naming_conventions_regexp (arch_inventory_junk); backup = arch_null_default_naming_conventions_regexp (arch_inventory_backup); precious = arch_null_default_naming_conventions_regexp (arch_inventory_precious); unrecognized = arch_null_default_naming_conventions_regexp (arch_inventory_unrecognized); source = arch_null_default_naming_conventions_regexp (arch_inventory_source); } /* compile the conventions. */ re_error = regcomp (&options->regexps.excludes_pattern, excludes, REG_EXTENDED); if (re_error) panic ("bogus id-tagging-method regexp for `excludes'"); re_error = regcomp (&options->regexps.junk_pattern, junk, REG_EXTENDED); if (re_error) panic ("bogus id-tagging-method regexp for `junk'"); re_error = regcomp (&options->regexps.backup_pattern, backup, REG_EXTENDED); if (re_error) panic ("bogus id-tagging-method regexp for `backup'"); re_error = regcomp (&options->regexps.precious_pattern, precious, REG_EXTENDED); if (re_error) panic ("bogus id-tagging-method regexp for `precious'"); re_error = regcomp (&options->regexps.unrecognized_pattern, unrecognized, REG_EXTENDED); if (re_error) panic ("bogus id-tagging-method regexp for `unrecognized'"); re_error = regcomp (&options->regexps.source_pattern, source, REG_EXTENDED); if (re_error) panic ("bogus id-tagging-method regexp for `source'"); lim_free (0, excludes); lim_free (0, junk); lim_free (0, backup); lim_free (0, precious); lim_free (0, unrecognized); lim_free (0, source); } void arch_free_inventory_naming_conventions (struct arch_inventory_options * options) { regfree (&options->regexps.excludes_pattern); regfree (&options->regexps.junk_pattern); regfree (&options->regexps.backup_pattern); regfree (&options->regexps.precious_pattern); regfree (&options->regexps.unrecognized_pattern); regfree (&options->regexps.source_pattern); } void arch_inventory_traversal (struct arch_inventory_options * options, const t_uchar * root, inv_callback callback, void * closure, int escape_classes) { assoc_table id_tagging_shortcut = 0; assoc_table explicit_skips = 0; if ((options->method == arch_implicit_id_tagging) || (options->method == arch_tagline_id_tagging)) arch_read_id_shortcut (&id_tagging_shortcut, root); arch_inventory_traversal_internal (options, root, callback, closure, id_tagging_shortcut, &explicit_skips, escape_classes); free_assoc_table (id_tagging_shortcut); free_assoc_table (explicit_skips); } static void arch_inventory_traversal_internal (struct arch_inventory_options * options, const t_uchar * root, inv_callback callback, void * closure, assoc_table id_tagging_shortcut, assoc_table * explicit_skips, int escape_classes) { DIR * dir; char ** files = 0; int n_files; int deferred_recursions_head; int deferred_recursions_tail; int * deferred_recursions = 0; int * is_deferred_nested = 0; char * rel_file = 0; struct directory_regexps * dir_regexps = 0; int x; safe_opendir (&dir, root); files = 0; n_files = 0; while (1) { char * file; safe_readdir (&file, dir); if (!file) break; *(char **)ar_push ((void **)&files, 0, sizeof (char *)) = file; ++n_files; /* look for per-directory inventory regexps */ if (dir_regexps == 0 && (file[0] == '.') && !str_cmp(".arch-inventory", file)) { dir_regexps = lim_malloc (0, sizeof *dir_regexps); read_directory_regexps (dir_regexps, root); } } safe_closedir (dir); qsort ((void *)files, n_files, sizeof (char *), cmp_files); /* We want to invoke `callback' on a lexically sorted list of paths. * Suppose that "foo" is a directory, but "foo-bar" also exists. * That means we have to invoke callbacks in the order: * * foo * foo-bar * foo/xyzzy * * When we detect that "foo" is a directory, we can't * necessarilly recurse immediately. Instead, we keep a queue * of deferred directories, recursing on them at the right time. */ rel_file = 0; deferred_recursions_head = 0; deferred_recursions_tail = 0; deferred_recursions = 0; is_deferred_nested = 0; ar_setsize ((void **)&deferred_recursions, 0, n_files, sizeof (int)); ar_setsize ((void **)&is_deferred_nested, 0, n_files, sizeof (int)); x = 0; while ((x < n_files) || (deferred_recursions_head != deferred_recursions_tail)) { int is_deferred; int deferred_nested; char * file; struct stat stat_buf; int is_control = 0; if ((deferred_recursions_head != deferred_recursions_tail) && ((x >= n_files) || right_order_for_recursion (files[deferred_recursions[deferred_recursions_head]], files[x]))) { is_deferred = 1; file = files[deferred_recursions[deferred_recursions_head]]; deferred_nested = is_deferred_nested[deferred_recursions_head]; ++deferred_recursions_head; } else { is_deferred = 0; file = files[x]; ++x; } rel_file = file_name_in_vicinity (0, root, file); if (is_deferred) { if (deferred_nested) goto handle_deferred_nested; else goto handle_deferred; } /* . and .. are mandatory exclude files */ if (!str_cmp (".", file) || !str_cmp ("..", file)) { next_file: lim_free (0, rel_file); rel_file = 0; continue; } safe_lstat (rel_file, &stat_buf); /* only symlinks, directories and plain files are * considerably source, all others need to be precious */ if ( !S_ISREG (stat_buf.st_mode) && !S_ISLNK (stat_buf.st_mode) && !S_ISDIR (stat_buf.st_mode)) { goto precious_file; } /* non-printing characters, spaces, and glob characters are * mandatory unrecognized files */ if (contains_illegal_character (file)) { unrecognized_file: if (options->categories & arch_inventory_unrecognized) { callback (rel_file, &stat_buf, arch_inventory_unrecognized, 0, 0, closure, escape_classes); } goto next_file; } /* callers can specify a pattern for additional files to * exclude from consideration. */ if (!options->include_excluded && ((dir_regexps && DIR_REGEXP(dir_regexps, excludes) && filename_matches (DIR_REGEXP(dir_regexps, excludes), file)) || filename_matches (&options->regexps.excludes_pattern, file))) goto next_file; /* arch control files that get past the exclude pattern are * always source. */ is_control = is_control_file (rel_file, file); if (is_control_file (rel_file, file)) { goto handle_source_file; } /* file names beginning with "++" are always precious. */ if ((file[0] == '+') && (file[1] == '+')) { goto precious_file; } /* file names beginning with ",," are always considered junk files. */ if (file[0] == ',' && file[1] == ',') goto junk_file; /* test against optional per-directory regexps first */ if (dir_regexps) { regex_t * re; /* junk */ re = DIR_REGEXP(dir_regexps, junk); if (re && filename_matches (re, file)) goto junk_file; /* backup */ re = DIR_REGEXP(dir_regexps, backup); if (re && filename_matches (re, file)) goto backup_file; /* precious */ re = DIR_REGEXP(dir_regexps, precious); if (re && filename_matches (re, file)) goto precious_file; /* unrecognized */ re = DIR_REGEXP(dir_regexps, unrecognized); if (re && filename_matches (re, file)) goto unrecognized_file; /* source */ re = DIR_REGEXP(dir_regexps, source); if (re && filename_matches (re, file)) goto handle_source_file; } /* callers can specify a pattern for "junk" files -- files * presumed safe-to-be-removed by automatic tools, barring * concurrent tools. */ if (filename_matches (&options->regexps.junk_pattern, file)) { junk_file: if (options->categories & arch_inventory_junk) { callback (rel_file, &stat_buf, arch_inventory_junk, 0, 0, closure, escape_classes); } goto next_file; } /* callers can specify a pattern for "backup" files -- files * that are created by editors and similar programs to save old * versions */ if (filename_matches (&options->regexps.backup_pattern, file)) { backup_file: if (options->categories & arch_inventory_backup) { callback (rel_file, &stat_buf, arch_inventory_backup, 0, 0, closure, escape_classes); } goto next_file; } /* callers can specify a pattern for "precious" files -- files * that are not part of the source, but which should never be * automatically removed. */ if (filename_matches (&options->regexps.precious_pattern, file)) { precious_file: if (options->categories & arch_inventory_precious) { callback (rel_file, &stat_buf, arch_inventory_precious, 0, 0, closure, escape_classes); } goto next_file; } /* callers can specify a pattern for explicitly "unrecognized" files -- * files that should be flagged as errors in tree-lint reports. */ if (filename_matches (&options->regexps.unrecognized_pattern, file)) { goto unrecognized_file; } /* finally, a pattern for "source" files -- files which are expected * to be source files. Note that the option untagged_source_category * determines the final disposition of files which match the source * pattern, but have no evident id. * * If a directory appears to be a source directory, but contains a rules * directory of its own, then it is in fact the root of a nested tree -- not * a regular source file. */ if (filename_matches (&options->regexps.source_pattern, file)) { handle_source_file: if (S_ISDIR (stat_buf.st_mode) && is_nested_tree (rel_file)) { if (options->categories & arch_inventory_tree) { callback (rel_file, &stat_buf, arch_inventory_tree, 0, 1, closure, escape_classes); } if (options->nested) { if ((x < n_files) && !right_order_for_recursion (file, files[x])) { deferred_recursions[deferred_recursions_tail] = x - 1; is_deferred_nested[deferred_recursions_tail] = 1; ++deferred_recursions_tail; lim_free (0, rel_file); rel_file = 0; continue; } handle_deferred_nested: { struct arch_inventory_options nest_opts; mem_set0 ((t_uchar *)&nest_opts, sizeof nest_opts); copy_options_but_regexps (&nest_opts, options); arch_get_inventory_naming_conventions (&nest_opts, rel_file); arch_inventory_traversal_internal (&nest_opts, rel_file, callback, closure, id_tagging_shortcut, explicit_skips, escape_classes); arch_free_inventory_naming_conventions (&nest_opts); } } goto next_file; } else { t_uchar * id; enum arch_inventory_category this_files_category; /* Not a nested tree. Matches the source pattern. */ id = 0; /* Do we need to compute the inventory id of this file which has a source name? * * Certainly so if the caller wants ids. * * Otherwise we need the id only if we need it to verify that this * is, indeed, source: * * If untagged-source is source, then we don't need the id. * If untagged-source is something else, then we need to see if it has an id. */ if (options->want_ids || (options->untagged_source_category != arch_inventory_source)) { /* if the caller wants tags, or if we can only be certain that this is * source by seeing if it has an id, get the id. */ int untagged_is_source = (options->untagged_source_category == arch_inventory_source); id = arch_inventory_id (options->method, untagged_is_source, rel_file, id_tagging_shortcut, &stat_buf, explicit_skips); } /* What is the category of the file? * * If we've confirmed that it has an id, then it's certainly source. * Also if untagged-source is automatically source. * * If untagged-source is not source there are two cases: * * If it's a control file, then it is unrecognized, unconditionally. * * Otherwise, the untagged-source directive tells us what it is. */ if (id || (options->untagged_source_category == arch_inventory_source)) this_files_category = arch_inventory_source; else if (is_control) this_files_category = arch_inventory_unrecognized; else this_files_category = options->untagged_source_category; /* Some callbacks want to see "matches source name but unrecognized * for want of tag" as a source file. They distinguish this from * "matches unrecognized name" or "doesn't match any pattern". */ if (options->treat_unrecognized_source_as_source && (this_files_category == arch_inventory_unrecognized)) { this_files_category = arch_inventory_source; } if (this_files_category & options->categories) { callback (rel_file, &stat_buf, this_files_category, id, 1, closure, escape_classes); } if (this_files_category != arch_inventory_source) goto next_file; lim_free (0, id); id = 0; /* recurse into directories, or plan to later. */ if (S_ISDIR (stat_buf.st_mode)) { if ((x < n_files) && !right_order_for_recursion (file, files[x])) { deferred_recursions[deferred_recursions_tail] = x - 1; is_deferred_nested[deferred_recursions_tail] = 0; ++deferred_recursions_tail; lim_free (0, rel_file); rel_file = 0; continue; } handle_deferred: arch_inventory_traversal_internal (options, rel_file, callback, closure, id_tagging_shortcut, explicit_skips, escape_classes); } goto next_file; } } else goto unrecognized_file; } for (x = 0; x < n_files; ++x) { lim_free (0, files[x]); } ar_free ((void **)&files, 0); lim_free (0, rel_file); ar_free ((void **)&deferred_recursions, 0); ar_free ((void **)&is_deferred_nested, 0); if (dir_regexps) { free_directory_regexps (dir_regexps); lim_free (0, dir_regexps); } } static int cmp_files (const void * va, const void * vb) { char * a; char * b; a = *(char **)va; b = *(char **)vb; return str_cmp (a, b); } static int right_order_for_recursion (char * a, char * b) { /* a and b are already in lexical order (a < b) */ while ((*a == *b) && *a && *b) { ++a; ++b; } if (!*a) { /* Does "A/" come before "B" in an alphabetical listing? */ return (*b > '/'); } else if (!*b) { /* Does "B/" come after "A" in an aphabetical listing? */ return (*a < '/'); } else { invariant (*a < *b); return 1; } } static int contains_illegal_character (const char * filename) { int x; for (x = 0; filename[x]; ++x) { invariant (filename[x] != '/'); if (char_is_non_ascii (((t_uchar *)filename)[x])) return 1; } return 0; } static int filename_matches (regex_t * pattern, const char * filename) { int answer; answer = regexec (pattern, filename, 0, 0, 0); if (answer == REG_NOMATCH) return 0; if (answer == REG_NOERROR) return 1; panic ("unexpected regexec error in arch_inventory_traversal"); return -1; } static int is_control_file (const char * rel_file, const char * filename) { static int compiled = 0; static regex_t control_pattern = {0,}; if (!compiled) { int re_error; re_error = regcomp (&control_pattern, "^((.*/)?(\\.arch-ids(/(=id|[^/]*\\.id))?|\\{arch\\}((/[a-zA-Z=][^/~]*)(/[0-9a-zA-Z=][^/~]*)*)?|\\{arch\\}/\\.arch-project-tree|\\.arch-inventory))$", REG_EXTENDED); invariant (!re_error); compiled = 1; } return filename_matches (&control_pattern, rel_file); } int arch_is_control_file (const char * rel_file, const char * filename) { return is_control_file (rel_file, filename); } static int is_nested_tree (const char * path) { int errn; t_uchar * ctl_file; struct stat stat_buf; ctl_file = file_name_in_vicinity (0, path, "{arch}"); if (0 > vu_lstat (&errn, ctl_file, &stat_buf)) { if (errn == ENOENT) { lim_free (0, ctl_file); return 0; } else { panic ("i/o error in arch_inventory_traversal/is_nested_tree"); return 0; /* notreached */ } } lim_free (0, ctl_file); return 1; } static int is_comment_line (const t_uchar * line, long len) { return !len || char_is_space (line[0]) || (line[0] == '#'); } static int sets_re (const char * kw, char ** re, const t_uchar * line, long len) { int l; t_uchar * tem; t_uchar * tem2; l = str_length (kw); if (len < (l + 1)) return 0; if (str_cmp_prefix (kw, line) || !char_is_space (line[l])) return 0; line += l; len -= l; while (len && char_is_space (line[0])) { ++line; --len; } while (len && char_is_space (line [len - 1])) --len; if (!*re) { tem2 = str_save_n (0, line, len); tem = str_alloc_cat (0, "(", tem2); tem = str_realloc_cat (0, tem, ")"); lim_free (0, tem2); *re = tem; } else { tem2 = str_save_n (0, line, len); tem = str_alloc_cat (0, "|(", tem2); tem = str_realloc_cat (0, tem, ")"); *re = str_realloc_cat (0, *re, tem); lim_free (0, tem); lim_free (0, tem2); } return 1; } static int sets_id_tagging_method (const char * kw, enum arch_id_tagging_method * method_var, enum arch_inventory_category * untagged_category_var, enum arch_id_tagging_method method, enum arch_inventory_category untagged_category, const t_uchar * line, long len) { int l; l = str_length (kw); if (len < (l + 1)) return 0; if (str_cmp_prefix (kw, line) || !char_is_space (line[l])) return 0; *method_var = method; *untagged_category_var = untagged_category; return 1; } static int sets_untagged_source_disposition (enum arch_inventory_category * untagged_category_var, const t_uchar * saved_line, long saved_len) { const t_uchar * line = saved_line; long len = saved_len; t_uchar * kw = "untagged-source"; int l; t_uchar * spec = 0; enum arch_inventory_category cat; l = str_length (kw); if (len < (l + 1)) return 0; if (str_cmp_prefix (kw, line) || !char_is_space (line[l])) return 0; len -= l; line += l; while (len && char_is_blank (line[0])) { ++line; --len; } { const t_uchar * tmp; tmp = line; while (len && char_is_alpha (line[0])) { ++line; --len; } spec = str_save_n (0, tmp, line - tmp); } while (len && char_is_blank (line[0])) { ++line; --len; } if (len && (line[0] != '\n')) { syntax_error: safe_printfmt (2, "arch: syntax error in =tagging-method:\n %.*s\n", (int)saved_len, saved_line); exit (2); } else { if (!str_cmp (spec, "source")) { cat = arch_inventory_source; } else if (!str_cmp (spec, "precious")) { cat = arch_inventory_precious; } else if (!str_cmp (spec, "backup")) { cat = arch_inventory_backup; } else if (!str_cmp (spec, "junk")) { cat = arch_inventory_junk; } else if (!str_cmp (spec, "unrecognized")) { cat = arch_inventory_unrecognized; } else goto syntax_error; *untagged_category_var = cat; } lim_free (0, spec); return 1; } static void read_directory_regexps (struct directory_regexps * regexps, const char * dir_name) { char * excludes = 0; char * junk = 0; char * backup = 0; char * precious = 0; char * unrecognized = 0; char * source = 0; t_uchar * file_name = 0; int fd; file_name = file_name_in_vicinity (0, dir_name, ".arch-inventory"); fd = safe_open (file_name, O_RDONLY, 0); while (1) { t_uchar * line; long len; safe_next_line (&line, &len, fd); if (!len) break; (void)(!is_comment_line (line, len) && !sets_re ("exclude", &excludes, line, len) && !sets_re ("junk", &junk, line, len) && !sets_re ("backup", &backup, line, len) && !sets_re ("precious", &precious, line, len) && !sets_re ("unrecognized", &unrecognized, line, len) && !sets_re ("source", &source, line, len)); } safe_close (fd); mem_set0((t_uchar*)regexps->regexps, sizeof regexps->regexps); if (excludes) { if (regcomp (®exps->storage.excludes_pattern, excludes, REG_EXTENDED)) { panic_msg ("bogus tagging-method regexp for `excludes' in "); panic (dir_name); } DIR_REGEXP(regexps, excludes) = ®exps->storage.excludes_pattern; } if (junk) { if (regcomp (®exps->storage.junk_pattern, junk, REG_EXTENDED)) { panic_msg ("bogus tagging-method regexp for `junk' in "); panic (dir_name); } DIR_REGEXP(regexps, junk) = ®exps->storage.junk_pattern; } if (backup) { if (regcomp (®exps->storage.backup_pattern, backup, REG_EXTENDED)) { panic_msg ("bogus tagging-method regexp for `backup' in "); panic (dir_name); } DIR_REGEXP(regexps, backup) = ®exps->storage.backup_pattern; } if (precious) { if (regcomp (®exps->storage.precious_pattern, precious, REG_EXTENDED)) { panic_msg ("bogus tagging-method regexp for `precious' in "); panic (dir_name); } DIR_REGEXP(regexps, precious) = ®exps->storage.precious_pattern; } if (unrecognized) { if (regcomp (®exps->storage.unrecognized_pattern, unrecognized, REG_EXTENDED)) { panic_msg ("bogus tagging-method regexp for `unrecognized' in "); panic (dir_name); } DIR_REGEXP(regexps, unrecognized) = ®exps->storage.unrecognized_pattern; } if (source) { if (regcomp (®exps->storage.source_pattern, source, REG_EXTENDED)) { panic_msg ("bogus tagging-method regexp for `source' in "); panic (dir_name); } DIR_REGEXP(regexps, source) = ®exps->storage.source_pattern; } lim_free (0, file_name); lim_free (0, excludes); lim_free (0, junk); lim_free (0, backup); lim_free (0, precious); lim_free (0, unrecognized); lim_free (0, source); } static void free_directory_regexps (struct directory_regexps * regexps) { int i; for (i = 0; i < sizeof regexps->regexps / sizeof *regexps->regexps; ++i) if (regexps->regexps[i]) regfree (regexps->regexps[i]); } /** * \brief normalise a provided path on string alone. * * \return a normalised path. */ t_uchar * normal_from_path (t_uchar const *path) { int from=0; int length = str_length (path); t_uchar *answer; if (!length) return NULL; /* strip back to the first path element */ if (path[0] == '/') { from = 1; length -= 1; } else if (!str_cmp_prefix ("./", path)) { from = 2; length -= 2; } if (!length) return NULL; /* now knock of any trailing / */ if (path[from + length - 1] == '/') length -= 1; if (!length) return NULL; answer = str_save_n (0, &path [from], length); return str_replace (answer, str_alloc_cat (0, "./", answer)); } /** * \brief normalise a provided path as a prefix for filtering against * \return a normalised path. */ t_uchar * prefix_from_path (t_uchar const *path) { t_uchar *answer; answer = normal_from_path (path); if (!answer) return NULL; return str_replace (answer, str_alloc_cat (0, answer, "/")); } /* tag: Tom Lord Wed May 14 09:47:16 2003 (invent.c) */ tla-1.3.5+dfsg/src/tla/libarch/make-changeset.h0000644000175000017500000000747710457622000017750 0ustar useruser/* make-changeset.h: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__MAKE_CHANGESET_H #define INCLUDE__LIBARCH__MAKE_CHANGESET_H #include "hackerlab/machine/types.h" #include "hackerlab/os/stdarg.h" #include "tla/libawk/relational.h" #include "tla/libawk/associative.h" #include "tla/libarch/inv-ids.h" #include "tla/libarch/changeset-utils.h" #include "tla/libarch/changeset-report.h" typedef void (*arch_changeset_report_callback) (void * thunk, const char * fmt, va_list ap); struct arch_make_changeset_report { arch_changeset_report_callback callback; void * thunk; struct arch_changeset_inventory orig_index; struct arch_changeset_inventory mod_index; assoc_table orig_dir_id_of; assoc_table orig_dir_loc_of; assoc_table orig_file_id_of; assoc_table orig_file_loc_of; assoc_table mod_dir_id_of; assoc_table mod_dir_loc_of; assoc_table mod_file_id_of; assoc_table mod_file_loc_of; assoc_table orig_container_dir_id_of_dir_id; assoc_table orig_container_dir_id_of_file_id; assoc_table mod_container_dir_id_of_dir_id; assoc_table mod_container_dir_id_of_file_id; rel_table renamed_dirs; rel_table renamed_files; rel_table modified_files; rel_table perms_changed_files; rel_table perms_changed_dirs; rel_table added_files; rel_table added_dirs; rel_table removed_files; rel_table removed_dirs; }; /* automatically generated __STDC__ prototypes */ extern void arch_free_make_changeset_report_data (struct arch_make_changeset_report * report); extern void arch_make_changeset (struct arch_make_changeset_report * report, const t_uchar * orig_spec, const t_uchar * mod_spec, const t_uchar * dest_spec, enum arch_id_tagging_method method, enum arch_inventory_category untagged_source_category, rel_table limits_spec, assoc_table inode_sig_shortcuts_of_mod, int link_same, int escape_classes); extern void arch_make_empty_changeset (struct arch_make_changeset_report * make_report, struct arch_changeset_report * report, const t_uchar * changeset_path); extern void arch_changeset_rewrite_indexes (const t_uchar * changeset_path, struct arch_changeset_report * report); extern int arch_changeset_add_file (t_uchar ** path_ret, struct arch_changeset_report * report, struct arch_make_changeset_report * make_report, const t_uchar * changeset_path, const t_uchar * mod_loc, const t_uchar * id); extern int arch_changeset_add_diffs (struct arch_changeset_report * report, struct arch_make_changeset_report * make_report, const t_uchar * changeset_path, const t_uchar * orig_loc, const t_uchar * mod_loc, const t_uchar * id); extern void arch_make_changeset_compute_container_map (assoc_table * out, assoc_table dir_id_of, rel_table index); #endif /* INCLUDE__LIBARCH__MAKE_CHANGESET_H */ /* tag: Tom Lord Sat Jan 5 15:26:10 2002 (make-changeset.h) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-parse-package-name.c0000644000175000017500000001256510457622000021243 0ustar useruser/* cmd-parse-package-name.c: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "config-options.h" #include "hackerlab/cmd/main.h" #include "tla/libarch/namespace.h" #include "tla/libarch/cmd-parse-package-name.h" static t_uchar * usage = "[options] name"; static t_uchar * version_string = (cfg__std__package " from regexps.com\n" "\n" "Copyright 2003 Tom Lord\n" "\n" "This is free software; see the source for copying conditions.\n" "There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\n" "PARTICULAR PURPOSE.\n" "\n" "Report bugs to " cfg__tla_bug_mail ".\n" "\n" cfg__std__release_id_string "\n"); #define OPTS(OP) \ OP (opt_help_msg, "h", "help", 0, \ "Display a help message and exit.") \ OP (opt_long_help, "H", 0, 0, \ "Display a verbose help message and exit.") \ OP (opt_version, "V", "version", 0, \ "Display a release identifier string\n" \ "and exit.") \ OP (opt_archive, "A", "archive", 1, \ "Override `my-default-archive'") \ OP (opt_arch, "a", "arch", 0, \ "print the archive name") \ OP (opt_non_arch, 0, "non-arch", 0, \ "print the non-archive part of the name") \ OP (opt_category, "c", "category", 0, \ "print the category name") \ OP (opt_branch, "b", "branch", 0, \ "print the branch name") \ OP (opt_package, "p", "package", 0, \ "print the package name") \ OP (opt_vsn, "v", "vsn", 0, \ "print the version id") \ OP (opt_pkg_version, 0, "package-version", 0, \ "print the category--branch--version") \ OP (opt_lvl, "l", "lvl", 0, \ "print the patch level") \ OP (opt_patch_lvl, 0, "patch-level", 0, \ "synonym for --lvl") t_uchar arch_cmd_parse_package_name_help[] = ("parse a package name\n" "Options -b, -B, -p, -v, and -l cancel each other.\n" "\n" "For -b, -v, and -l, just the id string is printed\n" "without \"--\".\n" "\n" "For -p, the output is \"--\".\n"); enum options { OPTS (OPT_ENUM) }; static struct opt_desc opts[] = { OPTS (OPT_DESC) {-1, 0, 0, 0, 0} }; int arch_cmd_parse_package_name (t_uchar * program_name, int argc, char * argv[]) { int o; struct opt_parsed * option; t_uchar * default_archive; enum arch_parse_package_name_type part_wanted; t_uchar * spec; t_uchar * answer; default_archive = 0; part_wanted = arch_ret_package; safe_buffer_fd (1, 0, O_WRONLY, 0); option = 0; while (1) { o = opt_standard (lim_use_must_malloc, &option, opts, &argc, argv, program_name, usage, version_string, arch_cmd_parse_package_name_help, opt_help_msg, opt_long_help, opt_version); if (o == opt_none) break; switch (o) { default: safe_printfmt (2, "unhandled option `%s'\n", option->opt_string); panic ("internal error parsing arguments"); usage_error: opt_usage (2, argv[0], program_name, usage, 1); exit (1); /* bogus_arg: */ safe_printfmt (2, "ill-formed argument for `%s' (`%s')\n", option->opt_string, option->arg_string); goto usage_error; case opt_archive: { default_archive = str_save (0, option->arg_string); break; } case opt_arch: { part_wanted = arch_ret_archive; break; } case opt_non_arch: { part_wanted = arch_ret_non_archive; break; } case opt_category: { part_wanted = arch_ret_category; break; } case opt_branch: { part_wanted = arch_ret_branch; break; } case opt_package: { part_wanted = arch_ret_package; break; } case opt_vsn: { part_wanted = arch_ret_version; break; } case opt_pkg_version: { part_wanted = arch_ret_package_version; break; } case opt_lvl: case opt_patch_lvl: { part_wanted = arch_ret_patch_level; break; } } } if (argc != 2) goto usage_error; spec = argv[1]; if (!arch_valid_package_name (spec, arch_maybe_archive, arch_req_package, 1)) { safe_printfmt (2, "%s: invalid arch id (%s)\n", argv[0], spec); exit (1); } answer = arch_parse_package_name (part_wanted, default_archive, spec); safe_printfmt (1, "%s\n", answer); return 0; } /* tag: Tom Lord Mon May 12 11:13:10 2003 (parse-package-name.c) */ tla-1.3.5+dfsg/src/tla/libarch/file-diffs.h0000644000175000017500000000121010457622000017057 0ustar useruser/* file-diffs.h: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__FILE_DIFFS_H #define INCLUDE__LIBARCH__FILE_DIFFS_H /* automatically generated __STDC__ prototypes */ extern int arch_file_get_or_diff (int out_fd, t_uchar * tree_root, t_uchar * mod_loc, t_uchar * archive, t_uchar * revision, int diff, int new_is_null, int escape_classes); #endif /* INCLUDE__LIBARCH__FILE_DIFFS_H */ /* tag: Tom Lord Sat Jan 5 15:26:10 2002 (file-diffs.h) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-logs.c0000644000175000017500000002014710457622000016561 0ustar useruser/* cmd-logs.c * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "config-options.h" #include "hackerlab/cmd/main.h" #include "tla/libfsutils/file-contents.h" #include "tla/libarch/namespace.h" #include "tla/libarch/project-tree.h" #include "tla/libarch/patch-logs.h" #include "tla/libarch/cmd-logs.h" static t_uchar * usage = "[options] [[archive]/version ...]"; static t_uchar * version_string = (cfg__std__package " from regexps.com\n" "\n" "Copyright 2003 Tom Lord\n" "\n" "This is free software; see the source for copying conditions.\n" "There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\n" "PARTICULAR PURPOSE.\n" "\n" "Report bugs to " cfg__tla_bug_mail ".\n" "\n" cfg__std__release_id_string "\n"); #define OPTS(OP) \ OP (opt_help_msg, "h", "help", 0, \ "Display a help message and exit.") \ OP (opt_long_help, "H", 0, 0, \ "Display a verbose help message and exit.") \ OP (opt_version, "V", "version", 0, \ "Display a release identifier string\n" \ "and exit.") \ OP (opt_archive, "A", "archive", 1, \ "Override `my-default-archive'") \ OP (opt_dir, "d", "dir DIR", 1, \ "cd to DIR first") \ OP (opt_reverse, "r", "reverse", 0, \ "sort from newest to oldest") \ OP (opt_summary, "s", "summary", 0, \ "print the summary of each patch") \ OP (opt_creator, "c", "creator", 0, \ "print the creator of each patch") \ OP (opt_date, "D", "date", 0, \ "print the date of each patch") \ OP (opt_local_merges, 0, "local-merges", 0, \ "list merges from the same archive") \ OP (opt_foreign_merges, 0, "foreign-merges", 0, \ "list merges from other archives") \ OP (opt_all_merges, 0, "merges", 0, \ "list all merges") \ OP (opt_full, "f", "full", 0, \ "print full patch level names") t_uchar arch_cmd_logs_help[] = ("list patch logs for a version in a project tree\n" "Print the list of patches applied to a project tree\n" "DIR (or the current directory) from VERSION.\n"); enum options { OPTS (OPT_ENUM) }; static struct opt_desc opts[] = { OPTS (OPT_DESC) {-1, 0, 0, 0, 0} }; int arch_cmd_logs (t_uchar * program_name, int argc, char * argv[]) { int o; struct opt_parsed * option; t_uchar * default_archive = 0; char * dir = 0; int reverse = 0; int summarized_headers = 0; int full = 0; default_archive = 0; dir = str_save (0, "."); safe_buffer_fd (1, 0, O_WRONLY, 0); option = 0; while (1) { o = opt_standard (lim_use_must_malloc, &option, opts, &argc, argv, program_name, usage, version_string, arch_cmd_logs_help, opt_help_msg, opt_long_help, opt_version); if (o == opt_none) break; switch (o) { default: safe_printfmt (2, "unhandled option `%s'\n", option->opt_string); panic ("internal error parsing arguments"); usage_error: opt_usage (2, argv[0], program_name, usage, 1); exit (1); /* bogus_arg: */ safe_printfmt (2, "ill-formed argument for `%s' (`%s')\n", option->opt_string, option->arg_string); goto usage_error; case opt_archive: { default_archive = str_save (0, option->arg_string); break; } case opt_dir: { dir = str_save (0, option->arg_string); break; } case opt_reverse: { reverse = 1; break; } case opt_summary: { summarized_headers |= arch_include_summary; break; } case opt_creator: { summarized_headers |= arch_include_creator; break; } case opt_date: { summarized_headers |= arch_include_date; break; } case opt_local_merges: { summarized_headers |= arch_include_local_merges; break; } case opt_foreign_merges: { summarized_headers |= arch_include_foreign_merges; break; } case opt_all_merges: { summarized_headers |= arch_include_local_merges; summarized_headers |= arch_include_foreign_merges; break; } case opt_full: { full = 1; break; } } } { t_uchar * tree_root = 0; char ** new_argv = 0; int a; tree_root = arch_tree_root (0, dir, 0); if (!tree_root) { safe_printfmt (2, "%s: not in project tree (%s)\n", argv[0], dir); exit (1); } if (argc < 2) { t_uchar * tree_version; tree_version = arch_tree_version (tree_root); if (!tree_version) { safe_printfmt (2, "%s: no default tree version\n tree: %s\n", argv[0], tree_root); exit (1); } *(char **)ar_push ((void **)&new_argv, 0, sizeof (char *)) = str_save (0, argv[0]); *(char **)ar_push ((void **)&new_argv, 0, sizeof (char *)) = str_save (0, tree_version); argc = 2; argv = new_argv; lim_free (0, tree_version); } if (default_archive) { if (!arch_valid_archive_name (default_archive)) { safe_printfmt (2, "%s: invalid archive name (%s)\n", argv[0], default_archive); exit (1); } } for (a = 1; a < argc; ++a) { t_uchar * version_spec; t_uchar * archive = 0; t_uchar * version = 0; t_uchar * fqversion = 0; rel_table log_ls = rel_table_nil; int x; version_spec = argv[a]; if (!arch_valid_package_name (version_spec, arch_maybe_archive, arch_req_version, 0)) { safe_printfmt (2, "%s: invalid version name (%s)\n", argv[0], version_spec); exit (1); } archive = arch_parse_package_name (arch_ret_archive, default_archive, version_spec); version = arch_parse_package_name (arch_ret_non_archive, 0, version_spec); fqversion = arch_fully_qualify (archive, version); log_ls = arch_logs (tree_root, archive, version, 0); arch_sort_table_by_patch_level_field (reverse, log_ls, 0); for (x = 0; x < rel_n_records (log_ls); ++x) { if (!full) safe_printfmt (1, "%s\n", rel_peek_str (log_ls, x, 0)); else safe_printfmt (1, "%s--%s\n", fqversion, rel_peek_str (log_ls, x, 0)); if (summarized_headers) { t_uchar * log = 0; assoc_table headers = 0; t_uchar * body = 0; log = file_contents (rel_peek_str (log_ls, x, 1)); arch_parse_log (0, &headers, (const t_uchar **)&body, log); arch_print_headers_summary (1, 4, headers, summarized_headers); lim_free (0, log); free_assoc_table (headers); lim_free (0, body); } } lim_free (0, archive); lim_free (0, version); lim_free (0, fqversion); rel_free_table (log_ls); } lim_free (0, tree_root); if (new_argv) { for (a = 0; a < argc; ++a) { lim_free (0, new_argv[a]); } ar_free ((void **)&new_argv, 0); } } lim_free (0, default_archive); lim_free (0, dir); return 0; } /* tag: Tom Lord Tue May 13 13:19:49 2003 (log-ls.c) */ tla-1.3.5+dfsg/src/tla/libarch/pfs-sftp-version.c0000644000175000017500000000756110457622000020306 0ustar useruser/* pfs-sftp-version.c: * **************************************************************** * Copyright (C) 2004 Johannes Berg * Copyright (C) 2006 Ludovic Courtès * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "config-options.h" #include "hackerlab/os/stdlib.h" #include "hackerlab/machine/types.h" #include "hackerlab/bugs/panic.h" #include "hackerlab/os/stdarg.h" #include "hackerlab/os/sys/types.h" #include "hackerlab/os/unistd.h" #include "hackerlab/os/sys/wait.h" #include "hackerlab/os/signal.h" #include "hackerlab/char/str.h" #include "hackerlab/vu/safe-printfmt.h" #include "tla/libarch/pfs-sftp-version.h" /* SSH implementation descriptor. */ struct arch_ssh_type_desc { enum arch_ssh_type type; const t_uchar *binary_name; }; static const struct arch_ssh_type_desc ssh_type_descriptors[] = { { ssh_type_lsh, "lshc" }, /* GNU lsh */ { ssh_type_openssh, "ssh" }, /* OpenSSH */ { ssh_type_psftp, "psftp" }, /* Putty */ { ssh_type_fsecure3, "ssh" }, /* F-Secure SSH (non-free) */ { ssh_type_unknown, 0 } }; static enum arch_ssh_type identify_ssh_type (const t_uchar *ssh_name) { enum arch_ssh_type ssh_type = ssh_type_unknown; if (str_casecmp (ssh_name, "openssh") == 0) ssh_type = ssh_type_openssh; else if (str_casecmp (ssh_name, "lsh") == 0) ssh_type = ssh_type_lsh; else if (str_casecmp (ssh_name, "fsecure") == 0) ssh_type = ssh_type_fsecure3; else if (str_casecmp (ssh_name, "psftp") == 0) ssh_type = ssh_type_psftp; return ssh_type; } static const t_uchar * ssh_binary_name (enum arch_ssh_type ssh_type) { const struct arch_ssh_type_desc *td; for (td = &ssh_type_descriptors[0]; td->type != ssh_type_unknown; td++) { if (td->type == ssh_type) break; } if (td->type == ssh_type_unknown) return NULL; return td->binary_name; } /* Default SSH type and binary, both determined at configure-time with `--with-ssh-type' and `--with-ssh-binary'. */ static enum arch_ssh_type default_ssh_type (void) { static enum arch_ssh_type default_type = ssh_type_unknown; if (default_type == ssh_type_unknown) { #ifdef cfg__ssh_type if (str_length (cfg__ssh_type) == 0) default_type = ssh_type_openssh; else /* We're hoping that `cfg__ssh_type' contains a valid SSH type name, otherwise `ssh_type_unknown' will be yielded. */ default_type = identify_ssh_type (cfg__ssh_type); #else /* Assume openssh by default. */ default_type = ssh_type_openssh; #endif } return default_type; } static const t_uchar * default_ssh_binary (void) { static t_uchar openssh_binary[] = "ssh"; #ifdef cfg__ssh_binary static t_uchar default_binary[] = cfg__ssh_binary; if (str_length (default_binary) > 0) return default_binary; #endif return openssh_binary; } enum arch_ssh_type arch_pfs_sftp_ssh_type (void) { enum arch_ssh_type ssh_type = ssh_type_unknown; t_uchar * env_type = (t_uchar *)getenv ("ARCH_SSH_TYPE"); if (env_type) { ssh_type = identify_ssh_type (env_type); if (ssh_type == ssh_type_unknown) { safe_printfmt (2, "ARCH_SSH_TYPE: %s: unknown SSH implementation type\n", env_type); safe_printfmt (2, "supported values: \"openssh\", \"lsh\", \"fsecure\", \"psftp\"\n"); exit (2); } } else ssh_type = default_ssh_type (); return ssh_type; } const t_uchar * arch_pfs_sftp_ssh_binary (enum arch_ssh_type ssh_type) { t_uchar *env_binary = (t_uchar *)getenv ("ARCH_SSH_BINARY"); if (env_binary) return env_binary; if (ssh_type == default_ssh_type ()) /* The result here can be different from the standard binary name corresponding to SSH_TYPE. */ return default_ssh_binary (); return ssh_binary_name (ssh_type); } /* tag: pfs-sftp-version.c by Johannes Berg (23:40 Feb 15 2004) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-branches.h0000644000175000017500000000124210457622000017402 0ustar useruser/* cmd-branches.h: * **************************************************************** * Copyright (C) 2003 Tom Lord, Stig Brautaset * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__CMD_BRANCHES_H #define INCLUDE__LIBARCH__CMD_BRANCHES_H #include "hackerlab/machine/types.h" extern t_uchar arch_cmd_branches_help[]; /* automatically generated __STDC__ prototypes */ extern int arch_cmd_branches (t_uchar * program_name, int argc, char * argv[]); #endif /* INCLUDE__LIBARCH__CMD_BRANCHES_H */ /* tag: Stig Brautaset Sat Jun 7 13:01:04 BST 2003 (cmd-branches.h) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-whereis-archive.h0000644000175000017500000000132310457622000020702 0ustar useruser/* cmd-whereis-archive.h: * **************************************************************** * Copyright (C) 2003 Tom Lord, Stig Brautaset * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__CMD_WHEREIS_ARCHIVE_H #define INCLUDE__LIBARCH__CMD_WHEREIS_ARCHIVE_H #include "hackerlab/machine/types.h" extern t_uchar arch_cmd_whereis_archive_help[]; /* automatically generated __STDC__ prototypes */ extern int arch_cmd_whereis_archive (t_uchar * program_name, int argc, char * argv[]); #endif /* INCLUDE__LIBARCH__CMD_WHEREIS_ARCHIVE_H */ /* tag: Stig Brautaset Sat Jun 7 17:59:11 BST 2003 (cmd-whereis-archive.h) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-lock-pristine.c0000644000175000017500000001437110457622000020402 0ustar useruser/* cmd-lock-pristine.c * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "config-options.h" #include "hackerlab/cmd/main.h" #include "tla/libarch/namespace.h" #include "tla/libarch/project-tree.h" #include "tla/libarch/pristines.h" #include "tla/libarch/cmd-lock-pristine.h" static t_uchar * usage = "[options] revision"; static t_uchar * version_string = (cfg__std__package " from regexps.com\n" "\n" "Copyright 2003 Tom Lord\n" "\n" "This is free software; see the source for copying conditions.\n" "There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\n" "PARTICULAR PURPOSE.\n" "\n" "Report bugs to " cfg__tla_bug_mail ".\n" "\n" cfg__std__release_id_string "\n"); #define OPTS(OP) \ OP (opt_help_msg, "h", "help", 0, \ "Display a help message and exit.") \ OP (opt_long_help, "H", 0, 0, \ "Display a verbose help message and exit.") \ OP (opt_version, "V", "version", 0, \ "Display a release identifier string\n" \ "and exit.") \ OP (opt_archive, "A", "archive", 1, \ "Override `my-default-archive'") \ OP (opt_dir, "d", "dir DIR", 1, \ "cd to DIR first") \ OP (opt_unlock, "u", "unlock", 0, \ "unlock, rather than lock") t_uchar arch_cmd_lock_pristine_help[] = ("lock (or unlock) a pristine tree\n" "Lock the indicated pristine REVISION in the project tree containing\n" "DIR (or the current directory). This prevents the revision from being\n" "automatically recycled.\n"); enum options { OPTS (OPT_ENUM) }; static struct opt_desc opts[] = { OPTS (OPT_DESC) {-1, 0, 0, 0, 0} }; int arch_cmd_lock_pristine (t_uchar * program_name, int argc, char * argv[]) { int o; struct opt_parsed * option; t_uchar * dir = 0; t_uchar * default_archive = 0; int unlock = 0; dir = str_save (0, "."); safe_buffer_fd (1, 0, O_WRONLY, 0); option = 0; while (1) { o = opt_standard (lim_use_must_malloc, &option, opts, &argc, argv, program_name, usage, version_string, arch_cmd_lock_pristine_help, opt_help_msg, opt_long_help, opt_version); if (o == opt_none) break; switch (o) { default: safe_printfmt (2, "unhandled option `%s'\n", option->opt_string); panic ("internal error parsing arguments"); usage_error: opt_usage (2, argv[0], program_name, usage, 1); exit (1); /* bogus_arg: */ safe_printfmt (2, "ill-formed argument for `%s' (`%s')\n", option->opt_string, option->arg_string); goto usage_error; case opt_archive: { lim_free (0, default_archive); default_archive = str_save (0, option->arg_string); break; } case opt_dir: { lim_free (0, dir); dir = str_save (0, option->arg_string); break; } case opt_unlock: { unlock = 1; break; } } } if (argc != 2) goto usage_error; { t_uchar * revspec; t_uchar * tree_root = 0; t_uchar * archive = 0; t_uchar * revision = 0; t_uchar * locked_pristine_path = 0; t_uchar * unlocked_pristine_path = 0; if (default_archive && !arch_valid_archive_name (default_archive)) { safe_printfmt (2, "%s: invalid archive name (%s)\n", argv[0], default_archive); exit (2); } revspec = argv[1]; if (!arch_valid_package_name (revspec, arch_maybe_archive, arch_req_patch_level, 0)) { safe_printfmt (2, "%s: invalid revision name (%s)\n", argv[0], revspec); exit (2); } archive = arch_parse_package_name (arch_ret_archive, default_archive, revspec); revision = arch_parse_package_name (arch_ret_non_archive, 0, revspec); tree_root = arch_tree_root (0, dir, 0); if (!tree_root) { safe_printfmt (2, "%s: directory is not a project tree (%s)\n", argv[0], dir); exit (2); } locked_pristine_path = arch_find_pristine (0, tree_root, archive, revision, arch_locked_pristine, arch_tree_pristine_search); unlocked_pristine_path = arch_find_pristine (0, tree_root, archive, revision, arch_unlocked_pristine, arch_tree_pristine_search); if (!unlock && !unlocked_pristine_path) { safe_printfmt (2, "%s: tree does not have a locked pristine for %s/%s\n", argv[0], archive, revision); exit (1); } if (!unlock && locked_pristine_path) { safe_printfmt (2, "%s: tree already has a locked pristine for %s/%s\n", argv[0], archive, revision); exit (1); } if (unlock && !locked_pristine_path) { safe_printfmt (2, "%s: tree does not have an unlocked pristine for %s/%s\n", argv[0], archive, revision); exit (1); } if (unlock && unlocked_pristine_path) { safe_printfmt (2, "%s: tree already has an unlocked pristine for %s/%s\n", argv[0], archive, revision); exit (1); } if (unlock) arch_unlock_pristine (tree_root, archive, revision); else arch_lock_pristine (tree_root, archive, revision); safe_printfmt (1, "* %s pristine tree for %s/%s\n", (unlock ? "unlocked" : "locked"), archive, revision); lim_free (0, tree_root); lim_free (0, archive); lim_free (0, revision); lim_free (0, locked_pristine_path); lim_free (0, unlocked_pristine_path); } lim_free (0, dir); lim_free (0, default_archive); return 0; } /* tag: Tom Lord Fri May 30 18:59:17 2003 (lock-pristine.c) */ tla-1.3.5+dfsg/src/tla/libarch/archive-pfs.c0000644000175000017500000020423610457622000017266 0ustar useruser/* archive-pfs.c: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/bugs/panic.h" #include "hackerlab/os/errno.h" #include "hackerlab/os/errno-to-string.h" #include "hackerlab/mem/mem.h" #include "hackerlab/char/str.h" #include "hackerlab/hash/md5.h" #include "hackerlab/hash/sha1.h" #include "hackerlab/fs/file-names.h" #include "hackerlab/fs/cwd.h" #include "hackerlab/vu/safe.h" #include "tla/libfsutils/dir-listing.h" #include "tla/libfsutils/file-contents.h" #include "tla/libfsutils/copy-file.h" #include "tla/libfsutils/read-line.h" #include "tla/libfsutils/rmrf.h" #include "tla/libfsutils/tmp-files.h" #include "tla/libarch/chatter.h" #include "tla/libarch/namespace.h" #include "tla/libarch/archives.h" #include "tla/libarch/archive-version.h" #include "tla/libarch/pfs.h" #include "tla/libarch/archive-pfs.h" #include "tla/libarch/pfs-signatures.h" #include "tla/libarch/exec.h" /* __STDC__ prototypes for static functions */ static void pfs_close (struct arch_archive * a); static t_uchar * pfs_archive_version (struct arch_archive * a); static rel_table pfs_categories (struct arch_archive * a); static rel_table pfs_branches (struct arch_archive * a, const t_uchar * category); static rel_table pfs_versions (struct arch_archive * a, const t_uchar * package); static rel_table pfs_revisions (struct arch_archive * a, const t_uchar * version); static t_uchar * pfs_archive_log (struct arch_archive * a, const t_uchar * revision); static int pfs_revision_type (enum arch_revision_type * type, int * archive_cached, struct arch_archive * a, const t_uchar * revision); static int list_contains (rel_table files, const t_uchar * name); static void pfs_get_patch (int out_fd, struct arch_archive * a, const t_uchar * revision); static void pfs_get_cached (int out_fd, struct arch_archive * a, const t_uchar * revision); static void pfs_get_import (int out_fd, struct arch_archive * a, const t_uchar * revision); static t_uchar * pfs_get_continuation (struct arch_archive * a, const t_uchar * revision); static t_uchar * pfs_get_meta_info (struct arch_archive * a, const t_uchar * meta_info_name); static int pfs_make_category (t_uchar ** errstr, struct arch_archive * a, const t_uchar * category); static int pfs_make_branch (t_uchar ** errstr, struct arch_archive * a, const t_uchar * branch); static int pfs_make_version (t_uchar ** errstr, struct arch_archive * a, const t_uchar * version); static int pfs_lock_revision (t_uchar ** errstr, struct arch_archive * a, const t_uchar * version, const t_uchar * prev_level, const t_uchar * uid, const t_uchar * txn_id, const t_uchar * new_level); static int pfs_revision_ready (t_uchar ** errstr, struct arch_archive * a, const t_uchar * version, const t_uchar * prev_level, const t_uchar * uid, const t_uchar * txn_id, const t_uchar * new_level); static int pfs_finish_revision (t_uchar ** errstr, struct arch_archive * a, const t_uchar * version, const t_uchar * prev_level, const t_uchar * uid, const t_uchar * txn_id, const t_uchar * new_level); static enum arch_revision_lock_state pfs_lock_state (t_uchar ** prev_level_ret, t_uchar ** uid_ret, t_uchar ** txn_id_ret, struct arch_archive * a, const t_uchar * version); static int pfs_break_revision_lock (t_uchar ** errstr, struct arch_archive * a, const t_uchar * version, const t_uchar * prev_level, const t_uchar * uid, const t_uchar * txn_id); static void safely_remove_stale_broken_lock_dir (struct arch_pfs_archive * arch, const t_uchar * broken_dir, const t_uchar * prev_level); static void safely_remove_spent_lock (struct arch_pfs_archive * arch, const t_uchar * spent_lock); static int pfs_put_log (t_uchar ** errstr, struct arch_archive * a, const t_uchar * version, const t_uchar * prev_level, const t_uchar * uid, const t_uchar * txn_id, const t_uchar * log_text); static int pfs_put_continuation (t_uchar ** errstr, struct arch_archive * a, const t_uchar * version, const t_uchar * prev_level, const t_uchar * uid, const t_uchar * txn_id, const t_uchar * continuation); static int pfs_put_changeset (t_uchar ** errstr, struct arch_archive * a, const t_uchar * version, const t_uchar * prev_level, const t_uchar * uid, const t_uchar * txn_id, const t_uchar * level, int in_fd); static int pfs_put_import (t_uchar ** errstr, struct arch_archive * a, const t_uchar * version, const t_uchar * prev_level, const t_uchar * uid, const t_uchar * txn_id, const t_uchar * level, int in_fd); static int pfs_put_cached (t_uchar ** errstr, struct arch_archive * a, const t_uchar * revision, int in_fd); static int pfs_delete_cached (t_uchar ** errstr, struct arch_archive * a, const t_uchar * revision); static void pfs_repair_non_txnal (int chatter_fd, struct arch_archive * a); static void sign_and_upload (struct arch_archive * a, const t_uchar * tmp_file, const t_uchar * path, int in_fd, const t_uchar * description, int batteries_to_power); static void pfs_create_signature_file (struct arch_archive * a, const t_uchar * revision); static void pfs_finish_signature_file (struct arch_archive *a, const t_uchar * version, const t_uchar * prev_level, const t_uchar * uid, const t_uchar * txn_id, const t_uchar * new_level); static void pfs_finish_signature_file_worker (struct arch_archive * a, const t_uchar * revision, const t_uchar * dir, const t_uchar * checksumname); static void run_md5sum (int signature_file, const t_uchar * description, const t_uchar * data_file); static void insert_sums (struct arch_pfs_archive *arch, t_uchar * description, t_uchar * data_file); static struct arch_archive_vtable pfs_vtable = { "pfs", pfs_close, pfs_archive_version, pfs_categories, pfs_branches, pfs_versions, pfs_revisions, pfs_archive_log, pfs_revision_type, pfs_get_patch, pfs_get_cached, pfs_get_import, pfs_get_continuation, pfs_get_meta_info, pfs_make_category, pfs_make_branch, pfs_make_version, pfs_lock_revision, pfs_revision_ready, pfs_finish_revision, pfs_break_revision_lock, pfs_lock_state, pfs_put_log, pfs_put_continuation, pfs_put_changeset, pfs_put_import, pfs_put_cached, pfs_delete_cached, pfs_repair_non_txnal, }; void arch_pfs_make_archive (const t_uchar * name, const t_uchar *location, const t_uchar * version, const t_uchar * mirror_of, int dot_listing_lossage, int signed_archive) { arch_pfs_pfs_make_archive (name, location, version, mirror_of, dot_listing_lossage, signed_archive); } void arch_pfs_archive_connect (struct arch_archive ** a) { struct arch_pfs_archive * arch = (struct arch_pfs_archive *)*a; arch = lim_realloc (0, (t_uchar *)arch, sizeof (struct arch_pfs_archive)); arch->arch.vtable = &pfs_vtable; arch->pfs = arch_pfs_connect (arch->arch.location); arch->from_arch = 0; arch->txn_signature_file = NULL; arch->txn_signature_fd = -1; *a = (struct arch_archive *)arch; } static void pfs_close (struct arch_archive * a) { } static t_uchar * pfs_archive_version (struct arch_archive * a) { struct arch_pfs_archive * arch = (struct arch_pfs_archive *)a; t_uchar * path = 0; t_uchar * meta_info_path = 0; t_uchar * contents = 0; t_uchar * nl; path = arch_fs_archive_archive_version_path (0); meta_info_path = arch_fs_archive_meta_info_path (0); if (arch_pfs_file_exists (arch->pfs, path)) contents = arch_pfs_file_contents (arch->pfs, path, 0); else if (arch_pfs_file_exists (arch->pfs, meta_info_path)) { /* most likely a mirror that's missing a .archive-version file */ safe_printfmt (2, "Failed to access file '%s'\n", path); safe_printfmt (2, "Could not determine archive format, guessing to be tla 1.0\n"); contents = str_save (0, arch_tree_format_1_str); } else { safe_printfmt (2, "pfs_archive_version: unidentifiable archive (%s)\n", a->name); exit (2); } nl = str_chr_index (contents, '\n'); if (nl) { size_t len; len = nl - contents + 1; contents = lim_realloc (0, contents, len); contents[len - 1] = 0; } lim_free (0, path); lim_free (0, meta_info_path); return contents; } static rel_table pfs_baz_search (struct arch_archive * a, const t_uchar * prefix, enum arch_valid_package_name_types req_type, enum arch_parse_package_name_type ret_type) { struct arch_pfs_archive * arch = (struct arch_pfs_archive *)a; rel_table files = rel_table_nil; rel_table answer = rel_table_nil; int x; files = arch_pfs_directory_files (arch->pfs, ".", 0); for (x = 0; x < rel_n_records (files); ++x) { const t_uchar * file; file = rel_peek_str (files, x, 0); if ( arch_valid_package_name (file, arch_no_archive, req_type, 1) && !str_cmp_prefix (prefix, file)) rel_add_records (&answer, rel_make_record_1_taking (rel_make_field_str (arch_parse_package_name (ret_type, NULL, file))), rel_record_null); } rel_free_table (files); rel_sort_table_by_field (0, answer, 0); rel_uniq_by_field (&answer, 0); return answer; } static rel_table pfs_categories (struct arch_archive * a) { struct arch_pfs_archive * arch = (struct arch_pfs_archive *)a; rel_table files = rel_table_nil; rel_table answer = rel_table_nil; if (a->type == arch_archive_baz) return pfs_baz_search (a, 0, arch_req_category, arch_ret_category); files = arch_pfs_directory_files (arch->pfs, ".", 0); answer = arch_pick_categories_by_field (files, 0); rel_free_table (files); return answer; } static rel_table pfs_branches (struct arch_archive * a, const t_uchar * category) { struct arch_pfs_archive * arch = (struct arch_pfs_archive *)a; t_uchar * category_path = 0; rel_table files = rel_table_nil; rel_table answer = rel_table_nil; t_uchar * search_prefix = 0; if (a->type == arch_archive_baz) { search_prefix = str_alloc_cat_many (0, category, "--", str_end); answer = pfs_baz_search (a, search_prefix, arch_req_package, arch_ret_package); } else { category_path = arch_fs_archive_category_path (a, 0, category); files = arch_pfs_directory_files (arch->pfs, category_path, 1); answer = arch_pick_branches_by_field (files, 0); } lim_free (0, category_path); rel_free_table (files); lim_free (0, search_prefix); return answer; } static rel_table pfs_versions (struct arch_archive * a, const t_uchar * package) { struct arch_pfs_archive * arch = (struct arch_pfs_archive *)a; t_uchar * branch_path = 0; rel_table files = rel_table_nil; rel_table answer = rel_table_nil; t_uchar * search_prefix = 0; if (a->type == arch_archive_baz) { search_prefix = str_alloc_cat_many (0, package, "--", str_end); answer = pfs_baz_search (a, search_prefix, arch_req_version, arch_ret_package_version); } else { branch_path = arch_fs_archive_branch_path (a, 0, package); files = arch_pfs_directory_files (arch->pfs, branch_path, 1); answer = arch_pick_versions_by_field (files, 0); } lim_free (0, branch_path); rel_free_table (files); lim_free (0, search_prefix); return answer; } static rel_table pfs_revisions (struct arch_archive * a, const t_uchar * version) { struct arch_pfs_archive * arch = (struct arch_pfs_archive *)a; t_uchar * version_path = 0; rel_table files = rel_table_nil; rel_table answer = rel_table_nil; version_path = arch_fs_archive_version_path (a, 0, version); files = arch_pfs_directory_files (arch->pfs, version_path, 0); answer = arch_pick_patch_levels_by_field (files, 0); lim_free (0, version_path); rel_free_table (files); return answer; } static t_uchar * pfs_archive_log (struct arch_archive * a, const t_uchar * revision) { struct arch_pfs_archive * arch = (struct arch_pfs_archive *)a; t_uchar * revision_log_path = 0; t_uchar * answer = 0; if (arch_pfs_ensure_checksum_data (arch, revision)) { safe_printfmt (2, "trouble reading checksum file for %s/%s\n", a->name, revision); exit (2); } revision_log_path = arch_fs_archive_revision_log_path (a, 0, revision); answer = arch_pfs_checked_file_contents (arch, revision, revision_log_path); lim_free (0, revision_log_path); return answer; } static int pfs_revision_type (enum arch_revision_type * type, int * archive_cached, struct arch_archive * a, const t_uchar * revision) { struct arch_pfs_archive * arch = (struct arch_pfs_archive *)a; t_uchar * continuation_path = 0; t_uchar * changeset_path = 0; t_uchar * import_path = 0; t_uchar * cacherev_path = 0; t_uchar * log_path = 0; t_uchar * continuation_tail = 0; t_uchar * changeset_tail = 0; t_uchar * import_tail = 0; t_uchar * cacherev_tail = 0; t_uchar * log_tail = 0; t_uchar * revision_dir = 0; rel_table files = rel_table_nil; int has_continuation_file; int has_changeset_file; int has_import_file; int has_cacherev_file; int has_log_file; int result = 0; continuation_path = arch_fs_archive_continuation_path (a, 0, revision); changeset_path = arch_fs_archive_changeset_path (a, 0, revision); import_path = arch_fs_archive_import_path (a, 0, revision); cacherev_path = arch_fs_archive_cached_path (a, 0, revision); log_path = arch_fs_archive_revision_log_path (a, 0, revision); continuation_tail = file_name_tail (0, continuation_path); changeset_tail = file_name_tail (0, changeset_path); import_tail = file_name_tail (0, import_path); cacherev_tail = file_name_tail (0, cacherev_path); log_tail = file_name_tail (0, log_path); revision_dir = file_name_directory_file (0, continuation_path); files = arch_pfs_directory_files (arch->pfs, revision_dir, 1); if (!rel_n_records (files)) { result = -1; goto pfs_revision_type_cleanup; } if (arch_pfs_ensure_checksum_data (arch, revision)) { safe_printfmt (2, "trouble reading checksum file for %s/%s\n", a->name, revision); exit (2); } has_continuation_file = list_contains (files, continuation_tail); has_changeset_file = list_contains (files, changeset_tail); has_import_file = list_contains (files, import_tail); has_cacherev_file = list_contains (files, cacherev_tail); has_log_file = list_contains (files, log_tail); if (arch_pfs_checksum_governs (a->name, revision) && ((!!has_continuation_file != !!arch_pfs_checksum_anticipates_file (a->name, revision, continuation_tail)) || (!!has_changeset_file != !!arch_pfs_checksum_anticipates_file (a->name, revision, changeset_tail)) || (!!has_import_file != !!arch_pfs_checksum_anticipates_file (a->name, revision, import_tail)) || (!!has_cacherev_file != !!arch_pfs_checksum_anticipates_file (a->name, revision, cacherev_tail)) || (!!has_log_file != !!arch_pfs_checksum_anticipates_file (a->name, revision, log_tail)))) { safe_printfmt (2, ("\n" "***********************************\n" "\n" " CHECKSUM FILE(S) DISAGREE WITH\n" " DIRECTORY LISTING ABOUT WHAT\n" " FILES SHOULD BE PRESENT IN\n" " REVISION DIR OF ARCHIVE\n" "\n" " archive: %s\n" " revision: %s\n" "\n" "***********************************\n" "\n"), a->name, revision); if (arch_pfs_checksum_governs_strictly (arch)) exit (2); } if (list_contains (files, continuation_tail)) { if (type) *type = arch_continuation_revision; } else if (list_contains (files, changeset_tail)) { if (type) *type = arch_simple_revision; } else if (list_contains (files, import_tail)) { if (type) *type = arch_import_revision; } else { result= -1; goto pfs_revision_type_cleanup; } if (archive_cached) *archive_cached = list_contains (files, cacherev_tail); pfs_revision_type_cleanup: lim_free (0, continuation_path); lim_free (0, changeset_path); lim_free (0, import_path); lim_free (0, cacherev_path); lim_free (0, log_path); lim_free (0, continuation_tail); lim_free (0, changeset_tail); lim_free (0, import_tail); lim_free (0, cacherev_tail); lim_free (0, log_tail); lim_free (0, revision_dir); rel_free_table (files); return result; } static int list_contains (rel_table files, const t_uchar * name) { int x; for (x = 0; x < rel_n_records (files); ++x) { if (!str_cmp (rel_peek_str (files, x, 0), name)) return 1; } return 0; } static void pfs_get_patch (int out_fd, struct arch_archive * a, const t_uchar * revision) { struct arch_pfs_archive * arch = (struct arch_pfs_archive *)a; t_uchar * changeset_path = 0; if (arch_pfs_ensure_checksum_data (arch, revision)) { safe_printfmt (2, "trouble reading checksum file for %s/%s\n", a->name, revision); exit (2); } changeset_path = arch_fs_archive_changeset_path (a, 0, revision); arch_pfs_checked_get_file (arch, revision, out_fd, changeset_path); lim_free (0, changeset_path); } static void pfs_get_cached (int out_fd, struct arch_archive * a, const t_uchar * revision) { struct arch_pfs_archive * arch = (struct arch_pfs_archive *)a; t_uchar * cached_path = 0; if (arch_pfs_ensure_checksum_data (arch, revision)) { safe_printfmt (2, "trouble reading checksum file for %s/%s\n", a->name, revision); exit (2); } cached_path = arch_fs_archive_cached_path (a, 0, revision); arch_pfs_checked_get_file (arch, revision, out_fd, cached_path); lim_free (0, cached_path); } static void pfs_get_import (int out_fd, struct arch_archive * a, const t_uchar * revision) { struct arch_pfs_archive * arch = (struct arch_pfs_archive *)a; t_uchar * import_path = 0; if (arch_pfs_ensure_checksum_data (arch, revision)) { safe_printfmt (2, "trouble reading checksum file for %s/%s\n", a->name, revision); exit (2); } import_path = arch_fs_archive_import_path (a, 0, revision); arch_pfs_checked_get_file (arch, revision, out_fd, import_path); lim_free (0, import_path); } static t_uchar * pfs_get_continuation (struct arch_archive * a, const t_uchar * revision) { struct arch_pfs_archive * arch = (struct arch_pfs_archive *)a; t_uchar * continuation_path = 0; t_uchar * answer = 0; if (arch_pfs_ensure_checksum_data (arch, revision)) { safe_printfmt (2, "trouble reading checksum file for %s/%s\n", a->name, revision); exit (2); } continuation_path = arch_fs_archive_continuation_path (a, 0, revision); answer = arch_pfs_checked_file_contents (arch, revision, continuation_path); lim_free (0, continuation_path); return answer; } static t_uchar * pfs_get_meta_info (struct arch_archive * a, const t_uchar * meta_info_name) { struct arch_pfs_archive * arch = (struct arch_pfs_archive *)a; t_uchar * meta_info_path = 0; t_uchar * answer = 0; meta_info_path = arch_fs_archive_meta_info_item_path (0, meta_info_name); answer = arch_pfs_file_contents (arch->pfs, meta_info_path, 1); lim_free (0, meta_info_path); return answer; } static int pfs_make_category (t_uchar ** errstr, struct arch_archive * a, const t_uchar * category) { struct arch_pfs_archive * arch = (struct arch_pfs_archive *)a; t_uchar * cat_path = 0; int result; result = -1; if (errstr) *errstr = "internal error in archive-pfs.c(pfs_make_category)"; invariant (arch_valid_package_name (category, arch_no_archive, arch_req_category, 0)); cat_path = arch_fs_archive_category_path (a, 0, category); if (arch_pfs_file_exists (arch->pfs, cat_path)) { if (errstr) *errstr = "category already exists"; result = -1; } else { t_uchar * cat_path_dir = 0; t_uchar * cat_tmp_path = 0; /* Why mkdir/rename? * * Because the archive might exist on NFS on which mkdir can * succeed for more than one client. * * Rename to a common target can succeed for more than one NFS * client as well, but not if each client uses a unique * source for the rename. */ cat_path_dir = file_name_directory_file (0, cat_path); cat_tmp_path = archive_tmp_file_name (cat_path_dir, ",,new-category"); arch_pfs_mkdir (arch->pfs, cat_tmp_path, 0777, 0); if (!arch_pfs_rename (arch->pfs, errstr, cat_tmp_path, cat_path, 1)) { result = 0; if (errstr) *errstr = 0; } else { result = -1; } if (arch->arch.http_blows) { arch_pfs_update_listing_file (arch->pfs, cat_path); arch_pfs_update_listing_file (arch->pfs, "."); } lim_free (0, cat_tmp_path); lim_free (0, cat_path_dir); } lim_free (0, cat_path); return result; } static int pfs_make_branch (t_uchar ** errstr, struct arch_archive * a, const t_uchar * branch) { struct arch_pfs_archive * arch = (struct arch_pfs_archive *)a; t_uchar * branch_path = 0; int result = -1; if (errstr) *errstr = "internal error in archive-pfs.c(pfs_make_branch)"; invariant (arch_valid_package_name (branch, arch_no_archive, arch_req_package, 0)); branch_path = arch_fs_archive_branch_path (a, 0, branch); if (arch_pfs_file_exists (arch->pfs, branch_path)) { if (errstr) *errstr = "branch already exists"; result = -1; } else { t_uchar * branch_path_dir = 0; t_uchar * branch_tmp_path = 0; branch_path_dir = file_name_directory_file (0, branch_path); branch_tmp_path = archive_tmp_file_name (branch_path_dir, ",,new-branch"); arch_pfs_mkdir (arch->pfs, branch_tmp_path, 0777, 0); if (!arch_pfs_rename (arch->pfs, errstr, branch_tmp_path, branch_path, 1)) { result = 0; if (errstr) *errstr = 0; } else { result = -1; } if (arch->arch.http_blows) { arch_pfs_update_listing_file (arch->pfs, branch_path); arch_pfs_update_listing_file (arch->pfs, branch_path_dir); } lim_free (0, branch_tmp_path); lim_free (0, branch_path_dir); } lim_free (0, branch_path); return result; } static int pfs_make_version (t_uchar ** errstr, struct arch_archive * a, const t_uchar * version) { struct arch_pfs_archive * arch = (struct arch_pfs_archive *)a; t_uchar * version_path = 0; int result = -1; if (errstr) *errstr = "internal error in archive-pfs.c(pfs_make_version)"; invariant (arch_valid_package_name (version, arch_no_archive, arch_req_version, 0)); version_path = arch_fs_archive_version_path (a, 0, version); if (arch_pfs_file_exists (arch->pfs, version_path)) { if (errstr) *errstr = "version already exists"; result = -1; } else { t_uchar * version_path_dir = 0; t_uchar * version_tmp_path = 0; t_uchar * lock_dir_path = 0; t_uchar * contents_dir_path = 0; version_path_dir = file_name_directory_file (0, version_path); version_tmp_path = archive_tmp_file_name (version_path_dir, ",,new-branch"); lock_dir_path = file_name_in_vicinity (0, version_tmp_path, "++revision-lock"); contents_dir_path = file_name_in_vicinity (0, lock_dir_path, "+contents"); arch_pfs_mkdir (arch->pfs, version_tmp_path, 0777, 0); arch_pfs_mkdir (arch->pfs, lock_dir_path, 0777, 0); arch_pfs_mkdir (arch->pfs, contents_dir_path, 0777, 0); if (!arch_pfs_rename (arch->pfs, errstr, version_tmp_path, version_path, 1)) { result = 0; if (errstr) *errstr = 0; } else { result = -1; } if (arch->arch.http_blows) { arch_pfs_update_listing_file (arch->pfs, version_path); if (version_path_dir) arch_pfs_update_listing_file (arch->pfs, version_path_dir); else arch_pfs_update_listing_file (arch->pfs, "."); } lim_free (0, version_tmp_path); lim_free (0, version_path_dir); lim_free (0, lock_dir_path); lim_free (0, contents_dir_path); } lim_free (0, version_path); return result; } /**************************************************************** * Revision Locks * * A version contains a a sequence of revisions. Each new revision * must be created in-sequence, in an atomic, isolated, and durable * event. * * In file system archives, a version is a directory, and each revision * a subdirectory with a patch level for a name (base-0, patch-1, ...) * * The ordinary rename system call almost gives us a mechanism for this: * a client could mkdir ,,wants-to-be-patch-1-txnid, fill that with * the revisions data, then rename it to patch-1. We could trust clients * not to create patch-N unless patch-(N-1) already exists, and the rename * will fail if a concurrent client succeeds at committing patch-N first. * * Alas, theres a catch here. The "revision after" base-0 or any * patch-N does not have a fixed name. It might be patch-(N+1), or it * might be "version-0". It would be disasterous if two concurrent clients * simultaneously created both patch-(N+1) and version-0 as successors * to patch-N (or base-0). rename doesn't directly solve this problem. * * (Additionally, we want to support "persistent locks" -- to allow a * user to claim the lock for a new revision prior to actually committing it, * in order to impose an advisory barrier to anybody else trying to commit * that revision.) * * So, here's how it works instead: * * Every subtree for a given version contains, at all times, exactly * one (non-nested) "revision-lock directory". That directory always * has a subdirectory called "+contents". In the normal course of * things, the "+contents" directory will eventually be renamed to * become the new revision directory. * * In the general, the name of the revision-lock directory indicates * the state of the lock. When a write transaction holds the lock, * it fills "+contents" with the data for the new revision (including * a new, nested revision lock directory, then renames "+contents" * to patch-N (or version-0 or base-0 or versionfix-N), and cleans up. * * * Possible Revision Lock States: * * [A] No revisions exist yet, lock is unlocked in the usual way: * * version/ * version/+revision-lock == $lock * version/+revision-lock/+contents * * * [B] Patch level LVL is the most recent, lock is unlocked in the usual way: * * version/ * version/LVL * version/LVL/+revision-lock == $lock * version/LVL/+revision-lock/+contents (empty) * * * In the rest, if no revisions yet exist, then LVL is "absolute-0" * * [C] Lock was recently broken, or a lock break operation was interrupted * after breaking the lock, but before cleaning up: * * version/ * version/+revision-lock-broken--LVL == $broken_dir * version/+revision-lock-broken--LVL/,,remade-lock--LVL == $broken (the lock itself) * version/+revision-lock-broken--LVL/,,remade-lock--LVL/+contents * version/+revision-lock-broken--LVL/... junk from failed transaction * * * [D] Persistent lock is currently held by user UID * * version/ * version/+revision-lock-held--LVL--UID == $locked * version/+revision-lock-held--LVL--UID/+contents (empty) * * * [E] Lock is currently held by user UID for client process CLIENT * * version/ * version/+revision-lock-held--LVL--UID.CLIENT == $locked * version/+revision-lock-held--LVL--UID/+contents * version/+revision-lock-held--LVL--UID/+contents/... (new revision data) * * * [-] Junk that can be left around when cleanups dont finish (safe to delete * things marked with "!"): * * version/ * ! version/+revision-lock-held--LVL--UID* * ! (no +contents subdir, not necessarilly empty, otherwise) * * version/ * ! version/+revision-lock-broken--LVL * ! (no ,,remade-lock--LVL subdir, not necessarilly empty, otherwise) * * version/ * version/revision--(LVL + 1) i.e., completed next revision * ! version/revision--(LVL + 1)/++version-lock/,* failed attempt to break lock * */ static int pfs_lock_revision (t_uchar ** errstr, struct arch_archive * a, const t_uchar * version, const t_uchar * prev_level, const t_uchar * uid, const t_uchar * txn_id, const t_uchar * new_level) { struct arch_pfs_archive * arch = (struct arch_pfs_archive *)a; t_uchar * unlocked_path = 0; t_uchar * persistent_locked_path = 0; t_uchar * final_locked_path = 0; t_uchar * final_locked_contents_path = 0; t_uchar * broken_path = 0; int rename_occurred = 0; int result; result = -1; if (errstr) *errstr = "internal error in archive-pfs.c(pfs_lock_revision)"; /* txn_id == 0 * * [A] -> [D] * [B] -> [D] * [C] -> [D] * [D] -> [D] * [E] -> error (user must break lock or txn complete) * * txn_id != 0 * * [A] -> [E] * [B] -> [E] * [C] -> [E] * [D] -> [E] * [E] -> [E] (if the lock is currently held with our txn_id) * [E] -> error (otherwise) * */ unlocked_path = arch_fs_archive_revision_lock_unlocked_path (a, 0, version, prev_level); persistent_locked_path = arch_fs_archive_revision_lock_locked_path (a, 0, version, prev_level, uid, 0); final_locked_path = arch_fs_archive_revision_lock_locked_path (a, 0, version, prev_level, uid, txn_id); final_locked_contents_path = arch_fs_archive_revision_lock_locked_contents_path (a, 0, version, prev_level, uid, txn_id); broken_path = arch_fs_archive_revision_lock_broken_path (a, 0, version, prev_level); /* final_locked_path is [D] or [E] as appropriate to the txn_id argument. * * unlocked_path is [A] or [B] as appropriate to the prev_level argument. */ /* [A/B] -> [D/E] * */ if (!arch_pfs_rename (arch->pfs, errstr, unlocked_path, final_locked_path, 1)) { rename_occurred = 1; } /* [C] -> [D/E] */ else if (!arch_pfs_rename (arch->pfs, errstr, broken_path, final_locked_path, 1)) { t_uchar * broken_dir = 0; rename_occurred = 1; /* clean up the old broken lock dir */ broken_dir = file_name_directory_file (0, broken_dir); safely_remove_stale_broken_lock_dir (arch, broken_dir, prev_level); lim_free (0, broken_dir); } /* [D] -> [E] (if appropriate) */ else if (str_cmp (persistent_locked_path, final_locked_path) && !arch_pfs_rename (arch->pfs, errstr, persistent_locked_path, final_locked_path, 1)) { rename_occurred = 1; } /* [D] -> [D] or [E] -> [E] (as appropriate) */ else if (arch_pfs_file_exists (arch->pfs, final_locked_path)) { rename_occurred = 1; } /* A correctly named "++version-lock-held..." directory exists -- but is it actually * the lock? */ if (rename_occurred) { if (arch_pfs_file_exists (arch->pfs, final_locked_contents_path)) { result = 0; if (errstr) *errstr = 0; } else { result = -1; if (errstr) { *errstr = "lock held or revision already committed"; } } } lim_free (0, unlocked_path); lim_free (0, persistent_locked_path); lim_free (0, final_locked_path); lim_free (0, final_locked_contents_path); lim_free (0, broken_path); if (!result && new_level) { t_uchar * new_revision = 0; new_revision = str_alloc_cat_many (0, version, "--", new_level, str_end); pfs_create_signature_file (a, new_revision); lim_free (0, new_revision); } return result; } static int pfs_revision_ready (t_uchar ** errstr, struct arch_archive * a, const t_uchar * version, const t_uchar * prev_level, const t_uchar * uid, const t_uchar * txn_id, const t_uchar * new_level) { pfs_finish_signature_file (a, version, prev_level, uid, txn_id, new_level); return 0; } static int pfs_finish_revision (t_uchar ** errstr, struct arch_archive * a, const t_uchar * version, const t_uchar * prev_level, const t_uchar * uid, const t_uchar * txn_id, const t_uchar * new_level) { struct arch_pfs_archive * arch = (struct arch_pfs_archive *)a; t_uchar * locked_path = 0; t_uchar * locked_contents_path = 0; t_uchar * new_lock_path = 0; t_uchar * new_contents_path = 0; t_uchar * revision = 0; t_uchar * new_rev_path = 0; int result; result = -1; if (errstr) *errstr = "internal error in archive-pfs.c(pfs_lock_revision)"; /* * [E] -> [A] if lock held with our txn_id * [E] -> error otherwise * [B,C,D] -> error */ locked_path = arch_fs_archive_revision_lock_locked_path (a, 0, version, prev_level, uid, txn_id); locked_contents_path = arch_fs_archive_revision_lock_locked_contents_path (a, 0, version, prev_level, uid, txn_id); new_lock_path = file_name_in_vicinity (0, locked_contents_path, "++revision-lock"); new_contents_path = file_name_in_vicinity (0, new_lock_path, "+contents"); revision = str_alloc_cat_many (0, version, "--", new_level, str_end); new_rev_path = arch_fs_archive_revision_path (a, 0, revision); if (!arch_pfs_file_exists (arch->pfs, locked_path)) { result = -1; *errstr = "lock not held"; } else { arch_pfs_mkdir (arch->pfs, new_lock_path, 0777, 1); arch_pfs_mkdir (arch->pfs, new_contents_path, 0777, 1); if ((1 == arch_pfs_is_dir (arch->pfs, new_contents_path)) && !arch_pfs_rename (arch->pfs, errstr, locked_contents_path, new_rev_path, 1)) { result = 0; if (errstr) *errstr = 0; safely_remove_spent_lock (arch, locked_path); if (arch->arch.http_blows) { t_uchar * prev_revision = 0; t_uchar * new_rev_dir_path = 0; new_rev_dir_path = file_name_directory_file (0, new_rev_path); arch_pfs_update_listing_file (arch->pfs, new_rev_path); arch_pfs_update_listing_file (arch->pfs, new_rev_dir_path); prev_revision = arch_previous_revision (a, revision); if (prev_revision) { t_uchar * prev_rev_path = 0; prev_rev_path = arch_fs_archive_revision_path (a, 0, prev_revision); arch_pfs_update_listing_file (arch->pfs, prev_rev_path); lim_free (0, prev_rev_path); } lim_free (0, new_rev_dir_path); lim_free (0, prev_revision); } } else { { safe_printfmt (2, "i/o error modifying archive (%s)\n archive: %s\n path: %s\n", *errstr, arch->arch.name, new_contents_path); exit (2); } } } lim_free (0, locked_path); lim_free (0, locked_contents_path); lim_free (0, new_lock_path); lim_free (0, new_contents_path); lim_free (0, revision); lim_free (0, new_rev_path); return result; } static enum arch_revision_lock_state pfs_lock_state (t_uchar ** prev_level_ret, t_uchar ** uid_ret, t_uchar ** txn_id_ret, struct arch_archive * a, const t_uchar * version) { struct arch_pfs_archive * arch = (struct arch_pfs_archive *)a; rel_table revisions = rel_table_nil; t_uchar * prev_level = 0; t_uchar * unlocked_path = 0; t_uchar * unlocked_contents_path = 0; t_uchar * broken_path = 0; t_uchar * broken_contents_path = 0; enum arch_revision_lock_state answer = arch_revision_unknown_lock_state; revisions = arch_archive_revisions (&arch->arch, version, 0); if (!rel_n_records (revisions)) prev_level = 0; else prev_level = str_save (0, rel_peek_str (revisions, rel_n_records (revisions) - 1, 0)); if (prev_level_ret) *prev_level_ret = prev_level ? str_save (0, prev_level) : 0; unlocked_path = arch_fs_archive_revision_lock_unlocked_path (a, 0, version, prev_level); unlocked_contents_path = file_name_in_vicinity (0, unlocked_path, "+contents"); broken_path = arch_fs_archive_revision_lock_broken_path (a, 0, version, prev_level); broken_contents_path = file_name_in_vicinity (0, broken_path, "+contents"); if (uid_ret) *uid_ret = 0; if (txn_id_ret) *txn_id_ret = 0; if ((1 == arch_pfs_is_dir (arch->pfs, unlocked_contents_path)) || (1 == arch_pfs_is_dir (arch->pfs, broken_contents_path))) { answer = arch_revision_unlocked; } else { t_uchar * version_path = 0; rel_table files = rel_table_nil; t_uchar * persistent_locked_path_stem = 0; int x; version_path = arch_fs_archive_version_path (a, 0, version); files = arch_pfs_directory_files (arch->pfs, version_path, 1); { t_uchar * t = 0; t = arch_fs_archive_revision_lock_locked_path (a, 0, version, prev_level, 0, 0); persistent_locked_path_stem = file_name_tail (0, t); lim_free (0, t); } for (x = 0; x < rel_n_records (files); ++x) { if (!str_cmp_prefix (persistent_locked_path_stem, rel_peek_str (files, x, 0))) { t_uchar * contents_rel = 0; t_uchar * contents_path = 0; contents_rel = file_name_in_vicinity (0, rel_peek_str (files, x, 0), "+contents"); contents_path = file_name_in_vicinity (0, version_path, contents_rel); if (1 != arch_pfs_is_dir (arch->pfs, contents_path)) { answer = arch_revision_illegal_lock_state; } else { const t_uchar * uid_start; const t_uchar * uid_end; uid_start = rel_peek_str (files, x, 0) + str_length (persistent_locked_path_stem); uid_end = str_chr_rindex (uid_start, '-'); invariant (!!uid_end); --uid_end; if (uid_end < uid_start) { if (uid_ret) *uid_ret = str_save (0, uid_start); if (txn_id_ret) *txn_id_ret = 0; answer = arch_revision_user_locked; } else { const t_uchar * txn_id; txn_id = uid_end + 2; if (uid_ret) *uid_ret = str_save_n (0, uid_start, uid_end - uid_start); if (txn_id_ret) *txn_id_ret = str_save (0, txn_id); answer = arch_revision_txn_locked; } } lim_free (0, contents_rel); lim_free (0, contents_path); } } lim_free (0, version_path); rel_free_table (files); lim_free (0, persistent_locked_path_stem); } rel_free_table (revisions); lim_free (0, prev_level); lim_free (0, unlocked_path); lim_free (0, unlocked_contents_path); lim_free (0, broken_path); lim_free (0, broken_contents_path); return answer; } static int pfs_break_revision_lock (t_uchar ** errstr, struct arch_archive * a, const t_uchar * version, const t_uchar * prev_level, const t_uchar * uid, const t_uchar * txn_id) { struct arch_pfs_archive * arch = (struct arch_pfs_archive *)a; t_uchar * locked_path = 0; t_uchar * locked_contents_path = 0; t_uchar * unlocked_path = 0; int result; result = -1; if (errstr) *errstr = "internal error in archive-pfs.c(pfs_break_revision_lock)"; /* * [D/E] -> [C] -> [A] if lock held with our uid/txn_id * [D/E] -> error otherwise * [A,B,C] -> error */ locked_path = arch_fs_archive_revision_lock_locked_path (a, 0, version, prev_level, uid, txn_id); locked_contents_path = arch_fs_archive_revision_lock_locked_contents_path (a, 0, version, prev_level, uid, txn_id); unlocked_path = arch_fs_archive_revision_lock_unlocked_path (a, 0, version, prev_level); if (1 != arch_pfs_is_dir (arch->pfs, locked_contents_path)) { result = -1; if (errstr) *errstr = "lock not held"; } else { t_uchar * remade_basename = 0; t_uchar * new_lock_path = 0; t_uchar * new_lock_contents_path = 0; t_uchar * version_path = 0; t_uchar * broken_lock_path = 0; t_uchar * broken_lock_dir = 0; t_uchar * junk_path = 0; remade_basename = str_alloc_cat (0, ",,remade-lock--", (prev_level ? prev_level : (t_uchar *)"absolute-0")); new_lock_path = file_name_in_vicinity (0, locked_contents_path, remade_basename); new_lock_contents_path = file_name_in_vicinity (0, new_lock_path, "+contents"); version_path = arch_fs_archive_version_path (a, 0, version); broken_lock_path = arch_fs_archive_revision_lock_broken_path (a, 0, version, prev_level); broken_lock_dir = file_name_directory_file (0, broken_lock_path); junk_path = tmp_file_name (version_path, ",,junk"); arch_pfs_mkdir (arch->pfs, new_lock_path, 0777, 1); arch_pfs_mkdir (arch->pfs, new_lock_contents_path, 0777, 1); if (1 != arch_pfs_is_dir (arch->pfs, new_lock_contents_path)) { result = -1; if (errstr) *errstr = "lock not held"; } else { safely_remove_stale_broken_lock_dir (arch, broken_lock_dir, prev_level); if (arch_pfs_rename (arch->pfs, 0, locked_contents_path, broken_lock_dir, 1)) { result = -1; if (errstr && !*errstr) *errstr = "lock not held"; } else { t_uchar * latest_rev = 0; /* Did the lock actually become broken (perhaps by our rename * above, or by some other process? The only other possibility * (and the only reliable way to check) is to see if, instead, * the commit completed. */ { rel_table levels = rel_table_nil; levels = arch_archive_revisions (&arch->arch, version, 0); if (rel_n_records (levels)) latest_rev = str_save (0, rel_peek_str (levels, rel_n_records(levels) - 1, 0)); rel_free_table (levels); } if (str_cmp (prev_level, latest_rev)) { result = -1; if (errstr) *errstr = "lock not held"; } else { arch_pfs_rename (arch->pfs, 0, broken_lock_path, unlocked_path, 1); /* We really don't care whether that rename succeeded or not. * It's just for "neatness" */ result = 0; if (errstr) *errstr = 0; } /* Note that safely_remove_stale_broken_lock_dir doesn't actually * remove the broken lock dir in the case that it isn't stale. */ safely_remove_stale_broken_lock_dir (arch, broken_lock_dir, prev_level); safely_remove_spent_lock (arch, locked_path); lim_free (0, latest_rev); } } lim_free (0, new_lock_path); lim_free (0, new_lock_contents_path); lim_free (0, version_path); lim_free (0, broken_lock_path); } lim_free (0, locked_path); lim_free (0, locked_contents_path); lim_free (0, unlocked_path); return result; } static void safely_remove_stale_broken_lock_dir (struct arch_pfs_archive * arch, const t_uchar * broken_dir, const t_uchar * prev_level) { t_uchar * broken_dir_tail = 0; rel_table nested = rel_table_nil; int x; t_uchar * precious_basename = 0; broken_dir_tail = file_name_tail (0, broken_dir); invariant (!str_cmp_prefix ("++revision-lock-broken--", broken_dir_tail)); nested = arch_pfs_directory_files (arch->pfs, broken_dir, 1); precious_basename = str_alloc_cat (0, ",,remade-lock--", (prev_level ? prev_level : (t_uchar *)"absolute-0")); for (x = 0; x < rel_n_records (nested); ++x) { const t_uchar * basename; basename = rel_peek_str (nested, x, 0); if (str_cmp (".", basename) && str_cmp ("..", basename) && str_cmp (precious_basename, basename)) { t_uchar * path = 0; path = file_name_in_vicinity (0, broken_dir, basename); arch_pfs_rmrf_file (arch->pfs, path); lim_free (0, path); } } arch_pfs_rmdir (arch->pfs, broken_dir, 1); lim_free (0, broken_dir_tail); rel_free_table (nested); lim_free (0, precious_basename); } static void safely_remove_spent_lock (struct arch_pfs_archive * arch, const t_uchar * spent_lock) { t_uchar * spent_lock_tail = 0; rel_table nested = rel_table_nil; t_uchar * tmp_path = 0; int x; spent_lock_tail = file_name_tail (0, spent_lock); invariant (!str_cmp_prefix ("++revision-lock-held--", spent_lock_tail)); nested = arch_pfs_directory_files (arch->pfs, spent_lock, 1); tmp_path = tmp_file_name (spent_lock, ",,junk"); arch_pfs_rmrf_file (arch->pfs, tmp_path); for (x = 0; x < rel_n_records (nested); ++x) { const t_uchar * basename; basename = rel_peek_str (nested, x, 0); if (str_cmp (".", basename) && str_cmp ("..", basename) && str_cmp ("+contents", basename)) { t_uchar * path = 0; path = file_name_in_vicinity (0, spent_lock, basename); arch_pfs_rename (arch->pfs, 0, path, tmp_path, 1); arch_pfs_rmrf_file (arch->pfs, tmp_path); lim_free (0, path); } } arch_pfs_rmdir (arch->pfs, spent_lock, 1); lim_free (0, spent_lock_tail); rel_free_table (nested); lim_free (0, tmp_path); } /**************************************************************** * Write Txn Steps */ static int pfs_put_log (t_uchar ** errstr, struct arch_archive * a, const t_uchar * version, const t_uchar * prev_level, const t_uchar * uid, const t_uchar * txn_id, const t_uchar * log_text) { t_uchar * locked_contents_path = 0; t_uchar * log_path = 0; t_uchar * tmp_path = 0; int fd; invariant (!!txn_id); locked_contents_path = arch_fs_archive_revision_lock_locked_contents_path (a, 0, version, prev_level, uid, txn_id); log_path = file_name_in_vicinity (0, locked_contents_path, "log"); tmp_path = tmp_file_name ("/tmp", ",,pfs-dav-put-log"); fd = safe_open (tmp_path, O_RDWR | O_CREAT | O_EXCL, 0400); safe_printfmt (fd, "%s", log_text); safe_lseek (fd, (off_t)0, SEEK_SET); sign_and_upload (a, tmp_path, log_path, fd, "log", 0); safe_unlink (tmp_path); if (errstr) *errstr = 0; safe_close (fd); lim_free (0, locked_contents_path); lim_free (0, log_path); lim_free (0, tmp_path); return 0; } static int pfs_put_continuation (t_uchar ** errstr, struct arch_archive * a, const t_uchar * version, const t_uchar * prev_level, const t_uchar * uid, const t_uchar * txn_id, const t_uchar * continuation) { t_uchar * locked_contents_path = 0; t_uchar * continuation_path = 0; t_uchar * tmp_path = 0; int fd; invariant (!!txn_id); locked_contents_path = arch_fs_archive_revision_lock_locked_contents_path (a, 0, version, prev_level, uid, txn_id); continuation_path = file_name_in_vicinity (0, locked_contents_path, "CONTINUATION"); tmp_path = tmp_file_name ("/tmp", ",,pfs-dav-put-log"); fd = safe_open (tmp_path, O_RDWR | O_CREAT | O_EXCL, 0400); safe_printfmt (fd, "%s", continuation); safe_lseek (fd, (off_t)0, SEEK_SET); sign_and_upload (a, tmp_path, continuation_path, fd, "CONTINUATION", 0); safe_unlink (tmp_path); if (errstr) *errstr = 0; safe_close (fd); lim_free (0, locked_contents_path); lim_free (0, continuation_path); lim_free (0, tmp_path); return 0; } static int pfs_put_changeset (t_uchar ** errstr, struct arch_archive * a, const t_uchar * version, const t_uchar * prev_level, const t_uchar * uid, const t_uchar * txn_id, const t_uchar * level, int in_fd) { t_uchar * locked_contents_path = 0; t_uchar * patches = 0; t_uchar * changeset_path = 0; invariant (!!txn_id); locked_contents_path = arch_fs_archive_revision_lock_locked_contents_path (a, 0, version, prev_level, uid, txn_id); patches = str_alloc_cat_many (0, version, "--", level, ".patches.tar.gz", str_end); changeset_path = file_name_in_vicinity (0, locked_contents_path, patches); sign_and_upload (a, 0, changeset_path, in_fd, patches, 0); if (errstr) *errstr = 0; lim_free (0, locked_contents_path); lim_free (0, patches); lim_free (0, changeset_path); return 0; } static int pfs_put_import (t_uchar ** errstr, struct arch_archive * a, const t_uchar * version, const t_uchar * prev_level, const t_uchar * uid, const t_uchar * txn_id, const t_uchar * level, int in_fd) { t_uchar * locked_contents_path = 0; t_uchar * import = 0; t_uchar * import_path = 0; invariant (!!txn_id); locked_contents_path = arch_fs_archive_revision_lock_locked_contents_path (a, 0, version, prev_level, uid, txn_id); import = str_alloc_cat_many (0, version, "--", level, ".src.tar.gz", str_end); import_path = file_name_in_vicinity (0, locked_contents_path, import); sign_and_upload (a, 0, import_path, in_fd, import, 0); if (errstr) *errstr = 0; lim_free (0, locked_contents_path); lim_free (0, import); lim_free (0, import_path); return 0; } static int pfs_put_cached (t_uchar ** errstr, struct arch_archive * a, const t_uchar * revision, int in_fd) { struct arch_pfs_archive * arch = (struct arch_pfs_archive *)a; t_uchar * cached_path = 0; t_uchar * cached_tail = 0; t_uchar * cached_dir = 0; cached_path = arch_fs_archive_cached_path (a, 0, revision); cached_tail = file_name_tail (0, cached_path); cached_dir = file_name_directory_file (0, cached_path); pfs_create_signature_file (a, revision); sign_and_upload (a, 0, cached_path, in_fd, cached_tail, 1); pfs_finish_signature_file_worker (a, revision, cached_dir, "checksum.cacherev"); if (arch->arch.http_blows) { arch_pfs_update_listing_file (arch->pfs, cached_dir); } lim_free (0, cached_path); lim_free (0, cached_tail); lim_free (0, cached_dir); return 0; } static int pfs_delete_cached (t_uchar ** errstr, struct arch_archive * a, const t_uchar * revision) { struct arch_pfs_archive * arch = (struct arch_pfs_archive *)a; t_uchar * cached_path = 0; t_uchar * cached_checksum_path = 0; cached_path = arch_fs_archive_cached_path (a, 0, revision); cached_checksum_path = arch_fs_archive_cached_checksum_path (a, 0, revision); if (arch_pfs_file_exists (arch->pfs, cached_path)) { arch_pfs_rm (arch->pfs, cached_path, 1); arch_pfs_rm (arch->pfs, cached_checksum_path, 1); if (arch->arch.http_blows) { t_uchar * cached_dir = 0; cached_dir = file_name_directory_file (0, cached_path); arch_pfs_update_listing_file (arch->pfs, cached_dir); lim_free (0, cached_dir); } } lim_free (0, cached_path); lim_free (0, cached_checksum_path); return 0; } static void pfs_fixup_version (int chatter_fd, struct arch_archive * a, const t_uchar * version) { t_uchar * version_path = 0; rel_table revisions = rel_table_nil; int r; struct arch_pfs_archive * arch = (struct arch_pfs_archive *)a; arch_chatter (chatter_fd, "* archive-fixup: rebuilding index file for version %s\n", version); version_path = arch_fs_archive_version_path (a, 0, version); arch_pfs_update_listing_file (arch->pfs, version_path); revisions = pfs_revisions (a, version); for (r = 0; r < rel_n_records (revisions); ++r) { t_uchar * package_revision = 0; t_uchar * revision_path = 0; package_revision = str_alloc_cat_many (0, version, "--", rel_peek_str (revisions, r, 0), str_end); arch_chatter (chatter_fd, "* archive-fixup: rebuilding index file for revisions %s\n", package_revision); revision_path = arch_fs_archive_revision_path (a, 0, package_revision); arch_pfs_update_listing_file (arch->pfs, revision_path); lim_free (0, package_revision); lim_free (0, revision_path); } lim_free (0, version_path); rel_free_table (revisions); } static void pfs_repair_non_txnal (int chatter_fd, struct arch_archive * a) { struct arch_pfs_archive * arch = (struct arch_pfs_archive *)a; t_uchar * meta_info_path = 0; rel_table categories = rel_table_nil; int c; if (!a->http_blows) return; arch_chatter (chatter_fd, "* archive-fixup: rebuilding top level index files\n"); arch_pfs_update_listing_file (arch->pfs, "."); meta_info_path = arch_fs_archive_meta_info_item_path (0, "."); arch_pfs_update_listing_file (arch->pfs, meta_info_path); categories = pfs_categories (a); for (c = 0; c < rel_n_records (categories); ++c) { t_uchar * cat_path = 0; rel_table branches = rel_table_nil; int b; arch_chatter (chatter_fd, "* archive-fixup: rebuilding index file for category %s\n", rel_peek_str (categories, c, 0)); if (a->type != arch_archive_baz) { cat_path = arch_fs_archive_category_path (a, 0, rel_peek_str (categories, c, 0)); arch_pfs_update_listing_file (arch->pfs, cat_path); } branches = pfs_branches (a, rel_peek_str (categories, c, 0)); for (b = 0; b < rel_n_records (branches); ++b) { t_uchar * branch_path = 0; rel_table versions = rel_table_nil; int v; arch_chatter (chatter_fd, "* archive-fixup: rebuilding index file for branch %s\n", rel_peek_str (branches, b, 0)); if (a->type != arch_archive_baz) { branch_path = arch_fs_archive_branch_path (a, 0, rel_peek_str (branches, b, 0)); arch_pfs_update_listing_file (arch->pfs, branch_path); } versions = pfs_versions (a, rel_peek_str (branches, b, 0)); for (v = 0; v < rel_n_records (versions); ++v) { pfs_fixup_version (chatter_fd, a, rel_peek_str (versions, v, 0)); } lim_free (0, branch_path); rel_free_table (versions); } lim_free (0, cat_path); rel_free_table (branches); } lim_free (0, meta_info_path); rel_free_table (categories); } static void sign_and_upload (struct arch_archive * a, const t_uchar * tmp_file, const t_uchar * path, int in_fd, const t_uchar * description, int batteries_to_power) { struct arch_pfs_archive *arch = (struct arch_pfs_archive *)a; invariant (arch->txn_signature_file != 0); if (tmp_file) { insert_sums (arch, description, tmp_file); if (batteries_to_power) arch_pfs_put_atomic (arch->pfs, 0, path, 0444, in_fd, 1, 0); else arch_pfs_put_file (arch->pfs, path, 0444, in_fd, 0); } else { t_uchar * tmp_contents = 0; int my_fd = -1; tmp_contents = tmp_file_name ("/tmp", ",,arch-sign-and-upload"); my_fd = safe_open (tmp_contents, O_RDWR | O_CREAT | O_EXCL, 0400); copy_fd (in_fd, my_fd); safe_lseek (my_fd, (off_t)0, SEEK_SET); insert_sums (arch, description, tmp_contents); if (batteries_to_power) arch_pfs_put_atomic (arch->pfs, 0, path, 0444, my_fd, 1, 0); else arch_pfs_put_file (arch->pfs, path, 0444, my_fd, 0); safe_close (my_fd); safe_unlink (tmp_contents); } } static void pfs_create_signature_file (struct arch_archive * a, const t_uchar * revision) { struct arch_pfs_archive * arch = (struct arch_pfs_archive *)a; invariant(arch->txn_signature_file == 0); arch->txn_signature_file = tmp_file_name ("/tmp", ",,archive-signature"); arch->txn_signature_fd = safe_open (arch->txn_signature_file, O_RDWR | O_CREAT | O_EXCL, 0400); arch->deferred_sha1_sums = rel_table_nil; safe_printfmt (arch->txn_signature_fd, "Signature-for: %s/%s\n", a->official_name, revision); /* * file layout: * * * * * * * * * */ } static void pfs_finish_signature_file (struct arch_archive *a, const t_uchar * version, const t_uchar * prev_level, const t_uchar * uid, const t_uchar * txn_id, const t_uchar * new_level) { struct arch_pfs_archive * arch = (struct arch_pfs_archive *)a; t_uchar * dir = 0; t_uchar * revision = 0; invariant (!!txn_id); invariant (arch->txn_signature_file != 0); revision = str_alloc_cat_many (0, version, "--", new_level, str_end); dir = arch_fs_archive_revision_lock_locked_contents_path (a, 0, version, prev_level, uid, txn_id); pfs_finish_signature_file_worker (a, revision, dir, "checksum"); lim_free (0, dir); lim_free (0, revision); } static void pfs_finish_signature_file_worker (struct arch_archive * a, const t_uchar * revision, const t_uchar * dir, const t_uchar * checksumname) { struct arch_pfs_archive *arch = (struct arch_pfs_archive *)a; t_uchar * signed_file = 0; t_uchar * signature = 0; int error = 0; int i; signed_file = str_alloc_cat_many (0, arch->txn_signature_file, ".asc", str_end); signature = file_name_in_vicinity (0, dir, checksumname); /** * We deferred printing SHA1 sums until now, after all the MD5 sums * have been written, for backwards compatibility reasons. */ for (i = 0; i < rel_n_records (arch->deferred_sha1_sums); ++i) { t_uchar *sum1 = str_save(0, rel_peek_str(arch->deferred_sha1_sums, i, 0)); t_uchar *sum2 = str_save(0, rel_peek_str(arch->deferred_sha1_sums, i, 1)); safe_printfmt (arch->txn_signature_fd, "sha1 %s %s\n", sum1 /*arch->deferred_sha1_sums[i][0]*/, sum2 /*arch->deferred_sha1_sums[i][1]*/); lim_free(0, sum1); lim_free(0, sum2); } rel_free_table (arch->deferred_sha1_sums); arch->deferred_sha1_sums = rel_table_nil; if (a->signed_archive) { int in_fd; int signed_fd; safe_close (arch->txn_signature_fd); arch->txn_signature_fd = -1; in_fd = safe_open (arch->txn_signature_file, O_RDONLY, 0); signed_fd = safe_open (signed_file, O_RDWR | O_CREAT | O_EXCL, 0); safe_unlink (signed_file); error = arch_pfs_sign_for_archive (a->name, a->official_name, revision, checksumname, in_fd, signed_fd); if (error) { safe_printfmt (2, "\nunable to complete transaction due to signature failure\n"); safe_unlink (arch->txn_signature_file); exit (2); } safe_lseek (signed_fd, (off_t)0, SEEK_SET); arch_pfs_put_file (arch->pfs, signature, 0444, signed_fd, 0); safe_close (in_fd); safe_close (signed_fd); } else { if (arch_pfs_has_signing_rule (a->name)) { safe_printfmt (2, ("\n" "\n" "********************************\n" " YOU HAVE A RULE FOR SIGNING\n" " THIS ARCHIVE IN\n" " ~/.arch-params/signing/%s\n" " BUT THIS IS AN UNSIGNED ARCHIVE!\n" "\n" " archive: %s\n" "\n" "********************************\n" "\n" "\n"), a->name, a->name); exit (2); } safe_lseek (arch->txn_signature_fd, (off_t)0, SEEK_SET); arch_pfs_put_file (arch->pfs, signature, 0444, arch->txn_signature_fd, 0); safe_close (arch->txn_signature_fd); arch->txn_signature_fd = -1; } safe_unlink (arch->txn_signature_file); lim_free (0, arch->txn_signature_file); arch->txn_signature_file = 0; lim_free (0, signed_file); lim_free (0, signature); } static void run_md5sum (int signature_file, const t_uchar * description, const t_uchar * data_file) { md5_context_t md5c = 0; t_uchar md5[16]; t_uchar md5x[33]; int fd; md5c = make_md5_context (0); fd = safe_open (data_file, O_RDONLY, 0); while (1) { t_uchar buf[65536]; ssize_t amt_read; amt_read = safe_read_retry (fd, buf, sizeof (buf)); if (!amt_read) break; else md5_scan (md5c, buf, (size_t)amt_read); } md5_final (md5, md5c); free_md5_context (0, md5c); safe_close (fd); md5_ascii (md5x, md5); md5x[32] = 0; safe_printfmt (signature_file, "md5 %s %s\n", description, md5x); } static void insert_sums (struct arch_pfs_archive *arch, t_uchar * description, t_uchar * data_file) { md5_context_t md5c = 0; t_uchar md5[16]; t_uchar md5x[33]; sha1_context_t sha1c = 0; t_uchar sha1[20]; t_uchar sha1x[41]; int fd; md5c = make_md5_context (0); sha1c = make_sha1_context (0); fd = safe_open (data_file, O_RDONLY, 0); while (1) { t_uchar buf[4096]; ssize_t amt_read; amt_read = safe_read_retry (fd, buf, sizeof (buf)); if (!amt_read) break; else { md5_scan (md5c, buf, (size_t)amt_read); sha1_scan (sha1c, buf, (size_t)amt_read); } } md5_final (md5, md5c); sha1_final (sha1, sha1c); safe_close (fd); md5_ascii (md5x, md5); md5x[32] = 0; sha1_ascii (sha1x, sha1); sha1x[40] = 0; safe_printfmt (arch->txn_signature_fd, "md5 %s %s\n", description, md5x); rel_add_records (&arch->deferred_sha1_sums, rel_make_record_2_taking (rel_make_field_str(description), rel_make_field_str(sha1x)), rel_record_null); free_md5_context (0, md5c); free_sha1_context (0, sha1c); } /* tag: Tom Lord Tue May 20 13:35:38 2003 (archive-pfs.c) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-show-changeset.h0000644000175000017500000000131410457622000020534 0ustar useruser/* cmd-show-changeset.h: * **************************************************************** * Copyright (C) 2003 Tom Lord, Stig Brautaset * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__CMD_SHOW_CHANGESET_H #define INCLUDE__LIBARCH__CMD_SHOW_CHANGESET_H #include "hackerlab/machine/types.h" extern t_uchar arch_cmd_show_changeset_help[]; /* automatically generated __STDC__ prototypes */ extern int arch_cmd_show_changeset (t_uchar * program_name, int argc, char * argv[]); #endif /* INCLUDE__LIBARCH__CMD_SHOW_CHANGESET_H */ /* tag: Stig Brautaset Sat Jun 7 17:20:10 BST 2003 (cmd-show-changeset.h) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-library-log.h0000644000175000017500000000126710457622000020047 0ustar useruser/* cmd-library-log.h: * **************************************************************** * Copyright (C) 2003 Tom Lord, Stig Brautaset * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__CMD_LIBRARY_LOG_H #define INCLUDE__LIBARCH__CMD_LIBRARY_LOG_H #include "hackerlab/machine/types.h" extern t_uchar arch_cmd_library_log_help[]; /* automatically generated __STDC__ prototypes */ extern int arch_cmd_library_log (t_uchar * program_name, int argc, char * argv[]); #endif /* INCLUDE__LIBARCH__CMD_LIBRARY_LOG_H */ /* tag: Stig Brautaset Sat Jun 7 15:10:15 BST 2003 (cmd-library-log.h) */ tla-1.3.5+dfsg/src/tla/libarch/changeset-utils.c0000644000175000017500000002440410457622000020153 0ustar useruser/* changeset-utils.c: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/os/errno.h" #include "hackerlab/os/errno-to-string.h" #include "hackerlab/fmt/cvt.h" #include "hackerlab/mem/mem.h" #include "hackerlab/char/char-class.h" #include "hackerlab/char/str.h" #include "hackerlab/char/pika-escaping-utils.h" #include "hackerlab/fs/file-names.h" #include "hackerlab/vu/safe.h" #include "tla/libfsutils/read-line.h" #include "tla/libfsutils/safety.h" #include "tla/libarch/invent.h" #include "tla/libarch/changeset-utils.h" /* __STDC__ prototypes for static functions */ static void changeset_inv_callback (const t_uchar * path, struct stat * stat_buf, enum arch_inventory_category category, const t_uchar * id, int has_source_name, void * closure, int escape_classes); void arch_changeset_inventory (struct arch_changeset_inventory * inv_out, const t_uchar * tree_root, const t_uchar * path, enum arch_id_tagging_method method, enum arch_inventory_category untagged_source_category, int escape_classes) { int here_fd; struct arch_inventory_options options; here_fd = safe_open (".", O_RDONLY, 0); mem_set0 ((t_uchar *)&options, sizeof (options)); options.categories = arch_inventory_source; options.want_ids = 1; options.treat_unrecognized_source_as_source = 1; if (method != arch_unspecified_id_tagging) { options.method = method; options.untagged_source_category = untagged_source_category; options.override_method = 1; } options.nested = 0; options.include_excluded = 1; arch_get_inventory_naming_conventions (&options, tree_root); inv_out->method = options.method; safe_chdir (path); arch_inventory_traversal (&options, ".", changeset_inv_callback, (void *)inv_out, escape_classes); arch_free_inventory_naming_conventions (&options); rel_sort_table_by_field (0, inv_out->dirs, 1); rel_sort_table_by_field (0, inv_out->files, 1); safe_fchdir (here_fd); safe_close (here_fd); } void arch_free_changeset_inventory_data (struct arch_changeset_inventory * i) { rel_free_table (i->dirs); i->dirs = rel_table_nil; rel_free_table (i->files); i->files = rel_table_nil; } rel_table arch_read_changeset_index (const t_uchar * path) { int in_fd; rel_table answer = rel_table_nil; t_uchar * line; long len; in_fd = safe_open (path, O_RDONLY, 0); while (1) { t_uchar * loc; t_uchar * id; t_uchar * start; line = 0; len = 0; safe_next_line (&line, &len, in_fd); if (!len) break; while (len && char_is_space (*line)) { ++line; --len; } start = line; while (len && !char_is_space (*line)) { ++line; --len; } if (line == start) { syntax_error: safe_printfmt (2, "illegally formed changeset index (%s)\n", path); exit (2); } loc = pika_save_unescape_iso8859_1_n (0, 0, start, line - start ); while (len && char_is_space (*line)) { ++line; --len; } start = line; while (len && !char_is_space (*line)) { ++line; --len; } if (line == start) goto syntax_error; id = pika_save_unescape_iso8859_1_n (0, 0, start, line - start ); while (len && char_is_space (*line)) { ++line; --len; } if (len) goto syntax_error; if (!is_non_upwards_relative_path (loc)) { safe_printfmt (2, "illegal path in changeset: %s\n", loc); exit (2); } rel_add_records (&answer, rel_make_record_2_taking (rel_make_field_str (loc), rel_make_field_str (id)), rel_record_null); lim_free (0, loc); lim_free (0, id); } safe_close (in_fd); return answer; } rel_table arch_read_changeset_dir_metadata (const t_uchar * path) { int errn; int in_fd; rel_table answer = rel_table_nil; in_fd = vu_open (&errn, path, O_RDONLY, 0); if (in_fd < 0) { if (errn == ENOENT) return rel_table_nil; else { safe_printfmt (2, "arch_read_changeset_dir_metadata: unable to open file (%s)\n", path); safe_printfmt (2, " %s\n", errno_to_string (errn)); exit (2); } } while (1) { t_uchar * line; long len; t_uchar * start; t_uchar * perms = 0; t_uchar * loc = 0; line = 0; len = 0; safe_next_line (&line, &len, in_fd); if (!len) break; while (len && char_is_space (*line)) { ++line; --len; } if ((len < 13) || str_cmp_prefix ("--permissions", line)) { syntax_error: safe_printfmt (2, "illegal dir metadata file: %s\n", path); exit (2); } len -= 13; line += 13; while (len && char_is_space (*line)) { ++line; --len; } start = line; while (len && !char_is_space (*line)) { ++line; --len; } if (start == line) goto syntax_error; perms = pika_save_unescape_iso8859_1_n (0, 0, start, line - start ); while (len && char_is_space (*line)) { ++line; --len; } start = line; while (len && !char_is_space (*line)) { ++line; --len; } if (start == line) goto syntax_error; loc = pika_save_unescape_iso8859_1_n (0, 0, start, line - start ); if (!is_non_upwards_relative_path (loc)) { safe_printfmt (2, "illegal path in changeset: %s\n", loc); exit (2); } rel_add_records (&answer, rel_make_record_2_taking (rel_make_field_str (loc), rel_make_field_str (perms)), rel_record_null); lim_free (0, perms); lim_free (0, loc); } safe_close (in_fd); rel_sort_table_by_field (0, answer, 0); return answer; } mode_t arch_read_permissions_patch (long * uid, long * gid, const t_uchar * file) { int errn; t_uchar * line = 0; t_uchar * s; t_uchar * e; t_ulong answer; line = read_line_from_file (file); s = line; while (char_is_space (*s)) ++s; if (str_cmp_prefix ("--permissions", s)) { syntax_error: safe_printfmt (2, "illegal metadata patch file: %s\n", file); exit (2); } s += sizeof ("--permissions") - 1; while (char_is_space (*s)) ++s; for (e = s; char_is_odigit (*e); ++e) ; if (e == s) goto syntax_error; if (cvt_octal_to_ulong (&errn, &answer, s, e - s)) goto syntax_error; if (*e != ',') { if (uid) *uid = -1; if (uid) *uid = -1; } else { s = e + 1; for (e = s; char_is_digit (*e); ++e) ; if (e == s) goto syntax_error; if (uid && cvt_decimal_to_long (&errn, uid, s, e - s)) goto syntax_error; if (*e != ',') { if (uid) *uid = -1; if (uid) *uid = -1; } else { s = e + 1; for (e = s; char_is_digit (*e); ++e) ; if (e == s) goto syntax_error; if (gid && cvt_decimal_to_long (&errn, gid, s, e - s)) goto syntax_error; } } lim_free (0, line); return (mode_t)answer; } mode_t arch_parse_permissions_params (long * uid, long * gid, const t_uchar * const line) { int errn; const t_uchar * s; const t_uchar * e; t_ulong answer; s = line; while (char_is_space (*s)) ++s; for (e = s; char_is_odigit (*e); ++e) ; if (e == s) { syntax_error: safe_printfmt (2, "illegal metadata patch param: %s\n", line); exit (2); } if (cvt_octal_to_ulong (&errn, &answer, s, e - s)) goto syntax_error; if (*e != ',') { if (uid) *uid = -1; if (uid) *uid = -1; } else { s = e + 1; for (e = s; char_is_digit (*e); ++e) ; if (e == s) goto syntax_error; if (uid && cvt_decimal_to_long (&errn, uid, s, e - s)) goto syntax_error; if (*e != ',') { if (uid) *uid = -1; if (uid) *uid = -1; } else { s = e + 1; for (e = s; char_is_digit (*e); ++e) ; if (e == s) goto syntax_error; if (gid && cvt_decimal_to_long (&errn, gid, s, e - s)) goto syntax_error; } } return (mode_t)answer; } static void changeset_inv_callback (const t_uchar * path, struct stat * stat_buf, enum arch_inventory_category category, const t_uchar * id, int has_source_name, void * closure, int escape_classes) { struct arch_changeset_inventory * index; index = (struct arch_changeset_inventory *)closure; if (!id) { t_uchar * dir = 0; dir = file_name_directory_file (0, path); if (!arch_is_dont_care_explicit_dflt_dir (dir)) { t_uchar * e_path = 0; e_path = pika_save_escape_iso8859_1 (0, 0, escape_classes, path); safe_printfmt (2, "missing explicit id for file (try tree-lint)\n file:%s\n", e_path); exit (2); } lim_free (0, dir); return; } if (S_ISDIR (stat_buf->st_mode)) rel_add_records (&index->dirs, rel_make_record_2_taking (rel_make_field_str (path), rel_make_field_str (id)), rel_record_null); else rel_add_records (&index->files, rel_make_record_2_taking (rel_make_field_str (path), rel_make_field_str (id)), rel_record_null); } /* tag: Tom Lord Thu May 15 13:00:33 2003 (changeset-utils.c) */ tla-1.3.5+dfsg/src/tla/libarch/whats-new.c0000644000175000017500000000267110457622000016773 0ustar useruser/* whats-new.c: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/bugs/panic.h" #include "hackerlab/char/str.h" #include "tla/libarch/namespace.h" #include "tla/libarch/patch-logs.h" #include "tla/libarch/missing.h" rel_table arch_whats_new (t_uchar * tree_root, struct arch_archive * arch, t_uchar * version, int skip_present) { t_uchar * latest_applied = 0; rel_table available = rel_table_nil; rel_table answer = rel_table_nil; int x; invariant (arch_valid_package_name (version, arch_no_archive, arch_req_version, 0)); latest_applied = arch_highest_patch_level (tree_root, arch->name, version); available = arch_archive_revisions (arch, version, 0); for (x = 0; x < rel_n_records (available); ++x) { if (!str_cmp (latest_applied, rel_peek_str (available, x, 0))) { ++x; break; } } while (x < rel_n_records (available)) { rel_add_records (&answer, rel_singleton_record_taking (rel_get_field (available, x, 0)), rel_record_null); ++x; } if (skip_present) answer = arch_filter_present_logs (tree_root, arch, version, answer); lim_free (0, latest_applied); rel_free_table (available); return answer; } /* tag: Tom Lord Thu Jun 5 00:53:51 2003 (whats-new.c) */ tla-1.3.5+dfsg/src/tla/libarch/pfs-dav.h0000644000175000017500000000117210457622000016416 0ustar useruser/* pfs-dav.h: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__PFS_DAV_H #define INCLUDE__LIBARCH__PFS_DAV_H #include "tla/libarch/pfs.h" /* automatically generated __STDC__ prototypes */ extern int arch_pfs_dav_supported_protocol (const t_uchar * uri); extern struct arch_pfs_session * arch_pfs_dav_connect (const t_uchar * uri); #endif /* INCLUDE__LIBARCH__PFS_DAV_H */ /* tag: Tom Lord Sat Jan 5 15:26:10 2002 (pfs-dav.h) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-archive-snapshot.c0000644000175000017500000001432010457622000021067 0ustar useruser/* cmd-archive-snapshot.c * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "config-options.h" #include "hackerlab/cmd/main.h" #include "tla/libarch/namespace.h" #include "tla/libarch/my.h" #include "tla/libarch/archive-snapshot.h" #include "tla/libarch/cmd.h" #include "tla/libarch/cmd-archive-snapshot.h" static t_uchar * usage = "[options] dir [limit]"; static t_uchar * version_string = (cfg__std__package " from regexps.com\n" "\n" "Copyright 2003 Tom Lord\n" "\n" "This is free software; see the source for copying conditions.\n" "There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\n" "PARTICULAR PURPOSE.\n" "\n" "Report bugs to " cfg__tla_bug_mail ".\n" "\n" cfg__std__release_id_string "\n"); #define OPTS(OP) \ OP (opt_help_msg, "h", "help", 0, \ "Display a help message and exit.") \ OP (opt_long_help, "H", 0, 0, \ "Display a verbose help message and exit.") \ OP (opt_version, "V", "version", 0, \ "Display a release identifier string\n" \ "and exit.") \ OP (opt_archive, "A", "archive", 1, \ "Override `my-default-archive'") t_uchar arch_cmd_archive_snapshot_help[] = ("update an archive snapshot\n" "Update the directory DIR with a \"snapshot\" of\n" "of an archive (or the part of the archive indicated\n" "by LIMIT\n" "\n" "For each archive snapshotted, DIR will contain\n" "a file and subdirectory (where $ARCH is the name\n" "of the archive):\n" "\n" " ./$ARCH.added\n" " ./$ARCH/\n" "\n" "Similarly, for each category snapshotted, DIR will\n" "contain:\n" "\n" " ./$ARCH/$CAT.added\n" " ./$ARCH/$CAT/\n" "\n" "and so on, recursively, for branches and versions.\n" "\n" "For each revision, the snapshot contains:\n" "\n" " ./$ARCH/$CAT/$BRANCH/$VERSION/$REVISION.added\n" "\n" "and that file contains a copy of the patch log entry\n" "for that revision.\n" "\n" "Snapshots can be used in combination with other tools\n" "(\'make\' is suggested) to trigger one-time events\n" "in response to new additions to an archive.\n"); enum options { OPTS (OPT_ENUM) }; static struct opt_desc opts[] = { OPTS (OPT_DESC) {-1, 0, 0, 0, 0} }; int arch_cmd_archive_snapshot (t_uchar * program_name, int argc, char * argv[]) { int o; struct opt_parsed * option; t_uchar * default_archive = 0; safe_buffer_fd (1, 0, O_WRONLY, 0); option = 0; while (1) { o = opt_standard (lim_use_must_malloc, &option, opts, &argc, argv, program_name, usage, version_string, arch_cmd_archive_snapshot_help, opt_help_msg, opt_long_help, opt_version); if (o == opt_none) break; switch (o) { default: safe_printfmt (2, "unhandled option `%s'\n", option->opt_string); panic ("internal error parsing arguments"); usage_error: opt_usage (2, argv[0], program_name, usage, 1); exit (1); /* bogus_arg: */ safe_printfmt (2, "ill-formed argument for `%s' (`%s')\n", option->opt_string, option->arg_string); goto usage_error; case opt_archive: { default_archive = str_save (0, option->arg_string); break; } } } if ((argc < 2) || (argc > 3)) goto usage_error; if (default_archive) { if (!arch_valid_archive_name (default_archive)) { safe_printfmt (2, "%s: invalid archive name (%s)\n", argv[0], default_archive); exit (1); } } { t_uchar * dir; t_uchar * limit_spec; t_uchar * archive = 0; t_uchar * limit = 0; struct arch_archive * arch = 0; dir = argv[1]; if (argc == 2) { archive = arch_my_default_archive (default_archive); } else { limit_spec = argv[1]; if (!arch_valid_package_name (limit_spec, arch_maybe_archive, arch_req_category, 1)) { safe_printfmt (2, "%s: invalid limit spec (%s)\n", argv[0], limit_spec); exit (1); } archive = arch_parse_package_name (arch_ret_archive, default_archive, limit_spec); limit = arch_parse_package_name (arch_ret_non_archive, 0, limit_spec); } arch = arch_archive_connect (archive, 0); archive_snapshot (arch, limit, dir); arch_archive_close (arch); lim_free (0, archive); lim_free (0, limit); } lim_free (0, default_archive); return 0; } /* tag: Tom Lord Mon Jun 9 01:39:26 2003 (cmd-archive-snapshot.c) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-missing.h0000644000175000017500000000126310457622000017271 0ustar useruser/* cmd-missing.h: * **************************************************************** * Copyright (C) 2003 Tom Lord, Stig Brautaset * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__CMD_WHATS_MISSING_H #define INCLUDE__LIBARCH__CMD_WHATS_MISSING_H #include "hackerlab/machine/types.h" extern t_uchar arch_cmd_missing_help[]; /* automatically generated __STDC__ prototypes */ extern int arch_cmd_missing (t_uchar * program_name, int argc, char * argv[]); #endif /* INCLUDE__LIBARCH__CMD_WHATS_MISSING_H */ /* tag: Stig Brautaset Sat Jun 7 17:57:06 BST 2003 (cmd-whats-missing.h) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-versions.c0000644000175000017500000001107610457622000017466 0ustar useruser/* cmd-versions.c * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "config-options.h" #include "hackerlab/cmd/main.h" #include "tla/libarch/namespace.h" #include "tla/libarch/project-tree.h" #include "tla/libarch/my.h" #include "tla/libarch/archive.h" #include "tla/libarch/cmd-versions.h" #include "tla/libarch/cmdutils.h" static t_uchar * usage = "[options] [branch]"; static t_uchar * version_string = (cfg__std__package " from regexps.com\n" "\n" "Copyright 2003 Tom Lord\n" "\n" "This is free software; see the source for copying conditions.\n" "There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\n" "PARTICULAR PURPOSE.\n" "\n" "Report bugs to " cfg__tla_bug_mail ".\n" "\n" cfg__std__release_id_string "\n"); #define OPTS(OP) \ OP (opt_help_msg, "h", "help", 0, \ "Display a help message and exit.") \ OP (opt_long_help, "H", 0, 0, \ "Display a verbose help message and exit.") \ OP (opt_version, "V", "version", 0, \ "Display a release identifier string\n" \ "and exit.") \ OP (opt_archive, "A", "archive", 1, \ "Override `my-default-archive'") \ OP (opt_reverse, "r", "reverse", 0, \ "sort from newest to oldest") t_uchar arch_cmd_versions_help[] = ("list the versions in an archive branch\n" "Print a list of versions within an archive branch.\n" "\n" "The list is ordinarily sorted from oldest to newest,\n" "but the order can be changed with -r (--reverse).\n"); enum options { OPTS (OPT_ENUM) }; static struct opt_desc opts[] = { OPTS (OPT_DESC) {-1, 0, 0, 0, 0} }; int arch_cmd_versions (t_uchar * program_name, int argc, char * argv[]) { int o; struct opt_parsed * option; t_uchar * default_archive; int reverse; default_archive = 0; reverse = 0; safe_buffer_fd (1, 0, O_WRONLY, 0); option = 0; while (1) { o = opt_standard (lim_use_must_malloc, &option, opts, &argc, argv, program_name, usage, version_string, arch_cmd_versions_help, opt_help_msg, opt_long_help, opt_version); if (o == opt_none) break; switch (o) { default: safe_printfmt (2, "unhandled option `%s'\n", option->opt_string); panic ("internal error parsing arguments"); usage_error: opt_usage (2, argv[0], program_name, usage, 1); exit (1); /* bogus_arg: */ safe_printfmt (2, "ill-formed argument for `%s' (`%s')\n", option->opt_string, option->arg_string); goto usage_error; case opt_archive: { default_archive = str_save (0, option->arg_string); break; } case opt_reverse: { reverse = 1; break; } } } if (argc > 2) goto usage_error; default_archive = arch_my_default_archive (default_archive); { t_uchar * branch_spec = 0; t_uchar * archive = 0; t_uchar * branch = 0; struct arch_archive * arch = 0; rel_table versions = rel_table_nil; if (argc == 2) { branch_spec = str_save (0, argv[1]); if (!arch_valid_package_name (branch_spec, arch_maybe_archive, arch_req_package, 0)) { safe_printfmt (2, "%s: invalid branch name (%s)\n", argv[0], branch_spec); exit (2); } } else branch_spec = arch_try_tree_version (program_name); archive = arch_parse_package_name (arch_ret_archive, default_archive, branch_spec); branch = arch_parse_package_name (arch_ret_package, 0, branch_spec); arch = arch_archive_connect (archive, 0); if (argc == 2) arch_check_for (arch, arch_req_package, branch); versions = arch_archive_versions (arch, branch); if (reverse) arch_sort_table_by_name_field (1, versions, 0); rel_print_table (1, versions); lim_free (0, branch_spec); } return 0; } /* tag: Tom Lord Tue May 20 15:12:27 2003 (versions.c) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-make-category.c0000644000175000017500000001030210457622000020335 0ustar useruser/* cmd-make-category.c * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "config-options.h" #include "hackerlab/cmd/main.h" #include "tla/libarch/namespace.h" #include "tla/libarch/project-tree.h" #include "tla/libarch/my.h" #include "tla/libarch/archive.h" #include "tla/libarch/cmd-make-category.h" static t_uchar * usage = "[options] category"; static t_uchar * version_string = (cfg__std__package " from regexps.com\n" "\n" "Copyright 2003 Tom Lord\n" "\n" "This is free software; see the source for copying conditions.\n" "There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\n" "PARTICULAR PURPOSE.\n" "\n" "Report bugs to " cfg__tla_bug_mail ".\n" "\n" cfg__std__release_id_string "\n"); #define OPTS(OP) \ OP (opt_help_msg, "h", "help", 0, \ "Display a help message and exit.") \ OP (opt_long_help, "H", 0, 0, \ "Display a verbose help message and exit.") \ OP (opt_version, "V", "version", 0, \ "Display a release identifier string\n" \ "and exit.") \ OP (opt_archive, "A", "archive", 1, \ "Override `my-default-archive'") t_uchar arch_cmd_make_category_help[] = ("create a new archive category\n" "Create CATEGORY as a category in the indicated archive.\n" "The category must not already exist.\n"); enum options { OPTS (OPT_ENUM) }; static struct opt_desc opts[] = { OPTS (OPT_DESC) {-1, 0, 0, 0, 0} }; int arch_cmd_make_category (t_uchar * program_name, int argc, char * argv[]) { int o; struct opt_parsed * option; t_uchar * default_archive; default_archive = 0; safe_buffer_fd (1, 0, O_WRONLY, 0); option = 0; while (1) { o = opt_standard (lim_use_must_malloc, &option, opts, &argc, argv, program_name, usage, version_string, arch_cmd_make_category_help, opt_help_msg, opt_long_help, opt_version); if (o == opt_none) break; switch (o) { default: safe_printfmt (2, "unhandled option `%s'\n", option->opt_string); panic ("internal error parsing arguments"); usage_error: opt_usage (2, argv[0], program_name, usage, 1); exit (1); /* bogus_arg: */ safe_printfmt (2, "ill-formed argument for `%s' (`%s')\n", option->opt_string, option->arg_string); goto usage_error; case opt_archive: { default_archive = str_save (0, option->arg_string); break; } } } if (argc != 2) goto usage_error; default_archive = arch_my_default_archive (default_archive); { t_uchar * cat_spec; t_uchar * archive = 0; t_uchar * cat = 0; struct arch_archive * arch = 0; t_uchar * errstr = 0; cat_spec = argv[1]; if (!arch_valid_package_name (cat_spec, arch_maybe_archive, arch_req_category, 0)) { safe_printfmt (2, "%s: invalid category name (%s)\n", argv[0], cat_spec); exit (2); } if (arch_is_system_package_name (cat_spec)) { safe_printfmt (2, "%s: user's can not create system categories\n category: %s\n", argv[0], cat_spec); exit (2); } archive = arch_parse_package_name (arch_ret_archive, default_archive, cat_spec); cat = arch_parse_package_name (arch_ret_category, 0, cat_spec); arch = arch_archive_connect (archive, 0); if (arch_make_category (&errstr, arch, cat)) { safe_printfmt (2, "%s: unable to create category %s (%s)\n archive: %s\n", argv[0], cat, errstr, archive); exit (1); } } return 0; } /* tag: Tom Lord Tue May 20 19:45:17 2003 (make-category.c) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-default-id.h0000644000175000017500000000126110457622000017634 0ustar useruser/* cmd-default-id.h: * **************************************************************** * Copyright (C) 2003 Tom Lord, Stig Brautaset * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__CMD_DEFAULT_ID_H #define INCLUDE__LIBARCH__CMD_DEFAULT_ID_H #include "hackerlab/machine/types.h" extern t_uchar arch_cmd_default_id_help[]; /* automatically generated __STDC__ prototypes */ extern int arch_cmd_default_id (t_uchar * program_name, int argc, char * argv[]); #endif /* INCLUDE__LIBARCH__CMD_DEFAULT_ID_H */ /* tag: Stig Brautaset Sat Jun 7 13:44:29 BST 2003 (cmd-default-tag.h) */ tla-1.3.5+dfsg/src/tla/libarch/exec.h0000644000175000017500000000104210457622000015776 0ustar useruser/* exec.h: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__EXEC_H #define INCLUDE__LIBARCH__EXEC_H #include "hackerlab/machine/types.h" /* automatically generated __STDC__ prototypes */ extern int arch_util_execvp (t_uchar * prog, t_uchar ** argv); #endif /* INCLUDE__LIBARCH__EXEC_H */ /* tag: Tom Lord Sat Jan 5 15:26:10 2002 (exec.h) */ tla-1.3.5+dfsg/src/tla/libarch/libarch.doc0000644000175000017500000000342310457622000017001 0ustar useruser/**************************************************************** *(book "libarch" * :subtitles ("A Guide to GNU arch Internals" * "for libarch version 1.2") * :authors ("Thomas Lord ") * :one-line-summary "" * :keywords ("arch" * "tla" * "internals" * "library") * :copyright-years (2003) * :copyright "Thomas Lord" * :publisher #f * :home-page-link "A GNU project" * :contains ("Welcome to arch" * #f * "The GNU Free Documentation License" * "The GNU General Public License" * #f * "Indexes") * * :permissions ("Permission is granted to copy, distribute and/or modify this document" * "under the terms of the GNU Free Documentation License, Version 1.1" * "or any later version published by the Free Software Foundation;" * "with the Invariant Sections being:" * "" * " The GNU General Public License" * " The GNU Free Documentation License" * "" * "with the Front-Cover Texts being" * "" * " (none)," * "" * "and with the Back-Cover Texts being" * "" * " (none)." * "" * "A copy of the license is included in the section entitled \"GNU" * "Free Documentation License\".")) * */ /* tag: Tom Lord Thu Nov 20 12:14:01 2003 (libscm.doc) */ tla-1.3.5+dfsg/src/tla/libarch/make-changeset-files.c0000644000175000017500000002127110457622000021027 0ustar useruser/* make-changeset-files.c: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/mem/mem.h" #include "hackerlab/char/str.h" #include "hackerlab/char/pika-escaping-utils.h" #include "hackerlab/fs/file-names.h" #include "hackerlab/vu/safe.h" #include "tla/libarch/diffs.h" #include "tla/libawk/relassoc.h" #include "tla/libarch/invent.h" #include "tla/libarch/make-changeset-files.h" /* __STDC__ prototypes for static functions */ static void __attribute__((format (printf, 2, 3))) invoke_report_callback (struct arch_make_changeset_report * report, const char * fmt, ...); static int find_id_in_inventory (rel_table invent, const t_uchar * id); static void double_check_file_identity (const t_uchar * from_here_path, const t_uchar * tree_root, const t_uchar * loc); #if !defined(__GNUC__) # undef __attribute__ # define __attribute__(X) #endif static void __attribute__((format (printf, 2, 3))) invoke_report_callback (struct arch_make_changeset_report * report, const char * fmt, ...) { va_list ap; if (report->callback) { va_start (ap, fmt); report->callback (report->thunk, fmt, ap); va_end (ap); } } void arch_make_files_changeset (struct arch_make_changeset_report * report, const t_uchar * dest, rel_table file_list, const t_uchar * orig, const t_uchar * mod, enum arch_id_tagging_method method, enum arch_inventory_category untagged_source_category, int escape_classes) { int x; struct arch_changeset_report csr = {rel_table_nil,}; if (method == arch_unspecified_id_tagging) { method = arch_tree_id_tagging_method (&untagged_source_category, mod, 0); } mem_set0 ((t_uchar *)&report->orig_index, sizeof (report->orig_index)); mem_set0 ((t_uchar *)&report->mod_index, sizeof (report->mod_index)); arch_changeset_inventory (&report->orig_index, orig, orig, method, untagged_source_category, escape_classes); report->mod_index.dirs = rel_copy_table (report->orig_index.dirs); report->mod_index.files = rel_copy_table (report->orig_index.files); /**************************************************************** * build associative tables too and from ids and locs */ report->orig_dir_id_of = rel_to_assoc (report->orig_index.dirs, 0, 1); report->orig_dir_loc_of = rel_to_assoc (report->orig_index.dirs, 1, 0); report->orig_file_id_of = rel_to_assoc (report->orig_index.files, 0, 1); report->orig_file_loc_of = rel_to_assoc (report->orig_index.files, 1, 0); report->mod_dir_id_of = rel_to_assoc (report->mod_index.dirs, 0, 1); report->mod_dir_loc_of = rel_to_assoc (report->mod_index.dirs, 1, 0); report->mod_file_id_of = rel_to_assoc (report->mod_index.files, 0, 1); report->mod_file_loc_of = rel_to_assoc (report->mod_index.files, 1, 0); assoc_set_taking (&report->orig_dir_id_of, rel_make_field_str ("."), rel_make_field_str ("?_.")); assoc_set_taking (&report->mod_dir_id_of, rel_make_field_str ("."), rel_make_field_str ("?_.")); assoc_set_taking (&report->orig_dir_loc_of, rel_make_field_str ("?_."), rel_make_field_str (".")); assoc_set_taking (&report->mod_dir_loc_of, rel_make_field_str ("?_."), rel_make_field_str (".")); arch_make_changeset_compute_container_map (&report->orig_container_dir_id_of_dir_id, report->orig_dir_id_of, report->orig_index.dirs); arch_make_changeset_compute_container_map (&report->orig_container_dir_id_of_file_id, report->orig_dir_id_of, report->orig_index.files); arch_make_changeset_compute_container_map (&report->mod_container_dir_id_of_dir_id, report->mod_dir_id_of, report->mod_index.dirs); arch_make_changeset_compute_container_map (&report->mod_container_dir_id_of_file_id, report->mod_dir_id_of, report->mod_index.files); arch_make_empty_changeset (report, &csr, dest); for (x = 0; x < rel_n_records (file_list); ++x) { t_uchar * id = 0; int orig_index; int mod_index; t_uchar * orig_path = 0; t_uchar * mod_path = 0; int diff_fd; id = arch_inventory_id (method, untagged_source_category, rel_peek_str (file_list, x, 0), 0, 0, 0); orig_index = find_id_in_inventory (report->orig_index.files, id); mod_index = find_id_in_inventory (report->mod_index.files, id); if (orig_index < 0) { safe_printfmt (2, "make-changeset-files: file missing from ORIG tree (%s)\n", rel_peek_str (file_list, x, 0)); exit (1); } if (mod_index < 0) { safe_printfmt (2, "make-changeset-files: file missing from MOD tree (%s)\n", rel_peek_str (file_list, x, 0)); exit (1); } double_check_file_identity (rel_peek_str (file_list, x, 0), mod, rel_peek_str (report->mod_index.files, mod_index, 0)); orig_path = file_name_in_vicinity (0, orig, rel_peek_str (report->orig_index.files, orig_index, 0)); mod_path = file_name_in_vicinity (0, mod, rel_peek_str (report->mod_index.files, mod_index, 0)); if (arch_binary_files_differ (orig_path, mod_path, 0, 0)) { int diff_stat; t_uchar * escaped_tmp; escaped_tmp = pika_save_escape_iso8859_1 (0, 0, escape_classes, rel_peek_str (file_list, x, 0)); invoke_report_callback (report, "M %s\n", escaped_tmp); diff_fd = arch_changeset_add_diffs (&csr, report, dest, rel_peek_str (report->orig_index.files, orig_index, 0), rel_peek_str (report->mod_index.files, mod_index, 0), id); diff_stat = arch_invoke_diff (diff_fd, orig_path, rel_peek_str (report->orig_index.files, orig_index, 0), mod_path, rel_peek_str (report->orig_index.files, orig_index, 0), 0, 0); safe_close (diff_fd); lim_free (0, escaped_tmp); if (diff_stat == 1) { t_uchar diff_pseudo_magic[sizeof ("binary files ")]; t_uchar * patches_path = 0; t_uchar * patch_path = 0; int diff_in_fd; long amt; patches_path = file_name_in_vicinity (0, dest, "patches"); patch_path = file_name_in_vicinity (0, patches_path, rel_peek_str (report->mod_index.files, mod_index, 0)); patch_path = str_realloc_cat (0, patch_path, ".patch"); diff_in_fd = safe_open (patch_path, O_RDONLY, 0); /* diff might have just said "binary files differ" or something * similar. */ amt = safe_read (diff_in_fd, diff_pseudo_magic, sizeof (diff_pseudo_magic) - 1); if (amt > 0) { diff_pseudo_magic[amt] = 0; if (!str_casecmp (diff_pseudo_magic, "binary files ")) diff_stat = 2; } safe_close (diff_in_fd); lim_free (0, patch_path); lim_free (0, patches_path); } if (diff_stat == 2) { safe_printfmt (2, "binary files not yet supported with --files or --file-list\n"); exit (2); } } lim_free (0, id); lim_free (0, orig_path); lim_free (0, mod_path); } arch_changeset_rewrite_indexes (dest, &csr); arch_free_changeset_report_data (&csr); } static int find_id_in_inventory (rel_table invent, const t_uchar * id) { int x; for (x = 0; x < rel_n_records (invent); ++x) { if (!str_cmp (id, rel_peek_str (invent, x, 1))) return x; } return -1; } static void double_check_file_identity (const t_uchar * from_here_path, const t_uchar * tree_root, const t_uchar * loc) { struct stat users_stat; t_uchar * computed_path = 0; struct stat computed_stat; safe_stat (from_here_path, &users_stat); computed_path = file_name_in_vicinity (0, tree_root, loc); safe_stat (computed_path, &computed_stat); lim_free (0, computed_path); if ((users_stat.st_dev != computed_stat.st_dev) || (users_stat.st_ino != computed_stat.st_ino)) { safe_printfmt (2, "make-changeset --files: the file specified as %s\n is not the same as the one in the project tree (%s)\n", from_here_path, computed_path); exit (1); } } /* tag: Tom Lord Tue Jun 17 21:39:34 2003 (make-changeset-files.c) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-library-revisions.h0000644000175000017500000000134110457622000021300 0ustar useruser/* cmd-library-revisions.h: * **************************************************************** * Copyright (C) 2003 Tom Lord, Stig Brautaset * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__CMD_LIBRARY_REVISIONS_H #define INCLUDE__LIBARCH__CMD_LIBRARY_REVISIONS_H #include "hackerlab/machine/types.h" extern t_uchar arch_cmd_library_revisions_help[]; /* automatically generated __STDC__ prototypes */ extern int arch_cmd_library_revisions (t_uchar * program_name, int argc, char * argv[]); #endif /* INCLUDE__LIBARCH__CMD_LIBRARY_REVISIONS_H */ /* tag: Stig Brautaset Sat Jun 7 15:14:26 BST 2003 (cmd-library-revisions.h) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-lock-revision.c0000644000175000017500000002034010457622000020374 0ustar useruser/* cmd-lock-revision.c * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "config-options.h" #include "hackerlab/cmd/main.h" #include "tla/libarch/namespace.h" #include "tla/libarch/project-tree.h" #include "tla/libarch/my.h" #include "tla/libarch/archive.h" #include "tla/libarch/cmd-lock-revision.h" static t_uchar * usage = "[options] revision"; static t_uchar * version_string = (cfg__std__package " from regexps.com\n" "\n" "Copyright 2003 Tom Lord\n" "\n" "This is free software; see the source for copying conditions.\n" "There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\n" "PARTICULAR PURPOSE.\n" "\n" "Report bugs to " cfg__tla_bug_mail ".\n" "\n" cfg__std__release_id_string "\n"); #define OPTS(OP) \ OP (opt_help_msg, "h", "help", 0, \ "Display a help message and exit.") \ OP (opt_long_help, "H", 0, 0, \ "Display a verbose help message and exit.") \ OP (opt_version, "V", "version", 0, \ "Display a release identifier string\n" \ "and exit.") \ OP (opt_archive, "A", "archive", 1, \ "Override `my-default-archive'") \ OP (opt_unlock, "u", "unlock", 0, \ "release a lock owned by you") \ OP (opt_break, "b", "break", 0, \ "break any existing lock") t_uchar arch_cmd_lock_revision_help[] = ("lock (or unlock) an archive revision\n" "Acquire the lock needed to create REVISION.\n" "\n" "Revision must be the next patch-level in sequence, however,\n" "if no patch level is specified, the lock is taken unconditionally.\n" "If no version is specified, the latest version is locked.\n"); enum options { OPTS (OPT_ENUM) }; static struct opt_desc opts[] = { OPTS (OPT_DESC) {-1, 0, 0, 0, 0} }; enum op { lock, unlock, breaklock }; int arch_cmd_lock_revision (t_uchar * program_name, int argc, char * argv[]) { int o; struct opt_parsed * option; t_uchar * default_archive = 0; enum op op; int status; default_archive = 0; op = lock; safe_buffer_fd (1, 0, O_WRONLY, 0); option = 0; while (1) { o = opt_standard (lim_use_must_malloc, &option, opts, &argc, argv, program_name, usage, version_string, arch_cmd_lock_revision_help, opt_help_msg, opt_long_help, opt_version); if (o == opt_none) break; switch (o) { default: safe_printfmt (2, "unhandled option `%s'\n", option->opt_string); panic ("internal error parsing arguments"); usage_error: opt_usage (2, argv[0], program_name, usage, 1); exit (1); /* bogus_arg: */ safe_printfmt (2, "ill-formed argument for `%s' (`%s')\n", option->opt_string, option->arg_string); goto usage_error; case opt_archive: { default_archive = str_save (0, option->arg_string); break; } case opt_unlock: { op = unlock; break; } case opt_break: { op = breaklock; break; } } } if (argc != 2) goto usage_error; default_archive = arch_my_default_archive (default_archive); { t_uchar * revision_spec; t_uchar * archive = 0; t_uchar * revision = 0; t_uchar * version = 0; t_uchar * uid = 0; struct arch_archive * arch = 0; t_uchar * prev_revision = 0; t_uchar * prev_level = 0; t_uchar * errstr = 0; revision_spec = argv[1]; if (!arch_valid_package_name (revision_spec, arch_maybe_archive, arch_req_patch_level, 0)) { safe_printfmt (2, "%s: invalid revision name (%s)\n", argv[0], revision_spec); exit (2); } archive = arch_parse_package_name (arch_ret_archive, default_archive, revision_spec); revision = arch_parse_package_name (arch_ret_non_archive, 0, revision_spec); version = arch_parse_package_name (arch_ret_package_version, 0, revision); uid = arch_my_id_uid (); arch = arch_archive_connect (archive, 0); prev_revision = arch_previous_revision (arch, revision); if (!prev_revision) prev_level = 0; else prev_level = arch_parse_package_name (arch_ret_patch_level, 0, prev_revision); switch (op) { case lock: { if (arch_archive_lock_revision (&errstr, arch, version, prev_level, uid, 0, 0)) { safe_printfmt (2, "%s: error locking revision %s/%s -- %s\n", argv[0], archive, revision, errstr); status = 1; } else status = 0; break; } case unlock: { if (arch_archive_break_revision_lock (&errstr, arch, version, prev_level, uid, 0)) { safe_printfmt (2, "%s: error unlocking revision %s/%s -- %s\n", argv[0], archive, revision, errstr); status = 1; } else status = 0; break; } case breaklock: { t_uchar * lock_prev_level = 0; t_uchar * locker_uid = 0; t_uchar * txn_id = 0; enum arch_revision_lock_state state; state = arch_archive_revision_lock_state (&lock_prev_level, &locker_uid, &txn_id, arch, version); switch (state) { default: { safe_printfmt (2, "%s: unrecognized lock state for %s/%s\n", argv[0], archive, revision); exit (2); break; } case arch_revision_illegal_lock_state: { safe_printfmt (2, "%s: illegal lock state for %s/%s\n", argv[0], archive, revision); safe_printfmt (2, " consult an admin or arch expert (this shouldn't happen)\n"); exit (2); break; } case arch_revision_unknown_lock_state: { safe_printfmt (2, "%s: unkown lock state for %s/%s\n", argv[0], archive, revision); safe_printfmt (2, " (lock was in transition -- consider retrying)\n"); exit (1); break; } case arch_revision_unlocked: { break_from_unlocked: safe_printfmt (2, "%s: revision not locked -- %s/%s\n", argv[0], archive, revision); exit (0); break; } case arch_revision_user_locked: case arch_revision_txn_locked: { if (str_cmp (lock_prev_level, prev_level)) goto break_from_unlocked; if (arch_archive_break_revision_lock (&errstr, arch, version, lock_prev_level, locker_uid, txn_id)) { safe_printfmt (2, "%s: error unlocking revision %s/%s -- %s\n", argv[0], archive, revision, errstr); status = 1; } else status = 0; } } lim_free (0, lock_prev_level); lim_free (0, locker_uid); lim_free (0, txn_id); } break; } lim_free (0, archive); lim_free (0, revision); lim_free (0, version); lim_free (0, uid); lim_free (0, prev_revision); lim_free (0, prev_level); } lim_free (0, default_archive); exit (status); return 0; } /* tag: Tom Lord Sat May 24 16:18:02 2003 (lock-revision.c) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-get-changeset.h0000644000175000017500000000130110457622000020327 0ustar useruser/* cmd-get-changeset.h: * **************************************************************** * Copyright (C) 2003 Tom Lord, Stig Brautaset * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__CMD_GET_CHANGESET_H #define INCLUDE__LIBARCH__CMD_GET_CHANGESET_H #include "hackerlab/machine/types.h" extern t_uchar arch_cmd_get_changeset_help[]; /* automatically generated __STDC__ prototypes */ extern int arch_cmd_get_changeset (t_uchar * program_name, int argc, char * argv[]); #endif /* INCLUDE__LIBARCH__CMD_GET_CHANGESET_H */ /* tag: Stig Brautaset Sat Jun 7 14:18:07 BST 2003 (cmd-get-patch.h) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-grab.h0000644000175000017500000000120110457622000016523 0ustar useruser/* cmd-grab.h: * **************************************************************** * Copyright (C) 2003 Tom Lord, Mark Thomas * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__CMD_GRAB_H #define INCLUDE__LIBARCH__CMD_GRAB_H #include "hackerlab/machine/types.h" extern t_uchar arch_cmd_grab_help[]; /* automatically generated __STDC__ prototypes */ extern int arch_cmd_grab (t_uchar * program_name, int argc, char * argv[]); #endif /* INCLUDE__LIBARCH__CMD_MY_ID_H */ /* tag: Mark Thomas Tue Jul 29 22:22:36 BST 2003 (cmd-grab.h) */ tla-1.3.5+dfsg/src/tla/libarch/cached-inventory.c0000644000175000017500000000261610457622000020317 0ustar useruser/* cached-inventory.c: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/fs/file-names.h" #include "hackerlab/vu/safe.h" #include "tla/libfsutils/rmrf.h" #include "tla/libfsutils/tmp-files.h" #include "tla/libarch/invent.h" #include "tla/libarch/changeset-utils.h" #include "tla/libarch/cached-inventory.h" rel_table arch_cached_index (t_uchar * tree_root) { t_uchar * inventory_path = 0; rel_table answer = rel_table_nil; inventory_path = file_name_in_vicinity (0, tree_root, ",,index"); if (!safe_access (inventory_path, F_OK)) { answer = arch_read_changeset_index (inventory_path); rel_sort_table_by_field (0, answer, 1); } else { t_uchar * tmp = 0; int out_fd = -1; answer = arch_source_inventory (tree_root, 1, 0, 0); rel_sort_table_by_field (0, answer, 1); tmp = tmp_file_name (tree_root, ",,index"); rmrf_file (tmp); out_fd = safe_open (tmp, O_WRONLY | O_CREAT | O_EXCL, 0444); rel_print_table (out_fd, answer); safe_close (out_fd); safe_rename (tmp, inventory_path); lim_free (0, tmp); } lim_free (0, inventory_path); return answer; } /* tag: Tom Lord Fri May 30 20:13:03 2003 (cached-inventory.c) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-abrowse.c0000644000175000017500000007242510457622000017265 0ustar useruser/* cmd-abrowse.c * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "config-options.h" #include "hackerlab/cmd/main.h" #include "tla/libarch/patch-logs.h" #include "tla/libarch/namespace.h" #include "tla/libarch/project-tree.h" #include "tla/libarch/my.h" #include "tla/libarch/archive.h" #include "tla/libarch/cmd-abrowse.h" static t_uchar * usage = "[options] [limit]"; static t_uchar * version_string = (cfg__std__package " from regexps.com\n" "\n" "Copyright 2003 Tom Lord\n" "\n" "This is free software; see the source for copying conditions.\n" "There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\n" "PARTICULAR PURPOSE.\n" "\n" "Report bugs to " cfg__tla_bug_mail ".\n" "\n" cfg__std__release_id_string "\n"); #define OPTS(OP) \ OP (opt_help_msg, "h", "help", 0, \ "Display a help message and exit.") \ OP (opt_long_help, "H", 0, 0, \ "Display a verbose help message and exit.") \ OP (opt_version, "V", "version", 0, \ "Display a release identifier string\n" \ "and exit.") \ OP (opt_archive, "A", "archive", 1, \ "Override `my-default-archive'") \ OP (opt_reverse, "r", "reverse", 0, \ "sort revisions from newest to oldest") \ OP (opt_summary, "s", "summary", 0, \ "print a summary of each patch") \ OP (opt_creator, "c", "creator", 0, \ "print the creator of each patch") \ OP (opt_date, "D", "date", 0, \ "print the date of each patch") \ OP (opt_kind, "k", "kind", 0, \ "show each revision kind (import, changeset or id)") \ OP (opt_cacherevs, "C", "cacherevs", 0, \ "show cached revisions") \ OP (opt_full, "f", "full", 0, \ "print full patch level names") \ OP (opt_desc, 0, "desc", 0, \ "implies -s -c -D -k -C") \ OP (opt_local_merges, 0, "local-merges", 0, \ "list merges from the same archive") \ OP (opt_foreign_merges, 0, "foreign-merges", 0, \ "list merges from other archives") \ OP (opt_all_merges, 0, "merges", 0, \ "list all merges") \ OP (opt_categories, 0, "categories", 0, \ "show category names only") \ OP (opt_branches, 0, "branches", 0, \ "show branch names only") \ OP (opt_versions, 0, "versions", 0, \ "show version names only") \ OP (opt_omit_empty, 0, "omit-empty", 0, \ "omit empty or unchanged-since items") \ OP (opt_since, 0, "since SNAP-FILE", 1, \ "show revisions after those listed in SNAP-FILE") \ OP (opt_since_limits, 0, "since-limits", 0, \ "limit output to items in the since file") \ OP (opt_snap, 0, "snap SNAP-FILE", 1, \ "record the highest revisions shown") \ OP (opt_force, 0, "force", 0, \ "overwrite an existing snap-file") t_uchar arch_cmd_abrowse_help[] = ("print an outline describing archive contents\n" "Describe the contents of an archive in outline format.\n" "\n" "With LIMIT, look only that part of the archive.\n" "\n" "LIMIT may be a fully qualified name and may be an archive name.\n"); enum options { OPTS (OPT_ENUM) }; static struct opt_desc opts[] = { OPTS (OPT_DESC) {-1, 0, 0, 0, 0} }; enum abrowse_depth { category_depth, branch_depth, version_depth, revision_depth, }; int arch_cmd_abrowse (t_uchar * program_name, int argc, char * argv[]) { int o; struct opt_parsed * option; t_uchar * default_archive = 0; int reverse = 0; int wanted_headers = 0; int show_kind = 0; int show_cacherevs = 0; enum abrowse_depth depth = revision_depth; t_uchar * since = 0; int since_limits_opt = 0; t_uchar * snap = 0; int snap_force = 0; int omit_empty = 0; int full = 0; safe_buffer_fd (1, 0, O_WRONLY, 0); option = 0; while (1) { o = opt_standard (lim_use_must_malloc, &option, opts, &argc, argv, program_name, usage, version_string, arch_cmd_abrowse_help, opt_help_msg, opt_long_help, opt_version); if (o == opt_none) break; switch (o) { default: safe_printfmt (2, "unhandled option `%s'\n", option->opt_string); panic ("internal error parsing arguments"); usage_error: opt_usage (2, argv[0], program_name, usage, 1); exit (1); /* bogus_arg: */ safe_printfmt (2, "ill-formed argument for `%s' (`%s')\n", option->opt_string, option->arg_string); goto usage_error; case opt_archive: { default_archive = str_save (0, option->arg_string); break; } case opt_reverse: { reverse = 1; break; } case opt_summary: { wanted_headers |= arch_include_summary; break; } case opt_creator: { wanted_headers |= arch_include_creator; break; } case opt_date: { wanted_headers |= arch_include_date; break; } case opt_local_merges: { wanted_headers |= arch_include_local_merges; break; } case opt_foreign_merges: { wanted_headers |= arch_include_foreign_merges; break; } case opt_all_merges: { wanted_headers |= arch_include_local_merges; wanted_headers |= arch_include_foreign_merges; break; } case opt_kind: { show_kind = 1; break; } case opt_cacherevs: { show_cacherevs = 1; break; } case opt_desc: { wanted_headers |= (arch_include_summary | arch_include_creator | arch_include_date); show_kind = 1; show_cacherevs = 1; break; } case opt_categories: { depth = category_depth; break; } case opt_branches: { depth = branch_depth; break; } case opt_versions: { depth = version_depth; break; } case opt_since: { lim_free (0, since); since = str_save (0, option->arg_string); break; } case opt_since_limits: { since_limits_opt = 1; break; } case opt_snap: { lim_free (0, since); snap = str_save (0, option->arg_string); break; } case opt_force: { snap_force = 1; break; } case opt_omit_empty: { omit_empty = 1; break; } case opt_full: { full = 1; break; } } } if (argc > 2) goto usage_error; default_archive = arch_my_default_archive (default_archive); { t_uchar * limit_spec = 0; t_uchar * archive = 0; t_uchar * limit_category = 0; t_uchar * limit_branch = 0; t_uchar * limit_version = 0; t_uchar * limit_revision = 0; assoc_table limit_categories = 0; assoc_table limit_branches = 0; assoc_table limit_versions = 0; struct arch_archive * arch = 0; assoc_table since_limits = 0; rel_table old_since_limits = rel_table_nil; /* [0] version [1] level */ rel_table new_since_limits = rel_table_nil; /* [0] version [1] level */ /******************************** * Set archive and limit spec. * */ if (argc == 2) { limit_spec = str_save (0, argv[1]); } if (limit_spec && arch_valid_archive_name (limit_spec)) { archive = limit_spec; limit_spec = 0; } else if (limit_spec && !arch_valid_package_name (limit_spec, arch_maybe_archive, arch_req_category, 1)) { safe_printfmt (1, "abrowse: invalid limit spec (%s)\n", limit_spec); exit (1); } else if (limit_spec) { archive = arch_parse_package_name (arch_ret_archive, default_archive, limit_spec); } else { archive = arch_my_default_archive (default_archive); } /******************************** * sanity check */ if (snap && !snap_force && !safe_access (snap, F_OK)) { safe_printfmt (2, "%s: --snap output exists and --force not provided (%s)\n", argv[0], snap); exit (1); } if (snap && (depth != revision_depth)) { safe_printfmt (2, "%s: --snap is incompatible with --categories, --branches, and --versions\n", argv[0]); exit (1); } if (since_limits_opt && !since) { safe_printfmt (2, "%s: --since-limits requires --since\n", argv[0]); exit (1); } /******************************** * parse the limit spec */ if (arch_valid_package_name (limit_spec, arch_maybe_archive, arch_req_category, 1)) { limit_category = arch_parse_package_name (arch_ret_category, 0, limit_spec); limit_branch = arch_parse_package_name (arch_ret_package, 0, limit_spec); if (!str_cmp (limit_category, limit_branch)) { lim_free (0, limit_branch); limit_branch = 0; } else if (arch_valid_package_name (limit_spec, arch_maybe_archive, arch_req_version, 1)) { limit_version = arch_parse_package_name (arch_ret_package_version, 0, limit_spec); if (arch_valid_package_name (limit_spec, arch_maybe_archive, arch_req_patch_level, 0)) limit_revision = arch_parse_package_name (arch_ret_non_archive, 0, limit_spec); } } /******************************** * parse the --since file, if any */ if (since) { int in_fd; rel_table since_table = rel_table_nil; int s; in_fd = safe_open (since, O_RDONLY, 0); since_table = rel_read_table (in_fd, 1, argv[0], since); for (s = 0; s < rel_n_records (since_table); ++s) { t_uchar * rev = 0; t_uchar * version = 0; t_uchar * level = 0; rev = str_save (0, rel_peek_str (since_table, s, 0)); if (!arch_valid_package_name (rev, arch_no_archive, arch_req_version, 1)) { safe_printfmt (2, "illegal line in --since file (%s)\n %s\n", since, rev); exit (1); } version = arch_parse_package_name (arch_ret_package_version, 0, rev); if (arch_valid_package_name (rev, arch_no_archive, arch_req_patch_level, 0)) { level = arch_parse_package_name (arch_ret_patch_level, 0, rev); assoc_set_taking (&since_limits, rel_make_field_str (version), rel_make_field_str (level)); rel_add_records (&old_since_limits, rel_make_record_2_taking (rel_make_field_str (version), rel_make_field_str (level)), rel_record_null); } if (since_limits_opt) { t_uchar * category = 0; t_uchar * branch = 0; category = arch_parse_package_name (arch_ret_category, 0, rev); branch = arch_parse_package_name (arch_ret_package, 0, rev); assoc_set_taking (&limit_categories, rel_make_field_str (category), rel_make_field_str ("yes")); assoc_set_taking (&limit_branches, rel_make_field_str (branch), rel_make_field_str ("yes")); assoc_set_taking (&limit_versions, rel_make_field_str (version), rel_make_field_str ("yes")); lim_free (0, category); lim_free (0, branch); } lim_free (0, rev); lim_free (0, version); lim_free (0, level); } safe_close (in_fd); rel_free_table (since_table); } /******************************** * connect to the archive */ arch = arch_archive_connect (archive, 0); /**************************************************************** * produce output */ safe_printfmt (1, "%s\n", archive); safe_flush (1); { rel_table categories = rel_table_nil; int c; t_uchar * last_category_printed = 0; t_uchar * last_branch_printed = 0; t_uchar * last_version_printed = 0; categories = arch_archive_categories (arch); for (c = 0; c < rel_n_records (categories); ++c) { if (limit_category && str_cmp (limit_category, rel_peek_str (categories, c, 0))) continue; if (since_limits_opt && !assoc_get_str_taking (limit_categories, rel_get_field (categories, c, 0))) continue; if (!omit_empty) { safe_printfmt (1, " %s\n", rel_peek_str (categories, c, 0)); safe_flush (1); lim_free (0, last_category_printed); last_category_printed = str_save (0, rel_peek_str (categories, c, 0)); } if (omit_empty || (depth != category_depth)) { rel_table branches = rel_table_nil; int b; branches = arch_archive_branches (arch, rel_peek_str (categories, c, 0)); for (b = 0; b < rel_n_records (branches); ++b) { if (limit_branch && str_cmp (limit_branch, rel_peek_str (branches, b, 0))) continue; if (since_limits_opt && !assoc_get_str_taking (limit_branches, rel_get_field (branches, b, 0))) continue; if (!omit_empty) { safe_printfmt (1, " %s\n", rel_peek_str (branches, b, 0)); safe_flush (1); lim_free (0, last_branch_printed); last_branch_printed = str_save (0, rel_peek_str (branches, b, 0)); } if (omit_empty || (depth != branch_depth)) { rel_table versions = rel_table_nil; int v; versions = arch_archive_versions (arch, rel_peek_str (branches, b, 0)); for (v = 0; v < rel_n_records (versions); ++v) { if (limit_version && str_cmp (limit_version, rel_peek_str (versions, v, 0))) continue; if (since_limits_opt && !assoc_get_str_taking (limit_versions, rel_get_field (versions, v, 0))) continue; if (!omit_empty) { safe_printfmt (1, " %s\n", rel_peek_str (versions, v, 0)); safe_flush (1); lim_free (0, last_version_printed); last_version_printed = str_save (0, rel_peek_str (versions, v, 0)); } if (omit_empty || (depth != version_depth)) { t_uchar * start_at_level = 0; rel_table revisions = rel_table_nil; int r; int any_output = 0; { const t_uchar * since_limit = 0; since_limit = assoc_get_str_taking (since_limits, rel_get_field (versions, v, 0)); if (since_limit) start_at_level = str_save (0, since_limit); } revisions = arch_archive_revisions (arch, rel_peek_str (versions, v, 0), 0); if (reverse) { arch_sort_table_by_patch_level_field (1, revisions, 0); if (rel_n_records (revisions)) rel_add_records (&new_since_limits, rel_make_record_2_taking (rel_get_field (versions, v, 0), rel_get_field (revisions, 0, 0)), rel_record_null); } else { if (rel_n_records (revisions)) rel_add_records (&new_since_limits, rel_make_record_2_taking (rel_get_field (versions, v, 0), rel_get_field (revisions, rel_n_records (revisions) - 1, 0)), rel_record_null); } for (r = 0; r < rel_n_records (revisions); ++r) { if (start_at_level) { if (reverse && (0 <= arch_patch_lvl_cmp (start_at_level, rel_peek_str (revisions, r, 0)))) break; if (!reverse && (0 <= arch_patch_lvl_cmp (start_at_level, rel_peek_str (revisions, r, 0)))) continue; } if (!any_output) { any_output = 1; if (omit_empty) { if (str_cmp (last_category_printed, rel_peek_str (categories, c, 0))) { safe_printfmt (1, " %s\n", rel_peek_str (categories, c, 0)); lim_free (0, last_category_printed); last_category_printed = str_save (0, rel_peek_str (categories, c, 0)); } if (str_cmp (last_branch_printed, rel_peek_str (branches, b, 0))) { safe_printfmt (1, " %s\n", rel_peek_str (branches, b, 0)); lim_free (0, last_branch_printed); last_branch_printed = str_save (0, rel_peek_str (branches, b, 0)); } if (str_cmp (last_version_printed, rel_peek_str (versions, v, 0))) { safe_printfmt (1, " %s\n", rel_peek_str (versions, v, 0)); lim_free (0, last_version_printed); last_version_printed = str_save (0, rel_peek_str (versions, v, 0)); } } if (wanted_headers) safe_printfmt (1, "\n"); } if (!wanted_headers) { if (!show_kind && !show_cacherevs) { if (rel_n_records (revisions) == 1) { safe_printfmt (1, " %s\n", rel_peek_str (revisions, r, 0)); } else { int s; s = rel_n_records (revisions) - 1; safe_printfmt (1, " %s .. %s\n", rel_peek_str (revisions, r, 0), rel_peek_str (revisions, s, 0)); r = s; } } else { /* show revision kinds and/or cacherevs */ t_uchar * version_stem = 0; t_uchar * package_revision = 0; enum arch_revision_type this_type; int is_cached; int s; version_stem = str_alloc_cat (0, rel_peek_str (versions, v, 0), "--"); package_revision = str_alloc_cat (0, version_stem, rel_peek_str (revisions, r, 0)); arch_revision_type (&this_type, &is_cached, arch, package_revision); if (this_type == arch_continuation_revision) { t_uchar * tagged = 0; tagged = arch_get_continuation (arch, package_revision); safe_printfmt (1, " %s", rel_peek_str (revisions, r, 0)); if (show_kind) safe_printfmt (1, " (tag of %s)", tagged); if (show_cacherevs) safe_printfmt (1, "%s", " [cached]"); safe_printfmt (1, "\n"); lim_free (0, tagged); } else { for (s = r + 1; s < rel_n_records (revisions); ++s) { enum arch_revision_type s_type; int s_is_cached; lim_free (0, package_revision); package_revision = str_alloc_cat (0, version_stem, rel_peek_str (revisions, s, 0)); arch_revision_type (&s_type, &s_is_cached, arch, package_revision); if ((show_cacherevs && (s_is_cached != is_cached)) || (show_kind && (s_type != this_type))) break; } --s; if (s == r) { safe_printfmt (1, " %s", rel_peek_str (revisions, r, 0)); } else { safe_printfmt (1, " %s .. %s", rel_peek_str (revisions, r, 0), rel_peek_str (revisions, s, 0)); } if (show_kind) { safe_printfmt (1, " "); if (this_type == arch_import_revision) safe_printfmt (1, "(initial import)"); else safe_printfmt (1, "(simple changeset)"); } if (show_cacherevs && is_cached) safe_printfmt (1, "%s", " [cached]"); safe_printfmt (1, "\n"); r = s; } lim_free (0, version_stem); lim_free (0, package_revision); } safe_flush (1); } else { t_uchar * rev = 0; t_uchar * fqrev = 0; t_uchar * log = 0; assoc_table headers = 0; rev = str_alloc_cat_many (0, rel_peek_str (versions, v, 0), "--", rel_peek_str (revisions, r, 0), str_end); fqrev = arch_fully_qualify (archive, rev); if (!show_kind && !show_cacherevs) { safe_printfmt (1, " %s\n", full ? fqrev : rel_peek_str (revisions, r, 0)); } else { enum arch_revision_type type; int is_cached; arch_revision_type (&type, &is_cached, arch, rev); safe_printfmt (1, " %s ", full ? fqrev : rel_peek_str (revisions, r, 0)); if (show_kind) { switch (type) { case arch_import_revision: { safe_printfmt (1, "(initial import)"); break; } case arch_simple_revision: { safe_printfmt (1, "(simple changeset)"); break; } case arch_continuation_revision: { t_uchar * continuation_of = 0; continuation_of = arch_get_continuation (arch, rev); safe_printfmt (1, "(tag revision of %s)", continuation_of); lim_free (0, continuation_of); break; } } } if (show_cacherevs && is_cached) safe_printfmt (1, "%s", " [cached]"); safe_printfmt (1, "\n"); } log = arch_archive_log (arch, rev); arch_parse_log (0, &headers, 0, log); arch_print_headers_summary (1, 10, headers, wanted_headers); safe_printfmt (1, "\n"); lim_free (0, rev); lim_free (0, fqrev); lim_free (0, log); free_assoc_table (headers); } safe_flush (1); } if (!omit_empty && (!any_output || !wanted_headers)) safe_printfmt (1, "\n"); lim_free (0, start_at_level); rel_free_table (revisions); } } rel_free_table (versions); } } rel_free_table (branches); } } rel_free_table (categories); lim_free (0, last_category_printed); lim_free (0, last_branch_printed); lim_free (0, last_version_printed); } /**************************************************************** * snap a new since file */ if (snap) { rel_table unchanged = rel_table_nil; rel_table changed = rel_table_nil; rel_table all = rel_table_nil; int out_fd; int x; rel_sort_table_by_field (0, old_since_limits, 0); rel_sort_table_by_field (0, new_since_limits, 0); unchanged = rel_join (1, rel_join_output (1,0, 1,1, -1), 0, 0, old_since_limits, new_since_limits); all = rel_copy_table (new_since_limits); rel_append_x (&all, unchanged); arch_sort_table_by_name_field (0, all, 0); out_fd = safe_open (snap, O_WRONLY | O_CREAT | (snap_force ? 0 : O_EXCL), 0666); for (x = 0; x < rel_n_records (all); ++x) { safe_printfmt (out_fd, "%s--%s\n", rel_peek_str (all, x, 0), rel_peek_str (all, x, 1)); } safe_close (out_fd); rel_free_table (unchanged); rel_free_table (changed); rel_free_table (all); } lim_free (0, limit_spec); lim_free (0, archive); lim_free (0, limit_category); lim_free (0, limit_branch); lim_free (0, limit_version); lim_free (0, limit_revision); arch_archive_close (arch); free_assoc_table (since_limits); rel_free_table (old_since_limits); rel_free_table (new_since_limits); free_assoc_table (limit_categories); free_assoc_table (limit_branches); free_assoc_table (limit_versions); } return 0; } /* tag: Tom Lord Thu Jul 17 10:54:10 2003 (cmd-abrowse.c) */ tla-1.3.5+dfsg/src/tla/libarch/pfs-fs.c0000644000175000017500000002451010457622000016250 0ustar useruser/* pfs-fs.c: * **************************************************************** * Copyright (C) 2002, 2003 Scott Parish * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include #include #include #include "config-options.h" #include "hackerlab/arrays/ar.h" #include "hackerlab/bugs/panic.h" #include "hackerlab/machine/types.h" #include "hackerlab/mem/alloc-limits.h" #include "hackerlab/mem/mem.h" #include "hackerlab/char/str.h" #include "hackerlab/fmt/cvt.h" #include "hackerlab/fs/file-names.h" #include "hackerlab/os/errno-to-string.h" #include "hackerlab/vu/safe.h" #include "tla/libfsutils/dir-as-cwd.h" #include "tla/libfsutils/dir-listing.h" #include "tla/libfsutils/tmp-files.h" #include "tla/libfsutils/copy-file.h" #include "tla/libfsutils/file-contents.h" #include "tla/libarch/archives.h" #include "tla/libarch/exec.h" #include "tla/libarch/pfs-fs.h" struct arch_pfs_fs_session { struct arch_pfs_session pfs; char * cwd; }; /* __STDC__ prototypes for static functions */ static t_uchar * fs_abs_path (const t_uchar * cwd, const t_uchar *path); static int fs_get (struct arch_pfs_fs_session * p, int data_fd, const t_uchar * path, int soft_errors); static int pfs_get_file (struct arch_pfs_session * p, int out_fd, const t_uchar * path, int soft_errors); static t_uchar * pfs_file_contents (struct arch_pfs_session * p, const t_uchar * path, int soft_errors); static rel_table pfs_directory_files (struct arch_pfs_session * p, const t_uchar * path, int soft_errors); static int pfs_put_file (struct arch_pfs_session *p, const t_uchar * path, mode_t perms, int data_fd, int soft_errors); static int pfs_mkdir (struct arch_pfs_session * p, const t_uchar * path, mode_t mode, int soft_errors); static int pfs_file_exists (struct arch_pfs_session * p, const t_uchar * path); static int pfs_is_dir (struct arch_pfs_session * p, const t_uchar * path); static int pfs_rename (struct arch_pfs_session * p, t_uchar ** errstr, const t_uchar * from_rel, const t_uchar * to_rel, int soft_errors); static int pfs_rmdir (struct arch_pfs_session * p, const t_uchar * path, const int soft_errors); static int pfs_rm (struct arch_pfs_session * p, const t_uchar * path, int soft_errors); static t_uchar * dirfold (t_uchar *dir); struct arch_pfs_vtable fs_pfs_fns = { pfs_file_exists, pfs_is_dir, pfs_file_contents, pfs_get_file, pfs_directory_files, pfs_put_file, pfs_mkdir, pfs_rename, pfs_rmdir, pfs_rm, }; struct arch_pfs_session * arch_pfs_fs_connect (const t_uchar * uri) { struct arch_pfs_fs_session * answer = 0; invariant (!!uri); answer = (struct arch_pfs_fs_session *)lim_malloc (0, sizeof (*answer)); mem_set0 ((t_uchar *)answer, sizeof (*answer)); answer->pfs.vtable = &fs_pfs_fns; answer->cwd = directory_as_cwd (uri); return &answer->pfs; } static t_uchar * fs_abs_path (const t_uchar * cwd, const t_uchar *path) { t_uchar * ap; if (path[0] != '/') ap = str_alloc_cat_many (0, cwd, "/", path, str_end); else ap = str_save (0, path); return dirfold (ap); } static int fs_get (struct arch_pfs_fs_session * p, int data_fd, const t_uchar * path, int soft_errors) { t_uchar * file = 0; int errn; int fd; file = fs_abs_path (p->cwd, path); fd = vu_open (&errn, file , O_RDONLY, 0444); if (fd < 0) { if (soft_errors) { lim_free (0, file); return -1; } safe_printfmt (2, "Failed to open files: %s\n", file); exit (2); } safe_lseek (fd, (off_t)0, SEEK_SET); copy_fd (fd, data_fd); safe_close (fd); lim_free (0, file); return 0; } static int pfs_get_file (struct arch_pfs_session * p, int out_fd, const t_uchar * path, int soft_errors) { struct arch_pfs_fs_session * pfs = (struct arch_pfs_fs_session *)p; return fs_get (pfs, out_fd, path, soft_errors); } static t_uchar * pfs_file_contents (struct arch_pfs_session * p, const t_uchar * path, int soft_errors) { struct arch_pfs_fs_session * pfs = (struct arch_pfs_fs_session *)p; int errn; int fd; t_uchar * answer = 0; t_uchar * file = 0; file = fs_abs_path (pfs->cwd, path); fd = vu_open (&errn, file , O_RDONLY, 0444); if (fd == -1) { if (soft_errors) { lim_free (0, file); return 0; } safe_printfmt (2, "Failed to open files: %s\n", fs_abs_path (pfs->cwd, path)); exit (2); } safe_lseek (fd, (off_t)0, SEEK_SET); answer = fd_contents (fd); safe_close (fd); lim_free (0, file); return answer; } static rel_table pfs_directory_files (struct arch_pfs_session * p, const t_uchar * path, int soft_errors) { struct arch_pfs_fs_session * pfs = (struct arch_pfs_fs_session *)p; rel_table answer = rel_table_nil; t_uchar * dir = 0; dir = fs_abs_path (pfs->cwd, path); if (!safe_file_is_directory_following (dir)) { if (soft_errors) return rel_table_nil; else { safe_printfmt (2, "not a directory (%s)\n", dir); exit (2); } } answer = directory_files (dir); lim_free (0, dir); return answer; } static int pfs_put_file (struct arch_pfs_session *p, const t_uchar * path, mode_t perms, int data_fd, int soft_errors) { struct arch_pfs_fs_session * pfs = (struct arch_pfs_fs_session *)p; t_uchar * file = 0; int errn; int fd; file = fs_abs_path (pfs->cwd, path); fd = vu_open (&errn, file , O_WRONLY | O_CREAT | O_EXCL, perms); if (fd == -1) { if (soft_errors) { lim_free (0, file); return -1; } safe_printfmt (2, "Failed to open files: %s\n", file); exit (2); } copy_fd (data_fd, fd); safe_close (fd); lim_free (0, file); return 0; } static int pfs_mkdir (struct arch_pfs_session * p, const t_uchar * path, mode_t mode, int soft_errors) { struct arch_pfs_fs_session * pfs = (struct arch_pfs_fs_session *)p; t_uchar * dir = 0; int errn; int answer; dir = fs_abs_path (pfs->cwd, path); answer = vu_mkdir (&errn, dir , mode); if (answer && !soft_errors) { safe_printfmt (2, "Failed to create directory: %s\n", dir); exit (2); } lim_free (0, dir); return answer; } static int pfs_file_exists (struct arch_pfs_session * p, const t_uchar * path) { struct arch_pfs_fs_session * pfs = (struct arch_pfs_fs_session *)p; t_uchar * abs_path = 0; int answer; abs_path = fs_abs_path (pfs->cwd, path); answer = !safe_access (abs_path, F_OK); lim_free (0, abs_path); return answer; } static int pfs_is_dir (struct arch_pfs_session * p, const t_uchar * path) { struct arch_pfs_fs_session * pfs = (struct arch_pfs_fs_session *)p; t_uchar * abs_path = 0; struct stat stat_buf; int errn; int answer; abs_path = fs_abs_path (pfs->cwd, path); if (vu_stat (&errn, abs_path, &stat_buf)) answer = -1; else answer = !!S_ISDIR (stat_buf.st_mode); lim_free (0, abs_path); return answer; } static int pfs_rename (struct arch_pfs_session * p, t_uchar ** errstr, const t_uchar * from_rel, const t_uchar * to_rel, int soft_errors) { struct arch_pfs_fs_session * pfs = (struct arch_pfs_fs_session *)p; int ret = 0; int errn; t_uchar * from = 0; t_uchar * to = 0; from = fs_abs_path (pfs->cwd, from_rel); to = fs_abs_path (pfs->cwd, to_rel); ret = vu_rename (&errn, from, to); if (ret) { if (soft_errors) *errstr = str_save (0, "could not rename file."); else { safe_printfmt (2, "Failed to rename file: %s => %s\n", from, to); exit (2); } } lim_free (0, from); lim_free (0, to); return ret; } static int pfs_rmdir (struct arch_pfs_session * p, const t_uchar * path, const int soft_errors) { struct arch_pfs_fs_session * pfs = (struct arch_pfs_fs_session *)p; int errn; int ret; t_uchar * dir = 0; dir = fs_abs_path (pfs->cwd, path); ret = vu_rmdir (&errn, dir); if (ret && !soft_errors) { safe_printfmt (2, "Failed to remove directory: %s\n", dir); exit (2); } lim_free (0, dir); return ret; } static int pfs_rm (struct arch_pfs_session * p, const t_uchar * path, int soft_errors) { struct arch_pfs_fs_session * pfs = (struct arch_pfs_fs_session *)p; int errn; int ret; char * file = 0; file = fs_abs_path (pfs->cwd, path); ret = vu_unlink (&errn, file); if (ret && !soft_errors) { safe_printfmt (2, "Failed to remove file: %s\n", file); exit (2); } lim_free (0, file); return ret; } static t_uchar * dirfold (t_uchar *dir) { t_uchar * buf; t_uchar * this; t_uchar * next; int dir_i = 0; this = next = buf = str_save (0, dir); while ((this = str_separate (&next, "/")) != NULL) { if (str_length (this) == 0 || (str_length (this) == 1 && this[0] == '.')) continue; else if (str_length (this) == 2 && *this == '.' && this[1] == '.') { if (dir_i > 0) dir_i = (int)((char *)strrchr (dir, '/') - (char *)dir); dir[dir_i] = 0; } else { dir[dir_i++] = '/'; strcpy (dir + dir_i, this); dir_i += str_length (this); } } lim_free (0, buf); if (!str_length (dir)) str_cpy (dir, "/"); return dir; } /* tag: Tom Lord Thu Jun 5 15:23:06 2003 (pfs-fs.c) */ tla-1.3.5+dfsg/src/tla/libarch/changeset-report.h0000644000175000017500000000557710457622000020345 0ustar useruser/* changeset-report.h: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__CHANGESET_REPORT_H #define INCLUDE__LIBARCH__CHANGESET_REPORT_H #include "tla/libawk/relational.h" struct arch_changeset_report { rel_table orig_files_index; /* [0] loc [1] id (sort by 1) */ rel_table orig_dirs_index; /* [0] loc [1] id (sort by 1) */ rel_table mod_files_index; /* [0] loc [1] id (sort by 1) */ rel_table mod_dirs_index; /* [0] loc [1] id (sort by 1) */ rel_table removed_dirs; /* [0] loc [1] id [2] perms (sort by 0) */ rel_table added_dirs; /* [0] loc [1] id [2] perms (sort by 0) */ rel_table removed_files; /* [0] loc [1] id [2] archive-path (sort by 0)*/ rel_table added_files; /* [0] loc [1] id [2] archive-path (sort by 0) */ rel_table removed_symlinks; /* [0] loc [1] id [2] archive-path (sort by 0) */ rel_table added_symlinks; /* [0] loc [1] id [2] archive-path (sort by 0) */ rel_table renamed_files; /* [0] orig-loc [1] mod-loc [2] id (sort by 0) */ rel_table renamed_dirs; /* [0] orig-loc [1] mod-loc [2] id (sort by 0) */ rel_table patched_regular_files; /* [0] mod-loc [1] id [2] patch-path (sort by 0) */ rel_table patched_symlinks; /* [0] mod-loc [1] id [2] patch-path-sans-suffix (sort by 0) */ rel_table patched_binaries; /* [0] mod-loc [1] id [2] patch-path-sans-suffix (sort by 0) */ rel_table file_metadata_changed; /* [0] mod-loc [1] id [2] patch-path-sans-suffix (sort by 0) */ rel_table dir_metadata_changed; /* [0] mod-loc [1] id [2] patch-path-sans-suffix (sort by 0) */ rel_table symlink_to_file; /* [0] mod-loc [1] id [2] patch-path-sans-suffix (sort by 0) */ rel_table file_to_symlink; /* [0] mod-loc [1] id [2] patch-path-sans-suffix (sort by 0) */ }; /* automatically generated __STDC__ prototypes */ extern int arch_any_changes (struct arch_changeset_report * report); extern void arch_evaluate_changeset (struct arch_changeset_report * report, t_uchar * path); extern void arch_reverse_changeset (struct arch_changeset_report * report); extern void arch_print_changeset_diffs (int out_fd, struct arch_changeset_report * report, int escape_classes); extern void arch_print_changeset_custom_diffs (int out_fd, struct arch_changeset_report * report, t_uchar * orig_dir, t_uchar * mod_dir, t_uchar ** opts, int escape_classes); extern void arch_print_changeset (int out_fd, struct arch_changeset_report * report, int diffs, int escape_classes); extern void arch_free_changeset_report_data (struct arch_changeset_report * r); #endif /* INCLUDE__LIBARCH__CHANGESET_REPORT_H */ /* tag: Tom Lord Sat Jan 5 15:26:10 2002 (changeset-report.h) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-register-archive.c0000644000175000017500000001506610457622000021064 0ustar useruser/* cmd-register-archive.c * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "config-options.h" #include "hackerlab/cmd/main.h" #include "hackerlab/mem/alloc-limits.h" #include "hackerlab/mem/mem.h" #include "tla/libfsutils/ensure-dir.h" #include "tla/libarch/my.h" #include "tla/libarch/namespace.h" #include "tla/libarch/archive.h" #include "tla/libarch/archives.h" #include "tla/libarch/pfs.h" #include "tla/libarch/cmdutils.h" #include "tla/libarch/cmd-register-archive.h" static t_uchar * usage = "[options] [archive] location"; static t_uchar * version_string = (cfg__std__package " from regexps.com\n" "\n" "Copyright 2003 Tom Lord\n" "\n" "This is free software; see the source for copying conditions.\n" "There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\n" "PARTICULAR PURPOSE.\n" "\n" "Report bugs to " cfg__tla_bug_mail ".\n" "\n" cfg__std__release_id_string "\n"); #define OPTS(OP) \ OP (opt_help_msg, "h", "help", 0, \ "Display a help message and exit.") \ OP (opt_long_help, "H", 0, 0, \ "Display a verbose help message and exit.") \ OP (opt_version, "V", "version", 0, \ "Display a release identifier string\n" \ "and exit.") \ OP (opt_force, "f", "force", 0, \ "overwrite existing location") \ OP (opt_present_ok, 0, "present-ok", 0, \ "return 0 even if archive exists") \ OP (opt_delete, "d", "delete", 0, \ "delete archive registration") t_uchar arch_cmd_register_archive_help[] = ("change an archive location registration\n" "Record the location of ARCHIVE.\n" "\n" "With -d, remove the registration of a previously registered\n" "archive. When accompanied by -f, override permissions on\n" "the registration file and don't complain if the archive is\n" "not registered.\n" "\n" "A LOCATION should be either a directory name or a distant URL.\n" "\n" "When registering a new archive, if no ARCHIVE's name is passed on the\n" "command line, then the archive's name will be read automatically from\n" "the archive's meta data.\n" "\n" "Archive locations are stored in ~/.arch-params/=locations.\n" "\n" "You must register the location of a remote archive before you\n" "access it. It is not strictly necessary to register the locations\n" "of local archives (you can always specify their location using\n" "command line arguments and/or environment variables), but registering\n" "local archive locations is recommend (for simplicity).\n"); enum options { OPTS (OPT_ENUM) }; static struct opt_desc opts[] = { OPTS (OPT_DESC) {-1, 0, 0, 0, 0} }; int arch_cmd_register_archive (t_uchar * program_name, int argc, char * argv[]) { int o; struct opt_parsed * option; int delete; int force; int quietly_fail; delete = 0; force = 0; quietly_fail = 0; safe_buffer_fd (1, 0, O_WRONLY, 0); option = 0; while (1) { o = opt_standard (lim_use_must_malloc, &option, opts, &argc, argv, program_name, usage, version_string, arch_cmd_register_archive_help, opt_help_msg, opt_long_help, opt_version); if (o == opt_none) break; switch (o) { default: safe_printfmt (2, "unhandled option `%s'\n", option->opt_string); panic ("internal error parsing arguments"); usage_error: opt_usage (2, argv[0], program_name, usage, 1); exit (1); /* bogus_arg: */ safe_printfmt (2, "ill-formed argument for `%s' (`%s')\n", option->opt_string, option->arg_string); goto usage_error; case opt_delete: { delete = 1; break; } case opt_force: { force = 1; break; } case opt_present_ok: { quietly_fail = ARCH_REG_FAIL_NOFAIL; } } } if (argc != 3 && argc != 2) goto usage_error; if (delete) { t_uchar * archive_name; archive_name = argv[1]; if (!arch_valid_archive_name (archive_name)) { safe_printfmt (2, "%s: invalid archive name (%s)\n", argv[0], archive_name); exit (1); } arch_delete_archive_location (archive_name, force); } else { t_uchar * archive_name; t_uchar * archive_location; if (argc == 3) { archive_name = argv[1]; archive_location = argv[2]; arch_check_uri (archive_location); } else { struct arch_archive * archive = 0; archive_location = argv[1]; arch_check_uri (archive_location); archive = arch_archive_connect_location (0, archive_location, 0); archive_name = arch_get_meta_info_trimming (archive, "name"); arch_archive_close (archive); safe_printfmt (1, "Registering archive: %s\n", archive_name); } if (!arch_valid_archive_name (archive_name)) { safe_printfmt (2, "%s: invalid archive name (%s)\n", argv[0], archive_name); exit (1); } arch_set_archive_location (archive_name, archive_location, force, quietly_fail); } return 0; } /* tag: Tom Lord Sun May 18 20:34:28 2003 (register-archive.c) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-mv.h0000644000175000017500000000115410457622000016241 0ustar useruser/* cmd-mv.h: * **************************************************************** * Copyright (C) 2003 Tom Lord, Rob Weir * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__CMD_MV_H #define INCLUDE__LIBARCH__CMD_MV_H #include "hackerlab/machine/types.h" extern t_uchar arch_cmd_mv_help[]; /* automatically generated __STDC__ prototypes */ extern int arch_cmd_mv (t_uchar * program_name, int argc, char * argv[]); #endif /* INCLUDE__LIBARCH__CMD_MV_H */ /* tag: Rob Weir Sun Sep 21 15:22:29 EST 2003 (cmd-mv.h) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-set-tree-version.c0000644000175000017500000001117310457622000021027 0ustar useruser/* cmd-set-tree-version.c * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "config-options.h" #include "hackerlab/cmd/main.h" #include "tla/libarch/namespace.h" #include "tla/libarch/project-tree.h" #include "tla/libarch/cmd-set-tree-version.h" static t_uchar * usage = "[options] [archive]/version"; static t_uchar * version_string = (cfg__std__package " from regexps.com\n" "\n" "Copyright 2003 Tom Lord\n" "\n" "This is free software; see the source for copying conditions.\n" "There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\n" "PARTICULAR PURPOSE.\n" "\n" "Report bugs to " cfg__tla_bug_mail ".\n" "\n" cfg__std__release_id_string "\n"); #define OPTS(OP) \ OP (opt_help_msg, "h", "help", 0, \ "Display a help message and exit.") \ OP (opt_long_help, "H", 0, 0, \ "Display a verbose help message and exit.") \ OP (opt_version, "V", "version", 0, \ "Display a release identifier string\n" \ "and exit.") \ OP (opt_archive, "A", "archive", 1, \ "Override `my-default-archive'") \ OP (opt_dir, "d", "dir DIR", 1, \ "cd to DIR first") t_uchar arch_cmd_set_tree_version_help[] = ("set the default version for a project tree\n" "This operation sets the default version on which to check-in\n" "the source tree DIR (default: the current directory) during\n" "a commit.\n" "\n" "You can specify the archive for this version as an ordinary\n" "command line argument (ARCHIVE/VERSION) or via -R, -A and\n" "the environment as usual (try \"tla my-default-archive --help\").\n"); enum options { OPTS (OPT_ENUM) }; static struct opt_desc opts[] = { OPTS (OPT_DESC) {-1, 0, 0, 0, 0} }; int arch_cmd_set_tree_version (t_uchar * program_name, int argc, char * argv[]) { int o; struct opt_parsed * option; char * default_archive = 0; char * dir = 0; dir = str_save (0, "."); safe_buffer_fd (1, 0, O_WRONLY, 0); option = 0; while (1) { o = opt_standard (lim_use_must_malloc, &option, opts, &argc, argv, program_name, usage, version_string, arch_cmd_set_tree_version_help, opt_help_msg, opt_long_help, opt_version); if (o == opt_none) break; switch (o) { default: safe_printfmt (2, "unhandled option `%s'\n", option->opt_string); panic ("internal error parsing arguments"); usage_error: opt_usage (2, argv[0], program_name, usage, 1); exit (1); /* bogus_arg: */ safe_printfmt (2, "ill-formed argument for `%s' (`%s')\n", option->opt_string, option->arg_string); goto usage_error; case opt_dir: { dir = str_save (0, option->arg_string); break; } case opt_archive: { default_archive = str_save (0, option->arg_string); break; } } } if (argc != 2) goto usage_error; { char * version_spec; char * archive = 0; char * version = 0; t_uchar * tree_root = 0; version_spec = argv[1]; if (!arch_valid_package_name (version_spec, arch_maybe_archive, arch_req_version, 0)) { safe_printfmt (2, "%s: invalid version id (%s)\n", argv[0], version_spec); } archive = arch_parse_package_name (arch_ret_archive, default_archive, version_spec); version = arch_parse_package_name (arch_ret_package_version, 0, version_spec); tree_root = arch_tree_root (0, dir, 0); if (!tree_root) { safe_printfmt (2, "%s: not in project tree (%s)\n", argv[0], dir); exit (1); } arch_set_tree_version (tree_root, archive, version); lim_free (0, archive); lim_free (0, version); } lim_free (0, default_archive); lim_free (0, dir); return 0; } /* tag: Tom Lord Mon May 12 14:52:06 2003 (set-tree-version.c) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-init-tree.c0000644000175000017500000001226010457622000017512 0ustar useruser/* init-tree.c * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "config-options.h" #include "hackerlab/cmd/main.h" #include "tla/libarch/namespace.h" #include "tla/libarch/project-tree.h" #include "tla/libarch/patch-logs.h" #include "tla/libarch/cmd.h" #include "tla/libarch/cmd-init-tree.h" static t_uchar * usage = "[options] [[archive]/version]"; static t_uchar * version_string = (cfg__std__package " from regexps.com\n" "\n" "Copyright 2003 Tom Lord\n" "\n" "This is free software; see the source for copying conditions.\n" "There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\n" "PARTICULAR PURPOSE.\n" "\n" "Report bugs to " cfg__tla_bug_mail ".\n" "\n" cfg__std__release_id_string "\n"); #define OPTS(OP) \ OP (opt_help_msg, "h", "help", 0, \ "Display a help message and exit.") \ OP (opt_long_help, "H", 0, 0, \ "Display a verbose help message and exit.") \ OP (opt_version, "V", "version", 0, \ "Display a release identifier string\n" \ "and exit.") \ OP (opt_archive, "A", "archive", 1, \ "Override `my-default-archive'") \ OP (opt_dir, "d", "dir DIR", 1, \ "cd to DIR first") \ OP (opt_nested, 0, "nested", 0, \ "initialize a nested project tree.") t_uchar arch_cmd_init_tree_help[] = ("initialize a new project tree\n" "Initialize DIR as a new project tree.\n" "\n" "An empty patch-log for VERSION will be created, and VERSION\n" "will be made the default location for check-ins.\n"); enum options { OPTS (OPT_ENUM) }; static struct opt_desc opts[] = { OPTS (OPT_DESC) {-1, 0, 0, 0, 0} }; int arch_cmd_init_tree (t_uchar * program_name, int argc, char * argv[]) { int o; struct opt_parsed * option; t_uchar * default_archive = 0; char * dir = 0; int nested = 0; dir = str_save (0, "."); nested = 0; safe_buffer_fd (1, 0, O_WRONLY, 0); option = 0; while (1) { o = opt_standard (lim_use_must_malloc, &option, opts, &argc, argv, program_name, usage, version_string, arch_cmd_init_tree_help, opt_help_msg, opt_long_help, opt_version); if (o == opt_none) break; switch (o) { default: safe_printfmt (2, "unhandled option `%s'\n", option->opt_string); panic ("internal error parsing arguments"); usage_error: opt_usage (2, argv[0], program_name, usage, 1); exit (1); /* bogus_arg: */ safe_printfmt (2, "ill-formed argument for `%s' (`%s')\n", option->opt_string, option->arg_string); goto usage_error; case opt_archive: { default_archive = str_save (0, option->arg_string); break; } case opt_dir: { dir = str_save (0, option->arg_string); break; } case opt_nested: { nested = 1; break; } } } if (argc > 2) goto usage_error; { t_uchar * version_spec; t_uchar * tree_root = 0; t_uchar * archive = 0; t_uchar * version = 0; if (argc == 2) { version_spec = argv[1]; } else { version_spec = 0; } if (default_archive) { if (!arch_valid_archive_name (default_archive)) { safe_printfmt (2, "%s: invalid archive name (%s)\n", argv[0], default_archive); exit (1); } } if (version_spec) { if (!arch_valid_package_name (version_spec, arch_maybe_archive, arch_req_version, 0)) { safe_printfmt (2, "%s: invalid version name (%s)\n", argv[0], version_spec); exit (1); } archive = arch_parse_package_name (arch_ret_archive, default_archive, version_spec); version = arch_parse_package_name (arch_ret_package_version, 0, version_spec); } tree_root = arch_tree_root (0, dir, 0); if (!nested && tree_root) { safe_printfmt (2, "%s: dir is already in project tree (%s)\n", argv[0], dir); exit (1); } tree_root = str_save (0, dir); arch_init_tree (tree_root); if (version) { arch_add_log_version (tree_root, archive, version); arch_set_tree_version (tree_root, archive, version); } lim_free (0, tree_root); lim_free (0, archive); lim_free (0, version); } lim_free (0, default_archive); lim_free (0, dir); return 0; } /* tag: Tom Lord Tue May 13 08:33:06 2003 (init-tree.c) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-archive-mirror.h0000644000175000017500000000126210457622000020550 0ustar useruser/* cmd-archive-mirror.h: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__CMD_ARCHIVE_MIRROR_H #define INCLUDE__LIBARCH__CMD_ARCHIVE_MIRROR_H #include "hackerlab/machine/types.h" extern t_uchar arch_cmd_archive_mirror_help[]; /* automatically generated __STDC__ prototypes */ extern int arch_cmd_archive_mirror (t_uchar * program_name, int argc, char * argv[]); #endif /* INCLUDE__LIBARCH__CMD_ARCHIVE_MIRROR_H */ /* tag: Tom Lord Sat Jan 5 15:26:10 2002 (cmd-archive-mirror.h) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-escape.c0000644000175000017500000000661110457622000017055 0ustar useruser/* cmd-escape.c * **************************************************************** * Copyright (C) 2004 Christian Thaeter * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "config-options.h" #include "hackerlab/cmd/main.h" #include "tla/libarch/cmd.h" #include "tla/libarch/cmd-escape.h" static t_uchar * usage = "[--unescaped] string"; static t_uchar * version_string = (cfg__std__package " from regexps.com\n" "\n" "Copyright 2001, 2002, 2003 Tom Lord\n" "\n" "This is free software; see the source for copying conditions.\n" "There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\n" "PARTICULAR PURPOSE.\n" "\n" "Report bugs to " cfg__tla_bug_mail ".\n" "\n" cfg__std__release_id_string "\n"); #define OPTS(OP) \ OP (opt_help_msg, "h", "help", 0, \ "Display a help message and exit.") \ OP (opt_long_help, "H", 0, 0, \ "Display a verbose help message and exit.") \ OP (opt_version, "V", "version", 0, \ "Display a release identifier string\n" \ "and exit.") \ OP (opt_unescaped, 0, "unescaped", 0, \ "show filenames in unescaped form") t_uchar arch_cmd_escape_help[] = ("print strings in escaped or unescaped form\n" "Using Pika escaping rules.\n"); enum options { OPTS (OPT_ENUM) }; static struct opt_desc opts[] = { OPTS (OPT_DESC) {-1, 0, 0, 0, 0} }; int i; int arch_cmd_escape (t_uchar * program_name, int argc, char * argv[]) { int o; struct opt_parsed * option; int escape_classes = arch_escape_classes; safe_buffer_fd (1, 0, O_WRONLY, 0); option = 0; while (1) { o = opt_standard (lim_use_must_malloc, &option, opts, &argc, argv, program_name, usage, version_string, arch_cmd_escape_help, opt_help_msg, opt_long_help, opt_version); if (o == opt_none) break; switch (o) { default: safe_printfmt (2, "unhandled option `%s'\n", option->opt_string); panic ("internal error parsing arguments"); usage_error: opt_usage (2, argv[0], program_name, usage, 1); exit (1); /* bogus_arg: */ safe_printfmt (2, "ill-formed argument for `%s' (`%s')\n", option->opt_string, option->arg_string); goto usage_error; case opt_unescaped: escape_classes = 0; break; } } if (escape_classes == 0) { t_uchar * unescaped_tmp; unescaped_tmp = pika_save_unescape_iso8859_1 (0, 0, argv[1]); if (!unescaped_tmp) { safe_printfmt (2, "Illegal escape sequence in '%s'\n", argv[1]); exit(2); } safe_printfmt (1, "%s", unescaped_tmp); lim_free (0, unescaped_tmp); } else { t_uchar * escaped_tmp; escaped_tmp = pika_save_escape_iso8859_1 (0, 0, escape_classes, argv[1]); safe_printfmt (1, "%s", escaped_tmp); lim_free (0, escaped_tmp); } return 0; } /* tag: Christian Thaeter Sun Mar 7 05:02:18 CET 2004 (cmd-escape.c) */ tla-1.3.5+dfsg/src/tla/libarch/proj-tree-lint.c0000644000175000017500000003426510457622000017735 0ustar useruser/* proj-tree-lint.c: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/bugs/panic.h" #include "hackerlab/os/errno.h" #include "hackerlab/os/errno-to-string.h" #include "hackerlab/char/str.h" #include "hackerlab/mem/mem.h" #include "hackerlab/arrays/ar.h" #include "hackerlab/fs/file-names.h" #include "hackerlab/fs/cwd.h" #include "hackerlab/hash/hashtree.h" #include "hackerlab/hash/hash-utils.h" #include "hackerlab/vu/safe.h" #include "tla/libarch/invent.h" #include "tla/libarch/project-tree.h" #include "tla/libarch/proj-tree-lint.h" /* __STDC__ prototypes for static functions */ static void find_unused_ids (rel_table * ids_sans_files, rel_table explicit_ids, struct hashtree * id_map, struct hashtree_rules * tree_lint_hashtree_rules); static void tree_lint_callback (const t_uchar * path, struct stat * stat_buf, enum arch_inventory_category category, const t_uchar * id, int has_source_name, void * vthunk, int escape_classes); static int str_key_eq (void * va, void * vb, struct hashtree_rules * r); static void tree_lint_hashtree_freefn (struct hashtree_item * it, struct hashtree_rules * rules); static t_ulong hash_key (const t_uchar * key); struct lint_traversal_thunk { struct arch_tree_lint_result * answer; struct hashtree * duplicated_ids_index; struct arch_inventory_options * options; rel_table explicit_ids; }; struct lint_id_mapping { t_uchar * first_occurence; int index; }; static struct hashtree_rules tree_lint_hashtree_rules = { str_key_eq, 0, 0, 0, 0, 0 }; int arch_print_tree_lint_report (int fd, struct arch_tree_lint_result * lint, int escape_classes) { int status; status = 0; if (rel_n_records (lint->warning_files)) { safe_printfmt (fd, "These files would be source but lack inventory ids (`tla add' or a tagline perhaps?):\n\n"); rel_print_pika_escape_iso8859_1_table (fd, escape_classes, lint->warning_files); safe_printfmt (fd, "\n\n"); if (!status) status = 1; } if (rel_n_records (lint->unrecognized_files)) { safe_printfmt (fd, "These files violate naming conventions:\n\n"); rel_print_pika_escape_iso8859_1_table (fd, escape_classes, lint->unrecognized_files); safe_printfmt (fd, "\n\n"); status = -1; } if (rel_n_records (lint->symlinks_sans_targets)) { safe_printfmt (fd, "These symlinks point to nonexistent files:\n\n"); rel_print_pika_escape_iso8859_1_table (fd, escape_classes, lint->symlinks_sans_targets); safe_printfmt (fd, "\n\n"); if (!status) status = 1; } if (rel_n_records (lint->untagged_files)) { safe_printfmt (fd, "These apparent source files lack inventory ids:\n\n"); rel_print_pika_escape_iso8859_1_table (fd, escape_classes, lint->untagged_files); safe_printfmt (fd, "\n\n"); if ((lint->id_tagging_method == arch_implicit_id_tagging) || (lint->id_tagging_method == arch_tagline_id_tagging)) { if (!status) status = 1; } else status = -1; } if (rel_n_records (lint->ids_sans_files)) { safe_printfmt (fd, "These explicit ids have no corresponding file:\n\n"); rel_print_table (fd, lint->ids_sans_files); safe_printfmt (fd, "\n\n"); status = -1; } if (lint->duplicate_id_groups) { int lim; int x; safe_printfmt (fd, "Duplicated ids among each group of files listed here:\n\n"); lim = ar_size ((void *)lint->duplicate_id_groups, 0, sizeof (rel_table)); for (x = 0; x < lim; ++x) { rel_print_pika_escape_iso8859_1_table (fd, escape_classes, lint->duplicate_id_groups[x]); safe_printfmt (fd, "\n"); } safe_printfmt (fd, "\n\n"); status = -1; } return status; } int arch_print_filtered_tree_lint_report (int fd, struct arch_tree_lint_result * lint, t_uint categories, int escape_classes) { int status; status = 0; if (rel_n_records (lint->unrecognized_files) && (categories & unrecognized_files)) { rel_print_pika_escape_iso8859_1_table (fd, escape_classes, lint->unrecognized_files); status = -1; } if (rel_n_records (lint->symlinks_sans_targets) && (categories & symlinks_sans_targets)) { rel_print_pika_escape_iso8859_1_table (fd, escape_classes, lint->symlinks_sans_targets); if (!status) status = 1; } if ((rel_n_records (lint->warning_files) || rel_n_records (lint->untagged_files)) && (categories & untagged_files)) { rel_table combined; combined = rel_copy_table (lint->warning_files); rel_append_x (&combined, lint->untagged_files); rel_sort_table_by_field (0, combined, 0); rel_print_pika_escape_iso8859_1_table (fd, escape_classes, combined); if ((lint->id_tagging_method == arch_implicit_id_tagging) || (lint->id_tagging_method == arch_tagline_id_tagging)) { if (!status) status = 1; } else status = -1; rel_free_table (combined); } if (rel_n_records (lint->ids_sans_files) && (categories & ids_sans_files)) { rel_print_table (fd, lint->ids_sans_files); status = -1; } if (lint->duplicate_id_groups && (categories & duplicate_id_groups)) { int lim; int x; lim = ar_size ((void *)lint->duplicate_id_groups, 0, sizeof (rel_table)); for (x = 0; x < lim; ++x) { rel_print_pika_escape_iso8859_1_table (fd, escape_classes, lint->duplicate_id_groups[x]); safe_printfmt (fd, "\n"); } status = -1; } return status; } struct arch_tree_lint_result * arch_tree_lint (t_uchar * dirspec) { int here_fd; t_uchar * dir = 0; t_uchar * tree_root = 0; struct arch_tree_lint_result * answer; struct arch_inventory_options options; struct lint_traversal_thunk thunk; here_fd = safe_open (".", O_RDONLY, 0); safe_chdir (dirspec); dir = safe_current_working_directory (); tree_root = arch_tree_root (0, dir, 0); invariant (!tree_root || !str_cmp (tree_root, dir)); if (tree_root) safe_chdir (tree_root); answer = lim_malloc (0, sizeof (*answer)); mem_set0 ((t_uchar *)answer, sizeof (*answer)); mem_set0 ((t_uchar *)&options, sizeof (options)); options.categories = (arch_inventory_source | arch_inventory_precious | arch_inventory_backup | arch_inventory_junk | arch_inventory_unrecognized); /* not arch_inventory_{tree,excludes} */ options.want_ids = 1; options.treat_unrecognized_source_as_source = 1; /* options.method = (!tree_root ? arch_names_id_tagging : arch_tree_id_tagging_method (tree_root, 0)); */ options.nested = 0; options.include_excluded = 1; arch_get_inventory_naming_conventions (&options, tree_root); answer->id_tagging_method = options.method; mem_set0 ((t_uchar *)&thunk, sizeof (thunk)); thunk.answer = answer; thunk.duplicated_ids_index = hashtree_alloc (&tree_lint_hashtree_rules); thunk.options = &options; thunk.explicit_ids = rel_table_nil; arch_inventory_traversal (&options, ".", tree_lint_callback, &thunk, 0); find_unused_ids (&(answer->ids_sans_files), thunk.explicit_ids, thunk.duplicated_ids_index, &tree_lint_hashtree_rules); safe_fchdir (here_fd); safe_close (here_fd); rel_free_table (thunk.explicit_ids); hashtree_free (thunk.duplicated_ids_index, tree_lint_hashtree_freefn, &tree_lint_hashtree_rules); arch_free_inventory_naming_conventions (&options); lim_free (0, dir); lim_free (0, tree_root); return answer; } static void find_unused_ids (rel_table * ids_sans_files, rel_table explicit_ids, struct hashtree * id_map, struct hashtree_rules * tree_lint_hashtree_rules) { int n_records=rel_n_records (explicit_ids); int i; for (i = 0; i < n_records; ++i) { if (hashtree_find (id_map, hash_key (rel_peek_str (explicit_ids, i, 0)), (void *)rel_peek_str (explicit_ids, i, 0), tree_lint_hashtree_rules) == 0) rel_add_records (ids_sans_files, rel_singleton_record_taking (rel_get_field (explicit_ids, i, 1)), rel_record_null); } } void arch_free_lint_result (struct arch_tree_lint_result * result) { int x; rel_free_table (result->unrecognized_files); rel_free_table (result->symlinks_sans_targets); rel_free_table (result->untagged_files); rel_free_table (result->ids_sans_files); for (x = 0; x < ar_size ((void *)result->duplicate_id_groups, 0, sizeof (rel_table)); ++x) rel_free_table (result->duplicate_id_groups[x]); ar_free ((void **)&result->duplicate_id_groups, 0); lim_free (0, result); } static void tree_lint_callback (const t_uchar * path, struct stat * stat_buf, enum arch_inventory_category category, const t_uchar * id, int has_source_name, void * vthunk, int escape_classes) { struct lint_traversal_thunk * thunk; thunk = (struct lint_traversal_thunk *)vthunk; /* Remove leading ./ */ if (path[0] == '.' && path[1] == '/') path += 2; /* violations of naming conventions */ if (category == arch_inventory_unrecognized) { rel_add_records (&thunk->answer->unrecognized_files, rel_singleton_record_taking (rel_make_field_str (path)), rel_record_null); } /* files classified as non-source because they lack an inventory id */ if ((category != arch_inventory_source) && has_source_name) { rel_add_records (&thunk->answer->warning_files, rel_singleton_record_taking (rel_make_field_str (path)), rel_record_null); } /* symlink but no target */ if (S_ISLNK (stat_buf->st_mode)) { if (safe_access (path, F_OK)) { rel_add_records (&thunk->answer->symlinks_sans_targets, rel_singleton_record_taking (rel_make_field_str (path)), rel_record_null); } } /* untagged file that passes naming conventions */ if (((thunk->options->method == arch_implicit_id_tagging) || (thunk->options->method == arch_tagline_id_tagging)) && (category == arch_inventory_source) && (!id || (id[0] == '?'))) { rel_add_records (&thunk->answer->untagged_files, rel_singleton_record_taking (rel_make_field_str (path)), rel_record_null); } else if ((thunk->options->method == arch_explicit_id_tagging) && (category == arch_inventory_source) && !id) { t_uchar * dir = 0; dir = file_name_directory_file (0, path); if (!arch_is_dont_care_explicit_dflt_dir (dir)) rel_add_records (&thunk->answer->untagged_files, rel_singleton_record_taking (rel_make_field_str (path)), rel_record_null); lim_free (0, dir); } /* explicit id but no file */ if (category == arch_inventory_source) { size_t len; len = str_length (path); if ((len > 3) && !str_cmp (path + len - 3, ".id")) { t_uchar * path_dir; t_uchar * path_dir_basename; t_uchar * path_dir_dir; t_uchar * basename; t_uchar * file; path_dir = file_name_directory_file (0, path); if (path_dir != 0) { path_dir_basename = file_name_tail (0, path_dir); path_dir_dir = file_name_directory_file (0, path_dir); basename = file_name_tail (0, path); basename[str_length(basename) - 3] = 0; file = file_name_in_vicinity (0, path_dir_dir, basename); if (!str_cmp (path_dir_basename, ".arch-ids")) { int errn = 0; t_uchar * id = arch_id_from_explicit_file (&errn, path); if (id == 0) { safe_printfmt (2, "i/o error during inventory traversal (%s) for %s\n", errno_to_string (errn), file); exit (2); } rel_add_records (&thunk->explicit_ids, rel_make_record_2_taking (rel_make_field_str (id), rel_make_field_str (path)), rel_record_null); lim_free (0, id); } lim_free (0, path_dir); lim_free (0, path_dir_basename); lim_free (0, path_dir_dir); lim_free (0, basename); lim_free (0, file); } } } /* duplicate ids */ if (id) { struct hashtree_item * item; item = hashtree_store (thunk->duplicated_ids_index, hash_key (id), (void *)id, &tree_lint_hashtree_rules); if (item->key == id) { struct lint_id_mapping * binding; item->key = str_save (0, id); binding = lim_malloc (0, sizeof (*binding)); binding->first_occurence = str_save (0, path); binding->index = -1; item->binding = (void *)binding; } else { struct lint_id_mapping * binding; binding = (struct lint_id_mapping *)item->binding; if (binding->index < 0) { *(rel_table *)ar_push ((void **)&thunk->answer->duplicate_id_groups, 0, sizeof (rel_table)) = rel_table_nil; binding->index = ar_size ((void *)thunk->answer->duplicate_id_groups, 0, sizeof (rel_table)) - 1; rel_add_records (&thunk->answer->duplicate_id_groups[binding->index], rel_make_record_2_taking (rel_make_field_str (binding->first_occurence), rel_make_field_str (id)), rel_record_null); } rel_add_records (&thunk->answer->duplicate_id_groups[binding->index], rel_singleton_record_taking (rel_make_field_str (path)), rel_record_null); } } } static int str_key_eq (void * va, void * vb, struct hashtree_rules * r) { t_uchar * a; t_uchar * b; a = (t_uchar *)va; b = (t_uchar *)vb; return !str_cmp (a, b); } static void tree_lint_hashtree_freefn (struct hashtree_item * it, struct hashtree_rules * rules) { struct lint_id_mapping * binding; lim_free (0, it->key); binding = (struct lint_id_mapping *)it->binding; lim_free (0, binding->first_occurence); } static t_ulong hash_key (const t_uchar * key) { return hash_mem (key, str_length (key)); } /* tag: Tom Lord Wed May 14 14:30:47 2003 (proj-tree-lint.c) */ tla-1.3.5+dfsg/src/tla/libarch/cmds.c0000644000175000017500000004331310457622000016002 0ustar useruser/* cmds.c: * **************************************************************** * Copyright (C) 2003, 2004 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "tla/libarch/cmd-abrowse.h" #include "tla/libarch/cmd-add-log-version.h" #include "tla/libarch/cmd-add-pristine.h" #include "tla/libarch/cmd-add-id.h" #include "tla/libarch/cmd-ancestry.h" #include "tla/libarch/cmd-ancestry-graph.h" #include "tla/libarch/cmd-archive-fixup.h" #include "tla/libarch/cmd-archive-meta-info.h" #include "tla/libarch/cmd-archive-mirror.h" #include "tla/libarch/cmd-archive-setup.h" #include "tla/libarch/cmd-archive-snapshot.h" #include "tla/libarch/cmd-archive-version.h" #include "tla/libarch/cmd-branch.h" #include "tla/libarch/cmd-branches.h" #include "tla/libarch/cmd-build-config.h" #include "tla/libarch/cmd-cachedrevs.h" #include "tla/libarch/cmd-cacherev.h" #include "tla/libarch/cmd-cat-archive-log.h" #include "tla/libarch/cmd-cat-log.h" #include "tla/libarch/cmd-categories.h" #include "tla/libarch/cmd-cat-config.h" #include "tla/libarch/cmd-changelog.h" #include "tla/libarch/cmd-changeset.h" #include "tla/libarch/cmd-commit.h" #include "tla/libarch/cmd-default-id.h" #include "tla/libarch/cmd-delete-id.h" #include "tla/libarch/cmd-diff.h" #include "tla/libarch/cmd-rm.h" #include "tla/libarch/cmd-apply-delta.h" #include "tla/libarch/cmd-apply-changeset.h" #include "tla/libarch/cmd-export.h" #include "tla/libarch/cmd-file-diff.h" #include "tla/libarch/cmd-file-find.h" #include "tla/libarch/cmd-find-pristine.h" #include "tla/libarch/cmd-get-changeset.h" #include "tla/libarch/cmd-get.h" #include "tla/libarch/cmd-grab.h" #include "tla/libarch/cmd-help.h" #include "tla/libarch/cmd-import.h" #include "tla/libarch/cmd-init-tree.h" #include "tla/libarch/cmd-id.h" #include "tla/libarch/cmd-join-branch.h" #include "tla/libarch/cmd-library-add.h" #include "tla/libarch/cmd-library-archives.h" #include "tla/libarch/cmd-library-branches.h" #include "tla/libarch/cmd-library-categories.h" #include "tla/libarch/cmd-library-config.h" #include "tla/libarch/cmd-library-file.h" #include "tla/libarch/cmd-library-find.h" #include "tla/libarch/cmd-library-log.h" #include "tla/libarch/cmd-library-remove.h" #include "tla/libarch/cmd-library-revisions.h" #include "tla/libarch/cmd-library-versions.h" #include "tla/libarch/cmd-lock-pristine.h" #include "tla/libarch/cmd-lock-revision.h" #include "tla/libarch/cmd-log-for-merge.h" #include "tla/libarch/cmd-logs.h" #include "tla/libarch/cmd-log-versions.h" #include "tla/libarch/cmd-archives.h" #include "tla/libarch/cmd-pristines.h" #include "tla/libarch/cmd-make-archive.h" #include "tla/libarch/cmd-make-branch.h" #include "tla/libarch/cmd-make-category.h" #include "tla/libarch/cmd-make-log.h" #include "tla/libarch/cmd-make-version.h" #include "tla/libarch/cmd-merges.h" #include "tla/libarch/cmd-move-id.h" #include "tla/libarch/cmd-mv.h" #include "tla/libarch/cmd-my-default-archive.h" #include "tla/libarch/cmd-my-id.h" #include "tla/libarch/cmd-my-revision-library.h" #include "tla/libarch/cmd-new-merges.h" #include "tla/libarch/cmd-parse-package-name.h" #include "tla/libarch/cmd-rbrowse.h" #include "tla/libarch/cmd-redo.h" #include "tla/libarch/cmd-register-archive.h" #include "tla/libarch/cmd-remove-log-version.h" #include "tla/libarch/cmd-replay.h" #include "tla/libarch/cmd-delta.h" #include "tla/libarch/cmd-revisions.h" #include "tla/libarch/cmd-set-tree-version.h" #include "tla/libarch/cmd-show-changeset.h" #include "tla/libarch/cmd-inventory.h" #include "tla/libarch/cmd-star-merge.h" #include "tla/libarch/cmd-switch.h" #include "tla/libarch/cmd-sync-tree.h" #include "tla/libarch/cmd-id-tagging-defaults.h" #include "tla/libarch/cmd-id-tagging-method.h" #include "tla/libarch/cmd-tag.h" #include "tla/libarch/cmd-touch.h" #include "tla/libarch/cmd-tree-id.h" #include "tla/libarch/cmd-tree-lint.h" #include "tla/libarch/cmd-tree-root.h" #include "tla/libarch/cmd-tree-version.h" #include "tla/libarch/cmd-uncacherev.h" #include "tla/libarch/cmd-undo.h" #include "tla/libarch/cmd-update.h" #include "tla/libarch/cmd-valid-package-name.h" #include "tla/libarch/cmd-versions.h" #include "tla/libarch/cmd-changes.h" #include "tla/libarch/cmd-missing.h" #include "tla/libarch/cmd-whereis-archive.h" #include "tla/libarch/cmd-escape.h" #include "tla/libarch/cmds.h" struct arch_command arch_commands[] = { {"help", 0, 0, 0, arch_level_basic}, {"help", arch_cmd_help, arch_cmd_help_help, 0, arch_level_basic}, {"User Commands", 0, 0, 0, arch_level_basic}, {"my-id", arch_cmd_my_id, arch_cmd_my_id_help, 0, arch_level_basic}, {"", 0}, {"my-default-archive", arch_cmd_my_default_archive, arch_cmd_my_default_archive_help, 0, arch_level_basic}, {"register-archive", arch_cmd_register_archive, arch_cmd_register_archive_help, 0, arch_level_basic}, {"archive-register", arch_cmd_register_archive, arch_cmd_register_archive_help, "register-archive", arch_level_basic}, {"whereis-archive", arch_cmd_whereis_archive, arch_cmd_whereis_archive_help, 0, arch_level_advanced}, {"archives", arch_cmd_archives, arch_cmd_archives_help, 0, arch_level_basic}, {"ls-archives", arch_cmd_archives, arch_cmd_archives_help, "archives", arch_level_deprecated}, {"Project Tree Commands", 0, 0, 0, arch_level_basic}, {"init-tree", arch_cmd_init_tree, arch_cmd_init_tree_help, 0, arch_level_basic}, {"tree-root", arch_cmd_tree_root, arch_cmd_tree_root_help, 0, arch_level_advanced}, {"", 0}, {"tree-version", arch_cmd_tree_version, arch_cmd_tree_version_help, 0, arch_level_advanced}, {"tree-id", arch_cmd_tree_id, arch_cmd_tree_id_help, 0, arch_level_basic}, {"tree-revision", arch_cmd_tree_id, arch_cmd_tree_id_help, 0, arch_level_basic}, {"set-tree-version", arch_cmd_set_tree_version, arch_cmd_set_tree_version_help, 0, arch_level_advanced}, {"", 0}, {"undo", arch_cmd_undo, arch_cmd_undo_help, 0, arch_level_basic}, {"undo-changes", arch_cmd_undo, arch_cmd_undo_help, "undo", arch_level_deprecated}, {"redo", arch_cmd_redo, arch_cmd_redo_help, 0, arch_level_basic}, {"redo-changes", arch_cmd_redo, arch_cmd_redo_help, "redo", arch_level_deprecated}, {"", 0}, {"changes", arch_cmd_changes, arch_cmd_changes_help, 0, arch_level_advanced}, {"what-changed", arch_cmd_changes, arch_cmd_changes_help, "changes", arch_level_deprecated}, {"file-diff", arch_cmd_file_diff, arch_cmd_file_diff_help, 0, arch_level_advanced}, {"file-diffs", arch_cmd_file_diff, arch_cmd_file_diff_help, "file-diff", arch_level_deprecated}, {"diff", arch_cmd_diff, arch_cmd_diff_help, 0, arch_level_basic}, {"export", arch_cmd_export, arch_cmd_export_help, 0, arch_level_advanced}, {"Project Tree Inventory Commands", 0, 0, 0, arch_level_basic}, {"inventory", arch_cmd_inventory, arch_cmd_inventory_help, 0, arch_level_basic}, {"srcfind", arch_cmd_inventory, arch_cmd_inventory_help, "inventory", arch_level_deprecated}, {"tree-lint", arch_cmd_tree_lint, arch_cmd_tree_lint_help, "lint", arch_level_advanced}, {"lint", arch_cmd_tree_lint, arch_cmd_tree_lint_help, 0, arch_level_basic}, {"id", arch_cmd_id, arch_cmd_id_help, 0, arch_level_advanced}, {"", 0}, {"id-tagging-method", arch_cmd_id_tagging_method, arch_cmd_id_tagging_method_help, 0, arch_level_advanced}, {"", 0}, {"add", arch_cmd_add_id, arch_cmd_add_id_help, "add-id", arch_level_basic}, {"add-id", arch_cmd_add_id, arch_cmd_add_id_help, 0, arch_level_advanced}, {"delete-id", arch_cmd_delete_id, arch_cmd_delete_id_help, 0, arch_level_advanced}, {"move-id", arch_cmd_move_id, arch_cmd_move_id_help, 0, arch_level_advanced}, {"touch", arch_cmd_touch, arch_cmd_touch_help, 0, arch_level_advanced}, {"rm", arch_cmd_rm, arch_cmd_rm_help, 0, arch_level_basic}, {"mv", arch_cmd_mv, arch_cmd_mv_help, 0, arch_level_basic}, {"explicit-default", arch_cmd_default_id, arch_cmd_default_id_help, 0, arch_level_advanced}, {"default-id", arch_cmd_default_id, arch_cmd_default_id_help, "explicit-default", arch_level_advanced}, {"", 0}, {"id-tagging-defaults", arch_cmd_id_tagging_defaults, arch_cmd_id_tagging_defaults_help, 0, arch_level_advanced}, {"Patch Set Commands", 0, 0, 0, arch_level_advanced}, {"changeset", arch_cmd_changeset, arch_cmd_changeset_help, 0, arch_level_advanced}, {"mkpatch", arch_cmd_changeset, arch_cmd_changeset_help, "changeset", arch_level_advanced}, {"apply-changeset", arch_cmd_apply_changeset, arch_cmd_apply_changeset_help, 0, arch_level_advanced}, {"dopatch", arch_cmd_apply_changeset, arch_cmd_apply_changeset_help, "apply-changeset", arch_level_advanced}, {"do-changeset", arch_cmd_apply_changeset, arch_cmd_apply_changeset_help, "apply-changeset", arch_level_deprecated}, {"show-changeset", arch_cmd_show_changeset, arch_cmd_show_changeset_help, 0, arch_level_advanced}, {"Archive Transaction Commands", 0, 0, 0, arch_level_basic}, {"make-archive", arch_cmd_make_archive, arch_cmd_make_archive_help, 0, arch_level_basic}, {"archive-create", arch_cmd_make_archive, arch_cmd_make_archive_help, "make-archive", arch_level_basic}, {"archive-setup", arch_cmd_archive_setup, arch_cmd_archive_setup_help, 0, arch_level_basic}, {"", 0}, {"make-category", arch_cmd_make_category, arch_cmd_make_category_help, 0, arch_level_advanced}, {"make-branch", arch_cmd_make_branch, arch_cmd_make_branch_help, 0, arch_level_advanced}, {"make-version", arch_cmd_make_version, arch_cmd_make_version_help, 0, arch_level_advanced}, {"", 0}, {"import", arch_cmd_import, arch_cmd_import_help, 0, arch_level_advanced}, {"imprev", arch_cmd_import, arch_cmd_import_help, "import", arch_level_deprecated}, {"commit", arch_cmd_commit, arch_cmd_commit_help, 0, arch_level_basic}, {"cmtrev", arch_cmd_commit, arch_cmd_commit_help, "commit", arch_level_deprecated}, {"", 0}, {"get", arch_cmd_get, arch_cmd_get_help, 0, arch_level_basic}, {"getrev", arch_cmd_get, arch_cmd_get_help, "get", arch_level_deprecated}, {"get-changeset", arch_cmd_get_changeset, arch_cmd_get_changeset_help, 0, arch_level_advanced}, {"get-patch", arch_cmd_get_changeset, arch_cmd_get_changeset_help, "get-changeset", arch_level_deprecated}, {"", 0}, {"lock-revision", arch_cmd_lock_revision, arch_cmd_lock_revision_help, 0, arch_level_advanced}, {"archive-mirror", arch_cmd_archive_mirror, arch_cmd_archive_mirror_help, 0, arch_level_advanced}, {"push-mirror", arch_cmd_archive_mirror, arch_cmd_archive_mirror_help, "archive-mirror", arch_level_deprecated}, {"Archive Commands", 0, 0, 0, arch_level_basic}, {"abrowse", arch_cmd_abrowse, arch_cmd_abrowse_help, 0, arch_level_advanced}, {"rbrowse", arch_cmd_rbrowse, arch_cmd_rbrowse_help, 0, arch_level_basic}, {"categories", arch_cmd_categories, arch_cmd_categories_help, 0, arch_level_advanced}, {"branches", arch_cmd_branches, arch_cmd_branches_help, 0, arch_level_advanced}, {"versions", arch_cmd_versions, arch_cmd_versions_help, 0, arch_level_advanced}, {"revisions", arch_cmd_revisions, arch_cmd_revisions_help, 0, arch_level_advanced}, {"ancestry", arch_cmd_ancestry, arch_cmd_ancestry_help, 0, arch_level_advanced}, {"ancestry-graph", arch_cmd_ancestry_graph, arch_cmd_ancestry_graph_help, 0, arch_level_advanced}, {"", 0}, {"cat-archive-log", arch_cmd_cat_archive_log, arch_cmd_cat_archive_log_help, 0, arch_level_advanced}, {"", 0}, {"cacherev", arch_cmd_cacherev, arch_cmd_cacherev_help, 0, arch_level_advanced}, {"cachedrevs", arch_cmd_cachedrevs, arch_cmd_cachedrevs_help, 0, arch_level_advanced}, {"uncacherev", arch_cmd_uncacherev, arch_cmd_uncacherev_help, 0, arch_level_advanced}, {"", 0}, {"archive-meta-info", arch_cmd_archive_meta_info, arch_cmd_archive_meta_info_help, 0, arch_level_advanced}, {"archive-snapshot", arch_cmd_archive_snapshot, arch_cmd_archive_snapshot_help, 0, arch_level_advanced}, {"archive-version", arch_cmd_archive_version, arch_cmd_archive_version_help, 0, arch_level_advanced}, {"", 0}, {"archive-fixup", arch_cmd_archive_fixup, arch_cmd_archive_fixup_help, 0, arch_level_advanced}, {"Patch Log Commands", 0, 0, 0, arch_level_basic}, {"make-log", arch_cmd_make_log, arch_cmd_make_log_help, 0, arch_level_basic}, {"log-versions", arch_cmd_log_versions, arch_cmd_log_versions_help, 0, arch_level_advanced}, {"add-log-version", arch_cmd_add_log_version, arch_cmd_add_log_version_help, 0, arch_level_advanced}, {"remove-log-version", arch_cmd_remove_log_version, arch_cmd_remove_log_version_help, 0, arch_level_advanced}, {"logs", arch_cmd_logs, arch_cmd_logs_help, 0, arch_level_basic}, {"cat-log", arch_cmd_cat_log, arch_cmd_cat_log_help, 0, arch_level_advanced}, {"", 0}, {"changelog", arch_cmd_changelog, arch_cmd_changelog_help, 0, arch_level_basic}, {"", 0}, {"log-for-merge", arch_cmd_log_for_merge, arch_cmd_log_for_merge_help, 0, arch_level_basic}, {"merges", arch_cmd_merges, arch_cmd_merges_help, 0, arch_level_advanced}, {"new-merges", arch_cmd_new_merges, arch_cmd_new_merges_help, 0, arch_level_advanced}, {"Multi-project Configuration Commands", 0, 0, 0, arch_level_advanced}, {"build-config", arch_cmd_build_config, arch_cmd_build_config_help, 0, arch_level_advanced}, {"buildcfg", arch_cmd_build_config, arch_cmd_build_config_help, "build-config", arch_level_deprecated}, {"cat-config", arch_cmd_cat_config, arch_cmd_cat_config_help, 0, arch_level_advanced}, {"catcfg", arch_cmd_cat_config, arch_cmd_cat_config_help, "cat-config", arch_level_deprecated}, {"cfgcat", arch_cmd_cat_config, arch_cmd_cat_config_help, "cat-config", arch_level_deprecated}, {"Commands for Branching and Merging", 0, 0, 0, arch_level_basic}, {"tag", arch_cmd_tag, arch_cmd_tag_help, 0, arch_level_basic}, {"branch", arch_cmd_branch, arch_cmd_branch_help, 0, arch_level_basic}, {"switch", arch_cmd_switch, arch_cmd_switch_help, 0, arch_level_basic}, {"tagrev", arch_cmd_tag, arch_cmd_tag_help, "tag", arch_level_deprecated}, {"", 0}, {"update", arch_cmd_update, arch_cmd_update_help, 0, arch_level_advanced}, {"replay", arch_cmd_replay, arch_cmd_replay_help, 0, arch_level_advanced}, {"star-merge", arch_cmd_star_merge, arch_cmd_star_merge_help, 0, arch_level_basic}, {"apply-delta", arch_cmd_apply_delta, arch_cmd_apply_delta_help, 0, arch_level_advanced}, {"delta-patch", arch_cmd_apply_delta, arch_cmd_apply_delta_help, "apply-delta", arch_level_deprecated}, {"deltapatch", arch_cmd_apply_delta, arch_cmd_apply_delta_help, "apply-delta", arch_level_deprecated}, {"missing", arch_cmd_missing, arch_cmd_missing_help, 0, arch_level_basic}, {"whats-missing", arch_cmd_missing, arch_cmd_missing_help, "missing", arch_level_deprecated}, {"", 0}, {"join-branch", arch_cmd_join_branch, arch_cmd_join_branch_help, 0, arch_level_advanced}, {"sync-tree", arch_cmd_sync_tree, arch_cmd_sync_tree_help, 0, arch_level_advanced}, {"make-sync-tree", arch_cmd_sync_tree, arch_cmd_sync_tree_help, "sync-tree", arch_level_deprecated}, {"", 0}, {"delta", arch_cmd_delta, arch_cmd_delta_help, 0, arch_level_advanced}, {"revdelta", arch_cmd_delta, arch_cmd_delta_help, "delta", arch_level_deprecated}, {"Local Cache Commands", 0, 0, 0, arch_level_advanced}, {"changes", arch_cmd_changes, arch_cmd_changes_help, 0, arch_level_advanced}, {"what-changed", arch_cmd_changes, arch_cmd_changes_help, "changes", arch_level_deprecated}, {"file-diff", arch_cmd_file_diff, arch_cmd_file_diff_help, 0, arch_level_advanced}, {"file-find", arch_cmd_file_find, arch_cmd_file_find_help, 0, arch_level_advanced}, {"", 0}, {"pristines", arch_cmd_pristines, arch_cmd_pristines_help, 0, arch_level_advanced}, {"ls-pristines", arch_cmd_pristines, arch_cmd_pristines_help, "pristines", arch_level_deprecated}, {"lock-pristine", arch_cmd_lock_pristine, arch_cmd_lock_pristine_help, 0, arch_level_advanced}, {"add-pristine", arch_cmd_add_pristine, arch_cmd_add_pristine_help, 0, arch_level_advanced}, {"find-pristine", arch_cmd_find_pristine, arch_cmd_find_pristine_help, 0, arch_level_advanced}, {"Revision Library Commands", 0, 0, 0, arch_level_advanced}, {"my-revision-library", arch_cmd_my_revision_library, arch_cmd_my_revision_library_help, 0, arch_level_advanced}, {"library-dir", arch_cmd_my_revision_library, arch_cmd_my_revision_library_help, "my-revision-library", arch_level_advanced}, {"library-config", arch_cmd_library_config, arch_cmd_library_config_help, 0, arch_level_advanced}, {"library-find", arch_cmd_library_find, arch_cmd_library_find_help, 0, arch_level_advanced}, {"library-add", arch_cmd_library_add, arch_cmd_library_add_help, 0, arch_level_advanced}, {"library-remove", arch_cmd_library_remove, arch_cmd_library_remove_help, 0, arch_level_advanced}, {"library-archives", arch_cmd_library_archives, arch_cmd_library_archives_help, 0, arch_level_advanced}, {"library-categories", arch_cmd_library_categories, arch_cmd_library_categories_help, 0, arch_level_advanced}, {"library-branches", arch_cmd_library_branches, arch_cmd_library_branches_help, 0, arch_level_advanced}, {"library-versions", arch_cmd_library_versions, arch_cmd_library_versions_help, 0, arch_level_advanced}, {"library-revisions", arch_cmd_library_revisions, arch_cmd_library_revisions_help, 0, arch_level_advanced}, {"library-log", arch_cmd_library_log, arch_cmd_library_log_help, 0, arch_level_advanced}, {"library-file", arch_cmd_library_file, arch_cmd_library_file_help, 0, arch_level_advanced}, {"Published Revisions Commands", 0, 0, 0, arch_level_advanced}, {"grab", arch_cmd_grab, arch_cmd_grab_help, 0, arch_level_advanced}, {"Miscellaneous Scripting Support", 0, 0, 0, arch_level_advanced}, {"parse-package-name", arch_cmd_parse_package_name, arch_cmd_parse_package_name_help, 0, arch_level_advanced}, {"valid-package-name", arch_cmd_valid_package_name, arch_cmd_valid_package_name_help, 0, arch_level_advanced}, {"escape", arch_cmd_escape, arch_cmd_escape_help, 0, arch_level_advanced}, {0, }, }; /* tag: Tom Lord Tue Jun 10 17:15:53 2003 (cmds.c) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-help.h0000644000175000017500000000115510457622000016550 0ustar useruser/* cmd-help.h: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__CMD_HELP_H #define INCLUDE__LIBARCH__CMD_HELP_H #include "hackerlab/machine/types.h" extern t_uchar arch_cmd_help_help[]; /* automatically generated __STDC__ prototypes */ extern int arch_cmd_help (t_uchar * program_name, int argc, char * argv[]); #endif /* INCLUDE__LIBARCH__CMD_HELP_H */ /* tag: Tom Lord Sat Jan 5 15:26:10 2002 (cmd-help.h) */ tla-1.3.5+dfsg/src/tla/libarch/merge-three-way.h0000644000175000017500000000073610457622000020065 0ustar useruser/* merge-three-way.h: * **************************************************************** * Copyright (C) 2004 Aaron Bentley * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__MERGE_THREE_WAY_H #define INCLUDE__LIBARCH__MERGE_THREE_WAY_H #include "hackerlab/machine/types.h" /* automatically generated __STDC__ prototypes */ #endif /* INCLUDE__LIBARCH__MERGE_THREE_WAY_H */ tla-1.3.5+dfsg/src/tla/libarch/cmd-my-revision-library.h0000644000175000017500000000135710457622000021547 0ustar useruser/* cmd-my-revision-library.h: * **************************************************************** * Copyright (C) 2003 Tom Lord, Stig Brautaset * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__CMD_MY_REVISION_LIBRARY_H #define INCLUDE__LIBARCH__CMD_MY_REVISION_LIBRARY_H #include "hackerlab/machine/types.h" extern t_uchar arch_cmd_my_revision_library_help[]; /* automatically generated __STDC__ prototypes */ extern int arch_cmd_my_revision_library (t_uchar * program_name, int argc, char * argv[]); #endif /* INCLUDE__LIBARCH__CMD_MY_REVISION_LIBRARY_H */ /* tag: Stig Brautaset Sat Jun 7 16:43:26 BST 2003 (cmd-my-revision-library.h) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-redo.h0000644000175000017500000000116410457622000016551 0ustar useruser/* cmd-redo.h: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__CMD_REDO_H #define INCLUDE__LIBARCH__CMD_REDO_H #include "hackerlab/machine/types.h" extern t_uchar arch_cmd_redo_help[]; /* automatically generated __STDC__ prototypes */ extern int arch_cmd_redo (t_uchar * program_name, int argc, char * argv[]); #endif /* INCLUDE__LIBARCH__CMD_REDO_H */ /* tag: Tom Lord Sat Jan 5 15:26:10 2002 (cmd-redo-changes.h) */ tla-1.3.5+dfsg/src/tla/libarch/arch.h0000644000175000017500000000112010457622000015764 0ustar useruser/* arch.h: * **************************************************************** * Copyright (C) 2004 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__ARCH_H #define INCLUDE__LIBARCH__ARCH_H #include "hackerlab/char/char-class.h" static const int arch_escape_classes = char_class_control | char_class_space | char_class_non_ascii; /* automatically generated __STDC__ prototypes */ #endif /* INCLUDE__LIBARCH__ARCH_H */ /* tag: Tom Lord Wed May 12 11:42:33 2004 (arch.h) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-remove-log-version.h0000644000175000017500000000131010457622000021350 0ustar useruser/* cmd-remove-log-version.h: * **************************************************************** * Copyright (C) 2003 Tom Lord, Stig Brautaset * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__CMD_REMOVE_LOG_H #define INCLUDE__LIBARCH__CMD_REMOVE_LOG_H #include "hackerlab/machine/types.h" extern t_uchar arch_cmd_remove_log_version_help[]; /* automatically generated __STDC__ prototypes */ extern int arch_cmd_remove_log_version (t_uchar * program_name, int argc, char * argv[]); #endif /* INCLUDE__LIBARCH__CMD_REMOVE_LOG_H */ /* tag: Stig Brautaset Sat Jun 7 17:00:43 BST 2003 (cmd-remove-log.h) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-update.h0000644000175000017500000000117210457622000017101 0ustar useruser/* cmd-update.h: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__CMD_UPDATE_H #define INCLUDE__LIBARCH__CMD_UPDATE_H #include "hackerlab/machine/types.h" extern t_uchar arch_cmd_update_help[]; /* automatically generated __STDC__ prototypes */ extern int arch_cmd_update (t_uchar * program_name, int argc, char * argv[]); #endif /* INCLUDE__LIBARCH__CMD_UPDATE_H */ /* tag: Tom Lord Sat Jan 5 15:26:10 2002 (cmd-update.h) */ tla-1.3.5+dfsg/src/tla/libarch/pfs-ftp.h0000644000175000017500000000117210457622000016435 0ustar useruser/* pfs-ftp.h: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__PFS_FTP_H #define INCLUDE__LIBARCH__PFS_FTP_H #include "tla/libarch/pfs.h" /* automatically generated __STDC__ prototypes */ extern int arch_pfs_ftp_supported_protocol (const t_uchar * uri); extern struct arch_pfs_session * arch_pfs_ftp_connect (const t_uchar * uri); #endif /* INCLUDE__LIBARCH__PFS_FTP_H */ /* tag: Tom Lord Sat Jan 5 15:26:10 2002 (pfs-ftp.h) */ tla-1.3.5+dfsg/src/tla/libarch/import.h0000644000175000017500000000124510457622000016371 0ustar useruser/* import.h: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__IMPORT_H #define INCLUDE__LIBARCH__IMPORT_H #include "tla/libarch/archive.h" /* automatically generated __STDC__ prototypes */ extern void arch_import (struct arch_archive * arch, t_uchar * version, t_uchar * tree_root, t_uchar * raw_log); #endif /* INCLUDE__LIBARCH__IMPORT_H */ /* tag: Tom Lord Sat Jan 5 15:26:10 2002 (import.h) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-apply-changeset.c0000644000175000017500000001050010457622000020671 0ustar useruser/* cmd-apply-changeset.c * **************************************************************** * Copyright (C) 2001, 2002, 2003, 2004 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "config-options.h" #include "hackerlab/cmd/main.h" #include "hackerlab/mem/mem.h" #include "tla/libarch/apply-changeset.h" #include "tla/libarch/cmd.h" #include "tla/libarch/cmdutils.h" #include "tla/libarch/cmd-apply-changeset.h" /* __STDC__ prototypes for static functions */ static void changeset_callback (void * ign, const char * fmt, va_list ap); static t_uchar * usage = "[options] CHANGESET [TARGET]"; static t_uchar * version_string = (cfg__std__package " from regexps.com\n" "\n" "Copyright 2001, 2002, 2003 Tom Lord\n" "\n" "This is free software; see the source for copying conditions.\n" "There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\n" "PARTICULAR PURPOSE.\n" "\n" "Report bugs to " cfg__tla_bug_mail ".\n" "\n" cfg__std__release_id_string "\n"); #define OPTS(OP) \ OP (opt_help_msg, "h", "help", 0, \ "Display a help message and exit.") \ OP (opt_long_help, "H", 0, 0, \ "Display a verbose help message and exit.") \ OP (opt_version, "V", "version", 0, \ "Display a release identifier string\n" \ "and exit.") \ OP (opt_forward, "N", "forward", 0, \ "pass the --forward option to `patch'") \ OP (opt_reverse, "r", "reverse", 0, \ "Apply the changeset in reverse") \ OP (opt_unescaped, 0, "unescaped", 0, \ "show filenames in unescaped form") t_uchar arch_cmd_apply_changeset_help[] = ("apply a whole-tree changeset\n" "Apply the changeset CHANGESET to the source tree TARGET (default `.').\n" "\n" "See also \"tla changeset -H\".\n"); enum options { OPTS (OPT_ENUM) }; static struct opt_desc opts[] = { OPTS (OPT_DESC) {-1, 0, 0, 0, 0} }; int arch_cmd_apply_changeset (t_uchar * program_name, int argc, char * argv[]) { int o; struct opt_parsed * option; int reverse = 0; int forward = 0; int escape_classes = arch_escape_classes; char *target_dir = 0; safe_buffer_fd (1, 0, O_WRONLY, 0); option = 0; while (1) { o = opt_standard (lim_use_must_malloc, &option, opts, &argc, argv, program_name, usage, version_string, arch_cmd_apply_changeset_help, opt_help_msg, opt_long_help, opt_version); if (o == opt_none) break; switch (o) { default: safe_printfmt (2, "unhandled option `%s'\n", option->opt_string); panic ("internal error parsing arguments"); usage_error: opt_usage (2, argv[0], program_name, usage, 1); exit (1); /* bogus_arg: */ safe_printfmt (2, "ill-formed argument for `%s' (`%s')\n", option->opt_string, option->arg_string); goto usage_error; case opt_reverse: { reverse = 1; break; } case opt_forward: { forward = 1; break; } case opt_unescaped: { escape_classes = 0; break; } } } if (argc == 3) target_dir = argv[2]; else if (argc == 2) target_dir = "."; else goto usage_error; { struct arch_apply_changeset_report report; mem_set0 ((void *)&report, sizeof (report)); report.callback = changeset_callback; arch_apply_changeset (&report, argv[1], target_dir, arch_unspecified_id_tagging, arch_inventory_unrecognized, reverse, forward, 0, 0, 0, escape_classes); arch_check_directory (argv[1], 0); arch_check_directory (argv[2], 1); if (arch_conflicts_occured (&report)) { safe_printfmt (2, "%s: conflicts occured\n", argv[0]); exit (1); } } return 0; } static void changeset_callback (void * ign, const char * fmt, va_list ap) { safe_printfmt_va_list (1, fmt, ap); } /* tag: Tom Lord Fri May 16 09:59:03 2003 (do-changeset.c) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-tree-lint.h0000644000175000017500000000125110457622000017520 0ustar useruser/* cmd-tree-lint.h: * **************************************************************** * Copyright (C) 2003 Tom Lord, Stig Brautaset * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__CMD_TREE_LINT_H #define INCLUDE__LIBARCH__CMD_TREE_LINT_H #include "hackerlab/machine/types.h" extern t_uchar arch_cmd_tree_lint_help[]; /* automatically generated __STDC__ prototypes */ extern int arch_cmd_tree_lint (t_uchar * program_name, int argc, char * argv[]); #endif /* INCLUDE__LIBARCH__CMD_TREE_LINT_H */ /* tag: Stig Brautaset Sat Jun 7 17:34:59 BST 2003 (cmd-tree-lint.h) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-get.h0000644000175000017500000000115010457622000016372 0ustar useruser/* cmd-get.h: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__CMD_GET_H #define INCLUDE__LIBARCH__CMD_GET_H #include "hackerlab/machine/types.h" extern t_uchar arch_cmd_get_help[]; /* automatically generated __STDC__ prototypes */ extern int arch_cmd_get (t_uchar * program_name, int argc, char * argv[]); #endif /* INCLUDE__LIBARCH__CMD_GET_H */ /* tag: Tom Lord Sat Jan 5 15:26:10 2002 (cmd-getrev.h) */ tla-1.3.5+dfsg/src/tla/libarch/missing.h0000644000175000017500000000162110457622000016526 0ustar useruser/* missing.h: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__WHATS_MISSING_H #define INCLUDE__LIBARCH__WHATS_MISSING_H #include "tla/libawk/relational.h" #include "tla/libarch/archive.h" /* automatically generated __STDC__ prototypes */ extern rel_table arch_missing (t_uchar * tree_root, struct arch_archive * arch, t_uchar * version, int skip_present); extern int arch_revision_has_present_patch (t_uchar * tree_root, struct arch_archive * arch, t_uchar * revision); extern rel_table arch_filter_present_logs (t_uchar * tree_root, struct arch_archive * arch, t_uchar * version, rel_table logs); #endif /* INCLUDE__LIBARCH__WHATS_MISSING_H */ /* tag: Tom Lord Sat Jan 5 15:26:10 2002 (whats-missing.h) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-archives.c0000644000175000017500000001166610457622000017427 0ustar useruser/* cmd-archives.c * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "config-options.h" #include "hackerlab/cmd/main.h" #include "tla/libfsutils/ensure-dir.h" #include "tla/libarch/my.h" #include "tla/libarch/namespace.h" #include "tla/libarch/archives.h" #include "tla/libarch/cmd-archives.h" static t_uchar * usage = "[options] [search regular expression]"; static t_uchar * version_string = (cfg__std__package " from regexps.com\n" "\n" "Copyright 2003 Tom Lord\n" "\n" "This is free software; see the source for copying conditions.\n" "There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\n" "PARTICULAR PURPOSE.\n" "\n" "Report bugs to " cfg__tla_bug_mail ".\n" "\n" cfg__std__release_id_string "\n"); #define OPTS(OP) \ OP (opt_help_msg, "h", "help", 0, \ "Display a help message and exit.") \ OP (opt_long_help, "H", 0, 0, \ "Display a verbose help message and exit.") \ OP (opt_version, "V", "version", 0, \ "Display a release identifier string\n" \ "and exit.") \ OP (opt_names, "n", "names", 0, \ "print archive names only") \ OP (opt_noremote, "R", "exclude-remote", 0, \ "Exclude MIRROR and SOURCE archives.") t_uchar arch_cmd_archives_help[] = ("report registered archives and their locations\n" "Print a list of registered archives and their locations\n" "\n" "If [search regex] is given then only archives with names\n" "that match [search regex] will be shown\n"); enum options { OPTS (OPT_ENUM) }; static struct opt_desc opts[] = { OPTS (OPT_DESC) {-1, 0, 0, 0, 0} }; int arch_cmd_archives (t_uchar * program_name, int argc, char * argv[]) { int o; struct opt_parsed * option; int nolist; int names_only; int exclude_remote; nolist = 0; names_only = 0; exclude_remote = 0; safe_buffer_fd (1, 0, O_WRONLY, 0); option = 0; while (1) { o = opt_standard (lim_use_must_malloc, &option, opts, &argc, argv, program_name, usage, version_string, arch_cmd_archives_help, opt_help_msg, opt_long_help, opt_version); if (o == opt_none) break; switch (o) { default: safe_printfmt (2, "unhandled option `%s'\n", option->opt_string); panic ("internal error parsing arguments"); usage_error: opt_usage (2, argv[0], program_name, usage, 1); exit (1); /* bogus_arg: */ safe_printfmt (2, "ill-formed argument for `%s' (`%s')\n", option->opt_string, option->arg_string); goto usage_error; case opt_names: { names_only = 1; break; } case opt_noremote: { exclude_remote = 1; break; } case opt_double_dash: { goto no_more_args; } } } no_more_args: if (argc > 2) goto usage_error; { rel_table list = rel_table_nil; int x; int re_error; regex_t archive_needle; regex_t mirror_needle; regex_t source_needle; list = arch_registered_archives (); rel_sort_table_by_field (0, list, 0); if (argc == 2) re_error = regcomp(&archive_needle, argv[1], REG_EXTENDED); else re_error = regcomp(&archive_needle, ".*", REG_EXTENDED); if (re_error) panic("Invalid regular expression given for archive name restriction."); re_error = regcomp(&mirror_needle, "-MIRROR", REG_EXTENDED); if (re_error) panic("Unable to compile regular expression"); re_error = regcomp(&source_needle, "-SOURCE", REG_EXTENDED); if (re_error) panic("Unable to compile regular expresion."); for (x = 0; x < rel_n_records (list); ++x) { nolist = 0; nolist = nolist || regexec (&archive_needle, rel_peek_str (list, x, 0), 0, 0, 0); if (exclude_remote) { nolist = nolist || (! regexec (&mirror_needle, rel_peek_str (list, x, 0), 0, 0, 0)); nolist = nolist || (! regexec (&source_needle, rel_peek_str (list, x, 0), 0, 0, 0)); } if (!nolist) { safe_printfmt (1, "%s\n", rel_peek_str (list, x, 0)); if (!names_only) safe_printfmt (1, " %s\n", rel_peek_str (list, x, 1)); } } regfree(&archive_needle); regfree(&mirror_needle); regfree(&source_needle); } return 0; } /* tag: Tom Lord Sun May 18 22:09:05 2003 (ls-archives.c) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-move-id.c0000644000175000017500000000551510457622000017157 0ustar useruser/* cmd-move-id.c * **************************************************************** * Copyright (C) 2001, 2002, 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "config-options.h" #include "hackerlab/cmd/main.h" #include "tla/libarch/inv-ids.h" #include "tla/libarch/cmd-move-id.h" static t_uchar * usage = "[options] from to"; static t_uchar * version_string = (cfg__std__package " from regexps.com\n" "\n" "Copyright 2001, 2002, 2003 Tom Lord\n" "\n" "This is free software; see the source for copying conditions.\n" "There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\n" "PARTICULAR PURPOSE.\n" "\n" "Report bugs to " cfg__tla_bug_mail ".\n" "\n" cfg__std__release_id_string "\n"); #define OPTS(OP) \ OP (opt_help_msg, "h", "help", 0, \ "Display a help message and exit.") \ OP (opt_long_help, "H", 0, 0, \ "Display a verbose help message and exit.") \ OP (opt_version, "V", "version", 0, \ "Display a release identifier string\n" \ "and exit.") t_uchar arch_cmd_move_id_help[] = ("move an explicit inventory id\n" "Move an explicit inventory id for FILE (which may be a regular\n" "file or symbolic link but which must not be a directory).\n"); enum options { OPTS (OPT_ENUM) }; static struct opt_desc opts[] = { OPTS (OPT_DESC) {-1, 0, 0, 0, 0} }; int arch_cmd_move_id (t_uchar * program_name, int argc, char * argv[]) { int o; struct opt_parsed * option; safe_buffer_fd (1, 0, O_WRONLY, 0); option = 0; while (1) { o = opt_standard (lim_use_must_malloc, &option, opts, &argc, argv, program_name, usage, version_string, arch_cmd_move_id_help, opt_help_msg, opt_long_help, opt_version); if (o == opt_none) break; switch (o) { default: safe_printfmt (2, "unhandled option `%s'\n", option->opt_string); panic ("internal error parsing arguments"); usage_error: opt_usage (2, argv[0], program_name, usage, 1); exit (1); /* bogus_arg: */ safe_printfmt (2, "ill-formed argument for `%s' (`%s')\n", option->opt_string, option->arg_string); goto usage_error; } } if (argc != 3) goto usage_error; arch_move_explicit_id (argv[1], argv[2]); return 0; } /* tag: Tom Lord Wed May 14 12:24:43 2003 (move-tag.c) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-add-id.h0000644000175000017500000000122610457622000016741 0ustar useruser/* cmd-add-tag.h: * **************************************************************** * Copyright (C) 2003 Tom Lord, Stig Brautaset * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__CMD_ADD_ID_H #define INCLUDE__LIBARCH__CMD_ADD_ID_H #include "hackerlab/machine/types.h" extern t_uchar arch_cmd_add_id_help[]; /* automatically generated __STDC__ prototypes */ extern int arch_cmd_add_id (t_uchar * program_name, int argc, char * argv[]); #endif /* INCLUDE__LIBARCH__CMD_ADD_ID_H */ /* tag: Stig Brautaset Sat Jun 7 12:31:54 BST 2003 (cmd-add-tag.h) */ tla-1.3.5+dfsg/src/tla/libarch/namespace.c0000644000175000017500000006407010457622000017013 0ustar useruser/* namespace.c: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/bugs/panic.h" #include "hackerlab/fmt/cvt.h" #include "hackerlab/char/char-class.h" #include "hackerlab/char/str.h" #include "hackerlab/sort/qsort.h" #include "hackerlab/vu/safe.h" #include "tla/libfsutils/safety.h" #include "tla/libarch/my.h" #include "tla/libarch/namespace.h" /* __STDC__ prototypes for static functions */ static const t_uchar * over_opt_archive_prefix (const t_uchar * name); static const t_uchar * over_archive_name (const t_uchar * in); static const t_uchar * over_basename (const t_uchar * in); static const t_uchar * over_separator (const t_uchar * in); static const t_uchar * over_version (const t_uchar * in); static const t_uchar * over_patch_level (const t_uchar * in); int arch_valid_id (const t_uchar * id) { const t_uchar * non_empty_marker; /* This isn't exactly the same as larch's version -- * it's a superset. Both are wrong, really. :-) */ while (char_is_alnum (*id) || char_is_space (*id) || (char_is_punct (*id) && (*id != '<'))) ++id; if (*id != '<') return 0; ++id; non_empty_marker = id; while (char_is_alnum (*id) || (*id == '-') || (*id == '+') || (*id == '_') || (*id == '.')) ++id; if (id == non_empty_marker) return 0; if (*id != '@') return 0; ++id; non_empty_marker = id; while (char_is_alnum (*id) || (*id == '-') || (*id == '_') || (*id == '.')) ++id; if (*id != '>') return 0; ++id; if (*id) return 0; return 1; } int arch_valid_archive_name (const t_uchar * name) { const t_uchar * end; if (!name) return 0; end = over_archive_name (name); if (!end || *end) return 0; else return 1; } int arch_valid_patch_level_name (const t_uchar * name) { t_uchar * lvl; if (!str_cmp (name, "base-0")) return 1; if (str_cmp_prefix ("patch-", name) && str_cmp_prefix ("version-", name) && str_cmp_prefix ("versionfix-", name)) return 0; lvl = str_chr_index (name, '-'); if (!lvl) return 0; ++lvl; if (!*lvl) return 0; while (char_is_digit (*lvl)) ++lvl; if (*lvl) return 0; else return 1; } int arch_valid_config_name (const t_uchar * name) { return is_non_upwards_relative_path (name); } /*(c arch_valid_package_name) * int arch_valid_package_name (const t_uchar * name, * enum arch_valid_package_name_archive archive_disposition, * enum arch_valid_package_name_types type, * int tolerant); * * Return non-0 if `name' is a valid arch name of the sort described by * the other arguments. * * `archive_disposition' may be any of the values: * * arch_no_archive the name must not be fully qualified (must have no * no archive name component) * * arch_maybe_archive the name _may_ be fully qualified * * arch_req_archive the name _must_ be fully qualified * * * `type' may be any of the values: * * arch_req_category the name must have at least a category * * arch_req_package the name must have a category and may * have a branch label * * arch_req_version the name must have a version id * (and therefore must have a category and * may have a branch label) * * arch_req_patch_level the name must have a category, may have a * branch label, must have a version id, and * must have a revision name * * `tolerant': * * if 0, then the name may not have any components beyond those * required by `type'. For example, if type is `arch_req_category', * then the name may not have a branch label or version id. * * if 1, then the name may have additional components */ int arch_valid_package_name (const t_uchar * name, enum arch_valid_package_name_archive archive_disposition, enum arch_valid_package_name_types type, int tolerant) { int has_archive; int has_category; int has_branch; int has_version; int has_patch_level; const t_uchar * next; if (!name) return 0; has_archive = 0; has_category = 0; has_branch = 0; has_version = 0; has_patch_level = 0; next = over_opt_archive_prefix (name); has_archive = (next && (next != name)); switch (archive_disposition) { case arch_maybe_archive: { if (!next) return 0; break; } case arch_req_archive: { if (!next || (next == name)) return 0; break; } case arch_no_archive: { if (!next || (next != name)) return 0; break; } } name = next; name = over_basename (name); if (!name) return 0; else has_category = 1; if (*name) { name = over_separator (name); if (!name) return 0; next = over_basename (name); if (next) { has_branch = 1; name = next; if (*name) { name = over_separator (name); if (!name) return 0; } } if (*name) { name = over_version (name); if (!name) return 0; has_version = 1; if (*name) { name = over_separator (name); if (!name) return 0; name = over_patch_level (name); if (!name || *name) return 0; has_patch_level = 1; } } } switch (type) { case arch_req_category: { if (tolerant) return 1; else return !has_branch && !has_version; break; } case arch_req_package: { if (tolerant) return 1; else return !has_version; break; } case arch_req_version: { if (tolerant) return has_version; else return has_version && !has_patch_level; break; } case arch_req_patch_level: { return has_patch_level; } default: { panic ("arch_valid_package_name: bad argument."); return 0; } } } /*(c arch_is_system_package_name) * int arch_is_system_package_name (const t_uchar * name); * * Return non-0 if `name' is a system package name. */ int arch_is_system_package_name (const t_uchar * name) { t_uchar * package = 0; int answer; package = arch_parse_package_name (arch_ret_package, 0, name); answer = !!str_chr_index (name, '%'); lim_free (0, package); return answer; } /*(c arch_parse_package_name) * t_uchar * arch_parse_package_name (enum arch_parse_package_name_type type, * const t_uchar * default_archive, * const t_uchar * name); * * Parse a package name. * * `type' may be any of the values: * * arch_ret_archive Return the archive component of the name, * or the value `default_archive' if the name * is not fully qualified. * * arch_ret_non_archive Return all of the name except its (optional) * archive component. * * arch_ret_category Return just the category name. * * arch_ret_package Return the category--branch if the name has a * branch label, just category otherwise. * * arch_ret_version Return just the version id of the name. * * arch_ret_package_version Return the category(--branch)?--version * of the name * * arch_ret_patch_level Return just the revision id of the name * * * Note that there is no `arch_ret_branch' (since not all names have branch labels) * and no `arch_ret_package_patch_level' (since `arch_ret_non_archive' will do that * job). * * `default_archive' is the archive name to use for `arch_ret_archive' if the * name is not fully qualified. Typically, the value of `default_archive' * is taken from a command-line -A argument or the user's .arch-params/=default-archive * file. * * `name' is the name to parse. * */ t_uchar * arch_parse_package_name (enum arch_parse_package_name_type type, const t_uchar * default_archive, const t_uchar * name) { if (!arch_valid_package_name (name, arch_maybe_archive, arch_req_package, 1)) { safe_printfmt(2, "Invalid revision name %s provided\n", name); return 0; } /*invariant (arch_valid_package_name (name, arch_maybe_archive, arch_req_package, 1));*/ switch (type) { default: panic ("bad argument to arch_parse_package_name"); return 0; /* notreached */ break; case arch_ret_archive: { t_uchar * slash; slash = str_chr_index (name, '/'); if (!slash) { t_uchar * answer = 0; answer = arch_my_default_archive (default_archive); if (!answer) { safe_printfmt (2, "arch: no default archive set\n"); exit (2); } return answer; } else { return str_save_n (0, name, slash - name); } break; } case arch_ret_non_archive: { t_uchar * slash; slash = str_chr_index (name, '/'); if (!slash) return str_save (0, name); else return str_save (0, slash + 1); break; } case arch_ret_category: { const t_uchar * cat_end; name = over_opt_archive_prefix (name); cat_end = over_basename (name); return str_save_n (0, name, cat_end - name); break; } case arch_ret_branch: { const t_uchar * branch_end; name = over_opt_archive_prefix (name); name = over_basename (name); /* over category */ name = over_separator (name); if (!name) return str_save (0, ""); branch_end = over_basename (name); if (!branch_end) return str_save (0, ""); return str_save_n (0, name, branch_end - name); break; } case arch_ret_package: { const t_uchar * branch_end; const t_uchar * t; name = over_opt_archive_prefix (name); branch_end = over_basename (name); t = over_separator (branch_end); if (!t) return str_save (0, name); /* only category provided */ branch_end = over_basename (t); /* over category */ if (!branch_end) return str_save_n (0, name, (t - 2) - name); /* category--version */ else return str_save_n (0, name, branch_end - name); break; } case arch_ret_version: { const t_uchar * version_start; const t_uchar * version_end; const t_uchar * t; name = over_opt_archive_prefix (name); version_end = over_basename (name); /* over category */ version_end = over_separator (version_end); invariant (!!version_end); version_start = version_end; t = over_basename (version_start); /* maybe over explicit branch */ if (t) { version_end = over_separator (t); invariant (!!version_end); version_start = version_end; } version_end = over_version (version_end); invariant (!!version_end); return str_save_n (0, version_start, version_end - version_start); break; } case arch_ret_patch_level: { const t_uchar * t; name = over_opt_archive_prefix (name); invariant (!!name); name = over_basename (name); invariant (!!name); name = over_separator (name); invariant (!!name); t = over_basename (name); /* maybe over explicit branch */ if (t) { name = over_separator (t); invariant (!!name); } name = over_version (name); invariant (!!name); invariant (name[0]); name = over_separator (name); invariant (!!name); invariant (name[0]); return str_save (0, name); break; } case arch_ret_package_version: { const t_uchar * version_start; const t_uchar * version_end; const t_uchar * t; name = over_opt_archive_prefix (name); version_end = over_basename (name); /* over category */ version_end = over_separator (version_end); invariant (!!version_end); version_start = version_end; t = over_basename (version_start); /* maybe over explicit branch */ if (t) { version_end = over_separator (t); invariant (!!version_end); version_start = version_end; } version_end = over_version (version_end); invariant (!!version_end); return str_save_n (0, name, version_end - name); break; } } } t_uchar * arch_fully_qualify (const t_uchar * default_archive, const t_uchar * name) { invariant (arch_valid_package_name (name, arch_maybe_archive, arch_req_package, 1)); if (default_archive) invariant (arch_valid_archive_name (default_archive)); if (str_chr_index (name, '/')) return str_save (0, name); else { if (!default_archive) default_archive = arch_my_default_archive (0); if (!default_archive) panic ("arch: no default archive set"); return str_alloc_cat_many (0, default_archive, "/", name, str_end); } } int arch_names_cmp (const t_uchar * a, const t_uchar * b) { const t_uchar * a_nxt; const t_uchar * b_nxt; int res; /* compare archive name */ a_nxt = over_opt_archive_prefix (a); b_nxt = over_opt_archive_prefix (b); res = str_cmp_n (a, a_nxt - a, b, b_nxt - b); if (res) return res; a = a_nxt; b = b_nxt; /* compare category name */ a_nxt = over_basename (a); b_nxt = over_basename (b); res = str_cmp_n (a, a_nxt - a, b, b_nxt - b); if (res) return res; if (!*a_nxt && !*b_nxt) return 0; if (!*a_nxt) return -1; if (!*b_nxt) return 1; a = over_separator (a_nxt); b = over_separator (b_nxt); /* compare branch names */ a_nxt = over_basename (a); b_nxt = over_basename (b); if (a_nxt && !b_nxt) { /* a has a branch, b does not */ return 1; } else if (!a_nxt && b_nxt) { /* b has a branch, a does not */ return -1; } else if (a_nxt && b_nxt) { /* both have branch names */ res = str_cmp_n (a, a_nxt - a, b, b_nxt - b); if (res) return res; if (!*a_nxt && !*b_nxt) return 0; if (!*a_nxt) return -1; if (!*b_nxt) return 1; a = over_separator (a_nxt); b = over_separator (b_nxt); } /* compare version names */ a_nxt = over_version (a); b_nxt = over_version (b); { int a_vsn_len; int b_vsn_len; a_vsn_len = a_nxt - a; b_vsn_len = b_nxt - b; /* precondition: * a and b point to a version number component * a_vsn_len and b_vsn_len tell how many chars remain in the version id * * postcondition: * RETURNS if version ids differ * a and b point past version id otherwise * * goal: * compare dot-separated components numerically * noting that a and b may have different numbers of components */ while (1) { int errn; const t_uchar * a_comp_end; const t_uchar * b_comp_end; t_ulong a_comp; t_ulong b_comp; a_comp_end = str_chr_index_n (a, a_vsn_len, '.'); if (!a_comp_end) a_comp_end = a + a_vsn_len; b_comp_end = str_chr_index_n (b, b_vsn_len, '.'); if (!b_comp_end) b_comp_end = b + b_vsn_len; invariant (!cvt_decimal_to_ulong (&errn, &a_comp, a, a_comp_end - a)); invariant (!cvt_decimal_to_ulong (&errn, &b_comp, b, b_comp_end - b)); if (a_comp < b_comp) return -1; else if (a_comp > b_comp) return 1; else { a_vsn_len -= (a_comp_end - a); b_vsn_len -= (b_comp_end - b); if (a_vsn_len && b_vsn_len) { /* both have additional components */ a = a_comp_end + 1; b = b_comp_end + 1; --a_vsn_len; --b_vsn_len; } else if (!a_vsn_len && b_vsn_len) { /* b has more components, a doesn't. */ return -1; } else if (a_vsn_len && !b_vsn_len) { /* a has more components, b doesn't. */ return 1; } else { /* neither has more components */ a = a_comp_end; b = b_comp_end; break; } } } a_nxt = over_separator (a); b_nxt = over_separator (b); if (!a_nxt && !b_nxt) return 0; else if (a_nxt && !b_nxt) return 1; else if (!a_nxt && b_nxt) return -1; else { a = a_nxt; b = b_nxt; } } /* compare patch level phase */ { t_uchar * a_dash; t_uchar * b_dash; a_dash = str_chr_index (a, '-'); b_dash = str_chr_index (b, '-'); invariant (a && b); res = str_cmp_n (a, a_dash - a, b, b_dash - b); if (res) return res; a = a_dash + 1; b = b_dash + 1; } /* compare patch level numbers */ { int errn; t_ulong a_lvl; t_ulong b_lvl; invariant (!cvt_decimal_to_ulong (&errn, &a_lvl, a, str_length (a))); invariant (!cvt_decimal_to_ulong (&errn, &b_lvl, b, str_length (b))); if (a_lvl < b_lvl) return -1; else if (a_lvl > b_lvl) return 1; else return 0; } } void arch_sort_table_by_name_field (int reverse_p, rel_table table, int field) { rel_sort_table_by_field_fn (reverse_p, table, field, arch_names_cmp); } void arch_sort_table_by_patch_level_field (int reverse_p, rel_table table, int field) { rel_sort_table_by_field_fn (reverse_p, table, field, arch_patch_lvl_cmp); } int arch_patch_lvl_cmp (const t_uchar * a, const t_uchar * b) { t_uchar * a_dash; t_uchar * b_dash; int res; t_ulong a_lvl; t_ulong b_lvl; int errn; a_dash = str_chr_index (a, '-'); b_dash = str_chr_index (b, '-'); invariant (a_dash && b_dash); res = str_cmp_n (a, a_dash - a, b, b_dash - b); if (res) return res; invariant (!cvt_decimal_to_ulong (&errn, &a_lvl, a_dash + 1, str_length (a_dash + 1))); invariant (!cvt_decimal_to_ulong (&errn, &b_lvl, b_dash + 1, str_length (b_dash + 1))); if (a_lvl < b_lvl) return -1; else if (a_lvl > b_lvl) return 1; else return 0; } rel_table arch_pick_archives_by_field (rel_table in, int field) { rel_table answer = rel_table_nil; int x; for (x = 0; x < rel_n_records (in); ++x) { if (arch_valid_archive_name (rel_peek_str (in, x, field))) rel_add_records (&answer, rel_copy_record (rel_peek_record (in, x)), rel_record_null); } return answer; } rel_table arch_pick_categories_by_field (rel_table in, int field) { rel_table answer = rel_table_nil; int x; for (x = 0; x < rel_n_records (in); ++x) { if (arch_valid_package_name (rel_peek_str (in, x, field), arch_no_archive, arch_req_category, 0)) rel_add_records (&answer, rel_copy_record (rel_peek_record (in, x)), rel_record_null); } return answer; } rel_table arch_pick_branches_by_field (rel_table in, int field) { rel_table answer = rel_table_nil; int x; for (x = 0; x < rel_n_records (in); ++x) { if (arch_valid_package_name (rel_peek_str (in, x, field), arch_no_archive, arch_req_package, 0)) rel_add_records (&answer, rel_copy_record (rel_peek_record (in, x)), rel_record_null); } return answer; } rel_table arch_pick_versions_by_field (rel_table in, int field) { rel_table answer = rel_table_nil; int x; for (x = 0; x < rel_n_records (in); ++x) { if (arch_valid_package_name (rel_peek_str (in, x, field), arch_no_archive, arch_req_version, 0)) rel_add_records (&answer, rel_copy_record (rel_peek_record (in, x)), rel_record_null); } return answer; } rel_table arch_pick_revisions_by_field (rel_table in, int field) { rel_table answer = rel_table_nil; int x; for (x = 0; x < rel_n_records (in); ++x) { if (arch_valid_package_name (rel_peek_str (in, x, field), arch_no_archive, arch_req_patch_level, 0)) rel_add_records (&answer, rel_copy_record (rel_peek_record (in, x)), rel_record_null); } return answer; } rel_table arch_pick_patch_levels_by_field (rel_table in, int field) { rel_table answer = rel_table_nil; int x; for (x = 0; x < rel_n_records (in); ++x) { if (arch_valid_patch_level_name (rel_peek_str (in, x, field))) rel_add_records (&answer, rel_copy_record (rel_peek_record (in, x)), rel_record_null); } return answer; } enum arch_patch_level_type arch_analyze_patch_level (t_ulong * n, const t_uchar * patch_level) { int ign; enum arch_patch_level_type type; const t_uchar * n_str; if (!str_cmp ("base-0", patch_level)) { *n = 0; return arch_is_base0_level; } else if (!str_cmp_prefix ("patch-", patch_level)) { type = arch_is_patch_level; n_str = patch_level + sizeof ("patch-") - 1; } else if (!str_cmp_prefix ("version-", patch_level)) { type = arch_is_version_level; n_str = patch_level + sizeof ("version-") - 1; } else if (!str_cmp_prefix ("versionfix-", patch_level)) { type = arch_is_versionfix_level; n_str = patch_level + sizeof ("versionfix-") - 1; } else panic ("illegal patch_level in arch_analyze_patch_level"); if (cvt_decimal_to_ulong (&ign, n, n_str, str_length (n_str))) panic ("illegal patch_level in arch_analyze_patch_level"); return type; } t_uchar * arch_form_patch_level (enum arch_patch_level_type type, t_ulong n) { t_uchar n_buf[64]; cvt_ulong_to_decimal (n_buf, n); switch (type) { case arch_is_base0_level: { return str_save (0, "base-0"); } case arch_is_patch_level: { return str_alloc_cat (0, "patch-", n_buf); } case arch_is_version_level: { return str_alloc_cat (0, "version-", n_buf); } case arch_is_versionfix_level: { return str_alloc_cat (0, "versionfix-", n_buf); } default: { panic ("not reached in arch_form_patch_level"); return 0; } } } static const t_uchar * over_opt_archive_prefix (const t_uchar * name) { const t_uchar * slash; const t_uchar * archive_name_end; slash = (const t_uchar *)str_chr_index (name, '/'); if (!slash) return name; archive_name_end = over_archive_name (name); if (archive_name_end != slash) return 0; return slash + 1; } #define char_is_alnum_or_dash(c) (char_is_alnum (c) || (c == '-')) static const t_uchar * over_archive_name (const t_uchar * in) { if (!char_is_alnum_or_dash (*in)) return 0; while (1) { while (char_is_alnum_or_dash (*in)) ++in; if (*in != '.' && *in != '_') break; if (!char_is_alnum_or_dash (in[1])) return 0; ++in; } if (*in != '@') return 0; ++in; while (char_is_alnum_or_dash(*in) || (*in == '.')) { if ((*in == '-') && (in[1] == '-')) break; ++in; } if (!*in || (*in == '/')) return in; if ((in[0] != '-') || (in[1] != '-')) return 0; in += 2; while (char_is_alnum_or_dash(*in) || (*in == '.')) ++in; if (*in && (*in != '/')) return 0; return in; } static const t_uchar * over_basename (const t_uchar * in) { if (!char_is_alpha (*in)) return 0; ++in; while (1) { if (!*in) return in; else if ((char_is_alnum (*in)) || (*in == '%') || (*in == ',')) ++in; else if (*in == '-') { if (in[1] == '-') return in; else ++in; } else break; } return 0; } static const t_uchar * over_separator (const t_uchar * in) { if ((*in == '-') && (in[1] == '-')) return in + 2; else return 0; } static const t_uchar * over_version (const t_uchar * in) { while (1) { if (!*in) break; else if (!char_is_digit (*in)) break; else { while (char_is_digit (*in)) ++in; if (!*in) return in; else if (*in == '.') ++in; else if ((*in == '-') && (in[1] == '-')) return in; else break; } } return 0; } static const t_uchar * over_patch_level (const t_uchar * in) { if (!str_cmp (in, "base-0")) return in + sizeof ("base-0") - 1; else { int prefix_len; if (!str_cmp_prefix ("patch-", in)) prefix_len = sizeof ("patch-") - 1; else if (!str_cmp_prefix ("version-", in)) prefix_len = sizeof ("version-") - 1; else if (!str_cmp_prefix ("versionfix-", in)) prefix_len = sizeof ("versionfix-") - 1; else return 0; in += prefix_len; if (!char_is_digit (*in)) return 0; while (char_is_digit (*in)) ++in; if (*in) return 0; return in; } } /* tag: Tom Lord Mon May 12 10:17:47 2003 (namespace.c) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-abrowse.h0000644000175000017500000000120110457622000017252 0ustar useruser/* cmd-abrowse.h: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__CMD_ABROWSE_H #define INCLUDE__LIBARCH__CMD_ABROWSE_H #include "hackerlab/machine/types.h" extern t_uchar arch_cmd_abrowse_help[]; /* automatically generated __STDC__ prototypes */ extern int arch_cmd_abrowse (t_uchar * program_name, int argc, char * argv[]); #endif /* INCLUDE__LIBARCH__CMD_ABROWSE_H */ /* tag: Tom Lord Sat Jan 5 15:26:10 2002 (cmd-abrowse.h) */ tla-1.3.5+dfsg/src/tla/libarch/libraries.c0000644000175000017500000005275710457622000017044 0ustar useruser/* libraries.c: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/bugs/panic.h" #include "hackerlab/char/str.h" #include "hackerlab/fs/file-names.h" #include "hackerlab/vu/safe.h" #include "tla/libfsutils/dir-listing.h" #include "tla/libfsutils/same.h" #include "tla/libarch/my.h" #include "tla/libarch/namespace.h" #include "tla/libarch/patch-logs.h" #include "tla/libarch/changeset-utils.h" #include "tla/libarch/libraries.h" #include "tla/libarch/inode-sig.h" /* __STDC__ prototypes for static functions */ rel_table arch_library_archive_dirs (rel_table opt_lib_path, const t_uchar * archive, int for_add) { rel_table lib_path = rel_table_nil; rel_table answer = rel_table_nil; int x; invariant (arch_valid_archive_name (archive)); if (rel_n_records (opt_lib_path)) { lib_path = rel_copy_table (opt_lib_path); } else { lib_path = arch_my_library_path (for_add ? arch_library_path_add_order : arch_library_path_search_order); if (!rel_n_records (lib_path)) return rel_table_nil; } for (x = 0; x < rel_n_records (lib_path); ++x) { const t_uchar * lib_dir; t_uchar * maybe_archive_dir = 0; lib_dir = rel_peek_str (lib_path, x, 0); maybe_archive_dir = file_name_in_vicinity (0, lib_dir, archive); if (!safe_access (maybe_archive_dir, F_OK)) { rel_add_records (&answer, rel_singleton_record_taking (rel_make_field_str (maybe_archive_dir)), rel_record_null); } lim_free (0, maybe_archive_dir); } if (for_add && !rel_n_records (answer)) { const t_uchar * priority_lib_dir; t_uchar * archive_dir = 0; priority_lib_dir = rel_peek_str (lib_path, 0, 0); archive_dir = file_name_in_vicinity (0, priority_lib_dir, archive); rel_add_records (&answer, rel_singleton_record_taking (rel_make_field_str (archive_dir)), rel_record_null); lim_free (0, archive_dir); } rel_free_table (lib_path); return answer; } rel_table arch_library_category_dirs (rel_table opt_lib_path, const t_uchar * archive, const t_uchar * category, int for_add) { rel_table answer = rel_table_nil; rel_table archive_dirs = rel_table_nil; int x; invariant (arch_valid_package_name (category, arch_no_archive, arch_req_category, 0)); archive_dirs = arch_library_archive_dirs (opt_lib_path, archive, for_add); if (!rel_n_records (archive_dirs)) return rel_table_nil; for (x = 0; x < rel_n_records (archive_dirs); ++x) { const t_uchar * archive_dir; t_uchar * maybe_category_dir = 0; archive_dir = rel_peek_str (archive_dirs, x, 0); maybe_category_dir = file_name_in_vicinity (0, archive_dir, category); if (!safe_access (maybe_category_dir, F_OK)) { rel_add_records (&answer, rel_singleton_record_taking (rel_make_field_str (maybe_category_dir)), rel_record_null); } lim_free (0, maybe_category_dir); } if (for_add && !rel_n_records (answer)) { const t_uchar * priority_archive_dir; t_uchar * category_dir = 0; priority_archive_dir = rel_peek_str (archive_dirs, 0, 0); category_dir = file_name_in_vicinity (0, priority_archive_dir, category); rel_add_records (&answer, rel_singleton_record_taking (rel_make_field_str (category_dir)), rel_record_null); lim_free (0, category_dir); } rel_free_table (archive_dirs); return answer; } rel_table arch_library_branch_dirs (rel_table opt_lib_path, const t_uchar * archive, const t_uchar * branch, int for_add) { rel_table answer = rel_table_nil; t_uchar * category = 0; rel_table category_dirs = rel_table_nil; int x; invariant (arch_valid_package_name (branch, arch_no_archive, arch_req_package, 0)); category = arch_parse_package_name (arch_ret_category, 0, branch); category_dirs = arch_library_category_dirs (opt_lib_path, archive, category, for_add); if (!rel_n_records (category_dirs)) return rel_table_nil; for (x = 0; x < rel_n_records (category_dirs); ++x) { const t_uchar * category_dir; t_uchar * maybe_branch_dir = 0; category_dir = rel_peek_str (category_dirs, x, 0); maybe_branch_dir = file_name_in_vicinity (0, category_dir, branch); if (!safe_access (maybe_branch_dir, F_OK)) { rel_add_records (&answer, rel_singleton_record_taking (rel_make_field_str (maybe_branch_dir)), rel_record_null); } lim_free (0, maybe_branch_dir); } if (for_add && !rel_n_records (answer)) { const t_uchar * priority_category_dir; t_uchar * branch_dir = 0; priority_category_dir = rel_peek_str (category_dirs, 0, 0); branch_dir = file_name_in_vicinity (0, priority_category_dir, branch); rel_add_records (&answer, rel_singleton_record_taking (rel_make_field_str (branch_dir)), rel_record_null); lim_free (0, branch_dir); } rel_free_table (category_dirs); lim_free (0, category); return answer; } rel_table arch_library_version_dirs (rel_table opt_lib_path, const t_uchar * archive, const t_uchar * version, int for_add) { rel_table answer = rel_table_nil; t_uchar * branch = 0; rel_table branch_dirs = rel_table_nil; int x; invariant (arch_valid_package_name (version, arch_no_archive, arch_req_version, 0)); branch = arch_parse_package_name (arch_ret_package, 0, version); branch_dirs = arch_library_branch_dirs (opt_lib_path, archive, branch, for_add); if (!rel_n_records (branch_dirs)) return rel_table_nil; for (x = 0; x < rel_n_records (branch_dirs); ++x) { const t_uchar * branch_dir; t_uchar * maybe_version_dir = 0; branch_dir = rel_peek_str (branch_dirs, x, 0); maybe_version_dir = file_name_in_vicinity (0, branch_dir, version); if (!safe_access (maybe_version_dir, F_OK)) { rel_add_records (&answer, rel_singleton_record_taking (rel_make_field_str (maybe_version_dir)), rel_record_null); } lim_free (0, maybe_version_dir); } if (for_add && !rel_n_records (answer)) { const t_uchar * priority_branch_dir; t_uchar * version_dir = 0; priority_branch_dir = rel_peek_str (branch_dirs, 0, 0); version_dir = file_name_in_vicinity (0, priority_branch_dir, version); rel_add_records (&answer, rel_singleton_record_taking (rel_make_field_str (version_dir)), rel_record_null); lim_free (0, version_dir); } rel_free_table (branch_dirs); lim_free (0, branch); return answer; } rel_table arch_library_revision_dirs (rel_table opt_lib_path, const t_uchar * archive, const t_uchar * revision, int for_add) { rel_table answer = rel_table_nil; t_uchar * version = 0; rel_table version_dirs = rel_table_nil; int x; invariant (arch_valid_package_name (revision, arch_no_archive, arch_req_patch_level, 0)); version = arch_parse_package_name (arch_ret_package_version, 0, revision); version_dirs = arch_library_version_dirs (opt_lib_path, archive, version, for_add); if (!rel_n_records (version_dirs)) return rel_table_nil; for (x = 0; x < rel_n_records (version_dirs); ++x) { const t_uchar * version_dir; t_uchar * maybe_revision_dir = 0; version_dir = rel_peek_str (version_dirs, x, 0); maybe_revision_dir = file_name_in_vicinity (0, version_dir, revision); if (!safe_access (maybe_revision_dir, F_OK)) { rel_add_records (&answer, rel_singleton_record_taking (rel_make_field_str (maybe_revision_dir)), rel_record_null); } lim_free (0, maybe_revision_dir); } if (for_add && !rel_n_records (answer)) { const t_uchar * priority_version_dir; t_uchar * revision_dir = 0; priority_version_dir = rel_peek_str (version_dirs, 0, 0); revision_dir = file_name_in_vicinity (0, priority_version_dir, revision); rel_add_records (&answer, rel_singleton_record_taking (rel_make_field_str (revision_dir)), rel_record_null); lim_free (0, revision_dir); } rel_free_table (version_dirs); lim_free (0, version); return answer; } t_uchar * arch_library_find (rel_table opt_lib_path, const t_uchar * archive, const t_uchar * revision, int check_inode_sigs) { rel_table revision_dirs = rel_table_nil; t_uchar * answer = 0; int x; revision_dirs = arch_library_revision_dirs (opt_lib_path, archive, revision, 0); for (x = 0; x < rel_n_records (revision_dirs); ++x) { if (!safe_access (rel_peek_str (revision_dirs, x, 0), F_OK)) { if (check_inode_sigs) { if (!arch_valid_inode_sig (rel_peek_str (revision_dirs, 0, 0), archive, revision)) { safe_printfmt (2, "corrupt library (failed inode signature validation)\n archive: %s\n revision: %s\nYou should remove this revision from your library.\n", archive, revision); exit (2); } } answer = str_save (0, rel_peek_str (revision_dirs, 0, 0)); break; } } rel_free_table (revision_dirs); return answer; } t_uchar * arch_library_find_file (const t_uchar * archive, const t_uchar * revision, const t_uchar * loc) { t_uchar * revision_dir = 0; t_uchar * file_path = 0; revision_dir = arch_library_find (rel_table_nil, archive, revision, 1); if (revision_dir) { file_path = file_name_in_vicinity (0, revision_dir, loc); if (safe_access (file_path, F_OK)) { lim_free (0, file_path); file_path = 0; } } lim_free (0, revision_dir); return file_path; } t_uchar * arch_library_find_file_by_id (const t_uchar * archive, const t_uchar * revision, const t_uchar * id) { t_uchar * revision_dir = 0; t_uchar * file_path = 0; revision_dir = arch_library_find (rel_table_nil, archive, revision, 1); if (revision_dir) { t_uchar * index_file = 0; rel_table index = rel_table_nil; int x; index_file = arch_library_index_file (archive, revision); index = arch_read_changeset_index (index_file); for (x = 0; x < rel_n_records (index); ++x) { if (!str_cmp (id, rel_peek_str (index, x, 1))) { file_path = file_name_in_vicinity (0, revision_dir, rel_peek_str (index, x, 0)); break; } } lim_free (0, index_file); rel_free_table (index); } lim_free (0, revision_dir); return file_path; } rel_table arch_library_archives (void) { rel_table lib_path = rel_table_nil; rel_table answer = rel_table_nil; int x; lib_path = arch_my_library_path (arch_library_path_search_order); for (x = 0; x < rel_n_records (lib_path); ++x) { rel_table tmp = rel_table_nil; rel_table files = rel_table_nil; files = directory_files (rel_peek_str (lib_path, x, 0)); tmp = arch_pick_archives_by_field (files, 0); rel_append_x (&answer, tmp); rel_free_table (tmp); rel_free_table (files); } rel_sort_table_by_field (0, answer, 0); rel_uniq_by_field (&answer, 0); rel_free_table (lib_path); return answer; } rel_table arch_library_categories (const t_uchar * archive) { rel_table answer = rel_table_nil; rel_table archive_dirs = rel_table_nil; int x; archive_dirs = arch_library_archive_dirs (rel_table_nil, archive, 0); for (x = 0; x < rel_n_records (archive_dirs); ++x) { rel_table files = rel_table_nil; rel_table tmp = rel_table_nil; files = directory_files (rel_peek_str (archive_dirs, x, 0)); tmp = arch_pick_categories_by_field (files, 0); rel_append_x (&answer, tmp); rel_free_table (files); rel_free_table (tmp); } rel_sort_table_by_field (0, answer, 0); rel_uniq_by_field (&answer, 0); rel_free_table (archive_dirs); return answer; } rel_table arch_library_branches (const t_uchar * archive, const t_uchar * category) { rel_table answer = rel_table_nil; rel_table category_dirs = rel_table_nil; int x; category_dirs = arch_library_category_dirs (rel_table_nil, archive, category, 0); for (x = 0; x < rel_n_records (category_dirs); ++x) { rel_table files = rel_table_nil; rel_table tmp = rel_table_nil; files = directory_files (rel_peek_str (category_dirs, x, 0)); tmp = arch_pick_branches_by_field (files, 0); rel_append_x (&answer, tmp); rel_free_table (files); rel_free_table (tmp); } rel_sort_table_by_field (0, answer, 0); rel_uniq_by_field (&answer, 0); rel_free_table (category_dirs); return answer; } rel_table arch_library_versions (const t_uchar * archive, const t_uchar * branch) { rel_table answer = rel_table_nil; rel_table branch_dirs = rel_table_nil; int x; branch_dirs = arch_library_branch_dirs (rel_table_nil, archive, branch, 0); for (x = 0; x < rel_n_records (branch_dirs); ++x) { rel_table files = rel_table_nil; rel_table tmp = rel_table_nil; files = directory_files (rel_peek_str (branch_dirs, x, 0)); tmp = arch_pick_versions_by_field (files, 0); rel_append_x (&answer, tmp); rel_free_table (files); rel_free_table (tmp); } rel_sort_table_by_field (0, answer, 0); rel_uniq_by_field (&answer, 0); rel_free_table (branch_dirs); return answer; } rel_table arch_library_revisions (const t_uchar * archive, const t_uchar * version, int full) { rel_table answer = rel_table_nil; rel_table version_dirs = rel_table_nil; int x; version_dirs = arch_library_version_dirs (rel_table_nil, archive, version, 0); for (x = 0; x < rel_n_records (version_dirs); ++x) { rel_table files = rel_table_nil; rel_table tmp = rel_table_nil; int y; files = directory_files (rel_peek_str (version_dirs, x, 0)); tmp = arch_pick_revisions_by_field (files, 0); for (y = 0; y < rel_n_records (tmp); ++y) { t_uchar * t = 0; if (full) { t = arch_fully_qualify (archive, rel_peek_str (tmp, y, 0)); rel_set_taking (tmp, y, 0, rel_make_field_str (t)); } else { t = arch_parse_package_name (arch_ret_patch_level, 0, rel_peek_str (tmp, y, 0)); rel_set_taking (tmp, y, 0, rel_make_field_str (t)); } lim_free (0, t); } rel_append_x (&answer, tmp); rel_free_table (files); rel_free_table (tmp); } if (full) { arch_sort_table_by_name_field (0, answer, 0); } else { arch_sort_table_by_patch_level_field (0, answer, 0); } rel_uniq_by_field (&answer, 0); rel_free_table (version_dirs); return answer; } t_uchar * arch_library_log (const t_uchar * archive, const t_uchar * revision) { t_uchar * rev_dir = 0; t_uchar * log_path = 0; int in_fd; t_uchar * answer = 0; size_t len; rev_dir = arch_library_find (rel_table_nil, archive, revision, 1); log_path = arch_log_file (rev_dir, archive, revision); in_fd = safe_open (log_path, O_RDONLY, 0); safe_file_to_string (&answer, &len, in_fd); answer = lim_realloc (0, answer, len + 1); answer[len] = 0; safe_close (in_fd); lim_free (0, rev_dir); lim_free (0, log_path); return answer; } t_uchar * arch_library_index_file (const t_uchar * archive, const t_uchar * revision) { t_uchar * revision_dir = 0; t_uchar * answer = 0; revision_dir = arch_library_find (rel_table_nil, archive, revision, 1); invariant (!!revision_dir); answer = file_name_in_vicinity (0, revision_dir, ",,index"); lim_free (0, revision_dir); return answer; } rel_table arch_library_index (const t_uchar * archive, const t_uchar * revision) { t_uchar * index_path = 0; rel_table answer = rel_table_nil; index_path = arch_library_index_file (archive, revision); answer = arch_read_changeset_index (index_path); lim_free (0, index_path); return answer; } int arch_library_has_archive (const t_uchar * lib, const t_uchar * archive) { t_uchar * path = file_name_in_vicinity (0, lib, archive); int answer; answer = !safe_access (path, F_OK); lim_free (0, path); return answer; } int arch_library_has_category (const t_uchar * lib, const t_uchar * archive, const t_uchar * category) { t_uchar * archive_path = file_name_in_vicinity (0, lib, archive); t_uchar * category_path = file_name_in_vicinity (0, archive_path, category); int answer; answer = !safe_access (category_path, F_OK); lim_free (0, archive_path); lim_free (0, category_path); return answer; } int arch_library_has_branch (const t_uchar * lib, const t_uchar * archive, const t_uchar * branch) { t_uchar * category = arch_parse_package_name (arch_ret_category, 0, branch); t_uchar * archive_path = file_name_in_vicinity (0, lib, archive); t_uchar * category_path = file_name_in_vicinity (0, archive_path, category); t_uchar * branch_path = file_name_in_vicinity (0, category_path, branch); int answer; answer = !safe_access (branch_path, F_OK); lim_free (0, category); lim_free (0, archive_path); lim_free (0, category_path); lim_free (0, branch_path); return answer; } int arch_library_has_version (const t_uchar * lib, const t_uchar * archive, const t_uchar * version) { t_uchar * category = arch_parse_package_name (arch_ret_category, 0, version); t_uchar * branch = arch_parse_package_name (arch_ret_package, 0, version); t_uchar * archive_path = file_name_in_vicinity (0, lib, archive); t_uchar * category_path = file_name_in_vicinity (0, archive_path, category); t_uchar * branch_path = file_name_in_vicinity (0, category_path, branch); t_uchar * version_path = file_name_in_vicinity (0, branch_path, version); int answer; answer = !safe_access (version_path, F_OK); lim_free (0, category); lim_free (0, branch); lim_free (0, archive_path); lim_free (0, category_path); lim_free (0, branch_path); lim_free (0, version_path); return answer; } t_uchar * arch_library_revision_dir_in_lib (const t_uchar * lib, const t_uchar * archive, const t_uchar * revision) { t_uchar * category = arch_parse_package_name (arch_ret_category, 0, revision); t_uchar * branch = arch_parse_package_name (arch_ret_package, 0, revision); t_uchar * version = arch_parse_package_name (arch_ret_package_version, 0, revision); t_uchar * archive_path = file_name_in_vicinity (0, lib, archive); t_uchar * category_path = file_name_in_vicinity (0, archive_path, category); t_uchar * branch_path = file_name_in_vicinity (0, category_path, branch); t_uchar * version_path = file_name_in_vicinity (0, branch_path, version); t_uchar * revision_path = file_name_in_vicinity (0, version_path, revision); lim_free (0, category); lim_free (0, branch); lim_free (0, version); lim_free (0, archive_path); lim_free (0, category_path); lim_free (0, branch_path); lim_free (0, version_path); return revision_path; } int arch_library_is_greedy (const t_uchar * lib) { t_uchar * greed_path = file_name_in_vicinity (0, lib, "=greedy"); int answer = 0; answer = !safe_access (greed_path, F_OK); lim_free (0, greed_path); return answer; } void arch_set_library_greediness (const t_uchar * lib, int setting) { t_uchar * greed_path = file_name_in_vicinity (0, lib, "=greedy"); if (setting) { int fd; fd = safe_open (greed_path, O_RDONLY | O_CREAT, 0666); safe_close (fd); } else { if (!safe_access (greed_path, F_OK)) safe_unlink (greed_path); } lim_free (0, greed_path); } int arch_library_is_sparse (const t_uchar * lib) { t_uchar * sparse_path = file_name_in_vicinity (0, lib, "=sparse"); int answer = 0; answer = !safe_access (sparse_path, F_OK); lim_free (0, sparse_path); return answer; } void arch_set_library_sparseness (const t_uchar * lib, int setting) { t_uchar * sparse_path = file_name_in_vicinity (0, lib, "=sparse"); if (setting) { int fd; fd = safe_open (sparse_path, O_RDONLY | O_CREAT, 0666); safe_close (fd); } else { if (!safe_access (sparse_path, F_OK)) safe_unlink (sparse_path); } lim_free (0, sparse_path); } void arch_verify_is_library (const t_uchar * lib) { rel_table lib_path = rel_table_nil; int x; lib_path = arch_my_library_path (arch_library_path_search_order); for (x = 0; x < rel_n_records (lib_path); ++x) { if (names_same_inode (lib, rel_peek_str (lib_path, x, 0))) return; } safe_printfmt (2, "tla: indicated library is not on library path\n dir %s\n", lib); exit (2); } /* tag: Tom Lord Wed May 21 13:56:29 2003 (libraries.c) */ tla-1.3.5+dfsg/src/tla/libarch/archive-snapshot.c0000644000175000017500000001546410457622000020340 0ustar useruser/* archive-snapshot.c: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/os/errno.h" #include "hackerlab/os/errno-to-string.h" #include "hackerlab/char/str.h" #include "hackerlab/fs/file-names.h" #include "hackerlab/vu/safe.h" #include "tla/libfsutils/ensure-dir.h" #include "tla/libfsutils/tmp-files.h" #include "tla/libawk/relational.h" #include "tla/libarch/archive.h" #include "tla/libarch/namespace.h" #include "tla/libarch/archive-snapshot.h" /* __STDC__ prototypes for static functions */ static void put_file_contents (t_uchar * path, t_uchar * contents); static void ensure_basename (t_uchar * dir, t_uchar * basename); void archive_snapshot (struct arch_archive * arch, t_uchar * limit, t_uchar * dir) { t_uchar * only_category = 0; t_uchar * only_branch = 0; t_uchar * only_version = 0; t_uchar * only_revision = 0; t_uchar * archive_basename = 0; t_uchar * archive_subdir = 0; rel_table categories = rel_table_nil; int c; if (limit) { only_category = arch_parse_package_name (arch_ret_category, 0, limit); if (arch_valid_package_name (limit, arch_no_archive, arch_req_package, 1)) { only_branch = arch_parse_package_name (arch_ret_package, 0, limit); if (!str_cmp (only_branch, only_category)) { lim_free (0, only_branch); only_branch = 0; } else if (arch_valid_package_name (limit, arch_no_archive, arch_req_version, 1)) { only_version = arch_parse_package_name (arch_ret_package_version, 0, limit); if (arch_valid_package_name (limit, arch_no_archive, arch_req_patch_level, 1)) { only_revision = arch_parse_package_name (arch_ret_non_archive, 0, limit); } } } } archive_basename = str_alloc_cat (0, arch->name, ".added"); ensure_basename (dir, archive_basename); archive_subdir = file_name_in_vicinity (0, dir, arch->name); ensure_directory_exists (archive_subdir); categories = arch_archive_categories (arch); for (c = 0; c < rel_n_records (categories); ++c) { t_uchar * category_basename = 0; t_uchar * category_subdir = 0; rel_table branches = rel_table_nil; int b; if (only_category && str_cmp (only_category, rel_peek_str (categories, c, 0))) continue; category_basename = str_alloc_cat (0, rel_peek_str (categories, c, 0), ".added"); category_subdir = file_name_in_vicinity (0, archive_subdir, rel_peek_str (categories, c, 0)); branches = arch_archive_branches (arch, rel_peek_str (categories, c, 0)); ensure_basename (archive_subdir, category_basename); ensure_directory_exists (category_subdir); for (b = 0; b < rel_n_records (branches); ++b) { t_uchar * branch_basename = 0; t_uchar * branch_subdir = 0; rel_table versions = rel_table_nil; int v; if (only_branch && str_cmp (only_branch, rel_peek_str (branches, b, 0))) continue; branch_basename = str_alloc_cat (0, rel_peek_str (branches, b, 0), ".added"); branch_subdir = file_name_in_vicinity (0, category_subdir, rel_peek_str (branches, b, 0)); versions = arch_archive_versions (arch, rel_peek_str (branches, b, 0)); ensure_basename (category_subdir, branch_basename); ensure_directory_exists (branch_subdir); for (v = 0; v < rel_n_records (versions); ++v) { t_uchar * version_basename = 0; t_uchar * version_subdir = 0; rel_table revisions = rel_table_nil; int r; if (only_version && str_cmp (only_version, rel_peek_str (versions, v, 0))) continue; version_basename = str_alloc_cat (0, rel_peek_str (versions, v, 0), ".added"); version_subdir = file_name_in_vicinity (0, branch_subdir, rel_peek_str (versions, v, 0)); revisions = arch_archive_revisions (arch, rel_peek_str (versions, v, 0), 2); ensure_basename (branch_subdir, version_basename); ensure_directory_exists (version_subdir); for (r = 0; r < rel_n_records (revisions); ++r) { t_uchar * revision_basename = 0; t_uchar * revision_file = 0; t_uchar * log = 0; if (only_revision && str_cmp (only_revision, rel_peek_str (revisions, r, 0))) continue; revision_basename = str_alloc_cat (0, rel_peek_str (revisions, r, 0), ".added"); revision_file = file_name_in_vicinity (0, version_subdir, revision_basename); if (safe_access (revision_file, F_OK)) { t_uchar * tmp_file = 0; tmp_file = tmp_file_name (version_subdir, ",,new-log"); log = arch_archive_log (arch, rel_peek_str (revisions, r, 0)); put_file_contents (tmp_file, log); safe_rename (tmp_file, revision_file); lim_free (0, tmp_file); } lim_free (0, revision_basename); lim_free (0, revision_file); lim_free (0, log); } lim_free (0, version_basename); lim_free (0, version_subdir); rel_free_table (revisions); } lim_free (0, branch_basename); lim_free (0, branch_subdir); rel_free_table (versions); } lim_free (0, category_basename); lim_free (0, category_subdir); rel_free_table (branches); } lim_free (0, only_category); lim_free (0, only_branch); lim_free (0, only_version); lim_free (0, only_revision); lim_free (0, archive_basename); lim_free (0, archive_subdir); rel_free_table (categories); } static void put_file_contents (t_uchar * path, t_uchar * contents) { int out_fd; out_fd = safe_open (path, O_WRONLY | O_CREAT | O_EXCL, 0444); safe_printfmt (out_fd, "%s\n", contents); safe_close (out_fd); } static void ensure_basename (t_uchar * dir, t_uchar * basename) { int errn; t_uchar * path = 0; int in_fd; path = file_name_in_vicinity (0, dir, basename); in_fd = vu_open (&errn, path, O_WRONLY | O_CREAT | O_EXCL, 0444); if (in_fd >= 0) safe_close (in_fd); else if (errn != EEXIST) { safe_printfmt (2, "archive-snapshot: error creating file %s/%s (%s)\n", dir, basename, errno_to_string (errn)); exit (2); } lim_free (0, path); } /* tag: Tom Lord Mon Jun 9 01:03:59 2003 (archive-snapshot.c) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-tree-id.c0000644000175000017500000000723410457622000017150 0ustar useruser/* cmd-tree-id.c * * vim:smartindent ts=8:sts=2:sta:et:ai:shiftwidth=2 **************************************************************** * Copyright (C) 2004 Canonical Limited * Authors: Robert Collins * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "config-options.h" #include "hackerlab/cmd/main.h" #include "tla/libarch/namespace.h" #include "tla/libarch/project-tree.h" #include "tla/libarch/cmd-tree-id.h" /* gettext support not uet incorporated into tla, reserve the gettext notation for later */ #define _(x) (x) #define N_(x) (x) static t_uchar * usage = N_("[options] [dir]"); static t_uchar * version_string = (cfg__std__package " from regexps.com\n" "\n" "Copyright 2003 Tom Lord\n" "\n" "This is free software; see the source for copying conditions.\n" "There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\n" "PARTICULAR PURPOSE.\n" "\n" "Report bugs to " cfg__tla_bug_mail ".\n" "\n" cfg__std__release_id_string "\n"); #define OPTS(OP) \ OP (opt_help_msg, "h", "help", 0, \ N_("Display a help message and exit.")) \ OP (opt_long_help, "H", 0, 0, \ N_("Display a verbose help message and exit.")) \ OP (opt_version, "V", "version", 0, \ N_("Display a release identifier string\n" \ "and exit.")) t_uchar arch_cmd_tree_id_help[] = N_("Print the tree identifier for a project tree\nPrint the patchset identifier that represents the\ncurrent tree-> I.e. foo@example.com/demo--1.0--patch-4.\nDefaults to the tree the current directory is in.\n"); enum options { OPTS (OPT_ENUM) }; static struct opt_desc opts[] = { OPTS (OPT_DESC) {-1, 0, 0, 0, 0} }; int arch_cmd_tree_id (t_uchar * program_name, int argc, char * argv[]) { int o; struct opt_parsed * option; char * dir; t_uchar * tree_root = 0; t_uchar * revision_spec = 0; dir = "."; safe_buffer_fd (1, 0, O_WRONLY, 0); option = 0; while (1) { o = opt_standard (lim_use_must_malloc, &option, opts, &argc, argv, program_name, usage, version_string, arch_cmd_tree_id_help, opt_help_msg, opt_long_help, opt_version); if (o == opt_none) break; switch (o) { default: safe_printfmt (2, "unhandled option `%s'\n", option->opt_string); panic ("internal error parsing arguments"); usage_error: opt_usage (2, argv[0], program_name, usage, 1); exit (1); /* bogus_arg: */ safe_printfmt (2, "ill-formed argument for `%s' (`%s')\n", option->opt_string, option->arg_string); goto usage_error; } } if (argc > 2) goto usage_error; if (argc == 2) dir = argv[1]; tree_root = arch_tree_root(0, dir, 0); if (!tree_root) { safe_printfmt (2, "%s: directory (%s) is not in a project tree\n", argv[0], dir); exit (1); } revision_spec = arch_get_tree_fqrevision(tree_root); if (!revision_spec) { safe_printfmt (2, "%s: unable to determine project tree identifier.\n tree: %s\n", argv[0], tree_root); exit (2); } safe_printfmt (1, "%s\n", revision_spec); lim_free (0, revision_spec); lim_free (0, tree_root); return 0; } /* tag: Tom Lord Fri May 23 14:06:15 2003 (cmd-tree-id.c) */ tla-1.3.5+dfsg/src/tla/libarch/arbdelta.c0000644000175000017500000000453110457622000016631 0ustar useruser/* arbdelta.c: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/vu/safe.h" #include "hackerlab/mem/alloc-limits.h" #include "tla/libarch/local-cache.h" #include "tla/libarch/build-revision.h" #include "tla/libarch/make-changeset.h" #include "tla/libarch/inode-sig.h" #include "tla/libarch/chatter.h" #include "tla/libarch/arbdelta.h" /* __STDC__ prototypes for static functions */ static void arbdelta_callback (void * vfd, const char * fmt, va_list ap); void arch_arbitrary_delta (int chatter_fd, t_uchar * output_dir, t_uchar * tmp_dir, t_uchar * tree_root, struct arch_archive * orig_arch, t_uchar * orig_archive, t_uchar * orig_revision, struct arch_archive * mod_arch, t_uchar * mod_archive, t_uchar * mod_revision, int escape_classes) { t_uchar * orig = 0; t_uchar * mod = 0; struct arch_make_changeset_report report = {0, }; assoc_table inode_shortcut = 0; arch_chatter (chatter_fd, "* finding or building %s/%s\n", orig_archive, orig_revision); orig = arch_find_or_make_tmp_local_copy (chatter_fd, tmp_dir, tree_root, 0, orig_arch, orig_archive, orig_revision); arch_chatter (chatter_fd, "* finding or building %s/%s\n", mod_archive, mod_revision); mod = arch_find_or_make_tmp_local_copy (chatter_fd, tmp_dir, tree_root, 0, mod_arch, mod_archive, mod_revision); if (chatter_fd >= 0) { report.callback = arbdelta_callback; report.thunk = (void *)(long)chatter_fd; arch_chatter (chatter_fd, "* computing changeset\n"); } arch_read_inode_sig (0, &inode_shortcut, mod, mod_archive, mod_revision); arch_make_changeset (&report, orig, mod, output_dir, arch_unspecified_id_tagging, arch_inventory_unrecognized, rel_table_nil, inode_shortcut, 0, escape_classes); lim_free (0, orig); lim_free (0, mod); free_assoc_table (inode_shortcut); } static void arbdelta_callback (void * vfd, const char * fmt, va_list ap) { safe_printfmt_va_list ((int)(t_ulong)vfd, fmt, ap); safe_flush ((int)(t_ulong)vfd); } /* tag: Tom Lord Wed Jun 4 01:19:04 2003 (arbdelta.c) */ tla-1.3.5+dfsg/src/tla/libarch/archive-version.c0000644000175000017500000000350210457622000020154 0ustar useruser/* archive-version.c: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/bugs/panic.h" #include "hackerlab/char/str.h" #include "tla/libarch/archive-version.h" /* These must agree about the format version number. */ static const int arch_archive_format_vsn = 2; static const char arch_archive_format_vsn_id[] = "2"; const char arch_tree_format_1_str[] = "Hackerlab arch archive directory, format version 1."; const char arch_tree_format_2_str[] = "Hackerlab arch archive directory, format version 2."; static const char arch_tree_format_str[] = "Bazaar archive format 1 0"; t_uchar * arch_archive_version_for_new_archive (int tla_archive) { if (!tla_archive) return str_save (0, (t_uchar *)arch_tree_format_str); else return str_save (0, (t_uchar *)arch_tree_format_2_str); } enum arch_archive_access arch_archive_access (t_uchar * version) { if (!str_cmp (version, arch_tree_format_str)) return arch_archive_writable; else if (!str_cmp (version, arch_tree_format_2_str)) return arch_archive_writable; else if (!str_cmp (version, arch_tree_format_1_str)) return arch_archive_readable; else return arch_archive_incompatible; } enum arch_archive_type arch_archive_type (t_uchar * version) { if (!str_cmp (version, arch_tree_format_str)) return arch_archive_baz; else if (!str_cmp (version, arch_tree_format_2_str)) return arch_archive_tla; else if (!str_cmp (version, arch_tree_format_1_str)) return arch_archive_tla; else { panic ("unknown archive type"); return (enum arch_archive_type)-1; /* not reached */ } } /* tag: Tom Lord Fri May 23 22:17:13 2003 (archive-version.c) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-switch.h0000644000175000017500000000125010457622000017115 0ustar useruser/* cmd-switch.h: * * vim:smartindent ts=8:sts=2:sta:et:ai:shiftwidth=2 **************************************************************** * Copyright (C) 2004 Canonical Ltd * Author: Robert Collins * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__CMD_SWITCH_H #define INCLUDE__LIBARCH__CMD_SWITCH_H #include "hackerlab/machine/types.h" extern t_uchar arch_cmd_switch_help[]; extern int arch_cmd_switch (t_uchar * program_name, int argc, char * argv[]); #endif /* INCLUDE__LIBARCH__CMD_SWITCH_H */ /* tag: Tom Lord Fri May 23 14:06:15 2003 (cmd-switch.h) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-tree-version.h0000644000175000017500000000127610457622000020246 0ustar useruser/* cmd-tree-version.h: * **************************************************************** * Copyright (C) 2003 Tom Lord, Stig Brautaset * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__CMD_TREE_VERSION_H #define INCLUDE__LIBARCH__CMD_TREE_VERSION_H #include "hackerlab/machine/types.h" extern t_uchar arch_cmd_tree_version_help[]; /* automatically generated __STDC__ prototypes */ extern int arch_cmd_tree_version (t_uchar * program_name, int argc, char * argv[]); #endif /* INCLUDE__LIBARCH__CMD_TREE_VERSION_H */ /* tag: Stig Brautaset Sat Jun 7 17:45:52 BST 2003 (cmd-tree-version.h) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-my-default-archive.h0000644000175000017500000000135010457622000021303 0ustar useruser/* cmd-my-default-archive.h: * **************************************************************** * Copyright (C) 2003 Tom Lord, Stig Brautaset * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__CMD_MY_DEFAULT_ARCHIVE_H #define INCLUDE__LIBARCH__CMD_MY_DEFAULT_ARCHIVE_H #include "hackerlab/machine/types.h" extern t_uchar arch_cmd_my_default_archive_help[]; /* automatically generated __STDC__ prototypes */ extern int arch_cmd_my_default_archive (t_uchar * program_name, int argc, char * argv[]); #endif /* INCLUDE__LIBARCH__CMD_MY_DEFAULT_ARCHIVE_H */ /* tag: Stig Brautaset Sat Jun 7 16:07:39 BST 2003 (cmd-my-default-archive.h) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-make-log.c0000644000175000017500000001237610457622000017316 0ustar useruser/* cmd-make-log.c * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "config-options.h" #include "hackerlab/cmd/main.h" #include "tla/libarch/namespace.h" #include "tla/libarch/project-tree.h" #include "tla/libarch/patch-logs.h" #include "tla/libarch/cmd-make-log.h" static t_uchar * usage = "[options] [version]"; static t_uchar * version_string = (cfg__std__package " from regexps.com\n" "\n" "Copyright 2003 Tom Lord\n" "\n" "This is free software; see the source for copying conditions.\n" "There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\n" "PARTICULAR PURPOSE.\n" "\n" "Report bugs to " cfg__tla_bug_mail ".\n" "\n" cfg__std__release_id_string "\n"); #define OPTS(OP) \ OP (opt_help_msg, "h", "help", 0, \ "Display a help message and exit.") \ OP (opt_long_help, "H", 0, 0, \ "Display a verbose help message and exit.") \ OP (opt_version, "V", "version", 0, \ "Display a release identifier string\n" \ "and exit.") \ OP (opt_archive, "A", "archive", 1, \ "Override `my-default-archive'") \ OP (opt_dir, "d", "dir DIR", 1, \ "cd to DIR first") t_uchar arch_cmd_make_log_help[] = ("initialize a new log file entry\n" "Create (if needed) a log entry file in the root of the project\n" "tree containing DIR, for the indicated VERSION.\n" "\n" "The name of the new log file is printed to standard output.\n"); enum options { OPTS (OPT_ENUM) }; static struct opt_desc opts[] = { OPTS (OPT_DESC) {-1, 0, 0, 0, 0} }; int arch_cmd_make_log (t_uchar * program_name, int argc, char * argv[]) { int o; struct opt_parsed * option; t_uchar * default_archive = 0; char * dir = 0; dir = str_save (0, "."); safe_buffer_fd (1, 0, O_WRONLY, 0); option = 0; while (1) { o = opt_standard (lim_use_must_malloc, &option, opts, &argc, argv, program_name, usage, version_string, arch_cmd_make_log_help, opt_help_msg, opt_long_help, opt_version); if (o == opt_none) break; switch (o) { default: safe_printfmt (2, "unhandled option `%s'\n", option->opt_string); panic ("internal error parsing arguments"); usage_error: opt_usage (2, argv[0], program_name, usage, 1); exit (1); /* bogus_arg: */ safe_printfmt (2, "ill-formed argument for `%s' (`%s')\n", option->opt_string, option->arg_string); goto usage_error; case opt_archive: { lim_free (0, default_archive); default_archive = str_save (0, option->arg_string); break; } case opt_dir: { lim_free (0, dir); dir = str_save (0, option->arg_string); break; } } } if (argc > 2) goto usage_error; { t_uchar * tree_root = 0; t_uchar * vsnspec = 0; t_uchar * archive = 0; t_uchar * version = 0; t_uchar * log_file = 0; if (default_archive && !arch_valid_archive_name (default_archive)) { safe_printfmt (2, "%s: invalid archive name: %s\n", argv[0], default_archive); exit (2); } tree_root = arch_tree_root (0, dir, 0); if (!tree_root) { safe_printfmt (2, "%s: not in a project tree\n dir: %s\n", argv[0], dir); exit (2); } if (argc == 2) vsnspec = str_save (0, argv[1]); else vsnspec = arch_tree_version (tree_root); if (!vsnspec) { safe_printfmt (2, "%s: no tree-version set\n tree: %s\n", argv[0], tree_root); exit (2); } if (!arch_valid_package_name (vsnspec, arch_maybe_archive, arch_req_version, 0)) { safe_printfmt (2, "%s: illegal version name: %s\n", argv[0], vsnspec); exit (2); } archive = arch_parse_package_name (arch_ret_archive, default_archive, vsnspec); version = arch_parse_package_name (arch_ret_non_archive, 0, vsnspec); log_file = arch_make_log_file (tree_root, archive, version); safe_printfmt (1, "%s\n", log_file); if (safe_access (log_file, F_OK) == -1) { lim_free (0, log_file); log_file = arch_make_log (tree_root, archive, version); } else { safe_printfmt (2, "Warning: not overwriting existing log file\n"); } lim_free (0, vsnspec); lim_free (0, tree_root); lim_free (0, archive); lim_free (0, version); lim_free (0, log_file); } lim_free (0, default_archive); lim_free (0, dir); return 0; } /* tag: Tom Lord Fri May 23 13:48:00 2003 (make-log.c) */ tla-1.3.5+dfsg/src/tla/libarch/sftp.h0000644000175000017500000000407510457622000016037 0ustar useruser/* * Ref: draft-ietf-secsh-filexfer-02.txt */ #define SFTP_VERSION 3 #define SSH_FXP_INIT 1 #define SSH_FXP_VERSION 2 #define SSH_FXP_OPEN 3 #define SSH_FXP_CLOSE 4 #define SSH_FXP_READ 5 #define SSH_FXP_WRITE 6 #define SSH_FXP_LSTAT 7 #define SSH_FXP_FSTAT 8 #define SSH_FXP_SETSTAT 9 #define SSH_FXP_FSETSTAT 10 #define SSH_FXP_OPENDIR 11 #define SSH_FXP_READDIR 12 #define SSH_FXP_REMOVE 13 #define SSH_FXP_MKDIR 14 #define SSH_FXP_RMDIR 15 #define SSH_FXP_REALPATH 16 #define SSH_FXP_STAT 17 #define SSH_FXP_RENAME 18 #define SSH_FXP_READLINK 19 #define SSH_FXP_SYMLINK 20 #define SSH_FXP_STATUS 101 #define SSH_FXP_HANDLE 102 #define SSH_FXP_DATA 103 #define SSH_FXP_NAME 104 #define SSH_FXP_ATTRS 105 #define SSH_FXP_EXTENDED 200 #define SSH_FXP_EXTENDED_REPLY 201 #define SSH_FILEXFER_ATTR_SIZE 0x00000001 #define SSH_FILEXFER_ATTR_UIDGID 0x00000002 #define SSH_FILEXFER_ATTR_PERMISSIONS 0x00000004 #define SSH_FILEXFER_ATTR_ACMODTIME 0x00000008 #define SSH_FILEXFER_ATTR_EXTENDED 0x80000000 #define SSH_FXF_READ 0x00000001 #define SSH_FXF_WRITE 0x00000002 #define SSH_FXF_APPEND 0x00000004 #define SSH_FXF_CREAT 0x00000008 #define SSH_FXF_TRUNC 0x00000010 #define SSH_FXF_EXCL 0x00000020 #define SSH_FX_OK 0 #define SSH_FX_EOF 1 #define SSH_FX_NO_SUCH_FILE 2 #define SSH_FX_PERMISSION_DENIED 3 #define SSH_FX_FAILURE 4 #define SSH_FX_BAD_MESSAGE 5 #define SSH_FX_NO_CONNECTION 6 #define SSH_FX_CONNECTION_LOST 7 #define SSH_FX_OP_UNSUPPORTED 8 /* tag: Tom Lord Fri Jan 17 21:20:22 2003 (sftp.h) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-valid-package-name.h0000644000175000017500000000135010457622000021223 0ustar useruser/* cmd-valid-package-name.h: * **************************************************************** * Copyright (C) 2003 Tom Lord, Stig Brautaset * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__CMD_VALID_PACKAGE_NAME_H #define INCLUDE__LIBARCH__CMD_VALID_PACKAGE_NAME_H #include "hackerlab/machine/types.h" extern t_uchar arch_cmd_valid_package_name_help[]; /* automatically generated __STDC__ prototypes */ extern int arch_cmd_valid_package_name (t_uchar * program_name, int argc, char * argv[]); #endif /* INCLUDE__LIBARCH__CMD_VALID_PACKAGE_NAME_H */ /* tag: Stig Brautaset Sat Jun 7 17:49:56 BST 2003 (cmd-valid-package-name.h) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-changeset.h0000644000175000017500000000125110457622000017556 0ustar useruser/* cmd-changeset.h: * **************************************************************** * Copyright (C) 2003 Tom Lord, Stig Brautaset * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__CMD_CHANGESET_H #define INCLUDE__LIBARCH__CMD_CHANGESET_H #include "hackerlab/machine/types.h" extern t_uchar arch_cmd_changeset_help[]; /* automatically generated __STDC__ prototypes */ extern int arch_cmd_changeset (t_uchar * program_name, int argc, char * argv[]); #endif /* INCLUDE__LIBARCH__CMD_CHANGESET_H */ /* tag: Stig Brautaset Sat Jun 7 13:49:51 BST 2003 (cmd-changeset.h) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-changelog.h0000644000175000017500000000125110457622000017544 0ustar useruser/* cmd-changelog.h: * **************************************************************** * Copyright (C) 2003 Tom Lord, Stig Brautaset * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__CMD_CHANGELOG_H #define INCLUDE__LIBARCH__CMD_CHANGELOG_H #include "hackerlab/machine/types.h" extern t_uchar arch_cmd_changelog_help[]; /* automatically generated __STDC__ prototypes */ extern int arch_cmd_changelog (t_uchar * program_name, int argc, char * argv[]); #endif /* INCLUDE__LIBARCH__CMD_CHANGELOG_H */ /* tag: Stig Brautaset Sat Jun 7 13:39:41 BST 2003 (cmd-changelog.h) */ tla-1.3.5+dfsg/src/tla/libarch/proj-tree-lint.h0000644000175000017500000000312110457622000017725 0ustar useruser/* proj-tree-lint.h: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__TREE_LINT_H #define INCLUDE__LIBARCH__TREE_LINT_H #include "tla/libawk/relational.h" #include "tla/libawk/associative.h" #include "tla/libarch/inv-ids.h" enum arch_lint_category { symlinks_sans_targets = 1, unrecognized_files = 2, untagged_files = 4, ids_sans_files = 8, duplicate_id_groups = 16, }; struct arch_tree_lint_result { enum arch_id_tagging_method id_tagging_method; rel_table unrecognized_files; rel_table symlinks_sans_targets; rel_table untagged_files; rel_table ids_sans_files; rel_table * duplicate_id_groups; rel_table warning_files; /* things which aren't source but have source-like names */ }; /* automatically generated __STDC__ prototypes */ extern int arch_print_tree_lint_report (int fd, struct arch_tree_lint_result * lint, int escape_classes); extern int arch_print_filtered_tree_lint_report (int fd, struct arch_tree_lint_result * lint, t_uint categories, int escape_classes); extern struct arch_tree_lint_result * arch_tree_lint (t_uchar * dirspec); extern void arch_free_lint_result (struct arch_tree_lint_result * result); #endif /* INCLUDE__LIBARCH__TREE_LINT_H */ /* tag: Tom Lord Sat Jan 5 15:26:10 2002 (proj-tree-lint.h) */ tla-1.3.5+dfsg/src/tla/libarch/merge-points.c0000644000175000017500000001556410457622000017474 0ustar useruser/* merge-points.c: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/bugs/panic.h" #include "hackerlab/mem/alloc-limits.h" #include "hackerlab/char/str.h" #include "hackerlab/vu/safe.h" #include "tla/libfsutils/file-contents.h" #include "tla/libarch/patch-logs.h" #include "tla/libarch/namespace.h" #include "tla/libarch/merge-points.h" /* __STDC__ prototypes for static functions */ static void arch_add_merge_points (rel_table * out, const t_uchar * level, const t_uchar * log, const t_uchar * prefix); static t_uchar * arch_merge_points_prefix (const t_uchar * from_archive, const t_uchar * from_spec); rel_table arch_tree_merge_points (const t_uchar * tree_root, const t_uchar * into_archive, const t_uchar * into_spec, const t_uchar * from_archive, const t_uchar * from_spec) { rel_table answer = rel_table_nil; rel_table source_logs = rel_table_nil; int x; t_uchar * prefix = 0; if (arch_valid_package_name (into_spec, arch_no_archive, arch_req_patch_level, 0)) { t_uchar * path = 0; t_uchar * level = 0; path = arch_log_file (tree_root, into_archive, into_spec); level = arch_parse_package_name (arch_ret_patch_level, 0, into_spec); rel_add_records (&source_logs, rel_make_record_2_taking (rel_make_field_str (into_spec), rel_make_field_str (path)), rel_record_null); lim_free (0, path); lim_free (0, level); } else if (arch_valid_package_name (into_spec, arch_no_archive, arch_req_version, 0)) { source_logs = arch_logs (tree_root, into_archive, into_spec, 0); } else panic ("invalid into_spec argument to arch_tree_merge_points"); prefix = arch_merge_points_prefix (from_archive, from_spec); for (x = 0; x < rel_n_records (source_logs); ++x) { t_uchar * log_text = 0; log_text = file_contents (rel_peek_str (source_logs, x, 1)); arch_add_merge_points (&answer, rel_peek_str (source_logs, x, 0), log_text, prefix); lim_free (0, log_text); } rel_free_table (source_logs); lim_free (0, prefix); return answer; } rel_table arch_archive_merge_points (struct arch_archive * into_arch, const t_uchar * into_spec, const t_uchar * from_archive, const t_uchar * from_spec, int upto) { rel_table answer = rel_table_nil; rel_table source_revisions = rel_table_nil; int x; t_uchar * prefix = 0; if (arch_valid_package_name (into_spec, arch_no_archive, arch_req_patch_level, 0)) { if (!upto) rel_add_records (&source_revisions, rel_singleton_record_taking (rel_make_field_str (into_spec)), rel_record_null); else { t_uchar * into_version = 0; rel_table all_source_revisions = rel_table_nil; into_version = arch_parse_package_name (arch_ret_package_version, 0, into_spec); all_source_revisions = arch_archive_revisions (into_arch, into_version, 2); for (x = 0; x < rel_n_records (all_source_revisions); ++x) { rel_add_records (&source_revisions, rel_copy_record (rel_peek_record (all_source_revisions, x)), rel_record_null); if (!str_cmp (rel_peek_str (all_source_revisions, x, 0), into_spec)) break; } if (x == rel_n_records (all_source_revisions)) { safe_printfmt (2, "arch: attempt to compute merge-points of non-existent revision\n (%s\%s)\n", into_arch->name, into_spec); exit (2); } lim_free (0, into_version); rel_free_table (all_source_revisions); } } else if (arch_valid_package_name (into_spec, arch_no_archive, arch_req_version, 0)) { source_revisions = arch_archive_revisions (into_arch, into_spec, 2); } else panic ("invalid into_spec argument to arch_archive_merge_points"); prefix = arch_merge_points_prefix (from_archive, from_spec); for (x = 0; x < rel_n_records (source_revisions); ++x) { t_uchar * log_text = 0; t_uchar * level = 0; log_text = arch_archive_log (into_arch, rel_peek_str (source_revisions, x, 0)); level = arch_parse_package_name (arch_ret_patch_level, 0, rel_peek_str (source_revisions, x, 0)); arch_add_merge_points (&answer, level, log_text, prefix); lim_free (0, log_text); lim_free (0, level); } rel_free_table (source_revisions); lim_free (0, prefix); return answer; } rel_table arch_new_in_version (const t_uchar * tree_root, const t_uchar * archive, const t_uchar * version) { rel_table merge_points = rel_table_nil; rel_table all_logs = rel_table_nil; rel_table answer = rel_table_nil; merge_points = arch_tree_merge_points (tree_root, archive, version, 0, 0); all_logs = arch_all_logs (tree_root); rel_sort_table_by_field (0, merge_points, 1); rel_sort_table_by_field (0, all_logs, 0); answer = rel_join (2, rel_join_output (2,0, -1), 1, 0, merge_points, all_logs); arch_sort_table_by_name_field (0, answer, 0); rel_free_table (merge_points); rel_free_table (all_logs); return answer; } static void arch_add_merge_points (rel_table * out, const t_uchar * level, const t_uchar * log, const t_uchar * prefix) { assoc_table headers = 0; const t_uchar * new_patches_header; rel_table new_patches = rel_table_nil; int x; arch_parse_log (0, &headers, 0, log); new_patches_header = assoc_get_str_taking (headers, rel_make_field_str ("new-patches")); new_patches = rel_ws_split (new_patches_header); arch_sort_table_by_name_field (0, new_patches, 0); rel_uniq_by_field (&new_patches, 0); for (x = 0; x < rel_n_records (new_patches); ++x) { if (!str_cmp_prefix (prefix, rel_peek_str (new_patches, x, 0))) rel_add_records (out, rel_make_record_2_taking (rel_make_field_str (level), rel_get_field (new_patches, x, 0)), rel_record_null); } free_assoc_table (headers); rel_free_table (new_patches); } static t_uchar * arch_merge_points_prefix (const t_uchar * from_archive, const t_uchar * from_spec) { if (!from_archive) return 0; else if (arch_valid_package_name (from_spec, arch_no_archive, arch_req_patch_level, 0)) return arch_fully_qualify (from_archive, from_spec); else return str_alloc_cat_many (0, from_archive, "/", from_spec, "--", str_end); } /* tag: Tom Lord Tue May 27 18:04:17 2003 (merge-points.c) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-set-tree-version.h0000644000175000017500000000133210457622000021030 0ustar useruser/* cmd-set-tree-version.h: * **************************************************************** * Copyright (C) 2003 Tom Lord, Stig Brautaset * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__CMD_SET_TREE_VERSION_H #define INCLUDE__LIBARCH__CMD_SET_TREE_VERSION_H #include "hackerlab/machine/types.h" extern t_uchar arch_cmd_set_tree_version_help[]; /* automatically generated __STDC__ prototypes */ extern int arch_cmd_set_tree_version (t_uchar * program_name, int argc, char * argv[]); #endif /* INCLUDE__LIBARCH__CMD_SET_TREE_VERSION_H */ /* tag: Stig Brautaset Sat Jun 7 17:17:58 BST 2003 (cmd-set-tree-version.h) */ tla-1.3.5+dfsg/src/tla/libarch/pfs.h0000644000175000017500000001073710457622000015655 0ustar useruser/* pfs.h: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__PFS_H #define INCLUDE__LIBARCH__PFS_H #include "hackerlab/machine/types.h" #include "hackerlab/vu/vu.h" #include "tla/libfsutils/dir-listing.h" #include "tla/libawk/relational.h" struct arch_pfs_session; struct arch_pfs_vtable { int (*file_exists) (struct arch_pfs_session * p, const t_uchar * path); int (*is_dir) (struct arch_pfs_session * p, const t_uchar * path); t_uchar * (*file_contents) (struct arch_pfs_session * p, const t_uchar * path, int soft_errors); int (*get_file) (struct arch_pfs_session * p, int out_fd, const t_uchar * path, int soft_errors); rel_table (*directory_files) (struct arch_pfs_session * p, const t_uchar * path, int soft_errors); int (*put_file) (struct arch_pfs_session * p, const t_uchar * path, mode_t perms, int in_fd, int soft_errors); int (*mkdir) (struct arch_pfs_session * p, const t_uchar * path, mode_t mkdir, int soft_errors); int (*rename) (struct arch_pfs_session * p, t_uchar ** errstr, const t_uchar * from, const t_uchar * to, int soft_errors); int (*rmdir) (struct arch_pfs_session * p, const t_uchar * path, int soft_errors); int (*rm) (struct arch_pfs_session * p, const t_uchar * path, int soft_errors); }; struct arch_pfs_session { struct arch_pfs_vtable * vtable; }; /* automatically generated __STDC__ prototypes */ extern void arch_pfs_rmrf_file (struct arch_pfs_session * pfs, const t_uchar * path); extern void arch_pfs_pfs_make_archive (const t_uchar * name, const t_uchar * uri, const t_uchar * version, const t_uchar *mirror_of, int dot_listing_lossage, int signed_archive); extern int arch_valid_uri (const t_uchar * uri); extern struct arch_pfs_session * arch_pfs_connect (const t_uchar * uri); extern t_uchar * arch_pfs_file_contents (struct arch_pfs_session * pfs, const t_uchar * path, int soft_errors); extern rel_table arch_pfs_directory_files (struct arch_pfs_session * pfs, const t_uchar * path, int soft_errors); extern int arch_pfs_file_exists (struct arch_pfs_session * pfs, const t_uchar * path); extern int arch_pfs_get_file (struct arch_pfs_session * pfs, int out_fd, const t_uchar * path, int soft_errors); extern int arch_pfs_put_file (struct arch_pfs_session * pfs, const t_uchar * path, mode_t perms, int in_fd, int soft_errors); extern int arch_pfs_put_atomic (struct arch_pfs_session * pfs, t_uchar ** errstr, const t_uchar * path, mode_t perms, int in_fd, int replace, int soft_errors); extern int arch_pfs_mkdir (struct arch_pfs_session * pfs, const t_uchar * path, mode_t perms, int soft_errors); extern int arch_pfs_rename (struct arch_pfs_session * pfs, t_uchar ** errstr, const t_uchar * from, const t_uchar * to, int soft_errors); extern int arch_pfs_is_dir (struct arch_pfs_session * pfs, const t_uchar * path); extern int arch_pfs_rmdir (struct arch_pfs_session * pfs, const t_uchar * path, int soft_errors); extern int arch_pfs_rm (struct arch_pfs_session * pfs, const t_uchar * path, int soft_errors); extern void arch_pfs_update_listing_file (struct arch_pfs_session * session, const t_uchar * dir); #endif /* INCLUDE__LIBARCH__PFS_H */ /* tag: Tom Lord Sat Jan 5 15:26:10 2002 (pfs.h) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-export.c0000644000175000017500000002525110457622000017137 0ustar useruser/* export.c: * **************************************************************** * Copyright (C) 2003 Tom Lord * 2005 Canonical Ltd * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "config-options.h" #include "hackerlab/cmd/main.h" #include "hackerlab/fs/file-names.h" #include "hackerlab/fs/cwd.h" #include "hackerlab/char/str.h" #include "tla/libfsutils/tmp-files.h" #include "tla/libfsutils/rmrf.h" #include "tla/libfsutils/copy-file.h" #include "tla/libarch/namespace.h" #include "tla/libarch/invent.h" #include "tla/libarch/project-tree.h" #include "tla/libarch/my.h" #include "tla/libarch/archive.h" #include "tla/libarch/pristines.h" #include "tla/libarch/build-revision.h" #include "tla/libarch/inode-sig.h" #include "tla/libarch/libraries.h" #include "tla/libarch/local-cache.h" #include "tla/libarch/library-txn.h" #include "tla/libarch/cmd.h" #include "tla/libarch/cmdutils.h" #include "tla/libarch/cmd-export.h" /* gettext support not yet incorporated into tla, reserve the gettext notation for later use */ #define _(x) (x) #define N_(x) (x) static t_uchar * usage = N_("[options] [revision] dir "); #define OPTS(OP) \ OP (opt_dir, "d", "dir DIR", 1, \ N_("Change to DIR first.")) \ OP (opt_help_msg, "h", "help", 0, \ N_("Display a help message and exit.")) \ OP (opt_long_help, "H", 0, 0, \ N_("Display a verbose help message and exit.")) \ OP (opt_version, "V", "version", 0, \ N_("Display a release identifier string\n" \ "and exit.")) \ OP (opt_silent, "s", "silent", 0, \ N_("no output")) t_uchar arch_cmd_export_help[] = N_("export all or some of a tree revision\n" "Extract REVISION from an archive, creating a new source tree with no control information.\n" "Note if export the local tree revision, local modifications will not be included; the exported\n" "file will only be copies in the repository\n" "\n" ); static t_uchar * version_string = (cfg__std__package " from regexps.com\n" "\n" "Copyright 2003 Tom Lord\n" "\n" "This is free software; see the source for copying conditions.\n" "There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\n" "PARTICULAR PURPOSE.\n" "\n" "Report bugs to " cfg__tla_bug_mail ".\n" "\n" cfg__std__release_id_string "\n"); enum options { OPTS (OPT_ENUM) }; static struct opt_desc opts[] = { OPTS (OPT_DESC) {-1, 0, 0, 0, 0} }; static int filename_matches (regex_t * pattern, char * filename) { int answer; answer = regexec (pattern, filename, 0, 0, 0); if (answer == REG_NOMATCH) return 0; if (answer == REG_NOERROR) return 1; panic ("unexpected regexec error in arch_inventory_traversal"); return -1; } /* * return true if the path is in .arch-ids or {arch}, ie if it matches * s/(\{arch\}|\.arch-ids)/. */ int arch_is_in_control_dir(t_uchar * path) { static int compiled = 0; static regex_t control_pattern = {0,}; if (!compiled) { int re_error; re_error = regcomp (&control_pattern, "\\.arch-ids|\\{arch\\}", REG_EXTENDED); invariant (!re_error); compiled = 1; } return filename_matches (&control_pattern, path); } /* * return a new rel_table which does not contain any control files */ rel_table arch_filter_control_files (rel_table index) { rel_table new_index = rel_table_nil; int l = 0; for (l = 0; l < rel_n_records (index); ++l) { t_uchar *s; s = str_save(0, rel_peek_str(index, l, 0)); if (!( (arch_is_control_file (s, NULL) && str_cmp_suffix_n(s, ".arch-inventory", 15)) || arch_is_in_control_dir (s))) { rel_add_records (&new_index, rel_copy_record (rel_peek_record(index, l)), 0); } lim_free(0, s); } safe_flush (1); return new_index; } /* * return a new rel_table which begins with prefix */ rel_table arch_filter_to_subdir (rel_table index, t_uchar * prefix) { rel_table new_index = rel_table_nil; int l = 0; for (l = 0; l < rel_n_records (index); ++l) { t_uchar *s; s = str_save(0, rel_peek_str(index, l, 0)); if (!str_cmp_prefix(prefix, s)) rel_add_records (&new_index, rel_copy_record (rel_peek_record(index, l)), 0); lim_free(0, s); } return new_index; } int arch_cmd_export (t_uchar * program_name, int argc, char * argv[]) { int o; struct opt_parsed * option; t_uchar * cache_dir_spec = 0; t_uchar * selected_library = 0; t_uchar *dir = 0; int silent = 0; int revision_from_working_tree = 0; dir = str_save (0, "."); safe_buffer_fd (1, 0, O_WRONLY, 0); option = 0; while (1) { o = opt_standard (lim_use_must_malloc, &option, opts, &argc, argv, program_name, usage, version_string, arch_cmd_export_help, opt_help_msg, opt_long_help, opt_version); if (o == opt_none) break; switch (o) { case opt_dir: { lim_free (0, dir); dir = str_save (0, option->arg_string); break; } default: safe_printfmt (2, "unhandled option `%s'\n", option->opt_string); panic ("internal error parsing arguments"); usage_error: opt_usage (2, argv[0], program_name, usage, 1); exit (1); /* bogus_arg: */ safe_printfmt (2, "ill-formed argument for `%s' (`%s')\n", option->opt_string, option->arg_string); goto usage_error; case opt_silent: { silent = 1; break; } } } if ((argc < 2) || (argc > 3)) goto usage_error; { int here_fd; int tmp_dir_is_local_cache = 0; t_uchar * revision_spec = 0; t_uchar * revision = 0; t_uchar * output_dir = 0; t_uchar * tmp_dir = 0; t_uchar * last_arg = 0; t_uchar * subdir = 0; struct arch_archive * arch = 0; t_uchar * tree_root = 0; t_uchar *tree_arch = 0; if (argc == 2) { output_dir = str_save(0, argv[1]); tree_root = arch_tree_root(0, dir, 0); if (tree_root) { revision_spec = arch_get_tree_fqrevision(tree_root); revision_from_working_tree = 1; } else { safe_printfmt (2, _("Cannot determine revision of directory %s\n"), dir); exit (2); } } else if (argc == 3) { output_dir = str_save(0, argv[2]); revision_spec = arch_get_fqrevision(argv[1]); } here_fd = safe_open (".", O_RDONLY, 0); last_arg = str_save (0, argv[1]); tree_arch = arch_parse_package_name (arch_ret_archive, 0, revision_spec); if (tree_arch) arch = arch_archive_connect(tree_arch, 0); if (!tree_arch || !arch) { safe_printfmt (2, _("Cannot connect to archive for revision %s\n"), revision_spec); exit (2); } invariant (!!arch); revision = arch_parse_package_name (arch_ret_non_archive, NULL, revision_spec); if (!output_dir) { /* name of revision part */ t_uchar * cwd = safe_current_working_directory (); output_dir = file_name_in_vicinity (0, cwd, revision); lim_free (0, cwd); } invariant (!!output_dir); { t_uchar * canonical_dir = 0; t_uchar * output_dirname = 0; t_uchar * cwd = safe_current_working_directory (); t_uchar * absolute_output_dir = 0; int output_dirname_exists; if (file_name_is_absolute(output_dir)) absolute_output_dir = str_save(0, output_dir); else absolute_output_dir = str_alloc_cat_many(0, cwd, "/", output_dir, str_end); canonical_dir = file_name_from_directory(0, absolute_output_dir); output_dirname = file_name_directory (0, canonical_dir); output_dirname_exists = safe_access (output_dirname, F_OK) == 0; if (!output_dirname_exists) { safe_printfmt (2, _("Parent dir of output directory, %s, does not exist\n"), output_dirname); exit (2); } lim_free(0, canonical_dir); lim_free(0, output_dirname); lim_free(0, cwd); lim_free(0, absolute_output_dir); } if (!safe_access (output_dir, F_OK)) { safe_printfmt (2, "%s: output directory already exists (%s)\n", argv[0], output_dir); exit (1); } { t_uchar * revision_dir = 0; t_uchar * tmp_tree_root = 0; rel_table index = rel_table_nil; rel_table index_stripped = rel_table_nil; rel_table index_subdird = rel_table_nil; /* FIXME: inefficient, since arch_build_revision is already * doing an inventory and throwing it away. */ if (revision_from_working_tree) { arch_chatter (1, "* trying to build pristine export from local cache\n"); tmp_dir = arch_find_or_make_local_copy ((silent ? -1 : 1), tree_root, dir, arch, tree_arch, revision); if (tmp_dir) tmp_dir_is_local_cache = 1; } if (!tmp_dir) { tmp_dir = tmp_file_name_in_tmp ("export"); rmrf_file (tmp_dir); safe_mkdir (tmp_dir, 0777); arch_build_revision ((silent ? -1 : 1), tmp_dir, arch, tree_arch, revision, NULL); } tmp_tree_root = arch_tree_root(0, tmp_dir, 0); index = arch_source_inventory (tmp_tree_root, 1, 0, 0); safe_flush (1); index_stripped = arch_filter_control_files (index); if (subdir) { safe_printfmt(2," limiting to %s", subdir); index_subdird = arch_filter_to_subdir (index_stripped, str_alloc_cat(0, "./", subdir)); } else { index_subdird = index_stripped; } rel_sort_table_by_field (0, index_subdird, 0); arch_chatter (1, "* building clean tree in %s\n", output_dir); copy_file_list (output_dir, tmp_dir, index_subdird, 1); lim_free (0, revision_dir); lim_free(0, tmp_tree_root); } arch_archive_close (arch); safe_fchdir (here_fd); safe_close (here_fd); if (tmp_dir_is_local_cache == 0) rmrf_file (tmp_dir); lim_free (0, revision_spec); lim_free (0, revision); lim_free (0, output_dir); lim_free (0, tmp_dir); lim_free (0, tree_root); } lim_free (0, selected_library); lim_free (0, cache_dir_spec); return 0; } tla-1.3.5+dfsg/src/tla/libarch/pfs-sftp-version.h0000644000175000017500000000151210457622000020301 0ustar useruser/* pfs-sftp-version.h: * **************************************************************** * Copyright (C) 2004 Johannes Berg * Copyright (C) 2006 Ludovic Courtès * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__PFS_SFTP_VERSION_H #define INCLUDE__LIBARCH__PFS_SFTP_VERSION_H #include "hackerlab/machine/types.h" enum arch_ssh_type { ssh_type_unknown, ssh_type_lsh, ssh_type_openssh, ssh_type_fsecure3, ssh_type_psftp }; /* automatically generated __STDC__ prototypes */ extern enum arch_ssh_type arch_pfs_sftp_ssh_type (void); extern const t_uchar * arch_pfs_sftp_ssh_binary (enum arch_ssh_type); #endif /* INCLUDE__LIBARCH__PFS_SFTP_H */ /* tag: pfs-sftp-version.h by Johannes Berg (17:00 Feb 13 2004) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-escape.h0000644000175000017500000000122610457622000017057 0ustar useruser/* cmd-escape.h: * **************************************************************** * Copyright (C) 2004 Christian Thaeter * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__CMD_ESCAPE_H #define INCLUDE__LIBARCH__CMD_ESCAPE_H #include "hackerlab/char/pika-escaping-utils.h" extern t_uchar arch_cmd_escape_help[]; /* automatically generated __STDC__ prototypes */ extern int arch_cmd_escape (t_uchar * program_name, int argc, char * argv[]); #endif /* INCLUDE__LIBARCH__CMD_ID_H */ /* tag: Christian Thaeter Sun Mar 7 04:45:11 CET 2004 (cmd-escape.h) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-cat-log.h0000644000175000017500000000123310457622000017143 0ustar useruser/* cmd-cat-log.h: * **************************************************************** * Copyright (C) 2003 Tom Lord, Stig Brautaset * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__CMD_CAT_LOG_H #define INCLUDE__LIBARCH__CMD_CAT_LOG_H #include "hackerlab/machine/types.h" extern t_uchar arch_cmd_cat_log_help[]; /* automatically generated __STDC__ prototypes */ extern int arch_cmd_cat_log (t_uchar * program_name, int argc, char * argv[]); #endif /* INCLUDE__LIBARCH__CMD_CAT_LOG_H */ /* tag: Stig Brautaset Sat Jun 7 13:36:05 BST 2003 (cmd-cat-log.h) */ tla-1.3.5+dfsg/src/tla/libarch/pfs-fs.h0000644000175000017500000000106210457622000016252 0ustar useruser/* pfs-fs.h: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__PFS_FS_H #define INCLUDE__LIBARCH__PFS_FS_H #include "tla/libarch/pfs.h" /* automatically generated __STDC__ prototypes */ extern struct arch_pfs_session * arch_pfs_fs_connect (const t_uchar * uri); #endif /* INCLUDE__LIBARCH__PFS_FS_H */ /* tag: Tom Lord Sat Jan 5 15:26:10 2002 (pfs-fs.h) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-cacherev.c0000644000175000017500000001607410457622000017401 0ustar useruser/* cacherev.c * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "config-options.h" #include "hackerlab/cmd/main.h" #include "hackerlab/fs/file-names.h" #include "hackerlab/fs/cwd.h" #include "tla/libfsutils/tmp-files.h" #include "tla/libfsutils/rmrf.h" #include "tla/libarch/namespace.h" #include "tla/libarch/project-tree.h" #include "tla/libarch/my.h" #include "tla/libarch/archive.h" #include "tla/libarch/patch-logs.h" #include "tla/libarch/pristines.h" #include "tla/libarch/build-revision.h" #include "tla/libarch/cmd.h" #include "tla/libarch/cmd-cacherev.h" static t_uchar * usage = "[options] [revision]"; static t_uchar * version_string = (cfg__std__package " from regexps.com\n" "\n" "Copyright 2003 Tom Lord\n" "\n" "This is free software; see the source for copying conditions.\n" "There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\n" "PARTICULAR PURPOSE.\n" "\n" "Report bugs to " cfg__tla_bug_mail ".\n" "\n" cfg__std__release_id_string "\n"); #define OPTS(OP) \ OP (opt_help_msg, "h", "help", 0, \ "Display a help message and exit.") \ OP (opt_long_help, "H", 0, 0, \ "Display a verbose help message and exit.") \ OP (opt_version, "V", "version", 0, \ "Display a release identifier string\n" \ "and exit.") \ OP (opt_archive, "A", "archive", 1, \ "Override `my-default-archive'") \ OP (opt_cache, 0, "cache DIR", 1, \ "cache root for trees with pristines") t_uchar arch_cmd_cacherev_help[] = ("cache a full source tree in an archive\n" "Cache a full-text copy of the indicated revision\n" "in the archive. This can speed up subsequent calls\n" "to \"tla get\" for that and subsequent revisions.\n\n" "If no revision is specified, but the command is run\n" "from within a project tree, cache the latest revision\n" "in the default version of that tree.\n"); enum options { OPTS (OPT_ENUM) }; static struct opt_desc opts[] = { OPTS (OPT_DESC) {-1, 0, 0, 0, 0} }; int arch_cmd_cacherev (t_uchar * program_name, int argc, char * argv[]) { int o; struct opt_parsed * option; t_uchar * default_archive = 0; t_uchar * cache_dir = 0; enum arch_revision_type type; int is_cached; safe_buffer_fd (1, 0, O_WRONLY, 0); option = 0; while (1) { o = opt_standard (lim_use_must_malloc, &option, opts, &argc, argv, program_name, usage, version_string, arch_cmd_cacherev_help, opt_help_msg, opt_long_help, opt_version); if (o == opt_none) break; switch (o) { default: safe_printfmt (2, "unhandled option `%s'\n", option->opt_string); panic ("internal error parsing arguments"); usage_error: opt_usage (2, argv[0], program_name, usage, 1); exit (1); /* bogus_arg: */ safe_printfmt (2, "ill-formed argument for `%s' (`%s')\n", option->opt_string, option->arg_string); goto usage_error; case opt_archive: { lim_free (0, default_archive); default_archive = str_save (0, option->arg_string); break; } case opt_cache: { lim_free (0, cache_dir); cache_dir = str_save (0, option->arg_string); break; } } } if (argc > 2) goto usage_error; default_archive = arch_my_default_archive (default_archive); { t_uchar * revision_spec; t_uchar * archive = 0; t_uchar * revision = 0; struct arch_archive * arch = 0; t_uchar * tmp_dir = 0; t_uchar * pristine_dir = 0; if (argc == 2) { revision_spec = str_save(0, argv[1]); if (!arch_valid_package_name (revision_spec, arch_maybe_archive, arch_req_patch_level, 1)) { safe_printfmt (2, "%s: invalid revision spec (%s)\n", argv[0], revision_spec); exit (2); } archive = arch_parse_package_name (arch_ret_archive, default_archive, revision_spec); revision = arch_parse_package_name (arch_ret_non_archive, 0, revision_spec); } else { t_uchar * tree_root = 0; t_uchar * version_spec = 0; t_uchar * version = 0; t_uchar * patch_level = 0; tree_root = arch_tree_root (0, ".", 0); if (!tree_root) { safe_printfmt (2, "%s: not in project tree, specify revision to cache\n", argv[0]); exit (1); } version_spec = arch_tree_version (tree_root); if (!arch_valid_package_name (version_spec, arch_maybe_archive, arch_req_version, 1)) { safe_printfmt (2, "%s: invalid version spec (%s)\n", argv[0], version_spec); exit (2); } archive = arch_parse_package_name (arch_ret_archive, default_archive, version_spec); version = arch_parse_package_name (arch_ret_non_archive, 0, version_spec); patch_level = arch_highest_patch_level (tree_root, archive, version); revision = str_alloc_cat_many (0, version, "--", patch_level, str_end); lim_free (0, tree_root); lim_free (0, version_spec); lim_free (0, version); lim_free (0, patch_level); } if (!cache_dir) cache_dir = str_save (0, "."); tmp_dir = tmp_file_name (".", ",,archive-cache-revision"); pristine_dir = file_name_in_vicinity (0, tmp_dir, revision); arch = arch_archive_connect (archive, 0); arch_revision_type (&type, &is_cached, arch, revision); if (is_cached) { safe_printfmt (2, "%s: revision already has a cacherev\nrevision: %s\n", argv[0], revision); exit (1); } safe_mkdir (tmp_dir, 0777); safe_mkdir (pristine_dir, 0777); arch_build_revision (1, pristine_dir, arch, archive, revision, cache_dir); { t_uchar * errstr; if (arch_archive_put_cached (&errstr, arch, revision, pristine_dir)) { safe_printfmt (2, "%s: unable to store cached revision of %s/%s (%s)\n", argv[0], archive, revision, errstr); exit (1); } } arch_archive_close (arch); rmrf_file (tmp_dir); lim_free (0, archive); lim_free (0, revision); } lim_free (0, default_archive); lim_free (0, cache_dir); return 0; } /* tag: Tom Lord Thu May 29 22:26:18 2003 (cacherev.c) q */ tla-1.3.5+dfsg/src/tla/libarch/cmd-move-id.h0000644000175000017500000000123410457622000017156 0ustar useruser/* cmd-move-id.h: * **************************************************************** * Copyright (C) 2003 Tom Lord, Stig Brautaset * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__CMD_MOVE_ID_H #define INCLUDE__LIBARCH__CMD_MOVE_ID_H #include "hackerlab/machine/types.h" extern t_uchar arch_cmd_move_id_help[]; /* automatically generated __STDC__ prototypes */ extern int arch_cmd_move_id (t_uchar * program_name, int argc, char * argv[]); #endif /* INCLUDE__LIBARCH__CMD_MOVE_ID_H */ /* tag: Stig Brautaset Sat Jun 7 16:06:01 BST 2003 (cmd-move-tag.h) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-make-archive.c0000644000175000017500000002223210457622000020146 0ustar useruser/* cmd-make-archive.c * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "config-options.h" #include "hackerlab/cmd/main.h" #include "tla/libfsutils/ensure-dir.h" #include "tla/libarch/archive.h" #include "tla/libarch/archives.h" #include "tla/libarch/namespace.h" #include "tla/libarch/cmdutils.h" #include "tla/libarch/cmd-make-archive.h" static t_uchar * usage = "[options] name location"; static t_uchar * usage2 = "[options] [name] location"; static t_uchar * version_string = (cfg__std__package " from regexps.com\n" "\n" "Copyright 2003 Tom Lord\n" "\n" "This is free software; see the source for copying conditions.\n" "There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\n" "PARTICULAR PURPOSE.\n" "\n" "Report bugs to " cfg__tla_bug_mail ".\n" "\n" cfg__std__release_id_string "\n"); #define OPTS(OP) \ OP (opt_help_msg, "h", "help", 0, \ "Display a help message and exit.") \ OP (opt_long_help, "H", 0, 0, \ "Display a verbose help message and exit.") \ OP (opt_version, "V", "version", 0, \ "Display a release identifier string\n" \ "and exit.") \ OP (opt_mirror, "m", "mirror MASTER", 1, \ "create mirror of specified archive") \ OP (opt_mirror_from, "M", "mirror-from MASTER-SOURCE", 1, \ "create pull-based mirror of specified archive") \ OP (opt_dot_listing, "l", "listing", 0, \ "Keep .listing files up-to-date in this archive.") \ OP (opt_tla, "t", "tla", 0, \ "Create a tla format archive.") \ OP (opt_baz, "b", "baz", 0, \ "Create a baz format archive (the default).") \ OP (opt_signed, "s", "signed", 0, \ "GPG sign the contents of this archive.") t_uchar arch_cmd_make_archive_help[] = ("create a new archive directory\n" "NAME is the global name for the archive. It must be an\n" "email address with a fully qualified domain name, optionally\n" "followed by \"--\" and a string of letters, digits, periods\n" "and dashes.\n" "\n" "With --mirror, label the new archive as a mirror of MASTER.\n" "Ordinary commits can not be made to a mirror archive, however\n" "the command \"tla archive-mirror\" can write to a mirror.\n" "\n" "Two special forms of this command are available:\n" "\n" " tla make-archive --mirror MASTER LOCATION\n" "\n" "is equivalent to:\n" "\n" " tla make-archive --mirror MASTER MASTER-MIRROR LOCATION\n" "\n" "and thus \"tla archive-mirror MASTER\" will push changes\n" "from MASTER to the newly created mirror.\n" "\n" " tla make-archive --mirror-from MASTER-SOURCE LOCATION\n" "\n" "is equivalent to:\n" "\n" " tla make-archive --mirror MASTER-SOURCE MASTER LOCATION\n" "\n" "and thus \"tla archive-mirror MASTER\" will pull changes\n" "from MASTER-SOURCE to the newly created mirror.\n" "\n" "The first of these two special forms is especially handy\n" "when creating a remote mirror in which to publish a local\n" "repository.\n" "\n" "The second special form is handy when creating a local mirror\n" "of a remote archive, locally bound to the remote archive's name.\n" "\n" "The --tla option creates a tla format archive, the default is \n" "to create a Bazaar archive.\n" "\n" ); enum options { OPTS (OPT_ENUM) }; static struct opt_desc opts[] = { OPTS (OPT_DESC) {-1, 0, 0, 0, 0} }; enum operation { op_print, op_set, }; int arch_cmd_make_archive (t_uchar * program_name, int argc, char * argv[]) { int o; struct opt_parsed * option; t_uchar * mirror_of = 0; t_uchar * mirror_from = 0; int dot_listing_lossage = 0; int signed_archive = 0; int tla_archive = 0; safe_buffer_fd (1, 0, O_WRONLY, 0); option = 0; while (1) { o = opt_standard (lim_use_must_malloc, &option, opts, &argc, argv, program_name, usage, version_string, arch_cmd_make_archive_help, opt_help_msg, opt_long_help, opt_version); if (o == opt_none) break; switch (o) { default: safe_printfmt (2, "unhandled option `%s'\n", option->opt_string); panic ("internal error parsing arguments"); usage_error: opt_usage (2, argv[0], program_name, usage, 1); safe_printfmt(2, "or if the option --mirror or --mirror-from is used \n"); opt_usage (2, argv[0], program_name, usage2, 1); exit (1); /* bogus_arg: */ safe_printfmt (2, "ill-formed argument for `%s' (`%s')\n", option->opt_string, option->arg_string); goto usage_error; case opt_mirror: { lim_free (0, mirror_from); mirror_from = 0; lim_free (0, mirror_of); mirror_of = str_save (0, option->arg_string); break; } case opt_mirror_from: { lim_free (0, mirror_of); mirror_of = 0; lim_free (0, mirror_from); mirror_from = str_save (0, option->arg_string); break; } case opt_dot_listing: dot_listing_lossage = 1; break; case opt_signed: signed_archive = 1; break; case opt_tla: tla_archive = 1; break; case opt_baz: tla_archive = 0; break; } } if (!(mirror_of || mirror_from) ? (argc != 3) : ((argc != 2) && (argc != 3))) goto usage_error; { t_uchar * name = 0; t_uchar * location = 0; if (mirror_of && !arch_valid_archive_name (mirror_of)) { safe_printfmt (2, "%s: invalid archive name supplied to --mirror (%s)\n", argv[0], mirror_of); exit (2); } if (mirror_from && !arch_valid_archive_name (mirror_from)) { safe_printfmt (2, "%s: invalid archive name supplied to --mirror-from (%s)\n", argv[0], mirror_from); exit (2); } if (!(mirror_of || mirror_from) || (argc == 3)) { name = str_save (0, argv[1]); location = str_save (0, argv[2]); } else if (mirror_of) { invariant (argc == 2); name = arch_mirrored_at_name (mirror_of); location = str_save (0, argv[1]); } else { size_t len; invariant (mirror_from && (argc == 2)); len = str_length (mirror_from); if ((len < (sizeof ("-SOURCE") - 1)) || str_cmp ("-SOURCE", mirror_from + len - (sizeof ("-SOURCE") - 1))) { safe_printfmt (2, "%s: --mirror-from requires an argument ending with -SOURCE\n got: %s\n", argv[0], mirror_from); exit (1); } name = str_save_n (0, mirror_from, len - (sizeof ("-SOURCE") - 1)); location = str_save (0, argv[1]); mirror_of = str_save (0, name); } if (!arch_valid_archive_name (name)) { safe_printfmt (1, "make-archive: invalid archive name (%s)\n", argv[1]); exit (1); } arch_check_uri (location); arch_make_archive (name, location, mirror_of, dot_listing_lossage, signed_archive, tla_archive); lim_free (0, name); lim_free (0, location); } lim_free (0, mirror_of); return 0; } /* tag: Tom Lord Mon May 19 19:23:42 2003 (make-archive.c) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-branch.h0000644000175000017500000000122110457622000017047 0ustar useruser/* cmd-branch.h: * **************************************************************** * Copyright (C) 2003 Tom Lord, Stig Brautaset * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__CMD_BRANCH_H #define INCLUDE__LIBARCH__CMD_BRANCH_H #include "hackerlab/machine/types.h" extern t_uchar arch_cmd_branch_help[]; /* automatically generated __STDC__ prototypes */ extern int arch_cmd_branch (t_uchar * program_name, int argc, char * argv[]); #endif /* INCLUDE__LIBARCH__CMD_TAG_H */ /* tag: Stig Brautaset Sat Jun 7 17:30:28 BST 2003 (cmd-branch.h) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-init-tree.h0000644000175000017500000000125110457622000017515 0ustar useruser/* cmd-init-tree.h: * **************************************************************** * Copyright (C) 2003 Tom Lord, Stig Brautaset * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__CMD_INIT_TREE_H #define INCLUDE__LIBARCH__CMD_INIT_TREE_H #include "hackerlab/machine/types.h" extern t_uchar arch_cmd_init_tree_help[]; /* automatically generated __STDC__ prototypes */ extern int arch_cmd_init_tree (t_uchar * program_name, int argc, char * argv[]); #endif /* INCLUDE__LIBARCH__CMD_INIT_TREE_H */ /* tag: Stig Brautaset Sat Jun 7 14:26:03 BST 2003 (cmd-init-tree.h) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-make-log.h0000644000175000017500000000124210457622000017311 0ustar useruser/* cmd-make-log.h: * **************************************************************** * Copyright (C) 2003 Tom Lord, Stig Brautaset * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__CMD_MAKE_LOG_H #define INCLUDE__LIBARCH__CMD_MAKE_LOG_H #include "hackerlab/machine/types.h" extern t_uchar arch_cmd_make_log_help[]; /* automatically generated __STDC__ prototypes */ extern int arch_cmd_make_log (t_uchar * program_name, int argc, char * argv[]); #endif /* INCLUDE__LIBARCH__CMD_MAKE_LOG_H */ /* tag: Stig Brautaset Sat Jun 7 15:59:28 BST 2003 (cmd-make-log.h) */ tla-1.3.5+dfsg/src/tla/libarch/configs.h0000644000175000017500000000237610457622000016515 0ustar useruser/* configs.h: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__CONFIGS_H #define INCLUDE__LIBARCH__CONFIGS_H #include "tla/libawk/relational.h" struct arch_build_config_params { int no_pristines; int hardlinks; int library; int sparse; int release_id; }; /* automatically generated __STDC__ prototypes */ extern t_uchar * arch_config_path (t_uchar * tree_root, t_uchar * config_name); extern rel_table arch_read_config (t_uchar * tree_root, t_uchar * config_name); extern rel_table arch_config_from_tree (t_uchar * tree_root, rel_table config_in); extern int arch_begin_new_config (t_uchar * tree_root, t_uchar * name, int force); extern void arch_finish_new_config (int fd, t_uchar * tree_root, t_uchar * name, int force); extern void arch_build_config (t_uchar * tree_root, t_uchar * config_name, struct arch_build_config_params * params, t_uchar * default_archive); #endif /* INCLUDE__LIBARCH__CONFIGS_H */ /* tag: Tom Lord Sat Jan 5 15:26:10 2002 (configs.h) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-get-changeset.c0000644000175000017500000000725210457622000020335 0ustar useruser/* cmd-get-changeset.c * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "config-options.h" #include "hackerlab/cmd/main.h" #include "tla/libarch/namespace.h" #include "tla/libarch/project-tree.h" #include "tla/libarch/my.h" #include "tla/libarch/archive.h" #include "tla/libarch/cmd.h" #include "tla/libarch/cmdutils.h" #include "tla/libarch/cmd-get-changeset.h" static t_uchar * usage = "[options] revision [dir]"; static t_uchar * version_string = (cfg__std__package " from regexps.com\n" "\n" "Copyright 2003 Tom Lord\n" "\n" "This is free software; see the source for copying conditions.\n" "There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\n" "PARTICULAR PURPOSE.\n" "\n" "Report bugs to " cfg__tla_bug_mail ".\n" "\n" cfg__std__release_id_string "\n"); #define OPTS(OP) \ OP (opt_help_msg, "h", "help", 0, \ "Display a help message and exit.") \ OP (opt_long_help, "H", 0, 0, \ "Display a verbose help message and exit.") \ OP (opt_version, "V", "version", 0, \ "Display a release identifier string\n" \ "and exit.") \ OP (opt_archive, "A", "archive", 1, \ "Override `my-default-archive'") t_uchar arch_cmd_get_changeset_help[] = ("retrieve a changeset from an archive\n" "Retrieve the changeset for REVISION and store it in the directory DIR\n" "(or a directory named REVISION.patches). DIR must not already exist.\n"); enum options { OPTS (OPT_ENUM) }; static struct opt_desc opts[] = { OPTS (OPT_DESC) {-1, 0, 0, 0, 0} }; int arch_cmd_get_changeset (t_uchar * program_name, int argc, char * argv[]) { int o; struct opt_parsed * option; t_uchar * default_archive; default_archive = 0; safe_buffer_fd (1, 0, O_WRONLY, 0); option = 0; while (1) { o = opt_standard (lim_use_must_malloc, &option, opts, &argc, argv, program_name, usage, version_string, arch_cmd_get_changeset_help, opt_help_msg, opt_long_help, opt_version); if (o == opt_none) break; switch (o) { default: safe_printfmt (2, "unhandled option `%s'\n", option->opt_string); panic ("internal error parsing arguments"); usage_error: opt_usage (2, argv[0], program_name, usage, 1); exit (1); /* bogus_arg: */ safe_printfmt (2, "ill-formed argument for `%s' (`%s')\n", option->opt_string, option->arg_string); goto usage_error; case opt_archive: { default_archive = str_save (0, option->arg_string); break; } } } if ((argc < 2) || (argc > 3)) goto usage_error; default_archive = arch_my_default_archive (default_archive); { t_uchar * revision = 0; t_uchar * output_dir = 0; struct arch_archive * arch = 0; revision = arch_determine_revision (&arch, default_archive, argv[1], argv[0]); if (argc == 3) output_dir = argv[2]; else output_dir = str_alloc_cat (0, revision, ".patches"); arch_check_for (arch, arch_req_patch_level, revision); arch_get_patch (arch, revision, output_dir); } return 0; } /* tag: Tom Lord Tue May 20 17:32:40 2003 (get-patch.c) */ tla-1.3.5+dfsg/src/tla/libarch/local-cache.h0000644000175000017500000000351410457622000017213 0ustar useruser/* local-cache.h: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__LOCAL_CACHE_H #define INCLUDE__LIBARCH__LOCAL_CACHE_H #include "tla/libarch/archive.h" /* automatically generated __STDC__ prototypes */ extern int arch_greedy_library_wants_revision (t_uchar * archive, t_uchar * revision); extern t_uchar * arch_find_local_copy (int chatter_fd, t_uchar * tree_root, t_uchar * cache_dir, t_uchar * archive, t_uchar * revision, t_uchar * hook); extern t_uchar * arch_find_or_make_local_copy (int chatter_fd, t_uchar * tree_root, t_uchar * cache_dir, struct arch_archive * arch, t_uchar * archive, t_uchar * revision); extern t_uchar * arch_find_or_make_tmp_local_copy (int chatter_fd, t_uchar * tmp_dir, t_uchar * tree_root, t_uchar * cache_dir, struct arch_archive * arch, t_uchar * archive, t_uchar * revision); #endif /* INCLUDE__LIBARCH__LOCAL_CACHE_H */ /* tag: Tom Lord Sat Jan 5 15:26:10 2002 (local-cache.h) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-export.h0000644000175000017500000000146310457622000017143 0ustar useruser/* export.h: * **************************************************************** * Copyright (C) 2003 Tom Lord * 2005 Canonical Ltd * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__CMD_EXPORT_H #define INCLUDE__LIBARCH__CMD_EXPORT_H #include "hackerlab/machine/types.h" #include "tla/libawk/relational.h" extern t_uchar arch_cmd_export_help[]; /* automatically generated __STDC__ prototypes */ extern int arch_cmd_export (t_uchar * program_name, int argc, char * argv[]); extern int arch_is_in_control_dir(t_uchar * path); extern rel_table arch_filter_control_files (rel_table index); rel_table arch_filter_to_subdir (rel_table index, t_uchar * prefix); #endif /* INCLUDE__LIBARCH__CMD_EXPORT_H */ tla-1.3.5+dfsg/src/tla/libarch/cmd-add-pristine.c0000644000175000017500000001133610457622000020200 0ustar useruser/* cmd-add-pristine.c * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "config-options.h" #include "hackerlab/cmd/main.h" #include "tla/libarch/namespace.h" #include "tla/libarch/project-tree.h" #include "tla/libarch/pristines.h" #include "tla/libarch/cmd.h" #include "tla/libarch/cmd-add-pristine.h" static t_uchar * usage = "[options] revision"; static t_uchar * version_string = (cfg__std__package " from regexps.com\n" "\n" "Copyright 2003 Tom Lord\n" "\n" "This is free software; see the source for copying conditions.\n" "There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\n" "PARTICULAR PURPOSE.\n" "\n" "Report bugs to " cfg__tla_bug_mail ".\n" "\n" cfg__std__release_id_string "\n"); #define OPTS(OP) \ OP (opt_help_msg, "h", "help", 0, \ "Display a help message and exit.") \ OP (opt_long_help, "H", 0, 0, \ "Display a verbose help message and exit.") \ OP (opt_version, "V", "version", 0, \ "Display a release identifier string\n" \ "and exit.") \ OP (opt_archive, "A", "archive", 1, \ "Override `my-default-archive'") \ OP (opt_dir, "d", "dir DIR", 1, \ "cd to DIR first") t_uchar arch_cmd_add_pristine_help[] = ("ensure that a project tree has a particular pristine revision\n" "Extract REVISION from an archive, creating a pristine copy.\n" "Store that pristine copy in the current directory's project tree\n"); enum options { OPTS (OPT_ENUM) }; static struct opt_desc opts[] = { OPTS (OPT_DESC) {-1, 0, 0, 0, 0} }; int arch_cmd_add_pristine (t_uchar * program_name, int argc, char * argv[]) { int o; struct opt_parsed * option; char * dir = 0; t_uchar * default_archive = 0; dir = str_save (0, "."); safe_buffer_fd (1, 0, O_WRONLY, 0); option = 0; while (1) { o = opt_standard (lim_use_must_malloc, &option, opts, &argc, argv, program_name, usage, version_string, arch_cmd_add_pristine_help, opt_help_msg, opt_long_help, opt_version); if (o == opt_none) break; switch (o) { default: safe_printfmt (2, "unhandled option `%s'\n", option->opt_string); panic ("internal error parsing arguments"); usage_error: opt_usage (2, argv[0], program_name, usage, 1); exit (1); /* bogus_arg: */ safe_printfmt (2, "ill-formed argument for `%s' (`%s')\n", option->opt_string, option->arg_string); goto usage_error; case opt_archive: { lim_free (0, default_archive); default_archive = str_save (0, option->arg_string); break; } case opt_dir: { lim_free (0, dir); dir = str_save (0, option->arg_string); break; } } } if (argc != 2) goto usage_error; { t_uchar * revspec; t_uchar * tree_root = 0; t_uchar * archive = 0; t_uchar * revision = 0; t_uchar * pristine_path = 0; if (default_archive && !arch_valid_archive_name (default_archive)) { safe_printfmt (2, "%s: invalid archive name (%s)\n", argv[0], default_archive); exit (2); } revspec = argv[1]; if (!arch_valid_package_name (revspec, arch_maybe_archive, arch_req_patch_level, 0)) { safe_printfmt (2, "%s: invalid revision name (%s)\n", argv[0], revspec); exit (2); } archive = arch_parse_package_name (arch_ret_archive, default_archive, revspec); revision = arch_parse_package_name (arch_ret_non_archive, 0, revspec); tree_root = arch_tree_root (0, dir, 0); if (!tree_root) { safe_printfmt (2, "%s: directory is not a project tree (%s)\n", argv[0], dir); exit (2); } pristine_path = arch_find_pristine (0, tree_root, archive, revision, arch_unlocked_pristine, arch_tree_pristine_search); if (!pristine_path) { arch_add_pristine (1, tree_root, 0, archive, revision); } } lim_free (0, dir); lim_free (0, default_archive); return 0; } /* tag: Tom Lord Tue Jun 10 20:38:56 2003 (cmd-add-pristine.c) */ tla-1.3.5+dfsg/src/tla/libarch/local-cache.c0000644000175000017500000001405210457622000017205 0ustar useruser/* local-cache.c: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/bugs/panic.h" #include "hackerlab/mem/alloc-limits.h" #include "hackerlab/char/str.h" #include "hackerlab/fs/file-names.h" #include "hackerlab/vu/safe.h" #include "tla/libfsutils/tmp-files.h" #include "tla/libfsutils/rmrf.h" #include "tla/libfsutils/ensure-dir.h" #include "tla/libarch/build-revision.h" #include "tla/libarch/pristines.h" #include "tla/libarch/libraries.h" #include "tla/libarch/chatter.h" #include "tla/libarch/my.h" #include "tla/libarch/library-txn.h" #include "tla/libarch/local-cache.h" #include "tla/libarch/namespace.h" int arch_greedy_library_wants_revision (t_uchar * archive, t_uchar * revision) { int answer = 0; rel_table lib_path = rel_table_nil; lib_path = arch_my_library_path (arch_library_path_add_order); if (rel_n_records (lib_path)) { t_uchar * default_add_lib = 0; default_add_lib = arch_library_add_choice (archive, revision, 0, 0); if (arch_library_is_greedy (default_add_lib)) { answer = 1; } lim_free (0, default_add_lib); } rel_free_table (lib_path); return answer; } t_uchar * arch_find_local_copy (int chatter_fd, t_uchar * tree_root, t_uchar * cache_dir, t_uchar * archive, t_uchar * revision, t_uchar * hook) { t_uchar * answer = 0; if (hook) { int error; error = arch_run_hook (hook, "ARCH_ARCHIVE", archive, "ARCH_REVISION", revision, (t_uchar*)0); if (error) { safe_printfmt (2, "tla: error running hook `%s' (%d)\n", hook, error); exit (2); } } if (!answer) answer = arch_library_find (rel_table_nil, archive, revision, 1); if (!answer && tree_root) answer = arch_find_pristine (0, tree_root, archive, revision, arch_any_pristine, arch_tree_and_sibling_pristine_search); if (!answer && cache_dir) answer = arch_find_pristine (0, cache_dir, archive, revision, arch_any_pristine, arch_cache_dir_pristine_search); if (!answer) { t_uchar *greedy_choice = 0; greedy_choice = arch_library_greedy_add_choice(archive, revision, 0, 1); if (greedy_choice) { /* something wants a pristine copy that isn't around. * * There is a greedy library in the path, so add the revision to it. */ struct arch_archive * arch = 0; arch_chatter (chatter_fd, "* auto-adding %s/%s to greedy revision library %s\n", archive, revision, greedy_choice); arch = arch_archive_connect (archive, 0); arch_library_add (chatter_fd, 1, arch, revision, greedy_choice, 0, -1, 0); answer = arch_library_find (rel_table_nil, archive, revision, 1); arch_archive_close (arch); } } return answer; } t_uchar * arch_find_or_make_local_copy (int chatter_fd, t_uchar * tree_root, t_uchar * cache_dir, struct arch_archive * arch, t_uchar * archive, t_uchar * revision) { t_uchar * answer = 0; t_uchar * parent_dir = 0; invariant (!!tree_root); invariant (!arch || !str_cmp (archive, arch->name)); if (!cache_dir) { parent_dir = file_name_directory_file (0, tree_root); cache_dir = parent_dir; } answer = arch_find_local_copy (chatter_fd, tree_root, cache_dir, archive, revision, "make-pristine"); if (!answer) { t_uchar * tree_dir = 0; t_uchar * tmp_path = 0; tree_dir = file_name_directory_file (0, tree_root); if (!tree_dir) tree_dir = str_save (0, "."); tmp_path = tmp_file_name (tree_dir, ",,new-pristine"); rmrf_file (tmp_path); safe_mkdir (tmp_path, 0777); arch_chatter (chatter_fd, "* build pristine tree for %s/%s\n", archive, revision); arch_build_revision (chatter_fd, tmp_path, arch, archive, revision, cache_dir); arch_install_pristine (tree_root, archive, revision, tmp_path); answer = arch_find_local_copy (chatter_fd, tree_root, cache_dir, archive, revision, 0); lim_free (0, tree_dir); lim_free (0, tmp_path); } if (parent_dir) lim_free (0, parent_dir); return answer; } t_uchar * arch_find_or_make_tmp_local_copy (int chatter_fd, t_uchar * tmp_dir, t_uchar * tree_root, t_uchar * cache_dir, struct arch_archive * arch, t_uchar * archive, t_uchar * revision) { t_uchar * answer = 0; t_uchar * parent_dir = 0; if (!cache_dir) { parent_dir = file_name_directory_file (0, tree_root); cache_dir = parent_dir; } answer = arch_find_local_copy (chatter_fd, tree_root, cache_dir, archive, revision, "make-tmp-pristine"); if (!answer) { t_uchar * tmp_stem = 0; t_uchar * tmp_path = 0; t_uchar * version = 0; tmp_stem = str_alloc_cat_many (0, ",,", revision, "--", archive, str_end); tmp_path = tmp_file_name (tmp_dir, tmp_stem); rmrf_file (tmp_path); ensure_directory_exists (tmp_dir); safe_mkdir (tmp_path, 0777); arch_chatter (chatter_fd, "* build reference tree for %s/%s\n", archive, revision); arch_build_revision (chatter_fd, tmp_path, arch, archive, revision, cache_dir); version = arch_parse_package_name (arch_ret_package_version, 0, revision); arch_set_tree_version(tmp_path, archive, version); lim_free (0, tmp_stem); lim_free (0, version); answer = tmp_path; } if (parent_dir) lim_free (0, parent_dir); return answer; } /* tag: Tom Lord Fri May 23 14:42:03 2003 (local-cache.c) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-tree-id.h0000644000175000017500000000130110457622000017142 0ustar useruser/* cmd-tree-id.h: * * vim:smartindent ts=8:sts=2:sta:et:ai:shiftwidth=2 **************************************************************** * Copyright (C) 2004 Canonical Limited * Authors: Robert Collins * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__CMD_TREE_ID_H #define INCLUDE__LIBARCH__CMD_TREE_ID_H #include "hackerlab/machine/types.h" extern t_uchar arch_cmd_tree_id_help[]; extern int arch_cmd_tree_id (t_uchar * program_name, int argc, char * argv[]); #endif /* INCLUDE__LIBARCH__CMD_TREE_ID_H */ /* tag: Tom Lord Fri May 23 14:06:15 2003 (cmd-tree-id.h) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-my-revision-library.c0000644000175000017500000001443710457622000021545 0ustar useruser/* cmd-my-revision-library.c * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "config-options.h" #include "hackerlab/cmd/main.h" #include "tla/libfsutils/dir-as-cwd.h" #include "tla/libarch/my.h" #include "tla/libarch/cmd-my-revision-library.h" static t_uchar * usage = "[options] [dir]"; static t_uchar * version_string = (cfg__std__package " from regexps.com\n" "\n" "Copyright 2003 Tom Lord\n" "\n" "This is free software; see the source for copying conditions.\n" "There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\n" "PARTICULAR PURPOSE.\n" "\n" "Report bugs to " cfg__tla_bug_mail ".\n" "\n" cfg__std__release_id_string "\n"); #define OPTS(OP) \ OP (opt_help_msg, "h", "help", 0, \ "Display a help message and exit.") \ OP (opt_long_help, "H", 0, 0, \ "Display a verbose help message and exit.") \ OP (opt_version, "V", "version", 0, \ "Display a release identifier string\n" \ "and exit.") \ OP (opt_errname, "e", "errname", 1, \ "specify program name for errors") \ OP (opt_delete, "d", "delete", 0, \ "unspecify your revision library") \ OP (opt_silent, "s", "silent", 0, \ "suppress reassuring messages") \ OP (opt_search, 0, "search", 0, \ "use the full search path") \ OP (opt_add, 0, "add", 0, \ "use the full add path") \ OP (opt_search_only, 0, "search-only", 0, \ "use the search-only path") \ OP (opt_add_only, 0, "add-only", 0, \ "use the add-only path") \ OP (opt_first, 0, "first", 0, \ "prepend to the path if setting (default appends)") t_uchar arch_cmd_my_revision_library_help[] = ("print or change your revision library path\n" "With no argument, and without -d, print the path to your revision\n" "library.\n" "\n" "With an argument, record DIR as the path to your revision library\n" "in ~/.arch-params/=revision-library\n" "\n" "With the option -d (--delete) and no argument, ensure that\n" "you do not have a revision library path set in ~/.arch-params.\n" "\n" "If no revision library is set, the program exits with status 1,\n" "printing an error message unless the -s (--silent) option is given.\n"); enum options { OPTS (OPT_ENUM) }; static struct opt_desc opts[] = { OPTS (OPT_DESC) {-1, 0, 0, 0, 0} }; int arch_cmd_my_revision_library (t_uchar * program_name, int argc, char * argv[]) { int o; struct opt_parsed * option; char * dir = 0; char * errname; enum arch_library_edit_op op = arch_library_last; int print_only = 1; int silent; enum arch_library_path_type path_type = arch_library_path_search_order; errname = argv[0]; silent = 0; safe_buffer_fd (1, 0, O_WRONLY, 0); option = 0; while (1) { o = opt_standard (lim_use_must_malloc, &option, opts, &argc, argv, program_name, usage, version_string, arch_cmd_my_revision_library_help, opt_help_msg, opt_long_help, opt_version); if (o == opt_none) break; switch (o) { default: safe_printfmt (2, "unhandled option `%s'\n", option->opt_string); panic ("internal error parsing arguments"); usage_error: opt_usage (2, argv[0], program_name, usage, 1); exit (1); /* bogus_arg: */ safe_printfmt (2, "ill-formed argument for `%s' (`%s')\n", option->opt_string, option->arg_string); goto usage_error; case opt_errname: { if (!option->arg_string[0]) errname = 0; else errname = str_save (0, option->arg_string); break; } case opt_delete: { op = arch_library_remove; print_only = 0; break; } case opt_first: { op = arch_library_first; print_only = 0; break; } case opt_silent: { silent = 1; break; } case opt_search: { path_type = arch_library_path_search_order; break; } case opt_add: { path_type = arch_library_path_add_order; break; } case opt_search_only: { path_type = arch_library_path_search_only; break; } case opt_add_only: { path_type = arch_library_path_add_only; break; } } } if (argc > 2) goto usage_error; if (print_only && (argc == 2)) { print_only = 0; op = arch_library_last; } if (!print_only && (argc < 2)) goto usage_error; if (argc == 2) { dir = str_save (0, argv[1]); } /**************************************************************** * Do It */ if (print_only) { rel_table lib_path = rel_table_nil; lib_path = arch_my_library_path (path_type); if (rel_n_records (lib_path)) { rel_print_table (1, lib_path); } else { if (errname) safe_printfmt (2, "%s: no revision library path set\n", errname); exit (1); } } else { arch_set_my_library_path (path_type, op, dir); } lim_free(0, dir); return 0; } /* tag: Tom Lord Wed May 21 13:36:58 2003 (my-revision-library.c) */ tla-1.3.5+dfsg/src/tla/libarch/=scraps/0000755000175000017500000000000010457622000016274 5ustar userusertla-1.3.5+dfsg/src/tla/libarch/=scraps/inventory.h0000644000175000017500000000345110457622000020505 0ustar useruser/* inventory.h: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__INVENTORY_H #define INCLUDE__LIBARCH__INVENTORY_H #include "hackerlab/os/sys/stat.h" #include "hackerlab/machine/types.h" #include "hackerlab/rx-posix/regex.h" struct arch_traversal_file { t_uchar * path; t_uchar * name; struct stat stat; }; typedef int (*arch_traversal_callback) (struct arch_traversal_file *, void *); enum arch_inventory_category { arch_inventory_source = 1, arch_inventory_precious = 2, arch_inventory_backup = 4, arch_inventory_junk = 8, arch_inventory_tree = 16, arch_inventory_unrecognized = 32, arch_inventory_excludes = 64 }; struct arch_id_program { int check_external_tags; int check_embedded_tags; int check_basename_embedded_tags; enum arch_inventory_category untagged_source_category; regex_t * regexp_list; }; typedef struct arch_id_program arch_id_program; /* automatically generated __STDC__ prototypes */ extern void arch_tree_traversal (t_uchar * root, arch_traversal_callback callback, void * closure); extern void arch_id_program_compile_external (arch_id_program * prog); extern void arch_id_program_compile_untagged_disposition (arch_id_program * prog, enum arch_inventory_category category); extern void arch_id_program_compile_embedded (arch_id_program * prog, t_uchar * regexp_source); extern void arch_free_id_program_data (arch_id_program * prog); #endif /* INCLUDE__LIBARCH__INVENTORY_H */ /* tag: Tom Lord Sat Jan 5 15:26:10 2002 (inventory.h) */ tla-1.3.5+dfsg/src/tla/libarch/=scraps/inventory.c0000644000175000017500000003371610457622000020507 0ustar useruser/* inventory.c: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/char/str.h" #include "hackerlab/char/char-class.h" #include "hackerlab/mem/mem.h" #include "hackerlab/sort/qsort.h" #include "hackerlab/arrays/ar.h" #include "hackerlab/fs/file-names.h" #include "hackerlab/vu/safe.h" #include "tla/libarch/inventory.h" /* __STDC__ prototypes for static functions */ static int cmp_traversal_files (void * va, void * vb, void * ign); static t_uchar * explicit_tag (t_uchar * id_file, t_uchar * prefix, t_uchar * postfix); static t_uchar * implicit_tag (struct arch_id_program * prog, t_uchar * file); static long smash_non_graphical (t_uchar * buf, long amt); void arch_tree_traversal (t_uchar * root, arch_traversal_callback callback, void * closure) { DIR * dir; struct arch_traversal_file * files = 0; int x; safe_opendir (&dir, root); while (1) { char * name = 0; struct arch_traversal_file * this; safe_readdir (&name, dir); if (!name) break; if ((name[0] == '.') && ((name[1] == '.') || !name[1])) { lim_free (0, name); continue; } this = (struct arch_traversal_file *)ar_push ((void **)&files, 0, sizeof (*files)); this->name = name; this->path = file_name_in_vicinity (0, root, name); safe_stat (this->path, &this->stat); /* name freed from files->name */ } safe_closedir (dir); quicksort ((void *)files, ar_size ((void *)files, 0, sizeof (*files)), sizeof (*files), cmp_traversal_files, 0); for (x = 0; x < ar_size ((void *)files, 0, sizeof (*files)); ++x) { if (callback (&files[x], closure) && S_ISDIR (files[x].stat.st_mode)) { arch_tree_traversal (files[x].path, callback, closure); } } for (x = 0; x < ar_size ((void *)files, 0, sizeof (*files)); ++x) { lim_free (0, files[x].name); } ar_free ((void **)&files, 0); } static int cmp_traversal_files (void * va, void * vb, void * ign) { struct arch_traversal_file * a = (struct arch_traversal_file *)va; struct arch_traversal_file * b = (struct arch_traversal_file *)vb; return str_cmp (a->path, b->path); } void arch_id_program_compile_external (arch_id_program * prog) { prog->check_external_tags = 1; } void arch_id_program_compile_untagged_disposition (arch_id_program * prog, enum arch_inventory_category category) { prog->untagged_source_category = category; } void arch_id_program_compile_basename_embedded (arch_id_program * prog) { prog->check_embedded_tags = 1; prog->check_basename_embedded_tags = 1; } void arch_id_program_compile_embedded (arch_id_program * prog, t_uchar * regexp_source) { regex_t * new_re; int reg_error; new_re = (regex_t *)ar_push ((void **)&prog->regexp_list, 0, sizeof (*new_re)); mem_set0 ((void *)new_re, sizeof (*new_re)); reg_error = regcomp (new_re, regexp_source, REG_EXTENDED | REG_NOSUB | REG_NEWLINE); if (reg_error) { char err_msg[256]; regerror (reg_error, new_re, err_msg, sizeof (err_msg)); safe_printfmt (2, "arch: illegal regexp in =tagging-method (%s)\n regexp: %s\n", err_msg, regexp_source); exit (2); } } void arch_free_id_program_data (arch_id_program * prog) { int x; for (x = 0; x < ar_size ((void *)prog->regexp_list, 0, sizeof (regex_t)); ++x) { regfree (&prog->regexp_list[x]); } } t_uchar * arch_inventory_id (enum arch_inventory_category * category_ret, arch_id_program * prog, t_uchar * path, struct stat * opt_lstat) { t_uchar * as_file = 0; t_uchar * dir = 0; t_uchar * dir_basename = 0; t_uchar * basename = 0; t_uchar * answer = 0; struct stat lstat; if (!path) return 0; as_file = file_name_from_directory (0, path); if (!as_file) return 0; basename = file_name_tail (0, as_file); dir = file_name_directory_file (0, as_file); if (!dir) dir = str_save (0, "."); dir_basename = file_name_tail (0, dir); if (opt_lstat) lstat = *opt_lstat; else safe_lstat (as_file, &lstat); /* Special control file tags * * If we're using external or embedded tags, arch control * files are treated specially. */ if (prog->check_external_tags || prog->check_embedded_tags) { if (!str_cmp (dir_basename, ".arch-ids")) { /* Explicit tag files use their contents as tag, with the * prefix 'E'. */ answer = explicit_tag (as_file, "E_", 0); } else if (!str_cmp (basename, ".arch-ids")) { /* Explicit tag file directories: */ long amt; answer = str_alloc_cat (0, "D_", as_file); amt = smash_non_graphical (answer, str_length (answer)); answer[amt] = 0; } else if ( !str_cmp_prefix ("./{arch}/", as_file) || !str_cmp ("./{arch}", as_file)) { /* Paths beginning with "./{arch}" are tagged with their own * path name, with the prefix "A_". The presumptions are that these * files never move, and that if a file is present, its contents are * invariant. */ long amt; answer = str_alloc_cat (0, "A_", as_file); amt = smash_non_graphical (answer, str_length (answer)); answer[amt] = 0; } } if (answer) goto done; /* Next, check for explicit tags (but not =default explicit tags, yet. */ if (prog->check_external_tags) { t_uchar * id_file = 0; if (S_ISDIR (lstat.st_mode)) { id_file = file_name_in_vicinity (0, as_file, ".arch-ids/=id"); } else { id_file = file_name_in_vicinity (0, dir, ".arch-ids/"); id_file = str_realloc_cat_many (0, id_file, basename, ".id", str_end); } answer = explicit_tag (id_file, "x_", 0); if (!answer) { /* Is there a .arch-ids/=all file? */ lim_free (0, id_file); if (S_ISDIR (lstat.st_mode)) { id_file = file_name_in_vicinity (0, as_file, ".arch-ids/=all"); } else { id_file = file_name_in_vicinity (0, dir, ".arch-ids/=all"); } answer = explicit_tag (id_file, "a_", (S_ISDIR (lstat.st_mode) ? (t_uchar *)"./." : basename)); } lim_free (0, id_file); } if (answer) goto done; /* Next, check for embedded tags. */ if (prog->check_embedded_tags) { answer = implicit_tag (prog, as_file); } if (answer) goto done; /* check for an =default tag */ if (prog->check_external_tags) { t_uchar * id_file = 0; if (S_ISDIR (lstat.st_mode)) { id_file = file_name_in_vicinity (0, as_file, ".arch-ids/=default"); } else { id_file = file_name_in_vicinity (0, dir, ".arch-ids/=default"); } answer = explicit_tag (id_file, "w_", (S_ISDIR (lstat.st_mode) ? (t_uchar *)"./." : basename)); lim_free (0, id_file); } if (answer) goto done; /* check for a =dont-care tag */ if (prog->check_embedded_tags) { t_uchar * id_file = 0; long amt; id_file = file_name_in_vicinity (0, dir, ".arch-ids/=dont-care"); if (!safe_access (id_file, F_OK)) { answer = str_alloc_cat (0, "k_", as_file); } else { answer = str_alloc_cat (0, "?_", as_file); } amt = smash_non_graphical (answer, str_length (answer)); answer[amt] = 0; lim_free (0, id_file); } if (answer) goto done; /* apply an optional `names' tag */ if (prog->untagged_source_category == arch_inventory_source) { answer = str_alloc_cat (0, "?", as_file); } done: lim_free (0, as_file); lim_free (0, dir); lim_free (0, basename); if (answer) *category_ret = arch_inventory_source; else *category_ret = prog->untagged_source_category; return answer; } static t_uchar * explicit_tag (t_uchar * id_file, t_uchar * prefix, t_uchar * postfix) { int errn; int id_fd; t_uchar * answer; char buf[1024]; long amt; id_fd = vu_open (&errn, id_file, O_RDONLY, 0); if (id_fd < 0) return 0; answer = str_save (0, prefix); while (1) { t_uchar * eol; amt = vu_read_retry (&errn, id_fd, buf, sizeof (buf)); if (amt < 0) { lim_free (0, answer); vu_close (&errn, id_fd); return 0; } if (!amt) break; eol = str_chr_index_n (buf, amt, '\n'); if (!eol) { t_uchar * old_answer; amt = smash_non_graphical (buf, amt); old_answer = answer; answer = str_realloc_cat_n (0, answer, buf, amt); } else { t_uchar * old_answer; amt = eol - (t_uchar *)buf; amt = smash_non_graphical (buf, amt); old_answer = answer; answer = str_realloc_cat_n (0, answer, buf, amt); } } answer = str_realloc_cat (0, answer, (postfix ? postfix : (t_uchar *)"")); vu_close (&errn, id_fd); return answer; } static t_uchar * implicit_tag (struct arch_id_program * prog, t_uchar * file) { t_uchar * answer = 0; int errn; t_uchar * basename = 0; int file_fd; char buf[1025]; int amt; int line; int bottom; file_fd = vu_open (&errn, file, O_RDONLY, 0); if (file_fd < 0) return 0; if (prog->check_basename_embedded_tags) basename = file_name_tail (0, file); for (bottom = 1; bottom >= 0; --bottom) { if (!bottom) { if (0 > vu_lseek (&errn, file_fd, 0, SEEK_SET)) { int ign; error_return: vu_close (&ign, file_fd); return 0; } amt = vu_read_retry (&errn, file_fd, buf, sizeof (buf) - 1); if (amt < 0) goto error_return; } else { struct stat file_stat_buf; char * x; if (0 > vu_fstat (&errn, file_fd, &file_stat_buf)) goto error_return; if (file_stat_buf.st_size > sizeof (buf)) amt = sizeof (buf); else continue; if (0 > vu_lseek (&errn, file_fd, -1026, SEEK_END)) goto error_return; amt = vu_read_retry (&errn, file_fd, buf, sizeof (buf)); if (amt < 0) goto error_return; x = str_chr_index_n (buf, amt, '\n'); if (!x) continue; amt = amt - (1 + x - buf); mem_move (buf, x + 1, amt); } buf[amt] = 0; line = 0; while (1) { char * eol_pos; int eol; int x; /* preconditions: * * line <= amt * buf + line is the start of a line in the file * buf[amt] == 0 */ if (line >= amt) break; eol_pos = str_chr_index (buf + line, '\n'); if (eol_pos) eol = eol_pos - buf; else eol = amt; /* Does this line match any of the tag regexps? */ for (x = 0; x < ar_size ((void *)prog->regexp_list, 0, sizeof (regex_t)); ++x) { regmatch_t match_pos; regmatch_t * match_pos_addr = &match_pos; if (regnexec (&prog->regexp_list[x], buf + line, eol - line, (size_t)1, &match_pos_addr, 0)) { int start_of_tag; /* found the tag. It begins after any whitespace that follows * the end of the match. */ for (start_of_tag = line + match_pos.rm_eo; (start_of_tag < eol) && char_is_blank (buf[start_of_tag]); ++start_of_tag) ; { long size; size = smash_non_graphical (buf + start_of_tag, eol - start_of_tag); answer = str_alloc_cat_n (0, "i_", buf + start_of_tag, size); break; } } } /* Does this line use an old-style basename tag? */ if (prog->check_basename_embedded_tags) { int start_of_tag; start_of_tag = line; /* skip punctuation and blanks at the start of the line */ while ((start_of_tag < eol) && (char_is_punct (buf[start_of_tag]) || char_is_blank (buf[start_of_tag]))) ++start_of_tag; /* Looks dangerous but remember: buf[amt] == 0 */ if (str_cmp_prefix (basename, buf + start_of_tag)) { start_of_tag += str_length (basename); while ((start_of_tag < eol) && char_is_blank (buf[line])) ++line; if ((start_of_tag < eol) && (buf[start_of_tag] == '-')) { long size; ++start_of_tag; size = smash_non_graphical (buf + start_of_tag, eol - start_of_tag); answer = str_alloc_cat_n (0, "i_", buf + start_of_tag, size); break; } } } line = eol + 1; } } if (0 > vu_close (&errn, file_fd)) goto error_return; lim_free (0, basename); return answer; } static long smash_non_graphical (t_uchar * buf, long amt) { long x; while (amt > 0) { if (!char_is_graph (buf[amt - 1])) --amt; else break; } for (x = 0; x < amt; ++x) { if (!char_is_graph (buf[x])) buf[x] = '_'; } return amt; } /* tag: Tom Lord Tue Jul 22 13:17:12 2003 (inventory.c) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-log-for-merge.c0000644000175000017500000001216210457622000020255 0ustar useruser/* cmd-log-for-merge.c * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "config-options.h" #include "hackerlab/cmd/main.h" #include "tla/libfsutils/file-contents.h" #include "tla/libarch/namespace.h" #include "tla/libarch/project-tree.h" #include "tla/libarch/merge-points.h" #include "tla/libarch/patch-logs.h" #include "tla/libarch/cmd-log-for-merge.h" static t_uchar * usage = "[options] [[archive]/version]"; static t_uchar * version_string = (cfg__std__package " from regexps.com\n" "\n" "Copyright 2003 Tom Lord\n" "\n" "This is free software; see the source for copying conditions.\n" "There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\n" "PARTICULAR PURPOSE.\n" "\n" "Report bugs to " cfg__tla_bug_mail ".\n" "\n" cfg__std__release_id_string "\n"); #define OPTS(OP) \ OP (opt_help_msg, "h", "help", 0, \ "Display a help message and exit.") \ OP (opt_long_help, "H", 0, 0, \ "Display a verbose help message and exit.") \ OP (opt_version, "V", "version", 0, \ "Display a release identifier string\n" \ "and exit.") \ OP (opt_archive, "A", "archive", 1, \ "Override `my-default-archive'") \ OP (opt_dir, "d", "dir DIR", 1, \ "cd to DIR first") \ OP (opt_reverse, "r", "reverse", 0, \ "sort from newest to oldest") t_uchar arch_cmd_log_for_merge_help[] = ("generate a log entry body for a merge\n" "Generate a log entry body describing a merge into VERSION.\n"); enum options { OPTS (OPT_ENUM) }; static struct opt_desc opts[] = { OPTS (OPT_DESC) {-1, 0, 0, 0, 0} }; int arch_cmd_log_for_merge (t_uchar * program_name, int argc, char * argv[]) { int o; struct opt_parsed * option; t_uchar * default_archive = 0; char * dir = 0; int reverse = 0; default_archive = 0; dir = str_save (0, "."); safe_buffer_fd (1, 0, O_WRONLY, 0); option = 0; while (1) { o = opt_standard (lim_use_must_malloc, &option, opts, &argc, argv, program_name, usage, version_string, arch_cmd_log_for_merge_help, opt_help_msg, opt_long_help, opt_version); if (o == opt_none) break; switch (o) { default: safe_printfmt (2, "unhandled option `%s'\n", option->opt_string); panic ("internal error parsing arguments"); usage_error: opt_usage (2, argv[0], program_name, usage, 1); exit (1); /* bogus_arg: */ safe_printfmt (2, "ill-formed argument for `%s' (`%s')\n", option->opt_string, option->arg_string); goto usage_error; case opt_archive: { default_archive = str_save (0, option->arg_string); break; } case opt_dir: { dir = str_save (0, option->arg_string); break; } case opt_reverse: { reverse = 1; break; } } } if (argc > 2) goto usage_error; { t_uchar * tree_root = 0; t_uchar * vsn_spec = 0; t_uchar * archive = 0; t_uchar * version = 0; t_uchar * msg = 0; tree_root = arch_tree_root (0, dir, 0); if (!tree_root) { safe_printfmt (2, "%s: not in project tree (%s)\n", argv[0], dir); exit (1); } if (argc == 2) { vsn_spec = str_save (0, argv[1]); } else { vsn_spec = arch_tree_version (tree_root); if (!vsn_spec) { safe_printfmt (2, "%s: no default tree version\n tree: %s\n", argv[0], tree_root); exit (1); } } if (default_archive) { if (!arch_valid_archive_name (default_archive)) { safe_printfmt (2, "%s: invalid archive name (%s)\n", argv[0], default_archive); exit (1); } } if (!arch_valid_package_name (vsn_spec, arch_maybe_archive, arch_req_version, 0)) { safe_printfmt (2, "%s: invalid version spec (%s)\n", argv[0], vsn_spec); exit (1); } archive = arch_parse_package_name (arch_ret_archive, default_archive, vsn_spec); version = arch_parse_package_name (arch_ret_non_archive, 0, vsn_spec); msg = arch_log_for_merge (tree_root, archive, version, reverse); safe_printfmt (1, "%s", msg); lim_free (0, tree_root); lim_free (0, vsn_spec); lim_free (0, archive); lim_free (0, version); lim_free (0, msg); } lim_free (0, default_archive); lim_free (0, dir); return 0; } /* tag: Tom Lord Tue Jun 3 02:07:41 2003 (log-for-merge.c) */ tla-1.3.5+dfsg/src/tla/libarch/patch-logs.c0000644000175000017500000007742610457622000017131 0ustar useruser/* patch-logs.c: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/bugs/panic.h" #include "hackerlab/os/errno.h" #include "hackerlab/os/errno-to-string.h" #include "hackerlab/char/char-class.h" #include "hackerlab/char/pika-escaping-utils.h" #include "hackerlab/char/str.h" #include "hackerlab/fs/file-names.h" #include "hackerlab/vu/safe.h" #include "tla/libfsutils/dir-listing.h" #include "tla/libfsutils/string-files.h" #include "tla/libfsutils/file-contents.h" #include "tla/libfsutils/ensure-dir.h" #include "tla/libfsutils/rmrf.h" #include "tla/libfsutils/copy-file.h" #include "tla/libarch/arch.h" #include "tla/libarch/namespace.h" #include "tla/libarch/merge-points.h" #include "tla/libarch/project-tree.h" #include "tla/libarch/patch-logs.h" t_uchar * arch_make_log_file (const t_uchar * tree_root, const t_uchar * archive, const t_uchar * version) { t_uchar * log_name = 0; t_uchar * log_path = 0; invariant (arch_valid_archive_name (archive)); invariant (arch_valid_package_name (version, arch_no_archive, arch_req_version, 0)); /* The VI-user flame generator: */ log_name = str_alloc_cat_many (0, "++log.", version, "--", archive, str_end); log_path = file_name_in_vicinity (0, tree_root, log_name); lim_free (0, log_name); return log_path; } t_uchar * arch_make_log (const t_uchar * tree_root, const t_uchar * archive, const t_uchar * version) { int errn; t_uchar * log_path = 0; int out_fd; log_path = arch_make_log_file (tree_root, archive, version); out_fd = vu_open (&errn, log_path, O_WRONLY | O_CREAT | O_EXCL, 0666); if (out_fd >= 0) { safe_printfmt (out_fd, "Summary: \nKeywords: \n\n"); safe_close (out_fd); } else if (errn != EEXIST) { safe_printfmt (2, "arch_make_log: I/O error (%s) creating %s\n", errno_to_string (errn), log_path); exit (2); } return log_path; } t_uchar * arch_auto_log_message (const t_uchar * tree_root, const t_uchar * archive, const t_uchar * version, const t_uchar * summary, const t_uchar * body) { t_uchar * merge_summary = 0; t_uchar * answer = 0; merge_summary = arch_log_for_merge (tree_root, archive, version, 0); answer = str_alloc_cat_many (0, "Summary: ", summary, "\n", "Keywords: \n", "\n", body, (body ? "\n" : 0), (body ? "\n" : 0), merge_summary, str_end); lim_free (0, merge_summary); return answer; } t_uchar * arch_log_for_merge (const t_uchar * tree_root, const t_uchar * archive, const t_uchar * version, int reverse) { rel_table new_logs = rel_table_nil; int string_fd; new_logs = arch_new_in_version (tree_root, archive, version); if (reverse) arch_sort_table_by_name_field (1, new_logs, 0); string_fd = make_output_to_string_fd (); if (rel_n_records (new_logs)) { int x; safe_printfmt (string_fd, "Patches applied:\n\n"); for (x = 0; x < rel_n_records (new_logs); ++x) { t_uchar * archive = 0; t_uchar * revision = 0; t_uchar * log_file = 0; t_uchar * log = 0; assoc_table headers = 0; const t_uchar * summary; archive = arch_parse_package_name (arch_ret_archive, 0, rel_peek_str (new_logs, x, 0)); revision = arch_parse_package_name (arch_ret_non_archive, 0, rel_peek_str (new_logs, x, 0)); invariant (!!archive && !!revision); log_file = arch_log_file (tree_root, archive, revision); log = file_contents (log_file); arch_parse_log (0, &headers, 0, log); summary = assoc_get_str_taking (headers, rel_make_field_str ("summary")); safe_printfmt (string_fd, " * %s\n", rel_peek_str (new_logs, x, 0)); safe_printfmt (string_fd, " %s\n\n", (summary ? summary : (t_uchar *)"")); lim_free (0, archive); lim_free (0, revision); lim_free (0, log_file); lim_free (0, log); free_assoc_table (headers); } } rel_free_table (new_logs); return string_fd_close (string_fd); } t_uchar * arch_log_dir (const t_uchar * tree_root, const t_uchar * archive, const t_uchar * version) { t_uchar * category; t_uchar * package; t_uchar * package_version; t_uchar * t; t_uchar * log_dir; invariant (arch_valid_archive_name (archive)); invariant (arch_valid_package_name (version, arch_no_archive, arch_req_version, 0)); category = arch_parse_package_name (arch_ret_category, 0, version); package = arch_parse_package_name (arch_ret_package, 0, version); package_version = arch_parse_package_name (arch_ret_package_version, 0, version); log_dir = arch_tree_ctl_dir (tree_root); t = file_name_in_vicinity (0, log_dir, category); lim_free (0, log_dir); log_dir = t; t = file_name_in_vicinity (0, log_dir, package); lim_free (0, log_dir); log_dir = t; t = file_name_in_vicinity (0, log_dir, package_version); lim_free (0, log_dir); log_dir = t; t = file_name_in_vicinity (0, log_dir, archive); lim_free (0, log_dir); log_dir = t; t = file_name_in_vicinity (0, log_dir, "patch-log"); lim_free (0, log_dir); log_dir = t; lim_free (0, category); lim_free (0, package); lim_free (0, package_version); return log_dir; } t_uchar * arch_log_file (const t_uchar * tree_root, const t_uchar * archive, const t_uchar * revision) { t_uchar * version; t_uchar * dir; t_uchar * lvl; t_uchar * file; version = arch_parse_package_name (arch_ret_package_version, 0, revision); dir = arch_log_dir (tree_root, archive, version); lvl = arch_parse_package_name (arch_ret_patch_level, 0, revision); file = file_name_in_vicinity (0, dir, lvl); lim_free (0, version); lim_free (0, dir); lim_free (0, lvl); return file; } t_uchar * arch_log_contents (const t_uchar * tree_root, const t_uchar * archive, const t_uchar * revision) { t_uchar * file = 0; t_uchar * answer = 0; if (!arch_tree_has_log (tree_root, archive, revision)) return 0; file = arch_log_file (tree_root, archive, revision); answer = file_contents (file); lim_free (0, file); return answer; } int arch_tree_has_log (const t_uchar * tree_root, const t_uchar * archive, const t_uchar * revision) { t_uchar * file = 0; int answer; file = arch_log_file (tree_root, archive, revision); answer = !safe_access (file, F_OK); lim_free (0, file); return answer; } void arch_add_log_version (const t_uchar * tree_root, const t_uchar * archive, const t_uchar * version) { t_uchar * log_dir; log_dir = arch_log_dir (tree_root, archive, version); ensure_directory_exists (log_dir); lim_free (0, log_dir); } void arch_remove_log_version (const t_uchar * tree_root, const t_uchar * archive, const t_uchar * version) { t_uchar * log_dir; log_dir = arch_log_dir (tree_root, archive, version); rmrf_file (log_dir); lim_free (0, log_dir); } int arch_has_patch_log (const t_uchar * tree_root, const t_uchar * archive, const t_uchar * version) { t_uchar * dir = 0; int answer = 0; dir = arch_log_dir (tree_root, archive, version); if (!safe_access (dir, F_OK)) answer = 1; lim_free (0, dir); return answer; } rel_table arch_log_versions (const t_uchar * tree_root, const t_uchar * only_archive, const t_uchar * only_category_param, const t_uchar * only_branch_param, const t_uchar * only_version_param) { t_uchar * only_category = 0; t_uchar * only_branch = 0; t_uchar * only_version = 0; t_uchar * logs_root; int lim; int x; rel_table dir_listing; rel_table categories; int c_lim; int c; rel_table branches; /* [0] == cat--branch, [1] == path of branch's log dir */ int b_lim; int b; rel_table versions; /* [0] == cat--branch--vsn, [1] == path of vsn's log dir */ int v_lim; int v; rel_table log_versions; /* [0] == fqversion, [1] == patch-log dir for fqversion */ logs_root = arch_tree_ctl_dir (tree_root); if (only_version_param) only_version = str_save (0, only_version_param); else only_version = 0; if (only_version && !only_branch_param) { only_branch = arch_parse_package_name (arch_ret_package, 0, only_version); } else if (only_branch_param) only_branch = str_save (0, only_branch_param); else only_branch = 0; if (only_branch && !only_category_param) { only_category = arch_parse_package_name (arch_ret_category, 0, only_branch); } else if (only_category_param) only_category = str_save (0, only_category_param); else only_category = 0; /**************************************************************** * Get a list of all categories in the log */ dir_listing = directory_files (logs_root); categories = rel_table_nil; lim = rel_n_records (dir_listing); for (x = 0; x < lim; ++x) { if (only_category && str_cmp (rel_peek_str (dir_listing, x, 0), only_category)) continue; if (arch_valid_package_name (rel_peek_str (dir_listing, x, 0), arch_no_archive, arch_req_category, 0)) rel_add_records (&categories, rel_copy_record (rel_peek_record (dir_listing, x)), rel_record_null); } rel_free_table (dir_listing); /**************************************************************** * For each category, get a list of each branch for it in the log */ branches = rel_table_nil; c_lim = rel_n_records (categories); for (c = 0; c < c_lim; ++c) { const t_uchar * category; t_uchar * cat_dir = 0; category = rel_peek_str (categories, c, 0); cat_dir = file_name_in_vicinity (0, logs_root, category); dir_listing = directory_files (cat_dir); lim = rel_n_records (dir_listing); for (x = 0; x < lim; ++x) { rel_field maybe_branch_field; const t_uchar * maybe_branch; t_uchar * branch_cat = 0; maybe_branch_field = rel_get_field (dir_listing, x, 0); maybe_branch = rel_field_str (maybe_branch_field); if (only_branch && str_cmp (only_branch, maybe_branch)) continue; if (!arch_valid_package_name (maybe_branch, arch_no_archive, arch_req_package, 0)) continue; branch_cat = arch_parse_package_name (arch_ret_category, 0, maybe_branch); if (!str_cmp (category, branch_cat)) { t_uchar * branch_path; branch_path = file_name_in_vicinity (0, cat_dir, maybe_branch); rel_field_ref (maybe_branch_field); rel_add_records (&branches, rel_make_record_2_taking (maybe_branch_field, rel_make_field_str (branch_path)), rel_record_null); lim_free (0, branch_path); } rel_field_unref (maybe_branch_field); lim_free (0, branch_cat); } rel_free_table (dir_listing); lim_free (0, cat_dir); } rel_free_table (categories); /**************************************************************** * For each branch, get a list of each version for it in the log */ versions = rel_table_nil; b_lim = rel_n_records (branches); for (b = 0; b < b_lim; ++b) { const t_uchar * branch; const t_uchar * branch_dir; branch = rel_peek_str (branches, b, 0); branch_dir = rel_peek_str (branches, b, 1); dir_listing = directory_files (branch_dir); lim = rel_n_records (dir_listing); for (x = 0; x < lim; ++x) { rel_field maybe_version_field; const t_uchar * maybe_version; t_uchar * version_pkg = 0; maybe_version_field = rel_get_field (dir_listing, x, 0); maybe_version = rel_field_str (maybe_version_field); if (only_version && str_cmp (only_version, maybe_version)) continue; if (!arch_valid_package_name (maybe_version, arch_no_archive, arch_req_version, 0)) continue; version_pkg = arch_parse_package_name (arch_ret_package, 0, maybe_version); if (!str_cmp (branch, version_pkg)) { t_uchar * version_path; version_path = file_name_in_vicinity (0, branch_dir, maybe_version); rel_field_ref (maybe_version_field); rel_add_records (&versions, rel_make_record_2_taking (maybe_version_field, rel_make_field_str (version_path)), rel_record_null); lim_free (0, version_path); } rel_field_unref (maybe_version_field); lim_free (0, version_pkg); } rel_free_table (dir_listing); } rel_free_table (branches); /**************************************************************** * For each version, get a list of each archive for it in the log */ log_versions = rel_table_nil; v_lim = rel_n_records (versions); for (v = 0; v < v_lim; ++v) { const t_uchar * version; const t_uchar * vsn_dir; version = rel_peek_str (versions, v, 0); vsn_dir = rel_peek_str (versions, v, 1); dir_listing = directory_files (vsn_dir); lim = rel_n_records (dir_listing); for (x = 0; x < lim; ++x) { const t_uchar * maybe_archive; t_uchar * archive_path = 0; t_uchar * patch_log_path = 0; maybe_archive = rel_peek_str (dir_listing, x, 0); if (only_archive && str_cmp (only_archive, maybe_archive)) continue; if (!arch_valid_archive_name (maybe_archive)) continue; archive_path = file_name_in_vicinity (0, vsn_dir, maybe_archive); patch_log_path = file_name_in_vicinity (0, archive_path, "patch-log"); if (!safe_access (patch_log_path, F_OK)) { t_uchar * fqversion; fqversion = arch_fully_qualify (maybe_archive, version); rel_add_records (&log_versions, rel_make_record_2_taking (rel_make_field_str (fqversion), rel_make_field_str (patch_log_path)), rel_record_null); lim_free (0, fqversion); } lim_free (0, archive_path); lim_free (0, patch_log_path); } rel_free_table (dir_listing); } rel_free_table (versions); if (only_category) lim_free (0, only_category); if (only_branch) lim_free (0, only_branch); if (only_version) lim_free (0, only_version); return log_versions; } t_uchar * arch_highest_patch_level (const t_uchar * tree_root, const t_uchar * archive, const t_uchar * version) { rel_table logs = rel_table_nil; t_uchar * answer = 0; logs = arch_logs (tree_root, archive, version, 0); if (rel_n_records (logs)) answer = str_save (0, rel_peek_str (logs, rel_n_records(logs) - 1, 0)); rel_free_table (logs); return answer; } t_uchar * arch_latest_logged_version (const t_uchar * tree_root, const t_uchar * archive, const t_uchar * package) { rel_table log_versions = rel_table_nil; t_uchar * answer = 0; log_versions = arch_log_versions (tree_root, archive, 0, package, 0); arch_sort_table_by_name_field (1, log_versions, 0); if (rel_n_records (log_versions)) { answer = arch_parse_package_name (arch_ret_non_archive, 0, rel_peek_str (log_versions, 0, 0)); } rel_free_table (log_versions); return answer; } rel_table arch_logs (const t_uchar * tree_root, const t_uchar * archive, const t_uchar * version, int full) { rel_table answer = rel_table_nil; /* [0] == lvl, [2] == path */ t_uchar * log_dir = 0; rel_table dir_listing = rel_table_nil; int lim; int x; answer = rel_table_nil; log_dir = arch_log_dir (tree_root, archive, version); if (safe_access (log_dir, F_OK)) goto leave; dir_listing = directory_files (log_dir); lim = rel_n_records (dir_listing); for (x = 0; x < lim; ++x) { if (arch_valid_patch_level_name (rel_peek_str (dir_listing, x, 0))) { t_uchar * path = 0; path = file_name_in_vicinity (0, log_dir, rel_peek_str (dir_listing, x, 0)); if (!full) { rel_add_records (&answer, rel_make_record_2_taking (rel_get_field (dir_listing, x, 0), rel_make_field_str (path)), rel_record_null); } else { t_uchar * full_name = 0; full_name = str_alloc_cat_many (0, archive, "/", version, "--", rel_peek_str (dir_listing, x, 0), str_end); rel_add_records (&answer, rel_make_record_2_taking (rel_make_field_str (full_name), rel_make_field_str (path)), rel_record_null); lim_free (0, full_name); } lim_free (0, path); } } leave: lim_free (0, log_dir); rel_free_table (dir_listing); if (full) arch_sort_table_by_name_field (0, answer, 0); else arch_sort_table_by_patch_level_field (0, answer, 0); return answer; } int arch_valid_log_file (const t_uchar * log) { size_t len; const t_uchar * pos; len = str_length (log); pos = log; /* Parse the headers. */ while (1) { const t_uchar * eol; const t_uchar * colon; eol = (const t_uchar *)str_chr_index (pos, '\n'); if (!eol) eol = pos + len; if (eol == pos) break; colon = (const t_uchar *)str_chr_index_n (pos, eol - pos, ':'); if (!colon) return 0; len -= (1 + (colon - pos)); pos = colon + 1; while (char_is_blank (*pos)) { ++pos; --len; } while (*eol && char_is_blank (eol[1])) { eol = str_chr_index (eol + 1, '\n'); if (!eol) eol = pos + len; } if (*eol) ++eol; len -= (eol - pos); pos = eol; } /* skip the blank line */ if (!*pos) return 0; return 1; } void arch_parse_log (rel_table * headers_list, assoc_table * headers, const t_uchar ** body, const t_uchar * log) { size_t len; const t_uchar * pos; len = str_length (log); pos = log; /* Parse and assemble the headers. */ while (1) { const t_uchar * eol; const t_uchar * colon; t_uchar * field_name = 0; t_uchar * field_value = 0; eol = (const t_uchar *)str_chr_index (pos, '\n'); if (!eol) eol = pos + len; if (eol == pos) break; colon = (const t_uchar *)str_chr_index_n (pos, eol - pos, ':'); if (!colon) panic ("bogusly formatted log message (missing field name in headers)"); field_name = str_save_n (0, pos, colon - pos); { size_t x; size_t l; l = str_length (field_name); for (x = 0; x < l; ++x) field_name[x] = char_to_lower (field_name[x]); } len -= (1 + (colon - pos)); pos = colon + 1; while (char_is_blank (*pos)) { ++pos; --len; } while (*eol && char_is_blank (eol[1])) { eol = str_chr_index (eol + 1, '\n'); if (!eol) eol = pos + len; } field_value = str_save_n (0, pos, eol - pos); if (headers) assoc_set_taking (headers, rel_make_field_str (field_name), rel_make_field_str (field_value)); if (headers_list) rel_add_records (headers_list, rel_make_record_2_taking (rel_make_field_str (field_name), rel_make_field_str (field_value)), rel_record_null); lim_free (0, field_name); lim_free (0, field_value); if (*eol) ++eol; len -= (eol - pos); pos = eol; } /* skip the blank line */ if (*pos) ++pos; /* save the body */ if (body) *body = str_save (0, pos); } void arch_print_headers_summary (int out_fd, int indent_level, assoc_table headers, int summarized_headers) { if (arch_include_date & summarized_headers) { const t_uchar * d; const t_uchar * separator; if (arch_include_creator & summarized_headers) { separator = ""; } else { separator = "\n"; } d = assoc_get_str_taking (headers, rel_make_field_str ("standard-date")); if (!d) safe_printfmt (out_fd, "%*s<<>>%s", indent_level, "", separator); else safe_printfmt (out_fd, "%*s%s%s", indent_level, "", d, separator); } if (arch_include_creator & summarized_headers) { const t_uchar * c; int creator_indent; if (arch_include_date & summarized_headers) { creator_indent = 6; } else { creator_indent = indent_level; } c = assoc_get_str_taking (headers, rel_make_field_str ("creator")); if (!c) safe_printfmt (out_fd, "%*s<<>>\n", creator_indent, ""); else safe_printfmt (out_fd, "%*s%s\n", creator_indent, "", c); } if (arch_include_summary & summarized_headers) { const t_uchar * s; s = assoc_get_str_taking (headers, rel_make_field_str ("summary")); if (!s) safe_printfmt (out_fd, "%*s<<>>\n", indent_level, ""); else { /* Iterate over the contents of the summary field. * * For each non-empty line, indent by `indent_level' spaces, * skip the leading whitespace of the summary line, * print all but the trailing whitespace on that line, * and print a newline. */ while (*s) { const t_uchar * this_line_start; const t_uchar * this_line_scan; const t_uchar * this_line_end; int this_line_len; this_line_start = s; /* Skip leading whitespace. Note that this will skip * over the newlines of entirely blank lines because * we are using `char_is_space'. On the second and * subsequent pass through this loop, it will also skip * over the final newline of the previous line. */ while (*this_line_start && char_is_space (*this_line_start)) ++this_line_start; /* Find last non-whitespace character on this line. * Leave `this_line_scan' at either the final 0 of the * string or at the newline that terminates this line. */ this_line_scan = this_line_start; this_line_end = this_line_start; while (*this_line_scan && !('\n' == *this_line_scan)) { if (!char_is_blank (*this_line_scan)) this_line_end = this_line_scan + 1; ++this_line_scan; } this_line_len = (int)(this_line_end - this_line_start); invariant (this_line_len >= 0); invariant ((size_t)this_line_len <= (this_line_end - this_line_start)); safe_printfmt (out_fd, "%*s%.*s\n", indent_level, "", this_line_len, this_line_start); s = this_line_scan; } } } if (summarized_headers & (arch_include_foreign_merges | arch_include_local_merges)) { t_uchar * this_archive = 0; t_uchar * this_revision = 0; t_uchar * this_fqrevision = 0; t_uchar * raw_merges = 0; rel_table new_patches = rel_table_nil; int any = 0; int x; this_archive = str_save_trimming (0, assoc_get_str_taking (headers, rel_make_field_str ("archive"))); this_revision = str_save_trimming (0, assoc_get_str_taking (headers, rel_make_field_str ("revision"))); this_fqrevision = arch_fully_qualify (this_archive, this_revision); raw_merges = str_save_trimming (0, assoc_get_str_taking (headers, rel_make_field_str ("new-patches"))); new_patches = rel_ws_split (raw_merges); arch_sort_table_by_name_field (0, new_patches, 0); for (x = 0; x < rel_n_records (new_patches); ++x) { if (arch_valid_package_name (rel_peek_str (new_patches, x, 0), arch_req_archive, arch_req_patch_level, 0) && str_cmp (rel_peek_str (new_patches, x, 0), this_fqrevision)) { t_uchar * patch_archive = 0; patch_archive = arch_parse_package_name (arch_ret_archive, 0, rel_peek_str (new_patches, x, 0)); if (str_cmp (patch_archive, this_archive) ? (summarized_headers & arch_include_foreign_merges) : (summarized_headers & arch_include_local_merges)) { if (!any) { if (arch_include_summary & summarized_headers) safe_printfmt (out_fd, "\n"); safe_printfmt (out_fd, "%*smerges in:\n", indent_level, ""); any = 1; } safe_printfmt (out_fd, "%*s%s\n", indent_level + 2, "", rel_peek_str (new_patches, x, 0)); } lim_free (0, patch_archive); } } lim_free (0, this_archive); lim_free (0, this_revision); lim_free (0, this_fqrevision); lim_free (0, raw_merges); rel_free_table (new_patches); } } static const char * no_dot (const char *name) { if (name[0] == '.' && name[1] == '/') return name + 2; else return name; } void arch_print_log_list_header (int out_fd, const t_uchar * header, rel_table list, int field) { int num_recs = rel_n_records (list); int escape_classes = arch_escape_classes; if (num_recs > 0) { int x; size_t col; int any_on_this_line; safe_printfmt (out_fd, "%s: ", header); col = str_length (header) + 2; any_on_this_line = 0; for (x = 0; x < num_recs; ++x) { t_uchar * escape_tmp = 0; size_t len_this; escape_tmp = pika_save_escape_iso8859_1 (0, 0, escape_classes, no_dot (rel_peek_str (list, x, field))); len_this = str_length (escape_tmp); if (!any_on_this_line) { safe_printfmt (out_fd, "%s", escape_tmp); col += len_this; any_on_this_line = 1; } else { if ((col + 1 + len_this) >= 60) { safe_printfmt (out_fd, "\n %s", escape_tmp); col = 4 + len_this; any_on_this_line = 1; } else { safe_printfmt (out_fd, " %s", escape_tmp); col += len_this; any_on_this_line = 1; } } lim_free (0, escape_tmp); } safe_printfmt (out_fd, "\n"); } } void arch_print_log_pairs_header (int out_fd, const t_uchar * header, rel_table list, int field_a, int field_b) { int num_recs = rel_n_records (list); int escape_classes = arch_escape_classes; if (num_recs > 0) { int x; int once; safe_printfmt (out_fd, "%s: ", header); once = 0; for (x = 0; x < num_recs; ++x) { t_uchar * escape_tmp_a; t_uchar * escape_tmp_b; escape_tmp_a = pika_save_escape_iso8859_1 (0, 0, escape_classes, rel_peek_str (list, x, field_a)); escape_tmp_b = pika_save_escape_iso8859_1 (0, 0, escape_classes, rel_peek_str (list, x, field_b)); safe_printfmt (out_fd, "%s%s %s", (once ? "\n " : ""), no_dot (escape_tmp_a), no_dot (escape_tmp_b)); once = 1; lim_free (0, escape_tmp_b); lim_free (0, escape_tmp_a); } safe_printfmt (out_fd, "\n"); } } void arch_copy_to_patch_log (const t_uchar * tree_root, const t_uchar * archive, const t_uchar * revision, const t_uchar * log_file) { int ign; t_uchar * version = 0; t_uchar * lvl = 0; t_uchar * log_dir = 0; t_uchar * dest_path = 0; t_uchar * dest_dir = 0; t_uchar * tmp_path = 0; version = arch_parse_package_name (arch_ret_package_version, 0, revision); lvl = arch_parse_package_name (arch_ret_patch_level, 0, revision); log_dir = arch_log_dir (tree_root, archive, version); dest_path = file_name_in_vicinity (0, log_dir, lvl); dest_dir = file_name_directory_file (0, dest_path); tmp_path = file_name_in_vicinity (0, dest_dir, ",,new-log"); ensure_directory_exists (log_dir); vu_unlink (&ign, tmp_path); copy_file (log_file, tmp_path); safe_rename (tmp_path, dest_path); lim_free (0, version); lim_free (0, lvl); lim_free (0, log_dir); lim_free (0, dest_path); lim_free (0, dest_dir); lim_free (0, tmp_path); } void arch_rename_to_patch_log (const t_uchar * tree_root, const t_uchar * archive, const t_uchar * revision, const t_uchar * log_file) { t_uchar * version = 0; t_uchar * lvl = 0; t_uchar * log_dir = 0; t_uchar * dest_path = 0; version = arch_parse_package_name (arch_ret_package_version, 0, revision); lvl = arch_parse_package_name (arch_ret_patch_level, 0, revision); log_dir = arch_log_dir (tree_root, archive, version); dest_path = file_name_in_vicinity (0, log_dir, lvl); ensure_directory_exists (log_dir); safe_rename (log_file, dest_path); lim_free (0, version); lim_free (0, lvl); lim_free (0, log_dir); lim_free (0, dest_path); } rel_table arch_all_logs (const t_uchar * tree_root) { rel_table log_versions = rel_table_nil; rel_table answer = rel_table_nil; int x; log_versions = arch_log_versions (tree_root, 0, 0, 0, 0); for (x = 0; x < rel_n_records (log_versions); ++x) { t_uchar * archive = 0; t_uchar * version = 0; rel_table in_this_log = rel_table_nil; archive = arch_parse_package_name (arch_ret_archive, 0, rel_peek_str (log_versions, x, 0)); version = arch_parse_package_name (arch_ret_non_archive, 0, rel_peek_str (log_versions, x, 0)); in_this_log = arch_logs (tree_root, archive, version, 1); rel_append_x (&answer, in_this_log); lim_free (0, archive); lim_free (0, version); rel_free_table (in_this_log); } arch_sort_table_by_name_field (0, answer, 0); rel_free_table (log_versions); return answer; } extern t_uchar * arch_tree_latest_revision (t_uchar * base_tree_root) { t_uchar * fq_version = arch_tree_version (base_tree_root); t_uchar * archive = arch_parse_package_name (arch_ret_archive, 0, fq_version); t_uchar * version = arch_parse_package_name (arch_ret_package_version, 0, fq_version); t_uchar * patch_level = arch_highest_patch_level (base_tree_root, archive, version); t_uchar * revision = str_alloc_cat_many (0, version, "--", patch_level, str_end); lim_free (0, patch_level); lim_free (0, version); lim_free (0, archive); lim_free (0, fq_version); return revision; } /* tag: Tom Lord Mon May 12 19:20:16 2003 (patch-logs.c) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-diff.h0000644000175000017500000000132210457622000016524 0ustar useruser/* cmd-diff.h: * **************************************************************** * Copyright (C) 2004 Canonical Ltd * Author: Robert Collins * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__CMD_DIFF_H #define INCLUDE__LIBARCH__CMD_DIFF_H #include "hackerlab/machine/types.h" extern t_uchar arch_cmd_diff_help[]; extern int arch_cmd_diff (t_uchar * program_name, int argc, char * argv[]); extern t_uchar * arch_diff_default_output_dir(void * context, t_uchar const *tree_root, t_uchar * dirname); #endif /* INCLUDE__LIBARCH__CMD_DIFF_H */ /* tag: Tom Lord Tue Jun 10 17:15:53 2003 (cmd-diff.h) */ tla-1.3.5+dfsg/src/tla/libarch/chatter.c0000644000175000017500000000120110457622000016474 0ustar useruser/* chatter.c: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/os/stdarg.h" #include "hackerlab/vu/safe.h" #include "tla/libarch/chatter.h" void arch_chatter (int chatter_fd, char * format, ...) { if (chatter_fd >= 0) { va_list ap; va_start (ap, format); safe_printfmt_va_list (chatter_fd, format, ap); va_end (ap); safe_flush (chatter_fd); } } /* tag: Tom Lord Tue Jun 10 14:55:23 2003 (chatter.c) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-redo.c0000644000175000017500000001365310457622000016552 0ustar useruser/* cmd-redo.c * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "config-options.h" #include "hackerlab/cmd/main.h" #include "hackerlab/fs/file-names.h" #include "tla/libfsutils/rmrf.h" #include "tla/libarch/namespace.h" #include "tla/libarch/project-tree.h" #include "tla/libarch/patch-logs.h" #include "tla/libarch/local-cache.h" #include "tla/libarch/proj-tree-lint.h" #include "tla/libarch/undo.h" #include "tla/libarch/apply-changeset.h" #include "tla/libarch/cmd.h" #include "tla/libarch/cmd-redo.h" /* __STDC__ prototypes for static functions */ static void redo_callback (void * ign, const char * fmt, va_list ap); static t_uchar * usage = "[options] [changeset]"; static t_uchar * version_string = (cfg__std__package " from regexps.com\n" "\n" "Copyright 2003 Tom Lord\n" "\n" "This is free software; see the source for copying conditions.\n" "There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\n" "PARTICULAR PURPOSE.\n" "\n" "Report bugs to " cfg__tla_bug_mail ".\n" "\n" cfg__std__release_id_string "\n"); #define OPTS(OP) \ OP (opt_help_msg, "h", "help", 0, \ "Display a help message and exit.") \ OP (opt_long_help, "H", 0, 0, \ "Display a verbose help message and exit.") \ OP (opt_version, "V", "version", 0, \ "Display a release identifier string\n" \ "and exit.") \ OP (opt_forward, "N", "forward", 0, \ "pass the --forward option to `patch'") \ OP (opt_keep, "k", "keep", 0, \ "do not delete the patch") \ OP (opt_quiet, "q", "quiet", 0, \ "no progress reports while computing changeset") \ OP (opt_dir, "d", "dir DIR", 1, \ "Operate on project tree in DIR (default `.')") \ OP (opt_unescaped, 0, "unescaped", 0, \ "show filenames in unescaped form") t_uchar arch_cmd_redo_help[] = ("redo changes in project tree\n" "Apply CHANGESET to the project tree and then delete CHANGESET.\n" "\n" "If CHANGESET is not specified, the highest numbered ,,undo-N directory\n" "in the project tree root is used.\n" "\n" "If --keep is given, the changeset directory is not deleted.\n" "\n" "See also \"tla undo --help\" and \"tla apply-changeset --help\".\n"); enum options { OPTS (OPT_ENUM) }; static struct opt_desc opts[] = { OPTS (OPT_DESC) {-1, 0, 0, 0, 0} }; int arch_cmd_redo (t_uchar * program_name, int argc, char * argv[]) { int o; struct opt_parsed * option; t_uchar * dir = 0; t_uchar * patch = 0; int quiet = 0; int keep = 0; int forward = 0; int escape_classes = arch_escape_classes; dir = str_save (0, "."); safe_buffer_fd (1, 0, O_WRONLY, 0); option = 0; while (1) { o = opt_standard (lim_use_must_malloc, &option, opts, &argc, argv, program_name, usage, version_string, arch_cmd_redo_help, opt_help_msg, opt_long_help, opt_version); if (o == opt_none) break; switch (o) { default: safe_printfmt (2, "unhandled option `%s'\n", option->opt_string); panic ("internal error parsing arguments"); usage_error: opt_usage (2, argv[0], program_name, usage, 1); exit (1); /* bogus_arg: */ safe_printfmt (2, "ill-formed argument for `%s' (`%s')\n", option->opt_string, option->arg_string); goto usage_error; case opt_dir: { lim_free (0, dir); dir = str_save (0, option->arg_string); break; } case opt_forward: { forward = 1; break; } case opt_keep: { keep = 1; break; } case opt_quiet: { quiet = 1; break; } case opt_unescaped: { escape_classes = 0; break; } } } if (argc != 1 && argc != 2) goto usage_error; if (argc == 2) patch = str_save (0, argv[1]); { t_uchar * tree_root = 0; tree_root = arch_tree_root (0, dir, 0); if (!tree_root) { safe_printfmt (2, "%s: not in a project tree\n dir: %s\n", argv[0], dir); exit (2); } if (!patch) { patch = arch_latest_undo_changeset (0, tree_root); if (!patch) { safe_printfmt (2, "%s: no changeset from undo found\n dir: %s\n", argv[0], tree_root); exit (2); } } { struct arch_tree_lint_result * lint = 0; if (!quiet) safe_printfmt (1, "* linting the source tree\n"); lint = arch_tree_lint (tree_root); if ((0 > arch_print_tree_lint_report ((quiet ? 2 : 1), lint, escape_classes))) { exit (1); } } { struct arch_apply_changeset_report report = {0, }; if (!quiet) { report.callback = redo_callback; report.thunk = (void *)1; } arch_apply_changeset (&report, patch, tree_root, arch_unspecified_id_tagging, arch_inventory_unrecognized, 0, forward, 0, 0, 0, escape_classes); if (!keep) rmrf_file (patch); arch_free_apply_changeset_report_data (&report); } lim_free (0, tree_root); } lim_free (0, dir); lim_free (0, patch); return 0; } static void redo_callback (void * ign, const char * fmt, va_list ap) { safe_printfmt_va_list (1, fmt, ap); safe_flush (1); } /* tag: Tom Lord Thu Jun 5 00:34:33 2003 (cmd-redo-changes.c) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-show-changeset.c0000644000175000017500000000650510457622000020536 0ustar useruser/* cmd-show-changeset.c * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "config-options.h" #include "hackerlab/cmd/main.h" #include "tla/libarch/changeset-report.h" #include "tla/libarch/cmd.h" #include "tla/libarch/cmd-show-changeset.h" static t_uchar * usage = "[options] [dir]"; static t_uchar * version_string = (cfg__std__package " from regexps.com\n" "\n" "Copyright 2003 Tom Lord\n" "\n" "This is free software; see the source for copying conditions.\n" "There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\n" "PARTICULAR PURPOSE.\n" "\n" "Report bugs to " cfg__tla_bug_mail ".\n" "\n" cfg__std__release_id_string "\n"); #define OPTS(OP) \ OP (opt_help_msg, "h", "help", 0, \ "Display a help message and exit.") \ OP (opt_long_help, "H", 0, 0, \ "Display a verbose help message and exit.") \ OP (opt_version, "V", "version", 0, \ "Display a release identifier string\n" \ "and exit.") \ OP (opt_diffs, 0, "diffs", 0, \ "include diff output") \ OP (opt_unescaped, 0, "unescaped", 0, \ "show filenames in unescaped form") t_uchar arch_cmd_show_changeset_help[] = ("generate a report from a changeset\n" "Produce a human-readable summary of a changeset.\n"); enum options { OPTS (OPT_ENUM) }; static struct opt_desc opts[] = { OPTS (OPT_DESC) {-1, 0, 0, 0, 0} }; int arch_cmd_show_changeset (t_uchar * program_name, int argc, char * argv[]) { int o; struct opt_parsed * option; int diffs; int escape_classes = arch_escape_classes; diffs = 0; safe_buffer_fd (1, 0, O_WRONLY, 0); option = 0; while (1) { o = opt_standard (lim_use_must_malloc, &option, opts, &argc, argv, program_name, usage, version_string, arch_cmd_show_changeset_help, opt_help_msg, opt_long_help, opt_version); if (o == opt_none) break; switch (o) { default: safe_printfmt (2, "unhandled option `%s'\n", option->opt_string); panic ("internal error parsing arguments"); usage_error: opt_usage (2, argv[0], program_name, usage, 1); exit (1); /* bogus_arg: */ safe_printfmt (2, "ill-formed argument for `%s' (`%s')\n", option->opt_string, option->arg_string); goto usage_error; case opt_diffs: { diffs = 1; break; } case opt_unescaped: { escape_classes = 0; break; } } } if (argc != 2) goto usage_error; { struct arch_changeset_report report; mem_set0 ((t_uchar *)&report, sizeof (report)); arch_evaluate_changeset (&report, argv[1]); arch_print_changeset (1, &report, diffs, escape_classes); } return 0; } /* tag: Tom Lord Thu May 15 16:21:45 2003 (show-changeset.c) */ tla-1.3.5+dfsg/src/tla/libarch/Makefile.in0000644000175000017500000000014310457622000016747 0ustar useruser include $(makefiles)/library.mk # tag: Tom Lord Mon May 12 09:25:19 2003 (libarch/Makefile.in) # tla-1.3.5+dfsg/src/tla/libarch/cmd-rm.h0000644000175000017500000000117210457622000016235 0ustar useruser/* cmd-rm.h: * **************************************************************** * Copyright (C) 2003, 2004 Tom Lord, Stefanie Tellex * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__CMD_RM_H #define INCLUDE__LIBARCH__CMD_RM_H #include "hackerlab/machine/types.h" extern t_uchar arch_cmd_rm_help[]; /* automatically generated __STDC__ prototypes */ extern int arch_cmd_rm (t_uchar * program_name, int argc, char * argv[]); #endif /* INCLUDE__LIBARCH__CMD_RM_H */ /* tag: Rob Weir Sun Sep 21 15:22:29 EST 2003 (cmd-rm.h) */ tla-1.3.5+dfsg/src/tla/libarch/inode-sig.h0000644000175000017500000000334710457622000016742 0ustar useruser/* inode-sig.h: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__INODE_SIG_H #define INCLUDE__LIBARCH__INODE_SIG_H #include "tla/libawk/relational.h" #include "tla/libawk/associative.h" /* automatically generated __STDC__ prototypes */ extern t_uchar * arch_statb_inode_sig (struct stat * statb); extern rel_table arch_tree_inode_sig (const t_uchar * tree_root); extern void arch_snap_inode_sig (const t_uchar * tree_root, const t_uchar * archive, const t_uchar * revision); extern void arch_snap_inode_sig_files (const t_uchar * tree_root, const t_uchar * archive, const t_uchar * prev_revision, const t_uchar * revision, rel_table file_list); extern int arch_valid_inode_sig (const t_uchar * tree_root, const t_uchar * archive, const t_uchar * revision); extern void arch_read_inode_sig (rel_table * as_table, assoc_table * as_assoc, const t_uchar * tree_root, const t_uchar * archive, const t_uchar * revision); extern void arch_read_id_shortcut (assoc_table * ids_shortcut, const t_uchar * tree_root); #endif /* INCLUDE__LIBARCH__INODE_SIG_H */ /* tag: Tom Lord Fri Sep 12 10:33:59 2003 (inode-sig.h) */ tla-1.3.5+dfsg/src/tla/libarch/whats-new.h0000644000175000017500000000116210457622000016772 0ustar useruser/* whats-new.h: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__WHATS_NEW_H #define INCLUDE__LIBARCH__WHATS_NEW_H #include "tla/libawk/relational.h" /* automatically generated __STDC__ prototypes */ extern rel_table arch_whats_new (t_uchar * tree_root, struct arch_archive * arch, t_uchar * version, int skip_present); #endif /* INCLUDE__LIBARCH__WHATS_NEW_H */ /* tag: Tom Lord Sat Jan 5 15:26:10 2002 (whats-new.h) */ tla-1.3.5+dfsg/src/tla/libarch/project-tree.c0000644000175000017500000003240710457622000017461 0ustar useruser/* project-tree.c: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/bugs/panic.h" #include "hackerlab/os/errno.h" #include "hackerlab/vu/safe.h" #include "hackerlab/fs/cwd.h" #include "hackerlab/fs/file-names.h" #include "hackerlab/char/str.h" #include "tla/libarch/archive.h" #include "tla/libarch/namespace.h" #include "tla/libarch/patch-logs.h" #include "tla/libarch/changelogs.h" #include "tla/libarch/inv-ids.h" #include "tla/libarch/my.h" #include "tla/libarch/project-tree.h" /* These must agree about the format version number. */ static const int arch_tree_format_vsn = 1; static const char arch_tree_format_vsn_id[] = "1"; static char arch_tree_format_str[] = "Hackerlab arch project directory, format version 1."; t_uchar * arch_tree_format_string (void) { return (t_uchar *)arch_tree_format_str; } void arch_init_tree (const t_uchar * tree_root) { t_uchar * arch_dir = 0; t_uchar * arch_vsn_file = 0; t_uchar * id_tagging_method_file = 0; t_uchar * id_tagging_method_defaults = 0; int out_fd; arch_dir = file_name_in_vicinity (0, tree_root, "{arch}"); arch_vsn_file = file_name_in_vicinity (0, arch_dir, ".arch-project-tree"); id_tagging_method_file = file_name_in_vicinity (0, arch_dir, "=tagging-method"); safe_mkdir (arch_dir, 0777); out_fd = safe_open (arch_vsn_file, O_WRONLY | O_CREAT | O_EXCL, 0666); safe_printfmt (out_fd, "%s\n", arch_tree_format_string ()); safe_close (out_fd); id_tagging_method_defaults = arch_default_id_tagging_method_contents (arch_unspecified_id_tagging); out_fd = safe_open (id_tagging_method_file, O_WRONLY | O_CREAT | O_EXCL, 0666); safe_printfmt (out_fd, "%s", id_tagging_method_defaults); safe_close (out_fd); lim_free (0, arch_dir); lim_free (0, arch_vsn_file); lim_free (0, id_tagging_method_defaults); lim_free (0, id_tagging_method_file); } t_uchar * arch_tree_root (enum arch_tree_state * state, const t_uchar * input_dir, int accurate) { int here_fd; int errn; t_uchar * dir; t_uchar * answer; answer = 0; if (input_dir) { here_fd = safe_open (".", O_RDONLY, 0); safe_chdir (input_dir); } dir = (t_uchar *)current_working_directory (&errn, 0); if (!dir) panic ("unable to compute current working directory"); if (input_dir) { safe_fchdir (here_fd); safe_close (here_fd); } while (1) { t_uchar * arch_dir; t_uchar * arch_version_file; t_uchar * next_dir; int found_it; arch_dir = file_name_in_vicinity (0, dir, "{arch}"); arch_version_file = file_name_in_vicinity (0, arch_dir, ".arch-project-tree"); found_it = (!safe_access (arch_dir, F_OK) && !safe_access (arch_version_file, F_OK)); lim_free (0, arch_dir); lim_free (0, arch_version_file); if (found_it) { answer = str_save (0, dir); break; } if (!str_cmp (dir, "/")) break; next_dir = file_name_directory_file (0, dir); lim_free (0, dir); dir = next_dir; next_dir = 0; } if (answer && accurate) { t_uchar * rc_name; t_uchar * cd_name; t_uchar * mc_name; rc_name = file_name_in_vicinity (0, answer, "{arch}/++resolve-conflicts"); cd_name = file_name_in_vicinity (0, answer, "{arch}/++commit-definite"); mc_name = file_name_in_vicinity (0, answer, "{arch}/++mid-commit"); if (state) { if (!safe_access (rc_name, F_OK)) *state = arch_tree_in_resolve_conflicts; else if (!safe_access (cd_name, F_OK)) *state = arch_tree_in_commit_definite; else if (!safe_access (mc_name, F_OK)) *state = arch_tree_in_mid_commit; else *state = arch_tree_in_ok_state; } lim_free (0, rc_name); lim_free (0, cd_name); lim_free (0, mc_name); } lim_free (0, dir); return answer; } t_uchar * arch_tree_ctl_dir (const t_uchar * tree_root) { return file_name_in_vicinity (0, tree_root, "{arch}"); } int arch_tree_has_meta_flag (const t_uchar * const tree_root) { t_uchar * ctl_dir = 0; t_uchar * meta_file = 0; struct stat meta_stat; int errn = 0; int tree_answer = -69; int answer = -69; ctl_dir = arch_tree_ctl_dir (tree_root); meta_file = file_name_in_vicinity (0, ctl_dir, "=meta"); if (0 == vu_stat (&errn, meta_file, &meta_stat)) { if (meta_stat.st_size != 0) { safe_printfmt (2, "illegal ./{arch}/=meta file (non-empty)\n file: %s\n", meta_file); panic ("abort"); } tree_answer = 1; } else { if (errn == ENOENT) tree_answer = 0; else panic ("strange i/o error"); } if (tree_answer != 1) { answer = tree_answer; } else { answer = arch_my_allow_full_meta (); if (!answer) { safe_printfmt (2, ("warning: ignoring =meta flag in tree\n" " to enable full metadata patching (of owner,\n" " group owner, and 12 permission bits rather\n" " than 9 when a tree has an =meta file) create\n" " the empty file:\n" " ~/.arch-params/metadata-rules.\n")); } } lim_free (0, ctl_dir); lim_free (0, meta_file); return answer; } void arch_set_tree_version (const t_uchar * tree_root, const t_uchar * archive, const t_uchar * version) { t_uchar * default_version_file = 0; t_uchar * fqversion = 0; int out_fd; invariant (arch_valid_archive_name (archive)); invariant (arch_valid_package_name (version, arch_no_archive, arch_req_version, 0)); default_version_file = file_name_in_vicinity (0, tree_root, "{arch}/++default-version"); fqversion = arch_fully_qualify (archive, version); out_fd = safe_open (default_version_file, O_WRONLY | O_CREAT, 0666); safe_ftruncate (out_fd, (long)0); safe_printfmt (out_fd, "%s\n", fqversion); safe_close (out_fd); lim_free (0, default_version_file); lim_free (0, fqversion); } t_uchar * arch_tree_version (const t_uchar * tree_root) { t_uchar * default_version_file; int in_fd; t_uchar * file_contents; size_t file_contents_len; t_uchar * nl; default_version_file = file_name_in_vicinity (0, tree_root, "{arch}/++default-version"); if (safe_access (default_version_file, F_OK)) { lim_free (0, default_version_file); return 0; } in_fd = safe_open (default_version_file, O_RDONLY, 0666); file_contents = 0; file_contents_len = 0; safe_file_to_string (&file_contents, &file_contents_len, in_fd); safe_close (in_fd); nl = str_chr_index_n (file_contents, file_contents_len, '\n'); if (nl) file_contents_len = nl - file_contents; file_contents = lim_realloc (0, file_contents, file_contents_len + 1); file_contents[file_contents_len] = 0; invariant (arch_valid_package_name (file_contents, arch_req_archive, arch_req_version, 0)); lim_free (0, default_version_file); return file_contents; } t_uchar * arch_try_tree_version (const t_uchar * cmd) { t_uchar * version_spec = 0; t_uchar * tree_root = 0; tree_root = arch_tree_root (0, ".", 0); if (!tree_root) { safe_printfmt (2, "%s: not in a project tree\n", cmd); exit (2); } version_spec = arch_tree_version (tree_root); if (!version_spec) { safe_printfmt (2, "%s: tree has no default version set\n tree: %s\n", cmd, tree_root); exit (2); } lim_free (0, tree_root); return version_spec; } void arch_start_tree_commit (const t_uchar * tree_root, const t_uchar * log) { int ign; t_uchar * mid_commit_file = 0; t_uchar * mid_commit_tmp = 0; int out_fd; mid_commit_file = file_name_in_vicinity (0, tree_root, "{arch}/++mid-commit"); mid_commit_tmp = file_name_in_vicinity (0, tree_root, "{arch}/,,mid-commit"); vu_unlink (&ign, mid_commit_tmp); vu_unlink (&ign, mid_commit_file); out_fd = safe_open (mid_commit_tmp, O_WRONLY | O_CREAT | O_EXCL, 0666); safe_printfmt (out_fd, "%s", log); safe_close (out_fd); safe_rename (mid_commit_tmp, mid_commit_file); lim_free (0, mid_commit_file); } void arch_finish_tree_commit (const t_uchar * tree_root, const t_uchar * archive, const t_uchar * revision, const t_uchar * changelog_loc, int const full_meta) { t_uchar * mid_commit_file = 0; t_uchar * commit_definite_file = 0; mid_commit_file = file_name_in_vicinity (0, tree_root, "{arch}/++mid-commit"); commit_definite_file = file_name_in_vicinity (0, tree_root, "{arch}/++commit-definite"); safe_rename (mid_commit_file, commit_definite_file); if (changelog_loc) { const int full_meta = arch_tree_has_meta_flag (tree_root); struct stat statb; t_uchar * level = 0; t_uchar * version = 0; t_uchar * changelog_path = 0; t_uchar * changelog_dir = 0; t_uchar * changelog_tmp = 0; mode_t mode; int fd; level = arch_parse_package_name (arch_ret_patch_level, 0, revision); version = arch_parse_package_name (arch_ret_package_version, 0, revision); changelog_path = file_name_in_vicinity (0, tree_root, changelog_loc); changelog_dir = file_name_directory_file (0, changelog_path); changelog_tmp = file_name_in_vicinity (0, changelog_dir, ",,new-changelog"); safe_stat (changelog_path, &statb); if (full_meta) { mode = statb.st_mode & 07777; } else { mode = statb.st_mode & 0777; } fd = safe_open (changelog_tmp, O_WRONLY | O_CREAT | O_TRUNC, mode); safe_fchmod (fd, mode); if (full_meta) safe_fchown (fd, statb.st_uid, statb.st_gid); arch_generate_changelog (fd, tree_root, 0, 0, level, commit_definite_file, archive, version); safe_close (fd); safe_rename (changelog_tmp, changelog_path); lim_free (0, level); lim_free (0, version); lim_free (0, changelog_path); lim_free (0, changelog_dir); lim_free (0, changelog_tmp); } arch_copy_to_patch_log (tree_root, archive, revision, commit_definite_file); safe_unlink (commit_definite_file); lim_free (0, mid_commit_file); lim_free (0, commit_definite_file); } void arch_abort_tree_commit (const t_uchar * tree_root, const t_uchar * archive, const t_uchar * revision) { t_uchar * mid_commit_file = 0; mid_commit_file = file_name_in_vicinity (0, tree_root, "{arch}/++mid-commit"); safe_unlink (mid_commit_file); lim_free (0, mid_commit_file); } t_uchar * arch_get_tree_fqrevision(const t_uchar *tree_root) { t_uchar * fqvsn = arch_tree_version(tree_root); t_uchar * latest_log = 0; t_uchar * tree_arch = 0; t_uchar * tree_version = 0; t_uchar * rvsnspec = 0; tree_arch = arch_parse_package_name (arch_ret_archive, 0, fqvsn); tree_version = arch_parse_package_name (arch_ret_non_archive, 0, fqvsn); if (!fqvsn) { safe_printfmt (2, "unable to determine project tree identifier.\n tree: %s\n", tree_root); return 0; } latest_log = arch_highest_patch_level (tree_root, tree_arch, tree_version); if (!latest_log) { safe_printfmt (2, "tree shows no revisions in version\n version: %s\n", fqvsn); } else rvsnspec = str_alloc_cat_many (0, fqvsn, "--", latest_log, str_end); lim_free (0, tree_arch); lim_free (0, tree_version); lim_free (0, latest_log); lim_free(0, fqvsn); return rvsnspec; } t_uchar * arch_get_fqrevision(const t_uchar *fqvsn) { t_uchar * rvsnspec = 0; t_uchar * tree_arch = 0; t_uchar * tree_version = 0; t_uchar * latest_log = 0; tree_arch = arch_parse_package_name (arch_ret_archive, 0, fqvsn); tree_version = arch_parse_package_name (arch_ret_non_archive, 0, fqvsn); invariant (!!tree_arch); if (!arch_valid_package_name (tree_version, arch_no_archive, arch_req_version, 0)) { rvsnspec = str_save (0, fqvsn); } else { rel_table archive_levels ; struct arch_archive *arch = arch_archive_connect (tree_arch, 0); invariant (!!arch); archive_levels = arch_archive_revisions (arch, tree_version, 0); if (!rel_n_records (archive_levels)) { safe_printfmt (2, "(WEIRD ERROR!) archive has no revisions for version (%s/%s)\n", tree_arch, tree_version); exit (1); } latest_log = str_save (0, rel_peek_str (archive_levels, rel_n_records (archive_levels) - 1, 0)); rel_free_table (archive_levels); arch_archive_close (arch); if (!latest_log) { safe_printfmt (2, "tree shows no revisions in version\n version: %s\n", fqvsn); } else rvsnspec = str_alloc_cat_many (0, fqvsn, "--", latest_log, str_end); } lim_free (0, tree_arch); lim_free (0, tree_version); lim_free (0, latest_log); return rvsnspec; } /* tag: Tom Lord Mon May 12 10:12:38 2003 (project-tree.c) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-ancestry.c0000644000175000017500000003054510457622000017450 0ustar useruser/* cmd-ancestry.c: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "config-options.h" #include "hackerlab/cmd/main.h" #include "hackerlab/fs/file-names.h" #include "hackerlab/fs/cwd.h" #include "tla/libfsutils/tmp-files.h" #include "tla/libfsutils/rmrf.h" #include "tla/libarch/namespace.h" #include "tla/libarch/project-tree.h" #include "tla/libarch/my.h" #include "tla/libarch/archive.h" #include "tla/libarch/archives.h" #include "tla/libarch/patch-logs.h" #include "tla/libarch/cmdutils.h" #include "tla/libarch/cmd-ancestry.h" static t_uchar * usage = "[options] [revision]"; static t_uchar * version_string = (cfg__std__package " from regexps.com\n" "\n" "Copyright 2003 Tom Lord\n" "\n" "This is free software; see the source for copying conditions.\n" "There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\n" "PARTICULAR PURPOSE.\n" "\n" "Report bugs to " cfg__tla_bug_mail ".\n" "\n" cfg__std__release_id_string "\n"); #define OPTS(OP) \ OP (opt_help_msg, "h", "help", 0, \ "Display a help message and exit.") \ OP (opt_long_help, "H", 0, 0, \ "Display a verbose help message and exit.") \ OP (opt_version, "V", "version", 0, \ "Display a release identifier string\n" \ "and exit.") \ OP (opt_archive, "A", "archive", 1, \ "Override `my-default-archive'") \ OP (opt_dir, "d", "dir DIR", 1, \ "cd to DIR first") \ OP (opt_merges, "m", "merges", 0, \ "show merges into this development line") \ OP (opt_reverse, "r", "reverse", 0, \ "list oldest to newest") \ OP (opt_summary, "s", "summary", 0, \ "print a summary of each patch") \ OP (opt_creator, "c", "creator", 0, \ "print the creator of each patch") \ OP (opt_date, "D", "date", 0, \ "print the date of each patch") t_uchar arch_cmd_ancestry_help[] = ("display the ancestory of a revision\n" "Print the ancestry of a revision.\n"); enum options { OPTS (OPT_ENUM) }; static struct opt_desc opts[] = { OPTS (OPT_DESC) {-1, 0, 0, 0, 0} }; int arch_cmd_ancestry (t_uchar * program_name, int argc, char * argv[]) { int o; struct opt_parsed * option; t_uchar * default_archive = 0; t_uchar * dir = 0; int merges = 0; int reverse = 0; int wanted_headers = 0; safe_buffer_fd (1, 0, O_WRONLY, 0); dir = str_save (0, "."); option = 0; while (1) { o = opt_standard (lim_use_must_malloc, &option, opts, &argc, argv, program_name, usage, version_string, arch_cmd_ancestry_help, opt_help_msg, opt_long_help, opt_version); if (o == opt_none) break; switch (o) { default: safe_printfmt (2, "unhandled option `%s'\n", option->opt_string); panic ("internal error parsing arguments"); usage_error: opt_usage (2, argv[0], program_name, usage, 1); exit (1); /* bogus_arg: */ safe_printfmt (2, "ill-formed argument for `%s' (`%s')\n", option->opt_string, option->arg_string); goto usage_error; case opt_archive: { lim_free (0, default_archive); default_archive = str_save (0, option->arg_string); break; } case opt_dir: { lim_free (0, dir); dir = str_save (0, option->arg_string); break; } case opt_merges: { merges = 1; break; } case opt_reverse: { reverse = 1; break; } case opt_summary: { wanted_headers |= arch_include_summary; break; } case opt_creator: { wanted_headers |= arch_include_creator; break; } case opt_date: { wanted_headers |= arch_include_date; break; } } } if (argc > 2) goto usage_error; default_archive = arch_my_default_archive (default_archive); { t_uchar * revision_spec = 0; t_uchar * archive = 0; t_uchar * version = 0; t_uchar * revision = 0; struct arch_archive * arch = 0; t_uchar * this_archive = 0; t_uchar * this_version = 0; if (argc == 2) revision_spec = str_save (0, argv[1]); else revision_spec = arch_try_tree_version (program_name); if (!arch_valid_package_name (revision_spec, arch_maybe_archive, arch_req_package, 1)) { safe_printfmt (2, "%s: invalid revision spec (%s)\n", argv[0], revision_spec); exit (2); } archive = arch_parse_package_name (arch_ret_archive, default_archive, revision_spec); arch = arch_archive_connect (archive, 0); if (arch_valid_package_name (revision_spec, arch_maybe_archive, arch_req_package, 0)) { t_uchar * package = 0; rel_table versions = rel_table_nil; arch_check_for (arch, arch_req_package, revision_spec); package = arch_parse_package_name (arch_ret_package, 0, revision_spec); versions = arch_archive_versions (arch, package); arch_sort_table_by_name_field (1, versions, 0); if (!rel_n_records (versions)) { safe_printfmt (2, "%s: package has no versions (%s)\n", argv[0], revision_spec); exit (1); } lim_free (0, revision_spec); revision_spec = str_save (0, rel_peek_str (versions, 0, 0)); lim_free (0, package); rel_free_table (versions); } if (arch_valid_package_name (revision_spec, arch_maybe_archive, arch_req_version, 0)) { rel_table revisions = rel_table_nil; arch_check_for (arch, arch_req_version, revision_spec); version = arch_parse_package_name (arch_ret_package_version, 0, revision_spec); revisions = arch_archive_revisions (arch, version, 1); arch_sort_table_by_name_field (1, revisions, 0); if (!rel_n_records (revisions)) { safe_printfmt (2, "%s: no revisions in version (%s/%s)\n", argv[0], archive, revision_spec); exit (2); } revision = arch_parse_package_name (arch_ret_non_archive, 0, rel_peek_str (revisions, 0, 0)); rel_free_table (revisions); } else { arch_check_for (arch, arch_req_patch_level, revision_spec); version = arch_parse_package_name (arch_ret_package_version, 0, revision_spec); revision = arch_parse_package_name (arch_ret_non_archive, 0, revision_spec); } while (1) { t_uchar * version_wanted = 0; t_uchar * level = 0; /* pre-condition: * * archive and revision tell us the next revision to print. * * if arch is 0, we can not reach that archive (or find any further information). * otherwise, arch is connected to archive. * * this_archive is 0 or the name of the last archive name printed * this_version is 0 or the name of the last package-version printed */ if (str_cmp (this_archive, archive)) { safe_printfmt (1, "%s\n", archive); lim_free (0, this_archive); this_archive = str_save (0, archive); lim_free (0, this_version); this_version = 0; } version_wanted = arch_parse_package_name (arch_ret_package_version, 0, revision); if (str_cmp (this_version, version_wanted)) { safe_printfmt (1, " %s\n", version_wanted); lim_free (0, this_version); this_version = str_save (0, version_wanted); } level = arch_parse_package_name (arch_ret_patch_level, 0, revision); safe_printfmt (1, " %s", level); if (!arch) { safe_printfmt (1, " (\?\?\?)\n(\?\?\?)\n"); break; } else { t_uchar * fq_next_revision = 0; t_uchar * next_archive = 0; t_uchar * next_version = 0; t_uchar * next_revision = 0; fq_next_revision = arch_ancestor_revision (arch, revision); if (fq_next_revision) { next_archive = arch_parse_package_name (arch_ret_archive, 0, fq_next_revision); next_version = arch_parse_package_name (arch_ret_package_version, 0, fq_next_revision); next_revision = arch_parse_package_name (arch_ret_non_archive, 0, fq_next_revision); } if (wanted_headers) { t_uchar * log = 0; assoc_table headers = 0; log = arch_archive_log (arch, revision); arch_parse_log (0, &headers, 0, log); safe_printfmt (1, "\n"); arch_print_headers_summary (1, 6, headers, wanted_headers); lim_free (0, log); free_assoc_table (headers); } else if (fq_next_revision) { /* scan backwards in the same archive version and print " ... level" */ while (fq_next_revision && !str_cmp (next_archive, archive) && !str_cmp (next_version, version)) { lim_free (0, revision); revision = str_save (0, next_revision); lim_free (0, level); level = arch_parse_package_name (arch_ret_patch_level, 0, revision); lim_free (0, fq_next_revision); lim_free (0, next_archive); lim_free (0, next_version); lim_free (0, next_revision); fq_next_revision = arch_ancestor_revision (arch, revision); if (fq_next_revision) { next_archive = arch_parse_package_name (arch_ret_archive, 0, fq_next_revision); next_version = arch_parse_package_name (arch_ret_package_version, 0, fq_next_revision); next_revision = arch_parse_package_name (arch_ret_non_archive, 0, fq_next_revision); } } safe_printfmt (1, " ... %s\n", level); } else safe_printfmt (1, "\n"); safe_flush (1); if (!fq_next_revision) { break; } else { /* update the invariant variables */ lim_free (0, version); version = next_version; next_version = 0; revision = next_revision; next_revision = 0; lim_free (0, fq_next_revision); fq_next_revision = 0; if (!str_cmp (next_archive, archive)) { lim_free (0, next_archive); next_archive = 0; } else { t_uchar * location; lim_free (0, archive); archive = next_archive; next_archive = 0; arch_archive_close (arch); arch = 0; location = arch_archive_location (archive, 1); if (location) arch = arch_archive_connect (archive, 0); lim_free (0, location); } } } lim_free (0, version_wanted); lim_free (0, level); } arch_archive_close (arch); lim_free (0, revision_spec); lim_free (0, archive); lim_free (0, version); lim_free (0, revision); lim_free (0, this_archive); lim_free (0, this_version); } lim_free (0, default_archive); return 0; } /* tag: Tom Lord Wed Jul 16 13:58:59 2003 (cmd-ancestry.c) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-build-config.h0000644000175000017500000000127210457622000020162 0ustar useruser/* cmd-build-config.h: * **************************************************************** * Copyright (C) 2003 Tom Lord, Stig Brautaset * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__CMD_BUILD_CONFIG_H #define INCLUDE__LIBARCH__CMD_BUILD_CONFIG_H #include "hackerlab/machine/types.h" extern t_uchar arch_cmd_build_config_help[]; /* automatically generated __STDC__ prototypes */ extern int arch_cmd_build_config (t_uchar * program_name, int argc, char * argv[]); #endif /* INCLUDE__LIBARCH__CMD_BUILD_CONFIG_H */ /* tag: Stig Brautaset Sat Jun 7 13:08:55 BST 2003 (cmd-buildcfg.h) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-make-archive.h0000644000175000017500000000127610457622000020160 0ustar useruser/* cmd-make-archive.h: * **************************************************************** * Copyright (C) 2003 Tom Lord, Stig Brautaset * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__CMD_MAKE_ARCHIVE_H #define INCLUDE__LIBARCH__CMD_MAKE_ARCHIVE_H #include "hackerlab/machine/types.h" extern t_uchar arch_cmd_make_archive_help[]; /* automatically generated __STDC__ prototypes */ extern int arch_cmd_make_archive (t_uchar * program_name, int argc, char * argv[]); #endif /* INCLUDE__LIBARCH__CMD_MAKE_ARCHIVE_H */ /* tag: Stig Brautaset Sat Jun 7 15:51:23 BST 2003 (cmd-make-archive.h) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-delta.c0000644000175000017500000002431110457622000016703 0ustar useruser/* cmd-delta.c: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "config-options.h" #include "hackerlab/cmd/main.h" #include "hackerlab/fs/file-names.h" #include "hackerlab/fs/cwd.h" #include "tla/libfsutils/tmp-files.h" #include "tla/libfsutils/rmrf.h" #include "tla/libfsutils/dir-as-cwd.h" #include "tla/libarch/namespace.h" #include "tla/libarch/project-tree.h" #include "tla/libarch/my.h" #include "tla/libarch/archive.h" #include "tla/libarch/pristines.h" #include "tla/libarch/local-cache.h" #include "tla/libarch/make-changeset.h" #include "tla/libarch/changeset-report.h" #include "tla/libarch/inode-sig.h" #include "tla/libarch/cmdutils.h" #include "tla/libarch/cmd.h" #include "tla/libarch/cmd-delta.h" /* __STDC__ prototypes for static functions */ static t_uchar * interpret_delta_path (t_uchar ** arch, t_uchar ** rev, t_uchar * scratch_dir, t_uchar * default_archive, t_uchar * spec, t_uchar * cache_dir); static void delta_callback (void * vfd, const char * fmt, va_list ap); static t_uchar * usage = "[options] (REVISION|TREE)-A (REVISION|TREE)-B [DESTDIR]"; static t_uchar * version_string = (cfg__std__package " from regexps.com\n" "\n" "Copyright 2003 Tom Lord\n" "\n" "This is free software; see the source for copying conditions.\n" "There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\n" "PARTICULAR PURPOSE.\n" "\n" "Report bugs to " cfg__tla_bug_mail ".\n" "\n" cfg__std__release_id_string "\n"); #define OPTS(OP) \ OP (opt_help_msg, "h", "help", 0, \ "Display a help message and exit.") \ OP (opt_long_help, "H", 0, 0, \ "Display a verbose help message and exit.") \ OP (opt_version, "V", "version", 0, \ "Display a release identifier string\n" \ "and exit.") \ OP (opt_archive, "A", "archive", 1, \ "Override `my-default-archive'") \ OP (opt_cache, 0, "cache DIR", 1, \ "specify a cache root for pristine copies") \ OP (opt_no_changeset, "n" , "no-changeset", 0, \ "do not generate a changeset") \ OP (opt_diff, 0, "diffs", 0, \ "print changeset report with diffs (implies -n)") \ OP (opt_unescaped, 0, "unescaped", 0, \ "show filenames in unescaped form") t_uchar arch_cmd_delta_help[] = ("compute a changeset (or diff) between any two trees or revisions\n" "\n" "Given (REVISION|TREE)-A and (REVISION|TREE)-B, tla will build a changeset\n" "that comprises the changes between REVISION-A and REVISION-B\n" "\n" "Example:\n" " tla delta tla--devo--1.1--patch-6 \\\n" " tla--devo--1.1--patch-8 ,,changes\n" "\n" " Will pull patch-6 and patch-8 from tla--devo--1.1 and compute\n" " a changeset, which will be saved in a newly created ,,changes\n" " directory. If you would like a report instead,\n" " append the --diffs option"); enum options { OPTS (OPT_ENUM) }; static struct opt_desc opts[] = { OPTS (OPT_DESC) {-1, 0, 0, 0, 0} }; int arch_cmd_delta (t_uchar * program_name, int argc, char * argv[]) { int o; struct opt_parsed * option; t_uchar * default_archive = 0; t_uchar * cache_dir = 0; int no_changeset = 0; int report = 0; int escape_classes = arch_escape_classes; safe_buffer_fd (1, 0, O_WRONLY, 0); option = 0; while (1) { o = opt_standard (lim_use_must_malloc, &option, opts, &argc, argv, program_name, usage, version_string, arch_cmd_delta_help, opt_help_msg, opt_long_help, opt_version); if (o == opt_none) break; switch (o) { default: safe_printfmt (2, "unhandled option `%s'\n", option->opt_string); panic ("internal error parsing arguments"); usage_error: opt_usage (2, argv[0], program_name, usage, 1); exit (1); /* bogus_arg: */ safe_printfmt (2, "ill-formed argument for `%s' (`%s')\n", option->opt_string, option->arg_string); goto usage_error; case opt_archive: { lim_free (0, default_archive); default_archive = str_save (0, option->arg_string); break; } case opt_cache: { lim_free (0, cache_dir); cache_dir = str_save (0, option->arg_string); break; } case opt_diff: { report = 1; no_changeset = 1; break; } case opt_no_changeset: { no_changeset = 1; break; } case opt_unescaped: { escape_classes = 0; break; } } } if (argc < 3 || argc > 4) goto usage_error; if (default_archive && !arch_valid_archive_name (default_archive)) { safe_printfmt (2, "%s: invalid archive name (%s)\n", argv[0], default_archive); exit (1); } default_archive = arch_my_default_archive (default_archive); { t_uchar * a_spec; t_uchar * b_spec; t_uchar * dest = 0; t_uchar * scratch_dir = 0; t_uchar * orig = 0; t_uchar * mod = 0; struct arch_make_changeset_report make_report = {0, }; t_uchar * orig_archive = 0; t_uchar * orig_revision = 0; assoc_table inode_shortcut = 0; a_spec = argv[1]; b_spec = argv[2]; if (argc == 4) { dest = str_save (0, argv[3]); } else { dest = tmp_file_name (".", ",,delta"); rmrf_file (dest); } scratch_dir = tmp_file_name (".", ",,delta-scratch"); orig = interpret_delta_path (&orig_archive, &orig_revision, scratch_dir, default_archive, a_spec, cache_dir); mod = interpret_delta_path (0, 0, scratch_dir, default_archive, b_spec, cache_dir); safe_printfmt (1, "* computing changeset\n"); make_report.callback = delta_callback; make_report.thunk = (void *)1; if (orig_archive) { arch_read_inode_sig (0, &inode_shortcut, mod, orig_archive, orig_revision); } arch_make_changeset (&make_report, orig, mod, dest, arch_unspecified_id_tagging, arch_inventory_unrecognized, rel_table_nil, inode_shortcut, 0, escape_classes); if (report) { struct arch_changeset_report r = {rel_table_nil, }; safe_printfmt (1, "* changeset report\n"); arch_evaluate_changeset (&r, dest); arch_print_changeset (1, &r, 1, escape_classes); arch_free_changeset_report_data (&r); } rmrf_file (scratch_dir); if (no_changeset) rmrf_file (dest); else safe_printfmt (1, "* changeset: %s\n", dest); lim_free (0, dest); lim_free (0, scratch_dir); lim_free (0, orig); lim_free (0, mod); lim_free (0, orig_archive); lim_free (0, orig_revision); free_assoc_table (inode_shortcut); arch_free_make_changeset_report_data (&make_report); } lim_free (0, default_archive); return 0; } static t_uchar * interpret_delta_path (t_uchar ** arch, t_uchar ** rev, t_uchar * scratch_dir, t_uchar * default_archive, t_uchar * spec, t_uchar * cache_dir) { t_uchar * answer = 0; if (arch_valid_package_name (spec, arch_maybe_archive, arch_req_patch_level, 0)) { t_uchar * archive = 0; t_uchar * revision = 0; struct arch_archive *arch_struct = 0; archive = arch_parse_package_name (arch_ret_archive, default_archive, spec); revision = arch_parse_package_name (arch_ret_non_archive, 0, spec); arch_struct = arch_archive_connect (archive, 0); arch_check_for (arch_struct, arch_req_patch_level, revision); safe_printfmt (1, "* finding or making %s\n", spec); answer = arch_find_or_make_tmp_local_copy (1, scratch_dir, 0, cache_dir, arch_struct, archive, revision); arch_archive_close (arch_struct); if (arch) *arch = archive; else lim_free (0, archive); if (rev) *rev = revision; else lim_free (0, revision); } else if (arch_valid_patch_level_name (spec)) { t_uchar * archive = 0; t_uchar * revision = 0; t_uchar * fqvsn = 0; t_uchar * tree_version = 0; t_uchar * tree_root = 0; tree_root = arch_tree_root (0, ".", 0); if (!tree_root) { safe_printfmt (2, "tla delta: not in a project tree\n dir: %s\n", directory_as_cwd (".")); exit (2); } fqvsn = arch_tree_version (tree_root); if (!fqvsn) { safe_printfmt (2, "tla delta: no tree-version set\n tree: %s\n", tree_root); exit (2); } archive = arch_parse_package_name (arch_ret_archive, 0, fqvsn); tree_version = arch_parse_package_name (arch_ret_non_archive, 0, fqvsn); revision = str_alloc_cat_many (0, tree_version, "--", spec, str_end); safe_printfmt (1, "* finding or making %s\n", spec); safe_flush (1); answer = arch_find_or_make_tmp_local_copy (1, scratch_dir, 0, cache_dir, 0, archive, revision); if (arch) *arch = archive; else lim_free (0, archive); if (rev) *rev = revision; else lim_free (0, revision); lim_free (0, fqvsn); lim_free (0, tree_version); lim_free (0, tree_root); } else { arch_check_directory (spec, 0); answer = directory_as_cwd (spec); } return answer; } static void delta_callback (void * vfd, const char * fmt, va_list ap) { int fd; fd = (int)(t_ulong)vfd; safe_printfmt_va_list (fd, fmt, ap); safe_flush (fd); } /* tag: Tom Lord Wed Jun 4 13:44:58 2003 (cmd-revdelta.c) */ tla-1.3.5+dfsg/src/tla/libarch/diffs.h0000644000175000017500000000301310457622000016145 0ustar useruser/* diffs.h: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBFSUTILS__DIFFS_H #define INCLUDE__LIBFSUTILS__DIFFS_H #include "hackerlab/machine/types.h" #include "tla/libawk/associative.h" /* automatically generated __STDC__ prototypes */ extern int arch_binary_files_differ (const t_uchar * a, const t_uchar * b, const t_uchar * id, assoc_table inode_sig_shortcuts_of_b); extern int arch_file_stats_differ (struct stat *a_stat, struct stat *b_stat); extern int arch_inode_sigs_differ (struct stat *b_stat, const t_uchar * id, assoc_table inode_sig_shortcuts_of_b); extern int arch_filename_contents_differ (const t_uchar * a, const t_uchar * b); extern int arch_file_contents_differ (int a_fd, int b_fd); extern int arch_invoke_diff (int output_fd, const char * orig_path, const char * orig_loc, const char * mod_path, const char * mod_loc, t_uchar * id, assoc_table inode_sig_shortcuts_of_mod); extern int arch_really_invoke_diff (int output_fd, const char * orig_path, const char * orig_loc, const char * mod_path, const char * mod_loc, const char **extraopts); #endif /* INCLUDE__LIBFSUTILS__DIFFS_H */ /* tag: Tom Lord Sat Jan 5 15:26:10 2002 (diffs.h) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-changes.c0000644000175000017500000002614710457622000017233 0ustar useruser/* cmd-changes.c * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "config-options.h" #include "hackerlab/cmd/main.h" #include "hackerlab/fs/file-names.h" #include "tla/libfsutils/rmrf.h" #include "tla/libarch/namespace.h" #include "tla/libarch/project-tree.h" #include "tla/libarch/patch-logs.h" #include "tla/libarch/local-cache.h" #include "tla/libarch/make-changeset.h" #include "tla/libarch/changeset-report.h" #include "tla/libarch/inode-sig.h" #include "tla/libarch/chatter.h" #include "tla/libarch/archive.h" #include "tla/libarch/cmdutils.h" #include "tla/libarch/cmd.h" #include "tla/libarch/cmd-changes.h" /* __STDC__ prototypes for static functions */ static void make_changeset_callback (void * ign, const char * fmt, va_list ap); static t_uchar * usage = "[options] [revision] [-- limit...]"; static t_uchar * version_string = (cfg__std__package " from regexps.com\n" "\n" "Copyright 2003 Tom Lord\n" "\n" "This is free software; see the source for copying conditions.\n" "There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\n" "PARTICULAR PURPOSE.\n" "\n" "Report bugs to " cfg__tla_bug_mail ".\n" "\n" cfg__std__release_id_string "\n"); #define OPTS(OP) \ OP (opt_help_msg, "h", "help", 0, \ "Display a help message and exit.") \ OP (opt_long_help, "H", 0, 0, \ "Display a verbose help message and exit.") \ OP (opt_version, "V", "version", 0, \ "Display a release identifier string and exit.") \ OP (opt_archive, "A", "archive", 1, \ "Override `my-default-archive'.") \ OP (opt_dir, "d", "dir DIR", 1, \ "Change to DIR first.") \ OP (opt_output_dir, "o", "output DIR", 1, \ "Save changeset in DIR (implies --keep).") \ OP (opt_verbose, "v", "verbose", 0, \ "Verbose changeset report.") \ OP (opt_quiet, "q", "quiet", 0, \ "Suppress progress information") \ OP (opt_diffs, 0, "diffs", 0, \ "Include diffs in the output.") \ OP (opt_keep, "k", "keep", 0, \ "Don't remove the output directory " \ "on termination.") \ OP (opt_hardlinks, 0, "link", 0, \ "hardlink unchanged files to revision library")\ OP (opt_unescaped, 0, "unescaped", 0, \ "show filenames in unescaped form") t_uchar arch_cmd_changes_help[] = ("report about local changes in a project tree\n" "Generate a patch report describing the differences between the\n" "project tree containing DIR (or the current directory) and\n" "REVISION.\n" "\n" "The default patch level for a given version is the latest level for\n" "which the project tree has a patch. The default archive and version\n" "is as printed by \"tla tree-version\".\n"); enum options { OPTS (OPT_ENUM) }; static struct opt_desc opts[] = { OPTS (OPT_DESC) {-1, 0, 0, 0, 0} }; int arch_cmd_changes (t_uchar * program_name, int argc, char * argv[]) { int o; struct opt_parsed * option; t_uchar * dir = 0; t_uchar * output = 0; t_uchar * default_archive = 0; int diffs = 0; int keep = 0; int verbose = 0; int quiet = 0; int exit_status = 0; int link_same = 0; int escape_classes = arch_escape_classes; dir = str_save (0, "."); safe_buffer_fd (1, 0, O_WRONLY, 0); option = 0; while (1) { if ((argc > 1) && !str_cmp ("--", argv[1])) break; o = opt_standard (lim_use_must_malloc, &option, opts, &argc, argv, program_name, usage, version_string, arch_cmd_changes_help, opt_help_msg, opt_long_help, opt_version); if (o == opt_none) break; switch (o) { default: safe_printfmt (2, "unhandled option `%s'\n", option->opt_string); panic ("internal error parsing arguments"); usage_error: opt_usage (2, argv[0], program_name, usage, 1); exit (1); /* bogus_arg: */ safe_printfmt (2, "ill-formed argument for `%s' (`%s')\n", option->opt_string, option->arg_string); goto usage_error; case opt_archive: { lim_free (0, default_archive); default_archive = str_save (0, option->arg_string); break; } case opt_dir: { lim_free (0, dir); dir = str_save (0, option->arg_string); break; } case opt_output_dir: { lim_free (0, output); output = str_save (0, option->arg_string); keep = 1; break; } case opt_diffs: { diffs = 1; break; } case opt_keep: { keep = 1; break; } case opt_quiet: { quiet = 1; break; } case opt_verbose: { verbose = 1; break; } case opt_hardlinks: { link_same = 1; break; } case opt_unescaped: { escape_classes = 0; break; } } } { int argn; t_uchar * tree_root = 0; t_uchar * fqvsn = 0; t_uchar * rvsnspec = 0; t_uchar * archive = 0; t_uchar * revision = 0; t_uchar * log_file = 0; t_uchar * tree_arch = 0; t_uchar * tree_version = 0; t_uchar * latest_log = 0; rel_table limits = rel_table_nil; int commandline_rvsn = 0; if (default_archive && !arch_valid_archive_name (default_archive)) { safe_printfmt (2, "%s: invalid archive name: %s\n", argv[0], default_archive); exit (2); } tree_root = arch_tree_root (0, dir, 0); if (!tree_root) { safe_printfmt (2, "%s: not in a project tree\n dir: %s\n", argv[0], dir); exit (2); } argn = 1; if ((argc > argn) && str_cmp (argv[argn], "--")) { fqvsn = str_save (0, argv[argn]); ++argn; commandline_rvsn = arch_valid_package_name (fqvsn, arch_maybe_archive, arch_req_patch_level, 0); } else { fqvsn = arch_tree_version (tree_root); if (!fqvsn) { safe_printfmt (2, "%s: no tree-version set\n tree: %s\n", argv[0], tree_root); exit (2); } } tree_arch = arch_parse_package_name (arch_ret_archive, 0, fqvsn); tree_version = arch_parse_package_name (arch_ret_non_archive, 0, fqvsn); invariant (!!tree_arch); if (!arch_valid_package_name (tree_version, arch_no_archive, arch_req_version, 0)) { rvsnspec = str_save (0, fqvsn); } else { latest_log = arch_highest_patch_level (tree_root, tree_arch, tree_version); if (!latest_log) { safe_printfmt (2, "%s: tree shows no revisions in version\n tree: %s\n version: %s\n", argv[0], tree_root, fqvsn); exit (2); } rvsnspec = str_alloc_cat_many (0, fqvsn, "--", latest_log, str_end); } lim_free (0, fqvsn); lim_free (0, tree_arch); lim_free (0, tree_version); lim_free (0, latest_log); if (argc > argn) { if (str_cmp (argv[argn], "--")) goto usage_error; ++argn; if (argc <= argn) goto usage_error; while (argc > argn) { rel_add_records (&limits, rel_singleton_record_taking (rel_make_field_str (argv[argn])), rel_record_null); ++argn; } } if (!arch_valid_package_name (rvsnspec, arch_maybe_archive, arch_req_patch_level, 0)) { safe_printfmt (2, "%s: illegal revision name: %s\n", argv[0], rvsnspec); exit (2); } archive = arch_parse_package_name (arch_ret_archive, default_archive, rvsnspec); revision = arch_parse_package_name (arch_ret_non_archive, 0, rvsnspec); if (commandline_rvsn) arch_check_revision_local (archive, revision); if (!output) { t_uchar * output_basename = 0; output_basename = str_alloc_cat_many (0, ",,what-changed.", revision, "--", archive, str_end); output = file_name_in_vicinity (0, tree_root, output_basename); rmrf_file (output); lim_free (0, output_basename); } /**************************************************************** * The heart of the matter. */ { t_uchar * orig_tree = 0; struct arch_make_changeset_report make_report = {0, }; struct arch_changeset_report report = {rel_table_nil, }; assoc_table inode_shortcut = 0; if (!quiet) arch_chatter (1, "* looking for %s/%s to compare with\n", archive, revision); orig_tree = arch_find_or_make_local_copy ((quiet ? -1 : 1), tree_root, 0, 0, archive, revision); if (!orig_tree) { safe_printfmt (2, "%s: no local copies to compare to (%s/%s)\n consider `add-pristine --help'\n", argv[0], archive, revision); exit (2); } if (!quiet) arch_chatter (1, "* comparing to %s/%s\n", archive, revision); if (!quiet) make_report.callback = make_changeset_callback; arch_read_inode_sig (0, &inode_shortcut, tree_root, archive, revision); arch_make_changeset (&make_report, orig_tree, tree_root, output, arch_unspecified_id_tagging, arch_inventory_unrecognized, limits, inode_shortcut, link_same, escape_classes); arch_evaluate_changeset (&report, output); exit_status = arch_any_changes (&report); if (exit_status && (diffs || verbose)) { if (!quiet) safe_printfmt (1, "\n"); if (verbose) /* verbose is a superset of diffs */ arch_print_changeset (1, &report, diffs, escape_classes); else arch_print_changeset_diffs (1, &report, escape_classes); } arch_free_make_changeset_report_data (&make_report); arch_free_changeset_report_data (&report); lim_free (0, orig_tree); /* remove the changeset info unless the user requested it persist */ if (!keep) rmrf_file (output); free_assoc_table (inode_shortcut); } lim_free (0, rvsnspec); lim_free (0, tree_root); lim_free (0, archive); lim_free (0, revision); lim_free (0, log_file); rel_free_table (limits); } lim_free (0, dir); lim_free (0, output); lim_free (0, default_archive); exit (exit_status); return 0; } static void make_changeset_callback (void * ign, const char * fmt, va_list ap) { safe_printfmt_va_list (1, fmt, ap); safe_flush (1); } /* tag: Tom Lord Fri May 23 14:06:15 2003 (what-changed.c) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-revisions.h0000644000175000017500000000125110457622000017636 0ustar useruser/* cmd-revisions.h: * **************************************************************** * Copyright (C) 2003 Tom Lord, Stig Brautaset * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__CMD_REVISIONS_H #define INCLUDE__LIBARCH__CMD_REVISIONS_H #include "hackerlab/machine/types.h" extern t_uchar arch_cmd_revisions_help[]; /* automatically generated __STDC__ prototypes */ extern int arch_cmd_revisions (t_uchar * program_name, int argc, char * argv[]); #endif /* INCLUDE__LIBARCH__CMD_REVISIONS_H */ /* tag: Stig Brautaset Sat Jun 7 17:10:45 BST 2003 (cmd-revisions.h) */ tla-1.3.5+dfsg/src/tla/libarch/file-diffs.c0000644000175000017500000000475510457622000017073 0ustar useruser/* file-diffs.c: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/fs/file-names.h" #include "hackerlab/char/str.h" #include "hackerlab/vu/safe.h" #include "hackerlab/char/pika-escaping-utils.h" #include "tla/libarch/diffs.h" #include "tla/libarch/cached-inventory.h" #include "tla/libarch/local-cache.h" #include "tla/libarch/inv-ids.h" #include "tla/libarch/file-diffs.h" int arch_file_get_or_diff (int out_fd, t_uchar * tree_root, t_uchar * mod_loc, t_uchar * archive, t_uchar * revision, int diff, int new_is_null, int escape_classes) { t_uchar * mod_path = 0; t_uchar * id = 0; t_uchar * cached_tree = 0; rel_table index = rel_table_nil; int x; t_uchar * orig_loc = 0; t_uchar * orig_path = 0; int status = 2; mod_path = file_name_in_vicinity (0, tree_root, mod_loc); safe_chdir (tree_root); id = arch_inventory_id (arch_unspecified_id_tagging, 0, mod_loc, 0, 0, 0); cached_tree = arch_find_or_make_local_copy (out_fd, ".", 0, 0, archive, revision); if (!cached_tree) { safe_printfmt (2, "arch_file_diffs: tree not found in cache for comparison -- %s/%s\n", archive, revision); } index = arch_cached_index (cached_tree); for (x = 0; x < rel_n_records (index); ++x) { if (!str_cmp (id, rel_peek_str (index, x, 1))) { orig_loc = str_save (0, rel_peek_str (index, x, 0)); orig_path = file_name_in_vicinity (0, cached_tree, rel_peek_str (index, x, 0)); break; } } if (!orig_path && !new_is_null) { safe_printfmt (out_fd, "new file (not present in %s/%s)\n", archive, revision); status = 1; } else { if (diff) { status = arch_invoke_diff (out_fd, orig_path ? orig_path : (t_uchar *)"/dev/null", orig_loc, mod_path, mod_loc, 0, 0); } else { t_uchar * escaped_tmp; escaped_tmp = pika_save_escape_iso8859_1 (0, 0, escape_classes, orig_path ? orig_path : (t_uchar *)"/dev/null"); safe_printfmt (out_fd, "%s\n", escaped_tmp); status = 0; lim_free (0, escaped_tmp); } } lim_free (0, mod_path); lim_free (0, id); lim_free (0, cached_tree); rel_free_table (index); lim_free (0, orig_loc); lim_free (0, orig_path); return status; } /* tag: Tom Lord Fri May 30 20:19:00 2003 (file-diffs.c) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-id-tagging-method.c0000644000175000017500000001177610457622000021115 0ustar useruser/* cmd-id-tagging-method.c * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "config-options.h" #include "hackerlab/cmd/main.h" #include "tla/libarch/inv-ids.h" #include "tla/libarch/project-tree.h" #include "tla/libarch/cmd-id-tagging-method.h" static t_uchar * usage = "[options] [method]"; static t_uchar * version_string = (cfg__std__package " from regexps.com\n" "\n" "Copyright 2003 Tom Lord\n" "\n" "This is free software; see the source for copying conditions.\n" "There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\n" "PARTICULAR PURPOSE.\n" "\n" "Report bugs to " cfg__tla_bug_mail ".\n" "\n" cfg__std__release_id_string "\n"); #define OPTS(OP) \ OP (opt_help_msg, "h", "help", 0, \ "Display a help message and exit.") \ OP (opt_long_help, "H", 0, 0, \ "Display a verbose help message and exit.") \ OP (opt_version, "V", "version", 0, \ "Display a release identifier string\n" \ "and exit.") \ OP (opt_dir, "d", "dir DIR", 1, \ "cd to DIR first") \ OP (opt_strict, 0, "strict", 0, \ "exit with error if method not set") t_uchar arch_cmd_id_tagging_method_help[] = ("print or change a project tree id tagging method\n" "Print or change the method by which source files are\n" "identified in DIR (or the current directory).\n" "\n" "When setting, METHOD must be one of:\n" "\n" " names -- use naming conventions only\n" " implicit -- use naming conventions but permit\n" " for inventory tags\n" " explicit -- require explicit designation of source\n" " tagline -- mix names, explicit and arch" "-tag: methods\n" "\n" "When printing, if --strict is provided but no id tagging\n" "method is explicitly set, print an error.\n"); enum options { OPTS (OPT_ENUM) }; static struct opt_desc opts[] = { OPTS (OPT_DESC) {-1, 0, 0, 0, 0} }; int arch_cmd_id_tagging_method (t_uchar * program_name, int argc, char * argv[]) { int o; struct opt_parsed * option; char * dir; t_uchar * tree_root; int strict; dir = "."; tree_root = 0; strict = 0; safe_buffer_fd (1, 0, O_WRONLY, 0); option = 0; while (1) { o = opt_standard (lim_use_must_malloc, &option, opts, &argc, argv, program_name, usage, version_string, arch_cmd_id_tagging_method_help, opt_help_msg, opt_long_help, opt_version); if (o == opt_none) break; switch (o) { default: safe_printfmt (2, "unhandled option `%s'\n", option->opt_string); panic ("internal error parsing arguments"); usage_error: opt_usage (2, argv[0], program_name, usage, 1); exit (1); /* bogus_arg: */ safe_printfmt (2, "ill-formed argument for `%s' (`%s')\n", option->opt_string, option->arg_string); goto usage_error; case opt_dir: { dir = str_save (0, option->arg_string); break; } case opt_strict: { strict = 1; break; } } } if (argc > 2) goto usage_error; tree_root = arch_tree_root (0, dir, 0); if (!tree_root) { safe_printfmt (2, "%s: not in project tree (%s)\n", argv[0], dir); exit (1); } if (argc == 1) { enum arch_id_tagging_method method; t_uchar * method_name; method = arch_tree_id_tagging_method (0, tree_root, strict); method_name = arch_id_tagging_method_name (method); safe_printfmt (1, "%s\n", method_name); exit (0); } else { t_uchar * new_method_name; enum arch_id_tagging_method new_method; new_method_name = argv[1]; new_method = arch_id_tagging_method_from_name (new_method_name); arch_set_tree_id_tagging_method (tree_root, new_method); safe_printfmt (1, "method set: %s\n", new_method_name); exit (0); } return 0; } /* tag: Tom Lord Wed May 14 09:16:36 2003 (tagging-method.c) */ tla-1.3.5+dfsg/src/tla/libarch/archive-setup.h0000644000175000017500000000276610457622000017647 0ustar useruser/* archive-setup.h: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__ARCHIVE_SETUP_H #define INCLUDE__LIBARCH__ARCHIVE_SETUP_H #include "tla/libawk/relational.h" #include "tla/libarch/archive.h" enum arch_archive_setup_tag_op { arch_archive_setup_no_tags, arch_archive_setup_make_base0_tag, }; /* automatically generated __STDC__ prototypes */ extern void arch_setup_archive_simple (int chatter_fd, const t_uchar * archive_spec, const t_uchar * revision_spec); extern void arch_setup_archive_simple_ext (int chatter_fd, struct arch_archive * arch, const t_uchar * revision_spec); extern void arch_setup_archive (int chatter_fd, rel_table wants, enum arch_archive_setup_tag_op tag_op, int archive_cache); extern void arch_setup_archive_ext (int chatter_fd, rel_table wants, enum arch_archive_setup_tag_op tag_op, int archive_cache, struct arch_archive * initial_arch); #endif /* INCLUDE__LIBARCH__ARCHIVE_SETUP_H */ /* tag: Tom Lord Sat Jan 5 15:26:10 2002 (archive-setup.h) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-file-find.c0000644000175000017500000001643410457622000017456 0ustar useruser/* cmd-file-find.c * **************************************************************** * Copyright (C) 2003, 2004 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "config-options.h" #include "hackerlab/cmd/main.h" #include "hackerlab/fs/file-names.h" #include "tla/libfsutils/dir-as-cwd.h" #include "tla/libarch/my.h" #include "tla/libarch/libraries.h" #include "tla/libarch/project-tree.h" #include "tla/libarch/patch-logs.h" #include "tla/libarch/inv-ids.h" #include "tla/libarch/file-diffs.h" #include "tla/libarch/namespace.h" #include "tla/libfsutils/dir-as-cwd.h" #include "tla/libarch/cmd.h" #include "tla/libarch/cmd-file-diff.h" static t_uchar * usage = "[options] file [revision]"; static t_uchar * version_string = (cfg__std__package " from regexps.com\n" "\n" "Copyright 2003 Tom Lord\n" "\n" "This is free software; see the source for copying conditions.\n" "There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\n" "PARTICULAR PURPOSE.\n" "\n" "Report bugs to " cfg__tla_bug_mail ".\n" "\n" cfg__std__release_id_string "\n"); #define OPTS(OP) \ OP (opt_help_msg, "h", "help", 0, \ "Display a help message and exit.") \ OP (opt_long_help, "H", 0, 0, \ "Display a verbose help message and exit.") \ OP (opt_version, "V", "version", 0, \ "Display a release identifier string\n" \ "and exit.") \ OP (opt_archive, "A", "archive", 1, \ "Override `my-default-archive'") \ OP (opt_new_file, "N", "new-file", 0, \ "Print missing file as `/dev/null'") \ OP (opt_unescaped, 0, "unescaped", 0, \ "show filenames in unescaped form") t_uchar arch_cmd_file_find_help[] = ("find given version of file\n" "Print location of file corresponding to FILE in a cached copy of REVISION\n" "\n" "The default patch level for a given version is the latest level for\n" "which the project tree has a patch. The default archive and version\n" "is as printed by \"tla tree-version\".\n"); enum options { OPTS (OPT_ENUM) }; static struct opt_desc opts[] = { OPTS (OPT_DESC) {-1, 0, 0, 0, 0} }; int arch_cmd_file_find (t_uchar * program_name, int argc, char * argv[]) { int o; struct opt_parsed * option; t_uchar * default_archive; int escape_classes = arch_escape_classes; int new_is_null = 0; int status = 2; default_archive = 0; safe_buffer_fd (1, 0, O_WRONLY, 0); option = 0; while (1) { o = opt_standard (lim_use_must_malloc, &option, opts, &argc, argv, program_name, usage, version_string, arch_cmd_file_find_help, opt_help_msg, opt_long_help, opt_version); if (o == opt_none) break; switch (o) { default: safe_printfmt (2, "unhandled option `%s'\n", option->opt_string); panic ("internal error parsing arguments"); usage_error: opt_usage (2, argv[0], program_name, usage, 1); exit (1); /* bogus_arg: */ safe_printfmt (2, "ill-formed argument for `%s' (`%s')\n", option->opt_string, option->arg_string); goto usage_error; case opt_archive: { default_archive = str_save (0, option->arg_string); break; } case opt_new_file: { new_is_null = 1; break; } case opt_unescaped: { escape_classes = 0; break; } } } if ((argc < 2) || (argc > 3)) goto usage_error; if (default_archive && !arch_valid_archive_name (default_archive)) { safe_printfmt (2, "%s: invalid archive name (%s)\n", argv[0], default_archive); exit (1); } { t_uchar * filespec; t_uchar * filedir = 0; t_uchar * filedir_path = 0; t_uchar * filedir_loc = 0; t_uchar * file_tail = 0; t_uchar * mod_loc = 0; t_uchar * tree_root = 0; t_uchar * revspec = 0; t_uchar * archive = 0; t_uchar * revision = 0; filespec = argv[1]; filedir = file_name_directory_file (0, filespec); if (!filedir) filedir = str_save (0, "."); filedir_path = directory_as_cwd (filedir); tree_root = arch_tree_root (0, filedir, 0); if (!tree_root) { safe_printfmt (2, "%s: file is not in a project tree (%s)\n", argv[0], filespec); exit (2); } invariant (!str_cmp_prefix (tree_root, filedir_path) && (!filedir_path[str_length (tree_root)] || ('/' == filedir_path[str_length (tree_root)]))); /*filedir_loc = str_alloc_cat (0, "./", filedir_path + str_length (tree_root) + 1);*/ /* fix for bug 7502 */ if (str_length(filedir_path) == str_length(tree_root)) filedir_loc = str_save(0, "./"); else filedir_loc = str_alloc_cat (0, "./", filedir_path + str_length (tree_root) + 1); /* fix for bug 7502 */ file_tail = file_name_tail (0, filespec); mod_loc = file_name_in_vicinity (0, filedir_loc, file_tail); if (argc == 3) { revspec = str_save (0, argv[2]); } else { revspec = arch_tree_version (tree_root); if (!revspec) { safe_printfmt (2, "%s: tree has no default version (%s)\n", argv[0], tree_root); exit (2); } } if (!arch_valid_package_name (revspec, arch_maybe_archive, arch_req_version, 1)) { safe_printfmt (2, "%s: invalid revision specification (%s)\n", argv[0], revspec); exit (2); } archive = arch_parse_package_name (arch_ret_archive, default_archive, revspec); if (!archive) { safe_printfmt (2, "%s: no archive specified\n", argv[0]); exit (2); } if (arch_valid_package_name (revspec, arch_maybe_archive, arch_req_version, 0)) { t_uchar * version = 0; t_uchar * level = 0; version = arch_parse_package_name (arch_ret_package_version, 0, revspec); level = arch_highest_patch_level (tree_root, archive, version); revision = str_alloc_cat_many (0, version, "--", level, str_end); lim_free (0, level); lim_free (0, version); } else { revision = arch_parse_package_name (arch_ret_non_archive, 0, revspec); } status = arch_file_get_or_diff (1, tree_root, mod_loc, archive, revision, 0, new_is_null, escape_classes); lim_free (0, filedir); lim_free (0, filedir_path); lim_free (0, filedir_loc); lim_free (0, file_tail); lim_free (0, mod_loc); lim_free (0, tree_root); lim_free (0, revspec); lim_free (0, archive); lim_free (0, revision); } lim_free (0, default_archive); exit (status); return status; } /* tag: Jan Hudec Fr, 11 Jul 2003 12:34:30 +0200 (cmd-file-find.c) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-library-remove.h0000644000175000017500000000131410457622000020554 0ustar useruser/* cmd-library-remove.h: * **************************************************************** * Copyright (C) 2003 Tom Lord, Stig Brautaset * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__CMD_LIBRARY_REMOVE_H #define INCLUDE__LIBARCH__CMD_LIBRARY_REMOVE_H #include "hackerlab/machine/types.h" extern t_uchar arch_cmd_library_remove_help[]; /* automatically generated __STDC__ prototypes */ extern int arch_cmd_library_remove (t_uchar * program_name, int argc, char * argv[]); #endif /* INCLUDE__LIBARCH__CMD_LIBRARY_REMOVE_H */ /* tag: Stig Brautaset Sat Jun 7 15:11:48 BST 2003 (cmd-library-remove.h) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-replay.h0000644000175000017500000000117210457622000017113 0ustar useruser/* cmd-replay.h: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__CMD_REPLAY_H #define INCLUDE__LIBARCH__CMD_REPLAY_H #include "hackerlab/machine/types.h" extern t_uchar arch_cmd_replay_help[]; /* automatically generated __STDC__ prototypes */ extern int arch_cmd_replay (t_uchar * program_name, int argc, char * argv[]); #endif /* INCLUDE__LIBARCH__CMD_REPLAY_H */ /* tag: Tom Lord Sat Jan 5 15:26:10 2002 (cmd-replay.h) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-merges.h0000644000175000017500000000122410457622000017077 0ustar useruser/* cmd-merges.h: * **************************************************************** * Copyright (C) 2003 Tom Lord, Stig Brautaset * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__CMD_MERGES_H #define INCLUDE__LIBARCH__CMD_MERGES_H #include "hackerlab/machine/types.h" extern t_uchar arch_cmd_merges_help[]; /* automatically generated __STDC__ prototypes */ extern int arch_cmd_merges (t_uchar * program_name, int argc, char * argv[]); #endif /* INCLUDE__LIBARCH__CMD_MERGES_H */ /* tag: Stig Brautaset Sat Jun 7 16:03:35 BST 2003 (cmd-merges.h) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-merges.c0000644000175000017500000001774410457622000017110 0ustar useruser/* cmd-merges.c * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "config-options.h" #include "hackerlab/cmd/main.h" #include "tla/libfsutils/file-contents.h" #include "tla/libarch/namespace.h" #include "tla/libarch/project-tree.h" #include "tla/libarch/archive.h" #include "tla/libarch/merge-points.h" #include "tla/libarch/cmd-merges.h" static t_uchar * usage = "[options] INTO [FROM]"; static t_uchar * version_string = (cfg__std__package " from regexps.com\n" "\n" "Copyright 2003 Tom Lord\n" "\n" "This is free software; see the source for copying conditions.\n" "There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\n" "PARTICULAR PURPOSE.\n" "\n" "Report bugs to " cfg__tla_bug_mail ".\n" "\n" cfg__std__release_id_string "\n"); #define OPTS(OP) \ OP (opt_help_msg, "h", "help", 0, \ "Display a help message and exit.") \ OP (opt_long_help, "H", 0, 0, \ "Display a verbose help message and exit.") \ OP (opt_version, "V", "version", 0, \ "Display a release identifier string\n" \ "and exit.") \ OP (opt_archive, "A", "archive", 1, \ "Override `my-default-archive'") \ OP (opt_dir, "d", "dir DIR", 1, \ "cd to DIR first") \ OP (opt_reverse, "r", "reverse", 0, \ "sort from newest to oldest") \ OP (opt_full, "f", "full", 0, \ "print full patch level names") t_uchar arch_cmd_merges_help[] = ("report where two branches have been merged\n" "Print a list of pairs of patch level names:\n" "\n" " %s\t%s INTO-RVN FROM-RVN\n" "\n" "where each pair indicates that at patch level INTO-RVN of\n" "INTO, the patch log entry FROM-RVN was added.\n" "\n" "FROM may be a branch name, version name, or revision name.\n" "If a branch or version name, all merges from that branch or version\n" "are reported. If a revision name, only the merge points for that\n" "specific revision are reported.\n" "\n" "INTO may be a version name or revision name. If a version name,\n" "all merge points within that version are printed. If a revision\n" "name, all merge points at that revision or earlier are printed.\n" "\n" "Output is sorted using patch-level ordering of the first column.\n" "\n" "Included patches are listed by full name unless FROM is a revision\n" "name. If FROM is a revision, --full causes its full name to be\n" "printed.\n"); enum options { OPTS (OPT_ENUM) }; static struct opt_desc opts[] = { OPTS (OPT_DESC) {-1, 0, 0, 0, 0} }; int arch_cmd_merges (t_uchar * program_name, int argc, char * argv[]) { int o; struct opt_parsed * option; t_uchar * default_archive = 0; char * dir = 0; int reverse = 0; int full = 0; default_archive = 0; safe_buffer_fd (1, 0, O_WRONLY, 0); option = 0; while (1) { o = opt_standard (lim_use_must_malloc, &option, opts, &argc, argv, program_name, usage, version_string, arch_cmd_merges_help, opt_help_msg, opt_long_help, opt_version); if (o == opt_none) break; switch (o) { default: safe_printfmt (2, "unhandled option `%s'\n", option->opt_string); panic ("internal error parsing arguments"); usage_error: opt_usage (2, argv[0], program_name, usage, 1); exit (1); /* bogus_arg: */ safe_printfmt (2, "ill-formed argument for `%s' (`%s')\n", option->opt_string, option->arg_string); goto usage_error; case opt_archive: { default_archive = str_save (0, option->arg_string); break; } case opt_dir: { dir = str_save (0, option->arg_string); break; } case opt_reverse: { reverse = 1; break; } case opt_full: { full = 1; break; } } } if ((argc < 2) || (argc > 3)) goto usage_error; { t_uchar * into = 0; t_uchar * from = 0; int here_fd; t_uchar * into_archive = 0; t_uchar * from_archive = 0; t_uchar * into_spec = 0; t_uchar * from_spec = 0; rel_table merge_points = rel_table_nil; here_fd = safe_open (".", O_RDONLY, 0); into = str_save (0, argv[1]); if (argc == 3) from = str_save (0, argv[2]); if (default_archive && !arch_valid_archive_name (default_archive)) { safe_printfmt (2, "%s: invalid archive name (%s)\n", argv[0], default_archive); exit (1); } if (!arch_valid_package_name (into, arch_maybe_archive, arch_req_version, 1)) { safe_printfmt (2, "%s: invalid version name (%s)\n", argv[0], into); exit (1); } if (from && !arch_valid_package_name (into, arch_maybe_archive, arch_req_package, 1)) { safe_printfmt (2, "%s: invalid package name (%s)\n", argv[0], from); exit (1); } into_archive = arch_parse_package_name (arch_ret_archive, default_archive, into); if (from) from_archive = arch_parse_package_name (arch_ret_archive, default_archive, from); into_spec = arch_parse_package_name (arch_ret_non_archive, 0, into); if (from) from_spec = arch_parse_package_name (arch_ret_non_archive, 0, from); if (dir) { t_uchar * tree_root = 0; tree_root = arch_tree_root (0, dir, 0); if (!tree_root) { safe_printfmt (2, "%s: not in a project tree (%s)\n", argv[0], dir); exit (1); } merge_points = arch_tree_merge_points (tree_root, into_archive, into_spec, from_archive, from_spec); lim_free (0, tree_root); } else { struct arch_archive * into_arch = 0; into_arch = arch_archive_connect (into_archive, 0); merge_points = arch_archive_merge_points (into_arch, into_spec, from_archive, from_spec, 0); arch_archive_close (into_arch); } if (reverse) rel_reverse_table (merge_points); if (full || !from || !arch_valid_package_name (from_spec, arch_no_archive, arch_req_version, 0)) { rel_print_table (1, merge_points); } else { int x; for (x = 0; x < rel_n_records (merge_points); ++x) { t_uchar * level = 0; level = arch_parse_package_name (arch_ret_patch_level, 0, rel_peek_str (merge_points, x, 1)); safe_printfmt (1, "%s\t%s\n", rel_peek_str (merge_points, x, 0), level); lim_free (0, level); } } safe_close (here_fd); lim_free (0, into); lim_free (0, from); lim_free (0, into_archive); lim_free (0, from_archive); rel_free_table (merge_points); } lim_free (0, default_archive); lim_free (0, dir); return 0; } /* tag: Tom Lord Tue May 27 20:58:39 2003 (merges.c) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-tree-version.c0000644000175000017500000000662310457622000020242 0ustar useruser/* cmd-tree-version.c * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "config-options.h" #include "hackerlab/cmd/main.h" #include "tla/libarch/namespace.h" #include "tla/libarch/project-tree.h" #include "tla/libarch/cmd-tree-version.h" static t_uchar * usage = "[options] [dir]"; static t_uchar * version_string = (cfg__std__package " from regexps.com\n" "\n" "Copyright 2003 Tom Lord\n" "\n" "This is free software; see the source for copying conditions.\n" "There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\n" "PARTICULAR PURPOSE.\n" "\n" "Report bugs to " cfg__tla_bug_mail ".\n" "\n" cfg__std__release_id_string "\n"); #define OPTS(OP) \ OP (opt_help_msg, "h", "help", 0, \ "Display a help message and exit.") \ OP (opt_long_help, "H", 0, 0, \ "Display a verbose help message and exit.") \ OP (opt_version, "V", "version", 0, \ "Display a release identifier string\n" \ "and exit.") t_uchar arch_cmd_tree_version_help[] = ("print the default version for a project tree\n" "Print the default version of project tree DIR (or\n" "the current directory).\n"); enum options { OPTS (OPT_ENUM) }; static struct opt_desc opts[] = { OPTS (OPT_DESC) {-1, 0, 0, 0, 0} }; int arch_cmd_tree_version (t_uchar * program_name, int argc, char * argv[]) { int o; struct opt_parsed * option; char * dir; t_uchar * tree_root; t_uchar * answer; dir = "."; tree_root = 0; safe_buffer_fd (1, 0, O_WRONLY, 0); option = 0; while (1) { o = opt_standard (lim_use_must_malloc, &option, opts, &argc, argv, program_name, usage, version_string, arch_cmd_tree_version_help, opt_help_msg, opt_long_help, opt_version); if (o == opt_none) break; switch (o) { default: safe_printfmt (2, "unhandled option `%s'\n", option->opt_string); panic ("internal error parsing arguments"); usage_error: opt_usage (2, argv[0], program_name, usage, 1); exit (1); /* bogus_arg: */ safe_printfmt (2, "ill-formed argument for `%s' (`%s')\n", option->opt_string, option->arg_string); goto usage_error; } } if (argc > 2) goto usage_error; if (argc == 2) dir = argv[1]; tree_root = arch_tree_root (0, dir, 0); if (!tree_root) { safe_printfmt (2, "%s: not in project tree (%s)\n", argv[0], dir); exit (1); } answer = arch_tree_version (tree_root); if (!answer) { safe_printfmt (2, "%s: no default version set\n tree: %s\n", argv[0], tree_root); exit (1); } invariant (arch_valid_package_name (answer, arch_req_archive, arch_req_version, 0)); safe_printfmt (1, "%s\n", answer); return 0; } /* tag: Tom Lord Mon May 12 18:48:04 2003 (tree-version.c) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-my-default-archive.c0000644000175000017500000001632410457622000021305 0ustar useruser/* cmd-my-default-archive.c * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "config-options.h" #include "hackerlab/cmd/main.h" #include "tla/libarch/my.h" #include "tla/libarch/namespace.h" #include "tla/libarch/cmd-my-default-archive.h" static t_uchar * usage = "[options] [archive]"; static t_uchar * version_string = (cfg__std__package " from regexps.com\n" "\n" "Copyright 2003 Tom Lord\n" "\n" "This is free software; see the source for copying conditions.\n" "There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\n" "PARTICULAR PURPOSE.\n" "\n" "Report bugs to " cfg__tla_bug_mail ".\n" "\n" cfg__std__release_id_string "\n"); #define OPTS(OP) \ OP (opt_help_msg, "h", "help", 0, \ "Display a help message and exit.") \ OP (opt_long_help, "H", 0, 0, \ "Display a verbose help message and exit.") \ OP (opt_version, "V", "version", 0, \ "Display a release identifier string\n" \ "and exit.") \ OP (opt_archive, "A", "archive", 1, \ "Override `my-default-archive'") \ OP (opt_errname, "e", "errname", 1, \ "specify program name for errors") \ OP (opt_delete, "d", "delete", 0, \ "unspecify your default archive") \ OP (opt_silent, "s", "silent", 0, \ "suppress reassuring messages") t_uchar arch_cmd_my_default_archive_help[] = ("print or change your default archive\n" "With no argument, and without -d, print the name of your default\n" "archive.\n" "\n" "With an argument, record ARCHIVE as your default archive\n" "in ~/.arch-params/=default-archive\n" "\n" "With the option -d (--delete) and no argument, ensure that\n" "you do not have a default archive set in ~/.arch-params.\n" "\n" "Your default archive is determined this way:\n" "\n" "If the option -A (--archive) is given and not empty, that archive\n" "is the default (which makes this script useful for processing a -A\n" "argument that was passed to another script).\n" "\n" "If -A is not given, but ~/.arch-params/=default-archive exists\n" "and is not empty, that is your default archive.\n" "\n" "Otherwise, your default archive is the name of the local archive\n" "rooted at the argument to -R (--root) or specified in the environment\n" "variable ARCHROOT.\n" "\n" "If no default archive can be found by any of these means, the\n" "program exits with status 1, printing an error message unless\n" "the -s (--silent) option is given.\n"); enum options { OPTS (OPT_ENUM) }; static struct opt_desc opts[] = { OPTS (OPT_DESC) {-1, 0, 0, 0, 0} }; enum operation { op_print, op_set, op_delete, }; int arch_cmd_my_default_archive (t_uchar * program_name, int argc, char * argv[]) { int o; struct opt_parsed * option; char * default_archive; char * errname; enum operation op = op_print; int silent; default_archive = 0; errname = argv[0]; silent = 0; safe_buffer_fd (1, 0, O_WRONLY, 0); option = 0; while (1) { o = opt_standard (lim_use_must_malloc, &option, opts, &argc, argv, program_name, usage, version_string, arch_cmd_my_default_archive_help, opt_help_msg, opt_long_help, opt_version); if (o == opt_none) break; switch (o) { default: safe_printfmt (2, "unhandled option `%s'\n", option->opt_string); panic ("internal error parsing arguments"); usage_error: opt_usage (2, argv[0], program_name, usage, 1); exit (1); /* bogus_arg: */ safe_printfmt (2, "ill-formed argument for `%s' (`%s')\n", option->opt_string, option->arg_string); goto usage_error; case opt_archive: { default_archive = str_save (0, option->arg_string); break; } case opt_errname: { if (!option->arg_string[0]) errname = 0; else errname = str_save (0, option->arg_string); break; } case opt_delete: { op = op_delete; break; } case opt_silent: { silent = 1; break; } } } if (op == op_delete) { if (argc != 1) goto usage_error; } else if (argc == 2) { op = op_set; default_archive = argv[1]; } else if (argc == 1) { op = op_print; } else goto usage_error; /**************************************************************** * Sanity Check */ if (((op == op_set) && !default_archive) || (default_archive && !arch_valid_archive_name (default_archive))) { if (errname) safe_printfmt (2, "%s: invalid archive name (%s)\n", errname, default_archive); exit (1); } /**************************************************************** * Do It */ switch (op) { default: { panic ("my-default-archive: unreachable op case"); break; } case op_delete: { arch_delete_my_default_archive (); if (!silent) safe_printfmt (1, "default archive removed\n"); break; } case op_print: { default_archive = arch_my_default_archive (default_archive); if (default_archive) safe_printfmt (1, "%s\n", default_archive); else { if (errname) safe_printfmt (2, "%s: no default archive\n", errname); exit (1); } break; } case op_set: { arch_set_my_default_archive (default_archive); break; } } return 0; } /* tag: Tom Lord Mon May 12 15:14:03 2003 (my-default-archive.c) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-tag.c0000644000175000017500000002715410457622000016375 0ustar useruser/* cmd-tag.c * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "config-options.h" #include "hackerlab/cmd/main.h" #include "hackerlab/fs/file-names.h" #include "hackerlab/fs/cwd.h" #include "tla/libfsutils/tmp-files.h" #include "tla/libfsutils/file-contents.h" #include "tla/libfsutils/rmrf.h" #include "tla/libarch/namespace.h" #include "tla/libarch/project-tree.h" #include "tla/libarch/patch-logs.h" #include "tla/libarch/archive.h" #include "tla/libarch/build-revision.h" #include "tla/libarch/proj-tree-lint.h" #include "tla/libarch/tag.h" #include "tla/libarch/cmd-tag.h" #include "tla/libarch/cmdutils.h" #include "tla/libarch/archive-setup.h" static t_uchar * usage = "[options] SOURCE-REVISION TAG-VERSION"; static t_uchar * version_string = (cfg__std__package " from regexps.com\n" "\n" "Copyright 2003 Tom Lord\n" "\n" "This is free software; see the source for copying conditions.\n" "There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\n" "PARTICULAR PURPOSE.\n" "\n" "Report bugs to " cfg__tla_bug_mail ".\n" "\n" cfg__std__release_id_string "\n"); #define OPTS(OP) \ OP (opt_help_msg, "h", "help", 0, \ "Display a help message and exit.") \ OP (opt_long_help, "H", 0, 0, \ "Display a verbose help message and exit.") \ OP (opt_version, "V", "version", 0, \ "Display a release identifier string\n" \ "and exit.") \ OP (opt_archive, "A", "archive", 1, \ "Override `my-default-archive'") \ OP (opt_log, "l", "log FILE", 1, \ "commit with log file FILE") \ OP (opt_no_cacherev, 0, "no-cacherev", 0, \ "Do not cacherev tag even if different archive") \ OP (opt_seal, 0, "seal", 0, \ "create a version-0 revision") \ OP (opt_fix, 0, "fix", 0, \ "create a versionfix revision") \ OP (opt_setup, "S", "setup", 0, \ "Use `archive-setup' if necessary; implied by default.") \ OP (opt_no_setup, 0, "no-setup", 0, \ "Do not use `archive-setup' even if necessary.") t_uchar arch_cmd_tag_help[] = ("create a continuation revision \n" "Create the continuation revision TAG-VERSION (branch point or tag)\n" "which is equivalent to SOURCE-REVISION (plus a log entry).\n" "\n" "If no log entry is provided, a trivial log entry will be created.\n"); enum options { OPTS (OPT_ENUM) }; static struct opt_desc opts[] = { OPTS (OPT_DESC) {-1, 0, 0, 0, 0} }; int arch_cmd_tag (t_uchar * program_name, int argc, char * argv[]) { int o; struct opt_parsed * option; t_uchar * default_archive = 0; t_uchar * log_file = 0; int do_cacherev = 1; int seal = 0; int fix = 0; int setup = 1; safe_buffer_fd (1, 0, O_WRONLY, 0); option = 0; while (1) { o = opt_standard (lim_use_must_malloc, &option, opts, &argc, argv, program_name, usage, version_string, arch_cmd_tag_help, opt_help_msg, opt_long_help, opt_version); if (o == opt_none) break; switch (o) { default: safe_printfmt (2, "unhandled option `%s'\n", option->opt_string); panic ("internal error parsing arguments"); usage_error: opt_usage (2, argv[0], program_name, usage, 1); exit (1); /* bogus_arg: */ safe_printfmt (2, "ill-formed argument for `%s' (`%s')\n", option->opt_string, option->arg_string); goto usage_error; case opt_archive: { default_archive = str_save (0, option->arg_string); break; } case opt_log: { log_file = str_save (0, option->arg_string); break; } case opt_no_cacherev: { do_cacherev = 0; break; } case opt_seal: { seal = 1; break; } case opt_fix: { fix = 1; break; } case opt_setup: { setup = 1; break; } case opt_no_setup: { setup = 0; break; } } } if (argc != 3) goto usage_error; { t_uchar * source_spec; t_uchar * tag_spec; t_uchar * source_revision = 0; t_uchar * tag_archive = 0; t_uchar * tag_version = 0; t_uchar * log = 0; struct arch_archive * source_arch = 0; struct arch_archive * tag_arch = 0; rel_table tag_version_revisions = rel_table_nil; t_uchar * last_level = 0; enum arch_patch_level_type last_level_type; enum arch_patch_level_type desired_level_type; t_ulong last_n; t_ulong desired_n; t_uchar * desired_level = 0; t_uchar * tag_revision = 0; if (default_archive) { if (!arch_valid_archive_name (default_archive)) { safe_printfmt (2, "%s: invalid archive name (%s)\n", argv[0], default_archive); exit (1); } } source_spec = argv[1]; tag_spec = argv[2]; if (log_file) { log = file_contents (log_file); if (!arch_valid_log_file (log)) { safe_printfmt (2, "%s: invalid log file (%s)\n", argv[0], log_file); exit (1); } } if (!arch_valid_package_name (tag_spec, arch_maybe_archive, arch_req_version, 0)) { safe_printfmt (2, "%s: invalid version name -- %s\n", argv[0], tag_spec); exit (1); } tag_archive = arch_parse_package_name (arch_ret_archive, default_archive, tag_spec); tag_version = arch_parse_package_name (arch_ret_non_archive, default_archive, tag_spec); if (arch_is_system_package_name (tag_version)) { safe_printfmt (2, "%s: user's can not tag in system versions\n version: %s\n", argv[0], tag_version); exit (2); } source_revision = arch_determine_revision (&source_arch, default_archive, source_spec, argv[0]); if (setup) arch_setup_archive_simple (1, tag_archive, tag_version); if (!str_cmp (source_arch->name, tag_archive)) tag_arch = source_arch; else tag_arch = arch_archive_connect (tag_archive, 0); if (!setup) arch_check_for (tag_arch, arch_req_version, tag_version); tag_version_revisions = arch_archive_revisions (tag_arch, tag_version, 0); if (!rel_n_records (tag_version_revisions)) { desired_level_type = arch_is_base0_level; desired_n = 0; } else { last_level = str_save (0, rel_peek_str (tag_version_revisions, rel_n_records (tag_version_revisions) - 1, 0)); last_level_type = arch_analyze_patch_level (&last_n, last_level); switch (last_level_type) { default: panic ("NOT IMPLEMENTED YET"); panic ("internal error"); break; case arch_is_base0_level: { if (seal) { desired_level_type = arch_is_version_level; desired_n = 0; } else if (fix) { safe_printfmt (2, "%s: can not --fix before --seal", argv[0]); exit (2); } else { desired_level_type = arch_is_patch_level; desired_n = 1; } break; } case arch_is_patch_level: { if (seal) { desired_level_type = arch_is_version_level; desired_n = 0; } else if (fix) { safe_printfmt (2, "%s: can not --fix before --seal", argv[0]); exit (2); } else { desired_level_type = arch_is_patch_level; desired_n = last_n + 1; } break; } case arch_is_version_level: { if (seal) { safe_printfmt (2, "%s: version already sealed", argv[0]); exit (2); } else if (fix) { desired_level_type = arch_is_versionfix_level; desired_n = 1; } else { safe_printfmt (2, "%s: cannot commit to sealed version with --fix", argv[0]); exit (2); } break; } case arch_is_versionfix_level: { if (seal) { safe_printfmt (2, "%s: version already sealed", argv[0]); exit (2); } else if (fix) { desired_level_type = arch_is_versionfix_level; desired_n = last_n + 1; } else { safe_printfmt (2, "%s: cannot commit to sealed version with --fix", argv[0]); exit (2); } break; } } } desired_level = arch_form_patch_level (desired_level_type, desired_n); tag_revision = str_alloc_cat_many (0, tag_version, "--", desired_level, str_end); arch_tag (1, tag_arch, tag_revision, source_arch, source_revision, log); if ( do_cacherev && str_cmp(tag_archive, source_arch->official_name) != 0) { t_uchar * tmp_dir; t_uchar * pristine_dir; safe_printfmt (1, "* Archive caching revision\n"); safe_flush (1); tmp_dir = tmp_file_name (".", ",,archive-cache-revision"); pristine_dir = file_name_in_vicinity (0, tmp_dir, tag_revision); safe_mkdir (tmp_dir, 0777); safe_mkdir (pristine_dir, 0777); arch_build_revision (1, pristine_dir, tag_arch, tag_archive, tag_revision, "."); { t_uchar * errstr; if (arch_archive_put_cached (&errstr, tag_arch, tag_revision, pristine_dir)) { safe_printfmt (2, "Warning: %s: was unable to cache revision %s/%s (%s)\n", argv[0], tag_archive, tag_revision, errstr); } else { safe_printfmt (1, "* Made cached revision of %s/%s \n", tag_archive, tag_revision); } } rmrf_file (tmp_dir); rmrf_file (tmp_dir); lim_free (0, pristine_dir); lim_free (0, tmp_dir); } if (log_file) safe_unlink (log_file); lim_free (0, source_revision); lim_free (0, tag_archive); lim_free (0, tag_version); lim_free (0, log); if (source_arch != tag_arch) arch_archive_close (source_arch); arch_archive_close (tag_arch); rel_free_table (tag_version_revisions); lim_free (0, last_level); lim_free (0, desired_level); lim_free (0, tag_revision); } lim_free (0, default_archive); return 0; } /* tag: Tom Lord Tue May 27 23:03:10 2003 (tagrev.c) */ tla-1.3.5+dfsg/src/tla/libarch/editor.c0000644000175000017500000000514710457622000016345 0ustar useruser/* editor.c: * **************************************************************** * Copyright (C) 2003 Colin Walters * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/bugs/panic.h" #include "hackerlab/os/stdarg.h" #include "hackerlab/os/sys/types.h" #include "hackerlab/os/unistd.h" #include "hackerlab/os/sys/wait.h" #include "hackerlab/os/signal.h" #include "hackerlab/char/str.h" #include "hackerlab/fs/file-names.h" #include "hackerlab/arrays/ar.h" #include "hackerlab/vu/safe.h" #include "tla/libarch/editor.h" int arch_run_editor (t_uchar * name) { int exit_status = 0; #if 0 t_uchar * editors[] = {"/usr/bin/nano", "/usr/bin/nano-tiny", "/usr/bin/emacs", "/usr/bin/vi", 0}; #endif t_uchar * editor = 0; t_uchar ** argv = 0; int pid; int x; editor = getenv ("EDITOR"); #if 0 if (!editor) { t_uchar ** editorp = 0; for (editorp = editors; *editorp != NULL; editorp++) if (!safe_access (*editorp, X_OK)) { editor = *editorp; break; } } #endif if (!editor) { safe_printfmt (2, "arch_run_editor: please set $EDITOR\n"); exit (2); } *(t_uchar **)ar_push ((void **)&argv, 0, sizeof (t_uchar *)) = str_save (0, editor); *(t_uchar **)ar_push ((void **)&argv, 0, sizeof (t_uchar *)) = str_save (0, name); *(t_uchar **)ar_push ((void **)&argv, 0, sizeof (t_uchar *)) = 0; pid = fork (); if (pid == -1) panic ("unable to fork for editor"); if (pid) { int status; int wait_pid; wait_pid = waitpid (pid, &status, 0); if (wait_pid < 0) { panic_msg ("error waiting for editor subprocess"); kill (0, SIGKILL); panic ("error waiting for editor subprocess"); } if (WIFSIGNALED (status)) { safe_printfmt (2, "\n"); safe_printfmt (2, "arch_run_editor: editor subprocess killed by signal %d\n", WTERMSIG (status)); safe_printfmt (2, "\n"); exit (2); return -1; } else if (!WIFEXITED (status)) { panic_msg ("waitpid returned for a non-exited editor process"); kill (0, SIGKILL); panic ("waitpid returned for a non-exited editor process and kill failed"); return -1; } else { exit_status = WEXITSTATUS (status); } } else { execvp (editor, (char **)argv); panic ("arch_run_editor: execvp for editor script returned to caller"); exit (2); } for (x = 0; x < ar_size ((void *)argv, 0, sizeof (t_uchar *)); ++x) lim_free (0, argv[x]); ar_free ((void **)&argv, 0); return exit_status; } /* tag: Colin Walters Wed, 19 Nov 2003 22:26:51 -0500 (editor.c) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-pristines.c0000644000175000017500000001143510457622000017635 0ustar useruser/* cmd-pristines.c * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "config-options.h" #include "hackerlab/cmd/main.h" #include "tla/libarch/namespace.h" #include "tla/libarch/project-tree.h" #include "tla/libarch/pristines.h" #include "tla/libarch/cmd-pristines.h" static t_uchar * usage = "[options] [limit]"; static t_uchar * version_string = (cfg__std__package " from regexps.com\n" "\n" "Copyright 2003 Tom Lord\n" "\n" "This is free software; see the source for copying conditions.\n" "There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\n" "PARTICULAR PURPOSE.\n" "\n" "Report bugs to " cfg__tla_bug_mail ".\n" "\n" cfg__std__release_id_string "\n"); #define OPTS(OP) \ OP (opt_help_msg, "h", "help", 0, \ "Display a help message and exit.") \ OP (opt_long_help, "H", 0, 0, \ "Display a verbose help message and exit.") \ OP (opt_version, "V", "version", 0, \ "Display a release identifier string\n" \ "and exit.") \ OP (opt_dir, "d", "dir DIR", 1, \ "cd to DIR first") \ OP (opt_unlocked, "u", "unlocked", 0, \ "return only unlocked pristines") \ OP (opt_locked, "l", "locked", 0, \ "return only locked pristines") \ OP (opt_reverse, "r", "reverse", 0, \ "reverse sort order") t_uchar arch_cmd_pristines_help[] = ("list pristine trees in a project tree\n" "Print the list of pristine revisions cached in project tree\n" "DIR (or the current directory).\n"); enum options { OPTS (OPT_ENUM) }; static struct opt_desc opts[] = { OPTS (OPT_DESC) {-1, 0, 0, 0, 0} }; int arch_cmd_pristines (t_uchar * program_name, int argc, char * argv[]) { int o; struct opt_parsed * option; int pristine_types; int reverse; char * dir; pristine_types = arch_any_pristine; reverse = 0; dir = str_save (0, "."); safe_buffer_fd (1, 0, O_WRONLY, 0); option = 0; while (1) { o = opt_standard (lim_use_must_malloc, &option, opts, &argc, argv, program_name, usage, version_string, arch_cmd_pristines_help, opt_help_msg, opt_long_help, opt_version); if (o == opt_none) break; switch (o) { default: safe_printfmt (2, "unhandled option `%s'\n", option->opt_string); panic ("internal error parsing arguments"); usage_error: opt_usage (2, argv[0], program_name, usage, 1); exit (1); /* bogus_arg: */ safe_printfmt (2, "ill-formed argument for `%s' (`%s')\n", option->opt_string, option->arg_string); goto usage_error; case opt_dir: { lim_free (0, dir); dir = str_save (0, option->arg_string); break; } case opt_unlocked: { pristine_types = arch_unlocked_pristine; break; } case opt_locked: { pristine_types = arch_locked_pristine; break; } case opt_reverse: { reverse = 1; break; } } } if (argc > 2) goto usage_error; { t_uchar * limitspec; t_uchar * tree_root = 0; t_uchar * archive = 0; t_uchar * limit = 0; rel_table answer = rel_table_nil; if (argc == 1) limitspec = 0; else limitspec = argv[1]; if (limitspec && !arch_valid_package_name (limitspec, arch_maybe_archive, arch_req_category, 1)) { safe_printfmt (2, "%s: invalid revision name (%s)\n", argv[0], limitspec); exit (2); } if (limitspec) { if (arch_valid_package_name (limitspec, arch_req_archive, arch_req_category, 1)) archive = arch_parse_package_name (arch_ret_archive, 0, limitspec); limit = arch_parse_package_name (arch_ret_non_archive, 0, limitspec); } tree_root = arch_tree_root (0, dir, 0); if (!tree_root) { safe_printfmt (2, "%s: directory is not a project tree (%s)\n", argv[0], dir); exit (2); } answer = arch_pristines (tree_root, archive, limit, pristine_types); if (reverse) arch_sort_table_by_name_field (1, answer, 0); rel_print_table (1, answer); } return 0; } /* tag: Tom Lord Thu May 22 00:19:17 2003 (ls-pristines.c) */ tla-1.3.5+dfsg/src/tla/libarch/sync-tree.h0000644000175000017500000000117510457622000016772 0ustar useruser/* sync-tree.h: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__SYNC_TREE_H #define INCLUDE__LIBARCH__SYNC_TREE_H #include "tla/libarch/archive.h" /* automatically generated __STDC__ prototypes */ extern void arch_sync_tree (int chatter_fd, t_uchar * tree_root, struct arch_archive * arch, t_uchar * archive, t_uchar * revision); #endif /* INCLUDE__LIBARCH__SYNC_TREE_H */ /* tag: Tom Lord Sat Jan 5 15:26:10 2002 (sync-tree.h) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-my-id.h0000644000175000017500000000121510457622000016634 0ustar useruser/* cmd-my-id.h: * **************************************************************** * Copyright (C) 2003 Tom Lord, Stig Brautaset * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__CMD_MY_ID_H #define INCLUDE__LIBARCH__CMD_MY_ID_H #include "hackerlab/machine/types.h" extern t_uchar arch_cmd_my_id_help[]; /* automatically generated __STDC__ prototypes */ extern int arch_cmd_my_id (t_uchar * program_name, int argc, char * argv[]); #endif /* INCLUDE__LIBARCH__CMD_MY_ID_H */ /* tag: Stig Brautaset Sat Jun 7 16:11:58 BST 2003 (cmd-my-id.h) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-file-find.h0000644000175000017500000000125410457622000017455 0ustar useruser/* cmd-file-find.h: * **************************************************************** * Copyright (C) 2003, 2004 Tom Lord, Stig Brautaset * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__CMD_FILE_FIND_H #define INCLUDE__LIBARCH__CMD_FILE_FIND_H #include "hackerlab/machine/types.h" extern t_uchar arch_cmd_file_find_help[]; /* automatically generated __STDC__ prototypes */ extern int arch_cmd_file_find (t_uchar * program_name, int argc, char * argv[]); #endif /* INCLUDE__LIBARCH__CMD_FILE_FIND_H */ /* tag: Jan Hudec Fr, 11 Jul 2003 12:34:30 +0200 (cmd-file-find.h) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-library-add.c0000644000175000017500000001544510457622000020014 0ustar useruser/* cmd-library-add.c * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "config-options.h" #include "hackerlab/cmd/main.h" #include "tla/libarch/my.h" #include "tla/libarch/libraries.h" #include "tla/libarch/namespace.h" #include "tla/libarch/archive.h" #include "tla/libarch/library-txn.h" #include "tla/libarch/cmd.h" #include "tla/libarch/cmdutils.h" #include "tla/libarch/cmd-library-add.h" static t_uchar * usage = "[options] revision"; static t_uchar * version_string = (cfg__std__package " from regexps.com\n" "\n" "Copyright 2003 Tom Lord\n" "\n" "This is free software; see the source for copying conditions.\n" "There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\n" "PARTICULAR PURPOSE.\n" "\n" "Report bugs to " cfg__tla_bug_mail ".\n" "\n" cfg__std__release_id_string "\n"); #define OPTS(OP) \ OP (opt_help_msg, "h", "help", 0, \ "Display a help message and exit.") \ OP (opt_long_help, "H", 0, 0, \ "Display a verbose help message and exit.") \ OP (opt_version, "V", "version", 0, \ "Display a release identifier string\n" \ "and exit.") \ OP (opt_archive, "A", "archive", 1, \ "Override `my-default-archive'") \ OP (opt_sparse, "s", "sparse", 0, \ "Don't fill in gaps in the library.") \ OP (opt_non_sparse, 0, "non-sparse", 0, \ "Fill in gaps in the library.") \ OP (opt_library, "L", "library LIB", 1, \ "specify which library to add to") \ OP (opt_devpath, 0, "for-links PATH", 1, \ "require a lib on the same device as PATH") \ OP (opt_unescaped, 0, "unescaped", 0, \ "show filenames in unescaped form") t_uchar arch_cmd_library_add_help[] = ("add a revision to the revision library\n" "Add REVISION to your revision library.\n" "\n" "This command has no effect and exits with status 0 if the\n" "indicated revision is already in the library.\n"); enum options { OPTS (OPT_ENUM) }; static struct opt_desc opts[] = { OPTS (OPT_DESC) {-1, 0, 0, 0, 0} }; int arch_cmd_library_add (t_uchar * program_name, int argc, char * argv[]) { int o; struct opt_parsed * option; t_uchar * default_archive = 0; int sparse = -1; t_uchar * in_library = 0; t_uchar * on_same_device = 0; int escape_classes = arch_escape_classes; default_archive = 0; safe_buffer_fd (1, 0, O_WRONLY, 0); option = 0; while (1) { o = opt_standard (lim_use_must_malloc, &option, opts, &argc, argv, program_name, usage, version_string, arch_cmd_library_add_help, opt_help_msg, opt_long_help, opt_version); if (o == opt_none) break; switch (o) { default: safe_printfmt (2, "unhandled option `%s'\n", option->opt_string); panic ("internal error parsing arguments"); usage_error: opt_usage (2, argv[0], program_name, usage, 1); exit (1); /* bogus_arg: */ safe_printfmt (2, "ill-formed argument for `%s' (`%s')\n", option->opt_string, option->arg_string); goto usage_error; case opt_archive: { default_archive = str_save (0, option->arg_string); break; } case opt_sparse: { sparse = 1; break; } case opt_non_sparse: { sparse = 0; break; } case opt_library: { lim_free (0, in_library); in_library = str_save (0, option->arg_string); break; } case opt_devpath: { lim_free (0, on_same_device); on_same_device = str_save (0, option->arg_string); break; } case opt_unescaped: { escape_classes = 0; break; } } } if (argc != 2) goto usage_error; if (default_archive && !arch_valid_archive_name (default_archive)) { safe_printfmt (2, "%s: invalid archive name (%s)\n", argv[0], default_archive); exit (1); } { t_uchar * revspec; t_uchar * archive = 0; t_uchar * revision = 0; struct arch_archive * arch = 0; revspec = argv[1]; if (!arch_valid_package_name (revspec, arch_maybe_archive, arch_req_version, 1)) { safe_printfmt (2, "%s: invalid revision specification (%s)\n", argv[0], revspec); exit (2); } { rel_table library_path = rel_table_nil; library_path = arch_my_library_path (arch_library_path_add_order); if (!rel_n_records (library_path)) { safe_printfmt (2, "%s: no default library (try tla my-revision-library -H)\n", argv[0]); exit (2); } rel_free_table (library_path); } archive = arch_parse_package_name (arch_ret_archive, default_archive, revspec); if (!archive) { safe_printfmt (2, "%s: no archive specified\n", argv[0]); exit (2); } arch = arch_archive_connect (archive, 0); if (arch_valid_package_name (revspec, arch_maybe_archive, arch_req_patch_level, 0)) { arch_check_for (arch, arch_req_patch_level, revspec); revision = arch_parse_package_name (arch_ret_non_archive, 0, revspec); } else { t_uchar * version = 0; rel_table revisions = rel_table_nil; arch_check_for (arch, arch_req_version, revspec); version = arch_parse_package_name (arch_ret_non_archive, 0, revspec); revisions = arch_archive_revisions (arch, version, 2); if (!rel_n_records (revisions)) { safe_printfmt (2, "%s: version has no revisions (%s/%s)\n", argv[0], archive, version); exit (1); } revision = str_save (0, rel_peek_str (revisions, rel_n_records (revisions) - 1, 0)); lim_free (0, version); rel_free_table (revisions); } arch_library_add (1, 0, arch, revision, in_library, on_same_device, sparse, escape_classes); lim_free (0, archive); lim_free (0, revision); arch_archive_close (arch); } return 0; } /* tag: Tom Lord Fri May 30 15:02:05 2003 (library-add.c) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-ancestry-graph.c0000644000175000017500000001720010457622000020540 0ustar useruser/* cmd-ancestry-graph.c: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "config-options.h" #include "hackerlab/cmd/main.h" #include "hackerlab/fs/file-names.h" #include "hackerlab/fs/cwd.h" #include "tla/libfsutils/tmp-files.h" #include "tla/libfsutils/rmrf.h" #include "tla/libarch/namespace.h" #include "tla/libarch/project-tree.h" #include "tla/libarch/my.h" #include "tla/libarch/ancestry.h" #include "tla/libarch/cmd-ancestry-graph.h" static t_uchar * usage = "[options] [revision]"; static t_uchar * version_string = (cfg__std__package " from regexps.com\n" "\n" "Copyright 2003 Tom Lord\n" "\n" "This is free software; see the source for copying conditions.\n" "There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\n" "PARTICULAR PURPOSE.\n" "\n" "Report bugs to " cfg__tla_bug_mail ".\n" "\n" cfg__std__release_id_string "\n"); #define OPTS(OP) \ OP (opt_help_msg, "h", "help", 0, \ "Display a help message and exit.") \ OP (opt_long_help, "H", 0, 0, \ "Display a verbose help message and exit.") \ OP (opt_version, "V", "version", 0, \ "Display a release identifier string\n" \ "and exit.") \ OP (opt_archive, "A", "archive", 1, \ "Override `my-default-archive'") \ OP (opt_dir, "d", "dir DIR", 1, \ "cd to DIR first") \ OP (opt_merges, "m", "merges", 0, \ "show merges into this development line") \ OP (opt_reverse, "r", "reverse", 0, \ "list oldest to newest") \ OP (opt_immediate, "i", "immediate", 0, \ "show only the immediate ancestor") \ OP (opt_previous, "p", "previous", 0, \ "show the (namespace) previous revision") t_uchar arch_cmd_ancestry_graph_help[] = ("display the ancestory of a revision\n" "Print a list describing the ancestry of a revision.\n"); enum options { OPTS (OPT_ENUM) }; static struct opt_desc opts[] = { OPTS (OPT_DESC) {-1, 0, 0, 0, 0} }; int arch_cmd_ancestry_graph (t_uchar * program_name, int argc, char * argv[]) { int o; struct opt_parsed * option; t_uchar * default_archive = 0; t_uchar * dir = 0; int merges = 0; int reverse = 0; int immediate = 0; int previous = 0; safe_buffer_fd (1, 0, O_WRONLY, 0); dir = str_save (0, "."); option = 0; while (1) { o = opt_standard (lim_use_must_malloc, &option, opts, &argc, argv, program_name, usage, version_string, arch_cmd_ancestry_graph_help, opt_help_msg, opt_long_help, opt_version); if (o == opt_none) break; switch (o) { default: safe_printfmt (2, "unhandled option `%s'\n", option->opt_string); panic ("internal error parsing arguments"); usage_error: opt_usage (2, argv[0], program_name, usage, 1); exit (1); /* bogus_arg: */ safe_printfmt (2, "ill-formed argument for `%s' (`%s')\n", option->opt_string, option->arg_string); goto usage_error; case opt_archive: { lim_free (0, default_archive); default_archive = str_save (0, option->arg_string); break; } case opt_dir: { lim_free (0, dir); dir = str_save (0, option->arg_string); break; } case opt_merges: { immediate = 0; previous = 0; merges = 1; break; } case opt_immediate: { immediate = 1; previous = 0; merges = 0; break; } case opt_previous: { immediate = 0; previous = 1; merges = 0; break; } case opt_reverse: { reverse = 1; break; } } } if (argc > 2) goto usage_error; default_archive = arch_my_default_archive (default_archive); { t_uchar * revision_spec = 0; t_uchar * archive = 0; t_uchar * version = 0; t_uchar * revision = 0; struct arch_archive * arch = 0; if (argc == 2) revision_spec = str_save (0, argv[1]); else revision_spec = arch_try_tree_version (program_name); if (!arch_valid_package_name (revision_spec, arch_maybe_archive, arch_req_package, 1)) { safe_printfmt (2, "%s: invalid revision spec (%s)\n", argv[0], revision_spec); exit (2); } archive = arch_parse_package_name (arch_ret_archive, default_archive, revision_spec); arch = arch_archive_connect (archive, 0); if (arch_valid_package_name (revision_spec, arch_maybe_archive, arch_req_package, 0)) { t_uchar * package = 0; rel_table versions = rel_table_nil; package = arch_parse_package_name (arch_ret_package, 0, revision_spec); versions = arch_archive_versions (arch, package); arch_sort_table_by_name_field (1, versions, 0); if (!rel_n_records (versions)) { safe_printfmt (2, "%s: package has no versions (%s)\n", argv[0], revision_spec); exit (1); } lim_free (0, revision_spec); revision_spec = str_save (0, rel_peek_str (versions, 0, 0)); lim_free (0, package); rel_free_table (versions); } if (arch_valid_package_name (revision_spec, arch_maybe_archive, arch_req_version, 0)) { rel_table revisions = rel_table_nil; version = arch_parse_package_name (arch_ret_package_version, 0, revision_spec); revisions = arch_archive_revisions (arch, version, 1); arch_sort_table_by_name_field (1, revisions, 0); if (!rel_n_records (revisions)) { safe_printfmt (2, "%s: no revisions in version (%s/%s)\n", argv[0], archive, revision_spec); exit (2); } revision = arch_parse_package_name (arch_ret_non_archive, 0, rel_peek_str (revisions, 0, 0)); rel_free_table (revisions); } else { version = arch_parse_package_name (arch_ret_package_version, 0, revision_spec); revision = arch_parse_package_name (arch_ret_non_archive, 0, revision_spec); } if (immediate) { t_uchar * ancestor = 0; ancestor = arch_ancestor_revision (arch, revision); safe_printfmt (1, "%s\n", ancestor); lim_free (0, ancestor); } else if (previous) { t_uchar * previous = 0; previous = arch_previous_revision (arch, revision); safe_printfmt (1, "%s\n", previous); lim_free (0, previous); } else { rel_table ancestry = rel_table_nil; ancestry = arch_trace_ancestry (arch, archive, revision, merges); if (reverse) rel_reverse_table (ancestry); rel_print_table (1, ancestry); rel_free_table (ancestry); } arch_archive_close (arch); lim_free (0, revision_spec); lim_free (0, archive); lim_free (0, version); lim_free (0, revision); } lim_free (0, default_archive); return 0; } /* tag: Tom Lord Thu Jun 26 20:20:27 2003 (cmd-ancestry.c) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-tree-root.c0000644000175000017500000001463510457622000017542 0ustar useruser/* cmd-tree-root.c * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "config-options.h" #include "hackerlab/cmd/main.h" #include "tla/libarch/project-tree.h" #include "tla/libarch/cmd-tree-root.h" static t_uchar * usage = "[options] [dir]"; static t_uchar * version_string = (cfg__std__package " from regexps.com\n" "\n" "Copyright 2003 Tom Lord\n" "\n" "This is free software; see the source for copying conditions.\n" "There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\n" "PARTICULAR PURPOSE.\n" "\n" "Report bugs to " cfg__tla_bug_mail ".\n" "\n" cfg__std__release_id_string "\n"); #define OPTS(OP) \ OP (opt_help_msg, "h", "help", 0, \ "Display a help message and exit.") \ OP (opt_long_help, "H", 0, 0, \ "Display a verbose help message and exit.") \ OP (opt_version, "V", "version", 0, \ "Display a release identifier string\n" \ "and exit.") \ OP (opt_accurate, 0, "accurate", 0, \ "error for mid-txn trees") \ OP (opt_silent, "s", "silent", 0, \ "exit status only") t_uchar arch_cmd_tree_root_help[] = ("find and print the root of a project tree\n" "Find and print the root of the project tree that contains\n" "DIR (or the current directory).\n" "The option --accurate checks for three possibilities:\n" "\n" " 1) The project tree was the subject of a commit that\n" " was killed before the log entry was added to the\n" " tree's patch log. It is unknown whether or not\n" " the commit took place in the archive. The {arch}\n" " directory contains the log file as \"++mid-commit\".\n" "\n" " 2) The project tree was the subject of a killed commit, but\n" " it is certain the commit took place. The log file\n" " is stored as \"++commit-definite\".\n" "\n" " 3) The project tree patch log is fully up-to-date (as far as\n" " arch knows).\n" "\n" "In case 1, exit with an error and error message.\n" "\n" "In case 2, install the log file before printing the tree root and\n" "exiting normally.\n" "\n" "In case 3, print the tree root and exit normally.\n"); enum options { OPTS (OPT_ENUM) }; static struct opt_desc opts[] = { OPTS (OPT_DESC) {-1, 0, 0, 0, 0} }; int arch_cmd_tree_root (t_uchar * program_name, int argc, char * argv[]) { int o; struct opt_parsed * option; int silent; int accurate; char * dir; t_uchar * result; enum arch_tree_state tree_state; int status; silent = 0; accurate = 0; safe_buffer_fd (1, 0, O_WRONLY, 0); option = 0; while (1) { o = opt_standard (lim_use_must_malloc, &option, opts, &argc, argv, program_name, usage, version_string, arch_cmd_tree_root_help, opt_help_msg, opt_long_help, opt_version); if (o == opt_none) break; switch (o) { default: safe_printfmt (2, "unhandled option `%s'\n", option->opt_string); panic ("internal error parsing arguments"); usage_error: opt_usage (2, argv[0], program_name, usage, 1); exit (1); /* bogus_arg: */ safe_printfmt (2, "ill-formed argument for `%s' (`%s')\n", option->opt_string, option->arg_string); goto usage_error; case opt_silent: { silent = 1; break; } case opt_accurate: { accurate = 1; break; } } } if (argc > 2) goto usage_error; if (argc == 1) dir = 0; else dir = argv[1]; result = arch_tree_root (&tree_state, (t_uchar *)dir, accurate); if (!result) { status = 1; if (!silent) safe_printfmt (2, "%s: not in a project tree\n dir: %s\n", argv[0], (dir ? dir : ".")); } else if (!accurate || (tree_state == arch_tree_in_ok_state)) { status = 0; if (!silent) safe_printfmt (1, "%s\n", result); } else { /* in a project tree, but not in an ok state, --accurate specified * * --silent doesn't supress these error messages. */ status = 1; switch (tree_state) { default: panic ("unknown project tree state"); break; case arch_tree_in_resolve_conflicts: { safe_printfmt (2, "%s: project tree in mid-merge\n dir: %s\n project tree %s\n", argv[0], (dir ? dir : "."), result); break; } case arch_tree_in_commit_definite: case arch_tree_in_mid_commit: { safe_printfmt (2, "%s: project tree in mid-commit\n dir: %s\n project tree %s\n", argv[0], (dir ? dir : "."), result); /* The larch version just implicitly repairs the tree for * arch_tree_in_commit_definite. This vesion should too, * eventually. */ break; } } } exit (status); return 0; } /* tag: Tom Lord Mon May 12 12:25:44 2003 (tree-root.c) */ tla-1.3.5+dfsg/src/tla/libarch/tag.h0000644000175000017500000000131210457622000015625 0ustar useruser/* tag.h: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__TAG_H #define INCLUDE__LIBARCH__TAG_H /* automatically generated __STDC__ prototypes */ extern void arch_tag (int chatter_fd, struct arch_archive * arch, t_uchar * revision, struct arch_archive * from_arch, t_uchar * from_revision, t_uchar * raw_log); #endif /* INCLUDE__LIBARCH__TAG_H */ /* tag: Tom Lord Sat Jan 5 15:26:10 2002 (tag.h) */ tla-1.3.5+dfsg/src/tla/libarch/cached-inventory.h0000644000175000017500000000117410457622000020322 0ustar useruser/* cached-inventory.h: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__CACHED_INVENTORY_H #define INCLUDE__LIBARCH__CACHED_INVENTORY_H #include "hackerlab/machine/types.h" #include "tla/libawk/relational.h" /* automatically generated __STDC__ prototypes */ extern rel_table arch_cached_index (t_uchar * tree_root); #endif /* INCLUDE__LIBARCH__CACHED_INVENTORY_H */ /* tag: Tom Lord Sat Jan 5 15:26:10 2002 (cached-inventory.h) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-ancestry-graph.h0000644000175000017500000000125410457622000020547 0ustar useruser/* cmd-ancestry-graph.h: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__CMD_ANCESTRY_GRAPH_H #define INCLUDE__LIBARCH__CMD_ANCESTRY_GRAPH_H #include "hackerlab/machine/types.h" extern t_uchar arch_cmd_ancestry_graph_help[]; /* automatically generated __STDC__ prototypes */ extern int arch_cmd_ancestry_graph (t_uchar * program_name, int argc, char * argv[]); #endif /* INCLUDE__LIBARCH__CMD_ANCESTRY_GRAPH_H */ /* tag: Tom Lord Sat Jan 5 15:26:10 2002 (cmd-ancestry.h) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-register-archive.h0000644000175000017500000000133210457622000021060 0ustar useruser/* cmd-register-archive.h: * **************************************************************** * Copyright (C) 2003 Tom Lord, Stig Brautaset * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__CMD_REGISTER_ARCHIVE_H #define INCLUDE__LIBARCH__CMD_REGISTER_ARCHIVE_H #include "hackerlab/machine/types.h" extern t_uchar arch_cmd_register_archive_help[]; /* automatically generated __STDC__ prototypes */ extern int arch_cmd_register_archive (t_uchar * program_name, int argc, char * argv[]); #endif /* INCLUDE__LIBARCH__CMD_REGISTER_ARCHIVE_H */ /* tag: Stig Brautaset Sat Jun 7 16:57:27 BST 2003 (cmd-register-archive.h) */ tla-1.3.5+dfsg/src/tla/libarch/star-merge.h0000644000175000017500000000256210457622000017130 0ustar useruser/* star-merge.h: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__STAR_MERGE_H #define INCLUDE__LIBARCH__STAR_MERGE_H #include "hackerlab/machine/types.h" #include "tla/libarch/archive.h" #include "tla/libawk/associative.h" /* automatically generated __STDC__ prototypes */ extern t_uchar * arch_nearest_star_ancester (t_uchar * from_tree_root, t_uchar * from_archive, t_uchar * from_revision, t_uchar * to_tree_root, t_uchar * to_archive, t_uchar * to_version); extern int arch_star_merge (int chatter_fd, struct arch_archive * from_arch, t_uchar * from_archive, t_uchar * from_revision, t_uchar * to_tree_root, struct arch_archive * to_arch, t_uchar * to_archive, t_uchar * to_version, t_uchar * cache_dir, t_uchar * changeset_output, int use_diff3, int forward, int escape_classes); extern void arch_merge3(int chatter_fd, t_uchar * mine_tree_root, t_uchar * base_tree_root, t_uchar * other_tree_root, int escape_classes); #endif /* INCLUDE__LIBARCH__STAR_MERGE_H */ /* tag: Tom Lord Sat Jan 5 15:26:10 2002 (star-merge.h) */ tla-1.3.5+dfsg/src/tla/libarch/archives.h0000644000175000017500000000345710457622000016672 0ustar useruser/* archives.h: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__ARCHIVES_H #define INCLUDE__LIBARCH__ARCHIVES_H #include "tla/libawk/relational.h" #define ARCH_REG_FAIL_NORM 0 #define ARCH_REG_FAIL_QUIET 1 #define ARCH_REG_FAIL_NOFAIL 2 /* automatically generated __STDC__ prototypes */ extern t_uchar * arch_archive_location_file (const t_uchar * archive_name); extern void arch_set_archive_location (const t_uchar * archive_name, const t_uchar * location, int force_p, int quietly_fail); extern t_uchar * arch_archive_location (const t_uchar * archive_name, int soft); extern void arch_delete_archive_location (const t_uchar * archive_name, int force_p); extern rel_table arch_registered_archives (void); extern t_uchar * arch_mirrored_at_name (const t_uchar * archive); extern t_uchar * arch_mirrored_from_name (const t_uchar * archive); extern t_uchar * arch_mirrored_at (const t_uchar * archive); extern t_uchar * arch_mirrored_from (const t_uchar * archive); extern t_uchar * arch_fs_archive_archive_version_path (const t_uchar * archive_path); extern t_uchar * arch_fs_archive_meta_info_path (const t_uchar * archive_path); extern t_uchar * arch_fs_archive_meta_info_item_path (const t_uchar * archive_path, const t_uchar * meta_info_name); #endif /* INCLUDE__LIBARCH__ARCHIVES_H */ /* tag: Tom Lord Sat Jan 5 15:26:10 2002 (archives.h) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-changes.h0000644000175000017500000000125710457622000017233 0ustar useruser/* cmd-changes.h: * **************************************************************** * Copyright (C) 2003 Tom Lord, Stig Brautaset * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__CMD_WHAT_CHANGED_H #define INCLUDE__LIBARCH__CMD_WHAT_CHANGED_H #include "hackerlab/machine/types.h" extern t_uchar arch_cmd_changes_help[]; /* automatically generated __STDC__ prototypes */ extern int arch_cmd_changes (t_uchar * program_name, int argc, char * argv[]); #endif /* INCLUDE__LIBARCH__CMD_WHAT_CHANGED_H */ /* tag: Stig Brautaset Sat Jun 7 17:54:58 BST 2003 (cmd-what-changed.h) */ tla-1.3.5+dfsg/src/tla/libarch/merge-points.h0000644000175000017500000000264110457622000017471 0ustar useruser/* merge-points.h: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__MERGE_POINTS_H #define INCLUDE__LIBARCH__MERGE_POINTS_H #include "tla/libawk/relational.h" #include "tla/libarch/archive.h" /* automatically generated __STDC__ prototypes */ extern rel_table arch_tree_merge_points (const t_uchar * tree_root, const t_uchar * into_archive, const t_uchar * into_spec, const t_uchar * from_archive, const t_uchar * from_spec); extern rel_table arch_archive_merge_points (struct arch_archive * into_arch, const t_uchar * into_spec, const t_uchar * from_archive, const t_uchar * from_spec, int upto); extern rel_table arch_new_in_version (const t_uchar * tree_root, const t_uchar * archive, const t_uchar * version); #endif /* INCLUDE__LIBARCH__MERGE_POINTS_H */ /* tag: Tom Lord Sat Jan 5 15:26:10 2002 (merge-points.h) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-help.c0000644000175000017500000001344610457622000016551 0ustar useruser/* cmd-help.c * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "config-options.h" #include "hackerlab/cmd/main.h" #include "tla/libarch/cmds.h" #include "tla/libarch/cmd-help.h" static t_uchar * usage = "[options]"; static t_uchar * version_string = (cfg__std__package " from regexps.com\n" "\n" "Copyright 2003 Tom Lord\n" "\n" "This is free software; see the source for copying conditions.\n" "There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\n" "PARTICULAR PURPOSE.\n" "\n" "Report bugs to " cfg__tla_bug_mail ".\n" "\n" cfg__std__release_id_string "\n"); #define OPTS(OP) \ OP (opt_help_msg, "h", "help", 0, \ "Display a help message and exit.") \ OP (opt_long_help, "H", 0, 0, \ "Display a verbose help message and exit.") \ OP (opt_basic, "b", "basic", 0, \ "Display basic commands only") \ OP (opt_version, "V", "version", 0, \ "Display a release identifier string\n" \ "and exit.") t_uchar arch_cmd_help_help[] = ("provide help with arch\n" "\n" "This command prints a list of the available commands.\n" "\n" "To see just a list of the options to a particular command,\n" "use:\n" "\n" " tla $cmd -h\n" "\n" "(where $cmd is the name of the command). For additional\n" "explanation about a given command, use:\n" "\n" " tla $cmd -H\n" "\n"); enum options { OPTS (OPT_ENUM) }; static struct opt_desc opts[] = { OPTS (OPT_DESC) {-1, 0, 0, 0, 0} }; int arch_cmd_help (t_uchar * program_name, int argc, char * argv[]) { int o; enum arch_command_level level = arch_level_advanced; struct opt_parsed * option; safe_buffer_fd (1, 0, O_WRONLY, 0); option = 0; while (1) { o = opt_standard (lim_use_must_malloc, &option, opts, &argc, argv, program_name, usage, version_string, arch_cmd_help_help, opt_help_msg, opt_long_help, opt_version); if (o == opt_none) break; switch (o) { default: safe_printfmt (2, "unhandled option `%s'\n", option->opt_string); panic ("internal error parsing arguments"); usage_error: opt_usage (2, argv[0], program_name, usage, 1); exit (1); /* bogus_arg: */ safe_printfmt (2, "ill-formed argument for `%s' (`%s')\n", option->opt_string, option->arg_string); goto usage_error; case opt_basic: { level = arch_level_basic; break; } } } if (argc != 1) goto usage_error; { int x; if (level != arch_level_basic) safe_printfmt(1, "use 'tla help -b' to display basic commands only; more suitable for beginners\n\n"); if (level == arch_level_basic) { safe_printfmt (1, " basic tla sub-commands\n"); safe_printfmt (1, " ----------------------"); } else { safe_printfmt (1, " tla sub-commands\n"); safe_printfmt (1, " ----------------"); } for (x = 0; arch_commands[x].name; ++x) if (arch_commands[x].level!=arch_level_deprecated && level>=arch_commands[x].level) { if (!arch_commands[x].fn) { if (!arch_commands[x].name[0]) safe_printfmt (1, "\n"); else safe_printfmt (1, "\n\n* %s\n\n", arch_commands[x].name); } else if (arch_commands[x].alias_of) { int name_len; t_uchar * help_nl; name_len = (int)str_length (arch_commands[x].name); help_nl = str_chr_index (arch_commands[x].long_help, '\n'); if (!help_nl) help_nl = arch_commands[x].long_help + str_length (arch_commands[x].long_help); safe_printfmt (1, "%*s%s : (alias for %s)\n", (28 - name_len), "", arch_commands[x].name, arch_commands[x].alias_of); } else { int name_len; t_uchar * help_nl; name_len = (int)str_length (arch_commands[x].name); help_nl = str_chr_index (arch_commands[x].long_help, '\n'); if (!help_nl) help_nl = arch_commands[x].long_help + str_length (arch_commands[x].long_help); safe_printfmt (1, "%*s%s : %.*s\n", (28 - name_len), "", arch_commands[x].name, (int)(help_nl - arch_commands[x].long_help), arch_commands[x].long_help); } } safe_printfmt (1, "\n"); } safe_printfmt (1, "\nUse 'tla command -h' for help on `command', or tla command -H for detailed help.\n"); if (level != arch_level_basic) safe_printfmt(1, "use 'tla help -b' to display basic commands only; more suitable for beginners\n"); else safe_printfmt(1, "use 'tla help' to display a full list of tla commands\n"); return 0; } /* tag: Tom Lord Wed Jun 11 21:04:35 2003 (cmd-help.c) */ tla-1.3.5+dfsg/src/tla/libarch/commit.c0000644000175000017500000006347710457622000016361 0ustar useruser/* commit.c: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/bugs/panic.h" #include "hackerlab/os/time.h" #include "hackerlab/char/str.h" #include "hackerlab/fs/file-names.h" #include "hackerlab/vu/safe.h" #include "tla/libdate/date-string.h" #include "tla/libfsutils/string-files.h" #include "tla/libfsutils/copy-file.h" #include "tla/libfsutils/tmp-files.h" #include "tla/libfsutils/rmrf.h" #include "tla/libarch/diffs.h" #include "tla/libarch/patch-logs.h" #include "tla/libarch/invent.h" #include "tla/libarch/my.h" #include "tla/libarch/hooks.h" #include "tla/libarch/namespace.h" #include "tla/libarch/pristines.h" #include "tla/libarch/project-tree.h" #include "tla/libarch/make-changeset-files.h" #include "tla/libarch/make-changeset.h" #include "tla/libarch/changeset-report.h" #include "tla/libarch/local-cache.h" #include "tla/libarch/inv-ids.h" #include "tla/libarch/changelogs.h" #include "tla/libarch/apply-changeset.h" #include "tla/libarch/inode-sig.h" #include "tla/libarch/chatter.h" #include "tla/libarch/commit.h" /* __STDC__ prototypes for static functions */ static t_uchar * arch_prepare_commit_changeset (t_uchar ** changelog_loc_ret, int chatter_fd, t_uchar ** cooked_log_ret, t_uchar * tree_root, t_uchar * raw_log, struct arch_archive * arch, t_uchar * revision, t_uchar * prev_level, rel_table file_list, int escape_classes); static rel_table pick_non_control (rel_table table); static rel_table pick_patch_logs (rel_table table); static void arch_commit_mid_commit (t_uchar * tree_root, t_uchar * cooked_log); static void arch_finish_commit (int chatter_fd, t_uchar * tree_root, t_uchar * archive, t_uchar * prev_revision, t_uchar * revision, t_uchar * changeset, t_uchar * changelog_loc, int escape_classes, int full_meta); static void arch_commit_failed (t_uchar * tree_root, t_uchar * archive, t_uchar * revision, t_uchar * changeset); static void commit_make_changeset_callback (void * vfd, const char * fmt, va_list ap); void arch_commit (int chatter_fd, struct arch_archive * arch, t_uchar * revision, t_uchar * tree_root, t_uchar * raw_log, rel_table file_list, int escape_classes) { int full_meta; t_uchar * errstr; t_uchar * version = 0; t_uchar * this_level = 0; t_uchar * prev_revision = 0; t_uchar * prev_level = 0; t_uchar * changelog_loc = 0; t_uchar * changeset_path = 0; t_uchar * cooked_log = 0; t_uchar * my_uid = 0; t_uchar * txn_id = 0; int error; invariant (!!raw_log); full_meta = arch_tree_has_meta_flag (tree_root); version = arch_parse_package_name (arch_ret_package_version, 0, revision); this_level = arch_parse_package_name (arch_ret_patch_level, 0, revision); prev_revision = arch_previous_revision (arch, revision); prev_level = arch_parse_package_name (arch_ret_patch_level, 0, prev_revision); changeset_path = arch_prepare_commit_changeset (&changelog_loc, chatter_fd, &cooked_log, tree_root, raw_log, arch, revision, prev_level, file_list, escape_classes); invariant (!!prev_level); /* Check the error return code for the "precommit" hook and exit if non-zero. */ error = arch_run_hook ("precommit", "ARCH_ARCHIVE", arch->name, "ARCH_REVISION", revision, "ARCH_TREE_ROOT", tree_root, (t_uchar*)0) ; if (error) { safe_printfmt (2, "arch_commit: precommit hook function failed with error (%d)\n commit cancelled.\n", error); exit (2); } my_uid = arch_my_id_uid (); txn_id = arch_generate_txn_id (); if (arch_archive_lock_revision (&errstr, arch, version, prev_level, my_uid, txn_id, this_level)) { safe_printfmt (2, "arch_commit: unable to acquire revision lock (%s)\n tree: %s\n revision: %s/%s\n", errstr, tree_root, arch->name, revision); exit (2); } if (arch_archive_put_log (&errstr, arch, version, prev_level, my_uid, txn_id, cooked_log)) { safe_printfmt (2, "arch_commit: unable to send log message to archive (%s)\n tree: %s\n revision: %s/%s\n", errstr, tree_root, arch->name, version); exit (2); } if (arch_archive_put_changeset (&errstr, arch, version, prev_level, my_uid, txn_id, this_level, changeset_path)) { safe_printfmt (2, "arch_commit: unable to send changeset to archive (%s)\n tree: %s\n revision: %s/%s\n", errstr, tree_root, arch->name, revision); exit (2); } if (arch_revision_ready (&errstr, arch, version, prev_level, my_uid, txn_id, this_level)) { safe_printfmt (2, "arch_commit: error sending revision to archive (%s)\n tree: %s\n revision: %s/%s\n", errstr, tree_root, arch->name, revision); exit (2); } arch_commit_mid_commit (tree_root, cooked_log); if (arch_archive_finish_revision (&errstr, arch, version, prev_level, my_uid, txn_id, this_level)) { arch_commit_failed (tree_root, arch->name, version, changeset_path); safe_printfmt (2, "arch_commit: unable to complete commit transaction (%s)\n tree: %s\n revision: %s/%s\n", errstr, tree_root, arch->name, version); exit (2); } arch_finish_commit (chatter_fd, tree_root, arch->name, prev_revision, revision, changeset_path, changelog_loc, escape_classes, full_meta); if (rel_n_records (file_list) == 0) arch_snap_inode_sig (tree_root, arch->name, revision); else { arch_snap_inode_sig_files(tree_root, arch->name, prev_revision, revision, file_list); } arch_run_hook ("commit", "ARCH_ARCHIVE", arch->name, "ARCH_REVISION", revision, "ARCH_TREE_ROOT", tree_root, (t_uchar*)0); lim_free (0, version); lim_free (0, this_level); lim_free (0, prev_revision); lim_free (0, prev_level); lim_free (0, changeset_path); lim_free (0, cooked_log); lim_free (0, changelog_loc); lim_free (0, my_uid); lim_free (0, txn_id); } static t_uchar * arch_prepare_commit_changeset (t_uchar ** changelog_loc_ret, int chatter_fd, t_uchar ** cooked_log_ret, t_uchar * tree_root, t_uchar * raw_log, struct arch_archive * arch, t_uchar * revision, t_uchar * prev_level, rel_table file_list, int escape_classes) { t_uchar * archive = arch->name; t_uchar * tmp_stem = 0; t_uchar * tmp_path = 0; t_uchar * changeset_basename = 0; t_uchar * changeset_path = 0; /* return value */ t_uchar * version = 0; t_uchar * level = 0; t_uchar * prev_revision = 0; t_uchar * prev_rev_path = 0; struct arch_make_changeset_report make_report = {0, }; /* should have a chatter callback here */ t_uchar * changelog_id_suffix = 0; t_uchar * changelog_x_id = 0; t_uchar * changelog_i_id = 0; t_uchar * changelog_id = 0; t_uchar * changelog_orig_loc = 0; t_uchar * changelog_mod_loc = 0; struct arch_changeset_report csr = {rel_table_nil, }; int changelog_diffs_fd = -1; int changelog_add_fd = -1; t_uchar * new_log_id = 0; t_uchar * new_log_loc = 0; int new_log_fd = -1; t_uchar * new_log_path = 0; t_uchar * cooked_log = 0; t_uchar * new_changelog_path = 0; /**************************************************************** * double check that we were handed a valid log message, if any */ invariant (arch_valid_log_file (raw_log)); /**************************************************************** * make a temp dir for the changeset */ tmp_stem = str_alloc_cat_many (0, ",,commit.", revision, "--", archive, str_end); tmp_path = tmp_file_name (tree_root, tmp_stem); rmrf_file (tmp_path); safe_mkdir (tmp_path, 0777); changeset_basename = str_alloc_cat (0, revision, ".patches"); changeset_path = file_name_in_vicinity (0, tmp_path, changeset_basename); /**************************************************************** * Compute the raw changeset * * The changeset computed here does _not_ include an add of the new log * message and does _not_ include updates to automatic changelogs. */ version = arch_parse_package_name (arch_ret_package_version, 0, revision); level = arch_parse_package_name (arch_ret_patch_level, 0, revision); prev_revision = str_alloc_cat_many (0, version, "--", prev_level, str_end); prev_rev_path = arch_find_or_make_local_copy (chatter_fd, tree_root, 0, arch, archive, prev_revision); if (chatter_fd >= 0) { make_report.callback = commit_make_changeset_callback; make_report.thunk = (void *)(long)chatter_fd; } if (!rel_n_records (file_list)) { assoc_table inode_shortcut = 0; arch_read_inode_sig (0, &inode_shortcut, tree_root, archive, prev_revision); arch_make_changeset (&make_report, prev_rev_path, tree_root, changeset_path, arch_unspecified_id_tagging, arch_inventory_unrecognized, rel_table_nil, inode_shortcut, 0, escape_classes); free_assoc_table (inode_shortcut); } else arch_make_files_changeset (&make_report, changeset_path, file_list, prev_rev_path, tree_root, arch_unspecified_id_tagging, arch_inventory_unrecognized, escape_classes); /**************************************************************** * Look for a Changelog for the version we're committing to. */ changelog_id_suffix = str_alloc_cat_many (0, "_automatic-ChangeLog--", archive, "/", version, str_end); changelog_x_id = str_alloc_cat (0, "x", changelog_id_suffix); changelog_i_id = str_alloc_cat (0, "i", changelog_id_suffix); { const t_uchar * tmp; tmp = assoc_get_str_taking (make_report.mod_file_loc_of, rel_make_field_str (changelog_x_id)); if (tmp) { changelog_mod_loc = str_save (0, tmp); changelog_id = str_save (0, changelog_x_id); } else { const t_uchar * tmp; tmp = assoc_get_str_taking (make_report.mod_file_loc_of, rel_make_field_str (changelog_i_id)); if (tmp) { changelog_mod_loc = str_save (0, tmp); changelog_id = str_save (0, changelog_i_id); } else { changelog_mod_loc = 0; changelog_id = 0; } } } if (changelog_mod_loc) { if (changelog_loc_ret) { *changelog_loc_ret = str_save (0, changelog_mod_loc); } { const t_uchar * tmp; tmp = assoc_get_str_taking (make_report.orig_file_loc_of, rel_make_field_str (changelog_id)); if (tmp) changelog_orig_loc = str_save (0, tmp); else changelog_orig_loc = 0; } } /* post-condition: * * changelog_id, changelog_mod_loc: 0 if no MOD tree changelog * set if there is a changelog * * changelog_orig_loc: 0 if no MOD or no ORIG changelog, set if both */ /**************************************************************** * Get a report about this changeset */ arch_evaluate_changeset (&csr, changeset_path); /**************************************************************** * Update the changeset indexes to reflect the patch log and changelog * * The changelog for this version, if any, is going to change * as a result of the new patch log for this commit. * Usually (though we don't count on it) it didn't change between * pristine and project tree. * * So, we have to touch up the changeset to reflect a diff to that * changelog. At this stage, only the file and dir indexes are * modified to reflect that (we haven't generated the new log entry * yet, so we can't produce the actual changelog diffs). * * Also, we know we're adding a new patch log, so the indexes should * reflect that, too. * * The reason to touch up the indexes early is that the patch log * is derived, in part, from those indexes. */ if (changelog_mod_loc && changelog_orig_loc) { changelog_diffs_fd = arch_changeset_add_diffs (&csr, &make_report, changeset_path, changelog_orig_loc, changelog_mod_loc, changelog_id); } else if (changelog_mod_loc) { changelog_add_fd = arch_changeset_add_file (&new_changelog_path, &csr, &make_report, changeset_path, changelog_mod_loc, changelog_id); } new_log_loc = arch_log_file (".", archive, revision); new_log_id = arch_log_file_id (archive, revision); new_log_fd = arch_changeset_add_file (&new_log_path, &csr, &make_report, changeset_path, new_log_loc, new_log_id); arch_changeset_rewrite_indexes (changeset_path, &csr); /**************************************************************** * Generate the Cooked Log Entry */ { t_uchar * my_id = 0; time_t now; t_uchar * std_date = 0; t_uchar * human_date = 0; int log_fd; my_id = arch_my_id (); now = time (0); std_date = standard_date (now); human_date = pretty_date (now); log_fd = make_output_to_string_fd (); safe_printfmt (log_fd, "Revision: %s\n", revision); safe_printfmt (log_fd, "Archive: %s\n", archive); safe_printfmt (log_fd, "Creator: %s\n", my_id); safe_printfmt (log_fd, "Date: %s\n", human_date); safe_printfmt (log_fd, "Standard-date: %s\n", std_date); /******************************** * automatic headers for various file and patch lists */ { rel_table new_files = rel_table_nil; rel_table removed_files = rel_table_nil; rel_table new_directories = rel_table_nil; rel_table removed_directories = rel_table_nil; rel_table modified_files = rel_table_nil; rel_table new_patches = rel_table_nil; rel_table removed_patches = rel_table_nil; new_files = pick_non_control (csr.added_files); rel_append_x (&new_files, csr.added_symlinks); rel_sort_table_by_field (0, new_files, 0); removed_files = pick_non_control (csr.removed_files); rel_append_x (&removed_files, csr.removed_symlinks); rel_sort_table_by_field (0, removed_files, 0); new_directories = pick_non_control (csr.added_dirs); removed_directories = pick_non_control (csr.removed_dirs); modified_files = rel_copy_table (csr.patched_regular_files); rel_append_x (&modified_files, csr.patched_symlinks); rel_append_x (&modified_files, csr.patched_binaries); rel_append_x (&modified_files, csr.file_metadata_changed); rel_append_x (&modified_files, csr.symlink_to_file); rel_append_x (&modified_files, csr.file_to_symlink); rel_sort_table_by_field (0, modified_files, 0); rel_uniq_by_field (&modified_files, 0); new_patches = pick_patch_logs (csr.added_files); removed_patches = pick_patch_logs (csr.removed_files); arch_print_log_list_header (log_fd, "New-files", new_files, 0); arch_print_log_list_header (log_fd, "New-directories", new_directories, 0); arch_print_log_list_header (log_fd, "Removed-files", removed_files, 0); arch_print_log_list_header (log_fd, "Removed-directories", removed_directories, 0); arch_print_log_pairs_header (log_fd, "Renamed-files", csr.renamed_files, 0, 1); arch_print_log_pairs_header (log_fd, "Renamed-directories", csr.renamed_dirs, 0, 1); arch_print_log_list_header (log_fd, "Modified-files", modified_files, 0); arch_print_log_list_header (log_fd, "Modified-directories", csr.dir_metadata_changed, 0); arch_print_log_list_header (log_fd, "New-patches", new_patches, 0); arch_print_log_list_header (log_fd, "Removed-patches", removed_patches, 0); rel_free_table (new_files); rel_free_table (removed_files); rel_free_table (new_directories); rel_free_table (removed_directories); rel_free_table (modified_files); rel_free_table (new_patches); rel_free_table (removed_patches); } /******************************** * copy the user headers, and copy or generate the log body */ { t_uchar * eoh = raw_log; while (1) { eoh = str_chr_index (eoh, '\n'); if (!eoh || (eoh[1] == '\n') || (!eoh[1])) break; else ++eoh; } if (eoh) { eoh = eoh + 1; safe_printfmt (log_fd, "%.*s", (int)(eoh - raw_log), raw_log); } if (eoh && *eoh) { safe_printfmt (log_fd, "%s", eoh); } else { safe_printfmt (log_fd, "\n\n"); } } /******************************** * oh... did i mention we were writing * the log to a string? */ cooked_log = string_fd_close (log_fd); lim_free (0, my_id); lim_free (0, std_date); lim_free (0, human_date); } /**************************************************************** * Write the log into the changeset */ safe_printfmt (new_log_fd, "%s", cooked_log); safe_close (new_log_fd); /**************************************************************** * Give a copy of the log to the caller. */ if (cooked_log_ret) *cooked_log_ret = str_save (0, cooked_log); /**************************************************************** * Generate the new changelog. */ if (changelog_add_fd > 0) { invariant (changelog_add_fd >= 0); invariant (changelog_diffs_fd < 0); arch_generate_changelog (changelog_add_fd, tree_root, 0, 0, level, new_log_path, archive, version); /* new_changelog_path already set. */ safe_close (changelog_add_fd); } else if (changelog_diffs_fd > 0) { int fd = -1; t_uchar * changelog_orig_path = 0; new_changelog_path = file_name_in_vicinity (0, changeset_path, ",,changelog"); fd = safe_open (new_changelog_path, O_WRONLY | O_CREAT | O_EXCL, 0444); arch_generate_changelog (fd, tree_root, 0, 0, level, new_log_path, archive, version); safe_close (fd); changelog_orig_path = file_name_in_vicinity (0, prev_rev_path, changelog_orig_loc); invariant (changelog_diffs_fd >= 0); invariant (changelog_add_fd < 0); arch_invoke_diff (changelog_diffs_fd, changelog_orig_path, changelog_orig_loc, new_changelog_path, changelog_mod_loc, 0, 0); safe_close (changelog_diffs_fd); rmrf_file (new_changelog_path); lim_free (0, changelog_orig_path); } lim_free (0, tmp_stem); lim_free (0, tmp_path); lim_free (0, changeset_basename); lim_free (0, version); lim_free (0, level); lim_free (0, prev_revision); lim_free (0, prev_rev_path); arch_free_make_changeset_report_data (&make_report); lim_free (0, changelog_id_suffix); lim_free (0, changelog_x_id); lim_free (0, changelog_i_id); lim_free (0, changelog_id); lim_free (0, changelog_orig_loc); lim_free (0, changelog_mod_loc); arch_free_changeset_report_data (&csr); lim_free (0, new_log_id); lim_free (0, new_log_loc); lim_free (0, new_log_path); lim_free (0, cooked_log); lim_free (0, new_changelog_path); /**************************************************************** * Give the user the path to the pristine tree for base-0. * It's up tot he caller to stash this in the archive. */ return changeset_path; } static rel_table pick_non_control (rel_table table) { int x; rel_table answer = rel_table_nil; for (x = 0; x < rel_n_records (table); ++x) { const t_uchar * id; id = rel_peek_str (table, x, 1); if (str_cmp_prefix ("A_", id)) rel_add_records (&answer, rel_copy_record (rel_peek_record (table, x)), rel_record_null); } return answer; } static rel_table pick_patch_logs (rel_table table) { int x; rel_table answer = rel_table_nil; for (x = 0; x < rel_n_records (table); ++x) { t_uchar * f = 0; t_uchar * t = 0; t_uchar * d = 0; t_uchar * level = 0; t_uchar * archive = 0; t_uchar * version = 0; t_uchar * revision = 0; t_uchar * fqrev = 0; f = str_save (0, rel_peek_str (table, x, 0)); t = file_name_tail (0, f); d = file_name_directory_file (0, f); if (arch_valid_patch_level_name (t)) { level = str_save (0, t); lim_free (0, f); f = d; t = file_name_tail (0, f); d = file_name_directory_file (0, f); if (!str_cmp ("patch-log", t)) { lim_free (0, f); f = d; t = file_name_tail (0, f); d = file_name_directory_file (0, f); if (arch_valid_archive_name (t)) { archive = str_save (0, t); lim_free (0, f); f = d; t = file_name_tail (0, f); d = file_name_directory_file (0, f); if (arch_valid_package_name (t, arch_no_archive, arch_req_version, 0)) { version = str_save (0, t); lim_free (0, f); f = d; t = file_name_tail (0, f); d = file_name_directory_file (0, f); if (arch_valid_package_name (t, arch_no_archive, arch_req_package, 0)) { lim_free (0, f); f = d; t = file_name_tail (0, f); d = file_name_directory_file (0, f); if (arch_valid_package_name (t, arch_no_archive, arch_req_category, 0)) { if (!str_cmp ("./{arch}", d)) { revision = str_alloc_cat_many (0, version, "--", level, str_end); fqrev = arch_fully_qualify (archive, revision); rel_add_records (&answer, rel_make_record_3_taking (rel_make_field_str (fqrev), rel_get_field (table, x, 1), rel_get_field (table, x, 2)), rel_record_null); } } } } } } lim_free (0, f); lim_free (0, t); lim_free (0, d); lim_free (0, level); lim_free (0, archive); lim_free (0, version); lim_free (0, revision); lim_free (0, fqrev); } } arch_sort_table_by_name_field (0, answer, 0); return answer; } static void arch_commit_mid_commit (t_uchar * tree_root, t_uchar * cooked_log) { arch_start_tree_commit (tree_root, cooked_log); } static void arch_finish_commit (int chatter_fd, t_uchar * tree_root, t_uchar * archive, t_uchar * prev_revision, t_uchar * revision, t_uchar * changeset, t_uchar * changelog_loc, int escape_classes, int full_meta) { t_uchar * dir = 0; t_uchar * dir_tail = 0; t_uchar * recycled_pristine_src = 0; t_uchar * recycled_pristine_tmp = 0; dir = file_name_directory_file (0, changeset); dir_tail = file_name_tail (0, dir); invariant (!str_cmp_prefix (",,", dir_tail)); arch_finish_tree_commit (tree_root, archive, revision, changelog_loc, full_meta); recycled_pristine_src = arch_find_pristine (0, tree_root, archive, prev_revision, arch_unlocked_pristine, arch_tree_pristine_search); if (recycled_pristine_src) { t_uchar * inventory_path = 0; struct arch_apply_changeset_report report = {0, }; arch_chatter (chatter_fd, "* update pristine tree (%s/%s => %s)\n", archive, prev_revision, revision); recycled_pristine_tmp = tmp_file_name (dir, ",,pristine"); safe_rename (recycled_pristine_src, recycled_pristine_tmp); inventory_path = file_name_in_vicinity (0, recycled_pristine_tmp, ",,index"); rmrf_file (inventory_path); arch_apply_changeset (&report, changeset, recycled_pristine_tmp, arch_unspecified_id_tagging, arch_inventory_unrecognized, 0, 0, 0, 0, 0, escape_classes); invariant (!arch_conflicts_occured (&report)); arch_install_pristine (tree_root, archive, revision, recycled_pristine_tmp); lim_free (0, inventory_path); } rmrf_file (dir); lim_free (0, dir); lim_free (0, dir_tail); lim_free (0, recycled_pristine_src); lim_free (0, recycled_pristine_tmp); } static void arch_commit_failed (t_uchar * tree_root, t_uchar * archive, t_uchar * revision, t_uchar * changeset) { t_uchar * dir = 0; t_uchar * dir_tail = 0; dir = file_name_directory_file (0, changeset); dir_tail = file_name_tail (0, dir); invariant (!str_cmp_prefix (",,", dir_tail)); arch_abort_tree_commit (tree_root, archive, revision); rmrf_file (dir); lim_free (0, dir); lim_free (0, dir_tail); } static void commit_make_changeset_callback (void * vfd, const char * fmt, va_list ap) { int fd; fd = (int)(t_ulong)vfd; safe_printfmt_va_list (fd, fmt, ap); safe_flush (1); } /* tag: Tom Lord Mon May 26 12:05:54 2003 (commit.c) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-library-branches.h0000644000175000017500000000133210457622000021044 0ustar useruser/* cmd-library-branches.h: * **************************************************************** * Copyright (C) 2003 Tom Lord, Stig Brautaset * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__CMD_LIBRARY_BRANCHES_H #define INCLUDE__LIBARCH__CMD_LIBRARY_BRANCHES_H #include "hackerlab/machine/types.h" extern t_uchar arch_cmd_library_branches_help[]; /* automatically generated __STDC__ prototypes */ extern int arch_cmd_library_branches (t_uchar * program_name, int argc, char * argv[]); #endif /* INCLUDE__LIBARCH__CMD_LIBRARY_BRANCHES_H */ /* tag: Stig Brautaset Sat Jun 7 15:01:46 BST 2003 (cmd-library-branches.h) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-default-id.c0000644000175000017500000002006110457622000017626 0ustar useruser/* cmd-default-id.c * **************************************************************** * Copyright (C) 2001, 2002, 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "config-options.h" #include "hackerlab/cmd/main.h" #include "tla/libarch/inv-ids.h" #include "tla/libarch/cmd.h" #include "tla/libarch/cmd-default-id.h" static t_uchar * usage = "[options] [TAG-PREFIX]"; static t_uchar * version_string = (cfg__std__package " from regexps.com\n" "\n" "Copyright 2001, 2002, 2003 Tom Lord\n" "\n" "This is free software; see the source for copying conditions.\n" "There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\n" "PARTICULAR PURPOSE.\n" "\n" "Report bugs to " cfg__tla_bug_mail ".\n" "\n" cfg__std__release_id_string "\n"); #define OPTS(OP) \ OP (opt_help_msg, "h", "help", 0, \ "Display a help message and exit.") \ OP (opt_long_help, "H", 0, 0, \ "Display a verbose help message and exit.") \ OP (opt_version, "V", "version", 0, \ "Display a release identifier string\n" \ "and exit.") \ OP (opt_dir, "D", "dir DIR", 1, \ "cd to DIR first") \ OP (opt_delete, "d", "delete", 0, \ "remove the default") \ OP (opt_strong, "s", "strong", 0, \ "use the strong default (default)") \ OP (opt_weak, "w", "weak", 0, \ "use the weak default") \ OP (opt_dont_care, 0, "dont-care", 0, \ "use the dont-care default") t_uchar arch_cmd_default_id_help[] = ("print or modify default ids\n" "For files in this directory, use:\n" "\n" " ID-PREFIX__BASENAME\n" "\n" "as the default explicit id for all files in this directory that\n" "do not have an explicit explicit id.\n" "\n" "With no arguments, print the previously set ID-PREFIX.\n" "\n" "By default, this command sets, prints or deletes a \"strong\n" "default\" -- a default explicit id which overrides implicit ids.\n" "\n" "With --weak, set (or print) a weak default id which is\n" "overridden by explicit ids.\n" "\n" "The --dont-care option sets (or with -d, clears) a flag for that\n" "directory that causes unidged files not to be reported as such\n" "in \"tla tree-lint\" reports.\n"); enum options { OPTS (OPT_ENUM) }; static struct opt_desc opts[] = { OPTS (OPT_DESC) {-1, 0, 0, 0, 0} }; enum which_default { strong, weak, dont_care }; enum op { set, delete, print }; int arch_cmd_default_id (t_uchar * program_name, int argc, char * argv[]) { int o; t_uchar * dir; struct opt_parsed * option; enum op op; enum which_default which; t_uchar * set_value; safe_buffer_fd (1, 0, O_WRONLY, 0); option = 0; dir = "."; op = print; which = strong; set_value = 0; while (1) { o = opt_standard (lim_use_must_malloc, &option, opts, &argc, argv, program_name, usage, version_string, arch_cmd_default_id_help, opt_help_msg, opt_long_help, opt_version); if (o == opt_none) break; switch (o) { default: safe_printfmt (2, "unhandled option `%s'\n", option->opt_string); panic ("internal error parsing arguments"); usage_error: opt_usage (2, argv[0], program_name, usage, 1); exit (1); /* bogus_arg: */ safe_printfmt (2, "ill-formed argument for `%s' (`%s')\n", option->opt_string, option->arg_string); goto usage_error; case opt_dir: { dir = str_save (0, option->arg_string); break; } case opt_weak: { which = weak; break; } case opt_strong: { which = strong; break; } case opt_dont_care: { which = dont_care; break; } case opt_delete: { op = delete; break; } } } if (op == delete ? (argc > 1) : (argc > 2)) goto usage_error; if (argc == 2) op = set; switch (op) { default: panic ("default-id hosed"); exit (2); /* notreached */ case set: { t_uchar * id_prefix; id_prefix = argv[1]; switch (which) { default: panic ("default-id hosed"); exit (2); /* notreached */ case strong: { arch_set_strong_explicit_default (dir, id_prefix); break; } case weak: { arch_set_weak_explicit_default (dir, id_prefix); break; } case dont_care: { arch_set_dont_care_explicit_default (dir); break; } } break; } case delete: { switch (which) { default: panic ("default-id hosed"); exit (2); /* notreached */ case strong: { arch_delete_strong_explicit_default (dir); break; } case weak: { arch_delete_weak_explicit_default (dir); break; } case dont_care: { arch_delete_dont_care_explicit_default (dir); break; } } break; } case print: { t_uchar * type; t_uchar * file; switch (which) { default: panic ("default-id hosed"); exit (2); /* notreached */ case strong: { file = arch_strong_explicit_dflt_file (dir); type = "strong"; print_id_file_contents: if (safe_access (file, F_OK)) { safe_printfmt (2, "%s explicit default not set\n", type); exit (1); } else { int in_fd; t_uchar * buf; size_t len; in_fd = safe_open (file, O_RDONLY, 0); buf = 0; len = 0; safe_file_to_string (&buf, &len, in_fd); safe_close (in_fd); safe_write_retry (1, buf, len); exit (0); } break; } case weak: { file = arch_weak_explicit_dflt_file (dir); type = "weak"; goto print_id_file_contents; } case dont_care: { file = arch_dont_care_explicit_dflt_file (dir); if (safe_access (file, F_OK)) safe_printfmt (1, "dont-care flag NOT set\n"); else safe_printfmt (1, "dont-care flag SET\n"); break; } } break; } } exit (3); /* notreached */ return 0; } /* tag: Tom Lord Wed May 14 13:56:06 2003 (default-tag.c) */ tla-1.3.5+dfsg/src/tla/libarch/library-txn.c0000644000175000017500000005216110457622000017330 0ustar useruser/* library-txn.c: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/bugs/panic.h" #include "hackerlab/char/str.h" #include "hackerlab/char/char-class.h" #include "hackerlab/fs/file-names.h" #include "hackerlab/vu/safe.h" #include "tla/libfsutils/rmrf.h" #include "tla/libfsutils/link-tree.h" #include "tla/libfsutils/ensure-dir.h" #include "tla/libfsutils/tmp-files.h" #include "tla/libfsutils/copy-file.h" #include "tla/libfsutils/same.h" #include "tla/libarch/arch.h" #include "tla/libarch/chatter.h" #include "tla/libarch/namespace.h" #include "tla/libarch/patch-logs.h" #include "tla/libarch/build-revision.h" #include "tla/libarch/invent.h" #include "tla/libarch/libraries.h" #include "tla/libarch/project-tree.h" #include "tla/libarch/apply-changeset.h" #include "tla/libarch/inode-sig.h" #include "tla/libarch/replay.h" #include "tla/libarch/my.h" #include "tla/libarch/library-txn.h" /* __STDC__ prototypes for static functions */ static void library_txn_callback (void * vfp, const char * fmt, va_list ap); /*(c arch_library_add) * t_uchar * arch_library_add (int chatter_fd, * struct arch_archive * arch, * t_uchar * revision, * t_uchar * opt_library_spec, * t_uchar * opt_same_dev_path) * * Return the path to the _library_ where REVISION from ARCH * should be added by library-add. * * OPT_LIBRARY_SPEC is the (optional) path to a library to which * the user explicitly requested addition. If not 0, we essentially * validate that parameter. * * OPT_SAME_DEV_PATH is the (optional) path to a file or directory * on the device to which we want to library-add. This is for * things like --link: we need to make sure that the revision * is added to a library on the same device. * * Subject to the constraints of the OPT_ parameters, the users * library path is searched (in add order): * * If the revision exists in some library, the first such library * is returned. * * Otherwise, if the revision's version exists in some library, the * first such library is returned. * * Otherwise, if the revision's branch exists in some library, the * first such library is returned. * * Otherwise, if the revision's category exists in some library, the * first such library is returned. * * Otherwise, if the revision's archive exists in some library, the * first such library is returned. * * Otherwise, the first library in the (qualifying part of) the path * is returned. * * This function will not return 0. If no place can be found to add * the revision subject to the constraints of the OPT_* parameters, * an error message is printed and the process exitted with status 2. */ t_uchar * arch_library_add_choice (const t_uchar * archive, const t_uchar * revision, const t_uchar * opt_library, const t_uchar * opt_same_dev_path) { rel_table full_user_path = rel_table_nil; rel_table search_path = rel_table_nil; t_uchar * target_library = 0; if (opt_library && opt_same_dev_path) { if (!on_same_device (opt_library, opt_same_dev_path)) { safe_printfmt (2, "tla: indicated library is not on the right device for dir\n lib %s\n dir %s\n", opt_library, opt_same_dev_path); exit (2); } } /* For the library path on which to search for * a place to add this revision. * * Note that the path is in general a subsequence of * the user's full path: */ full_user_path = arch_my_library_path (arch_library_path_add_order); if (opt_library) { int x; /* The user wants a specific library. * * Make sure it is really on the user's library path, * then make that one library the entire search path. */ for (x = 0; x < rel_n_records (full_user_path); ++x) { if (names_same_inode (opt_library, rel_peek_str (full_user_path, x, 0))) break; } if (x == rel_n_records (full_user_path)) { safe_printfmt (2, "tla: indicated library is not on library path\n dir %s\n", opt_library); exit (2); } rel_add_records (&search_path, rel_singleton_record_taking (rel_get_field (full_user_path, x, 0)), rel_record_null); } else search_path=make_search_path(full_user_path, opt_same_dev_path, 0); if (!rel_n_records (search_path)) { if (opt_same_dev_path) safe_printfmt (2, "tla: no library on the same device as dir\n dir %s\n", opt_same_dev_path); else safe_printfmt (2, "tla: no library to add to\n"); exit (2); } /* Now the search path is set. * * If the requested revision is already somewhere on that path, * we're done. */ { t_uchar * already_there = 0; already_there = arch_library_find (search_path, archive, revision, 1); if (already_there) { t_uchar * there_vsn = 0; t_uchar * there_branch = 0; t_uchar * there_category = 0; t_uchar * there_archive = 0; there_vsn = file_name_directory_file (0, already_there); there_branch = file_name_directory_file (0, there_vsn); there_category = file_name_directory_file (0, there_branch); there_archive = file_name_directory_file (0, there_category); target_library = file_name_directory_file (0, there_archive); lim_free (0, there_vsn); lim_free (0, there_branch); lim_free (0, there_category); lim_free (0, there_archive); lim_free (0, already_there); } /* Not there -- we must decide where to add it */ else { target_library = arch_find_best_library (archive, search_path, revision); } } rel_free_table (full_user_path); rel_free_table (search_path); return target_library; } /* * This function is similar to the above, but it may return NULL * * It finds the best greedy library to add a given revision to * If opt_same_dev_path has a value, matches are restricted to libraries on the * device containing this path */ t_uchar * arch_library_greedy_add_choice (const t_uchar * archive, const t_uchar * revision, const t_uchar * opt_same_dev_path, int require_greedy) { rel_table full_user_path = rel_table_nil; rel_table search_path = rel_table_nil; t_uchar * target_library = 0; full_user_path = arch_my_library_path (arch_library_path_add_order); search_path = make_search_path (full_user_path, opt_same_dev_path, require_greedy); target_library = arch_find_best_library (archive, search_path, revision); rel_free_table (full_user_path); rel_free_table (search_path); return target_library; } /* Produces a search path containing only libraries that matches the given * criteria: * if opt_same_dev_path has a value, canditates must be on the same device as * the provided path * if require_greedy is true, candidates must be greedy * returns 0 if there are no matching candidates */ rel_table make_search_path (rel_table full_user_path, const t_uchar * opt_same_dev_path, int require_greedy) { rel_table search_path = rel_table_nil; int x; for (x = 0; x < rel_n_records (full_user_path); ++x) { if (opt_same_dev_path && !on_same_device (opt_same_dev_path, rel_peek_str (full_user_path, x, 0))) continue; if (require_greedy && !arch_library_is_greedy(rel_peek_str (full_user_path, x, 0))) continue; rel_add_records (&search_path, rel_singleton_record_taking (rel_get_field (full_user_path, x, 0)), rel_record_null); } return search_path; } /* We search along the path and pick the first revision * with the most specific already-present stuff (same version, * branch, category, or archive) -- defaulting to the first in the * path. */ t_uchar * arch_find_best_library(const t_uchar * archive, rel_table search_path, const t_uchar * revision) { const t_uchar * best_guess; if (rel_n_records (search_path) == 0) return 0; if (rel_n_records (search_path) == 1) { best_guess = rel_peek_str (search_path, 0, 0); } else { t_uchar * category = 0; t_uchar * branch = 0; t_uchar * version = 0; int guess_priority; int x; category = arch_parse_package_name (arch_ret_category, 0, revision); branch = arch_parse_package_name (arch_ret_package, 0, revision); version = arch_parse_package_name (arch_ret_package_version, 0, revision); best_guess = rel_peek_str (search_path, 0, 0); guess_priority = 0; for (x = 0; x < rel_n_records (search_path); ++x) { if (arch_library_has_version (rel_peek_str (search_path, x, 0), archive, version)) { best_guess = rel_peek_str (search_path, x, 0); break; } else if (arch_library_has_branch (rel_peek_str (search_path, x, 0), archive, branch)) { best_guess = rel_peek_str (search_path, x, 0); guess_priority = 3; } else if ((guess_priority < 2) && arch_library_has_category (rel_peek_str (search_path, x, 0), archive, category)) { best_guess = rel_peek_str (search_path, x, 0); guess_priority = 2; } else if ((guess_priority < 1) && arch_library_has_archive (rel_peek_str (search_path, x, 0), archive)) { best_guess = rel_peek_str (search_path, x, 0); guess_priority = 1; } } lim_free (0, category); lim_free (0, branch); lim_free (0, version); } if (!best_guess) return 0; else return str_save (0, best_guess); } void arch_library_add (int chatter_fd, int no_patch_noise, struct arch_archive * arch, const t_uchar * revision, const t_uchar * opt_library, const t_uchar * opt_same_dev_path, int sparse, int escape_classes) { t_uchar * dest_library = 0; t_uchar * dest_directory = 0; t_uchar * fq_ancestor_rev = 0; t_uchar * previous_revision = 0; t_uchar * ancestor_archive = 0; t_uchar * ancestor_revision = 0; t_uchar * library_ancestor = 0; t_uchar * dest_dir_dir = 0; t_uchar * tmp_dir = 0; t_uchar * patch_set_dir = 0; t_uchar * log_path = 0; t_uchar * copy_log_path = 0; t_uchar * ancestor_rec_path = 0; t_uchar * prev_rec_path = 0; dest_library = arch_library_add_choice (arch->official_name, revision, opt_library, opt_same_dev_path); dest_directory = arch_library_revision_dir_in_lib (dest_library, arch->official_name, revision); if (!safe_access (dest_directory, F_OK)) { lim_free (0, dest_library); lim_free (0, dest_directory); return; } if (sparse < 0) { sparse = arch_library_is_sparse (dest_library); } fq_ancestor_rev = arch_ancestor_revision (arch, revision); previous_revision = arch_previous_revision (arch, revision); if (fq_ancestor_rev) { ancestor_archive = arch_parse_package_name (arch_ret_archive, 0, fq_ancestor_rev); ancestor_revision = arch_parse_package_name (arch_ret_non_archive, 0, fq_ancestor_rev); library_ancestor = arch_library_find (rel_table_nil, ancestor_archive, ancestor_revision, 1); } dest_dir_dir = file_name_directory_file (0, dest_directory); ensure_directory_exists (dest_dir_dir); tmp_dir = tmp_file_name (dest_dir_dir, ",,new-revision"); if (library_ancestor) { const int full_meta = arch_tree_has_meta_flag (library_ancestor); /* If the immediate ancestor exists in the same library, * then fill our tmp dir with a link-tree to that ancestor. * It will be patched for our target revision later. */ arch_chatter (chatter_fd, "* found immediate ancestor revision in library (%s/%s)\n", ancestor_archive, ancestor_revision); build_link_tree (library_ancestor, tmp_dir, full_meta); } else if (!fq_ancestor_rev || str_cmp (ancestor_archive, arch->official_name)) { /* If there is no immediate ancestor (we're trying to build * an import revision) or if the ancestor is in some other archive, * fill the tmp-dir with the target revision just by building * it from scratch. * * There's no need to further patch the tmp-dir after that. */ safe_mkdir (tmp_dir, 0777); arch_build_revision (chatter_fd, tmp_dir, arch, arch->official_name, revision, 0); patch_set_dir = file_name_in_vicinity (0, tmp_dir, ",,patch-set"); rmrf_file (patch_set_dir); if (fq_ancestor_rev) { arch_get_patch (arch, revision, patch_set_dir); } else { safe_mkdir (patch_set_dir, 0777); } goto no_need_to_patch; } else if (!sparse) { const int full_meta = arch_tree_has_meta_flag (library_ancestor); /* There is an ancestor, it's in the same archive, it's not * in the library, and we're not building a --sparse library. * So, recursively add the ancestor to the library and then * build a link-tree into tmp-dir. We'll patch tmp-dir to the * target revision later. */ arch_chatter (chatter_fd, "* recursively adding %s/%s to library\n", ancestor_archive, ancestor_revision); arch_library_add (chatter_fd, no_patch_noise, arch, ancestor_revision, opt_library, opt_same_dev_path, 0, escape_classes); library_ancestor = arch_library_find (rel_table_nil, ancestor_archive, ancestor_revision, 1); build_link_tree (library_ancestor, tmp_dir, full_meta); } else { /* There is an ancestor, it's in the same archive, it's * not in the library, but we're building a --sparse library. * * If some _earlier_ ancestor is at hand, link to that and then * patch. Otherwise, build the target revision from scratch. * * Either way, at the end, tmp-dir will have the target revision * and there's no need to further patch it. */ t_uchar * anc_arch = str_save (0, ancestor_archive); t_uchar * anc_rev = str_save (0, ancestor_revision); t_uchar * anc_lib = 0; int replay_status = 1; /* list of patches to apply to revision in library to achieve new revision */ rel_table revisions = rel_table_nil; /* this is the first patch missing */ rel_add_records (&revisions, rel_singleton_record_taking (rel_make_field_str (revision)), rel_record_null); arch_chatter (chatter_fd, "* searching ancestor revision in library in archive %s\n", ancestor_archive); /* search backwards in the library for a revision to link to */ while (anc_rev && !anc_lib) { t_uchar * fq_anc_rev = 0; t_uchar * prev_rev = 0; /* add revision to list */ rel_add_records (&revisions, rel_singleton_record_taking (rel_make_field_str (anc_rev)), rel_record_null); /* look in the library for the immediate ancestor */ fq_anc_rev = arch_ancestor_revision (arch, anc_rev); if (fq_anc_rev) { lim_free (0, anc_arch); lim_free (0, anc_rev); anc_arch = arch_parse_package_name (arch_ret_archive, 0, fq_anc_rev); anc_rev = arch_parse_package_name (arch_ret_non_archive, 0, fq_anc_rev); anc_lib = arch_library_find (rel_table_nil, anc_arch, anc_rev, 1); } if (!fq_anc_rev || str_cmp (anc_arch, arch->official_name)) { /* no ancestor in the same archive */ arch_chatter (chatter_fd, "* no ancestor in library for revision %s/%s in the same archive\n", anc_arch, revision); lim_free (0, fq_anc_rev); lim_free (0, prev_rev); break; } lim_free (0, fq_anc_rev); lim_free (0, prev_rev); } /* let's patch the found revision in the library up to the needed revision */ if (anc_lib) { const int full_meta = arch_tree_has_meta_flag (anc_lib); arch_chatter (chatter_fd, "* found ancestor revision in library (%s/%s)\n", anc_arch, anc_rev); arch_chatter (chatter_fd, "* patching for this revision (%s/%s)\n", ancestor_archive, revision); build_link_tree (anc_lib, tmp_dir, full_meta); rel_reverse_table (revisions); replay_status = arch_replay_list (chatter_fd, 1, tmp_dir, arch, revisions, 0, 0, escape_classes); invariant (!replay_status); lim_free (0, anc_lib); } else { /* otherwise (1st revision in library) build the revision from scratch */ safe_mkdir (tmp_dir, 0777); arch_build_revision (chatter_fd, tmp_dir, arch, arch->official_name, revision, 0); } /* keep last patchset inside revision */ patch_set_dir = file_name_in_vicinity (0, tmp_dir, ",,patch-set"); rmrf_file (patch_set_dir); arch_get_patch (arch, revision, patch_set_dir); lim_free (0, anc_arch); lim_free (0, anc_rev); rel_free_table (revisions); goto no_need_to_patch; } /* This is reached only if we have one-last patch to make to * tmp-dir to achieve the target revision. * * If tmp-dir already has the target, then we `goto no_need_to_patch', * below. */ patch_set_dir = file_name_in_vicinity (0, tmp_dir, ",,patch-set"); rmrf_file (patch_set_dir); arch_get_patch (arch, revision, patch_set_dir); { struct arch_apply_changeset_report report = {0,}; arch_chatter (chatter_fd, "* patching for this revision (%s/%s)\n", arch->official_name, revision); if ((chatter_fd >= 0) && !no_patch_noise) { report.callback = library_txn_callback; report.thunk = (void *)(long)chatter_fd; } arch_apply_changeset (&report, patch_set_dir, tmp_dir, arch_unspecified_id_tagging, arch_inventory_unrecognized, 0, 0, 0, 0, 0, escape_classes); invariant (!arch_conflicts_occured (&report)); arch_free_apply_changeset_report_data (&report); } no_need_to_patch: /* Finish up adding ancillary files to the tmp-dir and then * install it in the library. */ log_path = arch_log_file (tmp_dir, arch->official_name, revision); copy_log_path = file_name_in_vicinity (0, patch_set_dir, "=log.txt"); copy_file (log_path, copy_log_path); ancestor_rec_path = file_name_in_vicinity (0, patch_set_dir, "=ancestor"); prev_rec_path = file_name_in_vicinity (0, patch_set_dir, "=previous"); { int out_fd; out_fd = safe_open (ancestor_rec_path, O_WRONLY | O_CREAT | O_EXCL, 0444); safe_printfmt (out_fd, "%s\n", fq_ancestor_rev); safe_close (out_fd); out_fd = safe_open (prev_rec_path, O_WRONLY | O_CREAT | O_EXCL, 0444); safe_printfmt (out_fd, "%s\n", previous_revision); safe_close (out_fd); } { t_uchar * version = 0; rel_table index = rel_table_nil; t_uchar * index_by_name_path = 0; t_uchar * index_path = 0; int index_by_name_fd = -1; int index_fd = -1; version = arch_parse_package_name (arch_ret_package_version, 0, revision); arch_set_tree_version (tmp_dir, arch->official_name, version); index = arch_source_inventory (tmp_dir, 1, 0, 0); index_by_name_path = file_name_in_vicinity (0, tmp_dir, ",,index-by-name"); index_path = file_name_in_vicinity (0, tmp_dir, ",,index"); rmrf_file (index_by_name_path); rmrf_file (index_path); index_by_name_fd = safe_open (index_by_name_path, O_WRONLY | O_CREAT | O_EXCL, 0444); rel_print_pika_escape_iso8859_1_table (index_by_name_fd, arch_escape_classes, index); safe_close (index_by_name_fd); rel_sort_table_by_field (0, index, 1); index_fd = safe_open (index_path, O_WRONLY | O_CREAT | O_EXCL, 0444); rel_print_pika_escape_iso8859_1_table (index_fd, arch_escape_classes, index); safe_close (index_fd); lim_free (0, version); rel_free_table (index); lim_free (0, index_by_name_path); lim_free (0, index_path); } arch_snap_inode_sig (tmp_dir, arch->official_name, revision); safe_rename (tmp_dir, dest_directory); lim_free (0, dest_library); lim_free (0, dest_directory); lim_free (0, fq_ancestor_rev); lim_free (0, previous_revision); lim_free (0, ancestor_archive); lim_free (0, ancestor_revision); lim_free (0, library_ancestor); lim_free (0, dest_dir_dir); lim_free (0, tmp_dir); lim_free (0, patch_set_dir); lim_free (0, ancestor_rec_path); lim_free (0, prev_rec_path); } static void library_txn_callback (void * vfp, const char * fmt, va_list ap) { int fd; fd = (int)(t_ulong)vfp; if (fd >= 0) { safe_printfmt_va_list (fd, fmt, ap); safe_flush (1); } } /* tag: Tom Lord Fri May 30 13:50:27 2003 (library-txn.c) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-mv.c0000644000175000017500000000764110457622000016243 0ustar useruser/* cmd-mv.c * **************************************************************** * Copyright (C) 2001, 2002, 2003 Tom Lord, Rob Weir * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "config-options.h" #include "hackerlab/cmd/main.h" #include "hackerlab/fs/file-names.h" #include "tla/libarch/inv-ids.h" #include "tla/libarch/cmd-mv.h" static t_uchar * usage = "[options] from to OR from1 from2 ... dir"; static t_uchar * version_string = (cfg__std__package " from regexps.com\n" "\n" "Copyright 2001, 2002, 2003 Tom Lord\n" "\n" "This is free software; see the source for copying conditions.\n" "There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\n" "PARTICULAR PURPOSE.\n" "\n" "Report bugs to " cfg__tla_bug_mail ".\n" "\n"); #define OPTS(OP) \ OP (opt_help_msg, "h", "help", 0, \ "Display a help message and exit.") \ OP (opt_long_help, "H", 0, 0, \ "Display a verbose help message and exit.") \ OP (opt_version, "V", "version", 0, \ "Display a release identifier string\n" \ "and exit.") t_uchar arch_cmd_mv_help[] = ("move a file (or dir, or symlink) and its explicit inventory tag\n" "This command is suitable as a replacement for mv(1) within any tla\n" "tree for any move operation, regardless of id tagging method.\n"); enum options { OPTS (OPT_ENUM) }; static struct opt_desc opts[] = { OPTS (OPT_DESC) {-1, 0, 0, 0, 0} }; int arch_cmd_mv (t_uchar * program_name, int argc, char * argv[]) { int o; int i; struct opt_parsed * option; t_uchar * dest_name = 0; int dest_is_dir = 0; struct stat stat_buf; safe_buffer_fd (1, 0, O_WRONLY, 0); option = 0; while (1) { o = opt_standard (lim_use_must_malloc, &option, opts, &argc, argv, program_name, usage, version_string, arch_cmd_mv_help, opt_help_msg, opt_long_help, opt_version); if (o == opt_none) break; switch (o) { default: safe_printfmt (2, "unhandled option `%s'\n", option->opt_string); panic ("internal error parsing arguments"); usage_error: opt_usage (2, argv[0], program_name, usage, 1); exit (1); /* bogus_arg: */ safe_printfmt (2, "ill-formed argument for `%s' (`%s')\n", option->opt_string, option->arg_string); goto usage_error; } } if (argc < 3) goto usage_error; dest_name = argv[argc-1]; if (safe_access (dest_name, F_OK) != -1) { safe_stat (dest_name, &stat_buf); if (stat_buf.st_mode & S_IFDIR) dest_is_dir = 1; } /* if the destination is not a directory, then there should be only 2 args for a simple rename */ if (!dest_is_dir && (argc != 3)) goto usage_error; for (i=1; i < argc-1; ++i) { int move_id = 0; t_uchar * new_name; /* if argv[i] is NOT a directory AND it has an explicit tag, we need to move this tag */ safe_stat (argv[i], &stat_buf); if (!(stat_buf.st_mode & S_IFDIR) && (safe_access (arch_explicit_id_file_for (argv[i]), F_OK) != -1)) move_id = 1; if (dest_is_dir) { /* if dest_name is a directory, move arg into it */ new_name = file_name_in_vicinity (0, dest_name, file_name_tail (0, argv[i])); } else { /* otherwise, simply rename the file */ new_name = dest_name; } safe_rename (argv[i], new_name); if (move_id) arch_move_explicit_id (argv[i], new_name); } return 0; } /* tag: Rob Weir Sun Sep 21 15:22:53 EST 2003 (cmd-mv.c) */ tla-1.3.5+dfsg/src/tla/libarch/build-revision.h0000644000175000017500000000154710457622000020017 0ustar useruser/* build-revision.h: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__BUILD_REVISION_H #define INCLUDE__LIBARCH__BUILD_REVISION_H #include "tla/libarch/archive.h" /* automatically generated __STDC__ prototypes */ extern int arch_build_revision (int chatter_fd, const t_uchar * dest_dir, struct arch_archive * arch, const t_uchar * archive, const t_uchar * revision, const t_uchar * cache_dir); #endif /* INCLUDE__LIBARCH__BUILD_REVISION_H */ /* tag: Tom Lord Sat Jan 5 15:26:10 2002 (build-revision.h) */ tla-1.3.5+dfsg/src/tla/libarch/archives.c0000644000175000017500000001422510457622000016660 0ustar useruser/* archives.c: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/os/errno.h" #include "hackerlab/bugs/panic.h" #include "hackerlab/char/char-class.h" #include "hackerlab/char/str.h" #include "hackerlab/mem/mem.h" #include "hackerlab/fs/file-names.h" #include "hackerlab/fs/cwd.h" #include "hackerlab/vu/safe.h" #include "tla/libfsutils/tmp-files.h" #include "tla/libfsutils/read-line.h" #include "tla/libfsutils/dir-listing.h" #include "tla/libawk/relational.h" #include "tla/libarch/my.h" #include "tla/libarch/namespace.h" #include "tla/libarch/archive-version.h" #include "tla/libarch/archives.h" t_uchar * arch_archive_location_file (const t_uchar * archive_name) { t_uchar * location_dir = 0; t_uchar * answer = 0; if (! arch_valid_archive_name(archive_name)) { int ign; printfmt (&ign, 2, "Invalid archive name `%s'.", archive_name); exit (2); } location_dir = arch_my_archive_locations_dir (); answer = file_name_in_vicinity (0, location_dir, archive_name); lim_free (0, location_dir); return answer; } void arch_set_archive_location (const t_uchar * archive_name, const t_uchar * location, int force_p, int quietly_fail) { t_uchar * file = 0; t_uchar * dir = 0; t_uchar * tmp_name = 0; file = arch_archive_location_file (archive_name); dir = file_name_directory_file (0, file); tmp_name = tmp_file_name (dir, ",,new-location"); if (!force_p && !safe_access (file, F_OK)) { if (! quietly_fail) { safe_printfmt (2, "archive already registered: %s\n", archive_name); if (quietly_fail == ARCH_REG_FAIL_NOFAIL) { return; } else { exit (2); } } } else { int ign; int out_fd; arch_ensure_my_arch_params (); vu_mkdir (&ign, dir, 0700); out_fd = safe_open (tmp_name, O_WRONLY | O_CREAT | O_EXCL, 0666); safe_printfmt (out_fd, "%s\n", location); safe_close (out_fd); safe_rename (tmp_name, file); } lim_free (0, file); lim_free (0, dir); lim_free (0, tmp_name); } t_uchar * arch_archive_location (const t_uchar * archive_name, int soft) { t_uchar * file = 0; t_uchar * first_line = 0; t_uchar * start; t_uchar * end; t_uchar * answer = 0; file = arch_archive_location_file (archive_name); if (safe_access (file, F_OK)) { if (soft) return 0; safe_printfmt (2, "archive not registered: %s\n", archive_name); safe_printfmt (2, " (see register-archive)\n"); exit (2); } first_line = read_line_from_file (file); for (start = first_line; char_is_blank (*start); ++start) ; for (end = start; *end && !char_is_space (*start); ++end) ; answer = str_save_n (0, start, end - start); lim_free (0, file); lim_free (0, first_line); return answer; } void arch_delete_archive_location (const t_uchar * archive_name, int force_p) { t_uchar * file = 0; int errn; file = arch_archive_location_file (archive_name); if (vu_unlink (&errn, file)) { if (!(force_p && (errn == ENOENT))) { safe_printfmt (2, "archive not registered: %s\n", archive_name); safe_printfmt (2, " (see register-archive)\n"); exit (2); } } lim_free (0, file); } rel_table arch_registered_archives (void) { t_uchar * dir = 0; rel_table files = rel_table_nil; rel_table answer = rel_table_nil; int x; dir = arch_my_archive_locations_dir (); files = maybe_directory_files (dir); for (x = 0; x < rel_n_records (files); ++x) { const t_uchar * f; f = rel_peek_str (files, x, 0); if (str_cmp (".", f) && str_cmp ("..", f) && arch_valid_archive_name (f)) { t_uchar * location = 0; location = arch_archive_location (f, 0); rel_add_records (&answer, rel_make_record_2_taking (rel_get_field (files, x, 0), rel_make_field_str (location)), rel_record_null); lim_free (0, location); } } lim_free (0, dir); rel_free_table (files); return answer; } t_uchar * arch_mirrored_at_name (const t_uchar * archive) { t_uchar * mirror_name = 0; mirror_name = str_alloc_cat (0, archive, "-MIRROR"); return mirror_name; } t_uchar * arch_mirrored_from_name (const t_uchar * archive) { t_uchar * source_name = 0; source_name = str_alloc_cat (0, archive, "-SOURCE"); return source_name; } t_uchar * arch_mirrored_at (const t_uchar * archive) { t_uchar * mirror_name = 0; t_uchar * mirror_loc = 0; mirror_name = arch_mirrored_at_name (archive); mirror_loc = arch_archive_location (mirror_name, 1); if (!mirror_loc) { lim_free (0, mirror_name); mirror_name = 0; } lim_free (0, mirror_loc); return mirror_name; } t_uchar * arch_mirrored_from (const t_uchar * archive) { t_uchar * source_name = 0; t_uchar * source_loc = 0; source_name = arch_mirrored_from_name (archive); source_loc = arch_archive_location (source_name, 1); if (!source_loc) { lim_free (0, source_name); source_name = 0; } lim_free (0, source_loc); return source_name; } t_uchar * arch_fs_archive_archive_version_path (const t_uchar * archive_path) { return file_name_in_vicinity (0, archive_path, ".archive-version"); } t_uchar * arch_fs_archive_meta_info_path (const t_uchar * archive_path) { return file_name_in_vicinity (0, archive_path, "=meta-info"); } t_uchar * arch_fs_archive_meta_info_item_path (const t_uchar * archive_path, const t_uchar * meta_info_name) { t_uchar * meta_info_dir = 0; t_uchar * meta_info_path; meta_info_dir = arch_fs_archive_meta_info_path (archive_path); meta_info_path = file_name_in_vicinity (0, meta_info_dir, meta_info_name); lim_free (0, meta_info_dir); return meta_info_path; } /* tag: Tom Lord Sun May 18 19:17:40 2003 (archives.c) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-logs.h0000644000175000017500000000121610457622000016562 0ustar useruser/* cmd-logs.h: * **************************************************************** * Copyright (C) 2003 Tom Lord, Stig Brautaset * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__CMD_LOG_LS_H #define INCLUDE__LIBARCH__CMD_LOG_LS_H #include "hackerlab/machine/types.h" extern t_uchar arch_cmd_logs_help[]; /* automatically generated __STDC__ prototypes */ extern int arch_cmd_logs (t_uchar * program_name, int argc, char * argv[]); #endif /* INCLUDE__LIBARCH__CMD_LOG_LS_H */ /* tag: Stig Brautaset Sat Jun 7 15:35:19 BST 2003 (cmd-log-ls.h) */ tla-1.3.5+dfsg/src/tla/libarch/apply-changeset.h0000644000175000017500000000710510457622000020144 0ustar useruser/* apply-changeset.h: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__APPLY_CHANGESET_H #define INCLUDE__LIBARCH__APPLY_CHANGESET_H #include "hackerlab/machine/types.h" #include "tla/libarch/changeset-report.h" #include "hackerlab/machine/types.h" #include "hackerlab/os/stdarg.h" #include "tla/libawk/relational.h" #include "tla/libarch/inv-ids.h" typedef void (*arch_apply_changeset_report_callback) (void * thunk, const char * fmt, va_list ap); struct arch_apply_changeset_report { arch_apply_changeset_report_callback callback; void * thunk; rel_table removed_files; /* [0] target-loc [1] id (sort 0) */ rel_table removed_dirs; /* [0] target-loc [1] id (sort 0) */ rel_table missing_removed_files; /* [0] orig-loc [1] id (sort 0) */ rel_table missing_removed_dirs; /* [0] orig-loc [1] id (sort 0) */ rel_table missing_renamed_files; /* [0] orig-loc [1] mod-loc [2] id (sort 0) */ rel_table missing_renamed_dirs; /* [0] orig-loc [1] mod-loc [2] id (sort 0) */ rel_table new_dirs; /* [0] target-loc [1] id (sort 0) */ rel_table renamed_dirs; /* [0] oldtgloc [1] loc [2] id (sort 0) */ rel_table new_files; /* [0] loc [1] id (sort 0) */ rel_table renamed_files; /* [0] oldtgloc [1] loc [2] id (sort 0) */ rel_table modified_files; /* [0] loc [1] id (sort 0) */ rel_table modified_dirs; /* [0] loc [1] id (sort 0) */ rel_table missing_file_for_patch; /* [0] mod-loc [1] id (sort 0) */ rel_table missing_dir_for_patch; /* [0] mod-loc [1] id (sort 0) */ rel_table meta_modified_files; /* [0] loc [1] id (sort 0) */ rel_table meta_modified_dirs; /* [0] loc [1] id (sort 0) */ rel_table missing_file_for_meta_patch; /* [0] mod-loc [1] id (sort 0) */ rel_table missing_dir_for_meta_patch; /* [0] mod-loc [1] id (sort 0) */ rel_table conflict_files; /* [0] loc [1] id (sort 0) */ rel_table conflict_dirs; /* [0] loc [1] id (sort 0) */ rel_table metadata_conflict_files; /* [0] loc [1] id (sort 0) */ rel_table metadata_conflict_dirs; /* [0] loc [1] id (sort 0) */ }; /* automatically generated __STDC__ prototypes */ extern int arch_conflicts_occured (struct arch_apply_changeset_report * r); extern void arch_free_apply_changeset_report_data (struct arch_apply_changeset_report * r); extern void arch_apply_changeset (struct arch_apply_changeset_report * r, const t_uchar * changeset_spec, const t_uchar * target_spec, enum arch_id_tagging_method method, enum arch_inventory_category untagged_source_category, int reverse, int forward, int use_diff3, assoc_table older_table, assoc_table yours_table, int escape_classes); #endif /* INCLUDE__LIBARCH__APPLY_CHANGESET_H */ /* tag: Tom Lord Sat Jan 5 15:26:10 2002 (apply-changeset.h) */ tla-1.3.5+dfsg/src/tla/libarch/library-txn.h0000644000175000017500000000357110457622000017336 0ustar useruser/* library-txn.h: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__LIBRARY_TXN_H #define INCLUDE__LIBARCH__LIBRARY_TXN_H #include "tla/libarch/archive.h" /* automatically generated __STDC__ prototypes */ extern t_uchar * arch_library_add_choice (const t_uchar * archive, const t_uchar * revision, const t_uchar * opt_library, const t_uchar * opt_same_dev_path); extern t_uchar * arch_library_greedy_add_choice (const t_uchar * archive, const t_uchar * revision, const t_uchar * opt_same_dev_path, int require_greedy); extern rel_table make_search_path (rel_table full_user_path, const t_uchar * opt_same_dev_path, int require_greedy); extern t_uchar * arch_find_best_library(const t_uchar * archive, rel_table search_path, const t_uchar * revision); extern void arch_library_add (int chatter_fd, int no_patch_noise, struct arch_archive * arch, const t_uchar * revision, const t_uchar * opt_library, const t_uchar * opt_same_dev_path, int sparse, int escape_classes); #endif /* INCLUDE__LIBARCH__LIBRARY_TXN_H */ /* tag: Tom Lord Sat Jan 5 15:26:10 2002 (library-txn.h) */ tla-1.3.5+dfsg/src/tla/libarch/undo.c0000644000175000017500000000730110457622000016016 0ustar useruser/* undo.c: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/char/str.h" #include "hackerlab/char/char-class.h" #include "hackerlab/fmt/cvt.h" #include "hackerlab/fs/file-names.h" #include "hackerlab/vu/safe.h" #include "tla/libfsutils/dir-listing.h" #include "tla/libfsutils/rmrf.h" #include "tla/libarch/make-changeset.h" #include "tla/libarch/apply-changeset.h" #include "tla/libarch/chatter.h" #include "tla/libarch/undo.h" /* __STDC__ prototypes for static functions */ static void undo_callback (void * vfd, const char * fmt, va_list ap); void arch_undo (int chatter_fd, t_uchar * dest_dir, int delete_changeset, t_uchar * tree_root, t_uchar * baseline_root, rel_table file_list, assoc_table inode_shortcut, int forward, int escape_classes) { struct arch_make_changeset_report make_report = {0, }; struct arch_apply_changeset_report apply_report = {0, }; if (!rel_n_records (file_list)) arch_make_changeset (&make_report, baseline_root, tree_root, dest_dir, arch_unspecified_id_tagging, arch_inventory_unrecognized, rel_table_nil, inode_shortcut, 0, escape_classes); else arch_make_files_changeset (&make_report, dest_dir, file_list, baseline_root, tree_root, arch_unspecified_id_tagging, arch_inventory_unrecognized, escape_classes); arch_chatter (chatter_fd, "* reverting changes\n"); if (chatter_fd >= 0) { apply_report.callback = undo_callback; apply_report.thunk = (void *)(long)chatter_fd; } arch_apply_changeset (&apply_report, dest_dir, tree_root, arch_unspecified_id_tagging, arch_inventory_unrecognized, 1, forward, 0, 0, 0, escape_classes); if (delete_changeset) rmrf_file (dest_dir); } t_uchar * arch_latest_undo_changeset (t_ulong * level_n, t_uchar * tree_root) { rel_table files = rel_table_nil; t_uchar * answer = 0; t_ulong latest_n = 0; int x; files = directory_files (tree_root); for (x = 0; x < rel_n_records (files); ++x) { if (!str_cmp_prefix (",,undo-", rel_peek_str (files, x, 0))) { int ign; const t_uchar * pos; t_ulong this_n; for (pos = rel_peek_str (files, x, 0) + sizeof (",,undo-") - 1; char_is_digit (*pos); ++pos) ; if (*pos) continue; pos = rel_peek_str (files, x, 0) + sizeof (",,undo-") - 1; if (cvt_decimal_to_ulong (&ign, &this_n, pos, str_length (pos))) continue; if (this_n >= latest_n) { lim_free (0, answer); answer = file_name_in_vicinity (0, tree_root, rel_peek_str (files, x, 0)); if (level_n) *level_n = this_n; latest_n = this_n; } } } rel_free_table (files); return answer; } t_uchar * arch_next_undo_changeset (t_ulong * level_n, t_uchar * tree_root) { t_uchar * prev = 0; t_ulong prev_n; t_uchar * this = 0; t_uchar * answer = 0; prev = arch_latest_undo_changeset (&prev_n, tree_root); if (!prev) { if (level_n) *level_n = 1; this = str_save (0, ",,undo-1"); } else { t_uchar buf[64]; cvt_ulong_to_decimal (buf, prev_n + 1); this = str_alloc_cat (0, ",,undo-", buf); } answer = file_name_in_vicinity (0, tree_root, this); lim_free (0, prev); lim_free (0, this); return answer; } static void undo_callback (void * vfd, const char * fmt, va_list ap) { int fd; fd = (int)(t_ulong)vfd; safe_printfmt_va_list (fd, fmt, ap); safe_flush (fd); } /* tag: Tom Lord Thu May 29 14:20:31 2003 (undo.c) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-log-versions.c0000644000175000017500000001150610457622000020243 0ustar useruser/* cmd-log-versions.c * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "config-options.h" #include "hackerlab/cmd/main.h" #include "tla/libarch/namespace.h" #include "tla/libarch/project-tree.h" #include "tla/libarch/patch-logs.h" #include "tla/libarch/cmd-log-versions.h" static t_uchar * usage = "[options]"; static t_uchar * version_string = (cfg__std__package " from regexps.com\n" "\n" "Copyright 2003 Tom Lord\n" "\n" "This is free software; see the source for copying conditions.\n" "There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\n" "PARTICULAR PURPOSE.\n" "\n" "Report bugs to " cfg__tla_bug_mail ".\n" "\n" cfg__std__release_id_string "\n"); #define OPTS(OP) \ OP (opt_help_msg, "h", "help", 0, \ "Display a help message and exit.") \ OP (opt_long_help, "H", 0, 0, \ "Display a verbose help message and exit.") \ OP (opt_version, "V", "version", 0, \ "Display a release identifier string\n" \ "and exit.") \ OP (opt_dir, "d", "dir DIR", 1, \ "cd to DIR first") \ OP (opt_only_archive, "a", "archive ARCHIVE", 1, \ "list only logs for ARCHIVE") \ OP (opt_only_category, "c", "category CATEGORY", 1, \ "list only logs for CATEGORY") \ OP (opt_only_branch, "b", "branch BRANCH", 1, \ "list only logs for BRANCH") \ OP (opt_only_version, "v", "vsn VERSION", 1, \ "list only logs for VERSION") \ OP (opt_reverse, "r", "reverse", 0, \ "reverse the sort order") t_uchar arch_cmd_log_versions_help[] = ("list patch log versions in a project tree\n" "Print the list of versions for which there are patch logs in\n" "the project tree containing DIR (or the current directory).\n"); enum options { OPTS (OPT_ENUM) }; static struct opt_desc opts[] = { OPTS (OPT_DESC) {-1, 0, 0, 0, 0} }; static int cut_field_0[] = {0, -1}; int arch_cmd_log_versions (t_uchar * program_name, int argc, char * argv[]) { int o; struct opt_parsed * option; int reverse; char * dir; t_uchar * tree_root; char * only_archive; char * only_category; char * only_branch; char * only_version; rel_table log_versions; reverse = 0; dir = "."; only_archive = 0; only_category = 0; only_branch = 0; only_version = 0; safe_buffer_fd (1, 0, O_WRONLY, 0); option = 0; while (1) { o = opt_standard (lim_use_must_malloc, &option, opts, &argc, argv, program_name, usage, version_string, arch_cmd_log_versions_help, opt_help_msg, opt_long_help, opt_version); if (o == opt_none) break; switch (o) { default: safe_printfmt (2, "unhandled option `%s'\n", option->opt_string); panic ("internal error parsing arguments"); usage_error: opt_usage (2, argv[0], program_name, usage, 1); exit (1); /* bogus_arg: */ safe_printfmt (2, "ill-formed argument for `%s' (`%s')\n", option->opt_string, option->arg_string); goto usage_error; case opt_reverse: { reverse = 1; break; } case opt_dir: { dir = str_save (0, option->arg_string); break; } case opt_only_archive: { only_archive = str_save (0, option->arg_string); break; } case opt_only_category: { only_category = str_save (0, option->arg_string); break; } case opt_only_branch: { only_branch = str_save (0, option->arg_string); break; } case opt_only_version: { only_version = str_save (0, option->arg_string); break; } } } if (argc != 1) goto usage_error; tree_root = arch_tree_root (0, dir, 0); if (!tree_root) { safe_printfmt (2, "%s: directory not in project tree (%s)\n", argv[0], dir); exit (1); } log_versions = arch_log_versions (tree_root, only_archive, only_category, only_branch, only_version); log_versions = rel_cut (cut_field_0, log_versions); arch_sort_table_by_name_field (reverse, log_versions, 0); rel_print_table (1, log_versions); return 0; } /* tag: Tom Lord Tue May 13 09:59:25 2003 (logs.c) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-file-diff.c0000644000175000017500000001572010457622000017443 0ustar useruser/* cmd-file-diff.c * **************************************************************** * Copyright (C) 2003, 2004 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "config-options.h" #include "hackerlab/cmd/main.h" #include "hackerlab/fs/file-names.h" #include "tla/libfsutils/dir-as-cwd.h" #include "tla/libarch/my.h" #include "tla/libarch/libraries.h" #include "tla/libarch/project-tree.h" #include "tla/libarch/patch-logs.h" #include "tla/libarch/inv-ids.h" #include "tla/libarch/file-diffs.h" #include "tla/libarch/namespace.h" #include "tla/libfsutils/dir-as-cwd.h" #include "tla/libarch/cmd.h" #include "tla/libarch/cmd-file-diff.h" static t_uchar * usage = "[options] file [revision]"; static t_uchar * version_string = (cfg__std__package " from regexps.com\n" "\n" "Copyright 2003 Tom Lord\n" "\n" "This is free software; see the source for copying conditions.\n" "There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\n" "PARTICULAR PURPOSE.\n" "\n" "Report bugs to " cfg__tla_bug_mail ".\n" "\n" cfg__std__release_id_string "\n"); #define OPTS(OP) \ OP (opt_help_msg, "h", "help", 0, \ "Display a help message and exit.") \ OP (opt_long_help, "H", 0, 0, \ "Display a verbose help message and exit.") \ OP (opt_version, "V", "version", 0, \ "Display a release identifier string\n" \ "and exit.") \ OP (opt_archive, "A", "archive", 1, \ "Override `my-default-archive'") \ OP (opt_new_file, "N", "new-file", 0, \ "Treat missing file as empty") t_uchar arch_cmd_file_diff_help[] = ("show local changes to a file\n" "Print diffs between FILE and the corresponding file in a cached\n" "copy of REVISION.\n" "\n" "The default patch level for a given version is the latest level for\n" "which the project tree has a patch. The default archive and version\n" "is as printed by \"tla tree-version\".\n"); enum options { OPTS (OPT_ENUM) }; static struct opt_desc opts[] = { OPTS (OPT_DESC) {-1, 0, 0, 0, 0} }; int arch_cmd_file_diff (t_uchar * program_name, int argc, char * argv[]) { int o; struct opt_parsed * option; t_uchar * default_archive; int new_is_null = 0; int status = 2; default_archive = 0; safe_buffer_fd (1, 0, O_WRONLY, 0); option = 0; while (1) { o = opt_standard (lim_use_must_malloc, &option, opts, &argc, argv, program_name, usage, version_string, arch_cmd_file_diff_help, opt_help_msg, opt_long_help, opt_version); if (o == opt_none) break; switch (o) { default: safe_printfmt (2, "unhandled option `%s'\n", option->opt_string); panic ("internal error parsing arguments"); usage_error: opt_usage (2, argv[0], program_name, usage, 1); exit (1); /* bogus_arg: */ safe_printfmt (2, "ill-formed argument for `%s' (`%s')\n", option->opt_string, option->arg_string); goto usage_error; case opt_archive: { default_archive = str_save (0, option->arg_string); break; } case opt_new_file: { new_is_null = 1; break; } } } if ((argc < 2) || (argc > 3)) goto usage_error; if (default_archive && !arch_valid_archive_name (default_archive)) { safe_printfmt (2, "%s: invalid archive name (%s)\n", argv[0], default_archive); exit (1); } { t_uchar * filespec; t_uchar * filedir = 0; t_uchar * filedir_path = 0; t_uchar * filedir_loc = 0; t_uchar * file_tail = 0; t_uchar * mod_loc = 0; t_uchar * tree_root = 0; t_uchar * revspec = 0; t_uchar * archive = 0; t_uchar * revision = 0; filespec = argv[1]; filedir = file_name_directory_file (0, filespec); if (!filedir) filedir = str_save (0, "."); filedir_path = directory_as_cwd (filedir); tree_root = arch_tree_root (0, filedir, 0); if (!tree_root) { safe_printfmt (2, "%s: file is not in a project tree (%s)\n", argv[0], filespec); exit (2); } invariant (!str_cmp_prefix (tree_root, filedir_path) && (!filedir_path[str_length (tree_root)] || ('/' == filedir_path[str_length (tree_root)]))); if (!filedir_path[str_length (tree_root)]) filedir_loc = str_save (0, "./"); else filedir_loc = str_alloc_cat (0, "./", filedir_path + str_length (tree_root) + 1); file_tail = file_name_tail (0, filespec); mod_loc = file_name_in_vicinity (0, filedir_loc, file_tail); if (argc == 3) { revspec = str_save (0, argv[2]); } else { revspec = arch_tree_version (tree_root); if (!revspec) { safe_printfmt (2, "%s: tree has no default version (%s)\n", argv[0], tree_root); exit (2); } } if (!arch_valid_package_name (revspec, arch_maybe_archive, arch_req_version, 1)) { safe_printfmt (2, "%s: invalid revision specification (%s)\n", argv[0], revspec); exit (2); } archive = arch_parse_package_name (arch_ret_archive, default_archive, revspec); if (!archive) { safe_printfmt (2, "%s: no archive specified\n", argv[0]); exit (2); } if (arch_valid_package_name (revspec, arch_maybe_archive, arch_req_version, 0)) { t_uchar * version = 0; t_uchar * level = 0; version = arch_parse_package_name (arch_ret_package_version, 0, revspec); level = arch_highest_patch_level (tree_root, archive, version); revision = str_alloc_cat_many (0, version, "--", level, str_end); lim_free (0, level); lim_free (0, version); } else { revision = arch_parse_package_name (arch_ret_non_archive, 0, revspec); } status = arch_file_get_or_diff (1, tree_root, mod_loc, archive, revision, 1, new_is_null, 0); lim_free (0, filedir); lim_free (0, filedir_path); lim_free (0, filedir_loc); lim_free (0, file_tail); lim_free (0, mod_loc); lim_free (0, tree_root); lim_free (0, revspec); lim_free (0, archive); lim_free (0, revision); } lim_free (0, default_archive); exit (status); return status; } /* tag: Tom Lord Fri May 30 21:37:57 2003 (file-diffs.c) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-library-archives.h0000644000175000017500000000133210457622000021063 0ustar useruser/* cmd-library-archives.h: * **************************************************************** * Copyright (C) 2003 Tom Lord, Stig Brautaset * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__CMD_LIBRARY_ARCHIVES_H #define INCLUDE__LIBARCH__CMD_LIBRARY_ARCHIVES_H #include "hackerlab/machine/types.h" extern t_uchar arch_cmd_library_archives_help[]; /* automatically generated __STDC__ prototypes */ extern int arch_cmd_library_archives (t_uchar * program_name, int argc, char * argv[]); #endif /* INCLUDE__LIBARCH__CMD_LIBRARY_ARCHIVES_H */ /* tag: Stig Brautaset Sat Jun 7 14:48:44 BST 2003 (cmd-library-archives.h) */ tla-1.3.5+dfsg/src/tla/libarch/cmd.c0000644000175000017500000000173610457622000015622 0ustar useruser/* cmd.c: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/os/stdarg.h" #include "hackerlab/arrays/ar.h" #include "tla/libarch/cmd.h" int arch_call_cmd (arch_cmd_fn fn, t_uchar * prog_name, ...) { char ** argv = 0; int status = 1; va_list ap; *(char **)ar_push ((void **)&argv, 0, sizeof (char *)) = prog_name; va_start (ap, prog_name); while (1) { char * arg; arg = va_arg (ap, char *); if (!arg) break; *(char **)ar_push ((void **)&argv, 0, sizeof (char *)) = arg; } va_end (ap); *(char **)ar_push ((void **)&argv, 0, sizeof (char *)) = 0; status = fn (prog_name, (ar_size ((void *)argv, 0, sizeof (char *)) - 1), argv); ar_free ((void **)&argv, 0); return status; } /* tag: Tom Lord Mon Jun 2 17:26:01 2003 (cmd.c) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-archive-snapshot.h0000644000175000017500000000130010457622000021066 0ustar useruser/* cmd-archive-snapshot.h: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__CMD_ARCHIVE_SNAPSHOT_H #define INCLUDE__LIBARCH__CMD_ARCHIVE_SNAPSHOT_H #include "hackerlab/machine/types.h" extern t_uchar arch_cmd_archive_snapshot_help[]; /* automatically generated __STDC__ prototypes */ extern int arch_cmd_archive_snapshot (t_uchar * program_name, int argc, char * argv[]); #endif /* INCLUDE__LIBARCH__CMD_ARCHIVE_SNAPSHOT_H */ /* tag: Tom Lord Sat Jan 5 15:26:10 2002 (cmd-archive-snapshot.h) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-library-file.c0000644000175000017500000001274610457622000020204 0ustar useruser/* cmd-library-file.c * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "config-options.h" #include "hackerlab/cmd/main.h" #include "tla/libarch/my.h" #include "tla/libarch/libraries.h" #include "tla/libarch/inv-ids.h" #include "tla/libarch/namespace.h" #include "tla/libarch/cmd-library-file.h" static t_uchar * usage = "[options] file revision"; static t_uchar * version_string = (cfg__std__package " from regexps.com\n" "\n" "Copyright 2003 Tom Lord\n" "\n" "This is free software; see the source for copying conditions.\n" "There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\n" "PARTICULAR PURPOSE.\n" "\n" "Report bugs to " cfg__tla_bug_mail ".\n" "\n" cfg__std__release_id_string "\n"); #define OPTS(OP) \ OP (opt_help_msg, "h", "help", 0, \ "Display a help message and exit.") \ OP (opt_long_help, "H", 0, 0, \ "Display a verbose help message and exit.") \ OP (opt_version, "V", "version", 0, \ "Display a release identifier string\n" \ "and exit.") \ OP (opt_archive, "A", "archive", 1, \ "Override `my-default-archive'") \ OP (opt_id, 0, "id", 0, \ "interpret FILE as an inventory id") \ OP (opt_this, 0, "this", 0, \ "interpret FILE as a file within a project tree") t_uchar arch_cmd_library_file_help[] = ("find a file in a revision library\n" "Find FILE in REVISION in your revision library and print\n" "its path. If the revision or file is not present, print\n" "an error message and exit with non-0 status.\n"); enum options { OPTS (OPT_ENUM) }; static struct opt_desc opts[] = { OPTS (OPT_DESC) {-1, 0, 0, 0, 0} }; int arch_cmd_library_file (t_uchar * program_name, int argc, char * argv[]) { int o; struct opt_parsed * option; t_uchar * default_archive; int id = 0; int this = 0; default_archive = 0; safe_buffer_fd (1, 0, O_WRONLY, 0); option = 0; while (1) { o = opt_standard (lim_use_must_malloc, &option, opts, &argc, argv, program_name, usage, version_string, arch_cmd_library_file_help, opt_help_msg, opt_long_help, opt_version); if (o == opt_none) break; switch (o) { default: safe_printfmt (2, "unhandled option `%s'\n", option->opt_string); panic ("internal error parsing arguments"); usage_error: opt_usage (2, argv[0], program_name, usage, 1); exit (1); /* bogus_arg: */ safe_printfmt (2, "ill-formed argument for `%s' (`%s')\n", option->opt_string, option->arg_string); goto usage_error; case opt_archive: { default_archive = str_save (0, option->arg_string); break; } case opt_id: { id = 1; break; } case opt_this: { this = 1; break; } } } if (argc != 3) goto usage_error; if (default_archive && !arch_valid_archive_name (default_archive)) { safe_printfmt (2, "%s: invalid archive name (%s)\n", argv[0], default_archive); exit (1); } { t_uchar * filespec; t_uchar * revspec; t_uchar * archive = 0; t_uchar * revision = 0; t_uchar * answer; filespec = argv[1]; revspec = argv[2]; if (!arch_valid_package_name (revspec, arch_maybe_archive, arch_req_patch_level, 0)) { safe_printfmt (2, "%s: invalid revision name (%s)\n", argv[0], revspec); exit (2); } archive = arch_parse_package_name (arch_ret_archive, default_archive, revspec); if (!archive) { safe_printfmt (2, "%s: no archive specified for library-file\n", argv[0]); exit (2); } revision = arch_parse_package_name (arch_ret_non_archive, 0, revspec); if (!this && !id) { answer = arch_library_find_file (archive, revision, filespec); } else { t_uchar * the_id = 0; if (!this) { the_id = str_save (0, filespec); } else { the_id = arch_inventory_id (arch_unspecified_id_tagging, 0, filespec, 0, 0, 0); } answer = arch_library_find_file_by_id (archive, revision, the_id); lim_free (0, the_id); } if (!answer) { if (id && !this) safe_printfmt (2, "%s: file not found in library (%s/%s*%s)\n", argv[0], archive, revision, filespec); else safe_printfmt (2, "%s: file not found in library (%s/%s:%s)\n", argv[0], archive, revision, filespec); exit (1); } else safe_printfmt (1, "%s\n", answer); lim_free (0, archive); lim_free (0, revision); lim_free (0, answer); } return 0; } /* tag: Tom Lord Wed May 28 18:24:40 2003 (library-file.c) */ tla-1.3.5+dfsg/src/tla/libarch/ancestry.c0000644000175000017500000000764510457622000016714 0ustar useruser/* ancestry.c: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/arrays/ar.h" #include "hackerlab/char/str.h" #include "tla/libarch/archives.h" #include "tla/libarch/namespace.h" #include "tla/libarch/merge-points.h" #include "tla/libarch/ancestry.h" /* __STDC__ prototypes for static functions */ static struct arch_archive * find_or_maybe_connect (struct arch_archive *** cache, t_uchar * name); rel_table arch_trace_ancestry (struct arch_archive * arch, t_uchar * archive, t_uchar * revision, int merges) { struct arch_archive ** archives = 0; rel_table answer = rel_table_nil; int done = 0; archive = str_save (0, archive); revision = str_save (0, revision); if (arch) *(struct arch_archive **)ar_push ((void **)&archives, 0, sizeof (struct arch_archive *)) = arch; while (!done) { t_uchar * fq_rev = 0; struct arch_archive * this_arch = 0; fq_rev = arch_fully_qualify (archive, revision); this_arch = find_or_maybe_connect (&archives, archive); if (!this_arch) { rel_add_records (&answer, rel_make_record_2_taking (rel_make_field_str (fq_rev), rel_make_field_str ("???")), rel_record_null); done = 1; } else { t_uchar * ancestor = 0; if (!merges) rel_add_records (&answer, rel_make_record_2_taking (rel_make_field_str (fq_rev), rel_make_field_str (fq_rev)), rel_record_null); else { enum arch_revision_type type; arch_revision_type (&type, 0, this_arch, revision); if (type == arch_continuation_revision) { rel_add_records (&answer, rel_make_record_2_taking (rel_make_field_str (fq_rev), rel_make_field_str (fq_rev)), rel_record_null); } else { rel_table merges = rel_table_nil; int x; merges = arch_archive_merge_points (this_arch, revision, 0, 0, 0); for (x = 0; x < rel_n_records (merges); ++x) { rel_add_records (&answer, rel_make_record_2_taking (rel_make_field_str (fq_rev), rel_get_field (merges, x, 1)), rel_record_null); } rel_free_table (merges); } } ancestor = arch_ancestor_revision (this_arch, revision); if (!ancestor) { done = 1; } else { lim_free (0, archive); lim_free (0, revision); archive = arch_parse_package_name (arch_ret_archive, 0, ancestor); revision = arch_parse_package_name (arch_ret_non_archive, 0, ancestor); } lim_free (0, ancestor); } lim_free (0, fq_rev); } { int a; for (a = 0; a < ar_size ((void *)archives, 0, sizeof (struct arch_archive *)); ++a) { if (archives[a] != arch) arch_archive_close (archives[a]); } ar_free ((void **)&archives, 0); } lim_free (0, archive); lim_free (0, revision); return answer; } static struct arch_archive * find_or_maybe_connect (struct arch_archive *** cache, t_uchar * name) { int a; t_uchar * loc = 0; struct arch_archive * arch = 0; for (a = 0; a < ar_size ((void *)(*cache), 0, sizeof (struct arch_archive *)); ++a) { if (!str_cmp (name, (*cache)[a]->name)) return (*cache)[a]; } loc = arch_archive_location (name, 1); if (loc) { arch = arch_archive_connect (name, 0); *(struct arch_archive **)ar_push ((void **)cache, 0, sizeof (struct arch_archive **)) = arch; } lim_free (0, loc); return arch; } /* tag: Tom Lord Thu Jun 26 18:41:53 2003 (ancestry.c) */ tla-1.3.5+dfsg/src/tla/libarch/project-tree.h0000644000175000017500000000415010457622000017460 0ustar useruser/* project-tree.h: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__PROJECT_TREE_H #define INCLUDE__LIBARCH__PROJECT_TREE_H #include "hackerlab/machine/types.h" enum arch_tree_state { arch_tree_in_ok_state = 0, arch_tree_in_resolve_conflicts, arch_tree_in_commit_definite, arch_tree_in_mid_commit, }; /* automatically generated __STDC__ prototypes */ extern t_uchar * arch_tree_format_string (void); extern void arch_init_tree (const t_uchar * tree_root); extern t_uchar * arch_tree_root (enum arch_tree_state * state, const t_uchar * input_dir, int accurate); extern t_uchar * arch_tree_ctl_dir (const t_uchar * tree_root); extern int arch_tree_has_meta_flag (const t_uchar * const tree_root); extern void arch_set_tree_version (const t_uchar * tree_root, const t_uchar * archive, const t_uchar * version); extern t_uchar * arch_tree_version (const t_uchar * tree_root); extern t_uchar * arch_try_tree_version (const t_uchar * cmd); extern void arch_start_tree_commit (const t_uchar * tree_root, const t_uchar * log); extern void arch_finish_tree_commit (const t_uchar * tree_root, const t_uchar * archive, const t_uchar * revision, const t_uchar * changelog_loc, int const full_meta); extern void arch_abort_tree_commit (const t_uchar * tree_root, const t_uchar * archive, const t_uchar * revision); extern t_uchar * arch_get_tree_fqrevision(const t_uchar *tree_root); extern t_uchar * arch_get_fqrevision(const t_uchar *fqversion); #endif /* INCLUDE__LIBARCH__PROJECT_TREE_H */ /* tag: Tom Lord Sat Jan 5 15:26:10 2002 (project-tree.h) */ tla-1.3.5+dfsg/src/tla/libarch/replay.c0000644000175000017500000001353510457622000016353 0ustar useruser/* replay.c: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/char/str.h" #include "hackerlab/fs/file-names.h" #include "hackerlab/vu/safe.h" #include "tla/libfsutils/tmp-files.h" #include "tla/libfsutils/rmrf.h" #include "tla/libarch/apply-changeset.h" #include "tla/libarch/namespace.h" #include "tla/libarch/chatter.h" #include "tla/libarch/replay.h" /* __STDC__ prototypes for static functions */ static void replay_callback (void * vfd, const char * fmt, va_list ap); int arch_replay_exact (int chatter_fd, int no_patch_noise, const t_uchar * tree_root, struct arch_archive * arch, const t_uchar * revision, int reverse, int forward, int escape_classes) { t_uchar * patch_dir_stem = 0; t_uchar * patch_dir = 0; struct arch_apply_changeset_report report = {0, }; int status; patch_dir_stem = str_alloc_cat_many (0, ",,patch.", revision, "--", arch->name, str_end); patch_dir = tmp_file_name (tree_root, patch_dir_stem); arch_get_patch (arch, revision, patch_dir); arch_chatter (chatter_fd, "* patching for revision %s/%s\n", arch->name, revision); if ((chatter_fd >= 0) && !no_patch_noise) { report.callback = replay_callback; report.thunk = (void *)(long)chatter_fd; } arch_apply_changeset (&report, patch_dir, tree_root, arch_unspecified_id_tagging, arch_inventory_unrecognized, reverse, forward, 0, 0, 0, escape_classes); status = arch_conflicts_occured (&report); rmrf_file (patch_dir); lim_free (0, patch_dir_stem); lim_free (0, patch_dir); arch_free_apply_changeset_report_data (&report); return status; } int arch_replay_list (int chatter_fd, int no_patch_noise, const t_uchar * tree_root, struct arch_archive * arch, rel_table revisions, int reverse, int forward, int escape_classes) { int x; int status = 0; for (x = 0; x < rel_n_records (revisions); ++x) { if (arch_replay_exact (chatter_fd, no_patch_noise, tree_root, arch, rel_peek_str (revisions, x, 0), reverse, forward,escape_classes)) { t_uchar * conflicts_in_file = 0; t_uchar * patches_remaining_file = 0; int out_fd; int y; conflicts_in_file = file_name_in_vicinity (0, tree_root, ",,replay.conflicts-in"); out_fd = safe_open (conflicts_in_file, O_WRONLY | O_CREAT | O_TRUNC, 0666); safe_printfmt (out_fd, "%s/%s\n", arch->name, rel_peek_str (revisions, x, 0)); safe_close (out_fd); patches_remaining_file = file_name_in_vicinity (0, tree_root, ",,replay.remaining"); out_fd = safe_open (patches_remaining_file, O_WRONLY | O_CREAT | O_TRUNC, 0666); for (y = x + 1; y < rel_n_records (revisions); ++y) { safe_printfmt (out_fd, "%s/%s\n", arch->name, rel_peek_str (revisions, y, 0)); } safe_close (out_fd); lim_free (0, conflicts_in_file); lim_free (0, patches_remaining_file); status = 1; break; } } return status; } int arch_replay_fqlist (int chatter_fd, int no_patch_noise, const t_uchar * tree_root, const t_uchar * default_archive, rel_table revisions, int reverse, int forward, int escape_classes) { int x; int status = 0; struct arch_archive * connected_archive = 0; for (x = 0; !status && (x < rel_n_records (revisions)); ++x) { t_uchar * archive = 0; t_uchar * revision = 0; archive = arch_parse_package_name (arch_ret_archive, default_archive, rel_peek_str (revisions, x, 0)); revision = arch_parse_package_name (arch_ret_non_archive, 0, rel_peek_str (revisions, x, 0)); if (!connected_archive || str_cmp (connected_archive->name, archive)) { arch_archive_close (connected_archive); connected_archive = arch_archive_connect (archive, 0); } if (!connected_archive || arch_replay_exact (chatter_fd, no_patch_noise, tree_root, connected_archive, revision, reverse, forward, escape_classes)) { t_uchar * conflicts_in_file = 0; t_uchar * patches_remaining_file = 0; int out_fd; int y; conflicts_in_file = file_name_in_vicinity (0, tree_root, ",,replay.conflicts-in"); out_fd = safe_open (conflicts_in_file, O_WRONLY | O_CREAT | O_TRUNC, 0666); safe_printfmt (out_fd, "%s\n", rel_peek_str (revisions, x, 0)); safe_close (out_fd); patches_remaining_file = file_name_in_vicinity (0, tree_root, ",,replay.remaining"); out_fd = safe_open (patches_remaining_file, O_WRONLY | O_CREAT | O_TRUNC, 0666); for (y = x + 1; y < rel_n_records (revisions); ++y) { safe_printfmt (out_fd, "%s\n", rel_peek_str (revisions, y, 0)); } safe_close (out_fd); lim_free (0, conflicts_in_file); lim_free (0, patches_remaining_file); status = 1; } lim_free (0, archive); lim_free (0, revision); } arch_archive_close (connected_archive); return status; } static void replay_callback (void * vfd, const char * fmt, va_list ap) { safe_printfmt_va_list ((int)(t_ulong)vfd, fmt, ap); safe_flush ((int)(t_ulong)vfd); } /* tag: Tom Lord Tue Jun 3 18:03:29 2003 (replay.c) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-cat-config.c0000644000175000017500000001725510457622000017635 0ustar useruser/* cat-config.c * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "config-options.h" #include "hackerlab/cmd/main.h" #include "tla/libarch/namespace.h" #include "tla/libarch/project-tree.h" #include "tla/libarch/configs.h" #include "tla/libarch/cmd.h" #include "tla/libarch/cmd-cat-config.h" static t_uchar * usage = "[options] config"; static t_uchar * version_string = (cfg__std__package " from regexps.com\n" "\n" "Copyright 2003 Tom Lord\n" "\n" "This is free software; see the source for copying conditions.\n" "There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\n" "PARTICULAR PURPOSE.\n" "\n" "Report bugs to " cfg__tla_bug_mail ".\n" "\n" cfg__std__release_id_string "\n"); #define OPTS(OP) \ OP (opt_help_msg, "h", "help", 0, \ "Display a help message and exit.") \ OP (opt_long_help, "H", 0, 0, \ "Display a verbose help message and exit.") \ OP (opt_version, "V", "version", 0, \ "Display a release identifier string\n" \ "and exit.") \ OP (opt_dir, "d", "dir DIR", 1, \ "cd to DIR first") \ OP (opt_output, "o", "output CFG", 1, \ "write the output as config CFG") \ OP (opt_force, "f", "force", 0, \ "overwrite an exiting config (with --output)") \ OP (opt_snap, "s", "snap", 0, \ "Show current patch levels of subtree packages.") \ OP (opt_unescaped, 0, "unescaped", 0, \ "show filenames in unescaped form") t_uchar arch_cmd_cat_config_help[] = ("output information about a multi-project config\n" "Parse and print the indicate config file from a project tree\n" "\n" "A config file contains blank lines, comment lines starting with\n" "\"#\", and config specification lines. The config file called\n" "$NAME is stored in a project tree as ./configs/$NAME or as\n" "./$NAME.\n" "\n" "A config specification line contains a relative path within\n" "a project tree, and a specification of the project or revision\n" "to store in that location.\n" "\n" "For example, the line:\n" "\n" " ./src/arch lord@emf.net--2003b/arch--devo--1.0\n" "\n" "means that, when building the configuration, the latest\n" "revision of arch--devo--1.0 should be created within the\n" "tree as ./src/arch.\n" "\n" "The project specification can be a branch name, version name\n" "or the name of a specific revision.\n" "\n" "The option --snap says to examine the project tree to find\n" "out which revisions of configured project are printed, and\n" "generate a new config specification that references those specific\n" "revisions. For example, the output for the line shown above\n" "might be:\n" "\n" " ./src/arch lord@emf.net--2003b/arch--devo--1.0--patch-21\n" "\n" "The option --output causes the output from this command to be\n" "recorded as a new configuration file (or to replace an existing\n" "file if --force is provided).\n"); enum options { OPTS (OPT_ENUM) }; static struct opt_desc opts[] = { OPTS (OPT_DESC) {-1, 0, 0, 0, 0} }; int arch_cmd_cat_config (t_uchar * program_name, int argc, char * argv[]) { int o; struct opt_parsed * option; t_uchar * dir = 0; int snap = 0; int force = 0; int escape_classes = arch_escape_classes; t_uchar * output = 0; dir = str_save (0, "."); safe_buffer_fd (1, 0, O_WRONLY, 0); option = 0; while (1) { o = opt_standard (lim_use_must_malloc, &option, opts, &argc, argv, program_name, usage, version_string, arch_cmd_cat_config_help, opt_help_msg, opt_long_help, opt_version); if (o == opt_none) break; switch (o) { default: safe_printfmt (2, "unhandled option `%s'\n", option->opt_string); panic ("internal error parsing arguments"); usage_error: opt_usage (2, argv[0], program_name, usage, 1); exit (1); /* bogus_arg: */ safe_printfmt (2, "ill-formed argument for `%s' (`%s')\n", option->opt_string, option->arg_string); goto usage_error; case opt_dir: { lim_free (0, dir); dir = str_save (0, option->arg_string); break; } case opt_snap: { snap = 1; break; } case opt_force: { force = 1; break; } case opt_output: { output = str_save (0, option->arg_string); break; } case opt_unescaped: { escape_classes = 0; break; } } } if (argc != 2) goto usage_error; { t_uchar * config; t_uchar * tree_root = 0; rel_table config_list = rel_table_nil; config = argv[1]; if (!arch_valid_config_name (config)) { safe_printfmt (2, "%s: invalid config name (%s)\n", argv[0], config); exit (2); } if (output && !arch_valid_config_name (config)) { safe_printfmt (2, "%s: invalid config name (%s)\n", argv[0], output); exit (2); } tree_root = arch_tree_root (0, dir, 0); if (!tree_root) { safe_printfmt (2, "%s: not in project tree (%s)\n", argv[0], dir); exit (1); } config_list = arch_read_config (tree_root, config); { int out_fd; if (output) out_fd = arch_begin_new_config (tree_root, output, force); else out_fd = 1; if (!snap) rel_print_pika_escape_iso8859_1_table (out_fd, escape_classes, config_list); else { rel_table snap = rel_table_nil; snap = arch_config_from_tree (tree_root, config_list); rel_print_pika_escape_iso8859_1_table (out_fd, escape_classes, snap); rel_free_table (snap); } if (output) { arch_finish_new_config (out_fd, tree_root, output, force); safe_printfmt (1, "* wrote config %s\n", output); } rel_free_table (config_list); lim_free (0, tree_root); } } lim_free (0, dir); lim_free (0, output); return 0; } /* tag: Tom Lord Fri May 30 02:12:37 2003 (cfgcat.c) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-ancestry.h0000644000175000017500000000121010457622000017440 0ustar useruser/* cmd-ancestry.h: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__CMD_ANCESTRY_H #define INCLUDE__LIBARCH__CMD_ANCESTRY_H #include "hackerlab/machine/types.h" extern t_uchar arch_cmd_ancestry_help[]; /* automatically generated __STDC__ prototypes */ extern int arch_cmd_ancestry (t_uchar * program_name, int argc, char * argv[]); #endif /* INCLUDE__LIBARCH__CMD_ANCESTRY_H */ /* tag: Tom Lord Wed Jul 16 13:58:28 2003 (cmd-ancestry.h) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-library-file.h0000644000175000017500000000127610457622000020205 0ustar useruser/* cmd-library-file.h: * **************************************************************** * Copyright (C) 2003 Tom Lord, Stig Brautaset * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__CMD_LIBRARY_FILE_H #define INCLUDE__LIBARCH__CMD_LIBRARY_FILE_H #include "hackerlab/machine/types.h" extern t_uchar arch_cmd_library_file_help[]; /* automatically generated __STDC__ prototypes */ extern int arch_cmd_library_file (t_uchar * program_name, int argc, char * argv[]); #endif /* INCLUDE__LIBARCH__CMD_LIBRARY_FILE_H */ /* tag: Stig Brautaset Sat Jun 7 15:06:49 BST 2003 (cmd-library-file.h) */ tla-1.3.5+dfsg/src/tla/libarch/exec.c0000644000175000017500000000210410457622000015771 0ustar useruser/* exec.c: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/os/unistd.h" #include "hackerlab/mem/alloc-limits.h" #include "hackerlab/fs/file-names.h" #include "hackerlab/vu/safe.h" #include "tla/libarch/my.h" #include "tla/libarch/exec.h" int arch_util_execvp (t_uchar * prog, t_uchar ** argv) { t_uchar ** path = 0; int answer; path = arch_my_util_path (); if (!path) answer = execvp (prog, (char **)argv); else { t_uchar * executable = 0; executable = path_find_executable (0, (const t_uchar **)path, prog); if (!executable) { safe_printfmt (2, "arch: unable to locate %s on the path in ~/.arch-params/path\n", prog); exit (2); } answer = execv (executable, (char **)argv); lim_free (0, executable); } free_path (0, path); return answer; } /* tag: Tom Lord Fri Jun 27 21:13:41 2003 (exec.c) */ tla-1.3.5+dfsg/src/tla/libarch/PLUGIN/0000755000175000017500000000000010457622000015702 5ustar userusertla-1.3.5+dfsg/src/tla/libarch/PLUGIN/REQ0000644000175000017500000000002110457622000016245 0ustar useruserlibarch libarch tla-1.3.5+dfsg/src/tla/libarch/cmd-apply-delta.c0000644000175000017500000002134110457622000020026 0ustar useruser/* cmd-apply-delta.c: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "config-options.h" #include "hackerlab/cmd/main.h" #include "hackerlab/fs/file-names.h" #include "hackerlab/fs/cwd.h" #include "tla/libfsutils/tmp-files.h" #include "tla/libfsutils/rmrf.h" #include "tla/libfsutils/dir-as-cwd.h" #include "tla/libarch/namespace.h" #include "tla/libarch/project-tree.h" #include "tla/libarch/my.h" #include "tla/libarch/archive.h" #include "tla/libarch/pristines.h" #include "tla/libarch/local-cache.h" #include "tla/libarch/make-changeset.h" #include "tla/libarch/copy-project-tree.h" #include "tla/libarch/apply-changeset.h" #include "tla/libarch/merge-three-way.h" #include "tla/libarch/cmd.h" #include "tla/libarch/cmd-get.h" #include "tla/libarch/cmd-delta.h" #include "tla/libarch/cmd-apply-delta.h" /* __STDC__ prototypes for static functions */ static void apply_delta_callback (void * vfd, const char * fmt, va_list ap); static t_uchar * usage = "[options] FROM(REVISION|DIR) TO(REVISION|DIR)"; static t_uchar * version_string = (cfg__std__package " from regexps.com\n" "\n" "Copyright 2003 Tom Lord\n" "\n" "This is free software; see the source for copying conditions.\n" "There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\n" "PARTICULAR PURPOSE.\n" "\n" "Report bugs to " cfg__tla_bug_mail ".\n" "\n" cfg__std__release_id_string "\n"); #define OPTS(OP) \ OP (opt_help_msg, "h", "help", 0, \ "Display a help message and exit.") \ OP (opt_long_help, "H", 0, 0, \ "Display a verbose help message and exit.") \ OP (opt_version, "V", "version", 0, \ "Display a release identifier string\n" \ "and exit.") \ OP (opt_archive, "A", "archive", 1, \ "Override `my-default-archive'") \ OP (opt_forward, "N", "forward", 0, \ "pass the --forward option to `patch'") \ OP (opt_cache, 0, "cache DIR", 1, \ "specify a cache root for pristine copies") \ OP (opt_dir, "d", "dir DIR", 1, \ "Operate on project tree in DIR (default `.')") \ OP (opt_three_way, "t", "three-way", 0, \ "Perform a 3-way (diff3-style) merge.") \ OP (opt_dest, 0, "dest DEST", 1, \ "Instead of modifying the project tree in-place,\n" \ "make a copy of it to DEST and apply the result to that") \ OP (opt_unescaped, 0, "unescaped", 0, \ "show filenames in unescaped form") t_uchar arch_cmd_apply_delta_help[] = ("compute a changeset between any two trees or revisions and apply it to a project tree\n" "A delta between A and B (both of which may be either a full revision or\n" "a project tree) is computed, and then applied to the project tree.\n" "\n" "Exit Status Codes:\n" "\n" " 0 No conflict during patch\n" " 1 Conflicts occurred during patch\n" " 3 Internal Error\n"); enum options { OPTS (OPT_ENUM) }; static struct opt_desc opts[] = { OPTS (OPT_DESC) {-1, 0, 0, 0, 0} }; static void do_three_way(int chatter_fd, t_uchar * cache_dir, t_uchar * default_archive, t_uchar * upon_root, t_uchar * from_spec, t_uchar * to_spec, int escape_classes); int arch_cmd_apply_delta (t_uchar * program_name, int argc, char * argv[]) { int o; struct opt_parsed * option; int three_way = 0; t_uchar * default_archive = 0; t_uchar * cache_dir = 0; t_uchar * upon = 0; t_uchar * dest = 0; int forward = 0; int exit_status = 0; int escape_classes = arch_escape_classes; safe_buffer_fd (1, 0, O_WRONLY, 0); option = 0; while (1) { o = opt_standard (lim_use_must_malloc, &option, opts, &argc, argv, program_name, usage, version_string, arch_cmd_apply_delta_help, opt_help_msg, opt_long_help, opt_version); if (o == opt_none) break; switch (o) { default: safe_printfmt (2, "unhandled option `%s'\n", option->opt_string); panic ("internal error parsing arguments"); usage_error: opt_usage (2, argv[0], program_name, usage, 1); exit (1); /* bogus_arg: */ safe_printfmt (2, "ill-formed argument for `%s' (`%s')\n", option->opt_string, option->arg_string); goto usage_error; case opt_archive: { lim_free (0, default_archive); default_archive = str_save (0, option->arg_string); break; } case opt_cache: { lim_free (0, cache_dir); cache_dir = str_save (0, option->arg_string); break; } case opt_three_way: { three_way = 1; break; } case opt_dir: { lim_free (0, upon); upon = str_save (0, option->arg_string); break; } case opt_dest: { lim_free (0, dest); dest = str_save (0, option->arg_string); break; } case opt_forward: { forward = 1; break; } case opt_unescaped: { escape_classes = 0; break; } } } if (argc != 3) goto usage_error; if (default_archive && !arch_valid_archive_name (default_archive)) { safe_printfmt (2, "%s: invalid archive name (%s)\n", argv[0], default_archive); exit (1); } default_archive = arch_my_default_archive (default_archive); { t_uchar * from_spec; t_uchar * to_spec; t_uchar * changeset = 0; t_uchar * upon_root = 0; from_spec = argv[1]; to_spec = argv[2]; if (! upon) upon = str_save (0, "."); upon_root = arch_tree_root (0, upon, 0); if (dest) { t_uchar * dest_dir = file_name_directory_file (0, dest); if (! dest_dir) dest_dir = str_save (0, "."); changeset = tmp_file_name (dest_dir, ",,apply-delta-changeset"); safe_printfmt (1, "* copying %s to %s\n", upon, dest); arch_copy_project_tree (upon, dest, 1, 1); lim_free (0, dest_dir); } else { dest = str_save (0, upon); changeset = tmp_file_name (dest, ",,apply-delta-changeset"); } if (three_way) { do_three_way(1, cache_dir, default_archive, upon_root, from_spec, to_spec, escape_classes); } else { if (cache_dir) arch_call_cmd (arch_cmd_delta, argv[0], "--cache", cache_dir, "-A", default_archive, from_spec, to_spec, changeset, ((escape_classes == 0) ? "--unescaped" : (char*)0), (char*)0); else arch_call_cmd (arch_cmd_delta, argv[0], "-A", default_archive, from_spec, to_spec, changeset, ((escape_classes == 0) ? "--unescaped" : (char*)0), (char*)0); { struct arch_apply_changeset_report r = {0, }; r.callback = apply_delta_callback; r.thunk = (void *)1; safe_printfmt (1, "* applying changeset\n"); arch_apply_changeset (&r, changeset, dest, arch_unspecified_id_tagging, arch_inventory_unrecognized, 0, forward, 0, 0, 0, escape_classes); exit_status = arch_conflicts_occured (&r); arch_free_apply_changeset_report_data (&r); } } rmrf_file (changeset); lim_free (0, changeset); lim_free (0, upon_root); } lim_free (0, upon); lim_free (0, dest); lim_free (0, default_archive); lim_free (0, cache_dir); return exit_status; } static void apply_delta_callback (void * vfd, const char * fmt, va_list ap) { int fd; fd = (int)(t_ulong)vfd; safe_printfmt_va_list (fd, fmt, ap); safe_flush (fd); } static void do_three_way(int chatter_fd, t_uchar * cache_dir, t_uchar * default_archive, t_uchar * upon_root, t_uchar * from_spec, t_uchar * to_spec, int escape_classes) { t_uchar * scratch_dir = tmp_file_name (".", ",,apply-delta-scratch"); t_uchar * from_path = arch_interpret_delta_path (0, 0, scratch_dir, default_archive, from_spec, cache_dir); t_uchar * to_path = arch_interpret_delta_path (0, 0, scratch_dir, default_archive, to_spec, cache_dir); arch_merge3 (chatter_fd, upon_root, from_path, to_path, escape_classes); rmrf_file (scratch_dir); } /* tag: Tom Lord Wed Jun 4 15:40:44 2003 (cmd-deltapatch.c) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-cat-archive-log.c0000644000175000017500000001143210457622000020557 0ustar useruser/* cat-archive-log.c * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "config-options.h" #include "hackerlab/cmd/main.h" #include "tla/libarch/namespace.h" #include "tla/libarch/project-tree.h" #include "tla/libarch/my.h" #include "tla/libarch/archive.h" #include "tla/libarch/cmdutils.h" #include "tla/libarch/cmd.h" #include "tla/libarch/cmd-cat-archive-log.h" static t_uchar * usage = "[options] revision"; static t_uchar * version_string = (cfg__std__package " from regexps.com\n" "\n" "Copyright 2003 Tom Lord\n" "\n" "This is free software; see the source for copying conditions.\n" "There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\n" "PARTICULAR PURPOSE.\n" "\n" "Report bugs to " cfg__tla_bug_mail ".\n" "\n" cfg__std__release_id_string "\n"); #define OPTS(OP) \ OP (opt_help_msg, "h", "help", 0, \ "Display a help message and exit.") \ OP (opt_long_help, "H", 0, 0, \ "Display a verbose help message and exit.") \ OP (opt_version, "V", "version", 0, \ "Display a release identifier string\n" \ "and exit.") \ OP (opt_archive, "A", "archive", 1, \ "Override `my-default-archive'") \ OP (opt_headers, 0, "headers", 0, \ "show only log headers") t_uchar arch_cmd_cat_archive_log_help[] = ("print the contents of an archived log entry\n" "Retrieve and print the log message for the indicated\n" "revision from its archive.\n"); enum options { OPTS (OPT_ENUM) }; static struct opt_desc opts[] = { OPTS (OPT_DESC) {-1, 0, 0, 0, 0} }; int arch_cmd_cat_archive_log (t_uchar * program_name, int argc, char * argv[]) { int o; struct opt_parsed * option; t_uchar * default_archive; int headers; default_archive = 0; headers = 0; safe_buffer_fd (1, 0, O_WRONLY, 0); option = 0; while (1) { o = opt_standard (lim_use_must_malloc, &option, opts, &argc, argv, program_name, usage, version_string, arch_cmd_cat_archive_log_help, opt_help_msg, opt_long_help, opt_version); if (o == opt_none) break; switch (o) { default: safe_printfmt (2, "unhandled option `%s'\n", option->opt_string); panic ("internal error parsing arguments"); usage_error: opt_usage (2, argv[0], program_name, usage, 1); exit (1); /* bogus_arg: */ safe_printfmt (2, "ill-formed argument for `%s' (`%s')\n", option->opt_string, option->arg_string); goto usage_error; case opt_archive: { default_archive = str_save (0, option->arg_string); break; } case opt_headers: { headers = 1; break; } } } if (argc != 2) goto usage_error; default_archive = arch_my_default_archive (default_archive); { t_uchar * revision_spec; t_uchar * archive = 0; t_uchar * revision = 0; struct arch_archive * arch = 0; t_uchar * log = 0; revision_spec = argv[1]; if (!arch_valid_package_name (revision_spec, arch_maybe_archive, arch_req_patch_level, 0)) { safe_printfmt (2, "%s: invalid revision name (%s)\n", argv[0], revision_spec); exit (2); } archive = arch_parse_package_name (arch_ret_archive, default_archive, revision_spec); revision = arch_parse_package_name (arch_ret_non_archive, 0, revision_spec); arch = arch_archive_connect (archive, 0); arch_check_for (arch, arch_req_patch_level, revision); log = arch_archive_log (arch, revision); if (!headers) safe_write_retry (1, log, str_length (log)); else { t_uchar * headers_end; headers_end = log; while (1) { headers_end = str_chr_index (headers_end, '\n'); if (!headers_end) { safe_write_retry (1, log, str_length (log)); exit (0); } if (headers_end[1] == '\n') { safe_write_retry (1, log, headers_end + 1 - log); exit (0); } ++headers_end; } } } return 0; } /* tag: Tom Lord Tue May 20 16:05:52 2003 (cat-archive-log.c) */ tla-1.3.5+dfsg/src/tla/libarch/my.c0000644000175000017500000003123110457622000015475 0ustar useruser/* my.c: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/os/stdlib.h" #include "hackerlab/os/errno.h" #include "hackerlab/os/errno-to-string.h" #include "hackerlab/bugs/panic.h" #include "hackerlab/char/str.h" #include "hackerlab/fs/file-names.h" #include "hackerlab/fs/cwd.h" #include "hackerlab/vu/safe.h" #include "tla/libfsutils/ensure-dir.h" #include "tla/libfsutils/read-line.h" #include "tla/libfsutils/file-contents.h" #include "tla/libarch/namespace.h" #include "tla/libarch/my.h" t_uchar * arch_my_arch_params (void) { t_uchar * home; t_uchar * answer; home = getenv ("HOME"); invariant (!!home); answer = file_name_in_vicinity (0, home, ".arch-params"); return answer; } void arch_ensure_my_arch_params (void) { int errn; t_uchar * dir = 0; dir = arch_my_arch_params (); if (vu_mkdir (&errn, dir, 0700) && errn != EEXIST) { safe_printfmt (2, "arch: unable to create directory %s\n", dir); exit (2); } lim_free (0, dir); } t_uchar * arch_my_hook_script (void) { t_uchar * params_dir; t_uchar * hook_script; params_dir = arch_my_arch_params (); hook_script = file_name_in_vicinity (0, params_dir, "hook"); { int euid; int egid; struct stat stat; int stat_ok; int errn; euid = geteuid (); egid = getegid (); stat_ok = vu_stat (&errn, hook_script, &stat); if (stat_ok || !(((euid == stat.st_uid) && (stat.st_mode & S_IXUSR)) || ((egid == stat.st_gid) && (stat.st_mode & S_IXGRP)) || (stat.st_mode & S_IXOTH))) { lim_free (0, hook_script); hook_script = 0; } } lim_free (0, params_dir); return hook_script; } static t_uchar * my_id = 0; t_uchar * arch_my_id_file (void) { t_uchar * params_dir; t_uchar * id_file; params_dir = arch_my_arch_params (); id_file = file_name_in_vicinity (0, params_dir, "=id"); lim_free (0, params_dir); return id_file; } void arch_set_my_id (const t_uchar * id) { t_uchar * id_file; int out_fd; if (my_id) lim_free (0, my_id); invariant (arch_valid_id (id)); id_file = arch_my_id_file (); arch_ensure_my_arch_params (); out_fd = safe_open (id_file, O_WRONLY | O_CREAT, 0666); safe_ftruncate (out_fd, 0L); safe_printfmt (out_fd, "%s\n", id); safe_close (out_fd); lim_free (0, id_file); my_id = str_save (0, id); } t_uchar * arch_my_id (void) { int errn; t_uchar * id_file; int in_fd; t_uchar * id_contents; size_t len; t_uchar * eoid; if (my_id) return str_save (0, my_id); id_file = arch_my_id_file (); in_fd = vu_open (&errn, id_file, O_RDONLY, 0); if (in_fd < 0) { if (errn == ENOENT) safe_printfmt (2, "arch: no arch user id set\n"); else safe_printfmt (2, "arch: i/o error for file %s (%s)\n", id_file, errno_to_string (errn)); exit (2); } lim_free (0, id_file); id_contents = 0; len = 0; safe_file_to_string (&id_contents, &len, in_fd); safe_close (in_fd); eoid = str_chr_index_n (id_contents, len, '\n'); if (!eoid) eoid = id_contents + len; my_id = str_save_n (0, id_contents, eoid - id_contents); lim_free (0, id_contents); return str_save (0, my_id); } t_uchar * arch_my_id_uid (void) { t_uchar * id = 0; t_uchar * lb; t_uchar * rb; t_uchar * answer = 0; id = arch_my_id (); if (!id) return 0; lb = str_chr_rindex (id, '<'); rb = str_chr_rindex (id, '>'); invariant (lb && rb && ((lb + 1) < rb)); answer = str_save_n (0, (lb + 1), rb - (lb + 1)); lim_free (0, id); return answer; } static t_uchar * my_home_archive = 0; t_uchar * arch_my_default_archive (const t_uchar * default_archive) { t_uchar * params_dir = 0; t_uchar * default_archive_file = 0; int in_fd; t_uchar * default_archive_file_contents = 0; size_t archive_contents_len; t_uchar * nl_pos; t_uchar * answer = 0; int errn; /* This does away with the arch conventions of using $ARCHIVE * and has no support for -R */ if (default_archive) { if (!arch_valid_archive_name (default_archive)) { safe_printfmt (2, "invalid archive name %s\n", default_archive); exit (2); } return str_save (0, default_archive); } if (my_home_archive) return str_save (0, my_home_archive); params_dir = arch_my_arch_params (); default_archive_file = file_name_in_vicinity (0, params_dir, "=default-archive"); in_fd = vu_open (&errn, default_archive_file, O_RDONLY, 0); if (in_fd < 0) { if (errn != ENOENT) { safe_printfmt (2, "arch: error opening %s\n", default_archive_file); exit (2); } answer = 0; } else { safe_file_to_string (&default_archive_file_contents, &archive_contents_len, in_fd); safe_close (in_fd); nl_pos = str_chr_index_n (default_archive_file_contents, archive_contents_len, '\n'); if (!nl_pos) nl_pos = default_archive_file_contents + archive_contents_len; answer = str_save_n (0, default_archive_file_contents, nl_pos - default_archive_file_contents); } lim_free (0, default_archive_file_contents); lim_free (0, default_archive_file); lim_free (0, params_dir); if (answer) { lim_free (0, my_home_archive); my_home_archive = str_save (0, answer); } return answer; } void arch_set_my_default_archive (const t_uchar * archive) { t_uchar * arch_params_dir; t_uchar * default_archive_file; int out_fd; invariant (arch_valid_archive_name (archive)); if (my_home_archive) { lim_free (0, my_home_archive); my_home_archive = 0; } arch_ensure_my_arch_params (); arch_params_dir = arch_my_arch_params (); default_archive_file = file_name_in_vicinity (0, arch_params_dir, "=default-archive"); out_fd = safe_open (default_archive_file, O_WRONLY | O_CREAT, 0666); safe_ftruncate (out_fd, (long)0); safe_write_retry (out_fd, archive, str_length (archive)); safe_close (out_fd); lim_free (0, arch_params_dir); lim_free (0, default_archive_file); my_home_archive = str_save (0, archive); } void arch_delete_my_default_archive (void) { t_uchar * params_dir; t_uchar * default_archive_file; int errn; if (my_home_archive) { lim_free (0, my_home_archive); my_home_archive = 0; } params_dir = arch_my_arch_params (); default_archive_file = file_name_in_vicinity (0, params_dir, "=default-archive"); if (vu_unlink (&errn, default_archive_file) && (errn != ENOENT)) { panic ("unable to delete ~/.arch-params/=default-archive"); } lim_free (0, params_dir); lim_free (0, default_archive_file); } t_uchar * arch_my_archive_locations_dir (void) { t_uchar * arch_params_path = 0; t_uchar * answer = 0; arch_params_path = arch_my_arch_params (); answer = file_name_in_vicinity (0, arch_params_path, "=locations"); lim_free (0, arch_params_path); return answer; } static t_uchar * arch_my_default_library_file (void) { t_uchar * params_dir; t_uchar * lib_file; params_dir = arch_my_arch_params (); lib_file = file_name_in_vicinity (0, params_dir, "=revision-library"); lim_free (0, params_dir); return lib_file; } static t_uchar * arch_my_default_library_add_file (void) { t_uchar * params_dir; t_uchar * lib_file; params_dir = arch_my_arch_params (); lib_file = file_name_in_vicinity (0, params_dir, "=revision-library-adds"); lim_free (0, params_dir); return lib_file; } rel_table arch_my_library_path (enum arch_library_path_type path_type) { t_uchar * first_file = 0; t_uchar * second_file = 0; rel_table answer = rel_table_nil; switch (path_type) { case arch_library_path_search_only: { first_file = arch_my_default_library_file (); break; } case arch_library_path_add_only: { first_file = arch_my_default_library_add_file (); break; } case arch_library_path_search_order: { first_file = arch_my_default_library_file (); second_file = arch_my_default_library_add_file (); break; } case arch_library_path_add_order: { second_file = arch_my_default_library_file (); first_file = arch_my_default_library_add_file (); break; } } if (first_file && !safe_access (first_file, F_OK)) { int fd; fd = safe_open (first_file, O_RDONLY, 0); answer = rel_read_table (fd, 1, "tla", first_file); safe_close (fd); } if (second_file && !safe_access (second_file, F_OK)) { int fd; rel_table answer2 = rel_table_nil; fd = safe_open (second_file, O_RDONLY, 0); answer2 = rel_read_table (fd, 1, "tla", second_file); safe_close (fd); rel_append_x (&answer, answer2); rel_free_table (answer2); } lim_free (0, first_file); lim_free (0, second_file); return answer; } void arch_set_my_library_path (enum arch_library_path_type path_type, enum arch_library_edit_op op, const t_uchar * dir_spec) { t_uchar * dir = 0; t_uchar * lib_file = 0; rel_table old_path = rel_table_nil; rel_table new_path = rel_table_nil; int out_fd; if (file_name_is_absolute (dir_spec)) { dir = str_save (0, dir_spec); } else if (dir_spec) { t_uchar * here = 0; here = safe_current_working_directory (); dir = file_name_in_vicinity (0, here, dir_spec); lim_free (0, here); } switch (path_type) { case arch_library_path_search_order: case arch_library_path_search_only: { lib_file = arch_my_default_library_file (); old_path = arch_my_library_path (arch_library_path_search_only); break; } case arch_library_path_add_order: case arch_library_path_add_only: { lib_file = arch_my_default_library_add_file (); old_path = arch_my_library_path (arch_library_path_add_only); break; } } /* install first if appropriate */ if (dir_spec && (op == arch_library_first)) { rel_add_records (&new_path, rel_singleton_record_taking (rel_make_field_str (dir)), rel_record_null); } /* copy the old path, removing dir_spec (if any) */ if (dir_spec) { int x; for (x = 0; x < rel_n_records (old_path); ++x) { if (str_cmp (rel_peek_str (old_path, x, 0), dir)) { rel_add_records (&new_path, rel_singleton_record_taking (rel_get_field (old_path, x, 0)), rel_record_null); } } } /* install last if appropriate */ if (dir_spec && (op == arch_library_last)) { rel_add_records (&new_path, rel_singleton_record_taking (rel_make_field_str (dir)), rel_record_null); } /* install the new path */ arch_ensure_my_arch_params (); out_fd = safe_open (lib_file, O_WRONLY | O_CREAT, 0666); safe_ftruncate (out_fd, 0L); rel_print_table (out_fd, new_path); safe_close (out_fd); lim_free (0, dir); lim_free (0, lib_file); rel_free_table (old_path); rel_free_table (new_path); } t_uchar * arch_my_util_path_file (void) { t_uchar * params_dir; t_uchar * path_file; params_dir = arch_my_arch_params (); path_file = file_name_in_vicinity (0, params_dir, "path"); lim_free (0, params_dir); return path_file; } t_uchar ** arch_my_util_path (void) { t_uchar * path_file = 0; t_uchar ** answer = 0; path_file = arch_my_util_path_file (); if (!safe_access (path_file, F_OK)) { t_uchar * contents = 0; contents = file_contents_trimming (path_file); answer = path_parse (0, contents); lim_free (0, contents); } lim_free (0, path_file); return answer; } t_uchar * arch_my_metadata_rules_file (void) { t_uchar * params_dir; t_uchar * path_file; params_dir = arch_my_arch_params (); path_file = file_name_in_vicinity (0, params_dir, "metadata-rules"); lim_free (0, params_dir); return path_file; } int arch_my_allow_full_meta (void) { t_uchar * rules_file = 0; struct stat statb; int errn = 0; int answer; rules_file = arch_my_metadata_rules_file (); if (0 == vu_stat (&errn, rules_file, &statb)) { if (statb.st_size != 0) { safe_printfmt (2, "illegal ~/.arch-params/metadata-rules file (non-empty)\n file: %s\n", rules_file); panic ("abort"); } answer = 1; } else { if (errn == ENOENT) answer = 0; else panic ("strange i/o error"); } lim_free (0, rules_file); return answer; } /* tag: Tom Lord Mon May 12 15:01:17 2003 (my.c) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-archive-setup.c0000644000175000017500000002336010457622000020374 0ustar useruser/* cmd-archive-setup.c * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "config-options.h" #include "hackerlab/cmd/main.h" #include "tla/libarch/namespace.h" #include "tla/libarch/archive-setup.h" #include "tla/libarch/my.h" #include "tla/libarch/cmd-archive-setup.h" static t_uchar * usage = "[options] [version ...]"; static t_uchar * version_string = (cfg__std__package " from regexps.com\n" "\n" "Copyright 2003 Tom Lord\n" "\n" "This is free software; see the source for copying conditions.\n" "There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\n" "PARTICULAR PURPOSE.\n" "\n" "Report bugs to " cfg__tla_bug_mail ".\n" "\n" cfg__std__release_id_string "\n"); #define OPTS(OP) \ OP (opt_help_msg, "h", "help", 0, \ "Display a help message and exit.") \ OP (opt_long_help, "H", 0, 0, \ "Display a verbose help message and exit.") \ OP (opt_version, "V", "version", 0, \ "Display a release identifier string\n" \ "and exit.") \ OP (opt_archive, "A", "archive", 1, \ "Override `my-default-archive'") \ OP (opt_list_file, "f", "file FILE", 1, \ "read the list of desired versions from FILE") \ OP (opt_base0_tag, "b", "branches", 0, \ "make base-0 tags") \ OP (opt_cache, "c", "cache", 0, \ "archive cache when creating base-0 tags") t_uchar arch_cmd_archive_setup_help[] = ("create new categories, branches and versions\n" "Given a list of categories, branches, and versions,\n" "ensure that these exist in the appropriate archive.\n" "\n" "For example, starting with an empty archive,:\n" "\n" " % tla archive-setup proja--devo--1.0 projb\n" "\n" "creates a category, branch, and version for project A,\n" "and a category for project B\n" "\n" "When the --file option is used, the list of items to\n" "create is read from a file (use \"-\" to indicate\n" "standard input).\n" "\n" "With the --file option, the option --branches may\n" "be provided. In this case, the input should have\n" "two items per line: a target version (to create), and\n" "a source version to build a tag from. For example,\n" "given an input file containg:\n" "\n" " proja--devo--1.0 his@foo.com/proja--devo--1.0\n" "\n" "with --branches, archive-setup creates a proja version\n" "in your default archive, and adds a base-0 revision\n" "to that project which is a tag of the latest revision\n" "in his@foo.com's archive. (This can make it quite easy\n" "to set-up a new archive which contains branches from\n" "existing archives, for example.)\n" "\n" "If --branches is used, the --cache option may also be\n" "used. It causes each new base-0 revision to be\n" "archive-cached (see \"tla cacherev -H\")\n"); enum options { OPTS (OPT_ENUM) }; static struct opt_desc opts[] = { OPTS (OPT_DESC) {-1, 0, 0, 0, 0} }; int arch_cmd_archive_setup (t_uchar * program_name, int argc, char * argv[]) { int o; struct opt_parsed * option; t_uchar * default_archive = 0; t_uchar * list_file = 0; enum arch_archive_setup_tag_op tag_op = arch_archive_setup_no_tags; int do_cache = 0; vu_push_dash_handler (0); default_archive = 0; safe_buffer_fd (1, 0, O_WRONLY, 0); option = 0; while (1) { o = opt_standard (lim_use_must_malloc, &option, opts, &argc, argv, program_name, usage, version_string, arch_cmd_archive_setup_help, opt_help_msg, opt_long_help, opt_version); if (o == opt_none) break; switch (o) { default: safe_printfmt (2, "unhandled option `%s'\n", option->opt_string); panic ("internal error parsing arguments"); usage_error: opt_usage (2, argv[0], program_name, usage, 1); exit (1); /* bogus_arg: */ safe_printfmt (2, "ill-formed argument for `%s' (`%s')\n", option->opt_string, option->arg_string); goto usage_error; case opt_archive: { default_archive = str_save (0, option->arg_string); break; } case opt_list_file: { list_file = str_save (0, option->arg_string); break; } case opt_base0_tag: { tag_op = arch_archive_setup_make_base0_tag; break; } case opt_cache: { do_cache = 1; break; } } } if (!list_file && (argc < 2)) goto usage_error; if (default_archive && !arch_valid_archive_name (default_archive)) { safe_printfmt (2, "%s: invalid archive name %s\n", argv[0], default_archive); exit (1); } default_archive = arch_my_default_archive (default_archive); { int x; rel_table wants = rel_table_nil; rel_table wants_decomposed = rel_table_nil; if (list_file) { int in_fd; in_fd = safe_open (list_file, O_RDONLY, 0); if (tag_op == arch_archive_setup_no_tags) wants = rel_read_table (in_fd, 1, argv[0], list_file); else wants = rel_read_table (in_fd, 2, argv[0], list_file); safe_close (in_fd); } else { if (arch_archive_setup_no_tags) { safe_printfmt (2, "%s: use -f input when creating tags\n", argv[0]); exit (1); } for (x = 1; x < argc; ++x) rel_add_records (&wants, rel_singleton_record_taking (rel_make_field_str (argv[x])), rel_record_null); } for (x = 0; x < rel_n_records (wants); ++x) { t_uchar * archive = 0; t_uchar * non_archive = 0; if (!arch_valid_package_name (rel_peek_str (wants, x, 0), arch_maybe_archive, arch_req_category, 1)) { safe_printfmt (2, "%s: invalid package name %s\n", argv[0], rel_peek_str (wants, x, 0)); exit (1); } archive = arch_parse_package_name (arch_ret_archive, default_archive, rel_peek_str (wants, x, 0)); non_archive = arch_parse_package_name (arch_ret_non_archive, 0, rel_peek_str (wants, x, 0)); if (arch_is_system_package_name (non_archive)) { safe_printfmt (2, "%s: user's can not create system categories, branches or versions\n illegal spec: %s\n", argv[0], non_archive); exit (2); } if (tag_op == arch_archive_setup_no_tags) rel_add_records (&wants_decomposed, rel_make_record_2_taking (rel_make_field_str (archive), rel_make_field_str (non_archive)), rel_record_null); else { t_uchar * from_archive = 0; t_uchar * from_rev_spec = 0; if (!arch_valid_package_name (rel_peek_str (wants, x, 1), arch_maybe_archive, arch_req_version, 1)) { safe_printfmt (2, "%s: invalid tag-revision specification %s\n", argv[0], rel_peek_str (wants, x, 1)); exit (1); } from_archive = arch_parse_package_name (arch_ret_archive, default_archive, rel_peek_str (wants, x, 1)); from_rev_spec = arch_parse_package_name (arch_ret_non_archive, default_archive, rel_peek_str (wants, x, 1)); rel_add_records (&wants_decomposed, rel_make_record_4_taking (rel_make_field_str (archive), rel_make_field_str (non_archive), rel_make_field_str (from_archive), rel_make_field_str (from_rev_spec)), rel_record_null); lim_free (0, from_archive); lim_free (0, from_rev_spec); } lim_free (0, archive); lim_free (0, non_archive); } arch_setup_archive (1, wants_decomposed, tag_op, do_cache); rel_free_table (wants); rel_free_table (wants_decomposed); } lim_free (0, default_archive); lim_free (0, list_file); return 0; } /* tag: Tom Lord Wed Jun 11 11:47:44 2003 (cmd-archive-setup.c) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-star-merge.c0000644000175000017500000002707710457622000017674 0ustar useruser/* cmd-star-merge.c * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "config-options.h" #include "hackerlab/cmd/main.h" #include "hackerlab/fs/file-names.h" #include "tla/libarch/namespace.h" #include "tla/libarch/project-tree.h" #include "tla/libarch/star-merge.h" #include "tla/libarch/cmdutils.h" #include "tla/libarch/cmd.h" #include "tla/libarch/cmd-star-merge.h" static t_uchar * usage = "[options] [FROM]"; static t_uchar * version_string = (cfg__std__package " from regexps.com\n" "\n" "Copyright 2003 Tom Lord\n" "\n" "This is free software; see the source for copying conditions.\n" "There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\n" "PARTICULAR PURPOSE.\n" "\n" "Report bugs to " cfg__tla_bug_mail ".\n" "\n" cfg__std__release_id_string "\n"); #define OPTS(OP) \ OP (opt_help_msg, "h", "help", 0, \ "Display a help message and exit.") \ OP (opt_long_help, "H", 0, 0, \ "Display a verbose help message and exit.") \ OP (opt_version, "V", "version", 0, \ "Display a release identifier string\n" \ "and exit.") \ OP (opt_archive, "A", "archive", 1, \ "Override tree archive") \ OP (opt_changes, "c", "changes OUTPUT", 1, \ "Generate but don't apply the changeset.") \ OP (opt_reference, "r", "reference VERSION", 1 , \ "Set reference version (default: project tree version)") \ OP (opt_forward, "N", "forward", 0, \ "pass the --forward option to `patch'") \ OP (opt_three_way, "t", "three-way", 0, \ "Perform a 3-way (diff3-style) merge.") \ OP (opt_dir, "d", "dir DIR", 1, \ "Operate on project tree in DIR (default `.')") \ OP (opt_unescaped, 0, "unescaped", 0, \ "show filenames in unescaped form") t_uchar arch_cmd_star_merge_help[] = ("merge mutually merged branches\n" "Merge changes from FROM into the project tree, considering common\n" "ancestry from the project tree reference version, REFERENCE (which\n" "defaults to the tree version of the project tree).\n" "If FROM is not given, it defaults to the tree revision.\n" "\n" "The purpose of this command is to merge changes between development\n" "lines which may have merged in both directions. It uses merge history\n" "to attempt to minimize the spurious conflicts that can arise from `mutual\n" "merging'.\n" "\n" "FROM indicates a revision (it may be specified as a version name,\n" "indicating the latest revision in that version).\n" "\n" "TREE is the project tree into which the merge will occur.\n" "\n" "Star-merge works by computing the most recent ANCESTOR revision of\n" "REFERENCE and FROM and then applying the changeset:\n" "\n" " delta (ANCESTOR, FROM)\n" "\n" "to TREE.\n" "\n" "The \"most recent ancestor\" is defined as follows:\n" "\n" "MAYBE_ANCESTOR_1 is defined as the highest patch level of FROM in REFERENCE\n" "for which both TREE and FROM have a patch log. In other words, it is the latest\n" "REFERENCE revision of FROM's version already merged into TREE.\n" "\n" "MAYBE_ANCESTOR_2 is defined as the highest patch level in REFERENCE for\n" "which both FROM and REFERENCE have a patch log. In other words, it is\n" "the latest revision of REFERENCE already merged into FROM.\n" "\n" "MAYBE_ANCESTOR_2, if it is not \"nil\", was merged into FROM at some revision\n" "of FROM's version, which we can call LAST_MERGE_INTO_FROM.\n" "\n" "If both MAYBE_ANCESTOR_1 or MAYBE_ANCESTOR_2 are nil, star-merge can do\n" "nothing.\n" "\n" "If just one of MAYBE_ANCESTOR_1 is MAYBE_ANCESTOR_2 is not nil, then that\n" "non-nil value is ANCESTOR.\n" "\n" "If both MAYBE_ANCESTOR_1 and MAYBE_ANCESTOR_2 are not nil, then\n" "LAST_MERGE_INTO_FROM and MAYBE_ANCESTOR_1 are compared (both are revisions in\n" "FROM's version). If MAYBE_ANCESTOR_1 is the later revision, then\n" "MAYBE_ANCESTOR_1 is ANCESTOR, otherwise, MAYBE_ANCESTOR_2 is ANCESTOR.\n"); enum options { OPTS (OPT_ENUM) }; static struct opt_desc opts[] = { OPTS (OPT_DESC) {-1, 0, 0, 0, 0} }; int arch_cmd_star_merge (t_uchar * program_name, int argc, char * argv[]) { int o; struct opt_parsed * option; t_uchar * default_archive = 0; int exit_status = 2; t_uchar * changeset = 0; t_uchar * reference = 0; t_uchar * dir = 0; int three_way = 0; int forward = 0; int escape_classes = arch_escape_classes; default_archive = 0; safe_buffer_fd (1, 0, O_WRONLY, 0); option = 0; while (1) { o = opt_standard (lim_use_must_malloc, &option, opts, &argc, argv, program_name, usage, version_string, arch_cmd_star_merge_help, opt_help_msg, opt_long_help, opt_version); if (o == opt_none) break; switch (o) { default: safe_printfmt (2, "unhandled option `%s'\n", option->opt_string); panic ("internal error parsing arguments"); usage_error: opt_usage (2, argv[0], program_name, usage, 1); exit (1); /* bogus_arg: */ safe_printfmt (2, "ill-formed argument for `%s' (`%s')\n", option->opt_string, option->arg_string); goto usage_error; case opt_archive: { lim_free (0, default_archive); default_archive = str_save (0, option->arg_string); break; } case opt_changes: { lim_free (0, changeset); changeset = str_save (0, option->arg_string); break; } case opt_reference: { lim_free (0, reference); reference = str_save (0, option->arg_string); break; } case opt_three_way: { three_way = 1; break; } case opt_forward: { forward = 1; break; } case opt_dir: { lim_free (0, dir); dir = str_save (0, option->arg_string); break; } case opt_unescaped: { escape_classes = 0; break; } } } if (argc > 2) goto usage_error; { t_uchar * from_spec = 0; t_uchar * from_archive = 0; struct arch_archive * from_arch = 0; t_uchar * from_revision = 0; t_uchar * tree_root = 0; t_uchar * tree_version = 0; t_uchar * tree_archive = 0; t_uchar * to_archive = 0; t_uchar * to_version = 0; t_uchar * cache_dir = 0; tree_root = arch_tree_root (0, dir, 0); if (!tree_root) { safe_printfmt (2, "%s: not within a project tree (%s)\n", argv[0], dir); exit (2); } tree_version = arch_tree_version (tree_root); tree_archive = arch_parse_package_name (arch_ret_archive, 0, tree_version); if (!reference) { reference = str_save (0, tree_version); if (!reference) { safe_printfmt (2, "%s: project tree has no default version (%s)\n", argv[0], tree_root); exit (2); } } if (!arch_valid_package_name (reference, arch_maybe_archive, arch_req_version, 0)) { safe_printfmt (2, "%s: invalid VERSION spec (%s)\n", argv[0], reference); exit (2); } to_archive = arch_parse_package_name (arch_ret_archive, default_archive, reference); to_version = arch_parse_package_name (arch_ret_non_archive, 0, reference); if (argc < 2) from_spec = str_save (0, to_version); else from_spec = str_save (0, argv[1]); if (!arch_valid_package_name (from_spec, arch_maybe_archive, arch_req_version, 1)) { safe_printfmt (2, "%s: invalid FROM revision spec (%s)\n", argv[0], from_spec); exit (2); } from_archive = arch_parse_package_name (arch_ret_archive, tree_archive, from_spec); from_arch = arch_archive_connect (from_archive, 0); if (arch_valid_package_name (from_spec, arch_maybe_archive, arch_req_patch_level, 0)) { if (argc == 2) arch_check_for (from_arch, arch_req_patch_level, from_spec); from_revision = arch_parse_package_name (arch_ret_non_archive, 0, from_spec); } else { t_uchar * from_version = 0; rel_table revisions = rel_table_nil; if (argc == 2) arch_check_for (from_arch, arch_req_version, from_spec); from_version = arch_parse_package_name (arch_ret_non_archive, 0, from_spec); revisions = arch_archive_revisions (from_arch, from_version, 2); if (!rel_n_records (revisions)) { safe_printfmt (2, "%s: FROM version has no revisions (%s/%s)\n", argv[0], from_archive, from_version); exit (2); } from_revision = str_save (0, rel_peek_str (revisions, rel_n_records (revisions) - 1, 0)); lim_free (0, from_version); rel_free_table (revisions); } cache_dir = file_name_directory_file (0, tree_root); exit_status = arch_star_merge (1, from_arch, from_archive, from_revision, tree_root, 0, to_archive, to_version, cache_dir, changeset, three_way, forward, escape_classes); lim_free (0, from_spec); lim_free (0, from_archive); arch_archive_close (from_arch); lim_free (0, from_revision); lim_free (0, tree_archive); lim_free (0, tree_root); lim_free (0, to_archive); lim_free (0, to_version); lim_free (0, cache_dir); } lim_free (0, dir); lim_free (0, reference); lim_free (0, default_archive); return exit_status; } /* tag: Tom Lord Sat Jun 28 20:22:10 2003 (cmd-star-merge.c) */ tla-1.3.5+dfsg/src/tla/libarch/hooks.h0000644000175000017500000000112710457622000016201 0ustar useruser/* hooks.h: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__HOOKS_H #define INCLUDE__LIBARCH__HOOKS_H #include "hackerlab/machine/types.h" /* automatically generated __STDC__ prototypes */ extern int arch_run_hook (t_uchar * name, ...); /* must terminate list with (t_uchar*)0, NOT 0 or NULL ! */ #endif /* INCLUDE__LIBARCH__HOOKS_H */ /* tag: Tom Lord Sat Jan 5 15:26:10 2002 (hooks.h) */ tla-1.3.5+dfsg/src/tla/libarch/cmdutils.c0000644000175000017500000004146210457622000016703 0ustar useruser/* cmdutils.c: * **************************************************************** * Copyright (C) 2004 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/bugs/panic.h" #include "hackerlab/vu/safe.h" #include "hackerlab/vu/vu.h" #include "hackerlab/os/errno.h" #include "hackerlab/os/errno-to-string.h" #include "hackerlab/char/str.h" #include "tla/libarch/cmdutils.h" #include "tla/libarch/libraries.h" #include "tla/libarch/project-tree.h" #include "tla/libarch/patch-logs.h" #include "tla/libarch/pfs.h" #include "tla/libfsutils/dir-as-cwd.h" /* __STDC__ prototypes for static functions */ static int category_exists (struct arch_archive *arch, t_uchar * package); static int package_exists (struct arch_archive * arch, t_uchar * package); static int version_exists (struct arch_archive * arch, t_uchar * version_spec); static t_uchar * missing_string (enum arch_valid_package_name_types type); static t_uchar * name_string (enum arch_valid_package_name_types type); static enum arch_parse_package_name_type valid_to_parse (enum arch_valid_package_name_types type); /* Gather a fully-qualified revision name from the current tree * and input (e.g. patch-10) */ t_uchar * arch_fqrvsn_from_tree_and_input (t_uchar *cmd, t_uchar * string, t_uchar * dir) { t_uchar * tree_root = 0; t_uchar * tree_version = 0; t_uchar * tree_arch = 0; t_uchar * ret = 0; if (arch_valid_package_name (string, arch_req_archive, arch_req_patch_level, 0)) return str_save (0, string); tree_root = arch_tree_root (0, dir, 0); if (!tree_root) { safe_printfmt (2, "%s: not in a project tree\n dir: %s\n", cmd, directory_as_cwd (dir)); exit (2); } tree_version = arch_tree_version (tree_root); if (!tree_version) { safe_printfmt (2, "%s: no tree-version set\n tree: %s\n", cmd, tree_root); exit (2); } tree_arch = arch_parse_package_name (arch_ret_archive, 0, tree_version); if (arch_valid_package_name (string, arch_maybe_archive, arch_req_patch_level, 0)) { ret = arch_fully_qualify (tree_arch, string); } else if (arch_valid_package_name (string, arch_maybe_archive, arch_req_version, 0)) { t_uchar * archive = arch_parse_package_name (arch_ret_archive, tree_arch, string); t_uchar * version = arch_parse_package_name (arch_ret_package_version, 0, string); t_uchar * patch_level = arch_highest_patch_level (tree_root, archive, version); t_uchar * revision = str_alloc_cat_many (0, version, "--", patch_level, str_end); ret = arch_fully_qualify (archive, revision); lim_free (0, archive); lim_free (0, version); lim_free (0, patch_level); lim_free (0, revision); } else { ret = str_alloc_cat_many (0, tree_version, "--", string, str_end); if (!arch_valid_package_name (ret, arch_req_archive, arch_req_patch_level, 0)) { safe_printfmt (2, "%s: invalid revision or patch name (%s)\n", cmd, string); exit (2); } } lim_free (0, tree_root); lim_free (0, tree_version); lim_free (0, tree_arch); return ret; } static int category_exists (struct arch_archive *arch, t_uchar * package) { t_uchar * category = 0; rel_table categories = rel_table_nil; int x; category = arch_parse_package_name (arch_ret_category, 0, package); categories = arch_archive_categories (arch); for (x = 0; x < rel_n_records (categories); ++x) { if (!str_cmp (category, rel_peek_str (categories, x, 0))) { lim_free (0, category); rel_free_table (categories); return 1; } } return 0; } static int package_exists (struct arch_archive * arch, t_uchar * package) { t_uchar * category = 0; t_uchar * branch = 0; rel_table categories = rel_table_nil; rel_table branches = rel_table_nil; int x; int found_it = 0; category = arch_parse_package_name (arch_ret_category, 0, package); branch = arch_parse_package_name (arch_ret_package, 0, package); categories = arch_archive_categories (arch); for (x = 0; x < rel_n_records (categories); ++x) { if (!str_cmp (category, rel_peek_str (categories, x, 0))) break; } if (x < rel_n_records (categories)) { branches = arch_archive_branches (arch, category); for (x = 0; x < rel_n_records (branches); ++x) { if (!str_cmp (branch, rel_peek_str (branches, x, 0))) { found_it = 1; break; } } } lim_free (0, category); lim_free (0, branch); rel_free_table (categories); rel_free_table (branches); return found_it; } static int version_exists (struct arch_archive * arch, t_uchar * version_spec) { t_uchar * branch = 0; t_uchar * version = 0; rel_table versions = rel_table_nil; int x; int found_it = 0; branch = arch_parse_package_name (arch_ret_package, 0, version_spec); version = arch_parse_package_name (arch_ret_package_version, 0, version_spec); versions = arch_archive_versions (arch, branch); for (x = 0; x < rel_n_records (versions); ++x) { if (!str_cmp (version, rel_peek_str (versions, x, 0))) { found_it = 1; break; } } lim_free (0, branch); lim_free (0, version); rel_free_table (versions); return found_it; } /* Checks whether the specified item (and all its components) exist */ void arch_check_for (struct arch_archive * arch, enum arch_valid_package_name_types type, t_uchar * package) { t_uchar * spec = arch_parse_package_name (arch_ret_non_archive, "", package); int missing = -1; /* note fall-through behavior */ switch (type) { case arch_req_patch_level: if (arch_revision_exists (arch, spec)) break; else missing = arch_req_patch_level; default: if (!category_exists (arch, spec)) { missing=arch_req_category; break; } if (type == arch_req_category) break; if (!package_exists (arch, spec)) { missing = arch_req_package; break; } if (type == arch_req_package) break; if (!version_exists (arch, spec)) missing = arch_req_version; }; if (missing != -1) { arch_print_missing (arch, missing, type, spec); exit (2); } lim_free (0, spec); } void arch_print_missing (struct arch_archive * arch, enum arch_valid_package_name_types type, enum arch_valid_package_name_types supplied_type, t_uchar * spec) { t_uchar * name = missing_string (type); t_uchar * supplied_name = name_string (supplied_type); t_uchar * portion = arch_parse_package_name (valid_to_parse(type), arch->official_name, spec); t_uchar * nonarch = arch_parse_package_name (arch_ret_non_archive, "", spec); safe_printfmt (2, "No such %s (%s)\n", name, portion); safe_printfmt (2, " name: %s\n location: %s\n %s: %s\n", arch->name, arch->location, supplied_name, nonarch); lim_free (0, portion); lim_free (0, nonarch); } static t_uchar * missing_string (enum arch_valid_package_name_types type) { switch (type) { case arch_req_category: return "category"; break; case arch_req_package: return "package"; break; case arch_req_version: return "version"; break; case arch_req_patch_level: return "patchlevel"; break; default: panic ("missing_string: bad argument."); return 0; }; } static t_uchar * name_string (enum arch_valid_package_name_types type) { switch (type) { case arch_req_category: return "category"; break; case arch_req_package: return "package"; break; case arch_req_version: return "package-version"; break; case arch_req_patch_level: return "revision"; break; default: panic ("name_string: bad argument."); return 0; }; } static enum arch_parse_package_name_type valid_to_parse (enum arch_valid_package_name_types type) { switch (type) { case arch_req_category: return arch_ret_category; break; case arch_req_package: return arch_ret_package; break; case arch_req_version: return arch_ret_version; break; case arch_req_patch_level: return arch_ret_patch_level; break; default: panic ("valid_to_parse: bad argument."); return 0; }; } void arch_check_library_for_revision (t_uchar * archive, t_uchar * revision) { t_uchar * loc = arch_library_find (rel_table_nil, archive, revision, 0); if (loc) { lim_free (0, loc); } else { safe_printfmt (2, "Could not find revision in any library:\n%s/%s\n", archive, revision); exit (2); } } extern t_uchar * safe_tree_version (t_uchar * cmd_name) { t_uchar * tree_version = 0; t_uchar * tree_root = arch_tree_root (0, ".", 0); if (!tree_root) { safe_printfmt (2, "%s: not in a project tree\n dir: %s\n", cmd_name, directory_as_cwd (".")); exit (2); } tree_version = arch_tree_version (tree_root); if (!tree_version) { safe_printfmt (2, "%s: no tree-version set\n tree: %s\n", cmd_name, tree_root); exit (2); } lim_free (0, tree_root); return tree_version; } t_uchar * arch_determine_revision (struct arch_archive ** arch, t_uchar * default_archive, t_uchar * revision_spec, t_uchar * cmd_name) { t_uchar * revision = 0; t_uchar * archive = 0; t_uchar * new_revision_spec = 0; if (!arch_valid_package_name (revision_spec, arch_maybe_archive, arch_req_version, 1)) { if (!arch_valid_patch_level_name (revision_spec)) { safe_printfmt (2, "%s: illegal revision spec (%s)\n", cmd_name, revision_spec); exit (1); } else { t_uchar * tree_version = safe_tree_version (cmd_name); new_revision_spec = str_alloc_cat_many (0, tree_version, "--", revision_spec, str_end); revision_spec = new_revision_spec; } } archive = arch_parse_package_name (arch_ret_archive, default_archive, revision_spec); *arch = arch_archive_connect (archive, 0); lim_free (0, archive); if (arch_valid_package_name (revision_spec, arch_maybe_archive, arch_req_patch_level, 0)) { arch_check_for (*arch, arch_req_patch_level, revision_spec); revision = arch_parse_package_name (arch_ret_non_archive, 0, revision_spec); } else { t_uchar * version = 0; arch_check_for (*arch, arch_req_version, revision_spec); version = arch_parse_package_name (arch_ret_package_version, 0, revision_spec); revision = arch_archive_latest_revision (*arch, version, 2); if (!revision) { safe_printfmt (1, "%s: version has no revisions (%s)\n", cmd_name, version); exit (1); } lim_free (0, version); } lim_free (0, new_revision_spec); return revision; } void arch_check_directory (t_uchar *path, int check_write) { int errn; int mode = R_OK+X_OK; struct stat statb; if (check_write) mode+=W_OK; if (vu_stat (&errn, path, &statb) == -1) { if (errn == ENOENT) safe_printfmt (2, "Specified directory does not exist\nPath: %s\n", path); else safe_printfmt (2, "Error encountered accessing directory (%s)\nPath: %s\n", errno_to_string (errn), path); exit(2); } if (!S_ISDIR(statb.st_mode)) { safe_printfmt (2, "Specified path is not a directory\nPath: %s\n", path); exit (2); } if (access (path, mode) == -1) { safe_printfmt (2, "Error accessing specified directory (%s)\nDirectory: %s\n", errno_to_string (errno), path); exit (2); } } void arch_check_uri (t_uchar * uri) { if (arch_valid_uri (uri)) return; safe_printfmt (2, "URL invalid or unsupported: %s\n", uri); exit (2); } /** * Check whether the revision exists, using local data first, before * trying the archive * archive: the archive containg the revision * revision: the unqualified revision */ extern void arch_check_revision_local (t_uchar * archive, t_uchar * revision) { struct arch_archive * arch = 0; t_uchar * loc = arch_library_find (rel_table_nil, archive, revision, 0); if (loc) { lim_free (0, loc); return; } arch = arch_archive_connect (archive, 0); arch_check_for (arch, arch_req_patch_level, revision); arch_archive_close (arch); } /** * Check the archive to make sure it's suitable for normal use, and not just * for mirroring. */ extern int arch_check_arch (struct arch_archive * arch) { if (str_cmp (arch->name, arch->official_name)) { safe_printfmt (2, ("This archive should only be used as a mirror source or target.\n" "registered with the wrong name. To use it for other purposes, you should\n" "register it using the official name.\n" " name: %s\n" " official name: %s\n" " location: %s\n"), arch->name, arch->official_name, arch->location); return 1; } return 0; } /** * \brief free current and return replacement * * Factors out blocks of temporary variables into one shot. * \return replacement * \param current the string to be freed. * \param replacement the string to be returned */ t_uchar * str_replace (t_uchar *current, t_uchar *replacement) { lim_free (0, current); return replacement; } int arch_separate_arch_name_from_fqrvsn(const t_uchar *name, t_uchar **archive, t_uchar **fqrvsn) { t_uchar *slash = 0; t_uchar *tmp = str_save(0, name); lim_free(0, *archive); lim_free(0, *fqrvsn); if (0 == (slash = str_chr_index (tmp, '/'))) { *archive = str_save(0, ""); *fqrvsn = str_save(0, name); lim_free(0, tmp); return 1; } else { *slash = 0; *archive = str_save(0, tmp); *fqrvsn = str_save(0, slash + 1); lim_free(0, tmp); return 1; } return 0; } extern t_uchar * arch_interpret_delta_path (t_uchar ** arch, t_uchar ** rev, t_uchar * scratch_dir, t_uchar * default_archive, t_uchar * spec, t_uchar * cache_dir) { t_uchar * answer = 0; if (arch_valid_package_name (spec, arch_maybe_archive, arch_req_patch_level, 0)) { t_uchar * archive = 0; t_uchar * revision = 0; struct arch_archive *arch_struct = 0; archive = arch_parse_package_name (arch_ret_archive, default_archive, spec); revision = arch_parse_package_name (arch_ret_non_archive, 0, spec); arch_struct = arch_archive_connect (archive, 0); arch_check_for (arch_struct, arch_req_patch_level, revision); safe_printfmt (1, "* finding or making %s\n", spec); answer = arch_find_or_make_tmp_local_copy (1, scratch_dir, 0, cache_dir, arch_struct, archive, revision); arch_archive_close (arch_struct); if (arch) *arch = archive; else lim_free (0, archive); if (rev) *rev = revision; else lim_free (0, revision); } else if (arch_valid_patch_level_name (spec)) { t_uchar * archive = 0; t_uchar * revision = 0; t_uchar * fqvsn = 0; t_uchar * tree_version = 0; t_uchar * tree_root = 0; tree_root = arch_tree_root (0, ".", 0); if (!tree_root) { safe_printfmt (2, "tla delta: not in a project tree\n dir: %s\n", directory_as_cwd (".")); exit (2); } fqvsn = arch_tree_version (tree_root); if (!fqvsn) { safe_printfmt (2, "tla delta: no tree-version set\n tree: %s\n", tree_root); exit (2); } archive = arch_parse_package_name (arch_ret_archive, 0, fqvsn); tree_version = arch_parse_package_name (arch_ret_non_archive, 0, fqvsn); revision = str_alloc_cat_many (0, tree_version, "--", spec, str_end); safe_printfmt (1, "* finding or making %s\n", spec); safe_flush (1); answer = arch_find_or_make_tmp_local_copy (1, scratch_dir, 0, cache_dir, 0, archive, revision); if (arch) *arch = archive; else lim_free (0, archive); if (rev) *rev = revision; else lim_free (0, revision); lim_free (0, fqvsn); lim_free (0, tree_version); lim_free (0, tree_root); } else { arch_check_directory (spec, 0); answer = directory_as_cwd (spec); } return answer; } /* tag: Aaron Bentley Tue Dec 23 10:46:00 2003 (cmdutils.c) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-library-remove.c0000644000175000017500000001046710457622000020560 0ustar useruser/* cmd-library-remove.c * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "config-options.h" #include "hackerlab/cmd/main.h" #include "tla/libfsutils/rmrf.h" #include "tla/libarch/my.h" #include "tla/libarch/libraries.h" #include "tla/libarch/namespace.h" #include "tla/libarch/cmd-library-remove.h" static t_uchar * usage = "[options] revision"; static t_uchar * version_string = (cfg__std__package " from regexps.com\n" "\n" "Copyright 2003 Tom Lord\n" "\n" "This is free software; see the source for copying conditions.\n" "There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\n" "PARTICULAR PURPOSE.\n" "\n" "Report bugs to " cfg__tla_bug_mail ".\n" "\n" cfg__std__release_id_string "\n"); #define OPTS(OP) \ OP (opt_help_msg, "h", "help", 0, \ "Display a help message and exit.") \ OP (opt_long_help, "H", 0, 0, \ "Display a verbose help message and exit.") \ OP (opt_version, "V", "version", 0, \ "Display a release identifier string\n" \ "and exit.") \ OP (opt_archive, "A", "archive", 1, \ "Override `my-default-archive'") t_uchar arch_cmd_library_remove_help[] = ("remove a revision from the revision library\n" "Remove REVISION from your revision library.\n" "\n" "If the revision is not present, print an error message\n" "and exit with non-0 status.\n"); enum options { OPTS (OPT_ENUM) }; static struct opt_desc opts[] = { OPTS (OPT_DESC) {-1, 0, 0, 0, 0} }; int arch_cmd_library_remove (t_uchar * program_name, int argc, char * argv[]) { int o; struct opt_parsed * option; t_uchar * default_archive; default_archive = 0; safe_buffer_fd (1, 0, O_WRONLY, 0); option = 0; while (1) { o = opt_standard (lim_use_must_malloc, &option, opts, &argc, argv, program_name, usage, version_string, arch_cmd_library_remove_help, opt_help_msg, opt_long_help, opt_version); if (o == opt_none) break; switch (o) { default: safe_printfmt (2, "unhandled option `%s'\n", option->opt_string); panic ("internal error parsing arguments"); usage_error: opt_usage (2, argv[0], program_name, usage, 1); exit (1); /* bogus_arg: */ safe_printfmt (2, "ill-formed argument for `%s' (`%s')\n", option->opt_string, option->arg_string); goto usage_error; case opt_archive: { default_archive = str_save (0, option->arg_string); break; } } } if (argc != 2) goto usage_error; { t_uchar * revspec; t_uchar * archive = 0; t_uchar * revision = 0; t_uchar * answer; revspec = argv[1]; if (!arch_valid_package_name (revspec, arch_maybe_archive, arch_req_patch_level, 0)) { safe_printfmt (2, "%s: invalid revision name (%s)\n", argv[0], revspec); exit (2); } archive = arch_parse_package_name (arch_ret_archive, default_archive, revspec); if (!archive) { safe_printfmt (2, "%s: no archive specified for library-remove\n", argv[0]); exit (2); } revision = arch_parse_package_name (arch_ret_non_archive, 0, revspec); #undef FIXME /* way to ask for particular device or particular library? */ answer = arch_library_find (rel_table_nil, archive, revision, 0); if (answer) rmrf_file (answer); else { safe_printfmt (2, "%s: revision not present in library (%s/%s)\n", argv[0], archive, revision); exit (1); } } return 0; } /* tag: Tom Lord Wed May 21 15:44:27 2003 (library-remove.c) */ tla-1.3.5+dfsg/src/tla/libarch/pfs-sftp.c0000644000175000017500000011676610457622000016633 0ustar useruser/* pfs-sftp.c: * **************************************************************** * Copyright (C) 2002 - 2004 Scott Parish * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include #include #include #include "config-options.h" #include "hackerlab/arrays/ar.h" #include "hackerlab/bugs/panic.h" #include "hackerlab/machine/types.h" #include "hackerlab/mem/alloc-limits.h" #include "hackerlab/mem/mem.h" #include "hackerlab/char/str.h" #include "hackerlab/fmt/cvt.h" #include "hackerlab/fs/file-names.h" #include "hackerlab/os/errno-to-string.h" #include "hackerlab/vu/safe.h" #include "tla/libfsutils/tmp-files.h" #include "tla/libfsutils/file-contents.h" #include "tla/libarch/archives.h" #include "tla/libarch/exec.h" #include "tla/libarch/pfs-sftp.h" #include "tla/libarch/pfs-sftp-version.h" #include "tla/libarch/sftp.h" #undef FIXME /* TODO: look through ssh/tcp/ethernet specks to find an optimal size */ #define SFTP_RWSIZE 16384 /* PipeLine-REQuests: num r/w requests open at once for get() and put() */ #define MAX_PL_REQS 16 #undef MIN #define MIN(A,B) ((A) < (B) ? (A) : (B)) #define LISTING_FILE ".listing" #define WRITE_UINT4(str, ui) do { \ (str)[0] = (ui) >> 24; \ (str)[1] = (ui) >> 16; \ (str)[2] = (ui) >> 8; \ (str)[3] = (ui); } while (0) #define WRITE_UINT8(str, ui) do { \ (str)[0] = (ui) >> 56; \ (str)[1] = (ui) >> 48; \ (str)[2] = (ui) >> 40; \ (str)[3] = (ui) >> 32; \ (str)[4] = (ui) >> 24; \ (str)[5] = (ui) >> 16; \ (str)[6] = (ui) >> 8; \ (str)[7] = (ui); } while (0) #define READ_UINT4(str) ( \ ((t_uint32)(unsigned char)((str)[0]) << 24) | \ ((t_uint32)(unsigned char)((str)[1]) << 16) | \ ((t_uint32)(unsigned char)((str)[2]) << 8) | \ ((t_uint32)(unsigned char)((str)[3])) ) #define READ_UINT8(str) ( \ ((unsigned long long int)(unsigned char)((str)[0]) << 56) | \ ((unsigned long long int)(unsigned char)((str)[1]) << 48) | \ ((unsigned long long int)(unsigned char)((str)[2]) << 40) | \ ((unsigned long long int)(unsigned char)((str)[3]) << 32) | \ ((unsigned long long int)(unsigned char)((str)[4]) << 24) | \ ((unsigned long long int)(unsigned char)((str)[5]) << 16) | \ ((unsigned long long int)(unsigned char)((str)[6]) << 8) | \ ((unsigned long long int)(unsigned char)((str)[7])) ) struct arch_pfs_sftp_session { struct arch_pfs_session pfs; char * cwd; t_uint32 request_id; t_uint32 plreqs; int in_fd; int out_fd; }; struct sftp_attrs { t_uint32 flags; unsigned long long int size; t_uint32 uid; t_uint32 gid; t_uint32 perms; t_uint32 atime; t_uint32 mtime; unsigned char *extended; }; /* __STDC__ prototypes for static functions */ static int sftp_write_pkt (struct arch_pfs_sftp_session * p, int soft_errors, const char *fmt, ...); static int sftp_export_attrs (struct sftp_attrs *a, char ** pkt, int * len); static void sftp_client_do_init (struct arch_pfs_sftp_session * p, int soft_errors); static int sftp_server_response (struct arch_pfs_sftp_session * p, char ** pkt, int * pkt_len, int expected_response, int soft_errors); static int sftp_decode_status (char * pkt, int pkt_len, int i, int soft_errors); static t_uchar * sftp_abs_path (const t_uchar * cwd, const t_uchar *path); static int sftp_get (struct arch_pfs_sftp_session * p, int data_fd, const t_uchar * path, int soft_errors); static int pfs_get_file (struct arch_pfs_session * p, int out_fd, const t_uchar * path, int soft_errors); static t_uchar * pfs_file_contents (struct arch_pfs_session * p, const t_uchar * path, int soft_errors); static rel_table pfs_directory_files (struct arch_pfs_session * p, const t_uchar * path, int soft_errors); static int sftp_import_attrs (struct sftp_attrs *a, char * pkt, unsigned int pkt_len, int soft_errors); static int pfs_put_file (struct arch_pfs_session *p, const t_uchar * path, mode_t perms, int data_fd, int soft_errors); static int pfs_mkdir (struct arch_pfs_session * p, const t_uchar * path, mode_t mode, int soft_errors); static int pfs_file_exists (struct arch_pfs_session * p, const t_uchar * path); static int pfs_is_dir (struct arch_pfs_session * p, const t_uchar * path); static int pfs_rename (struct arch_pfs_session * p, t_uchar ** errstr, const t_uchar * from, const t_uchar * to, int soft_errors); static int pfs_rmdir (struct arch_pfs_session * p, const t_uchar * path, int soft_errors); static int pfs_rm (struct arch_pfs_session * p, const t_uchar * path, int soft_errors); static t_uchar * dirfold (t_uchar *dir); struct arch_pfs_vtable sftp_pfs_fns = { pfs_file_exists, pfs_is_dir, pfs_file_contents, pfs_get_file, pfs_directory_files, pfs_put_file, pfs_mkdir, pfs_rename, pfs_rmdir, pfs_rm, }; int arch_pfs_sftp_supported_protocol (const t_uchar * uri) { if (!str_cmp_prefix ("sftp:", uri)) return 1; else return 0; } static int sftp_write_pkt (struct arch_pfs_sftp_session * p, int soft_errors, const char *fmt, ...) { va_list ap; struct sftp_attrs *attrs; char *buf; int i; int errn = 0; unsigned int len, s_len, ret; t_uint32 l; unsigned long long ll; char *s; unsigned char c; va_start (ap, fmt); len = 4; buf = lim_malloc (0, len); i = 4; while (*fmt) switch (*fmt++) { case '8': /* unsigned long long */ ll = va_arg (ap, unsigned long long); len += sizeof (ll); buf = lim_realloc (0, buf, len); WRITE_UINT8 (buf + i, ll); i += sizeof (ll); break; case '4': /* t_uint32 */ l = va_arg (ap, t_uint32); len += sizeof (l); buf = lim_realloc (0, buf, len); WRITE_UINT4 (buf + i, l); i += sizeof (l); break; case '1': /* int */ c = va_arg (ap, int); len += sizeof (c); buf = lim_realloc (0, buf, len); buf[i] = c; i += sizeof (c); break; case 's': /* char*,size_t (IE: ) */ s = va_arg (ap, char *); l = va_arg (ap, size_t); len += sizeof (l) + l; buf = lim_realloc (0, buf, len); WRITE_UINT4 (buf + i, l); i += sizeof (l); mem_move (buf + i, s, l); i += l; break; case 'a': /* struct sftp_attrs* */ attrs = va_arg (ap, struct sftp_attrs *); sftp_export_attrs (attrs, &s, &s_len); len += s_len; buf = lim_realloc (0, buf, len); mem_move (buf + i, s, s_len); i += s_len; break; default: if (!soft_errors) { safe_printfmt (2, "Invalid fmt to sftp_write_pkt!\n"); exit (2); } else return -1; } c = va_arg (ap, int); WRITE_UINT4 (buf, len - sizeof(len)); ret = vu_write_retry (&errn, p->out_fd, buf, len); lim_free (0, buf); va_end (ap); return ret; } /* take the structure and create an sftp attr string, returns size of string */ static int sftp_export_attrs (struct sftp_attrs *a, char ** pkt, int * len) { int i = 0; *len = sizeof (a->flags) + (a->flags & SSH_FILEXFER_ATTR_SIZE ? sizeof (a->size) : 0) + (a->flags & SSH_FILEXFER_ATTR_UIDGID ? sizeof (a->uid)*2 : 0) + (a->flags & SSH_FILEXFER_ATTR_PERMISSIONS ? sizeof (a->perms) : 0) + (a->flags & SSH_FILEXFER_ATTR_ACMODTIME ? sizeof (a->atime)*2 : 0); *pkt = lim_malloc (0, *len); WRITE_UINT4 (*pkt, a->flags); i += 4; if (a->flags & SSH_FILEXFER_ATTR_SIZE) { WRITE_UINT8 (*pkt + i, a->size); i += 8; } if (a->flags & SSH_FILEXFER_ATTR_UIDGID) { WRITE_UINT4 (*pkt + i, a->uid); i += 4; WRITE_UINT4 (*pkt + i, a->gid); i += 4; } if (a->flags & SSH_FILEXFER_ATTR_PERMISSIONS) { WRITE_UINT4 (*pkt + i, a->perms); i += 4; } if (a->flags & SSH_FILEXFER_ATTR_ACMODTIME) { WRITE_UINT4 (*pkt + i, a->atime); i += 4; WRITE_UINT4 (*pkt + i, a->mtime); i += 4; } return *len; } struct arch_pfs_session * arch_pfs_sftp_connect (const t_uchar * uri) { struct arch_pfs_sftp_session * answer = 0; t_uchar * hostname = 0; t_uchar * port = 0; t_uchar * user = 0; t_uchar ** ssh_argv; int subproc; int pin[2], pout[2]; int c_in_fd, c_out_fd; enum arch_ssh_type ssh_type = arch_pfs_sftp_ssh_type (); answer = (struct arch_pfs_sftp_session *)lim_malloc (0, sizeof (*answer)); mem_set0 ((t_uchar *)answer, sizeof (*answer)); answer->pfs.vtable = &sftp_pfs_fns; if (arch_pfs_sftp_parse_uri (&user, &hostname, &port, &answer->cwd, uri)!=0) { safe_printfmt (2, "Invalid sftp URL\n"); /*safe_printfmt (2, "Invalid sftp URL: %s\n", uri); * can't use URI (may be mangled by arch_pfs_pfs_make_archive, etc */ exit (2); } ssh_argv = 0; *(t_uchar **)ar_push ((void **)&ssh_argv, 0, sizeof (t_uchar *)) = arch_pfs_sftp_ssh_binary (ssh_type); if (port) { *(t_uchar **)ar_push ((void **)&ssh_argv, 0, sizeof (t_uchar *)) = "-p"; *(t_uchar **)ar_push ((void **)&ssh_argv, 0, sizeof (t_uchar *)) = port; } if (user) { *(t_uchar **)ar_push ((void **)&ssh_argv, 0, sizeof (t_uchar *)) = "-l"; *(t_uchar **)ar_push ((void **)&ssh_argv, 0, sizeof (t_uchar *)) = user; } if (ssh_type == ssh_type_lsh) { /* `--no-x11-forward' is the default with `lshc', so we don't need to make it explicit. Furthermore, it is not supported by `lshg', so we'd better not use it so that both `lshc' and `lshg' can be used interchangeably. */ *(t_uchar **)ar_push ((void **)&ssh_argv, 0, sizeof (t_uchar *)) = "--subsystem=sftp"; *(t_uchar **)ar_push ((void **)&ssh_argv, 0, sizeof (t_uchar *)) = hostname; *(t_uchar **)ar_push ((void **)&ssh_argv, 0, sizeof (t_uchar *)) = 0; } else if (ssh_type == ssh_type_openssh) { /* From OpenSSH' ssh(1), when using `-s', "The subsystem is specified as the remote command". IOW, we are to perform an invokation along the lines of: $ ssh -l USER -2 -s REMOTE-HOST sftp We assume the use of `ssh', not `sftp'. */ *(t_uchar **)ar_push ((void **)&ssh_argv, 0, sizeof (t_uchar *)) = "-oFallBackToRsh=no"; *(t_uchar **)ar_push ((void **)&ssh_argv, 0, sizeof (t_uchar *)) = "-oForwardX11=no"; *(t_uchar **)ar_push ((void **)&ssh_argv, 0, sizeof (t_uchar *)) = "-oForwardAgent=no"; /* *(t_uchar **)ar_push ((void **)&ssh_argv, 0, sizeof (t_uchar *)) = "-oClearAllForwardings=yes"; */ *(t_uchar **)ar_push ((void **)&ssh_argv, 0, sizeof (t_uchar *)) = "-2"; *(t_uchar **)ar_push ((void **)&ssh_argv, 0, sizeof (t_uchar *)) = "-s"; *(t_uchar **)ar_push ((void **)&ssh_argv, 0, sizeof (t_uchar *)) = hostname; *(t_uchar **)ar_push ((void **)&ssh_argv, 0, sizeof (t_uchar *)) = "sftp"; *(t_uchar **)ar_push ((void **)&ssh_argv, 0, sizeof (t_uchar *)) = 0; } else if (ssh_type == ssh_type_fsecure3) { *(t_uchar **)ar_push ((void **)&ssh_argv, 0, sizeof (t_uchar *)) = "-x"; *(t_uchar **)ar_push ((void **)&ssh_argv, 0, sizeof (t_uchar *)) = "-a"; *(t_uchar **)ar_push ((void **)&ssh_argv, 0, sizeof (t_uchar *)) = "-s"; *(t_uchar **)ar_push ((void **)&ssh_argv, 0, sizeof (t_uchar *)) = "sftp"; *(t_uchar **)ar_push ((void **)&ssh_argv, 0, sizeof (t_uchar *)) = hostname; *(t_uchar **)ar_push ((void **)&ssh_argv, 0, sizeof (t_uchar *)) = 0; } else if (ssh_type == ssh_type_psftp) { *(t_uchar **)ar_push ((void **)&ssh_argv, 0, sizeof (t_uchar*)) = "-2"; *(t_uchar **)ar_push ((void **)&ssh_argv, 0, sizeof (t_uchar*)) = hostname; *(t_uchar **)ar_push ((void **)&ssh_argv, 0, sizeof (t_uchar*)) = 0; } else panic ("undefined SSH implementation type"); if ((pipe (pin) == -1) || (pipe (pout) == -1)) panic ("Couldn't create pipe(s)"); answer->out_fd = pout[1]; answer->in_fd = pin[0]; c_in_fd = pout[0]; c_out_fd = pin[1]; subproc = fork (); if (subproc < 0) panic ("unable to fork"); if (subproc == 0) { if ((dup2 (c_in_fd, STDIN_FILENO) == -1) || (dup2 (c_out_fd, STDOUT_FILENO) == -1)) { safe_printfmt (2, "dup2: %s\n", errno_to_string (errno)); exit (1); } close (answer->in_fd); close (answer->out_fd); close (c_in_fd); close (c_out_fd); arch_util_execvp (ssh_argv[0], ssh_argv); safe_printfmt (2, "exec: %s: %s\n", ssh_argv[0], errno_to_string (errno)); exit (1); } close (c_in_fd); close (c_out_fd); sftp_client_do_init (answer, 0); if (!pfs_file_exists((struct arch_pfs_session *)answer, answer->cwd)) { safe_printfmt (2, "No such file or directory: %s\n", answer->cwd); exit (2); } lim_free (0, hostname); lim_free (0, user); lim_free (0, port); return (struct arch_pfs_session *)answer; } static void sftp_client_do_init (struct arch_pfs_sftp_session * p, int soft_errors) { int pkt_len; char *pkt; sftp_write_pkt (p, soft_errors, "14", SSH_FXP_INIT, (t_uint32)SFTP_VERSION, soft_errors); sftp_server_response (p, &pkt, &pkt_len, SSH_FXP_VERSION, soft_errors); lim_free (0, pkt); } static int sftp_server_response (struct arch_pfs_sftp_session * p, char ** pkt, int * pkt_len, int expected_response, int soft_errors) { int i, errn; unsigned int len, read_len, total_read, response; unsigned char *pl; unsigned char buf[4]; errn = 0; read_len = vu_read_retry (&errn, p->in_fd, buf, 4); if (read_len < 4) { if (!soft_errors) { if (errn) safe_printfmt (2, "Error reading from server: %s\n", errno_to_string (errn)); else safe_printfmt (2, "Error reading from server\n"); exit (2); } else return -1; } *pkt_len = len = READ_UINT4 (buf); *pkt = pl = lim_malloc (0, len); total_read = 0; while (len) { read_len = vu_read_retry (&errn, p->in_fd, pl + total_read, MIN(len, BUFSIZ)); if (read_len <= 0 || read_len > len) { if (!soft_errors) { if (errn) safe_printfmt (2, "Error reading from server: %s\n", errno_to_string (errn)); else safe_printfmt (2, "Error reading from server.\n"); exit (2); } else return -1; } total_read += read_len; len -= read_len; } i = 0; response = pl[i++]; if (response != SSH_FXP_VERSION) { int rq_id_offset = 0; /* request_id offset caused by pipe-lining */ if (p->plreqs) rq_id_offset = p->plreqs - 1; if (READ_UINT4 (pl + i) != (p->request_id - rq_id_offset)) { if (!soft_errors) { lim_free (0, pl); safe_printfmt (2, "Error: server returned wrong request id\n"); exit(2); } else return -1; } i += 4; } if (response != expected_response) { if (response == SSH_FXP_STATUS) { return sftp_decode_status (pl, *pkt_len, i, soft_errors); } if (!soft_errors) { safe_printfmt (2, "Error: server returned wrong response\n"); exit (2); } else lim_free (0, pl); } return i; } static int sftp_decode_status (char * pkt, int pkt_len, int i, int soft_errors) { int code, err_len; const char *err_msg; code = READ_UINT4 (pkt + i); i += 4; if (code == SSH_FX_OK || code == SSH_FX_EOF) return 0; if ( i == pkt_len ) { switch (code) { case SSH_FX_NO_SUCH_FILE: err_msg = "no such file or directory"; break; case SSH_FX_PERMISSION_DENIED: err_msg = "permission denied"; break; case SSH_FX_FAILURE: err_msg = "failure"; break; case SSH_FX_BAD_MESSAGE: err_msg = "bad message"; break; case SSH_FX_NO_CONNECTION: err_msg = "no connection"; break; case SSH_FX_CONNECTION_LOST: err_msg = "connection lost"; break; case SSH_FX_OP_UNSUPPORTED: err_msg = "operation not supported"; break; default: err_msg = "???"; break; } err_len = strlen(err_msg); } else if ( pkt_len - i < 4 || pkt_len - i < (err_len = READ_UINT4 (pkt + i)) + 4 ) { if (!soft_errors) { safe_printfmt (2, "sftp_decode_status: Packet too short(1): possibly garbage from server?\n"); exit (2); } else return -1; } else { i += 4; err_msg = pkt + i; } if (!soft_errors) { safe_printfmt (2, "sftp status: %.*s\n", err_len, err_msg); exit (2); } else return -1; } static t_uchar * sftp_abs_path (const t_uchar * cwd, const t_uchar *path) { t_uchar * ap; if (path[0] != '/') ap = str_alloc_cat_many (0, cwd, "/", path, str_end); else ap = str_save (0, path); return dirfold (ap); } static int sftp_get (struct arch_pfs_sftp_session * p, int data_fd, const t_uchar * path, int soft_errors) { struct sftp_attrs attrs; unsigned int pkt_len; char *pkt, *file; int ret, handle_len, i; unsigned long long total_read; char *handle; int len, errn, eof, numpkts; file = sftp_abs_path (p->cwd, path); attrs.flags = 0; ret = sftp_write_pkt (p, soft_errors, "14s4a", SSH_FXP_OPEN, ++p->request_id, file, str_length (file), (t_uint32)SSH_FXF_READ, &attrs); lim_free (0, file); if (0 > ret) return -1; if (0 > (i = sftp_server_response (p, &pkt, &pkt_len, SSH_FXP_HANDLE, soft_errors))) return -1; handle_len = READ_UINT4 (pkt + i); i += 4; if (handle_len > pkt_len - i) { if (!soft_errors) { safe_printfmt(2, "sftp_client_get: Packet too short(2): did we get garbage from server?\n"); exit (2); } else lim_free (0, pkt); return -1; } handle = lim_malloc (0, handle_len); mem_move (handle, pkt + i, handle_len); lim_free (0, pkt); total_read = 0; eof = 0; numpkts = 0; while (1) { for (; ! eof && p->plreqs <= MIN(MAX_PL_REQS, numpkts + 1); p->plreqs++) { ret = sftp_write_pkt (p, soft_errors, "14s84", SSH_FXP_READ, ++p->request_id, handle, (size_t)handle_len, total_read + SFTP_RWSIZE * p->plreqs, (t_uint32)SFTP_RWSIZE); if (0 > ret) { lim_free (0, handle); return -1; } } if (0 > (i = sftp_server_response (p, &pkt, &pkt_len, SSH_FXP_DATA, soft_errors))) { lim_free (0, handle); return -1; } p->plreqs--; numpkts++; if (i == 0) { if (p->plreqs) { eof = 1; continue; } lim_free (0, pkt); break; } if (eof) { safe_printfmt(2, "EOF already reached, but the server sent data!\n"); exit(2); } len = READ_UINT4 (pkt + i); i += 4; if (len > pkt_len - i) { if (!soft_errors) { safe_printfmt (2, "sftp_client_get: Packet too short(3): did we get garbage from server?\n"); exit (2); } else { lim_free (0, handle); lim_free (0, pkt); return -1; } } if (0 > vu_write_retry (&errn, data_fd, pkt + i, len)) { if (! soft_errors) { safe_printfmt(2, "Error while writing: %s\n", errno_to_string (errn)); exit (2); } else return -1; } i += len; total_read += len; lim_free (0, pkt); } if (p->plreqs) { safe_printfmt (2, "sftp_client_get: Requests still in pipe-line!\n"); exit (2); } if (0 > sftp_write_pkt (p, soft_errors, "14s", SSH_FXP_CLOSE, ++p->request_id, handle, (size_t)handle_len)) return -1; lim_free (0, handle); if (0 > (i = sftp_server_response (p, &pkt, &pkt_len, SSH_FXP_STATUS, soft_errors))) return -1; if (i >= 0) lim_free (0, pkt); return i; } static int pfs_get_file (struct arch_pfs_session * p, int out_fd, const t_uchar * path, int soft_errors) { struct arch_pfs_sftp_session * pfs = (struct arch_pfs_sftp_session *)p; return sftp_get (pfs, out_fd, path, soft_errors); } static t_uchar * pfs_file_contents (struct arch_pfs_session * p, const t_uchar * path, int soft_errors) { struct arch_pfs_sftp_session * pfs = (struct arch_pfs_sftp_session *)p; t_uchar * tmp_path = 0; int fd; t_uchar * answer = 0; tmp_path = tmp_file_name ("/tmp", ",,pfs-sftp-file-contents"); fd = safe_open (tmp_path, O_RDWR | O_CREAT | O_EXCL, 0000); safe_unlink (tmp_path); if (0 > sftp_get (pfs, fd, path, soft_errors)) { safe_close(fd); return 0; } safe_lseek (fd, (off_t)0, SEEK_SET); answer = fd_contents (fd); safe_close (fd); return answer; } static rel_table pfs_directory_files (struct arch_pfs_session * p, const t_uchar * path, int soft_errors) { struct arch_pfs_sftp_session * pfs = (struct arch_pfs_sftp_session *)p; struct sftp_attrs attrs; rel_table answer = rel_table_nil; unsigned int pkt_len, j, count; char *pkt, *dir, *file; int len, handle_len, dots, i; char *handle; dir = sftp_abs_path (pfs->cwd, path); chop_slashes: i = str_length (dir); if (i > 1 && dir[i - 1] == '/') { dir[i - 1] = 0; goto chop_slashes; } if (0 > sftp_write_pkt (pfs, soft_errors, "14s", SSH_FXP_OPENDIR, ++pfs->request_id, dir, str_length (dir))) return rel_table_nil; lim_free (0, dir); if (0 > (i = sftp_server_response (pfs, &pkt, &pkt_len, SSH_FXP_HANDLE, soft_errors))) return rel_table_nil; handle_len = READ_UINT4 (pkt + i); i += 4; if (handle_len > pkt_len - i) { if (! soft_errors) { safe_printfmt(2, "sftp_client_list: Packet too short(4): did we get garbage from server?\n"); exit (2); } lim_free (0, pkt); return rel_table_nil; } handle = lim_malloc (0, handle_len); mem_move (handle, pkt + i, handle_len); lim_free (0, pkt); while (1) { if (0 >sftp_write_pkt (pfs, soft_errors, "14s", SSH_FXP_READDIR, ++pfs->request_id, handle, (size_t)handle_len)) return rel_table_nil; if (0 > (i = sftp_server_response (pfs, &pkt, &pkt_len, SSH_FXP_NAME, soft_errors))) return rel_table_nil; if (i == 0) { lim_free (0, pkt); break; } count = READ_UINT4 (pkt + i); i += 4; for (j = 0; j < count; j++) { len = READ_UINT4 (pkt + i); i += 4; if (len > pkt_len - i) { if (!soft_errors) { safe_printfmt(2, "sftp_client_list: Packet too short(5): did we get garbage from server? (%d > %d - %d)\n", len, pkt_len, i); lim_free (0, handle); lim_free (0, pkt); exit (2); } return rel_table_nil; } dots = 0; if ((len == 1 && pkt[i] == '.') || (len == 2 && pkt[i] == '.' && pkt[i+1] == '.')) dots = 1; if (!dots) { file = str_save_n (0, pkt+i, len); rel_add_records (&answer, rel_singleton_record_taking (rel_make_field_str (file)), rel_record_null); } i += len; len = READ_UINT4 (pkt + i); i += 4; if (len > pkt_len - i) { if (! soft_errors) { safe_printfmt(2, "sftp_client_list: Packet too short(6): did we get garbage from server?\n"); lim_free (0, handle); lim_free (0, pkt); exit (2); } return rel_table_nil; } i += len; if (0 > (i += sftp_import_attrs (&attrs, pkt + i, pkt_len - i, soft_errors))) return rel_table_nil; } lim_free (0, pkt); } if (0 > sftp_write_pkt (pfs, soft_errors, "14s", SSH_FXP_CLOSE, ++pfs->request_id, handle, (size_t)handle_len)) return rel_table_nil; lim_free (0, handle); if (0 > (i = sftp_server_response (pfs, &pkt, &pkt_len, SSH_FXP_HANDLE, soft_errors))) return rel_table_nil; if (i >= 0) lim_free (0, pkt); return answer; } /* take an sftp attr string and initialize a structure from it */ static int sftp_import_attrs (struct sftp_attrs *a, char * pkt, unsigned int pkt_len, int soft_errors) { int count, i, j; unsigned int len; i = 0; a->flags = READ_UINT4 (pkt); i += 4; len = (a->flags & SSH_FILEXFER_ATTR_SIZE ? sizeof (a->size) : 0) + (a->flags & SSH_FILEXFER_ATTR_UIDGID ? sizeof (a->uid)*2 : 0) + (a->flags & SSH_FILEXFER_ATTR_PERMISSIONS ? sizeof (a->perms) : 0) + (a->flags & SSH_FILEXFER_ATTR_ACMODTIME ? sizeof (a->atime)*2 : 0); if (len > pkt_len - i) { if (!soft_errors) { safe_printfmt (2, "sftp_import_attrs: Packet too short(7): did we get garbage from server?\n"); exit (2); } return -1; } if (a->flags & SSH_FILEXFER_ATTR_SIZE) { a->size = READ_UINT8 (pkt + i); i += 8; } if (a->flags & SSH_FILEXFER_ATTR_UIDGID) { a->uid = READ_UINT4 (pkt + i); i += 4; a->gid = READ_UINT4 (pkt + i); i += 4; } if (a->flags & SSH_FILEXFER_ATTR_PERMISSIONS) { a->perms = READ_UINT4 (pkt + i); i += 4; } if (a->flags & SSH_FILEXFER_ATTR_ACMODTIME) { a->atime = READ_UINT4 (pkt + i); i += 4; a->mtime = READ_UINT4 (pkt + i); i += 4; } if (a->flags & SSH_FILEXFER_ATTR_EXTENDED) { count = READ_UINT4 (pkt + i); for (j = 0; j < count; j++) { i += READ_UINT4 (pkt + i); i += READ_UINT4 (pkt + i); } } return i; } static int pfs_put_file (struct arch_pfs_session *p, const t_uchar * path, mode_t perms, int data_fd, int soft_errors) { struct arch_pfs_sftp_session * pfs = (struct arch_pfs_sftp_session *)p; struct sftp_attrs attrs; unsigned int pkt_len; char *pkt, *file; int ret, handle_len, i, errn; unsigned long long total_written; char *handle; char buf[SFTP_RWSIZE]; int len, eof; file = sftp_abs_path (pfs->cwd, path); attrs.flags = SSH_FILEXFER_ATTR_PERMISSIONS; attrs.perms = perms; ret = sftp_write_pkt (pfs, soft_errors, "14s4a", SSH_FXP_OPEN, ++pfs->request_id, file, str_length (file), (t_uint32)(SSH_FXF_WRITE | SSH_FXF_CREAT | SSH_FXF_TRUNC), &attrs); lim_free (0, file); if (0 > ret) return -1; if (0 > (i = sftp_server_response (pfs, &pkt, &pkt_len, SSH_FXP_HANDLE, soft_errors))) return i; handle_len = READ_UINT4 (pkt + i); i += 4; if (handle_len > pkt_len - i) { if (!soft_errors) { safe_printfmt (2, "sftp_client_put: Packet to short(8): did we get garbage from server?\n"); exit (2); } lim_free (0, pkt); return -1; } handle = lim_malloc (0, handle_len); mem_move (handle, pkt + i, handle_len); lim_free (0, pkt); total_written = 0; eof = 0; while (1) { for (; ! eof && pfs->plreqs <= MAX_PL_REQS; pfs->plreqs++) { if (0 > (len = vu_read_retry (&errn, data_fd, buf, sizeof (buf)))) { if (!soft_errors) { safe_printfmt (2, "Failed to read file to put()!\n"); exit (2); } lim_free (0, handle); return -1; } ret = sftp_write_pkt (pfs, soft_errors, "14s8s", SSH_FXP_WRITE, ++pfs->request_id, handle, (size_t)handle_len, total_written + pfs->plreqs * sizeof (buf), buf, (size_t)len); if (0 > ret) { lim_free (0, handle); return -1; } if (len < sizeof (buf)) eof = 1; } if (0 > (i = sftp_server_response (pfs, &pkt, &pkt_len, SSH_FXP_STATUS, soft_errors))) { lim_free (0, handle); return i; } i = sftp_decode_status (pkt, pkt_len, i, soft_errors); lim_free (0, pkt); if (i == -1) { lim_free (0, handle); return -1; } total_written += len; if (! --pfs->plreqs) break; } if (pfs->plreqs) { safe_printfmt (2, "pfs_put_file: Requests still in pipe-line!\n"); exit (2); } ret = sftp_write_pkt (pfs, soft_errors, "14s", SSH_FXP_CLOSE, ++pfs->request_id, handle, (size_t)handle_len); lim_free (0, handle); if (0 > ret) return -1; i = sftp_server_response (pfs, &pkt, &pkt_len, SSH_FXP_STATUS, soft_errors); if (i >= 0) { lim_free (0, pkt); i = 0; } else i = -1; return i; } static int pfs_mkdir (struct arch_pfs_session * p, const t_uchar * path, mode_t mode, int soft_errors) { struct arch_pfs_sftp_session * pfs = (struct arch_pfs_sftp_session *)p; struct sftp_attrs attrs; t_uchar * dir = 0; int answer = 0; int ret, i; unsigned int pkt_len; char *pkt; attrs.flags = SSH_FILEXFER_ATTR_PERMISSIONS; attrs.perms = mode; dir = sftp_abs_path (pfs->cwd, path); if (pfs_file_exists (p, dir)) { lim_free (0, dir); if (soft_errors) { return -1; } else { safe_printfmt(2, "Error creating directory %s in path %s: File exists\n", path, pfs->cwd); exit(2); } } ret = sftp_write_pkt (pfs, soft_errors, "14sa", SSH_FXP_MKDIR, ++pfs->request_id, dir, str_length (dir), &attrs); if (0 > ret) { lim_free (0, dir); return -1; } lim_free (0, dir); if (0 > (i = sftp_server_response (pfs, &pkt, &pkt_len, SSH_FXP_STATUS, soft_errors))) return -1; if (0 > sftp_decode_status (pkt, pkt_len, i, 1)) { if (soft_errors) { return -1; } else { safe_printfmt(2, "Error creating directory %s in path %s\n", path, pfs->cwd); safe_printfmt(2, "Server: "); sftp_decode_status(pkt, pkt_len, i, 0); } } lim_free (0, pkt); return answer; } static int pfs_file_exists (struct arch_pfs_session * p, const t_uchar * path) { struct arch_pfs_sftp_session * pfs = (struct arch_pfs_sftp_session *)p; struct sftp_attrs attrs; t_uchar * path_dir = 0; char *pkt; unsigned int pkt_len; int i; path_dir = sftp_abs_path(pfs->cwd, path); if (0 > sftp_write_pkt(pfs, 1, "14s", SSH_FXP_STAT, ++pfs->request_id, path_dir, str_length (path_dir))) return 0; lim_free (0, path_dir); if (0 > (i = sftp_server_response (pfs, &pkt, &pkt_len, SSH_FXP_ATTRS, 1))) return 0; if (0 > (i = sftp_import_attrs (&attrs, pkt + i, pkt_len - i, 1))) return 0; lim_free (0, pkt); return 1; } static int pfs_is_dir (struct arch_pfs_session * p, const t_uchar * path) { struct arch_pfs_sftp_session * pfs = (struct arch_pfs_sftp_session *)p; int ret, i; unsigned int pkt_len; char *pkt, *dir; struct sftp_attrs attrs; dir = sftp_abs_path (pfs->cwd, path); if (0 > sftp_write_pkt (pfs, 1, "14s", SSH_FXP_STAT, ++pfs->request_id, dir, str_length (dir))) { lim_free (0, dir); return -1; } lim_free (0, dir); if (0 > (i = sftp_server_response (pfs, &pkt, &pkt_len, SSH_FXP_ATTRS, 1))) return -1; if (0 > (i = sftp_import_attrs (&attrs, pkt + i, pkt_len - i, 1))) { lim_free (0, pkt); return -1; } ret = 0; if (attrs.flags & SSH_FILEXFER_ATTR_PERMISSIONS && attrs.perms & S_IFDIR) ret = 1; lim_free (0, pkt); return ret; } static int pfs_rename (struct arch_pfs_session * p, t_uchar ** errstr, const t_uchar * from, const t_uchar * to, int soft_errors) { struct arch_pfs_sftp_session * pfs = (struct arch_pfs_sftp_session *)p; int ret, i; unsigned int pkt_len; char *pkt, *from2, *to2, *file, *b; from2 = sftp_abs_path (pfs->cwd, from); to2 = sftp_abs_path (pfs->cwd, to); if (0 < pfs_is_dir (p, to2)) { b = file = str_save (0, from); filename: file = str_chr_rindex (file, '/'); if (!file) file = b; else if (!file[1]) { file[0] = 0; goto filename; } else file++; to2 = str_realloc_cat_many (0, to2, "/", file, str_end); lim_free (0, b); } ret = sftp_write_pkt (pfs, soft_errors, "14ss", SSH_FXP_RENAME, ++pfs->request_id, from2, str_length (from2), to2, str_length (to2)); lim_free (0, from2); lim_free (0, to2); if (0 > ret) return -1; if (0 > (i = sftp_server_response (pfs, &pkt, &pkt_len, SSH_FXP_STATUS, soft_errors))) return -1; if (0 > (i = sftp_decode_status (pkt, pkt_len, i, soft_errors))) { lim_free (0, pkt); return -1; } lim_free (0, pkt); return i; } static int pfs_rmdir (struct arch_pfs_session * p, const t_uchar * path, int soft_errors) { struct arch_pfs_sftp_session * pfs = (struct arch_pfs_sftp_session *)p; int ret, i; unsigned int pkt_len; char *pkt, *dir; dir = sftp_abs_path (pfs->cwd, path); ret = sftp_write_pkt (pfs, soft_errors, "14s", SSH_FXP_RMDIR, ++pfs->request_id, dir, str_length (dir)); lim_free (0, dir); if (0 > ret) return -1; if (0 > (i = sftp_server_response (pfs, &pkt, &pkt_len, SSH_FXP_STATUS, soft_errors))) return -1; if (0 > sftp_decode_status (pkt, pkt_len, i, 1)) { if (soft_errors) { return -1; } else { safe_printfmt(2, "Error creating directory %s in path %s\n", path, pfs->cwd); safe_printfmt(2, "Server: "); sftp_decode_status(pkt, pkt_len, i, 0); } } lim_free (0, pkt); return i; } static int pfs_rm (struct arch_pfs_session * p, const t_uchar * path, int soft_errors) { struct arch_pfs_sftp_session * pfs = (struct arch_pfs_sftp_session *)p; int ret, i; unsigned int pkt_len; char *pkt, *file; file = sftp_abs_path (pfs->cwd, path); ret = sftp_write_pkt (pfs, soft_errors, "14s", SSH_FXP_REMOVE, ++pfs->request_id, file, str_length (file)); lim_free (0, file); if (0 > ret) return -1; if (0 > (i = sftp_server_response (pfs, &pkt, &pkt_len, SSH_FXP_STATUS, soft_errors))) return -1; i = sftp_decode_status (pkt, pkt_len, i, soft_errors); lim_free (0, pkt); return i; } static t_uchar * dirfold (t_uchar *dir) { t_uchar * buf; t_uchar * this; t_uchar * next; int dir_i = 0; this = next = buf = str_save (0, dir); while ((this = str_separate (&next, "/")) != NULL) { if (str_length (this) == 0 || (str_length (this) == 1 && this[0] == '.')) continue; else if (str_length (this) == 2 && *this == '.' && this[1] == '.') { if (dir_i > 0) dir_i = (int)((char *)strrchr (dir, '/') - (char *)dir); dir[dir_i] = 0; } else { dir[dir_i++] = '/'; strcpy (dir + dir_i, this); dir_i += str_length (this); } } lim_free (0, buf); if (!str_length (dir)) str_cpy (dir, "/"); return dir; } int arch_pfs_sftp_parse_uri (t_uchar ** user, t_uchar ** hostname, t_uchar ** port, char ** path, const t_uchar * uri) { const t_uchar * start; const t_uchar * stop; t_uchar * host_part = 0; const t_uchar * at; const t_uchar * h0; const t_uchar * h1; const t_uchar * colon; /* [user@]hostname[:port]/path * ^ ^ ^ ^ ^ * | | | | | * | at?| | stop[*] * | | | 0-byte of host_part * | h0 | * | | * | | * | | * start[*] colon? * host_part h1 * * * start and stop point to one copy of the string * (the original uri which includes the /path). * * host_part points to another copy of the string * (local to this block) which all the other pointers * point into. * * at? and colon? are 0 if @ and : are not present. * * The reason to make host_part is so that str_chr_index * searches are confined to just the host_part. */ start = uri + sizeof ("sftp://") - 1; stop = str_chr_index (start, '/'); if (!stop) return -1; *path = str_save (0, stop); host_part = str_save_n (0, start, stop - start); at = str_chr_index (host_part, '@'); if (at) h0 = at + 1; else h0 = host_part; colon = str_chr_index (h0, ':'); if (colon) h1 = colon; else h1 = h0 + str_length (h0); if (at) *user = str_save_n (0, host_part, at - host_part); if (colon) *port = str_save (0, colon + 1); *hostname = str_save_n (0, h0, h1 - h0); lim_free (0, host_part); return 0; } /* tag: Tom Lord Thu Jun 5 15:23:06 2003 (pfs-sftp.c) */ tla-1.3.5+dfsg/src/tla/libarch/diffs.c0000644000175000017500000001510710457622000016147 0ustar useruser/* diffs.c: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "config-options.h" #include "hackerlab/bugs/panic.h" #include "hackerlab/os/sys/wait.h" #include "hackerlab/os/signal.h" #include "hackerlab/mem/mem.h" #include "hackerlab/char/str.h" #include "hackerlab/arrays/ar.h" #include "hackerlab/vu/safe.h" #include "hackerlab/fs/file-names.h" #include "tla/libarch/exec.h" #include "tla/libarch/inode-sig.h" #include "tla/libarch/diffs.h" int arch_binary_files_differ (const t_uchar * a, const t_uchar * b, const t_uchar * id, assoc_table inode_sig_shortcuts_of_b) { struct stat a_stat; struct stat b_stat; int answer; safe_stat (a, &a_stat); safe_stat (b, &b_stat); answer = arch_file_stats_differ (&a_stat, &b_stat); if (answer == 0) return answer; answer = arch_inode_sigs_differ (&b_stat, id, inode_sig_shortcuts_of_b); if (answer == 0) return answer; return arch_filename_contents_differ (a, b); } int arch_file_stats_differ (struct stat *a_stat, struct stat *b_stat) { if (a_stat->st_size != b_stat->st_size) return 1; if (a_stat->st_ino == b_stat->st_ino && a_stat->st_dev == b_stat->st_dev ) return 0; return -1; } int arch_inode_sigs_differ (struct stat *b_stat, const t_uchar * id, assoc_table inode_sig_shortcuts_of_b) { if (id && inode_sig_shortcuts_of_b) { t_uchar * b_sig = arch_statb_inode_sig (b_stat); const t_uchar * b_goal = assoc_get_str_taking (inode_sig_shortcuts_of_b, rel_make_field_str (id)); int shortcut_applies = !str_cmp (b_sig, b_goal); lim_free (0, b_sig); if (shortcut_applies) return 0; } return -1; } int arch_filename_contents_differ (const t_uchar * a, const t_uchar * b) { int a_fd; int b_fd; int answer; a_fd = safe_open (a, O_RDONLY, 0); b_fd = safe_open (b, O_RDONLY, 0); answer = arch_file_contents_differ (a_fd, b_fd); safe_close (a_fd); safe_close (b_fd); return answer; } int arch_file_contents_differ (int a_fd, int b_fd) { static t_uchar a_buf[65536]; static t_uchar b_buf[sizeof (a_buf)]; long a_amt; long b_amt; int answer = 0; while (1) { a_amt = safe_read_retry (a_fd, a_buf, sizeof (a_buf)); b_amt = safe_read_retry (b_fd, b_buf, sizeof (b_buf)); if ((a_amt != b_amt) || mem_cmp (a_buf, b_buf, a_amt)) { answer = 1; break; } if (!a_amt) break; } return answer; } int arch_invoke_diff (int output_fd, const char * orig_path, const char * orig_loc, const char * mod_path, const char * mod_loc, t_uchar * id, assoc_table inode_sig_shortcuts_of_mod) { if (!arch_binary_files_differ (orig_path, mod_path, id, inode_sig_shortcuts_of_mod)) return 0; return arch_really_invoke_diff (output_fd, orig_path, orig_loc, mod_path, mod_loc, NULL); } int arch_really_invoke_diff (int output_fd, const char * orig_path, const char * orig_loc, const char * mod_path, const char * mod_loc, const char **extraopts) { char * orig_label = 0; char * mod_label = 0; int pid; if (orig_loc) { orig_label = file_name_in_vicinity (0, "orig", orig_loc + 2); } if (mod_loc) { mod_label = file_name_in_vicinity (0, "mod", mod_loc + 2); } safe_flush (output_fd); pid = fork (); if (pid == -1) panic ("unable to fork for diff"); if (pid) { int status; int wait_pid; wait_pid = waitpid (pid, &status, 0); if (wait_pid < 0) { panic_msg ("error waiting for subprocess"); kill (0, SIGKILL); panic ("error waiting for subprocess"); } if (WIFSIGNALED (status)) { safe_printfmt (2, "\n"); safe_printfmt (2, "diff subprocess killed by signal %d\n", WTERMSIG (status)); safe_printfmt (2, "\n"); exit (2); } else if (!WIFEXITED (status)) { panic_msg ("waitpid returned for a non-exited process"); kill (0, SIGKILL); panic ("waitpid returned for a non-exited process"); } else { int exit_status; exit_status = WEXITSTATUS (status); if (exit_status && (exit_status != 1) && (exit_status != 2)) { safe_printfmt (2, "\n"); safe_printfmt (2, "encountered error diffing files\n"); safe_printfmt (2, " orig: %s\n", orig_path); safe_printfmt (2, " mod: %s\n", mod_path); safe_printfmt (2, " diff exit status: %d\n", exit_status); safe_printfmt (2, "\n"); exit (2); } if (orig_label) { lim_free (0, orig_label); } if (mod_label) { lim_free (0, mod_label); } return exit_status; } } else { int errn; t_uchar ** argv = 0; if (0 > vu_move_fd (&errn, output_fd, 1)) panic ("unable to redirect stdout for diff"); /* `const' discarded before `exec' */ *(t_uchar **)ar_push ((void **)&argv, 0, sizeof (t_uchar *)) = cfg__gnu_diff; *(t_uchar **)ar_push ((void **)&argv, 0, sizeof (t_uchar *)) = "--binary"; *(t_uchar **)ar_push ((void **)&argv, 0, sizeof (t_uchar *)) = "-u"; *(t_uchar **)ar_push ((void **)&argv, 0, sizeof (t_uchar *)) = "-L"; *(t_uchar **)ar_push ((void **)&argv, 0, sizeof (t_uchar *)) = orig_label ? (char *)orig_label : (char *)orig_path; *(t_uchar **)ar_push ((void **)&argv, 0, sizeof (t_uchar *)) = "-L"; *(t_uchar **)ar_push ((void **)&argv, 0, sizeof (t_uchar *)) = mod_label ? (char *)mod_label : (char *)mod_path; *(t_uchar **)ar_push ((void **)&argv, 0, sizeof (t_uchar *)) = (char *)orig_path; *(t_uchar **)ar_push ((void **)&argv, 0, sizeof (t_uchar *)) = (char *)mod_path; if (extraopts != NULL) { t_uchar ** opt; for (opt = extraopts; *opt != NULL; ++opt) { *(t_uchar **) ar_push ((void*) &argv, 0, sizeof(t_uchar*)) = *opt; } } *(t_uchar **)ar_push ((void **)&argv, 0, sizeof (t_uchar *)) = 0; arch_util_execvp (cfg__gnu_diff, argv); panic ("execvp for diff returned to caller"); exit (2); } panic ("arch_invoke_diff: not reached"); return 1; } /* tag: Tom Lord Mon May 19 18:00:23 2003 (diffs.c) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-tree-root.h0000644000175000017500000000125110457622000017535 0ustar useruser/* cmd-tree-root.h: * **************************************************************** * Copyright (C) 2003 Tom Lord, Stig Brautaset * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__CMD_TREE_ROOT_H #define INCLUDE__LIBARCH__CMD_TREE_ROOT_H #include "hackerlab/machine/types.h" extern t_uchar arch_cmd_tree_root_help[]; /* automatically generated __STDC__ prototypes */ extern int arch_cmd_tree_root (t_uchar * program_name, int argc, char * argv[]); #endif /* INCLUDE__LIBARCH__CMD_TREE_ROOT_H */ /* tag: Stig Brautaset Sat Jun 7 17:37:01 BST 2003 (cmd-tree-root.h) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-library-revisions.c0000644000175000017500000001601310457622000021275 0ustar useruser/* cmd-library-revisions.c * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "config-options.h" #include "hackerlab/cmd/main.h" #include "tla/libarch/patch-logs.h" #include "tla/libarch/namespace.h" #include "tla/libarch/project-tree.h" #include "tla/libarch/my.h" #include "tla/libarch/libraries.h" #include "tla/libarch/cmd-library-revisions.h" static t_uchar * usage = "[options] [version]"; static t_uchar * version_string = (cfg__std__package " from regexps.com\n" "\n" "Copyright 2003 Tom Lord\n" "\n" "This is free software; see the source for copying conditions.\n" "There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\n" "PARTICULAR PURPOSE.\n" "\n" "Report bugs to " cfg__tla_bug_mail ".\n" "\n" cfg__std__release_id_string "\n"); #define OPTS(OP) \ OP (opt_help_msg, "h", "help", 0, \ "Display a help message and exit.") \ OP (opt_long_help, "H", 0, 0, \ "Display a verbose help message and exit.") \ OP (opt_version, "V", "version", 0, \ "Display a release identifier string\n" \ "and exit.") \ OP (opt_archive, "A", "archive", 1, \ "Override `my-default-archive'") \ OP (opt_reverse, "r", "reverse", 0, \ "sort from newest to oldest") \ OP (opt_full, "f", "full", 0, \ "list fully qualified names") \ OP (opt_summary, "s", "summary", 0, \ "print a summary of each patch") \ OP (opt_creator, "c", "creator", 0, \ "print the creator of each patch") \ OP (opt_date, "D", "date", 0, \ "print the date of each patch") t_uchar arch_cmd_library_revisions_help[] = ("list the revisions in a library version\n" "List all revisions within a particular archive/version with\n" "records in the revision library.\n"); enum options { OPTS (OPT_ENUM) }; static struct opt_desc opts[] = { OPTS (OPT_DESC) {-1, 0, 0, 0, 0} }; int arch_cmd_library_revisions (t_uchar * program_name, int argc, char * argv[]) { int o; struct opt_parsed * option; t_uchar * default_archive; int reverse; int full; int summary; int creator; int date; int any_headers; default_archive = 0; reverse = 0; full = 0; summary = 0; creator = 0; date = 0; any_headers = 0; safe_buffer_fd (1, 0, O_WRONLY, 0); option = 0; while (1) { o = opt_standard (lim_use_must_malloc, &option, opts, &argc, argv, program_name, usage, version_string, arch_cmd_library_revisions_help, opt_help_msg, opt_long_help, opt_version); if (o == opt_none) break; switch (o) { default: safe_printfmt (2, "unhandled option `%s'\n", option->opt_string); panic ("internal error parsing arguments"); usage_error: opt_usage (2, argv[0], program_name, usage, 1); exit (1); /* bogus_arg: */ safe_printfmt (2, "ill-formed argument for `%s' (`%s')\n", option->opt_string, option->arg_string); goto usage_error; case opt_archive: { default_archive = str_save (0, option->arg_string); break; } case opt_reverse: { reverse = 1; break; } case opt_full: { full = 1; break; } case opt_summary: { summary = 1; any_headers = 1; break; } case opt_date: { date = 1; any_headers = 1; break; } case opt_creator: { creator = 1; any_headers = 1; break; } } } if (argc > 2) goto usage_error; default_archive = arch_my_default_archive (default_archive); { t_uchar * version_spec = 0; t_uchar * archive = 0; t_uchar * version = 0; rel_table revisions = rel_table_nil; if (argc == 2) version_spec = str_save (0, argv[1]); else version_spec = arch_try_tree_version (program_name); if (!arch_valid_package_name (version_spec, arch_maybe_archive, arch_req_version, 0)) { safe_printfmt (2, "%s: invalid version name (%s)\n", argv[0], version_spec); exit (2); } archive = arch_parse_package_name (arch_ret_archive, default_archive, version_spec); version = arch_parse_package_name (arch_ret_package_version, 0, version_spec); revisions = arch_library_revisions (archive, version, full); if (reverse) { if (full) arch_sort_table_by_name_field (1, revisions, 0); else arch_sort_table_by_patch_level_field (1, revisions, 0); } if (!any_headers) rel_print_table (1, revisions); else { int x; for (x = 0; x < rel_n_records (revisions); ++x) { t_uchar * package_patch_level = 0; t_uchar * log; assoc_table headers = 0; t_uchar * body = 0; if (full) package_patch_level = arch_parse_package_name (arch_ret_non_archive, 0, rel_peek_str (revisions, x, 0)); else package_patch_level = str_alloc_cat_many (0, version, "--", rel_peek_str (revisions, x, 0), str_end); log = arch_library_log (archive, package_patch_level); arch_parse_log (0, &headers, (const t_uchar **)&body, log); safe_printfmt (1, "%s\n", rel_peek_str (revisions, x, 0)); if (date) { const t_uchar * d; d = assoc_get_str_taking (headers, rel_make_field_str ("standard-date")); safe_printfmt (1, " %s\n", (d ? d : (t_uchar *)"")); } if (creator) { const t_uchar * c; c = assoc_get_str_taking (headers, rel_make_field_str ("creator")); safe_printfmt (1, " %s\n", (c ? c : (t_uchar *)"")); } if (summary) { const t_uchar * s; s = assoc_get_str_taking (headers, rel_make_field_str ("summary")); safe_printfmt (1, " %s\n", (s ? s : (t_uchar *)"")); } lim_free (0, package_patch_level); free_assoc_table (headers); lim_free (0, body); } } lim_free (0, version_spec); } return 0; } /* tag: Tom Lord Wed May 21 14:54:14 2003 (library-revisions.c) */ tla-1.3.5+dfsg/src/tla/libarch/archive-mirror.c0000644000175000017500000003401310457622000020002 0ustar useruser/* archive-mirror.c: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/os/errno.h" #include "hackerlab/os/errno-to-string.h" #include "hackerlab/char/str.h" #include "hackerlab/fs/file-names.h" #include "hackerlab/vu/safe.h" #include "tla/libfsutils/ensure-dir.h" #include "tla/libfsutils/tmp-files.h" #include "tla/libawk/relational.h" #include "tla/libawk/associative.h" #include "tla/libarch/my.h" #include "tla/libarch/chatter.h" #include "tla/libarch/archive.h" #include "tla/libarch/namespace.h" #include "tla/libarch/archive-mirror.h" #include "tla/libarch/archive-setup.h" #include "tla/libarch/patch-logs.h" /* __STDC__ prototypes for static functions */ static void mirror_revision (struct arch_archive * arch, struct arch_archive * to_arch, const t_uchar * revision, const t_uchar * prev_level, struct arch_archive_mirror_options * archive_mirror_opts); static int list_contains (rel_table list, const t_uchar * elt); void arch_archive_mirror (int chatter_fd, struct arch_archive * arch, struct arch_archive * to_arch, t_uchar * limit, struct arch_archive_mirror_options * archive_mirror_opts) { t_uchar * only_category = 0; t_uchar * only_branch = 0; t_uchar * only_version = 0; t_uchar * only_revision = 0; rel_table categories = rel_table_nil; rel_table to_categories = rel_table_nil; rel_table missing_categories = rel_table_nil; int c; arch_chatter (chatter_fd, "* mirroring %s to %s with limit %s\n", arch->name, to_arch->name, limit); if (limit) { only_category = arch_parse_package_name (arch_ret_category, 0, limit); if (arch_valid_package_name (limit, arch_no_archive, arch_req_package, 1)) { only_branch = arch_parse_package_name (arch_ret_package, 0, limit); if (!str_cmp (only_branch, only_category)) { lim_free (0, only_branch); only_branch = 0; } else if (arch_valid_package_name (limit, arch_no_archive, arch_req_version, 1)) { only_version = arch_parse_package_name (arch_ret_package_version, 0, limit); if (arch_valid_package_name (limit, arch_no_archive, arch_req_patch_level, 1)) { only_revision = arch_parse_package_name (arch_ret_non_archive, 0, limit); } } } } categories = arch_archive_categories (arch); to_categories = arch_archive_categories (to_arch); missing_categories = rel_join (1, rel_join_output (1,0, -1), 0, 0, categories, to_categories); for (c = 0; c < rel_n_records (categories); ++c) { rel_table branches = rel_table_nil; rel_table to_branches = rel_table_nil; rel_table missing_branches = rel_table_nil; int b; if (only_category && str_cmp (only_category, rel_peek_str (categories, c, 0))) continue; branches = arch_archive_branches (arch, rel_peek_str (categories, c, 0)); to_branches = arch_archive_branches (to_arch, rel_peek_str (categories, c, 0)); missing_branches = rel_join (1, rel_join_output (1,0, -1), 0, 0, branches, to_branches); for (b = 0; b < rel_n_records (branches); ++b) { rel_table versions = rel_table_nil; rel_table to_versions = rel_table_nil; rel_table missing_versions = rel_table_nil; int v; if (only_branch && str_cmp (only_branch, rel_peek_str (branches, b, 0))) continue; versions = arch_archive_versions (arch, rel_peek_str (branches, b, 0)); to_versions = arch_archive_versions (to_arch, rel_peek_str (branches, b, 0)); missing_versions = rel_join (1, rel_join_output (1,0, -1), 0, 0, versions, to_versions); for (v = 0; v < rel_n_records (versions); ++v) { rel_table revisions = rel_table_nil; rel_table to_revisions = rel_table_nil; rel_table missing_revisions = rel_table_nil; int r; if (only_version && str_cmp (only_version, rel_peek_str (versions, v, 0))) continue; if (list_contains (missing_versions, rel_peek_str (versions, v, 0))) { arch_setup_archive_simple_ext (chatter_fd, to_arch, rel_peek_str (versions, v, 0)); } revisions = arch_archive_revisions (arch, rel_peek_str (versions, v, 0), 2); to_revisions = arch_archive_revisions (to_arch, rel_peek_str (versions, v, 0), 2); missing_revisions = rel_join (1, rel_join_output (1,0, -1), 0, 0, revisions, to_revisions); for (r = 0; r < rel_n_records (revisions); ++r) { const t_uchar * revision = 0; revision = rel_peek_str (revisions, r, 0); if (only_revision && str_cmp (only_revision, revision)) continue; if (list_contains (missing_revisions, revision)) { t_uchar * prev_level = 0; if (r) { prev_level = arch_parse_package_name (arch_ret_patch_level, 0, rel_peek_str (revisions, r - 1, 0)); } arch_chatter (chatter_fd, "** adding revision %s\n", revision); mirror_revision (arch, to_arch, revision, prev_level, archive_mirror_opts); lim_free (0, prev_level); } else if (only_revision && !str_cmp (only_revision, revision)) { enum arch_revision_type type; int is_cached; t_uchar * continuation = 0; t_uchar * continuation_archive = 0; arch_chatter (chatter_fd, "** adding revision %s\n", revision); arch_revision_type (&type, &is_cached, arch, revision); if (type == arch_continuation_revision) { continuation = arch_get_continuation (arch, revision); continuation_archive = arch_parse_package_name (arch_ret_archive, 0, continuation); } mirror_cached_revision (is_cached, archive_mirror_opts, type, arch, to_arch, revision, continuation_archive); lim_free (0, continuation); lim_free (0, continuation_archive); } } rel_free_table (revisions); rel_free_table (to_revisions); rel_free_table (missing_revisions); } rel_free_table (versions); rel_free_table (to_versions); rel_free_table (missing_versions); } rel_free_table (branches); rel_free_table (to_branches); rel_free_table (missing_branches); } lim_free (0, only_category); lim_free (0, only_branch); lim_free (0, only_version); lim_free (0, only_revision); rel_free_table (categories); rel_free_table (to_categories); rel_free_table (missing_categories); } static void mirror_revision (struct arch_archive * arch, struct arch_archive * to_arch, const t_uchar * revision, const t_uchar * prev_level, struct arch_archive_mirror_options * archive_mirror_opts) { t_uchar * version = 0; t_uchar * this_level = 0; t_uchar * errstr = 0; enum arch_revision_type type; int is_cached; t_uchar * my_uid = 0; t_uchar * txn_id = 0; t_uchar * log = 0; t_uchar * continuation_archive = 0; version = arch_parse_package_name (arch_ret_package_version, 0, revision); this_level = arch_parse_package_name (arch_ret_patch_level, 0, revision); arch_revision_type (&type, &is_cached, arch, revision); my_uid = arch_my_id_uid (); txn_id = arch_generate_txn_id (); if (arch_archive_lock_revision (&errstr, to_arch, version, prev_level, my_uid, txn_id, this_level)) { safe_printfmt (2, "arch-mirror: unable to acquire revision lock (%s)\n revision: %s/%s\n", errstr, to_arch->name, revision); exit (2); } log = arch_archive_log (arch, revision); if (arch_archive_put_log (&errstr, to_arch, version, prev_level, my_uid, txn_id, log)) { safe_printfmt (2, "arch-mirror: unable to send log message to archive (%s)\n revision: %s/%s\n", errstr, to_arch->name, version); exit (2); } if (type == arch_import_revision) { t_uchar * tmp_path = 0; int fd; tmp_path = tmp_file_name ("/tmp", ",,arch-mirror-changeset"); fd = safe_open (tmp_path, O_RDWR | O_CREAT | O_EXCL, 0000); safe_unlink (tmp_path); arch_get_import_targz (fd, arch, revision); safe_lseek (fd, (off_t)0, SEEK_SET); if (arch_archive_put_import_targz (&errstr, to_arch, version, prev_level, my_uid, txn_id, this_level, fd)) { safe_printfmt (2, "arch-mirror: unable to send import tree to archive (%s)\n revision: %s/%s\n", errstr, arch->name, version); exit (2); } safe_close (fd); lim_free (0, tmp_path); } else { t_uchar * tmp_path = 0; int fd; tmp_path = tmp_file_name ("/tmp", ",,arch-mirror-full-text"); fd = safe_open (tmp_path, O_RDWR | O_CREAT | O_EXCL, 0000); safe_unlink (tmp_path); arch_get_patch_targz (fd, arch, revision); safe_lseek (fd, (off_t)0, SEEK_SET); if (arch_archive_put_changeset_targz (&errstr, to_arch, version, prev_level, my_uid, txn_id, this_level, fd)) { safe_printfmt (2, "arch-mirror: unable to send changeset to archive (%s)\n revision: %s/%s\n", errstr, arch->name, version); exit (2); } safe_close (fd); lim_free (0, tmp_path); } if (type == arch_continuation_revision) { t_uchar * continuation = 0; continuation = arch_get_continuation (arch, revision); continuation_archive = arch_parse_package_name (arch_ret_archive, 0, continuation); if (arch_archive_put_continuation (&errstr, to_arch, version, prev_level, my_uid, txn_id, continuation)) { safe_printfmt (2, "arch-mirror: unable to send tagged revision id to archive (%s)\n revision: %s/%s\n", errstr, to_arch->name, revision); exit (2); } lim_free (0, continuation); } if (arch_revision_ready (&errstr, to_arch, version, prev_level, my_uid, txn_id, this_level)) { safe_printfmt (2, "arch-mirror: unable to complete phase-1 commit transaction (%s)\n revision: %s/%s\n", errstr, to_arch->name, version); exit (2); } if (arch_archive_finish_revision (&errstr, to_arch, version, prev_level, my_uid, txn_id, this_level)) { safe_printfmt (2, "arch-mirror: unable to complete commit transaction (%s)\n revision: %s/%s\n", errstr, to_arch->name, version); exit (2); } if (archive_mirror_opts->print_summary) { t_uchar * log = arch_archive_log (to_arch, revision); assoc_table headers = 0; t_uchar * body = 0; arch_parse_log (0, &headers, (const t_uchar **)&body, log); arch_print_headers_summary (1, 4, headers, arch_include_summary); lim_free (0, log); free_assoc_table (headers); lim_free (0, body); } mirror_cached_revision (is_cached, archive_mirror_opts, type, arch, to_arch, revision, continuation_archive); lim_free (0, version); lim_free (0, my_uid); lim_free (0, txn_id); lim_free (0, log); lim_free (0, continuation_archive); } void mirror_cached_revision (int is_cached, struct arch_archive_mirror_options * archive_mirror_opts, enum arch_revision_type type, struct arch_archive * arch, struct arch_archive * to_arch, const t_uchar * revision, const t_uchar * continuation_archive) { t_uchar * version = 0; version = arch_parse_package_name (arch_ret_package_version, 0, revision); if (is_cached && ((archive_mirror_opts->cachedrevs == arch_mirror_all_cachedrevs) || ((archive_mirror_opts->cachedrevs == arch_mirror_foreign_continuation_cachedrevs) && (type == arch_continuation_revision) && (str_cmp (arch->official_name, continuation_archive))))) { t_uchar * errstr = 0; t_uchar * tmp_path = 0; int fd; tmp_path = tmp_file_name ("/tmp", ",,arch-mirror-archive-cached"); fd = safe_open (tmp_path, O_RDWR | O_CREAT | O_EXCL, 0000); safe_unlink (tmp_path); arch_get_cached_revision_targz (fd, arch, revision); safe_lseek (fd, (off_t)0, SEEK_SET); if (arch_archive_put_cached_targz (&errstr, to_arch, revision, fd)) { safe_printfmt (2, "arch-mirror: unable to send cached revision to archive (%s)\n revision: %s/%s\n", errstr, arch->name, version); exit (2); } safe_close (fd); lim_free (0, tmp_path); } else { t_uchar * errstr = 0; if (arch_archive_delete_cached (&errstr, to_arch, revision)) { safe_printfmt (2, "%s: unable to delete cached revision of %s (%s)\n", to_arch->name, revision, errstr); exit (1); } } lim_free (0, version); } static int list_contains (rel_table list, const t_uchar * elt) { int x; for (x = 0; x < rel_n_records (list); ++x) { if (!str_cmp (elt, rel_peek_str (list, x, 0))) return 1; } return 0; } /* tag: Tom Lord Mon Jun 9 23:29:24 2003 (archive-mirror.c) */ tla-1.3.5+dfsg/src/tla/libarch/missing.c0000644000175000017500000001104110457622000016516 0ustar useruser/* missing.c: * **************************************************************** * Copyright (C) 2003 Tom Lord * Portions (C) 2003 Robert Collins * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/bugs/panic.h" #include "hackerlab/char/str.h" #include "tla/libarch/namespace.h" #include "tla/libarch/patch-logs.h" #include "tla/libarch/missing.h" /* __STDC__ prototypes for static functions */ static int is_a_patch_present (rel_table has, t_uchar *log); static rel_table get_all_arch_logs (t_uchar *tree_root, struct arch_archive * arch); rel_table arch_missing (t_uchar * tree_root, struct arch_archive * arch, t_uchar * version, int skip_present) { rel_table has = rel_table_nil; rel_table needs = rel_table_nil; rel_table answer = rel_table_nil; invariant (arch_valid_package_name (version, arch_no_archive, arch_req_version, 0)); has = arch_logs (tree_root, arch->name, version, 0); needs = arch_archive_revisions (arch, version, 0); rel_sort_table_by_field (0, has, 0); rel_sort_table_by_field (0, needs, 0); answer = rel_join (2, rel_join_output (2,0, -1), 0, 0, has, needs); arch_sort_table_by_patch_level_field (0, answer, 0); if (skip_present) answer = arch_filter_present_logs (tree_root, arch, version, answer); rel_free_table (has); rel_free_table (needs); return answer; } int arch_revision_has_present_patch (t_uchar * tree_root, struct arch_archive * arch, t_uchar * revision) { int answer = 0; rel_table has = rel_table_nil; t_uchar * log = 0; has = get_all_arch_logs (tree_root, arch); log = arch_archive_log (arch, revision); answer = is_a_patch_present (has, log); rel_free_table (has); return answer; } static int is_a_patch_present (rel_table has, t_uchar *log) { assoc_table headers = 0; const t_uchar * new_patches_header; rel_table new_patches = rel_table_nil; rel_table result = rel_table_nil; int found = 0; arch_parse_log (0, &headers, 0, log); new_patches_header = assoc_get_str_taking (headers, rel_make_field_str ("new-patches")); new_patches = rel_ws_split (new_patches_header); rel_sort_table_by_field (0, new_patches, 0); rel_uniq_by_field (&new_patches, 0); result = rel_join (-1, rel_join_output(1,0,2,0,-1), 0, 0, has, new_patches); if (rel_n_records (result) > 0) found = 1; free_assoc_table (headers); rel_free_table (new_patches); rel_free_table (result); return found; } static rel_table get_all_arch_logs (t_uchar *tree_root, struct arch_archive * arch) { rel_table versions = rel_table_nil; rel_table result = rel_table_nil; int x; versions = arch_log_versions (tree_root,0,0,0,0); for (x = 0; x < rel_n_records (versions); ++x) { rel_table version_logs = rel_table_nil; t_uchar * archive; t_uchar * revision; archive = arch_parse_package_name (arch_ret_archive, 0 , rel_peek_str (versions, x, 0)); revision = arch_parse_package_name (arch_ret_non_archive, 0, rel_peek_str (versions, x, 0)); version_logs = arch_logs (tree_root, archive, revision, 1); rel_append_x (&result, version_logs); lim_free (0, revision); lim_free (0, archive); rel_free_table (version_logs); } rel_free_table (versions); rel_sort_table_by_field (0, result, 0); return result; } rel_table arch_filter_present_logs (t_uchar * tree_root, struct arch_archive * arch, t_uchar * version, rel_table unfiltered) { rel_table has = rel_table_nil; rel_table to_skip = rel_table_nil; rel_table answer = rel_table_nil; int x; if (rel_n_records (unfiltered) < 1) return unfiltered; has = get_all_arch_logs (tree_root,arch); for (x = 0; x < rel_n_records (unfiltered); ++x) { t_uchar * revision = str_alloc_cat_many (0, version, "--", rel_peek_str (unfiltered, x, 0), str_end); t_uchar * log = 0; log = arch_archive_log (arch, revision); if (is_a_patch_present(has, log)) rel_add_records (&to_skip, rel_copy_record (rel_peek_record (unfiltered, x)), rel_record_null); lim_free (0, revision); } rel_free_table (has); rel_sort_table_by_field (0, to_skip, 0); rel_sort_table_by_field (0, unfiltered, 0); answer = rel_join (1, rel_join_output (1,0, -1), 0, 0, unfiltered, to_skip); arch_sort_table_by_patch_level_field (0, answer, 0); rel_free_table (unfiltered); rel_free_table (to_skip); return answer; } /* tag: Tom Lord Sat May 24 23:01:13 2003 (whats-missing.c) */ tla-1.3.5+dfsg/src/tla/libarch/patch-logs.h0000644000175000017500000001261610457622000017124 0ustar useruser/* patch-logs.h: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__PATCH_LOGS_H #define INCLUDE__LIBARCH__PATCH_LOGS_H #include "tla/libawk/relational.h" #include "tla/libawk/associative.h" enum arch_log_headers_summary { arch_include_date = 1, arch_include_creator = 2, arch_include_summary = 4, arch_include_foreign_merges = 8, arch_include_local_merges = 16, }; /* automatically generated __STDC__ prototypes */ extern t_uchar * arch_make_log_file (const t_uchar * tree_root, const t_uchar * archive, const t_uchar * version); extern t_uchar * arch_make_log (const t_uchar * tree_root, const t_uchar * archive, const t_uchar * version); extern t_uchar * arch_auto_log_message (const t_uchar * tree_root, const t_uchar * archive, const t_uchar * version, const t_uchar * summary, const t_uchar * body); extern t_uchar * arch_log_for_merge (const t_uchar * tree_root, const t_uchar * archive, const t_uchar * version, int reverse); extern t_uchar * arch_log_dir (const t_uchar * tree_root, const t_uchar * archive, const t_uchar * version); extern t_uchar * arch_log_file (const t_uchar * tree_root, const t_uchar * archive, const t_uchar * revision); extern t_uchar * arch_log_contents (const t_uchar * tree_root, const t_uchar * archive, const t_uchar * revision); extern int arch_tree_has_log (const t_uchar * tree_root, const t_uchar * archive, const t_uchar * revision); extern void arch_add_log_version (const t_uchar * tree_root, const t_uchar * archive, const t_uchar * version); extern void arch_remove_log_version (const t_uchar * tree_root, const t_uchar * archive, const t_uchar * version); extern int arch_has_patch_log (const t_uchar * tree_root, const t_uchar * archive, const t_uchar * version); extern rel_table arch_log_versions (const t_uchar * tree_root, const t_uchar * only_archive, const t_uchar * only_category_param, const t_uchar * only_branch_param, const t_uchar * only_version_param); extern t_uchar * arch_highest_patch_level (const t_uchar * tree_root, const t_uchar * archive, const t_uchar * version); extern t_uchar * arch_latest_logged_version (const t_uchar * tree_root, const t_uchar * archive, const t_uchar * package); extern rel_table arch_logs (const t_uchar * tree_root, const t_uchar * archive, const t_uchar * version, int full); extern int arch_valid_log_file (const t_uchar * log); extern void arch_parse_log (rel_table * headers_list, assoc_table * headers, const t_uchar ** body, const t_uchar * log); extern void arch_print_headers_summary (int out_fd, int indent_level, assoc_table headers, int summarized_headers); extern void arch_print_log_list_header (int out_fd, const t_uchar * header, rel_table list, int field); extern void arch_print_log_pairs_header (int out_fd, const t_uchar * header, rel_table list, int field_a, int field_b); extern void arch_copy_to_patch_log (const t_uchar * tree_root, const t_uchar * archive, const t_uchar * revision, const t_uchar * log_file); extern void arch_rename_to_patch_log (const t_uchar * tree_root, const t_uchar * archive, const t_uchar * revision, const t_uchar * log_file); extern rel_table arch_all_logs (const t_uchar * tree_root); extern t_uchar * arch_tree_latest_revision (t_uchar * base_tree_root); #endif /* INCLUDE__LIBARCH__PATCH_LOGS_H */ /* tag: Tom Lord Sat Jan 5 15:26:10 2002 (patch-logs.h) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-archive-version.h0000644000175000017500000000132310457622000020721 0ustar useruser/* cmd-archive-version.h: * **************************************************************** * Copyright (C) 2003 Tom Lord, Stig Brautaset * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__CMD_ARCHIVE_VERSION_H #define INCLUDE__LIBARCH__CMD_ARCHIVE_VERSION_H #include "hackerlab/machine/types.h" extern t_uchar arch_cmd_archive_version_help[]; /* automatically generated __STDC__ prototypes */ extern int arch_cmd_archive_version (t_uchar * program_name, int argc, char * argv[]); #endif /* INCLUDE__LIBARCH__CMD_ARCHIVE_VERSION_H */ /* tag: Stig Brautaset Sat Jun 7 12:49:07 BST 2003 (cmd-archive-version.h) */ tla-1.3.5+dfsg/src/tla/libarch/archive-cache.c0000644000175000017500000000262210457622000017534 0ustar useruser/* archive-cache.c: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/fs/file-names.h" #include "hackerlab/vu/safe.h" #include "tla/libfsutils/tmp-files.h" #include "tla/libfsutils/rmrf.h" #include "tla/libarch/build-revision.h" #include "tla/libarch/archive-cache.h" void arch_archive_cache (int chatter_fd, struct arch_archive * arch, const t_uchar * archive, const t_uchar * revision, const t_uchar * cache_dir) { t_uchar * tmp_dir = 0; t_uchar * pristine_dir = 0; tmp_dir = tmp_file_name (".", ",,archive-cache-revision"); pristine_dir = file_name_in_vicinity (0, tmp_dir, revision); safe_mkdir (tmp_dir, 0777); safe_mkdir (pristine_dir, 0777); arch_build_revision (chatter_fd, pristine_dir, arch, archive, revision, cache_dir); { t_uchar * errstr; if (arch_archive_put_cached (&errstr, arch, revision, pristine_dir)) { safe_printfmt (2, "cacherev: unable to store cached revision of %s/%s (%s)\n", archive, revision, errstr); exit (1); } } rmrf_file (tmp_dir); lim_free (0, tmp_dir); lim_free (0, pristine_dir); } /* tag: Tom Lord Wed Jun 11 14:15:15 2003 (archive-cache.c) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-library-config.h0000644000175000017500000000121210457622000020521 0ustar useruser/* cmd-library-config.h: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__CMD_LIBRARY_CONFIG_H #define INCLUDE__LIBARCH__CMD_LIBRARY_CONFIG_H extern t_uchar arch_cmd_library_config_help[]; /* automatically generated __STDC__ prototypes */ extern int arch_cmd_library_config (t_uchar * program_name, int argc, char * argv[]); #endif /* INCLUDE__LIBARCH__CMD_LIBRARY_CONFIG_H */ /* tag: Tom Lord Fri Dec 5 16:35:19 2003 (cmd-library-config.h) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-add-pristine.h0000644000175000017500000000124410457622000020202 0ustar useruser/* cmd-add-pristine.h: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__CMD_ADD_PRISTINE_H #define INCLUDE__LIBARCH__CMD_ADD_PRISTINE_H #include "hackerlab/machine/types.h" extern t_uchar arch_cmd_add_pristine_help[]; /* automatically generated __STDC__ prototypes */ extern int arch_cmd_add_pristine (t_uchar * program_name, int argc, char * argv[]); #endif /* INCLUDE__LIBARCH__CMD_ADD_PRISTINE_H */ /* tag: Tom Lord Sat Jan 5 15:26:10 2002 (cmd-add-pristine.h) */ tla-1.3.5+dfsg/src/tla/libarch/merge-three-way.c0000644000175000017500000000130010457622000020044 0ustar useruser/* apply-changeset.c: * * vim:smartindent ts=8:sts=2:sta:et:ai:shiftwidth=2 **************************************************************** * Copyright (C) 2004 Aaron Bentley * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/fs/file-names.h" #include "tla/libfsutils/tmp-files.h" #include "tla/libarch/invent.h" #include "tla/libarch/chatter.h" #include "tla/libarch/make-changeset.h" #include "tla/libarch/apply-changeset.h" #include "tla/libarch/inode-sig.h" #include "tla/libarch/project-tree.h" #include "tla/libarch/patch-logs.h" #include "tla/libarch/star-merge.h" #include "tla/libarch/merge-three-way.h" tla-1.3.5+dfsg/src/tla/libarch/cmd-library-find.c0000644000175000017500000001221410457622000020173 0ustar useruser/* cmd-library-find.c * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "config-options.h" #include "hackerlab/cmd/main.h" #include "tla/libarch/my.h" #include "tla/libarch/libraries.h" #include "tla/libarch/namespace.h" #include "tla/libarch/cmd-library-find.h" static t_uchar * usage = "[options] revision"; static t_uchar * version_string = (cfg__std__package " from regexps.com\n" "\n" "Copyright 2003 Tom Lord\n" "\n" "This is free software; see the source for copying conditions.\n" "There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\n" "PARTICULAR PURPOSE.\n" "\n" "Report bugs to " cfg__tla_bug_mail ".\n" "\n" cfg__std__release_id_string "\n"); #define OPTS(OP) \ OP (opt_help_msg, "h", "help", 0, \ "Display a help message and exit.") \ OP (opt_long_help, "H", 0, 0, \ "Display a verbose help message and exit.") \ OP (opt_version, "V", "version", 0, \ "Display a release identifier string\n" \ "and exit.") \ OP (opt_archive, "A", "archive", 1, \ "Override `my-default-archive'") \ OP (opt_errname, "e", "errname", 1, \ "specify program name for errors") \ OP (opt_silent, "s", "silent", 0, \ "suppress reassuring messages") t_uchar arch_cmd_library_find_help[] = ("find and print the location of a revision in the revision library\n" "Find REVISION in your revision library and print its path.\n" "If the revision is not present, print an error message (unless\n" "--silent is specified) and exit with non-0 status.\n"); enum options { OPTS (OPT_ENUM) }; static struct opt_desc opts[] = { OPTS (OPT_DESC) {-1, 0, 0, 0, 0} }; int arch_cmd_library_find (t_uchar * program_name, int argc, char * argv[]) { int o; struct opt_parsed * option; t_uchar * default_archive; char * errname; int silent; default_archive = 0; errname = argv[0]; silent = 0; safe_buffer_fd (1, 0, O_WRONLY, 0); option = 0; while (1) { o = opt_standard (lim_use_must_malloc, &option, opts, &argc, argv, program_name, usage, version_string, arch_cmd_library_find_help, opt_help_msg, opt_long_help, opt_version); if (o == opt_none) break; switch (o) { default: safe_printfmt (2, "unhandled option `%s'\n", option->opt_string); panic ("internal error parsing arguments"); usage_error: opt_usage (2, argv[0], program_name, usage, 1); exit (1); /* bogus_arg: */ safe_printfmt (2, "ill-formed argument for `%s' (`%s')\n", option->opt_string, option->arg_string); goto usage_error; case opt_archive: { default_archive = str_save (0, option->arg_string); break; } case opt_errname: { if (!option->arg_string[0]) errname = 0; else errname = str_save (0, option->arg_string); break; } case opt_silent: { silent = 1; break; } } } if (argc != 2) goto usage_error; if (default_archive && !arch_valid_archive_name (default_archive)) { safe_printfmt (2, "%s: invalid archive name (%s)\n", argv[0], default_archive); exit (1); } { t_uchar * revspec; t_uchar * archive = 0; t_uchar * revision = 0; t_uchar * answer = 0; revspec = argv[1]; if (!arch_valid_package_name (revspec, arch_maybe_archive, arch_req_patch_level, 0)) { safe_printfmt (2, "%s: invalid revision name (%s)\n", (errname ? errname : argv[0]), revspec); exit (2); } archive = arch_parse_package_name (arch_ret_archive, default_archive, revspec); if (!archive) { safe_printfmt (2, "%s: no archive specified for library-find\n", (errname ? errname : argv[0])); exit (2); } revision = arch_parse_package_name (arch_ret_non_archive, 0, revspec); #undef FIXME /* way to ask for particular device or particular library? */ answer = arch_library_find (rel_table_nil, archive, revision, 1); if (answer) safe_printfmt (1, "%s\n", answer); else { if (!silent) { safe_printfmt (2, "%s: revision not present in library (%s/%s)\n", (errname ? errname : argv[0]), archive, revision); } exit (1); } lim_free (0, archive); lim_free (0, revision); lim_free (0, answer); } return 0; } /* tag: Tom Lord Wed May 21 14:05:20 2003 (library-find.c) */ tla-1.3.5+dfsg/src/tla/libarch/archive.c0000644000175000017500000012672710457622000016510 0ustar useruser/* archive.c: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "config-options.h" #include "hackerlab/bugs/panic.h" #include "hackerlab/os/errno.h" #include "hackerlab/os/errno-to-string.h" #include "hackerlab/os/sys/types.h" #include "hackerlab/os/sys/wait.h" #include "hackerlab/os/signal.h" #include "hackerlab/os/time.h" #include "hackerlab/os/unistd.h" #include "hackerlab/os/stdlib.h" #include "hackerlab/fmt/cvt.h" #include "hackerlab/mem/alloc-limits.h" #include "hackerlab/mem/mem.h" #include "hackerlab/hash/hash-utils.h" #include "hackerlab/arrays/ar.h" #include "hackerlab/char/str.h" #include "hackerlab/char/char-class.h" #include "hackerlab/vu/safe.h" #include "hackerlab/fs/cwd.h" #include "hackerlab/fs/file-names.h" #include "tla/libfsutils/tmp-files.h" #include "tla/libfsutils/rmrf.h" #include "tla/libarch/namespace.h" #include "tla/libarch/my.h" #include "tla/libarch/exec.h" #include "tla/libarch/archives.h" #include "tla/libarch/archive-version.h" #include "tla/libarch/pfs.h" #include "tla/libarch/archive-pfs.h" #include "tla/libarch/archive.h" /* __STDC__ prototypes for static functions */ static int invoke_tar_extract (int * pid_ret); static int wait_for_tar (int pid); static void ensure_writable (struct arch_archive * arch, int mirror_ok); static struct arch_archive * connected_by_name = 0; void arch_make_archive (const t_uchar * name, const t_uchar * location, const t_uchar * mirror_of, int dot_listing_lossage, int signed_archive, int tla_archive) { t_uchar * current_loc = 0; t_uchar * version; invariant (arch_valid_archive_name (name)); current_loc = arch_archive_location (name, 1); if (current_loc) { safe_printfmt (2, "arch_make_archive: archive already registered\n name: %s\n", name); exit (2); } version = arch_archive_version_for_new_archive (tla_archive); arch_pfs_make_archive (name, location, version, mirror_of, dot_listing_lossage, signed_archive); arch_run_hook ("make-archive", "ARCH_ARCHIVE", name, "ARCH_LOCATION", location, (t_uchar*)0); lim_free (0, version); } struct arch_archive * arch_archive_connect_location (const t_uchar * name, const t_uchar * location, const t_uchar * want_mirror_of) { struct arch_archive * answer = 0; answer = lim_malloc (0, sizeof (*answer)); mem_set0 ((t_uchar *)answer, sizeof (*answer)); answer->name = str_save (0, name); answer->location = str_save (0, location); answer->client_anticipates_mirror = (want_mirror_of ? str_save (0, want_mirror_of) : 0); arch_pfs_archive_connect (&answer); answer->version = answer->vtable->archive_version (answer); answer->access = arch_archive_access (answer->version); answer->type = arch_archive_type (answer->version); if (answer->access == arch_archive_incompatible) { safe_printfmt (2, "arch_archive_connect: attempt to connect to incompatible archive\n archive: %s\n", (name ? name : location)); exit (2); } answer->mirror_of = arch_get_meta_info_trimming (answer, "mirror"); answer->official_name = arch_get_meta_info_trimming (answer, "name"); if (!answer->official_name) { int ign; printfmt (&ign, 2, "Unable to read the official name of archive %s\n Archive damaged?\n", name); exit (2); } lim_free (0, answer->name); answer->name = str_save (0, answer->official_name); answer->http_blows = arch_get_meta_int_info (answer, "http-blows"); answer->signed_archive = arch_get_meta_int_info (answer, "signed-archive"); if (want_mirror_of && str_cmp (want_mirror_of, answer->mirror_of)) { safe_printfmt (2, "arch_archive_connect: attempt to connect to wrong mirror\n archive: %s\n wanted mirror of: %s\n got mirror of: %s\n", (name ? name : location), want_mirror_of, (answer->mirror_of ? answer->mirror_of : (t_uchar *)"(not a mirror)")); exit (2); } return answer; } struct arch_archive * arch_archive_connect (const t_uchar * name, const t_uchar * want_mirror_of) { struct arch_archive * answer = 0; for (answer = connected_by_name; answer && str_cmp (answer->name, name); answer = answer->next) ; if (answer) { if (want_mirror_of && str_cmp (want_mirror_of, answer->mirror_of)) { safe_printfmt (2, "arch_archive_connect: attempt to connect to wrong mirror\n archive: %s\n wanted mirror of: %s\n got mirror of: %s\n", name, want_mirror_of, (answer->mirror_of ? answer->mirror_of : (t_uchar *)"(not a mirror)")); exit (2); } ++answer->refs; return answer; } else { t_uchar * location = 0; location = arch_archive_location (name, 0); answer = arch_archive_connect_location (name, location, want_mirror_of); lim_free (0, answer->name); answer->name = str_save (0, name); answer->refs = 1; answer->next = connected_by_name; connected_by_name = answer; lim_free(0, location); return answer; } } void arch_archive_close (struct arch_archive * arch) { if (!arch) return; if (arch->refs) --arch->refs; if (!arch->refs) { struct arch_archive ** handle = &connected_by_name; while (*handle) { if (*handle != arch) handle = &((*handle)->next); else { *handle = (*handle)->next; } } arch->vtable->close (arch); lim_free (0, arch->name); lim_free (0, arch->official_name); lim_free (0, arch->location); lim_free (0, arch->version); lim_free (0, arch); } } t_uchar * arch_archive_version (struct arch_archive * arch) { return arch->vtable->archive_version (arch); } rel_table arch_archive_categories (struct arch_archive * arch) { rel_table answer = rel_table_nil; answer = arch->vtable->categories (arch); rel_sort_table_by_field (0, answer, 0); return answer; } rel_table arch_archive_branches (struct arch_archive * arch, const t_uchar * category) { rel_table answer = rel_table_nil; answer = arch->vtable->branches (arch, category); rel_sort_table_by_field (0, answer, 0); return answer; } rel_table arch_archive_versions (struct arch_archive * arch, const t_uchar * package) { rel_table answer = rel_table_nil; answer = arch->vtable->versions (arch, package); arch_sort_table_by_name_field (0, answer, 0); return answer; } t_uchar * arch_archive_latest_revision (struct arch_archive * arch, const t_uchar * version, int full) { rel_table revs = rel_table_nil; t_uchar * answer = 0; revs = arch_archive_revisions (arch, version, full); if (rel_n_records (revs)) answer = str_save (0, rel_peek_str (revs, rel_n_records (revs) - 1, 0)); rel_free_table (revs); return answer; } rel_table arch_archive_revisions (struct arch_archive * arch, const t_uchar * version, int full) { rel_table answer = rel_table_nil; answer = arch->vtable->revisions (arch, version); arch_sort_table_by_patch_level_field (0, answer, 0); if (full) { t_uchar * fqv = 0; int x; if (full == 1) fqv = arch_fully_qualify (arch->name, version); else fqv = str_save (0, version); for (x = 0; x < rel_n_records (answer); ++x) { const t_uchar * t; t_uchar * new_t; t = rel_peek_str (answer, x, 0); new_t = str_alloc_cat_many (0, fqv, "--", t, str_end); rel_set_taking (answer, x, 0, rel_make_field_str (new_t)); lim_free (0, new_t); } lim_free (0, fqv); } return answer; } t_uchar * arch_archive_log (struct arch_archive * arch, const t_uchar * revision) { t_uchar * answer = 0; answer = arch->vtable->archive_log (arch, revision); return answer; } void arch_revision_type (enum arch_revision_type * type, int * is_cached, struct arch_archive * arch, const t_uchar * revision) { if (arch->vtable->revision_type (type, is_cached, arch, revision) < 0) { safe_printfmt (2, "corrupt archive\n name: %s\n location: %s\n revision: %s\n", arch->name, arch->location, revision); exit (2); } } int arch_revision_exists (struct arch_archive * arch, const t_uchar * revision) { enum arch_revision_type type; int is_cached; return (arch->vtable->revision_type (&type, &is_cached, arch, revision) >= 0); } void arch_get_patch_targz (int out_fd, struct arch_archive * arch, const t_uchar * revision) { arch->vtable->get_patch (out_fd, arch, revision); } void arch_get_patch (struct arch_archive * arch, const t_uchar * revision, const t_uchar * dest_dir) { int here_fd; t_uchar * dest_dir_dir = 0; t_uchar * dest_dir_dir_path = 0; t_uchar * dest_dir_tail = 0; t_uchar * dest_dir_path = 0; t_uchar * tmpdir_path = 0; int out_fd = 0; int tar_pid = 0; t_uchar * patches_file_name = 0; t_uchar * patches_file_dest = 0; here_fd = safe_open (".", O_RDONLY, 0); dest_dir_dir = file_name_directory_file (0, dest_dir); if (dest_dir_dir) safe_chdir (dest_dir_dir); dest_dir_dir_path = safe_current_working_directory (); dest_dir_tail = file_name_tail (0, dest_dir); dest_dir_path = file_name_in_vicinity (0, dest_dir_dir_path, dest_dir_tail); tmpdir_path = tmp_file_name (dest_dir_dir_path, ",,get-patch"); patches_file_name = str_alloc_cat (0, revision, ".patches"); patches_file_dest = file_name_in_vicinity (0, "..", dest_dir_tail); safe_mkdir (tmpdir_path, 0777); safe_chdir (tmpdir_path); out_fd = invoke_tar_extract (&tar_pid); arch->vtable->get_patch (out_fd, arch, revision); safe_close (out_fd); if (wait_for_tar (tar_pid)) panic ("arch_get_patch: tar exitted with non-0 status"); safe_rename (patches_file_name, patches_file_dest); safe_fchdir (here_fd); safe_close (here_fd); rmrf_file (tmpdir_path); lim_free (0, dest_dir_dir); lim_free (0, dest_dir_dir_path); lim_free (0, dest_dir_tail); lim_free (0, dest_dir_path); lim_free (0, tmpdir_path); lim_free (0, patches_file_name); lim_free (0, patches_file_dest); } void arch_get_cached_revision_targz (int out_fd, struct arch_archive * arch, const t_uchar * revision) { arch->vtable->get_cached (out_fd, arch, revision); } void arch_get_cached_revision (struct arch_archive * arch, const t_uchar * revision, const t_uchar * dest_dir) { int here_fd; t_uchar * dest_dir_dir = 0; t_uchar * dest_dir_dir_path = 0; t_uchar * dest_dir_tail = 0; t_uchar * dest_dir_path = 0; t_uchar * tmpdir_path = 0; int out_fd = 0; int tar_pid = 0; t_uchar * patches_file_dest = 0; here_fd = safe_open (".", O_RDONLY, 0); dest_dir_dir = file_name_directory_file (0, dest_dir); if (dest_dir_dir) safe_chdir (dest_dir_dir); dest_dir_dir_path = safe_current_working_directory (); dest_dir_tail = file_name_tail (0, dest_dir); dest_dir_path = file_name_in_vicinity (0, dest_dir_dir_path, dest_dir_tail); tmpdir_path = tmp_file_name (dest_dir_dir_path, ",,get-patch"); patches_file_dest = file_name_in_vicinity (0, "..", dest_dir_tail); safe_mkdir (tmpdir_path, 0777); safe_chdir (tmpdir_path); out_fd = invoke_tar_extract (&tar_pid); arch->vtable->get_cached (out_fd, arch, revision); safe_close (out_fd); if (wait_for_tar (tar_pid)) panic ("arch_get_patch: tar exitted with non-0 status"); safe_rename (revision, patches_file_dest); safe_fchdir (here_fd); safe_close (here_fd); rmrf_file (tmpdir_path); lim_free (0, dest_dir_dir); lim_free (0, dest_dir_dir_path); lim_free (0, dest_dir_tail); lim_free (0, dest_dir_path); lim_free (0, tmpdir_path); lim_free (0, patches_file_dest); } void arch_get_import_targz (int out_fd, struct arch_archive * arch, const t_uchar * revision) { arch->vtable->get_import (out_fd, arch, revision); } void arch_get_import_revision (struct arch_archive * arch, const t_uchar * revision, const t_uchar * dest_dir) { int here_fd; t_uchar * dest_dir_dir = 0; t_uchar * dest_dir_dir_path = 0; t_uchar * dest_dir_tail = 0; t_uchar * dest_dir_path = 0; t_uchar * tmpdir_path = 0; int out_fd = 0; int tar_pid = 0; t_uchar * patches_file_dest = 0; here_fd = safe_open (".", O_RDONLY, 0); dest_dir_dir = file_name_directory_file (0, dest_dir); if (dest_dir_dir) safe_chdir (dest_dir_dir); dest_dir_dir_path = safe_current_working_directory (); dest_dir_tail = file_name_tail (0, dest_dir); dest_dir_path = file_name_in_vicinity (0, dest_dir_dir_path, dest_dir_tail); tmpdir_path = tmp_file_name (dest_dir_dir_path, ",,get-patch"); patches_file_dest = file_name_in_vicinity (0, "..", dest_dir_tail); safe_mkdir (tmpdir_path, 0777); safe_chdir (tmpdir_path); out_fd = invoke_tar_extract (&tar_pid); arch->vtable->get_import (out_fd, arch, revision); safe_close (out_fd); if (wait_for_tar (tar_pid)) panic ("arch_get_patch: tar exitted with non-0 status"); safe_rename (revision, patches_file_dest); safe_fchdir (here_fd); safe_close (here_fd); rmrf_file (tmpdir_path); lim_free (0, dest_dir_dir); lim_free (0, dest_dir_dir_path); lim_free (0, dest_dir_tail); lim_free (0, dest_dir_path); lim_free (0, tmpdir_path); lim_free (0, patches_file_dest); } t_uchar * arch_get_continuation (struct arch_archive * arch, const t_uchar * revision) { t_uchar * raw_data = 0; t_uchar * start; t_uchar * end; t_uchar * answer = 0; raw_data = arch->vtable->get_continuation (arch, revision); start = raw_data; while (*start && char_is_space (*start)) ++start; end = start; while (*end && !char_is_space (*end)) ++end; answer = str_save_n (0, start, end - start); lim_free (0, raw_data); return answer; } t_uchar * arch_get_meta_info (struct arch_archive * arch, const t_uchar * meta_info_name) { t_uchar * answer = 0; answer = arch->vtable->get_meta_info (arch, meta_info_name); return answer; } t_uchar * arch_get_meta_info_trimming (struct arch_archive * arch, const t_uchar * meta_info_name) { t_uchar * intermediate = 0; t_uchar * answer = 0; intermediate = arch_get_meta_info (arch, meta_info_name); if (!intermediate) return 0; answer = str_save_trimming (0, intermediate); lim_free (0, intermediate); return answer; } int arch_make_category (t_uchar ** errstr, struct arch_archive * arch, const t_uchar * category) { int answer; ensure_writable (arch, 0); answer = arch->vtable->make_category (errstr, arch, category); arch_run_hook ("make-category", "ARCH_ARCHIVE", arch->name, "ARCH_CATEGORY", category, (t_uchar*)0); return answer; } int arch_make_branch (t_uchar ** errstr, struct arch_archive * arch, const t_uchar * branch) { int answer; ensure_writable (arch, 0); answer = arch->vtable->make_branch (errstr, arch, branch); arch_run_hook ("make-branch", "ARCH_ARCHIVE", arch->name, "ARCH_BRANCH", branch, (t_uchar*)0); return answer; } int arch_make_version (t_uchar ** errstr, struct arch_archive * arch, const t_uchar * version) { int answer; ensure_writable (arch, 0); answer = arch->vtable->make_version (errstr, arch, version); arch_run_hook ("make-version", "ARCH_ARCHIVE", arch->name, "ARCH_VERSION", version, (t_uchar*)0); return answer; } int arch_archive_lock_revision (t_uchar ** errstr, struct arch_archive * a, const t_uchar * version, const t_uchar * prev_level, const t_uchar * uid, const t_uchar * txn_id, const t_uchar * new_level) { ensure_writable (a, 1); return a->vtable->lock_revision (errstr, a, version, prev_level, uid, txn_id, new_level); } int arch_revision_ready (t_uchar ** errstr, struct arch_archive *a, const t_uchar * version, const t_uchar * prev_level, const t_uchar * uid, const t_uchar * txn_id, const t_uchar * new_level) { return a->vtable->revision_ready (errstr, a, version, prev_level, uid, txn_id, new_level); } int arch_archive_finish_revision (t_uchar ** errstr, struct arch_archive * a, const t_uchar * version, const t_uchar * prev_level, const t_uchar * uid, const t_uchar * txn_id, const t_uchar * new_level) { ensure_writable (a, 0); return a->vtable->finish_revision (errstr, a, version, prev_level, uid, txn_id, new_level); } enum arch_revision_lock_state arch_archive_revision_lock_state (t_uchar ** prev_level_ret, t_uchar ** uid_ret, t_uchar ** txn_id_ret, struct arch_archive * a, const t_uchar * version) { ensure_writable (a, 1); return a->vtable->lock_state (prev_level_ret, uid_ret, txn_id_ret, a, version); } int arch_archive_break_revision_lock (t_uchar ** errstr, struct arch_archive * a, const t_uchar * version, const t_uchar * prev_level, const t_uchar * uid, const t_uchar * txn_id) { ensure_writable (a, 1); return a->vtable->break_revision_lock (errstr, a, version, prev_level, uid, txn_id); } int arch_archive_put_log (t_uchar ** errstr, struct arch_archive * a, const t_uchar * version, const t_uchar * prev_level, const t_uchar * uid, const t_uchar * txn_id, const t_uchar * log_text) { ensure_writable (a, 0); return a->vtable->put_log (errstr, a, version, prev_level, uid, txn_id, log_text); } int arch_archive_put_continuation (t_uchar ** errstr, struct arch_archive * a, const t_uchar * version, const t_uchar * prev_level, const t_uchar * uid, const t_uchar * txn_id, const t_uchar * continuation) { ensure_writable (a, 0); return a->vtable->put_continuation (errstr, a, version, prev_level, uid, txn_id, continuation); } int arch_archive_put_changeset_targz (t_uchar ** errstr, struct arch_archive * a, const t_uchar * version, const t_uchar * prev_level, const t_uchar * uid, const t_uchar * txn_id, const t_uchar * level, int in_fd) { int answer; answer = a->vtable->put_changeset (errstr, a, version, prev_level, uid, txn_id, level, in_fd); return answer; } int arch_archive_put_changeset (t_uchar ** errstr, struct arch_archive * a, const t_uchar * version, const t_uchar * prev_level, const t_uchar * uid, const t_uchar * txn_id, const t_uchar * level, const t_uchar * dir) { t_uchar * dir_tail = 0; t_uchar * desired_name = 0; t_uchar * tar_file_path = 0; int in_fd; int answer; dir_tail = file_name_tail (0, dir); desired_name = str_alloc_cat_many (0, version, "--", level, ".patches", str_end); invariant (!str_cmp (dir_tail, desired_name)); /* GNU tar 1.13 is busted and doesn't output to pipes correctly. */ ensure_writable (a, 0); tar_file_path = make_tmp_tar_archive (dir); in_fd = safe_open (tar_file_path, O_RDONLY, 0); answer = a->vtable->put_changeset (errstr, a, version, prev_level, uid, txn_id, level, in_fd); safe_close (in_fd); safe_unlink (tar_file_path); lim_free (0, dir_tail); lim_free (0, desired_name); lim_free (0, tar_file_path); return answer; } int arch_archive_put_import_targz (t_uchar ** errstr, struct arch_archive * a, const t_uchar * version, const t_uchar * prev_level, const t_uchar * uid, const t_uchar * txn_id, const t_uchar * level, int in_fd) { int answer; answer = a->vtable->put_import (errstr, a, version, prev_level, uid, txn_id, level, in_fd); return answer; } int arch_archive_put_import (t_uchar ** errstr, struct arch_archive * a, const t_uchar * version, const t_uchar * prev_level, const t_uchar * uid, const t_uchar * txn_id, const t_uchar * level, const t_uchar * dir) { t_uchar * dir_tail = 0; t_uchar * desired_name = 0; t_uchar * tar_file_path = 0; int in_fd; int answer; dir_tail = file_name_tail (0, dir); desired_name = str_alloc_cat_many (0, version, "--", level, str_end); invariant (!str_cmp (dir_tail, desired_name)); /* GNU tar 1.13 is busted and doesn't output to pipes correctly. */ ensure_writable (a, 0); tar_file_path = make_tmp_tar_archive (dir); in_fd = safe_open (tar_file_path, O_RDONLY, 0); answer = a->vtable->put_import (errstr, a, version, prev_level, uid, txn_id, level, in_fd); safe_close (in_fd); safe_unlink (tar_file_path); lim_free (0, dir_tail); lim_free (0, desired_name); lim_free (0, tar_file_path); return answer; } int arch_archive_put_cached_targz (t_uchar ** errstr, struct arch_archive * a, const t_uchar * revision, int in_fd) { int answer; answer = a->vtable->put_cached (errstr, a, revision, in_fd); return answer; } int arch_archive_put_cached (t_uchar ** errstr, struct arch_archive * a, const t_uchar * revision, const t_uchar * dir) { t_uchar * dir_tail = 0; t_uchar * tar_file_path = 0; int in_fd; int answer; dir_tail = file_name_tail (0, dir); invariant (!str_cmp (dir_tail, revision)); /* GNU tar 1.13 is busted and doesn't output to pipes correctly. */ ensure_writable (a, 1); tar_file_path = make_tmp_tar_archive (dir); in_fd = safe_open (tar_file_path, O_RDONLY, 0); answer = a->vtable->put_cached (errstr, a, revision, in_fd); safe_close (in_fd); safe_unlink (tar_file_path); lim_free (0, dir_tail); lim_free (0, tar_file_path); return answer; } int arch_archive_delete_cached (t_uchar ** errstr, struct arch_archive * a, const t_uchar * revision) { ensure_writable (a, 1); return a->vtable->delete_cached (errstr, a, revision); } void arch_archive_repair_non_txnal (int chatter_fd, struct arch_archive * a) { ensure_writable (a, 1); a->vtable->repair_non_txnal (chatter_fd, a); } t_uchar * arch_generate_txn_id (void) { time_t now; pid_t pid; char hostname[64]; char number[64]; t_uchar * answer; now = time (0); pid = getpid (); mem_set0 ((t_uchar *)hostname, sizeof (hostname)); gethostname (hostname, sizeof (hostname)); cvt_ulong_to_hex (number, hash_ul((t_ulong)now ^ (t_ulong)pid)); answer = str_save (0, number); cvt_ulong_to_hex (number, hash_mem ((t_uchar *)hostname, sizeof (hostname))); answer = str_realloc_cat (0, answer, number); cvt_ulong_to_hex (number, hash_ul ((t_ulong)now ^ ~(t_ulong)pid)); answer = str_realloc_cat (0, answer, number); return answer; } t_uchar * arch_previous_revision (struct arch_archive * arch, const t_uchar * revision) { t_uchar * version = 0; t_uchar * patch_level = 0; enum arch_patch_level_type current_type; enum arch_patch_level_type next_type; t_ulong current_n; t_ulong next_n; t_uchar * next_patch_level = 0; t_uchar * answer = 0; version = arch_parse_package_name (arch_ret_package_version, 0, revision); patch_level = arch_parse_package_name (arch_ret_patch_level, 0, revision); current_type = arch_analyze_patch_level (¤t_n, patch_level); if (current_type == arch_is_base0_level) { answer = 0; } else { if (((current_type == arch_is_patch_level) || (current_type == arch_is_versionfix_level)) && (current_n > 1)) { next_type = current_type; next_n = current_n - 1; } else if (current_n == 1) { next_n = 0; if (current_type == arch_is_patch_level) next_type = arch_is_base0_level; else next_type = arch_is_version_level; } else { rel_table revisions = rel_table_nil; int x; revisions = arch_archive_revisions (arch, version, 0); if (!rel_n_records (revisions)) { safe_printfmt (2, "version has no revisions (%s/%s)\n", arch->name, version); exit (2); } for (x = 0; x < rel_n_records (revisions); ++x) if (rel_peek_str (revisions, x, 0)[0] == 'v') break; invariant (x); if (x == rel_n_records (revisions)) x = rel_n_records (revisions); if (x == 1) { next_type = arch_is_base0_level; next_n = 0; } else { next_type = arch_is_patch_level; next_n = x - 1; } rel_free_table (revisions); } next_patch_level = arch_form_patch_level (next_type, next_n); answer = str_alloc_cat_many (0, version, "--", next_patch_level, str_end); } lim_free (0, version); lim_free (0, patch_level); lim_free (0, next_patch_level); return answer; } t_uchar * arch_ancestor_revision (struct arch_archive * arch, const t_uchar * revision) { enum arch_revision_type type; arch_revision_type (&type, 0, arch, revision); switch (type) { default: { panic ("arch_ancestor_revision: unrecognized revision type"); return 0; } case arch_import_revision: { return 0; } case arch_simple_revision: { t_uchar * prev_revision = 0; t_uchar * answer = 0; prev_revision = arch_previous_revision (arch, revision); answer = arch_fully_qualify (arch->name, prev_revision); lim_free (0, prev_revision); return answer; } case arch_continuation_revision: { return arch_get_continuation (arch, revision); } } } t_uchar * archive_tmp_file_name (const t_uchar * dir, const t_uchar * basename) { t_uchar * my_uid = 0; t_uchar * tmp_name = 0; my_uid = arch_my_id_uid (); tmp_name = tmp_file_name (dir, basename); tmp_name = str_realloc_cat_many (0, tmp_name, ".", my_uid, str_end); lim_free (0, my_uid); return tmp_name; } static int invoke_tar_extract (int * pid_ret) { int pipe_fds[2]; int pid; if (pipe (pipe_fds)) panic ("unable to create pipe fds for tar"); pid = fork (); if (pid == -1) panic ("unable to fork for patch"); if (pid) { *pid_ret = pid; safe_close (pipe_fds[0]); return pipe_fds[1]; } else { t_uchar ** argv; safe_close (pipe_fds[1]); argv = 0; *(t_uchar **)ar_push ((void **)&argv, 0, sizeof (char *)) = cfg__gnu_tar; *(t_uchar **)ar_push ((void **)&argv, 0, sizeof (char *)) = "-m"; *(t_uchar **)ar_push ((void **)&argv, 0, sizeof (char *)) = "--preserve"; *(t_uchar **)ar_push ((void **)&argv, 0, sizeof (char *)) = "-zxf"; *(t_uchar **)ar_push ((void **)&argv, 0, sizeof (char *)) = "-"; *(t_uchar **)ar_push ((void **)&argv, 0, sizeof (char *)) = 0; safe_move_fd (pipe_fds[0], 0); arch_util_execvp (cfg__gnu_tar, argv); panic ("invoke_tar_extract: execvp for patch returned to caller"); exit (2); } panic ("invoke_tar_extract: not reached"); return -1; } static int wait_for_tar (int pid) { int status; int wait_pid; wait_pid = waitpid (pid, &status, 0); if (wait_pid < 0) { panic_msg ("error waiting for tar subprocess"); kill (0, SIGKILL); panic ("error waiting for subprocess"); } if (WIFSIGNALED (status)) { safe_printfmt (2, "\n"); safe_printfmt (2, "wait_for_tar: tar subprocess killed by signal %d\n", WTERMSIG (status)); safe_printfmt (2, "\n"); exit (2); return -1; } else if (!WIFEXITED (status)) { panic_msg ("waitpid returned for a non-exited process"); kill (0, SIGKILL); panic ("waitpid returned for a non-exited process"); return -1; } else { int exit_status; exit_status = WEXITSTATUS (status); return exit_status; } } t_uchar * make_tmp_tar_archive (const t_uchar * dir) { t_uchar * dir_dir = 0; t_uchar * dir_tail = 0; t_uchar * tmp_stem = 0; t_uchar * tmp_in_cwd = 0; t_uchar * tmp_path = 0; dir_dir = file_name_directory_file (0, dir); if (!dir_dir) dir_dir = str_save (0, "."); dir_tail = file_name_tail (0, dir); tmp_stem = str_alloc_cat_many (0, ",,", dir_tail, ".tar.gz", str_end); tmp_in_cwd = tmp_file_name (".", tmp_stem); tmp_path = file_name_in_vicinity (0, dir_dir, tmp_in_cwd); { int pid; int dev_null_fd; dev_null_fd = safe_open ("/dev/null", O_WRONLY, 0); pid = fork (); if (pid == -1) panic ("unable to fork for patch"); if (!pid) { t_uchar ** argv; safe_chdir (dir_dir); argv = 0; *(t_uchar **)ar_push ((void **)&argv, 0, sizeof (char *)) = cfg__gnu_tar; *(t_uchar **)ar_push ((void **)&argv, 0, sizeof (char *)) = "-zcf"; *(t_uchar **)ar_push ((void **)&argv, 0, sizeof (char *)) = tmp_in_cwd; *(t_uchar **)ar_push ((void **)&argv, 0, sizeof (char *)) = dir_tail; *(t_uchar **)ar_push ((void **)&argv, 0, sizeof (char *)) = 0; safe_move_fd (dev_null_fd, 1); safe_dup2 (1, 2); arch_util_execvp (cfg__gnu_tar, argv); panic ("make_tmp_tar_archive: execvp for patch returned to caller"); exit (2); } else { int status; int wait_pid; safe_close (dev_null_fd); wait_pid = waitpid (pid, &status, 0); if (wait_pid < 0) { panic_msg ("error waiting for tar subprocess"); kill (0, SIGKILL); panic ("error waiting for subprocess"); } if (WIFSIGNALED (status)) { safe_printfmt (2, "\n"); safe_printfmt (2, "wait_for_tar: tar subprocess killed by signal %d\n", WTERMSIG (status)); safe_printfmt (2, "\n"); exit (2); return 0; } else if (!WIFEXITED (status)) { panic_msg ("waitpid returned for a non-exited process"); kill (0, SIGKILL); panic ("waitpid returned for a non-exited process"); return 0; } else { int exit_status; exit_status = WEXITSTATUS (status); if (exit_status) panic ("make_tmp_tar_archive: tar exitted with non-0 status"); } } } lim_free (0, dir_dir); lim_free (0, dir_tail); lim_free (0, tmp_in_cwd); lim_free (0, tmp_stem); return tmp_path; } static void ensure_writable (struct arch_archive * arch, int mirror_ok) { if (arch->access != arch_archive_writable) { safe_printfmt (2, "attempt to modify archive that has only read-compatibility\n archive: %s\n", arch->name); exit (2); } if (!mirror_ok) { if (!arch->client_anticipates_mirror && !!arch->mirror_of) { safe_printfmt (2, "attempt to write directly to mirror\n archive: %s\n mirror of: %s\n", arch->name, arch->mirror_of); exit (2); } if (arch->client_anticipates_mirror && !arch->mirror_of) { safe_printfmt (2, "archive is not a mirror of %s\n archive: %s\n expected mirror of: %s\n", arch->client_anticipates_mirror, arch->name, arch->client_anticipates_mirror); exit (2); } if (arch->client_anticipates_mirror && str_cmp (arch->client_anticipates_mirror, arch->mirror_of)) { safe_printfmt (2, "attempt to write to the wrong mirror\n archive: %s\n expected mirror of: %s\n got mirror of: %s\n", arch->name, arch->client_anticipates_mirror, arch->mirror_of); exit (2); } } } int arch_get_meta_int_info(struct arch_archive * arch, const t_uchar * key) { t_uchar * key_existence = arch_get_meta_info (arch, key); int result = !!key_existence; lim_free (0, key_existence); return result; } t_uchar * arch_fs_archive_category_path (const struct arch_archive * arch, const t_uchar * archive_path, const t_uchar * category) { if (arch->type == arch_archive_baz) panic ("baz does not support stand alone categories"); return file_name_in_vicinity (0, archive_path, category); } t_uchar * arch_fs_archive_branch_path (const struct arch_archive * arch, const t_uchar * archive_path, const t_uchar * package) { t_uchar * category = 0; t_uchar * category_path = 0; t_uchar * branch_path = 0; if (arch->type == arch_archive_baz) panic ("baz does not support stand alone branches"); invariant (arch_valid_package_name (package, arch_no_archive, arch_req_package, 0)); category = arch_parse_package_name (arch_ret_category, 0, package); category_path = arch_fs_archive_category_path (arch, archive_path, category); branch_path = file_name_in_vicinity (0, category_path, package); lim_free (0, category); lim_free (0, category_path); return branch_path; } t_uchar * arch_fs_archive_version_path (const struct arch_archive * arch, const t_uchar * archive_path, const t_uchar * version) { t_uchar * package = 0; t_uchar * package_path = 0; t_uchar * version_path = 0; invariant (arch_valid_package_name (version, arch_no_archive, arch_req_version, 0)); if (arch->type == arch_archive_baz) return str_save (0, version); package = arch_parse_package_name (arch_ret_package, 0, version); package_path = arch_fs_archive_branch_path (arch, archive_path, package); version_path = file_name_in_vicinity (0, package_path, version); lim_free (0, package); lim_free (0, package_path); return version_path; } t_uchar * arch_fs_archive_revision_path (const struct arch_archive * arch, const t_uchar * archive_path, const t_uchar * revision) { t_uchar * version = 0; t_uchar * version_path = 0; t_uchar * level = 0; t_uchar * revision_path = 0; invariant (arch_valid_package_name (revision, arch_no_archive, arch_req_patch_level, 0)); version = arch_parse_package_name (arch_ret_package_version, 0, revision); version_path = arch_fs_archive_version_path (arch, archive_path, version); level = arch_parse_package_name (arch_ret_patch_level, 0, revision); revision_path = file_name_in_vicinity (0, version_path, level); lim_free (0, version); lim_free (0, version_path); lim_free (0, level); return revision_path; } t_uchar * arch_fs_archive_revision_log_path (const struct arch_archive * arch, const t_uchar * archive_path, const t_uchar * revision) { t_uchar * revision_path = 0; t_uchar * log_path = 0; revision_path = arch_fs_archive_revision_path (arch, archive_path, revision); log_path = file_name_in_vicinity (0, revision_path, "log"); lim_free (0, revision_path); return log_path; } t_uchar * arch_fs_archive_changeset_path (const struct arch_archive * arch, const t_uchar * archive_path, const t_uchar * revision) { t_uchar * revision_path = 0; t_uchar * changeset_path; revision_path = arch_fs_archive_revision_path (arch, archive_path, revision); changeset_path = file_name_in_vicinity (0, revision_path, revision); changeset_path = str_realloc_cat (0, changeset_path, ".patches.tar.gz"); lim_free (0, revision_path); return changeset_path; } t_uchar * arch_fs_archive_import_path (const struct arch_archive * arch, const t_uchar * archive_path, const t_uchar * revision) { t_uchar * revision_path = 0; t_uchar * changeset_path; revision_path = arch_fs_archive_revision_path (arch, archive_path, revision); changeset_path = file_name_in_vicinity (0, revision_path, revision); changeset_path = str_realloc_cat (0, changeset_path, ".src.tar.gz"); lim_free (0, revision_path); return changeset_path; } t_uchar * arch_fs_archive_cached_path (const struct arch_archive * arch, const t_uchar * archive_path, const t_uchar * revision) { t_uchar * revision_path = 0; t_uchar * changeset_path; revision_path = arch_fs_archive_revision_path (arch, archive_path, revision); changeset_path = file_name_in_vicinity (0, revision_path, revision); changeset_path = str_realloc_cat (0, changeset_path, ".tar.gz"); lim_free (0, revision_path); return changeset_path; } t_uchar * arch_fs_archive_cached_checksum_path (const struct arch_archive * arch, const t_uchar * archive_path, const t_uchar * revision) { t_uchar * revision_path = 0; t_uchar * checksum_path = 0; revision_path = arch_fs_archive_revision_path (arch, archive_path, revision); checksum_path = file_name_in_vicinity (0, revision_path, "checksum.cacherev"); lim_free (0, revision_path); return checksum_path; } t_uchar * arch_fs_archive_continuation_path (const struct arch_archive * arch, const t_uchar * archive_path, const t_uchar * revision) { t_uchar * revision_path = 0; t_uchar * continuation_path; revision_path = arch_fs_archive_revision_path (arch, archive_path, revision); continuation_path = file_name_in_vicinity (0, revision_path, "CONTINUATION"); lim_free (0, revision_path); return continuation_path; } t_uchar * arch_fs_archive_revision_lock_unlocked_path (const struct arch_archive * arch, const t_uchar * archive_path, const t_uchar * version, const t_uchar * prev_level) { t_uchar * answer = 0; invariant (arch_valid_package_name (version, arch_no_archive, arch_req_version, 0)); if (!prev_level) { t_uchar * version_path = 0; version_path = arch_fs_archive_version_path (arch, archive_path, version); answer = file_name_in_vicinity (0, version_path, "++revision-lock"); lim_free (0, version_path); } else { t_uchar * revision = 0; t_uchar * revision_path = 0; revision = str_alloc_cat_many (0, version, "--", prev_level, str_end); revision_path = arch_fs_archive_revision_path (arch, archive_path, revision); answer = file_name_in_vicinity (0, revision_path, "++revision-lock"); lim_free (0, revision); lim_free (0, revision_path); } return answer; } t_uchar * arch_fs_archive_revision_lock_locked_path (const struct arch_archive * arch, const t_uchar * archive_path, const t_uchar * version, const t_uchar * prev_level, const t_uchar * arch_user_id, const t_uchar * txn_id) { t_uchar * version_path = 0; t_uchar * lock_basename = 0; t_uchar * answer = 0; invariant (arch_valid_package_name (version, arch_no_archive, arch_req_version, 0)); version_path = arch_fs_archive_version_path (arch, archive_path, version); lock_basename = str_alloc_cat_many (0, "++revision-lock-held--", (prev_level ? prev_level : (t_uchar *)"absolute-0"), "--", arch_user_id, (txn_id ? "--" : 0), txn_id, str_end); answer = file_name_in_vicinity (0, version_path, lock_basename); lim_free (0, version_path); lim_free (0, lock_basename); return answer; } t_uchar * arch_fs_archive_revision_lock_locked_contents_path (const struct arch_archive * arch, const t_uchar * archive_path, const t_uchar * version, const t_uchar * prev_level, const t_uchar * arch_user_id, const t_uchar * txn_id) { t_uchar * locked_path = 0; t_uchar * answer = 0; locked_path = arch_fs_archive_revision_lock_locked_path (arch, archive_path, version, prev_level, arch_user_id, txn_id); answer = file_name_in_vicinity (0, locked_path, "+contents"); lim_free (0, locked_path); return answer; } t_uchar * arch_fs_archive_revision_lock_broken_path (const struct arch_archive * arch, const t_uchar * archive_path, const t_uchar * version, const t_uchar * prev_level) { t_uchar * version_path = 0; t_uchar * lock_dir_basename = 0; t_uchar * lock_basename = 0; t_uchar * broken_dir = 0; t_uchar * answer = 0; version_path = arch_fs_archive_version_path (arch, archive_path, version); lock_dir_basename = str_alloc_cat (0, "++revision-lock-broken--", (prev_level ? prev_level : (t_uchar *)"absolute-0")); lock_basename = str_alloc_cat (0, ",,remade-lock--", (prev_level ? prev_level : (t_uchar *)"absolute-0")); broken_dir = file_name_in_vicinity (0, version_path, lock_dir_basename); answer = file_name_in_vicinity (0, broken_dir, lock_basename); lim_free (0, version_path); lim_free (0, lock_dir_basename); lim_free (0, lock_basename); lim_free (0, broken_dir); return answer; } /* tag: Tom Lord Tue May 20 00:52:06 2003 (archive.c) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-id-tagging-defaults.c0000644000175000017500000000575210457622000021441 0ustar useruser/* cmd-id-tagging-defaults.c * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "config-options.h" #include "hackerlab/cmd/main.h" #include "tla/libarch/inv-ids.h" #include "tla/libarch/cmd-id-tagging-defaults.h" static t_uchar * usage = "[options]"; static t_uchar * version_string = (cfg__std__package " from regexps.com\n" "\n" "Copyright 2003 Tom Lord\n" "\n" "This is free software; see the source for copying conditions.\n" "There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\n" "PARTICULAR PURPOSE.\n" "\n" "Report bugs to " cfg__tla_bug_mail ".\n" "\n" cfg__std__release_id_string "\n"); #define OPTS(OP) \ OP (opt_help_msg, "h", "help", 0, \ "Display a help message and exit.") \ OP (opt_long_help, "H", 0, 0, \ "Display a verbose help message and exit.") \ OP (opt_version, "V", "version", 0, \ "Display a release identifier string\n" \ "and exit.") t_uchar arch_cmd_id_tagging_defaults_help[] = ("print the default =tagging-method contents\n" "Print the boilerplate contents that are used to initialize new\n" "=tagging-method files.\n"); enum options { OPTS (OPT_ENUM) }; static struct opt_desc opts[] = { OPTS (OPT_DESC) {-1, 0, 0, 0, 0} }; int arch_cmd_id_tagging_defaults (t_uchar * program_name, int argc, char * argv[]) { int o; struct opt_parsed * option; safe_buffer_fd (1, 0, O_WRONLY, 0); option = 0; while (1) { o = opt_standard (lim_use_must_malloc, &option, opts, &argc, argv, program_name, usage, version_string, arch_cmd_id_tagging_defaults_help, opt_help_msg, opt_long_help, opt_version); if (o == opt_none) break; switch (o) { default: safe_printfmt (2, "unhandled option `%s'\n", option->opt_string); panic ("internal error parsing arguments"); usage_error: opt_usage (2, argv[0], program_name, usage, 1); exit (1); /* bogus_arg: */ safe_printfmt (2, "ill-formed argument for `%s' (`%s')\n", option->opt_string, option->arg_string); goto usage_error; } } if (argc != 1) goto usage_error; { t_uchar * it = 0; it = arch_default_id_tagging_method_contents (arch_unspecified_id_tagging); safe_printfmt (1, "%s", it); lim_free (0, it); } return 0; } /* tag: Tom Lord Sun Jun 8 17:08:52 2003 (cmd-tagging-defaults.c) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-new-merges.c0000644000175000017500000001234110457622000017663 0ustar useruser/* cmd-new-merges.c * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "config-options.h" #include "hackerlab/cmd/main.h" #include "tla/libfsutils/file-contents.h" #include "tla/libarch/namespace.h" #include "tla/libarch/project-tree.h" #include "tla/libarch/merge-points.h" #include "tla/libarch/cmd-new-merges.h" static t_uchar * usage = "[options] [[archive]/version]"; static t_uchar * version_string = (cfg__std__package " from regexps.com\n" "\n" "Copyright 2003 Tom Lord\n" "\n" "This is free software; see the source for copying conditions.\n" "There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\n" "PARTICULAR PURPOSE.\n" "\n" "Report bugs to " cfg__tla_bug_mail ".\n" "\n" cfg__std__release_id_string "\n"); #define OPTS(OP) \ OP (opt_help_msg, "h", "help", 0, \ "Display a help message and exit.") \ OP (opt_long_help, "H", 0, 0, \ "Display a verbose help message and exit.") \ OP (opt_version, "V", "version", 0, \ "Display a release identifier string\n" \ "and exit.") \ OP (opt_archive, "A", "archive", 1, \ "Override `my-default-archive'") \ OP (opt_dir, "d", "dir DIR", 1, \ "cd to DIR first") \ OP (opt_reverse, "r", "reverse", 0, \ "sort from newest to oldest") t_uchar arch_cmd_new_merges_help[] = ("list tree patches new to a version\n" "List all patch log entries in the tree containing DIR that have\n" "not already been merged with VERSION.\n"); enum options { OPTS (OPT_ENUM) }; static struct opt_desc opts[] = { OPTS (OPT_DESC) {-1, 0, 0, 0, 0} }; int arch_cmd_new_merges (t_uchar * program_name, int argc, char * argv[]) { int o; struct opt_parsed * option; t_uchar * default_archive = 0; char * dir = 0; int reverse = 0; default_archive = 0; dir = str_save (0, "."); safe_buffer_fd (1, 0, O_WRONLY, 0); option = 0; while (1) { o = opt_standard (lim_use_must_malloc, &option, opts, &argc, argv, program_name, usage, version_string, arch_cmd_new_merges_help, opt_help_msg, opt_long_help, opt_version); if (o == opt_none) break; switch (o) { default: safe_printfmt (2, "unhandled option `%s'\n", option->opt_string); panic ("internal error parsing arguments"); usage_error: opt_usage (2, argv[0], program_name, usage, 1); exit (1); /* bogus_arg: */ safe_printfmt (2, "ill-formed argument for `%s' (`%s')\n", option->opt_string, option->arg_string); goto usage_error; case opt_archive: { default_archive = str_save (0, option->arg_string); break; } case opt_dir: { dir = str_save (0, option->arg_string); break; } case opt_reverse: { reverse = 1; break; } } } if (argc > 2) goto usage_error; { t_uchar * tree_root = 0; t_uchar * vsn_spec = 0; t_uchar * archive = 0; t_uchar * version = 0; rel_table answer = rel_table_nil; tree_root = arch_tree_root (0, dir, 0); if (!tree_root) { safe_printfmt (2, "%s: not in project tree (%s)\n", argv[0], dir); exit (1); } if (argc == 2) { vsn_spec = str_save (0, argv[1]); } else { vsn_spec = arch_tree_version (tree_root); if (!vsn_spec) { safe_printfmt (2, "%s: no default tree version\n tree: %s\n", argv[0], tree_root); exit (1); } } if (default_archive) { if (!arch_valid_archive_name (default_archive)) { safe_printfmt (2, "%s: invalid archive name (%s)\n", argv[0], default_archive); exit (1); } } if (!arch_valid_package_name (vsn_spec, arch_maybe_archive, arch_req_version, 0)) { safe_printfmt (2, "%s: invalid version spec (%s)\n", argv[0], vsn_spec); exit (1); } archive = arch_parse_package_name (arch_ret_archive, default_archive, vsn_spec); version = arch_parse_package_name (arch_ret_non_archive, 0, vsn_spec); answer = arch_new_in_version (tree_root, archive, version); if (reverse) arch_sort_table_by_name_field (1, answer, 0); rel_print_table (1, answer); lim_free (0, tree_root); lim_free (0, vsn_spec); lim_free (0, archive); lim_free (0, version); rel_free_table (answer); } lim_free (0, default_archive); lim_free (0, dir); return 0; } /* tag: Tom Lord Tue Jun 3 00:58:26 2003 (new-merges.c) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-id-tagging-method.h0000644000175000017500000000133310457622000021106 0ustar useruser/* cmd-id-tagging-method.h: * **************************************************************** * Copyright (C) 2003 Tom Lord, Stig Brautaset * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__CMDID_TAGGING_METHOD_H #define INCLUDE__LIBARCH__CMDID_TAGGING_METHOD_H #include "hackerlab/machine/types.h" extern t_uchar arch_cmd_id_tagging_method_help[]; /* automatically generated __STDC__ prototypes */ extern int arch_cmd_id_tagging_method (t_uchar * program_name, int argc, char * argv[]); #endif /* INCLUDE__LIBARCH__CMDID_TAGGING_METHOD_H */ /* tag: Stig Brautaset Sat Jun 7 17:28:30 BST 2003 (cmd-tagging-method.h) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-revisions.c0000644000175000017500000001750010457622000017635 0ustar useruser/* cmd-revisions.c * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "config-options.h" #include "hackerlab/cmd/main.h" #include "tla/libarch/patch-logs.h" #include "tla/libarch/namespace.h" #include "tla/libarch/project-tree.h" #include "tla/libarch/my.h" #include "tla/libarch/archive.h" #include "tla/libarch/cmdutils.h" #include "tla/libarch/cmd-revisions.h" static t_uchar * usage = "[options] [version]"; static t_uchar * version_string = (cfg__std__package " from regexps.com\n" "\n" "Copyright 2003 Tom Lord\n" "\n" "This is free software; see the source for copying conditions.\n" "There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\n" "PARTICULAR PURPOSE.\n" "\n" "Report bugs to " cfg__tla_bug_mail ".\n" "\n" cfg__std__release_id_string "\n"); #define OPTS(OP) \ OP (opt_help_msg, "h", "help", 0, \ "Display a help message and exit.") \ OP (opt_long_help, "H", 0, 0, \ "Display a verbose help message and exit.") \ OP (opt_version, "V", "version", 0, \ "Display a release identifier string\n" \ "and exit.") \ OP (opt_archive, "A", "archive", 1, \ "Override `my-default-archive'") \ OP (opt_reverse, "r", "reverse", 0, \ "sort from newest to oldest") \ OP (opt_full, "f", "full", 0, \ "list fully qualified names") \ OP (opt_summary, "s", "summary", 0, \ "print a summary of each patch") \ OP (opt_creator, "c", "creator", 0, \ "print the creator of each patch") \ OP (opt_date, "D", "date", 0, \ "print the date of each patch") t_uchar arch_cmd_revisions_help[] = ("list the revisions in an archive version\n" "Print a list of revisions within an archive version.\n" "\n" "The list is ordinarily sorted from oldest to newest,\n" "but the order can be changed with -r (--reverse).\n" "\n" "With optional arguments specifying patches, list only those\n" "patches, if they exist. If a listed patch does not exist,\n" "exit with status 1. The -r (--reverse) flag has no effect\n" "with optional arguments.\n"); enum options { OPTS (OPT_ENUM) }; static struct opt_desc opts[] = { OPTS (OPT_DESC) {-1, 0, 0, 0, 0} }; int arch_cmd_revisions (t_uchar * program_name, int argc, char * argv[]) { int o; struct opt_parsed * option; t_uchar * default_archive; int reverse; int full; int summary; int creator; int date; int any_headers; default_archive = 0; reverse = 0; full = 0; summary = 0; creator = 0; date = 0; any_headers = 0; safe_buffer_fd (1, 0, O_WRONLY, 0); option = 0; while (1) { o = opt_standard (lim_use_must_malloc, &option, opts, &argc, argv, program_name, usage, version_string, arch_cmd_revisions_help, opt_help_msg, opt_long_help, opt_version); if (o == opt_none) break; switch (o) { default: safe_printfmt (2, "unhandled option `%s'\n", option->opt_string); panic ("internal error parsing arguments"); usage_error: opt_usage (2, argv[0], program_name, usage, 1); exit (1); /* bogus_arg: */ safe_printfmt (2, "ill-formed argument for `%s' (`%s')\n", option->opt_string, option->arg_string); goto usage_error; case opt_archive: { default_archive = str_save (0, option->arg_string); break; } case opt_reverse: { reverse = 1; break; } case opt_full: { full = 1; break; } case opt_summary: { summary = 1; any_headers = 1; break; } case opt_date: { date = 1; any_headers = 1; break; } case opt_creator: { creator = 1; any_headers = 1; break; } } } if (argc > 2) goto usage_error; default_archive = arch_my_default_archive (default_archive); { t_uchar * version_spec = 0; t_uchar * archive = 0; t_uchar * version = 0; struct arch_archive * arch = 0; rel_table revisions = rel_table_nil; if (argc == 2) version_spec = str_save (0, argv[1]); else version_spec = arch_try_tree_version (program_name); if (!arch_valid_package_name (version_spec, arch_maybe_archive, arch_req_version, 0)) { safe_printfmt (2, "%s: invalid version name (%s)\n", argv[0], version_spec); exit (2); } archive = arch_parse_package_name (arch_ret_archive, default_archive, version_spec); version = arch_parse_package_name (arch_ret_package_version, 0, version_spec); arch = arch_archive_connect (archive, 0); if (argc == 2) arch_check_for (arch, arch_req_version, version); revisions = arch_archive_revisions (arch, version, full); if (reverse) { if (full) arch_sort_table_by_name_field (1, revisions, 0); else arch_sort_table_by_patch_level_field (1, revisions, 0); } if (!any_headers) rel_print_table (1, revisions); else { int x; for (x = 0; x < rel_n_records (revisions); ++x) { t_uchar * package_patch_level = 0; t_uchar * log; assoc_table headers = 0; t_uchar * body = 0; if (full) package_patch_level = arch_parse_package_name (arch_ret_non_archive, 0, rel_peek_str (revisions, x, 0)); else package_patch_level = str_alloc_cat_many (0, version, "--", rel_peek_str (revisions, x, 0), str_end); log = arch_archive_log (arch, package_patch_level); arch_parse_log (0, &headers, (const t_uchar **)&body, log); safe_printfmt (1, "%s\n", rel_peek_str (revisions, x, 0)); if (date) { const t_uchar * d; d = assoc_get_str_taking (headers, rel_make_field_str ("standard-date")); safe_printfmt (1, " %s\n", (d ? d : (t_uchar *)"")); } if (creator) { const t_uchar * c; c = assoc_get_str_taking (headers, rel_make_field_str ("creator")); safe_printfmt (1, " %s\n", (c ? c : (t_uchar *)"")); } if (summary) { const t_uchar * s; s = assoc_get_str_taking (headers, rel_make_field_str ("summary")); safe_printfmt (1, " %s\n", (s ? s : (t_uchar *)"")); } safe_flush (1); lim_free (0, package_patch_level); free_assoc_table (headers); lim_free (0, body); } } lim_free (0, version_spec); lim_free (0, archive); lim_free (0, version); arch_archive_close (arch); rel_free_table (revisions); } return 0; } /* tag: Tom Lord Tue May 20 15:39:49 2003 (revisions.c) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-categories.c0000644000175000017500000000725210457622000017744 0ustar useruser/* categories.c * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "config-options.h" #include "hackerlab/cmd/main.h" #include "tla/libarch/namespace.h" #include "tla/libarch/project-tree.h" #include "tla/libarch/my.h" #include "tla/libarch/archive.h" #include "tla/libarch/cmd.h" #include "tla/libarch/cmd-categories.h" static t_uchar * usage = "[options] [archive]"; static t_uchar * version_string = (cfg__std__package " from regexps.com\n" "\n" "Copyright 2003 Tom Lord\n" "\n" "This is free software; see the source for copying conditions.\n" "There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\n" "PARTICULAR PURPOSE.\n" "\n" "Report bugs to " cfg__tla_bug_mail ".\n" "\n" cfg__std__release_id_string "\n"); #define OPTS(OP) \ OP (opt_help_msg, "h", "help", 0, \ "Display a help message and exit.") \ OP (opt_long_help, "H", 0, 0, \ "Display a verbose help message and exit.") \ OP (opt_version, "V", "version", 0, \ "Display a release identifier string\n" \ "and exit.") \ OP (opt_archive, "A", "archive", 1, \ "Override `my-default-archive'") t_uchar arch_cmd_categories_help[] = ("list the categories in an archive\n" "Print a list of the categories present in an archive.\n"); enum options { OPTS (OPT_ENUM) }; static struct opt_desc opts[] = { OPTS (OPT_DESC) {-1, 0, 0, 0, 0} }; int arch_cmd_categories (t_uchar * program_name, int argc, char * argv[]) { int o; struct opt_parsed * option; t_uchar * default_archive = 0; t_uchar * archive = 0; safe_buffer_fd (1, 0, O_WRONLY, 0); option = 0; while (1) { o = opt_standard (lim_use_must_malloc, &option, opts, &argc, argv, program_name, usage, version_string, arch_cmd_categories_help, opt_help_msg, opt_long_help, opt_version); if (o == opt_none) break; switch (o) { default: safe_printfmt (2, "unhandled option `%s'\n", option->opt_string); panic ("internal error parsing arguments"); usage_error: opt_usage (2, argv[0], program_name, usage, 1); exit (1); /* bogus_arg: */ safe_printfmt (2, "ill-formed argument for `%s' (`%s')\n", option->opt_string, option->arg_string); goto usage_error; case opt_archive: { lim_free (0, default_archive); default_archive = str_save (0, option->arg_string); break; } } } if (argc > 2) goto usage_error; if (argc == 2) archive = str_save (0, argv[1]); else archive = arch_my_default_archive (default_archive); if (!arch_valid_archive_name (archive)) { if (archive) safe_printfmt (2, "%s: invalid archive name (%s)\n", argv[0], archive); else safe_printfmt (2, "%s: no default archive set\n", argv[0]); exit (1); } { struct arch_archive * arch = 0; rel_table cats = rel_table_nil; arch = arch_archive_connect (archive, 0); cats = arch_archive_categories (arch); rel_print_table (1, cats); } return 0; } /* tag: Tom Lord Tue May 20 13:57:39 2003 (categories.c) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-add-log-version.h0000644000175000017500000000126310457622000020612 0ustar useruser/* cmd-add-log-version.h: * **************************************************************** * Copyright (C) 2003 Tom Lord, Stig Brautaset * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__CMD_ADD_LOG_H #define INCLUDE__LIBARCH__CMD_ADD_LOG_H #include "hackerlab/machine/types.h" extern t_uchar arch_cmd_add_log_version_help[]; /* automatically generated __STDC__ prototypes */ extern int arch_cmd_add_log_version (t_uchar * program_name, int argc, char * argv[]); #endif /* INCLUDE__LIBARCH__CMD_ADD_LOG_H */ /* tag: Stig Brautaset Sat Jun 7 11:50:07 BST 2003 (cmd-add-log.h) */ tla-1.3.5+dfsg/src/tla/libarch/apply-changeset.c0000644000175000017500000030503310457622000020140 0ustar useruser/* apply-changeset.c: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "config-options.h" #include "hackerlab/bugs/panic.h" #include "hackerlab/machine/types.h" #include "hackerlab/os/errno.h" #include "hackerlab/os/errno-to-string.h" #include "hackerlab/os/limits.h" #include "hackerlab/os/sys/types.h" #include "hackerlab/os/sys/wait.h" #include "hackerlab/os/signal.h" #include "hackerlab/mem/mem.h" #include "hackerlab/arrays/ar.h" #include "hackerlab/char/str.h" #include "hackerlab/fmt/cvt.h" #include "hackerlab/fs/file-names.h" #include "hackerlab/fs/cwd.h" #include "hackerlab/vu/safe.h" #include "hackerlab/char/pika-escaping-utils.h" #include "tla/libfsutils/link-target.h" #include "tla/libfsutils/read-line.h" #include "tla/libfsutils/tmp-files.h" #include "tla/libfsutils/rmrf.h" #include "tla/libfsutils/ensure-dir.h" #include "tla/libfsutils/copy-file.h" #include "tla/libarch/diffs.h" #include "tla/libawk/associative.h" #include "tla/libawk/relassoc.h" #include "tla/libarch/changelogs.h" #include "tla/libarch/project-tree.h" #include "tla/libarch/changeset-utils.h" #include "tla/libarch/exec.h" #include "tla/libarch/apply-changeset.h" struct running_inventory_assocs { assoc_table dir_loc_of; assoc_table dir_id_of; assoc_table file_loc_of; assoc_table file_id_of; }; /* __STDC__ prototypes for static functions */ static const t_uchar * no_dot (const t_uchar * name); static void invoke_apply_changeset_callback (struct arch_apply_changeset_report * r, const t_uchar * fmt, ...); static t_uchar * set_aside_shuffled_dirs (rel_table * file_set_aside_with, rel_table * dir_set_aside_with, const t_uchar * target_loc, const t_uchar * id, int seq_n, const t_uchar * dest_root, struct running_inventory_assocs * running, const t_uchar * target, struct arch_changeset_inventory * inv); static void preserve_old_patch_spew (const t_uchar * dest_root, const t_uchar * target, const t_uchar * loc); static int deferred_conflict (rel_table * deferred_conflicts, const t_uchar * spew_root, const t_uchar * target, const t_uchar * loc, const t_uchar * orig_copy); static int dir_depth_cmp (const t_uchar * a, const t_uchar * b); static void analyze_install (struct running_inventory_assocs * running, int is_dir, t_uchar ** target_has_dir, t_uchar ** install_dir, t_uchar ** install_name, t_uchar ** install_loc, const t_uchar * target, const t_uchar * mod_loc, const t_uchar * id, assoc_table mod_dir_id_of, rel_table file_set_aside_with, rel_table dir_set_aside_with); static void ensure_directory_eliminating_conflicts (rel_table * deferred_conflicts, const t_uchar * spew_root, const t_uchar * target_has_path, const t_uchar * dir, const t_uchar * target); static int run_diff3 (const t_uchar * basename, const t_uchar * mine_path, const t_uchar * older_path, const t_uchar * yours_path); static int run_patch (int apply_in_reverse, int forward_opt_to_patch, const char * patch_path, const char * tree_file_base, const char * original_inode_name); static void save_patch_for_missing_file (const t_uchar * missing_patch_dir, const t_uchar * patch_path, const t_uchar * mod_loc); int arch_conflicts_occured (struct arch_apply_changeset_report * r) { return (rel_n_records (r->conflict_files) || rel_n_records (r->conflict_dirs) || rel_n_records (r->metadata_conflict_files) || rel_n_records (r->metadata_conflict_dirs)); } void arch_free_apply_changeset_report_data (struct arch_apply_changeset_report * r) { rel_free_table (r->removed_files); rel_free_table (r->removed_dirs); rel_free_table (r->missing_removed_files); rel_free_table (r->missing_removed_dirs); rel_free_table (r->missing_renamed_files); rel_free_table (r->missing_renamed_dirs); rel_free_table (r->new_dirs); rel_free_table (r->renamed_dirs); rel_free_table (r->new_files); rel_free_table (r->renamed_files); rel_free_table (r->modified_files); rel_free_table (r->modified_dirs); rel_free_table (r->missing_file_for_patch); rel_free_table (r->missing_dir_for_patch); rel_free_table (r->meta_modified_files); rel_free_table (r->meta_modified_dirs); rel_free_table (r->missing_file_for_meta_patch); rel_free_table (r->missing_dir_for_meta_patch); rel_free_table (r->conflict_files); rel_free_table (r->conflict_dirs); rel_free_table (r->metadata_conflict_files); rel_free_table (r->metadata_conflict_dirs); } static const t_uchar * no_dot (const t_uchar * name) { if (name[0] == '.' && name[1] == '/') return name + 2; else return name; } static int cut_fields_2_4_3_0[] = { 2, 4, 3, 0, -1 }; void arch_apply_changeset (struct arch_apply_changeset_report * r, const t_uchar * changeset_spec, const t_uchar * target_spec, enum arch_id_tagging_method method, enum arch_inventory_category untagged_source_category, int reverse, int forward, int use_diff3, assoc_table older_table, assoc_table yours_table, int escape_classes) { int x; int here_fd; assoc_table mod_dir_id_of = 0; assoc_table new_dir_perms = 0; t_uchar * changeset_path = 0; t_uchar * target = 0; t_uchar * missing_patch_dir = 0; t_uchar * tree_root = 0; int full_meta = 0; struct arch_changeset_report changeset; struct arch_changeset_inventory inventory; struct arch_changeset_inventory inventory_by_name; rel_table removed_files_index = rel_table_nil; t_uchar * tmp_removed_files_root = 0; rel_table renamed_files_index = rel_table_nil; rel_table present_renamed_files_index = rel_table_nil; /* [0] tgtloc [1] origloc [2] modloc [3] id */ t_uchar * tmp_renamed_files_root = 0; rel_table renamed_dirs_index = rel_table_nil; rel_table present_renamed_dirs_index = rel_table_nil; /* [0] tgtloc [1] origloc [2] modloc [3] id [4] tmp_name (sort -r [0])*/ rel_table removed_dirs_index = rel_table_nil; rel_table present_removed_dirs_index = rel_table_nil; /* [0] tgtloc [1] id [2] tmp_name (sort -r [0]) */ t_uchar * tmp_shuffled_dirs_root = 0; rel_table dir_set_aside_with_dir_id = rel_table_nil; /* [0] shuffled-dir-id [1] rel-loc-in-shuffled-dir [2] id */ rel_table file_set_aside_with_dir_id = rel_table_nil; /* [0] shuffled-dir-id [1] rel-loc-in-shuffled-dir [2] id */ t_uchar * removed_patch_conflict_files_path = 0; struct running_inventory_assocs running = {0, 0, 0, 0}; rel_table install_dirs_plan = rel_table_nil; /* [0] modloc [1] path-or-empty-str [2] id [3] oldtgtloc */ rel_table deferred_conflicts = rel_table_nil; /* [0] final target location */ rel_table added_files_and_symlinks = rel_table_nil; rel_table patched_changelogs = rel_table_nil; /* [0] final-loc [1] id [2] target_path */ here_fd = safe_open (".", O_RDONLY, 0); safe_chdir (changeset_spec); changeset_path = safe_current_working_directory (); safe_fchdir (here_fd); safe_chdir (target_spec); target = safe_current_working_directory (); tree_root = arch_tree_root (0, ".", 0); safe_fchdir (here_fd); full_meta = arch_tree_has_meta_flag (tree_root); missing_patch_dir = tmp_seq_file (tree_root, "++patches-missing-files"); /**************************************************************** * Read and study the changeset. */ mem_set0 ((t_uchar *)&changeset, sizeof (changeset)); arch_evaluate_changeset (&changeset, changeset_path); if (reverse) { arch_reverse_changeset (&changeset); } mod_dir_id_of = rel_to_assoc (changeset.mod_dirs_index, 0, 1); new_dir_perms = rel_to_assoc (changeset.added_dirs, 0, 2); /**************************************************************** * Inventory the target tree. */ mem_set0 ((t_uchar *)&inventory, sizeof (inventory)); arch_changeset_inventory (&inventory, tree_root, target, method, untagged_source_category, escape_classes); mem_set0 ((t_uchar *)&inventory_by_name, sizeof (inventory_by_name)); inventory_by_name.dirs = rel_copy_table (inventory.dirs); rel_sort_table_by_field (0, inventory_by_name.dirs, 0); inventory_by_name.files = rel_copy_table (inventory.files); rel_sort_table_by_field (0, inventory_by_name.files, 0); /**************************************************************** * Build assoc tables of the inventory. * * These will be kept up-to-date as files and dirs get * deleted, added, and renamed. */ running.dir_loc_of = rel_to_assoc (inventory.dirs, 1, 0); running.dir_id_of = rel_to_assoc (inventory.dirs, 0, 1); running.file_loc_of = rel_to_assoc (inventory.files, 1, 0); running.file_id_of = rel_to_assoc (inventory.files, 0, 1); assoc_set_taking (&running.dir_id_of, rel_make_field_str ("."), rel_make_field_str ("?_.")); assoc_set_taking (&running.dir_loc_of, rel_make_field_str ("?_."), rel_make_field_str (".")); /**************************************************************** * Set aside and delete removed files. */ removed_files_index = rel_copy_table (changeset.removed_files); rel_append_x (&removed_files_index, changeset.removed_symlinks); rel_sort_table_by_field (0, removed_files_index, 1); r->removed_files = rel_join (-1, rel_join_output (2,0, 2,1, -1), 1, 1, removed_files_index, inventory.files); r->missing_removed_files = rel_join (1, rel_join_output (1,0, 1,1, -1), 1, 1, removed_files_index, inventory.files); rel_sort_table_by_field (0, r->removed_files, 0); rel_sort_table_by_field (0, r->missing_removed_files, 0); tmp_removed_files_root = tmp_file_name (target, ",,tmp-removed-files"); rmrf_file (tmp_removed_files_root); safe_mkdir (tmp_removed_files_root, 0777); for (x = 0; x < rel_n_records (r->removed_files); ++x) { rel_field target_loc_field; rel_field target_id_field; const t_uchar * target_loc = 0; const t_uchar * target_id = 0; t_uchar * target_path = 0; t_uchar * dest_path = 0; t_uchar * dest_dir = 0; t_uchar * escaped_tmp = 0; target_loc_field = rel_get_field (r->removed_files, x, 0); target_loc = rel_field_str (target_loc_field); target_id_field = rel_get_field (r->removed_files, x, 1); target_id = rel_field_str (target_id_field); target_path = file_name_in_vicinity (0, target, target_loc); dest_path = file_name_in_vicinity (0, tmp_removed_files_root, target_loc); dest_dir = file_name_directory_file (0, dest_path); escaped_tmp = pika_save_escape_iso8859_1 (0, 0, escape_classes, target_loc); invoke_apply_changeset_callback (r, "D %s\n", no_dot (escaped_tmp)); ensure_directory_exists (dest_dir); safe_rename (target_path, dest_path); assoc_del_taking (running.file_id_of, rel_field_ref (target_loc_field)); assoc_del_taking (running.file_loc_of, rel_field_ref (target_id_field)); rel_field_unref (target_loc_field); rel_field_unref (target_id_field); lim_free (0, escaped_tmp); lim_free (0, target_path); lim_free (0, dest_path); lim_free (0, dest_dir); } /**************************************************************** * Set aside renamed files. */ renamed_files_index = rel_copy_table (changeset.renamed_files); rel_sort_table_by_field (0, renamed_files_index, 2); present_renamed_files_index = rel_join (-1, rel_join_output (2,0, 1,0, 1,1, 2,1, -1), 2, 1, renamed_files_index, inventory.files); r->missing_renamed_files = rel_join (1, rel_join_output (1,0, 1,1, 1,2, -1), 2, 1, renamed_files_index, inventory.files); for (x = 0; x < rel_n_records (r->missing_renamed_files); ++x) { t_uchar * escaped_tmp0; t_uchar * escaped_tmp1; escaped_tmp0 = pika_save_escape_iso8859_1 (0, 0, escape_classes, rel_peek_str (r->missing_renamed_files, x, 0)); escaped_tmp1 = pika_save_escape_iso8859_1 (0, 0, escape_classes, rel_peek_str (r->missing_renamed_files, x, 1)); invoke_apply_changeset_callback (r, "?r %s\n => %s\n", no_dot (escaped_tmp0), no_dot (escaped_tmp1)); lim_free (0, escaped_tmp1); lim_free (0, escaped_tmp0); } rel_sort_table_by_field (0, r->missing_removed_files, 0); tmp_renamed_files_root = tmp_file_name (target, ",,tmp-renamed-files"); rmrf_file (tmp_renamed_files_root); safe_mkdir (tmp_renamed_files_root, 0777); for (x = 0; x < rel_n_records (present_renamed_files_index); ++x) { rel_field target_loc_field; rel_field target_id_field; const t_uchar * target_loc = 0; const t_uchar * target_id = 0; t_uchar * target_path = 0; t_uchar * dest_path = 0; t_uchar * dest_dir = 0; target_loc_field = rel_get_field (present_renamed_files_index, x, 0); target_loc = rel_field_str (target_loc_field); target_id_field = rel_get_field (present_renamed_files_index, x, 3); target_id = rel_field_str (target_id_field); target_path = file_name_in_vicinity (0, target, target_loc); dest_path = file_name_in_vicinity (0, tmp_renamed_files_root, target_loc); dest_dir = file_name_directory_file (0, dest_path); ensure_directory_exists (dest_dir); safe_rename (target_path, dest_path); assoc_del_taking (running.file_id_of, rel_field_ref (target_loc_field)); assoc_del_taking (running.file_loc_of, rel_field_ref (target_id_field)); rel_field_unref (target_loc_field); rel_field_unref (target_id_field); lim_free (0, target_path); lim_free (0, dest_path); lim_free (0, dest_dir); } /**************************************************************** * Set Aside Renamed and Removed Directories */ renamed_dirs_index = rel_copy_table (changeset.renamed_dirs); rel_sort_table_by_field (0, renamed_dirs_index, 2); present_renamed_dirs_index = rel_join (-1, rel_join_output (2,0, 1,0, 1,1, 1,2, -1), 2, 1, renamed_dirs_index, inventory.dirs); rel_sort_table_by_field (1, present_renamed_dirs_index, 0); r->missing_renamed_dirs = rel_join (1, rel_join_output (1,0, 1,1, 1,2, -1), 2, 1, renamed_dirs_index, inventory.dirs); rel_sort_table_by_field (0, r->missing_renamed_dirs, 0); for (x = 0; x < rel_n_records (r->missing_renamed_dirs); ++x) { t_uchar * escaped_tmp0; t_uchar * escaped_tmp1; escaped_tmp0 = pika_save_escape_iso8859_1 (0, 0, escape_classes, rel_peek_str (r->missing_renamed_dirs, x, 0)); escaped_tmp1 = pika_save_escape_iso8859_1 (0, 0, escape_classes, rel_peek_str (r->missing_renamed_dirs, x, 1)); invoke_apply_changeset_callback (r, "?r/ %s\n => %s\n", no_dot (escaped_tmp0), no_dot (escaped_tmp1)); lim_free (0, escaped_tmp1); lim_free (0, escaped_tmp0); } removed_dirs_index = rel_copy_table (changeset.removed_dirs); rel_sort_table_by_field (0, removed_dirs_index, 1); present_removed_dirs_index = rel_join (-1, rel_join_output (2,0, 2,1, -1), 1, 1, removed_dirs_index, inventory.dirs); rel_sort_table_by_field (1, present_removed_dirs_index, 0); r->missing_removed_dirs = rel_join (1, rel_join_output (1,0, 1,1, -1), 1, 1, removed_dirs_index, inventory.dirs); rel_sort_table_by_field (0, r->missing_removed_dirs, 0); tmp_shuffled_dirs_root = tmp_file_name (target, ",,tmp-shuffled-dirs"); rmrf_file (tmp_shuffled_dirs_root); safe_mkdir (tmp_shuffled_dirs_root, 0777); /* It's important to set aside shuffled dirs from deepest * to shallowest. */ { int seq; int ren_pos; int rem_pos; seq = 0; ren_pos = 0; rem_pos = 0; while (1) { int ren_done; int rem_done; int ren_first; rel_field target_loc_field; rel_field id_field; const t_uchar * target_loc; const t_uchar * id; rel_table dest_table; ssize_t dest_row; t_uchar * tmp_name; ren_done = (ren_pos >= rel_n_records (present_renamed_dirs_index)); rem_done = (rem_pos >= rel_n_records (present_removed_dirs_index)); if (ren_done && rem_done) break; ren_first = (rem_done || (!ren_done && (0 < str_cmp (rel_peek_str (present_renamed_dirs_index, ren_pos, 0), rel_peek_str (present_removed_dirs_index, rem_pos, 0))))); if (ren_first) { target_loc = rel_peek_str (present_renamed_dirs_index, ren_pos, 0); id = rel_peek_str (present_renamed_dirs_index, ren_pos, 3); dest_table = present_renamed_dirs_index; dest_row = ren_pos; ++ren_pos; } else { t_uchar * escaped_tmp; target_loc_field = rel_get_field (present_removed_dirs_index, rem_pos, 0); target_loc = rel_field_str (target_loc_field); id_field = rel_get_field (present_removed_dirs_index, rem_pos, 1); id = rel_field_str (id_field); dest_table = present_removed_dirs_index; dest_row = rem_pos; ++rem_pos; escaped_tmp = pika_save_escape_iso8859_1 (0, 0, escape_classes, target_loc); invoke_apply_changeset_callback (r, "D/ %s\n", no_dot (escaped_tmp)); lim_free (0, escaped_tmp); rel_add_records (&r->removed_dirs, rel_make_record_2_taking (target_loc_field, id_field), rel_record_null); } tmp_name = set_aside_shuffled_dirs (&file_set_aside_with_dir_id, &dir_set_aside_with_dir_id, target_loc, id, seq, tmp_shuffled_dirs_root, &running, target, &inventory); ++seq; rel_add_field_to_row_taking (dest_table, dest_row, rel_make_field_str (tmp_name)); lim_free (0, tmp_name); } rel_sort_table_by_field (0, r->removed_dirs, 0); rel_sort_table_by_field (0, dir_set_aside_with_dir_id, 0); rel_sort_table_by_field (0, file_set_aside_with_dir_id, 0); } /**************************************************************** * Make a name for a dir in which to stash removed .rej and .orig files */ removed_patch_conflict_files_path = tmp_file_name (target, "+removed-conflict-files"); /**************************************************************** * What we have: * * We have the target tree, with all renamed/removed dirs and files * set aside. * * The removed files are all under $tmp_removed_files_root/$tgtloc. * * The renamed files are all under $tmp_renamed_files_root/$tgtloc. * * (in both of the above cases, $tgtloc is the original target loc) * * Both the renamed and removed directories are set aside * in $tmp_shuffled_dirs_root under integer filenames. * The tmp_name fields of present_renamed_dirs_index and * present_renamed_dirs_index are full paths to these temp * names. * * Todo: * * We have to install renamed and new directories, from shallowest to * deepest, then install renamed and new files (in any order). * * Each installed item has a destination path that has, in essense, * three parts: * * $tgthas / $newrelpath / $basename * * where $tgthas is the deepest part of the destination path that * the target tree already has when the item is installed, * $newrelpath are additional intermediate directories that need to * be created (possibly causing conflicts) and $basename is the final * name for the item (possibly causing a conflict). * * That three part path is derived from the $modloc of the item * by finding the deepest containing directory in $modloc which * is present (by id) in $target (that's $tgthas). * * In the code that follows: * * tgthas == $tgthas * install_dir == $tgthas / $newrelpath * install_name == $tgthas / $newrelpath / $basename * * Finally, then, we have to apply individual file and dir patches. */ /**************************************************************** * Compute an install plan for new and renamed directories. * * We have to add or rename containing dirs before contained. * * So, we need a plan for that. */ install_dirs_plan = rel_cut (cut_fields_2_4_3_0, present_renamed_dirs_index); for (x = 0; x < rel_n_records (changeset.added_dirs); ++x) { rel_add_records (&install_dirs_plan, rel_make_record_3_taking (rel_get_field (changeset.added_dirs, x, 0), rel_make_field_str (""), rel_get_field (changeset.added_dirs, x, 1)), rel_record_null); } rel_sort_table_by_field_fn (0, install_dirs_plan, 0, dir_depth_cmp); /**************************************************************** * Install dirs. */ for (x = 0; x < rel_n_records (install_dirs_plan); ++x) { rel_field mod_loc_field; rel_field take_from_field; rel_field id_field; const t_uchar * mod_loc; const t_uchar * take_from; const t_uchar * id; t_uchar * target_has_dir = 0; t_uchar * target_has_path = 0; t_uchar * install_dir = 0; t_uchar * install_name = 0; t_uchar * install_loc = 0; mod_loc_field = rel_get_field (install_dirs_plan, x, 0); mod_loc = rel_field_str (mod_loc_field); take_from_field = rel_get_field (install_dirs_plan, x, 1); take_from = rel_field_str (take_from_field); id_field = rel_get_field (install_dirs_plan, x, 2); id = rel_field_str (id_field); if (!*take_from) take_from = 0; analyze_install (&running, 1, &target_has_dir, &install_dir, &install_name, &install_loc, target, mod_loc, id, mod_dir_id_of, file_set_aside_with_dir_id, dir_set_aside_with_dir_id); if (!str_cmp (target_has_dir, ".")) target_has_path = str_save (0, target); else target_has_path = file_name_in_vicinity (0, target, 2 + target_has_dir); /* over "./" */ ensure_directory_eliminating_conflicts (&deferred_conflicts, removed_patch_conflict_files_path, target_has_path, install_dir, target); if (!take_from) { if (!safe_file_is_directory (install_name)) { int trust_umask = 0; const t_uchar * perms_str; unsigned long perms; long uid; long gid; t_uchar * escaped_tmp = 0; perms_str = assoc_get_str_taking (new_dir_perms, rel_field_ref (mod_loc_field)); if (!perms_str) { perms = 0777; trust_umask = 1; uid = -1; gid = -1; } perms = arch_parse_permissions_params (&uid, &gid, perms_str); if (full_meta) { perms = (perms & 07777); } else { perms = (perms & 0777); } escaped_tmp = pika_save_escape_iso8859_1 (0, 0, escape_classes, install_loc); if (!deferred_conflict (&deferred_conflicts, removed_patch_conflict_files_path, target, install_loc, 0)) { invoke_apply_changeset_callback (r, "A/ %s\n", no_dot (escaped_tmp)); rel_add_records (&r->new_dirs, rel_make_record_2_taking (rel_make_field_str (install_loc), rel_field_ref (id_field)), rel_record_null); } else { invoke_apply_changeset_callback (r, "CA/ %s\n", no_dot (escaped_tmp)); rel_add_records (&r->conflict_dirs, rel_make_record_2_taking (rel_make_field_str (install_loc), rel_field_ref (id_field)), rel_record_null); } safe_mkdir (install_name, perms); if (!trust_umask) { safe_chmod (install_name, perms); if (full_meta && (uid > 0) && (gid > 0)) safe_chown (install_name, uid, gid); } lim_free (0, escaped_tmp); } } else { rel_field oldtgtloc_field; const t_uchar * oldtgtloc; t_uchar * escaped_tmp0 = 0; t_uchar * escaped_tmp1 = 0; oldtgtloc_field = rel_get_field (install_dirs_plan, x, 3); oldtgtloc = rel_field_str (oldtgtloc_field); escaped_tmp0 = pika_save_escape_iso8859_1 (0, 0, escape_classes, oldtgtloc); escaped_tmp1 = pika_save_escape_iso8859_1 (0, 0, escape_classes, install_loc); if (!deferred_conflict (&deferred_conflicts, removed_patch_conflict_files_path, target, install_loc, 0)) { invoke_apply_changeset_callback (r, "/> %s\t%s\n", escaped_tmp0, no_dot (escaped_tmp1)); rel_add_records (&r->renamed_dirs, rel_make_record_3_taking (rel_field_ref (oldtgtloc_field), rel_make_field_str (install_loc), id_field), rel_record_null); } else { invoke_apply_changeset_callback (r, "C/> %s\t%s\n", escaped_tmp0, no_dot (escaped_tmp1)); rel_add_records (&r->conflict_dirs, rel_make_record_2_taking (rel_make_field_str (install_loc), rel_field_ref (id_field)), rel_record_null); } rel_field_unref (oldtgtloc_field); safe_rename (take_from, install_name); lim_free (0, escaped_tmp1); lim_free (0, escaped_tmp0); } rel_field_unref (mod_loc_field); rel_field_unref (take_from_field); rel_field_unref (id_field); lim_free (0, target_has_dir); lim_free (0, target_has_path); lim_free (0, install_dir); lim_free (0, install_name); lim_free (0, install_loc); } rel_sort_table_by_field (0, r->new_dirs, 0); rel_sort_table_by_field (0, r->renamed_dirs, 0); /**************************************************************** * Install Renamed Files and Symlinks */ for (x = 0; x < rel_n_records (present_renamed_files_index); ++x) { rel_field old_target_loc_field; rel_field mod_loc_field; rel_field id_field; const t_uchar * old_target_loc; const t_uchar * mod_loc; const t_uchar * id; t_uchar * take_from = 0; t_uchar * target_has_dir = 0; t_uchar * install_dir = 0; t_uchar * install_name = 0; t_uchar * install_loc = 0; t_uchar * target_has_path = 0; t_uchar * escaped_tmp0 = 0; t_uchar * escaped_tmp1 = 0; old_target_loc_field = rel_get_field (present_renamed_files_index, x, 0); old_target_loc = rel_field_str (old_target_loc_field); mod_loc_field = rel_get_field (present_renamed_files_index, x, 2); mod_loc = rel_field_str (mod_loc_field); id_field = rel_get_field (present_renamed_files_index, x, 3); id = rel_field_str (id_field); take_from = file_name_in_vicinity (0, tmp_renamed_files_root, old_target_loc); analyze_install (&running, 0, &target_has_dir, &install_dir, &install_name, &install_loc, target, mod_loc, id, mod_dir_id_of, rel_table_nil, rel_table_nil); if (!str_cmp (target_has_dir, ".")) target_has_path = str_save (0, target); else target_has_path = file_name_in_vicinity (0, target, 2 + target_has_dir); /* over "./" */ ensure_directory_eliminating_conflicts (&deferred_conflicts, removed_patch_conflict_files_path, target_has_path, install_dir, target); escaped_tmp0 = pika_save_escape_iso8859_1 (0, 0, escape_classes, old_target_loc); escaped_tmp1 = pika_save_escape_iso8859_1 (0, 0, escape_classes, install_loc); if (!deferred_conflict (&deferred_conflicts, removed_patch_conflict_files_path, target, install_loc, 0)) { invoke_apply_changeset_callback (r, "=> %s\t%s\n", escaped_tmp0, no_dot (escaped_tmp1)); rel_add_records (&r->renamed_files, rel_make_record_3_taking (rel_field_ref (old_target_loc_field), rel_make_field_str (install_loc), rel_field_ref (id_field)), rel_record_null); } else { invoke_apply_changeset_callback (r, "C=> %s\t%s\n", escaped_tmp0, no_dot (escaped_tmp1)); rel_add_records (&r->conflict_files, rel_make_record_2_taking (rel_make_field_str (install_loc), rel_field_ref (id_field)), rel_record_null); } safe_rename (take_from, install_name); rel_field_unref (old_target_loc_field); rel_field_unref (mod_loc_field); rel_field_unref (id_field); lim_free (0, escaped_tmp1); lim_free (0, escaped_tmp0); lim_free (0, take_from); lim_free (0, target_has_dir); lim_free (0, install_dir); lim_free (0, install_name); lim_free (0, install_loc); lim_free (0, target_has_path); } added_files_and_symlinks = rel_copy_table (changeset.added_files); rel_append_x (&added_files_and_symlinks, changeset.added_symlinks); for (x = 0; x < rel_n_records (added_files_and_symlinks); ++x) { const t_uchar * mod_loc; rel_field id_field; const t_uchar * id; const t_uchar * take_from; t_uchar * target_has_dir = 0; t_uchar * install_dir = 0; t_uchar * install_name = 0; t_uchar * install_loc = 0; t_uchar * target_has_path = 0; t_uchar * escaped_tmp = 0; mod_loc = rel_peek_str (added_files_and_symlinks, x, 0); id_field = rel_get_field (added_files_and_symlinks, x, 1); id = rel_field_str (id_field); take_from = rel_peek_str (added_files_and_symlinks, x, 2); analyze_install (&running, 0, &target_has_dir, &install_dir, &install_name, &install_loc, target, mod_loc, id, mod_dir_id_of, rel_table_nil, rel_table_nil); if (!str_cmp (target_has_dir, ".")) target_has_path = str_save (0, target); else target_has_path = file_name_in_vicinity (0, target, 2 + target_has_dir); /* over "./" */ ensure_directory_eliminating_conflicts (&deferred_conflicts, removed_patch_conflict_files_path, target_has_path, install_dir, target); escaped_tmp = pika_save_escape_iso8859_1 (0, 0, escape_classes, install_loc); if (!deferred_conflict (&deferred_conflicts, removed_patch_conflict_files_path, target, install_loc, take_from)) { invoke_apply_changeset_callback (r, "A %s\n", no_dot (escaped_tmp)); rel_add_records (&r->new_files, rel_make_record_2_taking (rel_make_field_str (install_loc), rel_field_ref (id_field)), rel_record_null); } else { invoke_apply_changeset_callback (r, "CA %s\n", no_dot (escaped_tmp)); rel_add_records (&r->conflict_files, rel_make_record_2_taking (rel_make_field_str (install_loc), rel_field_ref (id_field)), rel_record_null); } copy_file_or_symlink (take_from, install_name); copy_permissions (take_from, install_name, full_meta); rel_field_unref (id_field); lim_free (0, escaped_tmp); lim_free (0, target_has_dir); lim_free (0, install_dir); lim_free (0, install_name); lim_free (0, install_loc); lim_free (0, target_has_path); } rel_sort_table_by_field (0, r->renamed_files, 0); /**************************************************************** * Patch Regular Files */ for (x = 0; x < rel_n_records (changeset.patched_regular_files); ++x) { rel_field mod_loc_field; rel_field id_field; rel_field target_loc_field; const t_uchar * mod_loc; const t_uchar * id; const t_uchar * target_loc; t_uchar * patch_path = 0; t_uchar * target_path = 0; t_uchar * escaped_tmp = 0; struct stat target_stat; patch_path = str_alloc_cat (0, rel_peek_str (changeset.patched_regular_files, x, 2), ".patch"); mod_loc_field = rel_get_field (changeset.patched_regular_files, x, 0); mod_loc = rel_field_str (mod_loc_field); id_field = rel_get_field (changeset.patched_regular_files, x, 1); id = rel_field_str (id_field); target_loc_field = assoc_get_taking (running.file_loc_of, rel_field_ref (id_field)); target_loc = rel_field_str (target_loc_field); if (!target_loc) { escaped_tmp = pika_save_escape_iso8859_1 (0, 0, escape_classes, mod_loc); invoke_apply_changeset_callback (r, "?M %s\n", no_dot (escaped_tmp)); rel_add_records (&r->missing_file_for_patch, rel_make_record_2_taking (rel_field_ref (mod_loc_field), rel_field_ref (id_field)), rel_record_null); save_patch_for_missing_file (missing_patch_dir, patch_path, mod_loc); lim_free (0, escaped_tmp); continue; } target_path = file_name_in_vicinity (0, target, target_loc); safe_lstat (target_path, &target_stat); preserve_old_patch_spew (removed_patch_conflict_files_path, target, target_loc); if (S_ISLNK (target_stat.st_mode)) { t_uchar * orig_name; t_uchar * rej_name; orig_name = str_alloc_cat (0, target_path, ".orig"); rej_name = str_alloc_cat (0, target_path, ".rej"); safe_rename (target_path, orig_name); copy_file (patch_path, rej_name); copy_permissions (patch_path, rej_name, full_meta); escaped_tmp = pika_save_escape_iso8859_1 (0, 0, escape_classes, target_loc); invoke_apply_changeset_callback (r, "C-> %s\n", no_dot (escaped_tmp)); rel_add_records (&r->conflict_files, rel_make_record_2_taking (rel_field_ref (target_loc_field), rel_field_ref (id_field)), rel_record_null); lim_free (0, escaped_tmp); } else if (arch_id_indicates_changelog (id)) { rel_add_records (&patched_changelogs, rel_make_record_3_taking (rel_field_ref (target_loc_field), rel_field_ref (id_field), rel_make_field_str (target_path)), rel_record_null); } else { struct stat patch_file_stat; safe_stat (patch_path, &patch_file_stat); if (patch_file_stat.st_size) { int errn; t_uchar * target_dir = 0; t_uchar * basename = 0; t_uchar * original_inode_basename = 0; t_uchar * original_inode_tmpname = 0; int patch_stat = -1; target_dir = file_name_directory_file (0, target_path); basename = file_name_tail (0, target_path); original_inode_basename = str_alloc_cat_many (0, ",,dopatch.", basename, ".", str_end); safe_chdir (target_dir); original_inode_tmpname = tmp_file_name (".", original_inode_basename); safe_rename (basename, original_inode_tmpname); if (vu_unlink (&errn, ",,patch-output") && (errn != ENOENT)) { safe_printfmt (2, "arch_apply_changeset: unable to unlink file\n"); safe_printfmt (2, " file: %s/,,patch-output\n", target_dir); safe_printfmt (2, " error: %s\n", errno_to_string (errn)); exit (2); } if (!use_diff3) { run_patch_anyway: patch_stat = run_patch (reverse, forward, patch_path, basename, original_inode_tmpname); } else { const t_uchar * older_path; const t_uchar * yours_path; older_path = assoc_get_str_taking (older_table, rel_field_ref (id_field)); yours_path = assoc_get_str_taking (yours_table, rel_field_ref (id_field)); if (!(older_path && yours_path)) goto run_patch_anyway; if (!reverse) patch_stat = run_diff3 (basename, original_inode_tmpname, older_path, yours_path); else patch_stat = run_diff3 (basename, original_inode_tmpname, yours_path, older_path); } if (patch_stat == 0) { copy_permissions (original_inode_tmpname, basename, full_meta); safe_unlink (original_inode_tmpname); escaped_tmp = pika_save_escape_iso8859_1 (0, 0, escape_classes, target_loc); invoke_apply_changeset_callback (r, "M %s\n", no_dot (escaped_tmp)); rel_add_records (&r->modified_files, rel_make_record_2_taking (rel_field_ref (target_loc_field), rel_field_ref (id_field)), rel_record_null); lim_free (0, escaped_tmp); } else if (patch_stat == 1) { t_uchar * orig_name; copy_permissions (original_inode_tmpname, basename, full_meta); orig_name = str_alloc_cat (0, basename, ".orig"); safe_rename (original_inode_tmpname, orig_name); escaped_tmp = pika_save_escape_iso8859_1 (0, 0, escape_classes, target_loc); invoke_apply_changeset_callback (r, "C %s\n", no_dot (escaped_tmp)); rel_add_records (&r->conflict_files, rel_make_record_2_taking (rel_field_ref (target_loc_field), rel_field_ref (id_field)), rel_record_null); lim_free (0, escaped_tmp); lim_free (0, orig_name); } else { int in_fd; safe_printfmt (2, "arch_apply_changeset: internal error (patch(1) returned odd status)\n"); safe_printfmt (2, " patch(1) exit status: %d\n", patch_stat); safe_printfmt (2, "\n"); in_fd = safe_open (",,patch-output", O_RDONLY, 0); copy_fd (in_fd, 2); safe_printfmt (2, "\n"); exit (2); } if (vu_unlink (&errn, ",,patch-output") && (errn != ENOENT)) { safe_printfmt (2, "arch_apply_changeset: unable to unlink file\n"); safe_printfmt (2, " file: %s/,,patch-output\n", target_dir); safe_printfmt (2, " error: %s\n", errno_to_string (errn)); exit (2); } safe_fchdir (here_fd); lim_free (0, target_dir); lim_free (0, basename); lim_free (0, original_inode_basename); lim_free (0, original_inode_tmpname); } } rel_field_unref (mod_loc_field); rel_field_unref (id_field); rel_field_unref (target_loc_field); lim_free (0, patch_path); lim_free (0, target_path); } /**************************************************************** * Patch Symlinks */ for (x = 0; x < rel_n_records (changeset.patched_symlinks); ++x) { rel_field mod_loc_field; rel_field id_field; rel_field target_loc_field; const t_uchar * mod_loc; const t_uchar * id; const t_uchar * target_loc; t_uchar * orig_patch_path = 0; t_uchar * mod_patch_path = 0; t_uchar * target_path = 0; t_uchar * escaped_tmp = 0; struct stat target_stat; if (!reverse) { orig_patch_path = str_alloc_cat (0, rel_peek_str (changeset.patched_symlinks, x, 2), ".link-orig"); mod_patch_path = str_alloc_cat (0, rel_peek_str (changeset.patched_symlinks, x, 2), ".link-mod"); } else { orig_patch_path = str_alloc_cat (0, rel_peek_str (changeset.patched_symlinks, x, 2), ".link-mod"); mod_patch_path = str_alloc_cat (0, rel_peek_str (changeset.patched_symlinks, x, 2), ".link-orig"); } mod_loc_field = rel_get_field (changeset.patched_symlinks, x, 0); mod_loc = rel_field_str (mod_loc_field); id_field = rel_get_field (changeset.patched_symlinks, x, 1); id = rel_field_str (id_field); target_loc_field = assoc_get_taking (running.file_loc_of, rel_field_ref (id_field)); target_loc = rel_field_str (target_loc_field); if (!target_loc) { escaped_tmp = pika_save_escape_iso8859_1 (0, 0, escape_classes, mod_loc); invoke_apply_changeset_callback (r, "?M %s\n", no_dot (escaped_tmp)); rel_add_records (&r->missing_file_for_patch, rel_make_record_2_taking (rel_field_ref (mod_loc_field), rel_field_ref (id_field)), rel_record_null); save_patch_for_missing_file (missing_patch_dir, orig_patch_path, mod_loc); save_patch_for_missing_file (missing_patch_dir, mod_patch_path, mod_loc); lim_free (0, escaped_tmp); continue; } target_path = file_name_in_vicinity (0, target, target_loc); safe_lstat (target_path, &target_stat); preserve_old_patch_spew (removed_patch_conflict_files_path, target, target_loc); if (!S_ISLNK (target_stat.st_mode)) { t_uchar * orig_name = 0; t_uchar * rej_name = 0; int out_fd; int in_fd; symlink_conflict: orig_name = str_alloc_cat (0, target_path, ".orig"); rej_name = str_alloc_cat (0, target_path, ".rej"); safe_rename (target_path, orig_name); out_fd = safe_open (rej_name, O_WRONLY | O_CREAT | O_EXCL, 0666); safe_printfmt (out_fd, "Patched wanted to retarget a symbolic link:\n\n"); safe_printfmt (out_fd, " from: "); in_fd = safe_open (orig_patch_path, O_RDONLY, 0); copy_fd (in_fd, out_fd); safe_close (in_fd); safe_printfmt (out_fd, "\n to: "); in_fd = safe_open (mod_patch_path, O_RDONLY, 0); copy_fd (in_fd, out_fd); safe_close (in_fd); safe_printfmt (out_fd, "\n"); escaped_tmp = pika_save_escape_iso8859_1 (0, 0, escape_classes, target_loc); invoke_apply_changeset_callback (r, "C-> %s\n", no_dot (escaped_tmp)); rel_add_records (&r->conflict_files, rel_make_record_2_taking (rel_field_ref (target_loc_field), rel_field_ref (id_field)), rel_record_null); lim_free (0, escaped_tmp); lim_free (0, orig_name); lim_free (0, rej_name); } else { /**************************************************************** * FIX THIS * * Strictly speaking: * * We should really try to "remap" the orig and mod link targets for * the current tree layout. */ t_uchar * orig_link_target = 0; t_uchar * mod_link_target = 0; t_uchar * tree_link_target = 0; int patch_stat; orig_link_target = read_line_from_file (orig_patch_path); mod_link_target = read_line_from_file (mod_patch_path); tree_link_target = link_target (target_path); if (!str_cmp (mod_link_target, tree_link_target)) { patch_stat = 0; } else if (!str_cmp (orig_link_target, tree_link_target)) { t_uchar * target_path_dir = 0; t_uchar * target_path_tail = 0; t_uchar * tmp_file_basename = 0; t_uchar * tmp_file_path = 0; target_path_dir = file_name_directory_file (0, target_path); target_path_tail = file_name_tail (0, target_path); tmp_file_basename = str_alloc_cat_many (0, ",,dopatch.", target_path_tail, ".", str_end); tmp_file_path = tmp_file_name (target_path_dir, tmp_file_basename); rmrf_file (tmp_file_path); safe_rename (target_path, tmp_file_path); safe_symlink (mod_link_target, target_path); safe_unlink (tmp_file_path); patch_stat = 0; lim_free (0, target_path_dir); lim_free (0, target_path_tail); lim_free (0, tmp_file_basename); lim_free (0, tmp_file_path); } else { patch_stat = 1; } if (patch_stat == 0) { escaped_tmp = pika_save_escape_iso8859_1 (0, 0, escape_classes, target_loc); invoke_apply_changeset_callback (r, "M-> %s\n", no_dot (escaped_tmp)); rel_add_records (&r->modified_files, rel_make_record_2_taking (rel_field_ref (target_loc_field), rel_field_ref (id_field)), rel_record_null); lim_free (0, escaped_tmp); } else goto symlink_conflict; lim_free (0, orig_link_target); lim_free (0, mod_link_target); lim_free (0, tree_link_target); } rel_field_unref (mod_loc_field); rel_field_unref (id_field); rel_field_unref (target_loc_field); lim_free (0, orig_patch_path); lim_free (0, mod_patch_path); lim_free (0, target_path); } /**************************************************************** * Patch Binaries */ for (x = 0; x < rel_n_records (changeset.patched_binaries); ++x) { rel_field mod_loc_field; rel_field id_field; rel_field target_loc_field; const t_uchar * mod_loc; const t_uchar * id; const t_uchar * target_loc; t_uchar * orig_patch_path = 0; t_uchar * mod_patch_path = 0; t_uchar * target_path = 0; t_uchar * escaped_tmp = 0; struct stat target_stat; if (!reverse) { orig_patch_path = str_alloc_cat (0, rel_peek_str (changeset.patched_binaries, x, 2), ".original"); mod_patch_path = str_alloc_cat (0, rel_peek_str (changeset.patched_binaries, x, 2), ".modified"); } else { orig_patch_path = str_alloc_cat (0, rel_peek_str (changeset.patched_binaries, x, 2), ".modified"); mod_patch_path = str_alloc_cat (0, rel_peek_str (changeset.patched_binaries, x, 2), ".original"); } mod_loc_field = rel_get_field (changeset.patched_binaries, x, 0); mod_loc = rel_field_str (mod_loc_field); id_field = rel_get_field (changeset.patched_binaries, x, 1); id = rel_field_str (id_field); target_loc_field = assoc_get_taking (running.file_loc_of, rel_field_ref (id_field)); target_loc = rel_field_str (target_loc_field); if (!target_loc) { escaped_tmp = pika_save_escape_iso8859_1 (0, 0, escape_classes, mod_loc); invoke_apply_changeset_callback (r, "?M %s\n", no_dot (escaped_tmp)); rel_add_records (&r->missing_file_for_patch, rel_make_record_2_taking (rel_field_ref (mod_loc_field), rel_field_ref (id_field)), rel_record_null); save_patch_for_missing_file (missing_patch_dir, orig_patch_path, mod_loc); save_patch_for_missing_file (missing_patch_dir, mod_patch_path, mod_loc); lim_free (0, escaped_tmp); continue; } target_path = file_name_in_vicinity (0, target, target_loc); safe_lstat (target_path, &target_stat); preserve_old_patch_spew (removed_patch_conflict_files_path, target, target_loc); if (S_ISLNK (target_stat.st_mode)) { t_uchar * orig_name; t_uchar * rej_name; binary_conflict: orig_name = str_alloc_cat (0, target_path, ".orig"); rej_name = str_alloc_cat (0, target_path, ".rej"); safe_rename (target_path, orig_name); copy_file (mod_patch_path, rej_name); copy_permissions (mod_patch_path, rej_name, full_meta); escaped_tmp = pika_save_escape_iso8859_1 (0, 0, escape_classes, target_loc); invoke_apply_changeset_callback (r, "Cb %s\n", no_dot (escaped_tmp)); rel_add_records (&r->conflict_files, rel_make_record_2_taking (rel_field_ref (target_loc_field), rel_field_ref (id_field)), rel_record_null); lim_free (0, escaped_tmp); lim_free (0, orig_name); lim_free (0, rej_name); } else { int patch_stat; if (arch_binary_files_differ (orig_patch_path, target_path, 0, 0)) { patch_stat = 1; } else { t_uchar * target_path_dir = 0; t_uchar * target_path_tail = 0; t_uchar * tmp_file_basename = 0; t_uchar * tmp_file_path = 0; target_path_dir = file_name_directory_file (0, target_path); target_path_tail = file_name_tail (0, target_path); tmp_file_basename = str_alloc_cat_many (0, ",,dopatch.", target_path_tail, ".", str_end); tmp_file_path = tmp_file_name (target_path_dir, tmp_file_basename); rmrf_file (tmp_file_path); safe_rename (target_path, tmp_file_path); copy_file (mod_patch_path, target_path); copy_permissions (mod_patch_path, target_path, full_meta); safe_unlink (tmp_file_path); patch_stat = 0; lim_free (0, target_path_dir); lim_free (0, target_path_tail); lim_free (0, tmp_file_basename); lim_free (0, tmp_file_path); } if (patch_stat == 0) { escaped_tmp = pika_save_escape_iso8859_1 (0, 0, escape_classes, target_loc); invoke_apply_changeset_callback (r, "Mb %s\n", no_dot (escaped_tmp)); rel_add_records (&r->modified_files, rel_make_record_2_taking (rel_field_ref (target_loc_field), rel_field_ref (id_field)), rel_record_null); lim_free (0, escaped_tmp); } else goto binary_conflict; } rel_field_unref (mod_loc_field); rel_field_unref (id_field); rel_field_unref (target_loc_field); lim_free (0, orig_patch_path); lim_free (0, mod_patch_path); lim_free (0, target_path); } /**************************************************************** * Symlinks->File Patches */ for (x = 0; x < rel_n_records (changeset.symlink_to_file); ++x) { rel_field mod_loc_field; rel_field id_field; rel_field target_loc_field; const t_uchar * mod_loc; const t_uchar * id; const t_uchar * target_loc; t_uchar * orig_patch_path = 0; t_uchar * mod_patch_path = 0; t_uchar * target_path = 0; t_uchar * escaped_tmp = 0; struct stat target_stat; if (!reverse) { orig_patch_path = str_alloc_cat (0, rel_peek_str (changeset.symlink_to_file, x, 2), ".link-orig"); mod_patch_path = str_alloc_cat (0, rel_peek_str (changeset.symlink_to_file, x, 2), ".modified"); } else { orig_patch_path = str_alloc_cat (0, rel_peek_str (changeset.symlink_to_file, x, 2), ".modified"); mod_patch_path = str_alloc_cat (0, rel_peek_str (changeset.symlink_to_file, x, 2), ".link-orig"); } mod_loc_field = rel_get_field (changeset.symlink_to_file, x, 0); mod_loc = rel_field_str (mod_loc_field); id_field = rel_get_field (changeset.symlink_to_file, x, 1); id = rel_field_str (id_field); target_loc_field = assoc_get_taking (running.file_loc_of, rel_field_ref (id_field)); target_loc = rel_field_str (target_loc_field); if (!target_loc) { escaped_tmp = pika_save_escape_iso8859_1 (0, 0, escape_classes, mod_loc); invoke_apply_changeset_callback (r, "?M %s\n", no_dot (escaped_tmp)); rel_add_records (&r->missing_file_for_patch, rel_make_record_2_taking (rel_field_ref (mod_loc_field), rel_field_ref (id_field)), rel_record_null); save_patch_for_missing_file (missing_patch_dir, orig_patch_path, mod_loc); save_patch_for_missing_file (missing_patch_dir, mod_patch_path, mod_loc); lim_free (0, escaped_tmp); continue; } target_path = file_name_in_vicinity (0, target, target_loc); safe_lstat (target_path, &target_stat); preserve_old_patch_spew (removed_patch_conflict_files_path, target, target_loc); if (!S_ISLNK (target_stat.st_mode)) { t_uchar * orig_name; t_uchar * rej_name; symlink_to_file_conflict: orig_name = str_alloc_cat (0, target_path, ".orig"); rej_name = str_alloc_cat (0, target_path, ".rej"); safe_rename (target_path, orig_name); copy_file (mod_patch_path, rej_name); copy_permissions (mod_patch_path, rej_name, full_meta); escaped_tmp = pika_save_escape_iso8859_1 (0, 0, escape_classes, target_loc); invoke_apply_changeset_callback (r, "Cch %s\n", no_dot (escaped_tmp)); rel_add_records (&r->conflict_files, rel_make_record_2_taking (rel_field_ref (target_loc_field), rel_field_ref (id_field)), rel_record_null); lim_free (0, escaped_tmp); lim_free (0, orig_name); lim_free (0, rej_name); } else { t_uchar * orig_link_target = 0; t_uchar * tree_link_target = 0; int patch_stat; orig_link_target = read_line_from_file (orig_patch_path); tree_link_target = link_target (target_path); if (str_cmp (orig_link_target, tree_link_target)) { patch_stat = 1; } else { t_uchar * target_path_dir = 0; t_uchar * target_path_tail = 0; t_uchar * tmp_file_basename = 0; t_uchar * tmp_file_path = 0; target_path_dir = file_name_directory_file (0, target_path); target_path_tail = file_name_tail (0, target_path); tmp_file_basename = str_alloc_cat_many (0, ",,dopatch.", target_path_tail, ".", str_end); tmp_file_path = tmp_file_name (target_path_dir, tmp_file_basename); rmrf_file (tmp_file_path); safe_rename (target_path, tmp_file_path); copy_file (mod_patch_path, target_path); copy_permissions (mod_patch_path, target_path, full_meta); safe_unlink (tmp_file_path); patch_stat = 0; lim_free (0, target_path_dir); lim_free (0, target_path_tail); lim_free (0, tmp_file_basename); lim_free (0, tmp_file_path); } if (patch_stat == 0) { escaped_tmp = pika_save_escape_iso8859_1 (0, 0, escape_classes, target_loc); invoke_apply_changeset_callback (r, "ch %s\n", no_dot (escaped_tmp)); rel_add_records (&r->modified_files, rel_make_record_2_taking (rel_field_ref (target_loc_field), rel_field_ref (id_field)), rel_record_null); lim_free (0, escaped_tmp); } else goto symlink_to_file_conflict; lim_free (0, orig_link_target); lim_free (0, tree_link_target); } rel_field_unref (mod_loc_field); rel_field_unref (id_field); rel_field_unref (target_loc_field); lim_free (0, orig_patch_path); lim_free (0, mod_patch_path); lim_free (0, target_path); } /**************************************************************** * File->Symlink Patches */ for (x = 0; x < rel_n_records (changeset.file_to_symlink); ++x) { rel_field mod_loc_field; rel_field id_field; rel_field target_loc_field; const t_uchar * mod_loc; const t_uchar * id; const t_uchar * target_loc; t_uchar * orig_patch_path = 0; t_uchar * mod_patch_path = 0; t_uchar * target_path = 0; t_uchar * escaped_tmp = 0; struct stat target_stat; if (!reverse) { orig_patch_path = str_alloc_cat (0, rel_peek_str (changeset.file_to_symlink, x, 2), ".original"); mod_patch_path = str_alloc_cat (0, rel_peek_str (changeset.file_to_symlink, x, 2), ".link-mod"); } else { orig_patch_path = str_alloc_cat (0, rel_peek_str (changeset.file_to_symlink, x, 2), ".link-mod"); mod_patch_path = str_alloc_cat (0, rel_peek_str (changeset.file_to_symlink, x, 2), ".original"); } mod_loc_field = rel_get_field (changeset.file_to_symlink, x, 0); mod_loc = rel_field_str (mod_loc_field); id_field = rel_get_field (changeset.file_to_symlink, x, 1); id = rel_field_str (id_field); target_loc_field = assoc_get_taking (running.file_loc_of, rel_field_ref (id_field)); target_loc = rel_field_str (target_loc_field); if (!target_loc) { escaped_tmp = pika_save_escape_iso8859_1 (0, 0, escape_classes, mod_loc); invoke_apply_changeset_callback (r, "?M %s\n", no_dot (escaped_tmp)); rel_add_records (&r->missing_file_for_patch, rel_make_record_2_taking (rel_field_ref (mod_loc_field), rel_field_ref (id_field)), rel_record_null); save_patch_for_missing_file (missing_patch_dir, orig_patch_path, mod_loc); save_patch_for_missing_file (missing_patch_dir, mod_patch_path, mod_loc); lim_free (0, escaped_tmp); continue; } target_path = file_name_in_vicinity (0, target, target_loc); safe_lstat (target_path, &target_stat); preserve_old_patch_spew (removed_patch_conflict_files_path, target, target_loc); if (S_ISLNK (target_stat.st_mode)) { t_uchar * orig_name; t_uchar * rej_name; int out_fd; int in_fd; file_to_symlink_conflict: orig_name = str_alloc_cat (0, target_path, ".orig"); rej_name = str_alloc_cat (0, target_path, ".rej"); safe_rename (target_path, orig_name); out_fd = safe_open (rej_name, O_WRONLY | O_CREAT | O_EXCL, 0666); safe_printfmt (out_fd, "MOD had a symlink to: "); in_fd = safe_open (mod_patch_path, O_RDONLY, 0); copy_fd (in_fd, out_fd); safe_close (in_fd); safe_close (out_fd); escaped_tmp = pika_save_escape_iso8859_1 (0, 0, escape_classes, target_loc); invoke_apply_changeset_callback (r, "Cch %s\n", no_dot (escaped_tmp)); rel_add_records (&r->conflict_files, rel_make_record_2_taking (rel_field_ref (target_loc_field), rel_field_ref (id_field)), rel_record_null); lim_free (0, escaped_tmp); lim_free (0, orig_name); lim_free (0, rej_name); } else { t_uchar * mod_link_target = 0; t_uchar * tree_link_target = 0; int patch_stat; mod_link_target = read_line_from_file (mod_patch_path); if (arch_binary_files_differ (orig_patch_path, target_path, 0, 0)) { patch_stat = 1; } else { t_uchar * target_path_dir = 0; t_uchar * target_path_tail = 0; t_uchar * tmp_file_basename = 0; t_uchar * tmp_file_path = 0; target_path_dir = file_name_directory_file (0, target_path); target_path_tail = file_name_tail (0, target_path); tmp_file_basename = str_alloc_cat_many (0, ",,dopatch.", target_path_tail, ".", str_end); tmp_file_path = tmp_file_name (target_path_dir, tmp_file_basename); rmrf_file (tmp_file_path); safe_rename (target_path, tmp_file_path); safe_symlink (mod_link_target, target_path); safe_unlink (tmp_file_path); patch_stat = 0; lim_free (0, target_path_dir); lim_free (0, target_path_tail); lim_free (0, tmp_file_basename); lim_free (0, tmp_file_path); } if (patch_stat == 0) { escaped_tmp = pika_save_escape_iso8859_1 (0, 0, escape_classes, target_loc); invoke_apply_changeset_callback (r, "ch %s\n", no_dot (escaped_tmp)); rel_add_records (&r->modified_files, rel_make_record_2_taking (rel_field_ref (target_loc_field), rel_field_ref (id_field)), rel_record_null); lim_free (0, escaped_tmp); } else goto file_to_symlink_conflict; lim_free (0, mod_link_target); lim_free (0, tree_link_target); } rel_field_unref (mod_loc_field); rel_field_unref (id_field); rel_field_unref (target_loc_field); lim_free (0, orig_patch_path); lim_free (0, mod_patch_path); lim_free (0, target_path); } /**************************************************************** * Patch File Metadata */ for (x = 0; x < rel_n_records (changeset.file_metadata_changed); ++x) { rel_field mod_loc_field; rel_field id_field; rel_field target_loc_field; const t_uchar * mod_loc; const t_uchar * id; const t_uchar * target_loc; t_uchar * orig_patch_path = 0; t_uchar * mod_patch_path = 0; t_uchar * target_path = 0; t_uchar * target_spew_loc = 0; t_uchar * target_spew_path = 0; t_uchar * escaped_tmp = 0; struct stat target_stat; if (!reverse) { orig_patch_path = str_alloc_cat (0, rel_peek_str (changeset.file_metadata_changed, x, 2), ".meta-orig"); mod_patch_path = str_alloc_cat (0, rel_peek_str (changeset.file_metadata_changed, x, 2), ".meta-mod"); } else { orig_patch_path = str_alloc_cat (0, rel_peek_str (changeset.file_metadata_changed, x, 2), ".meta-mod"); mod_patch_path = str_alloc_cat (0, rel_peek_str (changeset.file_metadata_changed, x, 2), ".meta-orig"); } mod_loc_field = rel_get_field (changeset.file_metadata_changed, x, 0); mod_loc = rel_field_str (mod_loc_field); id_field = rel_get_field (changeset.file_metadata_changed, x, 1); id = rel_field_str (id_field); target_loc_field = assoc_get_taking (running.file_loc_of, rel_field_ref (id_field)); target_loc = rel_field_str (target_loc_field); if (!target_loc) { escaped_tmp = pika_save_escape_iso8859_1 (0, 0, escape_classes, mod_loc); invoke_apply_changeset_callback (r, "?-- %s\n", no_dot (escaped_tmp)); rel_field_ref (mod_loc_field); rel_field_ref (id_field); rel_add_records (&r->missing_file_for_meta_patch, rel_make_record_2_taking (mod_loc_field, id_field), rel_record_null); save_patch_for_missing_file (missing_patch_dir, orig_patch_path, mod_loc); save_patch_for_missing_file (missing_patch_dir, mod_patch_path, mod_loc); lim_free (0, escaped_tmp); continue; } target_path = file_name_in_vicinity (0, target, target_loc); target_spew_loc = str_alloc_cat (0, target_loc, ".meta"); target_spew_path = file_name_in_vicinity (0, target, target_spew_loc); preserve_old_patch_spew (removed_patch_conflict_files_path, target, target_spew_loc); safe_lstat (target_path, &target_stat); if (S_ISLNK (target_stat.st_mode)) { t_uchar * rej_name; int out_fd; int in_fd; rej_name = str_alloc_cat (0, target_spew_path, ".rej"); out_fd = safe_open (rej_name, O_WRONLY | O_CREAT | O_EXCL, 0666); safe_printfmt (out_fd, "MOD had a metadata change: "); in_fd = safe_open (mod_patch_path, O_RDONLY, 0); copy_fd (in_fd, out_fd); safe_close (in_fd); safe_close (out_fd); escaped_tmp = pika_save_escape_iso8859_1 (0, 0, escape_classes, target_loc); invoke_apply_changeset_callback (r, "C-- %s\n", no_dot (escaped_tmp)); rel_field_ref (target_loc_field); rel_field_ref (id_field); rel_add_records (&r->metadata_conflict_files, rel_make_record_2_taking (target_loc_field, id_field), rel_record_null); lim_free (0, escaped_tmp); lim_free (0, rej_name); } else { mode_t orig_perms; mode_t mod_perms; int mode_matches; long orig_uid; long mod_uid; long orig_gid; long mod_gid; mod_perms = arch_read_permissions_patch (&mod_uid, &mod_gid, mod_patch_path); orig_perms = arch_read_permissions_patch (&orig_uid, &orig_gid, orig_patch_path); if (full_meta) { mod_perms = (mod_perms & 07777); orig_perms = (orig_perms & 07777); mode_matches = (mod_perms == (target_stat.st_mode & 07777)); } else { mod_perms = (mod_perms & 0777); orig_perms = (orig_perms & 0777); mode_matches = (mod_perms == (target_stat.st_mode & 0777)); } if (!mode_matches) { t_uchar * target_path_dir = 0; t_uchar * target_path_tmp = 0; target_path_dir = file_name_directory_file (0, target_path); target_path_tmp = tmp_file_name (target_path_dir, ",,meta-tmp"); rmrf_file (target_path_tmp); copy_file (target_path, target_path_tmp); copy_permissions (target_path, target_path_tmp, full_meta); safe_chmod (target_path_tmp, mod_perms); safe_rename (target_path_tmp, target_path); lim_free (0, target_path_dir); lim_free (0, target_path_tmp); } if (full_meta && (((mod_uid != target_stat.st_uid) && (mod_uid >= 0)) || ((mod_gid != target_stat.st_gid) && (mod_gid >= 0)))) { t_uchar * target_path_dir = 0; t_uchar * target_path_tmp = 0; target_path_dir = file_name_directory_file (0, target_path); target_path_tmp = tmp_file_name (target_path_dir, ",,meta-tmp"); rmrf_file (target_path_tmp); copy_file (target_path, target_path_tmp); copy_permissions (target_path, target_path_tmp, full_meta); safe_chown (target_path_tmp, mod_uid, mod_gid); safe_rename (target_path_tmp, target_path); lim_free (0, target_path_dir); lim_free (0, target_path_tmp); } escaped_tmp = pika_save_escape_iso8859_1 (0, 0, escape_classes, target_loc); invoke_apply_changeset_callback (r, "-- %s\n", no_dot (escaped_tmp)); rel_field_ref (target_loc_field); rel_field_ref (id_field); rel_add_records (&r->meta_modified_files, rel_make_record_2_taking (target_loc_field, id_field), rel_record_null); lim_free (0, escaped_tmp); } rel_field_unref (mod_loc_field); rel_field_unref (id_field); rel_field_unref (target_loc_field); lim_free (0, orig_patch_path); lim_free (0, mod_patch_path); lim_free (0, target_path); lim_free (0, target_spew_loc); lim_free (0, target_spew_path); } /**************************************************************** * Patch Dir Metadata */ for (x = 0; x < rel_n_records (changeset.dir_metadata_changed); ++x) { rel_field mod_loc_field; rel_field id_field; rel_field target_loc_field; const t_uchar * mod_loc; const t_uchar * id; const t_uchar * target_loc; t_uchar * orig_patch_path = 0; t_uchar * mod_patch_path = 0; t_uchar * target_path = 0; t_uchar * target_spew_loc = 0; t_uchar * target_spew_path = 0; t_uchar * escaped_tmp = 0; struct stat target_stat; if (!reverse) { orig_patch_path = file_name_in_vicinity (0, rel_peek_str (changeset.dir_metadata_changed, x, 2), "=dir-meta-orig"); mod_patch_path = file_name_in_vicinity (0, rel_peek_str (changeset.dir_metadata_changed, x, 2), "=dir-meta-mod"); } else { orig_patch_path = file_name_in_vicinity (0, rel_peek_str (changeset.dir_metadata_changed, x, 2), "=dir-meta-mod"); mod_patch_path = file_name_in_vicinity (0, rel_peek_str (changeset.dir_metadata_changed, x, 2), "=dir-meta-orig"); } mod_loc_field = rel_get_field (changeset.dir_metadata_changed, x, 0); mod_loc = rel_field_str (mod_loc_field); id_field = rel_get_field (changeset.dir_metadata_changed, x, 1); id = rel_field_str (id_field); target_loc_field = assoc_get_taking (running.dir_loc_of, rel_field_ref (id_field)); target_loc = rel_field_str (target_loc_field); if (!target_loc) { escaped_tmp = pika_save_escape_iso8859_1 (0, 0, escape_classes, mod_loc); invoke_apply_changeset_callback (r, "?-/ %s\n", no_dot (escaped_tmp)); rel_field_ref (mod_loc_field); rel_field_ref (id_field); rel_add_records (&r->missing_dir_for_meta_patch, rel_make_record_2_taking (mod_loc_field, id_field), rel_record_null); save_patch_for_missing_file (missing_patch_dir, orig_patch_path, mod_loc); save_patch_for_missing_file (missing_patch_dir, mod_patch_path, mod_loc); lim_free (0, escaped_tmp); continue; } target_path = file_name_in_vicinity (0, target, target_loc); target_spew_loc = str_alloc_cat (0, target_loc, ".meta"); target_spew_path = file_name_in_vicinity (0, target, target_spew_loc); preserve_old_patch_spew (removed_patch_conflict_files_path, target, target_spew_loc); safe_stat (target_path, &target_stat); { mode_t orig_perms; mode_t mod_perms; int mode_matches; long orig_uid; long mod_uid; long orig_gid; long mod_gid; mod_perms = arch_read_permissions_patch (&mod_uid, &mod_gid, mod_patch_path); orig_perms = arch_read_permissions_patch (&orig_uid, &orig_gid, orig_patch_path); if (full_meta) { mod_perms = (mod_perms & 07777); orig_perms = (orig_perms & 07777); mode_matches = (mod_perms == (target_stat.st_mode & 07777)); } else { mod_perms = (mod_perms & 0777); orig_perms = (orig_perms & 0777); mode_matches = (mod_perms == (target_stat.st_mode & 0777)); } if (!mode_matches) { safe_chmod (target_path, mod_perms); } if (full_meta && (((mod_uid != target_stat.st_uid) && (mod_uid >= 0)) || ((mod_gid != target_stat.st_gid) && (mod_gid >= 0)))) { safe_chown (target_path, mod_uid, mod_gid); } escaped_tmp = pika_save_escape_iso8859_1 (0, 0, escape_classes, target_loc); invoke_apply_changeset_callback (r, "--/ %s\n", no_dot (escaped_tmp)); rel_field_ref (target_loc_field); rel_field_ref (id_field); rel_add_records (&r->meta_modified_dirs, rel_make_record_2_taking (target_loc_field, id_field), rel_record_null); lim_free (0, escaped_tmp); } rel_field_unref (mod_loc_field); rel_field_unref (id_field); rel_field_unref (target_loc_field); lim_free (0, orig_patch_path); lim_free (0, mod_patch_path); lim_free (0, target_path); lim_free (0, target_spew_loc); lim_free (0, target_spew_path); } /**************************************************************** * Update Changelogs */ for (x = 0; x < rel_n_records (patched_changelogs); ++x) { rel_field target_loc_field; rel_field id_field; rel_field target_path_field; const t_uchar * target_loc; const t_uchar * id; const t_uchar * target_path; t_uchar * target_dir = 0; t_uchar * target_tmp = 0; t_uchar * archive = 0; t_uchar * version = 0; t_uchar * escaped_tmp = 0; int out_fd; struct stat stat_was; mode_t mode; target_loc_field = rel_get_field (patched_changelogs, x, 0); target_loc = rel_field_str (target_loc_field); id_field = rel_get_field (patched_changelogs, x, 1); id = rel_field_str (id_field); target_path_field = rel_get_field (patched_changelogs, x, 2); target_path = rel_field_str (target_path_field); target_dir = file_name_directory_file (0, target_path); target_tmp = tmp_file_name (target_dir, ",,new-changeset"); safe_stat (target_path, &stat_was); if (full_meta) { mode = (stat_was.st_mode & 07777); } else { mode = (stat_was.st_mode & 0777); } arch_parse_changelog_id (&archive, &version, id); rmrf_file (target_tmp); out_fd = safe_open (target_tmp, O_WRONLY | O_EXCL | O_CREAT, mode); safe_fchmod (out_fd, mode); if (full_meta) safe_fchown (out_fd, stat_was.st_uid, stat_was.st_gid); safe_buffer_fd (out_fd, 0, O_WRONLY, 0); arch_generate_changelog (out_fd, tree_root, 0, 0, 0, 0, archive, version); safe_close (out_fd); safe_rename (target_tmp, target_path); escaped_tmp = pika_save_escape_iso8859_1 (0, 0, escape_classes, target_loc); invoke_apply_changeset_callback (r, "cl %s\n", no_dot (escaped_tmp)); rel_field_ref (target_loc_field); rel_field_ref (id_field); rel_add_records (&r->modified_files, rel_make_record_2_taking (target_loc_field, id_field), rel_record_null); rel_field_unref (target_loc_field); rel_field_unref (id_field); rel_field_unref (target_path_field); lim_free (0, escaped_tmp); lim_free (0, target_dir); lim_free (0, target_tmp); lim_free (0, archive); lim_free (0, version); } /**************************************************************** * Finish Up Deferred Conflicts */ rel_sort_table_by_field (1, deferred_conflicts, 0); for (x = 0; x < rel_n_records (deferred_conflicts); ++x) { t_uchar * target_path = 0; t_uchar * rej_path = 0; target_path = file_name_in_vicinity (0, target, rel_peek_str (deferred_conflicts, x, 0)); rej_path = str_alloc_cat (0, target_path, ".rej"); safe_rename (target_path, rej_path); lim_free (0, target_path); lim_free (0, rej_path); } /**************************************************************** * Sort and Uniq Report Fields */ rel_sort_table_by_field (0, r->removed_files, 0); rel_uniq_by_field (&r->removed_files, 0); rel_sort_table_by_field (0, r->removed_dirs, 0); rel_uniq_by_field (&r->removed_dirs, 0); rel_sort_table_by_field (0, r->missing_removed_files, 0); rel_uniq_by_field (&r->missing_removed_files, 0); rel_sort_table_by_field (0, r->missing_removed_dirs, 0); rel_uniq_by_field (&r->missing_removed_dirs, 0); rel_sort_table_by_field (0, r->missing_renamed_files, 0); rel_uniq_by_field (&r->missing_renamed_files, 0); rel_sort_table_by_field (0, r->missing_renamed_dirs, 0); rel_uniq_by_field (&r->missing_renamed_dirs, 0); rel_sort_table_by_field (0, r->new_dirs, 0); rel_uniq_by_field (&r->new_dirs, 0); rel_sort_table_by_field (0, r->renamed_dirs, 0); rel_uniq_by_field (&r->renamed_dirs, 0); rel_sort_table_by_field (0, r->new_files, 0); rel_uniq_by_field (&r->new_files, 0); rel_sort_table_by_field (0, r->renamed_files, 0); rel_uniq_by_field (&r->renamed_files, 0); rel_sort_table_by_field (0, r->modified_files, 0); rel_uniq_by_field (&r->modified_files, 0); rel_sort_table_by_field (0, r->modified_dirs, 0); rel_uniq_by_field (&r->modified_dirs, 0); rel_sort_table_by_field (0, r->missing_file_for_patch, 0); rel_uniq_by_field (&r->missing_file_for_patch, 0); rel_sort_table_by_field (0, r->missing_dir_for_patch, 0); rel_uniq_by_field (&r->missing_dir_for_patch, 0); rel_sort_table_by_field (0, r->meta_modified_files, 0); rel_uniq_by_field (&r->meta_modified_files, 0); rel_sort_table_by_field (0, r->meta_modified_dirs, 0); rel_uniq_by_field (&r->meta_modified_dirs, 0); rel_sort_table_by_field (0, r->missing_file_for_meta_patch, 0); rel_uniq_by_field (&r->missing_file_for_meta_patch, 0); rel_sort_table_by_field (0, r->missing_dir_for_meta_patch, 0); rel_uniq_by_field (&r->missing_dir_for_meta_patch, 0); rel_sort_table_by_field (0, r->conflict_files, 0); rel_uniq_by_field (&r->conflict_files, 0); rel_sort_table_by_field (0, r->conflict_dirs, 0); rel_uniq_by_field (&r->conflict_dirs, 0); rel_sort_table_by_field (0, r->metadata_conflict_files, 0); rel_uniq_by_field (&r->metadata_conflict_files, 0); rel_sort_table_by_field (0, r->metadata_conflict_dirs, 0); rel_uniq_by_field (&r->metadata_conflict_dirs, 0); /**************************************************************** * cleanup */ free_assoc_table (mod_dir_id_of); free_assoc_table (new_dir_perms); safe_close (here_fd); lim_free (0, changeset_path); arch_free_changeset_report_data (&changeset); lim_free (0, target); lim_free (0, missing_patch_dir); lim_free (0, tree_root); arch_free_changeset_inventory_data (&inventory); arch_free_changeset_inventory_data (&inventory_by_name); rel_free_table (removed_files_index); rmrf_file (tmp_removed_files_root); lim_free (0, tmp_removed_files_root); rel_free_table (renamed_files_index); rel_free_table (present_renamed_files_index); rmrf_file (tmp_renamed_files_root); lim_free (0, tmp_renamed_files_root); rel_free_table (renamed_dirs_index); rel_free_table (present_renamed_dirs_index); rel_free_table (removed_dirs_index); rel_free_table (present_removed_dirs_index); rmrf_file (tmp_shuffled_dirs_root); lim_free (0, tmp_shuffled_dirs_root); rel_free_table (file_set_aside_with_dir_id); rel_free_table (dir_set_aside_with_dir_id); lim_free (0, removed_patch_conflict_files_path); free_assoc_table (running.dir_loc_of); free_assoc_table (running.dir_id_of); free_assoc_table (running.file_loc_of); free_assoc_table (running.file_id_of); rel_free_table (install_dirs_plan); rel_free_table (deferred_conflicts); rel_free_table (added_files_and_symlinks); rel_free_table (patched_changelogs); } static void invoke_apply_changeset_callback (struct arch_apply_changeset_report * r, const t_uchar * fmt, ...) { va_list ap; if (r->callback) { va_start (ap, fmt); r->callback (r->thunk, fmt, ap); va_end (ap); } } static t_uchar * set_aside_shuffled_dirs (rel_table * file_set_aside_with, rel_table * dir_set_aside_with, const t_uchar * target_loc, const t_uchar * id, int seq_n, const t_uchar * dest_root, struct running_inventory_assocs * running, const t_uchar * target, struct arch_changeset_inventory * inv) { #define SEQ_STR_BUF_SIZE 128 t_uchar seq_str[SEQ_STR_BUF_SIZE]; int cvt_status; t_uchar * target_path = 0; t_uchar * dest_path = 0; t_uchar * target_loc_as_dir = 0; size_t target_loc_as_dir_len; int y; /* Is `seq_str' a large enough buffer to hold the decimal * form of `seq_n' plus a terminating 0? */ #if (4 * (SEQ_STR_BUF_SIZE - 1)) < (CHAR_BIT * MACHINE_SIZEOF_LONG) #error "an unexpected buffer overlow might occur!" #endif cvt_status = cvt_ulong_to_decimal_n (seq_str, sizeof (seq_str), (unsigned long)seq_n, 0); invariant (!cvt_status); /* the compile-time check above justifies this `invariant' */ target_path = file_name_in_vicinity (0, target, target_loc); dest_path = file_name_in_vicinity (0, dest_root, seq_str); ensure_directory_exists (dest_root); safe_rename (target_path, dest_path); target_loc_as_dir = file_name_as_directory (0, target_loc); target_loc_as_dir_len = str_length (target_loc_as_dir); for (y = 0; y < rel_n_records (inv->files); ++y) { if (!str_cmp_prefix (target_loc_as_dir, rel_peek_str (inv->files, y, 0))) { if (assoc_get_str_taking (running->file_id_of, rel_get_field (inv->files, y, 0))) { assoc_del_taking (running->file_id_of, rel_get_field (inv->files, y, 0)); assoc_del_taking (running->file_loc_of, rel_get_field (inv->files, y, 1)); rel_add_records (file_set_aside_with, rel_make_record_3_taking (rel_make_field_str (id), rel_make_field_str (rel_peek_str (inv->files, y, 0) + target_loc_as_dir_len), rel_get_field (inv->files, y, 1)), rel_record_null); } } } for (y = 0; y < rel_n_records (inv->dirs); ++y) { if (!str_cmp_prefix (target_loc_as_dir, rel_peek_str (inv->dirs, y, 0))) { if (assoc_get_str_taking (running->dir_id_of, rel_get_field (inv->dirs, y, 0))) { assoc_del_taking (running->dir_id_of, rel_get_field (inv->dirs, y, 0)); assoc_del_taking (running->dir_loc_of, rel_get_field (inv->dirs, y, 1)); rel_add_records (dir_set_aside_with, rel_make_record_3_taking (rel_make_field_str (id), rel_make_field_str (rel_peek_str (inv->dirs, y, 0) + target_loc_as_dir_len), rel_get_field (inv->dirs, y, 1)), rel_record_null); } } } assoc_del_taking (running->dir_id_of, rel_make_field_str (target_loc)); assoc_del_taking (running->dir_loc_of, rel_make_field_str (id)); lim_free (0, target_path); lim_free (0, target_loc_as_dir); return dest_path; } static void preserve_old_patch_spew (const t_uchar * dest_root, const t_uchar * target, const t_uchar * loc) { t_uchar * target_path = 0; t_uchar * orig_path = 0; t_uchar * rej_path = 0; t_uchar * dest_path = 0; t_uchar * dest_dir; t_uchar * orig_dest = 0; t_uchar * rej_dest = 0; target_path = file_name_in_vicinity (0, target, loc); orig_path = str_alloc_cat (0, target_path, ".orig"); rej_path = str_alloc_cat (0, target_path, ".rej"); dest_path = file_name_in_vicinity (0, dest_root, loc); dest_dir = file_name_directory_file (0, dest_path); orig_dest = str_alloc_cat (0, dest_path, ".orig"); rej_dest = str_alloc_cat (0, dest_path, ".rej"); if (!safe_access (orig_path, F_OK)) { ensure_directory_exists (dest_dir); safe_rename (orig_path, orig_dest); } if (!safe_access (rej_path, F_OK)) { ensure_directory_exists (dest_dir); safe_rename (rej_path, rej_dest); } lim_free (0, target_path); lim_free (0, orig_path); lim_free (0, rej_path); lim_free (0, dest_path); lim_free (0, dest_dir); lim_free (0, orig_dest); lim_free (0, rej_dest); } static int deferred_conflict (rel_table * deferred_conflicts, const t_uchar * spew_root, const t_uchar * target, const t_uchar * loc, const t_uchar * orig_copy) { t_uchar * path = 0; t_uchar * orig_path = 0; int conflict_detected; path = file_name_in_vicinity (0, target, loc); orig_path = str_alloc_cat (0, path, ".orig"); conflict_detected = 0; if (!safe_access (path, F_OK)) { struct stat orig_stat; struct stat target_stat; if (orig_copy) { safe_stat (orig_copy, &orig_stat); safe_stat (path, &target_stat); if (S_ISREG (orig_stat.st_mode) && S_ISREG (target_stat.st_mode) && !arch_binary_files_differ (orig_copy, path, 0, 0)) { safe_unlink (path); } else goto conflict; } else { conflict: preserve_old_patch_spew (spew_root, target, loc); rel_add_records (deferred_conflicts, rel_singleton_record_taking (rel_make_field_str (loc)), rel_record_null); safe_rename (path, orig_path); conflict_detected = 1; } } lim_free (0, path); lim_free (0, orig_path); return conflict_detected; } static int dir_depth_cmp (const t_uchar * a, const t_uchar * b) { return str_cmp (a, b); } static void analyze_install (struct running_inventory_assocs * running, int is_dir, t_uchar ** target_has_dir, t_uchar ** install_dir, t_uchar ** install_name, t_uchar ** install_loc, const t_uchar * target, const t_uchar * mod_loc, const t_uchar * id, assoc_table mod_dir_id_of, rel_table file_set_aside_with, rel_table dir_set_aside_with) { t_uchar * basename = 0; t_uchar * loc_dir = 0; basename = file_name_tail (0, mod_loc); loc_dir = file_name_directory_file (0, mod_loc); if (!str_cmp (loc_dir, ".")) { *target_has_dir = str_save (0, "."); *install_dir = str_save (0, target); *install_name = file_name_in_vicinity (0, *install_dir, basename); *install_loc = file_name_in_vicinity (0, ".", basename); } else { t_uchar * relpath = 0; t_uchar * install_loc_dir = 0; while (str_cmp (loc_dir, ".")) { const t_uchar * dir_id; const t_uchar * loc_dir_in_tgt; t_uchar * dir_tail = 0; t_uchar * s; dir_id = assoc_get_str_taking (mod_dir_id_of, rel_make_field_str (loc_dir)); if (!dir_id) { /* A degenerate changeset -- it should include that dir-id but * doesn't. Let's try a guess. */ dir_id = assoc_get_str_taking (running->dir_id_of, rel_make_field_str (loc_dir)); } loc_dir_in_tgt = assoc_get_str_taking (running->dir_loc_of, rel_make_field_str (dir_id)); if (loc_dir_in_tgt) break; dir_tail = file_name_tail (0, loc_dir); if (!relpath) relpath = str_save (0, dir_tail); else { t_uchar * t = relpath; relpath = file_name_in_vicinity (0, dir_tail, relpath); lim_free (0, t); } s = file_name_directory_file (0, loc_dir); lim_free (0, loc_dir); loc_dir = s; lim_free (0, dir_tail); } *target_has_dir = str_save (0, loc_dir); install_loc_dir = file_name_in_vicinity (0, loc_dir, relpath); if (!str_cmp (install_loc_dir, "./")) *install_dir = str_save (0, target); else *install_dir = file_name_in_vicinity (0, target, 2 + install_loc_dir); *install_name = file_name_in_vicinity (0, *install_dir, basename); *install_loc = file_name_in_vicinity (0, install_loc_dir, basename); lim_free (0, relpath); lim_free (0, install_loc_dir); } if (is_dir) { int x; assoc_set_taking (&running->dir_loc_of, rel_make_field_str (id), rel_make_field_str (*install_loc)); assoc_set_taking (&running->dir_id_of, rel_make_field_str (*install_loc), rel_make_field_str (id)); for (x = 0; x < rel_n_records (file_set_aside_with); ++x) { int cmp; t_uchar * new_loc = 0; const t_uchar * sub_id; cmp = str_cmp (rel_peek_str (file_set_aside_with, x, 0), id); if (cmp < 0) continue; else if (cmp > 0) break; new_loc = file_name_in_vicinity (0, *install_loc, rel_peek_str (file_set_aside_with, x, 1)); sub_id = rel_peek_str (file_set_aside_with, x, 2); assoc_set_taking (&running->file_loc_of, rel_make_field_str (sub_id), rel_make_field_str (new_loc)); assoc_set_taking (&running->file_id_of, rel_make_field_str (new_loc), rel_make_field_str (sub_id)); lim_free (0, new_loc); } for (x = 0; x < rel_n_records (dir_set_aside_with); ++x) { int cmp; t_uchar * new_loc = 0; const t_uchar * sub_id; cmp = str_cmp (rel_peek_str (dir_set_aside_with, x, 0), id); if (cmp < 0) continue; else if (cmp > 0) break; new_loc = file_name_in_vicinity (0, *install_loc, rel_peek_str (dir_set_aside_with, x, 1)); sub_id = rel_peek_str (dir_set_aside_with, x, 2); assoc_set_taking (&running->dir_loc_of, rel_make_field_str (sub_id), rel_make_field_str (new_loc)); assoc_set_taking (&running->dir_id_of, rel_make_field_str (new_loc), rel_make_field_str (sub_id)); lim_free (0, new_loc); } } else { assoc_set_taking (&running->file_loc_of, rel_make_field_str (id), rel_make_field_str (*install_loc)); assoc_set_taking (&running->file_id_of, rel_make_field_str (*install_loc), rel_make_field_str (id)); } lim_free (0, basename); lim_free (0, loc_dir); } static void ensure_directory_eliminating_conflicts (rel_table * deferred_conflicts, const t_uchar * spew_root, const t_uchar * target_has_path, const t_uchar * dir, const t_uchar * target) { t_uchar * dir_of_dir = 0; if (!str_cmp (target_has_path, dir)) return; dir_of_dir = file_name_directory_file (0, dir); ensure_directory_eliminating_conflicts (deferred_conflicts, spew_root, target_has_path, dir_of_dir, target); if (safe_file_is_directory (dir)) return; if (!safe_access (dir, F_OK)) { t_uchar * loc; t_uchar * orig; loc = str_alloc_cat (0, "./", dir + str_length (target) + 1); orig = str_alloc_cat (0, dir, ".orig"); deferred_conflict (deferred_conflicts, spew_root, target, loc, 0); safe_rename (dir, orig); lim_free (0, loc); lim_free (0, orig); } safe_mkdir (dir, 0777); lim_free (0, dir_of_dir); } static int run_diff3 (const t_uchar * basename, const t_uchar * mine_path, const t_uchar * older_path, const t_uchar * yours_path) { int pid; pid = fork (); if (pid == -1) panic ("unable to fork for diff3"); if (pid) { int status; int wait_pid; wait_pid = waitpid (pid, &status, 0); if (wait_pid < 0) { panic_msg ("error waiting for patch subprocess"); kill (0, SIGKILL); panic ("error waiting for subprocess"); } if (WIFSIGNALED (status)) { safe_printfmt (2, "\n"); safe_printfmt (2, "arch_apply_changeset: diff3 subprocess killed by signal %d\n", WTERMSIG (status)); safe_printfmt (2, "\n"); exit (2); } else if (!WIFEXITED (status)) { panic_msg ("waitpid returned for a non-exited process"); kill (0, SIGKILL); panic ("waitpid returned for a non-exited process"); } else { int exit_status; exit_status = WEXITSTATUS (status); if (exit_status == 1) { t_uchar * rej_name = str_alloc_cat (0, basename, ".rej"); int fd; if (!safe_access (rej_name, F_OK)) { t_uchar * setaside_base_name = str_alloc_cat (0, ",,saved-", rej_name); safe_rename (rej_name, setaside_base_name); lim_free (0, setaside_base_name); } fd = safe_open (rej_name, O_WRONLY | O_CREAT | O_EXCL, 0444); safe_printfmt (fd, "Conflicts occured, diff3 conflict markers left in file.\n"); safe_close (fd); lim_free (0, rej_name); } return exit_status; } } else { int output_redir_fd; int input_redir_fd; t_uchar ** argv; argv = 0; *(t_uchar **)ar_push ((void **)&argv, 0, sizeof (char *)) = cfg__gnu_diff3; *(t_uchar **)ar_push ((void **)&argv, 0, sizeof (char *)) = "-E"; *(t_uchar **)ar_push ((void **)&argv, 0, sizeof (char *)) = "--merge"; *(t_uchar **)ar_push ((void **)&argv, 0, sizeof (char *)) = "-L"; *(t_uchar **)ar_push ((void **)&argv, 0, sizeof (char *)) = "TREE"; *(t_uchar **)ar_push ((void **)&argv, 0, sizeof (char *)) = "-L"; *(t_uchar **)ar_push ((void **)&argv, 0, sizeof (char *)) = "ANCESTOR"; *(t_uchar **)ar_push ((void **)&argv, 0, sizeof (char *)) = "-L"; *(t_uchar **)ar_push ((void **)&argv, 0, sizeof (char *)) = "MERGE-SOURCE"; /* The cast rvalues discard `const' --- reasonable here since we are * about to call `exec'. */ *(t_uchar **)ar_push ((void **)&argv, 0, sizeof (char *)) = (t_uchar *)mine_path; *(t_uchar **)ar_push ((void **)&argv, 0, sizeof (char *)) = (t_uchar *)older_path; *(t_uchar **)ar_push ((void **)&argv, 0, sizeof (char *)) = (t_uchar *)yours_path; *(t_uchar **)ar_push ((void **)&argv, 0, sizeof (char *)) = 0; input_redir_fd = safe_open ("/dev/null", O_RDONLY, 0); output_redir_fd = safe_open (basename, O_WRONLY | O_CREAT | O_EXCL, 0666); safe_move_fd (input_redir_fd, 0); safe_move_fd (output_redir_fd, 1); output_redir_fd = safe_dup (1); safe_move_fd (output_redir_fd, 2); arch_util_execvp (cfg__gnu_diff3, argv); panic ("arch_apply_changeset: execvp for diff3 returned to caller"); exit (2); } panic ("dopatch: not reached (run_diff3)"); return 2; } static int run_patch (int apply_in_reverse, int forward_opt_to_patch, const char * patch_path, const char * tree_file_base, const char * original_inode_name) { int pid; pid = fork (); if (pid == -1) panic ("unable to fork for patch"); if (pid) { int status; int wait_pid; wait_pid = waitpid (pid, &status, 0); if (wait_pid < 0) { panic_msg ("error waiting for patch subprocess"); kill (0, SIGKILL); panic ("error waiting for subprocess"); } if (WIFSIGNALED (status)) { safe_printfmt (2, "\n"); safe_printfmt (2, "arch_apply_changeset: patch subprocess killed by signal %d\n", WTERMSIG (status)); safe_printfmt (2, "\n"); exit (2); } else if (!WIFEXITED (status)) { panic_msg ("waitpid returned for a non-exited process"); kill (0, SIGKILL); panic ("waitpid returned for a non-exited process"); } else { int exit_status; exit_status = WEXITSTATUS (status); return exit_status; } } else { int output_redir_fd; int input_redir_fd; t_uchar ** argv; argv = 0; *(t_uchar **)ar_push ((void **)&argv, 0, sizeof (char *)) = cfg__gnu_patch; if (forward_opt_to_patch) *(t_uchar **)ar_push ((void **)&argv, 0, sizeof (char *)) = "--forward"; if (apply_in_reverse) *(t_uchar **)ar_push ((void **)&argv, 0, sizeof (char *)) = "--reverse"; /* `const' is discarded here -- we are about to reach `exec' */ *(t_uchar **)ar_push ((void **)&argv, 0, sizeof (char *)) = "-f"; *(t_uchar **)ar_push ((void **)&argv, 0, sizeof (char *)) = "-s"; *(t_uchar **)ar_push ((void **)&argv, 0, sizeof (char *)) = "--posix"; *(t_uchar **)ar_push ((void **)&argv, 0, sizeof (char *)) = "-i"; *(t_uchar **)ar_push ((void **)&argv, 0, sizeof (char *)) = (t_uchar *)patch_path; *(t_uchar **)ar_push ((void **)&argv, 0, sizeof (char *)) = "-o"; *(t_uchar **)ar_push ((void **)&argv, 0, sizeof (char *)) = (t_uchar *)tree_file_base; *(t_uchar **)ar_push ((void **)&argv, 0, sizeof (char *)) = (t_uchar *)original_inode_name; *(t_uchar **)ar_push ((void **)&argv, 0, sizeof (char *)) = 0; input_redir_fd = safe_open ("/dev/null", O_RDONLY, 0); output_redir_fd = safe_open (",,patch-output", O_WRONLY | O_CREAT | O_EXCL, 0666); safe_move_fd (input_redir_fd, 0); safe_move_fd (output_redir_fd, 1); output_redir_fd = safe_dup (1); safe_move_fd (output_redir_fd, 2); arch_util_execvp (cfg__gnu_patch, argv); panic ("arch_apply_changeset: execvp for patch returned to caller"); exit (2); } panic ("dopatch: not reached (run_patch)"); return 2; } static void save_patch_for_missing_file (const t_uchar * missing_patch_dir, const t_uchar * patch_path, const t_uchar * mod_loc) { t_uchar * mod_loc_dir = 0; t_uchar * dest_dir = 0; t_uchar * patch_tail = 0; t_uchar * dest_path = 0; mod_loc_dir = file_name_directory_file (0, mod_loc); dest_dir = file_name_in_vicinity (0, missing_patch_dir, mod_loc_dir); ensure_directory_exists (dest_dir); patch_tail = file_name_tail (0, patch_path); dest_path = file_name_in_vicinity (0, dest_dir, patch_tail); copy_file (patch_path, dest_path); lim_free (0, mod_loc_dir); lim_free (0, dest_dir); lim_free (0, patch_tail); lim_free (0, dest_path); } /* tag: Tom Lord Thu May 15 17:19:28 2003 (apply-changeset.c) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-make-branch.c0000644000175000017500000001036610457622000017767 0ustar useruser/* cmd-make-branch.c * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "config-options.h" #include "hackerlab/cmd/main.h" #include "tla/libarch/namespace.h" #include "tla/libarch/project-tree.h" #include "tla/libarch/my.h" #include "tla/libarch/archive.h" #include "tla/libarch/cmd-make-branch.h" static t_uchar * usage = "[options] branch"; static t_uchar * version_string = (cfg__std__package " from regexps.com\n" "\n" "Copyright 2003 Tom Lord\n" "\n" "This is free software; see the source for copying conditions.\n" "There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\n" "PARTICULAR PURPOSE.\n" "\n" "Report bugs to " cfg__tla_bug_mail ".\n" "\n" cfg__std__release_id_string "\n"); #define OPTS(OP) \ OP (opt_help_msg, "h", "help", 0, \ "Display a help message and exit.") \ OP (opt_long_help, "H", 0, 0, \ "Display a verbose help message and exit.") \ OP (opt_version, "V", "version", 0, \ "Display a release identifier string\n" \ "and exit.") \ OP (opt_archive, "A", "archive", 1, \ "Override `my-default-archive'") t_uchar arch_cmd_make_branch_help[] = ("create a new archive branch\n" "Create BRANCH as a branch in the indicated archive.\n" "\n" "The category containing the branch must already exist.\n"); enum options { OPTS (OPT_ENUM) }; static struct opt_desc opts[] = { OPTS (OPT_DESC) {-1, 0, 0, 0, 0} }; int arch_cmd_make_branch (t_uchar * program_name, int argc, char * argv[]) { int o; struct opt_parsed * option; t_uchar * default_archive; default_archive = 0; safe_buffer_fd (1, 0, O_WRONLY, 0); option = 0; while (1) { o = opt_standard (lim_use_must_malloc, &option, opts, &argc, argv, program_name, usage, version_string, arch_cmd_make_branch_help, opt_help_msg, opt_long_help, opt_version); if (o == opt_none) break; switch (o) { default: safe_printfmt (2, "unhandled option `%s'\n", option->opt_string); panic ("internal error parsing arguments"); usage_error: opt_usage (2, argv[0], program_name, usage, 1); exit (1); /* bogus_arg: */ safe_printfmt (2, "ill-formed argument for `%s' (`%s')\n", option->opt_string, option->arg_string); goto usage_error; case opt_archive: { default_archive = str_save (0, option->arg_string); break; } } } if (argc != 2) goto usage_error; default_archive = arch_my_default_archive (default_archive); { t_uchar * branch_spec; t_uchar * archive = 0; t_uchar * branch = 0; struct arch_archive * arch = 0; t_uchar * errstr = 0; branch_spec = argv[1]; if (!arch_valid_package_name (branch_spec, arch_maybe_archive, arch_req_package, 0)) { safe_printfmt (2, "%s: invalid branch name (%s)\n", argv[0], branch_spec); exit (2); } archive = arch_parse_package_name (arch_ret_archive, default_archive, branch_spec); branch = arch_parse_package_name (arch_ret_package, 0, branch_spec); if (arch_is_system_package_name (branch)) { safe_printfmt (2, "%s: user's can not create system branches\n branch: %s\n", argv[0], branch); exit (2); } arch = arch_archive_connect (archive, 0); if (arch_make_branch (&errstr, arch, branch)) { safe_printfmt (2, "%s: unable to create branch %s (%s)\n archive: %s\n", argv[0], branch, errstr, archive); exit (1); } } return 0; } /* tag: Tom Lord Wed May 21 09:15:07 2003 (make-branch.c) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-lock-revision.h0000644000175000017500000000130510457622000020401 0ustar useruser/* cmd-lock-revision.h: * **************************************************************** * Copyright (C) 2003 Tom Lord, Stig Brautaset * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__CMD_LOCK_REVISION_H #define INCLUDE__LIBARCH__CMD_LOCK_REVISION_H #include "hackerlab/machine/types.h" extern t_uchar arch_cmd_lock_revision_help[]; /* automatically generated __STDC__ prototypes */ extern int arch_cmd_lock_revision (t_uchar * program_name, int argc, char * argv[]); #endif /* INCLUDE__LIBARCH__CMD_LOCK_REVISION_H */ /* tag: Stig Brautaset Sat Jun 7 15:29:41 BST 2003 (cmd-lock-revision.h) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-update.c0000644000175000017500000002721010457622000017075 0ustar useruser/* cmd-update.c: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "config-options.h" #include "hackerlab/cmd/main.h" #include "hackerlab/fs/file-names.h" #include "hackerlab/fs/cwd.h" #include "hackerlab/vu/vu-dash.h" #include "tla/libfsutils/tmp-files.h" #include "tla/libfsutils/rmrf.h" #include "tla/libfsutils/copy-file.h" #include "tla/libfsutils/dir-as-cwd.h" #include "tla/libarch/namespace.h" #include "tla/libarch/project-tree.h" #include "tla/libarch/my.h" #include "tla/libarch/copy-project-tree.h" #include "tla/libarch/archive.h" #include "tla/libarch/patch-logs.h" #include "tla/libarch/local-cache.h" #include "tla/libarch/cmd.h" #include "tla/libarch/cmd-replay.h" #include "tla/libarch/cmd-apply-delta.h" #include "tla/libarch/cmd-undo.h" #include "tla/libarch/cmd-redo.h" #include "tla/libarch/cmd-update.h" static t_uchar * usage = "[options] [version/revision]"; static t_uchar * version_string = (cfg__std__package " from regexps.com\n" "\n" "Copyright 2003 Tom Lord\n" "\n" "This is free software; see the source for copying conditions.\n" "There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\n" "PARTICULAR PURPOSE.\n" "\n" "Report bugs to " cfg__tla_bug_mail ".\n" "\n" cfg__std__release_id_string "\n"); #define OPTS(OP) \ OP (opt_help_msg, "h", "help", 0, \ "Display a help message and exit.") \ OP (opt_long_help, "H", 0, 0, \ "Display a verbose help message and exit.") \ OP (opt_version, "V", "version", 0, \ "Display a release identifier string\n" \ "and exit.") \ OP (opt_archive, "A", "archive", 1, \ "Override `my-default-archive'") \ OP (opt_dir, "d", "dir DIR", 1, \ "Update project tree in DIR (default `.')") \ OP (opt_forward, "N", "forward", 0, \ "pass the --forward option to `patch'") \ OP (opt_dest, 0, "dest DEST", 1, \ "Instead of modifying the project tree in-place,\n" \ "make a copy of it to DEST and apply the result to that") \ OP (opt_unescaped, 0, "unescaped", 0, \ "show filenames in unescaped form") t_uchar arch_cmd_update_help[] = ("update a project tree\n" "Update a project tree by getting the latest revision of VERSION (or the\n" "default version of the project tree) and then applying a patch set of\n" "the differences between the project tree and the highest revision with\n" "which it is up-to-date.\n" "\n" "If the merge involves conflicts, a warning message is printed, and the\n" "new project tree will contain \".rej\" files.\n"); enum options { OPTS (OPT_ENUM) }; static struct opt_desc opts[] = { OPTS (OPT_DESC) {-1, 0, 0, 0, 0} }; int arch_cmd_update (t_uchar * program_name, int argc, char * argv[]) { int o; struct opt_parsed * option; t_uchar * default_archive = 0; t_uchar * upon = 0; t_uchar * dest = 0; int forward = 0; int exit_status = 0; int escape_classes = arch_escape_classes; safe_buffer_fd (1, 0, O_WRONLY, 0); option = 0; while (1) { o = opt_standard (lim_use_must_malloc, &option, opts, &argc, argv, program_name, usage, version_string, arch_cmd_update_help, opt_help_msg, opt_long_help, opt_version); if (o == opt_none) break; switch (o) { default: safe_printfmt (2, "unhandled option `%s'\n", option->opt_string); panic ("internal error parsing arguments"); usage_error: opt_usage (2, argv[0], program_name, usage, 1); exit (1); /* bogus_arg: */ safe_printfmt (2, "ill-formed argument for `%s' (`%s')\n", option->opt_string, option->arg_string); goto usage_error; case opt_archive: { lim_free (0, default_archive); default_archive = str_save (0, option->arg_string); break; } case opt_forward: { forward = 1; break; } case opt_dir: { lim_free (0, upon); upon = str_save (0, option->arg_string); break; } case opt_dest: { lim_free (0, dest); dest = str_save (0, option->arg_string); break; } case opt_unescaped: { escape_classes = 0; break; } } } if (argc > 2) goto usage_error; if (default_archive && !arch_valid_archive_name (default_archive)) { safe_printfmt (2, "%s: invalid archive name (%s)\n", argv[0], default_archive); exit (1); } { t_uchar * upon_root = 0; t_uchar * rvsnspec = 0; t_uchar * archive = 0; t_uchar * version = 0; t_uchar * to_level = 0; struct arch_archive * arch; t_uchar * upon_level = 0; rel_table archive_levels = rel_table_nil; t_uchar * archive_level = 0; if (! upon) upon = str_save (0, "."); upon_root = arch_tree_root (0, upon, 0); if (!upon_root) { safe_printfmt (2, "%s: dir not in a project tree (%s)\n", argv[0], upon); exit (1); } if (argc > 1) rvsnspec = str_save (0, argv[1]); if (!rvsnspec) { rvsnspec = arch_tree_version (upon_root); if (!rvsnspec) { safe_printfmt (2, "%s: tree has no default version (%s)\n", argv[0], upon_root); exit (1); } } if (!arch_valid_package_name (rvsnspec, arch_maybe_archive, arch_req_version, 1)) { safe_printfmt (2, "%s: illegal version name (%s)\n", argv[0], rvsnspec); exit (1); } archive = arch_parse_package_name (arch_ret_archive, default_archive, rvsnspec); version = arch_parse_package_name (arch_ret_package_version, 0, rvsnspec); arch = arch_archive_connect (archive, 0); invariant (!!arch); upon_level = arch_highest_patch_level (upon_root, archive, version); if (!upon_level) { safe_printfmt (2, "%s: tree has no common history with version\n tree: %s\n version: %s\n", argv[0], upon_root, rvsnspec); exit (1); } archive_levels = arch_archive_revisions (arch, version, 0); if (!rel_n_records (archive_levels)) { safe_printfmt (2, "%s: (WEIRD ERROR!) archive has no revisions for version (%s/%s)\n", argv[0], archive, version); exit (1); } if (dest) { safe_printfmt (1, "* copying %s to %s\n", upon_root, dest); safe_flush (1); arch_copy_project_tree (upon_root, dest, 1, 1); } else dest = str_save (0, upon_root); if (arch_valid_package_name (rvsnspec, arch_maybe_archive, arch_req_patch_level, 0)) { int x; to_level = arch_parse_package_name (arch_ret_patch_level, 0, rvsnspec); for (x = 0; x < rel_n_records (archive_levels); ++x) if (!str_cmp (to_level, rel_peek_str (archive_levels, x, 0))) break; if (x == rel_n_records (archive_levels)) { safe_printfmt (2, "%s: version (in archive) does not have level (%s/%s--%s)\n", argv[0], archive, version, to_level); exit (1); } } else { to_level = str_save (0, rel_peek_str (archive_levels, rel_n_records (archive_levels) - 1, 0)); } if (!str_cmp (upon_level, to_level)) { safe_printfmt (1, "* tree is already up to date\n"); safe_flush (1); } else { t_uchar * ancestor_rev = 0; t_uchar * latest_rev = 0; t_uchar * local_ancestor = 0; t_uchar * local_latest = 0; int use_replay_strategy = 1; ancestor_rev = str_alloc_cat_many (0, version, "--", upon_level, str_end); latest_rev = str_alloc_cat_many (0, version, "--", to_level, str_end); local_ancestor = arch_find_local_copy (-1, upon_root, 0, archive, ancestor_rev, "find-pristine"); local_latest = arch_find_local_copy (-1, upon_root, 0, archive, latest_rev, "find-pristine"); if (local_ancestor && local_latest) use_replay_strategy = 0; if (use_replay_strategy) { enum arch_revision_type type; int x; /* are we sure we really can? */ for (x = 0; x < rel_n_records (archive_levels); ++x) if (!str_cmp (upon_level, rel_peek_str (archive_levels, x, 0))) break; invariant (x < rel_n_records (archive_levels)); while (use_replay_strategy && (x < rel_n_records (archive_levels))) { t_uchar * this_rev = 0; this_rev = str_alloc_cat_many (0, version, "--", rel_peek_str (archive_levels, x, 0), str_end); arch_revision_type (&type, 0 , arch, this_rev); if (type != arch_simple_revision) { use_replay_strategy = 0; break; } lim_free (0, this_rev); ++x; } } safe_printfmt (1, "* setting aside local changes temporarily\n"); safe_flush (1); arch_call_cmd (arch_cmd_undo, argv[0], "-A", archive, "-d", dest, ancestor_rev, (escape_classes == 0) ? "--unescaped" : (char*)0, (char*)0); safe_printfmt (1, "* updating for new patches in archive\n"); safe_flush (1); if (use_replay_strategy) { /* could be fancy here and binary search for local copies :-) */ arch_call_cmd (arch_cmd_replay, argv[0], "--new", "-A", archive, "--dir", dest, version, (escape_classes == 0) ? "--unescaped" : (char*)0, (char*)0); } else { arch_call_cmd (arch_cmd_apply_delta, argv[0], "-A", archive, "--dir", dest, ancestor_rev, latest_rev, (escape_classes == 0) ? "--unescaped" : (char*)0, (char*)0); } safe_printfmt (1, "* reapplying local changes\n"); safe_flush (1); if (!forward) arch_call_cmd (arch_cmd_redo, argv[0], "-d", dest, (escape_classes == 0) ? "--unescaped" : (char*)0, (char*)0); else arch_call_cmd (arch_cmd_redo, argv[0], "--forward", "-d", dest, (escape_classes == 0) ? "--unescaped" : (char*)0, (char*)0); lim_free (0, ancestor_rev); lim_free (0, latest_rev); } lim_free (0, upon_root); lim_free (0, rvsnspec); lim_free (0, archive); lim_free (0, version); lim_free (0, to_level); arch_archive_close (arch); lim_free (0, upon_level); rel_free_table (archive_levels); lim_free (0, archive_level); } lim_free (0, upon); lim_free (0, dest); lim_free (0, default_archive); if (exit_status) { safe_printfmt (2, "\nupdate: conflicts occured during update\n"); } return exit_status; } /* tag: Tom Lord Wed Jun 4 22:39:12 2003 (cmd-update.c) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-import.c0000644000175000017500000002230610457622000017126 0ustar useruser/* cmd-import.c * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "config-options.h" #include "hackerlab/cmd/main.h" #include "tla/libfsutils/file-contents.h" #include "tla/libarch/namespace.h" #include "tla/libarch/project-tree.h" #include "tla/libarch/patch-logs.h" #include "tla/libarch/archive.h" #include "tla/libarch/proj-tree-lint.h" #include "tla/libarch/archive-setup.h" #include "tla/libarch/import.h" #include "tla/libarch/cmd.h" #include "tla/libarch/cmdutils.h" #include "tla/libarch/cmd-import.h" static t_uchar * usage = "[options] [[archive]/version]"; static t_uchar * version_string = (cfg__std__package " from regexps.com\n" "\n" "Copyright 2003 Tom Lord\n" "\n" "This is free software; see the source for copying conditions.\n" "There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\n" "PARTICULAR PURPOSE.\n" "\n" "Report bugs to " cfg__tla_bug_mail ".\n" "\n" cfg__std__release_id_string "\n"); #define OPTS(OP) \ OP (opt_help_msg, "h", "help", 0, \ "Display a help message and exit.") \ OP (opt_long_help, "H", 0, 0, \ "Display a verbose help message and exit.") \ OP (opt_version, "V", "version", 0, \ "Display a release identifier string\n" \ "and exit.") \ OP (opt_archive, "A", "archive", 1, \ "Override `my-default-archive'.") \ OP (opt_dir, "d", "dir DIR", 1, \ "Change to DIR first.") \ OP (opt_log, "l", "log FILE", 1, \ "Commit with log file FILE.") \ OP (opt_summary, "s", "summary TEXT", 1, \ "log with summary TEXT plus log-for-merge output" ) \ OP (opt_log_msg, "L", "log-message TEXT", 1, \ "log with TEXT") \ OP (opt_setup, "S", "setup", 0, \ "Use `archive-setup' if necessary; implied by default.") \ OP (opt_no_setup, 0, "no-setup", 0, \ "Do not use `archive-setup' even if necessary.") \ OP (opt_unescaped, 0, "unescaped", 0, \ "show filenames in unescaped form") t_uchar arch_cmd_import_help[] = ("archive a full-source base-0 revision\n" "Archive a from-scratch base revision of the project tree\n" "containing DIR (or the current directory). Use this command\n" "to create the first revision of a new project.\n" "\n" "If --log-message is specified without --summary, then TEXT is used both\n" "as the summary and the first line of the log body.\n"); enum options { OPTS (OPT_ENUM) }; static struct opt_desc opts[] = { OPTS (OPT_DESC) {-1, 0, 0, 0, 0} }; int arch_cmd_import (t_uchar * program_name, int argc, char * argv[]) { int o; struct opt_parsed * option; t_uchar * default_archive = 0; t_uchar * dir = 0; t_uchar * log_file = 0; t_uchar * log_text = 0; t_uchar * summary = 0; int setup = 1; int escape_classes = arch_escape_classes; dir = str_save (0, "."); safe_buffer_fd (1, 0, O_WRONLY, 0); option = 0; while (1) { o = opt_standard (lim_use_must_malloc, &option, opts, &argc, argv, program_name, usage, version_string, arch_cmd_import_help, opt_help_msg, opt_long_help, opt_version); if (o == opt_none) break; switch (o) { default: safe_printfmt (2, "unhandled option `%s'\n", option->opt_string); panic ("internal error parsing arguments"); usage_error: opt_usage (2, argv[0], program_name, usage, 1); exit (1); /* bogus_arg: */ safe_printfmt (2, "ill-formed argument for `%s' (`%s')\n", option->opt_string, option->arg_string); goto usage_error; case opt_archive: { default_archive = str_save (0, option->arg_string); break; } case opt_dir: { dir = str_save (0, option->arg_string); break; } case opt_log: { log_file = str_save (0, option->arg_string); break; } case opt_log_msg: { lim_free (0, log_text); log_text = str_save (0, option->arg_string); lim_free (0, log_file); log_file = 0; break; } case opt_summary: { lim_free (0, summary); summary = str_save (0, option->arg_string); lim_free (0, log_file); log_file = 0; break; } case opt_setup: { setup = 1; break; } case opt_no_setup: { setup = 0; break; } case opt_unescaped: { escape_classes = 0; break; } } } if (argc > 2) goto usage_error; { t_uchar * log = 0; t_uchar * vsnspec; t_uchar * tree_root = 0; t_uchar * archive = 0; t_uchar * version = 0; struct arch_archive * arch = 0; if (default_archive) { if (!arch_valid_archive_name (default_archive)) { safe_printfmt (2, "%s: invalid archive name (%s)\n", argv[0], default_archive); exit (1); } } tree_root = arch_tree_root (0, dir, 1); if (!tree_root) { safe_printfmt (2, "%s: not in project tree (%s)\n", argv[0], dir); exit (1); } if (argc == 2) vsnspec = argv[1]; else { vsnspec = arch_tree_version (tree_root); if (!vsnspec) { safe_printfmt (2, "%s: project tree has no default version\n tree: %s\n", argv[0], tree_root); exit (1); } } if (!arch_valid_package_name (vsnspec, arch_maybe_archive, arch_req_version, 0)) { safe_printfmt (2, "%s: invalid version name -- %s\n", argv[0], vsnspec); exit (1); } archive = arch_parse_package_name (arch_ret_archive, default_archive, vsnspec); version = arch_parse_package_name (arch_ret_non_archive, 0, vsnspec); if (arch_is_system_package_name (version)) { safe_printfmt (2, "%s: user's can not import into system versions\n version: %s\n", argv[0], version); exit (2); } if (log_text || summary) { if (! summary) summary = log_text; log = arch_auto_log_message (tree_root, archive, version, summary, log_text); } else { if (!log_file) { log_file = arch_make_log_file (tree_root, archive, version); } else { if (safe_access (log_file, F_OK)) { safe_printfmt (2, "%s: specified log file not found (%s)\n", argv[0], log_file); exit (1); } } if (!safe_access (log_file, F_OK)) { log = file_contents (log_file); if (!arch_valid_log_file (log)) { safe_printfmt (2, "%s: invalid log file (%s)\n", argv[0], log_file); exit (1); } } else { lim_free (0, log_file); log_file = 0; } } if (!arch_has_patch_log (tree_root, archive, version)) { safe_printfmt (2, "%s: tree has no patch log for version\n tree: %s\n version: %s/%s\n", argv[0], tree_root, archive, version); exit (1); } { rel_table log_entries = rel_table_nil; log_entries = arch_logs (tree_root, archive, version, 0); if (rel_n_records (log_entries)) { safe_printfmt (2, "%s: tree already has patch log entries for version\n tree: %s\n version: %s/%s\n", argv[0], tree_root, archive, version); exit (1); } } { struct arch_tree_lint_result * lint = 0; int status; lint = arch_tree_lint (tree_root); status = arch_print_tree_lint_report (2, lint, escape_classes); if (status < 0) { safe_printfmt (2, "%s: import aborted\n", argv[0]); exit (1); } } if (setup) arch_setup_archive_simple (1, archive, version); arch = arch_archive_connect (archive, 0); arch_check_for (arch, arch_req_version, version); arch_import (arch, version, tree_root, log); safe_printfmt (1, "* imported %s/%s\n", archive, version); if (log_file) safe_unlink (log_file); lim_free(0, log_file); lim_free (0, log); lim_free (0, tree_root); lim_free (0, archive); lim_free (0, version); } lim_free (0, default_archive); lim_free (0, dir); return 0; } /* tag: Tom Lord Sun May 25 13:15:21 2003 (revimport.c) */ tla-1.3.5+dfsg/src/tla/libarch/copy-project-tree.c0000644000175000017500000000153210457622000020424 0ustar useruser/* copy-project-tree.c: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/vu/safe.h" #include "tla/libfsutils/copy-file.h" #include "tla/libarch/project-tree.h" #include "tla/libarch/invent.h" #include "tla/libarch/copy-project-tree.h" void arch_copy_project_tree (t_uchar * from, t_uchar * to, int precious, int nested) { const int full_meta = arch_tree_has_meta_flag (from); rel_table inventory = rel_table_nil; inventory = arch_source_inventory (from, 1, precious, nested); safe_mkdir (to, 0777); copy_file_list (to, from, inventory, full_meta); rel_free_table (inventory); } /* tag: Tom Lord Wed Jun 4 16:32:04 2003 (copy-project-tree.c) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-library-find.h0000644000175000017500000000127610457622000020206 0ustar useruser/* cmd-library-find.h: * **************************************************************** * Copyright (C) 2003 Tom Lord, Stig Brautaset * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__CMD_LIBRARY_FIND_H #define INCLUDE__LIBARCH__CMD_LIBRARY_FIND_H #include "hackerlab/machine/types.h" extern t_uchar arch_cmd_library_find_help[]; /* automatically generated __STDC__ prototypes */ extern int arch_cmd_library_find (t_uchar * program_name, int argc, char * argv[]); #endif /* INCLUDE__LIBARCH__CMD_LIBRARY_FIND_H */ /* tag: Stig Brautaset Sat Jun 7 15:08:44 BST 2003 (cmd-library-find.h) */ tla-1.3.5+dfsg/src/tla/libarch/editor.h0000644000175000017500000000105310457622000016342 0ustar useruser/* editor.h: * **************************************************************** * Copyright (C) 2003 Colin Walters * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__EDITOR_H #define INCLUDE__LIBARCH__EDITOR_H #include "hackerlab/machine/types.h" /* automatically generated __STDC__ prototypes */ extern int arch_run_editor (t_uchar * name); #endif /* INCLUDE__LIBARCH__EDITOR_H */ /* tag: Colin Walters Wed, 19 Nov 2003 22:21:39 -0500 (editor.h) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-changelog.c0000644000175000017500000001417310457622000017546 0ustar useruser/* changelog.c * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "config-options.h" #include "hackerlab/cmd/main.h" #include "tla/libarch/namespace.h" #include "tla/libarch/project-tree.h" #include "tla/libarch/patch-logs.h" #include "tla/libarch/changelogs.h" #include "tla/libarch/cmd.h" #include "tla/libarch/cmd-changelog.h" /* __STDC__ prototypes for static functions */ static t_uchar * usage = "[options] [[archive]/version]"; static t_uchar * version_string = (cfg__std__package " from regexps.com\n" "\n" "Copyright 2003 Tom Lord\n" "\n" "This is free software; see the source for copying conditions.\n" "There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\n" "PARTICULAR PURPOSE.\n" "\n" "Report bugs to " cfg__tla_bug_mail ".\n" "\n" cfg__std__release_id_string "\n"); #define OPTS(OP) \ OP (opt_help_msg, "h", "help", 0, \ "Display a help message and exit.") \ OP (opt_long_help, "H", 0, 0, \ "Display a verbose help message and exit.") \ OP (opt_version, "V", "version", 0, \ "Display a release identifier string\n" \ "and exit.") \ OP (opt_archive, "A", "archive", 1, \ "Override `my-default-archive'") \ OP (opt_dir, "d", "dir DIR", 1, \ "cd to DIR first") \ OP (opt_no_files, 0, "no-files", 0, \ "exclude file lists from ChangeLog") \ OP (opt_untagged, 0, "untagged", 0, \ "don't implicitly tag the output file") \ OP (opt_new_entry, 0, "new-entry PATCH,FILE", 1, \ "make FILE the first (top) entry\n" \ " for patch level PATCH") t_uchar arch_cmd_changelog_help[] = ("generate a ChangeLog from a patch log\n" "Generate a ChangeLog for VERSION from the patch log for DIR.\n"); enum options { OPTS (OPT_ENUM) }; static struct opt_desc opts[] = { OPTS (OPT_DESC) {-1, 0, 0, 0, 0} }; int arch_cmd_changelog (t_uchar * program_name, int argc, char * argv[]) { int o; struct opt_parsed * option; t_uchar * default_archive = 0; t_uchar * dir = 0; t_uchar * new_entry_arg = 0; int no_files = 0; int untagged = 0; dir = str_save (0, "."); safe_buffer_fd (1, 0, O_WRONLY, 0); option = 0; while (1) { o = opt_standard (lim_use_must_malloc, &option, opts, &argc, argv, program_name, usage, version_string, arch_cmd_changelog_help, opt_help_msg, opt_long_help, opt_version); if (o == opt_none) break; switch (o) { default: safe_printfmt (2, "unhandled option `%s'\n", option->opt_string); panic ("internal error parsing arguments"); usage_error: opt_usage (2, argv[0], program_name, usage, 1); exit (1); /* bogus_arg: */ safe_printfmt (2, "ill-formed argument for `%s' (`%s')\n", option->opt_string, option->arg_string); goto usage_error; case opt_archive: { default_archive = str_save (0, option->arg_string); break; } case opt_dir: { dir = str_save (0, option->arg_string); break; } case opt_no_files: { no_files = 1; break; } case opt_untagged: { untagged = 1; break; } case opt_new_entry: { new_entry_arg = str_save (0, option->arg_string); break; } } } if (argc > 2) goto usage_error; { t_uchar * tree_root = 0; t_uchar * version_spec; t_uchar * new_entry_patch_lvl = 0; t_uchar * new_entry_file = 0; t_uchar * archive = 0; t_uchar * version = 0; tree_root = arch_tree_root (0, dir, 0); if (!tree_root) { safe_printfmt (2, "%s: not in project tree (%s)\n", argv[0], dir); exit (1); } if (argc == 2) { version_spec = argv[1]; } else { version_spec = arch_tree_version (tree_root); if (!version_spec) { safe_printfmt (2, "%s: no default tree version\n tree: %s\n", argv[0], tree_root); exit (1); } } if (default_archive) { if (!arch_valid_archive_name (default_archive)) { safe_printfmt (2, "%s: invalid archive name (%s)\n", argv[0], default_archive); exit (1); } } if (new_entry_arg) { t_uchar * comma; comma = str_chr_index (new_entry_arg, ','); if (!comma) { safe_printfmt (2, "ill-formed argument for --new-entry (`%s')\n", new_entry_arg); exit (1); } new_entry_patch_lvl = str_save_n (0, new_entry_arg, comma - new_entry_arg); new_entry_file = str_save (0, comma + 1); if (!arch_valid_patch_level_name (new_entry_patch_lvl)) { safe_printfmt (2, "bogus patch-level in argument for --new-entry (`%s')\n", new_entry_patch_lvl); exit (1); } } archive = arch_parse_package_name (arch_ret_archive, default_archive, version_spec); version = arch_parse_package_name (arch_ret_non_archive, 0, version_spec); arch_generate_changelog (1, tree_root, no_files, untagged, new_entry_patch_lvl, new_entry_file, archive, version); lim_free (0, tree_root); lim_free (0, new_entry_patch_lvl); lim_free (0, new_entry_file); lim_free (0, archive); lim_free (0, version); } lim_free (0, default_archive); lim_free (0, dir); lim_free (0, new_entry_arg); return 0; } /* tag: Tom Lord Tue May 13 14:25:54 2003 (changelog.c) */ tla-1.3.5+dfsg/src/tla/libarch/inv-ids.h0000644000175000017500000000754010457622000016434 0ustar useruser/* inv-ids.h: file inventory ids * **************************************************************** * Copyright (C) 2002, 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__INV_IDS_H #define INCLUDE__LIBARCH__INV_IDS_H #include "hackerlab/machine/types.h" #include "hackerlab/os/sys/stat.h" #include "tla/libawk/associative.h" #include "tla/libawk/relational.h" enum arch_id_tagging_method { arch_names_id_tagging, arch_implicit_id_tagging, arch_tagline_id_tagging, arch_explicit_id_tagging, arch_unspecified_id_tagging, /* used in make/apply_changeset */ }; enum arch_inventory_category { arch_inventory_source = 1, arch_inventory_precious = 2, arch_inventory_backup = 4, arch_inventory_junk = 8, arch_inventory_tree = 16, arch_inventory_unrecognized = 32, arch_inventory_excludes = 64 }; /* automatically generated __STDC__ prototypes */ extern t_uchar * arch_log_file_id (const t_uchar * archive, const t_uchar * revision); extern assoc_table arch_filenames_ids (rel_table * file_list, const t_uchar * tree_root); extern t_uchar * arch_inventory_id (enum arch_id_tagging_method method, int untagged_is_source, const t_uchar * path, assoc_table id_tagging_shortcut, struct stat * known_lstat, assoc_table * explicit_skips); extern t_uchar * arch_id_tagging_method_name (enum arch_id_tagging_method m); extern enum arch_id_tagging_method arch_id_tagging_method_from_name (const t_uchar * name); extern t_uchar * arch_default_id_tagging_method_contents (enum arch_id_tagging_method method); extern t_uchar * arch_tree_id_tagging_method_file (const t_uchar * tree_root); extern enum arch_id_tagging_method arch_tree_id_tagging_method (enum arch_inventory_category * cat_var, const t_uchar * tree_root, int strict); extern void arch_set_tree_id_tagging_method (const t_uchar * tree_root, enum arch_id_tagging_method method); extern t_uchar * arch_explicit_id_file_for (const t_uchar * path); extern t_uchar * arch_generate_id (void); extern int arch_add_explicit_id (const t_uchar * path, const t_uchar * id); extern void arch_delete_explicit_id (const t_uchar * path); extern void arch_move_explicit_id (const t_uchar * from, const t_uchar * to); extern t_uchar * arch_strong_explicit_dflt_file (const t_uchar * dir); extern t_uchar * arch_weak_explicit_dflt_file (const t_uchar * dir); extern t_uchar * arch_dont_care_explicit_dflt_file (const t_uchar * dir); extern int arch_is_dont_care_explicit_dflt_dir (const t_uchar * dir); extern void arch_delete_strong_explicit_default (const t_uchar * dir); extern void arch_delete_weak_explicit_default (const t_uchar * dir); extern void arch_delete_dont_care_explicit_default (const t_uchar * dir); extern void arch_set_strong_explicit_default (const t_uchar * dir, const t_uchar * id); extern void arch_set_weak_explicit_default (const t_uchar * dir, const t_uchar * id); extern void arch_set_dont_care_explicit_default (const t_uchar * dir); extern t_uchar * arch_id_from_explicit_file (int *errn, const t_uchar * path); extern int str_cmp_suffix_n(t_uchar * a_string, t_uchar * b_string, int length); #endif /* INCLUDE__LIBARCH__INV_IDS_H */ /* tag: Tom Lord Sat Jan 5 15:26:10 2002 (inv-tags.h) */ tla-1.3.5+dfsg/src/tla/libarch/make-changeset-files.h0000644000175000017500000000221210457622000021026 0ustar useruser/* make-changeset-files.h: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__MAKE_CHANGESET_FILES_H #define INCLUDE__LIBARCH__MAKE_CHANGESET_FILES_H #include "tla/libarch/changeset-report.h" #include "tla/libarch/make-changeset.h" /* automatically generated __STDC__ prototypes */ extern void arch_make_files_changeset (struct arch_make_changeset_report * report, const t_uchar * dest, rel_table file_list, const t_uchar * orig, const t_uchar * mod, enum arch_id_tagging_method method, enum arch_inventory_category untagged_source_category, int escape_classes); #endif /* INCLUDE__LIBARCH__MAKE_CHANGESET_FILES_H */ /* tag: Tom Lord Sat Jan 5 15:26:10 2002 (make-changeset-files.h) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-changeset.c0000644000175000017500000001234310457622000017555 0ustar useruser/* cmd-changeset.c * **************************************************************** * Copyright (C) 2001, 2002, 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "config-options.h" #include "hackerlab/cmd/main.h" #include "hackerlab/mem/mem.h" #include "tla/libarch/make-changeset.h" #include "tla/libarch/make-changeset-files.h" #include "tla/libarch/cmd.h" #include "tla/libarch/cmd-changeset.h" /* __STDC__ prototypes for static functions */ static void changeset_callback (void * ign, const char * fmt, va_list ap); static t_uchar * usage = "[options] ORIG MOD DEST [files]"; static t_uchar * version_string = (cfg__std__package " from regexps.com\n" "\n" "Copyright 2001, 2002, 2003 Tom Lord\n" "\n" "This is free software; see the source for copying conditions.\n" "There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\n" "PARTICULAR PURPOSE.\n" "\n" "Report bugs to " cfg__tla_bug_mail ".\n" "\n" cfg__std__release_id_string "\n"); #define OPTS(OP) \ OP (opt_help_msg, "h", "help", 0, \ "Display a help message and exit.") \ OP (opt_long_help, "H", 0, 0, \ "Display a verbose help message and exit.") \ OP (opt_version, "V", "version", 0, \ "Display a release identifier string\n" \ "and exit.") \ OP (opt_file_list, 0, "file-list FILES", 1, \ "record only diffs of selected files") \ OP (opt_unescaped, 0, "unescaped", 0, \ "show filenames in unescaped form") t_uchar arch_cmd_changeset_help[] = ("compute a whole-tree changeset\n" "Create the output directory DESTINATION (it must not already\n" "exist).\n" "\n" "Compare source trees ORIGINAL and MODIFIED. Create a changeset\n" "tree in DESTINATION\n" "\n" "See also \"tla apply-changeset -H\".\n"); enum options { OPTS (OPT_ENUM) }; static struct opt_desc opts[] = { OPTS (OPT_DESC) {-1, 0, 0, 0, 0} }; int arch_cmd_changeset (t_uchar * program_name, int argc, char * argv[]) { int o; struct opt_parsed * option; t_uchar * file_list_file = 0; int escape_classes = arch_escape_classes; safe_buffer_fd (1, 0, O_WRONLY, 0); option = 0; while (1) { o = opt_standard (lim_use_must_malloc, &option, opts, &argc, argv, program_name, usage, version_string, arch_cmd_changeset_help, opt_help_msg, opt_long_help, opt_version); if (o == opt_none) break; switch (o) { default: safe_printfmt (2, "unhandled option `%s'\n", option->opt_string); panic ("internal error parsing arguments"); case opt_double_dash: usage_error: opt_usage (2, argv[0], program_name, usage, 1); exit (1); /* bogus_arg: */ safe_printfmt (2, "ill-formed argument for `%s' (`%s')\n", option->opt_string, option->arg_string); goto usage_error; case opt_file_list: { lim_free (0, file_list_file); file_list_file = str_save (0, option->arg_string); break; } case opt_unescaped: { escape_classes = 0; break; } } } if (argc < 4 || str_cmp (argv[2], "--") == 0 || str_cmp (argv[3], "--") == 0) goto usage_error; { struct arch_make_changeset_report report; mem_set0 ((void *)&report, sizeof (report)); report.callback = changeset_callback; if (argc == 4 && !file_list_file) { arch_make_changeset (&report, argv[1], argv[2], argv[3], arch_unspecified_id_tagging, arch_inventory_unrecognized, rel_table_nil, 0, 0, escape_classes); } else { rel_table file_list = rel_table_nil; if (argc > 4) { int x = 4; if (str_cmp (argv[x], "--") == 0) x++; while (x < argc) rel_add_records (&file_list, rel_singleton_record_taking (rel_make_field_str (argv[x++])), rel_record_null); } if (file_list_file) { int in_fd = safe_open (file_list_file, O_RDONLY, 0); rel_read_table (in_fd, 1, argv[0], file_list_file); safe_close (in_fd); } arch_make_files_changeset (&report, argv[3], file_list, argv[1], argv[2], arch_unspecified_id_tagging, arch_inventory_unrecognized, escape_classes); rel_free_table (file_list); } arch_free_make_changeset_report_data (&report); } lim_free (0, file_list_file); return 0; } static void changeset_callback (void * ign, const char * fmt, va_list ap) { safe_printfmt_va_list (1, fmt, ap); safe_flush (1); } /* tag: Tom Lord Thu May 15 02:25:10 2003 (changeset.c) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-touch.h0000644000175000017500000000116310457622000016741 0ustar useruser/* cmd-touch.h: * **************************************************************** * Copyright (C) 2005 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__CMD_TOUCH_H #define INCLUDE__LIBARCH__CMD_TOUCH_H #include "hackerlab/machine/types.h" extern t_uchar arch_cmd_touch_help[]; /* automatically generated __STDC__ prototypes */ extern int arch_cmd_touch (t_uchar *program_name, int argc, char * argv[]); #endif /* INCLUDE__LIBARCH__CMD_TOUCH_H */ /* tag: Tom Lord Fri Mar 18 16:49:01 2005 (cmd-touch.h) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-sync-tree.c0000644000175000017500000001350110457622000017522 0ustar useruser/* cmd-sync-tree.c: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "config-options.h" #include "hackerlab/cmd/main.h" #include "hackerlab/fs/file-names.h" #include "hackerlab/fs/cwd.h" #include "hackerlab/vu/vu-dash.h" #include "tla/libfsutils/tmp-files.h" #include "tla/libfsutils/rmrf.h" #include "tla/libfsutils/copy-file.h" #include "tla/libfsutils/dir-as-cwd.h" #include "tla/libarch/namespace.h" #include "tla/libarch/project-tree.h" #include "tla/libarch/my.h" #include "tla/libarch/copy-project-tree.h" #include "tla/libarch/sync-tree.h" #include "tla/libarch/chatter.h" #include "tla/libarch/cmd.h" #include "tla/libarch/cmdutils.h" #include "tla/libarch/cmd-sync-tree.h" static t_uchar * usage = "[options] revision"; static t_uchar * version_string = (cfg__std__package " from regexps.com\n" "\n" "Copyright 2003 Tom Lord\n" "\n" "This is free software; see the source for copying conditions.\n" "There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\n" "PARTICULAR PURPOSE.\n" "\n" "Report bugs to " cfg__tla_bug_mail ".\n" "\n" cfg__std__release_id_string "\n"); #define OPTS(OP) \ OP (opt_help_msg, "h", "help", 0, \ "Display a help message and exit.") \ OP (opt_long_help, "H", 0, 0, \ "Display a verbose help message and exit.") \ OP (opt_version, "V", "version", 0, \ "Display a release identifier string\n" \ "and exit.") \ OP (opt_archive, "A", "archive", 1, \ "Override `my-default-archive'") \ OP (opt_dir, "d", "dir DIR", 1, \ "Operate on project tree in DIR (default `.')") \ OP (opt_dest, 0, "dest DEST", 1, \ "Instead of modifying the project tree in-place,\n" \ "make a copy of it to DEST and apply the result to that") \ OP (opt_unescaped, 0, "unescaped", 0, \ "show filenames in unescaped form") t_uchar arch_cmd_sync_tree_help[] = ("unify a project tree's patch-log with a given revision\n" "The new project tree is formed by getting the REVISION and adding all\n" "patch-log entries from REVISION. No actual merging is performed --\n" "only the patch-log is changed.\n"); enum options { OPTS (OPT_ENUM) }; static struct opt_desc opts[] = { OPTS (OPT_DESC) {-1, 0, 0, 0, 0} }; int arch_cmd_sync_tree (t_uchar * program_name, int argc, char * argv[]) { int o; struct opt_parsed * option; t_uchar * default_archive = 0; t_uchar * upon = 0; t_uchar * dest = 0; int escape_classes = arch_escape_classes; safe_buffer_fd (1, 0, O_WRONLY, 0); option = 0; while (1) { o = opt_standard (lim_use_must_malloc, &option, opts, &argc, argv, program_name, usage, version_string, arch_cmd_sync_tree_help, opt_help_msg, opt_long_help, opt_version); if (o == opt_none) break; switch (o) { default: safe_printfmt (2, "unhandled option `%s'\n", option->opt_string); panic ("internal error parsing arguments"); usage_error: opt_usage (2, argv[0], program_name, usage, 1); exit (1); /* bogus_arg: */ safe_printfmt (2, "ill-formed argument for `%s' (`%s')\n", option->opt_string, option->arg_string); goto usage_error; case opt_archive: { lim_free (0, default_archive); default_archive = str_save (0, option->arg_string); break; } case opt_dir: { lim_free (0, upon); upon = str_save (0, option->arg_string); break; } case opt_dest: { lim_free (0, dest); dest = str_save (0, option->arg_string); break; } case opt_unescaped: { escape_classes = 0; break; } } } if (argc != 2) goto usage_error; if (default_archive && !arch_valid_archive_name (default_archive)) { safe_printfmt (2, "%s: invalid archive name (%s)\n", argv[0], default_archive); exit (1); } { t_uchar * revspec = 0; t_uchar * upon_root = 0; t_uchar * archive = 0; struct arch_archive * arch = 0; t_uchar * revision = 0; revspec = argv[1]; upon_root = arch_tree_root (0, upon, 0); if (!upon_root) { safe_printfmt (2, "%s: dir not in a project tree (%s)\n", argv[0], upon); exit (1); } revision = arch_determine_revision (&arch, default_archive, revspec, argv[0]); archive = str_save (0, arch->name); arch_chatter (1, "* making sync tree with %s\n", revision); if (dest) arch_chatter (1, "** source %s\n** dest %s\n", upon_root, dest); else arch_chatter (1, "** directory %s\n", upon_root); if (dest) { safe_printfmt (1, "* copying %s to %s\n", upon_root, dest); safe_flush (1); arch_copy_project_tree (upon_root, dest, 1, 1); } else dest = str_save (0, upon_root); arch_sync_tree (1, dest, arch, archive, revision); lim_free (0, upon_root); lim_free (0, archive); arch_archive_close (arch); lim_free (0, revision); } lim_free (0, upon); lim_free (0, dest); lim_free (0, default_archive); return 0; } /* tag: Tom Lord Tue Jun 17 16:02:09 2003 (cmd-sync-tree.c) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-make-branch.h0000644000175000017500000000126710457622000017774 0ustar useruser/* cmd-make-branch.h: * **************************************************************** * Copyright (C) 2003 Tom Lord, Stig Brautaset * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__CMD_MAKE_BRANCH_H #define INCLUDE__LIBARCH__CMD_MAKE_BRANCH_H #include "hackerlab/machine/types.h" extern t_uchar arch_cmd_make_branch_help[]; /* automatically generated __STDC__ prototypes */ extern int arch_cmd_make_branch (t_uchar * program_name, int argc, char * argv[]); #endif /* INCLUDE__LIBARCH__CMD_MAKE_BRANCH_H */ /* tag: Stig Brautaset Sat Jun 7 15:55:48 BST 2003 (cmd-make-branch.h) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-sync-tree.h0000644000175000017500000000121710457622000017530 0ustar useruser/* cmd-sync-tree.h: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__CMD_SYNC_TREE_H #define INCLUDE__LIBARCH__CMD_SYNC_TREE_H #include "hackerlab/machine/types.h" extern t_uchar arch_cmd_sync_tree_help[]; /* automatically generated __STDC__ prototypes */ extern int arch_cmd_sync_tree (t_uchar * program_name, int argc, char * argv[]); #endif /* INCLUDE__LIBARCH__CMD_SYNC_TREE_H */ /* tag: Tom Lord Sat Jan 5 15:26:10 2002 (cmd-sync-tree.h) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-lock-pristine.h0000644000175000017500000000130510457622000020400 0ustar useruser/* cmd-lock-pristine.h: * **************************************************************** * Copyright (C) 2003 Tom Lord, Stig Brautaset * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__CMD_LOCK_PRISTINE_H #define INCLUDE__LIBARCH__CMD_LOCK_PRISTINE_H #include "hackerlab/machine/types.h" extern t_uchar arch_cmd_lock_pristine_help[]; /* automatically generated __STDC__ prototypes */ extern int arch_cmd_lock_pristine (t_uchar * program_name, int argc, char * argv[]); #endif /* INCLUDE__LIBARCH__CMD_LOCK_PRISTINE_H */ /* tag: Stig Brautaset Sat Jun 7 15:26:31 BST 2003 (cmd-lock-pristine.h) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-file-diff.h0000644000175000017500000000126010457622000017442 0ustar useruser/* cmd-file-diff.h: * **************************************************************** * Copyright (C) 2003, 2004 Tom Lord, Stig Brautaset * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__CMD_FILE_DIFF_H #define INCLUDE__LIBARCH__CMD_FILE_DIFF_H #include "hackerlab/machine/types.h" extern t_uchar arch_cmd_file_diff_help[]; /* automatically generated __STDC__ prototypes */ extern int arch_cmd_file_diff (t_uchar * program_name, int argc, char * argv[]); #endif /* INCLUDE__LIBARCH__CMD_FILE_DIFF_H */ /* tag: Stig Brautaset Sat Jun 7 14:09:26 BST 2003 (cmd-file-diffs.h) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-cat-config.h0000644000175000017500000000125410457622000017632 0ustar useruser/* cmd-cat-config.h: * **************************************************************** * Copyright (C) 2003 Tom Lord, Stig Brautaset * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__CMD_CAT_CONFIG_H #define INCLUDE__LIBARCH__CMD_CAT_CONFIG_H #include "hackerlab/machine/types.h" extern t_uchar arch_cmd_cat_config_help[]; /* automatically generated __STDC__ prototypes */ extern int arch_cmd_cat_config (t_uchar * program_name, int argc, char * argv[]); #endif /* INCLUDE__LIBARCH__CMD_CAT_CONFIG_H */ /* tag: Stig Brautaset Sat Jun 7 13:38:07 BST 2003 (cmd-cfgcat.h) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-whereis-archive.c0000644000175000017500000000760110457622000020702 0ustar useruser/* cmd-whereis-archive.c * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "config-options.h" #include "hackerlab/cmd/main.h" #include "tla/libfsutils/ensure-dir.h" #include "tla/libarch/my.h" #include "tla/libarch/namespace.h" #include "tla/libarch/archives.h" #include "tla/libarch/cmd-whereis-archive.h" static t_uchar * usage = "[options] archive"; static t_uchar * version_string = (cfg__std__package " from regexps.com\n" "\n" "Copyright 2003 Tom Lord\n" "\n" "This is free software; see the source for copying conditions.\n" "There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\n" "PARTICULAR PURPOSE.\n" "\n" "Report bugs to " cfg__tla_bug_mail ".\n" "\n" cfg__std__release_id_string "\n"); #define OPTS(OP) \ OP (opt_help_msg, "h", "help", 0, \ "Display a help message and exit.") \ OP (opt_long_help, "H", 0, 0, \ "Display a verbose help message and exit.") \ OP (opt_version, "V", "version", 0, \ "Display a release identifier string\n" \ "and exit.") t_uchar arch_cmd_whereis_archive_help[] = ("print an archive location registration\n" "Print the registered location of an archive.\n" "\n" "Usually the archive must have been previously registered with\n" "\"tla register-archive\".\n" "\n" "As a special exception, the the archive is not registered, but\n" "is the name of the archive rooted at the location given with\n" "the option -R (--root) or in the environment variable ARCHROOT\n" "then print that root directory.\n"); enum options { OPTS (OPT_ENUM) }; static struct opt_desc opts[] = { OPTS (OPT_DESC) {-1, 0, 0, 0, 0} }; int arch_cmd_whereis_archive (t_uchar * program_name, int argc, char * argv[]) { int o; struct opt_parsed * option; t_uchar * which_archive; t_uchar * found_archive; safe_buffer_fd (1, 0, O_WRONLY, 0); option = 0; while (1) { o = opt_standard (lim_use_must_malloc, &option, opts, &argc, argv, program_name, usage, version_string, arch_cmd_whereis_archive_help, opt_help_msg, opt_long_help, opt_version); if (o == opt_none) break; switch (o) { default: safe_printfmt (2, "unhandled option `%s'\n", option->opt_string); panic ("internal error parsing arguments"); usage_error: opt_usage (2, argv[0], program_name, usage, 1); exit (1); /* bogus_arg: */ safe_printfmt (2, "ill-formed argument for `%s' (`%s')\n", option->opt_string, option->arg_string); goto usage_error; } } if (argc != 2) goto usage_error; which_archive = argv[1]; if (!arch_valid_archive_name (which_archive)) { safe_printfmt (2, "%s: invalid archive name (%s)\n", argv[0], which_archive); exit (2); } found_archive = arch_archive_location (which_archive, 1); if (!found_archive) exit (1); safe_printfmt (1, "%s\n", found_archive); return 0; } /* tag: Tom Lord Sun May 18 21:37:02 2003 (whereis-archive.c) */ tla-1.3.5+dfsg/src/tla/libarch/pristines.c0000644000175000017500000004740110457622000017076 0ustar useruser/* pristines.c: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/bugs/panic.h" #include "hackerlab/char/char-class.h" #include "hackerlab/char/str.h" #include "hackerlab/fs/file-names.h" #include "hackerlab/vu/safe.h" #include "tla/libfsutils/dir-listing.h" #include "tla/libfsutils/ensure-dir.h" #include "tla/libfsutils/tmp-files.h" #include "tla/libfsutils/rmrf.h" #include "tla/libfsutils/copy-file.h" #include "tla/libarch/project-tree.h" #include "tla/libarch/invent.h" #include "tla/libarch/build-revision.h" #include "tla/libarch/inode-sig.h" #include "tla/libarch/namespace.h" #include "tla/libarch/pristines.h" void arch_make_pristine (const t_uchar * tree_root, const t_uchar * archive, const t_uchar * revision) { rel_table inventory = rel_table_nil; t_uchar * tmp_pristine = 0; const int full_meta = arch_tree_has_meta_flag (tree_root); inventory = arch_source_inventory (tree_root, 1, 0, 0); tmp_pristine = tmp_file_name (tree_root, ",,pristine"); rmrf_file (tmp_pristine); safe_mkdir (tmp_pristine, 0777); copy_file_list (tmp_pristine, tree_root, inventory, full_meta); arch_install_pristine (tree_root, archive, revision, tmp_pristine); rel_free_table (inventory); lim_free (0, tmp_pristine); } void arch_add_pristine (int chatter_fd, const t_uchar * tree_root, struct arch_archive * arch, const t_uchar * archive, const t_uchar * revision) { t_uchar * tmp_path = 0; t_uchar * cache_dir = 0; tmp_path = tmp_file_name (tree_root, ",,new-pristine"); safe_mkdir (tmp_path, 0777); cache_dir = file_name_directory_file (0, tree_root); arch_build_revision (chatter_fd, tmp_path, arch, archive, revision, cache_dir); arch_install_pristine (tree_root, archive, revision, tmp_path); lim_free (0, tmp_path); lim_free (0, cache_dir); } t_uchar * arch_pristine_loc (const t_uchar * archive, const t_uchar * revision, int locked_p) { t_uchar * category = 0; t_uchar * branch = 0; t_uchar * version = 0; t_uchar * answer = 0; invariant (arch_valid_package_name (revision, arch_no_archive, arch_req_patch_level, 0)); invariant (arch_valid_archive_name (archive)); category = arch_parse_package_name (arch_ret_category, 0, revision); branch = arch_parse_package_name (arch_ret_package, 0, revision); version = arch_parse_package_name (arch_ret_package_version, 0, revision); answer = str_alloc_cat_many (0, "{arch}/++pristine-trees/", (locked_p ? "locked" : "unlocked"), "/", category, "/", branch, "/", version, "/", archive, "/", revision, str_end); lim_free (0, category); lim_free (0, branch); lim_free (0, version); return answer; } t_uchar * arch_pristine_path (const t_uchar * tree_root, const t_uchar * archive, const t_uchar * revision, int locked_p) { t_uchar * loc = 0; t_uchar * answer = 0; loc = arch_pristine_loc (archive, revision, locked_p); answer = file_name_in_vicinity (0, tree_root, loc); lim_free (0, loc); return answer; } void arch_install_pristine (const t_uchar * tree_root, const t_uchar * archive, const t_uchar * revision, const t_uchar * source) { t_uchar * loc = 0; t_uchar * path = 0; arch_snap_inode_sig (source, archive, revision); loc = arch_pristine_loc (archive, revision, 0); path = file_name_in_vicinity (0, tree_root, loc); ensure_directory_exists (path); rmrf_file (path); safe_rename (source, path); lim_free (0, loc); lim_free (0, path); } void arch_lock_pristine (const t_uchar * tree_root, const t_uchar * archive, const t_uchar * revision) { t_uchar * locked_path = 0; t_uchar * unlocked_path = 0; locked_path = arch_pristine_path (tree_root, archive, revision, 1); unlocked_path = arch_pristine_path (tree_root, archive, revision, 0); if (safe_access (locked_path, F_OK)) { t_uchar * locked_dir = 0; if (safe_access (unlocked_path, F_OK)) { safe_printfmt (2, "arch_lock_pristine: unlocked pristine tree not found for %s/%s\n", archive, revision); exit (2); } locked_dir = file_name_directory_file (0, locked_path); ensure_directory_exists (locked_dir); safe_rename (unlocked_path, locked_path); lim_free (0, locked_dir); } lim_free (0, locked_path); lim_free (0, unlocked_path); } void arch_unlock_pristine (const t_uchar * tree_root, const t_uchar * archive, const t_uchar * revision) { t_uchar * locked_path = 0; t_uchar * unlocked_path = 0; locked_path = arch_pristine_path (tree_root, archive, revision, 1); unlocked_path = arch_pristine_path (tree_root, archive, revision, 0); if (safe_access (unlocked_path, F_OK)) { t_uchar * unlocked_dir = 0; if (safe_access (locked_path, F_OK)) { safe_printfmt (2, "arch_unlock_pristine: locked pristine tree not found for %s/%s\n", archive, revision); exit (2); } unlocked_dir = file_name_directory_file (0, unlocked_path); ensure_directory_exists (unlocked_dir); safe_rename (locked_path, unlocked_path); lim_free (0, unlocked_dir); } lim_free (0, locked_path); lim_free (0, unlocked_path); } rel_table arch_pristines (const t_uchar * tree_root, const t_uchar * archive_limit, const t_uchar * limit, int pristine_types) { int here_fd; int errn; struct stat statb; t_uchar * category = 0; t_uchar * branch = 0; t_uchar * version = 0; const t_uchar * revision = 0; t_uchar * locked_in_this_tree_path = 0; t_uchar * unlocked_in_this_tree_path = 0; rel_table answer = rel_table_nil; int x; here_fd = safe_open (".", O_RDONLY, 0); if (archive_limit) invariant (arch_valid_archive_name (archive_limit)); if (limit) { invariant (arch_valid_package_name (limit, arch_no_archive, arch_req_category, 1)); category = arch_parse_package_name (arch_ret_category, 0, limit); if (arch_valid_package_name (limit, arch_no_archive, arch_req_package, 1)) { branch = arch_parse_package_name (arch_ret_package, 0, limit); if (arch_valid_package_name (limit, arch_no_archive, arch_req_version, 1)) { version = arch_parse_package_name (arch_ret_package_version, 0, limit); if (arch_valid_package_name (limit, arch_no_archive, arch_req_patch_level, 0)) { revision = limit; } } } } unlocked_in_this_tree_path = file_name_in_vicinity (0, tree_root, "{arch}/++pristine-trees/unlocked"); locked_in_this_tree_path = file_name_in_vicinity (0, tree_root, "{arch}/++pristine-trees/locked"); for (x = arch_unlocked_pristine; x != 0; (x = ((x == arch_unlocked_pristine) ? arch_locked_pristine : 0))) { if (x & pristine_types) { switch (x) { case arch_unlocked_pristine: { if (vu_chdir (&errn, unlocked_in_this_tree_path)) continue; break; } case arch_locked_pristine: { if (vu_chdir (&errn, locked_in_this_tree_path)) continue; break; } default: { panic ("not reached in arch_pristines"); } } { rel_table maybe_categories = rel_table_nil; int c; if (category) { rel_add_records (&maybe_categories, rel_singleton_record_taking (rel_make_field_str (category)), rel_record_null); } else { maybe_categories = directory_files ("."); } for (c = 0; c < rel_n_records (maybe_categories); ++c) { if (arch_valid_package_name (rel_peek_str (maybe_categories, c, 0), arch_no_archive, arch_req_category, 0) && (!vu_lstat (&errn, rel_peek_str (maybe_categories, c, 0), &statb) && S_ISDIR (statb.st_mode))) { rel_table maybe_branches = rel_table_nil; int b; safe_chdir (rel_peek_str (maybe_categories, c, 0)); if (branch) { rel_add_records (&maybe_branches, rel_singleton_record_taking (rel_make_field_str (branch)), rel_record_null); } else { maybe_branches = directory_files ("."); } for (b = 0; b < rel_n_records (maybe_branches); ++b) { if (arch_valid_package_name (rel_peek_str (maybe_branches, b, 0), arch_no_archive, arch_req_package, 0) && (!vu_lstat (&errn, rel_peek_str (maybe_branches, b, 0), &statb) && S_ISDIR (statb.st_mode))) { rel_table maybe_versions = rel_table_nil; int v; safe_chdir (rel_peek_str (maybe_branches, b, 0)); if (version) { rel_add_records (&maybe_versions, rel_singleton_record_taking (rel_make_field_str (version)), rel_record_null); } else { maybe_versions = directory_files ("."); } for (v = 0; v < rel_n_records (maybe_versions); ++v) { if (arch_valid_package_name (rel_peek_str (maybe_versions, v, 0), arch_no_archive, arch_req_version, 0) && (!vu_lstat (&errn, rel_peek_str (maybe_versions, v, 0), &statb) && S_ISDIR (statb.st_mode))) { rel_table maybe_archives = rel_table_nil; int a; safe_chdir (rel_peek_str (maybe_versions, v, 0)); if (archive_limit) { rel_add_records (&maybe_archives, rel_singleton_record_taking (rel_make_field_str (archive_limit)), rel_record_null); } else { maybe_archives = directory_files ("."); } for (a = 0; a < rel_n_records (maybe_archives); ++a) { if (arch_valid_archive_name (rel_peek_str (maybe_archives, a, 0)) && (!vu_lstat (&errn, rel_peek_str (maybe_archives, a, 0), &statb) && S_ISDIR (statb.st_mode))) { rel_table maybe_revisions = rel_table_nil; int r; safe_chdir (rel_peek_str (maybe_archives, a, 0)); if (revision) { rel_add_records (&maybe_revisions, rel_singleton_record_taking (rel_make_field_str (revision)), rel_record_null); } else { maybe_revisions = directory_files ("."); } for (r = 0; r < rel_n_records (maybe_revisions); ++r) { if (arch_valid_package_name (rel_peek_str (maybe_revisions, r, 0), arch_no_archive, arch_req_patch_level, 0) && (!vu_lstat (&errn, rel_peek_str (maybe_revisions, r, 0), &statb) && S_ISDIR (statb.st_mode))) { t_uchar * fqr = 0; fqr = arch_fully_qualify (rel_peek_str (maybe_archives, a, 0), rel_peek_str (maybe_revisions, r, 0)); rel_add_records (&answer, rel_singleton_record_taking (rel_make_field_str (fqr)), rel_record_null); lim_free (0, fqr); } } safe_chdir (".."); rel_free_table (maybe_revisions); } } safe_chdir (".."); rel_free_table (maybe_archives); } } safe_chdir (".."); rel_free_table (maybe_versions); } } safe_chdir (".."); rel_free_table (maybe_branches); } } safe_fchdir (here_fd); rel_free_table (maybe_categories); } } } arch_sort_table_by_name_field (0, answer, 0); safe_close (here_fd); lim_free (0, category); lim_free (0, branch); lim_free (0, version); lim_free (0, locked_in_this_tree_path); lim_free (0, unlocked_in_this_tree_path); return answer; } t_uchar * arch_find_pristine (int * is_locked, const t_uchar * tree_root_or_root_dir, const t_uchar * archive, const t_uchar * revision, int pristine_types, enum arch_pristine_search_scope scope) { const t_uchar * locked_pristine_stem = "{arch}/++pristine-trees/locked"; const t_uchar * unlocked_pristine_stem = "{arch}/++pristine-trees/unlocked"; t_uchar * category = 0; t_uchar * branch = 0; t_uchar * version = 0; t_uchar * locked_relpath = 0; t_uchar * unlocked_relpath = 0; t_uchar * locked_in_this_tree_path = 0; t_uchar * unlocked_in_this_tree_path = 0; t_uchar * answer = 0; invariant (arch_valid_archive_name (archive)); invariant (arch_valid_package_name (revision, arch_no_archive, arch_req_patch_level, 0)); category = arch_parse_package_name (arch_ret_category, 0, revision); branch = arch_parse_package_name (arch_ret_package, 0, revision); version = arch_parse_package_name (arch_ret_package_version, 0, revision); locked_relpath = str_alloc_cat_many (0, locked_pristine_stem, "/", category, "/", branch, "/", version, "/", archive, "/", revision, str_end); unlocked_relpath = str_alloc_cat_many (0, unlocked_pristine_stem, "/", category, "/", branch, "/", version, "/", archive, "/", revision, str_end); locked_in_this_tree_path = file_name_in_vicinity (0, tree_root_or_root_dir, locked_relpath); unlocked_in_this_tree_path = file_name_in_vicinity (0, tree_root_or_root_dir, unlocked_relpath); if (((scope == arch_tree_pristine_search) || (scope == arch_tree_and_sibling_pristine_search)) && (pristine_types & arch_unlocked_pristine) && !safe_access (unlocked_in_this_tree_path, F_OK)) { answer = str_save (0, unlocked_in_this_tree_path); if (is_locked) *is_locked = 0; } else { t_uchar * tree_root_dir = 0; rel_table sibling_files = rel_table_nil; rel_table sibling_paths = rel_table_nil; int x; if (scope == arch_cache_dir_pristine_search) tree_root_dir = str_save (0, tree_root_or_root_dir); else { tree_root_dir = file_name_directory_file (0, tree_root_or_root_dir); if (!tree_root_dir) tree_root_dir = str_save (0, "."); } sibling_files = directory_files (tree_root_dir); if (scope != arch_tree_pristine_search) { for (x = 0; x < rel_n_records (sibling_files); ++x) { if (char_is_alnum (rel_peek_str (sibling_files, x, 0)[0])) { int ign; struct stat stat_buf; t_uchar * path = 0; path = file_name_in_vicinity (0, tree_root_dir, rel_peek_str (sibling_files, x, 0)); if (!vu_lstat (&ign, path, &stat_buf) && S_ISDIR (stat_buf.st_mode)) { rel_add_records (&sibling_paths, rel_singleton_record_taking (rel_make_field_str (path)), rel_record_null); } lim_free (0, path); } } if (pristine_types & arch_unlocked_pristine) { for (x = 0; !answer && (x < rel_n_records (sibling_paths)); ++x) { t_uchar * unlocked_sibling_path = 0; int errno = 0; unlocked_sibling_path = file_name_in_vicinity (0, rel_peek_str (sibling_paths, x, 0), unlocked_relpath); if (!vu_access (&errno, unlocked_sibling_path, F_OK)) { answer = str_save (0, unlocked_sibling_path); if (is_locked) *is_locked = 0; } lim_free (0, unlocked_sibling_path); } } } if (pristine_types & arch_locked_pristine) { if ((scope != arch_cache_dir_pristine_search) && !answer && (!safe_access (locked_in_this_tree_path, F_OK))) { answer = str_save (0, locked_in_this_tree_path); if (is_locked) *is_locked = 1; } if (scope != arch_tree_pristine_search) { for (x = 0; !answer && (x < rel_n_records (sibling_paths)); ++x) { t_uchar * locked_sibling_path = 0; int errno = 0; locked_sibling_path = file_name_in_vicinity (0, rel_peek_str (sibling_paths, x, 0), locked_relpath); if (!vu_access (&errno, locked_sibling_path, F_OK)) { answer = str_save (0, locked_sibling_path); if (is_locked) *is_locked = 1; } lim_free (0, locked_sibling_path); } } } lim_free (0, tree_root_dir); rel_free_table (sibling_files); rel_free_table (sibling_paths); } lim_free (0, category); lim_free (0, branch); lim_free (0, version); lim_free (0, locked_relpath); lim_free (0, unlocked_relpath); lim_free (0, locked_in_this_tree_path); lim_free (0, unlocked_in_this_tree_path); if (answer && !arch_valid_inode_sig (answer, archive, revision)) { safe_printfmt (2, "corrupt pristine (failed inode signature validation)\n archive: %s\n revision: %s\n directory %s\nYou should remove this pristine from your tree.\n", archive, revision, answer); exit (2); } return answer; } /* tag: Tom Lord Wed May 21 18:53:22 2003 (pristines.c) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-archive-setup.h0000644000175000017500000000125310457622000020376 0ustar useruser/* cmd-archive-setup.h: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__CMD_ARCHIVE_SETUP_H #define INCLUDE__LIBARCH__CMD_ARCHIVE_SETUP_H #include "hackerlab/machine/types.h" extern t_uchar arch_cmd_archive_setup_help[]; /* automatically generated __STDC__ prototypes */ extern int arch_cmd_archive_setup (t_uchar * program_name, int argc, char * argv[]); #endif /* INCLUDE__LIBARCH__CMD_ARCHIVE_SETUP_H */ /* tag: Tom Lord Sat Jan 5 15:26:10 2002 (cmd-archive-setup.h) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-id-tagging-defaults.h0000644000175000017500000000131710457622000021437 0ustar useruser/* cmd-id-tagging-defaults.h: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__CMDID_TAGGING_DEFAULTS_H #define INCLUDE__LIBARCH__CMDID_TAGGING_DEFAULTS_H #include "hackerlab/machine/types.h" extern t_uchar arch_cmd_id_tagging_defaults_help[]; /* automatically generated __STDC__ prototypes */ extern int arch_cmd_id_tagging_defaults (t_uchar * program_name, int argc, char * argv[]); #endif /* INCLUDE__LIBARCH__CMDID_TAGGING_DEFAULTS_H */ /* tag: Tom Lord Sat Jan 5 15:26:10 2002 (cmd-tagging-defaults.h) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-archive-meta-info.h0000644000175000017500000000130610457622000021114 0ustar useruser/* cmd-archive-meta-info.h: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__CMD_ARCHIVE_META_INFO_H #define INCLUDE__LIBARCH__CMD_ARCHIVE_META_INFO_H #include "hackerlab/machine/types.h" extern t_uchar arch_cmd_archive_meta_info_help[]; /* automatically generated __STDC__ prototypes */ extern int arch_cmd_archive_meta_info (t_uchar *program_name, int argc, char * argv[]); #endif /* INCLUDE__LIBARCH__CMD_ARCHIVE_META_INFO_H */ /* tag: Tom Lord Sat Jan 5 15:26:10 2002 (cmd-archive-meta-info.h) */ tla-1.3.5+dfsg/src/tla/libarch/tag.c0000644000175000017500000002024210457622000015623 0ustar useruser/* tag.c: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/bugs/panic.h" #include "hackerlab/os/time.h" #include "hackerlab/char/str.h" #include "hackerlab/fs/file-names.h" #include "hackerlab/vu/safe.h" #include "tla/libdate/date-string.h" #include "tla/libfsutils/string-files.h" #include "tla/libfsutils/copy-file.h" #include "tla/libfsutils/tmp-files.h" #include "tla/libfsutils/rmrf.h" #include "tla/libarch/diffs.h" #include "tla/libarch/patch-logs.h" #include "tla/libarch/invent.h" #include "tla/libarch/my.h" #include "tla/libarch/hooks.h" #include "tla/libarch/namespace.h" #include "tla/libarch/pristines.h" #include "tla/libarch/project-tree.h" #include "tla/libarch/make-changeset.h" #include "tla/libarch/changeset-report.h" #include "tla/libarch/local-cache.h" #include "tla/libarch/inv-ids.h" #include "tla/libarch/changelogs.h" #include "tla/libarch/apply-changeset.h" #include "tla/libarch/merge-points.h" #include "tla/libarch/tag.h" /* __STDC__ prototypes for static functions */ static t_uchar * arch_prepare_for_tag (t_uchar ** cooked_log_ret, struct arch_archive * arch, t_uchar * revision, struct arch_archive * from_arch, t_uchar * from_revision, t_uchar * raw_log); void arch_tag (int chatter_fd, struct arch_archive * arch, t_uchar * revision, struct arch_archive * from_arch, t_uchar * from_revision, t_uchar * raw_log) { t_uchar * errstr; t_uchar * version = 0; t_uchar * this_level = 0; t_uchar * prev_revision = 0; t_uchar * prev_level = 0; t_uchar * continuation = 0; t_uchar * cooked_log = 0; t_uchar * my_uid = 0; t_uchar * txn_id = 0; t_uchar * tag_changeset = 0; version = arch_parse_package_name (arch_ret_package_version, 0, revision); this_level = arch_parse_package_name (arch_ret_patch_level, 0, revision); prev_revision = arch_previous_revision (arch, revision); if (prev_revision) prev_level = arch_parse_package_name (arch_ret_patch_level, 0, prev_revision); continuation = arch_fully_qualify (from_arch->name, from_revision); my_uid = arch_my_id_uid (); txn_id = arch_generate_txn_id (); tag_changeset = arch_prepare_for_tag (&cooked_log, arch, revision, from_arch, from_revision, raw_log); if (arch_archive_lock_revision (&errstr, arch, version, prev_level, my_uid, txn_id, this_level)) { safe_printfmt (2, "arch_tag: unable to acquire revision lock (%s)\n revision: %s/%s\n", errstr, arch->name, revision); exit (2); } if (arch_archive_put_log (&errstr, arch, version, prev_level, my_uid, txn_id, cooked_log)) { safe_printfmt (2, "arch_tag: unable to send log message to archive (%s)\n revision: %s/%s\n", errstr, arch->name, version); exit (2); } if (arch_archive_put_changeset (&errstr, arch, version, prev_level, my_uid, txn_id, this_level, tag_changeset)) { safe_printfmt (2, "arch_tag: unable to send log message to archive (%s)\n revision: %s/%s\n", errstr, arch->name, version); exit (2); } if (arch_archive_put_continuation (&errstr, arch, version, prev_level, my_uid, txn_id, continuation)) { safe_printfmt (2, "arch_tag: unable to send tagged revision id to archive (%s)\n revision: %s/%s\n", errstr, arch->name, revision); exit (2); } if (arch_revision_ready (&errstr, arch, version, prev_level, my_uid, txn_id, this_level)) { safe_printfmt (2, "arch_tag: error sending tag to archive (%s)\n revision: %s/%s\n", errstr, arch->name, revision); exit (2); } if (arch_archive_finish_revision (&errstr, arch, version, prev_level, my_uid, txn_id, this_level)) { safe_printfmt (2, "arch_tag: unable to complete commit transaction (%s)\n revision: %s/%s\n", errstr, arch->name, version); exit (2); } { t_uchar * revision = 0; revision = str_alloc_cat_many (0, version, "--", this_level, str_end); arch_run_hook ("tag", "ARCH_ARCHIVE", arch->name, "ARCH_REVISION", revision, "ARCH_TAGGED_ARCHIVE", from_arch->name, "ARCH_TAGGED_REVISION", from_revision, (t_uchar*)0); lim_free (0, revision); } { t_uchar * dir = 0; t_uchar * tail = 0; dir = file_name_directory_file (0, tag_changeset); tail = file_name_tail (0, dir); invariant (!str_cmp_prefix (",,changeset-for-tag", tail)); rmrf_file (dir); lim_free (0, dir); lim_free (0, tail); } lim_free (0, version); lim_free (0, this_level); lim_free (0, prev_revision); lim_free (0, prev_level); lim_free (0, continuation); lim_free (0, cooked_log); lim_free (0, my_uid); lim_free (0, txn_id); lim_free (0, tag_changeset); } static t_uchar * arch_prepare_for_tag (t_uchar ** cooked_log_ret, struct arch_archive * arch, t_uchar * revision, struct arch_archive * from_arch, t_uchar * from_revision, t_uchar * raw_log) { t_uchar * my_id = 0; time_t now; t_uchar * std_date = 0; t_uchar * human_date = 0; t_uchar * from_version = 0; int out_fd; rel_table merge_points = rel_table_nil; t_uchar * fqrevision = 0; t_uchar * cooked_log = 0; t_uchar * changeset_dir_path = 0; /* allocated and returned */ t_uchar * changeset_tail = 0; t_uchar * changeset_path = 0; struct arch_make_changeset_report make_report = {0, }; struct arch_changeset_report report = {rel_table_nil, }; int log_fd = -1; t_uchar * log_loc = 0; t_uchar * log_id = 0; my_id = arch_my_id (); now = time(0); std_date = standard_date (now); human_date = pretty_date (now); from_version = arch_parse_package_name (arch_ret_package_version, 0, from_revision); merge_points = arch_archive_merge_points (from_arch, from_revision, 0, 0, 1); fqrevision = arch_fully_qualify (arch->name, revision); rel_add_records (&merge_points, rel_make_record_2_taking (rel_make_field_str ("!!!!!nothing-should-depend-on-this"), rel_make_field_str (fqrevision)), rel_record_null); rel_sort_table_by_field (0, merge_points, 1); rel_uniq_by_field (&merge_points, 1); arch_sort_table_by_name_field (0, merge_points, 1); out_fd = make_output_to_string_fd (); safe_printfmt (out_fd, "Revision: %s\n", revision); safe_printfmt (out_fd, "Archive: %s\n", arch->name); safe_printfmt (out_fd, "Creator: %s\n", my_id); safe_printfmt (out_fd, "Date: %s\n", human_date); safe_printfmt (out_fd, "Standard-date: %s\n", std_date); arch_print_log_list_header (out_fd, "New-patches", merge_points, 1); safe_printfmt (out_fd, "Continuation-of: %s/%s\n", from_arch->name, from_revision); if (raw_log) safe_printfmt (out_fd, "%s", raw_log); else safe_printfmt (out_fd, "Summary: tag of %s/%s\n\n(automatically generated log message)\n", from_arch->name, from_revision); cooked_log = string_fd_close (out_fd); changeset_dir_path = tmp_file_name (".", ",,changeset-for-tag"); changeset_tail = str_alloc_cat (0, revision, ".patches"); changeset_path = file_name_in_vicinity (0, changeset_dir_path, changeset_tail); rmrf_file (changeset_dir_path); safe_mkdir (changeset_dir_path, 0777); arch_make_empty_changeset (&make_report, &report, changeset_path); log_loc = arch_log_file (".", arch->name, revision); log_id = arch_log_file_id (arch->name, revision); log_fd = arch_changeset_add_file (0, &report, &make_report, changeset_path, log_loc, log_id); safe_printfmt (log_fd, "%s", cooked_log); safe_close (log_fd); arch_changeset_rewrite_indexes (changeset_path, &report); lim_free (0, my_id); lim_free (0, std_date); lim_free (0, human_date); lim_free (0, fqrevision); rel_free_table (merge_points); lim_free (0, changeset_tail); lim_free (0, changeset_dir_path); lim_free (0, log_loc); lim_free (0, log_id); arch_free_make_changeset_report_data (&make_report); arch_free_changeset_report_data (&report); *cooked_log_ret = cooked_log; return changeset_path; } /* tag: Tom Lord Tue May 27 17:37:04 2003 (tag.c) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-tag.h0000644000175000017500000000120210457622000016364 0ustar useruser/* cmd-tag.h: * **************************************************************** * Copyright (C) 2003 Tom Lord, Stig Brautaset * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__CMD_TAG_H #define INCLUDE__LIBARCH__CMD_TAG_H #include "hackerlab/machine/types.h" extern t_uchar arch_cmd_tag_help[]; /* automatically generated __STDC__ prototypes */ extern int arch_cmd_tag (t_uchar * program_name, int argc, char * argv[]); #endif /* INCLUDE__LIBARCH__CMD_TAG_H */ /* tag: Stig Brautaset Sat Jun 7 17:30:28 BST 2003 (cmd-tagrev.h) */ tla-1.3.5+dfsg/src/tla/libarch/pfs-ftp.c0000644000175000017500000016503610457622000016442 0ustar useruser/* pfs-ftp.c: * **************************************************************** * Copyright (C) 2002, 2003 Scott Parish * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include #include #include #include "config-options.h" #include "hackerlab/bugs/panic.h" #include "hackerlab/os/errno-to-string.h" #include "hackerlab/mem/alloc-limits.h" #include "hackerlab/mem/mem.h" #include "hackerlab/arrays/ar.h" #include "hackerlab/char/char-class.h" #include "hackerlab/char/str.h" #include "hackerlab/fmt/cvt.h" #include "hackerlab/fs/file-names.h" #include "hackerlab/vu-network/url-socket.h" #include "hackerlab/vu/safe.h" #include "tla/libfsutils/string-files.h" #include "tla/libfsutils/copy-file.h" #include "tla/libfsutils/tmp-files.h" #include "tla/libfsutils/file-contents.h" #include "tla/libarch/archives.h" #include "tla/libarch/pfs-ftp.h" struct arch_pfs_ftp_session { struct arch_pfs_session pfs; char * cwd; int in_fd; int out_fd; int is_wu; int is_windows_nt; t_uchar * remote_pwd; }; /* __STDC__ prototypes for static functions */ static int pfs_ftp_file_exists (struct arch_pfs_session * p, const t_uchar * path); static int pfs_ftp_is_dir (struct arch_pfs_session * p, const t_uchar * path); static t_uchar * pfs_ftp_file_contents (struct arch_pfs_session * p, const t_uchar * path, int soft_errors); static int pfs_ftp_get_file (struct arch_pfs_session * p, int file_out_fd, const t_uchar * path, int soft_errors); static rel_table pfs_ftp_directory_files (struct arch_pfs_session * p, const t_uchar * path, int soft_errors); static int pfs_ftp_put_file (struct arch_pfs_session * p, const t_uchar * path, mode_t perms, int file_in_fd, int soft_errors); static int pfs_ftp_mkdir (struct arch_pfs_session * p, const t_uchar * path, mode_t perms, int soft_errors); static int pfs_ftp_rename (struct arch_pfs_session * p, t_uchar ** errstr, const t_uchar * from, const t_uchar * to, int soft_errors); static int pfs_ftp_rmdir (struct arch_pfs_session * p, const t_uchar * path, int soft_errors); static int pfs_ftp_rm (struct arch_pfs_session * p, const t_uchar * path, int soft_errors); static int ftp_client_greet (alloc_limits limits, int * errn, int * code, t_uchar ** text, long * len, int in_fd, int out_fd); static int ftp_client_login (alloc_limits limits, int * errn, int * code, t_uchar ** text, long * text_len, int in_fd, int out_fd, const t_uchar * name, const t_uchar * passwd); static int ftp_client_read_reply (alloc_limits limits, int * errn, int * code, t_uchar ** text, long * text_len, int fd); static int ftp_client_read_simple_cmd_reply (alloc_limits limit, int * errn, int * code, t_uchar ** text, long * text_len, int in_fd); static int ftp_client_printfmt (int * errn, int fd, const char * fmt, ...); static int ftp_client_pasv_parse_equal (const char *text, t_ulong *h, t_uint16 *p); static int ftp_client_pasv_parse_parenthesis (const char *text, t_ulong *h, t_uint16 *p); static int ftp_client_pasv (alloc_limits limits, int * errn, int * code, t_ulong * host, t_uint16 * port, t_uchar ** text, long * text_len, int in_fd, int out_fd); static int ftp_client_type_image (alloc_limits limits, int * errn, int * code, t_uchar ** text, long * text_len, int in_fd, int out_fd); static int ftp_client_begin_retr (alloc_limits limits, int * errn, int * code, t_uchar ** text, long * text_len, int in_fd, int out_fd, const t_uchar * path); static int ftp_client_end_retr (alloc_limits limits, int * errn, int * code, t_uchar ** text, long * text_len, int in_fd, int out_fd); static int ftp_client_begin_stor (alloc_limits limits, int * errn, int * code, t_uchar ** text, long * text_len, int in_fd, int out_fd, const t_uchar * path); static int ftp_client_end_stor (alloc_limits limits, int * errn, int * code, t_uchar ** text, long * text_len, int in_fd, int out_fd); static int ftp_client_begin_nlst (alloc_limits limits, int * errn, int * code, t_uchar ** text, long * text_len, int in_fd, int out_fd, int is_wu_ftp, const t_uchar * path, t_ulong host_addr, t_uint16 port); static int ftp_client_end_nlst (alloc_limits limits, int * errn, int * code, t_uchar ** text, long * text_len, int in_fd, int out_fd); static int ftp_client_mkd (alloc_limits limits, int * errn, int * code, t_uchar ** text, long * text_len, int in_fd, int out_fd, const t_uchar * path); static int ftp_client_rename (alloc_limits limits, int * errn, int * code, t_uchar ** text, long * text_len, int in_fd, int out_fd, const t_uchar * from, const t_uchar * to); static int ftp_client_dele (alloc_limits limits, int * errn, int * code, t_uchar ** text, long * text_len, int in_fd, int out_fd, const t_uchar * path); static int ftp_client_rmd (alloc_limits limits, int * errn, int * code, t_uchar ** text, long * text_len, int in_fd, int out_fd, const t_uchar * path); static int ftp_client_cwd (alloc_limits limits, int * errn, int * code, t_uchar ** text, long * text_len, int in_fd, int out_fd, const t_uchar * path); static int ftp_client_pwd (alloc_limits limits, int * errn, int * code, t_uchar ** path, long * path_len, t_uchar ** text, long * text_len, int in_fd, int out_fd); static int ftp_client_syst (alloc_limits limits, int * errn, int * code, t_uchar ** text, long * text_len, int in_fd, int out_fd); struct arch_pfs_vtable ftp_pfs_fns = { pfs_ftp_file_exists, pfs_ftp_is_dir, pfs_ftp_file_contents, pfs_ftp_get_file, pfs_ftp_directory_files, pfs_ftp_put_file, pfs_ftp_mkdir, pfs_ftp_rename, pfs_ftp_rmdir, pfs_ftp_rm, }; int arch_pfs_ftp_supported_protocol (const t_uchar * uri) { if (!str_cmp_prefix ("ftp://", uri) || !str_cmp_prefix ("wu-ftp://", uri)) return 1; else return 0; } struct arch_pfs_session * arch_pfs_ftp_connect (const t_uchar * uri) { int errn; int code = 0; struct arch_pfs_ftp_session * answer = 0; t_uchar * host = 0; t_uchar * user = 0; t_uchar * passwd = 0; t_uchar * hostname = 0; int status = -1; t_uchar * text = 0; long text_len = 0; answer = (struct arch_pfs_ftp_session *)lim_malloc (0, sizeof (*answer)); mem_set0 ((t_uchar *)answer, sizeof (*answer)); answer->pfs.vtable = &ftp_pfs_fns; { const t_uchar * prefix; const t_uchar * start; const t_uchar * stop; if (!str_cmp_prefix ("ftp://", uri)) prefix = "ftp://"; else { invariant (!str_cmp_prefix ("wu-ftp://", uri)); prefix = "wu-ftp://"; answer->is_wu = 1; } start = uri + str_length (prefix); stop = str_chr_index (start, '/'); host = str_save_n (0, start, stop - start); answer->cwd = str_save (0, stop); } hostname = str_chr_rindex (host, '@'); if (!hostname) { hostname = str_save (0, host); user = str_save (0, "anonymous"); passwd = str_save (0, "arch(tla version: " cfg__std__package ")"); } else { user = host; passwd = str_chr_index_n (user, hostname - user, ':'); if (passwd) { ++passwd; user = str_save_n (0, user, (passwd - 1) - user); passwd = str_save_n (0, passwd, hostname - passwd); hostname = str_save (0, hostname + 1); } else { user = str_save_n (0, user, hostname - user); passwd = str_save (0, "ftp-utils"); hostname = str_save (0, hostname + 1); } } /* hostname, user, passwd allocated strings. */ answer->in_fd = url_inet_client (&errn, hostname, 21); if (answer->in_fd < 0) { status = -1; text = str_save (0, "Unable to connect to server"); text_len = str_length (text); } else { int e; answer->out_fd = vu_dup (&errn, answer->in_fd); if (answer->out_fd < 0) { vu_close (&e, answer->in_fd); text = str_save (0, "Unable to duplicate the socket descriptor"); text_len = str_length (text); status = -1; } else { if ( (0 > vfdbuf_buffer_fd (&errn, answer->in_fd, 0, O_RDONLY, 0)) || (0 > vfdbuf_buffer_fd (&errn, answer->out_fd, 0, O_WRONLY, 0)) || (0 > ftp_client_greet (0, &errn, &code, &text, &text_len, answer->in_fd, answer->out_fd)) || (0 > ftp_client_login (0, &errn, &code, &text, &text_len, answer->in_fd, answer->out_fd, user, passwd))) { vu_close (&e, answer->in_fd); vu_close (&e, answer->out_fd); status = -1; } else { long dir_len; if (0 > ftp_client_pwd (0, &errn, &code, &answer->remote_pwd, &dir_len, &text, &text_len, answer->in_fd, answer->out_fd)) { vu_close (&e, answer->in_fd); vu_close (&e, answer->out_fd); status = -1; } else { answer->remote_pwd = lim_realloc (0, answer->remote_pwd, dir_len + 1); answer->remote_pwd[dir_len] = 0; status = 0; if (0 == ftp_client_syst(0, &errn, &code, &text, &text_len, answer->in_fd, answer->out_fd)) { int i; for (i = 0; i < text_len; i++) text[i] = (t_uchar) tolower(text[i]); if (strstr(text, "windows_nt")) answer->is_windows_nt = 1; } } } } } lim_free (0, host); lim_free (0, user); lim_free (0, passwd); if (status) { safe_printfmt (2, "ftp_client_connect: ftp error connecting to %s\n", hostname); safe_printfmt (2, " %d: %.*s\n", code, (int)text_len, text); exit (2); } lim_free (0, hostname); lim_free (0, text); return (struct arch_pfs_session *)answer; } static int pfs_ftp_file_exists (struct arch_pfs_session * p, const t_uchar * path) { struct arch_pfs_ftp_session * arch = (struct arch_pfs_ftp_session *)p; t_uchar * abs_path = 0; t_uchar * abs_path_dir = 0; t_uchar * path_tail = 0; rel_table nlst = rel_table_nil; int x; int answer; abs_path = file_name_in_vicinity (0, arch->cwd, path); abs_path_dir = file_name_directory_file (0, abs_path); path_tail = file_name_tail (0, abs_path); nlst = pfs_ftp_directory_files (p, abs_path_dir, 1); answer = 0; for (x = 0; x < rel_n_records (nlst); ++x) { if (!str_cmp (path_tail, rel_peek_str (nlst, x, 0))) { answer = 1; break; } } if (!answer) { /* On some servers the NLST command does not return dot files. A simple * workaround is to NLST directly the file we expect to find */ nlst = pfs_ftp_directory_files (p, abs_path, 1); for (x = 0; x < rel_n_records (nlst); ++x) { if (!str_cmp (path_tail, rel_peek_str (nlst, x, 0))) { answer = 1; break; } } } lim_free (0, abs_path); lim_free (0, abs_path_dir); lim_free (0, path_tail); rel_free_table (nlst); return answer; } static int pfs_ftp_is_dir (struct arch_pfs_session * p, const t_uchar * path) { struct arch_pfs_ftp_session * arch = (struct arch_pfs_ftp_session *)p; int errn; int code; t_uchar * text; long text_len; t_uchar * abs_path = 0; int chdir_stat; int return_chdir_stat; abs_path = file_name_in_vicinity (0, arch->cwd, path); chdir_stat = ftp_client_cwd (0, &errn, &code, &text, &text_len, arch->in_fd, arch->out_fd, abs_path); lim_free (0, text); return_chdir_stat = ftp_client_cwd (0, &errn, &code, &text, &text_len, arch->in_fd, arch->out_fd, arch->remote_pwd); lim_free (0, text); if (return_chdir_stat < 0) { safe_printfmt (2, "ftp_client_is_dir: unrecoverable chdir error for path %s\n", arch->remote_pwd); exit (2); } lim_free (0, abs_path); return (chdir_stat >= 0); } static t_uchar * pfs_ftp_file_contents (struct arch_pfs_session * p, const t_uchar * path, int soft_errors) { int string_fd; t_uchar * answer = 0; int status; string_fd = make_output_to_string_fd (); status = pfs_ftp_get_file (p, string_fd, path, soft_errors); answer = string_fd_close (string_fd); if (status < 0) { lim_free (0, answer); answer = 0; } return answer; } static int pfs_ftp_get_file (struct arch_pfs_session * p, int file_out_fd, const t_uchar * path, int soft_errors) { struct arch_pfs_ftp_session * arch = (struct arch_pfs_ftp_session *)p; int errn; int code; t_uchar * text = 0; long text_len; int status = -1; t_uchar * get_path = 0; get_path = file_name_in_vicinity (0, arch->cwd, path); if (0 > ftp_client_type_image (0, &errn, &code, &text, &text_len, arch->in_fd, arch->out_fd)) { put_error: if (!soft_errors) { safe_printfmt (2, "ftp_client_get: error getting file %s\n", get_path); safe_printfmt (2, " %d: %.*s\n", code, (int)text_len, text); exit (2); } status = -1; } else { t_ulong host_addr; t_uint16 port; lim_free (0, text); text = 0; if (0 > ftp_client_pasv (0, &errn, &code, &host_addr, &port, &text, &text_len, arch->in_fd, arch->out_fd)) { goto put_error; } else { int file_in_fd; lim_free (0, text); text = 0; file_in_fd = url_inet_client_addr (&errn, host_addr, (int)port); if (file_in_fd < 0) { text = str_save (0, errno_to_string (errn)); text_len = str_length (text); goto put_error; } else { if (0 > ftp_client_begin_retr (0, &errn, &code, &text, &text_len, arch->in_fd, arch->out_fd, get_path)) { goto put_error; } else { copy_fd (file_in_fd, file_out_fd); safe_close (file_in_fd); if (0 > ftp_client_end_retr (0, &errn, &code, &text, &text_len, arch->in_fd, arch->out_fd)) { goto put_error; } else { lim_free (0, text); text = 0; status = 0; } } } } } lim_free (0, text); lim_free (0, get_path); return status; } static rel_table pfs_ftp_directory_files (struct arch_pfs_session * p, const t_uchar * path, int soft_errors) { struct arch_pfs_ftp_session * arch = (struct arch_pfs_ftp_session *)p; int errn; int code; t_uchar * text = 0; long text_len; rel_table answer = rel_table_nil; t_uchar * nlst_path = 0; t_uchar * nlst_path_lastc = 0; nlst_path = file_name_in_vicinity (0, arch->cwd, path); /* filter out trailing "/." since publicfile handles dots specially */ if (*nlst_path && *(nlst_path+1)) { nlst_path_lastc = nlst_path + strlen(nlst_path) - 1; if ((*nlst_path_lastc == '.') && (*(nlst_path_lastc-1) == '/')) *(nlst_path_lastc - 1) = 0; } if (0 > ftp_client_type_image (0, &errn, &code, &text, &text_len, arch->in_fd, arch->out_fd)) { put_error: if (!soft_errors) { safe_printfmt (2, "ftp_client_directory_files: error listing file %s\n", nlst_path); safe_printfmt (2, " %d: %.*s\n", code, (int)text_len, text); exit (2); } } else { t_ulong host_addr; t_uint16 port; lim_free (0, text); text = 0; if (0 > ftp_client_pasv (0, &errn, &code, &host_addr, &port, &text, &text_len, arch->in_fd, arch->out_fd)) { goto put_error; } else { int file_in_fd; lim_free (0, text); text = 0; file_in_fd = ftp_client_begin_nlst (0, &errn, &code, &text, &text_len, arch->in_fd, arch->out_fd, arch->is_wu || arch->is_windows_nt, nlst_path, host_addr, port); if (0 > file_in_fd) { /* Workaround for buggy ftp servers that respond a 450 or 550 code for empty directories. * 450 is reported by proftpd: * "450 No files found" * The pfs_ftp_is_dir ensures the directory exists as it chdir to the given path. * Btw, we could not have used pfs_ftp_file_exists otherwise we would have created * an infinte function call loop because pfs_ftp_file_exists relies on * pfs_ftp_directory_files */ if ((code != 450 && code != 550) || !pfs_ftp_is_dir (p, path)) goto put_error; } else { t_uchar * raw_list = 0; int file_out_fd; file_out_fd = make_output_to_string_fd (); copy_fd (file_in_fd, file_out_fd); safe_close (file_in_fd); raw_list = string_fd_close (file_out_fd); if (0 > ftp_client_end_nlst (0, &errn, &code, &text, &text_len, arch->in_fd, arch->out_fd)) { lim_free (0, raw_list); goto put_error; } else { int x; lim_free (0, text); text = 0; answer = rel_ws_split (raw_list); lim_free (0, raw_list); for (x = 0; x < rel_n_records (answer); ++x) { t_uchar * t; t = file_name_tail (0, rel_peek_str (answer, x, 0)); rel_set_taking (answer, x, 0, rel_make_field_str (t)); lim_free (0, t); } } } } } lim_free (0, text); lim_free (0, nlst_path); return answer; } static int pfs_ftp_put_file (struct arch_pfs_session * p, const t_uchar * path, mode_t perms, int file_in_fd, int soft_errors) { struct arch_pfs_ftp_session * arch = (struct arch_pfs_ftp_session *)p; int errn; int code; t_uchar * text = 0; long text_len; int status = -1; t_uchar * put_path = 0; put_path = file_name_in_vicinity (0, arch->cwd, path); if (0 > ftp_client_type_image (0, &errn, &code, &text, &text_len, arch->in_fd, arch->out_fd)) { put_error: if (!soft_errors) { safe_printfmt (2, "ftp_client_put: error putting file %s\n", put_path); safe_printfmt (2, " %d: %.*s\n", code, (int)text_len, text); exit (2); } status = -1; } else { t_ulong host_addr; t_uint16 port; lim_free (0, text); text = 0; if (0 > ftp_client_pasv (0, &errn, &code, &host_addr, &port, &text, &text_len, arch->in_fd, arch->out_fd)) { goto put_error; } else { int file_out_fd; lim_free (0, text); text = 0; file_out_fd = url_inet_client_addr (&errn, host_addr, (int)port); if (file_out_fd < 0) { text = str_save (0, errno_to_string (errn)); text_len = str_length (text); goto put_error; } else { if (0 > ftp_client_begin_stor (0, &errn, &code, &text, &text_len, arch->in_fd, arch->out_fd, put_path)) { goto put_error; } else { copy_fd (file_in_fd, file_out_fd); safe_close (file_out_fd); if (0 > ftp_client_end_stor (0, &errn, &code, &text, &text_len, arch->in_fd, arch->out_fd)) { goto put_error; } else { lim_free (0, text); text = 0; status = 0; } } } } } lim_free (0, text); lim_free (0, put_path); return status; } static int pfs_ftp_mkdir (struct arch_pfs_session * p, const t_uchar * path, mode_t perms, int soft_errors) { struct arch_pfs_ftp_session * arch = (struct arch_pfs_ftp_session *)p; int errn; int code; t_uchar * text = 0; long text_len; int status; t_uchar * mkdir_path = 0; mkdir_path = file_name_in_vicinity (0, arch->cwd, path); status = ftp_client_mkd (0, &errn, &code, &text, &text_len, arch->in_fd, arch->out_fd, mkdir_path); if (status && !soft_errors) { safe_printfmt (2, "ftp_client_mkdir: error making directory %s\n", mkdir_path); safe_printfmt (2, " %d: %.*s\n", code, (int)text_len, text); exit (2); } lim_free (0, text); lim_free (0, mkdir_path); return status; } static int pfs_ftp_rename (struct arch_pfs_session * p, t_uchar ** errstr, const t_uchar * from, const t_uchar * to, int soft_errors) { struct arch_pfs_ftp_session * arch = (struct arch_pfs_ftp_session *)p; int errn; int code; t_uchar * text = 0; long text_len; int status; t_uchar * from_path = 0; t_uchar * to_path = 0; from_path = file_name_in_vicinity (0, arch->cwd, from); to_path = file_name_in_vicinity (0, arch->cwd, to); status = ftp_client_rename (0, &errn, &code, &text, &text_len, arch->in_fd, arch->out_fd, from_path, to_path); if (status && !soft_errors) { safe_printfmt (2, "ftp_client_rename: error renaming %s to %s\n", from_path, to_path); safe_printfmt (2, " %d: %.*s\n", code, (int)text_len, text); exit (2); } lim_free (0, text); lim_free (0, from_path); lim_free (0, to_path); return status; } static int pfs_ftp_rmdir (struct arch_pfs_session * p, const t_uchar * path, int soft_errors) { struct arch_pfs_ftp_session * arch = (struct arch_pfs_ftp_session *)p; int errn; int code; t_uchar * text = 0; long text_len; int status; t_uchar * dele_path = 0; dele_path = file_name_in_vicinity (0, arch->cwd, path); status = ftp_client_rmd (0, &errn, &code, &text, &text_len, arch->in_fd, arch->out_fd, dele_path); if (status && !soft_errors) { safe_printfmt (2, "ftp_client_rmdir: error deleting %s\n", dele_path); safe_printfmt (2, " %d: %.*s\n", code, (int)text_len, text); exit (2); } lim_free (0, text); lim_free (0, dele_path); return status; } static int pfs_ftp_rm (struct arch_pfs_session * p, const t_uchar * path, int soft_errors) { struct arch_pfs_ftp_session * arch = (struct arch_pfs_ftp_session *)p; int errn; int code; t_uchar * text = 0; long text_len; int status; t_uchar * dele_path = 0; dele_path = file_name_in_vicinity (0, arch->cwd, path); status = ftp_client_dele (0, &errn, &code, &text, &text_len, arch->in_fd, arch->out_fd, dele_path); if (status && !soft_errors) { safe_printfmt (2, "ftp_client_rm: error deleting %s\n", dele_path); safe_printfmt (2, " %d: %.*s\n", code, (int)text_len, text); exit (2); } lim_free (0, text); lim_free (0, dele_path); return status; } static int ftp_client_greet (alloc_limits limits, int * errn, int * code, t_uchar ** text, long * len, int in_fd, int out_fd) { int delayed; delayed = 0; retry: if (0 > ftp_client_read_reply (limits, errn, code, text, len, in_fd)) return -1; if (*code == 120) { if (delayed) { *errn = EINVAL; return -1; } else { delayed = 1; goto retry; } } if (*code == 220) return 0; if (*code == 421) { *errn = 0; return -1; } *errn = EINVAL; return -1; } /**************************************************************** * * ftp_login * USER * PASS * * not implemented * ACCT * */ static int ftp_client_login (alloc_limits limits, int * errn, int * code, t_uchar ** text, long * text_len, int in_fd, int out_fd, const t_uchar * name, const t_uchar * passwd) { int user_repl_code; t_uchar * user_repl_text; long user_repl_len; int pass_repl_code; t_uchar * pass_repl_text; long pass_repl_len; if (0 > ftp_client_printfmt (errn, out_fd, "USER %s\r\n", name)) return -1; if (0 > ftp_client_read_reply (limits, errn, &user_repl_code, &user_repl_text, &user_repl_len, in_fd)) return -1; *code = user_repl_code; if (!text) lim_free (limits, user_repl_text); else { *text = user_repl_text; *text_len = user_repl_len; } { int first_digit; first_digit = user_repl_code / 100; switch (first_digit) { default: case 1: *errn = EINVAL; return -1; case 2: return 0; case 3: break; case 4: case 5: *errn = 0; return -1; } } if (0 > ftp_client_printfmt (errn, out_fd, "PASS %s\r\n", passwd)) return -1; if (0 > ftp_client_read_reply (limits, errn, &pass_repl_code, &pass_repl_text, &pass_repl_len, in_fd)) return -1; *code = pass_repl_code; if (!text) lim_free (limits, pass_repl_text); else { *text = lim_realloc (limits, *text, user_repl_len + pass_repl_len + 1); mem_move (*text + user_repl_len, pass_repl_text, pass_repl_len); (*text)[user_repl_len + pass_repl_len] = 0; *text_len += pass_repl_len; lim_free (limits, pass_repl_text); } { int first_digit; first_digit = pass_repl_code / 100; switch (first_digit) { default: case 1: *errn = EINVAL; return -1; case 2: return 0; case 3: *errn = ENOSYS; return -1; case 4: case 5: *errn = 0; return -1; } } } /**************************************************************** * From rfc 959 * * An FTP reply consists of a three digit number (transmitted as * three alphanumeric characters) followed by some text. The number * is intended for use by automata to determine what state to enter * next; the text is intended for the human user. It is intended * that the three digits contain enough encoded information that the * user-process (the User-PI) will not need to examine the text and * may either discard it or pass it on to the user, as appropriate. * In particular, the text may be server-dependent, so there are * likely to be varying texts for each reply code. * * A reply is defined to contain the 3-digit code, followed by Space * , followed by one line of text (where some maximum line length * has been specified), and terminated by the Telnet end-of-line * code. There will be cases however, where the text is longer than * a single line. In these cases the complete text must be bracketed * so the User-process knows when it may stop reading the reply (i.e. * stop processing input on the control connection) and go do other * things. This requires a special format on the first line to * indicate that more than one line is coming, and another on the * last line to designate it as the last. At least one of these must * contain the appropriate reply code to indicate the state of the * transaction. To satisfy all factions, it was decided that both * the first and last line codes should be the same. * * Thus the format for multi-line replies is that the first line will * begin with the exact required reply code, followed immediately by a * Hyphen, "-" (also known as Minus), followed by text. The last line * will begin with the same code, followed immediately by Space , * optionally some text, and the Telnet end-of-line code. * * For example: * 123-First line * Second line * 234 A line beginning with numbers * 123 The last line * * The user-process then simply needs to search for the second * occurrence of the same reply code, followed by (Space), at the * beginning of a line, and ignore all intermediary lines. If an * intermediary line begins with a 3-digit number, the Server must pad * the front to avoid confusion. * * This scheme allows standard system routines to be used for reply * information (such as for the STAT reply), with "artificial" first * and last lines tacked on. In rare cases where these routines are * able to generate three digits and a Space at the beginning of any * line, the beginning of each text line should be offset by some * neutral text, like Space. * * This scheme assumes that multi-line replies may not be nested. */ static int ftp_client_read_reply (alloc_limits limits, int * errn, int * code, t_uchar ** text, long * text_len, int fd) { t_uchar * line; long len; t_uchar c0; t_uchar c1; t_uchar c2; if (vfdbuf_next_line (errn, &line, &len, fd)) return -1; if ( (len < 4) || !char_is_digit(line[0]) || !char_is_digit(line[1]) || !char_is_digit(line[2]) || ((line[3] != ' ') && (line[3] != '-'))) { *errn = EINVAL; return -1; } *code = ( (line[0] - '0') * 100 + (line[1] - '0') * 10 + (line[2] - '0')); c0 = line[0]; c1 = line[1]; c2 = line[2]; if (text) { *text = str_save_n (limits, line, len); *text_len = len; } if (line[3] != '-') { return 0; } while (1) { if (vfdbuf_next_line (errn, &line, &len, fd)) { if (text) lim_free (limits, *text); return -1; } if ( (len >= 4) && (char_is_digit(line[0]) && c0) && (char_is_digit(line[1]) && c1) && (char_is_digit(line[2]) && c2) && (line[3] == ' ')) { /* Got the last line of the reply. */ if (text) { *text = lim_realloc (limits, *text, len + *text_len + 1); mem_move (*text + *text_len, line, len); (*text)[*text_len + len] = 0; *text_len = len + *text_len; } return 0; } else { if (text) { *text = lim_realloc (limits, *text, len + *text_len + 1); mem_move (*text + *text_len, line, len); (*text)[*text_len + len] = 0; *text_len = len + *text_len; } } } /* not reached */ panic ("not reached in ftp_read_reply"); return -1; } /**************************************************************** * * We first present the diagram that represents the largest group of FTP * commands: * * * 1,3 +---+ * ----------->| E | * | +---+ * | * +---+ cmd +---+ 2 +---+ * | B |---------->| W |---------->| S | * +---+ +---+ +---+ * | * | 4,5 +---+ * ----------->| F | * +---+ * * * This diagram models the commands: * * ABOR, ALLO, DELE, CWD, CDUP, SMNT, HELP, MODE, NOOP, PASV, * QUIT, SITE, PORT, SYST, STAT, RMD, MKD, PWD, STRU, and TYPE. * */ static int ftp_client_read_simple_cmd_reply (alloc_limits limit, int * errn, int * code, t_uchar ** text, long * text_len, int in_fd) { if (0 > ftp_client_read_reply (limit, errn, code, text, text_len, in_fd)) return -1; { int first_digit; first_digit = *code / 100; switch (first_digit) { default: case 1: case 3: *errn = EINVAL; return -1; case 2: return 0; case 4: case 5: *errn = 0; return -1; } } } static int ftp_client_printfmt (int * errn, int fd, const char * fmt, ...) { int answer; va_list ap; #if 0 printfmt (errn, 2, "sending: "); va_start (ap, fmt); printfmt_va_list (errn, 2, fmt, ap); va_end (ap); #endif va_start (ap, fmt); answer = printfmt_va_list (errn, fd, fmt, ap); va_end (ap); if ( (answer >= 0) && vfdbuf_is_buffered (fd) && (0 > vfdbuf_flush (errn, fd))) return -1; return answer; } /**************************************************************** * ftp_port * * PORT * */ #if 0 static int ftp_client_port (alloc_limits limits, int * errn, int * code, t_uchar ** text, long * text_len, int in_fd, int out_fd, t_ulong host, t_uint16 port) { if (0 > ftp_client_printfmt (errn, out_fd, "PORT %d,%d,%d,%d,%d,%d\r\n", (int)((host >> 24) & 0xff), (int)((host >> 16) & 0xff), (int)((host >> 8) & 0xff), (int)(host & 0xff), (port >> 8) & 0xff, port & 0xff)) return -1; return ftp_client_read_simple_cmd_reply (limits, errn, code, text, text_len, in_fd); } #endif /**************************************************************** * ftp_client_pasv_parse_equal * * =ipdec1,ipdec2,ipdec3,ipdec4,portdec1,portdec2 * */ static int ftp_client_pasv_parse_equal (const char *text, t_ulong *h, t_uint16 *p) { int er; t_uchar * start_byte; t_uchar * end_byte; t_uint h1; t_uint h2; t_uint h3; t_uint h4; t_uint p1; t_uint p2; start_byte = str_chr_rindex (text, '='); if (!start_byte) return 1; ++start_byte; end_byte = str_chr_index (start_byte, ','); if (!end_byte) return 1; cvt_decimal_to_uint (&er, &h1, start_byte, end_byte - start_byte); start_byte = end_byte + 1; end_byte = str_chr_index (start_byte, ','); if (!end_byte) return 1; cvt_decimal_to_uint (&er, &h2, start_byte, end_byte - start_byte); start_byte = end_byte + 1; end_byte = str_chr_index (start_byte, ','); if (!end_byte) return 1; cvt_decimal_to_uint (&er, &h3, start_byte, end_byte - start_byte); start_byte = end_byte + 1; end_byte = str_chr_index (start_byte, ','); if (!end_byte) return 1; cvt_decimal_to_uint (&er, &h4, start_byte, end_byte - start_byte); start_byte = end_byte + 1; end_byte = str_chr_index (start_byte, ','); if (!end_byte) return 1; cvt_decimal_to_uint (&er, &p1, start_byte, end_byte - start_byte); start_byte = end_byte + 1; end_byte = start_byte; while ((*end_byte >= '0') && (*end_byte <= '9')) end_byte++; if (!end_byte) return 1; cvt_decimal_to_uint (&er, &p2, start_byte, end_byte - start_byte); *h = (h1 << 24) | (h2 << 16) | (h3 << 8) | h4; *p = (p1 << 8) | p2; return 0; } /**************************************************************** * ftp_client_pasv_parse_parenthesis * * (ipdec1,ipdec2,ipdec3,ipdec4,portdec1,portdec2) * */ static int ftp_client_pasv_parse_parenthesis (const char *text, t_ulong *h, t_uint16 *p) { int er; t_uchar * start_byte; t_uchar * end_byte; t_uint h1; t_uint h2; t_uint h3; t_uint h4; t_uint p1; t_uint p2; start_byte = str_chr_rindex (text, '('); if (!start_byte) return -1; ++start_byte; end_byte = str_chr_index (start_byte, ','); if (!end_byte) return -1; cvt_decimal_to_uint (&er, &h1, start_byte, end_byte - start_byte); start_byte = end_byte + 1; end_byte = str_chr_index (start_byte, ','); if (!end_byte) return -1; cvt_decimal_to_uint (&er, &h2, start_byte, end_byte - start_byte); start_byte = end_byte + 1; end_byte = str_chr_index (start_byte, ','); if (!end_byte) return -1; cvt_decimal_to_uint (&er, &h3, start_byte, end_byte - start_byte); start_byte = end_byte + 1; end_byte = str_chr_index (start_byte, ','); if (!end_byte) return -1; cvt_decimal_to_uint (&er, &h4, start_byte, end_byte - start_byte); start_byte = end_byte + 1; end_byte = str_chr_index (start_byte, ','); if (!end_byte) return -1; cvt_decimal_to_uint (&er, &p1, start_byte, end_byte - start_byte); start_byte = end_byte + 1; end_byte = str_chr_index (start_byte, ')'); if (!end_byte) return -1; cvt_decimal_to_uint (&er, &p2, start_byte, end_byte - start_byte); *h = (h1 << 24) | (h2 << 16) | (h3 << 8) | h4; *p = (p1 << 8) | p2; return 0; } /**************************************************************** * ftp_pasv * * PASV */ static int ftp_client_pasv (alloc_limits limits, int * errn, int * code, t_ulong * host, t_uint16 * port, t_uchar ** text, long * text_len, int in_fd, int out_fd) { t_uchar * t; long tl; int status; if (0 > ftp_client_printfmt (errn, out_fd, "PASV\r\n")) return -1; t = 0; tl = 0; if (!text) { text = &t; text_len = &tl; } if (0 > ftp_client_read_simple_cmd_reply (limits, errn, code, text, text_len, in_fd)) return -1; status = 0; if (*code != 227) { switch (*code / 100) { default: case 1: case 2: case 3: bogus_reply: *errn = EINVAL; status = -1; break; case 4: case 5: *errn = 0; status = -1; break; } } else { t_ulong h; t_uint16 p; if (str_chr_rindex (*text, '(')) { if (0 > ftp_client_pasv_parse_parenthesis(*text, &h, &p)) goto bogus_reply; } else if (str_chr_rindex (*text, '=')) { if (0 > ftp_client_pasv_parse_equal(*text, &h, &p)) goto bogus_reply; } else goto bogus_reply; *host = h; *port = p; #if 0 if (host) *host = htonl (h); if (port) *port = htons (p); #endif } if (t) lim_free (limits, t); return status; } /**************************************************************** * ftp_type_image * ftp_type_ascii * * TYPE * */ static int ftp_client_type_image (alloc_limits limits, int * errn, int * code, t_uchar ** text, long * text_len, int in_fd, int out_fd) { if (0 > ftp_client_printfmt (errn, out_fd, "TYPE I\r\n")) return -1; return ftp_client_read_simple_cmd_reply (limits, errn, code, text, text_len, in_fd); } #if 0 static int ftp_client_type_ascii (alloc_limits limits, int * errn, int * code, t_uchar ** text, long * text_len, int in_fd, int out_fd) { if (0 > ftp_client_printfmt (errn, out_fd, "TYPE A\r\n")) return -1; return ftp_client_read_simple_cmd_reply (limits, errn, code, text, text_len, in_fd); } #endif /**************************************************************** * not implemented * * STRU * */ /**************************************************************** * ftp_stream_mode * * MODE * */ #if 0 static int ftp_client_stream_mode (alloc_limits limits, int * errn, int * code, t_uchar ** text, long * text_len, int in_fd, int out_fd) { if (0 > ftp_client_printfmt (errn, out_fd, "MODE S\r\n")) return -1; return ftp_client_read_simple_cmd_reply (limits, errn, code, text, text_len, in_fd); } #endif /**************************************************************** * ftp_client_begin_retr * ftp_client_end_retr * * RETR * */ static int ftp_client_begin_retr (alloc_limits limits, int * errn, int * code, t_uchar ** text, long * text_len, int in_fd, int out_fd, const t_uchar * path) { int c; if (0 > ftp_client_printfmt (errn, out_fd, "RETR %s\r\n", path)) return -1; if (0 > ftp_client_read_reply (limits, errn, &c, text, text_len, in_fd)) return -1; if (code) *code = c; switch (c / 100) { case 1: /* Not doing anything special for markers yet. * * 125 Data connection already open; transfer starting. * 150 File status okay; about to open data connection. * 110 Restart marker reply. * In this case, the text is exact and not left to the * particular implementation; it must read: * MARK yyyy = mmmm * Where yyyy is User-process data stream marker, and mmmm * server's equivalent marker (note the spaces between markers * and "="). */ return 0; default: case 2: case 4: case 5: /* * 226 Closing data connection. * Requested file action successful (for example, file * transfer or file abort). * 250 Requested file action okay, completed. * * 421 Service not available, closing control connection. * This may be a reply to any command if the service knows it * must shut down. * 425 Can't open data connection. * 426 Connection closed; transfer aborted. * 451 Requested action aborted: local error in processing. * 450 Requested file action not taken. * File unavailable (e.g., file busy). * * 550 Requested action not taken. * File unavailable (e.g., file not found, no access). * 500 Syntax error, command unrecognized. * This may include errors such as command line too long. * 501 Syntax error in parameters or arguments. * 530 Not logged in. */ *errn = 0; return -1; case 3: *errn = EINVAL; return -1; } } static int ftp_client_end_retr (alloc_limits limits, int * errn, int * code, t_uchar ** text, long * text_len, int in_fd, int out_fd) { return ftp_client_read_simple_cmd_reply (limits, errn, code, text, text_len, in_fd); } /**************************************************************** * ftp_client_begin_stor * ftp_client_end_stor * * STOR * */ static int ftp_client_begin_stor (alloc_limits limits, int * errn, int * code, t_uchar ** text, long * text_len, int in_fd, int out_fd, const t_uchar * path) { int c; if (0 > ftp_client_printfmt (errn, out_fd, "STOR %s\r\n", path)) return -1; if (0 > ftp_client_read_reply (limits, errn, &c, text, text_len, in_fd)) return -1; if (code) *code = c; switch (c / 100) { case 1: /* Not doing anything special for markers yet. */ return 0; default: case 2: case 4: case 5: *errn = 0; return -1; case 3: *errn = EINVAL; return -1; } } static int ftp_client_end_stor (alloc_limits limits, int * errn, int * code, t_uchar ** text, long * text_len, int in_fd, int out_fd) { return ftp_client_read_simple_cmd_reply (limits, errn, code, text, text_len, in_fd); } /**************************************************************** * ftp_client_begin_nlst * ftp_client_end_nlst * * NLST [ ] * * * with wu-ftp: * * NLST -a [ ] * */ static int ftp_client_begin_nlst (alloc_limits limits, int * errn, int * code, t_uchar ** text, long * text_len, int in_fd, int out_fd, int is_wu_ftp, const t_uchar * path, t_ulong host_addr, t_uint16 port) { int c; int data_fd = 0; if (host_addr) { data_fd = url_inet_client_addr (errn, host_addr, (int)port); if (data_fd < 0) { safe_printfmt (2, "ftp_client_begin_nlst: %s to port %d\n", errno_to_string (*errn), (int) port); } } if (path && path[0]) { if (0 > ftp_client_printfmt (errn, out_fd, "NLST%s %s\r\n", (is_wu_ftp ? " -a" : ""), path)) goto leave; } else { if (0 > ftp_client_printfmt (errn, out_fd, "NLST%s\r\n", (is_wu_ftp ? " -a" : ""))) goto leave; } if (0 > ftp_client_read_reply (limits, errn, &c, text, text_len, in_fd)) { leave: if (host_addr && data_fd >= 0) safe_close (data_fd); return -1; } if (code) *code = c; else { } switch (c / 100) { case 1: return data_fd; default: case 2: case 4: case 5: *errn = 0; if (host_addr && (data_fd >= 0)) safe_close (data_fd); return -1; case 3: *errn = EINVAL; if (host_addr && (data_fd >= 0)) safe_close (data_fd); return -1; } } static int ftp_client_end_nlst (alloc_limits limits, int * errn, int * code, t_uchar ** text, long * text_len, int in_fd, int out_fd) { return ftp_client_read_simple_cmd_reply (limits, errn, code, text, text_len, in_fd); } /**************************************************************** * ftp_mkd * MKD * */ static int ftp_client_mkd (alloc_limits limits, int * errn, int * code, t_uchar ** text, long * text_len, int in_fd, int out_fd, const t_uchar * path) { if (0 > ftp_client_printfmt (errn, out_fd, "MKD %s\r\n", path)) return -1; return ftp_client_read_simple_cmd_reply (limits, errn, code, text, text_len, in_fd); } /**************************************************************** * ftp_rename * * RNFR * RNTO * */ static int ftp_client_rename (alloc_limits limits, int * errn, int * code, t_uchar ** text, long * text_len, int in_fd, int out_fd, const t_uchar * from, const t_uchar * to) { int rnfr_code; t_uchar * rnfr_text; long rnfr_len; int rnto_code; t_uchar * rnto_text; long rnto_len; if (0 > ftp_client_printfmt (errn, out_fd, "RNFR %s\r\n", from)) return -1; if (0 > ftp_client_read_reply (limits, errn, &rnfr_code, &rnfr_text, &rnfr_len, in_fd)) return -1; *code = rnfr_code; if (!text) lim_free (limits, rnfr_text); else { *text = rnfr_text; *text_len = rnfr_len; } { int first_digit; first_digit = rnfr_code / 100; switch (first_digit) { default: case 1: case 2: *errn = EINVAL; return -1; case 3: break; case 4: case 5: *errn = 0; return -1; } } if (0 > ftp_client_printfmt (errn, out_fd, "RNTO %s\r\n", to)) return -1; if (0 > ftp_client_read_reply (limits, errn, &rnto_code, &rnto_text, &rnto_len, in_fd)) return -1; *code = rnto_code; if (!text) lim_free (limits, rnto_text); else { *text = lim_realloc (limits, *text, rnfr_len + rnto_len + 1); mem_move (*text + rnfr_len, rnto_text, rnto_len); (*text)[rnfr_len + rnto_len] = 0; *text_len += rnto_len; lim_free (limits, rnto_text); } { int first_digit; first_digit = rnto_code / 100; switch (first_digit) { default: case 1: case 3: *errn = EINVAL; return -1; case 2: return 0; case 4: case 5: *errn = 0; return -1; } } } static int ftp_client_dele (alloc_limits limits, int * errn, int * code, t_uchar ** text, long * text_len, int in_fd, int out_fd, const t_uchar * path) { if (0 > ftp_client_printfmt (errn, out_fd, "DELE %s\r\n", path)) return -1; return ftp_client_read_simple_cmd_reply (limits, errn, code, text, text_len, in_fd); } /**************************************************************** * ftp_rmd * * RMD * */ static int ftp_client_rmd (alloc_limits limits, int * errn, int * code, t_uchar ** text, long * text_len, int in_fd, int out_fd, const t_uchar * path) { if (0 > ftp_client_printfmt (errn, out_fd, "RMD %s\r\n", path)) return -1; return ftp_client_read_simple_cmd_reply (limits, errn, code, text, text_len, in_fd); } /**************************************************************** * ftp_cwd * CWD */ static int ftp_client_cwd (alloc_limits limits, int * errn, int * code, t_uchar ** text, long * text_len, int in_fd, int out_fd, const t_uchar * path) { if (0 > ftp_client_printfmt (errn, out_fd, "CWD %s\r\n", path)) return -1; return ftp_client_read_simple_cmd_reply (limits, errn, code, text, text_len, in_fd); } /**************************************************************** * ftp_client_pwd * * PWD * */ static int ftp_client_pwd (alloc_limits limits, int * errn, int * code, t_uchar ** path, long * path_len, t_uchar ** text, long * text_len, int in_fd, int out_fd) { t_uchar * t; long tl; int status; if (0 > ftp_client_printfmt (errn, out_fd, "PWD\r\n")) return -1; t = 0; tl = 0; if (!text) { text = &t; text_len = &tl; } if (0 > ftp_client_read_simple_cmd_reply (limits, errn, code, text, text_len, in_fd)) return -1; status = 0; if (*code != 257) { switch (*code / 100) { default: case 1: case 2: case 3: bogus_reply: *errn = EINVAL; status = -1; break; case 4: case 5: *errn = 0; status = -1; break; } } else { t_uchar * path_start; t_uchar * path_end; long doubled_quotes; path_start = str_chr_index (*text, '"'); if (!path_start) goto bogus_reply; path_start += 1; path_end = path_start; doubled_quotes = 0; while (1) { if (path_end == (*text + *text_len)) goto bogus_reply; else if (*path_end == '"') { if (((path_end + 1) < (*text + *text_len)) && (*(path_end + 1) == '"')) { ++doubled_quotes; path_end += 2; } else break; } else ++path_end; } if (path) { t_uchar * p; *path = lim_malloc (limits, 1 + (path_end - path_start) - doubled_quotes); p = *path; while (path_start < path_end) { *p = *path_start; ++p; if (*path_start == '"') ++path_start; ++path_start; } *p = 0; *path_len = p - *path; } status = 0; } if (t) lim_free (limits, t); return status; } /**************************************************************** * ftp_syst * SYST * */ static int ftp_client_syst (alloc_limits limits, int * errn, int * code, t_uchar ** text, long * text_len, int in_fd, int out_fd) { if (0 > ftp_client_printfmt (errn, out_fd, "SYST\r\n")) return -1; return ftp_client_read_simple_cmd_reply (limits, errn, code, text, text_len, in_fd); } /* tag: Tom Lord Mon Jun 16 21:58:44 2003 (pfs-ftp.c) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-delta.h0000644000175000017500000000116710457622000016714 0ustar useruser/* cmd-delta.h: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__CMD_DELTA_H #define INCLUDE__LIBARCH__CMD_DELTA_H #include "hackerlab/machine/types.h" extern t_uchar arch_cmd_delta_help[]; /* automatically generated __STDC__ prototypes */ extern int arch_cmd_delta (t_uchar * program_name, int argc, char * argv[]); #endif /* INCLUDE__LIBARCH__CMD_DELTA_H */ /* tag: Tom Lord Sat Jan 5 15:26:10 2002 (cmd-revdelta.h) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-join-branch.c0000644000175000017500000001550510457622000020011 0ustar useruser/* cmd-join-branch.c: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "config-options.h" #include "hackerlab/cmd/main.h" #include "hackerlab/fs/file-names.h" #include "hackerlab/fs/cwd.h" #include "tla/libfsutils/tmp-files.h" #include "tla/libfsutils/rmrf.h" #include "tla/libarch/namespace.h" #include "tla/libarch/project-tree.h" #include "tla/libarch/my.h" #include "tla/libarch/archive.h" #include "tla/libarch/pristines.h" #include "tla/libarch/build-revision.h" #include "tla/libarch/patch-logs.h" #include "tla/libarch/cmd.h" #include "tla/libarch/cmd-replay.h" #include "tla/libarch/copy-project-tree.h" #include "tla/libarch/cmd-join-branch.h" static t_uchar * usage = "[options] version"; static t_uchar * version_string = (cfg__std__package " from regexps.com\n" "\n" "Copyright 2003 Tom Lord\n" "\n" "This is free software; see the source for copying conditions.\n" "There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\n" "PARTICULAR PURPOSE.\n" "\n" "Report bugs to " cfg__tla_bug_mail ".\n" "\n" cfg__std__release_id_string "\n"); #define OPTS(OP) \ OP (opt_help_msg, "h", "help", 0, \ "Display a help message and exit.") \ OP (opt_long_help, "H", 0, 0, \ "Display a verbose help message and exit.") \ OP (opt_version, "V", "version", 0, \ "Display a release identifier string\n" \ "and exit.") \ OP (opt_archive, "A", "archive", 1, \ "Override `my-default-archive'") \ OP (opt_dir, "d", "dir DIR", 1, \ "Operate on project tree in DIR (default `.')") \ OP (opt_dest, 0, "dest DEST", 1, \ "Instead of modifying the project tree in-place,\n" \ "make a copy of it to DEST and apply the result to that") \ OP (opt_unescaped, 0, "unescaped", 0, \ "show filenames in unescaped form") t_uchar arch_cmd_join_branch_help[] = ("add a version as an ancestor of a project tree\n" "VERSION--base-0 must be a continuation (e.g. tag). The command replays the\n" "changeset for VERSION--base-0 in the project tree, which has the effect of\n" "adding the log for the branch (making the tag an ancestor of the resulting\n" "tree).\n"); enum options { OPTS (OPT_ENUM) }; static struct opt_desc opts[] = { OPTS (OPT_DESC) {-1, 0, 0, 0, 0} }; int arch_cmd_join_branch (t_uchar * program_name, int argc, char * argv[]) { int o; struct opt_parsed * option; t_uchar * default_archive = 0; t_uchar * upon = 0; t_uchar * dest = 0; int escape_classes = arch_escape_classes; safe_buffer_fd (1, 0, O_WRONLY, 0); option = 0; while (1) { o = opt_standard (lim_use_must_malloc, &option, opts, &argc, argv, program_name, usage, version_string, arch_cmd_join_branch_help, opt_help_msg, opt_long_help, opt_version); if (o == opt_none) break; switch (o) { default: safe_printfmt (2, "unhandled option `%s'\n", option->opt_string); panic ("internal error parsing arguments"); usage_error: opt_usage (2, argv[0], program_name, usage, 1); exit (1); /* bogus_arg: */ safe_printfmt (2, "ill-formed argument for `%s' (`%s')\n", option->opt_string, option->arg_string); goto usage_error; case opt_archive: { lim_free (0, default_archive); default_archive = str_save (0, option->arg_string); break; } case opt_dir: { lim_free (0, upon); upon = str_save (0, option->arg_string); break; } case opt_dest: { lim_free (0, dest); dest = str_save (0, option->arg_string); break; } case opt_unescaped: { escape_classes = 0; break; } } } if (argc != 2) goto usage_error; if (default_archive && !arch_valid_archive_name (default_archive)) { safe_printfmt (2, "%s: invalid archive name (%s)\n", argv[0], default_archive); exit (1); } { t_uchar * vsn_spec; t_uchar * archive = 0; t_uchar * version = 0; t_uchar * base0_revision = 0; t_uchar * fqbase0 = 0; t_uchar * upon_root = 0; struct arch_archive * arch = 0; if (! upon) upon = str_save (0, "."); vsn_spec = argv[1]; if (!arch_valid_package_name (vsn_spec, arch_maybe_archive, arch_req_version, 0)) { safe_printfmt (2, "%s: invalid version name (%s)\n", argv[0], vsn_spec); exit (1); } archive = arch_parse_package_name (arch_ret_archive, default_archive, vsn_spec); version = arch_parse_package_name (arch_ret_non_archive, 0, vsn_spec); base0_revision = str_alloc_cat (0, version, "--base-0"); fqbase0 = arch_fully_qualify (archive, base0_revision); upon_root = arch_tree_root (0, upon, 0); if (!upon_root) { safe_printfmt (2, "%s: not in a project tree -- %s\n", argv[0], upon); exit (1); } if (arch_tree_has_log (upon_root, archive, base0_revision)) { safe_printfmt (2, "%s: tree already has log for %s/%s\n", argv[0], archive, base0_revision); exit (1); } arch = arch_archive_connect (archive, 0); { enum arch_revision_type type; arch_revision_type (&type, 0, arch, base0_revision); if (type != arch_continuation_revision) { safe_printfmt (2, "%s: not a tag revision (%s/%s)\n", argv[0], archive, base0_revision); exit (1); } } if (dest) { safe_printfmt (1, "* copying %s to %s\n", upon, dest); safe_flush (1); arch_copy_project_tree (upon, dest, 1, 1); } else dest = str_save (0, upon); arch_call_cmd (arch_cmd_replay, argv[0], "--dir", dest, fqbase0, ((escape_classes == 0) ? "--unescaped" : 0), (char*)0); lim_free (0, archive); lim_free (0, version); lim_free (0, base0_revision); lim_free (0, fqbase0); arch_archive_close (arch); } lim_free (0, upon); lim_free (0, dest); lim_free (0, default_archive); return 0; } /* tag: Tom Lord Wed Jun 4 18:23:19 2003 (cmd-join-branch.c) */ tla-1.3.5+dfsg/src/tla/libarch/pfs-signatures.c0000644000175000017500000007566210457622000020042 0ustar useruser/* pfs-signatures.c: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "config-include/config-options.h" #include "hackerlab/bugs/panic.h" #include "hackerlab/os/sys/types.h" #include "hackerlab/os/sys/wait.h" #include "hackerlab/os/signal.h" #include "hackerlab/char/str.h" #include "hackerlab/hash/md5-utils.h" #include "hackerlab/hash/sha1-utils.h" #include "hackerlab/rx-posix/regex.h" #include "hackerlab/vu/safe.h" #include "hackerlab/fs/file-names.h" #include "tla/libfsutils/file-contents.h" #include "tla/libfsutils/tmp-files.h" #include "tla/libawk/associative.h" #include "tla/libarch/my.h" #include "tla/libarch/namespace.h" #include "tla/libarch/archives.h" #include "tla/libarch/pfs-signatures.h" /* __STDC__ prototypes for static functions */ static void exec_shell_command (t_uchar * command); static t_uchar * archive_signing_rule_file (const t_uchar * archive, int no_default); static t_uchar * archive_signature_checking_rule_file (const t_uchar * archive, int no_default); static int arch_pfs_memoize_checksum_file (const t_uchar * archive, const t_uchar * official_archive, const t_uchar * revision, const t_uchar * file_contents); int arch_pfs_has_signing_rule (t_uchar * archive) { t_uchar * rule_file = 0; int answer = 0; rule_file = archive_signing_rule_file (archive, 1); answer = !!rule_file; lim_free (0, rule_file); return answer; } int arch_pfs_sign_for_archive (const t_uchar * archive, const t_uchar * official_archive, const t_uchar * revision, const t_uchar * sigfile, int in_fd, int out_fd) { t_uchar * rule_file = 0; t_uchar * rule = 0; int pid; int answer = 0; rule_file = archive_signing_rule_file (archive, 0); if (!rule_file) { safe_printfmt (2, ("\n" "\n" "********************************\n" "SIGNATURE DEMANDED FOR ARCHIVE\n" " %s\n" "BUT NO RULE PROVIDED\n" "\n" "Consider creating ~/.arch-params/signing/%s\n" " or ~/.arch-params/signing/=default\n" "\n" "********************************\n" "\n" "\n"), archive, archive); generic_error_exit: safe_printfmt (2, ("\n" "(You may also have to use tla lock-revision -b before\n" " retrying this transaction. See tla lock-revision -H)\n" "\n")); answer = -1; generic_return: lim_free (0, rule_file); lim_free (0, rule); return answer; } rule = file_contents_trimming (rule_file); if (arch_valid_archive_name (rule)) { /* Copy signature from another archive. */ struct arch_archive * sig_from = 0; struct arch_pfs_archive * pfs_sig_from; t_uchar * revdir_from = 0; t_uchar * sigpath = 0; t_uchar * signed_checksum = 0; sig_from = arch_archive_connect (rule, 0); revdir_from = arch_fs_archive_revision_path (sig_from, 0, revision); sigpath = file_name_in_vicinity (0, revdir_from, sigfile); if (str_cmp (sig_from->vtable->type, "pfs")) { safe_printfmt (2, ("\n" "\n" "********************************\n" "\n" "ARCHIVE SIGNING RULE SAYS TO COPY\n" "CHECKSUMS FROM %s\n" "\n" "SURPRISINGLY, ARCH DOESN'T KNOW\n" "HOW TO COPY FROM THAT ARCHIVE.\n" "\n" " your rule file: %s\n" "\n" "********************************\n" "\n" "\n"), rule, rule_file); exit (2); } pfs_sig_from = (struct arch_pfs_archive *)sig_from; signed_checksum = arch_pfs_file_contents (pfs_sig_from->pfs, sigpath, 1); if (!signed_checksum || arch_pfs_memoize_checksum_file (archive, official_archive, revision, signed_checksum)) { safe_printfmt (2, ("\n" "\n" "********************************\n" "\n" "ARCHIVE SIGNING RULE SAYS TO COPY\n" "CHECKSUMS FROM %s\n" "\n" "THE CHECKSUM FILE IN THAT ARCHIVE FOR\n" "\n" " %s\n" "\n" "IS MISSING OR INAPPROPRIATE.\n" "\n" " your rule file: %s\n" "\n" "********************************\n" "\n" "\n"), rule, revision, rule_file); exit (2); } safe_write_retry (out_fd, signed_checksum, str_length (signed_checksum)); arch_archive_close (sig_from); lim_free (0, signed_checksum); lim_free (0, revdir_from); lim_free (0, sigpath); return 0; } else { /* Generate the signature anew */ pid = fork (); if (pid == -1) { safe_printfmt (2, "unable to fork to run %s\n", rule); goto generic_error_exit; } if (pid) { int status; int wait_pid; wait_pid = waitpid (pid, &status, 0); if (wait_pid < 0) { panic_msg ("error waiting for signature generation subprocess"); kill (0, SIGKILL); panic ("error waiting for subprocess"); } if (WIFSIGNALED (status)) { safe_printfmt (2, "\n"); safe_printfmt (2, "signature subprocess killed by signal %d\n", WTERMSIG (status)); safe_printfmt (2, "\n"); goto generic_error_exit; } else if (!WIFEXITED (status)) { panic_msg ("waitpid returned for a non-exited process"); kill (0, SIGKILL); panic ("waitpid returned for a non-exited process"); } else { int exit_status; exit_status = WEXITSTATUS (status); if (exit_status) { safe_printfmt (2, ("signature command exited with non-0 status (%d)\n" "\n" "command: %s\n" "\n"), exit_status, rule); goto generic_error_exit; } else goto generic_return; } } else { safe_move_fd (in_fd, 0); safe_move_fd (out_fd, 1); exec_shell_command (rule); panic ("not reached"); } panic ("not reached"); kill (0, SIGKILL); return -1; } } int arch_pfs_check_signature_for_archive (const t_uchar * archive, const t_uchar * signed_message) { t_uchar * rule_file = 0; t_uchar * rule = 0; t_uchar * tmp_path = 0; int tmp_fd = -1; int pid; int answer = 0; rule_file = archive_signature_checking_rule_file (archive, 0); if (!rule_file) { generic_return: lim_free (0, rule_file); lim_free (0, rule); lim_free (0, tmp_path); if (tmp_fd > 0) safe_close (tmp_fd); return answer; } tmp_path = tmp_file_name ("/tmp", "checksum-contents"); tmp_fd = safe_open (tmp_path, O_RDWR | O_CREAT | O_EXCL, 0); safe_unlink (tmp_path); safe_write_retry (tmp_fd, signed_message, str_length (signed_message)); safe_lseek (tmp_fd, (off_t)0, SEEK_SET); rule = file_contents (rule_file); pid = fork (); if (pid == -1) { safe_printfmt (2, "unable to fork to run %s\n", rule); answer = -1; goto generic_return; } if (pid) { int status; int wait_pid; wait_pid = waitpid (pid, &status, 0); if (wait_pid < 0) { panic_msg ("error waiting for signature checking subprocess"); kill (0, SIGKILL); panic ("error waiting for subprocess"); } if (WIFSIGNALED (status)) { safe_printfmt (2, "\n"); safe_printfmt (2, "signature checking subprocess killed by signal %d\n", WTERMSIG (status)); safe_printfmt (2, "\n"); answer = -1; goto generic_return; } else if (!WIFEXITED (status)) { panic_msg ("waitpid returned for a non-exited process"); kill (0, SIGKILL); panic ("waitpid returned for a non-exited process"); } else { int exit_status; exit_status = WEXITSTATUS (status); if (exit_status) answer = -1; goto generic_return; } } else { safe_move_fd (tmp_fd, 0); exec_shell_command (rule); panic ("not reached"); } panic ("not reached"); kill (0, SIGKILL); return -1; } static void exec_shell_command (t_uchar * command) { char * argv[5]; argv[0] = "sh"; argv[1] = "-e"; argv[2] = "-c"; argv[3] = (char *)command; argv[4] = 0; execv (cfg__posix_shell, argv); panic ("not reached"); } static t_uchar * archive_signing_rule_file (const t_uchar * archive, int no_default) { t_uchar * home; t_uchar * params_dir = 0; t_uchar * rules_dir = 0; t_uchar * answer = 0; home = getenv ("HOME"); invariant (!!home); params_dir = arch_my_arch_params (); rules_dir = file_name_in_vicinity (0, params_dir, "signing"); answer = file_name_in_vicinity (0, rules_dir, archive); if (safe_access (answer, F_OK)) { lim_free (0, answer); answer = 0; if (!no_default) { answer = file_name_in_vicinity (0, rules_dir, "=default"); if (safe_access (answer, F_OK)) { lim_free (0, answer); answer = 0; } } } lim_free (0, params_dir); lim_free (0, rules_dir); return answer; } static t_uchar * archive_signature_checking_rule_file (const t_uchar * archive, int no_default) { static assoc_table already_checked = 0; static assoc_table already_know = 0; t_uchar * check_rule_name = 0; t_uchar * home; t_uchar * params_dir = 0; t_uchar * rules_dir = 0; const t_uchar * maybe_answer; t_uchar * answer = 0; maybe_answer = assoc_get_str_taking (already_know, rel_make_field_str (archive)); if (maybe_answer) { answer = str_save (0, maybe_answer); } else if (!assoc_get_str_taking (already_checked, rel_make_field_str (archive))) { check_rule_name = str_alloc_cat (0, archive, ".check"); home = getenv ("HOME"); invariant (!!home); params_dir = arch_my_arch_params (); rules_dir = file_name_in_vicinity (0, params_dir, "signing"); answer = file_name_in_vicinity (0, rules_dir, check_rule_name); if (safe_access (answer, F_OK)) { lim_free (0, answer); if (no_default) answer = 0; else { answer = file_name_in_vicinity (0, rules_dir, "=default.check"); if (safe_access (answer, F_OK)) { lim_free (0, answer); answer = 0; } } } if (answer || !no_default) { assoc_set_taking (&already_checked, rel_make_field_str (archive), rel_make_field_str ("yes")); if (answer) { assoc_set_taking (&already_know, rel_make_field_str (archive), rel_make_field_str (answer)); } else { safe_printfmt (2, ("\n" "WARNING: no rule found for checking signatures from %s\n" "\n" " Consider creating ~/.arch-params/signing/%s.check\n" " or ~/.arch-params/signing/=default.check\n" "\n"), archive, archive); } } } lim_free (0, check_rule_name); lim_free (0, params_dir); lim_free (0, rules_dir); return answer; } static assoc_table remembered_md5s = 0; /* * keys are * $archive $revision $file * * values are (ascii, hex) md5 checksums. */ static assoc_table remembered_sha1s = 0; /* * keys are * $url $revision $file * * values are (ascii, hex) SHA1 checksums. */ static assoc_table checked_revisions = 0; /* * keys are * $archive $revision * * values are "yes" meaning that the checksum * file for that revision has been read. */ static assoc_table checksummed_revisions = 0; /* * keys are * $archive $revision * * values are "yes" meaning that a checksum * file for that revision was found. */ int arch_pfs_ensure_checksum_data (struct arch_pfs_archive * arch, const t_uchar * revision) { int answer = 0; t_uchar * revision_key = 0; revision_key = str_alloc_cat_many (0, arch->arch.name, " ", revision, str_end); if (!assoc_get_str_taking (checked_revisions, rel_make_field_str (revision_key))) { t_uchar * revision_dir = 0; # define N_CHECKSUM_FILES 2 static char * checksum_file_name[N_CHECKSUM_FILES] = { "checksum", "checksum.cacherev" }; int x; t_uchar * check_rule = 0; int found_checksums = 0; /* If the user thinks he wants to signature-check this archive, * but the archive doesn't think it's signed, then freak out. */ check_rule = archive_signature_checking_rule_file (arch->arch.name, 1); if (check_rule && !arch->arch.signed_archive) { safe_printfmt (2, ("\n" "\n" "********************************\n" "\n" "ARCHIVE NOT SIGNED BUT YOU HAVE A RULE\n" "FOR SIGNATURE CHECKING THIS ARCHIVE.\n" "\n" " archive: %s\n" " revision %s\n" "\n" " your rule file: %s\n" "\n" "********************************\n" "\n" "\n"), arch->arch.name, revision, check_rule); answer = -1; } revision_dir = arch_fs_archive_revision_path (&arch->arch, 0, revision); for (x = 0; x < N_CHECKSUM_FILES; ++x) { t_uchar * file_path = 0; t_uchar * file_contents = 0; file_path = file_name_in_vicinity (0, revision_dir, checksum_file_name[x]); file_contents = arch_pfs_file_contents (arch->pfs, file_path, 1); if (file_contents) { assoc_set_taking (&checksummed_revisions, rel_make_field_str (revision_key), rel_make_field_str ("yes")); found_checksums = 1; } if (arch->arch.signed_archive && file_contents && arch_pfs_check_signature_for_archive (arch->arch.name, file_contents)) { safe_printfmt (2, ("\n" "\n" "********************************\n" "\n" "INVALID SIGNATURE ON REVISION!\n" " archive: %s\n" " revision %s\n" " checksum file: %s\n" "\n" "********************************\n" "\n" "\n"), arch->arch.name, revision, checksum_file_name[x]); answer = -1; } else if (file_contents && arch_pfs_memoize_checksum_file (arch->arch.name, arch->arch.official_name, revision, file_contents)) { safe_printfmt (2, ("\n" "\n" "********************************\n" "\n" "INVALID CHECKSUM FILE SYNTAX FOR REVISION!\n" " archive: %s\n" " revision %s\n" " checksum file: %s\n" "\n" "********************************\n" "\n" "\n"), arch->arch.name, revision, checksum_file_name[x]); answer = -1; } lim_free (0, file_path); lim_free (0, file_contents); } assoc_set_taking (&checked_revisions, rel_make_field_str (revision_key), rel_make_field_str ("yes")); /* If the archive is supposed to be signed, but no checksums * were found, fail. If the archive is not signed, but no * checksums were found, warn. */ if (!found_checksums) { if (arch->arch.signed_archive || check_rule) { safe_printfmt (2, ("\n" "\n" "********************************\n" "\n" "NO CHECKSUMS FOUND FOR REVISION!\n" " IN ARCHIVE THAT'S SUPPOSED TO\n" " BE SIGNED!\n" "\n" " archive: %s\n" " revision %s\n" "\n" "********************************\n" "\n" "\n"), arch->arch.name, revision); answer = -1; } else { safe_printfmt (2, ("\n" "********************************\n" "NO CHECKSUMS FOUND FOR REVISION\n" " (unsigned archive, continuing anyway)\n" "\n" " archive: %s\n" " revision %s\n" "\n" "********************************\n" "\n"), arch->arch.name, revision); } } lim_free (0, revision_dir); lim_free (0, check_rule); } lim_free (0, revision_key); return answer; } static void arch_pfs_insert_key (t_uchar *line, t_uchar *key_prefix, regmatch_t *file, regmatch_t *hash, assoc_table *table) { t_uchar * file_name = 0; t_uchar * assoc_key = 0; t_uchar * val = 0; file_name = str_save_n (0, line + file->rm_so, file->rm_eo - file->rm_so); assoc_key = str_alloc_cat (0, key_prefix, file_name); val = str_save_n (0, line + hash->rm_so, hash->rm_eo - hash->rm_so); assoc_set_taking (table, rel_make_field_str(assoc_key), rel_make_field_str(val)); lim_free (0, file_name); lim_free (0, assoc_key); lim_free (0, val); } static int arch_pfs_memoize_checksum_file (const t_uchar * archive, const t_uchar * official_archive, const t_uchar * revision, const t_uchar * file_contents) { static char file_head_pattern[] = "^Signature-for: ([^/]+)/(.+)$"; static char md5_pattern[] = "^md5 ([^\n ]+) ([a-f0-9]+)"; static char sha1_pattern[] = "^sha1 ([^\n ]+) ([a-f0-9]+)"; static int is_compiled = 0; static regex_t file_head_preg; static regex_t md5_preg; static regex_t sha1_preg; regmatch_t pmatch[3]; if (!is_compiled) { if (regcomp (&file_head_preg, file_head_pattern, REG_EXTENDED | REG_NEWLINE)) panic ("unable to compile checksum-file head regexp"); if (regcomp (&md5_preg, md5_pattern, REG_EXTENDED)) panic ("unable to compile checksum-file MD5 regexp"); if (regcomp (&sha1_preg, sha1_pattern, REG_EXTENDED)) panic ("unable to compile checksum-file SHA1 regexp"); is_compiled = 1; } if (regexec (&file_head_preg, file_contents, 3, pmatch, 0)) return -1; if (str_cmp_n (official_archive, str_length (official_archive), file_contents + pmatch[1].rm_so, (pmatch[1].rm_eo - pmatch[1].rm_so))) return -1; if (str_cmp_n (revision, str_length (revision), file_contents + pmatch[2].rm_so, (pmatch[2].rm_eo - pmatch[2].rm_so))) return -1; { t_uchar * key_prefix = 0; /* so this is the URL to the revision, for all intents and purposes * so it should be location not archive-name */ invariant (archive != NULL); key_prefix = str_alloc_cat_many (0, archive, " ", revision, " ", str_end); file_contents = str_chr_index (file_contents, '\n'); if (file_contents) file_contents++; while (file_contents && *file_contents) { if (!regexec (&md5_preg, file_contents, 3, pmatch, 0)) arch_pfs_insert_key (file_contents, key_prefix, &pmatch[1], &pmatch[2], &remembered_md5s); else if (!regexec (&sha1_preg, file_contents, 3, pmatch, 0)) arch_pfs_insert_key (file_contents, key_prefix, &pmatch[1], &pmatch[2], &remembered_sha1s); else ; /* * Ignore this line for now; it may be another hash or other metadata * that was added by a future tla version. */ file_contents = str_chr_index (file_contents, '\n'); if (file_contents) file_contents++; } lim_free (0, key_prefix); } return 0; } #if 0 { static char file_pattern[] = ("^Signature-for: (.*)/(.*)\n" "([[:(md5 [^/[:space:]]+ ................................\n):]]*)"); static char md5_pattern[] = "^md5 ([^\n ]+) ([a-f0-9]+)"; static char sha1_pattern[] = "^sha1 ([^\n ]+) ([a-f0-9]+)"; static int is_compiled = 0; static regex_t preg; regmatch_t pmatch[4]; if (!is_compiled) { if (regcomp (&preg, file_pattern, REG_EXTENDED | REG_NEWLINE)) panic ("unable to compile checksum-file regexp"); is_compiled = 1; } if (regexec (&preg, file_contents, 4, pmatch, 0)) return -1; if (str_cmp_n (official_archive, str_length (official_archive), file_contents + pmatch[1].rm_so, (pmatch[1].rm_eo - pmatch[1].rm_so))) return -1; if (str_cmp_n (revision, str_length (revision), file_contents + pmatch[2].rm_so, (pmatch[2].rm_eo - pmatch[2].rm_so))) return -1; { const t_uchar * item_start; const t_uchar * boundary; t_uchar * key_prefix = 0; item_start = file_contents + pmatch[3].rm_so; boundary = file_contents + pmatch[3].rm_eo; key_prefix = str_alloc_cat_many (0, archive, " ", revision, " ", str_end); while (item_start < boundary) { t_uchar * item_end; t_uchar * file_name = 0; t_uchar * assoc_key = 0; t_uchar * md5 = 0; item_start = 1 + str_chr_index (item_start, ' '); item_end = str_chr_index (item_start, ' '); file_name = str_save_n (0, item_start, item_end - item_start); assoc_key = str_alloc_cat (0, key_prefix, file_name); md5 = str_save_n (0, item_end + 1, 32); item_start = item_end + 34; /* space 32-byte-md5-string newline */ assoc_set_taking (&remembered_md5s, rel_make_field_str (assoc_key), rel_make_field_str (md5)); lim_free (0, file_name); lim_free (0, assoc_key); lim_free (0, md5); } lim_free (0, key_prefix); } return 0; } #endif int arch_pfs_checksum_anticipates_file (const t_uchar * archive, const t_uchar * revision, const t_uchar * file) { t_uchar * key = 0; int answer; key = str_alloc_cat_many (0, archive, " ", revision, " ", file, str_end); /* * Only MD5 is required for now. Perhaps at a later point we will * also require SHA1. */ answer = !!assoc_get_str_taking (remembered_md5s, rel_make_field_str (key)); lim_free (0, key); return answer; } int arch_pfs_checksum_governs (const t_uchar * archive, const t_uchar * revision) { t_uchar * key = 0; int answer; #undef FIXME /* Under what circumstance should it be an error that a revision * lacks a checksum file? (*_ensure_* abover should handle this) */ key = str_alloc_cat_many (0, archive, " ", revision, str_end); answer = !!assoc_get_str_taking (checksummed_revisions, rel_make_field_str (key)); lim_free (0, key); return answer; } int arch_pfs_checksum_governs_strictly (struct arch_pfs_archive * arch) { t_uchar * check_rule = 0; int answer = 0; if (arch->arch.signed_archive) return 1; else { check_rule = archive_signature_checking_rule_file (arch->arch.name, 1); if (check_rule) answer = 1; } lim_free (0, check_rule); return answer; } static void arch_pfs_validate_checksums (struct arch_archive *arch, t_uchar *revision, t_uchar *tail, t_uchar *key, t_uchar *contents_md5, t_uchar *contents_sha1) { t_uchar * remembered_md5 = 0; t_uchar * remembered_sha1 = 0; remembered_md5 = assoc_get_str_taking (remembered_md5s, rel_make_field_str (key)); remembered_sha1 = assoc_get_str_taking (remembered_sha1s, rel_make_field_str (key)); if ((remembered_md5 && str_cmp (remembered_md5, contents_md5)) || (remembered_sha1 && str_cmp (remembered_sha1, contents_sha1))) { safe_printfmt (2, ("\n" "********************************\n" " MISMATCHED ARCHIVE CHECKSUM\n" "\n" " archive: %s\n" " revision: %s\n" " url: %s\n" " file: %s\n" "\n" " expected:\n"), arch->official_name, revision, arch->location, tail); if (remembered_md5) safe_printfmt (2, (" MD5: %s\n"), remembered_md5); if (remembered_sha1) safe_printfmt (2, (" SHA1: %s\n"), remembered_sha1); safe_printfmt (2, (" got:\n")); if (remembered_md5) safe_printfmt (2, (" MD5: %s\n"), contents_md5); if (remembered_sha1) safe_printfmt (2, (" SHA1: %s\n"), contents_sha1); safe_printfmt (2, ("\n" "********************************\n" "\n")); exit (2); } } t_uchar * arch_pfs_checked_file_contents (struct arch_pfs_archive * arch, const t_uchar * revision, const t_uchar * path) { if (!arch_pfs_checksum_governs (arch->arch.name, revision)) return arch_pfs_file_contents (arch->pfs, path, 0); else { t_uchar * tail = 0; t_uchar * key = 0; const t_uchar * remembered_md5; t_uchar * contents = 0; t_uchar * contents_md5 = 0; t_uchar * contents_sha1 = 0; tail = file_name_tail (0, path); key = str_alloc_cat_many (0, arch->arch.name, " ", revision, " ", tail, str_end); remembered_md5 = assoc_get_str_taking (remembered_md5s, rel_make_field_str (key)); contents = arch_pfs_file_contents (arch->pfs, path, 0); contents_md5 = md5_ascii_for_str (0, contents); contents_sha1 = sha1_ascii_for_str (0, contents); arch_pfs_validate_checksums (&arch->arch, revision, tail, key, contents_md5, contents_sha1); lim_free (0, tail); lim_free (0, key); lim_free (0, contents_md5); lim_free (0, contents_sha1); return contents; } } void arch_pfs_checked_get_file (struct arch_pfs_archive * arch, const t_uchar * revision, int out_fd, const t_uchar * path) { if (!arch_pfs_checksum_governs (arch->arch.name, revision)) arch_pfs_get_file (arch->pfs, out_fd, path, 0); else { t_uchar * tail = 0; t_uchar * key = 0; const t_uchar * remembered_md5; t_uchar * tmp_path = 0; int tmp_fd = -1; t_uchar buf[1 << 16]; md5_context_t md5c = 0; sha1_context_t sha1c = 0; t_uchar computed_md5_raw[16]; t_uchar computed_sha1_raw[20]; t_uchar * computed_md5 = 0; t_uchar * computed_sha1 = 0; tail = file_name_tail (0, path); key = str_alloc_cat_many (0, arch->arch.name, " ", revision, " ", tail, str_end); remembered_md5 = assoc_get_str_taking (remembered_md5s, rel_make_field_str (key)); tmp_path = tmp_file_name ("/tmp", "arch-file"); tmp_fd = safe_open (tmp_path, O_RDWR | O_CREAT | O_EXCL, 0); safe_unlink (tmp_path); arch_pfs_get_file (arch->pfs, tmp_fd, path, 0); safe_lseek (tmp_fd, (off_t)0, SEEK_SET); md5c = make_md5_context (0); sha1c = make_sha1_context (0); while (1) { ssize_t amt; amt = safe_read_retry (tmp_fd, buf, sizeof (buf)); if (!amt) break; else { md5_scan (md5c, buf, (size_t)amt); sha1_scan (sha1c, buf, (size_t)amt); safe_write_retry (out_fd, buf, (size_t)amt); } } md5_final (computed_md5_raw, md5c); sha1_final (computed_sha1_raw, sha1c); computed_md5 = md5_alloc_ascii (0, computed_md5_raw); computed_sha1 = sha1_alloc_ascii (0, computed_sha1_raw); arch_pfs_validate_checksums (&arch->arch, revision, tail, key, computed_md5, computed_sha1); lim_free (0, tail); lim_free (0, key); lim_free (0, tmp_path); safe_close (tmp_fd); free_md5_context (0, md5c); lim_free (0, computed_md5); } } /* tag: Tom Lord Wed Dec 24 19:41:23 2003 (pfs-signatures.c) */ tla-1.3.5+dfsg/src/tla/libarch/sync-tree.c0000644000175000017500000000360310457622000016763 0ustar useruser/* sync-tree.c: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/fs/file-names.h" #include "tla/libfsutils/rmrf.h" #include "tla/libfsutils/tmp-files.h" #include "tla/libawk/relational.h" #include "tla/libarch/local-cache.h" #include "tla/libarch/patch-logs.h" #include "tla/libarch/namespace.h" #include "tla/libarch/sync-tree.h" void arch_sync_tree (int chatter_fd, t_uchar * tree_root, struct arch_archive * arch, t_uchar * archive, t_uchar * revision) { t_uchar * tmp_dir = 0; t_uchar * revision_instance = 0; rel_table has_logs = rel_table_nil; rel_table needs_logs = rel_table_nil; rel_table missing_logs = rel_table_nil; int x; tmp_dir = tmp_file_name (tree_root, ",,sync-tree-tmp"); revision_instance = arch_find_or_make_tmp_local_copy (chatter_fd, tmp_dir, tree_root, 0, arch, archive, revision); has_logs = arch_all_logs (tree_root); needs_logs = arch_all_logs (revision_instance); rel_sort_table_by_field (0, has_logs, 0); rel_sort_table_by_field (0, needs_logs, 0); missing_logs = rel_join (2, rel_join_output (2,0, 2,1, -1), 0, 0, has_logs, needs_logs); for (x = 0; x < rel_n_records (missing_logs); ++x) { t_uchar * archive = 0; t_uchar * revision = 0; archive = arch_parse_package_name (arch_ret_archive, 0, rel_peek_str (missing_logs, x, 0)); revision = arch_parse_package_name (arch_ret_non_archive, 0, rel_peek_str (missing_logs, x, 0)); arch_copy_to_patch_log (tree_root, archive, revision, rel_peek_str (missing_logs, x, 1)); lim_free (0, archive); lim_free (0, revision); } rmrf_file (tmp_dir); lim_free (0, tmp_dir); lim_free (0, revision_instance); } /* tag: Tom Lord Tue Jun 17 15:51:03 2003 (sync-tree.c) */ tla-1.3.5+dfsg/src/tla/libarch/build-revision.c0000644000175000017500000002041110457622000020001 0ustar useruser/* build-revision.c: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/bugs/panic.h" #include "hackerlab/mem/alloc-limits.h" #include "hackerlab/mem/mem.h" #include "hackerlab/char/str.h" #include "hackerlab/fs/file-names.h" #include "hackerlab/vu/safe.h" #include "tla/libfsutils/copy-file.h" #include "tla/libfsutils/dir-listing.h" #include "tla/libfsutils/tmp-files.h" #include "tla/libfsutils/rmrf.h" #include "tla/libarch/namespace.h" #include "tla/libarch/libraries.h" #include "tla/libarch/archive.h" #include "tla/libarch/apply-changeset.h" #include "tla/libarch/project-tree.h" #include "tla/libarch/pristines.h" #include "tla/libarch/invent.h" #include "tla/libarch/inode-sig.h" #include "tla/libarch/chatter.h" #include "tla/libarch/build-revision.h" /* return non-0 if it came from a library. */ int arch_build_revision (int chatter_fd, const t_uchar * dest_dir, struct arch_archive * arch, const t_uchar * archive, const t_uchar * revision, const t_uchar * cache_dir) { struct arch_archive * my_arch = 0; t_uchar * library_rev_dir = 0; int is_built = 0; int from_library = 0; library_rev_dir = arch_library_find (rel_table_nil, archive, revision, 1); /**************************************************************** * Take it from a revision library, if we can. */ if (!is_built && library_rev_dir) { rel_table index_by_name = rel_table_nil; const int full_meta = arch_tree_has_meta_flag (library_rev_dir); arch_chatter (chatter_fd, "* from revision library: %s/%s\n", archive, revision); index_by_name = arch_library_index (archive, revision); rel_sort_table_by_field (0, index_by_name, 0); copy_file_list (dest_dir, library_rev_dir, index_by_name, full_meta); rel_free_table (index_by_name); is_built = 1; from_library = 1; } /**************************************************************** * Next, try the pristine cache. */ if (!is_built && cache_dir) { t_uchar * pristine_copy = 0; pristine_copy = arch_find_pristine (0, cache_dir, archive, revision, arch_any_pristine, arch_cache_dir_pristine_search); if (pristine_copy) { rel_table file_list = rel_table_nil; const int full_meta = arch_tree_has_meta_flag (pristine_copy); arch_chatter (chatter_fd, "* from pristine cache: %s/%s\n", archive, revision); file_list = arch_source_inventory (pristine_copy, 1, 0, 0); copy_file_list (dest_dir, pristine_copy, file_list, full_meta); is_built = 1; rel_free_table (file_list); } lim_free (0, pristine_copy); } /**************************************************************** * Ok, have to hit up the archive. */ if (!is_built) { enum arch_revision_type type; int is_cached; if (!arch) { my_arch = arch_archive_connect (archive, 0); arch = my_arch; } arch_revision_type (&type, &is_cached, arch, revision); /******************************** * Archive Cached Revision? */ if (is_cached) { t_uchar * tmpdir = 0; rel_table files = rel_table_nil; int x; arch_chatter (chatter_fd, "* from archive cached: %s/%s\n", archive, revision); tmpdir = tmp_file_name (dest_dir, ",,cached-revision"); arch_get_cached_revision (arch, revision, tmpdir); files = directory_files (tmpdir); for (x = 0; x < rel_n_records (files); ++x) { if (str_cmp (".", rel_peek_str (files, x, 0)) && str_cmp ("..", rel_peek_str (files, x, 0))) { t_uchar * frm = 0; t_uchar * to = 0; frm = file_name_in_vicinity (0, tmpdir, rel_peek_str (files, x, 0)); to = file_name_in_vicinity (0, dest_dir, rel_peek_str (files, x, 0)); safe_rename (frm, to); lim_free (0, frm); lim_free (0, to); } } safe_rmdir (tmpdir); lim_free (0, tmpdir); rel_free_table (files); } /******************************** * Import Revision? */ else if (type == arch_import_revision) { t_uchar * tmpdir = 0; rel_table files = rel_table_nil; int x; arch_chatter (chatter_fd, "* from import revision: %s/%s\n", archive, revision); tmpdir = tmp_file_name (dest_dir, ",,import-revision"); arch_get_import_revision (arch, revision, tmpdir); files = directory_files (tmpdir); for (x = 0; x < rel_n_records (files); ++x) { if (str_cmp (".", rel_peek_str (files, x, 0)) && str_cmp ("..", rel_peek_str (files, x, 0))) { t_uchar * frm = 0; t_uchar * to = 0; frm = file_name_in_vicinity (0, tmpdir, rel_peek_str (files, x, 0)); to = file_name_in_vicinity (0, dest_dir, rel_peek_str (files, x, 0)); safe_rename (frm, to); lim_free (0, frm); lim_free (0, to); } } safe_rmdir (tmpdir); lim_free (0, tmpdir); rel_free_table (files); } else { /******************************** * Recurse and Build by Patching */ t_uchar * prev_revision = 0; t_uchar * prev_archive = 0; struct arch_archive * prev_arch; if (type == arch_simple_revision) { prev_revision = arch_previous_revision (arch, revision); invariant (!!prev_revision); prev_archive = str_save (0, archive); prev_arch = arch; } else { t_uchar * fq_prev_revision = 0; fq_prev_revision = arch_get_continuation (arch, revision); if (!arch_valid_package_name (fq_prev_revision, arch_req_archive, arch_req_patch_level, 0)) { safe_printfmt (2, "arch_build_revision: archive contains bogus CONTINUATION file\n archive: %s\n revision: %s\n", archive, revision); exit (2); } prev_archive = arch_parse_package_name (arch_ret_archive, 0, fq_prev_revision); prev_revision = arch_parse_package_name (arch_ret_non_archive, 0, fq_prev_revision); if (!str_cmp (archive, prev_revision)) { prev_arch = arch; } else { prev_arch = arch_archive_connect (prev_archive, 0); } lim_free (0, fq_prev_revision); } arch_build_revision (chatter_fd, dest_dir, prev_arch, prev_archive, prev_revision, cache_dir); arch_chatter (chatter_fd, "* patching for revision: %s/%s\n", archive, revision); { t_uchar * tmppatch = 0; struct arch_apply_changeset_report r; tmppatch = tmp_file_name (dest_dir, ",,next-patch"); arch_get_patch (arch, revision, tmppatch); mem_set0 ((t_uchar *)&r, sizeof (r)); arch_apply_changeset (&r, tmppatch, dest_dir, arch_unspecified_id_tagging, arch_inventory_unrecognized, 0, 0, 0, 0, 0, 0); if (arch_conflicts_occured (&r)) panic ("conflict applying patch in arch_build_revision"); arch_free_apply_changeset_report_data (&r); rmrf_file (tmppatch); lim_free (0, tmppatch); } if (arch != prev_arch) arch_archive_close (prev_arch); lim_free (0, prev_archive); lim_free (0, prev_revision); } } arch_snap_inode_sig (dest_dir, archive, revision); lim_free (0, library_rev_dir); arch_archive_close (my_arch); return from_library; } /* tag: Tom Lord Wed May 21 15:59:22 2003 (build-revision.c) */ tla-1.3.5+dfsg/src/tla/libarch/libraries.h0000644000175000017500000001113210457622000017027 0ustar useruser/* libraries.h: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__LIBRARIES_H #define INCLUDE__LIBARCH__LIBRARIES_H #include "hackerlab/machine/types.h" #include "tla/libawk/relational.h" /* automatically generated __STDC__ prototypes */ extern rel_table arch_library_archive_dirs (rel_table opt_lib_path, const t_uchar * archive, int for_add); extern rel_table arch_library_category_dirs (rel_table opt_lib_path, const t_uchar * archive, const t_uchar * category, int for_add); extern rel_table arch_library_branch_dirs (rel_table opt_lib_path, const t_uchar * archive, const t_uchar * branch, int for_add); extern rel_table arch_library_version_dirs (rel_table opt_lib_path, const t_uchar * archive, const t_uchar * version, int for_add); extern rel_table arch_library_revision_dirs (rel_table opt_lib_path, const t_uchar * archive, const t_uchar * revision, int for_add); extern t_uchar * arch_library_find (rel_table opt_lib_path, const t_uchar * archive, const t_uchar * revision, int check_inode_sigs); extern t_uchar * arch_library_find_file (const t_uchar * archive, const t_uchar * revision, const t_uchar * loc); extern t_uchar * arch_library_find_file_by_id (const t_uchar * archive, const t_uchar * revision, const t_uchar * id); extern rel_table arch_library_archives (void); extern rel_table arch_library_categories (const t_uchar * archive); extern rel_table arch_library_branches (const t_uchar * archive, const t_uchar * category); extern rel_table arch_library_versions (const t_uchar * archive, const t_uchar * branch); extern rel_table arch_library_revisions (const t_uchar * archive, const t_uchar * version, int full); extern t_uchar * arch_library_log (const t_uchar * archive, const t_uchar * revision); extern t_uchar * arch_library_index_file (const t_uchar * archive, const t_uchar * revision); extern rel_table arch_library_index (const t_uchar * archive, const t_uchar * revision); extern int arch_library_has_archive (const t_uchar * lib, const t_uchar * archive); extern int arch_library_has_category (const t_uchar * lib, const t_uchar * archive, const t_uchar * category); extern int arch_library_has_branch (const t_uchar * lib, const t_uchar * archive, const t_uchar * branch); extern int arch_library_has_version (const t_uchar * lib, const t_uchar * archive, const t_uchar * version); extern t_uchar * arch_library_revision_dir_in_lib (const t_uchar * lib, const t_uchar * archive, const t_uchar * revision); extern int arch_library_is_greedy (const t_uchar * lib); extern void arch_set_library_greediness (const t_uchar * lib, int setting); extern int arch_library_is_sparse (const t_uchar * lib); extern void arch_set_library_sparseness (const t_uchar * lib, int setting); extern void arch_verify_is_library (const t_uchar * lib); #endif /* INCLUDE__LIBARCH__LIBRARIES_H */ /* tag: Tom Lord Sat Jan 5 15:26:10 2002 (libraries.h) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-log-versions.h0000644000175000017500000000123610457622000020247 0ustar useruser/* cmd-log-versions.h: * **************************************************************** * Copyright (C) 2003 Tom Lord, Stig Brautaset * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__CMD_LOGS_H #define INCLUDE__LIBARCH__CMD_LOGS_H #include "hackerlab/machine/types.h" extern t_uchar arch_cmd_log_versions_help[]; /* automatically generated __STDC__ prototypes */ extern int arch_cmd_log_versions (t_uchar * program_name, int argc, char * argv[]); #endif /* INCLUDE__LIBARCH__CMD_LOGS_H */ /* tag: Stig Brautaset Sat Jun 7 15:36:50 BST 2003 (cmd-logs.h) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-library-config.c0000644000175000017500000001060310457622000020520 0ustar useruser/* cmd-library-config.c * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "config-options.h" #include "hackerlab/cmd/main.h" #include "tla/libarch/namespace.h" #include "tla/libarch/project-tree.h" #include "tla/libarch/my.h" #include "tla/libarch/libraries.h" #include "tla/libarch/cmd-library-config.h" static t_uchar * usage = "[options] library-dir"; static t_uchar * version_string = (cfg__std__package " from regexps.com\n" "\n" "Copyright 2003 Tom Lord\n" "\n" "This is free software; see the source for copying conditions.\n" "There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\n" "PARTICULAR PURPOSE.\n" "\n" "Report bugs to " cfg__tla_bug_mail ".\n" "\n" cfg__std__release_id_string "\n"); #define OPTS(OP) \ OP (opt_help_msg, "h", "help", 0, \ "Display a help message and exit.") \ OP (opt_long_help, "H", 0, 0, \ "Display a verbose help message and exit.") \ OP (opt_version, "V", "version", 0, \ "Display a release identifier string\n" \ "and exit.") \ OP (opt_greedy, 0, "greedy", 0, \ "make the library greedy") \ OP (opt_non_greedy, 0, "non-greedy", 0, \ "make the library not greedy") \ OP (opt_sparse, 0, "sparse", 0, \ "make the library sparse") \ OP (opt_non_sparse, 0, "non-sparse", 0, \ "make the library not sparse") t_uchar arch_cmd_library_config_help[] = ("configure parameters of a revision library\n" "Set/show various parameters for a revision library.\n"); enum options { OPTS (OPT_ENUM) }; static struct opt_desc opts[] = { OPTS (OPT_DESC) {-1, 0, 0, 0, 0} }; int arch_cmd_library_config (t_uchar * program_name, int argc, char * argv[]) { int o; struct opt_parsed * option; int make_greedy = 0; int make_non_greedy = 0; int make_sparse = 0; int make_non_sparse = 0; safe_buffer_fd (1, 0, O_WRONLY, 0); option = 0; while (1) { o = opt_standard (lim_use_must_malloc, &option, opts, &argc, argv, program_name, usage, version_string, arch_cmd_library_config_help, opt_help_msg, opt_long_help, opt_version); if (o == opt_none) break; switch (o) { default: safe_printfmt (2, "unhandled option `%s'\n", option->opt_string); panic ("internal error parsing arguments"); usage_error: opt_usage (2, argv[0], program_name, usage, 1); exit (1); /* bogus_arg: */ safe_printfmt (2, "ill-formed argument for `%s' (`%s')\n", option->opt_string, option->arg_string); goto usage_error; case opt_greedy: { make_greedy = 1; make_non_greedy = 0; break; } case opt_non_greedy: { make_non_greedy = 1; make_greedy = 0; break; } case opt_sparse: { make_sparse = 1; make_non_sparse = 0; break; } case opt_non_sparse: { make_non_sparse = 1; make_sparse = 0; break; } } } if (argc != 2) goto usage_error; { t_uchar * lib = argv[1]; arch_verify_is_library (lib); if (make_greedy) arch_set_library_greediness (lib, 1); if (make_non_greedy) arch_set_library_greediness (lib, 0); if (make_sparse) arch_set_library_sparseness (lib, 1); if (make_non_sparse) arch_set_library_sparseness (lib, 0); safe_printfmt (1, "* library %s\n", lib); if (arch_library_is_greedy (lib)) safe_printfmt (1, "greedy? yes\n"); else safe_printfmt (1, "greedy? no\n"); if (arch_library_is_sparse (lib)) safe_printfmt (1, "sparse? yes\n"); else safe_printfmt (1, "sparse? no\n"); } return 0; } /* tag: Tom Lord Fri Dec 5 16:35:15 2003 (cmd-library-config.c) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-my-id.c0000644000175000017500000001251110457622000016630 0ustar useruser/* cmd-my-id.c * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "config-options.h" #include "hackerlab/cmd/main.h" #include "tla/libfsutils/ensure-dir.h" #include "tla/libarch/my.h" #include "tla/libarch/namespace.h" #include "tla/libarch/cmd-my-id.h" static t_uchar * usage = "[options] [id]"; static t_uchar * version_string = (cfg__std__package " from regexps.com\n" "\n" "Copyright 2003 Tom Lord\n" "\n" "This is free software; see the source for copying conditions.\n" "There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\n" "PARTICULAR PURPOSE.\n" "\n" "Report bugs to " cfg__tla_bug_mail ".\n" "\n" cfg__std__release_id_string "\n"); #define OPTS(OP) \ OP (opt_help_msg, "h", "help", 0, \ "Display a help message and exit.") \ OP (opt_long_help, "H", 0, 0, \ "Display a verbose help message and exit.") \ OP (opt_version, "V", "version", 0, \ "Display a release identifier string\n" \ "and exit.") \ OP (opt_errname, "e", "errname", 1, \ "specify program name for errors") \ OP (opt_uid, "u", "uid", 0, \ "print only the UID portion of the ID") t_uchar arch_cmd_my_id_help[] = ("print or change your id\n" "With no argument print your arch id.\n" "\n" "With an argument, record ID-STRING as your id\n" "in ~/.arch-params/=id\n" "\n" "Your id is recorded in various archives and log messages\n" "as you use arch. It must consist entirely of printable\n" "characters and fit on one line. By convention, it should\n" "have the form of an email address, as in this example:\n" "\n" " Jane Hacker \n" "\n" "The portion of an id string between < and > is called your\n" "uid. arch sometimes uses your uid as a fragment when generating\n" "unique file names.\n" "\n" "The option -u (--uid) causes only the uid part of your id string\n" "to be printed.\n"); enum options { OPTS (OPT_ENUM) }; static struct opt_desc opts[] = { OPTS (OPT_DESC) {-1, 0, 0, 0, 0} }; enum operation { op_print, op_set, }; int arch_cmd_my_id (t_uchar * program_name, int argc, char * argv[]) { int o; struct opt_parsed * option; char * errname; enum operation op; int uid; t_uchar * proposed_id; errname = argv[0]; uid = 0; safe_buffer_fd (1, 0, O_WRONLY, 0); option = 0; while (1) { o = opt_standard (lim_use_must_malloc, &option, opts, &argc, argv, program_name, usage, version_string, arch_cmd_my_id_help, opt_help_msg, opt_long_help, opt_version); if (o == opt_none) break; switch (o) { default: safe_printfmt (2, "unhandled option `%s'\n", option->opt_string); panic ("internal error parsing arguments"); usage_error: opt_usage (2, argv[0], program_name, usage, 1); exit (1); /* bogus_arg: */ safe_printfmt (2, "ill-formed argument for `%s' (`%s')\n", option->opt_string, option->arg_string); goto usage_error; case opt_errname: { if (!option->arg_string[0]) errname = 0; else errname = str_save (0, option->arg_string); break; } case opt_uid: { uid = 1; break; } } } if (argc > 2) goto usage_error; if (argc == 2) { op = op_set; proposed_id = argv[1]; } else { op = op_print; proposed_id = 0; } switch (op) { case op_set: { if (!arch_valid_id (proposed_id)) { safe_printfmt (2, "%s: invalid id (%s)\n", errname, proposed_id); exit (1); } arch_set_my_id (proposed_id); break; } case op_print: { t_uchar * raw_id; raw_id = arch_my_id (); invariant (arch_valid_id (raw_id)); if (!uid) safe_printfmt (1, "%s\n", raw_id); else { t_uchar * start; t_uchar * end; start = str_chr_index (raw_id, '<') + 1; end = str_chr_index (start, '>'); safe_printfmt (1, "%.*s\n", (int)(end - start), start); } break; } } return 0; } /* tag: Tom Lord Mon May 12 15:14:03 2003 (my-id.c) */ tla-1.3.5+dfsg/src/tla/libarch/pfs-signatures.h0000644000175000017500000000415110457622000020030 0ustar useruser/* pfs-signatures.h: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__PFS_SIGNATURES_H #define INCLUDE__LIBARCH__PFS_SIGNATURES_H #include "tla/libarch/archive-pfs.h" /* automatically generated __STDC__ prototypes */ extern int arch_pfs_has_signing_rule (t_uchar * archive); extern int arch_pfs_sign_for_archive (const t_uchar * archive, const t_uchar * official_archive, const t_uchar * revision, const t_uchar * sigfile, int in_fd, int out_fd); extern int arch_pfs_check_signature_for_archive (const t_uchar * archive, const t_uchar * signed_message); extern int arch_pfs_ensure_checksum_data (struct arch_pfs_archive * arch, const t_uchar * revision); extern int arch_pfs_checksum_anticipates_file (const t_uchar * archive, const t_uchar * revision, const t_uchar * file); extern int arch_pfs_checksum_governs (const t_uchar * archive, const t_uchar * revision); extern int arch_pfs_checksum_governs_strictly (struct arch_pfs_archive * arch); extern t_uchar * arch_pfs_checked_file_contents (struct arch_pfs_archive * arch, const t_uchar * revision, const t_uchar * path); extern void arch_pfs_checked_get_file (struct arch_pfs_archive * arch, const t_uchar * revision, int out_fd, const t_uchar * path); #endif /* INCLUDE__LIBARCH__PFS_SIGNATURES_H */ /* tag: Tom Lord Wed Dec 24 21:07:03 2003 (pfs-signatures.h) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-grab.c0000644000175000017500000002643010457622000016531 0ustar useruser/* cmd-grab.c * **************************************************************** * Copyright (C) 2003 Tom Lord, Mark Thomas * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "config-options.h" #include "hackerlab/bugs/panic.h" #include "hackerlab/char/str.h" #include "hackerlab/cmd/main.h" #include "hackerlab/fs/file-names.h" #include "hackerlab/fs/cwd.h" #include "hackerlab/vu/safe.h" #include "tla/libarch/archive.h" #include "tla/libarch/namespace.h" #include "tla/libarch/build-revision.h" #include "tla/libarch/pfs-dav.h" #include "tla/libfsutils/file-contents.h" #include "tla/libfsutils/rmrf.h" #include "tla/libfsutils/tmp-files.h" #include "tla/libarch/archives.h" #include "tla/libarch/cmd-grab.h" #include "tla/libarch/configs.h" #include "tla/libarch/cmd.h" #include "tla/libarch/cmd-build-config.h" #include "tla/libarch/project-tree.h" /* __STDC__ prototypes for static functions */ static void arch_grab (int chatter_fd, t_uchar *location); t_uchar * find_latest_revision (t_uchar *archive_name, t_uchar *revision); static t_uchar * usage = "[options] location"; static t_uchar * version_string = (cfg__std__package " from regexps.com\n" "\n" "Copyright 2003 Tom Lord\n" "\n" "This is free software; see the source for copying conditions.\n" "There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\n" "PARTICULAR PURPOSE.\n" "\n" "Report bugs to " cfg__tla_bug_mail ".\n" "\n" cfg__std__release_id_string "\n"); #define OPTS(OP) \ OP (opt_help_msg, "h", "help", 0, \ "Display a help message and exit.") \ OP (opt_long_help, "H", 0, 0, \ "Display a verbose help message and exit.") \ OP (opt_version, "V", "version", 0, \ "Display a release identifier string\n" \ "and exit.") t_uchar arch_cmd_grab_help[] = ("grab a published revision\n" "Grabs a published revision from LOCATION.\n"); enum options { OPTS (OPT_ENUM) }; static struct opt_desc opts[] = { OPTS (OPT_DESC) {-1, 0, 0, 0, 0} }; int arch_cmd_grab (t_uchar * program_name, int argc, char * argv[]) { int o; struct opt_parsed * option; t_uchar * errname; t_uchar * location; errname = "grab"; safe_buffer_fd (1, 0, O_WRONLY, 0); option = 0; while (1) { o = opt_standard (lim_use_must_malloc, &option, opts, &argc, argv, program_name, usage, version_string, arch_cmd_grab_help, opt_help_msg, opt_long_help, opt_version); if (o == opt_none) break; switch (o) { default: safe_printfmt (2, "unhandled option `%s'\n", option->opt_string); panic ("internal error parsing arguments"); usage_error: opt_usage (2, argv[0], program_name, usage, 1); exit (1); /* bogus_arg: */ safe_printfmt (2, "ill-formed argument for `%s' (`%s')\n", option->opt_string, option->arg_string); goto usage_error; } } if (argc != 2) goto usage_error; location = str_save (0, argv[1]); arch_grab (1, location); lim_free (0, location); return 0; } void arch_grab (int chatter_fd, t_uchar * location) { t_uchar * publication = NULL; t_uchar * archive_name = NULL; t_uchar * archive_location = NULL; t_uchar * target_revision = NULL; t_uchar * target_directory = NULL; t_uchar * target_config = NULL; t_uchar * current_directory = NULL; t_uchar * target_full_directory = NULL; t_uchar * tmp_tail; t_uchar * tmp_directory = NULL; t_uchar * line = NULL; t_uchar * colon = NULL; t_uchar * eol = NULL; t_uchar * name = NULL; t_uchar * value = NULL; t_uchar * final_revision; t_uchar * uri = NULL; t_uchar * path = NULL; struct arch_pfs_session * session; if (str_chr_index (location, ':')) { /************************************************************ * grab from http location */ path = location + 7; path = str_chr_index(path, '/'); if (path) { uri = str_save_n (0, location, path - location); path = str_save (0, path); } else { path = str_save (0, "/"); uri = str_save (0, location); } session = arch_pfs_connect ( uri); publication = arch_pfs_file_contents(session, path, 0); } else { /************************************************************ * try local file system */ publication = file_contents (location); } if (publication == NULL) { safe_printfmt (2, "could not obtain publication data from %s.\n", location); return; } /**************************************************************** * parse the publication */ line = publication; while (*line) { while (*line == '\n') ++line; /************************************************************ * split the line up */ colon = str_chr_index (line, ':'); eol = str_chr_index (line, '\n'); if (!eol) eol = line + str_length (line); if (!colon || colon > eol) { line = eol; continue; } name = str_save_trimming_n (0, line, colon - line); value = str_save_trimming_n (0, colon + 1, eol - colon - 1); /************************************************************ * save any useful values */ if (str_cmp (name, "Archive-Name") == 0 && !archive_name) archive_name = value; else if (str_cmp (name, "Archive-Location") == 0 && !archive_location) archive_location = value; else if (str_cmp (name, "Target-Revision") == 0 && !target_revision) target_revision = value; else if (str_cmp (name, "Target-Directory") == 0 && !target_directory) target_directory = value; else if (str_cmp (name, "Target-Config") == 0 && !target_config) target_config = value; else lim_free (0, value); lim_free (0, name); line = eol; } lim_free (0, publication); if (!archive_name || !archive_location || !target_revision) { safe_printfmt (2, "Invalid publication file at %s.\n", location); return; } else { struct arch_archive *archive; if (target_directory) { /******************************************************** * perform sanity check on target dir * we don't want to allow any old target dir (to avoid * "/etc" or "../../../etc" exploits), so we only take * the tail of the specified target directory. */ t_uchar * target_directory_file = file_name_from_directory (0, target_directory); t_uchar * target_directory_tail = file_name_tail (0, target_directory_file); lim_free (0, target_directory); lim_free (0, target_directory_file); if (str_length (target_directory_tail) == 0) { lim_free (0, target_directory_tail); target_directory_tail = NULL; } target_directory = target_directory_tail; } if (target_directory == NULL) { target_directory = str_save (0, target_revision); } current_directory = safe_current_working_directory (); tmp_tail = str_alloc_cat_many (0, ",,grab.", target_directory, str_end); target_full_directory = file_name_in_vicinity (0, current_directory, target_directory); tmp_directory = tmp_file_name (current_directory, tmp_tail); rmrf_file (tmp_directory); safe_mkdir (tmp_directory, 0777); safe_printfmt(1, "Grabbing: %s/%s\n", archive_name, archive_location); safe_printfmt(1, "Source: %s, Dest: %s\n", archive_location, target_directory); if (target_config) safe_printfmt(1, "Config: %s\n", target_config); /******************** * Time to grab the archive */ arch_set_archive_location(archive_name, archive_location, 0, ARCH_REG_FAIL_QUIET); final_revision = find_latest_revision (archive_name, target_revision); archive = arch_archive_connect (archive_name, 0); arch_build_revision (chatter_fd, tmp_directory, archive, archive_name, final_revision, current_directory); arch_archive_close (archive); safe_rename (tmp_directory, target_full_directory); /**************** * Time to config, if we should */ if (target_config) { t_uchar *tree_root; t_uchar *tree_version; t_uchar *def_archive = NULL; struct arch_build_config_params config_params = {0, }; if (!arch_valid_config_name (target_config)) { safe_printfmt(2, "grab: given invalid config name '%s'\n", target_config); exit(1); } tree_root = arch_tree_root (0, target_full_directory, 0); if (! tree_root) panic("grab: Not in a valid tree root"); tree_version = arch_tree_version (tree_root); if (tree_version) { def_archive = arch_parse_package_name (arch_ret_archive, 0, tree_version); lim_free(0, tree_version); } arch_build_config (tree_root, target_config, &config_params , def_archive); lim_free (0, tree_root); lim_free (0, def_archive); } } lim_free (0, archive_name); lim_free (0, archive_location); lim_free (0, target_revision); lim_free (0, target_directory); lim_free (0, current_directory); lim_free (0, target_full_directory); lim_free (0, tmp_directory); lim_free (0, tmp_tail); } t_uchar * find_latest_revision (t_uchar *archive_name, t_uchar *revision) { t_uchar *oldrevision; t_uchar *workrevision; struct arch_archive *archive; if (! arch_valid_package_name (revision, arch_no_archive, arch_req_package, 1)) { panic("Invalid Package"); } archive = arch_archive_connect(archive_name, 0); workrevision = str_save(0, revision); if (! arch_valid_package_name (workrevision, arch_no_archive, arch_req_version, 1)) { rel_table versions = rel_table_nil; versions = arch_archive_versions (archive, revision); if (!rel_n_records (versions)) { panic("No versions for that package exist in the archive"); } arch_sort_table_by_name_field (1, versions, 0); oldrevision = workrevision; workrevision = str_save(0, rel_peek_str (versions, 0, 0)); lim_free(0, oldrevision); rel_free_table (versions); } if (! arch_valid_package_name (workrevision, arch_no_archive, arch_req_patch_level, 1)) { oldrevision = workrevision; workrevision = str_alloc_cat_many (0, workrevision, "--", arch_archive_latest_revision(archive, workrevision, 0), str_end); lim_free(0, oldrevision); } return workrevision; } /* tag: Mark Thomas Tue Jul 29 22:32:52 BST 2003 (cmd-grab.c) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-join-branch.h0000644000175000017500000000123510457622000020011 0ustar useruser/* cmd-join-branch.h: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__CMD_JOIN_BRANCH_H #define INCLUDE__LIBARCH__CMD_JOIN_BRANCH_H #include "hackerlab/machine/types.h" extern t_uchar arch_cmd_join_branch_help[]; /* automatically generated __STDC__ prototypes */ extern int arch_cmd_join_branch (t_uchar * program_name, int argc, char * argv[]); #endif /* INCLUDE__LIBARCH__CMD_JOIN_BRANCH_H */ /* tag: Tom Lord Sat Jan 5 15:26:10 2002 (cmd-join-branch.h) */ tla-1.3.5+dfsg/src/tla/libarch/commit.h0000644000175000017500000000145210457622000016347 0ustar useruser/* commit.h: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__COMMIT_H #define INCLUDE__LIBARCH__COMMIT_H #include "tla/libarch/archive.h" /* automatically generated __STDC__ prototypes */ extern void arch_commit (int chatter_fd, struct arch_archive * arch, t_uchar * revision, t_uchar * tree_root, t_uchar * raw_log, rel_table file_list, int escape_classes); #endif /* INCLUDE__LIBARCH__COMMIT_H */ /* tag: Tom Lord Sat Jan 5 15:26:10 2002 (commit.h) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-star-merge.h0000644000175000017500000000122610457622000017665 0ustar useruser/* cmd-star-merge.h: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__CMD_STAR_MERGE_H #define INCLUDE__LIBARCH__CMD_STAR_MERGE_H #include "hackerlab/machine/types.h" extern t_uchar arch_cmd_star_merge_help[]; /* automatically generated __STDC__ prototypes */ extern int arch_cmd_star_merge (t_uchar * program_name, int argc, char * argv[]); #endif /* INCLUDE__LIBARCH__CMD_STAR_MERGE_H */ /* tag: Tom Lord Sat Jan 5 15:26:10 2002 (cmd-star-merge.h) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-get.c0000644000175000017500000003232110457622000016371 0ustar useruser/* cmd-get.c: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "config-options.h" #include "hackerlab/cmd/main.h" #include "hackerlab/fs/file-names.h" #include "hackerlab/fs/cwd.h" #include "tla/libfsutils/tmp-files.h" #include "tla/libfsutils/rmrf.h" #include "tla/libfsutils/link-tree.h" #include "tla/libarch/namespace.h" #include "tla/libarch/project-tree.h" #include "tla/libarch/my.h" #include "tla/libarch/archive.h" #include "tla/libarch/pristines.h" #include "tla/libarch/build-revision.h" #include "tla/libarch/libraries.h" #include "tla/libarch/local-cache.h" #include "tla/libarch/library-txn.h" #include "tla/libarch/cmd.h" #include "tla/libarch/cmd-library-add.h" #include "tla/libarch/cmdutils.h" #include "tla/libarch/inode-sig.h" static t_uchar * usage = "[options] revision [dir]"; static t_uchar * version_string = (cfg__std__package " from regexps.com\n" "\n" "Copyright 2003 Tom Lord\n" "\n" "This is free software; see the source for copying conditions.\n" "There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\n" "PARTICULAR PURPOSE.\n" "\n" "Report bugs to " cfg__tla_bug_mail ".\n" "\n" cfg__std__release_id_string "\n"); #define OPTS(OP) \ OP (opt_help_msg, "h", "help", 0, \ "Display a help message and exit.") \ OP (opt_long_help, "H", 0, 0, \ "Display a verbose help message and exit.") \ OP (opt_version, "V", "version", 0, \ "Display a release identifier string\n" \ "and exit.") \ OP (opt_archive, "A", "archive", 1, \ "Override `my-default-archive'") \ OP (opt_cache, 0, "cache DIR", 1, \ "cache root for trees with pristines") \ OP (opt_no_pristine, 0, "no-pristine", 0, \ "don't save a pristine copy") \ OP (opt_hardlinks, 0, "link", 0, \ "hardlink files to revision library instead of copying") \ OP (opt_library, 0, "library", 0, \ "ensure the revision is in a revision library") \ OP (opt_sparse, 0, "sparse", 0, \ "add library entries sparsely (--link, --library)") \ OP (opt_non_sparse, 0, "non-sparse", 0, \ "add library entries densely (--link, --library)") \ OP (opt_silent, "s", "silent", 0, \ "no output") \ OP (opt_no_greedy_add, 0, "no-greedy-add", 0, \ "do not allow greedy libraries to add revisions")\ OP (opt_unescaped, 0, "unescaped", 0, \ "show filenames in unescaped form") t_uchar arch_cmd_get_help[] = ("construct a project tree for a revision\n" "Extract REVISION from an archive, creating the new project tree\n" "DIR. If DIR is not specified, store the working copy in a subdirectory\n" "of the current directory, giving it the name of the revision.\n" "CAUTION: when using the links option be sure to use copy-on-write on your\n" "editor or the revision library will be corrupted.\n" "Either way, the project tree must not already exist.\n"); enum options { OPTS (OPT_ENUM) }; static struct opt_desc opts[] = { OPTS (OPT_DESC) {-1, 0, 0, 0, 0} }; int arch_cmd_get (t_uchar * program_name, int argc, char * argv[]) { int o; struct opt_parsed * option; t_uchar * default_archive = 0; t_uchar * cache_dir_spec = 0; t_uchar * selected_library = 0; int no_pristine = 0; int hardlinks = 0; int sparse = -1; int library = 0; int silent = 0; int permit_greed = 1; int escape_classes = arch_escape_classes; safe_buffer_fd (1, 0, O_WRONLY, 0); option = 0; while (1) { o = opt_standard (lim_use_must_malloc, &option, opts, &argc, argv, program_name, usage, version_string, arch_cmd_get_help, opt_help_msg, opt_long_help, opt_version); if (o == opt_none) break; switch (o) { default: safe_printfmt (2, "unhandled option `%s'\n", option->opt_string); panic ("internal error parsing arguments"); usage_error: opt_usage (2, argv[0], program_name, usage, 1); exit (1); /* bogus_arg: */ safe_printfmt (2, "ill-formed argument for `%s' (`%s')\n", option->opt_string, option->arg_string); goto usage_error; case opt_archive: { lim_free (0, default_archive); default_archive = str_save (0, option->arg_string); break; } case opt_cache: { lim_free (0, cache_dir_spec); cache_dir_spec = str_save (0, option->arg_string); break; } case opt_no_pristine: { no_pristine = 1; break; } case opt_hardlinks: { hardlinks = 1; no_pristine = 1; break; } case opt_library: { no_pristine = 1; library = 1; break; } case opt_sparse: { sparse = 1; break; } case opt_non_sparse: { sparse = 0; break; } case opt_silent: { silent = 1; break; } case opt_unescaped: { escape_classes = 0; break; } case opt_no_greedy_add: { permit_greed = 0; break; } } } if ((argc < 2) || (argc > 3)) goto usage_error; default_archive = arch_my_default_archive (default_archive); { int here_fd; int mirror_check = 0; t_uchar * revision_spec = 0; t_uchar * archive = 0; t_uchar * version = 0; t_uchar * revision = 0; t_uchar * output_dir_spec = 0; t_uchar * output_dir_dir_spec = 0; t_uchar * output_dir_tail = 0; t_uchar * tmp_tail = 0; t_uchar * output_dir_dir = 0; t_uchar * output_dir = 0; t_uchar * cache_dir = 0; t_uchar * tmp_dir = 0; t_uchar *opt_same_dev_path = 0; struct arch_archive * arch = 0; here_fd = safe_open (".", O_RDONLY, 0); if (library) { rel_table library_path = rel_table_nil; library_path = arch_my_library_path (arch_library_path_search_order); if (!rel_n_records (library_path)) { safe_printfmt (2, "%s: no default library (try tla my-revision-library -H)\n", argv[0]); exit (2); } rel_free_table (library_path); } revision_spec = str_save (0, argv[1]); if (!arch_valid_package_name (revision_spec, arch_maybe_archive, arch_req_package, 1)) { safe_printfmt (2, "%s: invalid revision spec (%s)\n", argv[0], revision_spec); exit (2); } archive = arch_parse_package_name (arch_ret_archive, default_archive, revision_spec); arch = arch_archive_connect (archive, 0); mirror_check = arch_check_arch (arch); if (arch_valid_package_name (revision_spec, arch_maybe_archive, arch_req_package, 0)) { t_uchar * package = 0; rel_table versions = rel_table_nil; package = arch_parse_package_name (arch_ret_package, 0, revision_spec); arch_check_for (arch, arch_req_package, package); versions = arch_archive_versions (arch, package); arch_sort_table_by_name_field (1, versions, 0); if (!rel_n_records (versions)) { safe_printfmt (2, "%s: package has no versions (%s)\n", argv[0], revision_spec); exit (1); } lim_free (0, revision_spec); revision_spec = str_save (0, rel_peek_str (versions, 0, 0)); lim_free (0, package); rel_free_table (versions); } if (arch_valid_package_name (revision_spec, arch_maybe_archive, arch_req_version, 0)) { rel_table revisions = rel_table_nil; arch_check_for (arch, arch_req_version, revision_spec); version = arch_parse_package_name (arch_ret_package_version, 0, revision_spec); revisions = arch_archive_revisions (arch, version, 1); arch_sort_table_by_name_field (1, revisions, 0); if (!rel_n_records (revisions)) { safe_printfmt (2, "%s: no revisions in version (%s/%s)\n", argv[0], archive, revision_spec); exit (2); } revision = arch_parse_package_name (arch_ret_non_archive, 0, rel_peek_str (revisions, 0, 0)); rel_free_table (revisions); } else { version = arch_parse_package_name (arch_ret_package_version, 0, revision_spec); revision = arch_parse_package_name (arch_ret_non_archive, 0, revision_spec); arch_check_for (arch, arch_req_patch_level, revision); } if (argc == 3) output_dir_spec = file_name_from_directory (0, argv[2]); else output_dir_spec = file_name_from_directory (0, revision); output_dir_dir_spec = file_name_directory_file (0, output_dir_spec); if (!output_dir_dir_spec) output_dir_dir_spec = str_save (0, "."); output_dir_tail = file_name_tail (0, output_dir_spec); tmp_tail = str_alloc_cat_many (0, ",,get.", output_dir_tail, str_end); if (!cache_dir_spec) cache_dir_spec = str_save (0, output_dir_dir_spec); safe_fchdir (here_fd); safe_chdir (output_dir_dir_spec); output_dir_dir = safe_current_working_directory (); opt_same_dev_path = (!!hardlinks) ? output_dir_dir : 0; safe_fchdir (here_fd); safe_chdir (cache_dir_spec); cache_dir = safe_current_working_directory (); output_dir = file_name_in_vicinity (0, output_dir_dir, output_dir_tail); if (!safe_access (output_dir, F_OK)) { safe_printfmt (2, "%s: output directory already exists (%s)\n", argv[0], output_dir); exit (1); } tmp_dir = tmp_file_name (output_dir_dir, tmp_tail); rmrf_file (tmp_dir); if (!library && permit_greed) { /* Prefer a library entry over making a pristine tree, if there's * a greedy library. */ selected_library = arch_library_greedy_add_choice (archive, revision, opt_same_dev_path, 1); if (selected_library) library = 1; } /* If we can't find a greedy for linking to, we add to a non-greedy library. * Previous behavior was to *always* auto-add to a library, greedy or not */ if (hardlinks) library=1; /* ensure revision is in the library if needed */ if (library) { safe_printfmt (1, "* ensuring library has %s/%s\n", archive, revision); safe_flush (1); arch_library_add (1, 1, arch, revision, selected_library, opt_same_dev_path, sparse, escape_classes); } /* make hardlinks or build-revision */ if (hardlinks) { t_uchar * revision_dir = 0; rel_table index = rel_table_nil; int full_meta; index = arch_library_index (archive, revision); rel_sort_table_by_field (0, index, 0); safe_printfmt (1, "* hard linking to library\n"); safe_flush (1); revision_dir = arch_library_find (rel_table_nil, archive, revision, 1); invariant (0 != revision_dir); full_meta = arch_tree_has_meta_flag (revision_dir); build_partial_link_tree (arch_library_find (rel_table_nil, archive, revision, 1), tmp_dir, index, full_meta); arch_snap_inode_sig (tmp_dir, archive, revision); lim_free (0, revision_dir); } else { safe_mkdir (tmp_dir, 0777); no_pristine = arch_build_revision ((silent ? -1 : 1), tmp_dir, arch, archive, revision, cache_dir); } // if we manage a mirror, we have to direct the tree to the original archive, not the mirror if( mirror_check ) { archive = str_save(0,arch->official_name); safe_flush (1); } arch_archive_close (arch); if (!no_pristine) { if (!silent) { safe_printfmt (1, "* making pristine copy\n"); safe_flush (1); } arch_make_pristine (tmp_dir, archive, revision); } { t_uchar * fqversion = 0; fqversion = arch_fully_qualify (archive, version); arch_set_tree_version (tmp_dir, archive, version); if (!silent) { safe_printfmt (1, "* tree version set %s\n", fqversion); safe_flush (1); } lim_free (0, fqversion); } safe_fchdir (here_fd); safe_close (here_fd); safe_rename (tmp_dir, output_dir); lim_free (0, revision_spec); lim_free (0, archive); lim_free (0, version); lim_free (0, revision); lim_free (0, output_dir_spec); lim_free (0, output_dir_dir_spec); lim_free (0, output_dir_tail); lim_free (0, tmp_tail); lim_free (0, output_dir_dir); lim_free (0, output_dir); lim_free (0, tmp_dir); } lim_free (0, default_archive); lim_free (0, selected_library); lim_free (0, cache_dir_spec); return 0; } /* tag: Tom Lord Mon Jun 2 16:50:36 2003 (cmd-getrev.c) */ tla-1.3.5+dfsg/src/tla/libarch/pfs-dav.c0000644000175000017500000005310110457622000016410 0ustar useruser/* pfs-dav.c: * **************************************************************** * Copyright (C) 2002, 2003 Scott Parish * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include #include "hackerlab/bugs/panic.h" #include "hackerlab/mem/alloc-limits.h" #include "hackerlab/mem/mem.h" #include "hackerlab/char/str.h" #include "hackerlab/fmt/cvt.h" #include "hackerlab/fs/file-names.h" #include "hackerlab/vu/safe.h" #include "tla/libfsutils/tmp-files.h" #include "tla/libfsutils/file-contents.h" #include "tla/libarch/archives.h" #include "tla/libarch/pfs-dav.h" #include "libneon/src/ne_session.h" #include "libneon/src/ne_basic.h" #include "libneon/src/ne_request.h" #include "libneon/src/ne_auth.h" #include "libneon/src/ne_props.h" #include "libneon/src/ne_uri.h" #include "libneon/src/ne_redirect.h" #include "libneon/src/ne_socket.h" #undef MIN #define MIN(A,B) ((A) < (B) ? (A) : (B)) #define LISTING_FILE ".listing" static const ne_propname ls_props[] = { { "DAV:", "getcontentlength" }, { "DAV:", "getlastmodified" }, { "DAV:", "resourcetype" }, { NULL } }; struct authinfo { char *username; char *password; }; struct ls_data { char *files; char *uri; }; struct dav_is_dir_ls_data { char *uri; int is_dir; }; struct arch_pfs_dav_session { struct arch_pfs_session pfs; char * cwd; char * dav_scheme; char * dav_hostname; int dav_port; ne_session * sess; ne_server_capabilities sess_opts; }; /* __STDC__ prototypes for static functions */ static t_uchar * pfs_file_contents (struct arch_pfs_session * p, const t_uchar * path, int soft_errors); static rel_table pfs_directory_files (struct arch_pfs_session * p, const t_uchar * path, int soft_errors); static int pfs_file_exists (struct arch_pfs_session * p, const t_uchar * path); static int pfs_get_file (struct arch_pfs_session * p, int out_fd, const t_uchar * path, int soft_errors); static int pfs_put_file (struct arch_pfs_session * p, const t_uchar * path, mode_t perms, int in_fd, int soft_errors); static int pfs_mkdir (struct arch_pfs_session * p, const t_uchar * path, mode_t mode, int soft_errors); static int pfs_rename (struct arch_pfs_session * p, t_uchar ** errstr, const t_uchar * from, const t_uchar * to, int soft_errors); static int pfs_is_dir (struct arch_pfs_session * p, const t_uchar * path); static int dav_is_dir (struct arch_pfs_dav_session * pfs, const char * dir); static int pfs_rmdir (struct arch_pfs_session * p, const t_uchar * path, int soft_errors); static int pfs_rm (struct arch_pfs_session * p, const t_uchar * path, int soft_errors); static void dav_is_dir_results (void * userdata, const char * uri, const ne_prop_result_set * set); static int dav_client_cwd (struct arch_pfs_dav_session * pfs, const t_uchar * path); static int dav_client_auth (void * userdata, const char * realm, int attempt, char * username, char * password); static t_uchar * abs_path (const t_uchar * cwd, const t_uchar * path); static t_uchar * dirfold (t_uchar *dir); static void results (void * userdata, const char * uri, const ne_prop_result_set * set); struct arch_pfs_vtable dav_pfs_fns = { pfs_file_exists, pfs_is_dir, pfs_file_contents, pfs_get_file, pfs_directory_files, pfs_put_file, pfs_mkdir, pfs_rename, pfs_rmdir, pfs_rm, }; int arch_pfs_dav_supported_protocol (const t_uchar * uri) { if (!str_cmp_prefix ("http:", uri) || !str_cmp_prefix ("https:", uri)) return 1; else return 0; } struct arch_pfs_session * arch_pfs_dav_connect (const t_uchar * uri) { int ign; struct arch_pfs_dav_session * answer = 0; t_uchar * host; t_uchar * user; t_uchar * passwd; t_uchar * hostname; t_uchar * portstr; t_uchar * root_path = 0; t_uchar * proxy; t_uchar * proxy_port; struct authinfo * auth = 0; int proxy_port_num; /* ne_sock_init() is idempotent, so just init always */ if (ne_sock_init ()) { panic ("arch_pfs_dav_connect: ne_sock_init() failed."); } answer = (struct arch_pfs_dav_session *)lim_malloc (0, sizeof (*answer)); mem_set0 ((t_uchar *)answer, sizeof (*answer)); answer->pfs.vtable = &dav_pfs_fns; if (!str_cmp_prefix ("http://", uri)) { answer->dav_scheme = str_save (0, "http"); host = str_save (0, uri + sizeof ("http://") - 1); } else if (!str_cmp_prefix ("https://", uri)) { answer->dav_scheme = str_save (0, "https"); host = str_save (0, uri + sizeof ("https://") - 1); } else panic ("bogus uri to arch_pfs_dav_connect"); root_path = str_chr_index (host, '/'); if (root_path) { t_uchar * pos; pos = root_path; root_path = str_save (0, root_path); *pos = 0; } hostname = str_chr_index (host, '@'); if (!hostname) { answer->dav_hostname = str_save (0, host); } else { user = host; auth = lim_malloc (0, sizeof (struct authinfo)); passwd = str_chr_index_n (user, hostname - user, ':'); if (passwd++) { auth->username = str_save_n (0, user, (passwd - 1) - user); auth->password = str_save_n (0, passwd, hostname - passwd); } else { auth->username = str_save_n (0, user, hostname - user); auth->password = str_save (0, ""); } answer->dav_hostname = str_save (0, hostname + 1); } portstr = str_chr_index (answer->dav_hostname, ':'); if (portstr) *(portstr++) = 0; answer->dav_port = ne_uri_defaultport (answer->dav_scheme); if (portstr && (0 > cvt_decimal_to_uint (&ign, &answer->dav_port, portstr, str_length (portstr)))) { safe_printfmt (2, "illegal port number in uri -- %s\n", uri); exit (2); } answer->sess = ne_session_create (answer->dav_scheme, answer->dav_hostname, answer->dav_port); if (!str_cmp ("https", answer->dav_scheme)) { ne_ssl_trust_default_ca (answer->sess); } if (auth) { ne_set_server_auth (answer->sess, dav_client_auth, auth); } ne_set_useragent (answer->sess, "arch-client/0.1"); /* * Retrieve the proxy. Do not alter the environment variable. * The proxy variable is formatted as * scheme://host:port/ * We only support http as the scheme. */ proxy = getenv ("http_proxy"); if (proxy) proxy = str_save (0, proxy); else { proxy = getenv ("HTTP_PROXY"); if (proxy) proxy = str_save (0, proxy); } if (proxy && !str_cmp_prefix ("http://", proxy)) { t_uchar * proxy_path = proxy + 7; proxy_port = str_chr_index (proxy_path, ':'); if (proxy_port) { unsigned proxy_port_len; *proxy_port++ = 0; proxy_port_len = str_length (proxy_port); /* The port may be followed by a trailing slash (according to rcollins, it _must_ be followed by a slash, strictly speaking, but this restriction is widely ignored both by software and by users, so it's not practical to enforce it, and there's no real gain from doing so). */ if (proxy_port_len > 0 && proxy_port[proxy_port_len - 1] == '/') proxy_port_len--; if (cvt_decimal_to_int (&ign, &proxy_port_num, proxy_port, proxy_port_len)) { safe_printfmt (2, "ill formated http proxy port number from $http_proxy\n"); exit (2); } ne_session_proxy (answer->sess, proxy_path, proxy_port_num); } if (proxy) { t_uchar * proxy_user; t_uchar * proxy_passwd; proxy_user = getenv("proxy_user"); proxy_passwd = getenv("proxy_passwd"); if ((proxy_passwd != NULL) && (proxy_user != NULL)) { struct authinfo * proxy_auth = 0; proxy_auth = lim_malloc (0, sizeof (struct authinfo)); if (proxy_auth) { proxy_auth->username = str_save(0, proxy_user); proxy_auth->password = str_save(0, proxy_passwd); ne_set_proxy_auth(answer->sess, dav_client_auth, proxy_auth); } } } } if (root_path) dav_client_cwd (answer, root_path); lim_free (0, host); lim_free (0, root_path); lim_free (0, proxy); return (struct arch_pfs_session *)answer; } static t_uchar * pfs_file_contents (struct arch_pfs_session * p, const t_uchar * path, int soft_errors) { struct arch_pfs_dav_session * pfs = (struct arch_pfs_dav_session *)p; t_uchar * tmp_path = 0; int fd; t_uchar * dav_path = 0; int ne_err; t_uchar * answer = 0; tmp_path = tmp_file_name ("/tmp", ",,pfs-dav-file-contents"); fd = safe_open (tmp_path, O_RDWR | O_CREAT | O_EXCL, 0000); safe_unlink (tmp_path); dav_path = abs_path (pfs->cwd, (char *)path); ne_err = ne_get (pfs->sess, dav_path, fd); if (ne_err) { if (!soft_errors) { safe_printfmt (2, "webdav error: %s\n", ne_get_error (pfs->sess)); exit (2); } } else { safe_lseek (fd, (off_t)0, SEEK_SET); answer = fd_contents (fd); } safe_close (fd); lim_free (0, dav_path); return answer; } static rel_table pfs_directory_files (struct arch_pfs_session * p, const t_uchar * path, int soft_errors) { struct arch_pfs_dav_session * pfs = (struct arch_pfs_dav_session *)p; int ne_err; t_uchar * dir = 0; t_uchar * file_string = 0; rel_table answer = rel_table_nil; if (pfs->sess_opts.dav_class1) { struct ls_data data; dir = abs_path (pfs->cwd, path); if (dir[str_length (dir) - 1] != '/') dir = str_realloc_cat(0, dir, "/"); data.files = str_save (0, "");; data.uri = dir; if ((ne_err = ne_simple_propfind (pfs->sess, dir, NE_DEPTH_ONE, ls_props, results, &data))) { if (!soft_errors) { safe_printfmt (2, "webdav error (directory_files): %s (%s)\n", dir, ne_get_error (pfs->sess)); exit (2); } } else { file_string = str_save (0, data.files); } lim_free (0, data.files); } else { dir = file_name_in_vicinity (0, path, LISTING_FILE); file_string = pfs_file_contents (p, dir, 1); } answer = rel_ws_split (file_string); lim_free (0, dir); lim_free (0, file_string); return answer; } static int pfs_file_exists (struct arch_pfs_session * p, const t_uchar * path) { t_uchar * path_dir = 0; t_uchar * path_tail = 0; rel_table files = rel_table_nil; int answer = 0; int x; /* There is probably a better way to do this in webdav. */ path_dir = file_name_directory_file (0, path); if (!path_dir) { path_dir = str_save (0, "."); } path_tail = file_name_tail (0, path); files = pfs_directory_files (p, path_dir, 1); for (x = 0; x < rel_n_records (files); ++x) { if (!str_cmp (path_tail, rel_peek_str (files, x, 0))) { answer = 1; break; } } lim_free (0, path_dir); lim_free (0, path_tail); rel_free_table (files); return answer; } static int pfs_get_file (struct arch_pfs_session * p, int out_fd, const t_uchar * path, int soft_errors) { struct arch_pfs_dav_session * pfs = (struct arch_pfs_dav_session *)p; t_uchar * dav_path = 0; int ne_err; int answer = 0; dav_path = abs_path (pfs->cwd, (char *)path); ne_err = ne_get (pfs->sess, dav_path, out_fd); if (ne_err) { if (!soft_errors) { safe_printfmt (2, "webdav error: %s\n", ne_get_error (pfs->sess)); exit (2); } else answer = -1; } lim_free (0, dav_path); return answer; } static int pfs_put_file (struct arch_pfs_session * p, const t_uchar * path, mode_t perms, int in_fd, int soft_errors) { struct arch_pfs_dav_session * pfs = (struct arch_pfs_dav_session *)p; int ne_err; t_uchar * file; int answer = 0; file = abs_path (pfs->cwd, path); ne_err = ne_put (pfs->sess, file, in_fd); if (ne_err) { if (!soft_errors) { safe_printfmt (2, "webdav error(put_file): writing to %s (%s)\n", file, ne_get_error (pfs->sess)); exit (2); } else { answer = -1; } } lim_free (0, file); return answer; } static int pfs_mkdir (struct arch_pfs_session * p, const t_uchar * path, mode_t mode, int soft_errors) { struct arch_pfs_dav_session * pfs = (struct arch_pfs_dav_session *)p; int ne_err; t_uchar * dir = 0; int answer = 0; dir = abs_path (pfs->cwd, path); if (dir[str_length (dir) - 1] != '/') dir = str_realloc_cat (0, dir, "/"); if ((ne_err = ne_mkcol (pfs->sess, dir))) { if (!soft_errors) { safe_printfmt (2, "webdav error (pfs_mkdir): %s (%s)\n", path, ne_get_error (pfs->sess)); exit (2); } else answer = -1; } lim_free (0, dir); return answer; } static int pfs_rename (struct arch_pfs_session * p, t_uchar ** errstr, const t_uchar * from, const t_uchar * to, int soft_errors) { struct arch_pfs_dav_session * pfs = (struct arch_pfs_dav_session *)p; int ne_err; int ret; t_uchar * from2; t_uchar * to2; int result = 0; from2 = abs_path (pfs->cwd, from); to2 = abs_path (pfs->cwd, to); ret = dav_is_dir (pfs, from2); if (ret == -1) { if (errstr) *errstr = str_save (0, "file does not exist for rename"); result = -1; } else { if (ret) { if (from2[str_length (from2) - 1] != '/') from2 = str_realloc_cat (0, from2, "/"); if (to2[str_length (to2) - 1] != '/') to2 = str_realloc_cat (0, to2, "/"); } if (0 < dav_is_dir (pfs, to2)) { char * b; char * file; b = file = str_save (0, from); filename: file = str_chr_rindex (file, '/'); if (!file) file = b; else if (!file[1]) { file[0] = 0; goto filename; } else file++; to2 = str_realloc_cat_many (0, to2, "/", file, str_end); lim_free (0, b); } if ((ne_err = ne_move (pfs->sess, 0, from2, to2))) { if (errstr) *errstr = str_save (0, ne_get_error (pfs->sess)); result = -1; } } lim_free (0, from2); lim_free (0, to2); return result; } static int pfs_is_dir (struct arch_pfs_session * p, const t_uchar * path) { struct arch_pfs_dav_session * pfs = (struct arch_pfs_dav_session *)p; t_uchar * abs = 0; int answer; abs = abs_path (pfs->cwd, path); answer = dav_is_dir (pfs, abs); lim_free (0, abs); return answer; } static int dav_is_dir (struct arch_pfs_dav_session * pfs, const char * dir) { char * filename; char * parent; struct dav_is_dir_ls_data data; int ne_err; int answer; parent = str_save (0, dir); filename = str_chr_rindex (parent, '/'); filename[1] = 0; /* `const' discarded with hopes that libneon isn't obnoxious */ data.uri = (char *)dir; data.is_dir = 0; if((ne_err = ne_simple_propfind (pfs->sess, parent, NE_DEPTH_ONE, ls_props, dav_is_dir_results, &data))) { answer = -1; } else { answer = data.is_dir; } lim_free (0, parent); return answer; } static int pfs_rmdir (struct arch_pfs_session * p, const t_uchar * path, int soft_errors) { struct arch_pfs_dav_session * pfs = (struct arch_pfs_dav_session *)p; int ne_err; t_uchar * dir = 0; int answer = 0; dir = abs_path (pfs->cwd, path); if (dir[str_length (dir) - 1] != '/') dir = str_realloc_cat (0, dir, "/"); if ((ne_err = ne_delete (pfs->sess, dir))) { if (!soft_errors) { safe_printfmt (2, "webdav error (pfs_rmdir): %s (%s)\n", dir, ne_get_error (pfs->sess)); exit (2); } else answer = -1; } lim_free (0, dir); return answer; } static int pfs_rm (struct arch_pfs_session * p, const t_uchar * path, int soft_errors) { struct arch_pfs_dav_session * pfs = (struct arch_pfs_dav_session *)p; int ne_err; t_uchar * abs = 0; int answer = 0; abs = abs_path (pfs->cwd, path); if ((ne_err = ne_delete (pfs->sess, abs))) { if (!soft_errors) { safe_printfmt (2, "webdav error (pfs_rm): %s (%s)\n", path, ne_get_error (pfs->sess)); exit (2); } else answer = -1; } lim_free (0, abs); return 0; } static void dav_is_dir_results (void * userdata, const char * uri, const ne_prop_result_set * set) { struct dav_is_dir_ls_data * data = (struct dav_is_dir_ls_data *)userdata; int len; len = str_length (data->uri); if (!str_cmp_n (uri, len, data->uri, len)) { if (uri[str_length (uri) - 1] == '/') data->is_dir = 1; else data->is_dir = 0; } } static int dav_client_cwd (struct arch_pfs_dav_session * pfs, const t_uchar * path) { int ne_err; t_uchar * tmp; t_uchar * dir; dir = abs_path (pfs->cwd, path); if (dir[str_length (dir) - 1] != '/') dir = str_realloc_cat (0, dir, "/"); #if 1 if (getenv("TLA_DISABLE_DAV")!=NULL) { pfs->sess_opts.dav_class1 = 0; pfs->sess_opts.dav_class2 = 0; pfs->sess_opts.dav_executable = 0; } else #endif if ((ne_err = ne_options (pfs->sess, dir, &pfs->sess_opts))) { /* if error assume that server doesn't implement OPTIONS */ pfs->sess_opts.dav_class1 = 0; pfs->sess_opts.dav_class2 = 0; pfs->sess_opts.dav_executable = 0; } if (pfs->sess_opts.dav_class1) /* if the server supports DAV */ { if ((ne_err = ne_simple_propfind (pfs->sess, dir, NE_DEPTH_ONE, ls_props, NULL, NULL))) { safe_printfmt (2, "webdav error: %s\n", ne_get_error (pfs->sess)); exit (2); } } else /* no dav, so look for a listing file */ { time_t mtime; char * dirlisting = 0; dirlisting = str_alloc_cat (0, dir, LISTING_FILE); if ((ne_err = ne_getmodtime (pfs->sess, dirlisting, &mtime))) { safe_printfmt (2, "unable to access URL: %s\nwebdav error: %s\n", dirlisting, ne_get_error (pfs->sess)); exit (2); } lim_free (0, dirlisting); } tmp = ne_path_unescape (dir); lim_free (0, dir); if (pfs->cwd) free (pfs->cwd); pfs->cwd = tmp; return 0; } static int dav_client_auth (void * userdata, const char * realm, int attempt, char * username, char * password) { struct authinfo *auth; int len; if (attempt > 1) return attempt; auth = userdata; len = str_length (auth->username); str_cpy_n (username, auth->username, MIN (len, NE_ABUFSIZ - 1)); len = str_length (auth->password); str_cpy_n (password, auth->password, MIN (len, NE_ABUFSIZ - 1)); return 0; } static t_uchar * abs_path (const t_uchar * cwd, const t_uchar * path) { t_uchar * file; t_uchar * tmp; if (cwd == NULL) cwd = "/"; if (path[0] != '/') file = str_alloc_cat (0, cwd, path); else file = str_save (0, path); dirfold (file); tmp = ne_path_escape (file); lim_free (0, file); file = str_save (0, tmp); free (tmp); return file; } static t_uchar * dirfold (t_uchar *dir) { t_uchar * buf; t_uchar * this; t_uchar * next; int dir_i = 0; this = next = buf = str_save (0, dir); while ((this = str_separate (&next, "/")) != NULL) { if (str_length (this) == 0 || (str_length (this) == 1 && this[0] == '.')) continue; else if (str_length (this) == 2 && *this == '.' && this[1] == '.') { if (dir_i > 0) dir_i = (int)(strrchr (dir, '/') - (char *)dir); dir[dir_i] = 0; } else { dir[dir_i++] = '/'; strcpy (dir + dir_i, this); dir_i += str_length (this); } } lim_free (0, buf); if (!str_length (dir)) str_cpy (dir, "/"); return dir; } static void results (void * userdata, const char * uri, const ne_prop_result_set * set) { int n; char * file, * tmp; struct ls_data * data = userdata; if (str_cmp (data->uri, uri)) { if (1 == (n = str_length (uri))) return; if (uri[n - 1] == '/') n--; file = str_chr_rindex_n (uri, n, '/') + 1; n = str_length (file); if (file[n - 1] == '/') n--; file = str_save_n (0, file, n); tmp = ne_path_unescape (file); lim_free (0, file); data->files = str_realloc_cat_many (0, data->files, tmp, "\r\n", str_end); free (tmp); } } /* tag: Tom Lord Thu Jun 5 15:23:06 2003 (pfs-dav.c) */ tla-1.3.5+dfsg/src/tla/libarch/archive-setup.c0000644000175000017500000003041010457622000017625 0ustar useruser/* archive-setup.c: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/bugs/panic.h" #include "hackerlab/arrays/ar.h" #include "hackerlab/char/str.h" #include "hackerlab/vu/safe.h" #include "tla/libawk/associative.h" #include "tla/libarch/chatter.h" #include "tla/libarch/namespace.h" #include "tla/libarch/archive.h" #include "tla/libarch/tag.h" #include "tla/libarch/archive-cache.h" #include "tla/libarch/archive-setup.h" /* __STDC__ prototypes for static functions */ static struct arch_archive * find_archive (struct arch_archive ** archs, const t_uchar * name); void arch_setup_archive_simple (int chatter_fd, const t_uchar * archive_spec, const t_uchar * revision_spec) { rel_table wants = rel_table_nil; rel_add_records (&wants, rel_make_record_2_taking (rel_make_field_str (archive_spec), rel_make_field_str (revision_spec)), rel_record_null); arch_setup_archive (chatter_fd, wants, arch_archive_setup_no_tags, 0); rel_free_table (wants); } void arch_setup_archive_simple_ext (int chatter_fd, struct arch_archive * arch, const t_uchar * revision_spec) { rel_table wants = rel_table_nil; rel_add_records (&wants, rel_make_record_2_taking (rel_make_field_str (arch->name), rel_make_field_str (revision_spec)), rel_record_null); arch_setup_archive_ext (chatter_fd, wants, arch_archive_setup_no_tags, 0, arch); rel_free_table (wants); } void arch_setup_archive (int chatter_fd, rel_table wants, enum arch_archive_setup_tag_op tag_op, int archive_cache) { arch_setup_archive_ext (chatter_fd, wants, tag_op, archive_cache, NULL); } static void arch_archive_populate_fqcategory_exists (struct arch_archive * arch, assoc_table * fqcategory_exists) { int c; rel_table categories = arch_archive_categories (arch); for (c = 0; c < rel_n_records (categories); ++c) { t_uchar * cat = 0; cat = arch_fully_qualify (arch->name, rel_peek_str (categories, c, 0)); assoc_set_taking (fqcategory_exists, rel_make_field_str (cat), rel_make_field_str ("yes")); lim_free (0, cat); } rel_free_table (categories); } void arch_setup_archive_ext (int chatter_fd, rel_table wants, enum arch_archive_setup_tag_op tag_op, int archive_cache, struct arch_archive * initial_arch) { t_uchar * errstr = 0; struct arch_archive ** archs = 0; assoc_table fqcategories_checked = 0; assoc_table fqbranches_checked = 0; assoc_table fqcategory_exists = 0; assoc_table fqbranch_exists = 0; assoc_table fqversion_exists = 0; int x; if (initial_arch) *(struct arch_archive **)ar_push ((void **)&archs, 0, sizeof (initial_arch)) = initial_arch; for (x = 0; x < rel_n_records (wants); ++x) { const t_uchar * archive; struct arch_archive * arch = 0; const t_uchar * spec; t_uchar * category = 0; t_uchar * fqcategory = 0; archive = rel_peek_str (wants, x, 0); arch = find_archive (archs, archive); if (!arch) { arch = arch_archive_connect (archive, 0); *(struct arch_archive **)ar_push ((void **)&archs, 0, sizeof (arch)) = arch; arch_archive_populate_fqcategory_exists (arch, &fqcategory_exists); } if (!fqcategory_exists) arch_archive_populate_fqcategory_exists (arch, &fqcategory_exists); spec = rel_peek_str (wants, x, 1); category = arch_parse_package_name (arch_ret_category, 0, spec); fqcategory = arch_fully_qualify (archive, category); if ((arch->type != arch_archive_baz) && !assoc_get_str_taking (fqcategory_exists, rel_make_field_str (fqcategory))) { arch_chatter (chatter_fd, "* creating category %s/%s\n", archive, category); if (arch_make_category (&errstr, arch, category)) { safe_printfmt (2, "archive-setup: error making category %s/%s (%s)\n", archive, category, errstr); exit (1); } assoc_set_taking (&fqcategory_exists, rel_make_field_str (fqcategory), rel_make_field_str ("yes")); } if (str_cmp (spec, category)) { if (arch_valid_package_name (spec, arch_no_archive, arch_req_package, 1)) { t_uchar * branch = 0; t_uchar * fqbranch = 0; branch = arch_parse_package_name (arch_ret_package, 0, spec); fqbranch = arch_fully_qualify (archive, branch); if (!assoc_get_str_taking (fqcategories_checked, rel_make_field_str (fqcategory))) { rel_table branches = rel_table_nil; int b; branches = arch_archive_branches (arch, category); for (b = 0; b < rel_n_records (branches); ++b) { t_uchar * bran = 0; bran = arch_fully_qualify (archive, rel_peek_str (branches, b, 0)); assoc_set_taking (&fqbranch_exists, rel_make_field_str (bran), rel_make_field_str ("yes")); lim_free (0, bran); } rel_free_table (branches); } if ((arch->type != arch_archive_baz) && !assoc_get_str_taking (fqbranch_exists, rel_make_field_str (fqbranch))) { arch_chatter (chatter_fd, "* creating branch %s/%s\n", archive, branch); if (arch_make_branch (&errstr, arch, branch)) { safe_printfmt (2, "archive-setup: error making branch %s/%s (%s)\n", archive, branch, errstr); exit (1); } assoc_set_taking (&fqbranch_exists, rel_make_field_str (fqbranch), rel_make_field_str ("yes")); } if (arch_valid_package_name (spec, arch_no_archive, arch_req_version, 0)) { t_uchar * version = 0; t_uchar * fqversion = 0; version = arch_parse_package_name (arch_ret_package_version, 0, spec); fqversion = arch_fully_qualify (archive, version); if (!assoc_get_str_taking (fqbranches_checked, rel_make_field_str (fqbranch))) { rel_table versions = rel_table_nil; int v; versions = arch_archive_versions (arch, branch); for (v = 0; v < rel_n_records (versions); ++v) { t_uchar * vers = 0; vers = arch_fully_qualify (archive, rel_peek_str (versions, v, 0)); assoc_set_taking (&fqversion_exists, rel_make_field_str (vers), rel_make_field_str ("yes")); lim_free (0, vers); } rel_free_table (versions); } if (!assoc_get_str_taking (fqversion_exists, rel_make_field_str (fqversion))) { arch_chatter (chatter_fd, "* creating version %s/%s\n", archive, version); if (arch_make_version (&errstr, arch, version)) { safe_printfmt (2, "archive-setup: error making version %s/%s (%s)\n", archive, version, errstr); exit (1); } assoc_set_taking (&fqversion_exists, rel_make_field_str (fqversion), rel_make_field_str ("yes")); } if (tag_op != arch_archive_setup_no_tags) { rel_table has_revisions = rel_table_nil; const t_uchar * tag_from_archive; const t_uchar * tag_from_rev_spec; struct arch_archive * from_arch = 0; t_uchar * tag_from_version = 0; rel_table from_has_revisions = rel_table_nil; arch_chatter (chatter_fd, "* creating tag in %s/%s\n", archive, version); has_revisions = arch_archive_revisions (arch, version, 0); tag_from_archive = rel_peek_str (wants, x, 2); tag_from_rev_spec = rel_peek_str (wants, x, 3); from_arch = find_archive (archs, tag_from_archive); if (!from_arch) { from_arch = arch_archive_connect (tag_from_archive, 0); *(struct arch_archive **)ar_push ((void **)&archs, 0, sizeof (arch)) = from_arch; } tag_from_version = arch_parse_package_name (arch_ret_package_version, 0, tag_from_rev_spec); from_has_revisions = arch_archive_revisions (from_arch, tag_from_version, 0); switch (tag_op) { default: { panic ("archive-setup.c internal error"); break; } case arch_archive_setup_make_base0_tag: { if (rel_n_records (has_revisions)) arch_chatter (chatter_fd, " ...skipping, base-0 already exists"); else { t_uchar * tag_revision = 0; t_uchar * tag_from_revision = 0; tag_revision = str_alloc_cat (0, version, "--base-0"); if (arch_valid_package_name (tag_from_rev_spec, 0, arch_req_patch_level, 0)) tag_from_revision = arch_parse_package_name (arch_ret_non_archive, 0, tag_from_rev_spec); else if (rel_n_records (from_has_revisions)) tag_from_revision = str_alloc_cat_many (0, tag_from_version, "--", rel_peek_str (from_has_revisions, rel_n_records (from_has_revisions) - 1, 0), str_end); if (tag_from_revision) { arch_tag (chatter_fd, arch, tag_revision, from_arch, tag_from_revision, 0); if (archive_cache) { arch_chatter (chatter_fd, "* archive caching %s/%s\n", archive, tag_revision); arch_archive_cache (chatter_fd, arch, archive, tag_revision, 0); } } lim_free (0, tag_from_revision); lim_free (0, tag_revision); } break; } } rel_free_table (has_revisions); lim_free (0, tag_from_version); rel_free_table (from_has_revisions); } lim_free (0, version); lim_free (0, fqversion); } lim_free (0, branch); lim_free (0, fqbranch); } } lim_free (0, category); lim_free (0, fqcategory); } for (x = 0; x < ar_size ((void *)archs, 0, sizeof (*archs)); ++x) if (archs[x] != initial_arch) arch_archive_close (archs[x]); ar_free ((void **)&archs, 0); free_assoc_table (fqcategories_checked); free_assoc_table (fqbranches_checked); free_assoc_table (fqcategory_exists); free_assoc_table (fqbranch_exists); free_assoc_table (fqversion_exists); } static struct arch_archive * find_archive (struct arch_archive ** archs, const t_uchar * name) { int x; for (x = 0; x < ar_size ((void *)archs, 0, sizeof (*archs)); ++x) if (!str_cmp (name, archs[x]->name)) return archs[x]; return 0; } /* tag: Tom Lord Wed Jun 11 11:58:43 2003 (archive-setup.c) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-commit.c0000644000175000017500000004356710457622000017120 0ustar useruser/* cmd-commit.c * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "config-options.h" #include "hackerlab/cmd/main.h" #include "tla/libfsutils/file-contents.h" #include "tla/libarch/namespace.h" #include "tla/libarch/project-tree.h" #include "tla/libarch/patch-logs.h" #include "tla/libarch/archive.h" #include "tla/libarch/proj-tree-lint.h" #include "tla/libarch/commit.h" #include "tla/libarch/cmd.h" #include "tla/libarch/editor.h" #include "tla/libarch/cmd-commit.h" #include "tla/libarch/invent.h" /* __STDC__ prototypes for static functions */ static void arch_make_edit_log (t_uchar *tree_root, t_uchar *archive, t_uchar *version); static t_uchar * usage = "[options] [[archive]/version] [-- file ...]"; static t_uchar * version_string = (cfg__std__package " from regexps.com\n" "\n" "Copyright 2003 Tom Lord\n" "\n" "This is free software; see the source for copying conditions.\n" "There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\n" "PARTICULAR PURPOSE.\n" "\n" "Report bugs to " cfg__tla_bug_mail ".\n" "\n" cfg__std__release_id_string "\n"); #define OPTS(OP) \ OP (opt_help_msg, "h", "help", 0, \ "Display a help message and exit.") \ OP (opt_long_help, "H", 0, 0, \ "Display a verbose help message and exit.") \ OP (opt_version, "V", "version", 0, \ "Display a release identifier string\n" \ "and exit.") \ OP (opt_archive, "A", "archive", 1, \ "Override `my-default-archive'") \ OP (opt_dir, "d", "dir DIR", 1, \ "cd to DIR first") \ OP (opt_log, "l", "log FILE", 1, \ "commit with log file FILE") \ OP (opt_summary, "s", "summary TEXT", 1, \ "log with summary TEXT plus log-for-merge output" ) \ OP (opt_log_msg, "L", "log-message TEXT", 1, \ "log with TEXT plus log-for-merge output") \ OP (opt_exclude, "x", "exclude FILE", 1, \ "exclude FILE from the files to commit") \ OP (opt_strict, 0, "strict", 0, \ "strict tree-lint") \ OP (opt_seal, 0, "seal", 0, \ "create a version-0 revision") \ OP (opt_fix, 0, "fix", 0, \ "create a versionfix revision") \ OP (opt_out_of_date, 0, "out-of-date-ok", 0, \ "commit even if out of date") \ OP (opt_file_list, 0, "file-list FILE", 1, \ "commit only changes to files listed in FILE") \ OP (opt_write_revision, 0, "write-revision REVISION_FILE_SPEC", 1, \ "write the new tree id to REVISION_FILE_SPEC before committing") \ OP (opt_unescaped, 0, "unescaped", 0, \ "show filenames in unescaped form") t_uchar arch_cmd_commit_help[] = ("archive a changeset-based revision\n" "Archive a revision of the project tree containing DIR (or the current\n" "directory)\n" "\n" "If there are any automated ChangeLog files, update them before\n" "computing the patch set.\n" "\n" "If --log-message is specified without --summary, then TEXT is used both\n" "as the summary and the first line of the log body.\n"); enum options { OPTS (OPT_ENUM) }; static struct opt_desc opts[] = { OPTS (OPT_DESC) {-1, 0, 0, 0, 0} }; static int write_revision_file_spec(const t_uchar *revision_file_spec, const t_uchar *revision) { t_uchar *file_name = 0; t_uchar *content_spec = 0; t_uchar *s = str_chr_index(revision_file_spec, ':'); int fd ; if (!s) { safe_printfmt (2, "revision file spec %s does not contain file name separator ':'! \n", revision_file_spec); return 0; } file_name = str_save_n(0, revision_file_spec, s - revision_file_spec); fd = safe_open(file_name, O_WRONLY | O_CREAT | O_TRUNC, 0666); if (!fd) { safe_printfmt (2, "cannot open file %s for writing revision! \n", file_name); lim_free(0, file_name); return 0; } content_spec = str_save(0, s + 1); safe_printfmt(fd, content_spec, revision); safe_printfmt(fd, "\n"); safe_close(fd); lim_free(0, file_name); lim_free(0, content_spec); return 1; } int arch_cmd_commit (t_uchar * program_name, int argc, char * argv[]) { int o; struct opt_parsed * option; t_uchar * default_archive = 0; t_uchar * dir = 0; t_uchar * log_file = 0; t_uchar * log_text = 0; t_uchar * summary = 0; t_uchar *revision_file_spec = 0; int strict = 0; int seal = 0; int fix = 0; int out_of_date_ok = 0; t_uchar * file_list_file = 0; int opt_end_with_double_dash = 0; int escape_classes = arch_escape_classes; rel_table exclude_list = rel_table_nil; dir = str_save (0, "."); safe_buffer_fd (1, 0, O_WRONLY, 0); option = 0; while (1) { o = opt_standard (lim_use_must_malloc, &option, opts, &argc, argv, program_name, usage, version_string, arch_cmd_commit_help, opt_help_msg, opt_long_help, opt_version); if (o == opt_none) break; if (o == opt_double_dash) { opt_end_with_double_dash = 1; break; } switch (o) { default: safe_printfmt (2, "unhandled option `%s'\n", option->opt_string); panic ("internal error parsing arguments"); usage_error: opt_usage (2, argv[0], program_name, usage, 1); exit (1); /* bogus_arg: */ safe_printfmt (2, "ill-formed argument for `%s' (`%s')\n", option->opt_string, option->arg_string); goto usage_error; case opt_archive: { default_archive = str_save (0, option->arg_string); break; } case opt_dir: { dir = str_save (0, option->arg_string); break; } case opt_log: { lim_free (0, log_file); log_file = str_save (0, option->arg_string); lim_free (0, log_text); log_text = 0; break; } case opt_log_msg: { lim_free (0, log_text); log_text = str_save (0, option->arg_string); lim_free (0, log_file); log_file = 0; break; } case opt_summary: { lim_free (0, summary); summary = str_save (0, option->arg_string); lim_free (0, log_file); log_file = 0; break; } case opt_strict: { strict = 1; break; } case opt_seal: { seal = 1; break; } case opt_fix: { fix = 1; break; } case opt_out_of_date: { out_of_date_ok = 1; break; } case opt_file_list: { lim_free (0, file_list_file); file_list_file = str_save (0, option->arg_string); break; } case opt_exclude: { t_uchar * normalized_path = normal_from_path(option->arg_string); rel_add_records (&exclude_list, rel_singleton_record_taking (rel_make_field_str (normalized_path)), rel_record_null); lim_free(0, normalized_path); normalized_path = 0; break; } case opt_unescaped: { escape_classes = 0; break; } case opt_write_revision: { lim_free(0, revision_file_spec); revision_file_spec = str_save(0, option->arg_string); break; } } } { t_uchar * log = 0; t_uchar * vsnspec = 0; rel_table file_list = rel_table_nil; rel_table file_list2 = rel_table_nil; t_uchar * tree_root = 0; t_uchar * archive = 0; t_uchar * version = 0; rel_table revisions = rel_table_nil; t_uchar * last_level = 0; enum arch_patch_level_type last_level_type; enum arch_patch_level_type desired_level_type; t_ulong last_n; t_ulong desired_n; t_uchar * desired_level = 0; t_uchar * revision = 0; struct arch_archive * arch = 0; if (default_archive) { if (!arch_valid_archive_name (default_archive)) { safe_printfmt (2, "%s: invalid archive name (%s)\n", argv[0], default_archive); exit (1); } } tree_root = arch_tree_root (0, dir, 1); if (!tree_root) { safe_printfmt (2, "%s: not in project tree (%s)\n", argv[0], dir); exit (1); } if (argc == 1 || opt_end_with_double_dash) /* No args, or file arguments but no version spec. */ { vsnspec = arch_tree_version (tree_root); if (!vsnspec) { safe_printfmt (2, "%s: project tree has no default version\n tree: %s\n", argv[0], tree_root); exit (1); } } else /* Version spec specified. */ vsnspec = str_save (0, argv[1]); if (file_list_file) { int in_fd = safe_open (file_list_file, O_RDONLY, 0); file_list = rel_read_table (in_fd, 1, argv[0], file_list_file); safe_close (in_fd); } if (argc > 2 || opt_end_with_double_dash) /* File arguments. */ { int argx = opt_end_with_double_dash ? 1 : 2; t_uchar *normalized_path = 0; if (!opt_end_with_double_dash && str_cmp (argv[argx], "--") == 0) argx++; if (argx == argc) /* --, but no files specified; should this be an error? */ goto usage_error; while (argx < argc) { normalized_path = normal_from_path(argv[argx++]); rel_add_records (&file_list, rel_singleton_record_taking (rel_make_field_str (normalized_path)), rel_record_null); lim_free(0, normalized_path); normalized_path = 0; } } if (!arch_valid_package_name (vsnspec, arch_maybe_archive, arch_req_version, 0)) { safe_printfmt (2, "%s: invalid version name -- %s\n", argv[0], vsnspec); exit (1); } archive = arch_parse_package_name (arch_ret_archive, default_archive, vsnspec); version = arch_parse_package_name (arch_ret_non_archive, 0, vsnspec); if (arch_is_system_package_name (version)) { safe_printfmt (2, "%s: user's can not commit to system versions\n version: %s\n", argv[0], version); exit (2); } if (log_text || summary) { if (! summary) summary = log_text; log = arch_auto_log_message (tree_root, archive, version, summary, log_text); } else { if (!log_file) { log_file = arch_make_log_file (tree_root, archive, version); if (safe_access (log_file, F_OK)) arch_make_edit_log (tree_root, archive, version); } log = file_contents (log_file); } if (!arch_valid_log_file (log)) { safe_printfmt (2, "%s: invalid log file (%s)\n", argv[0], (log_file ? log_file : log_text)); exit (1); } if (!arch_has_patch_log (tree_root, archive, version)) { safe_printfmt (2, "%s: tree has no patch log for version\n tree: %s\n version: %s/%s\n", argv[0], tree_root, archive, version); exit (1); } { rel_table log_entries = rel_table_nil; log_entries = arch_logs (tree_root, archive, version, 0); if (!rel_n_records (log_entries)) { safe_printfmt (2, "%s: tree has no patch log entries for version\n tree: %s\n version: %s/%s", argv[0], tree_root, archive, version); exit (1); } } { struct arch_tree_lint_result * lint = 0; int status; lint = arch_tree_lint (tree_root); status = arch_print_tree_lint_report (2, lint, escape_classes); if ((status < 0) || (strict && status)) { safe_printfmt (2, "%s: commit aborted\n", argv[0]); exit (1); } } arch = arch_archive_connect (archive, 0); revisions = arch_archive_revisions (arch, version, 0); if (!rel_n_records (revisions)) { safe_printfmt (2, "%s: version has no revisions -- use revimport instead\n", argv[0]); exit (1); } last_level = str_save (0, rel_peek_str (revisions, rel_n_records (revisions) - 1, 0)); last_level_type = arch_analyze_patch_level (&last_n, last_level); switch (last_level_type) { default: panic ("NOT IMPLEMENTED YET"); panic ("internal error"); break; case arch_is_base0_level: { if (seal) { desired_level_type = arch_is_version_level; desired_n = 0; } else if (fix) { safe_printfmt (2, "%s: can not --fix before --seal\n", argv[0]); exit (2); } else { desired_level_type = arch_is_patch_level; desired_n = 1; } break; } case arch_is_patch_level: { if (seal) { desired_level_type = arch_is_version_level; desired_n = 0; } else if (fix) { safe_printfmt (2, "%s: can not --fix before --seal\n", argv[0]); exit (2); } else { desired_level_type = arch_is_patch_level; desired_n = last_n + 1; } break; } case arch_is_version_level: { if (seal) { safe_printfmt (2, "%s: version already sealed\n", argv[0]); exit (2); } else if (fix) { desired_level_type = arch_is_versionfix_level; desired_n = 1; } else { safe_printfmt (2, "%s: cannot commit to sealed version without --fix\n", argv[0]); exit (2); } break; } case arch_is_versionfix_level: { if (seal) { safe_printfmt (2, "%s: version already sealed\n", argv[0]); exit (2); } else if (fix) { desired_level_type = arch_is_versionfix_level; desired_n = last_n + 1; } else { safe_printfmt (2, "%s: cannot commit to sealed version without --fix\n", argv[0]); exit (2); } break; } } if (!out_of_date_ok) { t_uchar * prev_revision = 0; t_uchar * prev_log_path = 0; prev_revision = str_alloc_cat_many (0, version, "--", last_level, str_end); prev_log_path = arch_log_file (tree_root, archive, prev_revision); if (safe_access (prev_log_path, F_OK)) { safe_printfmt (2, "%s: tree is not up-to-date (missing latest revision is %s/%s)\n", argv[0], archive, prev_revision); exit (1); } lim_free (0, prev_revision); lim_free (0, prev_log_path); } desired_level = arch_form_patch_level (desired_level_type, desired_n); revision = str_alloc_cat_many (0, version, "--", desired_level, str_end); if (revision_file_spec) /* if revision file spec is specified, write the new revision to the file before committing */ { if (0 == write_revision_file_spec(revision_file_spec, revision)) exit(1); } if ((rel_n_records (exclude_list) > 0) && (rel_n_records (file_list) == 0)) { file_list = arch_source_files_file_list(tree_root, 0, 0); } file_list2 = rel_table_substract(file_list, exclude_list); arch_commit (1, arch, revision, tree_root, log, file_list2, escape_classes); safe_printfmt (1, "* committed %s/%s\n", archive, revision); if (log_file) safe_unlink (log_file); lim_free (0, vsnspec); rel_free_table (file_list); rel_free_table (file_list2); lim_free (0, log); lim_free (0, tree_root); lim_free (0, archive); lim_free (0, version); rel_free_table (revisions); lim_free (0, last_level); lim_free (0, desired_level); lim_free (0, revision); lim_free (0, revision_file_spec); } lim_free (0, default_archive); lim_free (0, dir); return 0; } static void arch_make_edit_log (t_uchar *tree_root, t_uchar *archive, t_uchar *version) { int out_fd; int ecode; t_uchar *log_path = arch_make_log_file (tree_root, archive, version); t_uchar *text = arch_auto_log_message (tree_root, archive, version, "", ""); t_uchar *new_text = 0; safe_printfmt (1, "* no log found, creating one automatically\n"); safe_printfmt (1, "* (Use \"tla make-log\" to create a log file.)\n"); safe_flush (1); out_fd = safe_open (log_path, O_WRONLY | O_CREAT | O_EXCL, 0666); safe_printfmt (out_fd, "%s", text); safe_close (out_fd); ecode = arch_run_editor (log_path); if (ecode != 0) { safe_printfmt (2, "arch_make_edit_log: editor exited with error code %d\n", ecode); exit (2); } new_text = file_contents (log_path); if (!str_cmp (text, new_text)) { safe_printfmt (2, "arch_make_edit_log: log file is unmodified, aborting\n"); safe_unlink (log_path); exit (2); } } /* tag: Tom Lord Mon May 26 21:33:18 2003 (revcmt.c) */ tla-1.3.5+dfsg/src/tla/libarch/cmd-library-categories.h0000644000175000017500000000135010457622000021404 0ustar useruser/* cmd-library-categories.h: * **************************************************************** * Copyright (C) 2003 Tom Lord, Stig Brautaset * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBARCH__CMD_LIBRARY_CATEGORIES_H #define INCLUDE__LIBARCH__CMD_LIBRARY_CATEGORIES_H #include "hackerlab/machine/types.h" extern t_uchar arch_cmd_library_categories_help[]; /* automatically generated __STDC__ prototypes */ extern int arch_cmd_library_categories (t_uchar * program_name, int argc, char * argv[]); #endif /* INCLUDE__LIBARCH__CMD_LIBRARY_CATEGORIES_H */ /* tag: Stig Brautaset Sat Jun 7 15:03:41 BST 2003 (cmd-library-categories.h) */ tla-1.3.5+dfsg/src/tla/libawk/0000755000175000017500000000000010457622000014551 5ustar userusertla-1.3.5+dfsg/src/tla/libawk/relational.c0000644000175000017500000006546710457622000017071 0ustar useruser/* relational.c: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/bugs/panic.h" #include "hackerlab/os/stdarg.h" #include "hackerlab/vu/safe.h" #include "hackerlab/vu/safe-vu-utils-vfdbuf.h" #include "hackerlab/arrays/ar.h" #include "hackerlab/sort/qsort.h" #include "hackerlab/char/char-class.h" #include "hackerlab/char/str.h" #include "hackerlab/char/pika-escaping-utils.h" #include "tla/libawk/relational.h" /* __STDC__ prototypes for static functions */ static int rec_cmp_by_field (void * va, void * vb, void * vdata); static int rec_cmp_by_field_fn (void * va, void * vb, void * vdata); static int rec_cmp_by_fields (void * va, void * vb, void * vdata); static int cmp_fields (rel_table table1, ssize_t r1, ssize_t c1, rel_table table2, ssize_t r2, ssize_t c2); static rel_record rel_read_record (int fd, int n_fields, const char * err_name, const char * err_src); static void rel_print_record (int fd, rel_record rec); static void rel_print_pika_escape_iso8859_1_record (int fd, int escape_classes, rel_record rec); static void rel_print_record_sp (int fd, rel_record rec); static void rel_print_pika_escape_iso8859_1_record_sp (int fd, int escape_classes, rel_record rec); int rel_n_records (rel_table r) { return ar_size ((void *)r._r, 0, sizeof (rel_record)); } int rel_n_fields (rel_record r) { return ar_size ((void *)r._c, 0, sizeof (rel_field)); } rel_record rel_peek_record (rel_table r, ssize_t row) { rel_record rec; if ((row < 0) || (row > rel_n_records (r))) return rel_record_nil; rec = r._r[row]; return rec; } rel_field rel_get_field (rel_table r, ssize_t row, ssize_t col) { rel_record rec; if ((row < 0) || (row > rel_n_records (r))) return rel_field_nil; rec = r._r[row]; if ((col < 0) || (col > rel_n_fields (rec))) return rel_field_nil; dstr_ref (rec._c[col]._d); return rec._c[col]; } t_dstr rel_get_dstr (rel_table r, ssize_t row, ssize_t col) { t_dstr answer; answer = rel_peek_dstr (r, row, col); dstr_ref (answer); return answer; } t_dstr rel_peek_dstr (rel_table r, ssize_t row, ssize_t col) { rel_record rec; if ((row < 0) || (row > rel_n_records (r))) return 0; rec = r._r[row]; if ((col < 0) || (col > rel_n_fields (rec))) return 0; return rec._c[col]._d; } const t_uchar * rel_peek_str (rel_table r, ssize_t row, ssize_t col) { t_dstr it; it = rel_peek_dstr (r, row, col); return dstr_data (0, it); } t_dstr rel_rec_peek_dstr (rel_record rec, ssize_t col) { if ((col < 0) || (col > rel_n_fields (rec))) return 0; return rec._c[col]._d; } const t_uchar * rel_rec_peek_str (rel_record rec, ssize_t col) { t_dstr it; it = rel_rec_peek_dstr (rec, col); return dstr_data (0, it); } int rel_set_taking (rel_table r, ssize_t row, ssize_t col, rel_field d) { rel_record rec; if ((row < 0) || (row > rel_n_records (r))) return -1; rec = r._r[row]; if ((col < 0) || (col > rel_n_fields (rec))) return -1; dstr_unref (rec._c[col]._d); rec._c[col] = d; return 0; } int rel_set_record (rel_table r, ssize_t row, rel_record rec) { rel_record old_rec; if ((row < 0) || (row > rel_n_records (r))) return -1; old_rec = r._r[row]; r._r[row] = rec; rel_free_record (old_rec); return 0; } rel_record rel_make_record_0 (void) { return rel_record_nil; } rel_record rel_make_record_1_taking (rel_field f0) { rel_record answer; answer = rel_record_nil; *(rel_field *)ar_push ((void **)&answer._c, 0, sizeof (rel_field)) = f0; return answer; } rel_record rel_make_record_2_taking (rel_field f0, rel_field f1) { rel_record answer; answer = rel_record_nil; *(rel_field *)ar_push ((void **)&answer._c, 0, sizeof (rel_field)) = f0; *(rel_field *)ar_push ((void **)&answer._c, 0, sizeof (rel_field)) = f1; return answer; } rel_record rel_make_record_3_taking (rel_field f0, rel_field f1, rel_field f2) { rel_record answer; answer = rel_record_nil; *(rel_field *)ar_push ((void **)&answer._c, 0, sizeof (rel_field)) = f0; *(rel_field *)ar_push ((void **)&answer._c, 0, sizeof (rel_field)) = f1; *(rel_field *)ar_push ((void **)&answer._c, 0, sizeof (rel_field)) = f2; return answer; } rel_record rel_make_record_4_taking (rel_field f0, rel_field f1, rel_field f2, rel_field f3) { rel_record answer; answer = rel_record_nil; *(rel_field *)ar_push ((void **)&answer._c, 0, sizeof (rel_field)) = f0; *(rel_field *)ar_push ((void **)&answer._c, 0, sizeof (rel_field)) = f1; *(rel_field *)ar_push ((void **)&answer._c, 0, sizeof (rel_field)) = f2; *(rel_field *)ar_push ((void **)&answer._c, 0, sizeof (rel_field)) = f3; return answer; } rel_record rel_make_record_5_taking (rel_field f0, rel_field f1, rel_field f2, rel_field f3, rel_field f4) { rel_record answer; answer = rel_record_nil; *(rel_field *)ar_push ((void **)&answer._c, 0, sizeof (rel_field)) = f0; *(rel_field *)ar_push ((void **)&answer._c, 0, sizeof (rel_field)) = f1; *(rel_field *)ar_push ((void **)&answer._c, 0, sizeof (rel_field)) = f2; *(rel_field *)ar_push ((void **)&answer._c, 0, sizeof (rel_field)) = f3; *(rel_field *)ar_push ((void **)&answer._c, 0, sizeof (rel_field)) = f4; return answer; } rel_record rel_make_record_6_taking (rel_field f0, rel_field f1, rel_field f2, rel_field f3, rel_field f4, rel_field f5) { rel_record answer; answer = rel_record_nil; *(rel_field *)ar_push ((void **)&answer._c, 0, sizeof (rel_field)) = f0; *(rel_field *)ar_push ((void **)&answer._c, 0, sizeof (rel_field)) = f1; *(rel_field *)ar_push ((void **)&answer._c, 0, sizeof (rel_field)) = f2; *(rel_field *)ar_push ((void **)&answer._c, 0, sizeof (rel_field)) = f3; *(rel_field *)ar_push ((void **)&answer._c, 0, sizeof (rel_field)) = f4; *(rel_field *)ar_push ((void **)&answer._c, 0, sizeof (rel_field)) = f5; return answer; } rel_record rel_make_record_7_taking (rel_field f0, rel_field f1, rel_field f2, rel_field f3, rel_field f4, rel_field f5, rel_field f6) { rel_record answer; answer = rel_record_nil; *(rel_field *)ar_push ((void **)&answer._c, 0, sizeof (rel_field)) = f0; *(rel_field *)ar_push ((void **)&answer._c, 0, sizeof (rel_field)) = f1; *(rel_field *)ar_push ((void **)&answer._c, 0, sizeof (rel_field)) = f2; *(rel_field *)ar_push ((void **)&answer._c, 0, sizeof (rel_field)) = f3; *(rel_field *)ar_push ((void **)&answer._c, 0, sizeof (rel_field)) = f4; *(rel_field *)ar_push ((void **)&answer._c, 0, sizeof (rel_field)) = f5; *(rel_field *)ar_push ((void **)&answer._c, 0, sizeof (rel_field)) = f6; return answer; } rel_record rel_make_record_8_taking (rel_field f0, rel_field f1, rel_field f2, rel_field f3, rel_field f4, rel_field f5, rel_field f6, rel_field f7) { rel_record answer; answer = rel_record_nil; *(rel_field *)ar_push ((void **)&answer._c, 0, sizeof (rel_field)) = f0; *(rel_field *)ar_push ((void **)&answer._c, 0, sizeof (rel_field)) = f1; *(rel_field *)ar_push ((void **)&answer._c, 0, sizeof (rel_field)) = f2; *(rel_field *)ar_push ((void **)&answer._c, 0, sizeof (rel_field)) = f3; *(rel_field *)ar_push ((void **)&answer._c, 0, sizeof (rel_field)) = f4; *(rel_field *)ar_push ((void **)&answer._c, 0, sizeof (rel_field)) = f5; *(rel_field *)ar_push ((void **)&answer._c, 0, sizeof (rel_field)) = f6; *(rel_field *)ar_push ((void **)&answer._c, 0, sizeof (rel_field)) = f7; return answer; } const rel_record rel_record_null = { 0 } ; /* make this equivalent with rec_record_nil... maybe they are meant to be the same and should be a single variable? */ void rel_add_records (rel_table * table, ...) { va_list rp; rel_record r; va_start (rp, table); for (r = va_arg (rp, rel_record); r._c; r = va_arg (rp, rel_record)) { *(rel_record *)ar_push ((void **)&table->_r, 0, sizeof (rel_record)) = r; } va_end (rp); } void rel_add_field_taking (rel_record * r, rel_field field) { *(rel_field *)ar_push ((void **)&r->_c, 0, sizeof (rel_field)) = field; } void rel_add_field_to_row_taking (rel_table table, ssize_t row, rel_field field) { invariant ((0 <= row) && (row < rel_n_records (table))); *(rel_field *)ar_push ((void **)&table._r[row]._c, 0, sizeof (rel_field)) = field; } rel_record rel_singleton_record_taking (rel_field field) { rel_record answer = rel_record_nil; *(rel_field *)ar_push ((void **)&answer._c, 0, sizeof (rel_field)) = field; return answer; } void rel_free_table (rel_table t) { int lim; int x; lim = rel_n_records (t); for (x = 0; x < lim; ++x) rel_free_record (t._r[x]); ar_free ((void **)&t._r, 0); } void rel_free_record (rel_record r) { int lim; int x; lim = rel_n_fields (r); for (x = 0; x < lim; ++x) dstr_unref (r._c[x]._d); ar_free ((void **)&r._c, 0); } rel_field rel_field_ref (rel_field f) { dstr_ref (f._d); return f; } void rel_field_unref (rel_field f) { dstr_unref (f._d); } const t_uchar * rel_field_str (rel_field f) { return dstr_data (0, f._d); } rel_field rel_make_field_str (const t_uchar * s) { rel_field f; f._d = dstr_save (0, s); return f; } rel_field rel_make_field_str_n (const t_uchar * s, ssize_t len) { rel_field f; f._d = dstr_save_n (0, s, len); return f; } rel_table rel_ws_split (const t_uchar * string) { rel_table answer = rel_table_nil; const t_uchar * start; const t_uchar * end; if (!string) return rel_table_nil; start = string; while (1) { while (char_is_space (*start)) ++start; if (!*start) return answer; end = start; while (*end && !char_is_space (*end)) ++end; rel_add_records (&answer, rel_singleton_record_taking (rel_make_field_str_n (start, end - start)), rel_record_null); start = end; } } rel_table rel_nl_split (const t_uchar * string) { rel_table answer = rel_table_nil; const t_uchar * start; const t_uchar * end; if (!string) return rel_table_nil; start = string; while (1) { if (!*start) return answer; end = start; while (*end && (*end != '\n')) ++end; rel_add_records (&answer, rel_singleton_record_taking (rel_make_field_str_n (start, end - start)), rel_record_null); if (*end) start = end + 1; else start = end; } } rel_table rel_copy_table (rel_table t) { rel_table answer; int records; int r; records = rel_n_records (t); answer = rel_table_nil; ar_setsize ((void **)&answer._r, 0, records, sizeof (rel_record)); for (r = 0; r < records; ++r) answer._r[r] = rel_copy_record (t._r[r]); return answer; } rel_record rel_copy_record (rel_record r) { rel_record answer; int fields; int f; fields = rel_n_fields (r); answer = rel_record_nil; ar_setsize ((void **)&answer._c, 0, fields, sizeof (rel_field)); for (f = 0; f < fields; ++f) { dstr_ref (r._c[f]._d); answer._c[f] = r._c[f]; } return answer; } void rel_append_x (rel_table * out, rel_table t) { int lim; int x; lim = rel_n_records (t); for (x = 0; x < lim; ++x) { *(rel_record *)ar_push ((void **)&out->_r, 0, sizeof (rel_record)) = rel_copy_record (t._r[x]); } } void rel_reverse_table (rel_table t) { int a; int b; a = 0; b = rel_n_records (t) - 1; while (a < b) { rel_record tmp; tmp = t._r[a]; t._r[a] = t._r[b]; t._r[b] = tmp; ++a; --b; } } struct rel_sort_spec { int reverse_p; int field; }; void rel_sort_table_by_field (int reverse_p, rel_table t, int field_n) { struct rel_sort_spec spec; spec.reverse_p = reverse_p; spec.field = field_n; quicksort ((void *)t._r, rel_n_records (t), sizeof (rel_record), rec_cmp_by_field, (void *)&spec); } static int rec_cmp_by_field (void * va, void * vb, void * vdata) { rel_record * a; rel_record * b; struct rel_sort_spec * spec; t_dstr da; t_dstr db; int raw_cmp; a = (rel_record *)va; b = (rel_record *)vb; spec = (struct rel_sort_spec *)vdata; da = (*a)._c[spec->field]._d; db = (*b)._c[spec->field]._d; raw_cmp = dstr_cmp (da, db); if (!raw_cmp && (da != db)) { if ((unsigned long)da < ((unsigned long)db)) { dstr_ref (da); dstr_unref (db); (*b)._c[spec->field]._d = da; } else { dstr_ref (db); dstr_unref (da); (*a)._c[spec->field]._d = db; } } if (spec->reverse_p) { return -raw_cmp; } else { return raw_cmp; } } struct rel_sort_by_fn_spec { int reverse_p; int field; int (*fn) (const t_uchar * va, const t_uchar * vb); }; void rel_sort_table_by_field_fn (int reverse_p, rel_table t, int field_n, int (*fn)(const t_uchar *, const t_uchar *)) { struct rel_sort_by_fn_spec spec; spec.reverse_p = reverse_p; spec.field = field_n; spec.fn = fn; quicksort ((void *)t._r, rel_n_records (t), sizeof (rel_record), rec_cmp_by_field_fn, (void *)&spec); } static int rec_cmp_by_field_fn (void * va, void * vb, void * vdata) { rel_record * a; rel_record * b; struct rel_sort_by_fn_spec * spec; a = (rel_record *)va; b = (rel_record *)vb; spec = (struct rel_sort_by_fn_spec *)vdata; if (spec->reverse_p) { return -spec->fn (dstr_data (0, (*a)._c[spec->field]._d), dstr_data (0, (*b)._c[spec->field]._d)); } else { return spec->fn (dstr_data (0, (*a)._c[spec->field]._d), dstr_data (0, (*b)._c[spec->field]._d)); } } struct rel_nsort_spec { int reverse_p; int * fields; }; void rel_sort_table_by_fields (int reverse_p, rel_table t, int * fields) { struct rel_nsort_spec spec; spec.reverse_p = reverse_p; spec.fields = fields; quicksort ((void *)t._r, rel_n_records (t), sizeof (rel_record), rec_cmp_by_fields, (void *)&spec); } int * rel_sort_fields (int f, ...) { va_list fp; int * answer; answer = 0; *(int *)ar_push ((void **)&answer, 0, sizeof (int)) = f; va_start (fp, f); while (1) { f = va_arg (fp, int); *(int *)ar_push ((void **)&answer, 0, sizeof (int)) = f; if (f < 0) break; } va_end (fp); return answer; } static int rec_cmp_by_fields (void * va, void * vb, void * vdata) { rel_record * a; rel_record * b; struct rel_nsort_spec * spec; int nth; a = (rel_record *)va; b = (rel_record *)vb; spec = (struct rel_nsort_spec *)vdata; for (nth = 0; spec->fields[nth] >= 0; ++nth) { t_dstr da; t_dstr db; int raw_cmp; int cmp; da = (*a)._c[spec->fields[nth]]._d; db = (*b)._c[spec->fields[nth]]._d; raw_cmp = dstr_cmp (da, db); if (!raw_cmp && (da != db)) { if ((unsigned long)da < ((unsigned long)db)) { dstr_ref (da); dstr_unref (db); (*b)._c[spec->fields[nth]]._d = da; } else { dstr_ref (db); dstr_unref (da); (*a)._c[spec->fields[nth]]._d = db; } } if (spec->reverse_p) { cmp = -raw_cmp; } else { cmp = raw_cmp; } if (cmp) return cmp; } return 0; } void rel_uniq_by_field (rel_table * table, int field) { int lim; int dest; int src; lim = rel_n_records (*table); for (dest = 0, src = 0; src < lim; ++dest, ++src) { table->_r[dest] = table->_r[src]; while ((src < (lim - 1)) && !cmp_fields (*table, dest, field, *table, src + 1, field)) { rel_free_record (table->_r[src + 1]); ++src; } } ar_setsize ((void **)&table->_r, 0, dest, sizeof (rel_record)); } rel_table rel_cut (rel_cut_spec fields, rel_table t) { rel_table answer; int lim; int x; answer = rel_table_nil; lim = ar_size ((void *)t._r, 0, sizeof (rel_record)); for (x = 0; x < lim; ++x) { rel_add_records (&answer, rel_cut_record (fields, t._r[x]), rel_record_null); } return answer; } rel_record rel_cut_record (rel_cut_spec fields, rel_record r) { rel_record answer; int x; answer = rel_record_nil; for (x = 0; fields[x] >= 0; ++x) { dstr_ref (r._c[fields[x]]._d); *(rel_field *)ar_push ((void **)&answer._c, 0, sizeof (t_uchar *)) = r._c[fields[x]]; } return answer; } rel_cut_spec rel_cut_list (int field, ...) { va_list fp; rel_cut_spec answer; answer = 0; *(int *)ar_push ((void **)&answer, 0, sizeof (int)) = field; va_start (fp, field); while (1) { field = va_arg (fp, int); *(int *)ar_push ((void **)&answer, 0, sizeof (int)) = field; if (field < 0) break; } va_end (fp); return answer; } static int cmp_fields (rel_table table1, ssize_t r1, ssize_t c1, rel_table table2, ssize_t r2, ssize_t c2) { t_dstr d1; t_dstr d2; int cmp; d1 = table1._r[r1]._c[c1]._d; d2 = table2._r[r2]._c[c2]._d; cmp = dstr_cmp (d1, d2); if (!cmp && (d1 != d2)) { if ((unsigned long)d1 < (unsigned long)d2) { dstr_ref (d1); dstr_unref (d2); table2._r[r2]._c[c2]._d = d1; } else { dstr_ref (d2); dstr_unref (d1); table1._r[r1]._c[c1]._d = d2; } } return cmp; } rel_table rel_join (int absence_table, struct rel_join_output_spec * output, int table1_field, int table2_field, rel_table table1, rel_table table2) { int f1_len; int f2_len; int f1_pos; int f2_pos; int n_output_fields; rel_table answer; /* How curious that such a simple loop can do so many useful things. */ answer = rel_table_nil; f1_len = rel_n_records (table1); f2_len = rel_n_records (table2); for (n_output_fields = 0; output[n_output_fields].table != -1; ++n_output_fields) ; f1_pos = 0; f2_pos = 0; while ((f1_pos < f1_len) || (f2_pos < f2_len)) { int cmp; int want_output; if (f2_pos == f2_len) cmp = -1; else if (f1_pos == f1_len) cmp = 1; else cmp = cmp_fields (table1, f1_pos, table1_field, table2, f2_pos, table2_field); if (absence_table < 0) want_output = !cmp; else if (absence_table == 1) want_output = (cmp < 0); else want_output = (cmp > 0); if (want_output) { rel_record r; rel_record f1_rec; rel_record f2_rec; int x; r = rel_record_nil; f1_rec = ((f1_pos < f1_len) ? table1._r[f1_pos] : r); f2_rec = ((f2_pos < f2_len) ? table2._r[f2_pos] : r); for (x = 0; x < n_output_fields; ++x) { rel_field field; field = (((output[x].table == 1) ? f1_rec : f2_rec) ._c[output[x].field]); dstr_ref (field._d); *(rel_field *)ar_push ((void **)&r._c, 0, sizeof (char *)) = field; } *(rel_record *)ar_push ((void **)&answer._r, 0, sizeof (rel_record)) = r; } if ((f1_pos < f1_len) && (cmp <= 0)) ++f1_pos; if ((f2_pos < f2_len) && (cmp >= 0)) ++f2_pos; } return answer; } struct rel_join_output_spec * rel_join_output (int table, int field, ...) { va_list ap; struct rel_join_output_spec * answer; struct rel_join_output_spec * item; int x; static struct rel_join_output_spec ** cache = 0; answer = 0; for (x = 0; !answer && x < ar_size (cache, 0, sizeof (struct rel_join_output_spec *)); ++x) { item = cache[x]; if (item->table != table || item->field != field) continue; va_start (ap, field); while (1) { int tmp_table; int tmp_field; ++item; tmp_table = va_arg (ap, int); if (tmp_table < 0) tmp_field = -1; else tmp_field = va_arg (ap, int); if (item->table != tmp_table || item->field != tmp_field) break; if (item->table == -1) { answer = cache[x]; break; } } va_end (ap); } if (!answer) { item = (struct rel_join_output_spec *)ar_push ((void **)&answer, 0, sizeof (struct rel_join_output_spec)); item->table = table; item->field = field; va_start (ap, field); while (1) { table = va_arg (ap, int); if (table < 0) break; field = va_arg (ap, int); item = (struct rel_join_output_spec *)ar_push ((void **)&answer, 0, sizeof (struct rel_join_output_spec)); item->table = table; item->field = field; } va_end (ap); item = (struct rel_join_output_spec *)ar_push ((void **)&answer, 0, sizeof (struct rel_join_output_spec)); item->table = -1; item->field = -1; *(struct rel_join_output_spec **)ar_push ((void **)&cache, 0, sizeof (struct rel_join_output_spec *)) = answer; } return answer; } rel_table rel_read_table (int fd, int n_fields, const char * err_name, const char * err_src) { rel_record rec; rel_table answer; answer = rel_table_nil; while (1) { rec = rel_read_record (fd, n_fields, err_name, err_src); if (!rec._c) break; *(rel_record *)ar_push ((void **)&answer._r, 0, sizeof (rel_record)) = rec; } return answer; } static rel_record rel_read_record (int fd, int n_fields, const char * err_name, const char * err_src) { t_uchar * line; long len; t_uchar * pos; int f; rel_record answer; safe_next_line (&line, &len, fd); if (!line) return rel_record_nil; answer = rel_record_nil; ar_setsize ((void **)&answer._c, 0, n_fields, sizeof (rel_field)); pos = line; for (f = 0; f < n_fields; ++f) { while (len && !char_is_space (*pos)) { ++pos; --len; } if (!len || (pos == line)) { if (err_name) { safe_printfmt (2, "%s: ill formated input\n", err_name); safe_printfmt (2, " input source: %s\n", err_src); exit (2); } } answer._c[f]._d = dstr_save_n (0, line, pos - line); while (len && char_is_space (*pos)) { ++pos; --len; } line = pos; } return answer; } void rel_print_table (int fd, rel_table table) { int recs; int r; recs = ar_size ((void *)table._r, 0, sizeof (rel_record)); for (r = 0; r < recs; ++r) rel_print_record (fd, table._r[r]); } void rel_print_pika_escape_iso8859_1_table (int fd, int escape_classes, rel_table table) { int recs; int r; recs = ar_size ((void *)table._r, 0, sizeof (rel_record)); for (r = 0; r < recs; ++r) rel_print_pika_escape_iso8859_1_record (fd, escape_classes, table._r[r]); } void rel_print_table_sp (int fd, rel_table file) { int recs; int r; recs = ar_size ((void *)file._r, 0, sizeof (rel_record)); for (r = 0; r < recs; ++r) rel_print_record_sp (fd, file._r[r]); } void rel_print_pika_escape_iso8859_1_table_sp (int fd, int escape_classes, rel_table file) { int recs; int r; recs = ar_size ((void *)file._r, 0, sizeof (rel_record)); for (r = 0; r < recs; ++r) rel_print_pika_escape_iso8859_1_record_sp (fd, escape_classes, file._r[r]); } static void rel_print_record (int fd, rel_record rec) { int fields; int f; fields = ar_size ((void *)rec._c, 0, sizeof (rel_field)); for (f = 0; f < fields; ++f) { safe_printfmt (fd, "%s%s", (f ? "\t" : ""), dstr_data (0, rec._c[f]._d)); } if (f) safe_printfmt (fd, "\n"); } static void rel_print_pika_escape_iso8859_1_record (int fd, int escape_classes, rel_record rec) { int fields; int f; fields = ar_size ((void *)rec._c, 0, sizeof (rel_field)); for (f = 0; f < fields; ++f) { t_uchar * item; item = pika_save_escape_iso8859_1 (0, 0, escape_classes, dstr_data (0, rec._c[f]._d)); safe_printfmt (fd, "%s%s", (f ? "\t" : ""), item); lim_free (0, item); } if (f) safe_printfmt (fd, "\n"); } static void rel_print_record_sp (int fd, rel_record rec) { int fields; int f; fields = ar_size ((void *)rec._c, 0, sizeof (rel_field)); for (f = 0; f < fields; ++f) { safe_printfmt (fd, "%s%s", (f ? " " : ""), dstr_data (0, rec._c[f]._d)); } if (f) safe_printfmt (fd, "\n"); } static void rel_print_pika_escape_iso8859_1_record_sp (int fd, int escape_classes, rel_record rec) { int fields; int f; fields = ar_size ((void *)rec._c, 0, sizeof (rel_field)); for (f = 0; f < fields; ++f) { t_uchar * item; item = pika_save_escape_iso8859_1 (0, 0, escape_classes, dstr_data (0, rec._c[f]._d)); safe_printfmt (fd, "%s%s", (f ? " " : ""), item); lim_free (0, item); } if (f) safe_printfmt (fd, "\n"); } rel_table rel_table_substract (rel_table t, rel_table t2) { rel_table answer = rel_table_nil; int lim; int x; lim = rel_n_records (t); for (x = 0; x < lim; ++x) { if (!rel_table_contains(t2, t._r[x])) *(rel_record *)ar_push ((void **)&answer._r, 0, sizeof (rel_record)) = rel_copy_record (t._r[x]); } return answer; } int rel_table_contains(rel_table t, rel_record r) { /* assuming the table is one column only */ int lim; int x; t_dstr d1; t_dstr d2; d2 = r._c[0]._d; lim = rel_n_records(t); for (x = 0; x < lim; x++) { d1 = t._r[x]._c[0]._d; if (dstr_cmp(d1, d2) == 0) return 1; } return 0; } /* tag: Tom Lord Mon May 5 12:50:00 2003 (relational.c) */ tla-1.3.5+dfsg/src/tla/libawk/relassoc.h0000644000175000017500000000112310457622000016532 0ustar useruser/* relassoc.h: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBAWK__RELASSOC_H #define INCLUDE__LIBAWK__RELASSOC_H #include "tla/libawk/relational.h" #include "tla/libawk/associative.h" /* automatically generated __STDC__ prototypes */ extern assoc_table rel_to_assoc (rel_table t, int k, int v); #endif /* INCLUDE__LIBAWK__RELASSOC_H */ /* tag: Tom Lord Sat Jan 5 15:26:10 2002 (relassoc.h) */ tla-1.3.5+dfsg/src/tla/libawk/associative.c0000644000175000017500000001023110457622000017224 0ustar useruser/* associative.c: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/hash/hashtree.h" #include "hackerlab/hash/hash-utils.h" #include "hackerlab/char/dstr.h" #include "hackerlab/char/str.h" #include "tla/libawk/associative.h" /* __STDC__ prototypes for static functions */ static t_ulong hash_key (rel_field k); static int dstr_key_eq (void * va, void * vb, struct hashtree_rules * r); static struct hashtree_item * dstr_item_alloc (void * vkey, struct hashtree_rules * rules); static void assoc_table_hashfree_fn (struct hashtree_item * it, struct hashtree_rules * rules); static struct hashtree_rules assoc_rules = { dstr_key_eq, 0, 0, dstr_item_alloc, 0, 0 }; void assoc_set_taking (assoc_table * vtable, rel_field key, rel_field value) { struct hashtree * table; struct hashtree_item * item; table = *(struct hashtree **)vtable; if (!table) { table = hashtree_alloc (&assoc_rules); *vtable = (assoc_table)table; } item = hashtree_store (table, hash_key (key), (void *)key._d, &assoc_rules); dstr_unref ((t_dstr)item->key); item->key = (void *)key._d; dstr_unref ((t_dstr)item->binding); item->binding = (void *)value._d; } rel_field assoc_get_taking (assoc_table vtable, rel_field key) { struct hashtree * table; struct hashtree_item * item; rel_field answer; table = (struct hashtree *)vtable; if (!table) { dstr_unref (key._d); return rel_field_nil; } item = hashtree_find (table, hash_key (key), (void *)key._d, &assoc_rules); if (!item) { dstr_unref (key._d); return rel_field_nil; } if (key._d == (t_dstr)item->key) { dstr_unref (key._d); } else { if ((unsigned long)key._d < (unsigned long)(t_dstr)item->key) { dstr_unref ((t_dstr)item->key); item->key = key._d; } else { dstr_unref (key._d); } } answer._d = (t_dstr) item->binding; dstr_ref (answer._d); return answer; } const t_uchar * assoc_get_str_taking (assoc_table vtable, rel_field key) { rel_field f; const t_uchar * answer; f = assoc_get_taking (vtable, key); answer = rel_field_str (f); dstr_unref (f._d); return answer; } void assoc_del_taking (assoc_table vtable, rel_field key) { struct hashtree * table; struct hashtree_item * item; table = (struct hashtree *)vtable; if (!table) return; item = hashtree_find (table, hash_key (key), (void *)key._d, &assoc_rules); dstr_unref (key._d); if (!item) return; dstr_unref ((t_dstr)item->key); dstr_unref ((t_dstr)item->binding); hashtree_delete (item, &assoc_rules); } void free_assoc_table (assoc_table table) { if (table) hashtree_free ((struct hashtree *)table, assoc_table_hashfree_fn, &assoc_rules); } static t_ulong hash_key (rel_field k) { /* From GNU Emacs via Stephen Turnbull. Fair use? * (GPL, anyway....) */ t_uchar c; t_ulong hash; const t_uchar * key; hash = 0; key = dstr_data (0, k._d); if (!key) return 0xde7a115L; while (*key) { c = *key; ++key; if (c >= 0140) c -= 40; /* I dunno why either -tl */ hash = ((hash << 3) + (hash >> 28) + c); } return hash; } static int dstr_key_eq (void * va, void * vb, struct hashtree_rules * r) { t_dstr a; t_dstr b; a = (t_dstr)va; b = (t_dstr)vb; return !dstr_cmp (a, b); } static struct hashtree_item * dstr_item_alloc (void * vkey, struct hashtree_rules * rules) { t_dstr key; struct hashtree_item * it; key = (t_dstr)vkey; it = (struct hashtree_item *)lim_malloc (0, sizeof (*it)); dstr_ref (key); it->key = (void *)key; it->binding = 0; return it; } static void assoc_table_hashfree_fn (struct hashtree_item * it, struct hashtree_rules * rules) { dstr_unref ((t_dstr)it->key); dstr_unref ((t_dstr)it->binding); } /* tag: Tom Lord Mon May 5 17:29:01 2003 (associative.c) */ tla-1.3.5+dfsg/src/tla/libawk/relational.h0000644000175000017500000001556310457622000017066 0ustar useruser/* relational.h: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__FILE_UTILS__RELATIONAL_H #define INCLUDE__FILE_UTILS__RELATIONAL_H #include "hackerlab/machine/types.h" #include "hackerlab/char/dstr.h" extern int rel_make_record; struct rel_field { t_dstr _d; }; typedef struct rel_field rel_field; struct rel_record { rel_field * _c; }; typedef struct rel_record rel_record; extern const rel_record rel_record_null; struct rel_table { rel_record * _r; }; typedef struct rel_table rel_table; #ifndef REL_STATIC_DEFNS #define REL_STATIC_DEFNS static const rel_field rel_field_nil = { 0 }; static const rel_record rel_record_nil = { 0 }; static const rel_table rel_table_nil = { 0 }; #endif struct rel_join_output_spec { int table; int field; }; typedef int * rel_cut_spec; /* automatically generated __STDC__ prototypes */ extern int rel_n_records (rel_table r); extern int rel_n_fields (rel_record r); extern rel_record rel_peek_record (rel_table r, ssize_t row); extern rel_field rel_get_field (rel_table r, ssize_t row, ssize_t col); extern t_dstr rel_get_dstr (rel_table r, ssize_t row, ssize_t col); extern t_dstr rel_peek_dstr (rel_table r, ssize_t row, ssize_t col); extern const t_uchar * rel_peek_str (rel_table r, ssize_t row, ssize_t col); extern t_dstr rel_rec_peek_dstr (rel_record rec, ssize_t col); extern const t_uchar * rel_rec_peek_str (rel_record rec, ssize_t col); extern int rel_set_taking (rel_table r, ssize_t row, ssize_t col, rel_field d); extern int rel_set_record (rel_table r, ssize_t row, rel_record rec); extern rel_record rel_make_record_0 (void); extern rel_record rel_make_record_1_taking (rel_field f0); extern rel_record rel_make_record_2_taking (rel_field f0, rel_field f1); extern rel_record rel_make_record_3_taking (rel_field f0, rel_field f1, rel_field f2); extern rel_record rel_make_record_4_taking (rel_field f0, rel_field f1, rel_field f2, rel_field f3); extern rel_record rel_make_record_5_taking (rel_field f0, rel_field f1, rel_field f2, rel_field f3, rel_field f4); extern rel_record rel_make_record_6_taking (rel_field f0, rel_field f1, rel_field f2, rel_field f3, rel_field f4, rel_field f5); extern rel_record rel_make_record_7_taking (rel_field f0, rel_field f1, rel_field f2, rel_field f3, rel_field f4, rel_field f5, rel_field f6); extern rel_record rel_make_record_8_taking (rel_field f0, rel_field f1, rel_field f2, rel_field f3, rel_field f4, rel_field f5, rel_field f6, rel_field f7); extern void rel_add_records (rel_table * table, ...); /* must terminate list with rel_record_null, NOT 0 or NULL ! */ extern void rel_add_field_taking (rel_record * r, rel_field field); extern void rel_add_field_to_row_taking (rel_table table, ssize_t row, rel_field field); extern rel_record rel_singleton_record_taking (rel_field field); extern void rel_free_table (rel_table t); extern void rel_free_record (rel_record r); extern rel_field rel_field_ref (rel_field f); extern void rel_field_unref (rel_field f); extern const t_uchar * rel_field_str (rel_field f); extern rel_field rel_make_field_str (const t_uchar * s); extern rel_field rel_make_field_str_n (const t_uchar * s, ssize_t len); extern rel_table rel_ws_split (const t_uchar * string); extern rel_table rel_nl_split (const t_uchar * string); extern rel_table rel_copy_table (rel_table t); extern rel_record rel_copy_record (rel_record r); extern void rel_append_x (rel_table * out, rel_table t); extern void rel_reverse_table (rel_table t); extern void rel_sort_table_by_field (int reverse_p, rel_table t, int field_n); extern void rel_sort_table_by_field_fn (int reverse_p, rel_table t, int field_n, int (*fn)(const t_uchar *, const t_uchar *)); extern void rel_sort_table_by_fields (int reverse_p, rel_table t, int * fields); extern int * rel_sort_fields (int f, ...); extern void rel_uniq_by_field (rel_table * table, int field); extern rel_table rel_cut (rel_cut_spec fields, rel_table t); extern rel_record rel_cut_record (rel_cut_spec fields, rel_record r); extern rel_cut_spec rel_cut_list (int field, ...); extern rel_table rel_join (int absence_table, struct rel_join_output_spec * output, int table1_field, int table2_field, rel_table table1, rel_table table2); extern struct rel_join_output_spec * rel_join_output (int table, int field, ...); extern rel_table rel_read_table (int fd, int n_fields, const char * err_name, const char * err_src); extern void rel_print_table (int fd, rel_table table); extern void rel_print_pika_escape_iso8859_1_table (int fd, int escape_classes, rel_table table); extern void rel_print_table_sp (int fd, rel_table file); extern void rel_print_pika_escape_iso8859_1_table_sp (int fd, int escape_classes, rel_table file); extern rel_table rel_table_substract (rel_table t, rel_table t2); extern int rel_table_contains(rel_table t, rel_record r); #endif /* INCLUDE__FILE_UTILS__RELATIONAL_H */ /* tag: Tom Lord Sat Jan 5 15:26:10 2002 (relational.h) */ tla-1.3.5+dfsg/src/tla/libawk/relassoc.c0000644000175000017500000000111710457622000016530 0ustar useruser/* relassoc.c: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "tla/libawk/relassoc.h" assoc_table rel_to_assoc (rel_table t, int k, int v) { int lim; int x; assoc_table answer = 0; lim = rel_n_records (t); for (x = 0; x < lim; ++x) assoc_set_taking (&answer, rel_get_field (t, x, k), rel_get_field (t, x, v)); return answer; } /* tag: Tom Lord Thu May 15 14:41:16 2003 (relassoc.c) */ tla-1.3.5+dfsg/src/tla/libawk/Makefile.in0000644000175000017500000000014210457622000016613 0ustar useruser include $(makefiles)/library.mk # tag: Tom Lord Mon May 12 09:26:16 2003 (libawk/Makefile.in) # tla-1.3.5+dfsg/src/tla/libawk/PLUGIN/0000755000175000017500000000000010457622000015547 5ustar userusertla-1.3.5+dfsg/src/tla/libawk/PLUGIN/REQ0000644000175000017500000000001710457622000016117 0ustar useruserlibawk libawk tla-1.3.5+dfsg/src/tla/libawk/associative.h0000644000175000017500000000217410457622000017240 0ustar useruser/* associative.h: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__FILE_UTILS__ASSOCIATIVE_H #define INCLUDE__FILE_UTILS__ASSOCIATIVE_H #include "hackerlab/machine/types.h" #include "tla/libawk/relational.h" typedef struct assoc_table_incomplete_type * assoc_table; /* automatically generated __STDC__ prototypes */ extern void assoc_set_taking (assoc_table * vtable, rel_field key, rel_field value); extern rel_field assoc_get_taking (assoc_table vtable, rel_field key); extern const t_uchar * assoc_get_str_taking (assoc_table vtable, rel_field key); extern void assoc_del_taking (assoc_table vtable, rel_field key); extern void free_assoc_table (assoc_table table); #endif /* INCLUDE__FILE_UTILS__ASSOCIATIVE_H */ /* tag: Tom Lord Sat Jan 5 15:26:10 2002 (associative.h) */ tla-1.3.5+dfsg/src/tla/libdate/0000755000175000017500000000000010457622000014704 5ustar userusertla-1.3.5+dfsg/src/tla/libdate/date-string.c0000644000175000017500000000220310457622000017266 0ustar useruser/* date-string.c: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include "hackerlab/bugs/panic.h" #include "hackerlab/os/time.h" #include "hackerlab/char/str.h" #include "hackerlab/mem/alloc-limits.h" #include "tla/libdate/date-string.h" t_uchar * pretty_date (time_t t) { struct tm local; struct tm * localp; t_uchar buf[128]; size_t len; t_uchar * answer = 0; localp = localtime (&t); invariant (!!localp); local = *localp; len = strftime (buf, sizeof (buf), "%a %b %e %H:%M:%S %Z %Y", &local); invariant (len); answer = str_save (0, buf); return answer; } t_uchar * standard_date (time_t t) { struct tm gm; struct tm * gmp; t_uchar buf[128]; size_t len; t_uchar * answer = 0; gmp = gmtime (&t); invariant (!!gmp); gm = *gmp; len = strftime (buf, sizeof (buf), "%Y-%m-%d %H:%M:%S GMT", &gm); invariant (len); answer = str_save (0, buf); return answer; } /* tag: Tom Lord Sun May 25 11:41:15 2003 (date-string.c) */ tla-1.3.5+dfsg/src/tla/libdate/date-string.h0000644000175000017500000000113310457622000017274 0ustar useruser/* date-string.h: * **************************************************************** * Copyright (C) 2003 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #ifndef INCLUDE__LIBDATE__DATE_STRING_H #define INCLUDE__LIBDATE__DATE_STRING_H #include "hackerlab/machine/types.h" /* automatically generated __STDC__ prototypes */ extern t_uchar * pretty_date (time_t t); extern t_uchar * standard_date (time_t t); #endif /* INCLUDE__LIBDATE__DATE_STRING_H */ /* tag: Tom Lord Sat Jan 5 15:26:10 2002 (date-string.h) */ tla-1.3.5+dfsg/src/tla/libdate/Makefile.in0000644000175000017500000000014310457622000016747 0ustar useruser include $(makefiles)/library.mk # tag: Tom Lord Sun May 25 11:40:55 2003 (libdate/Makefile.in) # tla-1.3.5+dfsg/src/tla/libdate/PLUGIN/0000755000175000017500000000000010457622000015702 5ustar userusertla-1.3.5+dfsg/src/tla/libdate/PLUGIN/REQ0000644000175000017500000000002110457622000016245 0ustar useruserlibdate libdate tla-1.3.5+dfsg/src/tla/=gpg-check.awk0000744000175000017500000000131010457622000015725 0ustar useruser#!/usr/bin/gawk -f /-----BEGIN PGP SIGNED MESSAGE-----/ { if (first_line_seen) { bogosity = 1; exit; } else { print $0 | gpg_command; first_line_seen = 1; } next; } /-----END PGP SIGNATURE-----/ { if (!first_line_seen) { bogosity = 1; exit; } else { print $0 | gpg_command; last_line_seen = 1; } next; } { if (!first_line_seen || last_line_seen) { bogosity = 1; exit; } else { print $0 | gpg_command; } next; } END { if (bogosity || close(gpg_command)) { exit 1; } else { exit 0; } } # tag: Tom Lord Mon Jan 26 19:49:35 2004 (tla/=gpg-check.awk) # tla-1.3.5+dfsg/src/tla/PLUGIN/0000755000175000017500000000000010457622000014276 5ustar userusertla-1.3.5+dfsg/src/tla/PLUGIN/REQ0000644000175000017500000000003310457622000014644 0ustar useruserhackerlab tla libneon tla tla-1.3.5+dfsg/src/tla/PLUGIN/DIRS0000644000175000017500000000000010457622000014750 0ustar userusertla-1.3.5+dfsg/src/tla/PLUGIN/options0000644000175000017500000000141510457622000015715 0ustar useruser string tla-bug-mail gnu-arch-users@gnu.org To what email address should tla bug reports be sent? string tla-web-url http://www.gnu.org/software/gnu-arch URL for more information. string gnu-diff diff The name or path of the locally installed GNU diff binary string gnu-patch patch The name or path of the locally installed GNU patch binary string gnu-diff3 diff3 The name or path of the locally installed GNU diff3 binary string gnu-tar tar The name or path of the locally installed GNU tar binary string ssh-type openssh The type of SSH implementation available: `lsh', `openssh', `psftp' or `fsecure'. string ssh-binary ssh The name/path of the SSH executable. binary enable-pathcompress 0 Enable pathcompress (on CYGWIN32) tla-1.3.5+dfsg/src/tla/PLUGIN/auto0000644000175000017500000000021710457622000015171 0ustar useruser ;; Make sure we got a good diff and diff3 ;; nonl-safe-diff gnu-diff gnu-diff3 ;; And a good GNU patch, too ;; gnu-patch-test gnu-patch tla-1.3.5+dfsg/src/tla/tests/0000755000175000017500000000000010457622000014442 5ustar userusertla-1.3.5+dfsg/src/tla/tests/test-framework0000644000175000017500000002232610457622000017344 0ustar useruser# -*- mode: sh; coding: utf-8 -*- # Various functions for tla testsuite # Copyright © 2003 Colin Walters # # See the file "COPYING" for further information about # the copyright and warranty status of this work. set -e builddir=$(pwd) TESTNUM=1 verbose () { if test -n "$TESTS_VERBOSE"; then echo "$@" >&2 fi } verbosecmd () { if test -n "$TESTS_VERBOSE"; then echo "=>" "$@" >&2 fi } tla () { verbosecmd "${builddir}/../tla/tla" "$@" ${builddir}/../tla/tla "$@" } test_class () { echo "" echo "======= TESTING: $@ =======" >&2 if test -z "$TESTS_VERBOSE"; then exec 1>/dev/null fi } begin_test_savectx () { echo "Test $TESTNUM: $@" >&2 } begin_test () { begin_test_savectx "$@" _begin_test_dir="$(pwd)" mkdir test-$TESTNUM-workdir cd test-$TESTNUM-workdir } end_test_savectx () { echo "Test $TESTNUM: PASS" >&2 TESTNUM=$(($TESTNUM + 1)) } end_test () { end_test_savectx "$@" cd "${_begin_test_dir}" rm -rf test-$TESTNUM-workdir } test_fail () { # Failures display error message and exit # usage: test_fail "where: why" echo "Test $TESTNUM: FAILED: $@" >&2 exit 1 } # Is there a portable way to do this? # trap "test_fail" ERR clean_workdir () { verbose '! cleaning workdir' rm -rf archivedir rm -rf workdir rm -rf homedir } setup_workdir () { clean_workdir verbose '! setting up workdir' mkdir archivedir ARCHIVEDIR=$(pwd)/archivedir export ARCHIVEDIR mkdir workdir WORKDIR=$(pwd)/workdir export WORKDIR mkdir homedir HOME=$(pwd)/homedir # we do this so we don't mess with the user's archives export HOME cd workdir cd $(if test -x /bin/pwd; then /bin/pwd; else pwd; fi) # canonicalize } initial_setup () { setup_workdir verbose '! doing initial setup' tla my-id 'Jane Doe ' } setup_with_empty_archives () { initial_setup verbose '! creating empty archives' tla make-archive --baz jane@example.com--2003 ${ARCHIVEDIR}/jane-archive tla make-archive --baz foo@example.org--2003 ${ARCHIVEDIR}/foo-archive } setup_with_empty_tla_archives () { initial_setup verbose '! creating empty archives' tla make-archive --tla jane@example.com--2003 ${ARCHIVEDIR}/jane-archive tla make-archive --tla foo@example.org--2003 ${ARCHIVEDIR}/foo-archive } setup_with_setup_archives () { initial_setup verbose '! creating and setting up archives' tla make-archive --baz jane@example.com--2003 ${ARCHIVEDIR}/jane-archive 1>/dev/null tla make-archive --baz foo@example.org--2003 ${ARCHIVEDIR}/foo-archive 1>/dev/null } setup_with_setup_tla_archives () { initial_setup verbose '! creating and setting up archives' tla make-archive --tla jane@example.com--2003 ${ARCHIVEDIR}/jane-archive 1>/dev/null tla archive-setup jane@example.com--2003/hello-world--mainline--1.0 1>/dev/null tla archive-setup jane@example.com--2003/cat--bar--1.1 1>/dev/null tla archive-setup jane@example.com--2003/cow--baz--2.3 1>/dev/null tla make-archive --tla foo@example.org--2003 ${ARCHIVEDIR}/foo-archive 1>/dev/null tla archive-setup foo@example.org--2003/hello-world--devo--1.3 1>/dev/null } make_hello_world () { dir=$1 shift mkdir "$dir" (echo '#include '; echo '#include '; echo 'int main(int argc, char **argv) {'; echo ' printf("Hello world!");'; echo 'exit (0);'; echo '}') > "${dir}"/hello-world.c echo 'This is hello-world, 1.0' > "${dir}"/README } setup_with_trivial_archives () { tagging_method=$1 if test -z "${tagging_method}"; then tagging_method=explicit fi setup_with_setup_archives verbose '! doing initial imports' make_hello_world tmp-tree cd tmp-tree tla init-tree --nested jane@example.com--2003/hello-world--mainline--1.0 tla id-tagging-method "${tagging_method}" 1>/dev/null tla add-id hello-world.c README tla import -S -L 'initial import' 1>/dev/null cd .. rm -rf tmp-tree } setup_with_trivial_tla_archives () { tagging_method=$1 if test -z "${tagging_method}"; then tagging_method=explicit fi setup_with_setup_tla_archives verbose '! doing initial imports' make_hello_world tmp-tree cd tmp-tree tla init-tree --nested jane@example.com--2003/hello-world--mainline--1.0 tla id-tagging-method "${tagging_method}" 1>/dev/null tla add-id hello-world.c README tla import -L 'initial import' 1>/dev/null cd .. rm -rf tmp-tree } setup_with_somewhat_interesting_explicit_archives () { setup_with_setup_archives verbose '! doing initial imports' make_hello_world tmp-tree cd tmp-tree tla init-tree --nested jane@example.com--2003/hello-world--mainline--1.0 tla id-tagging-method explicit 1>/dev/null mkdir new_directory old_directory ln -s old_directory link_to_old_directory ln -s new_directory link_to_new_directory cp hello-world.c goodbye-world.c ln -s README link_to_README ln -s hello-world.c link_to_hello-world.c ln -s goodbye-world.c link_to_goodbye-world.c mkdir -p hierarchy mkdir -p hierarchy/left/left hierarchy/left/right mkdir -p hierarchy/right/left hierarchy/right/right tla add-id $(find hierarchy -type d) tla add-id new_directory old_directory link_to_old_directory link_to_new_directory tla add-id hello-world.c goodbye-world.c link_to_hello-world.c link_to_goodbye-world.c README link_to_README tla import -S -L 'initial import' 1>/dev/null cd .. rm -rf tmp-tree } setup_with_somewhat_interesting_explicit_tla_archives () { setup_with_setup_tla_archives verbose '! doing initial imports' make_hello_world tmp-tree cd tmp-tree tla init-tree --nested jane@example.com--2003/hello-world--mainline--1.0 tla id-tagging-method explicit 1>/dev/null mkdir new_directory old_directory ln -s old_directory link_to_old_directory ln -s new_directory link_to_new_directory cp hello-world.c goodbye-world.c ln -s README link_to_README ln -s hello-world.c link_to_hello-world.c ln -s goodbye-world.c link_to_goodbye-world.c mkdir -p hierarchy mkdir -p hierarchy/left/left hierarchy/left/right mkdir -p hierarchy/right/left hierarchy/right/right tla add-id $(find hierarchy -type d) tla add-id new_directory old_directory link_to_old_directory link_to_new_directory tla add-id hello-world.c goodbye-world.c link_to_hello-world.c link_to_goodbye-world.c README link_to_README tla import -L 'initial import' 1>/dev/null cd .. rm -rf tmp-tree } ### Utility functions copy_tree () { tar_prog=$("$srcroot/build-tools/scripts/option" gnu-tar) export tar_prog (cd $1 ; "$tar_prog" cf - .) | (mkdir -p $2 ; cd $2 ; "$tar_prog" xf -) } compare_trees_simple () { verbosecmd 'diff -uNr -x ,*' "$@" diff -uNr -x ',*' "$@" } assert_trees_equal () { output=",what-changed-$$" tla mkpatch "$1" "$2" "${output}" changeset_is_null_changeset "${output}" } assert_working_tree_equivalence () { diff -uNr -x ',*' -x '{arch}' "$@" } dir_exists () { verbosecmd test -d "$1" test -d "$1" } file_exists () { verbosecmd test -f "$1" test -f "$1" } file_is_empty () { f=$1 shift verbosecmd "test -f $f && test ! -s $f" test -f "$f" && test ! -s "$f" } dir_is_empty () { d=$1 shift verbosecmd 'test -z $(ls ' "$d"')' test -z "$(ls "$d")" } file_matches () { verbosecmd egrep "$1" "$2" egrep "$1" "$2" 1>/dev/null } archive_has_revision_with_summary () { archive=$1 revision=$2 summary=$3 location=$(tla whereis-archive "$archive") category=$(tla parse-package-name -c $revision) branch=$(tla parse-package-name -b $revision) version=$(tla parse-package-name -v $revision) patchlvl=$(tla parse-package-name -l $revision) filename="${location}/${category}--${branch}--${version}/${patchlvl}/log" file_exists "${filename}" file_matches '^Summary: '"${summary}" "${filename}" } missing_patches_are () { archive=$1 shift tla whats-missing "${archive}" >,whats-missing for patch in "$@"; do sed -e "/$patch/d" <,whats-missing >,whats-missing.new mv ,whats-missing.new ,whats-missing done file_is_empty ,whats-missing } changeset_is_null_changeset () { cset=$1 shift verbose "testing for null changeset $cset" file_is_empty "${cset}/mod-dirs-index" file_is_empty "${cset}/mod-files-index" file_is_empty "${cset}/modified-only-dir-metadata" dir_is_empty "${cset}/new-files-archive" file_is_empty "${cset}/modified-only-dir-metadata" dir_is_empty "${cset}/patches" dir_is_empty "${cset}/removed-files-archive" } changeset_patches_file () { cset=$1 shift file=$1 shift verbosecmd "${cset}/patches/${file}.patch" test -f "${cset}/patches/${file}.patch" } changeset_adds_file () { cset=$1 shift file=$1 shift verbosecmd test -f "${cset}/new-files-archive/${file}" test -f "${cset}/new-files-archive/${file}" } changeset_deletes_file () { cset=$1 shift file=$1 shift verbosecmd test -f "${cset}/removed-files-archive/${file}" test -f "${cset}/removed-files-archive/${file}" } changeset_renames_file () { cset=$1 shift origfile=$1 shift newfile=$1 shift verbosecmd egrep "^${origfile}" "${cset}/orig-files-index" egrep "^\./${origfile}" "${cset}/orig-files-index" 1>/dev/null verbosecmd egrep "^${newfile}" "${cset}/mod-files-index" egrep "^\./${newfile}" "${cset}/mod-files-index" 1>/dev/null } # tag: Colin Walters Tue, 16 Sep 2003 20:48:33 -0400 (test-framework.sh) # tla-1.3.5+dfsg/src/tla/tests/jane-and-foo-do-hello-world-2.sh0000644000175000017500000001002010457622000022212 0ustar useruser#!/bin/sh # -*- mode: sh; coding: utf-8 -*- # Jane and foo hack on hello-world together # Copyright © 2003 Colin Walters # # See the file "COPYING" for further information about # the copyright and warranty status of this work. set -e arg0="$0" srcdir=`dirname "$arg0"` . ${srcdir}/test-framework setup_with_trivial_archives setup () { : } cleanup () { cd ${WORKDIR} } test_class "Jane and foo hack on hello-world" begin_test_savectx "Jane checks out her tree" setup mkdir jane cd jane tla get jane@example.com--2003/hello-world--mainline--1.0 hello-world cleanup end_test_savectx begin_test_savectx "Jane adds HACK IT, fixes some grammatical issues" setup cd jane/hello-world echo 'We follow the GNU coding standards' > HACK\ IT tla add-id HACK\ IT sed -e 's/Hello world/Hello, World/' < hello-world.c > hello-world.c.new mv hello-world.c.new hello-world.c tla commit -L 'add HACK IT, fix some grammatical issues' cleanup end_test_savectx begin_test_savectx "foo decides to create a branch from Jane" setup mkdir foo cd foo tla tag -S jane@example.com--2003/hello-world--mainline--1.0 foo@example.org--2003/hello-world--devo--1.3 tla get foo@example.org--2003/hello-world--devo--1.3 hello-world cleanup end_test_savectx begin_test_savectx "foo thinks hello-world.c is better named as 'hello world.c'" setup cd foo/hello-world mv hello-world.c hello\ world.c tla move-id hello-world.c hello\ world.c tla commit -L 'rename hello-world.c to hello\ world.c' cleanup end_test_savectx begin_test_savectx "Jane adds a copyright header" setup cd jane/hello-world (echo '/* Copyright (C) 2003 Jane Doe */'; echo '/* This file is hereby placed into the public domain. */'; cat hello-world.c) > hello-world.c.new mv hello-world.c.new hello-world.c tla commit -L 'add copyright header' cleanup end_test_savectx begin_test_savectx "foo adds AUTHORS" setup cd foo/hello-world echo 'foo ' > AUTHORS echo 'Jane Doe ' >> AUTHORS tla add-id AUTHORS tla commit -L 'add AUTHORS' cleanup end_test_savectx begin_test_savectx "Checkpoint 1" setup tla get jane@example.com--2003/hello-world--mainline--1.0 jane-hello-world.tmp cd jane-hello-world.tmp file_matches 'Copyright.*Jane Doe' hello-world.c file_matches 'Hello, World' hello-world.c file_matches 'We follow.*GNU.*standards' HACK\ IT file_matches 'This is hello-world' README cd .. tla get foo@example.org--2003/hello-world--devo--1.3 foo-hello-world.tmp cd foo-hello-world.tmp file_matches 'Hello, World' hello\ world.c file_matches 'We follow.*GNU.*standards' HACK\ IT file_matches 'This is hello-world' README file_matches 'foo' AUTHORS file_matches 'Jane Doe' AUTHORS cd .. rm -rf jane-hello-world.tmp rm -rf foo-hello-world.tmp cleanup end_test_savectx begin_test_savectx "Jane thinks foo's changes are good, decides to merge" setup cd jane/hello-world tla star-merge foo@example.org--2003/hello-world--devo--1.3 tla commit -L 'merge with foo' file_matches 'Copyright.*Jane Doe' hello\ world.c file_matches 'Hello, World' hello\ world.c file_matches 'foo' AUTHORS file_matches 'Jane Doe' AUTHORS cleanup end_test_savectx begin_test_savectx "Jane puts her name first in AUTHORS" setup cd jane/hello-world (grep 'Jane Doe' AUTHORS && cat AUTHORS | grep -v 'Jane Doe') > AUTHORS.new mv AUTHORS.new AUTHORS tla commit -L 'put my name first in AUTHORS' cleanup end_test_savectx begin_test_savectx "foo decides to merge with Jane, despite her antics" setup cd foo/hello-world tla star-merge jane@example.com--2003/hello-world--mainline--1.0 tla commit -L 'merge with jane' cleanup end_test_savectx begin_test_savectx "Jane and foo's trees should be equivalent" setup tla get jane@example.com--2003/hello-world--mainline--1.0 jane-hello-world.tmp tla get foo@example.org--2003/hello-world--devo--1.3 foo-hello-world.tmp assert_working_tree_equivalence jane-hello-world.tmp foo-hello-world.tmp rm -rf jane-hello-world.tmp rm -rf foo-hello-world.tmp cleanup end_test_savectx clean_workdir # tag: Colin Walters, Christian Thaeter Sat Feb 7 08:09:20 CET 2004 (jane-and-foo-do-hello-world-2.sh) # tla-1.3.5+dfsg/src/tla/tests/test-update.sh0000644000175000017500000000211210457622000017231 0ustar useruser#!/bin/sh # -*- mode: sh; coding: utf-8 -*- # Simple update tests # Written by James Blackwell # Copyright © 2004 Canonical Inc # # This file is licensed under the General Public License v2, or at your # preference, any later version. set -e arg0="$0" srcdir=`dirname "$arg0"` . ${srcdir}/test-framework test_class "update" setup_hello_world () { setup_with_trivial_archives tla get jane@example.com--2003/hello-world--mainline--1.0 hello-world-1 cd hello-world-1 sed -e 's/Hello World/Hello, World/' < hello-world.c > hello-world.c.new mv hello-world.c.new hello-world.c tla commit -L 'correctly punctuate' cd .. } begin_test_savectx "solitary update" setup_hello_world tla get jane@example.com--2003/hello-world--mainline--1.0--base-0 hw-2 cd hw-2 tla update cd .. end_test_savectx begin_test_savectx "update with -d dirname" setup_hello_world tla get jane@example.com--2003/hello-world--mainline--1.0--base-0 hw-3 tla update -d hw-3 end_test_savectx "update with -d dirname" # tag: DO_NOT_CHANGE James Blackwell Mon Aug 16 07:02:51 EDT 2004 tla-1.3.5+dfsg/src/tla/tests/test-inventory.sh0000644000175000017500000000413310457622000020011 0ustar useruser#!/bin/sh # -*- mode: sh; coding: utf-8 -*- # Test inventory/tagging method regexps # Copyright © 2003 Colin Walters # # See the file "COPYING" for further information about # the copyright and warranty status of this work. set -e arg0="$0" srcdir=`dirname "$arg0"` . ${srcdir}/test-framework setup_with_trivial_archives test_class "inventory" inventory_has () { class=$1 type=$2 fname=$3 file_matches '^'${class}'[[:space:]]+'${type}'[[:space:]]*'${fname} ../,inventory } begin_test_savectx "simple source inventory" tla get jane@example.com--2003/hello-world--mainline--1.0 hello-world cd hello-world tla inventory > ../,inventory inventory_has 'S' '' 'README' inventory_has 'S' '' 'hello-world\.c' end_test_savectx begin_test_savectx "simple junk inventory" touch ',,test-junk' touch ',other-junk' tla inventory --junk > ../,inventory file_matches ',,test-junk' ../,inventory file_matches ',other-junk' ../,inventory end_test_savectx begin_test_savectx "simple junk and source inventory" tla inventory --kind --source --junk > ../,inventory inventory_has 'S' 'r' 'README' inventory_has 'S' 'r' 'hello-world\.c' inventory_has 'J' 'r' ',,test-junk' inventory_has 'J' 'r' ',other-junk' end_test_savectx begin_test_savectx "default untagged source is precious" touch blargh test "$(tla inventory -p)" = "blargh" end_test_savectx begin_test_savectx "change junk regexp to match \"README\"" tla id-tagging-defaults | egrep -v '^junk' > '{arch}/=tagging-method' echo 'junk ^(,.*)|(README)$' >> '{arch}/=tagging-method' tla inventory --kind --source --junk > ../,inventory inventory_has 'J' 'r' ',,test-junk' inventory_has 'J' 'r' 'README' inventory_has 'S' 'r' 'hello-world\.c' end_test_savectx begin_test_savectx "two junk regexps" tla id-tagging-defaults > '{arch}/=tagging-method' echo 'junk ^README$' >> '{arch}/=tagging-method' tla inventory --kind --source --junk > ../,inventory inventory_has 'J' 'r' ',,test-junk' inventory_has 'J' 'r' 'README' inventory_has 'S' 'r' 'hello-world\.c' end_test_savectx clean_workdir # tag: Colin Walters Sun, 12 Oct 2003 12:43:30 -0400 (test-inventory.sh) # tla-1.3.5+dfsg/src/tla/tests/test-archive-creation.sh0000644000175000017500000000403010457622000021173 0ustar useruser#!/bin/sh # -*- mode: sh; coding: utf-8 -*- # Test archive creation # Copyright © 2003 Colin Walters # # See the file "COPYING" for further information about # the copyright and warranty status of this work. set -e arg0="$0" srcdir=`dirname "$arg0"` . ${srcdir}/test-framework initial_setup test_class "Simple Archive creation" begin_test "Archive creation 1" tla make-archive --baz jane@example.com--2003 $(pwd)/test-archive test "$(tla whereis-archive jane@example.com--2003)" = $(pwd)/test-archive test -d test-archive/=meta-info test "Bazaar archive format 1 0" = "$(cat test-archive/.archive-version )" end_test begin_test "Archive creation 2 (with listing)" tla make-archive --baz --listing jane@example.com--2003b $(pwd)/test-archive2 test "$(tla whereis-archive jane@example.com--2003b)" = $(pwd)/test-archive2 test -d test-archive2/=meta-info test -f test-archive2/.listing test "Bazaar archive format 1 0" = "$(cat test-archive2/.archive-version )" end_test begin_test "TLA Archive creation 1" tla make-archive --tla jane@example.com--2003c $(pwd)/test-archive3 test "$(tla whereis-archive jane@example.com--2003c)" = $(pwd)/test-archive3 test -d test-archive3/=meta-info test "Hackerlab arch archive directory, format version 2." = "$(cat test-archive3/.archive-version )" end_test begin_test "TLA Archive creation 2 (with listing)" tla make-archive --tla --listing jane@example.com--2003d $(pwd)/test-archive4 test "$(tla whereis-archive jane@example.com--2003d)" = $(pwd)/test-archive4 test -d test-archive4/=meta-info test -f test-archive4/.listing test "Hackerlab arch archive directory, format version 2." = "$(cat test-archive4/.archive-version )" end_test begin_test "Archive creation 3 (email contains an underscore before @)" tla make-archive jane_porter@example.com--2004 $(pwd)/test-archive test "$(tla whereis-archive jane_porter@example.com--2004)" = $(pwd)/test-archive test -d test-archive/=meta-info end_test clean_workdir # tag: Colin Walters Tue, 16 Sep 2003 22:31:21 -0400 (test-archive-creation.sh) # tla-1.3.5+dfsg/src/tla/tests/test-get.sh0000644000175000017500000000154610457622000016540 0ustar useruser#!/bin/sh # -*- mode: sh; coding: utf-8 -*- # Test getting working trees # Copyright © 2003 Colin Walters # # See the file "COPYING" for further information about # the copyright and warranty status of this work. set -e arg0="$0" srcdir=`dirname "$arg0"` . ${srcdir}/test-framework setup_with_trivial_tla_archives test_class "get" begin_test "1-arg get" tla get jane@example.com--2003/hello-world--mainline--1.0 test -d hello-world--mainline--1.0--base-0 test -f hello-world--mainline--1.0--base-0/README test -f hello-world--mainline--1.0--base-0/hello-world.c end_test begin_test "2-arg get" tla get jane@example.com--2003/hello-world--mainline--1.0 hello-world test -d hello-world test -f hello-world/README test -f hello-world/hello-world.c end_test clean_workdir # tag: Colin Walters Wed, 17 Sep 2003 00:11:49 -0400 (test-get.sh) # tla-1.3.5+dfsg/src/tla/tests/test-undo.sh0000644000175000017500000000300710457622000016720 0ustar useruser#!/bin/sh # -*- mode: sh; coding: utf-8 -*- # Simple undo tests # Copyright © 2003 Colin Walters # # See the file "COPYING" for further information about # the copyright and warranty status of this work. set -e arg0="$0" srcdir=`dirname "$arg0"` . ${srcdir}/test-framework setup_with_trivial_archives test_class "undo" setup_undo () { tla get jane@example.com--2003/hello-world--mainline--1.0 hello-world copy_tree hello-world hello-world.good cd hello-world } verify_cleanup () { rm -rf ',,undo-1' cd .. compare_trees_simple hello-world hello-world.good rm -rf hello-world.good } begin_test "undoing single file modification" setup_undo sed -e 's/Hello World/Hello, World/' < hello-world.c > hello-world.c.new mv hello-world.c.new hello-world.c tla undo verify_cleanup end_test begin_test "undoing new file addition" setup_undo echo 'We follow the GNU coding standards' > HACKING tla add-id HACKING tla undo verify_cleanup end_test begin_test "Removing existing file" setup_undo rm README tla delete-id README tla undo verify_cleanup end_test begin_test "Moving file" setup_undo mv hello-world.c hello_world.c tla move-id hello-world.c hello_world.c tla undo verify_cleanup end_test begin_test "Undo to earlier patch (abbreviated syntax)" setup_undo sed -e 's/Hello World/Hello, World/' < hello-world.c > hello-world.c.new mv hello-world.c.new hello-world.c tla undo base-0 verify_cleanup end_test clean_workdir # tag: Colin Walters Wed, 17 Sep 2003 12:58:35 -0400 (test-undo.sh) # tla-1.3.5+dfsg/src/tla/tests/test-get-baz.sh0000644000175000017500000000144010457622000017303 0ustar useruser#!/bin/sh # -*- mode: sh; coding: utf-8 -*- # Test getting working trees # Copyright © 2003 Colin Walters # # See the file "COPYING" for further information about # the copyright and warranty status of this work. set -e arg0="$0" srcdir=`dirname "$arg0"` . ${srcdir}/test-framework setup_with_trivial_archives test_class "baz get" begin_test "1-arg get" tla get jane@example.com--2003/hello-world--mainline--1.0 test -d hello-world--mainline--1.0--base-0 test -f hello-world--mainline--1.0--base-0/README test -f hello-world--mainline--1.0--base-0/hello-world.c end_test begin_test "2-arg get" tla get jane@example.com--2003/hello-world--mainline--1.0 hello-world test -d hello-world test -f hello-world/README test -f hello-world/hello-world.c end_test clean_workdir tla-1.3.5+dfsg/src/tla/tests/changeset-tests/0000755000175000017500000000000010457622000017543 5ustar userusertla-1.3.5+dfsg/src/tla/tests/changeset-tests/dir_compare.sh0000700000175000017500000000230610457622000022355 0ustar useruser#!/bin/sh # dir_compare.sh # ################################################################ # Copyright (C) 2003 Robert Anderson and Tom Lord # # See the file "COPYING" for further information about # the copyright and warranty status of this work. # dir1="$1" dir2="$2" # diff -r on files and directories diff -r --exclude ,,\* --exclude ++\* --exclude link\* "$dir1" "$dir2" filesdirs=$? # make symlink target index rm -f ,,link-index1 ,,link-index2 cd "$dir1" find . -name "++*" -prune -o \ -type l -printf "'%p' -> '%l'\n" | sort > ../,,link-index1 cd ../"$dir2" find . -name "++*" -prune -o \ -type l -printf "'%p' -> '%l'\n" | sort > ../,,link-index2 cd .. set +e diff ,,link-index1 ,,link-index2 links=$? set -e if [ $filesdirs -ne 0 ] || [ $links -ne 0 ]; then echo "$1 != $2" exit 1 else echo "dir cmp: ok." exit 0 fi #set +x # make metadata index # cd tree-MOD # find . -name \* -printf "%h/%f %m\n" > ../,,metadata # sort ../,,metadata > ++metadata # rm ../,,metadata # cd ../tree-TARGET # find . -name \* -printf "%h/%f %m\n" > ../,,metadata # sort ../,,metadata > ++metadata # rm ../,,metadata # cd .. # tag: Robert Anderson Sun May 18 18:13:10 PDT 2003 (dir_compare.sh) tla-1.3.5+dfsg/src/tla/tests/changeset-tests/edit-tree-randomly0000600000175000017500000002572010457622000023171 0ustar useruser# edit-tree-randomly: # ################################################################ # Copyright (C) 2003 Robert Anderson and Tom Lord # # See the file "COPYING" for further information about # the copyright and warranty status of this work. # limit_size=yes ADD="tla add" DEL="tla delete" MV="tla move" max_files=15 max_dirs=10 max_symlinks=8 num_edits_bound=100 echo '################################' echo '#' echo '# baseline configuration' echo '#' echo '################################' file_add_chances=72 file_delete_chances=36 file_rename_chances=72 dir_add_chances=72 dir_delete_chances=24 dir_rename_chances=144 symlink_add_chances=72 symlink_delete_chances=36 symlink_rename_chances=72 file_patch_chances=72 symlink_retarget_chances=72 chmod_chances=0 move_file_to_symlink_chances=72 move_symlink_to_file_chances=72 # echo '################################' # echo '#' # echo '# tree-delta configuration' # echo '#' # echo '################################' # # # file_add_chances=72 # file_delete_chances=12 # file_rename_chances=72 # # dir_add_chances=72 # dir_delete_chances=12 # dir_rename_chances=144 # # symlink_add_chances=72 # symlink_delete_chances=12 # symlink_rename_chances=72 # # file_patch_chances=72 # symlink_retarget_chances=72 # chmod_chances=0 # # move_file_to_symlink_chances=72 # move_symlink_to_file_chances=72 random_range=$(( $file_add_chances \ + $file_delete_chances \ + $file_rename_chances \ \ + $dir_add_chances \ + $dir_delete_chances \ + $dir_rename_chances \ \ + $symlink_add_chances \ + $symlink_delete_chances \ + $symlink_rename_chances \ \ + $file_patch_chances \ + $symlink_retarget_chances \ + $chmod_chances \ \ + $move_file_to_symlink_chances \ + $move_symlink_to_file_chances )) file_add () { echo -n "file add: " n_files=`count file` if [ ! -z $limit_size -a "(" $n_files -gt $max_files ")" ] ; then echo "too many files already" continue else newparent=`choose dir` newfile="$newparent/file$RANDOM" check_exists file $newfile echo $RANDOM > $newfile # 1 in 2 files are binary, in the GNU diff sense of the word # type=`random_upto 2` if [ $type -eq 1 ]; then echo -e "$RANDOM\000" > $newfile echo -n "(binary)" fi $ADD $newfile echo "($newfile)" fi } dir_add () { echo -n "dir add: " n_dirs=`count dir` if [ ! -z $limit_size -a "(" $n_dirs -gt $max_dirs ")" ] ; then echo "too many dirs already" continue else parent=`choose dir` newdir=dir$RANDOM check_exists dir $newdir mkdir $parent/$newdir if [ $? -ne 0 ]; then exit 0; fi # might not have permission $ADD $parent/$newdir echo "($parent/$newdir)" fi } symlink_add () { echo -n "symlink add: " n_symlinks=`count link` if [ ! -z $limit_size -a "(" $n_symlinks -gt $max_symlinks ")" ] ; then echo "too many symlinks already" continue else parent=`choose dir` newlink="$parent/link$RANDOM" check_exists link $newlink ntarget_objs=4 target_type=`random_upto $ntarget_objs` case $target_type in 1) target="target$RANDOM" ;; 2) abort_if_none file target=`choose file` ;; 3) target=`choose dir` ;; 4) abort_if_none link target=`choose link` ;; esac ln -s $target $newlink $ADD $newlink echo "$newlink -> $target" fi } file_delete () { abort_if_none file echo -n "file delete: " delfile=`choose file` $DEL $delfile rm -f $delfile echo "($delfile)" } dir_delete () { echo -n "dir delete: " deldir=`choose dir` if [ "$deldir" == "." ]; then echo "(skipping - can't delete .)" continue fi rm -rf $deldir echo "($deldir)" } symlink_delete () { abort_if_none link echo -n "delete symlink: " dellink=`choose link` echo -n "($dellink)" $DEL $dellink rm -f $dellink echo } file_patch () { abort_if_none file echo -n "file patch: " filename=`choose file` set +e echo "$RANDOM" > $filename set -e echo "($filename)" } file_rename () { abort_if_none file echo -n "file rename: " oldname=`choose file` newparent=`choose dir` newname="$newparent/file$RANDOM" check_exists file $newname $MV $oldname $newname mv $oldname $newname echo "($oldname -> $newname)" } move_file_to_symlink () { abort_if_none file echo -n "move file to symlink: " delfile=`choose file` rm -f $delfile # add symlink parent=`choose dir` newlink="$parent/link$RANDOM" target="target$RANDOM" ln -s $target $newlink $MV $delfile $newlink echo "($delfile -> $newlink)" } move_symlink_to_file () { abort_if_none link echo -n "move symlink to file: " newparent=`choose dir` newfile="$newparent/file$RANDOM" check_exists file $newfile dellink=`choose link` rm -f $dellink echo $RANDOM > $newfile # 1 in 2 files are binary type=`random_upto 2` if [ $type -eq 1 ]; then echo -e "$RANDOM\000" > $newfile echo -n "(binary)" fi $MV $dellink $newfile echo "($delfile -> $newlink)" } symlink_rename () { abort_if_none link echo -n "link rename: " oldname=`choose link` newparent=`choose dir` newname="$newparent/link$RANDOM" check_exists link $newname mv $oldname $newname $MV $oldname $newname echo "($oldname -> $newname)" } dir_rename () { # Can't move . oldname=`choose dir` if [ "$oldname" == "." ]; then continue; fi echo -n "dir rename: " newparent=`choose dir` newname="$newparent/dir$RANDOM" check_exists dir $newname # This can fail if the new dir is a subdir of itself set +e mv $oldname $newname 2> /dev/null if [ $? -ne 0 ]; then echo "(randomly generated dir rename is illegal ... skipping)" continue; fi set -e echo "($oldname -> $newname)" } symlink_retarget () { abort_if_none link echo -n "link retarget: " oldlink=`choose link` target="target$RANDOM" rm -f "$oldlink" ln -s $target $oldlink echo "($oldlink -> $target)" } # count a particular type of file # count () { obj=$1 case $obj in file) findtype=f ;; link) findtype=l ;; dir) findtype=d ;; esac rm -rf ,,list find . \ -name "{arch}" -prune -o \ -name ".arch-ids" -prune -o \ -name ",,*" -prune -o \ -name "++*" -prune -o \ -type $findtype -print >> ,,list n=`wc -l ,,list | awk '{print $1}'` echo -n "$n" } # Get a random item from the file, dir, or link lists # choose () { obj=$1 case $obj in file) findtype=f ;; link) findtype=l ;; dir) findtype=d ;; esac rm -rf ,,list find . \ -name "{arch}" -prune -o \ -name ".arch-ids" -prune -o \ -name ",,*" -prune -o \ -name "++*" -prune -o \ -type $findtype -print >> ,,list n=`wc -l ,,list | awk '{print $1}'` num=`random_upto $n` name=`head -n $num ,,list | tail -n 1` echo -n "$name" } abort_if_none () { obj=$1 case $obj in file) findtype=f ;; link) findtype=l ;; dir) findtype=d ;; esac rm -rf ,,list find . \ -name "{arch}" -prune -o \ -name ".arch-ids" -prune -o \ -name ",,*" -prune -o \ -name "++*" -prune -o \ -type $findtype -print >> ,,list num=`wc -l ,,list | awk '{print $1}'` if [ $num -eq 0 ]; then continue; fi } check_exists () { obj=$1 name=$2 case $obj in file) findtype=f ;; link) findtype=l ;; dir) findtype=d ;; esac found=`find . -type $findtype -name $name -print` if [ ! -z "$found" ]; then echo "(skipping: $name already exists)" continue fi } random_upto () { range=$1 num=$(( $RANDOM % $range + 1 )) echo -n "$num" } edit_tree_randomly () { edit_num=1 num_edits=`random_upto $num_edits_bound` while [ $edit_num -lt $num_edits ]; do edit_kind=`random_upto $random_range` if [ $edit_kind -le $file_add_chances ] ; then file_add edit_num=$(( $edit_num + 1)) continue else edit_kind=$(( $edit_kind - $file_add_chances )) fi if [ $edit_kind -le $file_delete_chances ] ; then file_delete edit_num=$(( $edit_num + 1)) continue else edit_kind=$(( $edit_kind - $file_delete_chances )) fi if [ $edit_kind -le $file_rename_chances ] ; then file_rename edit_num=$(( $edit_num + 1)) continue else edit_kind=$(( $edit_kind - $file_rename_chances )) fi if [ $edit_kind -le $dir_add_chances ] ; then dir_add edit_num=$(( $edit_num + 1)) continue else edit_kind=$(( $edit_kind - $dir_add_chances )) fi if [ $edit_kind -le $dir_delete_chances ] ; then dir_delete edit_num=$(( $edit_num + 1)) continue else edit_kind=$(( $edit_kind - $dir_delete_chances )) fi if [ $edit_kind -le $dir_rename_chances ] ; then dir_rename edit_num=$(( $edit_num + 1)) continue else edit_kind=$(( $edit_kind - $dir_rename_chances )) fi if [ $edit_kind -le $symlink_add_chances ] ; then symlink_add edit_num=$(( $edit_num + 1)) continue else edit_kind=$(( $edit_kind - $symlink_add_chances )) fi if [ $edit_kind -le $symlink_delete_chances ] ; then symlink_delete edit_num=$(( $edit_num + 1)) continue else edit_kind=$(( $edit_kind - $symlink_delete_chances )) fi if [ $edit_kind -le $symlink_rename_chances ] ; then symlink_rename edit_num=$(( $edit_num + 1)) continue else edit_kind=$(( $edit_kind - $symlink_rename_chances )) fi if [ $edit_kind -le $file_patch_chances ] ; then file_patch edit_num=$(( $edit_num + 1)) continue else edit_kind=$(( $edit_kind - $file_patch_chances )) fi if [ $edit_kind -le $symlink_retarget_chances ] ; then symlink_retarget edit_num=$(( $edit_num + 1)) continue else edit_kind=$(( $edit_kind - $symlink_retarget_chances )) fi if [ $edit_kind -le $chmod_chances ] ; then chmod edit_num=$(( $edit_num + 1)) continue else edit_kind=$(( $edit_kind - $chmod_chances )) fi if [ $edit_kind -le $move_file_to_symlink_chances ] ; then move_file_to_symlink edit_num=$(( $edit_num + 1)) continue else edit_kind=$(( $edit_kind - $move_file_to_symlink_chances )) fi if [ $edit_kind -le $move_symlink_to_file_chances ] ; then move_symlink_to_file edit_num=$(( $edit_num + 1)) continue else edit_kind=$(( $edit_kind - $move_symlink_to_file_chances )) fi done echo "done editing." } ### Local Variables: ### mode: shell-script ### End: # tag: Robert Anderson Sun May 18 18:13:27 PDT 2003 (edit-tree-randomly) tla-1.3.5+dfsg/src/tla/tests/changeset-tests/edit-tree-randomly-with-spaces0000644000175000017500000002661010457622000025425 0ustar useruser# edit-tree-randomly: # ################################################################ # Copyright (C) 2003 Robert Anderson and Tom Lord # # See the file "COPYING" for further information about # the copyright and warranty status of this work. # limit_size=yes # ADD="$TLA add" # DEL="$TLA delete" # MV="$TLA move" max_files=15 max_dirs=10 max_symlinks=8 num_edits_bound=100 echo '################################' echo '#' echo '# baseline configuration' echo '#' echo '################################' file_add_chances=72 file_delete_chances=36 file_rename_chances=72 dir_add_chances=72 dir_delete_chances=24 dir_rename_chances=144 symlink_add_chances=72 symlink_delete_chances=36 symlink_rename_chances=72 file_patch_chances=72 symlink_retarget_chances=72 chmod_chances=0 move_file_to_symlink_chances=72 move_symlink_to_file_chances=72 # echo '################################' # echo '#' # echo '# tree-delta configuration' # echo '#' # echo '################################' # # # file_add_chances=72 # file_delete_chances=12 # file_rename_chances=72 # # dir_add_chances=72 # dir_delete_chances=12 # dir_rename_chances=144 # # symlink_add_chances=72 # symlink_delete_chances=12 # symlink_rename_chances=72 # # file_patch_chances=72 # symlink_retarget_chances=72 # chmod_chances=0 # # move_file_to_symlink_chances=72 # move_symlink_to_file_chances=72 random_range=$(( $file_add_chances \ + $file_delete_chances \ + $file_rename_chances \ \ + $dir_add_chances \ + $dir_delete_chances \ + $dir_rename_chances \ \ + $symlink_add_chances \ + $symlink_delete_chances \ + $symlink_rename_chances \ \ + $file_patch_chances \ + $symlink_retarget_chances \ + $chmod_chances \ \ + $move_file_to_symlink_chances \ + $move_symlink_to_file_chances )) random_name () { echo "${RANDOM}${RANDOM}x" | sed -e 's/01/\*/g' -e 's/02/\?/g'\ -e 's/03/\+/g' -e 's/04/\[/g' -e 's/05/\]/g' -e "s/06/\"/g"\ -e 's/07/ /g' -e 's/08/\\/g' -e 's/0/ /g' } file_add () { echo -n "file add: " n_files=$(count file) if [ ! -z $limit_size -a "(" $n_files -gt $max_files ")" ] ; then echo "too many files already" continue else newparent="$(choose dir)" newfile="$newparent/file$(random_name)" check_exists file "$newfile" echo $RANDOM > "$newfile" # 1 in 2 files are binary, in the GNU diff sense of the word # type=$(random_upto 2) if [ $type -eq 1 ]; then echo -e "$RANDOM\000" > "$newfile" echo -n "(binary)" fi $ADD "$newfile" echo "($newfile)" fi } dir_add () { echo -n "dir add: " n_dirs=$(count dir) if [ ! -z $limit_size -a "(" $n_dirs -gt $max_dirs ")" ] ; then echo "too many dirs already" continue else parent="$(choose dir)" newdir="dir$(random_name)" check_exists dir "$newdir" mkdir "$parent/$newdir" if [ $? -ne 0 ]; then exit 0; fi # might not have permission $ADD "$parent/$newdir" echo "($parent/$newdir)" fi } symlink_add () { echo -n "symlink add: " n_symlinks=$(count link) if [ ! -z $limit_size -a "(" $n_symlinks -gt $max_symlinks ")" ] ; then echo "too many symlinks already" continue else parent="$(choose dir)" newlink="$parent/link$(random_name)" check_exists link "$newlink" ntarget_objs=4 target_type=$(random_upto $ntarget_objs) case $target_type in 1) target="target$(random_name)" ;; 2) abort_if_none file target="$(choose file)" ;; 3) target="$(choose dir)" ;; 4) abort_if_none link target="$(choose link)" ;; esac ln -s "$target" "$newlink" $ADD "$newlink" echo "$newlink -> $target" fi } file_delete () { abort_if_none file echo -n "file delete: " delfile="$(choose file)" $DEL "$delfile" rm -f "$delfile" echo "($delfile)" } dir_delete () { echo -n "dir delete: " deldir="$(choose dir)" if [ "$deldir" == "." ]; then echo "(skipping - can't delete .)" continue fi rm -rf "$deldir" echo "($deldir)" } symlink_delete () { abort_if_none link echo -n "delete symlink: " dellink="$(choose link)" echo -n "($dellink)" $DEL "$dellink" rm -f "$dellink" echo } file_patch () { abort_if_none file echo -n "file patch: " filename="$(choose file)" set +e echo "$RANDOM" > "$filename" set -e echo "($filename)" } file_rename () { abort_if_none file echo -n "file rename: " oldname="$(choose file)" newparent="$(choose dir)" newname="$newparent/file$(random_name)" check_exists file "$newname" $MV "$oldname" "$newname" mv "$oldname" "$newname" echo "($oldname -> $newname)" } move_file_to_symlink () { abort_if_none file echo -n "move file to symlink: " delfile="$(choose file)" rm -f "$delfile" # add symlink parent="$(choose dir)" newlink="$parent/link$(random_name)" target="target$(random_name)" ln -s "$target" "$newlink" $MV "$delfile" "$newlink" echo "($delfile -> $newlink)" } move_symlink_to_file () { abort_if_none link echo -n "move symlink to file: " newparent="$(choose dir)" newfile="$newparent/file$(random_name)" check_exists file "$newfile" dellink="$(choose link)" rm -f "$dellink" echo $RANDOM > "$newfile" # 1 in 2 files are binary type=$(random_upto 2) if [ $type -eq 1 ]; then echo -e "$RANDOM\000" > "$newfile" echo -n "(binary)" fi $MV "$dellink" "$newfile" echo "($delfile -> $newlink)" } symlink_rename () { abort_if_none link echo -n "link rename: " oldname="$(choose link)" newparent="$(choose dir)" newname="$newparent/link$(random_name)" check_exists link "$newname" mv "$oldname" "$newname" $MV "$oldname" "$newname" echo "($oldname -> $newname)" } dir_rename () { # Can't move . oldname="$(choose dir)" if [ "$oldname" == "." ]; then continue; fi echo -n "dir rename: " newparent="$(choose dir)" newname="$newparent/dir$(random_name)" check_exists dir "$newname" # This can fail if the new dir is a subdir of itself set +e mv "$oldname" "$newname" 2> /dev/null if [ $? -ne 0 ]; then echo "(randomly generated dir rename is illegal ... skipping)" continue; fi set -e echo "($oldname -> $newname)" } symlink_retarget () { abort_if_none link echo -n "link retarget: " oldlink="$(choose link)" target="target$(random_name)" rm -f "$oldlink" ln -s "$target" "$oldlink" echo "($oldlink -> $target)" } # count a particular type of file # count () { obj=$1 case $obj in file) findtype=f ;; link) findtype=l ;; dir) findtype=d ;; esac rm -rf ,,list find . \ -name "{arch}" -prune -o \ -name ".arch-ids" -prune -o \ -name ",,*" -prune -o \ -name "++*" -prune -o \ -type $findtype -print >> ,,list n=$(wc -l ,,list | awk '{print $1}') echo -n "$n" } # Get a random item from the file, dir, or link lists # choose () { obj=$1 case $obj in file) findtype=f ;; link) findtype=l ;; dir) findtype=d ;; esac rm -rf ,,list find . \ -name "{arch}" -prune -o \ -name ".arch-ids" -prune -o \ -name ",,*" -prune -o \ -name "++*" -prune -o \ -type $findtype -print >> ,,list n=$(wc -l ,,list | awk '{print $1}') num=$(random_upto $n) name="$(head -n $num ,,list | tail -n 1)" echo -n "$name" } abort_if_none () { obj=$1 case $obj in file) findtype=f ;; link) findtype=l ;; dir) findtype=d ;; esac rm -rf ,,list find . \ -name "{arch}" -prune -o \ -name ".arch-ids" -prune -o \ -name ",,*" -prune -o \ -name "++*" -prune -o \ -type $findtype -print >> ,,list num=$(wc -l ,,list | awk '{print $1}') if [ $num -eq 0 ]; then continue; fi } check_exists () { obj="$1" name="$2" case $obj in file) findtype=-f ;; link) findtype=-h ;; dir) findtype=-d ;; esac if [ $findtype "$name" ]; then echo "(skipping: $name already exists)" continue fi } random_upto () { range=$1 num=$(( $RANDOM % $range + 1 )) echo -n "$num" } edit_tree_randomly () { edit_num=1 num_edits=$(random_upto $num_edits_bound) while [ $edit_num -lt $num_edits ]; do edit_kind=$(random_upto $random_range) if [ $edit_kind -le $file_add_chances ] ; then file_add edit_num=$(( $edit_num + 1)) continue else edit_kind=$(( $edit_kind - $file_add_chances )) fi if [ $edit_kind -le $file_delete_chances ] ; then file_delete edit_num=$(( $edit_num + 1)) continue else edit_kind=$(( $edit_kind - $file_delete_chances )) fi if [ $edit_kind -le $file_rename_chances ] ; then file_rename edit_num=$(( $edit_num + 1)) continue else edit_kind=$(( $edit_kind - $file_rename_chances )) fi if [ $edit_kind -le $dir_add_chances ] ; then dir_add edit_num=$(( $edit_num + 1)) continue else edit_kind=$(( $edit_kind - $dir_add_chances )) fi if [ $edit_kind -le $dir_delete_chances ] ; then dir_delete edit_num=$(( $edit_num + 1)) continue else edit_kind=$(( $edit_kind - $dir_delete_chances )) fi if [ $edit_kind -le $dir_rename_chances ] ; then dir_rename edit_num=$(( $edit_num + 1)) continue else edit_kind=$(( $edit_kind - $dir_rename_chances )) fi if [ $edit_kind -le $symlink_add_chances ] ; then symlink_add edit_num=$(( $edit_num + 1)) continue else edit_kind=$(( $edit_kind - $symlink_add_chances )) fi if [ $edit_kind -le $symlink_delete_chances ] ; then symlink_delete edit_num=$(( $edit_num + 1)) continue else edit_kind=$(( $edit_kind - $symlink_delete_chances )) fi if [ $edit_kind -le $symlink_rename_chances ] ; then symlink_rename edit_num=$(( $edit_num + 1)) continue else edit_kind=$(( $edit_kind - $symlink_rename_chances )) fi if [ $edit_kind -le $file_patch_chances ] ; then file_patch edit_num=$(( $edit_num + 1)) continue else edit_kind=$(( $edit_kind - $file_patch_chances )) fi if [ $edit_kind -le $symlink_retarget_chances ] ; then symlink_retarget edit_num=$(( $edit_num + 1)) continue else edit_kind=$(( $edit_kind - $symlink_retarget_chances )) fi if [ $edit_kind -le $chmod_chances ] ; then chmod edit_num=$(( $edit_num + 1)) continue else edit_kind=$(( $edit_kind - $chmod_chances )) fi if [ $edit_kind -le $move_file_to_symlink_chances ] ; then move_file_to_symlink edit_num=$(( $edit_num + 1)) continue else edit_kind=$(( $edit_kind - $move_file_to_symlink_chances )) fi if [ $edit_kind -le $move_symlink_to_file_chances ] ; then move_symlink_to_file edit_num=$(( $edit_num + 1)) continue else edit_kind=$(( $edit_kind - $move_symlink_to_file_chances )) fi done echo "done editing." } ### Local Variables: ### mode: shell-script ### End: # tag: Robert Anderson, Christian Thaeter Sat Feb 7 08:50:42 CET 2004 (edit-tree-randomly-with-spaces) tla-1.3.5+dfsg/src/tla/tests/changeset-tests/run-spaces-test.sh0000755000175000017500000000535410457622000023146 0ustar useruser#!/bin/sh # run-test.sh # ################################################################ # Copyright (C) 2003 Robert Anderson and Tom Lord # # See the file "COPYING" for further information about # the copyright and warranty status of this work. # set -e # echo '################################' # echo '#' # echo '# testing larch versions' # echo '#' # echo '################################' # MKPATCH="larch mkpatch" # DOPATCH="larch dopatch" # echo '################################' # echo '#' # echo '# testing larch mkpatch with do-changeset' # echo '#' # echo '################################' # MKPATCH="larch mkpatch" # DOPATCH="do-changeset" # echo '################################' # echo '#' # echo '# testing larch dopatch with changeset' # echo '#' # echo '################################' # MKPATCH="changeset" # DOPATCH="larch dopatch" echo '################################' echo '#' echo '# testing file-utils versions' echo '#' echo '################################' MKPATCH="$TLA mkpatch" DOPATCH="$TLA dopatch" ADD="$TLA add" DEL="$TLA delete" MV="$TLA move" # MKPATCH="valgrind changeset" # DOPATCH="valgrind do-changeset" here=`pwd` # source tree editing functions . edit-tree-randomly-with-spaces # This has to be outside surrounding trees not to have problems with # init-tree. testdir=/var/test/tla-changesets-tests mkdir -p $testdir cd $testdir # Test trees are named tree-N, patchdirs are named patch-N rm -rf tree-* patch-* # Generate tree-0 mkdir tree-0 cd tree-0 $TLA init-tree tree-test--main--1.0 $TLA id-tagging-method explicit sed -e "/^untagged-source/s/ .*/ unrecognized/" \{arch\}/\=tagging-method > \{arch\}/t mv \{arch\}/t \{arch\}/\=tagging-method # Initial state: 1 file filename="$(random_name ./file)" echo "$RANDOM" > "$filename" $ADD "$filename" # Total number of consecutive trees in the test run num_trees=250 tree_num=1 while [ $tree_num -le $num_trees ]; do cd $testdir tree_prev=tree-$(( $tree_num - 1 )) tree=tree-$tree_num printf "\n\n*\n* ORIG=%s MOD=%s\n*\n" "$tree_prev" "$tree" (cd $tree_prev ; tar cf - .) | (mkdir $tree ; cd $tree ; tar xf -) > /dev/null cd $tree # # Do edits (test the empty changeset first) # if [ $tree_num -ne 1 ] ; then edit_tree_randomly fi cd .. (cd $tree_prev ; tar cvf - . 2>/dev/null) | (mkdir $tree-TARGET ; cd $tree-TARGET ; tar xf -) > /dev/null printf "\n** mkpatch\n\n" $MKPATCH $tree_prev $tree patch-$tree_num printf "\n** dopatch\n\n" $DOPATCH patch-$tree_num $tree-TARGET printf "\n** compare\n\n" $here/dir_compare.sh $tree $tree-TARGET tree_num=$(( $tree_num + 1 )) done # tag: Robert Anderson, Christian Thaeter Sat Feb 7 08:53:53 CET 2004 (run-spaces-test.sh) tla-1.3.5+dfsg/src/tla/tests/changeset-tests/README0000644000175000017500000000401010457622000020416 0ustar useruser Bob's changeset Test Rig These are (one version of) the scripts we've been using to do "burn-in" testing on the changeset/do-changeset tools and larch's mkpatch/dopatch. They are not yet integrated into the configure/build system of this package -- you have to run them by hand. Briefly, these perform end-to-end checks on the changeset tools as follows: a) generate an ORIG tree with some random elements b) copy ORIG to make a MOD tree. perform a randomly selected bunch of edits on this tree (add and delete files, directories, and symlinks, change file contents, rename things, etc.). c) generate a changeset from ORIG to MOD d) copy ORIG to make TARGET e) apply the changeset to TARGET f) compare MOD and TARGET g) assign ORIG = NEW-ORIG h) goto step (b) There are various parameters you can tweak in the source code (e.g., changing the relatively likelihood of various edit operations). As well, you test changeset/do-changeset or mkpatch/dopatch or mkpatch/do-changeset or changeset/do-patch. WARNING: skim the code a bit first. There is a hard-wired path in run-tests.sh script -- the script will create files under that directory AND `rm -rf' files under that directory: so read first and run with caution. Thanks to Robert Anderson for writing this suite and spending a number of long nights on IRC as he sent me failed test cases (often carefully minimized by hand) and I pushed back fixes to my archive mirror. WHAT YOU CAN DO *) Play with the parameters and do some long test runs. *) Look for ways to verify and/or improve test case coverage. *) Work on making it portable among posix shells (e.g., don't rely on $RANDOM) *) Generalize the tests to test other tagging methods. *) Derive some new tests from this to test the archive transaction commands: imprev, cmtrev, tagrev, and getrev. *) Generalize the tests to test auto-changelogs *) Other clever and helpful things :-) # tag: Tom Lord Sat Jun 7 11:30:20 2003 (changeset-tests/README) # tla-1.3.5+dfsg/src/tla/tests/changeset-tests/chmod_random0000700000175000017500000000212010457622000022104 0ustar useruser#!/bin/sh # chmod_random # ################################################################ # Copyright (C) 2003 Robert Anderson and Tom Lord # # See the file "COPYING" for further information about # the copyright and warranty status of this work. # #set -x # u,g,o range=3 mult=$(( 32767 / $range )) who_num=$(( $RANDOM / $mult + 1 )) case $who_num in 1) who="u" ;; 2) who="g" ;; 3) who="o" ;; esac # +,- range=2 mult=$(( 32767 / $range )) sign_num=$(( $RANDOM / $mult + 1 )) if [ $sign_num -eq 1 ]; then sign="+" else sign="-" fi # r,w,x,s,X,t range=3 mult=$(( 32767 / $range )) what_num=$(( $RANDOM / $mult + 1 )) case $what_num in 1) what="r" ;; 2) what="w" ;; 3) what="x" ;; 4) what="s" ;; 5) what="X" ;; 6) what="t" ;; esac # Constraints if [ "$who$sign$what" == "u-r" ]; then exit 0; fi # Do it chmod $who$sign$what $1 # tag: Robert Anderson Sun May 18 18:21:48 PDT 2003 (chmod_random) tla-1.3.5+dfsg/src/tla/tests/changeset-tests/run-test.sh0000700000175000017500000000525510457622000021660 0ustar useruser#!/bin/sh # run-test.sh # ################################################################ # Copyright (C) 2003 Robert Anderson and Tom Lord # # See the file "COPYING" for further information about # the copyright and warranty status of this work. # set -e # echo '################################' # echo '#' # echo '# testing larch versions' # echo '#' # echo '################################' # MKPATCH="larch mkpatch" # DOPATCH="larch dopatch" # echo '################################' # echo '#' # echo '# testing larch mkpatch with do-changeset' # echo '#' # echo '################################' # MKPATCH="larch mkpatch" # DOPATCH="do-changeset" # echo '################################' # echo '#' # echo '# testing larch dopatch with changeset' # echo '#' # echo '################################' # MKPATCH="changeset" # DOPATCH="larch dopatch" echo '################################' echo '#' echo '# testing file-utils versions' echo '#' echo '################################' MKPATCH="tla mkpatch" DOPATCH="tla dopatch" ADD="tla add" DEL="tla delete" MV="tla move" # MKPATCH="valgrind changeset" # DOPATCH="valgrind do-changeset" here=`pwd` # source tree editing functions . edit-tree-randomly # This has to be outside surrounding trees not to have problems with # init-tree. testdir=/tmp/tla-changesets-tests mkdir -p $testdir cd $testdir # Test trees are named tree-N, patchdirs are named patch-N rm -rf tree-* patch-* # Generate tree-0 mkdir tree-0 cd tree-0 tla init-tree tree-test--main--1.0 tla id-tagging-method explicit sed -e "/^untagged-source/s/ .*/ unrecognized/" \{arch\}/\=tagging-method > \{arch\}/t mv \{arch\}/t \{arch\}/\=tagging-method # Initial state: 1 file filename="./file$RANDOM" echo "$RANDOM" > $filename $ADD $filename # Total number of consecutive trees in the test run num_trees=50 tree_num=1 while [ $tree_num -le $num_trees ]; do cd $testdir tree_prev=tree-$(( $tree_num - 1 )) tree=tree-$tree_num printf "\n\n*\n* ORIG=%s MOD=%s\n*\n" "$tree_prev" "$tree" (cd $tree_prev ; tar cf - .) | (mkdir $tree ; cd $tree ; tar xf -) > /dev/null cd $tree # # Do edits (test the empty changeset first) # if [ $tree_num -ne 1 ] ; then edit_tree_randomly fi cd .. (cd $tree_prev ; tar cvf - . 2>/dev/null) | (mkdir $tree-TARGET ; cd $tree-TARGET ; tar xf -) > /dev/null printf "\n** mkpatch\n\n" $MKPATCH $tree_prev $tree patch-$tree_num printf "\n** dopatch\n\n" $DOPATCH patch-$tree_num $tree-TARGET printf "\n** compare\n\n" $here/dir_compare.sh $tree $tree-TARGET tree_num=$(( $tree_num + 1 )) done # tag: Robert Anderson Sat May 17 10:36:00 PDT 2003 (run-test.sh) tla-1.3.5+dfsg/src/tla/tests/test-my-id.sh0000644000175000017500000000154610457622000017000 0ustar useruser#!/bin/sh # -*- mode: sh; coding: utf-8 -*- # Test my-id # Copyright © 2003 Colin Walters # # See the file "COPYING" for further information about # the copyright and warranty status of this work. set -e arg0="$0" srcdir=`dirname "$arg0"` . ${srcdir}/test-framework setup_workdir test_class "my-id" begin_test "Setting my-id: Jane Doe " tla my-id 'Jane Doe ' test "$(tla my-id)" = 'Jane Doe ' end_test begin_test "Getting my-id uid component" test "$(tla my-id -u)" = 'jane@hacker.gnu.org' end_test begin_test "Setting my-id: Jane Doe " tla my-id 'Jane Doe ' test "$(tla my-id)" = 'Jane Doe ' end_test clean_workdir # tag: Colin Walters Tue, 16 Sep 2003 22:15:31 -0400 (test-my-id.sh) # tla-1.3.5+dfsg/src/tla/tests/test-whats-missing.sh0000644000175000017500000000452210457622000020553 0ustar useruser#!/bin/sh # -*- mode: sh; coding: utf-8 -*- # Simple whats-missing tests # Copyright © 2003 Colin Walters # # See the file "COPYING" for further information about # the copyright and warranty status of this work. set -e arg0="$0" srcdir=`dirname "$arg0"` . ${srcdir}/test-framework setup_with_trivial_archives test_class "whats-missing" setup () { : } cleanup () { cd ${WORKDIR} } check_missing_patches () { missing_patches_are jane@example.com--2003/hello-world--mainline--1.0 "$@" } begin_test_savectx "get initial archives, commit change to wd 1" setup tla get jane@example.com--2003/hello-world--mainline--1.0 hello-world-1 tla get jane@example.com--2003/hello-world--mainline--1.0 hello-world-2 tla get jane@example.com--2003/hello-world--mainline--1.0 hello-world-3 cd hello-world-1 sed -e 's/Hello World/Hello, World/' < hello-world.c > hello-world.c.new mv hello-world.c.new hello-world.c tla commit -L 'correctly punctuate' cd ../hello-world-2 check_missing_patches patch-1 cd ../hello-world-3 check_missing_patches patch-1 cleanup end_test_savectx begin_test_savectx "adding new file to wd 2" setup cd hello-world-2 tla update check_missing_patches echo 'We follow the GNU coding standards' > HACKING tla add-id HACKING tla commit -L 'Add HACKING document' check_missing_patches cd ../hello-world-1 check_missing_patches patch-2 cd ../hello-world-3 check_missing_patches patch-1 patch-2 cleanup end_test_savectx begin_test_savectx "renaming file in wd 2" setup cd hello-world-2 check_missing_patches mv hello-world.c hello_world.c tla move-id hello-world.c hello_world.c tla commit -L 'rename hello-world.c to hello_world.c' cd ../hello-world-1 check_missing_patches patch-2 patch-3 cd ../hello-world-3 check_missing_patches patch-1 patch-2 patch-3 cleanup end_test_savectx begin_test_savectx "modifying file in wd 3" setup cd hello-world-3 tla update check_missing_patches (echo '/* Copyright (C) 2003 Jane Doe */'; echo '/* This file is hereby placed into the public domain. */'; cat hello_world.c) > hello_world.c.new mv hello_world.c.new hello_world.c tla commit -L 'add copyright header' cd ../hello-world-1 check_missing_patches patch-2 patch-3 patch-4 cd ../hello-world-2 check_missing_patches patch-4 cleanup end_test_savectx clean_workdir # tag: Colin Walters Thu, 18 Sep 2003 19:50:01 -0400 (test-whats-missing.sh) # tla-1.3.5+dfsg/src/tla/tests/test-id-tagging-defaults.sh0000644000175000017500000000131610457622000021573 0ustar useruser#!/bin/sh # -*- mode: sh; coding: utf-8 -*- # Test id-tagging-defaults # Copyright © 2003 Colin Walters # # See the file "COPYING" for further information about # the copyright and warranty status of this work. set -e arg0="$0" srcdir=`dirname "$arg0"` . ${srcdir}/test-framework setup_workdir test_class "id-tagging-defaults" begin_test "id-tagging-defaults" tla id-tagging-defaults > id-tagging-defaults file_matches '^junk ' id-tagging-defaults file_matches '^backup ' id-tagging-defaults file_matches '^precious ' id-tagging-defaults file_matches '^source ' id-tagging-defaults end_test clean_workdir # tag: Colin Walters Thu, 18 Sep 2003 15:05:12 -0400 (test-tagging-defaults.sh) # tla-1.3.5+dfsg/src/tla/tests/test-import.sh0000644000175000017500000000212210457622000017262 0ustar useruser#!/bin/sh # -*- mode: sh; coding: utf-8 -*- # Test import # Copyright © 2003 Colin Walters # # See the file "COPYING" for further information about # the copyright and warranty status of this work. set -e arg0="$0" srcdir=`dirname "$arg0"` . ${srcdir}/test-framework setup_with_setup_tla_archives test_class "import" begin_test "Simple import" make_hello_world hello-world--mainline--1.0 cd hello-world--mainline--1.0 tla init-tree --nested jane@example.com--2003/hello-world--mainline--1.0 tla id-tagging-method explicit tla add-id hello-world.c README tla import -L 'initial import' test "$(tla categories -A jane@example.com--2003)" = "$(echo -e cat\\ncow\\nhello-world)" test "$(tla branches jane@example.com--2003/hello-world)" = "hello-world--mainline" test "$(tla versions jane@example.com--2003/hello-world--mainline)" = "hello-world--mainline--1.0" test -d $(tla whereis-archive jane@example.com--2003)/hello-world/hello-world--mainline/hello-world--mainline--1.0/base-0 end_test clean_workdir # tag: Colin Walters Wed, 17 Sep 2003 01:39:15 -0400 (test-import.sh) # tla-1.3.5+dfsg/src/tla/tests/test-star-merge.sh0000644000175000017500000000212310457622000020017 0ustar useruser#!/bin/sh # -*- mode: sh; coding: utf-8 -*- # Star merge tests # Copyright © 2004 Aaron Bentley # Copyright © 2003 Colin Walters # # See the file "COPYING" for further information about # the copyright and warranty status of this work. set -e arg0="$0" srcdir=`dirname "$arg0"` . ${srcdir}/test-framework setup_with_trivial_archives test_class "star-merge" begin_test "Merging when MINE's latest REFERENCE revision is older" tla archive-setup jane@example.com--2003/hello-world--mainline--1.1 tla tag -A jane@example.com--2003 hello-world--mainline--1.0 hello-world--mainline--1.1 tla get jane@example.com--2003/hello-world--mainline--1.0 hello-world tla commit -d hello-world -s "meaningless commit" tla tag -S jane@example.com--2003/hello-world--mainline--1.0 jane@example.com--2003/hello-world--mainline--1.2 tla get jane@example.com--2003/hello-world--mainline--1.1 hello-world11 tla star-merge -d hello-world11 --reference jane@example.com--2003/hello-world--mainline--1.0 jane@example.com--2003/hello-world--mainline--1.2 end_test clean_workdir # tag: 6f36ba8a-51ff-4b18-a729-849b1e861781 tla-1.3.5+dfsg/src/tla/tests/test-pristines.sh0000644000175000017500000000440410457622000017775 0ustar useruser#!/bin/sh # -*- mode: sh; coding: utf-8 -*- # Simple commit tests (2) # Copyright © 2003 Colin Walters # Copyright (C) 2004 Robert Collins # # See the file "COPYING" for further information about # the copyright and warranty status of this work. set -e arg0="$0" srcdir=`dirname "$arg0"` . ${srcdir}/test-framework setup_with_trivial_archives test_class "test pristine trees" setup () { tla get jane@example.com--2003/hello-world--mainline--1.0 hello-world cd hello-world } setup_pristine () { # purge and rebuild a pristine tree rm -rf \{arch\}/++pristine-trees tla add-pristine $(tla logs -f -r | head -n 1) } check_pristine_is_corrupt () { # trigger a pristine inode check # fail on ok pristines. # note on failed pristines. # usage: check_pristine_is_corrupt "failure description" (tla changes 2>&1 | grep "corrupt pristine") || test_fail "Did not detect $@ in pristine copy" echo "Detected $@" >&2 } begin_test "modify date of file in pristine" setup touch -t 200001010101.01 \{arch\}/++pristine-trees/unlocked/hello-world/hello-world--mainline/hello-world--mainline--1.0/jane\@example.com--2003/hello-world--mainline--1.0--base-0/README check_pristine_is_corrupt "modified file date" end_test begin_test "Add file to pristine" setup echo 'We follow the GNU coding standards' > \{arch\}/++pristine-trees/unlocked/hello-world/hello-world--mainline/hello-world--mainline--1.0/jane\@example.com--2003/hello-world--mainline--1.0--base-0/HACKING tla add-id \{arch\}/++pristine-trees/unlocked/hello-world/hello-world--mainline/hello-world--mainline--1.0/jane\@example.com--2003/hello-world--mainline--1.0--base-0/HACKING check_pristine_is_corrupt "new file added" end_test begin_test "Removing file from pristine" setup rm \{arch\}/++pristine-trees/unlocked/hello-world/hello-world--mainline/hello-world--mainline--1.0/jane\@example.com--2003/hello-world--mainline--1.0--base-0/hello-world.c check_pristine_is_corrupt "removed file" end_test #tests to do: # move a file in a pristine # perform a limited commit (single file mod) # perform a limited commit (multiple file modification) # perform a limited commit (one file commited, other files modified) clean_workdir # tag: 2cf97d96-e663-4bab-a46a-1c912ae0ce82 # tla-1.3.5+dfsg/src/tla/tests/test-tag-baz.sh0000644000175000017500000000331010457622000017275 0ustar useruser#!/bin/sh # -*- mode: sh; coding: utf-8 -*- # Simple tagging tests # Copyright © 2003 Colin Walters # # See the file "COPYING" for further information about # the copyright and warranty status of this work. set -e arg0="$0" srcdir=`dirname "$arg0"` . ${srcdir}/test-framework setup_with_trivial_archives test_class "tag baz archives" begin_test "creating tag from new version" tla archive-setup jane@example.com--2003/hello-world--mainline--1.1 tla tag jane@example.com--2003/hello-world--mainline--1.0 jane@example.com--2003/hello-world--mainline--1.1 tla get jane@example.com--2003/hello-world--mainline--1.1 hello-world test -f hello-world/hello-world.c test -f hello-world/README end_test begin_test "creating tag from new branch" tla archive-setup jane@example.com--2003/hello-world--foobranch--3 tla tag jane@example.com--2003/hello-world--mainline--1.0 jane@example.com--2003/hello-world--foobranch--3 tla get jane@example.com--2003/hello-world--foobranch--3 foobranch test -f foobranch/hello-world.c test -f foobranch/README end_test begin_test "creating tag from new category" tla archive-setup jane@example.com--2003/hi-world--mainline--1.3 tla tag jane@example.com--2003/hello-world--mainline--1.0 jane@example.com--2003/hi-world--mainline--1.3 tla get jane@example.com--2003/hi-world--mainline--1.3 hi-world test -f hi-world/hello-world.c test -f hi-world/README end_test begin_test "creating tag from different archive" tla tag -S jane@example.com--2003/hello-world--mainline--1.0 foo@example.org--2003/hello-world--devo--1.3 tla get foo@example.org--2003/hello-world--devo--1.3 foo-hello-world test -f foo-hello-world/hello-world.c test -f foo-hello-world/README end_test clean_workdir tla-1.3.5+dfsg/src/tla/tests/test-mirror.sh0000644000175000017500000000463710457622000017277 0ustar useruser#!/bin/sh # -*- mode: sh; coding: utf-8 -*- # Test archive mirror creation # Copyright © 2003 Colin Walters # # See the file "COPYING" for further information about # the copyright and warranty status of this work. set -e arg0="$0" srcdir=`dirname "$arg0"` . ${srcdir}/test-framework setup_with_trivial_archives test_class "Archive mirror" begin_test "Archive mirror creation 1" tla make-archive --baz --mirror jane@example.com--2003 ${ARCHIVEDIR}/jane-archive-mirror test "$(tla whereis-archive jane@example.com--2003-MIRROR)" = ${ARCHIVEDIR}/jane-archive-mirror test -f ${ARCHIVEDIR}/jane-archive-mirror/=meta-info/mirror test $(cat ${ARCHIVEDIR}/jane-archive-mirror/=meta-info/mirror) = "jane@example.com--2003" end_test begin_test "Archive mirror creation 2 (with listing)" tla make-archive --baz --listing --mirror foo@example.org--2003 ${ARCHIVEDIR}/foo-archive-mirror test "$(tla whereis-archive foo@example.org--2003-MIRROR)" = ${ARCHIVEDIR}/foo-archive-mirror test -f ${ARCHIVEDIR}/foo-archive-mirror/=meta-info/mirror test $(cat ${ARCHIVEDIR}/foo-archive-mirror/=meta-info/mirror) = "foo@example.org--2003" end_test begin_test "Archive-mirror shouldn't update cached revisions" tla archive-mirror jane@example.com--2003 tla cacherev jane@example.com--2003/hello-world--mainline--1.0--base-0 test -f ${ARCHIVEDIR}/jane-archive/hello-world--mainline--1.0/base-0/hello-world--mainline--1.0--base-0.tar.gz tla archive-mirror jane@example.com--2003 test ! -f ${ARCHIVEDIR}/jane-archive-mirror/hello-world--mainline--1.0/base-0/hello-world--mainline--1.0--base-0.tar.gz end_test begin_test "Archive-mirror with revision spec should add cached revisions" tla archive-mirror jane@example.com--2003 hello-world--mainline--1.0--base-0 test -f ${ARCHIVEDIR}/jane-archive-mirror/hello-world--mainline--1.0/base-0/hello-world--mainline--1.0--base-0.tar.gz end_test begin_test "Archive-mirror with revision spec should remove cached revisions" tla uncacherev jane@example.com--2003/hello-world--mainline--1.0--base-0 test ! -f ${ARCHIVEDIR}/jane-archive/hello-world--mainline--1.0/base-0/hello-world--mainline--1.0--base-0.tar.gz tla archive-mirror jane@example.com--2003 hello-world--mainline--1.0--base-0 test ! -f ${ARCHIVEDIR}/jane-archive-mirror/hello-world--mainline--1.0/base-0/hello-world--mainline--1.0--base-0.tar.gz end_test clean_workdir # tag: Colin Walters Tue, 16 Sep 2003 23:03:55 -0400 (test-mirror-creation.sh) # tla-1.3.5+dfsg/src/tla/tests/test-file-diffs.sh0000644000175000017500000000266210457622000017771 0ustar useruser#!/bin/sh # -*- mode: sh; coding: utf-8 -*- # Simple file-diffs tests # Copyright © 2003 Colin Walters # # See the file "COPYING" for further information about # the copyright and warranty status of this work. set -e arg0="$0" srcdir=`dirname "$arg0"` . ${srcdir}/test-framework setup_with_trivial_tla_archives test_class "file-diffs" setup () { tla get jane@example.com--2003/hello-world--mainline--1.0 hello-world cd hello-world } cleanup () { : } do_file_diffs () { tla file-diffs "$@" || test "$?" = 1 } begin_test "diffs for unmodified file" setup do_file_diffs hello-world.c > ../hello-world.patch file_is_empty ../hello-world.patch cleanup end_test begin_test "diffs for single file modification" setup sed -e 's/Hello world/Hello, world/' < hello-world.c > hello-world.c.new mv hello-world.c.new hello-world.c do_file_diffs hello-world.c > ../hello-world.patch file_matches '^-.*Hello world' ../hello-world.patch file_matches '^\+.*Hello, world' ../hello-world.patch cleanup end_test begin_test 'diff | patch -R => identity' setup cd .. copy_tree hello-world hello-world.good cd hello-world sed -e 's/Hello world/Hello, world/' < hello-world.c > hello-world.c.new mv hello-world.c.new hello-world.c do_file_diffs hello-world.c | patch -p1 -R cd .. assert_trees_equal hello-world hello-world.good cleanup end_test clean_workdir # tag: Colin Walters Wed, 17 Sep 2003 18:55:57 -0400 (test-file-diffs.sh) # tla-1.3.5+dfsg/src/tla/tests/test-replay.sh0000644000175000017500000000522010457622000017246 0ustar useruser#!/bin/sh # -*- mode: sh; coding: utf-8 -*- # Simple replay tests # Copyright © 2006 Ludovic Courtès # # See the file "COPYING" for further information about # the copyright and warranty status of this work. set -e arg0="$0" srcdir=`dirname "$arg0"` . ${srcdir}/test-framework setup_with_trivial_archives test_class "replay" initialize_replay () { tla tag -S jane@example.com--2003/hello-world--mainline--1.0 \ foo@example.org--2003/hello-world--fork--1.0 } setup_replay () { tla get jane@example.com--2003/hello-world--mainline--1.0 hello-world--jane tla get foo@example.org--2003/hello-world--fork--1.0 hello-world--fork } cleanup () { rm -rf hello-world--jane hello-world--fork } MAINLINE_VERSION="jane@example.com--2003/hello-world--mainline--1.0" FORK_VERSION="foo@example.org--2003/hello-world--fork--1.0" initialize_replay begin_test "replaying simple changeset" setup_replay cd hello-world--jane echo 'This is a new file.' > the-new-file.txt tla add-id the-new-file.txt tla commit -L 'Added the new file.' cd .. cd hello-world--fork tla replay "$MAINLINE_VERSION" tla commit -L "Replayed Jane's changes." cd .. assert_working_tree_equivalence hello-world--fork hello-world--jane cleanup end_test begin_test "replaying and skipping present patches" setup_replay cd hello-world--fork echo 'Thanks Jane for this lovely file.' >> the-new-file.txt tla commit -L "Improved Jane's new file." cd .. cd hello-world--jane tla replay --skip-present "$FORK_VERSION" tla commit -L "Merged new file improvements." cd .. assert_working_tree_equivalence hello-world--fork hello-world--jane cleanup end_test begin_test "replaying what's new (nothing) and skipping present patches" setup_replay cd hello-world--jane tla replay --skip-present --new "$FORK_VERSION" cd .. assert_working_tree_equivalence hello-world--fork hello-world--jane cleanup end_test begin_test "replaying what's new and skipping present patches" setup_replay cd hello-world--fork echo 'Really, it rocks.' >> README tla commit -L "Appended personal opinion to the \`README' file." cd .. cd hello-world--jane tla replay --skip-present --new "$FORK_VERSION" cd .. assert_working_tree_equivalence hello-world--fork hello-world--jane cleanup end_test begin_test "replaying exact patch and skipping if already present" setup_replay copy_tree hello-world--jane hello-world--jane.good cd hello-world--jane tla replay --skip-present "$FORK_VERSION"--patch-1 cd .. assert_working_tree_equivalence hello-world--jane hello-world--jane.good rm -rf hello-world--jane.good cleanup end_test clean_workdir # tag: Ludovic Courtès Fri, 16 Jun 2006 15:01:42 +0200 (test-replay.sh) # tla-1.3.5+dfsg/src/tla/tests/test-archive-setup.sh0000644000175000017500000000210710457622000020532 0ustar useruser#!/bin/sh # -*- mode: sh; coding: utf-8 -*- # Test archive setup # Copyright © 2003 Colin Walters # # See the file "COPYING" for further information about # the copyright and warranty status of this work. set -e arg0="$0" srcdir=`dirname "$arg0"` . ${srcdir}/test-framework setup_with_empty_tla_archives test_class "Archive setup" begin_test "archive-setup" tla archive-setup -A jane@example.com--2003 moo--cow--3 test -d ${ARCHIVEDIR}/jane-archive/moo/moo--cow/moo--cow--3 end_test begin_test "archive-setup" tla archive-setup -A jane@example.com--2003 moo--cow--3.2 test -d ${ARCHIVEDIR}/jane-archive/moo/moo--cow/moo--cow--3.2 end_test begin_test "archive-setup" tla archive-setup -A jane@example.com--2003 moo--blah--1.1 test -d ${ARCHIVEDIR}/jane-archive/moo/moo--blah/moo--blah--1.1 end_test begin_test "archive-setup" tla archive-setup -A jane@example.com--2003 crack--whee--7.1 test -d ${ARCHIVEDIR}/jane-archive/crack/crack--whee/crack--whee--7.1 end_test clean_workdir # tag: Colin Walters Tue, 16 Sep 2003 23:26:11 -0400 (test-archive-setup.sh) # tla-1.3.5+dfsg/src/tla/tests/Makefile.in0000644000175000017500000000203010457622000016502 0ustar useruser# tag: Colin Walters Tue, 16 Sep 2003 20:32:49 -0400 (Makefile.in) # test-scripts := $(addprefix $(srcdir)/,\ test-my-id.sh \ test-id-tagging-defaults.sh \ test-parse-package-name.sh \ test-archive-registration.sh \ test-archive-creation.sh \ test-mirror.sh \ test-archive-setup.sh \ test-import.sh \ test-import-baz.sh \ test-get-changeset.sh \ test-get.sh \ test-get-baz.sh \ test-inventory.sh \ test-simple-commits-1.sh \ test-simple-commits-2.sh \ test-update.sh \ test-pristines.sh \ test-whats-missing.sh \ test-replay.sh \ test-undo.sh \ test-redo.sh \ test-what-changed.sh \ test-tag.sh \ test-tag-baz.sh \ test-star-merge.sh \ test-file-diffs.sh \ test-file-diffs-baz.sh \ test-mv-explicit.sh \ test-mv-explicit-baz.sh \ test-rm-explicit.sh \ test-dir-regexps.sh \ jane-and-foo-do-hello-world-1.sh\ jane-and-foo-do-hello-world-1-baz.sh\ jane-and-foo-do-hello-world-2.sh) include $(makefiles)/unit-tests.mk tests-timestamp: ../tla/tla tla-1.3.5+dfsg/src/tla/tests/jane-and-foo-do-hello-world-1.sh0000644000175000017500000000776510457622000022237 0ustar useruser#!/bin/sh # -*- mode: sh; coding: utf-8 -*- # Jane and foo hack on hello-world together # Copyright © 2003 Colin Walters # # See the file "COPYING" for further information about # the copyright and warranty status of this work. set -e arg0="$0" srcdir=`dirname "$arg0"` . ${srcdir}/test-framework setup_with_trivial_tla_archives setup () { : } cleanup () { cd ${WORKDIR} } test_class "Jane and foo hack on hello-world" begin_test_savectx "Jane checks out her tree" setup mkdir jane cd jane tla get jane@example.com--2003/hello-world--mainline--1.0 hello-world cleanup end_test_savectx begin_test_savectx "Jane adds HACKING, fixes some grammatical issues" setup cd jane/hello-world echo 'We follow the GNU coding standards' > HACKING tla add-id HACKING sed -e 's/Hello world/Hello, World/' < hello-world.c > hello-world.c.new mv hello-world.c.new hello-world.c tla commit -L 'add HACKING, fix some grammatical issues' cleanup end_test_savectx begin_test_savectx "foo decides to create a branch from Jane" setup mkdir foo cd foo tla tag jane@example.com--2003/hello-world--mainline--1.0 foo@example.org--2003/hello-world--devo--1.3 tla get foo@example.org--2003/hello-world--devo--1.3 hello-world cleanup end_test_savectx begin_test_savectx "foo thinks hello-world.c is better named as hello_world.c" setup cd foo/hello-world mv hello-world.c hello_world.c tla move-id hello-world.c hello_world.c tla commit -L 'rename hello-world.c to hello_world.c' cleanup end_test_savectx begin_test_savectx "Jane adds a copyright header" setup cd jane/hello-world (echo '/* Copyright (C) 2003 Jane Doe */'; echo '/* This file is hereby placed into the public domain. */'; cat hello-world.c) > hello-world.c.new mv hello-world.c.new hello-world.c tla commit -L 'add copyright header' cleanup end_test_savectx begin_test_savectx "foo adds AUTHORS" setup cd foo/hello-world echo 'foo ' > AUTHORS echo 'Jane Doe ' >> AUTHORS tla add-id AUTHORS tla commit -L 'add AUTHORS' cleanup end_test_savectx begin_test_savectx "Checkpoint 1" setup tla get jane@example.com--2003/hello-world--mainline--1.0 jane-hello-world.tmp cd jane-hello-world.tmp file_matches 'Copyright.*Jane Doe' hello-world.c file_matches 'Hello, World' hello-world.c file_matches 'We follow.*GNU.*standards' HACKING file_matches 'This is hello-world' README cd .. tla get foo@example.org--2003/hello-world--devo--1.3 foo-hello-world.tmp cd foo-hello-world.tmp file_matches 'Hello, World' hello_world.c file_matches 'We follow.*GNU.*standards' HACKING file_matches 'This is hello-world' README file_matches 'foo' AUTHORS file_matches 'Jane Doe' AUTHORS cd .. rm -rf jane-hello-world.tmp rm -rf foo-hello-world.tmp cleanup end_test_savectx begin_test_savectx "Jane thinks foo's changes are good, decides to merge" setup cd jane/hello-world tla star-merge foo@example.org--2003/hello-world--devo--1.3 tla commit -L 'merge with foo' file_matches 'Copyright.*Jane Doe' hello_world.c file_matches 'Hello, World' hello_world.c file_matches 'foo' AUTHORS file_matches 'Jane Doe' AUTHORS cleanup end_test_savectx begin_test_savectx "Jane puts her name first in AUTHORS" setup cd jane/hello-world (grep 'Jane Doe' AUTHORS && cat AUTHORS | grep -v 'Jane Doe') > AUTHORS.new mv AUTHORS.new AUTHORS tla commit -L 'put my name first in AUTHORS' cleanup end_test_savectx begin_test_savectx "foo decides to merge with Jane, despite her antics" setup cd foo/hello-world tla star-merge jane@example.com--2003/hello-world--mainline--1.0 tla commit -L 'merge with jane' cleanup end_test_savectx begin_test_savectx "Jane and foo's trees should be equivalent" setup tla get jane@example.com--2003/hello-world--mainline--1.0 jane-hello-world.tmp tla get foo@example.org--2003/hello-world--devo--1.3 foo-hello-world.tmp assert_working_tree_equivalence jane-hello-world.tmp foo-hello-world.tmp rm -rf jane-hello-world.tmp rm -rf foo-hello-world.tmp cleanup end_test_savectx clean_workdir # tag: Colin Walters Thu, 18 Sep 2003 13:37:39 -0400 (jane-and-foo-do-hello-world-1.sh) # tla-1.3.5+dfsg/src/tla/tests/test-dir-regexps.sh0000644000175000017500000000504310457622000020206 0ustar useruser#!/bin/sh # # Per-directory inventory regexp tests. set -e arg0="$0" srcdir=`dirname "$arg0"` . ${srcdir}/test-framework setup_with_trivial_archives test_class "per-directory regexps" begin_test "try all categories" mkdir foo cd foo tla init-tree --nested foo@example.org--2003/hello-world--devo--1.3 tla id-tagging-method names touch @rapca touch attrapca test "$(tla inventory -u)" = "@rapca" test "$(tla inventory -s)" = "attrapca" echo "junk ^@.*$" > .arch-inventory tla add-id .arch-inventory test "$(tla inventory -j)" = "@rapca" test "$(tla inventory -s)" = "attrapca" echo "backup ^@.*$" > .arch-inventory test "$(tla inventory -b)" = "@rapca" test "$(tla inventory -s)" = "attrapca" echo "precious ^@.*$" > .arch-inventory test "$(tla inventory -p)" = "@rapca" test "$(tla inventory -s)" = "attrapca" echo "unrecognized ^attrapca$" > .arch-inventory test "$(echo $(tla inventory -u))" = "@rapca attrapca" echo "source ^@.*$" > .arch-inventory test "$(echo $(tla inventory -s --all | head -4))" = \ ".arch-ids/.arch-inventory.id .arch-inventory @rapca attrapca" end_test begin_test "locality property" mkdir foo cd foo tla init-tree --nested foo@example.org--2003/hello-world--devo--1.3 tla id-tagging-method names mkdir 1 mkdir 1/@rapca touch 1/@rapca/@rapca touch @rapca echo "source ^@.*$" > 1/.arch-inventory tla add-id 1/.arch-inventory test "$(echo $(tla inventory -s -d))" = "1 1/@rapca" test "$(echo $(tla inventory -u))" = "1/@rapca/@rapca @rapca" end_test begin_test "commit with augmented source category" tla get jane@example.com--2003/hello-world--mainline--1.0 hello-world cd hello-world echo "source ^@.*$" > .arch-inventory tla add-id .arch-inventory touch @rapca tla add-id @rapca tla commit -s 'add @rapca and locally augmented source category' cd .. tla get jane@example.com--2003/hello-world--mainline--1.0 hello-world.new compare_trees_simple hello-world hello-world.new end_test begin_test "override a category" mkdir bar cd bar tla init-tree --nested bar@example.org--2003/hello-world--devo--1.3 cat > {arch}/=tagging-method << EOF names exclude ^(.arch-ids|\{arch\}|\.arch-inventory)$ junk ^(,.*)$ precious ^(\+.*|\.gdbinit|\.#ckpts-lock|=build\.*|=install\.*|CVS|CVS\.adm|RCS|RCSLOG|SCCS|TAGS)$ backup ^.*(~|\.~[0-9]+~|\.bak|\.orig|\.rej|\.original|\.modified|\.reject)$ unrecognized ^(.*\.(o|a|so|core|so(\.[[:digit:]]+)*)|core)$ source ^[_=a-zA-Z0-9].*$ EOF touch core echo "source ^core$" > .arch-inventory tla add-id .arch-inventory test "$(tla inventory -u)" = '' end_test clean_workdir # tag: rfarine e8bb544c-10ed-4094-8d65-db8b8004b374 tla-1.3.5+dfsg/src/tla/tests/test-get-changeset.sh0000644000175000017500000000227310457622000020475 0ustar useruser#!/bin/sh # -*- mode: sh; coding: utf-8 -*- # Simple update tests # Written by Aaron Bentley # Copyright © 2004 Canonical Inc # # This file is licensed under the General Public License v2, or at your # preference, any later version. set -e arg0="$0" srcdir=`dirname "$arg0"` . ${srcdir}/test-framework test_class "get-changeset" setup_with_patch_1 () { setup_with_trivial_archives tla get jane@example.com--2003/hello-world--mainline--1.0--base-0 hw-2 tla my-default-archive jane@example.com--2003 tla commit -d hw-2 -s "Need a changeset" } begin_test_savectx "get-changeset in a working-tree" setup_with_patch_1 cd hw-2 tla get-changeset jane@example.com--2003/hello-world--mainline--1.0--patch-1 cd .. end_test_savectx begin_test_savectx "get-changeset outside of a working-tree" setup_with_patch_1 tla get-changeset hello-world--mainline--1.0--patch-1 cd hw-2 tla update cd .. end_test_savectx begin_test_savectx "get-changeset with no default archive" setup_with_patch_1 tla my-default-archive -d tla get-changeset jane@example.com--2003/hello-world--mainline--1.0--patch-1 cd hw-2 tla update cd .. end_test_savectx # tag: b6682352-b119-4f7b-ad49-ca21aef11c56 tla-1.3.5+dfsg/src/tla/tests/test-redo.sh0000644000175000017500000000300510457622000016702 0ustar useruser#!/bin/sh # -*- mode: sh; coding: utf-8 -*- # Simple undo/redo tests # Copyright © 2003 Colin Walters # # See the file "COPYING" for further information about # the copyright and warranty status of this work. set -e arg0="$0" srcdir=`dirname "$arg0"` . ${srcdir}/test-framework setup_with_trivial_archives test_class "redo" setup_redo () { tla get jane@example.com--2003/hello-world--mainline--1.0 hello-world cd hello-world } undo_redo () { cd .. copy_tree hello-world hello-world.good cd hello-world tla undo tla redo } verify_cleanup () { for f in ,,undo*; do if dir_exists "$f"; then test_fail "directory $f should not exist!"; fi done cd .. compare_trees_simple hello-world hello-world.good rm -rf hello-world.good } begin_test "undoing/redoing single file modification" setup_redo sed -e 's/Hello World/Hello, World/' < hello-world.c > hello-world.c.new mv hello-world.c.new hello-world.c undo_redo verify_cleanup end_test begin_test "undoing/redoing new file addition" setup_redo echo 'We follow the GNU coding standards' > HACKING tla add-id HACKING undo_redo verify_cleanup end_test begin_test "undoing/redoing removing existing file" setup_redo rm README tla delete-id README undo_redo verify_cleanup end_test begin_test "undoing/redoing moving file" setup_redo mv hello-world.c hello_world.c tla move-id hello-world.c hello_world.c undo_redo verify_cleanup end_test clean_workdir # tag: Colin Walters Wed, 17 Sep 2003 13:07:42 -0400 (test-redo.sh) # tla-1.3.5+dfsg/src/tla/tests/test-simple-commits-1.sh0000644000175000017500000000316010457622000021053 0ustar useruser#!/bin/sh # -*- mode: sh; coding: utf-8 -*- # Simple commit tests # Copyright © 2003 Colin Walters # # See the file "COPYING" for further information about # the copyright and warranty status of this work. set -e arg0="$0" srcdir=`dirname "$arg0"` . ${srcdir}/test-framework setup_with_trivial_archives test_class "simple commits" setup () { tla get jane@example.com--2003/hello-world--mainline--1.0 hello-world cd hello-world } begin_test "single file modification" setup sed -e 's/Hello World/Hello, World/' < hello-world.c > hello-world.c.new mv hello-world.c.new hello-world.c tla commit -L 'correctly punctuate' archive_has_revision_with_summary jane@example.com--2003 hello-world--mainline--1.0--patch-1 'correctly punctuate' end_test begin_test "Adding new file" setup echo 'We follow the GNU coding standards' > HACKING tla add-id HACKING tla commit -L 'Add HACKING document' archive_has_revision_with_summary jane@example.com--2003 hello-world--mainline--1.0--patch-2 'Add HACKING document' end_test begin_test "Removing existing file" setup rm README tla delete-id README tla commit -L 'No README is necessary' archive_has_revision_with_summary jane@example.com--2003 hello-world--mainline--1.0--patch-3 'No README is necessary' end_test begin_test "Moving file" setup mv hello-world.c hello_world.c tla move-id hello-world.c hello_world.c tla commit -L 'Use UNIX separator' archive_has_revision_with_summary jane@example.com--2003 hello-world--mainline--1.0--patch-4 'Use UNIX separator' end_test clean_workdir # tag: Colin Walters Wed, 17 Sep 2003 12:26:09 -0400 (test-simple-commits-1.sh) # tla-1.3.5+dfsg/src/tla/tests/jane-and-foo-do-hello-world-1-baz.sh0000644000175000017500000000763110457622000023001 0ustar useruser#!/bin/sh # -*- mode: sh; coding: utf-8 -*- # Jane and foo hack on hello-world together # Copyright © 2003 Colin Walters # # See the file "COPYING" for further information about # the copyright and warranty status of this work. set -e arg0="$0" srcdir=`dirname "$arg0"` . ${srcdir}/test-framework setup_with_trivial_archives setup () { : } cleanup () { cd ${WORKDIR} } test_class "Jane and foo hack on hello-world" begin_test_savectx "Jane checks out her tree" setup mkdir jane cd jane tla get jane@example.com--2003/hello-world--mainline--1.0 hello-world cleanup end_test_savectx begin_test_savectx "Jane adds HACKING, fixes some grammatical issues" setup cd jane/hello-world echo 'We follow the GNU coding standards' > HACKING tla add-id HACKING sed -e 's/Hello world/Hello, World/' < hello-world.c > hello-world.c.new mv hello-world.c.new hello-world.c tla commit -L 'add HACKING, fix some grammatical issues' cleanup end_test_savectx begin_test_savectx "foo decides to create a branch from Jane" setup mkdir foo cd foo tla tag -S jane@example.com--2003/hello-world--mainline--1.0 foo@example.org--2003/hello-world--devo--1.3 tla get foo@example.org--2003/hello-world--devo--1.3 hello-world cleanup end_test_savectx begin_test_savectx "foo thinks hello-world.c is better named as hello_world.c" setup cd foo/hello-world mv hello-world.c hello_world.c tla move-id hello-world.c hello_world.c tla commit -L 'rename hello-world.c to hello_world.c' cleanup end_test_savectx begin_test_savectx "Jane adds a copyright header" setup cd jane/hello-world (echo '/* Copyright (C) 2003 Jane Doe */'; echo '/* This file is hereby placed into the public domain. */'; cat hello-world.c) > hello-world.c.new mv hello-world.c.new hello-world.c tla commit -L 'add copyright header' cleanup end_test_savectx begin_test_savectx "foo adds AUTHORS" setup cd foo/hello-world echo 'foo ' > AUTHORS echo 'Jane Doe ' >> AUTHORS tla add-id AUTHORS tla commit -L 'add AUTHORS' cleanup end_test_savectx begin_test_savectx "Checkpoint 1" setup tla get jane@example.com--2003/hello-world--mainline--1.0 jane-hello-world.tmp cd jane-hello-world.tmp file_matches 'Copyright.*Jane Doe' hello-world.c file_matches 'Hello, World' hello-world.c file_matches 'We follow.*GNU.*standards' HACKING file_matches 'This is hello-world' README cd .. tla get foo@example.org--2003/hello-world--devo--1.3 foo-hello-world.tmp cd foo-hello-world.tmp file_matches 'Hello, World' hello_world.c file_matches 'We follow.*GNU.*standards' HACKING file_matches 'This is hello-world' README file_matches 'foo' AUTHORS file_matches 'Jane Doe' AUTHORS cd .. rm -rf jane-hello-world.tmp rm -rf foo-hello-world.tmp cleanup end_test_savectx begin_test_savectx "Jane thinks foo's changes are good, decides to merge" setup cd jane/hello-world tla star-merge foo@example.org--2003/hello-world--devo--1.3 tla commit -L 'merge with foo' file_matches 'Copyright.*Jane Doe' hello_world.c file_matches 'Hello, World' hello_world.c file_matches 'foo' AUTHORS file_matches 'Jane Doe' AUTHORS cleanup end_test_savectx begin_test_savectx "Jane puts her name first in AUTHORS" setup cd jane/hello-world (grep 'Jane Doe' AUTHORS && cat AUTHORS | grep -v 'Jane Doe') > AUTHORS.new mv AUTHORS.new AUTHORS tla commit -L 'put my name first in AUTHORS' cleanup end_test_savectx begin_test_savectx "foo decides to merge with Jane, despite her antics" setup cd foo/hello-world tla star-merge jane@example.com--2003/hello-world--mainline--1.0 tla commit -L 'merge with jane' cleanup end_test_savectx begin_test_savectx "Jane and foo's trees should be equivalent" setup tla get jane@example.com--2003/hello-world--mainline--1.0 jane-hello-world.tmp tla get foo@example.org--2003/hello-world--devo--1.3 foo-hello-world.tmp assert_working_tree_equivalence jane-hello-world.tmp foo-hello-world.tmp rm -rf jane-hello-world.tmp rm -rf foo-hello-world.tmp cleanup end_test_savectx clean_workdir tla-1.3.5+dfsg/src/tla/tests/test-tag.sh0000644000175000017500000000330610457622000016530 0ustar useruser#!/bin/sh # -*- mode: sh; coding: utf-8 -*- # Simple tagging tests # Copyright © 2003 Colin Walters # # See the file "COPYING" for further information about # the copyright and warranty status of this work. set -e arg0="$0" srcdir=`dirname "$arg0"` . ${srcdir}/test-framework setup_with_trivial_tla_archives test_class "tag" begin_test "creating tag from new version" tla archive-setup jane@example.com--2003/hello-world--mainline--1.1 tla tag -A jane@example.com--2003 hello-world--mainline--1.0 hello-world--mainline--1.1 tla get jane@example.com--2003/hello-world--mainline--1.1 hello-world test -f hello-world/hello-world.c test -f hello-world/README end_test begin_test "creating tag from new branch" tla archive-setup jane@example.com--2003/hello-world--foobranch--3 tla tag -A jane@example.com--2003 hello-world--mainline--1.0 hello-world--foobranch--3 tla get jane@example.com--2003/hello-world--foobranch--3 foobranch test -f foobranch/hello-world.c test -f foobranch/README end_test begin_test "creating tag from new category" tla archive-setup jane@example.com--2003/hi-world--mainline--1.3 tla tag -A jane@example.com--2003 hello-world--mainline--1.0 hi-world--mainline--1.3 tla get jane@example.com--2003/hi-world--mainline--1.3 hi-world test -f hi-world/hello-world.c test -f hi-world/README end_test begin_test "creating tag from different archive" tla tag jane@example.com--2003/hello-world--mainline--1.0 foo@example.org--2003/hello-world--devo--1.3 tla get foo@example.org--2003/hello-world--devo--1.3 foo-hello-world test -f foo-hello-world/hello-world.c test -f foo-hello-world/README end_test clean_workdir # tag: Colin Walters Wed, 17 Sep 2003 18:02:12 -0400 (test-tag.sh) # tla-1.3.5+dfsg/src/tla/tests/PLUGIN/0000755000175000017500000000000010457622000015440 5ustar userusertla-1.3.5+dfsg/src/tla/tests/PLUGIN/REQ0000644000175000017500000000001310457622000016004 0ustar userusertla tests tla-1.3.5+dfsg/src/tla/tests/test-mv-explicit.sh0000644000175000017500000002336110457622000020221 0ustar useruser#!/bin/sh # -*- mode: sh; coding: utf-8 -*- # Simple mv tests on explicitly tagged files/directories/symlinks # Copyright © 2003 Colin Walters , Rob Weir # # See the file "COPYING" for further information about # the copyright and warranty status of this work. set -e arg0="$0" srcdir=`dirname "$arg0"` . ${srcdir}/test-framework setup_with_somewhat_interesting_explicit_tla_archives test_class "mv" setup () { tla get -s jane@example.com--2003/hello-world--mainline--1.0 hello-world copy_tree hello-world hello-world.good cd hello-world } assert_output_changes () { tla what-changed -o ../,what-changed 1>../what-changed-output || test $? = 1 } verify_cleanup () { cd .. rm -rf ',what-changed' rm -f what-changed-output rm -rf hello-world mv hello-world.good hello-world } cleanup () { : } begin_test "move file to new file" setup tla mv hello-world.c hello_world.c assert_output_changes egrep '^=>[[:space:]]*hello-world\.c[[:space:]]*hello_world\.c' ../what-changed-output 1>/dev/null egrep '^=>[[:space:]]*\.arch-ids/hello-world\.c\.id[[:space:]]*\.arch-ids/hello_world\.c\.id' ../what-changed-output 1>/dev/null verify_cleanup end_test begin_test "move file onto an existing file" setup tla mv hello-world.c goodbye-world.c assert_output_changes egrep '^D[[:space:]]*goodbye-world\.c' ../what-changed-output 1>/dev/null egrep '^D[[:space:]]*.arch-ids/goodbye-world.c' ../what-changed-output 1>/dev/null egrep '^=>[[:space:]]*hello-world\.c[[:space:]]*goodbye-world.c' ../what-changed-output 1>/dev/null egrep '^=>[[:space:]]*\.arch-ids/hello-world\.c\.id[[:space:]]*\.arch-ids/goodbye-world\.c\.id' ../what-changed-output 1>/dev/null verify_cleanup end_test begin_test "move file into existing directory" setup tla mv hello-world.c old_directory assert_output_changes egrep '^=>[[:space:]]*hello-world\.c[[:space:]]*old_directory/hello-world\.c' ../what-changed-output 1>/dev/null egrep '^=>[[:space:]]*\.arch-ids/hello-world\.c\.id[[:space:]]*old_directory/\.arch-ids/hello-world\.c\.id' ../what-changed-output 1>/dev/null verify_cleanup end_test begin_test "move file onto an existing symlink to a file" setup # echo "a file which will not change" > linked_file tla mv hello-world.c link_to_goodbye-world.c assert_output_changes egrep '^=>[[:space:]]*hello-world\.c[[:space:]]*link_to_goodbye-world\.c' ../what-changed-output 1>/dev/null egrep '^=>[[:space:]]*\.arch-ids/hello-world\.c\.id[[:space:]]*\.arch-ids/link_to_goodbye-world\.c\.id' ../what-changed-output 1>/dev/null egrep -v '^M[[:space:]]*linked_to_goodbye-world\.c' ../what-changed-output 1>/dev/null verify_cleanup end_test begin_test "move file into an existing symlink to a directory" setup tla mv hello-world.c link_to_old_directory assert_output_changes egrep '^=>[[:space:]]*hello-world\.c[[:space:]]*old_directory/hello-world\.c' ../what-changed-output 1>/dev/null egrep '^=>[[:space:]]*\.arch-ids/hello-world\.c\.id[[:space:]]*old_directory/\.arch-ids/hello-world\.c\.id' ../what-changed-output 1>/dev/null verify_cleanup end_test begin_test "move symlink to new file" setup tla mv link_to_hello-world.c hello_world.c assert_output_changes egrep '^=>[[:space:]]*link_to_hello-world\.c[[:space:]]*hello_world\.c' ../what-changed-output 1>/dev/null egrep '^=>[[:space:]]*\.arch-ids/link_to_hello-world\.c\.id[[:space:]]*\.arch-ids/hello_world\.c\.id' ../what-changed-output 1>/dev/null verify_cleanup end_test begin_test "move symlink onto an existing file" setup tla mv link_to_hello-world.c goodbye-world.c assert_output_changes egrep '^D[[:space:]]*goodbye-world\.c' ../what-changed-output 1>/dev/null egrep '^D[[:space:]]*.arch-ids/goodbye-world.c' ../what-changed-output 1>/dev/null egrep '^=>[[:space:]]*link_to_hello-world\.c[[:space:]]*goodbye-world.c' ../what-changed-output 1>/dev/null egrep '^=>[[:space:]]*\.arch-ids/link_to_hello-world\.c\.id[[:space:]]*\.arch-ids/goodbye-world\.c\.id' ../what-changed-output 1>/dev/null verify_cleanup end_test begin_test "move symlink into existing directory" setup tla mv link_to_hello-world.c old_directory assert_output_changes egrep '^=>[[:space:]]*link_to_hello-world\.c[[:space:]]*old_directory/link_to_hello-world\.c' ../what-changed-output 1>/dev/null egrep '^=>[[:space:]]*\.arch-ids/link_to_hello-world\.c\.id[[:space:]]*old_directory/\.arch-ids/link_to_hello-world\.c\.id' ../what-changed-output 1>/dev/null verify_cleanup end_test begin_test "move symlink onto an existing symlink to a file" setup tla mv link_to_hello-world.c link_to_goodbye-world.c assert_output_changes egrep '^=>[[:space:]]*link_to_hello-world\.c[[:space:]]*link_to_goodbye-world\.c' ../what-changed-output 1>/dev/null egrep '^=>[[:space:]]*\.arch-ids/link_to_hello-world\.c\.id[[:space:]]*\.arch-ids/link_to_goodbye-world\.c\.id' ../what-changed-output 1>/dev/null egrep -v '^M[[:space:]]*goodbye-world\.c' ../what-changed-output 1>/dev/null verify_cleanup end_test begin_test "move symlink onto an existing symlink to a directory" setup tla mv link_to_hello-world.c link_to_old_directory assert_output_changes egrep '^=>[[:space:]]*link_to_hello-world\.c[[:space:]]*old_directory/link_to_hello-world\.c' ../what-changed-output 1>/dev/null egrep '^=>[[:space:]]*\.arch-ids/link_to_hello-world\.c\.id[[:space:]]*old_directory/\.arch-ids/link_to_hello-world\.c\.id' ../what-changed-output 1>/dev/null verify_cleanup end_test begin_test "move directory to a previously non-existent name" setup tla mv old_directory renamed_directory assert_output_changes egrep '^D/[[:space:]]*old_directory/\.arch-ids' ../what-changed-output 1>/dev/null egrep '^A/[[:space:]]*renamed_directory/\.arch-ids' ../what-changed-output 1>/dev/null egrep '^/>[[:space:]]*old_directory[[:space:]]*renamed_directory' ../what-changed-output 1>/dev/null egrep '^=>[[:space:]]*old_directory/.arch-ids/=id[[:space:]]*renamed_directory/.arch-ids/=id' ../what-changed-output 1>/dev/null verify_cleanup end_test begin_test "move directory into an existing directory" setup tla mv old_directory new_directory assert_output_changes egrep '^D/[[:space:]]*old_directory/\.arch-ids' ../what-changed-output 1>/dev/null egrep '^A/[[:space:]]*new_directory/old_directory/\.arch-ids' ../what-changed-output 1>/dev/null egrep '^/>[[:space:]]*old_directory[[:space:]]*new_directory/old_directory' ../what-changed-output 1>/dev/null egrep '^=>[[:space:]]*old_directory/.arch-ids/=id[[:space:]]*new_directory/old_directory/.arch-ids/=id' ../what-changed-output 1>/dev/null verify_cleanup end_test begin_test "move directory into a symlink to an existing directory" setup tla mv old_directory link_to_new_directory assert_output_changes egrep '^D/[[:space:]]*old_directory/\.arch-ids' ../what-changed-output 1>/dev/null egrep '^A/[[:space:]]*new_directory/old_directory/\.arch-ids' ../what-changed-output 1>/dev/null egrep '^/>[[:space:]]*old_directory[[:space:]]*new_directory/old_directory' ../what-changed-output 1>/dev/null egrep '^=>[[:space:]]*old_directory/.arch-ids/=id[[:space:]]*new_directory/old_directory/.arch-ids/=id' ../what-changed-output 1>/dev/null verify_cleanup end_test begin_test "move file into a directory tree" setup tla mv hello-world.c hierarchy/left/ assert_output_changes egrep '^=>[[:space:]]*hello-world\.c[[:space:]]*hierarchy/left/hello-world\.c' ../what-changed-output 1>/dev/null egrep '^=>[[:space:]]*\.arch-ids/hello-world\.c\.id[[:space:]]*hierarchy/left/\.arch-ids/hello-world\.c\.id' ../what-changed-output 1>/dev/null tla commit -L"moved hello-world.c into the tree" 1>/dev/null verify_cleanup end_test begin_test "move file out of a directory tree" setup tla mv hierarchy/left/hello-world.c . assert_output_changes egrep '^=>[[:space:]]*hierarchy/left/hello-world\.c[[:space:]]*hello-world\.c' ../what-changed-output 1>/dev/null egrep '^=>[[:space:]]*hierarchy/left/\.arch-ids/hello-world\.c\.id[[:space:]]*\.arch-ids/hello-world\.c\.id' ../what-changed-output 1>/dev/null verify_cleanup end_test begin_test "move file around a directory tree" setup cd hierarchy/left/ tla mv hello-world.c ../right/left/ cd ../.. assert_output_changes egrep '^=>[[:space:]]*hierarchy/left/hello-world\.c[[:space:]]*hierarchy/right/left/hello-world\.c' ../what-changed-output 1>/dev/null egrep '^=>[[:space:]]*hierarchy/left/\.arch-ids/hello-world\.c\.id[[:space:]]*hierarchy/right/left/\.arch-ids/hello-world\.c\.id' ../what-changed-output 1>/dev/null verify_cleanup end_test begin_test "move file into a directory tree and rename" setup tla mv hierarchy/left/hello-world.c hierarchy/left/renamed.c assert_output_changes egrep '^=>[[:space:]]*hierarchy/left/hello-world\.c[[:space:]]*hierarchy/left/renamed\.c' ../what-changed-output 1>/dev/null egrep '^=>[[:space:]]*hierarchy/left/\.arch-ids/hello-world\.c\.id[[:space:]]*hierarchy/left/\.arch-ids/renamed\.c\.id' ../what-changed-output 1>/dev/null tla commit -L"moved hello-world.c to renamed.c into the tree" 1> /dev/null verify_cleanup end_test begin_test "move file out of a directory tree and rename" setup tla mv hierarchy/left/renamed.c hello-world.c assert_output_changes egrep '^=>[[:space:]]*hierarchy/left/renamed\.c[[:space:]]*hello-world\.c' ../what-changed-output 1>/dev/null egrep '^=>[[:space:]]*hierarchy/left/\.arch-ids/renamed\.c\.id[[:space:]]*\.arch-ids/hello-world\.c\.id' ../what-changed-output 1>/dev/null verify_cleanup end_test begin_test "move file around a directory tree and rename" setup pwd cd hierarchy/left/ tla mv renamed.c ../right/left/hello-world.c cd ../.. assert_output_changes egrep '^=>[[:space:]]*hierarchy/left/renamed\.c[[:space:]]*hierarchy/right/left/hello-world\.c' ../what-changed-output 1>/dev/null egrep '^=>[[:space:]]*hierarchy/left/\.arch-ids/renamed\.c\.id[[:space:]]*hierarchy/right/left/\.arch-ids/hello-world\.c\.id' ../what-changed-output 1>/dev/null verify_cleanup end_test clean_workdir # tag: Rob Weir Tue Sep 23 16:31:25 EST 2003 (test-mv-explicit.sh) # tla-1.3.5+dfsg/src/tla/tests/test-simple-commits-2.sh0000644000175000017500000000530410457622000021056 0ustar useruser#!/bin/sh # -*- mode: sh; coding: utf-8 -*- # Simple commit tests (2) # Copyright © 2003 Colin Walters # # See the file "COPYING" for further information about # the copyright and warranty status of this work. set -e arg0="$0" srcdir=`dirname "$arg0"` . ${srcdir}/test-framework setup_with_trivial_archives test_class "simple commits (pass 2)" setup () { tla get jane@example.com--2003/hello-world--mainline--1.0 hello-world cd hello-world } begin_test "single file modification" setup sed -e 's/Hello World/Hello, World/' < hello-world.c > hello-world.c.new mv hello-world.c.new hello-world.c tla commit -s 'correctly punctuate' archive_has_revision_with_summary jane@example.com--2003 hello-world--mainline--1.0--patch-1 'correctly punctuate' end_test begin_test "Adding new file" setup echo 'We follow the GNU coding standards' > HACKING tla add-id HACKING tla commit -s 'Add HACKING document' archive_has_revision_with_summary jane@example.com--2003 hello-world--mainline--1.0--patch-2 'Add HACKING document' end_test begin_test "Removing existing file" setup rm README tla delete-id README tla commit -s 'No README is necessary' archive_has_revision_with_summary jane@example.com--2003 hello-world--mainline--1.0--patch-3 'No README is necessary' end_test begin_test "Moving file" setup mv hello-world.c hello_world.c tla move-id hello-world.c hello_world.c tla commit -s 'Use UNIX separator' archive_has_revision_with_summary jane@example.com--2003 hello-world--mainline--1.0--patch-4 'Use UNIX separator' end_test begin_test "limited commit (single file modification)" setup sed -e 's/Hello, World/Hello World!!!/' < hello_world.c > hello_world.c.new mv hello_world.c.new hello_world.c tla commit -s 'add some emphasis' -- hello_world.c archive_has_revision_with_summary jane@example.com--2003 hello-world--mainline--1.0--patch-5 'add some emphasis' end_test begin_test "limited commit (multiple file modifications)" setup echo '/* c-file-style: gnu */' >> hello_world.c tla commit -s 'punctuation in HACKING, add style to hello_world' -- HACKING hello_world.c archive_has_revision_with_summary jane@example.com--2003 hello-world--mainline--1.0--patch-6 'punctuation in HACKING, add style to hello_world' end_test begin_test "limited commit (one file when multiple file modifications)" setup echo 'arrgh' >> hello_world.c echo 'gaarh' >> HACKING tla commit -s 'scream a little' -- hello_world.c archive_has_revision_with_summary jane@example.com--2003 hello-world--mainline--1.0--patch-7 'scream a little' tla changes -q && test_fail "file HACKING not detected as modified after partial commit" end_test clean_workdir # tag: Colin Walters Thu, 2 Oct 2003 17:39:21 -0400 (test-simple-commits-2.sh) # tla-1.3.5+dfsg/src/tla/tests/test-file-diffs-baz.sh0000644000175000017500000000254110457622000020537 0ustar useruser#!/bin/sh # -*- mode: sh; coding: utf-8 -*- # Simple file-diffs tests # Copyright © 2003 Colin Walters # # See the file "COPYING" for further information about # the copyright and warranty status of this work. set -e arg0="$0" srcdir=`dirname "$arg0"` . ${srcdir}/test-framework setup_with_trivial_archives test_class "file-diffs" setup () { tla get jane@example.com--2003/hello-world--mainline--1.0 hello-world cd hello-world } cleanup () { : } do_file_diffs () { tla file-diffs "$@" || test "$?" = 1 } begin_test "diffs for unmodified file" setup do_file_diffs hello-world.c > ../hello-world.patch file_is_empty ../hello-world.patch cleanup end_test begin_test "diffs for single file modification" setup sed -e 's/Hello world/Hello, world/' < hello-world.c > hello-world.c.new mv hello-world.c.new hello-world.c do_file_diffs hello-world.c > ../hello-world.patch file_matches '^-.*Hello world' ../hello-world.patch file_matches '^\+.*Hello, world' ../hello-world.patch cleanup end_test begin_test 'diff | patch -R => identity' setup cd .. copy_tree hello-world hello-world.good cd hello-world sed -e 's/Hello world/Hello, world/' < hello-world.c > hello-world.c.new mv hello-world.c.new hello-world.c do_file_diffs hello-world.c | patch -p1 -R cd .. assert_trees_equal hello-world hello-world.good cleanup end_test clean_workdir tla-1.3.5+dfsg/src/tla/tests/test-archive-registration.sh0000644000175000017500000000233510457622000022107 0ustar useruser#!/bin/sh # -*- mode: sh; coding: utf-8 -*- # Test archive registration # Copyright © 2003 Colin Walters # # See the file "COPYING" for further information about # the copyright and warranty status of this work. set -e arg0="$0" srcdir=`dirname "$arg0"` . ${srcdir}/test-framework setup_workdir test_class "Archive registration" begin_test "Archive registration 1" tla register-archive foo@bar.com--2003 http://foobar.net/arch test $(tla whereis-archive foo@bar.com--2003) = "http://foobar.net/arch" end_test begin_test "Archive registration 2" tla register-archive blah@baz.com--moo /var/www/baz/archives/spoon test $(tla whereis-archive blah@baz.com--moo) = /var/www/baz/archives/spoon test $(tla whereis-archive foo@bar.com--2003) = "http://foobar.net/arch" end_test begin_test "Archive re-registration" tla register-archive -f foo@bar.com--2003 http://barfoo.com/ARCH test $(tla whereis-archive foo@bar.com--2003) = http://barfoo.com/ARCH end_test begin_test "Archive unregistration" tla register-archive -d blah@baz.com--moo if tla whereis-archive blah@baz.com--moo 2>/dev/null; then exit 1 fi end_test clean_workdir # tag: Colin Walters Tue, 16 Sep 2003 20:35:26 -0400 (test-register-archive.sh) # tla-1.3.5+dfsg/src/tla/tests/test-rm-explicit.sh0000644000175000017500000000226010457622000020210 0ustar useruser#!/bin/sh # -*- mode: sh; coding: utf-8 -*- # Tests for tla rm. # Copyright 2004 Stefanie Tellex # # See the file "COPYING" for further information about # the copyright and warranty status of this work. set -e arg0="$0" srcdir=`dirname "$arg0"` . ${srcdir}/test-framework setup_with_somewhat_interesting_explicit_archives test_class "rm" setup () { tla get jane@example.com--2003/hello-world--mainline--1.0 hello-world cd hello-world } begin_test "Removing existing file" setup tla rm hello-world.c test ! -e hello-world.c tla commit -s 'No README is necessary' archive_has_revision_with_summary jane@example.com--2003 hello-world--mainline--1.0--patch-1 'No README is necessary' end_test begin_test "Removing existing symlink" setup tla rm link_to_hello-world.c test ! -e link_to_hello-world.c tla commit -s 'No README is necessary' archive_has_revision_with_summary jane@example.com--2003 hello-world--mainline--1.0--patch-1 'No README is necessary' end_test begin_test "Doesn't remove directory" setup echo ${builddir}/../tla/tla rm old_directory ; true ! tla rm old_directory test -d old_directory echo after test end_test clean_workdir # tag: # tla-1.3.5+dfsg/src/tla/tests/test-import-baz.sh0000644000175000017500000000200010457622000020027 0ustar useruser#!/bin/sh # -*- mode: sh; coding: utf-8 -*- # Test import # Copyright © 2003 Colin Walters # # See the file "COPYING" for further information about # the copyright and warranty status of this work. set -e arg0="$0" srcdir=`dirname "$arg0"` . ${srcdir}/test-framework setup_with_setup_archives test_class "baz import" begin_test "Simple import" make_hello_world hello-world--mainline--1.0 cd hello-world--mainline--1.0 tla init-tree --nested jane@example.com--2003/hello-world--mainline--1.0 tla id-tagging-method explicit tla add-id hello-world.c README tla import -S -L 'initial import' tla categories -A jane@example.com--2003 >&2 test "$(tla categories -A jane@example.com--2003)" = "hello-world" test "$(tla branches jane@example.com--2003/hello-world)" = "hello-world--mainline" test "$(tla versions jane@example.com--2003/hello-world--mainline)" = "hello-world--mainline--1.0" test -d $(tla whereis-archive jane@example.com--2003)/hello-world--mainline--1.0/base-0 end_test clean_workdir tla-1.3.5+dfsg/src/tla/tests/test-parse-package-name.sh0000644000175000017500000000666210457622000021406 0ustar useruser#!/bin/sh # -*- mode: sh; coding: utf-8 -*- # Test parse-package-name # Copyright © 2003 Colin Walters # # See the file "COPYING" for further information about # the copyright and warranty status of this work. set -e arg0="$0" srcdir=`dirname "$arg0"` . ${srcdir}/test-framework setup_workdir test_class "parse-package-name" begin_test "foo--bar--0--patch-1" name="foo--bar--0--patch-1" category=$(tla parse-package-name -c "${name}" $revision) branch=$(tla parse-package-name -b "${name}" $revision) version=$(tla parse-package-name -v "${name}" $revision) patchlvl=$(tla parse-package-name -l "${name}" $revision) test "${category}" = 'foo' test "${branch}" = 'bar' test "${version}" = '0' test "${patchlvl}" = 'patch-1' end_test begin_test "foo-bar--baz--0--patch-1" name="foo-bar--baz--0--patch-1" category=$(tla parse-package-name -c "${name}" $revision) branch=$(tla parse-package-name -b "${name}" $revision) version=$(tla parse-package-name -v "${name}" $revision) patchlvl=$(tla parse-package-name -l "${name}" $revision) test "${category}" = 'foo-bar' test "${branch}" = 'baz' test "${version}" = '0' test "${patchlvl}" = 'patch-1' end_test begin_test "foo-bar--baz-whee--0--patch-1" name="foo-bar--baz-whee--0--patch-1" category=$(tla parse-package-name -c "${name}" $revision) branch=$(tla parse-package-name -b "${name}" $revision) version=$(tla parse-package-name -v "${name}" $revision) patchlvl=$(tla parse-package-name -l "${name}" $revision) test "${category}" = 'foo-bar' test "${branch}" = 'baz-whee' test "${version}" = '0' test "${patchlvl}" = 'patch-1' end_test begin_test "foo-bar--baz-whee--3.1--patch-1" name="foo-bar--baz-whee--3.1--patch-1" category=$(tla parse-package-name -c "${name}" $revision) branch=$(tla parse-package-name -b "${name}" $revision) version=$(tla parse-package-name -v "${name}" $revision) patchlvl=$(tla parse-package-name -l "${name}" $revision) test "${category}" = 'foo-bar' test "${branch}" = 'baz-whee' test "${version}" = '3.1' test "${patchlvl}" = 'patch-1' end_test begin_test "foo-bar--baz-whee--3.1.3--patch-1" name="foo-bar--baz-whee--3.1.3--patch-1" category=$(tla parse-package-name -c "${name}" $revision) branch=$(tla parse-package-name -b "${name}" $revision) version=$(tla parse-package-name -v "${name}" $revision) patchlvl=$(tla parse-package-name -l "${name}" $revision) test "${category}" = 'foo-bar' test "${branch}" = 'baz-whee' test "${version}" = '3.1.3' test "${patchlvl}" = 'patch-1' end_test begin_test "foo-bar--baz-whee--3.1.3--base-0" name="foo-bar--baz-whee--3.1.3--base-0" category=$(tla parse-package-name -c "${name}" $revision) branch=$(tla parse-package-name -b "${name}" $revision) version=$(tla parse-package-name -v "${name}" $revision) patchlvl=$(tla parse-package-name -l "${name}" $revision) test "${category}" = 'foo-bar' test "${branch}" = 'baz-whee' test "${version}" = '3.1.3' test "${patchlvl}" = 'base-0' end_test begin_test "b33f--baz-whee-foo-bar--3.1.3--base-0" name="b33f--baz-whee-foo-bar--3.1.3--base-0" category=$(tla parse-package-name -c "${name}" $revision) branch=$(tla parse-package-name -b "${name}" $revision) version=$(tla parse-package-name -v "${name}" $revision) patchlvl=$(tla parse-package-name -l "${name}" $revision) test "${category}" = 'b33f' test "${branch}" = 'baz-whee-foo-bar' test "${version}" = '3.1.3' test "${patchlvl}" = 'base-0' end_test clean_workdir # tag: Colin Walters Tue, 16 Sep 2003 22:16:32 -0400 (test-parse-package-name.sh) # tla-1.3.5+dfsg/src/tla/tests/test-mv-explicit-baz.sh0000644000175000017500000002324710457622000020776 0ustar useruser#!/bin/sh # -*- mode: sh; coding: utf-8 -*- # Simple mv tests on explicitly tagged files/directories/symlinks # Copyright © 2003 Colin Walters , Rob Weir # # See the file "COPYING" for further information about # the copyright and warranty status of this work. set -e arg0="$0" srcdir=`dirname "$arg0"` . ${srcdir}/test-framework setup_with_somewhat_interesting_explicit_archives test_class "mv" setup () { tla get -s jane@example.com--2003/hello-world--mainline--1.0 hello-world copy_tree hello-world hello-world.good cd hello-world } assert_output_changes () { tla what-changed -o ../,what-changed 1>../what-changed-output || test $? = 1 } verify_cleanup () { cd .. rm -rf ',what-changed' rm -f what-changed-output rm -rf hello-world mv hello-world.good hello-world } cleanup () { : } begin_test "move file to new file" setup tla mv hello-world.c hello_world.c assert_output_changes egrep '^=>[[:space:]]*hello-world\.c[[:space:]]*hello_world\.c' ../what-changed-output 1>/dev/null egrep '^=>[[:space:]]*\.arch-ids/hello-world\.c\.id[[:space:]]*\.arch-ids/hello_world\.c\.id' ../what-changed-output 1>/dev/null verify_cleanup end_test begin_test "move file onto an existing file" setup tla mv hello-world.c goodbye-world.c assert_output_changes egrep '^D[[:space:]]*goodbye-world\.c' ../what-changed-output 1>/dev/null egrep '^D[[:space:]]*.arch-ids/goodbye-world.c' ../what-changed-output 1>/dev/null egrep '^=>[[:space:]]*hello-world\.c[[:space:]]*goodbye-world.c' ../what-changed-output 1>/dev/null egrep '^=>[[:space:]]*\.arch-ids/hello-world\.c\.id[[:space:]]*\.arch-ids/goodbye-world\.c\.id' ../what-changed-output 1>/dev/null verify_cleanup end_test begin_test "move file into existing directory" setup tla mv hello-world.c old_directory assert_output_changes egrep '^=>[[:space:]]*hello-world\.c[[:space:]]*old_directory/hello-world\.c' ../what-changed-output 1>/dev/null egrep '^=>[[:space:]]*\.arch-ids/hello-world\.c\.id[[:space:]]*old_directory/\.arch-ids/hello-world\.c\.id' ../what-changed-output 1>/dev/null verify_cleanup end_test begin_test "move file onto an existing symlink to a file" setup # echo "a file which will not change" > linked_file tla mv hello-world.c link_to_goodbye-world.c assert_output_changes egrep '^=>[[:space:]]*hello-world\.c[[:space:]]*link_to_goodbye-world\.c' ../what-changed-output 1>/dev/null egrep '^=>[[:space:]]*\.arch-ids/hello-world\.c\.id[[:space:]]*\.arch-ids/link_to_goodbye-world\.c\.id' ../what-changed-output 1>/dev/null egrep -v '^M[[:space:]]*linked_to_goodbye-world\.c' ../what-changed-output 1>/dev/null verify_cleanup end_test begin_test "move file into an existing symlink to a directory" setup tla mv hello-world.c link_to_old_directory assert_output_changes egrep '^=>[[:space:]]*hello-world\.c[[:space:]]*old_directory/hello-world\.c' ../what-changed-output 1>/dev/null egrep '^=>[[:space:]]*\.arch-ids/hello-world\.c\.id[[:space:]]*old_directory/\.arch-ids/hello-world\.c\.id' ../what-changed-output 1>/dev/null verify_cleanup end_test begin_test "move symlink to new file" setup tla mv link_to_hello-world.c hello_world.c assert_output_changes egrep '^=>[[:space:]]*link_to_hello-world\.c[[:space:]]*hello_world\.c' ../what-changed-output 1>/dev/null egrep '^=>[[:space:]]*\.arch-ids/link_to_hello-world\.c\.id[[:space:]]*\.arch-ids/hello_world\.c\.id' ../what-changed-output 1>/dev/null verify_cleanup end_test begin_test "move symlink onto an existing file" setup tla mv link_to_hello-world.c goodbye-world.c assert_output_changes egrep '^D[[:space:]]*goodbye-world\.c' ../what-changed-output 1>/dev/null egrep '^D[[:space:]]*.arch-ids/goodbye-world.c' ../what-changed-output 1>/dev/null egrep '^=>[[:space:]]*link_to_hello-world\.c[[:space:]]*goodbye-world.c' ../what-changed-output 1>/dev/null egrep '^=>[[:space:]]*\.arch-ids/link_to_hello-world\.c\.id[[:space:]]*\.arch-ids/goodbye-world\.c\.id' ../what-changed-output 1>/dev/null verify_cleanup end_test begin_test "move symlink into existing directory" setup tla mv link_to_hello-world.c old_directory assert_output_changes egrep '^=>[[:space:]]*link_to_hello-world\.c[[:space:]]*old_directory/link_to_hello-world\.c' ../what-changed-output 1>/dev/null egrep '^=>[[:space:]]*\.arch-ids/link_to_hello-world\.c\.id[[:space:]]*old_directory/\.arch-ids/link_to_hello-world\.c\.id' ../what-changed-output 1>/dev/null verify_cleanup end_test begin_test "move symlink onto an existing symlink to a file" setup tla mv link_to_hello-world.c link_to_goodbye-world.c assert_output_changes egrep '^=>[[:space:]]*link_to_hello-world\.c[[:space:]]*link_to_goodbye-world\.c' ../what-changed-output 1>/dev/null egrep '^=>[[:space:]]*\.arch-ids/link_to_hello-world\.c\.id[[:space:]]*\.arch-ids/link_to_goodbye-world\.c\.id' ../what-changed-output 1>/dev/null egrep -v '^M[[:space:]]*goodbye-world\.c' ../what-changed-output 1>/dev/null verify_cleanup end_test begin_test "move symlink onto an existing symlink to a directory" setup tla mv link_to_hello-world.c link_to_old_directory assert_output_changes egrep '^=>[[:space:]]*link_to_hello-world\.c[[:space:]]*old_directory/link_to_hello-world\.c' ../what-changed-output 1>/dev/null egrep '^=>[[:space:]]*\.arch-ids/link_to_hello-world\.c\.id[[:space:]]*old_directory/\.arch-ids/link_to_hello-world\.c\.id' ../what-changed-output 1>/dev/null verify_cleanup end_test begin_test "move directory to a previously non-existent name" setup tla mv old_directory renamed_directory assert_output_changes egrep '^D/[[:space:]]*old_directory/\.arch-ids' ../what-changed-output 1>/dev/null egrep '^A/[[:space:]]*renamed_directory/\.arch-ids' ../what-changed-output 1>/dev/null egrep '^/>[[:space:]]*old_directory[[:space:]]*renamed_directory' ../what-changed-output 1>/dev/null egrep '^=>[[:space:]]*old_directory/.arch-ids/=id[[:space:]]*renamed_directory/.arch-ids/=id' ../what-changed-output 1>/dev/null verify_cleanup end_test begin_test "move directory into an existing directory" setup tla mv old_directory new_directory assert_output_changes egrep '^D/[[:space:]]*old_directory/\.arch-ids' ../what-changed-output 1>/dev/null egrep '^A/[[:space:]]*new_directory/old_directory/\.arch-ids' ../what-changed-output 1>/dev/null egrep '^/>[[:space:]]*old_directory[[:space:]]*new_directory/old_directory' ../what-changed-output 1>/dev/null egrep '^=>[[:space:]]*old_directory/.arch-ids/=id[[:space:]]*new_directory/old_directory/.arch-ids/=id' ../what-changed-output 1>/dev/null verify_cleanup end_test begin_test "move directory into a symlink to an existing directory" setup tla mv old_directory link_to_new_directory assert_output_changes egrep '^D/[[:space:]]*old_directory/\.arch-ids' ../what-changed-output 1>/dev/null egrep '^A/[[:space:]]*new_directory/old_directory/\.arch-ids' ../what-changed-output 1>/dev/null egrep '^/>[[:space:]]*old_directory[[:space:]]*new_directory/old_directory' ../what-changed-output 1>/dev/null egrep '^=>[[:space:]]*old_directory/.arch-ids/=id[[:space:]]*new_directory/old_directory/.arch-ids/=id' ../what-changed-output 1>/dev/null verify_cleanup end_test begin_test "move file into a directory tree" setup tla mv hello-world.c hierarchy/left/ assert_output_changes egrep '^=>[[:space:]]*hello-world\.c[[:space:]]*hierarchy/left/hello-world\.c' ../what-changed-output 1>/dev/null egrep '^=>[[:space:]]*\.arch-ids/hello-world\.c\.id[[:space:]]*hierarchy/left/\.arch-ids/hello-world\.c\.id' ../what-changed-output 1>/dev/null tla commit -L"moved hello-world.c into the tree" 1>/dev/null verify_cleanup end_test begin_test "move file out of a directory tree" setup tla mv hierarchy/left/hello-world.c . assert_output_changes egrep '^=>[[:space:]]*hierarchy/left/hello-world\.c[[:space:]]*hello-world\.c' ../what-changed-output 1>/dev/null egrep '^=>[[:space:]]*hierarchy/left/\.arch-ids/hello-world\.c\.id[[:space:]]*\.arch-ids/hello-world\.c\.id' ../what-changed-output 1>/dev/null verify_cleanup end_test begin_test "move file around a directory tree" setup cd hierarchy/left/ tla mv hello-world.c ../right/left/ cd ../.. assert_output_changes egrep '^=>[[:space:]]*hierarchy/left/hello-world\.c[[:space:]]*hierarchy/right/left/hello-world\.c' ../what-changed-output 1>/dev/null egrep '^=>[[:space:]]*hierarchy/left/\.arch-ids/hello-world\.c\.id[[:space:]]*hierarchy/right/left/\.arch-ids/hello-world\.c\.id' ../what-changed-output 1>/dev/null verify_cleanup end_test begin_test "move file into a directory tree and rename" setup tla mv hierarchy/left/hello-world.c hierarchy/left/renamed.c assert_output_changes egrep '^=>[[:space:]]*hierarchy/left/hello-world\.c[[:space:]]*hierarchy/left/renamed\.c' ../what-changed-output 1>/dev/null egrep '^=>[[:space:]]*hierarchy/left/\.arch-ids/hello-world\.c\.id[[:space:]]*hierarchy/left/\.arch-ids/renamed\.c\.id' ../what-changed-output 1>/dev/null tla commit -L"moved hello-world.c to renamed.c into the tree" 1> /dev/null verify_cleanup end_test begin_test "move file out of a directory tree and rename" setup tla mv hierarchy/left/renamed.c hello-world.c assert_output_changes egrep '^=>[[:space:]]*hierarchy/left/renamed\.c[[:space:]]*hello-world\.c' ../what-changed-output 1>/dev/null egrep '^=>[[:space:]]*hierarchy/left/\.arch-ids/renamed\.c\.id[[:space:]]*\.arch-ids/hello-world\.c\.id' ../what-changed-output 1>/dev/null verify_cleanup end_test begin_test "move file around a directory tree and rename" setup pwd cd hierarchy/left/ tla mv renamed.c ../right/left/hello-world.c cd ../.. assert_output_changes egrep '^=>[[:space:]]*hierarchy/left/renamed\.c[[:space:]]*hierarchy/right/left/hello-world\.c' ../what-changed-output 1>/dev/null egrep '^=>[[:space:]]*hierarchy/left/\.arch-ids/renamed\.c\.id[[:space:]]*hierarchy/right/left/\.arch-ids/hello-world\.c\.id' ../what-changed-output 1>/dev/null verify_cleanup end_test clean_workdir tla-1.3.5+dfsg/src/tla/tests/test-what-changed.sh0000644000175000017500000000625310457622000020313 0ustar useruser#!/bin/sh # -*- mode: sh; coding: utf-8 -*- # Simple what-changed tests # Copyright © 2003 Colin Walters # # See the file "COPYING" for further information about # the copyright and warranty status of this work. set -e arg0="$0" srcdir=`dirname "$arg0"` . ${srcdir}/test-framework setup_with_trivial_archives test_class "what-changed" setup () { tla get jane@example.com--2003/hello-world--mainline--1.0 hello-world copy_tree hello-world hello-world.good cd hello-world } assert_output_changes () { tla what-changed -o ../,what-changed "$@" 1>../what-changed-output || test $? = 1 } verify_cleanup () { cd .. rm -rf ',what-changed' rm -f what-changed-output rm -rf hello-world mv hello-world.good hello-world } # begin_test "null change output" # setup # tla what-changed > ../what-changed-output # file_is_empty ../what-changed-output # verify_cleanup # end_test begin_test "null changeset" setup tla what-changed -o ../,what-changed changeset_is_null_changeset ../,what-changed verify_cleanup end_test begin_test "single file modification" setup sed -e 's/Hello world/Hello, world/' < hello-world.c > hello-world.c.new mv hello-world.c.new hello-world.c assert_output_changes file_matches '^M[[:space:]]*hello-world.c' ../what-changed-output verify_cleanup end_test begin_test "single file modification changeset" setup sed -e 's/Hello world/Hello, world/' < hello-world.c > hello-world.c.new mv hello-world.c.new hello-world.c assert_output_changes changeset_patches_file ../,what-changed hello-world.c verify_cleanup end_test begin_test "new file addition output" setup echo 'We follow the GNU coding standards' > HACKING tla add-id HACKING assert_output_changes file_matches '^A[[:space:]]*HACKING' ../what-changed-output file_matches '^A[[:space:]]*.arch-ids/HACKING.id' ../what-changed-output verify_cleanup end_test begin_test "new file addition changeset" setup echo 'We follow the GNU coding standards' > HACKING tla add-id HACKING assert_output_changes changeset_adds_file ../,what-changed HACKING changeset_adds_file ../,what-changed .arch-ids/HACKING.id verify_cleanup end_test begin_test "removing existing file output" setup rm README tla delete-id README assert_output_changes file_matches '^D[[:space:]]*README' ../what-changed-output verify_cleanup end_test begin_test "removing existing file changeset" setup rm README tla delete-id README assert_output_changes changeset_deletes_file ../,what-changed README verify_cleanup end_test begin_test "moving file output" setup mv hello-world.c hello_world.c tla move-id hello-world.c hello_world.c assert_output_changes file_matches '^=>[[:space:]]*hello-world.c.*hello_world.c' ../what-changed-output verify_cleanup end_test begin_test "moving file changeset" setup mv hello-world.c hello_world.c tla move-id hello-world.c hello_world.c assert_output_changes changeset_renames_file ../,what-changed hello-world.c hello_world.c verify_cleanup end_test begin_test "diffing against version without patchlevel" setup assert_output_changes jane@example.com--2003/hello-world--mainline--1.0 verify_cleanup end_test clean_workdir # tag: Colin Walters Wed, 17 Sep 2003 14:08:00 -0400 (test-what-changed.sh) # tla-1.3.5+dfsg/src/tla/=merges0000644000175000017500000000063710457622000014610 0ustar useruserjivera@flame.org--2004/tla--libneon-fixes--1.3--patch-2 jivera@flame.org--2004/tla--inv-id-truncation--1.3--patch-1 jivera@flame.org--2004/tla--changes-speedup--1.3--patch-2 jivera@flame.org--2004/tla--get-changeset-fix--1.3--patch-1 jivera@flame.org--2004/tla--validate-archive-usage--1.3--patch-2 jivera@flame.org--2004/tla--bug-100--1.3--patch-1 jivera@flame.org--2004/tla--star-merge-ancestor-bug--1.3--patch-1 tla-1.3.5+dfsg/src/tla/ChangeLog0000644000175000017500000043264110457622000015064 0ustar useruser# do not edit -- automatically generated by arch changelog # tag: automatic-ChangeLog--lord@emf.net--gnu-arch-2004/tla--devo--1.3 # 2004-11-04 19:29:56 GMT Matthew Dempsky patch-11 Summary: add =merges file Revision: tla--devo--1.3--patch-11 Create the =merges file which contains a list of all revisions that have already been merged. new files: .arch-ids/=merges.id =merges modified files: ChangeLog new directories: .arch-ids 2004-10-27 21:24:17 GMT Matthew Dempsky patch-10 Summary: fix "one-way" star-merge bug Revision: tla--devo--1.3--patch-10 This patch fixes the star-merge case when MINE has an older latest patch log entry from REFERENCE than THEIR's latest patch log entry. new files: tests/test-star-merge.sh modified files: ChangeLog libarch/star-merge.c tests/Makefile.in 2004-10-27 19:19:57 GMT Matthew Dempsky patch-9 Summary: only regular files, symlinks, and directories should be source Revision: tla--devo--1.3--patch-9 When calculating the inventory, only regular files, symbolic links, and directories should be considered source. Any other files (e.g. socket files, FIFOs, etc.) should be considered precious. modified files: ChangeLog libarch/invent.c 2004-10-27 19:02:21 GMT Matthew Dempsky patch-8 Summary: prevent getting from invalid archives Revision: tla--devo--1.3--patch-8 This patch adds a check to 'tla get' to prevent the user from trying to retrieve a revision from a -MIRROR or -SOURCE archive. This is needed because 'tla tree-version' may be set from the string passed to 'tla get'. modified files: ChangeLog libarch/cmd-get.c libarch/cmdutils.c libarch/cmdutils.h 2004-10-27 18:30:58 GMT Matthew Dempsky patch-7 Summary: fix regressions in 'tla get-changeset' Revision: tla--devo--1.3--patch-7 Reverts 'tla get-changeset' to default to 'tla my-default-archive'. Also includes Aaron Bentley's fix to prevent the regression when a default-archive is not set and trying to retrieve a fully qualified revision. new files: tests/test-get-changeset.sh modified files: ChangeLog libarch/cmd-get-changeset.c tests/Makefile.in 2004-10-27 15:41:10 GMT Matthew Dempsky patch-6 Summary: avoid unnecessary remote connections in 'tla changes' Revision: tla--devo--1.3--patch-6 When a fully qualified revision is specified in 'tla changes', first check if the revision exists in a revision library. If so, skip making an archive connection. modified files: ChangeLog libarch/cmd-changes.c libarch/cmdutils.c libarch/cmdutils.h 2004-10-25 22:21:51 GMT Matthew Dempsky patch-5 Summary: change the 1k boundary error to a warning Revision: tla--devo--1.3--patch-5 Instead of panicking when an arch tag crosses the 1k boundary at the beginning of a file, instead print a warning along with the file name. Also, added a test to prevent false positives from files less than 1025 bytes in length without a newline at the end. modified files: ChangeLog libarch/inv-ids.c 2004-10-18 23:06:03 GMT Matthew Dempsky patch-4 Summary: fix https support Revision: tla--devo--1.3--patch-4 Call ne_uri_defaultport rather than hard coding 80 because https uses a different port number. Also, enable default certificates for SSL. This patch was provided by Bryan Nollett. modified files: ChangeLog libarch/pfs-dav.c 2004-10-05 21:23:37 GMT Tom Lord patch-3 Summary: restore recent ancestry patch logs Revision: tla--devo--1.3--patch-3 Restored the recent ancestry patch logs removed during the most recent log pruning so that `star-merge --reference' can be used. modified files: ChangeLog new patches: lord@emf.net--2004/tla--devo--1.2--base-0 lord@emf.net--2004/tla--devo--1.2--patch-1 lord@emf.net--2004/tla--devo--1.2--patch-2 lord@emf.net--2004/tla--devo--1.2--patch-3 lord@emf.net--2004/tla--devo--1.2--patch-4 lord@emf.net--2004/tla--devo--1.2--patch-5 lord@emf.net--2004/tla--devo--1.2--patch-6 lord@emf.net--2004/tla--devo--1.2--patch-7 lord@emf.net--2004/tla--devo--1.2--patch-8 lord@emf.net--2004/tla--devo--1.2--patch-9 lord@emf.net--2004/tla--devo--1.2--patch-10 lord@emf.net--2004/tla--devo--1.2--patch-11 lord@emf.net--2004/tla--devo--1.2--patch-12 lord@emf.net--2004/tla--devo--1.2--patch-13 lord@emf.net--2004/tla--devo--1.2--patch-14 lord@emf.net--2004/tla--devo--1.2--patch-15 lord@emf.net--2004/tla--devo--1.2--patch-16 lord@emf.net--2004/tla--devo--1.2--patch-17 lord@emf.net--2004/tla--devo--1.2--patch-18 lord@emf.net--2004/tla--devo--1.2--patch-19 lord@emf.net--2004/tla--devo--1.2--patch-20 lord@emf.net--2004/tla--devo--1.2--patch-21 lord@emf.net--2004/tla--devo--1.2--patch-22 lord@emf.net--2004/tla--devo--1.2--patch-23 lord@emf.net--2004/tla--devo--1.2--patch-24 lord@emf.net--2004/tla--devo--1.2--patch-25 lord@emf.net--2004/tla--devo--1.2--patch-26 lord@emf.net--2004/tla--devo--1.2--patch-27 lord@emf.net--2004/tla--devo--1.2--patch-28 lord@emf.net--2004/tla--devo--1.2--patch-29 lord@emf.net--2004/tla--devo--1.2--patch-30 lord@emf.net--2004/tla--devo--1.2--patch-31 lord@emf.net--2004/tla--devo--1.2--patch-32 lord@emf.net--2004/tla--devo--1.2--patch-33 lord@emf.net--2004/tla--devo--1.2--patch-34 lord@emf.net--2004/tla--devo--1.2--patch-35 lord@emf.net--2004/tla--devo--1.2--patch-36 lord@emf.net--2004/tla--devo--1.2--patch-37 lord@emf.net--2004/tla--devo--1.2--patch-38 lord@emf.net--2004/tla--devo--1.2--patch-39 lord@emf.net--2004/tla--devo--1.2--patch-40 lord@emf.net--2004/tla--devo--1.2--patch-41 lord@emf.net--2004/tla--devo--1.2--patch-42 lord@emf.net--2004/tla--devo--1.2--patch-43 lord@emf.net--2004/tla--devo--1.2--patch-44 lord@emf.net--2004/tla--devo--1.2--patch-45 lord@emf.net--2004/tla--devo--1.2--patch-46 lord@emf.net--2004/tla--devo--1.2--patch-47 lord@emf.net--2004/tla--devo--1.2--patch-48 lord@emf.net--2004/tla--devo--1.2--patch-49 lord@emf.net--2004/tla--devo--1.2--patch-50 lord@emf.net--2004/tla--devo--1.2--patch-51 lord@emf.net--2004/tla--devo--1.2--patch-52 lord@emf.net--2004/tla--devo--1.2--patch-53 lord@emf.net--2004/tla--devo--1.2--patch-54 lord@emf.net--2004/tla--devo--1.2--patch-55 lord@emf.net--2004/tla--devo--1.2--patch-56 lord@emf.net--2004/tla--devo--1.2--patch-57 lord@emf.net--2004/tla--devo--1.2--patch-58 lord@emf.net--2004/tla--devo--1.2--patch-59 lord@emf.net--2004/tla--devo--1.2--patch-60 lord@emf.net--2004/tla--devo--1.2--patch-61 lord@emf.net--2004/tla--devo--1.2--patch-62 lord@emf.net--2004/tla--devo--1.2--patch-63 lord@emf.net--2004/tla--devo--1.2--patch-64 lord@emf.net--2004/tla--devo--1.2--patch-65 lord@emf.net--2004/tla--devo--1.2--patch-66 lord@emf.net--2004/tla--devo--1.2--patch-67 lord@emf.net--2004/tla--devo--1.2--patch-68 lord@emf.net--2004/tla--devo--1.2--patch-69 lord@emf.net--2004/tla--devo--1.2--patch-70 lord@emf.net--2004/tla--devo--1.2--patch-71 lord@emf.net--2004/tla--devo--1.2--patch-72 lord@emf.net--2004/tla--devo--1.2--patch-73 lord@emf.net--2004/tla--devo--1.2--patch-74 lord@emf.net--2004/tla--devo--1.2--patch-75 lord@emf.net--2004/tla--devo--1.2--patch-76 lord@emf.net--2004/tla--devo--1.2--patch-77 lord@emf.net--2004/tla--devo--1.2--patch-78 lord@emf.net--2004/tla--devo--1.2--patch-79 lord@emf.net--2004/tla--devo--1.2--patch-80 lord@emf.net--2004/tla--devo--1.2--patch-81 lord@emf.net--2004/tla--devo--1.2--patch-82 lord@emf.net--2004/tla--devo--1.2--patch-83 lord@emf.net--2004/tla--devo--1.2--patch-84 lord@emf.net--2004/tla--devo--1.2--patch-85 lord@emf.net--2004/tla--devo--1.2--patch-86 lord@emf.net--2004/tla--devo--1.2--patch-87 lord@emf.net--2004/tla--devo--1.2--patch-88 lord@emf.net--2004/tla--devo--1.2--patch-89 lord@emf.net--2004/tla--devo--1.2--patch-90 lord@emf.net--2004/tla--devo--1.2--patch-91 lord@emf.net--2004/tla--devo--1.2--patch-92 lord@emf.net--2004/tla--devo--1.2--patch-93 lord@emf.net--2004/tla--devo--1.2--patch-94 lord@emf.net--2004/tla--devo--1.2--patch-95 lord@emf.net--2004/tla--devo--1.2--patch-96 lord@emf.net--2004/tla--devo--1.2--patch-97 lord@emf.net--2004/tla--devo--1.2--patch-98 lord@emf.net--2004/tla--devo--1.2--patch-99 lord@emf.net--2004/tla--devo--1.2--patch-100 lord@emf.net--2004/tla--devo--1.2--patch-101 lord@emf.net--2004/tla--devo--1.2--patch-102 lord@emf.net--2004/tla--devo--1.2--patch-103 lord@emf.net--2004/tla--devo--1.2--patch-104 lord@emf.net--2004/tla--devo--1.2--patch-105 lord@emf.net--2004/tla--devo--1.2--patch-106 lord@emf.net--2004/tla--devo--1.2--patch-107 lord@emf.net--2004/tla--devo--1.2--patch-108 lord@emf.net--2004/tla--devo--1.2--patch-109 lord@emf.net--2004/tla--devo--1.2--patch-110 lord@emf.net--2004/tla--devo--1.2--patch-111 lord@emf.net--2004/tla--devo--1.2--patch-112 lord@emf.net--2004/tla--devo--1.2--patch-113 lord@emf.net--2004/tla--devo--1.2--patch-114 lord@emf.net--2004/tla--devo--1.2--patch-115 lord@emf.net--2004/tla--devo--1.3--base-0 lord@emf.net--2004/tla--devo--1.3--patch-1 lord@emf.net--2004/tla--devo--1.3--patch-2 lord@emf.net--2004/tla--devo--1.3--patch-3 lord@emf.net--2004/tla--devo--1.3--patch-4 lord@emf.net--2004/tla--devo--1.3--patch-5 lord@emf.net--2004/tla--devo--1.3--patch-6 lord@emf.net--2004/tla--devo--1.3--patch-7 lord@emf.net--2004/tla--devo--1.3--patch-8 lord@emf.net--2004/tla--devo--1.3--patch-9 lord@emf.net--2004/tla--devo--1.3--patch-10 lord@emf.net--2004/tla--devo--1.3--patch-11 lord@emf.net--2004/tla--devo--1.3--patch-12 lord@emf.net--2004/tla--devo--1.3--patch-13 lord@emf.net--2004/tla--devo--1.3--patch-14 lord@emf.net--2004/tla--devo--1.3--patch-15 lord@emf.net--2004/tla--devo--1.3--patch-16 lord@emf.net--2004/tla--devo--1.3--patch-17 lord@emf.net--2004/tla--devo--1.3--patch-18 lord@emf.net--2004/tla--devo--1.3--patch-19 lord@emf.net--2004/tla--devo--1.3--patch-20 lord@emf.net--2004/tla--devo--1.3--patch-21 lord@emf.net--2004/tla--devo--1.3--patch-22 lord@emf.net--2004/tla--devo--1.3--patch-23 lord@emf.net--2004/tla--devo--1.3--patch-24 lord@emf.net--2004/tla--devo--1.3--patch-25 lord@emf.net--2004/tla--devo--1.3--patch-26 lord@emf.net--2004/tla--devo--1.3--patch-27 lord@emf.net--2004/tla--devo--1.3--patch-28 lord@emf.net--2004/tla--devo--1.3--patch-29 lord@emf.net--2004/tla--devo--1.3--patch-30 lord@emf.net--2004/tla--devo--1.3--patch-31 lord@emf.net--2004/tla--devo--1.3--patch-32 2004-10-05 20:52:16 GMT Tom Lord patch-2 Summary: add ChangeLog Revision: tla--devo--1.3--patch-2 Added a ChangeLog for tla-1.3. new files: ChangeLog 2004-10-05 20:50:53 GMT Tom Lord patch-1 Summary: Massive Log Pruning Revision: tla--devo--1.3--patch-1 "When you can't be just, be arbitrary." -- All extraneous logs, saved changelogs, and even the noble =THANKS file have been removed, leaving only a single log for the GNU version. Those currently tagged from earlier lord@emf.net archives, wanting to migrate changes, may wish to consider tag, and star-merge w/ --reference. removed files: =THANKS =TODO ChangeLog ChangeLog.d/.arch-ids/=id ChangeLog.d/.arch-ids/cl.file-utils--devo--1.0--lord@emf.net--2003.id ChangeLog.d/.arch-ids/cl.file-utils--devo--1.0--lord@emf.net--2003b.id ChangeLog.d/.arch-ids/cl.file-utils--devo--1.0--lord@regexps.com--2001Q4.id ChangeLog.d/.arch-ids/cl.file-utils--devo--1.0--lord@regexps.com--2002.id ChangeLog.d/.arch-ids/cl.file-utils--devo--1.0--lord@regexps.com--public-2001Q4.id ChangeLog.d/.arch-ids/cl.file-utils--devo--1.0--software@srparish.net.id ChangeLog.d/.arch-ids/cl.file-utils--lord--1.0--lord@regexps.com--2002.id ChangeLog.d/.arch-ids/cl.file-utils--stig--1.0--stig@brautaset.org--arwen-03.id ChangeLog.d/.arch-ids/cl.tla--aderuwe--1.0--alexander@deruwe.be--2003.id ChangeLog.d/.arch-ids/cl.tla--aderuwe--1.1--alexander@deruwe.be--2003.id ChangeLog.d/.arch-ids/cl.tla--browser-support--1.1--lord@emf.net--2003b.id ChangeLog.d/.arch-ids/cl.tla--bugfix--1.1--alexander@deruwe.be--2003.id ChangeLog.d/.arch-ids/cl.tla--bugfixes--1.0--christopher.gray@mail.mcgill.ca--archive-ubc.id ChangeLog.d/.arch-ids/cl.tla--bulb--1.1--bulb@ucw.cz--arch-2003.id ChangeLog.d/.arch-ids/cl.tla--cosmic--1.1--mirian@cosmic.com--2003.id ChangeLog.d/.arch-ids/cl.tla--devo--1.0--asuffield@debian.org--gluck-2003.id ChangeLog.d/.arch-ids/cl.tla--devo--1.0--lord@emf.net--2003b.id ChangeLog.d/.arch-ids/cl.tla--devo--1.1--arch@repose.cx--03.id ChangeLog.d/.arch-ids/cl.tla--devo--1.1--asuffield@debian.org--gluck-2003.id ChangeLog.d/.arch-ids/cl.tla--devo--1.1--bclg@iup.edu--2003.id ChangeLog.d/.arch-ids/cl.tla--devo--1.1--ben@criertower.com--arch.id ChangeLog.d/.arch-ids/cl.tla--devo--1.1--fw@deneb.enyo.de--2003-public.id ChangeLog.d/.arch-ids/cl.tla--devo--1.1--jblack@merconline.com--2003.id ChangeLog.d/.arch-ids/cl.tla--devo--1.1--linuxnow@newtral.org--arch-2003.id ChangeLog.d/.arch-ids/cl.tla--devo--1.1--lord@emf.net--2003b.id ChangeLog.d/.arch-ids/cl.tla--devo--1.1--miles@gnu.org--gnu-2003.id ChangeLog.d/.arch-ids/cl.tla--devo--1.1--rbtcollins@hotmail.com--barch.id ChangeLog.d/.arch-ids/cl.tla--devo--1.1--rweir@ertius.org--2003-arch.id ChangeLog.d/.arch-ids/cl.tla--devo--1.1--software@srparish.net--2003tla.id ChangeLog.d/.arch-ids/cl.tla--devo--1.1--velco@fadata.bg--archive.id ChangeLog.d/.arch-ids/cl.tla--devo--1.2--lord@emf.net--2004.id ChangeLog.d/.arch-ids/cl.tla--devo-smallpatches--1.1--jblack@merconline.com--2003.id ChangeLog.d/.arch-ids/cl.tla--edgomez--1.1--ed.gomez@free.fr--2003-1.id ChangeLog.d/.arch-ids/cl.tla--giles--1.1--giles@nemeton.com.au--2003-GPL.id ChangeLog.d/.arch-ids/cl.tla--gpg--1.1--rbtcollins@hotmail.com--barch.id ChangeLog.d/.arch-ids/cl.tla--home--1.1--miles@gnu.org--home-2003.id ChangeLog.d/.arch-ids/cl.tla--improvements--1.1--duchier@loria.home--gnuarch.id ChangeLog.d/.arch-ids/cl.tla--integration--1.1--rbtcollins@hotmail.com--barch.id ChangeLog.d/.arch-ids/cl.tla--lifeless-integration--1.1--walters@verbum.org--2003.id ChangeLog.d/.arch-ids/cl.tla--mainline--1.1--walters@verbum.org--2003.id ChangeLog.d/.arch-ids/cl.tla--markbt--1.1--markbt@efaref.net--2003.id ChangeLog.d/.arch-ids/cl.tla--rbrowse--1.1--jblack@merconline.com--2003.id ChangeLog.d/.arch-ids/cl.tla--replay-reverse--1.0--christopher.gray@mail.mcgill.ca--archive-ubc.id ChangeLog.d/.arch-ids/cl.tla--rnf--1.1--robin.farine@terminus.org--arch-2003.id ChangeLog.d/.arch-ids/cl.tla--rwa--1.1--rwa@alumni.princeton.edu--home-2003b.id ChangeLog.d/.arch-ids/cl.tla--sam--1.1--sam@rfc1149.net--public.id ChangeLog.d/.arch-ids/cl.tla--small-fixes--1.1--lord@emf.net--2003b.id ChangeLog.d/.arch-ids/cl.tla--stig--1.1--stig@brautaset.org--2003.id ChangeLog.d/.arch-ids/cl.tla--tagging--1.1--lord@emf.net--2003b.id ChangeLog.d/.arch-ids/cl.tla--tests--1.1--lord@emf.net--2003b.id ChangeLog.d/.arch-ids/cl.tla--timestamps--1.1--lord@emf.net--2003b.id ChangeLog.d/.arch-ids/cl.tla--tla-devo-lsarchives-regex--1.1--jblack@merconline.com--2003.id ChangeLog.d/.arch-ids/cl.tla--whitespace--1.1--alexander@deruwe.be--2003.id ChangeLog.d/.arch-ids/cl.tla--wmipf--1.1--mt@wmipf.in-berlin.de--devel-2003.id ChangeLog.d/.arch-ids/cl.tla-current--roberto--1.1--roberto@eu.org--2003b.id ChangeLog.d/cl.file-utils--devo--1.0--lord@emf.net--2003 ChangeLog.d/cl.file-utils--devo--1.0--lord@emf.net--2003b ChangeLog.d/cl.file-utils--devo--1.0--lord@regexps.com--2001Q4 ChangeLog.d/cl.file-utils--devo--1.0--lord@regexps.com--2002 ChangeLog.d/cl.file-utils--devo--1.0--lord@regexps.com--public-2001Q4 ChangeLog.d/cl.file-utils--devo--1.0--software@srparish.net ChangeLog.d/cl.file-utils--lord--1.0--lord@regexps.com--2002 ChangeLog.d/cl.file-utils--stig--1.0--stig@brautaset.org--arwen-03 ChangeLog.d/cl.tla--aderuwe--1.0--alexander@deruwe.be--2003 ChangeLog.d/cl.tla--aderuwe--1.1--alexander@deruwe.be--2003 ChangeLog.d/cl.tla--browser-support--1.1--lord@emf.net--2003b ChangeLog.d/cl.tla--bugfix--1.1--alexander@deruwe.be--2003 ChangeLog.d/cl.tla--bugfixes--1.0--christopher.gray@mail.mcgill.ca--archive-ubc ChangeLog.d/cl.tla--bulb--1.1--bulb@ucw.cz--arch-2003 ChangeLog.d/cl.tla--cosmic--1.1--mirian@cosmic.com--2003 ChangeLog.d/cl.tla--devo--1.0--asuffield@debian.org--gluck-2003 ChangeLog.d/cl.tla--devo--1.0--lord@emf.net--2003b ChangeLog.d/cl.tla--devo--1.1--arch@repose.cx--03 ChangeLog.d/cl.tla--devo--1.1--asuffield@debian.org--gluck-2003 ChangeLog.d/cl.tla--devo--1.1--bclg@iup.edu--2003 ChangeLog.d/cl.tla--devo--1.1--ben@criertower.com--arch ChangeLog.d/cl.tla--devo--1.1--fw@deneb.enyo.de--2003-public ChangeLog.d/cl.tla--devo--1.1--jblack@merconline.com--2003 ChangeLog.d/cl.tla--devo--1.1--linuxnow@newtral.org--arch-2003 ChangeLog.d/cl.tla--devo--1.1--lord@emf.net--2003b ChangeLog.d/cl.tla--devo--1.1--miles@gnu.org--gnu-2003 ChangeLog.d/cl.tla--devo--1.1--rbtcollins@hotmail.com--barch ChangeLog.d/cl.tla--devo--1.1--rweir@ertius.org--2003-arch ChangeLog.d/cl.tla--devo--1.1--software@srparish.net--2003tla ChangeLog.d/cl.tla--devo--1.1--velco@fadata.bg--archive ChangeLog.d/cl.tla--devo--1.2--lord@emf.net--2004 ChangeLog.d/cl.tla--devo-smallpatches--1.1--jblack@merconline.com--2003 ChangeLog.d/cl.tla--edgomez--1.1--ed.gomez@free.fr--2003-1 ChangeLog.d/cl.tla--giles--1.1--giles@nemeton.com.au--2003-GPL ChangeLog.d/cl.tla--gpg--1.1--rbtcollins@hotmail.com--barch ChangeLog.d/cl.tla--home--1.1--miles@gnu.org--home-2003 ChangeLog.d/cl.tla--improvements--1.1--duchier@loria.home--gnuarch ChangeLog.d/cl.tla--integration--1.1--rbtcollins@hotmail.com--barch ChangeLog.d/cl.tla--lifeless-integration--1.1--walters@verbum.org--2003 ChangeLog.d/cl.tla--mainline--1.1--walters@verbum.org--2003 ChangeLog.d/cl.tla--markbt--1.1--markbt@efaref.net--2003 ChangeLog.d/cl.tla--rbrowse--1.1--jblack@merconline.com--2003 ChangeLog.d/cl.tla--replay-reverse--1.0--christopher.gray@mail.mcgill.ca--archive-ubc ChangeLog.d/cl.tla--rnf--1.1--robin.farine@terminus.org--arch-2003 ChangeLog.d/cl.tla--rwa--1.1--rwa@alumni.princeton.edu--home-2003b ChangeLog.d/cl.tla--sam--1.1--sam@rfc1149.net--public ChangeLog.d/cl.tla--small-fixes--1.1--lord@emf.net--2003b ChangeLog.d/cl.tla--stig--1.1--stig@brautaset.org--2003 ChangeLog.d/cl.tla--tagging--1.1--lord@emf.net--2003b ChangeLog.d/cl.tla--tests--1.1--lord@emf.net--2003b ChangeLog.d/cl.tla--timestamps--1.1--lord@emf.net--2003b ChangeLog.d/cl.tla--tla-devo-lsarchives-regex--1.1--jblack@merconline.com--2003 ChangeLog.d/cl.tla--whitespace--1.1--alexander@deruwe.be--2003 ChangeLog.d/cl.tla--wmipf--1.1--mt@wmipf.in-berlin.de--devel-2003 ChangeLog.d/cl.tla-current--roberto--1.1--roberto@eu.org--2003b removed directories: ChangeLog.d ChangeLog.d/.arch-ids 2004-10-05 20:17:14 GMT Tom Lord base-0 Summary: tag of lord@emf.net--2004/tla--devo--1.3--patch-32 Revision: tla--devo--1.3--base-0 (automatically generated log message) new patches: aaron.bentley@utoronto.ca--tla-2004/tla--llintegration--1.2--base-0 aaron.bentley@utoronto.ca--tla-2004/tla--llintegration--1.2--patch-1 aaron.bentley@utoronto.ca--tla-2004/tla--llintegration--1.2--patch-2 aaron.bentley@utoronto.ca--tla-2004/tlasrc--backbuild--0--base-0 aaron.bentley@utoronto.ca--tla-2004/tlasrc--devel--0--patch-1 aaron.bentley@utoronto.ca--tla-2004/tlasrc--devel--0--patch-2 aaron.bentley@utoronto.ca--tla-2004/tlasrc--devel--0--patch-4 aaron.bentley@utoronto.ca--tla-2004/tlasrc--devel--0--patch-6 aaron.bentley@utoronto.ca--tla-2004/tlasrc--devel--0--patch-7 aaron.bentley@utoronto.ca--tla-2004/tlasrc--devel--0--patch-8 aaron.bentley@utoronto.ca--tla-2004/tlasrc--devel--0--patch-9 aaron.bentley@utoronto.ca--tla-2004/tlasrc--devel--0--patch-10 aaron.bentley@utoronto.ca--tla-2004/tlasrc--devel--0--patch-16 aaron.bentley@utoronto.ca--tla-2004/tlasrc--devel--0--patch-25 aaron.bentley@utoronto.ca--tla-2004/tlasrc--devel--0--patch-26 aaron.bentley@utoronto.ca--tla-2004/tlasrc--errors--1.2--base-0 aaron.bentley@utoronto.ca--tla-2004/tlasrc--errors--1.2--patch-3 aaron.bentley@utoronto.ca--tla-2004/tlasrc--errors--1.2--patch-5 aaron.bentley@utoronto.ca--tla-2004/tlasrc--errors--1.2--patch-6 aaron.bentley@utoronto.ca--tla-2004/tlasrc--errors--1.2--patch-7 aaron.bentley@utoronto.ca--tla-2004/tlasrc--errors--1.2--patch-8 aaron.bentley@utoronto.ca--tla-2004/tlasrc--errors--2--base-0 aaron.bentley@utoronto.ca--tla-2004/tlasrc--errors--2--patch-1 aaron.bentley@utoronto.ca--tla-2004/tlasrc--errors--2--patch-2 aaron.bentley@utoronto.ca--tla-2004/tlasrc--errors--2--patch-3 aaron.bentley@utoronto.ca--tla-2004/tlasrc--errors--2--patch-4 aaron.bentley@utoronto.ca--tla-2004/tlasrc--errors--2--patch-5 aaron.bentley@utoronto.ca--tla-2004/tlasrc--errors--2--patch-6 aaron.bentley@utoronto.ca--tla-2004/tlasrc--errors--2--patch-7 aaron.bentley@utoronto.ca--tla-2004/tlasrc--errors--2--patch-8 aaron.bentley@utoronto.ca--tla-2004/tlasrc--errors--3--base-0 aaron.bentley@utoronto.ca--tla-2004/tlasrc--errors--3--patch-1 aaron.bentley@utoronto.ca--tla-2004/tlasrc--errors--3--patch-2 aaron.bentley@utoronto.ca--tla-2004/tlasrc--errors--3--patch-3 aaron.bentley@utoronto.ca--tla-2004/tlasrc--errors--3--patch-4 aaron.bentley@utoronto.ca--tla-2004/tlasrc--errors--3--patch-5 aaron.bentley@utoronto.ca--tla-2004/tlasrc--errors--3--patch-6 aaron.bentley@utoronto.ca--tla-2004/tlasrc--errors--3--patch-7 aaron.bentley@utoronto.ca--tla-2004/tlasrc--errors--3--patch-8 aaron.bentley@utoronto.ca--tla-2004/tlasrc--errors--3--patch-9 aaron.bentley@utoronto.ca--tla-2004/tlasrc--errors--3--patch-10 aaron.bentley@utoronto.ca--tla-2004/tlasrc--errors--3--patch-11 aaron.bentley@utoronto.ca--tla-2004/tlasrc--errors--3--patch-12 aaron.bentley@utoronto.ca--tla-2004/tlasrc--errors--3--patch-13 aaron.bentley@utoronto.ca--tla-2004/tlasrc--errors--3--patch-14 aaron.bentley@utoronto.ca--tla-2004/tlasrc--errors--3--patch-15 aaron.bentley@utoronto.ca--tla-2004/tlasrc--errors--3--patch-16 aaron.bentley@utoronto.ca--tla-2004/tlasrc--errors--3--patch-17 aaron.bentley@utoronto.ca--tla-2004/tlasrc--errors--3--patch-18 aaron.bentley@utoronto.ca--tla-2004/tlasrc--errors--3--patch-19 aaron.bentley@utoronto.ca--tla-2004/tlasrc--errors--3--patch-20 aaron.bentley@utoronto.ca--tla-2004/tlasrc--errors--4--base-0 aaron.bentley@utoronto.ca--tla-2004/tlasrc--errors--4--patch-1 aaron.bentley@utoronto.ca--tla-2004/tlasrc--errors--4--patch-2 aaron.bentley@utoronto.ca--tla-2004/tlasrc--errors--4--patch-3 aaron.bentley@utoronto.ca--tla-2004/tlasrc--errors--4--patch-4 aaron.bentley@utoronto.ca--tla-2004/tlasrc--greedy--1.2--base-0 aaron.bentley@utoronto.ca--tla-2004/tlasrc--greedy--1.2--patch-1 aaron.bentley@utoronto.ca--tla-2004/tlasrc--greedy--1.2--patch-2 aaron.bentley@utoronto.ca--tla-2004/tlasrc--greedy--1.2--patch-3 aaron.bentley@utoronto.ca--tla-2004/tlasrc--greedy--1.2--patch-4 aaron.bentley@utoronto.ca--tla-2004/tlasrc--inodes--0--base-0 aaron.bentley@utoronto.ca--tla-2004/tlasrc--inodes--0--patch-1 aaron.bentley@utoronto.ca--tla-2004/tlasrc--inodes--0--patch-2 aaron.bentley@utoronto.ca--tla-2004/tlasrc--inodes--0--patch-3 aaron.bentley@utoronto.ca--tla-2004/tlasrc--inodes--0--patch-4 aaron.bentley@utoronto.ca--tla-2004/tlasrc--inventory--1--patch-4 aaron.bentley@utoronto.ca--tla-2004/tlasrc--inventory--1--patch-5 aaron.bentley@utoronto.ca--tla-2004/tlasrc--inventory--2--patch-2 aaron.bentley@utoronto.ca--tla-2004/tlasrc--local--1.2--base-0 aaron.bentley@utoronto.ca--tla-2004/tlasrc--local--1.2--patch-1 aaron.bentley@utoronto.ca--tla-2004/tlasrc--local--1.2--patch-2 aaron.bentley@utoronto.ca--tla-2004/tlasrc--local--1.2--patch-3 aaron.bentley@utoronto.ca--tla-2004/tlasrc--local--1.2--patch-4 aaron.bentley@utoronto.ca--tla-2004/tlasrc--local--1.2--patch-5 aaron.bentley@utoronto.ca--tla-2004/tlasrc--local--1.2--patch-6 aaron.bentley@utoronto.ca--tla-2004/tlasrc--local--1.2--patch-7 aaron.bentley@utoronto.ca--tla-2004/tlasrc--local--1.2--patch-8 aaron.bentley@utoronto.ca--tla-2004/tlasrc--local--1.2--patch-9 aaron.bentley@utoronto.ca--tla-2004/tlasrc--local--1.2--patch-10 aaron.bentley@utoronto.ca--tla-2004/tlasrc--local--1.2--patch-11 aaron.bentley@utoronto.ca--tla-2004/tlasrc--local--1.2--patch-12 aaron.bentley@utoronto.ca--tla-2004/tlasrc--local--1.2--patch-14 aaron.bentley@utoronto.ca--tla-2004/tlasrc--local--1.2--patch-17 aaron.bentley@utoronto.ca--tla-2004/tlasrc--local--1.2--patch-18 aaron.bentley@utoronto.ca--tla-2004/tlasrc--local--1.2--patch-19 aaron.bentley@utoronto.ca--tla-2004/tlasrc--local--1.2--patch-20 aaron.bentley@utoronto.ca--tla-2004/tlasrc--local--1.2--patch-21 aaron.bentley@utoronto.ca--tla-2004/tlasrc--local--1.2--patch-32 aaron.bentley@utoronto.ca--tla-2004/tlasrc--local--1.2--patch-35 aaron.bentley@utoronto.ca--tla-2004/tlasrc--local--1.2--patch-36 aaron.bentley@utoronto.ca--tla-2004/tlasrc--local--1.2--patch-37 aaron.bentley@utoronto.ca--tla-2004/tlasrc--local--1.2--patch-40 aaron.bentley@utoronto.ca--tla-2004/tlasrc--local--1.2--patch-41 aaron.bentley@utoronto.ca--tla-2004/tlasrc--local--1.2--patch-42 aaron.bentley@utoronto.ca--tla-2004/tlasrc--local--1.2--patch-43 aaron.bentley@utoronto.ca--tla-2004/tlasrc--local--1.2--patch-44 aaron.bentley@utoronto.ca--tla-2004/tlasrc--sigfix--0--base-0 aaron.bentley@utoronto.ca--tla-2004/tlasrc--sigfix--0--patch-1 abentley@panoramicfeedback.com--development/tla--devel--1.2--patch-1 abentley@panoramicfeedback.com--development/tla--devel--1.2--patch-2 alexander@deruwe.be--2003/tla--aderuwe--1.0--base-0 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-1 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-2 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-3 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-4 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-5 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-6 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-7 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-8 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-9 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-10 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-11 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-12 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-13 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-14 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-15 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-16 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-17 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-18 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-19 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-20 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-21 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-22 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-23 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-24 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-25 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-26 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-27 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-28 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-29 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-30 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-31 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-32 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-33 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-34 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-35 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-36 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-37 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-38 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-39 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-40 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-41 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-42 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-43 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-44 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-45 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-46 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-47 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-48 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-49 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-50 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-51 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-52 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-53 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-54 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-55 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-56 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-57 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-58 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-59 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-60 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-61 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-62 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-63 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-64 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-65 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-66 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-67 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-68 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-69 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-70 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-71 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-72 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-73 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-74 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-75 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-76 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-77 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-78 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-79 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-80 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-81 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-82 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-83 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-84 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-85 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-86 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-87 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-88 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-89 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-90 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-91 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-92 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-93 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-94 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-95 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-96 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-97 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-98 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-99 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-100 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-101 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-102 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-103 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-104 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-105 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-106 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-107 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-108 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-109 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-110 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-111 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-112 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-113 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-114 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-115 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-116 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-117 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-118 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-119 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-120 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-121 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-122 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-123 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-124 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-125 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-126 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-127 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-128 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-129 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-130 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-131 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-132 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-133 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-134 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-135 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-136 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-137 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-138 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-139 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-140 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-141 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-142 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-143 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-144 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-145 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-146 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-147 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-148 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-149 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-150 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-151 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-152 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-153 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-154 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-155 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-156 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-157 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-158 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-159 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-160 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-161 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-162 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-163 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-164 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-165 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-166 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-167 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-168 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-169 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-170 alexander@deruwe.be--2003/tla--aderuwe--1.0--patch-173 alexander@deruwe.be--2003/tla--aderuwe--1.1--base-0 alexander@deruwe.be--2003/tla--aderuwe--1.1--patch-1 alexander@deruwe.be--2003/tla--aderuwe--1.1--patch-2 alexander@deruwe.be--2003/tla--aderuwe--1.1--patch-3 alexander@deruwe.be--2003/tla--aderuwe--1.1--patch-4 alexander@deruwe.be--2003/tla--aderuwe--1.1--patch-5 alexander@deruwe.be--2003/tla--aderuwe--1.1--patch-6 alexander@deruwe.be--2003/tla--aderuwe--1.1--patch-7 alexander@deruwe.be--2003/tla--aderuwe--1.1--patch-8 alexander@deruwe.be--2003/tla--aderuwe--1.1--patch-9 alexander@deruwe.be--2003/tla--aderuwe--1.1--patch-10 alexander@deruwe.be--2003/tla--aderuwe--1.1--patch-11 alexander@deruwe.be--2003/tla--aderuwe--1.1--patch-12 alexander@deruwe.be--2003/tla--aderuwe--1.1--patch-13 alexander@deruwe.be--2003/tla--aderuwe--1.1--patch-14 alexander@deruwe.be--2003/tla--aderuwe--1.1--patch-15 alexander@deruwe.be--2003/tla--aderuwe--1.1--patch-16 alexander@deruwe.be--2003/tla--aderuwe--1.1--patch-17 alexander@deruwe.be--2003/tla--aderuwe--1.1--patch-18 alexander@deruwe.be--2003/tla--aderuwe--1.1--patch-19 alexander@deruwe.be--2003/tla--aderuwe--1.1--patch-20 alexander@deruwe.be--2003/tla--aderuwe--1.1--patch-21 alexander@deruwe.be--2003/tla--aderuwe--1.1--patch-22 alexander@deruwe.be--2003/tla--aderuwe--1.1--patch-23 alexander@deruwe.be--2003/tla--aderuwe--1.1--patch-24 alexander@deruwe.be--2003/tla--aderuwe--1.1--patch-25 alexander@deruwe.be--2003/tla--aderuwe--1.1--patch-26 alexander@deruwe.be--2003/tla--aderuwe--1.1--patch-27 alexander@deruwe.be--2003/tla--bugfix--1.1--base-0 alexander@deruwe.be--2003/tla--bugfix--1.1--patch-1 alexander@deruwe.be--2003/tla--bugfix--1.1--patch-2 alexander@deruwe.be--2003/tla--bugfix--1.1--patch-3 alexander@deruwe.be--2003/tla--bugfix--1.1--patch-4 alexander@deruwe.be--2003/tla--bugfix--1.1--patch-5 alexander@deruwe.be--2003/tla--bugfix--1.1--patch-6 alexander@deruwe.be--2003/tla--bugfix--1.1--patch-7 alexander@deruwe.be--2003/tla--whitespace--1.1--base-0 alexander@deruwe.be--2003/tla--whitespace--1.1--patch-1 alexander@deruwe.be--2003/tla--whitespace--1.1--patch-2 alexander@deruwe.be--2003/tla--whitespace--1.1--patch-3 alexander@deruwe.be--2003/tla--whitespace--1.1--patch-4 alexander@deruwe.be--2003/tla--whitespace--1.1--patch-5 alexander@deruwe.be--2003/tla--whitespace--1.1--patch-6 alexander@deruwe.be--2003/tla--whitespace--1.1--patch-7 alexander@deruwe.be--2003/tla--whitespace--1.1--patch-8 alexander@deruwe.be--2003/tla--whitespace--1.1--patch-9 alexander@deruwe.be--2003/tla--whitespace--1.1--patch-10 alexander@deruwe.be--2003/tla--whitespace--1.1--patch-11 alexander@deruwe.be--2003/tla--whitespace--1.1--patch-12 alexander@deruwe.be--2003/tla--whitespace--1.1--patch-13 alexander@deruwe.be--2003/tla--whitespace--1.1--patch-14 alexander@deruwe.be--2003/tla--whitespace--1.1--patch-15 alexander@deruwe.be--2003/tla--whitespace--1.1--patch-16 alexander@deruwe.be--2003/tla--whitespace--1.1--patch-17 alexander@deruwe.be--2003/tla--whitespace--1.1--patch-18 alexander@deruwe.be--2003/tla--whitespace--1.1--patch-19 alexander@deruwe.be--2003/tla--whitespace--1.1--patch-20 alexander@deruwe.be--2003/tla--whitespace--1.1--patch-21 alexander@deruwe.be--2003/tla--whitespace--1.1--patch-22 alexander@deruwe.be--2003/tla--whitespace--1.1--patch-23 alexander@deruwe.be--2003/tla--whitespace--1.1--patch-24 alexander@deruwe.be--2003/tla--whitespace--1.1--patch-25 alexander@deruwe.be--2003/tla--whitespace--1.1--patch-26 alexander@deruwe.be--2003/tla--whitespace--1.1--patch-27 alexander@deruwe.be--2003/tla--whitespace--1.1--patch-28 alexander@deruwe.be--2003/tla--whitespace--1.1--patch-29 alexander@deruwe.be--2003/tla--whitespace--1.1--patch-30 alexander@deruwe.be--2003/tla--whitespace--1.1--patch-31 alexander@deruwe.be--2003/tla--whitespace--1.1--patch-32 alexander@deruwe.be--2003/tla--whitespace--1.1--patch-33 alexander@deruwe.be--2003/tla--whitespace--1.1--patch-34 alexander@deruwe.be--2003/tla--whitespace--1.1--patch-35 alexander@deruwe.be--2003/tla--whitespace--1.1--patch-36 alexander@deruwe.be--2003/tla--whitespace--1.1--patch-37 alexander@deruwe.be--2003/tla--whitespace--1.1--patch-38 alexander@deruwe.be--2003/tla--whitespace--1.1--patch-39 alexander@deruwe.be--2003/tla--whitespace--1.1--patch-40 alexander@deruwe.be--2003/tla--whitespace--1.1--patch-41 alexander@deruwe.be--2003/tla--whitespace--1.1--patch-42 alexander@deruwe.be--2003/tla--whitespace--1.1--patch-43 alexander@deruwe.be--2003/tla--whitespace--1.1--patch-44 alexander@deruwe.be--2003/tla--whitespace--1.1--patch-45 alexander@deruwe.be--2003/tla--whitespace--1.1--patch-46 alexander@deruwe.be--2003/tla--whitespace--1.1--patch-47 alexander@deruwe.be--2003/tla--whitespace--1.1--patch-48 alexander@deruwe.be--2003/tla--whitespace--1.1--patch-49 alexander@deruwe.be--2003/tla--whitespace--1.1--patch-50 alexander@deruwe.be--2003/tla--whitespace--1.1--patch-51 alexander@deruwe.be--2003/tla--whitespace--1.1--patch-52 alexander@deruwe.be--2003/tla--whitespace--1.1--patch-53 alexander@deruwe.be--2003/tla--whitespace--1.1--patch-54 alexander@deruwe.be--2003/tla--whitespace--1.1--patch-55 alexander@deruwe.be--2003/tla--whitespace--1.1--patch-56 alexander@deruwe.be--2003/tla--whitespace--1.1--patch-57 alexander@deruwe.be--2003/tla--whitespace--1.1--patch-58 alexander@deruwe.be--2003/tla--whitespace--1.1--patch-59 alexander@deruwe.be--2003/tla--whitespace--1.1--patch-60 alexander@deruwe.be--2003/tla--whitespace--1.1--patch-61 alexander@deruwe.be--2003/tla--whitespace--1.1--patch-62 alexander@deruwe.be--2003/tla--whitespace--1.1--patch-63 alexander@deruwe.be--2003/tla--whitespace--1.1--patch-64 alexander@deruwe.be--2003/tla--whitespace--1.1--patch-65 alexander@deruwe.be--2003/tla--whitespace--1.1--patch-66 alexander@deruwe.be--2003/tla--whitespace--1.1--patch-67 alexander@deruwe.be--2003/tla--whitespace--1.1--patch-68 alexander@deruwe.be--2003/tla--whitespace--1.1--patch-69 alexander@deruwe.be--2003/tla--whitespace--1.1--patch-70 alexander@deruwe.be--2003/tla--whitespace--1.1--patch-71 alexander@deruwe.be--2003/tla--whitespace--1.1--patch-72 alexander@deruwe.be--2003/tla--whitespace--1.1--patch-73 alexander@deruwe.be--2003/tla--whitespace--1.1--patch-74 alexander@deruwe.be--2003/tla--whitespace--1.1--patch-75 alexander@deruwe.be--2003/tla--whitespace--1.1--patch-76 alexander@deruwe.be--2003/tla--whitespace--1.1--patch-77 alexander@deruwe.be--2003/tla--whitespace--1.1--patch-78 alexander@deruwe.be--2003/tla--whitespace--1.1--patch-79 alexander@deruwe.be--2003/tla--whitespace--1.1--patch-80 alexander@deruwe.be--2003/tla--whitespace--1.1--patch-81 alexander@deruwe.be--2003/tla--whitespace--1.1--patch-82 alexander@deruwe.be--2003/tla--whitespace--1.1--patch-83 alexander@deruwe.be--2003/tla--whitespace--1.1--patch-84 alexander@deruwe.be--2003/tla--whitespace--1.1--patch-85 alexander@deruwe.be--2003/tla--whitespace--1.1--patch-86 alexander@deruwe.be--2003/tla--whitespace--1.1--patch-87 alexander@deruwe.be--2003/tla--whitespace--1.1--patch-88 alexander@deruwe.be--2003/tla--whitespace--1.1--patch-89 alexander@deruwe.be--2003/tla--whitespace--1.1--patch-90 alexander@deruwe.be--2003/tla--whitespace--1.1--patch-91 alexander@deruwe.be--2003/tla--whitespace--1.1--patch-92 alexander@deruwe.be--2003/tla--whitespace--1.1--patch-93 alexander@deruwe.be--2003/tla--whitespace--1.1--patch-94 alexander@deruwe.be--2003/tla--whitespace--1.1--patch-95 alexander@deruwe.be--2003/tla--whitespace--1.1--patch-96 alexander@deruwe.be--2003/tla--whitespace--1.1--patch-97 alexander@deruwe.be--2003/tla--whitespace--1.1--patch-98 alexander@deruwe.be--2003/tla--whitespace--1.1--patch-99 alexander@deruwe.be--2003/tla--whitespace--1.1--patch-100 alexander@deruwe.be--2003/tla--whitespace--1.1--patch-101 arch@repose.cx--03/tla--devo--1.1--base-0 arch@repose.cx--03/tla--devo--1.1--patch-1 arch@repose.cx--03/tla--devo--1.1--patch-2 arch@repose.cx--03/tla--devo--1.1--patch-3 arch@repose.cx--03/tla--devo--1.1--patch-4 arch@repose.cx--03/tla--devo--1.1--patch-5 arch@repose.cx--03/tla--devo--1.1--patch-6 arch@repose.cx--03/tla--devo--1.1--patch-7 arch@repose.cx--03/tla--devo--1.1--patch-8 arch@repose.cx--03/tla--devo--1.1--patch-9 arch@repose.cx--03/tla--devo--1.1--patch-10 arch@repose.cx--03/tla--devo--1.1--patch-11 arch@repose.cx--03/tla--devo--1.1--patch-12 arch@repose.cx--03/tla--devo--1.1--patch-13 arch@repose.cx--03/tla--devo--1.1--patch-14 arch@repose.cx--03/tla--devo--1.1--patch-15 arch@repose.cx--03/tla--devo--1.1--patch-16 arch@repose.cx--03/tla--devo--1.1--patch-17 arch@repose.cx--03/tla--devo--1.1--patch-18 arch@repose.cx--03/tla--devo--1.1--patch-19 arch@repose.cx--03/tla--devo--1.1--patch-20 arch@repose.cx--03/tla--devo--1.1--patch-21 arch@repose.cx--03/tla--devo--1.1--patch-22 asf@boinkor.net--2003p/tla--patch-test--1.2--base-0 asf@boinkor.net--2003p/tla--patch-test--1.2--patch-1 asuffield@debian.org--gluck-2003/tla--devo--1.0--base-0 asuffield@debian.org--gluck-2003/tla--devo--1.0--patch-1 asuffield@debian.org--gluck-2003/tla--devo--1.1--base-0 asuffield@debian.org--gluck-2003/tla--devo--1.1--patch-1 bclg@iup.edu--2003/tla--devo--1.1--patch-8 ben@criertower.com--arch/tla--devo--1.1--base-0 ben@criertower.com--arch/tla--devo--1.1--patch-1 bulb@ucw.cz--arch-2003/tla--bulb--1.1--base-0 bulb@ucw.cz--arch-2003/tla--bulb--1.1--patch-1 bulb@ucw.cz--arch-2003/tla--bulb--1.1--patch-2 bulb@ucw.cz--arch-2003/tla--bulb--1.1--patch-3 bulb@ucw.cz--arch-2003/tla--bulb--1.1--patch-4 bulb@ucw.cz--arch-2003/tla--bulb--1.1--patch-5 christopher.gray@mail.mcgill.ca--archive-ubc/tla--bugfixes--1.0--base-0 christopher.gray@mail.mcgill.ca--archive-ubc/tla--bugfixes--1.0--patch-1 christopher.gray@mail.mcgill.ca--archive-ubc/tla--replay-reverse--1.0--patch-1 chth@gmx.net--tla2004/tla--escapes--1.2--patch-5 chth@gmx.net--tla2004/tla--escapes--1.2--patch-6 chth@gmx.net--tla2004/tla--pika-escapes--1.2--base-0 chth@gmx.net--tla2004/tla--pika-escapes--1.2--patch-1 chth@gmx.net--tla2004/tla--pika-escapes--1.2--patch-2 chth@gmx.net--tla2004/tla--pika-escapes--1.2--patch-3 chth@gmx.net--tla2004/tla--pika-escapes--1.2--patch-4 chth@gmx.net--tla2004/tla--pika-escapes--1.2--patch-5 chth@gmx.net--tla2004/tla--pika-escapes--1.2--patch-6 chth@gmx.net--tla2004/tla--pika-escapes--1.2--patch-7 chth@gmx.net--tla2004/tla--pika-escapes--1.2--patch-8 chth@gmx.net--tla2004/tla--pika-escapes--1.2--patch-9 chth@gmx.net--tla2004/tla--pika-escapes--1.2--patch-10 chth@gmx.net--tla2004/tla--pika-escapes--1.2--patch-11 chth@gmx.net--tla2004/tla--pika-escapes--1.2--patch-12 chth@gmx.net--tla2004/tla--pika-escapes--1.2--patch-13 chth@gmx.net--tla2004/tla--pika-escapes--1.2--patch-14 chth@gmx.net--tla2004/tla--pika-escapes--1.2--patch-15 chth@gmx.net--tla2004/tla--pika-escapes--1.2--version-0 chth@gmx.net--tla2004/tla--pika-escapes--1.3--base-0 duchier@loria.home--gnuarch/tla--improvements--1.1--patch-1 ed.gomez@free.fr--2003-1/tla--edgomez--1.1--base-0 ed.gomez@free.fr--2003-1/tla--edgomez--1.1--patch-2 ed.gomez@free.fr--2003-1/tla--edgomez--1.1--patch-3 ed.gomez@free.fr--2003-1/tla--edgomez--1.1--patch-4 ed.gomez@free.fr--2003-1/tla--edgomez--1.1--patch-5 ed.gomez@free.fr--2003-1/tla--edgomez--1.1--patch-6 ed.gomez@free.fr--2003-1/tla--edgomez--1.1--patch-7 ed.gomez@free.fr--2003-1/tla--edgomez--1.1--patch-8 ed.gomez@free.fr--2003-1/tla--edgomez--1.1--patch-9 ed.gomez@free.fr--2003-1/tla--edgomez--1.1--patch-10 ed.gomez@free.fr--2003-1/tla--edgomez--1.1--patch-11 ed.gomez@free.fr--2003-1/tla--edgomez--1.1--patch-12 ed.gomez@free.fr--2003-1/tla--edgomez--1.1--patch-13 ed.gomez@free.fr--2003-1/tla--edgomez--1.1--patch-14 ed.gomez@free.fr--2003-1/tla--edgomez--1.1--patch-15 fw@deneb.enyo.de--2003-public/tla--devo--1.1--patch-21 giles@nemeton.com.au--2003-GPL/tla--giles--1.1--base-0 giles@nemeton.com.au--2003-GPL/tla--giles--1.1--patch-1 giles@nemeton.com.au--2003-GPL/tla--giles--1.1--patch-2 giles@nemeton.com.au--2003-GPL/tla--giles--1.1--patch-3 giles@nemeton.com.au--2003-GPL/tla--giles--1.1--patch-4 giles@nemeton.com.au--2003-GPL/tla--giles--1.1--patch-5 giles@nemeton.com.au--2003-GPL/tla--giles--1.1--patch-6 giles@nemeton.com.au--2003-GPL/tla--giles--1.1--patch-7 giles@nemeton.com.au--2003-GPL/tla--giles--1.1--patch-8 giles@nemeton.com.au--2003-GPL/tla--giles--1.1--patch-9 giles@nemeton.com.au--2003-GPL/tla--giles--1.1--patch-10 giles@nemeton.com.au--2003-GPL/tla--giles--1.1--patch-11 giles@nemeton.com.au--2003-GPL/tla--giles--1.1--patch-12 giles@nemeton.com.au--2003-GPL/tla--giles--1.1--patch-13 giles@nemeton.com.au--2003-GPL/tla--giles--1.1--patch-14 giles@nemeton.com.au--2003-GPL/tla--giles--1.1--patch-15 giles@nemeton.com.au--2003-GPL/tla--giles--1.1--patch-16 giles@nemeton.com.au--2003-GPL/tla--giles--1.1--patch-17 giles@nemeton.com.au--2003-GPL/tla--giles--1.1--patch-18 giles@nemeton.com.au--2003-GPL/tla--giles--1.1--patch-19 giles@nemeton.com.au--2003-GPL/tla--giles--1.1--patch-20 giles@nemeton.com.au--2003-GPL/tla--giles--1.1--patch-21 giles@nemeton.com.au--2003-GPL/tla--giles--1.1--patch-22 giles@nemeton.com.au--2003-GPL/tla--giles--1.1--patch-23 giles@nemeton.com.au--2003-GPL/tla--giles--1.1--patch-24 jblack@inframix.com--2004/tla--cacherevbase--1.2--base-0 jblack@inframix.com--2004/tla--cacherevbase--1.2--patch-1 jblack@inframix.com--2004/tla--cacherevbase--1.2--patch-2 jblack@inframix.com--2004/tla--cacherevbase--1.2--patch-3 jblack@inframix.com--2004/tla--cacherevbase--1.2--patch-4 jblack@inframix.com--2004/tla--changeset--1.3--base-0 jblack@inframix.com--2004/tla--changeset--1.3--patch-1 jblack@inframix.com--2004/tla--delta--1.2--base-0 jblack@inframix.com--2004/tla--delta--1.2--patch-1 jblack@inframix.com--2004/tla--delta--1.3--base-0 jblack@inframix.com--2004/tla--delta--1.3--patch-1 jblack@inframix.com--2004/tla--devo--1.3--base-0 jblack@inframix.com--2004/tla--devo--1.3--patch-1 jblack@inframix.com--2004/tla--devo--1.3--patch-2 jblack@inframix.com--2004/tla--devo--1.3--patch-3 jblack@inframix.com--2004/tla--devo--1.3--patch-4 jblack@inframix.com--2004/tla--devo--1.3--patch-5 jblack@inframix.com--2004/tla--devo--1.3--patch-6 jblack@inframix.com--2004/tla--devo--1.3--patch-7 jblack@inframix.com--2004/tla--devo--1.3--patch-8 jblack@inframix.com--2004/tla--devo--1.3--patch-12 jblack@inframix.com--2004/tla--devo--1.3--patch-13 jblack@inframix.com--2004/tla--devo--1.3--patch-14 jblack@inframix.com--2004/tla--devo--1.3--patch-15 jblack@inframix.com--2004/tla--devo--1.3--patch-16 jblack@inframix.com--2004/tla--devo--1.3--patch-17 jblack@inframix.com--2004/tla--devo--1.3--patch-18 jblack@inframix.com--2004/tla--devo--1.3--patch-19 jblack@inframix.com--2004/tla--devo--1.3--patch-20 jblack@inframix.com--2004/tla--devo--1.3--patch-21 jblack@inframix.com--2004/tla--devo--1.3--patch-22 jblack@inframix.com--2004/tla--devo--1.3--patch-23 jblack@inframix.com--2004/tla--devo--1.3--patch-24 jblack@inframix.com--2004/tla--devo--1.3--patch-25 jblack@inframix.com--2004/tla--export--1.2--base-0 jblack@inframix.com--2004/tla--export--1.2--patch-1 jblack@inframix.com--2004/tla--export--1.2--patch-2 jblack@inframix.com--2004/tla--export--1.2--patch-3 jblack@inframix.com--2004/tla--export--1.2--patch-4 jblack@inframix.com--2004/tla--export--1.2--patch-5 jblack@inframix.com--2004/tla--mailname--1.3--base-0 jblack@inframix.com--2004/tla--mailname--1.3--patch-1 jblack@inframix.com--2004/tla--newneon--1.3--base-0 jblack@inframix.com--2004/tla--newneon--1.3--patch-1 jblack@inframix.com--2004/tla--rbrowse--1.2.1--base-0 jblack@inframix.com--2004/tla--rbrowse--1.2.1--patch-1 jblack@inframix.com--2004/tla--rbrowse--1.2.1--patch-2 jblack@inframix.com--2004/tla--rbrowse--1.2.1--patch-3 jblack@inframix.com--2004/tla--rbrowse--1.2.1--patch-4 jblack@inframix.com--2004/tla--rbrowse--1.2.1--patch-5 jblack@inframix.com--2004/tla--rbrowse--1.2.1--patch-6 jblack@inframix.com--2004/tla--rbrowse--1.2.1--patch-7 jblack@inframix.com--2004/tla--rbrowse--1.3--base-0 jblack@inframix.com--2004/tla--rbrowse--1.3--patch-1 jblack@inframix.com--2004/tla--rbrowse--1.3--patch-2 jblack@inframix.com--2004/tla--rbrowse--1.3--patch-3 jblack@inframix.com--2004/tla--registerarchive--1.3--base-0 jblack@inframix.com--2004/tla--registerarchive--1.3--patch-1 jblack@merconline.com--2003/tla--devo--1.1--base-0 jblack@merconline.com--2003/tla--devo--1.1--patch-1 jblack@merconline.com--2003/tla--devo--1.1--patch-2 jblack@merconline.com--2003/tla--devo--1.1--patch-3 jblack@merconline.com--2003/tla--devo--1.1--patch-4 jblack@merconline.com--2003/tla--devo--1.1--patch-5 jblack@merconline.com--2003/tla--devo--1.1--patch-6 jblack@merconline.com--2003/tla--devo--1.1--patch-7 jblack@merconline.com--2003/tla--devo--1.1--patch-8 jblack@merconline.com--2003/tla--devo--1.1--patch-9 jblack@merconline.com--2003/tla--devo--1.1--patch-10 jblack@merconline.com--2003/tla--devo--1.1--patch-11 jblack@merconline.com--2003/tla--devo--1.1--patch-12 jblack@merconline.com--2003/tla--devo--1.1--patch-13 jblack@merconline.com--2003/tla--devo--1.1--patch-14 jblack@merconline.com--2003/tla--devo--1.1--patch-15 jblack@merconline.com--2003/tla--devo--1.1--patch-16 jblack@merconline.com--2003/tla--devo--1.1--patch-17 jblack@merconline.com--2003/tla--devo--1.1--patch-18 jblack@merconline.com--2003/tla--devo--1.1--patch-19 jblack@merconline.com--2003/tla--devo--1.1--patch-20 jblack@merconline.com--2003/tla--devo--1.1--patch-21 jblack@merconline.com--2003/tla--devo--1.1--patch-22 jblack@merconline.com--2003/tla--devo--1.1--patch-23 jblack@merconline.com--2003/tla--devo--1.1--patch-24 jblack@merconline.com--2003/tla--devo--1.1--patch-25 jblack@merconline.com--2003/tla--devo--1.1--patch-26 jblack@merconline.com--2003/tla--devo--1.1--patch-27 jblack@merconline.com--2003/tla--devo--1.1--patch-28 jblack@merconline.com--2003/tla--devo--1.1--patch-29 jblack@merconline.com--2003/tla--devo--1.1--patch-30 jblack@merconline.com--2003/tla--devo--1.1--patch-31 jblack@merconline.com--2003/tla--devo--1.1--patch-32 jblack@merconline.com--2003/tla--devo--1.1--patch-33 jblack@merconline.com--2003/tla--devo--1.1--patch-34 jblack@merconline.com--2003/tla--devo--1.1--patch-35 jblack@merconline.com--2003/tla--devo--1.1--patch-36 jblack@merconline.com--2003/tla--devo--1.1--patch-37 jblack@merconline.com--2003/tla--devo--1.1--patch-38 jblack@merconline.com--2003/tla--devo--1.1--patch-39 jblack@merconline.com--2003/tla--devo--1.1--patch-40 jblack@merconline.com--2003/tla--devo--1.1--patch-41 jblack@merconline.com--2003/tla--devo--1.1--patch-42 jblack@merconline.com--2003/tla--devo--1.1--patch-43 jblack@merconline.com--2003/tla--devo--1.1--patch-44 jblack@merconline.com--2003/tla--devo--1.1--patch-45 jblack@merconline.com--2003/tla--devo--1.1--patch-46 jblack@merconline.com--2003/tla--devo--1.1--patch-47 jblack@merconline.com--2003/tla--devo--1.1--patch-48 jblack@merconline.com--2003/tla--devo--1.1--patch-49 jblack@merconline.com--2003/tla--devo--1.1--patch-50 jblack@merconline.com--2003/tla--devo--1.1--patch-51 jblack@merconline.com--2003/tla--devo--1.1--patch-52 jblack@merconline.com--2003/tla--devo--1.1--patch-53 jblack@merconline.com--2003/tla--devo--1.1--patch-54 jblack@merconline.com--2003/tla--devo--1.1--patch-55 jblack@merconline.com--2003/tla--devo--1.1--patch-56 jblack@merconline.com--2003/tla--devo--1.1--patch-57 jblack@merconline.com--2003/tla--devo--1.1--patch-58 jblack@merconline.com--2003/tla--devo-smallpatches--1.1--base-0 jblack@merconline.com--2003/tla--devo-smallpatches--1.1--patch-1 jblack@merconline.com--2003/tla--devo-smallpatches--1.1--patch-2 jblack@merconline.com--2003/tla--devo-smallpatches--1.1--patch-3 jblack@merconline.com--2003/tla--rbrowse--1.1--base-0 jblack@merconline.com--2003/tla--rbrowse--1.1--patch-1 jblack@merconline.com--2003/tla--rbrowse--1.1--patch-2 jblack@merconline.com--2003/tla--rbrowse--1.1--patch-3 jblack@merconline.com--2003/tla--rbrowse--1.1--patch-4 jblack@merconline.com--2003/tla--rbrowse--1.1--patch-5 jblack@merconline.com--2003/tla--rbrowse--1.1--patch-6 jblack@merconline.com--2003/tla--rbrowse--1.1--patch-7 jblack@merconline.com--2003/tla--rbrowse--1.1--patch-8 jblack@merconline.com--2003/tla--tla-devo-lsarchives-regex--1.1--base-0 jblack@merconline.com--2003/tla--tla-devo-lsarchives-regex--1.1--patch-1 jivera@flame.org--2004/tla--cleanup--1.3--patch-2 jivera@flame.org--2004/tla--cleanup--1.3--patch-3 jivera@flame.org--2004/tla--cleanup--1.3--patch-4 jivera@flame.org--2004/tla--cleanup--1.3--patch-5 jivera@flame.org--2004/tla--cleanup--1.3--patch-6 jivera@flame.org--2004/tla--cleanup--1.3--patch-7 jivera@flame.org--2004/tla--cleanup--1.3--patch-8 joel@rosdahl.net--projects/tla--dev--1.3--patch-2 joel@rosdahl.net--projects/tla--dev--1.3--patch-3 joel@rosdahl.net--projects/tla--dev--1.3--patch-4 joel@rosdahl.net--projects/tla--dev--1.3--patch-5 johannes@sipsolutions.de--2004/tla--proftpd--1.2--base-0 johannes@sipsolutions.de--2004/tla--proftpd--1.2--patch-1 johannes@sipsolutions.de--2004/tla--revlib-fix--1.2--base-0 johannes@sipsolutions.de--2004/tla--revlib-fix--1.2--patch-1 junkio@cox.net--2004-ext/tla--locl--1.2--base-0 junkio@cox.net--2004-ext/tla--locl--1.2--patch-1 junkio@cox.net--2004/tla--locl--1.2--patch-1 linuxnow@newtral.org--arch-2003/tla--devo--1.1--base-0 linuxnow@newtral.org--arch-2003/tla--devo--1.1--patch-1 linuxnow@newtral.org--arch-2003/tla--devo--1.1--patch-4 linuxnow@newtral.org--arch-2003/tla--devo--1.1--patch-5 lord@emf.net--2003/file-utils--devo--1.0--base-0 lord@emf.net--2003/file-utils--devo--1.0--patch-1 lord@emf.net--2003/file-utils--devo--1.0--patch-2 lord@emf.net--2003/file-utils--devo--1.0--patch-3 lord@emf.net--2003/file-utils--devo--1.0--patch-4 lord@emf.net--2003/file-utils--devo--1.0--patch-5 lord@emf.net--2003/file-utils--devo--1.0--patch-6 lord@emf.net--2003/file-utils--devo--1.0--patch-7 lord@emf.net--2003/file-utils--devo--1.0--patch-8 lord@emf.net--2003/file-utils--devo--1.0--patch-9 lord@emf.net--2003/file-utils--devo--1.0--patch-10 lord@emf.net--2003/file-utils--devo--1.0--patch-11 lord@emf.net--2003/file-utils--devo--1.0--patch-12 lord@emf.net--2003/file-utils--devo--1.0--patch-13 lord@emf.net--2003/file-utils--devo--1.0--patch-14 lord@emf.net--2003/file-utils--devo--1.0--patch-15 lord@emf.net--2003/file-utils--devo--1.0--patch-16 lord@emf.net--2003/file-utils--devo--1.0--patch-17 lord@emf.net--2003/file-utils--devo--1.0--patch-18 lord@emf.net--2003/file-utils--devo--1.0--patch-19 lord@emf.net--2003/file-utils--devo--1.0--patch-20 lord@emf.net--2003/file-utils--devo--1.0--patch-21 lord@emf.net--2003/file-utils--devo--1.0--patch-22 lord@emf.net--2003/file-utils--devo--1.0--patch-23 lord@emf.net--2003/file-utils--devo--1.0--patch-24 lord@emf.net--2003/file-utils--devo--1.0--patch-25 lord@emf.net--2003/file-utils--devo--1.0--patch-26 lord@emf.net--2003/file-utils--devo--1.0--patch-27 lord@emf.net--2003/file-utils--devo--1.0--patch-28 lord@emf.net--2003/file-utils--devo--1.0--patch-29 lord@emf.net--2003/file-utils--devo--1.0--patch-30 lord@emf.net--2003/file-utils--devo--1.0--patch-31 lord@emf.net--2003/file-utils--devo--1.0--patch-32 lord@emf.net--2003/file-utils--devo--1.0--patch-33 lord@emf.net--2003/file-utils--devo--1.0--patch-34 lord@emf.net--2003/file-utils--devo--1.0--patch-35 lord@emf.net--2003/file-utils--devo--1.0--patch-36 lord@emf.net--2003/file-utils--devo--1.0--patch-37 lord@emf.net--2003/file-utils--devo--1.0--patch-38 lord@emf.net--2003/file-utils--devo--1.0--patch-39 lord@emf.net--2003/file-utils--devo--1.0--patch-40 lord@emf.net--2003/file-utils--devo--1.0--patch-41 lord@emf.net--2003/file-utils--devo--1.0--patch-42 lord@emf.net--2003/file-utils--devo--1.0--patch-43 lord@emf.net--2003/file-utils--devo--1.0--patch-44 lord@emf.net--2003/file-utils--devo--1.0--patch-45 lord@emf.net--2003/file-utils--devo--1.0--patch-46 lord@emf.net--2003/file-utils--devo--1.0--patch-47 lord@emf.net--2003/file-utils--devo--1.0--patch-48 lord@emf.net--2003/file-utils--devo--1.0--patch-49 lord@emf.net--2003/file-utils--devo--1.0--patch-50 lord@emf.net--2003/file-utils--devo--1.0--patch-51 lord@emf.net--2003/file-utils--devo--1.0--patch-52 lord@emf.net--2003/file-utils--devo--1.0--patch-53 lord@emf.net--2003/file-utils--devo--1.0--patch-54 lord@emf.net--2003/file-utils--devo--1.0--patch-55 lord@emf.net--2003/file-utils--devo--1.0--patch-56 lord@emf.net--2003/file-utils--devo--1.0--patch-57 lord@emf.net--2003/file-utils--devo--1.0--patch-58 lord@emf.net--2003/file-utils--devo--1.0--patch-59 lord@emf.net--2003/file-utils--devo--1.0--patch-60 lord@emf.net--2003/file-utils--devo--1.0--patch-61 lord@emf.net--2003/file-utils--devo--1.0--patch-62 lord@emf.net--2003/file-utils--devo--1.0--patch-63 lord@emf.net--2003/file-utils--devo--1.0--patch-64 lord@emf.net--2003/file-utils--devo--1.0--patch-65 lord@emf.net--2003/file-utils--devo--1.0--patch-66 lord@emf.net--2003/file-utils--devo--1.0--patch-67 lord@emf.net--2003/file-utils--devo--1.0--patch-68 lord@emf.net--2003/file-utils--devo--1.0--patch-69 lord@emf.net--2003/file-utils--devo--1.0--patch-70 lord@emf.net--2003/file-utils--devo--1.0--patch-71 lord@emf.net--2003/file-utils--devo--1.0--patch-72 lord@emf.net--2003/file-utils--devo--1.0--patch-73 lord@emf.net--2003/file-utils--devo--1.0--patch-74 lord@emf.net--2003/file-utils--devo--1.0--patch-75 lord@emf.net--2003/file-utils--devo--1.0--patch-76 lord@emf.net--2003/file-utils--devo--1.0--patch-77 lord@emf.net--2003/file-utils--devo--1.0--patch-78 lord@emf.net--2003/file-utils--devo--1.0--patch-79 lord@emf.net--2003/file-utils--devo--1.0--patch-80 lord@emf.net--2003/file-utils--devo--1.0--patch-81 lord@emf.net--2003/file-utils--devo--1.0--patch-82 lord@emf.net--2003/file-utils--devo--1.0--patch-83 lord@emf.net--2003/file-utils--devo--1.0--patch-84 lord@emf.net--2003/file-utils--devo--1.0--patch-85 lord@emf.net--2003/file-utils--devo--1.0--patch-86 lord@emf.net--2003/file-utils--devo--1.0--patch-87 lord@emf.net--2003/file-utils--devo--1.0--patch-88 lord@emf.net--2003/file-utils--devo--1.0--patch-89 lord@emf.net--2003/file-utils--devo--1.0--patch-90 lord@emf.net--2003/file-utils--devo--1.0--patch-91 lord@emf.net--2003/file-utils--devo--1.0--patch-92 lord@emf.net--2003/file-utils--devo--1.0--patch-93 lord@emf.net--2003/file-utils--devo--1.0--patch-94 lord@emf.net--2003/file-utils--devo--1.0--patch-95 lord@emf.net--2003/file-utils--devo--1.0--patch-96 lord@emf.net--2003/file-utils--devo--1.0--patch-97 lord@emf.net--2003/file-utils--devo--1.0--patch-98 lord@emf.net--2003/file-utils--devo--1.0--patch-99 lord@emf.net--2003/file-utils--devo--1.0--patch-100 lord@emf.net--2003/file-utils--devo--1.0--patch-101 lord@emf.net--2003/file-utils--devo--1.0--patch-102 lord@emf.net--2003/file-utils--devo--1.0--patch-103 lord@emf.net--2003/file-utils--devo--1.0--patch-104 lord@emf.net--2003/file-utils--devo--1.0--patch-105 lord@emf.net--2003/file-utils--devo--1.0--patch-106 lord@emf.net--2003/file-utils--devo--1.0--patch-107 lord@emf.net--2003/file-utils--devo--1.0--patch-108 lord@emf.net--2003/file-utils--devo--1.0--patch-109 lord@emf.net--2003/file-utils--devo--1.0--patch-110 lord@emf.net--2003/file-utils--devo--1.0--patch-111 lord@emf.net--2003/file-utils--devo--1.0--patch-112 lord@emf.net--2003/file-utils--devo--1.0--patch-113 lord@emf.net--2003/file-utils--devo--1.0--patch-114 lord@emf.net--2003/file-utils--devo--1.0--patch-115 lord@emf.net--2003/file-utils--devo--1.0--patch-116 lord@emf.net--2003/file-utils--devo--1.0--patch-117 lord@emf.net--2003/file-utils--devo--1.0--patch-118 lord@emf.net--2003/file-utils--devo--1.0--patch-119 lord@emf.net--2003/file-utils--devo--1.0--patch-120 lord@emf.net--2003/file-utils--devo--1.0--patch-121 lord@emf.net--2003/file-utils--devo--1.0--patch-122 lord@emf.net--2003/file-utils--devo--1.0--patch-123 lord@emf.net--2003/file-utils--devo--1.0--patch-124 lord@emf.net--2003/file-utils--devo--1.0--patch-125 lord@emf.net--2003/file-utils--devo--1.0--patch-126 lord@emf.net--2003/file-utils--devo--1.0--patch-127 lord@emf.net--2003/file-utils--devo--1.0--patch-128 lord@emf.net--2003/file-utils--devo--1.0--patch-129 lord@emf.net--2003/file-utils--devo--1.0--patch-130 lord@emf.net--2003/file-utils--devo--1.0--patch-131 lord@emf.net--2003/file-utils--devo--1.0--patch-132 lord@emf.net--2003/file-utils--devo--1.0--patch-133 lord@emf.net--2003/file-utils--devo--1.0--patch-134 lord@emf.net--2003/file-utils--devo--1.0--patch-135 lord@emf.net--2003/file-utils--devo--1.0--patch-136 lord@emf.net--2003/file-utils--devo--1.0--patch-137 lord@emf.net--2003/file-utils--devo--1.0--patch-138 lord@emf.net--2003/file-utils--devo--1.0--patch-139 lord@emf.net--2003/file-utils--devo--1.0--patch-140 lord@emf.net--2003/file-utils--devo--1.0--patch-141 lord@emf.net--2003/file-utils--devo--1.0--patch-142 lord@emf.net--2003/file-utils--devo--1.0--patch-143 lord@emf.net--2003/file-utils--devo--1.0--patch-144 lord@emf.net--2003/file-utils--devo--1.0--patch-145 lord@emf.net--2003/file-utils--devo--1.0--patch-146 lord@emf.net--2003/file-utils--devo--1.0--patch-147 lord@emf.net--2003/file-utils--devo--1.0--patch-148 lord@emf.net--2003/file-utils--devo--1.0--patch-149 lord@emf.net--2003/file-utils--devo--1.0--patch-150 lord@emf.net--2003/file-utils--devo--1.0--patch-151 lord@emf.net--2003/file-utils--devo--1.0--patch-152 lord@emf.net--2003/file-utils--devo--1.0--patch-153 lord@emf.net--2003/file-utils--devo--1.0--patch-154 lord@emf.net--2003/file-utils--devo--1.0--patch-155 lord@emf.net--2003/file-utils--devo--1.0--patch-156 lord@emf.net--2003/file-utils--devo--1.0--patch-157 lord@emf.net--2003/file-utils--devo--1.0--patch-158 lord@emf.net--2003/file-utils--devo--1.0--patch-159 lord@emf.net--2003/file-utils--devo--1.0--patch-160 lord@emf.net--2003/file-utils--devo--1.0--patch-161 lord@emf.net--2003/file-utils--devo--1.0--patch-162 lord@emf.net--2003/file-utils--devo--1.0--patch-163 lord@emf.net--2003/file-utils--devo--1.0--patch-164 lord@emf.net--2003/file-utils--devo--1.0--patch-165 lord@emf.net--2003/file-utils--devo--1.0--patch-166 lord@emf.net--2003/file-utils--devo--1.0--patch-167 lord@emf.net--2003/file-utils--devo--1.0--patch-168 lord@emf.net--2003/file-utils--devo--1.0--patch-169 lord@emf.net--2003/file-utils--devo--1.0--patch-170 lord@emf.net--2003/file-utils--devo--1.0--patch-171 lord@emf.net--2003/file-utils--devo--1.0--patch-172 lord@emf.net--2003/file-utils--devo--1.0--patch-173 lord@emf.net--2003/file-utils--devo--1.0--patch-174 lord@emf.net--2003/file-utils--devo--1.0--patch-175 lord@emf.net--2003/file-utils--devo--1.0--patch-176 lord@emf.net--2003/file-utils--devo--1.0--patch-177 lord@emf.net--2003/file-utils--devo--1.0--patch-178 lord@emf.net--2003/file-utils--devo--1.0--patch-179 lord@emf.net--2003/file-utils--devo--1.0--patch-180 lord@emf.net--2003/file-utils--devo--1.0--patch-181 lord@emf.net--2003/file-utils--devo--1.0--patch-182 lord@emf.net--2003/file-utils--devo--1.0--patch-183 lord@emf.net--2003/file-utils--devo--1.0--patch-184 lord@emf.net--2003/file-utils--devo--1.0--patch-185 lord@emf.net--2003/file-utils--devo--1.0--patch-186 lord@emf.net--2003/file-utils--devo--1.0--patch-187 lord@emf.net--2003/file-utils--devo--1.0--patch-188 lord@emf.net--2003/file-utils--devo--1.0--patch-189 lord@emf.net--2003/file-utils--devo--1.0--patch-190 lord@emf.net--2003/file-utils--devo--1.0--patch-191 lord@emf.net--2003/file-utils--devo--1.0--patch-192 lord@emf.net--2003/file-utils--devo--1.0--patch-193 lord@emf.net--2003/file-utils--devo--1.0--patch-194 lord@emf.net--2003/file-utils--devo--1.0--patch-195 lord@emf.net--2003/file-utils--devo--1.0--patch-196 lord@emf.net--2003/file-utils--devo--1.0--patch-197 lord@emf.net--2003/file-utils--devo--1.0--patch-198 lord@emf.net--2003/file-utils--devo--1.0--patch-199 lord@emf.net--2003/file-utils--devo--1.0--patch-200 lord@emf.net--2003/file-utils--devo--1.0--patch-201 lord@emf.net--2003/file-utils--devo--1.0--patch-202 lord@emf.net--2003/file-utils--devo--1.0--patch-203 lord@emf.net--2003/file-utils--devo--1.0--patch-204 lord@emf.net--2003/file-utils--devo--1.0--patch-205 lord@emf.net--2003/file-utils--devo--1.0--patch-206 lord@emf.net--2003/file-utils--devo--1.0--patch-207 lord@emf.net--2003/file-utils--devo--1.0--patch-208 lord@emf.net--2003/file-utils--devo--1.0--patch-209 lord@emf.net--2003/file-utils--devo--1.0--patch-210 lord@emf.net--2003/file-utils--devo--1.0--patch-211 lord@emf.net--2003/file-utils--devo--1.0--patch-212 lord@emf.net--2003/file-utils--devo--1.0--patch-213 lord@emf.net--2003/file-utils--devo--1.0--patch-214 lord@emf.net--2003/file-utils--devo--1.0--patch-215 lord@emf.net--2003/file-utils--devo--1.0--patch-216 lord@emf.net--2003/file-utils--devo--1.0--patch-217 lord@emf.net--2003/file-utils--devo--1.0--patch-218 lord@emf.net--2003/file-utils--devo--1.0--patch-219 lord@emf.net--2003/file-utils--devo--1.0--patch-220 lord@emf.net--2003/file-utils--devo--1.0--patch-221 lord@emf.net--2003/file-utils--devo--1.0--patch-222 lord@emf.net--2003/file-utils--devo--1.0--patch-223 lord@emf.net--2003/file-utils--devo--1.0--patch-224 lord@emf.net--2003/file-utils--devo--1.0--patch-225 lord@emf.net--2003/file-utils--devo--1.0--patch-226 lord@emf.net--2003/file-utils--devo--1.0--patch-227 lord@emf.net--2003/file-utils--devo--1.0--patch-228 lord@emf.net--2003/file-utils--devo--1.0--patch-229 lord@emf.net--2003/file-utils--devo--1.0--patch-230 lord@emf.net--2003/file-utils--devo--1.0--patch-231 lord@emf.net--2003/file-utils--devo--1.0--patch-232 lord@emf.net--2003/file-utils--devo--1.0--patch-233 lord@emf.net--2003/file-utils--devo--1.0--patch-234 lord@emf.net--2003/file-utils--devo--1.0--patch-235 lord@emf.net--2003/file-utils--devo--1.0--patch-236 lord@emf.net--2003/file-utils--devo--1.0--patch-237 lord@emf.net--2003/file-utils--devo--1.0--patch-238 lord@emf.net--2003/file-utils--devo--1.0--patch-239 lord@emf.net--2003/file-utils--devo--1.0--patch-240 lord@emf.net--2003/file-utils--devo--1.0--patch-241 lord@emf.net--2003/file-utils--devo--1.0--patch-242 lord@emf.net--2003/file-utils--devo--1.0--patch-243 lord@emf.net--2003/file-utils--devo--1.0--patch-244 lord@emf.net--2003/file-utils--devo--1.0--patch-245 lord@emf.net--2003/file-utils--devo--1.0--patch-246 lord@emf.net--2003/file-utils--devo--1.0--patch-247 lord@emf.net--2003/file-utils--devo--1.0--patch-248 lord@emf.net--2003/file-utils--devo--1.0--patch-249 lord@emf.net--2003/file-utils--devo--1.0--patch-250 lord@emf.net--2003/file-utils--devo--1.0--patch-251 lord@emf.net--2003/file-utils--devo--1.0--patch-252 lord@emf.net--2003/file-utils--devo--1.0--patch-253 lord@emf.net--2003/file-utils--devo--1.0--patch-254 lord@emf.net--2003/file-utils--devo--1.0--patch-255 lord@emf.net--2003/file-utils--devo--1.0--patch-256 lord@emf.net--2003/file-utils--devo--1.0--patch-257 lord@emf.net--2003/file-utils--devo--1.0--patch-258 lord@emf.net--2003/file-utils--devo--1.0--patch-259 lord@emf.net--2003/file-utils--devo--1.0--patch-260 lord@emf.net--2003/file-utils--devo--1.0--patch-261 lord@emf.net--2003b/file-utils--devo--1.0--base-0 lord@emf.net--2003b/file-utils--devo--1.0--patch-1 lord@emf.net--2003b/file-utils--devo--1.0--patch-2 lord@emf.net--2003b/file-utils--devo--1.0--patch-3 lord@emf.net--2003b/file-utils--devo--1.0--patch-4 lord@emf.net--2003b/file-utils--devo--1.0--patch-5 lord@emf.net--2003b/file-utils--devo--1.0--patch-6 lord@emf.net--2003b/file-utils--devo--1.0--patch-7 lord@emf.net--2003b/file-utils--devo--1.0--patch-8 lord@emf.net--2003b/file-utils--devo--1.0--patch-9 lord@emf.net--2003b/file-utils--devo--1.0--patch-10 lord@emf.net--2003b/file-utils--devo--1.0--patch-11 lord@emf.net--2003b/file-utils--devo--1.0--patch-12 lord@emf.net--2003b/file-utils--devo--1.0--patch-13 lord@emf.net--2003b/file-utils--devo--1.0--patch-14 lord@emf.net--2003b/file-utils--devo--1.0--patch-15 lord@emf.net--2003b/file-utils--devo--1.0--patch-16 lord@emf.net--2003b/file-utils--devo--1.0--patch-17 lord@emf.net--2003b/file-utils--devo--1.0--patch-18 lord@emf.net--2003b/file-utils--devo--1.0--patch-19 lord@emf.net--2003b/file-utils--devo--1.0--patch-20 lord@emf.net--2003b/file-utils--devo--1.0--patch-21 lord@emf.net--2003b/file-utils--devo--1.0--patch-22 lord@emf.net--2003b/file-utils--devo--1.0--patch-23 lord@emf.net--2003b/file-utils--devo--1.0--patch-24 lord@emf.net--2003b/file-utils--devo--1.0--patch-25 lord@emf.net--2003b/file-utils--devo--1.0--patch-26 lord@emf.net--2003b/file-utils--devo--1.0--patch-27 lord@emf.net--2003b/file-utils--devo--1.0--patch-28 lord@emf.net--2003b/file-utils--devo--1.0--patch-29 lord@emf.net--2003b/file-utils--devo--1.0--patch-30 lord@emf.net--2003b/file-utils--devo--1.0--patch-31 lord@emf.net--2003b/file-utils--devo--1.0--patch-32 lord@emf.net--2003b/file-utils--devo--1.0--patch-33 lord@emf.net--2003b/file-utils--devo--1.0--patch-34 lord@emf.net--2003b/file-utils--devo--1.0--patch-35 lord@emf.net--2003b/file-utils--devo--1.0--patch-36 lord@emf.net--2003b/file-utils--devo--1.0--patch-37 lord@emf.net--2003b/file-utils--devo--1.0--patch-38 lord@emf.net--2003b/tla--browser-support--1.1--base-0 lord@emf.net--2003b/tla--browser-support--1.1--patch-1 lord@emf.net--2003b/tla--browser-support--1.1--patch-2 lord@emf.net--2003b/tla--browser-support--1.1--patch-3 lord@emf.net--2003b/tla--browser-support--1.1--patch-4 lord@emf.net--2003b/tla--browser-support--1.1--patch-5 lord@emf.net--2003b/tla--browser-support--1.1--patch-6 lord@emf.net--2003b/tla--browser-support--1.1--patch-7 lord@emf.net--2003b/tla--browser-support--1.1--patch-8 lord@emf.net--2003b/tla--browser-support--1.1--patch-9 lord@emf.net--2003b/tla--browser-support--1.1--patch-10 lord@emf.net--2003b/tla--browser-support--1.1--patch-11 lord@emf.net--2003b/tla--browser-support--1.1--patch-12 lord@emf.net--2003b/tla--browser-support--1.1--patch-13 lord@emf.net--2003b/tla--browser-support--1.1--patch-14 lord@emf.net--2003b/tla--browser-support--1.1--patch-15 lord@emf.net--2003b/tla--browser-support--1.1--patch-16 lord@emf.net--2003b/tla--browser-support--1.1--patch-17 lord@emf.net--2003b/tla--browser-support--1.1--patch-18 lord@emf.net--2003b/tla--browser-support--1.1--patch-19 lord@emf.net--2003b/tla--devo--1.0--base-0 lord@emf.net--2003b/tla--devo--1.0--patch-1 lord@emf.net--2003b/tla--devo--1.0--patch-2 lord@emf.net--2003b/tla--devo--1.0--patch-3 lord@emf.net--2003b/tla--devo--1.0--patch-4 lord@emf.net--2003b/tla--devo--1.0--patch-5 lord@emf.net--2003b/tla--devo--1.0--patch-6 lord@emf.net--2003b/tla--devo--1.0--patch-7 lord@emf.net--2003b/tla--devo--1.0--patch-8 lord@emf.net--2003b/tla--devo--1.0--patch-9 lord@emf.net--2003b/tla--devo--1.0--patch-10 lord@emf.net--2003b/tla--devo--1.0--patch-11 lord@emf.net--2003b/tla--devo--1.0--patch-12 lord@emf.net--2003b/tla--devo--1.0--patch-13 lord@emf.net--2003b/tla--devo--1.0--patch-14 lord@emf.net--2003b/tla--devo--1.0--patch-15 lord@emf.net--2003b/tla--devo--1.0--patch-16 lord@emf.net--2003b/tla--devo--1.0--patch-17 lord@emf.net--2003b/tla--devo--1.0--patch-18 lord@emf.net--2003b/tla--devo--1.0--patch-19 lord@emf.net--2003b/tla--devo--1.0--patch-20 lord@emf.net--2003b/tla--devo--1.0--patch-21 lord@emf.net--2003b/tla--devo--1.0--patch-22 lord@emf.net--2003b/tla--devo--1.0--patch-23 lord@emf.net--2003b/tla--devo--1.0--patch-24 lord@emf.net--2003b/tla--devo--1.0--patch-25 lord@emf.net--2003b/tla--devo--1.0--patch-26 lord@emf.net--2003b/tla--devo--1.0--patch-27 lord@emf.net--2003b/tla--devo--1.0--patch-28 lord@emf.net--2003b/tla--devo--1.0--patch-29 lord@emf.net--2003b/tla--devo--1.0--patch-30 lord@emf.net--2003b/tla--devo--1.0--patch-31 lord@emf.net--2003b/tla--devo--1.0--patch-32 lord@emf.net--2003b/tla--devo--1.0--patch-33 lord@emf.net--2003b/tla--devo--1.0--patch-34 lord@emf.net--2003b/tla--devo--1.0--patch-35 lord@emf.net--2003b/tla--devo--1.0--patch-36 lord@emf.net--2003b/tla--devo--1.0--patch-37 lord@emf.net--2003b/tla--devo--1.0--patch-38 lord@emf.net--2003b/tla--devo--1.0--patch-39 lord@emf.net--2003b/tla--devo--1.0--patch-40 lord@emf.net--2003b/tla--devo--1.0--patch-41 lord@emf.net--2003b/tla--devo--1.0--patch-42 lord@emf.net--2003b/tla--devo--1.0--patch-43 lord@emf.net--2003b/tla--devo--1.0--patch-44 lord@emf.net--2003b/tla--devo--1.0--patch-45 lord@emf.net--2003b/tla--devo--1.0--patch-46 lord@emf.net--2003b/tla--devo--1.0--patch-47 lord@emf.net--2003b/tla--devo--1.0--patch-48 lord@emf.net--2003b/tla--devo--1.0--patch-49 lord@emf.net--2003b/tla--devo--1.0--patch-50 lord@emf.net--2003b/tla--devo--1.0--patch-51 lord@emf.net--2003b/tla--devo--1.0--patch-52 lord@emf.net--2003b/tla--devo--1.0--patch-53 lord@emf.net--2003b/tla--devo--1.0--patch-54 lord@emf.net--2003b/tla--devo--1.0--patch-55 lord@emf.net--2003b/tla--devo--1.0--patch-56 lord@emf.net--2003b/tla--devo--1.0--patch-57 lord@emf.net--2003b/tla--devo--1.0--patch-58 lord@emf.net--2003b/tla--devo--1.0--patch-59 lord@emf.net--2003b/tla--devo--1.0--patch-60 lord@emf.net--2003b/tla--devo--1.0--patch-61 lord@emf.net--2003b/tla--devo--1.0--patch-62 lord@emf.net--2003b/tla--devo--1.0--patch-63 lord@emf.net--2003b/tla--devo--1.0--patch-64 lord@emf.net--2003b/tla--devo--1.0--patch-65 lord@emf.net--2003b/tla--devo--1.0--patch-66 lord@emf.net--2003b/tla--devo--1.0--patch-67 lord@emf.net--2003b/tla--devo--1.0--patch-68 lord@emf.net--2003b/tla--devo--1.0--patch-69 lord@emf.net--2003b/tla--devo--1.0--patch-70 lord@emf.net--2003b/tla--devo--1.0--patch-71 lord@emf.net--2003b/tla--devo--1.0--patch-72 lord@emf.net--2003b/tla--devo--1.0--patch-73 lord@emf.net--2003b/tla--devo--1.0--patch-74 lord@emf.net--2003b/tla--devo--1.0--patch-75 lord@emf.net--2003b/tla--devo--1.0--patch-76 lord@emf.net--2003b/tla--devo--1.0--patch-77 lord@emf.net--2003b/tla--devo--1.0--patch-78 lord@emf.net--2003b/tla--devo--1.0--patch-79 lord@emf.net--2003b/tla--devo--1.0--patch-80 lord@emf.net--2003b/tla--devo--1.0--patch-81 lord@emf.net--2003b/tla--devo--1.0--patch-82 lord@emf.net--2003b/tla--devo--1.0--patch-83 lord@emf.net--2003b/tla--devo--1.0--patch-84 lord@emf.net--2003b/tla--devo--1.0--patch-85 lord@emf.net--2003b/tla--devo--1.0--patch-86 lord@emf.net--2003b/tla--devo--1.0--patch-87 lord@emf.net--2003b/tla--devo--1.0--patch-89 lord@emf.net--2003b/tla--devo--1.1--base-0 lord@emf.net--2003b/tla--devo--1.1--patch-1 lord@emf.net--2003b/tla--devo--1.1--patch-2 lord@emf.net--2003b/tla--devo--1.1--patch-3 lord@emf.net--2003b/tla--devo--1.1--patch-4 lord@emf.net--2003b/tla--devo--1.1--patch-5 lord@emf.net--2003b/tla--devo--1.1--patch-6 lord@emf.net--2003b/tla--devo--1.1--patch-7 lord@emf.net--2003b/tla--devo--1.1--patch-8 lord@emf.net--2003b/tla--devo--1.1--patch-9 lord@emf.net--2003b/tla--devo--1.1--patch-10 lord@emf.net--2003b/tla--devo--1.1--patch-11 lord@emf.net--2003b/tla--devo--1.1--patch-12 lord@emf.net--2003b/tla--devo--1.1--patch-13 lord@emf.net--2003b/tla--devo--1.1--patch-14 lord@emf.net--2003b/tla--devo--1.1--patch-15 lord@emf.net--2003b/tla--devo--1.1--patch-16 lord@emf.net--2003b/tla--devo--1.1--patch-17 lord@emf.net--2003b/tla--devo--1.1--patch-18 lord@emf.net--2003b/tla--devo--1.1--patch-19 lord@emf.net--2003b/tla--devo--1.1--patch-20 lord@emf.net--2003b/tla--devo--1.1--patch-21 lord@emf.net--2003b/tla--devo--1.1--patch-22 lord@emf.net--2003b/tla--devo--1.1--patch-23 lord@emf.net--2003b/tla--devo--1.1--patch-24 lord@emf.net--2003b/tla--devo--1.1--patch-25 lord@emf.net--2003b/tla--devo--1.1--patch-26 lord@emf.net--2003b/tla--devo--1.1--patch-27 lord@emf.net--2003b/tla--devo--1.1--patch-28 lord@emf.net--2003b/tla--devo--1.1--patch-29 lord@emf.net--2003b/tla--devo--1.1--patch-30 lord@emf.net--2003b/tla--devo--1.1--patch-31 lord@emf.net--2003b/tla--devo--1.1--patch-32 lord@emf.net--2003b/tla--devo--1.1--patch-33 lord@emf.net--2003b/tla--devo--1.1--patch-34 lord@emf.net--2003b/tla--devo--1.1--patch-35 lord@emf.net--2003b/tla--devo--1.1--patch-36 lord@emf.net--2003b/tla--devo--1.1--patch-37 lord@emf.net--2003b/tla--devo--1.1--patch-38 lord@emf.net--2003b/tla--devo--1.1--patch-39 lord@emf.net--2003b/tla--devo--1.1--patch-40 lord@emf.net--2003b/tla--devo--1.1--patch-41 lord@emf.net--2003b/tla--devo--1.1--patch-42 lord@emf.net--2003b/tla--devo--1.1--patch-43 lord@emf.net--2003b/tla--devo--1.1--patch-44 lord@emf.net--2003b/tla--devo--1.1--patch-45 lord@emf.net--2003b/tla--devo--1.1--patch-46 lord@emf.net--2003b/tla--devo--1.1--patch-47 lord@emf.net--2003b/tla--devo--1.1--patch-48 lord@emf.net--2003b/tla--devo--1.1--patch-49 lord@emf.net--2003b/tla--devo--1.1--patch-50 lord@emf.net--2003b/tla--devo--1.1--patch-51 lord@emf.net--2003b/tla--devo--1.1--patch-52 lord@emf.net--2003b/tla--devo--1.1--patch-53 lord@emf.net--2003b/tla--devo--1.1--patch-54 lord@emf.net--2003b/tla--devo--1.1--patch-55 lord@emf.net--2003b/tla--devo--1.1--patch-56 lord@emf.net--2003b/tla--devo--1.1--patch-57 lord@emf.net--2003b/tla--devo--1.1--patch-58 lord@emf.net--2003b/tla--devo--1.1--patch-59 lord@emf.net--2003b/tla--devo--1.1--patch-60 lord@emf.net--2003b/tla--devo--1.1--patch-61 lord@emf.net--2003b/tla--devo--1.1--patch-62 lord@emf.net--2003b/tla--devo--1.1--patch-63 lord@emf.net--2003b/tla--devo--1.1--patch-64 lord@emf.net--2003b/tla--devo--1.1--patch-65 lord@emf.net--2003b/tla--devo--1.1--patch-66 lord@emf.net--2003b/tla--devo--1.1--patch-67 lord@emf.net--2003b/tla--devo--1.1--patch-68 lord@emf.net--2003b/tla--devo--1.1--patch-69 lord@emf.net--2003b/tla--devo--1.1--patch-70 lord@emf.net--2003b/tla--devo--1.1--patch-71 lord@emf.net--2003b/tla--devo--1.1--patch-72 lord@emf.net--2003b/tla--devo--1.1--patch-73 lord@emf.net--2003b/tla--devo--1.1--patch-74 lord@emf.net--2003b/tla--devo--1.1--patch-75 lord@emf.net--2003b/tla--devo--1.1--patch-76 lord@emf.net--2003b/tla--devo--1.1--patch-77 lord@emf.net--2003b/tla--devo--1.1--patch-78 lord@emf.net--2003b/tla--devo--1.1--patch-79 lord@emf.net--2003b/tla--devo--1.1--patch-80 lord@emf.net--2003b/tla--devo--1.1--patch-81 lord@emf.net--2003b/tla--devo--1.1--patch-82 lord@emf.net--2003b/tla--devo--1.1--patch-83 lord@emf.net--2003b/tla--devo--1.1--patch-84 lord@emf.net--2003b/tla--devo--1.1--patch-85 lord@emf.net--2003b/tla--devo--1.1--patch-86 lord@emf.net--2003b/tla--devo--1.1--patch-87 lord@emf.net--2003b/tla--devo--1.1--patch-88 lord@emf.net--2003b/tla--devo--1.1--patch-89 lord@emf.net--2003b/tla--devo--1.1--patch-90 lord@emf.net--2003b/tla--devo--1.1--patch-91 lord@emf.net--2003b/tla--devo--1.1--patch-92 lord@emf.net--2003b/tla--devo--1.1--patch-93 lord@emf.net--2003b/tla--devo--1.1--patch-94 lord@emf.net--2003b/tla--devo--1.1--patch-95 lord@emf.net--2003b/tla--devo--1.1--patch-96 lord@emf.net--2003b/tla--devo--1.1--patch-97 lord@emf.net--2003b/tla--devo--1.1--patch-98 lord@emf.net--2003b/tla--devo--1.1--patch-99 lord@emf.net--2003b/tla--devo--1.1--patch-100 lord@emf.net--2003b/tla--devo--1.1--patch-101 lord@emf.net--2003b/tla--devo--1.1--patch-102 lord@emf.net--2003b/tla--devo--1.1--patch-103 lord@emf.net--2003b/tla--devo--1.1--patch-104 lord@emf.net--2003b/tla--devo--1.1--patch-105 lord@emf.net--2003b/tla--devo--1.1--patch-106 lord@emf.net--2003b/tla--devo--1.1--patch-107 lord@emf.net--2003b/tla--devo--1.1--patch-108 lord@emf.net--2003b/tla--devo--1.1--patch-109 lord@emf.net--2003b/tla--devo--1.1--patch-110 lord@emf.net--2003b/tla--devo--1.1--patch-111 lord@emf.net--2003b/tla--devo--1.1--patch-112 lord@emf.net--2003b/tla--devo--1.1--patch-113 lord@emf.net--2003b/tla--devo--1.1--patch-114 lord@emf.net--2003b/tla--devo--1.1--patch-115 lord@emf.net--2003b/tla--devo--1.1--patch-116 lord@emf.net--2003b/tla--devo--1.1--patch-117 lord@emf.net--2003b/tla--devo--1.1--patch-118 lord@emf.net--2003b/tla--devo--1.1--patch-119 lord@emf.net--2003b/tla--devo--1.1--patch-120 lord@emf.net--2003b/tla--devo--1.1--patch-121 lord@emf.net--2003b/tla--devo--1.1--patch-122 lord@emf.net--2003b/tla--devo--1.1--patch-123 lord@emf.net--2003b/tla--devo--1.1--patch-124 lord@emf.net--2003b/tla--devo--1.1--patch-125 lord@emf.net--2003b/tla--devo--1.1--patch-126 lord@emf.net--2003b/tla--devo--1.1--patch-127 lord@emf.net--2003b/tla--devo--1.1--patch-128 lord@emf.net--2003b/tla--devo--1.1--patch-129 lord@emf.net--2003b/tla--devo--1.1--patch-130 lord@emf.net--2003b/tla--devo--1.1--patch-131 lord@emf.net--2003b/tla--devo--1.1--patch-132 lord@emf.net--2003b/tla--devo--1.1--patch-133 lord@emf.net--2003b/tla--devo--1.1--patch-134 lord@emf.net--2003b/tla--devo--1.1--patch-135 lord@emf.net--2003b/tla--devo--1.1--patch-136 lord@emf.net--2003b/tla--devo--1.1--patch-137 lord@emf.net--2003b/tla--devo--1.1--patch-138 lord@emf.net--2003b/tla--devo--1.1--patch-139 lord@emf.net--2003b/tla--devo--1.1--patch-140 lord@emf.net--2003b/tla--devo--1.1--patch-141 lord@emf.net--2003b/tla--devo--1.1--patch-142 lord@emf.net--2003b/tla--devo--1.1--patch-143 lord@emf.net--2003b/tla--devo--1.1--patch-144 lord@emf.net--2003b/tla--devo--1.1--patch-145 lord@emf.net--2003b/tla--devo--1.1--patch-146 lord@emf.net--2003b/tla--devo--1.1--patch-147 lord@emf.net--2003b/tla--devo--1.1--patch-148 lord@emf.net--2003b/tla--devo--1.1--patch-149 lord@emf.net--2003b/tla--devo--1.1--patch-150 lord@emf.net--2003b/tla--devo--1.1--patch-151 lord@emf.net--2003b/tla--devo--1.1--patch-152 lord@emf.net--2003b/tla--devo--1.1--patch-153 lord@emf.net--2003b/tla--devo--1.1--patch-154 lord@emf.net--2003b/tla--devo--1.1--patch-155 lord@emf.net--2003b/tla--devo--1.1--patch-156 lord@emf.net--2003b/tla--devo--1.1--patch-157 lord@emf.net--2003b/tla--devo--1.1--patch-158 lord@emf.net--2003b/tla--devo--1.1--patch-159 lord@emf.net--2003b/tla--devo--1.1--patch-160 lord@emf.net--2003b/tla--devo--1.1--patch-161 lord@emf.net--2003b/tla--devo--1.1--patch-162 lord@emf.net--2003b/tla--devo--1.1--patch-163 lord@emf.net--2003b/tla--devo--1.1--patch-164 lord@emf.net--2003b/tla--devo--1.1--patch-165 lord@emf.net--2003b/tla--devo--1.1--patch-166 lord@emf.net--2003b/tla--devo--1.1--patch-167 lord@emf.net--2003b/tla--devo--1.1--patch-168 lord@emf.net--2003b/tla--devo--1.1--patch-169 lord@emf.net--2003b/tla--devo--1.1--patch-170 lord@emf.net--2003b/tla--devo--1.1--patch-171 lord@emf.net--2003b/tla--devo--1.1--patch-172 lord@emf.net--2003b/tla--devo--1.1--patch-173 lord@emf.net--2003b/tla--devo--1.1--patch-174 lord@emf.net--2003b/tla--devo--1.1--patch-175 lord@emf.net--2003b/tla--devo--1.1--patch-176 lord@emf.net--2003b/tla--devo--1.1--patch-177 lord@emf.net--2003b/tla--devo--1.1--patch-178 lord@emf.net--2003b/tla--devo--1.1--patch-179 lord@emf.net--2003b/tla--devo--1.1--patch-180 lord@emf.net--2003b/tla--devo--1.1--patch-181 lord@emf.net--2003b/tla--devo--1.1--patch-182 lord@emf.net--2003b/tla--devo--1.1--patch-183 lord@emf.net--2003b/tla--devo--1.1--patch-184 lord@emf.net--2003b/tla--devo--1.1--patch-185 lord@emf.net--2003b/tla--devo--1.1--patch-186 lord@emf.net--2003b/tla--devo--1.1--patch-187 lord@emf.net--2003b/tla--devo--1.1--patch-188 lord@emf.net--2003b/tla--devo--1.1--patch-189 lord@emf.net--2003b/tla--devo--1.1--patch-190 lord@emf.net--2003b/tla--devo--1.1--patch-191 lord@emf.net--2003b/tla--devo--1.1--patch-192 lord@emf.net--2003b/tla--devo--1.1--patch-193 lord@emf.net--2003b/tla--devo--1.1--patch-194 lord@emf.net--2003b/tla--devo--1.1--patch-195 lord@emf.net--2003b/tla--devo--1.1--patch-196 lord@emf.net--2003b/tla--devo--1.1--patch-197 lord@emf.net--2003b/tla--devo--1.1--patch-198 lord@emf.net--2003b/tla--devo--1.1--patch-199 lord@emf.net--2003b/tla--devo--1.1--patch-200 lord@emf.net--2003b/tla--devo--1.1--patch-201 lord@emf.net--2003b/tla--devo--1.1--patch-202 lord@emf.net--2003b/tla--devo--1.1--patch-203 lord@emf.net--2003b/tla--devo--1.1--patch-204 lord@emf.net--2003b/tla--devo--1.1--patch-205 lord@emf.net--2003b/tla--devo--1.1--patch-206 lord@emf.net--2003b/tla--devo--1.1--patch-207 lord@emf.net--2003b/tla--devo--1.1--patch-208 lord@emf.net--2003b/tla--devo--1.1--patch-209 lord@emf.net--2003b/tla--devo--1.1--patch-210 lord@emf.net--2003b/tla--devo--1.1--patch-211 lord@emf.net--2003b/tla--devo--1.1--patch-212 lord@emf.net--2003b/tla--devo--1.1--patch-213 lord@emf.net--2003b/tla--devo--1.1--patch-214 lord@emf.net--2003b/tla--devo--1.1--patch-215 lord@emf.net--2003b/tla--devo--1.1--patch-216 lord@emf.net--2003b/tla--devo--1.1--patch-217 lord@emf.net--2003b/tla--devo--1.1--patch-218 lord@emf.net--2003b/tla--devo--1.1--patch-219 lord@emf.net--2003b/tla--devo--1.1--patch-220 lord@emf.net--2003b/tla--devo--1.1--patch-221 lord@emf.net--2003b/tla--devo--1.1--patch-222 lord@emf.net--2003b/tla--devo--1.1--patch-223 lord@emf.net--2003b/tla--devo--1.1--patch-224 lord@emf.net--2003b/tla--devo--1.1--patch-225 lord@emf.net--2003b/tla--devo--1.1--patch-226 lord@emf.net--2003b/tla--devo--1.1--patch-227 lord@emf.net--2003b/tla--devo--1.1--patch-228 lord@emf.net--2003b/tla--devo--1.1--patch-229 lord@emf.net--2003b/tla--devo--1.1--patch-230 lord@emf.net--2003b/tla--devo--1.1--patch-231 lord@emf.net--2003b/tla--devo--1.1--patch-232 lord@emf.net--2003b/tla--devo--1.1--patch-233 lord@emf.net--2003b/tla--devo--1.1--patch-234 lord@emf.net--2003b/tla--devo--1.1--patch-235 lord@emf.net--2003b/tla--devo--1.1--patch-236 lord@emf.net--2003b/tla--devo--1.1--patch-237 lord@emf.net--2003b/tla--devo--1.1--patch-238 lord@emf.net--2003b/tla--devo--1.1--patch-239 lord@emf.net--2003b/tla--devo--1.1--patch-240 lord@emf.net--2003b/tla--devo--1.1--patch-241 lord@emf.net--2003b/tla--devo--1.1--patch-242 lord@emf.net--2003b/tla--devo--1.1--patch-243 lord@emf.net--2003b/tla--devo--1.1--patch-244 lord@emf.net--2003b/tla--devo--1.1--patch-245 lord@emf.net--2003b/tla--devo--1.1--patch-246 lord@emf.net--2003b/tla--devo--1.1--patch-247 lord@emf.net--2003b/tla--devo--1.1--patch-248 lord@emf.net--2003b/tla--devo--1.1--patch-249 lord@emf.net--2003b/tla--devo--1.1--patch-250 lord@emf.net--2003b/tla--devo--1.1--patch-251 lord@emf.net--2003b/tla--devo--1.1--patch-252 lord@emf.net--2003b/tla--devo--1.1--patch-253 lord@emf.net--2003b/tla--devo--1.1--patch-254 lord@emf.net--2003b/tla--devo--1.1--patch-255 lord@emf.net--2003b/tla--devo--1.1--patch-256 lord@emf.net--2003b/tla--devo--1.1--patch-257 lord@emf.net--2003b/tla--devo--1.1--patch-258 lord@emf.net--2003b/tla--devo--1.1--patch-259 lord@emf.net--2003b/tla--devo--1.1--patch-260 lord@emf.net--2003b/tla--devo--1.1--patch-261 lord@emf.net--2003b/tla--devo--1.1--patch-262 lord@emf.net--2003b/tla--devo--1.1--patch-263 lord@emf.net--2003b/tla--devo--1.1--patch-264 lord@emf.net--2003b/tla--devo--1.1--patch-265 lord@emf.net--2003b/tla--devo--1.1--patch-266 lord@emf.net--2003b/tla--devo--1.1--patch-267 lord@emf.net--2003b/tla--devo--1.1--patch-268 lord@emf.net--2003b/tla--devo--1.1--patch-269 lord@emf.net--2003b/tla--devo--1.1--patch-270 lord@emf.net--2003b/tla--devo--1.1--patch-271 lord@emf.net--2003b/tla--devo--1.1--patch-272 lord@emf.net--2003b/tla--devo--1.1--patch-273 lord@emf.net--2003b/tla--devo--1.1--patch-274 lord@emf.net--2003b/tla--devo--1.1--patch-275 lord@emf.net--2003b/tla--devo--1.1--patch-276 lord@emf.net--2003b/tla--devo--1.1--patch-277 lord@emf.net--2003b/tla--devo--1.1--patch-278 lord@emf.net--2003b/tla--devo--1.1--patch-279 lord@emf.net--2003b/tla--devo--1.1--patch-280 lord@emf.net--2003b/tla--devo--1.1--patch-281 lord@emf.net--2003b/tla--devo--1.1--patch-282 lord@emf.net--2003b/tla--devo--1.1--patch-283 lord@emf.net--2003b/tla--devo--1.1--patch-284 lord@emf.net--2003b/tla--devo--1.1--patch-285 lord@emf.net--2003b/tla--devo--1.1--patch-286 lord@emf.net--2003b/tla--devo--1.1--patch-287 lord@emf.net--2003b/tla--small-fixes--1.1--base-0 lord@emf.net--2003b/tla--small-fixes--1.1--patch-1 lord@emf.net--2003b/tla--small-fixes--1.1--patch-2 lord@emf.net--2003b/tla--small-fixes--1.1--patch-3 lord@emf.net--2003b/tla--small-fixes--1.1--patch-4 lord@emf.net--2003b/tla--small-fixes--1.1--patch-5 lord@emf.net--2003b/tla--small-fixes--1.1--patch-6 lord@emf.net--2003b/tla--small-fixes--1.1--patch-7 lord@emf.net--2003b/tla--small-fixes--1.1--patch-8 lord@emf.net--2003b/tla--small-fixes--1.1--patch-9 lord@emf.net--2003b/tla--small-fixes--1.1--patch-10 lord@emf.net--2003b/tla--small-fixes--1.1--patch-11 lord@emf.net--2003b/tla--small-fixes--1.1--patch-12 lord@emf.net--2003b/tla--small-fixes--1.1--patch-13 lord@emf.net--2003b/tla--small-fixes--1.1--patch-14 lord@emf.net--2003b/tla--small-fixes--1.1--patch-15 lord@emf.net--2003b/tla--small-fixes--1.1--patch-16 lord@emf.net--2003b/tla--small-fixes--1.1--patch-17 lord@emf.net--2003b/tla--small-fixes--1.1--patch-18 lord@emf.net--2003b/tla--small-fixes--1.1--patch-19 lord@emf.net--2003b/tla--small-fixes--1.1--patch-20 lord@emf.net--2003b/tla--small-fixes--1.1--patch-21 lord@emf.net--2003b/tla--small-fixes--1.1--patch-22 lord@emf.net--2003b/tla--small-fixes--1.1--patch-23 lord@emf.net--2003b/tla--small-fixes--1.1--patch-24 lord@emf.net--2003b/tla--small-fixes--1.1--patch-25 lord@emf.net--2003b/tla--small-fixes--1.1--patch-26 lord@emf.net--2003b/tla--small-fixes--1.1--patch-27 lord@emf.net--2003b/tla--small-fixes--1.1--patch-28 lord@emf.net--2003b/tla--small-fixes--1.1--patch-29 lord@emf.net--2003b/tla--small-fixes--1.1--patch-30 lord@emf.net--2003b/tla--small-fixes--1.1--patch-31 lord@emf.net--2003b/tla--small-fixes--1.1--patch-32 lord@emf.net--2003b/tla--small-fixes--1.1--patch-33 lord@emf.net--2003b/tla--small-fixes--1.1--patch-34 lord@emf.net--2003b/tla--small-fixes--1.1--patch-35 lord@emf.net--2003b/tla--small-fixes--1.1--patch-36 lord@emf.net--2003b/tla--small-fixes--1.1--patch-37 lord@emf.net--2003b/tla--small-fixes--1.1--patch-38 lord@emf.net--2003b/tla--small-fixes--1.1--patch-39 lord@emf.net--2003b/tla--small-fixes--1.1--patch-40 lord@emf.net--2003b/tla--small-fixes--1.1--patch-41 lord@emf.net--2003b/tla--small-fixes--1.1--patch-42 lord@emf.net--2003b/tla--small-fixes--1.1--patch-43 lord@emf.net--2003b/tla--small-fixes--1.1--patch-44 lord@emf.net--2003b/tla--small-fixes--1.1--patch-45 lord@emf.net--2003b/tla--small-fixes--1.1--patch-46 lord@emf.net--2003b/tla--small-fixes--1.1--patch-47 lord@emf.net--2003b/tla--small-fixes--1.1--patch-48 lord@emf.net--2003b/tla--small-fixes--1.1--patch-49 lord@emf.net--2003b/tla--small-fixes--1.1--patch-50 lord@emf.net--2003b/tla--small-fixes--1.1--patch-51 lord@emf.net--2003b/tla--small-fixes--1.1--patch-52 lord@emf.net--2003b/tla--small-fixes--1.1--patch-53 lord@emf.net--2003b/tla--small-fixes--1.1--patch-54 lord@emf.net--2003b/tla--small-fixes--1.1--patch-55 lord@emf.net--2003b/tla--small-fixes--1.1--patch-56 lord@emf.net--2003b/tla--small-fixes--1.1--patch-57 lord@emf.net--2003b/tla--small-fixes--1.1--patch-58 lord@emf.net--2003b/tla--small-fixes--1.1--patch-59 lord@emf.net--2003b/tla--small-fixes--1.1--patch-60 lord@emf.net--2003b/tla--small-fixes--1.1--patch-61 lord@emf.net--2003b/tla--small-fixes--1.1--patch-62 lord@emf.net--2003b/tla--small-fixes--1.1--patch-63 lord@emf.net--2003b/tla--small-fixes--1.1--patch-64 lord@emf.net--2003b/tla--small-fixes--1.1--patch-65 lord@emf.net--2003b/tla--small-fixes--1.1--patch-66 lord@emf.net--2003b/tla--small-fixes--1.1--patch-67 lord@emf.net--2003b/tla--small-fixes--1.1--patch-68 lord@emf.net--2003b/tla--small-fixes--1.1--patch-69 lord@emf.net--2003b/tla--small-fixes--1.1--patch-70 lord@emf.net--2003b/tla--small-fixes--1.1--patch-71 lord@emf.net--2003b/tla--small-fixes--1.1--patch-72 lord@emf.net--2003b/tla--small-fixes--1.1--patch-73 lord@emf.net--2003b/tla--small-fixes--1.1--patch-74 lord@emf.net--2003b/tla--small-fixes--1.1--patch-75 lord@emf.net--2003b/tla--small-fixes--1.1--patch-76 lord@emf.net--2003b/tla--small-fixes--1.1--patch-77 lord@emf.net--2003b/tla--small-fixes--1.1--patch-78 lord@emf.net--2003b/tla--small-fixes--1.1--patch-79 lord@emf.net--2003b/tla--small-fixes--1.1--patch-80 lord@emf.net--2003b/tla--small-fixes--1.1--patch-81 lord@emf.net--2003b/tla--tagging--1.1--base-0 lord@emf.net--2003b/tla--tagging--1.1--patch-1 lord@emf.net--2003b/tla--tagging--1.1--patch-2 lord@emf.net--2003b/tla--tagging--1.1--patch-3 lord@emf.net--2003b/tla--tagging--1.1--patch-4 lord@emf.net--2003b/tla--tagging--1.1--patch-5 lord@emf.net--2003b/tla--tagging--1.1--patch-6 lord@emf.net--2003b/tla--tagging--1.1--patch-7 lord@emf.net--2003b/tla--tagging--1.1--patch-8 lord@emf.net--2003b/tla--tagging--1.1--patch-9 lord@emf.net--2003b/tla--tagging--1.1--patch-10 lord@emf.net--2003b/tla--tagging--1.1--patch-11 lord@emf.net--2003b/tla--tagging--1.1--patch-12 lord@emf.net--2003b/tla--tagging--1.1--patch-13 lord@emf.net--2003b/tla--tagging--1.1--patch-14 lord@emf.net--2003b/tla--tagging--1.1--patch-15 lord@emf.net--2003b/tla--tagging--1.1--patch-16 lord@emf.net--2003b/tla--tagging--1.1--patch-17 lord@emf.net--2003b/tla--tagging--1.1--patch-18 lord@emf.net--2003b/tla--tagging--1.1--patch-19 lord@emf.net--2003b/tla--tagging--1.1--patch-20 lord@emf.net--2003b/tla--tagging--1.1--patch-21 lord@emf.net--2003b/tla--tagging--1.1--patch-22 lord@emf.net--2003b/tla--tests--1.1--base-0 lord@emf.net--2003b/tla--tests--1.1--patch-1 lord@emf.net--2003b/tla--timestamps--1.1--base-0 lord@emf.net--2003b/tla--timestamps--1.1--patch-1 lord@emf.net--2003b/tla--timestamps--1.1--patch-2 lord@emf.net--2003b/tla--timestamps--1.1--patch-3 lord@emf.net--2003b/tla--timestamps--1.1--patch-4 lord@emf.net--2003b/tla--timestamps--1.1--patch-5 lord@emf.net--2003b/tla--timestamps--1.1--patch-6 lord@emf.net--2003b/tla--timestamps--1.1--patch-7 lord@emf.net--2003b/tla--timestamps--1.1--patch-8 lord@emf.net--2003b/tla--timestamps--1.1--patch-9 lord@emf.net--2004/tla--devo--1.2--base-0 lord@emf.net--2004/tla--devo--1.2--patch-1 lord@emf.net--2004/tla--devo--1.2--patch-2 lord@emf.net--2004/tla--devo--1.2--patch-3 lord@emf.net--2004/tla--devo--1.2--patch-4 lord@emf.net--2004/tla--devo--1.2--patch-5 lord@emf.net--2004/tla--devo--1.2--patch-6 lord@emf.net--2004/tla--devo--1.2--patch-7 lord@emf.net--2004/tla--devo--1.2--patch-8 lord@emf.net--2004/tla--devo--1.2--patch-9 lord@emf.net--2004/tla--devo--1.2--patch-10 lord@emf.net--2004/tla--devo--1.2--patch-11 lord@emf.net--2004/tla--devo--1.2--patch-12 lord@emf.net--2004/tla--devo--1.2--patch-13 lord@emf.net--2004/tla--devo--1.2--patch-14 lord@emf.net--2004/tla--devo--1.2--patch-15 lord@emf.net--2004/tla--devo--1.2--patch-16 lord@emf.net--2004/tla--devo--1.2--patch-17 lord@emf.net--2004/tla--devo--1.2--patch-18 lord@emf.net--2004/tla--devo--1.2--patch-19 lord@emf.net--2004/tla--devo--1.2--patch-20 lord@emf.net--2004/tla--devo--1.2--patch-21 lord@emf.net--2004/tla--devo--1.2--patch-22 lord@emf.net--2004/tla--devo--1.2--patch-23 lord@emf.net--2004/tla--devo--1.2--patch-24 lord@emf.net--2004/tla--devo--1.2--patch-25 lord@emf.net--2004/tla--devo--1.2--patch-26 lord@emf.net--2004/tla--devo--1.2--patch-27 lord@emf.net--2004/tla--devo--1.2--patch-28 lord@emf.net--2004/tla--devo--1.2--patch-29 lord@emf.net--2004/tla--devo--1.2--patch-30 lord@emf.net--2004/tla--devo--1.2--patch-31 lord@emf.net--2004/tla--devo--1.2--patch-32 lord@emf.net--2004/tla--devo--1.2--patch-33 lord@emf.net--2004/tla--devo--1.2--patch-34 lord@emf.net--2004/tla--devo--1.2--patch-35 lord@emf.net--2004/tla--devo--1.2--patch-36 lord@emf.net--2004/tla--devo--1.2--patch-37 lord@emf.net--2004/tla--devo--1.2--patch-38 lord@emf.net--2004/tla--devo--1.2--patch-39 lord@emf.net--2004/tla--devo--1.2--patch-40 lord@emf.net--2004/tla--devo--1.2--patch-41 lord@emf.net--2004/tla--devo--1.2--patch-42 lord@emf.net--2004/tla--devo--1.2--patch-43 lord@emf.net--2004/tla--devo--1.2--patch-44 lord@emf.net--2004/tla--devo--1.2--patch-45 lord@emf.net--2004/tla--devo--1.2--patch-46 lord@emf.net--2004/tla--devo--1.2--patch-47 lord@emf.net--2004/tla--devo--1.2--patch-48 lord@emf.net--2004/tla--devo--1.2--patch-49 lord@emf.net--2004/tla--devo--1.2--patch-50 lord@emf.net--2004/tla--devo--1.2--patch-51 lord@emf.net--2004/tla--devo--1.2--patch-52 lord@emf.net--2004/tla--devo--1.2--patch-53 lord@emf.net--2004/tla--devo--1.2--patch-54 lord@emf.net--2004/tla--devo--1.2--patch-55 lord@emf.net--2004/tla--devo--1.2--patch-56 lord@emf.net--2004/tla--devo--1.2--patch-57 lord@emf.net--2004/tla--devo--1.2--patch-58 lord@emf.net--2004/tla--devo--1.2--patch-59 lord@emf.net--2004/tla--devo--1.2--patch-60 lord@emf.net--2004/tla--devo--1.2--patch-61 lord@emf.net--2004/tla--devo--1.2--patch-62 lord@emf.net--2004/tla--devo--1.2--patch-63 lord@emf.net--2004/tla--devo--1.2--patch-64 lord@emf.net--2004/tla--devo--1.2--patch-65 lord@emf.net--2004/tla--devo--1.2--patch-66 lord@emf.net--2004/tla--devo--1.2--patch-67 lord@emf.net--2004/tla--devo--1.2--patch-68 lord@emf.net--2004/tla--devo--1.2--patch-69 lord@emf.net--2004/tla--devo--1.2--patch-70 lord@emf.net--2004/tla--devo--1.2--patch-71 lord@emf.net--2004/tla--devo--1.2--patch-72 lord@emf.net--2004/tla--devo--1.2--patch-73 lord@emf.net--2004/tla--devo--1.2--patch-74 lord@emf.net--2004/tla--devo--1.2--patch-75 lord@emf.net--2004/tla--devo--1.2--patch-76 lord@emf.net--2004/tla--devo--1.2--patch-77 lord@emf.net--2004/tla--devo--1.2--patch-78 lord@emf.net--2004/tla--devo--1.2--patch-79 lord@emf.net--2004/tla--devo--1.2--patch-80 lord@emf.net--2004/tla--devo--1.2--patch-81 lord@emf.net--2004/tla--devo--1.2--patch-82 lord@emf.net--2004/tla--devo--1.2--patch-83 lord@emf.net--2004/tla--devo--1.2--patch-84 lord@emf.net--2004/tla--devo--1.2--patch-85 lord@emf.net--2004/tla--devo--1.2--patch-86 lord@emf.net--2004/tla--devo--1.2--patch-87 lord@emf.net--2004/tla--devo--1.2--patch-88 lord@emf.net--2004/tla--devo--1.2--patch-89 lord@emf.net--2004/tla--devo--1.2--patch-90 lord@emf.net--2004/tla--devo--1.2--patch-91 lord@emf.net--2004/tla--devo--1.2--patch-92 lord@emf.net--2004/tla--devo--1.2--patch-93 lord@emf.net--2004/tla--devo--1.2--patch-94 lord@emf.net--2004/tla--devo--1.2--patch-95 lord@emf.net--2004/tla--devo--1.2--patch-96 lord@emf.net--2004/tla--devo--1.2--patch-97 lord@emf.net--2004/tla--devo--1.2--patch-98 lord@emf.net--2004/tla--devo--1.2--patch-99 lord@emf.net--2004/tla--devo--1.2--patch-100 lord@emf.net--2004/tla--devo--1.2--patch-101 lord@emf.net--2004/tla--devo--1.2--patch-102 lord@emf.net--2004/tla--devo--1.2--patch-103 lord@emf.net--2004/tla--devo--1.2--patch-104 lord@emf.net--2004/tla--devo--1.2--patch-105 lord@emf.net--2004/tla--devo--1.2--patch-106 lord@emf.net--2004/tla--devo--1.2--patch-107 lord@emf.net--2004/tla--devo--1.2--patch-108 lord@emf.net--2004/tla--devo--1.2--patch-109 lord@emf.net--2004/tla--devo--1.2--patch-110 lord@emf.net--2004/tla--devo--1.2--patch-111 lord@emf.net--2004/tla--devo--1.2--patch-112 lord@emf.net--2004/tla--devo--1.2--patch-113 lord@emf.net--2004/tla--devo--1.2--patch-114 lord@emf.net--2004/tla--devo--1.2--patch-115 lord@emf.net--2004/tla--devo--1.3--base-0 lord@emf.net--2004/tla--devo--1.3--patch-1 lord@emf.net--2004/tla--devo--1.3--patch-2 lord@emf.net--2004/tla--devo--1.3--patch-3 lord@emf.net--2004/tla--devo--1.3--patch-4 lord@emf.net--2004/tla--devo--1.3--patch-5 lord@emf.net--2004/tla--devo--1.3--patch-6 lord@emf.net--2004/tla--devo--1.3--patch-7 lord@emf.net--2004/tla--devo--1.3--patch-8 lord@emf.net--2004/tla--devo--1.3--patch-9 lord@emf.net--2004/tla--devo--1.3--patch-10 lord@emf.net--2004/tla--devo--1.3--patch-11 lord@emf.net--2004/tla--devo--1.3--patch-12 lord@emf.net--2004/tla--devo--1.3--patch-13 lord@emf.net--2004/tla--devo--1.3--patch-14 lord@emf.net--2004/tla--devo--1.3--patch-15 lord@emf.net--2004/tla--devo--1.3--patch-16 lord@emf.net--2004/tla--devo--1.3--patch-17 lord@emf.net--2004/tla--devo--1.3--patch-18 lord@emf.net--2004/tla--devo--1.3--patch-19 lord@emf.net--2004/tla--devo--1.3--patch-20 lord@emf.net--2004/tla--devo--1.3--patch-21 lord@emf.net--2004/tla--devo--1.3--patch-22 lord@emf.net--2004/tla--devo--1.3--patch-23 lord@emf.net--2004/tla--devo--1.3--patch-24 lord@emf.net--2004/tla--devo--1.3--patch-25 lord@emf.net--2004/tla--devo--1.3--patch-26 lord@emf.net--2004/tla--devo--1.3--patch-27 lord@emf.net--2004/tla--devo--1.3--patch-28 lord@emf.net--2004/tla--devo--1.3--patch-29 lord@emf.net--2004/tla--devo--1.3--patch-30 lord@emf.net--2004/tla--devo--1.3--patch-31 lord@emf.net--2004/tla--devo--1.3--patch-32 lord@regexps.com--2001Q4/file-utils--devo--1.0--base-0 lord@regexps.com--2001Q4/file-utils--devo--1.0--patch-1 lord@regexps.com--2002/file-utils--devo--1.0--base-0 lord@regexps.com--2002/file-utils--devo--1.0--patch-1 lord@regexps.com--2002/file-utils--devo--1.0--patch-2 lord@regexps.com--2002/file-utils--devo--1.0--patch-3 lord@regexps.com--2002/file-utils--devo--1.0--patch-4 lord@regexps.com--2002/file-utils--devo--1.0--patch-5 lord@regexps.com--2002/file-utils--devo--1.0--patch-6 lord@regexps.com--2002/file-utils--devo--1.0--patch-7 lord@regexps.com--2002/file-utils--devo--1.0--patch-8 lord@regexps.com--2002/file-utils--devo--1.0--patch-9 lord@regexps.com--2002/file-utils--devo--1.0--patch-10 lord@regexps.com--2002/file-utils--devo--1.0--patch-11 lord@regexps.com--2002/file-utils--devo--1.0--patch-12 lord@regexps.com--2002/file-utils--devo--1.0--patch-13 lord@regexps.com--2002/file-utils--devo--1.0--patch-14 lord@regexps.com--2002/file-utils--devo--1.0--patch-15 lord@regexps.com--2002/file-utils--devo--1.0--patch-16 lord@regexps.com--2002/file-utils--devo--1.0--patch-17 lord@regexps.com--2002/file-utils--lord--1.0--base-0 lord@regexps.com--2002/file-utils--lord--1.0--patch-1 lord@regexps.com--2002/file-utils--lord--1.0--patch-2 lord@regexps.com--2002/file-utils--lord--1.0--patch-3 lord@regexps.com--2002/file-utils--lord--1.0--patch-4 lord@regexps.com--2002/file-utils--lord--1.0--patch-5 lord@regexps.com--2002/file-utils--lord--1.0--patch-6 lord@regexps.com--2002/file-utils--lord--1.0--patch-7 lord@regexps.com--2002/file-utils--lord--1.0--patch-8 lord@regexps.com--2002/file-utils--lord--1.0--patch-9 lord@regexps.com--2002/file-utils--lord--1.0--patch-10 lord@regexps.com--2002/file-utils--lord--1.0--patch-11 lord@regexps.com--2002/file-utils--lord--1.0--patch-12 lord@regexps.com--2002/file-utils--lord--1.0--patch-13 lord@regexps.com--2002/file-utils--lord--1.0--patch-14 lord@regexps.com--2002/file-utils--lord--1.0--patch-15 lord@regexps.com--2002/file-utils--lord--1.0--patch-16 lord@regexps.com--2002/file-utils--lord--1.0--patch-17 lord@regexps.com--2002/file-utils--lord--1.0--patch-18 lord@regexps.com--2002/file-utils--lord--1.0--patch-19 lord@regexps.com--2002/file-utils--lord--1.0--patch-20 lord@regexps.com--2002/file-utils--lord--1.0--patch-21 lord@regexps.com--2002/file-utils--lord--1.0--patch-22 lord@regexps.com--2002/file-utils--lord--1.0--patch-23 lord@regexps.com--public-2001Q4/file-utils--devo--1.0--base-0 markbt@efaref.net--2003/tla--markbt--1.1--base-0 markbt@efaref.net--2003/tla--markbt--1.1--patch-1 miles@gnu.org--gnu-2003/tla--devo--1.1--base-0 miles@gnu.org--gnu-2003/tla--devo--1.1--patch-1 miles@gnu.org--gnu-2003/tla--devo--1.1--patch-2 miles@gnu.org--gnu-2003/tla--devo--1.1--patch-3 miles@gnu.org--gnu-2003/tla--devo--1.1--patch-4 miles@gnu.org--gnu-2003/tla--devo--1.1--patch-5 miles@gnu.org--gnu-2003/tla--devo--1.1--patch-6 miles@gnu.org--gnu-2003/tla--devo--1.1--patch-7 miles@gnu.org--gnu-2003/tla--devo--1.1--patch-8 miles@gnu.org--gnu-2003/tla--devo--1.1--patch-9 miles@gnu.org--gnu-2003/tla--devo--1.1--patch-10 miles@gnu.org--gnu-2003/tla--devo--1.1--patch-11 miles@gnu.org--gnu-2003/tla--devo--1.1--patch-12 miles@gnu.org--gnu-2003/tla--devo--1.1--patch-13 miles@gnu.org--gnu-2003/tla--devo--1.1--patch-14 miles@gnu.org--gnu-2003/tla--devo--1.1--patch-15 miles@gnu.org--gnu-2003/tla--devo--1.1--patch-16 miles@gnu.org--gnu-2003/tla--devo--1.1--patch-17 miles@gnu.org--gnu-2003/tla--devo--1.1--patch-18 miles@gnu.org--gnu-2003/tla--devo--1.1--patch-19 miles@gnu.org--gnu-2003/tla--devo--1.1--patch-20 miles@gnu.org--gnu-2003/tla--devo--1.1--patch-21 miles@gnu.org--gnu-2003/tla--devo--1.1--patch-22 miles@gnu.org--gnu-2003/tla--devo--1.1--patch-23 miles@gnu.org--gnu-2003/tla--devo--1.1--patch-24 miles@gnu.org--gnu-2003/tla--devo--1.1--patch-25 miles@gnu.org--gnu-2003/tla--devo--1.1--patch-26 miles@gnu.org--gnu-2003/tla--devo--1.1--patch-27 miles@gnu.org--gnu-2003/tla--devo--1.1--patch-28 miles@gnu.org--gnu-2003/tla--devo--1.1--patch-29 miles@gnu.org--gnu-2003/tla--devo--1.1--patch-30 miles@gnu.org--gnu-2003/tla--devo--1.1--patch-31 miles@gnu.org--gnu-2003/tla--devo--1.1--patch-32 miles@gnu.org--gnu-2003/tla--devo--1.1--patch-33 miles@gnu.org--gnu-2003/tla--devo--1.1--patch-34 miles@gnu.org--gnu-2003/tla--devo--1.1--patch-35 miles@gnu.org--gnu-2003/tla--devo--1.1--patch-36 miles@gnu.org--gnu-2003/tla--devo--1.1--patch-37 miles@gnu.org--gnu-2003/tla--devo--1.1--patch-38 miles@gnu.org--gnu-2003/tla--devo--1.1--patch-39 miles@gnu.org--gnu-2003/tla--devo--1.1--patch-40 miles@gnu.org--gnu-2003/tla--devo--1.1--patch-41 miles@gnu.org--gnu-2003/tla--devo--1.1--patch-42 miles@gnu.org--gnu-2003/tla--devo--1.1--patch-43 miles@gnu.org--gnu-2003/tla--devo--1.1--patch-44 miles@gnu.org--gnu-2003/tla--devo--1.1--patch-45 miles@gnu.org--gnu-2003/tla--devo--1.1--patch-46 miles@gnu.org--gnu-2003/tla--devo--1.1--patch-47 miles@gnu.org--gnu-2003/tla--devo--1.1--patch-48 miles@gnu.org--gnu-2003/tla--devo--1.1--patch-49 miles@gnu.org--gnu-2003/tla--devo--1.1--patch-50 miles@gnu.org--gnu-2003/tla--devo--1.1--patch-51 miles@gnu.org--gnu-2003/tla--devo--1.1--patch-52 miles@gnu.org--gnu-2003/tla--devo--1.1--patch-53 miles@gnu.org--gnu-2003/tla--devo--1.1--patch-54 miles@gnu.org--gnu-2003/tla--devo--1.1--patch-55 miles@gnu.org--gnu-2003/tla--devo--1.1--patch-56 miles@gnu.org--gnu-2003/tla--devo--1.1--patch-57 miles@gnu.org--gnu-2003/tla--devo--1.1--patch-58 miles@gnu.org--gnu-2003/tla--devo--1.1--patch-59 miles@gnu.org--gnu-2003/tla--devo--1.1--patch-60 miles@gnu.org--gnu-2003/tla--devo--1.1--patch-61 miles@gnu.org--gnu-2003/tla--devo--1.1--patch-62 miles@gnu.org--gnu-2003/tla--devo--1.1--patch-63 miles@gnu.org--gnu-2003/tla--devo--1.1--patch-64 miles@gnu.org--gnu-2004/tla--devo--1.3--patch-4 miles@gnu.org--gnu-2004/tla--devo--1.3--patch-5 miles@gnu.org--home-2003/tla--home--1.1--patch-1 miles@gnu.org--home-2003/tla--home--1.1--patch-2 miles@gnu.org--home-2003/tla--home--1.1--patch-3 miles@gnu.org--home-2003/tla--home--1.1--patch-4 mirian@cosmic.com--2003/tla--cosmic--1.1--base-0 mirian@cosmic.com--2003/tla--cosmic--1.1--patch-1 mt@wmipf.in-berlin.de--devel-2003/tla--wmipf--1.1--base-0 mt@wmipf.in-berlin.de--devel-2003/tla--wmipf--1.1--patch-1 mt@wmipf.in-berlin.de--devel-2003/tla--wmipf--1.1--patch-2 mt@wmipf.in-berlin.de--devel-2003/tla--wmipf--1.1--patch-3 mt@wmipf.in-berlin.de--devel-2003/tla--wmipf--1.1--patch-4 mt@wmipf.in-berlin.de--devel-2003/tla--wmipf--1.1--patch-5 mt@wmipf.in-berlin.de--devel-2003/tla--wmipf--1.1--patch-6 mt@wmipf.in-berlin.de--devel-2003/tla--wmipf--1.1--patch-7 mt@wmipf.in-berlin.de--devel-2003/tla--wmipf--1.1--patch-8 mt@wmipf.in-berlin.de--devel-2003/tla--wmipf--1.1--patch-9 mt@wmipf.in-berlin.de--devel-2003/tla--wmipf--1.1--patch-10 mt@wmipf.in-berlin.de--devel-2003/tla--wmipf--1.1--patch-11 mt@wmipf.in-berlin.de--devel-2003/tla--wmipf--1.1--patch-13 mt@wmipf.in-berlin.de--devel-2003/tla--wmipf--1.1--patch-14 mt@wmipf.in-berlin.de--devel-2003/tla--wmipf--1.1--patch-15 mt@wmipf.in-berlin.de--devel-2003/tla--wmipf--1.1--patch-16 mt@wmipf.in-berlin.de--devel-2003/tla--wmipf--1.1--patch-17 mt@wmipf.in-berlin.de--devel-2003/tla--wmipf--1.1--patch-18 mt@wmipf.in-berlin.de--devel-2003/tla--wmipf--1.1--patch-19 mt@wmipf.in-berlin.de--devel-2003/tla--wmipf--1.1--patch-20 mt@wmipf.in-berlin.de--devel-2003/tla--wmipf--1.1--patch-21 mt@wmipf.in-berlin.de--devel-2003/tla--wmipf--1.1--patch-23 mt@wmipf.in-berlin.de--devel-2003/tla--wmipf--1.1--patch-25 mt@wmipf.in-berlin.de--devel-2003/tla--wmipf--1.1--patch-26 mt@wmipf.in-berlin.de--devel-2003/tla--wmipf--1.1--patch-27 rbtcollins@hotmail.com--barch/tla--devo--1.1--base-0 rbtcollins@hotmail.com--barch/tla--devo--1.1--patch-2 rbtcollins@hotmail.com--barch/tla--devo--1.1--patch-3 rbtcollins@hotmail.com--barch/tla--devo--1.1--patch-4 rbtcollins@hotmail.com--barch/tla--devo--1.1--patch-5 rbtcollins@hotmail.com--barch/tla--devo--1.1--patch-6 rbtcollins@hotmail.com--barch/tla--devo--1.1--patch-7 rbtcollins@hotmail.com--barch/tla--devo--1.1--patch-8 rbtcollins@hotmail.com--barch/tla--devo--1.1--patch-9 rbtcollins@hotmail.com--barch/tla--devo--1.1--patch-10 rbtcollins@hotmail.com--barch/tla--devo--1.1--patch-11 rbtcollins@hotmail.com--barch/tla--devo--1.1--patch-12 rbtcollins@hotmail.com--barch/tla--devo--1.1--patch-13 rbtcollins@hotmail.com--barch/tla--devo--1.1--patch-14 rbtcollins@hotmail.com--barch/tla--devo--1.1--patch-15 rbtcollins@hotmail.com--barch/tla--devo--1.1--patch-16 rbtcollins@hotmail.com--barch/tla--devo--1.1--patch-17 rbtcollins@hotmail.com--barch/tla--devo--1.1--patch-18 rbtcollins@hotmail.com--barch/tla--devo--1.1--patch-19 rbtcollins@hotmail.com--barch/tla--devo--1.1--patch-20 rbtcollins@hotmail.com--barch/tla--devo--1.1--patch-21 rbtcollins@hotmail.com--barch/tla--devo--1.1--patch-22 rbtcollins@hotmail.com--barch/tla--devo--1.1--patch-23 rbtcollins@hotmail.com--barch/tla--devo--1.1--patch-24 rbtcollins@hotmail.com--barch/tla--devo--1.1--patch-25 rbtcollins@hotmail.com--barch/tla--devo--1.1--patch-26 rbtcollins@hotmail.com--barch/tla--devo--1.1--patch-27 rbtcollins@hotmail.com--barch/tla--devo--1.1--patch-28 rbtcollins@hotmail.com--barch/tla--devo--1.1--patch-29 rbtcollins@hotmail.com--barch/tla--devo--1.1--patch-30 rbtcollins@hotmail.com--barch/tla--devo--1.1--patch-31 rbtcollins@hotmail.com--barch/tla--gpg--1.1--base-0 rbtcollins@hotmail.com--barch/tla--gpg--1.1--patch-1 rbtcollins@hotmail.com--barch/tla--gpg--1.1--patch-2 rbtcollins@hotmail.com--barch/tla--gpg--1.1--patch-3 rbtcollins@hotmail.com--barch/tla--gpg--1.1--patch-4 rbtcollins@hotmail.com--barch/tla--gpg--1.1--patch-5 rbtcollins@hotmail.com--barch/tla--gpg--1.1--patch-6 rbtcollins@hotmail.com--barch/tla--gpg--1.1--patch-7 rbtcollins@hotmail.com--barch/tla--gpg--1.1--patch-8 rbtcollins@hotmail.com--barch/tla--gpg--1.1--patch-9 rbtcollins@hotmail.com--barch/tla--gpg--1.1--patch-10 rbtcollins@hotmail.com--barch/tla--gpg--1.1--patch-11 rbtcollins@hotmail.com--barch/tla--gpg--1.1--patch-12 rbtcollins@hotmail.com--barch/tla--gpg--1.1--patch-13 rbtcollins@hotmail.com--barch/tla--gpg--1.1--patch-14 rbtcollins@hotmail.com--barch/tla--gpg--1.1--patch-15 rbtcollins@hotmail.com--barch/tla--gpg--1.1--patch-16 rbtcollins@hotmail.com--barch/tla--gpg--1.1--patch-17 rbtcollins@hotmail.com--barch/tla--gpg--1.1--patch-18 rbtcollins@hotmail.com--barch/tla--gpg--1.1--patch-19 rbtcollins@hotmail.com--barch/tla--gpg--1.1--patch-20 rbtcollins@hotmail.com--barch/tla--gpg--1.1--patch-21 rbtcollins@hotmail.com--barch/tla--gpg--1.1--patch-22 rbtcollins@hotmail.com--barch/tla--gpg--1.1--patch-23 rbtcollins@hotmail.com--barch/tla--gpg--1.1--patch-24 rbtcollins@hotmail.com--barch/tla--gpg--1.1--patch-25 rbtcollins@hotmail.com--barch/tla--gpg--1.1--patch-26 rbtcollins@hotmail.com--barch/tla--gpg--1.1--patch-27 rbtcollins@hotmail.com--barch/tla--gpg--1.1--patch-28 rbtcollins@hotmail.com--barch/tla--inode-sigs--1.2--base-0 rbtcollins@hotmail.com--barch/tla--inode-sigs--1.2--patch-1 rbtcollins@hotmail.com--barch/tla--inode-sigs--1.2--patch-2 rbtcollins@hotmail.com--barch/tla--inode-sigs--1.2--patch-3 rbtcollins@hotmail.com--barch/tla--inode-sigs--1.2--patch-9 rbtcollins@hotmail.com--barch/tla--integration--1.1--base-0 rbtcollins@hotmail.com--barch/tla--integration--1.1--patch-1 rbtcollins@hotmail.com--barch/tla--integration--1.1--patch-2 rbtcollins@hotmail.com--barch/tla--integration--1.1--patch-3 rbtcollins@hotmail.com--barch/tla--integration--1.1--patch-4 rbtcollins@hotmail.com--barch/tla--integration--1.1--patch-5 rbtcollins@hotmail.com--barch/tla--integration--1.1--patch-6 rbtcollins@hotmail.com--barch/tla--integration--1.1--patch-7 rbtcollins@hotmail.com--barch/tla--integration--1.1--patch-8 rbtcollins@hotmail.com--barch/tla--integration--1.1--patch-9 rbtcollins@hotmail.com--barch/tla--integration--1.1--patch-10 rbtcollins@hotmail.com--barch/tla--integration--1.1--patch-11 rbtcollins@hotmail.com--barch/tla--integration--1.1--patch-12 rbtcollins@hotmail.com--barch/tla--integration--1.1--patch-13 rbtcollins@hotmail.com--barch/tla--integration--1.1--patch-14 rbtcollins@hotmail.com--barch/tla--integration--1.1--patch-15 rbtcollins@hotmail.com--barch/tla--integration--1.1--patch-16 rbtcollins@hotmail.com--barch/tla--integration--1.1--patch-17 rbtcollins@hotmail.com--barch/tla--integration--1.1--patch-18 rbtcollins@hotmail.com--barch/tla--integration--1.1--patch-19 rbtcollins@hotmail.com--barch/tla--integration--1.1--patch-20 rbtcollins@hotmail.com--barch/tla--integration--1.1--patch-21 rbtcollins@hotmail.com--barch/tla--integration--1.1--patch-22 rbtcollins@hotmail.com--barch/tla--integration--1.1--patch-23 rbtcollins@hotmail.com--barch/tla--integration--1.1--patch-24 rbtcollins@hotmail.com--barch/tla--integration--1.1--patch-25 rbtcollins@hotmail.com--barch/tla--integration--1.1--patch-26 rbtcollins@hotmail.com--barch/tla--integration--1.1--patch-27 rbtcollins@hotmail.com--barch/tla--integration--1.1--patch-28 rbtcollins@hotmail.com--barch/tla--integration--1.1--patch-30 rbtcollins@hotmail.com--barch/tla--integration--1.1--patch-31 rbtcollins@hotmail.com--barch/tla--integration--1.1--patch-32 rbtcollins@hotmail.com--barch/tla--integration--1.1--patch-33 rbtcollins@hotmail.com--barch/tla--integration--1.1--patch-34 rbtcollins@hotmail.com--barch/tla--integration--1.1--patch-35 rbtcollins@hotmail.com--barch/tla--integration--1.1--patch-36 rbtcollins@hotmail.com--barch/tla--integration--1.1--patch-37 rbtcollins@hotmail.com--barch/tla--integration--1.1--patch-38 rbtcollins@hotmail.com--barch/tla--integration--1.1--patch-39 rbtcollins@hotmail.com--barch/tla--integration--1.1--patch-40 rbtcollins@hotmail.com--barch/tla--integration--1.1--patch-41 rbtcollins@hotmail.com--barch/tla--integration--1.1--patch-42 rbtcollins@hotmail.com--barch/tla--integration--1.1--patch-43 rbtcollins@hotmail.com--barch/tla--integration--1.1--patch-44 rbtcollins@hotmail.com--barch/tla--integration--1.1--patch-45 rbtcollins@hotmail.com--barch/tla--integration--1.1--patch-46 rbtcollins@hotmail.com--barch/tla--integration--1.1--patch-47 rbtcollins@hotmail.com--barch/tla--integration--1.1--patch-48 rbtcollins@hotmail.com--barch/tla--integration--1.1--patch-49 rbtcollins@hotmail.com--barch/tla--integration--1.1--patch-50 rbtcollins@hotmail.com--barch/tla--integration--1.1--patch-51 rbtcollins@hotmail.com--barch/tla--integration--1.1--patch-52 rbtcollins@hotmail.com--barch/tla--integration--1.1--patch-53 rbtcollins@hotmail.com--barch/tla--integration--1.1--patch-54 rbtcollins@hotmail.com--barch/tla--integration--1.1--patch-55 rbtcollins@hotmail.com--barch/tla--integration--1.1--patch-56 rbtcollins@hotmail.com--barch/tla--integration--1.1--patch-57 rbtcollins@hotmail.com--barch/tla--integration--1.1--patch-58 rbtcollins@hotmail.com--barch/tla--integration--1.1--patch-59 rbtcollins@hotmail.com--barch/tla--integration--1.1--patch-60 rbtcollins@hotmail.com--barch/tla--integration--1.1--patch-61 rbtcollins@hotmail.com--barch/tla--integration--1.1--patch-63 rbtcollins@hotmail.com--barch/tla--integration--1.1--patch-64 rbtcollins@hotmail.com--barch/tla--integration--1.1--patch-65 rbtcollins@hotmail.com--barch/tla--integration--1.1--patch-66 rbtcollins@hotmail.com--barch/tla--integration--1.1--patch-67 rbtcollins@hotmail.com--barch/tla--integration--1.1--patch-68 rbtcollins@hotmail.com--barch/tla--integration--1.1--patch-69 rbtcollins@hotmail.com--barch/tla--integration--1.1--patch-70 rbtcollins@hotmail.com--barch/tla--integration--1.1--patch-71 rbtcollins@hotmail.com--barch/tla--integration--1.1--patch-72 rbtcollins@hotmail.com--barch/tla--integration--1.1--patch-74 rbtcollins@hotmail.com--barch/tla--integration--1.1--patch-76 rbtcollins@hotmail.com--barch/tla--integration--1.1--patch-77 rbtcollins@hotmail.com--barch/tla--integration--1.1--patch-81 rbtcollins@hotmail.com--barch/tla--integration--1.1--patch-83 rbtcollins@hotmail.com--barch/tla--integration--1.2--base-0 rbtcollins@hotmail.com--barch/tla--integration--1.2--patch-1 rbtcollins@hotmail.com--barch/tla--integration--1.2--patch-2 rbtcollins@hotmail.com--barch/tla--integration--1.2--patch-4 rbtcollins@hotmail.com--barch/tla--integration--1.2--patch-5 rbtcollins@hotmail.com--barch/tla--integration--1.2--patch-7 rbtcollins@hotmail.com--barch/tla--integration--1.2--patch-8 rbtcollins@hotmail.com--barch/tla--integration--1.2--patch-9 rbtcollins@hotmail.com--barch/tla--integration--1.2--patch-10 rbtcollins@hotmail.com--barch/tla--integration--1.2--patch-11 rbtcollins@hotmail.com--barch/tla--integration--1.2--patch-12 rbtcollins@hotmail.com--barch/tla--integration--1.2--patch-13 rbtcollins@hotmail.com--barch/tla--integration--1.2--patch-14 rbtcollins@hotmail.com--barch/tla--integration--1.2--patch-15 rbtcollins@hotmail.com--barch/tla--integration--1.3--patch-2 roberto@eu.org--2003b/tla-current--roberto--1.1--patch-5 robin.farine@terminus.org--arch-2003/tla--rnf--1.1--base-0 robin.farine@terminus.org--arch-2003/tla--rnf--1.1--patch-1 robin.farine@terminus.org--arch-2003/tla--rnf--1.1--patch-2 robin.farine@terminus.org--arch-2003/tla--rnf--1.1--patch-3 robin.farine@terminus.org--arch-2003/tla--rnf--1.1--patch-4 robin.farine@terminus.org--arch-2003/tla--rnf--1.1--patch-5 robin.farine@terminus.org--arch-2003/tla--rnf--1.1--patch-6 robin.farine@terminus.org--arch-2003/tla--rnf--1.1--patch-7 robin.farine@terminus.org--arch-2003/tla--rnf--1.1--patch-8 robin.farine@terminus.org--arch-2003/tla--rnf--1.1--patch-9 robin.farine@terminus.org--arch-2003/tla--rnf--1.1--patch-10 robin.farine@terminus.org--arch-2003/tla--rnf--1.1--patch-11 robin.farine@terminus.org--arch-2003/tla--rnf--1.1--patch-12 rwa@alumni.princeton.edu--home-2003b/tla--rwa--1.1--base-0 rwa@alumni.princeton.edu--home-2003b/tla--rwa--1.1--patch-1 rweir@ertius.org--2003-arch/tla--devo--1.1--base-0 rweir@ertius.org--2003-arch/tla--devo--1.1--patch-1 rweir@ertius.org--2003-arch/tla--devo--1.1--patch-2 rweir@ertius.org--2003-arch/tla--devo--1.1--patch-3 rweir@ertius.org--2003-arch/tla--devo--1.1--patch-4 rweir@ertius.org--2003-arch/tla--devo--1.1--patch-5 rweir@ertius.org--2003-arch/tla--devo--1.1--patch-6 rweir@ertius.org--2003-arch/tla--devo--1.1--patch-13 rweir@ertius.org--2003-arch/tla--devo--1.1--patch-14 rweir@ertius.org--2003-arch/tla--devo--1.1--patch-15 rweir@ertius.org--2003-arch/tla--devo--1.1--patch-16 rweir@ertius.org--2003-arch/tla--devo--1.1--patch-19 sam@rfc1149.net--public/tla--sam--1.1--base-0 sam@rfc1149.net--public/tla--sam--1.1--patch-1 sam@rfc1149.net--public/tla--sam--1.1--patch-2 sam@rfc1149.net--public/tla--sam--1.1--patch-3 sam@rfc1149.net--public/tla--sam--1.1--patch-4 sam@rfc1149.net--public/tla--sam--1.1--patch-5 sam@rfc1149.net--public/tla--sam--1.1--patch-6 sam@rfc1149.net--public/tla--sam--1.1--patch-7 sam@rfc1149.net--public/tla--sam--1.1--patch-8 sam@rfc1149.net--public/tla--sam--1.1--patch-9 sam@rfc1149.net--public/tla--sam--1.1--patch-10 sam@rfc1149.net--public/tla--sam--1.1--patch-11 sam@rfc1149.net--public/tla--sam--1.1--patch-13 sam@rfc1149.net--public/tla--sam--1.2--patch-4 sam@rfc1149.net--public/tla--sam--1.2--patch-5 sam@rfc1149.net--public/tla--sam--1.2--patch-7 sam@rfc1149.net--public/tla--sam--1.2--patch-8 sam@rfc1149.net--public/tla--sam--1.2--patch-12 software@srparish.net--2003tla/tla--devo--1.1--base-0 software@srparish.net--2003tla/tla--devo--1.1--patch-1 software@srparish.net--2003tla/tla--devo--1.1--patch-2 software@srparish.net--2003tla/tla--devo--1.1--patch-3 software@srparish.net--2003tla/tla--devo--1.1--patch-4 software@srparish.net--2003tla/tla--devo--1.1--patch-5 software@srparish.net--2003tla/tla--devo--1.1--patch-6 software@srparish.net--2003tla/tla--devo--1.1--patch-7 software@srparish.net--2003tla/tla--devo--1.1--patch-8 software@srparish.net--2003tla/tla--devo--1.1--patch-9 software@srparish.net--2003tla/tla--devo--1.1--patch-10 software@srparish.net--2003tla/tla--devo--1.1--patch-11 software@srparish.net--2003tla/tla--devo--1.1--patch-12 software@srparish.net--2003tla/tla--devo--1.1--patch-13 software@srparish.net--2003tla/tla--devo--1.1--patch-14 software@srparish.net--2004/tla--devo--1.3--base-0 software@srparish.net--2004/tla--devo--1.3--patch-1 software@srparish.net--2004/tla--devo--1.3--patch-2 software@srparish.net/file-utils--devo--1.0--base-0 software@srparish.net/file-utils--devo--1.0--patch-1 software@srparish.net/file-utils--devo--1.0--patch-2 software@srparish.net/file-utils--devo--1.0--patch-3 software@srparish.net/file-utils--devo--1.0--patch-4 software@srparish.net/file-utils--devo--1.0--patch-5 software@srparish.net/file-utils--devo--1.0--patch-6 software@srparish.net/file-utils--devo--1.0--patch-7 software@srparish.net/file-utils--devo--1.0--patch-8 software@srparish.net/file-utils--devo--1.0--patch-9 software@srparish.net/file-utils--devo--1.0--patch-10 software@srparish.net/file-utils--devo--1.0--patch-11 software@srparish.net/file-utils--devo--1.0--patch-12 stefie10@alum.mit.edu--2004/tla--devo--1.2--base-0 stefie10@alum.mit.edu--2004/tla--devo--1.2--patch-1 stefie10@alum.mit.edu--2004/tla--devo--1.2--patch-2 stig@brautaset.org--2003/tla--stig--1.1--base-0 stig@brautaset.org--2003/tla--stig--1.1--patch-1 stig@brautaset.org--2003/tla--stig--1.1--patch-2 stig@brautaset.org--2003/tla--stig--1.1--patch-3 stig@brautaset.org--2003/tla--stig--1.1--patch-4 stig@brautaset.org--arwen-03/file-utils--stig--1.0--base-0 stig@brautaset.org--arwen-03/file-utils--stig--1.0--patch-1 stig@brautaset.org--arwen-03/file-utils--stig--1.0--patch-2 stig@brautaset.org--arwen-03/file-utils--stig--1.0--patch-3 stig@brautaset.org--arwen-03/file-utils--stig--1.0--patch-4 stig@brautaset.org--arwen-03/file-utils--stig--1.0--patch-5 stig@brautaset.org--arwen-03/file-utils--stig--1.0--patch-6 stig@brautaset.org--arwen-03/file-utils--stig--1.0--patch-7 stig@brautaset.org--arwen-03/file-utils--stig--1.0--patch-9 stig@brautaset.org--arwen-03/file-utils--stig--1.0--patch-10 stig@brautaset.org--arwen-03/file-utils--stig--1.0--patch-12 stig@brautaset.org--arwen-03/file-utils--stig--1.0--patch-16 stig@brautaset.org--arwen-03/file-utils--stig--1.0--patch-17 stig@brautaset.org--arwen-03/file-utils--stig--1.0--patch-18 stig@brautaset.org--arwen-03/file-utils--stig--1.0--patch-19 stig@brautaset.org--arwen-03/file-utils--stig--1.0--patch-20 stig@brautaset.org--arwen-03/file-utils--stig--1.0--patch-21 stig@brautaset.org--arwen-03/file-utils--stig--1.0--patch-22 stig@brautaset.org--arwen-03/file-utils--stig--1.0--patch-23 stig@brautaset.org--arwen-03/file-utils--stig--1.0--patch-24 stig@brautaset.org--arwen-03/file-utils--stig--1.0--patch-25 stig@brautaset.org--arwen-03/file-utils--stig--1.0--patch-26 stig@brautaset.org--arwen-03/file-utils--stig--1.0--patch-27 stig@brautaset.org--arwen-03/file-utils--stig--1.0--patch-28 stig@brautaset.org--arwen-03/file-utils--stig--1.0--patch-29 stig@brautaset.org--arwen-03/file-utils--stig--1.0--patch-30 stig@brautaset.org--arwen-03/file-utils--stig--1.0--patch-31 stig@brautaset.org--arwen-03/file-utils--stig--1.0--patch-32 stig@brautaset.org--arwen-03/file-utils--stig--1.0--patch-34 stig@brautaset.org--arwen-03/file-utils--stig--1.0--patch-35 stig@brautaset.org--arwen-03/file-utils--stig--1.0--patch-36 stig@brautaset.org--arwen-03/file-utils--stig--1.0--patch-37 stig@brautaset.org--arwen-03/file-utils--stig--1.0--patch-38 stig@brautaset.org--arwen-03/file-utils--stig--1.0--patch-39 stig@brautaset.org--arwen-03/file-utils--stig--1.0--patch-40 stig@brautaset.org--arwen-03/file-utils--stig--1.0--patch-41 stig@brautaset.org--arwen-03/file-utils--stig--1.0--patch-42 stig@brautaset.org--arwen-03/file-utils--stig--1.0--patch-43 stig@brautaset.org--arwen-03/file-utils--stig--1.0--patch-44 stig@brautaset.org--arwen-03/file-utils--stig--1.0--patch-45 stig@brautaset.org--arwen-03/file-utils--stig--1.0--patch-46 stig@brautaset.org--arwen-03/file-utils--stig--1.0--patch-47 stig@brautaset.org--arwen-03/file-utils--stig--1.0--patch-48 stig@brautaset.org--arwen-03/file-utils--stig--1.0--patch-49 stig@brautaset.org--arwen-03/file-utils--stig--1.0--patch-50 stig@brautaset.org--arwen-03/file-utils--stig--1.0--patch-51 stig@brautaset.org--arwen-03/file-utils--stig--1.0--patch-52 stig@brautaset.org--arwen-03/file-utils--stig--1.0--patch-53 stig@brautaset.org--arwen-03/file-utils--stig--1.0--patch-54 stig@brautaset.org--arwen-03/file-utils--stig--1.0--patch-55 stig@brautaset.org--arwen-03/file-utils--stig--1.0--patch-56 stig@brautaset.org--arwen-03/file-utils--stig--1.0--patch-57 stig@brautaset.org--arwen-03/file-utils--stig--1.0--patch-58 stig@brautaset.org--arwen-03/file-utils--stig--1.0--patch-59 stig@brautaset.org--arwen-03/file-utils--stig--1.0--patch-60 stig@brautaset.org--arwen-03/file-utils--stig--1.0--patch-61 stig@brautaset.org--arwen-03/file-utils--stig--1.0--patch-62 stig@brautaset.org--arwen-03/file-utils--stig--1.0--patch-63 stig@brautaset.org--arwen-03/file-utils--stig--1.0--patch-64 stig@brautaset.org--arwen-03/file-utils--stig--1.0--patch-65 stig@brautaset.org--arwen-03/file-utils--stig--1.0--patch-66 stig@brautaset.org--arwen-03/file-utils--stig--1.0--patch-67 stig@brautaset.org--arwen-03/file-utils--stig--1.0--patch-68 stig@brautaset.org--arwen-03/file-utils--stig--1.0--patch-69 stig@brautaset.org--arwen-03/file-utils--stig--1.0--patch-70 stig@brautaset.org--arwen-03/file-utils--stig--1.0--patch-71 stig@brautaset.org--arwen-03/file-utils--stig--1.0--patch-72 stig@brautaset.org--arwen-03/file-utils--stig--1.0--patch-73 stig@brautaset.org--arwen-03/file-utils--stig--1.0--patch-74 stig@brautaset.org--arwen-03/file-utils--stig--1.0--patch-75 stig@brautaset.org--arwen-03/file-utils--stig--1.0--patch-76 stig@brautaset.org--arwen-03/file-utils--stig--1.0--patch-77 stig@brautaset.org--arwen-03/file-utils--stig--1.0--patch-78 stig@brautaset.org--arwen-03/file-utils--stig--1.0--patch-79 stig@brautaset.org--arwen-03/file-utils--stig--1.0--patch-80 stig@brautaset.org--arwen-03/file-utils--stig--1.0--patch-81 stig@brautaset.org--arwen-03/file-utils--stig--1.0--patch-82 stig@brautaset.org--arwen-03/file-utils--stig--1.0--patch-83 stig@brautaset.org--arwen-03/file-utils--stig--1.0--patch-84 stig@brautaset.org--arwen-03/file-utils--stig--1.0--patch-85 stig@brautaset.org--arwen-03/file-utils--stig--1.0--patch-86 stig@brautaset.org--arwen-03/file-utils--stig--1.0--patch-87 stig@brautaset.org--arwen-03/file-utils--stig--1.0--patch-88 tez@kamihira.com--2004s/tla--OP2-eliminate--0.1--base-0 tez@kamihira.com--2004s/tla--OP2-eliminate--0.1--patch-1 tez@kamihira.com--2004s/tla--OP2-eliminate--0.1--patch-2 tez@kamihira.com--2004s/tla--OP2-eliminate--0.1--patch-3 tez@kamihira.com--2004s/tla--OP2-eliminate--0.1--patch-4 velco@fadata.bg--archive/tla--devo--1.1--patch-2 walters@verbum.org--2003/tla--lifeless-integration--1.1--base-0 walters@verbum.org--2003/tla--lifeless-integration--1.1--patch-1 walters@verbum.org--2003/tla--lifeless-integration--1.1--patch-3 walters@verbum.org--2003/tla--lifeless-integration--1.1--patch-6 walters@verbum.org--2003/tla--lifeless-integration--1.1--patch-7 walters@verbum.org--2003/tla--mainline--1.1--base-0 walters@verbum.org--2003/tla--mainline--1.1--patch-1 walters@verbum.org--2003/tla--mainline--1.1--patch-2 walters@verbum.org--2003/tla--mainline--1.1--patch-3 walters@verbum.org--2003/tla--mainline--1.1--patch-4 walters@verbum.org--2003/tla--mainline--1.1--patch-5 walters@verbum.org--2003/tla--mainline--1.1--patch-6 walters@verbum.org--2003/tla--mainline--1.1--patch-7 walters@verbum.org--2003/tla--mainline--1.1--patch-8 walters@verbum.org--2003/tla--mainline--1.1--patch-9 walters@verbum.org--2003/tla--mainline--1.1--patch-10 walters@verbum.org--2003/tla--mainline--1.1--patch-11 walters@verbum.org--2003/tla--mainline--1.1--patch-12 walters@verbum.org--2003/tla--mainline--1.1--patch-13 walters@verbum.org--2003/tla--mainline--1.1--patch-14 walters@verbum.org--2003/tla--mainline--1.1--patch-15 walters@verbum.org--2003/tla--mainline--1.1--patch-16 walters@verbum.org--2003/tla--mainline--1.1--patch-17 walters@verbum.org--2003/tla--mainline--1.1--patch-18 walters@verbum.org--2003/tla--mainline--1.1--patch-19 walters@verbum.org--2003/tla--mainline--1.1--patch-20 walters@verbum.org--2003/tla--mainline--1.1--patch-21 walters@verbum.org--2003/tla--mainline--1.1--patch-22 walters@verbum.org--2003/tla--mainline--1.1--patch-23 walters@verbum.org--2003/tla--mainline--1.1--patch-24 walters@verbum.org--2003/tla--mainline--1.1--patch-25 walters@verbum.org--2003/tla--mainline--1.1--patch-26 walters@verbum.org--2003/tla--mainline--1.1--patch-27 walters@verbum.org--2003/tla--mainline--1.1--patch-28 walters@verbum.org--2003/tla--mainline--1.1--patch-29 walters@verbum.org--2003/tla--mainline--1.1--patch-30 walters@verbum.org--2003/tla--mainline--1.1--patch-31 walters@verbum.org--2003/tla--mainline--1.1--patch-32 walters@verbum.org--2003/tla--mainline--1.1--patch-33 walters@verbum.org--2003/tla--mainline--1.1--patch-34 walters@verbum.org--2003/tla--mainline--1.1--patch-35 walters@verbum.org--2003/tla--mainline--1.1--patch-36 walters@verbum.org--2003/tla--mainline--1.1--patch-37 walters@verbum.org--2003/tla--mainline--1.1--patch-38 walters@verbum.org--2003/tla--mainline--1.1--patch-39 walters@verbum.org--2003/tla--mainline--1.1--patch-46 walters@verbum.org--2003/tla--mainline--1.1--patch-48 walters@verbum.org--2003/tla--mainline--1.1--patch-49 walters@verbum.org--2003/tla--mainline--1.1--patch-50 walters@verbum.org--2003/tla--mainline--1.1--patch-54 walters@verbum.org--2003/tla--mainline--1.1--patch-56 walters@verbum.org--2003/tla--mainline--1.1--patch-57 walters@verbum.org--2003/tla--mainline--1.2--patch-11 walters@verbum.org--2003/tla--mainline--1.3--patch-2 walters@verbum.org--2003/tla--mainline--1.3--patch-3 walters@verbum.org--2003/tla--mainline--1.3--patch-4 walters@verbum.org--2003/tla--mainline--1.3--patch-5 walters@verbum.org--2003/tla--mainline--1.3--patch-6 walters@verbum.org--2003/tla--mainline--1.3--patch-7 walters@verbum.org--2003/tla--mainline--1.3--patch-8 walters@verbum.org--2003/tla--mainline--1.3--patch-9 tla-1.3.5+dfsg/src/libneon/0000755000175000017500000000000010457621776014171 5ustar userusertla-1.3.5+dfsg/src/libneon/neon.pc.in0000644000175000017500000000035610457621776016065 0ustar useruserprefix=@prefix@ exec_prefix=@exec_prefix@ libdir=@libdir@ includedir=@includedir@ Name: neon Description: HTTP/WebDAV client library Version: @NEON_VERSION@ Libs: -L${libdir} -lneon @NEON_LIBS@ Cflags: -I${includedir}/neon @NEON_CFLAGS@ tla-1.3.5+dfsg/src/libneon/src/0000755000175000017500000000000010457621776014760 5ustar userusertla-1.3.5+dfsg/src/libneon/src/ne_basic.c0000644000175000017500000003200710457621776016671 0ustar useruser/* Basic HTTP and WebDAV methods Copyright (C) 1999-2003, Joe Orton This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA */ #include "config.h" #include #ifdef HAVE_STRING_H #include #endif #ifdef HAVE_UNISTD_H #include #endif #ifdef HAVE_STDLIB_H #include #endif #include #include "ne_request.h" #include "ne_alloc.h" #include "ne_utils.h" #include "ne_basic.h" #include "ne_207.h" #ifndef NEON_NODAV #include "ne_uri.h" #endif #ifdef USE_DAV_LOCKS #include "ne_locks.h" #endif #include "ne_dates.h" #include "ne_i18n.h" /* Header parser to retrieve Last-Modified date */ static void get_lastmodified(void *userdata, const char *value) { time_t *modtime = userdata; *modtime = ne_httpdate_parse(value); } int ne_getmodtime(ne_session *sess, const char *uri, time_t *modtime) { ne_request *req = ne_request_create(sess, "HEAD", uri); int ret; ne_add_response_header_handler(req, "Last-Modified", get_lastmodified, modtime); *modtime = -1; ret = ne_request_dispatch(req); if (ret == NE_OK && ne_get_status(req)->klass != 2) { *modtime = -1; ret = NE_ERROR; } ne_request_destroy(req); return ret; } /* PUT's from fd to URI */ int ne_put(ne_session *sess, const char *uri, int fd) { ne_request *req = ne_request_create(sess, "PUT", uri); int ret; #ifdef USE_DAV_LOCKS ne_lock_using_resource(req, uri, 0); ne_lock_using_parent(req, uri); #endif ne_set_request_body_fd(req, fd); ret = ne_request_dispatch(req); if (ret == NE_OK && ne_get_status(req)->klass != 2) ret = NE_ERROR; ne_request_destroy(req); return ret; } /* Conditional HTTP put. * PUTs from fd to uri, returning NE_FAILED if resource as URI has * been modified more recently than 'since'. */ int ne_put_if_unmodified(ne_session *sess, const char *uri, int fd, time_t since) { ne_request *req; char *date; int ret; if (ne_version_pre_http11(sess)) { time_t modtime; /* Server is not minimally HTTP/1.1 compliant. Do a HEAD to * check the remote mod time. Of course, this makes the * operation very non-atomic, but better than nothing. */ ret = ne_getmodtime(sess, uri, &modtime); if (ret != NE_OK) return ret; if (modtime != since) return NE_FAILED; } req = ne_request_create(sess, "PUT", uri); date = ne_rfc1123_date(since); /* Add in the conditionals */ ne_add_request_header(req, "If-Unmodified-Since", date); ne_free(date); #ifdef USE_DAV_LOCKS ne_lock_using_resource(req, uri, 0); /* FIXME: this will give 412 if the resource doesn't exist, since * PUT may modify the parent... does that matter? */ #endif ne_set_request_body_fd(req, fd); ret = ne_request_dispatch(req); if (ret == NE_OK) { if (ne_get_status(req)->code == 412) { ret = NE_FAILED; } else if (ne_get_status(req)->klass != 2) { ret = NE_ERROR; } } ne_request_destroy(req); return ret; } struct get_context { int error; ne_session *session; off_t total; int fd; /* used in get_to_fd */ ne_content_range *range; }; static void get_to_fd(void *userdata, const char *block, size_t length) { struct get_context *ctx = userdata; ssize_t ret; if (!ctx->error) { while (length > 0) { ret = write(ctx->fd, block, length); if (ret < 0) { char err[200]; ctx->error = 1; ne_strerror(errno, err, sizeof err); ne_set_error(ctx->session, _("Could not write to file: %s"), err); break; } else { length -= ret; block += ret; } } } } static int accept_206(void *ud, ne_request *req, const ne_status *st) { return (st->code == 206); } static void clength_hdr_handler(void *ud, const char *value) { struct get_context *ctx = ud; off_t len = strtol(value, NULL, 10); if (ctx->range->end == -1) { ctx->range->end = ctx->range->start + len - 1; ctx->range->total = len; } else if (len != ctx->total) { NE_DEBUG(NE_DBG_HTTP, "Expecting %" NE_FMT_OFF_T " bytes, " "got entity of length %" NE_FMT_OFF_T "\n", ctx->total, len); ne_set_error(ctx->session, _("Response not of expected length")); ctx->error = 1; } } static void content_range_hdr_handler(void *ud, const char *value) { struct get_context *ctx = ud; if (strncmp(value, "bytes ", 6) != 0) { ne_set_error(ctx->session, ("Response range using unrecognized unit")); ctx->error = 1; } /* TODO: verify against requested range. */ } int ne_get_range(ne_session *sess, const char *uri, ne_content_range *range, int fd) { ne_request *req = ne_request_create(sess, "GET", uri); struct get_context ctx; const ne_status *status; int ret; if (range->end == -1) { ctx.total = -1; } else { ctx.total = (range->end - range->start) + 1; } NE_DEBUG(NE_DBG_HTTP, "Range total: %" NE_FMT_OFF_T "\n", ctx.total); ctx.fd = fd; ctx.error = 0; ctx.range = range; ctx.session = sess; ne_add_response_header_handler(req, "Content-Length", clength_hdr_handler, &ctx); ne_add_response_header_handler(req, "Content-Range", content_range_hdr_handler, &ctx); ne_add_response_body_reader(req, accept_206, get_to_fd, &ctx); if (range->end == -1) { ne_print_request_header(req, "Range", "bytes=%" NE_FMT_OFF_T "-", range->start); } else { ne_print_request_header(req, "Range", "bytes=%" NE_FMT_OFF_T "-%" NE_FMT_OFF_T, range->start, range->end); } ne_add_request_header(req, "Accept-Ranges", "bytes"); ret = ne_request_dispatch(req); status = ne_get_status(req); if (ctx.error) { ret = NE_ERROR; } else if (status && status->code == 416) { /* connection is terminated too early with Apache/1.3, so we check * this even if ret == NE_ERROR... */ ne_set_error(sess, _("Range is not satisfiable")); ret = NE_ERROR; } else if (ret == NE_OK) { if (status->klass == 2 && status->code != 206) { ne_set_error(sess, _("Resource does not support ranged GETs.")); ret = NE_ERROR; } else if (status->klass != 2) { ret = NE_ERROR; } } ne_request_destroy(req); return ret; } /* Get to given fd */ int ne_get(ne_session *sess, const char *uri, int fd) { ne_request *req = ne_request_create(sess, "GET", uri); struct get_context ctx; int ret; ctx.total = -1; ctx.fd = fd; ctx.error = 0; ctx.session = sess; /* Read the value of the Content-Length header into ctx.total */ ne_add_response_header_handler(req, "Content-Length", ne_handle_numeric_header, &ctx.total); ne_add_response_body_reader(req, ne_accept_2xx, get_to_fd, &ctx); ret = ne_request_dispatch(req); if (ctx.error) { ret = NE_ERROR; } else if (ret == NE_OK && ne_get_status(req)->klass != 2) { ret = NE_ERROR; } ne_request_destroy(req); return ret; } /* Get to given fd */ int ne_post(ne_session *sess, const char *uri, int fd, const char *buffer) { ne_request *req = ne_request_create(sess, "POST", uri); struct get_context ctx; int ret; ctx.total = -1; ctx.fd = fd; ctx.error = 0; ctx.session = sess; /* Read the value of the Content-Length header into ctx.total */ ne_add_response_header_handler(req, "Content-Length", ne_handle_numeric_header, &ctx.total); ne_add_response_body_reader(req, ne_accept_2xx, get_to_fd, &ctx); ne_set_request_body_buffer(req, buffer, strlen(buffer)); ret = ne_request_dispatch(req); if (ctx.error) { ret = NE_ERROR; } else if (ret == NE_OK && ne_get_status(req)->klass != 2) { ret = NE_ERROR; } ne_request_destroy(req); return ret; } void ne_content_type_handler(void *userdata, const char *value) { ne_content_type *ct = userdata; char *sep, *stype; ct->value = ne_strdup(value); stype = strchr(ct->value, '/'); if (!stype) { NE_FREE(ct->value); return; } *stype++ = '\0'; ct->type = ct->value; sep = strchr(stype, ';'); if (sep) { char *tok; /* look for the charset parameter. TODO; probably better to * hand-carve a parser than use ne_token/strstr/shave here. */ *sep++ = '\0'; do { tok = ne_qtoken(&sep, ';', "\"\'"); if (tok) { tok = strstr(tok, "charset="); if (tok) ct->charset = ne_shave(tok+8, "\"\'"); } else { break; } } while (sep != NULL); } /* set subtype, losing any trailing whitespace */ ct->subtype = ne_shave(stype, " \t"); /* 2616#3.7.1: subtypes of text/ default to charset ISO-8859-1. */ if (ct->charset == NULL && strcasecmp(ct->type, "text") == 0) ct->charset = "ISO-8859-1"; } static void dav_hdr_handler(void *userdata, const char *value) { char *tokens = ne_strdup(value), *pnt = tokens; ne_server_capabilities *caps = userdata; do { char *tok = ne_qtoken(&pnt, ',', "\"'"); if (!tok) break; tok = ne_shave(tok, " \r\t\n"); if (strcmp(tok, "1") == 0) { caps->dav_class1 = 1; } else if (strcmp(tok, "2") == 0) { caps->dav_class2 = 1; } else if (strcmp(tok, "") == 0) { caps->dav_executable = 1; } } while (pnt != NULL); ne_free(tokens); } int ne_options(ne_session *sess, const char *uri, ne_server_capabilities *caps) { ne_request *req = ne_request_create(sess, "OPTIONS", uri); int ret; ne_add_response_header_handler(req, "DAV", dav_hdr_handler, caps); ret = ne_request_dispatch(req); if (ret == NE_OK && ne_get_status(req)->klass != 2) { ret = NE_ERROR; } ne_request_destroy(req); return ret; } #ifndef NEON_NODAV void ne_add_depth_header(ne_request *req, int depth) { const char *value; switch(depth) { case NE_DEPTH_ZERO: value = "0"; break; case NE_DEPTH_ONE: value = "1"; break; default: value = "infinity"; break; } ne_add_request_header(req, "Depth", value); } static int copy_or_move(ne_session *sess, int is_move, int overwrite, int depth, const char *src, const char *dest) { ne_request *req = ne_request_create( sess, is_move?"MOVE":"COPY", src ); /* 2518 S8.9.2 says only use Depth: infinity with MOVE. */ if (!is_move) { ne_add_depth_header(req, depth); } #ifdef USE_DAV_LOCKS if (is_move) { ne_lock_using_resource(req, src, NE_DEPTH_INFINITE); } ne_lock_using_resource(req, dest, NE_DEPTH_INFINITE); /* And we need to be able to add members to the destination's parent */ ne_lock_using_parent(req, dest); #endif ne_print_request_header(req, "Destination", "%s://%s%s", ne_get_scheme(sess), ne_get_server_hostport(sess), dest); ne_add_request_header(req, "Overwrite", overwrite?"T":"F"); return ne_simple_request(sess, req); } int ne_copy(ne_session *sess, int overwrite, int depth, const char *src, const char *dest) { return copy_or_move(sess, 0, overwrite, depth, src, dest); } int ne_move(ne_session *sess, int overwrite, const char *src, const char *dest) { return copy_or_move(sess, 1, overwrite, 0, src, dest); } /* Deletes the specified resource. (and in only two lines of code!) */ int ne_delete(ne_session *sess, const char *uri) { ne_request *req = ne_request_create(sess, "DELETE", uri); #ifdef USE_DAV_LOCKS ne_lock_using_resource(req, uri, NE_DEPTH_INFINITE); ne_lock_using_parent(req, uri); #endif /* joe: I asked on the DAV WG list about whether we might get a * 207 error back from a DELETE... conclusion, you shouldn't if * you don't send the Depth header, since we might be an HTTP/1.1 * client and a 2xx response indicates success to them. But * it's all a bit unclear. In any case, DAV servers today do * return 207 to DELETE even if we don't send the Depth header. * So we handle 207 errors appropriately. */ return ne_simple_request(sess, req); } int ne_mkcol(ne_session *sess, const char *uri) { ne_request *req; char *real_uri; int ret; if (ne_path_has_trailing_slash(uri)) { real_uri = ne_strdup(uri); } else { real_uri = ne_concat(uri, "/", NULL); } req = ne_request_create(sess, "MKCOL", real_uri); #ifdef USE_DAV_LOCKS ne_lock_using_resource(req, real_uri, 0); ne_lock_using_parent(req, real_uri); #endif ret = ne_simple_request(sess, req); ne_free(real_uri); return ret; } #endif /* NEON_NODAV */ tla-1.3.5+dfsg/src/libneon/src/ne_i18n.h0000644000175000017500000000213210457621776016370 0ustar useruser/* Internationalization of neon Copyright (C) 1999-2002, Joe Orton This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA */ #ifndef NEON_I18N_H #define NEON_I18N_H #undef _ #ifdef ENABLE_NLS #include #define _(str) gettext(str) #else #define _(str) (str) #endif /* ENABLE_NLS */ #define N_(str) (str) /* Initialize i18n in neon */ void neon_i18n_init(void); #endif /* NEON_I18N_H */ tla-1.3.5+dfsg/src/libneon/src/ne_acl.h0000644000175000017500000000253410457621776016356 0ustar useruser/* Access control Copyright (C) 2001, Joe Orton This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA */ #ifndef NE_ACL_H #define NE_ACL_H #include "ne_session.h" BEGIN_NEON_DECLS typedef struct { enum { ne_acl_href, ne_acl_property, ne_acl_all } apply; enum { ne_acl_grant, ne_acl_deny } type; char *principal; int read; int read_acl; int write; int write_acl; int read_cuprivset; } ne_acl_entry; /* Set the ACL for the given resource to the list of ACL entries. */ int ne_acl_set(ne_session *sess, const char *uri, ne_acl_entry entries[], int numentries); END_NEON_DECLS #endif /* NE_ACL_H */ tla-1.3.5+dfsg/src/libneon/src/ne_string.h0000644000175000017500000001177010457621776017127 0ustar useruser/* String utility functions Copyright (C) 1999-2002, Joe Orton This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA */ #ifndef NE_STRING_H #define NE_STRING_H #include "ne_defs.h" #include "ne_alloc.h" #include BEGIN_NEON_DECLS /* ne_token and ne_qtoken return the next token in *str between *str * and separator character 'sep' or the NUL terminator. ne_qtoken * skips over any parts quoted using a pair of any one of the * characters given in 'quotes'. After returning, *str will point to * the next character after the separator, or NULL if no more * separator characters were found. * * ne_qtoken may return NULL if unterminated quotes are found. */ char *ne_token(char **str, char sep); char *ne_qtoken(char **str, char sep, const char *quotes); /* Return portion of 'str' with any characters in 'whitespace' shaved * off the beginning and end. Modifies str. */ char *ne_shave(char *str, const char *whitespace); /* Cleanse 'str' of non-printable characters. 'str' is modified * in-place, and returned. */ char *ne_strclean(char *str); /* A base64 encoder: converts 'len' bytes of 'text' to base64. * Returns malloc-allocated buffer; caller must free(). */ char *ne_base64(const unsigned char *text, size_t len); /* Base64 decoder; decodes NUL-terminated base64-encoded string * 'data', places malloc-allocated raw data in '*out', returns length, * or zero on decode error (in which case *out is undefined). */ size_t ne_unbase64(const char *data, unsigned char **out); /*** OBSOLETE INTERFACES ***/ char **split_string(const char *str, const char seperator, const char *quotes, const char *whitespace); char **split_string_c(const char *str, const char seperator, const char *quotes, const char *whitespace, int *count); char **pair_string(const char *str, const char compsep, const char kvsep, const char *quotes, const char *whitespace); void split_string_free(char **components); void pair_string_free(char **pairs); /*** END OF OBSOLETE INTERFACES */ /* String buffer handling. (Strings are zero-terminated still). A * string buffer ne_buffer * which grows dynamically with the * string. */ typedef struct { char *data; /* contents: null-terminated string. */ size_t used; /* used bytes in buffer */ size_t length; /* length of buffer */ } ne_buffer; /* Returns size of data in buffer, equiv to strlen(ne_buffer_data(buf)) */ #define ne_buffer_size(buf) ((buf)->used - 1) /* Concatenate all given strings onto the end of the buffer. The * strings must all be NUL-terminated, and MUST be followed by a NULL * argument marking the end of the list. */ void ne_buffer_concat(ne_buffer *buf, ...); /* Create a new ne_buffer. */ ne_buffer *ne_buffer_create(void); /* Create a new ne_buffer of given minimum size. */ ne_buffer *ne_buffer_ncreate(size_t size); /* Destroys (deallocates) a buffer */ void ne_buffer_destroy(ne_buffer *buf); /* Append a NUL-terminated string 'str' to buf. */ void ne_buffer_zappend(ne_buffer *buf, const char *str); /* Append 'len' bytes of 'data' to buf. 'data' does not need to be * NUL-terminated. The resultant string will have a NUL-terminator, * either way. */ void ne_buffer_append(ne_buffer *buf, const char *data, size_t len); /* Empties the contents of buf; makes the buffer zero-length. */ void ne_buffer_clear(ne_buffer *buf); /* Grows the ne_buffer to a minimum size. */ void ne_buffer_grow(ne_buffer *buf, size_t size); void ne_buffer_altered(ne_buffer *buf); /* Destroys a buffer, WITHOUT freeing the data, and returns the * data. */ char *ne_buffer_finish(ne_buffer *buf); /* Thread-safe strerror() wrapper; place system error for errno value * 'errnum' in 'buffer', which is of length 'buflen'. Returns * 'buffer'. */ char *ne_strerror(int errnum, char *buffer, size_t buflen); /* ne_strnzcpy copies at most 'n'-1 bytes of 'src' to 'dest', and * ensures that 'dest' is subsequently NUL-terminated. */ #define ne_strnzcpy(dest, src, n) do { \ strncpy(dest, src, n-1); dest[n-1] = '\0'; } while (0) /* Return malloc-allocated concatenation of all NUL-terminated string * arguments, up to a terminating NULL. */ char *ne_concat(const char *str, ...); #define NE_ASC2HEX(x) (((x) <= '9') ? ((x) - '0') : (tolower((x)) + 10 - 'a')) #define NE_HEX2ASC(x) ((char) ((x) > 9 ? ((x) - 10 + 'a') : ((x) + '0'))) END_NEON_DECLS #endif /* NE_STRING_H */ tla-1.3.5+dfsg/src/libneon/src/ne_compress.c0000644000175000017500000003161010457621776017442 0ustar useruser/* Handling of compressed HTTP responses Copyright (C) 2001-2004, Joe Orton This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA */ #include "config.h" #ifdef HAVE_STRING_H #include #endif #ifdef HAVE_STDLIB_H #include #endif #include "ne_request.h" #include "ne_compress.h" #include "ne_utils.h" #include "ne_i18n.h" #include "ne_private.h" #ifdef NEON_ZLIB #include /* Adds support for the 'gzip' Content-Encoding in HTTP. gzip is a * file format which wraps the DEFLATE compression algorithm. zlib * implements DEFLATE: we have to unwrap the gzip format (specified in * RFC1952) as it comes off the wire, and hand off chunks of data to * be inflated. */ struct ne_decompress_s { ne_session *session; /* associated session. */ /* temporary buffer for holding inflated data. */ char outbuf[BUFSIZ]; z_stream zstr; int zstrinit; /* non-zero if zstr has been initialized */ char *enchdr; /* value of Content-Enconding response header. */ /* pass blocks back to this. */ ne_block_reader reader; ne_accept_response acceptor; void *userdata; /* buffer for gzip header bytes. */ union { unsigned char buf[10]; struct header { unsigned char id1; unsigned char id2; unsigned char cmeth; /* compression method. */ unsigned char flags; unsigned int mtime; /* breaks when sizeof int != 4 */ unsigned char xflags; unsigned char os; } hdr; } in; size_t incount; /* bytes in in.buf */ unsigned char footer[8]; size_t footcount; /* bytes in footer. */ /* CRC32 checksum: odd that zlib uses uLong for this since it is a * 64-bit integer on LP64 platforms. */ uLong checksum; /* current state. */ enum state { NE_Z_BEFORE_DATA, /* not received any response blocks yet. */ NE_Z_PASSTHROUGH, /* response not compressed: passing through. */ NE_Z_IN_HEADER, /* received a few bytes of response data, but not * got past the gzip header yet. */ NE_Z_POST_HEADER, /* waiting for the end of the NUL-terminated bits. */ NE_Z_INFLATING, /* inflating response bytes. */ NE_Z_AFTER_DATA, /* after data; reading CRC32 & ISIZE */ NE_Z_FINISHED, /* stream is finished. */ NE_Z_ERROR /* inflate bombed. */ } state; }; #define ID1 0x1f #define ID2 0x8b #define HDR_DONE 0 #define HDR_EXTENDED 1 #define HDR_ERROR 2 /* parse_header parses the gzip header, sets the next state and returns * HDR_DONE: all done, bytes following are raw DEFLATE data. * HDR_EXTENDED: all done, expect a NUL-termianted string * before the DEFLATE data * HDR_ERROR: invalid header, give up. */ static int parse_header(ne_decompress *ctx) { struct header *h = &ctx->in.hdr; NE_DEBUG(NE_DBG_HTTP, "ID1: %d ID2: %d, cmeth %d, flags %d\n", h->id1, h->id2, h->cmeth, h->flags); if (h->id1 != ID1 || h->id2 != ID2 || h->cmeth != 8) { ctx->state = NE_Z_ERROR; ne_set_error(ctx->session, "Compressed stream invalid"); return HDR_ERROR; } NE_DEBUG(NE_DBG_HTTP, "mtime: %d, xflags: %d, os: %d\n", h->mtime, h->xflags, h->os); /* TODO: we can only handle one NUL-terminated extensions field * currently. Really, we should count the number of bits set, and * skip as many fields as bits set (bailing if any reserved bits * are set. */ if (h->flags == 8) { ctx->state = NE_Z_POST_HEADER; return HDR_EXTENDED; } else if (h->flags != 0) { ctx->state = NE_Z_ERROR; ne_set_error(ctx->session, "Compressed stream not supported"); return HDR_ERROR; } NE_DEBUG(NE_DBG_HTTP, "compress: Good stream.\n"); ctx->state = NE_Z_INFLATING; return HDR_DONE; } /* Convert 'buf' to unsigned int; 'buf' must be 'unsigned char *' */ #define BUF2UINT(buf) ((buf[3]<<24) + (buf[2]<<16) + (buf[1]<<8) + buf[0]) /* Process extra 'len' bytes of 'buf' which were received after the * DEFLATE data. */ static void process_footer(ne_decompress *ctx, const unsigned char *buf, size_t len) { if (len + ctx->footcount > 8) { ne_set_error(ctx->session, "Too many bytes (%" NE_FMT_SIZE_T ") in gzip footer", len); ctx->state = NE_Z_ERROR; } else { memcpy(ctx->footer + ctx->footcount, buf, len); ctx->footcount += len; if (ctx->footcount == 8) { uLong crc = BUF2UINT(ctx->footer) & 0xFFFFFFFF; if (crc == ctx->checksum) { ctx->state = NE_Z_FINISHED; /* reader requires a size=0 call at end-of-response */ ctx->reader(ctx->userdata, NULL, 0); NE_DEBUG(NE_DBG_HTTP, "compress: Checksum match.\n"); } else { NE_DEBUG(NE_DBG_HTTP, "compress: Checksum mismatch: " "given %lu vs computed %lu\n", crc, ctx->checksum); ne_set_error(ctx->session, "Checksum invalid for compressed stream"); ctx->state = NE_Z_ERROR; } } } } /* A zlib function failed with 'code'; set the session error string * appropriately. */ static void set_zlib_error(ne_decompress *ctx, const char *msg, int code) { if (ctx->zstr.msg) ne_set_error(ctx->session, _("%s: %s"), msg, ctx->zstr.msg); else { const char *err; switch (code) { case Z_STREAM_ERROR: err = "stream error"; break; case Z_DATA_ERROR: err = "data corrupt"; break; case Z_MEM_ERROR: err = "out of memory"; break; case Z_BUF_ERROR: err = "buffer error"; break; case Z_VERSION_ERROR: err = "library version mismatch"; break; default: err = "unknown error"; break; } ne_set_error(ctx->session, _("%s: %s (code %d)"), msg, err, code); } } /* Inflate response buffer 'buf' of length 'len'. */ static void do_inflate(ne_decompress *ctx, const char *buf, size_t len) { int ret; ctx->zstr.avail_in = len; ctx->zstr.next_in = (unsigned char *)buf; ctx->zstr.total_in = 0; do { ctx->zstr.avail_out = sizeof ctx->outbuf; ctx->zstr.next_out = (unsigned char *)ctx->outbuf; ctx->zstr.total_out = 0; ret = inflate(&ctx->zstr, Z_NO_FLUSH); NE_DEBUG(NE_DBG_HTTP, "compress: inflate %d, %ld bytes out, %d remaining\n", ret, ctx->zstr.total_out, ctx->zstr.avail_in); #if 0 NE_DEBUG(NE_DBG_HTTPBODY, "Inflated body block (%ld):\n[%.*s]\n", ctx->zstr.total_out, (int)ctx->zstr.total_out, ctx->outbuf); #endif /* update checksum. */ ctx->checksum = crc32(ctx->checksum, (unsigned char *)ctx->outbuf, ctx->zstr.total_out); /* pass on the inflated data, if any */ if (ctx->zstr.total_out > 0) { ctx->reader(ctx->userdata, ctx->outbuf, ctx->zstr.total_out); } } while (ret == Z_OK && ctx->zstr.avail_in > 0); if (ret == Z_STREAM_END) { NE_DEBUG(NE_DBG_HTTP, "compress: end of data stream, remaining %d.\n", ctx->zstr.avail_in); /* process the footer. */ ctx->state = NE_Z_AFTER_DATA; process_footer(ctx, ctx->zstr.next_in, ctx->zstr.avail_in); } else if (ret != Z_OK) { ctx->state = NE_Z_ERROR; set_zlib_error(ctx, _("Could not inflate data"), ret); } } /* Callback which is passed blocks of the response body. */ static void gz_reader(void *ud, const char *buf, size_t len) { ne_decompress *ctx = ud; const char *zbuf; size_t count; switch (ctx->state) { case NE_Z_PASSTHROUGH: /* move along there. */ ctx->reader(ctx->userdata, buf, len); return; case NE_Z_ERROR: /* beyond hope. */ break; case NE_Z_FINISHED: /* Could argue for tolerance, and ignoring trailing content; * but it could mean something more serious. */ if (len > 0) { ctx->state = NE_Z_ERROR; ne_set_error(ctx->session, "Unexpected content received after compressed stream"); } break; case NE_Z_BEFORE_DATA: /* work out whether this is a compressed response or not. */ if (ctx->enchdr && strcasecmp(ctx->enchdr, "gzip") == 0) { int ret; NE_DEBUG(NE_DBG_HTTP, "compress: got gzipped stream.\n"); /* inflateInit2() works here where inflateInit() doesn't. */ ret = inflateInit2(&ctx->zstr, -MAX_WBITS); if (ret != Z_OK) { set_zlib_error(ctx, _("Could not initialize zlib"), ret); return; } ctx->zstrinit = 1; } else { /* No Content-Encoding header: pass it on. TODO: we could * hack it and register the real callback now. But that * would require add_resp_body_rdr to have defined * ordering semantics etc etc */ ctx->state = NE_Z_PASSTHROUGH; ctx->reader(ctx->userdata, buf, len); return; } ctx->state = NE_Z_IN_HEADER; /* FALLTHROUGH */ case NE_Z_IN_HEADER: /* copy as many bytes as possible into the buffer. */ if (len + ctx->incount > 10) { count = 10 - ctx->incount; } else { count = len; } memcpy(ctx->in.buf + ctx->incount, buf, count); ctx->incount += count; /* have we got the full header yet? */ if (ctx->incount != 10) { return; } buf += count; len -= count; switch (parse_header(ctx)) { case HDR_EXTENDED: if (len == 0) return; break; case HDR_DONE: if (len > 0) { do_inflate(ctx, buf, len); } default: return; } /* FALLTHROUGH */ case NE_Z_POST_HEADER: /* eating the filename string. */ zbuf = memchr(buf, '\0', len); if (zbuf == NULL) { /* not found it yet. */ return; } NE_DEBUG(NE_DBG_HTTP, "compresss: skipped %" NE_FMT_SIZE_T " header bytes.\n", zbuf - buf); /* found end of string. */ len -= (1 + zbuf - buf); buf = zbuf + 1; ctx->state = NE_Z_INFLATING; if (len == 0) { /* end of string was at end of buffer. */ return; } /* FALLTHROUGH */ case NE_Z_INFLATING: do_inflate(ctx, buf, len); break; case NE_Z_AFTER_DATA: process_footer(ctx, (unsigned char *)buf, len); break; } } int ne_decompress_destroy(ne_decompress *ctx) { int ret; if (ctx->zstrinit) /* inflateEnd only fails if it's passed NULL etc; ignore * return value. */ inflateEnd(&ctx->zstr); if (ctx->enchdr) ne_free(ctx->enchdr); switch (ctx->state) { case NE_Z_BEFORE_DATA: case NE_Z_PASSTHROUGH: case NE_Z_FINISHED: ret = NE_OK; break; case NE_Z_ERROR: /* session error already set. */ ret = NE_ERROR; break; default: /* truncated response. */ ne_set_error(ctx->session, "Compressed response was truncated"); ret = NE_ERROR; break; } ne_free(ctx); return ret; } /* Prepare for a compressed response */ static void gz_pre_send(ne_request *r, void *ud, ne_buffer *req) { ne_decompress *ctx = ud; NE_DEBUG(NE_DBG_HTTP, "compress: Initialization.\n"); /* (Re-)Initialize the context */ ctx->state = NE_Z_BEFORE_DATA; if (ctx->zstrinit) inflateEnd(&ctx->zstr); ctx->zstrinit = 0; ctx->incount = ctx->footcount = 0; ctx->checksum = crc32(0L, Z_NULL, 0); if (ctx->enchdr) { ne_free(ctx->enchdr); ctx->enchdr = NULL; } } /* Kill the pre-send hook */ static void gz_destroy(ne_request *req, void *userdata) { ne_kill_pre_send(ne_get_session(req), gz_pre_send, userdata); } /* Wrapper for user-passed acceptor function. */ static int gz_acceptor(void *userdata, ne_request *req, const ne_status *st) { ne_decompress *ctx = userdata; return ctx->acceptor(ctx->userdata, req, st); } ne_decompress *ne_decompress_reader(ne_request *req, ne_accept_response acpt, ne_block_reader rdr, void *userdata) { ne_decompress *ctx = ne_calloc(sizeof *ctx); ne_add_request_header(req, "Accept-Encoding", "gzip"); ne_add_response_header_handler(req, "Content-Encoding", ne_duplicate_header, &ctx->enchdr); ne_add_response_body_reader(req, gz_acceptor, gz_reader, ctx); ctx->reader = rdr; ctx->userdata = userdata; ctx->session = ne_get_session(req); ctx->acceptor = acpt; ne_hook_pre_send(ctx->session, gz_pre_send, ctx); ne_hook_destroy_request(ctx->session, gz_destroy, ctx); return ctx; } #else /* !NEON_ZLIB */ /* Pass-through interface present to provide ABI compatibility. */ ne_decompress *ne_decompress_reader(ne_request *req, ne_accept_response acpt, ne_block_reader rdr, void *userdata) { ne_add_response_body_reader(req, acpt, rdr, userdata); /* an arbitrary return value: don't confuse them by returning NULL. */ return (ne_decompress *)req; } int ne_decompress_destroy(ne_decompress *dc) { return 0; } #endif /* NEON_ZLIB */ tla-1.3.5+dfsg/src/libneon/src/ne_session.c0000644000175000017500000001535210457621776017277 0ustar useruser/* HTTP session handling Copyright (C) 1999-2003, Joe Orton Portions are: Copyright (C) 1999-2000 Tommi Komulainen This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA */ #include "config.h" #ifdef HAVE_STRING_H #include #endif #ifdef HAVE_STDLIB_H #include #endif #ifdef HAVE_ERRNO_H #include #endif #include "ne_session.h" #include "ne_alloc.h" #include "ne_utils.h" #include "ne_i18n.h" #include "ne_string.h" #include "ne_private.h" /* Destroy a a list of hooks. */ static void destroy_hooks(struct hook *hooks) { struct hook *nexthk; while (hooks) { nexthk = hooks->next; ne_free(hooks); hooks = nexthk; } } void ne_session_destroy(ne_session *sess) { struct hook *hk; NE_DEBUG(NE_DBG_HTTP, "ne_session_destroy called.\n"); /* Run the destroy hooks. */ for (hk = sess->destroy_sess_hooks; hk != NULL; hk = hk->next) { ne_destroy_sess_fn fn = (ne_destroy_sess_fn)hk->fn; fn(hk->userdata); } destroy_hooks(sess->create_req_hooks); destroy_hooks(sess->pre_send_hooks); destroy_hooks(sess->post_send_hooks); destroy_hooks(sess->destroy_req_hooks); destroy_hooks(sess->destroy_sess_hooks); destroy_hooks(sess->private); ne_free(sess->scheme); ne_free(sess->server.hostname); ne_free(sess->server.hostport); if (sess->server.address) ne_addr_destroy(sess->server.address); if (sess->proxy.address) ne_addr_destroy(sess->proxy.address); if (sess->proxy.hostname) ne_free(sess->proxy.hostname); if (sess->user_agent) ne_free(sess->user_agent); if (sess->connected) { ne_close_connection(sess); } #ifdef NEON_SSL if (sess->ssl_context) ne_ssl_context_destroy(sess->ssl_context); if (sess->server_cert) ne_ssl_cert_free(sess->server_cert); if (sess->client_cert) ne_ssl_clicert_free(sess->client_cert); #endif ne_free(sess); } int ne_version_pre_http11(ne_session *s) { return !s->is_http11; } /* Stores the "hostname[:port]" segment */ static void set_hostport(struct host_info *host, unsigned int defaultport) { size_t len = strlen(host->hostname); host->hostport = ne_malloc(len + 10); strcpy(host->hostport, host->hostname); if (host->port != defaultport) ne_snprintf(host->hostport + len, 9, ":%u", host->port); } /* Stores the hostname/port in *info, setting up the "hostport" * segment correctly. */ static void set_hostinfo(struct host_info *info, const char *hostname, unsigned int port) { info->hostname = ne_strdup(hostname); info->port = port; } ne_session *ne_session_create(const char *scheme, const char *hostname, unsigned int port) { ne_session *sess = ne_calloc(sizeof *sess); NE_DEBUG(NE_DBG_HTTP, "HTTP session to %s://%s:%d begins.\n", scheme, hostname, port); strcpy(sess->error, "Unknown error."); /* use SSL if scheme is https */ sess->use_ssl = !strcmp(scheme, "https"); /* set the hostname/port */ set_hostinfo(&sess->server, hostname, port); set_hostport(&sess->server, sess->use_ssl?443:80); #ifdef NEON_SSL if (sess->use_ssl) { sess->ssl_context = ne_ssl_context_create(); } #endif sess->scheme = ne_strdup(scheme); /* Default expect-100 to OFF. */ sess->expect100_works = -1; return sess; } void ne_session_proxy(ne_session *sess, const char *hostname, unsigned int port) { sess->use_proxy = 1; if (sess->proxy.hostname) ne_free(sess->proxy.hostname); set_hostinfo(&sess->proxy, hostname, port); } void ne_set_error(ne_session *sess, const char *format, ...) { va_list params; va_start(params, format); ne_vsnprintf(sess->error, sizeof sess->error, format, params); va_end(params); } void ne_set_progress(ne_session *sess, ne_progress progress, void *userdata) { sess->progress_cb = progress; sess->progress_ud = userdata; } void ne_set_status(ne_session *sess, ne_notify_status status, void *userdata) { sess->notify_cb = status; sess->notify_ud = userdata; } void ne_set_expect100(ne_session *sess, int use_expect100) { if (use_expect100) { sess->expect100_works = 1; } else { sess->expect100_works = -1; } } void ne_set_persist(ne_session *sess, int persist) { sess->no_persist = !persist; } void ne_set_read_timeout(ne_session *sess, int timeout) { sess->rdtimeout = timeout; } #define UAHDR "User-Agent: " #define AGENT " neon/" NEON_VERSION "\r\n" void ne_set_useragent(ne_session *sess, const char *token) { if (sess->user_agent) ne_free(sess->user_agent); sess->user_agent = ne_malloc(strlen(UAHDR) + strlen(AGENT) + strlen(token) + 1); #ifdef HAVE_STPCPY strcpy(stpcpy(stpcpy(sess->user_agent, UAHDR), token), AGENT); #else strcat(strcat(strcpy(sess->user_agent, UAHDR), token), AGENT); #endif } const char *ne_get_server_hostport(ne_session *sess) { return sess->server.hostport; } const char *ne_get_scheme(ne_session *sess) { return sess->scheme; } void ne_fill_server_uri(ne_session *sess, ne_uri *uri) { uri->host = ne_strdup(sess->server.hostname); uri->port = sess->server.port; uri->scheme = ne_strdup(sess->scheme); } const char *ne_get_error(ne_session *sess) { return ne_strclean(sess->error); } void ne_close_connection(ne_session *sess) { if (sess->connected) { NE_DEBUG(NE_DBG_SOCKET, "Closing connection.\n"); ne_sock_close(sess->socket); sess->socket = NULL; NE_DEBUG(NE_DBG_SOCKET, "Connection closed.\n"); } else { NE_DEBUG(NE_DBG_SOCKET, "(Not closing closed connection!).\n"); } sess->connected = 0; } void ne_ssl_set_verify(ne_session *sess, ne_ssl_verify_fn fn, void *userdata) { sess->ssl_verify_fn = fn; sess->ssl_verify_ud = userdata; } void ne_ssl_provide_clicert(ne_session *sess, ne_ssl_provide_fn fn, void *userdata) { sess->ssl_provide_fn = fn; sess->ssl_provide_ud = userdata; } void ne_ssl_trust_cert(ne_session *sess, const ne_ssl_certificate *cert) { #ifdef NEON_SSL ne_ssl_ctx_trustcert(sess->ssl_context, cert); #endif } tla-1.3.5+dfsg/src/libneon/src/ne_socket.c0000644000175000017500000006277510457621776017117 0ustar useruser/* socket handling routines Copyright (C) 1998-2004, Joe Orton , Copyright (C) 1999-2000 Tommi Komulainen This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA */ /* portions were originally under GPL in Mutt, http://www.mutt.org/ Relicensed under LGPL for neon, http://www.webdav.org/neon/ */ #include "config.h" #ifdef __hpux /* pick up hstrerror */ #define _XOPEN_SOURCE_EXTENDED 1 /* don't use the broken getaddrinfo shipped in HP-UX 11.11 */ #ifdef USE_GETADDRINFO #undef USE_GETADDRINFO #endif #endif #include #ifdef HAVE_SYS_TIME_H #include #endif #include #ifdef HAVE_SYS_SELECT_H #include #endif #ifdef HAVE_SYS_SOCKET_H #include #endif #ifdef HAVE_NETINET_IN_H #include #endif #ifdef HAVE_NETINET_TCP_H #include #endif #ifdef HAVE_ARPA_INET_H #include #endif #ifdef HAVE_NETDB_H #include #endif #ifdef WIN32 #include #include #endif #if defined(NEON_SSL) && defined(HAVE_LIMITS_H) #include /* for INT_MAX */ #endif #ifdef HAVE_STRING_H #include #endif #ifdef HAVE_STRINGS_H #include #endif #ifdef HAVE_UNISTD_H #include #endif #ifdef HAVE_SIGNAL_H #include #endif #ifdef HAVE_ERRNO_H #include #endif #ifdef HAVE_STDLIB_H #include #endif #ifdef HAVE_SOCKS_H #include #endif #ifdef NEON_SSL #include #include #include /* for PKCS12_PBE_add */ #include #include "ne_privssl.h" #endif #include "ne_i18n.h" #include "ne_utils.h" #include "ne_string.h" #define NE_INET_ADDR_DEFINED /* A slightly ugly hack: change the ne_inet_addr definition to be the * real address type used. The API only exposes ne_inet_addr as a * pointer to an opaque object, so this should be well-defined * behaviour. It avoids the hassle of a real wrapper ne_inet_addr * structure, or losing type-safety by using void *. */ #ifdef USE_GETADDRINFO typedef struct addrinfo ne_inet_addr; /* To avoid doing AAAA queries unless absolutely necessary, either use * AI_ADDRCONFIG where available, or a run-time check for working IPv6 * support; the latter is only known to work on Linux. */ #if !defined(USE_GAI_ADDRCONFIG) && defined(__linux__) #define USE_CHECK_IPV6 #endif #else typedef struct in_addr ne_inet_addr; #endif #include "ne_socket.h" #include "ne_alloc.h" #if defined(__BEOS__) && !defined(BONE_VERSION) /* pre-BONE */ #define ne_write(a,b,c) send(a,b,c,0) #define ne_read(a,b,c) recv(a,b,c,0) #define ne_close(s) closesocket(s) #define ne_errno errno #elif defined(WIN32) #define ne_write(a,b,c) send(a,b,c,0) #define ne_read(a,b,c) recv(a,b,c,0) #define ne_close(s) closesocket(s) #define ne_errno WSAGetLastError() #else /* really Unix! */ #define ne_write(a,b,c) write(a,b,c) #define ne_read(a,b,c) read(a,b,c) #define ne_close(s) close(s) #define ne_errno errno #endif #ifdef WIN32 #define NE_ISRESET(e) ((e) == WSAECONNABORTED || (e) == WSAETIMEDOUT || \ (e) == WSAECONNRESET || (e) == WSAENETRESET) #define NE_ISCLOSED(e) ((e) == WSAESHUTDOWN || (e) == WSAENOTCONN) #define NE_ISINTR(e) (0) #else /* Unix */ #define NE_ISRESET(e) ((e) == ECONNRESET) #define NE_ISCLOSED(e) ((e) == EPIPE) #define NE_ISINTR(e) ((e) == EINTR) #endif /* Socket read timeout */ #define SOCKET_READ_TIMEOUT 120 /* Critical I/O functions on a socket: useful abstraction for easily * handling SSL I/O alongside raw socket I/O. */ struct iofns { /* Read up to 'len' bytes into 'buf' from socket. Return <0 on * error or EOF, or >0; number of bytes read. */ ssize_t (*read)(ne_socket *s, char *buf, size_t len); /* Write exactly 'len' bytes from 'buf' to socket. Return zero on * success, <0 on error. */ ssize_t (*write)(ne_socket *s, const char *buf, size_t len); /* Wait up to 'n' seconds for socket to become readable. Returns * 0 when readable, otherwise NE_SOCK_TIMEOUT or NE_SOCK_ERROR. */ int (*readable)(ne_socket *s, int n); }; struct ne_socket_s { int fd; char error[200]; void *progress_ud; int rdtimeout; /* read timeout. */ const struct iofns *ops; #ifdef NEON_SSL ne_ssl_socket ssl; #endif /* The read buffer: ->buffer stores byte which have been read; as * these are consumed and passed back to the caller, bufpos * advances through ->buffer. ->bufavail gives the number of * bytes which remain to be consumed in ->buffer (from ->bufpos), * and is hence always <= RDBUFSIZ. */ #define RDBUFSIZ 4096 char buffer[RDBUFSIZ]; char *bufpos; size_t bufavail; }; /* ne_sock_addr represents an Internet address. */ struct ne_sock_addr_s { #ifdef USE_GETADDRINFO struct addrinfo *result, *cursor; #else struct in_addr *addrs; size_t cursor, count; #endif int errnum; }; /* set_error: set socket error string to 'str'. */ #define set_error(s, str) ne_strnzcpy((s)->error, (str), sizeof (s)->error) /* set_strerror: set socket error to system error string for 'errnum' */ #ifdef WIN32 /* Print system error message to given buffer. */ static void print_error(int errnum, char *buffer, size_t buflen) { if (FormatMessage (FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, (DWORD) errnum, 0, buffer, buflen, NULL) == 0) ne_snprintf(buffer, buflen, "Socket error %d", errnum); } #define set_strerror(s, e) print_error((e), (s)->error, sizeof (s)->error) #else /* not WIN32 */ #define set_strerror(s, e) ne_strerror((e), (s)->error, sizeof (s)->error) #endif #ifdef NEON_SSL /* Initialize SSL library. */ static void init_ssl(void) { SSL_load_error_strings(); SSL_library_init(); PKCS12_PBE_add(); /* ### not sure why this is needed. */ } /* Seed the SSL PRNG, if necessary; returns non-zero on failure. */ static int seed_ssl_prng(void) { /* Check whether the PRNG has already been seeded. */ if (RAND_status() == 1) return 0; #ifdef EGD_PATH NE_DEBUG(NE_DBG_SOCKET, "Seeding PRNG from " EGD_PATH "...\n"); if (RAND_egd(EGD_PATH) != -1) return 0; #elif defined(ENABLE_EGD) { static const char *paths[] = { "/var/run/egd-pool", "/dev/egd-pool", "/etc/egd-pool", "/etc/entropy" }; size_t n; for (n = 0; n < sizeof(paths) / sizeof(char *); n++) { NE_DEBUG(NE_DBG_SOCKET, "Seeding PRNG from %s...\n", paths[n]); if (RAND_egd(paths[n]) != -1) return 0; } } #endif /* EGD_PATH */ NE_DEBUG(NE_DBG_SOCKET, "No entropy source found; could not seed PRNG.\n"); return -1; } #endif /* NEON_SSL */ #ifdef USE_CHECK_IPV6 static int ipv6_disabled = 0; /* On Linux kernels, IPv6 is typically built as a loadable module, and * socket(AF_INET6, ...) will fail if this module is not loaded, so * the slow AAAA lookups can be avoided for this common case. */ static void init_ipv6(void) { int fd = socket(AF_INET6, SOCK_STREAM, 0); if (fd < 0) ipv6_disabled = 1; else close(fd); } #else #define ipv6_disabled (0) #endif static int init_result = 0; int ne_sock_init(void) { #ifdef WIN32 WORD wVersionRequested; WSADATA wsaData; int err; #endif if (init_result > 0) return 0; else if (init_result < 0) return -1; #ifdef WIN32 wVersionRequested = MAKEWORD(2, 2); err = WSAStartup(wVersionRequested, &wsaData); if (err != 0) { init_result = -1; return -1; } #endif #ifdef NEON_SOCKS SOCKSinit("neon"); #endif #if defined(HAVE_SIGNAL) && defined(SIGPIPE) (void) signal(SIGPIPE, SIG_IGN); #endif #ifdef USE_CHECK_IPV6 init_ipv6(); #endif #ifdef NEON_SSL init_ssl(); #endif init_result = 1; return 0; } void ne_sock_exit(void) { #ifdef WIN32 WSACleanup(); #endif init_result = 0; } int ne_sock_block(ne_socket *sock, int n) { if (sock->bufavail) return 0; return sock->ops->readable(sock, n); } /* Cast address object AD to type 'sockaddr_TY' */ #define SACAST(ty, ad) ((struct sockaddr_##ty *)(ad)) #define SOCK_ERR(x) do { ssize_t _sock_err = (x); \ if (_sock_err < 0) return _sock_err; } while(0) ssize_t ne_sock_read(ne_socket *sock, char *buffer, size_t buflen) { ssize_t bytes; #if 0 NE_DEBUG(NE_DBG_SOCKET, "buf: at %d, %d avail [%s]\n", sock->bufpos - sock->buffer, sock->bufavail, sock->bufpos); #endif if (sock->bufavail > 0) { /* Deliver buffered data. */ if (buflen > sock->bufavail) buflen = sock->bufavail; memcpy(buffer, sock->bufpos, buflen); sock->bufpos += buflen; sock->bufavail -= buflen; return buflen; } else if (buflen >= sizeof sock->buffer) { /* No need for read buffer. */ return sock->ops->read(sock, buffer, buflen); } else { /* Fill read buffer. */ bytes = sock->ops->read(sock, sock->buffer, sizeof sock->buffer); if (bytes <= 0) return bytes; if (buflen > (size_t)bytes) buflen = bytes; memcpy(buffer, sock->buffer, buflen); sock->bufpos = sock->buffer + buflen; sock->bufavail = bytes - buflen; return buflen; } } ssize_t ne_sock_peek(ne_socket *sock, char *buffer, size_t buflen) { ssize_t bytes; if (sock->bufavail) { /* just return buffered data. */ bytes = sock->bufavail; } else { /* fill the buffer. */ bytes = sock->ops->read(sock, sock->buffer, sizeof sock->buffer); if (bytes <= 0) return bytes; sock->bufpos = sock->buffer; sock->bufavail = bytes; } if (buflen > (size_t)bytes) buflen = bytes; memcpy(buffer, sock->bufpos, buflen); return buflen; } /* Await data on raw fd in socket. */ static int readable_raw(ne_socket *sock, int secs) { int fdno = sock->fd, ret; fd_set rdfds; struct timeval timeout, *tvp = (secs >= 0 ? &timeout : NULL); /* Init the fd set */ FD_ZERO(&rdfds); do { FD_SET(fdno, &rdfds); if (tvp) { tvp->tv_sec = secs; tvp->tv_usec = 0; } ret = select(fdno + 1, &rdfds, NULL, NULL, tvp); } while (ret < 0 && NE_ISINTR(ne_errno)); if (ret < 0) { set_strerror(sock, ne_errno); return NE_SOCK_ERROR; } return (ret == 0) ? NE_SOCK_TIMEOUT : 0; } static ssize_t read_raw(ne_socket *sock, char *buffer, size_t len) { ssize_t ret; ret = readable_raw(sock, sock->rdtimeout); if (ret) return ret; do { ret = ne_read(sock->fd, buffer, len); } while (ret == -1 && NE_ISINTR(ne_errno)); if (ret == 0) { set_error(sock, _("Connection closed")); ret = NE_SOCK_CLOSED; } else if (ret < 0) { int errnum = ne_errno; ret = NE_ISRESET(errnum) ? NE_SOCK_RESET : NE_SOCK_ERROR; set_strerror(sock, errnum); } return ret; } #define MAP_ERR(e) (NE_ISCLOSED(e) ? NE_SOCK_CLOSED : \ (NE_ISRESET(e) ? NE_SOCK_RESET : NE_SOCK_ERROR)) static ssize_t write_raw(ne_socket *sock, const char *data, size_t length) { ssize_t wrote; do { wrote = ne_write(sock->fd, data, length); if (wrote > 0) { data += wrote; length -= wrote; } } while ((wrote > 0 || NE_ISINTR(ne_errno)) && length > 0); if (wrote < 0) { int errnum = ne_errno; set_strerror(sock, errnum); return MAP_ERR(errnum); } return 0; } static const struct iofns iofns_raw = { read_raw, write_raw, readable_raw }; #ifdef NEON_SSL /* OpenSSL I/O function implementations. */ static int readable_ossl(ne_socket *sock, int secs) { /* If there is buffered SSL data, then don't block on the socket. * FIXME: make sure that SSL_read *really* won't block if * SSL_pending returns non-zero. Possibly need to do * SSL_read(ssl, buf, SSL_pending(ssl)) */ if (SSL_pending(sock->ssl.ssl)) return 0; return readable_raw(sock, secs); } /* SSL error handling, according to SSL_get_error(3). */ static int error_ossl(ne_socket *sock, int sret) { int err = SSL_get_error(sock->ssl.ssl, sret), ret = NE_SOCK_ERROR; switch (err) { case SSL_ERROR_ZERO_RETURN: ret = NE_SOCK_CLOSED; set_error(sock, _("Connection closed")); break; case SSL_ERROR_SYSCALL: err = ERR_get_error(); if (err == 0) { if (sret == 0) { /* EOF without close_notify, possible truncation */ set_error(sock, _("Secure connection truncated")); ret = NE_SOCK_TRUNC; } else { /* Other socket error. */ err = ne_errno; set_strerror(sock, err); ret = MAP_ERR(err); } } else { ne_snprintf(sock->error, sizeof sock->error, _("SSL error: %s"), ERR_reason_error_string(err)); } break; default: ne_snprintf(sock->error, sizeof sock->error, _("SSL error: %s"), ERR_reason_error_string(ERR_get_error())); break; } return ret; } /* Work around OpenSSL's use of 'int' rather than 'size_t', to prevent * accidentally passing a negative number, etc. */ #define CAST2INT(n) (((n) > INT_MAX) ? INT_MAX : (n)) static ssize_t read_ossl(ne_socket *sock, char *buffer, size_t len) { int ret; ret = readable_ossl(sock, sock->rdtimeout); if (ret) return ret; ret = SSL_read(sock->ssl.ssl, buffer, CAST2INT(len)); if (ret <= 0) ret = error_ossl(sock, ret); return ret; } static ssize_t write_ossl(ne_socket *sock, const char *data, size_t len) { int ret, ilen = CAST2INT(len); ret = SSL_write(sock->ssl.ssl, data, ilen); /* ssl.h says SSL_MODE_ENABLE_PARTIAL_WRITE must be enabled to * have SSL_write return < length... so, SSL_write should never * return < length. */ if (ret != ilen) return error_ossl(sock, ret); return 0; } static const struct iofns iofns_ossl = { read_ossl, write_ossl, readable_ossl }; #endif /* NEON_SSL */ int ne_sock_fullwrite(ne_socket *sock, const char *data, size_t len) { return sock->ops->write(sock, data, len); } ssize_t ne_sock_readline(ne_socket *sock, char *buf, size_t buflen) { char *lf; size_t len; if ((lf = memchr(sock->bufpos, '\n', sock->bufavail)) == NULL && sock->bufavail < RDBUFSIZ) { /* The buffered data does not contain a complete line: move it * to the beginning of the buffer. */ if (sock->bufavail) memmove(sock->buffer, sock->bufpos, sock->bufavail); sock->bufpos = sock->buffer; /* Loop filling the buffer whilst no newline is found in the data * buffered so far, and there is still buffer space available */ do { /* Read more data onto end of buffer. */ ssize_t ret = sock->ops->read(sock, sock->buffer + sock->bufavail, RDBUFSIZ - sock->bufavail); if (ret < 0) return ret; sock->bufavail += ret; } while ((lf = memchr(sock->buffer, '\n', sock->bufavail)) == NULL && sock->bufavail < RDBUFSIZ); } if (lf) len = lf - sock->bufpos + 1; else len = buflen; /* fall into "line too long" error... */ if ((len + 1) > buflen) { set_error(sock, _("Line too long")); return NE_SOCK_ERROR; } memcpy(buf, sock->bufpos, len); buf[len] = '\0'; /* consume the line from buffer: */ sock->bufavail -= len; sock->bufpos += len; return len; } ssize_t ne_sock_fullread(ne_socket *sock, char *buffer, size_t buflen) { ssize_t len; while (buflen > 0) { len = ne_sock_read(sock, buffer, buflen); if (len < 0) return len; buflen -= len; buffer += len; } return 0; } #ifndef INADDR_NONE #define INADDR_NONE ((unsigned long) -1) #endif #if !defined(USE_GETADDRINFO) && !defined(HAVE_DECL_H_ERRNO) && !defined(WIN32) /* Ancient versions of netdb.h don't export h_errno. */ extern int h_errno; #endif /* This implemementation does not attempt to support IPv6 using * gethostbyname2 et al. */ ne_sock_addr *ne_addr_resolve(const char *hostname, int flags) { ne_sock_addr *addr = ne_calloc(sizeof *addr); #ifdef USE_GETADDRINFO struct addrinfo hints = {0}; char *pnt; hints.ai_socktype = SOCK_STREAM; if (hostname[0] == '[' && ((pnt = strchr(hostname, ']')) != NULL)) { char *hn = ne_strdup(hostname + 1); hn[pnt - hostname - 1] = '\0'; #ifdef AI_NUMERICHOST /* added in the RFC2553 API */ hints.ai_flags = AI_NUMERICHOST; #endif hints.ai_family = AF_INET6; addr->errnum = getaddrinfo(hn, NULL, &hints, &addr->result); ne_free(hn); } else { #ifdef USE_GAI_ADDRCONFIG /* added in the RFC3493 API */ hints.ai_flags = AI_ADDRCONFIG; hints.ai_family = AF_UNSPEC; addr->errnum = getaddrinfo(hostname, NULL, &hints, &addr->result); #else hints.ai_family = ipv6_disabled ? AF_INET : AF_UNSPEC; addr->errnum = getaddrinfo(hostname, NULL, &hints, &addr->result); #endif } #else /* Use gethostbyname() */ unsigned long laddr; struct hostent *hp; laddr = inet_addr(hostname); if (laddr == INADDR_NONE) { hp = gethostbyname(hostname); if (hp == NULL) { #ifdef WIN32 addr->errnum = WSAGetLastError(); #else addr->errnum = h_errno; #endif } else if (hp->h_length != sizeof(struct in_addr)) { /* fail gracefully if somebody set RES_USE_INET6 */ addr->errnum = NO_RECOVERY; } else { size_t n; /* count addresses */ for (n = 0; hp->h_addr_list[n] != NULL; n++) /* noop */; addr->count = n; addr->addrs = ne_malloc(n * sizeof *addr->addrs); for (n = 0; n < addr->count; n++) memcpy(&addr->addrs[n], hp->h_addr_list[n], hp->h_length); } } else { addr->addrs = ne_malloc(sizeof *addr->addrs); addr->count = 1; memcpy(addr->addrs, &laddr, sizeof *addr->addrs); } #endif return addr; } int ne_addr_result(const ne_sock_addr *addr) { return addr->errnum; } const ne_inet_addr *ne_addr_first(ne_sock_addr *addr) { #ifdef USE_GETADDRINFO addr->cursor = addr->result->ai_next; return addr->result; #else addr->cursor = 0; return &addr->addrs[0]; #endif } const ne_inet_addr *ne_addr_next(ne_sock_addr *addr) { #ifdef USE_GETADDRINFO struct addrinfo *ret = addr->cursor; if (addr->cursor) addr->cursor = addr->cursor->ai_next; #else struct in_addr *ret; if (++addr->cursor < addr->count) ret = &addr->addrs[addr->cursor]; else ret = NULL; #endif return ret; } char *ne_addr_error(const ne_sock_addr *addr, char *buf, size_t bufsiz) { #ifdef WIN32 print_error(addr->errnum, buf, bufsiz); #else const char *err; #ifdef USE_GETADDRINFO /* override horrible generic "Name or service not known" error. */ if (addr->errnum == EAI_NONAME) err = _("Host not found"); else err = gai_strerror(addr->errnum); #elif defined(HAVE_HSTRERROR) err = hstrerror(addr->errnum); #else err = _("Host not found"); #endif ne_strnzcpy(buf, err, bufsiz); #endif /* WIN32 */ return buf; } char *ne_iaddr_print(const ne_inet_addr *ia, char *buf, size_t bufsiz) { #ifdef USE_GETADDRINFO /* implies inet_ntop */ const char *ret; #ifdef AF_INET6 if (ia->ai_family == AF_INET6) { struct sockaddr_in6 *in6 = SACAST(in6, ia->ai_addr); ret = inet_ntop(AF_INET6, &in6->sin6_addr, buf, bufsiz); } else #endif if (ia->ai_family == AF_INET) { struct sockaddr_in *in = SACAST(in, ia->ai_addr); ret = inet_ntop(AF_INET, &in->sin_addr, buf, bufsiz); } else ret = NULL; if (ret == NULL) ne_strnzcpy(buf, "[IP address]", bufsiz); #else ne_strnzcpy(buf, inet_ntoa(*ia), bufsiz); #endif return buf; } void ne_addr_destroy(ne_sock_addr *addr) { #ifdef USE_GETADDRINFO if (addr->result) freeaddrinfo(addr->result); #else if (addr->addrs) ne_free(addr->addrs); #endif ne_free(addr); } /* Connect socket 'fd' to address 'addr' on given 'port': */ static int raw_connect(int fd, const ne_inet_addr *addr, unsigned int port) { #ifdef USE_GETADDRINFO #ifdef AF_INET6 /* fill in the _family field for AIX 4.3, which forgets to do so. */ if (addr->ai_family == AF_INET6) { struct sockaddr_in6 in6; memcpy(&in6, addr->ai_addr, sizeof in6); in6.sin6_port = port; in6.sin6_family = AF_INET6; return connect(fd, (struct sockaddr *)&in6, sizeof in6); } else #endif if (addr->ai_family == AF_INET) { struct sockaddr_in in; memcpy(&in, addr->ai_addr, sizeof in); in.sin_port = port; in.sin_family = AF_INET; return connect(fd, (struct sockaddr *)&in, sizeof in); } else { errno = EINVAL; return -1; } #else struct sockaddr_in sa = {0}; sa.sin_family = AF_INET; sa.sin_port = port; sa.sin_addr = *addr; return connect(fd, (struct sockaddr *)&sa, sizeof sa); #endif } ne_socket *ne_sock_create(void) { ne_socket *sock = ne_calloc(sizeof *sock); sock->rdtimeout = SOCKET_READ_TIMEOUT; sock->bufpos = sock->buffer; sock->ops = &iofns_raw; sock->fd = -1; return sock; } int ne_sock_connect(ne_socket *sock, const ne_inet_addr *addr, unsigned int port) { int fd; #ifdef USE_GETADDRINFO /* use SOCK_STREAM rather than ai_socktype: some getaddrinfo * implementations do not set ai_socktype, e.g. RHL6.2. */ fd = socket(addr->ai_family, SOCK_STREAM, addr->ai_protocol); #else fd = socket(AF_INET, SOCK_STREAM, 0); #endif if (fd < 0) { set_strerror(sock, ne_errno); return -1; } #if defined(TCP_NODELAY) && defined(HAVE_SETSOCKOPT) && defined(IPPROTO_TCP) { /* Disable the Nagle algorithm; better to add write buffering * instead of doing this. */ int flag = 1; setsockopt(fd, IPPROTO_TCP, TCP_NODELAY, &flag, sizeof flag); } #endif if (raw_connect(fd, addr, ntohs(port))) { set_strerror(sock, ne_errno); ne_close(fd); return -1; } sock->fd = fd; return 0; } ne_inet_addr *ne_iaddr_make(ne_iaddr_type type, const unsigned char *raw) { ne_inet_addr *ia; #if !defined(AF_INET6) || !defined(USE_GETADDRINFO) /* fail if IPv6 address is given if IPv6 is not supported. */ if (type == ne_iaddr_ipv6) return NULL; #endif ia = ne_calloc(sizeof *ia); #ifdef USE_GETADDRINFO /* ai_protocol and ai_socktype aren't used by raw_connect so * ignore them here. (for now) */ if (type == ne_iaddr_ipv4) { struct sockaddr_in *in4 = ne_calloc(sizeof *in4); ia->ai_family = AF_INET; ia->ai_addr = (struct sockaddr *)in4; ia->ai_addrlen = sizeof *in4; in4->sin_family = AF_INET; memcpy(&in4->sin_addr.s_addr, raw, sizeof in4->sin_addr.s_addr); } #ifdef AF_INET6 else { struct sockaddr_in6 *in6 = ne_calloc(sizeof *in6); ia->ai_family = AF_INET6; ia->ai_addr = (struct sockaddr *)in6; ia->ai_addrlen = sizeof *in6; in6->sin6_family = AF_INET6; memcpy(&in6->sin6_addr, raw, sizeof in6->sin6_addr.s6_addr); } #endif #else /* !USE_GETADDRINFO */ memcpy(&ia->s_addr, raw, sizeof ia->s_addr); #endif return ia; } int ne_iaddr_cmp(const ne_inet_addr *i1, const ne_inet_addr *i2) { #ifdef USE_GETADDRINFO if (i1->ai_family != i2->ai_family) return i2->ai_family - i1->ai_family; if (i1->ai_family == AF_INET) { struct sockaddr_in *in1 = SACAST(in, i1->ai_addr), *in2 = SACAST(in, i2->ai_addr); return memcmp(&in1->sin_addr.s_addr, &in2->sin_addr.s_addr, sizeof in1->sin_addr.s_addr); } else if (i1->ai_family == AF_INET6) { struct sockaddr_in6 *in1 = SACAST(in6, i1->ai_addr), *in2 = SACAST(in6, i2->ai_addr); return memcmp(in1->sin6_addr.s6_addr, in2->sin6_addr.s6_addr, sizeof in1->sin6_addr.s6_addr); } else return -1; #else return memcmp(&i1->s_addr, &i2->s_addr, sizeof i1->s_addr); #endif } void ne_iaddr_free(ne_inet_addr *addr) { #ifdef USE_GETADDRINFO ne_free(addr->ai_addr); #endif ne_free(addr); } int ne_sock_accept(ne_socket *sock, int listener) { int fd = accept(listener, NULL, NULL); if (fd < 0) return -1; sock->fd = fd; return 0; } int ne_sock_fd(const ne_socket *sock) { return sock->fd; } void ne_sock_read_timeout(ne_socket *sock, int timeout) { sock->rdtimeout = timeout; } #ifdef NEON_SSL void ne_sock_switch_ssl(ne_socket *sock, void *ssl) { sock->ssl.ssl = ssl; sock->ops = &iofns_ossl; } int ne_sock_connect_ssl(ne_socket *sock, ne_ssl_context *ctx) { SSL *ssl; int ret; if (seed_ssl_prng()) { set_error(sock, _("SSL disabled due to lack of entropy")); return NE_SOCK_ERROR; } sock->ssl.ssl = ssl = SSL_new(ctx->ctx); if (!ssl) { set_error(sock, _("Could not create SSL structure")); return NE_SOCK_ERROR; } SSL_set_app_data(ssl, ctx); SSL_set_mode(ssl, SSL_MODE_AUTO_RETRY); SSL_set_fd(ssl, sock->fd); sock->ops = &iofns_ossl; if (ctx->sess) SSL_set_session(ssl, ctx->sess); ret = SSL_connect(ssl); if (ret != 1) { error_ossl(sock, ret); SSL_free(ssl); sock->ssl.ssl = NULL; return NE_SOCK_ERROR; } return 0; } ne_ssl_socket *ne_sock_sslsock(ne_socket *sock) { return &sock->ssl; } #endif const char *ne_sock_error(const ne_socket *sock) { return sock->error; } /* Closes given ne_socket */ int ne_sock_close(ne_socket *sock) { int ret; #ifdef NEON_SSL if (sock->ssl.ssl) { SSL_shutdown(sock->ssl.ssl); SSL_free(sock->ssl.ssl); } #endif if (sock->fd < 0) ret = 0; else ret = ne_close(sock->fd); ne_free(sock); return ret; } /* Returns HOST byte order port of given name */ int ne_service_lookup(const char *name) { struct servent *ent; ent = getservbyname(name, "tcp"); if (ent) return ntohs(ent->s_port); return 0; } tla-1.3.5+dfsg/src/libneon/src/ne_i18n.c0000644000175000017500000000240110457621776016362 0ustar useruser/* Internationalization of neon Copyright (C) 1999-2003, Joe Orton This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA */ void neon_i18n_init(void) { #if defined(ENABLE_NLS) && defined(NEON_IS_LIBRARY) /* if neon is build bundled in (i.e., not as a standalone * library), then there is probably no point in this, since the * messages won't be pointing in the right direction. * there's not really any point in doing this if neon is * a library since the messages aren't i18n'ized, but... */ bindtextdomain("neon", LOCALEDIR); #endif } tla-1.3.5+dfsg/src/libneon/src/ne_md5.c0000644000175000017500000003213710457621776016301 0ustar useruser/* md5.c - Functions to compute MD5 message digest of files or memory blocks according to the definition of MD5 in RFC 1321 from April 1992. Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. The GNU C Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with the GNU C Library; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* Written by Ulrich Drepper , 1995. */ #include "config.h" #include #if STDC_HEADERS || defined _LIBC # include # include #else #ifdef HAVE_STRING_H #include #endif # ifndef HAVE_MEMCPY # define memcpy(d, s, n) bcopy ((s), (d), (n)) # endif #endif #include /* for tolower */ #include "ne_md5.h" #include "ne_string.h" /* for NE_ASC2HEX */ #ifdef _LIBC # include # if __BYTE_ORDER == __BIG_ENDIAN # define WORDS_BIGENDIAN 1 # endif #endif #define md5_init_ctx ne_md5_init_ctx #define md5_process_block ne_md5_process_block #define md5_process_bytes ne_md5_process_bytes #define md5_finish_ctx ne_md5_finish_ctx #define md5_read_ctx ne_md5_read_ctx #define md5_stream ne_md5_stream #define md5_ctx ne_md5_ctx #ifdef WORDS_BIGENDIAN # define SWAP(n) \ (((n) << 24) | (((n) & 0xff00) << 8) | (((n) >> 8) & 0xff00) | ((n) >> 24)) #else # define SWAP(n) (n) #endif /* This array contains the bytes used to pad the buffer to the next 64-byte boundary. (RFC 1321, 3.1: Step 1) */ static const unsigned char fillbuf[64] = { 0x80, 0 /* , 0, 0, ... */ }; /* Initialize structure containing state of computation. (RFC 1321, 3.3: Step 3) */ void md5_init_ctx (ctx) struct md5_ctx *ctx; { ctx->A = 0x67452301; ctx->B = 0xefcdab89; ctx->C = 0x98badcfe; ctx->D = 0x10325476; ctx->total[0] = ctx->total[1] = 0; ctx->buflen = 0; } /* Put result from CTX in first 16 bytes following RESBUF. The result must be in little endian byte order. IMPORTANT: On some systems it is required that RESBUF is correctly aligned for a 32 bits value. */ void * md5_read_ctx (ctx, resbuf) const struct md5_ctx *ctx; void *resbuf; { ((md5_uint32 *) resbuf)[0] = SWAP (ctx->A); ((md5_uint32 *) resbuf)[1] = SWAP (ctx->B); ((md5_uint32 *) resbuf)[2] = SWAP (ctx->C); ((md5_uint32 *) resbuf)[3] = SWAP (ctx->D); return resbuf; } /* Process the remaining bytes in the internal buffer and the usual prolog according to the standard and write the result to RESBUF. IMPORTANT: On some systems it is required that RESBUF is correctly aligned for a 32 bits value. */ void * md5_finish_ctx (ctx, resbuf) struct md5_ctx *ctx; void *resbuf; { /* Take yet unprocessed bytes into account. */ md5_uint32 bytes = ctx->buflen; size_t pad; /* Now count remaining bytes. */ ctx->total[0] += bytes; if (ctx->total[0] < bytes) ++ctx->total[1]; pad = bytes >= 56 ? 64 + 56 - bytes : 56 - bytes; memcpy (&ctx->buffer[bytes], fillbuf, pad); /* Put the 64-bit file length in *bits* at the end of the buffer. */ *(md5_uint32 *) &ctx->buffer[bytes + pad] = SWAP (ctx->total[0] << 3); *(md5_uint32 *) &ctx->buffer[bytes + pad + 4] = SWAP ((ctx->total[1] << 3) | (ctx->total[0] >> 29)); /* Process last bytes. */ md5_process_block (ctx->buffer, bytes + pad + 8, ctx); return md5_read_ctx (ctx, resbuf); } /* Compute MD5 message digest for bytes read from STREAM. The resulting message digest number will be written into the 16 bytes beginning at RESBLOCK. */ int md5_stream (stream, resblock) FILE *stream; void *resblock; { /* Important: BLOCKSIZE must be a multiple of 64. */ #define BLOCKSIZE 4096 struct md5_ctx ctx; char buffer[BLOCKSIZE + 72]; size_t sum; /* Initialize the computation context. */ md5_init_ctx (&ctx); /* Iterate over full file contents. */ while (1) { /* We read the file in blocks of BLOCKSIZE bytes. One call of the computation function processes the whole buffer so that with the next round of the loop another block can be read. */ size_t n; sum = 0; /* Read block. Take care for partial reads. */ do { n = fread (buffer + sum, 1, BLOCKSIZE - sum, stream); sum += n; } while (sum < BLOCKSIZE && n != 0); if (n == 0 && ferror (stream)) return 1; /* If end of file is reached, end the loop. */ if (n == 0) break; /* Process buffer with BLOCKSIZE bytes. Note that BLOCKSIZE % 64 == 0 */ md5_process_block (buffer, BLOCKSIZE, &ctx); } /* Add the last bytes if necessary. */ if (sum > 0) md5_process_bytes (buffer, sum, &ctx); /* Construct result in desired memory. */ md5_finish_ctx (&ctx, resblock); return 0; } void md5_process_bytes (buffer, len, ctx) const void *buffer; size_t len; struct md5_ctx *ctx; { /* When we already have some bits in our internal buffer concatenate both inputs first. */ if (ctx->buflen != 0) { size_t left_over = ctx->buflen; size_t add = 128 - left_over > len ? len : 128 - left_over; memcpy (&ctx->buffer[left_over], buffer, add); ctx->buflen += add; if (left_over + add > 64) { md5_process_block (ctx->buffer, (left_over + add) & ~63, ctx); /* The regions in the following copy operation cannot overlap. */ memcpy (ctx->buffer, &ctx->buffer[(left_over + add) & ~63], (left_over + add) & 63); ctx->buflen = (left_over + add) & 63; } buffer = (const char *) buffer + add; len -= add; } /* Process available complete blocks. */ if (len > 64) { md5_process_block (buffer, len & ~63, ctx); buffer = (const char *) buffer + (len & ~63); len &= 63; } /* Move remaining bytes in internal buffer. */ if (len > 0) { memcpy (ctx->buffer, buffer, len); ctx->buflen = len; } } /* These are the four functions used in the four steps of the MD5 algorithm and defined in the RFC 1321. The first function is a little bit optimized (as found in Colin Plumbs public domain implementation). */ /* #define FF(b, c, d) ((b & c) | (~b & d)) */ #define FF(b, c, d) (d ^ (b & (c ^ d))) #define FG(b, c, d) FF (d, b, c) #define FH(b, c, d) (b ^ c ^ d) #define FI(b, c, d) (c ^ (b | ~d)) /* Process LEN bytes of BUFFER, accumulating context into CTX. It is assumed that LEN % 64 == 0. */ void md5_process_block (buffer, len, ctx) const void *buffer; size_t len; struct md5_ctx *ctx; { md5_uint32 correct_words[16]; const unsigned char *words = buffer; const unsigned char *endp = words + len; md5_uint32 A = ctx->A; md5_uint32 B = ctx->B; md5_uint32 C = ctx->C; md5_uint32 D = ctx->D; /* First increment the byte count. RFC 1321 specifies the possible length of the file up to 2^64 bits. Here we only compute the number of bytes. Do a double word increment. */ ctx->total[0] += len; if (ctx->total[0] < len) ++ctx->total[1]; /* Process all bytes in the buffer with 64 bytes in each round of the loop. */ while (words < endp) { md5_uint32 *cwp = correct_words; md5_uint32 A_save = A; md5_uint32 B_save = B; md5_uint32 C_save = C; md5_uint32 D_save = D; /* First round: using the given function, the context and a constant the next context is computed. Because the algorithms processing unit is a 32-bit word and it is determined to work on words in little endian byte order we perhaps have to change the byte order before the computation. To reduce the work for the next steps we store the swapped words in the array CORRECT_WORDS. */ #define OP(a, b, c, d, s, T) \ do \ { \ md5_uint32 WORD_ = (md5_uint32)words[0] | ((md5_uint32)words[1] << 8) \ | ((md5_uint32)words[2] << 16) | ((md5_uint32)words[3] << 24); \ a += FF (b, c, d) + (*cwp++ = WORD_) + T; \ words += 4; \ CYCLIC (a, s); \ a += b; \ } \ while (0) /* It is unfortunate that C does not provide an operator for cyclic rotation. Hope the C compiler is smart enough. */ #define CYCLIC(w, s) (w = (w << s) | (w >> (32 - s))) /* Before we start, one word to the strange constants. They are defined in RFC 1321 as T[i] = (int) (4294967296.0 * fabs (sin (i))), i=1..64 */ /* Round 1. */ OP (A, B, C, D, 7, 0xd76aa478); OP (D, A, B, C, 12, 0xe8c7b756); OP (C, D, A, B, 17, 0x242070db); OP (B, C, D, A, 22, 0xc1bdceee); OP (A, B, C, D, 7, 0xf57c0faf); OP (D, A, B, C, 12, 0x4787c62a); OP (C, D, A, B, 17, 0xa8304613); OP (B, C, D, A, 22, 0xfd469501); OP (A, B, C, D, 7, 0x698098d8); OP (D, A, B, C, 12, 0x8b44f7af); OP (C, D, A, B, 17, 0xffff5bb1); OP (B, C, D, A, 22, 0x895cd7be); OP (A, B, C, D, 7, 0x6b901122); OP (D, A, B, C, 12, 0xfd987193); OP (C, D, A, B, 17, 0xa679438e); OP (B, C, D, A, 22, 0x49b40821); /* For the second to fourth round we have the possibly swapped words in CORRECT_WORDS. Redefine the macro to take an additional first argument specifying the function to use. */ #undef OP #define OP(f, a, b, c, d, k, s, T) \ do \ { \ a += f (b, c, d) + correct_words[k] + T; \ CYCLIC (a, s); \ a += b; \ } \ while (0) /* Round 2. */ OP (FG, A, B, C, D, 1, 5, 0xf61e2562); OP (FG, D, A, B, C, 6, 9, 0xc040b340); OP (FG, C, D, A, B, 11, 14, 0x265e5a51); OP (FG, B, C, D, A, 0, 20, 0xe9b6c7aa); OP (FG, A, B, C, D, 5, 5, 0xd62f105d); OP (FG, D, A, B, C, 10, 9, 0x02441453); OP (FG, C, D, A, B, 15, 14, 0xd8a1e681); OP (FG, B, C, D, A, 4, 20, 0xe7d3fbc8); OP (FG, A, B, C, D, 9, 5, 0x21e1cde6); OP (FG, D, A, B, C, 14, 9, 0xc33707d6); OP (FG, C, D, A, B, 3, 14, 0xf4d50d87); OP (FG, B, C, D, A, 8, 20, 0x455a14ed); OP (FG, A, B, C, D, 13, 5, 0xa9e3e905); OP (FG, D, A, B, C, 2, 9, 0xfcefa3f8); OP (FG, C, D, A, B, 7, 14, 0x676f02d9); OP (FG, B, C, D, A, 12, 20, 0x8d2a4c8a); /* Round 3. */ OP (FH, A, B, C, D, 5, 4, 0xfffa3942); OP (FH, D, A, B, C, 8, 11, 0x8771f681); OP (FH, C, D, A, B, 11, 16, 0x6d9d6122); OP (FH, B, C, D, A, 14, 23, 0xfde5380c); OP (FH, A, B, C, D, 1, 4, 0xa4beea44); OP (FH, D, A, B, C, 4, 11, 0x4bdecfa9); OP (FH, C, D, A, B, 7, 16, 0xf6bb4b60); OP (FH, B, C, D, A, 10, 23, 0xbebfbc70); OP (FH, A, B, C, D, 13, 4, 0x289b7ec6); OP (FH, D, A, B, C, 0, 11, 0xeaa127fa); OP (FH, C, D, A, B, 3, 16, 0xd4ef3085); OP (FH, B, C, D, A, 6, 23, 0x04881d05); OP (FH, A, B, C, D, 9, 4, 0xd9d4d039); OP (FH, D, A, B, C, 12, 11, 0xe6db99e5); OP (FH, C, D, A, B, 15, 16, 0x1fa27cf8); OP (FH, B, C, D, A, 2, 23, 0xc4ac5665); /* Round 4. */ OP (FI, A, B, C, D, 0, 6, 0xf4292244); OP (FI, D, A, B, C, 7, 10, 0x432aff97); OP (FI, C, D, A, B, 14, 15, 0xab9423a7); OP (FI, B, C, D, A, 5, 21, 0xfc93a039); OP (FI, A, B, C, D, 12, 6, 0x655b59c3); OP (FI, D, A, B, C, 3, 10, 0x8f0ccc92); OP (FI, C, D, A, B, 10, 15, 0xffeff47d); OP (FI, B, C, D, A, 1, 21, 0x85845dd1); OP (FI, A, B, C, D, 8, 6, 0x6fa87e4f); OP (FI, D, A, B, C, 15, 10, 0xfe2ce6e0); OP (FI, C, D, A, B, 6, 15, 0xa3014314); OP (FI, B, C, D, A, 13, 21, 0x4e0811a1); OP (FI, A, B, C, D, 4, 6, 0xf7537e82); OP (FI, D, A, B, C, 11, 10, 0xbd3af235); OP (FI, C, D, A, B, 2, 15, 0x2ad7d2bb); OP (FI, B, C, D, A, 9, 21, 0xeb86d391); /* Add the starting values of the context. */ A += A_save; B += B_save; C += C_save; D += D_save; } /* Put checksum in context given as argument. */ ctx->A = A; ctx->B = B; ctx->C = C; ctx->D = D; } /* Writes the ASCII representation of the MD5 digest into the * given buffer, which must be at least 33 characters long. */ void ne_md5_to_ascii(const unsigned char md5_buf[16], char *buffer) { int count; for (count = 0; count<16; count++) { buffer[count*2] = NE_HEX2ASC(md5_buf[count] >> 4); buffer[count*2+1] = NE_HEX2ASC(md5_buf[count] & 0x0f); } buffer[32] = '\0'; } /* Reads the ASCII representation of an MD5 digest. The buffer must * be at least 32 characters long. */ void ne_ascii_to_md5(const char *buffer, unsigned char md5_buf[16]) { int count; for (count = 0; count<16; count++) { md5_buf[count] = ((NE_ASC2HEX(buffer[count*2])) << 4) | NE_ASC2HEX(buffer[count*2+1]); } } tla-1.3.5+dfsg/src/libneon/src/ne_alloc.h0000644000175000017500000000352010457621776016705 0ustar useruser/* Replacement memory allocation handling etc. Copyright (C) 1999-2002, Joe Orton This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA */ #ifndef NE_ALLOC_H #define NE_ALLOC_H #ifdef WIN32 #include #else #include #endif #include "ne_defs.h" BEGIN_NEON_DECLS /* Set callback which is called if malloc() returns NULL. */ void ne_oom_callback(void (*callback)(void)); #ifndef NEON_MEMLEAK /* Replacements for standard C library memory allocation functions, * which never return NULL. If the C library malloc() returns NULL, * neon will abort(); calling an OOM callback beforehand if one is * registered. The C library will only ever return NULL if the * operating system does not use optimistic memory allocation. */ void *ne_malloc(size_t size); void *ne_calloc(size_t size); void *ne_realloc(void *ptr, size_t s); char *ne_strdup(const char *s); char *ne_strndup(const char *s, size_t n); #define ne_free free #endif /* Handy macro to free things: takes an lvalue, and sets to NULL * afterwards. */ #define NE_FREE(x) do { if ((x) != NULL) ne_free((x)); (x) = NULL; } while (0) END_NEON_DECLS #endif /* NE_ALLOC_H */ tla-1.3.5+dfsg/src/libneon/src/ne_compress.h0000644000175000017500000000326610457621776017455 0ustar useruser/* Compressed HTPT request/response Handling Copyright (C) 2001, Joe Orton This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA */ #ifndef NE_COMPRESS_H #define NE_COMPRESS_H #include "ne_request.h" typedef struct ne_decompress_s ne_decompress; /* Call this to register a 'reader' callback which will be passed * blocks of response body (if the 'acceptance' callback is * successful). If the response body is returned compressed by the * server, this reader will receive UNCOMPRESSED blocks. * * Returns pointer to context object which must be passed to * ne_decompress_destroy after the request has been dispatched, to * free any internal state. */ ne_decompress *ne_decompress_reader(ne_request *req, ne_accept_response accpt, ne_block_reader rdr, void *userdata); /* Free's up internal state. Returns non-zero if errors occured during * decompression: the session error string will have the error. */ int ne_decompress_destroy(ne_decompress *ctx); #endif /* NE_COMPRESS_H */ tla-1.3.5+dfsg/src/libneon/src/ne_cookies.h0000644000175000017500000000264610457621776017257 0ustar useruser/* HTTP Request Handling Copyright (C) 1999-2002, Joe Orton This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA */ #ifndef NE_COOKIES_H #define NE_COOKIES_H #include "ne_request.h" #include "ne_defs.h" BEGIN_NEON_DECLS struct ne_cookie_s; typedef struct ne_cookie_s ne_cookie; struct ne_cookie_s { char *name, *value; unsigned int secure:1; unsigned int discard:1; char *domain, *path; time_t expiry; /* time at which the cookie expires */ ne_cookie *next; }; typedef struct { ne_cookie *cookies; } ne_cookie_cache; /* Register cookie handling for given session using given cache. */ void ne_cookie_register(ne_session *sess, ne_cookie_cache *cache); END_NEON_DECLS #endif /* NE_COOKIES_H */ tla-1.3.5+dfsg/src/libneon/src/ne_acl.c0000644000175000017500000000671710457621776016360 0ustar useruser/* Access control Copyright (C) 2001, Joe Orton This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA */ /* Contributed by Arun Garg */ #include "config.h" #include #ifdef HAVE_STRING_H #include #endif #ifdef HAVE_UNISTD_H #include #endif #ifdef HAVE_STDLIB_H #include #endif #include "ne_request.h" #include "ne_locks.h" #include "ne_alloc.h" #include "ne_string.h" #include "ne_acl.h" #include "ne_uri.h" #include "ne_xml.h" /* for NE_XML_MEDIA_TYPE */ static ne_buffer *acl_body(ne_acl_entry *right, int count) { ne_buffer *body = ne_buffer_create(); int m; ne_buffer_zappend(body, "" EOL "" EOL); for (m = 0; m < count; m++) { const char *type; type = (right[m].type == ne_acl_grant ? "grant" : "deny"); ne_buffer_concat(body, "" EOL "", NULL); switch (right[m].apply) { case ne_acl_all: ne_buffer_zappend(body, "" EOL); break; case ne_acl_property: ne_buffer_concat(body, "<", right[m].principal, "/>" EOL, NULL); break; case ne_acl_href: ne_buffer_concat(body, "", right[m].principal, "" EOL, NULL); break; } ne_buffer_concat(body, "" EOL "<", type, ">" EOL, NULL); if (right[m].read == 0) ne_buffer_concat(body, "" "" "" EOL, NULL); if (right[m].read_acl == 0) ne_buffer_concat(body, "" "" "" EOL, NULL); if (right[m].write == 0) ne_buffer_concat(body, "" "" "" EOL, NULL); if (right[m].write_acl == 0) ne_buffer_concat(body, "" "" "" EOL, NULL); if (right[m].read_cuprivset == 0) ne_buffer_concat(body, "" "" "" EOL, NULL); ne_buffer_concat(body, "" EOL, NULL); ne_buffer_zappend(body, "" EOL); } ne_buffer_zappend(body, "" EOL); return body; } int ne_acl_set(ne_session *sess, const char *uri, ne_acl_entry *entries, int numentries) { int ret; ne_request *req = ne_request_create(sess, "ACL", uri); ne_buffer *body = acl_body(entries, numentries); #ifdef USE_DAV_LOCKS ne_lock_using_resource(req, uri, 0); #endif ne_set_request_body_buffer(req, body->data, ne_buffer_size(body)); ne_add_request_header(req, "Content-Type", NE_XML_MEDIA_TYPE); ret = ne_request_dispatch(req); ne_buffer_destroy(body); if (ret == NE_OK && ne_get_status(req)->code == 207) { ret = NE_ERROR; } ne_request_destroy(req); return ret; } tla-1.3.5+dfsg/src/libneon/src/ne_privssl.h0000644000175000017500000000241310457621776017315 0ustar useruser/* SSL interface definitions internal to neon. Copyright (C) 2003, Joe Orton This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA */ /* THIS IS NOT A PUBLIC INTERFACE. You CANNOT include this header file * from an application. */ #ifndef NE_PRIVSSL_H #define NE_PRIVSSL_H /* This is the private interface between ne_socket and ne_openssl. */ #ifdef NEON_SSL #include #include "ne_ssl.h" /* SSL context */ struct ne_ssl_context_s { SSL_CTX *ctx; SSL_SESSION *sess; }; struct ne_ssl_socket_s { SSL *ssl; }; #endif /* NEON_SSL */ #endif tla-1.3.5+dfsg/src/libneon/src/ne_redirect.h0000644000175000017500000000265010457621776017417 0ustar useruser/* HTTP-redirect support Copyright (C) 1999-2002, Joe Orton This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA */ #ifndef NE_REDIRECT_H #define NE_REDIRECT_H #include "ne_request.h" BEGIN_NEON_DECLS /* Register redirect handling: if a redirection response is given, the * request will fail with the NE_REDIRECT code, and the destinsation * of the redirect can be retrieved using ne_redirect_location(). */ void ne_redirect_register(ne_session *sess); /* Returns location of last redirect. Will return NULL if no redirect * has been encountered for given session, or the last redirect * encountered could not be parsed. */ const ne_uri *ne_redirect_location(ne_session *sess); END_NEON_DECLS #endif /* NE_REDIRECT_H */ tla-1.3.5+dfsg/src/libneon/src/ne_dates.c0000644000175000017500000001415210457621776016711 0ustar useruser/* Date manipulation routines Copyright (C) 1999-2004, Joe Orton This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA */ #include "config.h" #include #include #ifdef HAVE_STDLIB_H #include #endif #include #ifdef HAVE_STRING_H #include #endif #include "ne_alloc.h" #include "ne_dates.h" #include "ne_utils.h" /* Generic date manipulation routines. */ /* ISO8601: 2001-01-01T12:30:00Z */ #define ISO8601_FORMAT_Z "%04d-%02d-%02dT%02d:%02d:%lfZ" #define ISO8601_FORMAT_M "%04d-%02d-%02dT%02d:%02d:%lf-%02d:%02d" #define ISO8601_FORMAT_P "%04d-%02d-%02dT%02d:%02d:%lf+%02d:%02d" /* RFC1123: Sun, 06 Nov 1994 08:49:37 GMT */ #define RFC1123_FORMAT "%3s, %02d %3s %4d %02d:%02d:%02d GMT" /* RFC850: Sunday, 06-Nov-94 08:49:37 GMT */ #define RFC1036_FORMAT "%10s %2d-%3s-%2d %2d:%2d:%2d GMT" /* asctime: Wed Jun 30 21:49:08 1993 */ #define ASCTIME_FORMAT "%3s %3s %2d %2d:%2d:%2d %4d" static const char *rfc1123_weekdays[7] = { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" }; static const char *short_months[12] = { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" }; #if defined(HAVE_STRUCT_TM_TM_GMTOFF) #define GMTOFF(t) ((t).tm_gmtoff) #else /* FIXME: work out the offset anyway. */ #define GMTOFF(t) (0) #endif /* Returns the time/date GMT, in RFC1123-type format: eg * Sun, 06 Nov 1994 08:49:37 GMT. */ char *ne_rfc1123_date(time_t anytime) { struct tm *gmt; char *ret; gmt = gmtime(&anytime); if (gmt == NULL) return NULL; ret = ne_malloc(29 + 1); /* dates are 29 chars long */ /* it goes: Sun, 06 Nov 1994 08:49:37 GMT */ ne_snprintf(ret, 30, RFC1123_FORMAT, rfc1123_weekdays[gmt->tm_wday], gmt->tm_mday, short_months[gmt->tm_mon], 1900 + gmt->tm_year, gmt->tm_hour, gmt->tm_min, gmt->tm_sec); return ret; } /* Takes an ISO-8601-formatted date string and returns the time_t. * Returns (time_t)-1 if the parse fails. */ time_t ne_iso8601_parse(const char *date) { struct tm gmt = {0}; int off_hour, off_min; double sec; off_t fix; int n; /* it goes: ISO8601: 2001-01-01T12:30:00+03:30 */ if ((n = sscanf(date, ISO8601_FORMAT_P, &gmt.tm_year, &gmt.tm_mon, &gmt.tm_mday, &gmt.tm_hour, &gmt.tm_min, &sec, &off_hour, &off_min)) == 8) { gmt.tm_sec = (int)sec; fix = - off_hour * 3600 - off_min * 60; } /* it goes: ISO8601: 2001-01-01T12:30:00-03:30 */ else if ((n = sscanf(date, ISO8601_FORMAT_M, &gmt.tm_year, &gmt.tm_mon, &gmt.tm_mday, &gmt.tm_hour, &gmt.tm_min, &sec, &off_hour, &off_min)) == 8) { gmt.tm_sec = (int)sec; fix = off_hour * 3600 + off_min * 60; } /* it goes: ISO8601: 2001-01-01T12:30:00Z */ else if ((n = sscanf(date, ISO8601_FORMAT_Z, &gmt.tm_year, &gmt.tm_mon, &gmt.tm_mday, &gmt.tm_hour, &gmt.tm_min, &sec)) == 6) { gmt.tm_sec = (int)sec; fix = 0; } else { return (time_t)-1; } gmt.tm_year -= 1900; gmt.tm_isdst = -1; gmt.tm_mon--; return mktime(&gmt) + fix + GMTOFF(gmt); } /* Takes an RFC1123-formatted date string and returns the time_t. * Returns (time_t)-1 if the parse fails. */ time_t ne_rfc1123_parse(const char *date) { struct tm gmt = {0}; char wkday[4], mon[4]; int n; /* it goes: Sun, 06 Nov 1994 08:49:37 GMT */ n = sscanf(date, RFC1123_FORMAT, wkday, &gmt.tm_mday, mon, &gmt.tm_year, &gmt.tm_hour, &gmt.tm_min, &gmt.tm_sec); /* Is it portable to check n==7 here? */ gmt.tm_year -= 1900; for (n=0; n<12; n++) if (strcmp(mon, short_months[n]) == 0) break; /* tm_mon comes out as 12 if the month is corrupt, which is desired, * since the mktime will then fail */ gmt.tm_mon = n; gmt.tm_isdst = -1; return mktime(&gmt) + GMTOFF(gmt); } /* Takes a string containing a RFC1036-style date and returns the time_t */ time_t ne_rfc1036_parse(const char *date) { struct tm gmt = {0}; int n; char wkday[11], mon[4]; /* RFC850/1036 style dates: Sunday, 06-Nov-94 08:49:37 GMT */ n = sscanf(date, RFC1036_FORMAT, wkday, &gmt.tm_mday, mon, &gmt.tm_year, &gmt.tm_hour, &gmt.tm_min, &gmt.tm_sec); if (n != 7) { return (time_t)-1; } /* portable to check n here? */ for (n=0; n<12; n++) if (strcmp(mon, short_months[n]) == 0) break; /* tm_mon comes out as 12 if the month is corrupt, which is desired, * since the mktime will then fail */ /* Defeat Y2K bug. */ if (gmt.tm_year < 50) gmt.tm_year += 100; gmt.tm_mon = n; gmt.tm_isdst = -1; return mktime(&gmt) + GMTOFF(gmt); } /* (as)ctime dates are like: * Wed Jun 30 21:49:08 1993 */ time_t ne_asctime_parse(const char *date) { struct tm gmt = {0}; int n; char wkday[4], mon[4]; n = sscanf(date, ASCTIME_FORMAT, wkday, mon, &gmt.tm_mday, &gmt.tm_hour, &gmt.tm_min, &gmt.tm_sec, &gmt.tm_year); /* portable to check n here? */ for (n=0; n<12; n++) if (strcmp(mon, short_months[n]) == 0) break; /* tm_mon comes out as 12 if the month is corrupt, which is desired, * since the mktime will then fail */ gmt.tm_mon = n; gmt.tm_isdst = -1; return mktime(&gmt) + GMTOFF(gmt); } /* HTTP-date parser */ time_t ne_httpdate_parse(const char *date) { time_t tmp; tmp = ne_rfc1123_parse(date); if (tmp == -1) { tmp = ne_rfc1036_parse(date); if (tmp == -1) tmp = ne_asctime_parse(date); } return tmp; } tla-1.3.5+dfsg/src/libneon/src/ne_locks.c0000644000175000017500000005277510457621776016741 0ustar useruser/* WebDAV Class 2 locking operations Copyright (C) 1999-2004, Joe Orton This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA */ #include "config.h" #ifdef HAVE_STDLIB_H #include #endif #ifdef HAVE_STRING_H #include #endif #ifdef HAVE_LIMITS_H #include #endif #include /* for isdigit() */ #include "ne_alloc.h" #include "ne_request.h" #include "ne_xml.h" #include "ne_locks.h" #include "ne_uri.h" #include "ne_basic.h" #include "ne_props.h" #include "ne_207.h" #include "ne_i18n.h" #define HOOK_ID "http://webdav.org/neon/hooks/webdav-locking" /* A list of lock objects. */ struct lock_list { struct ne_lock *lock; struct lock_list *next, *prev; }; struct ne_lock_store_s { struct lock_list *locks; struct lock_list *cursor; /* current position in 'locks' */ }; struct lh_req_cookie { const ne_lock_store *store; struct lock_list *submit; }; /* Context for PROPFIND/lockdiscovery callbacks */ struct discover_ctx { ne_session *session; ne_lock_result results; void *userdata; ne_buffer *cdata; }; /* Context for handling LOCK response */ struct lock_ctx { struct ne_lock active; /* activelock */ char *token; /* the token we're after. */ int found; ne_buffer *cdata; }; /* use the "application" state space. */ #define ELM_LOCK_FIRST (NE_PROPS_STATE_TOP + 66) #define ELM_lockdiscovery (ELM_LOCK_FIRST) #define ELM_activelock (ELM_LOCK_FIRST + 1) #define ELM_lockscope (ELM_LOCK_FIRST + 2) #define ELM_locktype (ELM_LOCK_FIRST + 3) #define ELM_depth (ELM_LOCK_FIRST + 4) #define ELM_owner (ELM_LOCK_FIRST + 5) #define ELM_timeout (ELM_LOCK_FIRST + 6) #define ELM_locktoken (ELM_LOCK_FIRST + 7) #define ELM_lockinfo (ELM_LOCK_FIRST + 8) #define ELM_write (ELM_LOCK_FIRST + 9) #define ELM_exclusive (ELM_LOCK_FIRST + 10) #define ELM_shared (ELM_LOCK_FIRST + 11) #define ELM_href (ELM_LOCK_FIRST + 12) #define ELM_prop (NE_207_STATE_PROP) static const struct ne_xml_idmap element_map[] = { #define ELM(x) { "DAV:", #x, ELM_ ## x } ELM(lockdiscovery), ELM(activelock), ELM(prop), ELM(lockscope), ELM(locktype), ELM(depth), ELM(owner), ELM(timeout), ELM(locktoken), ELM(lockinfo), ELM(lockscope), ELM(locktype), ELM(write), ELM(exclusive), ELM(shared), ELM(href) /* no "lockentry" */ #undef ELM }; static const ne_propname lock_props[] = { { "DAV:", "lockdiscovery" }, { NULL } }; /* this simply registers the accessor for the function. */ static void lk_create(ne_request *req, void *session, const char *method, const char *uri) { struct lh_req_cookie *lrc = ne_malloc(sizeof *lrc); lrc->store = session; lrc->submit = NULL; ne_set_request_private(req, HOOK_ID, lrc); } static void lk_pre_send(ne_request *r, void *userdata, ne_buffer *req) { struct lh_req_cookie *lrc = ne_get_request_private(r, HOOK_ID); if (lrc->submit != NULL) { struct lock_list *item; /* Add in the If header */ ne_buffer_zappend(req, "If:"); for (item = lrc->submit; item != NULL; item = item->next) { char *uri = ne_uri_unparse(&item->lock->uri); ne_buffer_concat(req, " <", uri, "> (<", item->lock->token, ">)", NULL); ne_free(uri); } ne_buffer_zappend(req, EOL); } } /* Insert 'lock' into lock list *list. */ static void insert_lock(struct lock_list **list, struct ne_lock *lock) { struct lock_list *item = ne_malloc(sizeof *item); if (*list != NULL) { (*list)->prev = item; } item->prev = NULL; item->next = *list; item->lock = lock; *list = item; } static void free_list(struct lock_list *list, int destroy) { struct lock_list *next; while (list != NULL) { next = list->next; if (destroy) ne_lock_destroy(list->lock); ne_free(list); list = next; } } static void lk_destroy(ne_request *req, void *userdata) { struct lh_req_cookie *lrc = ne_get_request_private(req, HOOK_ID); free_list(lrc->submit, 0); ne_free(lrc); } void ne_lockstore_destroy(ne_lock_store *store) { free_list(store->locks, 1); ne_free(store); } ne_lock_store *ne_lockstore_create(void) { return ne_calloc(sizeof(ne_lock_store)); } #define CURSOR_RET(s) ((s)->cursor?(s)->cursor->lock:NULL) struct ne_lock *ne_lockstore_first(ne_lock_store *store) { store->cursor = store->locks; return CURSOR_RET(store); } struct ne_lock *ne_lockstore_next(ne_lock_store *store) { store->cursor = store->cursor->next; return CURSOR_RET(store); } void ne_lockstore_register(ne_lock_store *store, ne_session *sess) { /* Register the hooks */ ne_hook_create_request(sess, lk_create, store); ne_hook_pre_send(sess, lk_pre_send, store); ne_hook_destroy_request(sess, lk_destroy, store); } /* Submit the given lock for the given URI */ static void submit_lock(struct lh_req_cookie *lrc, struct ne_lock *lock) { struct lock_list *item; /* Check for dups */ for (item = lrc->submit; item != NULL; item = item->next) { if (strcasecmp(item->lock->token, lock->token) == 0) return; } insert_lock(&lrc->submit, lock); } struct ne_lock *ne_lockstore_findbyuri(ne_lock_store *store, const ne_uri *uri) { struct lock_list *cur; for (cur = store->locks; cur != NULL; cur = cur->next) { if (ne_uri_cmp(&cur->lock->uri, uri) == 0) { return cur->lock; } } return NULL; } void ne_lock_using_parent(ne_request *req, const char *path) { struct lh_req_cookie *lrc = ne_get_request_private(req, HOOK_ID); ne_uri u; struct lock_list *item; char *parent; if (lrc == NULL) return; parent = ne_path_parent(path); if (parent == NULL) return; u.authinfo = NULL; ne_fill_server_uri(ne_get_session(req), &u); for (item = lrc->store->locks; item != NULL; item = item->next) { /* Only care about locks which are on this server. */ u.path = item->lock->uri.path; if (ne_uri_cmp(&u, &item->lock->uri)) continue; /* This lock is needed if it is an infinite depth lock which * covers the parent, or a lock on the parent itself. */ if ((item->lock->depth == NE_DEPTH_INFINITE && ne_path_childof(item->lock->uri.path, parent)) || ne_path_compare(item->lock->uri.path, parent) == 0) { NE_DEBUG(NE_DBG_LOCKS, "Locked parent, %s on %s\n", item->lock->token, item->lock->uri.path); submit_lock(lrc, item->lock); } } u.path = parent; /* handy: makes u.path valid and ne_free(parent). */ ne_uri_free(&u); } void ne_lock_using_resource(ne_request *req, const char *uri, int depth) { struct lh_req_cookie *lrc = ne_get_request_private(req, HOOK_ID); struct lock_list *item; int match; if (lrc == NULL) return; /* Iterate over the list of stored locks to see if any of them * apply to this resource */ for (item = lrc->store->locks; item != NULL; item = item->next) { match = 0; if (depth == NE_DEPTH_INFINITE && ne_path_childof(uri, item->lock->uri.path)) { /* Case 1: this is a depth-infinity request which will * modify a lock somewhere inside the collection. */ NE_DEBUG(NE_DBG_LOCKS, "Has child: %s\n", item->lock->token); match = 1; } else if (ne_path_compare(uri, item->lock->uri.path) == 0) { /* Case 2: this request is directly on a locked resource */ NE_DEBUG(NE_DBG_LOCKS, "Has direct lock: %s\n", item->lock->token); match = 1; } else if (item->lock->depth == NE_DEPTH_INFINITE && ne_path_childof(item->lock->uri.path, uri)) { /* Case 3: there is a higher-up infinite-depth lock which * covers the resource that this request will modify. */ NE_DEBUG(NE_DBG_LOCKS, "Is child of: %s\n", item->lock->token); match = 1; } if (match) { submit_lock(lrc, item->lock); } } } void ne_lockstore_add(ne_lock_store *store, struct ne_lock *lock) { insert_lock(&store->locks, lock); } void ne_lockstore_remove(ne_lock_store *store, struct ne_lock *lock) { struct lock_list *item; /* Find the lock */ for (item = store->locks; item != NULL; item = item->next) if (item->lock == lock) break; if (item->prev != NULL) { item->prev->next = item->next; } else { store->locks = item->next; } if (item->next != NULL) { item->next->prev = item->prev; } ne_free(item); } struct ne_lock *ne_lock_copy(const struct ne_lock *lock) { struct ne_lock *ret = ne_calloc(sizeof *ret); ret->uri.path = ne_strdup(lock->uri.path); ret->uri.host = ne_strdup(lock->uri.host); ret->uri.scheme = ne_strdup(lock->uri.scheme); ret->uri.port = lock->uri.port; ret->token = ne_strdup(lock->token); ret->depth = lock->depth; ret->type = lock->type; ret->scope = lock->scope; if (lock->owner) ret->owner = ne_strdup(lock->owner); ret->timeout = lock->timeout; return ret; } struct ne_lock *ne_lock_create(void) { struct ne_lock *lock = ne_calloc(sizeof *lock); lock->depth = NE_DEPTH_ZERO; lock->type = ne_locktype_write; lock->scope = ne_lockscope_exclusive; lock->timeout = NE_TIMEOUT_INVALID; return lock; } void ne_lock_free(struct ne_lock *lock) { ne_uri_free(&lock->uri); NE_FREE(lock->owner); NE_FREE(lock->token); } void ne_lock_destroy(struct ne_lock *lock) { ne_lock_free(lock); ne_free(lock); } int ne_unlock(ne_session *sess, const struct ne_lock *lock) { ne_request *req = ne_request_create(sess, "UNLOCK", lock->uri.path); int ret; ne_print_request_header(req, "Lock-Token", "<%s>", lock->token); /* UNLOCK of a lock-null resource removes the resource from the * parent collection; so an UNLOCK may modify the parent * collection. (somewhat counter-intuitive, and not easily derived * from 2518.) */ ne_lock_using_parent(req, lock->uri.path); ret = ne_request_dispatch(req); if (ret == NE_OK && ne_get_status(req)->klass == 2) { ret = NE_OK; } else { ret = NE_ERROR; } ne_request_destroy(req); return ret; } static int parse_depth(const char *depth) { if (strcasecmp(depth, "infinity") == 0) { return NE_DEPTH_INFINITE; } else if (isdigit(depth[0])) { return atoi(depth); } else { return -1; } } static long parse_timeout(const char *timeout) { if (strcasecmp(timeout, "infinite") == 0) { return NE_TIMEOUT_INFINITE; } else if (strncasecmp(timeout, "Second-", 7) == 0) { long to = strtol(timeout+7, NULL, 10); if (to == LONG_MIN || to == LONG_MAX) return NE_TIMEOUT_INVALID; return to; } else { return NE_TIMEOUT_INVALID; } } static void discover_results(void *userdata, const char *href, const ne_prop_result_set *set) { struct discover_ctx *ctx = userdata; struct ne_lock *lock = ne_propset_private(set); const ne_status *status = ne_propset_status(set, &lock_props[0]); /* Require at least that the lock has a token. */ if (lock->token) { if (status && status->klass != 2) { ctx->results(ctx->userdata, NULL, lock->uri.path, status); } else { ctx->results(ctx->userdata, lock, lock->uri.path, NULL); } } else if (status) { ctx->results(ctx->userdata, NULL, href, status); } ne_lock_destroy(lock); NE_DEBUG(NE_DBG_LOCKS, "End of response for %s\n", href); } static int end_element_common(struct ne_lock *l, int state, const char *cdata) { switch (state) { case ELM_write: l->type = ne_locktype_write; break; case ELM_exclusive: l->scope = ne_lockscope_exclusive; break; case ELM_shared: l->scope = ne_lockscope_shared; break; case ELM_depth: NE_DEBUG(NE_DBG_LOCKS, "Got depth: %s\n", cdata); l->depth = parse_depth(cdata); if (l->depth == -1) { return -1; } break; case ELM_timeout: NE_DEBUG(NE_DBG_LOCKS, "Got timeout: %s\n", cdata); l->timeout = parse_timeout(cdata); if (l->timeout == NE_TIMEOUT_INVALID) { return -1; } break; case ELM_owner: l->owner = strdup(cdata); break; case ELM_href: l->token = strdup(cdata); break; } return 0; } /* End-element handler for lock discovery PROPFIND response */ static int end_element_ldisc(void *userdata, int state, const char *nspace, const char *name) { struct ne_lock *lock = ne_propfind_current_private(userdata); struct discover_ctx *ctx = userdata; return end_element_common(lock, state, ctx->cdata->data); } static inline int can_accept(int parent, int id) { return (parent == NE_XML_STATEROOT && id == ELM_prop) || (parent == ELM_prop && id == ELM_lockdiscovery) || (parent == ELM_lockdiscovery && id == ELM_activelock) || (parent == ELM_activelock && (id == ELM_lockscope || id == ELM_locktype || id == ELM_depth || id == ELM_owner || id == ELM_timeout || id == ELM_locktoken)) || (parent == ELM_lockscope && (id == ELM_exclusive || id == ELM_shared)) || (parent == ELM_locktype && id == ELM_write) || (parent == ELM_locktoken && id == ELM_href); } static int ld_startelm(void *userdata, int parent, const char *nspace, const char *name, const char **atts) { struct discover_ctx *ctx = userdata; int id = ne_xml_mapid(element_map, NE_XML_MAPLEN(element_map), nspace, name); ne_buffer_clear(ctx->cdata); if (can_accept(parent, id)) return id; else return NE_XML_DECLINE; } #define MAX_CDATA (256) static int lk_cdata(void *userdata, int state, const char *cdata, size_t len) { struct lock_ctx *ctx = userdata; if (ctx->cdata->used + len < MAX_CDATA) ne_buffer_append(ctx->cdata, cdata, len); return 0; } static int ld_cdata(void *userdata, int state, const char *cdata, size_t len) { struct discover_ctx *ctx = userdata; if (ctx->cdata->used + len < MAX_CDATA) ne_buffer_append(ctx->cdata, cdata, len); return 0; } static int lk_startelm(void *userdata, int parent, const char *nspace, const char *name, const char **atts) { struct lock_ctx *ctx = userdata; int id; id = ne_xml_mapid(element_map, NE_XML_MAPLEN(element_map), nspace, name); NE_DEBUG(NE_DBG_LOCKS, "lk_startelm: %s => %d\n", name, id); /* Lock-Token header is a MUST requirement: if the token * is not known, bail out. */ if (id == 0 || ctx->token == NULL) return NE_XML_DECLINE; /* TODO: only accept 'prop' as root for LOCK response */ if (!can_accept(parent, id)) return NE_XML_DECLINE; if (id == ELM_activelock && !ctx->found) { /* a new activelock */ ne_lock_free(&ctx->active); memset(&ctx->active, 0, sizeof ctx->active); } ne_buffer_clear(ctx->cdata); return id; } /* End-element handler for LOCK response */ static int lk_endelm(void *userdata, int state, const char *nspace, const char *name) { struct lock_ctx *ctx = userdata; if (ctx->found) return 0; if (end_element_common(&ctx->active, state, ctx->cdata->data)) return -1; if (state == ELM_activelock) { if (ctx->active.token && strcmp(ctx->active.token, ctx->token) == 0) { ctx->found = 1; } } return 0; } static void *ld_create(void *userdata, const char *href) { struct discover_ctx *ctx = userdata; struct ne_lock *lk = ne_lock_create(); if (ne_uri_parse(href, &lk->uri) != 0) { ne_lock_destroy(lk); return NULL; } if (!lk->uri.host) ne_fill_server_uri(ctx->session, &lk->uri); return lk; } /* Discover all locks on URI */ int ne_lock_discover(ne_session *sess, const char *uri, ne_lock_result callback, void *userdata) { ne_propfind_handler *handler; struct discover_ctx ctx = {0}; int ret; ctx.results = callback; ctx.userdata = userdata; ctx.session = sess; ctx.cdata = ne_buffer_create(); handler = ne_propfind_create(sess, uri, NE_DEPTH_ZERO); ne_propfind_set_private(handler, ld_create, &ctx); ne_xml_push_handler(ne_propfind_get_parser(handler), ld_startelm, ld_cdata, end_element_ldisc, handler); ret = ne_propfind_named(handler, lock_props, discover_results, &ctx); ne_buffer_destroy(ctx.cdata); ne_propfind_destroy(handler); return ret; } static void add_timeout_header(ne_request *req, long timeout) { if (timeout == NE_TIMEOUT_INFINITE) { ne_add_request_header(req, "Timeout", "Infinite"); } else if (timeout != NE_TIMEOUT_INVALID && timeout > 0) { ne_print_request_header(req, "Timeout", "Second-%ld", timeout); } /* just ignore it if timeout == 0 or invalid. */ } /* Parse a Lock-Token response header. */ static void get_ltoken_hdr(void *ud, const char *value) { struct lock_ctx *ctx = ud; if (value[0] == '<') value++; ctx->token = ne_strdup(value); ne_shave(ctx->token, ">"); } int ne_lock(ne_session *sess, struct ne_lock *lock) { ne_request *req = ne_request_create(sess, "LOCK", lock->uri.path); ne_buffer *body = ne_buffer_create(); ne_xml_parser *parser = ne_xml_create(); int ret, parse_failed; struct lock_ctx ctx; memset(&ctx, 0, sizeof ctx); ctx.cdata = ne_buffer_create(); ne_xml_push_handler(parser, lk_startelm, lk_cdata, lk_endelm, &ctx); /* Create the body */ ne_buffer_concat(body, "" EOL "" EOL " ", lock->scope==ne_lockscope_exclusive? "":"", "" EOL "", NULL); if (lock->owner) { ne_buffer_concat(body, "", lock->owner, "" EOL, NULL); } ne_buffer_zappend(body, "" EOL); ne_set_request_body_buffer(req, body->data, ne_buffer_size(body)); ne_add_response_body_reader(req, ne_accept_2xx, ne_xml_parse_v, parser); ne_add_request_header(req, "Content-Type", NE_XML_MEDIA_TYPE); ne_add_depth_header(req, lock->depth); add_timeout_header(req, lock->timeout); ne_add_response_header_handler(req, "Lock-Token", get_ltoken_hdr, &ctx); /* TODO: * By 2518, we need this only if we are creating a lock-null resource. * Since we don't KNOW whether the lock we're given is a lock-null * or not, we cover our bases. */ ne_lock_using_parent(req, lock->uri.path); /* This one is clearer from 2518 sec 8.10.4. */ ne_lock_using_resource(req, lock->uri.path, lock->depth); ret = ne_request_dispatch(req); ne_buffer_destroy(body); ne_buffer_destroy(ctx.cdata); parse_failed = !ne_xml_valid(parser); if (ret == NE_OK && ne_get_status(req)->klass == 2) { if (ctx.token == NULL) { ret = NE_ERROR; ne_set_error(sess, _("No Lock-Token header given")); } else if (parse_failed) { ret = NE_ERROR; ne_set_error(sess, "%s", ne_xml_get_error(parser)); } else if (ne_get_status(req)->code == 207) { ret = NE_ERROR; /* TODO: set the error string appropriately */ } else if (ctx.found) { /* it worked: copy over real lock details if given. */ NE_FREE(lock->token); lock->token = ctx.token; ctx.token = NULL; if (ctx.active.timeout != NE_TIMEOUT_INVALID) lock->timeout = ctx.active.timeout; lock->scope = ctx.active.scope; lock->type = ctx.active.type; if (ctx.active.depth >= 0) lock->depth = ctx.active.depth; if (ctx.active.owner) { NE_FREE(lock->owner); lock->owner = ctx.active.owner; ctx.active.owner = NULL; } } else { ret = NE_ERROR; ne_set_error(sess, _("Response missing activelock for %s"), ctx.token); } } else { ret = NE_ERROR; } if (ctx.token) ne_free(ctx.token); ne_lock_free(&ctx.active); ne_request_destroy(req); ne_xml_destroy(parser); return ret; } int ne_lock_refresh(ne_session *sess, struct ne_lock *lock) { ne_request *req = ne_request_create(sess, "LOCK", lock->uri.path); ne_xml_parser *parser = ne_xml_create(); int ret, parse_failed; /* Handle the response and update *lock appropriately. */ ne_xml_push_handler(parser, lk_startelm, NULL, lk_endelm, lock); ne_add_response_body_reader(req, ne_accept_2xx, ne_xml_parse_v, parser); /* Probably don't need to submit any other lock-tokens for this * resource? If it's an exclusive lock, then there can be no other * locks covering the resource. If it's a shared lock, then this * lock (which is being refreshed) is sufficient to modify the * resource state? */ ne_print_request_header(req, "If", "(<%s>)", lock->token); add_timeout_header(req, lock->timeout); ret = ne_request_dispatch(req); parse_failed = !ne_xml_valid(parser); if (ret == NE_OK && ne_get_status(req)->klass == 2) { if (parse_failed) { ret = NE_ERROR; ne_set_error(sess, "%s", ne_xml_get_error(parser)); } else if (ne_get_status(req)->code == 207) { ret = NE_ERROR; /* TODO: set the error string appropriately */ } } else { ret = NE_ERROR; } ne_request_destroy(req); ne_xml_destroy(parser); return ret; } tla-1.3.5+dfsg/src/libneon/src/ne_ssl.h0000644000175000017500000001365410457621776016425 0ustar useruser/* SSL/TLS abstraction layer for neon Copyright (C) 2003-2004, Joe Orton This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA */ /* ne_ssl.h defines an interface for loading and accessing the * properties of SSL certificates. */ #ifndef NE_SSL_H #define NE_SSL_H 1 #include "ne_defs.h" BEGIN_NEON_DECLS /* A "distinguished name"; a unique name for some entity. */ typedef struct ne_ssl_dname_s ne_ssl_dname; /* Returns a single-line string representation of a distinguished * name, intended to be human-readable (e.g. "Acme Ltd., Norfolk, * GB"). Return value is a UTF-8-encoded malloc-allocated string and * must be free'd by the caller. */ char *ne_ssl_readable_dname(const ne_ssl_dname *dn); /* Returns zero if 'dn1' and 'dn2' refer to same name, or non-zero if * they are different. */ int ne_ssl_dname_cmp(const ne_ssl_dname *dn1, const ne_ssl_dname *dn2); /* An SSL certificate. */ typedef struct ne_ssl_certificate_s ne_ssl_certificate; /* Read a certificate from a file in PEM format; returns NULL if the * certificate could not be parsed. */ ne_ssl_certificate *ne_ssl_cert_read(const char *filename); /* Write a certificate to a file in PEM format; returns non-zero if * the certificate could not be written. */ int ne_ssl_cert_write(const ne_ssl_certificate *cert, const char *filename); /* Export a certificate to a base64-encoded, NUL-terminated string. * The returned string is malloc-allocated and must be free()d by the * caller. */ char *ne_ssl_cert_export(const ne_ssl_certificate *cert); /* Import a certificate from a base64-encoded string as returned by * ne_ssl_cert_export(). Returns a certificate object or NULL if * 'data' was not valid. */ ne_ssl_certificate *ne_ssl_cert_import(const char *data); /* Returns the identity of the certificate, or NULL if none is given. * For a server certificate this will be the hostname of the server to * whom the cert was issued. */ const char *ne_ssl_cert_identity(const ne_ssl_certificate *cert); /* Return the certificate of the entity which signed certificate * 'cert'. Returns NULL if 'cert' is self-signed or the issuer * certificate is not available. */ const ne_ssl_certificate *ne_ssl_cert_signedby(const ne_ssl_certificate *cert); /* Returns the distinguished name of the certificate issuer. */ const ne_ssl_dname *ne_ssl_cert_issuer(const ne_ssl_certificate *cert); /* Returns the distinguished name of the certificate subject. */ const ne_ssl_dname *ne_ssl_cert_subject(const ne_ssl_certificate *cert); #define NE_SSL_DIGESTLEN (60) /* Calculate the certificate digest ("fingerprint") and format it as a * NUL-terminated hex string in 'digest', of the form "aa:bb:...:ff". * Returns zero on success or non-zero if there was an internal error * whilst calculating the digest. 'digest' must be at least * NE_SSL_DIGESTLEN bytes in length. */ int ne_ssl_cert_digest(const ne_ssl_certificate *cert, char *digest); #define NE_SSL_VDATELEN (30) /* Copy the validity dates into buffers 'from' and 'until' as * NUL-terminated human-readable strings. The buffers must be at * least NE_SSL_VDATELEN bytes in length. */ void ne_ssl_cert_validity(const ne_ssl_certificate *cert, char *from, char *until); /* Returns zero if 'c1' and 'c2' refer to the same certificate, or * non-zero otherwise. */ int ne_ssl_cert_cmp(const ne_ssl_certificate *c1, const ne_ssl_certificate *c2); /* Deallocate memory associated with certificate. */ void ne_ssl_cert_free(ne_ssl_certificate *cert); /* A client certificate (and private key). */ typedef struct ne_ssl_client_cert_s ne_ssl_client_cert; /* Read a client certificate and private key from a PKCS12 file; * returns NULL if the file could not be parsed. If the client cert * is encrypted, it must be decrypted before use. */ ne_ssl_client_cert *ne_ssl_clicert_read(const char *filename); /* Returns the "friendly name" given for the client cert, or NULL if * none given. This can be called before or after the client cert has * been decrypted. Returns a NUL-terminated string. */ const char *ne_ssl_clicert_name(ne_ssl_client_cert *ccert); /* Returns non-zero if client cert is encrypted. */ int ne_ssl_clicert_encrypted(const ne_ssl_client_cert *ccert); /* Decrypt the encrypted client cert using given password. Returns * non-zero on failure, in which case, the function can be called * again with a different password. For a ccert on which _encrypted() * returns 0, calling _decrypt results in undefined behaviour. */ int ne_ssl_clicert_decrypt(ne_ssl_client_cert *ccert, const char *password); /* Return the actual certificate part of the client certificate (never * returns NULL). */ const ne_ssl_certificate *ne_ssl_clicert_owner(const ne_ssl_client_cert *ccert); /* Deallocate memory associated with a client certificate. */ void ne_ssl_clicert_free(ne_ssl_client_cert *ccert); /* An SSL context; only necessary when interfacing with ne_socket.h. */ typedef struct ne_ssl_context_s ne_ssl_context; /* Create an SSL context. */ ne_ssl_context *ne_ssl_context_create(void); /* Trust the given certificate 'cert' in context 'ctx'. */ void ne_ssl_ctx_trustcert(ne_ssl_context *ctx, const ne_ssl_certificate *cert); /* Destroy an SSL context. */ void ne_ssl_context_destroy(ne_ssl_context *ctx); END_NEON_DECLS #endif tla-1.3.5+dfsg/src/libneon/src/README0000644000175000017500000000070610457621776015643 0ustar useruser This is the source directory of the 'neon' HTTP/WebDAV client library, which can be bundled inside other packages. For the complete neon package, see: http://www.webdav.org/neon/ This source directory may be distributed and/or modified under the terms of the GNU Library General Public License, as given in COPYING.LIB. Please send questions, bug reports, feature requests, etc, regarding the neon library, to the mailing list at: neon@webdav.org tla-1.3.5+dfsg/src/libneon/src/ne_207.c0000644000175000017500000002267710457621776016134 0ustar useruser/* WebDAV 207 multi-status response handling Copyright (C) 1999-2004, Joe Orton This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA */ /* Generic handling for WebDAV 207 Multi-Status responses. */ #include "config.h" #ifdef HAVE_STDLIB_H #include #endif #include "ne_alloc.h" #include "ne_utils.h" #include "ne_xml.h" #include "ne_207.h" #include "ne_uri.h" #include "ne_basic.h" #include "ne_i18n.h" struct ne_207_parser_s { ne_207_start_response *start_response; ne_207_end_response *end_response; ne_207_start_propstat *start_propstat; ne_207_end_propstat *end_propstat; ne_xml_parser *parser; void *userdata; ne_buffer *cdata; /* remember whether we are in a response: the validation * doesn't encapsulate this since we only count as being * "in a response" when we've seen the href element. */ int in_response; /* current position */ void *response, *propstat; /* caching */ ne_status status; char *description, *href; }; #define ELM_multistatus 1 #define ELM_response 2 #define ELM_responsedescription 3 #define ELM_href 4 #define ELM_prop (NE_207_STATE_PROP) #define ELM_status 6 #define ELM_propstat 7 static const struct ne_xml_idmap map207[] = { { "DAV:", "multistatus", ELM_multistatus }, { "DAV:", "response", ELM_response }, { "DAV:", "responsedescription", ELM_responsedescription }, { "DAV:", "href", ELM_href }, { "DAV:", "propstat", ELM_propstat }, { "DAV:", "prop", ELM_prop }, { "DAV:", "status", ELM_status } }; /* Set the callbacks for the parser */ void ne_207_set_response_handlers(ne_207_parser *p, ne_207_start_response *start, ne_207_end_response *end) { p->start_response = start; p->end_response = end; } void ne_207_set_propstat_handlers(ne_207_parser *p, ne_207_start_propstat *start, ne_207_end_propstat *end) { p->start_propstat = start; p->end_propstat = end; } void *ne_207_get_current_response(ne_207_parser *p) { return p->response; } void *ne_207_get_current_propstat(ne_207_parser *p) { return p->propstat; } /* return non-zero if (child, parent) is an interesting element */ static int can_handle(int parent, int child) { return (parent == 0 && child == ELM_multistatus) || (parent == ELM_multistatus && child == ELM_response) || (parent == ELM_response && (child == ELM_href || child == ELM_status || child == ELM_propstat || child == ELM_responsedescription)) || (parent == ELM_propstat && (child == ELM_prop || child == ELM_status || child == ELM_responsedescription)); } static int cdata_207(void *userdata, int state, const char *buf, size_t len) { ne_207_parser *p = userdata; if ((state == ELM_href || state == ELM_responsedescription || state == ELM_status) && p->cdata->used + len < 2048) ne_buffer_append(p->cdata, buf, len); return 0; } static int start_element(void *userdata, int parent, const char *nspace, const char *name, const char **atts) { ne_207_parser *p = userdata; int state = ne_xml_mapid(map207, NE_XML_MAPLEN(map207), nspace, name); if (!can_handle(parent, state)) return NE_XML_DECLINE; /* if not in a response, ignore everything. */ if (!p->in_response && state != ELM_response && state != ELM_multistatus && state != ELM_href) return NE_XML_DECLINE; if (state == ELM_propstat && p->start_propstat) p->propstat = p->start_propstat(p->userdata, p->response); ne_buffer_clear(p->cdata); return state; } #define GIVE_STATUS(p) ((p)->status.reason_phrase?&(p)->status:NULL) #define HAVE_CDATA(p) ((p)->cdata->used > 1) static int end_element(void *userdata, int state, const char *nspace, const char *name) { ne_207_parser *p = userdata; const char *cdata = p->cdata->data; switch (state) { case ELM_responsedescription: if (HAVE_CDATA(p)) { NE_FREE(p->description); p->description = ne_strdup(cdata); } break; case ELM_href: /* Now we have the href, begin the response */ if (p->start_response && HAVE_CDATA(p)) { p->response = p->start_response(p->userdata, cdata); p->in_response = 1; } break; case ELM_status: if (HAVE_CDATA(p)) { NE_FREE(p->status.reason_phrase); if (ne_parse_statusline(cdata, &p->status)) { char buf[500]; NE_DEBUG(NE_DBG_HTTP, "Status line: %s\n", cdata); ne_snprintf(buf, 500, _("Invalid HTTP status line in status element " "at line %d of response:\nStatus line was: %s"), ne_xml_currentline(p->parser), cdata); ne_xml_set_error(p->parser, buf); return -1; } else { NE_DEBUG(NE_DBG_XML, "Decoded status line: %s\n", cdata); } } break; case ELM_propstat: if (p->end_propstat) p->end_propstat(p->userdata, p->propstat, GIVE_STATUS(p), p->description); p->propstat = NULL; NE_FREE(p->description); NE_FREE(p->status.reason_phrase); break; case ELM_response: if (!p->in_response) break; if (p->end_response) p->end_response(p->userdata, p->response, GIVE_STATUS(p), p->description); p->response = NULL; p->in_response = 0; NE_FREE(p->status.reason_phrase); NE_FREE(p->description); break; } return 0; } ne_207_parser *ne_207_create(ne_xml_parser *parser, void *userdata) { ne_207_parser *p = ne_calloc(sizeof *p); p->parser = parser; p->userdata = userdata; p->cdata = ne_buffer_create(); /* Add handler for the standard 207 elements */ ne_xml_push_handler(parser, start_element, cdata_207, end_element, p); return p; } void ne_207_destroy(ne_207_parser *p) { if (p->status.reason_phrase) ne_free(p->status.reason_phrase); ne_buffer_destroy(p->cdata); ne_free(p); } int ne_accept_207(void *userdata, ne_request *req, const ne_status *status) { return (status->code == 207); } /* Handling of 207 errors: we keep a string buffer, and append * messages to it as they come down. * * Note, 424 means it would have worked but something else went wrong. * We will have had the error for "something else", so we display * that, and skip 424 errors. */ /* This is passed as userdata to the 207 code. */ struct context { char *href; ne_buffer *buf; unsigned int is_error; }; static void *start_response(void *userdata, const char *href) { struct context *ctx = userdata; NE_FREE(ctx->href); ctx->href = ne_strdup(href); return NULL; } static void handle_error(struct context *ctx, const ne_status *status, const char *description) { if (status && status->klass != 2 && status->code != 424) { char buf[50]; ctx->is_error = 1; sprintf(buf, "%d", status->code); ne_buffer_concat(ctx->buf, ctx->href, ": ", buf, " ", status->reason_phrase, "\n", NULL); if (description != NULL) { /* TODO: these can be multi-line. Would be good to * word-wrap this at col 80. */ ne_buffer_concat(ctx->buf, " -> ", description, "\n", NULL); } } } static void end_response(void *userdata, void *response, const ne_status *status, const char *description) { struct context *ctx = userdata; handle_error(ctx, status, description); } static void end_propstat(void *userdata, void *propstat, const ne_status *status, const char *description) { struct context *ctx = userdata; handle_error(ctx, status, description); } /* Dispatch a DAV request and handle a 207 error response appropriately */ /* TODO: hook up Content-Type parsing; passing charset to XML parser */ int ne_simple_request(ne_session *sess, ne_request *req) { int ret; struct context ctx = {0}; ne_207_parser *p207; ne_xml_parser *p; p = ne_xml_create(); p207 = ne_207_create(p, &ctx); /* The error string is progressively written into the * ne_buffer by the element callbacks */ ctx.buf = ne_buffer_create(); ne_207_set_response_handlers(p207, start_response, end_response); ne_207_set_propstat_handlers(p207, NULL, end_propstat); ne_add_response_body_reader(req, ne_accept_207, ne_xml_parse_v, p); ret = ne_request_dispatch(req); if (ret == NE_OK) { if (ne_get_status(req)->code == 207) { if (!ne_xml_valid(p)) { /* The parse was invalid */ ne_set_error(sess, "%s", ne_xml_get_error(p)); ret = NE_ERROR; } else if (ctx.is_error) { /* If we've actually got any error information * from the 207, then set that as the error */ ne_set_error(sess, "%s", ctx.buf->data); ret = NE_ERROR; } } else if (ne_get_status(req)->klass != 2) { ret = NE_ERROR; } } ne_207_destroy(p207); ne_xml_destroy(p); ne_buffer_destroy(ctx.buf); NE_FREE(ctx.href); ne_request_destroy(req); return ret; } tla-1.3.5+dfsg/src/libneon/src/ne_207.h0000644000175000017500000001003310457621776016120 0ustar useruser/* WebDAV 207 multi-status response handling Copyright (C) 1999-2003, Joe Orton This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA */ #ifndef DAV207_H #define DAV207_H #include "ne_xml.h" #include "ne_request.h" /* for ne_request */ BEGIN_NEON_DECLS /* The defined state integer for the '{DAV:}prop' element. */ #define NE_207_STATE_PROP (50) /* This interface reserves the state integers 'x' where 0 < x < 100 */ #define NE_207_STATE_TOP (100) /* Handling of 207 multistatus XML documents. A "multistatus" * document is made up of a set of responses, each concerned with a * particular resource. Each response may have an associated result * status and failure description. A response is made up of a set of * propstats, each of which again may have an associated result status * and failure description. */ /* Start and end response callbacks trigger at the start and end of * each "response" within the multistatus body. 'href' gives the URI * of the resource which is subject of this response. The return * value of a 'start_response' callback is passed as the 'response' * parameter to the corresponding 'end_response' parameter. */ typedef void *ne_207_start_response(void *userdata, const char *href); typedef void ne_207_end_response(void *userdata, void *response, const ne_status *status, const char *description); /* Similarly, start and end callbacks for each propstat within the * response. The return value of the 'start_response' callback for * the response in which this propstat is contains is passed as the * 'response' parameter. The return value of each 'start_propstat' is * passed as the 'propstat' parameter' to the corresponding * 'end_propstat' callback. */ typedef void *ne_207_start_propstat(void *userdata, void *response); typedef void ne_207_end_propstat(void *userdata, void *propstat, const ne_status *status, const char *description); typedef struct ne_207_parser_s ne_207_parser; /* Create 207 parser an add the handlers the the given parser's * handler stack. */ ne_207_parser *ne_207_create(ne_xml_parser *parser, void *userdata); /* Register response handling callbacks. */ void ne_207_set_response_handlers(ne_207_parser *p, ne_207_start_response *start, ne_207_end_response *end); /* Register propstat handling callbacks. */ void ne_207_set_propstat_handlers(ne_207_parser *p, ne_207_start_propstat *start, ne_207_end_propstat *end); /* Destroy the parser */ void ne_207_destroy(ne_207_parser *p); /* An acceptance function which only accepts 207 responses */ int ne_accept_207(void *userdata, ne_request *req, const ne_status *status); void *ne_207_get_current_propstat(ne_207_parser *p); void *ne_207_get_current_response(ne_207_parser *p); /* Dispatch request 'req', returning: * NE_ERROR: for a dispatch error, or a non-2xx response, or a * 207 response which contained a non-2xx propstat * NE_OK: for a 2xx response or a 207 response which contained * only 2xx-class propstats. * The request object is destroyed in both cases. */ int ne_simple_request(ne_session *sess, ne_request *req); END_NEON_DECLS #endif /* DAV207_H */ tla-1.3.5+dfsg/src/libneon/src/ne_request.h0000644000175000017500000002520010457621776017302 0ustar useruser/* HTTP Request Handling Copyright (C) 1999-2002, Joe Orton This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA */ #ifndef NE_REQUEST_H #define NE_REQUEST_H #include "ne_utils.h" /* For ne_status */ #include "ne_string.h" /* For ne_buffer */ #include "ne_session.h" BEGIN_NEON_DECLS #define NE_OK (0) /* Success */ #define NE_ERROR (1) /* Generic error; use ne_get_error(session) for message */ #define NE_LOOKUP (2) /* Server or proxy hostname lookup failed */ #define NE_AUTH (3) /* User authentication failed on server */ #define NE_PROXYAUTH (4) /* User authentication failed on proxy */ #define NE_CONNECT (5) /* Could not connect to server */ #define NE_TIMEOUT (6) /* Connection timed out */ #define NE_FAILED (7) /* The precondition failed */ #define NE_RETRY (8) /* Retry request (ne_end_request ONLY) */ #define NE_REDIRECT (9) /* See ne_redirect.h */ /* FIXME: remove this */ #define EOL "\r\n" /* Opaque object representing a single HTTP request. */ typedef struct ne_request_s ne_request; /***** Request Handling *****/ /* Create a request in session 'sess', with given method and path. * 'path' must conform to the 'abs_path' grammar in RFC2396, with an * optional "? query" part, and MUST be URI-escaped by the caller. */ ne_request *ne_request_create(ne_session *sess, const char *method, const char *path); /* 'buffer' will be sent as the request body with given request. */ void ne_set_request_body_buffer(ne_request *req, const char *buffer, size_t size); /* Send the contents of a file as the request body; 'fd' must be a * file descriptor of an open, seekable file. Current file offset of * fd is not retained (and ignored: the file is read from the the * first byte). Returns: * 0 on okay. * non-zero if could not determine length of file. */ int ne_set_request_body_fd(ne_request *req, int fd); /* "Pull"-based request body provider: a callback which is invoked to * provide blocks of request body on demand. * * Before each time the body is provided, the callback will be called * once with buflen == 0. The body may have to be provided >1 time * per request (for authentication retries etc.). * * The callback must return: * <0 : error, abort request. * 0 : ignore 'buffer' contents, end of body. * 0 < x <= buflen : buffer contains x bytes of body data. */ typedef ssize_t (*ne_provide_body)(void *userdata, char *buffer, size_t buflen); /* Install a callback which is invoked as needed to provide request * body blocks. Total request body is 'size' bytes: the callback MUST * ensure it returns in total exactly 'size' bytes each time the * request body is provided. */ void ne_set_request_body_provider(ne_request *req, size_t size, ne_provide_body provider, void *userdata); /* Handling response bodies... you provide TWO callbacks: * * 1) 'acceptance' callback: determines whether you want to handle the * response body given the response-status information, e.g., if you * only want 2xx responses, say so here. * * 2) 'reader' callback: passed blocks of the response-body as they * arrive, if the acceptance callback returned non-zero. */ /* 'acceptance' callback type. Return non-zero to accept the response, * else zero to ignore it. */ typedef int (*ne_accept_response)( void *userdata, ne_request *req, const ne_status *st); /* An 'acceptance' callback which only accepts 2xx-class responses. * Ignores userdata. */ int ne_accept_2xx(void *userdata, ne_request *req, const ne_status *st); /* An acceptance callback which accepts all responses. Ignores * userdata. */ int ne_accept_always(void *userdata, ne_request *req, const ne_status *st); /* Callback for reading a block of data. */ typedef void (*ne_block_reader)(void *userdata, const char *buf, size_t len); /* Add a response reader for the given request, with the given * acceptance function. userdata is passed as the first argument to * the acceptance + reader callbacks. * * The acceptance callback is called once each time the request is * sent: it may be sent >1 time because of authentication retries etc. * For each time the acceptance callback is called, if it returns * non-zero, blocks of the response body will be passed to the reader * callback as the response is read. After all the response body has * been read, the callback will be called with a 'len' argument of * zero. */ void ne_add_response_body_reader(ne_request *req, ne_accept_response accpt, ne_block_reader reader, void *userdata); /* Handle response headers. Each handler is associated with a specific * header field (indicated by name). The handler is then passed the * value of this header field. */ /* The header handler callback type */ typedef void (*ne_header_handler)(void *userdata, const char *value); /* Adds a response header handler for the given request. userdata is passed * as the first argument to the header handler, and the 'value' is the * header field value (i.e. doesn't include the "Header-Name: " part"). */ void ne_add_response_header_handler(ne_request *req, const char *name, ne_header_handler hdl, void *userdata); /* Add handler which is passed ALL header values regardless of name */ void ne_add_response_header_catcher(ne_request *req, ne_header_handler hdl, void *userdata); /* Stock header handlers: * 'duplicate': *(char **)userdata = strdup(value) * 'numeric': *(int *)userdata = atoi(value) * e.g. * int mynum; * ne_add_response_header_handler(myreq, "Content-Length", * ne_handle_numeric_handler, &mynum); * ... arranges mynum to be set to the value of the Content-Length header. */ void ne_duplicate_header(void *userdata, const char *value); void ne_handle_numeric_header(void *userdata, const char *value); /* Adds a header to the request with given name and value. */ void ne_add_request_header(ne_request *req, const char *name, const char *value); /* Adds a header to the request with given name, using printf-like * format arguments for the value. */ void ne_print_request_header(ne_request *req, const char *name, const char *format, ...) ne_attribute((format(printf, 3, 4))); /* ne_request_dispatch: Sends the given request, and reads the * response. Response-Status information can be retrieve with * ne_get_status(req). * * NE_OK if request sent + response read okay. * NE_AUTH user not authorised on server * NE_PROXYAUTH user not authorised on proxy server * NE_CONNECT could not connect to server/proxy server * NE_TIMEOUT connection timed out mid-request * NE_ERROR for other errors, and ne_get_error() should * return a meaningful error string */ int ne_request_dispatch(ne_request *req); /* Returns a pointer to the response status information for the given * request; pointer is valid until request object is destroyed. */ const ne_status *ne_get_status(const ne_request *req) ne_attribute((const)); /* Returns pointer to session associated with request. */ ne_session *ne_get_session(const ne_request *req); /* Destroy memory associated with request pointer */ void ne_request_destroy(ne_request *req); /* "Caller-pulls" request interface. This is an ALTERNATIVE interface * to ne_request_dispatch: either use that, or do all this yourself: * * caller must call: * 1. ne_begin_request (fail if returns non-NE_OK) * 2. while(ne_read_response_block(...) > 0) ... loop ...; * (fail if ne_read_response_block returns <0) * 3. ne_end_request * * ne_end_request and ne_begin_request both return an NE_* code; if * ne_end_request returns NE_RETRY, you must restart the loop from (1) * above. */ int ne_begin_request(ne_request *req); int ne_end_request(ne_request *req); /* Read a block of the response. buffer must be at least 128 bytes. * 'buflen' must be length of buffer. * * Returns: * <0 - error, stop reading. * 0 - end of response * >0 - number of bytes read into buffer. */ ssize_t ne_read_response_block(ne_request *req, char *buffer, size_t buflen); /**** Request hooks handling *****/ typedef void (*ne_free_hooks)(void *cookie); /* Hook called when a create is created; passed the request method, * and the string used as the Request-URI (which may be an abs_path, * or an absoluteURI, depending on whether an HTTP proxy is in * use). */ typedef void (*ne_create_request_fn)(ne_request *req, void *userdata, const char *method, const char *requri); void ne_hook_create_request(ne_session *sess, ne_create_request_fn fn, void *userdata); /* Hook called before the request is sent. 'header' is the raw HTTP * header before the trailing CRLF is added: add in more here. */ typedef void (*ne_pre_send_fn)(ne_request *req, void *userdata, ne_buffer *header); void ne_hook_pre_send(ne_session *sess, ne_pre_send_fn fn, void *userdata); /* Hook called after the request is sent. May return: * NE_OK everything is okay * NE_RETRY try sending the request again. * anything else signifies an error, and the request is failed. The return * code is passed back the _dispatch caller, so the session error must * also be set appropriately (ne_set_error). */ typedef int (*ne_post_send_fn)(ne_request *req, void *userdata, const ne_status *status); void ne_hook_post_send(ne_session *sess, ne_post_send_fn fn, void *userdata); /* Hook called when the function is destroyed. */ typedef void (*ne_destroy_req_fn)(ne_request *req, void *userdata); void ne_hook_destroy_request(ne_session *sess, ne_destroy_req_fn fn, void *userdata); typedef void (*ne_destroy_sess_fn)(void *userdata); /* Hook called when the session is destroyed. */ void ne_hook_destroy_session(ne_session *sess, ne_destroy_sess_fn fn, void *userdata); /* Store an opaque context for the request, 'priv' is returned by a * call to ne_request_get_private with the same ID. */ void ne_set_request_private(ne_request *req, const char *id, void *priv); void *ne_get_request_private(ne_request *req, const char *id); END_NEON_DECLS #endif /* NE_REQUEST_H */ tla-1.3.5+dfsg/src/libneon/src/ne_xml.c0000644000175000017500000004104710457621776016414 0ustar useruser/* Higher Level Interface to XML Parsers. Copyright (C) 1999-2004, Joe Orton This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA */ #include "config.h" #ifdef HAVE_STDLIB_H #include #endif #ifdef HAVE_STRING_H #include #endif #ifdef HAVE_STRINGS_H #include #endif #include "ne_i18n.h" #include "ne_alloc.h" #include "ne_xml.h" #include "ne_utils.h" #include "ne_string.h" #if defined(HAVE_EXPAT) /* expat support: */ #ifdef HAVE_XMLPARSE_H #include "xmlparse.h" #else #include #endif typedef XML_Char ne_xml_char; #elif defined(HAVE_LIBXML) /* libxml2 support: */ #include #include typedef xmlChar ne_xml_char; #else /* not HAVE_LIBXML */ # error need an XML parser #endif /* not HAVE_EXPAT */ /* Approx. one screen of text: */ #define ERR_SIZE (2048) struct handler { ne_xml_startelm_cb *startelm_cb; /* start-element callback */ ne_xml_endelm_cb *endelm_cb; /* end-element callback */ ne_xml_cdata_cb *cdata_cb; /* character-data callback. */ void *userdata; /* userdata for the above. */ struct handler *next; /* next handler in stack. */ }; #ifdef HAVE_LIBXML static void sax_error(void *ctx, const char *msg, ...); #endif struct element { const ne_xml_char *nspace; ne_xml_char *name; int state; /* opaque state integer */ /* Namespaces declared in this element */ ne_xml_char *default_ns; /* A default namespace */ struct namespace *nspaces; /* List of other namespace scopes */ struct handler *handler; /* Handler for this element */ struct element *parent; /* parent element, or NULL */ }; /* We pass around a ne_xml_parser as the userdata in the parsing * library. This maintains the current state of the parse and various * other bits and bobs. Within the parse, we store the current branch * of the tree, i.e., the current element and all its parents, up to * the root, but nothing other than that. */ struct ne_xml_parser_s { struct element *root; /* the root of the document */ struct element *current; /* current element in the branch */ struct handler *top_handlers; /* always points at the * handler on top of the stack. */ int valid; /* non-zero whilst parse should continue */ int prune; /* if non-zero, depth within a dead branch */ #ifdef HAVE_EXPAT XML_Parser parser; char *encoding; #else xmlParserCtxtPtr parser; #endif char error[ERR_SIZE]; }; /* The callback handlers */ static void start_element(void *userdata, const ne_xml_char *name, const ne_xml_char **atts); static void end_element(void *userdata, const ne_xml_char *name); static void char_data(void *userdata, const ne_xml_char *cdata, int len); static const char *resolve_nspace(const struct element *elm, const char *prefix, size_t pfxlen); /* Linked list of namespace scopes */ struct namespace { ne_xml_char *name; ne_xml_char *uri; struct namespace *next; }; #ifdef HAVE_LIBXML /* Could be const as far as we care, but libxml doesn't want that */ static xmlSAXHandler sax_handler = { NULL, /* internalSubset */ NULL, /* isStandalone */ NULL, /* hasInternalSubset */ NULL, /* hasExternalSubset */ NULL, /* resolveEntity */ NULL, /* getEntity */ NULL, /* entityDecl */ NULL, /* notationDecl */ NULL, /* attributeDecl */ NULL, /* elementDecl */ NULL, /* unparsedEntityDecl */ NULL, /* setDocumentLocator */ NULL, /* startDocument */ NULL, /* endDocument */ start_element, /* startElement */ end_element, /* endElement */ NULL, /* reference */ char_data, /* characters */ NULL, /* ignorableWhitespace */ NULL, /* processingInstruction */ NULL, /* comment */ NULL, /* xmlParserWarning */ sax_error, /* xmlParserError */ sax_error, /* fatal error (never called by libxml2?) */ NULL, /* getParameterEntity */ char_data /* cdataBlock */ }; /* empty attributes array to mimic expat behaviour */ static const char *empty_atts[] = {NULL, NULL}; /* macro for determining the attributes array to pass */ #define PASS_ATTS(atts) (atts ? (const char **)(atts) : empty_atts) #else #define PASS_ATTS(atts) ((const char **)(atts)) /* XML declaration callback for expat. */ static void decl_handler(void *userdata, const XML_Char *version, const XML_Char *encoding, int standalone) { ne_xml_parser *p = userdata; if (encoding) p->encoding = ne_strdup(encoding); } #endif /* HAVE_LIBXML */ int ne_xml_currentline(ne_xml_parser *p) { #ifdef HAVE_EXPAT return XML_GetCurrentLineNumber(p->parser); #else return p->parser->input->line; #endif } const char *ne_xml_doc_encoding(const ne_xml_parser *p) { #ifdef HAVE_LIBXML return p->parser->encoding; #else return p->encoding; #endif } /* Extract the namespace prefix declarations from 'atts'. */ static int declare_nspaces(ne_xml_parser *p, struct element *elm, const ne_xml_char **atts) { int n; for (n = 0; atts && atts[n]; n += 2) { if (strcasecmp(atts[n], "xmlns") == 0) { /* New default namespace */ elm->default_ns = ne_strdup(atts[n+1]); } else if (strncasecmp(atts[n], "xmlns:", 6) == 0) { struct namespace *ns; if (atts[n][6] == '\0' || atts[n+1][0] == '\0') { ne_snprintf(p->error, ERR_SIZE, ("XML parse error at line %d: invalid namespace " "declaration"), ne_xml_currentline(p)); return -1; } /* New namespace scope */ ns = ne_calloc(sizeof(*ns)); ns->next = elm->nspaces; elm->nspaces = ns; ns->name = ne_strdup(atts[n]+6); /* skip the xmlns= */ ns->uri = ne_strdup(atts[n+1]); } } return 0; } /* Expand an XML qualified name, which may include a namespace prefix * as well as the local part. */ static int expand_qname(ne_xml_parser *p, struct element *elm, const ne_xml_char *qname) { const ne_xml_char *pfx; pfx = strchr(qname, ':'); if (pfx == NULL) { struct element *e = elm; /* Find default namespace; guaranteed to terminate as the root * element always has default_ns="". */ while (e->default_ns == NULL) e = e->parent; elm->name = ne_strdup(qname); elm->nspace = e->default_ns; } else { const char *uri = resolve_nspace(elm, qname, pfx-qname); if (uri) { /* The name is everything after the ':' */ if (pfx[1] == '\0') { ne_snprintf(p->error, ERR_SIZE, ("XML parse error at line %d: element name missing" "after namespace prefix"), ne_xml_currentline(p)); return -1; } elm->name = ne_strdup(pfx+1); elm->nspace = uri; } else { ne_snprintf(p->error, ERR_SIZE, ("XML parse error at line %d: undeclared namespace"), ne_xml_currentline(p)); return -1; } } return 0; } /* Called with the start of a new element. */ static void start_element(void *userdata, const ne_xml_char *name, const ne_xml_char **atts) { ne_xml_parser *p = userdata; struct element *elm; struct handler *hand; int state = NE_XML_DECLINE; if (!p->valid) return; if (p->prune) { p->prune++; return; } /* Create a new element */ elm = ne_calloc(sizeof *elm); elm->parent = p->current; p->current = elm; if (declare_nspaces(p, elm, atts) || expand_qname(p, elm, name)) { p->valid = 0; return; } /* Find a handler which will accept this element (or abort the parse) */ for (hand = elm->parent->handler; hand && state == NE_XML_DECLINE; hand = hand->next) { elm->handler = hand; state = hand->startelm_cb(hand->userdata, elm->parent->state, elm->nspace, elm->name, PASS_ATTS(atts)); } NE_DEBUG(NE_DBG_XMLPARSE, "XML: start-element (%d, {%s, %s}) => %d\n", elm->parent->state, elm->nspace, elm->name, state); if (state > 0) elm->state = state; else if (state == NE_XML_DECLINE) /* prune this branch. */ p->prune++; else /* state == NE_XML_ABORT */ p->valid = 0; } /* Destroys an element structure. */ static void destroy_element(struct element *elm) { struct namespace *this_ns, *next_ns; ne_free(elm->name); /* Free the namespaces */ this_ns = elm->nspaces; while (this_ns != NULL) { next_ns = this_ns->next; ne_free(this_ns->name); ne_free(this_ns->uri); ne_free(this_ns); this_ns = next_ns; }; if (elm->default_ns) ne_free(elm->default_ns); ne_free(elm); } /* cdata SAX callback */ static void char_data(void *userdata, const ne_xml_char *data, int len) { ne_xml_parser *p = userdata; struct element *elm = p->current; if (!p->valid || p->prune) return; if (elm->handler->cdata_cb && elm->handler->cdata_cb(elm->handler->userdata, elm->state, data, len)) { NE_DEBUG(NE_DBG_XML, "Cdata callback failed.\n"); p->valid = 0; } } /* Called with the end of an element */ static void end_element(void *userdata, const ne_xml_char *name) { ne_xml_parser *p = userdata; struct element *elm = p->current; if (!p->valid) return; if (p->prune) { if (p->prune-- > 1) return; } else if (elm->handler->endelm_cb && elm->handler->endelm_cb(elm->handler->userdata, elm->state, elm->nspace, elm->name)) { NE_DEBUG(NE_DBG_XML, "XML: end-element for %d failed.\n", elm->state); p->valid = 0; } NE_DEBUG(NE_DBG_XMLPARSE, "XML: end-element (%d, {%s, %s})\n", elm->state, elm->nspace, elm->name); /* move back up the tree */ p->current = elm->parent; p->prune = 0; destroy_element(elm); } /* Find a namespace definition for 'prefix' in given element, where * length of prefix is 'pfxlen'. Returns the URI or NULL. */ static const char *resolve_nspace(const struct element *elm, const char *prefix, size_t pfxlen) { const struct element *s; /* Search up the tree. */ for (s = elm; s != NULL; s = s->parent) { const struct namespace *ns; /* Iterate over defined spaces on this node. */ for (ns = s->nspaces; ns != NULL; ns = ns->next) { if (strlen(ns->name) == pfxlen && memcmp(ns->name, prefix, pfxlen) == 0) return ns->uri; } } return NULL; } ne_xml_parser *ne_xml_create(void) { ne_xml_parser *p = ne_calloc(sizeof *p); /* Initialize other stuff */ p->valid = 1; /* Placeholder for the root element */ p->current = p->root = ne_calloc(sizeof *p->root); p->root->default_ns = ""; p->root->state = 0; strcpy(p->error, _("Unknown error")); #ifdef HAVE_EXPAT p->parser = XML_ParserCreate(NULL); if (p->parser == NULL) { abort(); } XML_SetElementHandler(p->parser, start_element, end_element); XML_SetCharacterDataHandler(p->parser, char_data); XML_SetUserData(p->parser, (void *) p); XML_SetXmlDeclHandler(p->parser, decl_handler); #else p->parser = xmlCreatePushParserCtxt(&sax_handler, (void *)p, NULL, 0, NULL); if (p->parser == NULL) { abort(); } p->parser->replaceEntities = 1; #endif return p; } void ne_xml_push_handler(ne_xml_parser *p, ne_xml_startelm_cb *startelm_cb, ne_xml_cdata_cb *cdata_cb, ne_xml_endelm_cb *endelm_cb, void *userdata) { struct handler *hand = ne_calloc(sizeof(struct handler)); hand->startelm_cb = startelm_cb; hand->cdata_cb = cdata_cb; hand->endelm_cb = endelm_cb; hand->userdata = userdata; /* If this is the first handler registered, update the * base pointer too. */ if (p->top_handlers == NULL) { p->root->handler = hand; p->top_handlers = hand; } else { p->top_handlers->next = hand; p->top_handlers = hand; } } void ne_xml_parse_v(void *userdata, const char *block, size_t len) { ne_xml_parser *p = userdata; /* FIXME: The two XML parsers break all our nice abstraction by * choosing different char *'s. The swine. This cast will come * back and bite us someday, no doubt. */ ne_xml_parse(p, block, len); } /* Parse the given block of input of length len */ void ne_xml_parse(ne_xml_parser *p, const char *block, size_t len) { int ret, flag; /* duck out if it's broken */ if (!p->valid) { NE_DEBUG(NE_DBG_XML, "Not parsing %" NE_FMT_SIZE_T " bytes.\n", len); return; } if (len == 0) { flag = -1; block = ""; NE_DEBUG(NE_DBG_XML, "Got 0-length buffer, end of document.\n"); } else { NE_DEBUG(NE_DBG_XML, "Parsing %" NE_FMT_SIZE_T " length buffer.\n", len); flag = 0; } /* Note, don't write a parser error if !p->valid, since an error * will already have been written in that case. */ #ifdef HAVE_EXPAT ret = XML_Parse(p->parser, block, len, flag); NE_DEBUG(NE_DBG_XMLPARSE, "XML_Parse returned %d\n", ret); if (ret == 0 && p->valid) { ne_snprintf(p->error, ERR_SIZE, "XML parse error at line %d: %s", XML_GetCurrentLineNumber(p->parser), XML_ErrorString(XML_GetErrorCode(p->parser))); p->valid = 0; } #else ret = xmlParseChunk(p->parser, block, len, flag); NE_DEBUG(NE_DBG_XMLPARSE, "xmlParseChunk returned %d\n", ret); /* Parse errors are normally caught by the sax_error() callback, * which clears p->valid. */ if (p->parser->errNo && p->valid) { ne_snprintf(p->error, ERR_SIZE, "XML parse error at line %d.", ne_xml_currentline(p)); p->valid = 0; } #endif } int ne_xml_valid(ne_xml_parser *p) { return p->valid; } void ne_xml_destroy(ne_xml_parser *p) { struct element *elm, *parent; struct handler *hand, *next; /* Free up the handlers on the stack: the root element has the * pointer to the base of the handler stack. */ for (hand = p->root->handler; hand!=NULL; hand=next) { next = hand->next; ne_free(hand); } /* Clean up remaining elements */ for (elm = p->current; elm != p->root; elm = parent) { parent = elm->parent; destroy_element(elm); } /* free root element */ ne_free(p->root); #ifdef HAVE_EXPAT XML_ParserFree(p->parser); if (p->encoding) ne_free(p->encoding); #else xmlFreeParserCtxt(p->parser); #endif ne_free(p); } void ne_xml_set_error(ne_xml_parser *p, const char *msg) { ne_snprintf(p->error, ERR_SIZE, "%s", msg); } #ifdef HAVE_LIBXML static void sax_error(void *ctx, const char *msg, ...) { ne_xml_parser *p = ctx; va_list ap; char buf[1024]; va_start(ap, msg); ne_vsnprintf(buf, 1024, msg, ap); va_end(ap); ne_snprintf(p->error, ERR_SIZE, _("XML parse error at line %d: %s."), p->parser->input->line, buf); p->valid = 0; } #endif const char *ne_xml_get_error(ne_xml_parser *p) { return p->error; } const char * ne_xml_get_attr(ne_xml_parser *p, const char **attrs, const char *nspace, const char *name) { int n; for (n = 0; attrs[n] != NULL; n += 2) { char *pnt = strchr(attrs[n], ':'); if (!nspace && !pnt && strcmp(attrs[n], name) == 0) { return attrs[n+1]; } else if (nspace && pnt) { /* If a namespace is given, and the local part matches, * then resolve the namespace and compare that too. */ if (strcmp(pnt + 1, name) == 0) { const char *uri = resolve_nspace(p->current, attrs[n], pnt - attrs[n]); if (uri && strcmp(uri, nspace) == 0) return attrs[n+1]; } } } return NULL; } int ne_xml_mapid(const struct ne_xml_idmap map[], size_t maplen, const char *nspace, const char *name) { size_t n; for (n = 0; n < maplen; n++) if (strcmp(name, map[n].name) == 0 && strcmp(nspace, map[n].nspace) == 0) return map[n].id; return 0; } tla-1.3.5+dfsg/src/libneon/src/ne_locks.h0000644000175000017500000001427010457621776016732 0ustar useruser/* WebDAV Class 2 locking operations Copyright (C) 1999-2002, Joe Orton This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA */ #ifndef NE_LOCKS_H #define NE_LOCKS_H #include "ne_request.h" /* for ne_session + ne_request */ #include "ne_uri.h" /* for ne_uri */ BEGIN_NEON_DECLS /* The scope of a lock */ enum ne_lock_scope { ne_lockscope_exclusive, ne_lockscope_shared }; /* Lock type. Only write locks are defined in RFC2518. */ enum ne_lock_type { ne_locktype_write }; /* A lock object. */ struct ne_lock { ne_uri uri; int depth; /* the depth of the lock (NE_DEPTH_*). */ enum ne_lock_type type; enum ne_lock_scope scope; char *token; /* the lock token: uniquely identifies this lock. */ char *owner; /* string describing the owner of the lock. */ long timeout; /* timeout in seconds. (or NE_TIMEOUT_*) */ }; /* NB: struct ne_lock Would be typedef'ed to ne_lock except lock is * a verb and a noun, so we already have ne_lock the function. Damn * the English language. */ #define NE_TIMEOUT_INFINITE -1 #define NE_TIMEOUT_INVALID -2 /* Create a depth zero, exclusive write lock, with default timeout * (allowing a server to pick a default). token, owner and uri are * unset. */ struct ne_lock *ne_lock_create(void); /* HINT: to initialize uri host/port/scheme for the lock's URI, use * ne_fill_server_uri from ne_session.h. */ /* Deep-copy a lock structure: strdup's any of path, token, owner, * hostport which are set. */ struct ne_lock *ne_lock_copy(const struct ne_lock *lock); /* Free a lock structure; free's any of any of the URI, token and * owner which are set, but not the lock object itself. */ void ne_lock_free(struct ne_lock *lock); /* Like ne_lock_free; but free's the lock object itself too. */ void ne_lock_destroy(struct ne_lock *lock); /* ne_lock_store: an opaque type which is used to store a set of lock * objects. */ typedef struct ne_lock_store_s ne_lock_store; /* Create a lock store. */ ne_lock_store *ne_lockstore_create(void); /* Register the lock store 'store' with the HTTP session 'sess': any * operations made using 'sess' which operate on a locked resource, * can use the locks from 'store' if needed. */ void ne_lockstore_register(ne_lock_store *store, ne_session *sess); /* Destroy a lock store, free'ing any locks remaining inside. */ void ne_lockstore_destroy(ne_lock_store *store); /* Add a lock to the store: the store then "owns" the lock object, and * you must not free it. The lock MUST have all of: * - a completed URI structure: scheme, host, port, and path all set * - a valid lock token * - a valid depth */ void ne_lockstore_add(ne_lock_store *store, struct ne_lock *lock); /* Remove given lock object from store: 'lock' MUST point to a lock * object which is known to be in the store. */ void ne_lockstore_remove(ne_lock_store *store, struct ne_lock *lock); /* Returns the first lock in the lock store, or NULL if the store is * empty. */ struct ne_lock *ne_lockstore_first(ne_lock_store *store); /* After ne_lockstore_first has been called; returns the next lock in * the lock store, or NULL if there are no more locks stored. * Behaviour is undefined if ne_lockstore_first has not been called on * 'store' since the store was created, or the last time this function * returned NULL for the store.. */ struct ne_lock *ne_lockstore_next(ne_lock_store *store); /* Find a lock in the store for the given server, and with the given * path. */ struct ne_lock *ne_lockstore_findbyuri(ne_lock_store *store, const ne_uri *uri); /* Issue a LOCK request for the given lock. Requires that the uri, * depth, type, scope, and timeout members of 'lock' are filled in. * owner and token must be malloc-allocated if not NULL; and may be * free()d by this function. On successful return, lock->token will * contain the lock token. */ int ne_lock(ne_session *sess, struct ne_lock *lock); /* Issue an UNLOCK request for the given lock */ int ne_unlock(ne_session *sess, const struct ne_lock *lock); /* Refresh a lock. Updates lock->timeout appropriately. */ int ne_lock_refresh(ne_session *sess, struct ne_lock *lock); /* Callback for lock discovery. If 'lock' is NULL, something went * wrong performing lockdiscovery for the resource, look at 'status' * for the details. * * If lock is non-NULL, at least lock->uri and lock->token will be * filled in; and status will be NULL. */ typedef void (*ne_lock_result)(void *userdata, const struct ne_lock *lock, const char *uri, const ne_status *status); /* Perform lock discovery on the given path. 'result' is called with * the results (possibly >1 times). */ int ne_lock_discover(ne_session *sess, const char *path, ne_lock_result result, void *userdata); /* The ne_lock_using_* functions should be used before dispatching a * request which modify resources. If a lock store has been * registered with the session associated with the request, and locks * are present in the lock store which cover the resources which are * being modified by the request, then the appropriate lock tokens are * submitted in the request headers. */ /* Indicate that request 'req' will modify the resource at 'path', and * is an operation of given 'depth'. */ void ne_lock_using_resource(ne_request *req, const char *path, int depth); /* Indicate that request 'req' will modify the parent collection of * the resource found at 'path' (for instance when removing the * resource from the collection). */ void ne_lock_using_parent(ne_request *req, const char *path); END_NEON_DECLS #endif /* NE_LOCKS_H */ tla-1.3.5+dfsg/src/libneon/src/ne_dates.h0000644000175000017500000000314310457621776016714 0ustar useruser/* Date manipulation routines Copyright (C) 1999-2002, Joe Orton This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA */ #ifndef DATES_H #define DATES_H #include #include "ne_defs.h" BEGIN_NEON_DECLS /* Date manipulation routines as per RFC1123 and RFC1036 */ /* Return current date/time in RFC1123 format */ char *ne_rfc1123_date(time_t anytime); /* Returns time from date/time using the subset of the ISO8601 format * referenced in RFC2518 (e.g as used in the creationdate property in * the DAV: namespace). */ time_t ne_iso8601_parse(const char *date); /* Returns time from date/time in RFC1123 format */ time_t ne_rfc1123_parse(const char *date); time_t ne_rfc1036_parse(const char *date); /* Parses asctime date string */ time_t ne_asctime_parse(const char *date); /* Parse an HTTP-date as per RFC2616 */ time_t ne_httpdate_parse(const char *date); END_NEON_DECLS #endif /* DATES_H */ tla-1.3.5+dfsg/src/libneon/src/Makefile.in0000644000175000017500000001013010457621776017020 0ustar useruser# # neon source directory Makefile # # Use the NEON_NORMAL_BUILD or NEON_LIBTOOL_BUILD autoconf # macros to set up this Makefile correctly. # SHELL = @SHELL@ # Installation paths prefix = @prefix@ exec_prefix = @exec_prefix@ libdir = @libdir@ # Build paths VPATH = @srcdir@ top_builddir = .. top_srcdir = @top_srcdir@ # Toolchain settings. CC = @CC@ AR = @AR@ RANLIB = @RANLIB@ LIBTOOL = @LIBTOOL@ # Flags CPPFLAGS = @DEFS@ @CPPFLAGS@ CFLAGS = @CFLAGS@ -I$(top_builddir) -I$(top_srcdir)/../expat/lib @NEON_CFLAGS@ LDFLAGS = -L$(top_builddir)/../expat @LDFLAGS@ NEON_LINK_FLAGS = @NEON_LINK_FLAGS@ # Note: don't substitute @LIBS@ in here; during a bundled # build of this directory, @LIBS@ may include -lneon. LIBS = @NEON_LIBS@ @NEON_LTLIBS@ COMPILE = $(CC) $(CPPFLAGS) $(CFLAGS) -I$(top_builddir) -I$(top_srcdir)/../expat/lib @NEON_CFLAGS@ LINK = $(LIBTOOL) --quiet --mode=link $(CC) $(LDFLAGS) NEON_BASEOBJS = ne_request.@NEON_OBJEXT@ ne_session.@NEON_OBJEXT@ \ ne_basic.@NEON_OBJEXT@ ne_string.@NEON_OBJEXT@ \ ne_uri.@NEON_OBJEXT@ ne_dates.@NEON_OBJEXT@ ne_alloc.@NEON_OBJEXT@ \ ne_md5.@NEON_OBJEXT@ ne_utils.@NEON_OBJEXT@ \ ne_socket.@NEON_OBJEXT@ ne_auth.@NEON_OBJEXT@ \ ne_cookies.@NEON_OBJEXT@ ne_redirect.@NEON_OBJEXT@ \ ne_compress.@NEON_OBJEXT@ NEON_DAVOBJS = $(NEON_BASEOBJS) \ ne_207.@NEON_OBJEXT@ ne_xml.@NEON_OBJEXT@ \ ne_props.@NEON_OBJEXT@ ne_locks.@NEON_OBJEXT@ OBJECTS = @NEONOBJS@ @NEON_EXTRAOBJS@ .SUFFIXES: .SUFFIXES: .c .lo .o NEON_TARGET = @NEON_TARGET@ # Thanks to gettext for this neat trick. all: all-@NEON_BUILD_BUNDLED@ libneon.a all-yes: $(NEON_TARGET) all-no: @echo "Bundled neon build not being used." .c.lo: $(LIBTOOL) --quiet --mode=compile $(COMPILE) -c $< -o $@ .c.o: $(COMPILE) -c $< -o $@ libneon.la: $(OBJECTS) $(LINK) -rpath $(libdir) $(NEON_LINK_FLAGS) -o $@ $(OBJECTS) $(LIBS) libneon.a: $(OBJECTS) $(AR) cru $@ $(addsuffix .o, $(basename $(OBJECTS))) $(RANLIB) $@ clean: rm -f $(NEON_TARGET) *.o *.lo rm -rf .libs c++.c: find . -name ne_\*.h -print | sed 's/.*/#include "&"/;/ne_private/d' > $@ echo "int main(void) {}" >> $@ check-c++: c++.c c++ -I. c++.c check-incl: @for f in ne_*.h; do \ echo Checking $$f...; \ echo "#include \"$$f\"" > checkincl.c; \ $(COMPILE) -c checkincl.c -o checkincl.o || exit 1; done neonreq = ne_request.h ne_session.h ne_utils.h ne_string.h ne_socket.h \ ne_alloc.h $(top_builddir)/config.h ne_private.h ne_request.@NEON_OBJEXT@: ne_request.c $(neonreq) ne_i18n.h ne_private.h \ ne_uri.h ne_session.@NEON_OBJEXT@: ne_session.c ne_session.h ne_alloc.h \ ne_utils.h ne_private.h $(top_builddir)/config.h ne_openssl.@NEON_OBJEXT@: ne_openssl.c ne_session.h ne_ssl.h ne_privssl.h \ ne_private.h $(top_builddir)/config.h ne_socket.@NEON_OBJEXT@: ne_socket.c ne_socket.h $(top_builddir)/config.h \ ne_privssl.h ne_string.h ne_auth.@NEON_OBJEXT@: ne_auth.c ne_auth.h $(neonreq) \ ne_dates.h ne_md5.h ne_uri.h ne_basic.@NEON_OBJEXT@: ne_basic.c ne_basic.h $(neonreq) ne_utils.@NEON_OBJEXT@: ne_utils.c $(top_builddir)/config.h \ ne_utils.h ne_dates.h ne_xml.@NEON_OBJEXT@: ne_xml.c ne_xml.h ne_string.h ne_utils.h \ $(top_builddir)/config.h ne_207.@NEON_OBJEXT@: ne_207.c ne_207.h ne_xml.h \ $(top_builddir)/config.h ne_utils.h ne_i18n.h ne_string.@NEON_OBJEXT@: ne_string.c ne_string.h ne_alloc.h \ $(top_builddir)/config.h ne_alloc.@NEON_OBJEXT@: ne_alloc.c ne_alloc.h $(top_builddir)/config.h ne_dates.@NEON_OBJEXT@: ne_dates.c ne_dates.h $(top_builddir)/config.h ne_uri.@NEON_OBJEXT@: ne_uri.c ne_uri.h ne_utils.h ne_string.h ne_alloc.h \ $(top_builddir)/config.h ne_md5.@NEON_OBJEXT@: ne_md5.c ne_md5.h $(top_builddir)/config.h ne_props.@NEON_OBJEXT@: ne_props.c $(top_builddir)/config.h \ ne_props.h ne_207.h ne_xml.h $(neonreq) ne_locks.@NEON_OBJEXT@: ne_locks.c $(neonreq) ne_locks.h ne_207.h ne_xml.h ne_redirect.@NEON_OBJEXT@: ne_redirect.c $(neonreq) ne_redirect.h \ ne_uri.h ne_private.h ne_cookies.@NEON_OBJEXT@: ne_cookies.c $(neonreq) ne_cookies.h ne_uri.h \ ne_private.h ne_compress.@NEON_OBJEXT@: ne_compress.c $(neonreq) ne_compress.h ne_acl.@NEON_OBJEXT@: ne_acl.c ne_acl.h $(neonreq) tla-1.3.5+dfsg/src/libneon/src/memleak.h0000644000175000017500000000410010457621776016537 0ustar useruser/* Memory leak wrappers Copyright (C) 2003, Joe Orton This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA */ /* WARNING: THIS IS AN INTERNAL NEON INTERFACE AND MUST NOT BE USED * from NEON APPLICATIONS. */ /* This file contains an alternate interface to the memory allocation * wrappers in ne_alloc.c, which perform simple leak detection. It * MUST NOT BE INSTALLED, or used from neon applications. */ #ifndef MEMLEAK_H #define MEMLEAK_H #include #define ne_malloc(s) ne_malloc_ml(s, __FILE__, __LINE__) #define ne_calloc(s) ne_calloc_ml(s, __FILE__, __LINE__) #define ne_realloc(p, s) ne_realloc_ml(p, s, __FILE__, __LINE__) #define ne_strdup(s) ne_strdup_ml(s, __FILE__, __LINE__) #define ne_strndup(s, n) ne_strndup_ml(s, n, __FILE__, __LINE__) #define ne_free ne_free_ml /* Prototypes of allocation functions: */ void *ne_malloc_ml(size_t size, const char *file, int line); void *ne_calloc_ml(size_t size, const char *file, int line); void *ne_realloc_ml(void *ptr, size_t s, const char *file, int line); char *ne_strdup_ml(const char *s, const char *file, int line); char *ne_strndup_ml(const char *s, size_t n, const char *file, int line); void ne_free_ml(void *ptr); /* Dump the list of currently allocated blocks to 'f'. */ void ne_alloc_dump(FILE *f); /* Current number of bytes in allocated but not free'd. */ extern size_t ne_alloc_used; #endif /* MEMLEAK_H */ tla-1.3.5+dfsg/src/libneon/src/ne_utils.c0000644000175000017500000001073510457621776016754 0ustar useruser/* HTTP utility functions Copyright (C) 1999-2004, Joe Orton This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA */ #include "config.h" #include #ifdef HAVE_STRING_H #include #endif #include #include /* isdigit() for ne_parse_statusline */ #ifdef NEON_SSL #include #endif /* libxml2: pick up the version string. */ #if defined(HAVE_LIBXML) #include #elif defined(HAVE_EXPAT) && !defined(HAVE_XMLPARSE_H) #include #endif #ifdef NEON_ZLIB #include #endif #include "ne_utils.h" #include "ne_string.h" /* for ne_strdup */ #include "ne_dates.h" int ne_debug_mask = 0; FILE *ne_debug_stream = NULL; void ne_debug_init(FILE *stream, int mask) { ne_debug_stream = stream; ne_debug_mask = mask; #if defined(HAVE_SETVBUF) && defined(_IONBF) /* If possible, turn off buffering on the debug log. this is very * helpful if debugging segfaults. */ if (stream) setvbuf(stream, NULL, _IONBF, 0); #endif } void ne_debug(int ch, const char *template, ...) { va_list params; if ((ch & ne_debug_mask) == 0) return; fflush(stdout); va_start(params, template); vfprintf(ne_debug_stream, template, params); va_end(params); if ((ch & NE_DBG_FLUSH) == NE_DBG_FLUSH) fflush(ne_debug_stream); } #define NE_STRINGIFY(x) # x #define NE_EXPAT_VER(x,y,z) NE_STRINGIFY(x) "." NE_STRINGIFY(y) "." NE_STRINGIFY(z) static const char *version_string = "neon " NEON_VERSION ": " #ifdef NEON_IS_LIBRARY "Library build" #else "Bundled build" #endif #ifdef HAVE_EXPAT ", Expat" /* expat >=1.95.2 exported the version */ #ifdef XML_MAJOR_VERSION " " NE_EXPAT_VER(XML_MAJOR_VERSION, XML_MINOR_VERSION, XML_MICRO_VERSION) #endif #else /* !HAVE_EXPAT */ #ifdef HAVE_LIBXML ", libxml " LIBXML_DOTTED_VERSION #endif /* HAVE_LIBXML */ #endif /* !HAVE_EXPAT */ #if defined(NEON_ZLIB) && defined(ZLIB_VERSION) ", zlib " ZLIB_VERSION #endif /* NEON_ZLIB && ... */ #ifdef NEON_SOCKS ", SOCKSv5" #endif #ifdef NEON_SSL #ifdef OPENSSL_VERSION_TEXT ", " OPENSSL_VERSION_TEXT #else "OpenSSL (unknown version)" #endif /* OPENSSL_VERSION_TEXT */ #endif "." ; const char *ne_version_string(void) { return version_string; } int ne_version_match(int major, int minor) { return (NEON_VERSION_MAJOR != major) || (NEON_VERSION_MINOR < minor); } int ne_supports_ssl(void) { #ifdef NEON_SSL return 1; #else return 0; #endif } int ne_parse_statusline(const char *status_line, ne_status *st) { const char *part; int major, minor, status_code, klass; /* skip leading garbage if any. */ part = strstr(status_line, "HTTP/"); if (part == NULL) return -1; minor = major = 0; /* Parse version string, skipping leading zeroes. */ for (part += 5; *part != '\0' && isdigit(*part); part++) major = major*10 + (*part-'0'); if (*part++ != '.') return -1; for (;*part != '\0' && isdigit(*part); part++) minor = minor*10 + (*part-'0'); if (*part != ' ') return -1; /* Skip any spaces */ for (; *part == ' '; part++) /* noop */; /* Parse the Status-Code; part now points at the first Y in * "HTTP/x.x YYY". */ if (!isdigit(part[0]) || !isdigit(part[1]) || !isdigit(part[2]) || (part[3] != '\0' && part[3] != ' ')) return -1; status_code = 100*(part[0]-'0') + 10*(part[1]-'0') + (part[2]-'0'); klass = part[0]-'0'; /* Skip whitespace between status-code and reason-phrase */ for (part+=3; *part == ' ' || *part == '\t'; part++) /* noop */; /* part now may be pointing to \0 if reason phrase is blank */ /* Fill in the results */ st->major_version = major; st->minor_version = minor; st->reason_phrase = ne_strclean(ne_strdup(part)); st->code = status_code; st->klass = klass; return 0; } tla-1.3.5+dfsg/src/libneon/src/ne_stubssl.c0000644000175000017500000000570410457621776017313 0ustar useruser/* Stubs for SSL support when no SSL library has been configured Copyright (C) 2002-2003, Joe Orton This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA */ #include "config.h" #include /* for NULL */ #include "ne_ssl.h" #include "ne_session.h" char *ne_ssl_readable_dname(const ne_ssl_dname *dn) { return NULL; } ne_ssl_certificate *ne_ssl_cert_read(const char *filename) { return NULL; } int ne_ssl_cert_cmp(const ne_ssl_certificate *c1, const ne_ssl_certificate *c2) { return 1; } const ne_ssl_certificate *ne_ssl_cert_signedby(const ne_ssl_certificate *cert) { return NULL; } const ne_ssl_dname *ne_ssl_cert_issuer(const ne_ssl_certificate *cert) { return NULL; } const ne_ssl_dname *ne_ssl_cert_subject(const ne_ssl_certificate *cert) { return NULL; } void ne_ssl_cert_free(ne_ssl_certificate *cert) {} ne_ssl_client_cert *ne_ssl_clicert_read(const char *filename) { return NULL; } const ne_ssl_certificate *ne_ssl_clicert_owner(const ne_ssl_client_cert *ccert) { return NULL; } int ne_ssl_clicert_encrypted(const ne_ssl_client_cert *ccert) { return -1; } int ne_ssl_clicert_decrypt(ne_ssl_client_cert *ccert, const char *password) { return -1; } void ne_ssl_clicert_free(ne_ssl_client_cert *ccert) {} void ne_ssl_trust_default_ca(ne_session *sess) {} ne_ssl_context *ne_ssl_context_create(void) { return NULL; } void ne_ssl_ctx_trustcert(ne_ssl_context *ctx, const ne_ssl_certificate *cert) {} void ne_ssl_context_destroy(ne_ssl_context *ctx) {} int ne_ssl_cert_digest(const ne_ssl_certificate *cert, char digest[60]) { return -1; } void ne_ssl_cert_validity(const ne_ssl_certificate *cert, char *from, char *until) {} const char *ne_ssl_cert_identity(const ne_ssl_certificate *cert) { return NULL; } const char *ne_ssl_clicert_name(ne_ssl_client_cert *ccert) { return NULL; } int ne_ssl_dname_cmp(const ne_ssl_dname *dn1, const ne_ssl_dname *dn2) { return -1; } int ne_ssl_cert_write(const ne_ssl_certificate *cert, const char *filename) { return -1; } char *ne_ssl_cert_export(const ne_ssl_certificate *cert) { return NULL; } ne_ssl_certificate *ne_ssl_cert_import(const char *data) { return NULL; } void ne_ssl_set_clicert(ne_session *sess, const ne_ssl_client_cert *cc) {} tla-1.3.5+dfsg/src/libneon/src/ne_auth.h0000644000175000017500000000461510457621776016562 0ustar useruser/* HTTP authentication routines Copyright (C) 1999-2002, Joe Orton This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA */ #ifndef NE_AUTH_H #define NE_AUTH_H #include "ne_session.h" /* for ne_session */ BEGIN_NEON_DECLS /* Size of username/password buffers passed to ne_auth_creds * callback. */ #define NE_ABUFSIZ (256) /* The callback used to request the username and password in the given * realm. The username and password must be copied into the buffers * which are both of size NE_ABUFSIZ. The 'attempt' parameter is zero * on the first call to the callback, and increases by one each time * an attempt to authenticate fails. * * The callback must return zero to indicate that authentication * should be attempted with the username/password, or non-zero to * cancel the request. (if non-zero, username and password are * ignored.) */ typedef int (*ne_auth_creds)(void *userdata, const char *realm, int attempt, char *username, char *password); /* TOP TIP: if you just wish to try authenticating once (even if the * user gets the username/password wrong), have your implementation of * the callback return the 'attempt' value. */ /* Set callbacks to provide credentials for server and proxy * authentication. userdata is passed as the first argument to the * callback. The callback is called *indefinitely* until either it * returns non-zero, or authentication is successful. */ void ne_set_server_auth(ne_session *sess, ne_auth_creds creds, void *userdata); void ne_set_proxy_auth(ne_session *sess, ne_auth_creds creds, void *userdata); /* Clear any stored authentication details for the given session. */ void ne_forget_auth(ne_session *sess); END_NEON_DECLS #endif /* NE_AUTH_H */ tla-1.3.5+dfsg/src/libneon/src/ne_utils.h0000644000175000017500000000661510457621776016763 0ustar useruser/* HTTP utility functions Copyright (C) 1999-2002, Joe Orton This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA */ #ifndef NE_UTILS_H #define NE_UTILS_H #include #include #include #include "ne_defs.h" #ifdef NEON_TRIO /* no HAVE_TRIO_H check so this works from outside neon build tree. */ #include #endif BEGIN_NEON_DECLS /* Returns a human-readable version string like: * "neon 0.2.0: Library build, OpenSSL support" */ const char *ne_version_string(void); /* Returns non-zero if library version is not of major version * 'major', or if minor version is not greater than or equal to * 'minor'. */ int ne_version_match(int major, int minor); /* Returns non-zero if neon has support for SSL. */ int ne_supports_ssl(void); /* Use replacement snprintf's if trio is being used. */ #ifdef NEON_TRIO #define ne_snprintf trio_snprintf #define ne_vsnprintf trio_vsnprintf #else #define ne_snprintf snprintf #define ne_vsnprintf vsnprintf #endif #ifndef WIN32 #undef min #define min(a,b) ((a)<(b)?(a):(b)) #endif /* CONSIDER: mutt has a nicer way of way of doing debugging output... maybe * switch to like that. */ #ifndef NE_DEBUGGING #define NE_DEBUG if (0) ne_debug #else /* DEBUGGING */ #define NE_DEBUG ne_debug #endif /* DEBUGGING */ #define NE_DBG_SOCKET (1<<0) #define NE_DBG_HTTP (1<<1) #define NE_DBG_XML (1<<2) #define NE_DBG_HTTPAUTH (1<<3) #define NE_DBG_HTTPPLAIN (1<<4) #define NE_DBG_LOCKS (1<<5) #define NE_DBG_XMLPARSE (1<<6) #define NE_DBG_HTTPBODY (1<<7) #define NE_DBG_SSL (1<<8) #define NE_DBG_FLUSH (1<<30) /* Send debugging output to 'stream', for all of the given debug * channels. To disable debugging, pass 'stream' as NULL and 'mask' * as 0. */ void ne_debug_init(FILE *stream, int mask); /* The current debug mask and stream set by the last call to * ne_debug_init. */ extern int ne_debug_mask; extern FILE *ne_debug_stream; /* Produce debug output if any of channels 'ch' is enabled for * debugging. */ void ne_debug(int ch, const char *, ...) ne_attribute((format(printf, 2, 3))); /* Storing an HTTP status result */ typedef struct { int major_version; int minor_version; int code; /* Status-Code value */ int klass; /* Class of Status-Code (1-5) */ char *reason_phrase; } ne_status; /* NB: couldn't use 'class' in ne_status because it would clash with * the C++ reserved word. */ /* Parser for strings which follow the Status-Line grammar from * RFC2616. s->reason_phrase is malloc-allocated if non-NULL, and * must be free'd by the caller. * Returns: * 0 on success, *s will be filled in. * -1 on parse error. */ int ne_parse_statusline(const char *status_line, ne_status *s); END_NEON_DECLS #endif /* NE_UTILS_H */ tla-1.3.5+dfsg/src/libneon/src/ne_defs.h0000644000175000017500000000234710457621776016542 0ustar useruser/* Standard definitions for neon headers Copyright (C) 2003, Joe Orton This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA */ #undef BEGIN_NEON_DECLS #undef END_NEON_DECLS #ifdef __cplusplus # define BEGIN_NEON_DECLS extern "C" { # define END_NEON_DECLS } #else # define BEGIN_NEON_DECLS /* empty */ # define END_NEON_DECLS /* empty */ #endif /* define ssize_t for Win32 */ #if defined(WIN32) && !defined(ssize_t) #define ssize_t int #endif #ifdef __GNUC__ #define ne_attribute(x) __attribute__(x) #else #define ne_attribute(x) #endif tla-1.3.5+dfsg/src/libneon/src/ne_basic.h0000644000175000017500000001145410457621776016701 0ustar useruser/* HTTP/1.1 methods Copyright (C) 1999-2002, Joe Orton This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA */ #ifndef NE_BASIC_H #define NE_BASIC_H #include /* for time_t */ #include "ne_request.h" BEGIN_NEON_DECLS /* Perform a GET request on resource at 'path', writing the entity * body which is returned to 'fd'. */ int ne_get(ne_session *sess, const char *path, int fd); /* Perform a PUT request on resource at 'path', reading the entity * body to submit from 'fd'. */ int ne_put(ne_session *sess, const char *path, int fd); #ifndef NEON_NODAV #define NE_DEPTH_ZERO (0) #define NE_DEPTH_ONE (1) #define NE_DEPTH_INFINITE (2) /* For ne_copy and ne_move: * * If a resource exists at "dest" and overwrite is zero, the operation * will fail; if overwrite is non-zero, any existing resource will * be over-written. */ /* Copy resource from 'src to 'dest' paths. If 'src' identifies a * collection resource, depth may be NE_DEPTH_ZERO to request that the * collection and its properties are to be copied, or * NE_DEPTH_INFINITE to request that the collection and its contents * are to be copied. */ int ne_copy(ne_session *sess, int overwrite, int depth, const char *src, const char *dest); /* Move resource from 'src' to dest 'path'. */ int ne_move(ne_session *sess, int overwrite, const char *src, const char *dest); /* Delete resource at 'path'. */ int ne_delete(ne_session *sess, const char *path); /* Create a collection at 'path', which MUST have a trailing slash. */ int ne_mkcol(ne_session *sess, const char *path); /* Adds a Depth: header to a request */ void ne_add_depth_header(ne_request *req, int depth); #endif /* NEON_NODAV */ /* PUT resource at location as above, only if it has not been modified * since given modtime. If server is HTTP/1.1, uses If-Unmodified-Since * header; guaranteed failure if resource is modified after 'modtime'. * If server is HTTP/1.0, HEAD's the resource first to fetch current * modtime; race condition if resource is modified between HEAD and PUT. */ int ne_put_if_unmodified(ne_session *sess, const char *path, int fd, time_t modtime); /* Retrieve modification time of resource at location 'path', place in * *modtime. (uses HEAD) */ int ne_getmodtime(ne_session *sess, const char *path, time_t *modtime); typedef struct { const char *type, *subtype; const char *charset; char *value; } ne_content_type; /* Sets (*ne_content_type)userdata appropriately. * Caller must free ->value after use */ void ne_content_type_handler(void *userdata, const char *value); /* Server capabilities: */ typedef struct { unsigned int dav_class1; /* True if Class 1 WebDAV server */ unsigned int dav_class2; /* True if Class 2 WebDAV server */ unsigned int dav_executable; /* True if supports the 'executable' * property a. la. mod_dav */ } ne_server_capabilities; /* Determines server capabilities (using OPTIONS). Pass 'path' as "*" * to determine proxy server capabilities if using a proxy server. */ int ne_options(ne_session *sess, const char *path, ne_server_capabilities *caps); /* Defines a range of bytes, starting at 'start' and ending * at 'end'. 'total' is the number of bytes in the range. */ typedef struct { off_t start, end, total; } ne_content_range; /* Partial GET. range->start must be >= 0. range->total is ignored. * * If range->end is -1, then the rest of the resource from start is * requested, and range->total and end are filled in on success. * * Otherwise, bytes from range->start to range->end are requested. * * This will write to the CURRENT position of f; so if you want * to do a resume download, use: * struct ne_content_range range; * range.start = resume_from; * range.end = range.start + 999; (= 1000 bytes) * fseek(myfile, resume_from, SEEK_SET); * ne_get_range(sess, path, &range, myfile); */ int ne_get_range(ne_session *sess, const char *path, ne_content_range *range, int fd); /* Post using buffer as request-body: stream response into f */ int ne_post(ne_session *sess, const char *path, int fd, const char *buffer); END_NEON_DECLS #endif /* NE_BASIC_H */ tla-1.3.5+dfsg/src/libneon/src/ne_redirect.c0000644000175000017500000000723610457621776017417 0ustar useruser/* HTTP-redirect support Copyright (C) 1999-2003, Joe Orton This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA */ #include "config.h" #ifdef HAVE_STDLIB_H #include #endif #ifdef HAVE_STRING_H #include #endif #include "ne_session.h" #include "ne_request.h" #include "ne_alloc.h" #include "ne_uri.h" #include "ne_redirect.h" #include "ne_i18n.h" #include "ne_string.h" #define REDIRECT_ID "http://www.webdav.org/neon/hooks/http-redirect" struct redirect { char *location; char *requri; int valid; /* non-zero if .uri contains a redirect */ ne_uri uri; ne_session *sess; }; static void create(ne_request *req, void *session, const char *method, const char *uri) { struct redirect *red = session; NE_FREE(red->location); NE_FREE(red->requri); red->requri = ne_strdup(uri); ne_add_response_header_handler(req, "Location", ne_duplicate_header, &red->location); } #define REDIR(n) ((n) == 301 || (n) == 302 || (n) == 303 || \ (n) == 307) static int post_send(ne_request *req, void *private, const ne_status *status) { struct redirect *red = private; /* Don't do anything for non-redirect status or no Location header. */ if (!REDIR(status->code) || red->location == NULL) return NE_OK; if (strstr(red->location, "://") == NULL && red->location[0] != '/') { /* FIXME: remove this relative URI resolution hack. */ ne_buffer *path = ne_buffer_create(); char *pnt; ne_buffer_zappend(path, red->requri); pnt = strrchr(path->data, '/'); if (pnt && *(pnt+1) != '\0') { /* Chop off last path segment. */ *(pnt+1) = '\0'; ne_buffer_altered(path); } ne_buffer_zappend(path, red->location); ne_free(red->location); red->location = ne_buffer_finish(path); } /* free last uri. */ ne_uri_free(&red->uri); /* Parse the Location header */ if (ne_uri_parse(red->location, &red->uri) || red->uri.path == NULL) { red->valid = 0; ne_set_error(red->sess, _("Could not parse redirect location.")); return NE_ERROR; } /* got a valid redirect. */ red->valid = 1; if (!red->uri.host) { /* Not an absoluteURI: breaks 2616 but everybody does it. */ ne_fill_server_uri(red->sess, &red->uri); } return NE_REDIRECT; } static void free_redirect(void *cookie) { struct redirect *red = cookie; NE_FREE(red->location); ne_uri_free(&red->uri); if (red->requri) ne_free(red->requri); ne_free(red); } void ne_redirect_register(ne_session *sess) { struct redirect *red = ne_calloc(sizeof *red); red->sess = sess; ne_hook_create_request(sess, create, red); ne_hook_post_send(sess, post_send, red); ne_hook_destroy_session(sess, free_redirect, red); ne_set_session_private(sess, REDIRECT_ID, red); } const ne_uri *ne_redirect_location(ne_session *sess) { struct redirect *red = ne_get_session_private(sess, REDIRECT_ID); if (red && red->valid) return &red->uri; else return NULL; } tla-1.3.5+dfsg/src/libneon/src/ne_session.h0000644000175000017500000001653210457621776017305 0ustar useruser/* HTTP session handling Copyright (C) 1999-2003, Joe Orton This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA */ #ifndef NE_SESSION_H #define NE_SESSION_H 1 #include #include "ne_ssl.h" #include "ne_uri.h" /* for ne_uri */ #include "ne_defs.h" BEGIN_NEON_DECLS typedef struct ne_session_s ne_session; /* Create a session to the given server, using the given scheme. If * "https" is passed as the scheme, SSL will be used to connect to the * server. */ ne_session *ne_session_create(const char *scheme, const char *hostname, unsigned int port); /* Finish an HTTP session */ void ne_session_destroy(ne_session *sess); /* Prematurely force the connection to be closed for the given * session. */ void ne_close_connection(ne_session *sess); /* Set the proxy server to be used for the session. */ void ne_session_proxy(ne_session *sess, const char *hostname, unsigned int port); /* Set protocol options for session: * expect100: Defaults to OFF * persist: Defaults to ON * * expect100: When set, send the "Expect: 100-continue" request header * with requests with bodies. * * persist: When set, use a persistent connection. (Generally, * you don't want to turn this off.) * */ void ne_set_expect100(ne_session *sess, int use_expect100); void ne_set_persist(ne_session *sess, int persist); /* Progress callback. */ typedef void (*ne_progress)(void *userdata, off_t progress, off_t total); /* Set a progress callback for the session. */ void ne_set_progress(ne_session *sess, ne_progress progress, void *userdata); /* Store an opaque context for the session, 'priv' is returned by a * call to ne_session_get_private with the same ID. */ void ne_set_session_private(ne_session *sess, const char *id, void *priv); void *ne_get_session_private(ne_session *sess, const char *id); typedef enum { ne_conn_namelookup, /* lookup up hostname (info = hostname) */ ne_conn_connecting, /* connecting to host (info = hostname) */ ne_conn_connected, /* connected to host (info = hostname) */ ne_conn_secure /* connection now secure (info = crypto level) */ } ne_conn_status; typedef void (*ne_notify_status)(void *userdata, ne_conn_status status, const char *info); /* Set a status notification callback for the session, to report * connection status. */ void ne_set_status(ne_session *sess, ne_notify_status status, void *userdata); /* Certificate verification failures. * The certificate is not yet valid: */ #define NE_SSL_NOTYETVALID (0x01) /* The certificate has expired: */ #define NE_SSL_EXPIRED (0x02) /* The hostname for which the certificate was issued does not * match the hostname of the server; this could mean that the * connection is being intercepted: */ #define NE_SSL_IDMISMATCH (0x04) /* The certificate authority which signed the server certificate is * not trusted: there is no indicatation the server is who they claim * to be: */ #define NE_SSL_UNTRUSTED (0x08) /* The bitmask of known failure bits: if (failures & ~NE_SSL_FAILMASK) * is non-zero, an unrecognized failure is given, and the verification * should be failed. */ #define NE_SSL_FAILMASK (0x0f) /* A callback which is used when server certificate verification is * needed. The reasons for verification failure are given in the * 'failures' parameter, which is a binary OR of one or more of the * above NE_SSL_* values. failures is guaranteed to be non-zero. The * callback must return zero to accept the certificate: a non-zero * return value will fail the SSL negotiation. */ typedef int (*ne_ssl_verify_fn)(void *userdata, int failures, const ne_ssl_certificate *cert); /* Install a callback to handle server certificate verification. This * is required when the CA certificate is not known for the server * certificate, or the server cert has other verification problems. */ void ne_ssl_set_verify(ne_session *sess, ne_ssl_verify_fn fn, void *userdata); /* Use the given client certificate for the session. The client cert * MUST be in the decrypted state, otherwise behaviour is undefined. */ void ne_ssl_set_clicert(ne_session *sess, const ne_ssl_client_cert *clicert); /* Indicate that the certificate 'cert' is trusted; 'cert' is * duplicated internally and may be destroyed at will. */ void ne_ssl_trust_cert(ne_session *sess, const ne_ssl_certificate *cert); /* If the SSL library provided a default set of CA certificates, trust * this set of CAs. */ void ne_ssl_trust_default_ca(ne_session *sess); /* Callback used to load a client certificate on demand. If dncount * is > 0, the 'dnames' array dnames[0] through dnames[dncount-1] * gives the list of CA names which the server indicated were * acceptable. The callback should load an appropriate client * certificate and then pass it to 'ne_ssl_set_clicert'. */ typedef void (*ne_ssl_provide_fn)(void *userdata, ne_session *sess, const ne_ssl_dname *const *dnames, int dncount); /* Register a function to be called when the server requests a client * certificate. */ void ne_ssl_provide_clicert(ne_session *sess, ne_ssl_provide_fn fn, void *userdata); /* Set the timeout (in seconds) used when reading from a socket. The * timeout value must be greater than zero. */ void ne_set_read_timeout(ne_session *sess, int timeout); /* Sets the user-agent string. neon/VERSION will be appended, to make * the full header "User-Agent: product neon/VERSION". * If this function is not called, the User-Agent header is not sent. * The product string must follow the RFC2616 format, i.e. * product = token ["/" product-version] * product-version = token * where token is any alpha-numeric-y string [a-zA-Z0-9]* */ void ne_set_useragent(ne_session *sess, const char *product); /* Returns non-zero if next-hop server does not claim compliance to * HTTP/1.1 or later. */ int ne_version_pre_http11(ne_session *sess); /* Returns the 'hostport' URI segment for the end-server, e.g. * "my.server.com:8080". */ const char *ne_get_server_hostport(ne_session *sess); /* Returns the URL scheme being used for the current session, omitting * the trailing ':'; e.g. "http" or "https". */ const char *ne_get_scheme(ne_session *sess); /* Sets the host, scheme, and port fields (and no others) of the given * URI structure; host and scheme are malloc-allocated. */ void ne_fill_server_uri(ne_session *sess, ne_uri *uri); /* Set the error string for the session; takes printf-like format * string. */ void ne_set_error(ne_session *sess, const char *format, ...) ne_attribute((format (printf, 2, 3))); /* Retrieve the error string for the session */ const char *ne_get_error(ne_session *sess); END_NEON_DECLS #endif /* NE_SESSION_H */ tla-1.3.5+dfsg/src/libneon/src/ne_xml.h0000644000175000017500000001272510457621776016422 0ustar useruser/* neon XML parser interface Copyright (C) 1999-2003, Joe Orton This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA */ #ifndef NE_XML_H #define NE_XML_H #include /* for size_t */ #include "ne_defs.h" BEGIN_NEON_DECLS /* The neon XML interface filters a streamed XML tree through a stack * of SAX "handlers". A handler is made up of three callbacks * (start-element, char-data, end-element). Each start-element event * is passed to each handler in the stack in turn until one until one * accepts the element. This handler then receives subsequent * char-data and end-element events for the element. * * For each new start-element event, the search up the handler stack * begins with the handler for the parent element (for the root * element, at the base of the stack). * * For each accepted element, a "state" integer is stored, which is * passed to the corresponding char-data and end-element callbacks for * the element. This integer is also passed to the start-element * callback of child elements so they can determine context. * * If no handler in the stack accepts a particular element, it (and * its children, if any) is ignored. */ #define NE_XML_DECLINE (0) #define NE_XML_ABORT (-1) /* A start-element callback for element with given namespace/name. * The callback may return: * <0 => abort the parse (NE_XML_ABORT) * 0 => decline this element (NE_XML_DECLINE) * >0 => accept this element; value is state for this element. * * The 'parent' integer is the state returned by the handler of the * parent element. The attributes array gives name/value pairs * in atts[n] and atts[n+1] from n=0 up to atts[n]==NULL. */ typedef int ne_xml_startelm_cb(void *userdata, int parent, const char *nspace, const char *name, const char **atts); /* state for the root element */ #define NE_XML_STATEROOT (0) /* Character data callback; may return non-zero to abort the parse. */ typedef int ne_xml_cdata_cb(void *userdata, int state, const char *cdata, size_t len); /* End element callback; may return non-zero to abort the parse. */ typedef int ne_xml_endelm_cb(void *userdata, int state, const char *nspace, const char *name); typedef struct ne_xml_parser_s ne_xml_parser; /* Create an XML parser. */ ne_xml_parser *ne_xml_create(void); /* Push a new handler on the stack of parser 'p'. 'cdata' and/or * 'endelm' may be NULL; startelm must be non-NULL. */ void ne_xml_push_handler(ne_xml_parser *p, ne_xml_startelm_cb *startelm, ne_xml_cdata_cb *cdata, ne_xml_endelm_cb *endelm, void *userdata); /* Returns non-zero if the parse was valid, zero if it failed (e.g., * any of the callbacks failed, the XML was not well-formed, etc). * Use ne_xml_get_error to retrieve the error message if it failed. */ int ne_xml_valid(ne_xml_parser *p); /* Destroy the parser object. */ void ne_xml_destroy(ne_xml_parser *p); /* Parse the given block of input of length len. Block does not need * to be NUL-terminated. */ void ne_xml_parse(ne_xml_parser *p, const char *block, size_t len); /* As above, casting (ne_xml_parser *)userdata internally. * (This function can be passed to ne_add_response_body_reader) */ void ne_xml_parse_v(void *userdata, const char *block, size_t len); /* Return current parse line for errors */ int ne_xml_currentline(ne_xml_parser *p); /* Set error string for parser. */ void ne_xml_set_error(ne_xml_parser *p, const char *msg); /* Return the error string for the parser and never NULL. */ const char *ne_xml_get_error(ne_xml_parser *p); /* From a start_element callback which was passed 'attrs' using given * parser, return attribute of given name and namespace. If nspace is * NULL, no namespace resolution is performed. */ const char *ne_xml_get_attr(ne_xml_parser *parser, const char **attrs, const char *nspace, const char *name); /* Return the encoding of the document being parsed. May return NULL * if no encoding is defined or if the XML declaration has not yet * been parsed. */ const char *ne_xml_doc_encoding(const ne_xml_parser *p); /* A utility interface for mapping {nspace, name} onto an integer. */ struct ne_xml_idmap { const char *nspace, *name; int id; }; /* Return the size of an idmap array */ #define NE_XML_MAPLEN(map) (sizeof(map) / sizeof(struct ne_xml_idmap)) /* Return the 'id' corresponding to {nspace, name}, or zero. */ int ne_xml_mapid(const struct ne_xml_idmap map[], size_t maplen, const char *nspace, const char *name); /* media type, appropriate for adding to a Content-Type header */ #define NE_XML_MEDIA_TYPE "application/xml" END_NEON_DECLS #endif /* NE_XML_H */ tla-1.3.5+dfsg/src/libneon/src/ne_alloc.c0000644000175000017500000001040710457621776016702 0ustar useruser/* Replacement memory allocation handling etc. Copyright (C) 1999-2003, Joe Orton This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA */ #include "config.h" #ifdef HAVE_STRING_H #include #endif #ifdef HAVE_STDLIB_H #include #endif #include #include "ne_alloc.h" static void (*oom)(void); void ne_oom_callback(void (*callback)(void)) { oom = callback; } #ifndef NEON_MEMLEAK #define DO_MALLOC(ptr, len) do { \ ptr = malloc((len)); \ if (!ptr) { \ if (oom != NULL) \ oom(); \ abort(); \ } \ } while(0); void *ne_malloc(size_t len) { void *ptr; DO_MALLOC(ptr, len); return ptr; } void *ne_calloc(size_t len) { void *ptr; DO_MALLOC(ptr, len); return memset(ptr, 0, len); } void *ne_realloc(void *ptr, size_t len) { void *ret = realloc(ptr, len); if (!ret) { if (oom) oom(); abort(); } return ret; } char *ne_strdup(const char *s) { char *ret; DO_MALLOC(ret, strlen(s) + 1); return strcpy(ret, s); } char *ne_strndup(const char *s, size_t n) { char *new; DO_MALLOC(new, n+1); new[n] = '\0'; memcpy(new, s, n); return new; } #else /* NEON_MEMLEAK */ /* Memory-leak detection implementation: ne_malloc and friends are * #defined to ne_malloc_ml etc by memleak.h, which is conditionally * included by config.h. */ /* memory allocated be ne_*alloc, but not freed. */ size_t ne_alloc_used = 0; static struct block { void *ptr; size_t len; const char *file; int line; struct block *next; } *blocks = NULL; void ne_alloc_dump(FILE *f) { struct block *b; for (b = blocks; b != NULL; b = b->next) fprintf(f, "%" NE_FMT_SIZE_T "b@%s:%d%s", b->len, b->file, b->line, b->next?", ":""); } static void *tracking_malloc(size_t len, const char *file, int line) { void *ptr = malloc((len)); struct block *block; if (!ptr) { if (oom) oom(); abort(); } block = malloc(sizeof *block); if (block != NULL) { block->ptr = ptr; block->len = len; block->file = file; block->line = line; block->next = blocks; blocks = block; ne_alloc_used += len; } return ptr; } void *ne_malloc_ml(size_t size, const char *file, int line) { return tracking_malloc(size, file, line); } void *ne_calloc_ml(size_t size, const char *file, int line) { return memset(tracking_malloc(size, file, line), 0, size); } void *ne_realloc_ml(void *ptr, size_t s, const char *file, int line) { void *ret = realloc(ptr, s); struct block *b; if (!ret) { if (oom) oom(); abort(); } for (b = blocks; b != NULL; b = b->next) { if (b->ptr == ptr) { ne_alloc_used = ne_alloc_used + s - b->len; b->ptr = ret; b->len = s; break; } } return ret; } char *ne_strdup_ml(const char *s, const char *file, int line) { return strcpy(tracking_malloc(strlen(s) + 1, file, line), s); } char *ne_strndup_ml(const char *s, size_t n, const char *file, int line) { char *ret = tracking_malloc(n + 1, file, line); ret[n] = '\0'; return memcpy(ret, s, n); } void ne_free_ml(void *ptr) { struct block *b, *last = NULL; for (b = blocks; b != NULL; last = b, b = b->next) { if (b->ptr == ptr) { ne_alloc_used -= b->len; if (last) last->next = b->next; else blocks = b->next; free(b); break; } } free(ptr); } #endif /* NEON_MEMLEAK */ tla-1.3.5+dfsg/src/libneon/src/ne_props.c0000644000175000017500000004051510457621776016756 0ustar useruser/* WebDAV property manipulation Copyright (C) 2000-2004, Joe Orton This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA */ #include "config.h" #ifdef HAVE_STDLIB_H #include #endif #ifdef HAVE_STRING_H #include #endif #include "ne_alloc.h" #include "ne_xml.h" #include "ne_props.h" #include "ne_basic.h" #include "ne_locks.h" /* don't store flat props with a value > 10K */ #define MAX_FLATPROP_LEN (102400) struct ne_propfind_handler_s { ne_session *sess; ne_request *request; int has_props; /* whether we've already written some * props to the body. */ ne_buffer *body; ne_207_parser *parser207; ne_xml_parser *parser; /* Callback to create the private structure. */ ne_props_create_complex private_creator; void *private_userdata; /* Current propset, or NULL if none being processed. */ ne_prop_result_set *current; ne_buffer *value; /* current flat property value */ int depth; /* nesting depth within a flat property */ ne_props_result callback; void *userdata; }; #define ELM_flatprop (NE_207_STATE_TOP - 1) /* We build up the results of one 'response' element in memory. */ struct prop { char *name, *nspace, *value, *lang; /* Store a ne_propname here too, for convienience. pname.name = * name, pname.nspace = nspace, but they are const'ed in pname. */ ne_propname pname; }; #define NSPACE(x) ((x) ? (x) : "") struct propstat { struct prop *props; int numprops; ne_status status; }; /* Results set. */ struct ne_prop_result_set_s { struct propstat *pstats; int numpstats; void *private; char *href; }; static int startelm(void *userdata, int state, const char *name, const char *nspace, const char **atts); static int endelm(void *userdata, int state, const char *name, const char *nspace); /* Handle character data; flat property value. */ static int chardata(void *userdata, int state, const char *data, size_t len) { ne_propfind_handler *hdl = userdata; if (state == ELM_flatprop && hdl->value->length < MAX_FLATPROP_LEN) ne_buffer_append(hdl->value, data, len); return 0; } ne_xml_parser *ne_propfind_get_parser(ne_propfind_handler *handler) { return handler->parser; } ne_request *ne_propfind_get_request(ne_propfind_handler *handler) { return handler->request; } static int propfind(ne_propfind_handler *handler, ne_props_result results, void *userdata) { int ret; ne_request *req = handler->request; /* Register the flat property handler to catch any properties * which the user isn't handling as 'complex'. */ ne_xml_push_handler(handler->parser, startelm, chardata, endelm, handler); handler->callback = results; handler->userdata = userdata; ne_set_request_body_buffer(req, handler->body->data, ne_buffer_size(handler->body)); ne_add_request_header(req, "Content-Type", NE_XML_MEDIA_TYPE); ne_add_response_body_reader(req, ne_accept_207, ne_xml_parse_v, handler->parser); ret = ne_request_dispatch(req); if (ret == NE_OK && ne_get_status(req)->klass != 2) { ret = NE_ERROR; } else if (!ne_xml_valid(handler->parser)) { ne_set_error(handler->sess, "%s", ne_xml_get_error(handler->parser)); ret = NE_ERROR; } return ret; } static void set_body(ne_propfind_handler *hdl, const ne_propname *names) { ne_buffer *body = hdl->body; int n; if (!hdl->has_props) { ne_buffer_zappend(body, "" EOL); hdl->has_props = 1; } for (n = 0; names[n].name != NULL; n++) { ne_buffer_concat(body, "<", names[n].name, " xmlns=\"", NSPACE(names[n].nspace), "\"/>" EOL, NULL); } } int ne_propfind_allprop(ne_propfind_handler *handler, ne_props_result results, void *userdata) { ne_buffer_zappend(handler->body, "" EOL); return propfind(handler, results, userdata); } int ne_propfind_named(ne_propfind_handler *handler, const ne_propname *props, ne_props_result results, void *userdata) { set_body(handler, props); ne_buffer_zappend(handler->body, "" EOL); return propfind(handler, results, userdata); } /* The easy one... PROPPATCH */ int ne_proppatch(ne_session *sess, const char *uri, const ne_proppatch_operation *items) { ne_request *req = ne_request_create(sess, "PROPPATCH", uri); ne_buffer *body = ne_buffer_create(); int n, ret; /* Create the request body */ ne_buffer_zappend(body, "" EOL ""); for (n = 0; items[n].name != NULL; n++) { const char *elm = (items[n].type == ne_propset) ? "set" : "remove"; /* value */ ne_buffer_concat(body, "" "<", items[n].name->name, NULL); if (items[n].name->nspace) { ne_buffer_concat(body, " xmlns=\"", items[n].name->nspace, "\"", NULL); } if (items[n].type == ne_propset) { ne_buffer_concat(body, ">", items[n].value, NULL); } else { ne_buffer_append(body, ">", 1); } ne_buffer_concat(body, "name, ">" EOL, NULL); } ne_buffer_zappend(body, "" EOL); ne_set_request_body_buffer(req, body->data, ne_buffer_size(body)); ne_add_request_header(req, "Content-Type", NE_XML_MEDIA_TYPE); #ifdef USE_DAV_LOCKS ne_lock_using_resource(req, uri, NE_DEPTH_ZERO); #endif ret = ne_simple_request(sess, req); ne_buffer_destroy(body); return ret; } /* Compare two property names. */ static int pnamecmp(const ne_propname *pn1, const ne_propname *pn2) { if (pn1->nspace == NULL && pn2->nspace != NULL) { return 1; } else if (pn1->nspace != NULL && pn2->nspace == NULL) { return -1; } else if (pn1->nspace == NULL) { return strcmp(pn1->name, pn2->name); } else { return (strcmp(pn1->nspace, pn2->nspace) || strcmp(pn1->name, pn2->name)); } } /* Find property in 'set' with name 'pname'. If found, set pstat_ret * to the containing propstat, likewise prop_ret, and returns zero. * If not found, returns non-zero. */ static int findprop(const ne_prop_result_set *set, const ne_propname *pname, struct propstat **pstat_ret, struct prop **prop_ret) { int ps, p; for (ps = 0; ps < set->numpstats; ps++) { for (p = 0; p < set->pstats[ps].numprops; p++) { struct prop *prop = &set->pstats[ps].props[p]; if (pnamecmp(&prop->pname, pname) == 0) { if (pstat_ret != NULL) *pstat_ret = &set->pstats[ps]; if (prop_ret != NULL) *prop_ret = prop; return 0; } } } return -1; } const char *ne_propset_value(const ne_prop_result_set *set, const ne_propname *pname) { struct prop *prop; if (findprop(set, pname, NULL, &prop)) { return NULL; } else { return prop->value; } } const char *ne_propset_lang(const ne_prop_result_set *set, const ne_propname *pname) { struct prop *prop; if (findprop(set, pname, NULL, &prop)) { return NULL; } else { return prop->lang; } } void *ne_propfind_current_private(ne_propfind_handler *handler) { return handler->current ? handler->current->private : NULL; } void *ne_propset_private(const ne_prop_result_set *set) { return set->private; } int ne_propset_iterate(const ne_prop_result_set *set, ne_propset_iterator iterator, void *userdata) { int ps, p; for (ps = 0; ps < set->numpstats; ps++) { for (p = 0; p < set->pstats[ps].numprops; p++) { struct prop *prop = &set->pstats[ps].props[p]; int ret = iterator(userdata, &prop->pname, prop->value, &set->pstats[ps].status); if (ret) return ret; } } return 0; } const ne_status *ne_propset_status(const ne_prop_result_set *set, const ne_propname *pname) { struct propstat *pstat; if (findprop(set, pname, &pstat, NULL)) { /* TODO: it is tempting to return a dummy status object here * rather than NULL, which says "Property result was not given * by server." but I'm not sure if this is best left to the * client. */ return NULL; } else { return &pstat->status; } } static void *start_response(void *userdata, const char *href) { ne_prop_result_set *set = ne_calloc(sizeof(*set)); ne_propfind_handler *hdl = userdata; set->href = ne_strdup(href); if (hdl->private_creator != NULL) { set->private = hdl->private_creator(hdl->private_userdata, href); } hdl->current = set; return set; } static void *start_propstat(void *userdata, void *response) { ne_prop_result_set *set = response; int n; struct propstat *pstat; n = set->numpstats; set->pstats = ne_realloc(set->pstats, sizeof(struct propstat) * (n+1)); set->numpstats = n+1; pstat = &set->pstats[n]; memset(pstat, 0, sizeof(*pstat)); /* And return this as the new pstat. */ return &set->pstats[n]; } static int startelm(void *userdata, int parent, const char *nspace, const char *name, const char **atts) { ne_propfind_handler *hdl = userdata; struct propstat *pstat = ne_207_get_current_propstat(hdl->parser207); struct prop *prop; int n; const char *lang; /* Just handle all children of propstat and their descendants. */ if ((parent != NE_207_STATE_PROP && parent != ELM_flatprop) || pstat == NULL) return NE_XML_DECLINE; if (parent == ELM_flatprop) { /* collecting the flatprop value. */ hdl->depth++; if (hdl->value->used < MAX_FLATPROP_LEN) ne_buffer_concat(hdl->value, "<", name, ">", NULL); return ELM_flatprop; } /* Add a property to this propstat */ n = pstat->numprops; pstat->props = ne_realloc(pstat->props, sizeof(struct prop) * (n + 1)); pstat->numprops = n+1; /* Fill in the new property. */ prop = &pstat->props[n]; prop->pname.name = prop->name = ne_strdup(name); if (nspace[0] == '\0') { prop->pname.nspace = prop->nspace = NULL; } else { prop->pname.nspace = prop->nspace = ne_strdup(nspace); } prop->value = NULL; NE_DEBUG(NE_DBG_XML, "Got property #%d: {%s}%s.\n", n, NSPACE(prop->nspace), prop->name); /* This is under discussion at time of writing (April '01), and it * looks like we need to retrieve the xml:lang property from any * element here or above. * * Also, I think we might need attribute namespace handling here. */ lang = ne_xml_get_attr(hdl->parser, atts, NULL, "xml:lang"); if (lang != NULL) { prop->lang = ne_strdup(lang); NE_DEBUG(NE_DBG_XML, "Property language is %s\n", prop->lang); } else { prop->lang = NULL; } hdl->depth = 0; return ELM_flatprop; } static int endelm(void *userdata, int state, const char *nspace, const char *name) { ne_propfind_handler *hdl = userdata; struct propstat *pstat = ne_207_get_current_propstat(hdl->parser207); int n; if (hdl->depth > 0) { /* nested. */ if (hdl->value->used < MAX_FLATPROP_LEN) ne_buffer_concat(hdl->value, "", NULL); hdl->depth--; } else { /* end of the current property value */ n = pstat->numprops - 1; pstat->props[n].value = ne_buffer_finish(hdl->value); hdl->value = ne_buffer_create(); } return 0; } static void end_propstat(void *userdata, void *pstat_v, const ne_status *status, const char *description) { struct propstat *pstat = pstat_v; /* Nothing to do if no status was given. */ if (!status) return; /* If we get a non-2xx response back here, we wipe the value for * each of the properties in this propstat, so the caller knows to * look at the status instead. It's annoying, since for each prop * we will have done an unnecessary strdup("") above, but there is * no easy way round that given the fact that we don't know * whether we've got an error or not till after we get the * property element. * * Interestingly IIS breaks the 2518 DTD and puts the status * element first in the propstat. This is useful since then we * *do* know whether each subsequent empty prop element means, but * we can't rely on that here. */ if (status->klass != 2) { int n; for (n = 0; n < pstat->numprops; n++) { ne_free(pstat->props[n].value); pstat->props[n].value = NULL; } } /* copy the status structure, and dup the reason phrase. */ pstat->status = *status; pstat->status.reason_phrase = ne_strdup(status->reason_phrase); } /* Frees up a results set */ static void free_propset(ne_prop_result_set *set) { int n; for (n = 0; n < set->numpstats; n++) { int m; struct propstat *p = &set->pstats[n]; for (m = 0; m < p->numprops; m++) { NE_FREE(p->props[m].nspace); ne_free(p->props[m].name); NE_FREE(p->props[m].lang); NE_FREE(p->props[m].value); } if (p->status.reason_phrase) ne_free(p->status.reason_phrase); if (p->props) ne_free(p->props); } if (set->pstats) ne_free(set->pstats); ne_free(set->href); ne_free(set); } static void end_response(void *userdata, void *resource, const ne_status *status, const char *description) { ne_propfind_handler *handler = userdata; ne_prop_result_set *set = resource; /* Pass back the results for this resource. */ if (handler->callback && set->numpstats > 0) handler->callback(handler->userdata, set->href, set); /* Clean up the propset tree we've just built. */ free_propset(set); handler->current = NULL; } ne_propfind_handler * ne_propfind_create(ne_session *sess, const char *uri, int depth) { ne_propfind_handler *ret = ne_calloc(sizeof(ne_propfind_handler)); ret->parser = ne_xml_create(); ret->parser207 = ne_207_create(ret->parser, ret); ret->sess = sess; ret->body = ne_buffer_create(); ret->request = ne_request_create(sess, "PROPFIND", uri); ret->value = ne_buffer_create(); ne_add_depth_header(ret->request, depth); ne_207_set_response_handlers(ret->parser207, start_response, end_response); ne_207_set_propstat_handlers(ret->parser207, start_propstat, end_propstat); /* The start of the request body is fixed: */ ne_buffer_concat(ret->body, "" EOL "", NULL); return ret; } /* Destroy a propfind handler */ void ne_propfind_destroy(ne_propfind_handler *handler) { ne_buffer_destroy(handler->value); if (handler->current) free_propset(handler->current); ne_207_destroy(handler->parser207); ne_xml_destroy(handler->parser); ne_buffer_destroy(handler->body); ne_request_destroy(handler->request); ne_free(handler); } int ne_simple_propfind(ne_session *sess, const char *href, int depth, const ne_propname *props, ne_props_result results, void *userdata) { ne_propfind_handler *hdl; int ret; hdl = ne_propfind_create(sess, href, depth); if (props != NULL) { ret = ne_propfind_named(hdl, props, results, userdata); } else { ret = ne_propfind_allprop(hdl, results, userdata); } ne_propfind_destroy(hdl); return ret; } int ne_propnames(ne_session *sess, const char *href, int depth, ne_props_result results, void *userdata) { ne_propfind_handler *hdl; int ret; hdl = ne_propfind_create(sess, href, depth); ne_buffer_zappend(hdl->body, ""); ret = propfind(hdl, results, userdata); ne_propfind_destroy(hdl); return ret; } void ne_propfind_set_private(ne_propfind_handler *hdl, ne_props_create_complex creator, void *userdata) { hdl->private_creator = creator; hdl->private_userdata = userdata; } tla-1.3.5+dfsg/src/libneon/src/ne_private.h0000644000175000017500000000713310457621776017271 0ustar useruser/* HTTP Request Handling Copyright (C) 1999-2004, Joe Orton This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA */ /* THIS IS NOT A PUBLIC INTERFACE. You CANNOT include this header file * from an application. */ #ifndef NE_PRIVATE_H #define NE_PRIVATE_H #include "ne_request.h" #include "ne_socket.h" #include "ne_ssl.h" struct host_info { char *hostname; unsigned int port; ne_sock_addr *address; /* if non-NULL, result of resolving 'hostname'. */ /* current network address obtained from 'address' being used. */ const ne_inet_addr *current; char *hostport; /* URI hostport segment */ }; /* Store every registered callback in a generic container, and cast * the function pointer when calling it. */ struct hook { void (*fn)(void); void *userdata; const char *id; /* non-NULL for accessors. */ struct hook *next; }; #define HAVE_HOOK(st,func) (st->hook->hooks->func != NULL) #define HOOK_FUNC(st, func) (*st->hook->hooks->func) /* Session support. */ struct ne_session_s { /* Connection information */ ne_socket *socket; /* non-zero if connection has been established. */ int connected; /* non-zero if connection has persisted beyond one request. */ int persisted; int is_http11; /* >0 if connected server is known to be * HTTP/1.1 compliant. */ char *scheme; struct host_info server, proxy; /* Settings */ unsigned int use_proxy:1; /* do we have a proxy server? */ unsigned int no_persist:1; /* set to disable persistent connections */ unsigned int use_ssl:1; /* whether a secure connection is required */ unsigned int in_connect:1; /* doing a proxy CONNECT */ int expect100_works; /* known state of 100-continue support */ ne_progress progress_cb; void *progress_ud; ne_notify_status notify_cb; void *notify_ud; int rdtimeout; /* read timeout. */ struct hook *create_req_hooks, *pre_send_hooks, *post_send_hooks; struct hook *destroy_req_hooks, *destroy_sess_hooks, *private; char *user_agent; /* full User-Agent: header field */ #ifdef NEON_SSL ne_ssl_client_cert *client_cert; ne_ssl_certificate *server_cert; ne_ssl_context *ssl_context; #endif /* Server cert verification callback: */ ne_ssl_verify_fn ssl_verify_fn; void *ssl_verify_ud; /* Client cert provider callback: */ ne_ssl_provide_fn ssl_provide_fn; void *ssl_provide_ud; /* Error string */ char error[BUFSIZ]; }; typedef int (*ne_push_fn)(void *userdata, const char *buf, size_t count); /* Pulls the request body for the given request, passing blocks to the * given callback. */ int ne_pull_request_body(ne_request *req, ne_push_fn fn, void *ud); /* Do the SSL negotiation. */ int ne_negotiate_ssl(ne_request *req); /* 0.24.x hack to fix ne_compress layer problems */ void ne_kill_pre_send(ne_session *sess, ne_pre_send_fn fn, void *userdata); #endif /* HTTP_PRIVATE_H */ tla-1.3.5+dfsg/src/libneon/src/ne_uri.h0000644000175000017500000000541610457621776016420 0ustar useruser/* HTTP URI handling Copyright (C) 1999-2002, Joe Orton This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA */ #ifndef NE_URI_H #define NE_URI_H #include "ne_defs.h" BEGIN_NEON_DECLS /* Un-escapes a path. Returns malloc-allocated path on success, or * NULL on an invalid % sequence. */ char *ne_path_unescape(const char *uri); /* Escapes the a path segment: returns malloc-allocated string on * success, or NULL on malloc failure. */ char *ne_path_escape(const char *abs_path); /* Returns malloc-allocated parent of path, or NULL if path has no * parent (such as "/"). */ char *ne_path_parent(const char *path); /* Returns strcmp-like value giving comparison between p1 and p2, * ignoring trailing-slashes. */ int ne_path_compare(const char *p1, const char *p2); /* Returns non-zero if child is a child of parent */ int ne_path_childof(const char *parent, const char *child); /* Returns non-zero if path has a trailing slash character */ int ne_path_has_trailing_slash(const char *path); /* Return the default port for the given scheme, or 0 if none is * known. */ unsigned int ne_uri_defaultport(const char *scheme); typedef struct { char *scheme; char *host; unsigned int port; char *path; char *authinfo; } ne_uri; /* Parse absoluteURI 'uri' and place parsed segments in *parsed. * Returns zero on success, non-zero on parse error. Fields of *parsed * are malloc'ed, structure should be free'd with uri_free on * successful return. Any unspecified URI fields are set to NULL or 0 * appropriately in *parsed. */ int ne_uri_parse(const char *uri, ne_uri *parsed); /* Turns a URI structure back into a string. String is * malloc-allocated, and must be free'd by the caller. */ char *ne_uri_unparse(const ne_uri *uri); /* Compares URIs u1 and u2, returns non-zero if they are found to be * non-equal. The sign of the return value is <0 if 'u1' is less than * 'u2', or >0 if 'u2' is greater than 'u1'. */ int ne_uri_cmp(const ne_uri *u1, const ne_uri *u2); /* Free URI object. */ void ne_uri_free(ne_uri *parsed); END_NEON_DECLS #endif /* NE_URI_H */ tla-1.3.5+dfsg/src/libneon/src/ne_socket.h0000644000175000017500000001504310457621776017106 0ustar useruser/* socket handling interface Copyright (C) 1999-2003, Joe Orton This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA */ #ifndef NE_SOCKET_H #define NE_SOCKET_H #include #include "ne_defs.h" #include "ne_ssl.h" /* for ne_ssl_context */ BEGIN_NEON_DECLS #define NE_SOCK_ERROR (-1) /* Read/Write timed out */ #define NE_SOCK_TIMEOUT (-2) /* Socket was closed */ #define NE_SOCK_CLOSED (-3) /* Connection was reset (e.g. server crashed) */ #define NE_SOCK_RESET (-4) /* Secure connection was subject to possible truncation attack. */ #define NE_SOCK_TRUNC (-5) /* ne_socket represents a TCP socket. */ typedef struct ne_socket_s ne_socket; /* ne_sock_addr represents an address object. */ typedef struct ne_sock_addr_s ne_sock_addr; #ifndef NE_INET_ADDR_DEFINED typedef struct ne_inet_addr_s ne_inet_addr; #endif /* While neon itself doesn't require per-process global * initialization, some platforms do, and so does the OpenSSL * library. */ int ne_sock_init(void); /* Shutdown any underlying libraries. */ void ne_sock_exit(void); /* Resolve the given hostname. 'flags' are currently ignored. Hex * string IPv6 addresses (e.g. `::1') may be enclosed in brackets * (e.g. `[::1]'). */ ne_sock_addr *ne_addr_resolve(const char *hostname, int flags); /* Returns zero if name resolution was successful, non-zero on * error. */ int ne_addr_result(const ne_sock_addr *addr); /* Returns the first network address associated with the 'addr' * object. Undefined behaviour if ne_addr_result returns non-zero for * 'addr'; otherwise, never returns NULL. */ const ne_inet_addr *ne_addr_first(ne_sock_addr *addr); /* Returns the next network address associated with the 'addr' object, * or NULL if there are no more. */ const ne_inet_addr *ne_addr_next(ne_sock_addr *addr); /* NB: the pointers returned by ne_addr_first and ne_addr_next are * valid until ne_addr_destroy is called for the corresponding * ne_sock_addr object. They must not be passed to ne_iaddr_free. */ /* If name resolution fails, copies the error string into 'buffer', * which is of size 'bufsiz'. 'buffer' is returned. */ char *ne_addr_error(const ne_sock_addr *addr, char *buffer, size_t bufsiz); /* Destroys an address object created by ne_addr_resolve. */ void ne_addr_destroy(ne_sock_addr *addr); /* Network address type; IPv4 or IPv6 */ typedef enum { ne_iaddr_ipv4 = 0, ne_iaddr_ipv6 } ne_iaddr_type; /* Create a network address from raw byte representation (in network * byte order) of given type. 'raw' must be four bytes for an IPv4 * address, 16 bytes for an IPv6 address. May return NULL if address * type is not supported. */ ne_inet_addr *ne_iaddr_make(ne_iaddr_type type, const unsigned char *raw); /* Compare two network addresses i1 and i2; return non-zero if they * are not equal. */ int ne_iaddr_cmp(const ne_inet_addr *i1, const ne_inet_addr *i2); /* Prints the string representation of network address 'ia' into the * 'buffer', which is of size 'bufsiz'. Returns 'buffer'. */ char *ne_iaddr_print(const ne_inet_addr *ia, char *buffer, size_t bufsiz); /* Free a network address created using ne_iaddr_make. */ void ne_iaddr_free(ne_inet_addr *addr); /* Create a TCP socket; returns NULL on error. */ ne_socket *ne_sock_create(void); /* Connect the socket to server at address 'addr' on port 'port'. * Returns non-zero if a connection could not be established. */ int ne_sock_connect(ne_socket *sock, const ne_inet_addr *addr, unsigned int port); /* ne_sock_read reads up to 'count' bytes into 'buffer'. * Returns: * NE_SOCK_* on error, * >0 length of data read into buffer. */ ssize_t ne_sock_read(ne_socket *sock, char *buffer, size_t count); /* ne_sock_peek reads up to 'count' bytes into 'buffer', but the data * will still be returned on a subsequent call to ne_sock_read or * ne_sock_peek. * Returns: * NE_SOCK_* on error, * >0 length of data read into buffer. */ ssize_t ne_sock_peek(ne_socket *sock, char *buffer, size_t count); /* Block for up to 'n' seconds until data becomes available for reading * on the socket. Returns: * NE_SOCK_* on error, * NE_SOCK_TIMEOUT if no data arrives in 'n' seconds. * 0 if data arrived on the socket. */ int ne_sock_block(ne_socket *sock, int n); /* Writes 'count' bytes of 'data' to the socket. * Returns 0 on success, NE_SOCK_* on error. */ int ne_sock_fullwrite(ne_socket *sock, const char *data, size_t count); /* Reads an LF-terminated line into 'buffer', and NUL-terminate it. * At most 'len' bytes are read (including the NUL terminator). * Returns: * NE_SOCK_* on error, * >0 number of bytes read (including NUL terminator) */ ssize_t ne_sock_readline(ne_socket *sock, char *buffer, size_t len); /* Read exactly 'len' bytes into buffer; returns 0 on success, SOCK_* * on error. */ ssize_t ne_sock_fullread(ne_socket *sock, char *buffer, size_t len); /* Accept a connection on listening socket 'fd'. */ int ne_sock_accept(ne_socket *sock, int fd); /* Returns the file descriptor used for socket 'sock'. */ int ne_sock_fd(const ne_socket *sock); /* Close the socket, and destroy the socket object. Returns non-zero * on error. */ int ne_sock_close(ne_socket *sock); /* Return current error string for socket. */ const char *ne_sock_error(const ne_socket *sock); /* Set read timeout for socket. */ void ne_sock_read_timeout(ne_socket *sock, int timeout); /* Returns the standard TCP port for the given service, or zero if * none is known. */ int ne_service_lookup(const char *name); /* Enable SSL with an already-negotiated SSL socket. */ void ne_sock_switch_ssl(ne_socket *sock, void *ssl); /* Perform an SSL negotiation on 'sock', using given context. */ int ne_sock_connect_ssl(ne_socket *sock, ne_ssl_context *ctx); /* Return SSL socket object in use for 'sock'. */ typedef struct ne_ssl_socket_s ne_ssl_socket; ne_ssl_socket *ne_sock_sslsock(ne_socket *sock); END_NEON_DECLS #endif /* NE_SOCKET_H */ tla-1.3.5+dfsg/src/libneon/src/COPYING.LIB0000644000175000017500000006130310457621776016423 0ustar useruser GNU LIBRARY GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1991 Free Software Foundation, Inc. 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. [This is the first released version of the library GPL. It is numbered 2 because it goes with version 2 of the ordinary GPL.] Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public Licenses are intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This license, the Library General Public License, applies to some specially designated Free Software Foundation software, and to any other libraries whose authors decide to use it. You can use it for your libraries, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the library, or if you modify it. For example, if you distribute copies of the library, whether gratis or for a fee, you must give the recipients all the rights that we gave you. You must make sure that they, too, receive or can get the source code. If you link a program with the library, you must provide complete object files to the recipients so that they can relink them with the library, after making changes to the library and recompiling it. And you must show them these terms so they know their rights. Our method of protecting your rights has two steps: (1) copyright the library, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the library. Also, for each distributor's protection, we want to make certain that everyone understands that there is no warranty for this free library. If the library is modified by someone else and passed on, we want its recipients to know that what they have is not the original version, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that companies distributing free software will individually obtain patent licenses, thus in effect transforming the program into proprietary software. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. Most GNU software, including some libraries, is covered by the ordinary GNU General Public License, which was designed for utility programs. This license, the GNU Library General Public License, applies to certain designated libraries. This license is quite different from the ordinary one; be sure to read it in full, and don't assume that anything in it is the same as in the ordinary license. The reason we have a separate public license for some libraries is that they blur the distinction we usually make between modifying or adding to a program and simply using it. Linking a program with a library, without changing the library, is in some sense simply using the library, and is analogous to running a utility program or application program. However, in a textual and legal sense, the linked executable is a combined work, a derivative of the original library, and the ordinary General Public License treats it as such. Because of this blurred distinction, using the ordinary General Public License for libraries did not effectively promote software sharing, because most developers did not use the libraries. We concluded that weaker conditions might promote sharing better. However, unrestricted linking of non-free programs would deprive the users of those programs of all benefit from the free status of the libraries themselves. This Library General Public License is intended to permit developers of non-free programs to use free libraries, while preserving your freedom as a user of such programs to change the free libraries that are incorporated in them. (We have not seen how to achieve this as regards changes in header files, but we have achieved it as regards changes in the actual functions of the Library.) The hope is that this will lead to faster development of free libraries. The precise terms and conditions for copying, distribution and modification follow. Pay close attention to the difference between a "work based on the library" and a "work that uses the library". The former contains code derived from the library, while the latter only works together with the library. Note that it is possible for a library to be covered by the ordinary General Public License rather than by this special one. GNU LIBRARY GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License Agreement applies to any software library which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Library General Public License (also called "this License"). Each licensee is addressed as "you". A "library" means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some of those functions and data) to form executables. The "Library", below, refers to any such software library or work which has been distributed under these terms. A "work based on the Library" means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a portion of it, either verbatim or with modifications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term "modification".) "Source code" for a work means the preferred form of the work for making modifications to it. For a library, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the library. Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running a program using the Library is not restricted, and output from such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does. 1. You may copy and distribute verbatim copies of the Library's complete source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and distribute a copy of this License along with the Library. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Library or any portion of it, thus forming a work based on the Library, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) The modified work must itself be a software library. b) You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change. c) You must cause the whole of the work to be licensed at no charge to all third parties under the terms of this License. d) If a facility in the modified Library refers to a function or a table of data to be supplied by an application program that uses the facility, other than as an argument passed when the facility is invoked, then you must make a good faith effort to ensure that, in the event an application does not supply such function or table, the facility still operates, and performs whatever part of its purpose remains meaningful. (For example, a function in a library to compute square roots has a purpose that is entirely well-defined independent of the application. Therefore, Subsection 2d requires that any application-supplied function or table used by this function must be optional: if the application does not supply it, the square root function must still compute square roots.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Library, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Library, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Library. In addition, mere aggregation of another work not based on the Library with the Library (or with a work based on the Library) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the Library. To do this, you must alter all the notices that refer to this License, so that they refer to the ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices. Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy. This option is useful when you wish to copy part of the code of the Library into a program that is not a library. 4. You may copy and distribute the Library (or a portion or derivative of it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange. If distribution of object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place satisfies the requirement to distribute the source code, even though third parties are not compelled to copy the source along with the object code. 5. A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License. However, linking a "work that uses the Library" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a "work that uses the library". The executable is therefore covered by this License. Section 6 states terms for distribution of such executables. When a "work that uses the Library" uses material from a header file that is part of the Library, the object code for the work may be a derivative work of the Library even though the source code is not. Whether this is true is especially significant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely defined by law. If such an object file uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.) Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself. 6. As an exception to the Sections above, you may also compile or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer's own use and reverse engineering for debugging such modifications. You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things: a) Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable "work that uses the Library", as object code and/or source code, so that the user can modify the Library and then relink to produce a modified executable containing the modified Library. (It is understood that the user who changes the contents of definitions files in the Library will not necessarily be able to recompile the application to use the modified definitions.) b) Accompany the work with a written offer, valid for at least three years, to give the same user the materials specified in Subsection 6a, above, for a charge no more than the cost of performing this distribution. c) If distribution of the work is made by offering access to copy from a designated place, offer equivalent access to copy the above specified materials from the same place. d) Verify that the user has already received a copy of these materials or that you have already sent this user a copy. For an executable, the required form of the "work that uses the Library" must include any data and utility programs needed for reproducing the executable from it. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. It may happen that this requirement contradicts the license restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute. 7. You may place library facilities that are a work based on the Library side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined library, provided that the separate distribution of the work based on the Library and of the other library facilities is otherwise permitted, and provided that you do these two things: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities. This must be distributed under the terms of the Sections above. b) Give prominent notice with the combined library of the fact that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 8. You may not copy, modify, sublicense, link with, or distribute the Library except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 9. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Library (or any work based on the Library), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Library or works based on it. 10. Each time you redistribute the Library (or any work based on the Library), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Library subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 11. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Library at all. For example, if a patent license would not permit royalty-free redistribution of the Library by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Library. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply, and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 12. If the distribution and/or use of the Library is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Library under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 13. The Free Software Foundation may publish revised and/or new versions of the Library General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Library specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation. 14. If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS Appendix: How to Apply These Terms to Your New Libraries If you develop a new library, and you want it to be of the greatest possible use to the public, we recommend making it free software that everyone can redistribute and change. You can do so by permitting redistribution under these terms (or, alternatively, under the terms of the ordinary General Public License). To apply these terms, attach the following notices to the library. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA Also add information on how to contact you by electronic and paper mail. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the library, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the library `Frob' (a library for tweaking knobs) written by James Random Hacker. , 1 April 1990 Ty Coon, President of Vice That's all there is to it! tla-1.3.5+dfsg/src/libneon/src/ne_md5.h0000644000175000017500000001154110457621776016302 0ustar useruser/* Declaration of functions and data types used for MD5 sum computing library functions. Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. The GNU C Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with the GNU C Library; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef NEON_MD5_H #define NEON_MD5_H 1 #include #if defined HAVE_LIMITS_H || _LIBC # include #endif /* The following contortions are an attempt to use the C preprocessor to determine an unsigned integral type that is 32 bits wide. An alternative approach is to use autoconf's AC_CHECK_SIZEOF macro, but doing that would require that the configure script compile and *run* the resulting executable. Locally running cross-compiled executables is usually not possible. */ #ifdef _LIBC # include typedef u_int32_t md5_uint32; #else # if defined __STDC__ && __STDC__ # define UINT_MAX_32_BITS 4294967295U # else # define UINT_MAX_32_BITS 0xFFFFFFFF # endif /* If UINT_MAX isn't defined, assume it's a 32-bit type. This should be valid for all systems GNU cares about because that doesn't include 16-bit systems, and only modern systems (that certainly have ) have 64+-bit integral types. */ # ifndef UINT_MAX # define UINT_MAX UINT_MAX_32_BITS # endif # if UINT_MAX == UINT_MAX_32_BITS typedef unsigned int md5_uint32; # else # if USHRT_MAX == UINT_MAX_32_BITS typedef unsigned short md5_uint32; # else # if ULONG_MAX == UINT_MAX_32_BITS typedef unsigned long md5_uint32; # else /* The following line is intended to evoke an error. Using #error is not portable enough. */ "Cannot determine unsigned 32-bit data type." # endif # endif # endif #endif #undef __P #if defined (__STDC__) && __STDC__ # define __P(x) x #else # define __P(x) () #endif /* Structure to save state of computation between the single steps. */ struct ne_md5_ctx { md5_uint32 A; md5_uint32 B; md5_uint32 C; md5_uint32 D; md5_uint32 total[2]; md5_uint32 buflen; char buffer[128]; }; /* * The following three functions are build up the low level used in * the functions `md5_stream' and `md5_buffer'. */ /* Initialize structure containing state of computation. (RFC 1321, 3.3: Step 3) */ extern void ne_md5_init_ctx __P ((struct ne_md5_ctx *ctx)); /* Starting with the result of former calls of this function (or the initialization function update the context for the next LEN bytes starting at BUFFER. It is necessary that LEN is a multiple of 64!!! */ extern void ne_md5_process_block __P ((const void *buffer, size_t len, struct ne_md5_ctx *ctx)); /* Starting with the result of former calls of this function (or the initialization function update the context for the next LEN bytes starting at BUFFER. It is NOT required that LEN is a multiple of 64. */ extern void ne_md5_process_bytes __P ((const void *buffer, size_t len, struct ne_md5_ctx *ctx)); /* Process the remaining bytes in the buffer and put result from CTX in first 16 bytes following RESBUF. The result is always in little endian byte order, so that a byte-wise output yields to the wanted ASCII representation of the message digest. IMPORTANT: On some systems it is required that RESBUF is correctly aligned for a 32 bits value. */ extern void *ne_md5_finish_ctx __P ((struct ne_md5_ctx *ctx, void *resbuf)); /* Put result from CTX in first 16 bytes following RESBUF. The result is always in little endian byte order, so that a byte-wise output yields to the wanted ASCII representation of the message digest. IMPORTANT: On some systems it is required that RESBUF is correctly aligned for a 32 bits value. */ extern void *ne_md5_read_ctx __P ((const struct ne_md5_ctx *ctx, void *resbuf)); /* Compute MD5 message digest for bytes read from STREAM. The resulting message digest number will be written into the 16 bytes beginning at RESBLOCK. */ extern int ne_md5_stream __P ((FILE *stream, void *resblock)); /* MD5 ascii->binary conversion */ void ne_md5_to_ascii(const unsigned char md5_buf[16], char *buffer); void ne_ascii_to_md5(const char *buffer, unsigned char md5_buf[16]); #endif /* NEON_MD5_H */ tla-1.3.5+dfsg/src/libneon/src/ne_request.c0000644000175000017500000011671710457621776017313 0ustar useruser/* HTTP request/response handling Copyright (C) 1999-2004, Joe Orton This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA */ /* This is the HTTP client request/response implementation. * The goal of this code is to be modular and simple. */ #include "config.h" #include #include #ifdef __EMX__ #include #endif #ifdef HAVE_LIMITS_H #include /* for UINT_MAX etc */ #endif #include #include #include #ifdef HAVE_STRING_H #include #endif #ifdef HAVE_STRINGS_H #include #endif #ifdef HAVE_STDLIB_H #include #endif #ifdef HAVE_UNISTD_H #include #endif #include "ne_i18n.h" #include "ne_alloc.h" #include "ne_request.h" #include "ne_string.h" /* for ne_buffer */ #include "ne_utils.h" #include "ne_socket.h" #include "ne_uri.h" #include "ne_private.h" #define HTTP_EXPECT_TIMEOUT 15 /* 100-continue only used if size > HTTP_EXPECT_MINSIZ */ #define HTTP_EXPECT_MINSIZE 1024 /* with thanks to Jim Blandy; this macro simplified loads of code. */ #define HTTP_ERR(x) do { int _ret = (x); if (_ret != NE_OK) return _ret; } while (0) #define SOCK_ERR(req, op, msg) do { ssize_t sret = (op); \ if (sret < 0) return aborted(req, msg, sret); } while (0) /* This is called with each of the headers in the response */ struct header_handler { char *name; ne_header_handler handler; void *userdata; struct header_handler *next; }; /* TODO: could unify these all into a generic callback list */ struct body_reader { ne_block_reader handler; ne_accept_response accept_response; unsigned int use:1; void *userdata; struct body_reader *next; }; struct ne_request_s { char *method, *uri; /* method and Request-URI */ ne_buffer *headers; /* request headers */ /* Request body. */ ne_provide_body body_cb; void *body_ud; /* Comes from either an fd or a buffer. */ union { int fd; struct { const char *buffer, *pnt; size_t left; } buf; } body; size_t body_size, body_progress; /* temporary store for response lines. */ char respbuf[BUFSIZ]; /**** Response ***/ /* The transfer encoding types */ struct ne_response { int length; /* Response entity-body content-length */ size_t left; /* Bytes left to read */ size_t chunk_left; /* Bytes of chunk left to read */ size_t total; /* total bytes read so far. */ /* how the message length is detemined: */ enum { R_TILLEOF = 0, /* read till eof */ R_NO_BODY, /* implicitly no body (HEAD, 204, 205, 304) */ R_CHUNKED, /* using chunked transfer-encoding */ R_CLENGTH /* using given content-length */ } mode; } resp; /* List of callbacks which are passed response headers */ struct header_handler *header_catchers; struct hook *private; /* We store response header handlers in a hash table. The hash is * derived from the header name in lower case. */ /* FIXME: this comment is WAY out of date, and no longer in any * way true. */ /* 53 is magic, of course. For a standard ne_get() (with * redirects), 9 header handlers are defined. Two of these are * for Content-Length (which is a bug, and should be fixed * really). Ignoring that hash clash, the 8 *different* handlers * all hash uniquely into the hash table of size 53. */ #define HH_HASHSIZE 53 struct header_handler *header_handlers[HH_HASHSIZE]; /* List of callbacks which are passed response body blocks */ struct body_reader *body_readers; /*** Miscellaneous ***/ unsigned int method_is_head:1; unsigned int use_expect100:1; unsigned int can_persist:1; ne_session *session; ne_status status; }; static int open_connection(ne_request *req); /* The iterative step used to produce the hash value. This is DJB's * magic "*33" hash function. Ralf Engelschall has done some amazing * statistical analysis to show that *33 really is a good hash * function: check the new-httpd list archives, or his 'str' library * source code, for the details. * * TODO: due to limited range of characters used in header names, * could maybe get a better hash function to use? */ #define HH_ITERATE(hash, ch) (((hash)*33 + (ch)) % HH_HASHSIZE); /* Returns hash value for header 'name', converting it to lower-case * in-place. */ static inline unsigned int hash_and_lower(char *name) { char *pnt; unsigned int hash = 0; for (pnt = name; *pnt != '\0'; pnt++) { *pnt = tolower(*pnt); hash = HH_ITERATE(hash,*pnt); } return hash; } /* Abort a request due to an non-recoverable HTTP protocol error, * whilst doing 'doing'. 'code', if non-zero, is the socket error * code, NE_SOCK_*, or if zero, is ignored. */ static int aborted(ne_request *req, const char *doing, ssize_t code) { ne_session *sess = req->session; int ret = NE_ERROR; NE_DEBUG(NE_DBG_HTTP, "Aborted request (%" NE_FMT_SSIZE_T "): %s\n", code, doing); switch(code) { case NE_SOCK_CLOSED: if (sess->use_proxy) { ne_set_error(sess, _("%s: connection was closed by proxy server."), doing); } else { ne_set_error(sess, _("%s: connection was closed by server."), doing); } break; case NE_SOCK_TIMEOUT: ne_set_error(sess, _("%s: connection timed out."), doing); ret = NE_TIMEOUT; break; case NE_SOCK_ERROR: case NE_SOCK_RESET: case NE_SOCK_TRUNC: ne_set_error(sess, "%s: %s", doing, ne_sock_error(sess->socket)); break; case 0: ne_set_error(sess, "%s", doing); break; } ne_close_connection(sess); return ret; } static void notify_status(ne_session *sess, ne_conn_status status, const char *info) { if (sess->notify_cb) { sess->notify_cb(sess->notify_ud, status, info); } } void ne_duplicate_header(void *userdata, const char *value) { char **location = userdata; *location = ne_strdup(value); } void ne_handle_numeric_header(void *userdata, const char *value) { int *location = userdata; *location = atoi(value); } static void *get_private(const struct hook *hk, const char *id) { for (; hk != NULL; hk = hk->next) if (strcmp(hk->id, id) == 0) return hk->userdata; return NULL; } void *ne_get_request_private(ne_request *req, const char *id) { return get_private(req->private, id); } void *ne_get_session_private(ne_session *sess, const char *id) { return get_private(sess->private, id); } typedef void (*void_fn)(void); #define ADD_HOOK(hooks, fn, ud) add_hook(&(hooks), NULL, (void_fn)(fn), (ud)) static void add_hook(struct hook **hooks, const char *id, void_fn fn, void *ud) { struct hook *hk = ne_malloc(sizeof (struct hook)), *pos; if (*hooks != NULL) { for (pos = *hooks; pos->next != NULL; pos = pos->next) /* nullop */; pos->next = hk; } else { *hooks = hk; } hk->id = id; hk->fn = fn; hk->userdata = ud; hk->next = NULL; } void ne_hook_create_request(ne_session *sess, ne_create_request_fn fn, void *userdata) { ADD_HOOK(sess->create_req_hooks, fn, userdata); } void ne_hook_pre_send(ne_session *sess, ne_pre_send_fn fn, void *userdata) { ADD_HOOK(sess->pre_send_hooks, fn, userdata); } void ne_hook_post_send(ne_session *sess, ne_post_send_fn fn, void *userdata) { ADD_HOOK(sess->post_send_hooks, fn, userdata); } void ne_hook_destroy_request(ne_session *sess, ne_destroy_req_fn fn, void *userdata) { ADD_HOOK(sess->destroy_req_hooks, fn, userdata); } void ne_hook_destroy_session(ne_session *sess, ne_destroy_sess_fn fn, void *userdata) { ADD_HOOK(sess->destroy_sess_hooks, fn, userdata); } /* 0.24.x hack to fix ne_compress layer problems */ void ne_kill_pre_send(ne_session *sess, ne_pre_send_fn fn, void *userdata) { struct hook **last, *hk; last = &sess->pre_send_hooks; hk = *last; while (hk) { if (hk->fn == (void_fn)fn && hk->userdata == userdata) { *last = hk->next; ne_free(hk); return; } last = &hk->next; hk = *last; } } void ne_set_session_private(ne_session *sess, const char *id, void *userdata) { add_hook(&sess->private, id, NULL, userdata); } void ne_set_request_private(ne_request *req, const char *id, void *userdata) { add_hook(&req->private, id, NULL, userdata); } static ssize_t body_string_send(void *userdata, char *buffer, size_t count) { ne_request *req = userdata; if (count == 0) { req->body.buf.left = req->body_size; req->body.buf.pnt = req->body.buf.buffer; } else { /* if body_left == 0 we fall through and return 0. */ if (req->body.buf.left < count) count = req->body.buf.left; memcpy(buffer, req->body.buf.pnt, count); req->body.buf.pnt += count; req->body.buf.left -= count; } return count; } static ssize_t body_fd_send(void *userdata, char *buffer, size_t count) { ne_request *req = userdata; if (count) { return read(req->body.fd, buffer, count); } else { /* rewind since we may have to send it again */ return lseek(req->body.fd, SEEK_SET, 0); } } /* Pulls the request body from the source and pushes it to the given * callback. Returns 0 on success, or NE_* code */ int ne_pull_request_body(ne_request *req, ne_push_fn fn, void *ud) { int ret = 0; char buffer[BUFSIZ]; ssize_t bytes; /* tell the source to start again from the beginning. */ (void) req->body_cb(req->body_ud, NULL, 0); /* TODO: should this attempt to pull exactly the number of bytes * they specified were in the body? Currently it just pulls until * they return zero. That makes it possible to extend this to do * chunked request bodies (i.e. indefinitely long, no C-L), so * this is probably a better long-term interface. */ while ((bytes = req->body_cb(req->body_ud, buffer, sizeof buffer)) > 0) { ret = fn(ud, buffer, bytes); if (ret < 0) break; NE_DEBUG(NE_DBG_HTTPBODY, "Body block (%" NE_FMT_SSIZE_T " bytes):\n[%.*s]\n", bytes, (int)bytes, buffer); } if (bytes < 0) { ne_set_error(req->session, _("Error reading request body.")); ret = NE_ERROR; } return ret; } static int send_with_progress(void *userdata, const char *data, size_t n) { ne_request *req = userdata; int ret; ret = ne_sock_fullwrite(req->session->socket, data, n); if (ret == 0) { req->body_progress += n; req->session->progress_cb(req->session->progress_ud, req->body_progress, req->body_size); } return ret; } /* Sends the request body down the socket. * Returns 0 on success, or NE_* code */ static int send_request_body(ne_request *req) { int ret; NE_DEBUG(NE_DBG_HTTP, "Sending request body...\n"); if (req->session->progress_cb) { /* with progress callbacks. */ req->body_progress = 0; ret = ne_pull_request_body(req, send_with_progress, req); } else { /* without progress callbacks. */ ret = ne_pull_request_body(req, (ne_push_fn)ne_sock_fullwrite, req->session->socket); } NE_DEBUG(NE_DBG_HTTP, "Request body sent: %s.\n", ret?"failed":"okay"); return ret; } /* Lob the User-Agent, connection and host headers in to the request * headers */ static void add_fixed_headers(ne_request *req) { if (req->session->user_agent) { ne_buffer_zappend(req->headers, req->session->user_agent); } /* Send Connection: Keep-Alive to pre-1.1 origin servers to try * harder to get a persistent connection, except if using a proxy * as per 2068 sec 19.7.1. Always add TE: trailers since those * are understood. */ if (!req->session->is_http11 && !req->session->use_proxy) { ne_buffer_zappend(req->headers, "Keep-Alive: " EOL "Connection: TE, Keep-Alive" EOL "TE: trailers" EOL); } else { ne_buffer_zappend(req->headers, "Connection: TE" EOL "TE: trailers" EOL); } } int ne_accept_always(void *userdata, ne_request *req, const ne_status *st) { return 1; } int ne_accept_2xx(void *userdata, ne_request *req, const ne_status *st) { return (st->klass == 2); } /* Handler for the "Transfer-Encoding" response header: treat *any* * such header as implying a chunked response, per the "Protocol * Compliance" statement in the manual. */ static void te_hdr_handler(void *userdata, const char *value) { struct ne_response *resp = userdata; resp->mode = R_CHUNKED; } /* Handler for the "Connection" response header */ static void connection_hdr_handler(void *userdata, const char *value) { ne_request *req = userdata; if (strcasecmp(value, "close") == 0) { req->can_persist = 0; } else if (strcasecmp(value, "Keep-Alive") == 0) { req->can_persist = 1; } } static void clength_hdr_handler(void *userdata, const char *value) { struct ne_response *resp = userdata; size_t len = strtoul(value, NULL, 10); if (len != ULONG_MAX && resp->mode == R_TILLEOF) { resp->mode = R_CLENGTH; resp->length = len; } } ne_request *ne_request_create(ne_session *sess, const char *method, const char *path) { ne_request *req = ne_calloc(sizeof *req); NE_DEBUG(NE_DBG_HTTP, "Creating request...\n"); req->session = sess; req->headers = ne_buffer_create(); /* Add in the fixed headers */ add_fixed_headers(req); /* Set the standard stuff */ req->method = ne_strdup(method); req->method_is_head = (strcmp(method, "HEAD") == 0); /* Add in handlers for all the standard HTTP headers. */ ne_add_response_header_handler(req, "Content-Length", clength_hdr_handler, &req->resp); ne_add_response_header_handler(req, "Transfer-Encoding", te_hdr_handler, &req->resp); ne_add_response_header_handler(req, "Connection", connection_hdr_handler, req); /* Only use an absoluteURI here when absolutely necessary: some * servers can't parse them. */ if (req->session->use_proxy && !req->session->use_ssl && path[0] == '/') req->uri = ne_concat(req->session->scheme, "://", req->session->server.hostport, path, NULL); else req->uri = ne_strdup(path); { struct hook *hk; NE_DEBUG(NE_DBG_HTTP, "Running request create hooks.\n"); for (hk = sess->create_req_hooks; hk != NULL; hk = hk->next) { ne_create_request_fn fn = (ne_create_request_fn)hk->fn; fn(req, hk->userdata, method, req->uri); } } NE_DEBUG(NE_DBG_HTTP, "Request created.\n"); return req; } static void set_body_size(ne_request *req, size_t size) { req->body_size = size; ne_print_request_header(req, "Content-Length", "%" NE_FMT_SIZE_T, size); } void ne_set_request_body_buffer(ne_request *req, const char *buffer, size_t size) { req->body.buf.buffer = buffer; req->body_cb = body_string_send; req->body_ud = req; set_body_size(req, size); } void ne_set_request_body_provider(ne_request *req, size_t bodysize, ne_provide_body provider, void *ud) { req->body_cb = provider; req->body_ud = ud; set_body_size(req, bodysize); } int ne_set_request_body_fd(ne_request *req, int fd) { struct stat bodyst; /* Get file length */ if (fstat(fd, &bodyst) < 0) { char err[200]; ne_strerror(errno, err, sizeof err); ne_set_error(req->session, _("Could not determine file length: %s"), err); NE_DEBUG(NE_DBG_HTTP, "Stat failed: %s\n", err); return -1; } req->body.fd = fd; req->body_cb = body_fd_send; req->body_ud = req; set_body_size(req, bodyst.st_size); return 0; } void ne_add_request_header(ne_request *req, const char *name, const char *value) { ne_buffer_concat(req->headers, name, ": ", value, EOL, NULL); } void ne_print_request_header(ne_request *req, const char *name, const char *format, ...) { va_list params; char buf[BUFSIZ]; va_start(params, format); ne_vsnprintf(buf, sizeof buf, format, params); va_end(params); ne_buffer_concat(req->headers, name, ": ", buf, EOL, NULL); } void ne_add_response_header_handler(ne_request *req, const char *name, ne_header_handler hdl, void *userdata) { struct header_handler *new = ne_calloc(sizeof *new); unsigned int hash; new->name = ne_strdup(name); new->handler = hdl; new->userdata = userdata; hash = hash_and_lower(new->name); new->next = req->header_handlers[hash]; req->header_handlers[hash] = new; } void ne_add_response_header_catcher(ne_request *req, ne_header_handler hdl, void *userdata) { struct header_handler *new = ne_calloc(sizeof *new); new->handler = hdl; new->userdata = userdata; new->next = req->header_catchers; req->header_catchers = new; } void ne_add_response_body_reader(ne_request *req, ne_accept_response acpt, ne_block_reader rdr, void *userdata) { struct body_reader *new = ne_malloc(sizeof *new); new->accept_response = acpt; new->handler = rdr; new->userdata = userdata; new->next = req->body_readers; req->body_readers = new; } void ne_request_destroy(ne_request *req) { struct body_reader *rdr, *next_rdr; struct header_handler *hdlr, *next_hdlr; struct hook *hk, *next_hk; int n; ne_free(req->uri); ne_free(req->method); for (rdr = req->body_readers; rdr != NULL; rdr = next_rdr) { next_rdr = rdr->next; ne_free(rdr); } for (hdlr = req->header_catchers; hdlr != NULL; hdlr = next_hdlr) { next_hdlr = hdlr->next; ne_free(hdlr); } for (n = 0; n < HH_HASHSIZE; n++) { for (hdlr = req->header_handlers[n]; hdlr != NULL; hdlr = next_hdlr) { next_hdlr = hdlr->next; ne_free(hdlr->name); ne_free(hdlr); } } ne_buffer_destroy(req->headers); NE_DEBUG(NE_DBG_HTTP, "Running destroy hooks.\n"); for (hk = req->session->destroy_req_hooks; hk; hk = hk->next) { ne_destroy_req_fn fn = (ne_destroy_req_fn)hk->fn; fn(req, hk->userdata); } for (hk = req->private; hk; hk = next_hk) { next_hk = hk->next; ne_free(hk); } if (req->status.reason_phrase) ne_free(req->status.reason_phrase); NE_DEBUG(NE_DBG_HTTP, "Request ends.\n"); ne_free(req); } /* Reads a block of the response into buffer, which is of size buflen. * Returns number of bytes read, 0 on end-of-response, or NE_* on error. * TODO?: only make one actual read() call in here... */ static int read_response_block(ne_request *req, struct ne_response *resp, char *buffer, size_t *buflen) { size_t willread; ssize_t readlen; ne_socket *sock = req->session->socket; switch (resp->mode) { case R_CHUNKED: /* We are doing a chunked transfer-encoding. * It goes: `SIZE CRLF CHUNK CRLF SIZE CRLF CHUNK CRLF ...' * ended by a `CHUNK CRLF 0 CRLF', a 0-sized chunk. * The slight complication is that we have to cope with * partial reads of chunks. * For this reason, resp.chunk_left contains the number of * bytes left to read in the current chunk. */ if (resp->chunk_left == 0) { unsigned long int chunk_len; char *ptr; /* We are at the start of a new chunk. */ NE_DEBUG(NE_DBG_HTTP, "New chunk.\n"); SOCK_ERR(req, ne_sock_readline(sock, buffer, *buflen), _("Could not read chunk size")); NE_DEBUG(NE_DBG_HTTP, "[Chunk Size] < %s", buffer); chunk_len = strtoul(buffer, &ptr, 16); /* limit chunk size to <= UINT_MAX, so it will probably * fit in a size_t. */ if (ptr == buffer || chunk_len == ULONG_MAX || chunk_len > UINT_MAX) { return aborted(req, _("Could not parse chunk size"), 0); } NE_DEBUG(NE_DBG_HTTP, "Got chunk size: %lu\n", chunk_len); if (chunk_len == 0) { /* Zero-size chunk == end of response. */ NE_DEBUG(NE_DBG_HTTP, "Zero-size chunk.\n"); *buflen = 0; return NE_OK; } resp->chunk_left = chunk_len; } willread = resp->chunk_left; break; case R_CLENGTH: willread = resp->left; break; case R_TILLEOF: willread = *buflen; break; case R_NO_BODY: default: willread = 0; break; } if (willread > *buflen) willread = *buflen; else if (willread == 0) { *buflen = 0; return 0; } NE_DEBUG(NE_DBG_HTTP, "Reading %" NE_FMT_SIZE_T " bytes of response body.\n", willread); readlen = ne_sock_read(sock, buffer, willread); /* EOF is only valid when response body is delimited by it. * Strictly, an SSL truncation should not be treated as an EOF in * any case, but SSL servers are just too buggy. */ if (resp->mode == R_TILLEOF && (readlen == NE_SOCK_CLOSED || readlen == NE_SOCK_TRUNC)) { NE_DEBUG(NE_DBG_HTTP, "Got EOF.\n"); req->can_persist = 0; readlen = 0; } else if (readlen < 0) { return aborted(req, _("Could not read response body"), readlen); } else { NE_DEBUG(NE_DBG_HTTP, "Got %" NE_FMT_SSIZE_T " bytes.\n", readlen); } /* safe to cast: readlen guaranteed to be >= 0 above */ *buflen = (size_t)readlen; NE_DEBUG(NE_DBG_HTTPBODY, "Read block (%" NE_FMT_SSIZE_T " bytes):\n[%.*s]\n", readlen, (int)readlen, buffer); if (resp->mode == R_CHUNKED) { resp->chunk_left -= readlen; if (resp->chunk_left == 0) { char crlfbuf[2]; /* If we've read a whole chunk, read a CRLF */ readlen = ne_sock_fullread(sock, crlfbuf, 2); if (readlen < 0) return aborted(req, _("Could not read chunk delimiter"), readlen); else if (crlfbuf[0] != '\r' || crlfbuf[1] != '\n') return aborted(req, _("Chunk delimiter was invalid"), 0); } } else if (resp->mode == R_CLENGTH) { resp->left -= readlen; } return NE_OK; } ssize_t ne_read_response_block(ne_request *req, char *buffer, size_t buflen) { struct body_reader *rdr; size_t readlen = buflen; if (read_response_block(req, &req->resp, buffer, &readlen)) return -1; req->resp.total += readlen; if (req->session->progress_cb) { req->session->progress_cb(req->session->progress_ud, req->resp.total, (req->resp.mode==R_CLENGTH)?req->resp.length:-1); } /* TODO: call the readers when this fails too. */ for (rdr = req->body_readers; rdr!=NULL; rdr=rdr->next) { if (rdr->use) rdr->handler(rdr->userdata, buffer, readlen); } return readlen; } /* Build the request string, returning the buffer. */ static ne_buffer *build_request(ne_request *req) { struct hook *hk; ne_buffer *buf = ne_buffer_create(); /* Add Request-Line and Host header: */ ne_buffer_concat(buf, req->method, " ", req->uri, " HTTP/1.1" EOL, "Host: ", req->session->server.hostport, EOL, NULL); /* Add custom headers: */ ne_buffer_append(buf, req->headers->data, ne_buffer_size(req->headers)); #define E100 "Expect: 100-continue" EOL if (req->use_expect100) ne_buffer_append(buf, E100, strlen(E100)); NE_DEBUG(NE_DBG_HTTP, "Running pre_send hooks\n"); for (hk = req->session->pre_send_hooks; hk!=NULL; hk = hk->next) { ne_pre_send_fn fn = (ne_pre_send_fn)hk->fn; fn(req, hk->userdata, buf); } ne_buffer_append(buf, "\r\n", 2); return buf; } #ifdef NE_DEBUGGING #define DEBUG_DUMP_REQUEST(x) dump_request(x) static void dump_request(const char *request) { if ((NE_DBG_HTTPPLAIN&ne_debug_mask) == NE_DBG_HTTPPLAIN) { /* Display everything mode */ NE_DEBUG(NE_DBG_HTTP, "Sending request headers:\n%s", request); } else { /* Blank out the Authorization paramaters */ char *reqdebug = ne_strdup(request), *pnt = reqdebug; while ((pnt = strstr(pnt, "Authorization: ")) != NULL) { for (pnt += 15; *pnt != '\r' && *pnt != '\0'; pnt++) { *pnt = 'x'; } } NE_DEBUG(NE_DBG_HTTP, "Sending request headers:\n%s", reqdebug); ne_free(reqdebug); } } #else #define DEBUG_DUMP_REQUEST(x) #endif /* DEBUGGING */ /* remove trailing EOL from 'buf', where strlen(buf) == *len. *len is * adjusted in accordance with any changes made to the string to * remain equal to strlen(buf). */ static inline void strip_eol(char *buf, ssize_t *len) { char *pnt = &buf[*len-1]; while (pnt >= buf && (*pnt == '\r' || *pnt == '\n')) { *pnt-- = '\0'; (*len)--; } } /* For accurate persistent connection handling, for any write() or * read() operation for a new request on an already-open connection, * an EOF or RST error MUST be treated as a persistent connection * timeout, and the request retried on a new connection. Once a * read() operation has succeeded, any subsequent error MUST be * treated as fatal. A 'retry' flag is used; retry=1 represents the * first case, retry=0 the latter. */ /* RETRY_RET() crafts a function return value given the 'retry' flag, * the socket error 'code', and the return value 'acode' from the * aborted() function. */ #define RETRY_RET(retry, code, acode) \ ((((code) == NE_SOCK_CLOSED || (code) == NE_SOCK_RESET || \ (code) == NE_SOCK_TRUNC) && retry) ? NE_RETRY : (acode)) /* Read and parse response status-line into 'status'. 'retry' is non-zero * if an NE_RETRY should be returned if an EOF is received. */ static int read_status_line(ne_request *req, ne_status *status, int retry) { char *buffer = req->respbuf; ssize_t ret; ret = ne_sock_readline(req->session->socket, buffer, sizeof req->respbuf); if (ret <= 0) { int aret = aborted(req, _("Could not read status line"), ret); return RETRY_RET(retry, ret, aret); } NE_DEBUG(NE_DBG_HTTP, "[status-line] < %s", buffer); strip_eol(buffer, &ret); if (status->reason_phrase) ne_free(status->reason_phrase); memset(status, 0, sizeof *status); if (ne_parse_statusline(buffer, status)) return aborted(req, _("Could not parse response status line."), 0); return 0; } /* Discard a set of message headers. */ static int discard_headers(ne_request *req) { do { SOCK_ERR(req, ne_sock_readline(req->session->socket, req->respbuf, sizeof req->respbuf), _("Could not read interim response headers")); NE_DEBUG(NE_DBG_HTTP, "[discard] < %s", req->respbuf); } while (strcmp(req->respbuf, EOL) != 0); return NE_OK; } /* Send the request, and read the response Status-Line. Returns: * NE_RETRY connection closed by server; persistent connection * timeout * NE_OK success * NE_* error * On NE_RETRY and NE_* responses, the connection will have been * closed already. */ static int send_request(ne_request *req, const ne_buffer *request) { ne_session *sess = req->session; ssize_t ret = NE_OK; int sentbody = 0; /* zero until body has been sent. */ int retry; /* non-zero whilst the request should be retried */ ne_status *status = &req->status; /* Send the Request-Line and headers */ NE_DEBUG(NE_DBG_HTTP, "Sending request-line and headers:\n"); /* Open the connection if necessary */ HTTP_ERR(open_connection(req)); /* Allow retry if a persistent connection has been used. */ retry = sess->persisted; ret = ne_sock_fullwrite(req->session->socket, request->data, ne_buffer_size(request)); if (ret < 0) { int aret = aborted(req, _("Could not send request"), ret); return RETRY_RET(retry, ret, aret); } if (!req->use_expect100 && req->body_size > 0) { /* Send request body, if not using 100-continue. */ ret = send_request_body(req); if (ret < 0) { int aret = aborted(req, _("Could not send request body"), ret); return RETRY_RET(sess, ret, aret); } } NE_DEBUG(NE_DBG_HTTP, "Request sent; retry is %d.\n", retry); /* Loop eating interim 1xx responses (RFC2616 says these MAY be * sent by the server, even if 100-continue is not used). */ while ((ret = read_status_line(req, status, retry)) == NE_OK && status->klass == 1) { NE_DEBUG(NE_DBG_HTTP, "Interim %d response.\n", status->code); retry = 0; /* successful read() => never retry now. */ /* Discard headers with the interim response. */ if ((ret = discard_headers(req)) != NE_OK) break; if (req->use_expect100 && (status->code == 100) && !sentbody) { /* Send the body after receiving the first 100 Continue */ if ((ret = send_request_body(req)) != NE_OK) break; sentbody = 1; } } return ret; } /* Read a message header from sock into buf, which has size 'buflen'. * * Returns: * NE_RETRY: Success, read a header into buf. * NE_OK: End of headers reached. * NE_ERROR: Error (session error is set). */ static int read_message_header(ne_request *req, char *buf, size_t buflen) { ssize_t n; ne_socket *sock = req->session->socket; n = ne_sock_readline(sock, buf, buflen); if (n <= 0) return aborted(req, _("Error reading response headers"), n); NE_DEBUG(NE_DBG_HTTP, "[hdr] %s", buf); strip_eol(buf, &n); if (n == 0) { NE_DEBUG(NE_DBG_HTTP, "End of headers.\n"); return NE_OK; } buf += n; buflen -= n; while (buflen > 0) { char ch; /* Collect any extra lines into buffer */ SOCK_ERR(req, ne_sock_peek(sock, &ch, 1), _("Error reading response headers")); if (ch != ' ' && ch != '\t') { /* No continuation of this header: stop reading. */ return NE_RETRY; } /* Otherwise, read the next line onto the end of 'buf'. */ n = ne_sock_readline(sock, buf, buflen); if (n <= 0) { return aborted(req, _("Error reading response headers"), n); } NE_DEBUG(NE_DBG_HTTP, "[cont] %s", buf); strip_eol(buf, &n); /* assert(buf[0] == ch), which implies len(buf) > 0. * Otherwise the TCP stack is lying, but we'll be paranoid. * This might be a \t, so replace it with a space to be * friendly to applications (2616 says we MAY do this). */ if (n) buf[0] = ' '; /* ready for the next header. */ buf += n; buflen -= n; } ne_set_error(req->session, _("Response header too long")); return NE_ERROR; } /* Apache's default is 100, seems reasonable. */ #define MAX_HEADER_FIELDS 100 /* Read response headers. Returns NE_* code, sets session error. */ static int read_response_headers(ne_request *req) { char hdr[8192]; /* max header length */ int ret, count = 0; while ((ret = read_message_header(req, hdr, sizeof hdr)) == NE_RETRY && ++count < MAX_HEADER_FIELDS) { struct header_handler *hdl; char *pnt; unsigned int hash = 0; for (hdl = req->header_catchers; hdl != NULL; hdl = hdl->next) hdl->handler(hdl->userdata, hdr); /* Strip any trailing whitespace */ pnt = hdr + strlen(hdr) - 1; while (pnt > hdr && (*pnt == ' ' || *pnt == '\t')) *pnt-- = '\0'; /* Convert the header name to lower case and hash it. */ for (pnt = hdr; (*pnt != '\0' && *pnt != ':' && *pnt != ' ' && *pnt != '\t'); pnt++) { *pnt = tolower(*pnt); hash = HH_ITERATE(hash,*pnt); } /* Skip over any whitespace before the colon. */ while (*pnt == ' ' || *pnt == '\t') *pnt++ = '\0'; /* ignore header lines which lack a ':'. */ if (*pnt != ':') continue; /* NUL-terminate at the colon (when no whitespace before) */ *pnt++ = '\0'; /* Skip any whitespace after the colon... */ while (*pnt == ' ' || *pnt == '\t') pnt++; /* pnt now points to the header value. */ NE_DEBUG(NE_DBG_HTTP, "Header Name: [%s], Value: [%s]\n", hdr, pnt); /* Iterate through the header handlers */ for (hdl = req->header_handlers[hash]; hdl != NULL; hdl = hdl->next) { if (strcmp(hdr, hdl->name) == 0) hdl->handler(hdl->userdata, pnt); } } if (count == MAX_HEADER_FIELDS) ret = aborted( req, _("Response exceeded maximum number of header fields."), 0); return ret; } static int lookup_host(ne_session *sess, struct host_info *info) { NE_DEBUG(NE_DBG_HTTP, "Doing DNS lookup on %s...\n", info->hostname); if (sess->notify_cb) sess->notify_cb(sess->notify_ud, ne_conn_namelookup, info->hostname); info->address = ne_addr_resolve(info->hostname, 0); if (ne_addr_result(info->address)) { char buf[256]; ne_set_error(sess, _("Could not resolve hostname `%s': %s"), info->hostname, ne_addr_error(info->address, buf, sizeof buf)); ne_addr_destroy(info->address); info->address = NULL; return NE_LOOKUP; } else { return NE_OK; } } int ne_begin_request(ne_request *req) { struct body_reader *rdr; struct host_info *host; ne_buffer *data; const ne_status *const st = &req->status; int ret; /* Resolve hostname if necessary. */ host = req->session->use_proxy?&req->session->proxy:&req->session->server; if (host->address == NULL) HTTP_ERR(lookup_host(req->session, host)); req->resp.mode = R_TILLEOF; /* FIXME: Determine whether to use the Expect: 100-continue header. */ req->use_expect100 = (req->session->expect100_works > -1) && (req->body_size > HTTP_EXPECT_MINSIZE) && req->session->is_http11; /* Build the request string, and send it */ data = build_request(req); DEBUG_DUMP_REQUEST(data->data); ret = send_request(req, data); /* Retry this once after a persistent connection timeout. */ if (ret == NE_RETRY && !req->session->no_persist) { NE_DEBUG(NE_DBG_HTTP, "Persistent connection timed out, retrying.\n"); ret = send_request(req, data); } ne_buffer_destroy(data); if (ret != NE_OK) return ret; /* Determine whether server claims HTTP/1.1 compliance. */ req->session->is_http11 = (st->major_version == 1 && st->minor_version > 0) || st->major_version > 1; /* Persistent connections supported implicitly in HTTP/1.1 */ if (req->session->is_http11) req->can_persist = 1; ne_set_error(req->session, "%d %s", st->code, st->reason_phrase); /* Read the headers */ HTTP_ERR(read_response_headers(req)); #ifdef NEON_SSL /* Special case for CONNECT handling: the response has no body, * and the connection can persist. */ if (req->session->in_connect && st->klass == 2) { req->resp.mode = R_NO_BODY; req->can_persist = 1; } #endif /* HEAD requests and 204, 205, 304 responses have no response body, * regardless of what headers are present. */ if (req->method_is_head || st->code==204 || st->code==205 || st->code==304) req->resp.mode = R_NO_BODY; /* Prepare for reading the response entity-body. Call each of the * body readers and ask them whether they want to accept this * response or not. */ for (rdr = req->body_readers; rdr != NULL; rdr=rdr->next) { rdr->use = rdr->accept_response(rdr->userdata, req, st); } req->resp.left = req->resp.length; req->resp.chunk_left = 0; return NE_OK; } int ne_end_request(ne_request *req) { struct hook *hk; int ret = NE_OK; /* Read headers in chunked trailers */ if (req->resp.mode == R_CHUNKED) HTTP_ERR(read_response_headers(req)); NE_DEBUG(NE_DBG_HTTP, "Running post_send hooks\n"); for (hk = req->session->post_send_hooks; ret == NE_OK && hk != NULL; hk = hk->next) { ne_post_send_fn fn = (ne_post_send_fn)hk->fn; ret = fn(req, hk->userdata, &req->status); } /* Close the connection if persistent connections are disabled or * not supported by the server. */ if (req->session->no_persist || !req->can_persist) ne_close_connection(req->session); else req->session->persisted = 1; return ret; } int ne_request_dispatch(ne_request *req) { int ret; /* Loop sending the request: * Retry whilst authentication fails and we supply it. */ do { ssize_t len; HTTP_ERR(ne_begin_request(req)); do { len = ne_read_response_block(req, req->respbuf, sizeof req->respbuf); } while (len > 0); if (len < 0) { return NE_ERROR; } ret = ne_end_request(req); } while (ret == NE_RETRY); NE_DEBUG(NE_DBG_HTTP | NE_DBG_FLUSH, "Request ends, status %d class %dxx, error line:\n%s\n", req->status.code, req->status.klass, req->session->error); return ret; } const ne_status *ne_get_status(const ne_request *req) { return &req->status; } ne_session *ne_get_session(const ne_request *req) { return req->session; } #ifdef NEON_SSL /* Create a CONNECT tunnel through the proxy server. * Returns HTTP_* */ static int proxy_tunnel(ne_session *sess) { /* Hack up an HTTP CONNECT request... */ ne_request *req; int ret = NE_OK; char ruri[200]; /* Can't use server.hostport here; Request-URI must include `:port' */ ne_snprintf(ruri, sizeof ruri, "%s:%u", sess->server.hostname, sess->server.port); req = ne_request_create(sess, "CONNECT", ruri); sess->in_connect = 1; ret = ne_request_dispatch(req); sess->in_connect = 0; sess->persisted = 0; /* don't treat this is a persistent connection. */ if (ret != NE_OK || !sess->connected || req->status.klass != 2) { ne_set_error (sess, _("Could not create SSL connection through proxy server")); ret = NE_ERROR; } ne_request_destroy(req); return ret; } #endif /* Make new TCP connection to server at 'host' of type 'name'. Note * that once a connection to a particular network address has * succeeded, that address will be used first for the next attempt to * connect. */ /* TODO: an alternate implementation could always cycle through the * addresses: this could ease server load, but could hurt SSL session * caching for SSL sessions, which would increase server load. */ static int do_connect(ne_request *req, struct host_info *host, const char *err) { ne_session *const sess = req->session; int ret; if ((sess->socket = ne_sock_create()) == NULL) { ne_set_error(sess, _("Could not create socket")); return NE_ERROR; } if (host->current == NULL) host->current = ne_addr_first(host->address); do { notify_status(sess, ne_conn_connecting, host->hostport); #ifdef NE_DEBUGGING if (ne_debug_mask & NE_DBG_HTTP) { char buf[150]; NE_DEBUG(NE_DBG_HTTP, "Connecting to %s\n", ne_iaddr_print(host->current, buf, sizeof buf)); } #endif ret = ne_sock_connect(sess->socket, host->current, host->port); } while (ret && /* try the next address... */ (host->current = ne_addr_next(host->address)) != NULL); if (ret) { ne_set_error(sess, "%s: %s", err, ne_sock_error(sess->socket)); ne_sock_close(sess->socket); return NE_CONNECT; } notify_status(sess, ne_conn_connected, sess->proxy.hostport); if (sess->rdtimeout) ne_sock_read_timeout(sess->socket, sess->rdtimeout); sess->connected = 1; /* clear persistent connection flag. */ sess->persisted = 0; return NE_OK; } static int open_connection(ne_request *req) { ne_session *sess = req->session; int ret; if (sess->connected) return NE_OK; if (!sess->use_proxy) ret = do_connect(req, &sess->server, _("Could not connect to server")); else ret = do_connect(req, &sess->proxy, _("Could not connect to proxy server")); if (ret != NE_OK) return ret; #ifdef NEON_SSL /* Negotiate SSL layer if required. */ if (sess->use_ssl && !sess->in_connect) { /* CONNECT tunnel */ if (req->session->use_proxy) ret = proxy_tunnel(sess); if (ret == NE_OK) ret = ne_negotiate_ssl(req); /* This is probably only really needed for ne_negotiate_ssl * failures as proxy_tunnel will fail via aborted(). */ if (ret != NE_OK) ne_close_connection(sess); } #endif return ret; } tla-1.3.5+dfsg/src/libneon/src/ne_uri.c0000644000175000017500000002164110457621776016411 0ustar useruser/* HTTP URI handling Copyright (C) 1999-2003, Joe Orton This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA */ #include "config.h" #ifdef HAVE_STRING_H #include #endif #ifdef HAVE_STRINGS_H #include #endif #ifdef HAVE_UNISTD_H #include #endif #ifdef HAVE_STDLIB_H #include #endif #include #include "ne_utils.h" /* for 'min' */ #include "ne_string.h" /* for ne_buffer */ #include "ne_alloc.h" #include "ne_uri.h" char *ne_path_parent(const char *uri) { size_t len = strlen(uri); const char *pnt = uri + len - 1; /* skip trailing slash (parent of "/foo/" is "/") */ if (pnt >= uri && *pnt == '/') pnt--; /* find previous slash */ while (pnt > uri && *pnt != '/') pnt--; if (pnt < uri || (pnt == uri && *pnt != '/')) return NULL; return ne_strndup(uri, pnt - uri + 1); } int ne_path_has_trailing_slash(const char *uri) { size_t len = strlen(uri); return ((len > 0) && (uri[len-1] == '/')); } unsigned int ne_uri_defaultport(const char *scheme) { /* RFC2616/3.2.3 says use case-insensitive comparisons here. */ if (strcasecmp(scheme, "http") == 0) return 80; else if (strcasecmp(scheme, "https") == 0) return 443; else return 0; } /* TODO: Also, maybe stop malloc'ing here, take a "char *" uri, modify * it in-place, and have fields point inside passed uri. More work * for the caller then though. */ /* TODO: not a proper URI parser */ int ne_uri_parse(const char *uri, ne_uri *parsed) { const char *pnt, *slash, *colon, *atsign, *openbk; parsed->port = 0; parsed->host = NULL; parsed->path = NULL; parsed->scheme = NULL; parsed->authinfo = NULL; if (uri[0] == '\0') { return -1; } pnt = strstr(uri, "://"); if (pnt) { parsed->scheme = ne_strndup(uri, pnt - uri); pnt += 3; /* start of hostport segment */ } else { pnt = uri; } atsign = strchr(pnt, '@'); slash = strchr(pnt, '/'); openbk = strchr(pnt, '['); /* Check for an authinfo segment in the hostport segment. */ if (atsign != NULL && (slash == NULL || atsign < slash)) { parsed->authinfo = ne_strndup(pnt, atsign - pnt); pnt = atsign + 1; } if (openbk && (!slash || openbk < slash)) { const char *closebk = strchr(openbk, ']'); if (closebk == NULL) return -1; colon = strchr(closebk + 1, ':'); } else { colon = strchr(pnt, ':'); } if (slash == NULL) { parsed->path = ne_strdup("/"); if (colon == NULL) { parsed->host = ne_strdup(pnt); } else { parsed->port = atoi(colon+1); parsed->host = ne_strndup(pnt, colon - pnt); } } else { if (colon == NULL || colon > slash) { /* No port segment */ if (slash != uri) { parsed->host = ne_strndup(pnt, slash - pnt); } else { /* No hostname segment. */ } } else { /* Port segment */ parsed->port = atoi(colon + 1); parsed->host = ne_strndup(pnt, colon - pnt); } parsed->path = ne_strdup(slash); } return 0; } void ne_uri_free(ne_uri *u) { if (u->host) ne_free(u->host); if (u->path) ne_free(u->path); if (u->scheme) ne_free(u->scheme); if (u->authinfo) ne_free(u->authinfo); memset(u, 0, sizeof *u); } char *ne_path_unescape(const char *uri) { const char *pnt; char *ret, *retpos, buf[5] = { "0x00\0" }; retpos = ret = ne_malloc(strlen(uri) + 1); for (pnt = uri; *pnt != '\0'; pnt++) { if (*pnt == '%') { if (!isxdigit((unsigned char) pnt[1]) || !isxdigit((unsigned char) pnt[2])) { /* Invalid URI */ ne_free(ret); return NULL; } buf[2] = *++pnt; buf[3] = *++pnt; /* bit faster than memcpy */ *retpos++ = (char)strtol(buf, NULL, 16); } else { *retpos++ = *pnt; } } *retpos = '\0'; return ret; } /* RFC2396 spake: * "Data must be escaped if it does not have a representation * using an unreserved character". */ /* Lookup table: character classes from 2396. (This is overkill) */ #define SP 0 /* space = */ #define CO 0 /* control = */ #define DE 0 /* delims = "<" | ">" | "#" | "%" | <"> */ #define UW 0 /* unwise = "{" | "}" | "|" | "\" | "^" | "[" | "]" | "`" */ #define MA 1 /* mark = "-" | "_" | "." | "!" | "~" | "*" | "'" | "(" | ")" */ #define AN 2 /* alphanum = alpha | digit */ #define RE 2 /* reserved = ";" | "/" | "?" | ":" | "@" | "&" | "=" | "+" | "$" | "," */ static const char uri_chars[128] = { /* +2 +4 +6 +8 +10 +12 +14 */ /* 0 */ CO, CO, CO, CO, CO, CO, CO, CO, CO, CO, CO, CO, CO, CO, CO, CO, /* 16 */ CO, CO, CO, CO, CO, CO, CO, CO, CO, CO, CO, CO, CO, CO, CO, CO, /* 32 */ SP, MA, DE, DE, RE, DE, RE, MA, MA, MA, MA, RE, RE, MA, MA, RE, /* 48 */ AN, AN, AN, AN, AN, AN, AN, AN, AN, AN, RE, RE, DE, RE, DE, RE, /* 64 */ RE, AN, AN, AN, AN, AN, AN, AN, AN, AN, AN, AN, AN, AN, AN, AN, /* 80 */ AN, AN, AN, AN, AN, AN, AN, AN, AN, AN, AN, UW, UW, UW, UW, MA, /* 96 */ UW, AN, AN, AN, AN, AN, AN, AN, AN, AN, AN, AN, AN, AN, AN, AN, /* 112 */ AN, AN, AN, AN, AN, AN, AN, AN, AN, AN, AN, UW, UW, UW, MA, CO }; #define ESCAPE(ch) (((const signed char)(ch) < 0 || \ uri_chars[(unsigned int)(ch)] == 0)) #undef SP #undef CO #undef DE #undef UW #undef MA #undef AN #undef RE char *ne_path_escape(const char *abs_path) { const char *pnt; char *ret, *retpos; int count = 0; for (pnt = abs_path; *pnt != '\0'; pnt++) { if (ESCAPE(*pnt)) { count++; } } if (count == 0) { return ne_strdup(abs_path); } /* An escaped character is "%xx", i.e., two MORE * characters than the original string */ retpos = ret = ne_malloc(strlen(abs_path) + 2*count + 1); for (pnt = abs_path; *pnt != '\0'; pnt++) { if (ESCAPE(*pnt)) { /* Escape it - % */ sprintf(retpos, "%%%02x", (unsigned char) *pnt); retpos += 3; } else { /* It's cool */ *retpos++ = *pnt; } } *retpos = '\0'; return ret; } #undef ESCAPE #define CASECMP(field) do { \ n = strcasecmp(u1->field, u2->field); if (n) return n; } while(0) #define CMP(field) do { \ n = strcmp(u1->field, u2->field); if (n) return n; } while(0) /* As specified by RFC 2616, section 3.2.3. */ int ne_uri_cmp(const ne_uri *u1, const ne_uri *u2) { int n; if (u1->path[0] == '\0' && strcmp(u2->path, "/") == 0) return 0; if (u2->path[0] == '\0' && strcmp(u1->path, "/") == 0) return 0; CMP(path); CASECMP(host); CASECMP(scheme); if (u1->port > u2->port) return 1; else if (u1->port < u2->port) return -1; return 0; } #undef CMP #undef CASECMP /* TODO: implement properly */ int ne_path_compare(const char *a, const char *b) { int ret = strcasecmp(a, b); if (ret) { /* This logic says: "If the lengths of the two URIs differ by * exactly one, and the LONGER of the two URIs has a trailing * slash and the SHORTER one DOESN'T, then..." */ int traila = ne_path_has_trailing_slash(a), trailb = ne_path_has_trailing_slash(b), lena = strlen(a), lenb = strlen(b); if (traila != trailb && abs(lena - lenb) == 1 && ((traila && lena > lenb) || (trailb && lenb > lena))) { /* Compare them, ignoring the trailing slash on the longer * URI */ if (strncasecmp(a, b, min(lena, lenb)) == 0) ret = 0; } } return ret; } char *ne_uri_unparse(const ne_uri *uri) { ne_buffer *buf = ne_buffer_create(); ne_buffer_concat(buf, uri->scheme, "://", uri->host, NULL); if (uri->port > 0 && ne_uri_defaultport(uri->scheme) != uri->port) { char str[20]; ne_snprintf(str, 20, ":%d", uri->port); ne_buffer_zappend(buf, str); } ne_buffer_zappend(buf, uri->path); return ne_buffer_finish(buf); } /* Give it a path segment, it returns non-zero if child is * a child of parent. */ int ne_path_childof(const char *parent, const char *child) { char *root = ne_strdup(child); int ret; if (strlen(parent) >= strlen(child)) { ret = 0; } else { /* root is the first of child, equal to length of parent */ root[strlen(parent)] = '\0'; ret = (ne_path_compare(parent, root) == 0); } ne_free(root); return ret; } tla-1.3.5+dfsg/src/libneon/src/ne_string.c0000644000175000017500000003112110457621776017112 0ustar useruser/* String utility functions Copyright (C) 1999-2003, Joe Orton This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA */ #include "config.h" #ifdef HAVE_STDLIB_H #include #endif #ifdef HAVE_STRING_H #include #endif #ifdef HAVE_UNISTD_H #include #endif #include /* for isprint() etc in ne_strclean() */ #include "ne_alloc.h" #include "ne_string.h" char *ne_token(char **str, char separator) { char *ret = *str, *pnt = strchr(*str, separator); if (pnt) { *pnt = '\0'; *str = pnt + 1; } else { /* no separator found: return end of string. */ *str = NULL; } return ret; } char *ne_qtoken(char **str, char separator, const char *quotes) { char *pnt, *ret = NULL; for (pnt = *str; *pnt != '\0'; pnt++) { char *quot = strchr(quotes, *pnt); if (quot) { char *qclose = strchr(pnt+1, *quot); if (!qclose) { /* no closing quote: invalid string. */ return NULL; } pnt = qclose; } else if (*pnt == separator) { /* found end of token. */ *pnt = '\0'; ret = *str; *str = pnt + 1; return ret; } } /* no separator found: return end of string. */ ret = *str; *str = NULL; return ret; } char *ne_shave(char *str, const char *whitespace) { char *pnt, *ret = str; while (*ret != '\0' && strchr(whitespace, *ret) != NULL) { ret++; } /* pnt points at the NUL terminator. */ pnt = &ret[strlen(ret)]; while (pnt > ret && strchr(whitespace, *(pnt-1)) != NULL) { pnt--; } *pnt = '\0'; return ret; } /* TODO: deprecate all these and use ne_token() instead. */ char **split_string(const char *str, const char separator, const char *quotes, const char *whitespace) { return split_string_c(str, separator, quotes, whitespace, NULL); } char **split_string_c(const char *str, const char separator, const char *quotes, const char *whitespace, int *give_count) { char **comps; const char *pnt, *quot = NULL, *start, *end; /* The start of the current component */ int count, /* The number of components */ iswhite, /* is it whitespace */ issep, /* is it the separator */ curr, /* current component index */ length, /* length of component */ leading_wspace; /* in leading whitespace still? */ /* Inefficient, but easier - first off, count the number of * components we have. */ count = 1; for (pnt = str; *pnt!='\0'; pnt++) { if (quotes != NULL) { quot = strchr(quotes, *pnt); } if (quot != NULL) { /* We found a quote, so skip till the next quote */ for (pnt++; (*pnt!=*quot) && (*pnt!='\0'); pnt++) /* nullop */; } else if (*pnt == separator) { count++; } } if (give_count) { /* Write the count */ *give_count = count; } /* Now, have got the number of components. * Allocate the comps array. +1 for the NULL */ comps = ne_malloc(sizeof(char *) * (count + 1)); comps[count] = NULL; quot = end = start = NULL; curr = 0; leading_wspace = 1; /* Now fill in the array */ for (pnt = str; *pnt != '\0'; pnt++) { /* What is the current character - quote, whitespace, separator? */ if (quotes != NULL) { quot = strchr(quotes, *pnt); } iswhite = (whitespace!=NULL) && (strchr(whitespace, *pnt) != NULL); issep = (*pnt == separator); /* What to do? */ if (leading_wspace) { if (quot!=NULL) { /* Quoted bit */ start = pnt; length = 1; leading_wspace = 0; } else if (issep) { /* Zero-length component */ comps[curr++] = ne_strdup(""); } else if (!iswhite) { start = end = pnt; length = 1; leading_wspace = 0; } } else { if (quot!=NULL) { /* Quoted bit */ length++; } else if (issep) { /* End of component - enter it into the array */ length = (end - start) + 1; comps[curr] = ne_malloc(length+1); memcpy(comps[curr], start, length); comps[curr][length] = '\0'; curr++; leading_wspace = 1; } else if (!iswhite) { /* Not whitespace - update end marker */ end = pnt; } } if (quot != NULL) { /* Skip to closing quote */ for (pnt++; *pnt!=*quot && *pnt != '\0'; ++pnt) /* nullop */; /* Last non-wspace char is closing quote */ end = pnt; } } /* Handle final component */ if (leading_wspace) { comps[curr] = ne_strdup(""); } else { /* End of component - enter it into the array */ length = (end - start) + 1; comps[curr] = ne_malloc(length+1); memcpy(comps[curr], start, length); comps[curr][length] = '\0'; } return comps; } char **pair_string(const char *str, const char compsep, const char kvsep, const char *quotes, const char *whitespace) { char **comps, **pairs, *split; int count = 0, n, length; comps = split_string_c(str, compsep, quotes, whitespace, &count); /* Allocate space for 2* as many components as split_string returned, * +2 for the NULLS. */ pairs = ne_malloc((2*count+2) * sizeof(char *)); if (pairs == NULL) { return NULL; } for (n = 0; n < count; n++) { /* Find the split */ split = strchr(comps[n], kvsep); if (split == NULL) { /* No seperator found */ length = strlen(comps[n]); } else { length = split-comps[n]; } /* Enter the key into the array */ pairs[2*n] = comps[n]; /* Null-terminate the key */ pairs[2*n][length] = '\0'; pairs[2*n+1] = split?(split + 1):NULL; } ne_free(comps); pairs[2*count] = pairs[2*count+1] = NULL; return pairs; } void split_string_free(char **components) { char **pnt = components; while (*pnt != NULL) { ne_free(*pnt); pnt++; } ne_free(components); } void pair_string_free(char **pairs) { int n; for (n = 0; pairs[n] != NULL; n+=2) { ne_free(pairs[n]); } ne_free(pairs); } void ne_buffer_clear(ne_buffer *buf) { memset(buf->data, 0, buf->length); buf->used = 1; } /* Grows for given size, returns 0 on success, -1 on error. */ void ne_buffer_grow(ne_buffer *buf, size_t newsize) { #define NE_BUFFER_GROWTH 512 if (newsize > buf->length) { /* If it's not big enough already... */ buf->length = ((newsize / NE_BUFFER_GROWTH) + 1) * NE_BUFFER_GROWTH; /* Reallocate bigger buffer */ buf->data = ne_realloc(buf->data, buf->length); } } static size_t count_concat(va_list *ap) { size_t total = 0; char *next; while ((next = va_arg(*ap, char *)) != NULL) total += strlen(next); return total; } static void do_concat(char *str, va_list *ap) { char *next; while ((next = va_arg(*ap, char *)) != NULL) { #ifdef HAVE_STPCPY str = stpcpy(str, next); #else size_t len = strlen(next); memcpy(str, next, len); str += len; #endif } } void ne_buffer_concat(ne_buffer *buf, ...) { va_list ap; ssize_t total; va_start(ap, buf); total = buf->used + count_concat(&ap); va_end(ap); /* Grow the buffer */ ne_buffer_grow(buf, total); va_start(ap, buf); do_concat(buf->data + buf->used - 1, &ap); va_end(ap); buf->used = total; buf->data[total - 1] = '\0'; } char *ne_concat(const char *str, ...) { va_list ap; size_t total, slen = strlen(str); char *ret; va_start(ap, str); total = slen + count_concat(&ap); va_end(ap); ret = memcpy(ne_malloc(total + 1), str, slen); va_start(ap, str); do_concat(ret + slen, &ap); va_end(ap); ret[total] = '\0'; return ret; } /* Append zero-terminated string... returns 0 on success or -1 on * realloc failure. */ void ne_buffer_zappend(ne_buffer *buf, const char *str) { ne_buffer_append(buf, str, strlen(str)); } void ne_buffer_append(ne_buffer *buf, const char *data, size_t len) { ne_buffer_grow(buf, buf->used + len); memcpy(buf->data + buf->used - 1, data, len); buf->used += len; buf->data[buf->used - 1] = '\0'; } ne_buffer *ne_buffer_create(void) { return ne_buffer_ncreate(512); } ne_buffer *ne_buffer_ncreate(size_t s) { ne_buffer *buf = ne_malloc(sizeof(*buf)); buf->data = ne_malloc(s); buf->data[0] = '\0'; buf->length = s; buf->used = 1; return buf; } void ne_buffer_destroy(ne_buffer *buf) { ne_free(buf->data); ne_free(buf); } char *ne_buffer_finish(ne_buffer *buf) { char *ret = buf->data; ne_free(buf); return ret; } void ne_buffer_altered(ne_buffer *buf) { buf->used = strlen(buf->data) + 1; } static const char *b64_alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" "abcdefghijklmnopqrstuvwxyz" "0123456789+/="; char *ne_base64(const unsigned char *text, size_t inlen) { /* The tricky thing about this is doing the padding at the end, * doing the bit manipulation requires a bit of concentration only */ char *buffer, *point; size_t outlen; /* Use 'buffer' to store the output. Work out how big it should be... * This must be a multiple of 4 bytes */ outlen = (inlen*4)/3; if ((inlen % 3) > 0) /* got to pad */ outlen += 4 - (inlen % 3); buffer = ne_malloc(outlen + 1); /* +1 for the \0 */ /* now do the main stage of conversion, 3 bytes at a time, * leave the trailing bytes (if there are any) for later */ for (point=buffer; inlen>=3; inlen-=3, text+=3) { *(point++) = b64_alphabet[ (*text)>>2 ]; *(point++) = b64_alphabet[ ((*text)<<4 & 0x30) | (*(text+1))>>4 ]; *(point++) = b64_alphabet[ ((*(text+1))<<2 & 0x3c) | (*(text+2))>>6 ]; *(point++) = b64_alphabet[ (*(text+2)) & 0x3f ]; } /* Now deal with the trailing bytes */ if (inlen > 0) { /* We always have one trailing byte */ *(point++) = b64_alphabet[ (*text)>>2 ]; *(point++) = b64_alphabet[ (((*text)<<4 & 0x30) | (inlen==2?(*(text+1))>>4:0)) ]; *(point++) = (inlen==1?'=':b64_alphabet[ (*(text+1))<<2 & 0x3c ]); *(point++) = '='; } /* Null-terminate */ *point = '\0'; return buffer; } /* VALID_B64: fail if 'ch' is not a valid base64 character */ #define VALID_B64(ch) (((ch) >= 'A' && (ch) <= 'Z') || \ ((ch) >= 'a' && (ch) <= 'z') || \ ((ch) >= '0' && (ch) <= '9') || \ (ch) == '/' || (ch) == '+' || (ch) == '=') /* DECODE_B64: decodes a valid base64 character. */ #define DECODE_B64(ch) ((ch) >= 'a' ? ((ch) + 26 - 'a') : \ ((ch) >= 'A' ? ((ch) - 'A') : \ ((ch) >= '0' ? ((ch) + 52 - '0') : \ ((ch) == '+' ? 62 : 63)))) size_t ne_unbase64(const char *data, unsigned char **out) { size_t inlen = strlen(data); unsigned char *outp; const unsigned char *in; if (inlen == 0 || (inlen % 4) != 0) return 0; outp = *out = ne_malloc(inlen * 3 / 4); for (in = (const unsigned char *)data; *in; in += 4) { unsigned int tmp; if (!VALID_B64(in[0]) || !VALID_B64(in[1]) || !VALID_B64(in[2]) || !VALID_B64(in[3]) || in[0] == '=' || in[1] == '=' || (in[2] == '=' && in[3] != '=')) { ne_free(*out); return 0; } tmp = (DECODE_B64(in[0]) & 0x3f) << 18 | (DECODE_B64(in[1]) & 0x3f) << 12; *outp++ = (tmp >> 16) & 0xff; if (in[2] != '=') { tmp |= (DECODE_B64(in[2]) & 0x3f) << 6; *outp++ = (tmp >> 8) & 0xff; if (in[3] != '=') { tmp |= DECODE_B64(in[3]) & 0x3f; *outp++ = tmp & 0xff; } } } return outp - *out; } char *ne_strclean(char *str) { char *pnt; for (pnt = str; *pnt; pnt++) if (iscntrl(*pnt) || !isprint(*pnt)) *pnt = ' '; return str; } char *ne_strerror(int errnum, char *buf, size_t buflen) { #ifdef HAVE_STRERROR_R #ifdef STRERROR_R_CHAR_P /* glibc-style strerror_r which may-or-may-not use provided buffer. */ char *ret = strerror_r(errnum, buf, buflen); if (ret != buf) ne_strnzcpy(buf, ret, buflen); #else /* POSIX-style strerror_r: */ strerror_r(errnum, buf, buflen); #endif #else /* no strerror_r: */ ne_strnzcpy(buf, strerror(errnum), buflen); #endif return buf; } tla-1.3.5+dfsg/src/libneon/src/ne_auth.c0000644000175000017500000010252010457621776016547 0ustar useruser/* HTTP Authentication routines Copyright (C) 1999-2004, Joe Orton This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA */ /* HTTP Authentication, as per RFC2617. * * TODO: * - Test auth-int support */ #include "config.h" #include #ifdef HAVE_SYS_TIME_H #include #endif #ifdef HAVE_STDLIB_H #include #endif #ifdef HAVE_STRING_H #include #endif #ifdef HAVE_STRINGS_H #include #endif #ifdef HAVE_UNISTD_H #include /* for getpid() */ #endif #ifdef WIN32 #include /* for GetCurrentThreadId() etc */ #endif #ifdef NEON_SSL #include #endif #include #include "ne_md5.h" #include "ne_dates.h" #include "ne_request.h" #include "ne_auth.h" #include "ne_string.h" #include "ne_utils.h" #include "ne_alloc.h" #include "ne_uri.h" #include "ne_i18n.h" #ifdef HAVE_GSSAPI #ifdef HAVE_GSSAPI_GSSAPI_H #include #ifdef HAVE_GSSAPI_GSSAPI_GENERIC_H #include #endif #else #include #endif #endif /* TODO: should remove this eventually. Need it for * ne_pull_request_body. */ #include "ne_private.h" #define HOOK_SERVER_ID "http://webdav.org/neon/hooks/server-auth" #define HOOK_PROXY_ID "http://webdav.org/neon/hooks/proxy-auth" /* The authentication scheme we are using */ typedef enum { auth_scheme_basic, auth_scheme_digest, auth_scheme_gssapi } auth_scheme; typedef enum { auth_alg_md5, auth_alg_md5_sess, auth_alg_unknown } auth_algorithm; /* Selected method of qop which the client is using */ typedef enum { auth_qop_none, auth_qop_auth, auth_qop_auth_int } auth_qop; /* A challenge */ struct auth_challenge { auth_scheme scheme; const char *realm; const char *nonce; const char *opaque; unsigned int stale:1; /* if stale=true */ unsigned int got_qop:1; /* we were given a qop directive */ unsigned int qop_auth:1; /* "auth" token in qop attrib */ unsigned int qop_auth_int:1; /* "auth-int" token in qop attrib */ auth_algorithm alg; struct auth_challenge *next; }; static const struct auth_class { const char *id, *req_hdr, *resp_hdr, *resp_info_hdr, *fail_msg; int status_code, fail_code; } ah_server_class = { HOOK_SERVER_ID, "Authorization", "WWW-Authenticate", "Authentication-Info", N_("Server was not authenticated correctly."), 401, NE_AUTH }, ah_proxy_class = { HOOK_PROXY_ID, "Proxy-Authorization", "Proxy-Authenticate", "Proxy-Authentication-Info", N_("Proxy server was not authenticated correctly."), 407, NE_PROXYAUTH }; /* Authentication session state. */ typedef struct { ne_session *sess; /* Which context will auth challenges be accepted? */ enum { AUTH_ANY, /* ignore nothing. */ AUTH_CONNECT, /* only in response to a CONNECT request. */ AUTH_NOTCONNECT /* only in non-CONNECT responsees */ } context; /* Specifics for server/proxy auth. FIXME: need a better field * name! */ const struct auth_class *spec; /* The scheme used for this authentication session */ auth_scheme scheme; /* The callback used to request new username+password */ ne_auth_creds creds; void *userdata; /*** Session details ***/ /* The username and password we are using to authenticate with */ char username[NE_ABUFSIZ]; /* Whether we CAN supply authentication at the moment */ unsigned int can_handle:1; /* This used for Basic auth */ char *basic; #ifdef HAVE_GSSAPI /* This used for GSSAPI auth */ char *gssapi_token; #endif /* These all used for Digest auth */ char *realm; char *nonce; char *cnonce; char *opaque; auth_qop qop; auth_algorithm alg; unsigned int nonce_count; /* The ASCII representation of the session's H(A1) value */ char h_a1[33]; /* Temporary store for half of the Request-Digest * (an optimisation - used in the response-digest calculation) */ struct ne_md5_ctx stored_rdig; /* Details of server... needed to reconstruct absoluteURI's when * necessary */ const char *host; const char *uri_scheme; unsigned int port; int attempt; } auth_session; struct auth_request { /*** Per-request details. ***/ ne_request *request; /* the request object. */ /* The method and URI we are using for the current request */ const char *uri; const char *method; /* Whether we WILL supply authentication for this request or not */ unsigned int will_handle:1; /* Used for calculation of H(entity-body) of the response */ struct ne_md5_ctx response_body; /* Results of response-header callbacks */ char *auth_hdr, *auth_info_hdr; }; static void clean_session(auth_session *sess) { sess->can_handle = 0; NE_FREE(sess->basic); NE_FREE(sess->nonce); NE_FREE(sess->cnonce); NE_FREE(sess->opaque); NE_FREE(sess->realm); #ifdef HAVE_GSSAPI NE_FREE(sess->gssapi_token); #endif } /* Returns client nonce string. */ static char *get_cnonce(void) { char ret[33]; unsigned char data[256], tmp[16]; struct ne_md5_ctx hash; ne_md5_init_ctx(&hash); #ifdef NEON_SSL if (RAND_status() == 1 && RAND_pseudo_bytes(data, sizeof data) >= 0) ne_md5_process_bytes(data, sizeof data, &hash); else { #endif /* Fallback sources of random data: all bad, but no good sources * are available. */ /* Uninitialized stack data; yes, happy valgrinders, this is * supposed to be here. */ ne_md5_process_bytes(data, sizeof data, &hash); #ifdef HAVE_GETTIMEOFDAY { struct timeval tv; if (gettimeofday(&tv, NULL) == 0) ne_md5_process_bytes(&tv, sizeof tv, &hash); } #else /* HAVE_GETTIMEOFDAY */ { time_t t = time(NULL); ne_md5_process_bytes(&t, sizeof t, &hash); } #endif { #ifdef WIN32 DWORD pid = GetCurrentThreadId(); #else pid_t pid = getpid(); #endif ne_md5_process_bytes(&pid, sizeof pid, &hash); } #ifdef NEON_SSL } #endif ne_md5_finish_ctx(&hash, tmp); ne_md5_to_ascii(tmp, ret); return ne_strdup(ret); } static int get_credentials(auth_session *sess, char *pwbuf) { return sess->creds(sess->userdata, sess->realm, sess->attempt++, sess->username, pwbuf); } /* Examine a Basic auth challenge. * Returns 0 if an valid challenge, else non-zero. */ static int basic_challenge(auth_session *sess, struct auth_challenge *parms) { char *tmp, password[NE_ABUFSIZ]; /* Verify challenge... must have a realm */ if (parms->realm == NULL) { return -1; } NE_DEBUG(NE_DBG_HTTPAUTH, "Got Basic challenge with realm [%s]\n", parms->realm); clean_session(sess); sess->realm = ne_strdup(parms->realm); if (get_credentials(sess, password)) { /* Failed to get credentials */ return -1; } sess->scheme = auth_scheme_basic; tmp = ne_concat(sess->username, ":", password, NULL); sess->basic = ne_base64((unsigned char *)tmp, strlen(tmp)); ne_free(tmp); /* Paranoia. */ memset(password, 0, sizeof password); return 0; } /* Add Basic authentication credentials to a request */ static char *request_basic(auth_session *sess) { return ne_concat("Basic ", sess->basic, "\r\n", NULL); } #ifdef HAVE_GSSAPI /* Add GSSAPI authentication credentials to a request */ static char *request_gssapi(auth_session *sess) { return ne_concat("Negotiate ", sess->gssapi_token, "\r\n", NULL); } static int get_gss_name(gss_name_t *server, auth_session *sess) { unsigned int major_status, minor_status; gss_buffer_desc token = GSS_C_EMPTY_BUFFER; token.value = ne_concat("HTTP@", sess->sess->server.hostname, NULL); token.length = strlen(token.value); major_status = gss_import_name(&minor_status, &token, GSS_C_NT_HOSTBASED_SERVICE, server); return GSS_ERROR(major_status) ? -1 : 0; } /* Examine a GSSAPI auth challenge; returns 0 if a valid challenge, * else non-zero. */ static int gssapi_challenge(auth_session *sess, struct auth_challenge *parms) { gss_ctx_id_t context; gss_name_t server_name; unsigned int major_status, minor_status; gss_buffer_desc input_token = GSS_C_EMPTY_BUFFER; gss_buffer_desc output_token = GSS_C_EMPTY_BUFFER; clean_session(sess); if (get_gss_name(&server_name, sess)) return -1; major_status = gss_init_sec_context(&minor_status, GSS_C_NO_CREDENTIAL, &context, server_name, GSS_C_NO_OID, 0, GSS_C_INDEFINITE, GSS_C_NO_CHANNEL_BINDINGS, &input_token, NULL, &output_token, NULL, NULL); gss_release_name(&minor_status, &server_name); if (GSS_ERROR(major_status)) { NE_DEBUG(NE_DBG_HTTPAUTH, "gss_init_sec_context failed.\n"); return -1; } if (output_token.length == 0) return -1; sess->gssapi_token = ne_base64(output_token.value, output_token.length); gss_release_buffer(&major_status, &output_token); NE_DEBUG(NE_DBG_HTTPAUTH, "Base64 encoded GSSAPI challenge: %s.\n", sess->gssapi_token); sess->scheme = auth_scheme_gssapi; return 0; } #endif /* Examine a digest challenge: return 0 if it is a valid Digest challenge, * else non-zero. */ static int digest_challenge(auth_session *sess, struct auth_challenge *parms) { struct ne_md5_ctx tmp; unsigned char tmp_md5[16]; char password[NE_ABUFSIZ]; /* Verify they've given us the right bits. */ if (parms->alg == auth_alg_unknown || ((parms->alg == auth_alg_md5_sess) && !(parms->qop_auth || parms->qop_auth_int)) || parms->realm==NULL || parms->nonce==NULL) { NE_DEBUG(NE_DBG_HTTPAUTH, "Invalid challenge."); return -1; } if (parms->stale) { /* Just a stale response, don't need to get a new username/password */ NE_DEBUG(NE_DBG_HTTPAUTH, "Stale digest challenge.\n"); } else { /* Forget the old session details */ NE_DEBUG(NE_DBG_HTTPAUTH, "In digest challenge.\n"); clean_session(sess); sess->realm = ne_strdup(parms->realm); /* Not a stale response: really need user authentication */ if (get_credentials(sess, password)) { /* Failed to get credentials */ return -1; } } sess->alg = parms->alg; sess->scheme = auth_scheme_digest; sess->nonce = ne_strdup(parms->nonce); sess->cnonce = get_cnonce(); /* TODO: add domain handling. */ if (parms->opaque != NULL) { sess->opaque = ne_strdup(parms->opaque); /* don't strip the quotes */ } if (parms->got_qop) { /* What type of qop are we to apply to the message? */ NE_DEBUG(NE_DBG_HTTPAUTH, "Got qop directive.\n"); sess->nonce_count = 0; if (parms->qop_auth_int) { sess->qop = auth_qop_auth_int; } else { sess->qop = auth_qop_auth; } } else { /* No qop at all/ */ sess->qop = auth_qop_none; } if (!parms->stale) { /* Calculate H(A1). * tmp = H(unq(username-value) ":" unq(realm-value) ":" passwd) */ NE_DEBUG(NE_DBG_HTTPAUTH, "Calculating H(A1).\n"); ne_md5_init_ctx(&tmp); ne_md5_process_bytes(sess->username, strlen(sess->username), &tmp); ne_md5_process_bytes(":", 1, &tmp); ne_md5_process_bytes(sess->realm, strlen(sess->realm), &tmp); ne_md5_process_bytes(":", 1, &tmp); ne_md5_process_bytes(password, strlen(password), &tmp); memset(password, 0, sizeof password); /* done with that. */ ne_md5_finish_ctx(&tmp, tmp_md5); if (sess->alg == auth_alg_md5_sess) { unsigned char a1_md5[16]; struct ne_md5_ctx a1; char tmp_md5_ascii[33]; /* Now we calculate the SESSION H(A1) * A1 = H(...above...) ":" unq(nonce-value) ":" unq(cnonce-value) */ ne_md5_to_ascii(tmp_md5, tmp_md5_ascii); ne_md5_init_ctx(&a1); ne_md5_process_bytes(tmp_md5_ascii, 32, &a1); ne_md5_process_bytes(":", 1, &a1); ne_md5_process_bytes(sess->nonce, strlen(sess->nonce), &a1); ne_md5_process_bytes(":", 1, &a1); ne_md5_process_bytes(sess->cnonce, strlen(sess->cnonce), &a1); ne_md5_finish_ctx(&a1, a1_md5); ne_md5_to_ascii(a1_md5, sess->h_a1); NE_DEBUG(NE_DBG_HTTPAUTH, "Session H(A1) is [%s]\n", sess->h_a1); } else { ne_md5_to_ascii(tmp_md5, sess->h_a1); NE_DEBUG(NE_DBG_HTTPAUTH, "H(A1) is [%s]\n", sess->h_a1); } } NE_DEBUG(NE_DBG_HTTPAUTH, "I like this Digest challenge.\n"); return 0; } /* callback for ne_pull_request_body. */ static int digest_body(void *userdata, const char *buf, size_t count) { struct ne_md5_ctx *ctx = userdata; ne_md5_process_bytes(buf, count, ctx); return 0; } /* Return Digest authentication credentials header value for the given * session. */ static char *request_digest(auth_session *sess, struct auth_request *req) { struct ne_md5_ctx a2, rdig; unsigned char a2_md5[16], rdig_md5[16]; char a2_md5_ascii[33], rdig_md5_ascii[33]; char nc_value[9] = {0}; const char *qop_value; /* qop-value */ ne_buffer *ret; /* Increase the nonce-count */ if (sess->qop != auth_qop_none) { sess->nonce_count++; ne_snprintf(nc_value, 9, "%08x", sess->nonce_count); NE_DEBUG(NE_DBG_HTTPAUTH, "Nonce count is %u, nc is [%s]\n", sess->nonce_count, nc_value); } qop_value = sess->qop == auth_qop_auth_int ? "auth-int" : "auth"; /* Calculate H(A2). */ ne_md5_init_ctx(&a2); ne_md5_process_bytes(req->method, strlen(req->method), &a2); ne_md5_process_bytes(":", 1, &a2); ne_md5_process_bytes(req->uri, strlen(req->uri), &a2); if (sess->qop == auth_qop_auth_int) { struct ne_md5_ctx body; char tmp_md5_ascii[33]; unsigned char tmp_md5[16]; ne_md5_init_ctx(&body); /* Calculate H(entity-body): pull in the request body from * where-ever it is coming from, and calculate the digest. */ NE_DEBUG(NE_DBG_HTTPAUTH, "Digesting request body...\n"); ne_pull_request_body(req->request, digest_body, &body); NE_DEBUG(NE_DBG_HTTPAUTH, "Digesting request body done.\n"); ne_md5_finish_ctx(&body, tmp_md5); ne_md5_to_ascii(tmp_md5, tmp_md5_ascii); NE_DEBUG(NE_DBG_HTTPAUTH, "H(entity-body) is [%s]\n", tmp_md5_ascii); /* Append to A2 */ ne_md5_process_bytes(":", 1, &a2); ne_md5_process_bytes(tmp_md5_ascii, 32, &a2); } ne_md5_finish_ctx(&a2, a2_md5); ne_md5_to_ascii(a2_md5, a2_md5_ascii); NE_DEBUG(NE_DBG_HTTPAUTH, "H(A2): %s\n", a2_md5_ascii); NE_DEBUG(NE_DBG_HTTPAUTH, "Calculating Request-Digest.\n"); /* Now, calculation of the Request-Digest. * The first section is the regardless of qop value * H(A1) ":" unq(nonce-value) ":" */ ne_md5_init_ctx(&rdig); /* Use the calculated H(A1) */ ne_md5_process_bytes(sess->h_a1, 32, &rdig); ne_md5_process_bytes(":", 1, &rdig); ne_md5_process_bytes(sess->nonce, strlen(sess->nonce), &rdig); ne_md5_process_bytes(":", 1, &rdig); if (sess->qop != auth_qop_none) { /* Add on: * nc-value ":" unq(cnonce-value) ":" unq(qop-value) ":" */ NE_DEBUG(NE_DBG_HTTPAUTH, "Have qop directive, digesting: [%s:%s:%s]\n", nc_value, sess->cnonce, qop_value); ne_md5_process_bytes(nc_value, 8, &rdig); ne_md5_process_bytes(":", 1, &rdig); ne_md5_process_bytes(sess->cnonce, strlen(sess->cnonce), &rdig); ne_md5_process_bytes(":", 1, &rdig); /* Store a copy of this structure (see note below) */ sess->stored_rdig = rdig; ne_md5_process_bytes(qop_value, strlen(qop_value), &rdig); ne_md5_process_bytes(":", 1, &rdig); } else { /* Store a copy of this structure... we do this because the * calculation of the rspauth= field in the Auth-Info header * is the same as this digest, up to this point. */ sess->stored_rdig = rdig; } /* And finally, H(A2) */ ne_md5_process_bytes(a2_md5_ascii, 32, &rdig); ne_md5_finish_ctx(&rdig, rdig_md5); ne_md5_to_ascii(rdig_md5, rdig_md5_ascii); ret = ne_buffer_create(); ne_buffer_concat(ret, "Digest username=\"", sess->username, "\", " "realm=\"", sess->realm, "\", " "nonce=\"", sess->nonce, "\", " "uri=\"", req->uri, "\", " "response=\"", rdig_md5_ascii, "\", " "algorithm=\"", sess->alg == auth_alg_md5 ? "MD5" : "MD5-sess", "\"", NULL); if (sess->opaque != NULL) { ne_buffer_concat(ret, ", opaque=\"", sess->opaque, "\"", NULL); } if (sess->qop != auth_qop_none) { /* Add in cnonce and nc-value fields */ ne_buffer_concat(ret, ", cnonce=\"", sess->cnonce, "\", " "nc=", nc_value, ", " "qop=\"", qop_value, "\"", NULL); } ne_buffer_zappend(ret, "\r\n"); NE_DEBUG(NE_DBG_HTTPAUTH, "Digest request header is %s\n", ret->data); return ne_buffer_finish(ret); } /* Parse line of comma-separated key-value pairs. If 'ischall' == 1, * then also return a leading space-separated token, as *value == NULL. * Otherwise, if return value is 0, *key and *value will be non-NULL. * If return value is non-zero, parsing has ended. */ static int tokenize(char **hdr, char **key, char **value, int ischall) { char *pnt = *hdr; enum { BEFORE_EQ, AFTER_EQ, AFTER_EQ_QUOTED } state = BEFORE_EQ; if (**hdr == '\0') return 1; *key = NULL; do { switch (state) { case BEFORE_EQ: if (*pnt == '=') { if (*key == NULL) return -1; *pnt = '\0'; *value = pnt + 1; state = AFTER_EQ; } else if (*pnt == ' ' && ischall && *key != NULL) { *value = NULL; *pnt = '\0'; *hdr = pnt + 1; return 0; } else if (*key == NULL && strchr(" \r\n\t", *pnt) == NULL) { *key = pnt; } break; case AFTER_EQ: if (*pnt == ',') { *pnt = '\0'; *hdr = pnt + 1; return 0; } else if (*pnt == '\"') { state = AFTER_EQ_QUOTED; } break; case AFTER_EQ_QUOTED: if (*pnt == '\"') { state = AFTER_EQ; } break; } } while (*++pnt != '\0'); if (state == BEFORE_EQ && ischall && *key != NULL) { *value = NULL; } *hdr = pnt; /* End of string: */ return 0; } /* Pass this the value of the 'Authentication-Info:' header field, if * one is received. * Returns: * 0 if it gives a valid authentication for the server * non-zero otherwise (don't believe the response in this case!). */ static int verify_response(struct auth_request *req, auth_session *sess, const char *value) { char *hdr, *pnt, *key, *val; auth_qop qop = auth_qop_none; char *nextnonce = NULL, /* for the nextnonce= value */ *rspauth = NULL, /* for the rspauth= value */ *cnonce = NULL, /* for the cnonce= value */ *nc = NULL, /* for the nc= value */ *qop_value = NULL; unsigned int nonce_count; int okay; if (!req->will_handle) { /* Ignore it */ return 0; } if (sess->scheme != auth_scheme_digest) { NE_DEBUG(NE_DBG_HTTPAUTH, "Found Auth-Info header not in response " " to Digest credentials - dodgy.\n"); return -1; } pnt = hdr = ne_strdup(value); NE_DEBUG(NE_DBG_HTTPAUTH, "Auth-Info header: %s\n", value); while (tokenize(&pnt, &key, &val, 0) == 0) { val = ne_shave(val, "\""); NE_DEBUG(NE_DBG_HTTPAUTH, "Pair: [%s] = [%s]\n", key, val); if (strcasecmp(key, "qop") == 0) { qop_value = val; if (strcasecmp(val, "auth-int") == 0) { qop = auth_qop_auth_int; } else if (strcasecmp(val, "auth") == 0) { qop = auth_qop_auth; } else { qop = auth_qop_none; } } else if (strcasecmp(key, "nextnonce") == 0) { nextnonce = val; } else if (strcasecmp(key, "rspauth") == 0) { rspauth = val; } else if (strcasecmp(key, "cnonce") == 0) { cnonce = val; } else if (strcasecmp(key, "nc") == 0) { nc = val; if (sscanf(val, "%x", &nonce_count) != 1) { NE_DEBUG(NE_DBG_HTTPAUTH, "Couldn't find nonce count.\n"); } else { NE_DEBUG(NE_DBG_HTTPAUTH, "Got nonce_count: %u\n", nonce_count); } } } /* Presume the worst */ okay = -1; if ((qop != auth_qop_none) && (qop_value != NULL)) { if ((rspauth == NULL) || (cnonce == NULL) || (nc == NULL)) { NE_DEBUG(NE_DBG_HTTPAUTH, "Missing rspauth, cnonce or nc with qop.\n"); } else { /* Have got rspauth, cnonce and nc */ if (strcmp(cnonce, sess->cnonce) != 0) { NE_DEBUG(NE_DBG_HTTPAUTH, "Response cnonce doesn't match.\n"); } else if (nonce_count != sess->nonce_count) { NE_DEBUG(NE_DBG_HTTPAUTH, "Response nonce count doesn't match.\n"); } else { /* Calculate and check the response-digest value. * joe: IMO the spec is slightly ambiguous as to whether * we use the qop which WE sent, or the qop which THEY * sent... */ struct ne_md5_ctx a2; unsigned char a2_md5[16], rdig_md5[16]; char a2_md5_ascii[33], rdig_md5_ascii[33]; NE_DEBUG(NE_DBG_HTTPAUTH, "Calculating response-digest.\n"); /* First off, H(A2) again. */ ne_md5_init_ctx(&a2); ne_md5_process_bytes(":", 1, &a2); ne_md5_process_bytes(req->uri, strlen(req->uri), &a2); if (qop == auth_qop_auth_int) { unsigned char heb_md5[16]; char heb_md5_ascii[33]; /* Add on ":" H(entity-body) */ ne_md5_finish_ctx(&req->response_body, heb_md5); ne_md5_to_ascii(heb_md5, heb_md5_ascii); ne_md5_process_bytes(":", 1, &a2); ne_md5_process_bytes(heb_md5_ascii, 32, &a2); NE_DEBUG(NE_DBG_HTTPAUTH, "Digested [:%s]\n", heb_md5_ascii); } ne_md5_finish_ctx(&a2, a2_md5); ne_md5_to_ascii(a2_md5, a2_md5_ascii); /* We have the stored digest-so-far of * H(A1) ":" unq(nonce-value) * [ ":" nc-value ":" unq(cnonce-value) ] for qop * in sess->stored_rdig, to save digesting them again. * */ if (qop != auth_qop_none) { /* Add in qop-value */ NE_DEBUG(NE_DBG_HTTPAUTH, "Digesting qop-value [%s:].\n", qop_value); ne_md5_process_bytes(qop_value, strlen(qop_value), &sess->stored_rdig); ne_md5_process_bytes(":", 1, &sess->stored_rdig); } /* Digest ":" H(A2) */ ne_md5_process_bytes(a2_md5_ascii, 32, &sess->stored_rdig); /* All done */ ne_md5_finish_ctx(&sess->stored_rdig, rdig_md5); ne_md5_to_ascii(rdig_md5, rdig_md5_ascii); NE_DEBUG(NE_DBG_HTTPAUTH, "Calculated response-digest of: " "[%s]\n", rdig_md5_ascii); NE_DEBUG(NE_DBG_HTTPAUTH, "Given response-digest of: " "[%s]\n", rspauth); /* And... do they match? */ okay = (strcasecmp(rdig_md5_ascii, rspauth) == 0)?0:-1; NE_DEBUG(NE_DBG_HTTPAUTH, "Matched: %s\n", okay?"nope":"YES!"); } } } else { NE_DEBUG(NE_DBG_HTTPAUTH, "No qop directive, auth okay.\n"); okay = 0; } /* Check for a nextnonce */ if (nextnonce != NULL) { NE_DEBUG(NE_DBG_HTTPAUTH, "Found nextnonce of [%s].\n", nextnonce); if (sess->nonce != NULL) ne_free(sess->nonce); sess->nonce = ne_strdup(nextnonce); } ne_free(hdr); return okay; } /* Passed the value of a "(Proxy,WWW)-Authenticate: " header field. * Returns 0 if valid challenge was accepted; non-zero if no valid * challenge was found. */ static int auth_challenge(auth_session *sess, const char *value) { char *pnt, *key, *val, *hdr; struct auth_challenge *chall = NULL, *challenges = NULL; int success; pnt = hdr = ne_strdup(value); NE_DEBUG(NE_DBG_HTTPAUTH, "Got new auth challenge: %s\n", value); /* The header value may be made up of one or more challenges. We * split it down into attribute-value pairs, then search for * schemes in the pair keys. */ while (!tokenize(&pnt, &key, &val, 1)) { if (val == NULL) { /* We have a new challenge */ NE_DEBUG(NE_DBG_HTTPAUTH, "New challenge for scheme [%s]\n", key); chall = ne_calloc(sizeof *chall); chall->next = challenges; challenges = chall; /* Initialize the challenge parameters */ /* Which auth-scheme is it (case-insensitive matching) */ if (strcasecmp(key, "basic") == 0) { NE_DEBUG(NE_DBG_HTTPAUTH, "Basic scheme.\n"); chall->scheme = auth_scheme_basic; } else if (strcasecmp(key, "digest") == 0) { NE_DEBUG(NE_DBG_HTTPAUTH, "Digest scheme.\n"); chall->scheme = auth_scheme_digest; #ifdef HAVE_GSSAPI } else if (strcasecmp(key, "negotiate") == 0) { NE_DEBUG(NE_DBG_HTTPAUTH, "GSSAPI scheme.\n"); chall->scheme = auth_scheme_gssapi; #endif } else { NE_DEBUG(NE_DBG_HTTPAUTH, "Unknown scheme.\n"); ne_free(chall); challenges = NULL; break; } continue; } else if (chall == NULL) { /* If we haven't got an auth-scheme, and we're * haven't yet found a challenge, skip this pair. */ continue; } /* Strip quotes off value. */ val = ne_shave(val, "\"'"); NE_DEBUG(NE_DBG_HTTPAUTH, "Got pair: [%s] = [%s]\n", key, val); if (strcasecmp(key, "realm") == 0) { chall->realm = val; } else if (strcasecmp(key, "nonce") == 0) { chall->nonce = val; } else if (strcasecmp(key, "opaque") == 0) { chall->opaque = val; } else if (strcasecmp(key, "stale") == 0) { /* Truth value */ chall->stale = (strcasecmp(val, "true") == 0); } else if (strcasecmp(key, "algorithm") == 0) { if (strcasecmp(val, "md5") == 0) { chall->alg = auth_alg_md5; } else if (strcasecmp(val, "md5-sess") == 0) { chall->alg = auth_alg_md5_sess; } else { chall->alg = auth_alg_unknown; } } else if (strcasecmp(key, "qop") == 0) { /* iterate over each token in the value */ do { const char *tok = ne_shave(ne_token(&val, ','), " \t"); if (strcasecmp(tok, "auth") == 0) { chall->qop_auth = 1; } else if (strcasecmp(tok, "auth-int") == 0 ) { chall->qop_auth_int = 1; } } while (val); chall->got_qop = chall->qop_auth || chall->qop_auth_int; } } NE_DEBUG(NE_DBG_HTTPAUTH, "Finished parsing parameters.\n"); /* Did we find any challenges */ if (challenges == NULL) { ne_free(hdr); return -1; } success = 0; #ifdef HAVE_GSSAPI if (strcmp(ne_get_scheme(sess->sess), "https") == 0) { NE_DEBUG(NE_DBG_HTTPAUTH, "Looking for GSSAPI.\n"); /* Try a GSSAPI challenge */ for (chall = challenges; chall != NULL; chall = chall->next) { if (chall->scheme == auth_scheme_gssapi) { if (!gssapi_challenge(sess, chall)) { success = 1; break; } } } } #endif /* Try a digest challenge */ if (!success) { NE_DEBUG(NE_DBG_HTTPAUTH, "Looking for Digest challenges.\n"); for (chall = challenges; chall != NULL; chall = chall->next) { if (chall->scheme == auth_scheme_digest) { if (!digest_challenge(sess, chall)) { success = 1; break; } } } } if (!success) { NE_DEBUG(NE_DBG_HTTPAUTH, "No good Digest challenges, looking for Basic.\n"); for (chall = challenges; chall != NULL; chall = chall->next) { if (chall->scheme == auth_scheme_basic) { if (!basic_challenge(sess, chall)) { success = 1; break; } } } if (!success) { /* No good challenges - record this in the session state */ NE_DEBUG(NE_DBG_HTTPAUTH, "Did not understand any challenges.\n"); } } /* Remember whether we can now supply the auth details */ sess->can_handle = success; while (challenges != NULL) { chall = challenges->next; ne_free(challenges); challenges = chall; } ne_free(hdr); return !success; } /* The body reader callback. */ static void auth_body_reader(void *cookie, const char *block, size_t length) { struct ne_md5_ctx *ctx = cookie; NE_DEBUG(NE_DBG_HTTPAUTH, "Digesting %" NE_FMT_SIZE_T " bytes of response body.\n", length); ne_md5_process_bytes(block, length, ctx); } static void ah_create(ne_request *req, void *session, const char *method, const char *uri) { auth_session *sess = session; int is_connect = strcmp(method, "CONNECT") == 0; if (sess->context == AUTH_ANY || (is_connect && sess->context == AUTH_CONNECT) || (!is_connect && sess->context == AUTH_NOTCONNECT)) { struct auth_request *areq = ne_calloc(sizeof *areq); NE_DEBUG(NE_DBG_HTTPAUTH, "ah_create, for %s\n", sess->spec->resp_hdr); areq->method = method; areq->uri = uri; areq->request = req; ne_add_response_header_handler(req, sess->spec->resp_hdr, ne_duplicate_header, &areq->auth_hdr); ne_add_response_header_handler(req, sess->spec->resp_info_hdr, ne_duplicate_header, &areq->auth_info_hdr); sess->attempt = 0; ne_set_request_private(req, sess->spec->id, areq); } } static void ah_pre_send(ne_request *r, void *cookie, ne_buffer *request) { auth_session *sess = cookie; struct auth_request *req = ne_get_request_private(r, sess->spec->id); if (!sess->can_handle || !req) { NE_DEBUG(NE_DBG_HTTPAUTH, "Not handling session.\n"); } else { char *value; NE_DEBUG(NE_DBG_HTTPAUTH, "Handling."); req->will_handle = 1; if (sess->qop == auth_qop_auth_int) { /* Digest mode / qop=auth-int: take an MD5 digest of the * response body. */ ne_md5_init_ctx(&req->response_body); ne_add_response_body_reader(req->request, ne_accept_always, auth_body_reader, &req->response_body); } switch(sess->scheme) { case auth_scheme_basic: value = request_basic(sess); break; case auth_scheme_digest: value = request_digest(sess, req); break; #ifdef HAVE_GSSAPI case auth_scheme_gssapi: value = request_gssapi(sess); break; #endif default: value = NULL; break; } if (value != NULL) { ne_buffer_concat(request, sess->spec->req_hdr, ": ", value, NULL); ne_free(value); } } } #define SAFELY(x) ((x) != NULL?(x):"null") static int ah_post_send(ne_request *req, void *cookie, const ne_status *status) { auth_session *sess = cookie; struct auth_request *areq = ne_get_request_private(req, sess->spec->id); int ret = NE_OK; if (!areq) return NE_OK; NE_DEBUG(NE_DBG_HTTPAUTH, "ah_post_send (#%d), code is %d (want %d), %s is %s\n", sess->attempt, status->code, sess->spec->status_code, sess->spec->resp_hdr, SAFELY(areq->auth_hdr)); if (areq->auth_info_hdr != NULL && verify_response(areq, sess, areq->auth_info_hdr)) { NE_DEBUG(NE_DBG_HTTPAUTH, "Response authentication invalid.\n"); ne_set_error(sess->sess, "%s", _(sess->spec->fail_msg)); ret = NE_ERROR; } else if ((status->code == sess->spec->status_code || (status->code == 401 && sess->context == AUTH_CONNECT)) && areq->auth_hdr != NULL) { /* note above: allow a 401 in response to a CONNECT request * from a proxy since some buggy proxies send that. */ NE_DEBUG(NE_DBG_HTTPAUTH, "Got challenge with code %d.\n", status->code); if (!auth_challenge(sess, areq->auth_hdr)) { ret = NE_RETRY; } else { clean_session(sess); ret = sess->spec->fail_code; } } NE_FREE(areq->auth_info_hdr); NE_FREE(areq->auth_hdr); return ret; } static void ah_destroy(ne_request *req, void *session) { auth_session *sess = session; struct auth_request *areq = ne_get_request_private(req, sess->spec->id); if (areq) ne_free(areq); } static void free_auth(void *cookie) { auth_session *sess = cookie; clean_session(sess); ne_free(sess); } static void auth_register(ne_session *sess, int isproxy, const struct auth_class *ahc, const char *id, ne_auth_creds creds, void *userdata) { auth_session *ahs = ne_calloc(sizeof *ahs); ahs->creds = creds; ahs->userdata = userdata; ahs->sess = sess; ahs->spec = ahc; if (strcmp(ne_get_scheme(sess), "https") == 0) ahs->context = isproxy ? AUTH_CONNECT : AUTH_NOTCONNECT; else ahs->context = AUTH_ANY; /* Register hooks */ ne_hook_create_request(sess, ah_create, ahs); ne_hook_pre_send(sess, ah_pre_send, ahs); ne_hook_post_send(sess, ah_post_send, ahs); ne_hook_destroy_request(sess, ah_destroy, ahs); ne_hook_destroy_session(sess, free_auth, ahs); ne_set_session_private(sess, id, ahs); } void ne_set_server_auth(ne_session *sess, ne_auth_creds creds, void *userdata) { auth_register(sess, 0, &ah_server_class, HOOK_SERVER_ID, creds, userdata); } void ne_set_proxy_auth(ne_session *sess, ne_auth_creds creds, void *userdata) { auth_register(sess, 1, &ah_proxy_class, HOOK_PROXY_ID, creds, userdata); } void ne_forget_auth(ne_session *sess) { auth_session *as; if ((as = ne_get_session_private(sess, HOOK_SERVER_ID)) != NULL) clean_session(as); if ((as = ne_get_session_private(sess, HOOK_PROXY_ID)) != NULL) clean_session(as); } tla-1.3.5+dfsg/src/libneon/src/ChangeLog0000644000175000017500000052357110457621776016547 0ustar useruserMon Jul 5 10:56:19 2004 Joe Orton * ne_compress.c (struct ne_decompress_s): Add acceptor field. (gz_acceptor): New function. (ne_decompress_reader): Fix to pass the user-supplied userdata pointer to the user-supplied acceptor callback, via gz_acceptor. Mon Jul 5 10:52:40 2004 Joe Orton * ne_compress.c (do_inflate): Don't invoke the reader callback if no bytes where produced by inflate(). (process_footer): Call the reader callback with size=0 to indicate end-of-response for a good checksum match. Mon Jul 5 10:42:14 2004 Joe Orton * ne_compress.c (gz_destroy, gz_pre_send): New functions. (ne_decompress_reader): Register pre-send and destroy hooks, to initialize the compression context before each request attempt. (Justin Erenkrantz). * ne_private.h, ne_request.c (ne_kill_pre_send): New function. Sat Jul 3 14:33:56 2004 Joe Orton * ne_auth.c (auth_challenge): Fix to set got_qop in challenge correctly (Hideaki Takahashi). Sun May 2 21:14:14 2004 Joe Orton Fix buffer overflow in RFC1036 date parser, CVE CAN-2004-0389. * ne_dates.c (RFC1036_FORMAT): Specify maximum field with for day name. (ne_rfc1123_parse, ne_rfc1036_parse, ne_asctime_parse): Make thread-safe; remove static buffers. Thu Mar 11 23:38:01 2004 Joe Orton * ne_openssl.c (provide_client_cert): Avoid malloc(0) when server sends no CA names in CertificateRequest. (ne_ssl_cert_write): Be paranoid and clear the OpenSSL error stack on write failures. Sun May 2 16:59:39 2004 Joe Orton * ne_dates.c [RFC1123_TEST] (main): Remove embedded test cases. Fri Apr 16 11:44:34 2004 Joe Orton * Makefile.in (LIBS): Include NEON_LTLIBS. Wed Apr 14 10:39:53 2004 Joe Orton Fix format string vulnerabilities, CVE CAN-2004-0179: * ne_207.c (ne_simple_request): Avoid format string vulnerabilities. * ne_xml.c (ne_xml_set_error): Likewise. * ne_props.c (propfind): Likewise. * ne_locks.c (ne_lock, ne_lock_refresh): Likewise. Wed Apr 14 10:33:46 2004 Joe Orton * ne_auth.c (ah_post_send): Avoid false positives from gcc -Wformat-security. Tue Apr 13 20:51:41 2004 Joe Orton * ne_auth.c: Conditionally include gssapi_generic.h. Thu Apr 8 13:40:03 2004 Joe Orton * ne_props.h: Don't use an anonymous enum for the proppatch operation type, as some C++ compilers don't like it. Sun Mar 28 02:59:58 2004 Joe Orton * ne_auth.c (get_cnonce): Only use RAND_pseudo_bytes() if the PRNG is seeded. Fri Mar 26 12:16:15 2004 Joe Orton * ne_socket.c (init_ssl): Just initialize the SSL library; delay seeding PRNG until really necessary (performance fix). (seed_ssl_prng): Split from init_ssl. (ne_sock_connect_ssl): Call seed_ssl_prng(). (ne_sock_init): Adjust since init_ssl() can't fail. Fri Mar 26 12:01:38 2004 Joe Orton * ne_utils.c: Include zlib.h before ne_*.h to fix issues on platforms where zconf.h does "#define const". Fri Mar 26 11:55:06 2004 Joe Orton * ne_auth.c (get_gss_name, request_gssapi, gssapi_challenge, auth_challenge): Implement the Negotiate auth scheme rather than the obsolete GSS-Negotiate, and fix memory leaks. Only accept Negotiate challenges over SSL. Sun Feb 15 13:37:03 2004 Joe Orton * ne_ssl.h: Define that ne_ssl_readable_dname returns UTF-8 encoded strings. * ne_openssl.c (ne_ssl_readable_dname): Convert dname strings to UTF-8, or use "???". Sat Jan 24 16:49:30 2004 Joe Orton * ne_auth.c (basic_challenge): Cast first parameter to ne_base64 to unsigned char * to fix warnings with some compilers. Thu Nov 13 20:38:28 2003 Joe Orton * ne_request.c (ne_begin_request): Presume a 205 response has no message-body too; RFC2616 compliance fix. Thu Nov 13 20:31:07 2003 Joe Orton * ne_auth.c (ah_post_send): Treat a 401 response to a CONNECT request as a valid proxy auth challenge, to work around buggy proxies. Wed Oct 22 22:19:19 2003 Joe Orton * ne_request.c (read_response_block): Treat an EOF without clean SSL closure as a valid request body delimiter in any case. Wed Oct 22 21:44:48 2003 Joe Orton * ne_defs.h (ne_attribute): New macro. * ne_request.h, ne_session.h, ne_utils.h: Use ne_attribute instead of littering #ifdef __GNUC__ and __attribute__ everywhere. Tue Oct 21 20:03:47 2003 Joe Orton Fix various strict signedness bugs: * ne_auth.c (auth_session): Make nonce_count argument unsigned. (get_cnonce): Use unsigned data buffer. (get_gss_name, gssapi_challenge): Use unsigned integers for status variables. (request_digest): Print nonce count as unsigned. (verify_response): Make nonce_count unsigned. Tue Oct 7 20:52:06 2003 Joe Orton When using SSL via a proxy, don't leak server auth credentials to the proxy, and vice versa. * ne_auth.c (auth_session): Add context field. (ah_create): Ignore challenges in a bad context. (ah_pre_send, ah_destroy): Check that the request-private cookie is not NULL. (auth_register): Take an isproxy flag; set context field appropriately in session structure. (ne_set_server_auth, ne_set_proxy_auth): Adjust accordingly. Tue Oct 7 19:58:52 2003 Joe Orton * ne_openssl.c (ne_negotiate_ssl): If the returned cert chain was NULL, try and create one from the peer certificate alone (fix for use of SSLv2 connections). Mon Sep 29 21:57:40 2003 Joe Orton * ne_auth.c [WIN32]: Include windows.h to fix non-SSL build. Thu Sep 25 20:05:18 2003 Joe Orton * ne_xml.c (ne_xml_create): Specify an initial error string. Sun Sep 21 23:00:10 2003 Joe Orton * ne_cookies.c (set_cookie_hdl): Strip whitespace around cookie name and value. Sun Sep 14 10:50:01 2003 Joe Orton * ne_socket.c (ne_addr_resolve): Use result of autoconf test for working AI_ADDRCONFIG support. Sat Sep 6 12:05:00 2003 Joe Orton * ne_openssl.c (check_identity): Take an optional server address argument; check identity against IPaddress extension too if given. (check_certificate): Optionally pass server address to check_identity. (populate_cert): Adjust accordingly. Thu Sep 4 21:41:38 2003 Joe Orton * ne_socket.c (ne_sock_init): Succeed even if PRNG was not seeded. Thu Sep 4 21:33:34 2003 Joe Orton * ne_session.c (ne_set_useragent): Build and store the entire User-Agent header field in sess->user_agent. * ne_request.c (add_fixed_headers): Adjust accordingly; avoid unnecessary calls to ne_buffer_*. Thu Sep 4 21:27:34 2003 Joe Orton * ne_socket.c: Include netinet/tcp.h. (ne_sock_connect): Disable the Nagle algorithm; thanks to Jim Whitehead and Teng Xu for the analysis. Thu Sep 4 11:24:04 2003 Joe Orton * ne_defs.h: Define ssize_t here for Win32. * ne_socket.h: Don't define ssize_t here. Tue Sep 2 20:20:16 2003 Joe Orton * ne_auth.c (auth_challenge): Update to use ne_token not split_string, patch by Tom Lee . Wed Jul 30 21:54:38 2003 Joe Orton * ne_cookies.c (set_cookie_hdl): Fix NULL pointer dereference; thanks to Markus Mueller . Fri Jul 25 11:05:52 2003 Joe Orton * ne_request.c (do_connect): On failure to connect, set error string and call ne_sock_close directly rather than using aborted(); fix leak of socket structure. Wed Jul 23 23:20:42 2003 Joe Orton Fix SEGV if inflateInit2 fails with Z_MEM_ERROR etc. * ne_compress.c (set_zlib_error): New function. (do_inflate, gz_reader): Use it. Wed Jul 23 22:50:50 2003 Joe Orton Add support for GSS-Negotiate; patch from Risko Gergely and Burjan Gabor: * ne_auth.c [HAVE_GSSAPI]: Include gssapi.h. (auth_scheme): Add auth_scheme_gssapi. (auth_session): Add gssapi_token. (clean_session): Free gssapi_token. (request_gssapi, get_gss_name, gssapi_challenge): New functions. (tokenize): Handle challenge with single token. (auth_challenge): Accept and process a GSS-Negotiate challenge. (ah_pre_send): Send GSS-Negotiate handshake. Wed Jul 23 22:46:28 2003 Joe Orton * ne_207.c (ne_207_set_response_handlers, ne_207_set_propstat_handlers): Fix to match declarations (thanks to Diego Tártara). Fri Jun 27 20:30:45 2003 Joe Orton * ne_openssl.c [OPENSSL_VERSION_NUMBER < 0x0090700fL]: Fix build against OpenSSL < 0.9.7. Sun Jun 22 23:07:45 2003 Joe Orton * ne_session.c (ne_session_destroy): Replace unnecessary use of NE_FREE with ne_free. (set_hostinfo): Don't free hostport/hostinfo here. (ne_session_proxy): Free existing proxy hostname here if necessary. Sat Jun 21 12:58:25 2003 Joe Orton * ne_request.c (ne_begin_request): Set or clear is_http11 flag for each request. Wed Jun 18 20:54:44 2003 Joe Orton * ne_socket.c: Add AI_ADDRCONFIG support; [USE_CHECK_IPV6]: Define only if __linux__. (init_ipv6) [USE_CHECK_IPV6]: New conditional. (ne_addr_resolve) [USE_ADDRCONFIG]: Use AI_ADDRCONFIG. Wed Jun 18 20:03:13 2003 Joe Orton * ne_socket.c (ne_sock_create): New function (renamed from create_sock). (ne_sock_connect): Take an ne_socket *, return int. (ne_sock_accept): Likewise. (ne_sock_close): Only call ne_close if fd is non-negative. * ne_request.c (aborted): Handle NE_SOCK_* errors specially. (do_connect): Adapt for ne_sock_create/connect interface. Set sess->connected here on success. (open_connection): Don't set sess->connected here. Sun Jun 15 12:14:22 2003 Joe Orton * ne_ssl.h (ne_ssl_cert_digest): Pass digest as a pointer rather than an array. Sun Jun 15 11:00:09 2003 Joe Orton * ne_stubssl.c (ne_ssl_cert_cmp): Add stub. Wed May 28 21:37:27 2003 Joe Orton * ne_openssl.c (ne_ssl_context_create): Enable workarounds in OpenSSL for better interop with buggy SSL servers. Fri May 23 23:13:30 2003 Joe Orton * ne_stubssl.c (ne_ssl_set_clicert): Add stub. Sat May 10 17:05:26 2003 Joe Orton * ne_xml.c: Rename struct ne_xml_handler to struct handler. Thu May 8 20:55:46 2003 Joe Orton * ne_openssl.c (ne_ssl_clicert_read): Pass "b" to fopen. Tue May 6 22:08:08 2003 Joe Orton * ne_openssl.c (check_certificate): Re-order verify failure handling to allow caller to set a custom session error string. Tue May 6 20:21:27 2003 Joe Orton * ne_md5.c (md5_stream): Restore. Sat Apr 26 19:21:03 2003 Joe Orton * ne_request.c (te_hdr_handler): Treat presence of any T-E response header as implying the response is chunked, regardless of value. Sat Apr 26 18:11:24 2003 Joe Orton * ne_xml.c: Rename struct ne_xml_nspace to struct namespace. Wed Apr 23 22:19:29 2003 Joe Orton * ne_openssl.c (ne_ssl_cert_export): Don't bother checking for i2d_X509() failure; no OpenSSL code ever checks, so everyone's doomed if it really can fail. Wed Apr 23 22:01:23 2003 Joe Orton * ne_openssl.c (ne_ssl_cert_import, ne_ssl_cert_export, ne_ssl_cert_write): Clear OpenSSL error stack on errors. Wed Apr 23 18:23:53 2003 Joe Orton * ne_stubssl.c (ne_ssl_cert_write, ne_ssl_cert_import, ne_ssl_cert_export): Add stubs. Wed Apr 23 14:05:32 2003 Joe Orton * ne_openssl.c (ne_ssl_cert_write): New function. Tue Apr 22 23:21:22 2003 Joe Orton * ne_string.c (ne_unbase64): Optimise out some redundant branches. Tue Apr 22 20:24:44 2003 Joe Orton * ne_openssl.c (ne_ssl_cert_export, ne_ssl_cert_import, ne_ssl_cert_cmp): New functions. Tue Apr 22 18:31:55 2003 Joe Orton * ne_string.c (ne_unbase64): New function. Tue Apr 22 15:53:41 2003 Joe Orton * ne_string.c (ne_base64): Fix encoding binary data; take unsigned argument. Tue Apr 22 13:07:48 2003 Joe Orton * ne_stubssl.c (ne_ssl_cert_validity): Add stub. Tue Apr 22 09:22:26 2003 Joe Orton * ne_openssl.c (ne_ssl_cert_validity): New function. (asn1time_to_string): Format into a fixed-size buffer. Tue Apr 22 08:38:30 2003 Joe Orton * ne_locks.c (ne_lock_discover, ne_lock): Don't leak the cdata buffer. * ne_props.c (ne_propfind_destroy): Don't leak the value buffer. Mon Apr 21 23:52:25 2003 Joe Orton * ne_xml.c (ne_xml_destroy): Free root element. Mon Apr 21 23:46:17 2003 Joe Orton * ne_openssl.c (dup_client_cert): Set decrypted state; dup the friendly name. (ne_ssl_clicert_free): Free friendly name. Mon Apr 21 19:44:55 2003 Joe Orton * ne_md5.h (ne_md5_buffer, ne_md5_stream): Remove unused functions. Mon Apr 21 18:17:14 2003 Joe Orton * ne_locks.c, ne_207.c: s/NE_ELM_/ELM_/ since no element ids are exported. Mon Apr 21 16:38:14 2003 Joe Orton Redesign the XML interface: have startelm callback map {nspace, name} onto a state integer or decline. Remove "valid"/"invalid"; don't abort the parse if no handler accepts an element. Push cdata accumulation down into the caller; drop collect mode, stripws mode. * ne_xml.h (ne_xml_elmid, struct ne_xml_elm): Removed. (ne_xml_startelm_cb): Return a state/acceptance integer, take a state integer, nspace, name and atts. (ne_xml_endelm_cb, ne_xml_cdata_cb): Take a state integer. (ne_xml_push_mixed_handler): Removed. (ne_xml_push_handler): Removed element list argument. (struct ne_xml_idmap, ne_xml_mapid): New interface. * ne_xml.c (struct element): Replaces ne_xml_state. Add name, nspace, state fields. (friendly_name, find_handler, parse_element, ne_xml_push_mixed_handler, push_handler): Removed functions. (declare_nspaces, expand_qname): Factored out from find_handler and parse_element. (start_element): Use expand_qname, declare_nspaces. Find appropriate handler here. Guarantee not to pass a NULL atts array to the start-element callback. Drop collect mode. (end_element): Drop collect mode (ne_xml_push_handler): Fold push_handler back in. (ne_xml_mapid): New function. * ne_207.h (NE_ELM_*): Don't export element id. (NE_207_STATE_PROP, NE_207_STATE_TOP): Export state integers. * ne_207.c (struct ne_207_parser_s): Add cdata field. (map207): Replace element list with idmap array. (can_handle): New function, replacing check_context logic. (start_element): Determine new state integer; only accept the element in valid states. Clear cdata. (end_element): Use state rather than element id. Do nothing for end of 'response' element if element is incomplete. (ne_207_create): Create cdata buffer. (ne_207_destroy): Destroy cdata buffer. (ne_207_ignore_unknown): Removed function. (ne_simple_request): Don't call ne_207_ignore_unknown. * ne_props.h (NE_PROPS_STATE_TOP): Define state. * ne_props.c (struct ne_propfind_handler_s): Add value and depth fields. (ELM_flatprop): Define state. (flat_elms): Removed array. (chardata): Append to value field when in ELM_flatprop state. (startelm): Decline everything other than elements within the 'prop' state. Collect flatprop contents. (endelm): Collect flatprop contents. * ne_locks.c (struct discover_ctx, struct lock_ctx): Store cdata. (element_map): Replace element list with idmap array. (can_accept): Replaces check_context callback. (ld_startelm, lk_cdata, ld_cdata): New functions. Mon Apr 14 00:04:20 2003 Joe Orton * ne_207.h (ne_207_start_response, ne_207_end_response, ne_207_start_propstat, ne_207_end_propstat): Use ANSI-style function pointers in typedefs. * ne_207.c (struct ne_207_parser_s): Updated accordingly. Mon Apr 14 00:02:10 2003 Joe Orton * ne_request.c (read_response_block): Better error messages for invalid chunks, don't use strncmp for a two-character comparison. Mon Apr 7 22:26:50 2003 Joe Orton * ne_stubssl.c (ne_ssl_cert_identity): New function. Mon Apr 7 22:16:16 2003 Joe Orton * ne_openssl.c (struct ne_ssl_certificate_s): Add identity field. (check_identity): Add optional identity argument. (populate_cert): Retrieve cert identity using check_identity. (check_certificate): Pass extra NULL to check_identity. (ne_ssl_cert_identity): New function. (ne_ssl_cert_free): Free the identity field. Mon Apr 7 21:29:54 2003 Joe Orton * ne_openssl.c (check_identity): Take a string hostname rather than a session object. (check_certificate): Adjust accordingly. Sun Apr 6 21:26:05 2003 Joe Orton * ne_string.h (NE_HEX2ASC): Cast result to char to avoid warnings with some compilers. Sun Apr 6 20:11:42 2003 Joe Orton * ne_openssl.c (ne_ssl_readable_dname): Include commonName or emailAddress in returned string if either is the only attribute. Sun Mar 30 10:54:20 2003 Joe Orton Split decryption of client certs into two steps * ne_openssl.c (ne_ssl_clicert_encrypted, ne_ssl_clicert_decrypt): New functions. (ne_ssl_client_cert_s): Add p12 and decrypted fields. (find_friendly_name): New function. (get_friendly_name): Removed function. (ne_ssl_clicert_read): Drop password callback; on decrypt failure, extract friendly name and set decrypted state of clicert. Sun Mar 30 10:54:01 2003 Joe Orton * ne_stubssl.c (ne_ssl_clicert_encrypted, ne_ssl_clicert_decrypt): New stubs. (ne_ssl_clicert_read): Adjusted for API change. Sat Mar 29 14:23:37 2003 Joe Orton * ne_openssl.c (ne_ssl_dname_cmp): New function. * ne_stubssl.c (ne_ssl_dname_cmp): New function. Sat Mar 29 13:52:47 2003 Joe Orton * ne_openssl.c (struct ne_ssl_client_cert_s): Add 'friendly_name' field. (get_friendly_name, ne_ssl_clicert_name): New functions. (ne_ssl_clicert_read): Store the cert's friendly name. * ne_stubssl.c (ne_ssl_clicert_name): New function. Sat Mar 29 13:16:14 2003 Joe Orton * ne_openssl.c (ne_ssl_clicert_owner): New function. Fri Mar 28 22:12:57 2003 Joe Orton * ne_stubssl.c (ne_ssl_cert_digest): New function. * ne_openssl.c (ne_ssl_cert_digest): New function. Wed Mar 26 20:41:57 2003 Joe Orton * ne_session.c (ne_ssl_trust_cert) [NEON_SSL]: Only build when SSL support is present. Wed Mar 26 20:01:00 2003 Joe Orton Begin abstraction of SSL layer to better isolate SSL-library-specific code, and to improve certificate handling interface. Drop support for PEM-encoded client certificates. * ne_session.h (ne_ssl_trust_cert): Replaces ne_ssl_load_ca, in conjunction with ne_ssl_load_cert. (ne_ssl_trust_default_ca): Replaces ne_ssl_load_default_ca. (ne_ssl_keypw_prompt): Removed function, no longer needed. (ne_ssl_set_clicert): Replaces ne_ssl_load_pkcs12, in conjunction with ne_ssl_clicert_read. (ne_ssl_provide_clicert): Replaces ne_ssl_provide_ccert, callback type changed. * ne_openssl.c: New file; much code moved from ne_session.c. * ne_privssl.h: New file, private interface between ne_socket.c and ne_openssl.c. * ne_ssl.h: New file. * ne_private.h (struct ne_session_s): Store pointers to ne_ssl_client_cert etc opaque objects, not OpenSSL structures. * ne_session.c: Most of ne_ssl_* moved to ne_openssl.c. (ne_session_create, ne_session_destroy): Use ne_ssl_cert_* etc to manage cert objects. * ne_socket.c (struct ne_socket_s): Replace SSL *, SSL_CTX * pointers with an ne_ssl_socket * pointer. (readable_ossl, error_ossl, read_ossl, write_ossl, ne_sock_close): Compensate for above change. (ne_sock_use_ssl): Removed function. (ne_sock_switch_ssl): Pass in SSL * as void for time being. (ne_sock_connect_ssl): Renamed and cleaned up version of ne_sock_use_ssl_os. (ne_sock_sslsock): New function. * Makefile.in: Add deps for ne_openssl.c. Sun Mar 23 13:02:58 2003 Joe Orton * ne_session.c (ne_set_useragent): Use ne_malloc. Sat Mar 22 21:06:45 2003 Joe Orton * ne_socket.c (raw_connect): Fill in sin6_family or sin_family since AIX 4.3 fails to do so. Wed Mar 19 20:44:11 2003 Joe Orton * ne_session.c [NEON_SSL] (free_client_cert): Build conditional on NEON_SSL. Mon Mar 17 20:33:32 2003 Joe Orton * ne_socket.c: Include netdb.h conditional on HAVE_NETDB_H. (fix build for older versions of CygWin). Sun Mar 16 23:30:20 2003 Joe Orton * ne_session.c (check_identity): Fix leak of subject alt. name structures. Sun Mar 16 19:21:22 2003 Joe Orton * ne_session.c (free_client_cert): New function. (ne_session_destroy, ne_ssl_load_pem, ne_ssl_load_pkcs12): Call it; prevent memory leak if ne_ssl_load_{pem,pkcs12} are called >1 per session. Sun Mar 16 18:00:34 2003 Joe Orton * ne_session.c (provide_client_cert): Free peer certificate after use. (ne_session_destroy): Free client cert and key if present. Sun Mar 16 14:23:05 2003 Joe Orton * ne_xml.c [HAVE_EXPAT]: Include xmlparse.h for bundled expat build. * ne_utils.c: Only include expat.h if HAVE_XMLPARSE_H is not defined. Wed Mar 12 15:04:13 2003 Joe Orton * ne_redirect.c (struct redirect): Add 'valid' field. (post_send): Set and clear 'valid' to keep track of whether stored URI is valid. (ne_redirect_location): Return NULL if stored URI is not valid. Wed Mar 12 14:52:49 2003 Joe Orton * ne_uri.c (ne_uri_free): Zero-initialize structure after free'ing. Tue Mar 11 22:01:11 2003 Joe Orton * ne_redirect.c (ne_redirect_location): Return NULL if no redirect session is registered, rather than SEGV; Ralf Mattes . Sun Mar 9 16:33:24 2003 Joe Orton Fix a memory leak if an XML parse error occurs during a PROPFIND response: * ne_props.c (ne_propfind_current_private): Return NULL if no propset is being processed. (free_propset): Free propset href here. (end_response): Don't free propset href here. Set current field of handler to NULL after free'ing propset. (ne_propfind_destroy): Free current propset if one was being processed. Sun Mar 9 11:53:58 2003 Joe Orton * ne_207.c (ne_207_destroy): Fix possible leak of reason_phrase string. Sun Mar 9 11:01:15 2003 Joe Orton * ne_utils.c (ne_parse_statusline): Use ne_strclean. * ne_session.c (ne_get_error): Use ne_strclean. Sun Mar 9 10:53:52 2003 Joe Orton * ne_xml.c: Remove broken "UTF-8 decoding" support used for libxml 1.x. Sun Mar 9 09:55:26 2003 Joe Orton * ne_xml.c: Drop support for expat < 1.95.0 and libxml 1.x. * ne_utils.c (version_string): Include expat version string. Sun Mar 9 09:54:00 2003 Joe Orton * ne_socket.c: Don't declare h_errno on Win32 either. Sun Mar 9 08:49:40 2003 Joe Orton * ne_string.c (do_concat) [HAVE_STPCPY]: Use stpcpy rather than strlen/memcpy, when available. Mon Mar 3 22:17:04 2003 Joe Orton * ne_socket.c [!USE_GETADDRINFO && !HAVE_DECL_H_ERRNO): Declare h_errno (fix build on SCO OpenServer 5.0). Sat Mar 1 21:22:19 2003 Joe Orton * ne_redirect.c (free_redirect): Fix once-per-session memory leak. Sat Mar 1 20:23:47 2003 Joe Orton Add implemention of simple memory leak tracking, for testing purposes. * ne_alloc.c [NEON_MEMLEAK] (tracking_malloc, ne_free_ml, ne_malloc_ml, ne_calloc_ml, ne_realloc_ml, ne_strdup_ml, ne_strndup_ml, ne_memleak_dump): New functions. * memleak.h: New header. Sat Mar 1 13:44:26 2003 Joe Orton First step towards automated memory leak tests. * ne_alloc.c (ne_free): New function. * All files: replace use of free() with ne_free(). Sat Mar 1 09:48:39 2003 Joe Orton * ne_uri.c (ne_path_unescape): Fix memory leak on invalid URI. Sat Mar 1 08:03:18 2003 Joe Orton * ne_string.c (ne_strclean): New function. Wed Feb 26 21:45:12 2003 Joe Orton * ne_request.c (ne_begin_request, proxy_tunnel, open_connection) [NEON_SSL] Don't build CONNECT tunnel support code if SSL is not supported. Wed Feb 26 21:44:18 2003 Joe Orton * ne_utils.c (ne_debug_init): Allow ne_debug_init(NULL, 0) to turn off debugging. Fix to produce debug output if the any of the specified "channels" are active, not all. (also fixing NE_DBG_FLUSH support). Tue Feb 25 23:12:31 2003 Joe Orton * ne_compress.c (process_footer): Mention number of extra bytes in error message for oversized footer. Sun Feb 23 21:19:20 2003 Joe Orton * ne_auth.c (verify_response): Fix to parse nonce count as hex string rather than decimal; fix verification of >9 responses. Thu Feb 13 20:35:45 2003 Joe Orton * ne_session.c (ne_set_useragent): Fix to append "neon/x.y.z" to application-supplied token rather prepend. Thu Feb 13 09:06:22 2003 Joe Orton * ne_request.c (open_connection): Fix for CONNECT tunnelling (regression since 0.23.x), thanks to Nathan Hand . Mon Feb 3 22:10:54 2003 Joe Orton Implement Daniel Stenberg's trick to avoid the slow AF_UNSPEC lookups on Linux: * ne_socket.c (init_ipv6, ipv6_disabled): New function and global. (ne_sock_init): Call init_ipv6. (ne_addr_resolve) [USE_GETADDRINFO]: Pass AF_INET in hints if ipv6_disabled is set. Mon Feb 3 20:55:47 2003 Joe Orton * ne_socket.c [__hpux && USE_GETADDRINFO]: Undefine USE_GETADDRINFO to work around broken implementation in HP-UX 11.11. Mon Jan 27 21:39:31 2003 Joe Orton * ne_socket.c (write_raw): Fix for handling EINTR during write(), from Sergey N Ushakov. Thu Jan 16 21:59:03 2003 Joe Orton Allow _init after _finish to succeed: Sergey N Ushakov. * ne_socket.c (init_result): New global variable. (ne_sock_init): Use init_result global rather than result. (ne_sock_finish): Clear init_result. Fri Dec 27 17:03:17 2002 Joe Orton * ne_request.c (build_request): Remove redundant call to ne_buffer_clear. Fri Dec 27 14:38:08 2002 Joe Orton * ne_request.c (ne_request_create): strdup the method string. (ne_request_destroy): free the method. Mon Dec 23 17:04:32 2002 Joe Orton * ne_socket.c (ne_write, ne_read, ne_close, ne_errno): Renamed macros from NEON_WRITE, NEON_READ, NEON_CLOSE, NEON_ERRNO. All callers changed. Mon Dec 23 16:58:43 2002 Joe Orton Add proper Win32 socket error handling, merged efforts of Johan Lindh and Sergey N Ushakov : * ne_socket.c (ne_errno, NE_ISINTR, NE_ISRESET, NE_ISCLOSED): New macros. [WIN32] (print_error): New function. (set_strerror) [WIN32]: Use print_error. (readable_raw, read_raw, write_raw): Use new error handling macros. (ne_addr_resolve) [WIN32]: Use WSAGetLastError() rather than h_errno. (ne_addr_error) [WIN32]: Use print_error. Tue Dec 10 21:41:26 2002 Joe Orton * ne_socket.c (ne_iaddr_print): Renamed from ne_addr_print for consistency with other ne_iaddr_ functions. Sun Dec 8 20:08:31 2002 Joe Orton * ne_auth.c (get_cnonce): Use GetCurrentThreadId() on Win32. Sun Nov 24 18:45:32 2002 Joe Orton * ne_auth.c: Remove qop_values and algorithm_names arrays. (request_digest): Inlined qop, algorithm name lookups accordingly. Sun Nov 24 16:45:39 2002 Joe Orton * ne_auth.h: Renamed ne_request_auth typedef to ne_auth_creds. * ne_auth.c (auth_session): Renamed reqcreds, recreds_ud fields to creds, userdata. (auth_register, ne_set_proxy_auth, ne_set_server_auth): Update for ne_request_auth rename. Fri Nov 22 17:39:35 2002 Joe Orton * ne_auth.c (auth_challenge): Fix support for RFC2617-style digest auth; notice the qop= parameter in challenge. Fix leak of parsed qop array. Fri Nov 22 17:08:01 2002 Joe Orton * ne_auth.c (get_cnonce): Rewrite to use either pseudo-random data from the SSL library (if available), or really-not-random data from gettimeofday/getpid otherwise. Sun Nov 17 22:13:49 2002 Joe Orton * ne_socket.c (ne_addr_print) [USE_GETADDRINFO]: Use the SACAST() macro. Sun Nov 17 19:29:23 2002 Joe Orton * ne_socket.c (ne_sock_connect): Make address argument const. (raw_connect): Make address argument const; adjust to use a copy of the sockaddr structure, which is correct anyway. (ne_addr_first, ne_addr_next): Make return pointer const. * ne_private.h (struct host_info): Store current address as const. Sun Nov 17 19:03:01 2002 Joe Orton * ne_socket.c (ne_register_progress): Removed function. * ne_socket.h (ne_block_reader, ne_progress, ne_register_progress): Removed. * ne_request.c (do_connect): Don't call ne_register_progress. * ne_request.h: Add ne_block_reader typedef. * ne_session.h: Include sys/types.h; add ne_progress typedef. Sun Nov 17 18:59:29 2002 Joe Orton * ne_socket.c (ne_iaddr_make, ne_iaddr_cmp, ne_iaddr_free): New functions. Mon Nov 11 19:51:24 2002 Joe Orton Allow discovery of document encoding. * ne_xml.c [HAVE_EXPAT]: (struct ne_xml_parser_s): Add encoding field. (decl_handler): New function. (ne_xml_doc_encoding): New function. Mon Nov 11 19:48:43 2002 Joe Orton * ne_xml.c (sax_handler): Use sax_error for fatal error callback. Fri Oct 11 23:50:01 2002 Joe Orton * ne_private.h (struct ne_session_s): Change 'connected' to be a simple boolean flag. * ne_session.c (ne_close_connection): Treat 'connected' as a boolean. * ne_request.c (open_connection): Greatly simplified. Fri Oct 11 00:46:52 2002 Joe Orton * ne_props.c (end_propstat): Fix NULL pointer dereference if no status object is given. Tue Oct 8 20:10:24 2002 Joe Orton * ne_xml.c (ne_xml_create) [!HAVE_EXPAT]: Set 'replaceEntities' flag in created parser so that entities are dereferenced in attribute values. Mon Oct 7 22:08:46 2002 Joe Orton * ne_socket.c (init_ssl): Attempt to seed PRNG using EGD socket at path EGD_PATH or a set of predetermined locations if EGD_PATH is not defined. No longer try $EGDSOCKET or $HOME/.entropy. Mon Oct 7 21:32:33 2002 Joe Orton * ne_auth.c (register_hooks): Removed function. (auth_register): Fold in register_hooks. Tue Sep 24 21:24:44 2002 Joe Orton * ne_request.c (ne_request_create): Pass Request-URI to create_request hooks. Tue Sep 24 20:42:45 2002 Joe Orton * ne_socket.c [__hpux]: Define _XOPEN_SOURCE_EXTENDED to 1, to pick up h_errno definition on HP-UX 10.20. Wed Sep 18 21:46:28 2002 Joe Orton * ne_compress.c (struct ne_decompress_s): Add zstrinit field. (gz_reader): Set zstrinit after inflateInit2 succeeds. (ne_decompress_destroy): Only call inflateEnd if zstrinit is set. Wed Sep 18 19:56:00 2002 Joe Orton * ne_auth.c: Remove incomplete domain support. Tue Sep 17 21:05:11 2002 Joe Orton Fix rejection of server certificates which have commonName as the least specific attribute. * ne_session.c (check_identity): Don't ignore commonName if it is the least specific attribute. Tue Sep 10 21:08:18 2002 Joe Orton * ne_request.c (lookup_host): Destroy cached address if resolve fails; fix segfault if a second request in the session is dispatched after the DNS lookup fails on the first. Mon Sep 9 22:26:03 2002 Joe Orton * ne_request.c (RETRY_RET): Treat SSL truncation as a legitimate persistent connection timeout. Fri Aug 30 21:58:45 2002 Joe Orton * ne_request.c (read_response_block): Clear can_persist flag if an EOF was read (fix for read-till-EOF response terminated by an unclean SSL shutdown). Mon Aug 26 18:05:00 2002 Joe Orton * ne_socket.c: Fix HAVE_LIMITS check (Blair Zajac). Sun Aug 25 23:29:06 2002 Joe Orton * ne_request.c (do_connect): Add debug message for connection attempt. Sun Aug 25 22:54:04 2002 Joe Orton * ne_socket.h (ne_addr_print): Make address argument const. Sun Aug 25 11:52:32 2002 Joe Orton * ne_socket.c (ne_addr_print): New function. Sun Aug 25 10:09:10 2002 Joe Orton Fix interop with Tomcat/3.2 SSL server, which performs an unclean shutdown on an HTTP/1.0 response without a C-L header. * ne_request.c (read_response_block): Ignore SSL connection truncation for a read-till-EOF response, where no reseponse content has been read yet. (ne_read_response_block): Always increase 'total' counter. Sun Aug 25 08:47:41 2002 Joe Orton * ne_request.c (aborted): Handle code=0 case specifically, and NE_SOCK_* as default. Sun Aug 25 08:24:48 2002 Joe Orton * ne_socket.h: Add `NE_SOCK_TRUNC' return value. * ne_socket.c (error_ossl): Return NE_SOCK_TRUNC when an EOF is received without a close_notify. Sat Aug 24 17:37:14 2002 Joe Orton * ne_socket.h (ne_inet_addr): New type. (ne_addr_first, ne_addr_next): New public interface. (ne_sock_connect): Change first parameter to ne_inet_addr. * ne_socket.c: Predefine ne_inet_addr for ne_socket.h, replacing ne_raw_addr. (ne_addr_first, ne_addr_first): Renamed from addr_first, addr_next; return type now ne_inet_addr; made public. (ne_sock_connect): Fold in make_socket() macro; just connect to single IP address passed in. * ne_private.h (struct host_info): Renamed 'addr' to 'address', dded 'current' field, removed 'resolved' field. * ne_request.c (lookup_host): Adjust for addr->address rename. (ne_begin_request): Call lookup_host if 'address' is NULL in host_info structure, don't use 'resolved' flag. (do_connect): Replaces init_socket; factor more code out from open_connection. Loop over available addresses until an ne_sock_connect call succeeds. (open_connection): Moved code into do_connect. * ne_session.c (ne_session_destroy): Adjust for addr->address rename. Sat Aug 24 13:45:26 2002 Joe Orton * ne_string.c (count_concat, do_concat): Compact into while() loops. Sat Aug 24 13:36:04 2002 Joe Orton * ne_private.h (VERSION_PRE11): Removed macro. (struct ne_session_s): Add is_http11 field; removed version_major, version_minor fields. * ne_request.c (add_fixed_headers): Use is_http11 flag rather than VERSION_PRE11 macro. (ne_begin_request): Set and use is_http11 flag. * ne_session.c (ne_version_pre_http11): Use is_http11 flag. (ne_session_create): Don't set version_major, version_minor fields. Sat Aug 24 09:00:13 2002 Joe Orton * ne_request.c (struct ne_request_s): Removed abs_path field. (ne_set_request_uri): Removed function. (ne_request_create): Set req->uri to be the actual Request-URI. Don't use an absoluteURI in Request-URI if using SSL via a proxy tunnel, or if passed-in path does not begin with a '/'. (build_request): Use pre-determined Request-URI. (proxy_tunnel): Pass true Request-URI to ne_request_create. (ne_request_destroy): Don't free abs_path. Sat Aug 24 00:37:25 2002 Joe Orton * ne_request.c (aborted): Fix handling of _CLOSED and _TIMEOUT socket errors, and of non-socket errors. Presume ne_sock_error cannot return NULL. Sat Aug 24 00:07:33 2002 Joe Orton * ne_cookies.c (set_cookie_hdl): Ensure that each cookie field is safe to free(). Fri Aug 23 23:46:58 2002 Joe Orton * ne_request.c (aborted): Close the connection after setting the session error, otherwise the socket error is lost. Fri Aug 23 22:50:30 2002 Joe Orton * ne_socket.c (ne_sock_init): Set SIGPIPE disposition before SSL library initalization, so it happens even if SSL library initialization fails. Fri Aug 23 22:03:26 2002 Joe Orton * ne_socket.c [USE_GETADDRINFO] (make_socket): Pass SOCK_STREAM to socket() rather than ai_socktype: on RHL6.2, ai_socktype is returned as zero. Wed Aug 21 18:06:36 2002 Joe Orton * ne_socket.c: Reinstate stdlib.h include. * ne_socket.h: Reinstate sys/socket.h include. Wed Aug 21 12:58:47 2002 Joe Orton * ne_socket.c (ne_addr_resolve): Accept IPv6 addresses enclosed in square brackets. Wed Aug 21 09:37:24 2002 Joe Orton * ne_uri.c (ne_uri_parse): Parse literal IPv6 address using the RFC2732 `[address]' syntax. Mon Aug 19 17:18:45 2002 Joe Orton * ne_socket.c (ne_addr_error): Override a horribly generic error message from gai_strerror(). Mon Aug 19 16:24:37 2002 Joe Orton * ne_socket.h: Remove netinet/in.h etc includes. (ne_sock_addr): Add new opaque type. (ne_addr_resolve, ne_addr_result, ne_addr_error, ne_addr_destroy): New functions. (ne_sock_connect): Changes address argument to `ne_sock_addr *'. (ne_name_lookup): Removed function. * ne_socket.c: Added netinet/in.h etc includes. (ne_sock_addr, ne_raw_addr): Define types. (make_socket): New macro. (ne_addr_resolve): Replace ne_name_lookup; store results (multiple addresses if returned) in returned ne_sock_addr object. Use getaddrinfo() if available. (raw_connect, addr_first, addr_next, ne_addr_result, ne_addr_error, ne_addr_destroy): New functions. (ne_sock_connect): Re-implement to loop through available addresses until a connect() succeeds; use make_socket, raw_connect auxiliaries. * ne_private.h (struct host_info): Store an ne_sock_addr pointer. * ne_request.c (lookup_host): Use new ne_addr_* interface. * ne_session.c (ne_session_destroy): Destroy address objects. Mon Aug 19 00:19:49 2002 Joe Orton * ne_socket.c: Move prng_seeded inside ifdef NEON_SSL region to prevent unused variable warning for non-SSL build. Sun Aug 18 23:21:21 2002 Joe Orton * ne_string.h (ne_strerror): Return buffer. Sun Aug 18 23:17:56 2002 Joe Orton * ne_socket.c (set_error): Use ne_strnzcpy. Sun Aug 18 23:14:07 2002 Joe Orton * ne_string.c (ne_strerror): Use ne_strnzcpy. Sun Aug 18 23:11:45 2002 Joe Orton * ne_string.h (ne_strnzcpy): New macro. Sun Aug 18 22:48:27 2002 Joe Orton * ne_socket.c (ne_sock_init): Check directly for SIGPIPE definition rather than HAVE_SIGPIPE. Sun Aug 18 13:49:49 2002 Joe Orton * ne_session.c (set_hostport): Use %u for printing unsigned int. Sun Aug 18 13:47:43 2002 Joe Orton * ne_utils.h (NE_DBG_SSL): New constant. * ne_session.c [NEON_SSL] (everywhere): Use NE_DBG_SSL channel for debugging messages. Sun Aug 18 08:17:19 2002 Joe Orton * ne_session.c (match_hostname): Fix to use case-insensitive string comparison. Sun Aug 18 08:10:12 2002 Joe Orton * ne_session.c (check_identity): Check the commonName if no alt. names of DNS type were found. Sun Aug 18 07:39:35 2002 Joe Orton * ne_session.c (check_identity): Use the most specific commonName attribute found, not the first. (for RFC2818 compliance) Sun Aug 18 01:54:53 2002 Joe Orton * ne_session.c (match_hostname): Invert return value. (check_identity): New function; split out commonName check from check_certificate, check subjectAltName extension instead if present. (check_certificate): Use check_identity. Sat Aug 17 19:59:21 2002 Joe Orton * ne_session.c (check_certificate): Extend debugging code to dump the whole certificate chain, but #if 0 it by default. Mon Aug 12 12:04:51 2002 Joe Orton * ne_request.c (aborted): Use NE_FMT_SSIZE_T to print ssize_t value. Mon Aug 12 11:08:35 2002 Joe Orton Support PRNG seeding via EGD to make SSL work on platforms which lack /dev/random: * ne_socket.c (init_ssl): New function. (ne_sock_init): Call init_ssl, set prng_seeded global on success. (ne_sock_use_ssl_os): Fail early if prng_seeded is not set, and RAND_status returns false. Tue Aug 6 07:18:30 2002 Joe Orton * ne_socket.c (ne_sock_use_ssl_os): Remove goto-based error handling. Don't call SSL_shutdown after SSL_connect fails. Mon Aug 5 23:18:55 2002 Joe Orton * ne_session.c (ne_ssl_keypw_prompt): Don't set SSL_CTX default password callbacks, since these are never invoked. Implement once, stub for !NEON_SSL is no longer needed. Mon Aug 5 21:01:54 2002 Joe Orton * ne_session.c (ne_ssl_load_pem): Pass private key prompt callback to PEM_read_X509, PEM_read_PrivateKey (patch by Daniel Berlin). Also handle errors properly; call ERR_get_error() to pop the errors of the error stack. Mon Aug 5 20:15:10 2002 Joe Orton * ne_session.c (provide_client_cert): Increase reference count on key and certificate, to prevent them being free'd too early. Sun Aug 4 22:35:27 2002 Joe Orton Fix `retry_after_abort' test in request.c: * ne_request.c (send_request): Don't use the 'persisted' flag until after a new connection has been opened, when it may have been reset. Sun Aug 4 17:26:37 2002 Joe Orton * ne_request.c (struct ne_request_s): Remove reqbuf field. (ne_request_create, ne_request_destroy): Don't (de)allocate reqbuf. (build_request): Allocate the returned buffer internally. (ne_begin_request): Destroy the buffer after use. Sun Aug 4 15:36:01 2002 Joe Orton * ne_session.c (ne_ssl_load_pem): Close file after use. Sun Aug 4 12:55:49 2002 Joe Orton Factor out EPIPE, ECONNRESET handling from write_raw: * ne_socket.c (MAP_ERR): New macro. (write_raw, error_ossl): Use MAP_ERR. Sun Aug 4 12:25:34 2002 Joe Orton * ne_socket.c (ne_sock_switch_ssl): New function. Sun Aug 4 12:24:23 2002 Joe Orton * ne_socket.c (ne_sock_switch_ssl): New function, really just for test suite. Sat Aug 3 22:11:33 2002 Joe Orton * ne_auth.c (ne_forget_auth): Fix segfault if either server or proxy auth is not in use. Sat Aug 3 22:06:32 2002 Joe Orton * ne_redirect.c (create, post_send, ne_redirect_register, ne_redirect_location): Updated for new hook interface. Sat Aug 3 19:02:33 2002 Joe Orton Adjustment of hook interface and use: fixing a design flaw causing a segfault in the auth hooks when two requests are used concurrently for a single session during a CONNECT tunnel. * ne_request.h, ne_session.h: (ne_get_request_private, ne_get_session_private): Replace ne_request_hook_private, ne_session_hook_private. (ne_set_session_private, ne_set_request_private): Replace ne_hook_session_accessor, ne_hook_request_accessor. * ne_request.h (ne_create_request_fn, ne_pre_send_fn, ne_post_send_fn): Add ne_request pointer as first argument. (ne_hook_destroy_request): Take ne_destroy_req_fn function. (ne_hook_destroy_session): Take ne_destroy_sess_fn function. * ne_request.c (struct ne_request_s): Renamed `accessor_hooks' field to `private'. (get_private): Renamed from call_access; don't invoke function. (ne_null_accessor): Removed function. * ne_auth.c (struct auth_class): Store hook id. (auth_session): Remove auth_request pointer. (ah_create): Store auth_request pointer as request-private data. (ah_pre_send, ah_post_send, ah_destroy): Retrieve auth_request pointer from request-private data. (register_hooks, ne_forget_auth): Use ne_{get,set}_session_private. * ne_locks.c (struct lh_req_cookie): New structure. (struct ne_lock_store_s): Remove submit_locks field. (lk_create, lk_pre_send, submit_lock, ne_lock_using_resource, ne_lock_using_parent, lk_destroy): Adjust to use lh_req_cookie pointer as request-private data. * ne_cookies.c (create, pre_send): Adjust for hook prototype changes. Wed Jul 31 23:46:17 2002 Joe Orton * ne_socket.c [NEON_SSL]: Include limits.h for INT_MAX definition. Mon Jul 29 20:55:57 2002 Joe Orton * ne_auth.c (struct auth_class): New structure; abstracts out proxy/server generic auth handling more cleanly. (ah_server_class, ah_proxy_class): Declare variables. (auth_session): Reference an auth_class structure. (auth_register): Replaces auth_create. (ne_set_server_auth, ne_set_proxy_auth): Simplify, use auth_register. (everywhere): Reference req_hdr etc via ->spec-> reference. Sun Jul 28 12:29:23 2002 Joe Orton * ne_request.c (proxy_tunnel): Reset 'persisted' flag, so that a newly tunnelled connection is not treated as persistent. Sun Jul 28 12:26:49 2002 Joe Orton * ne_string.h (CONCAT2, CONCAT3, CONCAT4): Removed macros. Thu Jul 25 23:16:00 2002 Joe Orton * ne_request.c (send_request): Don't clear retry until a status-line has been read. Thu Jul 25 00:03:17 2002 Joe Orton * ne_auth.c (basic_challenge, request_basic): Use ne_concat not the CONCAT? macros. * ne_basic.c (ne_mkcol): Use ne_concat not the CONCAT2 macro. Wed Jul 24 00:16:39 2002 Joe Orton * ne_string.c (count_concat, do_concat): Factored out from ne_buffer_concat. (ne_buffer_concat): Rewrite to use count_concat, do_concat. (ne_concat): New (resurrected) function. Thu Jul 18 21:52:12 2002 Joe Orton * ne_request.c (proxy_tunnel): Don't use server.hostport in Request-URI; always include `:port' even if default port is used; fix CONNECT through Inktomi Traffic-Server. Thu Jul 18 21:33:43 2002 Joe Orton * ne_request.c (aborted, ne_set_request_body_fd): Use ne_strerror. * ne_session.c (ne_ssl_load_pem, ne_ssl_load_pkcs12): Use ne_strerror. * ne_basic.c (get_to_fd): Use ne_strerror. Thu Jul 18 20:19:30 2002 Joe Orton * ne_string.c (ne_strerror): New function. * ne_socket.c (set_strerror): Move portability logic to ne_strerror; just use that here. Thu Jul 18 20:00:46 2002 Joe Orton * ne_socket.c (read_raw, write_raw): Don't re-evaluate 'errno', per Ulrich Drepper's advice. Wed Jul 17 23:47:01 2002 Joe Orton * ne_socket.c (struct ne_socket_s): Store buffer for error string. (set_error, set_strerror): New macros. (everywhere): Use set_error, set_strerror or ne_snprintf to set the socket error string. Wed Jul 17 23:19:18 2002 Joe Orton * ne_utils.c (ne_version_match): Fix inverted minor version test. Sun Jul 14 20:13:59 2002 Joe Orton * ne_uri.h (ne_uri): Store port as unsigned. * ne_uri.c (ne_uri_defaultport): Return unsigned int, and zero for undefined port. Sun Jul 14 20:07:35 2002 Joe Orton * ne_session.c (ne_session_proxy): Take port parameter as unsigned int, as per ne_session_create. Sun Jul 14 20:03:21 2002 Joe Orton * ne_request.c (strip_eol): Take ssize_t 'len' parameter. (read_message_header): Use ssize_t for 'n'. Sun Jul 14 12:45:40 2002 Joe Orton * ne_socket.c (ne_sock_use_ssl_os): Unconditionally enable SSL_MODE_AUTO_RETRY now OpenSSL 0.9.6 is required. Sun Jul 14 12:15:40 2002 Joe Orton * ne_xml.h (NE_XML_MEDIA_TYPE): New definition. * ne_acl.c (ne_acl_set), * ne_props.c (ne_proppatch, propfind): Use NE_XML_MEDIA_TYPE, rather than hard-coding the incorrect "text/xml" media type. Sun Jul 14 10:53:33 2002 Joe Orton * ne_utils.c (ne_version_match): Replace ne_version_minimum. Sat Jul 13 11:40:37 2002 Joe Orton * ne_session.c (ne_negotiate_ssl): Include socket error string in session error if SSL negotiation fails. Sat Jul 13 11:27:50 2002 Joe Orton * ne_socket.c (error_ossl): New function. (ERROR_SSL_STRING): Removed macro. (CAST2INT): New macro; safety harness for OpenSSL compatibility. (read_ossl, write_ossl): Use error_ossl, CAST2INT. (ne_sock_use_ssl_os): Use error_ssl. Sat Jul 13 11:16:07 2002 Joe Orton * ne_socket.c: Define ECONNRESET as WSAECONNRESET on Win32. Sat Jul 13 10:10:03 2002 Joe Orton * ne_private.h (struct ne_session_s): Replace 'reqcount' with 'persisted' flag. * ne_request.c (ne_end_request): Set 'persisted' flag if connection is left open. (send_request): Adjust to allow retry if 'persisted' flag is set. (init_socket): Clear 'persisted' flag here... (open_connection): ... rather than here. Wed Jul 10 22:51:39 2002 Joe Orton * ne_request.c (RETRY_RET): Retry on an NE_SOCK_RESET too. (send_request): Fix to only retry if not on the first request on a connection (close_not_retried test). Sun Jul 7 20:49:09 2002 Joe Orton * ne_socket.h: Add NE_SOCK_RESET return value; improve comments. * ne_socket.c (read_raw, write_raw): Return NE_SOCK_RESET if an ECONNRESET error is received when reading or writing. Sat Jul 6 13:30:15 2002 Joe Orton * ne_request.c (read_status_line, discard_headers): New functions, split out from send_request. (send_request_body): Move debugging here from send_request. (RETRY_RET): Renamed from CAN_RETRY. (send_request): Simplify: remove complex 100-continue graceful failure logic; use read_status_line, discard_headers, RETRY_RET. Fix to only send request body once (expect_100_once test case). Fix to not return NE_RETRY if reading status-line other than the first fails (fail_eof_continued test case). Fri Jul 5 21:47:49 2002 Joe Orton * ne_request.c (build_request): Fix from previous commit: clear the buffer before building the request. Fri Jul 5 21:00:20 2002 Joe Orton * ne_request.c (build_request): Fold Host header and Request-Line into single ne_buffer_concat call. Don't set req->use_expect100 here. Fold an if/else into an ?:. Optimise to use ne_buffer_append to add 100-continue, user-supplied headers, and trailing EOL, since they all have known lengths. (send_request): Take request data as argument. (ne_begin_request): Call build_request here; pass to send_request. Move Expect100 logic here. Fri Jul 5 17:12:56 2002 Joe Orton * ne_basic.c (ne_read_file): Removed function. Fri Jul 5 17:10:11 2002 Joe Orton * ne_compress.c (process_footer): Take unsigned char buffer. Store calculated CRC in a uLong. (do_inflate, gz_reader): Cast buffers to unsigned char for strict compatibility with zlib interface. Wed Jul 3 19:21:17 2002 Joe Orton * ne_request.c (struct ne_request_s): Use a fixed char array for respbuf field. (ne_request_create, ne_request_destroy): Don't allocate respbuf dynamically. (send_request): Move 'buffer' to appropriate scope. (ne_request_dispatch): Remove 'buffer'; read into respbuf. Tue Jul 2 08:35:05 2002 Joe Orton * ne_request.c (proxy_tunnel): Remove redundant sess->connected assignment. Sun Jun 30 21:04:50 2002 Joe Orton * ne_request.c (ne_begin_request): Only set host->resolved if lookup is successful. Sun Jun 30 18:25:51 2002 Joe Orton * ne_request.c (SOCK_ERR): New macro. (struct ne_request_s): Remove 'forced_close' field. (aborted): Renamed from set_sockerr; also closes connection and prints message in debug log. (send_request_body): Don't use set_sockerr or set forced_close. (read_response_block, read_message_header): Use SOCK_ERR; adjust to use aborted(). (ne_read_response_block, read_response_headers): Don't set forced_close. (CAN_RETRY): New macro. (send_request): Adjust to use CAN_RETRY(); use aborted() to make sure connection is closed in error cases. (ne_begin_request): Don't close connection here in error cases; don't use forced_close. (open_connection): Adjust to use aborted() not set_sockerr(). Sun Jun 30 17:26:41 2002 Joe Orton * ne_session.c (ne_close_connection): Clarify debug messages. Sun Jun 30 14:36:11 2002 Joe Orton * ne_request.c (read_response_block): Fail on chunk size lines which contain no valid chunk size digits. Sun Jun 30 12:35:35 2002 Joe Orton * ne_session.c (ne_negotiate_ssl): Use ne_get_session rather than req->session. * ne_request.c (struct header_handler, struct body_reader, struct ne_request_s): Moved from ne_private.h. Sun Jun 30 12:13:58 2002 Joe Orton Cleanup of response handling: * ne_private.h (struct ne_response): Replace 'is_chunked' field with 'mode' enum. * ne_request.c (te_hdr_handler): Set mode. (connection_hdr_handler): Reset can_persist for 'close'. (clength_hdr_handler): New function. (ne_request_create): Use clength_hdr_handler to parse Content-Length header. (read_response_block, ne_read_response_block): Adapt for 'mode' enum; simplify. (normalize_response_length): Removed function. (ne_begin_request): Fold in normalize_response_length logic. (ne_end_request): Simplify logic. Sun Jun 30 11:08:26 2002 Joe Orton * ne_session.c: Remove X509_NAME workaround in favour of a neon.mak change. Tue Jun 25 23:14:34 2002 Joe Orton * ne_session.c: Undefine X509_NAME if it is defined (by a Windows header). Tue Jun 25 22:51:15 2002 Joe Orton * ne_socket.c: Rename READ_BUFFER to RDBUFSIZ. Tue Jun 25 21:07:13 2002 Joe Orton * ne_private.h (struct host_info): Store port as unsigned int. * ne_session.c (set_hostport, set_hostinfo, ne_session_create): Take port argument as unsigned int. * ne_socket.c (ne_sock_connect): Take port argument as unsigned int. Tue Jun 25 20:59:14 2002 Joe Orton * ne_utils.h [__GNUCC__] (NE_DEBUG): Remove implementation using GNU C extensions. Sun Jun 23 22:47:52 2002 Joe Orton * ne_request.c (set_request_uri): Renamed from ne_set_request_uri; made static. (ne_request_create): Update accordingly. * ne_private.h (ne_set_request_uri): Removed prototype. Sun Jun 23 15:40:57 2002 Joe Orton * ne_request.c (send_request, ne_request_destroy): Free reason_phrase now it is malloc-allocated. Sun Jun 23 14:59:04 2002 Joe Orton Simplify given loss of const qualifier on ne_status.reason_phrase: * ne_props.c (struct propstat): Remove r_phrase field. (end_propstat, free_propset): Use status.reason_phrase not r_phrase field. Sun Jun 23 14:42:22 2002 Joe Orton * ne_207.h (ne_207_end_response, ne_207_end_propstat): Remove status_line parameter from callbacks. * ne_207.c (struct ne_207_parser_s): Remove status_line field. (end_element): Don't store status_line. (handle_error): Drop status_line argument, recreate dummy status line from status object. (end_response, end_propstat): Drop status_line arguments. * ne_props.c (end_propstat, end_response): Drop status_line arguments. Sun Jun 23 14:39:00 2002 Joe Orton * ne_utils.h (ne_status): Remove const qualifier from 'reason_phrase' field. * ne_utils.c (ne_parse_statusline): strdup the reason_phrase on successful return. Sun Jun 23 11:39:24 2002 Joe Orton * ne_compress.c (struct ne_decompress_s): Replace footer union with buffer. (BUF2UINT): New macro. (process_footer): Convert footer to integer in a portable manner, using BUF2UINT. Sun Jun 23 09:05:25 2002 Joe Orton * ne_compress.c (ne_decompress_s): Use unsigned int for 32-bit integers, not uLong (fix for 64-bit platforms). Wed Jun 19 18:46:40 2002 Joe Orton * ne_session.c (ne_session_destroy): Don't leak the proxy hostname. Sun Jun 16 14:09:31 2002 Joe Orton * ne_request.c (read_response_block): Use NE_FMT_SSIZE_T rather than %d, cast field precision argument to int. (ne_pull_request_body): Use ssize_t for store callback return value, use NE_FMT_SSIZE_T rather than %d, cast field precision argument to int. Sun Jun 16 12:15:19 2002 Joe Orton * ne_session.c (ne_negotiate_ssl): Don't leak peer certificate in error cases. Fix spelling mistake in error message. Sun Jun 16 11:23:23 2002 Joe Orton * ne_request.c (open_connection): When SSL negotation fails after doing CONNECT request, use ne_close_connection so that sess->connection is reset to 0, and ne_sock_close isn't called twice for the socket. Wed Jun 12 23:22:20 2002 Joe Orton * ne_props.c (ne_proppatch): Add missing call to ne_lock_using_resource. Mon Jun 10 20:45:27 2002 Joe Orton * ne_auth.c (verify_response): Remove redundant prototype, fix sscanf format string to use signed integer. Mon Jun 10 20:13:57 2002 Joe Orton * ne_compress.c (do_inflate): Continue calling inflate() whilst unconsumed input remains: fix from Justin Erenkrantz . Mon Jun 10 19:53:59 2002 Joe Orton * ne_socket.c (ne_sock_readline): If a complete line is found in the buffer, avoid the memmove() and simply copy the line directly out of the buffer. Sun Jun 9 11:39:20 2002 Joe Orton * ne_redirect.c (post_send): Perform simple relative URI resolution. Tue Jun 4 16:51:54 2002 Joe Orton * ne_uri.c (ne_path_parent): Simplify. Mon Jun 3 17:50:27 2002 Joe Orton * ne_cookies.c (set_cookie_hdl): Avoid free'ing cookie name/value, thanks to Dan Mullen. Mon Jun 3 17:45:33 2002 Joe Orton * ne_string.c (ne_base64): Use size_t for outlen. Mon Jun 3 17:42:34 2002 Joe Orton * ne_utils.h, ne_socket.h [WIN32]: Move ssize_t definition to ne_socket.h. Mon Jun 3 17:27:21 2002 Joe Orton * ne_request.c (read_response_block): Use correct types for passing to/from ne_sock_*. Mon Jun 3 11:32:20 2002 Joe Orton * ne_compress.c (ne_decompress_destroy): Don't fail if response reader callback is never invoked. Sun Jun 2 12:51:35 2002 Joe Orton * ne_socket.c (read_ossl, read_raw): Call readable_{ossl,raw} function here. (ne_sock_read, ne_sock_peek, ne_sock_readline): Remove explicit calls to ops->readable before ops->read. Thu May 30 22:00:07 2002 Joe Orton * ne_socket.c (ne_sock_readline): Optimise to use socket read buffer directly, and use ->read (and ->readable) functions. Tue May 28 17:00:34 2002 Joe Orton * ne_session.c (ne_session_destroy): Don't free proxy.hostport, since it's no longer set. Sun May 26 19:11:46 2002 Joe Orton * ne_xml.c: #error if no expat header is configured; flatten nested #if's, include libxml/xmlversion.h if present. Sun May 26 19:09:04 2002 Joe Orton * ne_utils.c: Include libxml/xmlversion.h if present. Sun May 26 11:55:30 2002 Joe Orton * ne_session.c (set_hostport): Renamed from get_hostport: set host_info field directly; take defaultport argument. (set_hostinfo): Don't use get_hostport. (ne_session_create): Use set_hostinfo and set_hostport; pass in default port correctly for http:/https:. Thu May 23 19:44:44 2002 Joe Orton * ne_xml.c (resolve_nspace): Split out from parse_element. (ne_xml_get_attr): Take parser object, and optional namespace; resolve the namespace if necessary. (parse_element): Use resolve_nspace. * ne_props.c (startelm): Use new ne_xml_get_attr interface. Wed May 22 22:29:05 2002 Joe Orton * ne_dates.c: Renamed HAVE_TM_GMTOFF to HAVE_STRUCT_TM_TM_GMTOFF from use of AC_CHECK_MEMBERS. Tue May 21 21:21:31 2002 Joe Orton * ne_redirect.c (ne_redirect_register): Drop confirm, notify, userdata arguments. (struct redirect): Drop most fields; add a uri structure. (auto_redirect): Removed function. (post_send): Remove functionality which retries a request with a different URI to automatically follow redirects. Qualify the URI if non-absolute. (create): Remove now redundant code. (ne_redirect_location): Return an ne_uri object. Sun May 19 18:53:22 2002 Joe Orton * ne_session.c (ne_set_useragent): Use strcat/malloc/strcpy directly, rather than CONCAT2; allow compiler optimisations. (AGENT): Renamed from NEON_USERAGENT, append space. Sun May 19 17:31:43 2002 Joe Orton Move everything exported by ne_socket.h into ne_*/NE_* namespace; purge inappropriate and unused interfaces. Renaming done by Olof Oberg. * ne_socket.h: (SOCK_FULL): Removed constant. (sock_call_progress, sock_transfer, sock_sendline, sock_send_string, sock_readfile_blocked): Removed functions. (NE_SOCK_ERROR, NE_SOCK_TIMEOUT, NE_SOCK_CLOSED): Renamed constants. (ne_progress, ne_block_reader): Renamed types. (ne_register_progress, ne_sock_init, ne_sock_exit, ne_sock_read, ne_sock_peek, ne_sock_block, ne_sock_fullwrite, ne_sock_readline, ne_sock_connect, ne_sock_accept, ne_sock_fd, ne_sock_error, ne_sock_read_timeout, ne_name_lookup, ne_service_lookup, ne_sock_use_ssl, ne_sock_use_ssl_os): Renamed functions. * ne_private.h, ne_request.c, ne_session.c: Update accordingly. * ne_request.c (build_request): Return the ne_buffer pointer. (send_request): Remove redundant strlen(), use known buffer length. * ne_request.h: Drop ne_block_reader definition. Sun May 19 13:32:12 2002 Joe Orton * ne_request.c (ne_get_session, ne_get_request): Take const request pointer. Sun May 19 13:21:17 2002 Joe Orton * ne_string.c (ne_buffer_ncreate): Renamed from ne_buffer_create_sized. * ne_session.c (check_certificate, provide_client_cert): Update accordingly. * ne_request.c (ne_request_create): Update accordingly. Sun May 19 13:12:14 2002 Joe Orton * ne_string.c (ne_token): Drop quotes parameter. (ne_qtoken): Split out from ne_token. * ne_basic.c (dav_hdr_handler, ne_content_type_handler): Use ne_qtoken. * ne_compress.c (find_token): Removed function. (gz_reader): Compare header value directly against "gzip", remove a stale comment. Sun May 19 09:45:28 2002 Joe Orton * ne_socket.h (sock_fullread): Return ssize_t; takes buflen as size_t. (sock_read, sock_peek): Fix prototypes to match actual definition. * ne_socket.c (write_raw): Return ssize_t. Sat May 18 14:53:45 2002 Joe Orton * ne_string.h (ne_buffer): Remove separate struct ne_buffer_s definition. * ne_string.c (ne_buffer_create_sized): Don't use struct ne_buffer_s. Sun May 12 11:33:02 2002 Joe Orton * ne_string.c (ne_base64): Moved from base64.c. * base64.c, base64.h: Removed files. * Makefile.in: Updated accordingly. * ne_auth.c: Don't include base64.h. Sun May 12 11:26:05 2002 Joe Orton * ne_string.h (ne_utf8_decode, ne_utf8_encode): Removed functions. Sat May 11 15:42:24 2002 Joe Orton As part of patch from Olof Oberg : * ne_request.h (ne_destroy_fn): Renamed from typo'ed ne_destory_fn. * ne_request.c (ne_request_destroy, ne_hook_destroy_request, ne_hook_destroy_session): Update accordingly. * ne_session.c (ne_session_destroy): Update accordingly. Thu May 9 21:44:15 2002 Joe Orton Major improvements to socket layer to incorporate socket read buffering and rewrite sock_readline, and add an abstraction layer to simplify SSL support. Grunt work by Jeff Johnson * ne_socket.c (struct iofns): New type. (struct nsocket_s): Store 'ops' pointer to I/O functions in use for the socket. Add buffer, bufpos, bufavail fields for read buffering. (sock_block, sock_read, sock_peek): Reimplement to add read buffer, simplify to use I/O functions abstraction. (readable_raw, read_raw, write_raw, readable_ossl, read_ossl, write_ossl): Factored out from sock_read/fullwrite, avoiding in-lined ifdefs. (sock_fullwrite): Just use ops->write. (sock_readline): Simplify greatly to exploit read-buffering, return ssize_t. (sock_fullread): Simplify, removing unnecessary local variables, return ssize_t. (create_sock, sock_enable_ssl_os): Set ops pointer. Wed May 8 11:54:48 2002 Joe Orton * ne_socket.c (sock_name_lookup): Avoid casts; use INADDR_NONE. [!INADDR_NONE]: Define to (unsigned long) -1. Wed May 1 22:19:18 2002 Joe Orton * ne_locks.h (ne_lock): Document that ->token and ->owner fields must be malloc-allocated if non-NULL. Wed May 1 22:15:41 2002 Joe Orton * ne_locks.c (get_ltoken_hdr): New function. (ne_lock): Correctly parse Coded-URL from Lock-Token response header. Wed May 1 22:03:08 2002 Joe Orton * ne_redirect.c (post_send): Adjust for ne_uri_parse handling of unspecified port. Wed May 1 22:00:50 2002 Joe Orton * ne_session.c (provide_client_cert): Fail if peer certificate not known when client cert requested. Wed May 1 21:58:35 2002 Joe Orton * ne_session.h (ne_ssl_provide_fn): Adjust callback typedef to return void. Wed May 1 21:52:40 2002 Joe Orton * ne_request.h: Remove NE_SERVERAUTH and NE_AUTHPROXY; fix NE_PROXYAUTH description. Wed May 1 21:32:54 2002 Joe Orton * ne_uri.c (ne_uri_parse): For consistency, port field is 0 if unspecified. Tue Apr 30 10:05:48 2002 Joe Orton * ne_string.c (shave_string): Removed function. Tue Apr 23 21:19:53 2002 Joe Orton * ne_props.c (start_propstat, startelm): Use ne_realloc not realloc (thanks to Jeff Johnson). Tue Apr 23 20:55:56 2002 Joe Orton * ne_xml.c: Include parser.h or libxml/parser.h, depending on which is found. Mon Apr 15 00:37:43 2002 Joe Orton * ne_request.c (build_request, send_request): Simplify logic. Sun Apr 14 16:59:50 2002 Joe Orton * ne_props.c: Remove unused accidental 'propstat' global. (struct propstat): Add r_phrase field. (end_propstat): Dup the reason_phrase string. (free_propset): Free the reason_phrase. Avoid another possible free(NULL) call. Sun Apr 14 12:00:54 2002 Joe Orton * ne_basic.c (ne_content_type_handler): For text/* media types, use default charset of ISO-8859-1. Sat Apr 13 23:11:07 2002 Joe Orton * ne_utils.h: Include trio.h if NEON_TRIO is defined. Sun Apr 7 17:38:14 2002 Joe Orton * ne_request.c (read_response_headers): Don't zero-initialize hdr. Sun Apr 7 17:15:23 2002 Joe Orton * ne_request.c (read_response_headers): Ignore whitespace between header name and colon, simplify logic a little. Sun Apr 7 14:09:07 2002 Joe Orton * ne_session.c (ne_ssl_readable_dname): New function. Sun Apr 7 12:32:25 2002 Joe Orton * ne_string.c (ne_buffer_destroy): Remove redundant check for data pointer being NULL. Wed Apr 3 19:44:59 2002 Joe Orton Optimisation/simplification of header name hashing. * ne_request.c (hash_and_lower): Renamed from hdr_hash; convert string to lower-case in-place too. (lower_string): Removed function. (ne_add_response_header_handler): Use hash_and_lower rather than lower_string. (HH_ITERATE): Change parameter name to 'ch'. Fri Mar 29 23:00:57 2002 Joe Orton * ne_uri.c (ne_uri_parse): Minor optimisation. Mon Mar 25 21:45:36 2002 Joe Orton Pass a lock context around during LOCK processing; search for the correct element in the response body. * ne_locks.c (ne_lock_create): Don't take a path argument. (ne_unlock): Constify lock parameter. (discover_results): Don't parse out href here... (ld_create): do it here instead; renamed from create_private. (lk_startelm): New function. (lk_endelm): Renamed from end_element_lock. (ne_lock): Require a Lock-Token response header; pass lock context to callbacks. Copy lock back out. Mon Mar 25 21:35:42 2002 Joe Orton * ne_session.h (NE_SSL_FAILMASK): New constant. (NE_SSL_*): Shift right one bit. Mon Mar 25 21:21:18 2002 Joe Orton * ne_session.c (ne_close_connection): Return void. Mon Mar 25 20:09:33 2002 Joe Orton * ne_props.c (free_propset): Avoid free(NULL). Mon Mar 11 19:59:04 2002 Joe Orton * ne_locks.c (ne_lock_using_parent): Iterate over the lock list by hand: check for infinite depth locks with cover the parent too (fixing if_covered_child test). Mon Mar 11 19:25:44 2002 Joe Orton * ne_request.c (ne_request_dispatch): Move variable to scope in which is is used. Sun Mar 10 22:04:58 2002 Joe Orton * Makefile.in (NEON_BASEOBJS): Always build ne_compress.o. Sun Mar 10 22:01:54 2002 Joe Orton * ne_compress.c [!NEON_ZLIB] (ne_decompress_reader, ne_decompress_destroy): Add stubs. Sun Mar 10 21:42:11 2002 Joe Orton * ne_locks.c (struct discover_ctx): Store an ne_session pointer. (discover_results): If lock URI is not an absoluteURI, qualify it using the server host/port/scheme from the session. Don't leak the lock object. (create_private): Simplify, use ne_lock_create. Thu Mar 7 20:08:07 2002 Joe Orton * ne_uri.c (ne_uri_defaultport): Fix default port number for https scheme. Wed Mar 6 21:22:23 2002 Joe Orton * ne_locks.c (lk_pre_send): Use an absoluteURI in the If: header. Wed Mar 6 21:15:00 2002 Joe Orton * ne_uri.c (ne_uri_unparse): New function. Tue Mar 5 22:57:00 2002 Joe Orton * ne_uri.c (ne_uri_cmp): Compare hostnames and schemes case-insensitively, and compare empty abspath and "/" as equivalent, as per RFC 2616. Tue Mar 5 20:53:54 2002 Joe Orton * ne_uri.c (ne_uri_defaultport): New function. Mon Mar 4 21:10:29 2002 Joe Orton * ne_uri.h (ne_uri): Renamed from struct uri. * ne_uri.c (ne_path_parent): Renamed from uri_parent. (ne_path_has_trailing_slash): Renamed from uri_has_trailing_slash. (uri_abspath, uri_absolute): Removed. (ne_uri_parse): Renamed from uri_parse, don't take a 'defaults' parameter. (ne_uri_free): Renamed from uri_free. (ne_path_unescape): Renamed from uri_unescape. (ne_path_escape): Renamed from uri_abspath_escape. (ne_uri_cmp): Renamed from uri_cmp. (ne_path_compare): Renamed from uri_compare. (ne_path_childof): Renamed from uri_childof. * ne_basic.c, ne_locks.c, ne_uri.c, ne_redirect.c, ne_session.c, ne_session.h: all callers changed. Mon Mar 4 01:03:23 2002 Joe Orton * ne_request.c (strip_eol): Fix potential segfault. Mon Mar 4 00:38:10 2002 Joe Orton * ne_locks.c (insert_lock): New function. (ne_lockstore_add, submit_lock): use insert_lock. Mon Mar 4 00:33:39 2002 Joe Orton * ne_locks.c (ne_lockstore_remove): Free list item. Mon Mar 4 00:31:08 2002 Joe Orton * ne_locks.c (free_list): Really destroy the lock. (ne_lock_free): Don't free the lock object itself. Mon Mar 4 00:17:18 2002 Joe Orton * ne_request.c (ne_request_destroy): Free accessor hook list. Sun Mar 3 20:35:09 2002 Joe Orton Changes to lock interface; replacing "lock session" with a lock store, which can be registered with an ne_session. Lock objects now store URI as complete URI structure. * ne_locks.h (struct ne_lock): Store URI as complete URI structure. Remove next/prev fields. (ne_lock_store): New type. * ne_locks.c (struct lock_list): New type. (struct ne_lock_store_s): Replaces ne_lock_session_s; store lock_list pointers for stored locks, cursor, and locks to submit. (ne_lock_create): New function. (lk_create): Renamed from create. (lk_pre_send): Renamed from pre_send; adjust for lock list type and to use URI path. (free_list): New function; split out from old 'destroy'. (lk_destroy): Renamed from destroy; use free_list. (ne_lockstore_create, ne_lockstore_destroy, ne_lockstore_first, ne_lockstore_next): New functions. (ne_lockstore_register): Most of old ne_lock_register. (submit_lock): Adjusted for lock_list type. (ne_lockstore_findbyuri): Renamed from ne_lock_find; use full URI structure. (ne_lock_using_resource, ne_lock_using_parent): Adjusted for lock_list/full URI changes. (ne_lock_iterate): Removed function. (ne_lockstore_add, ne_lockstore_remove): Renamed from ne_lock_add, ne_lock_copy; adjusted for lock_list/full URI. (ne_lock_copy): Adjusted for full URI. (ne_lock_create, ne_lock_destroy): New function. (ne_lock, ne_lock_refresh, ne_unlock): Adjusted for full URI. Sun Mar 3 15:23:40 2002 Joe Orton * ne_uri.c (uri_cmp): New function. Sun Mar 3 11:01:30 2002 Joe Orton * ne_session.c (ne_fill_server_uri): New function. Mon Feb 25 21:25:27 2002 Joe Orton * ne_utils.c (version_string): Add zlib version. Mon Feb 25 20:49:07 2002 Joe Orton * (everywhere): Replace use of snprintf, vsnprintf with ne_snprintf, ne_vsnprintf so that trio replacements are used when appropriate. * ne_dates.h: Pick up ne_utils.h for ne_{v,}snprintf defines. Sun Feb 24 11:23:05 2002 Joe Orton * ne_utils.h: Define ne_snprintf, ne_vsnprintf for trio or non-trio builds. Sun Feb 24 11:20:42 2002 Joe Orton * Makefile.in (check-incl): Add target to check that each header file can be included standalone. Sun Feb 24 11:17:54 2002 Joe Orton * ne_xml.h: Add missing sys/types.h include. Sun Feb 24 11:12:22 2002 Joe Orton * ne_utils.h: Remove HTTP_QUOTES, HTTP_WHITESPACE globals. * ne_cookies.c (set_cookie_hdl): Don't use HTTP_QUOTES, HTTP_WHITESPACE globals. Wed Feb 20 19:32:48 2002 Joe Orton * ne_request.c (set_sockerr, ne_set_request_body_fd, send_request): Use ne_set_error rather than accessing session error directly. Tue Feb 19 21:34:59 2002 Joe Orton * ne_utils.c (version_string) [NEON_SOCKS]: Mention SOCKSv5 support. * ne_socket.c (sock_init) [NEON_SOCKS]: Call SOCKSinit. Tue Feb 19 19:21:07 2002 Joe Orton * ne_request.c (open_connection): Remove notify_status call duplicated with ne_negotiate_ssl. Tue Feb 19 19:16:44 2002 Joe Orton * ne_socket.c (sock_get_version): Removed function. Tue Feb 19 19:12:52 2002 Joe Orton * ne_session.c (ne_ssl_provide_ccert): Moved outside ifdef NEON_SSL. [!NEON_SSL] (ne_ssl_load_pem, ne_ssl_load_pkcs12, ne_ssl_keypw_prompt): Added stubs. Sun Feb 17 21:15:34 2002 Joe Orton * ne_session.c (ne_session_create, ne_session_destroy): Only use the SSL context is SSL is being used for the session. Sun Feb 17 20:19:05 2002 Joe Orton Add back client certificate support, much improved. * ne_private.h (struct ne_session_s): Add client cert/key fields, provider, privkey password callbacks. * ne_socket.c (sock_init): Call PKCS12_PBE_add. (sock_enable_ssl_os): Add optional 'appdata' argument. (sock_enable_ssl): Adjust accordingly. * ne_session.c (provide_client_cert, privkey_prompt, ne_ssl_keypw_prompt, ne_ssl_load_pkcs12, ne_ssl_load_pem, ne_ssl_provide_ccert): New functions. (ne_negotiate_ssl): Pass session as appdata to sock_enable_ssl_os. Sun Feb 17 12:32:34 2002 Joe Orton * ne_session.c (make_dname): New function. (check_certificate): Use make_dname. Sun Feb 17 11:29:10 2002 Joe Orton * ne_basic.c (struct get_context): Remove unused 'progress' field, add 'session' field. (get_to_fd, content_range_hdr_handler, clength_hdr_handler): Set session error directly. (clength_hdr_handler): Also fix check for expected range. (everywhere): Initialize session field, don't set session error; use NE_FMT_OFF_T to print off_t's rather than casting to long int. Sat Feb 16 23:24:10 2002 Joe Orton * ne_xml.h (NE_XML_STRIPWS): New element flag. * ne_xml.c (start_element): Clear cdata buffer if not in mixed mode. (char_data): Only strip leading whitespace if NE_XML_STRIPWS is set for the element. Sat Feb 16 14:52:59 2002 Joe Orton * ne_compress.c (enum state): New state NE_Z_AFTER_DATA. (struct ne_decompress_s): Add fields for storing and parsing stream footer; add checksum field for storing current crc. (process_footer): New function. (do_inflate): Compute checksum. Switch to AFTER_DATA state and process footer after reading DEFLATE data. (gz_reader): Fail on trailing content. Handle AFTER_DATA state. (ne_decompress_destroy): Return error if final state was not PASSTHROUGH, or FINISHED. (ne_decompress_reader): Initialize crc. Sat Feb 16 14:26:54 2002 Joe Orton * ne_compress.c (ne_decompress_destroy): Fix potential segfault with use-after-free. Thu Feb 14 16:50:40 2002 Joe Orton * ne_request.c (read_response_headers): Ignore header lines without a ':', rather than failing the request. Tue Feb 12 20:17:49 2002 Joe Orton * ne_request.c (read_response_block): Read chunk size as unsigned using strtoul; check that it fits within an unsigned int (and hence, probably a size_t). Tue Feb 12 20:15:13 2002 Joe Orton * ne_string.h (STRIP_EOL): Removed macro. Mon Feb 11 22:11:03 2002 Joe Orton * ne_session.c (match_hostname): Match fully-qualified hostnames against commonName with leading "*." wildcard. Mon Feb 11 20:47:28 2002 Joe Orton * ne_session.c (match_hostname): New function. (check_certificate): Use it. Sun Feb 10 00:50:49 2002 Joe Orton * ne_request.c (lookup_host): Set error string on lookup failure. Sun Feb 10 00:34:42 2002 Joe Orton * ne_request.c (strip_eol): New function; more efficient STRIP_EOL. (send_request): Use strip_eol. (read_message_header): Use strip_eol, simplify, remove redundant variables. Sat Feb 9 21:02:31 2002 Joe Orton * ne_session.c (ne_set_error): Drop STRIP_EOL call. Sat Feb 9 21:01:01 2002 Joe Orton * ne_session.c (ne_set_error): Take printf-style format string + varargs list. Sat Feb 9 16:15:09 2002 Joe Orton * ne_socket.h (SOCKET_READ_TIMEOUT): Moved to ne_socket.c. * ne_socket.c (struct nsocket_s): Add rdtimeout field. (create_sock): Initialize rdtimeout to SOCKET_READ_TIMEOUT. (sock_read, sock_recv): Use ->rdtimeout field for read timeout. (sock_set_read_timeout): New function. * ne_private.h (struct ne_session_s): Add rdtimeout field. * ne_session.c (ne_set_read_timeout): New function. * ne_request.c (init_socket): New function. (open_connection): Use init_socket. Sat Feb 9 15:11:59 2002 Joe Orton * ne_session.c (ne_session_destroy): Don't leak the server cert. Sat Feb 9 09:59:11 2002 Joe Orton * ne_session.c (check_certificate): Only call verification callback once per certificate; watch for the server cert changing and fail if it does. Wed Feb 6 20:28:27 2002 Joe Orton * ne_session.c (check_certificate): Only call verification callback if failures is non-zero. (ne_ssl_load_ca): Renamed from ne_ssl_add_ca. (ne_ssl_load_default_ca): New function. Wed Feb 6 20:21:29 2002 Joe Orton * ne_socket.c (sock_init): Cache and return result of initialization. Wed Feb 6 01:12:20 2002 Joe Orton * ne_session.c (check_certificate): Ignore cert validity errors from OpenSSL since these are duplicated. Wed Feb 6 01:08:57 2002 Joe Orton * ne_session.c (ne_negotiate_ssl): Fix for invalidating cached SSL_SESSION. Wed Feb 6 01:03:37 2002 Joe Orton * ne_session.c [!NEON_SSL] (STUB): New function. (ne_negotiate_ssl, ne_ssl_add_ca): Implement using STUB. Tue Feb 5 19:56:43 2002 Joe Orton * ne_session.h (ne_ssl_certificate): New type. * ne_session.c (ne_session_create) [NEON_SSL]: Create the SSL_CTX structure. (ne_ssl_get_context): Return the SSL_CTX rather than setting it. (ne_session_destroy): Free the SSL_CTX. (asn1time_to_string): Function moved in from sslcerts.c. (check_certificate): Use OpenSSL's internal validity result. Pass back an ne_ssl_certificate to the verification function; including validity dates. (ne_ssl_add_ca): New function, registers CA certs. Sat Feb 2 14:05:26 2002 Joe Orton * ne_socket.c (sock_enable_ssl_os): Take an optional SSL_SESSION argument. * ne_private.h (struct ne_session_s): Add an SSL_SESSION field. * ne_session.c (ne_negotiate_ssl): Pass stored SSL session to sock_enable_ssl_os, cache session after successful negotiation. (ne_session_destroy): Free cached session. Sat Feb 2 10:45:46 2002 Joe Orton * ne_socket.c, ne_utils.c: Globally replace ENABLE_SSL cpp symbol with NEON_SSL. Sat Feb 2 09:43:27 2002 Joe Orton * ne_session.c (check_certificate): Use 1K on-stack buffer. Sat Feb 2 08:27:08 2002 Joe Orton * ne_private.h (struct host_info): Add 'resolved' flag. (struct ne_session_s): Add scheme field, rename have_proxy to use_proxy, remove proxy_decider. (struct ne_request_s): Remove use_proxy field. * ne_request.c (set_sockerr, ne_set_request_uri, build_request, open_connection): Use session->use_proxy field to determine whether proxy is used. (ne_request_create): Drop use of proxy_decider callback. (lookup_host): Moved here from ne_session.c. (ne_begin_request): Lookup server/proxy hostname if not already resolved. * ne_session.c (ne_session_create): Moved within file; takes scheme, and server hostname, port as arguments. (ne_ssl_enable, ne_session_decide_proxy, ne_session_server): Removed functions. (ne_get_scheme): Simply return scheme field. Fri Feb 1 23:12:38 2002 Joe Orton * ne_request.c (add_fixed_headers): Remove last traces of TLS upgrade support. Thu Jan 31 20:50:12 2002 Joe Orton * ne_private.h (struct ne_session_s): Rename use_secure to use_ssl; removed nssl_context, added SSL_CTX, server cert, verify callback pointers. * ne_request.c (send_request): Remove support for TLS upgrade. (open_connection): Use ne_negotiate_ssl; close socket properly if negotiation fails. * ne_session.c (ne_session_destroy): Free SSL_CTX stored in session. (ne_ssl_set_context, ne_ssl_set_verify, verify_err, getx509field, check_context, ne_negotiate_ssl, ne_ssl_server_cert): New functions. (ne_set_secure_context, ne_set_request_secure_upgrade, ne_set_accept_secure_upgrade): Removed functions. (ne_ssl_enable): Renamed from ne_set_secure. * ne_socket.c (struct nssl_context_s): Removed type. (sock_create_ssl_context, sock_destroy_ssl_context, sock_disable_*, key_prompt_cb, sock_set_key_prompt, sock_set_client_cert): Removed functions. (sock_enable_ssl_os): Renamed from sock_make_secure; take an SSL_CTX pointer, and optionally pass out the SSL structure. (sock_enable_ssl): New function. Wed Jan 30 19:47:42 2002 Joe Orton * ne_string.c (ne_buffer_concat, ne_buffer_zappend, ne_buffer_append, ne_buffer_grow): Don't return success value, presume universe ends at OOM. Sat Jan 26 10:57:42 2002 Joe Orton * ne_compress.c: Renamed enum state constants to have prefix NE_Z_, to avoid conflict with Windows headers (Branko Èibej). Mon Jan 14 20:26:31 2002 Joe Orton * ne_string.c (ne_concat): Removed function - it didn't work, and it wasn't used. Mon Jan 14 02:09:38 2002 Joe Orton * ne_basic.c (ne_content_type_handler): Parse charset parameter. Sun Jan 13 14:29:00 2002 Joe Orton * ne_basic.c (ne_content_type_handler): Remove trailing '/' from parsed type, fix search for parms separator (Greg Stein). Sun Jan 13 12:07:51 2002 Joe Orton * ne_207.c (ne_simple_request): Drop unused Content-Type handling. Thu Jan 10 00:39:17 2002 Joe Orton * ne_request.c (hdr_hash): Mark as inline. Tue Jan 8 22:03:42 2002 Joe Orton * ne_locks.c (add_timeout_header): New function. (ne_lock, ne_lock_refresh): Send a Timeout header if lock->timeout is set. Mon Jan 7 21:48:38 2002 Joe Orton * ne_locks.c (parse_timeout): Fix parsing lock timeout (Arun Garg). Mon Dec 17 22:46:36 2001 Joe Orton * ne_private.h (struct ne_session_s): Make expect100_works a plain integer (rather than a bitfield). Sun Dec 9 14:04:27 2001 Joe Orton * ne_string.c (ne_buffer_grow, ne_buffer_create_sized): Don't zero-fill new memory. (ne_buffer_concat): Zero terminate the string as _grow doesn't do it. Sun Dec 9 13:31:55 2001 Joe Orton * ne_string.c (ne_buffer_zappend): Minor optimisation; implement using ne_buffer_append. Sun Dec 9 13:18:35 2001 Joe Orton * ne_string.c (ne_buffer_concat): Optimise to use time O(n) [n == total string length). Sun Dec 9 11:57:56 2001 Joe Orton * Makefile.in (NEON_DAVOBJS): Remove ne_acl.o. Sat Dec 8 01:11:30 2001 Joe Orton * ne_request.c (ne_pull_request_body): Use NE_FMT_SIZE_T in debugging message; cast size_t to int to avoid GCC warning for field size parameter. (set_body_size): Use NE_FMT_SIZE_T. * ne_xml.c (ne_xml_parse): Similarly. Mon Dec 3 19:56:07 2001 Joe Orton * ne_session.c (ne_session_destroy): Return void. Sat Dec 1 18:37:43 2001 Joe Orton * ne_auth.c (ah_create): Reset attempt counter here... (ah_post_send): ...rather than here. Tue Nov 27 21:26:01 2001 Joe Orton * ne_request.c (send_with_progress): Actually call the callback; fix for correct sock_fullwrite return codes. Tue Nov 27 20:20:40 2001 Joe Orton * ne_private.h (VERSION_PRE11): Define macro; as ne_version_pre_http11. * ne_session.c (ne_version_pre_http11): Use VERSION_PRE11. * ne_request.c (add_fixed_headers, build_request, ne_end_request): Use VERSION_PRE11. Sun Nov 18 19:32:56 2001 Joe Orton * ne_locks.c (discover_results): Check status is 2xx before invoking callback; pass NULL lock and non-NULL status pointer in failure cases. (create_private): Initialize lock to some "value unspecified" defaults. Sun Nov 18 19:25:10 2001 Joe Orton * ne_auth.c (auth_session): Rename 'tries' field to 'attempt'. (get_credentials, ah_pre_send, ah_post_send): Increment attempt counter only when requesting credentials; reset it to zero when no auth failure is signaled. Sun Nov 18 15:49:00 2001 Joe Orton * ne_auth.h (ne_request_auth): Pass username and password as buffers of size NE_ABUFSIZ to callback. Add 'attempt' argument. * ne_auth.c (auth_session): Store username in buffer. (get_credentials, basic_challenge, digest_challenge): Updated for callback prototype changes. (ah_post_send): Request credentials, and retry authentication until callback returns non-zero. Mon Nov 12 20:57:56 2001 Joe Orton * ne_basic.c (get_to_fd): Really cope with short writes (thanks to rado ). Sun Nov 4 15:09:03 2001 Joe Orton * ne_props.h: Define NE_ELM_PROPS_UNUSED for picking element ids for use with the propfind XML parser. Sat Nov 3 19:06:04 2001 Joe Orton * ne_props.c (NSPACE): New macro. (set_body, pnamecmp, startelm, free_propset): Handle property having NULL nspace element in propfind code. Sun Oct 28 22:04:49 2001 Joe Orton * ne_xml.c (parse_element): Prevent false matches of found prefix "abcde" against stored prefix "abcdeFGH". Compare case-sensitively. Fri Oct 26 20:28:03 2001 Joe Orton * ne_request.c (send_request): Fix case where persistent connection times out, and improve error handling. Thu Oct 25 20:42:24 2001 Joe Orton * ne_props.c (ne_proppatch): Really handle properties with a NULL namespace correctly; use the "D:" prefix for elements in the "DAV:" namespace; allow properties to have no namespace. Tue Oct 16 08:54:46 2001 Joe Orton * ne_xml.c (parse_element): Fail the parse if a namespace prefix definition is given with an empty value. Tue Oct 16 08:52:40 2001 Joe Orton * ne_props.h, ne_207.h: Move ne_propname definition into ne_props.h. Tue Oct 16 08:49:42 2001 Joe Orton * ne_props.c (ne_proppatch): Handle properties with a NULL nspace field correctly. Sun Oct 7 19:31:06 2001 Joe Orton * ne_acl.c (ne_acl_set) [USE_DAV_LOCKS]: Notify use of resource to locking code. Sun Oct 7 17:45:01 2001 Joe Orton * ne_acl.c, ne_acl.h: New files, contributed by Arun Garg . * Makefile.in: Add ne_acl.* to build. Sun Oct 7 16:10:05 2001 Joe Orton * ne_private (struct ne_session_s): Add 'reqcount' field. * ne_request.c (send_request): Refactor slightly; don't loop, but return NE_RETRY when appropriate. Increment reqcount. (ne_begin_request): Loop if send_request returns NE_RETRY. (open_connection): Reset reqcount field. Tue Oct 2 21:11:39 2001 Joe Orton * ne_dates.c (GMTOFF): New macro. (ne_iso8601_parse, ne_rfc1123_parse, ne_rfc1036_parse, ne_asctime_parse): Use new macro, fix up date handling on some platforms. Sat Sep 29 14:20:47 2001 Joe Orton * ne_compress.c (gz_reader): Fix tests 4 and 7: don't try to inflate after reading header if no bytes are left in the buffer. Sat Sep 29 14:04:11 2001 Joe Orton * ne_compress.c: Fix API; return an opaque object which must be destroyed later. (ne_decompress_reader): Renamed from ne_gzip_response_body_reader. Doesn't need the session object passed in any more. (ne_decompress_destroy): Merge of co_destroy, co_post_end. Sat Sep 29 13:50:43 2001 Joe Orton * ne_request.c (ne_get_session): New function. Sat Sep 29 12:52:31 2001 Joe Orton * ne_compress.c (parse_header): Bail if flags are set to something unexpected. Sat Sep 29 11:15:30 2001 Joe Orton * ne_compress.c, ne_compress.h: New files. * Makefile.in: Add deps for ne_compress. Thu Sep 27 09:05:24 2001 Joe Orton * ne_redirect.c: Adapted for new hooks interface. * ne_cookies.c: Adapted for new hooks interface. (ne_cookie_register): New function. Thu Sep 27 09:01:03 2001 Joe Orton * ne_auth.c, ne_locks.c: Adapted for new hooks interface. Store pointer to per-request object in the per-session object. Thu Sep 27 08:48:16 2001 Joe Orton Re-write hooks interface to register callbacks individually rather than as a block. Inspired by the Apache 2.0/APR hooks interface. * ne_private.h (struct hook): Store a callback, userdata, id. (struct hook_request): Removed. (struct ne_session_s): Store hooks lists for create_req, pre_send, post_send, destroy_req, destroy_sess, accessor. (struct ne_request_s): Store accessor hooks list. * ne_request.c (ne_add_hooks): Removed. (ne_hook_create_request, ne_hook_pre_send, ne_hook_post_send, ne_hook_destroy_request, ne_hook_destroy_session, ne_hook_session_accessor, ne_hook_request_accessor, ne_null_accessor, call_access, add_hook): New functions. (ne_request_create, ne_request_destroy, build_request, ne_end_request): Adapt for new interface. * ne_session.c (destroy_hooks): New function. (ne_session_destroy): Use it to destroy hooks lists appropriately. Tue Sep 25 07:46:32 2001 Joe Orton * ne_xml.c: Only decode UTF-8 for parsers other than libxml 1.x. Tue Sep 25 07:33:09 2001 Mo DeJong * src/ne_socket.c: Include instead of . (sock_init): Only use signal() to ignore SIGPIPE if both HAVE_SIGNAL and HAVE_SIGPIPE are defined. Tue Sep 25 07:09:53 2001 Mo DeJong * ne_socket.c (sock_init): Declare local variables before invoking any instructions since that is not valid C code. Sun Sep 23 10:30:54 2001 Joe Orton * ne_auth.c (struct auth_challenge): Make members const. (clean_session): Free the realm string. (basic_challenge, digest_challenge): strdup the realm string. (request_digest): opaque is no longer stored quoted. (tokenize): New function. (verify_response, auth_challenge): Rejig to use tokenize(). Sat Sep 22 20:17:00 2001 Joe Orton * ne_string.c (ne_shave): Fix possible memory corruption when result should be the empty string. Thu Sep 20 21:27:57 2001 Joe Orton * ne_request.c (ne_pull_request_body): Add debugging dump of body blocks. Thu Sep 20 21:23:43 2001 Joe Orton * ne_private.h: Remove obsolete 'if_locks' member from struct ne_request_s. Tue Sep 18 23:35:30 2001 Joe Orton * ne_basic.c (ne_get_range): Handle write errors too. Tue Sep 18 22:14:49 2001 Joe Orton * ne_xml.h (ne_xml_validate_cb): Take userdata parameter. * ne_xml.c (find_handler): Pass validate callback the handler's userdata. * ne_207.c, ne_props.c, ne_locks.c: All users changed. Tue Sep 18 21:49:14 2001 Joe Orton * ne_locks.c (ne_lock_refresh): New function. Tue Sep 18 21:17:29 2001 Joe Orton * ne_basic.c (copy_or_move): Take a depth parameter, add depth header, for COPY requests. (ne_copy): Take depth parameter, pass through. (ne_move): Adjusted accordingly. Mon Sep 17 23:29:58 2001 Joe Orton * ne_utils.c (ne_debug_init): Set debug stream to be unbuffered if setvbuf() is available. Mon Aug 27 00:36:37 2001 Joe Orton * ne_207.c (start_element, end_element): Remember when context is valid for a , and only invoke callback then. Sun Aug 26 22:30:39 2001 Joe Orton * ne_basic.c (ne_get_range): Better error handling. Cope with Apache's 416 problem. Sun Aug 26 18:58:47 2001 Joe Orton * ne_auth.c: Store unquoted challenge parameters in session object, prevent having to unquote/free them >1 times. Sun Aug 26 18:57:51 2001 Joe Orton * ne_socket.c (sock_init): Do nothing on any calls after first. Sun Aug 26 12:45:04 2001 Joe Orton * ne_basic.c (server_hdr_handler): Remove function. (ne_options): Don't add server_hdr_handler. Tue Jul 17 11:25:06 2001 Joe Orton * ne_socket.c (sock_init): Set signal dispostion for SIGPIPE to ignore. Sat Jun 30 12:11:44 2001 Joe Orton * ne_utils.c (ne_supports_ssl): New function. Tue Jun 19 21:57:49 2001 Joe Orton * ne_dates.c (ne_iso8601_parse): Fix month off-by-one bug, use separate vars for offsets. (ne_rfc1036_parse): Fix Y2K bug, parsing problem. Tue Jun 19 21:57:42 2001 Joe Orton * ne_dates.c (ne_iso8601_parse): New function. Sun Jun 10 15:39:40 2001 Joe Orton * ne_request.c (send_with_progress): New function. (send_request_body): Use send_with_progress to trigger progress callbacks if necessary. Sat Jun 9 15:42:33 2001 Joe Orton * ne_string.h: Bring back NE_ASC2HEX/HEX2ASC. * ne_md5.c: Use them. Sat Jun 9 15:42:08 2001 Joe Orton * ne_xml.h: Include ne_defs.h. Fri Jun 8 23:02:49 2001 Joe Orton * ne_socket.h, ne_socket.c: Update for includes (Mo DeJong). Fri Jun 8 21:34:00 2001 Joe Orton * ne_basic.c (dav_hdr_handler): Use ne_token. Sat Jun 2 14:37:07 2001 Joe Orton * ne_private.h: Renamed from http_private.h. Sat Jun 2 14:35:23 2001 Joe Orton * ne_auth.c, ne_auth.h: Renamed from http_auth.c, ne_auth.h. Sat Jun 2 14:35:02 2001 Joe Orton * ne_cookies.c, ne_cookies.h: Renamed from http_cookies.c, http_cookies.h. Sat Jun 2 14:34:51 2001 Joe Orton * ne_dates.c, ne_dates.h: Renamed from dates.c, dates.h Sat Jun 2 14:22:49 2001 Joe Orton * ne_redirect.c, ne_redirect.h: Renamed from http_redirect.c, http_redirec.h. Big rename... s/http_/ne_g/ Sat Jun 2 12:54:51 2001 Joe Orton * ne_md5.c (md5_process_block): Fix for word alignment issue on Sparc from Kai Sommerfeld. Wed May 30 23:15:31 2001 Joe Orton * ne_basic.c (ne_put, ne_get, ne_put_if_unmodified, ne_get_range, ne_post): Take an integer fd rather than FILE * stream. (get_to_fd): Write to fd rather than stream. Wed May 30 23:08:55 2001 Joe Orton * ne_i18n.h, ne_i18n.c: Renamed from neon_i18n.h, neon_i18n.c. * *.c: All changed accordingly. Wed May 30 23:02:47 2001 Joe Orton * ne_defs.h: Renamed from neon_defs.h. * *.h: All changed accordingly. Wed May 30 22:58:57 2001 Joe Orton * ne_md5.c, ne_md5.h: Renamed from md5.c, neon_md5.h Wed May 30 22:55:19 2001 Joe Orton * ne_utils.h: In-line ne_debug for GCC which can cope with varargs preprocessor macros. Wed May 30 00:43:05 2001 Joe Orton * http_auth.c (ah_use_body): Removed function. (digest_body): New function. (request_digest): Use ne_pull_request_body to find the MD5 digest of the request body, when necessary. Wed May 30 00:30:52 2001 Joe Orton * http_redirect.c: Store Request-URI, session pointer, and method string in redirect object. Avoid looking inside ne_request/ne_session internals. Wed May 30 00:04:30 2001 Joe Orton * ne_request.c: Re-implement request body handling in terms of a callback which provides the request body blocks on demand. Remove 'use_body' hook, in favour of the hooks calling ne_pull_request_body when necessary. (ne_pull_request_body, body_fd_send, body_string_send): New functions. (send_request_body): Re-implemented using ne_pull_request_body. (run_set_body_hooks): Removed function. (ne_set_request_body_fd): Replacement for ne_set_request_body_stream, using a raw fd rather than a FILE *. Tue May 29 22:39:39 2001 Joe Orton * dav_basic.h, dav_basic.h: Removed. Tue May 29 22:38:54 2001 Joe Orton * ne_207.c (ne_simple_request, etc): Copied in from dav_basic.c. Tue May 29 22:12:23 2001 Joe Orton * ne_locks.c, ne_locks.h, ne_props.c, ne_props.h, ne_207.c, ne_207.h: Big rename. dav_* -> ne_*, and so on. Tue May 29 22:06:24 2001 Joe Orton * ne_basic.c (ne_add_depth_header): Moved from dav_basic.c. Tue May 29 21:55:30 2001 Joe Orton * ne_props.c, ne_props.h: Renamed from dav_props.c, dav_props.h. Tue May 29 21:43:15 2001 Joe Orton * ne_207.c, ne_207.h: Renamed from dav_207.c, dav_207.h. Tue May 29 21:22:25 2001 Joe Orton * ne_locks.c, ne_locks.h: Renamed from dav_locks.c, dav_locks.h. Tue May 29 21:21:44 2001 Joe Orton * ne_socket.c (sock_fullwrite): Cast return value of SSL_write to size_t to prevent comparison of signed with unsigned. Tue May 29 21:05:27 2001 Joe Orton * ne_basic.c [!NEON_NODAV]: Move ne_copy, ne_mkcol, ne_move, ne_delete in here. Tue May 29 20:12:50 2001 Joe Orton * ne_uri.c, ne_uri.h: Renamed from uri.c, uri.h. Tue May 29 19:17:09 2001 Joe Orton * ne_socket.c, ne_socket.h: Renamed from socket.c, nsocket.h. Tue May 29 18:58:51 2001 Joe Orton * ne_basic.c (ne_mkcol, ne_copy, ne_move, ne_delete): Renamed from dav_*. Tue May 29 17:58:09 2001 Joe Orton * ne_basic.c (copy_or_move, dav_copy, dav_move, dav_delete, dav_mkcol): Copied in from dav_basic.c. Tue May 29 17:55:33 2001 Joe Orton * ne_basic.c, ne_basic.h: Renamed from http_basic.c, http_basic.h. Tue May 29 17:47:50 2001 Joe Orton * http_auth.c (ah_create, ah_pre_send): Add the response body handler in pre_send, and only if qop=auth-int. Wed May 16 20:54:51 2001 Joe Orton * ne_request.c (ne_get_request_headers): Removed function. Sat May 12 18:48:46 2001 Joe Orton * ne_request.c (read_message_header, read_response_headers): Use a fixed-size char * buffer argument rather than an ne_buffer. Append directly to it when header-folding. Mon May 7 10:42:38 2001 Joe Orton * ne_string.c (ne_token): Use an optimized search (strchr) if quotes is NULL. Mon May 7 01:33:48 2001 Joe Orton * http_auth.c (basic_challenge, get_cnonce): Updated for ne_base64 change. Mon May 7 01:32:22 2001 Joe Orton * base64.c (ne_base64): Take length parameter. [BASE64_TEST] (main): Remove function, obsoleted by test code. Wed May 2 12:06:59 2001 Joe Orton * ne_string.c, ne_string.h (ne_token, ne_shave): New functions, destined to replace split_string, shave_string, etc. * ne_string.c [SPLIT_STRING_TEST, PAIR_STRING_TEST] (main): Remove tests, functions are obsolete. Tue May 1 22:14:14 2001 Joe Orton * dates.c (ne_httpdate_parse): Moved from ne_utils.c. Tue May 1 21:55:45 2001 Joe Orton * ne_utils.c, ne_utils.h: Renamed from http_utils.c, http_utils.h. Big rename. http_* -> ne_*. neon_* -> ne_*. DEBUG() -> NE_DEBUG(). DEBUG_* -> NE_DBG_*. Tue May 1 21:35:10 2001 Joe Orton * ne_request.c: Updated for ne_buffer changes. Tue May 1 21:28:58 2001 Joe Orton * ne_string.h (ne_buffer_size): Implement as macro. * ne_string.c (ne_buffer_size): Remove function. Tue May 1 21:23:47 2001 Joe Orton * ne_string.c, ne_string.h: Make ne_buffer a transparent type, and no longer be an implicit pointer type. (ne_buffer_*): All changed. (ne_buffer_data, NE_BUFFER_CAST): Removed. Tue May 1 21:17:40 2001 Joe Orton * ne_string.c, ne_string.h: Renamed sbuffer -> ne_buffer. Implicit pointer removed ne_buffer type. Tue May 1 21:12:15 2001 Joe Orton * ne_string.c, ne_string.h: Renamed from string_utils.c, string_utils.h (CVS copy'n'delete). Tue May 1 20:49:46 2001 Joe Orton * md5.c (ASC2HEX, HEX2ASC): Moved here from string_utils.h. * string_utils.h: As above. Tue May 1 20:47:20 2001 Joe Orton * http_request.c, http_request.h: Removed files. * ne_request.c, ne_request.h: Copied from old http_request.[ch]. Renamed http_* -> ne_*. Tue May 1 20:43:11 2001 Joe Orton * hip_xml.c renamed to ne_xml.c, hip_xml.h renamed to ne_xml.h: CVS repository copy'n'delete. Tue May 1 20:41:03 2001 Joe Orton * hip_xml.c, hip_xml.h: Big rename. hip_xml_* -> ne_xml_*. Tue May 1 20:37:13 2001 Joe Orton * http_basic.c, http_basic.h: Big rename. http_* -> ne_*. Tue May 1 19:59:01 2001 Joe Orton * ne_session.c: Renamed http_* to ne_*. Tue May 1 19:55:47 2001 Joe Orton * ne_alloc.h (NE_FREE): Renamed from HTTP_FREE() in http_utils.h Tue May 1 19:54:42 2001 Joe Orton * socket.c (sock_make_secure): Set SSL_MODE_AUTO_RETRY when available. Mon Apr 30 00:36:34 2001 Joe Orton * ne_session.[ch]: New files, split down from http_request.[ch]. Sun Apr 29 15:02:23 2001 Joe Orton * uri.c [URITEST] (main): Remove, obsoleted by new test suite. Sun Apr 29 15:01:30 2001 Joe Orton * uri.c (uri_has_trailing_slash): Return false if uri is "". Sun Apr 29 13:53:41 2001 Joe Orton * dates.c (ne_asctime_parse, ne_rfc1123_date, ne_rfc1036_parse): Set tm_isdst to -1 in struct tm. Sun Apr 29 13:28:26 2001 Joe Orton * http_utils.c (http_parse_statusline): Skip leading whitespace. (Johan Lindh). (http_parse_statusline): Ensure status-code is not more than three digits. Sun Apr 29 13:26:47 2001 Joe Orton * http_request.c (build_request): Don't add "Content-Length: 0" header if no body: Squid 2.3-STABLE1 doesn't like this. Sun Apr 29 13:25:16 2001 Joe Orton * http_auth.c (everywhere): Renamed md5_* -> ne_md5_*. Sun Apr 29 13:24:12 2001 Joe Orton * md5.c: Renamed md5_* -> ne_md5_*. (ne_ascii_to_md5, ne_md5_to_ascii): Moved from string_utils.c. Thu Apr 26 22:39:05 2001 Joe Orton * uri.c (uri_parse): A zero-length URI is invalid. Wed Apr 25 23:11:51 2001 Joe Orton * dav_props.c (startelm): Check for xml:lang attribute and store as prop->lang. (dav_propset_lang): New function. (free_propset): Free lang. Wed Apr 25 23:08:52 2001 Joe Orton * hip_xml.c (hip_xml_get_attr): New function. Sun Apr 22 21:48:06 2001 Joe Orton * uri.c (uri_parse): Skip a userinfo@ segment if present (Johan Lindh ). Wed Apr 18 13:29:46 2001 Joe Orton * dav_locks.c (dav_lock_copy): Allow owner to be NULL. Tue Apr 17 22:57:50 2001 Joe Orton * ne_alloc.h, dav_locks.h: Add C++ inclusion safety. Tue Apr 17 22:56:50 2001 Joe Orton * uri.c (uri_parse): Correctly handle URIs with no scheme or hostport segments (i.e. just a path). Tue Apr 10 00:29:25 2001 Joe Orton * socket.c [HAVE_SOCKS_H]: Include socks.h for SOCKSv5 support. Wed Apr 4 21:41:47 2001 Joe Orton * http_utils.h [WIN32]: Define ssize_t (Kai). Tue Apr 3 21:03:28 2001 Joe Orton * dav_locks.c (dav_lock_discover): Cope with below API change. Tue Apr 3 20:43:50 2001 Joe Orton * dav_props.c (propfind): Register the flat element handler here, to pick up *any* properties and store them as 'flat' if they are not handled by a handler further down the stack. (make_elms, free_elms, dav_propfind_set_flat, dav_propfind_set_complex): Removed functions. (dav_propfind_named): Take the list of property names, and call set_body here. (dav_propfind_set_private): New function. Tue Apr 3 09:33:09 2001 Joe Orton * http_auth.h: Added C++ inclusion safety. (Kai Sommerfeld) Mon Apr 2 02:39:18 2001 Joe Orton * hip_xml.c (sax_error): Add parse error callback for libxml. Mon Apr 2 02:23:06 2001 Joe Orton * http_redirect.c (post_send): Clean up and fix logic. Only check for confirmation for same-server redirects. Mon Apr 2 02:13:48 2001 Joe Orton * http_redirect.c (http_redirect_location): New function. (destroy): Removed function. (create): Free location. (post_send): Only call notify callback for followed redirects. Mon Apr 2 01:55:27 2001 Joe Orton * http_request.c (http_set_request_uri): Allow using the '*' URI even when using a proxy server. Mon Apr 2 01:32:06 2001 Joe Orton * http_redirect.c (post_send): Give up on trying to follow a redirect to another server. Return HTTP_REDIRECT on such a redirect. * http_redirect.c (post_send): Fix leaks of URI object (Kai Sommerfeld). Mon Apr 2 01:08:33 2001 Joe Orton * http_request.c (read_response_headers): Don't read more than 100 response headers. Mon Apr 2 00:54:43 2001 Joe Orton * http_request.c (http_request_dispatch): Remove mapping of auth status codes to return values, the hook does it now. Mon Apr 2 00:53:20 2001 Joe Orton * http_request.c (http_set_request_uri): New function, split out from http_request_create. (http_request_create): Use it. Mon Apr 2 00:51:23 2001 Joe Orton * http_auth.c (http_set_proxy_auth, http_set_server_auth): Add failure codes. (ah_post_send): Return failure code if authentication fails. Mon Apr 2 00:19:17 2001 Joe Orton * http_utils.c: Pick up xmlversion.h from libxml2. (neon_version_string): Include libxml2 version string if defined. Sun Apr 1 21:40:00 2001 Joe Orton * http_basic.c (http_get_range): Fix total length calculation. (Johan Lindh ). (clength_hdr_handler): Use range->total. Sun Apr 1 21:26:09 2001 Joe Orton * hip_xml.c: Add expat2 support (Sam TH ). Sun Apr 1 21:07:19 2001 Joe Orton * string_utils.h (CONCAT2, CONCAT3, CONCAT4): Use ne_malloc. Sun Apr 1 20:59:09 2001 Joe Orton * dav_props.c (propfind, dav_proppatch): As below. Sun Apr 1 20:32:29 2001 Joe Orton * http_basic.c (http_post): Changed as per http_set_request_body_buffer change. * dav_locks.c (dav_lock): Likewise. Sun Apr 1 20:31:06 2001 Joe Orton * http_request.c (http_set_request_body_buffer): Pass in size parameter too. (send_request_body): Use sized rather than NUL-terminated buffer. Sun Apr 1 20:12:51 2001 Joe Orton * http_private.h: Added 'body_callback' request body type, and body_cb, body_ud fields to http_req. * http_request.c (http_set_request_body_provider): New function. (set_body_size): New function, factored out from old http_set_request_body_*. (http_set_request_body_stream, http_set_request_body_buffer): Use it. Sun Apr 1 19:56:17 2001 Joe Orton * dav_props.c: Replaced 'uri' and 'depth' fields in propfind handler object with an 'http_req' pointer. (dav_propfind_create): Create the request object here, and set the depth header. (propfind): Changed accordingly. (dav_propfind_destroy): Destroy request object too. * dav_props.c (dav_propfind_get_request): New function. Fri Mar 30 16:50:51 2001 Joe Orton * hip_xml.c (start_element): Quote attributes in collect (Kai Sommerfeld). Fri Mar 30 16:36:08 2001 Joe Orton * http_basic.c (http_put_if_unmodified): Changed as below. Thu Mar 22 14:05:52 2001 Joe Orton * http_utils.c (http_dateparse): Changed as below. * http_auth.c (get_conce, basic_challenge): Likewise. Thu Mar 22 14:04:54 2001 Joe Orton * dates.c (ne_rfc1123_date, ne_rfc1123_date, ne_asctime_parse, ne_rfc1036_parse): Added ne_ prefix. Thu Mar 22 14:03:12 2001 Joe Orton * base64.c (ne_base64): Renamed from base64. Tue Mar 20 20:34:44 2001 Joe Orton * dav_props.c (make_elms): Don't request UTF-8 decoding of property values. Tue Mar 20 20:33:39 2001 Joe Orton * string_utils.c (ne_utf8_decode): New function. Mon Mar 19 22:08:45 2001 Joe Orton * http_basic.c (get_callback): Removed function. (http_get, http_read_file, http_post): Use callbacks directly rather than indirectly through get_callback. Mon Mar 19 21:55:19 2001 Joe Orton * http_request.c (notify_status, http_set_status, http_set_progress): New functions: request status and progress callbacks. (open_connection, lookup_host): Use notify_status to trigger status callbacks, and register socket progress callbacks. Mon Mar 19 21:53:07 2001 Joe Orton * socket.c (sock_register_notify): Removed function. (sock_connect_u): Renamed to sock_connect. (sock_register_progress): Per-socket progress callbacks rather than global ones. (sock_call_progress): Take socket argument. (all callers changed). Mon Mar 19 21:52:50 2001 Joe Orton * socket.c (sock_get_version): New function. Mon Mar 19 13:59:21 2001 Joe Orton * dav_props.c (propfind): Destroy the handler. Mon Mar 19 13:36:55 2001 Joe Orton * dav_props.c (dav_propnames): New function. Wed Mar 14 22:42:12 2001 Joe Orton * http_request.h (http_begin_request, http_end_request, http_read_response_block): New functions. (http_request_dispatch): Reimplemented using new caller-pulls interface. Wed Mar 14 22:20:38 2001 Joe Orton * http_auth.c (ah_post_send): If authentication fails (i.e. bad credentials), clean the session details. Wed Mar 14 20:46:55 2001 Joe Orton * http_auth.c: Retry the request simply if it has not been tried before with authentication details, otherwise, fail on 40[17]. Wed Mar 14 20:12:52 2001 Joe Orton * http_request.c (open_connection): Make sure to close the connection, and return HTTP_CONNECT if the SSL negotiation fails. Tue Mar 6 18:37:43 2001 Joe Orton * ne_alloc.c (ne_strndup): Allocate n+1 bytes not 'n' (Kai Sommerfeld). Mon Mar 5 01:05:31 2001 Joe Orton * http_request.c: Moved local sbuffer variables of http_request_dispatch into http_req members 'reqbuf' and 'respbuf'. (build_request): Return a const char * of the request. (send_request): Call build_request directly, use req->respbuf. (http_request_dispatch): Don't call build_request. Removed 'goto' exception handling (hoorah). (http_request_create, http_request_destroy): Create and destroy reqbuf and respbuf here. Mon Mar 5 00:43:40 2001 Joe Orton * http_request.c (http_set_request_body_stream): Set req->body_size and Content-Length header here: return success value. (http_set_request_body_buffer): Likewise (but no return value). (get_request_bodysize): Removed function. (build_request): Add Content-Length: 0 header if no request body. Mon Mar 5 00:27:24 2001 Joe Orton * http_auth.c (http_forget_auth): New function. Mon Mar 5 00:25:15 2001 Joe Orton * http_request.c (http_request_hook_private): Renamed from http_get_hook_private. (http_session_hook_private): New function. * dav_locks.c (dav_lock_using_resource, dav_lock_using_parent): Renamed simiarly. Sun Mar 4 23:12:12 2001 Joe Orton * http_auth.c: Moved per-request state into struct auth_request. (request_digest): Take struct auth_request argument. (free_auth): New function. (http_add_hooks): Pass free_auth as cleanup function for auth session. Sun Mar 4 23:08:46 2001 Joe Orton * http_redirect.c (auto_redirect): Auto-redirect OPTIONS requests. (free_redirect): New function. (http_redirect_register): Pass cleanup function. Sun Mar 4 23:07:01 2001 Joe Orton * dav_locks.c (dav_lock_unregister): Removed function. (free_locks): New function. (dav_lock_register): Pass free_locks as cleanup function for hooks. Sun Mar 4 22:54:57 2001 Joe Orton * http_request.h (http_add_hooks): Added fourth argument to register a cleanup function for the cookie. Sun Mar 4 19:53:03 2001 Joe Orton * http_auth.c (request_digest): Use an sbuffer to create the header value. Sun Mar 4 19:44:18 2001 Joe Orton * http_auth.c: Remove namespace protection for private functions. s/http_auth/auth/g. Sun Mar 4 19:39:13 2001 Joe Orton * http_auth.c (ah_pre_send): Increase attempt counter here, ... (ah_post_send): instead of here. Sun Mar 4 18:40:03 2001 Joe Orton * http_request.c (http_request_dispatch): Simplify post_send hook invocation: run them until one doesn't return HTTP_OK. Don't run pre_send hooks here. Loop while a hook returns HTTP_RETRY. (build_request): Run pre_send hooks here. * http_request.c (read_response_body): Call normalize_response_length here. Sun Mar 4 18:12:26 2001 Joe Orton Re-implemented HTTP authentication using generic hooks interface. * http_auth.c: Added http_auth.h. (http_auth_init, http_auth_set_creds_cb, http_auth_new_request, http_auth_request_header): Removed functions, merged into new hooks code. (ah_create, ah_post_send, ah_pre_send, ah_use_body, ah_destroy): New functions. (auth_body_reader, http_set_server_auth, http_set_proxy_auth): Moved over from http_request.c and redone for hooks interface. * http_request.c (http_set_server_auth, http_set_proxy_auth, give_creds, auth_body_reader): Moved to http_auth.c. (http_accept_always): Renamed from always_accept_response and made public. (http_request_create, build_request, http_request_dispatch): Removed authentication code. Tue Feb 27 19:49:42 2001 Joe Orton * dav_props.c (set_body): Remove UTF-8 encoding again. Mon Feb 26 22:38:41 2001 Joe Orton Patch from Kai Sommerfeld to remove URI escaping from inside neon. * dav_207.c (end_element): Don't unescape href elements. * http_request.c (http_request_create): Don't escape Request-URI. * dav_basic.c (copy_or_move): Don't escape destination URI. Mon Feb 26 21:44:56 2001 Joe Orton * dav_props.c (set_body): UTF-8 encode the property name and value. (make_elms): Request UTF-8 decoding of property values. Mon Feb 26 21:40:14 2001 Joe Orton * hip_xml.c: Do perform UTF-8 decoding when using libxml. (char_data): Fix UTF-8 decoding bug where the byte after a multi-byte encoded sequence would be skipped. Sun Feb 25 20:04:05 2001 Joe Orton * string_utils.c (ne_utf8_encode): New function. Sun Feb 25 19:52:01 2001 Joe Orton * ne_alloc.c (ne_realloc): New function. Sun Feb 25 17:00:32 2001 Joe Orton * Makefile.in (all): Rename NEON_IS_BUNDLED to NEON_BUILD_BUNDLED. Sun Feb 25 16:52:43 2001 Joe Orton * Makefile.in (all): Build according to NEON_IS_BUNDLED. Fri Feb 23 23:38:10 2001 Joe Orton * Makefile.in: Fix deps: neon_config.h has gone. Fri Feb 23 22:57:47 2001 Joe Orton * dav_props.c (dav_simple_propfind): Support a NULL 'props' argument to do an allprop request, as per the advertising literature. Register a catch-all handler in this case. Fri Feb 23 22:16:42 2001 Joe Orton * http_request.c (http_session_destroy): Free up hooks list. Thu Feb 22 21:54:36 2001 Joe Orton * http_request.h (http_add_hooks): Make request_hooks 'const'. Thu Feb 15 08:36:56 2001 Joe Orton * http_request.c (read_response_body): Accept SOCK_CLOSED as end-of-response if we don't have a Content-Length (and not chunked). (Kai Sommerfeld). Thu Feb 15 08:36:23 2001 Joe Orton * http_request.c (add_fixed_headers): Don't add the Host header here. (http_request_dispatch): Add it here instead. * http_request.c (set_hostinfo): Dup the hostname. (http_session_destroy): Free the hostname. (Kai Sommerfeld). Thu Feb 15 08:35:49 2001 Joe Orton * http_private.h: Make hostname in struct host_info char *. (Kai Sommerfeld). Thu Feb 15 08:08:50 2001 Joe Orton * http_redirect.h: Add C++ header-inclusion safety macros (Kai Sommerfeld ). Wed Feb 14 23:37:57 2001 Joe Orton * http_request.c (read_response_body): Use a size_t for readlen, as read_response_block requires. Wed Feb 14 23:25:44 2001 Joe Orton * http_auth.c (request_digest): Fix incorrect signed-ness of buffer. Wed Feb 14 23:22:13 2001 Joe Orton * uri.h, string_utils.h: Comment-out tokens after #endif. Sun Feb 4 14:36:11 2001 Joe Orton * http_redirect.c (post_send): Prototype change. Sun Feb 4 14:31:42 2001 Joe Orton * socket.c: Added key_prompt, key_userdata, key_file to nssl_context. (sock_set_key_prompt, key_prompt_cb): New functions. (sock_make_secure): Set ctx->key_file to private key filename. Sun Feb 4 13:31:44 2001 Joe Orton * http_request.h: Make http_status argument of post_send a const pointer. Sun Feb 4 10:38:12 2001 Joe Orton * http_request.c (set_sockerr): Only use the socket error if it is NULL, else print generic "something went wrong"-type error message. Sun Feb 4 10:29:37 2001 Joe Orton * socket.c (sock_set_client_cert): Call SSL_CTX_check_private_key to ensure that the cert and private key match. Sun Feb 4 10:28:02 2001 Joe Orton * socket.c (sock_make_secure): In error cases after SSL_connect succeeds, call SSL_shutdown and assign sock->ssl = NULL before returning. Sat Feb 3 18:33:56 2001 Joe Orton * socket.c (sock_close): Call SSL_shutdown before close()'ing the fd. Sat Feb 3 18:30:48 2001 Joe Orton * socket.c: Store an default SSL_CTX in nsocket, to be used when no nssl_context is supplied. (create_socket): Create default SSL_CTX (sock_close): Free it here. (sock_make_secure): Use it here. Sat Feb 3 15:52:15 2001 Joe Orton * socket.c (sock_set_client_cert): New function. Sat Feb 3 15:48:51 2001 Joe Orton * socket.c: Rejig of nssl_context handling. An nssl_context is now really a wrapper for an SSL_CTX. (sock_create_ssl_context): Create the SSL_CTX here. (sock_disable_tlsv1, sock_disable_sslv2, sock_disable_sslv3): Set the SSL_CTX option directly. (sock_make_secure): Create an SSL_CTX if no nssl_context is supplied, otherwise use SSL_CTX from nssl_context. Sun Jan 28 13:52:03 2001 Joe Orton * http_utils.c (neon_version_minimum): New function. Sun Jan 28 10:37:28 2001 Joe Orton * neon_config.h.in: Removed file. * http_request.c, http_utils.c: Don't include neon_config.h. Sat Jan 27 22:52:37 2001 Joe Orton * socket.c: Use closesocket() as NEON_CLOSE (Markus Fleck ). Sat Jan 27 22:35:16 2001 Joe Orton * hip_xml.c: Add 'char_data' as libxml cdataBlock handler. Tue Jan 23 23:17:00 2001 Joe Orton * neon_config.h.in: Renamed from neon_config.h. Define NEON_VERSION_MAJOR and NEON_VERSION_MINOR too: all picked up from the NEON_VERSIONS macro. Sun Jan 21 22:07:34 2001 Joe Orton * string_utils.c (ne_concat): New function. Thu Jan 18 22:25:34 2001 Joe Orton * ne_alloc.h: Added ne_oom_callback. * ne_alloc.c: Added DO_MALLOC macro to do the malloc and oom callback test. (ne_malloc): Use DO_MALLOC. (ne_strdup, ne_calloc, ne_strndup): Reimplement using DO_MALLOC rather than calling ne_malloc(). Tue Jan 16 20:16:35 2001 Joe Orton * neon_config.h: Bumped version to 0.10.1. Tue Jan 16 20:14:40 2001 Joe Orton * http_request.c (http_session_create): Default expect-100 support to OFF. Mon Jan 15 22:59:33 2001 Joe Orton * neon_config.h: Bumped version to 0.10.0. Mon Jan 15 22:58:04 2001 Joe Orton * dav_basic.c (dav_simple_request): Use dav_207_ignore_unknown. Sun Jan 14 22:52:31 2001 Joe Orton * dav_props.c (propfind): Call dav_207_ignore_unknown. Sun Jan 14 22:49:06 2001 Joe Orton * dav_207.c: Don't handle unknown elements in normal handler. (ignore_cc, dav_207_ignore_unknown): New functions, for ignoring any unknown elements in the parse. Sun Jan 14 21:53:00 2001 Joe Orton * hip_xml.c: Renamed 'handlers' back to top_handlers. (push_handler): Now, p->root->handlers points to BASE of stack, p->top_handlers points to TOP of stack. (hip_xml_destroy): Changed to start from new BASE of stack. Sun Jan 14 10:50:09 2001 Joe Orton * http_request.c (http_session_server): Do perform the DNS lookup if we have a proxy_decider function, since that means we MIGHT need to know the IP address of the origin server. (http_request_create): Pass the real scheme back to the proxy decider callback. Wed Jan 10 22:43:16 2001 Joe Orton * Makefile.in: Rename OBJ_EXT to NEON_OBJEXT. Remove NEON_INTERFACE_VERSION, use NEON_LINK_FLAGS instead. Wed Jan 10 22:02:02 2001 Joe Orton * dav_locks.c (create_private): New function. (dav_lock_discover): Switch to using new dav_propfind_set_complex API. Wed Jan 10 21:59:36 2001 Joe Orton * dav_props.h (dav_propfind_set_complex): Switch the 'sizeof_private' argument for a callback 'creator': the return value of this callback is used as the 'private' field for the current resource. Mon Jan 8 22:09:55 2001 Joe Orton * dav_locks.h (dav_lock_result): Re-order arguments. Make lock object const. * dav_locks.c (dav_lock_copy): New function. (discover_results): Set lock->uri given href for current results. Free lock object after passing to results. Sun Jan 7 21:55:14 2001 Joe Orton * dav_locks.c (dav_lock): Destroy XML parser after use. Remove handling of Lock-Token header: it wasn't used and it leaked. Sun Jan 7 19:58:29 2001 Joe Orton * dav_props.c (free_propset): Free the property values, and the result set URI too. Sun Jan 7 16:58:19 2001 Joe Orton * http_request.c (read_response_block): Fix handling of SOCK_CLOSED from sock_read as end-of-connection. Sat Jan 6 15:02:57 2001 Joe Orton * hip_xml.c (struct hip_xml_parser): Renamed 'top_handlers' to 'handlers' in hip_xml_parser. (push_handler): New function. (hip_xml_push_handler, hip_xml_push_mixed_handler): Use push_handler. * hip_xml.c (find_handler): Begin the search for a new handler from the handler of the current (parent) element, and work up the stack. Sat Jan 6 11:15:17 2001 Joe Orton * hip_xml.c (find_handler): Display error message for unknown XML element as 'elmname (in nspace)' rather than 'nspace:elmname' since the latter produces confusing errors like 'DAV::displayname'. Wed Jan 3 21:34:44 2001 Joe Orton * Makefile.in: Hard-code top_builddir as '..' (possibly wrong, but true for all neon apps so far). Remove INCLUDES, now unused. Add top_srcdir. Fri Dec 22 22:51:27 2000 Joe Orton * dav_props.c: Added 'has_props' field to propfind_handler struct. (set_body): Only add leading 'prop' element if has_props is not set. Set has_props. Don't add trailing element here. (dav_propfind_named): ... add it here instead. (dav_propfind_set_complex, dav_propfind_set_flat): New set_body interface. Fri Dec 22 21:10:39 2000 Joe Orton * socket.c (sock_transfer): Don't use NEON_READ here, this is for reading from a non-socket fd. Wed Dec 20 00:19:34 2000 Joe Orton * neon_config.h: Bumped version to 0.9.1. Wed Dec 20 00:19:09 2000 Joe Orton * dav_props.c (free_propset): Don't free the private structure, make this the caller's responsibility. Wed Dec 20 00:12:36 2000 Joe Orton * dav_props.c (end_propstat): Rename propstat argument to 'pstat_v' to kill warnings. Tue Dec 19 23:42:39 2000 Joe Orton * dav_props.c (start_response): Zero-out the private structure on creation. Tue Dec 19 22:54:06 2000 Joe Orton * http_request.c (read_response_block): Rename local variable 'socket' to 'sock'. Tue Dec 19 22:52:56 2000 Joe Orton * http_request.h: Rename argument from 'stat' in post_send definition. Tue Dec 19 22:52:32 2000 Joe Orton * http_utils.h: Add 'const' to char * argument. Tue Dec 19 22:19:28 2000 Joe Orton * neon_config.h: Bumped version to 0.9.0. Tue Dec 19 22:12:19 2000 Joe Orton * Makefile.in: New file. Tue Dec 19 22:07:50 2000 Joe Orton * Makefile.incl: Removed file. Tue Dec 19 22:06:06 2000 Joe Orton * dav_locks.c (dav_lock_discover): New callback-based lock discovery interface. Re-implemented using new propfind interface. Tue Dec 19 21:22:43 2000 Joe Orton * dav_props.h: Replace old dav_propfind_* interface with better one. (dav_simple_propfind): Renamed from dav_get_props. (dav_propfind_current_private, dav_propfind_set_complex, dav_propfind_set_flat): New functions. (dav_propfind_get_current_resource): Removed function. (dav_propfind_named, dav_propfind_allprop): Change second argument to be the results callback. * dav_props.c: Replace implementatino of old interface with new one. (dav_simple_propfind): Re-implemented on top of new all-singing all-dancing dav_propfind_* interface. Sun Dec 17 18:24:50 2000 Joe Orton * dav_props.c: Add dav_get_props, and all its auxiliaries. Sun Dec 17 15:43:55 2000 Joe Orton * dav_props.c (propfind): Destroy the request after calling http_get_status. Sun Dec 17 18:04:58 2000 Joe Orton * hip_xml.c (find_handler): Allow using NULL as name and nspace in HIP_ELM_unknown elements. Sun Dec 17 18:03:03 2000 Joe Orton * dav_207.c (check_context): Don't handle the unknown element when it is a child of the prop element, this prevents handling allprop responses. Thu Dec 14 21:48:06 2000 Joe Orton * neon_config.h: Bumped version to 0.8.0. Thu Dec 14 21:43:31 2000 Joe Orton * dav_basic.c, dav_locks.c, dav_props.c (everywhere): Changed to new response-status interface, and _class->klass change. Thu Dec 14 21:37:38 2000 Joe Orton * http_request.c (http_get_status): Add new response-status interface. Thu Dec 14 21:30:25 2000 Joe Orton * http_basic.c (everywhere): Use new status interface. Thu Dec 14 21:25:03 2000 Joe Orton * http_private.h: Made http_status pointer in http_req a declared object. * http_request.h: Removed passing status pointer to http_request_dispatch. * http_request.c (everywhere): Removed passing extra http_status * to auxiliaries, use req->status instead. Renamed '_class' to 'klass' everywhere. Thu Dec 14 21:15:54 2000 Joe Orton * http_utils.h: Renamed '_class' member of http_status to 'klass'. (http_parse_statusline): Change accordingly. Wed Dec 13 23:00:23 2000 Joe Orton * socket.c: Changes for pre-BONE BeOS (David Reid ). Wed Dec 13 21:29:36 2000 Joe Orton * uri.c (ESCAPE): Explicitly cast the character to const unsigned int. (uri_abspath_escape): Make 'pnt' a normal const char *. Wed Dec 13 21:17:31 2000 Joe Orton * http_request.c: Remove netinet/in.h include, add limits.h include. (Peter Boos) (read_response_block): Make readlen a size_t (David Reid). Wed Dec 13 21:08:08 2000 Joe Orton * ne_alloc.h [WIN32]: Include stdlib.h. (Peter Boos) Wed Dec 13 20:54:27 2000 Joe Orton Patches from Peter Boos and David Reid for Win32 and BeOS changes respectively: * socket.c: Add NEON_READ, NEON_WRITE, NEON_CLOSE macros to use send/recv/closesocket for BeOS, send/recv/close for Win32, write/read/close otherwise. Include WinSock2.h in Windows. Add arpa/inet.h check. (sock_read, sock_write): Use the NEON_ macros. (sock_connect, sock_close): Use NEON_CLOSE. (sock_init): Winsock initialization. (sock_exit) Winsock cleanup. (sock_fullwrite): Use size_t rather than ssize_t for 'sent'. (sock_connect, sock_connect_u): Make 'port' parameter an unsigned short int. Wed Dec 13 20:42:18 2000 Joe Orton * http_basic.c (clength_hdr_handler): Use an off_t for len, to avoid comparison with size_t. Wed Dec 13 20:38:59 2000 Joe Orton * hip_xml.c (char_data): Use an 'int' for wslen, avoid comparison between size_t (which is signed) and int (which [is|might be?] unsigned). Wed Dec 13 20:29:12 2000 Joe Orton * nsocket.h [WIN32]: Use Windows headers rather than Unixy ones. (sock_exit): New function. Wed Dec 13 20:21:22 2000 Joe Orton * string_utils.c, string_utils.h, uri.h: Includes change (Peter Boos). Wed Dec 13 20:20:09 2000 Joe Orton * http_auth.c (http_auth_response_body): Don't make inline. Includes change. (both by Peter Boos). Wed Dec 13 20:18:38 2000 Joe Orton * uri.c (uri_unescape): Cast strtol return to (char). Includes change as below (both by Peter Boos). Wed Dec 13 20:07:38 2000 Joe Orton * base64.c, dates.c, dates.h, dav_207.c, dav_207.h, dav_basic.h, dav_locks.h, hip_xml.h, http_auth.h, http_basic.h, http_cookies.c, http_redirect.c, http_redirect.h, http_request.h, http_utils.c, md5.c, ne_alloc.c: Use #include "..." rather than #include <...> for neon headers. (Peter Boos ). Thu Dec 7 21:45:02 2000 Joe Orton * socket.c (sock_read): Return zero immediately if a zero count parameter is passed, following SUSv2 semantics. Thu Dec 7 21:41:36 2000 Joe Orton * nsocket.h (sock_readfile_blocked): Define an interface, allow taking -1 as the length parameter. Only return SOCK_CLOSED if length == -1 is NOT passed. Sun Nov 26 09:46:53 2000 Joe Orton * nsocket.h: Fix use of 'socket' in function prototypes. Sun Nov 19 00:29:48 2000 Joe Orton * nsocket.h: Increase read timeout to 120 seconds. Sun Nov 5 14:42:46 2000 Joe Orton * dav_locks.c: Fix element id's (fixes segfault when using locks). Thu Oct 26 22:28:17 2000 Joe Orton * socket.c (sock_peek): Return SOCK_CLOSED if recv() returns zero. Thu Oct 26 22:24:14 2000 Joe Orton * socket.c (sock_block): Return "got data" if SSL_pending indicates data pending. Otherwise select on socket as normal. Thu Oct 26 22:15:14 2000 Joe Orton * socket.c (sock_readline, sock_peek): Check whether SSL connection has been closed if SSL_peek returns 0 (thanks to Jeff Costlow ). Thu Oct 14 19:57:31 2000 Joe Orton * Makefile.incl: Fix spurius backslash at line 69 (thanks to Dirk Bergstrom ). Sat Oct 14 19:51:44 2000 Joe Orton * dav_basic.c (copy_or_move): Use http_get_scheme rather than hard-coding "http". 2000-10-02 Joe Orton * http_request.c (http_get_scheme): New function. Tue Oct 10 19:56:42 2000 Joe Orton * neon_config.h: Bumped version to 0.7.5. Sat Oct 7 19:26:58 2000 Joe Orton * neon_config.h: Bumped version to 0.7.4. Sat Oct 7 19:19:37 2000 Joe Orton * http_auth.c (request_digest): Quote algorithm and qop parameters in digest header. Sat Oct 7 19:15:29 2000 Joe Orton * socket.c (sock_connect_u): Don't leak the fd if connect fails (David Sloat). Sat Sep 16 16:49:57 2000 Joe Orton * hip_xml.h: Add 'HIP_ELM_UNUSED', defining lowest element ID which should be used. * hip_xml.c, hip_xml.h (hip_xml_push_handler, hip_xml_push_mixed_handler): Renamed from hip_xml_add_handler / hip_xml_add_mixed_handler to reflect stack-like usage of handlers. 'handlers' field of hip_xml_parser renamed to top_handler for same reason (globally search'n'replaced). * hip_xml.h: Documentation update. Thu Sep 14 22:37:33 2000 Joe Orton * http_auth.c (request_digest): Quote qop= value, fixes IIS5 interop. Thu Sep 14 00:40:04 2000 Joe Orton * socket.c (sock_connect_u): If connect() fails, close the socket before returning: thanks to David Sloat . Tue Sep 12 20:08:40 2000 Joe Orton * http_request.c (read_response_headers): Remove redundant tolower(). Tue Sep 12 00:41:39 2000 Joe Orton * neon_config.h: Bumped version to 0.7.3. Mon Sep 11 15:31:13 2000 Joe Orton * http_request.c, http_auth.c: Include snprintf.h if HAVE_SNPRINTF_H is defined. Fri Sep 8 10:46:53 2000 Joe Orton * neon_config.h: Bumped version to 0.7.2. Fri Sep 8 10:44:42 2000 Joe Orton * socket.c (sock_block): Return immediately if this is an SSL socket. Thu Sep 7 00:31:12 2000 Joe Orton * hip_xml.h: Correct order of hip_xml_validate_cb arguments in prototype (thanks to Greg Stein). Thu Sep 7 00:27:29 2000 Joe Orton * dav_props.c (propfind): Don't destroy the handler after use. (dav_propfind_destroy): New function. Thu Sep 7 00:08:45 2000 Joe Orton * Makefile.incl: Added targets for ne_alloc.o, string_utils.o, uri.o, base64.o. Tue Aug 15 21:53:53 2000 Joe Orton * neon_config.h: Bumped version to 0.7.1. Tue Aug 15 21:16:34 2000 Joe Orton * http_request.c (http_request_create): Only add authentication response body callbacks if a supply-credentials callback has been set for the session. (http_request_dispatch): Similarly for response header callbacks. Mon Aug 14 09:28:38 2000 Joe Orton * neon_config.h: Bumped version to 0.7.0. Mon Aug 14 09:23:54 2000 Joe Orton * string_utils.h (SBUFFER_CAST): New macro. Mon Aug 14 09:13:05 2000 Joe Orton * http_private.h: Use a hash table for storing response header handlers. Added response header 'catchers', which are passed ALL response headers. * http_request.c (http_add_response_header_handler): Place the handler in the correct hash bucket. (hdr_hash): New function. (http_add_response_header_catcher): New function. (http_request_destroy): Destroy the header catchers, and iterate over the hash table to destroy the handlers. (read_response_headers): Optimisation: hash and search for ':' in a single loop. Remove another local variable. Iterate through catchers too. Sun Aug 13 15:57:35 2000 Joe Orton * neon_config.h: Bumped version to 0.6.1. Sun Aug 13 15:50:42 2000 Joe Orton * http_request.c (send_request): Only go through the loop at most twice. Sun Aug 13 15:49:52 2000 Joe Orton * http_redirect.c (destroy): Don't free the redirect structure. Sat Aug 12 17:10:32 2000 Joe Orton * neon_config.h: Bumped version to 0.6.0. Sat Aug 12 16:48:47 2000 Joe Orton * http_request.c (http_session_decide_proxy): New function. (http_request_create): Call proxy "decider callback" to determine whether to use the proxy server for a given request or not. Sat Aug 12 16:39:10 2000 Joe Orton * Makefile.incl: Updated for http_private.h and http_redirect.[ch]. Sat Aug 12 16:36:49 2000 Joe Orton * http_request.c: Removed data structure definitions. * http_private.h: New file, contains data structure definitions. Interface NOT exported. Sat Aug 12 16:31:32 2000 Joe Orton * http_redirect.c (destroy): No return value. Sat Aug 12 16:04:02 2000 Joe Orton * http_redirect.[ch]: First cut at HTTP redirect handling. Sat Aug 12 11:05:13 2000 Joe Orton * neon_config.h: Bumped version to 0.5.1. Sat Aug 12 02:04:15 2000 Joe Orton * dav_locks.c (dav_lock_using_resource, dav_lock_using_parent): Prevent segfault if locking is not in use. Fri Aug 11 17:19:06 2000 Joe Orton * neon_config.h: Bumped version to 0.5.0. Fri Aug 11 16:31:23 2000 Joe Orton * http_request.c (read_message_header): Take a buffer for storing continuation lines. (read_response_headers): No need to strip EOL since read_message_header does this already. Use one less variable. Fri Aug 4 22:12:04 2000 Joe Orton * http_request.c (send_request): Don't retry sending the request more than once. Wed Aug 2 11:08:31 2000 Joe Orton * ne_alloc.[ch]: Renamed from xalloc.[ch]. Wed Aug 2 02:15:32 2000 Joe Orton * socket.c (sock_transfer): Return SOCK_CLOSED, or set sock->error appropriately on read failure. Tue Aug 1 13:04:27 2000 Joe Orton * socket.c, nsocket.h (sock_progress, sock_call_progress, sock_transfer, sock_readfile_blocked): Use 'off_t' not 'size_t' as file size type. Fri Jul 28 13:32:37 2000 Joe Orton * neon_config.h: Bumped version to 0.4.2. Fri Jul 28 13:31:38 2000 Joe Orton * http_request.c (send_request): Fix sending request body after getting 100-continue response. Fri Jul 28 11:26:47 2000 Joe Orton * neon_config.h: Bumped version to 0.4.1. Fri Jul 28 10:32:34 2000 Joe Orton * neon_config.h: Bumped version to 0.4.0. Fri Jul 28 10:28:21 2000 Joe Orton * http_basic.[ch] (http_post): New function, from Sander Alberink . Thu Jul 27 18:55:49 2000 Joe Orton * http_utils.c (neon_debug): No conditional compilation for function body: compile it all regardless of whether debugging is enabled or not, to allow applications to be debugged regardless of whether debugging is compiled into the library or not. Thu Jul 27 16:59:26 2000 Joe Orton * http_basic.c (clength_hdr_handler): Cast off_t to long int for printing. Tue Jul 25 18:14:15 2000 Joe Orton * http_request.c (read_message_header): Iterate over header handler list before placing zero-terminator at ':': if a handler has a NULL name field, pass it the entire header value. Tue Jul 25 18:00:49 2000 Joe Orton * http_request.c (http_get_request_headers): New function. Mon Jul 24 16:55:29 2000 Joe Orton * neon_config.h: Bumped version to 0.3.9. Mon Jul 24 16:54:33 2000 Joe Orton * http_basic.h: Use 'off_t' in http_content_range. * http_basic.c (http_get_range): Cast range values to (long int) to prevent compiler warnings. Thu Jul 20 20:03:30 2000 Joe Orton * http_request.[ch], socket.c, http_basic.c: Include nsocket.h not socket.h. Thu Jul 20 20:02:20 2000 Joe Orton * http_utils.c (version_string): Indicate which XML parser is supported. Thu Jul 20 20:01:12 2000 Joe Orton * nsocket.h: Renamed from socket.h. Thu Jul 20 15:02:35 2000 Joe Orton * http_utils.c, socket.c, http_request.c: SSL_ENABLE renamaed to ENABLE_SSL. Thu Jul 20 12:20:13 2000 Joe Orton * md5.c, http_auth.h: Include neon_md5.h. Thu Jul 20 12:19:23 2000 Joe Orton * neon_md5.h: Renamed from md5.h. Wed Jul 19 22:33:46 2000 Joe Orton * dav_basic.c (dav_simple_request): Don't leak ctype.value. Wed Jul 19 22:32:03 2000 Joe Orton * dav_207.c (check_context): Accept unknown elements. Wed Jul 19 22:31:10 2000 Joe Orton * dav_locks.c (dav_lock_iterate): Allow passing func as NULL. Wed Jul 19 22:26:13 2000 Joe Orton * socket.h (SOCKET_READ_TIMEOUT): Increase to 60. Wed Jul 19 22:25:51 2000 Joe Orton * dav_locks.h: Include http_request.h. Mon Jul 17 11:41:16 2000 Joe Orton * dates.c (asctime_parse, rfc1036_parse): Actually pass the string to sscanf (thanks to lclint). (rfc1123_date): Check for gmtime() returning NULL. Mon Jul 17 09:16:43 2000 Joe Orton * neon_config.h: Bumped version to 0.3.1. Mon Jul 17 09:07:58 2000 Joe Orton * dav_locks.c: Include limits.h: thanks to Paul D'Anna. Sun Jul 16 18:47:15 2000 Joe Orton * neon_config.h: Bumped version to 0.3.0. Sun Jul 16 16:44:25 2000 Joe Orton * neon_i18n.c (neon_i18n_init) [ENABLE_NLS && NEON_IS_LIBRARY]: New compilation conditions. Sun Jul 16 16:41:12 2000 Joe Orton * neon_i18n.c: New file. Sun Jul 16 16:15:02 2000 Joe Orton * string_utils.c (sbuffer_*): Change to assert postcondition (buf->used == strlen(buf->data) + 1). (sbuffer_append): Fix brokenness. Sun Jul 16 16:11:05 2000 Joe Orton * socket.c (sock_transfer): Increase sum length written correctly. Sun Jul 16 16:10:23 2000 Joe Orton * http_request.c (http_get_hook_private): New function. Sun Jul 16 16:07:11 2000 Joe Orton * hip_xml.c (find_handler): Call validate_cb for any handler which recognizes the element. Allow return codes HIP_XML_{VALID,INVALID,DECLINE} from validate_cb. If DECLINE is returned, continue searching handlers until one returns (IN)VALID. (start_element): Don't call validate_cb. * hip_xml.c (start_element, end_element): In collect mode, don't print namespace prefix if present. Sun Jul 16 15:30:19 2000 Joe Orton * dav_locks.[ch]: New file, code mainly taken from cadaver and adapted for neon HTTP request/response handling. Sun Jul 16 15:28:25 2000 Joe Orton * dav_basic.c (copy_or_move, dav_move, dav_copy): Pass overwrite as parameter. Sun Jul 16 15:26:24 2000 Joe Orton * uri.c (uri_compare): Fixed to only return equal if *shorter* string has no trailing slash. Sat Jul 15 20:14:07 2000 Joe Orton * dav_207.c (dav_207_get_current_response, dav_207_get_current_propstat): New functions. * dav_props.c (dav_propfind_get_current_resource): Implement using dav_207_get_current_response. Sat Jul 15 17:36:37 2000 Joe Orton * xalloc.c (xcalloc): New function. Sat Jul 15 14:11:14 2000 Joe Orton * http_utils.[ch] and elsewhere: Replace 'class' field of http_status with '_class' to be C++-safe. (patch from Tom Bednarz). Thu Jul 6 18:48:52 2000 Joe Orton * dav_basic.c (copy_or_move): Escape the destination URI. Thu Jul 6 18:45:51 2000 Joe Orton * dav_props.c (end_response): Added description parameter. Thu Jul 6 18:43:14 2000 Joe Orton * dav_207.[ch] (end_element): Fix handling of responsedescription. Add "description" parameter to dav_207_end_response callback, and pass the contents of responsedescription. * dav_basic.c (handle_error, end_response, end_propstat): Pass description and add to error string when present. Tue Jul 4 11:43:03 2000 Joe Orton * dav_basic.c, dav_props.c, http_basic.c: Use http_{add,print}_request_header rather than http_get_request_header. Tue Jul 4 11:41:00 2000 Joe Orton * http_request.[ch] (http_add_request_header, http_print_request_header): New functions. (http_get_request_header): Removed function. Mon Jul 3 21:50:40 2000 Joe Orton * http_request.c: Add basic support for TLS upgrade (RFC2817). (http_set_request_secure_upgrade, http_set_accept_secure_upgrade): New functions. (send_request): If upgrade is requested, and a 101 response is received, negotiate the TLS connection. (add_fixed_headers): Add Upgrade header if necessary. Mon Jul 3 21:46:00 2000 Joe Orton * http_request.c (send_request): Don't go into an infinite loop. (read_message_header): Simplyify checking for end-of-line. Tue Jun 13 00:29:42 2000 Joe Orton * http_request.c (http_session_proxy, http_session_server): Allow calling >1 time per session, to switch servers. (send_request): Only retry sending request once. Mon Jun 12 21:50:41 2000 Joe Orton * http_request.c (http_add_hooks): New function. Mon Jun 12 21:37:24 2000 Joe Orton * http_cookies.[ch]: Added basic cookies support. Mon Jun 12 21:33:33 2000 Joe Orton * socket.c (sock_create_ssl_context, sock_destroy_ssl_context, sock_disable_tlsv1, sock_disable_sslv2, sock_disable_sslv3, sock_make_secure): Added nssl_context handling. Mon Jun 12 21:29:52 2000 Joe Orton * http_request.c (http_request_dispatch, http_request_create, http_request_destroy, http_set_request_body_buffer, http_set_request_body_stream): Added hook support. Mon Jun 12 21:04:00 2000 Joe Orton * http_request.c (http_set_secure): Store an nssl_context. (open_connection): Give the nssl_context. Sun Jun 11 16:37:52 2000 Joe Orton * sslcerts.c: Import of SSL support from mutt, relicensed under the LGPL for use in neon by the author, Tommi Komulainen . Sun Jun 11 11:30:16 2000 Joe Orton * http_request.c (set_sockerr): Updated to use sock_get_error. Sun Jun 11 11:29:29 2000 Joe Orton * uri.c (uri_parse): Allow scheme to be omitted. Fri Jun 9 20:39:24 2000 Joe Orton * socket.c (sock_get_error): New function. (sock_*): Set sock->error and SOCK_ERROR on error. Mon May 29 16:32:46 2000 Joe Orton * uri.c (uri_abspath_escape): Allocate the exact amount of memory needed. Mon May 29 15:53:33 2000 Joe Orton * dav_basic.c (dav_simple_request): Correct invalid XML logic. Mon May 29 15:52:08 2000 Joe Orton * socket.c (create_sock, sock_accept, sock_get_fd): New functions. (sock_connect_u): Use create_sock. Sun May 28 21:00:37 2000 Joe Orton * http_utils.c (neon_version_string): New function. Sun May 28 19:36:45 2000 Joe Orton * socket.c (sock_connect_u): Zero out allocated nsocket object. Thu May 25 01:27:04 2000 Joe Orton * *.h: Include other neon headers with . Thu May 25 01:02:12 2000 Joe Orton * dav_props.c: Include stdlib.h for 'free'. Wed May 24 20:15:08 2000 Joe Orton * http_request.c (read_message_header): Return HTTP_RETRY if more headers to read, HTTP_OK on end-of-headers. (read_response_headers): Changed accordingly. Wed May 24 19:56:29 2000 Joe Orton * http_request.c (send_request_body): Return a SOCK_* code. (send_request): Re-send request if socket has been closed (due to persistent connection timeout). Wed May 24 19:00:01 2000 Joe Orton * hip_xml.c (find_element): Fix unknown element handling. Tue May 23 19:12:26 2000 Joe Orton * dav_props.c (propfind): Destroy the request body sbuffer after use. Tue May 23 15:43:42 2000 Joe Orton * socket.c (sock_make_secure) [SSL_ENABLE]: Conditionally compile SSL code. [!SSL_ENABLE]: Return failure. (sock_close) [SSL_ENABLE]: Conditionally compile SSL code. Tue May 23 15:37:53 2000 Joe Orton * http_request.c (http_session_create): Renamed from http_session_init. (http_session_destroy): Renamed frmo http_session_finish. Sun May 21 23:50:58 2000 Joe Orton * http_request.c (lookup_host): Use sock_name_lookup. Sun May 21 23:40:39 2000 Joe Orton * http_request.c (http_request_create): Allow passing NULL uri (internal use only). (http_set_secure): New function. (read_response_block, read_message_headers): Redone for new socket API. (build_request): Moved http_auth_new_request calls here (from http_request_dispatch). (send_request): Always call open_connection before sending the request. (read_message_header, read_response_headers): Looser check for empty line. (normalize_response_length): Set response body length to zero on 2xx class response whilst in CONNECT, if no other response body length is given. (http_request_dispatch): Don't close the connection on a HTTP/1.0 2xx class response after a CONNECT request. (proxy_tunnel): New function. (open_connection): Use an SSL connection where appropriate. Use proxy_tunnel for tunnelling through a proxy. Sun May 21 01:35:40 2000 Joe Orton * src/socket.c: Added 'nsocket' ADT for handling sockets. (sock_*): All changed to take 'nsocket *' argument rather than integer file descriptor. Added 'sock_secure_details' to sock_status enum. (sock_make_secure, sock_init): New function. (sock_peek): Renamed from sock_recv. (send_file_*, recv_file_*): Removed functions. (sock_name_lookup): Renamed from host_lookup. (sock_service_lookup): Renamed from get_tcp_port. (sock_block, sock_read, sock_fullwrite, sock_peek, sock_readline): Added SSL support. (sock_transfer): Use sock_fullwrite and sock_read. Sun May 21 01:25:03 2000 Joe Orton * http_request.c (http_request_destroy): Free header handlers and body readers. Sun May 21 01:24:30 2000 Joe Orton * dav_props.h: Removed obsolte got_property callback type. Sun May 21 01:23:59 2000 Joe Orton * dav_props.c (propfind): Free handler object after use. Sun May 21 01:23:12 2000 Joe Orton * dav_207.c (dav_207_destroy): Don't try to free the 'response' field. Sat May 20 21:45:32 2000 Joe Orton * http_request.c: Changed 'te' enum of struct http_response to 'is_chunked' boolean. Sun May 14 01:00:42 2000 Joe Orton * dav_props.c (propfind): Return error on parse error. Sun May 14 00:40:50 2000 Joe Orton * neon_config.h (NEON_VERSION): Bumped to 0.2.0. Sat May 13 23:31:28 2000 Joe Orton * neon_defs.h (BEGIN_NEON_DECLS, END_NEON_DECLS): Added C++ safety macros. * *.h: Surround with C++ safety macros. Sat May 13 22:36:06 2000 Joe Orton * hip_xml.c (hip_xml_destroy): Free handlers. Sat May 13 21:12:14 2000 Joe Orton * hip_xml.c (hip_xml_valid): Reversed return value. Sat May 13 21:11:17 2000 Joe Orton * http_utils.c: Renamed http_debug_mask to neon_debug_mask, similarly neon_debug_stream. (neon_debug_init): Renamed from http_debug_init. Sat May 13 19:24:40 2000 Joe Orton * http_utils.c: Initialize http_debug_mask to zero. (http_debug_init): New function. * http_utils.h: Fixed #ifdef DEBUGGING. Only define relevant DEBUG_* constants. Sat May 13 19:23:34 2000 Joe Orton * neon_config.h: New file. * http_request.c: Include neon_config.h for NEON_VERSION. Sat May 13 18:28:05 2000 Joe Orton * dav_props.c (dav_propfind_create): Create a hip_xml_parser, a 207 parser, register start+end response handlers with 207 layer. (propfind): Fix allprop (Michael Sobolev). * dav_basic.c (dav_simple_request): Create and destroy hip_xml_parser and 207 parser appropriately. Sat May 13 18:24:49 2000 Joe Orton * dav_207.c: Now takes an externally-declared hip_xml parser pointer. (dav_207_create, dav_207_destroy): New functions. (dav_207_init, dav_207_init_with_handler, dav_207_parse, dav_207_error, dav_207_finish): Removed functions. Sat May 13 17:32:45 2000 Joe Orton * hip_xml.[ch]: Rewritten to use opaque hip_xml_parser pointer. struct hip_xml_handler and struct hip_xml_state removed from external interface. struct hip_xml_elm * passed to startelm_cb and endelm_cb. (hip_xml_add_handler, hip_xml_valid, hip_xml_create, hip_xml_destroy, hip_xml_set_error, hip_xml_get_error): New functions. (hip_xml_init, hip_xml_destroy): Removed functions. Sat May 13 13:43:56 2000 Joe Orton * neon.h: Removed. Sat May 13 13:42:20 2000 Joe Orton * string_utils.h: Don't include config.h. (CONCAT*): Don't use xmalloc, use malloc and abort manually. Sat May 13 13:32:46 2000 Joe Orton * http_utils.h, dates.h, http_basic.h: Don't include config.h Sat May 13 13:31:37 2000 Joe Orton * hip_xml.[ch], dav_207.c: Use HIP_ERR_SIZE for size of parser error string. Sat May 13 13:30:40 2000 Joe Orton * Makefile.incl: Use obj_ext for object file extension. Thu May 11 18:21:53 2000 Joe Orton * neon.h: Bumped version to 0.1.1. Thu May 11 18:16:08 2000 Joe Orton * http_basic.c (get_to_fd): Fix short writes. Wed May 10 19:22:01 2000 Joe Orton * neon.h: Bumped version to 0.1.0. Wed May 10 17:46:48 2000 Joe Orton * uri.c (uri_parse, uri_free): New functions. Wed May 10 17:43:37 2000 Joe Orton * http_basic.c (get_to_fd, http_get): Set error appropriately if fwrite() fails. Wed May 10 14:25:38 2000 Joe Orton * http_utils.c (http_debug): New function. Wed May 10 14:25:08 2000 Joe Orton * http_basic.c (get_callback): Call sock_call_progress. Wed May 10 14:24:20 2000 Joe Orton * socket.c (sock_call_progress): New function. (many places): Use it. Wed May 10 14:22:48 2000 Joe Orton * uri.c (uri_has_trailing_slash): Moved from being inline. Tue May 9 23:34:25 2000 Joe Orton * dav_props.c: Use handler as userdata for 207 callbacks, unified handler and context structures. (start_prop, end_prop, start_propelm, end_propelm): Removed functions. (dav_propfind_get_current_resource): New function. Tue May 9 23:29:44 2000 Joe Orton * xalloc.[ch]: New files. Tue May 9 23:05:47 2000 Joe Orton * dav_207.[ch]: Removed property and property element callbacks. Tue May 9 23:01:00 2000 Joe Orton * dav_207.c: Use separate name/namespace for element names. (dav_207_init_with_handler): New function. (end_element): Unescape URI in href element. Tue May 9 19:54:07 2000 Joe Orton * dav_props.c (dav_propfind_allprop, dav_propfind_named, propfind, start_response, end_response, start_prop, end_prop, start_propelm, end_propelm): New functions; PROPFIND support. Tue May 9 19:45:17 2000 Joe Orton * http_request.c (build_request): Renamed from make_request. Tue May 9 19:36:01 2000 Joe Orton * socket.[ch]: Added sock_block_reader. Tue May 9 15:52:56 2000 Joe Orton * uri.c (uri_childof): Return false when parent is the same length as child. Sun May 7 15:07:49 2000 Joe Orton * dav_207.c: Separated element namespace/names. Tue May 2 16:40:59 2000 Joe Orton * hip_xml.[ch]: Added HIP_XML_UTF8DECODE flag. Tue May 2 16:16:57 2000 Joe Orton * hip_xml.[ch]: Separate element name and namespace. Mon May 1 00:21:24 2000 Joe Orton * dav_207.c (dav_accept_207): Moved function from dav_basic.c. * dav_basic.c (dav_accept_207, dav_parse_xml_block): Removed functions. Sun Apr 30 22:47:47 2000 Joe Orton * dav_props.[ch]: Renamed dav_proppatch_item to dav_proppatch_operation. Sun Apr 30 22:45:04 2000 Joe Orton * hip_xml.c (start_element): Clearer error message. Sun Apr 30 19:12:07 2000 Joe Orton * http_basic.c (http_content_type_handler, dav_hdr_handler): New functions. (http_options): Handle DAV header. Sun Apr 30 18:08:53 2000 Joe Orton * dav_props.c (dav_proppatch): New function. Sun Apr 30 18:05:55 2000 Joe Orton * dav_basic.c (handle_error): New function. (end_response, end_propstat): Use it. (dav_simple_request): Don't return the 207 error string if we get all 2xx class status elements. Sun Apr 30 16:56:41 2000 Joe Orton * dav_basic.c (dav_add_depth_header): New function. Sun Apr 30 14:49:06 2000 Joe Orton * dav_207.c (start_element): Unknown element is only a property if the parent is DAV:propstat. Sun Apr 30 14:43:28 2000 Joe Orton * dav_basic.c (end_response, end_propstat): Only write error line if we have status information and the status is not a 424. Sun Apr 30 14:28:23 2000 Joe Orton * dav_basic.h: Added DAV_DEPTH_*. Sun Apr 30 12:47:50 2000 Joe Orton * dav_207.c (check_context): Allow (and ignore) unknown elements anywhere other than as the root. Sun Apr 30 12:35:39 2000 Joe Orton * string_utils.h (ASC2HEX, HEX2ASC): New macros. Sun Apr 30 12:34:37 2000 Joe Orton * http_auth.c [STANDALONE]: Removed. (everywhere): Switch to using md5_to_ascii rather than md5_hexify. Sun Apr 30 12:32:35 2000 Joe Orton * http_request.c (read_response_block): Fixed to return errors properly and block length to parameter. (read_response_body): Changed accordingly. Sun Apr 30 12:29:45 2000 Joe Orton * hip_xml.c (friendly_name): New function, was PRETTY_NAME macro. (start_element, end_element): Fix COLLECT handling. (hip_xml_parse): Only write parse error if the document has not already been marked invalid. Sun Apr 30 12:28:36 2000 Joe Orton * dav_basic.c (dav_simple_request): Rewritten for new 207 interface. (start_response, end_response, end_propstat): New functions. Sun Apr 30 12:27:52 2000 Joe Orton * dav_207.c (dav_207_error): Return the parser error. Sat Apr 29 14:46:48 2000 Joe Orton * socket.c (sock_register_progress, sock_register_notify): New functions. (everywhere): Use progress + notify callbacks rather than fe_*. Sat Apr 29 14:15:23 2000 Joe Orton * string_utils.c (md5_to_ascii, ascii_to_md5): New functions. Sat Apr 29 13:55:39 2000 Joe Orton * hip_xml.c (hip_xml_init): abort() on out-of-memory. Sat Apr 29 12:56:11 2000 Joe Orton * neon_i18n.h: New file. Sat Apr 29 12:55:24 2000 Joe Orton * dav_207.[ch]: Re-implemented with sensible interface. Fri Apr 28 14:56:01 2000 Joe Orton * http_auth.c (http_auth_request_header): Renamed from http_auth_request. * http_request.c (make_request): As above. Thu Apr 13 11:52:14 2000 Joe Orton * http_basic.c (http_put): Switched URI and stream arguments. Thu Apr 13 09:51:21 2000 Joe Orton * http_request.c: Added user_agent field to session structure. (http_set_useragent): New function. (add_fixed_headers): Only set user-agent if sess->user_agent is set. Thu Apr 13 09:49:32 2000 Joe Orton * http_request.c (lookup_host): New function, split from set_hostinfo. (set_hostinfo): Doesn't perform DNS lookup. (http_session_server): Don't do a DNS lookup if we have a proxy. Wed Apr 12 22:32:21 2000 Joe Orton * http_request.c (http_request_dispatch, http_request_create): Store auth header values in local variables rather than request structure. (http_request_create): Don't leak everything on error. Handle http_auth_challenge return value. Wed Apr 12 22:30:06 2000 Joe Orton * http_basic.c (http_options): Pass server capabilites object, parse Server header to detect Apache/1.3.6 and before, indicating broken 100-continue support. (server_hdr_handler): New function. Mon Apr 10 17:42:07 2000 Joe Orton * socket.c: Use 'int' for return values. Mon Apr 10 17:41:40 2000 Joe Orton * http_auth.c (is_in_domain): Dummy implementation. Mon Apr 10 17:40:21 2000 Joe Orton * http_request.c: Handle read() returning 0 when it shouldn't. i18n'ized error messages. Mon Apr 10 14:45:09 2000 Joe Orton * dates.[ch], md5.[ch], base64.[ch]: Imported date handling utilities, MD5 checksum functions, and text->base64 converter. Mon Apr 10 14:44:08 2000 Joe Orton * Makefile.incl: Dependancies updated for socket.[ch]. Mon Apr 10 14:43:36 2000 Joe Orton * dav_207.c: Replaced malloc() calls with xmalloc() calls. Mon Apr 10 14:42:35 2000 Joe Orton * http_auth.c, uri.c, string_utils.h: Replaced malloc() calls with xmalloc() calls. Mon Apr 10 14:41:40 2000 Joe Orton * socket.[ch]: Imported socket handling utilities. Mon Apr 10 14:36:03 2000 Joe Orton * string_utils.h (CONCAT*): Use xmalloc. Mon Apr 10 13:52:17 2000 Joe Orton * http_request.c (set_sockerr): Added handling for socket errors. Sat Apr 8 13:49:07 2000 Joe Orton * string_utils.[ch]: Imported string utilites. Sat Apr 8 00:26:06 2000 Joe Orton * http_request.c (http_set_persist, http_set_expect100): New functions. Sat Apr 8 00:25:37 2000 Joe Orton * http_basic.c (http_options): New function. Fri Apr 7 13:01:35 2000 Joe Orton * neon.h: New file. Fri Apr 7 12:59:40 2000 Joe Orton * http_request.c (normalize_response_length, read_response_body): New functions. (http_add_response_body_reader): Take a callback to determine whether the body reader wants to read the response body. Fri Apr 7 11:46:41 2000 Joe Orton * http_request.c (http_set_server_auth, http_set_proxy_auth): New functions. (give_creds): Use supplied callbacks for authentication. (get_request_bodysize): Send Content-Length: 0 if no entity-body is being sent with a request. (te_hdr_handler, connection_hdr_handler): New functions. (make_request): Don't use Expect: 100-continue if server is not HTTP/1.1 compliant. (read_message_header): Only read until HTTP_MAXIMUM_HEADER_LENGTH bytes of header have been read. (read_response_headers): No hard-coded header handling. (http_request_create): Set req->method_is_head here. Thu Apr 6 14:39:28 2000 Joe Orton * hip_xml.c [HIP_XML_DECODE_UTF8] (decode_utf8_double): New function. (char_data) [HIP_XML_DECODE_UTF8]: Decode UTF-8. Tue Mar 28 13:54:51 2000 Joe Orton * Makefile.incl: Imported makefile fragment. Tue Mar 28 13:54:09 2000 Joe Orton * http_request.[ch] (http_get_error): New function. Thu Mar 23 18:48:42 2000 Joe Orton * hip_xml.[ch]: Imported generic XML parsing layer. * dav_207.[ch]: Imported generic WebDAV 207 response handling. * dav_basic.[ch]: Imported/implemented DAV response handling and basic Class 1 namespace methods. Thu Mar 23 18:46:14 2000 Joe Orton * http_request.c (add_hooks, run_hooks, http_add_destroy_hook): Adding hooks support. (add_fixed_headers): Send TE token in Connection header. Only send Keep-Alive header & token to pre-1.1 origin servers (i.e., not proxies). Thu Mar 23 12:49:01 2000 Joe Orton * http_auth.[ch], uri.[ch]: Imported HTTP authentication and URI handling modules. Thu Mar 23 12:47:05 2000 Joe Orton * http_utils.c: Imported HTTP utility functions. Thu Mar 23 12:44:38 2000 Joe Orton * http_request.[ch]: Implemented modular HTTP request handling. * http_basic.[ch]: Implemented basic HTTP methods GET, PUT, and PUT with If-Unmodified. tla-1.3.5+dfsg/src/libneon/src/ne_cookies.c0000644000175000017500000000730310457621776017245 0ustar useruser/* Basic cookie support for neon Copyright (C) 1999-2003, Joe Orton This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA */ /* A nice demo of hooks, since it doesn't need any external * interface to muck with the stored states. */ #include "config.h" #ifdef HAVE_STDLIB_H #include #endif #ifdef HAVE_STRING_H #include #endif #include #include "ne_cookies.h" #include "ne_request.h" #include "ne_string.h" #include "ne_alloc.h" #define COOKIE_ID "http://www.webdav.org/neon/hooks/cookies" static void set_cookie_hdl(void *userdata, const char *value) { char **pairs = pair_string(value, ';', '=', "\"'", " \r\n\t"); ne_cookie *cook; ne_cookie_cache *cache = userdata; int n; /* Check sanity */ if (pairs[0] == NULL || pairs[1] == NULL) { /* yagaboo */ return; } NE_DEBUG(NE_DBG_HTTP, "Got cookie name=%s\n", pairs[0]); /* Search for a cookie of this name */ NE_DEBUG(NE_DBG_HTTP, "Searching for existing cookie...\n"); for (cook = cache->cookies; cook != NULL; cook = cook->next) { if (strcasecmp(cook->name, pairs[0]) == 0) { break; } } if (cook == NULL) { NE_DEBUG(NE_DBG_HTTP, "New cookie.\n"); cook = ne_malloc(sizeof *cook); memset(cook, 0, sizeof *cook); cook->name = ne_strdup(ne_shave(pairs[0], " \t\r\n")); cook->next = cache->cookies; cache->cookies = cook; } else { /* Free the old value */ ne_free(cook->value); } cook->value = ne_strdup(ne_shave(pairs[1], " \t\r\n")); for (n = 2; pairs[n] != NULL; n+=2) { if (!pairs[n+1]) continue; NE_DEBUG(NE_DBG_HTTP, "Cookie parm %s=%s\n", pairs[n], pairs[n+1]); if (strcasecmp(pairs[n], "path") == 0) { cook->path = ne_strdup(pairs[n+1]); } else if (strcasecmp(pairs[n], "max-age") == 0) { int t = atoi(pairs[n+1]); cook->expiry = time(NULL) + (time_t)t; } else if (strcasecmp(pairs[n], "domain") == 0) { cook->domain = ne_strdup(pairs[n+1]); } } NE_DEBUG(NE_DBG_HTTP, "End of parms.\n"); pair_string_free(pairs); } static void create(ne_request *req, void *session, const char *method, const char *uri) { ne_cookie_cache *cache = session; ne_add_response_header_handler(req, "Set-Cookie", set_cookie_hdl, cache); } /* Just before sending the request: let them add headers if they want */ static void pre_send(ne_request *req, void *session, ne_buffer *request) { ne_cookie_cache *cache = session; ne_cookie *cook; if (cache->cookies == NULL) { return; } ne_buffer_zappend(request, "Cookie: "); for (cook = cache->cookies; cook != NULL; cook=cook->next) { ne_buffer_concat(request, cook->name, "=", cook->value, NULL); if (cook->next != NULL) { ne_buffer_zappend(request, "; "); } } ne_buffer_zappend(request, "\r\n"); } /* Register cookie handling for given session using given cache. */ void ne_cookie_register(ne_session *sess, ne_cookie_cache *cache) { ne_hook_create_request(sess, create, cache); ne_hook_pre_send(sess, pre_send, cache); } tla-1.3.5+dfsg/src/libneon/src/ne_props.h0000644000175000017500000002277410457621776016772 0ustar useruser/* WebDAV Properties manipulation Copyright (C) 1999-2004, Joe Orton This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA */ #ifndef NE_PROPS_H #define NE_PROPS_H #include "ne_request.h" #include "ne_207.h" BEGIN_NEON_DECLS /* There are two interfaces for fetching properties. The first is * 'ne_simple_propfind', which is relatively simple, and easy to use, * but only lets you fetch FLAT properties, i.e. properties which are * just a string of bytes. The complex interface is 'ne_propfind_*', * which is complicated, and hard to use, but lets you parse * structured properties, i.e. properties which have XML content. */ /* The 'ne_simple_propfind' interface. *** * * ne_simple_propfind allows you to fetch a set of properties for a * single resource, or a tree of resources. You set the operation * going by passing these arguments: * * - the session which should be used. * - the URI and the depth of the operation (0, 1, infinite) * - the names of the properties which you want to fetch * - a results callback, and the userdata for the callback. * * For each resource found, the results callback is called, passing * you two things along with the userdata you passed in originally: * * - the URI of the resource (const char *href) * - the properties results set (const ne_prop_result_set *results) * */ /* The name of a WebDAV property. 'nspace' may be NULL. */ typedef struct { const char *nspace, *name; } ne_propname; typedef struct ne_prop_result_set_s ne_prop_result_set; /* Get the value of a given property. Will return NULL if there was an * error fetching this property on this resource. Call * ne_propset_result to get the response-status if so. */ const char *ne_propset_value(const ne_prop_result_set *set, const ne_propname *propname); /* Returns the status structure for fetching the given property on * this resource. This function will return NULL if the server did not * return the property (which is a server error). */ const ne_status *ne_propset_status(const ne_prop_result_set *set, const ne_propname *propname); /* Returns the private pointer for the given propset. */ void *ne_propset_private(const ne_prop_result_set *set); /* Return language string of property (may be NULL). */ const char *ne_propset_lang(const ne_prop_result_set *set, const ne_propname *pname); /* ne_propset_iterate iterates over a properties result set, * calling the callback for each property in the set. userdata is * passed as the first argument to the callback. value may be NULL, * indicating an error occurred fetching this property: look at * status for the error in that case. * * If the iterator returns non-zero, ne_propset_iterate will return * immediately with that value. */ typedef int (*ne_propset_iterator)(void *userdata, const ne_propname *pname, const char *value, const ne_status *status); /* Iterate over all the properties in 'set', calling 'iterator' * for each, passing 'userdata' as the first argument to callback. * * Returns: * whatever value iterator returns. */ int ne_propset_iterate(const ne_prop_result_set *set, ne_propset_iterator iterator, void *userdata); /* Callback for handling the results of fetching properties for a * single resource (named by 'href'). The results are stored in the * result set 'results': use ne_propset_* to examine this object. */ typedef void (*ne_props_result)(void *userdata, const char *href, const ne_prop_result_set *results); /* Fetch properties for a resource (if depth == NE_DEPTH_ZERO), * or a tree of resources (if depth == NE_DEPTH_ONE or _INFINITE). * * Names of the properties required must be given in 'props', * or if props is NULL, *all* properties are fetched. * * 'results' is called for each resource in the response, userdata is * passed as the first argument to the callback. It is important to * note that the callback is called as the response is read off the * socket, so don't do anything silly in it (e.g. sleep(100), or call * any functions which use this session). * * Note that if 'depth' is NE_DEPTH_INFINITY, some servers may refuse * the request. * * Returns NE_*. */ int ne_simple_propfind(ne_session *sess, const char *path, int depth, const ne_propname *props, ne_props_result results, void *userdata); /* The properties of a resource can be manipulated using ne_proppatch. * A single proppatch request may include any number of individual * "set" and "remove" operations, and is defined to have * "all-or-nothing" semantics, so either all the operations succeed, * or none do. */ /* A proppatch operation may either set a property to have a new * value, in which case 'type' must be ne_propset, and 'value' must be * non-NULL; or it can remove a property; in which case 'type' must be * ne_propremove, and 'value' is ignored. In both cases, 'name' must * be set to the name of the property to alter. */ enum ne_proppatch_optype { ne_propset, ne_propremove }; typedef struct { const ne_propname *name; enum ne_proppatch_optype type; const char *value; } ne_proppatch_operation; /* Execute a set of property operations 'ops' on 'path'. 'ops' is an * array terminated by an operation with a NULL 'name' field. Returns * NE_*. */ int ne_proppatch(ne_session *sess, const char *path, const ne_proppatch_operation *ops); /* Retrieve property names for the resources at 'path'. 'results' * callback is called for each resource. Use 'ne_propset_iterate' on * the passed results object to retrieve the list of property names. * */ int ne_propnames(ne_session *sess, const char *path, int depth, ne_props_result results, void *userdata); /* The complex, you-do-all-the-work, property fetch interface: */ struct ne_propfind_handler_s; typedef struct ne_propfind_handler_s ne_propfind_handler; /* Retrieve the 'private' pointer for the current propset for the * given handler, as returned by the ne_props_create_complex callback * installed using 'ne_propfind_set_private'. If this callback was * not registered, this function will return NULL. */ void *ne_propfind_current_private(ne_propfind_handler *handler); /* Create a PROPFIND handler, for the given resource or set of * resources. * * Depth must be one of NE_DEPTH_*. */ ne_propfind_handler * ne_propfind_create(ne_session *sess, const char *path, int depth); /* Return the XML parser for the given handler (only need if you want * to handle complex properties). */ ne_xml_parser *ne_propfind_get_parser(ne_propfind_handler *handler); /* This interface reserves the state integer range 'x' where 0 < x * and x < NE_PROPS_STATE_TOP. */ #define NE_PROPS_STATE_TOP (NE_207_STATE_TOP + 100) /* Return the request object for the given handler. You MUST NOT use * ne_set_request_body_* on this request object. (this call is only * needed if for instance, you want to add extra headers to the * PROPFIND request). The result of using the request pointer after * ne_propfind_destroy(handler) has been called is undefined. */ ne_request *ne_propfind_get_request(ne_propfind_handler *handler); /* A "complex property" has a value which is structured XML. To handle * complex properties, you must set up and register an XML handler * which will understand the elements which make up such properties. * The handler must be registered with the parser returned by * 'ne_propfind_get_parser'. * * To store the parsed value of the property, a 'private' structure is * allocated in each propset (i.e. one per resource). When parsing the * property value elements, for each new resource encountered in the * response, the 'creator' callback is called to retrieve a 'private' * structure for this resource. * * Whilst in XML element callbacks you will have registered to handle * complex properties, you can use the 'ne_propfind_current_private' * call to retrieve the pointer to this private structure. * * To retrieve this 'private' structure from the propset in the * results callback, simply call 'ne_propset_private'. * */ typedef void *(*ne_props_create_complex)(void *userdata, const char *href); void ne_propfind_set_private(ne_propfind_handler *handler, ne_props_create_complex creator, void *userdata); /* Fetch all properties. * * Returns NE_*. */ int ne_propfind_allprop(ne_propfind_handler *handler, ne_props_result result, void *userdata); /* Fetch all properties with names listed in array 'names', which is * terminated by a property with a NULL name field. For each resource * encountered, the result callback will be invoked, passing in * 'userdata' as the first argument. * * Returns NE_*. */ int ne_propfind_named(ne_propfind_handler *handler, const ne_propname *names, ne_props_result result, void *userdata); /* Destroy a propfind handler after use. */ void ne_propfind_destroy(ne_propfind_handler *handler); END_NEON_DECLS #endif /* NE_PROPS_H */ tla-1.3.5+dfsg/src/libneon/src/ne_openssl.c0000644000175000017500000006100710457621776017275 0ustar useruser/* neon SSL/TLS support using OpenSSL Copyright (C) 2002-2004, Joe Orton Portions are: Copyright (C) 1999-2000 Tommi Komulainen This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA */ #include "config.h" #include #ifdef HAVE_STRING_H #include #endif #include #include #include #include #include #include #include "ne_ssl.h" #include "ne_string.h" #include "ne_session.h" #include "ne_i18n.h" #include "ne_private.h" #include "ne_privssl.h" /* OpenSSL 0.9.6 compatibility */ #if OPENSSL_VERSION_NUMBER < 0x0090700fL #define PKCS12_unpack_authsafes M_PKCS12_unpack_authsafes #define PKCS12_unpack_p7data M_PKCS12_unpack_p7data /* cast away lack of const-ness */ #define OBJ_cmp(a,b) OBJ_cmp((ASN1_OBJECT *)(a), (ASN1_OBJECT *)(b)) #endif struct ne_ssl_dname_s { X509_NAME *dn; }; struct ne_ssl_certificate_s { ne_ssl_dname subj_dn, issuer_dn; X509 *subject; ne_ssl_certificate *issuer; char *identity; }; struct ne_ssl_client_cert_s { PKCS12 *p12; int decrypted; /* non-zero if successfully decrypted. */ ne_ssl_certificate cert; EVP_PKEY *pkey; char *friendly_name; }; char *ne_ssl_readable_dname(const ne_ssl_dname *name) { int n, flag = 0; ne_buffer *dump = ne_buffer_create(); const ASN1_OBJECT * const cname = OBJ_nid2obj(NID_commonName), * const email = OBJ_nid2obj(NID_pkcs9_emailAddress); for (n = X509_NAME_entry_count(name->dn); n > 0; n--) { X509_NAME_ENTRY *ent = X509_NAME_get_entry(name->dn, n-1); /* Skip commonName or emailAddress except if there is no other * attribute in dname. */ if ((OBJ_cmp(ent->object, cname) && OBJ_cmp(ent->object, email)) || (!flag && n == 1)) { if (flag++) ne_buffer_append(dump, ", ", 2); switch (ent->value->type) { case V_ASN1_UTF8STRING: case V_ASN1_IA5STRING: /* definitely ASCII */ case V_ASN1_VISIBLESTRING: /* probably ASCII */ case V_ASN1_PRINTABLESTRING: /* subset of ASCII */ ne_buffer_append(dump, ent->value->data, ent->value->length); break; case V_ASN1_UNIVERSALSTRING: case V_ASN1_T61STRING: /* let OpenSSL convert it as ISO-8859-1 */ case V_ASN1_BMPSTRING: { unsigned char *tmp = ""; /* initialize to workaround 0.9.6 bug */ int len; len = ASN1_STRING_to_UTF8(&tmp, ent->value); if (len > 0) { ne_buffer_append(dump, tmp, len); OPENSSL_free(tmp); break; } else { ERR_clear_error(); /* and fall through */ } } default: ne_buffer_zappend(dump, "???"); break; } } } return ne_buffer_finish(dump); } int ne_ssl_dname_cmp(const ne_ssl_dname *dn1, const ne_ssl_dname *dn2) { return X509_NAME_cmp(dn1->dn, dn2->dn); } void ne_ssl_clicert_free(ne_ssl_client_cert *cc) { if (cc->p12) PKCS12_free(cc->p12); if (cc->decrypted) { if (cc->cert.identity) ne_free(cc->cert.identity); EVP_PKEY_free(cc->pkey); X509_free(cc->cert.subject); } if (cc->friendly_name) ne_free(cc->friendly_name); ne_free(cc); } /* Map a server cert verification into a string. */ static void verify_err(ne_session *sess, int failures) { struct { int bit; const char *str; } reasons[] = { { NE_SSL_NOTYETVALID, N_("certificate is not yet valid") }, { NE_SSL_EXPIRED, N_("certificate has expired") }, { NE_SSL_IDMISMATCH, N_("certificate issued for a different hostname") }, { NE_SSL_UNTRUSTED, N_("issuer is not trusted") }, { 0, NULL } }; int n, flag = 0; strcpy(sess->error, _("Server certificate verification failed: ")); for (n = 0; reasons[n].bit; n++) { if (failures & reasons[n].bit) { if (flag) strncat(sess->error, ", ", sizeof sess->error); strncat(sess->error, _(reasons[n].str), sizeof sess->error); flag = 1; } } } /* Format an ASN1 time to a string. 'buf' must be at least of size * 'NE_SSL_VDATELEN'. */ static void asn1time_to_string(ASN1_TIME *tm, char *buf) { BIO *bio; strncpy(buf, _("[invalid date]"), NE_SSL_VDATELEN-1); bio = BIO_new(BIO_s_mem()); if (bio) { if (ASN1_TIME_print(bio, tm)) BIO_read(bio, buf, NE_SSL_VDATELEN-1); BIO_free(bio); } } void ne_ssl_cert_validity(const ne_ssl_certificate *cert, char *from, char *until) { ASN1_TIME *notBefore = X509_get_notBefore(cert->subject); ASN1_TIME *notAfter = X509_get_notAfter(cert->subject); if (from) asn1time_to_string(notBefore, from); if (until) asn1time_to_string(notAfter, until); } /* Return non-zero if hostname from certificate (cn) matches hostname * used for session (hostname). (Wildcard matching is no longer * mandated by RFC3280, but certs are deployed which use wildcards) */ static int match_hostname(char *cn, const char *hostname) { const char *dot; NE_DEBUG(NE_DBG_SSL, "Match %s on %s...\n", cn, hostname); dot = strchr(hostname, '.'); if (dot == NULL) { char *pnt = strchr(cn, '.'); /* hostname is not fully-qualified; unqualify the cn. */ if (pnt != NULL) { *pnt = '\0'; } } else if (strncmp(cn, "*.", 2) == 0) { hostname = dot + 1; cn += 2; } return !strcasecmp(cn, hostname); } /* Check certificate identity. Returns zero if identity matches; 1 if * identity does not match, or <0 if the certificate had no identity. * If 'identity' is non-NULL, store the malloc-allocated identity in * *identity. If 'server' is non-NULL, it must be the network address * of the server in use, and identity must be NULL. */ static int check_identity(const char *hostname, X509 *cert, char **identity, const ne_inet_addr *server) { STACK_OF(GENERAL_NAME) *names; int match = 0, found = 0; names = X509_get_ext_d2i(cert, NID_subject_alt_name, NULL, NULL); if (names) { int n; /* subjectAltName contains a sequence of GeneralNames */ for (n = 0; n < sk_GENERAL_NAME_num(names) && !match; n++) { GENERAL_NAME *nm = sk_GENERAL_NAME_value(names, n); /* handle dNSName and iPAddress name extensions only. */ if (nm->type == GEN_DNS) { char *name = ne_strndup(nm->d.ia5->data, nm->d.ia5->length); if (identity && !found) *identity = ne_strdup(name); match = match_hostname(name, hostname); ne_free(name); found = 1; } else if (nm->type == GEN_IPADD && server) { /* compare IP address with server IP address. */ ne_inet_addr *ia; if (nm->d.ip->length == 4) ia = ne_iaddr_make(ne_iaddr_ipv4, nm->d.ip->data); else if (nm->d.ip->length == 16) ia = ne_iaddr_make(ne_iaddr_ipv6, nm->d.ip->data); else ia = NULL; /* ne_iaddr_make returns NULL if address type is unsupported */ if (ia != NULL) { /* address type was supported. */ match = ne_iaddr_cmp(server, ia) == 0; found = 1; ne_iaddr_free(ia); } else { NE_DEBUG(NE_DBG_SSL, "iPAddress name with unsupported " "address type (length %d), skipped.\n", nm->d.ip->length); } } /* TODO: handle uniformResourceIdentifier too */ } /* free the whole stack. */ sk_GENERAL_NAME_pop_free(names, GENERAL_NAME_free); } /* Check against the commonName if no DNS alt. names were found, * as per RFC3280. */ if (!found) { X509_NAME *subj = X509_get_subject_name(cert); X509_NAME_ENTRY *entry; ASN1_STRING *str; int idx = -1, lastidx; char *name; /* find the most specific commonName attribute. */ do { lastidx = idx; idx = X509_NAME_get_index_by_NID(subj, NID_commonName, lastidx); } while (idx >= 0); if (lastidx < 0) return -1; /* extract the string from the entry */ entry = X509_NAME_get_entry(subj, lastidx); str = X509_NAME_ENTRY_get_data(entry); name = ne_strndup(str->data, str->length); if (identity) *identity = ne_strdup(name); match = match_hostname(name, hostname); ne_free(name); } NE_DEBUG(NE_DBG_SSL, "Identity match: %s\n", match ? "good" : "bad"); return match ? 0 : 1; } /* Populate an ne_ssl_certificate structure from an X509 object. */ static ne_ssl_certificate *populate_cert(ne_ssl_certificate *cert, X509 *x5) { cert->subj_dn.dn = X509_get_subject_name(x5); cert->issuer_dn.dn = X509_get_issuer_name(x5); cert->issuer = NULL; cert->subject = x5; /* Retrieve the cert identity; pass a dummy hostname to match. */ cert->identity = NULL; check_identity("", x5, &cert->identity, NULL); return cert; } /* Return a linked list of certificate objects from an OpenSSL chain. */ static ne_ssl_certificate *make_chain(STACK_OF(X509) *chain) { int n, count = sk_X509_num(chain); ne_ssl_certificate *top = NULL, *current = NULL; NE_DEBUG(NE_DBG_SSL, "Chain depth: %d\n", count); for (n = 0; n < count; n++) { ne_ssl_certificate *cert = ne_malloc(sizeof *cert); populate_cert(cert, X509_dup(sk_X509_value(chain, n))); #if NE_DEBUGGING if (ne_debug_mask & NE_DBG_SSL) { fprintf(ne_debug_stream, "Cert #%d:\n", n); X509_print_fp(ne_debug_stream, cert->subject); } #endif if (top == NULL) { current = top = cert; } else { current->issuer = cert; current = cert; } } return top; } /* Verifies an SSL server certificate. */ static int check_certificate(ne_session *sess, SSL *ssl, ne_ssl_certificate *chain) { X509 *cert = chain->subject; ASN1_TIME *notBefore = X509_get_notBefore(cert); ASN1_TIME *notAfter = X509_get_notAfter(cert); int ret, failures = 0; long result; /* check expiry dates */ if (X509_cmp_current_time(notBefore) >= 0) failures |= NE_SSL_NOTYETVALID; else if (X509_cmp_current_time(notAfter) <= 0) failures |= NE_SSL_EXPIRED; /* Check certificate was issued to this server; pass network * address of server if a proxy is not in use. */ ret = check_identity(sess->server.hostname, cert, NULL, sess->use_proxy ? NULL : sess->server.current); if (ret < 0) { ne_set_error(sess, _("Server certificate was missing commonName " "attribute in subject name")); return NE_ERROR; } else if (ret > 0) failures |= NE_SSL_IDMISMATCH; /* get the result of the cert verification out of OpenSSL */ result = SSL_get_verify_result(ssl); NE_DEBUG(NE_DBG_SSL, "Verify result: %ld = %s\n", result, X509_verify_cert_error_string(result)); switch (result) { case X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY: case X509_V_ERR_SELF_SIGNED_CERT_IN_CHAIN: case X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT: /* TODO: and probably more result codes here... */ failures |= NE_SSL_UNTRUSTED; break; /* ignore these, since we've already noticed them: */ case X509_V_ERR_CERT_NOT_YET_VALID: case X509_V_ERR_CERT_HAS_EXPIRED: /* cert was trusted: */ case X509_V_OK: break; default: /* TODO: tricky to handle the 30-odd failure cases OpenSSL * presents here (see x509_vfy.h), and present a useful API to * the application so it in turn can then present a meaningful * UI to the user. The only thing to do really would be to * pass back the error string, but that's not localisable. So * just fail the verification here - better safe than * sorry. */ ne_set_error(sess, _("Certificate verification error: %s"), X509_verify_cert_error_string(result)); return NE_ERROR; } if (failures == 0) { /* verified OK! */ ret = NE_OK; } else { /* Set up the error string. */ verify_err(sess, failures); ret = NE_ERROR; /* Allow manual override */ if (sess->ssl_verify_fn && sess->ssl_verify_fn(sess->ssl_verify_ud, failures, chain) == 0) ret = NE_OK; } return ret; } /* Duplicate a client certificate, which must be in the decrypted state. */ static ne_ssl_client_cert *dup_client_cert(const ne_ssl_client_cert *cc) { ne_ssl_client_cert *newcc = ne_calloc(sizeof *newcc); newcc->decrypted = 1; newcc->pkey = cc->pkey; if (cc->friendly_name) newcc->friendly_name = ne_strdup(cc->friendly_name); populate_cert(&newcc->cert, cc->cert.subject); cc->cert.subject->references++; cc->pkey->references++; return newcc; } /* Callback invoked when the SSL server requests a client certificate. */ static int provide_client_cert(SSL *ssl, X509 **cert, EVP_PKEY **pkey) { ne_ssl_context *ctx = SSL_get_app_data(ssl); ne_session *sess = SSL_CTX_get_app_data(ctx->ctx); if (!sess->client_cert && sess->ssl_provide_fn) { ne_ssl_dname **dnames = NULL; int n, count = 0; STACK_OF(X509_NAME) *ca_list = SSL_get_client_CA_list(ssl); count = ca_list ? sk_X509_NAME_num(ca_list) : 0; if (count > 0) { dnames = ne_malloc(count * sizeof(ne_ssl_dname *)); for (n = 0; n < count; n++) { dnames[n] = ne_malloc(sizeof(ne_ssl_dname)); dnames[n]->dn = sk_X509_NAME_value(ca_list, n); } } NE_DEBUG(NE_DBG_SSL, "Calling client certificate provider...\n"); sess->ssl_provide_fn(sess->ssl_provide_ud, sess, (const ne_ssl_dname *const *)dnames, count); if (count) { for (n = 0; n < count; n++) ne_free(dnames[n]); ne_free(dnames); } } if (sess->client_cert) { ne_ssl_client_cert *const cc = sess->client_cert; NE_DEBUG(NE_DBG_SSL, "Supplying client certificate.\n"); cc->pkey->references++; cc->cert.subject->references++; *cert = cc->cert.subject; *pkey = cc->pkey; return 1; } else { NE_DEBUG(NE_DBG_SSL, "No client certificate supplied.\n"); return 0; } } void ne_ssl_set_clicert(ne_session *sess, const ne_ssl_client_cert *cc) { sess->client_cert = dup_client_cert(cc); } ne_ssl_context *ne_ssl_context_create(void) { ne_ssl_context *ctx = ne_malloc(sizeof *ctx); ctx->ctx = SSL_CTX_new(SSLv23_client_method()); ctx->sess = NULL; /* set client cert callback. */ SSL_CTX_set_client_cert_cb(ctx->ctx, provide_client_cert); /* enable workarounds for buggy SSL server implementations */ SSL_CTX_set_options(ctx->ctx, SSL_OP_ALL); return ctx; } void ne_ssl_context_destroy(ne_ssl_context *ctx) { SSL_CTX_free(ctx->ctx); if (ctx->sess) SSL_SESSION_free(ctx->sess); ne_free(ctx); } /* For internal use only. */ int ne_negotiate_ssl(ne_request *req) { ne_session *sess = ne_get_session(req); ne_ssl_context *ctx = sess->ssl_context; ne_ssl_socket *sock; STACK_OF(X509) *chain; int freechain = 0; /* non-zero if chain should be free'd. */ NE_DEBUG(NE_DBG_SSL, "Doing SSL negotiation.\n"); /* Rather a hack: link the ssl_context back to the ne_session, so * provide_client_cert can get to the ne_session. */ SSL_CTX_set_app_data(ctx->ctx, sess); if (ne_sock_connect_ssl(sess->socket, ctx)) { if (ctx->sess) { /* remove cached session. */ SSL_SESSION_free(ctx->sess); ctx->sess = NULL; } ne_set_error(sess, _("SSL negotiation failed: %s"), ne_sock_error(sess->socket)); return NE_ERROR; } sock = ne_sock_sslsock(sess->socket); chain = SSL_get_peer_cert_chain(sock->ssl); /* For an SSLv2 connection, the cert chain will always be NULL. */ if (chain == NULL) { X509 *cert = SSL_get_peer_certificate(sock->ssl); if (cert) { chain = sk_X509_new_null(); sk_X509_push(chain, cert); } } if (chain == NULL || sk_X509_num(chain) == 0) { ne_set_error(sess, _("SSL server did not present certificate")); return NE_ERROR; } if (sess->server_cert) { int diff = X509_cmp(sk_X509_value(chain, 0), sess->server_cert->subject); if (freechain) sk_X509_free(chain); /* no longer need the chain */ if (diff) { /* This could be a MITM attack: fail the request. */ ne_set_error(sess, _("Server certificate changed: " "connection intercepted?")); return NE_ERROR; } /* certificate has already passed verification: no need to * verify it again. */ } else { /* new connection: create the chain. */ ne_ssl_certificate *cert = make_chain(chain); if (freechain) sk_X509_free(chain); /* no longer need the chain */ if (check_certificate(sess, sock->ssl, cert)) { NE_DEBUG(NE_DBG_SSL, "SSL certificate checks failed: %s\n", sess->error); ne_ssl_cert_free(cert); return NE_ERROR; } /* remember the chain. */ sess->server_cert = cert; } if (!ctx->sess) { /* store the session. */ ctx->sess = SSL_get1_session(sock->ssl); } if (sess->notify_cb) { sess->notify_cb(sess->notify_ud, ne_conn_secure, SSL_get_version(sock->ssl)); } return NE_OK; } const ne_ssl_dname *ne_ssl_cert_issuer(const ne_ssl_certificate *cert) { return &cert->issuer_dn; } const ne_ssl_dname *ne_ssl_cert_subject(const ne_ssl_certificate *cert) { return &cert->subj_dn; } const ne_ssl_certificate *ne_ssl_cert_signedby(const ne_ssl_certificate *cert) { return cert->issuer; } const char *ne_ssl_cert_identity(const ne_ssl_certificate *cert) { return cert->identity; } void ne_ssl_ctx_trustcert(ne_ssl_context *ctx, const ne_ssl_certificate *cert) { X509_STORE *store = SSL_CTX_get_cert_store(ctx->ctx); X509_STORE_add_cert(store, cert->subject); } void ne_ssl_trust_default_ca(ne_session *sess) { X509_STORE *store = SSL_CTX_get_cert_store(sess->ssl_context->ctx); X509_STORE_set_default_paths(store); } /* Find a friendly name in a PKCS12 structure the hard way, without * decrypting the parts which are encrypted.. */ static char *find_friendly_name(PKCS12 *p12) { STACK_OF(PKCS7) *safes = PKCS12_unpack_authsafes(p12); int n, m; char *name = NULL; if (safes == NULL) return NULL; /* Iterate over the unpacked authsafes: */ for (n = 0; n < sk_PKCS7_num(safes) && !name; n++) { PKCS7 *safe = sk_PKCS7_value(safes, n); STACK_OF(PKCS12_SAFEBAG) *bags; /* Only looking for unencrypted authsafes. */ if (OBJ_obj2nid(safe->type) != NID_pkcs7_data) continue; bags = PKCS12_unpack_p7data(safe); if (!bags) continue; /* Iterate through the bags, picking out a friendly name */ for (m = 0; m < sk_PKCS12_SAFEBAG_num(bags) && !name; m++) { PKCS12_SAFEBAG *bag = sk_PKCS12_SAFEBAG_value(bags, m); name = PKCS12_get_friendlyname(bag); } sk_PKCS12_SAFEBAG_pop_free(bags, PKCS12_SAFEBAG_free); } sk_PKCS7_pop_free(safes, PKCS7_free); return name; } ne_ssl_client_cert *ne_ssl_clicert_read(const char *filename) { PKCS12 *p12; FILE *fp; X509 *cert; EVP_PKEY *pkey; ne_ssl_client_cert *cc; fp = fopen(filename, "rb"); if (fp == NULL) return NULL; p12 = d2i_PKCS12_fp(fp, NULL); fclose(fp); if (p12 == NULL) { ERR_clear_error(); return NULL; } /* Try parsing with no password. */ if (PKCS12_parse(p12, NULL, &pkey, &cert, NULL) == 1) { /* Success - no password needed for decryption. */ unsigned int len = 0; unsigned char *name = X509_alias_get0(cert, &len); cc = ne_calloc(sizeof *cc); cc->pkey = pkey; cc->decrypted = 1; if (name && len) cc->friendly_name = ne_strndup((char *)name, len); populate_cert(&cc->cert, cert); PKCS12_free(p12); return cc; } else { /* Failed to parse the file */ int err = ERR_get_error(); ERR_clear_error(); if (ERR_GET_LIB(err) == ERR_LIB_PKCS12 && ERR_GET_REASON(err) == PKCS12_R_MAC_VERIFY_FAILURE) { /* Decryption error due to bad password. */ cc = ne_calloc(sizeof *cc); cc->friendly_name = find_friendly_name(p12); cc->p12 = p12; return cc; } else { /* Some parse error, give up. */ PKCS12_free(p12); return NULL; } } } int ne_ssl_clicert_encrypted(const ne_ssl_client_cert *cc) { return !cc->decrypted; } int ne_ssl_clicert_decrypt(ne_ssl_client_cert *cc, const char *password) { X509 *cert; EVP_PKEY *pkey; if (PKCS12_parse(cc->p12, password, &pkey, &cert, NULL) != 1) { ERR_clear_error(); return -1; } PKCS12_free(cc->p12); populate_cert(&cc->cert, cert); cc->pkey = pkey; cc->decrypted = 1; cc->p12 = NULL; return 0; } const ne_ssl_certificate *ne_ssl_clicert_owner(const ne_ssl_client_cert *cc) { return &cc->cert; } const char *ne_ssl_clicert_name(ne_ssl_client_cert *ccert) { return ccert->friendly_name; } ne_ssl_certificate *ne_ssl_cert_read(const char *filename) { FILE *fp = fopen(filename, "r"); X509 *cert; if (fp == NULL) return NULL; cert = PEM_read_X509(fp, NULL, NULL, NULL); fclose(fp); if (cert == NULL) { NE_DEBUG(NE_DBG_SSL, "d2i_X509_fp failed: %s\n", ERR_reason_error_string(ERR_get_error())); ERR_clear_error(); return NULL; } return populate_cert(ne_calloc(sizeof(struct ne_ssl_certificate_s)), cert); } int ne_ssl_cert_write(const ne_ssl_certificate *cert, const char *filename) { FILE *fp = fopen(filename, "w"); if (fp == NULL) return -1; if (PEM_write_X509(fp, cert->subject) != 1) { ERR_clear_error(); fclose(fp); return -1; } if (fclose(fp) != 0) return -1; return 0; } void ne_ssl_cert_free(ne_ssl_certificate *cert) { X509_free(cert->subject); if (cert->issuer) ne_ssl_cert_free(cert->issuer); if (cert->identity) ne_free(cert->identity); ne_free(cert); } int ne_ssl_cert_cmp(const ne_ssl_certificate *c1, const ne_ssl_certificate *c2) { return X509_cmp(c1->subject, c2->subject); } /* The certificate import/export format is the base64 encoding of the * raw DER; PEM without the newlines and wrapping. */ ne_ssl_certificate *ne_ssl_cert_import(const char *data) { unsigned char *der, *p; size_t len; X509 *x5; /* decode the base64 to get the raw DER representation */ len = ne_unbase64(data, &der); if (len == 0) return NULL; p = der; x5 = d2i_X509(NULL, &p, len); /* p is incremented */ ne_free(der); if (x5 == NULL) { ERR_clear_error(); return NULL; } return populate_cert(ne_calloc(sizeof(struct ne_ssl_certificate_s)), x5); } char *ne_ssl_cert_export(const ne_ssl_certificate *cert) { int len; unsigned char *der, *p; /* find the length of the DER encoding. */ len = i2d_X509(cert->subject, NULL); p = der = ne_malloc(len); i2d_X509(cert->subject, &p); /* p is incremented */ p = ne_base64(der, len); ne_free(der); return p; } #if SHA_DIGEST_LENGTH != 20 # error SHA digest length is not 20 bytes #endif int ne_ssl_cert_digest(const ne_ssl_certificate *cert, char *digest) { unsigned char sha1[EVP_MAX_MD_SIZE]; unsigned int len, j; char *p; if (!X509_digest(cert->subject, EVP_sha1(), sha1, &len) || len != 20) { ERR_clear_error(); return -1; } for (j = 0, p = digest; j < 20; j++) { *p++ = NE_HEX2ASC((sha1[j] >> 4) & 0x0f); *p++ = NE_HEX2ASC(sha1[j] & 0x0f); *p++ = ':'; } *--p = '\0'; return 0; } tla-1.3.5+dfsg/src/libneon/NEWS0000644000175000017500000013077110457621776014701 0ustar useruserChanges in release 0.24.7: * Compression interface fixes: - fix issues handling content decoding and request retries from authentication challenges (Justin Erenkrantz) - fix places where reader callback would receive spurious size=0 calls - fix to pass user-supplied userdata to user-supplied acceptance callback * Fix for RFC2617-style digest authentication (Hideaki Takahashi). * Fix to pick up gethostbyname() on QNX 6.2. Changes in release 0.24.6: * SECURITY (CVE CAN-2004-0398): Fix sscanf overflow in ne_rfc1036_parse, thanks to Stefan Esser. * Link libneon against libexpat during Subversion build using bundled neon. * Win32 build script update (Jon Foster). Changes in release 0.24.5: * SECURITY (CVE CAN-2004-0179): Fix format string vulnerabilities in XML/207 response handling, reported by greuff@void.at. * Performance fix: avoid seeding the SSL PRNG if not creating an SSL socket. * ne_ssl_readable_dname() is now defined to return UTF-8 strings. * Fix case where gssapi/gssapi_generic.h was included but not present. * Fix ne_utils.c build on platforms where zlib does "#define const". * Fix use of ne_proppatch_operation with some C++ compilers. * Update libtool for fix to --enable-shared on Darwin. * BeOS: check for gethostbyname in -lbind (David Reid). Changes in release 0.24.4: * Ignore unclean SSL closure when response body is delimited by EOF ("Could not read response body: Secure connection truncated" errors with some buggy SSL servers). * Fix test/ssl.c syntax errors with C89 compilers (Radu Greab). Changes in release 0.24.3: * Respect configure's --datadir argument (Max Bowsher). * Fix build on Windows when OpenSSL is not used. * Fix use of SSLv2 (spurious "Server did not present certificate" error). * When using SSL via a proxy, prevent leaking server auth credentials to the proxy, or proxy auth credentials to the server. Changes in release 0.24.2: * Fix name resolver with some old versions of glibc. * Fix problems with configure's "time_t format string" detection. * Fix problems when a broken Kerberos installation is found. * When verifying SSL certificates, check iPaddress names in the subjectAltName extension. Changes in release 0.24.1: * Add support for "GSS-Negotiate" Kerberos authentication scheme (from Risko Gergely and Burjan Gabor). * Disable Nagle to improve performance of small requests (thanks to Jim Whitehead and Teng Xu). * Fix compatibility with OpenSSL 0.9.6 (broken in 0.24.0). * Fix prototype mismatch in ne_207.c. * Define ssize_t from ne_request.h for Win32. * Prevent segfault on zlib initialization failures. * ne_sock_init does not fail if PRNG could not be seeded. * Fix segfault in cookies code (Markus Mueller). * Documentation updates. Changes in release 0.24.0: * Major changes to XML interface: - have the start-element callback either accept, decline, abort, or return a state integer. - remove 'struct ne_xml_elm'; callbacks are passed {nspace, name} strings along with a state integer. - dropped "collect", "strip-leading-whitespace" modes - push responsibility for accumulating cdata onto caller; drop 'cdata' argument from end-element callback. - don't abort if no handler accepts a particular element, just ignore that branch of the tree. - dropped support for libxml 1.x and expat < 1.95.0. - guarantee that start_element callback is not passed attrs=NULL - add ne_xml_doc_encoding() to retrieve encoding of parsed XML document. * Major changes to SSL interface: - rewrite of interfaces for handling server and client certificates; ne_ssl.h: many new functions available. - only PKCS#12-encoded client certs are supported. - changes to most names of SSL-related functions operating on an ne_session, e.g. ne_ssl_load_cert->ne_ssl_trust_cert. - client cert provider callback is passed the set of acceptable CA names sent by the server - the entire chain of certs presented by server is now accessible * Remove unused ne_register_progress() from socket layer. * Changes to resolver interface: ne_addr_first and _next return const; ne_addr_print renamed to ne_iaddr_print; ne_iaddr_make and ne_iaddr_free have been added. * ne_request_create() now duplicates the method string passed in. * ne_redirect_location() will now return NULL in some cases. * Split socket creation to ne_sock_create() from ne_sock_connect: - should report connect() error messages properly on Win32. * Fix several memory leaks in error handling paths. * Add a pkg-config file, neon.pc.in. Changes in release 0.23.9: * Fix inability to connect on AIX 4.3. * neon-config exports includes needed for OpenSSL given by pkg-config. * ne_redirect_location will return NULL if redirect hooks have not been registered for the session (Ralf Mattes ). Changes in release 0.23.8: * SECURITY: Prevent control characters from being included in the reason_phrase field filled in by ne_parse_statusline(), and in the session error string. * Disable getaddrinfo() support on HP-UX; fix resolver for HP-UX 11.11. * Fix digest auth response verification for >9 responses in session (bug manifests as "Server was not authenticated correctly" error). * On Linux, skip slow lookup for IPv6 addresses when IPv6 support is not loaded in kernel (thanks to Daniel Stenberg for this technique). * Update to autoconf 2.57 and libtool 1.4.3. Changes in release 0.23.7: * Fix for handling EINTR during write() call (Sergey N Ushakov). * When available, use pkg-config to determine compiler flags needed to use OpenSSL headers and libraries. Changes in release 0.23.6: * Fixes for error handling in socket layer on Win32 from Johan Lindh and Sergey N Ushakov : - meaningful error messages rather than "No error" - handle persistent connection timeouts properly * Fix to use RFC2617-style digest auth when possible (had reverted to only using RFC2068-style in 0.16.1). * Fix NULL pointer dereference on certain ill-formed PROPFIND responses. * Allow ne_sock_init to re-initialize after ne_sock_finish has been called (Sergey N Ushakov). Changes in release 0.23.5: * Fix rejection of SSL server certificates which had commonName as the least specific attribute in the subject name. * Fix to dereference entities (e.g. "&") in attribute values with libxml. * Fix ne_socket.c build on HP-UX 10.20 (thanks to Branko Èibej) * Remove misguided insistence on "secure" versions of zlib/OpenSSL; no checks for zlib version are now performed, only OpenSSL 0.9.6 is required. --with-force-ssl, --with-force-zlib option removed. * Add --with-egd[=PATH] option, conditionally enable EGD support; either using EGD socket at PATH, or fall back on system defaults. $EGDSOCKET and $HOME/.entropy are no longer used. * Add support for `--la-file' argument to neon-config, which prints the full path of the installed libneon.la file. Changes in release 0.23.4: * Ignore an unclean SSL shutdown on persistent connection timeout (fixing spurious "Secure connection truncated" errors). * Fix a segfault on second and subsequent requests using a given session, when the first fails with NE_LOOKUP. * Fix configure for gcc installations which produce warnings by default (such as gcc on hppa2.0n-hp-hpux11.00 using native as) Changes in release 0.23.3: * Further build fixes for Win32 (Blair Zajac). * Another fix for use of SSL against Tomcat 3.2. Changes in release 0.23.2: * Build fix for Win32 (Blair Zajac). Changes in release 0.23.1: * Identify as correct version, not 0.22. Changes in release 0.23.0: * Improved address resolver (ne_addr_*) replacing ne_name_lookup(): - use getaddrinfo() if found; include support for IPv6 (based on work by Noriaki Takamiya ) * For a hostname with multiple addresses, each address is tried in turn until a connection is made. * Support for seeding OpenSSL's PRNG via $EGDSOCKET or $HOME/.entropy, to enable SSL on platforms which lack a /dev/random device. * RFC2818 compliance for certificate identity checks in SSL: - use `dNSname' values in subjectAltName extension if present - hostname comparison fixed to not be case-sensitive * Fix interop with buggy SSL implementation in Tomcat 3.2. * Added NE_DBG_SSL debug channel. * ne_strerror changed to return the passed-in buffer. * Added ne_strnzcpy macro to ne_string.h. * Win32 build fixes, improvements, and documentation updates, from Blair Zajac . * Fix ne_sock_init so SIGPIPE signals are ignored even if SSL library initialization fails (e.g. platforms without /dev/random). * Added reference documentation: - ne_sock_init, ne_addr_*. Changes in release 0.22.0: * Remove the const qualifier from the reason_phrase field in ne_status. - ne_parse_statusline() now strdup's the reason_phrase * Remove the status_line argument from ne_207_end_propstat and _end_response * Change ne_session_create, ne_session_proxy, ne_sock_connect, and the 'port' field of the ne_uri structure to use an unsigned int for port numbers * ne_uri_defaultport returns unsigned and '0' on an unknown port (not -1). * Changes to hooks interface: - pass an ne_request pointer to per-request hooks - replace "accessor" hooks with ne_{get,set}_{request,session}_private * Authentication changes: - the hooks changes fix a segfault if auth is enabled for an SSL session through a proxy server - fix ne_forget_auth segfault if either proxy or server auth are not used * Improvements to persistent connection retry logic and error handling in request code; fixing some cases where some errors where incorrectly treated as a persistent connection timeout - a TCP RST at the appropriate time is now treated as a persistent connection timeout. - handle persistent connection timeouts on SSL connections * Changes to SSL support: - improved error handling - OpenSSL 0.9.6f or later is required for security fixes and functional correctness; 0.9.6 or later required for functional correctness - use --with-force-ssl to override OpenSSL version check - fix for proxy CONNECT tunnelling with some proxies (e.g. Traffic-Server) - fix potential segfault if client cert. provider callback is used - fix to use supplied password callback for PEM-encoded client certificates (Daniel Berlin ) * strerror_r is used if available for thread-safe error handling. * Remove ne_read_file(). * ne_version_match replaces ne_version_minimum (semantics changed slightly). * XML request bodies use a content-type of "application/xml" now; applications can use NE_XML_MEDIA_TYPE from ne_xml.h * Fix decompress code on big-endian or 64-bit platforms. * Fix to build on Darwin 6 (aka Mac OS X 10.2) (Wilfredo Sánchez, ) * Win32 changes: - remove conflict between OpenSSL's X509_NAME and recent versions of the Platform SDK (Branko Èibej) - fix inverted debug/non-debug build logic (Branko Èibej) - add NODAV and OPENSSL_STATIC flags to neon.mak (Gerald Richter) Changes in release 0.21.3: * Fix segfault if using proxy server with SSL session and server certificate verification fails. * Fix leak of proxy hostname once per session (if a proxy is used). * Add --with-libs configure argument; e.g. --with-libs=/usr/local picks up any support libraries in /usr/local/{lib,include} Changes in release 0.21.2: * Fix 'make install' for VPATH builds. * Use $(mandir) for installing man pages (Rodney Dawes). * Follow some simple (yet illegal) relativeURI redirects. * Always build ne_compress.obj in Win32 build (Branko Èibej). * Fix decompression logic bug (Justin Erenkrantz ) (could give a decompress failure for particular responses) * Fix ne_proppatch() to submit lock tokens for available locks. * More optimisation of ne_sock_readline. Changes in release 0.21.1: * Don't include default SSL port in Host request header, which can help interoperability with misbehaving servers (thanks to Rodney Dawes ). * Don't give a "truncated response" error from ne_decompress_destroy if the acceptance function returns non-zero. * Fix for Win32 build (Sander Striker ). * Fix for cookie name/value being free()d (thanks to Dan Mullen). * Optimisation of ne_sock_readline. Changes in release 0.21.0: * Socket layer implements read buffering; efficiency and performance improvement. Based on work by Jeff Johnson * Cleanup of socket interface: - renamed everything, s/sock_/ne_sock_/, s/SOCK_/NE_SOCK_/ - removed unused and inappropriate interfaces. - renaming done by Olof Oberg - see src/ChangeLog for the gory details. * Fix typoed 'ne_destroy_fn' typedef (Olof Oberg). * Support OpenSSL/ENGINE branch. * Bogus ne_utf8_encode/decode functions removed. * ne_base64() moved to ne_string.[ch]. * ne_token drops 'quotes' parameter; ne_qtoken added. * ne_buffer_create_sized renamed to ne_buffer_ncreate. * ne_xml_get_attr takes extra arguments and can resolve namespaces. * ne_accept_response function type takes const ne_status pointer. * Drop support for automatically following redirects: - ne_redirect_register just takes a session pointer - ne_redirect_location returns an ne_uri pointer * configure changes: --with-ssl and --with-socks no longer take a directory argument. To use SOCKS or SSL libraries/headers in non-system locations, use ./configure CPPFLAGS=-I/... LDFLAGS=-L/... * Reference documentation included for most of ne_alloc.h and ne_string.h, and parts of ne_session.h and ne_request.h. - see installed man pages, HTML documentation. Changes in release 0.20.0: * Major changes to DAV lock handling interface (ne_locks.h): - struct ne_lock uses a full URI structure to identify locked resource - ne_lock() requires that owner/token fields are malloc-allocated (or NULL) on entry - introduce a "lock store" type, ne_lock_store, to replace the lock session; accessor functions all renamed to ne_lockstore_*. - ne_lock_iterate replaced with a first/next "cursor"-style interface - If: headers use an absoluteURI (RFC2518 compliance fix). - fix for handling shared locks on DAV servers which return many active locks in the LOCK response (thanks to Keith Wannamaker) * Moved URI/path manipulation functions under ne_* namespace (ne_uri.h): - path handling functions renamed to ne_path_* - URI structure handling to ne_uri_*; struct uri becomes ne_uri. - ne_uri_parse doesn't take a 'defaults' parameter any more - if URI port is unspecified, ne_uri_parse sets port to 0 not -1. - added ne_uri_unparse and ne_uri_defaultport functions. * New 'ne_fill_server_uri' function to initialize a URI structure with the server details for a given session (useful with locks interface). * ne_decompress_{reader,destroy} are defined as passthrough-functions if zlib support is not enabled. * API change: ne_ssl_provide_fn returns void not int. * Added NE_SSL_FAILMASK for verify failure sanity check. * Removed return codes NE_SERVERAUTH and and NE_AUTHPROXY; correct documentation, NE_PROXYAUTH is given for proxy auth failure. * Require zlib >= 1.1.4 to avoid possible vulnerability in earlier versions. See http://www.gzip.org/zlib/advisory-2002-03-11.txt for more details. (version check can be skipped by passing --with-force-zlib to configure) * New 'ne_ssl_readable_dname' function to create a human-readable string from an X509 distinguished name. * Fix support for newer versions of libxml2 (thanks to Jon Trowbridge ). * Fix corruption of reason_phrase in status object returned by ne_propset_status. * More lenient handling of whitespace in response headers. * ne_content_type_handler will give a charset of "ISO-8859-1" if no charset parameter is specified for a text/* media type (as per RFC2616). * Miscellaneous cleanups and fixes (Jeff Johnson ). Changes in release 0.19.4: * Support bundled build of expat 1.95.x (Branko Èibej). Changes in release 0.19.3: * For platforms lacking snprintf or vsnprintf in libc, require trio. * Add NE_FMT_OFF_T to fix Win32 build (Dan Berlin, Branko Èibej). * Fix SSL support in Win32 build (Branko Èibej). Changes in release 0.19.2: * Fix non-SSL build broken in 0.19.1. * Working SOCKSv5 support (thanks to Torsten Kalix ) Changes in release 0.19.1: * Add missing stubs for ne_ssl_* functions for non-SSL build. * Fix some error messages in new SSL code. Changes in release 0.19.0: * Major API change: ne_session_create now takes (scheme, hostname, port) arguments: a session is clarified to be "a group of requests to a certain server". - removal of ne_session_server, ne_set_secure, and ne_set_proxy_decider - ne_session_proxy returns void. - DNS lookups are delayed until request dispatch time. * Significant improvements to TLS/SSL support: - SSL is enabled if scheme passed to ne_session_create is "https" - new interfaces to load CA certs and to load SSL library's bundled CA certs - add server cert verification callback. An SSL connection to a server with an unknown CA will now fail unless a verification callback is used. - enable SSL session caching (performance improvement) - support for wildcard server certs where commonName is "*.example.com". - thanks to Tommi Komulainen for the contribution of code from mutt's IMAP/SSL implementation under the LGPL, from which bits of this were derived. * Improved SSL client certificate support: - far simpler interface, all done at ne_session.h level. - supports PKCS#12 and PEM-encoded certificates. - optional callback for only providing client when demanded by server. * Support for TLS upgrade is removed, since it isn't useful. * If NEON_SSL is defined, API extensions are available to: - allow access to the SSL_CTX * to adjust session SSL options - retrieve the server certificate (X509 *) * Decompress fixes: - fix potential segfault in ne_decompress_destroy - check the CRC of the deflated output (and fail if it doesn't match) - fail appropriately on truncated responses, and trailing bytes in response. * Added ne_set_read_timeout to use configurable timeout on socket reads. * Malformed response headers will be ignored rather than failing the request. * ne_set_error takes printf-style vararg. * Fixes for ne_get_range and improve error handling. * Functions which append to an ne_buffer do not return a success value, but they do use ne_realloc/ne_malloc under the hood now, so an OOM callback will be used (with the usual caveats). * XML interface does not strip leading whitespace from cdata by default, the NE_XML_STRIPWS flag is available to restore this feature if required. * Upgraded to libtool 1.4.2: - should fix --enable-shared on Mac OS X 10.1 * Test suite now contains over one hundred tests. Changes in release 0.18.5: * Removed old neon.dsp, neon.dsw. * Update Win32 build to add OpenSSL and zlib support (Branko Èibej). * Fix ne_compress.c to compile on Win32 (Branko Èibej). Changes in release 0.18.4: * Fixes for Content-Type parsing using ne_content_type_handler (Greg Stein) - also now parses the charset parameter from header value. * Removed ne_concat() function, which didn't work and wasn't used. Changes in release 0.18.3: * Fix parsing lock timeout from server (Arun Garg). * Send Timeout headers in LOCK and refresh LOCK requests (Arun Garg). * Updated neon.mak and config.hw.in for Win32 build (patch from Branko Èibej ). * Define XML_BYTE_ORDER for bundled expat build in support macro NEON_XML_PARSER(). Changes in release 0.18.2: * Fix --with-neon=PATH in support macros. * Support DESTDIR in Makefile install targets (patch by Pawel Golaszewski ). * Portability fixes: - fix configure check for time_t on some platforms (e.g Solaris 2.6). - remove expect100_works bitfield in ne_session structure (thanks to Yan Periard ). Changes in release 0.18.1: * Minor fix for authentication: "attempt" counter was not reset correctly after authentication failed, so subsequent requests would not authenticate correctly either. * API change: ne_session_destroy returns void (there was no error case). * Portability fixes (non-GCC compilers, 64-bit platforms, UnixWare 7) * Optimisations in string manipulation routines. * config.hw is included in the release tarball again. * Improvements in the autoconf support macros: - check for neon-config in PATH if --with-neon is not given - stop if --with-neon is used, and the check for external neon fails - added NEON_WITHOUT_ACL to prevent build of ne_acl.o Changes in release 0.18.0: * API change: authentication callback is passed fixed-size username/password buffers, and an 'attempt' counter. Authentication is retried *forever* until either it succeeds, or the callback returns non-zero. * API clarifications: - ne_propname may have a NULL nspace field, indicating the property has no namespace. This holds for properties returned by the propfind interfaces. - added NE_ELM_PROPS_UNUSED as the lowest element number which should be used with handlers added to the XML parser returned by ne_propfind_get_parser. * Fixes and cleanups of lock discovery interface. * Fix for short write handling in ne_get() (thanks to rado ). * Fix for XML namespace prefix handling where a prefix could be mapped to an incorrect URI (e.g. in PROPFINDs against mod_dav with >10 namespaces used) * Add '--support ' option to neon-config; the script exits with success if given feature is supported. Known features are ssl, dav, zlib. * Support for SSL, DAV, zlib is exported by neon.m4 as shell variable NEON_SUPPORTS_{SSL,DAV,ZLIB}={yes,no} for bundled and external builds. * `neon-config --cflags` won't include -I/usr/include for SSL build. * Fix to call progress callbacks while sending request bodies again. * Test changes: - portability fixes, auth interface and progress tests. Changes in release 0.17.2: * Accept Status-Lines with no reason phrase (Jeremy Elson). * Fix handling of persistent connection timeout, and better error handling if sending a request fails. * Fix crashes in locking code. * Return parse error on XML namespace prefix declaration with an empty value. Thanks to Julian Reschke. * Allow passing property names with NULL namespace to ne_proppatch. * Fix for cross-compilation (Mo DeJong). * Moved ne_propname definition from ne_207.h to ne_props.h. * Test changes: - updated for Status-Line parsing changes (Jeremy Elson) - better persistent connection tests - fixed for --disable-webdav build Changes in release 0.17.1: * Add support for ACL method (Arun Garg ), see ne_acl.h. * Fixes and clean up of libraries exported via `neon-config --libs' * Fix timezone handling when parsing dates (on some platforms). * Upgrade to autoconf 2.52 and libtool 1.4 (thanks to Mo DeJong). * Cleanup/simplification of request dispatching: - better handling of error cases, including fix for a possible infinite loop when the server closes the connection prematurely. * Add '--without-zlib' configure option. * Test changes: - prettify output; imitate Perl test suite output. - add tests for interim 1xx responses, persistent connections, more unbounded operations. Changes in release 0.17.0: * Add support for decoding gzip Content-Encoding: see ne_compress.h. - built if zlib is found; `neon-config --cflags' will define NEON_ZLIB if so. * Rewrite hooks interface to register individual callbacks. - inspired by the Apache 2.0/APR hooks interface * Register cookies hooks using ne_cookie_register(). * Clean up configure scripts to enable use of autoconf 2.5x (Mo DeJong). * Use new endianess configure macro to allow cross-compiling (Mo DeJong). * Fix invalid C code in sock_init() in Win32 build (Mo DeJong). * Fix use of signal() on Win32 (Mo DeJong). * Workaround libxml 1.x string handling not being UTF-8. * Test changes: - add tests for decompression interface. Changes in release 0.16.1: * Also handle write errors in ne_get_range. * Dump request body blocks in debugging mode. * Fix ne_shave() causing memory corruption when the result should have been the empty string. * Refactor auth header parsing code; more efficient now. - fixes digest auth RFC2617-style broken in 0.16.0 Changes in release 0.16.0: * API change: ne_copy takes a depth parameter (thanks to Arun Garg, Medha Atre) * API change: validate callback to ne_xml also takes a userdata arg. * Added 'ne_lock_refresh' for performing lock refresh (Arun Garg). * Add SSL support to Win32 build (Peter Boos ) (see INSTALL.win32 for details). Compile with USE_DAV_LOCKS also. * Remove Server header parser for 100-continue support in ne_options. (and remove broken_expect100 from ne_server_capabilities). * Set SIGPIPE disposition to "ignored" in sock_init(). * On platforms with setvbuf(), turn off buffering for the debug log stream. * Ignore repeated calls to sock_init(). * Fixes to error handling in ne_get_range. * Minor improvements to memory handling in auth code. * Fix for start_propstat callback being called with NULL response argument when given invalid XML, causing a segfault in propfind code. * Test changes: - add regression test for the propfind segfault. - handle segfaults better (reap the child, flush the debug log). Changes in release 0.15.3: * Fix --with-expat=DIR build. Changes in release 0.15.2: * Fix Win32 for XML parser changes (Gerald Richter). * Substitute versions into config.hw at distribution time. * Add date parser for ISO8601-formatted dates as defined by RFC2518, e.g. the creationdate property (Taisuke Yamada ). * Fix Y2K bug in RFC1036 date parsing algorithm. * Test changes: - add tests for date parsing functions. Changes in release 0.15.1: * Win32 update from Gerald Richter - new files neon.mak, INSTALL.win32 * Fix for ne_socket.h includes (Mo DeJong). * More improvements for XML parser selection logic: - if parser is required, be sure to fail configure if none is found. - added --with-included-expat for bundled expat logic. * Rename --enable-debugging to --enable-debug (Mo DeJong). - added NEON_DEBUG macro to exported autoconf macros. * Call progress callbacks for request bodies. * Test changes: - check that reading response headers is a bounded operation. - use a pipe between child and parent to avoid race condition and tedious sleep(). Changes in release 0.15.0: * Major API renaming to use ne_/NE_ namespace: - http_ to ne_, HTTP_ to NE_, dav_ to ne_, DAV_ to NE_, neon_ to ne_ - hip_xml_ to ne_xml_, HIP_ELM_ to NE_ELM_, HIP_XML_ -> NE_XML_ - sbuffer_ to ne_buffer_ - DEBUG() to NE_DEBUG(), DEBUG_ to NE_DBG_ * Type renames: - http_req to ne_request - sbuffer to 'ne_buffer *' * Note, 'ne_buffer' is not an implicit pointer type, you must specify the '*' now, e.g. 'ne_buffer *buf = ne_buffer_create();'. * ne_buffer is no longer opaque. - ne_buffer_data() removed: use buf->data instead. - ne_buffer_size() is a macro. * Header renames and additions: - http_request.h -> ne_request.h - Session code split into ne_session.h - hip_xml.h -> ne_xml.h, nsocket.h -> ne_socket.h, http_utils.h -> ne_utils.h - neon_md5.h -> ne_md5.h, dav_207.h -> ne_207.h - http_basic.h and dav_basic.h merged into ne_basic.h * New functions: - ne_token and ne_shave, to obsolete split_string, shave_string. * Removed: ne_get_request_headers(). * autoconf changes: - disable building shared neon library by default. - option --enable-libxml is replaced by --with-libxml1 and --with-libxml2 to force use of a particular parser. * Fix auth code to only take MD5 digests of response body blocks when necessary (thanks to Kai Sommerfeld). * Fix alignment bug in MD5 code which could cause SIGBUS on Sparc architectures (Kai Sommerfeld). * Rewrite of request body handling: - ne_set_request_body_fd replaces _stream, using an int fd rather than a FILE *. - added ne_set_request_body_provider to give a callback which is called to provide request body blocks. - removal of 'use_body' hook in favour of 'ne_pull_request_body' function to allow hooks to manually read the request body. - ne_{put,get,post,put_if_unmodified} all take an integer fd rather than a FILE * stream. * Test changes: - added framework for testing "over the wire" (fork a server process) - added tests for response message length handling, chunked responses, header folding, sending request bodies. - start at listing RFC2616 requirements and whether they are met or not in test/STATUS. - test for MD5 alignment bug on Sparc (thanks to Kai Sommerfeld). Changes in release 0.14.0: * Add C++ inclusion safety to http_auth.h (Kai Sommerfeld). * Define ssize_t on Win32. (Kai Sommerfeld). * Add C++ inclusion safety to dav_locks.h and ne_alloc.h (thanks to Gregor Bornemann ). * Significant API change to properties code, to allow use of allprop and complex properties: - dav_propfind_set_complex and _set_flat are removed. - add parameter to dav_propfind_named to take the list of property names to be fetched. - new function dav_propfind_set_private to set private callback. - all properties not handled by caller are stored as flat properties. * Untested: add basic SOCKSv5 support: configure --with-socks. - please report success/failure to neon@webdav.org * Win32/MSVC build files from Magnus Sirwiö . * Fix for expat detection from Shane Mayer . * Namespace-protect md5 code and more. - md5_* -> ne_md5_* - ascii_to_md5 -> ne_ascii_to_md5 (and moved to neon_md5.h) * Parse authinfo segment in URIs (Johan Lindh ). - added 'authinfo' field to struct uri. * New API: hip_xml_get_attr to retrieve attributes. * Store language for properties, access with dav_propset_lang. - only if property is defined on the property element itself. * Started a simple test suite (test/*). - includes some simple HTTP server tests. * Remove "Content-Length: 0" header for request with no body, fixing interop with Squid 2.3-STABLE1 (thanks to Kai Sommerfeld). * http_parse_statusline skips leading whitespace. (Johan Lindh). * Partial fix for timezone/date parsing problems. Changes in release 0.13.0: * Fix ne_strndup allocating one byte less than it should (Kai Sommerfeld) - if you use uri_parse, this bug may have caused subtle memory corruption in your application. * Revert API changes in 0.12: property values are not UTF-8 encoded/decoded internally. (thanks to Greg Stein) * Add another optional argument to NEON_BUNDLED macros, actions to be run if bundled build is *not* selected. * API change: added argument to http_add_hooks to register cleanup function for the cookie. * Removed dav_lock_unregister in favour of automatic cleanup when session is destroyed. * Fixed leaks in redirect code (Kai Sommerfeld). * Fixed crashes in hip_xml_destroy (Kai Sommerfeld). * Redirects to a different hostname/port/scheme are never followed: the request will fail with HTTP_REDIRECT instead. Redirect notification callback is only called for *followed* redirects. New API: http_redirect_location() for retrieving location of last redirect. * Authentication is now implemented as a hook, independently of http_request.c: - API change: removed 'hostname' argument from auth callbacks. - API change: you must now include http_auth.h from your application. - Also fixes case of using server and proxy authentication simultaneously * Added 'http_forget_auth' to clear authentication session. * New API: http_session_hook_private for retrieving private per-session cookie for hooks. * API change: http_set_request_body_stream has a return error value. * API change: http_set_request_body_buffer now takes the buffer length too. * New API: caller-pulls interface for reading response body: http_begin_request, http_end_request, http_read_response_block. An alternative to using the (much simpler) http_request_dispatch. * Make --disable-webdav build work. * New API: dav_propnames for retrieving property names. * New API: dav_propfind_get_request to access request object of handler. * API change: progress and connection status callbacks implemented at http_request.h level. Socket-level status callbacks removed, progress callbacks made per-socket. * Supports new expat (Sam TH ) * Supports libxml2 (in preference to libxml1). * API change: added namespace protection to base64 and dates functions: all have ne_ prefix now. * Fixed ranged GETs where a specific range is requested (Johan Lindh ). * Limit number of response header fields to 100. * Allow requests for the '*' URI even if a proxy server is in use. * libxml: Get useful error messages for parse errors. Changes in release 0.12.0: * Portability fixes to http_request.c and http_auth.c. - fixes digest auth on big-endian architectures. * Fix warnings from stray tokens after #endif's in uri.h and string_utils.h. * Add C++ inclusion safety to http_redirect.h (Kai Sommerfeld ). * Make redirects to a different host work (Kai Sommerfeld). * Fix reading response bodies when non-chunked and no Content-Length (Kai Sommerfeld). * API change: 'http_add_hooks takes a 'const' request object. * Fixed memory leaks in session hooks (thanks to Kai Sommerfeld). * Fix passing NULL props argument to dav_simple_propfind, to support allprop requests. **** MAJOR INTERFACE CHANGE **** - URIs passed to http_request_create() are NOT escaped by neon. You MUST do this yourself to remain HTTP compliant, using e.g. uri_abspath_escape. (Kai Sommerfeld) * Added --disable-webdav flag to configure, to disable DAV support in the library. This allows building neon without an XML parser. * Corresponding NEON_WITHOUT_WEBDAV macro for use in bundled builds. * Fix Makefile dependancies. * A bundled neon directory builds or doesn't build automatically (i.e. you recurse into it unconditionally). * API clarification: - dav_propset_status may return NULL if the server does not return a response for the given property (issue is open for debate). * API change up for debate: - Property values to dav_proppatch are UTF-8 encoded internally. - Property values in dav_propfind_* are UTF-8 decoded internally. * API additions: ne_realloc, ne_utf8_encode. Changes in release 0.11.0: * Added SSL client certificate support with 'sock_set_client_cert'. - Supports certs in PEM-encoded files. - Specify a callback for prompting the user for the password with sock_set_key_prompt. * Added 'ne_oom_callback', to register a callback which is used if malloc() returns NULL. (Mike Rosellini ) * Register appropriate callback with libxml to handle ). Changes in release 0.10.1: * Default expect-100 to OFF. Changes in release 0.10.0: * hip_xml API changes: - The search for a handler for a new child element begins at the handler of the parent element, and carries on up the stack. (previously, it always started from the base of the stack) - Documentation written: doc/parsing-xml.txt * Remove memory leaks and tidy debugging output in new properties code. * API changes to DAV locking interface: - New function: dav_lock_copy to copy a lock object. - Re-ordered arguments to callback of dav_lock_discover, and made the lock object passed back const. - Fix leaks and crashes due to vague interface definitions. * API change to dav_propfind_set_complex: use a callback to return the 'private' structure. * NEON_NORMAL_BUILD and NEON_LIBTOOL_BUILD macros defined for setting up neon's Makefile in a bundled build: see macros/neon.m4. * NEON_VPATH_BUNDLED macro added which takes separate srcdir and builddir arguments for supporting VPATH builds (thanks to Peter Moulder ). * Added optional final argument to NEON_(VPATH_)BUNDLED, which gives a set of actions to be run if the bundled build is chosen. * NEON_SSL checks for OpenSSL in /usr too. * API change: when using http_session_decide_proxy, it MUST be called before using http_session_server to prevent the DNS lookup on the origin server being optimised out. The real scheme in use is passed to the callback now. * New function, dav_207_ignore_unknown, to ignore any unknown XML fragments in the 207 response. Used by properties layer. Changes in release 0.9.2: * Fix using both dav_propfind_set_complex and dav_propfind_set_flat with the same propfind_handler. Changes in release 0.9.1: * dav_propfind interface - Guarantee that the 'private' structure will be initialized to zero on creation. - Make it the *callers* responsibility to free() the private structure. * Fix a few arguments/variables which mirrored globally declared symbols. Changes in release 0.9.0: * Removed old dav_propfind_* interface, replaced with a better, more powerful, and easier to use interface: - 'dav_simple_propfind' interface for just fetching "flat" (byte-string) properties. - 'dav_propfind_*' interface for fetching flat and/or "complex" (structured XML) properties. - Lets you retrieve the 'status' information, to see what happened if fetching the property failed (e.g 404 Not Found). * Fixes to doc/using-neon.txt (thanks to Greg Stein). * Allow building when srcdir != builddir (Mo DeJong ) Changes in release 0.8.1: * Fix segfault in PROPFIND code. Changes in release 0.8.0: * Fix for using COPY/MOVE over SSL (thanks to David Sloat). * Fix for using a proxy server and SSL. * Added 'http_get_scheme' API call. * Added 'http_redirect.h' to list of installed headers (thanks to everyone ;). * Changes for building on Windows (Peter Boos ) * Fixes for building on BeOS (Sam TH and David Reid ). * Add buffering to socket code for pre-BONE BeOS systems (David Reid). * Interface changes for hip_xml: - Renamed hip_xml_add_(mixed_)handler to hip_xml_push_(mixed_)handler - Documentation updates. - Added HIP_ELM_UNUSED for lowest element id which should be used. *** MAJOR INTERFACE CHANGE *** - Removed 'http_status *' pointer from http_request_dispatch. - Added http_get_status(req) to retrieve the response-status information instead. You don't have to declare an http_status object yourself now. * Similarly, added DAV_ELM_207_UNUSED for lowest element id which should be used by users of dav_207_* code (incl. use of dav_propfind_* code). * New NEON_* autoconf macro interface: - Use NEON_BUNDLED if sources are bundled, otherwise NEON_LIBRARY. - The NEON_XML_PARSER macro is NOT called automatically. You must call this yourself if using NEON_BUNDLED; see doc/using-neon.txt for details. * Fix use of 'socket' in nsocket.h function prototypes (Greg Stein). * Remove extra backslash at line 69 of src/Makefile.incl (Dirk Bergstrom). * Examples directory is now a separate package. Changes in release 0.7.7: * Another fix for linking against a libtool-built expat (Greg Stein). Changes in release 0.7.6: * Better check for closed SSL connection after doing SSL_peek. (thanks to Jeff Costlow ). * Attempt at correct sock_block() implementation for SSL. * sock_peek() will return SOCK_CLOSED correctly. Changes in release 0.7.5: * Fixed workaround for linking against a libtool-built expat (Greg Stein). Changes in release 0.7.4: * Fix for fd leak on connect failure (David Sloat ). * Fix for Digest auth against IIS5 (David Sloat). * Workaround for linking against a libtool-built libexpat.la (Greg Stein). Changes in release 0.7.3: * Check for -lsocket and -linet in configure. * Workaround for SSL problems. Changes in release 0.7.2: * Define SHELL in Makefile (thanks to Eric Mumpower ). * Added 'all' target to Makefile (Greg Stein ) * Added '--with-expat' argument to configure (Greg Stein) * Added 'dav_propfind_destroy' function. Changes in release 0.7.1: * Don't register response body/header authentication callbacks if no credentials-supplying callback has been registered (speed optimisation). Changes in release 0.7.0: * Deprecated use of 'NULL' to http_add_response_header_handler. New interface, http_add_response_header_catcher, to register a callback which is passed ALL response headers regardless of name. * Speed optimisation (~10%?): storing response-header handlers in a hash table for faster look. * New SBUFFER_CAST() macro for getting to the 'char *' of an sbuffer as fast as possible. Changes in release 0.6.1: * Fix for retrying request if connection is closed by server. * Make redirect hook work for >1 request per session. Changes in release 0.6.0: * New interface to allow following HTTP redirects (301/302 responses). A callback must be given to get user confirmation if the request method is not GET, HEAD, or PROPFIND. * New interface to determine whether the proxy server should be used for a given request: http_session_decide_proxy. * Fix nget build again. Support automatic redirects in 'nget'. * Add --with-extra-includes and --with-extra-libs configure parameters to point configure at Changes in release 0.5.1: * Prevent segfault if USE_DAV_LOCKS is defined, and a locking session is not registered (thanks to David Sloat). Changes in release 0.5.0: * Rename xmalloc, xstrdup etc to ne_malloc, ne_strdup etc. * Some speed optimisation in response-header reading. * Use 'off_t' rather than 'size_t' in sock_progress callback, sock_readfile_blocked, and sock_transfer. Changes in release 0.4.2: * Fix for sending request bodies after getting 100-continue response. Changes in release 0.4.1: * Fix nget build. Changes in release 0.4.0: * Install library headers into .../include/neon not .../include/libneon * Install all necessary library headers. * Compile support for WebDAV locking throughout the library * Rename md5.h to neon_md5.h (avoids conflict with md5.h in OpenSSL) * Rename socket.h to nsocket.h (avoids possible conflict with C library) * Update licensing notice on macros/neon*.m4: note that these files are NOT under the LGPL, and can be used in other packages regardless of the license the package uses. * Update NEON_LIBRARY m4 function to allow optional specification of names of bundled neon/expat source directories. * Increase socket read timeout to 60 seconds. * Added an POST method: from Sander Alberink . * Added 'http_get_request_headers' to return the sbuffer containing all request headers. * Allow passing NULL as name to http_add_response_header_handler: the handler callback is passed the entire header string, of ALL response headers. Changes in release 0.3.1: * Compile fix for dav_locks.c (thanks to Paul D'Anna) Changes in release 0.3.0: * Rewrite of socket handling layer. All sock_* functions changed. * Added basic SSL support: --with-ssl (requires OpenSSL). NOTE: Certificates are NOT presented for verification. * 'nget' accepts URL's using the 'https' scheme. * New example program, 'nserver', to display the Server: string, e.g. 'nserver https://www.eu.c2.net/' * Fixed request re-send when persistent connection times out. * "Hooks" support: allow external hooks into the HTTP request/ response dispatch loop. * New printf-style interface for adding request headers. * Make symbols used in header files C++-safe (Tom Bednarz). * WebDAV locking support: lock discovery, LOCK (exclusive/shared) UNLOCK. "If:" headers are sent as appropriate. Simple interface for implementors of new methods to indicate which locks are required for the method. * Primitive HTTP cookies support. * Primitive hack at a GNOME-based GUI example program "nbrowse". Enable build with --enable-gnome-examples. It crashes, and not much else. Requires GNOME and POSIX threads. Example usage: 'nbrowse dav.ics.uci.edu /msdav/' Many thanks to Lee Mallabone for Gtk help, and showing how to use Gtk and threads. Changes in release 0.2.0: * Use libtool: new configure options to select whether to build shared and/or static libraries. Should build shared libraries portably now. * Complete rewrite of the hip_xml interface to use opaque pointers. New functions: hip_xml_create, hip_xml_destroy: create parser. hip_xml_{set,get}_error: Access to error string. hip_xml_add_handler: Register callbacks for a set of elements. hip_xml_valid: Returns whether the parse was valid or not. Removed functions: hip_xml_init, hip_xml_finish. * Removed functions made reduntant by above changes in dav_207. * Don't include config.h in header files * Fix PROPFIND allprop request body (Michael Sobolev) * Added C++ safety macros around header files. * Added neon-config script for getting correct CFLAGS and LIBS values for using libneon in applications. Changes in release 0.1.1: * Fix for short writes in GET Changes in release 0.1.0: * Initial release. tla-1.3.5+dfsg/src/libneon/BUGS0000644000175000017500000000221610457621776014655 0ustar useruser Known problems/bugs in neon -*- text -*- --------------------------- * 2818 requires that a on rejection of the SSL server cert, a "bad certificate" message should be sent - this is not being done currently (and can probably only be done with OpenSSL by actually doing cert verification in the verify callback) * ne_lock_discover does not handle multiple (shared) locks on a single resource. * SSL session caching issues; only cache for clean shutdowns, and only cache on shutdown, since the SSL_SESSION may change during an ne_session. * what is passed as 'path' to req create hook: auth needs Request-URI; how does that interact with proxies? also they will be passed NULL for a CONNECT request, or "*" possibly as well. * expect100 support is broken. * It would be nice to fail with a friendly error message if a client cert is requested by the srever but one is not provided. Currently, returning -1 from the provide_client_cert function would allow that (as it forces the SSL handshake to fail), but that would prevent opportunistic use of client certificates, of the "SSLVerifyClient optional" variety. tla-1.3.5+dfsg/src/libneon/config.guess0000755000175000017500000012625710457621776016526 0ustar useruser#! /bin/sh # Attempt to guess a canonical system name. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, # Inc. timestamp='2006-06-06' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA # 02110-1301, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Per Bothner . # Please send patches to . Submit a context # diff and a properly formatted ChangeLog entry. # # This script attempts to guess a canonical system name similar to # config.sub. If it succeeds, it prints the system name on stdout, and # exits with 0. Otherwise, it exits with 1. # # The plan is that this can be called by configure scripts if you # don't specify an explicit build system type. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] Output the configuration name of the system \`$me' is run on. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; * ) break ;; esac done if test $# != 0; then echo "$me: too many arguments$help" >&2 exit 1 fi trap 'exit 1' 1 2 15 # CC_FOR_BUILD -- compiler used by this script. Note that the use of a # compiler to aid in system detection is discouraged as it requires # temporary files to be created and, as you can see below, it is a # headache to deal with in a portable fashion. # Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still # use `HOST_CC' if defined, but it is deprecated. # Portable tmp directory creation inspired by the Autoconf team. set_cc_for_build=' trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; : ${TMPDIR=/tmp} ; { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; dummy=$tmp/dummy ; tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; case $CC_FOR_BUILD,$HOST_CC,$CC in ,,) echo "int x;" > $dummy.c ; for c in cc gcc c89 c99 ; do if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then CC_FOR_BUILD="$c"; break ; fi ; done ; if test x"$CC_FOR_BUILD" = x ; then CC_FOR_BUILD=no_compiler_found ; fi ;; ,,*) CC_FOR_BUILD=$CC ;; ,*,*) CC_FOR_BUILD=$HOST_CC ;; esac ; set_cc_for_build= ;' # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 1994-08-24) if (test -f /.attbin/uname) >/dev/null 2>&1 ; then PATH=$PATH:/.attbin ; export PATH fi UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown # Note: order is significant - the case branches are not exclusive. case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in *:NetBSD:*:*) # NetBSD (nbsd) targets should (where applicable) match one or # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently # switched to ELF, *-*-netbsd* would select the old # object file format. This provides both forward # compatibility and a consistent mechanism for selecting the # object file format. # # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". sysctl="sysctl -n hw.machine_arch" UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ /usr/sbin/$sysctl 2>/dev/null || echo unknown)` case "${UNAME_MACHINE_ARCH}" in armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; *) machine=${UNAME_MACHINE_ARCH}-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently, or will in the future. case "${UNAME_MACHINE_ARCH}" in arm*|i386|m68k|ns32k|sh3*|sparc|vax) eval $set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep __ELF__ >/dev/null then # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). # Return netbsd for either. FIX? os=netbsd else os=netbsdelf fi ;; *) os=netbsd ;; esac # The OS release # Debian GNU/NetBSD machines have a different userland, and # thus, need a distinct triplet. However, they do not need # kernel version information, so it can be replaced with a # suitable tag, in the style of linux-gnu. case "${UNAME_VERSION}" in Debian*) release='-gnu' ;; *) release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. echo "${machine}-${os}${release}" exit ;; *:OpenBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} exit ;; *:ekkoBSD:*:*) echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} exit ;; *:SolidBSD:*:*) echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} exit ;; macppc:MirBSD:*:*) echo powerppc-unknown-mirbsd${UNAME_RELEASE} exit ;; *:MirBSD:*:*) echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} exit ;; alpha:OSF1:*:*) case $UNAME_RELEASE in *4.0) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` ;; *5.*) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` ;; esac # According to Compaq, /usr/sbin/psrinfo has been available on # OSF/1 and Tru64 systems produced since 1995. I hope that # covers most systems running today. This code pipes the CPU # types through head -n 1, so we only detect the type of CPU 0. ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` case "$ALPHA_CPU_TYPE" in "EV4 (21064)") UNAME_MACHINE="alpha" ;; "EV4.5 (21064)") UNAME_MACHINE="alpha" ;; "LCA4 (21066/21068)") UNAME_MACHINE="alpha" ;; "EV5 (21164)") UNAME_MACHINE="alphaev5" ;; "EV5.6 (21164A)") UNAME_MACHINE="alphaev56" ;; "EV5.6 (21164PC)") UNAME_MACHINE="alphapca56" ;; "EV5.7 (21164PC)") UNAME_MACHINE="alphapca57" ;; "EV6 (21264)") UNAME_MACHINE="alphaev6" ;; "EV6.7 (21264A)") UNAME_MACHINE="alphaev67" ;; "EV6.8CB (21264C)") UNAME_MACHINE="alphaev68" ;; "EV6.8AL (21264B)") UNAME_MACHINE="alphaev68" ;; "EV6.8CX (21264D)") UNAME_MACHINE="alphaev68" ;; "EV6.9A (21264/EV69A)") UNAME_MACHINE="alphaev69" ;; "EV7 (21364)") UNAME_MACHINE="alphaev7" ;; "EV7.9 (21364A)") UNAME_MACHINE="alphaev79" ;; esac # A Pn.n version is a patched version. # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` exit ;; Alpha\ *:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # Should we change UNAME_MACHINE based on the output of uname instead # of the specific Alpha model? echo alpha-pc-interix exit ;; 21064:Windows_NT:50:3) echo alpha-dec-winnt3.5 exit ;; Amiga*:UNIX_System_V:4.0:*) echo m68k-unknown-sysv4 exit ;; *:[Aa]miga[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-amigaos exit ;; *:[Mm]orph[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-morphos exit ;; *:OS/390:*:*) echo i370-ibm-openedition exit ;; *:z/VM:*:*) echo s390-ibm-zvmoe exit ;; *:OS400:*:*) echo powerpc-ibm-os400 exit ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) echo arm-acorn-riscix${UNAME_RELEASE} exit ;; arm:riscos:*:*|arm:RISCOS:*:*) echo arm-unknown-riscos exit ;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) echo hppa1.1-hitachi-hiuxmpp exit ;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. if test "`(/bin/universe) 2>/dev/null`" = att ; then echo pyramid-pyramid-sysv3 else echo pyramid-pyramid-bsd fi exit ;; NILE*:*:*:dcosx) echo pyramid-pyramid-svr4 exit ;; DRS?6000:unix:4.0:6*) echo sparc-icl-nx6 exit ;; DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) case `/usr/bin/uname -p` in sparc) echo sparc-icl-nx7; exit ;; esac ;; sun4H:SunOS:5.*:*) echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; i86pc:SunOS:5.*:*) echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:*:*) case "`/usr/bin/arch -k`" in Series*|S4*) UNAME_RELEASE=`uname -v` ;; esac # Japanese Language versions have a version number like `4.1.3-JL'. echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` exit ;; sun3*:SunOS:*:*) echo m68k-sun-sunos${UNAME_RELEASE} exit ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 case "`/bin/arch`" in sun3) echo m68k-sun-sunos${UNAME_RELEASE} ;; sun4) echo sparc-sun-sunos${UNAME_RELEASE} ;; esac exit ;; aushp:SunOS:*:*) echo sparc-auspex-sunos${UNAME_RELEASE} exit ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not # "atarist" or "atariste" at least should have a processor # > m68000). The system name ranges from "MiNT" over "FreeMiNT" # to the lowercase version "mint" (or "freemint"). Finally # the system name "TOS" denotes a system which is actually not # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) echo m68k-milan-mint${UNAME_RELEASE} exit ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) echo m68k-hades-mint${UNAME_RELEASE} exit ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) echo m68k-unknown-mint${UNAME_RELEASE} exit ;; m68k:machten:*:*) echo m68k-apple-machten${UNAME_RELEASE} exit ;; powerpc:machten:*:*) echo powerpc-apple-machten${UNAME_RELEASE} exit ;; RISC*:Mach:*:*) echo mips-dec-mach_bsd4.3 exit ;; RISC*:ULTRIX:*:*) echo mips-dec-ultrix${UNAME_RELEASE} exit ;; VAX*:ULTRIX*:*:*) echo vax-dec-ultrix${UNAME_RELEASE} exit ;; 2020:CLIX:*:* | 2430:CLIX:*:*) echo clipper-intergraph-clix${UNAME_RELEASE} exit ;; mips:*:*:UMIPS | mips:*:*:RISCos) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #ifdef __cplusplus #include /* for printf() prototype */ int main (int argc, char *argv[]) { #else int main (argc, argv) int argc; char *argv[]; { #endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_SVR4) printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); #endif #endif exit (-1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && SYSTEM_NAME=`$dummy $dummyarg` && { echo "$SYSTEM_NAME"; exit; } echo mips-mips-riscos${UNAME_RELEASE} exit ;; Motorola:PowerMAX_OS:*:*) echo powerpc-motorola-powermax exit ;; Motorola:*:4.3:PL8-*) echo powerpc-harris-powermax exit ;; Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) echo powerpc-harris-powermax exit ;; Night_Hawk:Power_UNIX:*:*) echo powerpc-harris-powerunix exit ;; m88k:CX/UX:7*:*) echo m88k-harris-cxux7 exit ;; m88k:*:4*:R4*) echo m88k-motorola-sysv4 exit ;; m88k:*:3*:R3*) echo m88k-motorola-sysv3 exit ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] then if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ [ ${TARGET_BINARY_INTERFACE}x = x ] then echo m88k-dg-dgux${UNAME_RELEASE} else echo m88k-dg-dguxbcs${UNAME_RELEASE} fi else echo i586-dg-dgux${UNAME_RELEASE} fi exit ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) echo m88k-dolphin-sysv3 exit ;; M88*:*:R3*:*) # Delta 88k system running SVR3 echo m88k-motorola-sysv3 exit ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) echo m88k-tektronix-sysv3 exit ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) echo m68k-tektronix-bsd exit ;; *:IRIX*:*:*) echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` exit ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i*86:AIX:*:*) echo i386-ibm-aix exit ;; ia64:AIX:*:*) if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} exit ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include main() { if (!__power_pc()) exit(1); puts("powerpc-ibm-aix3.2.5"); exit(0); } EOF if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` then echo "$SYSTEM_NAME" else echo rs6000-ibm-aix3.2.5 fi elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then echo rs6000-ibm-aix3.2.4 else echo rs6000-ibm-aix3.2 fi exit ;; *:AIX:*:[45]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${IBM_ARCH}-ibm-aix${IBM_REV} exit ;; *:AIX:*:*) echo rs6000-ibm-aix exit ;; ibmrt:4.4BSD:*|romp-ibm:BSD:*) echo romp-ibm-bsd4.4 exit ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to exit ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) echo rs6000-bull-bosx exit ;; DPX/2?00:B.O.S.:*:*) echo m68k-bull-sysv3 exit ;; 9000/[34]??:4.3bsd:1.*:*) echo m68k-hp-bsd exit ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) echo m68k-hp-bsd4.4 exit ;; 9000/[34678]??:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` case "${UNAME_MACHINE}" in 9000/31? ) HP_ARCH=m68000 ;; 9000/[34]?? ) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) if [ -x /usr/bin/getconf ]; then sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` case "${sc_cpu_version}" in 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 case "${sc_kernel_bits}" in 32) HP_ARCH="hppa2.0n" ;; 64) HP_ARCH="hppa2.0w" ;; '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 esac ;; esac fi if [ "${HP_ARCH}" = "" ]; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #define _HPUX_SOURCE #include #include int main () { #if defined(_SC_KERNEL_BITS) long bits = sysconf(_SC_KERNEL_BITS); #endif long cpu = sysconf (_SC_CPU_VERSION); switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0"); break; case CPU_PA_RISC1_1: puts ("hppa1.1"); break; case CPU_PA_RISC2_0: #if defined(_SC_KERNEL_BITS) switch (bits) { case 64: puts ("hppa2.0w"); break; case 32: puts ("hppa2.0n"); break; default: puts ("hppa2.0"); break; } break; #else /* !defined(_SC_KERNEL_BITS) */ puts ("hppa2.0"); break; #endif default: puts ("hppa1.0"); break; } exit (0); } EOF (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` test -z "$HP_ARCH" && HP_ARCH=hppa fi ;; esac if [ ${HP_ARCH} = "hppa2.0w" ] then eval $set_cc_for_build # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler # generating 64-bit code. GNU and HP use different nomenclature: # # $ CC_FOR_BUILD=cc ./config.guess # => hppa2.0w-hp-hpux11.23 # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess # => hppa64-hp-hpux11.23 if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | grep __LP64__ >/dev/null then HP_ARCH="hppa2.0w" else HP_ARCH="hppa64" fi fi echo ${HP_ARCH}-hp-hpux${HPUX_REV} exit ;; ia64:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` echo ia64-hp-hpux${HPUX_REV} exit ;; 3050*:HI-UX:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include int main () { long cpu = sysconf (_SC_CPU_VERSION); /* The order matters, because CPU_IS_HP_MC68K erroneously returns true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct results, however. */ if (CPU_IS_PA_RISC (cpu)) { switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; default: puts ("hppa-hitachi-hiuxwe2"); break; } } else if (CPU_IS_HP_MC68K (cpu)) puts ("m68k-hitachi-hiuxwe2"); else puts ("unknown-hitachi-hiuxwe2"); exit (0); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } echo unknown-hitachi-hiuxwe2 exit ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) echo hppa1.1-hp-bsd exit ;; 9000/8??:4.3bsd:*:*) echo hppa1.0-hp-bsd exit ;; *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) echo hppa1.0-hp-mpeix exit ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) echo hppa1.1-hp-osf exit ;; hp8??:OSF1:*:*) echo hppa1.0-hp-osf exit ;; i*86:OSF1:*:*) if [ -x /usr/sbin/sysversion ] ; then echo ${UNAME_MACHINE}-unknown-osf1mk else echo ${UNAME_MACHINE}-unknown-osf1 fi exit ;; parisc*:Lites*:*:*) echo hppa1.1-hp-lites exit ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) echo c1-convex-bsd exit ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) echo c34-convex-bsd exit ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) echo c38-convex-bsd exit ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) echo c4-convex-bsd exit ;; CRAY*Y-MP:*:*:*) echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*[A-Z]90:*:*:*) echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ -e 's/\.[^.]*$/.X/' exit ;; CRAY*TS:*:*:*) echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*T3E:*:*:*) echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*SV1:*:*:*) echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; *:UNICOS/mp:*:*) echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; 5000:UNIX_System_V:4.*:*) FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} exit ;; sparc*:BSD/OS:*:*) echo sparc-unknown-bsdi${UNAME_RELEASE} exit ;; *:BSD/OS:*:*) echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} exit ;; *:FreeBSD:*:*) case ${UNAME_MACHINE} in pc98) echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; amd64) echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; *) echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; esac exit ;; i*:CYGWIN*:*) echo ${UNAME_MACHINE}-pc-cygwin exit ;; i*:MINGW*:*) echo ${UNAME_MACHINE}-pc-mingw32 exit ;; i*:windows32*:*) # uname -m includes "-pc" on this system. echo ${UNAME_MACHINE}-mingw32 exit ;; i*:PW*:*) echo ${UNAME_MACHINE}-pc-pw32 exit ;; x86:Interix*:[345]*) echo i586-pc-interix${UNAME_RELEASE} exit ;; EM64T:Interix*:[345]*) echo x86_64-unknown-interix${UNAME_RELEASE} exit ;; [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) echo i${UNAME_MACHINE}-pc-mks exit ;; i*:Windows_NT*:* | Pentium*:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we # UNAME_MACHINE based on the output of uname instead of i386? echo i586-pc-interix exit ;; i*:UWIN*:*) echo ${UNAME_MACHINE}-pc-uwin exit ;; amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) echo x86_64-unknown-cygwin exit ;; p*:CYGWIN*:*) echo powerpcle-unknown-cygwin exit ;; prep*:SunOS:5.*:*) echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; *:GNU:*:*) # the GNU system echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` exit ;; *:GNU/*:*:*) # other systems with GNU libc and userland echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu exit ;; i*86:Minix:*:*) echo ${UNAME_MACHINE}-pc-minix exit ;; arm*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; avr32*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; cris:Linux:*:*) echo cris-axis-linux-gnu exit ;; crisv32:Linux:*:*) echo crisv32-axis-linux-gnu exit ;; frv:Linux:*:*) echo frv-unknown-linux-gnu exit ;; ia64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; m32r*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; m68*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; mips:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef mips #undef mipsel #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=mipsel #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=mips #else CPU= #endif #endif EOF eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' /^CPU/{ s: ::g p }'`" test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } ;; mips64:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef mips64 #undef mips64el #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=mips64el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=mips64 #else CPU= #endif #endif EOF eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' /^CPU/{ s: ::g p }'`" test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } ;; or32:Linux:*:*) echo or32-unknown-linux-gnu exit ;; ppc:Linux:*:*) echo powerpc-unknown-linux-gnu exit ;; ppc64:Linux:*:*) echo powerpc64-unknown-linux-gnu exit ;; alpha:Linux:*:*) case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in EV5) UNAME_MACHINE=alphaev5 ;; EV56) UNAME_MACHINE=alphaev56 ;; PCA56) UNAME_MACHINE=alphapca56 ;; PCA57) UNAME_MACHINE=alphapca56 ;; EV6) UNAME_MACHINE=alphaev6 ;; EV67) UNAME_MACHINE=alphaev67 ;; EV68*) UNAME_MACHINE=alphaev68 ;; esac objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} exit ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in PA7*) echo hppa1.1-unknown-linux-gnu ;; PA8*) echo hppa2.0-unknown-linux-gnu ;; *) echo hppa-unknown-linux-gnu ;; esac exit ;; parisc64:Linux:*:* | hppa64:Linux:*:*) echo hppa64-unknown-linux-gnu exit ;; s390:Linux:*:* | s390x:Linux:*:*) echo ${UNAME_MACHINE}-ibm-linux exit ;; sh64*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; sh*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; sparc:Linux:*:* | sparc64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; vax:Linux:*:*) echo ${UNAME_MACHINE}-dec-linux-gnu exit ;; x86_64:Linux:*:*) echo x86_64-unknown-linux-gnu exit ;; i*86:Linux:*:*) # The BFD linker knows what the default object file format is, so # first see if it will tell us. cd to the root directory to prevent # problems with other programs or directories called `ld' in the path. # Set LC_ALL=C to ensure ld outputs messages in English. ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \ | sed -ne '/supported targets:/!d s/[ ][ ]*/ /g s/.*supported targets: *// s/ .*// p'` case "$ld_supported_targets" in elf32-i386) TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu" ;; a.out-i386-linux) echo "${UNAME_MACHINE}-pc-linux-gnuaout" exit ;; coff-i386) echo "${UNAME_MACHINE}-pc-linux-gnucoff" exit ;; "") # Either a pre-BFD a.out linker (linux-gnuoldld) or # one that does not give us useful --help. echo "${UNAME_MACHINE}-pc-linux-gnuoldld" exit ;; esac # Determine whether the default compiler is a.out or elf eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include #ifdef __ELF__ # ifdef __GLIBC__ # if __GLIBC__ >= 2 LIBC=gnu # else LIBC=gnulibc1 # endif # else LIBC=gnulibc1 # endif #else #if defined(__INTEL_COMPILER) || defined(__PGI) || defined(__SUNPRO_C) || defined(__SUNPRO_CC) LIBC=gnu #else LIBC=gnuaout #endif #endif #ifdef __dietlibc__ LIBC=dietlibc #endif EOF eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' /^LIBC/{ s: ::g p }'`" test x"${LIBC}" != x && { echo "${UNAME_MACHINE}-pc-linux-${LIBC}" exit } test x"${TENTATIVE}" != x && { echo "${TENTATIVE}"; exit; } ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. # earlier versions are messed up and put the nodename in both # sysname and nodename. echo i386-sequent-sysv4 exit ;; i*86:UNIX_SV:4.2MP:2.*) # Unixware is an offshoot of SVR4, but it has its own version # number series starting with 2... # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} exit ;; i*86:OS/2:*:*) # If we were able to find `uname', then EMX Unix compatibility # is probably installed. echo ${UNAME_MACHINE}-pc-os2-emx exit ;; i*86:XTS-300:*:STOP) echo ${UNAME_MACHINE}-unknown-stop exit ;; i*86:atheos:*:*) echo ${UNAME_MACHINE}-unknown-atheos exit ;; i*86:syllable:*:*) echo ${UNAME_MACHINE}-pc-syllable exit ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*) echo i386-unknown-lynxos${UNAME_RELEASE} exit ;; i*86:*DOS:*:*) echo ${UNAME_MACHINE}-pc-msdosdjgpp exit ;; i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} else echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} fi exit ;; i*86:*:5:[678]*) # UnixWare 7.x, OpenUNIX and OpenServer 6. case `/bin/uname -X | grep "^Machine"` in *486*) UNAME_MACHINE=i486 ;; *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; esac echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} exit ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ && UNAME_MACHINE=i586 (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ && UNAME_MACHINE=i686 (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 echo ${UNAME_MACHINE}-pc-sco$UNAME_REL else echo ${UNAME_MACHINE}-pc-sysv32 fi exit ;; pc:*:*:*) # Left here for compatibility: # uname -m prints for DJGPP always 'pc', but it prints nothing about # the processor, so we play safe by assuming i386. echo i386-pc-msdosdjgpp exit ;; Intel:Mach:3*:*) echo i386-pc-mach3 exit ;; paragon:*:*:*) echo i860-intel-osf1 exit ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 fi exit ;; mini*:CTIX:SYS*5:*) # "miniframe" echo m68010-convergent-sysv exit ;; mc68k:UNIX:SYSTEM5:3.51m) echo m68k-convergent-sysv exit ;; M680?0:D-NIX:5.3:*) echo m68k-diab-dnix exit ;; M68*:*:R3V[5678]*:*) test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) OS_REL='' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4; exit; } ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) echo m68k-unknown-lynxos${UNAME_RELEASE} exit ;; mc68030:UNIX_System_V:4.*:*) echo m68k-atari-sysv4 exit ;; TSUNAMI:LynxOS:2.*:*) echo sparc-unknown-lynxos${UNAME_RELEASE} exit ;; rs6000:LynxOS:2.*:*) echo rs6000-unknown-lynxos${UNAME_RELEASE} exit ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*) echo powerpc-unknown-lynxos${UNAME_RELEASE} exit ;; SM[BE]S:UNIX_SV:*:*) echo mips-dde-sysv${UNAME_RELEASE} exit ;; RM*:ReliantUNIX-*:*:*) echo mips-sni-sysv4 exit ;; RM*:SINIX-*:*:*) echo mips-sni-sysv4 exit ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` echo ${UNAME_MACHINE}-sni-sysv4 else echo ns32k-sni-sysv fi exit ;; PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort # says echo i586-unisys-sysv4 exit ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # How about differentiating between stratus architectures? -djm echo hppa1.1-stratus-sysv4 exit ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. echo i860-stratus-sysv4 exit ;; i*86:VOS:*:*) # From Paul.Green@stratus.com. echo ${UNAME_MACHINE}-stratus-vos exit ;; *:VOS:*:*) # From Paul.Green@stratus.com. echo hppa1.1-stratus-vos exit ;; mc68*:A/UX:*:*) echo m68k-apple-aux${UNAME_RELEASE} exit ;; news*:NEWS-OS:6*:*) echo mips-sony-newsos6 exit ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if [ -d /usr/nec ]; then echo mips-nec-sysv${UNAME_RELEASE} else echo mips-unknown-sysv${UNAME_RELEASE} fi exit ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. echo powerpc-be-beos exit ;; BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. echo powerpc-apple-beos exit ;; BePC:BeOS:*:*) # BeOS running on Intel PC compatible. echo i586-pc-beos exit ;; SX-4:SUPER-UX:*:*) echo sx4-nec-superux${UNAME_RELEASE} exit ;; SX-5:SUPER-UX:*:*) echo sx5-nec-superux${UNAME_RELEASE} exit ;; SX-6:SUPER-UX:*:*) echo sx6-nec-superux${UNAME_RELEASE} exit ;; Power*:Rhapsody:*:*) echo powerpc-apple-rhapsody${UNAME_RELEASE} exit ;; *:Rhapsody:*:*) echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} exit ;; *:Darwin:*:*) UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown case $UNAME_PROCESSOR in unknown) UNAME_PROCESSOR=powerpc ;; esac echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} exit ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` if test "$UNAME_PROCESSOR" = "x86"; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} exit ;; *:QNX:*:4*) echo i386-pc-qnx exit ;; NSE-?:NONSTOP_KERNEL:*:*) echo nse-tandem-nsk${UNAME_RELEASE} exit ;; NSR-?:NONSTOP_KERNEL:*:*) echo nsr-tandem-nsk${UNAME_RELEASE} exit ;; *:NonStop-UX:*:*) echo mips-compaq-nonstopux exit ;; BS2000:POSIX*:*:*) echo bs2000-siemens-sysv exit ;; DS/*:UNIX_System_V:*:*) echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} exit ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. if test "$cputype" = "386"; then UNAME_MACHINE=i386 else UNAME_MACHINE="$cputype" fi echo ${UNAME_MACHINE}-unknown-plan9 exit ;; *:TOPS-10:*:*) echo pdp10-unknown-tops10 exit ;; *:TENEX:*:*) echo pdp10-unknown-tenex exit ;; KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) echo pdp10-dec-tops20 exit ;; XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) echo pdp10-xkl-tops20 exit ;; *:TOPS-20:*:*) echo pdp10-unknown-tops20 exit ;; *:ITS:*:*) echo pdp10-unknown-its exit ;; SEI:*:*:SEIUX) echo mips-sei-seiux${UNAME_RELEASE} exit ;; *:DragonFly:*:*) echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` exit ;; *:*VMS:*:*) UNAME_MACHINE=`(uname -p) 2>/dev/null` case "${UNAME_MACHINE}" in A*) echo alpha-dec-vms ; exit ;; I*) echo ia64-dec-vms ; exit ;; V*) echo vax-dec-vms ; exit ;; esac ;; *:XENIX:*:SysV) echo i386-pc-xenix exit ;; i*86:skyos:*:*) echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' exit ;; i*86:rdos:*:*) echo ${UNAME_MACHINE}-pc-rdos exit ;; esac #echo '(No uname command or uname output not recognized.)' 1>&2 #echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 eval $set_cc_for_build cat >$dummy.c < # include #endif main () { #if defined (sony) #if defined (MIPSEB) /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, I don't know.... */ printf ("mips-sony-bsd\n"); exit (0); #else #include printf ("m68k-sony-newsos%s\n", #ifdef NEWSOS4 "4" #else "" #endif ); exit (0); #endif #endif #if defined (__arm) && defined (__acorn) && defined (__unix) printf ("arm-acorn-riscix\n"); exit (0); #endif #if defined (hp300) && !defined (hpux) printf ("m68k-hp-bsd\n"); exit (0); #endif #if defined (NeXT) #if !defined (__ARCHITECTURE__) #define __ARCHITECTURE__ "m68k" #endif int version; version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; if (version < 4) printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); else printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); exit (0); #endif #if defined (MULTIMAX) || defined (n16) #if defined (UMAXV) printf ("ns32k-encore-sysv\n"); exit (0); #else #if defined (CMU) printf ("ns32k-encore-mach\n"); exit (0); #else printf ("ns32k-encore-bsd\n"); exit (0); #endif #endif #endif #if defined (__386BSD__) printf ("i386-pc-bsd\n"); exit (0); #endif #if defined (sequent) #if defined (i386) printf ("i386-sequent-dynix\n"); exit (0); #endif #if defined (ns32000) printf ("ns32k-sequent-dynix\n"); exit (0); #endif #endif #if defined (_SEQUENT_) struct utsname un; uname(&un); if (strncmp(un.version, "V2", 2) == 0) { printf ("i386-sequent-ptx2\n"); exit (0); } if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ printf ("i386-sequent-ptx1\n"); exit (0); } printf ("i386-sequent-ptx\n"); exit (0); #endif #if defined (vax) # if !defined (ultrix) # include # if defined (BSD) # if BSD == 43 printf ("vax-dec-bsd4.3\n"); exit (0); # else # if BSD == 199006 printf ("vax-dec-bsd4.3reno\n"); exit (0); # else printf ("vax-dec-bsd\n"); exit (0); # endif # endif # else printf ("vax-dec-bsd\n"); exit (0); # endif # else printf ("vax-dec-ultrix\n"); exit (0); # endif #endif #if defined (alliant) && defined (i860) printf ("i860-alliant-bsd\n"); exit (0); #endif exit (1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } # Apollos put the system type in the environment. test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } # Convex versions that predate uname can use getsysinfo(1) if [ -x /usr/convex/getsysinfo ] then case `getsysinfo -f cpu_type` in c1*) echo c1-convex-bsd exit ;; c2*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; c34*) echo c34-convex-bsd exit ;; c38*) echo c38-convex-bsd exit ;; c4*) echo c4-convex-bsd exit ;; esac fi cat >&2 < in order to provide the needed information to handle your system. config.guess timestamp = $timestamp uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` /bin/uname -X = `(/bin/uname -X) 2>/dev/null` hostinfo = `(hostinfo) 2>/dev/null` /bin/universe = `(/bin/universe) 2>/dev/null` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` /bin/arch = `(/bin/arch) 2>/dev/null` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` UNAME_MACHINE = ${UNAME_MACHINE} UNAME_RELEASE = ${UNAME_RELEASE} UNAME_SYSTEM = ${UNAME_SYSTEM} UNAME_VERSION = ${UNAME_VERSION} EOF exit 1 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: tla-1.3.5+dfsg/src/libneon/config.sub0000755000175000017500000007726410457621776016174 0ustar useruser#! /bin/sh # Configuration validation subroutine script. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, # Inc. timestamp='2006-06-06' # This file is (in principle) common to ALL GNU software. # The presence of a machine in this file suggests that SOME GNU software # can handle that machine. It does not imply ALL GNU software can. # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA # 02110-1301, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Please send patches to . Submit a context # diff and a properly formatted ChangeLog entry. # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. # Otherwise, we print the canonical config type on stdout and succeed. # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases # that are meaningful with *any* GNU software. # Each package is responsible for reporting which valid configurations # it does not support. The user should be able to distinguish # a failure to support a valid configuration from a meaningless # configuration. # The goal of this file is to map all the various variations of a given # machine specification into a single specification in the form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or in some cases, the newer four-part form: # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # It is wrong to echo any other type of specification. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] CPU-MFR-OPSYS $0 [OPTION] ALIAS Canonicalize a configuration name. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.sub ($timestamp) Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" exit 1 ;; *local*) # First pass through any local machine types. echo $1 exit ;; * ) break ;; esac done case $# in 0) echo "$me: missing argument$help" >&2 exit 1;; 1) ;; *) echo "$me: too many arguments$help" >&2 exit 1;; esac # Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). # Here we must recognize all the valid KERNEL-OS combinations. maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` case $maybe_os in nto-qnx* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | \ uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \ storm-chaos* | os2-emx* | rtmk-nova*) os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ;; *) basic_machine=`echo $1 | sed 's/-[^-]*$//'` if [ $basic_machine != $1 ] then os=`echo $1 | sed 's/.*-/-/'` else os=; fi ;; esac ### Let's recognize common machines as not being operating systems so ### that things like config.sub decstation-3100 work. We also ### recognize some manufacturers as not being operating systems, so we ### can provide default operating systems below. case $os in -sun*os*) # Prevent following clause from handling this invalid input. ;; -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ -apple | -axis | -knuth | -cray) os= basic_machine=$1 ;; -sim | -cisco | -oki | -wec | -winbond) os= basic_machine=$1 ;; -scout) ;; -wrs) os=-vxworks basic_machine=$1 ;; -chorusos*) os=-chorusos basic_machine=$1 ;; -chorusrdb) os=-chorusrdb basic_machine=$1 ;; -hiux*) os=-hiuxwe2 ;; -sco6) os=-sco5v6 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5) os=-sco3.2v5 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco4) os=-sco3.2v4 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2.[4-9]*) os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2v[4-9]*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5v6*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco*) os=-sco3.2v2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -udk*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -isc) os=-isc2.2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -clix*) basic_machine=clipper-intergraph ;; -isc*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -lynx*) os=-lynxos ;; -ptx*) basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` ;; -windowsnt*) os=`echo $os | sed -e 's/windowsnt/winnt/'` ;; -psos*) os=-psos ;; -mint | -mint[0-9]*) basic_machine=m68k-atari os=-mint ;; esac # Decode aliases for certain CPU-COMPANY combinations. case $basic_machine in # Recognize the basic CPU types without company name. # Some are omitted here because they have special meanings below. 1750a | 580 \ | a29k \ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ | am33_2.0 \ | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \ | bfin \ | c4x | clipper \ | d10v | d30v | dlx | dsp16xx \ | fr30 | frv \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | i370 | i860 | i960 | ia64 \ | ip2k | iq2000 \ | m32c | m32r | m32rle | m68000 | m68k | m88k \ | maxq | mb | microblaze | mcore \ | mips | mipsbe | mipseb | mipsel | mipsle \ | mips16 \ | mips64 | mips64el \ | mips64vr | mips64vrel \ | mips64orion | mips64orionel \ | mips64vr4100 | mips64vr4100el \ | mips64vr4300 | mips64vr4300el \ | mips64vr5000 | mips64vr5000el \ | mips64vr5900 | mips64vr5900el \ | mipsisa32 | mipsisa32el \ | mipsisa32r2 | mipsisa32r2el \ | mipsisa64 | mipsisa64el \ | mipsisa64r2 | mipsisa64r2el \ | mipsisa64sb1 | mipsisa64sb1el \ | mipsisa64sr71k | mipsisa64sr71kel \ | mipstx39 | mipstx39el \ | mn10200 | mn10300 \ | mt \ | msp430 \ | nios | nios2 \ | ns16k | ns32k \ | or32 \ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ | pyramid \ | sh | sh[1234] | sh[24]a | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ | sh64 | sh64le \ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ | spu | strongarm \ | tahoe | thumb | tic4x | tic80 | tron \ | v850 | v850e \ | we32k \ | x86 | xscale | xscalee[bl] | xstormy16 | xtensa \ | z8k) basic_machine=$basic_machine-unknown ;; m6811 | m68hc11 | m6812 | m68hc12) # Motorola 68HC11/12. basic_machine=$basic_machine-unknown os=-none ;; m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) ;; ms1) basic_machine=mt-unknown ;; # We use `pc' rather than `unknown' # because (1) that's what they normally are, and # (2) the word "unknown" tends to confuse beginning users. i*86 | x86_64) basic_machine=$basic_machine-pc ;; # Object if more than one company name word. *-*-*) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; # Recognize the basic CPU types with company name. 580-* \ | a29k-* \ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ | avr-* | avr32-* \ | bfin-* | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \ | clipper-* | craynv-* | cydra-* \ | d10v-* | d30v-* | dlx-* \ | elxsi-* \ | f30[01]-* | f700-* | fr30-* | frv-* | fx80-* \ | h8300-* | h8500-* \ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ | i*86-* | i860-* | i960-* | ia64-* \ | ip2k-* | iq2000-* \ | m32c-* | m32r-* | m32rle-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ | m88110-* | m88k-* | maxq-* | mcore-* \ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ | mips16-* \ | mips64-* | mips64el-* \ | mips64vr-* | mips64vrel-* \ | mips64orion-* | mips64orionel-* \ | mips64vr4100-* | mips64vr4100el-* \ | mips64vr4300-* | mips64vr4300el-* \ | mips64vr5000-* | mips64vr5000el-* \ | mips64vr5900-* | mips64vr5900el-* \ | mipsisa32-* | mipsisa32el-* \ | mipsisa32r2-* | mipsisa32r2el-* \ | mipsisa64-* | mipsisa64el-* \ | mipsisa64r2-* | mipsisa64r2el-* \ | mipsisa64sb1-* | mipsisa64sb1el-* \ | mipsisa64sr71k-* | mipsisa64sr71kel-* \ | mipstx39-* | mipstx39el-* \ | mmix-* \ | mt-* \ | msp430-* \ | nios-* | nios2-* \ | none-* | np1-* | ns16k-* | ns32k-* \ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ | pyramid-* \ | romp-* | rs6000-* \ | sh-* | sh[1234]-* | sh[24]a-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ | sparclite-* \ | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | strongarm-* | sv1-* | sx?-* \ | tahoe-* | thumb-* \ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ | tron-* \ | v850-* | v850e-* | vax-* \ | we32k-* \ | x86-* | x86_64-* | xps100-* | xscale-* | xscalee[bl]-* \ | xstormy16-* | xtensa-* \ | ymp-* \ | z8k-*) ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. 386bsd) basic_machine=i386-unknown os=-bsd ;; 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) basic_machine=m68000-att ;; 3b*) basic_machine=we32k-att ;; a29khif) basic_machine=a29k-amd os=-udi ;; abacus) basic_machine=abacus-unknown ;; adobe68k) basic_machine=m68010-adobe os=-scout ;; alliant | fx80) basic_machine=fx80-alliant ;; altos | altos3068) basic_machine=m68k-altos ;; am29k) basic_machine=a29k-none os=-bsd ;; amd64) basic_machine=x86_64-pc ;; amd64-*) basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; amdahl) basic_machine=580-amdahl os=-sysv ;; amiga | amiga-*) basic_machine=m68k-unknown ;; amigaos | amigados) basic_machine=m68k-unknown os=-amigaos ;; amigaunix | amix) basic_machine=m68k-unknown os=-sysv4 ;; apollo68) basic_machine=m68k-apollo os=-sysv ;; apollo68bsd) basic_machine=m68k-apollo os=-bsd ;; aux) basic_machine=m68k-apple os=-aux ;; balance) basic_machine=ns32k-sequent os=-dynix ;; c90) basic_machine=c90-cray os=-unicos ;; convex-c1) basic_machine=c1-convex os=-bsd ;; convex-c2) basic_machine=c2-convex os=-bsd ;; convex-c32) basic_machine=c32-convex os=-bsd ;; convex-c34) basic_machine=c34-convex os=-bsd ;; convex-c38) basic_machine=c38-convex os=-bsd ;; cray | j90) basic_machine=j90-cray os=-unicos ;; craynv) basic_machine=craynv-cray os=-unicosmp ;; cr16c) basic_machine=cr16c-unknown os=-elf ;; crds | unos) basic_machine=m68k-crds ;; crisv32 | crisv32-* | etraxfs*) basic_machine=crisv32-axis ;; cris | cris-* | etrax*) basic_machine=cris-axis ;; crx) basic_machine=crx-unknown os=-elf ;; da30 | da30-*) basic_machine=m68k-da30 ;; decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) basic_machine=mips-dec ;; decsystem10* | dec10*) basic_machine=pdp10-dec os=-tops10 ;; decsystem20* | dec20*) basic_machine=pdp10-dec os=-tops20 ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) basic_machine=m68k-motorola ;; delta88) basic_machine=m88k-motorola os=-sysv3 ;; djgpp) basic_machine=i586-pc os=-msdosdjgpp ;; dpx20 | dpx20-*) basic_machine=rs6000-bull os=-bosx ;; dpx2* | dpx2*-bull) basic_machine=m68k-bull os=-sysv3 ;; ebmon29k) basic_machine=a29k-amd os=-ebmon ;; elxsi) basic_machine=elxsi-elxsi os=-bsd ;; encore | umax | mmax) basic_machine=ns32k-encore ;; es1800 | OSE68k | ose68k | ose | OSE) basic_machine=m68k-ericsson os=-ose ;; fx2800) basic_machine=i860-alliant ;; genix) basic_machine=ns32k-ns ;; gmicro) basic_machine=tron-gmicro os=-sysv ;; go32) basic_machine=i386-pc os=-go32 ;; h3050r* | hiux*) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; h8300hms) basic_machine=h8300-hitachi os=-hms ;; h8300xray) basic_machine=h8300-hitachi os=-xray ;; h8500hms) basic_machine=h8500-hitachi os=-hms ;; harris) basic_machine=m88k-harris os=-sysv3 ;; hp300-*) basic_machine=m68k-hp ;; hp300bsd) basic_machine=m68k-hp os=-bsd ;; hp300hpux) basic_machine=m68k-hp os=-hpux ;; hp3k9[0-9][0-9] | hp9[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k2[0-9][0-9] | hp9k31[0-9]) basic_machine=m68000-hp ;; hp9k3[2-9][0-9]) basic_machine=m68k-hp ;; hp9k6[0-9][0-9] | hp6[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k7[0-79][0-9] | hp7[0-79][0-9]) basic_machine=hppa1.1-hp ;; hp9k78[0-9] | hp78[0-9]) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[0-9][13679] | hp8[0-9][13679]) basic_machine=hppa1.1-hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) basic_machine=hppa1.0-hp ;; hppa-next) os=-nextstep3 ;; hppaosf) basic_machine=hppa1.1-hp os=-osf ;; hppro) basic_machine=hppa1.1-hp os=-proelf ;; i370-ibm* | ibm*) basic_machine=i370-ibm ;; # I'm not sure what "Sysv32" means. Should this be sysv3.2? i*86v32) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv32 ;; i*86v4*) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv4 ;; i*86v) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv ;; i*86sol2) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-solaris2 ;; i386mach) basic_machine=i386-mach os=-mach ;; i386-vsta | vsta) basic_machine=i386-unknown os=-vsta ;; iris | iris4d) basic_machine=mips-sgi case $os in -irix*) ;; *) os=-irix4 ;; esac ;; isi68 | isi) basic_machine=m68k-isi os=-sysv ;; m88k-omron*) basic_machine=m88k-omron ;; magnum | m3230) basic_machine=mips-mips os=-sysv ;; merlin) basic_machine=ns32k-utek os=-sysv ;; mingw32) basic_machine=i386-pc os=-mingw32 ;; miniframe) basic_machine=m68000-convergent ;; *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) basic_machine=m68k-atari os=-mint ;; mips3*-*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` ;; mips3*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown ;; monitor) basic_machine=m68k-rom68k os=-coff ;; morphos) basic_machine=powerpc-unknown os=-morphos ;; msdos) basic_machine=i386-pc os=-msdos ;; ms1-*) basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` ;; mvs) basic_machine=i370-ibm os=-mvs ;; ncr3000) basic_machine=i486-ncr os=-sysv4 ;; netbsd386) basic_machine=i386-unknown os=-netbsd ;; netwinder) basic_machine=armv4l-rebel os=-linux ;; news | news700 | news800 | news900) basic_machine=m68k-sony os=-newsos ;; news1000) basic_machine=m68030-sony os=-newsos ;; news-3600 | risc-news) basic_machine=mips-sony os=-newsos ;; necv70) basic_machine=v70-nec os=-sysv ;; next | m*-next ) basic_machine=m68k-next case $os in -nextstep* ) ;; -ns2*) os=-nextstep2 ;; *) os=-nextstep3 ;; esac ;; nh3000) basic_machine=m68k-harris os=-cxux ;; nh[45]000) basic_machine=m88k-harris os=-cxux ;; nindy960) basic_machine=i960-intel os=-nindy ;; mon960) basic_machine=i960-intel os=-mon960 ;; nonstopux) basic_machine=mips-compaq os=-nonstopux ;; np1) basic_machine=np1-gould ;; nsr-tandem) basic_machine=nsr-tandem ;; op50n-* | op60c-*) basic_machine=hppa1.1-oki os=-proelf ;; openrisc | openrisc-*) basic_machine=or32-unknown ;; os400) basic_machine=powerpc-ibm os=-os400 ;; OSE68000 | ose68000) basic_machine=m68000-ericsson os=-ose ;; os68k) basic_machine=m68k-none os=-os68k ;; pa-hitachi) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; paragon) basic_machine=i860-intel os=-osf ;; pbd) basic_machine=sparc-tti ;; pbb) basic_machine=m68k-tti ;; pc532 | pc532-*) basic_machine=ns32k-pc532 ;; pc98) basic_machine=i386-pc ;; pc98-*) basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium | p5 | k5 | k6 | nexgen | viac3) basic_machine=i586-pc ;; pentiumpro | p6 | 6x86 | athlon | athlon_*) basic_machine=i686-pc ;; pentiumii | pentium2 | pentiumiii | pentium3) basic_machine=i686-pc ;; pentium4) basic_machine=i786-pc ;; pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumpro-* | p6-* | 6x86-* | athlon-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium4-*) basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pn) basic_machine=pn-gould ;; power) basic_machine=power-ibm ;; ppc) basic_machine=powerpc-unknown ;; ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppcle | powerpclittle | ppc-le | powerpc-little) basic_machine=powerpcle-unknown ;; ppcle-* | powerpclittle-*) basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64) basic_machine=powerpc64-unknown ;; ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64le | powerpc64little | ppc64-le | powerpc64-little) basic_machine=powerpc64le-unknown ;; ppc64le-* | powerpc64little-*) basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ps2) basic_machine=i386-ibm ;; pw32) basic_machine=i586-unknown os=-pw32 ;; rdos) basic_machine=i386-pc os=-rdos ;; rom68k) basic_machine=m68k-rom68k os=-coff ;; rm[46]00) basic_machine=mips-siemens ;; rtpc | rtpc-*) basic_machine=romp-ibm ;; s390 | s390-*) basic_machine=s390-ibm ;; s390x | s390x-*) basic_machine=s390x-ibm ;; sa29200) basic_machine=a29k-amd os=-udi ;; sb1) basic_machine=mipsisa64sb1-unknown ;; sb1el) basic_machine=mipsisa64sb1el-unknown ;; sei) basic_machine=mips-sei os=-seiux ;; sequent) basic_machine=i386-sequent ;; sh) basic_machine=sh-hitachi os=-hms ;; sh64) basic_machine=sh64-unknown ;; sparclite-wrs | simso-wrs) basic_machine=sparclite-wrs os=-vxworks ;; sps7) basic_machine=m68k-bull os=-sysv2 ;; spur) basic_machine=spur-unknown ;; st2000) basic_machine=m68k-tandem ;; stratus) basic_machine=i860-stratus os=-sysv4 ;; sun2) basic_machine=m68000-sun ;; sun2os3) basic_machine=m68000-sun os=-sunos3 ;; sun2os4) basic_machine=m68000-sun os=-sunos4 ;; sun3os3) basic_machine=m68k-sun os=-sunos3 ;; sun3os4) basic_machine=m68k-sun os=-sunos4 ;; sun4os3) basic_machine=sparc-sun os=-sunos3 ;; sun4os4) basic_machine=sparc-sun os=-sunos4 ;; sun4sol2) basic_machine=sparc-sun os=-solaris2 ;; sun3 | sun3-*) basic_machine=m68k-sun ;; sun4) basic_machine=sparc-sun ;; sun386 | sun386i | roadrunner) basic_machine=i386-sun ;; sv1) basic_machine=sv1-cray os=-unicos ;; symmetry) basic_machine=i386-sequent os=-dynix ;; t3e) basic_machine=alphaev5-cray os=-unicos ;; t90) basic_machine=t90-cray os=-unicos ;; tic54x | c54x*) basic_machine=tic54x-unknown os=-coff ;; tic55x | c55x*) basic_machine=tic55x-unknown os=-coff ;; tic6x | c6x*) basic_machine=tic6x-unknown os=-coff ;; tx39) basic_machine=mipstx39-unknown ;; tx39el) basic_machine=mipstx39el-unknown ;; toad1) basic_machine=pdp10-xkl os=-tops20 ;; tower | tower-32) basic_machine=m68k-ncr ;; tpf) basic_machine=s390x-ibm os=-tpf ;; udi29k) basic_machine=a29k-amd os=-udi ;; ultra3) basic_machine=a29k-nyu os=-sym1 ;; v810 | necv810) basic_machine=v810-nec os=-none ;; vaxv) basic_machine=vax-dec os=-sysv ;; vms) basic_machine=vax-dec os=-vms ;; vpp*|vx|vx-*) basic_machine=f301-fujitsu ;; vxworks960) basic_machine=i960-wrs os=-vxworks ;; vxworks68) basic_machine=m68k-wrs os=-vxworks ;; vxworks29k) basic_machine=a29k-wrs os=-vxworks ;; w65*) basic_machine=w65-wdc os=-none ;; w89k-*) basic_machine=hppa1.1-winbond os=-proelf ;; xbox) basic_machine=i686-pc os=-mingw32 ;; xps | xps100) basic_machine=xps100-honeywell ;; ymp) basic_machine=ymp-cray os=-unicos ;; z8k-*-coff) basic_machine=z8k-unknown os=-sim ;; none) basic_machine=none-none os=-none ;; # Here we handle the default manufacturer of certain CPU types. It is in # some cases the only manufacturer, in others, it is the most popular. w89k) basic_machine=hppa1.1-winbond ;; op50n) basic_machine=hppa1.1-oki ;; op60c) basic_machine=hppa1.1-oki ;; romp) basic_machine=romp-ibm ;; mmix) basic_machine=mmix-knuth ;; rs6000) basic_machine=rs6000-ibm ;; vax) basic_machine=vax-dec ;; pdp10) # there are many clones, so DEC is not a safe bet basic_machine=pdp10-unknown ;; pdp11) basic_machine=pdp11-dec ;; we32k) basic_machine=we32k-att ;; sh[1234] | sh[24]a | sh[34]eb | sh[1234]le | sh[23]ele) basic_machine=sh-unknown ;; sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) basic_machine=sparc-sun ;; cydra) basic_machine=cydra-cydrome ;; orion) basic_machine=orion-highlevel ;; orion105) basic_machine=clipper-highlevel ;; mac | mpw | mac-mpw) basic_machine=m68k-apple ;; pmac | pmac-mpw) basic_machine=powerpc-apple ;; *-unknown) # Make sure to match an already-canonicalized machine name. ;; *) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; esac # Here we canonicalize certain aliases for manufacturers. case $basic_machine in *-digital*) basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` ;; *-commodore*) basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` ;; *) ;; esac # Decode manufacturer-specific aliases for certain operating systems. if [ x"$os" != x"" ] then case $os in # First match some system type aliases # that might get confused with valid system types. # -solaris* is a basic system type, with this one exception. -solaris1 | -solaris1.*) os=`echo $os | sed -e 's|solaris1|sunos4|'` ;; -solaris) os=-solaris2 ;; -svr4*) os=-sysv4 ;; -unixware*) os=-sysv4.2uw ;; -gnu/linux*) os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` ;; # First accept the basic system types. # The portable systems comes first. # Each alternative MUST END IN A *, to match a version number. # -sysv* is not here because it comes later, after sysvr4. -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ | -aos* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ | -openbsd* | -solidbsd* \ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ | -chorusos* | -chorusrdb* \ | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \ | -uxpv* | -beos* | -mpeix* | -udk* \ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ | -skyos* | -haiku* | -rdos*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) case $basic_machine in x86-* | i*86-*) ;; *) os=-nto$os ;; esac ;; -nto-qnx*) ;; -nto*) os=`echo $os | sed -e 's|nto|nto-qnx|'` ;; -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) ;; -mac*) os=`echo $os | sed -e 's|mac|macos|'` ;; -linux-dietlibc) os=-linux-dietlibc ;; -linux*) os=`echo $os | sed -e 's|linux|linux-gnu|'` ;; -sunos5*) os=`echo $os | sed -e 's|sunos5|solaris2|'` ;; -sunos6*) os=`echo $os | sed -e 's|sunos6|solaris3|'` ;; -opened*) os=-openedition ;; -os400*) os=-os400 ;; -wince*) os=-wince ;; -osfrose*) os=-osfrose ;; -osf*) os=-osf ;; -utek*) os=-bsd ;; -dynix*) os=-bsd ;; -acis*) os=-aos ;; -atheos*) os=-atheos ;; -syllable*) os=-syllable ;; -386bsd) os=-bsd ;; -ctix* | -uts*) os=-sysv ;; -nova*) os=-rtmk-nova ;; -ns2 ) os=-nextstep2 ;; -nsk*) os=-nsk ;; # Preserve the version number of sinix5. -sinix5.*) os=`echo $os | sed -e 's|sinix|sysv|'` ;; -sinix*) os=-sysv4 ;; -tpf*) os=-tpf ;; -triton*) os=-sysv3 ;; -oss*) os=-sysv3 ;; -svr4) os=-sysv4 ;; -svr3) os=-sysv3 ;; -sysvr4) os=-sysv4 ;; # This must come after -sysvr4. -sysv*) ;; -ose*) os=-ose ;; -es1800*) os=-ose ;; -xenix) os=-xenix ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) os=-mint ;; -aros*) os=-aros ;; -kaos*) os=-kaos ;; -zvmoe) os=-zvmoe ;; -none) ;; *) # Get rid of the `-' at the beginning of $os. os=`echo $os | sed 's/[^-]*-//'` echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 exit 1 ;; esac else # Here we handle the default operating systems that come with various machines. # The value should be what the vendor currently ships out the door with their # machine or put another way, the most popular os provided with the machine. # Note that if you're going to try to match "-MANUFACTURER" here (say, # "-sun"), then you have to tell the case statement up towards the top # that MANUFACTURER isn't an operating system. Otherwise, code above # will signal an error saying that MANUFACTURER isn't an operating # system, and we'll never get to this point. case $basic_machine in spu-*) os=-elf ;; *-acorn) os=-riscix1.2 ;; arm*-rebel) os=-linux ;; arm*-semi) os=-aout ;; c4x-* | tic4x-*) os=-coff ;; # This must come before the *-dec entry. pdp10-*) os=-tops20 ;; pdp11-*) os=-none ;; *-dec | vax-*) os=-ultrix4.2 ;; m68*-apollo) os=-domain ;; i386-sun) os=-sunos4.0.2 ;; m68000-sun) os=-sunos3 # This also exists in the configure program, but was not the # default. # os=-sunos4 ;; m68*-cisco) os=-aout ;; mips*-cisco) os=-elf ;; mips*-*) os=-elf ;; or32-*) os=-coff ;; *-tti) # must be before sparc entry or we get the wrong os. os=-sysv3 ;; sparc-* | *-sun) os=-sunos4.1.1 ;; *-be) os=-beos ;; *-haiku) os=-haiku ;; *-ibm) os=-aix ;; *-knuth) os=-mmixware ;; *-wec) os=-proelf ;; *-winbond) os=-proelf ;; *-oki) os=-proelf ;; *-hp) os=-hpux ;; *-hitachi) os=-hiux ;; i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) os=-sysv ;; *-cbm) os=-amigaos ;; *-dg) os=-dgux ;; *-dolphin) os=-sysv3 ;; m68k-ccur) os=-rtu ;; m88k-omron*) os=-luna ;; *-next ) os=-nextstep ;; *-sequent) os=-ptx ;; *-crds) os=-unos ;; *-ns) os=-genix ;; i370-*) os=-mvs ;; *-next) os=-nextstep3 ;; *-gould) os=-sysv ;; *-highlevel) os=-bsd ;; *-encore) os=-bsd ;; *-sgi) os=-irix ;; *-siemens) os=-sysv4 ;; *-masscomp) os=-rtu ;; f30[01]-fujitsu | f700-fujitsu) os=-uxpv ;; *-rom68k) os=-coff ;; *-*bug) os=-coff ;; *-apple) os=-macos ;; *-atari*) os=-mint ;; *) os=-none ;; esac fi # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. vendor=unknown case $basic_machine in *-unknown) case $os in -riscix*) vendor=acorn ;; -sunos*) vendor=sun ;; -aix*) vendor=ibm ;; -beos*) vendor=be ;; -hpux*) vendor=hp ;; -mpeix*) vendor=hp ;; -hiux*) vendor=hitachi ;; -unos*) vendor=crds ;; -dgux*) vendor=dg ;; -luna*) vendor=omron ;; -genix*) vendor=ns ;; -mvs* | -opened*) vendor=ibm ;; -os400*) vendor=ibm ;; -ptx*) vendor=sequent ;; -tpf*) vendor=ibm ;; -vxsim* | -vxworks* | -windiss*) vendor=wrs ;; -aux*) vendor=apple ;; -hms*) vendor=hitachi ;; -mpw* | -macos*) vendor=apple ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) vendor=atari ;; -vos*) vendor=stratus ;; esac basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` ;; esac echo $basic_machine$os exit # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: tla-1.3.5+dfsg/src/libneon/test/0000755000175000017500000000000010457621776015150 5ustar userusertla-1.3.5+dfsg/src/libneon/test/session.c0000644000175000017500000000771710457621776017013 0ustar useruser/* Tests for session handling Copyright (C) 2002-2003, Joe Orton This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #include "config.h" #include #ifdef HAVE_STDLIB_H #include #endif #ifdef HAVE_UNISTD_H #include #endif #include "ne_session.h" #include "tests.h" /* should be in a 'session.c'? */ static int fill_uri(void) { ne_uri uri = {0}; ne_session *sess = ne_session_create("http", "localhost", 7777); ne_fill_server_uri(sess, &uri); ONN("hostname mis-match", strcmp(uri.host, "localhost")); ONN("port mis-match", uri.port != 7777); ONN("scheme mis-match", strcmp(uri.scheme, "http")); ne_session_destroy(sess); ne_uri_free(&uri); return OK; } static int match_hostport(const char *scheme, const char *hostname, int port, const char *hostport) { ne_session *sess = ne_session_create(scheme, hostname, port); const char *hp = ne_get_server_hostport(sess); ONV(strcmp(hp, hostport), ("hostport incorrect for %s: `%s' not `%s'", scheme, hp, hostport)); ne_session_destroy(sess); return OK; } static int hostports(void) { static const struct { const char *scheme, *hostname; int port; const char *hostport; } hps[] = { { "http", "host.name", 80, "host.name" }, { "http", "host.name", 555, "host.name:555" }, { "http", "host.name", 443, "host.name:443" }, { "https", "host.name", 80, "host.name:80" }, { "https", "host.name", 443, "host.name" }, { "https", "host.name", 700, "host.name:700" }, { NULL } }; int n; for (n = 0; hps[n].scheme; n++) { CALL(match_hostport(hps[n].scheme, hps[n].hostname, hps[n].port, hps[n].hostport)); } return OK; } /* Check that ne_set_error is passing through to printf correctly. */ static int errors(void) { ne_session *sess = ne_session_create("http", "foo.com", 80); #define EXPECT "foo, hello world, 100, bar!" ne_set_error(sess, "foo, %s, %d, bar!", "hello world", 100); ONV(strcmp(ne_get_error(sess), EXPECT), ("session error was `%s' not `%s'", ne_get_error(sess), EXPECT)); #undef EXPECT ne_session_destroy(sess); return OK; } #define ID1 "foo" #define ID2 "bar" static int privates(void) { ne_session *sess = ne_session_create("http", "localhost", 80); char *v1 = "hello", *v2 = "world"; ne_set_session_private(sess, ID1, v1); ne_set_session_private(sess, ID2, v2); #define PRIV(msg, id, val) \ ONN(msg, ne_get_session_private(sess, id) != val) PRIV("private #1 wrong", ID1, v1); PRIV("private #2 wrong", ID2, v2); PRIV("unknown id wrong", "no such ID", NULL); ne_session_destroy(sess); return OK; } /* test that ne_session_create doesn't really care what scheme you * give it, and that ne_get_scheme() works. */ static int get_scheme(void) { static const char *schemes[] = { "http", "https", "ftp", "ldap", "foobar", NULL }; int n; for (n = 0; schemes[n]; n++) { ne_session *sess = ne_session_create(schemes[n], "localhost", 80); ONV(strcmp(ne_get_scheme(sess), schemes[n]), ("scheme was `%s' not `%s'!", ne_get_scheme(sess), schemes[n])); ne_session_destroy(sess); } return OK; } ne_test tests[] = { T(fill_uri), T(hostports), T(errors), T(privates), T(get_scheme), T(NULL) }; tla-1.3.5+dfsg/src/libneon/test/server.key0000644000175000017500000000076110457621776017174 0ustar useruser-----BEGIN RSA PRIVATE KEY----- MIIBOwIBAAJBAPNFTmxnz4JZA+8+SonD0qWgSBPYWrNlH1FP+psm5EGZGmGJGvSD sk6HkyvstdopKF50UuEaJ263IorAhkmdGG0CAwEAAQJAJBhYdoVAqNqEVu8rKB3C F4kcqLUlYBDVAL+ZM4QlwgWncAKk2C53BwH4PVWIIfyysleyt3bTAtqg/tgMNM06 AQIhAP1HKbuppa+UY4rNP4Xcyj5BrCU4wVz77sg/ygW+mWIhAiEA9eKcUnnaIpig hlWtx9qz++85/JtahA85j6T48v0hBM0CIQCa8ByUg2wq45CdSX+xiOZjfVMslfKb yjZBY9xW9UjpYQIgdy9j5JqKANEIpnTran95VLot2mMXagHTPeySe331PlUCIQD0 rL1AXeIR3Vd4D8dgab/FVbg4i94qBiY0731nyPJRoQ== -----END RSA PRIVATE KEY----- tla-1.3.5+dfsg/src/libneon/test/makekeys.sh0000755000175000017500000001120010457621776017312 0ustar useruser#!/bin/sh # Helper script to create CA and server certificates. srcdir=${1-.} OPENSSL=${OPENSSL-openssl} CONF=${srcdir}/openssl.conf REQ="${OPENSSL} req -config ${CONF}" CA="${OPENSSL} ca -config ${CONF} -batch" # MKCERT makes a self-signed cert MKCERT="${REQ} -x509 -new -days 9000" REQDN=reqDN STRMASK=default export REQDN STRMASK set -ex mkdir ca touch ca/index.txt echo 01 > ca/serial ${OPENSSL} genrsa -rand ${srcdir}/../configure > ca/key.pem ${OPENSSL} genrsa -rand ${srcdir}/../configure > client.key ${MKCERT} -key ca/key.pem -out ca/cert.pem < T61String csr_fields "`echo -e 'H\350llo World'`" localhost | ${MKCERT} -key ${srcdir}/server.key -out t61subj.cert STRMASK=pkix # => BMPString csr_fields "`echo -e 'H\350llo World'`" localhost | ${MKCERT} -key ${srcdir}/server.key -out bmpsubj.cert STRMASK=utf8only # => UTF8String csr_fields "`echo -e 'H\350llo World'`" localhost | ${MKCERT} -key ${srcdir}/server.key -out utf8subj.cert STRMASK=default ### produce a set of CA certs csr_fields "First Random CA" "first.example.com" "CAs Ltd." Lincoln Lincolnshire | \ ${MKCERT} -key ${srcdir}/server.key -out ca1.pem csr_fields "Second Random CA" "second.example.com" "CAs Ltd." Falmouth Cornwall | \ ${MKCERT} -key ${srcdir}/server.key -out ca2.pem csr_fields "Third Random CA" "third.example.com" "CAs Ltd." Ipswich Suffolk | \ ${MKCERT} -key ${srcdir}/server.key -out ca3.pem csr_fields "Fourth Random CA" "fourth.example.com" "CAs Ltd." Norwich Norfolk | \ ${MKCERT} -key ${srcdir}/server.key -out ca4.pem cat ca[1234].pem > calist.pem # Only works with a Linuxy hostname command: continue without it, # as appropriate tests are skipped if these fail. hostname=`hostname -s 2>/dev/null` || true domain=`hostname -d 2>/dev/null` || true fqdn=`hostname -f 2>/dev/null` || true if [ "x${hostname}.${domain}" = "x${fqdn}" ]; then csr_fields "Wildcard Cert Dept" "*.${domain}" | \ ${REQ} -new -key ${srcdir}/server.key -out wildcard.csr ${CA} -days 9000 -in wildcard.csr -out wildcard.cert fi csr_fields "Neon Client Cert" ignored.example.com | \ ${REQ} -new -key client.key -out client.csr ### requests using special DN. REQDN=reqDN.doubleCN csr_fields "Double CN Dept" "nohost.example.com localhost" | ${REQ} -new -key ${srcdir}/server.key -out twocn.csr REQDN=reqDN.CNfirst echo localhost | ${REQ} -new -key ${srcdir}/server.key -out cnfirst.csr REQDN=reqDN.missingCN echo GB | ${REQ} -new -key ${srcdir}/server.key -out missingcn.csr REQDN=reqDN.justEmail echo blah@example.com | ${REQ} -new -key ${srcdir}/server.key -out justmail.csr ### don't put ${REQ} invocations after here for f in server client twocn caseless cnfirst missingcn justmail; do ${CA} -days 900 -in ${f}.csr -out ${f}.cert done for n in 1 2 3 4 5; do ${CA} -extensions altExt${n} -days 900 \ -in altname${n}.csr -out altname${n}.cert done MKPKCS12="${OPENSSL} pkcs12 -export -passout stdin -in client.cert -inkey client.key" # generate a PKCS12 cert from the client cert: -passOUT because it's the # passphrase on the OUTPUT cert, confusing... echo foobar | ${MKPKCS12} -name "Just A Neon Client Cert" -out client.p12 # generate a PKCS#12 cert with no password and a friendly name echo | ${MKPKCS12} -name "An Unencrypted Neon Client Cert" -out unclient.p12 # generate a PKCS#12 cert with no friendly name echo | ${MKPKCS12} -out noclient.p12 ### a file containing a complete chain cat ca/cert.pem server.cert > chain.pem tla-1.3.5+dfsg/src/libneon/test/htdocs/0000755000175000017500000000000010457621776016434 5ustar userusertla-1.3.5+dfsg/src/libneon/test/htdocs/plain0000644000175000017500000000001310457621776017454 0ustar useruserTest file. tla-1.3.5+dfsg/src/libneon/test/openssl.conf0000644000175000017500000000346510457621776017512 0ustar useruser[ca] default_ca = neonca [neonca] dir = ./ca database = $dir/index.txt new_certs_dir = $dir certificate = $dir/cert.pem serial = $dir/serial private_key = $dir/key.pem policy = policy_any default_md = md5 x509_extensions = issuedExt [policy_any] countryName = optional stateOrProvinceName = optional localityName = optional organizationName = optional organizationalUnitName = optional commonName = optional emailAddress = optional [req] distinguished_name = $ENV::REQDN x509_extensions = caExt string_mask = $ENV::STRMASK [caExt] basicConstraints = CA:true [issuedExt] basicConstraints = CA:false # subjectAltName extension sections [altExt1] subjectAltName = DNS:localhost # 2+3: AltNames with multiple entries to test the matching logic [altExt2] subjectAltName = DNS:nohost.example.com, DNS:localhost [altExt3] subjectAltName = DNS:localhost, DNS:nohost.example.com # an AltName with no DNS entries; should use commonName instead for # identity check [altExt4] subjectAltName = email:neon@webdav.org # an AltName with IP address [altExt5] subjectAltName = IP:127.0.0.1 [reqDN] countryName = Country Name stateOrProvinceName = State or Province Name localityName = Locality Name organizationName = Organization Name organizationalUnitName = Organizational Unit Name commonName = Common Name (eg, your name or your server\'s hostname) emailAddress = Email Address # a DN which gives two commonName attributes. [reqDN.doubleCN] countryName = Country Name stateOrProvinceName = State or Province Name localityName = Locality Name organizationName = Organization Name organizationalUnitName = Organizational Unit Name 0.commonName = Common Name 1.commonName = Common Name emailAddress = Email Address [reqDN.CNfirst] commonName = Common Name [reqDN.missingCN] countryName = CountryName [reqDN.justEmail] emailAddress = CountryName tla-1.3.5+dfsg/src/libneon/test/acl.c0000644000175000017500000000440510457621776016056 0ustar useruser/* Dummy ACL tests Copyright (C) 2001-2003, Joe Orton This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #include "ne_acl.h" #include "tests.h" #include "child.h" #include "utils.h" #ifdef NEON_NODAV static int skip(void) { t_context("built without WebDAV support"); return SKIP; } ne_test tests[] = { T(skip), T(NULL) }; #else /**** DUMMY TESTS: just makes sure the stuff doesn't dump core. */ static int test_acl(const char *uri, ne_acl_entry *es, int nume) { ne_session *sess; CALL(make_session(&sess, single_serve_string, "HTTP/1.1 200 OK\r\n" "Connection: close\r\n\r\n")); ON(ne_acl_set(sess, uri, es, nume)); CALL(await_server()); ne_session_destroy(sess); return OK; } static int grant_all(void) { ne_acl_entry e = {0}; e.apply = ne_acl_all; e.type = ne_acl_grant; CALL(test_acl("/foo", &e, 1)); return OK; } static int deny_all(void) { ne_acl_entry e = {0}; e.apply = ne_acl_all; e.type = ne_acl_deny; CALL(test_acl("/foo", &e, 1)); return OK; } static int deny_one(void) { ne_acl_entry e = {0}; e.apply = ne_acl_href; e.type = ne_acl_deny; e.principal = "http://webdav.org/users/joe"; CALL(test_acl("/foo", &e, 1)); return OK; } static int deny_byprop(void) { ne_acl_entry e = {0}; e.apply = ne_acl_property; e.type = ne_acl_deny; e.principal = "owner"; CALL(test_acl("/foo", &e, 1)); return OK; } ne_test tests[] = { T(grant_all), T(deny_all), T(deny_one), T(deny_byprop), T(NULL) }; #endif /* NEON_NODAV */ tla-1.3.5+dfsg/src/libneon/test/run.sh0000644000175000017500000000046610457621776016316 0ustar useruser#!/bin/sh rm -f debug.log rm -f child.log # enable an safety-checking malloc in glibc which will abort() if # heap corruption is detected. MALLOC_CHECK_=2 export MALLOC_CHECK_ for f in $*; do if ${HARNESS} ./$f ${SRCDIR}; then : else echo FAILURE [ -z "$CARRYON" ] && exit 1 fi done exit 0 tla-1.3.5+dfsg/src/libneon/test/cookies.c0000644000175000017500000000661510457621776016760 0ustar useruser/* Test for cookies interface (ne_cookies.h) Copyright (C) 2002-2003, Joe Orton This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #include "config.h" #include #ifdef HAVE_STDLIB_H #include #endif #ifdef HAVE_UNISTD_H #include #endif #include "ne_request.h" #include "ne_socket.h" #include "ne_cookies.h" #include "tests.h" #include "child.h" #include "utils.h" static int serve_cookie(ne_socket *sock, void *ud) { const char *hdr = ud; char buf[BUFSIZ]; CALL(discard_request(sock)); ne_snprintf(buf, BUFSIZ, "HTTP/1.0 200 Okey Dokey\r\n" "Connection: close\r\n" "%s\r\n\r\n", hdr); SEND_STRING(sock, buf); return OK; } static int fetch_cookie(const char *hdr, const char *path, ne_cookie_cache *jar) { ne_session *sess; CALL(make_session(&sess, serve_cookie, (void *)hdr)); ne_cookie_register(sess, jar); CALL(any_request(sess, path)); ne_session_destroy(sess); CALL(await_server()); return OK; } static int parsing(void) { static const struct { const char *hdr, *name, *value; } cookies[] = { { "Set-Cookie: alpha=bar", "alpha", "bar" }, #if 0 { "Set-Cookie2: alpha=bar", "alpha", "bar" }, #endif { "Set-Cookie: beta = bar", "beta", "bar" }, { "Set-Cookie: delta = bar; norman=fish", "delta", "bar" }, /* parsing bug in <0.24.1 */ { "Set-Cookie: alpha=beta; path", "alpha", "beta" }, { NULL, NULL, NULL } }; int n; for (n = 0; cookies[n].hdr != NULL; n++) { ne_cookie_cache jar = {0}; ne_cookie *ck; CALL(fetch_cookie(cookies[n].hdr, "/foo", &jar)); ck = jar.cookies; ONV(ck == NULL, ("%d: cookie jar was empty!", n)); ONV(strcmp(ck->name, cookies[n].name) || strcmp(ck->value, cookies[n].value), ("%d: was [%s]=[%s]!", n, ck->name, ck->value)); } return OK; } static int rejects(void) { static const struct { const char *hdr, *path; } resps[] = { /* names prefixed with $ are illegal */ { "Set-Cookie2: $foo=bar, Version=1", "/foo" }, #define FOOBAR "Set-Cookie2: foo=bar, Version=1" /* Path is not prefix of Request-URI */ { FOOBAR ", Path=/bar", "/foo" }, /* Domain must have embedded dots. */ { FOOBAR ", Domain=fish", "/foo" }, /* Domain must domain-match request-host */ { FOOBAR ", Domain=other.host.com", "/foo" }, /* Port not named in Port list */ { FOOBAR ", Port=\"12\"", "/foo" }, { NULL, NULL } }; int n; for (n = 0; resps[n].hdr != NULL; n++) { ne_cookie_cache jar = {0}; CALL(fetch_cookie(resps[n].hdr, resps[n].path, &jar)); ONV(jar.cookies != NULL, ("cookie was returned for `%s'", resps[n].hdr)); } return OK; } ne_test tests[] = { T(lookup_localhost), T(parsing), T(rejects), T(NULL) }; tla-1.3.5+dfsg/src/libneon/test/util-tests.c0000644000175000017500000001645310457621776017442 0ustar useruser/* utils tests Copyright (C) 2001-2004, Joe Orton This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #include "config.h" #ifdef HAVE_STDLIB_H #include #endif #ifdef HAVE_STRING_H #include #endif #include "ne_utils.h" #include "ne_md5.h" #include "ne_alloc.h" #include "ne_dates.h" #include "ne_string.h" #include "tests.h" static const struct { const char *status; int major, minor, code; const char *rp; } accept_sl[] = { /* These are really valid. */ { "HTTP/1.1 200 OK", 1, 1, 200, "OK" }, { "HTTP/1.1000 200 OK", 1, 1000, 200, "OK" }, { "HTTP/1000.1000 200 OK", 1000, 1000, 200, "OK" }, { "HTTP/00001.1 200 OK", 1, 1, 200, "OK" }, { "HTTP/1.00001 200 OK", 1, 1, 200, "OK" }, { "HTTP/99.99 999 99999", 99, 99, 999, "99999" }, { "HTTP/1.1 100 ", 1, 1, 100, "" }, /* these aren't really valid but we should be able to parse them. */ { "HTTP/1.1 100", 1, 1, 100, "" }, { "HTTP/1.1 200 OK", 1, 1, 200, "OK" }, { "HTTP/1.1 200 \t OK", 1, 1, 200, "OK" }, { " HTTP/1.1 200 OK", 1, 1, 200, "OK" }, { "Norman is a dog HTTP/1.1 200 OK", 1, 1, 200, "OK" }, { NULL } }; static const char *bad_sl[] = { "", "HTTP/1.1 1000 OK", "HTTP/1.1 1000", "HTTP/-1.1 100 OK", "HTTP/1.1 -100 OK", "HTTP/ 200 OK", "HTTP/", "HTTP/1.1A 100 OK", "HTTP/1.", "HTTP/1.1 1", "Fish/1.1 100 OK", "HTTP/1.1 10", "HTTP", "H\0TP/1.1 100 OK", NULL }; static int status_lines(void) { ne_status s; int n; for (n = 0; accept_sl[n].status != NULL; n++) { ONV(ne_parse_statusline(accept_sl[n].status, &s), ("valid #%d: parse", n)); ONV(accept_sl[n].major != s.major_version, ("valid #%d: major", n)); ONV(accept_sl[n].minor != s.minor_version, ("valid #%d: minor", n)); ONV(accept_sl[n].code != s.code, ("valid #%d: code", n)); ONV(strcmp(accept_sl[n].rp, s.reason_phrase), ("valid #%d: reason phrase", n)); ne_free(s.reason_phrase); } for (n = 0; bad_sl[n] != NULL; n++) { ONV(ne_parse_statusline(bad_sl[n], &s) == 0, ("invalid #%d", n)); } return OK; } /* Write MD5 of 'len' bytes of 'str' to 'digest' */ static unsigned char *digest_md5(const char *data, size_t len, unsigned char digest[16]) { struct ne_md5_ctx ctx; #define CHUNK 100 ne_md5_init_ctx(&ctx); /* exercise the buffering interface */ while (len > CHUNK) { ne_md5_process_bytes(data, CHUNK, &ctx); len -= CHUNK; data += CHUNK; } ne_md5_process_bytes(data, len, &ctx); ne_md5_finish_ctx(&ctx, digest); return digest; } static int md5(void) { unsigned char buf[17] = {0}, buf2[17] = {0}; char ascii[33] = {0}; char zzzs[500]; ne_md5_to_ascii(digest_md5("", 0, buf), ascii); ONN("MD5(null)", strcmp(ascii, "d41d8cd98f00b204e9800998ecf8427e")); ne_md5_to_ascii(digest_md5("foobar", 7, buf), ascii); ONN("MD5(foobar)", strcmp(ascii, "b4258860eea29e875e2ee4019763b2bb")); /* $ perl -e 'printf "z"x500' | md5sum * 8b9323bd72250ea7f1b2b3fb5046391a - */ memset(zzzs, 'z', sizeof zzzs); ne_md5_to_ascii(digest_md5(zzzs, sizeof zzzs, buf), ascii); ONN("MD5(\"z\"x512)", strcmp(ascii, "8b9323bd72250ea7f1b2b3fb5046391a")); ne_ascii_to_md5(ascii, buf2); ON(memcmp(buf, buf2, 16)); return OK; } static int md5_alignment(void) { char *bb = ne_malloc(66); struct ne_md5_ctx ctx; /* regression test for a bug in md5.c in <0.15.0 on SPARC, where * the process_bytes function would SIGBUS if the buffer argument * isn't 32-bit aligned. Won't trigger on x86 though. */ ne_md5_init_ctx(&ctx); ne_md5_process_bytes(bb + 1, 65, &ctx); ne_free(bb); return OK; } static const struct { const char *str; time_t time; enum { d_rfc1123, d_iso8601, d_rfc1036 } type; } good_dates[] = { { "Fri, 08 Jun 2001 22:59:46 GMT", 992041186, d_rfc1123 }, { "Friday, 08-Jun-01 22:59:46 GMT", 992041186, d_rfc1036 }, { "Wednesday, 06-Jun-01 22:59:46 GMT", 991868386, d_rfc1036 }, /* some different types of ISO8601 dates. */ { "2001-06-08T22:59:46Z", 992041186, d_iso8601 }, { "2001-06-08T22:59:46.9Z", 992041186, d_iso8601 }, { "2001-06-08T26:00:46+03:01", 992041186, d_iso8601 }, { "2001-06-08T20:58:46-02:01", 992041186, d_iso8601 }, { NULL } }; static int parse_dates(void) { int n; for (n = 0; good_dates[n].str != NULL; n++) { time_t res; const char *str = good_dates[n].str; switch (good_dates[n].type) { case d_rfc1036: res = ne_rfc1036_parse(str); break; case d_iso8601: res = ne_iso8601_parse(str); break; case d_rfc1123: res = ne_rfc1123_parse(str); break; default: res = -1; break; } ONV(res == -1, ("date %d parse", n)); #define FT "%" NE_FMT_TIME_T ONV(res != good_dates[n].time, ( "date %d incorrect (" FT " not " FT ")", n, res, good_dates[n].time)); } return OK; } /* trigger segfaults in ne_rfc1036_parse() in <=0.24.5. */ static int regress_dates(void) { static const char *dates[] = { "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" }; size_t n; for (n = 0; n < sizeof(dates)/sizeof(dates[0]); n++) { ne_rfc1036_parse(dates[n]); ne_iso8601_parse(dates[n]); ne_rfc1123_parse(dates[n]); } return OK; } static int versioning(void) { #define GOOD(n,m,msg) ONV(ne_version_match(n,m), \ ("match of " msg " failed (%d.%d)", n, m)) #define BAD(n,m,msg) ONV(ne_version_match(n,m) == 0, \ ("match of " msg " succeeded (%d.%d)", n, m)) GOOD(NEON_VERSION_MAJOR, NEON_VERSION_MINOR, "current version"); BAD(NEON_VERSION_MAJOR, NEON_VERSION_MINOR + 1, "later minor"); BAD(NEON_VERSION_MAJOR + 1, 0, "later major"); #if NEON_VERSION_MINOR > 0 GOOD(NEON_VERSION_MAJOR, NEON_VERSION_MINOR - 1, "earlier minor"); #endif #if NEON_VERSION_MAJOR > 0 BAD(NEON_VERSION_MAJOR - 1, 0, "earlier major"); #endif #undef GOOD #undef BAD return OK; } /* basic ne_version_string() sanity tests */ static int version_string(void) { char buf[1024]; ne_snprintf(buf, sizeof buf, "%s", ne_version_string()); NE_DEBUG(NE_DBG_HTTP, "Version string: %s\n", buf); ONN("version string too long", strlen(buf) > 200); ONN("version string contained newline", strchr(buf, '\n') != NULL); return OK; } static int support(void) { #ifdef NEON_SSL ONN("SSL support not advertised", !ne_supports_ssl()); #else ONN("SSL support advertised", ne_supports_ssl()); #endif return OK; } ne_test tests[] = { T(status_lines), T(md5), T(md5_alignment), T(parse_dates), T(regress_dates), T(versioning), T(version_string), T(support), T(NULL) }; tla-1.3.5+dfsg/src/libneon/test/STATUS0000644000175000017500000000447210457621776016125 0ustar useruser -*- text -*- This document attempts to list RFC requirements and determine whether neon meets them, or where they do not apply, etc. Yes: test written, succeeds No: test written, but currently fails ???: no test written ---: feature not supported App: this is an application issue not a neon issue RFC2616 ======= 3.1: MUST treat major/minor as separate digits Yes 3.1: MUST ignore leading zeros Yes 3.1: MUST only send HTTP/1.1 when appropriate ??? 3.2.2: MUST use abs_path of "/" in Request-URI App 3.2.3: comparisons of host names MUST be case-insensitive Yes comparisons of scheme names MUST be ... Yes comparison of empty abs_path equivalent to "/" No/--- 3.3.1: MUST accept three date formats App/Yes [2] MUST only generate RFC1123-style dates App 3.3.1: MUST use GMT for http-dates ??? MUST assume GMT when parsing asctime dates ??? 3.4.1: MUST respect charset label provided Yes/App 3.5*: content codings App 3.6: MUST requirements for multiple transfer-codings --- [4] 3.6.1: parsing of chunked transfer coding Yes MUST be able to handle "chunked" transfer-coding Yes MUST ignore unknown chunk-extension extensions Yes 3.7: parsing of Content-Type headers Yes 3.7: MUST NOT have LWS between type/subtype in C-T hdr App SHOULD only send parameters to "new HTTP apps" (>1.0?) App 3.7.1: MUST represent HTTP message in canonical form App MUST accept CRLF/CR/LF as line-breaks in text/* media App MUST NOT use only CR or LF in HTTP control structures ??? MUST specify charset if not ISO-8859-1 App 3.7.2: multipart types --- 3.8: SHOULD have short product token Yes/App [5] SHOULD use product-version for version identifier Yes/App only product-version differs between versions Yes/App 3.9: Content Negotiation ---/App 3.10: Language Tags ---/App 3.11: Entity Tags ---/App [2]: date parser is provided which handles all three formats, but no handling of the Date header is present within neon. [3]: not sure if neon should be handling of this internally. [4]: neon only supports using just chunked Transfer-Coding or none. [5]: these reflect that applications may add their own product tokens alongside neon's. tla-1.3.5+dfsg/src/libneon/test/utils.c0000644000175000017500000000660210457621776016460 0ustar useruser/* Utility functions for HTTP client tests Copyright (C) 2001-2004, Joe Orton This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #include "config.h" #ifdef HAVE_UNISTD_H #include /* for sleep() */ #endif #ifdef HAVE_STDLIB_H #include #endif #include "ne_session.h" #include "child.h" #include "tests.h" #include "utils.h" int make_session(ne_session **sess, server_fn fn, void *ud) { *sess = ne_session_create("http", "localhost", 7777); return spawn_server(7777, fn, ud); } static int serve_response(ne_socket *s, const char *response) { CALL(discard_request(s)); CALL(discard_body(s)); ONN("failed to send response", SEND_STRING(s, response)); return OK; } int single_serve_string(ne_socket *s, void *userdata) { const char *str = userdata; return serve_response(s, str); } int sleepy_server(ne_socket *sock, void *userdata) { sleep(10); return 0; } int many_serve_string(ne_socket *s, void *userdata) { int n; struct many_serve_args *args = userdata; for (n = 0; n < args->count; n++) { NE_DEBUG(NE_DBG_HTTP, "Serving response %d\n", n); CALL(serve_response(s, args->str)); } return OK; } int any_request(ne_session *sess, const char *uri) { ne_request *req = ne_request_create(sess, "GET", uri); int ret = ne_request_dispatch(req); ne_request_destroy(req); return ret; } int any_2xx_request(ne_session *sess, const char *uri) { ne_request *req = ne_request_create(sess, "GET", uri); int ret = ne_request_dispatch(req); ONV(ret != NE_OK || ne_get_status(req)->klass != 2, ("request failed: %s\n", ne_get_error(sess))); ne_request_destroy(req); return ret; } int any_2xx_request_body(ne_session *sess, const char *uri) { ne_request *req = ne_request_create(sess, "GET", uri); #define BSIZE 5000 char *body = memset(ne_malloc(BSIZE), 'A', BSIZE); int ret; ne_set_request_body_buffer(req, body, BSIZE); ret = ne_request_dispatch(req); ne_free(body); ONV(ret != NE_OK || ne_get_status(req)->klass != 2, ("request failed: %s\n", ne_get_error(sess))); ne_request_destroy(req); return ret; } int serve_sstring(ne_socket *sock, void *ud) { struct string *str = ud; NE_DEBUG(NE_DBG_SOCKET, "Serving string: [[[%.*s]]]\n", (int)str->len, str->data); ONN("write failed", ne_sock_fullwrite(sock, str->data, str->len)); return 0; } int serve_sstring_slowly(ne_socket *sock, void *ud) { struct string *str = ud; size_t n; NE_DEBUG(NE_DBG_SOCKET, "Slowly serving string: [[[%.*s]]]\n", (int)str->len, str->data); for (n = 0; n < str->len; n++) { ONN("write failed", ne_sock_fullwrite(sock, &str->data[n], 1)); minisleep(); } return 0; } tla-1.3.5+dfsg/src/libneon/test/README0000644000175000017500000000235210457621776016032 0ustar useruser Stupidly Simple Test Suite for neon ----------------------------------- The aim of the test suite is two-fold: 1. ensure compliance to the relevant RFCs in network behaviour. 2. ensure that the promises made by the public API are met by the current implementation. The file `STATUS' makes an attempt at listing RFC requirements and how the test suite tests whether neon meets them or not (it's not finished yet). The test suite is licensed under the GPL. Important Note About Test Failures ---------------------------------- Note that a test failure either means a bug in the test or a bug in the code itself. On platforms without pipe(), there is a race condition in the code which forks a server process: if you get random failures on a slow or loaded box, increase the sleep time in common/child.c:minisleep(). Extra Stuff ----------- server-tests requires that you have a running HTTP server on localhost port 80, and you have copied htdocs/* to server-htdocs-root/test/* Credits ------- This test suite is inspired by the Subversion project, discussion on the subversion mailing list, and seeing chromatic's talks on XP. The presentation is inspired by the standard Perl test suite. Imitation is the greatest form of flattery, right? tla-1.3.5+dfsg/src/libneon/test/COPYING0000644000175000017500000004307610457621776016215 0ustar useruser GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 675 Mass Ave, Cambridge, MA 02139, USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS Appendix: How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) 19yy This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) 19yy name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License. tla-1.3.5+dfsg/src/libneon/test/uri-tests.c0000644000175000017500000002342110457621776017255 0ustar useruser/* URI tests Copyright (C) 2001-2003, Joe Orton This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #include "config.h" #ifdef HAVE_STDLIB_H #include #endif #ifdef HAVE_STRING_H #include #endif #include "ne_uri.h" #include "ne_alloc.h" #include "tests.h" static int simple(void) { ne_uri p = {0}; ON(ne_uri_parse("http://www.webdav.org/foo", &p)); ON(strcmp(p.host, "www.webdav.org")); ON(strcmp(p.path, "/foo")); ON(strcmp(p.scheme, "http")); ON(p.port); ON(p.authinfo != NULL); ne_uri_free(&p); return 0; } static int simple_ssl(void) { ne_uri p = {0}; ON(ne_uri_parse("https://webdav.org/", &p)); ON(strcmp(p.scheme, "https")); ON(p.port); ne_uri_free(&p); return OK; } static int no_path(void) { ne_uri p = {0}; ON(ne_uri_parse("https://webdav.org", &p)); ON(strcmp(p.path, "/")); ne_uri_free(&p); return OK; } #define STR "/a¹²³¼½/" static int escapes(void) { char *un, *esc; esc = ne_path_escape(STR); ON(esc == NULL); un = ne_path_unescape(esc); ON(un == NULL); ON(strcmp(un, STR)); ne_free(un); ne_free(esc); ONN("unescape accepted invalid URI", ne_path_unescape("/foo%zzbar") != NULL); /* no-escape path */ esc = ne_path_escape("/foobar"); ON(strcmp(esc, "/foobar")); ne_free(esc); return OK; } static int parents(void) { static const struct { const char *path, *parent; } ps[] = { { "/a/b/c", "/a/b/" }, { "/a/b/c/", "/a/b/" }, { "/alpha/beta", "/alpha/" }, { "/foo", "/" }, { "norman", NULL }, { "/", NULL }, { "", NULL }, { NULL, NULL } }; int n; for (n = 0; ps[n].path != NULL; n++) { char *p = ne_path_parent(ps[n].path); if (ps[n].parent == NULL) { ONV(p != NULL, ("parent of `%s' was `%s' not NULL", ps[n].path, p)); } else { ONV(p == NULL, ("parent of `%s' was NULL", ps[n].path)); ONV(strcmp(p, ps[n].parent), ("parent of `%s' was `%s' not `%s'", ps[n].path, p, ps[n].parent)); ne_free(p); } } return OK; } static int compares(void) { const char *alpha = "/alpha"; ON(ne_path_compare("/a", "/a/") != 0); ON(ne_path_compare("/a/", "/a") != 0); ON(ne_path_compare("/ab", "/a/") == 0); ON(ne_path_compare("/a/", "/ab") == 0); ON(ne_path_compare("/a/", "/a/") != 0); ON(ne_path_compare("/alpha/", "/beta/") == 0); ON(ne_path_compare("/alpha", "/b") == 0); ON(ne_path_compare("/alpha/", "/alphash") == 0); ON(ne_path_compare("/fish/", "/food") == 0); ON(ne_path_compare(alpha, alpha) != 0); ON(ne_path_compare("/a/b/c/d", "/a/b/c/") == 0); return OK; } /* Checks that a URI comparison of 'u1' and 'u2', which have differing * 'field', doesn't compare to equal; and that they are ordered * correctly. */ static int cmp_differ(const char *field, const ne_uri *u1, const ne_uri *u2) { ONV(ne_uri_cmp(u1, u2) == 0, ("URIs with different %s were equal", field)); ONV(ne_uri_cmp(u2, u1) == 0, ("URIs with different %s were equal (reversed)", field)); /* relies on strcmp return value being of equal magnitude when * arguments are reversed; not sure if this is portable * assumption. */ ONV(ne_uri_cmp(u1, u2) + ne_uri_cmp(u2, u1) != 0, ("relative ordering of URIs with different %s incorrect", field)); return OK; } static int cmp(void) { ne_uri alpha, beta; alpha.path = "/alpha"; alpha.scheme = "http"; alpha.host = "example.com"; alpha.port = 80; beta = alpha; /* structure copy. */ ONN("equal URIs not equal", ne_uri_cmp(&alpha, &beta) != 0); beta.path = "/beta"; CALL(cmp_differ("path", &alpha, &beta)); beta = alpha; beta.scheme = "https"; CALL(cmp_differ("scheme", &alpha, &beta)); beta = alpha; beta.port = 433; CALL(cmp_differ("port", &alpha, &beta)); beta = alpha; beta.host = "fish.com"; CALL(cmp_differ("host", &alpha, &beta)); beta = alpha; beta.host = "EXAMPLE.CoM"; ONN("hostname comparison not case-insensitive", ne_uri_cmp(&alpha, &beta) != 0); beta = alpha; beta.scheme = "HtTp"; ONN("scheme comparison not case-insensitive", ne_uri_cmp(&alpha, &beta) != 0); beta = alpha; beta.path = ""; alpha.path = "/"; ONN("empty abspath doesn't match '/'", ne_uri_cmp(&alpha, &beta) != 0); ONN("'/' doesn't match empty abspath", ne_uri_cmp(&beta, &alpha) != 0); beta = alpha; alpha.path = ""; beta.path = "/foo"; ONN("empty abspath matched '/foo'", ne_uri_cmp(&alpha, &beta) == 0); ONN("'/foo' matched empty abspath ", ne_uri_cmp(&beta, &alpha) == 0); return OK; } static int children(void) { ON(ne_path_childof("/a", "/a/b") == 0); ON(ne_path_childof("/a/", "/a/b") == 0); ON(ne_path_childof("/aa/b/c", "/a/b/c/d/e") != 0); ON(ne_path_childof("////", "/a") != 0); return OK; } static int slash(void) { ON(ne_path_has_trailing_slash("/a/") == 0); ON(ne_path_has_trailing_slash("/a") != 0); { /* check the uri == "" case. */ char *foo = "/"; ON(ne_path_has_trailing_slash(&foo[1])); } return OK; } static int just_hostname(void) { ne_uri p = {0}; ON(ne_uri_parse("host.name.com", &p)); ON(strcmp(p.host, "host.name.com")); ne_uri_free(&p); return 0; } static int just_path(void) { ne_uri p = {0}; ON(ne_uri_parse("/argh", &p)); ON(strcmp(p.path, "/argh")); ne_uri_free(&p); return 0; } static int default_port(void) { ONN("default http: port incorrect", ne_uri_defaultport("http") != 80); ONN("default https: port incorrect", ne_uri_defaultport("https") != 443); ONN("unspecified scheme: port incorrect", ne_uri_defaultport("ldap") != 0); return OK; } static int parse(void) { static const struct test_uri { const char *uri, *scheme, *host; unsigned int port; const char *path, *authinfo; } uritests[] = { { "http://webdav.org/norman", "http", "webdav.org", 0, "/norman", NULL }, { "http://webdav.org:/norman", "http", "webdav.org", 0, "/norman", NULL }, { "https://webdav.org/foo", "https", "webdav.org", 0, "/foo", NULL }, { "http://webdav.org:8080/bar", "http", "webdav.org", 8080, "/bar", NULL }, { "http://a/b", "http", "a", 0, "/b", NULL }, { "http://webdav.org/bar:fish", "http", "webdav.org", 0, "/bar:fish", NULL }, { "http://webdav.org", "http", "webdav.org", 0, "/", NULL }, { "http://webdav.org/fish@food", "http", "webdav.org", 0, "/fish@food", NULL }, /* authinfo */ { "ftp://jim:bob@jim.com", "ftp", "jim.com", 0, "/", "jim:bob" }, { "ldap://fred:bloggs@fish.com/foobar", "ldap", "fish.com", 0, "/foobar", "fred:bloggs" }, /* relativeURIs accepted for dubious legacy reasons. */ { "a/b", NULL, "a", 0, "/b", NULL }, { "a:8080/b", NULL, "a", 8080, "/b", NULL }, { "/fish", NULL, NULL, 0, "/fish", NULL }, { "webdav.org:8080", NULL, "webdav.org", 8080, "/", NULL }, /* IPv6 hex strings allowed even if IPv6 not supported. */ { "http://[::1]/foo", "http", "[::1]", 0, "/foo", NULL }, { "http://[a:a:a:a::0]/foo", "http", "[a:a:a:a::0]", 0, "/foo", NULL }, { "http://[::1]:8080/bar", "http", "[::1]", 8080, "/bar", NULL }, { "ftp://[feed::cafe]:555", "ftp", "[feed::cafe]", 555, "/", NULL }, { "http://fish/[foo]/bar", "http", "fish", 0, "/[foo]/bar", NULL }, /* and some dubious ones: */ { "[::1]/foo", NULL, "[::1]", 0, "/foo", NULL }, { "[::1]:8000/foo", NULL, "[::1]", 8000, "/foo", NULL }, { NULL } }; int n; for (n = 0; uritests[n].uri != NULL; n++) { ne_uri res; const struct test_uri *e = &uritests[n]; ONV(ne_uri_parse(e->uri, &res) != 0, ("%s: parse failed", e->uri)); ONV(res.port != e->port, ("%s: parsed port was %d not %d", e->uri, res.port, e->port)); ONCMP(e->scheme, res.scheme, e->uri, "scheme"); ONCMP(e->host, res.host, e->uri, "host"); ONV(strcmp(res.path, e->path), ("%s: parsed path was %s not %s", e->uri, res.path, e->path)); ONCMP(e->authinfo, res.authinfo, e->uri, "authinfo"); ne_uri_free(&res); } return OK; } static int failparse(void) { static const char *uris[] = { "", "http://[::1/", NULL }; int n; for (n = 0; uris[n] != NULL; n++) { ne_uri p; ONV(ne_uri_parse(uris[n], &p) == 0, ("`%s' did not fail to parse", uris[n])); ne_uri_free(&p); } return 0; } static int unparse(void) { const char *uris[] = { "http://foo.com/bar", "https://bar.com/foo/wishbone", "http://www.random.com:8000/", "http://[::1]:8080/", "ftp://ftp.foo.bar/abc/def", NULL }; int n; for (n = 0; uris[n] != NULL; n++) { ne_uri parsed; char *unp; ONV(ne_uri_parse(uris[n], &parsed), ("failed to parse %s", uris[n])); if (parsed.port == 0) parsed.port = ne_uri_defaultport(parsed.scheme); unp = ne_uri_unparse(&parsed); ONV(strcmp(unp, uris[n]), ("unparse got %s from %s", unp, uris[n])); ne_uri_free(&parsed); ne_free(unp); } return OK; } ne_test tests[] = { T(simple), T(simple_ssl), T(no_path), T(escapes), T(parents), T(compares), T(cmp), T(children), T(slash), T(just_hostname), T(just_path), T(default_port), T(parse), T(failparse), T(unparse), T(NULL) }; tla-1.3.5+dfsg/src/libneon/test/common/0000755000175000017500000000000010457621776016440 5ustar userusertla-1.3.5+dfsg/src/libneon/test/common/tests.h0000644000175000017500000001050210457621776017751 0ustar useruser/* Stupidly simple test framework Copyright (C) 2001-2002, Joe Orton This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA */ #ifndef TESTS_H #define TESTS_H 1 #ifdef HAVE_STRING_H #include #endif #include #define OK 0 #define FAIL 1 #define FAILHARD 2 /* fail and skip all succeeding tests in this suite. */ #define SKIP 3 /* test was skipped because precondition was not met */ #define SKIPREST 4 /* skipped, and skip all succeeding tests in suite */ /* A test function. Must return any of OK, FAIL, FAILHARD, SKIP, or * SKIPREST. May call t_warning() any number of times. If not * returning OK, optionally call t_context to provide an error * message. */ typedef int (*test_func)(void); typedef struct { test_func fn; /* the function to test. */ const char *name; /* the name of the test. */ int flags; } ne_test; /* possible values for flags: */ #define T_CHECK_LEAKS (1) /* check for memory leaks */ #define T_EXPECT_FAIL (2) /* expect failure */ #define T_EXPECT_LEAKS (4) /* expect memory leak failures */ /* array of tests to run: must be defined by each test suite. */ extern ne_test tests[]; /* define a test function which has the same name as the function, * and does check for memory leaks. */ #define T(fn) { fn, #fn, T_CHECK_LEAKS } /* define a test function which is expected to return FAIL. */ #define T_XFAIL(fn) { fn, #fn, T_EXPECT_FAIL | T_CHECK_LEAKS } /* define a test function which isn't checked for memory leaks. */ #define T_LEAKY(fn) { fn, #fn, 0 } /* define a test function which is expected to fail memory leak checks */ #define T_XLEAKY(fn) { fn, #fn, T_EXPECT_LEAKS } /* current test number */ extern int test_num; /* name of test suite */ extern const char *test_suite; /* Provide result context message. */ void t_context(const char *ctx, ...) #ifdef __GNUC__ __attribute__ ((format (printf, 1, 2))) #endif /* __GNUC__ */ ; extern char test_context[]; /* the command-line arguments passed in to the test suite: */ extern char **test_argv; extern int test_argc; /* child process should call this. */ void in_child(void); /* issue a warning. */ void t_warning(const char *str, ...) #ifdef __GNUC__ __attribute__ ((format (printf, 1, 2))) #endif /* __GNUC__ */ ; /* Macros for easily writing is-not-zero comparison tests; the ON* * macros fail the function if a comparison is not zero. * * ONV(x,vs) takes a comparison X, and a printf varargs list for * the failure message. * e.g. ONV(strcmp(bar, "foo"), ("bar was %s not 'foo'", bar)) * * ON(x) takes a comparison X, and uses the line number for the failure * message. e.g. ONV(strcmp(bar, "foo")) * * ONN(n, x) takes a comparison X, and a flat string failure message. * e.g. ONN("foo was wrong", strcmp(bar, "foo")) */ #define ONV(x,vs) do { if ((x)) { t_context vs; return FAIL; } } while (0) #define ON(x) ONV((x), ("line %d", __LINE__ )) #define ONN(n,x) ONV((x), (n)) /* ONCMP(exp, act, name): 'exp' is the expected string, 'act' is the * actual string for some field 'name'. Succeeds if strcmp(exp,act) * == 0 or both are NULL. */ #define ONCMP(exp, act, ctx, name) do { \ ONV(exp && !act, ("%s: " name " was NULL, expected non-NULL", ctx)); \ ONV(!exp && act, ("%s: " name " was non-NULL, expected NULL", ctx)); \ ONV(exp && strcmp(exp, act), ("%s: " name " was %s not %s", ctx, exp, act)); \ } while (0) /* return immediately with result of test 'x' if it fails. */ #define CALL(x) do { int t_ret = (x); if (t_ret != OK) return t_ret; } while (0) /* PRECOND: skip current test if condition 'x' is not true. */ #define PRECOND(x) do { if (!(x)) { return SKIP; } } while (0) #endif /* TESTS_H */ tla-1.3.5+dfsg/src/libneon/test/common/run.sh0000755000175000017500000000033710457621776017606 0ustar useruser#!/bin/sh rm -f debug.log rm -f child.log # for shared builds. LD_LIBRARY_PATH=../src/.libs:$LD_LIBRARY_PATH export LD_LIBRARY_PATH for f in $*; do if ./$f; then : else echo FAILURE exit 1 fi done exit 0 tla-1.3.5+dfsg/src/libneon/test/common/tests.c0000644000175000017500000001721610457621776017755 0ustar useruser/* Stupidly simple test framework Copyright (C) 2001-2002, Joe Orton This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #include "config.h" #include #include #include #ifdef HAVE_SIGNAL_H #include #endif #ifdef HAVE_UNISTD_H #include #endif #ifdef HAVE_STRING_H #include #endif #ifdef HAVE_STDLIB_H #include #endif #ifdef HAVE_ERRNO_H #include #endif #include "ne_utils.h" #include "ne_socket.h" #include "tests.h" #include "child.h" char test_context[BUFSIZ]; int have_context = 0; static FILE *child_debug, *debug; char **test_argv; int test_argc; const char *test_suite; int test_num; /* statistics for all tests so far */ static int passes = 0, fails = 0, skipped = 0, warnings = 0; /* per-test globals: */ static int warned, aborted = 0; static const char *test_name; /* current test name */ static int use_colour = 0; /* resource for ANSI escape codes: * http://www.isthe.com/chongo/tech/comp/ansi_escapes.html */ #define COL(x) do { if (use_colour) printf("\033[" x "m"); } while (0) #define NOCOL COL("00") void t_context(const char *context, ...) { va_list ap; va_start(ap, context); ne_vsnprintf(test_context, BUFSIZ, context, ap); va_end(ap); have_context = 1; } void t_warning(const char *str, ...) { va_list ap; COL("43;01"); printf("WARNING:"); NOCOL; putchar(' '); va_start(ap, str); vprintf(str, ap); va_end(ap); warnings++; warned++; putchar('\n'); } #define TEST_DEBUG \ (NE_DBG_HTTP | NE_DBG_SOCKET | NE_DBG_HTTPBODY | NE_DBG_HTTPAUTH | \ NE_DBG_LOCKS | NE_DBG_XMLPARSE | NE_DBG_XML | NE_DBG_SSL) #define W(m) write(0, m, strlen(m)) static void child_segv(int signo) { signal(SIGSEGV, SIG_DFL); W("(possible segfault in child, not dumping core)\n"); exit(-1); } static void segv(int signo) { signal(SIGSEGV, SIG_DFL); if (use_colour) { W("\033[41;37;01m"); } W("FAILED - segmentation fault."); if (use_colour) { W("\033[00m"); } W("\n"); fflush(debug); reap_server(); kill(getpid(), SIGSEGV); } void in_child(void) { ne_debug_init(child_debug, TEST_DEBUG); NE_DEBUG(TEST_DEBUG, "**** Child forked for test %s ****\n", test_name); signal(SIGSEGV, child_segv); } int main(int argc, char *argv[]) { int n; static const char dots[] = "......................"; /* get basename(argv[0]) */ test_suite = strrchr(argv[0], '/'); if (test_suite == NULL) { test_suite = argv[0]; } else { test_suite++; } #if defined(HAVE_ISATTY) && defined(STDOUT_FILENO) if (isatty(STDOUT_FILENO)) { use_colour = 1; } #endif test_argc = argc; test_argv = argv; debug = fopen("debug.log", "a"); if (debug == NULL) { fprintf(stderr, "%s: Could not open debug.log: %s\n", test_suite, strerror(errno)); return -1; } child_debug = fopen("child.log", "a"); if (child_debug == NULL) { fprintf(stderr, "%s: Could not open child.log: %s\n", test_suite, strerror(errno)); fclose(debug); return -1; } if (tests[0].fn == NULL) { printf("-> no tests found in `%s'\n", test_suite); return -1; } /* install special SEGV handler. */ signal(SIGSEGV, segv); /* test the "no-debugging" mode of ne_debug. */ ne_debug_init(NULL, 0); NE_DEBUG(TEST_DEBUG, "This message should go to /dev/null"); /* enable debugging for real. */ ne_debug_init(debug, TEST_DEBUG); NE_DEBUG(TEST_DEBUG | NE_DBG_FLUSH, "Version string: %s\n", ne_version_string()); /* another silly test. */ NE_DEBUG(0, "This message should also go to /dev/null"); if (ne_sock_init()) { COL("43;01"); printf("WARNING:"); NOCOL; printf(" Socket library initalization failed.\n"); } printf("-> running `%s':\n", test_suite); for (n = 0; !aborted && tests[n].fn != NULL; n++) { int result; #ifdef NEON_MEMLEAK size_t allocated = ne_alloc_used; #endif test_name = tests[n].name; printf("%2d. %s%.*s ", n, test_name, (int) (strlen(dots) - strlen(test_name)), dots); have_context = 0; test_num = n; warned = 0; fflush(stdout); NE_DEBUG(TEST_DEBUG, "******* Running test %d: %s ********\n", n, test_name); /* run the test. */ result = tests[n].fn(); #ifdef NEON_MEMLEAK /* issue warnings for memory leaks, if requested */ if ((tests[n].flags & T_CHECK_LEAKS) && result == OK && ne_alloc_used > allocated) { t_context("memory leak of %" NE_FMT_SIZE_T " bytes", ne_alloc_used - allocated); fprintf(debug, "Blocks leaked: "); ne_alloc_dump(debug); result = FAIL; } else if (tests[n].flags & T_EXPECT_LEAKS && result == OK && ne_alloc_used == allocated) { t_context("expected memory leak not detected"); result = FAIL; } #endif if (tests[n].flags & T_EXPECT_FAIL) { if (result == OK) { t_context("test passed but expected failure"); result = FAIL; } else if (result == FAIL) result = OK; } /* align the result column if we've had warnings. */ if (warned) { printf(" %s ", dots); } switch (result) { case OK: COL("32"); printf("pass"); NOCOL; if (warned) { printf(" (with %d warning%s)", warned, (warned > 1)?"s":""); } putchar('\n'); passes++; break; case FAILHARD: aborted = 1; /* fall-through */ case FAIL: COL("41;37;01"); printf("FAIL"); NOCOL; if (have_context) { printf(" (%s)", test_context); } putchar('\n'); fails++; break; case SKIPREST: aborted = 1; /* fall-through */ case SKIP: COL("44"); printf("SKIPPED"); NOCOL; if (have_context) { printf(" (%s)", test_context); } putchar('\n'); skipped++; break; default: COL("41;37;01"); printf("OOPS"); NOCOL; printf(" unexpected test result `%d'\n", result); break; } reap_server(); } /* discount skipped tests */ if (skipped) { printf("-> %d %s.\n", skipped, skipped==1?"test was skipped":"tests were skipped"); n -= skipped; if (passes + fails != n) { printf("-> ARGH! Number of test results does not match " "number of tests.\n" "-> ARGH! Test Results are INRELIABLE.\n"); } } /* print the summary. */ if (skipped && n == 0) { printf("<- all tests skipped for `%s'.\n", test_suite); } else { printf("<- summary for `%s': " "of %d tests run: %d passed, %d failed. %.1f%%\n", test_suite, n, passes, fails, 100*(float)passes/n); if (warnings) { printf("-> %d warning%s issued.\n", warnings, warnings==1?" was":"s were"); } } if (fclose(debug)) { fprintf(stderr, "Error closing debug.log: %s\n", strerror(errno)); fails = 1; } if (fclose(child_debug)) { fprintf(stderr, "Error closing child.log: %s\n", strerror(errno)); fails = 1; } ne_sock_exit(); return fails; } tla-1.3.5+dfsg/src/libneon/test/common/child.c0000644000175000017500000002323110457621776017670 0ustar useruser/* Framework for testing with a server process Copyright (C) 2001-2002, Joe Orton This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #include "config.h" #include #include #include #include #include #include #ifdef HAVE_ERRNO_H #include #endif #ifdef HAVE_UNISTD_H #include #endif #ifdef HAVE_STDLIB_H #include #endif #include #include #include #include "ne_socket.h" #include "ne_utils.h" #include "ne_string.h" #include "tests.h" #include "child.h" static pid_t child = 0; int clength; static struct in_addr lh_addr = {0}, hn_addr = {0}; const char *want_header = NULL; got_header_fn got_header = NULL; char *local_hostname = NULL; /* If we have pipe(), then use a pipe between the parent and child to * know when the child is ready to accept incoming connections. * Otherwise use boring sleep()s trying to avoid the race condition * between listen() and connect() in the two processes. */ #ifdef HAVE_PIPE #define USE_PIPE 1 #endif int lookup_localhost(void) { /* this will break if a system is set up so that `localhost' does * not resolve to 127.0.0.1, but... */ lh_addr.s_addr = inet_addr("127.0.0.1"); return OK; } int lookup_hostname(void) { char buf[BUFSIZ]; struct hostent *ent; local_hostname = NULL; ONV(gethostname(buf, BUFSIZ) < 0, ("gethostname failed: %s", strerror(errno))); ent = gethostbyname(buf); #ifdef HAVE_HSTRERROR ONV(ent == NULL, ("could not resolve `%s': %s", buf, hstrerror(h_errno))); #else ONV(ent == NULL, ("could not resolve `%s'", buf)); #endif local_hostname = ne_strdup(ent->h_name); return OK; } static int do_listen(struct in_addr addr, int port) { int ls = socket(AF_INET, SOCK_STREAM, 0); struct sockaddr_in saddr = {0}; int val = 1; setsockopt(ls, SOL_SOCKET, SO_REUSEADDR, (void *)&val, sizeof(int)); saddr.sin_addr = addr; saddr.sin_port = htons(port); saddr.sin_family = AF_INET; if (bind(ls, (struct sockaddr *)&saddr, sizeof(saddr))) { printf("bind failed: %s\n", strerror(errno)); return -1; } if (listen(ls, 5)) { printf("listen failed: %s\n", strerror(errno)); return -1; } return ls; } void minisleep(void) { #ifdef HAVE_USLEEP usleep(500); #else sleep(1); #endif } /* close 'sock', performing lingering close to avoid premature RST. */ static int close_socket(ne_socket *sock) { #ifdef HAVE_SHUTDOWN char buf[20]; int fd = ne_sock_fd(sock); shutdown(fd, 0); while (ne_sock_read(sock, buf, sizeof buf) > 0); #endif return ne_sock_close(sock); } /* This runs as the child process. */ static int server_child(int readyfd, struct in_addr addr, int port, server_fn callback, void *userdata) { ne_socket *s = ne_sock_create(); int ret, listener; in_child(); listener = do_listen(addr, port); if (listener < 0) return FAIL; #ifdef USE_PIPE /* Tell the parent we're ready for the request. */ write(readyfd, "a", 1); #endif ONN("accept failed", ne_sock_accept(s, listener)); ret = callback(s, userdata); close_socket(s); return ret; } int spawn_server(int port, server_fn fn, void *ud) { return spawn_server_addr(1, port, fn, ud); } int spawn_server_addr(int bind_local, int port, server_fn fn, void *ud) { int fds[2]; struct in_addr addr; addr = bind_local?lh_addr:hn_addr; #ifdef USE_PIPE if (pipe(fds)) { perror("spawn_server: pipe"); return FAIL; } #else /* avoid using uninitialized variable. */ fds[0] = fds[1] = 0; #endif child = fork(); ONN("fork server", child == -1); if (child == 0) { /* this is the child. */ int ret; ret = server_child(fds[1], addr, port, fn, ud); #ifdef USE_PIPE close(fds[0]); close(fds[1]); #endif /* print the error out otherwise it gets lost. */ if (ret) { printf("server child failed: %s\n", test_context); } /* and quit the child. */ exit(ret); } else { char ch; #ifdef USE_PIPE if (read(fds[0], &ch, 1) < 0) perror("parent read"); close(fds[0]); close(fds[1]); #else minisleep(); #endif return OK; } } int spawn_server_repeat(int port, server_fn fn, void *userdata, int n) { int fds[2]; #ifdef USE_PIPE if (pipe(fds)) { perror("spawn_server: pipe"); return FAIL; } #else /* avoid using uninitialized variable. */ fds[0] = fds[1] = 0; #endif child = fork(); if (child == 0) { /* this is the child. */ int listener, count = 0; in_child(); listener = do_listen(lh_addr, port); #ifdef USE_PIPE write(fds[1], "Z", 1); #endif close(fds[1]); close(fds[0]); /* Loop serving requests. */ while (++count < n) { ne_socket *sock = ne_sock_create(); int ret; NE_DEBUG(NE_DBG_HTTP, "child awaiting connection #%d.\n", count); ONN("accept failed", ne_sock_accept(sock, listener)); ret = fn(sock, userdata); close_socket(sock); NE_DEBUG(NE_DBG_HTTP, "child served request, %d.\n", ret); if (ret) { printf("server child failed: %s\n", test_context); exit(-1); } /* don't send back notification to parent more than * once. */ } NE_DEBUG(NE_DBG_HTTP, "child aborted.\n"); close(listener); exit(-1); } else { char ch; /* this is the parent. wait for the child to get ready */ #ifdef USE_PIPE if (read(fds[0], &ch, 1) < 0) perror("parent read"); close(fds[0]); close(fds[1]); #else minisleep(); #endif } return OK; } int dead_server(void) { int status; if (waitpid(child, &status, WNOHANG)) { /* child quit already! */ return FAIL; } NE_DEBUG(NE_DBG_HTTP, "child has not quit.\n"); return OK; } int await_server(void) { int status; (void) wait(&status); /* so that we aren't reaped by mistake. */ child = 0; ONN("error from server process", WEXITSTATUS(status)); return OK; } int reap_server(void) { int status; if (child != 0) { (void) kill(child, SIGTERM); minisleep(); (void) wait(&status); child = 0; } return OK; } ssize_t server_send(ne_socket *sock, const char *str, size_t len) { NE_DEBUG(NE_DBG_HTTP, "Sending: %.*s\n", (int)len, str); return ne_sock_fullwrite(sock, str, len); } int discard_request(ne_socket *sock) { char buffer[1024]; size_t offset = want_header?strlen(want_header):0; clength = 0; NE_DEBUG(NE_DBG_HTTP, "Discarding request...\n"); do { ONV(ne_sock_readline(sock, buffer, 1024) < 0, ("error reading line: %s", ne_sock_error(sock))); NE_DEBUG(NE_DBG_HTTP, "[req] %s", buffer); if (strncasecmp(buffer, "content-length:", 15) == 0) { clength = atoi(buffer + 16); } if (got_header != NULL && want_header != NULL && strncasecmp(buffer, want_header, offset) == 0 && buffer[offset] == ':') { char *value = buffer + offset + 1; if (*value == ' ') value++; got_header(ne_shave(value, "\r\n")); } } while (strcmp(buffer, "\r\n") != 0); return OK; } int discard_body(ne_socket *sock) { while (clength > 0) { char buf[BUFSIZ]; size_t bytes = clength; ssize_t ret; if (bytes > sizeof(buf)) bytes = sizeof(buf); NE_DEBUG(NE_DBG_HTTP, "Discarding %" NE_FMT_SIZE_T " bytes.\n", bytes); ret = ne_sock_read(sock, buf, bytes); ONV(ret < 0, ("socket read failed (%" NE_FMT_SSIZE_T "): %s", ret, ne_sock_error(sock))); clength -= ret; NE_DEBUG(NE_DBG_HTTP, "Got %" NE_FMT_SSIZE_T " bytes.\n", ret); } NE_DEBUG(NE_DBG_HTTP, "Discard successful.\n"); return OK; } int serve_file(ne_socket *sock, void *ud) { char buffer[BUFSIZ]; struct stat st; struct serve_file_args *args = ud; ssize_t ret; int fd; CALL(discard_request(sock)); ne_sock_fullread(sock, buffer, clength); fd = open(args->fname, O_RDONLY); if (fd < 0) { SEND_STRING(sock, "HTTP/1.0 404 File Not Found\r\n" "Content-Length: 0\r\n\r\n"); return 0; } ONN("fstat fd", fstat(fd, &st)); SEND_STRING(sock, "HTTP/1.0 200 OK\r\n"); if (args->chunks) { sprintf(buffer, "Transfer-Encoding: chunked\r\n"); } else { sprintf(buffer, "Content-Length: %" NE_FMT_OFF_T "\r\n", st.st_size); } if (args->headers) { strcat(buffer, args->headers); } strcat(buffer, "\r\n"); SEND_STRING(sock, buffer); NE_DEBUG(NE_DBG_HTTP, "Serving %s (%" NE_FMT_OFF_T " bytes).\n", args->fname, st.st_size); if (args->chunks) { char buf[1024]; while ((ret = read(fd, &buf, args->chunks)) > 0) { /* this is a small integer, cast it explicitly to avoid * warnings with printing an ssize_t. */ sprintf(buffer, "%x\r\n", (unsigned int)ret); SEND_STRING(sock, buffer); ONN("writing body", ne_sock_fullwrite(sock, buf, ret)); SEND_STRING(sock, "\r\n"); } SEND_STRING(sock, "0\r\n\r\n"); } else { while ((ret = read(fd, buffer, BUFSIZ)) > 0) { ONN("writing body", ne_sock_fullwrite(sock, buffer, ret)); } } ONN("error reading from file", ret < 0); (void) close(fd); return OK; } tla-1.3.5+dfsg/src/libneon/test/common/README0000644000175000017500000000014010457621776017313 0ustar useruser Simple test framework for neon; licensed under the GNU GPL. Copyright (C) 2001-2002 Joe Orton tla-1.3.5+dfsg/src/libneon/test/common/child.h0000644000175000017500000000737510457621776017710 0ustar useruser/* Framework for testing with a server process Copyright (C) 2001-2002, Joe Orton This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #ifndef CHILD_H #define CHILD_H 1 #include "config.h" #ifdef HAVE_STRING_H #include /* for strlen() */ #endif #include "ne_socket.h" /* Test which does DNS lookup on "localhost": this must be the first * named test. */ int lookup_localhost(void); /* Test which looks up real local hostname. */ int lookup_hostname(void); /* set to local hostname if lookup_hostname succeeds. */ extern char *local_hostname; /* Callback for spawn_server. */ typedef int (*server_fn)(ne_socket *sock, void *userdata); /* Spawns server child process: * - forks child process. * - child process listens on localhost at given port. * - when you connect to it, 'fn' is run... * fn is passed the client/server socket as first argument, * and userdata as second. * - the socket is closed when 'fn' returns, so don't close in in 'fn'. */ int spawn_server(int port, server_fn fn, void *userdata); /* Like spawn_server; if bind_local is non-zero, binds server to * localhost, otherwise, binds server to real local hostname. (must * have called lookup_localhost or lookup_hostname as approprate * beforehand). */ int spawn_server_addr(int bind_local, int port, server_fn fn, void *userdata); /* Like spawn server except will continue accepting connections and * processing requests, up to 'n' times. If 'n' is reached, then the * child process exits with a failure status. */ int spawn_server_repeat(int port, server_fn fn, void *userdata, int n); /* Blocks until child process exits, and gives return code of 'fn'. */ int await_server(void); /* Kills child process. */ int reap_server(void); /* Returns non-zero if server process has already died. */ int dead_server(void); /* If discard_request comes across a header called 'want_header', it * will call got_header passing the header field value. */ extern const char *want_header; typedef void (*got_header_fn)(char *value); extern got_header_fn got_header; /* Send string to child; ne_sock_fullwrite with debugging. */ ssize_t server_send(ne_socket *sock, const char *data, size_t len); /* Utility macro: send given string down socket. */ #define SEND_STRING(sock, str) server_send((sock), (str), strlen((str))) /* Utility function: discard request. Sets context on error. */ int discard_request(ne_socket *sock); /* Utility function: discard request body. Sets context on error. */ int discard_body(ne_socket *sock); struct serve_file_args { const char *fname; const char *headers; int chunks; }; /* Utility function: callback for spawn_server: pass pointer to * serve_file_args as userdata, and args->fname is served as a 200 * request. If args->headers is non-NULL, it must be a set of * CRLF-terminated lines which is added in to the response headers. * If args->chunks is non-zero, the file is delivered using chunks of * that size. */ int serve_file(ne_socket *sock, void *ud); /* set to value of C-L header by discard_request. */ extern int clength; /* Sleep for a short time. */ void minisleep(void); #endif /* CHILD_H */ tla-1.3.5+dfsg/src/libneon/test/common/ChangeLog0000644000175000017500000001577110457621776020225 0ustar useruserTue Oct 7 21:19:56 2003 Joe Orton * child.c (close_socket): New function. (server_child, spawn_server_repeat): Use it. Fri Jul 25 12:13:59 2003 Joe Orton Add support for test type which is expected to fail memory leak checks. * tests.h (T_XLEAKY, T_EXPECT_LEAKS): New defines. * test.c (main) [NEON_MEMLEAK]: If T_EXPECT_LEAKS is set, fail if the test did not leak memory. Wed Jun 18 20:10:45 2003 Joe Orton * child.c (server_child, spawn_server_repeat): Adapt for new socket API. Sun Mar 9 17:52:11 2003 Joe Orton * test.h (T_EXPECT_FAIL): New constant. (T_XFAIL): New test function wrapper. * tests.c (main): Handle expected failures. Sat Mar 1 21:04:35 2003 Joe Orton Extend the ne_test structure with a 'flags' field which can optionally request leak checking at run-time. * tests.h (ne_test): Add 'flags' field. (T_CHECK_LEAKS): New flag. (T): Use T_CHECK_LEAKS flag by default. (T_LEAKY): Like T, but with no flags set. * tests.c (main) [NEON_MEMLEAK]: If leak checking is requested, if a test passes, but leaks memory, fail the test. Wed Feb 26 21:52:15 2003 Joe Orton * tests.c (main): Test the "disable debugging" mode of ne_debug_init, NE_DBG_FLUSH, and a ne_debug() with no output. Fri Aug 23 22:54:35 2002 Joe Orton * tests.c (main): Call ne_sock_init after ne_debug_init, so that debugging messages are caught from ne_sock_init. Print a warning message if ne_sock_init fails. Wed Aug 21 13:29:20 2002 Joe Orton * tests.h (ONCMP): New macro. Mon Aug 19 16:53:20 2002 Joe Orton * child.c (lookup_localhost): Just use inet_addr to resolve 127.0.0.1. Sun Aug 18 13:50:30 2002 Joe Orton * tests.c (TEST_DEBUG): Add NE_DBG_SSL. Sat Aug 10 10:19:18 2002 Joe Orton * child.c (server_send): Fix declaration. (discard_body): Use NE_FMT_SSIZE_T for print ssize_t's. Sat Jul 6 08:42:37 2002 Joe Orton * child.c (discard_body): New function. Sun Jun 30 10:26:33 2002 Joe Orton * child.c (server_send): New function. (discard_request): Fail with appropriate error. Sun Jun 30 09:03:51 2002 Joe Orton * tests.c (main): Reap server after each test has run. Sun Jun 30 09:00:43 2002 Joe Orton * child.c (reap_server): Set `child' to 0 so child can't be reaped twice. Sun Jun 23 12:09:09 2002 Joe Orton * child.c (serve_file): Use large buffer when sending in chunked mode to support large chunk sizes. Sun Jun 23 09:35:09 2002 Joe Orton * child.c (serve_file): Use NE_FMT_OFF_T and NE_FMT_SSIZE_T. Thu May 30 21:57:39 2002 Joe Orton * child.c (minisleep): Export function. Sun May 19 18:23:19 2002 Joe Orton * child.c, tests.c: s/sock_/ne_sock_/, s/SOCK_/NE_SOCK_/ for socket layer API change. * child.h (SEND_STRING): New macro. Sun May 19 08:57:21 2002 Joe Orton * child.c (lookup_hostname): Conditionally use hstrerror(). Mon Feb 25 20:54:56 2002 Joe Orton * tests.c (t_context): Use ne_vsnprintf. Mon Feb 11 21:52:23 2002 Joe Orton * child.c (lookup_hostname): New function. (server_child, do_listen): Pass around struct in_addr argument. (spawn_server_addr): Renamed from spawn_server, take bind_local flag to use localhost or "real" hostname to bind to. (spawn_server): New function, use spawn_server Mon Feb 11 20:51:27 2002 Joe Orton * child.c (minisleep) [HAVE_USLEEP]: Use nice short usleep() rather than boring long sleep(). Sat Feb 2 14:15:25 2002 Joe Orton * child.c (spawn_server_repeat): Exit child process (with failure) if the server callback fails. Fri Jan 4 22:06:17 2002 Joe Orton * tests.h: Add SKIPREST result value. * tests.c (TEST_DEBUG): Add NE_DBG_LOCKS. (main): Support SKIPREST. Tue Jan 1 20:36:58 2002 Joe Orton * tests.h: Make test_suite symbol have external linkage. Sat Nov 10 22:28:55 2001 Joe Orton * tests.c, test.h: Export name of test suite. Sun Nov 4 13:56:42 2001 Joe Orton * child.c (discard_request): Support retrieving arbitrary header values from request via want_request, got_request globals. Wed Oct 24 21:41:39 2001 Joe Orton * tests.h (ONV): New macro. (ON, ONN): Redefine in terms of ONV. Wed Oct 24 20:44:59 2001 Joe Orton * tests.c (main, t_warning, segv): Use colours when stdout is a terminal device. Wed Oct 24 20:36:38 2001 Joe Orton * tests.c (t_context, t_warning): Renamed from i_am, warning. (t_context): Take printf varargs. * tests.h (ONN, ON): Update, simplify. * child.c: Update. Tue Oct 23 22:15:17 2001 Joe Orton * tests.c (main): Vertically align results after warnings. Tue Oct 2 23:36:44 2001 Joe Orton * child.c (do_listen): Refactored from server_socket, only does bind/listen. (spawn_server): Moved awaken/accept calls here. (spawn_server_repeat, dead_server): New functions. Sun Sep 30 10:14:35 2001 Joe Orton * tests.h: Use a function/name structure for tests, add 'T' macro for easily writing initializers. Rename 'name' global variable to 'test_context' to avoid parameter name collisions. * child.c (spawn_server): Update accordingly. * tests.c (i_am): Update accordingly. (main): Update; prettify output using new 'name' from test structure. Cope better when all tests in a suite are skipped. Sat Sep 29 11:04:40 2001 Joe Orton * child.c (serve_file): If 'chunks' is set in argument object, then deliver the file as a series of chunks. Thu Sep 27 20:28:45 2001 Joe Orton * child.c (serve_file): New function. Thu Sep 27 20:28:41 2001 Joe Orton * child.c (discard_request): Reset clength. Mon Aug 27 00:31:09 2001 Joe Orton * tests.c (test_num): Expose test counter. (segv): Handle segfault nicely. Mon Aug 27 00:30:20 2001 Joe Orton * child.c (discard_request): New function, from request.c in neon/test. Wed Aug 8 22:09:21 2001 Joe Orton * tests.c, test.h: Only define test_argc/argv once. Mon Jul 16 16:30:28 2001 Joe Orton * tests.c (warning): Take printf-style arguments list. Mon Jul 16 16:16:08 2001 Joe Orton * tests.c (main): Cope with skipped tests properly. Mon Jul 16 16:00:59 2001 Joe Orton * tests.c (warning): New function. (main): Cope with warnings. Sun Jul 8 16:09:33 2001 Joe Orton * tests.c (main): Export argc/argv as test_argc, test_argv. tla-1.3.5+dfsg/src/libneon/test/Makefile.in0000644000175000017500000001053210457621776017216 0ustar useruser# Makefile for neon test suite. SHELL = @SHELL@ CPPFLAGS = @CPPFLAGS@ -I. -I$(top_srcdir)/src -I$(top_srcdir)/test/common CFLAGS = @CFLAGS@ @NEON_CFLAGS@ LDFLAGS = -L$(top_builddir)/../expat @LDFLAGS@ DEFS = @DEFS@ top_builddir = .. top_srcdir = @top_srcdir@ srcdir = @srcdir@ VPATH = @srcdir@ AR = ar RANLIB = @RANLIB@ LIBS = $(LIBTEST) CC = @CC@ OPENSSL = @OPENSSL@ HELPERS = @HELPERS@ BASIC_TESTS = uri-tests util-tests string-tests session socket \ request auth basic stubs redirect ZLIB_TESTS = compress ZLIB_HELPERS = file1.gz file2.gz trailing.gz badcsum.gz truncated.gz corrupt1.gz corrupt2.gz DAV_TESTS = xml acl props lock SSL_TESTS = socket-ssl ssl SSL_HELPERS = ca-stamp TESTS = @TESTS@ VALGRIND = valgrind --gdb-attach=yes --leak-check=yes # Make every object depend on libneon.la to force a rebuild on any src/* changes OBJDEPS = $(srcdir)/common/tests.h $(srcdir)/common/child.h $(srcdir)/utils.h \ $(top_builddir)/config.h $(top_builddir)/src/libneon.la # Test program just depends on libtest DEPS = $(LIBTEST) LIBTEST = libtest.la LIBNEON = $(top_builddir)/src/libneon.la LIBTOOL = @LIBTOOL@ --silent LINK = $(LIBTOOL) --mode=link $(CC) $(LDFLAGS) -no-install COMPILE = $(LIBTOOL) --mode=compile $(CC) $(CPPFLAGS) $(CFLAGS) .SUFFIXES: .SUFFIXES: .lo .c # By default, compile but don't run the tests. all: $(TESTS) clean: rm -f $(TESTS) $(HELPERS) *.*o common/*.*o libtest.a *.log rm -rf ca .libs rm -f ca-stamp client.key *.csr ssigned.pem wrongcn.pem \ server.cert client.cert client.p12 *.cert check: $(TESTS) $(HELPERS) @SRCDIR=$(srcdir) $(SHELL) $(srcdir)/run.sh $(TESTS) grind: $(TESTS) $(HELPERS) @SRCDIR=$(srcdir) HARNESS="$(VALGRIND)" $(SHELL) $(srcdir)/run.sh $(TESTS) NEWS = $(top_srcdir)/NEWS file1.gz: $(NEWS) gzip -c --no-name $(NEWS) > $@ file2.gz: $(NEWS) gzip -c --name $(NEWS) > $@ # gzip file with trailing bytes. trailing.gz: $(NEWS) gzip -c --no-name $(NEWS) > $@ echo "hello, world" >> $@ truncated.gz: file1.gz dd if=file1.gz of=$@ bs=2048 count=2 badcsum.gz: file1.gz dd of=$@ if=file1.gz bs=1 count=`perl -e 'printf "%d", (stat("file1.gz"))[7] - 8;'` echo 'broken!' >> $@ corrupt1.gz: file1.gz dd of=$@ if=file1.gz bs=1 count=500 cat $(NEWS) >> $@ corrupt2.gz: cat $(NEWS) > $@ # Dummy target to create the CA keys etc. makekeys stderr is redirected # since it changes for every invocation; not helpful for regression # testing. ca-stamp: $(srcdir)/makekeys.sh $(srcdir)/openssl.conf rm -rf ca OPENSSL=$(OPENSSL) \ $(SHELL) $(srcdir)/makekeys.sh $(srcdir) 2>makekeys.out @echo timestamp > ca-stamp Makefile: $(srcdir)/Makefile.in cd .. && ./config.status test/Makefile LIBOBJS = common/tests.lo common/child.lo utils.lo $(LIBTEST): $(LIBOBJS) $(LINK) -o $(LIBTEST) $(LIBOBJS) $(LIBNEON) .c.lo: $(COMPILE) -c $< -o $@ .lo: $(LINK) -o $@ $< $(LIBS) # Recompile socket.c with SOCKET_SSL defined socket-ssl.lo: $(srcdir)/socket.c $(HDRS) $(COMPILE) -DSOCKET_SSL -c $(srcdir)/socket.c -o $@ socket-ssl: socket-ssl.lo $(LIBTEST) $(LINK) -o $@ socket-ssl.lo $(LIBS) resolve: resolve.lo $(LIBNEON) $(LINK) -o $@ resolve.lo $(LIBNEON) auth.lo: $(srcdir)/auth.c $(OBJDEPS) uri-tests.lo: $(srcdir)/uri-tests.c $(OBJDEPS) util-tests.lo: $(srcdir)/util-tests.c $(OBJDEPS) string-tests.lo: $(srcdir)/string-tests.c $(OBJDEPS) socket.lo: $(srcdir)/socket.c $(OBJDEPS) server.lo: $(srcdir)/server.c $(OBJDEPS) request.lo: $(srcdir)/request.c $(OBJDEPS) regress.lo: $(srcdir)/regress.c $(OBJDEPS) compress.lo: $(srcdir)/compress.c $(OBJDEPS) acl.lo: $(srcdir)/acl.c $(OBJDEPS) utils.lo: $(srcdir)/utils.c $(OBJDEPS) stubs.lo: $(srcdir)/stubs.c $(OBJDEPS) props.lo: $(srcdir)/props.c $(OBJDEPS) session.lo: $(srcdir)/session.c $(OBJDEPS) redirect.lo: $(srcdir)/redirect.c $(OBJDEPS) basic.lo: $(srcdir)/basic.c $(OBJDEPS) ssl.lo: $(srcdir)/ssl.c $(OBJDEPS) cookies.lo: $(srcdir)/cookies.c $(OBJDEPS) auth: auth.lo $(DEPS) basic: basic.lo $(DEPS) uri-tests: uri-tests.lo $(DEPS) util-tests: util-tests.lo $(DEPS) string-tests: string-tests.lo $(DEPS) socket: socket.lo $(DEPS) server: server.lo $(DEPS) request: request.lo $(DEPS) regress: regress.lo $(DEPS) compress: compress.lo $(DEPS) acl: acl.lo $(DEPS) utils: utils.lo $(DEPS) stubs: stubs.lo $(DEPS) props: props.lo $(DEPS) session: session.lo $(DEPS) redirect: redirect.lo $(DEPS) basic: basic.lo $(DEPS) ssl: ssl.lo $(DEPS) xml: xml.lo $(DEPS) lock: lock.lo $(DEPS) cookies: cookies.lo $(DEPS) tla-1.3.5+dfsg/src/libneon/test/utils.h0000644000175000017500000000417710457621776016472 0ustar useruser/* neon-specific test utils Copyright (C) 2001-2004, Joe Orton This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #ifndef UTILS_H #define UTILS_H 1 #include "ne_request.h" #define ONREQ(x) do { int _ret = (x); if (_ret) { t_context("line %d: HTTP error:\n%s", __LINE__, ne_get_error(sess)); return FAIL; } } while (0); int single_serve_string(ne_socket *s, void *userdata); struct many_serve_args { int count; const char *str; }; /* Serves args->str response args->count times down a single * connection. */ int many_serve_string(ne_socket *s, void *userdata); /* Run a request using URI on the session. */ int any_request(ne_session *sess, const char *uri); /* Run a request using URI on the session; fail on a non-2xx response. */ int any_2xx_request(ne_session *sess, const char *uri); /* As above but with a request body. */ int any_2xx_request_body(ne_session *sess, const char *uri); /* makes *session, spawns server which will run 'fn(userdata, * socket)'. sets error context if returns non-zero, i.e use like: * CALL(make_session(...)); */ int make_session(ne_session **sess, server_fn fn, void *userdata); /* Server which sleeps for 10 seconds then closes the socket. */ int sleepy_server(ne_socket *sock, void *userdata); struct string { char *data; size_t len; }; /* Serve a struct string. */ int serve_sstring(ne_socket *sock, void *ud); /* Serve a struct string slowly. */ int serve_sstring_slowly(ne_socket *sock, void *ud); #endif /* UTILS_H */ tla-1.3.5+dfsg/src/libneon/test/stubs.c0000644000175000017500000001141110457621776016452 0ustar useruser/* neon test suite Copyright (C) 2002-2003, Joe Orton This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ /** These tests show that the stub functions produce appropriate * results to provide ABI-compatibility when a particular feature is * not supported by the library. **/ #include "config.h" #include #ifdef HAVE_STDLIB_H #include #endif #ifdef HAVE_UNISTD_H #include #endif #include "ne_request.h" #include "ne_socket.h" #include "ne_compress.h" #include "tests.h" #include "child.h" #include "utils.h" #if defined(NEON_ZLIB) && defined(NEON_SSL) #define NO_TESTS 1 #endif #ifndef NEON_ZLIB static int sd_result = OK; static void sd_reader(void *ud, const char *block, size_t len) { const char *expect = ud; if (strncmp(expect, block, len) != 0) { sd_result = FAIL; t_context("decompress reader got bad data"); } } static int stub_decompress(void) { ne_session *sess; ne_decompress *dc; ne_request *req; int ret; CALL(make_session(&sess, single_serve_string, "HTTP/1.1 200 OK" EOL "Connection: close" EOL EOL "abcde")); req = ne_request_create(sess, "GET", "/foo"); dc = ne_decompress_reader(req, ne_accept_2xx, sd_reader, "abcde"); ret = ne_request_dispatch(req); CALL(await_server()); ONREQ(ret); ONN("decompress_destroy failed", ne_decompress_destroy(dc)); ne_request_destroy(req); ne_session_destroy(sess); /* This is a skeleton test suite file. */ return sd_result; } #endif #ifndef NEON_SSL static int stub_ssl(void) { ne_session *sess = ne_session_create("https", "localhost", 7777); ne_ssl_certificate *cert; ne_ssl_client_cert *cc; /* these should all fail when SSL is not supported. */ cert = ne_ssl_cert_read("Makefile"); if (cert) { char *dn, digest[60], date[NE_SSL_VDATELEN]; const ne_ssl_certificate *issuer; /* This branch should never be executed, but lets pretend it * will to prevent the compiler optimising this code away if * it's placed after the cert != NULL test. And all that * needs to be tested is that these functions link OK. */ dn = ne_ssl_readable_dname(ne_ssl_cert_subject(cert)); ONN("this code shouldn't run", dn != NULL); dn = ne_ssl_readable_dname(ne_ssl_cert_issuer(cert)); ONN("this code shouldn't run", dn != NULL); issuer = ne_ssl_cert_signedby(cert); ONN("this code shouldn't run", issuer != NULL); ONN("this code shouldn't run", ne_ssl_cert_digest(cert, digest)); ne_ssl_cert_validity(cert, date, date); ONN("this code shouldn't run", ne_ssl_dname_cmp(ne_ssl_cert_subject(cert), ne_ssl_cert_issuer(cert))); ONN("this code shouldn't run", ne_ssl_cert_identity(issuer) != NULL); ONN("this code shouldn't run", ne_ssl_cert_export(cert) != NULL); } ONN("this code shouldn't run", ne_ssl_cert_import("foo") != NULL); ONN("this code shouldn't run", ne_ssl_cert_read("Makefile") != NULL); ONN("this code shouldn't succeed", ne_ssl_cert_cmp(NULL, NULL) == 0); ONN("certificate load succeeded", cert != NULL); ne_ssl_cert_free(cert); cc = ne_ssl_clicert_read("Makefile"); if (cc) { const char *name; /* dead branch as above. */ cert = (void *)ne_ssl_clicert_owner(cc); ONN("this code shouldn't run", cert != NULL); name = ne_ssl_clicert_name(cc); ONN("this code shouldn't run", name != NULL); ONN("this code shouldn't run", ne_ssl_clicert_decrypt(cc, "fubar")); ne_ssl_set_clicert(sess, cc); } ONN("client certificate load succeeded", cc != NULL); ne_ssl_clicert_free(cc); ne_ssl_trust_default_ca(sess); ne_session_destroy(sess); return OK; } #endif #ifdef NO_TESTS static int null_test(void) { return OK; } #endif ne_test tests[] = { #ifndef NEON_ZLIB T(stub_decompress), #endif #ifndef NEON_SSL T(stub_ssl), #endif /* to prevent failure when SSL and zlib are supported. */ #ifdef NO_TESTS T(null_test), #endif T(NULL) }; tla-1.3.5+dfsg/src/libneon/test/compress.c0000644000175000017500000002040510457621776017150 0ustar useruser/* tests for compressed response handling. Copyright (C) 2001-2004, Joe Orton This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #include "config.h" #ifdef HAVE_UNISTD_H #include #endif #include #include "ne_compress.h" #include "ne_auth.h" #include "tests.h" #include "child.h" #include "utils.h" static enum { f_partial = 0, f_mismatch, f_complete } failed; static char *newsfn = "../NEWS"; static int init(void) { if (test_argc > 1) { newsfn = ne_concat(test_argv[1], "/../NEWS", NULL); } return lookup_localhost(); } #define EXTRA_DEBUG 0 /* disabled by default */ static void reader(void *ud, const char *block, size_t len) { struct string *b = ud; #if EXTRA_DEBUG NE_DEBUG(NE_DBG_HTTP, "reader: got (%d): [[[%.*s]]]\n", (int)len, (int)len, block); #endif if (failed == f_mismatch) return; if (failed == f_partial && len == 0) { if (b->len != 0) { NE_DEBUG(NE_DBG_HTTP, "reader: got length %d at EOF\n", (int)b->len); failed = f_mismatch; } else { failed = f_complete; } return; } if (len > b->len || memcmp(b->data, block, len) != 0) { NE_DEBUG(NE_DBG_HTTP, "reader: failed, got [[%.*s]] not [[%.*s]]\n", (int)len, block, (int)b->len, b->data); failed = f_mismatch; } else { b->data += len; b->len -= len; #if EXTRA_DEBUG NE_DEBUG(NE_DBG_HTTP, "reader: OK, %d bytes remaining\n", (int)b->len); #endif } } static int file2buf(int fd, ne_buffer *buf) { char buffer[BUFSIZ]; ssize_t n; while ((n = read(fd, buffer, BUFSIZ)) > 0) { ne_buffer_append(buf, buffer, n); } return 0; } static int do_fetch(const char *realfn, const char *gzipfn, int chunked, int expect_fail) { ne_session *sess; ne_request *req; int fd; ne_buffer *buf = ne_buffer_create(); struct serve_file_args sfargs; ne_decompress *dc; struct string body; fd = open(realfn, O_RDONLY); ONN("failed to open file", fd < 0); file2buf(fd, buf); (void) close(fd); body.data = buf->data; body.len = buf->used - 1; failed = f_partial; if (gzipfn) { sfargs.fname = gzipfn; sfargs.headers = "Content-Encoding: gzip\r\n"; } else { sfargs.fname = realfn; sfargs.headers = NULL; } sfargs.chunks = chunked; CALL(make_session(&sess, serve_file, &sfargs)); req = ne_request_create(sess, "GET", "/"); dc = ne_decompress_reader(req, ne_accept_2xx, reader, &body); ONREQ(ne_request_dispatch(req)); ONN("file not served", ne_get_status(req)->code != 200); ONN("decompress succeeded", expect_fail && !ne_decompress_destroy(dc)); ONV(!expect_fail && ne_decompress_destroy(dc), ("decompress failed: %s", ne_get_error(sess))); ne_request_destroy(req); ne_session_destroy(sess); ne_buffer_destroy(buf); CALL(await_server()); if (!expect_fail) { ONN("inflated response truncated", failed == f_partial); ONN("inflated response mismatch", failed == f_mismatch); } return OK; } static int fetch(const char *realfn, const char *gzipfn, int chunked) { return do_fetch(realfn, gzipfn, chunked, 0); } /* Test the no-compression case. */ static int not_compressed(void) { return fetch(newsfn, NULL, 0); } static int simple(void) { return fetch(newsfn, "file1.gz", 0); } /* file1.gz has an embedded filename. */ static int withname(void) { return fetch(newsfn, "file2.gz", 0); } /* deliver various different sizes of chunks: tests the various * decoding cases. */ static int chunked_1b_wn(void) { return fetch(newsfn, "file2.gz", 1); } static int chunked_1b(void) { return fetch(newsfn, "file1.gz", 1); } static int chunked_12b(void) { return fetch(newsfn, "file2.gz", 12); } static int chunked_20b(void) { return fetch(newsfn, "file2.gz", 20); } static int chunked_10b(void) { return fetch(newsfn, "file1.gz", 10); } static int chunked_10b_wn(void) { return fetch(newsfn, "file2.gz", 10); } static int fail_trailing(void) { return do_fetch(newsfn, "trailing.gz", 0, 1); } static int fail_truncate(void) { return do_fetch(newsfn, "truncated.gz", 0, 1); } static int fail_bad_csum(void) { return do_fetch(newsfn, "badcsum.gz", 0, 1); } static int fail_corrupt1(void) { return do_fetch(newsfn, "corrupt1.gz", 0, 1); } static int fail_corrupt2(void) { return do_fetch(newsfn, "corrupt2.gz", 0, 1); } static int auth_cb(void *userdata, const char *realm, int tries, char *un, char *pw) { strcpy(un, "foo"); strcpy(pw, "bar"); return tries; } static int retry_compress_helper(ne_accept_response acceptor, struct string *resp, struct string *expect) { ne_session *sess; ne_request *req; ne_decompress *dc; CALL(make_session(&sess, serve_sstring, resp)); ne_set_server_auth(sess, auth_cb, NULL); req = ne_request_create(sess, "GET", "/"); dc = ne_decompress_reader(req, acceptor, reader, expect); failed = f_partial; ONREQ(ne_request_dispatch(req)); ONV(ne_decompress_destroy(dc), ("decompress failed: %s", ne_get_error(sess))); ONN("got bad response body", failed != f_complete); CALL(await_server()); ne_request_destroy(req); ne_session_destroy(sess); return OK; } static char retry_gz_resp[] = "HTTP/1.1 401 Get Away\r\n" "Content-Encoding: gzip\r\n" "WWW-Authenticate: Basic realm=WallyWorld\r\n" "Content-Length: 5\r\n" "\r\n" "abcde" "HTTP/1.1 200 OK\r\n" "Server: foo\r\n" "Content-Length: 5\r\n" "Connection: close\r\n" "\r\n" "hello"; /* Test where the response to the retried request does *not* have * a content-encoding, whereas the original 401 response did. */ static int retry_notcompress(void) { struct string response = { retry_gz_resp, strlen(retry_gz_resp) }; struct string expect = { "hello", 5 }; return retry_compress_helper(ne_accept_2xx, &response, &expect); } static unsigned char retry_gz_resp2[] = "HTTP/1.1 401 Get Away\r\n" "Content-Encoding: gzip\r\n" "WWW-Authenticate: Basic realm=WallyWorld\r\n" "Content-Length: 25\r\n" "\r\n" "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\x03\xcb\x48\xcd\xc9\xc9\x07" "\x00\x86\xa6\x10\x36\x05\x00\x00\x00" "HTTP/1.1 200 OK\r\n" "Server: foo\r\n" "Content-Encoding: gzip\r\n" "Content-Length: 25\r\n" "Connection: close\r\n" "\r\n" "\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\x03\x2b\xcf\x2f\xca\x49\x01" "\x00\x43\x11\x77\x3a\x05\x00\x00\x00"; static int retry_accept(void *ud, ne_request *req, const ne_status *st) { struct string *expect = ud; NE_DEBUG(NE_DBG_HTTP, "retry_accept callback for %d response\n", st->code); if (expect->len == 4 && strcmp(expect->data, "fish") == 0) { /* first time through */ expect->data = "hello"; } else { expect->data = "world"; } expect->len = 5; return 1; } /* Test where the response to the retried request *does* have a * content-encoding, as did the original 401 response. */ static int retry_compress(void) { struct string resp = { retry_gz_resp2, sizeof(retry_gz_resp2) - 1 }; struct string expect = { "fish", 4 }; return retry_compress_helper(retry_accept, &resp, &expect); } ne_test tests[] = { T_LEAKY(init), T(not_compressed), T(simple), T(withname), T(fail_trailing), T(fail_bad_csum), T(fail_truncate), T(fail_corrupt1), T(fail_corrupt2), T(chunked_1b), T(chunked_1b_wn), T(chunked_12b), T(chunked_20b), T(chunked_10b), T(chunked_10b_wn), T(retry_notcompress), T(retry_compress), T(NULL) }; tla-1.3.5+dfsg/src/libneon/test/auth.c0000644000175000017500000001675210457621776016270 0ustar useruser/* Authentication tests Copyright (C) 2001-2003, Joe Orton This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #include "config.h" #include #ifdef HAVE_STDLIB_H #include #endif #ifdef HAVE_UNISTD_H #include #endif #include "ne_request.h" #include "ne_auth.h" #include "ne_basic.h" #include "tests.h" #include "child.h" #include "utils.h" static const char username[] = "Aladdin", password[] = "open sesame"; static int auth_failed; static const char www_wally[] = "WWW-Authenticate: Basic realm=WallyWorld"; static int auth_cb(void *userdata, const char *realm, int tries, char *un, char *pw) { strcpy(un, username); strcpy(pw, password); return tries; } static void auth_hdr(char *value) { #define B "Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==" auth_failed = strcmp(value, B); NE_DEBUG(NE_DBG_HTTP, "Got auth header: [%s]\nWanted header: [%s]\n" "Result: %d\n", value, B, auth_failed); #undef B } /* Sends a response with given response-code. If hdr is not NULL, * sends that header string too (appending an EOL). If eoc is * non-zero, request must be last sent down a connection; otherwise, * clength 0 is sent to maintain a persistent connection. */ static int send_response(ne_socket *sock, const char *hdr, int code, int eoc) { char buffer[BUFSIZ]; sprintf(buffer, "HTTP/1.1 %d Blah Blah" EOL, code); if (hdr) { strcat(buffer, hdr); strcat(buffer, EOL); } if (eoc) { strcat(buffer, "Connection: close" EOL EOL); } else { strcat(buffer, "Content-Length: 0" EOL EOL); } return SEND_STRING(sock, buffer); } /* Server function which sends two responses: first requires auth, * second doesn't. */ static int auth_serve(ne_socket *sock, void *userdata) { auth_failed = 1; /* Register globals for discard_request. */ got_header = auth_hdr; want_header = "Authorization"; discard_request(sock); send_response(sock, www_wally, 401, 0); discard_request(sock); send_response(sock, NULL, auth_failed?500:200, 1); return 0; } static int basic(void) { ne_session *sess; CALL(make_session(&sess, auth_serve, NULL)); ne_set_server_auth(sess, auth_cb, NULL); CALL(any_2xx_request(sess, "/norman")); ne_session_destroy(sess); CALL(await_server()); return OK; } static int retry_serve(ne_socket *sock, void *ud) { discard_request(sock); send_response(sock, www_wally, 401, 0); discard_request(sock); send_response(sock, www_wally, 401, 0); discard_request(sock); send_response(sock, NULL, 200, 0); discard_request(sock); send_response(sock, www_wally, 401, 0); discard_request(sock); send_response(sock, NULL, 200, 0); discard_request(sock); send_response(sock, NULL, 200, 0); discard_request(sock); send_response(sock, NULL, 200, 0); discard_request(sock); send_response(sock, www_wally, 401, 0); discard_request(sock); send_response(sock, NULL, 200, 0); discard_request(sock); send_response(sock, www_wally, 401, 0); discard_request(sock); send_response(sock, www_wally, 401, 0); discard_request(sock); send_response(sock, www_wally, 401, 0); discard_request(sock); send_response(sock, NULL, 200, 0); return OK; } static int retry_cb(void *userdata, const char *realm, int tries, char *un, char *pw) { int *count = userdata; /* dummy creds; server ignores them anyway. */ strcpy(un, "a"); strcpy(pw, "b"); switch (*count) { case 0: case 1: if (tries == *count) { *count += 1; return 0; } else { t_context("On request #%d, got attempt #%d", *count, tries); *count = -1; return 1; } break; case 2: case 3: /* server fails a subsequent request, check that tries has * reset to zero. */ if (tries == 0) { *count += 1; return 0; } else { t_context("On retry after failure #%d, tries was %d", *count, tries); *count = -1; return 1; } break; case 4: case 5: if (tries > 1) { t_context("Attempt counter reached #%d", tries); *count = -1; return 1; } return tries; default: t_context("Count reached %d!?", *count); *count = -1; } return 1; } /* Test that auth retries are working correctly. */ static int retries(void) { ne_session *sess; int count = 0; CALL(make_session(&sess, retry_serve, NULL)); ne_set_server_auth(sess, retry_cb, &count); /* This request will be 401'ed twice, then succeed. */ ONREQ(any_request(sess, "/foo")); /* auth_cb will have set up context. */ CALL(count != 2); /* this request will be 401'ed once, then succeed. */ ONREQ(any_request(sess, "/foo")); /* auth_cb will have set up context. */ CALL(count != 3); /* some 20x requests. */ ONREQ(any_request(sess, "/foo")); ONREQ(any_request(sess, "/foo")); /* this request will be 401'ed once, then succeed. */ ONREQ(any_request(sess, "/foo")); /* auth_cb will have set up context. */ CALL(count != 4); /* First request is 401'ed by the server at both attempts. */ ONV(any_request(sess, "/foo") != NE_AUTH, ("auth succeeded, should have failed: %s", ne_get_error(sess))); count++; /* Second request is 401'ed first time, then will succeed if * retried. 0.18.0 didn't reset the attempt counter though so * this didn't work. */ ONV(any_request(sess, "/foo") == NE_AUTH, ("auth failed on second try, should have succeeded: %s", ne_get_error(sess))); ne_session_destroy(sess); CALL(await_server()); return OK; } /* crashes with neon <0.22 */ static int forget_regress(void) { ne_session *sess = ne_session_create("http", "localhost", 7777); ne_forget_auth(sess); ne_session_destroy(sess); return OK; } static int fail_auth_cb(void *ud, const char *realm, int attempt, char *un, char *pw) { return 1; } /* this may trigger a segfault in neon 0.21.x and earlier. */ static int tunnel_regress(void) { ne_session *sess = ne_session_create("https", "localhost", 443); ne_session_proxy(sess, "localhost", 7777); ne_set_server_auth(sess, fail_auth_cb, NULL); CALL(spawn_server(7777, single_serve_string, "HTTP/1.1 401 Auth failed.\r\n" "WWW-Authenticate: Basic realm=asda\r\n" "Content-Length: 0\r\n\r\n")); any_request(sess, "/foo"); ne_session_destroy(sess); CALL(await_server()); return OK; } /* test digest auth 2068-style. */ /* test digest auth 2617-style. */ /* negotiation: within a single header, multiple headers. * check digest has precedence */ /* test auth-int, auth-int FAILURE. chunk trailers/non-trailer */ /* test logout */ /* proxy auth, proxy AND origin */ ne_test tests[] = { T(lookup_localhost), T(basic), T(retries), T(forget_regress), T(tunnel_regress), T(NULL) }; tla-1.3.5+dfsg/src/libneon/test/lock.c0000644000175000017500000003512510457621776016252 0ustar useruser/* lock tests Copyright (C) 2002-2003, Joe Orton This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #include "config.h" #include #ifdef HAVE_STDLIB_H #include #endif #ifdef HAVE_UNISTD_H #include #endif #include "ne_request.h" #include "ne_locks.h" #include "ne_socket.h" #include "ne_basic.h" #include "tests.h" #include "child.h" #include "utils.h" /* returns an activelock XML element. */ static char *activelock(enum ne_lock_scope scope, int depth, const char *owner, long timeout, const char *token_href) { static char buf[BUFSIZ]; ne_snprintf(buf, BUFSIZ, "\n" "\n" "\n" "%d\n" "%s\n" "Second-%ld\n" "%s\n" "", scope==ne_lockscope_exclusive?"exclusive":"shared", depth, owner, timeout, token_href); return buf; } /* return body of LOCK response for given lock. */ static char *lock_response(enum ne_lock_scope scope, int depth, const char *owner, long timeout, const char *token_href) { static char buf[BUFSIZ]; sprintf(buf, "\n" "" "%s\n", activelock(scope, depth, owner, timeout, token_href)); return buf; } /* return body of LOCK response where response gives multiple * activelocks (i.e. shared locks). */ static char *multi_lock_response(struct ne_lock **locks) { ne_buffer *buf = ne_buffer_create(); int n; ne_buffer_zappend(buf, "\n" "" ""); for (n = 0; locks[n] != NULL; n++) { char *lk = activelock(locks[n]->scope, locks[n]->depth, locks[n]->owner, locks[n]->timeout, locks[n]->token); ne_buffer_zappend(buf, lk); } ne_buffer_zappend(buf, ""); return ne_buffer_finish(buf); } static char *discover_response(const char *href, const struct ne_lock *lk) { static char buf[BUFSIZ]; ne_snprintf(buf, BUFSIZ, "\n" "\n" "%s\n" "%s\n" "HTTP/1.1 200 OK\n" "\n", href, activelock(lk->scope, lk->depth, lk->owner, 7200, lk->token)); return buf; } static struct ne_lock *make_lock(const char *path, const char *token, enum ne_lock_scope scope, int depth) { struct ne_lock *lock = ne_calloc(sizeof *lock); lock->token = ne_strdup(token); lock->scope = scope; lock->depth = depth; lock->uri.host = ne_strdup("localhost"); lock->uri.scheme = ne_strdup("http"); lock->uri.path = ne_strdup(path); lock->uri.port = 7777; return lock; } /* Tests for lock store handling. */ static int store_single(void) { ne_lock_store *store = ne_lockstore_create(); struct ne_lock *lk = make_lock("/foo", "blah", ne_lockscope_exclusive, 0); struct ne_lock *lk2; ONN("create failed", store == NULL); ONN("new lock store not empty", ne_lockstore_first(store) != NULL); ne_lockstore_add(store, lk); ONN("lock not found in store", ne_lockstore_first(store) != lk); ONN(">1 locks in store?", ne_lockstore_next(store) != NULL); lk2 = ne_lockstore_findbyuri(store, &lk->uri); ONN("lock not found by URI", lk2 == NULL); ONN("other lock found by URI", lk2 != lk); ne_lockstore_remove(store, lk); ONN("store not empty after removing lock", ne_lockstore_first(store) != NULL); ONN("lock still found after removing lock", ne_lockstore_findbyuri(store, &lk->uri) != NULL); ne_lockstore_destroy(store); ne_lock_destroy(lk); return OK; } static int store_several(void) { ne_lock_store *store = ne_lockstore_create(); struct ne_lock *lk = make_lock("/foo", "blah", ne_lockscope_exclusive, 0); struct ne_lock *lk2 = make_lock("/bar", "blee", ne_lockscope_exclusive, 0); struct ne_lock *lf, *lf2; ONN("create failed", store == NULL); ne_lockstore_add(store, lk); ne_lockstore_add(store, lk2); lf = ne_lockstore_first(store); ONN("lock store empty", lf == NULL); lf2 = ne_lockstore_next(store); ONN("lock store >2 locks", ne_lockstore_next(store) != NULL); /* guarantee that _first, _next returned either of the * combinations: (lf, lf2) or (lf2, lf) */ ONN("found wrong locks", ((lf != lk && lf != lk2) || (lf2 != lk && lf2 != lk2) || (lf == lf2))); ONN("first find failed", ne_lockstore_findbyuri(store, &lk->uri) != lk); ONN("second find failed", ne_lockstore_findbyuri(store, &lk2->uri) != lk2); ne_lockstore_remove(store, lk); ne_lock_destroy(lk); ONN("remove left stray lock?", ne_lockstore_first(store) != lk2); ONN("remove left >1 lock?", ne_lockstore_next(store) != NULL); ne_lockstore_remove(store, lk2); ne_lock_destroy(lk2); ONN("store not empty after removing all locks", ne_lockstore_first(store) != NULL); ne_lockstore_destroy(store); return OK; } /* regression test for <= 0.18.2, where timeout field was not parsed correctly. */ static int lock_timeout(void) { ne_session *sess; char *resp, *rbody = lock_response(ne_lockscope_exclusive, 0, "me", 6500, "opaquelocktoken:foo"); struct ne_lock *lock = ne_lock_create(); resp = ne_concat("HTTP/1.1 200 OK\r\n" "Server: neon-test-server\r\n" "Lock-Token: " EOL "Connection: close\r\n\r\n", rbody, NULL); CALL(make_session(&sess, single_serve_string, resp)); ne_free(resp); ne_fill_server_uri(sess, &lock->uri); lock->uri.path = ne_strdup("/foo"); lock->timeout = 5; ONREQ(ne_lock(sess, lock)); ONN("lock timeout ignored in response", lock->timeout != 6500); ne_session_destroy(sess); ne_lock_destroy(lock); CALL(await_server()); return OK; } static int verify_if; static const char *verify_if_expect; static void got_if_header(char *value) { verify_if = !strcmp(verify_if_expect, value); NE_DEBUG(NE_DBG_HTTP, "Verified If header, %d: got [%s] expected [%s]\n", verify_if, value, verify_if_expect); } /* Server callback which checks that an If: header is recevied. */ static int serve_verify_if(ne_socket *sock, void *userdata) { /* tell us about If headers in the request. */ want_header = "If"; got_header = got_if_header; verify_if_expect = userdata; verify_if = 0; CALL(discard_request(sock)); if (verify_if) { ON(SEND_STRING(sock, "HTTP/1.1 200 OK" EOL)); } else { ON(SEND_STRING(sock, "HTTP/1.1 403 Wrong If Header" EOL)); } ON(SEND_STRING(sock, "Connection: close" EOL EOL)); return OK; } /* Make a request which will require a lock. */ static int do_request(ne_session *sess, const char *path, int depth, int modparent) { ne_request *req = ne_request_create(sess, "RANDOM", path); if (depth > 0) { ne_add_depth_header(req, depth); } if (depth != -1) ne_lock_using_resource(req, path, depth); if (modparent) ne_lock_using_parent(req, path); ONREQ(ne_request_dispatch(req)); ONV(ne_get_status(req)->code != 200, ("request failed: %s", ne_get_error(sess))); ne_request_destroy(req); return OK; } /* Tests If: header submission, for a lock of depth 'lockdepth' at * 'lockpath', with a request to 'reqpath' which Depth header of * 'reqdepth'. If modparent is non-zero; the request is flagged to * modify the parent resource too. */ static int submit_test(const char *lockpath, int lockdepth, const char *reqpath, int reqdepth, int modparent) { ne_lock_store *store = ne_lockstore_create(); ne_session *sess; struct ne_lock *lk = ne_lock_create(); char *expect_if; int ret; expect_if = ne_concat(" ()", NULL); CALL(make_session(&sess, serve_verify_if, expect_if)); ne_free(expect_if); ne_fill_server_uri(sess, &lk->uri); lk->uri.path = ne_strdup(lockpath); lk->token = ne_strdup("somelocktoken"); lk->depth = lockdepth; /* register the lock store, and add our lock for "/foo" to it. */ ne_lockstore_register(store, sess); ne_lockstore_add(store, lk); ret = do_request(sess, reqpath, reqdepth, modparent); CALL(await_server()); ne_lockstore_destroy(store); ne_session_destroy(sess); return ret; } static int if_simple(void) { return submit_test("/foo", 0, "/foo", 0, 0); } static int if_under_infinite(void) { return submit_test("/foo", NE_DEPTH_INFINITE, "/foo/bar", 0, 0); } static int if_infinite_over(void) { return submit_test("/foo/bar", 0, "/foo/", NE_DEPTH_INFINITE, 0); } static int if_child(void) { return submit_test("/foo/", 0, "/foo/bar", 0, 1); } /* this is a special test, where the PARENT resource of "/foo/bar" is * modified, but NOT "/foo/bar" itself. An UNLOCK request on a * lock-null resource can do this; see ne_unlock() for the comment. * Regression test for neon <= 0.19.3, which didn't handle this * correctly. */ static int if_covered_child(void) { return submit_test("/", NE_DEPTH_INFINITE, "/foo/bar", -1, 1); } static int serve_discovery(ne_socket *sock, void *userdata) { char buf[BUFSIZ], *resp = userdata; ON(discard_request(sock)); ONN("no PROPFIND body", clength == 0); ON(ne_sock_read(sock, buf, clength) < 0); ON(SEND_STRING(sock, "HTTP/1.0 207 OK" EOL "Connection: close" EOL EOL)); ON(SEND_STRING(sock, resp)); return OK; } struct result_args { struct ne_lock *lock; int result; }; static int lock_compare(const char *ctx, const struct ne_lock *a, const struct ne_lock *b) { ONV(!a->uri.host || !a->uri.scheme || !a->uri.path, ("URI structure incomplete in %s", ctx)); ONV(ne_uri_cmp(&a->uri, &b->uri) != 0, ("URI comparison failed for %s: %s not %s", ctx, ne_uri_unparse(&a->uri), ne_uri_unparse(&b->uri))); ONV(a->depth != b->depth, ("%s depth was %d not %d", ctx, a->depth, b->depth)); ONV(a->scope != b->scope, ("%s scope was %d not %d", ctx, a->scope, b->scope)); ONV(a->type != b->type, ("%s type was %d not %d", ctx, a->type, b->type)); return OK; } static void discover_result(void *userdata, const struct ne_lock *lk, const char *path, const ne_status *st) { struct result_args *args = userdata; args->result = lock_compare("discovered lock", lk, args->lock); } static int discover(void) { ne_session *sess = ne_session_create("http", "localhost", 7777); char *response; int ret; struct result_args args; args.lock = ne_lock_create(); args.lock->owner = ne_strdup("someowner"); args.lock->token = ne_strdup("sometoken"); /* default */ args.result = FAIL; t_context("results callback never invoked"); ne_fill_server_uri(sess, &args.lock->uri); args.lock->uri.path = ne_strdup("/lockme"); response = discover_response("/lockme", args.lock); CALL(spawn_server(7777, serve_discovery, response)); ret = ne_lock_discover(sess, "/lockme", discover_result, &args); CALL(await_server()); ONREQ(ret); ne_lock_destroy(args.lock); ne_session_destroy(sess); return args.result; } /* Check that the token for the response header */ static int lock_shared(void) { ne_session *sess; char *resp, *rbody; struct ne_lock *lock, *resplocks[3]; #define FILLK(l, s) do { \ (l)->token = strdup("opaquelocktoken:" s); \ (l)->owner = strdup("owner " s); \ (l)->uri.path = strdup("/" s); (l)->uri.host = strdup("localhost"); \ (l)->uri.scheme = strdup("http"); (l)->uri.port = 7777; } while (0) resplocks[0] = ne_lock_create(); resplocks[1] = ne_lock_create(); resplocks[2] = NULL; FILLK(resplocks[0], "alpha"); FILLK(resplocks[1], "beta"); resplocks[0]->timeout = 100; resplocks[1]->timeout = 200; rbody = multi_lock_response(resplocks); resp = ne_concat("HTTP/1.1 200 OK\r\n" "Server: neon-test-server\r\n" "Lock-Token: " EOL "Connection: close\r\n\r\n", rbody, NULL); ne_free(rbody); CALL(make_session(&sess, single_serve_string, resp)); ne_free(resp); lock = ne_lock_create(); ne_fill_server_uri(sess, &lock->uri); lock->uri.path = ne_strdup("/beta"); ONREQ(ne_lock(sess, lock)); CALL(await_server()); CALL(lock_compare("returned lock", resplocks[1], lock)); ne_session_destroy(sess); ne_lock_destroy(lock); ne_lock_destroy(resplocks[0]); ne_lock_destroy(resplocks[1]); return OK; } static void dummy_discover(void *userdata, const struct ne_lock *lock, const char *uri, const ne_status *status) { } /* This failed with neon 0.23.x and earlier when memory leak detection * is enabled. */ static int fail_discover(void) { ne_session *sess; int ret; CALL(make_session(&sess, single_serve_string, "HTTP/1.0 207 OK\r\n" "Connection: close\r\n" "\r\n" "\n" "\n" "/foo/bar\n" "\n")); ret = ne_lock_discover(sess, "/foo", dummy_discover, NULL); CALL(await_server()); ONN("discovery okay for response with invalid XML!?", ret != NE_ERROR); ne_session_destroy(sess); return OK; } ne_test tests[] = { T(lookup_localhost), T(store_single), T(store_several), T(if_simple), T(if_under_infinite), T(if_infinite_over), T(if_child), T(if_covered_child), T(lock_timeout), T(lock_shared), T(discover), T_XLEAKY(fail_discover), T(NULL) }; tla-1.3.5+dfsg/src/libneon/test/ssl.c0000644000175000017500000012526610457621776016131 0ustar useruser/* neon test suite Copyright (C) 2002-2004, Joe Orton This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #include "config.h" #include #include #ifdef HAVE_STDLIB_H #include #endif #ifdef HAVE_UNISTD_H #include #endif #include "ne_request.h" #include "ne_socket.h" #include "ne_auth.h" #include "tests.h" #include "child.h" #include "utils.h" #ifndef NEON_SSL /* this file shouldn't be built if SSL is not enabled. */ #error SSL not supported #endif #include #include #include #define ERROR_SSL_STRING (ERR_reason_error_string(ERR_get_error())) #define SERVER_CERT "server.cert" #define CA_CERT "ca/cert.pem" #define SERVER_DNAME "Neon QA Dept, Neon Hackers Ltd, " \ "Cambridge, Cambridgeshire, GB" #define CACERT_DNAME "Random Dept, Neosign, Oakland, California, US" static char *srcdir = "."; static char *server_key = NULL; static ne_ssl_certificate *def_ca_cert = NULL, *def_server_cert; static ne_ssl_client_cert *def_cli_cert; static int check_dname(const ne_ssl_dname *dn, const char *expected, const char *which); static int s_strwrite(SSL *s, const char *buf) { size_t len = strlen(buf); ONV(SSL_write(s, buf, len) != (int)len, ("SSL_write failed: %s", ERROR_SSL_STRING)); return OK; } /* Arguments for running the SSL server */ struct ssl_server_args { char *cert; /* the server cert to present. */ const char *response; /* the response to send. */ int unclean; /* use an unclean shutdown if non-NULL */ int numreqs; /* number of request/responses to handle over the SSL connection. */ /* client cert handling: */ int require_cc; /* require a client cert if non-NULL */ const char *ca_list; /* file of CA certs to verify client cert against */ const char *send_ca; /* file of CA certs to send in client cert request */ /* session caching: */ int cache; /* use the session cache if non-zero */ SSL_SESSION *session; /* use to store copy of cached session. */ int count; /* internal use. */ int use_ssl2; /* force use of SSLv2 only */ }; /* default response string if args->response is NULL */ #define DEF_RESP "HTTP/1.0 200 OK\r\nContent-Length: 0\r\n\r\n" /* An SSL server inna bun. */ static int ssl_server(ne_socket *sock, void *userdata) { struct ssl_server_args *args = userdata; int fd = ne_sock_fd(sock), ret; /* we don't want OpenSSL to close this socket for us. */ BIO *bio = BIO_new_socket(fd, BIO_NOCLOSE); char buf[BUFSIZ]; SSL *ssl; static SSL_CTX *ctx = NULL; if (ctx == NULL) { ctx = SSL_CTX_new(args->use_ssl2 ? SSLv2_server_method() : SSLv23_server_method()); } ONV(ctx == NULL, ("could not create SSL_CTX: %s", ERROR_SSL_STRING)); ONV(!SSL_CTX_use_PrivateKey_file(ctx, server_key, SSL_FILETYPE_PEM), ("failed to load private key: %s", ERROR_SSL_STRING)); NE_DEBUG(NE_DBG_HTTP, "using server cert %s\n", args->cert); ONN("failed to load certificate", !SSL_CTX_use_certificate_file(ctx, args->cert, SSL_FILETYPE_PEM)); if (args->require_cc) { /* require a client cert. */ SSL_CTX_set_verify(ctx, SSL_VERIFY_PEER | SSL_VERIFY_FAIL_IF_NO_PEER_CERT, NULL); if (args->send_ca) { /* the list of issuer DNs of these CAs is included in the * certificate request message sent to the client */ SSL_CTX_set_client_CA_list(ctx, SSL_load_client_CA_file(args->send_ca)); } /* set default ca_list */ if (!args->ca_list) args->ca_list = CA_CERT; } if (args->ca_list) { /* load the CA used to verify the client cert; also sent in the * certificate exchange message. */ ONN("failed to load CA cert", SSL_CTX_load_verify_locations(ctx, args->ca_list, NULL) != 1); } if (args->cache && args->count == 0) { /* enable OpenSSL's internal session cache, enabling the * negotiation to re-use a session if both sides support it. */ SSL_CTX_set_session_cache_mode(ctx, SSL_SESS_CACHE_SERVER); } ssl = SSL_new(ctx); ONN("SSL_new failed", ssl == NULL); args->count++; SSL_set_bio(ssl, bio, bio); ONV(SSL_accept(ssl) != 1, ("SSL_accept failed: %s", ERROR_SSL_STRING)); /* loop handling requests: */ do { const char *response = args->response ? args->response : DEF_RESP; ret = SSL_read(ssl, buf, BUFSIZ - 1); if (ret == 0) return 0; /* connection closed by parent; give up. */ ONV(ret < 0, ("SSL_read failed (%d): %s", ret, ERROR_SSL_STRING)); buf[ret] = '\0'; NE_DEBUG(NE_DBG_HTTP, "Request over SSL was: [%s]\n", buf); if (strstr(buf, "Proxy-Authorization:") != NULL) { NE_DEBUG(NE_DBG_HTTP, "Got Proxy-Auth header over SSL!\n"); response = "HTTP/1.1 500 Client Leaks Credentials\r\n" "Content-Length: 0\r\n" "\r\n"; } CALL(s_strwrite(ssl, response)); } while (--args->numreqs > 0); /* copy out the session if requested. */ if (args->session) { SSL_SESSION *sess = SSL_get1_session(ssl); #ifdef NE_DEBUGGING /* dump session to child.log for debugging. */ SSL_SESSION_print_fp(ne_debug_stream, sess); #endif if (args->count == 0) { /* save the session */ args->session = sess; } else { /* could just to do this with SSL_CTX_sess_hits really, * but this is a more thorough test. */ ONN("cached SSL session not used", SSL_SESSION_cmp(args->session, sess)); SSL_SESSION_free(args->session); SSL_SESSION_free(sess); } } if (!args->unclean) { /* Erk, shutdown is messy! See Eric Rescorla's article: * http://www.linuxjournal.com/article.php?sid=4822 ; we'll just * hide our heads in the sand here. */ SSL_shutdown(ssl); SSL_free(ssl); } return 0; } /* serve_ssl wrapper which ignores server failure and always succeeds */ static int fail_serve(ne_socket *sock, void *ud) { struct ssl_server_args args = {0}; args.cert = ud; ssl_server(sock, &args); return OK; } #define DEFSESS (ne_session_create("https", "localhost", 7777)) /* Run a request in the given session. */ static int any_ssl_request(ne_session *sess, server_fn fn, void *server_ud, char *ca_cert, ne_ssl_verify_fn verify_fn, void *verify_ud) { int ret; if (ca_cert) { ne_ssl_certificate *ca = ne_ssl_cert_read(ca_cert); ONV(ca == NULL, ("could not load CA cert `%s'", ca_cert)); ne_ssl_trust_cert(sess, ca); ne_ssl_cert_free(ca); } CALL(spawn_server(7777, fn, server_ud)); if (verify_fn) ne_ssl_set_verify(sess, verify_fn, verify_ud); ret = any_request(sess, "/foo"); CALL(await_server()); ONREQ(ret); return OK; } static int init(void) { /* take srcdir as argv[1]. */ if (test_argc > 1) { srcdir = test_argv[1]; server_key = ne_concat(srcdir, "/server.key", NULL); } else { server_key = "server.key"; } if (ne_sock_init()) { t_context("could not initialize socket/SSL library."); return FAILHARD; } def_ca_cert = ne_ssl_cert_read(CA_CERT); if (def_ca_cert == NULL) { t_context("couldn't load CA cert %s", CA_CERT); return FAILHARD; } def_server_cert = ne_ssl_cert_read(SERVER_CERT); if (def_server_cert == NULL) { t_context("couldn't load server cert %s", SERVER_CERT); return FAILHARD; } /* tests for the encrypted client cert, client.p12 */ def_cli_cert = ne_ssl_clicert_read("client.p12"); ONN("could not load client.p12", def_cli_cert == NULL); ONN("client.p12 is not encrypted!?", !ne_ssl_clicert_encrypted(def_cli_cert)); ONN("failed to decrypt client.p12", ne_ssl_clicert_decrypt(def_cli_cert, "foobar")); return OK; } /* just check the result codes of loading server certs. */ static int load_server_certs(void) { ne_ssl_certificate *cert; cert = ne_ssl_cert_read("Makefile"); ONN("invalid CA cert file loaded successfully", cert != NULL); cert = ne_ssl_cert_read("nonesuch.pem"); ONN("non-existent 'nonesuch.pem' loaded successfully", cert != NULL); cert = ne_ssl_cert_read("ssigned.pem"); ONN("could not load ssigned.pem", cert == NULL); ne_ssl_cert_free(cert); return OK; } static int trust_default_ca(void) { ne_session *sess = DEFSESS; ne_ssl_trust_default_ca(sess); ne_session_destroy(sess); return OK; } #define CC_NAME "Just A Neon Client Cert" /* Tests for loading client certificates */ static int load_client_cert(void) { ne_ssl_client_cert *cc; const ne_ssl_certificate *cert; const char *name; cc = ne_ssl_clicert_read("client.p12"); ONN("could not load client.p12", cc == NULL); ONN("client.p12 not encrypted!?", !ne_ssl_clicert_encrypted(cc)); name = ne_ssl_clicert_name(cc); ONN("no friendly name given", name == NULL); ONV(strcmp(name, CC_NAME), ("friendly name was %s not %s", name, CC_NAME)); ONN("failed to decrypt", ne_ssl_clicert_decrypt(cc, "foobar")); ne_ssl_clicert_free(cc); cc = ne_ssl_clicert_read("client.p12"); ONN("decrypted client.p12 with incorrect password!?", ne_ssl_clicert_decrypt(cc, "barfoo") == 0); ne_ssl_clicert_free(cc); /* tests for the unencrypted client cert, client2.p12 */ cc = ne_ssl_clicert_read("unclient.p12"); ONN("could not load unencrypted cert unclient.p12", cc == NULL); ONN("unencrypted cert marked encrypted?", ne_ssl_clicert_encrypted(cc)); cert = ne_ssl_clicert_owner(cc); ONN("client cert had no certificate", cert == NULL); CALL(check_dname(ne_ssl_cert_subject(cert), "Neon Client Cert, Neon Hackers Ltd, " "Cambridge, Cambridgeshire, GB", "client cert subject")); CALL(check_dname(ne_ssl_cert_issuer(cert), CACERT_DNAME, "client cert issuer")); ne_ssl_clicert_free(cc); /* test for ccert without a friendly name, noclient.p12 */ cc = ne_ssl_clicert_read("noclient.p12"); ONN("could not load noclient.p12", cc == NULL); name = ne_ssl_clicert_name(cc); ONV(name != NULL, ("noclient.p12 had friendly name `%s'", name)); ne_ssl_clicert_free(cc); /* tests for loading bogus files. */ cc = ne_ssl_clicert_read("Makefile"); ONN("loaded Makefile as client cert!?", cc != NULL); /* test for loading nonexistent file. */ cc = ne_ssl_clicert_read("nosuch.pem"); ONN("loaded nonexistent file as client cert!?", cc != NULL); return OK; } /* Test that 'cert', which is signed by CA_CERT, is accepted * unconditionaly. */ static int accept_signed_cert_for_hostname(char *cert, const char *hostname) { ne_session *sess = ne_session_create("https", hostname, 7777); struct ssl_server_args args = {cert, 0}; /* no verify callback needed. */ CALL(any_ssl_request(sess, ssl_server, &args, CA_CERT, NULL, NULL)); ne_session_destroy(sess); return OK; } static int accept_signed_cert(char *cert) { return accept_signed_cert_for_hostname(cert, "localhost"); } static int simple(void) { return accept_signed_cert(SERVER_CERT); } /* Test for SSL operation when server uses SSLv2 */ static int simple_sslv2(void) { ne_session *sess = ne_session_create("https", "localhost", 7777); struct ssl_server_args args = {SERVER_CERT, 0}; args.use_ssl2 = 1; CALL(any_ssl_request(sess, ssl_server, &args, CA_CERT, NULL, NULL)); ne_session_destroy(sess); return OK; } /* Serves using HTTP/1.0 get-till-EOF semantics. */ static int serve_eof(ne_socket *sock, void *ud) { struct ssl_server_args args = {0}; args.cert = ud; args.response = "HTTP/1.0 200 OK\r\n" "Connection: close\r\n" "\r\n" "This is a response body, like it or not."; return ssl_server(sock, &args); } /* Test read-til-EOF behaviour with SSL. */ static int simple_eof(void) { ne_session *sess = DEFSESS; CALL(any_ssl_request(sess, serve_eof, SERVER_CERT, CA_CERT, NULL, NULL)); ne_session_destroy(sess); return OK; } static int empty_truncated_eof(void) { ne_session *sess = DEFSESS; struct ssl_server_args args = {0}; args.cert = SERVER_CERT; args.response = "HTTP/1.0 200 OK\r\n" "\r\n"; CALL(any_ssl_request(sess, ssl_server, &args, CA_CERT, NULL, NULL)); ne_session_destroy(sess); return OK; } /* Server function which just sends a string then EOF. */ static int just_serve_string(ne_socket *sock, void *userdata) { const char *str = userdata; server_send(sock, str, strlen(str)); return 0; } /* test for the SSL negotiation failing. */ static int fail_not_ssl(void) { ne_session *sess = DEFSESS; int ret; CALL(spawn_server(7777, just_serve_string, "Hello, world.\n")); ret = any_request(sess, "/bar"); CALL(await_server()); ONN("request did not fail", ret != NE_ERROR); ne_session_destroy(sess); return OK; } static int wildcard_ok = 0; static int wildcard_init(void) { struct stat stbuf; t_context("wildcard.cert not found:\n" "This test requires a Linux-like hostname command, see makekeys.sh"); PRECOND(stat("wildcard.cert", &stbuf) == 0); PRECOND(lookup_hostname() == OK); wildcard_ok = 1; return OK; } static int wildcard_match(void) { ne_session *sess; struct ssl_server_args args = {"wildcard.cert", 0}; PRECOND(wildcard_ok); sess = ne_session_create("https", local_hostname, 7777); CALL(any_ssl_request(sess, ssl_server, &args, CA_CERT, NULL, NULL)); ne_session_destroy(sess); return OK; } /* Check that hostname comparisons are not cases-sensitive. */ static int caseless_match(void) { return accept_signed_cert("caseless.cert"); } /* Test that the subjectAltName extension has precedence over the * commonName attribute */ static int subject_altname(void) { return accept_signed_cert("altname1.cert"); } /* tests for multiple altNames. */ static int two_subject_altname(void) { return accept_signed_cert("altname2.cert"); } static int two_subject_altname2(void) { return accept_signed_cert("altname3.cert"); } /* Test that a subject altname with *only* an eMail entry is * ignored, and the commonName is used instead. */ static int notdns_altname(void) { return accept_signed_cert("altname4.cert"); } static int ipaddr_altname(void) { return accept_signed_cert_for_hostname("altname5.cert", "127.0.0.1"); } /* test that the *most specific* commonName attribute is used. */ static int multi_commonName(void) { return accept_signed_cert("twocn.cert"); } /* regression test for neon <= 0.23.4 where if commonName was the first * RDN in the subject DN, it was ignored. */ static int commonName_first(void) { return accept_signed_cert("cnfirst.cert"); } static int check_dname(const ne_ssl_dname *dn, const char *expected, const char *which) { char *dname; ONV(dn == NULL, ("certificate %s dname was NULL", which)); dname = ne_ssl_readable_dname(dn); NE_DEBUG(NE_DBG_SSL, "Got dname `%s', expecting `%s'\n", dname, expected); ONV(strcmp(dname, expected), ("certificate %s dname was `%s' not `%s'", which, dname, expected)); ne_free(dname); return 0; } /* Check that the readable subject issuer dnames of 'cert' match * 'subject' and 'issuer' (if non-NULL). */ static int check_cert_dnames(const ne_ssl_certificate *cert, const char *subject, const char *issuer) { ONN("no server certificate presented", cert == NULL); CALL(check_dname(ne_ssl_cert_subject(cert), subject, "subject")); return issuer ? check_dname(ne_ssl_cert_issuer(cert), issuer, "issuer") : OK; } /* Verify callback which checks that the certificate presented has the * predetermined subject and issuer DN (as per makekeys.sh). */ static int check_cert(void *userdata, int fs, const ne_ssl_certificate *cert) { int *ret = userdata; if (check_cert_dnames(cert, SERVER_DNAME, CACERT_DNAME) == FAIL) *ret = -1; else *ret = 1; return 0; } /* Check that certificate attributes are passed correctly. */ static int parse_cert(void) { ne_session *sess = DEFSESS; int ret = 0; struct ssl_server_args args = {SERVER_CERT, 0}; /* don't give a CA cert; should force the verify callback to be * used. */ CALL(any_ssl_request(sess, ssl_server, &args, NULL, check_cert, &ret)); ne_session_destroy(sess); ONN("cert verification never called", ret == 0); if (ret == -1) return FAIL; return OK; } /* Check the certificate chain presented against known dnames. */ static int check_chain(void *userdata, int fs, const ne_ssl_certificate *cert) { int *ret = userdata; if (check_cert_dnames(cert, SERVER_DNAME, CACERT_DNAME) == FAIL) { *ret = -1; return 0; } cert = ne_ssl_cert_signedby(cert); if (cert == NULL) { t_context("no CA cert in chain"); *ret = -1; return 0; } if (check_cert_dnames(cert, CACERT_DNAME, CACERT_DNAME) == FAIL) { *ret = -1; return 0; } *ret = 1; return 0; } /* Check that certificate attributes are passed correctly. */ static int parse_chain(void) { ne_session *sess = DEFSESS; int ret = 0; struct ssl_server_args args = {SERVER_CERT, 0}; args.ca_list = "ca/cert.pem"; /* don't give a CA cert; should force the verify callback to be * used. */ CALL(any_ssl_request(sess, ssl_server, &args, NULL, check_chain, &ret)); ne_session_destroy(sess); ONN("cert verification never called", ret == 0); if (ret == -1) return FAIL; return OK; } static int count_vfy(void *userdata, int fs, const ne_ssl_certificate *c) { int *count = userdata; (*count)++; return 0; } static int no_verify(void) { ne_session *sess = DEFSESS; int count = 0; struct ssl_server_args args = {SERVER_CERT, 0}; CALL(any_ssl_request(sess, ssl_server, &args, CA_CERT, count_vfy, &count)); ONN("verify callback called unnecessarily", count != 0); ne_session_destroy(sess); return OK; } static int cache_verify(void) { ne_session *sess = DEFSESS; int ret, count = 0; struct ssl_server_args args = {SERVER_CERT, 0}; /* force verify cert. */ ret = any_ssl_request(sess, ssl_server, &args, NULL, count_vfy, &count); CALL(spawn_server(7777, ssl_server, &args)); ret = any_request(sess, "/foo2"); CALL(await_server()); ONV(count != 1, ("verify callback result not cached: called %d times", count)); ne_session_destroy(sess); return OK; } /* Copy failures into *userdata, and fail verification. */ static int get_failures(void *userdata, int fs, const ne_ssl_certificate *c) { int *out = userdata; *out = fs; return -1; } /* Helper function: run a request using the given self-signed server * certificate, and expect the request to fail with the given * verification failure flags. */ static int fail_ssl_request(char *cert, char *cacert, const char *msg, int failures) { ne_session *sess = DEFSESS; int gotf = 0, ret; ret = any_ssl_request(sess, fail_serve, cert, cacert, get_failures, &gotf); ONV(gotf == 0, ("no error in verification callback; request failed: %s", ne_get_error(sess))); ONV(gotf & ~NE_SSL_FAILMASK, ("verification flags %x outside mask %x", gotf, NE_SSL_FAILMASK)); /* check the failure flags were as expected. */ ONV(failures != gotf, ("verification flags were %d not %d", gotf, failures)); /* and check that the request was failed too. */ ONV(ret == NE_OK, ("%s", msg)); ne_session_destroy(sess); return OK; } /* Note that the certs used for fail_* are all self-signed, so the * cert is passed as CA cert and server cert to fail_ssl_request. */ /* Check that a certificate with the incorrect commonName attribute is * flagged as such. */ static int fail_wrongCN(void) { return fail_ssl_request("wrongcn.pem", "wrongcn.pem", "certificate with incorrect CN was accepted", NE_SSL_IDMISMATCH); } /* Check that an expired certificate is flagged as such. */ static int fail_expired(void) { char *c = ne_concat(srcdir, "/expired.pem", NULL); CALL(fail_ssl_request(c, c, "expired certificate was accepted", NE_SSL_EXPIRED)); ne_free(c); return OK; } static int fail_notvalid(void) { char *c = ne_concat(srcdir, "/notvalid.pem", NULL); CALL(fail_ssl_request(c, c, "not yet valid certificate was accepted", NE_SSL_NOTYETVALID)); ne_free(c); return OK; } /* Check that a server cert with a random issuer and self-signed cert * fail with UNTRUSTED. */ static int fail_untrusted_ca(void) { return fail_ssl_request("server.cert", NULL, "untrusted CA.", NE_SSL_UNTRUSTED); } static int fail_self_signed(void) { return fail_ssl_request("ssigned.pem", NULL, "self-signed cert", NE_SSL_UNTRUSTED); } /* Test for failure when a server cert is presented which has no * commonName (and no alt names either). */ static int fail_missing_CN(void) { ne_session *sess = DEFSESS; ONN("accepted server cert with missing commonName", any_ssl_request(sess, fail_serve, "missingcn.cert", SERVER_CERT, NULL, NULL) == NE_OK); ONV(strstr(ne_get_error(sess), "missing commonName") == NULL, ("unexpected session error `%s'", ne_get_error(sess))); ne_session_destroy(sess); return OK; } /* Test that the SSL session is cached across connections. */ static int session_cache(void) { struct ssl_server_args args = {0}; ne_session *sess = ne_session_create("https", "localhost", 7777); args.cert = SERVER_CERT; args.cache = 1; ne_ssl_trust_cert(sess, def_ca_cert); /* have spawned server listen for several connections. */ CALL(spawn_server_repeat(7777, ssl_server, &args, 4)); ONREQ(any_request(sess, "/req1")); ONREQ(any_request(sess, "/req2")); ne_session_destroy(sess); /* server should still be waiting for connections: if not, * something went wrong. */ ONN("error from child", dead_server()); /* now get rid of it. */ reap_server(); return OK; } /* Callback for client_cert_provider; takes a c. cert as userdata and * registers it. */ static void ccert_provider(void *userdata, ne_session *sess, const ne_ssl_dname *const *dns, int dncount) { const ne_ssl_client_cert *cc = userdata; ne_ssl_set_clicert(sess, cc); } /* Test that the on-demand client cert provider callback is used. */ static int client_cert_provided(void) { ne_session *sess = DEFSESS; ne_ssl_client_cert *cc; struct ssl_server_args args = {SERVER_CERT, NULL}; args.require_cc = 1; cc = ne_ssl_clicert_read("client.p12"); ONN("could not load client.p12", cc == NULL); ONN("could not decrypt client.p12", ne_ssl_clicert_decrypt(cc, "foobar")); ne_ssl_provide_clicert(sess, ccert_provider, cc); CALL(any_ssl_request(sess, ssl_server, &args, CA_CERT, NULL, NULL)); ne_session_destroy(sess); ne_ssl_clicert_free(cc); return OK; } static void cc_check_dnames(void *userdata, ne_session *sess, const ne_ssl_dname *const *dns, int dncount) { int n, *ret = userdata; static const char *expected[4] = { "First Random CA, CAs Ltd., Lincoln, Lincolnshire, GB", "Second Random CA, CAs Ltd., Falmouth, Cornwall, GB", "Third Random CA, CAs Ltd., Ipswich, Suffolk, GB", "Fourth Random CA, CAs Ltd., Norwich, Norfolk, GB" }; ne_ssl_set_clicert(sess, def_cli_cert); if (dncount != 4) { t_context("dname count was %d not 4", dncount); *ret = -1; return; } for (n = 0; n < 4; n++) { char which[5]; sprintf(which, "%d", n); if (check_dname(dns[n], expected[n], which) == FAIL) { *ret = -1; return; } } *ret = 1; } /* Test for the list of acceptable dnames sent to the client. */ static int cc_provided_dnames(void) { int check = 0; ne_session *sess = DEFSESS; struct ssl_server_args args = {SERVER_CERT, NULL}; args.require_cc = 1; args.send_ca = "calist.pem"; PRECOND(def_cli_cert); ne_ssl_provide_clicert(sess, cc_check_dnames, &check); CALL(any_ssl_request(sess, ssl_server, &args, CA_CERT, NULL, NULL)); ne_session_destroy(sess); ONN("provider function not called", check == 0); return (check == -1) ? FAIL : OK; } /* Tests use of a client certificate. */ static int client_cert_pkcs12(void) { ne_session *sess = DEFSESS; struct ssl_server_args args = {SERVER_CERT, NULL}; args.require_cc = 1; PRECOND(def_cli_cert); ne_ssl_set_clicert(sess, def_cli_cert); CALL(any_ssl_request(sess, ssl_server, &args, CA_CERT, NULL, NULL)); ne_session_destroy(sess); return OK; } /* Tests use of an unencrypted client certificate. */ static int ccert_unencrypted(void) { ne_session *sess = DEFSESS; ne_ssl_client_cert *ccert; struct ssl_server_args args = {SERVER_CERT, NULL}; args.require_cc = 1; ccert = ne_ssl_clicert_read("unclient.p12"); ONN("unclient.p12 was encrypted", ne_ssl_clicert_encrypted(ccert)); ne_ssl_set_clicert(sess, ccert); CALL(any_ssl_request(sess, ssl_server, &args, CA_CERT, NULL, NULL)); ne_ssl_clicert_free(ccert); ne_session_destroy(sess); return OK; } /* non-zero if a server auth header was received */ static int got_server_auth; /* Utility function which accepts the 'tunnel' header. */ static void tunnel_header(char *value) { got_server_auth = 1; } /* Server which acts as a proxy accepting a CONNECT request. */ static int serve_tunnel(ne_socket *sock, void *ud) { struct ssl_server_args *args = ud; /* check for a server auth function */ want_header = "Authorization"; got_header = tunnel_header; got_server_auth = 0; /* give the plaintext tunnel reply, acting as the proxy */ CALL(discard_request(sock)); if (got_server_auth) { SEND_STRING(sock, "HTTP/1.1 500 Leaked Server Auth Creds\r\n" "Content-Length: 0\r\n" "Server: serve_tunnel\r\n\r\n"); return 0; } else { SEND_STRING(sock, "HTTP/1.1 200 OK\r\nServer: serve_tunnel\r\n\r\n"); return ssl_server(sock, args); } } /* neon versions <= 0.21.2 segfault here because ne_sock_close would * be called twice on the socket after the server cert verification * fails. */ static int fail_tunnel(void) { ne_session *sess = ne_session_create("https", "example.com", 443); struct ssl_server_args args = {SERVER_CERT, NULL}; ne_session_proxy(sess, "localhost", 7777); ONN("server cert verification didn't fail", any_ssl_request(sess, serve_tunnel, &args, CA_CERT, NULL, NULL) != NE_ERROR); ne_session_destroy(sess); return OK; } static int proxy_tunnel(void) { ne_session *sess = ne_session_create("https", "localhost", 443); struct ssl_server_args args = {SERVER_CERT, NULL}; ne_session_proxy(sess, "localhost", 7777); /* CA cert is trusted, so no verify callback should be needed. */ CALL(any_ssl_request(sess, serve_tunnel, &args, CA_CERT, NULL, NULL)); ne_session_destroy(sess); return OK; } #define RESP_0LENGTH "HTTP/1.1 200 OK\r\n" "Content-Length: 0\r\n" "\r\n" /* a tricky test which requires spawning a second server process in * time for a new connection after a 407. */ static int apt_post_send(ne_request *req, void *ud, const ne_status *st) { int *code = ud; if (st->code == *code) { struct ssl_server_args args = {SERVER_CERT, NULL}; if (*code == 407) args.numreqs = 2; args.response = RESP_0LENGTH; NE_DEBUG(NE_DBG_HTTP, "Got challenge, awaiting server...\n"); CALL(await_server()); NE_DEBUG(NE_DBG_HTTP, "Spawning proper tunnel server...\n"); /* serve *two* 200 OK responses. */ CALL(spawn_server(7777, serve_tunnel, &args)); NE_DEBUG(NE_DBG_HTTP, "Spawned.\n"); } return OK; } static int apt_creds(void *userdata, const char *realm, int attempt, char *username, char *password) { strcpy(username, "foo"); strcpy(password, "bar"); return attempt; } /* Test for using SSL over a CONNECT tunnel via a proxy server which * requires authentication. Broke briefly between 0.23.x and * 0.24.0. */ static int auth_proxy_tunnel(void) { ne_session *sess = ne_session_create("https", "localhost", 443); int ret, code = 407; ne_session_proxy(sess, "localhost", 7777); ne_hook_post_send(sess, apt_post_send, &code); ne_set_proxy_auth(sess, apt_creds, NULL); ne_ssl_trust_cert(sess, def_ca_cert); CALL(spawn_server(7777, single_serve_string, "HTTP/1.0 407 I WANT MORE BISCUITS\r\n" "Proxy-Authenticate: Basic realm=\"bigbluesea\"\r\n" "Connection: close\r\n" "\r\n")); /* run two requests over the tunnel. */ ret = any_2xx_request(sess, "/foobar"); if (!ret) ret = any_2xx_request(sess, "/foobar2"); CALL(await_server()); CALL(ret); ne_session_destroy(sess); return 0; } /* Regression test to check that server credentials aren't sent to the * proxy in a CONNECT request. */ static int auth_tunnel_creds(void) { ne_session *sess = ne_session_create("https", "localhost", 443); int ret, code = 401; struct ssl_server_args args = {SERVER_CERT, 0}; ne_session_proxy(sess, "localhost", 7777); ne_hook_post_send(sess, apt_post_send, &code); ne_set_server_auth(sess, apt_creds, NULL); ne_ssl_trust_cert(sess, def_ca_cert); args.response = "HTTP/1.1 401 I want a Shrubbery\r\n" "WWW-Authenticate: Basic realm=\"bigredocean\"\r\n" "Server: Python\r\n" "Content-Length: 0\r\n" "\r\n"; CALL(spawn_server(7777, serve_tunnel, &args)); ret = any_2xx_request(sess, "/foobar"); CALL(await_server()); CALL(ret); ne_session_destroy(sess); return OK; } /* compare against known digest of notvalid.pem. Via: * $ openssl x509 -fingerprint -sha1 -noout -in notvalid.pem */ #define THE_DIGEST "cf:5c:95:93:76:c6:3c:01:8b:62:" \ "b1:6f:f7:7f:42:32:ac:e6:69:1b" static int cert_fingerprint(void) { char *fn = ne_concat(srcdir, "/notvalid.pem", NULL); ne_ssl_certificate *cert = ne_ssl_cert_read(fn); char digest[60]; ne_free(fn); ONN("could not load notvalid.pem", cert == NULL); ONN("failed to digest", ne_ssl_cert_digest(cert, digest)); ne_ssl_cert_free(cert); ONV(strcmp(digest, THE_DIGEST), ("digest was %s not %s", digest, THE_DIGEST)); return OK; } /* verify that identity of certificate in filename 'fname' is 'identity' */ static int check_identity(const char *fname, const char *identity) { ne_ssl_certificate *cert = ne_ssl_cert_read(fname); const char *id; ONV(cert == NULL, ("could not read cert `%s'", fname)); id = ne_ssl_cert_identity(cert); if (identity) { ONV(id == NULL, ("certificate `%s' had no identity", fname)); ONV(strcmp(id, identity), ("certificate `%s' had identity `%s' not `%s'", fname, id, identity)); } else { ONV(id != NULL, ("certificate `%s' had identity `%s' (expected none)", fname, id)); } ne_ssl_cert_free(cert); return OK; } /* check certificate identities. */ static int cert_identities(void) { static const struct { const char *fname, *identity; } certs[] = { { "twocn.cert", "localhost" }, { "altname1.cert", "localhost" }, { "altname2.cert", "nohost.example.com" }, { "altname4.cert", "localhost" }, { "ca4.pem", "fourth.example.com" }, { NULL, NULL } }; int n; for (n = 0; certs[n].fname != NULL; n++) CALL(check_identity(certs[n].fname, certs[n].identity)); return OK; } static int check_validity(const char *fname, const char *from, const char *until) { char actfrom[NE_SSL_VDATELEN], actuntil[NE_SSL_VDATELEN]; ne_ssl_certificate *cert; cert = ne_ssl_cert_read(fname); ONV(cert == NULL, ("could not load cert `%s'", fname)); /* cover all calling combos for nice coverage analysis */ ne_ssl_cert_validity(cert, NULL, NULL); ne_ssl_cert_validity(cert, actfrom, NULL); ne_ssl_cert_validity(cert, NULL, actuntil); ne_ssl_cert_validity(cert, actfrom, actuntil); ONV(strcmp(actfrom, from), ("%s: start time was `%s' not `%s'", fname, actfrom, from)); ONV(strcmp(actuntil, until), ("%s: end time was `%s' not `%s'", fname, actuntil, until)); ne_ssl_cert_free(cert); return OK; } /* ceritificate validity times. */ static int cert_validity(void) { char *cert = ne_concat(srcdir, "/expired.pem", NULL); CALL(check_validity(cert, "Jan 21 20:39:04 2002 GMT", "Jan 31 20:39:04 2002 GMT")); ne_free(cert); cert = ne_concat(srcdir, "/notvalid.pem", NULL); CALL(check_validity(cert, "Dec 27 20:40:29 2023 GMT", "Dec 28 20:40:29 2023 GMT")); ne_free(cert); return OK; } /* dname comparisons. */ static int dname_compare(void) { ne_ssl_certificate *ssigned; const ne_ssl_dname *dn1, *dn2; dn1 = ne_ssl_cert_subject(def_server_cert); dn2 = ne_ssl_cert_subject(def_server_cert); ONN("identical subject names not equal", ne_ssl_dname_cmp(dn1, dn2) != 0); dn2 = ne_ssl_cert_issuer(def_server_cert); ONN("issuer and subject names equal for signed cert", ne_ssl_dname_cmp(dn1, dn2) == 0); dn1 = ne_ssl_cert_subject(def_ca_cert); ONN("issuer of signed cert not equal to subject of CA cert", ne_ssl_dname_cmp(dn1, dn2) != 0); ssigned = ne_ssl_cert_read("ssigned.pem"); ONN("could not load ssigned.pem", ssigned == NULL); dn1 = ne_ssl_cert_subject(ssigned); dn2 = ne_ssl_cert_issuer(ssigned); ONN("issuer and subject names not equal for self-signed cert", ne_ssl_dname_cmp(dn1, dn2)); ne_ssl_cert_free(ssigned); return OK; } /* The dname with the UTF-8 encoding of the Unicode string: * "Hllo World". */ #define I18N_DNAME "H\xc3\xa8llo World, Neon Hackers Ltd, Cambridge, Cambridgeshire, GB" /* N.B. t61subj.cert encodes an ISO-8859-1 string in a T61String * field, which is strictly wrong but the common usage. */ /* tests for ne_ssl_readable_dname */ static int dname_readable(void) { struct { const char *cert; const char *subjdn, *issuerdn; } ts[] = { { "justmail.cert", "blah@example.com", NULL }, { "t61subj.cert", I18N_DNAME, NULL }, { "bmpsubj.cert", I18N_DNAME, NULL }, { "utf8subj.cert", I18N_DNAME, NULL } }; size_t n; for (n = 0; n < sizeof(ts)/sizeof(ts[0]); n++) { ne_ssl_certificate *cert = ne_ssl_cert_read(ts[n].cert); ONV(cert == NULL, ("could not load cert %s", ts[n].cert)); CALL(check_cert_dnames(cert, ts[n].subjdn, ts[n].issuerdn)); ne_ssl_cert_free(cert); } return OK; } /* test cert comparisons */ static int cert_compare(void) { ne_ssl_certificate *c1, *c2; c1 = ne_ssl_cert_read("server.cert"); c2 = ne_ssl_cert_read("server.cert"); ONN("identical certs don't compare equal", ne_ssl_cert_cmp(c1, c2) != 0); ONN("identical certs don't compare equal", ne_ssl_cert_cmp(c2, c1) != 0); ne_ssl_cert_free(c2); c2 = ne_ssl_cert_read("ssigned.pem"); ONN("different certs don't compare different", ne_ssl_cert_cmp(c1, c2) == 0); ONN("different certs don't compare different", ne_ssl_cert_cmp(c2, c1) == 0); ne_ssl_cert_free(c2); ne_ssl_cert_free(c1); return OK; } /* Extract raw base64 string from a PEM file */ static int flatten_pem(const char *fname, char **out) { FILE *fp = fopen(fname, "r"); char buf[80]; size_t outlen = 0; int ignore = 1; ONV(fp == NULL, ("could not open %s", fname)); *out = NULL; while (fgets(buf, sizeof buf, fp) != NULL) { size_t len = strlen(buf) - 1; if (len < 1) continue; /* look for the wrapper lines. */ if (strncmp(buf, "-----", 5) == 0) { ignore = !ignore; continue; } /* ignore until the first wrapper line */ if (ignore) continue; *out = realloc(*out, outlen + len + 1); memcpy(*out + outlen, buf, len); outlen += len; } (*out)[outlen] = '\0'; fclose(fp); return OK; } /* check export cert data 'actual' against expected data 'expected */ static int check_exported_data(const char *actual, const char *expected) { ONN("could not export cert", actual == NULL); ONN("export data contained newline", strchr(actual, '\r') || strchr(actual, '\n')); ONV(strcmp(actual, expected), ("exported cert differed from expected:\n" "actual: %s\nexpected: %s", actual, expected)); return OK; } /* Test import and export of certificates. The export format is PEM * without the line feeds and wrapping; compare against . */ static int import_export(void) { char *expected, *actual; ne_ssl_certificate *cert, *imp; CALL(flatten_pem("server.cert", &expected)); cert = ne_ssl_cert_read("server.cert"); ONN("could not load server.cert", cert == NULL); /* export the cert to and compare it with the PEM file */ actual = ne_ssl_cert_export(cert); CALL(check_exported_data(actual, expected)); /* import the exported cert data, check it looks the same */ imp = ne_ssl_cert_import(actual); ONN("failed to import exported cert", imp == NULL); ONN("imported cert was different to original", ne_ssl_cert_cmp(imp, cert)); /* re-export the imported cert and check that looks the same */ ne_free(actual); actual = ne_ssl_cert_export(imp); CALL(check_exported_data(actual, expected)); ne_ssl_cert_free(imp); /* try importing from bogus data */ imp = ne_ssl_cert_import("!!"); ONN("imported bogus cert from bogus base64", imp != NULL); imp = ne_ssl_cert_import("aaaa"); ONN("imported bogus cert from valid base64", imp != NULL); ne_ssl_cert_free(cert); ne_free(actual); ne_free(expected); return OK; } /* Test write/read */ static int read_write(void) { ne_ssl_certificate *c1, *c2; c1 = ne_ssl_cert_read("server.cert"); ONN("could not load server.cert", c1 == NULL); ONN("could not write output.pem", ne_ssl_cert_write(c1, "output.pem")); ONN("wrote to nonexistent directory", ne_ssl_cert_write(c1, "nonesuch/output.pem") == 0); c2 = ne_ssl_cert_read("output.pem"); ONN("could not read output.pem", c2 == NULL); ONN("read of output.pem differs from original", ne_ssl_cert_cmp(c2, c1)); ne_ssl_cert_free(c1); ne_ssl_cert_free(c2); return OK; } /* A verification callback which caches the passed cert. */ static int verify_cache(void *userdata, int fs, const ne_ssl_certificate *cert) { char **cache = userdata; if (*cache == NULL) { *cache = ne_ssl_cert_export(cert); return 0; } else { return -1; } } /* Test a common use of the SSL API; cache the server cert across * sessions. */ static int cache_cert(void) { ne_session *sess = DEFSESS; char *cache = NULL; ne_ssl_certificate *cert; struct ssl_server_args args = {0}; args.cert = "ssigned.pem"; args.cache = 1; ONREQ(any_ssl_request(sess, ssl_server, &args, CA_CERT, verify_cache, &cache)); ne_session_destroy(sess); ONN("no cert was cached", cache == NULL); /* make a real cert */ cert = ne_ssl_cert_import(cache); ONN("could not import cached cert", cert == NULL); ne_free(cache); /* create a new session */ sess = DEFSESS; /* trust the cert */ ne_ssl_trust_cert(sess, cert); ne_ssl_cert_free(cert); /* now, the request should succeed without manual verification */ ONREQ(any_ssl_request(sess, ssl_server, &args, CA_CERT, NULL, NULL)); ne_session_destroy(sess); return OK; } /* TODO: code paths still to test in cert verification: * - server cert changes between connections: Mozilla gives * a "bad MAC decode" error for this; can do better? * - server presents no certificate (using ADH ciphers)... can * only really happen if they mess with the SSL_CTX and enable * ADH cipher manually; but good to check the failure case is * safe. * From the SSL book: * - an early FIN should be returned as a possible truncation attack, * NOT just an NE_SOCK_CLOSED. * - unexpected close_notify is an error but not an attack. * - never attempt session resumption after any aborted connection. */ ne_test tests[] = { T_LEAKY(init), T(load_server_certs), T(trust_default_ca), T(cert_fingerprint), T(cert_identities), T(cert_validity), T(cert_compare), T(dname_compare), T(dname_readable), T(import_export), T(read_write), T(load_client_cert), T(simple), T(simple_sslv2), T(simple_eof), T(empty_truncated_eof), T(fail_not_ssl), T(cache_cert), T(client_cert_pkcs12), T(ccert_unencrypted), T(client_cert_provided), T(cc_provided_dnames), T(parse_cert), T(parse_chain), T(no_verify), T(cache_verify), T_LEAKY(wildcard_init), T(wildcard_match), T(caseless_match), T(subject_altname), T(two_subject_altname), T(two_subject_altname2), T(notdns_altname), T(ipaddr_altname), T(multi_commonName), T(commonName_first), T(fail_wrongCN), T(fail_expired), T(fail_notvalid), T(fail_untrusted_ca), T(fail_self_signed), T(fail_missing_CN), T(session_cache), T(fail_tunnel), T(proxy_tunnel), T(auth_proxy_tunnel), T(auth_tunnel_creds), T(NULL) }; tla-1.3.5+dfsg/src/libneon/test/skeleton.c0000644000175000017500000000231510457621776017141 0ustar useruser/* neon test suite Copyright (C) 2002-2003, Joe Orton This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #include "config.h" #include #ifdef HAVE_STDLIB_H #include #endif #ifdef HAVE_UNISTD_H #include #endif #include "ne_request.h" #include "ne_socket.h" #include "tests.h" #include "child.h" #include "utils.h" static int foo(void) { /* This is a skeleton test suite file. */ return OK; } ne_test tests[] = { T(foo), /* test functions here */ /* end of test functions. */ T(NULL) }; tla-1.3.5+dfsg/src/libneon/test/resolve.c0000644000175000017500000000312510457621776016774 0ustar useruser/* Test program for the neon resolver interface Copyright (C) 2002-2003, Joe Orton This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #include "config.h" #include #include "ne_socket.h" int main(int argc, char **argv) { ne_sock_addr *addr; char buf[256]; int ret = 0; if (argc < 2) { printf("Usage: %s hostname\n", argv[0]); return 1; } if (ne_sock_init()) { printf("%s: Failed to initialize socket library.\n", argv[0]); return 1; } addr = ne_addr_resolve(argv[1], 0); if (ne_addr_result(addr)) { printf("Could not resolve `%s': %s\n", argv[1], ne_addr_error(addr, buf, sizeof buf)); ret = 2; } else { const ne_inet_addr *ia; printf("Resolved `%s' OK:", argv[1]); for (ia = ne_addr_first(addr); ia; ia = ne_addr_next(addr)) { printf(" <%s>", ne_iaddr_print(ia, buf, sizeof buf)); } putchar('\n'); } ne_addr_destroy(addr); return ret; } tla-1.3.5+dfsg/src/libneon/test/request.c0000644000175000017500000012132610457621776017011 0ustar useruser/* HTTP request handling tests Copyright (C) 2001-2003, Joe Orton This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #include "config.h" #include #include /* for time() */ #ifdef HAVE_STDLIB_H #include #endif #ifdef HAVE_UNISTD_H #include #endif #include "ne_request.h" #include "ne_socket.h" #include "tests.h" #include "child.h" #include "utils.h" static char buffer[BUFSIZ]; static ne_session *def_sess; static ne_request *def_req; static int prepare_request(server_fn fn, void *ud) { static char uri[100]; def_sess = ne_session_create("http", "localhost", 7777); sprintf(uri, "/test%d", test_num); def_req = ne_request_create(def_sess, "GET", uri); CALL(spawn_server(7777, fn, ud)); return OK; } static int finish_request(void) { ne_request_destroy(def_req); ne_session_destroy(def_sess); return await_server(); } #define RESP200 "HTTP/1.1 200 OK\r\n" "Server: neon-test-server\r\n" #define TE_CHUNKED "Transfer-Encoding: chunked\r\n" /* takes response body chunks and appends them to a buffer. */ static void collector(void *ud, const char *data, size_t len) { ne_buffer *buf = ud; ne_buffer_append(buf, data, len); } typedef ne_request *(*construct_request)(ne_session *sess, void *userdata); /* construct a get request, callback for run_request. */ static ne_request *construct_get(ne_session *sess, void *userdata) { ne_request *r = ne_request_create(sess, "GET", "/"); ne_buffer *buf = userdata; ne_add_response_body_reader(r, ne_accept_2xx, collector, buf); return r; } /* run a request created by callback 'cb' in session 'sess'. */ static int run_request(ne_session *sess, int status, construct_request cb, void *userdata) { ne_request *req = cb(sess, userdata); ON(req == NULL); ONREQ(ne_request_dispatch(req)); ONV(ne_get_status(req)->code != status, ("response status-code was %d not %d", ne_get_status(req)->code, status)); ne_request_destroy(req); return OK; } /* Runs a server function 'fn', expecting to get a header 'name' with value * 'value' in the response. */ static int expect_header_value(const char *name, const char *value, server_fn fn, void *userdata) { ne_session *sess; ne_request *req; char *gotval = NULL; CALL(make_session(&sess, fn, userdata)); req = ne_request_create(sess, "FOO", "/bar"); ne_add_response_header_handler(req, name, ne_duplicate_header, &gotval); ONREQ(ne_request_dispatch(req)); CALL(await_server()); ONN("no header value set", gotval == NULL); ONV(strcmp(gotval, value), ("header value mis-match: got [%s] not [%s]", gotval, value)); ne_request_destroy(req); ne_session_destroy(sess); ne_free(gotval); return OK; } /* runs a server function 'fn', expecting response body to be equal to * 'expect' */ static int expect_response(const char *expect, server_fn fn, void *userdata) { ne_session *sess = ne_session_create("http", "localhost", 7777); ne_buffer *buf = ne_buffer_create(); ON(sess == NULL || buf == NULL); ON(spawn_server(7777, fn, userdata)); CALL(run_request(sess, 200, construct_get, buf)); ON(await_server()); ONN("response body match", strcmp(buf->data, expect)); ne_session_destroy(sess); ne_buffer_destroy(buf); return OK; } #define EMPTY_RESP RESP200 "Content-Length: 0\r\n\r\n" /* Process a request with given method and response, expecting to get * a zero-length response body. A second request is sent down the * connection (to ensure that the response isn't silently eaten), so * 'resp' must be an HTTP/1.1 response with no 'Connection: close' * header. */ static int expect_no_body(const char *method, const char *resp) { ne_session *sess = ne_session_create("http", "localhost", 7777); ne_request *req = ne_request_create(sess, method, "/first"); ssize_t ret; char *r = ne_malloc(strlen(resp) + sizeof(EMPTY_RESP)); strcpy(r, resp); strcat(r, EMPTY_RESP); ON(spawn_server(7777, single_serve_string, r)); ne_free(r); ONN("failed to begin request", ne_begin_request(req)); ret = ne_read_response_block(req, buffer, BUFSIZ); ONV(ret != 0, ("got response block of size %" NE_FMT_SSIZE_T, ret)); ONN("failed to end request", ne_end_request(req)); /* process following request; makes sure that nothing extra has * been eaten by the first request. */ ONV(any_request(sess, "/second"), ("second request on connection failed: %s",ne_get_error(sess))); ON(await_server()); ne_request_destroy(req); ne_session_destroy(sess); return OK; } static int reason_phrase(void) { ne_session *sess; CALL(make_session(&sess, single_serve_string, RESP200 "Connection: close\r\n\r\n")); CALL(any_request(sess, "/foo")); CALL(await_server()); ONV(strcmp(ne_get_error(sess), "200 OK"), ("reason phrase mismatch: got `%s' not `200 OK'", ne_get_error(sess))); ne_session_destroy(sess); return OK; } static int single_get_eof(void) { return expect_response("a", single_serve_string, RESP200 "Connection: close\r\n" "\r\n" "a"); } static int single_get_clength(void) { return expect_response("a", single_serve_string, RESP200 "Content-Length: 1\r\n" "\r\n" "a" "bbbbbbbbasdasd"); } static int single_get_chunked(void) { return expect_response("a", single_serve_string, RESP200 TE_CHUNKED "\r\n" "1\r\n" "a\r\n" "0\r\n" "\r\n" "g;lkjalskdjalksjd"); } static int no_body_304(void) { return expect_no_body("GET", "HTTP/1.1 304 Not Mfodified\r\n" "Content-Length: 5\r\n\r\n"); } static int no_body_204(void) { return expect_no_body("GET", "HTTP/1.1 204 Not Modified\r\n" "Content-Length: 5\r\n\r\n"); } static int no_body_205(void) { return expect_no_body("GET", "HTTP/1.1 205 Reset Content\r\n" "Content-Length: 5\r\n\r\n"); } static int no_body_HEAD(void) { return expect_no_body("HEAD", "HTTP/1.1 200 OK\r\n" "Content-Length: 5\r\n\r\n"); } static int no_body_empty_clength(void) { return expect_no_body("GET", "HTTP/1.1 200 OK\r\n" "Content-Length:\r\n\r\n"); } static int no_body_bad_clength(void) { return expect_no_body("GET", "HTTP/1.1 200 OK\r\n" "Content-Length: foobar\r\n\r\n"); } static int no_headers(void) { return expect_response("abcde", single_serve_string, "HTTP/1.1 200 OK\r\n\r\n" "abcde"); } #define CHUNK(len, data) #len "\r\n" data "\r\n" #define ABCDE_CHUNKS CHUNK(1, "a") CHUNK(1, "b") \ CHUNK(1, "c") CHUNK(1, "d") \ CHUNK(1, "e") CHUNK(0, "") static int chunks(void) { /* lots of little chunks. */ return expect_response("abcde", single_serve_string, RESP200 TE_CHUNKED "\r\n" ABCDE_CHUNKS); } static int te_header(void) { return expect_response("abcde", single_serve_string, RESP200 "Transfer-Encoding: CHUNKED\r\n" "\r\n" ABCDE_CHUNKS); } /* test that the presence of *any* t-e header implies a chunked * response. */ static int any_te_header(void) { return expect_response("abcde", single_serve_string, RESP200 "Transfer-Encoding: punked\r\n" "\r\n" ABCDE_CHUNKS); } static int chunk_numeric(void) { /* leading zero's */ return expect_response("0123456789abcdef", single_serve_string, RESP200 TE_CHUNKED "\r\n" "000000010\r\n" "0123456789abcdef\r\n" "000000000\r\n" "\r\n"); } static int chunk_extensions(void) { /* chunk-extensions. */ return expect_response("0123456789abcdef", single_serve_string, RESP200 TE_CHUNKED "\r\n" "000000010; foo=bar; norm=fish\r\n" "0123456789abcdef\r\n" "000000000\r\n" "\r\n"); } static int chunk_trailers(void) { /* trailers. */ return expect_response("abcde", single_serve_string, RESP200 TE_CHUNKED "\r\n" "00000005; foo=bar; norm=fish\r\n" "abcde\r\n" "000000000\r\n" "X-Hello: world\r\n" "X-Another: header\r\n" "\r\n"); } static int chunk_oversize(void) { #define BIG (20000) char *body = ne_malloc(BIG + 1); static const char rnd[] = "abcdefghijklm"; int n; ne_buffer *buf = ne_buffer_create(); for (n = 0; n < BIG; n++) { body[n] = rnd[n % (sizeof(rnd) - 1)]; } body[n] = '\0'; #undef BIG ne_buffer_concat(buf, RESP200 TE_CHUNKED "\r\n" "4E20\r\n", body, "\r\n", "0\r\n\r\n", NULL); CALL(expect_response(body, single_serve_string, buf->data)); ne_buffer_destroy(buf); ne_free(body); return OK; } static int te_over_clength(void) { /* T-E dominates over C-L. */ return expect_response("abcde", single_serve_string, RESP200 TE_CHUNKED "Content-Length: 300\r\n" "\r\n" ABCDE_CHUNKS); } /* te_over_clength with the headers the other way round; check for * ordering problems. */ static int te_over_clength2(void) { return expect_response("abcde", single_serve_string, RESP200 "Content-Length: 300\r\n" TE_CHUNKED "\r\n" ABCDE_CHUNKS); } /* obscure case which is possibly a valid request by 2616, but should * be handled correctly in any case. neon <0.22.0 tries to * eat the response body, which is probably incorrect. */ static int no_body_chunks(void) { return expect_no_body("HEAD", "HTTP/1.1 204 Not Modified\r\n" TE_CHUNKED "\r\n"); } static int serve_twice(ne_socket *sock, void *userdata) { const char *resp = userdata; CALL(discard_request(sock)); SEND_STRING(sock, resp); CALL(discard_request(sock)); SEND_STRING(sock, resp); return OK; } /* Test persistent connection handling: serve 'response' twice on a * single TCP connection, expecting to get a response body equal to * 'body' both times. */ static int test_persist(const char *response, const char *body) { ne_session *sess = ne_session_create("http", "localhost", 7777); ne_buffer *buf = ne_buffer_create(); ON(sess == NULL || buf == NULL); ON(spawn_server(7777, serve_twice, (char *)response)); CALL(run_request(sess, 200, construct_get, buf)); ONV(strcmp(buf->data, body), ("response #1 mismatch: [%s] not [%s]", buf->data, body)); /* Run it again. */ ne_buffer_clear(buf); CALL(run_request(sess, 200, construct_get, buf)); ON(await_server()); ONV(strcmp(buf->data, body), ("response #2 mismatch: [%s] not [%s]", buf->data, body)); ne_session_destroy(sess); ne_buffer_destroy(buf); return OK; } static int persist_http11(void) { return test_persist(RESP200 "Content-Length: 5\r\n\r\n" "abcde", "abcde"); } static int persist_chunked(void) { return test_persist(RESP200 TE_CHUNKED "\r\n" ABCDE_CHUNKS, "abcde"); } static int persist_http10(void) { return test_persist("HTTP/1.0 200 OK\r\n" "Connection: keep-alive\r\n" "Content-Length: 5\r\n\r\n" "abcde", "abcde"); } /* Server function for fail_early_eof */ static int serve_eof(ne_socket *sock, void *ud) { const char *resp = ud; /* dummy request/response. */ CALL(discard_request(sock)); CALL(SEND_STRING(sock, RESP200 "Content-Length: 0\r\n\r\n")); /* real request/response. */ CALL(discard_request(sock)); CALL(SEND_STRING(sock, resp)); return OK; } /* Utility function: 'resp' is a truncated response; such that an EOF * arrives early during response processing; but NOT as a valid * premature EOF due to a persistent connection timeout. It is an * error if the request is then retried, and the test fails. */ static int fail_early_eof(const char *resp) { ne_session *sess = ne_session_create("http", "localhost", 7777); CALL(spawn_server_repeat(7777, serve_eof, (char *)resp, 3)); ONREQ(any_request(sess, "/foo")); ONN("request retried after early EOF", any_request(sess, "/foobar") == NE_OK); CALL(reap_server()); ne_session_destroy(sess); return OK; } /* This failed with neon <0.22. */ static int fail_eof_continued(void) { return fail_early_eof("HTTP/1.1 100 OK\r\n\r\n"); } static int fail_eof_headers(void) { return fail_early_eof("HTTP/1.1 200 OK\r\nJimbob\r\n"); } static int fail_eof_chunk(void) { return fail_early_eof(RESP200 TE_CHUNKED "\r\n" "1\r\n" "a"); } static int fail_eof_badclen(void) { return fail_early_eof(RESP200 "Content-Length: 10\r\n\r\n" "abcde"); } /* Persistent connection timeout where a FIN is sent to terminate the * connection, which is caught by a 0 return from the read() when the * second request reads the status-line. */ static int ptimeout_eof(void) { ne_session *sess = ne_session_create("http", "localhost", 7777); CALL(spawn_server_repeat(7777, single_serve_string, RESP200 "Content-Length: 0\r\n" "\r\n", 4)); CALL(any_2xx_request(sess, "/first")); CALL(any_2xx_request(sess, "/second")); ONN("server died prematurely?", dead_server()); reap_server(); ne_session_destroy(sess); return OK; } /* Persistent connection timeout where a FIN is sent to terminate the * connection, but the request fails in the write() call which sends * the body. */ static int ptimeout_eof2(void) { ne_session *sess = ne_session_create("http", "localhost", 7777); CALL(spawn_server_repeat(7777, single_serve_string, RESP200 "Content-Length: 0\r\n" "\r\n", 4)); CALL(any_2xx_request(sess, "/first")); minisleep(); CALL(any_2xx_request_body(sess, "/second")); ONN("server died prematurely?", dead_server()); reap_server(); ne_session_destroy(sess); return OK; } /* TODO: add a ptimeout_reset too, if an RST can be reliably generated * mid-connection. */ /* Emulates a persistent connection timeout on the server. This tests * the timeout occuring after between 1 and 10 requests down the * connection. */ static int persist_timeout(void) { ne_session *sess = ne_session_create("http", "localhost", 7777); ne_buffer *buf = ne_buffer_create(); int n; struct many_serve_args args; ON(sess == NULL || buf == NULL); args.str = RESP200 "Content-Length: 5\r\n\r\n" "abcde"; for (args.count = 1; args.count < 10; args.count++) { ON(spawn_server(7777, many_serve_string, &args)); for (n = 0; n < args.count; n++) { ONV(run_request(sess, 200, construct_get, buf), ("%d of %d, request failed: %s", n, args.count, ne_get_error(sess))); ONV(strcmp(buf->data, "abcde"), ("%d of %d, response body mismatch", n, args.count)); /* Ready for next time. */ ne_buffer_clear(buf); } ON(await_server()); } ne_session_destroy(sess); ne_buffer_destroy(buf); return OK; } /* Test that an HTTP/1.0 server is not presumed to support persistent * connections by default. */ static int no_persist_http10(void) { ne_session *sess = ne_session_create("http", "localhost", 7777); CALL(spawn_server_repeat(7777, single_serve_string, "HTTP/1.0 200 OK\r\n" "Content-Length: 5\r\n\r\n" "abcde" "Hello, world - what a nice day!\r\n", 4)); /* if the connection is treated as persistent, the status-line for * the second request will be "Hello, world...", which will * fail. */ ONREQ(any_request(sess, "/foobar")); ONREQ(any_request(sess, "/foobar")); ONN("server died prematurely?", dead_server()); CALL(reap_server()); ne_session_destroy(sess); return OK; } static int ignore_bad_headers(void) { return expect_response("abcde", single_serve_string, RESP200 "Stupid Header\r\n" "ReallyStupidHeader\r\n" "Content-Length: 5\r\n" "\r\n" "abcde"); } static int fold_headers(void) { return expect_response("abcde", single_serve_string, RESP200 "Content-Length: \r\n 5\r\n" "\r\n" "abcde"); } static int fold_many_headers(void) { return expect_response("abcde", single_serve_string, RESP200 "Content-Length: \r\n \r\n \r\n \r\n 5\r\n" "\r\n" "abcde"); } #define NO_BODY "Content-Length: 0\r\n\r\n" static int empty_header(void) { return expect_header_value("ranDom-HEader", "", single_serve_string, RESP200 "RANDom-HeADEr:\r\n" NO_BODY); } static int ignore_header_case(void) { return expect_header_value("ranDom-HEader", "noddy", single_serve_string, RESP200 "RANDom-HeADEr: noddy\r\n" NO_BODY); } static int ignore_header_ws(void) { return expect_header_value("ranDom-HEader", "fishy", single_serve_string, RESP200 "RANDom-HeADEr: fishy\r\n" NO_BODY); } static int ignore_header_ws2(void) { return expect_header_value("ranDom-HEader", "fishy", single_serve_string, RESP200 "RANDom-HeADEr \t : fishy\r\n" NO_BODY); } static int ignore_header_ws3(void) { return expect_header_value("ranDom-HEader", "fishy", single_serve_string, RESP200 "RANDom-HeADEr: fishy \r\n" NO_BODY); } static int ignore_header_tabs(void) { return expect_header_value("ranDom-HEader", "geezer", single_serve_string, RESP200 "RANDom-HeADEr: \t \tgeezer\r\n" NO_BODY); } static int trailing_header(void) { return expect_header_value("gONe", "fishing", single_serve_string, RESP200 TE_CHUNKED "\r\n0\r\n" "Hello: world\r\n" "GONE: fishing\r\n" "\r\n"); } static int continued_header(void) { return expect_header_value("hello", "w o r l d", single_serve_string, RESP200 "Hello: \n\tw\r\n\to r l\r\n\td \r\n" NO_BODY); } static void mh_header(void *ctx, const char *value) { int *state = ctx; static const char *hdrs[] = { "jim", "jab", "jar" }; if (*state < 0 || *state > 2) { /* already failed. */ return; } if (strcmp(value, hdrs[*state])) *state = -*state; else (*state)++; } /* check headers callbacks are working correctly. */ static int multi_header(void) { ne_session *sess = ne_session_create("http", "localhost", 7777); ne_request *req; int state = 0; ON(sess == NULL); ON(spawn_server(7777, single_serve_string, RESP200 "X-Header: jim\r\n" "x-header: jab\r\n" "x-Header: jar\r\n" "Content-Length: 0\r\n\r\n")); req = ne_request_create(sess, "GET", "/"); ON(req == NULL); ne_add_response_header_handler(req, "x-header", mh_header, &state); ONREQ(ne_request_dispatch(req)); ON(await_server()); ON(state != 3); ne_request_destroy(req); ne_session_destroy(sess); return OK; } struct s1xx_args { int count; int hdrs; }; static int serve_1xx(ne_socket *sock, void *ud) { struct s1xx_args *args = ud; CALL(discard_request(sock)); do { if (args->hdrs) { SEND_STRING(sock, "HTTP/1.1 100 Continue\r\n" "Random: header\r\n" "Another: header\r\n\r\n"); } else { SEND_STRING(sock, "HTTP/1.1 100 Continue\r\n\r\n"); } } while (--args->count > 0); SEND_STRING(sock, RESP200 "Content-Length: 0\r\n\r\n"); return OK; } #define sess def_sess static int skip_interim_1xx(void) { struct s1xx_args args = {0, 0}; ON(prepare_request(serve_1xx, &args)); ONREQ(ne_request_dispatch(def_req)); return finish_request(); } static int skip_many_1xx(void) { struct s1xx_args args = {5, 0}; ON(prepare_request(serve_1xx, &args)); ONREQ(ne_request_dispatch(def_req)); return finish_request(); } static int skip_1xx_hdrs(void) { struct s1xx_args args = {5, 5}; ON(prepare_request(serve_1xx, &args)); ONREQ(ne_request_dispatch(def_req)); return finish_request(); } #undef sess /* server for expect_100_once: eats a dummy request, then serves a * 100-continue request, and fails if the request body is sent * twice. */ static int serve_100_once(ne_socket *sock, void *ud) { struct s1xx_args args = {2, 0}; char ch; /* dummy first request. */ CALL(discard_request(sock)); CALL(SEND_STRING(sock, RESP200 "Content-Length: 0\r\n\r\n")); /* now the real 1xx request. */ CALL(serve_1xx(sock, &args)); CALL(discard_body(sock)); ONN("body was served twice", ne_sock_read(sock, &ch, 1) == 1); return OK; } /* regression test; fails with neon <0.22, where the request body was * served *every* time a 1xx response was received, rather than just * once. */ static int expect_100_once(void) { ne_session *sess; ne_request *req; char body[BUFSIZ]; CALL(make_session(&sess, serve_100_once, NULL)); ne_set_expect100(sess, 1); /* 100-continue is only used if the server is known to claim * HTTP/1.1 compliance; make a dummy request on the socket first, * to trigger that logic. */ CALL(any_request(sess, "/foo")); /* now the real request. */ req = ne_request_create(sess, "GET", "/foo"); memset(body, 'A', sizeof(body)); ne_set_request_body_buffer(req, body, sizeof(body)); ONN("request failed", ne_request_dispatch(req)); ne_request_destroy(req); ne_session_destroy(sess); CALL(await_server()); return OK; } struct body { char *body; size_t size; }; static int want_body(ne_socket *sock, void *userdata) { struct body *b = userdata; char *buf = ne_malloc(b->size); clength = 0; CALL(discard_request(sock)); ONN("request has c-l header", clength == 0); ONN("request length", clength != (int)b->size); NE_DEBUG(NE_DBG_HTTP, "reading body of %" NE_FMT_SIZE_T " bytes...\n", b->size); ON(ne_sock_fullread(sock, buf, b->size)); ON(SEND_STRING(sock, RESP200 "Content-Length: 0\r\n\r\n")); ON(memcmp(buf, b->body, b->size)); ne_free(buf); return OK; } static ssize_t provide_body(void *userdata, char *buf, size_t buflen) { static const char *pnt; static size_t left; struct body *b = userdata; if (buflen == 0) { pnt = b->body; left = b->size; } else { if (left < buflen) buflen = left; memcpy(buf, pnt, buflen); left -= buflen; } return buflen; } static int send_bodies(void) { unsigned int n, m; struct body bodies[] = { { "abcde", 5 }, { "\0\0\0\0\0\0", 6 }, { NULL, 50000 }, { NULL } }; #define BIG 2 /* make the body with some cruft. */ bodies[BIG].body = ne_malloc(bodies[BIG].size); for (n = 0; n < bodies[BIG].size; n++) { bodies[BIG].body[n] = (char)n%80; } for (m = 0; m < 2; m++) { for (n = 0; bodies[n].body != NULL; n++) { ne_session *sess = ne_session_create("http", "localhost", 7777); ne_request *req; ON(sess == NULL); ON(spawn_server(7777, want_body, &(bodies[n]))); req = ne_request_create(sess, "PUT", "/"); ON(req == NULL); if (m == 0) { ne_set_request_body_buffer(req, bodies[n].body, bodies[n].size); } else { ne_set_request_body_provider(req, bodies[n].size, provide_body, &bodies[n]); } ONREQ(ne_request_dispatch(req)); CALL(await_server()); ne_request_destroy(req); ne_session_destroy(sess); } } ne_free(bodies[BIG].body); return OK; } static int serve_infinite_headers(ne_socket *sock, void *userdata) { CALL(discard_request(sock)); SEND_STRING(sock, RESP200); for (;;) { SEND_STRING(sock, "x-foo: bar\r\n"); } return 0; } /* Utility function: run a request using the given server fn, and the * request should fail. If 'error' is non-NULL, it must be a substring * of the error string. */ static int fail_request_with_error(int with_body, server_fn fn, void *ud, int forever, const char *error) { ne_session *sess = ne_session_create("http", "localhost", 7777); ne_request *req; int ret; ON(sess == NULL); if (forever) { ON(spawn_server_repeat(7777, fn, ud, 100)); } else { ON(spawn_server(7777, fn, ud)); } req = ne_request_create(sess, "GET", "/"); ON(req == NULL); if (with_body) { static const char *body = "random stuff"; ne_set_request_body_buffer(req, body, strlen(body)); } /* request should fail. */ ret = ne_request_dispatch(req); ONN("request succeeded", ret == NE_OK); if (!forever) { /* reap the server, don't care what it's doing. */ reap_server(); } NE_DEBUG(NE_DBG_HTTP, "Response gave error `%s'\n", ne_get_error(sess)); ONV(error && strstr(ne_get_error(sess), error) == NULL, ("failed with error `%s', no `%s'", ne_get_error(sess), error)); if (!forever) ONV(any_request(sess, "/fail/to/connect") != NE_CONNECT, ("subsequent request re-used connection?")); ne_request_destroy(req); ne_session_destroy(sess); return OK; } /* Run a random GET request which is given 'body' as the response; the * request must fail, and 'error' must be found in the error * string. */ static int invalid_response_gives_error(const char *resp, const char *error) { return fail_request_with_error(0, single_serve_string, (void *)resp, 0, error); } /* Utility function: run a request using the given server fn, and the * request must fail. */ static int fail_request(int with_body, server_fn fn, void *ud, int forever) { return fail_request_with_error(with_body, fn, ud, forever, NULL); } static int unbounded_headers(void) { return fail_request(0, serve_infinite_headers, NULL, 0); } static int blank_response(void) { return fail_request(0, single_serve_string, "\r\n", 0); } static int serve_non_http(ne_socket *sock, void *ud) { SEND_STRING(sock, "Hello Mum.\n"); ne_sock_readline(sock, buffer, BUFSIZ); return OK; } /* Test behaviour when not speaking to an HTTP server. Regression test * for infinite loop. */ static int not_http(void) { return fail_request(0, serve_non_http, NULL, 0); } static int serve_infinite_folds(ne_socket *sock, void *ud) { SEND_STRING(sock, "HTTP/1.0 200 OK\r\nFoo: bar\r\n"); for (;;) { SEND_STRING(sock, " hello there.\r\n"); } return OK; } static int unbounded_folding(void) { return fail_request(0, serve_infinite_folds, NULL, 0); } static int serve_close(ne_socket *sock, void *ud) { /* do nothing; the socket will be closed. */ return 0; } /* Returns non-zero if port is alive. */ static int is_alive(int port) { ne_sock_addr *addr; ne_socket *sock = ne_sock_create(); const ne_inet_addr *ia; int connected = 0; addr = ne_addr_resolve("localhost", 0); for (ia = ne_addr_first(addr); ia && !connected; ia = ne_addr_next(addr)) connected = ne_sock_connect(sock, ia, 7777) == 0; ne_addr_destroy(addr); if (sock == NULL) return 0; else { ne_sock_close(sock); return 1; } } /* This is a regression test for neon 0.17.0 and earlier, which goes * into an infinite loop if a request with a body is sent to a server * which simply closes the connection. */ static int closed_connection(void) { int ret; /* This spawns a server process which will run the 'serve_close' * response function 200 times, then die. This guarantees that the * request eventually fails... */ CALL(fail_request(1, serve_close, NULL, 1)); /* if server died -> infinite loop was detected. */ ret = !is_alive(7777); reap_server(); ONN("server aborted, infinite loop?", ret); return OK; } static int serve_close2(ne_socket *sock, void *userdata) { int *count = userdata; *count += 1; if (*count == 1) return 0; NE_DEBUG(NE_DBG_HTTP, "Re-entered! Buggy client.\n"); CALL(discard_request(sock)); CALL(SEND_STRING(sock, RESP200 "Content-Length: 0\r\n\r\n")); return 0; } /* As closed_connection(); but check that the client doesn't retry * after receiving the EOF on the first request down a new * connection. */ static int close_not_retried(void) { int count = 0; ne_session *sess = ne_session_create("http", "localhost", 7777); CALL(spawn_server_repeat(7777, serve_close2, &count, 3)); ONN("request was retried after EOF", any_request(sess, "/foo") == NE_OK); reap_server(); ne_session_destroy(sess); return OK; } static enum { prog_error, /* error */ prog_transfer, /* doing a transfer */ prog_done /* finished. */ } prog_state = prog_transfer; static off_t prog_last = -1, prog_total; /* callback for send_progress. */ static void s_progress(void *userdata, off_t prog, off_t total) { NE_DEBUG(NE_DBG_HTTP, "progress callback: %" NE_FMT_OFF_T "/%" NE_FMT_OFF_T ".\n", prog, total); switch (prog_state) { case prog_error: case prog_done: return; case prog_transfer: if (total != prog_total) { t_context("total unexpected: %ld not %ld", total, prog_total); prog_state = prog_error; } else if (prog > total) { t_context("first progress was invalid (%ld/%ld)", prog, total); prog_state = prog_error; } else if (prog_last != -1 && prog_last > prog) { t_context("progess went backwards: %ld to %ld", prog_last, prog); prog_state = prog_error; } else if (prog_last == prog) { t_context("no progress made! %ld to %ld", prog_last, prog); prog_state = prog_error; } else if (prog == total) { prog_state = prog_done; } break; } prog_last = prog; } static ssize_t provide_progress(void *userdata, char *buf, size_t bufsiz) { int *count = userdata; if (*count >= 0 && buf != NULL) { buf[0] = 'a'; *count -= 1; return 1; } else { return 0; } } static int send_progress(void) { static int count = 200; ON(prepare_request(single_serve_string, RESP200 "Connection: close\r\n\r\n")); prog_total = 200; ne_set_progress(def_sess, s_progress, NULL); ne_set_request_body_provider(def_req, count, provide_progress, &count); #define sess def_sess ONREQ(ne_request_dispatch(def_req)); #undef sess ON(finish_request()); CALL(prog_state == prog_error); return OK; } static int read_timeout(void) { ne_session *sess; ne_request *req; time_t start, finish; int ret; CALL(make_session(&sess, sleepy_server, NULL)); /* timeout after one second. */ ne_set_read_timeout(sess, 1); req = ne_request_create(sess, "GET", "/timeout"); time(&start); ret = ne_request_dispatch(req); time(&finish); reap_server(); ONN("request succeeded, should have timed out", ret == NE_OK); ONV(ret != NE_TIMEOUT, ("request failed non-timeout error: %s", ne_get_error(sess))); ONN("timeout ignored, or very slow machine", finish - start > 3); ne_request_destroy(req); ne_session_destroy(sess); return OK; } /* expect failure code 'code', for request to given hostname and port, * without running a server. */ static int fail_noserver(const char *hostname, unsigned int port, int code) { ne_session *sess = ne_session_create("http", hostname, port); int ret = any_request(sess, "/foo"); ne_session_destroy(sess); ONV(ret == NE_OK, ("request to server at %s:%u succeded?!", hostname, port)); ONV(ret != code, ("request failed with %d not %d", ret, code)); return OK; } static int fail_lookup(void) { return fail_noserver("no.such.domain", 7777, NE_LOOKUP); } /* neon 0.23.0 to 0.23.3: if a nameserver lookup failed, subsequent * requests on the session would crash. */ static int fail_double_lookup(void) { ne_session *sess = ne_session_create("http", "nohost.example.com", 80); ONN("request did not give lookup failure", any_request(sess, "/foo") != NE_LOOKUP); ONN("second request did not give lookup failure", any_request(sess, "/bar") != NE_LOOKUP); ne_session_destroy(sess); return OK; } static int fail_connect(void) { return fail_noserver("localhost", 7777, NE_CONNECT); } /* Test that the origin server hostname is NOT resolved for a proxied * request. */ static int proxy_no_resolve(void) { ne_session *sess = ne_session_create("http", "no.such.domain", 80); int ret; ne_session_proxy(sess, "localhost", 7777); CALL(spawn_server(7777, single_serve_string, RESP200 "Content-Length: 0\r\n\r\n")); ret = any_request(sess, "/foo"); ne_session_destroy(sess); ONN("origin server name resolved when proxy used", ret == NE_LOOKUP); CALL(await_server()); return OK; } /* If the chunk size is entirely invalid, the request should be * aborted. Fails with neon <0.22; invalid chunk sizes would be * silently treated as 'zero'. */ static int fail_chunksize(void) { return fail_request(0, single_serve_string, RESP200 TE_CHUNKED "\r\n" "ZZZZZ\r\n\r\n", 0); } /* in neon <0.22, if an error occcurred whilst reading the response * body, the connection would not be closed (though this test will * succeed in neon <0.22 since it the previous test fails). */ static int abort_respbody(void) { ne_session *sess; CALL(make_session(&sess, single_serve_string, RESP200 TE_CHUNKED "\r\n" "zzz\r\n" RESP200 "Content-Length: 0\r\n\r\n")); /* connection must be aborted on the first request, since it * contains an invalid chunk size. */ ONN("invalid chunk size was accepted?", any_request(sess, "/foo") != NE_ERROR); CALL(await_server()); /* second request should fail since server has gone away. */ ONN("connection was not aborted", any_request(sess, "/foo") == NE_OK); ne_session_destroy(sess); return OK; } static int serve_abort(ne_socket *sock, void *ud) { exit(0); } /* Test that after an aborted request on a peristent connection, a * failure of the *subsequent* request is not treated as a persistent * connection timeout and retried. */ static int retry_after_abort(void) { ne_session *sess; /* Serve two responses down a single persistent connection, the * second of which is invalid and will cause the request to be * aborted. */ CALL(make_session(&sess, single_serve_string, RESP200 "Content-Length: 0\r\n\r\n" RESP200 TE_CHUNKED "\r\n" "zzzzz\r\n")); CALL(any_request(sess, "/first")); ONN("second request should fail", any_request(sess, "/second") == NE_OK); CALL(await_server()); /* spawn a server, abort the server immediately. If the * connection reset is interpreted as a p.conn timeout, a new * connection will be attempted, which will fail with * NE_CONNECT. */ CALL(spawn_server(7777, serve_abort, NULL)); ONN("third request was retried", any_request(sess, "/third") == NE_CONNECT); reap_server(); ne_session_destroy(sess); return OK; } /* Fail to parse the response status line: check the error message is * sane. Failed during 0.23-dev briefly, and possibly with 0.22.0 * too. */ static int fail_statusline(void) { ne_session *sess; int ret; CALL(make_session(&sess, single_serve_string, "Fish.\r\n")); ret = any_request(sess, "/fail"); ONV(ret != NE_ERROR, ("request failed with %d not NE_ERROR", ret)); /* FIXME: will break for i18n. */ ONV(strcmp(ne_get_error(sess), "Could not parse response status line."), ("session error was `%s'", ne_get_error(sess))); ne_session_destroy(sess); return OK; } #define LEN (9000) static int fail_long_header(void) { char resp[LEN + 500] = "HTTP/1.1 200 OK\r\n" "Server: fish\r\n"; size_t len = strlen(resp); /* add a long header */ memset(resp + len, 'a', LEN); resp[len + LEN] = '\0'; strcat(resp, "\r\n\r\n"); return invalid_response_gives_error(resp, "Line too long"); } static int fail_corrupt_chunks(void) { static const struct { const char *resp, *error; } ts[] = { /* not CRLF */ { RESP200 TE_CHUNKED "\r\n" "5\r\n" "abcdeFISH", "delimiter was invalid" }, /* short CRLF */ { RESP200 TE_CHUNKED "\r\n" "5\r\n" "abcde\n", "not read chunk delimiter" }, /* CR-notLF */ { RESP200 TE_CHUNKED "\r\n" "5\r\n" "abcde\rZZZ", "delimiter was invalid" }, { NULL, NULL } }; int n; for (n = 0; ts[n].resp; n++) CALL(invalid_response_gives_error(ts[n].resp, ts[n].error)); return OK; } static int versions(void) { ne_session *sess; CALL(make_session(&sess, single_serve_string, "HTTP/1.1 200 OK\r\n" "Content-Length: 0\r\n\r\n" "HTTP/1.0 200 OK\r\n" "Content-Length: 0\r\n\r\n")); CALL(any_request(sess, "/http11")); ONN("did not detect HTTP/1.1 compliance", ne_version_pre_http11(sess) != 0); CALL(any_request(sess, "/http10")); ONN("did not detect lack of HTTP/1.1 compliance", ne_version_pre_http11(sess) == 0); ne_session_destroy(sess); return OK; } struct cr_args { const char *method, *uri; int result; }; static void hk_createreq(ne_request *req, void *userdata, const char *method, const char *requri) { struct cr_args *args = userdata; args->result = 1; /* presume failure */ if (strcmp(args->method, method)) t_context("Hook got method %s not %s", method, args->method); else if (strcmp(args->uri, requri)) t_context("Hook got Req-URI %s not %s", requri, args->uri); else args->result = 0; } static int hook_create_req(void) { ne_session *sess; struct cr_args args; CALL(make_session(&sess, single_serve_string, EMPTY_RESP EMPTY_RESP)); ne_hook_create_request(sess, hk_createreq, &args); args.method = "GET"; args.uri = "/foo"; args.result = -1; CALL(any_request(sess, "/foo")); ONN("first hook never called", args.result == -1); if (args.result) return FAIL; args.uri = "http://localhost:7777/bar"; args.result = -1; /* force use of absoluteURI in request-uri */ ne_session_proxy(sess, "localhost", 7777); CALL(any_request(sess, "/bar")); ONN("second hook never called", args.result == -1); if (args.result) return FAIL; ne_session_destroy(sess); return OK; } static int serve_check_method(ne_socket *sock, void *ud) { char *method = ud; char buf[20]; size_t methlen = strlen(method); if (ne_sock_read(sock, buf, methlen) != (ssize_t)methlen) return -1; ONN("method corrupted", memcmp(buf, method, methlen)); return single_serve_string(sock, "HTTP/1.1 204 OK\r\n\r\n"); } /* Test that the method string passed to ne_request_create is * strdup'ed. */ static int dup_method(void) { char method[] = "FOO"; ne_session *sess; ne_request *req; CALL(make_session(&sess, serve_check_method, method)); req = ne_request_create(sess, method, "/bar"); strcpy(method, "ZZZ"); ONREQ(ne_request_dispatch(req)); ne_request_destroy(req); ne_session_destroy(sess); CALL(await_server()); return OK; } ne_test tests[] = { T(lookup_localhost), T(single_get_clength), T(single_get_eof), T(single_get_chunked), T(no_body_204), T(no_body_205), T(no_body_304), T(no_body_HEAD), T(no_body_empty_clength), T(no_body_bad_clength), T(no_headers), T(chunks), T(te_header), T(any_te_header), T(reason_phrase), T(chunk_numeric), T(chunk_extensions), T(chunk_trailers), T(chunk_oversize), T(te_over_clength), T(te_over_clength2), T(no_body_chunks), T(persist_http11), T(persist_chunked), T(persist_http10), T(persist_timeout), T(no_persist_http10), T(ptimeout_eof), T(ptimeout_eof2), T(closed_connection), T(close_not_retried), T(send_progress), T(ignore_bad_headers), T(fold_headers), T(fold_many_headers), T(multi_header), T(empty_header), T(trailing_header), T(ignore_header_case), T(ignore_header_ws), T(ignore_header_ws2), T(ignore_header_ws3), T(ignore_header_tabs), T(continued_header), T(skip_interim_1xx), T(skip_many_1xx), T(skip_1xx_hdrs), T(send_bodies), T(expect_100_once), T(unbounded_headers), T(unbounded_folding), T(blank_response), T(not_http), T(fail_eof_continued), T(fail_eof_headers), T(fail_eof_chunk), T(fail_eof_badclen), T(fail_long_header), T(fail_corrupt_chunks), T(read_timeout), T(fail_lookup), T(fail_double_lookup), T(fail_connect), T(proxy_no_resolve), T(fail_chunksize), T(abort_respbody), T(retry_after_abort), T(fail_statusline), T(dup_method), T(versions), T(hook_create_req), T(NULL) }; tla-1.3.5+dfsg/src/libneon/test/expired.pem0000644000175000017500000000223010457621776017310 0ustar useruser-----BEGIN CERTIFICATE----- MIIDODCCAuKgAwIBAgIBADANBgkqhkiG9w0BAQQFADCBoTELMAkGA1UEBhMCR0Ix FzAVBgNVBAgTDkNhbWJyaWRnZXNoaXJlMRIwEAYDVQQHEwlDYW1icmlkZ2UxGjAY BgNVBAoTEU5lb24gSGFja2VycyBMdGQuMRUwEwYDVQQLEwxOZW9uIFFBIERlcHQx EjAQBgNVBAMTCWxvY2FsaG9zdDEeMBwGCSqGSIb3DQEJARYPbmVvbkB3ZWJkYXYu b3JnMB4XDTAyMDEyMTIwMzkwNFoXDTAyMDEzMTIwMzkwNFowgaExCzAJBgNVBAYT AkdCMRcwFQYDVQQIEw5DYW1icmlkZ2VzaGlyZTESMBAGA1UEBxMJQ2FtYnJpZGdl MRowGAYDVQQKExFOZW9uIEhhY2tlcnMgTHRkLjEVMBMGA1UECxMMTmVvbiBRQSBE ZXB0MRIwEAYDVQQDEwlsb2NhbGhvc3QxHjAcBgkqhkiG9w0BCQEWD25lb25Ad2Vi ZGF2Lm9yZzBcMA0GCSqGSIb3DQEBAQUAA0sAMEgCQQDzRU5sZ8+CWQPvPkqJw9Kl oEgT2FqzZR9RT/qbJuRBmRphiRr0g7JOh5Mr7LXaKShedFLhGidutyKKwIZJnRht AgMBAAGjggEBMIH+MB0GA1UdDgQWBBRFA3ktzHSuD9uB6mJOWoElmOtknzCBzgYD VR0jBIHGMIHDgBRFA3ktzHSuD9uB6mJOWoElmOtkn6GBp6SBpDCBoTELMAkGA1UE BhMCR0IxFzAVBgNVBAgTDkNhbWJyaWRnZXNoaXJlMRIwEAYDVQQHEwlDYW1icmlk Z2UxGjAYBgNVBAoTEU5lb24gSGFja2VycyBMdGQuMRUwEwYDVQQLEwxOZW9uIFFB IERlcHQxEjAQBgNVBAMTCWxvY2FsaG9zdDEeMBwGCSqGSIb3DQEJARYPbmVvbkB3 ZWJkYXYub3JnggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEEBQADQQBDSFbe 9EjP+IyZ4vhJSk66gLSN8CnafoGm5JHpNOHy5gWLh7j0a/dxWRd4gpoBYBB6Y9rO YV6Eq3njdj0gu+NN -----END CERTIFICATE----- tla-1.3.5+dfsg/src/libneon/test/basic.c0000644000175000017500000001402410457621776016376 0ustar useruser/* Tests for high-level HTTP interface (ne_basic.h) Copyright (C) 2002-2004, Joe Orton This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #include "config.h" #include #ifdef HAVE_STDLIB_H #include #endif #ifdef HAVE_UNISTD_H #include #endif #include #include "ne_basic.h" #include "tests.h" #include "child.h" #include "utils.h" static int content_type(void) { int n; static const struct { const char *value, *type, *subtype, *charset; } ctypes[] = { { "foo/bar", "foo", "bar", NULL }, { "foo/bar ", "foo", "bar", NULL }, { "application/xml", "application", "xml", NULL }, /* text/ subtypes default to charset ISO-8859-1. */ { "text/lemon", "text", "lemon", "ISO-8859-1" }, #undef TXU #define TXU "text", "xml", "utf-8" /* 2616 doesn't *say* that charset can be quoted, but bets are * that some servers do it anyway. */ { "text/xml; charset=utf-8", TXU }, { "text/xml; charset=utf-8; foo=bar", TXU }, { "text/xml;charset=utf-8", TXU }, { "text/xml ;charset=utf-8", TXU }, { "text/xml;charset=utf-8;foo=bar", TXU }, { "text/xml; foo=bar; charset=utf-8", TXU }, { "text/xml; foo=bar; charset=utf-8; bar=foo", TXU }, { "text/xml; charset=\"utf-8\"", TXU }, { "text/xml; charset='utf-8'", TXU }, { "text/xml; foo=bar; charset=\"utf-8\"; bar=foo", TXU }, #undef TXU /* badly quoted charset should come out as NULL */ { "foo/lemon; charset=\"utf-8", "foo", "lemon", NULL }, { NULL } }; for (n = 0; ctypes[n].value != NULL; n++) { ne_content_type ct = {0}; ne_content_type_handler(&ct, ctypes[n].value); ONV(strcmp(ct.type, ctypes[n].type), ("for `%s': type was `%s'", ctypes[n].value, ct.type)); ONV(strcmp(ct.subtype, ctypes[n].subtype), ("for `%s': subtype was `%s'", ctypes[n].value, ct.subtype)); ONV(ctypes[n].charset && ct.charset == NULL, ("for `%s': charset unset", ctypes[n].value)); ONV(ctypes[n].charset == NULL && ct.charset != NULL, ("for `%s': unexpected charset `%s'", ctypes[n].value, ct.charset)); ONV(ctypes[n].charset && ct.charset && strcmp(ctypes[n].charset, ct.charset), ("for `%s': charset was `%s'", ctypes[n].value, ct.charset)); NE_FREE(ct.value); } return OK; } /* Do ranged GET for range 'start' to 'end'; with 'resp' as response. * If 'fail' is non-NULL, expect ne_get_range to fail, and fail the * test with given message if it doesn't. */ static int do_range(off_t start, off_t end, const char *fail, char *resp) { ne_session *sess; ne_content_range range = {0}; int fd, ret; CALL(make_session(&sess, single_serve_string, resp)); range.start = start; range.end = end; fd = open("/dev/null", O_WRONLY); ret = ne_get_range(sess, "/foo", &range, fd); close(fd); CALL(await_server()); if (fail) { #if 0 t_warning("error was %s", ne_get_error(sess)); #endif ONV(ret == NE_OK, ("%s", fail)); } else { ONREQ(ret); } ne_session_destroy(sess); return OK; } static int get_range(void) { return do_range(1, 10, NULL, "HTTP/1.1 206 Widgets\r\n" "Connection: close\r\n" "Content-Range: bytes 1-10\r\n" "Content-Length: 10\r\n\r\nabcdefghij"); } static int fail_range_length(void) { return do_range(1, 10, "range response length mismatch should fail", "HTTP/1.1 206 Widgets\r\n" "Connection: close\r\n" "Content-Range: bytes 1-2\r\n" "Content-Length: 2\r\n\r\nab"); } static int fail_range_units(void) { return do_range(1, 2, "range response units check should fail", "HTTP/1.1 206 Widgets\r\n" "Connection: close\r\n" "Content-Range: fish 1-2\r\n" "Content-Length: 2\r\n\r\nab"); } static int fail_range_notrange(void) { return do_range(1, 2, "non-ranged response should fail", "HTTP/1.1 200 Widgets\r\n" "Connection: close\r\n" "Content-Range: bytes 1-2\r\n" "Content-Length: 2\r\n\r\nab"); } static int fail_range_unsatify(void) { return do_range(1, 2, "unsatisfiable range should fail", "HTTP/1.1 416 No Go\r\n" "Connection: close\r\n" "Content-Length: 2\r\n\r\nab"); } static int dav_capabilities(void) { static const struct { const char *hdrs; unsigned int class1, class2, exec; } caps[] = { { "DAV: 1,2\r\n", 1, 1, 0 }, { "DAV: 1 2\r\n", 0, 0, 0 }, /* these aren't strictly legal DAV: headers: */ { "DAV: 2,1\r\n", 1, 1, 0 }, { "DAV: 1, 2 \r\n", 1, 1, 0 }, { "DAV: 1\r\nDAV:2\r\n", 1, 1, 0 }, { NULL, 0, 0, 0 } }; char resp[BUFSIZ]; int n; for (n = 0; caps[n].hdrs != NULL; n++) { ne_server_capabilities c = {0}; ne_session *sess; ne_snprintf(resp, BUFSIZ, "HTTP/1.0 200 OK\r\n" "Connection: close\r\n" "%s" "\r\n", caps[n].hdrs); CALL(make_session(&sess, single_serve_string, resp)); ONREQ(ne_options(sess, "/foo", &c)); ONV(c.dav_class1 != caps[n].class1, ("class1 was %d not %d", c.dav_class1, caps[n].class1)); ONV(c.dav_class2 != caps[n].class2, ("class2 was %d not %d", c.dav_class2, caps[n].class2)); ONV(c.dav_executable != caps[n].exec, ("class2 was %d not %d", c.dav_executable, caps[n].exec)); CALL(await_server()); ne_session_destroy(sess); } return OK; } ne_test tests[] = { T(lookup_localhost), T(content_type), T(get_range), T(fail_range_length), T(fail_range_units), T(fail_range_notrange), T(fail_range_unsatify), T(dav_capabilities), T(NULL) }; tla-1.3.5+dfsg/src/libneon/test/redirect.c0000644000175000017500000001135510457621776017122 0ustar useruser/* Tests for 3xx redirect interface (ne_redirect.h) Copyright (C) 2002-2003, Joe Orton This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #include "config.h" #include #ifdef HAVE_STDLIB_H #include #endif #ifdef HAVE_UNISTD_H #include #endif #include "ne_redirect.h" #include "tests.h" #include "child.h" #include "utils.h" struct redir_args { int code; const char *dest; const char *path; }; static int serve_redir(ne_socket *sock, void *ud) { struct redir_args *args = ud; char buf[BUFSIZ]; CALL(discard_request(sock)); ne_snprintf(buf, BUFSIZ, "HTTP/1.0 %d Get Ye Away\r\n" "Content-Length: 0\r\n" "Location: %s\r\n\n", args->code, args->dest); SEND_STRING(sock, buf); return OK; } /* Run a request to 'path' and retrieve the redirect destination to * *redir. */ static int process_redir(ne_session *sess, const char *path, const ne_uri **redir) { ONN("did not get NE_REDIRECT", any_request(sess, path) != NE_REDIRECT); *redir = ne_redirect_location(sess); return OK; } static int check_redir(struct redir_args *args, const char *expect) { ne_session *sess; const ne_uri *loc; char *unp; CALL(make_session(&sess, serve_redir, args)); ne_redirect_register(sess); CALL(process_redir(sess, args->path, &loc)); ONN("redirect location was NULL", loc == NULL); unp = ne_uri_unparse(loc); ONV(strcmp(unp, expect), ("redirected to `%s' not `%s'", unp, expect)); ne_free(unp); ne_session_destroy(sess); CALL(await_server()); return OK; } #define DEST "http://foo.com/blah/blah/bar" #define PATH "/redir/me" static int simple(void) { struct redir_args args[] = { {301, DEST, PATH}, {302, DEST, PATH}, {303, DEST, PATH}, {307, DEST, PATH}, {0, NULL, NULL} }; int n; for (n = 0; args[n].code; n++) CALL(check_redir(&args[n], DEST)); return OK; } /* check that a non-absoluteURI is qualified properly */ static int non_absolute(void) { struct redir_args args = {302, "/foo/bar/blah", PATH}; return check_redir(&args, "http://localhost:7777/foo/bar/blah"); } static int relative_1(void) { struct redir_args args = {302, "norman", "/foo/bar"}; return check_redir(&args, "http://localhost:7777/foo/norman"); } static int relative_2(void) { struct redir_args args = {302, "wishbone", "/foo/bar/"}; return check_redir(&args, "http://localhost:7777/foo/bar/wishbone"); } #if 0 /* could implement failure on self-referential redirects, but * realistically, the application must implement a max-redirs count * check, so it's kind of redundant. Mozilla takes this approach. */ static int fail_loop(void) { ne_session *sess; CALL(make_session(&sess, serve_redir, "http://localhost:7777/foo/bar")); ne_redirect_register(sess); ONN("followed looping redirect", any_request(sess, "/foo/bar") != NE_ERROR); ne_session_destroy(sess); return OK; } #endif /* ensure that ne_redirect_location returns NULL when no redirect has * been encountered, or redirect hooks aren't registered. */ static int no_redirect(void) { ne_session *sess = ne_session_create("http", "localhost", 7777); const ne_uri *loc; ONN("redirect non-NULL before register", ne_redirect_location(sess)); ne_redirect_register(sess); ONN("initial redirect non-NULL", ne_redirect_location(sess)); CALL(spawn_server(7777, single_serve_string, "HTTP/1.0 200 OK\r\n\r\n\r\n")); ONREQ(any_request(sess, "/noredir")); CALL(await_server()); ONN("redirect non-NULL after non-redir req", ne_redirect_location(sess)); CALL(spawn_server(7777, single_serve_string, "HTTP/1.0 302 Get Ye Away\r\n" "Location: /blah\r\n" "\r\n")); CALL(process_redir(sess, "/foo", &loc)); CALL(await_server()); ne_session_destroy(sess); return OK; } ne_test tests[] = { T(lookup_localhost), T(simple), T(non_absolute), T(relative_1), T(relative_2), T(no_redirect), T(NULL) }; tla-1.3.5+dfsg/src/libneon/test/props.c0000644000175000017500000004424210457621776016465 0ustar useruser/* Tests for property handling Copyright (C) 2002-2004, Joe Orton This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #include "config.h" #include #ifdef HAVE_STDLIB_H #include #endif #ifdef HAVE_UNISTD_H #include #endif #include "ne_props.h" #include "tests.h" #include "child.h" #include "utils.h" static const ne_propname p_alpha = {"DAV:", "alpha"}, p_beta = {"http://webdav.org/random/namespace", "beta"}, p_delta = {NULL, "delta"}; /* Tests little except that ne_proppatch() doesn't segfault. */ static int patch_simple(void) { ne_session *sess; ne_proppatch_operation ops[] = { { &p_alpha, ne_propset, "fish" }, { &p_beta, ne_propremove, NULL }, { NULL, ne_propset, NULL } }; CALL(make_session(&sess, single_serve_string, "HTTP/1.1 200 Goferit\r\n" "Connection: close\r\n\r\n")); ONREQ(ne_proppatch(sess, "/fish", ops)); ne_session_destroy(sess); return await_server(); } #define RESP207 "HTTP/1.0 207 Stuff\r\n" "Server: foo\r\n\r\n" static void dummy_results(void *ud, const char *href, const ne_prop_result_set *rset) { NE_DEBUG(NE_DBG_HTTP, "dummy_results.\n"); } /* Regression tests for propfind bodies which caused segfaults. */ static int regress(void) { static const char *bodies[] = { RESP207 "\n" "" "" "" "", /* segfaults with neon <= 0.23.5 */ RESP207 "" "/foo/" "" "HTTP/1.1 404 Not Found" "", /* format string handling with neon <= 0.24.4 */ RESP207 "" "/foo/" "" "%s%s%s%s" "", NULL, }; ne_session *sess; int n; for (n = 0; bodies[n] != NULL; n++) { CALL(make_session(&sess, single_serve_string, (void *)bodies[n])); ne_simple_propfind(sess, "/", 0, NULL, dummy_results, NULL); ne_session_destroy(sess); CALL(await_server()); } return OK; } static int patch_regress(void) { static const char *bodies[] = { /* format string handling bugs with neon <= 0.24.4 */ RESP207 "" "/foo/" "HTTP/1.1 500 Bad Voodoo" "%s%s%s%s" "", RESP207 "" "/foo/" "HTTP/1.1 %s%s%s%s", NULL }; ne_session *sess; int n; static const ne_propname pn = { "DAV:", "foobar" }; ne_proppatch_operation pops[] = { { &pn, ne_propset, "fish" }, { NULL, ne_propset, NULL } }; for (n = 0; bodies[n] != NULL; n++) { CALL(make_session(&sess, single_serve_string, (void *)bodies[n])); ne_proppatch(sess, "/", pops); ne_session_destroy(sess); CALL(await_server()); } return OK; } static int pstat_count; /* tos_*: set of 207 callbacks which serialize the data back into a * text stream, which can be easily checked for correctness. */ static void *tos_startresp(void *buf, const char *href) { ne_buffer_concat(buf, "start-resp[", href, "];", NULL); pstat_count = 0; return ne_strdup(href); } static void tos_status_descr(ne_buffer *buf, const ne_status *status, const char *description) { if (status) { char s[50]; ne_snprintf(s, sizeof s, "-status={%d %s}", status->code, status->reason_phrase); ne_buffer_zappend(buf, s); } if (description) ne_buffer_concat(buf, "-descr={", description, "}", NULL); } static void tos_endresp(void *buf, void *response, const ne_status *status, const char *description) { char *href = response; ne_buffer_concat(buf, "end-resp[", href, "]", NULL); ne_free(href); tos_status_descr(buf, status, description); ne_buffer_zappend(buf, ";"); } static void *tos_startpstat(void *buf, void *resphref) { char num[20], *href; sprintf(num, "-%d", ++pstat_count); href = ne_concat(resphref, num, NULL); ne_buffer_concat(buf, "start-pstat[", href, "];", NULL); return href; } static void tos_endpstat(void *buf, void *href, const ne_status *status, const char *description) { ne_buffer_concat(buf, "end-pstat[", href, "]", NULL); tos_status_descr(buf, status, description); ne_buffer_zappend(buf, ";"); ne_free(href); } struct propctx { ne_207_parser *p207; ne_buffer *buf; }; #define STATE_myprop (NE_PROPS_STATE_TOP) static int tos_startprop(void *userdata, int parent, const char *nspace, const char *name, const char **atts) { if (parent == NE_207_STATE_PROP && strcmp(nspace, "DAV:") == 0 && (strcmp(name, "propone") == 0 || strcmp(name, "proptwo") == 0)) { /* Handle this! */ struct propctx *ctx = userdata; char *resphref = ne_207_get_current_response(ctx->p207); char *pstathref = ne_207_get_current_propstat(ctx->p207); ne_buffer_concat(ctx->buf, "start-prop[", resphref, ",", pstathref, ",", name, "];", NULL); return STATE_myprop; } else { return NE_XML_DECLINE; } } static int tos_cdata(void *userdata, int state, const char *cdata, size_t len) { struct propctx *ctx = userdata; ne_buffer_zappend(ctx->buf, "cdata-prop["); ne_buffer_append(ctx->buf, cdata, len); ne_buffer_zappend(ctx->buf, "];"); return 0; } static int tos_endprop(void *userdata, int state, const char *nspace, const char *name) { struct propctx *ctx = userdata; ne_buffer_concat(ctx->buf, "end-prop[", name, "];", NULL); return 0; } static int run_207_response(char *resp, const char *expected) { ne_buffer *buf = ne_buffer_create(); ne_session *sess = ne_session_create("http", "localhost", 7777); ne_xml_parser *p = ne_xml_create(); ne_207_parser *p207 = ne_207_create(p, buf); ne_request *req = ne_request_create(sess, "PROPFIND", "/foo"); struct propctx ctx; ne_add_response_body_reader(req, ne_accept_207, ne_xml_parse_v, p); ne_207_set_response_handlers(p207, tos_startresp, tos_endresp); ne_207_set_propstat_handlers(p207, tos_startpstat, tos_endpstat); ctx.buf = buf; ctx.p207 = p207; ne_xml_push_handler(p, tos_startprop, tos_cdata, tos_endprop, &ctx); CALL(spawn_server(7777, single_serve_string, resp)); ONREQ(ne_request_dispatch(req)); CALL(await_server()); ONV(!ne_xml_valid(p), ("response body was invalid: %s", ne_xml_get_error(p))); ONV(strcmp(buf->data, expected), ("comparison failed.\n" "expected string: `%s'\n" "got string: `%s'", expected, buf->data)); ne_buffer_destroy(buf); ne_207_destroy(p207); ne_xml_destroy(p); ne_request_destroy(req); ne_session_destroy(sess); return OK; } /* Macros for easily writing a 207 response body; all expand to * a string literal. */ #define MULTI_207(x) "HTTP/1.0 207 Foo\r\nConnection: close\r\n\r\n" \ "\r\n" \ "" x "" #define RESP_207(href, x) "" href "" x \ "" #define PSTAT_207(x) "" x "" #define STAT_207(s) "HTTP/1.1 " s "" #define DESCR_207(d) "" d "" #define DESCR_REM "The end of the world, as we know it" #define PROPS_207(x) "" x "" #define APROP_207(n, c) "" c "" /* Tests for the 207 interface: send a 207 response body, compare the * re-serialized string returned with that expected. */ static int two_oh_seven(void) { static char *ts[][2] = { { MULTI_207(RESP_207("/foo", "")), "start-resp[/foo];end-resp[/foo];" }, /* test for response status handling */ { MULTI_207(RESP_207("/bar", STAT_207("200 OK"))), "start-resp[/bar];end-resp[/bar]-status={200 OK};" }, /* test that empty description == NULL description argument */ { MULTI_207(RESP_207("/bar", STAT_207("200 OK") DESCR_207(""))), "start-resp[/bar];end-resp[/bar]-status={200 OK};" }, /* test multiple responses */ { MULTI_207(RESP_207("/hello/world", STAT_207("200 OK")) RESP_207("/foo/bar", STAT_207("999 French Fries"))), "start-resp[/hello/world];end-resp[/hello/world]-status={200 OK};" "start-resp[/foo/bar];end-resp[/foo/bar]" "-status={999 French Fries};" }, /* test multiple propstats in mulitple responses */ { MULTI_207(RESP_207("/al/pha", PSTAT_207(STAT_207("321 Une")) PSTAT_207(STAT_207("432 Deux")) PSTAT_207(STAT_207("543 Trois"))) RESP_207("/be/ta", PSTAT_207(STAT_207("787 Quatre")) PSTAT_207(STAT_207("878 Cinq")))), "start-resp[/al/pha];" "start-pstat[/al/pha-1];end-pstat[/al/pha-1]-status={321 Une};" "start-pstat[/al/pha-2];end-pstat[/al/pha-2]-status={432 Deux};" "start-pstat[/al/pha-3];end-pstat[/al/pha-3]-status={543 Trois};" "end-resp[/al/pha];" "start-resp[/be/ta];" "start-pstat[/be/ta-1];end-pstat[/be/ta-1]-status={787 Quatre};" "start-pstat[/be/ta-2];end-pstat[/be/ta-2]-status={878 Cinq};" "end-resp[/be/ta];" }, /* test that incomplete responses are completely ignored. */ { MULTI_207("" RESP_207("/", STAT_207("123 Hoorah")) "" "hello" "" RESP_207("/bar", STAT_207("200 OK"))), "start-resp[/];end-resp[/]-status={123 Hoorah};" "start-resp[/bar];end-resp[/bar]-status={200 OK};" }, /* tests for propstat status */ { MULTI_207(RESP_207("/pstat", PSTAT_207("" STAT_207("666 Doomed")))), "start-resp[/pstat];start-pstat[/pstat-1];" "end-pstat[/pstat-1]-status={666 Doomed};end-resp[/pstat];" }, { MULTI_207(RESP_207("/pstat", PSTAT_207(""))), "start-resp[/pstat];start-pstat[/pstat-1];" "end-pstat[/pstat-1];end-resp[/pstat];" }, /* tests for responsedescription handling */ { MULTI_207(RESP_207("/bar", STAT_207("200 OK") DESCR_207(DESCR_REM))), "start-resp[/bar];end-resp[/bar]-status={200 OK}" "-descr={" DESCR_REM "};" }, { MULTI_207(RESP_207("/bar", PSTAT_207(STAT_207("456 Too Hungry") DESCR_207("Not enough food available")) STAT_207("200 OK") DESCR_207("Not " DESCR_REM))), "start-resp[/bar];" "start-pstat[/bar-1];end-pstat[/bar-1]-status={456 Too Hungry}" "-descr={Not enough food available};" "end-resp[/bar]-status={200 OK}-descr={Not " DESCR_REM "};" }, /* intermingle some random elements and cdata to make sure * they are ignored. */ { MULTI_207("blargl" RESP_207("/bar", "" PSTAT_207("blergl") STAT_207("200 OK") "foop" DESCR_207(DESCR_REM) "carroon") "carapi"), "start-resp[/bar];start-pstat[/bar-1];end-pstat[/bar-1];" "end-resp[/bar]-status={200 OK}-descr={" DESCR_REM "};" }, /* test for properties within a 207. */ { MULTI_207(RESP_207("/alpha", PSTAT_207(PROPS_207( APROP_207("propone", "hello") APROP_207("proptwo", "foobar")) STAT_207("200 OK")))), "start-resp[/alpha];start-pstat[/alpha-1];" "start-prop[/alpha,/alpha-1,propone];cdata-prop[hello];" "end-prop[propone];" "start-prop[/alpha,/alpha-1,proptwo];cdata-prop[foobar];" "end-prop[proptwo];" "end-pstat[/alpha-1]-status={200 OK};end-resp[/alpha];" } }; size_t n; for (n = 0; n < sizeof(ts)/sizeof(ts[0]); n++) CALL(run_207_response(ts[n][0], ts[n][1])); return OK; } /* Serialize propfind result callbacks into a string */ static int simple_iterator(void *buf, const ne_propname *name, const char *value, const ne_status *st) { char code[20]; ne_buffer_concat(buf, "prop:[{", name->nspace, ",", name->name, "}=", NULL); if (value) ne_buffer_concat(buf, "'", value, "'", NULL); else ne_buffer_zappend(buf, "#novalue#"); sprintf(code, ":{%d ", st->code); if (st->reason_phrase) ne_buffer_concat(buf, code, st->reason_phrase, "}];", NULL); else ne_buffer_concat(buf, code, "#noreason#}];", NULL); return 0; } static void simple_results(void *buf, const char *href, const ne_prop_result_set *rset) { ne_buffer_concat(buf, "results(", href, ",", NULL); ne_propset_iterate(rset, simple_iterator, buf); ne_buffer_zappend(buf, ")//"); } static int diffcmp(const char *expected, const char *actual) { size_t n; if (!strcmp(expected, actual)) return OK; for (n = 0; expected[n] && actual[n]; n++) { if (expected[n] != actual[n]) { t_context("difference at byte %" NE_FMT_SIZE_T ": " "`%.6s...' not `%.6s...'", n, actual+n, expected+n); break; } } return FAIL; } static int run_simple_propfind(const ne_propname *props, char *resp, int depth, const char *expected) { ne_session *sess = ne_session_create("http", "localhost", 7777); ne_buffer *buf = ne_buffer_create(); CALL(spawn_server(7777, single_serve_string, resp)); ONREQ(ne_simple_propfind(sess, "/propfind", depth, props, simple_results, buf)); CALL(await_server()); CALL(diffcmp(expected, buf->data)); ne_buffer_destroy(buf); ne_session_destroy(sess); return OK; } /* a PROPFIND response body for the {DAV:}fishbone property, using * given property value and status. */ #define FISHBONE_RESP(value, status) MULTI_207(RESP_207("/foop", \ PSTAT_207(PROPS_207(APROP_207("fishbone", value)) \ STAT_207(status)))) static int pfind_simple(void) { static const struct { char *resp; const char *expected; int depth, pset; } ts[] = { /* simple single property. */ { FISHBONE_RESP("hello, world", "212 Well OK"), "results(/foop,prop:[{DAV:,fishbone}='hello, world':{212 Well OK}];)//", 0, 0 }, /* property with some nested elements. */ { FISHBONE_RESP("this is a property fish value", "299 Just About OK"), "results(/foop,prop:[{DAV:,fishbone}=" "'this is a property " "fish value':" "{299 Just About OK}];)//", 0, 0 }, /* failed to fetch a property. */ { FISHBONE_RESP("property value is ignored", "404 Il n'ya pas de property"), "results(/foop,prop:[{DAV:,fishbone}=#novalue#:" "{404 Il n'ya pas de property}];)//", 0, 0 }, #if 0 /* propstat missing status should be ignored; if a response contains no * valid propstats, it should also be ignored. */ { MULTI_207(RESP_207("/alpha", PSTAT_207(APROP_207("fishbone", "unseen"))) RESP_207("/beta", PSTAT_207(APROP_207("fishbone", "hello, world") STAT_207("200 OK")))), "results(/beta,prop:[{DAV:,fishbone}='hello, world':{200 OK}];)//", 0, 0}, #endif /* props on several resources */ { MULTI_207(RESP_207("/alpha", PSTAT_207(PROPS_207(APROP_207("fishbone", "strike one")) STAT_207("234 First is OK"))) RESP_207("/beta", PSTAT_207(PROPS_207(APROP_207("fishbone", "strike two")) STAT_207("256 Second is OK")))), "results(/alpha,prop:[{DAV:,fishbone}='strike one':{234 First is OK}];)//" "results(/beta,prop:[{DAV:,fishbone}='strike two':{256 Second is OK}];)//", 0, 0} }; const ne_propname pset1[] = { { "DAV:", "fishbone", }, { NULL, NULL } }; size_t n; for (n = 0; n < sizeof(ts)/sizeof(ts[0]); n++) { const ne_propname *pset = pset1; CALL(run_simple_propfind(pset, ts[n].resp, ts[n].depth, ts[n].expected)); } return OK; } ne_test tests[] = { T(two_oh_seven), T(patch_simple), T(pfind_simple), T(regress), T(patch_regress), T(NULL) }; tla-1.3.5+dfsg/src/libneon/test/string-tests.c0000644000175000017500000002763310457621776017775 0ustar useruser/* String handling tests Copyright (C) 2001-2003, Joe Orton This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #include "config.h" #ifdef HAVE_STDLIB_H #include #endif #ifdef HAVE_STRING_H #include #endif #ifdef HAVE_ERRNO_H #include /* for the ENOENT definitions in str_errors */ #endif #include "ne_string.h" #include "tests.h" #undef ONCMP #define ONCMP(a,b) ONV(strcmp(a, b), \ ("result was [%s] not [%s]", a, b)) static int simple(void) { ne_buffer *s = ne_buffer_create(); ON(s == NULL); ne_buffer_zappend(s, "abcde"); ONCMP(s->data, "abcde"); ON(ne_buffer_size(s) != 5); ne_buffer_destroy(s); return OK; } static int buf_concat(void) { ne_buffer *s = ne_buffer_create(); ON(s == NULL); ne_buffer_concat(s, "a", "b", "c", "d", "e", "f", "g", NULL); ONCMP(s->data, "abcdefg"); ON(ne_buffer_size(s) != 7); ne_buffer_destroy(s); return OK; } static int buf_concat2(void) { #define RES "alphabetagammadeltaepsilonetatheta" ne_buffer *s = ne_buffer_create(); ON(s == NULL); ne_buffer_concat(s, "alpha", "beta", "gamma", "delta", "epsilon", "eta", "theta", NULL); ONCMP(s->data, RES); ON(ne_buffer_size(s) != strlen(RES)); ne_buffer_destroy(s); return OK; } static int buf_concat3(void) { ne_buffer *s = ne_buffer_create(); ON(s == NULL); ne_buffer_zappend(s, "foobar"); ne_buffer_concat(s, "norman", NULL); ONCMP(s->data, "foobarnorman"); ON(ne_buffer_size(s) != 12); ne_buffer_destroy(s); return OK; } static int append(void) { ne_buffer *s = ne_buffer_create(); ON(s == NULL); ne_buffer_append(s, "a", 1); ne_buffer_append(s, "b", 1); ne_buffer_append(s, "c", 1); ONCMP(s->data, "abc"); ON(ne_buffer_size(s) != 3); ne_buffer_destroy(s); return OK; } static int grow(void) { ne_buffer *s = ne_buffer_ncreate(2); ON(s == NULL); ne_buffer_append(s, "a", 1); ne_buffer_grow(s, 4); ONCMP(s->data, "a"); ne_buffer_destroy(s); return OK; } static int alter(void) { ne_buffer *s = ne_buffer_create(); char *d; ON(s == NULL); ne_buffer_zappend(s, "abcdefg"); d = s->data; ON(d == NULL); d[2] = '\0'; ne_buffer_altered(s); ONCMP(s->data, "ab"); ON(ne_buffer_size(s) != 2); ne_buffer_zappend(s, "hijkl"); ONCMP(s->data, "abhijkl"); ne_buffer_destroy(s); return OK; } /* Macros for testing ne_token. */ #define TEST(res) do { \ char *tok = ne_token(&pnt, ','); \ ONN(res ": return", tok == NULL); \ ONN(res ": compare", strcmp(tok, (res))); \ ONN(res ": modify", pnt == NULL); \ } while (0) #define LASTTEST(res) do { \ char *tok = ne_token(&pnt, ','); \ ONN(res ": last return", tok == NULL); \ ONN(res ": last compare", strcmp(tok, (res))); \ ONN(res ": last modify", pnt != NULL); \ } while (0) #define QTEST(res) do { \ char *tok = ne_qtoken(&pnt, ',', QUOTES); \ ONN(res ": return", tok == NULL); \ ONN(res ": compare", strcmp(tok, (res))); \ ONN(res ": modify", pnt == NULL); \ } while (0) #define QLASTTEST(res) do { \ char *tok = ne_qtoken(&pnt, ',', QUOTES); \ ONN(res ": last return", tok == NULL); \ ONN(res ": last compare", strcmp(tok, (res))); \ ONN(res ": last modify", pnt != NULL); \ } while (0) static int token1(void) { char *str = ne_strdup("a,b,c,d"), *pnt = str; TEST("a"); TEST("b"); TEST("c"); LASTTEST("d"); ne_free(str); return OK; } static int token2(void) { char *str = ne_strdup("norman,fishing, elsewhere"), *pnt = str; TEST("norman"); TEST("fishing"); LASTTEST(" elsewhere"); ne_free(str); return OK; } static int nulls(void) { char *str = ne_strdup("alpha,,gamma"), *pnt = str; TEST("alpha"); TEST(""); LASTTEST("gamma"); ne_free(str); pnt = str = ne_strdup(",,,wooo"); TEST(""); TEST(""); TEST(""); LASTTEST("wooo"); ne_free(str); pnt = str = ne_strdup("wooo,,,"); TEST("wooo"); TEST(""); TEST(""); LASTTEST(""); ne_free(str); return OK; } static int empty(void) { char *str = ne_strdup(""), *pnt = str; LASTTEST(""); ne_free(str); return OK; } #undef QUOTES #define QUOTES "'" static int quoted(void) { char *str = ne_strdup("alpha,'beta, a fish called HELLO!?',sandwiches"); char *pnt = str; QTEST("alpha"); QTEST("'beta, a fish called HELLO!?'"); QLASTTEST("sandwiches"); ne_free(str); return OK; } static int badquotes(void) { char *str = ne_strdup("alpha,'blah"), *pnt = str; QTEST("alpha"); ON(ne_qtoken(&pnt, ',', QUOTES) != NULL); ne_free(str); return OK; } /* for testing ne_shave. */ #undef TEST #define TEST(str, ws, res) do { \ char *s = ne_strdup((str)); \ char *r = ne_shave(s, (ws)); \ ONN("[" str "]", strcmp(r, (res))); \ ne_free(s); \ } while (0) static int shave(void) { TEST(" b ", " ", "b"); TEST("b", " ", "b"); TEST(" b ", " ", "b"); TEST("--bbb-----", "-", "bbb"); TEST("hello, world ", " ", "hello, world"); TEST("<<><<<><<<<<><<", "<>", "this is foo"); TEST("09809812342347I once saw an helicopter0012312312398", "0123456789", "I once saw an helicopter"); return OK; } /* Regression test for ne_shave call which should produce an empty * string. */ static int shave_regress(void) { TEST("\"\"", "\"", ""); return OK; } /* Test the ne_token/ne_shave combination. */ #undef TEST #undef LASTTEST #define TEST(res) do { \ char *tok = ne_token(&pnt, ','); \ ONN(res ": return", tok == NULL); \ tok = ne_shave(tok, " "); \ ONN(res ": shave", tok == NULL); \ ONN(res ": compare", strcmp(tok, (res))); \ ONN(res ": modify", pnt == NULL); \ } while (0) #define LASTTEST(res) do { \ char *tok = ne_token(&pnt, ','); \ ONN(res ": last return", tok == NULL); \ tok = ne_shave(tok, " "); \ ONN(res ": last shave", tok == NULL); \ ONN(res ": last compare", strcmp(tok, (res))); \ ONN(res ": last modify", pnt != NULL); \ } while (0) /* traditional use of ne_token/ne_shave. */ static int combo(void) { char *str = ne_strdup(" fred , mary, jim , alice, david"), *pnt = str; TEST("fred"); TEST("mary"); TEST("jim"); TEST("alice"); LASTTEST("david"); ne_free(str); return 0; } static int concat(void) { #define CAT(res, args) do { char *str = ne_concat args; \ ONCMP(str, res); \ ne_free(str); } while (0) CAT("alphabeta", ("alpha", "beta", NULL)); CAT("alpha", ("alpha", "", "", NULL)); CAT("", ("", NULL)); CAT("", ("", "", "", NULL)); CAT("alpha", ("", "a", "lph", "", "a", NULL)); return OK; } static int str_errors(void) { char expect[200], actual[200]; strncpy(expect, strerror(ENOENT), sizeof(expect)); ONN("ne_strerror did not return passed-in buffer", ne_strerror(ENOENT, actual, sizeof(actual)) != actual); ONV(strcmp(expect, actual), ("error from ENOENT was `%s' not `%s'", actual, expect)); /* Test truncated error string is still NUL-terminated. */ ne_strerror(ENOENT, actual, 6); ONN("truncated string had wrong length", strlen(actual) != 5); return OK; } static int strnzcpy(void) { char buf[5]; ne_strnzcpy(buf, "abcdefghi", sizeof buf); ONV(strcmp(buf, "abcd"), ("result was `%s' not `abcd'", buf)); ne_strnzcpy(buf, "ab", sizeof buf); ONV(strcmp(buf, "ab"), ("result was `%s' not `ab'", buf)); return OK; } #define FOX_STRING "The quick brown fox jumped over the lazy dog" #define PUNC_STRING "<>,.;'#:@~[]{}!\"$%^&*()_+-=" static int cleaner(void) { static const char *strings[] = { "alpha", "alpha", "pretty\033[41mcolours", "pretty [41mcolours", "beta\n", "beta ", "del\rt\na", "del t a", FOX_STRING, FOX_STRING, "0123456789", "0123456789", PUNC_STRING, PUNC_STRING, "\01blah blee\05bloo", " blah blee bloo", NULL, }; unsigned int n; for (n = 0; strings[n]; n+=2) { char *act = ne_strclean(ne_strdup(strings[n])); ONV(strcmp(act, strings[n+1]), ("cleansed to `%s' not `%s'", act, strings[n+1])); ne_free(act); } return OK; } /* Check that raw data 'raw', of length 'len', has base64 encoding * of 'expected'. */ static int b64_check(const unsigned char *raw, size_t len, const char *expected) { char *encoded = ne_base64(raw, len); unsigned char *decoded; size_t dlen; ONV(strcmp(encoded, expected), ("base64(\"%s\") gave \"%s\" not \"%s\"", raw, encoded, expected)); dlen = ne_unbase64(encoded, &decoded); ONV(dlen != len, ("decoded `%s' length was %" NE_FMT_SIZE_T " not %" NE_FMT_SIZE_T, expected, dlen, len)); ONV(memcmp(raw, decoded, dlen), ("decoded `%s' as `%.*s' not `%.*s'", expected, (int)dlen, decoded, (int)dlen, raw)); ne_free(decoded); ne_free(encoded); return OK; } /* ALLBITS: base64 encoding of "\0..\377" */ #define ALLBITS \ "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKiss" \ "LS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZ" \ "WltcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9fn+AgYKDhIWG" \ "h4iJiouMjY6PkJGSk5SVlpeYmZqbnJ2en6ChoqOkpaanqKmqq6ytrq+wsbKz" \ "tLW2t7i5uru8vb6/wMHCw8TFxsfIycrLzM3Oz9DR0tPU1dbX2Nna29zd3t/g" \ "4eLj5OXm5+jp6uvs7e7v8PHy8/T19vf4+fr7/P3+/w==" static int base64(void) { unsigned char bits[256]; size_t n; #define B64B(x, l, y) CALL(b64_check(x, l, y)) #define B64(x, y) B64B(x, strlen(x), y) /* invent these with * $ printf "string" | uuencode -m blah */ B64("a", "YQ=="); B64("bb", "YmI="); B64("ccc", "Y2Nj"); B64("Hello, world", "SGVsbG8sIHdvcmxk"); B64("Aladdin:open sesame", "QWxhZGRpbjpvcGVuIHNlc2FtZQ=="); B64("I once saw a dog called norman.\n", "SSBvbmNlIHNhdyBhIGRvZyBjYWxsZWQgbm9ybWFuLgo="); B64("The quick brown fox jumped over the lazy dog", "VGhlIHF1aWNrIGJyb3duIGZveCBqdW1wZWQgb3ZlciB0aGUgbGF6eSBkb2c="); /* binary data.. * $ printf "string" | wc -c # get the length * $ printf "string" | uuencode -m blah # get the base64 */ B64B("\0\0\0\0\0\n", 6, "AAAAAAAK"); B64B("I once wished \0 upon a \0 fish.", 30, "SSBvbmNlIHdpc2hlZCAAIHVwb24gYSAAIGZpc2gu"); B64B("\201\202\203\204", 4, "gYKDhA=="); for (n = 0; n < sizeof bits; n++) bits[n] = (unsigned char)n; CALL(b64_check(bits, sizeof bits, ALLBITS)); #undef B64 #undef B64B return OK; } static int unbase64(void) { static const char *ts[] = { "", "a", "ab", "abc", "}bcd", "a}cd", "ab}d", "abc}", " ", "^bcd", "a^cd", "ab^d", "abc^", "====", "=bcd", "a=cd", "ab=d", "a==d", "a=c=", NULL }; size_t n; for (n = 0; ts[n]; n++) { unsigned char *tmp; ONV(ne_unbase64(ts[n], &tmp) != 0, ("invalid string `%s' was decoded", ts[n])); } return OK; } ne_test tests[] = { T(simple), T(buf_concat), T(buf_concat2), T(buf_concat3), T(append), T(grow), T(alter), T(token1), T(token2), T(nulls), T(empty), T(quoted), T(badquotes), T(shave), T(shave_regress), T(combo), T(concat), T(str_errors), T(strnzcpy), T(cleaner), T(base64), T(unbase64), T(NULL) }; tla-1.3.5+dfsg/src/libneon/test/notvalid.pem0000644000175000017500000000223010457621776017470 0ustar useruser-----BEGIN CERTIFICATE----- MIIDODCCAuKgAwIBAgIBADANBgkqhkiG9w0BAQQFADCBoTELMAkGA1UEBhMCR0Ix FzAVBgNVBAgTDkNhbWJyaWRnZXNoaXJlMRIwEAYDVQQHEwlDYW1icmlkZ2UxGjAY BgNVBAoTEU5lb24gSGFja2VycyBMdGQuMRUwEwYDVQQLEwxOZW9uIFFBIERlcHQx EjAQBgNVBAMTCWxvY2FsaG9zdDEeMBwGCSqGSIb3DQEJARYPbmVvbkB3ZWJkYXYu b3JnMB4XDTIzMTIyNzIwNDAyOVoXDTIzMTIyODIwNDAyOVowgaExCzAJBgNVBAYT AkdCMRcwFQYDVQQIEw5DYW1icmlkZ2VzaGlyZTESMBAGA1UEBxMJQ2FtYnJpZGdl MRowGAYDVQQKExFOZW9uIEhhY2tlcnMgTHRkLjEVMBMGA1UECxMMTmVvbiBRQSBE ZXB0MRIwEAYDVQQDEwlsb2NhbGhvc3QxHjAcBgkqhkiG9w0BCQEWD25lb25Ad2Vi ZGF2Lm9yZzBcMA0GCSqGSIb3DQEBAQUAA0sAMEgCQQDzRU5sZ8+CWQPvPkqJw9Kl oEgT2FqzZR9RT/qbJuRBmRphiRr0g7JOh5Mr7LXaKShedFLhGidutyKKwIZJnRht AgMBAAGjggEBMIH+MB0GA1UdDgQWBBRFA3ktzHSuD9uB6mJOWoElmOtknzCBzgYD VR0jBIHGMIHDgBRFA3ktzHSuD9uB6mJOWoElmOtkn6GBp6SBpDCBoTELMAkGA1UE BhMCR0IxFzAVBgNVBAgTDkNhbWJyaWRnZXNoaXJlMRIwEAYDVQQHEwlDYW1icmlk Z2UxGjAYBgNVBAoTEU5lb24gSGFja2VycyBMdGQuMRUwEwYDVQQLEwxOZW9uIFFB IERlcHQxEjAQBgNVBAMTCWxvY2FsaG9zdDEeMBwGCSqGSIb3DQEJARYPbmVvbkB3 ZWJkYXYub3JnggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEEBQADQQA80TYV 2F4QLveuldmxGoIOq5hHGxCR6aVsdtm4PGY49R5/ObCAgdWw/JV/Tc448JAz5QvU ahr1x9kA4Vo5NZ4q -----END CERTIFICATE----- tla-1.3.5+dfsg/src/libneon/test/ChangeLog0000644000175000017500000012521410457621776016727 0ustar useruserMon Jul 5 10:59:17 2004 Joe Orton Add regression tests for trio of ne_compress.c bugs: * compress.c (reader): Validate that a size=0 call comes only after the expected response data, and use struct string. (do_fetch): Pass a struct string to reader and adapt for failure logic. (auth_cb, retry_compress_helper, retry_compress, retry_notcompress): New tests. Sun Jul 4 21:55:00 2004 Joe Orton * utils.c (serve_sstring_slowly, serve_sstring): Moved from sockets.c, renamed from serve_string_slowly, serve_sstring. * sockets.c: All callers updated. Tue May 18 21:00:07 2004 Joe Orton * ssl.c (fail_ssl_request): * basic.c (do_range): Fix false negatives from gcc -Wformat-security. Sun May 2 21:16:45 2004 Joe Orton * util-tests.c (regress_dates): Add regression tests. Wed Apr 14 10:45:43 2004 Joe Orton * props.c (regress, patch_regress): Add regression tests for CAN-2004-0179 issues. Sun Feb 15 12:34:13 2004 Joe Orton * makekeys.sh, openssl.conf: Create new utf8subj.cert, bmpsubj.cert, t61subj.cert certificates. * ssl.c (dname_readable): Test that ne_ssl_readable_dname always gives back UTF-8. Thu Nov 13 20:33:44 2003 Joe Orton * request.c (no_body_205): New test. Sat Oct 25 00:11:29 2003 Joe Orton * ssl.c (fail_truncated_eof): Remove test. Tue Oct 21 20:29:46 2003 Joe Orton * ssl.c (fail_tunnel, proxy_tunnel): Fix non-C89 code, Radu Greab. Thu Oct 9 19:42:13 2003 Joe Orton * socket.c (ssl_closure): Fix occassional spurious errors. Tue Oct 7 20:23:35 2003 Joe Orton * ssl.c (ssl_server): Handle several requests if required. (tunnel_header): New function. (serve_tunnel): Fail with a 500 if the request included an Authenticate header; take an ssl_server_args pointer as userdata. (fail_tunnel, proxy_tunnel): Adjust accordingly. (apt_post_send): Adjust for 401 check. (auth_tunnel_creds): New test. Wed Oct 1 00:30:25 2003 Joe Orton * ssl.c (simple_sslv2): Regression test. (ssl_server): Create SSL_CTX locally; optionally create an SSLv2-only server. (init_ssl): Do not create the SSL_CTX. Wed Sep 17 19:57:22 2003 Joe Orton * ssl.c: Refactor around single SSL server function. (ssl_server): Combination of do_ssl_response and old serve_* functions. All callers updated. Sun Sep 14 12:27:22 2003 Joe Orton * socket.c (write_reset, read_reset): Skip if no RESET was returned. Sun Sep 14 11:01:08 2003 Joe Orton * Makefile.in: Fix building the 'resolve' tool. Sat Sep 6 12:29:53 2003 Joe Orton * makekeys.sh, openssl.conf: Generate altname5.cert with an IPv4 address in the subjectAltName attribute. * ssl.c (ipaddr_altname): Test for IPv4 address in subjectAltName. Sat Sep 6 12:28:55 2003 Joe Orton * Makefile.in: Clear the SUFFIXES list; use standard make syntax; fix build of 'basic' on some platforms. Sat Aug 30 18:59:24 2003 Joe Orton * Makefile.in: Rewrite to use libtool to build object files and libtest. * run.sh: Don't set LD_LIBRARY_PATH. Wed Jul 23 23:25:39 2003 Joe Orton * compress.c (do_fetch): Check for response truncation for success case. (fail_corrupt1, fail_corrupt2): New tests. Sat Jun 21 12:59:49 2003 Joe Orton * request.c (versions): Fix and enable test. Wed Jun 18 20:09:59 2003 Joe Orton * request.c (is_alive): Adapt for new socket API. * socket.c (do_connect, addr_connect): Likewise. Tue May 20 20:14:03 2003 Joe Orton * ssl.c (cert_fingerprint): Fix for VPATH builds. Sat May 10 17:13:05 2003 Joe Orton * xml.c (matches): Add regression test for prefix matching bug fixed in 0.18.0. Sat Apr 26 19:22:29 2003 Joe Orton * request.c (any_te_header): New function. Wed Apr 23 18:24:19 2003 Joe Orton * stubs.c (stub_ssl): Test ne_ssl_cert_import, ne_ssl_cert_export, ne_ssl_cert_write stubs. Wed Apr 23 14:05:38 2003 Joe Orton * ssl.c (read_write): New function. Wed Apr 23 00:34:44 2003 Joe Orton * ssl.c (cache_cert, verify_cache): New functions. Wed Apr 23 00:14:14 2003 Joe Orton * ssl.c (any_ssl_request): Free the cert after passing it to ne_ssl_trust_cert. Tue Apr 22 23:24:33 2003 Joe Orton * string-tests.c (unbase64): Improve coverage. Tue Apr 22 20:25:15 2003 Joe Orton * ssl.c (import_export, flatten_pem, cert_compare): New functions. Tue Apr 22 18:32:43 2003 Joe Orton * string-tests.c (b64_check, unbase64): New functions. (base64): Use b64_check. Tue Apr 22 15:54:04 2003 Joe Orton * string-tests.c (base64): Test decoding binary data which contains bytes with the high bit set. Tue Apr 22 14:18:03 2003 Joe Orton * string-tests.c (base64): Moved here... * util-tests.c (base64): ...from here. Tue Apr 22 13:17:48 2003 Joe Orton * ssl.c (just_serve_string, fail_not_ssl): New functions. Tue Apr 22 13:09:13 2003 Joe Orton * stubs.c (stub_ssl): Test ne_ssl_cert_validity stub. Tue Apr 22 11:35:10 2003 Joe Orton * request.c (versions): Run test as XFAIL. Tue Apr 22 11:33:43 2003 Joe Orton * util-tests.c (version_string): New function. Tue Apr 22 09:23:27 2003 Joe Orton * ssl.c (check_validity, cert_validity): New functions. Mon Apr 21 19:45:39 2003 Joe Orton * util-tests.c (digest_md5): Replace ne_md5_buffer. (md5): Use digest_md5; test 500-byte string. Mon Apr 21 18:38:02 2003 Joe Orton * xml.c (fail_parse): Call ne_xml_parse with length=0 finish parse. Mon Apr 21 17:18:45 2003 Joe Orton * props.c: Add tests for ne_207.h interface and ne_simple_propfind from ne_props.h. * xml.c: Add tests for new XML interface. * Makefile.in: Run props tests before lock since the latter is implemented using the former. Mon Apr 7 22:27:18 2003 Joe Orton * stubs.c (stub_ssl): Test for ne_ssl_cert_identity stub. Mon Apr 7 22:17:56 2003 Joe Orton * ssl.c (cert_fingerprint): Renamed from fingerprint. (check_identity, cert_identities): New functions. Sun Apr 6 20:18:30 2003 Joe Orton * stubs.c (stub_ssl): Adjust for new clicert API. Sun Apr 6 20:12:48 2003 Joe Orton * ssl.c (dname_compare): Renamed from comparisons. (dname_readable): New function. * makekeys.sh: Create justmail.cert. Sun Apr 6 20:00:18 2003 Joe Orton * ssl.c (keypw_prompt): Removed function. (init, load_client_cert, client_cert_provided): Adapt for new clicert API. (ccert_unencrypted): New function. Fri Apr 4 22:34:12 2003 Joe Orton * request.c (fail_request_with_error): Refactored from fail_request; check for a particular error string. (fail_request): Use fail_request_with_error. (invalid_response_gives_error): New function. (fail_long_header): Use it. (fail_corrupt_chunks): New function. Sat Mar 29 14:39:20 2003 Joe Orton * ssl.c (comparisons): New function. * stubs.c (stub_ssl): Test ne_ssl_dname_cmp. Sat Mar 29 13:58:37 2003 Joe Orton * makekeys.sh: Generate noclient.p12. * ssl.c (load_client_cert): Test ne_ssl_clicert_name. * stubs.c (stub_ssl): Check for ne_ssl_clicert_name stub. Sat Mar 29 13:31:35 2003 Joe Orton * ssl.c (load_client_cert): Test ne_ssl_clicert_owner. Fri Mar 28 22:13:55 2003 Joe Orton * ssl.c (fingerprint): New function. * stubs.c (stub_ssl): Check for ne_ssl_cert_digest stub. Wed Mar 26 22:52:15 2003 Joe Orton * ssl.c (fail_missing_CN): New function. * makekeys.sh: Generate missingcn.cert. * openssl.conf: Allow commonName to be omitted from CSR. Wed Mar 26 22:41:48 2003 Joe Orton * ssl.c (load_server_certs): Renamed from load_ca; test loading non-existent file. Wed Mar 26 20:38:08 2003 Joe Orton * stubs.c (stub_ssl): Updated for new SSL interface. Tue Mar 25 20:32:07 2003 Joe Orton Update tests for changes to SSL interface: * socket.c (init_ssl): Use ne_ssl_context_create, ne_ssl_cert_read, ne_ssl_ctx_trustcert. (begin): Use ne_sock_connect_ssl. * ssl.c (serve_ssl_chained, trust_default_ca, load_client_cert, check_dname, check_cert_dnames, check_cert, check_chain, parse_chain, cc_check_dnames, cc_provided_dnames): New functions. (serve_ccert): Always trust SERVER_CERT; optionally call SSL_CTX_set_client_CA_list. (any_ssl_request, load_ca, fail_truncated_eof): Use ne_ssl_cert_read and ne_ssl_trust_cert. (keypw_prompt): Fail if userdata is NULL. (fail_load_ccerts, load_pkcs12_ccert, load_pem_ccert, check_DNs): Removed functions. (parse_cert): Use check_cert. (client_cert_provided, client_cert_pkcs12): Rewritten for new API. * makekeys.sh: Generate calist.pem, unclient.p12. Wed Mar 12 22:36:27 2003 Joe Orton * redirect.c (simple): Fold in tests for 30[237] redirects for better coverage. (no_redirect): Another test for _location returning NULL. Wed Mar 12 22:29:45 2003 Joe Orton * redirect.c (process_redir): Factored out from check_redir. (no_redirect): New function. Sun Mar 9 17:46:37 2003 Joe Orton * lock.c (fail_discover): New function. Sat Mar 1 10:53:58 2003 Joe Orton * uri-tests.c (authinfo): Removed. (escapes): Test nothing-to-escape and invalid URI cases. (compares): Gain 100% branch coverage in ne_path_compare. (default_port): Test unknown scheme case. (parse): Test authinfo here, and some edge cases. (unparse): Fill in port if default. Sat Mar 1 09:20:42 2003 Joe Orton * socket.c (multi_init): New function. Sat Mar 1 08:04:09 2003 Joe Orton * string-tests.c (cleaner): New function. Wed Feb 26 22:13:14 2003 Joe Orton * request.c (fail_eof_chunk, fail_eof_badclen): New tests. Wed Feb 26 21:54:39 2003 Joe Orton * util-tests.c (support): New function. (bad_sl, accept_sl): More status-lines. Tue Feb 25 21:06:18 2003 Joe Orton * ssl.c (do_ssl_response): Fail if response contains "Proxy-Authorization" header. (apt_post_send, apt_creds, auth_proxy_tunnel): New functions. Thu Nov 28 21:25:01 2002 Joe Orton * request.c (te_over_clength2): New test. Sun Nov 17 18:59:04 2002 Joe Orton * socket.c (addr_make_v4, addr_make_v6, addr_compare): New functions. Fri Oct 11 00:49:01 2002 Joe Orton * props.c (regress): Moved from regress.c:propfind_segv; add regression test for ne_props.c segfault fixed in rev 1.83. * regress.c: Removed. Tue Oct 8 20:06:55 2002 Joe Orton * xml.c (matches): Add tests that entities in attribute values are dereferenced by the XML parser. Fri Oct 4 17:10:19 2002 Joe Orton * request.c (no_body_bad_clength, no_body_empty_clength): New tests. (expect_no_body): Use better paths in the requests. Tue Sep 24 21:27:33 2002 Joe Orton * request.c (fail_long_header, versions, hook_create_req): New functions. Tue Sep 17 21:08:17 2002 Joe Orton * openssl.conf (neonca): Make 'countryName' optional in CA policy. (reqDN.CNfirst): New section. * makekeys.sh: Generate 'cnfirst.cert', which has commonName as first attribute in subject DN. * ssl.c (commonName_first): New function. Tue Sep 10 21:11:18 2002 Joe Orton * request.c (fail_double_lookup): New function. Sun Aug 25 23:16:33 2002 Joe Orton * ssl.c (do_ssl_response): Add 'unclean' argument. (all callers changed). (serve_response_unclean, empty_truncated_eof, fail_truncated_eof): New functions. Sun Aug 25 19:16:00 2002 Joe Orton * socket.c (resolve_numeric): Test ne_addr_print too. Sun Aug 25 13:39:37 2002 Joe Orton * resolve.c: New file. Sun Aug 25 11:25:12 2002 Joe Orton * request.c (is_alive): Update for new ne_addr_* interface. Sun Aug 25 08:31:16 2002 Joe Orton * socket.c (serve_truncate, ssl_truncate): New functions. Sun Aug 25 08:28:17 2002 Joe Orton * socket.c (do_connect): New function; use new ne_sock_connect/ne_addr interface. (begin) [SOCKET_SSL, !SOCKET_SSL]: Use do_connect. (resolve_numeric): Adjust for new ne_addr interface. (resolve_ipv6): Disable test. Sat Aug 24 08:50:06 2002 Joe Orton * request.c (fail_statusline): New function. Fri Aug 23 22:52:38 2002 Joe Orton * ssl.c (init): FAILHARD if initialization fails. Wed Aug 21 13:29:58 2002 Joe Orton * uri-tests.c (null_uri): Removed test. (parse): More tests including IPv6 address tests; use ONCMP macro. (failparse): New function. (unparse): Add URI with IPv6 address. Wed Aug 21 13:28:37 2002 Joe Orton * socket.c (resolve_ipv6): New function. Mon Aug 19 16:59:46 2002 Joe Orton * socket.c (resolve): Adapt for new ne_addr_resolve interface. (resolve_numeric): New test. * request.c (is_alive): Use new ne_addr_resolve interface. Mon Aug 19 16:57:53 2002 Joe Orton * socket.c (begin): Fix handling of connect failure. (TO_BEGIN): Handle errors from to_begin properly. Sun Aug 18 23:37:34 2002 Joe Orton * string-tests.c (str_errors): Check return value and behaviour when error string is truncated, an Sun Aug 18 23:31:51 2002 Joe Orton * util-tests.c (str_errors): Moved to... * string-tests.c (str_errors): here. Sun Aug 18 23:11:28 2002 Joe Orton * string-tests.c (strnzcpy): New function. Sun Aug 18 08:18:24 2002 Joe Orton * ssl.c (caseless_match): New function. * makekeys.sh: Create caseless.cert. Sun Aug 18 08:12:32 2002 Joe Orton * ssl.c (notdns_altname): New function. * makekeys.sh: Create altname4.cert. * openssl.conf (altExt4): New section. Sun Aug 18 07:42:30 2002 Joe Orton * ssl.c (multi_commonName): New function. * openssl.conf (req): Use distinguished_name section as specificied by $REQDN. (reqDN.doubleCN): New section. * makekeys.sh: Set $REQDN; create twocn.cert. Sun Aug 18 00:47:19 2002 Joe Orton * ssl.c (accept_signed_cert): New function, factored out from simple. (simple): Use accept_signed_cert. (subject_altname, two_subject_altname, two_subject_altname2): New function. * openssl.conf: Add extension sections altExt, altExt2, altExt3. * makekeys.sh: Generate altname.cert, altname2.cert, altname3.cert. Sat Aug 17 18:41:42 2002 Joe Orton * makekeys.sh (csr_fields): New function; generate output for `openssl req'. Sat Aug 17 18:27:36 2002 Joe Orton * makekeys.sh: Add CA and REQ variables to simplify OpenSSL invocation. Pass -config to req rather than relying on installed default configuration. * openssl.conf: Add `req' and `reqDN' sections to allow use with `openssl req' command. Add CA basic constraint extention to certificates used. Sat Aug 10 10:42:57 2002 Joe Orton * makekeys.sh: Use openssl binary as ${OPENSSL}. * Makefile.in: Pick up OPENSSL from configure, and pass it through to makekeys.sh. Sat Aug 10 10:18:15 2002 Joe Orton * socket.c (begin): Don't use run-time initialization. * request.c (s_progress): Fix warnings on FreeBSD. Mon Aug 5 21:08:24 2002 Joe Orton * ssl.c (ccert_provider, client_cert_provided): New functions. (fail_load_ccerts): Enable function. Sun Aug 4 22:32:43 2002 Joe Orton * request.c (serve_abort, retry_after_abort): New functions. Sun Aug 4 13:28:47 2002 Joe Orton * request.c (continued_header): New function. Sun Aug 4 12:54:52 2002 Joe Orton * socket.c [SOCKET_SSL] (ssl_closure): New function; use instead of read_reset, write_reset for SOCKET_SSL build. Sun Aug 4 12:27:34 2002 Joe Orton Build socket.c twice, once for testing over SSL connections: * Makefile.in (socket-ssl.o, socket-ssl): New targets. (SSL_TESTS): Include socket-ssl target. * socket.c [SOCKET_SSL] (init_ssl, wrap_serve): New functions. [SOCKET_SSL] (begin): Alternate implementation. Sat Aug 3 22:20:59 2002 Joe Orton * session.c (privates): New function. Sat Aug 3 22:20:14 2002 Joe Orton * auth.c (fail_auth_cb, tunnel_regress): New function. Sat Aug 3 22:12:48 2002 Joe Orton * auth.c (forget_regress): New function. Sun Jul 28 12:24:02 2002 Joe Orton * lock.c (lock_timeout, submit_test, lock_shared): Use ne_concat, not CONCAT? macros. * ssl.c (init, fail_expired, fail_notvalid): Likewise. Thu Jul 25 00:04:47 2002 Joe Orton * string-tests.c (buf_concat, buf_concat2, buf_concat3): Renamed from concat, concat1, concat3). (concat): New function. Sun Jul 14 11:42:03 2002 Joe Orton * util-tests.c (versioning): New function. Thu Jul 11 17:24:29 2002 Joe Orton * request.c (no_headers): New function. Wed Jul 10 22:58:01 2002 Joe Orton * utils.c (any_2xx_request_body): New function. Wed Jul 10 22:44:12 2002 Joe Orton * request.c (ptimeout_eof, ptimeout_eof2, close_not_retried, serve_close2): New functions. (abort_respbody): Rejoin child earlier for reliable results. Sun Jul 7 12:17:11 2002 Joe Orton * socket.c (expect_eof): Better error reporting. (good_close): Split from finish(). (finish): Use good_close. (expect_write_closed, write_reset, read_reset): Add tests that an ECONNRESET is treated as a SOCK_CLOSED failure. Sun Jul 7 08:38:12 2002 Joe Orton * utils.c (serve_response): Use discard_body(). Sun Jul 7 08:28:56 2002 Joe Orton * socket.c (serve_expect, full_write, small_writes, large_writes, echo_server, echo_expect, echo_lines): New functions. Sat Jul 6 13:11:33 2002 Joe Orton * request.c (serve_eof, fail_early_eof, fail_eof_continued, fail_eof_headers): New functions. Sat Jul 6 08:58:17 2002 Joe Orton * request.c (serve_100_once, expect_100_once): New functions. Fri Jul 5 21:43:58 2002 Joe Orton * auth.c (username): Use the correct spelling of Aladdin. (auth_hdr): Simplify debug messages. (auth_serve): Fail if no Authorization header is given. (basic): Check for response status. Fri Jul 5 21:41:02 2002 Joe Orton * utils.c (any_2xx_request): New function. Sun Jun 30 17:10:59 2002 Joe Orton * request.c (fail_noserver): Factor out from host_not_found. (fail_lookup): Equivalent to old host_not_found. (fail_connect, abort_respbody): New function. Sun Jun 30 14:32:32 2002 Joe Orton * request.c (fail_chunksize): New function. Sun Jun 30 10:39:17 2002 Joe Orton * request.c (test_persist): Factor out from persist; take response and response body as arguments. (persist_http11): New function, equivalent to old persist. (persist_chunked, persist_http10): New functions. Sun Jun 30 10:25:07 2002 Joe Orton * utils.c (serve_response): Factor out from single_serve_string, many_serve_string. (single_serve_string, many_serve_string): Use serve_response. Sun Jun 30 09:13:55 2002 Joe Orton * request.c (expect_response, persist, persist_timeout, multi_header): Rely on the fact that the test framework will reap the server. (expect_no_body, no_body_304, no_body_204, no_body_HEAD, no_body_chunks): New functions. Tue Jun 25 23:05:42 2002 Joe Orton * request.c (trailing_header): New function. Sun Jun 23 23:00:03 2002 Joe Orton * ssl.c (no_verify): Fix sixth argument to any_ssl_request. Sun Jun 23 15:21:06 2002 Joe Orton * Makefile.in (grind): New target. * run.sh: Respect $HARNESS. Sun Jun 23 15:20:38 2002 Joe Orton * props.c: New file. Sun Jun 23 09:37:10 2002 Joe Orton * makekeys.sh: Ignore failure from `hostname -[sdf]' commands, as appropriate tests are skipped on failure. Sun Jun 23 08:33:50 2002 Joe Orton * request.c (host_not_found): Use any_request(); simplify. (proxy_no_resolve): New function. Sun Jun 16 11:40:19 2002 Joe Orton * ssl.c (do_ssl_response): Succeed if connection is closed by client after negotiation. (serve_tunnel, fail_tunnel, proxy_tunnel): New functions. Mon Jun 10 21:18:03 2002 Joe Orton * redirect.c (check_redir): Await server child before returning. Sun Jun 9 13:05:25 2002 Joe Orton * socket.c (DECL): Don't use run-time initialization. (single_read, single_peek, small_reads, read_and_peek, line_closure, larger_read, line_toolong): Use DECL, as last declaration. Sun Jun 9 13:03:36 2002 Joe Orton * compress.c (reader, do_fetch): Check that inflated data is of expected length. Sun Jun 9 11:40:54 2002 Joe Orton * redirect.c (struct redir_args): Add 'path' field. (any_request): Use path in Request-URI. (simple, redir_303, non_absolute): Fill in path. (relative_1, relative_2): New functions. Tue Jun 4 16:56:08 2002 Joe Orton * uri-tests.c (parents): Improve ne_path_parent tests. Mon Jun 3 18:22:31 2002 Joe Orton * cookies.c: New file. Sun Jun 2 10:06:42 2002 Joe Orton * basic.c (dav_capabilities): New function. Sat Jun 1 10:39:04 2002 Joe Orton * socket.c (to_begin, to_end, peek_timeout, read_timeout, readline_timeout, fullread_timeout): New functions. Sat Jun 1 10:38:13 2002 Joe Orton * request.c (read_timeout): Use sleepy_server. (hung_server): Removed. Sat Jun 1 10:32:45 2002 Joe Orton * utils.c (sleepy_server): New function. Thu May 30 20:00:40 2002 Joe Orton * socket.c (finish): New function, factored out from common code. (small_reads, read_and_peek, larger_read): Use it. (line_simple, line_closure, line_empty, line_toolong, line_mingle, line_chunked): New functions. Sun May 26 14:54:52 2002 Joe Orton * request.c (fill_uri, match_hostport, hostports): Moved functions to session.c. * session.c: New file. Fri May 24 08:14:21 2002 Joe Orton * request.c (match_hostport, hostports): New functions. Tue May 21 21:29:25 2002 Joe Orton * redirect.c: New file. Sun May 19 18:25:48 2002 Joe Orton * auth.c, lock.c, regress.c, socket.c, ssl.c, utils.c, utils.h: Update for socket API change; s/sock_/ne_sock_/, s/SOCK_/NE_SOCK_/. Wed May 8 19:41:24 2002 Joe Orton * ssl.c (do_ssl_response): Take response body as parameter; all callers changed. (serve_eof, simple_eof): New functions. Wed May 8 17:17:27 2002 Joe Orton * socket.c: New file. * sock-tests.c: Removed file. * Makefile.in: Updated accordingly. Wed May 8 11:53:35 2002 Joe Orton * request.c (host_not_found): New function. Wed May 1 21:41:02 2002 Joe Orton * uri-tests.c (parse): New function. (simple, simple_ssl): Adjust for ne_uri_parse port default. Tue Apr 23 21:39:09 2002 Joe Orton * request.c (read_timeout): Better diagnostic for test failure cases. Sun Apr 14 12:00:19 2002 Joe Orton * basic.c (content_type): Updated to reflect default charset ISO-8859-1 for text/ media types. Sun Apr 7 17:35:21 2002 Joe Orton * run.sh: Set MALLOC_CHECK_ so glibc's heap corruption detection is enabled. Sun Apr 7 17:30:37 2002 Joe Orton * compress.c (do_fetch): Reset 'failed' flag to zero each time. Wed Apr 3 20:16:43 2002 Joe Orton * request.c (NO_BODY): Renamed from NOBODY (all callers changed). (empty_header, ignore_header_ws, ignore_header_ws2): New tests. (ignore_header_ws3): Renamed from ignore_header_spaces. Tue Apr 2 21:09:33 2002 Joe Orton * request.c (expect_header_value): New function. (ignore_header_case, ignore_header_spaces, ignore_header_tabs): New tests. Mon Mar 25 21:51:24 2002 Joe Orton * lock.c (multi_lock_response, lock_shared): New function. (lock_compare): Factored out from discover_results. (discover, lock_timeout, submit_test): Adjust for lock API changes. Mon Mar 25 21:36:55 2002 Joe Orton * ssl.c (fail_ssl_request): Check failure bits against NE_SSL_FAILMASK. Sun Mar 10 22:07:48 2002 Joe Orton * stubs.c (stub_decompress, sd_reader): New function. Sun Mar 10 21:39:29 2002 Joe Orton * lock.c (activelock): New function, factored out from lock_response. (lock_response): Use activelock; adjust argument types. (make_lock): Adjusted for lock_response arg changes. (discard_response, serve_discovery, discover_result, discover): New functions. Wed Mar 6 22:22:04 2002 Joe Orton * lock.c (submit_test): Handle failures gracefully. Wed Mar 6 21:23:27 2002 Joe Orton * lock.c (submit_test): Update to expect an absoluteURI in If: headers. Wed Mar 6 21:17:37 2002 Joe Orton * uri-tests.c (unparse): New function. Tue Mar 5 22:59:37 2002 Joe Orton * uri-tests.c (cmp): Checks for case-insensitive comparison, and empty path, "/" equivalence. Mon Mar 4 01:07:03 2002 Joe Orton * request.c (blank_response): Add test for potential segfault in strip_eol (would fail if run under Electric Fence). Sun Mar 3 20:50:01 2002 Joe Orton * lock.c (make_lock, store_single, store_several, got_if_header, serve_verify_if, do_request, submit_test, if_simple, if_under_infinite, if_infinite_over, if_child, if_covered_child): New tests. (lock_timeout): Adjusted for API changes. Sun Mar 3 15:29:05 2002 Joe Orton * uri-tests.c (cmp_differ, cmp): New functions. Sun Mar 3 11:08:36 2002 Joe Orton * request.c (fill_uri): New function. Sun Feb 17 21:31:21 2002 Joe Orton * ssl.c (fqdn_match): Removed test. Sun Feb 17 20:32:16 2002 Joe Orton * makekeys.sh: Create keypair for client cert. * ssl.c (do_ssl_response, any_ssl_request, all callers thereof): Better error handling. (serve_ccert, load_pem_ccert, keypw_prompt, load_pkcs12_ccert, fail_load_ccerts, client_cert_pem, client_cert_pkcs12): New functions. Sun Feb 17 11:54:19 2002 Joe Orton * basic.c (do_range): Factored out from get_range/fail_range_length. (get_range, fail_range_length): Use do_range. (fail_range_units, fail_range_notrange, fail_range_unsatify): New tests. Sun Feb 17 11:36:00 2002 Joe Orton * basic.c (get_range, fail_range_length): New functions. Sat Feb 16 23:29:40 2002 Joe Orton * xml.c: New file. * Makefile.in (DAV_TESTS): Add xml tests. Sat Feb 16 15:26:27 2002 Joe Orton * compress.c (do_fetch): Rename from fetch(); add 'expect_fail' paramater. (fetch): Re-implement using do_fetch. (fail_trailing, fail_bad_csum, fail_truncate): New functions. * Makefile.in (trailing.gz, truncated.gz, badcsum.gz): New helper files. Thu Feb 14 19:09:42 2002 Joe Orton * request.c (everywhere): Simplify use of expect_response. Thu Feb 14 19:05:48 2002 Joe Orton * request.c (ignore_bad_headers): New function. Mon Feb 11 22:06:40 2002 Joe Orton * makekeys.sh: If the hostname command is clever enough to give FQDN, hostname, domainname, then create wildcard.cert; cert with a wildcard commonName. * ssl.c (wildcard_match): New function Mon Feb 11 21:55:52 2002 Joe Orton * ssl.c (any_ssl_request): Take session pointer, don't initialize here. (DEFSESS): New macro. (everywhere): Use DEFSESS rather than passing pointer-to- session pointer. Mon Feb 11 20:44:44 2002 Joe Orton * ssl.c (fqdn_match): Test for FQDN matching against non-qualified FQDN. (makekeys.sh): Create server cert with FQDN. Sun Feb 10 12:36:55 2002 Joe Orton * request.c (chunk_oversize): New function. Sat Feb 9 21:12:47 2002 Joe Orton * request.c (reason_phrase): New function. Sat Feb 9 16:50:58 2002 Joe Orton * request.c (read_timeout, hung_server): New functions. Thu Feb 7 22:58:31 2002 Joe Orton * ssl.c (cache_verify, no_verify, count_vfy): New functions. Thu Feb 7 19:39:33 2002 Joe Orton * ssl.c (any_ssl_request): Take server function as argument: all callers changed. (fail_ssl_request): Renamed from failreq; uses any_ssl_request. Wed Feb 6 20:43:32 2002 Joe Orton * ssl.c (load_ca): New function. Wed Feb 6 20:36:15 2002 Joe Orton * ssl.c (any_ssl_request): Make ca_cert and verify_fn arguments optional. (trustall): Removed function. (simple): Use the CA cert; no need for a verify function. (parse_cert): Don't give a CA cert, force use of verify function. (failreq): Bug fix, don't trust server cert as CA. (fail_wrongCN, fail_notvalid, fail_expired): Pass server cert as CA cert server cert is self-signed. Tue Feb 5 20:33:42 2002 Joe Orton * ssl.c (fail_untrusted_ca, fail_self_signed): New tests. (fail_serve): New function. (failreq, any_ssl_request): Take ca cert argument. (check_DNs, trustall, get_failures): Adjust for new verify callback interface. Sat Feb 2 14:18:11 2002 Joe Orton * ssl.c (do_ssl_response): Factored out from serve_ssl. (serve_ssl): Use do_ssl_response. (serve_scache, session_cache): New functions. Thu Jan 31 21:09:58 2002 Joe Orton * Makefile.in (ca-stamp): New target. * makekeys.sh: New helper script. * ssl.c (parse_cert, fail_wrongCN, fail_expired, fail_notvalid): New tests. (any_ssl_request, trustall, check_DNs, failreq): New auxiliaries. Thu Jan 31 20:42:38 2002 Joe Orton * wrongcn.pem, notvalid.pem, expired.pem, server.key: New files. * Makefile.in: Remove targets to generate certs. Wed Jan 30 21:15:33 2002 Joe Orton * Makefile.in (wrongcn.pem): New target. Wed Jan 30 19:58:18 2002 Joe Orton * string-tests.c: Updated for ne_buffer API change. Sat Jan 26 11:23:34 2002 Joe Orton * Makefile.in: Pick up appropriate TESTS, HELPERS from configure. (ssltests*, davtests*): Remove crud. * compress.c: Presume zlib support present if built. Sun Jan 20 23:29:37 2002 Joe Orton * ssl.c: New file. * Makefile.in (ssltests-no, ssltests-yes, server.pem, server.key): New targets. (check): Conditionally run SSL tests. Sun Jan 20 13:20:56 2002 Joe Orton * Makefile.in (davtests-no, davtests-yes): Separate test programs which require DAV support; only run if DAV is enabled. * Makefile.in (test): Pass SRCDIR env var through to run.sh. * run.sh: Pass SRCDIR as argv[1] to test programs. * compress.c (init): New function. Use 'newsfn' global for filename of NEWS file. Sun Jan 20 13:06:40 2002 Joe Orton * Makefile.in: Fixes for VPATH build Mon Jan 14 01:58:39 2002 Joe Orton * basic.c (content_type): Add harsher charset handling tests. Sun Jan 13 14:01:57 2002 Joe Orton * lock.c (lock_timeout): Use make_session. * acl.c (test_acl): Use make_session. * auth.c (basic, retries): Use make_session. Sun Jan 13 14:01:13 2002 Joe Orton * utils.c (make_session): New function. Sun Jan 13 14:00:34 2002 Joe Orton * basic.c (content_type): Rename ctype to ct; check if charset is unexpectedly set. Sun Jan 13 13:58:07 2002 Joe Orton * basic.c: New file. * Makefile.in: Add `basic' test suite. Mon Jan 7 22:05:33 2002 Joe Orton * Makefile.in: Don't pass CFLAGS to CC when linking. Mon Jan 7 21:46:03 2002 Joe Orton * lock.c: New file. * Makefile.in: Add 'lock' to TESTS, build lock. Mon Jan 7 21:17:21 2002 Joe Orton * skeleton.c: Add skeleton test suite. Tue Jan 1 21:47:09 2002 Joe Orton * Makefile.in: Use CPPFLAGS correctly. Sun Dec 9 14:02:50 2001 Joe Orton * string-tests.c (ONCMP): New macro. (everywhere): Use it. (grow): Add ne_buffer_grow test. Sun Dec 9 13:12:27 2001 Joe Orton * string-tests.c (concat2, concat3): New ne_buffer_concat tests. Sat Dec 1 18:35:29 2001 Joe Orton * utils.c (any_request): Don't set the error context. Sat Dec 1 12:21:48 2001 Joe Orton * auth.c (retry_failure, retry_fail_cb, retry_fail_serve): New functions. Tue Nov 27 21:24:22 2001 Joe Orton * request.c (s_progress, provide_progress, send_progress): New functions. Sun Nov 18 19:11:23 2001 Joe Orton * auth.c (send_response): New function. (auth_serve): Simplify using send_response. (retry_serve, retry_cb, retries): New functions. Sat Nov 17 22:32:29 2001 Joe Orton * auth.c (auth_serve, basic): Simplify, use a persistent connection and any_request() to work with --disable-dav builds. Sat Nov 17 22:30:43 2001 Joe Orton * utils.c (any_request): New function. Sun Oct 28 19:38:05 2001 Joe Orton * Makefile.in: Use explicit link rules. Fri Oct 26 20:08:33 2001 Joe Orton * request.c (persist_timeout): Test behaviour when connection closes after between 1 and 10 requests. Fri Oct 26 20:04:27 2001 Joe Orton * utils.c (many_serve_string): New function. Sun Oct 7 17:48:53 2001 Joe Orton * utils.c: New file. * request.c (single_serve_string): Moved to utils.c. * Makefile.in: Link utils.o into all libtest.a. Move libtest.a into this directory. Sun Oct 7 15:01:47 2001 Joe Orton * request.c (persist, persist_timeout, serve_twice, is_alive): New functions. (closed_connection): Avoid race condition. Sat Oct 6 14:33:42 2001 Joe Orton * request.c (prepare_request, finish_request): Renamed from make_request, destroy_request. (skip_interim_1xx, skip_many_1xx, skip_1xx_hdrs): New functions. Wed Oct 3 00:03:33 2001 Joe Orton * request.c (fail_request): Optionally include a request body, and optionally presume the server runs "forever". (all callers changed). (serve_close, closed_connection): New function. Sat Sep 29 14:08:16 2001 Joe Orton * compress.c (fetch): Update for new decompression API. Sat Sep 29 11:21:56 2001 Joe Orton * compress.c: New file. * Makefile.in: Build compress test, and some its helpers. Add -lneon to LIBS, and pick up NEON_CFLAGS. Thu Sep 27 20:31:51 2001 Joe Orton * utils.h: New file. * request.c: Moved ONREQ() into utils.h Mon Aug 27 00:34:56 2001 Joe Orton * regress.c: New file. Mon Aug 27 00:33:13 2001 Joe Orton * request.c (discard_request): Moved into common/child.c. (make_request, destroy_request): Convenience functions. (serve_non_http, not_http): New test. Sun Jun 24 22:15:46 2001 Joe Orton * test.[ch], child.[ch]: Moved into 'common' subdir. * Makefile.in: Updated likewise. Tue Jun 19 22:00:06 2001 Joe Orton * util-tests.c (parse_dates): Test date parsers. Sun Jun 10 17:36:11 2001 Joe Orton * request.c (infinite_headers, unbounded_headers): New test. Sun Jun 10 16:38:53 2001 Joe Orton * child.c [HAVE_PIPE]: Use a pipe between child and parent to know when the child is ready to accept connections. Avoids boring sleep()ing. Fri Jun 8 21:19:35 2001 Joe Orton * tests.c (segv, main): Remove SEGV handler in favour of useful core dumps. Mon Jun 4 01:15:52 2001 Joe Orton * child.c (server_socket): Set socket family correctly. Thu May 31 08:58:41 2001 Joe Orton * util-tests.c (md5_alignment): New test for MD5 alignment issue on Sparc. Thu May 31 00:40:43 2001 Joe Orton * child.c (minisleep): Just sleep for a second anyway. Thu May 31 00:19:16 2001 Joe Orton * child.c (server_socket): Casts for bind and setsockopt arguments. Thu May 31 00:02:21 2001 Joe Orton * request.c (send_bodies): Test callback-provided request bodies. Wed May 30 22:37:08 2001 Joe Orton * tests.c (child_segv): New function. (in_child): Install different SEGV handler. (segv): Sleep so the re-raised SEGV signal gets handled and we dump core. Wed May 30 19:24:32 2001 Joe Orton * request.c (send_bodies): New test for sending request bodies. Wed May 16 21:19:49 2001 Joe Orton * request.c (expect_response): Renamed, fold together single_request and do_get_request. (all callers changed) Wed May 16 20:59:19 2001 Joe Orton * request.c (construct_get, run_request): New functions. (fold_headers, fold_many_headers, multi_header): New tests. Sat May 12 17:37:36 2001 Joe Orton * server.c: Renamed from http-tests.c. Sat May 12 17:35:05 2001 Joe Orton * child.c (minisleep): New function. (spawn_server, reap_server): New functions. (server_child): Call in_child. Sat May 12 17:33:57 2001 Joe Orton * tests.c (main): Open two log files for debugging messages. (in_child): Switch to debug using child log. Sat May 12 11:18:18 2001 Joe Orton * tests.c (main): Call sock_init. (segv): Re-raise SEGV signal after printing message. Mon May 7 10:38:50 2001 Joe Orton * request.c (chunk_syntax_1, chunk_syntax_2, chunk_syntax_3, chunk_syntax_4, chunk_syntax_5): Split down from chunk_syntax. Mon May 7 10:37:38 2001 Joe Orton * util-tests.c (base64): Update for ne_base64() changes. Add tests for binary data. Sun May 6 23:55:36 2001 Joe Orton * tests.h (ON): Use global buffer 'on_err_buf'. Make 'name' variable public. Sun May 6 23:53:06 2001 Joe Orton * request.c (single_serve_string): General version of single_serve_*. (single_request): Pass in expected response body. (single_get_*): Use new single_request/single_serve_string. (chunk_syntax): Add some tests for chunk syntax. Sun May 6 22:29:36 2001 Joe Orton * child.c, child.h: New files, split down from request.c. Sun May 6 21:53:28 2001 Joe Orton * request.c (spawn_server): Sleep for a while to let the server get going. (do_request): Use passed parameters when creating request. Sun May 6 21:34:27 2001 Joe Orton * request.c (spawn_server): Use callback to handle the server side of connection. (single_request): New function. (single_get_eof, single_get_clength, single_get_chunked): New functions. (reap_server): New function. Sun May 6 20:02:32 2001 Joe Orton * request.c: New file. Wed May 2 12:08:53 2001 Joe Orton * string-tests.c (token1, token2, nulls, empty, quoted, badquotes, shave, combo): New tests for ne_token and ne_shave. Wed May 2 12:04:52 2001 Joe Orton * string-tests.c: Updated for sbuffer -> ne_buffer changes. Wed May 2 01:08:45 2001 Joe Orton * Makefile.in (check): Alias for test goal. Wed May 2 01:08:36 2001 Joe Orton * tests.c (segv): Disable SEGV handler once handling it. Sun Apr 29 14:57:59 2001 Joe Orton * uri-tests.c (slash): Check behaviour of passing zero-length URI. Sun Apr 29 13:43:59 2001 Joe Orton * Makefile.in (clean): New target. (libtest.a): Depend on libneon to force rebuilds when necessary. (all): Build but don't test. Sun Apr 29 13:41:13 2001 Joe Orton * util-tests.c: Add status line with leading garbage. Sun Apr 29 13:39:53 2001 Joe Orton * util-tests.c (status_lines): Add some tests for invalid status lines too. Sun Apr 29 13:38:31 2001 Joe Orton * tests.c (main): Use basename(argv[0]) as suite name. Fail if no tests are in the functions vector. Sun Apr 29 11:06:45 2001 Joe Orton * tests.c (segv): New function. (main): Add SIGSEGV handler. Fri Apr 27 00:00:12 2001 Joe Orton * util-tests.c (base64): New test. Thu Apr 26 22:39:44 2001 Joe Orton * uri-tests.c (just_hostname, just_path, null_uri): New tests. Thu Apr 26 22:03:58 2001 Joe Orton * util-tests.c (md5): Test of MD5 functions. Mon Apr 23 23:08:02 2001 Joe Orton * http-tests.c (simple_head): Add HEAD test. Mon Apr 23 22:49:52 2001 Joe Orton * http-tests.c (simple_get): Check for EOF after reading response body of HTTP/1.0 GET request. (null_resource): New function, test for 404 on null resource. tla-1.3.5+dfsg/src/libneon/test/xml.c0000644000175000017500000003364010457621776016122 0ustar useruser/* neon test suite Copyright (C) 2002-2003, Joe Orton This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #include "config.h" #include #ifdef HAVE_STDLIB_H #include #endif #ifdef HAVE_UNISTD_H #include #endif #include "ne_xml.h" #include "tests.h" #include "child.h" #include "utils.h" /* A set of SAX handlers which serialize SAX events back into a * pseudo-XML-like string. */ static int startelm(void *userdata, int state, const char *nspace, const char *name, const char **atts) { ne_buffer *buf = userdata; int n; if (strcmp(name, "decline") == 0) return NE_XML_DECLINE; ne_buffer_concat(buf, "<", "{", nspace, "}", name, NULL); for (n = 0; atts && atts[n] != NULL; n+=2) { ne_buffer_concat(buf, " ", atts[n], "='", atts[n+1], "'", NULL); } ne_buffer_zappend(buf, ">"); return state + 1; } static int chardata(void *userdata, int state, const char *cdata, size_t len) { ne_buffer *buf = userdata; ne_buffer_append(buf, cdata, len); return !strncmp(cdata, "!ABORT!", len); } static int endelm(void *userdata, int state, const char *nspace, const char *name) { ne_buffer *buf = userdata; ne_buffer_concat(buf, "", NULL); return 0; } /* A set of SAX handlers which do as above, but change some element * names; used to check nested SAX handling is working properly. */ static int startelm_xform(void *userdata, int state, const char *nspace, const char *name, const char **atts) { if (strcmp(nspace, "two") == 0) return startelm(userdata, state, nspace, "xform", atts); else return NE_XML_DECLINE; } static int endelm_xform(void *userdata, int state, const char *nspace, const char *name) { if (strcmp(nspace, "two") == 0) return endelm(userdata, state, nspace, "xform"); else return NE_XML_DECLINE; } /* A set of SAX handlers which verify that state handling is working * correctly. */ static int startelm_state(void *userdata, int parent, const char *nspace, const char *name, const char **atts) { int n; if (strcmp(nspace, "state") != 0) return NE_XML_DECLINE; for (n = 0; atts[n]; n += 2) { if (strcmp(atts[n], "parent") == 0) { int expected = atoi(atts[n+1]); if (expected != parent) { char err[50]; sprintf(err, "parent state of %s was %d not %d", name, parent, expected); ne_buffer_zappend(userdata, err); } } } return atoi(name+1); } static int endelm_state(void *userdata, int state, const char *nspace, const char *name) { int expected = atoi(name + 1); ne_buffer *buf = userdata; if (state != expected) ne_buffer_concat(buf, "wrong state in endelm of ", name, NULL); return 0; } /* A set of SAX handlers which verify that abort handling is working * correctly. */ static int startelm_abort(void *buf, int parent, const char *nspace, const char *name, const char **atts) { if (strcmp(name, "abort-start") == 0) { ne_buffer_zappend(buf, "ABORT"); return NE_XML_ABORT; } else return startelm(buf, parent, nspace, name, atts); } static int endelm_abort(void *buf, int state, const char *nspace, const char *name) { if (strcmp(name, "abort-end") == 0) { ne_buffer_zappend(buf, "ABORT"); return -1; } else return 0; } enum match_type { match_valid = 0, match_invalid, match_nohands, match_encoding }; static int parse_match(const char *doc, const char *result, enum match_type t) { ne_xml_parser *p = ne_xml_create(); ne_buffer *buf = ne_buffer_create(); if (t == match_invalid) ne_xml_push_handler(p, startelm_abort, chardata, endelm_abort, buf); if (t != match_encoding && t != match_nohands) { ne_xml_push_handler(p, startelm_state, NULL, endelm_state, buf); ne_xml_push_handler(p, startelm, chardata, endelm, buf); ne_xml_push_handler(p, startelm_xform, chardata, endelm_xform, buf); } ne_xml_parse(p, doc, strlen(doc)); ne_xml_parse(p, "", 0); if (t == match_invalid) ONV(ne_xml_valid(p), ("parse did not fail: %s", buf->data)); else ONV(!ne_xml_valid(p), ("parse failed: %s", ne_xml_get_error(p))); if (t == match_encoding) { const char *enc = ne_xml_doc_encoding(p); ONV(strcmp(enc, result), ("encoding was `%s' not `%s'", enc, result)); } else if (t == match_valid) ONV(strcmp(result, buf->data), ("result mismatch: %s not %s", buf->data, result)); ne_xml_destroy(p); ne_buffer_destroy(buf); return OK; } static int matches(void) { #define PFX "\r\n" #define E(ns, n) "<{" ns "}" n ">" static const struct { const char *in, *out; enum match_type invalid; } ms[] = { /*** Simplest tests ***/ { PFX "", "<{}hello>"}, { PFX "", "<{}hello foo='bar'>"}, /*** Tests for character data handling. ***/ { PFX " world", "<{}hello> world"}, /* test for cdata between elements. */ { PFX "\r\n world", "<{}hello>\n<{}wide> world"}, /*** Tests for namespace handling. ***/ #define NSA "xmlns:foo='bar'" { PFX "", "<{bar}widget " NSA ">" "" }, /* inherited namespace expansion. */ { PFX "", "<{}widget " NSA ">" E("bar", "norman") ""}, { PFX "" "", "<{}widget " NSA " xmlns:abc='def' xmlns:g='z'>" E("bar", "norman") ""}, /* empty namespace default takes precedence. */ { PFX "" "", "<{foo}widget xmlns='foo'><{}smidgen xmlns=''>" E("", "norman") "" }, /* inherited empty namespace default */ { PFX "", "<{foo}bar xmlns='foo'><{}grok xmlns=''>" E("", "fish") "" }, /* regression test for neon <= 0.23.5 with libxml2, where the * "dereference entities" flag was not set by default. */ { PFX "", "<{}widget foo='no&body'>" }, { PFX "", "<{}widget foo='no body'>" }, /* tests for declined branches */ { PFX "fish" "yesgoodbye", "<{}hello><{}world>yesgoodbye" }, { PFX "fishbar", "<{}hello>" E("", "fish") "" }, /* tests for nested SAX handlers */ { PFX "", "<{two}hello xmlns='two'>" E("two", "xform") ""}, /* tests for state handling */ { PFX "", "" }, { PFX "", "" }, { PFX "blah", "" }, /* tests for abort handling */ { PFX "", "<{}hello><{}merry>ABORT", match_invalid }, { PFX "fish", "<{}hello><{}merry><{}abort-end>ABORT", match_invalid }, { PFX "!ABORT!", "<{}hello>!ABORT!", match_invalid }, { PFX "!ABORT!", "<{}hello>!ABORT!", match_invalid }, { PFX "!ABORT!", "<{}hello>!ABORT!", match_invalid }, /* tests for encodings */ { "", "ISO-8859-1", match_encoding }, { "", "UTF-8", match_encoding }, /* test that parse is valid even with no handlers registered. */ { PFX "world", "", match_nohands }, /* regression test for prefix matching bug fixed in 0.18.0 */ #define THENS "xmlns:d='foo' xmlns:dd='bar'" { PFX "", "<{foo}hello " THENS ">" }, /**** end of list ****/ { NULL, NULL } }; int n; for (n = 0; ms[n].in != NULL; n++) { CALL(parse_match(ms[n].in, ms[n].out, ms[n].invalid)); } return OK; } static int mapping(void) { static const struct ne_xml_idmap map[] = { { "fee", "bar", 1 }, { "foo", "bar", 2 }, { "bar", "foo", 3 }, { "", "bob", 4 }, { "balloon", "buffoon", 5}, { NULL, NULL, 0} }; int n; for (n = 0; map[n].id; n++) { int id = ne_xml_mapid(map, NE_XML_MAPLEN(map) - 1, map[n].nspace, map[n].name); ONV(id != map[n].id, ("mapped to id %d not %d", id, map[n].id)); } n = ne_xml_mapid(map, NE_XML_MAPLEN(map) - 1, "no-such", "element"); ONV(n != 0, ("unknown element got id %d not zero", n)); return OK; } /* Test for some parse failures */ static int fail_parse(void) { static const char *docs[] = { "foo", PFX "", /* malformed namespace declarations */ PFX "", PFX "", PFX "", #if 0 /* 2-byte encoding of '.': */ PFX "" "\x2F\xC0\xAE\x2E\x2F" "", /* 3-byte encoding of '.': */ PFX "" "\x2F\xE0\x80\xAE\x2E\x2F" "", /* 4-byte encoding of '.': */ PFX "" "\x2F\xF0\x80\x80\xAE\x2E\x2F" "", /* 5-byte encoding of '.': */ PFX "" "\x2F\xF8\x80\x80\x80\xAE\x2E\x2F" "", /* 6-byte encoding of '.': */ PFX "" "\x2F\xFC\x80\x80\x80\x80\xAE\x2E\x2F" "", /* two-byte encoding of '<' must not be parsed as a '<': */ PFX "\xC0\xBC" "foo>", #endif NULL }; int n; for (n = 0; docs[n]; n++) { ne_xml_parser *p = ne_xml_create(); const char *err; ne_xml_parse(p, docs[n], strlen(docs[n])); ne_xml_parse(p, "", 0); ONV(ne_xml_valid(p), ("`%s' was valid", docs[n])); err = ne_xml_get_error(p); ONV(strstr(err, "parse error") == NULL, ("bad error %s", err)); ne_xml_destroy(p); } return OK; } static int check_attrib(ne_xml_parser *p, const char **atts, const char *nspace, const char *name, const char *value) { const char *act = ne_xml_get_attr(p, atts, nspace, name); char err[50]; int ret = 0; if (value == NULL) { if (act != NULL) { sprintf(err, "attribute %s was set to %s", name, act); ret = NE_XML_ABORT; } } else { if (act == NULL) { sprintf(err, "attribute %s not found", name); ret = NE_XML_ABORT; } else if (strcmp(act, value) != 0) { sprintf(err, "attribute %s was %s not %s", name, act, value); ret = NE_XML_ABORT; } } if (ret == NE_XML_ABORT) ne_xml_set_error(p, err); return ret; } static int startelm_attrib(void *userdata, int state, const char *nspace, const char *name, const char **atts) { ne_xml_parser *p = userdata; if (strcmp(name, "hello") == 0) { CALL(check_attrib(p, atts, NULL, "first", "second")); CALL(check_attrib(p, atts, NULL, "third", "")); CALL(check_attrib(p, atts, "garth", "bar", "asda")); CALL(check_attrib(p, atts, "giraffe", "bar", NULL)); CALL(check_attrib(p, atts, "hot", "dog", NULL)); CALL(check_attrib(p, atts, NULL, "nonesuch", NULL)); } else if (strcmp(name, "goodbye") == 0) { if (atts[0] != NULL) { ne_xml_set_error(p, "non-empty attrib array"); return 1; } } return 1; } static int attributes(void) { ne_xml_parser *p = ne_xml_create(); static const char doc[] = PFX ""; ne_xml_push_handler(p, startelm_attrib, NULL, NULL, p); ne_xml_parse_v(p, doc, strlen(doc)); ONV(!ne_xml_valid(p), ("parse error: %s", ne_xml_get_error(p))); ne_xml_destroy(p); return OK; } /* Test for the get/set error interface */ static int errors(void) { ne_xml_parser *p = ne_xml_create(); const char *err; ONV(strcmp(ne_xml_get_error(p), "Unknown error") != 0, ("initial error string unspecified")); ne_xml_set_error(p, "Fish food"); err = ne_xml_get_error(p); ONV(strcmp(err, "Fish food"), ("wrong error %s!", err)); ne_xml_destroy(p); return 0; } ne_test tests[] = { T(matches), T(mapping), T(fail_parse), T(attributes), T(errors), T(NULL) }; tla-1.3.5+dfsg/src/libneon/test/socket.c0000644000175000017500000005307710457621776016620 0ustar useruser/* Socket handling tests Copyright (C) 2002-2004, Joe Orton This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ /* This module can be compiled with -DSOCKET_SSL enabled, to run all * the tests over an SSL connection. */ #include "config.h" #include #include /* for AF_INET6 */ #ifdef HAVE_STDLIB_H #include #endif #ifdef HAVE_STRING_H #include #endif #include /* for time() */ #include "ne_socket.h" #include "ne_utils.h" #include "ne_alloc.h" #include "child.h" #include "tests.h" #include "utils.h" #ifdef SOCKET_SSL #include #include #include "ne_ssl.h" SSL_CTX *server_ctx; ne_ssl_context *client_ctx; #endif static ne_sock_addr *localhost; static char buffer[BUFSIZ]; #if defined(AF_INET6) && defined(USE_GETADDRINFO) #define TEST_IPV6 #endif /* tests for doing init/finish multiple times. */ static int multi_init(void) { int res1 = ne_sock_init(), res2 = ne_sock_init(); ONV(res1 != res2, ("cached init result changed from %d to %d", res1, res2)); ne_sock_exit(); res1 = ne_sock_init(); ONV(res1 != res2, ("re-init after exit gave %d not %d", res1, res2)); res2 = ne_sock_init(); ONV(res1 != res2, ("second time, cached init result changed from %d to %d", res1, res2)); return OK; } static ne_socket *do_connect(ne_sock_addr *addr, unsigned int port) { ne_socket *sock = ne_sock_create(); const ne_inet_addr *ia; if (!sock) return NULL; for (ia = ne_addr_first(addr); ia; ia = ne_addr_next(addr)) { if (ne_sock_connect(sock, ia, port) == 0) return sock; } ne_sock_close(sock); return NULL; } #ifdef SOCKET_SSL /* FIXME: largely cut'n'pasted from ssl.c. */ static int init_ssl(void) { char *server_key; ne_ssl_certificate *cert; /* take srcdir as argv[1]. */ if (test_argc > 1) { server_key = ne_concat(test_argv[1], "/server.key", NULL); } else { server_key = "server.key"; } ONN("sock_init failed.\n", ne_sock_init()); server_ctx = SSL_CTX_new(SSLv23_server_method()); ONN("SSL_CTX_new failed", server_ctx == NULL); ONN("failed to load private key", !SSL_CTX_use_PrivateKey_file(server_ctx, server_key, SSL_FILETYPE_PEM)); ONN("failed to load certificate", !SSL_CTX_use_certificate_file(server_ctx, "server.cert", SSL_FILETYPE_PEM)); client_ctx = ne_ssl_context_create(); ONN("SSL_CTX_new failed for client", client_ctx == NULL); cert = ne_ssl_cert_read("ca/cert.pem"); ONN("could not load ca/cert.pem", cert == NULL); ne_ssl_ctx_trustcert(client_ctx, cert); return OK; } #endif static int resolve(void) { char buf[256]; localhost = ne_addr_resolve("localhost", 0); ONV(ne_addr_result(localhost), ("could not resolve `localhost': %s", ne_addr_error(localhost, buf, sizeof buf))); /* and again for child.c */ return lookup_localhost(); } static int serve_close(ne_socket *sock, void *ud) { return 0; } #ifdef SOCKET_SSL struct serve_pair { server_fn fn; void *userdata; }; static int wrap_serve(ne_socket *sock, void *ud) { struct serve_pair *pair = ud; int fd = ne_sock_fd(sock), ret; SSL *ssl = SSL_new(server_ctx); BIO *bio = BIO_new_socket(fd, BIO_NOCLOSE); ONN("SSL_new failed", ssl == NULL); SSL_set_bio(ssl, bio, bio); #define ERROR_SSL_STRING (ERR_reason_error_string(ERR_get_error())) NE_DEBUG(NE_DBG_SOCKET, "Doing SSL accept:\n"); ret = SSL_accept(ssl); if (ret != 1) { NE_DEBUG(NE_DBG_SOCKET, "SSL_accept failed: %s\n", ERROR_SSL_STRING); return 1; } NE_DEBUG(NE_DBG_SOCKET, "SSL accept okay.\n"); ne_sock_switch_ssl(sock, ssl); return pair->fn(sock, pair->userdata); } static int begin(ne_socket **sock, server_fn fn, void *ud) { struct serve_pair pair; pair.fn = fn; pair.userdata = ud; CALL(spawn_server(7777, wrap_serve, &pair)); *sock = do_connect(localhost, 7777); ONN("could not connect to localhost:7777", *sock == NULL); ONV(ne_sock_connect_ssl(*sock, client_ctx), ("SSL negotation failed: %s", ne_sock_error(*sock))); return OK; } #else /* non-SSL begin() function. */ static int begin(ne_socket **sock, server_fn fn, void *ud) { CALL(spawn_server(7777, fn, ud)); *sock = do_connect(localhost, 7777); ONN("could not connect to localhost:7777", *sock == NULL); return OK; } #endif static int resolve_numeric(void) { ne_sock_addr *addr = ne_addr_resolve("127.0.0.1", 0); ONV(ne_addr_result(addr), ("failed to resolve 127.0.0.1: %s", ne_addr_error(addr, buffer, sizeof buffer))); ONN("ne_addr_first returned NULL", ne_addr_first(addr) == NULL); ONN("ne_iaddr_print didn't return buffer", ne_iaddr_print(ne_addr_first(addr), buffer, sizeof buffer) != buffer); ONV(strcmp(buffer, "127.0.0.1"), ("ntop gave `%s' not 127.0.0.1", buffer)); ne_addr_destroy(addr); return OK; } #if 0 static int resolve_ipv6(void) { char err[256]; ne_sock_addr *addr = ne_addr_resolve("[::1]", 0); ONV(ne_addr_result(addr), ("could not resolve `[::1]': %s", ne_addr_error(addr, err, sizeof err))); ne_addr_destroy(addr); return OK; } #endif static const unsigned char raw_127[4] = "\x7f\0\0\01", /* 127.0.0.1 */ raw6_nuls[16] = /* :: */ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"; #ifdef TEST_IPV6 static const unsigned char raw6_cafe[16] = /* feed::cafe */ "\xfe\xed\0\0\0\0\0\0\0\0\0\0\0\0\xca\xfe", raw6_babe[16] = /* cafe:babe:: */ "\xca\xfe\xba\xbe\0\0\0\0\0\0\0\0\0\0\0\0"; #endif static int addr_make_v4(void) { ne_inet_addr *ia; char pr[50]; ia = ne_iaddr_make(ne_iaddr_ipv4, raw_127); ONN("ne_iaddr_make returned NULL", ia == NULL); ne_iaddr_print(ia, pr, sizeof pr); ONV(strcmp(pr, "127.0.0.1"), ("address was %s not 127.0.0.1", pr)); ne_iaddr_free(ia); return OK; } static int addr_make_v6(void) { #ifdef TEST_IPV6 struct { const unsigned char *addr; const char *rep; } as[] = { { raw6_cafe, "feed::cafe" }, { raw6_babe, "cafe:babe::" }, { raw6_nuls, "::" }, { NULL, NULL } }; int n; for (n = 0; as[n].rep != NULL; n++) { ne_inet_addr *ia = ne_iaddr_make(ne_iaddr_ipv6, as[n].addr); char pr[128]; ONV(ia == NULL, ("could not make address for %d", n)); ne_iaddr_print(ia, pr, sizeof pr); ONV(strcmp(pr, as[n].rep), ("address %d was '%s' not '%s'", n, pr, as[n].rep)); ne_iaddr_free(ia); } return OK; #else /* should fail when lacking IPv6 support. */ ne_inet_addr *ia = ne_iaddr_make(ne_iaddr_ipv6, raw6_nuls); ONN("ne_iaddr_make did not return NULL", ia != NULL); #endif return OK; } static int addr_compare(void) { ne_inet_addr *ia1, *ia2; int ret; ia1 = ne_iaddr_make(ne_iaddr_ipv4, raw_127); ia2 = ne_iaddr_make(ne_iaddr_ipv4, raw_127); ONN("addr_make returned NULL", !ia1 || !ia2); ret = ne_iaddr_cmp(ia1, ia2); ONV(ret != 0, ("comparison of equal IPv4 addresses was %d", ret)); ne_iaddr_free(ia2); ia2 = ne_iaddr_make(ne_iaddr_ipv4, "abcd"); ret = ne_iaddr_cmp(ia1, ia2); ONN("comparison of unequal IPv4 addresses was zero", ret == 0); #ifdef TEST_IPV6 ne_iaddr_free(ia2); ia2 = ne_iaddr_make(ne_iaddr_ipv6, "feed::1"); ret = ne_iaddr_cmp(ia1, ia2); ONN("comparison of IPv4 and IPv6 addresses was zero", ret == 0); ne_iaddr_free(ia1); ia1 = ne_iaddr_make(ne_iaddr_ipv4, "feed::1"); ret = ne_iaddr_cmp(ia1, ia2); ONN("comparison of equal IPv6 addresses was zero", ret == 0); #endif ne_iaddr_free(ia1); ne_iaddr_free(ia2); return OK; } static int just_connect(void) { ne_socket *sock; CALL(begin(&sock, serve_close, NULL)); ne_sock_close(sock); return await_server(); } /* Connect to an address crafted using ne_iaddr_make rather than from * the resolver. */ static int addr_connect(void) { ne_socket *sock = ne_sock_create(); ne_inet_addr *ia; ia = ne_iaddr_make(ne_iaddr_ipv4, raw_127); ONN("ne_iaddr_make returned NULL", ia == NULL); CALL(spawn_server(7777, serve_close, NULL)); ONN("could not connect", ne_sock_connect(sock, ia, 7777)); ne_sock_close(sock); CALL(await_server()); ne_iaddr_free(ia); return OK; } /* Exect a read() to return EOF */ static int expect_close(ne_socket *sock) { ssize_t n = ne_sock_read(sock, buffer, 1); ONV(n > 0, ("read got %" NE_FMT_SSIZE_T "bytes not closure", n)); ONV(n < 0 && n != NE_SOCK_CLOSED, ("read got error not closure: `%s'", ne_sock_error(sock))); return OK; } static int good_close(ne_socket *sock) { NE_DEBUG(NE_DBG_SOCKET, "Socket error was %s\n", ne_sock_error(sock)); ONN("close failed", ne_sock_close(sock)); return OK; } /* Finish a test, closing socket and rejoining child. If eof is non-zero, * expects to read EOF from the socket before closing. */ static int finish(ne_socket *sock, int eof) { if (eof) CALL(expect_close(sock)); CALL(good_close(sock)); return await_server(); } /* Exect a ne_sock_peek() to return EOF */ static int expect_peek_close(ne_socket *sock) { ssize_t n = ne_sock_read(sock, buffer, 1); ONV(n != NE_SOCK_CLOSED, ("peek gave %" NE_FMT_SSIZE_T " not closure", n)); return OK; } /* Test that just does a connect then a close. */ static int read_close(void) { ne_socket *sock; CALL(begin(&sock, serve_close, NULL)); CALL(expect_close(sock)); ONN("close failed", ne_sock_close(sock)); return await_server(); } /* Test that just does a connect then a close (but gets the close via * ne_sock_peek). */ static int peek_close(void) { ne_socket *sock; CALL(begin(&sock, serve_close, NULL)); CALL(expect_peek_close(sock)); ONN("close failed", ne_sock_close(sock)); return await_server(); } /* Don't change this string. */ #define STR "Hello, World." /* do a sock_peek() on sock for 'len' bytes, and expect 'str'. */ static int peek_expect(ne_socket *sock, const char *str, size_t len) { ssize_t ret = ne_sock_peek(sock, buffer, len); ONV((ssize_t)len != ret, ("peek got %" NE_FMT_SSIZE_T " bytes not %" NE_FMT_SIZE_T, ret, len)); ONV(memcmp(str, buffer, len), ("peek mismatch: `%.*s' not `%.*s'", (int)len, buffer, (int)len, str)); return OK; } /* do a sock_read() on sock for 'len' bytes, and expect 'str'. */ static int read_expect(ne_socket *sock, const char *str, size_t len) { ssize_t ret = ne_sock_read(sock, buffer, len); ONV((ssize_t)len != ret, ("peek got %" NE_FMT_SSIZE_T " bytes not %" NE_FMT_SIZE_T, ret, len)); ONV(memcmp(str, buffer, len), ("read mismatch: `%.*s' not `%.*s'", (int)len, buffer, (int)len, str)); return OK; } /* Declare a struct string */ #define DECL(var,str) struct string var = { str, 0 }; var.len = strlen(str) /* Test a simple read. */ static int single_read(void) { ne_socket *sock; DECL(hello, STR); CALL(begin(&sock, serve_sstring, &hello)); CALL(read_expect(sock, STR, strlen(STR))); CALL(expect_close(sock)); CALL(good_close(sock)); return await_server(); } /* Test a simple peek. */ static int single_peek(void) { ne_socket *sock; DECL(hello, STR); CALL(begin(&sock, serve_sstring, &hello)); CALL(peek_expect(sock, STR, strlen(STR))); return finish(sock, 0); } /* Test lots of 1-byte reads. */ static int small_reads(void) { ne_socket *sock; char *pnt; DECL(hello, STR); CALL(begin(&sock, serve_sstring, &hello)); /* read the string byte-by-byte. */ for (pnt = hello.data; *pnt; pnt++) { CALL(read_expect(sock, pnt, 1)); } return finish(sock, 1); } /* peek or read, expecting to get given string. */ #define READ(str) CALL(read_expect(sock, str, strlen(str))) #define PEEK(str) CALL(peek_expect(sock, str, strlen(str))) /* Stress out the read buffer handling a little. */ static int read_and_peek(void) { ne_socket *sock; DECL(hello, STR); CALL(begin(&sock, serve_sstring, &hello)); PEEK("Hello"); PEEK("Hell"); PEEK(STR); READ("He"); PEEK("llo, "); READ("l"); PEEK("lo, World."); READ("lo, Worl"); PEEK("d."); PEEK("d"); READ("d."); return finish(sock, 1); } /* Read more bytes than were written. */ static int larger_read(void) { ne_socket *sock; ssize_t nb; DECL(hello, STR); CALL(begin(&sock, serve_sstring, &hello)); nb = ne_sock_read(sock, buffer, hello.len + 10); ONV(nb != (ssize_t)hello.len, ("read gave too many bytes (%" NE_FMT_SSIZE_T ")", nb)); ONN("read gave wrong data", memcmp(buffer, hello.data, hello.len)); return finish(sock, 1); } static int line_expect(ne_socket *sock, const char *line) { ssize_t ret = ne_sock_readline(sock, buffer, BUFSIZ); size_t len = strlen(line); ONV(ret == NE_SOCK_CLOSED, ("socket closed, expecting `%s'", line)); ONV(ret < 0, ("socket error `%s', expecting `%s'", ne_sock_error(sock), line)); ONV((size_t)ret != len, ("readline got %" NE_FMT_SSIZE_T ", expecting `%s'", ret, line)); ONV(strcmp(line, buffer), ("readline mismatch: `%s' not `%s'", buffer, line)); return OK; } #define LINE(x) CALL(line_expect(sock, x)) #define STR2 "Goodbye, cruel world." static int line_simple(void) { ne_socket *sock; DECL(oneline, STR "\n" STR2 "\n"); CALL(begin(&sock, serve_sstring, &oneline)); LINE(STR "\n"); LINE(STR2 "\n"); return finish(sock, 1); } static int line_closure(void) { ne_socket *sock; ssize_t ret; DECL(oneline, STR "\n" "foobar"); CALL(begin(&sock, serve_sstring, &oneline)); LINE(STR "\n"); ret = ne_sock_readline(sock, buffer, BUFSIZ); ONV(ret != NE_SOCK_CLOSED, ("readline got %" NE_FMT_SSIZE_T " not EOF", ret)); return finish(sock, 0); } /* check that empty lines are handled correctly. */ static int line_empty(void) { ne_socket *sock; DECL(oneline, "\n\na\n\n"); CALL(begin(&sock, serve_sstring, &oneline)); LINE("\n"); LINE("\n"); LINE("a\n"); LINE("\n"); return finish(sock, 1); } static int line_toolong(void) { ne_socket *sock; ssize_t ret; DECL(oneline, "AAAAAA\n"); CALL(begin(&sock, serve_sstring, &oneline)); ret = ne_sock_readline(sock, buffer, 5); ONV(ret != NE_SOCK_ERROR, ("readline should fail on long line: %" NE_FMT_SSIZE_T, ret)); return finish(sock, 0); } /* readline()s mingled with other operations: buffering tests. */ static int line_mingle(void) { ne_socket *sock; DECL(oneline, "alpha\nbeta\ndelta\ngamma\n"); CALL(begin(&sock, serve_sstring, &oneline)); READ("a"); LINE("lpha\n"); READ("beta"); LINE("\n"); PEEK("d"); PEEK("delt"); LINE("delta\n"); READ("gam"); LINE("ma\n"); return finish(sock, 1); } /* readline which needs multiple read() calls. */ static int line_chunked(void) { ne_socket *sock; DECL(oneline, "this is a line\n"); CALL(begin(&sock, serve_sstring_slowly, &oneline)); LINE("this is a line\n"); return finish(sock, 1); } static time_t to_start, to_finish; static int to_begin(ne_socket **sock) { CALL(begin(sock, sleepy_server, NULL)); ne_sock_read_timeout(*sock, 1); to_start = time(NULL); return OK; } static int to_end(ne_socket *sock) { to_finish = time(NULL); reap_server(); /* hopefully it's hung. */ ONN("timeout ignored, or very slow machine", to_finish - to_start > 3); ONN("close failed", ne_sock_close(sock)); return OK; } #define TO_BEGIN ne_socket *sock; CALL(to_begin(&sock)) #define TO_OP(x) do { int to_ret = (x); \ ONV(to_ret != NE_SOCK_TIMEOUT, ("operation did not timeout: %d", to_ret)); \ } while (0) #define TO_FINISH return to_end(sock) static int peek_timeout(void) { TO_BEGIN; TO_OP(ne_sock_peek(sock, buffer, 1)); TO_FINISH; } static int read_timeout(void) { TO_BEGIN; TO_OP(ne_sock_read(sock, buffer, 1)); TO_FINISH; } static int readline_timeout(void) { TO_BEGIN; TO_OP(ne_sock_readline(sock, buffer, 1)); TO_FINISH; } static int fullread_timeout(void) { TO_BEGIN; TO_OP(ne_sock_fullread(sock, buffer, 1)); TO_FINISH; } static int serve_expect(ne_socket *sock, void *ud) { struct string *str = ud; ssize_t ret; while (str->len && (ret = ne_sock_read(sock, buffer, sizeof(buffer))) > 0) { NE_DEBUG(NE_DBG_SOCKET, "Got %" NE_FMT_SSIZE_T " bytes.\n", ret); ONV(memcmp(str->data, buffer, ret), ("unexpected data: [%.*s] not [%.*s]", (int)ret, buffer, (int)ret, str->data)); str->data += ret; str->len -= ret; NE_DEBUG(NE_DBG_SOCKET, "%" NE_FMT_SIZE_T " bytes left.\n", str->len); } NE_DEBUG(NE_DBG_SOCKET, "All data read.\n"); return OK; } static int full_write(ne_socket *sock, const char *data, size_t len) { int ret = ne_sock_fullwrite(sock, data, len); ONV(ret, ("write failed (%d): %s", ret, ne_sock_error(sock))); return OK; } #define WRITEL(str) CALL(full_write(sock, str, strlen(str))); \ minisleep() static int small_writes(void) { ne_socket *sock; DECL(str, "This\nIs\nSome\nText.\n"); CALL(begin(&sock, serve_expect, &str)); WRITEL("This\n"); WRITEL("Is\n"); WRITEL("Some\n"); WRITEL("Text.\n"); return finish(sock, 1); } static int large_writes(void) { #define LARGE_SIZE (123456) struct string str; ne_socket *sock; ssize_t n; str.data = ne_malloc(LARGE_SIZE); str.len = LARGE_SIZE; for (n = 0; n < LARGE_SIZE; n++) str.data[n] = 41 + n % 130; CALL(begin(&sock, serve_expect, &str)); CALL(full_write(sock, str.data, str.len)); ne_free(str.data); return finish(sock, 1); } /* echoes back lines. */ static int echo_server(ne_socket *sock, void *ud) { ssize_t ret; while ((ret = ne_sock_readline(sock, buffer, sizeof(buffer))) > 0) { NE_DEBUG(NE_DBG_SOCKET, "Line: %s", buffer); ONN("write failed", ne_sock_fullwrite(sock, buffer, ret)); NE_DEBUG(NE_DBG_SOCKET, "Wrote line.\n"); } ONN("readline failed", ret != NE_SOCK_CLOSED); return 0; } static int echo_expect(ne_socket *sock, const char *line) { CALL(full_write(sock, line, strlen(line))); return line_expect(sock, line); } #define ECHO(line) CALL(echo_expect(sock, line)) static int echo_lines(void) { ne_socket *sock; CALL(begin(&sock, echo_server, NULL)); ECHO("hello,\n"); ECHO("\n"); ECHO("world\n"); return finish(sock, 0); } #ifdef SOCKET_SSL /* harder to simulate closure cases for an SSL connection, since it * may be doing multiple read()s or write()s per ne_sock_* call. */ static int ssl_closure(void) { ne_socket *sock; ssize_t ret; CALL(begin(&sock, serve_close, NULL)); CALL(full_write(sock, "a", 1)); CALL(await_server()); do { ret = ne_sock_fullwrite(sock, "a", 1); } while (ret == 0); ONV(ret != NE_SOCK_RESET && ret != NE_SOCK_CLOSED, ("write got %" NE_FMT_SSIZE_T " not reset or closure", ret)); return good_close(sock); } static int serve_truncate(ne_socket *sock, void *userdata) { exit(0); } /* when an EOF is received without a clean shutdown (close_notify message). */ static int ssl_truncate(void) { ne_socket *sock; int ret; CALL(begin(&sock, serve_truncate, NULL)); ret = ne_sock_read(sock, buffer, 1); ONV(ret != NE_SOCK_TRUNC, ("socket got error %d not truncation: `%s'", ret, ne_sock_error(sock))); return finish(sock, 0); } #else /* thanks to W Richard Stevens for the precise repro case for getting * an RST on demand. */ static int write_reset(void) { ne_socket *sock; int ret; CALL(begin(&sock, serve_close, NULL)); CALL(full_write(sock, "a", 1)); CALL(await_server()); ret = ne_sock_fullwrite(sock, "a", 1); if (ret == 0) { ne_sock_close(sock); return SKIP; } ONV(ret != NE_SOCK_RESET, ("write got %d not reset", ret)); return good_close(sock); } static int read_reset(void) { ne_socket *sock; ssize_t ret; CALL(begin(&sock, serve_close, NULL)); CALL(full_write(sock, "a", 1)); CALL(await_server()); ret = ne_sock_read(sock, buffer, 1); if (ret == NE_SOCK_CLOSED) { ne_sock_close(sock); return SKIP; } ONV(ret != NE_SOCK_RESET, ("read got %" NE_FMT_SSIZE_T " not reset", ret)); return good_close(sock); } #endif ne_test tests[] = { T(multi_init), T_LEAKY(resolve), T(resolve_numeric), #ifdef SOCKET_SSL T_LEAKY(init_ssl), #endif T(addr_make_v4), T(addr_make_v6), T(addr_compare), T(just_connect), T(addr_connect), T(read_close), T(peek_close), T(single_read), T(single_peek), T(small_reads), T(read_and_peek), T(larger_read), T(line_simple), T(line_closure), T(line_empty), T(line_toolong), T(line_mingle), T(line_chunked), T(small_writes), T(large_writes), T(echo_lines), #ifdef SOCKET_SSL T(ssl_closure), T(ssl_truncate), #else T(write_reset), T(read_reset), #endif T(read_timeout), T(peek_timeout), T(readline_timeout), T(fullread_timeout), T(NULL) }; tla-1.3.5+dfsg/src/libneon/config.hw0000644000175000017500000000315210457621776015777 0ustar useruser/* Win32 config.h Copyright (C) 1999-2000, Peter Boos Copyright (C) 2002, Joe Orton This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA */ #if defined(_WIN32) && !defined(WIN32) #define WIN32 #endif #ifdef WIN32 #define NEON_VERSION "0.24.7" #define NEON_VERSION_MAJOR (0) #define NEON_VERSION_MINOR (24) #define HAVE_ERRNO_H #define HAVE_LIMITS_H #define HAVE_STDLIB_H #define HAVE_STRING_H #define HAVE_MEMCPY #ifndef NEON_NODAV #define USE_DAV_LOCKS #endif #define NE_FMT_SIZE_T "u" #define NE_FMT_SSIZE_T "d" #define NE_FMT_OFF_T "ld" /* Win32 uses a underscore, so we use a macro to eliminate that. */ #define snprintf _snprintf #define vsnprintf _vsnprintf #define strcasecmp strcmpi #define strncasecmp strnicmp #define ssize_t int #define inline __inline #define off_t _off_t #include #define read _read #endif tla-1.3.5+dfsg/src/libneon/aclocal.m40000644000175000017500000063356710457621776016055 0ustar useruser# generated automatically by aclocal 1.8.3 -*- Autoconf -*- # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 # Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. # libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- # serial 47 AC_PROG_LIBTOOL # AC_PROVIDE_IFELSE(MACRO-NAME, IF-PROVIDED, IF-NOT-PROVIDED) # ----------------------------------------------------------- # If this macro is not defined by Autoconf, define it here. m4_ifdef([AC_PROVIDE_IFELSE], [], [m4_define([AC_PROVIDE_IFELSE], [m4_ifdef([AC_PROVIDE_$1], [$2], [$3])])]) # backported from libtool 1.6 by Paolo Bonzini # When AC_LIBTOOL_TAGS is used, I redefine _LT_AC_TAGCONFIG # to be more similar to the libtool 1.6 implementation, which # uses an m4 loop and m4 case instead of a shell loop. This # way the CXX/GCJ/F77/RC tests are not always expanded. # AC_LIBTOOL_TAGS # --------------- # tags to enable AC_DEFUN([AC_LIBTOOL_TAGS], [m4_define([_LT_TAGS],[$1]) m4_define([_LT_AC_TAGCONFIG], [ if test -f "$ltmain"; then if test ! -f "${ofile}"; then AC_MSG_WARN([output file `$ofile' does not exist]) fi if test -z "$LTCC"; then eval "`$SHELL ${ofile} --config | grep '^LTCC='`" if test -z "$LTCC"; then AC_MSG_WARN([output file `$ofile' does not look like a libtool script]) else AC_MSG_WARN([using `LTCC=$LTCC', extracted from `$ofile']) fi fi AC_FOREACH([_LT_TAG], _LT_TAGS, [m4_case(_LT_TAG, [CXX], [ if test -n "$CXX" && test "X$CXX" != "Xno"; then AC_LIBTOOL_LANG_CXX_CONFIG available_tags="$available_tags _LT_TAG" fi], [F77], [ if test -n "$F77" && test "X$F77" != "Xno"; then AC_LIBTOOL_LANG_F77_CONFIG available_tags="$available_tags _LT_TAG" fi], [GCJ], [ if test -n "$GCJ" && test "X$GCJ" != "Xno"; then AC_LIBTOOL_LANG_GCJ_CONFIG available_tags="$available_tags _LT_TAG" fi], [RC], [ if test -n "$RC" && test "X$RC" != "Xno"; then AC_LIBTOOL_LANG_RC_CONFIG available_tags="$available_tags _LT_TAG" fi], [m4_errprintn(m4_location[: error: invalid tag name: ]"_LT_TAG") m4_exit(1)]) ]) fi ])dnl _LT_AC_TAG_CONFIG ]) # AC_PROG_LIBTOOL # --------------- AC_DEFUN([AC_PROG_LIBTOOL], [AC_REQUIRE([_AC_PROG_LIBTOOL])dnl dnl If AC_PROG_CXX has already been expanded, run AC_LIBTOOL_CXX dnl immediately, otherwise, hook it in at the end of AC_PROG_CXX. AC_PROVIDE_IFELSE([AC_PROG_CXX], [AC_LIBTOOL_CXX], [define([AC_PROG_CXX], defn([AC_PROG_CXX])[AC_LIBTOOL_CXX ])]) dnl And a similar setup for Fortran 77 support AC_PROVIDE_IFELSE([AC_PROG_F77], [AC_LIBTOOL_F77], [define([AC_PROG_F77], defn([AC_PROG_F77])[AC_LIBTOOL_F77 ])]) dnl Quote A][M_PROG_GCJ so that aclocal doesn't bring it in needlessly. dnl If either AC_PROG_GCJ or A][M_PROG_GCJ have already been expanded, run dnl AC_LIBTOOL_GCJ immediately, otherwise, hook it in at the end of both. AC_PROVIDE_IFELSE([AC_PROG_GCJ], [AC_LIBTOOL_GCJ], [AC_PROVIDE_IFELSE([A][M_PROG_GCJ], [AC_LIBTOOL_GCJ], [AC_PROVIDE_IFELSE([LT_AC_PROG_GCJ], [AC_LIBTOOL_GCJ], [ifdef([AC_PROG_GCJ], [define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[AC_LIBTOOL_GCJ])]) ifdef([A][M_PROG_GCJ], [define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[AC_LIBTOOL_GCJ])]) ifdef([LT_AC_PROG_GCJ], [define([LT_AC_PROG_GCJ], defn([LT_AC_PROG_GCJ])[AC_LIBTOOL_GCJ])])])]) ])])# AC_PROG_LIBTOOL # _AC_PROG_LIBTOOL # ---------------- AC_DEFUN([_AC_PROG_LIBTOOL], [AC_REQUIRE([AC_LIBTOOL_SETUP])dnl AC_BEFORE([$0],[AC_LIBTOOL_CXX])dnl AC_BEFORE([$0],[AC_LIBTOOL_F77])dnl AC_BEFORE([$0],[AC_LIBTOOL_GCJ])dnl # This can be used to rebuild libtool when needed LIBTOOL_DEPS="$ac_aux_dir/ltmain.sh" # Always use our own libtool. LIBTOOL='$(SHELL) $(top_builddir)/libtool' AC_SUBST(LIBTOOL)dnl # Prevent multiple expansion define([AC_PROG_LIBTOOL], []) ])# _AC_PROG_LIBTOOL # AC_LIBTOOL_SETUP # ---------------- AC_DEFUN([AC_LIBTOOL_SETUP], [AC_PREREQ(2.50)dnl AC_REQUIRE([AC_ENABLE_SHARED])dnl AC_REQUIRE([AC_ENABLE_STATIC])dnl AC_REQUIRE([AC_ENABLE_FAST_INSTALL])dnl AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_PROG_LD])dnl AC_REQUIRE([AC_PROG_LD_RELOAD_FLAG])dnl AC_REQUIRE([AC_PROG_NM])dnl AC_REQUIRE([AC_PROG_LN_S])dnl AC_REQUIRE([AC_DEPLIBS_CHECK_METHOD])dnl # Autoconf 2.13's AC_OBJEXT and AC_EXEEXT macros only works for C compilers! AC_REQUIRE([AC_OBJEXT])dnl AC_REQUIRE([AC_EXEEXT])dnl dnl AC_LIBTOOL_SYS_MAX_CMD_LEN AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE AC_LIBTOOL_OBJDIR AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl _LT_AC_PROG_ECHO_BACKSLASH case $host_os in aix3*) # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi ;; esac # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. Xsed='sed -e s/^X//' [sed_quote_subst='s/\([\\"\\`$\\\\]\)/\\\1/g'] # Same as above, but do not quote variable references. [double_quote_subst='s/\([\\"\\`\\\\]\)/\\\1/g'] # Sed substitution to delay expansion of an escaped shell variable in a # double_quote_subst'ed string. delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' # Sed substitution to avoid accidental globbing in evaled expressions no_glob_subst='s/\*/\\\*/g' # Constants: rm="rm -f" # Global variables: default_ofile=libtool can_build_shared=yes # All known linkers require a `.a' archive for static linking (except M$VC, # which needs '.lib'). libext=a ltmain="$ac_aux_dir/ltmain.sh" ofile="$default_ofile" with_gnu_ld="$lt_cv_prog_gnu_ld" AC_CHECK_TOOL(AR, ar, false) AC_CHECK_TOOL(RANLIB, ranlib, :) AC_CHECK_TOOL(STRIP, strip, :) old_CC="$CC" old_CFLAGS="$CFLAGS" # Set sane defaults for various variables test -z "$AR" && AR=ar test -z "$AR_FLAGS" && AR_FLAGS=cru test -z "$AS" && AS=as test -z "$CC" && CC=cc test -z "$LTCC" && LTCC=$CC test -z "$DLLTOOL" && DLLTOOL=dlltool test -z "$LD" && LD=ld test -z "$LN_S" && LN_S="ln -s" test -z "$MAGIC_CMD" && MAGIC_CMD=file test -z "$NM" && NM=nm test -z "$SED" && SED=sed test -z "$OBJDUMP" && OBJDUMP=objdump test -z "$RANLIB" && RANLIB=: test -z "$STRIP" && STRIP=: test -z "$ac_objext" && ac_objext=o # Determine commands to create old-style static archives. old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs' old_postinstall_cmds='chmod 644 $oldlib' old_postuninstall_cmds= if test -n "$RANLIB"; then case $host_os in openbsd*) old_postinstall_cmds="\$RANLIB -t \$oldlib~$old_postinstall_cmds" ;; *) old_postinstall_cmds="\$RANLIB \$oldlib~$old_postinstall_cmds" ;; esac old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" fi # Only perform the check for file, if the check method requires it case $deplibs_check_method in file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then AC_PATH_MAGIC fi ;; esac AC_PROVIDE_IFELSE([AC_LIBTOOL_DLOPEN], enable_dlopen=yes, enable_dlopen=no) AC_PROVIDE_IFELSE([AC_LIBTOOL_WIN32_DLL], enable_win32_dll=yes, enable_win32_dll=no) AC_ARG_ENABLE([libtool-lock], [AC_HELP_STRING([--disable-libtool-lock], [avoid locking (might break parallel builds)])]) test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes AC_ARG_WITH([pic], [AC_HELP_STRING([--with-pic], [try to use only PIC/non-PIC objects @<:@default=use both@:>@])], [pic_mode="$withval"], [pic_mode=default]) test -z "$pic_mode" && pic_mode=default # Use C for the default configuration in the libtool script tagname= AC_LIBTOOL_LANG_C_CONFIG _LT_AC_TAGCONFIG ])# AC_LIBTOOL_SETUP # _LT_AC_SYS_COMPILER # ------------------- AC_DEFUN([_LT_AC_SYS_COMPILER], [AC_REQUIRE([AC_PROG_CC])dnl # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # Allow CC to be a program name with arguments. compiler=$CC ])# _LT_AC_SYS_COMPILER # _LT_AC_SYS_LIBPATH_AIX # ---------------------- # Links a minimal program and checks the executable # for the system default hardcoded library path. In most cases, # this is /usr/lib:/lib, but when the MPI compilers are used # the location of the communication and MPI libs are included too. # If we don't find anything, use the default library path according # to the aix ld manual. AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX], [AC_LINK_IFELSE(AC_LANG_PROGRAM,[ aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'`; fi],[]) if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi ])# _LT_AC_SYS_LIBPATH_AIX # _LT_AC_SHELL_INIT(ARG) # ---------------------- AC_DEFUN([_LT_AC_SHELL_INIT], [ifdef([AC_DIVERSION_NOTICE], [AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)], [AC_DIVERT_PUSH(NOTICE)]) $1 AC_DIVERT_POP ])# _LT_AC_SHELL_INIT # _LT_AC_PROG_ECHO_BACKSLASH # -------------------------- # Add some code to the start of the generated configure script which # will find an echo command which doesn't interpret backslashes. AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH], [_LT_AC_SHELL_INIT([ # Check that we are running under the correct shell. SHELL=${CONFIG_SHELL-/bin/sh} case X$ECHO in X*--fallback-echo) # Remove one level of quotation (which was required for Make). ECHO=`echo "$ECHO" | sed 's,\\\\\[$]\\[$]0,'[$]0','` ;; esac echo=${ECHO-echo} if test "X[$]1" = X--no-reexec; then # Discard the --no-reexec flag, and continue. shift elif test "X[$]1" = X--fallback-echo; then # Avoid inline document here, it may be left over : elif test "X`($echo '\t') 2>/dev/null`" = 'X\t' ; then # Yippee, $echo works! : else # Restart under the correct shell. exec $SHELL "[$]0" --no-reexec ${1+"[$]@"} fi if test "X[$]1" = X--fallback-echo; then # used as fallback echo shift cat </dev/null && echo_test_string="`eval $cmd`" && (test "X$echo_test_string" = "X$echo_test_string") 2>/dev/null then break fi done fi if test "X`($echo '\t') 2>/dev/null`" = 'X\t' && echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then : else # The Solaris, AIX, and Digital Unix default echo programs unquote # backslashes. This makes it impossible to quote backslashes using # echo "$something" | sed 's/\\/\\\\/g' # # So, first we look for a working echo in the user's PATH. lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for dir in $PATH /usr/ucb; do IFS="$lt_save_ifs" if (test -f $dir/echo || test -f $dir/echo$ac_exeext) && test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' && echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then echo="$dir/echo" break fi done IFS="$lt_save_ifs" if test "X$echo" = Xecho; then # We didn't find a better echo, so look for alternatives. if test "X`(print -r '\t') 2>/dev/null`" = 'X\t' && echo_testing_string=`(print -r "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then # This shell has a builtin print -r that does the trick. echo='print -r' elif (test -f /bin/ksh || test -f /bin/ksh$ac_exeext) && test "X$CONFIG_SHELL" != X/bin/ksh; then # If we have ksh, try running configure again with it. ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh} export ORIGINAL_CONFIG_SHELL CONFIG_SHELL=/bin/ksh export CONFIG_SHELL exec $CONFIG_SHELL "[$]0" --no-reexec ${1+"[$]@"} else # Try using printf. echo='printf %s\n' if test "X`($echo '\t') 2>/dev/null`" = 'X\t' && echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then # Cool, printf works : elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` && test "X$echo_testing_string" = 'X\t' && echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL export CONFIG_SHELL SHELL="$CONFIG_SHELL" export SHELL echo="$CONFIG_SHELL [$]0 --fallback-echo" elif echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` && test "X$echo_testing_string" = 'X\t' && echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then echo="$CONFIG_SHELL [$]0 --fallback-echo" else # maybe with a smaller string... prev=: for cmd in 'echo test' 'sed 2q "[$]0"' 'sed 10q "[$]0"' 'sed 20q "[$]0"' 'sed 50q "[$]0"'; do if (test "X$echo_test_string" = "X`eval $cmd`") 2>/dev/null then break fi prev="$cmd" done if test "$prev" != 'sed 50q "[$]0"'; then echo_test_string=`eval $prev` export echo_test_string exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "[$]0" ${1+"[$]@"} else # Oops. We lost completely, so just stick with echo. echo=echo fi fi fi fi fi fi # Copy echo and quote the copy suitably for passing to libtool from # the Makefile, instead of quoting the original, which is used later. ECHO=$echo if test "X$ECHO" = "X$CONFIG_SHELL [$]0 --fallback-echo"; then ECHO="$CONFIG_SHELL \\\$\[$]0 --fallback-echo" fi AC_SUBST(ECHO) ])])# _LT_AC_PROG_ECHO_BACKSLASH # _LT_AC_LOCK # ----------- AC_DEFUN([_LT_AC_LOCK], [AC_ARG_ENABLE([libtool-lock], [AC_HELP_STRING([--disable-libtool-lock], [avoid locking (might break parallel builds)])]) test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes # Some flags need to be propagated to the compiler or linker for good # libtool support. case $host in ia64-*-hpux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.$ac_objext` in *ELF-32*) HPUX_IA64_MODE="32" ;; *ELF-64*) HPUX_IA64_MODE="64" ;; esac fi rm -rf conftest* ;; *-*-irix6*) # Find out which ABI we are using. echo '[#]line __oline__ "configure"' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then if test "$lt_cv_prog_gnu_ld" = yes; then case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -melf32bsmip" ;; *N32*) LD="${LD-ld} -melf32bmipn32" ;; *64-bit*) LD="${LD-ld} -melf64bmip" ;; esac else case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -32" ;; *N32*) LD="${LD-ld} -n32" ;; *64-bit*) LD="${LD-ld} -64" ;; esac fi fi rm -rf conftest* ;; x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*|s390*-*linux*|sparc*-*linux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case "`/usr/bin/file conftest.o`" in *32-bit*) case $host in x86_64-*linux*) LD="${LD-ld} -m elf_i386" ;; ppc64-*linux*|powerpc64-*linux*) LD="${LD-ld} -m elf32ppclinux" ;; s390x-*linux*) LD="${LD-ld} -m elf_s390" ;; sparc64-*linux*) LD="${LD-ld} -m elf32_sparc" ;; esac ;; *64-bit*) case $host in x86_64-*linux*) LD="${LD-ld} -m elf_x86_64" ;; ppc*-*linux*|powerpc*-*linux*) LD="${LD-ld} -m elf64ppc" ;; s390*-*linux*) LD="${LD-ld} -m elf64_s390" ;; sparc*-*linux*) LD="${LD-ld} -m elf64_sparc" ;; esac ;; esac fi rm -rf conftest* ;; *-*-sco3.2v5*) # On SCO OpenServer 5, we need -belf to get full-featured binaries. SAVE_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -belf" AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf, [AC_LANG_PUSH(C) AC_TRY_LINK([],[],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no]) AC_LANG_POP]) if test x"$lt_cv_cc_needs_belf" != x"yes"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf CFLAGS="$SAVE_CFLAGS" fi ;; AC_PROVIDE_IFELSE([AC_LIBTOOL_WIN32_DLL], [*-*-cygwin* | *-*-mingw* | *-*-pw32*) AC_CHECK_TOOL(DLLTOOL, dlltool, false) AC_CHECK_TOOL(AS, as, false) AC_CHECK_TOOL(OBJDUMP, objdump, false) ;; ]) esac need_locks="$enable_libtool_lock" ])# _LT_AC_LOCK # AC_LIBTOOL_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, # [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE]) # ---------------------------------------------------------------- # Check whether the given compiler option works AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], [AC_REQUIRE([LT_AC_PROG_SED]) AC_CACHE_CHECK([$1], [$2], [$2=no ifelse([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4]) printf "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$3" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&AS_MESSAGE_LOG_FD echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings if test ! -s conftest.err; then $2=yes fi fi $rm conftest* ]) if test x"[$]$2" = xyes; then ifelse([$5], , :, [$5]) else ifelse([$6], , :, [$6]) fi ])# AC_LIBTOOL_COMPILER_OPTION # AC_LIBTOOL_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, # [ACTION-SUCCESS], [ACTION-FAILURE]) # ------------------------------------------------------------ # Check whether the given compiler option works AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], [AC_CACHE_CHECK([$1], [$2], [$2=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $3" printf "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&AS_MESSAGE_LOG_FD else $2=yes fi fi $rm conftest* LDFLAGS="$save_LDFLAGS" ]) if test x"[$]$2" = xyes; then ifelse([$4], , :, [$4]) else ifelse([$5], , :, [$5]) fi ])# AC_LIBTOOL_LINKER_OPTION # AC_LIBTOOL_SYS_MAX_CMD_LEN # -------------------------- AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], [# find the maximum length of command line arguments AC_MSG_CHECKING([the maximum length of command line arguments]) AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl i=0 teststring="ABCD" case $build_os in msdosdjgpp*) # On DJGPP, this test can blow up pretty badly due to problems in libc # (any single argument exceeding 2000 bytes causes a buffer overrun # during glob expansion). Even if it were fixed, the result of this # check would be larger than it should be. lt_cv_sys_max_cmd_len=12288; # 12K is about right ;; gnu*) # Under GNU Hurd, this test is not required because there is # no limit to the length of command line arguments. # Libtool will interpret -1 as no limit whatsoever lt_cv_sys_max_cmd_len=-1; ;; cygwin* | mingw*) # On Win9x/ME, this test blows up -- it succeeds, but takes # about 5 minutes as the teststring grows exponentially. # Worse, since 9x/ME are not pre-emptively multitasking, # you end up with a "frozen" computer, even though with patience # the test eventually succeeds (with a max line length of 256k). # Instead, let's just punt: use the minimum linelength reported by # all of the supported platforms: 8192 (on NT/2K/XP). lt_cv_sys_max_cmd_len=8192; ;; amigaos*) # On AmigaOS with pdksh, this test takes hours, literally. # So we just punt and use a minimum line length of 8192. lt_cv_sys_max_cmd_len=8192; ;; *) # If test is not a shell built-in, we'll probably end up computing a # maximum length that is only half of the actual maximum length, but # we can't tell. while (test "X"`$CONFIG_SHELL [$]0 --fallback-echo "X$teststring" 2>/dev/null` \ = "XX$teststring") >/dev/null 2>&1 && new_result=`expr "X$teststring" : ".*" 2>&1` && lt_cv_sys_max_cmd_len=$new_result && test $i != 17 # 1/2 MB should be enough do i=`expr $i + 1` teststring=$teststring$teststring done teststring= # Add a significant safety factor because C++ compilers can tack on massive # amounts of additional arguments before passing them to the linker. # It appears as though 1/2 is a usable value. lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` ;; esac ]) if test -n $lt_cv_sys_max_cmd_len ; then AC_MSG_RESULT($lt_cv_sys_max_cmd_len) else AC_MSG_RESULT(none) fi ])# AC_LIBTOOL_SYS_MAX_CMD_LEN # _LT_AC_CHECK_DLFCN # -------------------- AC_DEFUN([_LT_AC_CHECK_DLFCN], [AC_CHECK_HEADERS(dlfcn.h)dnl ])# _LT_AC_CHECK_DLFCN # _LT_AC_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE, # ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING) # ------------------------------------------------------------------ AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF], [AC_REQUIRE([_LT_AC_CHECK_DLFCN])dnl if test "$cross_compiling" = yes; then : [$4] else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext < #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif #ifdef __cplusplus extern "C" void exit (int); #endif void fnord() { int i=42;} int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; /* dlclose (self); */ } exit (status); }] EOF if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) $1 ;; x$lt_dlneed_uscore) $2 ;; x$lt_unknown|x*) $3 ;; esac else : # compilation failed $3 fi fi rm -fr conftest* ])# _LT_AC_TRY_DLOPEN_SELF # AC_LIBTOOL_DLOPEN_SELF # ------------------- AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], [AC_REQUIRE([_LT_AC_CHECK_DLFCN])dnl if test "x$enable_dlopen" != xyes; then enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown else lt_cv_dlopen=no lt_cv_dlopen_libs= case $host_os in beos*) lt_cv_dlopen="load_add_on" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ;; mingw* | pw32*) lt_cv_dlopen="LoadLibrary" lt_cv_dlopen_libs= ;; cygwin*) lt_cv_dlopen="dlopen" lt_cv_dlopen_libs= ;; darwin*) # if libdl is installed we need to link against it AC_CHECK_LIB([dl], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[ lt_cv_dlopen="dyld" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ]) ;; *) AC_CHECK_FUNC([shl_load], [lt_cv_dlopen="shl_load"], [AC_CHECK_LIB([dld], [shl_load], [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld"], [AC_CHECK_FUNC([dlopen], [lt_cv_dlopen="dlopen"], [AC_CHECK_LIB([dl], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"], [AC_CHECK_LIB([svld], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"], [AC_CHECK_LIB([dld], [dld_link], [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld"]) ]) ]) ]) ]) ]) ;; esac if test "x$lt_cv_dlopen" != xno; then enable_dlopen=yes else enable_dlopen=no fi case $lt_cv_dlopen in dlopen) save_CPPFLAGS="$CPPFLAGS" test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" save_LDFLAGS="$LDFLAGS" eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" save_LIBS="$LIBS" LIBS="$lt_cv_dlopen_libs $LIBS" AC_CACHE_CHECK([whether a program can dlopen itself], lt_cv_dlopen_self, [dnl _LT_AC_TRY_DLOPEN_SELF( lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes, lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross) ]) if test "x$lt_cv_dlopen_self" = xyes; then LDFLAGS="$LDFLAGS $link_static_flag" AC_CACHE_CHECK([whether a statically linked program can dlopen itself], lt_cv_dlopen_self_static, [dnl _LT_AC_TRY_DLOPEN_SELF( lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross) ]) fi CPPFLAGS="$save_CPPFLAGS" LDFLAGS="$save_LDFLAGS" LIBS="$save_LIBS" ;; esac case $lt_cv_dlopen_self in yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; *) enable_dlopen_self=unknown ;; esac case $lt_cv_dlopen_self_static in yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; *) enable_dlopen_self_static=unknown ;; esac fi ])# AC_LIBTOOL_DLOPEN_SELF # AC_LIBTOOL_PROG_CC_C_O([TAGNAME]) # --------------------------------- # Check to see if options -c and -o are simultaneously supported by compiler AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O], [AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext], [_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)], [_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no $rm -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out printf "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&AS_MESSAGE_LOG_FD echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings if test ! -s out/conftest.err; then _LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes fi fi chmod u+w . $rm conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files $rm out/* && rmdir out cd .. rmdir conftest $rm conftest* ]) ])# AC_LIBTOOL_PROG_CC_C_O # AC_LIBTOOL_SYS_HARD_LINK_LOCKS([TAGNAME]) # ----------------------------------------- # Check to see if we can do hard links to lock some files if needed AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_REQUIRE([_LT_AC_LOCK])dnl hard_links="nottested" if test "$_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user AC_MSG_CHECKING([if we can lock with hard links]) hard_links=yes $rm conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no AC_MSG_RESULT([$hard_links]) if test "$hard_links" = no; then AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe]) need_locks=warn fi else need_locks=no fi ])# AC_LIBTOOL_SYS_HARD_LINK_LOCKS # AC_LIBTOOL_OBJDIR # ----------------- AC_DEFUN([AC_LIBTOOL_OBJDIR], [AC_CACHE_CHECK([for objdir], [lt_cv_objdir], [rm -f .libs 2>/dev/null mkdir .libs 2>/dev/null if test -d .libs; then lt_cv_objdir=.libs else # MS-DOS does not allow filenames that begin with a dot. lt_cv_objdir=_libs fi rmdir .libs 2>/dev/null]) objdir=$lt_cv_objdir ])# AC_LIBTOOL_OBJDIR # AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH([TAGNAME]) # ---------------------------------------------- # Check hardcoding attributes. AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_MSG_CHECKING([how to hardcode library paths into programs]) _LT_AC_TAGVAR(hardcode_action, $1)= if test -n "$_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)" || \ test -n "$_LT_AC_TAGVAR(runpath_var $1)" || \ test "X$_LT_AC_TAGVAR(hardcode_automatic, $1)"="Xyes" ; then # We can hardcode non-existant directories. if test "$_LT_AC_TAGVAR(hardcode_direct, $1)" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, $1)" != no && test "$_LT_AC_TAGVAR(hardcode_minus_L, $1)" != no; then # Linking always hardcodes the temporary library directory. _LT_AC_TAGVAR(hardcode_action, $1)=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. _LT_AC_TAGVAR(hardcode_action, $1)=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. _LT_AC_TAGVAR(hardcode_action, $1)=unsupported fi AC_MSG_RESULT([$_LT_AC_TAGVAR(hardcode_action, $1)]) if test "$_LT_AC_TAGVAR(hardcode_action, $1)" = relink; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi ])# AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH # AC_LIBTOOL_SYS_LIB_STRIP # ------------------------ AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP], [striplib= old_striplib= AC_MSG_CHECKING([whether stripping libraries is possible]) if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" test -z "$striplib" && striplib="$STRIP --strip-unneeded" AC_MSG_RESULT([yes]) else # FIXME - insert some real tests, host_os isn't really good enough case $host_os in darwin*) if test -n "$STRIP" ; then striplib="$STRIP -x" AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) fi ;; *) AC_MSG_RESULT([no]) ;; esac fi ])# AC_LIBTOOL_SYS_LIB_STRIP # AC_LIBTOOL_SYS_DYNAMIC_LINKER # ----------------------------- # PORTME Fill in your ld.so characteristics AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER], [AC_MSG_CHECKING([dynamic linker characteristics]) library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=".so" postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" if test "$GCC" = yes; then sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}${shared_ext}$major' ;; aix4* | aix5*) version_type=linux need_lib_prefix=no need_version=no hardcode_into_libs=yes if test "$host_cpu" = ia64; then # AIX 5 supports IA64 library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line `#! .'. This would cause the generated library to # depend on `.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[[01]] | aix4.[[01]].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then : else can_build_shared=no fi ;; esac # AIX (on Power*) has no versioning support, so currently we can not hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. if test "$aix_use_runtimelinking" = yes; then # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' else # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='${libname}${release}.a $libname.a' soname_spec='${libname}${release}${shared_ext}$major' fi shlibpath_var=LIBPATH fi ;; amigaos*) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi4*) version_type=linux need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$host_os in yes,cygwin* | yes,mingw* | yes,pw32*) library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $rm \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" ;; mingw*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` if echo "$sys_lib_search_path_spec" | [grep ';[c-zC-Z]:/' >/dev/null]; then # It is most probably a Windows format PATH printed by # mingw gcc, but we are running on Cygwin. Gcc prints its search # path with ; separators, and with drive letters. We can handle the # drive letters (cygwin fileutils understands them), so leave them, # especially as we might pass files found there to a mingw objdump, # which wouldn't understand a cygwinified path. Ahh. sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; esac ;; *) library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib' ;; esac dynamic_linker='Win32 ld.exe' # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext' soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='$(test .$module = .yes && echo .so || echo .dylib)' # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same. if test "$GCC" = yes; then sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"` else sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib' fi sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd1*) dynamic_linker=no ;; kfreebsd*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='GNU ld.so' ;; freebsd*) objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout` version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2*) shlibpath_overrides_runpath=yes ;; freebsd3.[01]* | freebsdelf3.[01]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; *) # from 3.2 on shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; esac ;; gnu*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case "$host_cpu" in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' if test "X$HPUX_IA64_MODE" = X32; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" fi sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555. postinstall_cmds='chmod 555 $lib' ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test "$lt_cv_prog_gnu_ld" = yes; then version_type=linux else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; # This must be Linux ELF. linux*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # find out which ABI we are using libsuff= case "$host_cpu" in x86_64*|s390x*|powerpc64*) echo '[#]line __oline__ "configure"' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.$ac_objext` in *64-bit*) libsuff=64 sys_lib_search_path_spec="/lib${libsuff} /usr/lib${libsuff} /usr/local/lib${libsuff}" ;; esac fi rm -rf conftest* ;; esac # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then lt_ld_extra=`$SED -e 's/[:,\t]/ /g;s/=[^=]*$//;s/=[^= ]* / /g' /etc/ld.so.conf | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib${libsuff} /usr/lib${libsuff} $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; knetbsd*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='GNU ld.so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; nto-qnx*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; openbsd*) version_type=sunos need_lib_prefix=no need_version=yes library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then case $host_os in openbsd2.[[89]] | openbsd2.[[89]].*) shlibpath_overrides_runpath=no ;; *) shlibpath_overrides_runpath=yes ;; esac else shlibpath_overrides_runpath=yes fi ;; os2*) libname_spec='$name' shrext_cmds=".dll" need_lib_prefix=no library_names_spec='$libname${shared_ext} $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; sco3.2v5*) version_type=osf soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH ;; solaris*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no export_dynamic_flag_spec='${wl}-Blargedynsym' runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' soname_spec='$libname${shared_ext}.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; uts4*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac AC_MSG_RESULT([$dynamic_linker]) test "$dynamic_linker" = no && can_build_shared=no ])# AC_LIBTOOL_SYS_DYNAMIC_LINKER # _LT_AC_TAGCONFIG # ---------------- AC_DEFUN([_LT_AC_TAGCONFIG], [AC_ARG_WITH([tags], [AC_HELP_STRING([--with-tags@<:@=TAGS@:>@], [include additional configurations @<:@automatic@:>@])], [tagnames="$withval"]) if test -f "$ltmain" && test -n "$tagnames"; then if test ! -f "${ofile}"; then AC_MSG_WARN([output file `$ofile' does not exist]) fi if test -z "$LTCC"; then eval "`$SHELL ${ofile} --config | grep '^LTCC='`" if test -z "$LTCC"; then AC_MSG_WARN([output file `$ofile' does not look like a libtool script]) else AC_MSG_WARN([using `LTCC=$LTCC', extracted from `$ofile']) fi fi # Extract list of available tagged configurations in $ofile. # Note that this assumes the entire list is on one line. available_tags=`grep "^available_tags=" "${ofile}" | $SED -e 's/available_tags=\(.*$\)/\1/' -e 's/\"//g'` lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for tagname in $tagnames; do IFS="$lt_save_ifs" # Check whether tagname contains only valid characters case `$echo "X$tagname" | $Xsed -e 's:[[-_ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890,/]]::g'` in "") ;; *) AC_MSG_ERROR([invalid tag name: $tagname]) ;; esac if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "${ofile}" > /dev/null then AC_MSG_ERROR([tag name \"$tagname\" already exists]) fi # Update the list of available tags. if test -n "$tagname"; then echo appending configuration tag \"$tagname\" to $ofile case $tagname in CXX) if test -n "$CXX" && test "X$CXX" != "Xno"; then AC_LIBTOOL_LANG_CXX_CONFIG else tagname="" fi ;; F77) if test -n "$F77" && test "X$F77" != "Xno"; then AC_LIBTOOL_LANG_F77_CONFIG else tagname="" fi ;; GCJ) if test -n "$GCJ" && test "X$GCJ" != "Xno"; then AC_LIBTOOL_LANG_GCJ_CONFIG else tagname="" fi ;; RC) AC_LIBTOOL_LANG_RC_CONFIG ;; *) AC_MSG_ERROR([Unsupported tag name: $tagname]) ;; esac # Append the new tag name to the list of available tags. if test -n "$tagname" ; then available_tags="$available_tags $tagname" fi fi done IFS="$lt_save_ifs" # Now substitute the updated list of available tags. if eval "sed -e 's/^available_tags=.*\$/available_tags=\"$available_tags\"/' \"$ofile\" > \"${ofile}T\""; then mv "${ofile}T" "$ofile" chmod +x "$ofile" else rm -f "${ofile}T" AC_MSG_ERROR([unable to update list of available tagged configurations.]) fi fi ])# _LT_AC_TAGCONFIG # AC_LIBTOOL_DLOPEN # ----------------- # enable checks for dlopen support AC_DEFUN([AC_LIBTOOL_DLOPEN], [AC_BEFORE([$0],[AC_LIBTOOL_SETUP]) ])# AC_LIBTOOL_DLOPEN # AC_LIBTOOL_WIN32_DLL # -------------------- # declare package support for building win32 dll's AC_DEFUN([AC_LIBTOOL_WIN32_DLL], [AC_BEFORE([$0], [AC_LIBTOOL_SETUP]) ])# AC_LIBTOOL_WIN32_DLL # AC_ENABLE_SHARED([DEFAULT]) # --------------------------- # implement the --enable-shared flag # DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. AC_DEFUN([AC_ENABLE_SHARED], [define([AC_ENABLE_SHARED_DEFAULT], ifelse($1, no, no, yes))dnl AC_ARG_ENABLE([shared], [AC_HELP_STRING([--enable-shared@<:@=PKGS@:>@], [build shared libraries @<:@default=]AC_ENABLE_SHARED_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_shared=yes ;; no) enable_shared=no ;; *) enable_shared=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_shared=yes fi done IFS="$lt_save_ifs" ;; esac], [enable_shared=]AC_ENABLE_SHARED_DEFAULT) ])# AC_ENABLE_SHARED # AC_DISABLE_SHARED # ----------------- #- set the default shared flag to --disable-shared AC_DEFUN([AC_DISABLE_SHARED], [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl AC_ENABLE_SHARED(no) ])# AC_DISABLE_SHARED # AC_ENABLE_STATIC([DEFAULT]) # --------------------------- # implement the --enable-static flag # DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. AC_DEFUN([AC_ENABLE_STATIC], [define([AC_ENABLE_STATIC_DEFAULT], ifelse($1, no, no, yes))dnl AC_ARG_ENABLE([static], [AC_HELP_STRING([--enable-static@<:@=PKGS@:>@], [build static libraries @<:@default=]AC_ENABLE_STATIC_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_static=yes ;; no) enable_static=no ;; *) enable_static=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_static=yes fi done IFS="$lt_save_ifs" ;; esac], [enable_static=]AC_ENABLE_STATIC_DEFAULT) ])# AC_ENABLE_STATIC # AC_DISABLE_STATIC # ----------------- # set the default static flag to --disable-static AC_DEFUN([AC_DISABLE_STATIC], [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl AC_ENABLE_STATIC(no) ])# AC_DISABLE_STATIC # AC_ENABLE_FAST_INSTALL([DEFAULT]) # --------------------------------- # implement the --enable-fast-install flag # DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. AC_DEFUN([AC_ENABLE_FAST_INSTALL], [define([AC_ENABLE_FAST_INSTALL_DEFAULT], ifelse($1, no, no, yes))dnl AC_ARG_ENABLE([fast-install], [AC_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@], [optimize for fast installation @<:@default=]AC_ENABLE_FAST_INSTALL_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_fast_install=yes ;; no) enable_fast_install=no ;; *) enable_fast_install=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_fast_install=yes fi done IFS="$lt_save_ifs" ;; esac], [enable_fast_install=]AC_ENABLE_FAST_INSTALL_DEFAULT) ])# AC_ENABLE_FAST_INSTALL # AC_DISABLE_FAST_INSTALL # ----------------------- # set the default to --disable-fast-install AC_DEFUN([AC_DISABLE_FAST_INSTALL], [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl AC_ENABLE_FAST_INSTALL(no) ])# AC_DISABLE_FAST_INSTALL # AC_LIBTOOL_PICMODE([MODE]) # -------------------------- # implement the --with-pic flag # MODE is either `yes' or `no'. If omitted, it defaults to `both'. AC_DEFUN([AC_LIBTOOL_PICMODE], [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl pic_mode=ifelse($#,1,$1,default) ])# AC_LIBTOOL_PICMODE # AC_PROG_EGREP # ------------- # This is predefined starting with Autoconf 2.54, so this conditional # definition can be removed once we require Autoconf 2.54 or later. m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP], [AC_CACHE_CHECK([for egrep], [ac_cv_prog_egrep], [if echo a | (grep -E '(a|b)') >/dev/null 2>&1 then ac_cv_prog_egrep='grep -E' else ac_cv_prog_egrep='egrep' fi]) EGREP=$ac_cv_prog_egrep AC_SUBST([EGREP]) ])]) # AC_PATH_TOOL_PREFIX # ------------------- # find a file program which can recognise shared library AC_DEFUN([AC_PATH_TOOL_PREFIX], [AC_REQUIRE([AC_PROG_EGREP])dnl AC_MSG_CHECKING([for $1]) AC_CACHE_VAL(lt_cv_path_MAGIC_CMD, [case $MAGIC_CMD in [[\\/*] | ?:[\\/]*]) lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD="$MAGIC_CMD" lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR dnl $ac_dummy forces splitting on constant user-supplied paths. dnl POSIX.2 word splitting is done only on the output of word expansions, dnl not every word. This closes a longstanding sh security hole. ac_dummy="ifelse([$2], , $PATH, [$2])" for ac_dir in $ac_dummy; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$1; then lt_cv_path_MAGIC_CMD="$ac_dir/$1" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex="`expr \"$deplibs_check_method\" : \"file_magic \(.*\)\"`" MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org EOF fi ;; esac fi break fi done IFS="$lt_save_ifs" MAGIC_CMD="$lt_save_MAGIC_CMD" ;; esac]) MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then AC_MSG_RESULT($MAGIC_CMD) else AC_MSG_RESULT(no) fi ])# AC_PATH_TOOL_PREFIX # AC_PATH_MAGIC # ------------- # find a file program which can recognise a shared library AC_DEFUN([AC_PATH_MAGIC], [AC_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH) if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then AC_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH) else MAGIC_CMD=: fi fi ])# AC_PATH_MAGIC # AC_PROG_LD # ---------- # find the pathname to the GNU or non-GNU linker AC_DEFUN([AC_PROG_LD], [AC_ARG_WITH([gnu-ld], [AC_HELP_STRING([--with-gnu-ld], [assume the C compiler uses GNU ld @<:@default=no@:>@])], [test "$withval" = no || with_gnu_ld=yes], [with_gnu_ld=no]) AC_REQUIRE([LT_AC_PROG_SED])dnl AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. AC_MSG_CHECKING([for ld used by $CC]) case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [[\\/]]* | ?:[[\\/]]*) re_direlt='/[[^/]][[^/]]*/\.\./' # Canonicalize the pathname of ld ac_prog=`echo $ac_prog| $SED 's%\\\\%/%g'` while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do ac_prog=`echo $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then AC_MSG_CHECKING([for GNU ld]) else AC_MSG_CHECKING([for non-GNU ld]) fi AC_CACHE_VAL(lt_cv_path_LD, [if test -z "$LD"; then lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some GNU ld's only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &1 /dev/null; then case $host_cpu in i*86 ) # Not sure whether the presence of OpenBSD here was a mistake. # Let's accept both of them until this is cleared up. lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD)/i[[3-9]]86 (compact )?demand paged shared library' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` ;; esac else lt_cv_deplibs_check_method=pass_all fi ;; gnu*) lt_cv_deplibs_check_method=pass_all ;; hpux10.20* | hpux11*) lt_cv_file_magic_cmd=/usr/bin/file case "$host_cpu" in ia64*) lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64' lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so ;; hppa*64*) [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]'] lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl ;; *) lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]].[[0-9]]) shared library' lt_cv_file_magic_test_file=/usr/lib/libc.sl ;; esac ;; irix5* | irix6* | nonstopux*) case $LD in *-32|*"-32 ") libmagic=32-bit;; *-n32|*"-n32 ") libmagic=N32;; *-64|*"-64 ") libmagic=64-bit;; *) libmagic=never-match;; esac lt_cv_deplibs_check_method=pass_all ;; # This must be Linux ELF. linux*) case $host_cpu in alpha*|hppa*|i*86|ia64*|m68*|mips*|powerpc*|sparc*|s390*|sh*|x86_64*) lt_cv_deplibs_check_method=pass_all ;; *) # glibc up to 2.1.1 does not perform some relocations on ARM # this will be overridden with pass_all, but let us keep it just in case lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' ;; esac lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so` lt_cv_deplibs_check_method=pass_all ;; netbsd*) if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$' fi ;; newos6*) lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=/usr/lib/libnls.so ;; nto-qnx*) lt_cv_deplibs_check_method=unknown ;; openbsd*) lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB shared object' else lt_cv_deplibs_check_method='file_magic OpenBSD.* shared library' fi ;; osf3* | osf4* | osf5*) lt_cv_deplibs_check_method=pass_all ;; sco3.2v5*) lt_cv_deplibs_check_method=pass_all ;; solaris*) lt_cv_deplibs_check_method=pass_all ;; sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) case $host_vendor in motorola) lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]' lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` ;; ncr) lt_cv_deplibs_check_method=pass_all ;; sequent) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' ;; sni) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib" lt_cv_file_magic_test_file=/lib/libc.so ;; siemens) lt_cv_deplibs_check_method=pass_all ;; esac ;; sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[[78]]* | unixware7* | sysv4*uw2*) lt_cv_deplibs_check_method=pass_all ;; esac ]) file_magic_cmd=$lt_cv_file_magic_cmd deplibs_check_method=$lt_cv_deplibs_check_method test -z "$deplibs_check_method" && deplibs_check_method=unknown ])# AC_DEPLIBS_CHECK_METHOD # AC_PROG_NM # ---------- # find the pathname to a BSD-compatible name lister AC_DEFUN([AC_PROG_NM], [AC_CACHE_CHECK([for BSD-compatible nm], lt_cv_path_NM, [if test -n "$NM"; then # Let the user override the test. lt_cv_path_NM="$NM" else lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH /usr/ccs/bin /usr/ucb /bin; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. tmp_nm="$ac_dir/${ac_tool_prefix}nm" if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then # Check to see if the nm accepts a BSD-compat flag. # Adding the `sed 1q' prevents false positives on HP-UX, which says: # nm: unknown option "B" ignored # Tru64's nm complains that /dev/null is an invalid object file case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in */dev/null* | *'Invalid file or object type'*) lt_cv_path_NM="$tmp_nm -B" break ;; *) case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in */dev/null*) lt_cv_path_NM="$tmp_nm -p" break ;; *) lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but continue # so that we can try to find one that supports BSD flags ;; esac esac fi done IFS="$lt_save_ifs" test -z "$lt_cv_path_NM" && lt_cv_path_NM=nm fi]) NM="$lt_cv_path_NM" ])# AC_PROG_NM # AC_CHECK_LIBM # ------------- # check for math library AC_DEFUN([AC_CHECK_LIBM], [AC_REQUIRE([AC_CANONICAL_HOST])dnl LIBM= case $host in *-*-beos* | *-*-cygwin* | *-*-pw32* | *-*-darwin*) # These system don't have libm, or don't need it ;; *-ncr-sysv4.3*) AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw") AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm") ;; *) AC_CHECK_LIB(m, cos, LIBM="-lm") ;; esac ])# AC_CHECK_LIBM # AC_LIBLTDL_CONVENIENCE([DIRECTORY]) # ----------------------------------- # sets LIBLTDL to the link flags for the libltdl convenience library and # LTDLINCL to the include flags for the libltdl header and adds # --enable-ltdl-convenience to the configure arguments. Note that LIBLTDL # and LTDLINCL are not AC_SUBSTed, nor is AC_CONFIG_SUBDIRS called. If # DIRECTORY is not provided, it is assumed to be `libltdl'. LIBLTDL will # be prefixed with '${top_builddir}/' and LTDLINCL will be prefixed with # '${top_srcdir}/' (note the single quotes!). If your package is not # flat and you're not using automake, define top_builddir and # top_srcdir appropriately in the Makefiles. AC_DEFUN([AC_LIBLTDL_CONVENIENCE], [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl case $enable_ltdl_convenience in no) AC_MSG_ERROR([this package needs a convenience libltdl]) ;; "") enable_ltdl_convenience=yes ac_configure_args="$ac_configure_args --enable-ltdl-convenience" ;; esac LIBLTDL='${top_builddir}/'ifelse($#,1,[$1],['libltdl'])/libltdlc.la LTDLINCL='-I${top_srcdir}/'ifelse($#,1,[$1],['libltdl']) # For backwards non-gettext consistent compatibility... INCLTDL="$LTDLINCL" ])# AC_LIBLTDL_CONVENIENCE # AC_LIBLTDL_INSTALLABLE([DIRECTORY]) # ----------------------------------- # sets LIBLTDL to the link flags for the libltdl installable library and # LTDLINCL to the include flags for the libltdl header and adds # --enable-ltdl-install to the configure arguments. Note that LIBLTDL # and LTDLINCL are not AC_SUBSTed, nor is AC_CONFIG_SUBDIRS called. If # DIRECTORY is not provided and an installed libltdl is not found, it is # assumed to be `libltdl'. LIBLTDL will be prefixed with '${top_builddir}/' # and LTDLINCL will be prefixed with '${top_srcdir}/' (note the single # quotes!). If your package is not flat and you're not using automake, # define top_builddir and top_srcdir appropriately in the Makefiles. # In the future, this macro may have to be called after AC_PROG_LIBTOOL. AC_DEFUN([AC_LIBLTDL_INSTALLABLE], [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl AC_CHECK_LIB(ltdl, lt_dlinit, [test x"$enable_ltdl_install" != xyes && enable_ltdl_install=no], [if test x"$enable_ltdl_install" = xno; then AC_MSG_WARN([libltdl not installed, but installation disabled]) else enable_ltdl_install=yes fi ]) if test x"$enable_ltdl_install" = x"yes"; then ac_configure_args="$ac_configure_args --enable-ltdl-install" LIBLTDL='${top_builddir}/'ifelse($#,1,[$1],['libltdl'])/libltdl.la LTDLINCL='-I${top_srcdir}/'ifelse($#,1,[$1],['libltdl']) else ac_configure_args="$ac_configure_args --enable-ltdl-install=no" LIBLTDL="-lltdl" LTDLINCL= fi # For backwards non-gettext consistent compatibility... INCLTDL="$LTDLINCL" ])# AC_LIBLTDL_INSTALLABLE # AC_LIBTOOL_CXX # -------------- # enable support for C++ libraries AC_DEFUN([AC_LIBTOOL_CXX], [AC_REQUIRE([_LT_AC_LANG_CXX]) ])# AC_LIBTOOL_CXX # _LT_AC_LANG_CXX # --------------- AC_DEFUN([_LT_AC_LANG_CXX], [AC_REQUIRE([AC_PROG_CXX]) AC_REQUIRE([AC_PROG_CXXCPP]) _LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}CXX]) ])# _LT_AC_LANG_CXX # AC_LIBTOOL_F77 # -------------- # enable support for Fortran 77 libraries AC_DEFUN([AC_LIBTOOL_F77], [AC_REQUIRE([_LT_AC_LANG_F77]) ])# AC_LIBTOOL_F77 # _LT_AC_LANG_F77 # --------------- AC_DEFUN([_LT_AC_LANG_F77], [AC_REQUIRE([AC_PROG_F77]) _LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}F77]) ])# _LT_AC_LANG_F77 # AC_LIBTOOL_GCJ # -------------- # enable support for GCJ libraries AC_DEFUN([AC_LIBTOOL_GCJ], [AC_REQUIRE([_LT_AC_LANG_GCJ]) ])# AC_LIBTOOL_GCJ # _LT_AC_LANG_GCJ # --------------- AC_DEFUN([_LT_AC_LANG_GCJ], [AC_PROVIDE_IFELSE([AC_PROG_GCJ],[], [AC_PROVIDE_IFELSE([A][M_PROG_GCJ],[], [AC_PROVIDE_IFELSE([LT_AC_PROG_GCJ],[], [ifdef([AC_PROG_GCJ],[AC_REQUIRE([AC_PROG_GCJ])], [ifdef([A][M_PROG_GCJ],[AC_REQUIRE([A][M_PROG_GCJ])], [AC_REQUIRE([A][C_PROG_GCJ_OR_A][M_PROG_GCJ])])])])])]) _LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}GCJ]) ])# _LT_AC_LANG_GCJ # AC_LIBTOOL_RC # -------------- # enable support for Windows resource files AC_DEFUN([AC_LIBTOOL_RC], [AC_REQUIRE([LT_AC_PROG_RC]) _LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}RC]) ])# AC_LIBTOOL_RC # AC_LIBTOOL_LANG_C_CONFIG # ------------------------ # Ensure that the configuration vars for the C compiler are # suitably defined. Those variables are subsequently used by # AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'. AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG], [_LT_AC_LANG_C_CONFIG]) AC_DEFUN([_LT_AC_LANG_C_CONFIG], [lt_save_CC="$CC" AC_LANG_PUSH(C) # Source file extension for C test sources. ac_ext=c # Object file extension for compiled C test sources. objext=o _LT_AC_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;\n" # Code to be used in simple link tests lt_simple_link_test_code='int main(){return(0);}\n' _LT_AC_SYS_COMPILER # # Check for any special shared library compilation flags. # _LT_AC_TAGVAR(lt_prog_cc_shlib, $1)= if test "$GCC" = no; then case $host_os in sco3.2v5*) _LT_AC_TAGVAR(lt_prog_cc_shlib, $1)='-belf' ;; esac fi if test -n "$_LT_AC_TAGVAR(lt_prog_cc_shlib, $1)"; then AC_MSG_WARN([`$CC' requires `$_LT_AC_TAGVAR(lt_prog_cc_shlib, $1)' to build shared libraries]) if echo "$old_CC $old_CFLAGS " | grep "[[ ]]$_LT_AC_TAGVAR(lt_prog_cc_shlib, $1)[[ ]]" >/dev/null; then : else AC_MSG_WARN([add `$_LT_AC_TAGVAR(lt_prog_cc_shlib, $1)' to the CC or CFLAGS env variable and reconfigure]) _LT_AC_TAGVAR(lt_cv_prog_cc_can_build_shared, $1)=no fi fi # # Check to make sure the static flag actually works. # AC_LIBTOOL_LINKER_OPTION([if $compiler static flag $_LT_AC_TAGVAR(lt_prog_compiler_static, $1) works], _LT_AC_TAGVAR(lt_prog_compiler_static_works, $1), $_LT_AC_TAGVAR(lt_prog_compiler_static, $1), [], [_LT_AC_TAGVAR(lt_prog_compiler_static, $1)=]) AC_LIBTOOL_PROG_COMPILER_NO_RTTI($1) AC_LIBTOOL_PROG_COMPILER_PIC($1) AC_LIBTOOL_PROG_CC_C_O($1) AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1) AC_LIBTOOL_PROG_LD_SHLIBS($1) AC_LIBTOOL_SYS_DYNAMIC_LINKER($1) AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1) AC_LIBTOOL_SYS_LIB_STRIP AC_LIBTOOL_DLOPEN_SELF($1) # Report which librarie types wil actually be built AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case "$host_os" in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix4* | aix5*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; darwin* | rhapsody*) if test "$GCC" = yes; then _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no case "$host_os" in rhapsody* | darwin1.[[012]]) _LT_AC_TAGVAR(allow_undefined_flag, $1)='-undefined suppress' ;; *) # Darwin 1.3 on if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then _LT_AC_TAGVAR(allow_undefined_flag, $1)='-flat_namespace -undefined suppress' else case ${MACOSX_DEPLOYMENT_TARGET} in 10.[[012]]) _LT_AC_TAGVAR(allow_undefined_flag, $1)='-flat_namespace -undefined suppress' ;; 10.*) _LT_AC_TAGVAR(allow_undefined_flag, $1)='-undefined dynamic_lookup' ;; esac fi ;; esac output_verbose_link_cmd='echo' _LT_AC_TAGVAR(archive_cmds, $1)='$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs$compiler_flags -install_name $rpath/$soname $verstring' _LT_AC_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs$compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' _LT_AC_TAGVAR(hardcode_direct, $1)=no _LT_AC_TAGVAR(hardcode_automatic, $1)=yes _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='-all_load $convenience' _LT_AC_TAGVAR(link_all_deplibs, $1)=yes else _LT_AC_TAGVAR(ld_shlibs, $1)=no fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes AC_MSG_RESULT([$enable_static]) AC_LIBTOOL_CONFIG($1) AC_LANG_POP CC="$lt_save_CC" ])# AC_LIBTOOL_LANG_C_CONFIG # AC_LIBTOOL_LANG_CXX_CONFIG # -------------------------- # Ensure that the configuration vars for the C compiler are # suitably defined. Those variables are subsequently used by # AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'. AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG], [_LT_AC_LANG_CXX_CONFIG(CXX)]) AC_DEFUN([_LT_AC_LANG_CXX_CONFIG], [AC_LANG_PUSH(C++) AC_REQUIRE([AC_PROG_CXX]) AC_REQUIRE([AC_PROG_CXXCPP]) _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no _LT_AC_TAGVAR(allow_undefined_flag, $1)= _LT_AC_TAGVAR(always_export_symbols, $1)=no _LT_AC_TAGVAR(archive_expsym_cmds, $1)= _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)= _LT_AC_TAGVAR(hardcode_direct, $1)=no _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= _LT_AC_TAGVAR(hardcode_libdir_separator, $1)= _LT_AC_TAGVAR(hardcode_minus_L, $1)=no _LT_AC_TAGVAR(hardcode_automatic, $1)=no _LT_AC_TAGVAR(module_cmds, $1)= _LT_AC_TAGVAR(module_expsym_cmds, $1)= _LT_AC_TAGVAR(link_all_deplibs, $1)=unknown _LT_AC_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_AC_TAGVAR(no_undefined_flag, $1)= _LT_AC_TAGVAR(whole_archive_flag_spec, $1)= _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Dependencies to place before and after the object being linked: _LT_AC_TAGVAR(predep_objects, $1)= _LT_AC_TAGVAR(postdep_objects, $1)= _LT_AC_TAGVAR(predeps, $1)= _LT_AC_TAGVAR(postdeps, $1)= _LT_AC_TAGVAR(compiler_lib_search_path, $1)= # Source file extension for C++ test sources. ac_ext=cc # Object file extension for compiled C++ test sources. objext=o _LT_AC_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;\n" # Code to be used in simple link tests lt_simple_link_test_code='int main(int, char *[]) { return(0); }\n' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_AC_SYS_COMPILER # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_LD=$LD lt_save_GCC=$GCC GCC=$GXX lt_save_with_gnu_ld=$with_gnu_ld lt_save_path_LD=$lt_cv_path_LD if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx else unset lt_cv_prog_gnu_ld fi if test -n "${lt_cv_path_LDCXX+set}"; then lt_cv_path_LD=$lt_cv_path_LDCXX else unset lt_cv_path_LD fi test -z "${LDCXX+set}" || LD=$LDCXX CC=${CXX-"c++"} compiler=$CC _LT_AC_TAGVAR(compiler, $1)=$CC cc_basename=`$echo X"$compiler" | $Xsed -e 's%^.*/%%'` # We don't want -fno-exception wen compiling C++ code, so set the # no_builtin_flag separately if test "$GXX" = yes; then _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' else _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= fi if test "$GXX" = yes; then # Set up default GNU C++ configuration AC_PROG_LD # Check if GNU C++ uses GNU ld as the underlying linker, since the # archiving commands below assume that GNU ld is being used. if test "$with_gnu_ld" = yes; then _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir' _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' # If archive_cmds runs LD, not CC, wlarc should be empty # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to # investigate it a little bit more. (MM) wlarc='${wl}' # ancient GNU ld didn't support --whole-archive et. al. if eval "`$CC -print-prog-name=ld` --help 2>&1" | \ grep 'no-whole-archive' > /dev/null; then _LT_AC_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else _LT_AC_TAGVAR(whole_archive_flag_spec, $1)= fi else with_gnu_ld=no wlarc= # A generic and very simple default shared library creation # command for GNU C++ for the case where it uses the native # linker, instead of GNU ld. If possible, this setting should # overridden to take advantage of the native linker features on # the platform it is being used on. _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' fi # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"' else GXX=no with_gnu_ld=no wlarc= fi # PORTME: fill in a description of your system's C++ link characteristics AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) _LT_AC_TAGVAR(ld_shlibs, $1)=yes case $host_os in aix3*) # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; aix4* | aix5*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[[23]]|aix4.[[23]].*|aix5*) for ld_flag in $LDFLAGS; do case $ld_flag in *-brtl*) aix_use_runtimelinking=yes break ;; esac done esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. _LT_AC_TAGVAR(archive_cmds, $1)='' _LT_AC_TAGVAR(hardcode_direct, $1)=yes _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_AC_TAGVAR(link_all_deplibs, $1)=yes if test "$GXX" = yes; then case $host_os in aix4.[012]|aix4.[012].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && \ strings "$collect2name" | grep resolve_lib_name >/dev/null then # We have reworked collect2 _LT_AC_TAGVAR(hardcode_direct, $1)=yes else # We have old collect2 _LT_AC_TAGVAR(hardcode_direct, $1)=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_AC_TAGVAR(hardcode_libdir_separator, $1)= fi esac shared_flag='-shared' else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. _LT_AC_TAGVAR(always_export_symbols, $1)=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. _LT_AC_TAGVAR(allow_undefined_flag, $1)='-berok' # Determine the default libpath from the value encoded in an empty executable. _LT_AC_SYS_LIBPATH_AIX _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' _LT_AC_TAGVAR(allow_undefined_flag, $1)="-z nodefs" _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an empty executable. _LT_AC_SYS_LIBPATH_AIX _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. _LT_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' # -bexpall does not export symbols beginning with underscore (_) _LT_AC_TAGVAR(always_export_symbols, $1)=yes # Exported symbols can be pulled into shared objects from archives _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=' ' _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes # This is similar to how AIX traditionally builds it's shared libraries. _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; chorus*) case $cc_basename in *) # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; esac ;; cygwin* | mingw* | pw32*) # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, # as there is no search path for DLLs. _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_AC_TAGVAR(always_export_symbols, $1)=no _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... _LT_AC_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib' else _LT_AC_TAGVAR(ld_shlibs, $1)=no fi ;; darwin* | rhapsody*) if test "$GXX" = yes; then _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no case "$host_os" in rhapsody* | darwin1.[[012]]) _LT_AC_TAGVAR(allow_undefined_flag, $1)='-undefined suppress' ;; *) # Darwin 1.3 on if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then _LT_AC_TAGVAR(allow_undefined_flag, $1)='-flat_namespace -undefined suppress' else case ${MACOSX_DEPLOYMENT_TARGET} in 10.[[012]]) _LT_AC_TAGVAR(allow_undefined_flag, $1)='-flat_namespace -undefined suppress' ;; 10.*) _LT_AC_TAGVAR(allow_undefined_flag, $1)='-undefined dynamic_lookup' ;; esac fi ;; esac lt_int_apple_cc_single_mod=no output_verbose_link_cmd='echo' if $CC -dumpspecs 2>&1 | grep 'single_module' >/dev/null ; then lt_int_apple_cc_single_mod=yes fi if test "X$lt_int_apple_cc_single_mod" = Xyes ; then _LT_AC_TAGVAR(archive_cmds, $1)='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' else _LT_AC_TAGVAR(archive_cmds, $1)='$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring' fi _LT_AC_TAGVAR(module_cmds, $1)='$CC ${wl}-bind_at_load $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's if test "X$lt_int_apple_cc_single_mod" = Xyes ; then _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' else _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' fi _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' _LT_AC_TAGVAR(hardcode_direct, $1)=no _LT_AC_TAGVAR(hardcode_automatic, $1)=yes _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='-all_load $convenience' _LT_AC_TAGVAR(link_all_deplibs, $1)=yes else _LT_AC_TAGVAR(ld_shlibs, $1)=no fi ;; dgux*) case $cc_basename in ec++) # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; ghcx) # Green Hills C++ Compiler # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; esac ;; freebsd[12]*) # C++ shared libraries reported to be fairly broken before switch to ELF _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; freebsd-elf*) _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no ;; freebsd* | kfreebsd*-gnu) # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF # conventions _LT_AC_TAGVAR(ld_shlibs, $1)=yes ;; gnu*) ;; hpux9*) _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' _LT_AC_TAGVAR(hardcode_direct, $1)=yes _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, # but as the default # location of the library. case $cc_basename in CC) # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; aCC) _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | grep "[-]L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' ;; *) if test "$GXX" = yes; then _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; hpux10*|hpux11*) if test $with_gnu_ld = no; then case "$host_cpu" in hppa*64*) _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir' _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: ;; ia64*) _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' ;; *) _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' ;; esac fi case "$host_cpu" in hppa*64*) _LT_AC_TAGVAR(hardcode_direct, $1)=no _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no ;; ia64*) _LT_AC_TAGVAR(hardcode_direct, $1)=no _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, # but as the default # location of the library. ;; *) _LT_AC_TAGVAR(hardcode_direct, $1)=yes _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, # but as the default # location of the library. ;; esac case $cc_basename in CC) # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; aCC) case "$host_cpu" in hppa*64*|ia64*) _LT_AC_TAGVAR(archive_cmds, $1)='$LD -b +h $soname -o $lib $linker_flags $libobjs $deplibs' ;; *) _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | grep "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' ;; *) if test "$GXX" = yes; then if test $with_gnu_ld = no; then case "$host_cpu" in ia64*|hppa*64*) _LT_AC_TAGVAR(archive_cmds, $1)='$LD -b +h $soname -o $lib $linker_flags $libobjs $deplibs' ;; *) _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac fi else # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; irix5* | irix6*) case $cc_basename in CC) # SGI C++ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib' # Archives containing C++ object files must be created using # "CC -ar", where "CC" is the IRIX C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs' ;; *) if test "$GXX" = yes; then if test "$with_gnu_ld" = no; then _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib' else _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` -o $lib' fi fi _LT_AC_TAGVAR(link_all_deplibs, $1)=yes ;; esac _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: ;; linux*) case $cc_basename in KCC) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. _LT_AC_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' _LT_AC_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | grep "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath,$libdir' _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' # Archives containing C++ object files must be created using # "CC -Bstatic", where "CC" is the KAI C++ compiler. _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; icpc) # Intel C++ with_gnu_ld=yes _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' ;; cxx) # Compaq C++ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' runpath_var=LD_RUN_PATH _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' ;; esac ;; lynxos*) # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; m88k*) # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; mvs*) case $cc_basename in cxx) # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; esac ;; netbsd*) if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' wlarc= _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_AC_TAGVAR(hardcode_direct, $1)=yes _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no fi # Workaround some broken pre-1.5 toolchains output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' ;; osf3*) case $cc_basename in KCC) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. _LT_AC_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: # Archives containing C++ object files must be created using # "CC -Bstatic", where "CC" is the KAI C++ compiler. _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; RCC) # Rational C++ 2.4.1 # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; cxx) _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && echo ${wl}-set_version $verstring` -update_registry ${objdir}/so_locations -o $lib' _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' ;; *) if test "$GXX" = yes && test "$with_gnu_ld" = no; then _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib' _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"' else # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; osf4* | osf5*) case $cc_basename in KCC) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. _LT_AC_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: # Archives containing C++ object files must be created using # the KAI C++ compiler. _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;; RCC) # Rational C++ 2.4.1 # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; cxx) _LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib' _LT_AC_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ echo "-hidden">> $lib.exp~ $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname -Wl,-input -Wl,$lib.exp `test -n "$verstring" && echo -set_version $verstring` -update_registry $objdir/so_locations -o $lib~ $rm $lib.exp' _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' ;; *) if test "$GXX" = yes && test "$with_gnu_ld" = no; then _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib' _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"' else # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; psos*) # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; sco*) _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no case $cc_basename in CC) # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; esac ;; sunos4*) case $cc_basename in CC) # Sun C++ 4.x # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; lcc) # Lucid # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; esac ;; solaris*) case $cc_basename in CC) # Sun C++ 4.2, 5.x and Centerline C++ _LT_AC_TAGVAR(no_undefined_flag, $1)=' -zdefs' _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -nolib -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ $CC -G${allow_undefined_flag} -nolib ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp' _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) # The C++ compiler is used as linker so we must use $wl # flag to pass the commands to the underlying system # linker. # Supported since Solaris 2.6 (maybe 2.5.1?) _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' ;; esac _LT_AC_TAGVAR(link_all_deplibs, $1)=yes # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -G $CFLAGS -v conftest.$objext 2>&1 | grep "\-[[LR]]"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' ;; gcx) # Green Hills C++ Compiler _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' # The C++ compiler must be used to create the archive. _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs' ;; *) # GNU C++ compiler with Solaris linker if test "$GXX" = yes && test "$with_gnu_ld" = no; then _LT_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs' if $CC --version | grep -v '^2\.7' > /dev/null; then _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd="$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\"" else # g++ 2.7 appears to require `-G' NOT `-shared' on this # platform. _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd="$CC -G $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\"" fi _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir' fi ;; esac ;; sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[[78]]* | unixware7*) _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no ;; tandem*) case $cc_basename in NCC) # NonStop-UX NCC 3.20 # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; esac ;; vxworks*) # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; esac AC_MSG_RESULT([$_LT_AC_TAGVAR(ld_shlibs, $1)]) test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no _LT_AC_TAGVAR(GCC, $1)="$GXX" _LT_AC_TAGVAR(LD, $1)="$LD" AC_LIBTOOL_POSTDEP_PREDEP($1) AC_LIBTOOL_PROG_COMPILER_PIC($1) AC_LIBTOOL_PROG_CC_C_O($1) AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1) AC_LIBTOOL_PROG_LD_SHLIBS($1) AC_LIBTOOL_SYS_DYNAMIC_LINKER($1) AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1) AC_LIBTOOL_SYS_LIB_STRIP AC_LIBTOOL_DLOPEN_SELF($1) AC_LIBTOOL_CONFIG($1) AC_LANG_POP CC=$lt_save_CC LDCXX=$LD LD=$lt_save_LD GCC=$lt_save_GCC with_gnu_ldcxx=$with_gnu_ld with_gnu_ld=$lt_save_with_gnu_ld lt_cv_path_LDCXX=$lt_cv_path_LD lt_cv_path_LD=$lt_save_path_LD lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld ])# AC_LIBTOOL_LANG_CXX_CONFIG # AC_LIBTOOL_POSTDEP_PREDEP([TAGNAME]) # ------------------------ # Figure out "hidden" library dependencies from verbose # compiler output when linking a shared library. # Parse the compiler output and extract the necessary # objects, libraries and library flags. AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP],[ dnl we can't use the lt_simple_compile_test_code here, dnl because it contains code intended for an executable, dnl not a library. It's possible we should let each dnl tag define a new lt_????_link_test_code variable, dnl but it's only used here... ifelse([$1],[],[cat > conftest.$ac_ext < conftest.$ac_ext < conftest.$ac_ext < conftest.$ac_ext <> "$cfgfile" ifelse([$1], [], [#! $SHELL # `$echo "$cfgfile" | sed 's%^.*/%%'` - Provide generalized library-building support services. # Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP) # NOTE: Changes made to this file will be lost: look at ltmain.sh. # # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001 # Free Software Foundation, Inc. # # This file is part of GNU Libtool: # Originally by Gordon Matzigkeit , 1996 # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # A sed program that does not truncate output. SED=$lt_SED # Sed that helps us avoid accidentally triggering echo(1) options like -n. Xsed="$SED -e s/^X//" # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. if test "X\${CDPATH+set}" = Xset; then CDPATH=:; export CDPATH; fi # The names of the tagged configurations supported by this script. available_tags= # ### BEGIN LIBTOOL CONFIG], [# ### BEGIN LIBTOOL TAG CONFIG: $tagname]) # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # Shell to use when invoking shell scripts. SHELL=$lt_SHELL # Whether or not to build shared libraries. build_libtool_libs=$enable_shared # Whether or not to build static libraries. build_old_libs=$enable_static # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$_LT_AC_TAGVAR(archive_cmds_need_lc, $1) # Whether or not to disallow shared libs when runtime libs are static allow_libtool_libs_with_static_runtimes=$_LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1) # Whether or not to optimize for fast installation. fast_install=$enable_fast_install # The host system. host_alias=$host_alias host=$host # An echo program that does not interpret backslashes. echo=$lt_echo # The archiver. AR=$lt_AR AR_FLAGS=$lt_AR_FLAGS # A C compiler. LTCC=$lt_LTCC # A language-specific compiler. CC=$lt_[]_LT_AC_TAGVAR(compiler, $1) # Is the compiler the GNU C compiler? with_gcc=$_LT_AC_TAGVAR(GCC, $1) # An ERE matcher. EGREP=$lt_EGREP # The linker used to build libraries. LD=$lt_[]_LT_AC_TAGVAR(LD, $1) # Whether we need hard or soft links. LN_S=$lt_LN_S # A BSD-compatible nm program. NM=$lt_NM # A symbol stripping program STRIP=$lt_STRIP # Used to examine libraries when file_magic_cmd begins "file" MAGIC_CMD=$MAGIC_CMD # Used on cygwin: DLL creation program. DLLTOOL="$DLLTOOL" # Used on cygwin: object dumper. OBJDUMP="$OBJDUMP" # Used on cygwin: assembler. AS="$AS" # The name of the directory that contains temporary libtool files. objdir=$objdir # How to create reloadable object files. reload_flag=$lt_reload_flag reload_cmds=$lt_reload_cmds # How to pass a linker flag through the compiler. wl=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_wl, $1) # Object file suffix (normally "o"). objext="$ac_objext" # Old archive suffix (normally "a"). libext="$libext" # Shared library suffix (normally ".so"). shrext_cmds='$shrext_cmds' # Executable file suffix (normally ""). exeext="$exeext" # Additional compiler flags for building library objects. pic_flag=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_pic, $1) pic_mode=$pic_mode # What is the maximum length of a command? max_cmd_len=$lt_cv_sys_max_cmd_len # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_[]_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1) # Must we lock files when doing compilation ? need_locks=$lt_need_locks # Do we need the lib prefix for modules? need_lib_prefix=$need_lib_prefix # Do we need a version for libraries? need_version=$need_version # Whether dlopen is supported. dlopen_support=$enable_dlopen # Whether dlopen of programs is supported. dlopen_self=$enable_dlopen_self # Whether dlopen of statically linked programs is supported. dlopen_self_static=$enable_dlopen_self_static # Compiler flag to prevent dynamic linking. link_static_flag=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_static, $1) # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_[]_LT_AC_TAGVAR(export_dynamic_flag_spec, $1) # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_[]_LT_AC_TAGVAR(whole_archive_flag_spec, $1) # Compiler flag to generate thread-safe objects. thread_safe_flag_spec=$lt_[]_LT_AC_TAGVAR(thread_safe_flag_spec, $1) # Library versioning type. version_type=$version_type # Format of library name prefix. libname_spec=$lt_libname_spec # List of archive names. First name is the real one, the rest are links. # The last name is the one that the linker finds with -lNAME. library_names_spec=$lt_library_names_spec # The coded name of the library, if different from the real name. soname_spec=$lt_soname_spec # Commands used to build and install an old-style archive. RANLIB=$lt_RANLIB old_archive_cmds=$lt_[]_LT_AC_TAGVAR(old_archive_cmds, $1) old_postinstall_cmds=$lt_old_postinstall_cmds old_postuninstall_cmds=$lt_old_postuninstall_cmds # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_[]_LT_AC_TAGVAR(old_archive_from_new_cmds, $1) # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_[]_LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1) # Commands used to build and install a shared archive. archive_cmds=$lt_[]_LT_AC_TAGVAR(archive_cmds, $1) archive_expsym_cmds=$lt_[]_LT_AC_TAGVAR(archive_expsym_cmds, $1) postinstall_cmds=$lt_postinstall_cmds postuninstall_cmds=$lt_postuninstall_cmds # Commands used to build a loadable module (assumed same as above if empty) module_cmds=$lt_[]_LT_AC_TAGVAR(module_cmds, $1) module_expsym_cmds=$lt_[]_LT_AC_TAGVAR(module_expsym_cmds, $1) # Commands to strip libraries. old_striplib=$lt_old_striplib striplib=$lt_striplib # Dependencies to place before the objects being linked to create a # shared library. predep_objects=$lt_[]_LT_AC_TAGVAR(predep_objects, $1) # Dependencies to place after the objects being linked to create a # shared library. postdep_objects=$lt_[]_LT_AC_TAGVAR(postdep_objects, $1) # Dependencies to place before the objects being linked to create a # shared library. predeps=$lt_[]_LT_AC_TAGVAR(predeps, $1) # Dependencies to place after the objects being linked to create a # shared library. postdeps=$lt_[]_LT_AC_TAGVAR(postdeps, $1) # The library search path used internally by the compiler when linking # a shared library. compiler_lib_search_path=$lt_[]_LT_AC_TAGVAR(compiler_lib_search_path, $1) # Method to check whether dependent libraries are shared objects. deplibs_check_method=$lt_deplibs_check_method # Command to use when deplibs_check_method == file_magic. file_magic_cmd=$lt_file_magic_cmd # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_[]_LT_AC_TAGVAR(allow_undefined_flag, $1) # Flag that forces no undefined symbols. no_undefined_flag=$lt_[]_LT_AC_TAGVAR(no_undefined_flag, $1) # Commands used to finish a libtool library installation in a directory. finish_cmds=$lt_finish_cmds # Same as above, but a single script fragment to be evaled but not shown. finish_eval=$lt_finish_eval # Take the output of nm and produce a listing of raw symbols and C names. global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe # Transform the output of nm in a proper C declaration global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl # Transform the output of nm in a C name address pair global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address # This is the shared library runtime path variable. runpath_var=$runpath_var # This is the shared library path variable. shlibpath_var=$shlibpath_var # Is shlibpath searched before the hard-coded library search path? shlibpath_overrides_runpath=$shlibpath_overrides_runpath # How to hardcode a shared library path into an executable. hardcode_action=$_LT_AC_TAGVAR(hardcode_action, $1) # Whether we should hardcode library paths into libraries. hardcode_into_libs=$hardcode_into_libs # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist. hardcode_libdir_flag_spec=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) # If ld is used when linking, flag to hardcode \$libdir into # a binary during linking. This must work even if \$libdir does # not exist. hardcode_libdir_flag_spec_ld=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1) # Whether we need a single -rpath flag with a separated argument. hardcode_libdir_separator=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_separator, $1) # Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the # resulting binary. hardcode_direct=$_LT_AC_TAGVAR(hardcode_direct, $1) # Set to yes if using the -LDIR flag during linking hardcodes DIR into the # resulting binary. hardcode_minus_L=$_LT_AC_TAGVAR(hardcode_minus_L, $1) # Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into # the resulting binary. hardcode_shlibpath_var=$_LT_AC_TAGVAR(hardcode_shlibpath_var, $1) # Set to yes if building a shared library automatically hardcodes DIR into the library # and all subsequent libraries and executables linked against it. hardcode_automatic=$_LT_AC_TAGVAR(hardcode_automatic, $1) # Variables whose values should be saved in libtool wrapper scripts and # restored at relink time. variables_saved_for_relink="$variables_saved_for_relink" # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$_LT_AC_TAGVAR(link_all_deplibs, $1) # Compile-time system search path for libraries sys_lib_search_path_spec=$lt_sys_lib_search_path_spec # Run-time system search path for libraries sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec # Fix the shell variable \$srcfile for the compiler. fix_srcfile_path="$_LT_AC_TAGVAR(fix_srcfile_path, $1)" # Set to yes if exported symbols are required. always_export_symbols=$_LT_AC_TAGVAR(always_export_symbols, $1) # The commands to list exported symbols. export_symbols_cmds=$lt_[]_LT_AC_TAGVAR(export_symbols_cmds, $1) # The commands to extract the exported symbol list from a shared archive. extract_expsyms_cmds=$lt_extract_expsyms_cmds # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_[]_LT_AC_TAGVAR(exclude_expsyms, $1) # Symbols that must always be exported. include_expsyms=$lt_[]_LT_AC_TAGVAR(include_expsyms, $1) ifelse([$1],[], [# ### END LIBTOOL CONFIG], [# ### END LIBTOOL TAG CONFIG: $tagname]) __EOF__ ifelse([$1],[], [ case $host_os in aix3*) cat <<\EOF >> "$cfgfile" # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi EOF ;; esac # We use sed instead of cat because bash on DJGPP gets confused if # if finds mixed CR/LF and LF-only lines. Since sed operates in # text mode, it properly converts lines to CR/LF. This bash problem # is reportedly fixed, but why not run on old versions too? sed '$q' "$ltmain" >> "$cfgfile" || (rm -f "$cfgfile"; exit 1) mv -f "$cfgfile" "$ofile" || \ (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") chmod +x "$ofile" ]) else # If there is no Makefile yet, we rely on a make rule to execute # `config.status --recheck' to rerun these tests and create the # libtool script then. ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` if test -f "$ltmain_in"; then test -f Makefile && make "$ltmain" fi fi ])# AC_LIBTOOL_CONFIG # AC_LIBTOOL_PROG_COMPILER_NO_RTTI([TAGNAME]) # ------------------------------------------- AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= if test "$GCC" = yes; then _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' AC_LIBTOOL_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions], lt_cv_prog_compiler_rtti_exceptions, [-fno-rtti -fno-exceptions], [], [_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"]) fi ])# AC_LIBTOOL_PROG_COMPILER_NO_RTTI # AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE # --------------------------------- AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([AC_PROG_NM]) AC_REQUIRE([AC_OBJEXT]) # Check for command to grab the raw symbol name followed by C symbol from nm. AC_MSG_CHECKING([command to parse $NM output from $compiler object]) AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe], [ # These are sane defaults that work on at least a few old systems. # [They come from Ultrix. What could be older than Ultrix?!! ;)] # Character class describing NM global symbol codes. symcode='[[BCDEGRST]]' # Regexp to match symbols that can be accessed directly from C. sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)' # Transform the above into a raw symbol and a C symbol. symxfrm='\1 \2\3 \3' # Transform an extracted symbol line into a proper C declaration lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^. .* \(.*\)$/extern int \1;/p'" # Transform an extracted symbol line into symbol name and symbol address lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" # Define system-specific variables. case $host_os in aix*) symcode='[[BCDT]]' ;; cygwin* | mingw* | pw32*) symcode='[[ABCDGISTW]]' ;; hpux*) # Its linker distinguishes data from code symbols if test "$host_cpu" = ia64; then symcode='[[ABCDEGRST]]' fi lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" ;; irix* | nonstopux*) symcode='[[BCDEGRST]]' ;; osf*) symcode='[[BCDEGQRST]]' ;; solaris* | sysv5*) symcode='[[BDRT]]' ;; sysv4) symcode='[[DFNSTU]]' ;; esac # Handle CRLF in mingw tool chain opt_cr= case $build_os in mingw*) opt_cr=`echo 'x\{0,1\}' | tr x '\015'` # option cr in regexp ;; esac # If we're using GNU nm, then use its standard symbol codes. case `$NM -V 2>&1` in *GNU* | *'with BFD'*) symcode='[[ABCDGIRSTW]]' ;; esac # Try without a prefix undercore, then with it. for ac_symprfx in "" "_"; do # Write the raw and C identifiers. lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*\($ac_symprfx\)$sympat$opt_cr$/$symxfrm/p'" # Check to see that the pipe works correctly. pipe_works=no rm -f conftest* cat > conftest.$ac_ext < $nlist) && test -s "$nlist"; then # Try sorting and uniquifying the output. if sort "$nlist" | uniq > "$nlist"T; then mv -f "$nlist"T "$nlist" else rm -f "$nlist"T fi # Make sure that we snagged all the symbols we need. if grep ' nm_test_var$' "$nlist" >/dev/null; then if grep ' nm_test_func$' "$nlist" >/dev/null; then cat < conftest.$ac_ext #ifdef __cplusplus extern "C" { #endif EOF # Now generate the symbol file. eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | grep -v main >> conftest.$ac_ext' cat <> conftest.$ac_ext #if defined (__STDC__) && __STDC__ # define lt_ptr_t void * #else # define lt_ptr_t char * # define const #endif /* The mapping between symbol names and symbols. */ const struct { const char *name; lt_ptr_t address; } lt_preloaded_symbols[[]] = { EOF $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (lt_ptr_t) \&\2},/" < "$nlist" | grep -v main >> conftest.$ac_ext cat <<\EOF >> conftest.$ac_ext {0, (lt_ptr_t) 0} }; #ifdef __cplusplus } #endif EOF # Now try linking the two files. mv conftest.$ac_objext conftstm.$ac_objext lt_save_LIBS="$LIBS" lt_save_CFLAGS="$CFLAGS" LIBS="conftstm.$ac_objext" CFLAGS="$CFLAGS$_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)" if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then pipe_works=yes fi LIBS="$lt_save_LIBS" CFLAGS="$lt_save_CFLAGS" else echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD fi else echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD fi else echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD fi else echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD cat conftest.$ac_ext >&5 fi rm -f conftest* conftst* # Do not use the global_symbol_pipe unless it works. if test "$pipe_works" = yes; then break else lt_cv_sys_global_symbol_pipe= fi done ]) if test -z "$lt_cv_sys_global_symbol_pipe"; then lt_cv_sys_global_symbol_to_cdecl= fi if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then AC_MSG_RESULT(failed) else AC_MSG_RESULT(ok) fi ]) # AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE # AC_LIBTOOL_PROG_COMPILER_PIC([TAGNAME]) # --------------------------------------- AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC], [_LT_AC_TAGVAR(lt_prog_compiler_wl, $1)= _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)= _LT_AC_TAGVAR(lt_prog_compiler_static, $1)= AC_MSG_CHECKING([for $compiler option to produce PIC]) ifelse([$1],[CXX],[ # C++ specific cases for pic, static, wl, etc. if test "$GXX" = yes; then _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi ;; amigaos*) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' ;; beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | os2* | pw32*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT' ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' ;; *djgpp*) # DJGPP does not support shared libraries at all _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)= ;; sysv4*MP*) if test -d /usr/nec; then _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic fi ;; hpux*) # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case "$host_cpu" in hppa*64*|ia64*) ;; *) _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac ;; *) _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac else case $host_os in aix4* | aix5*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' else _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' fi ;; chorus*) case $cc_basename in cxch68) # Green Hills C++ Compiler # _LT_AC_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" ;; esac ;; dgux*) case $cc_basename in ec++) _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' ;; ghcx) # Green Hills C++ Compiler _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; *) ;; esac ;; freebsd* | kfreebsd*-gnu) # FreeBSD uses GNU C++ ;; hpux9* | hpux10* | hpux11*) case $cc_basename in CC) _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_AC_TAGVAR(lt_prog_compiler_static, $1)="${ac_cv_prog_cc_wl}-a ${ac_cv_prog_cc_wl}archive" if test "$host_cpu" != ia64; then _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='+Z' fi ;; aCC) _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_AC_TAGVAR(lt_prog_compiler_static, $1)="${ac_cv_prog_cc_wl}-a ${ac_cv_prog_cc_wl}archive" case "$host_cpu" in hppa*64*|ia64*) # +Z the default ;; *) _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='+Z' ;; esac ;; *) ;; esac ;; irix5* | irix6* | nonstopux*) case $cc_basename in CC) _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' # CC pic flag -KPIC is the default. ;; *) ;; esac ;; linux*) case $cc_basename in KCC) # KAI C++ Compiler _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; icpc) # Intel C++ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; cxx) # Compaq C++ # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)= _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; *) ;; esac ;; lynxos*) ;; m88k*) ;; mvs*) case $cc_basename in cxx) _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall' ;; *) ;; esac ;; netbsd*) ;; osf3* | osf4* | osf5*) case $cc_basename in KCC) _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' ;; RCC) # Rational C++ 2.4.1 _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; cxx) # Digital/Compaq C++ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)= _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; *) ;; esac ;; psos*) ;; sco*) case $cc_basename in CC) _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; *) ;; esac ;; solaris*) case $cc_basename in CC) # Sun C++ 4.2, 5.x and Centerline C++ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; gcx) # Green Hills C++ Compiler _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' ;; *) ;; esac ;; sunos4*) case $cc_basename in CC) # Sun C++ 4.x _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic' _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; lcc) # Lucid _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; *) ;; esac ;; tandem*) case $cc_basename in NCC) # NonStop-UX NCC 3.20 _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' ;; *) ;; esac ;; unixware*) ;; vxworks*) ;; *) _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; esac fi ], [ if test "$GCC" = yes; then _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi ;; amigaos*) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' ;; beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | pw32* | os2*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT' ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no enable_shared=no ;; sysv4*MP*) if test -d /usr/nec; then _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic fi ;; hpux*) # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case "$host_cpu" in hppa*64*|ia64*) # +Z the default ;; *) _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac ;; *) _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' else _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' fi ;; mingw* | pw32* | os2*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT' ;; hpux9* | hpux10* | hpux11*) _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case "$host_cpu" in hppa*64*|ia64*) # +Z the default ;; *) _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # PIC (with -KPIC) is the default. _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; newsos6) _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; linux*) case $CC in icc* | ecc*) _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; ccc*) _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # All Alpha code is PIC. _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; esac ;; osf3* | osf4* | osf5*) _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # All OSF/1 code is PIC. _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; sco3.2v5*) _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-Kpic' _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-dn' ;; solaris*) _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; sunos4*) _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec ;then _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic' _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi ;; uts4*) _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic' _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; *) _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; esac fi ]) AC_MSG_RESULT([$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)]) # # Check to make sure the PIC flag actually works. # if test -n "$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)"; then AC_LIBTOOL_COMPILER_OPTION([if $compiler PIC flag $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1) works], _LT_AC_TAGVAR(lt_prog_compiler_pic_works, $1), [$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)ifelse([$1],[],[ -DPIC],[ifelse([$1],[CXX],[ -DPIC],[])])], [], [case $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1) in "" | " "*) ;; *) _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)" ;; esac], [_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)= _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no]) fi case "$host_os" in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)= ;; *) _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)ifelse([$1],[],[ -DPIC],[ifelse([$1],[CXX],[ -DPIC],[])])" ;; esac ]) # AC_LIBTOOL_PROG_LD_SHLIBS([TAGNAME]) # ------------------------------------ # See if the linker supports building shared libraries. AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS], [AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) ifelse([$1],[CXX],[ _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' case $host_os in aix4* | aix5*) # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm if $NM -V 2>&1 | grep 'GNU' > /dev/null; then _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols' else _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols' fi ;; pw32*) _LT_AC_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds" ;; cygwin* | mingw*) _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGS]] /s/.* \([[^ ]]*\)/\1 DATA/'\'' | $SED -e '\''/^[[AITW]] /s/.* //'\'' | sort | uniq > $export_symbols' ;; *) _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' ;; esac ],[ runpath_var= _LT_AC_TAGVAR(allow_undefined_flag, $1)= _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=no _LT_AC_TAGVAR(archive_cmds, $1)= _LT_AC_TAGVAR(archive_expsym_cmds, $1)= _LT_AC_TAGVAR(old_archive_From_new_cmds, $1)= _LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1)= _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)= _LT_AC_TAGVAR(whole_archive_flag_spec, $1)= _LT_AC_TAGVAR(thread_safe_flag_spec, $1)= _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= _LT_AC_TAGVAR(hardcode_libdir_separator, $1)= _LT_AC_TAGVAR(hardcode_direct, $1)=no _LT_AC_TAGVAR(hardcode_minus_L, $1)=no _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported _LT_AC_TAGVAR(link_all_deplibs, $1)=unknown _LT_AC_TAGVAR(hardcode_automatic, $1)=no _LT_AC_TAGVAR(module_cmds, $1)= _LT_AC_TAGVAR(module_expsym_cmds, $1)= _LT_AC_TAGVAR(always_export_symbols, $1)=no _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list _LT_AC_TAGVAR(include_expsyms, $1)= # exclude_expsyms can be an extended regexp of symbols to exclude # it will be wrapped by ` (' and `)$', so one must not match beginning or # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', # as well as any symbol that contains `d'. _LT_AC_TAGVAR(exclude_expsyms, $1)="_GLOBAL_OFFSET_TABLE_" # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. extract_expsyms_cmds= case $host_os in cygwin* | mingw* | pw32*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test "$GCC" != yes; then with_gnu_ld=no fi ;; openbsd*) with_gnu_ld=no ;; esac _LT_AC_TAGVAR(ld_shlibs, $1)=yes if test "$with_gnu_ld" = yes; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='${wl}' # See if GNU ld supports shared libraries. case $host_os in aix3* | aix4* | aix5*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then _LT_AC_TAGVAR(ld_shlibs, $1)=no cat <&2 *** Warning: the GNU linker, at least up to release 2.9.1, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to modify your PATH *** so that a non-GNU linker is found, and then restart. EOF fi ;; amigaos*) _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes # Samuel A. Falvo II reports # that the semantics of dynamic libraries on AmigaOS, at least up # to version 4, is to share data among multiple programs linked # with the same dynamic library. Since this doesn't match the # behavior of shared libraries on other platforms, we can't use # them. _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; beos*) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME _LT_AC_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else _LT_AC_TAGVAR(ld_shlibs, $1)=no fi ;; cygwin* | mingw* | pw32*) # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, # as there is no search path for DLLs. _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_AC_TAGVAR(always_export_symbols, $1)=no _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGS]] /s/.* \([[^ ]]*\)/\1 DATA/'\'' | $SED -e '\''/^[[AITW]] /s/.* //'\'' | sort | uniq > $export_symbols' if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... _LT_AC_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib' else ld_shlibs=no fi ;; netbsd*) if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris* | sysv5*) if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then _LT_AC_TAGVAR(ld_shlibs, $1)=no cat <&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. EOF elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else _LT_AC_TAGVAR(ld_shlibs, $1)=no fi ;; sunos4*) _LT_AC_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= _LT_AC_TAGVAR(hardcode_direct, $1)=yes _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no ;; linux*) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then tmp_archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_AC_TAGVAR(archive_cmds, $1)="$tmp_archive_cmds" supports_anon_versioning=no case `$LD -v 2>/dev/null` in *\ [01].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... *\ 2.11.*) ;; # other 2.11 versions *) supports_anon_versioning=yes ;; esac if test $supports_anon_versioning = yes; then _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ $echo "local: *; };" >> $output_objdir/$libname.ver~ $CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' else _LT_AC_TAGVAR(archive_expsym_cmds, $1)="$tmp_archive_cmds" fi else _LT_AC_TAGVAR(ld_shlibs, $1)=no fi ;; *) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else _LT_AC_TAGVAR(ld_shlibs, $1)=no fi ;; esac if test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = yes; then runpath_var=LD_RUN_PATH _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir' _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then _LT_AC_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else _LT_AC_TAGVAR(whole_archive_flag_spec, $1)= fi fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_AC_TAGVAR(always_export_symbols, $1)=yes _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes if test "$GCC" = yes && test -z "$link_static_flag"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. _LT_AC_TAGVAR(hardcode_direct, $1)=unsupported fi ;; aix4* | aix5*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm if $NM -V 2>&1 | grep 'GNU' > /dev/null; then _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols' else _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[[23]]|aix4.[[23]].*|aix5*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes break fi done esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. _LT_AC_TAGVAR(archive_cmds, $1)='' _LT_AC_TAGVAR(hardcode_direct, $1)=yes _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_AC_TAGVAR(link_all_deplibs, $1)=yes if test "$GCC" = yes; then case $host_os in aix4.[012]|aix4.[012].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && \ strings "$collect2name" | grep resolve_lib_name >/dev/null then # We have reworked collect2 _LT_AC_TAGVAR(hardcode_direct, $1)=yes else # We have old collect2 _LT_AC_TAGVAR(hardcode_direct, $1)=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_AC_TAGVAR(hardcode_libdir_separator, $1)= fi esac shared_flag='-shared' else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. _LT_AC_TAGVAR(always_export_symbols, $1)=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. _LT_AC_TAGVAR(allow_undefined_flag, $1)='-berok' # Determine the default libpath from the value encoded in an empty executable. _LT_AC_SYS_LIBPATH_AIX _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' _LT_AC_TAGVAR(allow_undefined_flag, $1)="-z nodefs" _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an empty executable. _LT_AC_SYS_LIBPATH_AIX _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. _LT_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' # -bexpall does not export symbols beginning with underscore (_) _LT_AC_TAGVAR(always_export_symbols, $1)=yes # Exported symbols can be pulled into shared objects from archives _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=' ' _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes # This is similar to how AIX traditionally builds it's shared libraries. _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; amigaos*) _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes # see comment about different semantics on the GNU ld section _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; bsdi4*) _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic ;; cygwin* | mingw* | pw32*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. _LT_AC_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. _LT_AC_TAGVAR(old_archive_From_new_cmds, $1)='true' # FIXME: Should let the user specify the lib program. _LT_AC_TAGVAR(old_archive_cmds, $1)='lib /OUT:$oldlib$oldobjs$old_deplibs' fix_srcfile_path='`cygpath -w "$srcfile"`' _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes ;; darwin* | rhapsody*) if test "$GXX" = yes ; then _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no case "$host_os" in rhapsody* | darwin1.[[012]]) _LT_AC_TAGVAR(allow_undefined_flag, $1)='-undefined suppress' ;; *) # Darwin 1.3 on if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then _LT_AC_TAGVAR(allow_undefined_flag, $1)='-flat_namespace -undefined suppress' else case ${MACOSX_DEPLOYMENT_TARGET} in 10.[[012]]) _LT_AC_TAGVAR(allow_undefined_flag, $1)='-flat_namespace -undefined suppress' ;; 10.*) _LT_AC_TAGVAR(allow_undefined_flag, $1)='-undefined dynamic_lookup' ;; esac fi ;; esac lt_int_apple_cc_single_mod=no output_verbose_link_cmd='echo' if $CC -dumpspecs 2>&1 | grep 'single_module' >/dev/null ; then lt_int_apple_cc_single_mod=yes fi if test "X$lt_int_apple_cc_single_mod" = Xyes ; then _LT_AC_TAGVAR(archive_cmds, $1)='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' else _LT_AC_TAGVAR(archive_cmds, $1)='$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring' fi _LT_AC_TAGVAR(module_cmds, $1)='$CC ${wl}-bind_at_load $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's if test "X$lt_int_apple_cc_single_mod" = Xyes ; then _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' else _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' fi _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' _LT_AC_TAGVAR(hardcode_direct, $1)=no _LT_AC_TAGVAR(hardcode_automatic, $1)=yes _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='-all_load $convenience' _LT_AC_TAGVAR(link_all_deplibs, $1)=yes else _LT_AC_TAGVAR(ld_shlibs, $1)=no fi ;; dgux*) _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no ;; freebsd1*) _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_AC_TAGVAR(hardcode_direct, $1)=yes _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2*) _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' _LT_AC_TAGVAR(hardcode_direct, $1)=yes _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | kfreebsd*-gnu) _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_AC_TAGVAR(hardcode_direct, $1)=yes _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no ;; hpux9*) if test "$GCC" = yes; then _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' fi _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: _LT_AC_TAGVAR(hardcode_direct, $1)=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' ;; hpux10* | hpux11*) if test "$GCC" = yes -a "$with_gnu_ld" = no; then case "$host_cpu" in hppa*64*|ia64*) _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; *) _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case "$host_cpu" in hppa*64*|ia64*) _LT_AC_TAGVAR(archive_cmds, $1)='$LD -b +h $soname -o $lib $libobjs $deplibs $linker_flags' ;; *) _LT_AC_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' ;; esac fi if test "$with_gnu_ld" = no; then case "$host_cpu" in hppa*64*) _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir' _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: _LT_AC_TAGVAR(hardcode_direct, $1)=no _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no ;; ia64*) _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_AC_TAGVAR(hardcode_direct, $1)=no _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes ;; *) _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: _LT_AC_TAGVAR(hardcode_direct, $1)=yes _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test "$GCC" = yes; then _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='-rpath $libdir' fi _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: _LT_AC_TAGVAR(link_all_deplibs, $1)=yes ;; netbsd*) if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_AC_TAGVAR(hardcode_direct, $1)=yes _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no ;; newsos6) _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_AC_TAGVAR(hardcode_direct, $1)=yes _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no ;; openbsd*) _LT_AC_TAGVAR(hardcode_direct, $1)=yes _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' else case $host_os in openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*) _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' ;; *) _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' ;; esac fi ;; os2*) _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_AC_TAGVAR(archive_cmds, $1)='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' _LT_AC_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' ;; osf3*) if test "$GCC" = yes; then _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else _LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' fi _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test "$GCC" = yes; then _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' else _LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' _LT_AC_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~ $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib~$rm $lib.exp' # Both c and cxx compiler support -rpath directly _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' fi _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: ;; sco3.2v5*) _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' runpath_var=LD_RUN_PATH hardcode_runpath_var=yes ;; solaris*) _LT_AC_TAGVAR(no_undefined_flag, $1)=' -z text' if test "$GCC" = yes; then _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp' else _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp' fi _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) # Supported since Solaris 2.6 (maybe 2.5.1?) _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' ;; esac _LT_AC_TAGVAR(link_all_deplibs, $1)=yes ;; sunos4*) if test "x$host_vendor" = xsequent; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_AC_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_AC_TAGVAR(hardcode_direct, $1)=yes _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no ;; sysv4) case $host_vendor in sni) _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_AC_TAGVAR(hardcode_direct, $1)=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags' _LT_AC_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs' _LT_AC_TAGVAR(hardcode_direct, $1)=no ;; motorola) _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_AC_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no ;; sysv4.3*) _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes _LT_AC_TAGVAR(ld_shlibs, $1)=yes fi ;; sysv4.2uw2*) _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags' _LT_AC_TAGVAR(hardcode_direct, $1)=yes _LT_AC_TAGVAR(hardcode_minus_L, $1)=no _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no hardcode_runpath_var=yes runpath_var=LD_RUN_PATH ;; sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[[78]]* | unixware7*) _LT_AC_TAGVAR(no_undefined_flag, $1)='${wl}-z ${wl}text' if test "$GCC" = yes; then _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' fi runpath_var='LD_RUN_PATH' _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no ;; sysv5*) _LT_AC_TAGVAR(no_undefined_flag, $1)=' -z text' # $CC -shared without GNU ld will not create a library from C++ # object files and a static libstdc++, better avoid it by now _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp' _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var='LD_RUN_PATH' ;; uts4*) _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; esac fi ]) AC_MSG_RESULT([$_LT_AC_TAGVAR(ld_shlibs, $1)]) test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi # # Do we need to explicitly link libc? # case "x$_LT_AC_TAGVAR(archive_cmds_need_lc, $1)" in x|xyes) # Assume -lc should be added _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $_LT_AC_TAGVAR(archive_cmds, $1) in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. AC_MSG_CHECKING([whether -lc should be explicitly linked in]) $rm conftest* printf "$lt_simple_compile_test_code" > conftest.$ac_ext if AC_TRY_EVAL(ac_compile) 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$_LT_AC_TAGVAR(lt_prog_compiler_wl, $1) compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$_LT_AC_TAGVAR(allow_undefined_flag, $1) _LT_AC_TAGVAR(allow_undefined_flag, $1)= if AC_TRY_EVAL(_LT_AC_TAGVAR(archive_cmds, $1) 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) then _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no else _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes fi _LT_AC_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $rm conftest* AC_MSG_RESULT([$_LT_AC_TAGVAR(archive_cmds_need_lc, $1)]) ;; esac fi ;; esac ])# AC_LIBTOOL_PROG_LD_SHLIBS # _LT_AC_FILE_LTDLL_C # ------------------- # Be careful that the start marker always follows a newline. AC_DEFUN([_LT_AC_FILE_LTDLL_C], [ # /* ltdll.c starts here */ # #define WIN32_LEAN_AND_MEAN # #include # #undef WIN32_LEAN_AND_MEAN # #include # # #ifndef __CYGWIN__ # # ifdef __CYGWIN32__ # # define __CYGWIN__ __CYGWIN32__ # # endif # #endif # # #ifdef __cplusplus # extern "C" { # #endif # BOOL APIENTRY DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved); # #ifdef __cplusplus # } # #endif # # #ifdef __CYGWIN__ # #include # DECLARE_CYGWIN_DLL( DllMain ); # #endif # HINSTANCE __hDllInstance_base; # # BOOL APIENTRY # DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved) # { # __hDllInstance_base = hInst; # return TRUE; # } # /* ltdll.c ends here */ ])# _LT_AC_FILE_LTDLL_C # _LT_AC_TAGVAR(VARNAME, [TAGNAME]) # --------------------------------- AC_DEFUN([_LT_AC_TAGVAR], [ifelse([$2], [], [$1], [$1_$2])]) # old names AC_DEFUN([AM_PROG_LIBTOOL], [AC_PROG_LIBTOOL]) AC_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)]) AC_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)]) AC_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)]) AC_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)]) AC_DEFUN([AM_PROG_LD], [AC_PROG_LD]) AC_DEFUN([AM_PROG_NM], [AC_PROG_NM]) # This is just to silence aclocal about the macro not being used ifelse([AC_DISABLE_FAST_INSTALL]) AC_DEFUN([LT_AC_PROG_GCJ], [AC_CHECK_TOOL(GCJ, gcj, no) test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2" AC_SUBST(GCJFLAGS) ]) AC_DEFUN([LT_AC_PROG_RC], [AC_CHECK_TOOL(RC, windres, no) ]) # NOTE: This macro has been submitted for inclusion into # # GNU Autoconf as AC_PROG_SED. When it is available in # # a released version of Autoconf we should remove this # # macro and use it instead. # # LT_AC_PROG_SED # -------------- # Check for a fully-functional sed program, that truncates # as few characters as possible. Prefer GNU sed if found. AC_DEFUN([LT_AC_PROG_SED], [AC_MSG_CHECKING([for a sed that does not truncate output]) AC_CACHE_VAL(lt_cv_path_SED, [# Loop through the user's path and test for sed and gsed. # Then use that list of sed's as ones to test for truncation. as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for lt_ac_prog in sed gsed; do for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" fi done done done lt_ac_max=0 lt_ac_count=0 # Add /usr/xpg4/bin/sed as it is typically found on Solaris # along with /bin/sed that truncates output. for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do test ! -f $lt_ac_sed && break cat /dev/null > conftest.in lt_ac_count=0 echo $ECHO_N "0123456789$ECHO_C" >conftest.in # Check for GNU sed and select it if it is found. if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then lt_cv_path_SED=$lt_ac_sed break fi while true; do cat conftest.in conftest.in >conftest.tmp mv conftest.tmp conftest.in cp conftest.in conftest.nl echo >>conftest.nl $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break cmp -s conftest.out conftest.nl || break # 10000 chars as input seems more than enough test $lt_ac_count -gt 10 && break lt_ac_count=`expr $lt_ac_count + 1` if test $lt_ac_count -gt $lt_ac_max; then lt_ac_max=$lt_ac_count lt_cv_path_SED=$lt_ac_sed fi done done SED=$lt_cv_path_SED ]) AC_MSG_RESULT([$SED]) ]) m4_include([macros/neon-test.m4]) m4_include([macros/neon-xml-parser.m4]) m4_include([macros/neon.m4]) tla-1.3.5+dfsg/src/libneon/config.hw.in0000644000175000017500000000317010457621776016404 0ustar useruser/* Win32 config.h Copyright (C) 1999-2000, Peter Boos Copyright (C) 2002, Joe Orton This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA */ #if defined(_WIN32) && !defined(WIN32) #define WIN32 #endif #ifdef WIN32 #define NEON_VERSION "@VERSION@" #define NEON_VERSION_MAJOR (@MAJOR@) #define NEON_VERSION_MINOR (@MINOR@) #define HAVE_ERRNO_H #define HAVE_LIMITS_H #define HAVE_STDLIB_H #define HAVE_STRING_H #define HAVE_MEMCPY #ifndef NEON_NODAV #define USE_DAV_LOCKS #endif #define NE_FMT_SIZE_T "u" #define NE_FMT_SSIZE_T "d" #define NE_FMT_OFF_T "ld" /* Win32 uses a underscore, so we use a macro to eliminate that. */ #define snprintf _snprintf #define vsnprintf _vsnprintf #define strcasecmp strcmpi #define strncasecmp strnicmp #define ssize_t int #define inline __inline #define off_t _off_t #include #define read _read #endif tla-1.3.5+dfsg/src/libneon/ltmain.sh0000644000175000017500000054666210457621776016034 0ustar useruser# ltmain.sh - Provide generalized library-building support services. # NOTE: Changing this file will not affect anything until you rerun configure. # # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004 # Free Software Foundation, Inc. # Originally by Gordon Matzigkeit , 1996 # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. basename="s,^.*/,,g" # Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh # is ksh but when the shell is invoked as "sh" and the current value of # the _XPG environment variable is not equal to 1 (one), the special # positional parameter $0, within a function call, is the name of the # function. progpath="$0" # RH: define SED for historic ltconfig's generated by Libtool 1.3 [ -z "$SED" ] && SED=sed # The name of this program: progname=`echo "$progpath" | $SED $basename` modename="$progname" # Global variables: EXIT_SUCCESS=0 EXIT_FAILURE=1 PROGRAM=ltmain.sh PACKAGE=libtool VERSION=1.5.6 TIMESTAMP=" (1.1220.2.95 2004/04/11 05:50:42)" # Check that we have a working $echo. if test "X$1" = X--no-reexec; then # Discard the --no-reexec flag, and continue. shift elif test "X$1" = X--fallback-echo; then # Avoid inline document here, it may be left over : elif test "X`($echo '\t') 2>/dev/null`" = 'X\t'; then # Yippee, $echo works! : else # Restart under the correct shell, and then maybe $echo will work. exec $SHELL "$progpath" --no-reexec ${1+"$@"} fi if test "X$1" = X--fallback-echo; then # used as fallback echo shift cat <&2 $echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2 exit $EXIT_FAILURE fi # Global variables. mode=$default_mode nonopt= prev= prevopt= run= show="$echo" show_help= execute_dlfiles= lo2o="s/\\.lo\$/.${objext}/" o2lo="s/\\.${objext}\$/.lo/" ##################################### # Shell function definitions: # This seems to be the best place for them # func_win32_libid arg # return the library type of file 'arg' # # Need a lot of goo to handle *both* DLLs and import libs # Has to be a shell function in order to 'eat' the argument # that is supplied when $file_magic_command is called. func_win32_libid () { win32_libid_type="unknown" win32_fileres=`file -L $1 2>/dev/null` case $win32_fileres in *ar\ archive\ import\ library*) # definitely import win32_libid_type="x86 archive import" ;; *ar\ archive*) # could be an import, or static if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | \ $EGREP -e 'file format pe-i386(.*architecture: i386)?' >/dev/null ; then win32_nmres=`eval $NM -f posix -A $1 | \ sed -n -e '1,100{/ I /{x;/import/!{s/^/import/;h;p;};x;};}'` if test "X$win32_nmres" = "Ximport" ; then win32_libid_type="x86 archive import" else win32_libid_type="x86 archive static" fi fi ;; *DLL*) win32_libid_type="x86 DLL" ;; *executable*) # but shell scripts are "executable" too... case $win32_fileres in *MS\ Windows\ PE\ Intel*) win32_libid_type="x86 DLL" ;; esac ;; esac $echo $win32_libid_type } # func_infer_tag arg # Infer tagged configuration to use if any are available and # if one wasn't chosen via the "--tag" command line option. # Only attempt this if the compiler in the base compile # command doesn't match the default compiler. # arg is usually of the form 'gcc ...' func_infer_tag () { if test -n "$available_tags" && test -z "$tagname"; then CC_quoted= for arg in $CC; do case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac CC_quoted="$CC_quoted $arg" done case $@ in # Blanks in the command may have been stripped by the calling shell, # but not from the CC environment variable when configure was run. " $CC "* | "$CC "* | " `$echo $CC` "* | "`$echo $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$echo $CC_quoted` "* | "`$echo $CC_quoted` "*) ;; # Blanks at the start of $base_compile will cause this to fail # if we don't check for them as well. *) for z in $available_tags; do if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then # Evaluate the configuration. eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" CC_quoted= for arg in $CC; do # Double-quote args containing other shell metacharacters. case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac CC_quoted="$CC_quoted $arg" done case "$@ " in " $CC "* | "$CC "* | " `$echo $CC` "* | "`$echo $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$echo $CC_quoted` "* | "`$echo $CC_quoted` "*) # The compiler in the base compile command matches # the one in the tagged configuration. # Assume this is the tagged configuration we want. tagname=$z break ;; esac fi done # If $tagname still isn't set, then no tagged configuration # was found and let the user know that the "--tag" command # line option must be used. if test -z "$tagname"; then $echo "$modename: unable to infer tagged configuration" $echo "$modename: specify a tag with \`--tag'" 1>&2 exit $EXIT_FAILURE # else # $echo "$modename: using $tagname tagged configuration" fi ;; esac fi } # End of Shell function definitions ##################################### # Darwin sucks eval std_shrext=\"$shrext_cmds\" # Parse our command line options once, thoroughly. while test "$#" -gt 0 do arg="$1" shift case $arg in -*=*) optarg=`$echo "X$arg" | $Xsed -e 's/[-_a-zA-Z0-9]*=//'` ;; *) optarg= ;; esac # If the previous option needs an argument, assign it. if test -n "$prev"; then case $prev in execute_dlfiles) execute_dlfiles="$execute_dlfiles $arg" ;; tag) tagname="$arg" preserve_args="${preserve_args}=$arg" # Check whether tagname contains only valid characters case $tagname in *[!-_A-Za-z0-9,/]*) $echo "$progname: invalid tag name: $tagname" 1>&2 exit $EXIT_FAILURE ;; esac case $tagname in CC) # Don't test for the "default" C tag, as we know, it's there, but # not specially marked. ;; *) if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "$progpath" > /dev/null; then taglist="$taglist $tagname" # Evaluate the configuration. eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$tagname'$/,/^# ### END LIBTOOL TAG CONFIG: '$tagname'$/p' < $progpath`" else $echo "$progname: ignoring unknown tag $tagname" 1>&2 fi ;; esac ;; *) eval "$prev=\$arg" ;; esac prev= prevopt= continue fi # Have we seen a non-optional argument yet? case $arg in --help) show_help=yes ;; --version) $echo "$PROGRAM (GNU $PACKAGE) $VERSION$TIMESTAMP" $echo $echo "Copyright (C) 2003 Free Software Foundation, Inc." $echo "This is free software; see the source for copying conditions. There is NO" $echo "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." exit $EXIT_SUCCESS ;; --config) ${SED} -e '1,/^# ### BEGIN LIBTOOL CONFIG/d' -e '/^# ### END LIBTOOL CONFIG/,$d' $progpath # Now print the configurations for the tags. for tagname in $taglist; do ${SED} -n -e "/^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$/,/^# ### END LIBTOOL TAG CONFIG: $tagname$/p" < "$progpath" done exit $EXIT_SUCCESS ;; --debug) $echo "$progname: enabling shell trace mode" set -x preserve_args="$preserve_args $arg" ;; --dry-run | -n) run=: ;; --features) $echo "host: $host" if test "$build_libtool_libs" = yes; then $echo "enable shared libraries" else $echo "disable shared libraries" fi if test "$build_old_libs" = yes; then $echo "enable static libraries" else $echo "disable static libraries" fi exit $EXIT_SUCCESS ;; --finish) mode="finish" ;; --mode) prevopt="--mode" prev=mode ;; --mode=*) mode="$optarg" ;; --preserve-dup-deps) duplicate_deps="yes" ;; --quiet | --silent) show=: preserve_args="$preserve_args $arg" ;; --tag) prevopt="--tag" prev=tag ;; --tag=*) set tag "$optarg" ${1+"$@"} shift prev=tag preserve_args="$preserve_args --tag" ;; -dlopen) prevopt="-dlopen" prev=execute_dlfiles ;; -*) $echo "$modename: unrecognized option \`$arg'" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE ;; *) nonopt="$arg" break ;; esac done if test -n "$prevopt"; then $echo "$modename: option \`$prevopt' requires an argument" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi # If this variable is set in any of the actions, the command in it # will be execed at the end. This prevents here-documents from being # left over by shells. exec_cmd= if test -z "$show_help"; then # Infer the operation mode. if test -z "$mode"; then $echo "*** Warning: inferring the mode of operation is deprecated." 1>&2 $echo "*** Future versions of Libtool will require -mode=MODE be specified." 1>&2 case $nonopt in *cc | cc* | *++ | gcc* | *-gcc* | g++* | xlc*) mode=link for arg do case $arg in -c) mode=compile break ;; esac done ;; *db | *dbx | *strace | *truss) mode=execute ;; *install*|cp|mv) mode=install ;; *rm) mode=uninstall ;; *) # If we have no mode, but dlfiles were specified, then do execute mode. test -n "$execute_dlfiles" && mode=execute # Just use the default operation mode. if test -z "$mode"; then if test -n "$nonopt"; then $echo "$modename: warning: cannot infer operation mode from \`$nonopt'" 1>&2 else $echo "$modename: warning: cannot infer operation mode without MODE-ARGS" 1>&2 fi fi ;; esac fi # Only execute mode is allowed to have -dlopen flags. if test -n "$execute_dlfiles" && test "$mode" != execute; then $echo "$modename: unrecognized option \`-dlopen'" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi # Change the help message to a mode-specific one. generic_help="$help" help="Try \`$modename --help --mode=$mode' for more information." # These modes are in order of execution frequency so that they run quickly. case $mode in # libtool compile mode compile) modename="$modename: compile" # Get the compilation command and the source file. base_compile= srcfile="$nonopt" # always keep a non-empty value in "srcfile" suppress_opt=yes suppress_output= arg_mode=normal libobj= later= for arg do case "$arg_mode" in arg ) # do not "continue". Instead, add this to base_compile lastarg="$arg" arg_mode=normal ;; target ) libobj="$arg" arg_mode=normal continue ;; normal ) # Accept any command-line options. case $arg in -o) if test -n "$libobj" ; then $echo "$modename: you cannot specify \`-o' more than once" 1>&2 exit $EXIT_FAILURE fi arg_mode=target continue ;; -static | -prefer-pic | -prefer-non-pic) later="$later $arg" continue ;; -no-suppress) suppress_opt=no continue ;; -Xcompiler) arg_mode=arg # the next one goes into the "base_compile" arg list continue # The current "srcfile" will either be retained or ;; # replaced later. I would guess that would be a bug. -Wc,*) args=`$echo "X$arg" | $Xsed -e "s/^-Wc,//"` lastarg= save_ifs="$IFS"; IFS=',' for arg in $args; do IFS="$save_ifs" # Double-quote args containing other shell metacharacters. # Many Bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac lastarg="$lastarg $arg" done IFS="$save_ifs" lastarg=`$echo "X$lastarg" | $Xsed -e "s/^ //"` # Add the arguments to base_compile. base_compile="$base_compile $lastarg" continue ;; * ) # Accept the current argument as the source file. # The previous "srcfile" becomes the current argument. # lastarg="$srcfile" srcfile="$arg" ;; esac # case $arg ;; esac # case $arg_mode # Aesthetically quote the previous argument. lastarg=`$echo "X$lastarg" | $Xsed -e "$sed_quote_subst"` case $lastarg in # Double-quote args containing other shell metacharacters. # Many Bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") lastarg="\"$lastarg\"" ;; esac base_compile="$base_compile $lastarg" done # for arg case $arg_mode in arg) $echo "$modename: you must specify an argument for -Xcompile" exit $EXIT_FAILURE ;; target) $echo "$modename: you must specify a target with \`-o'" 1>&2 exit $EXIT_FAILURE ;; *) # Get the name of the library object. [ -z "$libobj" ] && libobj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%'` ;; esac # Recognize several different file suffixes. # If the user specifies -o file.o, it is replaced with file.lo xform='[cCFSifmso]' case $libobj in *.ada) xform=ada ;; *.adb) xform=adb ;; *.ads) xform=ads ;; *.asm) xform=asm ;; *.c++) xform=c++ ;; *.cc) xform=cc ;; *.ii) xform=ii ;; *.class) xform=class ;; *.cpp) xform=cpp ;; *.cxx) xform=cxx ;; *.f90) xform=f90 ;; *.for) xform=for ;; *.java) xform=java ;; esac libobj=`$echo "X$libobj" | $Xsed -e "s/\.$xform$/.lo/"` case $libobj in *.lo) obj=`$echo "X$libobj" | $Xsed -e "$lo2o"` ;; *) $echo "$modename: cannot determine name of library object from \`$libobj'" 1>&2 exit $EXIT_FAILURE ;; esac func_infer_tag $base_compile for arg in $later; do case $arg in -static) build_old_libs=yes continue ;; -prefer-pic) pic_mode=yes continue ;; -prefer-non-pic) pic_mode=no continue ;; esac done objname=`$echo "X$obj" | $Xsed -e 's%^.*/%%'` xdir=`$echo "X$obj" | $Xsed -e 's%/[^/]*$%%'` if test "X$xdir" = "X$obj"; then xdir= else xdir=$xdir/ fi lobj=${xdir}$objdir/$objname if test -z "$base_compile"; then $echo "$modename: you must specify a compilation command" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi # Delete any leftover library objects. if test "$build_old_libs" = yes; then removelist="$obj $lobj $libobj ${libobj}T" else removelist="$lobj $libobj ${libobj}T" fi $run $rm $removelist trap "$run $rm $removelist; exit $EXIT_FAILURE" 1 2 15 # On Cygwin there's no "real" PIC flag so we must build both object types case $host_os in cygwin* | mingw* | pw32* | os2*) pic_mode=default ;; esac if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then # non-PIC code in shared libraries is not supported pic_mode=default fi # Calculate the filename of the output object if compiler does # not support -o with -c if test "$compiler_c_o" = no; then output_obj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\.[^.]*$%%'`.${objext} lockfile="$output_obj.lock" removelist="$removelist $output_obj $lockfile" trap "$run $rm $removelist; exit $EXIT_FAILURE" 1 2 15 else output_obj= need_locks=no lockfile= fi # Lock this critical section if it is needed # We use this script file to make the link, it avoids creating a new file if test "$need_locks" = yes; then until $run ln "$progpath" "$lockfile" 2>/dev/null; do $show "Waiting for $lockfile to be removed" sleep 2 done elif test "$need_locks" = warn; then if test -f "$lockfile"; then $echo "\ *** ERROR, $lockfile exists and contains: `cat $lockfile 2>/dev/null` This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $run $rm $removelist exit $EXIT_FAILURE fi $echo $srcfile > "$lockfile" fi if test -n "$fix_srcfile_path"; then eval srcfile=\"$fix_srcfile_path\" fi $run $rm "$libobj" "${libobj}T" # Create a libtool object file (analogous to a ".la" file), # but don't create it if we're doing a dry run. test -z "$run" && cat > ${libobj}T </dev/null`" != "X$srcfile"; then $echo "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $run $rm $removelist exit $EXIT_FAILURE fi # Just move the object if needed, then go on to compile the next one if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then $show "$mv $output_obj $lobj" if $run $mv $output_obj $lobj; then : else error=$? $run $rm $removelist exit $error fi fi # Append the name of the PIC object to the libtool object file. test -z "$run" && cat >> ${libobj}T <> ${libobj}T </dev/null`" != "X$srcfile"; then $echo "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $run $rm $removelist exit $EXIT_FAILURE fi # Just move the object if needed if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then $show "$mv $output_obj $obj" if $run $mv $output_obj $obj; then : else error=$? $run $rm $removelist exit $error fi fi # Append the name of the non-PIC object the libtool object file. # Only append if the libtool object file exists. test -z "$run" && cat >> ${libobj}T <> ${libobj}T <&2 fi if test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi else if test -z "$pic_flag" && test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi fi build_libtool_libs=no build_old_libs=yes prefer_static_libs=yes break ;; esac done # See if our shared archives depend on static archives. test -n "$old_archive_from_new_cmds" && build_old_libs=yes # Go through the arguments, transforming them on the way. while test "$#" -gt 0; do arg="$1" shift case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") qarg=\"`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`\" ### testsuite: skip nested quoting test ;; *) qarg=$arg ;; esac libtool_args="$libtool_args $qarg" # If the previous option needs an argument, assign it. if test -n "$prev"; then case $prev in output) compile_command="$compile_command @OUTPUT@" finalize_command="$finalize_command @OUTPUT@" ;; esac case $prev in dlfiles|dlprefiles) if test "$preload" = no; then # Add the symbol object into the linking commands. compile_command="$compile_command @SYMFILE@" finalize_command="$finalize_command @SYMFILE@" preload=yes fi case $arg in *.la | *.lo) ;; # We handle these cases below. force) if test "$dlself" = no; then dlself=needless export_dynamic=yes fi prev= continue ;; self) if test "$prev" = dlprefiles; then dlself=yes elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then dlself=yes else dlself=needless export_dynamic=yes fi prev= continue ;; *) if test "$prev" = dlfiles; then dlfiles="$dlfiles $arg" else dlprefiles="$dlprefiles $arg" fi prev= continue ;; esac ;; expsyms) export_symbols="$arg" if test ! -f "$arg"; then $echo "$modename: symbol file \`$arg' does not exist" exit $EXIT_FAILURE fi prev= continue ;; expsyms_regex) export_symbols_regex="$arg" prev= continue ;; inst_prefix) inst_prefix_dir="$arg" prev= continue ;; precious_regex) precious_files_regex="$arg" prev= continue ;; release) release="-$arg" prev= continue ;; objectlist) if test -f "$arg"; then save_arg=$arg moreargs= for fil in `cat $save_arg` do # moreargs="$moreargs $fil" arg=$fil # A libtool-controlled object. # Check to see that this really is a libtool object. if (${SED} -e '2q' $arg | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then pic_object= non_pic_object= # Read the .lo file # If there is no directory component, then add one. case $arg in */* | *\\*) . $arg ;; *) . ./$arg ;; esac if test -z "$pic_object" || \ test -z "$non_pic_object" || test "$pic_object" = none && \ test "$non_pic_object" = none; then $echo "$modename: cannot find name of object for \`$arg'" 1>&2 exit $EXIT_FAILURE fi # Extract subdirectory from the argument. xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` if test "X$xdir" = "X$arg"; then xdir= else xdir="$xdir/" fi if test "$pic_object" != none; then # Prepend the subdirectory the object is found in. pic_object="$xdir$pic_object" if test "$prev" = dlfiles; then if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then dlfiles="$dlfiles $pic_object" prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi # CHECK ME: I think I busted this. -Ossama if test "$prev" = dlprefiles; then # Preload the old-style object. dlprefiles="$dlprefiles $pic_object" prev= fi # A PIC object. libobjs="$libobjs $pic_object" arg="$pic_object" fi # Non-PIC object. if test "$non_pic_object" != none; then # Prepend the subdirectory the object is found in. non_pic_object="$xdir$non_pic_object" # A standard non-PIC object non_pic_objects="$non_pic_objects $non_pic_object" if test -z "$pic_object" || test "$pic_object" = none ; then arg="$non_pic_object" fi fi else # Only an error if not doing a dry-run. if test -z "$run"; then $echo "$modename: \`$arg' is not a valid libtool object" 1>&2 exit $EXIT_FAILURE else # Dry-run case. # Extract subdirectory from the argument. xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` if test "X$xdir" = "X$arg"; then xdir= else xdir="$xdir/" fi pic_object=`$echo "X${xdir}${objdir}/${arg}" | $Xsed -e "$lo2o"` non_pic_object=`$echo "X${xdir}${arg}" | $Xsed -e "$lo2o"` libobjs="$libobjs $pic_object" non_pic_objects="$non_pic_objects $non_pic_object" fi fi done else $echo "$modename: link input file \`$save_arg' does not exist" exit $EXIT_FAILURE fi arg=$save_arg prev= continue ;; rpath | xrpath) # We need an absolute path. case $arg in [\\/]* | [A-Za-z]:[\\/]*) ;; *) $echo "$modename: only absolute run-paths are allowed" 1>&2 exit $EXIT_FAILURE ;; esac if test "$prev" = rpath; then case "$rpath " in *" $arg "*) ;; *) rpath="$rpath $arg" ;; esac else case "$xrpath " in *" $arg "*) ;; *) xrpath="$xrpath $arg" ;; esac fi prev= continue ;; xcompiler) compiler_flags="$compiler_flags $qarg" prev= compile_command="$compile_command $qarg" finalize_command="$finalize_command $qarg" continue ;; xlinker) linker_flags="$linker_flags $qarg" compiler_flags="$compiler_flags $wl$qarg" prev= compile_command="$compile_command $wl$qarg" finalize_command="$finalize_command $wl$qarg" continue ;; xcclinker) linker_flags="$linker_flags $qarg" compiler_flags="$compiler_flags $qarg" prev= compile_command="$compile_command $qarg" finalize_command="$finalize_command $qarg" continue ;; shrext) shrext_cmds="$arg" prev= continue ;; *) eval "$prev=\"\$arg\"" prev= continue ;; esac fi # test -n "$prev" prevarg="$arg" case $arg in -all-static) if test -n "$link_static_flag"; then compile_command="$compile_command $link_static_flag" finalize_command="$finalize_command $link_static_flag" fi continue ;; -allow-undefined) # FIXME: remove this flag sometime in the future. $echo "$modename: \`-allow-undefined' is deprecated because it is the default" 1>&2 continue ;; -avoid-version) avoid_version=yes continue ;; -dlopen) prev=dlfiles continue ;; -dlpreopen) prev=dlprefiles continue ;; -export-dynamic) export_dynamic=yes continue ;; -export-symbols | -export-symbols-regex) if test -n "$export_symbols" || test -n "$export_symbols_regex"; then $echo "$modename: more than one -exported-symbols argument is not allowed" exit $EXIT_FAILURE fi if test "X$arg" = "X-export-symbols"; then prev=expsyms else prev=expsyms_regex fi continue ;; -inst-prefix-dir) prev=inst_prefix continue ;; # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* # so, if we see these flags be careful not to treat them like -L -L[A-Z][A-Z]*:*) case $with_gcc/$host in no/*-*-irix* | /*-*-irix*) compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" ;; esac continue ;; -L*) dir=`$echo "X$arg" | $Xsed -e 's/^-L//'` # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) absdir=`cd "$dir" && pwd` if test -z "$absdir"; then $echo "$modename: cannot determine absolute directory name of \`$dir'" 1>&2 exit $EXIT_FAILURE fi dir="$absdir" ;; esac case "$deplibs " in *" -L$dir "*) ;; *) deplibs="$deplibs -L$dir" lib_search_path="$lib_search_path $dir" ;; esac case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) case :$dllsearchpath: in *":$dir:"*) ;; *) dllsearchpath="$dllsearchpath:$dir";; esac ;; esac continue ;; -l*) if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then case $host in *-*-cygwin* | *-*-pw32* | *-*-beos*) # These systems don't actually have a C or math library (as such) continue ;; *-*-mingw* | *-*-os2*) # These systems don't actually have a C library (as such) test "X$arg" = "X-lc" && continue ;; *-*-openbsd* | *-*-freebsd*) # Do not include libc due to us having libc/libc_r. test "X$arg" = "X-lc" && continue ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C and math libraries are in the System framework deplibs="$deplibs -framework System" continue esac elif test "X$arg" = "X-lc_r"; then case $host in *-*-openbsd* | *-*-freebsd*) # Do not include libc_r directly, use -pthread flag. continue ;; esac fi deplibs="$deplibs $arg" continue ;; -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe) deplibs="$deplibs $arg" continue ;; -module) module=yes continue ;; # gcc -m* arguments should be passed to the linker via $compiler_flags # in order to pass architecture information to the linker # (e.g. 32 vs 64-bit). This may also be accomplished via -Wl,-mfoo # but this is not reliable with gcc because gcc may use -mfoo to # select a different linker, different libraries, etc, while # -Wl,-mfoo simply passes -mfoo to the linker. -m*) # Unknown arguments in both finalize_command and compile_command need # to be aesthetically quoted because they are evaled later. arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" if test "$with_gcc" = "yes" ; then compiler_flags="$compiler_flags $arg" fi continue ;; -shrext) prev=shrext continue ;; -no-fast-install) fast_install=no continue ;; -no-install) case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) # The PATH hackery in wrapper scripts is required on Windows # in order for the loader to find any dlls it needs. $echo "$modename: warning: \`-no-install' is ignored for $host" 1>&2 $echo "$modename: warning: assuming \`-no-fast-install' instead" 1>&2 fast_install=no ;; *) no_install=yes ;; esac continue ;; -no-undefined) allow_undefined=no continue ;; -objectlist) prev=objectlist continue ;; -o) prev=output ;; -precious-files-regex) prev=precious_regex continue ;; -release) prev=release continue ;; -rpath) prev=rpath continue ;; -R) prev=xrpath continue ;; -R*) dir=`$echo "X$arg" | $Xsed -e 's/^-R//'` # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) $echo "$modename: only absolute run-paths are allowed" 1>&2 exit $EXIT_FAILURE ;; esac case "$xrpath " in *" $dir "*) ;; *) xrpath="$xrpath $dir" ;; esac continue ;; -static) # The effects of -static are defined in a previous loop. # We used to do the same as -all-static on platforms that # didn't have a PIC flag, but the assumption that the effects # would be equivalent was wrong. It would break on at least # Digital Unix and AIX. continue ;; -thread-safe) thread_safe=yes continue ;; -version-info) prev=vinfo continue ;; -version-number) prev=vinfo vinfo_number=yes continue ;; -Wc,*) args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wc,//'` arg= save_ifs="$IFS"; IFS=',' for flag in $args; do IFS="$save_ifs" case $flag in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") flag="\"$flag\"" ;; esac arg="$arg $wl$flag" compiler_flags="$compiler_flags $flag" done IFS="$save_ifs" arg=`$echo "X$arg" | $Xsed -e "s/^ //"` ;; -Wl,*) args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wl,//'` arg= save_ifs="$IFS"; IFS=',' for flag in $args; do IFS="$save_ifs" case $flag in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") flag="\"$flag\"" ;; esac arg="$arg $wl$flag" compiler_flags="$compiler_flags $wl$flag" linker_flags="$linker_flags $flag" done IFS="$save_ifs" arg=`$echo "X$arg" | $Xsed -e "s/^ //"` ;; -Xcompiler) prev=xcompiler continue ;; -Xlinker) prev=xlinker continue ;; -XCClinker) prev=xcclinker continue ;; # Some other compiler flag. -* | +*) # Unknown arguments in both finalize_command and compile_command need # to be aesthetically quoted because they are evaled later. arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac ;; *.$objext) # A standard object. objs="$objs $arg" ;; *.lo) # A libtool-controlled object. # Check to see that this really is a libtool object. if (${SED} -e '2q' $arg | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then pic_object= non_pic_object= # Read the .lo file # If there is no directory component, then add one. case $arg in */* | *\\*) . $arg ;; *) . ./$arg ;; esac if test -z "$pic_object" || \ test -z "$non_pic_object" || test "$pic_object" = none && \ test "$non_pic_object" = none; then $echo "$modename: cannot find name of object for \`$arg'" 1>&2 exit $EXIT_FAILURE fi # Extract subdirectory from the argument. xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` if test "X$xdir" = "X$arg"; then xdir= else xdir="$xdir/" fi if test "$pic_object" != none; then # Prepend the subdirectory the object is found in. pic_object="$xdir$pic_object" if test "$prev" = dlfiles; then if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then dlfiles="$dlfiles $pic_object" prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi # CHECK ME: I think I busted this. -Ossama if test "$prev" = dlprefiles; then # Preload the old-style object. dlprefiles="$dlprefiles $pic_object" prev= fi # A PIC object. libobjs="$libobjs $pic_object" arg="$pic_object" fi # Non-PIC object. if test "$non_pic_object" != none; then # Prepend the subdirectory the object is found in. non_pic_object="$xdir$non_pic_object" # A standard non-PIC object non_pic_objects="$non_pic_objects $non_pic_object" if test -z "$pic_object" || test "$pic_object" = none ; then arg="$non_pic_object" fi fi else # Only an error if not doing a dry-run. if test -z "$run"; then $echo "$modename: \`$arg' is not a valid libtool object" 1>&2 exit $EXIT_FAILURE else # Dry-run case. # Extract subdirectory from the argument. xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` if test "X$xdir" = "X$arg"; then xdir= else xdir="$xdir/" fi pic_object=`$echo "X${xdir}${objdir}/${arg}" | $Xsed -e "$lo2o"` non_pic_object=`$echo "X${xdir}${arg}" | $Xsed -e "$lo2o"` libobjs="$libobjs $pic_object" non_pic_objects="$non_pic_objects $non_pic_object" fi fi ;; *.$libext) # An archive. deplibs="$deplibs $arg" old_deplibs="$old_deplibs $arg" continue ;; *.la) # A libtool-controlled library. if test "$prev" = dlfiles; then # This library was specified with -dlopen. dlfiles="$dlfiles $arg" prev= elif test "$prev" = dlprefiles; then # The library was specified with -dlpreopen. dlprefiles="$dlprefiles $arg" prev= else deplibs="$deplibs $arg" fi continue ;; # Some other compiler argument. *) # Unknown arguments in both finalize_command and compile_command need # to be aesthetically quoted because they are evaled later. arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac ;; esac # arg # Now actually substitute the argument into the commands. if test -n "$arg"; then compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" fi done # argument parsing loop if test -n "$prev"; then $echo "$modename: the \`$prevarg' option requires an argument" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then eval arg=\"$export_dynamic_flag_spec\" compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" fi oldlibs= # calculate the name of the file, without its directory outputname=`$echo "X$output" | $Xsed -e 's%^.*/%%'` libobjs_save="$libobjs" if test -n "$shlibpath_var"; then # get the directories listed in $shlibpath_var eval shlib_search_path=\`\$echo \"X\${$shlibpath_var}\" \| \$Xsed -e \'s/:/ /g\'\` else shlib_search_path= fi eval sys_lib_search_path=\"$sys_lib_search_path_spec\" eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" output_objdir=`$echo "X$output" | $Xsed -e 's%/[^/]*$%%'` if test "X$output_objdir" = "X$output"; then output_objdir="$objdir" else output_objdir="$output_objdir/$objdir" fi # Create the object directory. if test ! -d "$output_objdir"; then $show "$mkdir $output_objdir" $run $mkdir $output_objdir status=$? if test "$status" -ne 0 && test ! -d "$output_objdir"; then exit $status fi fi # Determine the type of output case $output in "") $echo "$modename: you must specify an output file" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE ;; *.$libext) linkmode=oldlib ;; *.lo | *.$objext) linkmode=obj ;; *.la) linkmode=lib ;; *) linkmode=prog ;; # Anything else should be a program. esac case $host in *cygwin* | *mingw* | *pw32*) # don't eliminate duplications in $postdeps and $predeps duplicate_compiler_generated_deps=yes ;; *) duplicate_compiler_generated_deps=$duplicate_deps ;; esac specialdeplibs= libs= # Find all interdependent deplibs by searching for libraries # that are linked more than once (e.g. -la -lb -la) for deplib in $deplibs; do if test "X$duplicate_deps" = "Xyes" ; then case "$libs " in *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; esac fi libs="$libs $deplib" done if test "$linkmode" = lib; then libs="$predeps $libs $compiler_lib_search_path $postdeps" # Compute libraries that are listed more than once in $predeps # $postdeps and mark them as special (i.e., whose duplicates are # not to be eliminated). pre_post_deps= if test "X$duplicate_compiler_generated_deps" = "Xyes" ; then for pre_post_dep in $predeps $postdeps; do case "$pre_post_deps " in *" $pre_post_dep "*) specialdeplibs="$specialdeplibs $pre_post_deps" ;; esac pre_post_deps="$pre_post_deps $pre_post_dep" done fi pre_post_deps= fi deplibs= newdependency_libs= newlib_search_path= need_relink=no # whether we're linking any uninstalled libtool libraries notinst_deplibs= # not-installed libtool libraries notinst_path= # paths that contain not-installed libtool libraries case $linkmode in lib) passes="conv link" for file in $dlfiles $dlprefiles; do case $file in *.la) ;; *) $echo "$modename: libraries can \`-dlopen' only libtool libraries: $file" 1>&2 exit $EXIT_FAILURE ;; esac done ;; prog) compile_deplibs= finalize_deplibs= alldeplibs=no newdlfiles= newdlprefiles= passes="conv scan dlopen dlpreopen link" ;; *) passes="conv" ;; esac for pass in $passes; do if test "$linkmode,$pass" = "lib,link" || test "$linkmode,$pass" = "prog,scan"; then libs="$deplibs" deplibs= fi if test "$linkmode" = prog; then case $pass in dlopen) libs="$dlfiles" ;; dlpreopen) libs="$dlprefiles" ;; link) libs="$deplibs %DEPLIBS% $dependency_libs" ;; esac fi if test "$pass" = dlopen; then # Collect dlpreopened libraries save_deplibs="$deplibs" deplibs= fi for deplib in $libs; do lib= found=no case $deplib in -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe) if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" fi continue ;; -l*) if test "$linkmode" != lib && test "$linkmode" != prog; then $echo "$modename: warning: \`-l' is ignored for archives/objects" 1>&2 continue fi if test "$pass" = conv; then deplibs="$deplib $deplibs" continue fi name=`$echo "X$deplib" | $Xsed -e 's/^-l//'` for searchdir in $newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path; do for search_ext in .la $std_shrext .so .a; do # Search the libtool library lib="$searchdir/lib${name}${search_ext}" if test -f "$lib"; then if test "$search_ext" = ".la"; then found=yes else found=no fi break 2 fi done done if test "$found" != yes; then # deplib doesn't seem to be a libtool library if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" fi continue else # deplib is a libtool library # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, # We need to do some special things here, and not later. if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then case " $predeps $postdeps " in *" $deplib "*) if (${SED} -e '2q' $lib | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then library_names= old_library= case $lib in */* | *\\*) . $lib ;; *) . ./$lib ;; esac for l in $old_library $library_names; do ll="$l" done if test "X$ll" = "X$old_library" ; then # only static version available found=no ladir=`$echo "X$lib" | $Xsed -e 's%/[^/]*$%%'` test "X$ladir" = "X$lib" && ladir="." lib=$ladir/$old_library if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" fi continue fi fi ;; *) ;; esac fi fi ;; # -l -L*) case $linkmode in lib) deplibs="$deplib $deplibs" test "$pass" = conv && continue newdependency_libs="$deplib $newdependency_libs" newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'` ;; prog) if test "$pass" = conv; then deplibs="$deplib $deplibs" continue fi if test "$pass" = scan; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'` ;; *) $echo "$modename: warning: \`-L' is ignored for archives/objects" 1>&2 ;; esac # linkmode continue ;; # -L -R*) if test "$pass" = link; then dir=`$echo "X$deplib" | $Xsed -e 's/^-R//'` # Make sure the xrpath contains only unique directories. case "$xrpath " in *" $dir "*) ;; *) xrpath="$xrpath $dir" ;; esac fi deplibs="$deplib $deplibs" continue ;; *.la) lib="$deplib" ;; *.$libext) if test "$pass" = conv; then deplibs="$deplib $deplibs" continue fi case $linkmode in lib) if test "$deplibs_check_method" != pass_all; then $echo $echo "*** Warning: Trying to link with static lib archive $deplib." $echo "*** I have the capability to make that library automatically link in when" $echo "*** you link to this library. But I can only do this if you have a" $echo "*** shared version of the library, which you do not appear to have" $echo "*** because the file extensions .$libext of this argument makes me believe" $echo "*** that it is just a static archive that I should not used here." else $echo $echo "*** Warning: Linking the shared library $output against the" $echo "*** static library $deplib is not portable!" deplibs="$deplib $deplibs" fi continue ;; prog) if test "$pass" != link; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi continue ;; esac # linkmode ;; # *.$libext *.lo | *.$objext) if test "$pass" = conv; then deplibs="$deplib $deplibs" elif test "$linkmode" = prog; then if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then # If there is no dlopen support or we're linking statically, # we need to preload. newdlprefiles="$newdlprefiles $deplib" compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else newdlfiles="$newdlfiles $deplib" fi fi continue ;; %DEPLIBS%) alldeplibs=yes continue ;; esac # case $deplib if test "$found" = yes || test -f "$lib"; then : else $echo "$modename: cannot find the library \`$lib'" 1>&2 exit $EXIT_FAILURE fi # Check to see that this really is a libtool archive. if (${SED} -e '2q' $lib | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : else $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 exit $EXIT_FAILURE fi ladir=`$echo "X$lib" | $Xsed -e 's%/[^/]*$%%'` test "X$ladir" = "X$lib" && ladir="." dlname= dlopen= dlpreopen= libdir= library_names= old_library= # If the library was installed with an old release of libtool, # it will not redefine variables installed, or shouldnotlink installed=yes shouldnotlink=no # Read the .la file case $lib in */* | *\\*) . $lib ;; *) . ./$lib ;; esac if test "$linkmode,$pass" = "lib,link" || test "$linkmode,$pass" = "prog,scan" || { test "$linkmode" != prog && test "$linkmode" != lib; }; then test -n "$dlopen" && dlfiles="$dlfiles $dlopen" test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen" fi if test "$pass" = conv; then # Only check for convenience libraries deplibs="$lib $deplibs" if test -z "$libdir"; then if test -z "$old_library"; then $echo "$modename: cannot find name of link library for \`$lib'" 1>&2 exit $EXIT_FAILURE fi # It is a libtool convenience library, so add in its objects. convenience="$convenience $ladir/$objdir/$old_library" old_convenience="$old_convenience $ladir/$objdir/$old_library" tmp_libs= for deplib in $dependency_libs; do deplibs="$deplib $deplibs" if test "X$duplicate_deps" = "Xyes" ; then case "$tmp_libs " in *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; esac fi tmp_libs="$tmp_libs $deplib" done elif test "$linkmode" != prog && test "$linkmode" != lib; then $echo "$modename: \`$lib' is not a convenience library" 1>&2 exit $EXIT_FAILURE fi continue fi # $pass = conv # Get the name of the library we link against. linklib= for l in $old_library $library_names; do linklib="$l" done if test -z "$linklib"; then $echo "$modename: cannot find name of link library for \`$lib'" 1>&2 exit $EXIT_FAILURE fi # This library was specified with -dlopen. if test "$pass" = dlopen; then if test -z "$libdir"; then $echo "$modename: cannot -dlopen a convenience library: \`$lib'" 1>&2 exit $EXIT_FAILURE fi if test -z "$dlname" || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then # If there is no dlname, no dlopen support or we're linking # statically, we need to preload. We also need to preload any # dependent libraries so libltdl's deplib preloader doesn't # bomb out in the load deplibs phase. dlprefiles="$dlprefiles $lib $dependency_libs" else newdlfiles="$newdlfiles $lib" fi continue fi # $pass = dlopen # We need an absolute path. case $ladir in [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;; *) abs_ladir=`cd "$ladir" && pwd` if test -z "$abs_ladir"; then $echo "$modename: warning: cannot determine absolute directory name of \`$ladir'" 1>&2 $echo "$modename: passing it literally to the linker, although it might fail" 1>&2 abs_ladir="$ladir" fi ;; esac laname=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` # Find the relevant object directory and library name. if test "X$installed" = Xyes; then if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then $echo "$modename: warning: library \`$lib' was moved." 1>&2 dir="$ladir" absdir="$abs_ladir" libdir="$abs_ladir" else dir="$libdir" absdir="$libdir" fi else dir="$ladir/$objdir" absdir="$abs_ladir/$objdir" # Remove this search path later notinst_path="$notinst_path $abs_ladir" fi # $installed = yes name=`$echo "X$laname" | $Xsed -e 's/\.la$//' -e 's/^lib//'` # This library was specified with -dlpreopen. if test "$pass" = dlpreopen; then if test -z "$libdir"; then $echo "$modename: cannot -dlpreopen a convenience library: \`$lib'" 1>&2 exit $EXIT_FAILURE fi # Prefer using a static library (so that no silly _DYNAMIC symbols # are required to link). if test -n "$old_library"; then newdlprefiles="$newdlprefiles $dir/$old_library" # Otherwise, use the dlname, so that lt_dlopen finds it. elif test -n "$dlname"; then newdlprefiles="$newdlprefiles $dir/$dlname" else newdlprefiles="$newdlprefiles $dir/$linklib" fi fi # $pass = dlpreopen if test -z "$libdir"; then # Link the convenience library if test "$linkmode" = lib; then deplibs="$dir/$old_library $deplibs" elif test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$dir/$old_library $compile_deplibs" finalize_deplibs="$dir/$old_library $finalize_deplibs" else deplibs="$lib $deplibs" # used for prog,scan pass fi continue fi if test "$linkmode" = prog && test "$pass" != link; then newlib_search_path="$newlib_search_path $ladir" deplibs="$lib $deplibs" linkalldeplibs=no if test "$link_all_deplibs" != no || test -z "$library_names" || test "$build_libtool_libs" = no; then linkalldeplibs=yes fi tmp_libs= for deplib in $dependency_libs; do case $deplib in -L*) newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`;; ### testsuite: skip nested quoting test esac # Need to link against all dependency_libs? if test "$linkalldeplibs" = yes; then deplibs="$deplib $deplibs" else # Need to hardcode shared library paths # or/and link against static libraries newdependency_libs="$deplib $newdependency_libs" fi if test "X$duplicate_deps" = "Xyes" ; then case "$tmp_libs " in *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; esac fi tmp_libs="$tmp_libs $deplib" done # for deplib continue fi # $linkmode = prog... if test "$linkmode,$pass" = "prog,link"; then if test -n "$library_names" && { test "$prefer_static_libs" = no || test -z "$old_library"; }; then # We need to hardcode the library path if test -n "$shlibpath_var"; then # Make sure the rpath contains only unique directories. case "$temp_rpath " in *" $dir "*) ;; *" $absdir "*) ;; *) temp_rpath="$temp_rpath $dir" ;; esac fi # Hardcode the library path. # Skip directories that are in the system default run-time # search path. case " $sys_lib_dlsearch_path " in *" $absdir "*) ;; *) case "$compile_rpath " in *" $absdir "*) ;; *) compile_rpath="$compile_rpath $absdir" esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) finalize_rpath="$finalize_rpath $libdir" esac ;; esac fi # $linkmode,$pass = prog,link... if test "$alldeplibs" = yes && { test "$deplibs_check_method" = pass_all || { test "$build_libtool_libs" = yes && test -n "$library_names"; }; }; then # We only need to search for static libraries continue fi fi link_static=no # Whether the deplib will be linked statically if test -n "$library_names" && { test "$prefer_static_libs" = no || test -z "$old_library"; }; then if test "$installed" = no; then notinst_deplibs="$notinst_deplibs $lib" need_relink=yes fi # This is a shared library # Warn about portability, can't link against -module's on # some systems (darwin) if test "$shouldnotlink" = yes && test "$pass" = link ; then $echo if test "$linkmode" = prog; then $echo "*** Warning: Linking the executable $output against the loadable module" else $echo "*** Warning: Linking the shared library $output against the loadable module" fi $echo "*** $linklib is not portable!" fi if test "$linkmode" = lib && test "$hardcode_into_libs" = yes; then # Hardcode the library path. # Skip directories that are in the system default run-time # search path. case " $sys_lib_dlsearch_path " in *" $absdir "*) ;; *) case "$compile_rpath " in *" $absdir "*) ;; *) compile_rpath="$compile_rpath $absdir" esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) finalize_rpath="$finalize_rpath $libdir" esac ;; esac fi if test -n "$old_archive_from_expsyms_cmds"; then # figure out the soname set dummy $library_names realname="$2" shift; shift libname=`eval \\$echo \"$libname_spec\"` # use dlname if we got it. it's perfectly good, no? if test -n "$dlname"; then soname="$dlname" elif test -n "$soname_spec"; then # bleh windows case $host in *cygwin* | mingw*) major=`expr $current - $age` versuffix="-$major" ;; esac eval soname=\"$soname_spec\" else soname="$realname" fi # Make a new name for the extract_expsyms_cmds to use soroot="$soname" soname=`$echo $soroot | ${SED} -e 's/^.*\///'` newlib="libimp-`$echo $soname | ${SED} 's/^lib//;s/\.dll$//'`.a" # If the library has no export list, then create one now if test -f "$output_objdir/$soname-def"; then : else $show "extracting exported symbol list from \`$soname'" save_ifs="$IFS"; IFS='~' cmds=$extract_expsyms_cmds for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" fi # Create $newlib if test -f "$output_objdir/$newlib"; then :; else $show "generating import library for \`$soname'" save_ifs="$IFS"; IFS='~' cmds=$old_archive_from_expsyms_cmds for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" fi # make sure the library variables are pointing to the new library dir=$output_objdir linklib=$newlib fi # test -n "$old_archive_from_expsyms_cmds" if test "$linkmode" = prog || test "$mode" != relink; then add_shlibpath= add_dir= add= lib_linked=yes case $hardcode_action in immediate | unsupported) if test "$hardcode_direct" = no; then add="$dir/$linklib" case $host in *-*-sco3.2v5* ) add_dir="-L$dir" ;; *-*-darwin* ) # if the lib is a module then we can not link against # it, someone is ignoring the new warnings I added if /usr/bin/file -L $add 2> /dev/null | $EGREP "bundle" >/dev/null ; then $echo "** Warning, lib $linklib is a module, not a shared library" if test -z "$old_library" ; then $echo $echo "** And there doesn't seem to be a static archive available" $echo "** The link will probably fail, sorry" else add="$dir/$old_library" fi fi esac elif test "$hardcode_minus_L" = no; then case $host in *-*-sunos*) add_shlibpath="$dir" ;; esac add_dir="-L$dir" add="-l$name" elif test "$hardcode_shlibpath_var" = no; then add_shlibpath="$dir" add="-l$name" else lib_linked=no fi ;; relink) if test "$hardcode_direct" = yes; then add="$dir/$linklib" elif test "$hardcode_minus_L" = yes; then add_dir="-L$dir" # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case "$libdir" in [\\/]*) add_dir="$add_dir -L$inst_prefix_dir$libdir" ;; esac fi add="-l$name" elif test "$hardcode_shlibpath_var" = yes; then add_shlibpath="$dir" add="-l$name" else lib_linked=no fi ;; *) lib_linked=no ;; esac if test "$lib_linked" != yes; then $echo "$modename: configuration error: unsupported hardcode properties" exit $EXIT_FAILURE fi if test -n "$add_shlibpath"; then case :$compile_shlibpath: in *":$add_shlibpath:"*) ;; *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;; esac fi if test "$linkmode" = prog; then test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" test -n "$add" && compile_deplibs="$add $compile_deplibs" else test -n "$add_dir" && deplibs="$add_dir $deplibs" test -n "$add" && deplibs="$add $deplibs" if test "$hardcode_direct" != yes && \ test "$hardcode_minus_L" != yes && \ test "$hardcode_shlibpath_var" = yes; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; esac fi fi fi if test "$linkmode" = prog || test "$mode" = relink; then add_shlibpath= add_dir= add= # Finalize command for both is simple: just hardcode it. if test "$hardcode_direct" = yes; then add="$libdir/$linklib" elif test "$hardcode_minus_L" = yes; then add_dir="-L$libdir" add="-l$name" elif test "$hardcode_shlibpath_var" = yes; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; esac add="-l$name" elif test "$hardcode_automatic" = yes; then if test -n "$inst_prefix_dir" && test -f "$inst_prefix_dir$libdir/$linklib" ; then add="$inst_prefix_dir$libdir/$linklib" else add="$libdir/$linklib" fi else # We cannot seem to hardcode it, guess we'll fake it. add_dir="-L$libdir" # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case "$libdir" in [\\/]*) add_dir="$add_dir -L$inst_prefix_dir$libdir" ;; esac fi add="-l$name" fi if test "$linkmode" = prog; then test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" test -n "$add" && finalize_deplibs="$add $finalize_deplibs" else test -n "$add_dir" && deplibs="$add_dir $deplibs" test -n "$add" && deplibs="$add $deplibs" fi fi elif test "$linkmode" = prog; then # Here we assume that one of hardcode_direct or hardcode_minus_L # is not unsupported. This is valid on all known static and # shared platforms. if test "$hardcode_direct" != unsupported; then test -n "$old_library" && linklib="$old_library" compile_deplibs="$dir/$linklib $compile_deplibs" finalize_deplibs="$dir/$linklib $finalize_deplibs" else compile_deplibs="-l$name -L$dir $compile_deplibs" finalize_deplibs="-l$name -L$dir $finalize_deplibs" fi elif test "$build_libtool_libs" = yes; then # Not a shared library if test "$deplibs_check_method" != pass_all; then # We're trying link a shared library against a static one # but the system doesn't support it. # Just print a warning and add the library to dependency_libs so # that the program can be linked against the static library. $echo $echo "*** Warning: This system can not link to static lib archive $lib." $echo "*** I have the capability to make that library automatically link in when" $echo "*** you link to this library. But I can only do this if you have a" $echo "*** shared version of the library, which you do not appear to have." if test "$module" = yes; then $echo "*** But as you try to build a module library, libtool will still create " $echo "*** a static module, that should work as long as the dlopening application" $echo "*** is linked with the -dlopen flag to resolve symbols at runtime." if test -z "$global_symbol_pipe"; then $echo $echo "*** However, this would only work if libtool was able to extract symbol" $echo "*** lists from a program, using \`nm' or equivalent, but libtool could" $echo "*** not find such a program. So, this module is probably useless." $echo "*** \`nm' from GNU binutils and a full rebuild may help." fi if test "$build_old_libs" = no; then build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi fi else convenience="$convenience $dir/$old_library" old_convenience="$old_convenience $dir/$old_library" deplibs="$dir/$old_library $deplibs" link_static=yes fi fi # link shared/static library? if test "$linkmode" = lib; then if test -n "$dependency_libs" && { test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes || test "$link_static" = yes; }; then # Extract -R from dependency_libs temp_deplibs= for libdir in $dependency_libs; do case $libdir in -R*) temp_xrpath=`$echo "X$libdir" | $Xsed -e 's/^-R//'` case " $xrpath " in *" $temp_xrpath "*) ;; *) xrpath="$xrpath $temp_xrpath";; esac;; *) temp_deplibs="$temp_deplibs $libdir";; esac done dependency_libs="$temp_deplibs" fi newlib_search_path="$newlib_search_path $absdir" # Link against this library test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs" # ... and its dependency_libs tmp_libs= for deplib in $dependency_libs; do newdependency_libs="$deplib $newdependency_libs" if test "X$duplicate_deps" = "Xyes" ; then case "$tmp_libs " in *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; esac fi tmp_libs="$tmp_libs $deplib" done if test "$link_all_deplibs" != no; then # Add the search paths of all dependency libraries for deplib in $dependency_libs; do case $deplib in -L*) path="$deplib" ;; *.la) dir=`$echo "X$deplib" | $Xsed -e 's%/[^/]*$%%'` test "X$dir" = "X$deplib" && dir="." # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; *) absdir=`cd "$dir" && pwd` if test -z "$absdir"; then $echo "$modename: warning: cannot determine absolute directory name of \`$dir'" 1>&2 absdir="$dir" fi ;; esac if grep "^installed=no" $deplib > /dev/null; then path="$absdir/$objdir" else eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` if test -z "$libdir"; then $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2 exit $EXIT_FAILURE fi if test "$absdir" != "$libdir"; then $echo "$modename: warning: \`$deplib' seems to be moved" 1>&2 fi path="$absdir" fi depdepl= case $host in *-*-darwin*) # we do not want to link against static libs, # but need to link against shared eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` if test -n "$deplibrary_names" ; then for tmp in $deplibrary_names ; do depdepl=$tmp done if test -f "$path/$depdepl" ; then depdepl="$path/$depdepl" fi # do not add paths which are already there case " $newlib_search_path " in *" $path "*) ;; *) newlib_search_path="$newlib_search_path $path";; esac fi path="" ;; *) path="-L$path" ;; esac ;; -l*) case $host in *-*-darwin*) # Again, we only want to link against shared libraries eval tmp_libs=`$echo "X$deplib" | $Xsed -e "s,^\-l,,"` for tmp in $newlib_search_path ; do if test -f "$tmp/lib$tmp_libs.dylib" ; then eval depdepl="$tmp/lib$tmp_libs.dylib" break fi done path="" ;; *) continue ;; esac ;; *) continue ;; esac case " $deplibs " in *" $depdepl "*) ;; *) deplibs="$depdepl $deplibs" ;; esac case " $deplibs " in *" $path "*) ;; *) deplibs="$deplibs $path" ;; esac done fi # link_all_deplibs != no fi # linkmode = lib done # for deplib in $libs dependency_libs="$newdependency_libs" if test "$pass" = dlpreopen; then # Link the dlpreopened libraries before other libraries for deplib in $save_deplibs; do deplibs="$deplib $deplibs" done fi if test "$pass" != dlopen; then if test "$pass" != conv; then # Make sure lib_search_path contains only unique directories. lib_search_path= for dir in $newlib_search_path; do case "$lib_search_path " in *" $dir "*) ;; *) lib_search_path="$lib_search_path $dir" ;; esac done newlib_search_path= fi if test "$linkmode,$pass" != "prog,link"; then vars="deplibs" else vars="compile_deplibs finalize_deplibs" fi for var in $vars dependency_libs; do # Add libraries to $var in reverse order eval tmp_libs=\"\$$var\" new_libs= for deplib in $tmp_libs; do # FIXME: Pedantically, this is the right thing to do, so # that some nasty dependency loop isn't accidentally # broken: #new_libs="$deplib $new_libs" # Pragmatically, this seems to cause very few problems in # practice: case $deplib in -L*) new_libs="$deplib $new_libs" ;; -R*) ;; *) # And here is the reason: when a library appears more # than once as an explicit dependence of a library, or # is implicitly linked in more than once by the # compiler, it is considered special, and multiple # occurrences thereof are not removed. Compare this # with having the same library being listed as a # dependency of multiple other libraries: in this case, # we know (pedantically, we assume) the library does not # need to be listed more than once, so we keep only the # last copy. This is not always right, but it is rare # enough that we require users that really mean to play # such unportable linking tricks to link the library # using -Wl,-lname, so that libtool does not consider it # for duplicate removal. case " $specialdeplibs " in *" $deplib "*) new_libs="$deplib $new_libs" ;; *) case " $new_libs " in *" $deplib "*) ;; *) new_libs="$deplib $new_libs" ;; esac ;; esac ;; esac done tmp_libs= for deplib in $new_libs; do case $deplib in -L*) case " $tmp_libs " in *" $deplib "*) ;; *) tmp_libs="$tmp_libs $deplib" ;; esac ;; *) tmp_libs="$tmp_libs $deplib" ;; esac done eval $var=\"$tmp_libs\" done # for var fi # Last step: remove runtime libs from dependency_libs # (they stay in deplibs) tmp_libs= for i in $dependency_libs ; do case " $predeps $postdeps $compiler_lib_search_path " in *" $i "*) i="" ;; esac if test -n "$i" ; then tmp_libs="$tmp_libs $i" fi done dependency_libs=$tmp_libs done # for pass if test "$linkmode" = prog; then dlfiles="$newdlfiles" dlprefiles="$newdlprefiles" fi case $linkmode in oldlib) if test -n "$deplibs"; then $echo "$modename: warning: \`-l' and \`-L' are ignored for archives" 1>&2 fi if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then $echo "$modename: warning: \`-dlopen' is ignored for archives" 1>&2 fi if test -n "$rpath"; then $echo "$modename: warning: \`-rpath' is ignored for archives" 1>&2 fi if test -n "$xrpath"; then $echo "$modename: warning: \`-R' is ignored for archives" 1>&2 fi if test -n "$vinfo"; then $echo "$modename: warning: \`-version-info/-version-number' is ignored for archives" 1>&2 fi if test -n "$release"; then $echo "$modename: warning: \`-release' is ignored for archives" 1>&2 fi if test -n "$export_symbols" || test -n "$export_symbols_regex"; then $echo "$modename: warning: \`-export-symbols' is ignored for archives" 1>&2 fi # Now set the variables for building old libraries. build_libtool_libs=no oldlibs="$output" objs="$objs$old_deplibs" ;; lib) # Make sure we only generate libraries of the form `libNAME.la'. case $outputname in lib*) name=`$echo "X$outputname" | $Xsed -e 's/\.la$//' -e 's/^lib//'` eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" ;; *) if test "$module" = no; then $echo "$modename: libtool library \`$output' must begin with \`lib'" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi if test "$need_lib_prefix" != no; then # Add the "lib" prefix for modules if required name=`$echo "X$outputname" | $Xsed -e 's/\.la$//'` eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" else libname=`$echo "X$outputname" | $Xsed -e 's/\.la$//'` fi ;; esac if test -n "$objs"; then if test "$deplibs_check_method" != pass_all; then $echo "$modename: cannot build libtool library \`$output' from non-libtool objects on this host:$objs" 2>&1 exit $EXIT_FAILURE else $echo $echo "*** Warning: Linking the shared library $output against the non-libtool" $echo "*** objects $objs is not portable!" libobjs="$libobjs $objs" fi fi if test "$dlself" != no; then $echo "$modename: warning: \`-dlopen self' is ignored for libtool libraries" 1>&2 fi set dummy $rpath if test "$#" -gt 2; then $echo "$modename: warning: ignoring multiple \`-rpath's for a libtool library" 1>&2 fi install_libdir="$2" oldlibs= if test -z "$rpath"; then if test "$build_libtool_libs" = yes; then # Building a libtool convenience library. # Some compilers have problems with a `.al' extension so # convenience libraries should have the same extension an # archive normally would. oldlibs="$output_objdir/$libname.$libext $oldlibs" build_libtool_libs=convenience build_old_libs=yes fi if test -n "$vinfo"; then $echo "$modename: warning: \`-version-info/-version-number' is ignored for convenience libraries" 1>&2 fi if test -n "$release"; then $echo "$modename: warning: \`-release' is ignored for convenience libraries" 1>&2 fi else # Parse the version information argument. save_ifs="$IFS"; IFS=':' set dummy $vinfo 0 0 0 IFS="$save_ifs" if test -n "$8"; then $echo "$modename: too many parameters to \`-version-info'" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi # convert absolute version numbers to libtool ages # this retains compatibility with .la files and attempts # to make the code below a bit more comprehensible case $vinfo_number in yes) number_major="$2" number_minor="$3" number_revision="$4" # # There are really only two kinds -- those that # use the current revision as the major version # and those that subtract age and use age as # a minor version. But, then there is irix # which has an extra 1 added just for fun # case $version_type in darwin|linux|osf|windows) current=`expr $number_major + $number_minor` age="$number_minor" revision="$number_revision" ;; freebsd-aout|freebsd-elf|sunos) current="$number_major" revision="$number_minor" age="0" ;; irix|nonstopux) current=`expr $number_major + $number_minor - 1` age="$number_minor" revision="$number_minor" ;; esac ;; no) current="$2" revision="$3" age="$4" ;; esac # Check that each of the things are valid numbers. case $current in [0-9]*) ;; *) $echo "$modename: CURRENT \`$current' is not a nonnegative integer" 1>&2 $echo "$modename: \`$vinfo' is not valid version information" 1>&2 exit $EXIT_FAILURE ;; esac case $revision in [0-9]*) ;; *) $echo "$modename: REVISION \`$revision' is not a nonnegative integer" 1>&2 $echo "$modename: \`$vinfo' is not valid version information" 1>&2 exit $EXIT_FAILURE ;; esac case $age in [0-9]*) ;; *) $echo "$modename: AGE \`$age' is not a nonnegative integer" 1>&2 $echo "$modename: \`$vinfo' is not valid version information" 1>&2 exit $EXIT_FAILURE ;; esac if test "$age" -gt "$current"; then $echo "$modename: AGE \`$age' is greater than the current interface number \`$current'" 1>&2 $echo "$modename: \`$vinfo' is not valid version information" 1>&2 exit $EXIT_FAILURE fi # Calculate the version variables. major= versuffix= verstring= case $version_type in none) ;; darwin) # Like Linux, but with the current version available in # verstring for coding it into the library header major=.`expr $current - $age` versuffix="$major.$age.$revision" # Darwin ld doesn't like 0 for these options... minor_current=`expr $current + 1` verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" ;; freebsd-aout) major=".$current" versuffix=".$current.$revision"; ;; freebsd-elf) major=".$current" versuffix=".$current"; ;; irix | nonstopux) major=`expr $current - $age + 1` case $version_type in nonstopux) verstring_prefix=nonstopux ;; *) verstring_prefix=sgi ;; esac verstring="$verstring_prefix$major.$revision" # Add in all the interfaces that we are compatible with. loop=$revision while test "$loop" -ne 0; do iface=`expr $revision - $loop` loop=`expr $loop - 1` verstring="$verstring_prefix$major.$iface:$verstring" done # Before this point, $major must not contain `.'. major=.$major versuffix="$major.$revision" ;; linux) major=.`expr $current - $age` versuffix="$major.$age.$revision" ;; osf) major=.`expr $current - $age` versuffix=".$current.$age.$revision" verstring="$current.$age.$revision" # Add in all the interfaces that we are compatible with. loop=$age while test "$loop" -ne 0; do iface=`expr $current - $loop` loop=`expr $loop - 1` verstring="$verstring:${iface}.0" done # Make executables depend on our current version. verstring="$verstring:${current}.0" ;; sunos) major=".$current" versuffix=".$current.$revision" ;; windows) # Use '-' rather than '.', since we only want one # extension on DOS 8.3 filesystems. major=`expr $current - $age` versuffix="-$major" ;; *) $echo "$modename: unknown library version type \`$version_type'" 1>&2 $echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2 exit $EXIT_FAILURE ;; esac # Clear the version info if we defaulted, and they specified a release. if test -z "$vinfo" && test -n "$release"; then major= case $version_type in darwin) # we can't check for "0.0" in archive_cmds due to quoting # problems, so we reset it completely verstring= ;; *) verstring="0.0" ;; esac if test "$need_version" = no; then versuffix= else versuffix=".0.0" fi fi # Remove version info from name if versioning should be avoided if test "$avoid_version" = yes && test "$need_version" = no; then major= versuffix= verstring="" fi # Check to see if the archive will have undefined symbols. if test "$allow_undefined" = yes; then if test "$allow_undefined_flag" = unsupported; then $echo "$modename: warning: undefined symbols not allowed in $host shared libraries" 1>&2 build_libtool_libs=no build_old_libs=yes fi else # Don't allow undefined symbols. allow_undefined_flag="$no_undefined_flag" fi fi if test "$mode" != relink; then # Remove our outputs, but don't remove object files since they # may have been created when compiling PIC objects. removelist= tempremovelist=`$echo "$output_objdir/*"` for p in $tempremovelist; do case $p in *.$objext) ;; $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*) if test "X$precious_files_regex" != "X"; then if echo $p | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 then continue fi fi removelist="$removelist $p" ;; *) ;; esac done if test -n "$removelist"; then $show "${rm}r $removelist" $run ${rm}r $removelist fi fi # Now set the variables for building old libraries. if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then oldlibs="$oldlibs $output_objdir/$libname.$libext" # Transform .lo files to .o files. oldobjs="$objs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP` fi # Eliminate all temporary directories. for path in $notinst_path; do lib_search_path=`$echo "$lib_search_path " | ${SED} -e 's% $path % %g'` deplibs=`$echo "$deplibs " | ${SED} -e 's% -L$path % %g'` dependency_libs=`$echo "$dependency_libs " | ${SED} -e 's% -L$path % %g'` done if test -n "$xrpath"; then # If the user specified any rpath flags, then add them. temp_xrpath= for libdir in $xrpath; do temp_xrpath="$temp_xrpath -R$libdir" case "$finalize_rpath " in *" $libdir "*) ;; *) finalize_rpath="$finalize_rpath $libdir" ;; esac done if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then dependency_libs="$temp_xrpath $dependency_libs" fi fi # Make sure dlfiles contains only unique files that won't be dlpreopened old_dlfiles="$dlfiles" dlfiles= for lib in $old_dlfiles; do case " $dlprefiles $dlfiles " in *" $lib "*) ;; *) dlfiles="$dlfiles $lib" ;; esac done # Make sure dlprefiles contains only unique files old_dlprefiles="$dlprefiles" dlprefiles= for lib in $old_dlprefiles; do case "$dlprefiles " in *" $lib "*) ;; *) dlprefiles="$dlprefiles $lib" ;; esac done if test "$build_libtool_libs" = yes; then if test -n "$rpath"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos*) # these systems don't actually have a c library (as such)! ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C library is in the System framework deplibs="$deplibs -framework System" ;; *-*-netbsd*) # Don't link with libc until the a.out ld.so is fixed. ;; *-*-openbsd* | *-*-freebsd*) # Do not include libc due to us having libc/libc_r. test "X$arg" = "X-lc" && continue ;; *) # Add libc to deplibs on all other systems if necessary. if test "$build_libtool_need_lc" = "yes"; then deplibs="$deplibs -lc" fi ;; esac fi # Transform deplibs into only deplibs that can be linked in shared. name_save=$name libname_save=$libname release_save=$release versuffix_save=$versuffix major_save=$major # I'm not sure if I'm treating the release correctly. I think # release should show up in the -l (ie -lgmp5) so we don't want to # add it in twice. Is that correct? release="" versuffix="" major="" newdeplibs= droppeddeps=no case $deplibs_check_method in pass_all) # Don't check for shared/static. Everything works. # This might be a little naive. We might want to check # whether the library exists or not. But this is on # osf3 & osf4 and I'm not really sure... Just # implementing what was already the behavior. newdeplibs=$deplibs ;; test_compile) # This code stresses the "libraries are programs" paradigm to its # limits. Maybe even breaks it. We compile a program, linking it # against the deplibs as a proxy for the library. Then we can check # whether they linked in statically or dynamically with ldd. $rm conftest.c cat > conftest.c </dev/null` for potent_lib in $potential_libs; do # Follow soft links. if ls -lLd "$potent_lib" 2>/dev/null \ | grep " -> " >/dev/null; then continue fi # The statement above tries to avoid entering an # endless loop below, in case of cyclic links. # We might still enter an endless loop, since a link # loop can be closed while we follow links, # but so what? potlib="$potent_lib" while test -h "$potlib" 2>/dev/null; do potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'` case $potliblink in [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; *) potlib=`$echo "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";; esac done if eval $file_magic_cmd \"\$potlib\" 2>/dev/null \ | ${SED} 10q \ | $EGREP "$file_magic_regex" > /dev/null; then newdeplibs="$newdeplibs $a_deplib" a_deplib="" break 2 fi done done fi if test -n "$a_deplib" ; then droppeddeps=yes $echo $echo "*** Warning: linker path does not have real file for library $a_deplib." $echo "*** I have the capability to make that library automatically link in when" $echo "*** you link to this library. But I can only do this if you have a" $echo "*** shared version of the library, which you do not appear to have" $echo "*** because I did check the linker path looking for a file starting" if test -z "$potlib" ; then $echo "*** with $libname but no candidates were found. (...for file magic test)" else $echo "*** with $libname and none of the candidates passed a file format test" $echo "*** using a file magic. Last file checked: $potlib" fi fi else # Add a -L argument. newdeplibs="$newdeplibs $a_deplib" fi done # Gone through all deplibs. ;; match_pattern*) set dummy $deplibs_check_method match_pattern_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"` for a_deplib in $deplibs; do name="`expr $a_deplib : '-l\(.*\)'`" # If $name is empty we are operating on a -L argument. if test -n "$name" && test "$name" != "0"; then if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then case " $predeps $postdeps " in *" $a_deplib "*) newdeplibs="$newdeplibs $a_deplib" a_deplib="" ;; esac fi if test -n "$a_deplib" ; then libname=`eval \\$echo \"$libname_spec\"` for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do potential_libs=`ls $i/$libname[.-]* 2>/dev/null` for potent_lib in $potential_libs; do potlib="$potent_lib" # see symlink-check above in file_magic test if eval $echo \"$potent_lib\" 2>/dev/null \ | ${SED} 10q \ | $EGREP "$match_pattern_regex" > /dev/null; then newdeplibs="$newdeplibs $a_deplib" a_deplib="" break 2 fi done done fi if test -n "$a_deplib" ; then droppeddeps=yes $echo $echo "*** Warning: linker path does not have real file for library $a_deplib." $echo "*** I have the capability to make that library automatically link in when" $echo "*** you link to this library. But I can only do this if you have a" $echo "*** shared version of the library, which you do not appear to have" $echo "*** because I did check the linker path looking for a file starting" if test -z "$potlib" ; then $echo "*** with $libname but no candidates were found. (...for regex pattern test)" else $echo "*** with $libname and none of the candidates passed a file format test" $echo "*** using a regex pattern. Last file checked: $potlib" fi fi else # Add a -L argument. newdeplibs="$newdeplibs $a_deplib" fi done # Gone through all deplibs. ;; none | unknown | *) newdeplibs="" tmp_deplibs=`$echo "X $deplibs" | $Xsed -e 's/ -lc$//' \ -e 's/ -[LR][^ ]*//g'` if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then for i in $predeps $postdeps ; do # can't use Xsed below, because $i might contain '/' tmp_deplibs=`$echo "X $tmp_deplibs" | ${SED} -e "1s,^X,," -e "s,$i,,"` done fi if $echo "X $tmp_deplibs" | $Xsed -e 's/[ ]//g' \ | grep . >/dev/null; then $echo if test "X$deplibs_check_method" = "Xnone"; then $echo "*** Warning: inter-library dependencies are not supported in this platform." else $echo "*** Warning: inter-library dependencies are not known to be supported." fi $echo "*** All declared inter-library dependencies are being dropped." droppeddeps=yes fi ;; esac versuffix=$versuffix_save major=$major_save release=$release_save libname=$libname_save name=$name_save case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library is the System framework newdeplibs=`$echo "X $newdeplibs" | $Xsed -e 's/ -lc / -framework System /'` ;; esac if test "$droppeddeps" = yes; then if test "$module" = yes; then $echo $echo "*** Warning: libtool could not satisfy all declared inter-library" $echo "*** dependencies of module $libname. Therefore, libtool will create" $echo "*** a static module, that should work as long as the dlopening" $echo "*** application is linked with the -dlopen flag." if test -z "$global_symbol_pipe"; then $echo $echo "*** However, this would only work if libtool was able to extract symbol" $echo "*** lists from a program, using \`nm' or equivalent, but libtool could" $echo "*** not find such a program. So, this module is probably useless." $echo "*** \`nm' from GNU binutils and a full rebuild may help." fi if test "$build_old_libs" = no; then oldlibs="$output_objdir/$libname.$libext" build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi else $echo "*** The inter-library dependencies that have been dropped here will be" $echo "*** automatically added whenever a program is linked with this library" $echo "*** or is declared to -dlopen it." if test "$allow_undefined" = no; then $echo $echo "*** Since this library must not contain undefined symbols," $echo "*** because either the platform does not support them or" $echo "*** it was explicitly requested with -no-undefined," $echo "*** libtool will only create a static version of it." if test "$build_old_libs" = no; then oldlibs="$output_objdir/$libname.$libext" build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi fi fi fi # Done checking deplibs! deplibs=$newdeplibs fi # All the library-specific variables (install_libdir is set above). library_names= old_library= dlname= # Test again, we may have decided not to build it any more if test "$build_libtool_libs" = yes; then if test "$hardcode_into_libs" = yes; then # Hardcode the library paths hardcode_libdirs= dep_rpath= rpath="$finalize_rpath" test "$mode" != relink && rpath="$compile_rpath$rpath" for libdir in $rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" dep_rpath="$dep_rpath $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) perm_rpath="$perm_rpath $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" if test -n "$hardcode_libdir_flag_spec_ld"; then eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\" else eval dep_rpath=\"$hardcode_libdir_flag_spec\" fi fi if test -n "$runpath_var" && test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do rpath="$rpath$dir:" done eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" fi test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" fi shlibpath="$finalize_shlibpath" test "$mode" != relink && shlibpath="$compile_shlibpath$shlibpath" if test -n "$shlibpath"; then eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" fi # Get the real and link names of the library. eval shared_ext=\"$shrext_cmds\" eval library_names=\"$library_names_spec\" set dummy $library_names realname="$2" shift; shift if test -n "$soname_spec"; then eval soname=\"$soname_spec\" else soname="$realname" fi if test -z "$dlname"; then dlname=$soname fi lib="$output_objdir/$realname" for link do linknames="$linknames $link" done # Use standard objects if they are pic test -z "$pic_flag" && libobjs=`$echo "X$libobjs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` # Prepare the list of exported symbols if test -z "$export_symbols"; then if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then $show "generating symbol list for \`$libname.la'" export_symbols="$output_objdir/$libname.exp" $run $rm $export_symbols cmds=$export_symbols_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" if len=`expr "X$cmd" : ".*"` && test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then $show "$cmd" $run eval "$cmd" || exit $? skipped_export=false else # The command line is too long to execute in one step. $show "using reloadable object file for export list..." skipped_export=: fi done IFS="$save_ifs" if test -n "$export_symbols_regex"; then $show "$EGREP -e \"$export_symbols_regex\" \"$export_symbols\" > \"${export_symbols}T\"" $run eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' $show "$mv \"${export_symbols}T\" \"$export_symbols\"" $run eval '$mv "${export_symbols}T" "$export_symbols"' fi fi fi if test -n "$export_symbols" && test -n "$include_expsyms"; then $run eval '$echo "X$include_expsyms" | $SP2NL >> "$export_symbols"' fi tmp_deplibs= for test_deplib in $deplibs; do case " $convenience " in *" $test_deplib "*) ;; *) tmp_deplibs="$tmp_deplibs $test_deplib" ;; esac done deplibs="$tmp_deplibs" if test -n "$convenience"; then if test -n "$whole_archive_flag_spec"; then save_libobjs=$libobjs eval libobjs=\"\$libobjs $whole_archive_flag_spec\" else gentop="$output_objdir/${outputname}x" $show "${rm}r $gentop" $run ${rm}r "$gentop" $show "$mkdir $gentop" $run $mkdir "$gentop" status=$? if test "$status" -ne 0 && test ! -d "$gentop"; then exit $status fi generated="$generated $gentop" for xlib in $convenience; do # Extract the objects. case $xlib in [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;; *) xabs=`pwd`"/$xlib" ;; esac xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'` xdir="$gentop/$xlib" $show "${rm}r $xdir" $run ${rm}r "$xdir" $show "$mkdir $xdir" $run $mkdir "$xdir" status=$? if test "$status" -ne 0 && test ! -d "$xdir"; then exit $status fi # We will extract separately just the conflicting names and we will no # longer touch any unique names. It is faster to leave these extract # automatically by $AR in one run. $show "(cd $xdir && $AR x $xabs)" $run eval "(cd \$xdir && $AR x \$xabs)" || exit $? if ($AR t "$xabs" | sort | sort -uc >/dev/null 2>&1); then : else $echo "$modename: warning: object name conflicts; renaming object files" 1>&2 $echo "$modename: warning: to ensure that they will not overwrite" 1>&2 $AR t "$xabs" | sort | uniq -cd | while read -r count name do i=1 while test "$i" -le "$count" do # Put our $i before any first dot (extension) # Never overwrite any file name_to="$name" while test "X$name_to" = "X$name" || test -f "$xdir/$name_to" do name_to=`$echo "X$name_to" | $Xsed -e "s/\([^.]*\)/\1-$i/"` done $show "(cd $xdir && $AR xN $i $xabs '$name' && $mv '$name' '$name_to')" $run eval "(cd \$xdir && $AR xN $i \$xabs '$name' && $mv '$name' '$name_to')" || exit $? i=`expr $i + 1` done done fi libobjs="$libobjs "`find $xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP` done fi fi if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then eval flag=\"$thread_safe_flag_spec\" linker_flags="$linker_flags $flag" fi # Make a backup of the uninstalled library when relinking if test "$mode" = relink; then $run eval '(cd $output_objdir && $rm ${realname}U && $mv $realname ${realname}U)' || exit $? fi # Do each of the archive commands. if test "$module" = yes && test -n "$module_cmds" ; then if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then eval test_cmds=\"$module_expsym_cmds\" cmds=$module_expsym_cmds else eval test_cmds=\"$module_cmds\" cmds=$module_cmds fi else if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then eval test_cmds=\"$archive_expsym_cmds\" cmds=$archive_expsym_cmds else eval test_cmds=\"$archive_cmds\" cmds=$archive_cmds fi fi if test "X$skipped_export" != "X:" && len=`expr "X$test_cmds" : ".*"` && test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then : else # The command line is too long to link in one step, link piecewise. $echo "creating reloadable object files..." # Save the value of $output and $libobjs because we want to # use them later. If we have whole_archive_flag_spec, we # want to use save_libobjs as it was before # whole_archive_flag_spec was expanded, because we can't # assume the linker understands whole_archive_flag_spec. # This may have to be revisited, in case too many # convenience libraries get linked in and end up exceeding # the spec. if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then save_libobjs=$libobjs fi save_output=$output # Clear the reloadable object creation command queue and # initialize k to one. test_cmds= concat_cmds= objlist= delfiles= last_robj= k=1 output=$output_objdir/$save_output-${k}.$objext # Loop over the list of objects to be linked. for obj in $save_libobjs do eval test_cmds=\"$reload_cmds $objlist $last_robj\" if test "X$objlist" = X || { len=`expr "X$test_cmds" : ".*"` && test "$len" -le "$max_cmd_len"; }; then objlist="$objlist $obj" else # The command $test_cmds is almost too long, add a # command to the queue. if test "$k" -eq 1 ; then # The first file doesn't have a previous command to add. eval concat_cmds=\"$reload_cmds $objlist $last_robj\" else # All subsequent reloadable object files will link in # the last one created. eval concat_cmds=\"\$concat_cmds~$reload_cmds $objlist $last_robj\" fi last_robj=$output_objdir/$save_output-${k}.$objext k=`expr $k + 1` output=$output_objdir/$save_output-${k}.$objext objlist=$obj len=1 fi done # Handle the remaining objects by creating one last # reloadable object file. All subsequent reloadable object # files will link in the last one created. test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\${concat_cmds}$reload_cmds $objlist $last_robj\" if ${skipped_export-false}; then $show "generating symbol list for \`$libname.la'" export_symbols="$output_objdir/$libname.exp" $run $rm $export_symbols libobjs=$output # Append the command to create the export file. eval concat_cmds=\"\$concat_cmds~$export_symbols_cmds\" fi # Set up a command to remove the reloadale object files # after they are used. i=0 while test "$i" -lt "$k" do i=`expr $i + 1` delfiles="$delfiles $output_objdir/$save_output-${i}.$objext" done $echo "creating a temporary reloadable object file: $output" # Loop through the commands generated above and execute them. save_ifs="$IFS"; IFS='~' for cmd in $concat_cmds; do IFS="$save_ifs" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" libobjs=$output # Restore the value of output. output=$save_output if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then eval libobjs=\"\$libobjs $whole_archive_flag_spec\" fi # Expand the library linking commands again to reset the # value of $libobjs for piecewise linking. # Do each of the archive commands. if test "$module" = yes && test -n "$module_cmds" ; then if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then cmds=$module_expsym_cmds else cmds=$module_cmds fi else if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then cmds=$archive_expsym_cmds else cmds=$archive_cmds fi fi # Append the command to remove the reloadable object files # to the just-reset $cmds. eval cmds=\"\$cmds~\$rm $delfiles\" fi save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" # Restore the uninstalled library and exit if test "$mode" = relink; then $run eval '(cd $output_objdir && $rm ${realname}T && $mv $realname ${realname}T && $mv "$realname"U $realname)' || exit $? exit $EXIT_SUCCESS fi # Create links to the real library. for linkname in $linknames; do if test "$realname" != "$linkname"; then $show "(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)" $run eval '(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)' || exit $? fi done # If -module or -export-dynamic was specified, set the dlname. if test "$module" = yes || test "$export_dynamic" = yes; then # On all known operating systems, these are identical. dlname="$soname" fi fi ;; obj) if test -n "$deplibs"; then $echo "$modename: warning: \`-l' and \`-L' are ignored for objects" 1>&2 fi if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then $echo "$modename: warning: \`-dlopen' is ignored for objects" 1>&2 fi if test -n "$rpath"; then $echo "$modename: warning: \`-rpath' is ignored for objects" 1>&2 fi if test -n "$xrpath"; then $echo "$modename: warning: \`-R' is ignored for objects" 1>&2 fi if test -n "$vinfo"; then $echo "$modename: warning: \`-version-info' is ignored for objects" 1>&2 fi if test -n "$release"; then $echo "$modename: warning: \`-release' is ignored for objects" 1>&2 fi case $output in *.lo) if test -n "$objs$old_deplibs"; then $echo "$modename: cannot build library object \`$output' from non-libtool objects" 1>&2 exit $EXIT_FAILURE fi libobj="$output" obj=`$echo "X$output" | $Xsed -e "$lo2o"` ;; *) libobj= obj="$output" ;; esac # Delete the old objects. $run $rm $obj $libobj # Objects from convenience libraries. This assumes # single-version convenience libraries. Whenever we create # different ones for PIC/non-PIC, this we'll have to duplicate # the extraction. reload_conv_objs= gentop= # reload_cmds runs $LD directly, so let us get rid of # -Wl from whole_archive_flag_spec wl= if test -n "$convenience"; then if test -n "$whole_archive_flag_spec"; then eval reload_conv_objs=\"\$reload_objs $whole_archive_flag_spec\" else gentop="$output_objdir/${obj}x" $show "${rm}r $gentop" $run ${rm}r "$gentop" $show "$mkdir $gentop" $run $mkdir "$gentop" status=$? if test "$status" -ne 0 && test ! -d "$gentop"; then exit $status fi generated="$generated $gentop" for xlib in $convenience; do # Extract the objects. case $xlib in [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;; *) xabs=`pwd`"/$xlib" ;; esac xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'` xdir="$gentop/$xlib" $show "${rm}r $xdir" $run ${rm}r "$xdir" $show "$mkdir $xdir" $run $mkdir "$xdir" status=$? if test "$status" -ne 0 && test ! -d "$xdir"; then exit $status fi # We will extract separately just the conflicting names and we will no # longer touch any unique names. It is faster to leave these extract # automatically by $AR in one run. $show "(cd $xdir && $AR x $xabs)" $run eval "(cd \$xdir && $AR x \$xabs)" || exit $? if ($AR t "$xabs" | sort | sort -uc >/dev/null 2>&1); then : else $echo "$modename: warning: object name conflicts; renaming object files" 1>&2 $echo "$modename: warning: to ensure that they will not overwrite" 1>&2 $AR t "$xabs" | sort | uniq -cd | while read -r count name do i=1 while test "$i" -le "$count" do # Put our $i before any first dot (extension) # Never overwrite any file name_to="$name" while test "X$name_to" = "X$name" || test -f "$xdir/$name_to" do name_to=`$echo "X$name_to" | $Xsed -e "s/\([^.]*\)/\1-$i/"` done $show "(cd $xdir && $AR xN $i $xabs '$name' && $mv '$name' '$name_to')" $run eval "(cd \$xdir && $AR xN $i \$xabs '$name' && $mv '$name' '$name_to')" || exit $? i=`expr $i + 1` done done fi reload_conv_objs="$reload_objs "`find $xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP` done fi fi # Create the old-style object. reload_objs="$objs$old_deplibs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test output="$obj" cmds=$reload_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" # Exit if we aren't doing a library object file. if test -z "$libobj"; then if test -n "$gentop"; then $show "${rm}r $gentop" $run ${rm}r $gentop fi exit $EXIT_SUCCESS fi if test "$build_libtool_libs" != yes; then if test -n "$gentop"; then $show "${rm}r $gentop" $run ${rm}r $gentop fi # Create an invalid libtool object if no PIC, so that we don't # accidentally link it into a program. # $show "echo timestamp > $libobj" # $run eval "echo timestamp > $libobj" || exit $? exit $EXIT_SUCCESS fi if test -n "$pic_flag" || test "$pic_mode" != default; then # Only do commands if we really have different PIC objects. reload_objs="$libobjs $reload_conv_objs" output="$libobj" cmds=$reload_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" fi if test -n "$gentop"; then $show "${rm}r $gentop" $run ${rm}r $gentop fi exit $EXIT_SUCCESS ;; prog) case $host in *cygwin*) output=`$echo $output | ${SED} -e 's,.exe$,,;s,$,.exe,'` ;; esac if test -n "$vinfo"; then $echo "$modename: warning: \`-version-info' is ignored for programs" 1>&2 fi if test -n "$release"; then $echo "$modename: warning: \`-release' is ignored for programs" 1>&2 fi if test "$preload" = yes; then if test "$dlopen_support" = unknown && test "$dlopen_self" = unknown && test "$dlopen_self_static" = unknown; then $echo "$modename: warning: \`AC_LIBTOOL_DLOPEN' not used. Assuming no dlopen support." fi fi case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library is the System framework compile_deplibs=`$echo "X $compile_deplibs" | $Xsed -e 's/ -lc / -framework System /'` finalize_deplibs=`$echo "X $finalize_deplibs" | $Xsed -e 's/ -lc / -framework System /'` ;; esac case $host in *darwin*) # Don't allow lazy linking, it breaks C++ global constructors if test "$tagname" = CXX ; then compile_command="$compile_command ${wl}-bind_at_load" finalize_command="$finalize_command ${wl}-bind_at_load" fi ;; esac compile_command="$compile_command $compile_deplibs" finalize_command="$finalize_command $finalize_deplibs" if test -n "$rpath$xrpath"; then # If the user specified any rpath flags, then add them. for libdir in $rpath $xrpath; do # This is the magic to use -rpath. case "$finalize_rpath " in *" $libdir "*) ;; *) finalize_rpath="$finalize_rpath $libdir" ;; esac done fi # Now hardcode the library paths rpath= hardcode_libdirs= for libdir in $compile_rpath $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" rpath="$rpath $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) perm_rpath="$perm_rpath $libdir" ;; esac fi case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) case :$dllsearchpath: in *":$libdir:"*) ;; *) dllsearchpath="$dllsearchpath:$libdir";; esac ;; esac done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" eval rpath=\" $hardcode_libdir_flag_spec\" fi compile_rpath="$rpath" rpath= hardcode_libdirs= for libdir in $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" rpath="$rpath $flag" fi elif test -n "$runpath_var"; then case "$finalize_perm_rpath " in *" $libdir "*) ;; *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" eval rpath=\" $hardcode_libdir_flag_spec\" fi finalize_rpath="$rpath" if test -n "$libobjs" && test "$build_old_libs" = yes; then # Transform all the library objects into standard objects. compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` fi dlsyms= if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then if test -n "$NM" && test -n "$global_symbol_pipe"; then dlsyms="${outputname}S.c" else $echo "$modename: not configured to extract global symbols from dlpreopened files" 1>&2 fi fi if test -n "$dlsyms"; then case $dlsyms in "") ;; *.c) # Discover the nlist of each of the dlfiles. nlist="$output_objdir/${outputname}.nm" $show "$rm $nlist ${nlist}S ${nlist}T" $run $rm "$nlist" "${nlist}S" "${nlist}T" # Parse the name list into a source file. $show "creating $output_objdir/$dlsyms" test -z "$run" && $echo > "$output_objdir/$dlsyms" "\ /* $dlsyms - symbol resolution table for \`$outputname' dlsym emulation. */ /* Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP */ #ifdef __cplusplus extern \"C\" { #endif /* Prevent the only kind of declaration conflicts we can make. */ #define lt_preloaded_symbols some_other_symbol /* External symbol declarations for the compiler. */\ " if test "$dlself" = yes; then $show "generating symbol list for \`$output'" test -z "$run" && $echo ': @PROGRAM@ ' > "$nlist" # Add our own program objects to the symbol list. progfiles=`$echo "X$objs$old_deplibs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` for arg in $progfiles; do $show "extracting global C symbols from \`$arg'" $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'" done if test -n "$exclude_expsyms"; then $run eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' $run eval '$mv "$nlist"T "$nlist"' fi if test -n "$export_symbols_regex"; then $run eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' $run eval '$mv "$nlist"T "$nlist"' fi # Prepare the list of exported symbols if test -z "$export_symbols"; then export_symbols="$output_objdir/$output.exp" $run $rm $export_symbols $run eval "${SED} -n -e '/^: @PROGRAM@$/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' else $run eval "${SED} -e 's/\([][.*^$]\)/\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$output.exp"' $run eval 'grep -f "$output_objdir/$output.exp" < "$nlist" > "$nlist"T' $run eval 'mv "$nlist"T "$nlist"' fi fi for arg in $dlprefiles; do $show "extracting global C symbols from \`$arg'" name=`$echo "$arg" | ${SED} -e 's%^.*/%%'` $run eval '$echo ": $name " >> "$nlist"' $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'" done if test -z "$run"; then # Make sure we have at least an empty file. test -f "$nlist" || : > "$nlist" if test -n "$exclude_expsyms"; then $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T $mv "$nlist"T "$nlist" fi # Try sorting and uniquifying the output. if grep -v "^: " < "$nlist" | if sort -k 3 /dev/null 2>&1; then sort -k 3 else sort +2 fi | uniq > "$nlist"S; then : else grep -v "^: " < "$nlist" > "$nlist"S fi if test -f "$nlist"S; then eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$dlsyms"' else $echo '/* NONE */' >> "$output_objdir/$dlsyms" fi $echo >> "$output_objdir/$dlsyms" "\ #undef lt_preloaded_symbols #if defined (__STDC__) && __STDC__ # define lt_ptr void * #else # define lt_ptr char * # define const #endif /* The mapping between symbol names and symbols. */ const struct { const char *name; lt_ptr address; } lt_preloaded_symbols[] = {\ " eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$dlsyms" $echo >> "$output_objdir/$dlsyms" "\ {0, (lt_ptr) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt_preloaded_symbols; } #endif #ifdef __cplusplus } #endif\ " fi pic_flag_for_symtable= case $host in # compiling the symbol table file with pic_flag works around # a FreeBSD bug that causes programs to crash when -lm is # linked before any other PIC object. But we must not use # pic_flag when linking with -static. The problem exists in # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) case "$compile_command " in *" -static "*) ;; *) pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND";; esac;; *-*-hpux*) case "$compile_command " in *" -static "*) ;; *) pic_flag_for_symtable=" $pic_flag";; esac esac # Now compile the dynamic symbol file. $show "(cd $output_objdir && $LTCC -c$no_builtin_flag$pic_flag_for_symtable \"$dlsyms\")" $run eval '(cd $output_objdir && $LTCC -c$no_builtin_flag$pic_flag_for_symtable "$dlsyms")' || exit $? # Clean up the generated files. $show "$rm $output_objdir/$dlsyms $nlist ${nlist}S ${nlist}T" $run $rm "$output_objdir/$dlsyms" "$nlist" "${nlist}S" "${nlist}T" # Transform the symbol file into the correct name. compile_command=`$echo "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"` finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"` ;; *) $echo "$modename: unknown suffix for \`$dlsyms'" 1>&2 exit $EXIT_FAILURE ;; esac else # We keep going just in case the user didn't refer to # lt_preloaded_symbols. The linker will fail if global_symbol_pipe # really was required. # Nullify the symbol file. compile_command=`$echo "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"` finalize_command=`$echo "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"` fi if test "$need_relink" = no || test "$build_libtool_libs" != yes; then # Replace the output file specification. compile_command=`$echo "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` link_command="$compile_command$compile_rpath" # We have no uninstalled library dependencies, so finalize right now. $show "$link_command" $run eval "$link_command" status=$? # Delete the generated files. if test -n "$dlsyms"; then $show "$rm $output_objdir/${outputname}S.${objext}" $run $rm "$output_objdir/${outputname}S.${objext}" fi exit $status fi if test -n "$shlibpath_var"; then # We should set the shlibpath_var rpath= for dir in $temp_rpath; do case $dir in [\\/]* | [A-Za-z]:[\\/]*) # Absolute path. rpath="$rpath$dir:" ;; *) # Relative path: add a thisdir entry. rpath="$rpath\$thisdir/$dir:" ;; esac done temp_rpath="$rpath" fi if test -n "$compile_shlibpath$finalize_shlibpath"; then compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" fi if test -n "$finalize_shlibpath"; then finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" fi compile_var= finalize_var= if test -n "$runpath_var"; then if test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do rpath="$rpath$dir:" done compile_var="$runpath_var=\"$rpath\$$runpath_var\" " fi if test -n "$finalize_perm_rpath"; then # We should set the runpath_var. rpath= for dir in $finalize_perm_rpath; do rpath="$rpath$dir:" done finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " fi fi if test "$no_install" = yes; then # We don't need to create a wrapper script. link_command="$compile_var$compile_command$compile_rpath" # Replace the output file specification. link_command=`$echo "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` # Delete the old output file. $run $rm $output # Link the executable and exit $show "$link_command" $run eval "$link_command" || exit $? exit $EXIT_SUCCESS fi if test "$hardcode_action" = relink; then # Fast installation is not supported link_command="$compile_var$compile_command$compile_rpath" relink_command="$finalize_var$finalize_command$finalize_rpath" $echo "$modename: warning: this platform does not like uninstalled shared libraries" 1>&2 $echo "$modename: \`$output' will be relinked during installation" 1>&2 else if test "$fast_install" != no; then link_command="$finalize_var$compile_command$finalize_rpath" if test "$fast_install" = yes; then relink_command=`$echo "X$compile_var$compile_command$compile_rpath" | $Xsed -e 's%@OUTPUT@%\$progdir/\$file%g'` else # fast_install is set to needless relink_command= fi else link_command="$compile_var$compile_command$compile_rpath" relink_command="$finalize_var$finalize_command$finalize_rpath" fi fi # Replace the output file specification. link_command=`$echo "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` # Delete the old output files. $run $rm $output $output_objdir/$outputname $output_objdir/lt-$outputname $show "$link_command" $run eval "$link_command" || exit $? # Now create the wrapper script. $show "creating $output" # Quote the relink command for shipping. if test -n "$relink_command"; then # Preserve any variables that may affect compiler behavior for var in $variables_saved_for_relink; do if eval test -z \"\${$var+set}\"; then relink_command="{ test -z \"\${$var+set}\" || unset $var || { $var=; export $var; }; }; $relink_command" elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"` relink_command="$var=\"$var_value\"; export $var; $relink_command" fi done relink_command="(cd `pwd`; $relink_command)" relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"` fi # Quote $echo for shipping. if test "X$echo" = "X$SHELL $progpath --fallback-echo"; then case $progpath in [\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $progpath --fallback-echo";; *) qecho="$SHELL `pwd`/$progpath --fallback-echo";; esac qecho=`$echo "X$qecho" | $Xsed -e "$sed_quote_subst"` else qecho=`$echo "X$echo" | $Xsed -e "$sed_quote_subst"` fi # Only actually do things if our run command is non-null. if test -z "$run"; then # win32 will think the script is a binary if it has # a .exe suffix, so we strip it off here. case $output in *.exe) output=`$echo $output|${SED} 's,.exe$,,'` ;; esac # test for cygwin because mv fails w/o .exe extensions case $host in *cygwin*) exeext=.exe outputname=`$echo $outputname|${SED} 's,.exe$,,'` ;; *) exeext= ;; esac case $host in *cygwin* | *mingw* ) cwrappersource=`$echo ${objdir}/lt-${output}.c` cwrapper=`$echo ${output}.exe` $rm $cwrappersource $cwrapper trap "$rm $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 cat > $cwrappersource <> $cwrappersource<<"EOF" #include #include #include #include #include #include #if defined(PATH_MAX) # define LT_PATHMAX PATH_MAX #elif defined(MAXPATHLEN) # define LT_PATHMAX MAXPATHLEN #else # define LT_PATHMAX 1024 #endif #ifndef DIR_SEPARATOR #define DIR_SEPARATOR '/' #endif #if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \ defined (__OS2__) #define HAVE_DOS_BASED_FILE_SYSTEM #ifndef DIR_SEPARATOR_2 #define DIR_SEPARATOR_2 '\\' #endif #endif #ifndef DIR_SEPARATOR_2 # define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) #else /* DIR_SEPARATOR_2 */ # define IS_DIR_SEPARATOR(ch) \ (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) #endif /* DIR_SEPARATOR_2 */ #define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) #define XFREE(stale) do { \ if (stale) { free ((void *) stale); stale = 0; } \ } while (0) const char *program_name = NULL; void * xmalloc (size_t num); char * xstrdup (const char *string); char * basename (const char *name); char * fnqualify(const char *path); char * strendzap(char *str, const char *pat); void lt_fatal (const char *message, ...); int main (int argc, char *argv[]) { char **newargz; int i; program_name = (char *) xstrdup ((char *) basename (argv[0])); newargz = XMALLOC(char *, argc+2); EOF cat >> $cwrappersource <> $cwrappersource <<"EOF" newargz[1] = fnqualify(argv[0]); /* we know the script has the same name, without the .exe */ /* so make sure newargz[1] doesn't end in .exe */ strendzap(newargz[1],".exe"); for (i = 1; i < argc; i++) newargz[i+1] = xstrdup(argv[i]); newargz[argc+1] = NULL; EOF cat >> $cwrappersource <> $cwrappersource <<"EOF" } void * xmalloc (size_t num) { void * p = (void *) malloc (num); if (!p) lt_fatal ("Memory exhausted"); return p; } char * xstrdup (const char *string) { return string ? strcpy ((char *) xmalloc (strlen (string) + 1), string) : NULL ; } char * basename (const char *name) { const char *base; #if defined (HAVE_DOS_BASED_FILE_SYSTEM) /* Skip over the disk name in MSDOS pathnames. */ if (isalpha (name[0]) && name[1] == ':') name += 2; #endif for (base = name; *name; name++) if (IS_DIR_SEPARATOR (*name)) base = name + 1; return (char *) base; } char * fnqualify(const char *path) { size_t size; char *p; char tmp[LT_PATHMAX + 1]; assert(path != NULL); /* Is it qualified already? */ #if defined (HAVE_DOS_BASED_FILE_SYSTEM) if (isalpha (path[0]) && path[1] == ':') return xstrdup (path); #endif if (IS_DIR_SEPARATOR (path[0])) return xstrdup (path); /* prepend the current directory */ /* doesn't handle '~' */ if (getcwd (tmp, LT_PATHMAX) == NULL) lt_fatal ("getcwd failed"); size = strlen(tmp) + 1 + strlen(path) + 1; /* +2 for '/' and '\0' */ p = XMALLOC(char, size); sprintf(p, "%s%c%s", tmp, DIR_SEPARATOR, path); return p; } char * strendzap(char *str, const char *pat) { size_t len, patlen; assert(str != NULL); assert(pat != NULL); len = strlen(str); patlen = strlen(pat); if (patlen <= len) { str += len - patlen; if (strcmp(str, pat) == 0) *str = '\0'; } return str; } static void lt_error_core (int exit_status, const char * mode, const char * message, va_list ap) { fprintf (stderr, "%s: %s: ", program_name, mode); vfprintf (stderr, message, ap); fprintf (stderr, ".\n"); if (exit_status >= 0) exit (exit_status); } void lt_fatal (const char *message, ...) { va_list ap; va_start (ap, message); lt_error_core (EXIT_FAILURE, "FATAL", message, ap); va_end (ap); } EOF # we should really use a build-platform specific compiler # here, but OTOH, the wrappers (shell script and this C one) # are only useful if you want to execute the "real" binary. # Since the "real" binary is built for $host, then this # wrapper might as well be built for $host, too. $run $LTCC -s -o $cwrapper $cwrappersource ;; esac $rm $output trap "$rm $output; exit $EXIT_FAILURE" 1 2 15 $echo > $output "\ #! $SHELL # $output - temporary wrapper script for $objdir/$outputname # Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP # # The $output program cannot be directly executed until all the libtool # libraries that it depends on are installed. # # This wrapper script should never be moved out of the build directory. # If it is, it will not operate correctly. # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. Xsed='${SED} -e 1s/^X//' sed_quote_subst='$sed_quote_subst' # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. if test \"\${CDPATH+set}\" = set; then CDPATH=:; export CDPATH; fi relink_command=\"$relink_command\" # This environment variable determines our operation mode. if test \"\$libtool_install_magic\" = \"$magic\"; then # install mode needs the following variable: notinst_deplibs='$notinst_deplibs' else # When we are sourced in execute mode, \$file and \$echo are already set. if test \"\$libtool_execute_magic\" != \"$magic\"; then echo=\"$qecho\" file=\"\$0\" # Make sure echo works. if test \"X\$1\" = X--no-reexec; then # Discard the --no-reexec flag, and continue. shift elif test \"X\`(\$echo '\t') 2>/dev/null\`\" = 'X\t'; then # Yippee, \$echo works! : else # Restart under the correct shell, and then maybe \$echo will work. exec $SHELL \"\$0\" --no-reexec \${1+\"\$@\"} fi fi\ " $echo >> $output "\ # Find the directory that this script lives in. thisdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*$%%'\` test \"x\$thisdir\" = \"x\$file\" && thisdir=. # Follow symbolic links until we get to the real thisdir. file=\`ls -ld \"\$file\" | ${SED} -n 's/.*-> //p'\` while test -n \"\$file\"; do destdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*\$%%'\` # If there was a directory component, then change thisdir. if test \"x\$destdir\" != \"x\$file\"; then case \"\$destdir\" in [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; *) thisdir=\"\$thisdir/\$destdir\" ;; esac fi file=\`\$echo \"X\$file\" | \$Xsed -e 's%^.*/%%'\` file=\`ls -ld \"\$thisdir/\$file\" | ${SED} -n 's/.*-> //p'\` done # Try to get the absolute directory name. absdir=\`cd \"\$thisdir\" && pwd\` test -n \"\$absdir\" && thisdir=\"\$absdir\" " if test "$fast_install" = yes; then $echo >> $output "\ program=lt-'$outputname'$exeext progdir=\"\$thisdir/$objdir\" if test ! -f \"\$progdir/\$program\" || \\ { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\ test \"X\$file\" != \"X\$progdir/\$program\"; }; then file=\"\$\$-\$program\" if test ! -d \"\$progdir\"; then $mkdir \"\$progdir\" else $rm \"\$progdir/\$file\" fi" $echo >> $output "\ # relink executable if necessary if test -n \"\$relink_command\"; then if relink_command_output=\`eval \$relink_command 2>&1\`; then : else $echo \"\$relink_command_output\" >&2 $rm \"\$progdir/\$file\" exit $EXIT_FAILURE fi fi $mv \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || { $rm \"\$progdir/\$program\"; $mv \"\$progdir/\$file\" \"\$progdir/\$program\"; } $rm \"\$progdir/\$file\" fi" else $echo >> $output "\ program='$outputname' progdir=\"\$thisdir/$objdir\" " fi $echo >> $output "\ if test -f \"\$progdir/\$program\"; then" # Export our shlibpath_var if we have one. if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then $echo >> $output "\ # Add our own library path to $shlibpath_var $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" # Some systems cannot cope with colon-terminated $shlibpath_var # The second colon is a workaround for a bug in BeOS R4 sed $shlibpath_var=\`\$echo \"X\$$shlibpath_var\" | \$Xsed -e 's/::*\$//'\` export $shlibpath_var " fi # fixup the dll searchpath if we need to. if test -n "$dllsearchpath"; then $echo >> $output "\ # Add the dll search path components to the executable PATH PATH=$dllsearchpath:\$PATH " fi $echo >> $output "\ if test \"\$libtool_execute_magic\" != \"$magic\"; then # Run the actual program with our arguments. " case $host in # Backslashes separate directories on plain windows *-*-mingw | *-*-os2*) $echo >> $output "\ exec \$progdir\\\\\$program \${1+\"\$@\"} " ;; *) $echo >> $output "\ exec \$progdir/\$program \${1+\"\$@\"} " ;; esac $echo >> $output "\ \$echo \"\$0: cannot exec \$program \${1+\"\$@\"}\" exit $EXIT_FAILURE fi else # The program doesn't exist. \$echo \"\$0: error: \$progdir/\$program does not exist\" 1>&2 \$echo \"This script is just a wrapper for \$program.\" 1>&2 $echo \"See the $PACKAGE documentation for more information.\" 1>&2 exit $EXIT_FAILURE fi fi\ " chmod +x $output fi exit $EXIT_SUCCESS ;; esac # See if we need to build an old-fashioned archive. for oldlib in $oldlibs; do if test "$build_libtool_libs" = convenience; then oldobjs="$libobjs_save" addlibs="$convenience" build_libtool_libs=no else if test "$build_libtool_libs" = module; then oldobjs="$libobjs_save" build_libtool_libs=no else oldobjs="$old_deplibs $non_pic_objects" fi addlibs="$old_convenience" fi if test -n "$addlibs"; then gentop="$output_objdir/${outputname}x" $show "${rm}r $gentop" $run ${rm}r "$gentop" $show "$mkdir $gentop" $run $mkdir "$gentop" status=$? if test "$status" -ne 0 && test ! -d "$gentop"; then exit $status fi generated="$generated $gentop" # Add in members from convenience archives. for xlib in $addlibs; do # Extract the objects. case $xlib in [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;; *) xabs=`pwd`"/$xlib" ;; esac xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'` xdir="$gentop/$xlib" $show "${rm}r $xdir" $run ${rm}r "$xdir" $show "$mkdir $xdir" $run $mkdir "$xdir" status=$? if test "$status" -ne 0 && test ! -d "$xdir"; then exit $status fi # We will extract separately just the conflicting names and we will no # longer touch any unique names. It is faster to leave these extract # automatically by $AR in one run. $show "(cd $xdir && $AR x $xabs)" $run eval "(cd \$xdir && $AR x \$xabs)" || exit $? if ($AR t "$xabs" | sort | sort -uc >/dev/null 2>&1); then : else $echo "$modename: warning: object name conflicts; renaming object files" 1>&2 $echo "$modename: warning: to ensure that they will not overwrite" 1>&2 $AR t "$xabs" | sort | uniq -cd | while read -r count name do i=1 while test "$i" -le "$count" do # Put our $i before any first dot (extension) # Never overwrite any file name_to="$name" while test "X$name_to" = "X$name" || test -f "$xdir/$name_to" do name_to=`$echo "X$name_to" | $Xsed -e "s/\([^.]*\)/\1-$i/"` done $show "(cd $xdir && $AR xN $i $xabs '$name' && $mv '$name' '$name_to')" $run eval "(cd \$xdir && $AR xN $i \$xabs '$name' && $mv '$name' '$name_to')" || exit $? i=`expr $i + 1` done done fi oldobjs="$oldobjs "`find $xdir -name \*.${objext} -print -o -name \*.lo -print | $NL2SP` done fi # Do each command in the archive commands. if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then cmds=$old_archive_from_new_cmds else eval cmds=\"$old_archive_cmds\" if len=`expr "X$cmds" : ".*"` && test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then cmds=$old_archive_cmds else # the command line is too long to link in one step, link in parts $echo "using piecewise archive linking..." save_RANLIB=$RANLIB RANLIB=: objlist= concat_cmds= save_oldobjs=$oldobjs # GNU ar 2.10+ was changed to match POSIX; thus no paths are # encoded into archives. This makes 'ar r' malfunction in # this piecewise linking case whenever conflicting object # names appear in distinct ar calls; check, warn and compensate. if (for obj in $save_oldobjs do $echo "X$obj" | $Xsed -e 's%^.*/%%' done | sort | sort -uc >/dev/null 2>&1); then : else $echo "$modename: warning: object name conflicts; overriding AR_FLAGS to 'cq'" 1>&2 $echo "$modename: warning: to ensure that POSIX-compatible ar will work" 1>&2 AR_FLAGS=cq fi # Is there a better way of finding the last object in the list? for obj in $save_oldobjs do last_oldobj=$obj done for obj in $save_oldobjs do oldobjs="$objlist $obj" objlist="$objlist $obj" eval test_cmds=\"$old_archive_cmds\" if len=`expr "X$test_cmds" : ".*"` && test "$len" -le "$max_cmd_len"; then : else # the above command should be used before it gets too long oldobjs=$objlist if test "$obj" = "$last_oldobj" ; then RANLIB=$save_RANLIB fi test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\" objlist= fi done RANLIB=$save_RANLIB oldobjs=$objlist if test "X$oldobjs" = "X" ; then eval cmds=\"\$concat_cmds\" else eval cmds=\"\$concat_cmds~\$old_archive_cmds\" fi fi fi save_ifs="$IFS"; IFS='~' for cmd in $cmds; do eval cmd=\"$cmd\" IFS="$save_ifs" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" done if test -n "$generated"; then $show "${rm}r$generated" $run ${rm}r$generated fi # Now create the libtool archive. case $output in *.la) old_library= test "$build_old_libs" = yes && old_library="$libname.$libext" $show "creating $output" # Preserve any variables that may affect compiler behavior for var in $variables_saved_for_relink; do if eval test -z \"\${$var+set}\"; then relink_command="{ test -z \"\${$var+set}\" || unset $var || { $var=; export $var; }; }; $relink_command" elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"` relink_command="$var=\"$var_value\"; export $var; $relink_command" fi done # Quote the link command for shipping. relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"` if test "$hardcode_automatic" = yes ; then relink_command= fi # Only create the output if not a dry run. if test -z "$run"; then for installed in no yes; do if test "$installed" = yes; then if test -z "$install_libdir"; then break fi output="$output_objdir/$outputname"i # Replace all uninstalled libtool libraries with the installed ones newdependency_libs= for deplib in $dependency_libs; do case $deplib in *.la) name=`$echo "X$deplib" | $Xsed -e 's%^.*/%%'` eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` if test -z "$libdir"; then $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2 exit $EXIT_FAILURE fi newdependency_libs="$newdependency_libs $libdir/$name" ;; *) newdependency_libs="$newdependency_libs $deplib" ;; esac done dependency_libs="$newdependency_libs" newdlfiles= for lib in $dlfiles; do name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` if test -z "$libdir"; then $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 exit $EXIT_FAILURE fi newdlfiles="$newdlfiles $libdir/$name" done dlfiles="$newdlfiles" newdlprefiles= for lib in $dlprefiles; do name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` if test -z "$libdir"; then $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 exit $EXIT_FAILURE fi newdlprefiles="$newdlprefiles $libdir/$name" done dlprefiles="$newdlprefiles" else newdlfiles= for lib in $dlfiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; *) abs=`pwd`"/$lib" ;; esac newdlfiles="$newdlfiles $abs" done dlfiles="$newdlfiles" newdlprefiles= for lib in $dlprefiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; *) abs=`pwd`"/$lib" ;; esac newdlprefiles="$newdlprefiles $abs" done dlprefiles="$newdlprefiles" fi $rm $output # place dlname in correct position for cygwin tdlname=$dlname case $host,$output,$installed,$module,$dlname in *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll) tdlname=../bin/$dlname ;; esac $echo > $output "\ # $outputname - a libtool library file # Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP # # Please DO NOT delete this file! # It is necessary for linking the library. # The name that we can dlopen(3). dlname='$tdlname' # Names of this library. library_names='$library_names' # The name of the static archive. old_library='$old_library' # Libraries that this one depends upon. dependency_libs='$dependency_libs' # Version information for $libname. current=$current age=$age revision=$revision # Is this an already installed library? installed=$installed # Should we warn about portability when linking against -modules? shouldnotlink=$module # Files to dlopen/dlpreopen dlopen='$dlfiles' dlpreopen='$dlprefiles' # Directory that this library needs to be installed in: libdir='$install_libdir'" if test "$installed" = no && test "$need_relink" = yes; then $echo >> $output "\ relink_command=\"$relink_command\"" fi done fi # Do a symbolic link so that the libtool archive can be found in # LD_LIBRARY_PATH before the program is installed. $show "(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)" $run eval '(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)' || exit $? ;; esac exit $EXIT_SUCCESS ;; # libtool install mode install) modename="$modename: install" # There may be an optional sh(1) argument at the beginning of # install_prog (especially on Windows NT). if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || # Allow the use of GNU shtool's install command. $echo "X$nonopt" | $Xsed | grep shtool > /dev/null; then # Aesthetically quote it. arg=`$echo "X$nonopt" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*) arg="\"$arg\"" ;; esac install_prog="$arg " arg="$1" shift else install_prog= arg="$nonopt" fi # The real first argument should be the name of the installation program. # Aesthetically quote it. arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*) arg="\"$arg\"" ;; esac install_prog="$install_prog$arg" # We need to accept at least all the BSD install flags. dest= files= opts= prev= install_type= isdir=no stripme= for arg do if test -n "$dest"; then files="$files $dest" dest="$arg" continue fi case $arg in -d) isdir=yes ;; -f) prev="-f" ;; -g) prev="-g" ;; -m) prev="-m" ;; -o) prev="-o" ;; -s) stripme=" -s" continue ;; -*) ;; *) # If the previous option needed an argument, then skip it. if test -n "$prev"; then prev= else dest="$arg" continue fi ;; esac # Aesthetically quote the argument. arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*) arg="\"$arg\"" ;; esac install_prog="$install_prog $arg" done if test -z "$install_prog"; then $echo "$modename: you must specify an install program" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi if test -n "$prev"; then $echo "$modename: the \`$prev' option requires an argument" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi if test -z "$files"; then if test -z "$dest"; then $echo "$modename: no file or destination specified" 1>&2 else $echo "$modename: you must specify a destination" 1>&2 fi $echo "$help" 1>&2 exit $EXIT_FAILURE fi # Strip any trailing slash from the destination. dest=`$echo "X$dest" | $Xsed -e 's%/$%%'` # Check to see that the destination is a directory. test -d "$dest" && isdir=yes if test "$isdir" = yes; then destdir="$dest" destname= else destdir=`$echo "X$dest" | $Xsed -e 's%/[^/]*$%%'` test "X$destdir" = "X$dest" && destdir=. destname=`$echo "X$dest" | $Xsed -e 's%^.*/%%'` # Not a directory, so check to see that there is only one file specified. set dummy $files if test "$#" -gt 2; then $echo "$modename: \`$dest' is not a directory" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi fi case $destdir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) for file in $files; do case $file in *.lo) ;; *) $echo "$modename: \`$destdir' must be an absolute directory name" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE ;; esac done ;; esac # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic="$magic" staticlibs= future_libdirs= current_libdirs= for file in $files; do # Do each installation. case $file in *.$libext) # Do the static libraries later. staticlibs="$staticlibs $file" ;; *.la) # Check to see that this really is a libtool archive. if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : else $echo "$modename: \`$file' is not a valid libtool archive" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi library_names= old_library= relink_command= # If there is no directory component, then add one. case $file in */* | *\\*) . $file ;; *) . ./$file ;; esac # Add the libdir to current_libdirs if it is the destination. if test "X$destdir" = "X$libdir"; then case "$current_libdirs " in *" $libdir "*) ;; *) current_libdirs="$current_libdirs $libdir" ;; esac else # Note the libdir as a future libdir. case "$future_libdirs " in *" $libdir "*) ;; *) future_libdirs="$future_libdirs $libdir" ;; esac fi dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`/ test "X$dir" = "X$file/" && dir= dir="$dir$objdir" if test -n "$relink_command"; then # Determine the prefix the user has applied to our future dir. inst_prefix_dir=`$echo "$destdir" | $SED "s%$libdir\$%%"` # Don't allow the user to place us outside of our expected # location b/c this prevents finding dependent libraries that # are installed to the same prefix. # At present, this check doesn't affect windows .dll's that # are installed into $libdir/../bin (currently, that works fine) # but it's something to keep an eye on. if test "$inst_prefix_dir" = "$destdir"; then $echo "$modename: error: cannot install \`$file' to a directory not ending in $libdir" 1>&2 exit $EXIT_FAILURE fi if test -n "$inst_prefix_dir"; then # Stick the inst_prefix_dir data into the link command. relink_command=`$echo "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` else relink_command=`$echo "$relink_command" | $SED "s%@inst_prefix_dir@%%"` fi $echo "$modename: warning: relinking \`$file'" 1>&2 $show "$relink_command" if $run eval "$relink_command"; then : else $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2 exit $EXIT_FAILURE fi fi # See the names of the shared library. set dummy $library_names if test -n "$2"; then realname="$2" shift shift srcname="$realname" test -n "$relink_command" && srcname="$realname"T # Install the shared library and build the symlinks. $show "$install_prog $dir/$srcname $destdir/$realname" $run eval "$install_prog $dir/$srcname $destdir/$realname" || exit $? if test -n "$stripme" && test -n "$striplib"; then $show "$striplib $destdir/$realname" $run eval "$striplib $destdir/$realname" || exit $? fi if test "$#" -gt 0; then # Delete the old symlinks, and create new ones. for linkname do if test "$linkname" != "$realname"; then $show "(cd $destdir && $rm $linkname && $LN_S $realname $linkname)" $run eval "(cd $destdir && $rm $linkname && $LN_S $realname $linkname)" fi done fi # Do each command in the postinstall commands. lib="$destdir/$realname" cmds=$postinstall_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" fi # Install the pseudo-library for information purposes. name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` instname="$dir/$name"i $show "$install_prog $instname $destdir/$name" $run eval "$install_prog $instname $destdir/$name" || exit $? # Maybe install the static library, too. test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library" ;; *.lo) # Install (i.e. copy) a libtool object. # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile="$destdir/$destname" else destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'` destfile="$destdir/$destfile" fi # Deduce the name of the destination old-style object file. case $destfile in *.lo) staticdest=`$echo "X$destfile" | $Xsed -e "$lo2o"` ;; *.$objext) staticdest="$destfile" destfile= ;; *) $echo "$modename: cannot copy a libtool object to \`$destfile'" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE ;; esac # Install the libtool object if requested. if test -n "$destfile"; then $show "$install_prog $file $destfile" $run eval "$install_prog $file $destfile" || exit $? fi # Install the old object if enabled. if test "$build_old_libs" = yes; then # Deduce the name of the old-style object file. staticobj=`$echo "X$file" | $Xsed -e "$lo2o"` $show "$install_prog $staticobj $staticdest" $run eval "$install_prog \$staticobj \$staticdest" || exit $? fi exit $EXIT_SUCCESS ;; *) # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile="$destdir/$destname" else destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'` destfile="$destdir/$destfile" fi # If the file is missing, and there is a .exe on the end, strip it # because it is most likely a libtool script we actually want to # install stripped_ext="" case $file in *.exe) if test ! -f "$file"; then file=`$echo $file|${SED} 's,.exe$,,'` stripped_ext=".exe" fi ;; esac # Do a test to see if this is really a libtool program. case $host in *cygwin*|*mingw*) wrapper=`$echo $file | ${SED} -e 's,.exe$,,'` ;; *) wrapper=$file ;; esac if (${SED} -e '4q' $wrapper | grep "^# Generated by .*$PACKAGE")>/dev/null 2>&1; then notinst_deplibs= relink_command= # To insure that "foo" is sourced, and not "foo.exe", # finese the cygwin/MSYS system by explicitly sourcing "foo." # which disallows the automatic-append-.exe behavior. case $build in *cygwin* | *mingw*) wrapperdot=${wrapper}. ;; *) wrapperdot=${wrapper} ;; esac # If there is no directory component, then add one. case $file in */* | *\\*) . ${wrapperdot} ;; *) . ./${wrapperdot} ;; esac # Check the variables that should have been set. if test -z "$notinst_deplibs"; then $echo "$modename: invalid libtool wrapper script \`$wrapper'" 1>&2 exit $EXIT_FAILURE fi finalize=yes for lib in $notinst_deplibs; do # Check to see that each library is installed. libdir= if test -f "$lib"; then # If there is no directory component, then add one. case $lib in */* | *\\*) . $lib ;; *) . ./$lib ;; esac fi libfile="$libdir/"`$echo "X$lib" | $Xsed -e 's%^.*/%%g'` ### testsuite: skip nested quoting test if test -n "$libdir" && test ! -f "$libfile"; then $echo "$modename: warning: \`$lib' has not been installed in \`$libdir'" 1>&2 finalize=no fi done relink_command= # To insure that "foo" is sourced, and not "foo.exe", # finese the cygwin/MSYS system by explicitly sourcing "foo." # which disallows the automatic-append-.exe behavior. case $build in *cygwin* | *mingw*) wrapperdot=${wrapper}. ;; *) wrapperdot=${wrapper} ;; esac # If there is no directory component, then add one. case $file in */* | *\\*) . ${wrapperdot} ;; *) . ./${wrapperdot} ;; esac outputname= if test "$fast_install" = no && test -n "$relink_command"; then if test "$finalize" = yes && test -z "$run"; then tmpdir="/tmp" test -n "$TMPDIR" && tmpdir="$TMPDIR" tmpdir="$tmpdir/libtool-$$" save_umask=`umask` umask 0077 if $mkdir "$tmpdir"; then umask $save_umask else umask $save_umask $echo "$modename: error: cannot create temporary directory \`$tmpdir'" 1>&2 continue fi file=`$echo "X$file$stripped_ext" | $Xsed -e 's%^.*/%%'` outputname="$tmpdir/$file" # Replace the output file specification. relink_command=`$echo "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'` $show "$relink_command" if $run eval "$relink_command"; then : else $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2 ${rm}r "$tmpdir" continue fi file="$outputname" else $echo "$modename: warning: cannot relink \`$file'" 1>&2 fi else # Install the binary that we compiled earlier. file=`$echo "X$file$stripped_ext" | $Xsed -e "s%\([^/]*\)$%$objdir/\1%"` fi fi # remove .exe since cygwin /usr/bin/install will append another # one anyways case $install_prog,$host in */usr/bin/install*,*cygwin*) case $file:$destfile in *.exe:*.exe) # this is ok ;; *.exe:*) destfile=$destfile.exe ;; *:*.exe) destfile=`$echo $destfile | ${SED} -e 's,.exe$,,'` ;; esac ;; esac $show "$install_prog$stripme $file $destfile" $run eval "$install_prog\$stripme \$file \$destfile" || exit $? test -n "$outputname" && ${rm}r "$tmpdir" ;; esac done for file in $staticlibs; do name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` # Set up the ranlib parameters. oldlib="$destdir/$name" $show "$install_prog $file $oldlib" $run eval "$install_prog \$file \$oldlib" || exit $? if test -n "$stripme" && test -n "$old_striplib"; then $show "$old_striplib $oldlib" $run eval "$old_striplib $oldlib" || exit $? fi # Do each command in the postinstall commands. cmds=$old_postinstall_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" done if test -n "$future_libdirs"; then $echo "$modename: warning: remember to run \`$progname --finish$future_libdirs'" 1>&2 fi if test -n "$current_libdirs"; then # Maybe just do a dry run. test -n "$run" && current_libdirs=" -n$current_libdirs" exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs' else exit $EXIT_SUCCESS fi ;; # libtool finish mode finish) modename="$modename: finish" libdirs="$nonopt" admincmds= if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then for dir do libdirs="$libdirs $dir" done for libdir in $libdirs; do if test -n "$finish_cmds"; then # Do each command in the finish commands. cmds=$finish_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || admincmds="$admincmds $cmd" done IFS="$save_ifs" fi if test -n "$finish_eval"; then # Do the single finish_eval. eval cmds=\"$finish_eval\" $run eval "$cmds" || admincmds="$admincmds $cmds" fi done fi # Exit here if they wanted silent mode. test "$show" = : && exit $EXIT_SUCCESS $echo "----------------------------------------------------------------------" $echo "Libraries have been installed in:" for libdir in $libdirs; do $echo " $libdir" done $echo $echo "If you ever happen to want to link against installed libraries" $echo "in a given directory, LIBDIR, you must either use libtool, and" $echo "specify the full pathname of the library, or use the \`-LLIBDIR'" $echo "flag during linking and do at least one of the following:" if test -n "$shlibpath_var"; then $echo " - add LIBDIR to the \`$shlibpath_var' environment variable" $echo " during execution" fi if test -n "$runpath_var"; then $echo " - add LIBDIR to the \`$runpath_var' environment variable" $echo " during linking" fi if test -n "$hardcode_libdir_flag_spec"; then libdir=LIBDIR eval flag=\"$hardcode_libdir_flag_spec\" $echo " - use the \`$flag' linker flag" fi if test -n "$admincmds"; then $echo " - have your system administrator run these commands:$admincmds" fi if test -f /etc/ld.so.conf; then $echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" fi $echo $echo "See any operating system documentation about shared libraries for" $echo "more information, such as the ld(1) and ld.so(8) manual pages." $echo "----------------------------------------------------------------------" exit $EXIT_SUCCESS ;; # libtool execute mode execute) modename="$modename: execute" # The first argument is the command name. cmd="$nonopt" if test -z "$cmd"; then $echo "$modename: you must specify a COMMAND" 1>&2 $echo "$help" exit $EXIT_FAILURE fi # Handle -dlopen flags immediately. for file in $execute_dlfiles; do if test ! -f "$file"; then $echo "$modename: \`$file' is not a file" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi dir= case $file in *.la) # Check to see that this really is a libtool archive. if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : else $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi # Read the libtool library. dlname= library_names= # If there is no directory component, then add one. case $file in */* | *\\*) . $file ;; *) . ./$file ;; esac # Skip this library if it cannot be dlopened. if test -z "$dlname"; then # Warn if it was a shared library. test -n "$library_names" && $echo "$modename: warning: \`$file' was not linked with \`-export-dynamic'" continue fi dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` test "X$dir" = "X$file" && dir=. if test -f "$dir/$objdir/$dlname"; then dir="$dir/$objdir" else $echo "$modename: cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" 1>&2 exit $EXIT_FAILURE fi ;; *.lo) # Just add the directory containing the .lo file. dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` test "X$dir" = "X$file" && dir=. ;; *) $echo "$modename: warning \`-dlopen' is ignored for non-libtool libraries and objects" 1>&2 continue ;; esac # Get the absolute pathname. absdir=`cd "$dir" && pwd` test -n "$absdir" && dir="$absdir" # Now add the directory to shlibpath_var. if eval "test -z \"\$$shlibpath_var\""; then eval "$shlibpath_var=\"\$dir\"" else eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" fi done # This variable tells wrapper scripts just to set shlibpath_var # rather than running their programs. libtool_execute_magic="$magic" # Check if any of the arguments is a wrapper script. args= for file do case $file in -*) ;; *) # Do a test to see if this is really a libtool program. if (${SED} -e '4q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then # If there is no directory component, then add one. case $file in */* | *\\*) . $file ;; *) . ./$file ;; esac # Transform arg to wrapped name. file="$progdir/$program" fi ;; esac # Quote arguments (to preserve shell metacharacters). file=`$echo "X$file" | $Xsed -e "$sed_quote_subst"` args="$args \"$file\"" done if test -z "$run"; then if test -n "$shlibpath_var"; then # Export the shlibpath_var. eval "export $shlibpath_var" fi # Restore saved environment variables if test "${save_LC_ALL+set}" = set; then LC_ALL="$save_LC_ALL"; export LC_ALL fi if test "${save_LANG+set}" = set; then LANG="$save_LANG"; export LANG fi # Now prepare to actually exec the command. exec_cmd="\$cmd$args" else # Display what would be done. if test -n "$shlibpath_var"; then eval "\$echo \"\$shlibpath_var=\$$shlibpath_var\"" $echo "export $shlibpath_var" fi $echo "$cmd$args" exit $EXIT_SUCCESS fi ;; # libtool clean and uninstall mode clean | uninstall) modename="$modename: $mode" rm="$nonopt" files= rmforce= exit_status=0 # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic="$magic" for arg do case $arg in -f) rm="$rm $arg"; rmforce=yes ;; -*) rm="$rm $arg" ;; *) files="$files $arg" ;; esac done if test -z "$rm"; then $echo "$modename: you must specify an RM program" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi rmdirs= origobjdir="$objdir" for file in $files; do dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` if test "X$dir" = "X$file"; then dir=. objdir="$origobjdir" else objdir="$dir/$origobjdir" fi name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` test "$mode" = uninstall && objdir="$dir" # Remember objdir for removal later, being careful to avoid duplicates if test "$mode" = clean; then case " $rmdirs " in *" $objdir "*) ;; *) rmdirs="$rmdirs $objdir" ;; esac fi # Don't error if the file doesn't exist and rm -f was used. if (test -L "$file") >/dev/null 2>&1 \ || (test -h "$file") >/dev/null 2>&1 \ || test -f "$file"; then : elif test -d "$file"; then exit_status=1 continue elif test "$rmforce" = yes; then continue fi rmfiles="$file" case $name in *.la) # Possibly a libtool archive, so verify it. if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then . $dir/$name # Delete the libtool libraries and symlinks. for n in $library_names; do rmfiles="$rmfiles $objdir/$n" done test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library" test "$mode" = clean && rmfiles="$rmfiles $objdir/$name $objdir/${name}i" if test "$mode" = uninstall; then if test -n "$library_names"; then # Do each command in the postuninstall commands. cmds=$postuninstall_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" if test "$?" -ne 0 && test "$rmforce" != yes; then exit_status=1 fi done IFS="$save_ifs" fi if test -n "$old_library"; then # Do each command in the old_postuninstall commands. cmds=$old_postuninstall_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" if test "$?" -ne 0 && test "$rmforce" != yes; then exit_status=1 fi done IFS="$save_ifs" fi # FIXME: should reinstall the best remaining shared library. fi fi ;; *.lo) # Possibly a libtool object, so verify it. if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then # Read the .lo file . $dir/$name # Add PIC object to the list of files to remove. if test -n "$pic_object" \ && test "$pic_object" != none; then rmfiles="$rmfiles $dir/$pic_object" fi # Add non-PIC object to the list of files to remove. if test -n "$non_pic_object" \ && test "$non_pic_object" != none; then rmfiles="$rmfiles $dir/$non_pic_object" fi fi ;; *) if test "$mode" = clean ; then noexename=$name case $file in *.exe) file=`$echo $file|${SED} 's,.exe$,,'` noexename=`$echo $name|${SED} 's,.exe$,,'` # $file with .exe has already been added to rmfiles, # add $file without .exe rmfiles="$rmfiles $file" ;; esac # Do a test to see if this is a libtool program. if (${SED} -e '4q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then relink_command= . $dir/$noexename # note $name still contains .exe if it was in $file originally # as does the version of $file that was added into $rmfiles rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}" if test "$fast_install" = yes && test -n "$relink_command"; then rmfiles="$rmfiles $objdir/lt-$name" fi if test "X$noexename" != "X$name" ; then rmfiles="$rmfiles $objdir/lt-${noexename}.c" fi fi fi ;; esac $show "$rm $rmfiles" $run $rm $rmfiles || exit_status=1 done objdir="$origobjdir" # Try to remove the ${objdir}s in the directories where we deleted files for dir in $rmdirs; do if test -d "$dir"; then $show "rmdir $dir" $run rmdir $dir >/dev/null 2>&1 fi done exit $exit_status ;; "") $echo "$modename: you must specify a MODE" 1>&2 $echo "$generic_help" 1>&2 exit $EXIT_FAILURE ;; esac if test -z "$exec_cmd"; then $echo "$modename: invalid operation mode \`$mode'" 1>&2 $echo "$generic_help" 1>&2 exit $EXIT_FAILURE fi fi # test -z "$show_help" if test -n "$exec_cmd"; then eval exec $exec_cmd exit $EXIT_FAILURE fi # We need to display help for each of the modes. case $mode in "") $echo \ "Usage: $modename [OPTION]... [MODE-ARG]... Provide generalized library-building support services. --config show all configuration variables --debug enable verbose shell tracing -n, --dry-run display commands without modifying any files --features display basic configuration information and exit --finish same as \`--mode=finish' --help display this help message and exit --mode=MODE use operation mode MODE [default=inferred from MODE-ARGS] --quiet same as \`--silent' --silent don't print informational messages --tag=TAG use configuration variables from tag TAG --version print version information MODE must be one of the following: clean remove files from the build directory compile compile a source file into a libtool object execute automatically set library path, then run a program finish complete the installation of libtool libraries install install libraries or executables link create a library or an executable uninstall remove libraries from an installed directory MODE-ARGS vary depending on the MODE. Try \`$modename --help --mode=MODE' for a more detailed description of MODE. Report bugs to ." exit $EXIT_SUCCESS ;; clean) $echo \ "Usage: $modename [OPTION]... --mode=clean RM [RM-OPTION]... FILE... Remove files from the build directory. RM is the name of the program to use to delete files associated with each FILE (typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed to RM. If FILE is a libtool library, object or program, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; compile) $echo \ "Usage: $modename [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE Compile a source file into a libtool library object. This mode accepts the following additional options: -o OUTPUT-FILE set the output file name to OUTPUT-FILE -prefer-pic try to building PIC objects only -prefer-non-pic try to building non-PIC objects only -static always build a \`.o' file suitable for static linking COMPILE-COMMAND is a command to be used in creating a \`standard' object file from the given SOURCEFILE. The output file name is determined by removing the directory component from SOURCEFILE, then substituting the C source code suffix \`.c' with the library object suffix, \`.lo'." ;; execute) $echo \ "Usage: $modename [OPTION]... --mode=execute COMMAND [ARGS]... Automatically set library path, then run a program. This mode accepts the following additional options: -dlopen FILE add the directory containing FILE to the library path This mode sets the library path environment variable according to \`-dlopen' flags. If any of the ARGS are libtool executable wrappers, then they are translated into their corresponding uninstalled binary, and any of their required library directories are added to the library path. Then, COMMAND is executed, with ARGS as arguments." ;; finish) $echo \ "Usage: $modename [OPTION]... --mode=finish [LIBDIR]... Complete the installation of libtool libraries. Each LIBDIR is a directory that contains libtool libraries. The commands that this mode executes may require superuser privileges. Use the \`--dry-run' option if you just want to see what would be executed." ;; install) $echo \ "Usage: $modename [OPTION]... --mode=install INSTALL-COMMAND... Install executables or libraries. INSTALL-COMMAND is the installation command. The first component should be either the \`install' or \`cp' program. The rest of the components are interpreted as arguments to that command (only BSD-compatible install options are recognized)." ;; link) $echo \ "Usage: $modename [OPTION]... --mode=link LINK-COMMAND... Link object files or libraries together to form another library, or to create an executable program. LINK-COMMAND is a command using the C compiler that you would use to create a program from several object files. The following components of LINK-COMMAND are treated specially: -all-static do not do any dynamic linking at all -avoid-version do not add a version suffix if possible -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) -export-symbols SYMFILE try to export only the symbols listed in SYMFILE -export-symbols-regex REGEX try to export only the symbols matching REGEX -LLIBDIR search LIBDIR for required installed libraries -lNAME OUTPUT-FILE requires the installed library libNAME -module build a library that can dlopened -no-fast-install disable the fast-install mode -no-install link a not-installable executable -no-undefined declare that a library does not refer to external symbols -o OUTPUT-FILE create OUTPUT-FILE from the specified objects -objectlist FILE Use a list of object files found in FILE to specify objects -precious-files-regex REGEX don't remove output files matching REGEX -release RELEASE specify package release information -rpath LIBDIR the created library will eventually be installed in LIBDIR -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries -static do not do any dynamic linking of libtool libraries -version-info CURRENT[:REVISION[:AGE]] specify library version info [each variable defaults to 0] All other options (arguments beginning with \`-') are ignored. Every other argument is treated as a filename. Files ending in \`.la' are treated as uninstalled libtool libraries, other files are standard or library object files. If the OUTPUT-FILE ends in \`.la', then a libtool library is created, only library objects (\`.lo' files) may be specified, and \`-rpath' is required, except when creating a convenience library. If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created using \`ar' and \`ranlib', or on Windows using \`lib'. If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file is created, otherwise an executable program is created." ;; uninstall) $echo \ "Usage: $modename [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... Remove libraries from an installation directory. RM is the name of the program to use to delete files associated with each FILE (typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed to RM. If FILE is a libtool library, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; *) $echo "$modename: invalid operation mode \`$mode'" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE ;; esac $echo $echo "Try \`$modename --help' for more information about other modes." exit $EXIT_SUCCESS # The TAGs below are defined such that we never get into a situation # in which we disable both kinds of libraries. Given conflicting # choices, we go for a static library, that is the most portable, # since we can't tell whether shared libraries were disabled because # the user asked for that or because the platform doesn't support # them. This is particularly important on AIX, because we don't # support having both static and shared libraries enabled at the same # time on that platform, so we default to a shared-only configuration. # If a disable-shared tag is given, we'll fallback to a static-only # configuration. But we'll never go from static-only to shared-only. # ### BEGIN LIBTOOL TAG CONFIG: disable-shared build_libtool_libs=no build_old_libs=yes # ### END LIBTOOL TAG CONFIG: disable-shared # ### BEGIN LIBTOOL TAG CONFIG: disable-static build_old_libs=`case $build_libtool_libs in yes) $echo no;; *) $echo yes;; esac` # ### END LIBTOOL TAG CONFIG: disable-static # Local Variables: # mode:shell-script # sh-indentation:2 # End: tla-1.3.5+dfsg/src/libneon/doc/0000755000175000017500000000000010457621776014736 5ustar userusertla-1.3.5+dfsg/src/libneon/doc/using-neon.txt0000644000175000017500000001331610457621776017565 0ustar useruser Guide to neon ============= Using libneon from applications ------------------------------- The neon source package is designed to be easily incorporated into applications: - autoconf macros are distributed in the 'macros' subdirectory of the neon distribution. Use NEON_LIBRARY from your configure.in to check for the presence of the neon library installed on the system. The macro adds an '--with-neon=...' argument to configure, which allows the user to specify a location for the library (the standard /usr and /usr/local directories are checked automatically without having to be specified). - The 'src' directory of the neon package can be imported directly into your application, if you do not wish to add an external dependency. If you wish to bundle, use the NEON_BUNDLED macro to configure neon in your application: here, the neon sources are bundled in a directory called 'libneon': NEON_BUNDLED(libneon, ...) If your application supports builds where srcdir != builddir, you should use the NEON_VPATH_BUNDLED macro like this: NEON_VPATH_BUNDLED(${srcdir}/libneon, libneon, ...) (thanks to Peter Moulder for getting this working properly). If you use this macro, a '--with-included-neon' option will be added to the generated configure script. This allows the user to force the bundled neon to be used in the application, rather than any neon library found on the system. If you allow neon to be configured this way, you must also configure an XML parser. Use the NEON_XML_PARSER macro to do this. - The final argument to the _BUNDLED macros is a set of actions which are executed if the bundled build *is* chosen (rather than an external neon which might have been found on the user's system). In here, use either the NEON_LIBTOOL_BUILD or NEON_NORMAL_BUILD macro to set up the neon Makefile appropriately: including adding the neon source directory to the recursive make. - A full fragment might be: NEON_BUNDLED(libneon, [ NEON_NORMAL_BUILD NEON_XML_PARSER SUBDIRS="libneon $SUBDIRS" ]) This means the bundled neon source directory (called 'libneon') is used if no neon is found on the system, and the standard XML parser search is used. The neon API ============ neon offers two levels of API for use in applications: - Low-level HTTP request/response handling - High-level method invocation The low-level interface allows for easily designing new method handlers, taking care of things like persistent connections, authentication, and proxy servers. The high-level interface allows you to easily integrate existing HTTP (and WebDAV) methods into your application. This document details both interfaces. N.B.: Documentation is always WRONG. The definitive API reference is in src/*.c, with src/*.h is hopefully fairly similar. PLEASE NOTE: the neon API is NOT STABLE, and is not considered to be stable or backwards-compatible until version 1.0 is reached. If you are not happy with this constraint, then please either: 1. pick a version of neon and never upgrade 2. don't use neon (yet). 3. contribute sufficient development resources to neon that all bugs are fixed yesterday, features added tomorrow, and 1.0 is reached on by the end of the week. An Important Note ----------------- Most neon functions which allocate memory with malloc() will call abort() if malloc() returns NULL. This is a design decision, the rationale being: - it makes the interfaces cleaner. - if malloc() DOES return NULL there is not much you can do about it. - Apparently, malloc() won't return NULL on systems which over-commit memory (e.g. Linux), so it doesn't make any real difference anyway. The author is open to persuasion on this: mail neon@webdav.org. Namespaces ---------- neon reserves these namespaces: ne_* uri_* sock_* Eventually all symbols globally defined by the library should fall within a reserved namespace. The author is considering moving all symbols into the ne_* namespace. Note that the XML parser used will also reserve a namespace: expat takes XML_*, libxml takes xml* The http_session type --------------------- The http_session type is used whether you are writing to the low-level or the high-level interface. An http_session object is created to store data which persists beyond a single HTTP request: - Protocol options, e.g. (proxy) server details - Authentication information - Persistent connection A session is created with the 'ne_session_create' call. Before creating a request for the session, the server details must be set, as follows: ne_session *sess; /* Initialize the socket library */ sock_init(); /* Create the session */ sess = ne_session_create(); /* Optionally, set a proxy server */ ne_session_proxy(sess, "proxy.myisp.com", 8080); /* Set the server */ ne_session_server(sess, "my.server.com", 80); The proxy server should be set BEFORE the origin server; otherwise a DNS lookup will be performed on the origin server by the ne_session_server call, which may well fail if the client is firewalled. ne_session_{proxy,server} will return NE_LOOKUP if the DNS lookup fails; otherwise NE_OK. The 'ne_set_persist' call can be used to turn off persistent connection handling: it is on by default. The 'ne_set_useragent' call can be used to set the User-Agent header to be sent with requests. A product token of the form "myhttpclient/0.1.2" should be passed, and will have "neon/x.y.z" appended in the actual header sent. When a session has been finished with, it should be destroyed using ne_session_destroy. Any subsequent operations on the session object will have undefined results (i.e. will segfault). Low-level HTTP Request/Response Handling ---------------------------------------- ... tla-1.3.5+dfsg/src/libneon/doc/parsing-xml.txt0000644000175000017500000001273710457621776017752 0ustar useruser Requirements for XML parsing in neon ------------------------------------ Before describing the interface given in neon for parsing XML, here are the requirements which it must satisfy: 1. to support using either libxml or expat as the underlying parser 2. to allow "independent" sections to handle parsing one XML document 3. to map element namespaces/names to an integer for easier comparison. A description of requirement (2) is useful since it is the "hard" requirement, and adds most of the complexity of interface: WebDAV PROPFIND responses are made up of a large boilerplate XML ... etc. neon should handle the parsing of these standard elements, and expose the meaning of the response using a convenient interface. But, within the elements, there may also be fragments of XML: neon can never know how to parse these, since they are property- and hence application-specific. The simplest example of this is the DAV:resourcetype property. So there is requirement (2) that two "independent" sections of code can handle the parsing of one XML document. Callback-based XML parsing -------------------------- There are two ways of parsing XML documents commonly used: 1. Build an in-memory tree of the document 2. Use callbacks Where practical, using callbacks is more efficient than building a tree, so this is what neon uses. The standard interface for callback-based XML parsing is called SAX, so understanding the SAX interface is useful to understanding the XML parsing interface provided by neon. The SAX interface works by registering callbacks which are called *as the XML is parsed*. The most important callbacks are for 'start element' and 'end element'. For instance, if the XML document below is parsed by a SAX-like interface: Say we have registered callbacks "startelm" for 'start element' and "endelm" for 'end element'. Simplified somewhat, the callbacks will be called in this order, with these arguments: 1. startelm("hello") 2. startelm("foobar") 3. endelm("foobar") 4. endelm("hello") See the expat 'xmlparse.h' header for a more complete definition of a SAX-like interface. The hip_xml interface --------------------- The hip_xml interface satisfies requirement (2) by introducing the "handler" concept. A handler is made up of these things: - a set of XML elements - a callback to validate an element - a callback which is called when an element is opened - a callback which is called when an element is closed - (optionally, a callback which is called for CDATA) Registering a handler essentially says: "If you encounter any of this set of elements, I want these callbacks to be called." Handlers are kept in a STACK inside hip_xml. The first handler registered becomes the BASE of the stack, subsequent handlers are PUSHed on top. During XML parsing, the handler which is used for an XML element is recorded. When a new element is started, the search for a handler for this element begins at the handler used for the parent element, and carries on up the stack. For the root element, the search always starts at the BASE of the stack. A user's guide to hip_xml ------------------------- The first thing to do when using hip_xml is to know what set of XML elements you are going to be parsing. This can usually be done by looking at the DTD provided for the documents you are going to be parsing. The DTD is also very useful in writing the 'validate' callback function, since it can tell you what parent/child pairs are valid, and which aren't. In this example, we'll parse XML documents which look like: foo bar So, given the set of elements, declare the element id's and the element array: #define ELM_listofthings (HIP_ELM_UNUSED) #define ELM_a_thing (HIP_ELM_UNUSED + 1) const static struct my_elms[] = { { "http://things.org/", "list-of-things", ELM_listofthings, 0 }, { "http://things.org/", "a-thing", ELM_a_thing, HIP_XML_CDATA }, { NULL } }; This declares we know about two elements: list-of-things, and a-thing, and that the 'a-thing' element contains character data. The definition of the validation callback is very simple: static int validate(hip_xml_elmid parent, hip_xml_elmid child) { /* Only allow 'list-of-things' as the root element. */ if (parent == HIP_ELM_root && child == ELM_listofthings || parent = ELM_listofthings && child == ELM_a_thing) { return HIP_XML_VALID; } else { return HIP_XML_INVALID; } } For this example, we can ignore the start-element callback, and just use the end-element callback: static int endelm(void *userdata, const struct hip_xml_elm *s, const char *cdata) { printf("Got a thing: %s\n", cdata); return 0; } This endelm callback just prints the cdata which was contained in the "a-thing" element. Now, on to parsing. A new parser object is created for parsing each XML document. Creating a new parser object is as simple as: hip_xml_parser *parser; parser = hip_xml_create(); Next register the handler, passing NULL as the start-element callback, and also as userdata, which we don't use here. hip_xml_push_handler(parser, my_elms, validate, NULL, endelm, NULL); Finally, call hip_xml_parse, passing the chunks of XML document to the hip_xml as you get them. The output should be: Got a thing: foo Got a thing: bar for the XML document. tla-1.3.5+dfsg/src/libneon/doc/ssl.xml0000644000175000017500000000175410457621776016270 0ustar useruser Secure connections: HTTP over SSL This section gives an introduction to SSL. The text is inspired by . &neon; supports the use of HTTP over SSLThe term SSL is used throughout this section to refer in general to both the SSL protocol developed by Netscape and its successor TLS, as adopted by the IETF. to implement secure connections. A secure connection in this context means a connection which has integrity, secrecy and is authenticated. Applications must go to some effort to correctly support secure connections—an application based on &neon; does not magically become secure simply by flicking a switch and enabling the use of SSL. tla-1.3.5+dfsg/src/libneon/doc/html.xsl0000644000175000017500000000460310457621776016435 0ustar useruser ../manual.css programlisting
tla-1.3.5+dfsg/src/libneon/doc/feat.xml0000644000175000017500000000560310457621776016403 0ustar useruser Feature list The major features of the neon library are as follows: A high-level interface to common HTTP and WebDAV methods. This allows you to easily dispatch a GET or a MKCOL request against a resource with a single function call. A low-level interface for HTTP request handling; allowing you to implement requests using arbitrary methods and request headers, capture arbitrary response headers, and so on. Persistent connection support; neon groups a set of requests to a server into a "session"; requests within that session can use a persistent (also known as "keep-alive") connection. Modern HTTP authentication support: a complete implementation of the new authentication standard, RFC2617, supporting the Digest (MD5) and Basic schemes, including integrity checking. Credentials are supplied by an application-defined callback. Proxy server support; a session can be set to use a proxy server. Authentication is supported for the Proxy as well as the origin server. Complete SSL support; a simple interface for enabling SSL, hiding the complexity of using an SSL library directly. Client certificate support, callback-based server certificate verification, along with functions to load trusted CA certificates. Generic XML parsing interface for handling XML response bodies using SAX-like callbacks. Both the expat and libxml XML parser libraries are supported. WebDAV metadata support; set and remove properties, query properties (PROPFIND); simple interface for retrieving "flat" byte-string properties, more advanced support for parsing "complex" XML structured properties. Build environment support: the neon source tree is designed so that it can be embedded in your application's build tree; autoconf macros are supplied for integration. To get started quickly a script is included, to easily determine how to compile and link against an installed copy of neon Complete test suite: the neon test suite comprises half as many lines of source code as the library itself, including many tests for protocol compliance in network behaviour, and that the library implementation meets the guarantees made by the API. tla-1.3.5+dfsg/src/libneon/doc/biblio.xml0000644000175000017500000000610610457621776016723 0ustar useruser SSL-and-TLS <ulink url="http://www.rtfm.com/sslbook/">SSL and TLS: Designing and Building Secure Systems</ulink> EricRescorla 0-201-62598-3 Addison-Wesley March 2001 REC-XML-names JamesClark <ulink url="http://www.w3.org/TR/xslt">XSL Transformations (XSLT) Version 1.0</ulink> W3C Recommendation 16 November 1999 RFC2616 <ulink url="http://www.ietf.org/rfc/rfc2616.txt">Hypertext Transfer Protocol—HTTP/1.1</ulink> RoyFielding JimGettys JeffMogul HenrikFrystyk LarryMasinter PaulLeach TimBerners-Lee IETF June 1999 RFC2518 <ulink url="http://www.ietf.org/rfc/rfc2518.txt">HTTP Extensions for Distributed Authoring—WEBDAV</ulink> YaronGoland JimWhitehead AsadFaizi SteveCarter DelJensen IETF February 1999 RFC3280 <ulink url="http://www.ietf.org/rfc/rfc3280.txt">Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile</ulink> RusselHousley WarwickFord TimPolk DavidSolo IETF April 2002 tla-1.3.5+dfsg/src/libneon/doc/manual.xml0000644000175000017500000001343110457621776016737 0ustar useruser %isoent; %isopub; NULL"> NUL"> start-element"> character-data"> end-element"> ]> neon HTTP/WebDAV client library JoeOrton
neon@webdav.org
2001-2003Joe Orton Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; with no Invariant Sections, with no Front-Cover Texts, and with no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License".
Introduction This chapter provides an introduction to neon, giving an overview of the range of features offered, and some general guidelines for using the neon API. neon aims to provide a modern, flexible, and simple API in the C programming language for implementing HTTP and WebDAV support. The WebDAV functionality is entirely separate from the basic HTTP functionality; neon can be used simply as an HTTP client library, ignoring the WebDAV support if desired. §ion.features; §ion.using; The &neon; C language interface The documentation for the &neon; interface is split between this chapter, which gives a broad introduction to the abstractions exposed by the library, and , which gives a function-by-function breakdown of the interface. §ion.xml; neon API reference &date; neon &version; neon API reference &refneon; &refconfig; &refreqhdr; &refresolve; &refbuf; &refbufapp; &refbufutil; &refbufcr; &refbufdest; &referr; &refgetst; &refiaddr; &refalloc; &refreq; &refsess; &refopts; &refreqbody; &refauth; &refshave; &refinit; &refsslcert; &refsslcert2; &refsslcertio; &refssldname; &refssltrust; &refsslvfy; &refclicert; &refstatus; &reftok; &refvers; &biblio; &fdl;
tla-1.3.5+dfsg/src/libneon/doc/fdl.sgml0000644000175000017500000005240210457621776016372 0ustar useruser GNU Free Documentation License Version 1.1, March 2000
Copyright (C) 2000 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.
PREAMBLE The purpose of this License is to make a manual, textbook, or other written document "free" in the sense of freedom: to assure everyone the effective freedom to copy and redistribute it, with or without modifying it, either commercially or noncommercially. Secondarily, this License preserves for the author and publisher a way to get credit for their work, while not being considered responsible for modifications made by others. This License is a kind of "copyleft", which means that derivative works of the document must themselves be free in the same sense. It complements the GNU General Public License, which is a copyleft license designed for free software. We have designed this License in order to use it for manuals for free software, because free software needs free documentation: a free program should come with manuals providing the same freedoms that the software does. But this License is not limited to software manuals; it can be used for any textual work, regardless of subject matter or whether it is published as a printed book. We recommend this License principally for works whose purpose is instruction or reference. APPLICABILITY AND DEFINITIONS This License applies to any manual or other work that contains a notice placed by the copyright holder saying it can be distributed under the terms of this License. The "Document", below, refers to any such manual or work. Any member of the public is a licensee, and is addressed as "you". A "Modified Version" of the Document means any work containing the Document or a portion of it, either copied verbatim, or with modifications and/or translated into another language. A "Secondary Section" is a named appendix or a front-matter section of the Document that deals exclusively with the relationship of the publishers or authors of the Document to the Document's overall subject (or to related matters) and contains nothing that could fall directly within that overall subject. (For example, if the Document is in part a textbook of mathematics, a Secondary Section may not explain any mathematics.) The relationship could be a matter of historical connection with the subject or with related matters, or of legal, commercial, philosophical, ethical or political position regarding them. The "Invariant Sections" are certain Secondary Sections whose titles are designated, as being those of Invariant Sections, in the notice that says that the Document is released under this License. The "Cover Texts" are certain short passages of text that are listed, as Front-Cover Texts or Back-Cover Texts, in the notice that says that the Document is released under this License. A "Transparent" copy of the Document means a machine-readable copy, represented in a format whose specification is available to the general public, whose contents can be viewed and edited directly and straightforwardly with generic text editors or (for images composed of pixels) generic paint programs or (for drawings) some widely available drawing editor, and that is suitable for input to text formatters or for automatic translation to a variety of formats suitable for input to text formatters. A copy made in an otherwise Transparent file format whose markup has been designed to thwart or discourage subsequent modification by readers is not Transparent. A copy that is not "Transparent" is called "Opaque". Examples of suitable formats for Transparent copies include plain ASCII without markup, Texinfo input format, LaTeX input format, SGML or XML using a publicly available DTD, and standard-conforming simple HTML designed for human modification. Opaque formats include PostScript, PDF, proprietary formats that can be read and edited only by proprietary word processors, SGML or XML for which the DTD and/or processing tools are not generally available, and the machine-generated HTML produced by some word processors for output purposes only. The "Title Page" means, for a printed book, the title page itself, plus such following pages as are needed to hold, legibly, the material this License requires to appear in the title page. For works in formats which do not have any title page as such, "Title Page" means the text near the most prominent appearance of the work's title, preceding the beginning of the body of the text. VERBATIM COPYING You may copy and distribute the Document in any medium, either commercially or noncommercially, provided that this License, the copyright notices, and the license notice saying this License applies to the Document are reproduced in all copies, and that you add no other conditions whatsoever to those of this License. You may not use technical measures to obstruct or control the reading or further copying of the copies you make or distribute. However, you may accept compensation in exchange for copies. If you distribute a large enough number of copies you must also follow the conditions in section 3. You may also lend copies, under the same conditions stated above, and you may publicly display copies. COPYING IN QUANTITY If you publish printed copies of the Document numbering more than 100, and the Document's license notice requires Cover Texts, you must enclose the copies in covers that carry, clearly and legibly, all these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover. Both covers must also clearly and legibly identify you as the publisher of these copies. The front cover must present the full title with all words of the title equally prominent and visible. You may add other material on the covers in addition. Copying with changes limited to the covers, as long as they preserve the title of the Document and satisfy these conditions, can be treated as verbatim copying in other respects. If the required texts for either cover are too voluminous to fit legibly, you should put the first ones listed (as many as fit reasonably) on the actual cover, and continue the rest onto adjacent pages. If you publish or distribute Opaque copies of the Document numbering more than 100, you must either include a machine-readable Transparent copy along with each Opaque copy, or state in or with each Opaque copy a publicly-accessible computer-network location containing a complete Transparent copy of the Document, free of added material, which the general network-using public has access to download anonymously at no charge using public-standard network protocols. If you use the latter option, you must take reasonably prudent steps, when you begin distribution of Opaque copies in quantity, to ensure that this Transparent copy will remain thus accessible at the stated location until at least one year after the last time you distribute an Opaque copy (directly or through your agents or retailers) of that edition to the public. It is requested, but not required, that you contact the authors of the Document well before redistributing any large number of copies, to give them a chance to provide you with an updated version of the Document. MODIFICATIONS You may copy and distribute a Modified Version of the Document under the conditions of sections 2 and 3 above, provided that you release the Modified Version under precisely this License, with the Modified Version filling the role of the Document, thus licensing distribution and modification of the Modified Version to whoever possesses a copy of it. In addition, you must do these things in the Modified Version: Use in the Title Page (and on the covers, if any) a title distinct from that of the Document, and from those of previous versions (which should, if there were any, be listed in the History section of the Document). You may use the same title as a previous version if the original publisher of that version gives permission. List on the Title Page, as authors, one or more persons or entities responsible for authorship of the modifications in the Modified Version, together with at least five of the principal authors of the Document (all of its principal authors, if it has less than five). State on the Title page the name of the publisher of the Modified Version, as the publisher. Preserve all the copyright notices of the Document. Add an appropriate copyright notice for your modifications adjacent to the other copyright notices. Include, immediately after the copyright notices, a license notice giving the public permission to use the Modified Version under the terms of this License, in the form shown in the Addendum below. Preserve in that license notice the full lists of Invariant Sections and required Cover Texts given in the Document's license notice. Include an unaltered copy of this License. Preserve the section entitled "History", and its title, and add to it an item stating at least the title, year, new authors, and publisher of the Modified Version as given on the Title Page. If there is no section entitled "History" in the Document, create one stating the title, year, authors, and publisher of the Document as given on its Title Page, then add an item describing the Modified Version as stated in the previous sentence. Preserve the network location, if any, given in the Document for public access to a Transparent copy of the Document, and likewise the network locations given in the Document for previous versions it was based on. These may be placed in the "History" section. You may omit a network location for a work that was published at least four years before the Document itself, or if the original publisher of the version it refers to gives permission. In any section entitled "Acknowledgements" or "Dedications", preserve the section's title, and preserve in the section all the substance and tone of each of the contributor acknowledgements and/or dedications given therein. Preserve all the Invariant Sections of the Document, unaltered in their text and in their titles. Section numbers or the equivalent are not considered part of the section titles. Delete any section entitled "Endorsements". Such a section may not be included in the Modified Version. Do not retitle any existing section as "Endorsements" or to conflict in title with any Invariant Section. If the Modified Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no material copied from the Document, you may at your option designate some or all of these sections as invariant. To do this, add their titles to the list of Invariant Sections in the Modified Version's license notice. These titles must be distinct from any other section titles. You may add a section entitled "Endorsements", provided it contains nothing but endorsements of your Modified Version by various parties--for example, statements of peer review or that the text has been approved by an organization as the authoritative definition of a standard. You may add a passage of up to five words as a Front-Cover Text, and a passage of up to 25 words as a Back-Cover Text, to the end of the list of Cover Texts in the Modified Version. Only one passage of Front-Cover Text and one of Back-Cover Text may be added by (or through arrangements made by) any one entity. If the Document already includes a cover text for the same cover, previously added by you or by arrangement made by the same entity you are acting on behalf of, you may not add another; but you may replace the old one, on explicit permission from the previous publisher that added the old one. The author(s) and publisher(s) of the Document do not by this License give permission to use their names for publicity for or to assert or imply endorsement of any Modified Version. COMBINING DOCUMENTS You may combine the Document with other documents released under this License, under the terms defined in section 4 above for modified versions, provided that you include in the combination all of the Invariant Sections of all of the original documents, unmodified, and list them all as Invariant Sections of your combined work in its license notice. The combined work need only contain one copy of this License, and multiple identical Invariant Sections may be replaced with a single copy. If there are multiple Invariant Sections with the same name but different contents, make the title of each such section unique by adding at the end of it, in parentheses, the name of the original author or publisher of that section if known, or else a unique number. Make the same adjustment to the section titles in the list of Invariant Sections in the license notice of the combined work. In the combination, you must combine any sections entitled "History" in the various original documents, forming one section entitled "History"; likewise combine any sections entitled "Acknowledgements", and any sections entitled "Dedications". You must delete all sections entitled "Endorsements." COLLECTIONS OF DOCUMENTS You may make a collection consisting of the Document and other documents released under this License, and replace the individual copies of this License in the various documents with a single copy that is included in the collection, provided that you follow the rules of this License for verbatim copying of each of the documents in all other respects. You may extract a single document from such a collection, and distribute it individually under this License, provided you insert a copy of this License into the extracted document, and follow this License in all other respects regarding verbatim copying of that document. AGGREGATION WITH INDEPENDENT WORKS A compilation of the Document or its derivatives with other separate and independent documents or works, in or on a volume of a storage or distribution medium, does not as a whole count as a Modified Version of the Document, provided no compilation copyright is claimed for the compilation. Such a compilation is called an "aggregate", and this License does not apply to the other self-contained works thus compiled with the Document, on account of their being thus compiled, if they are not themselves derivative works of the Document. If the Cover Text requirement of section 3 is applicable to these copies of the Document, then if the Document is less than one quarter of the entire aggregate, the Document's Cover Texts may be placed on covers that surround only the Document within the aggregate. Otherwise they must appear on covers around the whole aggregate. TRANSLATION Translation is considered a kind of modification, so you may distribute translations of the Document under the terms of section 4. Replacing Invariant Sections with translations requires special permission from their copyright holders, but you may include translations of some or all Invariant Sections in addition to the original versions of these Invariant Sections. You may include a translation of this License provided that you also include the original English version of this License. In case of a disagreement between the translation and the original English version of this License, the original English version will prevail. TERMINATION You may not copy, modify, sublicense, or distribute the Document except as expressly provided for under this License. Any other attempt to copy, modify, sublicense or distribute the Document is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. FUTURE REVISIONS OF THIS LICENSE The Free Software Foundation may publish new, revised versions of the GNU Free Documentation License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. See http://www.gnu.org/copyleft/. Each version of the License is given a distinguishing version number. If the Document specifies that a particular numbered version of this License "or any later version" applies to it, you have the option of following the terms and conditions either of that specified version or of any later version that has been published (not as a draft) by the Free Software Foundation. If the Document does not specify a version number of this License, you may choose any version ever published (not as a draft) by the Free Software Foundation. How to use this License for your documents To use this License in a document you have written, include a copy of the License in the document and put the following copyright and license notices just after the title page:
Copyright (c) YEAR YOUR NAME. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; with the Invariant Sections being LIST THEIR TITLES, with the Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST. A copy of the license is included in the section entitled "GNU Free Documentation License".
If you have no Invariant Sections, write "with no Invariant Sections" instead of saying which ones are invariant. If you have no Front-Cover Texts, write "no Front-Cover Texts" instead of "Front-Cover Texts being LIST"; likewise for Back-Cover Texts. If your document contains nontrivial examples of program code, we recommend releasing these examples in parallel under your choice of free software license, such as the GNU General Public License, to permit their use in free software.
tla-1.3.5+dfsg/src/libneon/doc/version.xml0000644000175000017500000000000610457621776017141 0ustar useruser0.24.7tla-1.3.5+dfsg/src/libneon/doc/refentry.xml0000644000175000017500000000203010457621776017311 0ustar useruser ne_foo 3 ne_foo ne_bar functions which do foo and bar #include <ne_header.h> void ne_set_useragent ne_session *session const char *product Description XXX Return value XXX Examples XXX See also XXX tla-1.3.5+dfsg/src/libneon/doc/date.xml0000644000175000017500000000001410457621776016370 0ustar useruser 5 July 2004tla-1.3.5+dfsg/src/libneon/doc/manual.css0000644000175000017500000000206310457621776016726 0ustar useruser p, pre.funcsynopsisinfo { margin-left: 0.4em; margin-right: 0.4em; } span.term { margin-left: 0.6em; margin-bottom: 0.0em } div.legalnotice { font-size: 80%; margin-left: 2em; } a:visited { color: darkgreen; } div.navheader { border-top: 1px solid #bbf2bb; } div.navfooter { border-bottom: 1px solid #bbf2bb; } div.funcprototype { margin-top: 0.2em; margin-left: 0.4em; margin-bottom: 0.2em; } pre.programlisting, pre.screen { background-color: #dddddd; margin-left: 0.6em; margin-right: 1em; padding: 0.3em; width: 50em; } div.funcsynopsis, div.cmdsynopsis { background-color: #dddddd; margin-left: 0.4em; margin-right: 0.4em; padding: 0.1em; } div.warning { border: 1px solid #777777; } h1.title { border-bottom: thick solid #bbf2bb; padding-bottom: 0.1em; } div.toc { border-left: thick solid #bbf2bb; padding-left: 0.5em; } h2, h3 { padding-left: 0.2em; padding-top: -0.1em; } h2 { background-color: #bbf2bb; font-size: 110%; padding-bottom: 0.3em; padding-top: 0.2em; spacing-top: 0.1em; } h3 { border-bottom: 1px solid #bbf2bb; } tla-1.3.5+dfsg/src/libneon/doc/man/0000755000175000017500000000000010457621776015511 5ustar userusertla-1.3.5+dfsg/src/libneon/doc/man/ne_ssl_trust_default_ca.30000644000175000017500000000003510457621776022466 0ustar useruser.so man3/ne_ssl_trust_cert.3 tla-1.3.5+dfsg/src/libneon/doc/man/ne_token.30000644000175000017500000000317710457621776017407 0ustar useruser.\"Generated by db2man.xsl. Don't modify this, modify the source. .de Sh \" Subsection .br .if t .Sp .ne 5 .PP \fB\\$1\fR .PP .. .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Ip \" List item .br .ie \\n(.$>=3 .ne \\$3 .el .ne 3 .IP "\\$1" \\$2 .. .TH "NE_TOKEN" 3 "5 July 2004" "neon 0.24.7" "neon API reference" .SH NAME ne_token, ne_qtoken \- string tokenizers .SH "SYNOPSIS" .ad l .hy 0 #include .sp .HP 16 char\ *\fBne_token\fR\ (char\ **\fIstr\fR, char\ \fIsep\fR); .HP 17 char\ *\fBne_qtoken\fR\ (char\ **\fIstr\fR, char\ \fIsep\fR, const\ char\ *\fIquotes\fR); .ad .hy .SH "DESCRIPTION" .PP \fBne_token\fR and \fBne_qtoken\fR tokenize the string at the location stored in the pointer \fIstr\fR\&. Each time the function is called, it returns the next token, and modifies the \fIstr\fR pointer to point to the remainer of the string, or NULL if there are no more tokens in the string\&. A token is delimited by the separator character \fIsep\fR; if \fBne_qtoken\fR is used any quoted segments of the string are skipped when searching for a separator\&. A quoted segment is enclosed in a pair of one of the characters given in the \fIquotes\fR string\&. .PP The string being tokenized is modified each time the tokenizing function is called; replacing the next separator character with a NUL terminator\&. .SH "EXAMPLES" .PP The following function prints out each token in a comma\-separated string \fIlist\fR, which is modified in\-place: .nf static void splitter(char *list) { do { printf("Token: %s\\n", ne_token(&list, ',')); while (list); } .fi .SH AUTHOR Joe Orton . tla-1.3.5+dfsg/src/libneon/doc/man/ne_strdup.30000644000175000017500000000002510457621776017575 0ustar useruser.so man3/ne_malloc.3 tla-1.3.5+dfsg/src/libneon/doc/man/ne_buffer_zappend.30000644000175000017500000000003410457621776021246 0ustar useruser.so man3/ne_buffer_append.3 tla-1.3.5+dfsg/src/libneon/doc/man/ne_strndup.30000644000175000017500000000002510457621776017753 0ustar useruser.so man3/ne_malloc.3 tla-1.3.5+dfsg/src/libneon/doc/man/ne_add_request_header.30000644000175000017500000000244710457621776022076 0ustar useruser.\"Generated by db2man.xsl. Don't modify this, modify the source. .de Sh \" Subsection .br .if t .Sp .ne 5 .PP \fB\\$1\fR .PP .. .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Ip \" List item .br .ie \\n(.$>=3 .ne \\$3 .el .ne 3 .IP "\\$1" \\$2 .. .TH "NE_ADD_REQUEST_HEA" 3 "5 July 2004" "neon 0.24.7" "neon API reference" .SH NAME ne_add_request_header, ne_print_request_header \- add headers to a request .SH "SYNOPSIS" .ad l .hy 0 #include .sp .HP 28 void\ \fBne_add_request_header\fR\ (ne_request\ *\fIrequest\fR, const\ char\ *\fIname\fR, const\ char\ *\fIvalue\fR); .HP 30 void\ \fBne_print_request_header\fR\ (ne_request\ *\fIrequest\fR, const\ char\ *\fIname\fR, const\ char\ *\fIformat\fR, \&.\&.\&.); .ad .hy .SH "DESCRIPTION" .PP The functions \fBne_add_request_header\fR and \fBne_print_request_header\fR can be used to add headers to a request, before it is sent\&. .PP \fBne_add_request_header\fR simply adds a header of given \fIname\fR, with given \fIvalue\fR\&. .PP \fBne_print_request_header\fR adds a header of given \fIname\fR, taking the value from the \fBprintf\fR\-like \fIformat\fR string parameter and subsequent variable\-length argument list\&. .SH "SEE ALSO" .PP \fBne_request_create\fR(3) .SH AUTHOR Joe Orton . tla-1.3.5+dfsg/src/libneon/doc/man/ne_addr_destroy.30000644000175000017500000000003310457621776020736 0ustar useruser.so man3/ne_addr_resolve.3 tla-1.3.5+dfsg/src/libneon/doc/man/ne_addr_resolve.30000644000175000017500000000651110457621776020733 0ustar useruser.\"Generated by db2man.xsl. Don't modify this, modify the source. .de Sh \" Subsection .br .if t .Sp .ne 5 .PP \fB\\$1\fR .PP .. .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Ip \" List item .br .ie \\n(.$>=3 .ne \\$3 .el .ne 3 .IP "\\$1" \\$2 .. .TH "NE_ADDR_RESOLVE" 3 "5 July 2004" "neon 0.24.7" "neon API reference" .SH NAME ne_addr_resolve, ne_addr_result, ne_addr_first, ne_addr_next, ne_addr_error, ne_addr_destroy \- functions to resolve hostnames to addresses .SH "SYNOPSIS" .ad l .hy 0 #include .sp .HP 31 ne_sock_addr\ *\fBne_addr_resolve\fR\ (const\ char\ *\fIhostname\fR, int\ \fIflags\fR); .HP 20 int\ \fBne_addr_result\fR\ (const\ ne_sock_addr\ *\fIaddr\fR); .HP 36 const\ ne_inet_addr\ *\fBne_addr_first\fR\ (ne_sock_addr\ *\fIaddr\fR); .HP 35 const\ ne_inet_addr\ *\fBne_addr_next\fR\ (ne_sock_addr\ *\fIaddr\fR); .HP 21 char\ *\fBne_addr_error\fR\ (const\ ne_sock_addr\ *\fIaddr\fR, char\ *\fIbuffer\fR, size_t\ \fIbufsiz\fR); .HP 22 void\ \fBne_addr_destroy\fR\ (ne_sock_addr\ *\fIaddr\fR); .ad .hy .SH "DESCRIPTION" .PP The \fBne_addr_resolve\fR function resolves the given \fIhostname\fR, returning an \fBne_sock_addr\fR object representing the address (or addresses) associated with the hostname\&. The \fIflags\fR parameter is currently unused, and must be passed as 0\&. .PP The \fIhostname\fR passed to \fBne_addr_resolve\fR can be a DNS hostname (e\&.g\&. "www\&.example\&.com") or an IPv4 dotted quad (e\&.g\&. "192\&.0\&.34\&.72"); or, on systems which support IPv6, an IPv6 hex address, which may be enclosed in brackets, e\&.g\&. "[::1]"\&. .PP To determine whether the hostname was successfully resolved, the \fBne_addr_result\fR function is used, which returns non\-zero if an error occurred\&. If an error did occur, the \fBne_addr_error\fR function can be used, which will copy the error string into a given \fIbuffer\fR (of size \fIbufsiz\fR)\&. .PP The functions \fBne_addr_first\fR and \fBne_addr_next\fR are used to retrieve the Internet addresses associated with an address object which has been successfully resolved\&. \fBne_addr_first\fR returns the first address; \fBne_addr_next\fR returns the next address after the most recent call to \fBne_addr_next\fR or \fBne_addr_first\fR, or NULL if there are no more addresses\&. The \fBne_inet_addr\fR pointer returned by these functions can be passed to \fBne_sock_connect\fR to connect a socket\&. .PP After the address object has been used, it should be destroyed using \fBne_addr_destroy\fR\&. .SH "RETURN VALUE" .PP \fBne_addr_resolve\fR returns a pointer to an address object, and never NULL\&. \fBne_addr_error\fR returns the \fIbuffer\fR parameter \&. .SH "EXAMPLES" .PP The code below prints out the set of addresses associated with the hostname www\&.google\&.com\&. .nf ne_sock_addr *addr; char buf[256]; addr = ne_addr_resolve("www\&.google\&.com", 0); if (ne_addr_result(addr)) { printf("Could not resolve www\&.google\&.com: %s\\n", ne_addr_error(addr, buf, sizeof buf)); } else { const ne_inet_addr *ia; printf("www\&.google\&.com:"); for (ia = ne_addr_first(addr); ia != NULL; ia = ne_addr_next(addr)) { printf(" %s", ne_iaddr_print(ia, buf, sizeof buf)); } putchar('\\n'); } ne_addr_destroy(addr); .fi .SH "SEE ALSO" .PP \fBne_iaddr_print\fR(3) .SH AUTHOR Joe Orton . tla-1.3.5+dfsg/src/libneon/doc/man/ne_buffer_altered.30000644000175000017500000000003310457621776021224 0ustar useruser.so man3/ne_buffer_clear.3 tla-1.3.5+dfsg/src/libneon/doc/man/ne_ssl_clicert_name.30000644000175000017500000000003710457621776021565 0ustar useruser.so man3/ne_ssl_clicert_read.3 tla-1.3.5+dfsg/src/libneon/doc/man/ne_set_proxy_auth.30000644000175000017500000000003610457621776021333 0ustar useruser.so man3/ne_set_server_auth.3 tla-1.3.5+dfsg/src/libneon/doc/man/ne_ssl_cert_signedby.30000644000175000017500000000004010457621776021753 0ustar useruser.so man3/ne_ssl_cert_identity.3 tla-1.3.5+dfsg/src/libneon/doc/man/ne_set_read_timeout.30000644000175000017500000000003410457621776021610 0ustar useruser.so man3/ne_set_useragent.3 tla-1.3.5+dfsg/src/libneon/doc/man/ne_request_create.30000644000175000017500000001004610457621776021273 0ustar useruser.\"Generated by db2man.xsl. Don't modify this, modify the source. .de Sh \" Subsection .br .if t .Sp .ne 5 .PP \fB\\$1\fR .PP .. .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Ip \" List item .br .ie \\n(.$>=3 .ne \\$3 .el .ne 3 .IP "\\$1" \\$2 .. .TH "NE_REQUEST_CREATE" 3 "5 July 2004" "neon 0.24.7" "neon API reference" .SH NAME ne_request_create, ne_request_dispatch, ne_request_destroy \- low-level HTTP request handling .SH "SYNOPSIS" .ad l .hy 0 #include .sp .HP 31 ne_request\ *\fBne_request_create\fR\ (ne_session\ *\fIsession\fR, const\ char\ *\fImethod\fR, const\ char\ *\fIpath\fR); .HP 25 int\ \fBne_request_dispatch\fR\ (ne_request\ *\fIreq\fR); .HP 25 void\ \fBne_request_destroy\fR\ (ne_request\ *\fIreq\fR); .ad .hy .SH "DESCRIPTION" .PP An HTTP request, represented by the \fBne_request\fR type, specifies that some operation is to be performed on some resource\&. The \fBne_request_create\fR function creates a request object, specifying the operation in the \fImethod\fR parameter\&. The location of the resource is determined by the server in use for the session given by the \fIsess\fR parameter, combined with the \fIpath\fR parameter\&. .PP The \fIpath\fR string used must conform to the abs_path definition given in RFC2396, with an optional "?query" part, and must be URI\-escaped by the caller (for instance, using \fBne_path_escape\fR)\&. If the string comes from an untrusted source, failure to perform URI\-escaping results in a security vulnerability\&. .PP To dispatch a request, and process the response, the \fBne_request_dispatch\fR function can be used\&. An alternative is to use the (more complex, but more flexible) combination of the \fBne_begin_request\fR, \fBne_end_request\fR, and \fBne_read_response_block\fR functions; see \fBne_begin_request\fR\&. .PP To add extra headers in the request, the functions \fBne_add_request_header\fR(3) and \fBne_print_request_header\fR(3) can be used\&. To include a message body with the request, one of the functions \fBne_set_request_body_buffer\fR, \fBne_set_request_body_fd\fR(3), or \fBne_set_request_body_provider\fR can be used\&. .PP The return value of \fBne_request_dispatch\fR indicates merely whether the request was sent and the response read successfully\&. To discover the result of the operation, \fBne_get_status\fR(3), along with any processing of the response headers and message body\&. .PP A request can only be dispatched once: calling \fBne_request_dispatch\fR more than once on a single \fBne_request\fR object produces undefined behaviour\&. Once all processing associated with the request object is complete, use the \fBne_request_destroy\fR function to destroy the resources associated with it\&. Any subsequent use of the request object produces undefined behaviour\&. .SH "RETURN VALUE" .PP The \fBne_request_create\fR function returns a pointer to a request object (and never NULL)\&. .PP The \fBne_request_dispatch\fR function returns zero if the request was dispatched successfully, and a non\-zero error code otherwise\&. .SH "ERRORS" .TP \fBNE_ERROR\fR Request failed (see session error string) .TP \fBNE_LOOKUP\fR The DNS lookup for the server (or proxy server) failed\&. .TP \fBNE_AUTH\fR Authentication failed on the server\&. .TP \fBNE_PROXYAUTH\fR Authentication failed on the proxy server\&. .TP \fBNE_CONNECT\fR A connection to the server could not be established\&. .TP \fBNE_TIMEOUT\fR A timeout occurred while waiting for the server to respond\&. .SH "EXAMPLE" .PP An example of applying a MKCOL operation to the resource at the locationhttp://www\&.example\&.com/foo/bar/: .nf ne_session *sess = ne_session_create("http", "www\&.example\&.com", 80); ne_request *req = ne_request_create(sess, "MKCOL", "/foo/bar/"); if (ne_request_dispatch(req)) { printf("Request failed: %s\\n", ne_get_error(sess)); } ne_request_destroy(req); .fi .SH "SEE ALSO" .PP \fBne_get_error\fR(3), \fBne_set_error\fR(3), \fBne_get_status\fR(3), \fBne_add_request_header\fR(3), \fBne_set_request_body_buffer\fR(3)\&. .SH AUTHOR Joe Orton . tla-1.3.5+dfsg/src/libneon/doc/man/ne_buffer_create.30000644000175000017500000000212310457621776021051 0ustar useruser.\"Generated by db2man.xsl. Don't modify this, modify the source. .de Sh \" Subsection .br .if t .Sp .ne 5 .PP \fB\\$1\fR .PP .. .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Ip \" List item .br .ie \\n(.$>=3 .ne \\$3 .el .ne 3 .IP "\\$1" \\$2 .. .TH "NE_BUFFER_CREATE" 3 "5 July 2004" "neon 0.24.7" "neon API reference" .SH NAME ne_buffer_create, ne_buffer_ncreate \- general purpose of group of functions .SH "SYNOPSIS" .ad l .hy 0 #include .sp .HP 29 ne_buffer\ *\fBne_buffer_create\fR\ (void); .HP 30 ne_buffer\ *\fBne_buffer_ncreate\fR\ (size_t\ \fIsize\fR); .ad .hy .SH "DESCRIPTION" .PP \fBne_buffer_create\fR creates a new buffer object, with an implementation\-defined initial size\&. \fBne_buffer_ncreate\fR creates an \fBne_buffer\fR where the minimum initial size is given in the \fIsize\fR parameter\&. The buffer created will contain the empty string ("")\&. .SH "RETURN VALUE" .PP Both functions return a pointer to a new buffer object, and never NULL\&. .SH "SEE ALSO" .PP \fBne_buffer\fR(3) .SH AUTHOR Joe Orton . tla-1.3.5+dfsg/src/libneon/doc/man/ne_buffer_finish.30000644000175000017500000000003510457621776021066 0ustar useruser.so man3/ne_buffer_destroy.3 tla-1.3.5+dfsg/src/libneon/doc/man/ne_get_status.30000644000175000017500000000257510457621776020452 0ustar useruser.\"Generated by db2man.xsl. Don't modify this, modify the source. .de Sh \" Subsection .br .if t .Sp .ne 5 .PP \fB\\$1\fR .PP .. .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Ip \" List item .br .ie \\n(.$>=3 .ne \\$3 .el .ne 3 .IP "\\$1" \\$2 .. .TH "NE_GET_STATUS" 3 "5 July 2004" "neon 0.24.7" "neon API reference" .SH NAME ne_get_status \- retrieve HTTP response status for request .SH "SYNOPSIS" .ad l .hy 0 #include .sp .HP 33 const\ ne_status\ *\fBne_get_status\fR\ (const\ ne_request\ *\fIrequest\fR); .ad .hy .SH "DESCRIPTION" .PP The \fBne_get_status\fR function returns a pointer to the HTTP status object giving the result of a request\&. The object returned only becomes valid once the request has been successfully dispatched (the return value of \fBne_request_dispatch\fR or \fBne_begin_request\fR was zero)\&. The object remains valid until the associated request object is destroyed\&. .SH "SEE ALSO" .PP \fBne_status\fR(3), \fBne_request_create\fR(3) .SH "EXAMPLE" .PP Display the response status code of applying the HEAD method to some resource\&. .nf ne_request *req = ne_request_create(sess, "HEAD", "/foo/bar"); if (ne_request_dispatch(req)) /* handle errors\&.\&.\&. */ else printf("Response status code was %d\\n", ne_get_status(req)\->code); ne_request_destroy(req); .fi .SH AUTHOR Joe Orton . tla-1.3.5+dfsg/src/libneon/doc/man/ne_ssl_dname_cmp.30000644000175000017500000000004110457621776021056 0ustar useruser.so man3/ne_ssl_readable_dname.3 tla-1.3.5+dfsg/src/libneon/doc/man/ne_close_connection.30000644000175000017500000000003510457621776021601 0ustar useruser.so man3/ne_session_create.3 tla-1.3.5+dfsg/src/libneon/doc/man/ne_set_request_body_buffer.30000644000175000017500000000163610457621776023176 0ustar useruser.\"Generated by db2man.xsl. Don't modify this, modify the source. .de Sh \" Subsection .br .if t .Sp .ne 5 .PP \fB\\$1\fR .PP .. .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Ip \" List item .br .ie \\n(.$>=3 .ne \\$3 .el .ne 3 .IP "\\$1" \\$2 .. .TH "NE_SET_REQUEST_" 3 "5 July 2004" "neon 0.24.7" "neon API reference" .SH NAME ne_set_request_body_buffer, ne_set_request_body_fd \- include a message body with a request .SH "SYNOPSIS" .ad l .hy 0 #include .sp .HP 33 void\ \fBne_set_request_body_buffer\fR\ (ne_request\ *\fIreq\fR, const\ char\ *\fIbuf\fR, size_t\ \fIcount\fR); .ad .hy .SH "DESCRIPTION" .PP The \fBne_set_request_body_buffer\fR function specifies that a message body should be included with the body, which is stored in the \fIcount\fR bytes buffer \fIbuf\fR\&. .SH "SEE ALSO" .PP \fBne_request_create\fR(3) .SH AUTHOR Joe Orton . tla-1.3.5+dfsg/src/libneon/doc/man/neon-config.10000644000175000017500000000470410457621776020002 0ustar useruser.\"Generated by db2man.xsl. Don't modify this, modify the source. .de Sh \" Subsection .br .if t .Sp .ne 5 .PP \fB\\$1\fR .PP .. .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Ip \" List item .br .ie \\n(.$>=3 .ne \\$3 .el .ne 3 .IP "\\$1" \\$2 .. .TH "NEON-CONFIG" 1 "5 July 2004" "neon 0.24.7" "neon" .SH NAME neon-config \- script providing information about installed copy of neon library .SH "SYNOPSIS" .ad l .hy 0 .HP 12 \fBneon\-config\fR [\fB\-\-prefix\fR] [\fB\fB\-\-cflags\fR\fR | \fB\fB\-\-libs\fR\fR | \fB\fB\-\-la\-file\fR\fR | \fB\fB\-\-support\fR\ \fIfeature\fR\fR | \fB\fB\-\-help\fR\fR | \fB\fB\-\-version\fR\fR] .ad .hy .SH "DESCRIPTION" .PP The \fBneon\-config\fR script provides information about an installed copy of the neon library\&. The \fB\-\-cflags\fR and \fB\-\-libs\fR options instruct how to compile and link an application against the library; the \fB\-\-version\fR and \fB\-\-support\fR options can help determine whether the library meets the applications requirements\&. .SH "OPTIONS" .TP \fB\-\-cflags\fR Print the flags which should be passed to the C compiler when compiling object files, when the object files use neon header files\&. .TP \fB\-\-libs\fR Print the flags which should be passed to the linker when linking an application which uses the neon library .TP \fB\-\-la\-file\fR Print the location of the libtool library script, \fIlibneon\&.la\fR, which can be used to link against neon by applications using libtool\&. .TP \fB\-\-version\fR Print the version of the library .TP \fB\-\-prefix\fR \fIdir\fR If \fIdir\fR is given; relocate output of \fB\-\-cflags\fR and \fB\-\-libs\fR as if neon was installed in given prefix directory\&. Otherwise, print the installation prefix of the library\&. .TP \fB\-\-support\fR \fIfeature\fR The script exits with success if \fIfeature\fR is supported by the library\&. .TP \fB\-\-help\fR Print help message; includes list of known features and whether they are supported or not\&. .SH "EXAMPLE" .PP Below is a Makefile fragment which could be used to build an application against an installed neon library, when the \fBneon\-config\fR script can be found in \fB$PATH\fR\&. .nf CFLAGS = `neon\-config \-\-cflags` LIBS = `neon\-config \-\-libs` OBJECTS = myapp\&.o TARGET = myapp $(TARGET): $(OBJECTS) $(CC) $(LDFLAGS) \-o $(TARGET) $(OBJECTS) $(LIBS) myapp\&.o: myapp\&.c $(CC) $(CFLAGS) \-c myapp\&.c \-o myapp\&.o .fi .SH AUTHOR Joe Orton . tla-1.3.5+dfsg/src/libneon/doc/man/ne_buffer_destroy.30000644000175000017500000000303510457621776021302 0ustar useruser.\"Generated by db2man.xsl. Don't modify this, modify the source. .de Sh \" Subsection .br .if t .Sp .ne 5 .PP \fB\\$1\fR .PP .. .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Ip \" List item .br .ie \\n(.$>=3 .ne \\$3 .el .ne 3 .IP "\\$1" \\$2 .. .TH "NE_BUFFER_DESTROY" 3 "5 July 2004" "neon 0.24.7" "neon API reference" .SH NAME ne_buffer_destroy, ne_buffer_finish \- destroy a buffer object .SH "SYNOPSIS" .ad l .hy 0 #include .sp .HP 24 void\ \fBne_buffer_destroy\fR\ (ne_buffer\ *\fIbuf\fR); .HP 24 char\ *\fBne_buffer_finish\fR\ (ne_buffer\ *\fIbuf\fR); .ad .hy .SH "DESCRIPTION" .PP \fBne_buffer_destroy\fR frees all memory associated with the buffer\&. \fBne_buffer_finish\fR frees the buffer structure, but not the actual string stored in the buffer, which is returned and must be \fBfree\fR()d by the caller\&. .PP Any use of the buffer object after calling either of these functions gives undefined behaviour\&. .SH "RETURN VALUE" .PP \fBne_buffer_finish\fR returns the \fBmalloc\fR\-allocated string stored in the buffer\&. .SH "EXAMPLES" .PP An example use of \fBne_buffer_finish\fR; the \fBduplicate\fR function returns a string made up of \fIn\fR copies of \fIstr\fR: .nf static char *duplicate(int n, const char *str) { ne_buffer *buf = ne_buffer_create(); while (n\-\-) { ne_buffer_zappend(buf, str); } return ne_buffer_finish(buf); } .fi .SH "SEE ALSO" .PP \fBne_buffer\fR(3), \fBne_buffer_create\fR(3), \fBne_buffer_zappend\fR(3) .SH AUTHOR Joe Orton . tla-1.3.5+dfsg/src/libneon/doc/man/ne_forget_auth.30000644000175000017500000000003610457621776020565 0ustar useruser.so man3/ne_set_server_auth.3 tla-1.3.5+dfsg/src/libneon/doc/man/ne_iaddr_cmp.30000644000175000017500000000003110457621776020173 0ustar useruser.so man3/ne_iaddr_make.3 tla-1.3.5+dfsg/src/libneon/doc/man/ne_request_destroy.30000644000175000017500000000003510457621776021516 0ustar useruser.so man3/ne_request_create.3 tla-1.3.5+dfsg/src/libneon/doc/man/ne_ssl_clicert_free.30000644000175000017500000000003710457621776021566 0ustar useruser.so man3/ne_ssl_clicert_read.3 tla-1.3.5+dfsg/src/libneon/doc/man/ne_oom_callback.30000644000175000017500000000002510457621776020662 0ustar useruser.so man3/ne_malloc.3 tla-1.3.5+dfsg/src/libneon/doc/man/ne_addr_error.30000644000175000017500000000003310457621776020376 0ustar useruser.so man3/ne_addr_resolve.3 tla-1.3.5+dfsg/src/libneon/doc/man/ne_realloc.30000644000175000017500000000002510457621776017675 0ustar useruser.so man3/ne_malloc.3 tla-1.3.5+dfsg/src/libneon/doc/man/ne_set_error.30000644000175000017500000000003010457621776020254 0ustar useruser.so man3/ne_get_error.3 tla-1.3.5+dfsg/src/libneon/doc/man/neon.30000644000175000017500000001142710457621776016541 0ustar useruser.\"Generated by db2man.xsl. Don't modify this, modify the source. .de Sh \" Subsection .br .if t .Sp .ne 5 .PP \fB\\$1\fR .PP .. .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Ip \" List item .br .ie \\n(.$>=3 .ne \\$3 .el .ne 3 .IP "\\$1" \\$2 .. .TH "NEON" 3 "5 July 2004" "neon 0.24.7" "neon API reference" .SH NAME neon \- HTTP and WebDAV client library .SH "DESCRIPTION" .PP neon is an HTTP and WebDAV client library\&. The major abstractions exposed are the HTTP session, created by \fBne_session_create\fR(3); and the HTTP request, created by \fBne_request_create\fR(3)\&. HTTP authentication is handled transparently for server and proxy servers, see \fBne_set_server_auth\fR(3); complete SSL/TLS support is also included, see \fBne_ssl_set_verify\fR(3)\&. .SH "CONVENTIONS" .PP Some conventions are used throughout the neon API, to provide a consistent and simple interface; these are documented below\&. .SS "Thread-safeness and global initialization" .PP neon itself is implemented to be thread\-safe (avoiding any use of global state), but relies on the operating system providing a thread\-safe resolver interface\&. Modern operating systems offer the thread\-safe \fBgetaddrinfo\fR interface, which neon supports; some others implement \fBgethostbyname\fR using thread\-local storage\&. .PP To allow thread\-safe use of the OpenSSL library, the application must register some locking callbacks in accordance with the OpenSSL documentation: \fIhttp://www.openssl.org/docs/crypto/threads.html\fR\&. .PP Some platforms and libraries used by neon require global initialization before use; notably: .TP 3 \(bu OpenSSL requires global initialization to load shared lookup tables\&. .TP \(bu The SOCKS library requires initialization before use\&. .TP \(bu The Win32 socket library requires initialization before use\&. .LP The \fBne_sock_init\fR(3) function should be called before any other use of neon to perform any necessary initialization needed for the particular platform\&. .SS "Namespaces" .PP To avoid possible collisions between names used for symbols and preprocessor macros by an application and the libraries it uses, it is good practice for each library to reserve a particular namespace prefix\&. An application which ensures it uses no names with these prefixes is then guaranteed to avoid such collisions\&. .PP The neon library reserves the use of the namespace prefixes ne_ and NE_\&. The libraries used by neon may also reserve certain namespaces; collisions between these libraries and a neon\-based application will not be detected at compile time, since the underlying library interfaces are not exposed through the neon header files\&. Such collisions can only be detected at link time, when the linker attempts to resolve symbols\&. The following list documents some of the namespaces claimed by libraries used by neon; this list may be incomplete\&. .TP SSL, ssl, TLS, tls, ERR_, BIO_, d2i_, i2d_, ASN1_ Some of the many prefixes used by the OpenSSL library; little attempt has been made to keep exported symbols within any particular prefixes for this library\&. .TP XML_, Xml[A\-Z] Namespaces used by the expat library\&. .TP xml[A\-Z], html[A\-Z], docb[A\-Z] Namespaces used by the libxml2 library; a relatively small number of symbols are used without these prefixes\&. .SS "Argument validation" .PP neon does not attempt to validate that the parameters passed to functions conform to the API (for instance, checking that pointer arguments are not NULL)\&. Any use of the neon API which is not documented to produce a certain behaviour results is said to produce undefined behaviour; it is likely that neon will segfault under these conditions\&. .SS "URI paths, WebDAV metadata" .PP The path strings passed to any function must be URI\-encoded by the application; neon never performs any URI encoding or decoding internally\&. WebDAV property names and values must be valid UTF\-8 encoded Unicode strings\&. .SS "User interaction" .PP As a pure library interface, neon will never produce output on \fBstdout\fR or \fBstderr\fR; all user interaction is the responsibilty of the application\&. .SS "Memory handling" .PP neon does not attempt to cope gracefully with an out\-of\-memory situation; instead, by default, the \fBabort\fR function is called to immediately terminate the process\&. An application may register a custom function which will be called before \fBabort\fR in such a situation; see \fBne_oom_callback\fR(3)\&. .SS "Callbacks and userdata" .PP Whenever a callback is registered, a userdata pointer is also used to allow the application to associate a context with the callback\&. The userdata is of type \fBvoid *\fR, allowing any pointer to be used\&. .SH "SEE ALSO" .PP \fBne_session_create\fR(3), \fBne_oom_callback\fR(3) .SH AUTHOR Joe Orton . tla-1.3.5+dfsg/src/libneon/doc/man/ne_version_match.30000644000175000017500000000236410457621776021125 0ustar useruser.\"Generated by db2man.xsl. Don't modify this, modify the source. .de Sh \" Subsection .br .if t .Sp .ne 5 .PP \fB\\$1\fR .PP .. .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Ip \" List item .br .ie \\n(.$>=3 .ne \\$3 .el .ne 3 .IP "\\$1" \\$2 .. .TH "NE_VERSION_MATCH" 3 "5 July 2004" "neon 0.24.7" "neon API reference" .SH NAME ne_version_match, ne_version_string \- library versioning .SH "SYNOPSIS" .ad l .hy 0 #include .sp .HP 22 int\ \fBne_version_match\fR\ (int\ \fImajor\fR, int\ \fIminor\fR); .HP 32 const\ char\ *\fBne_version_string\fR\ (void); .ad .hy .SH "DESCRIPTION" .PP The \fBne_version_match\fR function returns non\-zero if the library version is not of major version \fImajor\fR, or the minor version is less than \fIminor\fR\&. For neon versions 0\&.x, every minor version is assumed to be incompatible with every other minor version\&. .PP The \fBne_version_string\fR function returns a string giving the library version\&. .SH "EXAMPLES" .PP To require neon 1\&.x, version 1\&.2 or later: .nf if (ne_version_match(1, 2)) { printf("Library version out of date: 1\&.2 required, found %s\&.", ne_version_string()); exit(1); } .fi .SH AUTHOR Joe Orton . tla-1.3.5+dfsg/src/libneon/doc/man/ne_print_request_header.30000644000175000017500000000004110457621776022466 0ustar useruser.so man3/ne_add_request_header.3 tla-1.3.5+dfsg/src/libneon/doc/man/ne_ssl_cert_issuer.30000644000175000017500000000004010457621776021461 0ustar useruser.so man3/ne_ssl_cert_identity.3 tla-1.3.5+dfsg/src/libneon/doc/man/ne_calloc.30000644000175000017500000000002510457621776017511 0ustar useruser.so man3/ne_malloc.3 tla-1.3.5+dfsg/src/libneon/doc/man/ne_qtoken.30000644000175000017500000000002410457621776017554 0ustar useruser.so man3/ne_token.3 tla-1.3.5+dfsg/src/libneon/doc/man/ne_malloc.30000644000175000017500000000323610457621776017532 0ustar useruser.\"Generated by db2man.xsl. Don't modify this, modify the source. .de Sh \" Subsection .br .if t .Sp .ne 5 .PP \fB\\$1\fR .PP .. .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Ip \" List item .br .ie \\n(.$>=3 .ne \\$3 .el .ne 3 .IP "\\$1" \\$2 .. .TH "NE_MALLOC" 3 "5 July 2004" "neon 0.24.7" "neon API reference" .SH NAME ne_malloc, ne_calloc, ne_realloc, ne_strdup, ne_strndup, ne_oom_callback \- memory allocation wrappers .SH "SYNOPSIS" .ad l .hy 0 #include .sp .HP 17 void\ *\fBne_malloc\fR\ (size_t\ \fIsize\fR); .HP 17 void\ *\fBne_calloc\fR\ (size_t\ \fIsize\fR); .HP 18 void\ *\fBne_realloc\fR\ (void\ *\fIsize\fR, size_t\ \fIlen\fR); .HP 17 char\ *\fBne_strdup\fR\ (const\ char\ *\fIs\fR, size_t\ \fIsize\fR); .HP 18 char\ *\fBne_strndup\fR\ (const\ char\ *\fIs\fR, size_t\ \fIsize\fR); .HP 22 void\ \fBne_oom_callback\fR\ (void\ (*\fIcallback\fR)(void)); .ad .hy .SH "DESCRIPTION" .PP The functions \fBne_malloc\fR, \fBne_calloc\fR, \fBne_realloc\fR, \fBne_strdup\fR and \fBne_strdnup\fR provide wrappers for the equivalent functions in the standard C library\&. The wrappers provide the extra guarantee that if the C library equivalent returns NULL when no memory is available, an optional callback will be called, and the library will then call \fBabort\fR()\&. .PP \fBne_oom_callback\fR registers a callback which will be invoked if an out of memory error is detected\&. .SH "NOTES" .PP If the operating system uses optimistic memory allocation, the C library memory allocation routines will not return NULL, so it is not possible to gracefully handle memory allocation failures\&. .SH AUTHOR Joe Orton . tla-1.3.5+dfsg/src/libneon/doc/man/ne_iaddr_make.30000644000175000017500000000512410457621776020341 0ustar useruser.\"Generated by db2man.xsl. Don't modify this, modify the source. .de Sh \" Subsection .br .if t .Sp .ne 5 .PP \fB\\$1\fR .PP .. .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Ip \" List item .br .ie \\n(.$>=3 .ne \\$3 .el .ne 3 .IP "\\$1" \\$2 .. .TH "NE_IADDR_MAKE" 3 "5 July 2004" "neon 0.24.7" "neon API reference" .SH NAME ne_iaddr_make, ne_iaddr_cmp, ne_iaddr_print, ne_iaddr_free \- functions to manipulate and compare network addresses .SH "SYNOPSIS" .ad l .hy 0 #include typedef enum { ne_iaddr_ipv4 = 0, ne_iaddr_ipv6 } \fBne_iaddr_type\fR; .sp .HP 29 ne_inet_addr\ *\fBne_iaddr_make\fR\ (ne_iaddr_type\ \fItype\fR, const\ unsigned\ char\ *\fIraw\fR); .HP 18 int\ \fBne_iaddr_cmp\fR\ (const\ ne_inet_addr\ *\fIi1\fR, const\ ne_inet_addr\ *\fIi2\fR); .HP 22 char\ *\fBne_iaddr_print\fR\ (const\ ne_inet_addr\ *\fIia\fR, char\ *\fIbuffer\fR, size_t\ \fIbufsiz\fR); .HP 20 void\ \fBne_iaddr_free\fR\ (const\ ne_inet_addr\ *\fIaddr\fR); .ad .hy .SH "DESCRIPTION" .PP \fBne_iaddr_make\fR creates an \fBne_inet_addr\fR object from a raw binary network address; for instance the four bytes 0x7f 0x00 0x00 0x01 represent the IPv4 address 127\&.0\&.0\&.1\&. The object returned is suitable for passing to \fBne_sock_connect\fR\&. A binary IPv4 address contains four bytes; a binary IPv6 address contains sixteen bytes; addresses passed must be in network byte order\&. .PP \fBne_iaddr_cmp\fR can be used to compare two network addresses; returning zero only if they are identical\&. The addresses need not be of the same address type; if the addresses are not of the same type, the return value is guaranteed to be non\-zero\&. .PP \fBne_iaddr_print\fR can be used to print the human\-readable string representation of a network address into a buffer, for instance the string "127\&.0\&.0\&.1"\&. .PP \fBne_iaddr_free\fR releases the memory associated with a network address object\&. .SH "RETURN VALUE" .PP \fBne_iaddr_make\fR returns NULL if the address type passed is not supported (for instance on a platform which does not support IPv6)\&. .PP \fBne_iaddr_print\fR returns the \fIbuffer\fR pointer, and never NULL\&. .SH "EXAMPLES" .PP The following example connects a socket to port 80 at the address 127\&.0\&.0\&.1\&. .nf unsigned char addr[] = "\\0x7f\\0x00\\0x00\\0x01"; ne_inet_addr *ia; ia = ne_iaddr_make(ne_iaddr_ipv4, addr); if (ia != NULL) { ne_socket *sock = ne_sock_connect(ia, 80); ne_iaddr_free(ia); /* \&.\&.\&. */ } else { /* \&.\&.\&. */ } .fi .SH "SEE ALSO" .PP \fBne_addr_resolve\fR(3) .SH AUTHOR Joe Orton . tla-1.3.5+dfsg/src/libneon/doc/man/ne_set_server_auth.30000644000175000017500000000524110457621776021463 0ustar useruser.\"Generated by db2man.xsl. Don't modify this, modify the source. .de Sh \" Subsection .br .if t .Sp .ne 5 .PP \fB\\$1\fR .PP .. .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Ip \" List item .br .ie \\n(.$>=3 .ne \\$3 .el .ne 3 .IP "\\$1" \\$2 .. .TH "NE_SET_SERVER_AUTH" 3 "5 July 2004" "neon 0.24.7" "neon API reference" .SH NAME ne_set_server_auth, ne_set_proxy_auth, ne_forget_auth \- register authentication callbacks .SH "SYNOPSIS" .ad l .hy 0 #include .sp .HP 33 typedef\ int\ (*\fBne_request_auth\fR)\ (void\ *\fIuserdata\fR, const\ char\ *\fIrealm\fR, int\ \fIattempt\fR, char\ *\fIusername\fR, char\ *\fIpassword\fR); .HP 25 void\ \fBne_set_server_auth\fR\ (ne_session\ *\fIsession\fR, ne_request_auth\ \fIcallback\fR, void\ *\fIuserdata\fR); .HP 24 void\ \fBne_set_proxy_auth\fR\ (ne_session\ *\fIsession\fR, ne_request_auth\ \fIcallback\fR, void\ *\fIuserdata\fR); .HP 21 void\ \fBne_forget_auth\fR\ (ne_session\ *\fIsession\fR); .ad .hy .SH "DESCRIPTION" .PP The \fBne_request_auth\fR function type defines a callback which is invoked when a server or proxy server requires user authentication for a particular request\&. The \fIrealm\fR string is supplied by the server\&. The \fIattempt\fR is a counter giving the number of times the request has been retried with different authentication credentials\&. The first time the callback is invoked for a particular request, \fIattempt\fR will be zero\&. .PP To retry the request using new authentication credentials, the callback should return zero, and the \fIusername\fR and \fIpassword\fR buffers must contain NUL\-terminated strings\&. The NE_ABUFSIZ constant gives the size of these buffers\&. .RS .Sh "Tip" .PP If you only wish to allow the user one attempt to enter credentials, use the value of the \fIattempt\fR parameter as the return value of the callback\&. .RE .PP To abort the request, the callback should return a non\-zero value; in which case the contents of the \fIusername\fR and \fIpassword\fR buffers are ignored\&. .PP The \fBne_forget_auth\fR function can be used to discard the cached authentication credentials\&. .SH "EXAMPLES" .nf /* Function which prompts for a line of user input: */ extern char *prompt_for(const char *prompt); static int my_auth(void *userdata, const char *realm, int attempts, char *username, char *password) { strncpy(username, prompt_for("Username: "), NE_ABUFSIZ); strncpy(password, prompt_for("Password: "), NE_ABUFSIZ); return attempts; } int main(\&.\&.\&.) { ne_session *sess = ne_session_create(\&.\&.\&.); ne_set_server_auth(sess, my_auth, NULL); /* \&.\&.\&. */ } .fi .SH AUTHOR Joe Orton . tla-1.3.5+dfsg/src/libneon/doc/man/ne_set_persist.30000644000175000017500000000003410457621776020620 0ustar useruser.so man3/ne_set_useragent.3 tla-1.3.5+dfsg/src/libneon/doc/man/ne_ssl_cert_import.30000644000175000017500000000003410457621776021464 0ustar useruser.so man3/ne_ssl_cert_read.3 tla-1.3.5+dfsg/src/libneon/doc/man/ne_ssl_clicert_encrypted.30000644000175000017500000000003710457621776022642 0ustar useruser.so man3/ne_ssl_clicert_read.3 tla-1.3.5+dfsg/src/libneon/doc/man/ne_addr_result.30000644000175000017500000000003310457621776020563 0ustar useruser.so man3/ne_addr_resolve.3 tla-1.3.5+dfsg/src/libneon/doc/man/ne_addr_first.30000644000175000017500000000003310457621776020374 0ustar useruser.so man3/ne_addr_resolve.3 tla-1.3.5+dfsg/src/libneon/doc/man/ne_iaddr_free.30000644000175000017500000000003110457621776020335 0ustar useruser.so man3/ne_iaddr_make.3 tla-1.3.5+dfsg/src/libneon/doc/man/ne_shave.30000644000175000017500000000170210457621776017365 0ustar useruser.\"Generated by db2man.xsl. Don't modify this, modify the source. .de Sh \" Subsection .br .if t .Sp .ne 5 .PP \fB\\$1\fR .PP .. .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Ip \" List item .br .ie \\n(.$>=3 .ne \\$3 .el .ne 3 .IP "\\$1" \\$2 .. .TH "NE_SHAVE" 3 "5 July 2004" "neon 0.24.7" "neon API reference" .SH NAME ne_shave \- trim whitespace from a string .SH "SYNOPSIS" .ad l .hy 0 #include .sp .HP 16 char\ *\fBne_shave\fR\ (char\ *\fIstr\fR, const\ char\ *\fIwhitespace\fR); .ad .hy .SH "DESCRIPTION" .PP \fBne_shave\fR returns a portion of \fIstr\fR with any leading or trailing characters in the \fIwhitespace\fR array removed\&. \fIstr\fR may be modified\&. Note that the return value may not be equal to \fIstr\fR\&. .SH "EXAMPLES" .PP The following code segment will output"fish": .nf char s[] = "\&.!\&.fish!\&.!"; puts(ne_shave(s, "\&.!")); .fi .SH AUTHOR Joe Orton . tla-1.3.5+dfsg/src/libneon/doc/man/ne_set_expect100.30000644000175000017500000000003410457621776020640 0ustar useruser.so man3/ne_set_useragent.3 tla-1.3.5+dfsg/src/libneon/doc/man/ne_session_create.30000644000175000017500000000635410457621776021275 0ustar useruser.\"Generated by db2man.xsl. Don't modify this, modify the source. .de Sh \" Subsection .br .if t .Sp .ne 5 .PP \fB\\$1\fR .PP .. .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Ip \" List item .br .ie \\n(.$>=3 .ne \\$3 .el .ne 3 .IP "\\$1" \\$2 .. .TH "NE_SESSION_CREATE" 3 "5 July 2004" "neon 0.24.7" "neon API reference" .SH NAME ne_session_create, ne_close_connection, ne_session_proxy, ne_session_destroy \- set up HTTP sessions .SH "SYNOPSIS" .ad l .hy 0 #include .sp .HP 31 ne_session\ *\fBne_session_create\fR\ (const\ char\ *\fIscheme\fR, const\ char\ *\fIhostname\fR, unsigned\ int\ \fIport\fR); .HP 23 void\ \fBne_session_proxy\fR\ (ne_session\ *\fIsession\fR, const\ char\ *\fIhostname\fR, unsigned\ int\ \fIport\fR); .HP 26 void\ \fBne_close_connection\fR\ (ne_session\ *\fIsession\fR); .HP 25 void\ \fBne_session_destroy\fR\ (ne_session\ *\fIsession\fR); .ad .hy .SH "DESCRIPTION" .PP An \fBne_session\fR object represents an HTTP session \- a logical grouping of a sequence of HTTP requests made to a certain server\&. Any requests made using the session can use a persistent connection, share cached authentication credentials and any other common attributes\&. .PP A new HTTP session is created using \fBne_session_create\fR, giving the \fIhostname\fR and \fIport\fR of the server to use, along with the \fIscheme\fR used to contact the server (usually "http")\&. Before the first use of \fBne_session_create\fR in a process, \fBne_sock_init\fR(3) must have been called to perform any global initialization needed by any libraries used by neon\&. .PP To enable SSL/TLS for the session, pass the string "https" as the \fIscheme\fR parameter, and either register a certificate verification function (see \fBne_ssl_set_verify\fR(3)) or trust the appropriate certificate (see \fBne_ssl_trust_cert\fR(3), \fBne_ssl_trust_default_ca\fR(3))\&. .PP If an HTTP proxy server should be used for the session, \fBne_session_proxy\fR must be called giving the hostname and port on which to contact the proxy\&. .PP If it is known that the session will not be used for a significant period of time, \fBne_close_connection\fR can be called to close the connection, if one remains open\&. Use of this function is entirely optional, but it must not be called if there is a request active using the session\&. .PP Once a session has been completed, \fBne_session_destroy\fR must be called to destroy the resources associated with the session\&. Any subsequent use of the session pointer produces undefined behaviour\&. .SH "NOTES" .PP The hostname passed to \fBne_session_create\fR is resolved when the first request using the session is dispatched; a DNS resolution failure can only be detected at that time (using the NE_LOOKUP error code); see \fBne_request_dispatch\fR(3) for details\&. .SH "RETURN VALUES" .PP \fBne_session_create\fR will return a pointer to a new session object (and never NULL)\&. .SH "EXAMPLES" .PP Create and destroy a session: .nf ne_session *sess; sess = ne_session_create("http", "host\&.example\&.com", 80); /* \&.\&.\&. use sess \&.\&.\&. */ ne_session_destroy(sess); .fi .SH "SEE ALSO" .PP \fBne_ssl_set_verify\fR(3), \fBne_ssl_trust_cert\fR(3), \fBne_sock_init\fR(3) .SH AUTHOR Joe Orton . tla-1.3.5+dfsg/src/libneon/doc/man/ne_version_string.30000644000175000017500000000003410457621776021327 0ustar useruser.so man3/ne_version_match.3 tla-1.3.5+dfsg/src/libneon/doc/man/ne_buffer_concat.30000644000175000017500000000003410457621776021054 0ustar useruser.so man3/ne_buffer_append.3 tla-1.3.5+dfsg/src/libneon/doc/man/ne_ssl_cert_write.30000644000175000017500000000003410457621776021304 0ustar useruser.so man3/ne_ssl_cert_read.3 tla-1.3.5+dfsg/src/libneon/doc/man/ne_ssl_cert_subject.30000644000175000017500000000004010457621776021606 0ustar useruser.so man3/ne_ssl_cert_identity.3 tla-1.3.5+dfsg/src/libneon/doc/man/ne_buffer_ncreate.30000644000175000017500000000003410457621776021226 0ustar useruser.so man3/ne_buffer_create.3 tla-1.3.5+dfsg/src/libneon/doc/man/ne_ssl_clicert_read.30000644000175000017500000000757110457621776021572 0ustar useruser.\"Generated by db2man.xsl. Don't modify this, modify the source. .de Sh \" Subsection .br .if t .Sp .ne 5 .PP \fB\\$1\fR .PP .. .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Ip \" List item .br .ie \\n(.$>=3 .ne \\$3 .el .ne 3 .IP "\\$1" \\$2 .. .TH "NE_SSL_CLIENT_CERT" 3 "5 July 2004" "neon 0.24.7" "neon API reference" .SH NAME ne_ssl_clicert_read, ne_ssl_clicert_name, ne_ssl_clicert_encrypted, ne_ssl_clicert_decrypt, ne_ssl_clicert_owner, ne_ssl_clicert_free \- SSL client certificate handling .SH "SYNOPSIS" .ad l .hy 0 #include .sp .HP 41 ne_ssl_client_cert\ *\fBne_ssl_clicert_read\fR\ (const\ char\ *\fIfilename\fR); .HP 34 const\ char\ *\fBne_ssl_clicert_name\fR\ (const\ ne_ssl_client_cert\ *\fIccert\fR); .HP 30 int\ \fBne_ssl_clicert_encrypted\fR\ (const\ ne_ssl_client_cert\ *\fIccert\fR); .HP 28 int\ \fBne_ssl_clicert_decrypt\fR\ (ne_ssl_client_cert\ *\fIccert\fR, const\ char\ *\fIpassword\fR); .HP 49 const\ ne_ssl_certificate\ *\fBne_ssl_clicert_owner\fR\ (const\ ne_ssl_client_cert\ *\fIccert\fR); .HP 26 void\ \fBne_ssl_clicert_free\fR\ (ne_ssl_client_cert\ *\fIccert\fR); .ad .hy .SH "DESCRIPTION" .PP The \fBne_ssl_clicert_read\fR function reads a client certificate from a PKCS#12\-formatted file, and returns an \fBne_ssl_client_certificate\fR object\&. If the client certificate is encrypted, it must be decrypted before it is used\&. An \fBne_ssl_client_certificate\fR object holds a client certificate and the associated private key, not just a certificate; the term "client certificate" will used to refer to this pair\&. .PP A client certificate can be in one of two states: encrypted or decrypted\&. The \fBne_ssl_clicert_encrypted\fR function will return non\-zero if the client certificate is in the encrypted state\&. A client certificate object returned by \fBne_ssl_clicert_read\fR may be initially in either state, depending on whether the file was encrypted or not\&. .PP \fBne_ssl_clicert_decrypt\fR can be used to decrypt a client certificate using the appropriate password\&. This function must only be called if the object is in the encrypted state; if decryption fails, the certificate state does not change, so decryption can be attempted more than once using different passwords\&. .PP A client certificate can be given a "friendly name" when it is created; \fBne_ssl_clicert_name\fR will return this name (or NULL if no friendly name was specified)\&. \fBne_ssl_clicert_name\fR can be used when the client certificate is in either the encrypted or decrypted state, and will return the same string for the lifetime of the object\&. .PP The function \fBne_ssl_clicert_owner\fR returns the certificate part of the client certificate; it must only be called if the client certificate is in the decrypted state\&. .PP When the client certificate is no longer needed, the \fBne_ssl_clicert_free\fR function should be used to destroy the object\&. .SH "RETURN VALUE" .PP \fBne_ssl_clicert_read\fR returns a client certificate object, or NULL if the file could not be read\&. \fBne_ssl_clicert_encrypted\fR returns zero if the object is in the decrypted state, or non\-zero if it is in the encrypted state\&. \fBne_ssl_clicert_name\fR returns a NUL\-terminated friendly name string, or NULL\&. \fBne_ssl_clicert_owner\fR returns a certificate object\&. .SH "EXAMPLES" .PP The following code reads a client certificate and decrypts it if necessary, then loads it into an HTTP session\&. .nf ne_ssl_client_certificate *ccert; ccert = ne_ssl_clicert_read("/path/to/client\&.p12"); if (ccert == NULL) { /* handle error\&.\&.\&. */ } else if (ne_ssl_clicert_encrypted(ccert)) { char *password = prompt_for_password(); if (ne_ssl_clicert_decrypt(ccert, password)) { /* could not decrypt! handle error\&.\&.\&. */ } } ne_ssl_set_clicert(sess, ccert); .fi .SH "SEE ALSO" .PP \fBne_ssl_cert_read\fR(3) .SH AUTHOR Joe Orton . tla-1.3.5+dfsg/src/libneon/doc/man/ne_set_useragent.30000644000175000017500000000626610457621776021141 0ustar useruser.\"Generated by db2man.xsl. Don't modify this, modify the source. .de Sh \" Subsection .br .if t .Sp .ne 5 .PP \fB\\$1\fR .PP .. .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Ip \" List item .br .ie \\n(.$>=3 .ne \\$3 .el .ne 3 .IP "\\$1" \\$2 .. .TH "NE_SET_USERAGENT" 3 "5 July 2004" "neon 0.24.7" "neon API reference" .SH NAME ne_set_useragent, ne_set_persist, ne_set_read_timeout, ne_set_expect100 \- common settings for HTTP sessions .SH "SYNOPSIS" .ad l .hy 0 #include .sp .HP 23 void\ \fBne_set_useragent\fR\ (ne_session\ *\fIsession\fR, const\ char\ *\fIproduct\fR); .HP 21 void\ \fBne_set_persist\fR\ (ne_session\ *\fIsession\fR, int\ \fIflag\fR); .HP 26 void\ \fBne_set_read_timeout\fR\ (ne_session\ *\fIsession\fR, int\ \fItimeout\fR); .HP 23 void\ \fBne_set_expect100\fR\ (ne_session\ *\fIsession\fR, int\ \fIflag\fR); .ad .hy .SH "DESCRIPTION" .PP The User\-Agent request header is used to identify the software which generated the request for statistical or debugging purposes\&. neon does not send a User\-Agent header unless a call is made to the \fBne_set_useragent\fR\&. \fBne_set_useragent\fR must be passed a product string conforming to RFC2616's product token grammar; of the form "Product/Version"\&. .PP By default neon will use a persistent connection whenever possible\&. For specific applications, or for debugging purposes, it is sometimes useful to disable persistent connections\&. The \fBne_set_persist\fR function will disable persistent connections if passed a \fIflag\fR parameter of 0, and will enable them otherwise\&. .PP When neon reads from a socket, by default the read operation will time out after 60 seconds, and the request will fail giving an \fBNE_TIMEOUT\fR error\&. To configure this timeout interval, call \fBne_set_read_timeout\fR giving the desired number of seconds as the \fItimeout\fR parameter\&. .PP An extension introduced in the HTTP/1\&.1 specification was the use of the Expect: 100\-continue header\&. This header allows an HTTP client to be informed of the expected response status before the request message body is sent: a useful optimisation for situations where a large message body is to be sent\&. The \fBne_set_expect100\fR function can be used to enable this feature by passing the \fIflag\fR parameter as any non\-zero integer\&. .RS .Sh "Warning" .PP Unfortunately, if this header is sent to a server which is not fully compliant with the HTTP/1\&.1 specification, a deadlock occurs resulting in a temporarily "hung" connection\&. neon will recover gracefully from this situation, but only after a 15 second timeout\&. It is highly recommended that this option is not enabled unless it is known that the server in use correctly implements Expect: 100\-continue support\&. .RE .SH "EXAMPLES" .PP Set a user\-agent string: .nf ne_session *sess = ne_session_create(\&.\&.\&.); ne_set_useragent(sess, "MyApplication/2\&.1"); .fi .PP Disable use of persistent connections: .nf ne_session *sess = ne_session_create(\&.\&.\&.); ne_set_persist(sess, 0); .fi .PP Set a 30 second read timeout: .nf ne_session *sess = ne_session_create(\&.\&.\&.); ne_set_read_timeout(sess, 30); .fi .SH AUTHOR Joe Orton . tla-1.3.5+dfsg/src/libneon/doc/man/ne_ssl_set_verify.30000644000175000017500000000756410457621776021333 0ustar useruser.\"Generated by db2man.xsl. Don't modify this, modify the source. .de Sh \" Subsection .br .if t .Sp .ne 5 .PP \fB\\$1\fR .PP .. .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Ip \" List item .br .ie \\n(.$>=3 .ne \\$3 .el .ne 3 .IP "\\$1" \\$2 .. .TH "NE_SSL_SET_VERIFY" 3 "5 July 2004" "neon 0.24.7" "neon API reference" .SH NAME ne_ssl_set_verify \- register an SSL certificate verification callback .SH "SYNOPSIS" .ad l .hy 0 #include .sp .HP 31 typedef\ int\ \fBne_ssl_verify_fn\fR\ (void\ *\fIuserdata\fR, int\ \fIfailures\fR, const\ ne_ssl_certificate\ *\fIcert\fR); .HP 24 void\ \fBne_ssl_set_verify\fR\ (ne_session\ *\fIsession\fR, ne_ssl_verify_fn\ \fIverify_fn\fR, void\ *\fIuserdata\fR); .ad .hy .SH "DESCRIPTION" .PP To enable manual SSL certificate verification, a callback can be registered using \fBne_ssl_set_verify\fR\&. If such a callback is not registered, when a connection is established to an SSL server which does not present a certificate signed by a trusted CA (see \fBne_ssl_trust_cert\fR(3)), or if the certificate presented is invalid in some way, the connection will fail\&. .PP When the callback is invoked, the \fIfailures\fR parameter gives a bitmask indicating in what way the automatic certificate verification failed\&. The value is equal to the bit\-wise OR of one or more of the following constants (and is guaranteed to be non\-zero): .TP \fBNE_SSL_NOTYETVALID\fR The certificate is not yet valid\&. .TP \fBNE_SSL_EXPIRED\fR The certificate has expired\&. .TP \fBNE_SSL_IDMISMATCH\fR The hostname used for the session does not match the hostname to which the certificate was issued\&. .TP \fBNE_SSL_UNTRUSTED\fR The Certificate Authority which signed the certificate is not trusted\&. .PP Note that if either of the\fBNE_SSL_IDMISMATCH\fR or\fBNE_SSL_UNTRUSTED\fR failures is given, the connection may have been intercepted by a third party, and must not be presumed to be ``secure''\&. .PP The \fIcert\fR parameter passed to the callback represents the certificate which was presented by the server\&. If the server presented a chain of certificates, the chain can be accessed using \fBne_ssl_cert_signedby\fR(3)\&. The \fIcert\fR object given is not valid after the callback returns\&. .SH "RETURN VALUE" .PP The verification callback must return zero to indicate that the certificate should be trusted; and non\-zero otherwise (in which case, the connection will fail)\&. .SH "EXAMPLES" .PP The following code implements an example verification callback, using the \fBdump_cert\fR function from \fBne_ssl_cert_subject\fR(3) to display certification information\&. Notice that the hostname of the server used for the session is passed as the\fIuserdata\fR parameter to the callback\&. .nf static int my_verify(void *userdata, int failures, const ne_ssl_certificate *cert) { const char *hostname = userdata; dump_cert(cert); puts("Certificate verification failed \- the connection may have been " "intercepted by a third party!"); if (failures & NE_SSL_IDMISMATCH) { const char *id = ne_ssl_cert_identity(cert); if (id) printf("Server certificate was issued to '%s' not '%s'\&.\\n", id, hostname); else printf("The certificate was not issued for '%s'\\n", hostname); } if (failures & NE_SSL_UNTRUSTED) puts("The certificate is not signed by a trusted Certificate Authority\&."); /* \&.\&.\&. check for validity failures \&.\&.\&. */ if (prompt_user()) return 1; /* fail verification */ else return 0; /* trust the certificate anyway */ } int main(\&.\&.\&.) { ne_session *sess = ne_session_create("https", "some\&.host\&.name", 443); ne_ssl_set_verify(sess, my_verify, "some\&.host\&.name"); \&.\&.\&. } .fi .SH "SEE ALSO" .PP \fBne_ssl_trust_cert\fR(3), \fBne_ssl_readable_dname\fR(3), \fBne_ssl_cert_subject\fR(3) .SH AUTHOR Joe Orton . tla-1.3.5+dfsg/src/libneon/doc/man/ne_buffer.30000644000175000017500000000273410457621776017536 0ustar useruser.\"Generated by db2man.xsl. Don't modify this, modify the source. .de Sh \" Subsection .br .if t .Sp .ne 5 .PP \fB\\$1\fR .PP .. .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Ip \" List item .br .ie \\n(.$>=3 .ne \\$3 .el .ne 3 .IP "\\$1" \\$2 .. .TH "NE_BUFFER" 3 "5 July 2004" "neon 0.24.7" "neon API reference" .SH NAME ne_buffer \- string buffer handling .SH "SYNOPSIS" .ad l .hy 0 #include typedef struct { char *data; size_t used; size_t length; } \fBne_buffer\fR; .sp .ad .hy .SH "DESCRIPTION" .PP The \fBne_buffer\fR type represents an expandable memory buffer for holding NUL\-terminated strings\&. The data field points to the beginnning of the string, the length of which is given by the used field\&. The current size of memory allocated is given by the length field\&. It is not recommended that the fields of a buffer are manipulated directly\&. The data pointer may change when the buffer is modified\&. .PP A buffer is created using \fBne_buffer_create\fR(3) or \fBne_buffer_ncreate\fR(3), and destroyed using \fBne_buffer_destroy\fR(3) or \fBne_buffer_finish\fR(3)\&. The functions \fBne_buffer_append\fR(3), \fBne_buffer_zappend\fR(3) and \fBne_buffer_concat\fR(3) are used to append data to a buffer\&. .PP If the string referenced by the data pointer is modified directly (rather than using one of the functions listed above), \fBne_buffer_altered\fR must be called\&. .SH AUTHOR Joe Orton . tla-1.3.5+dfsg/src/libneon/doc/man/ne_addr_next.30000644000175000017500000000003310457621776020223 0ustar useruser.so man3/ne_addr_resolve.3 tla-1.3.5+dfsg/src/libneon/doc/man/ne_ssl_trust_cert.30000644000175000017500000000315310457621776021340 0ustar useruser.\"Generated by db2man.xsl. Don't modify this, modify the source. .de Sh \" Subsection .br .if t .Sp .ne 5 .PP \fB\\$1\fR .PP .. .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Ip \" List item .br .ie \\n(.$>=3 .ne \\$3 .el .ne 3 .IP "\\$1" \\$2 .. .TH "NE_SSL_TRUST_CERT" 3 "5 July 2004" "neon 0.24.7" "neon API reference" .SH NAME ne_ssl_trust_cert, ne_ssl_trust_default_ca \- functions to indicate that certificates are trusted .SH "SYNOPSIS" .ad l .hy 0 #include .sp .HP 24 void\ \fBne_ssl_trust_cert\fR\ (ne_session\ *\fIsession\fR, const\ ne_ssl_certificate\ *\fIcert\fR); .HP 30 void\ \fBne_ssl_trust_default_ca\fR\ (ne_session\ *\fIsession\fR); .ad .hy .SH "DESCRIPTION" .PP To indicate that a given certificate is trusted by the user, the certificate object can be passed to \fBne_ssl_trust_cert\fR\&. The certificate object is duplicated internally and can subequently be destroyed\&. .PP The SSL library in use by neon may include a default set of CA certificates; calling the \fBne_ssl_trust_default_ca\fR function will indicate that these CAs are trusted by the user\&. .SH "EXAMPLES" .PP Load the CA certificate stored in \fI/path/to/cacert\&.pem\fR: .nf ne_session *sess = ne_session_create(\&.\&.\&.); ne_ssl_certificate *cert = ne_ssl_cert_read("/path/to/cacert\&.pem"); if (cert) { ne_ssl_trust_cert(sess, cert); ne_ssl_cert_free(cert); } else { printf("Could not load CA cert: %s\\n", ne_get_error(sess)); } .fi .SH "SEE ALSO" .PP \fBne_ssl_cert_read\fR(3), \fBne_ssl_cert_import\fR(3), \fBne_ssl_cert_free\fR(3) .SH AUTHOR Joe Orton . tla-1.3.5+dfsg/src/libneon/doc/man/ne_set_request_body_fd.30000644000175000017500000000004610457621776022310 0ustar useruser.so man3/ne_set_request_body_buffer.3 tla-1.3.5+dfsg/src/libneon/doc/man/ne_ssl_readable_dname.30000644000175000017500000000254610457621776022052 0ustar useruser.\"Generated by db2man.xsl. Don't modify this, modify the source. .de Sh \" Subsection .br .if t .Sp .ne 5 .PP \fB\\$1\fR .PP .. .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Ip \" List item .br .ie \\n(.$>=3 .ne \\$3 .el .ne 3 .IP "\\$1" \\$2 .. .TH "NE_SSL_DNAME" 3 "5 July 2004" "neon 0.24.7" "neon API reference" .SH NAME ne_ssl_readable_dname, ne_ssl_dname_cmp \- SSL distinguished name handling .SH "SYNOPSIS" .ad l .hy 0 #include .sp .HP 36 const\ char\ *\fBne_ssl_readable_dname\fR\ (const\ ne_ssl_dname\ *\fIdname\fR); .HP 22 int\ \fBne_ssl_dname_cmp\fR\ (const\ ne_ssl_dname\ *\fIdn1\fR, const\ ne_ssl_dname\ *\fIdn2\fR); .ad .hy .SH "DESCRIPTION" .PP The \fBne_ssl_readable_dname\fR function creates a single\-line, human\-readable string out of an \fBne_ssl_dname\fR object\&. The returned string is \fBmalloc\fR()\-allocated, and must be \fBfree\fR()d by the caller\&. .PP The \fBne_ssl_dname_cmp\fR function compares two distinguished names, and returns zero if they are equal, or non\-zero otherwise\&. .SH "RETURN VALUE" .PP \fBne_ssl_readable_dname\fR returns a \fBmalloc\fR\-allocated string, and never NULL\&. .SH "EXAMPLES" .PP See \fBne_ssl_cert_subject\fR(3) for an example use of \fBne_ssl_readable_dname\fR\&. .SH "SEE ALSO" .PP \fBne_ssl_cert_subject\fR(3) .SH AUTHOR Joe Orton . tla-1.3.5+dfsg/src/libneon/doc/man/ne_ssl_clicert_owner.30000644000175000017500000000003710457621776021777 0ustar useruser.so man3/ne_ssl_clicert_read.3 tla-1.3.5+dfsg/src/libneon/doc/man/ne_ssl_cert_export.30000644000175000017500000000003410457621776021473 0ustar useruser.so man3/ne_ssl_cert_read.3 tla-1.3.5+dfsg/src/libneon/doc/man/ne_ssl_cert_cmp.30000644000175000017500000000202210457621776020730 0ustar useruser.\"Generated by db2man.xsl. Don't modify this, modify the source. .de Sh \" Subsection .br .if t .Sp .ne 5 .PP \fB\\$1\fR .PP .. .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Ip \" List item .br .ie \\n(.$>=3 .ne \\$3 .el .ne 3 .IP "\\$1" \\$2 .. .TH "NE_SSL_CERT_CMP" 3 "5 July 2004" "neon 0.24.7" "neon API reference" .SH NAME ne_ssl_cert_cmp, ne_ssl_cert_free \- functions to operate on certificate objects .SH "SYNOPSIS" .ad l .hy 0 #include .sp .HP 21 int\ \fBne_ssl_cert_cmp\fR\ (const\ ne_ssl_certificate\ *\fIc1\fR, const\ ne_ssl_certificate\ *\fIc2\fR); .HP 23 void\ \fBne_ssl_cert_free\fR\ (ne_ssl_certificate\ *\fIcert\fR); .ad .hy .SH "DESCRIPTION" .PP The \fBne_ssl_cert_cmp\fR function can be used to compare two certificate objects; it returns zero if they refer to the same certificate, and non\-zero otherwise\&. .PP The \fBne_ssl_cert_free\fR function can be used to destroy a certificate object when it is no longer needed\&. .SH AUTHOR Joe Orton . tla-1.3.5+dfsg/src/libneon/doc/man/ne_ssl_cert_read.30000644000175000017500000000456710457621776021104 0ustar useruser.\"Generated by db2man.xsl. Don't modify this, modify the source. .de Sh \" Subsection .br .if t .Sp .ne 5 .PP \fB\\$1\fR .PP .. .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Ip \" List item .br .ie \\n(.$>=3 .ne \\$3 .el .ne 3 .IP "\\$1" \\$2 .. .TH "NE_SSL_CERT_READ" 3 "5 July 2004" "neon 0.24.7" "neon API reference" .SH NAME ne_ssl_cert_read, ne_ssl_cert_write, ne_ssl_cert_import, ne_ssl_cert_export \- functions to read or write certificates to and from files or strings .SH "SYNOPSIS" .ad l .hy 0 #include .sp .HP 38 ne_ssl_certificate\ *\fBne_ssl_cert_read\fR\ (const\ char\ *\fIfilename\fR); .HP 23 int\ \fBne_ssl_cert_write\fR\ (const\ ne_ssl_certificate\ *\fIcert\fR, const\ char\ *\fIfilename\fR); .HP 40 ne_ssl_certificate\ *\fBne_ssl_cert_import\fR\ (const\ char\ *\fIdata\fR); .HP 26 char\ *\fBne_ssl_cert_export\fR\ (const\ ne_ssl_certificate\ *\fIcert\fR); .ad .hy .SH "DESCRIPTION" .PP The \fBne_ssl_cert_write\fR function writes a certificate to a file using the PEM encoding\&. The \fBne_ssl_cert_export\fR function returns a base64\-encoded NUL\-terminated string representing the certificate\&. This string is malloc\-allocated and should be destroyed using \fBfree\fR by the caller\&. .PP The \fBne_ssl_cert_read\fR function reads a certificate from a PEM\-encoded file, and returns a certificate object\&. The \fBne_ssl_cert_import\fR function returns a certificate object from a base64\-encoded string, \fIdata\fR, as returned by \fBne_ssl_cert_export\fR\&. The certificate object returned by these functions should be destroyed using \fBne_ssl_cert_free\fR(3) after use\&. .SH "RETURN VALUE" .PP \fBne_ssl_cert_read\fR returns NULL if a certificate could not be read from the file\&. \fBne_ssl_cert_write\fR returns non\-zero if the certificate could not be written to the file\&. \fBne_ssl_cert_export\fR always returns a NUL\-terminated string, and never NULL\&. \fBne_ssl_cert_import\fR returns NULL if the string was not a valid base64\-encoded certificate\&. .SH "ENCODING FORMATS" .PP The string produced by \fBne_ssl_cert_export\fR is the base64 encoding of the DER representation of the certificate\&. The file written by \fBne_ssl_cert_write\fR uses the PEM format: this is the base64 encoding of the DER representation with newlines every 64 characters, and start and end marker lines\&. .SH AUTHOR Joe Orton . tla-1.3.5+dfsg/src/libneon/doc/man/ne_ssl_clicert_decrypt.30000644000175000017500000000003710457621776022317 0ustar useruser.so man3/ne_ssl_clicert_read.3 tla-1.3.5+dfsg/src/libneon/doc/man/ne_ssl_cert_identity.30000644000175000017500000000515710457621776022016 0ustar useruser.\"Generated by db2man.xsl. Don't modify this, modify the source. .de Sh \" Subsection .br .if t .Sp .ne 5 .PP \fB\\$1\fR .PP .. .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Ip \" List item .br .ie \\n(.$>=3 .ne \\$3 .el .ne 3 .IP "\\$1" \\$2 .. .TH "NE_SSL_CERT_IDENTI" 3 "5 July 2004" "neon 0.24.7" "neon API reference" .SH NAME ne_ssl_cert_identity, ne_ssl_cert_signedby, ne_ssl_cert_issuer, ne_ssl_cert_subject \- functions to access certificate properties .SH "SYNOPSIS" .ad l .hy 0 #include .sp .HP 35 const\ char\ *\fBne_ssl_cert_identity\fR\ (const\ ne_ssl_certificate\ *\fIcert\fR); .HP 49 const\ ne_ssl_certificate\ *\fBne_ssl_cert_signedby\fR\ (const\ ne_ssl_certificate\ *\fIcert\fR); .HP 42 const\ ne_ssl_dname\ *\fBne_ssl_cert_subject\fR\ (const\ ne_ssl_certificate\ *\fIcert\fR); .HP 41 const\ ne_ssl_dname\ *\fBne_ssl_cert_issuer\fR\ (const\ ne_ssl_certificate\ *\fIcert\fR); .ad .hy .SH "DESCRIPTION" .PP The function \fBne_ssl_cert_identity\fR retrieves the ``identity'' of a certificate; for an SSL server certificate, this will be the hostname for which the certificate was issued\&. In PKI parlance, the identity is the common name attribute of the distinguished name of the certificate subject\&. .PP The functions \fBne_ssl_cert_subject\fR and \fBne_ssl_cert_issuer\fR can be used to access the objects representing the distinguished name of the subject and of the issuer of a certificate, respectively\&. .PP If a certificate object is part of a certificate chain, then \fBne_ssl_cert_signedby\fR can be used to find the certificate which signed a particular certificate\&. For a self\-signed certificate or a certificate for which the full chain is not available, this function will return NULL\&. .SH "RETURN VALUE" .PP \fBne_ssl_cert_issuer\fR and \fBne_ssl_cert_subject\fR are guaranteed to never return NULL\&. \fBne_ssl_cert_identity\fR may return NULL if the certificate has no specific ``identity''\&. \fBne_ssl_cert_signedby\fR may return NULL as covered above\&. .SH "EXAMPLES" .PP The following function could be used to display information about a given certificate: .nf void dump_cert(const ne_ssl_certificate *cert) { const char *id = ne_ssl_cert_identity(cert); char *dn; if (id) printf("Certificate was issued for '%s'\&.\\n", id); dn = ne_ssl_readable_dname(ne_ssl_cert_subject(cert)); printf("Subject: %s\\n", dn); free(dn); dn = ne_ssl_readable_dname(ne_ssl_cert_issuer(cert)); printf("Issuer: %s\\n", dn); free(dn); } .fi .SH "SEE ALSO" .PP \fBne_ssl_cert_cmp\fR(3), \fBne_ssl_readable_dname\fR(3) .SH AUTHOR Joe Orton . tla-1.3.5+dfsg/src/libneon/doc/man/ne_ssl_cert_free.30000644000175000017500000000003310457621776021072 0ustar useruser.so man3/ne_ssl_cert_cmp.3 tla-1.3.5+dfsg/src/libneon/doc/man/ne_session_destroy.30000644000175000017500000000003510457621776021511 0ustar useruser.so man3/ne_session_create.3 tla-1.3.5+dfsg/src/libneon/doc/man/ne_status.30000644000175000017500000000254710457621776017612 0ustar useruser.\"Generated by db2man.xsl. Don't modify this, modify the source. .de Sh \" Subsection .br .if t .Sp .ne 5 .PP \fB\\$1\fR .PP .. .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Ip \" List item .br .ie \\n(.$>=3 .ne \\$3 .el .ne 3 .IP "\\$1" \\$2 .. .TH "NE_STATUS" 3 "5 July 2004" "neon 0.24.7" "neon API reference" .SH NAME ne_status \- HTTP status structure .SH "SYNOPSIS" .ad l .hy 0 #include typedef struct { int major_version, minor_version; int code, klass; const char *reason_phrase; } \fBne_status\fR; .sp .ad .hy .SH "DESCRIPTION" .PP An \fBne_status\fR type represents an HTTP response status; used in response messages giving a result of request\&. The major_version and minor_version fields give the HTTP version supported by the server issuing the response\&. The code field gives the status code of the result (lying between 100 and 999 inclusive), and the klass field gives the class[2], which is equal to the most significant digit of the status\&. .PP There are five classes of HTTP status code defined by RFC2616: .TP 1xx Informational response\&. .TP 2xx Success: the operation was successful .TP 3xx Redirection .TP 4xx Client error: the request made was incorrect in some manner\&. .TP 5xx Server error .SH "SEE ALSO" .PP \fBne_get_status\fR(3)\&. .SH AUTHOR Joe Orton . tla-1.3.5+dfsg/src/libneon/doc/man/ne_buffer_grow.30000644000175000017500000000003310457621776020562 0ustar useruser.so man3/ne_buffer_clear.3 tla-1.3.5+dfsg/src/libneon/doc/man/ne_sock_init.30000644000175000017500000000203410457621776020240 0ustar useruser.\"Generated by db2man.xsl. Don't modify this, modify the source. .de Sh \" Subsection .br .if t .Sp .ne 5 .PP \fB\\$1\fR .PP .. .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Ip \" List item .br .ie \\n(.$>=3 .ne \\$3 .el .ne 3 .IP "\\$1" \\$2 .. .TH "NE_SOCK_INIT" 3 "5 July 2004" "neon 0.24.7" "neon API reference" .SH NAME ne_sock_init \- perform library initialization .SH "SYNOPSIS" .ad l .hy 0 #include .sp .HP 18 int\ \fBne_sock_init\fR\ (void); .ad .hy .SH "DESCRIPTION" .PP In some platforms and configurations, neon may be using some socket or SSL libraries which require global initialization before use\&. To perform this initialization, the \fBne_sock_init\fR function must be called once before any other library functions are used\&. .SH "RETURN VALUE" .PP \fBne_sock_init\fR returns zero on success, or non\-zero on error\&. If an error occurs, no further use of the neon library should be attempted\&. .SH "SEE ALSO" .PP \fBneon\fR(3) .SH AUTHOR Joe Orton . tla-1.3.5+dfsg/src/libneon/doc/man/ne_buffer_append.30000644000175000017500000000377210457621776021070 0ustar useruser.\"Generated by db2man.xsl. Don't modify this, modify the source. .de Sh \" Subsection .br .if t .Sp .ne 5 .PP \fB\\$1\fR .PP .. .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Ip \" List item .br .ie \\n(.$>=3 .ne \\$3 .el .ne 3 .IP "\\$1" \\$2 .. .TH "NE_BUFFER_APPEND" 3 "5 July 2004" "neon 0.24.7" "neon API reference" .SH NAME ne_buffer_append, ne_buffer_zappend, ne_buffer_concat \- append data to a string buffer .SH "SYNOPSIS" .ad l .hy 0 #include .sp .HP 23 void\ \fBne_buffer_append\fR\ (ne_buffer\ *\fIbuf\fR, const\ char\ *\fIstring\fR, size_t\ \fIlen\fR); .HP 24 void\ \fBne_buffer_zappend\fR\ (ne_buffer\ *\fIbuf\fR, const\ char\ *\fIstring\fR); .HP 23 void\ \fBne_buffer_concat\fR\ (ne_buffer\ *\fIbuf\fR, const\ char\ *\fIstr\fR, \&.\&.\&.); .ad .hy .SH "DESCRIPTION" .PP The \fBne_buffer_append\fR and \fBne_buffer_zappend\fR functions append a string to the end of a buffer; extending the buffer as necessary\&. The \fIlen\fR passed to \fBne_buffer_append\fR specifies the length of the string to append; there must be no NUL terminator in the first \fIlen\fR bytes of the string\&. \fBne_buffer_zappend\fR must be passed a NUL\-terminated string\&. .PP The \fBne_buffer_concat\fR function takes a variable\-length argument list following \fIstr\fR; each argument must be a \fBchar *\fR pointer to a NUL\-terminated string\&. A NULL pointer must be given as the last argument to mark the end of the list\&. The strings (including \fIstr\fR) are appended to the buffer in the order given\&. None of the strings passed to \fBne_buffer_concat\fR are modified\&. .SH "EXAMPLES" .PP The following code will output "Hello, world\&. And goodbye\&."\&. .nf ne_buffer *buf = ne_buffer_create(); ne_buffer_zappend(buf, "Hello"); ne_buffer_concat(buf, ", world\&. ", "And ", "goodbye\&.", NULL); puts(buf\->data); ne_buffer_destroy(buf); .fi .SH "SEE ALSO" .PP \fBne_buffer\fR(3), \fBne_buffer_create\fR(3), \fBne_buffer_destroy\fR(3) .SH AUTHOR Joe Orton . tla-1.3.5+dfsg/src/libneon/doc/man/ne_buffer_clear.30000644000175000017500000000252710457621776020704 0ustar useruser.\"Generated by db2man.xsl. Don't modify this, modify the source. .de Sh \" Subsection .br .if t .Sp .ne 5 .PP \fB\\$1\fR .PP .. .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Ip \" List item .br .ie \\n(.$>=3 .ne \\$3 .el .ne 3 .IP "\\$1" \\$2 .. .TH "NE_BUFFER_CLEAR" 3 "5 July 2004" "neon 0.24.7" "neon API reference" .SH NAME ne_buffer_clear, ne_buffer_grow, ne_buffer_altered \- general purpose of group of functions .SH "SYNOPSIS" .ad l .hy 0 #include .sp .HP 22 void\ \fBne_buffer_clear\fR\ (ne_buffer\ *\fIbuf\fR); .HP 24 void\ \fBne_buffer_altered\fR\ (ne_buffer\ *\fIbuf\fR); .HP 21 void\ \fBne_buffer_grow\fR\ (ne_buffer\ *\fIbuf\fR, size_t\ \fIsize\fR); .ad .hy .SH "DESCRIPTION" .PP The \fBne_buffer_clear\fR function sets the string stored in \fIbuf\fR to be the empty string ("")\&. .PP The \fBne_buffer_altered\fR function must be used after the string stored in the buffer \fIbuf\fR is modified by directly rather than using \fBne_buffer_append\fR(3), \fBne_buffer_zappend\fR(3) or \fBne_buffer_concat\fR(3)\&. .PP The \fBne_buffer_grow\fR function ensures that at least \fIsize\fR bytes are allocated for the string; this can be used if a large amount of data is going to be appended to the buffer and may result in more efficient memory allocation\&. .SH AUTHOR Joe Orton . tla-1.3.5+dfsg/src/libneon/doc/man/ne_request_dispatch.30000644000175000017500000000003510457621776021624 0ustar useruser.so man3/ne_request_create.3 tla-1.3.5+dfsg/src/libneon/doc/man/ne_session_proxy.30000644000175000017500000000003510457621776021201 0ustar useruser.so man3/ne_session_create.3 tla-1.3.5+dfsg/src/libneon/doc/man/ne_iaddr_print.30000644000175000017500000000003110457621776020550 0ustar useruser.so man3/ne_iaddr_make.3 tla-1.3.5+dfsg/src/libneon/doc/man/ne_get_error.30000644000175000017500000000276610457621776020262 0ustar useruser.\"Generated by db2man.xsl. Don't modify this, modify the source. .de Sh \" Subsection .br .if t .Sp .ne 5 .PP \fB\\$1\fR .PP .. .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Ip \" List item .br .ie \\n(.$>=3 .ne \\$3 .el .ne 3 .IP "\\$1" \\$2 .. .TH "NE_GET_ERROR" 3 "5 July 2004" "neon 0.24.7" "neon API reference" .SH NAME ne_get_error, ne_set_error \- error handling for HTTP sessions .SH "SYNOPSIS" .ad l .hy 0 #include .sp .HP 27 const\ char\ *\fBne_get_error\fR\ (ne_sesssion\ *\fIsession\fR); .HP 19 void\ \fBne_set_error\fR\ (ne_sesssion\ *\fIsession\fR, const\ char\ *\fIformat\fR, \&.\&.\&.); .ad .hy .SH "DESCRIPTION" .PP The session error string is used to store any human\-readable error information associated with any errors which occur whilst using the HTTP session\&. .PP The \fBne_get_error\fR function returns the current session error string\&. This string persists only until it is changed by a subsequent operation on the session\&. .PP The \fBne_set_error\fR function can be used to set a new session error string, using a \fBprintf\fR\-style format string interface\&. .SH "EXAMPLES" .PP Retrieve the current error string: .nf ne_session *sess = ne_session_create(\&.\&.\&.); \&.\&.\&. printf("Error was: %s\\n", ne_get_error(sess)); .fi .PP Set a new error string: .nf ne_session *sess = ne_session_create(\&.\&.\&.); \&.\&.\&. ne_set_error(sess, "Response missing header %s", "somestring"); .fi .SH AUTHOR Joe Orton . tla-1.3.5+dfsg/src/libneon/doc/TODO0000644000175000017500000001341310457621776015430 0ustar useruser/* List of interfaces needing reference documentation. -*- c -*- */ /* ne_session.h */ ### DONE: basics ne_session *ne_session_create(const char *scheme, const char *hostname, int port); void ne_session_destroy(ne_session *sess); void ne_close_connection(ne_session *sess); void ne_session_proxy(ne_session *sess, const char *hostname, int port); ### DONE: error handling void ne_set_error(ne_session *sess, const char *format, ...); const char *ne_get_error(ne_session *sess); ### DONE: options void ne_set_useragent(ne_session *sess, const char *product); void ne_set_expect100(ne_session *sess, int use_expect100); void ne_set_persist(ne_session *sess, int persist); void ne_set_read_timeout(ne_session *sess, int timeout); ### TODO: progress + status callbcacks void ne_set_progress(ne_session *sess, ne_progress progress, void *userdata); ### TODO: status callback typedef enum ne_conn_status; typedef void (*ne_notify_status)(void *userdata, ne_conn_status status, const char *info); void ne_set_status(ne_session *sess, ne_notify_status status, void *userdata); ### DONE: SSL verification typedef struct ne_ssl_dname; char *ne_ssl_readable_dname(const ne_ssl_dname *dn); typedef struct ne_ssl_certificate; #define NE_SSL_* typedef int (*ne_ssl_verify_fn)(void *userdata, int failures, const ne_ssl_certificate *cert); void ne_ssl_set_verify(ne_session *sess, ne_ssl_verify_fn fn, void *userdata); ### DONE: SSL server certs int ne_ssl_load_ca(ne_session *sess, const char *file); int ne_ssl_load_default_ca(ne_session *sess); ### TODO: SSL client certs typedef int (*ne_ssl_keypw_fn)(void *userdata, char *pwbuf, size_t len); void ne_ssl_keypw_prompt(ne_session *sess, ne_ssl_keypw_fn fn, void *ud); int ne_ssl_load_pkcs12(ne_session *sess, const char *fn); int ne_ssl_load_pem(ne_session *sess, const char *certfn, const char *keyfn); typedef void (*ne_ssl_provide_fn)(void *userdata, ne_session *sess, const ne_ssl_dname *server); void ne_ssl_provide_ccert(ne_session *sess, ne_ssl_provide_fn fn, void *userdata); #ifdef NEON_SSL SSL_CTX *ne_ssl_get_context(ne_session *sess); X509 *ne_ssl_server_cert(ne_session *req); #endif ### TODO: utility functions int ne_version_pre_http11(ne_session *sess); const char *ne_get_server_hostport(ne_session *sess); const char *ne_get_scheme(ne_session *sess); void ne_fill_server_uri(ne_session *sess, ne_uri *uri); /* end of ne_session.h *****************************************/ /* ne_request.h */ ### DONE: request basics ne_request *ne_request_create(ne_session *sess, const char *method, const char *path); int ne_request_dispatch(ne_request *req); void ne_request_destroy(ne_request *req); ### DONE: request status const ne_status *ne_get_status(ne_request *req); ### TODO: request bodies void ne_set_request_body_buffer(ne_request *req, const char *buf, size_t count); int ne_set_request_body_fd(ne_request *req, int fd, size_t count); typedef ssize_t (*ne_provide_body)(void *userdata, char *buffer, size_t buflen); void ne_set_request_body_provider(ne_request *req, size_t size, ne_provide_body provider, void *userdata); ### TODO: response bodies typedef int (*ne_accept_response)(void *userdata, ne_request *req, ne_status *st); int ne_accept_2xx(void *userdata, ne_request *req, ne_status *st); int ne_accept_always(void *userdata, ne_request *req, ne_status *st); void ne_add_response_body_reader(ne_request *req, ne_accept_response accpt, ne_block_reader reader, void *userdata); ### TODO: response headers typedef void (*ne_header_handler)(void *userdata, const char *value); void ne_add_response_header_handler(ne_request *req, const char *name, ne_header_handler hdl, void *userdata); void ne_add_response_header_catcher(ne_request *req, ne_header_handler hdl, void *userdata); void ne_duplicate_header(void *userdata, const char *value); void ne_handle_numeric_header(void *userdata, const char *value); ### DONE: request headers void ne_add_request_header(ne_request *req, const char *name, const char *value); void ne_print_request_header(ne_request *req, const char *name, const char *format, ...); ### TODO: misc ne_session *ne_get_session(ne_request *req); ### TODO: caller-pulls request interface int ne_begin_request(ne_request *req); int ne_end_request(ne_request *req); ssize_t ne_read_response_block(ne_request *req, char *buffer, size_t buflen); ### TODO: hooks typedef void (*ne_free_hooks)(void *cookie); typedef void (*ne_create_request_fn)(void *userdata, ne_request *req, const char *method, const char *path); void ne_hook_create_request(ne_session *sess, ne_create_request_fn fn, void *userdata); typedef void (*ne_pre_send_fn)(void *userdata, ne_buffer *header); void ne_hook_pre_send(ne_session *sess, ne_pre_send_fn fn, void *userdata); typedef int (*ne_post_send_fn)(void *userdata, const ne_status *status); void ne_hook_post_send(ne_session *sess, ne_post_send_fn fn, void *userdata); typedef void (*ne_destroy_fn)(void *userdata); void ne_hook_destroy_request(ne_session *sess, ne_destroy_fn fn, void *userdata); void ne_hook_destroy_session(ne_session *sess, ne_destroy_fn fn, void *userdata); typedef void *(*ne_accessor_fn)(void *userdata); void ne_hook_session_accessor(ne_session *sess, const char *id, ne_accessor_fn, void *userdata); void ne_hook_request_accessor(ne_request *req, const char *id, ne_accessor_fn, void *userdata); void *ne_null_accessor(void *userdata); void *ne_session_hook_private(ne_session *sess, const char *id); void *ne_request_hook_private(ne_request *req, const char *id); /* ne_207.h */ /* ne_acl.h */ /* DONE: ne_alloc.h */ /* DONE: ne_auth.h */ /* ne_basic.h */ /* ne_compress.h */ /* ne_cookies.h */ /* ne_dates.h */ /* ne_locks.h */ /* ne_props.h */ /* ne_redirect.h */ /* ne_socket.h */ /* MOSTLY DONE: ne_string.h */ /* ne_uri.h */ /* ne_utils.h */ /* ne_xml.h */ tla-1.3.5+dfsg/src/libneon/doc/html/0000755000175000017500000000000010457621776015702 5ustar userusertla-1.3.5+dfsg/src/libneon/doc/html/compliance.html0000644000175000017500000001022210457621776020677 0ustar useruserProtocol compliance

Protocol compliance

neon is intended to be compliant with the IETF protocol standards it implements, with a few exceptions where real-world use has necessitated minor deviations. These exceptions are documented in this section.

RFC 2518, HTTP Extensions for Distributed Authoring—WebDAV

neon is deliberately not compliant with section 23.4.2, and treats property names as a (namespace-URI, name) pair. This is generally considered to be correct behaviour by the WebDAV working group, and is likely to formally adopted in a future revision of the specification.

RFC 2616, Hypertext Transfer Protocol—HTTP/1.1

There is some confusion in this specification about the use of the “identitytransfer-coding. neon treats the presence of any Transfer-Encoding response header as an indication that the response message uses the “chunked” transfer-coding. This was the suggested resolution proposed by Larry Masinter.

RFC 2617, HTTP Authentication: Basic and Digest Access Authentication

neon is not strictly compliant with the quoting rules given in the grammar for the Authorization header. The grammar requires that the qop and algorithm parameters are not quoted, however one widely deployed server implementation (Microsoft® IIS 5) rejects the request if these parameters are not quoted. neon sends these parameters with quotes—this is not known to cause any problems with other server implementations.

tla-1.3.5+dfsg/src/libneon/doc/html/apas09.html0000644000175000017500000000462110457621776017670 0ustar useruserTRANSLATION

TRANSLATION

Translation is considered a kind of modification, so you may distribute translations of the Document under the terms of section 4. Replacing Invariant Sections with translations requires special permission from their copyright holders, but you may include translations of some or all Invariant Sections in addition to the original versions of these Invariant Sections. You may include a translation of this License provided that you also include the original English version of this License. In case of a disagreement between the translation and the original English version of this License, the original English version will prevail.

tla-1.3.5+dfsg/src/libneon/doc/html/refsslcertio.html0000644000175000017500000001223310457621776021275 0ustar useruserne_ssl_cert_read

Name

ne_ssl_cert_read, ne_ssl_cert_write, ne_ssl_cert_import, ne_ssl_cert_export — functions to read or write certificates to and from files or strings

Synopsis

#include <ne_ssl.h>
ne_ssl_certificate *ne_ssl_cert_read(const char *filename);
int ne_ssl_cert_write(const ne_ssl_certificate *cert, const char *filename);
ne_ssl_certificate *ne_ssl_cert_import(const char *data);
char *ne_ssl_cert_export(const ne_ssl_certificate *cert);

Description

The ne_ssl_cert_write function writes a certificate to a file using the PEM encoding. The ne_ssl_cert_export function returns a base64-encoded NUL-terminated string representing the certificate. This string is malloc-allocated and should be destroyed using free by the caller.

The ne_ssl_cert_read function reads a certificate from a PEM-encoded file, and returns a certificate object. The ne_ssl_cert_import function returns a certificate object from a base64-encoded string, data, as returned by ne_ssl_cert_export. The certificate object returned by these functions should be destroyed using ne_ssl_cert_free after use.

Return value

ne_ssl_cert_read returns NULL if a certificate could not be read from the file. ne_ssl_cert_write returns non-zero if the certificate could not be written to the file. ne_ssl_cert_export always returns a NUL-terminated string, and never NULL. ne_ssl_cert_import returns NULL if the string was not a valid base64-encoded certificate.

Encoding Formats

The string produced by ne_ssl_cert_export is the base64 encoding of the DER representation of the certificate. The file written by ne_ssl_cert_write uses the PEM format: this is the base64 encoding of the DER representation with newlines every 64 characters, and start and end marker lines.

tla-1.3.5+dfsg/src/libneon/doc/html/biblio.html0000644000175000017500000001163610457621776020037 0ustar useruserBibliography

Bibliography

[SSL-and-TLS] SSL and TLS: Designing and Building Secure Systems. Eric Rescorla. 0-201-62598-3. Addison-Wesley. March 2001.

[REC-XML-names] James Clark. XSL Transformations (XSLT) Version 1.0. W3C Recommendation. 16 November 1999.

[RFC2616] Hypertext Transfer Protocol—HTTP/1.1. Roy Fielding, Jim Gettys, Jeff Mogul, Henrik Frystyk, Larry Masinter, Paul Leach, and Tim Berners-Lee. IETF. June 1999.

[RFC2518] HTTP Extensions for Distributed Authoring—WEBDAV. Yaron Goland, Jim Whitehead, Asad Faizi, Steve Carter, and Del Jensen. IETF. February 1999.

[RFC3280] Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile. Russel Housley, Warwick Ford, Tim Polk, and David Solo. IETF. April 2002.

tla-1.3.5+dfsg/src/libneon/doc/html/apas04.html0000644000175000017500000000745010457621776017666 0ustar useruserCOPYING IN QUANTITY

COPYING IN QUANTITY

If you publish printed copies of the Document numbering more than 100, and the Document's license notice requires Cover Texts, you must enclose the copies in covers that carry, clearly and legibly, all these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover. Both covers must also clearly and legibly identify you as the publisher of these copies. The front cover must present the full title with all words of the title equally prominent and visible. You may add other material on the covers in addition. Copying with changes limited to the covers, as long as they preserve the title of the Document and satisfy these conditions, can be treated as verbatim copying in other respects.

If the required texts for either cover are too voluminous to fit legibly, you should put the first ones listed (as many as fit reasonably) on the actual cover, and continue the rest onto adjacent pages.

If you publish or distribute Opaque copies of the Document numbering more than 100, you must either include a machine-readable Transparent copy along with each Opaque copy, or state in or with each Opaque copy a publicly-accessible computer-network location containing a complete Transparent copy of the Document, free of added material, which the general network-using public has access to download anonymously at no charge using public-standard network protocols. If you use the latter option, you must take reasonably prudent steps, when you begin distribution of Opaque copies in quantity, to ensure that this Transparent copy will remain thus accessible at the stated location until at least one year after the last time you distribute an Opaque copy (directly or through your agents or retailers) of that edition to the public.

It is requested, but not required, that you contact the authors of the Document well before redistributing any large number of copies, to give them a chance to provide you with an updated version of the Document.

tla-1.3.5+dfsg/src/libneon/doc/html/xml.html0000644000175000017500000002475610457621776017406 0ustar useruserParsing XML

Parsing XML

The neon XML interface is exposed by the ne_xml.h header file. This interface gives a wrapper around the standard SAX API used by XML parsers, with an additional abstraction, stacked SAX handlers, and also giving consistent XML Namespace support.

Introduction to SAX

A SAX-based parser works by emitting a sequence of events to reflect the tokens being parsed from the XML document. For example, parsing the following document fragment:

<hello>world</hello>

results in the following events:

  1. start-element "hello"
  2. character-data "world"
  3. end-element "hello"

This example demonstrates the three event types used used in the subset of SAX exposed by the neon XML interface: start-element, character-data and end-element. In a C API, an “event” is implemented as a function callback; three callback types are used in neon, one for each type of event.

Stacked SAX handlers

WebDAV property values are represented as fragments of XML, transmitted as parts of larger XML documents over HTTP (notably in the body of the response to a PROPFIND request). When neon parses such documents, the SAX events generated for these property value fragments may need to be handled by the application, since neon has no knowledge of the structure of properties used by the application.

To solve this problem[1] the neon XML interface introduces the concept of a SAX handler. A SAX handler comprises a start-element, character-data and end-element callback; the start-element callback being defined such that each handler may accept or decline the start-element event. Handlers are composed into a handler stack before parsing a document. When a new start-element event is generated by the XML parser, neon invokes each start-element callback in the handler stack in turn until one accepts the event. The handler which accepts the event will then be subsequently be passed character-data events if the element contains character data, followed by an end-element event when the element is closed. If no handler in the stack accepts a start-element event, the branch of the tree is ignored.

To illustrate, given a handler A, which accepts the cat and age elements, and a handler B, which accepts the name element, the following document:

Example 2.1. An example XML document

<cat>
  <age>3</age>    
  <name>Bob</name>
</cat>

would be parsed as follows:

  1. A start-element "cat" → accept
  2. A start-element "age" → accept
  3. A character-data "3"
  4. A end-element "age"
  5. A start-element "name" → decline
  6. B start-element "name" → accept
  7. B character-data "Bob"
  8. B end-element "name"
  9. A end-element "cat"

The search for a handler which will accept a start-element event begins at the handler of the parent element and continues toward the top of the stack. For the root element, it begins at the base of the stack. In the above example, handler A is at the base, and handler B at the top; if the name element had any children, only B's start-element would be invoked to accept them.

Maintaining state

To facilitate communication between independent handlers, a state integer is associated with each element being parsed. This integer is returned by start-element callback and is passed to the subsequent character-data and end-element callbacks associated with the element. The state integer of the parent element is also passed to each start-element callback, the value zero used for the root element (which by definition has no parent).

To further extend Example 2.1, “An example XML document”: if handler A defines that the state of the root element cat will be 42, the event trace would be as follows:

  1. A start-element (parent = 0, "cat") → accept, state = 42
  2. A start-element (parent = 42, "age") → accept, state = 50
  3. A character-data (state = 50, "3")
  4. A end-element (state = 50, "age")
  5. A start-element (parent = 42, "name") → decline
  6. B start-element (parent = 42, "name") → accept, state = 99
  7. B character-data (state = 99, "Bob")
  8. B end-element (state = 99, "name")
  9. A end-element (state = 42, "cat")

To avoid collisions between state integers used by different handlers, the interface definition of any handler includes the range of integers it will use.

XML namespaces

To support XML namespaces, every element name is represented as a (namespace, name) pair. The start-element and end-element callbacks are passed namespace and name strings accordingly. If an element in the XML document has no declared namespace, the namespace given will be the empty string, "".



[1] This “problem” only needs solving because the SAX interface is so inflexible when implemented as C function callbacks; a better approach would be to use an XML parser interface which is not based on callbacks.

tla-1.3.5+dfsg/src/libneon/doc/html/refneon.html0000644000175000017500000001756710457621776020244 0ustar useruserneon

Name

neon — HTTP and WebDAV client library

Description

neon is an HTTP and WebDAV client library. The major abstractions exposed are the HTTP session, created by ne_session_create; and the HTTP request, created by ne_request_create. HTTP authentication is handled transparently for server and proxy servers, see ne_set_server_auth; complete SSL/TLS support is also included, see ne_ssl_set_verify.

Conventions

Some conventions are used throughout the neon API, to provide a consistent and simple interface; these are documented below.

Thread-safeness and global initialization

neon itself is implemented to be thread-safe (avoiding any use of global state), but relies on the operating system providing a thread-safe resolver interface. Modern operating systems offer the thread-safe getaddrinfo interface, which neon supports; some others implement gethostbyname using thread-local storage.

To allow thread-safe use of the OpenSSL library, the application must register some locking callbacks in accordance with the OpenSSL documentation.

Some platforms and libraries used by neon require global initialization before use; notably:

  • OpenSSL requires global initialization to load shared lookup tables.
  • The SOCKS library requires initialization before use.
  • The Win32 socket library requires initialization before use.

The ne_sock_init function should be called before any other use of neon to perform any necessary initialization needed for the particular platform.

Namespaces

To avoid possible collisions between names used for symbols and preprocessor macros by an application and the libraries it uses, it is good practice for each library to reserve a particular namespace prefix. An application which ensures it uses no names with these prefixes is then guaranteed to avoid such collisions.

The neon library reserves the use of the namespace prefixes ne_ and NE_. The libraries used by neon may also reserve certain namespaces; collisions between these libraries and a neon-based application will not be detected at compile time, since the underlying library interfaces are not exposed through the neon header files. Such collisions can only be detected at link time, when the linker attempts to resolve symbols. The following list documents some of the namespaces claimed by libraries used by neon; this list may be incomplete.

SSL, ssl, TLS, tls, ERR_, BIO_, d2i_, i2d_, ASN1_Some of the many prefixes used by the OpenSSL library; little attempt has been made to keep exported symbols within any particular prefixes for this library.
XML_, Xml[A-Z]Namespaces used by the expat library.
xml[A-Z], html[A-Z], docb[A-Z]Namespaces used by the libxml2 library; a relatively small number of symbols are used without these prefixes.

Argument validation

neon does not attempt to validate that the parameters passed to functions conform to the API (for instance, checking that pointer arguments are not NULL). Any use of the neon API which is not documented to produce a certain behaviour results is said to produce undefined behaviour; it is likely that neon will segfault under these conditions.

URI paths, WebDAV metadata

The path strings passed to any function must be URI-encoded by the application; neon never performs any URI encoding or decoding internally. WebDAV property names and values must be valid UTF-8 encoded Unicode strings.

User interaction

As a pure library interface, neon will never produce output on stdout or stderr; all user interaction is the responsibilty of the application.

Memory handling

neon does not attempt to cope gracefully with an out-of-memory situation; instead, by default, the abort function is called to immediately terminate the process. An application may register a custom function which will be called before abort in such a situation; see ne_oom_callback.

Callbacks and userdata

Whenever a callback is registered, a userdata pointer is also used to allow the application to associate a context with the callback. The userdata is of type void *, allowing any pointer to be used.

tla-1.3.5+dfsg/src/libneon/doc/html/refopts.html0000644000175000017500000001372310457621776020260 0ustar useruserne_set_useragent

Name

ne_set_useragent, ne_set_persist, ne_set_read_timeout, ne_set_expect100 — common settings for HTTP sessions

Synopsis

#include <ne_session.h>
void ne_set_useragent(ne_session *session, const char *product);
void ne_set_persist(ne_session *session, int flag);
void ne_set_read_timeout(ne_session *session, int timeout);
void ne_set_expect100(ne_session *session, int flag);

Description

The User-Agent request header is used to identify the software which generated the request for statistical or debugging purposes. neon does not send a User-Agent header unless a call is made to the ne_set_useragent. ne_set_useragent must be passed a product string conforming to RFC2616's product token grammar; of the form "Product/Version".

By default neon will use a persistent connection whenever possible. For specific applications, or for debugging purposes, it is sometimes useful to disable persistent connections. The ne_set_persist function will disable persistent connections if passed a flag parameter of 0, and will enable them otherwise.

When neon reads from a socket, by default the read operation will time out after 60 seconds, and the request will fail giving an NE_TIMEOUT error. To configure this timeout interval, call ne_set_read_timeout giving the desired number of seconds as the timeout parameter.

An extension introduced in the HTTP/1.1 specification was the use of the Expect: 100-continue header. This header allows an HTTP client to be informed of the expected response status before the request message body is sent: a useful optimisation for situations where a large message body is to be sent. The ne_set_expect100 function can be used to enable this feature by passing the flag parameter as any non-zero integer.

Warning

Unfortunately, if this header is sent to a server which is not fully compliant with the HTTP/1.1 specification, a deadlock occurs resulting in a temporarily "hung" connection. neon will recover gracefully from this situation, but only after a 15 second timeout. It is highly recommended that this option is not enabled unless it is known that the server in use correctly implements Expect: 100-continue support.

Examples

Set a user-agent string:

ne_session *sess = ne_session_create(...);
ne_set_useragent(sess, "MyApplication/2.1");

Disable use of persistent connections:

ne_session *sess = ne_session_create(...);
ne_set_persist(sess, 0);

Set a 30 second read timeout:

ne_session *sess = ne_session_create(...);
ne_set_read_timeout(sess, 30);
tla-1.3.5+dfsg/src/libneon/doc/html/refbufdest.html0000644000175000017500000000743010457621776020725 0ustar useruserne_buffer_destroy

Name

ne_buffer_destroy, ne_buffer_finish — destroy a buffer object

Synopsis

#include <ne_string.h>
void ne_buffer_destroy(ne_buffer *buf);
char *ne_buffer_finish(ne_buffer *buf);

Description

ne_buffer_destroy frees all memory associated with the buffer. ne_buffer_finish frees the buffer structure, but not the actual string stored in the buffer, which is returned and must be free()d by the caller.

Any use of the buffer object after calling either of these functions gives undefined behaviour.

Return value

ne_buffer_finish returns the malloc-allocated string stored in the buffer.

Examples

An example use of ne_buffer_finish; the duplicate function returns a string made up of n copies of str:

static char *duplicate(int n, const char *str)
{
  ne_buffer *buf = ne_buffer_create();
  while (n--) {
    ne_buffer_zappend(buf, str);
  }
  return ne_buffer_finish(buf);
}
tla-1.3.5+dfsg/src/libneon/doc/html/api.html0000644000175000017500000000476510457621776017355 0ustar useruserChapter 2. The neon C language interface

Chapter 2. The neon C language interface

The documentation for the neon interface is split between this chapter, which gives a broad introduction to the abstractions exposed by the library, and neon API reference, which gives a function-by-function breakdown of the interface.

tla-1.3.5+dfsg/src/libneon/doc/html/intro.html0000644000175000017500000000560210457621776017726 0ustar useruserChapter 1. Introduction

Chapter 1. Introduction

This chapter provides an introduction to neon, giving an overview of the range of features offered, and some general guidelines for using the neon API.

neon aims to provide a modern, flexible, and simple API in the C programming language for implementing HTTP and WebDAV support. The WebDAV functionality is entirely separate from the basic HTTP functionality; neon can be used simply as an HTTP client library, ignoring the WebDAV support if desired.

tla-1.3.5+dfsg/src/libneon/doc/html/refsslca.html0000644000175000017500000000734710457621776020405 0ustar useruserne_ssl_trust_cert

Name

ne_ssl_trust_cert, ne_ssl_trust_default_ca — functions to indicate that certificates are trusted

Synopsis

#include <ne_session.h>
void ne_ssl_trust_cert(ne_session *session, const ne_ssl_certificate *cert);
void ne_ssl_trust_default_ca(ne_session *session);

Description

To indicate that a given certificate is trusted by the user, the certificate object can be passed to ne_ssl_trust_cert. The certificate object is duplicated internally and can subequently be destroyed.

The SSL library in use by neon may include a default set of CA certificates; calling the ne_ssl_trust_default_ca function will indicate that these CAs are trusted by the user.

Examples

Load the CA certificate stored in /path/to/cacert.pem:

ne_session *sess = ne_session_create(...);
ne_ssl_certificate *cert = ne_ssl_cert_read("/path/to/cacert.pem");

if (cert) {
   ne_ssl_trust_cert(sess, cert);
   ne_ssl_cert_free(cert);
} else {
   printf("Could not load CA cert: %s\n", ne_get_error(sess));
}
tla-1.3.5+dfsg/src/libneon/doc/html/refconfig.html0000644000175000017500000001161710457621776020540 0ustar useruserneon-config

Name

neon-config — script providing information about installed copy of neon library

Synopsis

neon-config [--prefix] [[--cflags] | [--libs] | [--la-file] | [--support feature] | [--help] | [--version]]

Description

The neon-config script provides information about an installed copy of the neon library. The --cflags and --libs options instruct how to compile and link an application against the library; the --version and --support options can help determine whether the library meets the applications requirements.

Options

--cflagsPrint the flags which should be passed to the C compiler when compiling object files, when the object files use neon header files.
--libsPrint the flags which should be passed to the linker when linking an application which uses the neon library
--la-filePrint the location of the libtool library script, libneon.la, which can be used to link against neon by applications using libtool.
--versionPrint the version of the library
--prefix dirIf dir is given; relocate output of --cflags and --libs as if neon was installed in given prefix directory. Otherwise, print the installation prefix of the library.
--support featureThe script exits with success if feature is supported by the library.
--helpPrint help message; includes list of known features and whether they are supported or not.

Example

Below is a Makefile fragment which could be used to build an application against an installed neon library, when the neon-config script can be found in $PATH.

CFLAGS = `neon-config --cflags`
LIBS = `neon-config --libs`
OBJECTS = myapp.o
TARGET = myapp

$(TARGET): $(OBJECTS)
	$(CC) $(LDFLAGS) -o $(TARGET) $(OBJECTS) $(LIBS)

myapp.o: myapp.c
	$(CC) $(CFLAGS) -c myapp.c -o myapp.o
tla-1.3.5+dfsg/src/libneon/doc/html/refreqbody.html0000644000175000017500000000535110457621776020736 0ustar useruserne_set_request_body_buffer

Name

ne_set_request_body_buffer, ne_set_request_body_fd — include a message body with a request

Synopsis

#include <ne_request.h>
void ne_set_request_body_buffer(ne_request *req, const char *buf, size_t count);

Description

The ne_set_request_body_buffer function specifies that a message body should be included with the body, which is stored in the count bytes buffer buf.

tla-1.3.5+dfsg/src/libneon/doc/html/apas11.html0000644000175000017500000000533410457621776017663 0ustar useruserFUTURE REVISIONS OF THIS LICENSE

FUTURE REVISIONS OF THIS LICENSE

The Free Software Foundation may publish new, revised versions of the GNU Free Documentation License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. See http://www.gnu.org/copyleft/.

Each version of the License is given a distinguishing version number. If the Document specifies that a particular numbered version of this License "or any later version" applies to it, you have the option of following the terms and conditions either of that specified version or of any later version that has been published (not as a draft) by the Free Software Foundation. If the Document does not specify a version number of this License, you may choose any version ever published (not as a draft) by the Free Software Foundation.

tla-1.3.5+dfsg/src/libneon/doc/html/refsockinit.html0000644000175000017500000000551410457621776021115 0ustar useruserne_sock_init

Name

ne_sock_init — perform library initialization

Synopsis

#include <ne_socket.h>
int ne_sock_init(void);

Description

In some platforms and configurations, neon may be using some socket or SSL libraries which require global initialization before use. To perform this initialization, the ne_sock_init function must be called once before any other library functions are used.

Return value

ne_sock_init returns zero on success, or non-zero on error. If an error occurs, no further use of the neon library should be attempted.

See also

neon

tla-1.3.5+dfsg/src/libneon/doc/html/refstatus.html0000644000175000017500000000763110457621776020617 0ustar useruserne_status

Name

ne_status — HTTP status structure

Synopsis

#include <ne_utils.h>

typedef struct {
    int major_version, minor_version;
    int code, klass;
    const char *reason_phrase;
} ne_status;

Description

An ne_status type represents an HTTP response status; used in response messages giving a result of request. The major_version and minor_version fields give the HTTP version supported by the server issuing the response. The code field gives the status code of the result (lying between 100 and 999 inclusive), and the klass field gives the class[2], which is equal to the most significant digit of the status.

There are five classes of HTTP status code defined by RFC2616:

1xxInformational response.
2xxSuccess: the operation was successful
3xxRedirection
4xxClient error: the request made was incorrect in some manner.
5xxServer error

See also

ne_get_status.



[2] the field is named “klass” not “class” so that the header can be used from a C++ program, in which “class” is a reserved word)

tla-1.3.5+dfsg/src/libneon/doc/html/refiaddr.html0000644000175000017500000001265710457621776020363 0ustar useruserne_iaddr_make

Name

ne_iaddr_make, ne_iaddr_cmp, ne_iaddr_print, ne_iaddr_free — functions to manipulate and compare network addresses

Synopsis

#include <ne_socket.h>

typedef enum {
    ne_iaddr_ipv4 = 0,
    ne_iaddr_ipv6
} ne_iaddr_type;
ne_inet_addr *ne_iaddr_make(ne_iaddr_type type, const unsigned char *raw);
int ne_iaddr_cmp(const ne_inet_addr *i1, const ne_inet_addr *i2);
char *ne_iaddr_print(const ne_inet_addr *ia, char *buffer, size_t bufsiz);
void ne_iaddr_free(const ne_inet_addr *addr);

Description

ne_iaddr_make creates an ne_inet_addr object from a raw binary network address; for instance the four bytes 0x7f 0x00 0x00 0x01 represent the IPv4 address 127.0.0.1. The object returned is suitable for passing to ne_sock_connect. A binary IPv4 address contains four bytes; a binary IPv6 address contains sixteen bytes; addresses passed must be in network byte order.

ne_iaddr_cmp can be used to compare two network addresses; returning zero only if they are identical. The addresses need not be of the same address type; if the addresses are not of the same type, the return value is guaranteed to be non-zero.

ne_iaddr_print can be used to print the human-readable string representation of a network address into a buffer, for instance the string "127.0.0.1".

ne_iaddr_free releases the memory associated with a network address object.

Return value

ne_iaddr_make returns NULL if the address type passed is not supported (for instance on a platform which does not support IPv6).

ne_iaddr_print returns the buffer pointer, and never NULL.

Examples

The following example connects a socket to port 80 at the address 127.0.0.1.

unsigned char addr[] = "\0x7f\0x00\0x00\0x01";
ne_inet_addr *ia;

ia = ne_iaddr_make(ne_iaddr_ipv4, addr);
if (ia != NULL) {
    ne_socket *sock = ne_sock_connect(ia, 80);
    ne_iaddr_free(ia);
    /* ... */
} else {
    /* ... */
}
tla-1.3.5+dfsg/src/libneon/doc/html/refclicert.html0000644000175000017500000001656110457621776020723 0ustar useruserne_ssl_client_cert

Name

ne_ssl_clicert_read, ne_ssl_clicert_name, ne_ssl_clicert_encrypted, ne_ssl_clicert_decrypt, ne_ssl_clicert_owner, ne_ssl_clicert_free — SSL client certificate handling

Synopsis

#include <ne_ssl.h>
ne_ssl_client_cert *ne_ssl_clicert_read(const char *filename);
const char *ne_ssl_clicert_name(const ne_ssl_client_cert *ccert);
int ne_ssl_clicert_encrypted(const ne_ssl_client_cert *ccert);
int ne_ssl_clicert_decrypt(ne_ssl_client_cert *ccert, const char *password);
const ne_ssl_certificate *ne_ssl_clicert_owner(const ne_ssl_client_cert *ccert);
void ne_ssl_clicert_free(ne_ssl_client_cert *ccert);

Description

The ne_ssl_clicert_read function reads a client certificate from a PKCS#12-formatted file, and returns an ne_ssl_client_certificate object. If the client certificate is encrypted, it must be decrypted before it is used. An ne_ssl_client_certificate object holds a client certificate and the associated private key, not just a certificate; the term "client certificate" will used to refer to this pair.

A client certificate can be in one of two states: encrypted or decrypted. The ne_ssl_clicert_encrypted function will return non-zero if the client certificate is in the encrypted state. A client certificate object returned by ne_ssl_clicert_read may be initially in either state, depending on whether the file was encrypted or not.

ne_ssl_clicert_decrypt can be used to decrypt a client certificate using the appropriate password. This function must only be called if the object is in the encrypted state; if decryption fails, the certificate state does not change, so decryption can be attempted more than once using different passwords.

A client certificate can be given a "friendly name" when it is created; ne_ssl_clicert_name will return this name (or NULL if no friendly name was specified). ne_ssl_clicert_name can be used when the client certificate is in either the encrypted or decrypted state, and will return the same string for the lifetime of the object.

The function ne_ssl_clicert_owner returns the certificate part of the client certificate; it must only be called if the client certificate is in the decrypted state.

When the client certificate is no longer needed, the ne_ssl_clicert_free function should be used to destroy the object.

Return value

ne_ssl_clicert_read returns a client certificate object, or NULL if the file could not be read. ne_ssl_clicert_encrypted returns zero if the object is in the decrypted state, or non-zero if it is in the encrypted state. ne_ssl_clicert_name returns a NUL-terminated friendly name string, or NULL. ne_ssl_clicert_owner returns a certificate object.

Examples

The following code reads a client certificate and decrypts it if necessary, then loads it into an HTTP session.

ne_ssl_client_certificate *ccert;

ccert = ne_ssl_clicert_read("/path/to/client.p12");

if (ccert == NULL) {
   /* handle error... */
} else if (ne_ssl_clicert_encrypted(ccert)) {
   char *password = prompt_for_password();

   if (ne_ssl_clicert_decrypt(ccert, password)) {
      /* could not decrypt! handle error... */
   }
}

ne_ssl_set_clicert(sess, ccert);
tla-1.3.5+dfsg/src/libneon/doc/html/refcert.html0000644000175000017500000001273510457621776020232 0ustar useruserne_ssl_cert_identity

Name

ne_ssl_cert_identity, ne_ssl_cert_signedby, ne_ssl_cert_issuer, ne_ssl_cert_subject — functions to access certificate properties

Synopsis

#include <ne_ssl.h>
const char *ne_ssl_cert_identity(const ne_ssl_certificate *cert);
const ne_ssl_certificate *ne_ssl_cert_signedby(const ne_ssl_certificate *cert);
const ne_ssl_dname *ne_ssl_cert_subject(const ne_ssl_certificate *cert);
const ne_ssl_dname *ne_ssl_cert_issuer(const ne_ssl_certificate *cert);

Description

The function ne_ssl_cert_identity retrieves the “identity” of a certificate; for an SSL server certificate, this will be the hostname for which the certificate was issued. In PKI parlance, the identity is the common name attribute of the distinguished name of the certificate subject.

The functions ne_ssl_cert_subject and ne_ssl_cert_issuer can be used to access the objects representing the distinguished name of the subject and of the issuer of a certificate, respectively.

If a certificate object is part of a certificate chain, then ne_ssl_cert_signedby can be used to find the certificate which signed a particular certificate. For a self-signed certificate or a certificate for which the full chain is not available, this function will return NULL.

Return value

ne_ssl_cert_issuer and ne_ssl_cert_subject are guaranteed to never return NULL. ne_ssl_cert_identity may return NULL if the certificate has no specific “identity”. ne_ssl_cert_signedby may return NULL as covered above.

Examples

The following function could be used to display information about a given certificate:

void dump_cert(const ne_ssl_certificate *cert) {
  const char *id = ne_ssl_cert_identity(cert);
  char *dn;

  if (id) 
    printf("Certificate was issued for '%s'.\n", id);

  dn = ne_ssl_readable_dname(ne_ssl_cert_subject(cert));
  printf("Subject: %s\n", dn);
  free(dn);

  dn = ne_ssl_readable_dname(ne_ssl_cert_issuer(cert));
  printf("Issuer: %s\n", dn);
  free(dn);
}
tla-1.3.5+dfsg/src/libneon/doc/html/gfdl.html0000644000175000017500000000614310457621776017510 0ustar useruserAppendix A. GNU Free Documentation License

Appendix A. GNU Free Documentation License

Version 1.1, March 2000

Copyright (C) 2000 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.

tla-1.3.5+dfsg/src/libneon/doc/html/referr.html0000644000175000017500000000665710457621776020073 0ustar useruserne_get_error

Name

ne_get_error, ne_set_error — error handling for HTTP sessions

Synopsis

#include <ne_session.h>
const char *ne_get_error(ne_sesssion *session);
void ne_set_error(ne_sesssion *session, const char *format, ...);

Description

The session error string is used to store any human-readable error information associated with any errors which occur whilst using the HTTP session.

The ne_get_error function returns the current session error string. This string persists only until it is changed by a subsequent operation on the session.

The ne_set_error function can be used to set a new session error string, using a printf-style format string interface.

Examples

Retrieve the current error string:

ne_session *sess = ne_session_create(...);
...
printf("Error was: %s\n", ne_get_error(sess));

Set a new error string:

ne_session *sess = ne_session_create(...);
...
ne_set_error(sess, "Response missing header %s", "somestring");
tla-1.3.5+dfsg/src/libneon/doc/html/refalloc.html0000644000175000017500000001075110457621776020363 0ustar useruserne_malloc

Name

ne_malloc, ne_calloc, ne_realloc, ne_strdup, ne_strndup, ne_oom_callback — memory allocation wrappers

Synopsis

#include <ne_alloc.h>
void *ne_malloc(size_t size);
void *ne_calloc(size_t size);
void *ne_realloc(void *size, size_t len);
char *ne_strdup(const char *s, size_t size);
char *ne_strndup(const char *s, size_t size);
void ne_oom_callback(void (*callback)(void));

Description

The functions ne_malloc, ne_calloc, ne_realloc, ne_strdup and ne_strdnup provide wrappers for the equivalent functions in the standard C library. The wrappers provide the extra guarantee that if the C library equivalent returns NULL when no memory is available, an optional callback will be called, and the library will then call abort().

ne_oom_callback registers a callback which will be invoked if an out of memory error is detected.

Notes

If the operating system uses optimistic memory allocation, the C library memory allocation routines will not return NULL, so it is not possible to gracefully handle memory allocation failures.

tla-1.3.5+dfsg/src/libneon/doc/html/refbufcr.html0000644000175000017500000000615510457621776020375 0ustar useruserne_buffer_create

Name

ne_buffer_create, ne_buffer_ncreate — general purpose of group of functions

Synopsis

#include <ne_alloc.h>
ne_buffer *ne_buffer_create(void);
ne_buffer *ne_buffer_ncreate(size_t size);

Description

ne_buffer_create creates a new buffer object, with an implementation-defined initial size. ne_buffer_ncreate creates an ne_buffer where the minimum initial size is given in the size parameter. The buffer created will contain the empty string ("").

Return value

Both functions return a pointer to a new buffer object, and never NULL.

See also

ne_buffer

tla-1.3.5+dfsg/src/libneon/doc/html/apas06.html0000644000175000017500000000574310457621776017673 0ustar useruserCOMBINING DOCUMENTS

COMBINING DOCUMENTS

You may combine the Document with other documents released under this License, under the terms defined in section 4 above for modified versions, provided that you include in the combination all of the Invariant Sections of all of the original documents, unmodified, and list them all as Invariant Sections of your combined work in its license notice.

The combined work need only contain one copy of this License, and multiple identical Invariant Sections may be replaced with a single copy. If there are multiple Invariant Sections with the same name but different contents, make the title of each such section unique by adding at the end of it, in parentheses, the name of the original author or publisher of that section if known, or else a unique number. Make the same adjustment to the section titles in the list of Invariant Sections in the license notice of the combined work.

In the combination, you must combine any sections entitled "History" in the various original documents, forming one section entitled "History"; likewise combine any sections entitled "Acknowledgements", and any sections entitled "Dedications". You must delete all sections entitled "Endorsements."

tla-1.3.5+dfsg/src/libneon/doc/html/apas07.html0000644000175000017500000000467410457621776017676 0ustar useruserCOLLECTIONS OF DOCUMENTS

COLLECTIONS OF DOCUMENTS

You may make a collection consisting of the Document and other documents released under this License, and replace the individual copies of this License in the various documents with a single copy that is included in the collection, provided that you follow the rules of this License for verbatim copying of each of the documents in all other respects.

You may extract a single document from such a collection, and distribute it individually under this License, provided you insert a copy of this License into the extracted document, and follow this License in all other respects regarding verbatim copying of that document.

tla-1.3.5+dfsg/src/libneon/doc/html/refresolve.html0000644000175000017500000001545110457621776020752 0ustar useruserne_addr_resolve

Name

ne_addr_resolve, ne_addr_result, ne_addr_first, ne_addr_next, ne_addr_error, ne_addr_destroy — functions to resolve hostnames to addresses

Synopsis

#include <ne_socket.h>
ne_sock_addr *ne_addr_resolve(const char *hostname, int flags);
int ne_addr_result(const ne_sock_addr *addr);
const ne_inet_addr *ne_addr_first(ne_sock_addr *addr);
const ne_inet_addr *ne_addr_next(ne_sock_addr *addr);
char *ne_addr_error(const ne_sock_addr *addr, char *buffer, size_t bufsiz);
void ne_addr_destroy(ne_sock_addr *addr);

Description

The ne_addr_resolve function resolves the given hostname, returning an ne_sock_addr object representing the address (or addresses) associated with the hostname. The flags parameter is currently unused, and must be passed as 0.

The hostname passed to ne_addr_resolve can be a DNS hostname (e.g. "www.example.com") or an IPv4 dotted quad (e.g. "192.0.34.72"); or, on systems which support IPv6, an IPv6 hex address, which may be enclosed in brackets, e.g. "[::1]".

To determine whether the hostname was successfully resolved, the ne_addr_result function is used, which returns non-zero if an error occurred. If an error did occur, the ne_addr_error function can be used, which will copy the error string into a given buffer (of size bufsiz).

The functions ne_addr_first and ne_addr_next are used to retrieve the Internet addresses associated with an address object which has been successfully resolved. ne_addr_first returns the first address; ne_addr_next returns the next address after the most recent call to ne_addr_next or ne_addr_first, or NULL if there are no more addresses. The ne_inet_addr pointer returned by these functions can be passed to ne_sock_connect to connect a socket.

After the address object has been used, it should be destroyed using ne_addr_destroy.

Return value

ne_addr_resolve returns a pointer to an address object, and never NULL. ne_addr_error returns the buffer parameter .

Examples

The code below prints out the set of addresses associated with the hostname www.google.com.

ne_sock_addr *addr;
char buf[256];

addr = ne_addr_resolve("www.google.com", 0);
if (ne_addr_result(addr)) {
    printf("Could not resolve www.google.com: %s\n",
           ne_addr_error(addr, buf, sizeof buf));
} else {
    const ne_inet_addr *ia;
    printf("www.google.com:");
    for (ia = ne_addr_first(addr); ia != NULL; ia = ne_addr_next(addr)) {
        printf(" %s", ne_iaddr_print(ia, buf, sizeof buf));
    }
    putchar('\n');
}
ne_addr_destroy(addr);
tla-1.3.5+dfsg/src/libneon/doc/html/apas10.html0000644000175000017500000000427310457621776017663 0ustar useruserTERMINATION

TERMINATION

You may not copy, modify, sublicense, or distribute the Document except as expressly provided for under this License. Any other attempt to copy, modify, sublicense or distribute the Document is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance.

tla-1.3.5+dfsg/src/libneon/doc/html/refreq.html0000644000175000017500000001715610457621776020066 0ustar useruserne_request_create

Name

ne_request_create, ne_request_dispatch, ne_request_destroy — low-level HTTP request handling

Synopsis

#include <ne_request.h>
ne_request *ne_request_create(ne_session *session, const char *method, const char *path);
int ne_request_dispatch(ne_request *req);
void ne_request_destroy(ne_request *req);

Description

An HTTP request, represented by the ne_request type, specifies that some operation is to be performed on some resource. The ne_request_create function creates a request object, specifying the operation in the method parameter. The location of the resource is determined by the server in use for the session given by the sess parameter, combined with the path parameter.

The path string used must conform to the abs_path definition given in RFC2396, with an optional "?query" part, and must be URI-escaped by the caller (for instance, using ne_path_escape). If the string comes from an untrusted source, failure to perform URI-escaping results in a security vulnerability.

To dispatch a request, and process the response, the ne_request_dispatch function can be used. An alternative is to use the (more complex, but more flexible) combination of the ne_begin_request, ne_end_request, and ne_read_response_block functions; see ne_begin_request.

To add extra headers in the request, the functions ne_add_request_header and ne_print_request_header can be used. To include a message body with the request, one of the functions ne_set_request_body_buffer, ne_set_request_body_fd, or ne_set_request_body_provider can be used.

The return value of ne_request_dispatch indicates merely whether the request was sent and the response read successfully. To discover the result of the operation, ne_get_status, along with any processing of the response headers and message body.

A request can only be dispatched once: calling ne_request_dispatch more than once on a single ne_request object produces undefined behaviour. Once all processing associated with the request object is complete, use the ne_request_destroy function to destroy the resources associated with it. Any subsequent use of the request object produces undefined behaviour.

Return value

The ne_request_create function returns a pointer to a request object (and never NULL).

The ne_request_dispatch function returns zero if the request was dispatched successfully, and a non-zero error code otherwise.

Errors

NE_ERRORRequest failed (see session error string)
NE_LOOKUPThe DNS lookup for the server (or proxy server) failed.
NE_AUTHAuthentication failed on the server.
NE_PROXYAUTHAuthentication failed on the proxy server.
NE_CONNECTA connection to the server could not be established.
NE_TIMEOUTA timeout occurred while waiting for the server to respond.

Example

An example of applying a MKCOL operation to the resource at the location http://www.example.com/foo/bar/:

ne_session *sess = ne_session_create("http", "www.example.com", 80);
ne_request *req = ne_request_create(sess, "MKCOL", "/foo/bar/");
if (ne_request_dispatch(req)) {
   printf("Request failed: %s\n", ne_get_error(sess));
}
ne_request_destroy(req);
tla-1.3.5+dfsg/src/libneon/doc/html/refbuf.html0000644000175000017500000000657010457621776020051 0ustar useruserne_buffer

Name

ne_buffer — string buffer handling

Synopsis

#include <ne_string.h>

typedef struct {
    char *data;
    size_t used;
    size_t length;
} ne_buffer;

Description

The ne_buffer type represents an expandable memory buffer for holding NUL-terminated strings. The data field points to the beginnning of the string, the length of which is given by the used field. The current size of memory allocated is given by the length field. It is not recommended that the fields of a buffer are manipulated directly. The data pointer may change when the buffer is modified.

A buffer is created using ne_buffer_create or ne_buffer_ncreate, and destroyed using ne_buffer_destroy or ne_buffer_finish. The functions ne_buffer_append, ne_buffer_zappend and ne_buffer_concat are used to append data to a buffer.

If the string referenced by the data pointer is modified directly (rather than using one of the functions listed above), ne_buffer_altered must be called.

tla-1.3.5+dfsg/src/libneon/doc/html/refgetst.html0000644000175000017500000000641310457621776020417 0ustar useruserne_get_status

Name

ne_get_status — retrieve HTTP response status for request

Synopsis

#include <ne_request.h>
const ne_status *ne_get_status(const ne_request *request);

Description

The ne_get_status function returns a pointer to the HTTP status object giving the result of a request. The object returned only becomes valid once the request has been successfully dispatched (the return value of ne_request_dispatch or ne_begin_request was zero). The object remains valid until the associated request object is destroyed.

Example

Display the response status code of applying the HEAD method to some resource.

ne_request *req = ne_request_create(sess, "HEAD", "/foo/bar");
if (ne_request_dispatch(req))
   /* handle errors... */
else
   printf("Response status code was %d\n", ne_get_status(req)->code);
ne_request_destroy(req);
tla-1.3.5+dfsg/src/libneon/doc/html/apas03.html0000644000175000017500000000476610457621776017674 0ustar useruserVERBATIM COPYING

VERBATIM COPYING

You may copy and distribute the Document in any medium, either commercially or noncommercially, provided that this License, the copyright notices, and the license notice saying this License applies to the Document are reproduced in all copies, and that you add no other conditions whatsoever to those of this License. You may not use technical measures to obstruct or control the reading or further copying of the copies you make or distribute. However, you may accept compensation in exchange for copies. If you distribute a large enough number of copies you must also follow the conditions in section 3.

You may also lend copies, under the same conditions stated above, and you may publicly display copies.

tla-1.3.5+dfsg/src/libneon/doc/html/apas05.html0000644000175000017500000001556710457621776017677 0ustar useruserMODIFICATIONS

MODIFICATIONS

You may copy and distribute a Modified Version of the Document under the conditions of sections 2 and 3 above, provided that you release the Modified Version under precisely this License, with the Modified Version filling the role of the Document, thus licensing distribution and modification of the Modified Version to whoever possesses a copy of it. In addition, you must do these things in the Modified Version:

  1. Use in the Title Page (and on the covers, if any) a title distinct from that of the Document, and from those of previous versions (which should, if there were any, be listed in the History section of the Document). You may use the same title as a previous version if the original publisher of that version gives permission.

  2. List on the Title Page, as authors, one or more persons or entities responsible for authorship of the modifications in the Modified Version, together with at least five of the principal authors of the Document (all of its principal authors, if it has less than five).

  3. State on the Title page the name of the publisher of the Modified Version, as the publisher.

  4. Preserve all the copyright notices of the Document.

  5. Add an appropriate copyright notice for your modifications adjacent to the other copyright notices.

  6. Include, immediately after the copyright notices, a license notice giving the public permission to use the Modified Version under the terms of this License, in the form shown in the Addendum below.

  7. Preserve in that license notice the full lists of Invariant Sections and required Cover Texts given in the Document's license notice.

  8. Include an unaltered copy of this License.

  9. Preserve the section entitled "History", and its title, and add to it an item stating at least the title, year, new authors, and publisher of the Modified Version as given on the Title Page. If there is no section entitled "History" in the Document, create one stating the title, year, authors, and publisher of the Document as given on its Title Page, then add an item describing the Modified Version as stated in the previous sentence.

  10. Preserve the network location, if any, given in the Document for public access to a Transparent copy of the Document, and likewise the network locations given in the Document for previous versions it was based on. These may be placed in the "History" section. You may omit a network location for a work that was published at least four years before the Document itself, or if the original publisher of the version it refers to gives permission.

  11. In any section entitled "Acknowledgements" or "Dedications", preserve the section's title, and preserve in the section all the substance and tone of each of the contributor acknowledgements and/or dedications given therein.

  12. Preserve all the Invariant Sections of the Document, unaltered in their text and in their titles. Section numbers or the equivalent are not considered part of the section titles.

  13. Delete any section entitled "Endorsements". Such a section may not be included in the Modified Version.

  14. Do not retitle any existing section as "Endorsements" or to conflict in title with any Invariant Section.

If the Modified Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no material copied from the Document, you may at your option designate some or all of these sections as invariant. To do this, add their titles to the list of Invariant Sections in the Modified Version's license notice. These titles must be distinct from any other section titles.

You may add a section entitled "Endorsements", provided it contains nothing but endorsements of your Modified Version by various parties--for example, statements of peer review or that the text has been approved by an organization as the authoritative definition of a standard.

You may add a passage of up to five words as a Front-Cover Text, and a passage of up to 25 words as a Back-Cover Text, to the end of the list of Cover Texts in the Modified Version. Only one passage of Front-Cover Text and one of Back-Cover Text may be added by (or through arrangements made by) any one entity. If the Document already includes a cover text for the same cover, previously added by you or by arrangement made by the same entity you are acting on behalf of, you may not add another; but you may replace the old one, on explicit permission from the previous publisher that added the old one.

The author(s) and publisher(s) of the Document do not by this License give permission to use their names for publicity for or to assert or imply endorsement of any Modified Version.

tla-1.3.5+dfsg/src/libneon/doc/html/refsess.html0000644000175000017500000001454010457621776020246 0ustar useruserne_session_create

Name

ne_session_create, ne_close_connection, ne_session_proxy, ne_session_destroy — set up HTTP sessions

Synopsis

#include <ne_session.h>
ne_session *ne_session_create(const char *scheme, const char *hostname, unsigned int port);
void ne_session_proxy(ne_session *session, const char *hostname, unsigned int port);
void ne_close_connection(ne_session *session);
void ne_session_destroy(ne_session *session);

Description

An ne_session object represents an HTTP session - a logical grouping of a sequence of HTTP requests made to a certain server. Any requests made using the session can use a persistent connection, share cached authentication credentials and any other common attributes.

A new HTTP session is created using ne_session_create, giving the hostname and port of the server to use, along with the scheme used to contact the server (usually "http"). Before the first use of ne_session_create in a process, ne_sock_init must have been called to perform any global initialization needed by any libraries used by neon.

To enable SSL/TLS for the session, pass the string "https" as the scheme parameter, and either register a certificate verification function (see ne_ssl_set_verify) or trust the appropriate certificate (see ne_ssl_trust_cert, ne_ssl_trust_default_ca).

If an HTTP proxy server should be used for the session, ne_session_proxy must be called giving the hostname and port on which to contact the proxy.

If it is known that the session will not be used for a significant period of time, ne_close_connection can be called to close the connection, if one remains open. Use of this function is entirely optional, but it must not be called if there is a request active using the session.

Once a session has been completed, ne_session_destroy must be called to destroy the resources associated with the session. Any subsequent use of the session pointer produces undefined behaviour.

Notes

The hostname passed to ne_session_create is resolved when the first request using the session is dispatched; a DNS resolution failure can only be detected at that time (using the NE_LOOKUP error code); see ne_request_dispatch for details.

Return Values

ne_session_create will return a pointer to a new session object (and never NULL).

Examples

Create and destroy a session:

ne_session *sess;
sess = ne_session_create("http", "host.example.com", 80);
/* ... use sess ... */
ne_session_destroy(sess);
tla-1.3.5+dfsg/src/libneon/doc/html/features.html0000644000175000017500000001012110457621776020401 0ustar useruserFeature list

Feature list

The major features of the neon library are as follows:

  • A high-level interface to common HTTP and WebDAV methods. This allows you to easily dispatch a GET or a MKCOL request against a resource with a single function call.

  • A low-level interface for HTTP request handling; allowing you to implement requests using arbitrary methods and request headers, capture arbitrary response headers, and so on.

  • Persistent connection support; neon groups a set of requests to a server into a "session"; requests within that session can use a persistent (also known as "keep-alive") connection.

  • Modern HTTP authentication support: a complete implementation of the new authentication standard, RFC2617, supporting the Digest (MD5) and Basic schemes, including integrity checking. Credentials are supplied by an application-defined callback.

  • Proxy server support; a session can be set to use a proxy server. Authentication is supported for the Proxy as well as the origin server.

  • Complete SSL support; a simple interface for enabling SSL, hiding the complexity of using an SSL library directly. Client certificate support, callback-based server certificate verification, along with functions to load trusted CA certificates.

  • Generic XML parsing interface for handling XML response bodies using SAX-like callbacks. Both the expat and libxml XML parser libraries are supported.

  • WebDAV metadata support; set and remove properties, query properties (PROPFIND); simple interface for retrieving "flat" byte-string properties, more advanced support for parsing "complex" XML structured properties.

  • Build environment support: the neon source tree is designed so that it can be embedded in your application's build tree; autoconf macros are supplied for integration. To get started quickly a neon-config script is included, to easily determine how to compile and link against an installed copy of neon

  • Complete test suite: the neon test suite comprises half as many lines of source code as the library itself, including many tests for protocol compliance in network behaviour, and that the library implementation meets the guarantees made by the API.

tla-1.3.5+dfsg/src/libneon/doc/html/refssldname.html0000644000175000017500000000715310457621776021101 0ustar useruserne_ssl_dname

Name

ne_ssl_readable_dname, ne_ssl_dname_cmp — SSL distinguished name handling

Synopsis

#include <ne_ssl.h>
const char *ne_ssl_readable_dname(const ne_ssl_dname *dname);
int ne_ssl_dname_cmp(const ne_ssl_dname *dn1, const ne_ssl_dname *dn2);

Description

The ne_ssl_readable_dname function creates a single-line, human-readable string out of an ne_ssl_dname object. The returned string is malloc()-allocated, and must be free()d by the caller.

The ne_ssl_dname_cmp function compares two distinguished names, and returns zero if they are equal, or non-zero otherwise.

Return value

ne_ssl_readable_dname returns a malloc-allocated string, and never NULL.

Examples

See ne_ssl_cert_subject for an example use of ne_ssl_readable_dname.

tla-1.3.5+dfsg/src/libneon/doc/html/refsslcert2.html0000644000175000017500000000561710457621776021037 0ustar useruserne_ssl_cert_cmp

Name

ne_ssl_cert_cmp, ne_ssl_cert_free — functions to operate on certificate objects

Synopsis

#include <ne_header.h>
int ne_ssl_cert_cmp(const ne_ssl_certificate *c1, const ne_ssl_certificate *c2);
void ne_ssl_cert_free(ne_ssl_certificate *cert);

Description

The ne_ssl_cert_cmp function can be used to compare two certificate objects; it returns zero if they refer to the same certificate, and non-zero otherwise.

The ne_ssl_cert_free function can be used to destroy a certificate object when it is no longer needed.

tla-1.3.5+dfsg/src/libneon/doc/html/refreqhdr.html0000644000175000017500000000670710457621776020564 0ustar useruserne_add_request_header

Name

ne_add_request_header, ne_print_request_header — add headers to a request

Synopsis

#include <ne_request.h>
void ne_add_request_header(ne_request *request, const char *name, const char *value);
void ne_print_request_header(ne_request *request, const char *name, const char *format, ...);

Description

The functions ne_add_request_header and ne_print_request_header can be used to add headers to a request, before it is sent.

ne_add_request_header simply adds a header of given name, with given value.

ne_print_request_header adds a header of given name, taking the value from the printf-like format string parameter and subsequent variable-length argument list.

tla-1.3.5+dfsg/src/libneon/doc/html/refsslvfy.html0000644000175000017500000001533710457621776020624 0ustar useruserne_ssl_set_verify

Name

ne_ssl_set_verify — register an SSL certificate verification callback

Synopsis

#include <ne_session.h>
typedef int ne_ssl_verify_fn(void *userdata, int failures, const ne_ssl_certificate *cert);
void ne_ssl_set_verify(ne_session *session, ne_ssl_verify_fn verify_fn, void *userdata);

Description

To enable manual SSL certificate verification, a callback can be registered using ne_ssl_set_verify. If such a callback is not registered, when a connection is established to an SSL server which does not present a certificate signed by a trusted CA (see ne_ssl_trust_cert), or if the certificate presented is invalid in some way, the connection will fail.

When the callback is invoked, the failures parameter gives a bitmask indicating in what way the automatic certificate verification failed. The value is equal to the bit-wise OR of one or more of the following constants (and is guaranteed to be non-zero):

NE_SSL_NOTYETVALIDThe certificate is not yet valid.
NE_SSL_EXPIREDThe certificate has expired.
NE_SSL_IDMISMATCHThe hostname used for the session does not match the hostname to which the certificate was issued.
NE_SSL_UNTRUSTEDThe Certificate Authority which signed the certificate is not trusted.

Note that if either of the NE_SSL_IDMISMATCH or NE_SSL_UNTRUSTED failures is given, the connection may have been intercepted by a third party, and must not be presumed to be “secure”.

The cert parameter passed to the callback represents the certificate which was presented by the server. If the server presented a chain of certificates, the chain can be accessed using ne_ssl_cert_signedby. The cert object given is not valid after the callback returns.

Return value

The verification callback must return zero to indicate that the certificate should be trusted; and non-zero otherwise (in which case, the connection will fail).

Examples

The following code implements an example verification callback, using the dump_cert function from ne_ssl_cert_subject to display certification information. Notice that the hostname of the server used for the session is passed as the userdata parameter to the callback.

static int
my_verify(void *userdata, int failures, const ne_ssl_certificate *cert)
{
  const char *hostname = userdata;

  dump_cert(cert);

  puts("Certificate verification failed - the connection may have been "
       "intercepted by a third party!");

  if (failures & NE_SSL_IDMISMATCH) { 
    const char *id = ne_ssl_cert_identity(cert);
    if (id) 
      printf("Server certificate was issued to '%s' not '%s'.\n",
             id, hostname);
    else
      printf("The certificate was not issued for '%s'\n", hostname);
  }

  if (failures & NE_SSL_UNTRUSTED)
    puts("The certificate is not signed by a trusted Certificate Authority.");

  /* ... check for validity failures ... */

  if (prompt_user())
    return 1; /* fail verification */
  else
    return 0; /* trust the certificate anyway */
}

int
main(...)
{
  ne_session *sess = ne_session_create("https", "some.host.name", 443);
  ne_ssl_set_verify(sess, my_verify, "some.host.name");
  ...
}
tla-1.3.5+dfsg/src/libneon/doc/html/refvers.html0000644000175000017500000000623410457621776020251 0ustar useruserne_version_match

Name

ne_version_match, ne_version_string — library versioning

Synopsis

#include <ne_utils.h>
int ne_version_match(int major, int minor);
const char *ne_version_string(void);

Description

The ne_version_match function returns non-zero if the library version is not of major version major, or the minor version is less than minor. For neon versions 0.x, every minor version is assumed to be incompatible with every other minor version.

The ne_version_string function returns a string giving the library version.

Examples

To require neon 1.x, version 1.2 or later:

if (ne_version_match(1, 2)) {
    printf("Library version out of date: 1.2 required, found %s.",
           ne_version_string());
    exit(1);
}
tla-1.3.5+dfsg/src/libneon/doc/html/apas01.html0000644000175000017500000000573110457621776017663 0ustar useruserPREAMBLE

PREAMBLE

The purpose of this License is to make a manual, textbook, or other written document "free" in the sense of freedom: to assure everyone the effective freedom to copy and redistribute it, with or without modifying it, either commercially or noncommercially. Secondarily, this License preserves for the author and publisher a way to get credit for their work, while not being considered responsible for modifications made by others.

This License is a kind of "copyleft", which means that derivative works of the document must themselves be free in the same sense. It complements the GNU General Public License, which is a copyleft license designed for free software.

We have designed this License in order to use it for manuals for free software, because free software needs free documentation: a free program should come with manuals providing the same freedoms that the software does. But this License is not limited to software manuals; it can be used for any textual work, regardless of subject matter or whether it is published as a printed book. We recommend this License principally for works whose purpose is instruction or reference.

tla-1.3.5+dfsg/src/libneon/doc/html/apas02.html0000644000175000017500000001202010457621776017651 0ustar useruserAPPLICABILITY AND DEFINITIONS

APPLICABILITY AND DEFINITIONS

This License applies to any manual or other work that contains a notice placed by the copyright holder saying it can be distributed under the terms of this License. The "Document", below, refers to any such manual or work. Any member of the public is a licensee, and is addressed as "you".

A "Modified Version" of the Document means any work containing the Document or a portion of it, either copied verbatim, or with modifications and/or translated into another language.

A "Secondary Section" is a named appendix or a front-matter section of the Document that deals exclusively with the relationship of the publishers or authors of the Document to the Document's overall subject (or to related matters) and contains nothing that could fall directly within that overall subject. (For example, if the Document is in part a textbook of mathematics, a Secondary Section may not explain any mathematics.) The relationship could be a matter of historical connection with the subject or with related matters, or of legal, commercial, philosophical, ethical or political position regarding them.

The "Invariant Sections" are certain Secondary Sections whose titles are designated, as being those of Invariant Sections, in the notice that says that the Document is released under this License.

The "Cover Texts" are certain short passages of text that are listed, as Front-Cover Texts or Back-Cover Texts, in the notice that says that the Document is released under this License.

A "Transparent" copy of the Document means a machine-readable copy, represented in a format whose specification is available to the general public, whose contents can be viewed and edited directly and straightforwardly with generic text editors or (for images composed of pixels) generic paint programs or (for drawings) some widely available drawing editor, and that is suitable for input to text formatters or for automatic translation to a variety of formats suitable for input to text formatters. A copy made in an otherwise Transparent file format whose markup has been designed to thwart or discourage subsequent modification by readers is not Transparent. A copy that is not "Transparent" is called "Opaque".

Examples of suitable formats for Transparent copies include plain ASCII without markup, Texinfo input format, LaTeX input format, SGML or XML using a publicly available DTD, and standard-conforming simple HTML designed for human modification. Opaque formats include PostScript, PDF, proprietary formats that can be read and edited only by proprietary word processors, SGML or XML for which the DTD and/or processing tools are not generally available, and the machine-generated HTML produced by some word processors for output purposes only.

The "Title Page" means, for a printed book, the title page itself, plus such following pages as are needed to hold, legibly, the material this License requires to appear in the title page. For works in formats which do not have any title page as such, "Title Page" means the text near the most prominent appearance of the work's title, preceding the beginning of the body of the text.

tla-1.3.5+dfsg/src/libneon/doc/html/refbufapp.html0000644000175000017500000001115610457621776020546 0ustar useruserne_buffer_append

Name

ne_buffer_append, ne_buffer_zappend, ne_buffer_concat — append data to a string buffer

Synopsis

#include <ne_string.h>
void ne_buffer_append(ne_buffer *buf, const char *string, size_t len);
void ne_buffer_zappend(ne_buffer *buf, const char *string);
void ne_buffer_concat(ne_buffer *buf, const char *str, ...);

Description

The ne_buffer_append and ne_buffer_zappend functions append a string to the end of a buffer; extending the buffer as necessary. The len passed to ne_buffer_append specifies the length of the string to append; there must be no NUL terminator in the first len bytes of the string. ne_buffer_zappend must be passed a NUL-terminated string.

The ne_buffer_concat function takes a variable-length argument list following str; each argument must be a char * pointer to a NUL-terminated string. A NULL pointer must be given as the last argument to mark the end of the list. The strings (including str) are appended to the buffer in the order given. None of the strings passed to ne_buffer_concat are modified.

Examples

The following code will output "Hello, world. And goodbye.".

ne_buffer *buf = ne_buffer_create();
ne_buffer_zappend(buf, "Hello");
ne_buffer_concat(buf, ", world. ", "And ", "goodbye.", NULL);
puts(buf->data);
ne_buffer_destroy(buf);
tla-1.3.5+dfsg/src/libneon/doc/html/apas12.html0000644000175000017500000000567610457621776017675 0ustar useruserHow to use this License for your documents

How to use this License for your documents

To use this License in a document you have written, include a copy of the License in the document and put the following copyright and license notices just after the title page:

Copyright (c) YEAR YOUR NAME. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; with the Invariant Sections being LIST THEIR TITLES, with the Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST. A copy of the license is included in the section entitled "GNU Free Documentation License".

If you have no Invariant Sections, write "with no Invariant Sections" instead of saying which ones are invariant. If you have no Front-Cover Texts, write "no Front-Cover Texts" instead of "Front-Cover Texts being LIST"; likewise for Back-Cover Texts.

If your document contains nontrivial examples of program code, we recommend releasing these examples in parallel under your choice of free software license, such as the GNU General Public License, to permit their use in free software.

tla-1.3.5+dfsg/src/libneon/doc/html/using.html0000644000175000017500000001121710457621776017717 0ustar useruserHow to use neon from your application

How to use neon from your application

This section describes how to add neon support to an application. If you just want to quickly try out neon, use the neon-config script.

The neon source code is designed to be easily embedded into an application source tree. neon has no dependencies on libraries other than an SSL toolkit and XML parser, though the source tree can be configured to have no support for SSL or XML if desired. To configure the neon source code some GNU autoconf macros are supplied, which can be used in a number of ways, as follows:

  • autoconf macros are distributed in the 'macros' subdirectory of the neon distribution. Use the NEON_LIBRARY macro from your configure.in to check for the presence of the neon library installed on the system. The macro adds an '--with-neon=...' argument to configure, which allows the user to specify a location for the library (the standard /usr and /usr/local directories are checked automatically without having to be specified).

  • The 'src' directory of the neon package can be imported directly into your application, if you do not wish to add an external dependency. If you wish to bundle, use the NEON_BUNDLED macro to configure neon in your application: here, the neon sources are bundled in a directory called 'libneon':

    NEON_BUNDLED(libneon, ...)

    If your application supports builds where srcdir != builddir, you should use the NEON_VPATH_BUNDLED macro like this:

    NEON_VPATH_BUNDLED(${srcdir}/libneon, libneon, ...)

    If you use this macro, a '--with-included-neon' option will be added to the generated configure script. This allows the user to force the bundled neon to be used in the application, rather than any neon library found on the system. If you allow neon to be configured this way, you must also configure an XML parser. Use the NEON_XML_PARSER macro to do this.

  • The final argument to the _BUNDLED macros is a set of actions which are executed if the bundled build *is* chosen (rather than an external neon which might have been found on the user's system). In here, use either the NEON_LIBTOOL_BUILD or NEON_NORMAL_BUILD macro to set up the neon Makefile appropriately: including adding the neon source directory to the recursive make.

A full fragment might be:

NEON_BUNDLED(libneon, [
  NEON_NORMAL_BUILD
  NEON_XML_PARSER
  SUBDIRS="libneon $SUBDIRS"
])

This means the bundled neon source directory (called 'libneon') is used if no neon is found on the system, and the standard XML parser search is used.

tla-1.3.5+dfsg/src/libneon/doc/html/reftok.html0000644000175000017500000000740210457621776020065 0ustar useruserne_token

Name

ne_token, ne_qtoken — string tokenizers

Synopsis

#include <ne_string.h>
char *ne_token(char **str, char sep);
char *ne_qtoken(char **str, char sep, const char *quotes);

Description

ne_token and ne_qtoken tokenize the string at the location stored in the pointer str. Each time the function is called, it returns the next token, and modifies the str pointer to point to the remainer of the string, or NULL if there are no more tokens in the string. A token is delimited by the separator character sep; if ne_qtoken is used any quoted segments of the string are skipped when searching for a separator. A quoted segment is enclosed in a pair of one of the characters given in the quotes string.

The string being tokenized is modified each time the tokenizing function is called; replacing the next separator character with a NUL terminator.

Examples

The following function prints out each token in a comma-separated string list, which is modified in-place:

static void splitter(char *list)
{
  do {
    printf("Token: %s\n", ne_token(&list, ','));
  while (list);
}
tla-1.3.5+dfsg/src/libneon/doc/html/apas08.html0000644000175000017500000000527410457621776017674 0ustar useruserAGGREGATION WITH INDEPENDENT WORKS

AGGREGATION WITH INDEPENDENT WORKS

A compilation of the Document or its derivatives with other separate and independent documents or works, in or on a volume of a storage or distribution medium, does not as a whole count as a Modified Version of the Document, provided no compilation copyright is claimed for the compilation. Such a compilation is called an "aggregate", and this License does not apply to the other self-contained works thus compiled with the Document, on account of their being thus compiled, if they are not themselves derivative works of the Document.

If the Cover Text requirement of section 3 is applicable to these copies of the Document, then if the Document is less than one quarter of the entire aggregate, the Document's Cover Texts may be placed on covers that surround only the Document within the aggregate. Otherwise they must appear on covers around the whole aggregate.

tla-1.3.5+dfsg/src/libneon/doc/html/refbufutil.html0000644000175000017500000000712110457621776020740 0ustar useruserne_buffer_clear

Name

ne_buffer_clear, ne_buffer_grow, ne_buffer_altered — general purpose of group of functions

Synopsis

#include <ne_string.h>
void ne_buffer_clear(ne_buffer *buf);
void ne_buffer_altered(ne_buffer *buf);
void ne_buffer_grow(ne_buffer *buf, size_t size);

Description

The ne_buffer_clear function sets the string stored in buf to be the empty string ("").

The ne_buffer_altered function must be used after the string stored in the buffer buf is modified by directly rather than using ne_buffer_append, ne_buffer_zappend or ne_buffer_concat.

The ne_buffer_grow function ensures that at least size bytes are allocated for the string; this can be used if a large amount of data is going to be appended to the buffer and may result in more efficient memory allocation.

tla-1.3.5+dfsg/src/libneon/doc/html/refshave.html0000644000175000017500000000540410457621776020376 0ustar useruserne_shave

Name

ne_shave — trim whitespace from a string

Synopsis

#include <ne_string.h>
char *ne_shave(char *str, const char *whitespace);

Description

ne_shave returns a portion of str with any leading or trailing characters in the whitespace array removed. str may be modified. Note that the return value may not be equal to str.

Examples

The following code segment will output "fish":

char s[] = ".!.fish!.!";
puts(ne_shave(s, ".!"));
tla-1.3.5+dfsg/src/libneon/doc/html/ref.html0000644000175000017500000001051410457621776017345 0ustar useruserneon API reference

neon API reference


Table of Contents

neon - HTTP and WebDAV client library
neon-config - script providing information about installed copy of neon library
ne_add_request_header - add headers to a request
ne_addr_resolve - functions to resolve hostnames to addresses
ne_buffer - string buffer handling
ne_buffer_append - append data to a string buffer
ne_buffer_clear - general purpose of group of functions
ne_buffer_create - general purpose of group of functions
ne_buffer_destroy - destroy a buffer object
ne_get_error - error handling for HTTP sessions
ne_get_status - retrieve HTTP response status for request
ne_iaddr_make - functions to manipulate and compare network addresses
ne_malloc - memory allocation wrappers
ne_request_create - low-level HTTP request handling
ne_session_create - set up HTTP sessions
ne_set_useragent - common settings for HTTP sessions
ne_set_request_body_buffer - include a message body with a request
ne_set_server_auth - register authentication callbacks
ne_shave - trim whitespace from a string
ne_sock_init - perform library initialization
ne_ssl_cert_identity - functions to access certificate properties
ne_ssl_cert_cmp - functions to operate on certificate objects
ne_ssl_cert_read - functions to read or write certificates to and from files or strings
ne_ssl_dname - SSL distinguished name handling
ne_ssl_trust_cert - functions to indicate that certificates are trusted
ne_ssl_set_verify - register an SSL certificate verification callback
ne_ssl_client_cert - SSL client certificate handling
ne_status - HTTP status structure
ne_token - string tokenizers
ne_version_match - library versioning
tla-1.3.5+dfsg/src/libneon/doc/html/refauth.html0000644000175000017500000001265110457621776020233 0ustar useruserne_set_server_auth

Name

ne_set_server_auth, ne_set_proxy_auth, ne_forget_auth — register authentication callbacks

Synopsis

#include <ne_auth.h>
typedef int (*ne_request_auth)(void *userdata, const char *realm, int attempt, char *username, char *password);
void ne_set_server_auth(ne_session *session, ne_request_auth callback, void *userdata);
void ne_set_proxy_auth(ne_session *session, ne_request_auth callback, void *userdata);
void ne_forget_auth(ne_session *session);

Description

The ne_request_auth function type defines a callback which is invoked when a server or proxy server requires user authentication for a particular request. The realm string is supplied by the server. The attempt is a counter giving the number of times the request has been retried with different authentication credentials. The first time the callback is invoked for a particular request, attempt will be zero.

To retry the request using new authentication credentials, the callback should return zero, and the username and password buffers must contain NUL-terminated strings. The NE_ABUFSIZ constant gives the size of these buffers.

Tip

If you only wish to allow the user one attempt to enter credentials, use the value of the attempt parameter as the return value of the callback.

To abort the request, the callback should return a non-zero value; in which case the contents of the username and password buffers are ignored.

The ne_forget_auth function can be used to discard the cached authentication credentials.

Examples

/* Function which prompts for a line of user input: */
extern char *prompt_for(const char *prompt);

static int
my_auth(void *userdata, const char *realm, int attempts,
        char *username, char *password)
{
   strncpy(username, prompt_for("Username: "), NE_ABUFSIZ);
   strncpy(password, prompt_for("Password: "), NE_ABUFSIZ);
   return attempts;
}

int main(...)
{
   ne_session *sess = ne_session_create(...);

   ne_set_server_auth(sess, my_auth, NULL);

   /* ... */
}
tla-1.3.5+dfsg/src/libneon/doc/html/index.html0000644000175000017500000001716110457621776017705 0ustar useruserneon HTTP/WebDAV client library

neon HTTP/WebDAV client library

Joe Orton

Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; with no Invariant Sections, with no Front-Cover Texts, and with no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License".


Table of Contents

1. Introduction
Feature list
How to use neon from your application
Protocol compliance
RFC 2518, HTTP Extensions for Distributed Authoring—WebDAV
RFC 2616, Hypertext Transfer Protocol—HTTP/1.1
RFC 2617, HTTP Authentication: Basic and Digest Access Authentication
2. The neon C language interface
Parsing XML
Introduction to SAX
Stacked SAX handlers
Maintaining state
XML namespaces
I. neon API reference
neon - HTTP and WebDAV client library
neon-config - script providing information about installed copy of neon library
ne_add_request_header - add headers to a request
ne_addr_resolve - functions to resolve hostnames to addresses
ne_buffer - string buffer handling
ne_buffer_append - append data to a string buffer
ne_buffer_clear - general purpose of group of functions
ne_buffer_create - general purpose of group of functions
ne_buffer_destroy - destroy a buffer object
ne_get_error - error handling for HTTP sessions
ne_get_status - retrieve HTTP response status for request
ne_iaddr_make - functions to manipulate and compare network addresses
ne_malloc - memory allocation wrappers
ne_request_create - low-level HTTP request handling
ne_session_create - set up HTTP sessions
ne_set_useragent - common settings for HTTP sessions
ne_set_request_body_buffer - include a message body with a request
ne_set_server_auth - register authentication callbacks
ne_shave - trim whitespace from a string
ne_sock_init - perform library initialization
ne_ssl_cert_identity - functions to access certificate properties
ne_ssl_cert_cmp - functions to operate on certificate objects
ne_ssl_cert_read - functions to read or write certificates to and from files or strings
ne_ssl_dname - SSL distinguished name handling
ne_ssl_trust_cert - functions to indicate that certificates are trusted
ne_ssl_set_verify - register an SSL certificate verification callback
ne_ssl_client_cert - SSL client certificate handling
ne_status - HTTP status structure
ne_token - string tokenizers
ne_version_match - library versioning
Bibliography
A. GNU Free Documentation License
0. PREAMBLE
1. APPLICABILITY AND DEFINITIONS
2. VERBATIM COPYING
3. COPYING IN QUANTITY
4. MODIFICATIONS
5. COMBINING DOCUMENTS
6. COLLECTIONS OF DOCUMENTS
7. AGGREGATION WITH INDEPENDENT WORKS
8. TRANSLATION
9. TERMINATION
10. FUTURE REVISIONS OF THIS LICENSE
How to use this License for your documents

List of Examples

2.1. An example XML document
tla-1.3.5+dfsg/src/libneon/doc/ref/0000755000175000017500000000000010457621776015512 5ustar userusertla-1.3.5+dfsg/src/libneon/doc/ref/ssldname.xml0000644000175000017500000000374410457621776020052 0ustar useruser ne_ssl_dname 3 ne_ssl_readable_dname ne_ssl_dname_cmp SSL distinguished name handling #include <ne_ssl.h> const char *ne_ssl_readable_dname const ne_ssl_dname *dname int ne_ssl_dname_cmp const ne_ssl_dname *dn1 const ne_ssl_dname *dn2 Description The ne_ssl_readable_dname function creates a single-line, human-readable string out of an ne_ssl_dname object. The returned string is malloc()-allocated, and must be free()d by the caller. The ne_ssl_dname_cmp function compares two distinguished names, and returns zero if they are equal, or non-zero otherwise. Return value ne_ssl_readable_dname returns a malloc-allocated string, and never &null;. Examples See for an example use of ne_ssl_readable_dname. See also tla-1.3.5+dfsg/src/libneon/doc/ref/req.xml0000644000175000017500000001376110457621776017033 0ustar useruser ne_request_create 3 ne_request_create ne_request_dispatch ne_request_destroy low-level HTTP request handling #include <ne_request.h> ne_request *ne_request_create ne_session *session const char *method const char *path int ne_request_dispatch ne_request *req void ne_request_destroy ne_request *req Description An HTTP request, represented by the ne_request type, specifies that some operation is to be performed on some resource. The ne_request_create function creates a request object, specifying the operation in the method parameter. The location of the resource is determined by the server in use for the session given by the sess parameter, combined with the path parameter. The path string used must conform to the abs_path definition given in RFC2396, with an optional "?query" part, and must be URI-escaped by the caller (for instance, using ne_path_escape). If the string comes from an untrusted source, failure to perform URI-escaping results in a security vulnerability. To dispatch a request, and process the response, the ne_request_dispatch function can be used. An alternative is to use the (more complex, but more flexible) combination of the ne_begin_request, ne_end_request, and ne_read_response_block functions; see ne_begin_request. To add extra headers in the request, the functions and can be used. To include a message body with the request, one of the functions ne_set_request_body_buffer, , or ne_set_request_body_provider can be used. The return value of ne_request_dispatch indicates merely whether the request was sent and the response read successfully. To discover the result of the operation, , along with any processing of the response headers and message body. A request can only be dispatched once: calling ne_request_dispatch more than once on a single ne_request object produces undefined behaviour. Once all processing associated with the request object is complete, use the ne_request_destroy function to destroy the resources associated with it. Any subsequent use of the request object produces undefined behaviour. Return value The ne_request_create function returns a pointer to a request object (and never &null;). The ne_request_dispatch function returns zero if the request was dispatched successfully, and a non-zero error code otherwise. Errors NE_ERROR Request failed (see session error string) NE_LOOKUP The DNS lookup for the server (or proxy server) failed. NE_AUTH Authentication failed on the server. NE_PROXYAUTH Authentication failed on the proxy server. NE_CONNECT A connection to the server could not be established. NE_TIMEOUT A timeout occurred while waiting for the server to respond. Example An example of applying a MKCOL operation to the resource at the location http://www.example.com/foo/bar/: ne_session *sess = ne_session_create("http", "www.example.com", 80); ne_request *req = ne_request_create(sess, "MKCOL", "/foo/bar/"); if (ne_request_dispatch(req)) { printf("Request failed: %s\n", ne_get_error(sess)); } ne_request_destroy(req); See also , , , , . tla-1.3.5+dfsg/src/libneon/doc/ref/config.xml0000644000175000017500000000730710457621776017510 0ustar useruser neon neon-config 1 neon-config script providing information about installed copy of neon library neon-config feature Description The neon-config script provides information about an installed copy of the neon library. The and options instruct how to compile and link an application against the library; the and options can help determine whether the library meets the applications requirements. Options Print the flags which should be passed to the C compiler when compiling object files, when the object files use neon header files. Print the flags which should be passed to the linker when linking an application which uses the neon library Print the location of the libtool library script, libneon.la, which can be used to link against &neon; by applications using libtool. Print the version of the library dir If dir is given; relocate output of and as if neon was installed in given prefix directory. Otherwise, print the installation prefix of the library. feature The script exits with success if feature is supported by the library. Print help message; includes list of known features and whether they are supported or not. Example Below is a Makefile fragment which could be used to build an application against an installed neon library, when the neon-config script can be found in $PATH. CFLAGS = `neon-config --cflags` LIBS = `neon-config --libs` OBJECTS = myapp.o TARGET = myapp $(TARGET): $(OBJECTS) $(CC) $(LDFLAGS) -o $(TARGET) $(OBJECTS) $(LIBS) myapp.o: myapp.c $(CC) $(CFLAGS) -c myapp.c -o myapp.o tla-1.3.5+dfsg/src/libneon/doc/ref/alloc.xml0000644000175000017500000000540510457621776017332 0ustar useruser ne_malloc 3 ne_malloc ne_calloc ne_realloc ne_strdup ne_strndup ne_oom_callback memory allocation wrappers #include <ne_alloc.h> void *ne_malloc size_t size void *ne_calloc size_t size void *ne_realloc void *size size_t len char *ne_strdup const char *s size_t size char *ne_strndup const char *s size_t size void ne_oom_callback void (*callback)(void) Description The functions ne_malloc, ne_calloc, ne_realloc, ne_strdup and ne_strdnup provide wrappers for the equivalent functions in the standard C library. The wrappers provide the extra guarantee that if the C library equivalent returns &null; when no memory is available, an optional callback will be called, and the library will then call abort(). ne_oom_callback registers a callback which will be invoked if an out of memory error is detected. Notes If the operating system uses optimistic memory allocation, the C library memory allocation routines will not return &null;, so it is not possible to gracefully handle memory allocation failures. tla-1.3.5+dfsg/src/libneon/doc/ref/shave.xml0000644000175000017500000000236610457621776017351 0ustar useruser ne_shave 3 ne_shave trim whitespace from a string #include <ne_string.h> char *ne_shave char *str const char *whitespace Description ne_shave returns a portion of str with any leading or trailing characters in the whitespace array removed. str may be modified. Note that the return value may not be equal to str. Examples The following code segment will output "fish": char s[] = ".!.fish!.!"; puts(ne_shave(s, ".!")); tla-1.3.5+dfsg/src/libneon/doc/ref/reqhdr.xml0000644000175000017500000000371610457621776017530 0ustar useruser ne_add_request_header 3 ne_add_request_header ne_print_request_header add headers to a request #include <ne_request.h> void ne_add_request_header ne_request *request const char *name const char *value void ne_print_request_header ne_request *request const char *name const char *format ... Description The functions ne_add_request_header and ne_print_request_header can be used to add headers to a request, before it is sent. ne_add_request_header simply adds a header of given name, with given value. ne_print_request_header adds a header of given name, taking the value from the printf-like format string parameter and subsequent variable-length argument list. See also tla-1.3.5+dfsg/src/libneon/doc/ref/iaddr.xml0000644000175000017500000000747610457621776017335 0ustar useruser ne_iaddr_make 3 ne_iaddr_make ne_iaddr_cmp ne_iaddr_print ne_iaddr_free functions to manipulate and compare network addresses #include <ne_socket.h> typedef enum { ne_iaddr_ipv4 = 0, ne_iaddr_ipv6 } ne_iaddr_type; ne_inet_addr *ne_iaddr_make ne_iaddr_type type const unsigned char *raw int ne_iaddr_cmp const ne_inet_addr *i1 const ne_inet_addr *i2 char *ne_iaddr_print const ne_inet_addr *ia char *buffer size_t bufsiz void ne_iaddr_free const ne_inet_addr *addr Description ne_iaddr_make creates an ne_inet_addr object from a raw binary network address; for instance the four bytes 0x7f 0x00 0x00 0x01 represent the IPv4 address 127.0.0.1. The object returned is suitable for passing to ne_sock_connect. A binary IPv4 address contains four bytes; a binary IPv6 address contains sixteen bytes; addresses passed must be in network byte order. ne_iaddr_cmp can be used to compare two network addresses; returning zero only if they are identical. The addresses need not be of the same address type; if the addresses are not of the same type, the return value is guaranteed to be non-zero. ne_iaddr_print can be used to print the human-readable string representation of a network address into a buffer, for instance the string "127.0.0.1". ne_iaddr_free releases the memory associated with a network address object. Return value ne_iaddr_make returns &null; if the address type passed is not supported (for instance on a platform which does not support IPv6). ne_iaddr_print returns the buffer pointer, and never &null;. Examples The following example connects a socket to port 80 at the address 127.0.0.1. unsigned char addr[] = "\0x7f\0x00\0x00\0x01"; ne_inet_addr *ia; ia = ne_iaddr_make(ne_iaddr_ipv4, addr); if (ia != NULL) { ne_socket *sock = ne_sock_connect(ia, 80); ne_iaddr_free(ia); /* ... */ } else { /* ... */ } See also tla-1.3.5+dfsg/src/libneon/doc/ref/neon.xml0000644000175000017500000001425310457621776017200 0ustar useruser neon 3 neon HTTP and WebDAV client library Description neon is an HTTP and WebDAV client library. The major abstractions exposed are the HTTP session, created by ; and the HTTP request, created by . HTTP authentication is handled transparently for server and proxy servers, see ; complete SSL/TLS support is also included, see . Conventions Some conventions are used throughout the neon API, to provide a consistent and simple interface; these are documented below. Thread-safeness and global initialization &neon; itself is implemented to be thread-safe (avoiding any use of global state), but relies on the operating system providing a thread-safe resolver interface. Modern operating systems offer the thread-safe getaddrinfo interface, which &neon; supports; some others implement gethostbyname using thread-local storage. To allow thread-safe use of the OpenSSL library, the application must register some locking callbacks in accordance with the OpenSSL documentation. Some platforms and libraries used by &neon; require global initialization before use; notably: OpenSSL requires global initialization to load shared lookup tables. The SOCKS library requires initialization before use. The Win32 socket library requires initialization before use. The function should be called before any other use of &neon; to perform any necessary initialization needed for the particular platform. Namespaces To avoid possible collisions between names used for symbols and preprocessor macros by an application and the libraries it uses, it is good practice for each library to reserve a particular namespace prefix. An application which ensures it uses no names with these prefixes is then guaranteed to avoid such collisions. The &neon; library reserves the use of the namespace prefixes ne_ and NE_. The libraries used by &neon; may also reserve certain namespaces; collisions between these libraries and a &neon;-based application will not be detected at compile time, since the underlying library interfaces are not exposed through the &neon; header files. Such collisions can only be detected at link time, when the linker attempts to resolve symbols. The following list documents some of the namespaces claimed by libraries used by &neon;; this list may be incomplete. SSL, ssl, TLS, tls, ERR_, BIO_, d2i_, i2d_, ASN1_ Some of the many prefixes used by the OpenSSL library; little attempt has been made to keep exported symbols within any particular prefixes for this library. XML_, Xml[A-Z] Namespaces used by the expat library. xml[A-Z], html[A-Z], docb[A-Z] Namespaces used by the libxml2 library; a relatively small number of symbols are used without these prefixes. Argument validation &neon; does not attempt to validate that the parameters passed to functions conform to the API (for instance, checking that pointer arguments are not &null;). Any use of the &neon; API which is not documented to produce a certain behaviour results is said to produce undefined behaviour; it is likely that &neon; will segfault under these conditions. URI paths, WebDAV metadata The path strings passed to any function must be URI-encoded by the application; &neon; never performs any URI encoding or decoding internally. WebDAV property names and values must be valid UTF-8 encoded Unicode strings. User interaction As a pure library interface, &neon; will never produce output on stdout or stderr; all user interaction is the responsibilty of the application. Memory handling neon does not attempt to cope gracefully with an out-of-memory situation; instead, by default, the abort function is called to immediately terminate the process. An application may register a custom function which will be called before abort in such a situation; see . Callbacks and userdata Whenever a callback is registered, a userdata pointer is also used to allow the application to associate a context with the callback. The userdata is of type void *, allowing any pointer to be used. See also , tla-1.3.5+dfsg/src/libneon/doc/ref/bufdest.xml0000644000175000017500000000422110457621776017667 0ustar useruser ne_buffer_destroy 3 ne_buffer_destroy ne_buffer_finish destroy a buffer object #include <ne_string.h> void ne_buffer_destroy ne_buffer *buf char *ne_buffer_finish ne_buffer *buf Description ne_buffer_destroy frees all memory associated with the buffer. ne_buffer_finish frees the buffer structure, but not the actual string stored in the buffer, which is returned and must be free()d by the caller. Any use of the buffer object after calling either of these functions gives undefined behaviour. Return value ne_buffer_finish returns the malloc-allocated string stored in the buffer. Examples An example use of ne_buffer_finish; the duplicate function returns a string made up of n copies of str: static char *duplicate(int n, const char *str) { ne_buffer *buf = ne_buffer_create(); while (n--) { ne_buffer_zappend(buf, str); } return ne_buffer_finish(buf); } See also , , tla-1.3.5+dfsg/src/libneon/doc/ref/buf.xml0000644000175000017500000000330010457621776017004 0ustar useruser ne_buffer 3 ne_buffer string buffer handling #include <ne_string.h> typedef struct { char *data; size_t used; size_t length; } ne_buffer; Description The ne_buffer type represents an expandable memory buffer for holding &nul;-terminated strings. The data field points to the beginnning of the string, the length of which is given by the used field. The current size of memory allocated is given by the length field. It is not recommended that the fields of a buffer are manipulated directly. The data pointer may change when the buffer is modified. A buffer is created using or , and destroyed using or . The functions , and are used to append data to a buffer. If the string referenced by the data pointer is modified directly (rather than using one of the functions listed above), ne_buffer_altered must be called. tla-1.3.5+dfsg/src/libneon/doc/ref/auth.xml0000644000175000017500000000733310457621776017203 0ustar useruser ne_set_server_auth 3 ne_set_server_auth ne_set_proxy_auth ne_forget_auth register authentication callbacks #include <ne_auth.h> typedef int (*ne_request_auth) void *userdata const char *realm int attempt char *username char *password void ne_set_server_auth ne_session *session ne_request_auth callback void *userdata void ne_set_proxy_auth ne_session *session ne_request_auth callback void *userdata void ne_forget_auth ne_session *session Description The ne_request_auth function type defines a callback which is invoked when a server or proxy server requires user authentication for a particular request. The realm string is supplied by the server. The attempt is a counter giving the number of times the request has been retried with different authentication credentials. The first time the callback is invoked for a particular request, attempt will be zero. To retry the request using new authentication credentials, the callback should return zero, and the username and password buffers must contain &nul;-terminated strings. The NE_ABUFSIZ constant gives the size of these buffers. If you only wish to allow the user one attempt to enter credentials, use the value of the attempt parameter as the return value of the callback. To abort the request, the callback should return a non-zero value; in which case the contents of the username and password buffers are ignored. The ne_forget_auth function can be used to discard the cached authentication credentials. Examples /* Function which prompts for a line of user input: */ extern char *prompt_for(const char *prompt); static int my_auth(void *userdata, const char *realm, int attempts, char *username, char *password) { strncpy(username, prompt_for("Username: "), NE_ABUFSIZ); strncpy(password, prompt_for("Password: "), NE_ABUFSIZ); return attempts; } int main(...) { &egsess; ne_set_server_auth(sess, my_auth, NULL); /* ... */ } tla-1.3.5+dfsg/src/libneon/doc/ref/opts.xml0000644000175000017500000001115610457621776017225 0ustar useruser ne_set_useragent 3 ne_set_useragent ne_set_persist ne_set_read_timeout ne_set_expect100 common settings for HTTP sessions #include <ne_session.h> void ne_set_useragent ne_session *session const char *product void ne_set_persist ne_session *session int flag void ne_set_read_timeout ne_session *session int timeout void ne_set_expect100 ne_session *session int flag Description The User-Agent request header is used to identify the software which generated the request for statistical or debugging purposes. neon does not send a User-Agent header unless a call is made to the ne_set_useragent. ne_set_useragent must be passed a product string conforming to RFC2616's product token grammar; of the form "Product/Version". By default neon will use a persistent connection whenever possible. For specific applications, or for debugging purposes, it is sometimes useful to disable persistent connections. The ne_set_persist function will disable persistent connections if passed a flag parameter of 0, and will enable them otherwise. When neon reads from a socket, by default the read operation will time out after 60 seconds, and the request will fail giving an NE_TIMEOUT error. To configure this timeout interval, call ne_set_read_timeout giving the desired number of seconds as the timeout parameter. An extension introduced in the HTTP/1.1 specification was the use of the Expect: 100-continue header. This header allows an HTTP client to be informed of the expected response status before the request message body is sent: a useful optimisation for situations where a large message body is to be sent. The ne_set_expect100 function can be used to enable this feature by passing the flag parameter as any non-zero integer. Unfortunately, if this header is sent to a server which is not fully compliant with the HTTP/1.1 specification, a deadlock occurs resulting in a temporarily "hung" connection. neon will recover gracefully from this situation, but only after a 15 second timeout. It is highly recommended that this option is not enabled unless it is known that the server in use correctly implements Expect: 100-continue support. Examples Set a user-agent string: &egsess; ne_set_useragent(sess, "MyApplication/2.1"); Disable use of persistent connections: ne_session *sess = ne_session_create(...); ne_set_persist(sess, 0); Set a 30 second read timeout: &egsess; ne_set_read_timeout(sess, 30); tla-1.3.5+dfsg/src/libneon/doc/ref/sslcert2.xml0000644000175000017500000000260610457621776020001 0ustar useruser ne_ssl_cert_cmp 3 ne_ssl_cert_cmp ne_ssl_cert_free functions to operate on certificate objects #include <ne_header.h> int ne_ssl_cert_cmp const ne_ssl_certificate *c1 const ne_ssl_certificate *c2 void ne_ssl_cert_free ne_ssl_certificate *cert Description The ne_ssl_cert_cmp function can be used to compare two certificate objects; it returns zero if they refer to the same certificate, and non-zero otherwise. The ne_ssl_cert_free function can be used to destroy a certificate object when it is no longer needed. tla-1.3.5+dfsg/src/libneon/doc/ref/clicert.xml0000644000175000017500000001306510457621776017666 0ustar useruser ne_ssl_client_cert 3 ne_ssl_clicert_read ne_ssl_clicert_name ne_ssl_clicert_encrypted ne_ssl_clicert_decrypt ne_ssl_clicert_owner ne_ssl_clicert_free SSL client certificate handling #include <ne_ssl.h> ne_ssl_client_cert *ne_ssl_clicert_read const char *filename const char *ne_ssl_clicert_name const ne_ssl_client_cert *ccert int ne_ssl_clicert_encrypted const ne_ssl_client_cert *ccert int ne_ssl_clicert_decrypt ne_ssl_client_cert *ccert const char *password const ne_ssl_certificate *ne_ssl_clicert_owner const ne_ssl_client_cert *ccert void ne_ssl_clicert_free ne_ssl_client_cert *ccert Description The ne_ssl_clicert_read function reads a client certificate from a PKCS#12-formatted file, and returns an ne_ssl_client_certificate object. If the client certificate is encrypted, it must be decrypted before it is used. An ne_ssl_client_certificate object holds a client certificate and the associated private key, not just a certificate; the term "client certificate" will used to refer to this pair. A client certificate can be in one of two states: encrypted or decrypted. The ne_ssl_clicert_encrypted function will return non-zero if the client certificate is in the encrypted state. A client certificate object returned by ne_ssl_clicert_read may be initially in either state, depending on whether the file was encrypted or not. ne_ssl_clicert_decrypt can be used to decrypt a client certificate using the appropriate password. This function must only be called if the object is in the encrypted state; if decryption fails, the certificate state does not change, so decryption can be attempted more than once using different passwords. A client certificate can be given a "friendly name" when it is created; ne_ssl_clicert_name will return this name (or &null; if no friendly name was specified). ne_ssl_clicert_name can be used when the client certificate is in either the encrypted or decrypted state, and will return the same string for the lifetime of the object. The function ne_ssl_clicert_owner returns the certificate part of the client certificate; it must only be called if the client certificate is in the decrypted state. When the client certificate is no longer needed, the ne_ssl_clicert_free function should be used to destroy the object. Return value ne_ssl_clicert_read returns a client certificate object, or &null; if the file could not be read. ne_ssl_clicert_encrypted returns zero if the object is in the decrypted state, or non-zero if it is in the encrypted state. ne_ssl_clicert_name returns a &nul;-terminated friendly name string, or &null;. ne_ssl_clicert_owner returns a certificate object. Examples The following code reads a client certificate and decrypts it if necessary, then loads it into an HTTP session. ne_ssl_client_certificate *ccert; ccert = ne_ssl_clicert_read("/path/to/client.p12"); if (ccert == NULL) { /* handle error... */ } else if (ne_ssl_clicert_encrypted(ccert)) { char *password = prompt_for_password(); if (ne_ssl_clicert_decrypt(ccert, password)) { /* could not decrypt! handle error... */ } } ne_ssl_set_clicert(sess, ccert); See also tla-1.3.5+dfsg/src/libneon/doc/ref/reqbody.xml0000644000175000017500000000430510457621776017703 0ustar useruser ne_set_request_body_buffer 3 ne_set_request_body_buffer ne_set_request_body_fd include a message body with a request #include <ne_request.h> void ne_set_request_body_buffer ne_request *req const char *buf size_t count Description The ne_set_request_body_buffer function specifies that a message body should be included with the body, which is stored in the count bytes buffer buf. See also tla-1.3.5+dfsg/src/libneon/doc/ref/bufutil.xml0000644000175000017500000000367410457621776017720 0ustar useruser ne_buffer_clear 3 ne_buffer_clear ne_buffer_grow ne_buffer_altered general purpose of group of functions #include <ne_string.h> void ne_buffer_clear ne_buffer *buf void ne_buffer_altered ne_buffer *buf void ne_buffer_grow ne_buffer *buf size_t size Description The ne_buffer_clear function sets the string stored in buf to be the empty string (""). The ne_buffer_altered function must be used after the string stored in the buffer buf is modified by directly rather than using , or . The ne_buffer_grow function ensures that at least size bytes are allocated for the string; this can be used if a large amount of data is going to be appended to the buffer and may result in more efficient memory allocation. tla-1.3.5+dfsg/src/libneon/doc/ref/resolve.xml0000644000175000017500000001206110457621776017713 0ustar useruser ne_addr_resolve 3 ne_addr_resolve ne_addr_result ne_addr_first ne_addr_next ne_addr_error ne_addr_destroy functions to resolve hostnames to addresses #include <ne_socket.h> ne_sock_addr *ne_addr_resolve const char *hostname int flags int ne_addr_result const ne_sock_addr *addr const ne_inet_addr *ne_addr_first ne_sock_addr *addr const ne_inet_addr *ne_addr_next ne_sock_addr *addr char *ne_addr_error const ne_sock_addr *addr char *buffer size_t bufsiz void ne_addr_destroy ne_sock_addr *addr Description The ne_addr_resolve function resolves the given hostname, returning an ne_sock_addr object representing the address (or addresses) associated with the hostname. The flags parameter is currently unused, and must be passed as 0. The hostname passed to ne_addr_resolve can be a DNS hostname (e.g. "www.example.com") or an IPv4 dotted quad (e.g. "192.0.34.72"); or, on systems which support IPv6, an IPv6 hex address, which may be enclosed in brackets, e.g. "[::1]". To determine whether the hostname was successfully resolved, the ne_addr_result function is used, which returns non-zero if an error occurred. If an error did occur, the ne_addr_error function can be used, which will copy the error string into a given buffer (of size bufsiz). The functions ne_addr_first and ne_addr_next are used to retrieve the Internet addresses associated with an address object which has been successfully resolved. ne_addr_first returns the first address; ne_addr_next returns the next address after the most recent call to ne_addr_next or ne_addr_first, or &null; if there are no more addresses. The ne_inet_addr pointer returned by these functions can be passed to ne_sock_connect to connect a socket. After the address object has been used, it should be destroyed using ne_addr_destroy. Return value ne_addr_resolve returns a pointer to an address object, and never &null;. ne_addr_error returns the buffer parameter . Examples The code below prints out the set of addresses associated with the hostname www.google.com. ne_sock_addr *addr; char buf[256]; addr = ne_addr_resolve("www.google.com", 0); if (ne_addr_result(addr)) { printf("Could not resolve www.google.com: %s\n", ne_addr_error(addr, buf, sizeof buf)); } else { const ne_inet_addr *ia; printf("www.google.com:"); for (ia = ne_addr_first(addr); ia != NULL; ia = ne_addr_next(addr)) { printf(" %s", ne_iaddr_print(ia, buf, sizeof buf)); } putchar('\n'); } ne_addr_destroy(addr); See also tla-1.3.5+dfsg/src/libneon/doc/ref/bufcr.xml0000644000175000017500000000277410457621776017347 0ustar useruser ne_buffer_create 3 ne_buffer_create ne_buffer_ncreate general purpose of group of functions #include <ne_alloc.h> ne_buffer *ne_buffer_create ne_buffer *ne_buffer_ncreate size_t size Description ne_buffer_create creates a new buffer object, with an implementation-defined initial size. ne_buffer_ncreate creates an ne_buffer where the minimum initial size is given in the size parameter. The buffer created will contain the empty string (""). Return value Both functions return a pointer to a new buffer object, and never &null;. See also tla-1.3.5+dfsg/src/libneon/doc/ref/sslcertio.xml0000644000175000017500000000663110457621776020251 0ustar useruser ne_ssl_cert_read 3 ne_ssl_cert_read ne_ssl_cert_write ne_ssl_cert_import ne_ssl_cert_export functions to read or write certificates to and from files or strings #include <ne_ssl.h> ne_ssl_certificate *ne_ssl_cert_read const char *filename int ne_ssl_cert_write const ne_ssl_certificate *cert const char *filename ne_ssl_certificate *ne_ssl_cert_import const char *data char *ne_ssl_cert_export const ne_ssl_certificate *cert Description The ne_ssl_cert_write function writes a certificate to a file using the PEM encoding. The ne_ssl_cert_export function returns a base64-encoded &nul;-terminated string representing the certificate. This string is malloc-allocated and should be destroyed using free by the caller. The ne_ssl_cert_read function reads a certificate from a PEM-encoded file, and returns a certificate object. The ne_ssl_cert_import function returns a certificate object from a base64-encoded string, data, as returned by ne_ssl_cert_export. The certificate object returned by these functions should be destroyed using after use. Return value ne_ssl_cert_read returns &null; if a certificate could not be read from the file. ne_ssl_cert_write returns non-zero if the certificate could not be written to the file. ne_ssl_cert_export always returns a &nul;-terminated string, and never &null;. ne_ssl_cert_import returns &null; if the string was not a valid base64-encoded certificate. Encoding Formats The string produced by ne_ssl_cert_export is the base64 encoding of the DER representation of the certificate. The file written by ne_ssl_cert_write uses the PEM format: this is the base64 encoding of the DER representation with newlines every 64 characters, and start and end marker lines. tla-1.3.5+dfsg/src/libneon/doc/ref/vers.xml0000644000175000017500000000325210457621776017215 0ustar useruser ne_version_match 3 ne_version_match ne_version_string library versioning #include <ne_utils.h> int ne_version_match int major int minor const char *ne_version_string Description The ne_version_match function returns non-zero if the library version is not of major version major, or the minor version is less than minor. For &neon; versions 0.x, every minor version is assumed to be incompatible with every other minor version. The ne_version_string function returns a string giving the library version. Examples To require &neon; 1.x, version 1.2 or later: if (ne_version_match(1, 2)) { printf("Library version out of date: 1.2 required, found %s.", ne_version_string()); exit(1); } tla-1.3.5+dfsg/src/libneon/doc/ref/tok.xml0000644000175000017500000000432110457621776017031 0ustar useruser ne_token 3 ne_token ne_qtoken string tokenizers #include <ne_string.h> char *ne_token char **str char sep char *ne_qtoken char **str char sep const char *quotes Description ne_token and ne_qtoken tokenize the string at the location stored in the pointer str. Each time the function is called, it returns the next token, and modifies the str pointer to point to the remainer of the string, or &null; if there are no more tokens in the string. A token is delimited by the separator character sep; if ne_qtoken is used any quoted segments of the string are skipped when searching for a separator. A quoted segment is enclosed in a pair of one of the characters given in the quotes string. The string being tokenized is modified each time the tokenizing function is called; replacing the next separator character with a &nul; terminator. Examples The following function prints out each token in a comma-separated string list, which is modified in-place: static void splitter(char *list) { do { printf("Token: %s\n", ne_token(&list, ',')); while (list); } tla-1.3.5+dfsg/src/libneon/doc/ref/getst.xml0000644000175000017500000000331610457621776017365 0ustar useruser ne_get_status 3 ne_get_status retrieve HTTP response status for request #include <ne_request.h> const ne_status *ne_get_status const ne_request *request Description The ne_get_status function returns a pointer to the HTTP status object giving the result of a request. The object returned only becomes valid once the request has been successfully dispatched (the return value of ne_request_dispatch or ne_begin_request was zero). The object remains valid until the associated request object is destroyed. See also , Example Display the response status code of applying the HEAD method to some resource. ne_request *req = ne_request_create(sess, "HEAD", "/foo/bar"); if (ne_request_dispatch(req)) /* handle errors... */ else printf("Response status code was %d\n", ne_get_status(req)->code); ne_request_destroy(req); tla-1.3.5+dfsg/src/libneon/doc/ref/sslvfy.xml0000644000175000017500000001226310457621776017566 0ustar useruser ne_ssl_set_verify 3 ne_ssl_set_verify register an SSL certificate verification callback #include <ne_session.h> typedef int ne_ssl_verify_fn void *userdata int failures const ne_ssl_certificate *cert void ne_ssl_set_verify ne_session *session ne_ssl_verify_fn verify_fn void *userdata Description To enable manual SSL certificate verification, a callback can be registered using ne_ssl_set_verify. If such a callback is not registered, when a connection is established to an SSL server which does not present a certificate signed by a trusted CA (see ), or if the certificate presented is invalid in some way, the connection will fail. When the callback is invoked, the failures parameter gives a bitmask indicating in what way the automatic certificate verification failed. The value is equal to the bit-wise OR of one or more of the following constants (and is guaranteed to be non-zero): NE_SSL_NOTYETVALID The certificate is not yet valid. NE_SSL_EXPIRED The certificate has expired. NE_SSL_IDMISMATCH The hostname used for the session does not match the hostname to which the certificate was issued. NE_SSL_UNTRUSTED The Certificate Authority which signed the certificate is not trusted. Note that if either of the NE_SSL_IDMISMATCH or NE_SSL_UNTRUSTED failures is given, the connection may have been intercepted by a third party, and must not be presumed to be secure. The cert parameter passed to the callback represents the certificate which was presented by the server. If the server presented a chain of certificates, the chain can be accessed using . The cert object given is not valid after the callback returns. Return value The verification callback must return zero to indicate that the certificate should be trusted; and non-zero otherwise (in which case, the connection will fail). Examples The following code implements an example verification callback, using the dump_cert function from to display certification information. Notice that the hostname of the server used for the session is passed as the userdata parameter to the callback. static int my_verify(void *userdata, int failures, const ne_ssl_certificate *cert) { const char *hostname = userdata; dump_cert(cert); puts("Certificate verification failed - the connection may have been " "intercepted by a third party!"); if (failures & NE_SSL_IDMISMATCH) { const char *id = ne_ssl_cert_identity(cert); if (id) printf("Server certificate was issued to '%s' not '%s'.\n", id, hostname); else printf("The certificate was not issued for '%s'\n", hostname); } if (failures & NE_SSL_UNTRUSTED) puts("The certificate is not signed by a trusted Certificate Authority."); /* ... check for validity failures ... */ if (prompt_user()) return 1; /* fail verification */ else return 0; /* trust the certificate anyway */ } int main(...) { ne_session *sess = ne_session_create("https", "some.host.name", 443); ne_ssl_set_verify(sess, my_verify, "some.host.name"); ... } See also , , tla-1.3.5+dfsg/src/libneon/doc/ref/sess.xml0000644000175000017500000001101210457621776017204 0ustar useruser ne_session_create 3 ne_session_create ne_close_connection ne_session_proxy ne_session_destroy set up HTTP sessions #include <ne_session.h> ne_session *ne_session_create const char *scheme const char *hostname unsigned int port void ne_session_proxy ne_session *session const char *hostname unsigned int port void ne_close_connection ne_session *session void ne_session_destroy ne_session *session Description An ne_session object represents an HTTP session - a logical grouping of a sequence of HTTP requests made to a certain server. Any requests made using the session can use a persistent connection, share cached authentication credentials and any other common attributes. A new HTTP session is created using ne_session_create, giving the hostname and port of the server to use, along with the scheme used to contact the server (usually "http"). Before the first use of ne_session_create in a process, must have been called to perform any global initialization needed by any libraries used by &neon;. To enable SSL/TLS for the session, pass the string "https" as the scheme parameter, and either register a certificate verification function (see ) or trust the appropriate certificate (see , ). If an HTTP proxy server should be used for the session, ne_session_proxy must be called giving the hostname and port on which to contact the proxy. If it is known that the session will not be used for a significant period of time, ne_close_connection can be called to close the connection, if one remains open. Use of this function is entirely optional, but it must not be called if there is a request active using the session. Once a session has been completed, ne_session_destroy must be called to destroy the resources associated with the session. Any subsequent use of the session pointer produces undefined behaviour. Notes The hostname passed to ne_session_create is resolved when the first request using the session is dispatched; a DNS resolution failure can only be detected at that time (using the NE_LOOKUP error code); see for details. Return Values ne_session_create will return a pointer to a new session object (and never &null;). Examples Create and destroy a session: ne_session *sess; sess = ne_session_create("http", "host.example.com", 80); /* ... use sess ... */ ne_session_destroy(sess); See Also , , tla-1.3.5+dfsg/src/libneon/doc/ref/bufapp.xml0000644000175000017500000000564410457621776017522 0ustar useruser ne_buffer_append 3 ne_buffer_append ne_buffer_zappend ne_buffer_concat append data to a string buffer #include <ne_string.h> void ne_buffer_append ne_buffer *buf const char *string size_t len void ne_buffer_zappend ne_buffer *buf const char *string void ne_buffer_concat ne_buffer *buf const char *str ... Description The ne_buffer_append and ne_buffer_zappend functions append a string to the end of a buffer; extending the buffer as necessary. The len passed to ne_buffer_append specifies the length of the string to append; there must be no &nul; terminator in the first len bytes of the string. ne_buffer_zappend must be passed a &nul;-terminated string. The ne_buffer_concat function takes a variable-length argument list following str; each argument must be a char * pointer to a &nul;-terminated string. A &null; pointer must be given as the last argument to mark the end of the list. The strings (including str) are appended to the buffer in the order given. None of the strings passed to ne_buffer_concat are modified. Examples The following code will output "Hello, world. And goodbye.". ne_buffer *buf = ne_buffer_create(); ne_buffer_zappend(buf, "Hello"); ne_buffer_concat(buf, ", world. ", "And ", "goodbye.", NULL); puts(buf->data); ne_buffer_destroy(buf); See also , , tla-1.3.5+dfsg/src/libneon/doc/ref/ssltrust.xml0000644000175000017500000000411110457621776020134 0ustar useruser ne_ssl_trust_cert 3 ne_ssl_trust_cert ne_ssl_trust_default_ca functions to indicate that certificates are trusted #include <ne_session.h> void ne_ssl_trust_cert ne_session *session const ne_ssl_certificate *cert void ne_ssl_trust_default_ca ne_session *session Description To indicate that a given certificate is trusted by the user, the certificate object can be passed to ne_ssl_trust_cert. The certificate object is duplicated internally and can subequently be destroyed. The SSL library in use by &neon; may include a default set of CA certificates; calling the ne_ssl_trust_default_ca function will indicate that these CAs are trusted by the user. Examples Load the CA certificate stored in /path/to/cacert.pem: &egsess; ne_ssl_certificate *cert = ne_ssl_cert_read("/path/to/cacert.pem"); if (cert) { ne_ssl_trust_cert(sess, cert); ne_ssl_cert_free(cert); } else { printf("Could not load CA cert: %s\n", ne_get_error(sess)); } See also , , tla-1.3.5+dfsg/src/libneon/doc/ref/status.xml0000644000175000017500000000447210457621776017566 0ustar useruser ne_status 3 ne_status HTTP status structure #include <ne_utils.h> typedef struct { int major_version, minor_version; int code, klass; const char *reason_phrase; } ne_status; Description An ne_status type represents an HTTP response status; used in response messages giving a result of request. The major_version and minor_version fields give the HTTP version supported by the server issuing the response. The code field gives the status code of the result (lying between 100 and 999 inclusive), and the klass field gives the classthe field is named klass not class so that the header can be used from a C++ program, in which class is a reserved word), which is equal to the most significant digit of the status. There are five classes of HTTP status code defined by RFC2616: 1xx Informational response. 2xx Success: the operation was successful 3xx Redirection 4xx Client error: the request made was incorrect in some manner. 5xx Server error See also . tla-1.3.5+dfsg/src/libneon/doc/ref/err.xml0000644000175000017500000000361010457621776017024 0ustar useruser ne_get_error 3 ne_get_error ne_set_error error handling for HTTP sessions #include <ne_session.h> const char *ne_get_error ne_sesssion *session void ne_set_error ne_sesssion *session const char *format ... Description The session error string is used to store any human-readable error information associated with any errors which occur whilst using the HTTP session. The ne_get_error function returns the current session error string. This string persists only until it is changed by a subsequent operation on the session. The ne_set_error function can be used to set a new session error string, using a printf-style format string interface. Examples Retrieve the current error string: &egsess; ... printf("Error was: %s\n", ne_get_error(sess)); Set a new error string: &egsess; ... ne_set_error(sess, "Response missing header %s", "somestring"); tla-1.3.5+dfsg/src/libneon/doc/ref/init.xml0000644000175000017500000000241110457621776017175 0ustar useruser ne_sock_init 3 ne_sock_init perform library initialization #include <ne_socket.h> int ne_sock_init Description In some platforms and configurations, &neon; may be using some socket or SSL libraries which require global initialization before use. To perform this initialization, the ne_sock_init function must be called once before any other library functions are used. Return value ne_sock_init returns zero on success, or non-zero on error. If an error occurs, no further use of the &neon; library should be attempted. See also tla-1.3.5+dfsg/src/libneon/doc/ref/sslcert.xml0000644000175000017500000000723010457621776017715 0ustar useruser ne_ssl_cert_identity 3 ne_ssl_cert_identity ne_ssl_cert_signedby ne_ssl_cert_issuer ne_ssl_cert_subject functions to access certificate properties #include <ne_ssl.h> const char *ne_ssl_cert_identity const ne_ssl_certificate *cert const ne_ssl_certificate *ne_ssl_cert_signedby const ne_ssl_certificate *cert const ne_ssl_dname *ne_ssl_cert_subject const ne_ssl_certificate *cert const ne_ssl_dname *ne_ssl_cert_issuer const ne_ssl_certificate *cert Description The function ne_ssl_cert_identity retrieves the identity of a certificate; for an SSL server certificate, this will be the hostname for which the certificate was issued. In PKI parlance, the identity is the common name attribute of the distinguished name of the certificate subject. The functions ne_ssl_cert_subject and ne_ssl_cert_issuer can be used to access the objects representing the distinguished name of the subject and of the issuer of a certificate, respectively. If a certificate object is part of a certificate chain, then ne_ssl_cert_signedby can be used to find the certificate which signed a particular certificate. For a self-signed certificate or a certificate for which the full chain is not available, this function will return &null;. Return value ne_ssl_cert_issuer and ne_ssl_cert_subject are guaranteed to never return &null;. ne_ssl_cert_identity may return &null; if the certificate has no specific identity. ne_ssl_cert_signedby may return &null; as covered above. Examples The following function could be used to display information about a given certificate: void dump_cert(const ne_ssl_certificate *cert) { const char *id = ne_ssl_cert_identity(cert); char *dn; if (id) printf("Certificate was issued for '%s'.\n", id); dn = ne_ssl_readable_dname(ne_ssl_cert_subject(cert)); printf("Subject: %s\n", dn); free(dn); dn = ne_ssl_readable_dname(ne_ssl_cert_issuer(cert)); printf("Issuer: %s\n", dn); free(dn); } See also , tla-1.3.5+dfsg/src/libneon/doc/using.xml0000644000175000017500000001235110457621776016607 0ustar useruser How to use neon from your application This section describes how to add &neon; support to an application. If you just want to quickly try out &neon;, use the script. The &neon; source code is designed to be easily embedded into an application source tree. &neon; has no dependencies on libraries other than an SSL toolkit and XML parser, though the source tree can be configured to have no support for SSL or XML if desired. To configure the &neon; source code some GNU autoconf macros are supplied, which can be used in a number of ways, as follows: autoconf macros are distributed in the 'macros' subdirectory of the neon distribution. Use the NEON_LIBRARY macro from your configure.in to check for the presence of the neon library installed on the system. The macro adds an '--with-neon=...' argument to configure, which allows the user to specify a location for the library (the standard /usr and /usr/local directories are checked automatically without having to be specified). The 'src' directory of the neon package can be imported directly into your application, if you do not wish to add an external dependency. If you wish to bundle, use the NEON_BUNDLED macro to configure neon in your application: here, the neon sources are bundled in a directory called 'libneon': NEON_BUNDLED(libneon, ...) If your application supports builds where srcdir != builddir, you should use the NEON_VPATH_BUNDLED macro like this: NEON_VPATH_BUNDLED(${srcdir}/libneon, libneon, ...) If you use this macro, a '--with-included-neon' option will be added to the generated configure script. This allows the user to force the bundled neon to be used in the application, rather than any neon library found on the system. If you allow neon to be configured this way, you must also configure an XML parser. Use the NEON_XML_PARSER macro to do this. The final argument to the _BUNDLED macros is a set of actions which are executed if the bundled build *is* chosen (rather than an external neon which might have been found on the user's system). In here, use either the NEON_LIBTOOL_BUILD or NEON_NORMAL_BUILD macro to set up the neon Makefile appropriately: including adding the neon source directory to the recursive make. A full fragment might be: NEON_BUNDLED(libneon, [ NEON_NORMAL_BUILD NEON_XML_PARSER SUBDIRS="libneon $SUBDIRS" ]) This means the bundled neon source directory (called 'libneon') is used if no neon is found on the system, and the standard XML parser search is used. Protocol compliance &neon; is intended to be compliant with the IETF protocol standards it implements, with a few exceptions where real-world use has necessitated minor deviations. These exceptions are documented in this section. RFC 2518, HTTP Extensions for Distributed Authoring—WebDAV &neon; is deliberately not compliant with section 23.4.2, and treats property names as a (namespace-URI, name) pair. This is generally considered to be correct behaviour by the WebDAV working group, and is likely to formally adopted in a future revision of the specification. RFC 2616, Hypertext Transfer Protocol—HTTP/1.1 There is some confusion in this specification about the use of the identity transfer-coding. &neon; treats the presence of any Transfer-Encoding response header as an indication that the response message uses the chunked transfer-coding. This was the suggested resolution proposed by Larry Masinter. RFC 2617, HTTP Authentication: Basic and Digest Access Authentication &neon; is not strictly compliant with the quoting rules given in the grammar for the Authorization header. The grammar requires that the qop and algorithm parameters are not quoted, however one widely deployed server implementation (Microsoft® IIS 5) rejects the request if these parameters are not quoted. &neon; sends these parameters with quotes—this is not known to cause any problems with other server implementations. tla-1.3.5+dfsg/src/libneon/doc/xml.xml0000644000175000017500000001613110457621776016262 0ustar useruser Parsing XML The &neon; XML interface is exposed by the ne_xml.h header file. This interface gives a wrapper around the standard SAX API used by XML parsers, with an additional abstraction, stacked SAX handlers, and also giving consistent XML Namespace support. Introduction to SAX A SAX-based parser works by emitting a sequence of events to reflect the tokens being parsed from the XML document. For example, parsing the following document fragment: world
]]> results in the following events: &startelm; "hello" &cdata; "world" &endelm; "hello" This example demonstrates the three event types used used in the subset of SAX exposed by the &neon; XML interface: &startelm;, &cdata; and &endelm;. In a C API, an event is implemented as a function callback; three callback types are used in &neon;, one for each type of event. Stacked SAX handlers WebDAV property values are represented as fragments of XML, transmitted as parts of larger XML documents over HTTP (notably in the body of the response to a PROPFIND request). When &neon; parses such documents, the SAX events generated for these property value fragments may need to be handled by the application, since &neon; has no knowledge of the structure of properties used by the application. To solve this problemThis problem only needs solving because the SAX interface is so inflexible when implemented as C function callbacks; a better approach would be to use an XML parser interface which is not based on callbacks. the &neon; XML interface introduces the concept of a SAX handler. A SAX handler comprises a &startelm;, &cdata; and &endelm; callback; the &startelm; callback being defined such that each handler may accept or decline the &startelm; event. Handlers are composed into a handler stack before parsing a document. When a new &startelm; event is generated by the XML parser, &neon; invokes each &startelm; callback in the handler stack in turn until one accepts the event. The handler which accepts the event will then be subsequently be passed &cdata; events if the element contains character data, followed by an &endelm; event when the element is closed. If no handler in the stack accepts a &startelm; event, the branch of the tree is ignored. To illustrate, given a handler A, which accepts the cat and age elements, and a handler B, which accepts the name element, the following document: An example XML document 3 Bob ]]> would be parsed as follows: A &startelm; "cat" → accept A &startelm; "age" → accept A &cdata; "3" A &endelm; "age" A &startelm; "name" → decline B &startelm; "name" → accept B &cdata; "Bob" B &endelm; "name" A &endelm; "cat" The search for a handler which will accept a &startelm; event begins at the handler of the parent element and continues toward the top of the stack. For the root element, it begins at the base of the stack. In the above example, handler A is at the base, and handler B at the top; if the name element had any children, only B's &startelm; would be invoked to accept them. Maintaining state To facilitate communication between independent handlers, a state integer is associated with each element being parsed. This integer is returned by &startelm; callback and is passed to the subsequent &cdata; and &endelm; callbacks associated with the element. The state integer of the parent element is also passed to each &startelm; callback, the value zero used for the root element (which by definition has no parent). To further extend : if handler A defines that the state of the root element cat will be 42, the event trace would be as follows: A &startelm; (parent = 0, "cat") → accept, state = 42 A &startelm; (parent = 42, "age") → accept, state = 50 A &cdata; (state = 50, "3") A &endelm; (state = 50, "age") A &startelm; (parent = 42, "name") → decline B &startelm; (parent = 42, "name") → accept, state = 99 B &cdata; (state = 99, "Bob") B &endelm; (state = 99, "name") A &endelm; (state = 42, "cat") To avoid collisions between state integers used by different handlers, the interface definition of any handler includes the range of integers it will use. XML namespaces To support XML namespaces, every element name is represented as a (namespace, name) pair. The &startelm; and &endelm; callbacks are passed namespace and name strings accordingly. If an element in the XML document has no declared namespace, the namespace given will be the empty string, "". tla-1.3.5+dfsg/src/libneon/.version0000644000175000017500000000000710457621776015654 0ustar useruser0.24.7 tla-1.3.5+dfsg/src/libneon/README0000644000175000017500000000377110457621776015061 0ustar useruser neon is an HTTP and WebDAV client library, with a C language API. Bindings for other languages may also be available, see the web site for more details. Mailing list: neon@webdav.org || Web site: http://www.webdav.org/neon/ WARNING: THE NEON API IS NOT YET STABLE. Current features: - High-level interface to HTTP and WebDAV methods. - Low-level interface to HTTP request handling, to allow implementing new methods easily. - Persistent connection support (HTTP/1.1 and HTTP/1.0 aware) - Basic and digest authentication (RFC2617) (including auth-int, md5-sess) - Proxy support (including basic/digest authentication) - SSL/TLS support using OpenSSL (including client certificate support) - Generic WebDAV 207 XML response handling mechanism - XML parsing using expat or libxml (1.x or 2.x) parser - Easy generation of error messages from 207 error responses - Basic HTTP/1.1 methods: GET, PUT, HEAD, OPTIONS, conditional PUT - WebDAV resource manipulation: MOVE, COPY, DELETE, MKCOL. - WebDAV metadata support: set and remove properties (PROPPATCH), query any set of properties (PROPFIND). - WebDAV locking support - Autoconf macros supplied for easily embedding neon directly inside an application source tree. Provides lower-level interfaces to directly implement new HTTP methods, and higher-level interfaces so that you don't have to worry about the lower-level stuff. neon is licensed under the GNU Library GPL; see src/COPYING.LIB for full details. The manual is licensed under the terms of the GNU FDL; see doc/fdl.sgml or the generated documentation. The autoconf macros in the "macros" directory are under a more liberal license, see each file for details. The test suite is licensed under the GNU GPL; see test/COPYING for full details. neon is Copyright (C) 1999-2003 Joe Orton Portions are: Copyright (C) 1999-2000 Tommi Komulainen Copyright (C) 1999-2000, Peter Boos Copyright (C) 1991, 1995, 1996, 1997 Free Software Foundation, Inc. tla-1.3.5+dfsg/src/libneon/AUTHORS0000644000175000017500000000042010457621776015235 0ustar useruserneon is Copyright (C) 1999-2003 Joe Orton Portions are: Copyright (C) 1999-2000 Tommi Komulainen Copyright (C) 1999-2000 Peter Boos Copyright (C) 1991, 1995, 1996, 1997 Free Software Foundation, Inc. tla-1.3.5+dfsg/src/libneon/THANKS0000644000175000017500000000324610457621776015111 0ustar useruserIn alphabetical order: Arun Garg Blair Zajac Branko Èibej Daniel Berlin David Sloat David Reid Dirk Bergstrom Gerald Richter Greg Stein Gregor Bornemann Jeff Johnson Jeremy Elson Jim Whitehead Johan Lindh Justin Erenkrantz Kai Sommerfeld Keith Wannamaker Lee Mallabone Magnus Sirwiö Markus Mueller Max Bowsher Michael Sobolev Mike Rosellini Mo DeJong Noriaki Takamiya Olof Oberg Pawel Golaszewski Peter Boos Peter Moulder rado Risko Gergely Rodney Dawes Sam TH Sander Alberink Sander Striker Stefan Esser Shane Mayer Taisuke Yamada Teng Xu Tom Bednarz Tom Lee Torsten Kalix Wilfredo Sánchez Originators of stolen code: Tommi Komulainen Daniel Veillard Eric S Raymond Ulrich Drepper tla-1.3.5+dfsg/src/libneon/INSTALL.win320000644000175000017500000001005010457621776016157 0ustar useruserBuilding neon on Windows uses a single Nmake neon.mak file. By placing various parameters on nmake's command line, you can specify exactly the features and behavior of the Neon libraries. The parameters are additive, so to add more features, add the command line options specified in the particular section below. All the builds described below should work with Microsoft VC++ 5 and 6. Build neon __________ This is the most basic version of the Neon library you can build. It does not require any third party libraries, but you do not get the full capabilities of Neon. Compile Neon with no parameters nmake /f neon.mak After compiling the library, the directory contains libneon.lib, against which you can link your program. Build neon with WebDAV support ______________________________ To compile Neon with WebDAV support, Neon must compile and link against a third-party XML parser, either expat, expat-lite, libxml or libxml2. This Windows neon.mak file is designed to compile and link against the pre-built Expat Windows libraries version 1.95.X or newer. This library is available for download from http://sourceforge.net/projects/expat/ Download the latest expat_win32bin package named expat_win32bin_X_YY_Z.exe and install it on your system. It wants to install itself into Q:\some\dir\Expat-X.Y.ZZ. Choose your installation location for expat and then compile Neon with nmake /f neon.mak EXPAT_SRC=\path\to\Expat-X.YY.Z NOTE: When you run your program make sure the LIBEXPAT.DLL from expat is accessible, i.e. is in your PATH. This should work with Microsoft VC++ 5 and 6. Build neon with dynamically linked SSL support ______________________________________________ To build neon on Windows with SSL support you need OpenSSL already installed on your system (I used OpenSSL 0.9.6g). It can be downloaded from http://www.openssl.org/source/openssl-0.9.6g.tar.gz After compiling OpenSSL, now simply point make to the OpenSSL sources: nmake /f neon.mak OPENSSL_SRC=\path\to\openssl NOTE: The include files for OpenSSL reside in inc32/ directory ("../openssl-0.9.6g/inc32"). NOTE: Make sure that your program is linked against libeay32.lib and ssleay32.lib (normally in "../openssl-0.9.6g/out32dll") and that libeay32.dll and ssleay32.dll is accessible, i.e. is in your PATH. Build neon with statically linked OpenSSL support _________________________________________________ If you want to statically link against OpenSSL, then add the OPENSSL_STATIC parameter. nmake /f neon.mak OPENSSL_SRC=\path\to\openssl OPENSSL_STATIC=yes Build neon with statically linked Zlib support ______________________________________________ If you want to build Neon with the capability to decompress compressed content, then you need to compile against the Zlib library. Currently, the Neon's neon.mak file expects to compile and link a self compiled version of Zlib. You need Zlib 1.1.4 or greater. Zlib 1.1.3 and older has a serious security issue. Here's how to compile Zlib. 1) Get one of the Zlib source file packages in Zip format from http://www.gzip.org/zlib/ 2) Unzip it. 3) Get the package http://www.gzip.org/zlib/contrib/zlib113-win32.zip 4) Unzip it and copy the Makefile from this package to the Zlib 1.1.4 or greater package. 5) Run nmake in the Zlib 1.1.4 or greater directory. Now add the ZLIB_SRC parameter to Neon's neon.mak pointing to your newly compiled zlib. nmake /f neon.mak ZLIB_SRC=\path\to\zlib Build neon with dynamically linked Zlib support _______________________________________________ To build Neon with dynamically linked Zlib support, use the instructions for the statically linked Zlib support above and add the ZLIB_DLL parameter nmake /f neon.mak ZLIB_SRC=\path\to\zlib ZLIB_DLL=yes Build neon with debugging support _________________________________ Set the DEBUG_BUILD parameter nmake /f neon.mak DEBUG_BUILD=yes It does not matter what value DEBUG_BUILD is set to, as long as it is not set to "". After compiling the library, the directory contains libneonD.lib, against which you can link your program. tla-1.3.5+dfsg/src/libneon/Makefile.in0000644000175000017500000001043610457621776016242 0ustar useruser# Copyright (C) 2001-2004 Joe Orton # Copyright (C) 1994, 1995-8, 1999, 2000 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. # libtool bits mostly stolen from libxml and libtool/demo SHELL = @SHELL@ prefix = @prefix@ exec_prefix = @exec_prefix@ bindir = @bindir@ libdir = @libdir@ mandir = @mandir@ man1dir = $(mandir)/man1 man3dir = $(mandir)/man3 datadir = @datadir@ docdir = $(datadir)/doc/neon-@NEON_VERSION@ includedir = @includedir@ neonincludes = $(includedir)/neon pkgconfigdir = $(libdir)/pkgconfig top_srcdir = @top_srcdir@ top_builddir = . srcdir = @srcdir@ VPATH = @srcdir@ @SET_MAKE@ LDFLAGS = -L. -L$(top_builddir)/../expat @LDFLAGS@ LIBS = @LIBS@ CC = @CC@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL = @INSTALL@ transform = @program_transform_name@ LIBTOOL = @LIBTOOL@ XMLTO = xmlto # The headers to distribute - making up the public interface of neon DIST_HEADERS = ne_request.h ne_session.h ne_utils.h ne_uri.h ne_socket.h \ ne_basic.h ne_207.h ne_props.h ne_xml.h ne_dates.h ne_string.h \ ne_cookies.h ne_defs.h ne_locks.h ne_alloc.h ne_md5.h ne_i18n.h \ ne_redirect.h ne_auth.h ne_compress.h ne_acl.h ne_ssl.h all: subdirs check: subdirs cd test && $(MAKE) check # Useful for doing coverage analysis; use e.g.: # make TESTS=string-tests MODULE=ne_string cover cover: subdirs rm -f src/$(MODULE).da cd test && $(MAKE) check cd src; gcov -cb $(MODULE) subdirs: cd src && $(MAKE) @echo @echo " neon compilation complete." @echo # Uses Tim Waugh's excellent "xmlto" utility, see # http://cyberelk.net/tim/xmlto/. (The docs target is executed at release # time before generating a .tar.gz) docs: docs-man docs-html docs-man: rm -rf doc/man; mkdir doc/man $(XMLTO) -o `pwd`/doc/man man doc/manual.xml docs-pdf: $(XMLTO) -o `pwd`/doc pdf doc/manual.xml docs-ps: $(XMLTO) -o `pwd`/doc ps doc/manual.xml docs-html: test -d doc/html && rm -rf doc/html || true mkdir doc/html $(XMLTO) -o `pwd`/doc/html -x doc/html.xsl html doc/manual.xml # Validate the manual source docs-valid: xmllint --noout --valid doc/manual.xml clean: cd src && $(MAKE) clean cd test && $(MAKE) clean distclean: clean rm -rf Makefile config.h config.status libtool config.log config.cache neon-config autom4te.cache neon.pc test/Makefile test/common/Makefile src/Makefile again: clean Makefile: Makefile.in @./config.status Makefile neon-config: neon-config.in @./config.status neon-config install-docs: install-man install-html install-html: $(INSTALL) -d $(DESTDIR)$(docdir)/html for d in $(srcdir)/doc/html/*.html; do \ $(INSTALL_DATA) $$d $(DESTDIR)$(docdir)/html; \ done install-man: $(INSTALL) -d $(DESTDIR)$(man3dir) $(INSTALL) -d $(DESTDIR)$(man1dir) for m in $(srcdir)/doc/man/*.3; do \ $(INSTALL_DATA) $$m $(DESTDIR)$(man3dir); done for m in $(srcdir)/doc/man/*.1; do \ $(INSTALL_DATA) $$m $(DESTDIR)$(man1dir); done test: all install: all install-memleak: @echo "ERROR: The neon internal memory leak checking code is for testing" @echo "ERROR: purposes only; this copy of neon must not be installed." @false install-yes: install-lib install-headers install-config install-docs # libtool does all the necessary magic here install-lib: subdirs $(INSTALL) -d $(DESTDIR)$(libdir) $(LIBTOOL) --mode=install $(INSTALL) src/libneon.la \ $(DESTDIR)$(libdir)/libneon.la install-headers: $(INSTALL) -d $(DESTDIR)$(neonincludes) @for h in $(DIST_HEADERS); do \ echo Installing $$h into $(DESTDIR)$(neonincludes); \ $(INSTALL_DATA) $(srcdir)/src/$$h $(DESTDIR)$(neonincludes)/$$h \ || exit 1; \ done install-config: neon-config neon.pc $(INSTALL) -d $(DESTDIR)$(bindir) @echo Installing neon-config into $(DESTDIR)$(bindir) @$(INSTALL_SCRIPT) neon-config \ $(DESTDIR)$(bindir)/`echo neon-config|sed '$(transform)'` $(INSTALL) -d $(DESTDIR)$(pkgconfigdir) $(INSTALL_DATA) neon.pc $(DESTDIR)$(pkgconfigdir)/neon.pc tla-1.3.5+dfsg/src/libneon/macros/0000755000175000017500000000000010457621776015455 5ustar userusertla-1.3.5+dfsg/src/libneon/macros/socklen-arg-type.m40000600000175000017500000000170310457621776021074 0ustar useruserdnl This function is (C) 1997,98,99 Stephan Kulow (coolo@kde.org) dnl Modifications (C) Joe Orton 1999,2000 AC_DEFUN([SOCKLEN_ARG_TYPE],[ dnl Check for the type of the third argument of getsockname AC_MSG_CHECKING(for the third argument of getsockname) AC_CACHE_VAL(ac_cv_ksize_t, [AC_TRY_COMPILE([ #include #include ],[ socklen_t a=0; getsockname(0,(struct sockaddr*)0, &a); ], ac_cv_ksize_t=socklen_t, ac_cv_ksize_t=) if test -z "$ac_cv_ksize_t"; then ac_safe_cflags="$CFLAGS" if test "$GCC" = "yes"; then CFLAGS="-Werror $CFLAGS" fi AC_TRY_COMPILE([ #include #include ],[ int a=0; getsockname(0,(struct sockaddr*)0, &a); ], ac_cv_ksize_t=int, ac_cv_ksize_t=size_t) CFLAGS="$ac_safe_cflags" fi ]) if test -z "$ac_cv_ksize_t"; then ac_cv_ksize_t=int fi AC_MSG_RESULT($ac_cv_ksize_t) AC_DEFINE_UNQUOTED(ksize_t, $ac_cv_ksize_t, [Define to be the type of the third argument to getsockname]) ])tla-1.3.5+dfsg/src/libneon/macros/neon-xml-parser.m40000600000175000017500000001150010457621776020733 0ustar useruser# Copyright (C) 1998-2004 Joe Orton -*- autoconf -*- # # This file is free software; you may copy and/or distribute it with # or without modifications, as long as this notice is preserved. # This software is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY, to the extent permitted by law; without even # the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR # PURPOSE. # The above license applies to THIS FILE ONLY, the neon library code # itself may be copied and distributed under the terms of the GNU # LGPL, see COPYING.LIB for more details # This file is part of the neon HTTP/WebDAV client library. # See http://www.webdav.org/neon/ for the latest version. # Please send any feedback to # Check for XML parser, supporting libxml 2.x and expat 1.95.x, # or a bundled copy of expat. # * Bundled expat if a directory name argument is passed # -> expat dir must contain minimal expat sources, i.e. # xmltok, xmlparse sub-directories. See sitecopy/cadaver for # examples of how to do this. # # Usage: # NEON_XML_PARSER() # or # NEON_XML_PARSER(expat-dir) dnl Find expat: run $1 if found, else $2 AC_DEFUN([NE_XML_EXPAT], [ AC_CHECK_HEADER(expat.h, [AC_CHECK_LIB(expat, XML_SetXmlDeclHandler, [ AC_DEFINE(HAVE_EXPAT, 1, [Define if you have expat]) neon_xml_parser_message="expat" NEON_LIBS="$NEON_LIBS -lexpat" neon_xml_parser=expat ], [$1])], [$1]) ]) dnl Find libxml2: run $1 if found, else $2 AC_DEFUN([NE_XML_LIBXML2], [ AC_CHECK_PROG(XML2_CONFIG, xml2-config, xml2-config) if test -n "$XML2_CONFIG"; then neon_xml_parser_message="libxml `$XML2_CONFIG --version`" AC_DEFINE(HAVE_LIBXML, 1, [Define if you have libxml]) # xml2-config in some versions erroneously includes -I/include # in the --cflags output. CPPFLAGS="$CPPFLAGS `$XML2_CONFIG --cflags | sed 's| -I/include||g'`" NEON_LIBS="$NEON_LIBS `$XML2_CONFIG --libs | sed 's|-L/usr/lib ||g'`" AC_CHECK_HEADERS(libxml/xmlversion.h libxml/parser.h,,[ AC_MSG_ERROR([could not find parser.h, libxml installation problem?])]) neon_xml_parser=libxml2 else $1 fi ]) dnl Configure for a bundled expat build. AC_DEFUN([NE_XML_BUNDLED_EXPAT], [ AC_REQUIRE([AC_C_BIGENDIAN]) # Define XML_BYTE_ORDER for expat sources. if test $ac_cv_c_bigendian = "yes"; then ne_xml_border=21 else ne_xml_border=12 fi # mini-expat doesn't pick up config.h CPPFLAGS="$CPPFLAGS -DXML_BYTE_ORDER=$ne_xml_border -DXML_DTD -I$1/xmlparse -I$1/xmltok" # Use the bundled expat sources AC_LIBOBJ($1/xmltok/xmltok) AC_LIBOBJ($1/xmltok/xmlrole) AC_LIBOBJ($1/xmlparse/xmlparse) AC_LIBOBJ($1/xmlparse/hashtable) AC_DEFINE(HAVE_EXPAT) AC_DEFINE(HAVE_XMLPARSE_H, 1, [Define if using expat which includes xmlparse.h]) ]) AC_DEFUN([NEON_XML_PARSER], [ dnl Switches to force choice of library AC_ARG_WITH([libxml2], AC_HELP_STRING([--with-libxml2], [force use of libxml 2.x])) AC_ARG_WITH([expat], AC_HELP_STRING([--with-expat], [force use of expat])) dnl Flag to force choice of included expat, if available. ifelse($#, 1, [ AC_ARG_WITH([included-expat], AC_HELP_STRING([--with-included-expat], [use bundled expat sources]),, with_included_expat=no)], with_included_expat=no) if test "$NEON_NEED_XML_PARSER" = "yes"; then # Find an XML parser neon_xml_parser=none # Forced choice of expat: case $with_expat in yes) NE_XML_EXPAT([AC_MSG_ERROR([expat library not found, cannot proceed])]) ;; no) ;; */libexpat.la) # Special case for Subversion ne_expdir=`echo $with_expat | sed 's:/libexpat.la$::'` AC_DEFINE(HAVE_EXPAT) CPPFLAGS="$CPPFLAGS -I$ne_expdir" if test "x${NEON_TARGET}" = "xlibneon.la"; then NEON_LTLIBS=$with_expat else # no dependency on libexpat => crippled libneon, so do partial install ALLOW_INSTALL=lib fi neon_xml_parser=expat neon_xml_parser_message="expat in $ne_expdir" ;; /*) AC_MSG_ERROR([--with-expat does not take a directory argument]) ;; esac # If expat wasn't specifically enabled and libxml was: if test "${neon_xml_parser}-${with_libxml}-${with_included_expat}" = "none-yes-no"; then NE_XML_LIBXML2( [AC_MSG_ERROR([libxml2.x library not found, cannot proceed])]) fi # Otherwise, by default search for libxml2 then expat: if test "${neon_xml_parser}-${with_included_expat}" = "none-no"; then NE_XML_LIBXML2([NE_XML_EXPAT([:])]) fi # If an XML parser still has not been found, fail or use the bundled expat if test "$neon_xml_parser" = "none"; then m4_if($1, [], [AC_MSG_ERROR([no XML parser was found: expat or libxml 2.x required])], [# Configure the bundled copy of expat NE_XML_BUNDLED_EXPAT($1) neon_xml_parser_message="bundled expat in $1"]) fi AC_MSG_NOTICE([XML parser used: $neon_xml_parser_message]) fi ]) tla-1.3.5+dfsg/src/libneon/macros/neon-test.m40000644000175000017500000000246210457621776017637 0ustar useruser# Copyright (C) 2001-2002 Joe Orton -*- autoconf -*- # # This file is free software; you may copy and/or distribute it with # or without modifications, as long as this notice is preserved. # This software is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY, to the extent permitted by law; without even # the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR # PURPOSE. # The above license applies to THIS FILE ONLY, the neon library code # itself may be copied and distributed under the terms of the GNU # LGPL, see COPYING.LIB for more details # This file is part of the neon HTTP/WebDAV client library. # See http://www.webdav.org/neon/ for the latest version. # Please send any feedback to # Tests needed for the neon-test common test code. AC_DEFUN([NEON_TEST], [ AC_REQUIRE([NEON_COMMON_CHECKS]) AC_REQUIRE([AC_TYPE_PID_T]) AC_REQUIRE([AC_HEADER_TIME]) dnl NEON_XML_PARSER may add things (e.g. -I/usr/local/include) to dnl CPPFLAGS which make "gcc -Werror" fail in NEON_FORMAT; suggest dnl this macro is used first. AC_BEFORE([$0], [NEON_XML_PARSER]) AC_CHECK_HEADERS(sys/time.h) AC_CHECK_FUNCS(pipe isatty usleep shutdown) AC_REQUIRE([NE_FIND_AR]) NEON_FORMAT(time_t, [ #ifdef HAVE_SYS_TIME_H #include #endif]) ]) tla-1.3.5+dfsg/src/libneon/macros/ChangeLog0000600000175000017500000007421210457621776017225 0ustar useruserSat Jul 3 11:39:01 2004 Joe Orton * neon.m4 (LIBNEON_SOURCE_CHECKS): Pick up gethostbyname in -lsocket for QNX. Wed May 19 08:36:44 2004 Joe Orton * neon.m4 (LIBNEON_SOURCE_CHECKS): Declare stpcpy on modern "Linux-like" AIXes. Fri Apr 16 11:43:10 2004 Joe Orton * neon-xml-parser.m4 (NEON_XML_PARSER): If built using libtool, and --with-expat specifies a libexpat.la file, add the libexpat.la to NEON_LTLIBS. * neon.m4 (NEON_COMMON_CHECKS): Substitute NEON_LTLIBS. Tue Apr 13 20:51:59 2004 Joe Orton * neon.m4 (NEON_GSSAPI): Check for presence of gssapi/gssapi_generic.h. Thu Nov 13 20:25:28 2003 Joe Orton * neon.m4 (LIBNEON_SOURCE_CHECKS): Check for gethostbyname in -lbind too. Tue Oct 7 21:20:16 2003 Joe Orton * neon-test.m4 (NEON_TEST): Check for shutdown. Mon Sep 22 21:20:37 2003 Joe Orton * neon.m4 (NE_CHECK_FUNCS, NE_SEARCH_LIBS): Avoid clobbering ne_save_{LIBS,CPPFLAGS}. Sun Sep 14 10:51:34 2003 Joe Orton * neon.m4 (LIBNEON_SOURCE_CHECKS): Check for working AI_ADDRCONFIG flag for getaddrinfo(). Wed Sep 10 21:45:10 2003 Joe Orton * neon.m4 (NEON_GSSAPI): Restore CPPFLAGS and NEON_LIBS if GSSAPI detection fails. Thu Sep 4 21:29:06 2003 Joe Orton * neon.m4 (LIBNEON_SOURCE_CHECKS): Check for netinet/tcp.h. Wed Jul 23 21:17:40 2003 Joe Orton * neon.m4 (NEON_GSSAPI): New macro. Mon Apr 21 18:24:12 2003 Joe Orton * neon-xml-parser.m4 (HAVE_EXPAT): Fail if --with-expat is given but expat.h is not found. Wed Mar 26 20:29:11 2003 Joe Orton * neon.m4 (NEON_SSL): And add ne_stubssl to NEON_EXTRAOBJS for non-SSL build. Tue Mar 25 20:43:01 2003 Joe Orton * neon.m4 (NEON_SSL): Add ne_openssl to NEON_EXTRAOBJS. Mon Mar 17 20:34:55 2003 Joe Orton * neon.m4 (LIBNEON_SOURCE_CHECKS): Check for netdb.h. Sun Mar 16 14:22:02 2003 Joe Orton * neon-xml-parser.m4 (NE_XML_BUNDLED_EXPAT): Define HAVE_XMLPARSE_H. Sun Mar 16 11:47:35 2003 Joe Orton * neon-xml-parser.m4 (NEON_XML_PARSER): Also fix non-included-expat build for when included expat is not an option. Sun Mar 16 11:20:23 2003 Joe Orton * neon-xml-parser.m4 (NEON_XML_PARSER): Fix non-included-expat build broken in previous commit. Sun Mar 16 09:06:41 2003 Joe Orton * neon-xml-parser.m4 (NEON_XML_PARSER): Fix --with-included-expat support. Sun Mar 9 10:08:57 2003 Joe Orton * neon.m4 (NEON_SSL): Fail if --with-ssl is given an argument. Sun Mar 9 08:55:04 2003 Joe Orton * neon.m4 (NE_SEARCH_LIBS): Bug fix to always compare against `extras' if given. Add support for optional `actions-if-found' argument. * neon-xml-parser.m4: Largely rewritten. Drop support for libxml 1.x; require expat 1.95.x. Sun Mar 9 08:50:22 2003 Joe Orton * neon.m4 (LIBNEON_SOURCE_CHECKS): Check for stpcpy. Mon Mar 3 22:15:56 2003 Joe Orton * neon.m4 (NE_CHECK_FUNCS): Check whether h_errno is declared. Wed Feb 19 21:35:20 2003 Joe Orton * neon.m4 (NEON_FORMAT): Revert use of 'z' modifier; breaks on CygWin. Tue Jan 14 17:06:07 2003 Joe Orton * neon.m4 (NEON_FORMAT): Prefer the C99 'z' modifier to printf size_t/ssize_t values where available. Fri Jan 3 23:12:20 2003 Joe Orton * neon.m4 (NE_PKG_CONFIG): New macro. (NEON_SSL): Use NE_PKG_CONFIG rather than PKG_CHECK_MODULES. Mon Dec 16 20:02:45 2002 Joe Orton * neon.m4 (NEON_SSL): Only check for OpenSSL <=0.9.6 if version is known to be <=0.9.7. Mon Dec 16 19:01:57 2002 Joe Orton * neon.m4: Use pkg-config data to determine location OpenSSL libraries/headers, if available. Tue Nov 19 11:21:31 2002 Joe Orton * neon-test.m4 (NEON_TEST): Suggest this macro is run before NEON_XML_PARSER. Mon Oct 7 22:22:12 2002 Joe Orton * neon.m4 (NE_CHECK_SSLVER): New macro. (NEON_SSL): Use NE_CHECK_SSLVER. Add --with-egd argument; conditionally enable EGD, optionally using only a specific EGD socket path, and only if using OpenSSL before 0.9.7. Tue Sep 24 21:36:01 2002 Joe Orton * neon.m4 (NE_ZLIB_VERSION): Removed macro. (NEON_ZLIB): Removed --with-force-zlib flag; don't check zlib version. (NEON_SSL): Removed --with-force-ssl flag, only require OpenSSL 0.9.6 or later. Sat Aug 31 17:28:15 2002 Joe Orton * neon.m4 (NEON_FORMAT_PREP): Add check for gcc -Wformat -Werror sanity. (NEON_FORMAT): Only use gcc -Wformat -Werror if sanity is assured. Fri Aug 30 22:07:59 2002 Joe Orton * neon.m4: Set NEON_INTERFACE_VERSION according to NEON_VERSION_MINOR, NEON_VERSION_RELEASE, for the duration of neon 0.x releases. Sun Aug 25 23:52:38 2002 Joe Orton * neon.m4 (NE_CHECK_FUNCS): New macro. (LIBNEON_SOURCE_CHECKS): Use NE_CHECK_FUNCS rather than AC_CHECK_FUNCS, so $NEON_LIBS are searched. Sun Aug 25 11:53:20 2002 Joe Orton * neon.m4 (LIBNEON_SOURCE_CHECKS): Require inet_ntop as well for USE_GETADDRINFO test. Sun Aug 18 22:50:09 2002 Joe Orton * neon.m4 (LIBNEON_SOURCE_CHECKS): Remove redundant check for SIGPIPE definition. Sun Aug 18 22:41:15 2002 Joe Orton * neon.m4 (NE_SEARCH_LIBS): Take optional fourth argument. (LIBNEON_SOURCE_CHECKS): Define USE_GETADDRINFO if getaddrinfo and gai_strerror are present. Otherwise, check for hstrerror, possibly in -lresolv. * neon-test.m4: Don't check for hstrerror(). Sun Aug 18 22:31:13 2002 Joe Orton * neon-xml-parser.m4 (NEON_FIND_PARSER_H, NEON_XML_LIBXML2): Re-order checks to skip redundant tests, speeding up common case. Fri Aug 9 19:47:14 2002 Joe Orton * neon.m4 (NEON_SSL): Require OpenSSL 0.9.6f or later. Wed Jul 31 23:01:17 2002 Joe Orton * strftime.m4, readline.m4: Removed from neon/macros CVS module. Tue Jul 30 19:09:20 2002 Joe Orton * neon.m4 (NEON_COMMON_CHECKS): Require AC_TYPE_SIZE_T, AC_TYPE_OFF_T. * neon-test.m4 (NEON_TEST): Require AC_TYPE_PID_T. Tue Jul 30 19:06:48 2002 Joe Orton * neon.m4 (NEON_SSL): Require OpenSSL 0.9.6e or later for security fixes; add --with-force-ssl to override version check. Fri Jul 26 00:01:07 2002 Joe Orton * neon.m4 (NE_MACOSX): Just check for any Darwin system. Sat Jul 20 10:40:29 2002 Joe Orton * neon.m4 (NEON_WITH_LIBS): Allow a colon-separated list of directories for --with-libs argument. Thu Jul 18 20:07:43 2002 Joe Orton * neon.m4 (LIBNEON_SOURCE_CHECKS): Require AC_FUNC_STRERROR_R. Wed Jul 17 23:26:51 2002 Joe Orton * neon.m4 (NEON_CHECK_VERSION): Rewrite to cache results, simplify, and use new ne_version_match. (NE_ZLIB_VERSION): Cache result. Fri Jul 5 12:57:56 2002 Joe Orton * neon.m4 (NEON_SSL): Fail if openssl/opensslv.h header is not found, or if OpenSSL version is earlier than 0.9.6. Sun Jun 16 14:04:18 2002 Joe Orton * neon.m4 (NEON_FORMAT): Take optional third argument giving format string specifier to use. (NEON_COMMON_CHECKS): Get format string for ssize_t; fix to use 'u' specifier for size_t format string. Thu Jun 13 20:34:35 2002 Joe Orton * neon-xml-parser.m4 (NEON_XML_PARSER): Undocument use of =DIR parameter to --with-expat, as it gives false expectations. Wed Jun 12 23:26:40 2002 Joe Orton * neon.m4 (NEON_WITH_LIBS): New macro. Mon Jun 10 22:31:50 2002 Joe Orton * neon.m4 (NEON_WARNINGS): Replace -ansi-pedantic with -pedantic. Sun May 26 19:08:12 2002 Joe Orton * neon-xml-parser.m4 (NEON_XML_LIBXML2): Check for libxml/xmlversion.h header too. Wed May 22 09:54:42 2002 Joe Orton * neon.m4 (NE_MACOSX): Cache result. (NE_COMMON_CHECKS): Simplify tm_gmtoff check further: use AC_CHECK_MEMBERS. Mon May 20 21:18:06 2002 Joe Orton * neon.m4 (NE_SEARCH_LIBS): Cache results. Mon May 20 20:55:04 2002 Joe Orton * neon.m4 (LIBNEON_SOURCE_CHECKS): Use AC_CACHE_CHECK to check for SIGPIPE in signal.h; don't invade the ac_ namespace with cache variables. Cache results of tm_gmtoff test too. Mon May 20 20:35:22 2002 Joe Orton * neon.m4 (NE_SNPRINTF): Simplify logic. Sun May 19 20:23:55 2002 Joe Orton * neon.m4 (NEON_WARNINGS): Remove with_warnings variable; simplify. Sun May 19 09:35:08 2002 Joe Orton * neon.m4 (NE_FIND_AR): Fix $PATH handling on some Linux platforms. Sun May 19 09:05:22 2002 Joe Orton * neon.m4 (NE_FIND_AR): New macro. (NEON_NORMAL_BUILD): Require NE_FIND_AR. * neon-test.m4: Require NE_FIND_AR. Check for hstrerror(). Fri May 17 23:37:19 2002 Joe Orton * neon.m4 (NEON_SSL): Allow --without-ssl again. Wed May 15 21:00:15 2002 Joe Orton * neon-xml-parser.m4 (NEON_XML_LIBXML2): sed '-L/usr/lib ' out of xml2-config --libs output. Sat May 11 15:30:38 2002 Joe Orton * neon.m4 (NEON_SOCKS): Moved and simplified from neon-socks.m4. Drop support for specifying directory argument; fail if --with-socks is given and socks.h is not found. * neon-socks.m4: Removed file. Sat May 11 15:22:36 2002 Joe Orton * neon.m4 (NEON_DEBUG): Moved and simplified from neon-debug.m4. * neon-debug.m4: Removed file. Sat May 11 13:40:29 2002 Joe Orton * neon.m4 (NEON_WARNINGS): Moved and simplified from neon-warnings.m4. * neon-warnings.m4: Removed file. Sat May 11 13:26:00 2002 Joe Orton * neon.m4 (NEON_SSL): Simplified version of NEON_SSL from neon-ssl.m4. Check for ssl.h; detect OpenSSL ENGINE correctly when -lcrypto requries -ldl. * neon-ssl.m4: Removed file. Sat May 11 13:16:27 2002 Joe Orton * neon.m4 (NE_SEARCH_LIBS): Allow passing 'extralibs' to include in library list when link against a specified library fails. Prepend found library/libraries to $NEON_LIBS. Sat May 11 12:40:24 2002 Joe Orton * neon-xml-parser.m4 (NEON_XML_PARSER), * neon.m4 (NEON_REPLACE_SNPRINTF): Use AC_LIBOBJ rather than modify LIBOBJS directly, to appease autoconf 2.53. Wed May 1 22:32:10 2002 Joe Orton * neon-xml-parser.m4 (NEON_XML_LIBXML1): Fix syntax error in libxml 1.x detection causing spurious or missing warning message. Thu Apr 25 07:38:33 2002 Joe Orton * neon-xml-parser.m4 (NEON_XML_EXTERNAL_EXPAT): Check for expat.h too, to support expat 1.95.x (Branko Èibej). Tue Apr 23 21:09:55 2002 Joe Orton * neon-xml-parser.m4 (NEON_FIND_PARSER_H): New macro, factored out from NEON_XML_LIBXML2. (NEON_XML_LIBXML2, NEON_XML_LIBXML1): Use it. Tue Apr 23 20:54:30 2002 Joe Orton * neon-xml-parser.m4 (NEON_XML_LIBXML2): Check for parser.h or libxml/parser.h, or fail. Sat Apr 13 22:35:01 2002 Joe Orton * neon.m4 (NE_SNPRINTF): Define NEON_TRIO in NEON_CFLAGS, export it from 'neon-config --cflags' output. Fri Apr 5 23:40:00 2002 Joe Orton * neon.m4 (NEON_ZLIB, NE_ZLIB_VERSION): Add --with-force-zlib, to skip zlib version check. Simplify neon_zlib_message handling a little. Tue Mar 12 00:18:00 2002 Joe Orton * neon.m4 (NE_ZLIB_VERSION): New macro. (NEON_ZLIB): Use it to require zlib 1.1.4. Sun Mar 10 22:05:26 2002 Joe Orton * neon.m4 (NEON_ZLIB): Don't add ne_compress to NEON_EXTRAOBJS. Mon Mar 4 21:04:28 2002 Joe Orton * neon-ssl.m4 (NEON_SSL): Avoid adding -I/usr/include to CFLAGS during build as well as not exporting it via neon-config. Tue Feb 19 21:30:50 2002 Joe Orton * neon-socks.m4 (NEON_SOCKS): Fix configure argument name, export -L argument in NEON_LIBS, check for socks.h not sock.h, define NEON_SOCKS. Sun Jan 13 20:07:51 2002 Joe Orton * neon.m4 (NE_MACOSX): New macro. (NEON_COMMON_CHECKS): Call it. Sun Jan 6 21:35:08 2002 Joe Orton * neon-xml-parser.m4 (NEON_XML_PARSER): Add XML_BYTE_ORDER to CPPFLAGS; mini-expat doesn't pick up config.h. Tue Jan 1 23:30:03 2002 Joe Orton * neon-xml-parser.m4 (NEON_XML_PARSER): Set XML_BYTE_ORDER appropriately. Tue Jan 1 22:50:15 2002 Joe Orton * neon.m4 (NEON_CHECK_VERSION): Don't add libs for external neon to NEON_LIBS here. Tue Jan 1 22:44:05 2002 Joe Orton * neon-xml-parser.m4 (NEON_XML_LIBXML2, NEON_XML_LIBXML1): Alter CPPFLAGS only, not CFLAGS. Tue Jan 1 21:49:16 2002 Joe Orton * neon.m4 (NEON_USE_EXTERNAL): Factored out from NEON_COMMON. (NEON_COMMON): Use NEON_USE_EXTERNAL; simplify, improve reporting. * neon.m4 (NEON_COMMON_CHECKS): Move check for common headers here... (LIBNEON_SOURCE_CHECKS): from here. Tue Jan 1 21:44:33 2002 Joe Orton * neon-test.m4 (NEON_TEST): Check for AR and RANLIB. Fri Dec 14 22:39:57 2001 Joe Orton * neon-test.m4 (NEON_TEST): Pick up time_t definition from sys/time.h if present (fix for Solaris 2.6 and probably elsewhere). Fri Dec 14 22:39:32 2001 Joe Orton * neon.m4 (NEON_FORMAT): Allow passing in headers where type may be defined. Mon Dec 10 07:36:26 2001 Joe Orton * neon.m4 (NEON_COMMON): Fix --with-neon=PATH again. Sun Dec 9 21:40:47 2001 Joe Orton * neon-test.m4 (NEON_TEST): Determine how to print time_t. Sun Dec 9 11:50:03 2001 Joe Orton * neon.m4 (NEON_WITHOUT_ACL): New macro. (LIBNEON_SOURCE_CHECKS): Conditionally build ACL support. Sun Dec 9 01:06:32 2001 Joe Orton * neon.m4 (NEON_CHECK_VERSION): Use NEON_CONFIG as config script, drop first argument. Better error message if the link failed. (NEON_COMMON): Cleanup. Check for neon-config in PATH. Stop if --with-neon was given, and the external neon wasn't good enough. Sun Dec 9 00:17:19 2001 Joe Orton * neon-test.m4 (NEON_TEST): Requires NEON_COMMON_CHECKS. * neon-warnings.m4 (NEON_WARNINGS): Requires AC_PROG_CC. Sun Dec 9 00:13:47 2001 Joe Orton * neon.m4 (NEON_COMMON_CHECKS): New macro; runs common C language/compiler checks, which may be useful to neon applications regardless of whether a bundled or external neon is being used. Use AC_REQUIRE to prevent macros being expanded more than once. (LIBNEON_SOURCE_CHECKS, NEON_COMMON): Require NEON_COMMON_CHECKS to have been expanded. Sat Dec 8 00:56:34 2001 Joe Orton * neon.m4 (NEON_FORMAT): Rewrite to use cache results (should fix for cross-compiling), and for GCC, actually test for warnings - fix for Linux. Sat Dec 8 00:15:44 2001 Joe Orton * neon.m4 (NEON_CHECK_SUPPORT): Send --support output to /dev/null, in case it is from pre-0.18 and prints the usage message. Sat Dec 8 00:13:55 2001 Joe Orton * neon.m4 (NEON_COMMON): Prepend -lneon to NEON_LIBS rather than overwriting it when using bundled build. Mon Dec 3 19:49:28 2001 Joe Orton * neon.m4 (NEON_FORMAT_PREP, NEON_FORMAT): New macros. (LIBNEON_SOURCE_CHECKS): Call them. Mon Dec 3 19:43:11 2001 Joe Orton Fix gethostbyname() detection on Unixware 7: * neon.m4 (NEON_COMMON): Add -lneon to NEON_LIBS after performing source checks. (NE_SEARCH_LIBS): Test using libraries from NEON_LIBS too. Sat Nov 24 20:33:11 2001 Joe Orton * neon.m4 (NEON_CHECK_SUPPORT): New macro. (NEON_COMMON): Define NEON_SUPPORTS_{SSL,ZLIB} when using an external neon. Sat Nov 24 20:25:15 2001 Joe Orton * neon.m4 (NEON_WITHOUT_ZLIB): New function. (LIBNEON_SOURCE_CHECKS): Conditionally enable zlib support. Sun Nov 18 12:29:08 2001 Joe Orton * neon-ssl.m4 (NEON_SSL): Don't add -I/usr/include to NEON_CFLAGS. Sat Oct 27 12:20:08 2001 Joe Orton * neon.m4, neon-ssl.m4: Substitute NEON_SUPPORTS_ZLIB, NEON_SUPPORTS_DAV, NEON_SUPPORTS_SSL as "yes" or "no" appropriately. Thu Oct 25 14:29:53 2001 Mo DeJong * neon.m4 (NEON_NORMAL_BUILD): Use AC_CHECK_TOOL instead of AC_PATH_PROG so that cross compilation works properly. Sat Oct 6 13:36:58 2001 Joe Orton * neon.m4 (NEON_ZLIB): New macro. (LIBNEON_SOURCE_CHECKS): print warning if struct tm lacks tm_gmtoff. Sat Oct 6 12:39:09 2001 Joe Orton * neon.m4: Require autoconf 2.50. Use AC_HELP_STRING where possible, and AC_MSG_NOTICE instead of 'echo'. * neon-ssl.m4, neon-xml-parser.m4, neon-socks.m4: Quoting fixes for help strings. Tue Oct 2 21:13:24 2001 Joe Orton * neon.m4 (LIBNEON_SOURCE_CHECKS): Check for tm_gmtoff in struct tm. Sun Sep 30 23:35:03 2001 Joe Orton * neon.m4 (NE_SEARCH_LIBS): AC_SEARCH_LIBS replacement, adds found libraries to NEON_LIBS instead. Sun Sep 30 11:11:19 2001 Joe Orton * neon-test.m4: New file. Sun Sep 30 11:09:58 2001 Joe Orton * neon.m4, neon-xml-parser.m4: Always add libs to $LIBS rather than $NEONLIBS. * neon.m4: Export NEON_CFLAGS. Sat Sep 29 14:12:53 2001 Joe Orton * neon.m4 (LIBNEON_SOURCE_CHECKS): Check for zlib (zlib.h, inflate in -lz). Add ne_compress to NEON_EXTRAOBJS. Tue Sep 25 07:31:53 2001 Mo DeJong * neon.m4 (LIBNEON_SOURCE_CHECKS): Check for instead of . Define HAVE_SIGPIPE if SIGPIPE is defined in . Mon Sep 24 20:16:47 2001 Joe Orton * neon-xml-parser.m4 (NEON_XML_EXTERNAL_EXPAT): Fix broken AC_DEFINE (Mo DeJong). Mon Sep 24 17:24:42 2001 Joe Orton * ac_c_bigendian_cross.m4: New file. * neon.m4: Use AC_C_BIGENDIAN_CROSS rather than AC_C_BIGENDIAN. Mon Sep 17 23:29:11 2001 Joe Orton * neon.m4 (LIBNEON_SOURCE_CHECKS): Check for setvbuf(). Sun Sep 16 20:39:05 2001 Joe Orton * neon-ssl.m4 (NEON_SSL): Put SSL libs in LIBS rather than NEONLIBS (and lib paths). Sun Sep 16 20:36:53 2001 Joe Orton * neon.m4 (NEON_COMMON): Add library paths to NEONLIBS rather than LDFLAGS. Sat Jun 9 22:06:25 2001 Joe Orton * neon-debug.m4: New file. Thu May 31 00:04:51 2001 Joe Orton * neon.m4 (NEON_COMMON_BUILD): Update filenames. (NEON_CHECK_VERSION): Do simple AC_TRY_LINK and warn appropriately before checking version. Thu May 31 00:03:40 2001 Joe Orton * neon-warnings.m4: Add -Wbad-function-cast. Wed May 30 23:37:48 2001 Joe Orton * neon-xml-parser.m4: Added --with-libxml1 and --with-libxml2 arguments. Tue Apr 17 23:06:25 2001 Joe Orton * neon-ssl.m4: Define neon_ssl_message for configure output. Wed Apr 11 23:14:33 2001 Joe Orton * neon.m4 (NEON_COMMON_BUILD): Fix specifying a list of object files. Fri Apr 6 23:09:58 2001 Joe Orton * neon.m4 (LIBNEON_SOURCE_CHECKS): Call NEON_SOCKS. Fri Apr 6 23:08:39 2001 Joe Orton * neon-socks.m4: Add basic SOCKSv5 support (untested). Mon Apr 2 21:42:40 2001 Joe Orton * neon.m4: Version is 0.13.0, interface version 13:0:0. Mon Apr 2 00:27:37 2001 Joe Orton * neon.m4: Move check for 'ar' program to NEON_NORMAL_BUILD, it's not necessary for libtool build. Mon Apr 2 00:17:58 2001 Joe Orton * neon-xml-parser.m4 (NEON_XML_PARSER): Check for xmlversion.h header from libxml2. Sun Apr 1 21:23:26 2001 Joe Orton * neon-xml-parser.m4: Add expat2 support (Sam TH ). Wed Mar 21 10:56:03 2001 Joe Orton * neon-xml-parser.m4: Add libxml2 support. Sun Mar 4 15:45:21 2001 Joe Orton * neon-xml-parser.m4 (NEON_XML_PARSER): Use an m4 ifelse rather than a shell test to code the conditional on whether an argument was passed to the macro or not. Sun Mar 4 15:23:47 2001 Joe Orton * neon.m4: Add "actions if not bundled" argument to *_BUNDLED macros. Mon Feb 26 22:52:24 2001 Joe Orton * neon.m4: Version is 0.12.0. Mon Feb 26 22:06:13 2001 Joe Orton * neon.m4: Versionn is 0.12.0-dev. Sun Feb 25 17:12:49 2001 Joe Orton * neon.m4 (LIBNEON_SOURCE_CHECKS): Add checks for endianness (for md5 code), inline, and const. Sun Feb 25 17:00:07 2001 Joe Orton * neon.m4 (NEON_COMMON): Rename NEON_IS_BUNDLED to NEON_BUILD_BUNDLED. Sun Feb 25 16:52:19 2001 Joe Orton * neon.m4 (NEON_COMMON): Define NEON_IS_BUNDLED to "yes" or "no" appropriately. Sat Feb 24 00:06:09 2001 Joe Orton * neon.m4 (LIBNEON_SOURCE_CHECKS): Don't set NEON_NEED_XML_PARSER here. (NEON_COMMON): ... set it here instead. (NEON_WITHOUT_WEBDAV): New macro to disable WebDAV support. (NEON_COMMON_BUILD): Select default set of object files to build depending on whether DAV is enabled or not. Fri Feb 23 23:28:09 2001 Joe Orton * neon.m4 (NEON_COMMON_BUILD): Use an m4 'ifelse' for the number of args test. * neon.m4 (NEON_LIBTOOL_BUILD, NEON_NORMAL_BUILD, NEON_COMMON_BUILD): Set NEON_OBJEXT correctly (fixes dependancies). Sun Feb 4 14:55:10 2001 Joe Orton * neon.m4: Version is 0.11.0, interface version is 11:0:0. Sun Jan 28 17:16:27 2001 Joe Orton * neon.m4 (NEON_CHECK_VERSION): Run actions-if-okay if NEON_REQUIRE has not been called. Sun Jan 28 14:53:57 2001 Joe Orton * neon.m4 (NEON_REQUIRE, NEON_CHECK_VERSION): New macros. (NEON_COMMON): If a required version is defined, check that an external neon library matches it. Sun Jan 28 10:39:31 2001 Joe Orton * neon.m4: Define NEON_VERSION, NEON_VERSION_{MAJOR,MINOR} in config.h rather than substituting into neon_config.h. Sat Jan 27 22:55:42 2001 Joe Orton * neon.m4: Include version string in library message. Tue Jan 23 23:14:33 2001 Joe Orton * neon.m4 (NEON_VERSIONS): New macro. (NEON_COMMON): Call it from here. Mon Jan 15 22:26:54 2001 Joe Orton * neon-xml-parser.m4 (NEON_XML_PARSER): Append rather than overwrite CFLAGS. Thu Jan 11 20:49:12 2001 Joe Orton * neon-ssl.m4: Check for OpenSSL in /usr too. Thu Jan 11 20:05:34 2001 Joe Orton * neon.m4 (NEON_VPATH_BUNDLED): New macro. (NEON_BUNDLED): Call NEON_COMMON_BUNDLED. (NEON_COMMON_BUNDLED): Abstracted from NEON_BUNDLED. Wed Jan 10 22:44:37 2001 Joe Orton * neon.m4 (NEON_LIBTOOL_BUILD, NEON_NORMAL_BUILD): Pass optional set of objects to build to these macros. Else, all objects go in NEONOBJS. (NEON_COMMON_BUILD): Implement that. Also substitute NEON_LINK_FLAGS. Mon Jan 8 22:23:51 2001 Joe Orton * neon-xml-parser.m4 (NEON_XML_PARSER): Put XML parser libs in $NEONLIBS rather than $LIBS. Mon Jan 8 22:20:51 2001 Joe Orton * neon-ssl.m4 (NEON_SSL): Put OpenSSL libs in $NEONLIBS rather than LIBS. Sun Jan 7 17:30:54 2001 Joe Orton * neon.m4 (NEON_BUNDLED): Add optional second argument to specify builddir of bundled sources (Peter Moulder ). Wed Jan 3 21:33:05 2001 Joe Orton * neon.m4: Place libraries needed to use neon in NEONLIBS. Adding them to LIBS breaks bundled builds since libneon doesn't exist at configure-time, and configure uses $LIBS. Wed Jan 3 21:17:00 2001 Joe Orton * neon.m4 (NEON_COMMON_BUILD): Don't set top_builddir using 'pwd'. Wed Jan 3 21:15:04 2001 Joe Orton * neon.m4 (NEON_COMMON): If using bundled neon, add -L to LDFLAGS, and -lneon to LIBS. Fri Dec 22 23:13:39 2000 Joe Orton * neon.m4 (NEON_NORMAL_BUILD, NEON_COMMON_BUILD): New macros. Tue Dec 19 22:13:18 2000 Joe Orton * neon.m4 (NEON_LIBTOOL_BUILD): New macro. Wed Dec 13 22:07:07 2000 Joe Orton * neon.m4: Add a decent interface: NEON_LIBRARY for non-bundled case, NEON_BUNDLED for the bundled case. (LIBNEON_SOURCE_CHECKS): Always set NEON_NEED_XML_PARSER. * neon-xml-parser.m4 (NEON_XML_PARSER): Only execute if "$NEON_NEED_XML_PARSER" = "yes". Sun Nov 19 22:52:56 2000 Joe Orton * neon.m4, neon-ssl.m4, neon-warnings.m4, neon-xml-parser.m4: Clarify that the more liberal license applies to the m4 files only, not neon in general. Sun Nov 19 22:40:01 2000 Joe Orton * neon.m4 (NEON_LIBRARY): Don't call NEON_XML_PARSER, set NEON_NEED_XML_PARSER to "yes" if it needs to be called. Sun Nov 19 22:31:26 2000 Joe Orton * neon-xml-parser.m4 (NEON_XML_PARSER): Switch to useing NEON_INCLUDED_EXPAT m4 macro rather than passing arguments. Sun Nov 19 22:20:36 2000 Joe Orton * neon.m4 (NEON_LIBRARY): Switch to using NEON_INCLUDED_SOURCE m4 macro rather than passing arguments to the NEON_LIBRARY macro. Sun Nov 5 23:26:18 2000 Joe Orton * neon-xml-parser.m4: Never set LIBS if using a libtool-built libexpat.la (Greg Stein). 2000-10-10 Joe Orton * neon-xml-parser.m4: If libexpat.la is included in the --with-expat parameter, then use a libtool-friendly LIBS. (Greg Stein) Sat Oct 7 19:16:08 2000 Joe Orton * neon-xml-parser.m4: Link against a libexpat.la if found in --with-expat location. (Greg Stein). Mon Sep 11 15:05:58 2000 Joe Orton * neon.m4: Use AC_SEARCH_LIBS for finding gethostbyname() and socket(). Mon Sep 11 15:03:45 2000 Joe Orton * neon.m4 (NEON_REPLACE_SNPRINTF): New macro. Fri Sep 8 14:30:37 2000 Joe Orton * neon.m4: Check for socket() in -lsocket, -linet. Thu Sep 7 00:11:51 2000 Joe Orton * neon-xml-parser.m4: Added --with-expat flag (patch by Greg Stein). Sun Aug 13 11:12:41 2000 Joe Orton * strftime.m4: New file, from fileutils-4.0i. Thu Jul 27 19:59:18 2000 Joe Orton * neon-ssl.m4: Append the SSL libs on the end of $LIBS rather than redefining it completely. Thu Jul 27 19:43:38 2000 Joe Orton * neon.m4: Define variable neon_library_message to describe what neon library is being used. Mon Jul 24 16:56:34 2000 Joe Orton * neon-ssl.m4: Put -lssl before -lcrypto in LIBS. Thu Jul 20 15:12:14 2000 Joe Orton * neon-xml-parser.m4 (NEON_XML_PARSER): Pass directory name containing bundled expat sources as $1. * neon.m4 (NEON_LIBRARY): Pass directory name containing bundled neon sources as $1, and $2 is passed to NEON_XML_PARSER for similar use. Thu Jul 20 15:04:49 2000 Joe Orton * neon-ssl.m4: Rewritten from scratch. Support OpenSSL only. Thu Jul 20 12:41:23 2000 Joe Orton * neon.m4, neon-xml-parser.m4, neon_warnings.m4: Added licensing information. Wed Jul 19 19:30:24 2000 Joe Orton * neon-warnings.m4: New file. (NEON_WARNINGS): Macro for doing --enable-warnings. Sun Jun 18 12:12:23 2000 Joe Orton * neon.m4: Only add --with-included-neon flag if neon is bundled. Sun Jun 18 12:08:23 2000 Joe Orton * gnome-x-checks.m4: Imported from GNOME CVS macros module, adding: descriptive args to AC_DEFINE HAVE_LIBSM call, requiring Gtk 1.2.8 and the Gtk 'gthread' module. Mon May 29 15:10:24 2000 Joe Orton * neon.m4 (LIBNEON_SOURCE_CHECKS): Call NEON_SSL. Tue May 23 19:11:29 2000 Joe Orton * neon.m4: Renamed from neon-checks.m4. Sun May 21 23:52:27 2000 Joe Orton * neon-ssl.m4: New file. Sat May 13 21:08:54 2000 Joe Orton * acconfig.h: Added HAVE_LC_MESSAGE (my lcmessage.m4 is missing the appropriate description arguments). Sat May 13 21:08:40 2000 Joe Orton * acconfig.h: Added PACKAGE and VERSION. Sat May 13 21:02:29 2000 Joe Orton * socklen-arg-type.m4: Added file, modified from a KDE configure.in. Sat May 13 20:44:56 2000 Joe Orton * gnome-x-checks.m4: Added description arguments to AC_DEFINE(HAVE_LIBSM). Wed May 10 19:18:14 2000 Joe Orton * neon-xml-parser.m4: Error if no XML parser is found. Wed May 10 14:33:21 2000 Joe Orton * neon-checks.m4: New file. Wed May 10 14:26:57 2000 Joe Orton * neon-xml-parser.m4 (NEON_XML_PARSER): Use "neon_" prefix for variables. Wed May 10 13:47:04 2000 Joe Orton * acconfig.h: New file. Wed May 10 13:42:16 2000 Joe Orton * neon-xml-parser.m4: New file. Sun May 7 21:57:32 2000 Joe Orton * gnome-x-checks.m4 (GNOME_X_CHECKS): Check for Gtk 1.2.7 or later, passing "gthread" module argument. tla-1.3.5+dfsg/src/libneon/macros/neon.m40000600000175000017500000006463010457621776016657 0ustar useruser# Copyright (C) 1998-2004 Joe Orton -*- autoconf -*- # # This file is free software; you may copy and/or distribute it with # or without modifications, as long as this notice is preserved. # This software is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY, to the extent permitted by law; without even # the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR # PURPOSE. # The above license applies to THIS FILE ONLY, the neon library code # itself may be copied and distributed under the terms of the GNU # LGPL, see COPYING.LIB for more details # This file is part of the neon HTTP/WebDAV client library. # See http://www.webdav.org/neon/ for the latest version. # Please send any feedback to # # Usage: # # NEON_LIBRARY # or NEON_BUNDLED(srcdir, [ACTIONS-IF-BUNDLED], [ACTIONS-IF-NOT_BUNDLED]) # or NEON_VPATH_BUNDLED(srcdir, builddir, # [ACTIONS-IF-BUNDLED], [ACTIONS-IF-NOT-BUNDLED]) # # where srcdir is the location of bundled neon 'src' directory. # If using a VPATH-enabled build, builddir is the location of the # build directory corresponding to srcdir. # # If a bundled build *is* being used, ACTIONS-IF-BUNDLED will be # evaluated. These actions should ensure that 'make' is run # in srcdir, and that one of NEON_NORMAL_BUILD or NEON_LIBTOOL_BUILD # is called. # # After calling one of the above macros, if the NEON_NEED_XML_PARSER # variable is set to "yes", then you must configure an XML parser # too. You can do this your own way, or do it easily using the # NEON_XML_PARSER() macro. Example usage for where we have bundled the # neon sources in a directory called libneon, and bundled expat # sources in a directory called 'expat'. # # NEON_BUNDLED(libneon, [ # NEON_XML_PARSER(expat) # NEON_NORMAL_BUILD # ]) # # Alternatively, for a simple standalone app with neon as a # dependancy, use just: # # NEON_LIBRARY # # and rely on the user installing neon correctly. # # You are free to configure an XML parser any other way you like, # but the end result must be, either expat or libxml will get linked # in, and HAVE_EXPAT or HAVE_LIBXML is defined appropriately. # # To set up the bundled build environment, call # # NEON_NORMAL_BUILD # or # NEON_LIBTOOL_BUILD # # depending on whether you are using libtool to build, or not. # Both these macros take an optional argument specifying the set # of object files you wish to build: if the argument is not given, # all of neon will be built. AC_DEFUN([NEON_BUNDLED],[ neon_bundled_srcdir=$1 neon_bundled_builddir=$1 NEON_COMMON_BUNDLED([$2], [$3]) ]) AC_DEFUN([NEON_VPATH_BUNDLED],[ neon_bundled_srcdir=$1 neon_bundled_builddir=$2 NEON_COMMON_BUNDLED([$3], [$4]) ]) AC_DEFUN([NEON_COMMON_BUNDLED],[ AC_PREREQ(2.50) AC_ARG_WITH(included-neon, AC_HELP_STRING([--with-included-neon], [force use of included neon library]), [neon_force_included="$withval"], [neon_force_included="no"]) NEON_COMMON # The colons are here so there is something to evaluate # in case the argument was not passed. if test "$neon_force_included" = "yes"; then : $1 else : $2 fi ]) dnl Not got any bundled sources: AC_DEFUN([NEON_LIBRARY],[ AC_PREREQ(2.50) neon_force_included=no neon_bundled_srcdir= neon_bundled_builddir= NEON_COMMON ]) AC_DEFUN([NEON_VERSIONS], [ # Define the current versions. NEON_VERSION_MAJOR=0 NEON_VERSION_MINOR=24 NEON_VERSION_RELEASE=7 NEON_VERSION_TAG= NEON_VERSION="${NEON_VERSION_MAJOR}.${NEON_VERSION_MINOR}.${NEON_VERSION_RELEASE}${NEON_VERSION_TAG}" # libtool library interface versioning. Release policy dictates that # for neon 0.x.y, each x brings an incompatible interface change, and # each y brings no interface change, and since this policy has been # followed since 0.1, x == CURRENT, y == RELEASE, 0 == AGE. For # 1.x.y, this will become N + x == CURRENT, y == RELEASE, x == AGE, # where N is constant (and equal to CURRENT + 1 from the final 0.x # release) NEON_INTERFACE_VERSION="${NEON_VERSION_MINOR}:${NEON_VERSION_RELEASE}:0" AC_DEFINE_UNQUOTED(NEON_VERSION, "${NEON_VERSION}", [Define to be the neon version string]) AC_DEFINE_UNQUOTED(NEON_VERSION_MAJOR, [(${NEON_VERSION_MAJOR})], [Define to be major number of neon version]) AC_DEFINE_UNQUOTED(NEON_VERSION_MINOR, [(${NEON_VERSION_MINOR})], [Define to be minor number of neon version]) ]) dnl Define the minimum required version AC_DEFUN([NEON_REQUIRE], [ neon_require_major=$1 neon_require_minor=$2 ]) dnl Check that the external library found in a given location dnl matches the min. required version (if any). Requires that dnl NEON_CONFIG be set the the full path of a valid neon-config dnl script dnl dnl Usage: dnl NEON_CHECK_VERSION(ACTIONS-IF-OKAY, ACTIONS-IF-FAILURE) dnl AC_DEFUN([NEON_CHECK_VERSION], [ if test "x$neon_require_major" = "x"; then # Nothing to check. ne_goodver=yes ne_libver="(version unknown)" else # Check whether the library is of required version ne_save_LIBS="$LIBS" ne_save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS `$NEON_CONFIG --cflags`" LIBS="$LIBS `$NEON_CONFIG --libs`" ne_libver=`$NEON_CONFIG --version | sed -e "s/neon //g"` # Check whether it's possible to link against neon AC_CACHE_CHECK([linking against neon], [ne_cv_lib_neon], AC_TRY_LINK_FUNC([ne_version_match], [ne_cv_lib_neon=yes], [ne_cv_lib_neon=no])) if test "$ne_cv_lib_neon" = "yes"; then # Now check whether the neon library version is satisfactory AC_CACHE_CHECK([neon library version], [ne_cv_lib_neonver], AC_TRY_RUN([#include int main(int argc, char **argv) { return ne_version_match($neon_require_major, $neon_require_minor); }], ne_cv_lib_neonver=yes, ne_cv_lib_neonver=no)) fi ne_goodver=$ne_cv_lib_neonver LIBS=$ne_save_LIBS CFLAGS=$ne_save_CFLAGS fi if test "$ne_goodver" = "yes"; then AC_MSG_NOTICE([using neon library $ne_libver]) $1 else AC_MSG_NOTICE([incompatible neon library version $ne_libver: wanted $neon_require_major.$neon_require_minor]) $2 fi]) dnl NEON_CHECK_SUPPORT(feature, var) AC_DEFUN([NEON_CHECK_SUPPORT], [ if $NEON_CONFIG --support $1 >/dev/null; then neon_$1_message="supported by neon" $2=yes else neon_$1_message="not supported by neon" $2=no fi ]) AC_DEFUN([NEON_USE_EXTERNAL], [ # Configure to use an external neon, given a neon-config script # found at $NEON_CONFIG. neon_prefix=`$NEON_CONFIG --prefix` NEON_CHECK_VERSION([ CFLAGS="$CFLAGS `$NEON_CONFIG --cflags`" NEON_LIBS="$NEON_LIBS `$NEON_CONFIG --libs`" neon_library_message="library in ${neon_prefix} (`$NEON_CONFIG --version`)" neon_xml_parser_message="using whatever neon uses" NEON_CHECK_SUPPORT([ssl], [NEON_SUPPORTS_SSL]) NEON_CHECK_SUPPORT([zlib], [NEON_SUPPORTS_ZLIB]) neon_got_library=yes ], [neon_got_library=no]) ]) AC_DEFUN([NEON_COMMON],[ AC_REQUIRE([NEON_COMMON_CHECKS]) NEON_VERSIONS AC_ARG_WITH(neon, [ --with-neon[[=DIR]] specify location of neon library], [case $withval in yes|no) neon_force_external=$withval; neon_ext_path= ;; *) neon_force_external=yes; neon_ext_path=$withval ;; esac;], [ neon_force_external=no neon_ext_path= ]) if test "$neon_force_included" = "no"; then # There is no included neon source directory, or --with-included-neon # wasn't given (so we're not forced to use it). # Default to no external neon. neon_got_library=no if test "x$neon_ext_path" = "x"; then AC_PATH_PROG([NEON_CONFIG], neon-config, none) if test "x${NEON_CONFIG}" = "xnone"; then AC_MSG_NOTICE([no external neon library found]) elif test -x "${NEON_CONFIG}"; then NEON_USE_EXTERNAL else AC_MSG_NOTICE([ignoring non-executable ${NEON_CONFIG}]) fi else AC_MSG_CHECKING([for neon library in $neon_ext_path]) NEON_CONFIG="$neon_ext_path/bin/neon-config" if test -x ${NEON_CONFIG}; then AC_MSG_RESULT([found]) NEON_USE_EXTERNAL else AC_MSG_RESULT([not found]) # ...will fail since force_external=yes fi fi if test "$neon_got_library" = "no"; then if test $neon_force_external = yes; then AC_MSG_ERROR([could not use external neon library]) elif test -n "$neon_bundled_srcdir"; then # Couldn't find external neon, forced to use bundled sources neon_force_included="yes" else # Couldn't find neon, and don't have bundled sources AC_MSG_ERROR(could not find neon) fi fi fi # This isn't a simple 'else' branch, since neon_force_included # is set to yes if the search fails. if test "$neon_force_included" = "yes"; then AC_MSG_NOTICE([using bundled neon ($NEON_VERSION)]) NEON_BUILD_BUNDLED="yes" LIBNEON_SOURCE_CHECKS CFLAGS="$CFLAGS -I$neon_bundled_srcdir" NEON_LIBS="-L$neon_bundled_builddir -lneon $NEON_LIBS" NEON_NEED_XML_PARSER=yes neon_library_message="included libneon (${NEON_VERSION})" else # Don't need to configure an XML parser NEON_NEED_XML_PARSER=no NEON_BUILD_BUNDLED="yes" fi AC_SUBST(NEON_BUILD_BUNDLED) ]) dnl AC_SEARCH_LIBS done differently. Usage: dnl NE_SEARCH_LIBS(function, libnames, [extralibs], [actions-if-not-found], dnl [actions-if-found]) dnl Tries to find 'function' by linking againt `-lLIB $NEON_LIBS' for each dnl LIB in libnames. If link fails and 'extralibs' is given, will also dnl try linking against `-lLIB extralibs $NEON_LIBS`. dnl Once link succeeds, `-lLIB [extralibs]` is prepended to $NEON_LIBS, and dnl `actions-if-found' are executed, if given. dnl If link never succeeds, run `actions-if-not-found', if given, else dnl give an error and fail configure. AC_DEFUN([NE_SEARCH_LIBS], [ AC_CACHE_CHECK([for library containing $1], [ne_cv_libsfor_$1], [ AC_TRY_LINK_FUNC($1, [ne_cv_libsfor_$1="none needed"], [ ne_sl_save_LIBS=$LIBS ne_cv_libsfor_$1="not found" for lib in $2; do LIBS="$ne_sl_save_LIBS -l$lib $NEON_LIBS" AC_TRY_LINK_FUNC($1, [ne_cv_libsfor_$1="-l$lib"; break]) m4_if($3, [], [], dnl If $3 is specified, then... [LIBS="$ne_sl_save_LIBS -l$lib $3 $NEON_LIBS" AC_TRY_LINK_FUNC($1, [ne_cv_libsfor_$1="-l$lib $3"; break])]) done LIBS=$ne_sl_save_LIBS])]) if test "$ne_cv_libsfor_$1" = "not found"; then m4_if($4, [], [AC_MSG_ERROR([could not find library containing $1])], [$4]) elif test "$ne_cv_libsfor_$1" != "none needed"; then NEON_LIBS="$ne_cv_libsfor_$1 $NEON_LIBS" $5 fi]) dnl Check for presence and suitability of zlib library AC_DEFUN([NEON_ZLIB], [ AC_ARG_WITH(zlib, AC_HELP_STRING([--without-zlib], [disable zlib support]), ne_use_zlib=$withval, ne_use_zlib=yes) NEON_SUPPORTS_ZLIB=no AC_SUBST(NEON_SUPPORTS_ZLIB) if test "$ne_use_zlib" = "yes"; then AC_CHECK_HEADER(zlib.h, [ AC_CHECK_LIB(z, inflate, [ NEON_LIBS="$NEON_LIBS -lz" NEON_CFLAGS="$NEON_CFLAGS -DNEON_ZLIB" NEON_SUPPORTS_ZLIB=yes neon_zlib_message="found in -lz" ], [neon_zlib_message="zlib not found"]) ], [neon_zlib_message="zlib not found"]) else neon_zlib_message="zlib disabled" fi ]) AC_DEFUN([NE_MACOSX], [ # Check for Darwin, which needs extra cpp and linker flags. AC_CACHE_CHECK([for Darwin], ne_cv_os_macosx, [ case `uname -s 2>/dev/null` in Darwin) ne_cv_os_macosx=yes ;; *) ne_cv_os_macosx=no ;; esac]) if test $ne_cv_os_macosx = yes; then CPPFLAGS="$CPPFLAGS -no-cpp-precomp" LDFLAGS="$LDFLAGS -flat_namespace" fi ]) AC_DEFUN([NEON_COMMON_CHECKS], [ # These checks are done whether or not the bundled neon build # is used. AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_PROG_CC_STDC]) AC_REQUIRE([AC_LANG_C]) AC_REQUIRE([AC_ISC_POSIX]) AC_REQUIRE([AC_C_INLINE]) AC_REQUIRE([AC_C_CONST]) AC_REQUIRE([AC_TYPE_SIZE_T]) AC_REQUIRE([AC_TYPE_OFF_T]) AC_REQUIRE([NE_MACOSX]) AC_REQUIRE([AC_PROG_MAKE_SET]) AC_REQUIRE([AC_HEADER_STDC]) AC_CHECK_HEADERS([errno.h stdarg.h string.h stdlib.h]) NEON_FORMAT(size_t,,u) dnl size_t is unsigned; use %u formats NEON_FORMAT(off_t) NEON_FORMAT(ssize_t) ]) AC_DEFUN([NEON_FORMAT_PREP], [ AC_CHECK_SIZEOF(int) AC_CHECK_SIZEOF(long) AC_CHECK_SIZEOF(long long) if test "$GCC" = "yes"; then AC_CACHE_CHECK([for gcc -Wformat -Werror sanity], ne_cv_cc_werror, [ # See whether a simple test program will compile without errors. ne_save_CPPFLAGS=$CPPFLAGS CPPFLAGS="$CPPFLAGS -Wformat -Werror" AC_TRY_COMPILE([#include #include ], [int i = 42; printf("%d", i);], [ne_cv_cc_werror=yes], [ne_cv_cc_werror=no]) CPPFLAGS=$ne_save_CPPFLAGS]) ne_fmt_trycompile=$ne_cv_cc_werror else ne_fmt_trycompile=no fi ]) dnl NEON_FORMAT(TYPE[, HEADERS[, [SPECIFIER]]) dnl dnl This macro finds out which modifier is needed to create a dnl printf format string suitable for printing integer type TYPE (which dnl may be an int, long, or long long). dnl The default specifier is 'd', if SPECIFIER is not given. dnl TYPE may be defined in HEADERS; sys/types.h is always used first. AC_DEFUN([NEON_FORMAT], [ AC_REQUIRE([NEON_FORMAT_PREP]) AC_CHECK_SIZEOF($1, [$2]) dnl Work out which specifier character to use m4_ifdef([ne_spec], [m4_undefine([ne_spec])]) m4_if($#, 3, [m4_define(ne_spec,$3)], [m4_define(ne_spec,d)]) AC_CACHE_CHECK([how to print $1], [ne_cv_fmt_$1], [ ne_cv_fmt_$1=none if test $ne_fmt_trycompile = yes; then oflags="$CPPFLAGS" # Consider format string mismatches as errors CPPFLAGS="$CPPFLAGS -Wformat -Werror" dnl obscured for m4 quoting: "for str in d ld qd; do" for str in ne_spec l]ne_spec[ q]ne_spec[; do AC_TRY_COMPILE([#include $2 #include ], [$1 i = 1; printf("%$str", i);], [ne_cv_fmt_$1=$str; break]) done CPPFLAGS=$oflags else # Best guess. Don't have to be too precise since we probably won't # get a warning message anyway. case $ac_cv_sizeof_$1 in $ac_cv_sizeof_int) ne_cv_fmt_$1="ne_spec" ;; $ac_cv_sizeof_long) ne_cv_fmt_$1="l]ne_spec[" ;; $ac_cv_sizeof_long_long) ne_cv_fmt_$1="ll]ne_spec[" ;; esac fi ]) if test "x$ne_cv_fmt_$1" = "xnone"; then AC_MSG_ERROR([format string for $1 not found]) fi AC_DEFINE_UNQUOTED([NE_FMT_]translit($1, a-z, A-Z), "$ne_cv_fmt_$1", [Define to be printf format string for $1]) ]) dnl Wrapper for AC_CHECK_FUNCS; uses libraries from $NEON_LIBS. AC_DEFUN([NE_CHECK_FUNCS], [ ne_cf_save_LIBS=$LIBS LIBS="$LIBS $NEON_LIBS" AC_CHECK_FUNCS($@) LIBS=$ne_cf_save_LIBS]) dnl Checks needed when compiling the neon source. AC_DEFUN([LIBNEON_SOURCE_CHECKS], [ dnl Run all the normal C language/compiler tests AC_REQUIRE([NEON_COMMON_CHECKS]) dnl Needed for building the MD5 code. AC_REQUIRE([AC_C_BIGENDIAN]) dnl Is strerror_r present; if so, which variant AC_REQUIRE([AC_FUNC_STRERROR_R]) AC_CHECK_HEADERS([strings.h sys/time.h limits.h sys/select.h arpa/inet.h \ signal.h sys/socket.h netinet/in.h netinet/tcp.h netdb.h]) AC_REQUIRE([NE_SNPRINTF]) AC_REPLACE_FUNCS(strcasecmp) AC_CHECK_FUNCS(signal setvbuf setsockopt stpcpy) if test "$ac_cv_func_stpcpy" = "yes"; then AC_CHECK_DECLS(stpcpy) fi # Modern AIXes with the "Linux-like" libc have an undeclared stpcpy AH_BOTTOM([#if defined(HAVE_STPCPY) && !HAVE_DECL_STPCPY && !defined(stpcpy) char *stpcpy(char *, const char *); #endif]) # Unixware 7 can only link gethostbyname with -lnsl -lsocket # Pick up -lsocket first, then the gethostbyname check will work. # QNX has gethostbyname in -lsocket. BeOS only has it in -lbind. NE_SEARCH_LIBS(socket, socket inet) NE_SEARCH_LIBS(gethostbyname, socket nsl bind) # Enable getaddrinfo() support only if all the necessary functions # are found. ne_enable_gai=yes NE_CHECK_FUNCS(getaddrinfo gai_strerror inet_ntop,,[ne_enable_gai=no; break]) if test $ne_enable_gai = yes; then AC_DEFINE(USE_GETADDRINFO, 1, [Define if getaddrinfo() should be used]) AC_CACHE_CHECK([for working AI_ADDRCONFIG], [ne_cv_gai_addrconfig], [ AC_RUN_IFELSE([AC_LANG_PROGRAM([#include ], [struct addrinfo hints = {0}, *result; hints.ai_flags = AI_ADDRCONFIG; if (getaddrinfo("localhost", NULL, &hints, &result) != 0) return 1;])], ne_cv_gai_addrconfig=yes, ne_cv_gai_addrconfig=no)]) if test $ne_cv_gai_addrconfig = yes; then AC_DEFINE(USE_GAI_ADDRCONFIG, 1, [Define if getaddrinfo supports AI_ADDRCONFIG]) fi else # Checks for non-getaddrinfo() based resolver interfaces. NE_SEARCH_LIBS(hstrerror, resolv,,[:]) NE_CHECK_FUNCS(hstrerror) # Older Unixes don't declare h_errno. AC_CHECK_DECL(h_errno,,,[#define _XOPEN_SOURCE_EXTENDED 1 #include ]) fi AC_CHECK_MEMBERS(struct tm.tm_gmtoff,, AC_MSG_WARN([no timezone handling in date parsing on this platform]), [#include ]) ifdef([neon_no_zlib], [ neon_zlib_message="zlib disabled" NEON_SUPPORTS_ZLIB=no ], [ NEON_ZLIB() ]) # Conditionally enable ACL support AC_MSG_CHECKING([whether to enable ACL support in neon]) if test "x$neon_no_acl" = "xyes"; then AC_MSG_RESULT(no) else AC_MSG_RESULT(yes) NEON_EXTRAOBJS="$NEON_EXTRAOBJS ne_acl" fi NEON_SSL() NEON_SOCKS() NEON_GSSAPI() AC_SUBST(NEON_CFLAGS) AC_SUBST(NEON_LIBS) AC_SUBST(NEON_LTLIBS) ]) dnl Call to put lib/snprintf.o in LIBOBJS and define HAVE_SNPRINTF_H dnl if snprintf isn't in libc. AC_DEFUN([NEON_REPLACE_SNPRINTF], [ # Check for snprintf AC_CHECK_FUNC(snprintf,,[ AC_DEFINE(HAVE_SNPRINTF_H, 1, [Define if need to include snprintf.h]) AC_LIBOBJ(lib/snprintf)]) ]) dnl turn off webdav, boo hoo. AC_DEFUN([NEON_WITHOUT_WEBDAV], [ neon_no_webdav=yes neon_no_acl=yes NEON_NEED_XML_PARSER=no neon_xml_parser_message="none needed" ]) dnl Turn off zlib support AC_DEFUN([NEON_WITHOUT_ZLIB], [ define(neon_no_zlib, yes) ]) AC_DEFUN([NEON_WITHOUT_ACL], [ # Turn off ACL support neon_no_acl=yes ]) dnl Common macro to NEON_LIBTOOL_BUILD and NEON_NORMAL_BUILD dnl Sets NEONOBJS appropriately if it has not already been set. dnl dnl NOT FOR EXTERNAL USE: use LIBTOOL_BUILD or NORMAL_BUILD. dnl AC_DEFUN([NEON_COMMON_BUILD], [ # Using the default set of object files to build. # Add the extension to EXTRAOBJS ne="$NEON_EXTRAOBJS" NEON_EXTRAOBJS= for o in $ne; do NEON_EXTRAOBJS="$NEON_EXTRAOBJS $o.$NEON_OBJEXT" done AC_MSG_CHECKING(whether to enable WebDAV support in neon) dnl Did they want DAV support? if test "x$neon_no_webdav" = "xyes"; then # No WebDAV support AC_MSG_RESULT(no) NEONOBJS="$NEONOBJS \$(NEON_BASEOBJS)" NEON_CFLAGS="$NEON_CFLAGS -DNEON_NODAV" NEON_SUPPORTS_DAV=no AC_DEFINE(NEON_NODAV, 1, [Enable if built without WebDAV support]) else # WebDAV support NEON_SUPPORTS_DAV=yes NEONOBJS="$NEONOBJS \$(NEON_DAVOBJS)" # Turn on DAV locking please then. AC_DEFINE(USE_DAV_LOCKS, 1, [Support WebDAV locking through the library]) AC_MSG_RESULT(yes) fi AC_SUBST(NEON_TARGET) AC_SUBST(NEON_OBJEXT) AC_SUBST(NEONOBJS) AC_SUBST(NEON_EXTRAOBJS) AC_SUBST(NEON_LINK_FLAGS) AC_SUBST(NEON_SUPPORTS_DAV) ]) # The libtoolized build case: AC_DEFUN([NEON_LIBTOOL_BUILD], [ NEON_TARGET=libneon.la NEON_OBJEXT=lo NEON_COMMON_BUILD($#, $*) ]) dnl Find 'ar' and 'ranlib', fail if ar isn't found. AC_DEFUN([NE_FIND_AR], [ # Search in /usr/ccs/bin for Solaris ne_PATH=$PATH:/usr/ccs/bin AC_PATH_TOOL(AR, ar, notfound, $ne_PATH) if test "x$AR" = "xnotfound"; then AC_MSG_ERROR([could not find ar tool]) fi AC_PATH_TOOL(RANLIB, ranlib, :, $ne_PATH) ]) # The non-libtool build case: AC_DEFUN([NEON_NORMAL_BUILD], [ NEON_TARGET=libneon.a NEON_OBJEXT=o AC_REQUIRE([NE_FIND_AR]) NEON_COMMON_BUILD($#, $*) ]) AC_DEFUN([NE_SNPRINTF], [ AC_CHECK_FUNCS(snprintf vsnprintf,,[ ne_save_LIBS=$LIBS LIBS="$LIBS -lm" # Always need -lm AC_CHECK_LIB(trio, trio_vsnprintf, [AC_CHECK_HEADERS(trio.h,, AC_MSG_ERROR([trio installation problem? libtrio found but not trio.h])) AC_MSG_NOTICE(using trio printf replacement library) NEON_LIBS="$NEON_LIBS -ltrio -lm" NEON_CFLAGS="$NEON_CFLAGS -DNEON_TRIO"], [AC_MSG_NOTICE([no vsnprintf/snprintf detected in C library]) AC_MSG_ERROR([Install the trio library from http://daniel.haxx.se/trio/])]) LIBS=$ne_save_LIBS break ])]) dnl Usage: NE_CHECK_SSLVER(variable, version-string, version-hex) dnl Define 'variable' to 'yes' if OpenSSL version is >= version-hex AC_DEFUN([NE_CHECK_SSLVER], [ AC_CACHE_CHECK([OpenSSL version is >= $2], $1, [ AC_EGREP_CPP(good, [#include #if OPENSSL_VERSION_NUMBER >= $3 good #endif], [$1=yes], [$1=no])])]) dnl Less noisy replacement for PKG_CHECK_MODULES AC_DEFUN([NE_PKG_CONFIG], [ AC_PATH_PROG(PKG_CONFIG, pkg-config, no) if test "$PKG_CONFIG" = "no"; then : Not using pkg-config $4 else AC_CACHE_CHECK([for $2 pkg-config data], ne_cv_pkg_$2, [if $PKG_CONFIG $2; then ne_cv_pkg_$2=yes else ne_cv_pkg_$2=no fi]) if test "$ne_cv_pkg_$2" = "yes"; then $1_CFLAGS=`$PKG_CONFIG --cflags $2` $1_LIBS=`$PKG_CONFIG --libs $2` : Using provided pkg-config data $3 else : No pkg-config for $2 provided $4 fi fi]) dnl Check for OpenSSL AC_DEFUN([NEON_SSL], [ AC_ARG_WITH(ssl, [AC_HELP_STRING([--with-ssl], [enable OpenSSL support])]) AC_ARG_WITH(egd, [[ --with-egd[=PATH] enable EGD support [using EGD socket at PATH]]]) case $with_ssl in yes) NE_PKG_CONFIG(NE_SSL, openssl, [AC_MSG_NOTICE(using SSL library configuration from pkg-config) CPPFLAGS="$CPPFLAGS ${NE_SSL_CFLAGS}" NEON_LIBS="$NEON_LIBS ${NE_SSL_LIBS}"], [# libcrypto may require -ldl if using the OpenSSL ENGINE branch NE_SEARCH_LIBS(RSA_new, crypto, -ldl) NE_SEARCH_LIBS(SSL_library_init, ssl)]) AC_CHECK_HEADERS(openssl/ssl.h openssl/opensslv.h,, [AC_MSG_ERROR([OpenSSL headers not found, cannot enable SSL support])]) # Enable EGD support if using 0.9.7 or newer NE_CHECK_SSLVER(ne_cv_lib_ssl097, 0.9.7, 0x00907000L) if test "$ne_cv_lib_ssl097" = "yes"; then AC_MSG_NOTICE([OpenSSL >= 0.9.7; EGD support not needed in neon]) neon_ssl_message="OpenSSL (0.9.7 or later)" else # Fail if OpenSSL is older than 0.9.6 NE_CHECK_SSLVER(ne_cv_lib_ssl096, 0.9.6, 0x00906000L) if test "$ne_cv_lib_ssl096" != "yes"; then AC_MSG_ERROR([OpenSSL 0.9.6 or later is required]) fi neon_ssl_message="OpenSSL (0.9.6 or later)" case "$with_egd" in yes|no) ne_cv_lib_sslegd=$with_egd ;; /*) ne_cv_lib_sslegd=yes AC_DEFINE_UNQUOTED([EGD_PATH], "$with_egd", [Define to specific EGD socket path]) ;; *) # Guess whether EGD support is needed AC_CACHE_CHECK([whether to enable EGD support], [ne_cv_lib_sslegd], [if test -r /dev/random || test -r /dev/urandom; then ne_cv_lib_sslegd=no else ne_cv_lib_sslegd=yes fi]) ;; esac if test "$ne_cv_lib_sslegd" = "yes"; then AC_MSG_NOTICE([EGD support enabled for seeding OpenSSL PRNG]) AC_DEFINE([ENABLE_EGD], 1, [Define if EGD should be supported]) fi fi NEON_SUPPORTS_SSL=yes NEON_CFLAGS="$NEON_CFLAGS -DNEON_SSL" NEON_EXTRAOBJS="$NEON_EXTRAOBJS ne_openssl" ;; *) # Default to off; only create crypto-enabled binaries if requested. neon_ssl_message="No SSL support" NEON_SUPPORTS_SSL=no NEON_EXTRAOBJS="$NEON_EXTRAOBJS ne_stubssl" ;; esac AC_SUBST(NEON_SUPPORTS_SSL) ]) dnl Check for Kerberos installation AC_DEFUN([NEON_GSSAPI], [ AC_PATH_PROG([KRB5_CONFIG], krb5-config, none, $PATH:/usr/kerberos/bin) if test "x$KRB5_CONFIG" != "xnone"; then ne_save_CPPFLAGS=$CPPFLAGS ne_save_LIBS=$NEON_LIBS NEON_LIBS="$NEON_LIBS `${KRB5_CONFIG} --libs gssapi`" CPPFLAGS="$CPPFLAGS `${KRB5_CONFIG} --cflags gssapi`" # MIT and Heimdal put gssapi.h in different places AC_CHECK_HEADERS(gssapi/gssapi.h gssapi.h, [ NE_CHECK_FUNCS(gss_init_sec_context, [ ne_save_CPPFLAGS=$CPPFLAGS ne_save_LIBS=$NEON_LIBS AC_MSG_NOTICE([GSSAPI authentication support enabled]) AC_DEFINE(HAVE_GSSAPI, 1, [Define if GSSAPI support is enabled]) AC_CHECK_HEADERS(gssapi/gssapi_generic.h) # MIT Kerberos lacks GSS_C_NT_HOSTBASED_SERVICE AC_CHECK_DECL([GSS_C_NT_HOSTBASED_SERVICE],, [AC_DEFINE([GSS_C_NT_HOSTBASED_SERVICE], gss_nt_service_name, [Define if GSS_C_NT_HOSTBASED_SERVICE is not defined otherwise])], [#ifdef HAVE_GSSAPI_GSSAPI_H #include #else #include #endif])]) break ]) CPPFLAGS=$ne_save_CPPFLAGS NEON_LIBS=$ne_save_LIBS fi]) dnl Adds an --enable-warnings argument to configure to allow enabling dnl compiler warnings AC_DEFUN([NEON_WARNINGS],[ AC_REQUIRE([AC_PROG_CC]) dnl so that $GCC is set AC_ARG_ENABLE(warnings, AC_HELP_STRING(--enable-warnings, [enable compiler warnings])) if test "$enable_warnings" = "yes"; then case $GCC:`uname` in yes:*) CFLAGS="$CFLAGS -Wall -ansi-pedantic -Wmissing-declarations -Winline -Wshadow -Wreturn-type -Wsign-compare -Wundef -Wpointer-arith -Wcast-align -Wbad-function-cast -Wimplicit-prototypes -Wformat-security" if test -z "$with_ssl" -o "$with_ssl" = "no"; then # OpenSSL headers fail strict prototypes checks CFLAGS="$CFLAGS -Wstrict-prototypes" fi ;; no:OSF1) CFLAGS="$CFLAGS -check -msg_disable returnchecks -msg_disable alignment -msg_disable overflow" ;; no:IRIX) CFLAGS="$CFLAGS -fullwarn" ;; no:UnixWare) CFLAGS="$CFLAGS -v" ;; *) AC_MSG_WARN([warning flags unknown for compiler on this platform]) ;; esac fi ]) dnl Adds an --disable-debug argument to configure to allow disabling dnl debugging messages. dnl Usage: dnl NEON_WARNINGS([actions-if-debug-enabled], [actions-if-debug-disabled]) dnl AC_DEFUN([NEON_DEBUG], [ AC_ARG_ENABLE(debug, AC_HELP_STRING(--disable-debug,[disable runtime debugging messages])) # default is to enable debugging case $enable_debug in no) AC_MSG_NOTICE([debugging is disabled]) $2 ;; *) AC_MSG_NOTICE([debugging is enabled]) AC_DEFINE(NE_DEBUGGING, 1, [Define to enable debugging]) $1 ;; esac]) dnl Macro to optionally enable socks support AC_DEFUN([NEON_SOCKS], [ AC_ARG_WITH([socks], AC_HELP_STRING([--with-socks],[use SOCKSv5 library])) if test "$with_socks" = "yes"; then ne_save_LIBS=$LIBS AC_CHECK_HEADERS(socks.h, [AC_CHECK_LIB(socks5, connect, [AC_MSG_NOTICE([SOCKSv5 support enabled])], [AC_MSG_ERROR([could not find libsocks5 for SOCKS support])])], [AC_MSG_ERROR([could not find socks.h for SOCKS support])]) CFLAGS="$CFLAGS -DNEON_SOCKS" NEON_LIBS="$NEON_LIBS -lsocks5" LIBS=$ne_save_LIBS fi]) AC_DEFUN([NEON_WITH_LIBS], [ AC_ARG_WITH([libs], [[ --with-libs=DIR[:DIR2...] look for support libraries in DIR/{bin,lib,include}]], [case $with_libs in yes|no) AC_MSG_ERROR([--with-libs must be passed a directory argument]) ;; *) ne_save_IFS=$IFS; IFS=: for dir in $with_libs; do ne_add_CPPFLAGS="$ne_add_CPPFLAGS -I${dir}/include" ne_add_LDFLAGS="$ne_add_LDFLAGS -L${dir}/lib" ne_add_PATH="${ne_add_PATH}${dir}/bin:" done IFS=$ne_save_IFS CPPFLAGS="${ne_add_CPPFLAGS} $CPPFLAGS" LDFLAGS="${ne_add_LDFLAGS} $LDFLAGS" PATH=${ne_add_PATH}$PATH ;; esac])]) tla-1.3.5+dfsg/src/libneon/config.h.in0000644000175000017500000001675010457621776016225 0ustar useruser/* config.h.in. Generated from configure.in by autoheader. */ /* Define to specific EGD socket path */ #undef EGD_PATH /* Define if EGD should be supported */ #undef ENABLE_EGD /* Define if GSS_C_NT_HOSTBASED_SERVICE is not defined otherwise */ #undef GSS_C_NT_HOSTBASED_SERVICE /* Define to 1 if you have the header file. */ #undef HAVE_ARPA_INET_H /* Define to 1 if you have the declaration of `stpcpy', and to 0 if you don't. */ #undef HAVE_DECL_STPCPY /* Define to 1 if you have the declaration of `strerror_r', and to 0 if you don't. */ #undef HAVE_DECL_STRERROR_R /* Define to 1 if you have the header file. */ #undef HAVE_DLFCN_H /* Define to 1 if you have the header file. */ #undef HAVE_ERRNO_H /* Define if you have expat */ #undef HAVE_EXPAT /* Define to 1 if you have the `gai_strerror' function. */ #undef HAVE_GAI_STRERROR /* Define to 1 if you have the `getaddrinfo' function. */ #undef HAVE_GETADDRINFO /* Define if GSSAPI support is enabled */ #undef HAVE_GSSAPI /* Define to 1 if you have the header file. */ #undef HAVE_GSSAPI_GSSAPI_GENERIC_H /* Define to 1 if you have the header file. */ #undef HAVE_GSSAPI_GSSAPI_H /* Define to 1 if you have the header file. */ #undef HAVE_GSSAPI_H /* Define to 1 if you have the `gss_init_sec_context' function. */ #undef HAVE_GSS_INIT_SEC_CONTEXT /* Define to 1 if you have the `hstrerror' function. */ #undef HAVE_HSTRERROR /* Define to 1 if you have the `inet_ntop' function. */ #undef HAVE_INET_NTOP /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H /* Define to 1 if you have the `isatty' function. */ #undef HAVE_ISATTY /* Define if you have libxml */ #undef HAVE_LIBXML /* Define to 1 if you have the header file. */ #undef HAVE_LIBXML_PARSER_H /* Define to 1 if you have the header file. */ #undef HAVE_LIBXML_XMLVERSION_H /* Define to 1 if you have the header file. */ #undef HAVE_LIMITS_H /* Define to 1 if you have the header file. */ #undef HAVE_MEMORY_H /* Define to 1 if you have the header file. */ #undef HAVE_NETDB_H /* Define to 1 if you have the header file. */ #undef HAVE_NETINET_IN_H /* Define to 1 if you have the header file. */ #undef HAVE_NETINET_TCP_H /* Define to 1 if you have the header file. */ #undef HAVE_OPENSSL_OPENSSLV_H /* Define to 1 if you have the header file. */ #undef HAVE_OPENSSL_SSL_H /* Define to 1 if you have the `pipe' function. */ #undef HAVE_PIPE /* Define to 1 if you have the `setsockopt' function. */ #undef HAVE_SETSOCKOPT /* Define to 1 if you have the `setvbuf' function. */ #undef HAVE_SETVBUF /* Define to 1 if you have the `shutdown' function. */ #undef HAVE_SHUTDOWN /* Define to 1 if you have the `signal' function. */ #undef HAVE_SIGNAL /* Define to 1 if you have the header file. */ #undef HAVE_SIGNAL_H /* Define to 1 if you have the `snprintf' function. */ #undef HAVE_SNPRINTF /* Define to 1 if you have the header file. */ #undef HAVE_SOCKS_H /* Define to 1 if you have the header file. */ #undef HAVE_STDARG_H /* Define to 1 if you have the header file. */ #undef HAVE_STDINT_H /* Define to 1 if you have the header file. */ #undef HAVE_STDLIB_H /* Define to 1 if you have the `stpcpy' function. */ #undef HAVE_STPCPY /* Define to 1 if you have the `strcasecmp' function. */ #undef HAVE_STRCASECMP /* Define to 1 if you have the `strerror_r' function. */ #undef HAVE_STRERROR_R /* Define to 1 if you have the header file. */ #undef HAVE_STRINGS_H /* Define to 1 if you have the header file. */ #undef HAVE_STRING_H /* Define to 1 if `tm_gmtoff' is member of `struct tm'. */ #undef HAVE_STRUCT_TM_TM_GMTOFF /* Define to 1 if you have the header file. */ #undef HAVE_SYS_SELECT_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_SOCKET_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_STAT_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TIME_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TYPES_H /* Define to 1 if you have the header file. */ #undef HAVE_TRIO_H /* Define to 1 if you have the header file. */ #undef HAVE_UNISTD_H /* Define to 1 if you have the `usleep' function. */ #undef HAVE_USLEEP /* Define to 1 if you have the `vsnprintf' function. */ #undef HAVE_VSNPRINTF /* Define when building neon as a library */ #undef NEON_IS_LIBRARY /* Enable memory leak detection. */ #ifdef NEON_MEMLEAK # include "memleak.h" #endif /* Enable if built without WebDAV support */ #undef NEON_NODAV /* Define to be the neon version string */ #undef NEON_VERSION /* Define to be major number of neon version */ #undef NEON_VERSION_MAJOR /* Define to be minor number of neon version */ #undef NEON_VERSION_MINOR /* Define to enable debugging */ #undef NE_DEBUGGING /* Define to be printf format string for off_t */ #undef NE_FMT_OFF_T /* Define to be printf format string for size_t */ #undef NE_FMT_SIZE_T /* Define to be printf format string for ssize_t */ #undef NE_FMT_SSIZE_T /* Define to be printf format string for time_t */ #undef NE_FMT_TIME_T /* Define to the address where bug reports for this package should be sent. */ #undef PACKAGE_BUGREPORT /* Define to the full name of this package. */ #undef PACKAGE_NAME /* Define to the full name and version of this package. */ #undef PACKAGE_STRING /* Define to the one symbol short name of this package. */ #undef PACKAGE_TARNAME /* Define to the version of this package. */ #undef PACKAGE_VERSION /* The size of a `int', as computed by sizeof. */ #undef SIZEOF_INT /* The size of a `long', as computed by sizeof. */ #undef SIZEOF_LONG /* The size of a `long long', as computed by sizeof. */ #undef SIZEOF_LONG_LONG /* The size of a `off_t', as computed by sizeof. */ #undef SIZEOF_OFF_T /* The size of a `size_t', as computed by sizeof. */ #undef SIZEOF_SIZE_T /* The size of a `ssize_t', as computed by sizeof. */ #undef SIZEOF_SSIZE_T /* The size of a `time_t', as computed by sizeof. */ #undef SIZEOF_TIME_T /* Define to 1 if you have the ANSI C header files. */ #undef STDC_HEADERS /* Define to 1 if strerror_r returns char *. */ #undef STRERROR_R_CHAR_P /* Define to 1 if you can safely include both and . */ #undef TIME_WITH_SYS_TIME /* Support WebDAV locking through the library */ #undef USE_DAV_LOCKS /* Define if getaddrinfo supports AI_ADDRCONFIG */ #undef USE_GAI_ADDRCONFIG /* Define if getaddrinfo() should be used */ #undef USE_GETADDRINFO /* Define to 1 if your processor stores words with the most significant byte first (like Motorola and SPARC, unlike Intel and VAX). */ #undef WORDS_BIGENDIAN /* Unconditionally define _GNU_SOURCE */ #undef _GNU_SOURCE /* Define to empty if `const' does not conform to ANSI C. */ #undef const /* Define to `__inline__' or `__inline' if that's what the C compiler calls it, or to nothing if 'inline' is not supported under any name. */ #ifndef __cplusplus #undef inline #endif /* Define to `long' if does not define. */ #undef off_t /* Define to `int' if does not define. */ #undef pid_t /* Define to `unsigned' if does not define. */ #undef size_t #if defined(HAVE_STPCPY) && !HAVE_DECL_STPCPY && !defined(stpcpy) char *stpcpy(char *, const char *); #endif tla-1.3.5+dfsg/src/libneon/install-sh0000755000175000017500000001272110457621776016200 0ustar useruser#! /bin/sh # # install - install a program, script, or datafile # This comes from X11R5 (mit/util/scripts/install.sh). # # Copyright 1991 by the Massachusetts Institute of Technology # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of M.I.T. not be used in advertising or # publicity pertaining to distribution of the software without specific, # written prior permission. M.I.T. makes no representations about the # suitability of this software for any purpose. It is provided "as is" # without express or implied warranty. # # Calling this script install-sh is preferred over install.sh, to prevent # `make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. It can only install one file at a time, a restriction # shared with many OS's install programs. # set DOITPROG to echo to test this script # Don't use :- since 4.3BSD and earlier shells don't like it. doit="${DOITPROG-}" # put in absolute paths if you don't have them in your path; or use env. vars. mvprog="${MVPROG-mv}" cpprog="${CPPROG-cp}" chmodprog="${CHMODPROG-chmod}" chownprog="${CHOWNPROG-chown}" chgrpprog="${CHGRPPROG-chgrp}" stripprog="${STRIPPROG-strip}" rmprog="${RMPROG-rm}" mkdirprog="${MKDIRPROG-mkdir}" transformbasename="" transform_arg="" instcmd="$mvprog" chmodcmd="$chmodprog 0755" chowncmd="" chgrpcmd="" stripcmd="" rmcmd="$rmprog -f" mvcmd="$mvprog" src="" dst="" dir_arg="" while [ x"$1" != x ]; do case $1 in -c) instcmd="$cpprog" shift continue;; -d) dir_arg=true shift continue;; -m) chmodcmd="$chmodprog $2" shift shift continue;; -o) chowncmd="$chownprog $2" shift shift continue;; -g) chgrpcmd="$chgrpprog $2" shift shift continue;; -s) stripcmd="$stripprog" shift continue;; -t=*) transformarg=`echo $1 | sed 's/-t=//'` shift continue;; -b=*) transformbasename=`echo $1 | sed 's/-b=//'` shift continue;; *) if [ x"$src" = x ] then src=$1 else # this colon is to work around a 386BSD /bin/sh bug : dst=$1 fi shift continue;; esac done if [ x"$src" = x ] then echo "install: no input file specified" exit 1 else true fi if [ x"$dir_arg" != x ]; then dst=$src src="" if [ -d $dst ]; then instcmd=: else instcmd=mkdir fi else # Waiting for this to be detected by the "$instcmd $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if [ -f $src -o -d $src ] then true else echo "install: $src does not exist" exit 1 fi if [ x"$dst" = x ] then echo "install: no destination specified" exit 1 else true fi # If destination is a directory, append the input filename; if your system # does not like double slashes in filenames, you may need to add some logic if [ -d $dst ] then dst="$dst"/`basename $src` else true fi fi ## this sed command emulates the dirname command dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'` # Make sure that the destination directory exists. # this part is taken from Noah Friedman's mkinstalldirs script # Skip lots of stat calls in the usual case. if [ ! -d "$dstdir" ]; then defaultIFS=' ' IFS="${IFS-${defaultIFS}}" oIFS="${IFS}" # Some sh's can't handle IFS=/ for some reason. IFS='%' set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'` IFS="${oIFS}" pathcomp='' while [ $# -ne 0 ] ; do pathcomp="${pathcomp}${1}" shift if [ ! -d "${pathcomp}" ] ; then $mkdirprog "${pathcomp}" else true fi pathcomp="${pathcomp}/" done fi if [ x"$dir_arg" != x ] then $doit $instcmd $dst && if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi && if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi && if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi && if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi else # If we're going to rename the final executable, determine the name now. if [ x"$transformarg" = x ] then dstfile=`basename $dst` else dstfile=`basename $dst $transformbasename | sed $transformarg`$transformbasename fi # don't allow the sed command to completely eliminate the filename if [ x"$dstfile" = x ] then dstfile=`basename $dst` else true fi # Make a temp file name in the proper directory. dsttmp=$dstdir/#inst.$$# # Move or copy the file name to the temp name $doit $instcmd $src $dsttmp && trap "rm -f ${dsttmp}" 0 && # and set any options; do chmod last to preserve setuid bits # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $instcmd $src $dsttmp" command. if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi && if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi && if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi && if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi && # Now rename the file to the real destination. $doit $rmcmd -f $dstdir/$dstfile && $doit $mvcmd $dsttmp $dstdir/$dstfile fi && exit 0 tla-1.3.5+dfsg/src/libneon/autogen.sh0000755000175000017500000000124310457621776016172 0ustar useruser#!/bin/sh rm -f ltconfig ltmain.sh config.cache aclocal.m4 # remove the autoconf cache rm -rf autom4te*.cache # create a .version file for configure.in if test ! -f .version; then # Building from CVS rather than in a release echo 0.0.0-dev > .version # for the documentation: date +"%e %B %Y" | tr -d '\n' > doc/date.xml echo -n 0.0.0-dev > doc/version.xml fi set -e echo -n "aclocal... " ${ACLOCAL:-aclocal} -I macros echo -n "autoheader... " ${AUTOHEADER:-autoheader} echo -n "libtoolize... " ${LIBTOOLIZE:-libtoolize} --copy --force >/dev/null echo -n "autoconf... " ${AUTOCONF:-autoconf} -Wall echo okay. # remove the autoconf cache rm -rf autom4te*.cache tla-1.3.5+dfsg/src/libneon/configure.in0000644000175000017500000001076710457621776016515 0ustar useruserdnl Require autoconf 2.53 for an AC_C_BIGENDIAN which supports dnl cross-compiling. AC_PREREQ(2.53) dnl Extract the version (sans LF) from .version, created at release-time. m4_define(ne_version, [m4_translit(m4_include(.version), [ ])]) AC_INIT(neon, ne_version, [neon@webdav.org]) AC_COPYRIGHT([Copyright (c) 2000, 2001, 2002 Joe Orton This configure script may be copied, distributed and modified under the terms of the GNU Library General Public license; see COPYING for more details]) AC_CONFIG_HEADER(config.h) AC_CONFIG_SRCDIR(src/ne_request.c) NEON_WITH_LIBS # Pass through initial LDFLAGS verbatim to neon-config, so that extra # libraries which are detected (e.g. OpenSSL) can still be found when # building using the --libs output of neon-config. user_LDFLAGS=$LDFLAGS AC_SUBST(user_LDFLAGS) # By default, allow 'make install' to work. ALLOW_INSTALL=yes AC_SUBST(ALLOW_INSTALL) # Always defined AC_DEFINE([_GNU_SOURCE], 1, [Unconditionally define _GNU_SOURCE]) # Defined when neon is built as library AC_DEFINE(NEON_IS_LIBRARY, 1, [Define when building neon as a library]) AC_PROG_INSTALL dnl Avoid libtool 1.5 bug where configure fails if a C++ compiler dnl is not available. m4_ifdef([AC_LIBTOOL_TAGS], [AC_LIBTOOL_TAGS([])]) AC_DISABLE_SHARED AC_PROG_LIBTOOL AC_EXEEXT top_builddir=`pwd` AC_SUBST(top_builddir) AC_ARG_ENABLE(webdav, AC_HELP_STRING([--disable-webdav], [disable WebDAV support])) if test "$enable_webdav" = "no"; then NEON_WITHOUT_WEBDAV else # Yes, we do need an XML parser. The _BUNDLED macros handle # this normally. NEON_NEED_XML_PARSER=yes fi # The bundled macros also set this, which makes sure we recurse # into the 'src' directory. NEON_BUILD_BUNDLED=yes AC_SUBST(NEON_BUILD_BUNDLED) # Define NEON_VERSION* and make the appropriate substitutions. NEON_VERSIONS # Pass the interface version on to libtool when linking libneon.la NEON_LINK_FLAGS="-version-info ${NEON_INTERFACE_VERSION}" # Checks to compile test suite NEON_TEST LIBNEON_SOURCE_CHECKS # Use the libtool-type build. NEON_LIBTOOL_BUILD # Find an XML parser # NEON_XML_PARSER(expat) AC_DEFINE(HAVE_EXPAT, 1, [Define if you have expat]) AC_DEFINE(HAVE_XMLPARSE_H, 1, [Define if using expat which includes xmlparse.h]) neon_xml_parser_message="expat" NEON_LIBS="$NEON_LIBS -lexpat" neon_xml_parser=expat with_included_expat=yes # Extra checks for debugging, compiler warnings NEON_DEBUG # Leave till last to prevent CFLAGS affecting checks. NEON_WARNINGS CFLAGS="$CFLAGS -I\${top_builddir}" dnl Substitute NEON_VERSION for neon-config too. AC_SUBST(NEON_VERSION) AC_ARG_ENABLE(memleak, AC_HELP_STRING([--enable-memleak], [for test builds only: enable memory leak checking])) dnl Have autoheader include the following template in config.h.in: AH_VERBATIM([NEON_MEMLEAK], [/* Enable memory leak detection. */ #ifdef NEON_MEMLEAK # include "memleak.h" #endif]) if test "$enable_memleak" = "yes"; then CPPFLAGS="$CPPFLAGS -DNEON_MEMLEAK -I\$(top_srcdir)/src" # disable 'make install' ALLOW_INSTALL=memleak fi # Enable tests for optional features TESTS="\$(BASIC_TESTS)" HELPERS="" if test "$NEON_SUPPORTS_SSL" = "yes"; then # Only enable SSL tests if an openssl binary is found (needed to make # certs etc). AC_PATH_PROG(OPENSSL, openssl, notfound) if test "$OPENSSL" != "notfound"; then TESTS="$TESTS \$(SSL_TESTS)" HELPERS="$HELPERS \$(SSL_HELPERS)" else AC_MSG_WARN([no openssl binary in \$PATH: SSL tests disabled]) fi fi if test "$NEON_SUPPORTS_DAV" = "yes"; then TESTS="$TESTS \$(DAV_TESTS)" fi if test "$NEON_SUPPORTS_ZLIB" = "yes"; then TESTS="$TESTS \$(ZLIB_TESTS)" HELPERS="$HELPERS \$(ZLIB_HELPERS)" fi AC_SUBST(HELPERS) AC_SUBST(TESTS) AC_CONFIG_FILES([neon-config], [chmod +x neon-config]) AC_CONFIG_FILES([Makefile src/Makefile test/Makefile neon.pc]) AC_OUTPUT # for VPATH builds: test -d test/common || mkdir test/common AC_MSG_NOTICE([Configured to build AC_PACKAGE_STRING: Install prefix: ${prefix} Compiler: ${CC} XML Parser: ${neon_xml_parser_message} SSL library: ${neon_ssl_message} zlib support: ${neon_zlib_message} Build libraries: Shared=${enable_shared}, Static=${enable_static} Now run 'make' to compile the neon library. ]) case $ALLOW_INSTALL in memleak) AC_MSG_NOTICE([Configured with development-only flags: WARNING: This copy of neon has been configured with memory leak checking WARNING: enabled, which should only be used in a development copy of neon. WARNING: This neon library should not be installed for use by applications. ]);; esac tla-1.3.5+dfsg/src/libneon/PLUGIN/0000755000175000017500000000000010457621776015167 5ustar userusertla-1.3.5+dfsg/src/libneon/PLUGIN/REQ0000644000175000017500000000001710457621776015537 0ustar useruserexpat libneon tla-1.3.5+dfsg/src/libneon/PLUGIN/AUTOCONF0000644000175000017500000000101210457621776016322 0ustar useruser#!/bin/sh if test ! -z "$CFLAGS" ; then printf '\n' printf '================================\n' printf 'WARNING:\n' printf '\n' printf ' Discarding "-Werror" from $CFLAGS\n' printf ' while configuring "src/libneon"\n' printf '\n' printf '================================\n' printf '\n' if printf '%s' "$CFLAGS" | grep -q -e -Werror ; then CFLAGS="$(printf '%s' "$CFLAGS" | sed -e 's/-Werror//g')" fi fi "$1" --with-ssl=no --with-included-expat --with-expat --disable-shared --enable-static tla-1.3.5+dfsg/src/libneon/TODO0000644000175000017500000001077010457621776014666 0ustar useruser To Do List for neon -*- text -*- =================== Please submit feature requests to For one-point-oh ---------------- 23. Mechanism for aborting a request mid-response; e.g., when a GET fails due to out of disk space, abort the download. 31. Make it threadsafe: socket.c: getservbyname -> getservbyname_r. 38. Replace all use of split_string/pair_string with ne_token. 40. XML body acceptance callback should check Content-Type. Should also pass encoding to expat if one is given (how about libxml?). Recent mod_dav's return XML bodies in 424 responses which need displaying properly. 44. Finer-grained connection status feedback, i.e., "Sent Request", "Got response status-line"... "Reading response body" 58. 2616 is quite strict about when to retry non-idempotent requests and when not to. neon may not be compliant here. 61. Make everything namespace-safe: remove split_string/pair_string. 62. Select which auth mechanisms are allowed, e.g. JUST SAY NO to basic might very well be useful to some apps. 63. Unconditionally turn off Nagle algorithm. Longer term ----------- 1. Support for HTTP-extended authoring methods ala WebRFM etc; using New-URI header etc. Also support the BROWSE and INDEX methods. The protocol is documented at: http://www.ics.uci.edu/pub/ietf/webdav/ns_dav.html DON'T do this inside ne_basic.c, do it separately in ne_author.c or something. 2. Add proper domain support to authentication code. (requires full URI parsing support). Need to tell the auth layer the server details. 6. PUT with ranges... ne_put_range 9. DeltaV support (http://www.webdav.org/deltav/). See also the subversion project (http://subversion.tigris.org/) who might build a versioning system over DAV. 10. ACL support (http://www.webdav.org/acl/) 11. DASL support (http://www.webdav.org/dasl/). Xythos have server support for this (www.sharemation.com). The UI is probably the hardest problem here. => Jim Whitehead's UCI postgrad team is working on this and has written a DASL implementation. 14. Improved request-header manipulation... some kind of indexed table (a la Apache, libghttp, so we're sure we don't add the same header to the request twice. Better control over adding Cache-Control headers would be good too. 17. Should we really be i18n'izing the low-level error messages in ne_request.c, ne_207.c ? It seems nice and clever to, so the user REALLY know what is going wrong with the server (probably), but it is maybe a bit frightening. 20. Add decent and proper URI parser + handling. Or stop pretending we are doing "URI" parsing, and just handle HTTP URL's. 21. Storing multiple authentication "sessions" within an actual auth_session, so I can log into e.g. /foo/ and /bar/ (which are not in the same authentication domain) and switch between them without having to re-enter passwords all the time. 28. Support response caching? 35. Allow i18n'ization if building a shared library, iff gettext support is on the system (and hence add -lintl or whatever to NEON_LIBS). If system has no gettext support, then it's probably impossible to support i18n in the library (although *applications* can support it by bundling gettext themselves). Take a look at how other libraries handle this. 46. Asynchronous request-dispatching? Makes integration into GUI loop easy... any other reasons? Must leave existing request_dispatch interface intact. 47. Indexed table-based response-header access? Might simplify things like response body acceptance callbacks (i.e., can get access to Content-Type header for XML). 48. Possibly, store the time of last interaction over the TCP socket, call it 't'. If the next request is made after t+20, presume the persistent connection is dead, so re-connect automatically. If we don't do this, then we have two wasted write() calls making the request, then failing, then re-connecting. It's really only worth doing this if this actually saves any packets on the wire, which it probably doesn't. strace / tcpdump might help here. 50. opendir/readdir/closedir-esque interface for PROPFIND depth 1, a la EZDAV. (cadaver has it already) 53. "ne_session" concept is hazy. Abstract out a "connection" concept too, and allow >1 connection per-session in multi-threaded use, somehow. 57. Add function to map of status-code values to i18n-ized reason phrase. tla-1.3.5+dfsg/src/libneon/neon-config.in0000644000175000017500000000327610457621776016733 0ustar useruser#! /bin/sh # Originally from libxml, Copyright (C) Daniel Veillard # Modifications for neon Copyright (C) 2000-2002 Joe Orton. prefix=@prefix@ exec_prefix=@exec_prefix@ includedir=@includedir@ libdir=@libdir@ usage() { cat < nul echo Created config.h from config.hw << "$(INTDIR)\ne_207.obj": .\src\ne_207.c "$(INTDIR)\ne_alloc.obj": .\src\ne_alloc.c "$(INTDIR)\ne_acl.obj": .\src\ne_acl.c "$(INTDIR)\ne_auth.obj": .\src\ne_auth.c "$(INTDIR)\ne_basic.obj": .\src\ne_basic.c "$(INTDIR)\ne_compress.obj": .\src\ne_compress.c "$(INTDIR)\ne_cookies.obj": .\src\ne_cookies.c "$(INTDIR)\ne_dates.obj": .\src\ne_dates.c "$(INTDIR)\ne_i18n.obj": .\src\ne_i18n.c "$(INTDIR)\ne_locks.obj": .\src\ne_locks.c "$(INTDIR)\ne_md5.obj": .\src\ne_md5.c "$(INTDIR)\ne_props.obj": .\src\ne_props.c "$(INTDIR)\ne_redirect.obj": .\src\ne_redirect.c "$(INTDIR)\ne_request.obj": .\src\ne_request.c "$(INTDIR)\ne_session.obj": .\src\ne_session.c "$(INTDIR)\ne_openssl.obj": .\src\ne_openssl.c "$(INTDIR)\ne_stubssl.obj": .\src\ne_stubssl.c "$(INTDIR)\ne_socket.obj": .\src\ne_socket.c "$(INTDIR)\ne_string.obj": .\src\ne_string.c "$(INTDIR)\ne_uri.obj": .\src\ne_uri.c "$(INTDIR)\ne_utils.obj": .\src\ne_utils.c "$(INTDIR)\ne_xml.obj": .\src\ne_xml.c tla-1.3.5+dfsg/src/libneon/ChangeLog0000644000175000017500000005042110457621776015745 0ustar useruserMon May 17 21:25:44 2004 Joe Orton * neon.mak: Fix handling of paths with spaces, and simplify (Jon Foster ). Thu May 13 11:42:07 2004 Joe Orton * configure.in: Don't rely on echo -n in ne_version. Fri Mar 26 12:07:04 2004 Joe Orton * Makefile.in (distclean): Clean more. Sat Oct 25 10:37:59 2003 Joe Orton * configure.in: Use AC_LIBTOOL_TAGS if available. Mon Sep 22 20:56:21 2003 Joe Orton * Makefile.in: Respect @datadir@ from configure (Max Bowsher). Sun Sep 14 11:13:36 2003 Joe Orton * configure.in: Run NEON_TEST before LIBNEON_SOURCE_CHECKS, to help prevent time_t format string detection failing due to changed CFLAGS. Fri Jun 20 17:51:05 2003 Joe Orton * configure.in, neon-config.in: Don't pass user-supplied CPPFLAGS through to neon-config, it is no longer necessary. Sun Apr 6 19:51:31 2003 Joe Orton * doc/manual.xml: Include clicert reference docs. * doc/ref/clicert.xml: New file. Sun Apr 6 19:24:47 2003 Joe Orton * Makefile.in (XMLTO): New variable. (docs-man, docs-pdf, docs-ps, docs-html): Use $(XMLTO) variable. Wed Mar 26 20:09:12 2003 Joe Orton * Makefile.in (DIST_HEADERS): Add ne_tls.h * neon.mak: Build ne_openssl.obj for SSL build, ne_stubssl.obj for non-SSL build. Sun Mar 9 10:38:36 2003 Joe Orton * configure.in: Set ALLOW_INSTALL=yes early to allow later overrides. * Makefile.in (install-yes): Remove dependence on subdirs. (install-lib): Depend on subdirs; don't install neon.pc. (install-config): Install neon.pc here. Sat Mar 1 21:50:17 2003 Joe Orton * Makefile.in (cover): New target. Sat Mar 1 20:39:32 2003 Joe Orton * configure.in: Add --enable-memleak argument; if enabled, have config.h include memleak.h, add top_srcdir/src to include path, and substitute ALLOW_INSTALL as 'memleak'. Otherwise, substitute ALLOW_INSTALL as 'yes'. * Makefile.in (install): Use install-@ALLOW_INSTALL@. (install-yes): Renamed from install. (install-memleak): Prevent installation with non-standard ABI. Fri Dec 27 15:15:54 2002 Joe Orton * neon.pc.in: New file. * configure.in: Generate neon.pc. * Makefile.in (install-lib): Install neon.pc Tue Nov 19 11:24:40 2002 Joe Orton * configure.in: Use NEON_TEST before NEON_XML_PARSER to prevent problems if NEON_XML_PARSER adds anything to CPPFLAGS which breaks gcc -Werror (e.g. -I/usr/local/include). Sat Sep 21 12:29:56 2002 Joe Orton * neon-config.in: Add support for `--la-file' argument, to print location of libtool .la file. Sat Sep 14 12:46:21 2002 Joe Orton * configure.in: Add AC_COPYRIGHT, use AC_MSG_NOTICE for post-configure message, update for modern use of AC_CONFIG_FILES and AC_OUTPUT. Thu Aug 29 23:49:40 2002 Joe Orton Further Win32 updates from Blair Zajac: * config.hw.in: Define HAVE_ERRNO_H; fix non-SSL build. * neon.mak: Fix to build DAV sources if EXPAT_FLAGS is set but not EXPAT_SRC. Sun Aug 25 23:37:59 2002 Joe Orton Win32 updates from Blair Zajac : * neon.mak: Fix expansion of $(LIB32_OBJS) variable that was causing nmake failures. Allow non-DAV build if EXPAT_SRC is not specified. * config.hw.in: Remove hard-coded defines. * INSTALL.win32: Overhaul. Sat Aug 10 10:42:09 2002 Joe Orton * configure.in: Substitue OPENSSL into Makefiles as an absolute path. Fri Aug 9 20:45:01 2002 Joe Orton * configure.in: Update to use modern three-argument AC_INIT and AC_CONFIG_SRCDIR. Pick up version string from .version; thanks to Greg Stein for they `esyscmd' trick. Move NEON_WITH_LIBS earlier. Use AC_HELP_STRING for --disable-webdav. Fri Aug 9 20:41:24 2002 Joe Orton * config.hw.in, neon.mak, INSTALL.win32: Win32 build update from Gerald Richter: add optional NEON_NODAV and OPENSSL_STATIC flags, update locations of includes and libraries. Sun Jun 30 11:08:56 2002 Joe Orton * neon.mak: Enable WIN32_LEAN_AND_MEAN etc, to prevent X509_NAME definition conflicting with OpenSSL headers in recent versions of Platform SDK (Branko Èibej). Thu Jun 13 20:35:43 2002 Joe Orton * configure.in: Call NEON_WITH_LIBS for --with-libs option. Tue Jun 4 13:27:48 2002 Joe Orton * neon.mak: Always build ne_compress.obj; patch from Branko Èibej. Tue Jun 4 09:38:24 2002 Joe Orton * Makefile.in (man1dir, man3dir): Use $(mandir). (Rodney Dawes) Mon Jun 3 20:47:14 2002 Joe Orton * Makefile.in (install-html, install-man): Fix for VPATH builds. Sat May 25 15:01:18 2002 Joe Orton * configure.in: Only enable SSL tests if an `openssl' binary is found in $PATH. Thu May 23 20:31:01 2002 Joe Orton * configure.in: Require a release version of autoconf. Sat May 18 14:43:15 2002 Joe Orton * Makefile.in (docs-man): Use customisation layer. Sat Apr 13 22:34:00 2002 Joe Orton * configure.in, neon-config.in: Pass LDFLAGS and CPPFLAGS setting given to configure through to neon-config --libs/--cflags output. Mon Feb 25 20:53:28 2002 Joe Orton * neon.mak (OPENSSL_FLAGS): Define NEON_SSL not ENABLE_SSL (Branko). Mon Feb 25 20:46:04 2002 Joe Orton * config.hw.in: Add NE_FMT_OFF_T (Dan Berlin, Branko Èibej). Sun Feb 10 20:35:55 2002 Joe Orton * Makefile.in (docs-html): Use XSL customisation layer for the HTML output. Wed Feb 6 00:42:32 2002 Joe Orton * configure.in: Require autoconf 2.52d for AC_C_BIGENDIAN which supports cross-compiling. Sat Jan 26 11:19:39 2002 Joe Orton * configure.in: Define TESTS and HELPERS appropriately for whether DAV, SSL, zlib are supported. Sat Jan 26 11:03:38 2002 Joe Orton * neon.mak: Add OpenSSL, zlib support (Branko Èibej). Sat Jan 26 00:15:29 2002 Joe Orton * neon.dsp, neon.dsw: Removed per advice from Branko. Thu Jan 24 21:02:02 2002 Joe Orton * Makefile.in (check): Run check target in test subdir. (subdirs): Remove redundant subshell. (distclean): Clean harder. Thu Jan 24 20:46:28 2002 Joe Orton * neon.mak: Remove sslcerts.c from build. Sun Jan 20 12:51:27 2002 Joe Orton * configure.in: Create test/common for vpath build. Tue Jan 8 21:35:12 2002 Joe Orton * neon.mak: Rewritten by Branko Èibej . * config.hw.in: Update from Branko Èibej. Thu Jan 3 08:48:00 2002 Joe Orton * Makefile.in (neon-config): Add target. Thu Jan 3 08:47:06 2002 Joe Orton * neon-config.in (libs): Don't print -L/usr/lib or -L/lib. Thu Jan 3 08:43:08 2002 Joe Orton * configure.in: Make neon-config executable in the build tree. Mon Dec 17 22:54:00 2001 Joe Orton * Makefile.in (install-lib, install-headers, install-config): Support DESTDIR; patch from Pawel Golaszewski . Sat Oct 27 12:23:57 2001 Joe Orton * neon-config.in: Add "--support FEATURE" option; the script exits with success if given FEATURE is supported. Sat Oct 6 13:11:57 2001 Joe Orton * configure.in: Require autoconf 2.50. Use AC_HELP_STRING. Sun Sep 30 23:44:56 2001 Joe Orton * configure.in, neon-config.in: Clean up handling of cflags/libs exporting. Sat Sep 29 12:45:25 2001 Joe Orton * Makefile.in: Add Makefile re-generation target, have clean recurse into test too, have check depend on subdirs, distribute ne_compress.h. Tue Sep 25 07:34:32 2001 Mo DeJong * configure.in: Move check for signal.h into LIBNEON_SOURCE_CHECKS. Mon Sep 24 20:28:26 2001 Joe Orton * autogen.sh: Bomb out on errors (set -e). Mon Sep 24 20:20:08 2001 Joe Orton * autogen.sh: Clean up, use libtoolize. * ltmain.sh: Removed from CVS. Mon Sep 24 20:17:18 2001 Joe Orton * configure.in: Use three-argument AC_DEFINE for _GNU_SOURCE (Mo DeJong). Tue Sep 11 23:20:23 2001 Joe Orton * config.hw.in: Define USE_DAV_LOCKS. Mon Aug 13 21:07:28 2001 Joe Orton * neon.mak: Add support for SSL (Peter Boos). Sat Jun 30 12:22:17 2001 Joe Orton * configure.in: Add NEONLIBS to LIBS, so that the depedencies are added to the link line. This means they are picked up as references in the .so, and also listed in the libtool .la file. Tue Jun 12 13:02:58 2001 Joe Orton * config.hw.in: Renamed from config.hw, and have version substituted in when tarball is rolled. Adjust for XML parser changes. (Gerald Richter) Sun Jun 10 16:41:46 2001 Joe Orton * configure.in: Check for pipe() for tests, use NEON_DEBUG. Fri Jun 8 22:57:24 2001 Joe Orton * config.hw: Fixes from Gerald Richter . * neon.mak, INSTALL.win32: New files from Gerald Richter. Thu May 31 00:00:32 2001 Joe Orton * configure.in: Disable shared library build by default. Use NE_DEBUGGING rather than DEBUGGING. Check for 'usleep' for tests. Sun Apr 29 16:41:17 2001 Joe Orton * configure.in: Produce test/Makefile. Wed Mar 14 22:51:28 2001 Joe Orton * Makefile.in (DIST_HEADERS): Add http_auth.h Wed Mar 14 22:45:51 2001 Joe Orton * configure.in: Build bundled directory regardless of --disable-webdav. Sun Feb 25 17:00:40 2001 Joe Orton * configure.in: Rename NEON_IS_BUNDLED to NEON_BUILD_BUNDLED. Sun Feb 25 16:53:28 2001 Joe Orton * configure.in: Set NEON_IS_BUNDLED to "yes". Sat Feb 24 00:09:57 2001 Joe Orton * configure.in: Add --disable-webdav flag to disable WebDAV support. Set NEON_NEED_XML_PARSER=yes if DAV is not disabled. Sun Jan 28 23:10:39 2001 Joe Orton * Makefile.in: Remove neon_config.h from DIST_HEADERS. Sun Jan 28 10:41:40 2001 Joe Orton * configure.in: Don't produce neon_config.h. Tue Jan 23 23:16:25 2001 Joe Orton * configure.in: Moved version defns into NEON_VERSIONS macros. Produce src/neon_config.h. Tue Jan 16 20:16:47 2001 Joe Orton * configure.in: Bumped version to 0.10.1. Mon Jan 15 22:59:47 2001 Joe Orton * configure.in: Bumped version to 0.10.0. Sun Jan 14 23:55:47 2001 Joe Orton * Makefile.in (distclean): Don't remove neon_config.h. (install): Depend on subdirs. Wed Jan 10 22:46:53 2001 Joe Orton * configure.in: Use NEON_LINK_FLAGS to pass through -version-info and interface version flags. Add -I${top_builddir} to CFLAGS. Remove NEONOBJS declaration, let NEON_LIBTOOL_BUILD do it. Wed Dec 20 00:11:56 2000 Joe Orton * configure.in: Bumped version to 0.9.1, interface version to 9:1:0. Tue Dec 19 22:15:45 2000 Joe Orton * Makefile.in: Build using recursive make into src directory. Add VPATH support. (Mo DeJong ) Tue Dec 19 22:13:40 2000 Joe Orton * configure.in: Build using new src/Makefile.in. Sun Dec 17 19:53:36 2000 Joe Orton * config.sub, config.guess, ltconfig, ltmain.sh: Update to libtool 1.3.5 versions. Sun Dec 17 18:43:00 2000 Joe Orton * Makefile.in: Remove all traces of example programs. Fix uritest. Thu Dec 14 21:47:48 2000 Joe Orton * configure.in: Bumped version to 0.8.0, interface version to 8:0:0. Thu Dec 14 20:57:49 2000 Joe Orton * configure.in: Removed configuration of examples. Wed Dec 13 20:14:53 2000 Joe Orton * config.hw: Added for Windows. Sun Nov 26 09:52:29 2000 Joe Orton * example/: Removed directory (now in separate neon-examples package). Tue Sep 12 10:33:50 2000 Joe Orton * Makefile.in: Remove sitecopy bits which somehow got left in there. Tue Sep 12 00:41:49 2000 Joe Orton * configure.in: Bumped version to 0.7.3, interface version to 7:1:1. Tue Sep 12 00:39:49 2000 Joe Orton * Makefile.in (distclean): New target. Thu Sep 7 00:14:15 2000 Joe Orton * configure.in: Bumped version to 0.7.2, interface version to 7:0:1. Thu Sep 7 00:10:54 2000 Joe Orton * Makefile.in: Added 'all' target (patch by Greg Stein ). Sun Sep 3 10:32:09 2000 Joe Orton * Makefile.in (SHELL): Added definition. Changed xalloc.h to ne_alloc.h in DIST_HEADERS. Thanks to Eric Mumpower . Tue Aug 15 21:53:37 2000 Joe Orton * configure.in: Bumped version to 0.7.1, interface version to 6:1:1. Mon Aug 14 09:28:47 2000 Joe Orton * configure.in: Bumped version to 0.7.0, interface version to 6:0:0. Sun Aug 13 15:59:58 2000 Joe Orton * configure.in: Bumped version to 0.6.1, interface version to 5:1:1. Sat Aug 12 17:10:09 2000 Joe Orton * configure.in: Bumped version to 0.6.0, interface version to 5:0:1. Sat Aug 12 17:08:54 2000 Joe Orton * configure.in: Add --with-extra-includes and --with-extra-libs configure parameters Sat Aug 12 17:07:22 2000 Joe Orton * example/nget.c (redirect_notify): New function. (main): Support automatic redirects. Sat Aug 12 16:53:50 2000 Joe Orton * Makefile.in: Build http_redirect.lo. Sat Aug 12 14:43:28 2000 Joe Orton * example/nget.c (pretty_progress_bar): Use 'off_t' not size_t arguments. Sat Aug 12 02:11:05 2000 Joe Orton * configure.in: Bumped interface version to 4:1:0, version to 0.5.1. Fri Aug 11 17:18:19 2000 Joe Orton * configure.in: Bumped interface version to 4:0:0, version to 0.5.0. Fri Jul 28 13:35:06 2000 Joe Orton * configure.in: Bumped interface version to 3:2:1, version to 0.4.2. Fri Jul 28 11:26:18 2000 Joe Orton * configure.in: Bumped interface version to 3:1:1, version to 0.4.1. Fri Jul 28 11:25:05 2000 Joe Orton * example/nget.c: Include nsocket.h not socket.h. Fri Jul 28 10:31:50 2000 Joe Orton * configure.in: Bumped interface version to 3:0:1. Bumped version to 0.4.0. Thu Jul 27 22:01:11 2000 Joe Orton * Makefile.in: Install nsocket.h not socket.h. Thu Jul 27 21:59:45 2000 Joe Orton * configure.in: Tell neon-config that header files are in $(includedir)/neon. Use NEON_WARNINGS macro for compiler warnings. Thu Jul 20 19:20:23 2000 Joe Orton * Makefile.in: Install headers into $(includedir)/neon rather libneon. Add dav_locks.h, xalloc.h, neon_md5.h, neon_i18n.h to list of headers installed. Mon Jul 17 09:11:46 2000 Joe Orton * configure.in: Bumped version to 0.3.1, interface version to 2:0:1. Sun Jul 16 18:47:47 2000 Joe Orton * configure.in: Bumped version to 0.3.0. Sun Jul 16 17:17:51 2000 Joe Orton * Makefile.in (nbrowse, nserver, debug-nserver, debug-nbrowse): Added targets. Sun Jul 16 17:15:08 2000 Joe Orton * example/nget.c (main): Updated for new SSL interface. Sun Jul 16 16:51:16 2000 Joe Orton * configure.in: Added --enable-gnome-examples switch. Sun Jun 18 12:56:00 2000 Joe Orton * example/nserver.c: New file. Sun Jun 18 12:54:43 2000 Joe Orton * example/nbrowse.glade: Added Glade project file. Sun Jun 18 12:51:56 2000 Joe Orton * example/nbrowse/main.c, example/nbrowse/interface.c, example/nbrowse/callbacks.c, example/nbrowse/support.c: Added files from Glade. Thu May 25 01:04:11 2000 Joe Orton * configure.in: Bumped NEON_INTERFACE_VERSION to 1:0:0. With --enable-warnings, only include -Wstrict-prototypes if we're not building with SSL support. Thu May 25 01:01:01 2000 Joe Orton * Makefile.in: Pass --quiet to libtool to make it a bit less chatty. (again, debug-nget): New target. Tue May 23 17:14:43 2000 Joe Orton * example/nget.c (main): Use http_session_create/destroy. Quit if http_set_secure fails. Tue May 23 15:35:16 2000 Joe Orton * example/nget.c (parse_args, conn_notify): New functions. (main): Call neon_debug_init, call sock_init. Register conn_notify. If scheme is "https", use a secure connection. Tue May 23 14:14:05 2000 Joe Orton * example/nget.c (parse_args): New function. (main): Sun May 21 23:54:48 2000 Joe Orton * neon-config.in: Use @NEON_LIBDIR@ not -L@libdir@ in --libs output. Sun May 21 23:53:41 2000 Joe Orton * configure.in: Call NEON_SSL macro, add LDFLAGS to NEON_LIBDIR to pick up OpenSSL library location. Sat May 20 21:47:54 2000 Joe Orton * example/nget.c: Include neon_config.h for NEON_VERSION declaration. Sat May 20 21:47:29 2000 Joe Orton * configure.in: Added --enable-warnings parameter. Sat May 20 21:46:54 2000 Joe Orton * Makefile.in (libneon.la): Fixed passing interface version. Sun May 14 00:40:38 2000 Joe Orton * configure.in (NEON_VERSION): Bumped to 0.2.0. Sun May 14 00:28:33 2000 Joe Orton * Makefile.in (install-config): New goal. Sun May 14 00:26:00 2000 Joe Orton * configure.in: Added --enable-debugging argument. Added NEON_LIBDIR, NEON_INCLUDEDIR, NEON_LIBS, NEON_CFLAGS for neon-config. Produce neon-config from neon-config.in. * neon-config.in: New file, modified from libxml. Sat May 13 23:16:46 2000 Joe Orton * configure.in: Builed static and shared libraries by default. Sat May 13 16:32:15 2000 Joe Orton * config.sub, config.guess, ltmain.sh, ltconfig: Updated from libtool-1.3.4. Sat May 13 13:45:56 2000 Joe Orton * example/nget.c: Don't include neon.h. Sat May 13 13:44:22 2000 Joe Orton * Makefile.in: Use libtool. (install-examples): New goal. * configure.in: Define NEON_VERSION. Thu May 11 14:14:00 2000 Joe Orton * example/nget.c (main): Set user-agent. Thu May 11 14:10:24 2000 Joe Orton * ltconfig, ltmain.sh, config.sub, config.guess: Added libtool support files. * configure.in: Call AC_PROG_LIBTOOL and AC_DISABLE_STATIC. * .cvsignore: Added libtool. Wed May 10 19:17:24 2000 Joe Orton * configure.in: Print configuration message, check for ranlib. Wed May 10 19:16:43 2000 Joe Orton * example/nget.c (main): Allow output to stdout. Wed May 10 19:15:56 2000 Joe Orton * Makefile.in: Added shared, install* targets Wed May 10 17:47:30 2000 Joe Orton * example/nget.c (pretty_progress_bar): New function, from cadaver. Wed May 10 14:42:45 2000 Joe Orton * example/nget.c: New file. Wed May 10 14:41:39 2000 Joe Orton * configure.in, Makefile.in, .cvsignore, install-sh: New files. tla-1.3.5+dfsg/src/libneon/configure0000755000175000017500000204632110457621776016110 0ustar useruser#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.59 for neon 0.24.7. # # Report bugs to . # # Copyright (C) 2003 Free Software Foundation, Inc. # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. # # Copyright (c) 2000, 2001, 2002 Joe Orton # This configure script may be copied, distributed and modified under the # terms of the GNU Library General Public license; see COPYING for more details ## --------------------- ## ## M4sh Initialization. ## ## --------------------- ## # Be Bourne compatible if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then set -o posix fi DUALCASE=1; export DUALCASE # for MKS sh # Support unset when possible. if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then as_unset=unset else as_unset=false fi # Work around bugs in pre-3.0 UWIN ksh. $as_unset ENV MAIL MAILPATH PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. for as_var in \ LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ LC_TELEPHONE LC_TIME do if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then eval $as_var=C; export $as_var else $as_unset $as_var fi done # Required to use basename. if expr a : '\(a\)' >/dev/null 2>&1; then as_expr=expr else as_expr=false fi if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi # Name of the executable. as_me=`$as_basename "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)$' \| \ . : '\(.\)' 2>/dev/null || echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; } /^X\/\(\/\/\)$/{ s//\1/; q; } /^X\/\(\/\).*/{ s//\1/; q; } s/.*/./; q'` # PATH needs CR, and LINENO needs CR and PATH. # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi as_lineno_1=$LINENO as_lineno_2=$LINENO as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` test "x$as_lineno_1" != "x$as_lineno_2" && test "x$as_lineno_3" = "x$as_lineno_2" || { # Find who we are. Look in the path if we contain no path at all # relative or not. case $0 in *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then { echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2 { (exit 1); exit 1; }; } fi case $CONFIG_SHELL in '') as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for as_base in sh bash ksh sh5; do case $as_dir in /*) if ("$as_dir/$as_base" -c ' as_lineno_1=$LINENO as_lineno_2=$LINENO as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` test "x$as_lineno_1" != "x$as_lineno_2" && test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } CONFIG_SHELL=$as_dir/$as_base export CONFIG_SHELL exec "$CONFIG_SHELL" "$0" ${1+"$@"} fi;; esac done done ;; esac # Create $as_me.lineno as a copy of $as_myself, but with $LINENO # uniformly replaced by the line number. The first 'sed' inserts a # line-number line before each line; the second 'sed' does the real # work. The second script uses 'N' to pair each line-number line # with the numbered line, and appends trailing '-' during # substitution so that $LINENO is not a special case at line end. # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) sed '=' <$as_myself | sed ' N s,$,-, : loop s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, t loop s,-$,, s,^['$as_cr_digits']*\n,, ' >$as_me.lineno && chmod +x $as_me.lineno || { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 { (exit 1); exit 1; }; } # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensible to this). . ./$as_me.lineno # Exit status is that of the last command. exit } case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in *c*,-n*) ECHO_N= ECHO_C=' ' ECHO_T=' ' ;; *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; *) ECHO_N= ECHO_C='\c' ECHO_T= ;; esac if expr a : '\(a\)' >/dev/null 2>&1; then as_expr=expr else as_expr=false fi rm -f conf$$ conf$$.exe conf$$.file echo >conf$$.file if ln -s conf$$.file conf$$ 2>/dev/null; then # We could just check for DJGPP; but this test a) works b) is more generic # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). if test -f conf$$.exe; then # Don't use ln at all; we don't have any links as_ln_s='cp -p' else as_ln_s='ln -s' fi elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.file if mkdir -p . 2>/dev/null; then as_mkdir_p=: else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_executable_p="test -f" # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" # IFS # We need space, tab and new line, in precisely that order. as_nl=' ' IFS=" $as_nl" # CDPATH. $as_unset CDPATH # Check that we are running under the correct shell. SHELL=${CONFIG_SHELL-/bin/sh} case X$ECHO in X*--fallback-echo) # Remove one level of quotation (which was required for Make). ECHO=`echo "$ECHO" | sed 's,\\\\\$\\$0,'$0','` ;; esac echo=${ECHO-echo} if test "X$1" = X--no-reexec; then # Discard the --no-reexec flag, and continue. shift elif test "X$1" = X--fallback-echo; then # Avoid inline document here, it may be left over : elif test "X`($echo '\t') 2>/dev/null`" = 'X\t' ; then # Yippee, $echo works! : else # Restart under the correct shell. exec $SHELL "$0" --no-reexec ${1+"$@"} fi if test "X$1" = X--fallback-echo; then # used as fallback echo shift cat </dev/null && echo_test_string="`eval $cmd`" && (test "X$echo_test_string" = "X$echo_test_string") 2>/dev/null then break fi done fi if test "X`($echo '\t') 2>/dev/null`" = 'X\t' && echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then : else # The Solaris, AIX, and Digital Unix default echo programs unquote # backslashes. This makes it impossible to quote backslashes using # echo "$something" | sed 's/\\/\\\\/g' # # So, first we look for a working echo in the user's PATH. lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for dir in $PATH /usr/ucb; do IFS="$lt_save_ifs" if (test -f $dir/echo || test -f $dir/echo$ac_exeext) && test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' && echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then echo="$dir/echo" break fi done IFS="$lt_save_ifs" if test "X$echo" = Xecho; then # We didn't find a better echo, so look for alternatives. if test "X`(print -r '\t') 2>/dev/null`" = 'X\t' && echo_testing_string=`(print -r "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then # This shell has a builtin print -r that does the trick. echo='print -r' elif (test -f /bin/ksh || test -f /bin/ksh$ac_exeext) && test "X$CONFIG_SHELL" != X/bin/ksh; then # If we have ksh, try running configure again with it. ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh} export ORIGINAL_CONFIG_SHELL CONFIG_SHELL=/bin/ksh export CONFIG_SHELL exec $CONFIG_SHELL "$0" --no-reexec ${1+"$@"} else # Try using printf. echo='printf %s\n' if test "X`($echo '\t') 2>/dev/null`" = 'X\t' && echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then # Cool, printf works : elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` && test "X$echo_testing_string" = 'X\t' && echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL export CONFIG_SHELL SHELL="$CONFIG_SHELL" export SHELL echo="$CONFIG_SHELL $0 --fallback-echo" elif echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` && test "X$echo_testing_string" = 'X\t' && echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then echo="$CONFIG_SHELL $0 --fallback-echo" else # maybe with a smaller string... prev=: for cmd in 'echo test' 'sed 2q "$0"' 'sed 10q "$0"' 'sed 20q "$0"' 'sed 50q "$0"'; do if (test "X$echo_test_string" = "X`eval $cmd`") 2>/dev/null then break fi prev="$cmd" done if test "$prev" != 'sed 50q "$0"'; then echo_test_string=`eval $prev` export echo_test_string exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "$0" ${1+"$@"} else # Oops. We lost completely, so just stick with echo. echo=echo fi fi fi fi fi fi # Copy echo and quote the copy suitably for passing to libtool from # the Makefile, instead of quoting the original, which is used later. ECHO=$echo if test "X$ECHO" = "X$CONFIG_SHELL $0 --fallback-echo"; then ECHO="$CONFIG_SHELL \\\$\$0 --fallback-echo" fi # Name of the host. # hostname on some systems (SVR3.2, Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` exec 6>&1 # # Initializations. # ac_default_prefix=/usr/local ac_config_libobj_dir=. cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= SHELL=${CONFIG_SHELL-/bin/sh} # Maximum number of lines to put in a shell here document. # This variable seems obsolete. It should probably be removed, and # only ac_max_sed_lines should be used. : ${ac_max_here_lines=38} # Identity of this package. PACKAGE_NAME='neon' PACKAGE_TARNAME='neon' PACKAGE_VERSION='0.24.7' PACKAGE_STRING='neon 0.24.7' PACKAGE_BUGREPORT='neon@webdav.org' ac_unique_file="src/ne_request.c" # Factoring default headers for most tests. ac_includes_default="\ #include #if HAVE_SYS_TYPES_H # include #endif #if HAVE_SYS_STAT_H # include #endif #if STDC_HEADERS # include # include #else # if HAVE_STDLIB_H # include # endif #endif #if HAVE_STRING_H # if !STDC_HEADERS && HAVE_MEMORY_H # include # endif # include #endif #if HAVE_STRINGS_H # include #endif #if HAVE_INTTYPES_H # include #else # if HAVE_STDINT_H # include # endif #endif #if HAVE_UNISTD_H # include #endif" ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS user_LDFLAGS ALLOW_INSTALL INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA build build_cpu build_vendor build_os host host_cpu host_vendor host_os CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT EGREP LN_S ECHO AR ac_ct_AR RANLIB ac_ct_RANLIB STRIP ac_ct_STRIP CPP LIBTOOL top_builddir NEON_BUILD_BUNDLED SET_MAKE ac_pt_AR ac_pt_RANLIB LIBOBJS NEON_SUPPORTS_ZLIB PKG_CONFIG NEON_SUPPORTS_SSL KRB5_CONFIG NEON_CFLAGS NEON_LIBS NEON_LTLIBS NEON_TARGET NEON_OBJEXT NEONOBJS NEON_EXTRAOBJS NEON_LINK_FLAGS NEON_SUPPORTS_DAV NEON_VERSION OPENSSL HELPERS TESTS LTLIBOBJS' ac_subst_files='' # Initialize some variables set by options. ac_init_help= ac_init_version=false # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datadir='${prefix}/share' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' libdir='${exec_prefix}/lib' includedir='${prefix}/include' oldincludedir='/usr/include' infodir='${prefix}/info' mandir='${prefix}/man' ac_prev= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval "$ac_prev=\$ac_option" ac_prev= continue fi ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'` # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_option in -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad | --data | --dat | --da) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \ | --da=*) datadir=$ac_optarg ;; -disable-* | --disable-*) ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid feature name: $ac_feature" >&2 { (exit 1); exit 1; }; } ac_feature=`echo $ac_feature | sed 's/-/_/g'` eval "enable_$ac_feature=no" ;; -enable-* | --enable-*) ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid feature name: $ac_feature" >&2 { (exit 1); exit 1; }; } ac_feature=`echo $ac_feature | sed 's/-/_/g'` case $ac_option in *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; *) ac_optarg=yes ;; esac eval "enable_$ac_feature='$ac_optarg'" ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst \ | --locals | --local | --loca | --loc | --lo) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* \ | --locals=* | --local=* | --loca=* | --loc=* | --lo=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid package name: $ac_package" >&2 { (exit 1); exit 1; }; } ac_package=`echo $ac_package| sed 's/-/_/g'` case $ac_option in *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; *) ac_optarg=yes ;; esac eval "with_$ac_package='$ac_optarg'" ;; -without-* | --without-*) ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid package name: $ac_package" >&2 { (exit 1); exit 1; }; } ac_package=`echo $ac_package | sed 's/-/_/g'` eval "with_$ac_package=no" ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) { echo "$as_me: error: unrecognized option: $ac_option Try \`$0 --help' for more information." >&2 { (exit 1); exit 1; }; } ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid variable name: $ac_envvar" >&2 { (exit 1); exit 1; }; } ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` eval "$ac_envvar='$ac_optarg'" export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` { echo "$as_me: error: missing argument to $ac_option" >&2 { (exit 1); exit 1; }; } fi # Be sure to have absolute paths. for ac_var in exec_prefix prefix do eval ac_val=$`echo $ac_var` case $ac_val in [\\/$]* | ?:[\\/]* | NONE | '' ) ;; *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 { (exit 1); exit 1; }; };; esac done # Be sure to have absolute paths. for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \ localstatedir libdir includedir oldincludedir infodir mandir do eval ac_val=$`echo $ac_var` case $ac_val in [\\/$]* | ?:[\\/]* ) ;; *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 { (exit 1); exit 1; }; };; esac done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. If a cross compiler is detected then cross compile mode will be used." >&2 elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then its parent. ac_confdir=`(dirname "$0") 2>/dev/null || $as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$0" : 'X\(//\)[^/]' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$0" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` srcdir=$ac_confdir if test ! -r $srcdir/$ac_unique_file; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r $srcdir/$ac_unique_file; then if test "$ac_srcdir_defaulted" = yes; then { echo "$as_me: error: cannot find sources ($ac_unique_file) in $ac_confdir or .." >&2 { (exit 1); exit 1; }; } else { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2 { (exit 1); exit 1; }; } fi fi (cd $srcdir && test -r ./$ac_unique_file) 2>/dev/null || { echo "$as_me: error: sources are in $srcdir, but \`cd $srcdir' does not work" >&2 { (exit 1); exit 1; }; } srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'` ac_env_build_alias_set=${build_alias+set} ac_env_build_alias_value=$build_alias ac_cv_env_build_alias_set=${build_alias+set} ac_cv_env_build_alias_value=$build_alias ac_env_host_alias_set=${host_alias+set} ac_env_host_alias_value=$host_alias ac_cv_env_host_alias_set=${host_alias+set} ac_cv_env_host_alias_value=$host_alias ac_env_target_alias_set=${target_alias+set} ac_env_target_alias_value=$target_alias ac_cv_env_target_alias_set=${target_alias+set} ac_cv_env_target_alias_value=$target_alias ac_env_CC_set=${CC+set} ac_env_CC_value=$CC ac_cv_env_CC_set=${CC+set} ac_cv_env_CC_value=$CC ac_env_CFLAGS_set=${CFLAGS+set} ac_env_CFLAGS_value=$CFLAGS ac_cv_env_CFLAGS_set=${CFLAGS+set} ac_cv_env_CFLAGS_value=$CFLAGS ac_env_LDFLAGS_set=${LDFLAGS+set} ac_env_LDFLAGS_value=$LDFLAGS ac_cv_env_LDFLAGS_set=${LDFLAGS+set} ac_cv_env_LDFLAGS_value=$LDFLAGS ac_env_CPPFLAGS_set=${CPPFLAGS+set} ac_env_CPPFLAGS_value=$CPPFLAGS ac_cv_env_CPPFLAGS_set=${CPPFLAGS+set} ac_cv_env_CPPFLAGS_value=$CPPFLAGS ac_env_CPP_set=${CPP+set} ac_env_CPP_value=$CPP ac_cv_env_CPP_set=${CPP+set} ac_cv_env_CPP_value=$CPP # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures neon 0.24.7 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] _ACEOF cat <<_ACEOF Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --datadir=DIR read-only architecture-independent data [PREFIX/share] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --infodir=DIR info documentation [PREFIX/info] --mandir=DIR man documentation [PREFIX/man] _ACEOF cat <<\_ACEOF System types: --build=BUILD configure for building on BUILD [guessed] --host=HOST cross-compile to build programs to run on HOST [BUILD] _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of neon 0.24.7:";; esac cat <<\_ACEOF Optional Features: --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-shared[=PKGS] build shared libraries [default=no] --enable-static[=PKGS] build static libraries [default=yes] --enable-fast-install[=PKGS] optimize for fast installation [default=yes] --disable-libtool-lock avoid locking (might break parallel builds) --disable-webdav disable WebDAV support --disable-debug disable runtime debugging messages --enable-warnings enable compiler warnings --enable-memleak for test builds only: enable memory leak checking Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-libs=DIR[:DIR2...] look for support libraries in DIR/{bin,lib,include} --with-gnu-ld assume the C compiler uses GNU ld [default=no] --with-pic try to use only PIC/non-PIC objects [default=use both] --without-zlib disable zlib support --with-ssl enable OpenSSL support --with-egd[=PATH] enable EGD support [using EGD socket at PATH] --with-socks use SOCKSv5 library Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory CPPFLAGS C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory CPP C preprocessor Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to . _ACEOF fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. ac_popdir=`pwd` for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d $ac_dir || continue ac_builddir=. if test "$ac_dir" != .; then ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` # A "../" for each directory in $ac_dir_suffix. ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` else ac_dir_suffix= ac_top_builddir= fi case $srcdir in .) # No --srcdir option. We are building in place. ac_srcdir=. if test -z "$ac_top_builddir"; then ac_top_srcdir=. else ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` fi ;; [\\/]* | ?:[\\/]* ) # Absolute path. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ;; *) # Relative path. ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_builddir$srcdir ;; esac # Do not use `cd foo && pwd` to compute absolute paths, because # the directories may not exist. case `pwd` in .) ac_abs_builddir="$ac_dir";; *) case "$ac_dir" in .) ac_abs_builddir=`pwd`;; [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; *) ac_abs_builddir=`pwd`/"$ac_dir";; esac;; esac case $ac_abs_builddir in .) ac_abs_top_builddir=${ac_top_builddir}.;; *) case ${ac_top_builddir}. in .) ac_abs_top_builddir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; esac;; esac case $ac_abs_builddir in .) ac_abs_srcdir=$ac_srcdir;; *) case $ac_srcdir in .) ac_abs_srcdir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; esac;; esac case $ac_abs_builddir in .) ac_abs_top_srcdir=$ac_top_srcdir;; *) case $ac_top_srcdir in .) ac_abs_top_srcdir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; esac;; esac cd $ac_dir # Check for guested configure; otherwise get Cygnus style configure. if test -f $ac_srcdir/configure.gnu; then echo $SHELL $ac_srcdir/configure.gnu --help=recursive elif test -f $ac_srcdir/configure; then echo $SHELL $ac_srcdir/configure --help=recursive elif test -f $ac_srcdir/configure.ac || test -f $ac_srcdir/configure.in; then echo $ac_configure --help else echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi cd $ac_popdir done fi test -n "$ac_init_help" && exit 0 if $ac_init_version; then cat <<\_ACEOF neon configure 0.24.7 generated by GNU Autoconf 2.59 Copyright (C) 2003 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. Copyright (c) 2000, 2001, 2002 Joe Orton This configure script may be copied, distributed and modified under the terms of the GNU Library General Public license; see COPYING for more details _ACEOF exit 0 fi exec 5>config.log cat >&5 <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by neon $as_me 0.24.7, which was generated by GNU Autoconf 2.59. Invocation command line was $ $0 $@ _ACEOF { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` hostinfo = `(hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. echo "PATH: $as_dir" done } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_sep= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;; 2) ac_configure_args1="$ac_configure_args1 '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'" # Get rid of the leading space. ac_sep=" " ;; esac done done $as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; } $as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; } # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Be sure not to use single quotes in there, as some shells, # such as our DU 5.0 friend, will then `close' the trap. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo cat <<\_ASBOX ## ---------------- ## ## Cache variables. ## ## ---------------- ## _ASBOX echo # The following way of writing the cache mishandles newlines in values, { (set) 2>&1 | case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in *ac_space=\ *) sed -n \ "s/'"'"'/'"'"'\\\\'"'"''"'"'/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p" ;; *) sed -n \ "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" ;; esac; } echo cat <<\_ASBOX ## ----------------- ## ## Output variables. ## ## ----------------- ## _ASBOX echo for ac_var in $ac_subst_vars do eval ac_val=$`echo $ac_var` echo "$ac_var='"'"'$ac_val'"'"'" done | sort echo if test -n "$ac_subst_files"; then cat <<\_ASBOX ## ------------- ## ## Output files. ## ## ------------- ## _ASBOX echo for ac_var in $ac_subst_files do eval ac_val=$`echo $ac_var` echo "$ac_var='"'"'$ac_val'"'"'" done | sort echo fi if test -s confdefs.h; then cat <<\_ASBOX ## ----------- ## ## confdefs.h. ## ## ----------- ## _ASBOX echo sed "/^$/d" confdefs.h | sort echo fi test "$ac_signal" != 0 && echo "$as_me: caught signal $ac_signal" echo "$as_me: exit $exit_status" } >&5 rm -f core *.core && rm -rf conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -rf conftest* confdefs.h # AIX cpp loses on an empty file, so make sure it contains at least a newline. echo >confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer explicitly selected file to automatically selected ones. if test -z "$CONFIG_SITE"; then if test "x$prefix" != xNONE; then CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site" else CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" fi fi for ac_site_file in $CONFIG_SITE; do if test -r "$ac_site_file"; then { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5 echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special # files actually), so we avoid doing that. if test -f "$cache_file"; then { echo "$as_me:$LINENO: loading cache $cache_file" >&5 echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . $cache_file;; *) . ./$cache_file;; esac fi else { echo "$as_me:$LINENO: creating cache $cache_file" >&5 echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in `(set) 2>&1 | sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val="\$ac_cv_env_${ac_var}_value" eval ac_new_val="\$ac_env_${ac_var}_value" case $ac_old_set,$ac_new_set in set,) { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5 echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then { echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5 echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} { echo "$as_me:$LINENO: former value: $ac_old_val" >&5 echo "$as_me: former value: $ac_old_val" >&2;} { echo "$as_me:$LINENO: current value: $ac_new_val" >&5 echo "$as_me: current value: $ac_new_val" >&2;} ac_cache_corrupted=: fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) ac_configure_args="$ac_configure_args '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5 echo "$as_me: error: changes in the environment can compromise the build" >&2;} { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5 echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;} { (exit 1); exit 1; }; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_config_headers="$ac_config_headers config.h" # Check whether --with-libs or --without-libs was given. if test "${with_libs+set}" = set; then withval="$with_libs" case $with_libs in yes|no) { { echo "$as_me:$LINENO: error: --with-libs must be passed a directory argument" >&5 echo "$as_me: error: --with-libs must be passed a directory argument" >&2;} { (exit 1); exit 1; }; } ;; *) ne_save_IFS=$IFS; IFS=: for dir in $with_libs; do ne_add_CPPFLAGS="$ne_add_CPPFLAGS -I${dir}/include" ne_add_LDFLAGS="$ne_add_LDFLAGS -L${dir}/lib" ne_add_PATH="${ne_add_PATH}${dir}/bin:" done IFS=$ne_save_IFS CPPFLAGS="${ne_add_CPPFLAGS} $CPPFLAGS" LDFLAGS="${ne_add_LDFLAGS} $LDFLAGS" PATH=${ne_add_PATH}$PATH ;; esac fi; # Pass through initial LDFLAGS verbatim to neon-config, so that extra # libraries which are detected (e.g. OpenSSL) can still be found when # building using the --libs output of neon-config. user_LDFLAGS=$LDFLAGS # By default, allow 'make install' to work. ALLOW_INSTALL=yes # Always defined cat >>confdefs.h <<\_ACEOF #define _GNU_SOURCE 1 _ACEOF # Defined when neon is built as library cat >>confdefs.h <<\_ACEOF #define NEON_IS_LIBRARY 1 _ACEOF ac_aux_dir= for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do if test -f $ac_dir/install-sh; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f $ac_dir/install.sh; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break elif test -f $ac_dir/shtool; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/shtool install -c" break fi done if test -z "$ac_aux_dir"; then { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&5 echo "$as_me: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&2;} { (exit 1); exit 1; }; } fi ac_config_guess="$SHELL $ac_aux_dir/config.guess" ac_config_sub="$SHELL $ac_aux_dir/config.sub" ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure. # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6 if test -z "$INSTALL"; then if test "${ac_cv_path_install+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. # Account for people who put trailing slashes in PATH elements. case $as_dir/ in ./ | .// | /cC/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi done done ;; esac done fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. We don't cache a # path for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the path is relative. INSTALL=$ac_install_sh fi fi echo "$as_me:$LINENO: result: $INSTALL" >&5 echo "${ECHO_T}$INSTALL" >&6 # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' # Check whether --enable-shared or --disable-shared was given. if test "${enable_shared+set}" = set; then enableval="$enable_shared" p=${PACKAGE-default} case $enableval in yes) enable_shared=yes ;; no) enable_shared=no ;; *) enable_shared=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_shared=yes fi done IFS="$lt_save_ifs" ;; esac else enable_shared=no fi; # Check whether --enable-static or --disable-static was given. if test "${enable_static+set}" = set; then enableval="$enable_static" p=${PACKAGE-default} case $enableval in yes) enable_static=yes ;; no) enable_static=no ;; *) enable_static=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_static=yes fi done IFS="$lt_save_ifs" ;; esac else enable_static=yes fi; # Check whether --enable-fast-install or --disable-fast-install was given. if test "${enable_fast_install+set}" = set; then enableval="$enable_fast_install" p=${PACKAGE-default} case $enableval in yes) enable_fast_install=yes ;; no) enable_fast_install=no ;; *) enable_fast_install=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_fast_install=yes fi done IFS="$lt_save_ifs" ;; esac else enable_fast_install=yes fi; # Make sure we can run config.sub. $ac_config_sub sun4 >/dev/null 2>&1 || { { echo "$as_me:$LINENO: error: cannot run $ac_config_sub" >&5 echo "$as_me: error: cannot run $ac_config_sub" >&2;} { (exit 1); exit 1; }; } echo "$as_me:$LINENO: checking build system type" >&5 echo $ECHO_N "checking build system type... $ECHO_C" >&6 if test "${ac_cv_build+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_build_alias=$build_alias test -z "$ac_cv_build_alias" && ac_cv_build_alias=`$ac_config_guess` test -z "$ac_cv_build_alias" && { { echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5 echo "$as_me: error: cannot guess build type; you must specify one" >&2;} { (exit 1); exit 1; }; } ac_cv_build=`$ac_config_sub $ac_cv_build_alias` || { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_build_alias failed" >&5 echo "$as_me: error: $ac_config_sub $ac_cv_build_alias failed" >&2;} { (exit 1); exit 1; }; } fi echo "$as_me:$LINENO: result: $ac_cv_build" >&5 echo "${ECHO_T}$ac_cv_build" >&6 build=$ac_cv_build build_cpu=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` build_vendor=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` build_os=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` echo "$as_me:$LINENO: checking host system type" >&5 echo $ECHO_N "checking host system type... $ECHO_C" >&6 if test "${ac_cv_host+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_host_alias=$host_alias test -z "$ac_cv_host_alias" && ac_cv_host_alias=$ac_cv_build_alias ac_cv_host=`$ac_config_sub $ac_cv_host_alias` || { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_host_alias failed" >&5 echo "$as_me: error: $ac_config_sub $ac_cv_host_alias failed" >&2;} { (exit 1); exit 1; }; } fi echo "$as_me:$LINENO: result: $ac_cv_host" >&5 echo "${ECHO_T}$ac_cv_host" >&6 host=$ac_cv_host host_cpu=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` host_vendor=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` host_os=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 echo "${ECHO_T}$ac_ct_CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi CC=$ac_ct_CC else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="cc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 echo "${ECHO_T}$ac_ct_CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi CC=$ac_ct_CC else CC="$ac_cv_prog_CC" fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 echo "${ECHO_T}$ac_ct_CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$ac_ct_CC" && break done CC=$ac_ct_CC fi fi test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH See \`config.log' for more details." >&5 echo "$as_me: error: no acceptable C compiler found in \$PATH See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } # Provide some information about the compiler. echo "$as_me:$LINENO:" \ "checking for C compiler version" >&5 ac_compiler=`set X $ac_compile; echo $2` { (eval echo "$as_me:$LINENO: \"$ac_compiler --version &5\"") >&5 (eval $ac_compiler --version &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (eval echo "$as_me:$LINENO: \"$ac_compiler -v &5\"") >&5 (eval $ac_compiler -v &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (eval echo "$as_me:$LINENO: \"$ac_compiler -V &5\"") >&5 (eval $ac_compiler -V &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. echo "$as_me:$LINENO: checking for C compiler default output file name" >&5 echo $ECHO_N "checking for C compiler default output file name... $ECHO_C" >&6 ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` if { (eval echo "$as_me:$LINENO: \"$ac_link_default\"") >&5 (eval $ac_link_default) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then # Find the output, starting from the most likely. This scheme is # not robust to junk in `.', hence go to wildcards (a.*) only as a last # resort. # Be careful to initialize this variable, since it used to be cached. # Otherwise an old cache value of `no' led to `EXEEXT = no' in a Makefile. ac_cv_exeext= # b.out is created by i960 compilers. for ac_file in a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) ;; conftest.$ac_ext ) # This is the source file. ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` # FIXME: I believe we export ac_cv_exeext for Libtool, # but it would be cool to find out if it's true. Does anybody # maintain Libtool? --akim. export ac_cv_exeext break;; * ) break;; esac done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { echo "$as_me:$LINENO: error: C compiler cannot create executables See \`config.log' for more details." >&5 echo "$as_me: error: C compiler cannot create executables See \`config.log' for more details." >&2;} { (exit 77); exit 77; }; } fi ac_exeext=$ac_cv_exeext echo "$as_me:$LINENO: result: $ac_file" >&5 echo "${ECHO_T}$ac_file" >&6 # Check the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. echo "$as_me:$LINENO: checking whether the C compiler works" >&5 echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6 # FIXME: These cross compiler hacks should be removed for Autoconf 3.0 # If not cross compiling, check that we can run a simple program. if test "$cross_compiling" != yes; then if { ac_try='./$ac_file' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { echo "$as_me:$LINENO: error: cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details." >&5 echo "$as_me: error: cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi fi fi echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 rm -f a.out a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save # Check the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. echo "$as_me:$LINENO: checking whether we are cross compiling" >&5 echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6 echo "$as_me:$LINENO: result: $cross_compiling" >&5 echo "${ECHO_T}$cross_compiling" >&6 echo "$as_me:$LINENO: checking for suffix of executables" >&5 echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6 if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` export ac_cv_exeext break;; * ) break;; esac done else { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute suffix of executables: cannot compile and link See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi rm -f conftest$ac_cv_exeext echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5 echo "${ECHO_T}$ac_cv_exeext" >&6 rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT echo "$as_me:$LINENO: checking for suffix of object files" >&5 echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6 if test "${ac_cv_objext+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then for ac_file in `(ls conftest.o conftest.obj; ls conftest.*) 2>/dev/null`; do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute suffix of object files: cannot compile See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_objext" >&5 echo "${ECHO_T}$ac_cv_objext" >&6 OBJEXT=$ac_cv_objext ac_objext=$OBJEXT echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5 echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6 if test "${ac_cv_c_compiler_gnu+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_compiler_gnu=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_compiler_gnu=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5 echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6 GCC=`test $ac_compiler_gnu = yes && echo yes` ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS CFLAGS="-g" echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5 echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6 if test "${ac_cv_prog_cc_g+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_prog_cc_g=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_prog_cc_g=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 echo "${ECHO_T}$ac_cv_prog_cc_g" >&6 if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi echo "$as_me:$LINENO: checking for $CC option to accept ANSI C" >&5 echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6 if test "${ac_cv_prog_cc_stdc+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_prog_cc_stdc=no ac_save_CC=$CC cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #include #include /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std1 is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std1. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF # Don't try gcc -ansi; that turns off useful extensions and # breaks some systems' header files. # AIX -qlanglvl=ansi # Ultrix and OSF/1 -std1 # HP-UX 10.20 and later -Ae # HP-UX older versions -Aa -D_HPUX_SOURCE # SVR4 -Xc -D__EXTENSIONS__ for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_prog_cc_stdc=$ac_arg break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext done rm -f conftest.$ac_ext conftest.$ac_objext CC=$ac_save_CC fi case "x$ac_cv_prog_cc_stdc" in x|xno) echo "$as_me:$LINENO: result: none needed" >&5 echo "${ECHO_T}none needed" >&6 ;; *) echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5 echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6 CC="$CC $ac_cv_prog_cc_stdc" ;; esac # Some people use a C++ compiler to compile C. Since we use `exit', # in C++ we need to declare it. In case someone uses the same compiler # for both compiling C and C++ we need to have the C++ compiler decide # the declaration of exit, since it's the most demanding environment. cat >conftest.$ac_ext <<_ACEOF #ifndef __cplusplus choke me #endif _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then for ac_declaration in \ '' \ 'extern "C" void std::exit (int) throw (); using std::exit;' \ 'extern "C" void std::exit (int); using std::exit;' \ 'extern "C" void exit (int) throw ();' \ 'extern "C" void exit (int);' \ 'void exit (int);' do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_declaration #include int main () { exit (42); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 continue fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_declaration int main () { exit (42); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done rm -f conftest* if test -n "$ac_declaration"; then echo '#ifdef __cplusplus' >>confdefs.h echo $ac_declaration >>confdefs.h echo '#endif' >>confdefs.h fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu echo "$as_me:$LINENO: checking for a sed that does not truncate output" >&5 echo $ECHO_N "checking for a sed that does not truncate output... $ECHO_C" >&6 if test "${lt_cv_path_SED+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # Loop through the user's path and test for sed and gsed. # Then use that list of sed's as ones to test for truncation. as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for lt_ac_prog in sed gsed; do for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" fi done done done lt_ac_max=0 lt_ac_count=0 # Add /usr/xpg4/bin/sed as it is typically found on Solaris # along with /bin/sed that truncates output. for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do test ! -f $lt_ac_sed && break cat /dev/null > conftest.in lt_ac_count=0 echo $ECHO_N "0123456789$ECHO_C" >conftest.in # Check for GNU sed and select it if it is found. if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then lt_cv_path_SED=$lt_ac_sed break fi while true; do cat conftest.in conftest.in >conftest.tmp mv conftest.tmp conftest.in cp conftest.in conftest.nl echo >>conftest.nl $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break cmp -s conftest.out conftest.nl || break # 10000 chars as input seems more than enough test $lt_ac_count -gt 10 && break lt_ac_count=`expr $lt_ac_count + 1` if test $lt_ac_count -gt $lt_ac_max; then lt_ac_max=$lt_ac_count lt_cv_path_SED=$lt_ac_sed fi done done SED=$lt_cv_path_SED fi echo "$as_me:$LINENO: result: $SED" >&5 echo "${ECHO_T}$SED" >&6 echo "$as_me:$LINENO: checking for egrep" >&5 echo $ECHO_N "checking for egrep... $ECHO_C" >&6 if test "${ac_cv_prog_egrep+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if echo a | (grep -E '(a|b)') >/dev/null 2>&1 then ac_cv_prog_egrep='grep -E' else ac_cv_prog_egrep='egrep' fi fi echo "$as_me:$LINENO: result: $ac_cv_prog_egrep" >&5 echo "${ECHO_T}$ac_cv_prog_egrep" >&6 EGREP=$ac_cv_prog_egrep # Check whether --with-gnu-ld or --without-gnu-ld was given. if test "${with_gnu_ld+set}" = set; then withval="$with_gnu_ld" test "$withval" = no || with_gnu_ld=yes else with_gnu_ld=no fi; ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. echo "$as_me:$LINENO: checking for ld used by $CC" >&5 echo $ECHO_N "checking for ld used by $CC... $ECHO_C" >&6 case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [\\/]* | ?:[\\/]*) re_direlt='/[^/][^/]*/\.\./' # Canonicalize the pathname of ld ac_prog=`echo $ac_prog| $SED 's%\\\\%/%g'` while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do ac_prog=`echo $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then echo "$as_me:$LINENO: checking for GNU ld" >&5 echo $ECHO_N "checking for GNU ld... $ECHO_C" >&6 else echo "$as_me:$LINENO: checking for non-GNU ld" >&5 echo $ECHO_N "checking for non-GNU ld... $ECHO_C" >&6 fi if test "${lt_cv_path_LD+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -z "$LD"; then lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some GNU ld's only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &5 echo "${ECHO_T}$LD" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -z "$LD" && { { echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5 echo "$as_me: error: no acceptable ld found in \$PATH" >&2;} { (exit 1); exit 1; }; } echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5 echo $ECHO_N "checking if the linker ($LD) is GNU ld... $ECHO_C" >&6 if test "${lt_cv_prog_gnu_ld+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # I'd rather use --version here, but apparently some GNU ld's only accept -v. case `$LD -v 2>&1 &5 echo "${ECHO_T}$lt_cv_prog_gnu_ld" >&6 with_gnu_ld=$lt_cv_prog_gnu_ld echo "$as_me:$LINENO: checking for $LD option to reload object files" >&5 echo $ECHO_N "checking for $LD option to reload object files... $ECHO_C" >&6 if test "${lt_cv_ld_reload_flag+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_cv_ld_reload_flag='-r' fi echo "$as_me:$LINENO: result: $lt_cv_ld_reload_flag" >&5 echo "${ECHO_T}$lt_cv_ld_reload_flag" >&6 reload_flag=$lt_cv_ld_reload_flag case $reload_flag in "" | " "*) ;; *) reload_flag=" $reload_flag" ;; esac reload_cmds='$LD$reload_flag -o $output$reload_objs' echo "$as_me:$LINENO: checking for BSD-compatible nm" >&5 echo $ECHO_N "checking for BSD-compatible nm... $ECHO_C" >&6 if test "${lt_cv_path_NM+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$NM"; then # Let the user override the test. lt_cv_path_NM="$NM" else lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH /usr/ccs/bin /usr/ucb /bin; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. tmp_nm="$ac_dir/${ac_tool_prefix}nm" if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then # Check to see if the nm accepts a BSD-compat flag. # Adding the `sed 1q' prevents false positives on HP-UX, which says: # nm: unknown option "B" ignored # Tru64's nm complains that /dev/null is an invalid object file case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in */dev/null* | *'Invalid file or object type'*) lt_cv_path_NM="$tmp_nm -B" break ;; *) case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in */dev/null*) lt_cv_path_NM="$tmp_nm -p" break ;; *) lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but continue # so that we can try to find one that supports BSD flags ;; esac esac fi done IFS="$lt_save_ifs" test -z "$lt_cv_path_NM" && lt_cv_path_NM=nm fi fi echo "$as_me:$LINENO: result: $lt_cv_path_NM" >&5 echo "${ECHO_T}$lt_cv_path_NM" >&6 NM="$lt_cv_path_NM" echo "$as_me:$LINENO: checking whether ln -s works" >&5 echo $ECHO_N "checking whether ln -s works... $ECHO_C" >&6 LN_S=$as_ln_s if test "$LN_S" = "ln -s"; then echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else echo "$as_me:$LINENO: result: no, using $LN_S" >&5 echo "${ECHO_T}no, using $LN_S" >&6 fi echo "$as_me:$LINENO: checking how to recognise dependent libraries" >&5 echo $ECHO_N "checking how to recognise dependent libraries... $ECHO_C" >&6 if test "${lt_cv_deplibs_check_method+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_cv_file_magic_cmd='$MAGIC_CMD' lt_cv_file_magic_test_file= lt_cv_deplibs_check_method='unknown' # Need to set the preceding variable on all platforms that support # interlibrary dependencies. # 'none' -- dependencies not supported. # `unknown' -- same as none, but documents that we really don't know. # 'pass_all' -- all dependencies passed with no checks. # 'test_compile' -- check by making test program. # 'file_magic [[regex]]' -- check by looking for files in library path # which responds to the $file_magic_cmd with a given extended regex. # If you have `file' or equivalent on your system and you're not sure # whether `pass_all' will *always* work, you probably want this one. case $host_os in aix4* | aix5*) lt_cv_deplibs_check_method=pass_all ;; beos*) lt_cv_deplibs_check_method=pass_all ;; bsdi4*) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' lt_cv_file_magic_cmd='/usr/bin/file -L' lt_cv_file_magic_test_file=/shlib/libc.so ;; cygwin*) # func_win32_libid is a shell function defined in ltmain.sh lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' ;; mingw* | pw32*) # Base MSYS/MinGW do not provide the 'file' command needed by # func_win32_libid shell function, so use a weaker test based on 'objdump'. lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?' lt_cv_file_magic_cmd='$OBJDUMP -f' ;; darwin* | rhapsody*) lt_cv_deplibs_check_method=pass_all ;; freebsd* | kfreebsd*-gnu) if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then case $host_cpu in i*86 ) # Not sure whether the presence of OpenBSD here was a mistake. # Let's accept both of them until this is cleared up. lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD)/i[3-9]86 (compact )?demand paged shared library' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` ;; esac else lt_cv_deplibs_check_method=pass_all fi ;; gnu*) lt_cv_deplibs_check_method=pass_all ;; hpux10.20* | hpux11*) lt_cv_file_magic_cmd=/usr/bin/file case "$host_cpu" in ia64*) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so ;; hppa*64*) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]' lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl ;; *) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9].[0-9]) shared library' lt_cv_file_magic_test_file=/usr/lib/libc.sl ;; esac ;; irix5* | irix6* | nonstopux*) case $LD in *-32|*"-32 ") libmagic=32-bit;; *-n32|*"-n32 ") libmagic=N32;; *-64|*"-64 ") libmagic=64-bit;; *) libmagic=never-match;; esac lt_cv_deplibs_check_method=pass_all ;; # This must be Linux ELF. linux*) case $host_cpu in alpha*|hppa*|i*86|ia64*|m68*|mips*|powerpc*|sparc*|s390*|sh*|x86_64*) lt_cv_deplibs_check_method=pass_all ;; *) # glibc up to 2.1.1 does not perform some relocations on ARM # this will be overridden with pass_all, but let us keep it just in case lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' ;; esac lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so` lt_cv_deplibs_check_method=pass_all ;; netbsd*) if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' fi ;; newos6*) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=/usr/lib/libnls.so ;; nto-qnx*) lt_cv_deplibs_check_method=unknown ;; openbsd*) lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB shared object' else lt_cv_deplibs_check_method='file_magic OpenBSD.* shared library' fi ;; osf3* | osf4* | osf5*) lt_cv_deplibs_check_method=pass_all ;; sco3.2v5*) lt_cv_deplibs_check_method=pass_all ;; solaris*) lt_cv_deplibs_check_method=pass_all ;; sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) case $host_vendor in motorola) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` ;; ncr) lt_cv_deplibs_check_method=pass_all ;; sequent) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' ;; sni) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" lt_cv_file_magic_test_file=/lib/libc.so ;; siemens) lt_cv_deplibs_check_method=pass_all ;; esac ;; sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[78]* | unixware7* | sysv4*uw2*) lt_cv_deplibs_check_method=pass_all ;; esac fi echo "$as_me:$LINENO: result: $lt_cv_deplibs_check_method" >&5 echo "${ECHO_T}$lt_cv_deplibs_check_method" >&6 file_magic_cmd=$lt_cv_file_magic_cmd deplibs_check_method=$lt_cv_deplibs_check_method test -z "$deplibs_check_method" && deplibs_check_method=unknown # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # Allow CC to be a program name with arguments. compiler=$CC # Check whether --enable-libtool-lock or --disable-libtool-lock was given. if test "${enable_libtool_lock+set}" = set; then enableval="$enable_libtool_lock" fi; test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes # Some flags need to be propagated to the compiler or linker for good # libtool support. case $host in ia64-*-hpux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then case `/usr/bin/file conftest.$ac_objext` in *ELF-32*) HPUX_IA64_MODE="32" ;; *ELF-64*) HPUX_IA64_MODE="64" ;; esac fi rm -rf conftest* ;; *-*-irix6*) # Find out which ABI we are using. echo '#line 3190 "configure"' > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then if test "$lt_cv_prog_gnu_ld" = yes; then case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -melf32bsmip" ;; *N32*) LD="${LD-ld} -melf32bmipn32" ;; *64-bit*) LD="${LD-ld} -melf64bmip" ;; esac else case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -32" ;; *N32*) LD="${LD-ld} -n32" ;; *64-bit*) LD="${LD-ld} -64" ;; esac fi fi rm -rf conftest* ;; x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*|s390*-*linux*|sparc*-*linux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then case "`/usr/bin/file conftest.o`" in *32-bit*) case $host in x86_64-*linux*) LD="${LD-ld} -m elf_i386" ;; ppc64-*linux*|powerpc64-*linux*) LD="${LD-ld} -m elf32ppclinux" ;; s390x-*linux*) LD="${LD-ld} -m elf_s390" ;; sparc64-*linux*) LD="${LD-ld} -m elf32_sparc" ;; esac ;; *64-bit*) case $host in x86_64-*linux*) LD="${LD-ld} -m elf_x86_64" ;; ppc*-*linux*|powerpc*-*linux*) LD="${LD-ld} -m elf64ppc" ;; s390*-*linux*) LD="${LD-ld} -m elf64_s390" ;; sparc*-*linux*) LD="${LD-ld} -m elf64_sparc" ;; esac ;; esac fi rm -rf conftest* ;; *-*-sco3.2v5*) # On SCO OpenServer 5, we need -belf to get full-featured binaries. SAVE_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -belf" echo "$as_me:$LINENO: checking whether the C compiler needs -belf" >&5 echo $ECHO_N "checking whether the C compiler needs -belf... $ECHO_C" >&6 if test "${lt_cv_cc_needs_belf+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then lt_cv_cc_needs_belf=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 lt_cv_cc_needs_belf=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu fi echo "$as_me:$LINENO: result: $lt_cv_cc_needs_belf" >&5 echo "${ECHO_T}$lt_cv_cc_needs_belf" >&6 if test x"$lt_cv_cc_needs_belf" != x"yes"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf CFLAGS="$SAVE_CFLAGS" fi ;; esac need_locks="$enable_libtool_lock" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5 echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6 # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if test "${ac_cv_prog_CPP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_c_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether non-existent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_c_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then # Broken: success on invalid input. continue else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi echo "$as_me:$LINENO: result: $CPP" >&5 echo "${ECHO_T}$CPP" >&6 ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_c_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether non-existent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_c_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then # Broken: success on invalid input. continue else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details." >&5 echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu echo "$as_me:$LINENO: checking for ANSI C header files" >&5 echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6 if test "${ac_cv_header_stdc+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_header_stdc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_header_stdc=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2); exit (0); } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) ac_cv_header_stdc=no fi rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi fi echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5 echo "${ECHO_T}$ac_cv_header_stdc" >&6 if test $ac_cv_header_stdc = yes; then cat >>confdefs.h <<\_ACEOF #define STDC_HEADERS 1 _ACEOF fi # On IRIX 5.3, sys/types and inttypes.h are conflicting. for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ inttypes.h stdint.h unistd.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then eval "$as_ac_Header=yes" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_Header=no" fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_header in dlfcn.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` if eval "test \"\${$as_ac_Header+set}\" = set"; then echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 else # Is the header compilable? echo "$as_me:$LINENO: checking $ac_header usability" >&5 echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6 # Is the header present? echo "$as_me:$LINENO: checking $ac_header presence" >&5 echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_c_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6 # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in yes:no: ) { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX ## ------------------------------ ## ## Report this to neon@webdav.org ## ## ------------------------------ ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 fi if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done # Autoconf 2.13's AC_OBJEXT and AC_EXEEXT macros only works for C compilers! # find the maximum length of command line arguments echo "$as_me:$LINENO: checking the maximum length of command line arguments" >&5 echo $ECHO_N "checking the maximum length of command line arguments... $ECHO_C" >&6 if test "${lt_cv_sys_max_cmd_len+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else i=0 teststring="ABCD" case $build_os in msdosdjgpp*) # On DJGPP, this test can blow up pretty badly due to problems in libc # (any single argument exceeding 2000 bytes causes a buffer overrun # during glob expansion). Even if it were fixed, the result of this # check would be larger than it should be. lt_cv_sys_max_cmd_len=12288; # 12K is about right ;; gnu*) # Under GNU Hurd, this test is not required because there is # no limit to the length of command line arguments. # Libtool will interpret -1 as no limit whatsoever lt_cv_sys_max_cmd_len=-1; ;; cygwin* | mingw*) # On Win9x/ME, this test blows up -- it succeeds, but takes # about 5 minutes as the teststring grows exponentially. # Worse, since 9x/ME are not pre-emptively multitasking, # you end up with a "frozen" computer, even though with patience # the test eventually succeeds (with a max line length of 256k). # Instead, let's just punt: use the minimum linelength reported by # all of the supported platforms: 8192 (on NT/2K/XP). lt_cv_sys_max_cmd_len=8192; ;; amigaos*) # On AmigaOS with pdksh, this test takes hours, literally. # So we just punt and use a minimum line length of 8192. lt_cv_sys_max_cmd_len=8192; ;; *) # If test is not a shell built-in, we'll probably end up computing a # maximum length that is only half of the actual maximum length, but # we can't tell. while (test "X"`$CONFIG_SHELL $0 --fallback-echo "X$teststring" 2>/dev/null` \ = "XX$teststring") >/dev/null 2>&1 && new_result=`expr "X$teststring" : ".*" 2>&1` && lt_cv_sys_max_cmd_len=$new_result && test $i != 17 # 1/2 MB should be enough do i=`expr $i + 1` teststring=$teststring$teststring done teststring= # Add a significant safety factor because C++ compilers can tack on massive # amounts of additional arguments before passing them to the linker. # It appears as though 1/2 is a usable value. lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` ;; esac fi if test -n $lt_cv_sys_max_cmd_len ; then echo "$as_me:$LINENO: result: $lt_cv_sys_max_cmd_len" >&5 echo "${ECHO_T}$lt_cv_sys_max_cmd_len" >&6 else echo "$as_me:$LINENO: result: none" >&5 echo "${ECHO_T}none" >&6 fi # Check for command to grab the raw symbol name followed by C symbol from nm. echo "$as_me:$LINENO: checking command to parse $NM output from $compiler object" >&5 echo $ECHO_N "checking command to parse $NM output from $compiler object... $ECHO_C" >&6 if test "${lt_cv_sys_global_symbol_pipe+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # These are sane defaults that work on at least a few old systems. # [They come from Ultrix. What could be older than Ultrix?!! ;)] # Character class describing NM global symbol codes. symcode='[BCDEGRST]' # Regexp to match symbols that can be accessed directly from C. sympat='\([_A-Za-z][_A-Za-z0-9]*\)' # Transform the above into a raw symbol and a C symbol. symxfrm='\1 \2\3 \3' # Transform an extracted symbol line into a proper C declaration lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^. .* \(.*\)$/extern int \1;/p'" # Transform an extracted symbol line into symbol name and symbol address lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode \([^ ]*\) \([^ ]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" # Define system-specific variables. case $host_os in aix*) symcode='[BCDT]' ;; cygwin* | mingw* | pw32*) symcode='[ABCDGISTW]' ;; hpux*) # Its linker distinguishes data from code symbols if test "$host_cpu" = ia64; then symcode='[ABCDEGRST]' fi lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" ;; irix* | nonstopux*) symcode='[BCDEGRST]' ;; osf*) symcode='[BCDEGQRST]' ;; solaris* | sysv5*) symcode='[BDRT]' ;; sysv4) symcode='[DFNSTU]' ;; esac # Handle CRLF in mingw tool chain opt_cr= case $build_os in mingw*) opt_cr=`echo 'x\{0,1\}' | tr x '\015'` # option cr in regexp ;; esac # If we're using GNU nm, then use its standard symbol codes. case `$NM -V 2>&1` in *GNU* | *'with BFD'*) symcode='[ABCDGIRSTW]' ;; esac # Try without a prefix undercore, then with it. for ac_symprfx in "" "_"; do # Write the raw and C identifiers. lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*\($ac_symprfx\)$sympat$opt_cr$/$symxfrm/p'" # Check to see that the pipe works correctly. pipe_works=no rm -f conftest* cat > conftest.$ac_ext <&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then # Now try to grab the symbols. nlist=conftest.nm if { (eval echo "$as_me:$LINENO: \"$NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist\"") >&5 (eval $NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && test -s "$nlist"; then # Try sorting and uniquifying the output. if sort "$nlist" | uniq > "$nlist"T; then mv -f "$nlist"T "$nlist" else rm -f "$nlist"T fi # Make sure that we snagged all the symbols we need. if grep ' nm_test_var$' "$nlist" >/dev/null; then if grep ' nm_test_func$' "$nlist" >/dev/null; then cat < conftest.$ac_ext #ifdef __cplusplus extern "C" { #endif EOF # Now generate the symbol file. eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | grep -v main >> conftest.$ac_ext' cat <> conftest.$ac_ext #if defined (__STDC__) && __STDC__ # define lt_ptr_t void * #else # define lt_ptr_t char * # define const #endif /* The mapping between symbol names and symbols. */ const struct { const char *name; lt_ptr_t address; } lt_preloaded_symbols[] = { EOF $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (lt_ptr_t) \&\2},/" < "$nlist" | grep -v main >> conftest.$ac_ext cat <<\EOF >> conftest.$ac_ext {0, (lt_ptr_t) 0} }; #ifdef __cplusplus } #endif EOF # Now try linking the two files. mv conftest.$ac_objext conftstm.$ac_objext lt_save_LIBS="$LIBS" lt_save_CFLAGS="$CFLAGS" LIBS="conftstm.$ac_objext" CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && test -s conftest${ac_exeext}; then pipe_works=yes fi LIBS="$lt_save_LIBS" CFLAGS="$lt_save_CFLAGS" else echo "cannot find nm_test_func in $nlist" >&5 fi else echo "cannot find nm_test_var in $nlist" >&5 fi else echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 fi else echo "$progname: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -f conftest* conftst* # Do not use the global_symbol_pipe unless it works. if test "$pipe_works" = yes; then break else lt_cv_sys_global_symbol_pipe= fi done fi if test -z "$lt_cv_sys_global_symbol_pipe"; then lt_cv_sys_global_symbol_to_cdecl= fi if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then echo "$as_me:$LINENO: result: failed" >&5 echo "${ECHO_T}failed" >&6 else echo "$as_me:$LINENO: result: ok" >&5 echo "${ECHO_T}ok" >&6 fi echo "$as_me:$LINENO: checking for objdir" >&5 echo $ECHO_N "checking for objdir... $ECHO_C" >&6 if test "${lt_cv_objdir+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else rm -f .libs 2>/dev/null mkdir .libs 2>/dev/null if test -d .libs; then lt_cv_objdir=.libs else # MS-DOS does not allow filenames that begin with a dot. lt_cv_objdir=_libs fi rmdir .libs 2>/dev/null fi echo "$as_me:$LINENO: result: $lt_cv_objdir" >&5 echo "${ECHO_T}$lt_cv_objdir" >&6 objdir=$lt_cv_objdir case $host_os in aix3*) # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi ;; esac # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. Xsed='sed -e s/^X//' sed_quote_subst='s/\([\\"\\`$\\\\]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\([\\"\\`\\\\]\)/\\\1/g' # Sed substitution to delay expansion of an escaped shell variable in a # double_quote_subst'ed string. delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' # Sed substitution to avoid accidental globbing in evaled expressions no_glob_subst='s/\*/\\\*/g' # Constants: rm="rm -f" # Global variables: default_ofile=libtool can_build_shared=yes # All known linkers require a `.a' archive for static linking (except M$VC, # which needs '.lib'). libext=a ltmain="$ac_aux_dir/ltmain.sh" ofile="$default_ofile" with_gnu_ld="$lt_cv_prog_gnu_ld" if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. set dummy ${ac_tool_prefix}ar; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_AR+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$AR"; then ac_cv_prog_AR="$AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AR="${ac_tool_prefix}ar" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi AR=$ac_cv_prog_AR if test -n "$AR"; then echo "$as_me:$LINENO: result: $AR" >&5 echo "${ECHO_T}$AR" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$ac_cv_prog_AR"; then ac_ct_AR=$AR # Extract the first word of "ar", so it can be a program name with args. set dummy ar; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_AR+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_AR"; then ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_AR="ar" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_prog_ac_ct_AR" && ac_cv_prog_ac_ct_AR="false" fi fi ac_ct_AR=$ac_cv_prog_ac_ct_AR if test -n "$ac_ct_AR"; then echo "$as_me:$LINENO: result: $ac_ct_AR" >&5 echo "${ECHO_T}$ac_ct_AR" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi AR=$ac_ct_AR else AR="$ac_cv_prog_AR" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_RANLIB+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then echo "$as_me:$LINENO: result: $RANLIB" >&5 echo "${ECHO_T}$RANLIB" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_RANLIB="ranlib" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_prog_ac_ct_RANLIB" && ac_cv_prog_ac_ct_RANLIB=":" fi fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5 echo "${ECHO_T}$ac_ct_RANLIB" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi RANLIB=$ac_ct_RANLIB else RANLIB="$ac_cv_prog_RANLIB" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_STRIP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then echo "$as_me:$LINENO: result: $STRIP" >&5 echo "${ECHO_T}$STRIP" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_prog_ac_ct_STRIP" && ac_cv_prog_ac_ct_STRIP=":" fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5 echo "${ECHO_T}$ac_ct_STRIP" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi STRIP=$ac_ct_STRIP else STRIP="$ac_cv_prog_STRIP" fi old_CC="$CC" old_CFLAGS="$CFLAGS" # Set sane defaults for various variables test -z "$AR" && AR=ar test -z "$AR_FLAGS" && AR_FLAGS=cru test -z "$AS" && AS=as test -z "$CC" && CC=cc test -z "$LTCC" && LTCC=$CC test -z "$DLLTOOL" && DLLTOOL=dlltool test -z "$LD" && LD=ld test -z "$LN_S" && LN_S="ln -s" test -z "$MAGIC_CMD" && MAGIC_CMD=file test -z "$NM" && NM=nm test -z "$SED" && SED=sed test -z "$OBJDUMP" && OBJDUMP=objdump test -z "$RANLIB" && RANLIB=: test -z "$STRIP" && STRIP=: test -z "$ac_objext" && ac_objext=o # Determine commands to create old-style static archives. old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs' old_postinstall_cmds='chmod 644 $oldlib' old_postuninstall_cmds= if test -n "$RANLIB"; then case $host_os in openbsd*) old_postinstall_cmds="\$RANLIB -t \$oldlib~$old_postinstall_cmds" ;; *) old_postinstall_cmds="\$RANLIB \$oldlib~$old_postinstall_cmds" ;; esac old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" fi # Only perform the check for file, if the check method requires it case $deplibs_check_method in file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then echo "$as_me:$LINENO: checking for ${ac_tool_prefix}file" >&5 echo $ECHO_N "checking for ${ac_tool_prefix}file... $ECHO_C" >&6 if test "${lt_cv_path_MAGIC_CMD+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD="$MAGIC_CMD" lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" for ac_dir in $ac_dummy; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/${ac_tool_prefix}file; then lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex="`expr \"$deplibs_check_method\" : \"file_magic \(.*\)\"`" MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org EOF fi ;; esac fi break fi done IFS="$lt_save_ifs" MAGIC_CMD="$lt_save_MAGIC_CMD" ;; esac fi MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5 echo "${ECHO_T}$MAGIC_CMD" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then echo "$as_me:$LINENO: checking for file" >&5 echo $ECHO_N "checking for file... $ECHO_C" >&6 if test "${lt_cv_path_MAGIC_CMD+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD="$MAGIC_CMD" lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" for ac_dir in $ac_dummy; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/file; then lt_cv_path_MAGIC_CMD="$ac_dir/file" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex="`expr \"$deplibs_check_method\" : \"file_magic \(.*\)\"`" MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org EOF fi ;; esac fi break fi done IFS="$lt_save_ifs" MAGIC_CMD="$lt_save_MAGIC_CMD" ;; esac fi MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5 echo "${ECHO_T}$MAGIC_CMD" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi else MAGIC_CMD=: fi fi fi ;; esac enable_dlopen=no enable_win32_dll=no # Check whether --enable-libtool-lock or --disable-libtool-lock was given. if test "${enable_libtool_lock+set}" = set; then enableval="$enable_libtool_lock" fi; test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes # Check whether --with-pic or --without-pic was given. if test "${with_pic+set}" = set; then withval="$with_pic" pic_mode="$withval" else pic_mode=default fi; test -z "$pic_mode" && pic_mode=default # Use C for the default configuration in the libtool script tagname= lt_save_CC="$CC" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # Source file extension for C test sources. ac_ext=c # Object file extension for compiled C test sources. objext=o objext=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;\n" # Code to be used in simple link tests lt_simple_link_test_code='int main(){return(0);}\n' # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # Allow CC to be a program name with arguments. compiler=$CC # # Check for any special shared library compilation flags. # lt_prog_cc_shlib= if test "$GCC" = no; then case $host_os in sco3.2v5*) lt_prog_cc_shlib='-belf' ;; esac fi if test -n "$lt_prog_cc_shlib"; then { echo "$as_me:$LINENO: WARNING: \`$CC' requires \`$lt_prog_cc_shlib' to build shared libraries" >&5 echo "$as_me: WARNING: \`$CC' requires \`$lt_prog_cc_shlib' to build shared libraries" >&2;} if echo "$old_CC $old_CFLAGS " | grep "[ ]$lt_prog_cc_shlib[ ]" >/dev/null; then : else { echo "$as_me:$LINENO: WARNING: add \`$lt_prog_cc_shlib' to the CC or CFLAGS env variable and reconfigure" >&5 echo "$as_me: WARNING: add \`$lt_prog_cc_shlib' to the CC or CFLAGS env variable and reconfigure" >&2;} lt_cv_prog_cc_can_build_shared=no fi fi # # Check to make sure the static flag actually works. # echo "$as_me:$LINENO: checking if $compiler static flag $lt_prog_compiler_static works" >&5 echo $ECHO_N "checking if $compiler static flag $lt_prog_compiler_static works... $ECHO_C" >&6 if test "${lt_prog_compiler_static_works+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_prog_compiler_static_works=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $lt_prog_compiler_static" printf "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 else lt_prog_compiler_static_works=yes fi fi $rm conftest* LDFLAGS="$save_LDFLAGS" fi echo "$as_me:$LINENO: result: $lt_prog_compiler_static_works" >&5 echo "${ECHO_T}$lt_prog_compiler_static_works" >&6 if test x"$lt_prog_compiler_static_works" = xyes; then : else lt_prog_compiler_static= fi lt_prog_compiler_no_builtin_flag= if test "$GCC" = yes; then lt_prog_compiler_no_builtin_flag=' -fno-builtin' echo "$as_me:$LINENO: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 echo $ECHO_N "checking if $compiler supports -fno-rtti -fno-exceptions... $ECHO_C" >&6 if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_cv_prog_compiler_rtti_exceptions=no ac_outfile=conftest.$ac_objext printf "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-fno-rtti -fno-exceptions" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:4864: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:4868: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings if test ! -s conftest.err; then lt_cv_prog_compiler_rtti_exceptions=yes fi fi $rm conftest* fi echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 echo "${ECHO_T}$lt_cv_prog_compiler_rtti_exceptions" >&6 if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" else : fi fi lt_prog_compiler_wl= lt_prog_compiler_pic= lt_prog_compiler_static= echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5 echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6 if test "$GCC" = yes; then lt_prog_compiler_wl='-Wl,' lt_prog_compiler_static='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static='-Bstatic' fi ;; amigaos*) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4' ;; beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | pw32* | os2*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic='-DDLL_EXPORT' ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic='-fno-common' ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. lt_prog_compiler_can_build_shared=no enable_shared=no ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic=-Kconform_pic fi ;; hpux*) # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case "$host_cpu" in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic='-fPIC' ;; esac ;; *) lt_prog_compiler_pic='-fPIC' ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) lt_prog_compiler_wl='-Wl,' if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static='-Bstatic' else lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp' fi ;; mingw* | pw32* | os2*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic='-DDLL_EXPORT' ;; hpux9* | hpux10* | hpux11*) lt_prog_compiler_wl='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case "$host_cpu" in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? lt_prog_compiler_static='${wl}-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) lt_prog_compiler_wl='-Wl,' # PIC (with -KPIC) is the default. lt_prog_compiler_static='-non_shared' ;; newsos6) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; linux*) case $CC in icc* | ecc*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-static' ;; ccc*) lt_prog_compiler_wl='-Wl,' # All Alpha code is PIC. lt_prog_compiler_static='-non_shared' ;; esac ;; osf3* | osf4* | osf5*) lt_prog_compiler_wl='-Wl,' # All OSF/1 code is PIC. lt_prog_compiler_static='-non_shared' ;; sco3.2v5*) lt_prog_compiler_pic='-Kpic' lt_prog_compiler_static='-dn' ;; solaris*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; sunos4*) lt_prog_compiler_wl='-Qoption ld ' lt_prog_compiler_pic='-PIC' lt_prog_compiler_static='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec ;then lt_prog_compiler_pic='-Kconform_pic' lt_prog_compiler_static='-Bstatic' fi ;; uts4*) lt_prog_compiler_pic='-pic' lt_prog_compiler_static='-Bstatic' ;; *) lt_prog_compiler_can_build_shared=no ;; esac fi echo "$as_me:$LINENO: result: $lt_prog_compiler_pic" >&5 echo "${ECHO_T}$lt_prog_compiler_pic" >&6 # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic"; then echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic works... $ECHO_C" >&6 if test "${lt_prog_compiler_pic_works+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_prog_compiler_pic_works=no ac_outfile=conftest.$ac_objext printf "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic -DPIC" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:5097: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:5101: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings if test ! -s conftest.err; then lt_prog_compiler_pic_works=yes fi fi $rm conftest* fi echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works" >&5 echo "${ECHO_T}$lt_prog_compiler_pic_works" >&6 if test x"$lt_prog_compiler_pic_works" = xyes; then case $lt_prog_compiler_pic in "" | " "*) ;; *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; esac else lt_prog_compiler_pic= lt_prog_compiler_can_build_shared=no fi fi case "$host_os" in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) lt_prog_compiler_pic= ;; *) lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC" ;; esac echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6 if test "${lt_cv_prog_compiler_c_o+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_cv_prog_compiler_c_o=no $rm -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out printf "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:5157: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:5161: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings if test ! -s out/conftest.err; then lt_cv_prog_compiler_c_o=yes fi fi chmod u+w . $rm conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files $rm out/* && rmdir out cd .. rmdir conftest $rm conftest* fi echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o" >&5 echo "${ECHO_T}$lt_cv_prog_compiler_c_o" >&6 hard_links="nottested" if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user echo "$as_me:$LINENO: checking if we can lock with hard links" >&5 echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6 hard_links=yes $rm conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no echo "$as_me:$LINENO: result: $hard_links" >&5 echo "${ECHO_T}$hard_links" >&6 if test "$hard_links" = no; then { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} need_locks=warn fi else need_locks=no fi echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6 runpath_var= allow_undefined_flag= enable_shared_with_static_runtimes=no archive_cmds= archive_expsym_cmds= old_archive_From_new_cmds= old_archive_from_expsyms_cmds= export_dynamic_flag_spec= whole_archive_flag_spec= thread_safe_flag_spec= hardcode_libdir_flag_spec= hardcode_libdir_flag_spec_ld= hardcode_libdir_separator= hardcode_direct=no hardcode_minus_L=no hardcode_shlibpath_var=unsupported link_all_deplibs=unknown hardcode_automatic=no module_cmds= module_expsym_cmds= always_export_symbols=no export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list include_expsyms= # exclude_expsyms can be an extended regexp of symbols to exclude # it will be wrapped by ` (' and `)$', so one must not match beginning or # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', # as well as any symbol that contains `d'. exclude_expsyms="_GLOBAL_OFFSET_TABLE_" # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. extract_expsyms_cmds= case $host_os in cygwin* | mingw* | pw32*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test "$GCC" != yes; then with_gnu_ld=no fi ;; openbsd*) with_gnu_ld=no ;; esac ld_shlibs=yes if test "$with_gnu_ld" = yes; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='${wl}' # See if GNU ld supports shared libraries. case $host_os in aix3* | aix4* | aix5*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then ld_shlibs=no cat <&2 *** Warning: the GNU linker, at least up to release 2.9.1, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to modify your PATH *** so that a non-GNU linker is found, and then restart. EOF fi ;; amigaos*) archive_cmds='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes # Samuel A. Falvo II reports # that the semantics of dynamic libraries on AmigaOS, at least up # to version 4, is to share data among multiple programs linked # with the same dynamic library. Since this doesn't match the # behavior of shared libraries on other platforms, we can't use # them. ld_shlibs=no ;; beos*) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then allow_undefined_flag=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else ld_shlibs=no fi ;; cygwin* | mingw* | pw32*) # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec='-L$libdir' allow_undefined_flag=unsupported always_export_symbols=no enable_shared_with_static_runtimes=yes export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGS] /s/.* \([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols' if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib' else ld_shlibs=no fi ;; netbsd*) if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris* | sysv5*) if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then ld_shlibs=no cat <&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. EOF elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; sunos4*) archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= hardcode_direct=yes hardcode_shlibpath_var=no ;; linux*) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then tmp_archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_cmds="$tmp_archive_cmds" supports_anon_versioning=no case `$LD -v 2>/dev/null` in *\ 01.* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... *\ 2.11.*) ;; # other 2.11 versions *) supports_anon_versioning=yes ;; esac if test $supports_anon_versioning = yes; then archive_expsym_cmds='$echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ $echo "local: *; };" >> $output_objdir/$libname.ver~ $CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' else archive_expsym_cmds="$tmp_archive_cmds" fi else ld_shlibs=no fi ;; *) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; esac if test "$ld_shlibs" = yes; then runpath_var=LD_RUN_PATH hardcode_libdir_flag_spec='${wl}--rpath ${wl}$libdir' export_dynamic_flag_spec='${wl}--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else whole_archive_flag_spec= fi fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) allow_undefined_flag=unsupported always_export_symbols=yes archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. hardcode_minus_L=yes if test "$GCC" = yes && test -z "$link_static_flag"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. hardcode_direct=unsupported fi ;; aix4* | aix5*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm if $NM -V 2>&1 | grep 'GNU' > /dev/null; then export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' else export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[23]|aix4.[23].*|aix5*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes break fi done esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. archive_cmds='' hardcode_direct=yes hardcode_libdir_separator=':' link_all_deplibs=yes if test "$GCC" = yes; then case $host_os in aix4.012|aix4.012.*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && \ strings "$collect2name" | grep resolve_lib_name >/dev/null then # We have reworked collect2 hardcode_direct=yes else # We have old collect2 hardcode_direct=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking hardcode_minus_L=yes hardcode_libdir_flag_spec='-L$libdir' hardcode_libdir_separator= fi esac shared_flag='-shared' else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. always_export_symbols=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. allow_undefined_flag='-berok' # Determine the default libpath from the value encoded in an empty executable. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'`; fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" archive_expsym_cmds="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' allow_undefined_flag="-z nodefs" archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an empty executable. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'`; fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. no_undefined_flag=' ${wl}-bernotok' allow_undefined_flag=' ${wl}-berok' # -bexpall does not export symbols beginning with underscore (_) always_export_symbols=yes # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec=' ' archive_cmds_need_lc=yes # This is similar to how AIX traditionally builds it's shared libraries. archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; amigaos*) archive_cmds='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes # see comment about different semantics on the GNU ld section ld_shlibs=no ;; bsdi4*) export_dynamic_flag_spec=-rdynamic ;; cygwin* | mingw* | pw32*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. hardcode_libdir_flag_spec=' ' allow_undefined_flag=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. archive_cmds='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. old_archive_From_new_cmds='true' # FIXME: Should let the user specify the lib program. old_archive_cmds='lib /OUT:$oldlib$oldobjs$old_deplibs' fix_srcfile_path='`cygpath -w "$srcfile"`' enable_shared_with_static_runtimes=yes ;; darwin* | rhapsody*) if test "$GXX" = yes ; then archive_cmds_need_lc=no case "$host_os" in rhapsody* | darwin1.[012]) allow_undefined_flag='-undefined suppress' ;; *) # Darwin 1.3 on if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then allow_undefined_flag='-flat_namespace -undefined suppress' else case ${MACOSX_DEPLOYMENT_TARGET} in 10.[012]) allow_undefined_flag='-flat_namespace -undefined suppress' ;; 10.*) allow_undefined_flag='-undefined dynamic_lookup' ;; esac fi ;; esac lt_int_apple_cc_single_mod=no output_verbose_link_cmd='echo' if $CC -dumpspecs 2>&1 | grep 'single_module' >/dev/null ; then lt_int_apple_cc_single_mod=yes fi if test "X$lt_int_apple_cc_single_mod" = Xyes ; then archive_cmds='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' else archive_cmds='$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring' fi module_cmds='$CC ${wl}-bind_at_load $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's if test "X$lt_int_apple_cc_single_mod" = Xyes ; then archive_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' else archive_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' fi module_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' hardcode_direct=no hardcode_automatic=yes hardcode_shlibpath_var=unsupported whole_archive_flag_spec='-all_load $convenience' link_all_deplibs=yes else ld_shlibs=no fi ;; dgux*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-L$libdir' hardcode_shlibpath_var=no ;; freebsd1*) ld_shlibs=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes hardcode_minus_L=yes hardcode_shlibpath_var=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | kfreebsd*-gnu) archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; hpux9*) if test "$GCC" = yes; then archive_cmds='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else archive_cmds='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' fi hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes export_dynamic_flag_spec='${wl}-E' ;; hpux10* | hpux11*) if test "$GCC" = yes -a "$with_gnu_ld" = no; then case "$host_cpu" in hppa*64*|ia64*) archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case "$host_cpu" in hppa*64*|ia64*) archive_cmds='$LD -b +h $soname -o $lib $libobjs $deplibs $linker_flags' ;; *) archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' ;; esac fi if test "$with_gnu_ld" = no; then case "$host_cpu" in hppa*64*) hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_flag_spec_ld='+b $libdir' hardcode_libdir_separator=: hardcode_direct=no hardcode_shlibpath_var=no ;; ia64*) hardcode_libdir_flag_spec='-L$libdir' hardcode_direct=no hardcode_shlibpath_var=no # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes ;; *) hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes export_dynamic_flag_spec='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test "$GCC" = yes; then archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec_ld='-rpath $libdir' fi hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: link_all_deplibs=yes ;; netbsd*) if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; newsos6) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: hardcode_shlibpath_var=no ;; openbsd*) hardcode_direct=yes hardcode_shlibpath_var=no if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec='${wl}-rpath,$libdir' export_dynamic_flag_spec='${wl}-E' else case $host_os in openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-R$libdir' ;; *) archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec='${wl}-rpath,$libdir' ;; esac fi ;; os2*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes allow_undefined_flag=unsupported archive_cmds='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' old_archive_From_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' ;; osf3*) if test "$GCC" = yes; then allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else allow_undefined_flag=' -expect_unresolved \*' archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' fi hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test "$GCC" = yes; then allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' else allow_undefined_flag=' -expect_unresolved \*' archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~ $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib~$rm $lib.exp' # Both c and cxx compiler support -rpath directly hardcode_libdir_flag_spec='-rpath $libdir' fi hardcode_libdir_separator=: ;; sco3.2v5*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var=no export_dynamic_flag_spec='${wl}-Bexport' runpath_var=LD_RUN_PATH hardcode_runpath_var=yes ;; solaris*) no_undefined_flag=' -z text' if test "$GCC" = yes; then archive_cmds='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp' else archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp' fi hardcode_libdir_flag_spec='-R$libdir' hardcode_shlibpath_var=no case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) # Supported since Solaris 2.6 (maybe 2.5.1?) whole_archive_flag_spec='-z allextract$convenience -z defaultextract' ;; esac link_all_deplibs=yes ;; sunos4*) if test "x$host_vendor" = xsequent; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi hardcode_libdir_flag_spec='-L$libdir' hardcode_direct=yes hardcode_minus_L=yes hardcode_shlibpath_var=no ;; sysv4) case $host_vendor in sni) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' reload_cmds='$CC -r -o $output$reload_objs' hardcode_direct=no ;; motorola) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' hardcode_shlibpath_var=no ;; sysv4.3*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var=no export_dynamic_flag_spec='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes ld_shlibs=yes fi ;; sysv4.2uw2*) archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes hardcode_minus_L=no hardcode_shlibpath_var=no hardcode_runpath_var=yes runpath_var=LD_RUN_PATH ;; sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[78]* | unixware7*) no_undefined_flag='${wl}-z ${wl}text' if test "$GCC" = yes; then archive_cmds='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$CC -G ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' fi runpath_var='LD_RUN_PATH' hardcode_shlibpath_var=no ;; sysv5*) no_undefined_flag=' -z text' # $CC -shared without GNU ld will not create a library from C++ # object files and a static libstdc++, better avoid it by now archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp' hardcode_libdir_flag_spec= hardcode_shlibpath_var=no runpath_var='LD_RUN_PATH' ;; uts4*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-L$libdir' hardcode_shlibpath_var=no ;; *) ld_shlibs=no ;; esac fi echo "$as_me:$LINENO: result: $ld_shlibs" >&5 echo "${ECHO_T}$ld_shlibs" >&6 test "$ld_shlibs" = no && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi # # Do we need to explicitly link libc? # case "x$archive_cmds_need_lc" in x|xyes) # Assume -lc should be added archive_cmds_need_lc=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $archive_cmds in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5 echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6 $rm conftest* printf "$lt_simple_compile_test_code" > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$lt_prog_compiler_wl compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$allow_undefined_flag allow_undefined_flag= if { (eval echo "$as_me:$LINENO: \"$archive_cmds 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5 (eval $archive_cmds 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } then archive_cmds_need_lc=no else archive_cmds_need_lc=yes fi allow_undefined_flag=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $rm conftest* echo "$as_me:$LINENO: result: $archive_cmds_need_lc" >&5 echo "${ECHO_T}$archive_cmds_need_lc" >&6 ;; esac fi ;; esac echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5 echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6 library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=".so" postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" if test "$GCC" = yes; then sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}${shared_ext}$major' ;; aix4* | aix5*) version_type=linux need_lib_prefix=no need_version=no hardcode_into_libs=yes if test "$host_cpu" = ia64; then # AIX 5 supports IA64 library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line `#! .'. This would cause the generated library to # depend on `.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[01] | aix4.[01].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then : else can_build_shared=no fi ;; esac # AIX (on Power*) has no versioning support, so currently we can not hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. if test "$aix_use_runtimelinking" = yes; then # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' else # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='${libname}${release}.a $libname.a' soname_spec='${libname}${release}${shared_ext}$major' fi shlibpath_var=LIBPATH fi ;; amigaos*) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi4*) version_type=linux need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$host_os in yes,cygwin* | yes,mingw* | yes,pw32*) library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $rm \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" ;; mingw*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then # It is most probably a Windows format PATH printed by # mingw gcc, but we are running on Cygwin. Gcc prints its search # path with ; separators, and with drive letters. We can handle the # drive letters (cygwin fileutils understands them), so leave them, # especially as we might pass files found there to a mingw objdump, # which wouldn't understand a cygwinified path. Ahh. sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/./-/g'`${versuffix}${shared_ext}' ;; esac ;; *) library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' ;; esac dynamic_linker='Win32 ld.exe' # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext' soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='$(test .$module = .yes && echo .so || echo .dylib)' # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same. if test "$GCC" = yes; then sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"` else sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib' fi sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd1*) dynamic_linker=no ;; kfreebsd*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='GNU ld.so' ;; freebsd*) objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout` version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2*) shlibpath_overrides_runpath=yes ;; freebsd3.01* | freebsdelf3.01*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; *) # from 3.2 on shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; esac ;; gnu*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case "$host_cpu" in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' if test "X$HPUX_IA64_MODE" = X32; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" fi sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555. postinstall_cmds='chmod 555 $lib' ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test "$lt_cv_prog_gnu_ld" = yes; then version_type=linux else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; # This must be Linux ELF. linux*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # find out which ABI we are using libsuff= case "$host_cpu" in x86_64*|s390x*|powerpc64*) echo '#line 6491 "configure"' > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then case `/usr/bin/file conftest.$ac_objext` in *64-bit*) libsuff=64 sys_lib_search_path_spec="/lib${libsuff} /usr/lib${libsuff} /usr/local/lib${libsuff}" ;; esac fi rm -rf conftest* ;; esac # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then lt_ld_extra=`$SED -e 's/:,\t/ /g;s/=^=*$//;s/=^= * / /g' /etc/ld.so.conf | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib${libsuff} /usr/lib${libsuff} $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; knetbsd*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='GNU ld.so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; nto-qnx*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; openbsd*) version_type=sunos need_lib_prefix=no need_version=yes library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then case $host_os in openbsd2.[89] | openbsd2.[89].*) shlibpath_overrides_runpath=no ;; *) shlibpath_overrides_runpath=yes ;; esac else shlibpath_overrides_runpath=yes fi ;; os2*) libname_spec='$name' shrext_cmds=".dll" need_lib_prefix=no library_names_spec='$libname${shared_ext} $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; sco3.2v5*) version_type=osf soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH ;; solaris*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no export_dynamic_flag_spec='${wl}-Blargedynsym' runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' soname_spec='$libname${shared_ext}.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; uts4*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac echo "$as_me:$LINENO: result: $dynamic_linker" >&5 echo "${ECHO_T}$dynamic_linker" >&6 test "$dynamic_linker" = no && can_build_shared=no echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5 echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6 hardcode_action= if test -n "$hardcode_libdir_flag_spec" || \ test -n "$runpath_var " || \ test "X$hardcode_automatic"="Xyes" ; then # We can hardcode non-existant directories. if test "$hardcode_direct" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, )" != no && test "$hardcode_minus_L" != no; then # Linking always hardcodes the temporary library directory. hardcode_action=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. hardcode_action=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. hardcode_action=unsupported fi echo "$as_me:$LINENO: result: $hardcode_action" >&5 echo "${ECHO_T}$hardcode_action" >&6 if test "$hardcode_action" = relink; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi striplib= old_striplib= echo "$as_me:$LINENO: checking whether stripping libraries is possible" >&5 echo $ECHO_N "checking whether stripping libraries is possible... $ECHO_C" >&6 if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" test -z "$striplib" && striplib="$STRIP --strip-unneeded" echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else # FIXME - insert some real tests, host_os isn't really good enough case $host_os in darwin*) if test -n "$STRIP" ; then striplib="$STRIP -x" echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi ;; *) echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 ;; esac fi if test "x$enable_dlopen" != xyes; then enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown else lt_cv_dlopen=no lt_cv_dlopen_libs= case $host_os in beos*) lt_cv_dlopen="load_add_on" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ;; mingw* | pw32*) lt_cv_dlopen="LoadLibrary" lt_cv_dlopen_libs= ;; cygwin*) lt_cv_dlopen="dlopen" lt_cv_dlopen_libs= ;; darwin*) # if libdl is installed we need to link against it echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5 echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6 if test "${ac_cv_lib_dl_dlopen+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dlopen (); int main () { dlopen (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_dl_dlopen=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_dl_dlopen=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5 echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6 if test $ac_cv_lib_dl_dlopen = yes; then lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" else lt_cv_dlopen="dyld" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes fi ;; *) echo "$as_me:$LINENO: checking for shl_load" >&5 echo $ECHO_N "checking for shl_load... $ECHO_C" >&6 if test "${ac_cv_func_shl_load+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define shl_load to an innocuous variant, in case declares shl_load. For example, HP-UX 11i declares gettimeofday. */ #define shl_load innocuous_shl_load /* System header to define __stub macros and hopefully few prototypes, which can conflict with char shl_load (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef shl_load /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" { #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char shl_load (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_shl_load) || defined (__stub___shl_load) choke me #else char (*f) () = shl_load; #endif #ifdef __cplusplus } #endif int main () { return f != shl_load; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_shl_load=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_func_shl_load=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_func_shl_load" >&5 echo "${ECHO_T}$ac_cv_func_shl_load" >&6 if test $ac_cv_func_shl_load = yes; then lt_cv_dlopen="shl_load" else echo "$as_me:$LINENO: checking for shl_load in -ldld" >&5 echo $ECHO_N "checking for shl_load in -ldld... $ECHO_C" >&6 if test "${ac_cv_lib_dld_shl_load+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char shl_load (); int main () { shl_load (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_dld_shl_load=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_dld_shl_load=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_dld_shl_load" >&5 echo "${ECHO_T}$ac_cv_lib_dld_shl_load" >&6 if test $ac_cv_lib_dld_shl_load = yes; then lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld" else echo "$as_me:$LINENO: checking for dlopen" >&5 echo $ECHO_N "checking for dlopen... $ECHO_C" >&6 if test "${ac_cv_func_dlopen+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define dlopen to an innocuous variant, in case declares dlopen. For example, HP-UX 11i declares gettimeofday. */ #define dlopen innocuous_dlopen /* System header to define __stub macros and hopefully few prototypes, which can conflict with char dlopen (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef dlopen /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" { #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dlopen (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_dlopen) || defined (__stub___dlopen) choke me #else char (*f) () = dlopen; #endif #ifdef __cplusplus } #endif int main () { return f != dlopen; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_dlopen=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_func_dlopen=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_func_dlopen" >&5 echo "${ECHO_T}$ac_cv_func_dlopen" >&6 if test $ac_cv_func_dlopen = yes; then lt_cv_dlopen="dlopen" else echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5 echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6 if test "${ac_cv_lib_dl_dlopen+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dlopen (); int main () { dlopen (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_dl_dlopen=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_dl_dlopen=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5 echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6 if test $ac_cv_lib_dl_dlopen = yes; then lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" else echo "$as_me:$LINENO: checking for dlopen in -lsvld" >&5 echo $ECHO_N "checking for dlopen in -lsvld... $ECHO_C" >&6 if test "${ac_cv_lib_svld_dlopen+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsvld $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dlopen (); int main () { dlopen (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_svld_dlopen=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_svld_dlopen=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_svld_dlopen" >&5 echo "${ECHO_T}$ac_cv_lib_svld_dlopen" >&6 if test $ac_cv_lib_svld_dlopen = yes; then lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" else echo "$as_me:$LINENO: checking for dld_link in -ldld" >&5 echo $ECHO_N "checking for dld_link in -ldld... $ECHO_C" >&6 if test "${ac_cv_lib_dld_dld_link+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dld_link (); int main () { dld_link (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_dld_dld_link=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_dld_dld_link=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_dld_dld_link" >&5 echo "${ECHO_T}$ac_cv_lib_dld_dld_link" >&6 if test $ac_cv_lib_dld_dld_link = yes; then lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld" fi fi fi fi fi fi ;; esac if test "x$lt_cv_dlopen" != xno; then enable_dlopen=yes else enable_dlopen=no fi case $lt_cv_dlopen in dlopen) save_CPPFLAGS="$CPPFLAGS" test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" save_LDFLAGS="$LDFLAGS" eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" save_LIBS="$LIBS" LIBS="$lt_cv_dlopen_libs $LIBS" echo "$as_me:$LINENO: checking whether a program can dlopen itself" >&5 echo $ECHO_N "checking whether a program can dlopen itself... $ECHO_C" >&6 if test "${lt_cv_dlopen_self+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$cross_compiling" = yes; then : lt_cv_dlopen_self=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext < #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif #ifdef __cplusplus extern "C" void exit (int); #endif void fnord() { int i=42;} int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; /* dlclose (self); */ } exit (status); } EOF if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; x$lt_unknown|x*) lt_cv_dlopen_self=no ;; esac else : # compilation failed lt_cv_dlopen_self=no fi fi rm -fr conftest* fi echo "$as_me:$LINENO: result: $lt_cv_dlopen_self" >&5 echo "${ECHO_T}$lt_cv_dlopen_self" >&6 if test "x$lt_cv_dlopen_self" = xyes; then LDFLAGS="$LDFLAGS $link_static_flag" echo "$as_me:$LINENO: checking whether a statically linked program can dlopen itself" >&5 echo $ECHO_N "checking whether a statically linked program can dlopen itself... $ECHO_C" >&6 if test "${lt_cv_dlopen_self_static+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$cross_compiling" = yes; then : lt_cv_dlopen_self_static=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext < #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif #ifdef __cplusplus extern "C" void exit (int); #endif void fnord() { int i=42;} int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; /* dlclose (self); */ } exit (status); } EOF if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_unknown|x*) lt_cv_dlopen_self_static=no ;; esac else : # compilation failed lt_cv_dlopen_self_static=no fi fi rm -fr conftest* fi echo "$as_me:$LINENO: result: $lt_cv_dlopen_self_static" >&5 echo "${ECHO_T}$lt_cv_dlopen_self_static" >&6 fi CPPFLAGS="$save_CPPFLAGS" LDFLAGS="$save_LDFLAGS" LIBS="$save_LIBS" ;; esac case $lt_cv_dlopen_self in yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; *) enable_dlopen_self=unknown ;; esac case $lt_cv_dlopen_self_static in yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; *) enable_dlopen_self_static=unknown ;; esac fi # Report which librarie types wil actually be built echo "$as_me:$LINENO: checking if libtool supports shared libraries" >&5 echo $ECHO_N "checking if libtool supports shared libraries... $ECHO_C" >&6 echo "$as_me:$LINENO: result: $can_build_shared" >&5 echo "${ECHO_T}$can_build_shared" >&6 echo "$as_me:$LINENO: checking whether to build shared libraries" >&5 echo $ECHO_N "checking whether to build shared libraries... $ECHO_C" >&6 test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case "$host_os" in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix4* | aix5*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; darwin* | rhapsody*) if test "$GCC" = yes; then archive_cmds_need_lc=no case "$host_os" in rhapsody* | darwin1.[012]) allow_undefined_flag='-undefined suppress' ;; *) # Darwin 1.3 on if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then allow_undefined_flag='-flat_namespace -undefined suppress' else case ${MACOSX_DEPLOYMENT_TARGET} in 10.[012]) allow_undefined_flag='-flat_namespace -undefined suppress' ;; 10.*) allow_undefined_flag='-undefined dynamic_lookup' ;; esac fi ;; esac output_verbose_link_cmd='echo' archive_cmds='$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs$compiler_flags -install_name $rpath/$soname $verstring' module_cmds='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's archive_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs$compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' module_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' hardcode_direct=no hardcode_automatic=yes hardcode_shlibpath_var=unsupported whole_archive_flag_spec='-all_load $convenience' link_all_deplibs=yes else ld_shlibs=no fi ;; esac echo "$as_me:$LINENO: result: $enable_shared" >&5 echo "${ECHO_T}$enable_shared" >&6 echo "$as_me:$LINENO: checking whether to build static libraries" >&5 echo $ECHO_N "checking whether to build static libraries... $ECHO_C" >&6 # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes echo "$as_me:$LINENO: result: $enable_static" >&5 echo "${ECHO_T}$enable_static" >&6 # The else clause should only fire when bootstrapping the # libtool distribution, otherwise you forgot to ship ltmain.sh # with your package, and you will get complaints that there are # no rules to generate ltmain.sh. if test -f "$ltmain"; then # See if we are running on zsh, and set the options which allow our commands through # without removal of \ escapes. if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi # Now quote all the things that may contain metacharacters while being # careful not to overquote the AC_SUBSTed values. We take copies of the # variables and quote the copies for generation of the libtool script. for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC NM \ SED SHELL STRIP \ libname_spec library_names_spec soname_spec extract_expsyms_cmds \ old_striplib striplib file_magic_cmd finish_cmds finish_eval \ deplibs_check_method reload_flag reload_cmds need_locks \ lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ lt_cv_sys_global_symbol_to_c_name_address \ sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ old_postinstall_cmds old_postuninstall_cmds \ compiler \ CC \ LD \ lt_prog_compiler_wl \ lt_prog_compiler_pic \ lt_prog_compiler_static \ lt_prog_compiler_no_builtin_flag \ export_dynamic_flag_spec \ thread_safe_flag_spec \ whole_archive_flag_spec \ enable_shared_with_static_runtimes \ old_archive_cmds \ old_archive_from_new_cmds \ predep_objects \ postdep_objects \ predeps \ postdeps \ compiler_lib_search_path \ archive_cmds \ archive_expsym_cmds \ postinstall_cmds \ postuninstall_cmds \ old_archive_from_expsyms_cmds \ allow_undefined_flag \ no_undefined_flag \ export_symbols_cmds \ hardcode_libdir_flag_spec \ hardcode_libdir_flag_spec_ld \ hardcode_libdir_separator \ hardcode_automatic \ module_cmds \ module_expsym_cmds \ lt_cv_prog_compiler_c_o \ exclude_expsyms \ include_expsyms; do case $var in old_archive_cmds | \ old_archive_from_new_cmds | \ archive_cmds | \ archive_expsym_cmds | \ module_cmds | \ module_expsym_cmds | \ old_archive_from_expsyms_cmds | \ export_symbols_cmds | \ extract_expsyms_cmds | reload_cmds | finish_cmds | \ postinstall_cmds | postuninstall_cmds | \ old_postinstall_cmds | old_postuninstall_cmds | \ sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) # Double-quote double-evaled strings. eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" ;; *) eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" ;; esac done case $lt_echo in *'\$0 --fallback-echo"') lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` ;; esac cfgfile="${ofile}T" trap "$rm \"$cfgfile\"; exit 1" 1 2 15 $rm -f "$cfgfile" { echo "$as_me:$LINENO: creating $ofile" >&5 echo "$as_me: creating $ofile" >&6;} cat <<__EOF__ >> "$cfgfile" #! $SHELL # `$echo "$cfgfile" | sed 's%^.*/%%'` - Provide generalized library-building support services. # Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP) # NOTE: Changes made to this file will be lost: look at ltmain.sh. # # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001 # Free Software Foundation, Inc. # # This file is part of GNU Libtool: # Originally by Gordon Matzigkeit , 1996 # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # A sed program that does not truncate output. SED=$lt_SED # Sed that helps us avoid accidentally triggering echo(1) options like -n. Xsed="$SED -e s/^X//" # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. if test "X\${CDPATH+set}" = Xset; then CDPATH=:; export CDPATH; fi # The names of the tagged configurations supported by this script. available_tags= # ### BEGIN LIBTOOL CONFIG # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # Shell to use when invoking shell scripts. SHELL=$lt_SHELL # Whether or not to build shared libraries. build_libtool_libs=$enable_shared # Whether or not to build static libraries. build_old_libs=$enable_static # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc # Whether or not to disallow shared libs when runtime libs are static allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes # Whether or not to optimize for fast installation. fast_install=$enable_fast_install # The host system. host_alias=$host_alias host=$host # An echo program that does not interpret backslashes. echo=$lt_echo # The archiver. AR=$lt_AR AR_FLAGS=$lt_AR_FLAGS # A C compiler. LTCC=$lt_LTCC # A language-specific compiler. CC=$lt_compiler # Is the compiler the GNU C compiler? with_gcc=$GCC # An ERE matcher. EGREP=$lt_EGREP # The linker used to build libraries. LD=$lt_LD # Whether we need hard or soft links. LN_S=$lt_LN_S # A BSD-compatible nm program. NM=$lt_NM # A symbol stripping program STRIP=$lt_STRIP # Used to examine libraries when file_magic_cmd begins "file" MAGIC_CMD=$MAGIC_CMD # Used on cygwin: DLL creation program. DLLTOOL="$DLLTOOL" # Used on cygwin: object dumper. OBJDUMP="$OBJDUMP" # Used on cygwin: assembler. AS="$AS" # The name of the directory that contains temporary libtool files. objdir=$objdir # How to create reloadable object files. reload_flag=$lt_reload_flag reload_cmds=$lt_reload_cmds # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl # Object file suffix (normally "o"). objext="$ac_objext" # Old archive suffix (normally "a"). libext="$libext" # Shared library suffix (normally ".so"). shrext_cmds='$shrext_cmds' # Executable file suffix (normally ""). exeext="$exeext" # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic pic_mode=$pic_mode # What is the maximum length of a command? max_cmd_len=$lt_cv_sys_max_cmd_len # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o # Must we lock files when doing compilation ? need_locks=$lt_need_locks # Do we need the lib prefix for modules? need_lib_prefix=$need_lib_prefix # Do we need a version for libraries? need_version=$need_version # Whether dlopen is supported. dlopen_support=$enable_dlopen # Whether dlopen of programs is supported. dlopen_self=$enable_dlopen_self # Whether dlopen of statically linked programs is supported. dlopen_self_static=$enable_dlopen_self_static # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec # Compiler flag to generate thread-safe objects. thread_safe_flag_spec=$lt_thread_safe_flag_spec # Library versioning type. version_type=$version_type # Format of library name prefix. libname_spec=$lt_libname_spec # List of archive names. First name is the real one, the rest are links. # The last name is the one that the linker finds with -lNAME. library_names_spec=$lt_library_names_spec # The coded name of the library, if different from the real name. soname_spec=$lt_soname_spec # Commands used to build and install an old-style archive. RANLIB=$lt_RANLIB old_archive_cmds=$lt_old_archive_cmds old_postinstall_cmds=$lt_old_postinstall_cmds old_postuninstall_cmds=$lt_old_postuninstall_cmds # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds # Commands used to build and install a shared archive. archive_cmds=$lt_archive_cmds archive_expsym_cmds=$lt_archive_expsym_cmds postinstall_cmds=$lt_postinstall_cmds postuninstall_cmds=$lt_postuninstall_cmds # Commands used to build a loadable module (assumed same as above if empty) module_cmds=$lt_module_cmds module_expsym_cmds=$lt_module_expsym_cmds # Commands to strip libraries. old_striplib=$lt_old_striplib striplib=$lt_striplib # Dependencies to place before the objects being linked to create a # shared library. predep_objects=$lt_predep_objects # Dependencies to place after the objects being linked to create a # shared library. postdep_objects=$lt_postdep_objects # Dependencies to place before the objects being linked to create a # shared library. predeps=$lt_predeps # Dependencies to place after the objects being linked to create a # shared library. postdeps=$lt_postdeps # The library search path used internally by the compiler when linking # a shared library. compiler_lib_search_path=$lt_compiler_lib_search_path # Method to check whether dependent libraries are shared objects. deplibs_check_method=$lt_deplibs_check_method # Command to use when deplibs_check_method == file_magic. file_magic_cmd=$lt_file_magic_cmd # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag # Flag that forces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag # Commands used to finish a libtool library installation in a directory. finish_cmds=$lt_finish_cmds # Same as above, but a single script fragment to be evaled but not shown. finish_eval=$lt_finish_eval # Take the output of nm and produce a listing of raw symbols and C names. global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe # Transform the output of nm in a proper C declaration global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl # Transform the output of nm in a C name address pair global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address # This is the shared library runtime path variable. runpath_var=$runpath_var # This is the shared library path variable. shlibpath_var=$shlibpath_var # Is shlibpath searched before the hard-coded library search path? shlibpath_overrides_runpath=$shlibpath_overrides_runpath # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action # Whether we should hardcode library paths into libraries. hardcode_into_libs=$hardcode_into_libs # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist. hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec # If ld is used when linking, flag to hardcode \$libdir into # a binary during linking. This must work even if \$libdir does # not exist. hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld # Whether we need a single -rpath flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator # Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the # resulting binary. hardcode_direct=$hardcode_direct # Set to yes if using the -LDIR flag during linking hardcodes DIR into the # resulting binary. hardcode_minus_L=$hardcode_minus_L # Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into # the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var # Set to yes if building a shared library automatically hardcodes DIR into the library # and all subsequent libraries and executables linked against it. hardcode_automatic=$hardcode_automatic # Variables whose values should be saved in libtool wrapper scripts and # restored at relink time. variables_saved_for_relink="$variables_saved_for_relink" # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs # Compile-time system search path for libraries sys_lib_search_path_spec=$lt_sys_lib_search_path_spec # Run-time system search path for libraries sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec # Fix the shell variable \$srcfile for the compiler. fix_srcfile_path="$fix_srcfile_path" # Set to yes if exported symbols are required. always_export_symbols=$always_export_symbols # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds # The commands to extract the exported symbol list from a shared archive. extract_expsyms_cmds=$lt_extract_expsyms_cmds # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms # Symbols that must always be exported. include_expsyms=$lt_include_expsyms # ### END LIBTOOL CONFIG __EOF__ case $host_os in aix3*) cat <<\EOF >> "$cfgfile" # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi EOF ;; esac # We use sed instead of cat because bash on DJGPP gets confused if # if finds mixed CR/LF and LF-only lines. Since sed operates in # text mode, it properly converts lines to CR/LF. This bash problem # is reportedly fixed, but why not run on old versions too? sed '$q' "$ltmain" >> "$cfgfile" || (rm -f "$cfgfile"; exit 1) mv -f "$cfgfile" "$ofile" || \ (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") chmod +x "$ofile" else # If there is no Makefile yet, we rely on a make rule to execute # `config.status --recheck' to rerun these tests and create the # libtool script then. ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` if test -f "$ltmain_in"; then test -f Makefile && make "$ltmain" fi fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu CC="$lt_save_CC" if test -f "$ltmain"; then if test ! -f "${ofile}"; then { echo "$as_me:$LINENO: WARNING: output file \`$ofile' does not exist" >&5 echo "$as_me: WARNING: output file \`$ofile' does not exist" >&2;} fi if test -z "$LTCC"; then eval "`$SHELL ${ofile} --config | grep '^LTCC='`" if test -z "$LTCC"; then { echo "$as_me:$LINENO: WARNING: output file \`$ofile' does not look like a libtool script" >&5 echo "$as_me: WARNING: output file \`$ofile' does not look like a libtool script" >&2;} else { echo "$as_me:$LINENO: WARNING: using \`LTCC=$LTCC', extracted from \`$ofile'" >&5 echo "$as_me: WARNING: using \`LTCC=$LTCC', extracted from \`$ofile'" >&2;} fi fi fi # This can be used to rebuild libtool when needed LIBTOOL_DEPS="$ac_aux_dir/ltmain.sh" # Always use our own libtool. LIBTOOL='$(SHELL) $(top_builddir)/libtool' # Prevent multiple expansion top_builddir=`pwd` # Check whether --enable-webdav or --disable-webdav was given. if test "${enable_webdav+set}" = set; then enableval="$enable_webdav" fi; if test "$enable_webdav" = "no"; then neon_no_webdav=yes neon_no_acl=yes NEON_NEED_XML_PARSER=no neon_xml_parser_message="none needed" else # Yes, we do need an XML parser. The _BUNDLED macros handle # this normally. NEON_NEED_XML_PARSER=yes fi # The bundled macros also set this, which makes sure we recurse # into the 'src' directory. NEON_BUILD_BUNDLED=yes # Define NEON_VERSION* and make the appropriate substitutions. # Define the current versions. NEON_VERSION_MAJOR=0 NEON_VERSION_MINOR=24 NEON_VERSION_RELEASE=7 NEON_VERSION_TAG= NEON_VERSION="${NEON_VERSION_MAJOR}.${NEON_VERSION_MINOR}.${NEON_VERSION_RELEASE}${NEON_VERSION_TAG}" # libtool library interface versioning. Release policy dictates that # for neon 0.x.y, each x brings an incompatible interface change, and # each y brings no interface change, and since this policy has been # followed since 0.1, x == CURRENT, y == RELEASE, 0 == AGE. For # 1.x.y, this will become N + x == CURRENT, y == RELEASE, x == AGE, # where N is constant (and equal to CURRENT + 1 from the final 0.x # release) NEON_INTERFACE_VERSION="${NEON_VERSION_MINOR}:${NEON_VERSION_RELEASE}:0" cat >>confdefs.h <<_ACEOF #define NEON_VERSION "${NEON_VERSION}" _ACEOF cat >>confdefs.h <<_ACEOF #define NEON_VERSION_MAJOR (${NEON_VERSION_MAJOR}) _ACEOF cat >>confdefs.h <<_ACEOF #define NEON_VERSION_MINOR (${NEON_VERSION_MINOR}) _ACEOF # Pass the interface version on to libtool when linking libneon.la NEON_LINK_FLAGS="-version-info ${NEON_INTERFACE_VERSION}" # Checks to compile test suite ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu echo "$as_me:$LINENO: checking for library containing strerror" >&5 echo $ECHO_N "checking for library containing strerror... $ECHO_C" >&6 if test "${ac_cv_search_strerror+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_func_search_save_LIBS=$LIBS ac_cv_search_strerror=no cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char strerror (); int main () { strerror (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_search_strerror="none required" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test "$ac_cv_search_strerror" = no; then for ac_lib in cposix; do LIBS="-l$ac_lib $ac_func_search_save_LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char strerror (); int main () { strerror (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_search_strerror="-l$ac_lib" break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext done fi LIBS=$ac_func_search_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_search_strerror" >&5 echo "${ECHO_T}$ac_cv_search_strerror" >&6 if test "$ac_cv_search_strerror" != no; then test "$ac_cv_search_strerror" = "none required" || LIBS="$ac_cv_search_strerror $LIBS" fi echo "$as_me:$LINENO: checking for inline" >&5 echo $ECHO_N "checking for inline... $ECHO_C" >&6 if test "${ac_cv_c_inline+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_c_inline=no for ac_kw in inline __inline__ __inline; do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifndef __cplusplus typedef int foo_t; static $ac_kw foo_t static_foo () {return 0; } $ac_kw foo_t foo () {return 0; } #endif _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_c_inline=$ac_kw; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done fi echo "$as_me:$LINENO: result: $ac_cv_c_inline" >&5 echo "${ECHO_T}$ac_cv_c_inline" >&6 case $ac_cv_c_inline in inline | yes) ;; *) case $ac_cv_c_inline in no) ac_val=;; *) ac_val=$ac_cv_c_inline;; esac cat >>confdefs.h <<_ACEOF #ifndef __cplusplus #define inline $ac_val #endif _ACEOF ;; esac echo "$as_me:$LINENO: checking for an ANSI C-conforming const" >&5 echo $ECHO_N "checking for an ANSI C-conforming const... $ECHO_C" >&6 if test "${ac_cv_c_const+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { /* FIXME: Include the comments suggested by Paul. */ #ifndef __cplusplus /* Ultrix mips cc rejects this. */ typedef int charset[2]; const charset x; /* SunOS 4.1.1 cc rejects this. */ char const *const *ccp; char **p; /* NEC SVR4.0.2 mips cc rejects this. */ struct point {int x, y;}; static struct point const zero = {0,0}; /* AIX XL C 1.02.0.0 rejects this. It does not let you subtract one const X* pointer from another in an arm of an if-expression whose if-part is not a constant expression */ const char *g = "string"; ccp = &g + (g ? g-g : 0); /* HPUX 7.0 cc rejects these. */ ++ccp; p = (char**) ccp; ccp = (char const *const *) p; { /* SCO 3.2v4 cc rejects this. */ char *t; char const *s = 0 ? (char *) 0 : (char const *) 0; *t++ = 0; } { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */ int x[] = {25, 17}; const int *foo = &x[0]; ++foo; } { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */ typedef const int *iptr; iptr p = 0; ++p; } { /* AIX XL C 1.02.0.0 rejects this saying "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */ struct s { int j; const int *ap[3]; }; struct s *b; b->j = 5; } { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ const int foo = 10; } #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_c_const=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_c_const=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_c_const" >&5 echo "${ECHO_T}$ac_cv_c_const" >&6 if test $ac_cv_c_const = no; then cat >>confdefs.h <<\_ACEOF #define const _ACEOF fi echo "$as_me:$LINENO: checking for size_t" >&5 echo $ECHO_N "checking for size_t... $ECHO_C" >&6 if test "${ac_cv_type_size_t+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { if ((size_t *) 0) return 0; if (sizeof (size_t)) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_type_size_t=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_type_size_t=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_type_size_t" >&5 echo "${ECHO_T}$ac_cv_type_size_t" >&6 if test $ac_cv_type_size_t = yes; then : else cat >>confdefs.h <<_ACEOF #define size_t unsigned _ACEOF fi echo "$as_me:$LINENO: checking for off_t" >&5 echo $ECHO_N "checking for off_t... $ECHO_C" >&6 if test "${ac_cv_type_off_t+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { if ((off_t *) 0) return 0; if (sizeof (off_t)) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_type_off_t=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_type_off_t=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_type_off_t" >&5 echo "${ECHO_T}$ac_cv_type_off_t" >&6 if test $ac_cv_type_off_t = yes; then : else cat >>confdefs.h <<_ACEOF #define off_t long _ACEOF fi # Check for Darwin, which needs extra cpp and linker flags. echo "$as_me:$LINENO: checking for Darwin" >&5 echo $ECHO_N "checking for Darwin... $ECHO_C" >&6 if test "${ne_cv_os_macosx+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case `uname -s 2>/dev/null` in Darwin) ne_cv_os_macosx=yes ;; *) ne_cv_os_macosx=no ;; esac fi echo "$as_me:$LINENO: result: $ne_cv_os_macosx" >&5 echo "${ECHO_T}$ne_cv_os_macosx" >&6 if test $ne_cv_os_macosx = yes; then CPPFLAGS="$CPPFLAGS -no-cpp-precomp" LDFLAGS="$LDFLAGS -flat_namespace" fi echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5 echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6 set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y,:./+-,___p_,'` if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.make <<\_ACEOF all: @echo 'ac_maketemp="$(MAKE)"' _ACEOF # GNU make sometimes prints "make[1]: Entering...", which would confuse us. eval `${MAKE-make} -f conftest.make 2>/dev/null | grep temp=` if test -n "$ac_maketemp"; then eval ac_cv_prog_make_${ac_make}_set=yes else eval ac_cv_prog_make_${ac_make}_set=no fi rm -f conftest.make fi if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 SET_MAKE= else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 SET_MAKE="MAKE=${MAKE-make}" fi echo "$as_me:$LINENO: checking for int" >&5 echo $ECHO_N "checking for int... $ECHO_C" >&6 if test "${ac_cv_type_int+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { if ((int *) 0) return 0; if (sizeof (int)) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_type_int=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_type_int=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_type_int" >&5 echo "${ECHO_T}$ac_cv_type_int" >&6 echo "$as_me:$LINENO: checking size of int" >&5 echo $ECHO_N "checking size of int... $ECHO_C" >&6 if test "${ac_cv_sizeof_int+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$ac_cv_type_int" = yes; then # The cast to unsigned long works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. if test "$cross_compiling" = yes; then # Depending upon the size, compute the lo and hi bounds. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (int))) >= 0)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_lo=0 ac_mid=0 while :; do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (int))) <= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=$ac_mid; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo=`expr $ac_mid + 1` if test $ac_lo -le $ac_mid; then ac_lo= ac_hi= break fi ac_mid=`expr 2 '*' $ac_mid + 1` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (int))) < 0)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=-1 ac_mid=-1 while :; do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (int))) >= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_lo=$ac_mid; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_hi=`expr '(' $ac_mid ')' - 1` if test $ac_mid -le $ac_hi; then ac_lo= ac_hi= break fi ac_mid=`expr 2 '*' $ac_mid` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo= ac_hi= fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext # Binary search between lo and hi bounds. while test "x$ac_lo" != "x$ac_hi"; do ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (int))) <= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=$ac_mid else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo=`expr '(' $ac_mid ')' + 1` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done case $ac_lo in ?*) ac_cv_sizeof_int=$ac_lo;; '') { { echo "$as_me:$LINENO: error: cannot compute sizeof (int), 77 See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute sizeof (int), 77 See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } ;; esac else if test "$cross_compiling" = yes; then { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling See \`config.log' for more details." >&5 echo "$as_me: error: cannot run test program while cross compiling See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default long longval () { return (long) (sizeof (int)); } unsigned long ulongval () { return (long) (sizeof (int)); } #include #include int main () { FILE *f = fopen ("conftest.val", "w"); if (! f) exit (1); if (((long) (sizeof (int))) < 0) { long i = longval (); if (i != ((long) (sizeof (int)))) exit (1); fprintf (f, "%ld\n", i); } else { unsigned long i = ulongval (); if (i != ((long) (sizeof (int)))) exit (1); fprintf (f, "%lu\n", i); } exit (ferror (f) || fclose (f) != 0); ; return 0; } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_sizeof_int=`cat conftest.val` else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) { { echo "$as_me:$LINENO: error: cannot compute sizeof (int), 77 See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute sizeof (int), 77 See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi rm -f conftest.val else ac_cv_sizeof_int=0 fi fi echo "$as_me:$LINENO: result: $ac_cv_sizeof_int" >&5 echo "${ECHO_T}$ac_cv_sizeof_int" >&6 cat >>confdefs.h <<_ACEOF #define SIZEOF_INT $ac_cv_sizeof_int _ACEOF echo "$as_me:$LINENO: checking for long" >&5 echo $ECHO_N "checking for long... $ECHO_C" >&6 if test "${ac_cv_type_long+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { if ((long *) 0) return 0; if (sizeof (long)) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_type_long=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_type_long=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_type_long" >&5 echo "${ECHO_T}$ac_cv_type_long" >&6 echo "$as_me:$LINENO: checking size of long" >&5 echo $ECHO_N "checking size of long... $ECHO_C" >&6 if test "${ac_cv_sizeof_long+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$ac_cv_type_long" = yes; then # The cast to unsigned long works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. if test "$cross_compiling" = yes; then # Depending upon the size, compute the lo and hi bounds. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (long))) >= 0)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_lo=0 ac_mid=0 while :; do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (long))) <= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=$ac_mid; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo=`expr $ac_mid + 1` if test $ac_lo -le $ac_mid; then ac_lo= ac_hi= break fi ac_mid=`expr 2 '*' $ac_mid + 1` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (long))) < 0)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=-1 ac_mid=-1 while :; do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (long))) >= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_lo=$ac_mid; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_hi=`expr '(' $ac_mid ')' - 1` if test $ac_mid -le $ac_hi; then ac_lo= ac_hi= break fi ac_mid=`expr 2 '*' $ac_mid` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo= ac_hi= fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext # Binary search between lo and hi bounds. while test "x$ac_lo" != "x$ac_hi"; do ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (long))) <= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=$ac_mid else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo=`expr '(' $ac_mid ')' + 1` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done case $ac_lo in ?*) ac_cv_sizeof_long=$ac_lo;; '') { { echo "$as_me:$LINENO: error: cannot compute sizeof (long), 77 See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute sizeof (long), 77 See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } ;; esac else if test "$cross_compiling" = yes; then { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling See \`config.log' for more details." >&5 echo "$as_me: error: cannot run test program while cross compiling See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default long longval () { return (long) (sizeof (long)); } unsigned long ulongval () { return (long) (sizeof (long)); } #include #include int main () { FILE *f = fopen ("conftest.val", "w"); if (! f) exit (1); if (((long) (sizeof (long))) < 0) { long i = longval (); if (i != ((long) (sizeof (long)))) exit (1); fprintf (f, "%ld\n", i); } else { unsigned long i = ulongval (); if (i != ((long) (sizeof (long)))) exit (1); fprintf (f, "%lu\n", i); } exit (ferror (f) || fclose (f) != 0); ; return 0; } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_sizeof_long=`cat conftest.val` else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) { { echo "$as_me:$LINENO: error: cannot compute sizeof (long), 77 See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute sizeof (long), 77 See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi rm -f conftest.val else ac_cv_sizeof_long=0 fi fi echo "$as_me:$LINENO: result: $ac_cv_sizeof_long" >&5 echo "${ECHO_T}$ac_cv_sizeof_long" >&6 cat >>confdefs.h <<_ACEOF #define SIZEOF_LONG $ac_cv_sizeof_long _ACEOF echo "$as_me:$LINENO: checking for long long" >&5 echo $ECHO_N "checking for long long... $ECHO_C" >&6 if test "${ac_cv_type_long_long+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { if ((long long *) 0) return 0; if (sizeof (long long)) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_type_long_long=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_type_long_long=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_type_long_long" >&5 echo "${ECHO_T}$ac_cv_type_long_long" >&6 echo "$as_me:$LINENO: checking size of long long" >&5 echo $ECHO_N "checking size of long long... $ECHO_C" >&6 if test "${ac_cv_sizeof_long_long+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$ac_cv_type_long_long" = yes; then # The cast to unsigned long works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. if test "$cross_compiling" = yes; then # Depending upon the size, compute the lo and hi bounds. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (long long))) >= 0)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_lo=0 ac_mid=0 while :; do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (long long))) <= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=$ac_mid; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo=`expr $ac_mid + 1` if test $ac_lo -le $ac_mid; then ac_lo= ac_hi= break fi ac_mid=`expr 2 '*' $ac_mid + 1` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (long long))) < 0)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=-1 ac_mid=-1 while :; do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (long long))) >= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_lo=$ac_mid; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_hi=`expr '(' $ac_mid ')' - 1` if test $ac_mid -le $ac_hi; then ac_lo= ac_hi= break fi ac_mid=`expr 2 '*' $ac_mid` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo= ac_hi= fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext # Binary search between lo and hi bounds. while test "x$ac_lo" != "x$ac_hi"; do ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (long long))) <= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=$ac_mid else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo=`expr '(' $ac_mid ')' + 1` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done case $ac_lo in ?*) ac_cv_sizeof_long_long=$ac_lo;; '') { { echo "$as_me:$LINENO: error: cannot compute sizeof (long long), 77 See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute sizeof (long long), 77 See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } ;; esac else if test "$cross_compiling" = yes; then { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling See \`config.log' for more details." >&5 echo "$as_me: error: cannot run test program while cross compiling See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default long longval () { return (long) (sizeof (long long)); } unsigned long ulongval () { return (long) (sizeof (long long)); } #include #include int main () { FILE *f = fopen ("conftest.val", "w"); if (! f) exit (1); if (((long) (sizeof (long long))) < 0) { long i = longval (); if (i != ((long) (sizeof (long long)))) exit (1); fprintf (f, "%ld\n", i); } else { unsigned long i = ulongval (); if (i != ((long) (sizeof (long long)))) exit (1); fprintf (f, "%lu\n", i); } exit (ferror (f) || fclose (f) != 0); ; return 0; } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_sizeof_long_long=`cat conftest.val` else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) { { echo "$as_me:$LINENO: error: cannot compute sizeof (long long), 77 See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute sizeof (long long), 77 See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi rm -f conftest.val else ac_cv_sizeof_long_long=0 fi fi echo "$as_me:$LINENO: result: $ac_cv_sizeof_long_long" >&5 echo "${ECHO_T}$ac_cv_sizeof_long_long" >&6 cat >>confdefs.h <<_ACEOF #define SIZEOF_LONG_LONG $ac_cv_sizeof_long_long _ACEOF if test "$GCC" = "yes"; then echo "$as_me:$LINENO: checking for gcc -Wformat -Werror sanity" >&5 echo $ECHO_N "checking for gcc -Wformat -Werror sanity... $ECHO_C" >&6 if test "${ne_cv_cc_werror+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # See whether a simple test program will compile without errors. ne_save_CPPFLAGS=$CPPFLAGS CPPFLAGS="$CPPFLAGS -Wformat -Werror" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include int main () { int i = 42; printf("%d", i); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ne_cv_cc_werror=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ne_cv_cc_werror=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext CPPFLAGS=$ne_save_CPPFLAGS fi echo "$as_me:$LINENO: result: $ne_cv_cc_werror" >&5 echo "${ECHO_T}$ne_cv_cc_werror" >&6 ne_fmt_trycompile=$ne_cv_cc_werror else ne_fmt_trycompile=no fi # These checks are done whether or not the bundled neon build # is used. for ac_header in errno.h stdarg.h string.h stdlib.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` if eval "test \"\${$as_ac_Header+set}\" = set"; then echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 else # Is the header compilable? echo "$as_me:$LINENO: checking $ac_header usability" >&5 echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6 # Is the header present? echo "$as_me:$LINENO: checking $ac_header presence" >&5 echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_c_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6 # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in yes:no: ) { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX ## ------------------------------ ## ## Report this to neon@webdav.org ## ## ------------------------------ ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 fi if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done echo "$as_me:$LINENO: checking for size_t" >&5 echo $ECHO_N "checking for size_t... $ECHO_C" >&6 if test "${ac_cv_type_size_t+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { if ((size_t *) 0) return 0; if (sizeof (size_t)) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_type_size_t=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_type_size_t=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_type_size_t" >&5 echo "${ECHO_T}$ac_cv_type_size_t" >&6 echo "$as_me:$LINENO: checking size of size_t" >&5 echo $ECHO_N "checking size of size_t... $ECHO_C" >&6 if test "${ac_cv_sizeof_size_t+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$ac_cv_type_size_t" = yes; then # The cast to unsigned long works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. if test "$cross_compiling" = yes; then # Depending upon the size, compute the lo and hi bounds. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (size_t))) >= 0)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_lo=0 ac_mid=0 while :; do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (size_t))) <= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=$ac_mid; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo=`expr $ac_mid + 1` if test $ac_lo -le $ac_mid; then ac_lo= ac_hi= break fi ac_mid=`expr 2 '*' $ac_mid + 1` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (size_t))) < 0)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=-1 ac_mid=-1 while :; do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (size_t))) >= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_lo=$ac_mid; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_hi=`expr '(' $ac_mid ')' - 1` if test $ac_mid -le $ac_hi; then ac_lo= ac_hi= break fi ac_mid=`expr 2 '*' $ac_mid` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo= ac_hi= fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext # Binary search between lo and hi bounds. while test "x$ac_lo" != "x$ac_hi"; do ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (size_t))) <= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=$ac_mid else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo=`expr '(' $ac_mid ')' + 1` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done case $ac_lo in ?*) ac_cv_sizeof_size_t=$ac_lo;; '') { { echo "$as_me:$LINENO: error: cannot compute sizeof (size_t), 77 See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute sizeof (size_t), 77 See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } ;; esac else if test "$cross_compiling" = yes; then { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling See \`config.log' for more details." >&5 echo "$as_me: error: cannot run test program while cross compiling See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default long longval () { return (long) (sizeof (size_t)); } unsigned long ulongval () { return (long) (sizeof (size_t)); } #include #include int main () { FILE *f = fopen ("conftest.val", "w"); if (! f) exit (1); if (((long) (sizeof (size_t))) < 0) { long i = longval (); if (i != ((long) (sizeof (size_t)))) exit (1); fprintf (f, "%ld\n", i); } else { unsigned long i = ulongval (); if (i != ((long) (sizeof (size_t)))) exit (1); fprintf (f, "%lu\n", i); } exit (ferror (f) || fclose (f) != 0); ; return 0; } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_sizeof_size_t=`cat conftest.val` else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) { { echo "$as_me:$LINENO: error: cannot compute sizeof (size_t), 77 See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute sizeof (size_t), 77 See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi rm -f conftest.val else ac_cv_sizeof_size_t=0 fi fi echo "$as_me:$LINENO: result: $ac_cv_sizeof_size_t" >&5 echo "${ECHO_T}$ac_cv_sizeof_size_t" >&6 cat >>confdefs.h <<_ACEOF #define SIZEOF_SIZE_T $ac_cv_sizeof_size_t _ACEOF echo "$as_me:$LINENO: checking how to print size_t" >&5 echo $ECHO_N "checking how to print size_t... $ECHO_C" >&6 if test "${ne_cv_fmt_size_t+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ne_cv_fmt_size_t=none if test $ne_fmt_trycompile = yes; then oflags="$CPPFLAGS" # Consider format string mismatches as errors CPPFLAGS="$CPPFLAGS -Wformat -Werror" for str in u lu qu; do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include int main () { size_t i = 1; printf("%$str", i); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ne_cv_fmt_size_t=$str; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done CPPFLAGS=$oflags else # Best guess. Don't have to be too precise since we probably won't # get a warning message anyway. case $ac_cv_sizeof_size_t in $ac_cv_sizeof_int) ne_cv_fmt_size_t="u" ;; $ac_cv_sizeof_long) ne_cv_fmt_size_t="lu" ;; $ac_cv_sizeof_long_long) ne_cv_fmt_size_t="llu" ;; esac fi fi echo "$as_me:$LINENO: result: $ne_cv_fmt_size_t" >&5 echo "${ECHO_T}$ne_cv_fmt_size_t" >&6 if test "x$ne_cv_fmt_size_t" = "xnone"; then { { echo "$as_me:$LINENO: error: format string for size_t not found" >&5 echo "$as_me: error: format string for size_t not found" >&2;} { (exit 1); exit 1; }; } fi cat >>confdefs.h <<_ACEOF #define NE_FMT_SIZE_T "$ne_cv_fmt_size_t" _ACEOF echo "$as_me:$LINENO: checking for off_t" >&5 echo $ECHO_N "checking for off_t... $ECHO_C" >&6 if test "${ac_cv_type_off_t+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { if ((off_t *) 0) return 0; if (sizeof (off_t)) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_type_off_t=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_type_off_t=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_type_off_t" >&5 echo "${ECHO_T}$ac_cv_type_off_t" >&6 echo "$as_me:$LINENO: checking size of off_t" >&5 echo $ECHO_N "checking size of off_t... $ECHO_C" >&6 if test "${ac_cv_sizeof_off_t+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$ac_cv_type_off_t" = yes; then # The cast to unsigned long works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. if test "$cross_compiling" = yes; then # Depending upon the size, compute the lo and hi bounds. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (off_t))) >= 0)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_lo=0 ac_mid=0 while :; do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (off_t))) <= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=$ac_mid; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo=`expr $ac_mid + 1` if test $ac_lo -le $ac_mid; then ac_lo= ac_hi= break fi ac_mid=`expr 2 '*' $ac_mid + 1` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (off_t))) < 0)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=-1 ac_mid=-1 while :; do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (off_t))) >= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_lo=$ac_mid; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_hi=`expr '(' $ac_mid ')' - 1` if test $ac_mid -le $ac_hi; then ac_lo= ac_hi= break fi ac_mid=`expr 2 '*' $ac_mid` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo= ac_hi= fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext # Binary search between lo and hi bounds. while test "x$ac_lo" != "x$ac_hi"; do ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (off_t))) <= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=$ac_mid else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo=`expr '(' $ac_mid ')' + 1` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done case $ac_lo in ?*) ac_cv_sizeof_off_t=$ac_lo;; '') { { echo "$as_me:$LINENO: error: cannot compute sizeof (off_t), 77 See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute sizeof (off_t), 77 See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } ;; esac else if test "$cross_compiling" = yes; then { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling See \`config.log' for more details." >&5 echo "$as_me: error: cannot run test program while cross compiling See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default long longval () { return (long) (sizeof (off_t)); } unsigned long ulongval () { return (long) (sizeof (off_t)); } #include #include int main () { FILE *f = fopen ("conftest.val", "w"); if (! f) exit (1); if (((long) (sizeof (off_t))) < 0) { long i = longval (); if (i != ((long) (sizeof (off_t)))) exit (1); fprintf (f, "%ld\n", i); } else { unsigned long i = ulongval (); if (i != ((long) (sizeof (off_t)))) exit (1); fprintf (f, "%lu\n", i); } exit (ferror (f) || fclose (f) != 0); ; return 0; } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_sizeof_off_t=`cat conftest.val` else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) { { echo "$as_me:$LINENO: error: cannot compute sizeof (off_t), 77 See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute sizeof (off_t), 77 See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi rm -f conftest.val else ac_cv_sizeof_off_t=0 fi fi echo "$as_me:$LINENO: result: $ac_cv_sizeof_off_t" >&5 echo "${ECHO_T}$ac_cv_sizeof_off_t" >&6 cat >>confdefs.h <<_ACEOF #define SIZEOF_OFF_T $ac_cv_sizeof_off_t _ACEOF echo "$as_me:$LINENO: checking how to print off_t" >&5 echo $ECHO_N "checking how to print off_t... $ECHO_C" >&6 if test "${ne_cv_fmt_off_t+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ne_cv_fmt_off_t=none if test $ne_fmt_trycompile = yes; then oflags="$CPPFLAGS" # Consider format string mismatches as errors CPPFLAGS="$CPPFLAGS -Wformat -Werror" for str in d ld qd; do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include int main () { off_t i = 1; printf("%$str", i); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ne_cv_fmt_off_t=$str; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done CPPFLAGS=$oflags else # Best guess. Don't have to be too precise since we probably won't # get a warning message anyway. case $ac_cv_sizeof_off_t in $ac_cv_sizeof_int) ne_cv_fmt_off_t="d" ;; $ac_cv_sizeof_long) ne_cv_fmt_off_t="ld" ;; $ac_cv_sizeof_long_long) ne_cv_fmt_off_t="lld" ;; esac fi fi echo "$as_me:$LINENO: result: $ne_cv_fmt_off_t" >&5 echo "${ECHO_T}$ne_cv_fmt_off_t" >&6 if test "x$ne_cv_fmt_off_t" = "xnone"; then { { echo "$as_me:$LINENO: error: format string for off_t not found" >&5 echo "$as_me: error: format string for off_t not found" >&2;} { (exit 1); exit 1; }; } fi cat >>confdefs.h <<_ACEOF #define NE_FMT_OFF_T "$ne_cv_fmt_off_t" _ACEOF echo "$as_me:$LINENO: checking for ssize_t" >&5 echo $ECHO_N "checking for ssize_t... $ECHO_C" >&6 if test "${ac_cv_type_ssize_t+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { if ((ssize_t *) 0) return 0; if (sizeof (ssize_t)) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_type_ssize_t=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_type_ssize_t=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_type_ssize_t" >&5 echo "${ECHO_T}$ac_cv_type_ssize_t" >&6 echo "$as_me:$LINENO: checking size of ssize_t" >&5 echo $ECHO_N "checking size of ssize_t... $ECHO_C" >&6 if test "${ac_cv_sizeof_ssize_t+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$ac_cv_type_ssize_t" = yes; then # The cast to unsigned long works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. if test "$cross_compiling" = yes; then # Depending upon the size, compute the lo and hi bounds. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (ssize_t))) >= 0)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_lo=0 ac_mid=0 while :; do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (ssize_t))) <= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=$ac_mid; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo=`expr $ac_mid + 1` if test $ac_lo -le $ac_mid; then ac_lo= ac_hi= break fi ac_mid=`expr 2 '*' $ac_mid + 1` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (ssize_t))) < 0)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=-1 ac_mid=-1 while :; do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (ssize_t))) >= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_lo=$ac_mid; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_hi=`expr '(' $ac_mid ')' - 1` if test $ac_mid -le $ac_hi; then ac_lo= ac_hi= break fi ac_mid=`expr 2 '*' $ac_mid` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo= ac_hi= fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext # Binary search between lo and hi bounds. while test "x$ac_lo" != "x$ac_hi"; do ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (ssize_t))) <= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=$ac_mid else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo=`expr '(' $ac_mid ')' + 1` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done case $ac_lo in ?*) ac_cv_sizeof_ssize_t=$ac_lo;; '') { { echo "$as_me:$LINENO: error: cannot compute sizeof (ssize_t), 77 See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute sizeof (ssize_t), 77 See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } ;; esac else if test "$cross_compiling" = yes; then { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling See \`config.log' for more details." >&5 echo "$as_me: error: cannot run test program while cross compiling See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default long longval () { return (long) (sizeof (ssize_t)); } unsigned long ulongval () { return (long) (sizeof (ssize_t)); } #include #include int main () { FILE *f = fopen ("conftest.val", "w"); if (! f) exit (1); if (((long) (sizeof (ssize_t))) < 0) { long i = longval (); if (i != ((long) (sizeof (ssize_t)))) exit (1); fprintf (f, "%ld\n", i); } else { unsigned long i = ulongval (); if (i != ((long) (sizeof (ssize_t)))) exit (1); fprintf (f, "%lu\n", i); } exit (ferror (f) || fclose (f) != 0); ; return 0; } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_sizeof_ssize_t=`cat conftest.val` else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) { { echo "$as_me:$LINENO: error: cannot compute sizeof (ssize_t), 77 See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute sizeof (ssize_t), 77 See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi rm -f conftest.val else ac_cv_sizeof_ssize_t=0 fi fi echo "$as_me:$LINENO: result: $ac_cv_sizeof_ssize_t" >&5 echo "${ECHO_T}$ac_cv_sizeof_ssize_t" >&6 cat >>confdefs.h <<_ACEOF #define SIZEOF_SSIZE_T $ac_cv_sizeof_ssize_t _ACEOF echo "$as_me:$LINENO: checking how to print ssize_t" >&5 echo $ECHO_N "checking how to print ssize_t... $ECHO_C" >&6 if test "${ne_cv_fmt_ssize_t+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ne_cv_fmt_ssize_t=none if test $ne_fmt_trycompile = yes; then oflags="$CPPFLAGS" # Consider format string mismatches as errors CPPFLAGS="$CPPFLAGS -Wformat -Werror" for str in d ld qd; do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include int main () { ssize_t i = 1; printf("%$str", i); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ne_cv_fmt_ssize_t=$str; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done CPPFLAGS=$oflags else # Best guess. Don't have to be too precise since we probably won't # get a warning message anyway. case $ac_cv_sizeof_ssize_t in $ac_cv_sizeof_int) ne_cv_fmt_ssize_t="d" ;; $ac_cv_sizeof_long) ne_cv_fmt_ssize_t="ld" ;; $ac_cv_sizeof_long_long) ne_cv_fmt_ssize_t="lld" ;; esac fi fi echo "$as_me:$LINENO: result: $ne_cv_fmt_ssize_t" >&5 echo "${ECHO_T}$ne_cv_fmt_ssize_t" >&6 if test "x$ne_cv_fmt_ssize_t" = "xnone"; then { { echo "$as_me:$LINENO: error: format string for ssize_t not found" >&5 echo "$as_me: error: format string for ssize_t not found" >&2;} { (exit 1); exit 1; }; } fi cat >>confdefs.h <<_ACEOF #define NE_FMT_SSIZE_T "$ne_cv_fmt_ssize_t" _ACEOF echo "$as_me:$LINENO: checking for pid_t" >&5 echo $ECHO_N "checking for pid_t... $ECHO_C" >&6 if test "${ac_cv_type_pid_t+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { if ((pid_t *) 0) return 0; if (sizeof (pid_t)) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_type_pid_t=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_type_pid_t=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_type_pid_t" >&5 echo "${ECHO_T}$ac_cv_type_pid_t" >&6 if test $ac_cv_type_pid_t = yes; then : else cat >>confdefs.h <<_ACEOF #define pid_t int _ACEOF fi echo "$as_me:$LINENO: checking whether time.h and sys/time.h may both be included" >&5 echo $ECHO_N "checking whether time.h and sys/time.h may both be included... $ECHO_C" >&6 if test "${ac_cv_header_time+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #include int main () { if ((struct tm *) 0) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_header_time=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_header_time=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_header_time" >&5 echo "${ECHO_T}$ac_cv_header_time" >&6 if test $ac_cv_header_time = yes; then cat >>confdefs.h <<\_ACEOF #define TIME_WITH_SYS_TIME 1 _ACEOF fi # Search in /usr/ccs/bin for Solaris ne_PATH=$PATH:/usr/ccs/bin if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. set dummy ${ac_tool_prefix}ar; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_path_AR+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case $AR in [\\/]* | ?:[\\/]*) ac_cv_path_AR="$AR" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $ne_PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_AR="$as_dir/$ac_word$ac_exec_ext" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done ;; esac fi AR=$ac_cv_path_AR if test -n "$AR"; then echo "$as_me:$LINENO: result: $AR" >&5 echo "${ECHO_T}$AR" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$ac_cv_path_AR"; then ac_pt_AR=$AR # Extract the first word of "ar", so it can be a program name with args. set dummy ar; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_path_ac_pt_AR+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case $ac_pt_AR in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_AR="$ac_pt_AR" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $ne_PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_AR="$as_dir/$ac_word$ac_exec_ext" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_path_ac_pt_AR" && ac_cv_path_ac_pt_AR="notfound" ;; esac fi ac_pt_AR=$ac_cv_path_ac_pt_AR if test -n "$ac_pt_AR"; then echo "$as_me:$LINENO: result: $ac_pt_AR" >&5 echo "${ECHO_T}$ac_pt_AR" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi AR=$ac_pt_AR else AR="$ac_cv_path_AR" fi if test "x$AR" = "xnotfound"; then { { echo "$as_me:$LINENO: error: could not find ar tool" >&5 echo "$as_me: error: could not find ar tool" >&2;} { (exit 1); exit 1; }; } fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_path_RANLIB+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case $RANLIB in [\\/]* | ?:[\\/]*) ac_cv_path_RANLIB="$RANLIB" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $ne_PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_RANLIB="$as_dir/$ac_word$ac_exec_ext" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done ;; esac fi RANLIB=$ac_cv_path_RANLIB if test -n "$RANLIB"; then echo "$as_me:$LINENO: result: $RANLIB" >&5 echo "${ECHO_T}$RANLIB" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$ac_cv_path_RANLIB"; then ac_pt_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_path_ac_pt_RANLIB+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case $ac_pt_RANLIB in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_RANLIB="$ac_pt_RANLIB" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $ne_PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_RANLIB="$as_dir/$ac_word$ac_exec_ext" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_path_ac_pt_RANLIB" && ac_cv_path_ac_pt_RANLIB=":" ;; esac fi ac_pt_RANLIB=$ac_cv_path_ac_pt_RANLIB if test -n "$ac_pt_RANLIB"; then echo "$as_me:$LINENO: result: $ac_pt_RANLIB" >&5 echo "${ECHO_T}$ac_pt_RANLIB" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi RANLIB=$ac_pt_RANLIB else RANLIB="$ac_cv_path_RANLIB" fi for ac_header in sys/time.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` if eval "test \"\${$as_ac_Header+set}\" = set"; then echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 else # Is the header compilable? echo "$as_me:$LINENO: checking $ac_header usability" >&5 echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6 # Is the header present? echo "$as_me:$LINENO: checking $ac_header presence" >&5 echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_c_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6 # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in yes:no: ) { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX ## ------------------------------ ## ## Report this to neon@webdav.org ## ## ------------------------------ ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 fi if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_func in pipe isatty usleep shutdown do as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` echo "$as_me:$LINENO: checking for $ac_func" >&5 echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 if eval "test \"\${$as_ac_var+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define $ac_func to an innocuous variant, in case declares $ac_func. For example, HP-UX 11i declares gettimeofday. */ #define $ac_func innocuous_$ac_func /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $ac_func (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $ac_func /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" { #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char $ac_func (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_$ac_func) || defined (__stub___$ac_func) choke me #else char (*f) () = $ac_func; #endif #ifdef __cplusplus } #endif int main () { return f != $ac_func; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then eval "$as_ac_var=yes" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_var=no" fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 if test `eval echo '${'$as_ac_var'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done echo "$as_me:$LINENO: checking for time_t" >&5 echo $ECHO_N "checking for time_t... $ECHO_C" >&6 if test "${ac_cv_type_time_t+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { if ((time_t *) 0) return 0; if (sizeof (time_t)) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_type_time_t=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_type_time_t=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_type_time_t" >&5 echo "${ECHO_T}$ac_cv_type_time_t" >&6 echo "$as_me:$LINENO: checking size of time_t" >&5 echo $ECHO_N "checking size of time_t... $ECHO_C" >&6 if test "${ac_cv_sizeof_time_t+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$ac_cv_type_time_t" = yes; then # The cast to unsigned long works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. if test "$cross_compiling" = yes; then # Depending upon the size, compute the lo and hi bounds. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (time_t))) >= 0)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_lo=0 ac_mid=0 while :; do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (time_t))) <= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=$ac_mid; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo=`expr $ac_mid + 1` if test $ac_lo -le $ac_mid; then ac_lo= ac_hi= break fi ac_mid=`expr 2 '*' $ac_mid + 1` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (time_t))) < 0)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=-1 ac_mid=-1 while :; do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (time_t))) >= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_lo=$ac_mid; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_hi=`expr '(' $ac_mid ')' - 1` if test $ac_mid -le $ac_hi; then ac_lo= ac_hi= break fi ac_mid=`expr 2 '*' $ac_mid` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo= ac_hi= fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext # Binary search between lo and hi bounds. while test "x$ac_lo" != "x$ac_hi"; do ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((long) (sizeof (time_t))) <= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=$ac_mid else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo=`expr '(' $ac_mid ')' + 1` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done case $ac_lo in ?*) ac_cv_sizeof_time_t=$ac_lo;; '') { { echo "$as_me:$LINENO: error: cannot compute sizeof (time_t), 77 See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute sizeof (time_t), 77 See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } ;; esac else if test "$cross_compiling" = yes; then { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling See \`config.log' for more details." >&5 echo "$as_me: error: cannot run test program while cross compiling See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default long longval () { return (long) (sizeof (time_t)); } unsigned long ulongval () { return (long) (sizeof (time_t)); } #include #include int main () { FILE *f = fopen ("conftest.val", "w"); if (! f) exit (1); if (((long) (sizeof (time_t))) < 0) { long i = longval (); if (i != ((long) (sizeof (time_t)))) exit (1); fprintf (f, "%ld\n", i); } else { unsigned long i = ulongval (); if (i != ((long) (sizeof (time_t)))) exit (1); fprintf (f, "%lu\n", i); } exit (ferror (f) || fclose (f) != 0); ; return 0; } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_sizeof_time_t=`cat conftest.val` else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) { { echo "$as_me:$LINENO: error: cannot compute sizeof (time_t), 77 See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute sizeof (time_t), 77 See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi rm -f conftest.val else ac_cv_sizeof_time_t=0 fi fi echo "$as_me:$LINENO: result: $ac_cv_sizeof_time_t" >&5 echo "${ECHO_T}$ac_cv_sizeof_time_t" >&6 cat >>confdefs.h <<_ACEOF #define SIZEOF_TIME_T $ac_cv_sizeof_time_t _ACEOF echo "$as_me:$LINENO: checking how to print time_t" >&5 echo $ECHO_N "checking how to print time_t... $ECHO_C" >&6 if test "${ne_cv_fmt_time_t+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ne_cv_fmt_time_t=none if test $ne_fmt_trycompile = yes; then oflags="$CPPFLAGS" # Consider format string mismatches as errors CPPFLAGS="$CPPFLAGS -Wformat -Werror" for str in d ld qd; do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #ifdef HAVE_SYS_TIME_H #include #endif #include int main () { time_t i = 1; printf("%$str", i); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ne_cv_fmt_time_t=$str; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done CPPFLAGS=$oflags else # Best guess. Don't have to be too precise since we probably won't # get a warning message anyway. case $ac_cv_sizeof_time_t in $ac_cv_sizeof_int) ne_cv_fmt_time_t="d" ;; $ac_cv_sizeof_long) ne_cv_fmt_time_t="ld" ;; $ac_cv_sizeof_long_long) ne_cv_fmt_time_t="lld" ;; esac fi fi echo "$as_me:$LINENO: result: $ne_cv_fmt_time_t" >&5 echo "${ECHO_T}$ne_cv_fmt_time_t" >&6 if test "x$ne_cv_fmt_time_t" = "xnone"; then { { echo "$as_me:$LINENO: error: format string for time_t not found" >&5 echo "$as_me: error: format string for time_t not found" >&2;} { (exit 1); exit 1; }; } fi cat >>confdefs.h <<_ACEOF #define NE_FMT_TIME_T "$ne_cv_fmt_time_t" _ACEOF echo "$as_me:$LINENO: checking whether byte ordering is bigendian" >&5 echo $ECHO_N "checking whether byte ordering is bigendian... $ECHO_C" >&6 if test "${ac_cv_c_bigendian+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # See if sys/param.h defines the BYTE_ORDER macro. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include int main () { #if !BYTE_ORDER || !BIG_ENDIAN || !LITTLE_ENDIAN bogus endian macros #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then # It does; now see whether it defined to BIG_ENDIAN or not. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include int main () { #if BYTE_ORDER != BIG_ENDIAN not big endian #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_c_bigendian=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_c_bigendian=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # It does not; compile a test program. if test "$cross_compiling" = yes; then # try to guess the endianness by grepping values into an object file ac_cv_c_bigendian=unknown cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ short ascii_mm[] = { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 }; short ascii_ii[] = { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 }; void _ascii () { char *s = (char *) ascii_mm; s = (char *) ascii_ii; } short ebcdic_ii[] = { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 }; short ebcdic_mm[] = { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 }; void _ebcdic () { char *s = (char *) ebcdic_mm; s = (char *) ebcdic_ii; } int main () { _ascii (); _ebcdic (); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then if grep BIGenDianSyS conftest.$ac_objext >/dev/null ; then ac_cv_c_bigendian=yes fi if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then if test "$ac_cv_c_bigendian" = unknown; then ac_cv_c_bigendian=no else # finding both strings is unlikely to happen, but who knows? ac_cv_c_bigendian=unknown fi fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { /* Are we little or big endian? From Harbison&Steele. */ union { long l; char c[sizeof (long)]; } u; u.l = 1; exit (u.c[sizeof (long) - 1] == 1); } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_c_bigendian=no else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) ac_cv_c_bigendian=yes fi rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_c_bigendian" >&5 echo "${ECHO_T}$ac_cv_c_bigendian" >&6 case $ac_cv_c_bigendian in yes) cat >>confdefs.h <<\_ACEOF #define WORDS_BIGENDIAN 1 _ACEOF ;; no) ;; *) { { echo "$as_me:$LINENO: error: unknown endianness presetting ac_cv_c_bigendian=no (or yes) will help" >&5 echo "$as_me: error: unknown endianness presetting ac_cv_c_bigendian=no (or yes) will help" >&2;} { (exit 1); exit 1; }; } ;; esac echo "$as_me:$LINENO: checking whether strerror_r is declared" >&5 echo $ECHO_N "checking whether strerror_r is declared... $ECHO_C" >&6 if test "${ac_cv_have_decl_strerror_r+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { #ifndef strerror_r char *p = (char *) strerror_r; #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_have_decl_strerror_r=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_have_decl_strerror_r=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_have_decl_strerror_r" >&5 echo "${ECHO_T}$ac_cv_have_decl_strerror_r" >&6 if test $ac_cv_have_decl_strerror_r = yes; then cat >>confdefs.h <<_ACEOF #define HAVE_DECL_STRERROR_R 1 _ACEOF else cat >>confdefs.h <<_ACEOF #define HAVE_DECL_STRERROR_R 0 _ACEOF fi for ac_func in strerror_r do as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` echo "$as_me:$LINENO: checking for $ac_func" >&5 echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 if eval "test \"\${$as_ac_var+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define $ac_func to an innocuous variant, in case declares $ac_func. For example, HP-UX 11i declares gettimeofday. */ #define $ac_func innocuous_$ac_func /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $ac_func (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $ac_func /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" { #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char $ac_func (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_$ac_func) || defined (__stub___$ac_func) choke me #else char (*f) () = $ac_func; #endif #ifdef __cplusplus } #endif int main () { return f != $ac_func; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then eval "$as_ac_var=yes" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_var=no" fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 if test `eval echo '${'$as_ac_var'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done echo "$as_me:$LINENO: checking whether strerror_r returns char *" >&5 echo $ECHO_N "checking whether strerror_r returns char *... $ECHO_C" >&6 if test "${ac_cv_func_strerror_r_char_p+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_func_strerror_r_char_p=no if test $ac_cv_have_decl_strerror_r = yes; then cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { char buf[100]; char x = *strerror_r (0, buf, sizeof buf); char *p = strerror_r (0, buf, sizeof buf); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_strerror_r_char_p=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext else # strerror_r is not declared. Choose between # systems that have relatively inaccessible declarations for the # function. BeOS and DEC UNIX 4.0 fall in this category, but the # former has a strerror_r that returns char*, while the latter # has a strerror_r that returns `int'. # This test should segfault on the DEC system. if test "$cross_compiling" = yes; then : else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default extern char *strerror_r (); int main () { char buf[100]; char x = *strerror_r (0, buf, sizeof buf); exit (!isalpha (x)); ; return 0; } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_strerror_r_char_p=yes else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi fi echo "$as_me:$LINENO: result: $ac_cv_func_strerror_r_char_p" >&5 echo "${ECHO_T}$ac_cv_func_strerror_r_char_p" >&6 if test $ac_cv_func_strerror_r_char_p = yes; then cat >>confdefs.h <<\_ACEOF #define STRERROR_R_CHAR_P 1 _ACEOF fi for ac_func in snprintf vsnprintf do as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` echo "$as_me:$LINENO: checking for $ac_func" >&5 echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 if eval "test \"\${$as_ac_var+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define $ac_func to an innocuous variant, in case declares $ac_func. For example, HP-UX 11i declares gettimeofday. */ #define $ac_func innocuous_$ac_func /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $ac_func (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $ac_func /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" { #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char $ac_func (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_$ac_func) || defined (__stub___$ac_func) choke me #else char (*f) () = $ac_func; #endif #ifdef __cplusplus } #endif int main () { return f != $ac_func; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then eval "$as_ac_var=yes" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_var=no" fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 if test `eval echo '${'$as_ac_var'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF else ne_save_LIBS=$LIBS LIBS="$LIBS -lm" # Always need -lm echo "$as_me:$LINENO: checking for trio_vsnprintf in -ltrio" >&5 echo $ECHO_N "checking for trio_vsnprintf in -ltrio... $ECHO_C" >&6 if test "${ac_cv_lib_trio_trio_vsnprintf+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ltrio $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char trio_vsnprintf (); int main () { trio_vsnprintf (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_trio_trio_vsnprintf=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_trio_trio_vsnprintf=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_trio_trio_vsnprintf" >&5 echo "${ECHO_T}$ac_cv_lib_trio_trio_vsnprintf" >&6 if test $ac_cv_lib_trio_trio_vsnprintf = yes; then for ac_header in trio.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` if eval "test \"\${$as_ac_Header+set}\" = set"; then echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 else # Is the header compilable? echo "$as_me:$LINENO: checking $ac_header usability" >&5 echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6 # Is the header present? echo "$as_me:$LINENO: checking $ac_header presence" >&5 echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_c_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6 # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in yes:no: ) { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX ## ------------------------------ ## ## Report this to neon@webdav.org ## ## ------------------------------ ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 fi if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF else { { echo "$as_me:$LINENO: error: trio installation problem? libtrio found but not trio.h" >&5 echo "$as_me: error: trio installation problem? libtrio found but not trio.h" >&2;} { (exit 1); exit 1; }; } fi done { echo "$as_me:$LINENO: using trio printf replacement library" >&5 echo "$as_me: using trio printf replacement library" >&6;} NEON_LIBS="$NEON_LIBS -ltrio -lm" NEON_CFLAGS="$NEON_CFLAGS -DNEON_TRIO" else { echo "$as_me:$LINENO: no vsnprintf/snprintf detected in C library" >&5 echo "$as_me: no vsnprintf/snprintf detected in C library" >&6;} { { echo "$as_me:$LINENO: error: Install the trio library from http://daniel.haxx.se/trio/" >&5 echo "$as_me: error: Install the trio library from http://daniel.haxx.se/trio/" >&2;} { (exit 1); exit 1; }; } fi LIBS=$ne_save_LIBS break fi done for ac_header in strings.h sys/time.h limits.h sys/select.h arpa/inet.h \ signal.h sys/socket.h netinet/in.h netinet/tcp.h netdb.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` if eval "test \"\${$as_ac_Header+set}\" = set"; then echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 else # Is the header compilable? echo "$as_me:$LINENO: checking $ac_header usability" >&5 echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6 # Is the header present? echo "$as_me:$LINENO: checking $ac_header presence" >&5 echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_c_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6 # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in yes:no: ) { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX ## ------------------------------ ## ## Report this to neon@webdav.org ## ## ------------------------------ ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 fi if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_func in strcasecmp do as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` echo "$as_me:$LINENO: checking for $ac_func" >&5 echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 if eval "test \"\${$as_ac_var+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define $ac_func to an innocuous variant, in case declares $ac_func. For example, HP-UX 11i declares gettimeofday. */ #define $ac_func innocuous_$ac_func /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $ac_func (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $ac_func /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" { #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char $ac_func (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_$ac_func) || defined (__stub___$ac_func) choke me #else char (*f) () = $ac_func; #endif #ifdef __cplusplus } #endif int main () { return f != $ac_func; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then eval "$as_ac_var=yes" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_var=no" fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 if test `eval echo '${'$as_ac_var'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF else case $LIBOBJS in "$ac_func.$ac_objext" | \ *" $ac_func.$ac_objext" | \ "$ac_func.$ac_objext "* | \ *" $ac_func.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS $ac_func.$ac_objext" ;; esac fi done for ac_func in signal setvbuf setsockopt stpcpy do as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` echo "$as_me:$LINENO: checking for $ac_func" >&5 echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 if eval "test \"\${$as_ac_var+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define $ac_func to an innocuous variant, in case declares $ac_func. For example, HP-UX 11i declares gettimeofday. */ #define $ac_func innocuous_$ac_func /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $ac_func (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $ac_func /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" { #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char $ac_func (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_$ac_func) || defined (__stub___$ac_func) choke me #else char (*f) () = $ac_func; #endif #ifdef __cplusplus } #endif int main () { return f != $ac_func; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then eval "$as_ac_var=yes" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_var=no" fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 if test `eval echo '${'$as_ac_var'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done if test "$ac_cv_func_stpcpy" = "yes"; then echo "$as_me:$LINENO: checking whether stpcpy is declared" >&5 echo $ECHO_N "checking whether stpcpy is declared... $ECHO_C" >&6 if test "${ac_cv_have_decl_stpcpy+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { #ifndef stpcpy char *p = (char *) stpcpy; #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_have_decl_stpcpy=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_have_decl_stpcpy=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_have_decl_stpcpy" >&5 echo "${ECHO_T}$ac_cv_have_decl_stpcpy" >&6 if test $ac_cv_have_decl_stpcpy = yes; then cat >>confdefs.h <<_ACEOF #define HAVE_DECL_STPCPY 1 _ACEOF else cat >>confdefs.h <<_ACEOF #define HAVE_DECL_STPCPY 0 _ACEOF fi fi # Modern AIXes with the "Linux-like" libc have an undeclared stpcpy # Unixware 7 can only link gethostbyname with -lnsl -lsocket # Pick up -lsocket first, then the gethostbyname check will work. # QNX has gethostbyname in -lsocket. BeOS only has it in -lbind. echo "$as_me:$LINENO: checking for library containing socket" >&5 echo $ECHO_N "checking for library containing socket... $ECHO_C" >&6 if test "${ne_cv_libsfor_socket+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char socket (); int main () { socket (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ne_cv_libsfor_socket="none needed" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ne_sl_save_LIBS=$LIBS ne_cv_libsfor_socket="not found" for lib in socket inet; do LIBS="$ne_sl_save_LIBS -l$lib $NEON_LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char socket (); int main () { socket (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ne_cv_libsfor_socket="-l$lib"; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext done LIBS=$ne_sl_save_LIBS fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ne_cv_libsfor_socket" >&5 echo "${ECHO_T}$ne_cv_libsfor_socket" >&6 if test "$ne_cv_libsfor_socket" = "not found"; then { { echo "$as_me:$LINENO: error: could not find library containing socket" >&5 echo "$as_me: error: could not find library containing socket" >&2;} { (exit 1); exit 1; }; } elif test "$ne_cv_libsfor_socket" != "none needed"; then NEON_LIBS="$ne_cv_libsfor_socket $NEON_LIBS" fi echo "$as_me:$LINENO: checking for library containing gethostbyname" >&5 echo $ECHO_N "checking for library containing gethostbyname... $ECHO_C" >&6 if test "${ne_cv_libsfor_gethostbyname+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char gethostbyname (); int main () { gethostbyname (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ne_cv_libsfor_gethostbyname="none needed" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ne_sl_save_LIBS=$LIBS ne_cv_libsfor_gethostbyname="not found" for lib in socket nsl bind; do LIBS="$ne_sl_save_LIBS -l$lib $NEON_LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char gethostbyname (); int main () { gethostbyname (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ne_cv_libsfor_gethostbyname="-l$lib"; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext done LIBS=$ne_sl_save_LIBS fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ne_cv_libsfor_gethostbyname" >&5 echo "${ECHO_T}$ne_cv_libsfor_gethostbyname" >&6 if test "$ne_cv_libsfor_gethostbyname" = "not found"; then { { echo "$as_me:$LINENO: error: could not find library containing gethostbyname" >&5 echo "$as_me: error: could not find library containing gethostbyname" >&2;} { (exit 1); exit 1; }; } elif test "$ne_cv_libsfor_gethostbyname" != "none needed"; then NEON_LIBS="$ne_cv_libsfor_gethostbyname $NEON_LIBS" fi # Enable getaddrinfo() support only if all the necessary functions # are found. ne_enable_gai=yes ne_cf_save_LIBS=$LIBS LIBS="$LIBS $NEON_LIBS" for ac_func in getaddrinfo gai_strerror inet_ntop do as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` echo "$as_me:$LINENO: checking for $ac_func" >&5 echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 if eval "test \"\${$as_ac_var+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define $ac_func to an innocuous variant, in case declares $ac_func. For example, HP-UX 11i declares gettimeofday. */ #define $ac_func innocuous_$ac_func /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $ac_func (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $ac_func /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" { #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char $ac_func (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_$ac_func) || defined (__stub___$ac_func) choke me #else char (*f) () = $ac_func; #endif #ifdef __cplusplus } #endif int main () { return f != $ac_func; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then eval "$as_ac_var=yes" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_var=no" fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 if test `eval echo '${'$as_ac_var'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF else ne_enable_gai=no; break fi done LIBS=$ne_cf_save_LIBS if test $ne_enable_gai = yes; then cat >>confdefs.h <<\_ACEOF #define USE_GETADDRINFO 1 _ACEOF echo "$as_me:$LINENO: checking for working AI_ADDRCONFIG" >&5 echo $ECHO_N "checking for working AI_ADDRCONFIG... $ECHO_C" >&6 if test "${ne_cv_gai_addrconfig+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$cross_compiling" = yes; then { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling See \`config.log' for more details." >&5 echo "$as_me: error: cannot run test program while cross compiling See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include int main () { struct addrinfo hints = {0}, *result; hints.ai_flags = AI_ADDRCONFIG; if (getaddrinfo("localhost", NULL, &hints, &result) != 0) return 1; ; return 0; } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ne_cv_gai_addrconfig=yes else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) ne_cv_gai_addrconfig=no fi rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi echo "$as_me:$LINENO: result: $ne_cv_gai_addrconfig" >&5 echo "${ECHO_T}$ne_cv_gai_addrconfig" >&6 if test $ne_cv_gai_addrconfig = yes; then cat >>confdefs.h <<\_ACEOF #define USE_GAI_ADDRCONFIG 1 _ACEOF fi else # Checks for non-getaddrinfo() based resolver interfaces. echo "$as_me:$LINENO: checking for library containing hstrerror" >&5 echo $ECHO_N "checking for library containing hstrerror... $ECHO_C" >&6 if test "${ne_cv_libsfor_hstrerror+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char hstrerror (); int main () { hstrerror (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ne_cv_libsfor_hstrerror="none needed" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ne_sl_save_LIBS=$LIBS ne_cv_libsfor_hstrerror="not found" for lib in resolv; do LIBS="$ne_sl_save_LIBS -l$lib $NEON_LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char hstrerror (); int main () { hstrerror (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ne_cv_libsfor_hstrerror="-l$lib"; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext done LIBS=$ne_sl_save_LIBS fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ne_cv_libsfor_hstrerror" >&5 echo "${ECHO_T}$ne_cv_libsfor_hstrerror" >&6 if test "$ne_cv_libsfor_hstrerror" = "not found"; then : elif test "$ne_cv_libsfor_hstrerror" != "none needed"; then NEON_LIBS="$ne_cv_libsfor_hstrerror $NEON_LIBS" fi ne_cf_save_LIBS=$LIBS LIBS="$LIBS $NEON_LIBS" for ac_func in hstrerror do as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` echo "$as_me:$LINENO: checking for $ac_func" >&5 echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 if eval "test \"\${$as_ac_var+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define $ac_func to an innocuous variant, in case declares $ac_func. For example, HP-UX 11i declares gettimeofday. */ #define $ac_func innocuous_$ac_func /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $ac_func (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $ac_func /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" { #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char $ac_func (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_$ac_func) || defined (__stub___$ac_func) choke me #else char (*f) () = $ac_func; #endif #ifdef __cplusplus } #endif int main () { return f != $ac_func; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then eval "$as_ac_var=yes" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_var=no" fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 if test `eval echo '${'$as_ac_var'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done LIBS=$ne_cf_save_LIBS # Older Unixes don't declare h_errno. echo "$as_me:$LINENO: checking whether h_errno is declared" >&5 echo $ECHO_N "checking whether h_errno is declared... $ECHO_C" >&6 if test "${ac_cv_have_decl_h_errno+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #define _XOPEN_SOURCE_EXTENDED 1 #include int main () { #ifndef h_errno char *p = (char *) h_errno; #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_have_decl_h_errno=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_have_decl_h_errno=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_have_decl_h_errno" >&5 echo "${ECHO_T}$ac_cv_have_decl_h_errno" >&6 fi echo "$as_me:$LINENO: checking for struct tm.tm_gmtoff" >&5 echo $ECHO_N "checking for struct tm.tm_gmtoff... $ECHO_C" >&6 if test "${ac_cv_member_struct_tm_tm_gmtoff+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include int main () { static struct tm ac_aggr; if (ac_aggr.tm_gmtoff) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_member_struct_tm_tm_gmtoff=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include int main () { static struct tm ac_aggr; if (sizeof ac_aggr.tm_gmtoff) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_member_struct_tm_tm_gmtoff=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_member_struct_tm_tm_gmtoff=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_member_struct_tm_tm_gmtoff" >&5 echo "${ECHO_T}$ac_cv_member_struct_tm_tm_gmtoff" >&6 if test $ac_cv_member_struct_tm_tm_gmtoff = yes; then cat >>confdefs.h <<_ACEOF #define HAVE_STRUCT_TM_TM_GMTOFF 1 _ACEOF else { echo "$as_me:$LINENO: WARNING: no timezone handling in date parsing on this platform" >&5 echo "$as_me: WARNING: no timezone handling in date parsing on this platform" >&2;} fi # Check whether --with-zlib or --without-zlib was given. if test "${with_zlib+set}" = set; then withval="$with_zlib" ne_use_zlib=$withval else ne_use_zlib=yes fi; NEON_SUPPORTS_ZLIB=no if test "$ne_use_zlib" = "yes"; then if test "${ac_cv_header_zlib_h+set}" = set; then echo "$as_me:$LINENO: checking for zlib.h" >&5 echo $ECHO_N "checking for zlib.h... $ECHO_C" >&6 if test "${ac_cv_header_zlib_h+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi echo "$as_me:$LINENO: result: $ac_cv_header_zlib_h" >&5 echo "${ECHO_T}$ac_cv_header_zlib_h" >&6 else # Is the header compilable? echo "$as_me:$LINENO: checking zlib.h usability" >&5 echo $ECHO_N "checking zlib.h usability... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6 # Is the header present? echo "$as_me:$LINENO: checking zlib.h presence" >&5 echo $ECHO_N "checking zlib.h presence... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_c_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6 # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in yes:no: ) { echo "$as_me:$LINENO: WARNING: zlib.h: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: zlib.h: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: zlib.h: proceeding with the compiler's result" >&5 echo "$as_me: WARNING: zlib.h: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { echo "$as_me:$LINENO: WARNING: zlib.h: present but cannot be compiled" >&5 echo "$as_me: WARNING: zlib.h: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: zlib.h: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: zlib.h: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: zlib.h: see the Autoconf documentation" >&5 echo "$as_me: WARNING: zlib.h: see the Autoconf documentation" >&2;} { echo "$as_me:$LINENO: WARNING: zlib.h: section \"Present But Cannot Be Compiled\"" >&5 echo "$as_me: WARNING: zlib.h: section \"Present But Cannot Be Compiled\"" >&2;} { echo "$as_me:$LINENO: WARNING: zlib.h: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: zlib.h: proceeding with the preprocessor's result" >&2;} { echo "$as_me:$LINENO: WARNING: zlib.h: in the future, the compiler will take precedence" >&5 echo "$as_me: WARNING: zlib.h: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX ## ------------------------------ ## ## Report this to neon@webdav.org ## ## ------------------------------ ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac echo "$as_me:$LINENO: checking for zlib.h" >&5 echo $ECHO_N "checking for zlib.h... $ECHO_C" >&6 if test "${ac_cv_header_zlib_h+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_header_zlib_h=$ac_header_preproc fi echo "$as_me:$LINENO: result: $ac_cv_header_zlib_h" >&5 echo "${ECHO_T}$ac_cv_header_zlib_h" >&6 fi if test $ac_cv_header_zlib_h = yes; then echo "$as_me:$LINENO: checking for inflate in -lz" >&5 echo $ECHO_N "checking for inflate in -lz... $ECHO_C" >&6 if test "${ac_cv_lib_z_inflate+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lz $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char inflate (); int main () { inflate (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_z_inflate=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_z_inflate=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_z_inflate" >&5 echo "${ECHO_T}$ac_cv_lib_z_inflate" >&6 if test $ac_cv_lib_z_inflate = yes; then NEON_LIBS="$NEON_LIBS -lz" NEON_CFLAGS="$NEON_CFLAGS -DNEON_ZLIB" NEON_SUPPORTS_ZLIB=yes neon_zlib_message="found in -lz" else neon_zlib_message="zlib not found" fi else neon_zlib_message="zlib not found" fi else neon_zlib_message="zlib disabled" fi # Conditionally enable ACL support echo "$as_me:$LINENO: checking whether to enable ACL support in neon" >&5 echo $ECHO_N "checking whether to enable ACL support in neon... $ECHO_C" >&6 if test "x$neon_no_acl" = "xyes"; then echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 else echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 NEON_EXTRAOBJS="$NEON_EXTRAOBJS ne_acl" fi # Check whether --with-ssl or --without-ssl was given. if test "${with_ssl+set}" = set; then withval="$with_ssl" fi; # Check whether --with-egd or --without-egd was given. if test "${with_egd+set}" = set; then withval="$with_egd" fi; case $with_ssl in yes) # Extract the first word of "pkg-config", so it can be a program name with args. set dummy pkg-config; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_path_PKG_CONFIG+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case $PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_path_PKG_CONFIG" && ac_cv_path_PKG_CONFIG="no" ;; esac fi PKG_CONFIG=$ac_cv_path_PKG_CONFIG if test -n "$PKG_CONFIG"; then echo "$as_me:$LINENO: result: $PKG_CONFIG" >&5 echo "${ECHO_T}$PKG_CONFIG" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi if test "$PKG_CONFIG" = "no"; then : Not using pkg-config # libcrypto may require -ldl if using the OpenSSL ENGINE branch echo "$as_me:$LINENO: checking for library containing RSA_new" >&5 echo $ECHO_N "checking for library containing RSA_new... $ECHO_C" >&6 if test "${ne_cv_libsfor_RSA_new+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char RSA_new (); int main () { RSA_new (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ne_cv_libsfor_RSA_new="none needed" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ne_sl_save_LIBS=$LIBS ne_cv_libsfor_RSA_new="not found" for lib in crypto; do LIBS="$ne_sl_save_LIBS -l$lib $NEON_LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char RSA_new (); int main () { RSA_new (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ne_cv_libsfor_RSA_new="-l$lib"; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS="$ne_sl_save_LIBS -l$lib -ldl $NEON_LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char RSA_new (); int main () { RSA_new (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ne_cv_libsfor_RSA_new="-l$lib -ldl"; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext done LIBS=$ne_sl_save_LIBS fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ne_cv_libsfor_RSA_new" >&5 echo "${ECHO_T}$ne_cv_libsfor_RSA_new" >&6 if test "$ne_cv_libsfor_RSA_new" = "not found"; then { { echo "$as_me:$LINENO: error: could not find library containing RSA_new" >&5 echo "$as_me: error: could not find library containing RSA_new" >&2;} { (exit 1); exit 1; }; } elif test "$ne_cv_libsfor_RSA_new" != "none needed"; then NEON_LIBS="$ne_cv_libsfor_RSA_new $NEON_LIBS" fi echo "$as_me:$LINENO: checking for library containing SSL_library_init" >&5 echo $ECHO_N "checking for library containing SSL_library_init... $ECHO_C" >&6 if test "${ne_cv_libsfor_SSL_library_init+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char SSL_library_init (); int main () { SSL_library_init (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ne_cv_libsfor_SSL_library_init="none needed" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ne_sl_save_LIBS=$LIBS ne_cv_libsfor_SSL_library_init="not found" for lib in ssl; do LIBS="$ne_sl_save_LIBS -l$lib $NEON_LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char SSL_library_init (); int main () { SSL_library_init (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ne_cv_libsfor_SSL_library_init="-l$lib"; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext done LIBS=$ne_sl_save_LIBS fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ne_cv_libsfor_SSL_library_init" >&5 echo "${ECHO_T}$ne_cv_libsfor_SSL_library_init" >&6 if test "$ne_cv_libsfor_SSL_library_init" = "not found"; then { { echo "$as_me:$LINENO: error: could not find library containing SSL_library_init" >&5 echo "$as_me: error: could not find library containing SSL_library_init" >&2;} { (exit 1); exit 1; }; } elif test "$ne_cv_libsfor_SSL_library_init" != "none needed"; then NEON_LIBS="$ne_cv_libsfor_SSL_library_init $NEON_LIBS" fi else echo "$as_me:$LINENO: checking for openssl pkg-config data" >&5 echo $ECHO_N "checking for openssl pkg-config data... $ECHO_C" >&6 if test "${ne_cv_pkg_openssl+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if $PKG_CONFIG openssl; then ne_cv_pkg_openssl=yes else ne_cv_pkg_openssl=no fi fi echo "$as_me:$LINENO: result: $ne_cv_pkg_openssl" >&5 echo "${ECHO_T}$ne_cv_pkg_openssl" >&6 if test "$ne_cv_pkg_openssl" = "yes"; then NE_SSL_CFLAGS=`$PKG_CONFIG --cflags openssl` NE_SSL_LIBS=`$PKG_CONFIG --libs openssl` : Using provided pkg-config data { echo "$as_me:$LINENO: using SSL library configuration from pkg-config" >&5 echo "$as_me: using SSL library configuration from pkg-config" >&6;} CPPFLAGS="$CPPFLAGS ${NE_SSL_CFLAGS}" NEON_LIBS="$NEON_LIBS ${NE_SSL_LIBS}" else : No pkg-config for openssl provided # libcrypto may require -ldl if using the OpenSSL ENGINE branch echo "$as_me:$LINENO: checking for library containing RSA_new" >&5 echo $ECHO_N "checking for library containing RSA_new... $ECHO_C" >&6 if test "${ne_cv_libsfor_RSA_new+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char RSA_new (); int main () { RSA_new (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ne_cv_libsfor_RSA_new="none needed" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ne_sl_save_LIBS=$LIBS ne_cv_libsfor_RSA_new="not found" for lib in crypto; do LIBS="$ne_sl_save_LIBS -l$lib $NEON_LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char RSA_new (); int main () { RSA_new (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ne_cv_libsfor_RSA_new="-l$lib"; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS="$ne_sl_save_LIBS -l$lib -ldl $NEON_LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char RSA_new (); int main () { RSA_new (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ne_cv_libsfor_RSA_new="-l$lib -ldl"; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext done LIBS=$ne_sl_save_LIBS fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ne_cv_libsfor_RSA_new" >&5 echo "${ECHO_T}$ne_cv_libsfor_RSA_new" >&6 if test "$ne_cv_libsfor_RSA_new" = "not found"; then { { echo "$as_me:$LINENO: error: could not find library containing RSA_new" >&5 echo "$as_me: error: could not find library containing RSA_new" >&2;} { (exit 1); exit 1; }; } elif test "$ne_cv_libsfor_RSA_new" != "none needed"; then NEON_LIBS="$ne_cv_libsfor_RSA_new $NEON_LIBS" fi echo "$as_me:$LINENO: checking for library containing SSL_library_init" >&5 echo $ECHO_N "checking for library containing SSL_library_init... $ECHO_C" >&6 if test "${ne_cv_libsfor_SSL_library_init+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char SSL_library_init (); int main () { SSL_library_init (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ne_cv_libsfor_SSL_library_init="none needed" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ne_sl_save_LIBS=$LIBS ne_cv_libsfor_SSL_library_init="not found" for lib in ssl; do LIBS="$ne_sl_save_LIBS -l$lib $NEON_LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char SSL_library_init (); int main () { SSL_library_init (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ne_cv_libsfor_SSL_library_init="-l$lib"; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext done LIBS=$ne_sl_save_LIBS fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ne_cv_libsfor_SSL_library_init" >&5 echo "${ECHO_T}$ne_cv_libsfor_SSL_library_init" >&6 if test "$ne_cv_libsfor_SSL_library_init" = "not found"; then { { echo "$as_me:$LINENO: error: could not find library containing SSL_library_init" >&5 echo "$as_me: error: could not find library containing SSL_library_init" >&2;} { (exit 1); exit 1; }; } elif test "$ne_cv_libsfor_SSL_library_init" != "none needed"; then NEON_LIBS="$ne_cv_libsfor_SSL_library_init $NEON_LIBS" fi fi fi for ac_header in openssl/ssl.h openssl/opensslv.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` if eval "test \"\${$as_ac_Header+set}\" = set"; then echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 else # Is the header compilable? echo "$as_me:$LINENO: checking $ac_header usability" >&5 echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6 # Is the header present? echo "$as_me:$LINENO: checking $ac_header presence" >&5 echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_c_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6 # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in yes:no: ) { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX ## ------------------------------ ## ## Report this to neon@webdav.org ## ## ------------------------------ ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 fi if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF else { { echo "$as_me:$LINENO: error: OpenSSL headers not found, cannot enable SSL support" >&5 echo "$as_me: error: OpenSSL headers not found, cannot enable SSL support" >&2;} { (exit 1); exit 1; }; } fi done # Enable EGD support if using 0.9.7 or newer echo "$as_me:$LINENO: checking OpenSSL version is >= 0.9.7" >&5 echo $ECHO_N "checking OpenSSL version is >= 0.9.7... $ECHO_C" >&6 if test "${ne_cv_lib_ssl097+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #if OPENSSL_VERSION_NUMBER >= 0x00907000L good #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "good" >/dev/null 2>&1; then ne_cv_lib_ssl097=yes else ne_cv_lib_ssl097=no fi rm -f conftest* fi echo "$as_me:$LINENO: result: $ne_cv_lib_ssl097" >&5 echo "${ECHO_T}$ne_cv_lib_ssl097" >&6 if test "$ne_cv_lib_ssl097" = "yes"; then { echo "$as_me:$LINENO: OpenSSL >= 0.9.7; EGD support not needed in neon" >&5 echo "$as_me: OpenSSL >= 0.9.7; EGD support not needed in neon" >&6;} neon_ssl_message="OpenSSL (0.9.7 or later)" else # Fail if OpenSSL is older than 0.9.6 echo "$as_me:$LINENO: checking OpenSSL version is >= 0.9.6" >&5 echo $ECHO_N "checking OpenSSL version is >= 0.9.6... $ECHO_C" >&6 if test "${ne_cv_lib_ssl096+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #if OPENSSL_VERSION_NUMBER >= 0x00906000L good #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "good" >/dev/null 2>&1; then ne_cv_lib_ssl096=yes else ne_cv_lib_ssl096=no fi rm -f conftest* fi echo "$as_me:$LINENO: result: $ne_cv_lib_ssl096" >&5 echo "${ECHO_T}$ne_cv_lib_ssl096" >&6 if test "$ne_cv_lib_ssl096" != "yes"; then { { echo "$as_me:$LINENO: error: OpenSSL 0.9.6 or later is required" >&5 echo "$as_me: error: OpenSSL 0.9.6 or later is required" >&2;} { (exit 1); exit 1; }; } fi neon_ssl_message="OpenSSL (0.9.6 or later)" case "$with_egd" in yes|no) ne_cv_lib_sslegd=$with_egd ;; /*) ne_cv_lib_sslegd=yes cat >>confdefs.h <<_ACEOF #define EGD_PATH "$with_egd" _ACEOF ;; *) # Guess whether EGD support is needed echo "$as_me:$LINENO: checking whether to enable EGD support" >&5 echo $ECHO_N "checking whether to enable EGD support... $ECHO_C" >&6 if test "${ne_cv_lib_sslegd+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -r /dev/random || test -r /dev/urandom; then ne_cv_lib_sslegd=no else ne_cv_lib_sslegd=yes fi fi echo "$as_me:$LINENO: result: $ne_cv_lib_sslegd" >&5 echo "${ECHO_T}$ne_cv_lib_sslegd" >&6 ;; esac if test "$ne_cv_lib_sslegd" = "yes"; then { echo "$as_me:$LINENO: EGD support enabled for seeding OpenSSL PRNG" >&5 echo "$as_me: EGD support enabled for seeding OpenSSL PRNG" >&6;} cat >>confdefs.h <<\_ACEOF #define ENABLE_EGD 1 _ACEOF fi fi NEON_SUPPORTS_SSL=yes NEON_CFLAGS="$NEON_CFLAGS -DNEON_SSL" NEON_EXTRAOBJS="$NEON_EXTRAOBJS ne_openssl" ;; *) # Default to off; only create crypto-enabled binaries if requested. neon_ssl_message="No SSL support" NEON_SUPPORTS_SSL=no NEON_EXTRAOBJS="$NEON_EXTRAOBJS ne_stubssl" ;; esac # Check whether --with-socks or --without-socks was given. if test "${with_socks+set}" = set; then withval="$with_socks" fi; if test "$with_socks" = "yes"; then ne_save_LIBS=$LIBS for ac_header in socks.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` if eval "test \"\${$as_ac_Header+set}\" = set"; then echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 else # Is the header compilable? echo "$as_me:$LINENO: checking $ac_header usability" >&5 echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6 # Is the header present? echo "$as_me:$LINENO: checking $ac_header presence" >&5 echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_c_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6 # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in yes:no: ) { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX ## ------------------------------ ## ## Report this to neon@webdav.org ## ## ------------------------------ ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 fi if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF echo "$as_me:$LINENO: checking for connect in -lsocks5" >&5 echo $ECHO_N "checking for connect in -lsocks5... $ECHO_C" >&6 if test "${ac_cv_lib_socks5_connect+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsocks5 $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char connect (); int main () { connect (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_socks5_connect=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_socks5_connect=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_socks5_connect" >&5 echo "${ECHO_T}$ac_cv_lib_socks5_connect" >&6 if test $ac_cv_lib_socks5_connect = yes; then { echo "$as_me:$LINENO: SOCKSv5 support enabled" >&5 echo "$as_me: SOCKSv5 support enabled" >&6;} else { { echo "$as_me:$LINENO: error: could not find libsocks5 for SOCKS support" >&5 echo "$as_me: error: could not find libsocks5 for SOCKS support" >&2;} { (exit 1); exit 1; }; } fi else { { echo "$as_me:$LINENO: error: could not find socks.h for SOCKS support" >&5 echo "$as_me: error: could not find socks.h for SOCKS support" >&2;} { (exit 1); exit 1; }; } fi done CFLAGS="$CFLAGS -DNEON_SOCKS" NEON_LIBS="$NEON_LIBS -lsocks5" LIBS=$ne_save_LIBS fi # Extract the first word of "krb5-config", so it can be a program name with args. set dummy krb5-config; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_path_KRB5_CONFIG+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case $KRB5_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_KRB5_CONFIG="$KRB5_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_dummy="$PATH:/usr/kerberos/bin" for as_dir in $as_dummy do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_KRB5_CONFIG="$as_dir/$ac_word$ac_exec_ext" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_path_KRB5_CONFIG" && ac_cv_path_KRB5_CONFIG="none" ;; esac fi KRB5_CONFIG=$ac_cv_path_KRB5_CONFIG if test -n "$KRB5_CONFIG"; then echo "$as_me:$LINENO: result: $KRB5_CONFIG" >&5 echo "${ECHO_T}$KRB5_CONFIG" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi if test "x$KRB5_CONFIG" != "xnone"; then ne_save_CPPFLAGS=$CPPFLAGS ne_save_LIBS=$NEON_LIBS NEON_LIBS="$NEON_LIBS `${KRB5_CONFIG} --libs gssapi`" CPPFLAGS="$CPPFLAGS `${KRB5_CONFIG} --cflags gssapi`" # MIT and Heimdal put gssapi.h in different places for ac_header in gssapi/gssapi.h gssapi.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` if eval "test \"\${$as_ac_Header+set}\" = set"; then echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 else # Is the header compilable? echo "$as_me:$LINENO: checking $ac_header usability" >&5 echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6 # Is the header present? echo "$as_me:$LINENO: checking $ac_header presence" >&5 echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_c_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6 # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in yes:no: ) { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX ## ------------------------------ ## ## Report this to neon@webdav.org ## ## ------------------------------ ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 fi if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF ne_cf_save_LIBS=$LIBS LIBS="$LIBS $NEON_LIBS" for ac_func in gss_init_sec_context do as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` echo "$as_me:$LINENO: checking for $ac_func" >&5 echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 if eval "test \"\${$as_ac_var+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define $ac_func to an innocuous variant, in case declares $ac_func. For example, HP-UX 11i declares gettimeofday. */ #define $ac_func innocuous_$ac_func /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $ac_func (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $ac_func /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" { #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char $ac_func (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_$ac_func) || defined (__stub___$ac_func) choke me #else char (*f) () = $ac_func; #endif #ifdef __cplusplus } #endif int main () { return f != $ac_func; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then eval "$as_ac_var=yes" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_var=no" fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 if test `eval echo '${'$as_ac_var'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF ne_save_CPPFLAGS=$CPPFLAGS ne_save_LIBS=$NEON_LIBS { echo "$as_me:$LINENO: GSSAPI authentication support enabled" >&5 echo "$as_me: GSSAPI authentication support enabled" >&6;} cat >>confdefs.h <<\_ACEOF #define HAVE_GSSAPI 1 _ACEOF for ac_header in gssapi/gssapi_generic.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` if eval "test \"\${$as_ac_Header+set}\" = set"; then echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 else # Is the header compilable? echo "$as_me:$LINENO: checking $ac_header usability" >&5 echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6 # Is the header present? echo "$as_me:$LINENO: checking $ac_header presence" >&5 echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_c_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6 # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in yes:no: ) { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX ## ------------------------------ ## ## Report this to neon@webdav.org ## ## ------------------------------ ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 fi if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done # MIT Kerberos lacks GSS_C_NT_HOSTBASED_SERVICE echo "$as_me:$LINENO: checking whether GSS_C_NT_HOSTBASED_SERVICE is declared" >&5 echo $ECHO_N "checking whether GSS_C_NT_HOSTBASED_SERVICE is declared... $ECHO_C" >&6 if test "${ac_cv_have_decl_GSS_C_NT_HOSTBASED_SERVICE+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef HAVE_GSSAPI_GSSAPI_H #include #else #include #endif int main () { #ifndef GSS_C_NT_HOSTBASED_SERVICE char *p = (char *) GSS_C_NT_HOSTBASED_SERVICE; #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_have_decl_GSS_C_NT_HOSTBASED_SERVICE=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_have_decl_GSS_C_NT_HOSTBASED_SERVICE=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_have_decl_GSS_C_NT_HOSTBASED_SERVICE" >&5 echo "${ECHO_T}$ac_cv_have_decl_GSS_C_NT_HOSTBASED_SERVICE" >&6 if test $ac_cv_have_decl_GSS_C_NT_HOSTBASED_SERVICE = yes; then : else cat >>confdefs.h <<\_ACEOF #define GSS_C_NT_HOSTBASED_SERVICE gss_nt_service_name _ACEOF fi fi done LIBS=$ne_cf_save_LIBS break fi done CPPFLAGS=$ne_save_CPPFLAGS NEON_LIBS=$ne_save_LIBS fi # Use the libtool-type build. NEON_TARGET=libneon.la NEON_OBJEXT=lo # Using the default set of object files to build. # Add the extension to EXTRAOBJS ne="$NEON_EXTRAOBJS" NEON_EXTRAOBJS= for o in $ne; do NEON_EXTRAOBJS="$NEON_EXTRAOBJS $o.$NEON_OBJEXT" done echo "$as_me:$LINENO: checking whether to enable WebDAV support in neon" >&5 echo $ECHO_N "checking whether to enable WebDAV support in neon... $ECHO_C" >&6 if test "x$neon_no_webdav" = "xyes"; then # No WebDAV support echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 NEONOBJS="$NEONOBJS \$(NEON_BASEOBJS)" NEON_CFLAGS="$NEON_CFLAGS -DNEON_NODAV" NEON_SUPPORTS_DAV=no cat >>confdefs.h <<\_ACEOF #define NEON_NODAV 1 _ACEOF else # WebDAV support NEON_SUPPORTS_DAV=yes NEONOBJS="$NEONOBJS \$(NEON_DAVOBJS)" # Turn on DAV locking please then. cat >>confdefs.h <<\_ACEOF #define USE_DAV_LOCKS 1 _ACEOF echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 fi # Find an XML parser # NEON_XML_PARSER(expat) cat >>confdefs.h <<\_ACEOF #define HAVE_EXPAT 1 _ACEOF cat >>confdefs.h <<\_ACEOF #define HAVE_XMLPARSE_H 1 _ACEOF neon_xml_parser_message="expat" NEON_LIBS="$NEON_LIBS -lexpat" neon_xml_parser=expat with_included_expat=yes # Extra checks for debugging, compiler warnings # Check whether --enable-debug or --disable-debug was given. if test "${enable_debug+set}" = set; then enableval="$enable_debug" fi; # default is to enable debugging case $enable_debug in no) { echo "$as_me:$LINENO: debugging is disabled" >&5 echo "$as_me: debugging is disabled" >&6;} ;; *) { echo "$as_me:$LINENO: debugging is enabled" >&5 echo "$as_me: debugging is enabled" >&6;} cat >>confdefs.h <<\_ACEOF #define NE_DEBUGGING 1 _ACEOF ;; esac # Leave till last to prevent CFLAGS affecting checks. # Check whether --enable-warnings or --disable-warnings was given. if test "${enable_warnings+set}" = set; then enableval="$enable_warnings" fi; if test "$enable_warnings" = "yes"; then case $GCC:`uname` in yes:*) CFLAGS="$CFLAGS -Wall -ansi-pedantic -Wmissing-declarations -Winline -Wshadow -Wreturn-type -Wsign-compare -Wundef -Wpointer-arith -Wcast-align -Wbad-function-cast -Wimplicit-prototypes -Wformat-security" if test -z "$with_ssl" -o "$with_ssl" = "no"; then # OpenSSL headers fail strict prototypes checks CFLAGS="$CFLAGS -Wstrict-prototypes" fi ;; no:OSF1) CFLAGS="$CFLAGS -check -msg_disable returnchecks -msg_disable alignment -msg_disable overflow" ;; no:IRIX) CFLAGS="$CFLAGS -fullwarn" ;; no:UnixWare) CFLAGS="$CFLAGS -v" ;; *) { echo "$as_me:$LINENO: WARNING: warning flags unknown for compiler on this platform" >&5 echo "$as_me: WARNING: warning flags unknown for compiler on this platform" >&2;} ;; esac fi CFLAGS="$CFLAGS -I\${top_builddir}" # Check whether --enable-memleak or --disable-memleak was given. if test "${enable_memleak+set}" = set; then enableval="$enable_memleak" fi; if test "$enable_memleak" = "yes"; then CPPFLAGS="$CPPFLAGS -DNEON_MEMLEAK -I\$(top_srcdir)/src" # disable 'make install' ALLOW_INSTALL=memleak fi # Enable tests for optional features TESTS="\$(BASIC_TESTS)" HELPERS="" if test "$NEON_SUPPORTS_SSL" = "yes"; then # Only enable SSL tests if an openssl binary is found (needed to make # certs etc). # Extract the first word of "openssl", so it can be a program name with args. set dummy openssl; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_path_OPENSSL+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case $OPENSSL in [\\/]* | ?:[\\/]*) ac_cv_path_OPENSSL="$OPENSSL" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_OPENSSL="$as_dir/$ac_word$ac_exec_ext" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_path_OPENSSL" && ac_cv_path_OPENSSL="notfound" ;; esac fi OPENSSL=$ac_cv_path_OPENSSL if test -n "$OPENSSL"; then echo "$as_me:$LINENO: result: $OPENSSL" >&5 echo "${ECHO_T}$OPENSSL" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi if test "$OPENSSL" != "notfound"; then TESTS="$TESTS \$(SSL_TESTS)" HELPERS="$HELPERS \$(SSL_HELPERS)" else { echo "$as_me:$LINENO: WARNING: no openssl binary in \$PATH: SSL tests disabled" >&5 echo "$as_me: WARNING: no openssl binary in \$PATH: SSL tests disabled" >&2;} fi fi if test "$NEON_SUPPORTS_DAV" = "yes"; then TESTS="$TESTS \$(DAV_TESTS)" fi if test "$NEON_SUPPORTS_ZLIB" = "yes"; then TESTS="$TESTS \$(ZLIB_TESTS)" HELPERS="$HELPERS \$(ZLIB_HELPERS)" fi ac_config_files="$ac_config_files neon-config" ac_config_files="$ac_config_files Makefile src/Makefile test/Makefile neon.pc" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, don't put newlines in cache variables' values. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. { (set) 2>&1 | case `(ac_space=' '; set | grep ac_space) 2>&1` in *ac_space=\ *) # `set' does not quote correctly, so add quotes (double-quote # substitution turns \\\\ into \\, and sed turns \\ into \). sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n \ "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" ;; esac; } | sed ' t clear : clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ : end' >>confcache if diff $cache_file confcache >/dev/null 2>&1; then :; else if test -w $cache_file; then test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file" cat confcache >$cache_file else echo "not updating unwritable cache $cache_file" fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' # VPATH may cause trouble with some makes, so we remove $(srcdir), # ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=/{ s/:*\$(srcdir):*/:/; s/:*\${srcdir}:*/:/; s/:*@srcdir@:*/:/; s/^\([^=]*=[ ]*\):*/\1/; s/:*$//; s/^[^=]*=[ ]*$//; }' fi DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_i=`echo "$ac_i" | sed 's/\$U\././;s/\.o$//;s/\.obj$//'` # 2. Add them. ac_libobjs="$ac_libobjs $ac_i\$U.$ac_objext" ac_ltlibobjs="$ac_ltlibobjs $ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs : ${CONFIG_STATUS=./config.status} ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5 echo "$as_me: creating $CONFIG_STATUS" >&6;} cat >$CONFIG_STATUS <<_ACEOF #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF ## --------------------- ## ## M4sh Initialization. ## ## --------------------- ## # Be Bourne compatible if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then set -o posix fi DUALCASE=1; export DUALCASE # for MKS sh # Support unset when possible. if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then as_unset=unset else as_unset=false fi # Work around bugs in pre-3.0 UWIN ksh. $as_unset ENV MAIL MAILPATH PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. for as_var in \ LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ LC_TELEPHONE LC_TIME do if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then eval $as_var=C; export $as_var else $as_unset $as_var fi done # Required to use basename. if expr a : '\(a\)' >/dev/null 2>&1; then as_expr=expr else as_expr=false fi if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi # Name of the executable. as_me=`$as_basename "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)$' \| \ . : '\(.\)' 2>/dev/null || echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; } /^X\/\(\/\/\)$/{ s//\1/; q; } /^X\/\(\/\).*/{ s//\1/; q; } s/.*/./; q'` # PATH needs CR, and LINENO needs CR and PATH. # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi as_lineno_1=$LINENO as_lineno_2=$LINENO as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` test "x$as_lineno_1" != "x$as_lineno_2" && test "x$as_lineno_3" = "x$as_lineno_2" || { # Find who we are. Look in the path if we contain no path at all # relative or not. case $0 in *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then { { echo "$as_me:$LINENO: error: cannot find myself; rerun with an absolute path" >&5 echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2;} { (exit 1); exit 1; }; } fi case $CONFIG_SHELL in '') as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for as_base in sh bash ksh sh5; do case $as_dir in /*) if ("$as_dir/$as_base" -c ' as_lineno_1=$LINENO as_lineno_2=$LINENO as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` test "x$as_lineno_1" != "x$as_lineno_2" && test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } CONFIG_SHELL=$as_dir/$as_base export CONFIG_SHELL exec "$CONFIG_SHELL" "$0" ${1+"$@"} fi;; esac done done ;; esac # Create $as_me.lineno as a copy of $as_myself, but with $LINENO # uniformly replaced by the line number. The first 'sed' inserts a # line-number line before each line; the second 'sed' does the real # work. The second script uses 'N' to pair each line-number line # with the numbered line, and appends trailing '-' during # substitution so that $LINENO is not a special case at line end. # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) sed '=' <$as_myself | sed ' N s,$,-, : loop s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, t loop s,-$,, s,^['$as_cr_digits']*\n,, ' >$as_me.lineno && chmod +x $as_me.lineno || { { echo "$as_me:$LINENO: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&5 echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2;} { (exit 1); exit 1; }; } # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensible to this). . ./$as_me.lineno # Exit status is that of the last command. exit } case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in *c*,-n*) ECHO_N= ECHO_C=' ' ECHO_T=' ' ;; *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; *) ECHO_N= ECHO_C='\c' ECHO_T= ;; esac if expr a : '\(a\)' >/dev/null 2>&1; then as_expr=expr else as_expr=false fi rm -f conf$$ conf$$.exe conf$$.file echo >conf$$.file if ln -s conf$$.file conf$$ 2>/dev/null; then # We could just check for DJGPP; but this test a) works b) is more generic # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). if test -f conf$$.exe; then # Don't use ln at all; we don't have any links as_ln_s='cp -p' else as_ln_s='ln -s' fi elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.file if mkdir -p . 2>/dev/null; then as_mkdir_p=: else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_executable_p="test -f" # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" # IFS # We need space, tab and new line, in precisely that order. as_nl=' ' IFS=" $as_nl" # CDPATH. $as_unset CDPATH exec 6>&1 # Open the log real soon, to keep \$[0] and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. Logging --version etc. is OK. exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX } >&5 cat >&5 <<_CSEOF This file was extended by neon $as_me 0.24.7, which was generated by GNU Autoconf 2.59. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ _CSEOF echo "on `(hostname || uname -n) 2>/dev/null | sed 1q`" >&5 echo >&5 _ACEOF # Files that config.status was made for. if test -n "$ac_config_files"; then echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS fi if test -n "$ac_config_headers"; then echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS fi if test -n "$ac_config_links"; then echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS fi if test -n "$ac_config_commands"; then echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS fi cat >>$CONFIG_STATUS <<\_ACEOF ac_cs_usage="\ \`$as_me' instantiates files from templates according to the current configuration. Usage: $0 [OPTIONS] [FILE]... -h, --help print this help, then exit -V, --version print version number, then exit -q, --quiet do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Report bugs to ." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF ac_cs_version="\\ neon config.status 0.24.7 configured by $0, generated by GNU Autoconf 2.59, with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\" Copyright (C) 2003 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." srcdir=$srcdir INSTALL="$INSTALL" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # If no file are specified by the user, then we need to provide default # value. By we need to know if files were specified by the user. ac_need_defaults=: while test $# != 0 do case $1 in --*=*) ac_option=`expr "x$1" : 'x\([^=]*\)='` ac_optarg=`expr "x$1" : 'x[^=]*=\(.*\)'` ac_shift=: ;; -*) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; *) # This is not an option, so the user has probably given explicit # arguments. ac_option=$1 ac_need_defaults=false;; esac case $ac_option in # Handling of the options. _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --vers* | -V ) echo "$ac_cs_version"; exit 0 ;; --he | --h) # Conflict between --help and --header { { echo "$as_me:$LINENO: error: ambiguous option: $1 Try \`$0 --help' for more information." >&5 echo "$as_me: error: ambiguous option: $1 Try \`$0 --help' for more information." >&2;} { (exit 1); exit 1; }; };; --help | --hel | -h ) echo "$ac_cs_usage"; exit 0 ;; --debug | --d* | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift CONFIG_FILES="$CONFIG_FILES $ac_optarg" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg" ac_need_defaults=false;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) { { echo "$as_me:$LINENO: error: unrecognized option: $1 Try \`$0 --help' for more information." >&5 echo "$as_me: error: unrecognized option: $1 Try \`$0 --help' for more information." >&2;} { (exit 1); exit 1; }; } ;; *) ac_config_targets="$ac_config_targets $1" ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF if \$ac_cs_recheck; then echo "running $SHELL $0 " $ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6 exec $SHELL $0 $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF for ac_config_target in $ac_config_targets do case "$ac_config_target" in # Handling of arguments. "neon-config" ) CONFIG_FILES="$CONFIG_FILES neon-config" ;; "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;; "src/Makefile" ) CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; "test/Makefile" ) CONFIG_FILES="$CONFIG_FILES test/Makefile" ;; "neon.pc" ) CONFIG_FILES="$CONFIG_FILES neon.pc" ;; "config.h" ) CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 echo "$as_me: error: invalid argument: $ac_config_target" >&2;} { (exit 1); exit 1; }; };; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason to put it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Create a temporary directory, and hook for its removal unless debugging. $debug || { trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0 trap '{ (exit 1); exit 1; }' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d -q "./confstatXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" } || { tmp=./confstat$$-$RANDOM (umask 077 && mkdir $tmp) } || { echo "$me: cannot create a temporary directory in ." >&2 { (exit 1); exit 1; } } _ACEOF cat >>$CONFIG_STATUS <<_ACEOF # # CONFIG_FILES section. # # No need to generate the scripts if there are no CONFIG_FILES. # This happens for instance when ./config.status config.h if test -n "\$CONFIG_FILES"; then # Protect against being on the right side of a sed subst in config.status. sed 's/,@/@@/; s/@,/@@/; s/,;t t\$/@;t t/; /@;t t\$/s/[\\\\&,]/\\\\&/g; s/@@/,@/; s/@@/@,/; s/@;t t\$/,;t t/' >\$tmp/subs.sed <<\\CEOF s,@SHELL@,$SHELL,;t t s,@PATH_SEPARATOR@,$PATH_SEPARATOR,;t t s,@PACKAGE_NAME@,$PACKAGE_NAME,;t t s,@PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t s,@PACKAGE_VERSION@,$PACKAGE_VERSION,;t t s,@PACKAGE_STRING@,$PACKAGE_STRING,;t t s,@PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t s,@exec_prefix@,$exec_prefix,;t t s,@prefix@,$prefix,;t t s,@program_transform_name@,$program_transform_name,;t t s,@bindir@,$bindir,;t t s,@sbindir@,$sbindir,;t t s,@libexecdir@,$libexecdir,;t t s,@datadir@,$datadir,;t t s,@sysconfdir@,$sysconfdir,;t t s,@sharedstatedir@,$sharedstatedir,;t t s,@localstatedir@,$localstatedir,;t t s,@libdir@,$libdir,;t t s,@includedir@,$includedir,;t t s,@oldincludedir@,$oldincludedir,;t t s,@infodir@,$infodir,;t t s,@mandir@,$mandir,;t t s,@build_alias@,$build_alias,;t t s,@host_alias@,$host_alias,;t t s,@target_alias@,$target_alias,;t t s,@DEFS@,$DEFS,;t t s,@ECHO_C@,$ECHO_C,;t t s,@ECHO_N@,$ECHO_N,;t t s,@ECHO_T@,$ECHO_T,;t t s,@LIBS@,$LIBS,;t t s,@user_LDFLAGS@,$user_LDFLAGS,;t t s,@ALLOW_INSTALL@,$ALLOW_INSTALL,;t t s,@INSTALL_PROGRAM@,$INSTALL_PROGRAM,;t t s,@INSTALL_SCRIPT@,$INSTALL_SCRIPT,;t t s,@INSTALL_DATA@,$INSTALL_DATA,;t t s,@build@,$build,;t t s,@build_cpu@,$build_cpu,;t t s,@build_vendor@,$build_vendor,;t t s,@build_os@,$build_os,;t t s,@host@,$host,;t t s,@host_cpu@,$host_cpu,;t t s,@host_vendor@,$host_vendor,;t t s,@host_os@,$host_os,;t t s,@CC@,$CC,;t t s,@CFLAGS@,$CFLAGS,;t t s,@LDFLAGS@,$LDFLAGS,;t t s,@CPPFLAGS@,$CPPFLAGS,;t t s,@ac_ct_CC@,$ac_ct_CC,;t t s,@EXEEXT@,$EXEEXT,;t t s,@OBJEXT@,$OBJEXT,;t t s,@EGREP@,$EGREP,;t t s,@LN_S@,$LN_S,;t t s,@ECHO@,$ECHO,;t t s,@AR@,$AR,;t t s,@ac_ct_AR@,$ac_ct_AR,;t t s,@RANLIB@,$RANLIB,;t t s,@ac_ct_RANLIB@,$ac_ct_RANLIB,;t t s,@STRIP@,$STRIP,;t t s,@ac_ct_STRIP@,$ac_ct_STRIP,;t t s,@CPP@,$CPP,;t t s,@LIBTOOL@,$LIBTOOL,;t t s,@top_builddir@,$top_builddir,;t t s,@NEON_BUILD_BUNDLED@,$NEON_BUILD_BUNDLED,;t t s,@SET_MAKE@,$SET_MAKE,;t t s,@ac_pt_AR@,$ac_pt_AR,;t t s,@ac_pt_RANLIB@,$ac_pt_RANLIB,;t t s,@LIBOBJS@,$LIBOBJS,;t t s,@NEON_SUPPORTS_ZLIB@,$NEON_SUPPORTS_ZLIB,;t t s,@PKG_CONFIG@,$PKG_CONFIG,;t t s,@NEON_SUPPORTS_SSL@,$NEON_SUPPORTS_SSL,;t t s,@KRB5_CONFIG@,$KRB5_CONFIG,;t t s,@NEON_CFLAGS@,$NEON_CFLAGS,;t t s,@NEON_LIBS@,$NEON_LIBS,;t t s,@NEON_LTLIBS@,$NEON_LTLIBS,;t t s,@NEON_TARGET@,$NEON_TARGET,;t t s,@NEON_OBJEXT@,$NEON_OBJEXT,;t t s,@NEONOBJS@,$NEONOBJS,;t t s,@NEON_EXTRAOBJS@,$NEON_EXTRAOBJS,;t t s,@NEON_LINK_FLAGS@,$NEON_LINK_FLAGS,;t t s,@NEON_SUPPORTS_DAV@,$NEON_SUPPORTS_DAV,;t t s,@NEON_VERSION@,$NEON_VERSION,;t t s,@OPENSSL@,$OPENSSL,;t t s,@HELPERS@,$HELPERS,;t t s,@TESTS@,$TESTS,;t t s,@LTLIBOBJS@,$LTLIBOBJS,;t t CEOF _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # Split the substitutions into bite-sized pieces for seds with # small command number limits, like on Digital OSF/1 and HP-UX. ac_max_sed_lines=48 ac_sed_frag=1 # Number of current file. ac_beg=1 # First line for current file. ac_end=$ac_max_sed_lines # Line after last line for current file. ac_more_lines=: ac_sed_cmds= while $ac_more_lines; do if test $ac_beg -gt 1; then sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag else sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag fi if test ! -s $tmp/subs.frag; then ac_more_lines=false else # The purpose of the label and of the branching condition is to # speed up the sed processing (if there are no `@' at all, there # is no need to browse any of the substitutions). # These are the two extra sed commands mentioned above. (echo ':t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed if test -z "$ac_sed_cmds"; then ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed" else ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed" fi ac_sed_frag=`expr $ac_sed_frag + 1` ac_beg=$ac_end ac_end=`expr $ac_end + $ac_max_sed_lines` fi done if test -z "$ac_sed_cmds"; then ac_sed_cmds=cat fi fi # test -n "$CONFIG_FILES" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". case $ac_file in - | *:- | *:-:* ) # input from stdin cat >$tmp/stdin ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; * ) ac_file_in=$ac_file.in ;; esac # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories. ac_dir=`(dirname "$ac_file") 2>/dev/null || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` { if $as_mkdir_p; then mkdir -p "$ac_dir" else as_dir="$ac_dir" as_dirs= while test ! -d "$as_dir"; do as_dirs="$as_dir $as_dirs" as_dir=`(dirname "$as_dir") 2>/dev/null || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` done test ! -n "$as_dirs" || mkdir $as_dirs fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} { (exit 1); exit 1; }; }; } ac_builddir=. if test "$ac_dir" != .; then ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` # A "../" for each directory in $ac_dir_suffix. ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` else ac_dir_suffix= ac_top_builddir= fi case $srcdir in .) # No --srcdir option. We are building in place. ac_srcdir=. if test -z "$ac_top_builddir"; then ac_top_srcdir=. else ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` fi ;; [\\/]* | ?:[\\/]* ) # Absolute path. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ;; *) # Relative path. ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_builddir$srcdir ;; esac # Do not use `cd foo && pwd` to compute absolute paths, because # the directories may not exist. case `pwd` in .) ac_abs_builddir="$ac_dir";; *) case "$ac_dir" in .) ac_abs_builddir=`pwd`;; [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; *) ac_abs_builddir=`pwd`/"$ac_dir";; esac;; esac case $ac_abs_builddir in .) ac_abs_top_builddir=${ac_top_builddir}.;; *) case ${ac_top_builddir}. in .) ac_abs_top_builddir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; esac;; esac case $ac_abs_builddir in .) ac_abs_srcdir=$ac_srcdir;; *) case $ac_srcdir in .) ac_abs_srcdir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; esac;; esac case $ac_abs_builddir in .) ac_abs_top_srcdir=$ac_top_srcdir;; *) case $ac_top_srcdir in .) ac_abs_top_srcdir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; esac;; esac case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_builddir$INSTALL ;; esac if test x"$ac_file" != x-; then { echo "$as_me:$LINENO: creating $ac_file" >&5 echo "$as_me: creating $ac_file" >&6;} rm -f "$ac_file" fi # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ if test x"$ac_file" = x-; then configure_input= else configure_input="$ac_file. " fi configure_input=$configure_input"Generated from `echo $ac_file_in | sed 's,.*/,,'` by configure." # First look for the input files in the build tree, otherwise in the # src tree. ac_file_inputs=`IFS=: for f in $ac_file_in; do case $f in -) echo $tmp/stdin ;; [\\/$]*) # Absolute (can't be DOS-style, as IFS=:) test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } echo "$f";; *) # Relative if test -f "$f"; then # Build tree echo "$f" elif test -f "$srcdir/$f"; then # Source tree echo "$srcdir/$f" else # /dev/null tree { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } fi;; esac done` || { (exit 1); exit 1; } _ACEOF cat >>$CONFIG_STATUS <<_ACEOF sed "$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s,@configure_input@,$configure_input,;t t s,@srcdir@,$ac_srcdir,;t t s,@abs_srcdir@,$ac_abs_srcdir,;t t s,@top_srcdir@,$ac_top_srcdir,;t t s,@abs_top_srcdir@,$ac_abs_top_srcdir,;t t s,@builddir@,$ac_builddir,;t t s,@abs_builddir@,$ac_abs_builddir,;t t s,@top_builddir@,$ac_top_builddir,;t t s,@abs_top_builddir@,$ac_abs_top_builddir,;t t s,@INSTALL@,$ac_INSTALL,;t t " $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out rm -f $tmp/stdin if test x"$ac_file" != x-; then mv $tmp/out $ac_file else cat $tmp/out rm -f $tmp/out fi # Run the commands associated with the file. case $ac_file in neon-config ) chmod +x neon-config ;; esac done _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # # CONFIG_HEADER section. # # These sed commands are passed to sed as "A NAME B NAME C VALUE D", where # NAME is the cpp macro being defined and VALUE is the value it is being given. # # ac_d sets the value in "#define NAME VALUE" lines. ac_dA='s,^\([ ]*\)#\([ ]*define[ ][ ]*\)' ac_dB='[ ].*$,\1#\2' ac_dC=' ' ac_dD=',;t' # ac_u turns "#undef NAME" without trailing blanks into "#define NAME VALUE". ac_uA='s,^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' ac_uB='$,\1#\2define\3' ac_uC=' ' ac_uD=',;t' for ac_file in : $CONFIG_HEADERS; do test "x$ac_file" = x: && continue # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". case $ac_file in - | *:- | *:-:* ) # input from stdin cat >$tmp/stdin ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; * ) ac_file_in=$ac_file.in ;; esac test x"$ac_file" != x- && { echo "$as_me:$LINENO: creating $ac_file" >&5 echo "$as_me: creating $ac_file" >&6;} # First look for the input files in the build tree, otherwise in the # src tree. ac_file_inputs=`IFS=: for f in $ac_file_in; do case $f in -) echo $tmp/stdin ;; [\\/$]*) # Absolute (can't be DOS-style, as IFS=:) test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } # Do quote $f, to prevent DOS paths from being IFS'd. echo "$f";; *) # Relative if test -f "$f"; then # Build tree echo "$f" elif test -f "$srcdir/$f"; then # Source tree echo "$srcdir/$f" else # /dev/null tree { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } fi;; esac done` || { (exit 1); exit 1; } # Remove the trailing spaces. sed 's/[ ]*$//' $ac_file_inputs >$tmp/in _ACEOF # Transform confdefs.h into two sed scripts, `conftest.defines' and # `conftest.undefs', that substitutes the proper values into # config.h.in to produce config.h. The first handles `#define' # templates, and the second `#undef' templates. # And first: Protect against being on the right side of a sed subst in # config.status. Protect against being in an unquoted here document # in config.status. rm -f conftest.defines conftest.undefs # Using a here document instead of a string reduces the quoting nightmare. # Putting comments in sed scripts is not portable. # # `end' is used to avoid that the second main sed command (meant for # 0-ary CPP macros) applies to n-ary macro definitions. # See the Autoconf documentation for `clear'. cat >confdef2sed.sed <<\_ACEOF s/[\\&,]/\\&/g s,[\\$`],\\&,g t clear : clear s,^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*\)\(([^)]*)\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1\2${ac_dC}\3${ac_dD},gp t end s,^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD},gp : end _ACEOF # If some macros were called several times there might be several times # the same #defines, which is useless. Nevertheless, we may not want to # sort them, since we want the *last* AC-DEFINE to be honored. uniq confdefs.h | sed -n -f confdef2sed.sed >conftest.defines sed 's/ac_d/ac_u/g' conftest.defines >conftest.undefs rm -f confdef2sed.sed # This sed command replaces #undef with comments. This is necessary, for # example, in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. cat >>conftest.undefs <<\_ACEOF s,^[ ]*#[ ]*undef[ ][ ]*[a-zA-Z_][a-zA-Z_0-9]*,/* & */, _ACEOF # Break up conftest.defines because some shells have a limit on the size # of here documents, and old seds have small limits too (100 cmds). echo ' # Handle all the #define templates only if necessary.' >>$CONFIG_STATUS echo ' if grep "^[ ]*#[ ]*define" $tmp/in >/dev/null; then' >>$CONFIG_STATUS echo ' # If there are no defines, we may have an empty if/fi' >>$CONFIG_STATUS echo ' :' >>$CONFIG_STATUS rm -f conftest.tail while grep . conftest.defines >/dev/null do # Write a limited-size here document to $tmp/defines.sed. echo ' cat >$tmp/defines.sed <>$CONFIG_STATUS # Speed up: don't consider the non `#define' lines. echo '/^[ ]*#[ ]*define/!b' >>$CONFIG_STATUS # Work around the forget-to-reset-the-flag bug. echo 't clr' >>$CONFIG_STATUS echo ': clr' >>$CONFIG_STATUS sed ${ac_max_here_lines}q conftest.defines >>$CONFIG_STATUS echo 'CEOF sed -f $tmp/defines.sed $tmp/in >$tmp/out rm -f $tmp/in mv $tmp/out $tmp/in ' >>$CONFIG_STATUS sed 1,${ac_max_here_lines}d conftest.defines >conftest.tail rm -f conftest.defines mv conftest.tail conftest.defines done rm -f conftest.defines echo ' fi # grep' >>$CONFIG_STATUS echo >>$CONFIG_STATUS # Break up conftest.undefs because some shells have a limit on the size # of here documents, and old seds have small limits too (100 cmds). echo ' # Handle all the #undef templates' >>$CONFIG_STATUS rm -f conftest.tail while grep . conftest.undefs >/dev/null do # Write a limited-size here document to $tmp/undefs.sed. echo ' cat >$tmp/undefs.sed <>$CONFIG_STATUS # Speed up: don't consider the non `#undef' echo '/^[ ]*#[ ]*undef/!b' >>$CONFIG_STATUS # Work around the forget-to-reset-the-flag bug. echo 't clr' >>$CONFIG_STATUS echo ': clr' >>$CONFIG_STATUS sed ${ac_max_here_lines}q conftest.undefs >>$CONFIG_STATUS echo 'CEOF sed -f $tmp/undefs.sed $tmp/in >$tmp/out rm -f $tmp/in mv $tmp/out $tmp/in ' >>$CONFIG_STATUS sed 1,${ac_max_here_lines}d conftest.undefs >conftest.tail rm -f conftest.undefs mv conftest.tail conftest.undefs done rm -f conftest.undefs cat >>$CONFIG_STATUS <<\_ACEOF # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ if test x"$ac_file" = x-; then echo "/* Generated by configure. */" >$tmp/config.h else echo "/* $ac_file. Generated by configure. */" >$tmp/config.h fi cat $tmp/in >>$tmp/config.h rm -f $tmp/in if test x"$ac_file" != x-; then if diff $ac_file $tmp/config.h >/dev/null 2>&1; then { echo "$as_me:$LINENO: $ac_file is unchanged" >&5 echo "$as_me: $ac_file is unchanged" >&6;} else ac_dir=`(dirname "$ac_file") 2>/dev/null || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` { if $as_mkdir_p; then mkdir -p "$ac_dir" else as_dir="$ac_dir" as_dirs= while test ! -d "$as_dir"; do as_dirs="$as_dir $as_dirs" as_dir=`(dirname "$as_dir") 2>/dev/null || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` done test ! -n "$as_dirs" || mkdir $as_dirs fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} { (exit 1); exit 1; }; }; } rm -f $ac_file mv $tmp/config.h $ac_file fi else cat $tmp/config.h rm -f $tmp/config.h fi done _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF { (exit 0); exit 0; } _ACEOF chmod +x $CONFIG_STATUS ac_clean_files=$ac_clean_files_save # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || { (exit 1); exit 1; } fi # for VPATH builds: test -d test/common || mkdir test/common { echo "$as_me:$LINENO: Configured to build neon 0.24.7: Install prefix: ${prefix} Compiler: ${CC} XML Parser: ${neon_xml_parser_message} SSL library: ${neon_ssl_message} zlib support: ${neon_zlib_message} Build libraries: Shared=${enable_shared}, Static=${enable_static} Now run 'make' to compile the neon library. " >&5 echo "$as_me: Configured to build neon 0.24.7: Install prefix: ${prefix} Compiler: ${CC} XML Parser: ${neon_xml_parser_message} SSL library: ${neon_ssl_message} zlib support: ${neon_zlib_message} Build libraries: Shared=${enable_shared}, Static=${enable_static} Now run 'make' to compile the neon library. " >&6;} case $ALLOW_INSTALL in memleak) { echo "$as_me:$LINENO: Configured with development-only flags: WARNING: This copy of neon has been configured with memory leak checking WARNING: enabled, which should only be used in a development copy of neon. WARNING: This neon library should not be installed for use by applications. " >&5 echo "$as_me: Configured with development-only flags: WARNING: This copy of neon has been configured with memory leak checking WARNING: enabled, which should only be used in a development copy of neon. WARNING: This neon library should not be installed for use by applications. " >&6;};; esac tla-1.3.5+dfsg/src/build-tools/0000755000175000017500000000000010457621764014775 5ustar userusertla-1.3.5+dfsg/src/build-tools/auto-conf-lib/0000755000175000017500000000000010457621764017434 5ustar userusertla-1.3.5+dfsg/src/build-tools/auto-conf-lib/gcc-test0000644000175000017500000000210510457621764021066 0ustar useruser# gcc-test - test for a version of GCC # ################################################################ # Copyright (C) 2002 Tom Lord # # See the file "COPYING" for further information about # the copyright and warranty status of this work. # # gcc-test variable # # See if ${CC} thinks it is gcc -- if so, what version? # if test $# -ne 1 ; then printf "usage: library-test variable-name\n" 1>&2 exit 1 fi variable_name="$1" rm -f ,test-prog.c rm -rf ,auto-conf-tmpdir cat > ,test-prog.c <<- EOF #include #undef stringify2 #undef stringify #define stringify2(x) #x #define stringify(y) stringify2(y) int main (int argc, char * argv[]) { #ifdef __GNUC__ printf ("%s\n", stringify(__GNUC__)); #endif return 0; } EOF mkdir ,auto-conf-tmpdir cd ,auto-conf-tmpdir if ${CC} -o ,test-prog ../,test-prog.c 2> /dev/null > /dev/null ; then gcc_version="`./,test-prog`" if test ! -z "$gcc_version" ; then printf "string %s=%s\n" "$variable_name" "$gcc_version" fi fi # arch-tag: Tom Lord Fri May 10 02:25:39 2002 (auto-conf-lib/gcc-test) # tla-1.3.5+dfsg/src/build-tools/auto-conf-lib/exec-suffix-test0000644000175000017500000000150210457621764022560 0ustar useruser# exec-suffix-test - check for suffix added by C compiler # ################################################################ # Copyright (C) 2002 Tom Lord # Copyright (C) 2003 Stig Brautaset # # See the file "COPYING" for further information about # the copyright and warranty status of this work. # # exec-suffix-test # # Check if the compiler adds a suffix to binaries. # if test $# -ne 0 ; then printf "usage: exec-suffix-test\n" 1>&2 exit 1 fi rm -rf ,auto-conf-tmpdir rm -f ,test-prog.c printf "int main (int argc, char * argv[]) { return 0; }" > ,test-prog.c mkdir ,auto-conf-tmpdir cd ,auto-conf-tmpdir ${CC} -o ,test-prog ../,test-prog.c 2> /dev/null > /dev/null suffix="`ls | sed s/^,test-prog//`" printf "string %s=%s\n" "exec-suffix" "$suffix" # arch-tag: Stig Brautaset Tue Jul 1 22:11:10 BST 2003 # tla-1.3.5+dfsg/src/build-tools/auto-conf-lib/gnu-patch-test0000644000175000017500000000573310457621764022232 0ustar useruser# gnu-patch-test: test for a version of (GNU) patch that accepts the --posix switch # ################################################################ ## Copyright (C) 2004 Andreas Fuchs # # See the file "COPYING" for further information about # the copyright and warranty status of this work. # if test $# -eq 0 ; then diff_option_name= diff3_option_name= PATCHPROG=patch elif test $# -eq 1 ; then patch_option_name="$1" PATCHPROG="`$srcdir/build-tools/scripts/option \"$patch_option_name\"`" else printf "config script error in %s\n" "$0" 1>&2 printf "usage: library-test [patch-option-name]\n" 1>&2 exit 1 fi CMP='cmp' # we require a working 'cmp' utility TMPDIR="/tmp/,patch-test.$$" ORIG_A="$TMPDIR/to-patch_a" ORIG_PRISTINE_A="$TMPDIR/to-patch_a.the-original" PATCHED_A="$TMPDIR/patched_a" EXPECTED_A="$TMPDIR/expected_a" PATCH_A="$TMPDIR/patch_a" ORIG_B="$TMPDIR/to-patch_b" ORIG_PRISTINE_B="$TMPDIR/to-patch_b.the-original" PATCHED_B="$TMPDIR/patched_b" EXPECTED_B="$TMPDIR/expected_b" PATCH_B="$TMPDIR/patch_b" ## set up files we need mkdir "$TMPDIR" for i in "$ORIG_A" "$ORIG_B"; do cat >"$i" <"$EXPECTED_A" <>"$EXPECTED_B" cat >"$PATCH_A" <"$PATCH_B" </dev/null ; then true else FAIL="yes" fi if "$CMP" "$PATCHED" "$EXPECTED" 2>/dev/null >/dev/null ; then true else FAIL="yes" fi if "$CMP" "$ORIG" "$PRISTINE" 2>/dev/null >/dev/null ; then true else FAIL="yes" fi } FAIL="" if [ -x "`which "$PATCHPROG" 2>/dev/null`" ] ; then testresults "$ORIG_A" "$PATCHED_A" "$EXPECTED_A" "$ORIG_PRISTINE_A" "$PATCH_A" testresults "$ORIG_B" "$PATCHED_B" "$EXPECTED_B" "$ORIG_PRISTINE_B" "$PATCH_B" if [ x"$FAIL" = x ] ; then echo "$PATCHPROG" rm -rf "$TMPDIR" exit 0 fi fi rm -rf "$TMPDIR" printf "\n" 1>&2 printf "The configured version of patch does not handle the --posix switch\n" 1>&2 printf "correctly.\n" 1>&2 printf "\n" 1>&2 printf " configured patch = %s.\n" "$PATCHPROG" 1>&2 printf "\n" 1>&2 if test ! -z "$patch_option_name" ; then printf "\n" 1>&2 printf "Use config options\n --with-%s PROG\n" "$patch_option_name" 1>&2 printf "\n" 1>&2 printf " NOTE: You will want to grab a recent version of the GNU patch\n" 1>&2 printf " distribution. On BSD systems, you can just install the\n" 1>&2 printf " devel/patch port or package.\n" 1>&2 printf "\n" 1>&2 fi exit 1 # arch-tag: Andreas Fuchs Sun Jan 25 02:12:45 2004 (auto-conf-lib/gnu-patch-test) # tla-1.3.5+dfsg/src/build-tools/auto-conf-lib/nonl-safe-diff0000644000175000017500000000545410457621764022157 0ustar useruser# nonl-safe-diff: test for diff and diff3 being safe for no-newline files # ################################################################ # Copyright (C) 2003 Andreas Fuchs, Tom Lord # # See the file "COPYING" for further information about # the copyright and warranty status of this work. # if test $# -eq 0 ; then diff_option_name= diff3_option_name= DIFF=diff DIFF3=diff3 elif test $# -eq 2 ; then diff_option_name="$1" diff3_option_name="$2" DIFF="`$srcdir/build-tools/scripts/option \"$diff_option_name\"`" DIFF3="`$srcdir/build-tools/scripts/option \"$diff3_option_name\"`" else printf "config script error in %s\n" "$0" 1>&2 printf "usage: library-test [diff-option-name diff3-option-name]\n" 1>&2 exit 1 fi TMPDIR=",,tmp" NLEOF_A="$TMPDIR/nl_eof_a" NLEOF_B="$TMPDIR/nl_eof_b" REGULAR_A="$TMPDIR/regular_a" REGULAR_B="$TMPDIR/regular_b" REGULAR_C="$TMPDIR/regular_c" ## set up files we need rm -rf "$TMPDIR" mkdir "$TMPDIR" cat >"$NLEOF_A" <>"$NLEOF_A" cat >"$NLEOF_B" <>"$NLEOF_B" cat >"$REGULAR_A" <"$REGULAR_B" <"$REGULAR_C" </dev/null | grep '^\\' >/dev/null 2>/dev/null; then true else FAIL="yes" fi if "$DIFF" -u -L label_a -L label_b "$REGULAR_A" "$REGULAR_B" >/dev/null 2>/dev/null ; then true else FAIL="yes" fi if "$DIFF3" -E --merge -L TREE -L ANCESTOR -L MERGE-SOURCE "$REGULAR_A" "$REGULAR_B" "$REGULAR_C" >/dev/null 2>/dev/null ; then true else FAIL="yes" fi if test -z "$FAIL" ; then rm -rf "$TMPDIR" exit 0 fi rm -rf "$TMPDIR" printf "\n" 1>&2 printf "The configured versions of diff and diff3 do not handle files\n" 1>&2 printf "not ending in newline correctly.\n" 1>&2 printf "\n" 1>&2 printf " configured diff = %s.\n" "$DIFF" 1>&2 printf " configured diff3 = %s.\n" "$DIFF3" 1>&2 printf "\n" 1>&2 if test ! -z "$diff_option_name" ; then printf "\n" 1>&2 printf "Use config options\n --with-%s PROG\n --with-%s PROG\n" "$diff_option_name" "$diff3_option_name" 1>&2 printf "\n" 1>&2 printf " NOTE: especially on BSD-derived systems, you will want\n" 1>&2 printf " to grab a recent version of GNU diff and compile it for use\n" 1>&2 printf " with those config options. You don't need to replace\n" 1>&2 printf " the native diff tools on your system, but you do need to\n" 1>&2 printf " configure tla specially. Sorry about that -- some BSDs\n" 1>&2 printf " have made a poor decision about their native diffs.\n" 1>&2 printf "\n" 1>&2 printf " (Example systems: some NetBSD, FreeBSD, and MacOS versions.)\n" 1>&2 printf "\n" 1>&2 fi exit 1 # arch-tag: Tom Lord Sun Dec 14 09:39:08 2003 (auto-conf-lib/nonl-safe-diff) # tla-1.3.5+dfsg/src/build-tools/auto-conf-lib/library-test0000644000175000017500000000204110457621764021775 0ustar useruser# library-test - test for a possible library # ################################################################ # Copyright (C) 2002 Tom Lord # # See the file "COPYING" for further information about # the copyright and warranty status of this work. # # library-test variable libspec # # If you can build a (trivial) program with: # # ${CC} -o ,test-proc ,test-proc.c "$libspec" # # then output: # # string VARIABLE=LIBSPEC # # otherwise: # # string VARIABLE= # if test $# -ne 2 ; then printf "usage: library-test variable-name library-spec\n" 1>&2 exit 1 fi variable_name="$1" library_spec="$2" rm -f ,test-prog.c rm -rf ,auto-conf-tmpdir printf "int main (int argc, char * argv[]) { return 0; }" > ,test-prog.c mkdir ,auto-conf-tmpdir cd ,auto-conf-tmpdir if ${CC} -o ,test-prog ../,test-prog.c "$library_spec" 2> /dev/null > /dev/null ; then printf "string %s=%s\n" "$variable_name" "$library_spec" else printf "string %s=\n" "$variable_name" fi # arch-tag: Tom Lord Fri Feb 22 03:22:02 2002 (auto-conf-lib/library-test) # tla-1.3.5+dfsg/src/build-tools/auto-conf-lib/header-test0000644000175000017500000000157010457621764021567 0ustar useruser# header-test - test for a possible header # ################################################################ # Copyright (C) 2002 Tom Lord # # See the file "COPYING" for further information about # the copyright and warranty status of this work. # # header-test variable headerspec # # If ${CC} -E exits with 0 status for this input: # # #include headerspec # # then output: # # binary VARIABLE=1 # # otherwise: # # binary VARIABLE=0 # if test $# -ne 2 ; then printf "usage: header-test variable-name header-spec\n" 1>&2 exit 1 fi variable_name="$1" header_spec="$2" rm -f ,test-prog.c printf "#include %s\n" "$header_spec" > ,test-prog.c if ${CC} -E ,test-prog.c 2> /dev/null > /dev/null ; then printf "binary %s=1\n" "$variable_name" else printf "binary %s=0\n" "$variable_name" fi # arch-tag: Tom Lord Fri Jun 27 14:46:09 2003 (auto-conf-lib/header-test) # tla-1.3.5+dfsg/src/build-tools/=THANKS0000644000175000017500000000171510457621764016011 0ustar useruser package-framework Acknowledgements Thanks for bug spotting and fixing and apologies for accidental omissions from this list. Contributions in the form of arch-managed changes merged into package-framework are noted in the patch log. Original List: andres Jason Diamond Magnus Fromreide Jonathan Geisler Chris Marston Andrew Morton Matthias Neeracher More detailed list: Stig Brautaset * Pointed out `make clean' problems. (Sun Jan 26 14:20 2003) * Pointed out spelling errors (including in option names) (2003-03-02). Edouard Gomez * Pointed out that pseudo-filenames in line directives of `gcc -E' output are translated in recent versions of GCC. (Tue Feb 4 01:18 2003) Patrick Mauritz * Don't use `head -', use `head -n ' (Fri Apr 11 14:55 2003) Andrew Suffield * Pointed out that `rm' was used sloppily in some makefiles. (Sun Jan 26 14:20 2003) # arch-tag: Tom Lord Tue Jan 22 18:26:34 2002 (src/=THANKS) # tla-1.3.5+dfsg/src/build-tools/Makefiles/0000755000175000017500000000000010457621764016675 5ustar userusertla-1.3.5+dfsg/src/build-tools/Makefiles/dotx.sed0000644000175000017500000000146610457621764020357 0ustar useruser# arch-tag: Tom Lord Tue Dec 4 15:09:57 2001 (Makefiles/dotx.sed) # # dotx.sed - # ################################################################ # Copyright (C) 2001 Tom Lord # # See the file "COPYING" for further information about # the copyright and warranty status of this work. # # This sed script is used during the construction # process to extract information from pre-processed # source files. # # See, for example, the macro SCM_PROC. # # The effect of this script is to delete all lines # from the input except for those between a line that # contains "%%%" and a line that contains the matching # "@@@" # # The "%%%" are replaced by newlines and the "@@@" are # deleted from the output. # /%%%/! { d b } :lookforend s/%%%/\ / /@@@/! { N b lookforend } s/@@@// /%%%/ b lookforend tla-1.3.5+dfsg/src/build-tools/Makefiles/install-scm-scripts.mk0000644000175000017500000000344010457621764023142 0ustar useruser# install-scm-scripts.mk: # ################################################################ # Copyright (C) 2001, 2002 Tom Lord # # See the file "COPYING" for further information about # the copyright and warranty status of this work. # ifndef install-scm-scripts-mk install-scm-scripts-mk := 1 # This file installs Scheme programs organized as scripts suitable for # use with execve. # # Already set upon entry (see also "scm-scripts.scm"): # # $(scm-scripts) The scripts to be installed, without # the (source) extension (".ss"). # # On `make install', the scripts are copied to the install directory # # $(program-install-dir) # # with this line prefixed to the script: # # #!$(prefix)/bin/systas # # If the source file already has a first line beginning with "#!", # that line is removed. # # The extension is removed from the script when installed. # installed-systas := $(prefix)/bin/systas include $(makefiles)/rules.mk install: install-scm-scripts install-scm-scripts: $(addsufix .ss, $(script-names)) set -e ; \ for f in $(script-names) ; do \ test ! -e $(program-install-dir)/$$f || rm $(program-install-dir)/$$f ; \ test ! -e $(program-install-dir)/,,$$f || rm $(program-install-dir)/,,$$f ; \ mkdir -p $(program-install-dir) ; \ echo "#!$(installed-systas)" > $(program-install-dir)/,,$$f ; \ cat $(srcdir)/$$f.ss | sed -e "1{/#!/d;}" >> $(program-install-dir)/,,$$f ; \ chmod ugo+x $(program-install-dir)/,,$$f ; \ mv $(program-install-dir)/,,$$f $(program-install-dir)/$$f ; \ done echo $(script-names) | sed -f $(makefiles)/column.sed > Installed-scm-scripts clean: clean-install-scm-scripts clean-install-scm-scripts: test ! -e Installed-scm-scripts || rm Installed-scm-scripts endif # arch-tag: Tom Lord Tue Dec 4 14:47:15 2001 (install-scm-scripts.mk) # tla-1.3.5+dfsg/src/build-tools/Makefiles/config-info.mk0000644000175000017500000000321010457621764021420 0ustar useruser# config-info.mk: build/install rules for the generic # config program. This program can # tell users what version of a program # was installed and what options it was # compiled with. # ################################################################ # Copyright (C) 2001, 2002 Tom Lord # # See the file "COPYING" for further information about # the copyright and warranty status of this work. # ifndef config-info-mk config-info-mk := 1 # Build programs. # # Set on entry: # # $(cfg__std__advertised_as) a list of names under which to install # the config program # # # config-info.c is compiled as a program. # # It is installed as each of the names in $(cfg__std__advertised_as). # mains := config-info.c no-Programs-rule := 1 include $(makefiles)/programs.mk install_names := $(patsubst %, %-cfg, $(cfg__std__advertised_as)) all: $(install_names) Programs $(install_names) Programs: config-info for a in $(install_names) ; do cp config-info $$a ; done echo config-info $(install_names) | sed -f $(makefiles)/column.sed > Programs install: install-advertised Installed-programs install-advertised Installed-programs: $(install_names) ifdef install_names for f in $(install_names) ; do test ! -e $(program-install-dir)/$$f || rm $(program-install-dir)/$$f; done mkdir -p $(program-install-dir) cp $(install_names) $(program-install-dir) endif echo $(install_names) | sed -f $(makefiles)/column.sed > Installed-programs clean: clean-advertised clean-advertised: for f in $(install_names) Installed-programs ; do \ test ! -e $$f || rm $$f ; \ done endif # arch-tag: Tom Lord Tue Dec 4 14:47:19 2001 (config-info.mk) # tla-1.3.5+dfsg/src/build-tools/Makefiles/shell-subcommands.mk0000644000175000017500000000527410457621764022656 0ustar useruser# shell-subcommands.mk: build shell scripts which implement # sub-commands of a program # ################################################################ # Copyright (C) 2001, 2002 Tom Lord # # See the file "COPYING" for further information about # the copyright and warranty status of this work. # ifndef shell-subcommands-mk shell-subcommands-mk := 1 # Already set upon entry: see "rules.mk". # # Optionally set on entry: # # $(shell-scripts) source files, with the extension .sh, # to turn into executable scripts. # # $(cfg__posix_shell) the program to use in "#!" lines # for shell scripts (default "/bin/sh") # # This file creates executable programs from shell scripts. These # programs are created in the build directory and not installed. (See # "install-program.mk".) # # By default, shell-scripts is all files in the source directory with # the extension "sh" and beginning with any of [a-zA-Z0-9]. # # On `make all', the scripts are copied to the build directory, # without the ".sh" extension, and chmoded to be executable by # anyone. # # If the source file does not already have a first line beginning # with "#!", then a line "#!/bin/sh" is added. # # In addition, files in the list: # # shell-subcommand-help-source := Help.category.in ... # # are copied to the build directory with .in stripped off. # ifndef shell-subcommands shell-subcommands := $(sort $(notdir $(wildcard $(srcdir)/[a-zA-Z0-9]*.sh))) endif ifndef subcommand-help-data shell-subcommand-help-source := $(notdir $(wildcard $(srcdir)/Help.*.in)) endif shell-subcommand-names := $(basename $(shell-subcommands)) shell-subcommand-help := $(basename $(shell-subcommand-help-source)) ifndef cfg__posix_shell cfg__posix_shell := /bin/sh endif include $(makefiles)/rules.mk all: $(shell-subcommand-names) $(shell-subcommand-help) Shell-subcommands Shell-subcommand-help $(shell-subcommand-names):%:%.sh for f in $@ ; do test ! -e $$f || rm $$f ; done if test "`head -n 1 $< | sed -e 's/\(..\).*/\1/'`" != "#!" ; then echo "#!$(cfg__posix_shell)" ; fi > $@ cat $< >> $@ chmod ugo+x $@ $(shell-subcommand-help):%:%.in for f in $@ ; do test ! -e $$f || rm $$f ; done cp $< $@ Shell-subcommands: $(shell-subcommand-names) echo $(shell-subcommand-names) | sed -f $(makefiles)/column.sed > Shell-subcommands Shell-subcommand-help: $(shell-subcommand-help) echo $(shell-subcommand-help) | sed -f $(makefiles)/column.sed > Shell-subcommand-help clean: clean-shell-subcommands clean-shell-subcommands: for f in $(shell-subcommand-names) Shell-subcommands $(shell-subcommand-help) Shell-subcommand-help ; do \ test ! -e $$f || rm $$f ; \ done endif # arch-tag: Tom Lord Tue Dec 4 14:47:21 2001 (shell-subcommands.mk) # tla-1.3.5+dfsg/src/build-tools/Makefiles/install-docs.mk0000644000175000017500000000311310457621764021620 0ustar useruser# install-doc.mk: install documentation # ################################################################ # Copyright (C) 2001, 2002 Tom Lord # Copyright (C) 2003, Stig Brautaset # # See the file "COPYING" for further information about # the copyright and warranty status of this work. # ifndef install-doc-mk install-doc-mk := 1 # Optionally set on entry: # # $(ps-files) postscript documentation # $(pdf-files) pdf documentation # $(html-files) html documentation # $(txt-files) plain text documentation # $(extradocs) user-defined documentation # to be installed # (default: README) # # After installation, the build directory will contain "Installed-docs" # which is a list of the documentation files that were installed. # include $(makefiles)/rules.mk documentation := $(ps-files) $(pdf-files) $(html-files) $(txt-files) documentation := $(strip $(documentation)) ifndef documentation ifndef extradocs extradocs := README endif endif install-doc: install-docs Installed-docs install-docs Installed-docs: $(documentation) for f in $(documentation) .FAKE_DOC ; do test ! -e $(doc-install-dir)/$$f || rm -f $(doc-install-dir)/$$f ; done mkdir -p $(doc-install-dir) cp $(documentation) $(doc-install-dir) for f in $(extradocs) .FAKE_DOC ; do test ! -e $(srcdir)/$$f || cp $(srcdir)/$$f $(doc-install-dir) ; done echo $(documentation) $(extradocs) | sed -f $(makefiles)/column.sed > Installed-docs clean: clean-install-docs clean-install-docs: test ! -e Installed-docs || rm Installed-docs endif # arch-tag: Stig Brautaset Sun Mar 9 17:02:49 GMT 2003 (install-doc.mk) # tla-1.3.5+dfsg/src/build-tools/Makefiles/install-scm.mk0000644000175000017500000000270610457621764021461 0ustar useruser# arch-tag: Tom Lord Tue Dec 4 14:47:16 2001 (install-scm.mk) # # install-scm.mk - # ################################################################ # Copyright (C) 2001 Tom Lord # # See the file "COPYING" for further information about # the copyright and warranty status of this work. # ifndef install-scm-mk install-scm-mk := 1 # This file installs a library of Scheme programs organized as # one-level directory of a source tree, e.g.: # # $(srcdir)/piw-analyze/report.scm # /sim.scm # # They are installed as a corresponding subdirectory of # # $(scm-install-dir) # # For example: # # $(scm-install-dir)/piw-analyze # # After installation, the build directory will contain # "Installed-scm-files" which is a list of the Scheme files that were # installed. The list includes relative path names, e.g.: # # piw-analyze/report.scm # piw-analyze/sim.scm # ... # include $(makefiles)/rules.mk ifndef scm-files scm-files := $(sort $(notdir $(wildcard $(srcdir)/[^,+=]*.scm))) endif install: install-scm-files install-scm-files: $(scm-files) echo $(addprefix $(thisdir)/, $(scm-files)) | sed -f $(makefiles)/column.sed > Installed-scm-files test ! -e $(scm-install-dir)/$(thisdir) || rm -r $(scm-install-dir)/$(thisdir) mkdir -p $(scm-install-dir)/$(thisdir) cp $(addprefix $(srcdir)/, $(scm-files)) $(scm-install-dir)/$(thisdir) clean: clean-install-scm-files clean-install-scm-files: test ! -e Installed-scm-files || rm Installed-scm-files endif tla-1.3.5+dfsg/src/build-tools/Makefiles/library-pdml.mk0000644000175000017500000000330610457621764021626 0ustar useruser# arch-tag: Tom Lord Tue Dec 4 14:47:17 2001 (library-pdml.mk) # # library-pdml.mk - # ################################################################ # Copyright (C) 2001 Tom Lord # # See the file "COPYING" for further information about # the copyright and warranty status of this work. # ifndef library-pdml library-pdml := 1 # Build documentation pdml files from library source code. # # Set on entry: # # $(source-files) files from which to build pdml files. # $(documentation-skip) file to ignore in $(source-files). # $(other-documentation) files in other directories to include in documentation # # Optionally set: # # $(pdml-files) source files already in pdml format. # # After "make pdml", the build directory will contain pdml files # of documentation extracted from the library source. # ifdef other-documentation vpath % $(addprefix $(srcdir)/, $(dir $(other-documentation))) endif include $(makefiles)/rules.mk doc-source := $(filter-out $(documentation-skip), $(wildcard $(srcdir)/*.doc) $(filter %.doc, $(other-documentation))) pdml-source := $(filter-out $(documentation-skip), $(source-files)) $(filter %.c, $(other-documentation)) pdml-files := $(sort $(pdml-files) $(patsubst %.doc, %.pdml, $(notdir $(doc-source))) $(patsubst %.c, %.pdml, $(notdir $(pdml-source)))) ifdef clean-only pdml-depfiles := else pdml-depfiles := $(patsubst %.c, %.d, $(notdir $(pdml-source))) endif pdml PDML: $(pdml-files) echo $(pdml-files) | sed -f $(makefiles)/column.sed > PDML clean: clean-pdml-files clean-doc: clean-pdml-files clean-pdml-files: for f in $(pdml-files) PDML *.d ; do \ test ! -e $$f || rm $$f ; \ done ifndef clean-only ifdef libdepfiles -include $(pdml-depfiles) endif endif endif tla-1.3.5+dfsg/src/build-tools/Makefiles/install-library-objects.mk0000644000175000017500000000234010457621764023764 0ustar useruser# install-library-objects.mk: # # Install a library. # ################################################################ # Copyright (C) 2001, 2002 Tom Lord # # See the file "COPYING" for further information about # the copyright and warranty status of this work. # ifndef install-library-objects-mk install-library-objects-mk := 1 # Already set upon entry (see also "library-objects.mk"): # # $(libobjs) the list of object files to install # # After installation, the build directory will contain "Installed-library-objects" # which contains the name of the object files that were installed. # include $(makefiles)/rules.mk install: install-library-objects Installed-library-objects install-library-objects Installed-library-objects: $(libobjs) for obj in $(libobjs) ; do \ test ! -e $(library-install-dir)/$$obj || rm -f $(library-install-dir)/$$obj ; \ done mkdir -p $(library-install-dir) cp $(libobjs) $(library-install-dir) echo $(libobjs) | sed -f $(makefiles)/column.sed > Installed-library-objects clean: clean-install-library-objects clean-install-library-objects: test ! -e Installed-library-objects || rm Installed-library-objects endif # arch-tag: Tom Lord Tue Dec 4 14:47:15 2001 (install-library-objects.mk) # tla-1.3.5+dfsg/src/build-tools/Makefiles/install-datafiles.mk0000644000175000017500000000225510457621764022632 0ustar useruser# install-datafiles.mk: install datafiles # ################################################################ # Copyright (C) 2001, 2002 Tom Lord # Copyright (C) 2003 Stig Brautaset # # See the file "COPYING" for further information about # the copyright and warranty status of this work. # ifndef install-datafiles-mk install-datafiles-mk := 1 # Set on entry: # # $(datafiles) the datafiles that should be installed # # After installation, the build directory will contain # "Installed-datafiles" which is a list of the files that were # installed. # include $(makefiles)/rules.mk install: install-datafiles Installed-datafiles install-datafiles Installed-datafiles: $(datafiles) ifdef datafiles for f in $(datafiles) ; do test ! -e $(data-install-dir)/$$f || rm -f $(data-install-dir)/$$f ; done mkdir -p $(data-install-dir) for f in $(datafiles) ; do cp $(srcdir)/$$f $(data-install-dir)/$$f ; done endif echo $(datafiles) | sed -f $(makefiles)/column.sed > Installed-datafiles clean: clean-install-datafiles clean-install-datafiles: test ! -e Installed-datafiles || rm Installed-datafiles endif # arch-tag: Stig Brautaset Sun Mar 9 17:02:49 GMT 2003 (install-datafiles.mk) # tla-1.3.5+dfsg/src/build-tools/Makefiles/library-html.mk0000644000175000017500000000224710457621764021641 0ustar useruser# arch-tag: Tom Lord Tue Dec 4 14:47:16 2001 (library-html.mk) # # library-html.mk - # ################################################################ # Copyright (C) 2001 Tom Lord # # See the file "COPYING" for further information about # the copyright and warranty status of this work. # ifndef library-html library-html := 1 # Build documentation html files from pdml files. # # Set on entry: # # $(pdml-files) pdml files from which to build html files. # $(html-skip) files to ignore in $(pdml-files) # $(docindex) the .pdml-index file to use when building html. # # After "make html", the build directory will contain .html files # of documentation extracted from the library source. # include $(makefiles)/rules.mk include $(makefiles)/library-pdml.mk html-source := $(filter-out $(html-skip), $(pdml-files)) html-files := $(sort $(patsubst %.pdml, %.html, $(notdir $(html-source)))) pdml-index-processors += --output-format html html HTML: $(html-files) echo $(html-files) | sed -f $(makefiles)/column.sed > HTML clean: clean-html-files clean-doc: clean-html-files clean-html-files: for f in $(html-files) HTML *.d ; do \ test ! -e $$f || rm $$f ; \ done endif tla-1.3.5+dfsg/src/build-tools/Makefiles/=TODO0000644000175000017500000000114310457621764017461 0ustar useruser* General Clean-up These files have been cleaned up: rules.mk library-objects.mk library.mk install-library.mk install-includes.mk top-level.mk dirs.mk programs.mk install-programs.mk config-info.mk unit-tests.mk shell-scripts.mk install-shell-scripts.mk shell-subcommands.mk install-shell-subcommands.mk These files are still a mess: install-scm-scripts.mk install-scm-subdirs.mk install-scm.mk scm-library.mk scm-scripts.mk library-html.mk library-pdml.mk library-ps.mk library-texi.mk pdml-index.mk # arch-tag: Tom Lord Sat Jan 19 18:38:05 2002 (Makefiles/=TODO) # tla-1.3.5+dfsg/src/build-tools/Makefiles/library-objects.mk0000644000175000017500000000314710457621764022326 0ustar useruser# library-objects.mk: # # Compile all of the source files which are not the `main' # modules for programs into .o files. # ################################################################ # Copyright (C) 2001, 2002 Tom Lord # # See the file "COPYING" for further information about # the copyright and warranty status of this work. # ifndef library-objects-mk library-objects-mk := 1 # Build object files, as for a library. # # Set on entry: # # $(source-files) files from which to build objects and programs # $(mains) source files to exclude from this part of the build # # Optionally set on entry: # # $(ignore-files) source files to ignore when building a library # # Ordinarily, $(mains) is the list of source files that define "main". # This is usually defined in the "Makefile.in" of the source directory. # $(source-files) is usually computed by "rules.mk". # # After "make all", the build directory will contain "Objects" which # is a list of the object files that were built by this makefile. # For every source file which is not in $(mains), the build directory will # contain a .o file. # include $(makefiles)/rules.mk libsource := $(filter-out $(mains) $(ignore-files), $(source-files)) libobjs := $(sort $(libobjs) $(patsubst %.c, %.o, $(notdir $(libsource)))) libdepfiles := $(patsubst %.c, %.d, $(notdir $(libsource))) all Objects: $(libobjs) echo $(libobjs) | sed -f $(makefiles)/column.sed > Objects clean: clean-libobjs clean-libobjs: for f in $(libobjs) Objects $(libdepfiles) ; do \ test ! -e $$f || rm $$f ; \ done endif # arch-tag: Tom Lord Tue Dec 4 14:47:16 2001 (library-objects.mk) # tla-1.3.5+dfsg/src/build-tools/Makefiles/rules.mk0000644000175000017500000001630410457621764020364 0ustar useruser# rules.mk: the makefile all other makefiles include first # ################################################################ # Copyright (C) 2001, 2002 Tom Lord # # See the file "COPYING" for further information about # the copyright and warranty status of this work. # ################################################################ # Presumed already set (from configure): # # $(prefix) root of the install directory # $(srcdir) the source file directory # $(srcroot) the root of the source tree # $(thispath) $(srcdir) relative to $(srcroot) # $(destdir) for use when creating binary packages # # May be already set: # # CFLAGS _additional_ flags for the C compiler (e.g. "-O") # default: -g. This may be set from the command line # but should not be set in a Makefile that includes # rules.mk # # EXTRA_CFLAGS _additional_ flags for the C compiler. This may be # set in a Makefile that includes rules.mk. # # generated-includes # a list of include files generated during compilation # # generated-source # a list of source files generated during compilation # # clean-only # if defined, this was invoked from the generic top-level # makefile for `make clean'. # ################################################################ ifndef rules-mk rules-mk := 1 ################################################################ # Standard Targets # ################################################################ # The default dependency # all: # Some targets that must be defined (by convention): # install: all test: all doc: install-doc: doc install-all: install install-doc # There must never be a source file named "FORCE", nor any rule # for producing a file named "FORCE" # FORCE: ################################################################ # Automatic Identification of Source Files # ################################################################ # $(source-files) the complete list of source files. # For the moment, we only like C, but really # anything for which we have a rule to produce # a .o file is fine. # # Source files must begin with [a-zA-Z0-9]. In # "larch inventory", source can also begin with "=". # Source files beginning with "=" are presumed to be # `scaffolding' -- programs used during development that # should not be compiled during an ordinary build. # ifndef source-files source-files := $(sort $(generated-source) \ $(source-files) \ $(notdir $(wildcard $(srcdir)/[a-zA-Z0-9]*.c))) endif ################################################################ # Derived Paths # ################################################################ # $(thisdir) tail of `pwd` in the build directory # # thisdir is used to automatically generate names. For instance, # the names of installation directories. # thisdir := $(notdir $(shell pwd)) # Where programs are installed: # # $(destdir)$(prefix)/bin # binaries # /cgi # CGI executables # /lib # libraries # /include/$(thispath) # includes # /etc # the dreaded miscellaneous pile # /libexec # programs invoked by other programs # /share/info # info files # /share/man # manual entries # /share/scheme # Scheme libraries # /share/doc/$(thispath) # documentation # /share/$(thispath) # datafiles # program-install-dir := $(destdir)$(prefix)/bin cgi-install-dir := $(destdir)$(prefix)/cgi library-install-dir := $(destdir)$(prefix)/lib include-install-dir := $(destdir)$(prefix)/include/$(thispath) etc-install-dir := $(destdir)$(prefix)/etc libexec-install-dir := $(destdir)$(prefix)/libexec info-install-dir := $(destdir)$(prefix)/share/info man-install-dir := $(destdir)$(prefix)/share/man scm-install-dir := $(destdir)$(prefix)/share/scheme doc-install-dir := $(destdir)$(prefix)/share/doc/$(thispath) data-install-dir := $(destdir)$(prefix)/share/$(thispath) ################################################################ # CFLAGS # ################################################################ # $(CFLAGS) # # Extra compiler flags can be specified to make in the usual way, e.g.: # # make CFLAGS=-O # # The default value of CFLAGS is "-g" # # Makefile.in should never define $(CFLAGS). A particular Makefile.in can # add extra C flags by defining $(EXTRA_CFLAGS). # ifdef CFLAGS USER_CFLAGS := $(CFLAGS) else USER_CFLAGS := -g endif override CFLAGS := -I$(objroot)/config-include -I$(objroot) -I$(srcroot) $(USER_CFLAGS) $(EXTRA_CFLAGS) ################################################################ # Tools # ################################################################ ifdef cfg__cc CC := $(cfg__cc) endif ################################################################ # Automatic Dependency Tracking # # For every .c file, produce a .d file which states dependencies # of the corresponding .o file and executable upon include files. # ################################################################ %.d: %.c $(generated-includes) printf "%s %s.o %s.d: " $(basename $@) $(basename $@) $(basename $@) > $@ $(CC) -DFOR_MAKEFILE_DEPENDENCIES -E $(CFLAGS) $< | sed -f $(makefiles)/cpp-to-includes.sed | sort -u | sed -e 's/$$/ \\/' >> $@ echo >> $@ $(addsuffix .o, $(basename $(source-files))): %.o: %.d $(basename $(source-files)): %: %.d ifndef clean-only ifdef source-files -include $(addsuffix .d, $(notdir $(basename $(source-files)))) endif endif ################################################################ # Automatically Generated Source and Include Files # ################################################################ ifndef clean-only ifdef generated-includes all: $(generated-includes) endif ifdef generated-source all: $(generated-source) endif endif ifdef generated-source clean: clean-generated-source clean-generated-source: for f in $(generated-source) ; do \ test ! -e $$f || rm $$f ; \ done endif ifdef generated-includes clean: clean-generated-includes clean-generated-includes: for f in $(generated-includes) ; do \ test ! -e $$f || rm $$f ; \ done endif ################################################################ # Clean temp files # ################################################################ clean: clean-temp-files clean-temp-files: for f in ,* ,fake ; do \ test ! -e $$f || rm $$f ; \ done ################################################################ # Documenation Rules # # A temporary solution. # ################################################################ .SUFFIXES: .pdml .pdml-index .html .doc xdmlcomp := $(objroot)/systas/systas/systas $(srcroot)/systas/scheme-library/doc/xdml-comp.ss %.pdml : %.c %.d $(xdmlcomp) --reader c-comment --markup-language doc/old-pdml --print $< > $@ %.pdml : %.doc $(xdmlcomp) --reader c-comment --markup-language doc/old-pdml --print $< > $@ %.html : %.pdml $(the-pdml-index) $(xdmlcomp) --markup-language doc/old-pdml --output-format html $(foreach index, $(the-pdml-index), --use-index $(index)) --format $< %.texi : %.pdml $(the-pdml-index) $(xdmlcomp) --markup-language doc/old-pdml --output-format texinfo $(foreach index, $(the-pdml-index), --use-index $(index)) --format $< endif # ifndef rules-mk # arch-tag: Tom Lord Tue Dec 4 14:47:18 2001 (rules.mk) # tla-1.3.5+dfsg/src/build-tools/Makefiles/install-shell-subcommands.mk0000644000175000017500000000546310457621764024322 0ustar useruser# install-shell-subcommands.mk # ################################################################ # Copyright (C) 2001, 2002 Tom Lord # # See the file "COPYING" for further information about # the copyright and warranty status of this work. # ifndef install-shell-subcommands-mk install-shell-subcommands-mk := 1 # Already set upon entry (see also "shell-subcommands.mk"): # # $(shell-subcommand-names) the file-names (no directories) of # the subcommands # # $(shell-subcommand-help) the file-names (no directories) of # help files to install # # Optionally set: # # $(application-name) name of the command for which this # directory provides sub-commands # # $(shell-subcommand-helpers) files that should be installed # in the same directory as subcommands, # but without symlinks (see below) # # If $(application-name) *is not* set, programs are installed in: # # $(prefix)/libexec/$(thisdir)/ # # If $(application-name) *is* set, programs are installed in: # # $(prefix)/libexec/$(application-name)/$(thisdir)/ # # along with a symbolic link to the program in: # # $(prefix)/libexec/$(application-name)/$(application-name) # # Along with the scripts, copies of the files $(shell-subcommand-help) # are installed (in the same location, but without symbolic links). # # After installation, the build directory will contain # "Installed-shell-subcommands" which is a list of the programs that # were installed. # ifdef application-name install-location := $(libexec-install-dir)/$(application-name)/$(thisdir) else install-location := $(libexec-install-dir)/$(thisdir) endif include $(makefiles)/rules.mk install: install-shell-subcommands Installed-shell-subcommands install-shell-subcommands Installed-shell-subcommands: $(shell-subcommand-names) $(shell-subcommand-help) test ! -e $(install-location) || rm -r $(install-location) mkdir -p $(install-location) ifdef shell-subcommand-helpers cp $(addprefix $(srcdir)/, $(shell-subcommand-helpers)) $(install-location) endif ifdef shell-subcommand-names cp $(shell-subcommand-names) $(install-location) ifdef application-name for f in $(shell-subcommand-names) ; do \ mkdir -p $(install-location)/../$(application-name) ; \ test ! -e $(install-location)/../$(application-name)/$$f || rm $(install-location)/../$(application-name)/$$f ; \ ln -s $(install-location)/$$f $(install-location)/../$(application-name)/$$f ; \ done endif endif ifdef shell-subcommand-help cp $(shell-subcommand-help) $(install-location) endif echo $(shell-subcommand-names) | sed -f $(makefiles)/column.sed > Installed-shell-subcommands clean: clean-install-shell-subcommands clean-install-shell-subcommands: test ! -e Installed-shell-subcommands || rm Installed-shell-subcommands endif # arch-tag: Tom Lord Tue Dec 4 14:47:20 2001 (install-shell-subcommands.mk) # tla-1.3.5+dfsg/src/build-tools/Makefiles/cpp-to-includes.sed0000644000175000017500000000104610457621764022401 0ustar useruser # Given the output of "cc -E", produce a list of all # source files mentioned in line number data output # by the pre-processor in a format suitable for use # as makefile dependencies. (sort -u of the output # is advisable, though). # s/^#[[:space:]]*line[[:space:]]/# / /^#[[:space:]][[:space:]]*[[:digit:]][[:digit:]]*[[:space:]][[:space:]]*"/!d s/%/\\%/g s/=/\\=/g s/\$/\\$/g s/^[^"]*"// s/"[^"]*$// # Gcc 3.1 generates these, apparently: # s/<.*>// s/^/ / # arch-tag: Tom Lord Tue Jan 22 18:29:40 2002 (Makefiles/cpp-to-includes.sed) # tla-1.3.5+dfsg/src/build-tools/Makefiles/unit-tests.mk0000644000175000017500000000712410457621764021351 0ustar useruser# unit-tests.mk: build test programs and run them for `make test' # ################################################################ # Copyright (C) 2001, 2002 Tom Lord # # See the file "COPYING" for further information about # the copyright and warranty status of this work. # ifndef unit-tests-mk unit-tests-mk := 1 # Build and run unit tests. # # Optionally set on entry: # # $(mains) a list of source files defining "main" # (default "$(notdir $(wildcard $(srcdir)/unit-*.c) $(wildcard $(srcdir)/test-*.c))") # # $(libs) additional libraries to link against # (no default) # # $(test-scripts) a list of shell scripts that perform tests # (default "$(wildcard $(srcdir)/*.sh)") # # $(test-headers) a list of headers that should compile in isolation # (default none) # # If $(test-headers) is not defined, it can be derived from two other # optional variables: # # $(tested-headers) a list of headers to test, relative to some # some root directory # # $(tested-prefix) the root directory for $(tested-headers) # # For each tested header, "foo.h", `make all' compiles "hdr-foo.c" which # does nothing but include "foo.h". # # Derived: # # $(test-progs) := $(patsubst %.c, %, $(mains)) # # # Target `test' depends on `tests-timestamp'. # # `tests-timestamp' depends on `test-progs' and `test-scripts'. # The action is to run all scripts. If they all exit with status 0, # then `touch tests-timestamp'. # # After "make all", the build directory will contain "Programs" which # contains the names of the programs that were built. (See also # "programs.mk") # ifndef mains mains := $(notdir $(wildcard $(srcdir)/unit-*.c) $(wildcard $(srcdir)/test-*.c)) endif include $(makefiles)/programs.mk ifndef test-progs test-progs := $(patsubst %.c, %, $(mains)) endif ifndef test-scripts test-scripts := $(wildcard $(srcdir)/*.sh) endif ifndef test-headers ifdef tested-headers ifdef tested-prefix test-headers := $(addprefix $(tested-prefix)/, $(tested-headers)) else test-headers := $(tested-headers) endif endif endif header-prog = $(addprefix hdr-, $(patsubst %.h, %.c, $(notdir $(1)))) header-obj = $(addprefix hdr-, $(patsubst %.h, %.o, $(notdir $(1)))) prog-header = $(filter %/$(patsubst hdr-%.c,%.h,$(1)), $(test-headers)) header-objs := $(call header-obj, $(test-headers)) header-progs := $(call header-prog, $(test-headers)) header-deps := $(patsubst %.c, %.d, $(header-progs)) ################################################################ # header file compilation tests (at "make all") # ################################################################ all: $(header-objs) $(header-progs): echo "#include \"$(call prog-header, $@)\"" > $@ ifndef clean-only ifneq "$(header-deps)" "" -include $(header-deps) endif endif ################################################################ # test script execution (at "make test") # ################################################################ test: tests-timestamp ifeq ($(test-scripts),) tests-timestamp: $(test-progs) else tests-timestamp: $(test-progs) $(test-scripts) objroot=$(objroot) ; \ export objroot ; \ srcroot=$(srcroot) ; \ export srcroot ; \ set -e ; \ for s in $(test-scripts) ; do \ $(SHELL) $$s; \ done touch tests-timestamp endif ################################################################ # clean target # ################################################################ clean: clean-unit-tests clean-unit-tests: for f in tests-timestamp $(header-progs) $(header-objs) $(header-deps) ; do \ test ! -e $$f || rm $$f ; \ done endif # arch-tag: Tom Lord Tue Dec 4 14:47:19 2001 (unit-tests.mk) # tla-1.3.5+dfsg/src/build-tools/Makefiles/column.sed0000644000175000017500000000025710457621764020673 0ustar useruser # delete blank lines # /^[[:space:]]*$/d # separate words with newlines # s/[[:space:]]\{1,\}/\ /g # arch-tag: Tom Lord Tue Dec 4 15:10:07 2001 (Makefiles/column.sed) # tla-1.3.5+dfsg/src/build-tools/Makefiles/shell-scripts.mk0000644000175000017500000000366610457621764022035 0ustar useruser# shell-scripts.mk: "make all" rules for shell scripts # ################################################################ # Copyright (C) 2001, 2002 Tom Lord # # See the file "COPYING" for further information about # the copyright and warranty status of this work. # ifndef shell-scripts-mk shell-scripts-mk := 1 # Already set upon entry: see "rules.mk". # # Optionally set on entry: # # $(shell-scripts) source files, with the extension .sh, # to turn into executable scripts. # # $(cfg__posix_shell) the program to use in "#!" lines # for shell scripts (default "/bin/sh") # # This file creates executable programs from shell scripts. These # programs are created in the build directory and not installed. (See # "install-program.mk".) # # By default, shell-scripts is all files in the source directory with # the extension "sh" and beginning with any of [a-zA-Z0-9]. # # On `make all', the scripts are copied to the build directory, # without the ".sh" extension, and chmoded to be executable by # anyone. # # If the source file does not already have a first line beginning # with "#!", then a line "#!/bin/sh" is added. # # ifndef shell-scripts shell-scripts := $(sort $(notdir $(wildcard $(srcdir)/[a-zA-Z0-9]*.sh))) endif shell-script-names := $(basename $(shell-scripts)) ifndef cfg__posix_shell cfg__posix_shell := /bin/sh endif include $(makefiles)/rules.mk all: $(shell-script-names) Shell-scripts $(shell-script-names):%:%.sh for f in $@ ; do test ! -e $$f || rm $$f ; done if test "`head -n 1 $< | sed -e 's/\(..\).*/\1/'`" != "#!" ; then echo "#!$(cfg__posix_shell)" ; fi > $@ cat $< >> $@ chmod ugo+x $@ Shell-scripts: $(shell-script-names) echo $(programs) | sed -f $(makefiles)/column.sed > Shell-scripts clean: clean-shell-scripts clean-shell-scripts: for f in $(shell-script-names) Shell-scripts ; do \ test ! -e $$f || rm $$f ; \ done endif # arch-tag: Tom Lord Tue Dec 4 14:47:20 2001 (shell-scripts.mk) # tla-1.3.5+dfsg/src/build-tools/Makefiles/latex-ps.mk0000644000175000017500000000217310457621764020766 0ustar useruser# latex-ps.mk: build postscript documentation from LaTeX sources # ################################################################ # Copyright (C) 2001 Tom Lord # Copyright (C) 2003 Stig Brautaset # # See the file "COPYING" for further information about # the copyright and warranty status of this work. # ifndef latex-ps-mk latex-ps-mk := 1 # Build ps documentation from LaTeX sources # # Set on entry: # # $(latex-docs) LaTeX file to pass to `latex' # (default: "manual.tex") # # # After "make ps", the build directory will contain .ps file(s) of # documentation compiled from LaTeX sources. # include $(makefiles)/latex.mk ps-files := $(patsubst %.tex,%.ps,$(latex-docs)) $(ps-files): link-latex-files cd $(latex-build-dir) ; \ latex $(patsubst %.ps,%.tex,$@) ; \ latex $(patsubst %.ps,%.tex,$@) ; \ dvips -o $@ $(patsubst %.ps,%.dvi,$@) ; \ mv $@ .. ps PS: $(ps-files) echo $(ps-files) > PS doc: ps clean: clean-ps-files clean-doc: clean-ps-files clean-ps-files: for f in $(ps-files) PS ; do \ test ! -e $$f || rm -r $$f ; \ done endif # arch-tag: Stig Brautaset Sat Mar 8 23:19:03 GMT 2003 (latex-ps.mk) # tla-1.3.5+dfsg/src/build-tools/Makefiles/latex.mk0000644000175000017500000000205610457621764020346 0ustar useruser# latex.mk: build documentation from LaTeX sources # ################################################################ # Copyright (C) 2001 Tom Lord # Copyright (C) 2003 Stig Brautaset # # See the file "COPYING" for further information about # the copyright and warranty status of this work. # ifndef latex-mk latex-mk := 1 # Build documentation from LaTeX sources # # Optionally set on entry: # # $(latex-docs) LaTeX file to pass to `latex' # (default: "manual.tex") # # include $(makefiles)/rules.mk ifndef latex-docs latex-docs := manual.tex endif latex-files := $(wildcard *.tex) latex-build-dir := latex-tmp-dir link-latex-files: $(latex-files) mkdir -p $(latex-build-dir) cd $(latex-build-dir) ; \ for f in * ,,fake.tex ; do \ test ! -e $$f || rm -r $$f ; \ done ; \ ln -s $(srcdir)/* . clean: clean-latex-build-files clean-doc: clean-latex-build-files clean-latex-build-files: for f in $(latex-build-dir) ; do \ test ! -e $$f || rm -r $$f ; \ done endif # arch-tag: Stig Brautaset Sat Mar 8 23:19:03 GMT 2003 (latex.mk) # tla-1.3.5+dfsg/src/build-tools/Makefiles/latex-pdf.mk0000644000175000017500000000214610457621764021115 0ustar useruser# latex-pdf.mk: build pdf documentation from LaTeX sources # ################################################################ # Copyright (C) 2001 Tom Lord # Copyright (C) 2003 Stig Brautaset # # See the file "COPYING" for further information about # the copyright and warranty status of this work. # ifndef latex-pdf-mk latex-pdf-mk := 1 # Build pdf documentation from LaTeX sources # # Set on entry: # # $(latex-docs) LaTeX file to pass to `latex' # (default: "manual.tex") # # # After "make pdf", the build directory will contain .pdf file(s) of # documentation compiled from LaTeX sources. # include $(makefiles)/latex.mk pdf-files := $(patsubst %.tex,%.pdf,$(latex-docs)) $(pdf-files): link-latex-files cd $(latex-build-dir) ; \ pdflatex $(patsubst %.pdf,%.tex,$@) ; \ pdflatex $(patsubst %.pdf,%.tex,$@) ; \ mv $@ .. pdf PDF: $(pdf-files) echo $(pdf-files) > PDF doc: pdf clean: clean-pdf-files clean-doc: clean-pdf-files clean-pdf-files: for f in $(pdf-files) PDF ; do \ test ! -e $$f || rm -r $$f ; \ done endif # arch-tag: Stig Brautaset Sun Mar 9 10:25:41 GMT 2003 (latex-pdf.mk) # tla-1.3.5+dfsg/src/build-tools/Makefiles/top-level.mk0000644000175000017500000000271010457621764021135 0ustar useruser# top-level.mk: the top level makefile # ################################################################ # Copyright (C) 2001, 2002 Tom Lord # # See the file "COPYING" for further information about # the copyright and warranty status of this work. # ################################################################ # This is a generic top-level makefile for Hackerlab packages. # It should never be necessary to edit this file. # # The default target is "all". # # The generic top-level configure script will compute a list of # subdirectories to build. When it copies this "Makefile.in" # to a build directory (to create "Makefile"), configure adds # a definition for the variable `make-dirs'. # # `make-dirs' will be a list of directories to build, in the order # in which they should be built. # # For most makefile targets, this makefile simply invokes make # in each subdirectory with the same target and arguments. # # For the target `clean', this makefile invokes make in each # subdirectory, adding the definition `clean-only=1'. # That definition causes the generic Hackerlab makefiles to # avoid needlessly computing header file dependencies. # all: test: install: clean: ifdef make-dirs set -e ; \ for dir in $(make-dirs); do \ $(MAKE) -C $$dir clean-only=1 clean ; \ done endif %: ifdef make-dirs set -e ; \ for dir in $(make-dirs); do \ $(MAKE) -C $$dir $* ; \ done endif # arch-tag: Tom Lord Tue Dec 4 14:47:19 2001 (top-level.mk) # tla-1.3.5+dfsg/src/build-tools/Makefiles/latex-html.mk0000644000175000017500000000252010457621764021304 0ustar useruser# latex-html.mk: build html documentation from LaTeX sources # ################################################################ # Copyright (C) 2001 Tom Lord # Copyright (C) 2003 Stig Brautaset # # See the file "COPYING" for further information about # the copyright and warranty status of this work. # ifndef latex-html-mk latex-html-mk := 1 # Build html documentation from LaTeX sources # # Set on entry: # # $(latex-docs) LaTeX file to pass to `latex' # (default: "manual.tex") # # Optionally set on entry: # # $(latex-to-html) # Program that creates a single # html-file from each LaTeX source file # (default: "htlatex") # # After "make html", the build directory will contain .html file(s) of # documentation compiled from LaTeX sources. # include $(makefiles)/latex.mk html-files := $(patsubst %.tex,%.html,$(latex-docs)) ifndef latex-to-html latex-to-html := htlatex endif $(html-files): link-latex-files cd $(latex-build-dir) ; \ $(latex-to-html) $(patsubst %.html,%.tex,$@) html HTML: $(html-files) cd $(latex-build-dir) ; \ cp $(html-files) .. echo $(html-files) > HTML doc: html clean: clean-html-files clean-doc: clean-html-files clean-html-files: for f in $(html-files) HTML ; do \ test ! -e $$f || rm -r $$f ; \ done endif # arch-tag: Stig Brautaset Sun Mar 9 10:55:32 GMT 2003 (latex-html.mk) # tla-1.3.5+dfsg/src/build-tools/Makefiles/install-shell-scripts.mk0000644000175000017500000000240210457621764023464 0ustar useruser# install-shell-scripts.mk: install shell scripts # ################################################################ # Copyright (C) 2001, 2002 Tom Lord # # See the file "COPYING" for further information about # the copyright and warranty status of this work. # ifndef install-shell-scripts-mk install-shell-scripts-mk := 1 # Already set upon entry (see also "shell-scripts.mk"): # # $(shell-script-names) the file-names (no directories) of the scripts # # After installation, the build directory will contain "Installed-shell-script" # which is a list of the programs that were installed. # include $(makefiles)/rules.mk install: install-shell-scripts Installed-shell-scripts install-shell-scripts Installed-shell-scripts: $(shell-script-names) ifdef shell-script-names for f in $(shell-script-names) ; do test ! -e $(program-install-dir)/$$f || rm $(program-install-dir)/$$f; done mkdir -p $(program-install-dir) cp $(shell-script-names) $(program-install-dir) endif echo $(shell-script-names) | sed -f $(makefiles)/column.sed > Installed-shell-scripts clean: clean-install-shell-scripts clean-install-shell-scripts: test ! -e Installed-shell-scripts || rm Installed-shell-scripts endif # arch-tag: Tom Lord Tue Dec 4 14:47:20 2001 (install-shell-scripts.mk) # tla-1.3.5+dfsg/src/build-tools/Makefiles/latex-txt.mk0000644000175000017500000000252010457621764021157 0ustar useruser# latex-txt.mk: build plain text documentation from LaTeX sources # ################################################################ # Copyright (C) 2001 Tom Lord # Copyright (C) 2003 Stig Brautaset # # See the file "COPYING" for further information about # the copyright and warranty status of this work. # ifndef latex-txt-mk latex-txt-mk := 1 # Build plain text documentation from LaTeX sources # # Set on entry: # # $(latex-docs) LaTeX file to pass to `latex' # (default: "manual.tex") # # Optionally set on entry: # # $(html-to-text) Program that takes a html-file # as its argument and produces a # plain text file on standard output # (default: "links -dump") # # After "make txt", the build directory will contain .txt file(s) of # documentation compiled from LaTeX sources. # include $(makefiles)/latex-html.mk ifndef html-to-text html-to-text := links -dump endif txt-files := $(patsubst %.tex,%.txt,$(latex-docs)) $(txt-files): $(html-files) cd $(latex-build-dir) ; \ $(html-to-text) $(patsubst %.txt,%.html,$@) > $@ ; \ mv $@ .. txt TXT: $(txt-files) echo $(txt-files) > TXT doc: txt clean: clean-txt-files clean-doc: clean-txt-files clean-txt-files: for f in $(txt-files) TXT ; do \ test ! -e $$f || rm -r $$f ; \ done endif # arch-tag: Stig Brautaset Sun Mar 9 10:55:32 GMT 2003 (latex-txt.mk) # tla-1.3.5+dfsg/src/build-tools/Makefiles/pdml-index.mk0000644000175000017500000000261510457621764021273 0ustar useruser# arch-tag: Tom Lord Tue Dec 4 14:47:18 2001 (pdml-index.mk) # # pdml-index.mk - # ################################################################ # Copyright (C) 2001 Tom Lord # # See the file "COPYING" for further information about # the copyright and warranty status of this work. # ifndef pdml-index pdml-index := 1 # Build a pdml index from pdml files in this directory and optionally, # in sibling directories. # # Set on entry: see "library-pdml.mk" # # Optionally set on entry: # # $(the-pdml-index) the name of the library to build. # $(pdml-index-otherdirs) sibling directories (tail only) to include in the library # # The default value of $(the-pdml-index) is "$(thisdir).pdml-index". # # After "make pdml-index", the build directory will contain "PDML-index" which # contains the name of the index that was built. # include $(makefiles)/library-pdml.mk ifndef the-pdml-index the-pdml-index := $(thisdir).pdml-index endif other-pdml := $(foreach sibling,$(pdml-index-otherdirs),\ $(addprefix ../$(sibling)/, $(shell cat ../$(sibling)/PDML))) pdml-index: $(the-pdml-index) $(the-pdml-index): $(pdml-files) $(other-pdml) $(xdmlcomp) --markup-language doc/old-pdml $(pdml-index-processors) --make-index $^ > $@ echo $(the-pdml-index) > PDML-index clean: clean-pdml-index clean-pdml-index: test ! -e $(the-pdml-index) || rm $(the-pdml-index) test ! -e PDML-index || rm PDML-index endif tla-1.3.5+dfsg/src/build-tools/Makefiles/install-shell-cgi-scripts.mk0000644000175000017500000000246410457621764024234 0ustar useruser# install-shell-cgi-scripts.mk: install shell cgi scripts # ################################################################ # Copyright (C) 2002 Tom Lord # # See the file "COPYING" for further information about # the copyright and warranty status of this work. # ifndef install-shell-cgi-scripts-mk install-shell-cgi-scripts-mk := 1 # Already set upon entry (see also "shell-scripts.mk"): # # $(shell-script-names) the file-names (no directories) of the scripts # # After installation, the build directory will contain "Installed-shell-cgi-scripts" # which is a list of the programs that were installed. # include $(makefiles)/rules.mk install: install-shell-cgi-scripts Installed-shell-cgi-scripts install-shell-cgi-scripts Installed-shell-cgi-scripts: $(shell-script-names) ifdef shell-script-names for f in $(shell-script-names) ; do test ! -e $(cgi-install-dir)/$$f || rm $(cgi-install-dir)/$$f; done mkdir -p $(cgi-install-dir) cp $(shell-script-names) $(cgi-install-dir) endif echo $(shell-script-names) | sed -f $(makefiles)/column.sed > Installed-shell-cgi-scripts clean: clean-install-shell-cgi-scripts clean-install-shell-cgi-scripts: test ! -e Installed-shell-cgi-scripts || rm Installed-shell-cgi-scripts endif # arch-tag: Tom Lord Mon Apr 29 23:38:43 2002 (Makefiles/install-shell-cgi-scripts.mk) # tla-1.3.5+dfsg/src/build-tools/Makefiles/install-scm-subdirs.mk0000644000175000017500000000376010457621764023133 0ustar useruser# arch-tag: Tom Lord Tue Dec 4 14:47:16 2001 (install-scm-subdirs.mk) # # install-scm-subdirs.mk - # ################################################################ # Copyright (C) 2001 Tom Lord # # See the file "COPYING" for further information about # the copyright and warranty status of this work. # ifndef install-scm-mk install-scm-subdirs-mk := 1 # Set on entry: (see also "rules.mk") # # Optionally set on entry: # # $(scm-files) the relative path names of Scheme files to install. # # This file installs a library of Scheme programs organized as # subdirectories of a source tree, e.g.: # # $(srcdir)/scheme/data-structures # /runq.scm # /ratlist.scm # ... # /ice-9 # ... # /unix # ... # ... # # They are installed as corresponding subdirectories of # # $(scm-install-dir) # # and links to the subdirectories are installed in # # $(scm-linkdir) # # No other directory should install in these same subdirectories of # $(scm-install-dir) and $(scm-linkdir). # # After installation, the build directory will contain "Installed-scm-files" # which is a list of the Scheme files that were installed. The list # includes relative path names, e.g.: # # data-structures/runq.scm # data-structures/ratlist.scm # ... # include $(makefiles)/rules.mk ifndef scm-files scm-files := $(sort $(shell cd $(srcdir) ;\ find [a-zA-Z]* -type f -name "*.scm" )) endif scm-dirs := $(shell echo $(dir $(scm-files)) | sed -f $(makefiles)/column.sed | sed -e "s,/$$,," | sort -u) install: install-scm-files install-scm-files: $(scm-files) echo $(scm-files) | sed -f $(makefiles)/column.sed > Installed-scm-files for f in $(addprefix $(scm-install-dir)/,$(scm-dirs)) ; do \ test ! -e $$f || rm -r $$f ; \ done mkdir -p $(addprefix $(scm-install-dir)/,$(scm-dirs)) cd $(srcdir) ; \ for f in $(scm-files) ; do \ cp $$f $(scm-install-dir)/`dirname $$f` ; \ done clean: clean-install-scm-files clean-install-scm-files: test ! -e Installed-scm-files || rm Installed-scm-files endif tla-1.3.5+dfsg/src/build-tools/Makefiles/library.mk0000644000175000017500000000406010457621764020672 0ustar useruser# library.mk: # # Assemble object files into a static library. # ################################################################ # Copyright (C) 2001, 2002 Tom Lord # # See the file "COPYING" for further information about # the copyright and warranty status of this work. # ifndef library-mk library-mk := 1 # Build a library from objects in this directory and optionally, # in sibling directories. # # Set on entry: see "library-objects.mk" # # Optionally set on entry: # # $(thelib) the name of the library to build. # $(libobjs) object files to include in the library # $(otherdirs) sibling directories (tail only) to # also include in the library # # The default value of $(thelib) is "lib$(thisdir).a" However, if # $(thisdir) begins with the string "lib", then $(thelib) defaults # to "$(thisdir).a" # # When other directories are specified with $(otherdirs), they # should be built before this directory, and the build directory # should contain the file "Objects" which is a list of object files # to include in the library, one per line. In this directory, # the make variable $(libobjs) defines which objects to include. # # After "make all", the build directory will contain "Library" which # contains the name of the library that was built. # include $(makefiles)/library-objects.mk otherobjs := $(foreach sibling,$(otherdirs),\ $(addprefix ../$(sibling)/, $(shell test -e ../$(sibling)/Objects && cat ../$(sibling)/Objects))) thelibname := $(subst liblib,lib,lib$(thisdir).a) ifeq ($(libobjs)$(otherobjs),) # no object files for this library # # Don't build it because some systems don't like empty # libraries. # thelib := else ifndef thelib thelib := $(thelibname) endif all: $(thelib) $(thelib): $(libobjs) $(otherobjs) test ! -e $(thelib) || rm $(thelib) ar -rc $(thelib) $(libobjs) $(otherobjs) ranlib $(thelib) echo $(thelib) > Library endif clean: clean-lib clean-lib: test ! -e $(thelibname) || rm $(thelibname) test ! -e Library || rm Library endif # arch-tag: Tom Lord Tue Dec 4 14:47:17 2001 (library.mk) # tla-1.3.5+dfsg/src/build-tools/Makefiles/library-ps.mk0000644000175000017500000000254510457621764021320 0ustar useruser# arch-tag: Tom Lord Tue Dec 4 14:47:17 2001 (library-ps.mk) # # library-ps.mk - # ################################################################ # Copyright (C) 2001 Tom Lord # # See the file "COPYING" for further information about # the copyright and warranty status of this work. # ifndef library-ps library-ps := 1 # Build documentation ps from texi files. # # Set on entry: # # $(texi-files) texi files from which to build a ps file. # $(texi-main) texi file to pass to `texi2dvi' # (default "manual.texi") # # After "make ps", the build directory will contain a .ps file # of documentation compiled from texinfo sources. # include $(makefiles)/rules.mk include $(makefiles)/library-texi.mk ifndef texi-main texi-main := manual.texi endif ps-file := $(patsubst %.texi,%.ps,$(texi-main)) dvi-file := $(patsubst %.texi,%.dvi,$(texi-main)) ps-dir := $(patsubst %.texi,%.dir,$(texi-main)) $(ps-file): $(texi-main) $(texi-files) mkdir -p $(ps-dir) cd $(ps-dir) ; \ for f in *.texi ,,fake.texti ; do \ test ! -e $$f || rm $$f ; \ done ; \ ln -s ../*.texi . ; \ texi2dvi $(texi-main) ; \ dvips -O0in,0.5in -o $(ps-file) $(dvi-file) ; \ mv $(ps-file) .. ps PS: $(ps-file) echo $(ps-file) > PS clean: clean-ps-files clean-doc: clean-ps-files clean-ps-files: for f in $(ps-file) $(ps-dir) PS *.d ; do \ test ! -e $$f || rm -r $$f ; \ done endif tla-1.3.5+dfsg/src/build-tools/Makefiles/dirs.mk0000644000175000017500000000110010457621764020157 0ustar useruser# dirs.mk: makefile for a directory of sub-directories # ################################################################ # Copyright (C) 2001, 2002 Tom Lord # # See the file "COPYING" for further information about # the copyright and warranty status of this work. # all: test: install: clean: ifdef make-dirs set -e ; \ for dir in $(make-dirs); do \ $(MAKE) -C $$dir clean-only=1 clean ; \ done endif %: ifdef make-dirs set -e ; \ for dir in $(make-dirs); do \ $(MAKE) -C $$dir $* ; \ done endif # arch-tag: Tom Lord Tue Dec 4 14:47:14 2001 (dirs.mk) # tla-1.3.5+dfsg/src/build-tools/Makefiles/scm-scripts.mk0000644000175000017500000000317210457621764021500 0ustar useruser# arch-tag: Tom Lord Tue Dec 4 14:47:18 2001 (scm-scripts.mk) # # scm-scripts.mk - # ################################################################ # Copyright (C) 2001 Tom Lord # # See the file "COPYING" for further information about # the copyright and warranty status of this work. # ifndef scm-scripts-mk scm-scripts-mk := 1 # This file creates Scheme programs organized as scripts # suitable for use with execve. These programs are # created in the build directory and not installed. # (See "install-scm-scripts.mk".) # # The variable $(scm-scripts) may be set on entry to a # list of the scripts which should have the extension ".ss", # for example: # # scm-scripts := piw-analyze.ss # # By default, scm-scripts is all files in the source directory # with the extension "ss". # # On `make all', the scripts are copied to the build directory # with this line prefixed to the script: # # #!$(shell pwd)/../systas/systas # # If the source file already has a first line beginning # with "#!", that line is removed. # # The extension is removed from the script when copied to the build # directory. # ifndef scm-scripts scm-scripts := $(sort $(notdir $(wildcard $(srcdir)/[^,+=]*.ss))) endif script-names := $(basename $(scm-scripts)) build-systas := $(cfg__std__objroot)/systas/systas/systas include $(makefiles)/rules.mk all: $(script-names) $(script-names):%:%.ss for f in $@ ; do \ test ! -e $$f || rm $$f ; \ done echo "#!$(build-systas)" > $@ cat $< | sed -e "1{/#!/d;}" >> $@ chmod ugo+x $@ clean: clean-scm-scripts clean-scm-scripts: for f in $(script-names) ,fake ; do \ test ! -e $$f || rm $$f ; \ done endif tla-1.3.5+dfsg/src/build-tools/Makefiles/scm-library.mk0000644000175000017500000000244710457621764021461 0ustar useruser# arch-tag: Tom Lord Tue Dec 4 14:47:18 2001 (scm-library.mk) # # scm-library.mk - # ################################################################ # Copyright (C) 2001 Tom Lord # # See the file "COPYING" for further information about # the copyright and warranty status of this work. # ifndef scm-library-mk scm-library-mk := 1 # See also "library.mk" # # This file builds a library from source files that must be # preprocessed to build ".x" files. Such source files are # designed to be compiled and linked with Systas Scheme. # include $(makefiles)/library.mk xfiles := $(patsubst %.c, %.x, $(libsource)) .SUFFIXES: .x $(xfiles):%.x:%.c %.h set -e ; \ if test ! -e$(srcdir)/scmconfig.h ; then \ touch $(srcdir)/scmconfig.h; \ fake_scmconfig=1; \ else \ fake_scmconfig=0; \ fi; \ touch $@; \ rm -f ,$@; \ $(CC) $(CFLAGS) -DSCM_MAGIC_SNARFER -E $< | sed -f $(makefiles)/dotx.sed > ,$@ ; \ rm -f $@; \ cp ,$@ $@ ; \ $(CC) $(CFLAGS) -DSCM_MAGIC_SNARFER2 -E $< | sed -f $(makefiles)/dotx.sed >> ,$@ ; \ rm -f $@; \ mv ,$@ $@ ; \ if test $$fake_scmconfig -eq 1 ; then \ test ! -e $(srcdir)/scmconfig.h || rm $(srcdir)/scmconfig.h; \ fi clean: clean-xfiles clean-xfiles: for f in $(xfiles) ,fake.x ; do \ test ! -e $$f || rm -f $$f ; \ done $(libdepfiles): %.d: %.x endif tla-1.3.5+dfsg/src/build-tools/Makefiles/install-programs.mk0000644000175000017500000000217310457621764022527 0ustar useruser# install-programs.mk: install programs # ################################################################ # Copyright (C) 2001, 2002 Tom Lord # # See the file "COPYING" for further information about # the copyright and warranty status of this work. # ifndef install-programs-mk install-programs-mk := 1 # Already set upon entry (see also "programs.mk"): # # $(programs) the file-names (no directories) of the programs # # After installation, the build directory will contain "Installed-programs" # which is a list of the programs that were installed. # include $(makefiles)/rules.mk install: install-programs Installed-programs install-programs Installed-programs: $(programs) ifdef programs for f in $(programs) ; do test ! -e $(program-install-dir)/$$f || rm -f $(program-install-dir)/$$f; done mkdir -p $(program-install-dir) cp $(programs) $(program-install-dir) endif echo $(programs) | sed -f $(makefiles)/column.sed > Installed-programs clean: clean-install-programs clean-install-programs: test ! -e Installed-programs || rm Installed-programs endif # arch-tag: Tom Lord Tue Dec 4 14:47:15 2001 (install-programs.mk) # tla-1.3.5+dfsg/src/build-tools/Makefiles/install-library.mk0000644000175000017500000000210010457621764022327 0ustar useruser# install-library.mk: # # Install a library. # ################################################################ # Copyright (C) 2001, 2002 Tom Lord # # See the file "COPYING" for further information about # the copyright and warranty status of this work. # ifndef install-library-mk install-library-mk := 1 # Already set upon entry (see also "library.mk"): # # $(thelib) the file-name (no directory) of the library # # After installation, the build directory will contain "Installed-library" # which contains the name of the library that was installed. # include $(makefiles)/rules.mk install: install-library Installed-library install-library Installed-library: $(thelib) test ! -e $(library-install-dir)/$(thelib) || rm $(library-install-dir)/$(thelib) mkdir -p $(library-install-dir) cp $(thelib) $(library-install-dir) echo $(thelib) | sed -f $(makefiles)/column.sed > Installed-library clean: clean-install-library clean-install-library: test ! -e Installed-library || rm Installed-library endif # arch-tag: Tom Lord Tue Dec 4 14:47:15 2001 (install-library.mk) # tla-1.3.5+dfsg/src/build-tools/Makefiles/unexec-programs.mk0000644000175000017500000000427610457621764022356 0ustar useruser# unexec-programs.mk: compile programs that use unexec # ################################################################ # Copyright (C) 2001, 2002 Tom Lord # # See the file "COPYING" for further information about # the copyright and warranty status of this work. # ifndef unexec-programs-mk unexec-programs-mk := 1 # Build programs which might call unexec. # # This is a variant on `programs.mk' and the two might eventually # be merged. # # Set on entry: (see also "library.mk") # # $(mains) a list of source files defining "main" # # Optionally set on entry: # # $(libs) additional libraries to link against # # One program is built for each file in $(mains). A library is built # from all of the other source files in this directory and the programs # are linked against that library. # # After "make all", the build directory will contain "Programs" which # contains the names of the programs that were built. # include $(makefiles)/library.mk programs := $(patsubst %.c, %, $(mains)) progdepfiles := $(patsubst %.c, %.d, $(mains)) all: $(programs) Programs ifndef no-Programs-rule Programs: $(programs) echo $(programs) | sed -f $(makefiles)/column.sed > Programs endif ifndef cfg__unexec_linker ifdef cfg__gcc_version cfg__unexec_linker := $(CC) $(CFLAGS) -nostdlib cfg__gnulib_var := $(shell $(CC) -print-libgcc-file-name) else cfg__unexec_linker := $(LD) cfg__gnulib_var := endif endif ifeq ($(cfg__unexec_needs_precrt0),1) maybe_precrt0 := ,precrt0.o ,precrt0.o: echo "int data_start = 0;" > ,precrt0.c $(CC) -g -c -o ,precrt0.o ,precrt0.c clean: clean-precrt0 clean-precrt0: test ! -e ,precrt0.c || rm ,precrt0.c test ! -e ,precrt0.o || rm ,precrt0.o endif $(programs):%:%.o $(thelib) $(filter-out -l%, $(libs)) $(maybe_precrt0) $(cfg__unexec_linker) $(cfg__unexec_ld_switches) \ -o $@ \ $(maybe_precrt0) \ $(cfg__unexec_start_files) \ $< \ $(thelib) \ $(libs) \ $(cfg__unexec_libs) \ -lm \ $(cfg__unexec_libc_substitute) clean: clean-prog clean-prog: for f in $(programs) $(progdepfiles) $(patsubst %.c, %.o, $(mains)) Programs ; do \ test ! -e $$f || rm $$f ; \ done endif # arch-tag: Tom Lord Fri May 10 02:15:12 2002 (Makefiles/unexec-programs.mk) # tla-1.3.5+dfsg/src/build-tools/Makefiles/library-texi.mk0000644000175000017500000000203710457621764021643 0ustar useruser# arch-tag: Tom Lord Tue Dec 4 14:47:17 2001 (library-texi.mk) # # library-texi.mk - # ################################################################ # Copyright (C) 2001 Tom Lord # # See the file "COPYING" for further information about # the copyright and warranty status of this work. # ifndef library-texi library-texi := 1 # Build documentation texi from pdml files. # # Set on entry: # # $(pdml-files) pdml files from which to build texi files. # # After "make texi", the build directory will contain .texi files # of documentation extracted from the library source. # include $(makefiles)/rules.mk include $(makefiles)/library-pdml.mk include $(makefiles)/pdml-index.mk texi-source := $(pdml-files) texi-files := $(sort $(patsubst %.pdml, %.texi, $(notdir $(texi-source)))) pdml-index-processors += --output-format texinfo texi TEXI: $(texi-files) echo $(texi-files) | sed -f $(makefiles)/column.sed > TEXI clean: clean-texi-files clean-texi-files: for f in $(texi-files) TEXI *.d ; do \ test ! -e $$f || rm $$f ; \ done endif tla-1.3.5+dfsg/src/build-tools/Makefiles/install-scm-cgi-scripts.mk0000644000175000017500000000344410457621764023706 0ustar useruser# install-scm-cgi-scripts.mk: # ################################################################ # Copyright (C) 2001, 2002 Tom Lord # # See the file "COPYING" for further information about # the copyright and warranty status of this work. # ifndef install-scm-cgi-scripts-mk install-scm-cgi-scripts-mk := 1 # This file installs Scheme programs organized as scripts suitable for # use with execve. # # Already set upon entry (see also "scm-scripts.scm"): # # $(scm-scripts) The scripts to be installed, without # the (source) extension (".ss"). # # On `make install', the scripts are copied to the install directory # # $(program-install-dir) # # with this line prefixed to the script: # # #!$(prefix)/bin/systas # # If the source file already has a first line beginning with "#!", # that line is removed. # # The extension is removed from the script when installed. # installed-systas := $(prefix)/bin/systas include $(makefiles)/rules.mk install: install-scm-cgi-scripts install-scm-cgi-scripts: $(addsufix .ss, $(script-names)) set -e ; \ for f in $(script-names) ; do \ test ! -e $(cgi-install-dir)/$$f || rm $(cgi-install-dir)/$$f ; \ test ! -e $(cgi-install-dir)/,,$$f || rm $(cgi-install-dir)/,,$$f ; \ mkdir -p $(cgi-install-dir) ; \ echo "#!$(installed-systas)" > $(cgi-install-dir)/,,$$f ; \ cat $(srcdir)/$$f.ss | sed -e "1{/#!/d;}" >> $(cgi-install-dir)/,,$$f ; \ chmod ugo+x $(cgi-install-dir)/,,$$f ; \ mv $(cgi-install-dir)/,,$$f $(cgi-install-dir)/$$f ; \ done echo $(script-names) | sed -f $(makefiles)/column.sed > Installed-scm-cgi-scripts clean: clean-install-scm-cgi-scripts clean-install-scm-cgi-scripts: test ! -e Installed-scm-cgi-scripts || rm Installed-scm-cgi-scripts endif # arch-tag: Tom Lord Tue Dec 4 14:47:15 2001 (install-scm-cgi-scripts.mk) # tla-1.3.5+dfsg/src/build-tools/Makefiles/install-includes.mk0000644000175000017500000000465010457621764022505 0ustar useruser# install-includes.mk: Install include files. # ################################################################ # Copyright (C) 2001, 2002 Tom Lord # # See the file "COPYING" for further information about # the copyright and warranty status of this work. # ifndef install-includes-mk install-includes-mk := 1 include $(makefiles)/rules.mk # Set on entry: see "rules.mk" # # Optionally set on entry: # # $(includes) the names of the include files to install. # # By default, every .h file in the source directory and every header # named in $(generated-includes) is installed. # # Before installing any files, the installation directory is # removed and re-created. Any additional files that happen to be # stored there are removed. # # $(include-subdirs) # If $(includes) is not set, then .h files from # these subdirectories of the source dir will # also be installed, in corresponding subdirs # of the installation directory. # # The relative path from the root of the source to this dir is $(thispath). # Include files are installed in: # # $(prefix)/include/$(thispath)/ # # After installation, the build directory will contain "Installed-includes" # which is a list of the include files that were installed. # ifndef includes top-includes := $(wildcard $(srcdir)/[^,+=]*.h) ifdef include-subdirs sub-includes := $(foreach subdir, $(include-subdirs), $(wildcard $(srcdir)/$(subdir)/[^,+=]*.h)) mkdir-list := $(include-install-dir) $(addprefix $(include-install-dir)/, $(include-subdirs)) else mkdir-list := $(include-install-dir) endif includes := $(sort $(generated-includes) $(top-includes) $(sub-includes)) endif source-include-tails := $(patsubst $(srcdir)/%, %, $(top-includes) $(sub-includes)) include-tails := $(patsubst $(srcdir)/%, %, $(includes)) install: install-includes Installed-includes install-includes Installed-includes: $(include-tails) test ! -d $(include-install-dir) || rm -r $(include-install-dir) mkdir -p $(mkdir-list) ifdef source-include-tails for header in $(source-include-tails) ; do \ cp $(srcdir)/$$header $(include-install-dir)/$$header ; \ done endif ifdef generated-includes cp $(generated-includes) $(include-install-dir) endif echo $(includes) | sed -f $(makefiles)/column.sed > Installed-includes clean: clean-install-includes clean-install-includes: test ! -e Installed-includes || rm Installed-includes endif # arch-tag: Tom Lord Tue Dec 4 14:47:14 2001 (install-includes.mk) # tla-1.3.5+dfsg/src/build-tools/Makefiles/programs.mk0000644000175000017500000000271010457621764021060 0ustar useruser# programs.mk: compile programs # ################################################################ # Copyright (C) 2001, 2002 Tom Lord # # See the file "COPYING" for further information about # the copyright and warranty status of this work. # ifndef programs-mk programs-mk := 1 # Build programs. # # Set on entry: (see also "library.mk") # # $(mains) a list of source files defining "main" # $(cfg__exec_suffix) the suffix added to binaries # # Optionally set on entry: # # $(libs) additional libraries to link against # # One program is built for each file in $(mains). A library is built # from all of the other source files in this directory and the programs # are linked against that library. # # After "make all", the build directory will contain "Programs" which # contains the names of the programs that were built. # include $(makefiles)/library.mk programs := $(patsubst %.c, %$(cfg__exec_suffix), $(mains)) progdepfiles := $(patsubst %.c, %.d, $(mains)) all: $(programs) Programs ifndef no-Programs-rule Programs: $(programs) echo $(programs) | sed -f $(makefiles)/column.sed > Programs endif $(programs):%$(cfg__exec_suffix):%.o $(thelib) $(filter-out -L%, $(filter-out -l%, $(libs))) $(CC) $(CFLAGS) -o $@ $< $(thelib) $(libs) clean: clean-prog clean-prog: for f in $(programs) $(progdepfiles) $(patsubst %.c, %.o, $(mains)) Programs ; do \ test ! -e $$f || rm $$f ; \ done endif # arch-tag: Tom Lord Tue Dec 4 14:47:18 2001 (programs.mk) # tla-1.3.5+dfsg/src/build-tools/scripts/0000755000175000017500000000000010457621764016464 5ustar userusertla-1.3.5+dfsg/src/build-tools/scripts/configure-leaf0000755000175000017500000000211110457621764021273 0ustar useruser#!/bin/sh # arch-tag: Tom Lord Tue Dec 4 15:07:58 2001 (scripts/configure-leaf) # set -e if test x$objroot = x; then echo "ERROR: objroot not set in `pwd`" 1>&2 exit 1 fi if test x$srcroot = x; then echo "ERROR: srcroot not set in `pwd`" 1>&2 exit 1 fi if test x$srcdir = x; then echo "ERROR: srcdir not set in `pwd`" 1>&2 exit 1 fi if test x$prefix = x; then echo "ERROR: prefix not set in `pwd`" 1>&2 exit 1 fi here=`cd $srcdir; pwd` base=`cd $srcroot ; pwd` if test $here = $base; then thispath= export thispath elif test x$thispath = x; then thispath=`basename $here` else thispath=$thispath/`basename $here` fi printf "#!%s\\n\\n" "$config_shell" > config.status cat >> config.status << EOF cat > Makefile <<-EOF2 SHELL = $config_shell srcroot = $srcroot thispath = $thispath objroot = $objroot srcdir = $srcdir prefix = $prefix destdir = $destdir makefiles = $srcroot/build-tools/Makefiles vpath % $srcdir include \\\$(objroot)/Makefile-config.mk EOF2 cat $srcdir/Makefile.in >> Makefile EOF chmod ugo+x config.status ./config.status tla-1.3.5+dfsg/src/build-tools/scripts/configure-autoconf0000644000175000017500000000125110457621764022203 0ustar useruser#!/bin/sh # arch-tag: Tom Lord Tue Dec 4 15:08:02 2001 (scripts/configure-autoconf) # # set on entry: # # all the usual configure variables (see configure-top) # # if test x$objroot = x; then echo "ERROR: objroot not set in `pwd`" 1>&2 exit 1 fi if test x$srcdir = x; then echo "ERROR: srcdir not set in `pwd`" 1>&2 exit 1 fi if test x$config_shell = x; then echo "ERROR: config_shell not set in `pwd`" 1>&2 exit 1 fi if test $# -ne 0 ; then echo "ERROR: wrong number of arguments" 1>&2 echo "usage: configure-autoconf" 1>&2 exit 1 fi PATH="$srcdir/build-tools/scripts:$PATH" export PATH "$config_shell" "$srcdir/PLUGIN/AUTOCONF" "$srcdir/configure" tla-1.3.5+dfsg/src/build-tools/scripts/configure-generic0000755000175000017500000000174310457621764022012 0ustar useruser#!/bin/sh # arch-tag: Tom Lord Tue Dec 4 15:07:59 2001 (scripts/configure-generic) # set -e # Set on entry: # # All the usual configure variables, especially srcdir # # if test x$objroot = x; then echo "ERROR: objroot not set in `pwd`" 1>&2 exit 1 fi if test x$srcroot = x; then echo "ERROR: srcroot not set in `pwd`" 1>&2 exit 1 fi if test x$srcdir = x; then echo "ERROR: srcdir not set in `pwd`" 1>&2 exit 1 fi if test x$prefix = x; then echo "ERROR: prefix not set in `pwd`" 1>&2 exit 1 fi if test x$config_shell = x; then echo "ERROR: config_shell not set in `pwd`" 1>&2 exit 1 fi export prefix export destdir export srcroot export objroot export srcdir export config_shell if test -r $srcdir/PLUGIN/DIRS ; then "$config_shell" $srcroot/build-tools/scripts/configure-dirs elif test -r $srcdir/PLUGIN/AUTOCONF ; then "$config_shell" $srcroot/build-tools/scripts/configure-autoconf else "$config_shell" $srcroot/build-tools/scripts/configure-leaf fi tla-1.3.5+dfsg/src/build-tools/scripts/conclude-headers0000755000175000017500000000027210457621764021620 0ustar useruser#!/bin/sh # arch-tag: Tom Lord Tue Dec 4 15:07:54 2001 (scripts/conclude-headers) # set -e echo "...passed" echo ================================================================ echo tla-1.3.5+dfsg/src/build-tools/scripts/announce-headers0000755000175000017500000000037310457621764021634 0ustar useruser#!/bin/sh # arch-tag: Tom Lord Tue Dec 4 15:08:01 2001 (scripts/announce-headers) # set -e echo ================================================================ echo header file tests echo "(are certain header files compilable in isolation?)" tla-1.3.5+dfsg/src/build-tools/scripts/configure-dirs0000755000175000017500000001555010457621764021340 0ustar useruser#!/bin/sh # configure-dirs - generic configure for a source dir of subdirs. # ################################################################ # Copyright (C) 2001 Tom Lord # # See the file "COPYING" for further information about # the copyright and warranty status of this work. # set -e if test x$objroot = x; then echo "ERROR: objroot not set in `pwd`" 1>&2 exit 1 fi if test x$srcroot = x; then echo "ERROR: srcroot not set in `pwd`" 1>&2 exit 1 fi if test x$srcdir = x; then echo "ERROR: srcdir not set in `pwd`" 1>&2 exit 1 fi if test x$prefix = x; then echo "ERROR: prefix not set in `pwd`" 1>&2 exit 1 fi if test x$config_shell = x; then echo "ERROR: config_shell not set in `pwd`" 1>&2 exit 1 fi here=`cd $srcdir; pwd` base=`cd $srcroot ; pwd` if test $here = $base; then thispath= export thispath elif test x$thispath = x; then thispath=`basename $here` else thispath=$thispath/`basename $here` fi # What subdirectories do we build? # # Some subdirectories contain a file called "PLUGIN/REQ". # # Some subdirectories contain a file called "PLUGIN/OPT". # # Both kinds of file contain dependency lists suitable for "tsort". # Each line is of the form: # # prerequisit-dir build-dir # # which means that if "prerequisit-dir" is being compiled, it must be # compiled before compiling "build-dir". # # If a directory is named in a "PLUGIN/REQ" directory (either as a # prerequisit or a build-dir), we MUST build that directory. It is a # "required directory". # # If a directory is named in a "PLUGIN/OPT" directory (either as a # prerequisit or a build-dir), we MIGHT build that directory. It is # an "optional directory". # # If a directory is both optional and required, it is treated as a # required directory. # # If a directory has a subdirectory named "PLUGIN", we CAN build that # directory. # # If a required directory has no subdirectory called "PLUGIN", that is # an error because we can not build that directory. # # If an optional directory has no subdirectory called "PLUGIN", we # don't build that optional subdirectory. If an optinal directory has # a "PLUGIN" subdirectory, we do build that directory. # # To summarize, we build all required directories and also build all # optional directories that have a subdirectory called "PLUGIN". # However, if a required directory does not have a subdirectory called # "PLUGIN", that is an error that prevents compiling anything. We # compute the lists of required and optional directories by invoking # "tsort" on the files "$srcdir/*/PLUGIN/REQ" and # "$srcdir/*/PLUGIN/OPT". # # "Prerequisits" don't work like "make" dependencies. If a make # dependency prerequisit is missing, we can't build targets that # depend on that prerequisit. But if a configure prerequisit is # missing, as long as the prerequisit is optional, we build the # depending targets anyway. In other words, suppose that "$dirA" # is optional and "$dirB" is required, and "$dirA" is a prerequisit of # "$dirB". Also suppose that "$dirA" has no subdirectory called # "PLUGIN". In this case, we build "$dirB" anyway. # # Compute the lists of optional and required directories, in # the order in which they should be built. # # Unfortunately, "tsort" exits with a 0 status even if cycles # are found. Ideally, this would be an error. # here="`pwd`" cd "$srcdir" reqs= opts= for f in * ; do if test -d "$f" -a -d "$f/PLUGIN" ; then if test -r "$f/PLUGIN/REQ" ; then reqs="$f/PLUGIN/REQ $reqs" fi if test -r "$f/PLUGIN/OPT" ; then opts="$f/PLUGIN/OPT $opts" fi fi done one_line() { printf "$*" } rm -f "$here/,,tsort-master" touch "$here/,,tsort-master" if test -z "$reqs" ; then req_subdirs= else req_subdirs=`cat $reqs | tsort` req_subdirs=`one_line "$req_subdirs"` cat $reqs >> "$here/,,tsort-master" fi if test -z "$opts" ; then opt_subdirs= else opt_subdirs=`cat $opts | tsort` opt_subdirs=`one_line "$opt_subdirs"` cat $opts >> "$here/,,tsort-master" fi # Make sure that all required directories have subdirectories called "PLUGIN". # if test ! -z "$req_subdirs" ; then for d in $req_subdirs; do if test ! -d $srcdir/$d ; then echo "ERROR ($d): missing required directory" 1>&2 exit 1 fi if test ! -d $srcdir/$d/PLUGIN ; then echo "ERROR ($d): required directory with no PLUGIN directory" 1>&2 exit 1 fi done fi # Prune the list of optional subdirectories to remove those that do not # have a subdirectory called "PLUGIN" # if test "x$opt_subdirs" != x ; then opt2= for d in $opt_subdirs; do if test ! -d $srcdir/$d/PLUGIN ; then echo "WARNING ($d): skipping optional directory (no PLUGIN directory found)" 1>&2 else opt2="$opt2 $d" fi done opt_subdirs=$opt2 fi cd "$here" # Build a list of all the directories we will build, in the order # they should be built. # rm -f ,,todo-dirs touch ,,todo-dirs if test ! -z "$req_subdirs" ; then for d in $req_subdirs ; do printf "%s\n" "$d" >> ,,todo-dirs done fi if test ! -z "$opt_subdirs" ; then for d in $opt_subdirs ; do printf "%s\n" "$d" >> ,,todo-dirs done fi rm -rf ,,master-order tsort ,,tsort-master > ,,master-order all_dirs= for d in `cat ,,master-order` ; do if grep -q $d ,,todo-dirs ; then all_dirs="$all_dirs $d" fi done if test -z "$all_dirs" ; then printf "\\n" printf "WARNING: \\n" printf " in directory %s\\n" "$srcdir" printf " no subdirectories being built.\\n" printf "\\n" else printf "\\n" printf "configuring subdirectories of %s\\n" "$srcdir" printf "in this order:\\n" printf "\\n" for d in $all_dirs; do printf " %s\\n" "$d" done printf "\\n" fi rm -f ,,todo-dirs rm -f ,,tsort-master rm -f ,,master-order if test ! -z "$all_dirs" ; then # Run a generic "configure" script for each subdirectory. # export srcroot export objroot export prefix export destdir export config_shell for f in $all_dirs; do printf "configuring %s...\n" "$f" mkdir -p $f cd $f srcdir=$srcdir/$f $srcroot/build-tools/scripts/configure-generic cd .. done fi # Generate the top-level "Makefile" from some computed # variable definitions and the top-level "Makefile.in" in # the source tree. # # For GNU compatibility, and for debugging purposes, do # this in two steps: first generate a "config.status" # script which will create the Makefile, then invoke # that script. # printf "#!%s\\n\\n" "$config_shell" > config.status cat >> config.status << EOF cat > Makefile <<-EOF2 SHELL = $config_shell srcroot = $srcroot thispath = $thispath objroot = $objroot srcdir = $srcdir prefix = $prefix destdir = $destdir make-dirs = $all_dirs makefiles = $srcroot/build-tools/Makefiles vpath % $srcdir include \\\$(objroot)/Makefile-config.mk EOF2 cat $srcdir/Makefile.in >> Makefile EOF chmod ugo+x config.status ./config.status # arch-tag: Tom Lord Tue Jul 1 16:25:54 2003 (scripts/configure-dirs) # tla-1.3.5+dfsg/src/build-tools/scripts/option0000755000175000017500000000216310457621764017724 0ustar useruser#!/bin/sh # arch-tag: Tom Lord Tue Dec 4 15:08:00 2001 (scripts/option) # # set on entry: # # $objroot Where to find the file Options # # option option-name # # Print the value of the indicated option. If it is a binary option, # print "yes" or "no". Otherwise, print the literal text of the # option value. # if test x$objroot = x; then echo "ERROR: objroot not set in `pwd`" 1>&2 exit 1 fi if test $# -ne 1 ; then echo "ERROR: wrong number of arguments" 1>&2 echo "usage: option option-name" 1>&2 exit 1 fi optname="$1" asbinary=`grep "binary[ ][ ]*$optname=" "$objroot/Options"` if test ! -z "$asbinary" ; then value="`printf '%s\n' \"$asbinary\" | sed -e 's/^[^=]*=//'`" case "$value" in 1) value=yes ;; 0) value=no ;; *) echo "ERROR: unrecognized binary option value for $optname: $value" 1>&2 exit 1 esac echo $value exit 0 fi asstring=`grep "string[ ][ ]*$optname=" "$objroot/Options"` if test ! -z "$asstring" ; then value="`printf '%s\n' \"$asstring\" | sed -e 's/^[^=]*=//'`" echo $value exit 0 fi echo "ERROR: no such option ($optname)!" 1>&2 exit 1 tla-1.3.5+dfsg/src/build-tools/scripts/configure-top0000755000175000017500000005672510457621764021212 0ustar useruser#!/bin/sh # configure - The hackerlab configure script # ################################################################ # Copyright (C) 2001, 2002 Tom Lord # # See the file "COPYING" for further information about # the copyright and warranty status of this work. # ################################################################ # The generic top-level configure file. # # This is the workhorse of the configuration process. It's job is # to compute nearly all configure-time variables, and prepare them # for export to Makefiles and subdirectories. # # `configure-dirs' does the remaining work when we know that a # source dir is a directory of subdirs. # # `configure-leaf' does the # remaining work when we know that a # source dir is a directory of actual source; # # `configure-autoconf' provides a callout for directories which # have a `configure' script generated by `autoconf'. # # `configure-generic' decides which of `configure-{dirs,leaf,autoconf}' # to use for a given directory. # # This computes the variables: # # srcroot the root of the source tree # objroot the root of the build tree # srcdir the source dir (the same as srcroot here) # package the name of the package (from =plugin/distribution) # branchname the branch name of the package # ($package sans version and snapshot numbers) # pkgbasename the basename name of the package # ($branchname sans branch name) # # It parses $srcroot/PLUGIN/options and $srcroot/*/PLUGIN/options to get # default option values and handles command line arguments: # # --yes option # -y option # --no option # -n option # --with option value # --with-option value # --with option=value # --with-option=value # # and: # # --version | -V # --help | -h # --help-options # --help-compatibility # --prefix # --destdir # --config-shell # # Finally, it can handle one optional argument which is a system # name. # # It then invokes $srcroot/build-tools/scripts/configure-dirs # # set -e ################################################################ # srcdir # # Compute the source directory for this configure script. # # Normally this is inherited from the environment. See "src/configure". # # If $srcdir is not set from the environment, # make it "dirname $0": # # ./configure => . # configure => . # $dir/configure => $dir # if test x$srcdir = x ; then srcdir=`dirname $0` fi # make "$srcdir" an absolute path # here="`pwd`" cd "$srcdir" srcdir="`pwd`" cd "$here" export srcdir ################################################################ # How to Read Various Configuration Files # config_files() { # Print the concatenated contents of a particular type # of config file. # type="$1" here="`pwd`" cd "$srcdir" files= if test -f "PLUGIN/$type" ; then files="PLUGIN/$type" fi for dir in * ; do if test -d "$dir" -a -d "$dir/PLUGIN" -a -f "$dir/PLUGIN/$type" ; then files="$files $dir/PLUGIN/$type" fi done if test ! -z "$files" ; then cat $files fi } directives() { # Print the directives from a particular type # of config file. # # Directives are found by: # # Joining continued lines (lines ending with backslash) to # the lines that follow them. # # Selecting lines with a letter in column 0. # # The general form of a directive is: # # directive-name variable-name params... # # for a directive that can set VARIABLE-NAME. PARAMS is arbitrary. # config_files "$1" \ | awk 'BEGIN { saved_line = ""; saving = 0; } # Join continuation lines # saving { $0 = saved_line " " $0; } match($0, "\\\\$") { saved_line = substr($0, 1, length($0) - 1); saving = 1; next; } # Process completed lines # { saved_line = ""; saving = 0; process_line($0); } # Watch out for a left-over line: # END { if (saving) process_line(saved_line); } function process_line(line) { # Print apparent directive lines. # if (match(line, "^[a-zA-Z]")) { print line; } }' \ | sort -k 2 -u } options_files() { config_files "options" } auto_files() { config_files "auto" } options_directives() { directives "options" } auto_directives() { directives "auto" } ################################################################ # special options # # Some options are special: # # --version | -V # --help | -h # --help-options # --help-compatibility # # They cause all other options to have no effect and the # first special option found causes the script to exit. # if test $# -ne 0 ; then for opt in "$@" ; do case $opt in --version|-V) printf "Hackerlab configure 0.0\\n" printf "Copyright 2001, Tom Lord\\n" printf "\\n" printf "This is free software; see the source for copying conditions.\\n" printf "There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\\n" printf "PARTICULAR PURPOSE.\\n" printf "\\n" exit 0 ;; --help|-h) printf "usage: configure [options]\\n" printf "\\n" printf " --version | -V print version information\\n" printf " --help | -h print this message\\n" printf " --help-options print a list of configuration options\\n" printf " --help-compatibility print the list of packages with which\\n" printf " this package is purportedly compatible\\n" printf "\\n" printf " --prefix dir specify the installation root\\n" printf " --prefix=dir\\n" printf "\\n" printf " --destdir dir for use when creating binary packages\\n" printf " --destdir=dir\\n" printf "\\n" printf " --config-shell SHELL specify a shell for configure scripts\\n" printf "\\n" printf " --yes option specify a binary option\\n" printf " -y option\\n" printf " --no option\\n" printf " -n option\\n" printf " --with option [yes|y|1|no|n|0]\\n" printf " --with-option [yes|y|1|no|n|0]\\n" printf " --with option=[yes|y|1|no|n|0]\\n" printf " --with-option=[yes|y|1|no|n|0]\\n" printf "\\n" printf " --with option value specify a string or package option\\n" printf " --with-option value\\n" printf " --with option=value\\n" printf " --with-option=value\\n" printf "\\n" exit 0 ;; --help-options) printf "\\n" printf "Available options and default values: \\n" printf "\\n" str="`options_files \ | grep -E -v \"^[ ]*(;.*)?\$\" \ | sed -e \"s/^binary[ ]*//\" \ -e \"s/^string[ ]*//\"`" if test -z "$str" ; then str=" (none)" fi printf "%s\\n" "$str" printf "\\n" exit 0 ;; --help-compatibility) printf "\\n" printf "Compatibility List:\\n" printf "\\n" if test -f "$srcdir/PLUGIN/compatible" ; then cat "$srcdir/PLUGIN/compatible" else printf " (none)\\n" fi printf "\\n" exit 0 ;; --) break ;; *) ;; esac done fi ################################################################ # Sanity Check and Process Defaults # # Don't try to configure a source directory. Always build in a # separate directory. # # if test -r PLUGIN ; then echo "Running configure in a source directory is not recommended" 1>&2 echo "(source directory detected by existence of ./PLUGIN)" 1>&2 exit 1 fi # If "$prefix" is not set from the environment, make # it "`pwd`/=install". # if test x$prefix = x ; then prefix=`pwd`/=install fi # Set srcroot and objroot # srcroot="$srcdir" objroot=`pwd` ################################################################ # Compute the Package Name # pkgfile="$srcroot/../=RELEASE-ID" if test ! -f "$pkgfile" ; then echo "ERROR: no distribution name file found ($pkgfile)." 1>&2 exit 1 else package=`grep -E -e "^[a-zA-Z].*$" "$pkgfile" | head -n 1` if test "x$package" = x ; then echo "ERROR: ill-formed distribution name in $pkgfile." 1>&2 exit 1 fi fi ################################################################ # Find the Top-Level PLUGIN Directory, If It Exists # if test -d "$srcdir/PLUGIN" ; then plugindir="$srcdir/PLUGIN" else plugindir= fi ################################################################ # Obtain Lists of Options # # binaryopts=`options_directives | grep "^binary" | sed -e "s/binary[ ][ ]*\([a-zA-Z][-a-zA-Z0-9]*\).*/\1/"` binaryopts=`echo $binaryopts` stringopts=`options_directives | grep "^string" | sed -e "s/string[ ][ ]*\([a-zA-Z][-a-zA-Z0-9]*\).*/\1/"` stringopts=`echo $stringopts` packageopts=`grep -E "^(required|optional)" "$plugindir/packages" \ | sed -e "s/required[ ][ ]*\([a-zA-Z][-a-zA-Z0-9]*\).*/\1/" \ | sed -e "s/optional[ ][ ]*\([a-zA-Z][-a-zA-Z0-9]*\).*/\1/"` packageopts=`echo $packageopts` ################################################################ # Clear Out the List of Option Settings # optfile="$objroot/Options" tmpoptfile="$objroot/,,Options" rm -f "$optfile" "$tmpoptfile" touch "$optfile" "$tmpoptfile" printf ";; variables determined by command line arguments\\n" >> "$tmpoptfile" printf ";;\\n" >> "$tmpoptfile" ################################################################ # Command line arguments can override the environment variable "prefix" # # --prefix dir # --prefix=dir # # the destination dir # # --destdir dir # --destdir=dir # # the shell used by configure # # --config-shell SHELL # # and configuration options (see the comment at the top of the file) # config_shell=/bin/sh while test $# -ne 0 ; do case "$1" in --) shift break ;; --prefix=*) prefix="`printf '%s\n' \"$1\" | sed -e 's/^--prefix=//'`" shift ;; --prefix) shift if test $# -eq 0 ; then echo ERROR: --prefix requires an argument 1>&2 exit 1 fi prefix="$1" shift ;; --destdir=*) destdir="`printf '%s\n' \"$1\" | sed -e 's/^--destdir=//'`" shift ;; --destdir) shift if test $# -eq 0 ; then echo ERROR: --destdir requires an argument 1>&2 exit 1 fi destdir="$1" shift ;; --config-shell) shift if test $# -eq 0 ; then echo ERROR: --config-shell requires an argument 1>&2 exit 1 fi config_shell="$1" shift ;; --yes | -y | -n | --no) # Compute the implicit value for the option. # Either 0 or 1. # if test $1 = --yes -o $1 = -y ; then value=1 else value=0 fi shift # Get the raw option name # if test $# -eq 0 ; then echo ERROR: --yes and --no require an argument 1>&2 exit 1 fi rawopt="$1" shift # Search the list of valid binary option names # for a matching option and remove it from # that list if found. # leftover= thisopt= if test ! -z "$binaryopts" ; then for opt in $binaryopts ; do if test "$opt" = "$rawopt" ; then thisopt="$opt" else leftover="$leftover $opt" fi done fi binaryopts="$leftover" # If we didn't find a matching option, that's an error. # if test -z "$thisopt" ; then echo "ERROR: unrecognized option for --yes or --no ($1)" 1>&2 exit 1 fi # Record the value: # echo "binary $thisopt=$value" >> "$tmpoptfile" ;; --with-*|--with) # Just to be fancy, we permit: # # --with var value # --with var=value # --with-var value # --with-var=value # # What we don't permit is: # # --with-var # # as a way to set a binary option to "yes", because that # leads to horrible ambiguities. # # Compute the raw option name. # # Either var or var=value. # case $1 in --with) shift if [ $# = 0 ] ; then echo ERROR: --with requires an option and value 1>&2 exit 1 fi rawopt="$1" erroruse="--with $rawopt" shift ;; --with-*) rawopt="`printf '%s\n' \"$1\" | sed -e 's/^--with-//'`" erroruse="--with-$rawopt" shift ;; esac # invariant: # # $rawopt either the option name or option=value # $erroruse either --with $rawopt or --with-$rawopt # # If the value is a separate argument, it is $1. # # Is rawopt foo=bar just foo? # case "$rawopt" in *=*) withopt="`printf '%s\n' \"$rawopt\" | sed -e 's/=.*//'`" withval="`printf '%s\n' \"$rawopt\" | sed -e 's/^[^=]*=//'`" ;; *) withopt="$rawopt" if [ $# = 0 ] ; then echo "ERROR: $erroruse requires an argument" 1>&2 exit 1 fi withval="$1" shift ;; esac # invariant # # $withopt -- the option name # $withval -- the raw option value # # search for a matching binary option: # # Remove it from the list of binary options, # if it is found. # leftover= thisopt= if test ! -z "$binaryopts" ; then for opt in $binaryopts ; do if test "$opt" = "$withopt" ; then thisopt=$opt else leftover="$leftover $opt" fi done fi binaryopts="$leftover" # Is it a binary option? # if test ! -z "$thisopt" ; then # Yes, binary option. # # Is the value provided recognizable as a binary value? # Convert it to 0 or 1. # case "$withval" in yes|y|1) withval=1 ;; no|n|0) withval=0 ;; *) echo "ERROR: unrecognized value for binary option ($withopt $withval)" 1>&2 exit 1 ;; esac # Valid binary option. # Store it. # echo "binary $thisopt=$withval" >> "$tmpoptfile" else # Not a binary option. # # Search for a matching string option: # leftover= thisopt= if test ! -z "$stringopts" ; then for opt in $stringopts ; do if test "$opt" = "$withopt" ; then thisopt=$opt else leftover="$leftover $opt" fi done fi stringopts="$leftover" # Is it a string option? # if test ! -z "$thisopt" ; then # Yes, a string option. # Store it. # echo "string $thisopt=$withval" >> "$tmpoptfile" else # Not a string option. # # Search for a matching package option: # leftover= thisopt= if test ! -z "$packageopts" ; then for opt in $packageopts ; do if test "$opt" = "$withopt" ; then thisopt=$opt else leftover="$leftover $opt" fi done fi packageopts="$leftover" # Is it a package option? # if test -z "$thisopt" ; then # No, its an unrecognized option. # echo "ERROR: unrecognized argument ($erroruse)" 1>&2 exit 1 else # Yes, its a package option. # # Pass it as a hint to the package finder script # echo "PACKAGE HANDLERS NOT DONE YET" 1>&2 exit 1 fi fi fi ;; *) printf "configure: unrecognized option (%s)\\n" "$1" 1>&2 printf "try --help\\n" 1>&2 exit 1 ;; esac done ################################################################ # No Other Arguments are Permitted # if [ $# != 0 ] ; then echo "ERROR: unrecognized arguments" 1>&2 echo " " "$*" 1>&2 exit 1 fi ################################################################ # Make Sure That prefix and destdir are Absolute Paths # # The catch: prefix might not already exist, and any number # of its parent directories might not already exist. # if printf "%s\n" "$prefix" | grep -v -q -E '^/' ; then prefix="`pwd`/$prefix" fi if test "$destdir" ; then if printf "%s\n" "$destdir" | grep -v -E '^/' >/dev/null 2>&1 ; then destdir="`pwd`/$destdir" fi fi ################################################################ # Provide Default Values for Options not Specified # # Default binary option values: # if test ! -z "$binaryopts" ; then for opt in $binaryopts ; do default=`options_directives | grep "^binary[ ][ ]*$opt[ ]" \ | sed -e "s/binary[ ][ ]*[a-zA-Z][-a-zA-Z0-9]*[ ][ ]*\([^ ][^ ]*\)/\1/"` # Is the default value recognizable? # Convert it to 0 or 1. # case "$default" in 0|1) ;; yes|y) default=1 ;; no|n) default=0 ;; *) echo "ERROR: Bad default value for $opt ($default) in PLUGIN dir" 1>&2 exit ;; esac echo "binary $opt=$default" >> "$tmpoptfile" done fi # Default string option values: # if test ! -z "$stringopts" ; then for opt in $stringopts ; do default=`options_directives | grep "^string[ ][ ]*$opt[ ]" \ | sed -e "s/string[ ][ ]*[a-zA-Z][-a-zA-Z0-9]*[ ][ ]*\(.*\)/\1/"` echo "string $opt=$default" >> "$tmpoptfile" done fi # Default package option values: # if test ! -z "$packageopts" ; then for opt in $packageopts ; do default=`options_directives | grep "^string[ ][ ]*$opt[ ]" \ | sed -e "s/string[ ][ ]*[a-zA-Z][-a-zA-Z0-9]*[ ][ ]*\(.*\)/\1/"` echo "PACKAGE HANDLERS NOT DONE YET" 1>&2 exit 1 done fi ################################################################ # What's the Canonical System Name? # if [ $# != 0 ] ; then system=`$srcdir/build-tools/gnu/config.sub "$1"` shift else system=`$srcdir/build-tools/gnu/config.guess` fi echo >> "$tmpoptfile" echo >> "$tmpoptfile" printf ";; variables determined by system name (%s)\\n" "$system" >> "$tmpoptfile" printf ";;\\n" >> "$tmpoptfile" export config_shell "$config_shell" $srcdir/build-tools/platforms/sysconfig "$system" >> "$tmpoptfile" echo >> "$tmpoptfile" echo >> "$tmpoptfile" ################################################################ # Add the Standard Config Variables to $optfile # printf "\\n" >> "$optfile" printf ";; standard config variables (computed by \"configure-top\").\\n" >> "$optfile" printf ";;\\n" >> "$optfile" printf "string std--system=%s\\n" "$system" >> "$optfile" printf "string std--package=%s\\n" "$package" >> "$optfile" printf "string std--pkgfile=%s\\n" "$pkgfile" >> "$optfile" printf "string std--prefix=%s\\n" "$prefix" >> "$optfile" printf "string std--destdir=%s\\n" "$destdir" >> "$optfile" printf "string std--srcroot=%s\\n" "$srcroot" >> "$optfile" printf "string std--objroot=%s\\n" "$objroot" >> "$optfile" printf "\\n" >> "$optfile" printf "\\n" >> "$optfile" ################################################################ # Autoconf Options # auto_conf="$config_shell $srcroot/build-tools/scripts/auto" export auto_conf export srcroot export objroot export srcdir export prefix export destdir export config_shell # This (setting CC) is a temporary hack. A more systematic way # to handle non-standard names for the standard tools known to # make is in the works: # cc_setting="`cat \"$optfile\" \"$tmpoptfile\" | grep -E -e '^string cc=' | tail -n 1 | sed -e 's/string cc=//'`" if test -z "$cc_setting" ; then CC=cc else CC="$cc_setting" fi export CC cat "$tmpoptfile" >> "$optfile" rm "$tmpoptfile" printf ";; automatically determined values:\\n" >> "$optfile" printf ";;\\n" >> "$optfile" auto_directives \ | awk -v auto_conf="$auto_conf" '{ print auto_conf " " $0; }' \ | "$config_shell" -e \ >> "$optfile" printf "\\n" >> "$optfile" printf "\\n" >> "$optfile" ################################################################ # Build config-include/config-options.h # rm -rf config-include mkdir config-include cat > config-include/config-options.h << EOF #ifndef INCLUDE__CONFIG_OPTIONS_H #define INCLUDE__CONFIG_OPTIONS_H #include "release-id-string.h" EOF grep "^binary" "$optfile" | sed -e "s/^binary[ ]*/#define cfg__/" -e "s/-/_/g" -e "s/=/ /" >> config-include/config-options.h printf "\\n#define CFG__BINARY_OPTIONS() \\\\\\n" >> config-include/config-options.h grep "^binary" "$optfile" | sed -e "s/^binary[ ]*/ CFG__BINARY_OPTION(cfg__/" -e "s/-/_/g" -e "s/=/, /" -e "s/\$/) \\\\/" >> config-include/config-options.h printf "\\n\\n" >> config-include/config-options.h grep "^string" "$optfile" \ | sed -e "s/^[a-z]*[ ]*//" \ -e h \ -e "s/[^=]*=//" \ -e "s/\"/\\\\\"/g" \ -e "s/\\\\/\\\\\\\\/g" \ -e "s/.*/\"&\"/" \ -e x \ -e "s/=.*/ /" \ -e "s/^/#define cfg__/" \ -e "s/-/_/"g \ -e G \ -e "s/\\n//" \ >> config-include/config-options.h printf "\\n#define CFG__STRING_OPTIONS() \\\\\\n" >> config-include/config-options.h grep "^string" "$optfile" \ | sed -e "s/^[a-z]*[ ]*//" \ -e h \ -e "s/[^=]*=//" \ -e "s/\"/\\\\\"/g" \ -e "s/\\\\/\\\\\\\\/g" \ -e "s/.*/\"&\"/" \ -e "s/\$/) \\\\/" \ -e x \ -e "s/=.*/ /" \ -e "s/^/ CFG__STRING_OPTION(cfg__/" \ -e "s/-/_/"g \ -e "s/\$/, /" \ -e G \ -e "s/\\n//" \ >> config-include/config-options.h printf "\\n\\n" >> config-include/config-options.h if test -f "$srcroot/PLUGIN/compatible" ; then printf "\\n\\n#define CFG__COMPATIBLE_RELEASES() \\\\\n" >> config-include/config-options.h grep -E -v "^[ ]*(;.*)?\$" "$srcroot/PLUGIN/compatible" \ | sed -e "s/[ ]*//g" \ -e "s/;.*//" \ -e "s/\\\\/\\\\\\\\/g" \ -e "s/\"/\\\\\"/g" \ -e "s/^/\"/" \ -e "s/\$/\"/" \ -e "s/^/ CFG__COMPATIBLE_RELEASE(/" \ -e "s/\$/) \\\\/" \ >> config-include/config-options.h printf "\\n\\n" >> config-include/config-options.h fi case "${system}" in *cygwin*) cat >> config-include/config-options.h << EOF #ifndef __CYGWIN__ #define __CYGWIN__ 1 #endif EOF ;; *linux*) cat >> config-include/config-options.h << EOF #ifndef LINUX #define LINUX 1 #endif EOF ;; *) ;; esac cat >> config-include/config-options.h << EOF #endif EOF ################################################################ # Build config-include/config-options.h # cat > config-include/release-id-string.h << EOF #ifndef INCLUDE__CONFIG_INCLUDE__RELEASE_ID_STRING #define INCLUDE__CONFIG_INCLUDE__RELEASE_ID_STRING EOF printf '#define cfg__std__release_id_string \\\n' >> config-include/release-id-string.h cat "$pkgfile" \ | sed -e 's/[\"]/\\&/g' \ -e 's/^/ "/' \ -e 's/$/\\n" \\/' \ >> config-include/release-id-string.h printf "\n\n\n#endif\n" >> config-include/release-id-string.h ################################################################ # Build Makefile-config.mk # rm -f Makefile-config.mk cat > Makefile-config.mk << EOF ifndef makefile-config-mk makefile-config-mk := 1 EOF grep "^binary" "$optfile" | sed -e "s/^binary[ ]*/cfg__/" -e "s/-/_/g" -e "s/=/ := /" >> Makefile-config.mk grep "^string" "$optfile" \ | sed -e "s/^[a-z]*[ ]*//" \ -e h \ -e "s/[^=]*=//" \ -e "s/\\\$/\$\$/g" \ -e "s/[\\\\#]/\\\\&/g" \ -e x \ -e "s/=.*/ := \$(subst x,,x)/" \ -e "s/^/cfg__/" \ -e "s/-/_/g" \ -e G \ -e "s/\\n//" \ >> Makefile-config.mk cat >> Makefile-config.mk << EOF endif EOF ################################################################ # Report the Configuration Values to the User # printf "\\n" printf "Standard Configuration Settings: \\n" printf "\\n" cat "$optfile" | grep "^[a-z]*[ ]*std--" | sed -e "s/^[a-z]*[ ]*std--/ /" -e "s/=/ = /" printf "\\n" printf "\\n" printf "Configuration Options: \\n" printf "\\n" cat "$optfile" \ | sort -k 2 \ | grep -v "^[a-z]*[ ]*std--" \ | grep -E "^(binary|string)[ ]*" \ | sed -e 's/binary[ ]*\([^=]*\)=1/ \1 = yes/' \ -e 's/binary[ ]*\([^=]*\)=0/ \1 = no/' \ -e 's/string[ ]*\([^=]*\)=\(.*\)/ \1 = \2/' printf "\\n" printf "\\n" printf "Shell Used by Configure Scripts: \\n" printf "\\n" printf " %s\\n" "$config_shell" printf "\\n" printf "\\n" ################################################################ # Configure Subdirectories # export auto_conf export srcroot export objroot export srcdir export prefix export destdir export config_shell "$config_shell" $srcdir/build-tools/scripts/configure-dirs # arch-tag: Tom Lord Tue Dec 4 15:07:58 2001 (scripts/configure-top) # tla-1.3.5+dfsg/src/build-tools/scripts/auto0000644000175000017500000000063710457621764017365 0ustar useruser#!/bin/sh # auto: invoke a program in the auto-tools library # ################################################################ # Copyright (C) 2002 Tom Lord # # See the file "COPYING" for further information about # the copyright and warranty status of this work. # prog="$1" shift "$config_shell" "$srcroot/build-tools/auto-conf-lib/$prog" "$@" # arch-tag: Tom Lord Sat Feb 16 19:42:05 2002 (scripts/auto) # tla-1.3.5+dfsg/src/build-tools/=TODO0000644000175000017500000000422310457621764015563 0ustar useruser (This is the =TODO file for the package framework. Individual sub-packages (e.g. arch) have their own =TODO files (e.g. arch/=TODO)) * get unexec dependencies on computed libraries right (e.g., dependency on gnulib_var) * configure should work smoothly with make's standard tools We should count on the installed GNU make to (by default) get the names of standard tools (e.g. CC and AWK) right, and user's should be able to override that with generic configure options that take effect in `rules.mk'. Platform tests (e.g. `library-test') should be selected at configure time, but actually run at build time, so that if the user sets, say, CC or CFLAGS on the make command line, those options are double checked. At the same time, might as well put in a way to support cross compiling. This should be fixed before too many build-tools/auto-conf scripts accumulate. * GNU make needs rule dependencies Targets should implicitly depend on the (expanded) text of the rules that build them. This makes compile-time platform testing reliable, not to mention improving the reliability of builds generally. Optionally, make should use checksums, not timestamps, to decide when prereqs have changed. * shared library support libtool needs to be rewritten. * parallel makes should work E.g., `make -j3'. There is at least one bug: when installing shell subcommands, one user reports: ln: `/usr/local/arch/libexec/arch/inventory/../arch/add': File exists ln: `/usr/local/arch/libexec/arch/inventory/../arch/inventory': File exists ... * add a configure trick for finding optional libraries For example, Solaris needs -lsocket. * Finish Makefiles cleanup Some of the less important makefiles aren't done yet. See build-tools/Makefiles/=TODO * two Makefiles from configure in leaf dirs So that `clean' doesn't generate .d files for `make clean' when run only in a leaf dir, `configure' should produce two Makefiles: one generic, and one built from `Makefile.in'. The former should propogate makes to the latter, adding `clean-only=1' for `make clean'. # arch-tag: Tom Lord Tue Jan 22 18:28:52 2002 (src/=TODO) # tla-1.3.5+dfsg/src/build-tools/config-info/0000755000175000017500000000000010457621764017173 5ustar userusertla-1.3.5+dfsg/src/build-tools/config-info/config-info.c0000644000175000017500000001231110457621764021533 0ustar useruser/* config-info.c * **************************************************************** * Copyright (C) 2001, 2002 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ #include #include "config-options.h" static int string_equal_p (char * a, char * b) { while (*a && *b) { if (*a != *b) return 0; ++a; ++b; } return !*a && !*b; } static int standard_option (char * name) { if ( (name[0] == 'c') && (name[1] == 'f') && (name[2] == 'g') && (name[3] == '_') && (name[4] == '_') && (name[5] == 's') && (name[6] == 't') && (name[7] == 'd') && (name[8] == '_') && (name[9] == '_')) return 1; else return 0; } static void print_option_name (char * name) { if ( (name[0] == 'c') && (name[1] == 'f') && (name[2] == 'g') && (name[3] == '_') && (name[4] == '_')) { name += 5; if ( (name[0] == 's') && (name[1] == 't') && (name[2] == 'd') && (name[3] == '_') && (name[4] == '_')) name += 5; } while (*name) { putchar ((*name == '_') ? '-' : *name); ++name; } } int main (int argc, char * argv[]) { if (argc == 0) { printf ("ERROR: argc is 0!\n"); exit (1); } if (argc == 1) { printf ("%s\n", cfg__std__prefix); exit (0); } if (string_equal_p (argv[1], "--help") || string_equal_p (argv[1], "-h")) { printf ("usage: %s [option]\n", argv[0]); puts (""); puts ("-h --help print the message"); puts ("-V --version print version information"); puts (""); puts (" --package print the package name"); puts (" --options print all compile-time options"); puts (""); puts (" --is-compatible relase exit with status 1 or 0 depending"); puts (" on whether or not this release is"); puts (" purportedly compatible with RELEASE?"); puts (""); puts (" --compatible print information about what other"); puts (" packages this version is purportedly"); puts (" compatible with"); puts (""); puts ("At most one option may be specified."); puts (""); puts ("With no options, print the install prefix."); puts (""); exit (0); } if (string_equal_p (argv[1], "--version") || string_equal_p (argv[1], "-V")) { puts ("config-info " cfg__std__package " from regexps.com"); puts (""); puts ("Copyright (C) 2001, 2002 Tom Lord"); puts (""); puts ("This is free software; see the source for copying conditions."); puts ("There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A"); puts ("PARTICULAR PURPOSE."); puts (""); puts ("Report bugs to <" cfg__package_framework_bug_mail ">."); puts (""); exit (0); } if (string_equal_p (argv[1], "--package")) { if (argc != 2) { fprintf (stderr, "usage: %s --package\n", argv[0]); fprintf (stderr, "try --help\n"); exit (1); } printf ("%s\n", cfg__std__package); exit (0); } if (string_equal_p (argv[1], "--is-compatible")) { if (argc != 3) { fprintf (stderr, "usage: %s --compatible package-name\n", argv[0]); fprintf (stderr, "try --help\n"); exit (1); } #undef CFG__COMPATIBLE_RELEASE #define CFG__COMPATIBLE_RELEASE(release) if (string_equal_p (release, argv[2])) exit (0); CFG__COMPATIBLE_RELEASES(); exit (1); } if (string_equal_p (argv[1], "--compatible")) { if (argc != 2) { fprintf (stderr, "usage: %s --options\n", argv[0]); fprintf (stderr, "try --help\n"); exit (1); } puts (""); printf ("Compatibility list for %s\n", cfg__std__package); puts (""); #undef CFG__COMPATIBLE_RELEASE #define CFG__COMPATIBLE_RELEASE(release) printf (" %s\n", release); CFG__COMPATIBLE_RELEASES(); puts (""); exit (0); } if (string_equal_p (argv[1], "--options")) { if (argc != 2) { fprintf (stderr, "usage: %s --options\n", argv[0]); fprintf (stderr, "try --help\n"); exit (1); } puts (""); printf ("Configuration options for %s\n", cfg__std__package); puts (""); #undef CFG__STRING_OPTION #define CFG__STRING_OPTION(name,value) if (standard_option (#name)) { printf (" "); print_option_name (#name); printf (" = %s\n", value); } CFG__STRING_OPTIONS(); puts (""); #undef CFG_BINARY_OPTION #define CFG__BINARY_OPTION(name,value) printf (" "); print_option_name (#name); printf (" = %s\n", value ? "yes" : "no"); CFG__BINARY_OPTIONS(); puts (""); #undef CFG__STRING_OPTION #define CFG__STRING_OPTION(name,value) if (!standard_option (#name)) { printf (" "); print_option_name (#name); printf (" = %s\n", value); } CFG__STRING_OPTIONS(); puts (""); exit (0); } fprintf (stderr, "%s: unrecognized option\n", argv[0]); fprintf (stderr, "try --help\n"); exit (1); } /* arch-tag: A generic program for reporting config info */ tla-1.3.5+dfsg/src/build-tools/config-info/UNPLUGGED/0000755000175000017500000000000010457621764020525 5ustar userusertla-1.3.5+dfsg/src/build-tools/config-info/UNPLUGGED/REQ0000644000175000017500000000003110457621764021071 0ustar useruserconfig-info config-info tla-1.3.5+dfsg/src/build-tools/config-info/Makefile.in0000644000175000017500000000016010457621764021235 0ustar useruser# arch-tag: Tom Lord Tue Dec 4 14:51:56 2001 (config-info/Makefile.in) # include $(makefiles)/config-info.mk tla-1.3.5+dfsg/src/build-tools/Makefile.in0000644000175000017500000000015110457621764017037 0ustar useruser# arch-tag: Tom Lord Tue Dec 4 14:52:04 2001 (build-tools/Makefile.in) # include $(makefiles)/dirs.mk tla-1.3.5+dfsg/src/build-tools/gnu/0000755000175000017500000000000010457621764015566 5ustar userusertla-1.3.5+dfsg/src/build-tools/gnu/config.guess0000755000175000017500000012625710457621764020123 0ustar useruser#! /bin/sh # Attempt to guess a canonical system name. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, # Inc. timestamp='2006-06-06' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA # 02110-1301, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Per Bothner . # Please send patches to . Submit a context # diff and a properly formatted ChangeLog entry. # # This script attempts to guess a canonical system name similar to # config.sub. If it succeeds, it prints the system name on stdout, and # exits with 0. Otherwise, it exits with 1. # # The plan is that this can be called by configure scripts if you # don't specify an explicit build system type. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] Output the configuration name of the system \`$me' is run on. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; * ) break ;; esac done if test $# != 0; then echo "$me: too many arguments$help" >&2 exit 1 fi trap 'exit 1' 1 2 15 # CC_FOR_BUILD -- compiler used by this script. Note that the use of a # compiler to aid in system detection is discouraged as it requires # temporary files to be created and, as you can see below, it is a # headache to deal with in a portable fashion. # Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still # use `HOST_CC' if defined, but it is deprecated. # Portable tmp directory creation inspired by the Autoconf team. set_cc_for_build=' trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; : ${TMPDIR=/tmp} ; { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; dummy=$tmp/dummy ; tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; case $CC_FOR_BUILD,$HOST_CC,$CC in ,,) echo "int x;" > $dummy.c ; for c in cc gcc c89 c99 ; do if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then CC_FOR_BUILD="$c"; break ; fi ; done ; if test x"$CC_FOR_BUILD" = x ; then CC_FOR_BUILD=no_compiler_found ; fi ;; ,,*) CC_FOR_BUILD=$CC ;; ,*,*) CC_FOR_BUILD=$HOST_CC ;; esac ; set_cc_for_build= ;' # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 1994-08-24) if (test -f /.attbin/uname) >/dev/null 2>&1 ; then PATH=$PATH:/.attbin ; export PATH fi UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown # Note: order is significant - the case branches are not exclusive. case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in *:NetBSD:*:*) # NetBSD (nbsd) targets should (where applicable) match one or # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently # switched to ELF, *-*-netbsd* would select the old # object file format. This provides both forward # compatibility and a consistent mechanism for selecting the # object file format. # # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". sysctl="sysctl -n hw.machine_arch" UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ /usr/sbin/$sysctl 2>/dev/null || echo unknown)` case "${UNAME_MACHINE_ARCH}" in armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; *) machine=${UNAME_MACHINE_ARCH}-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently, or will in the future. case "${UNAME_MACHINE_ARCH}" in arm*|i386|m68k|ns32k|sh3*|sparc|vax) eval $set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep __ELF__ >/dev/null then # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). # Return netbsd for either. FIX? os=netbsd else os=netbsdelf fi ;; *) os=netbsd ;; esac # The OS release # Debian GNU/NetBSD machines have a different userland, and # thus, need a distinct triplet. However, they do not need # kernel version information, so it can be replaced with a # suitable tag, in the style of linux-gnu. case "${UNAME_VERSION}" in Debian*) release='-gnu' ;; *) release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. echo "${machine}-${os}${release}" exit ;; *:OpenBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} exit ;; *:ekkoBSD:*:*) echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} exit ;; *:SolidBSD:*:*) echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} exit ;; macppc:MirBSD:*:*) echo powerppc-unknown-mirbsd${UNAME_RELEASE} exit ;; *:MirBSD:*:*) echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} exit ;; alpha:OSF1:*:*) case $UNAME_RELEASE in *4.0) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` ;; *5.*) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` ;; esac # According to Compaq, /usr/sbin/psrinfo has been available on # OSF/1 and Tru64 systems produced since 1995. I hope that # covers most systems running today. This code pipes the CPU # types through head -n 1, so we only detect the type of CPU 0. ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` case "$ALPHA_CPU_TYPE" in "EV4 (21064)") UNAME_MACHINE="alpha" ;; "EV4.5 (21064)") UNAME_MACHINE="alpha" ;; "LCA4 (21066/21068)") UNAME_MACHINE="alpha" ;; "EV5 (21164)") UNAME_MACHINE="alphaev5" ;; "EV5.6 (21164A)") UNAME_MACHINE="alphaev56" ;; "EV5.6 (21164PC)") UNAME_MACHINE="alphapca56" ;; "EV5.7 (21164PC)") UNAME_MACHINE="alphapca57" ;; "EV6 (21264)") UNAME_MACHINE="alphaev6" ;; "EV6.7 (21264A)") UNAME_MACHINE="alphaev67" ;; "EV6.8CB (21264C)") UNAME_MACHINE="alphaev68" ;; "EV6.8AL (21264B)") UNAME_MACHINE="alphaev68" ;; "EV6.8CX (21264D)") UNAME_MACHINE="alphaev68" ;; "EV6.9A (21264/EV69A)") UNAME_MACHINE="alphaev69" ;; "EV7 (21364)") UNAME_MACHINE="alphaev7" ;; "EV7.9 (21364A)") UNAME_MACHINE="alphaev79" ;; esac # A Pn.n version is a patched version. # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` exit ;; Alpha\ *:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # Should we change UNAME_MACHINE based on the output of uname instead # of the specific Alpha model? echo alpha-pc-interix exit ;; 21064:Windows_NT:50:3) echo alpha-dec-winnt3.5 exit ;; Amiga*:UNIX_System_V:4.0:*) echo m68k-unknown-sysv4 exit ;; *:[Aa]miga[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-amigaos exit ;; *:[Mm]orph[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-morphos exit ;; *:OS/390:*:*) echo i370-ibm-openedition exit ;; *:z/VM:*:*) echo s390-ibm-zvmoe exit ;; *:OS400:*:*) echo powerpc-ibm-os400 exit ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) echo arm-acorn-riscix${UNAME_RELEASE} exit ;; arm:riscos:*:*|arm:RISCOS:*:*) echo arm-unknown-riscos exit ;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) echo hppa1.1-hitachi-hiuxmpp exit ;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. if test "`(/bin/universe) 2>/dev/null`" = att ; then echo pyramid-pyramid-sysv3 else echo pyramid-pyramid-bsd fi exit ;; NILE*:*:*:dcosx) echo pyramid-pyramid-svr4 exit ;; DRS?6000:unix:4.0:6*) echo sparc-icl-nx6 exit ;; DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) case `/usr/bin/uname -p` in sparc) echo sparc-icl-nx7; exit ;; esac ;; sun4H:SunOS:5.*:*) echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; i86pc:SunOS:5.*:*) echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:*:*) case "`/usr/bin/arch -k`" in Series*|S4*) UNAME_RELEASE=`uname -v` ;; esac # Japanese Language versions have a version number like `4.1.3-JL'. echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` exit ;; sun3*:SunOS:*:*) echo m68k-sun-sunos${UNAME_RELEASE} exit ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 case "`/bin/arch`" in sun3) echo m68k-sun-sunos${UNAME_RELEASE} ;; sun4) echo sparc-sun-sunos${UNAME_RELEASE} ;; esac exit ;; aushp:SunOS:*:*) echo sparc-auspex-sunos${UNAME_RELEASE} exit ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not # "atarist" or "atariste" at least should have a processor # > m68000). The system name ranges from "MiNT" over "FreeMiNT" # to the lowercase version "mint" (or "freemint"). Finally # the system name "TOS" denotes a system which is actually not # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) echo m68k-milan-mint${UNAME_RELEASE} exit ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) echo m68k-hades-mint${UNAME_RELEASE} exit ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) echo m68k-unknown-mint${UNAME_RELEASE} exit ;; m68k:machten:*:*) echo m68k-apple-machten${UNAME_RELEASE} exit ;; powerpc:machten:*:*) echo powerpc-apple-machten${UNAME_RELEASE} exit ;; RISC*:Mach:*:*) echo mips-dec-mach_bsd4.3 exit ;; RISC*:ULTRIX:*:*) echo mips-dec-ultrix${UNAME_RELEASE} exit ;; VAX*:ULTRIX*:*:*) echo vax-dec-ultrix${UNAME_RELEASE} exit ;; 2020:CLIX:*:* | 2430:CLIX:*:*) echo clipper-intergraph-clix${UNAME_RELEASE} exit ;; mips:*:*:UMIPS | mips:*:*:RISCos) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #ifdef __cplusplus #include /* for printf() prototype */ int main (int argc, char *argv[]) { #else int main (argc, argv) int argc; char *argv[]; { #endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_SVR4) printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); #endif #endif exit (-1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && SYSTEM_NAME=`$dummy $dummyarg` && { echo "$SYSTEM_NAME"; exit; } echo mips-mips-riscos${UNAME_RELEASE} exit ;; Motorola:PowerMAX_OS:*:*) echo powerpc-motorola-powermax exit ;; Motorola:*:4.3:PL8-*) echo powerpc-harris-powermax exit ;; Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) echo powerpc-harris-powermax exit ;; Night_Hawk:Power_UNIX:*:*) echo powerpc-harris-powerunix exit ;; m88k:CX/UX:7*:*) echo m88k-harris-cxux7 exit ;; m88k:*:4*:R4*) echo m88k-motorola-sysv4 exit ;; m88k:*:3*:R3*) echo m88k-motorola-sysv3 exit ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] then if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ [ ${TARGET_BINARY_INTERFACE}x = x ] then echo m88k-dg-dgux${UNAME_RELEASE} else echo m88k-dg-dguxbcs${UNAME_RELEASE} fi else echo i586-dg-dgux${UNAME_RELEASE} fi exit ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) echo m88k-dolphin-sysv3 exit ;; M88*:*:R3*:*) # Delta 88k system running SVR3 echo m88k-motorola-sysv3 exit ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) echo m88k-tektronix-sysv3 exit ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) echo m68k-tektronix-bsd exit ;; *:IRIX*:*:*) echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` exit ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i*86:AIX:*:*) echo i386-ibm-aix exit ;; ia64:AIX:*:*) if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} exit ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include main() { if (!__power_pc()) exit(1); puts("powerpc-ibm-aix3.2.5"); exit(0); } EOF if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` then echo "$SYSTEM_NAME" else echo rs6000-ibm-aix3.2.5 fi elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then echo rs6000-ibm-aix3.2.4 else echo rs6000-ibm-aix3.2 fi exit ;; *:AIX:*:[45]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${IBM_ARCH}-ibm-aix${IBM_REV} exit ;; *:AIX:*:*) echo rs6000-ibm-aix exit ;; ibmrt:4.4BSD:*|romp-ibm:BSD:*) echo romp-ibm-bsd4.4 exit ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to exit ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) echo rs6000-bull-bosx exit ;; DPX/2?00:B.O.S.:*:*) echo m68k-bull-sysv3 exit ;; 9000/[34]??:4.3bsd:1.*:*) echo m68k-hp-bsd exit ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) echo m68k-hp-bsd4.4 exit ;; 9000/[34678]??:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` case "${UNAME_MACHINE}" in 9000/31? ) HP_ARCH=m68000 ;; 9000/[34]?? ) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) if [ -x /usr/bin/getconf ]; then sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` case "${sc_cpu_version}" in 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 case "${sc_kernel_bits}" in 32) HP_ARCH="hppa2.0n" ;; 64) HP_ARCH="hppa2.0w" ;; '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 esac ;; esac fi if [ "${HP_ARCH}" = "" ]; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #define _HPUX_SOURCE #include #include int main () { #if defined(_SC_KERNEL_BITS) long bits = sysconf(_SC_KERNEL_BITS); #endif long cpu = sysconf (_SC_CPU_VERSION); switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0"); break; case CPU_PA_RISC1_1: puts ("hppa1.1"); break; case CPU_PA_RISC2_0: #if defined(_SC_KERNEL_BITS) switch (bits) { case 64: puts ("hppa2.0w"); break; case 32: puts ("hppa2.0n"); break; default: puts ("hppa2.0"); break; } break; #else /* !defined(_SC_KERNEL_BITS) */ puts ("hppa2.0"); break; #endif default: puts ("hppa1.0"); break; } exit (0); } EOF (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` test -z "$HP_ARCH" && HP_ARCH=hppa fi ;; esac if [ ${HP_ARCH} = "hppa2.0w" ] then eval $set_cc_for_build # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler # generating 64-bit code. GNU and HP use different nomenclature: # # $ CC_FOR_BUILD=cc ./config.guess # => hppa2.0w-hp-hpux11.23 # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess # => hppa64-hp-hpux11.23 if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | grep __LP64__ >/dev/null then HP_ARCH="hppa2.0w" else HP_ARCH="hppa64" fi fi echo ${HP_ARCH}-hp-hpux${HPUX_REV} exit ;; ia64:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` echo ia64-hp-hpux${HPUX_REV} exit ;; 3050*:HI-UX:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include int main () { long cpu = sysconf (_SC_CPU_VERSION); /* The order matters, because CPU_IS_HP_MC68K erroneously returns true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct results, however. */ if (CPU_IS_PA_RISC (cpu)) { switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; default: puts ("hppa-hitachi-hiuxwe2"); break; } } else if (CPU_IS_HP_MC68K (cpu)) puts ("m68k-hitachi-hiuxwe2"); else puts ("unknown-hitachi-hiuxwe2"); exit (0); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } echo unknown-hitachi-hiuxwe2 exit ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) echo hppa1.1-hp-bsd exit ;; 9000/8??:4.3bsd:*:*) echo hppa1.0-hp-bsd exit ;; *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) echo hppa1.0-hp-mpeix exit ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) echo hppa1.1-hp-osf exit ;; hp8??:OSF1:*:*) echo hppa1.0-hp-osf exit ;; i*86:OSF1:*:*) if [ -x /usr/sbin/sysversion ] ; then echo ${UNAME_MACHINE}-unknown-osf1mk else echo ${UNAME_MACHINE}-unknown-osf1 fi exit ;; parisc*:Lites*:*:*) echo hppa1.1-hp-lites exit ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) echo c1-convex-bsd exit ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) echo c34-convex-bsd exit ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) echo c38-convex-bsd exit ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) echo c4-convex-bsd exit ;; CRAY*Y-MP:*:*:*) echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*[A-Z]90:*:*:*) echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ -e 's/\.[^.]*$/.X/' exit ;; CRAY*TS:*:*:*) echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*T3E:*:*:*) echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*SV1:*:*:*) echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; *:UNICOS/mp:*:*) echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; 5000:UNIX_System_V:4.*:*) FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} exit ;; sparc*:BSD/OS:*:*) echo sparc-unknown-bsdi${UNAME_RELEASE} exit ;; *:BSD/OS:*:*) echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} exit ;; *:FreeBSD:*:*) case ${UNAME_MACHINE} in pc98) echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; amd64) echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; *) echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; esac exit ;; i*:CYGWIN*:*) echo ${UNAME_MACHINE}-pc-cygwin exit ;; i*:MINGW*:*) echo ${UNAME_MACHINE}-pc-mingw32 exit ;; i*:windows32*:*) # uname -m includes "-pc" on this system. echo ${UNAME_MACHINE}-mingw32 exit ;; i*:PW*:*) echo ${UNAME_MACHINE}-pc-pw32 exit ;; x86:Interix*:[345]*) echo i586-pc-interix${UNAME_RELEASE} exit ;; EM64T:Interix*:[345]*) echo x86_64-unknown-interix${UNAME_RELEASE} exit ;; [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) echo i${UNAME_MACHINE}-pc-mks exit ;; i*:Windows_NT*:* | Pentium*:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we # UNAME_MACHINE based on the output of uname instead of i386? echo i586-pc-interix exit ;; i*:UWIN*:*) echo ${UNAME_MACHINE}-pc-uwin exit ;; amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) echo x86_64-unknown-cygwin exit ;; p*:CYGWIN*:*) echo powerpcle-unknown-cygwin exit ;; prep*:SunOS:5.*:*) echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; *:GNU:*:*) # the GNU system echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` exit ;; *:GNU/*:*:*) # other systems with GNU libc and userland echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu exit ;; i*86:Minix:*:*) echo ${UNAME_MACHINE}-pc-minix exit ;; arm*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; avr32*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; cris:Linux:*:*) echo cris-axis-linux-gnu exit ;; crisv32:Linux:*:*) echo crisv32-axis-linux-gnu exit ;; frv:Linux:*:*) echo frv-unknown-linux-gnu exit ;; ia64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; m32r*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; m68*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; mips:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef mips #undef mipsel #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=mipsel #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=mips #else CPU= #endif #endif EOF eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' /^CPU/{ s: ::g p }'`" test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } ;; mips64:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef mips64 #undef mips64el #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=mips64el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=mips64 #else CPU= #endif #endif EOF eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' /^CPU/{ s: ::g p }'`" test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } ;; or32:Linux:*:*) echo or32-unknown-linux-gnu exit ;; ppc:Linux:*:*) echo powerpc-unknown-linux-gnu exit ;; ppc64:Linux:*:*) echo powerpc64-unknown-linux-gnu exit ;; alpha:Linux:*:*) case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in EV5) UNAME_MACHINE=alphaev5 ;; EV56) UNAME_MACHINE=alphaev56 ;; PCA56) UNAME_MACHINE=alphapca56 ;; PCA57) UNAME_MACHINE=alphapca56 ;; EV6) UNAME_MACHINE=alphaev6 ;; EV67) UNAME_MACHINE=alphaev67 ;; EV68*) UNAME_MACHINE=alphaev68 ;; esac objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} exit ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in PA7*) echo hppa1.1-unknown-linux-gnu ;; PA8*) echo hppa2.0-unknown-linux-gnu ;; *) echo hppa-unknown-linux-gnu ;; esac exit ;; parisc64:Linux:*:* | hppa64:Linux:*:*) echo hppa64-unknown-linux-gnu exit ;; s390:Linux:*:* | s390x:Linux:*:*) echo ${UNAME_MACHINE}-ibm-linux exit ;; sh64*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; sh*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; sparc:Linux:*:* | sparc64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; vax:Linux:*:*) echo ${UNAME_MACHINE}-dec-linux-gnu exit ;; x86_64:Linux:*:*) echo x86_64-unknown-linux-gnu exit ;; i*86:Linux:*:*) # The BFD linker knows what the default object file format is, so # first see if it will tell us. cd to the root directory to prevent # problems with other programs or directories called `ld' in the path. # Set LC_ALL=C to ensure ld outputs messages in English. ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \ | sed -ne '/supported targets:/!d s/[ ][ ]*/ /g s/.*supported targets: *// s/ .*// p'` case "$ld_supported_targets" in elf32-i386) TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu" ;; a.out-i386-linux) echo "${UNAME_MACHINE}-pc-linux-gnuaout" exit ;; coff-i386) echo "${UNAME_MACHINE}-pc-linux-gnucoff" exit ;; "") # Either a pre-BFD a.out linker (linux-gnuoldld) or # one that does not give us useful --help. echo "${UNAME_MACHINE}-pc-linux-gnuoldld" exit ;; esac # Determine whether the default compiler is a.out or elf eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include #ifdef __ELF__ # ifdef __GLIBC__ # if __GLIBC__ >= 2 LIBC=gnu # else LIBC=gnulibc1 # endif # else LIBC=gnulibc1 # endif #else #if defined(__INTEL_COMPILER) || defined(__PGI) || defined(__SUNPRO_C) || defined(__SUNPRO_CC) LIBC=gnu #else LIBC=gnuaout #endif #endif #ifdef __dietlibc__ LIBC=dietlibc #endif EOF eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' /^LIBC/{ s: ::g p }'`" test x"${LIBC}" != x && { echo "${UNAME_MACHINE}-pc-linux-${LIBC}" exit } test x"${TENTATIVE}" != x && { echo "${TENTATIVE}"; exit; } ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. # earlier versions are messed up and put the nodename in both # sysname and nodename. echo i386-sequent-sysv4 exit ;; i*86:UNIX_SV:4.2MP:2.*) # Unixware is an offshoot of SVR4, but it has its own version # number series starting with 2... # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} exit ;; i*86:OS/2:*:*) # If we were able to find `uname', then EMX Unix compatibility # is probably installed. echo ${UNAME_MACHINE}-pc-os2-emx exit ;; i*86:XTS-300:*:STOP) echo ${UNAME_MACHINE}-unknown-stop exit ;; i*86:atheos:*:*) echo ${UNAME_MACHINE}-unknown-atheos exit ;; i*86:syllable:*:*) echo ${UNAME_MACHINE}-pc-syllable exit ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*) echo i386-unknown-lynxos${UNAME_RELEASE} exit ;; i*86:*DOS:*:*) echo ${UNAME_MACHINE}-pc-msdosdjgpp exit ;; i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} else echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} fi exit ;; i*86:*:5:[678]*) # UnixWare 7.x, OpenUNIX and OpenServer 6. case `/bin/uname -X | grep "^Machine"` in *486*) UNAME_MACHINE=i486 ;; *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; esac echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} exit ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ && UNAME_MACHINE=i586 (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ && UNAME_MACHINE=i686 (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 echo ${UNAME_MACHINE}-pc-sco$UNAME_REL else echo ${UNAME_MACHINE}-pc-sysv32 fi exit ;; pc:*:*:*) # Left here for compatibility: # uname -m prints for DJGPP always 'pc', but it prints nothing about # the processor, so we play safe by assuming i386. echo i386-pc-msdosdjgpp exit ;; Intel:Mach:3*:*) echo i386-pc-mach3 exit ;; paragon:*:*:*) echo i860-intel-osf1 exit ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 fi exit ;; mini*:CTIX:SYS*5:*) # "miniframe" echo m68010-convergent-sysv exit ;; mc68k:UNIX:SYSTEM5:3.51m) echo m68k-convergent-sysv exit ;; M680?0:D-NIX:5.3:*) echo m68k-diab-dnix exit ;; M68*:*:R3V[5678]*:*) test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) OS_REL='' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4; exit; } ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) echo m68k-unknown-lynxos${UNAME_RELEASE} exit ;; mc68030:UNIX_System_V:4.*:*) echo m68k-atari-sysv4 exit ;; TSUNAMI:LynxOS:2.*:*) echo sparc-unknown-lynxos${UNAME_RELEASE} exit ;; rs6000:LynxOS:2.*:*) echo rs6000-unknown-lynxos${UNAME_RELEASE} exit ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*) echo powerpc-unknown-lynxos${UNAME_RELEASE} exit ;; SM[BE]S:UNIX_SV:*:*) echo mips-dde-sysv${UNAME_RELEASE} exit ;; RM*:ReliantUNIX-*:*:*) echo mips-sni-sysv4 exit ;; RM*:SINIX-*:*:*) echo mips-sni-sysv4 exit ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` echo ${UNAME_MACHINE}-sni-sysv4 else echo ns32k-sni-sysv fi exit ;; PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort # says echo i586-unisys-sysv4 exit ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # How about differentiating between stratus architectures? -djm echo hppa1.1-stratus-sysv4 exit ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. echo i860-stratus-sysv4 exit ;; i*86:VOS:*:*) # From Paul.Green@stratus.com. echo ${UNAME_MACHINE}-stratus-vos exit ;; *:VOS:*:*) # From Paul.Green@stratus.com. echo hppa1.1-stratus-vos exit ;; mc68*:A/UX:*:*) echo m68k-apple-aux${UNAME_RELEASE} exit ;; news*:NEWS-OS:6*:*) echo mips-sony-newsos6 exit ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if [ -d /usr/nec ]; then echo mips-nec-sysv${UNAME_RELEASE} else echo mips-unknown-sysv${UNAME_RELEASE} fi exit ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. echo powerpc-be-beos exit ;; BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. echo powerpc-apple-beos exit ;; BePC:BeOS:*:*) # BeOS running on Intel PC compatible. echo i586-pc-beos exit ;; SX-4:SUPER-UX:*:*) echo sx4-nec-superux${UNAME_RELEASE} exit ;; SX-5:SUPER-UX:*:*) echo sx5-nec-superux${UNAME_RELEASE} exit ;; SX-6:SUPER-UX:*:*) echo sx6-nec-superux${UNAME_RELEASE} exit ;; Power*:Rhapsody:*:*) echo powerpc-apple-rhapsody${UNAME_RELEASE} exit ;; *:Rhapsody:*:*) echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} exit ;; *:Darwin:*:*) UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown case $UNAME_PROCESSOR in unknown) UNAME_PROCESSOR=powerpc ;; esac echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} exit ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` if test "$UNAME_PROCESSOR" = "x86"; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} exit ;; *:QNX:*:4*) echo i386-pc-qnx exit ;; NSE-?:NONSTOP_KERNEL:*:*) echo nse-tandem-nsk${UNAME_RELEASE} exit ;; NSR-?:NONSTOP_KERNEL:*:*) echo nsr-tandem-nsk${UNAME_RELEASE} exit ;; *:NonStop-UX:*:*) echo mips-compaq-nonstopux exit ;; BS2000:POSIX*:*:*) echo bs2000-siemens-sysv exit ;; DS/*:UNIX_System_V:*:*) echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} exit ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. if test "$cputype" = "386"; then UNAME_MACHINE=i386 else UNAME_MACHINE="$cputype" fi echo ${UNAME_MACHINE}-unknown-plan9 exit ;; *:TOPS-10:*:*) echo pdp10-unknown-tops10 exit ;; *:TENEX:*:*) echo pdp10-unknown-tenex exit ;; KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) echo pdp10-dec-tops20 exit ;; XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) echo pdp10-xkl-tops20 exit ;; *:TOPS-20:*:*) echo pdp10-unknown-tops20 exit ;; *:ITS:*:*) echo pdp10-unknown-its exit ;; SEI:*:*:SEIUX) echo mips-sei-seiux${UNAME_RELEASE} exit ;; *:DragonFly:*:*) echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` exit ;; *:*VMS:*:*) UNAME_MACHINE=`(uname -p) 2>/dev/null` case "${UNAME_MACHINE}" in A*) echo alpha-dec-vms ; exit ;; I*) echo ia64-dec-vms ; exit ;; V*) echo vax-dec-vms ; exit ;; esac ;; *:XENIX:*:SysV) echo i386-pc-xenix exit ;; i*86:skyos:*:*) echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' exit ;; i*86:rdos:*:*) echo ${UNAME_MACHINE}-pc-rdos exit ;; esac #echo '(No uname command or uname output not recognized.)' 1>&2 #echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 eval $set_cc_for_build cat >$dummy.c < # include #endif main () { #if defined (sony) #if defined (MIPSEB) /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, I don't know.... */ printf ("mips-sony-bsd\n"); exit (0); #else #include printf ("m68k-sony-newsos%s\n", #ifdef NEWSOS4 "4" #else "" #endif ); exit (0); #endif #endif #if defined (__arm) && defined (__acorn) && defined (__unix) printf ("arm-acorn-riscix\n"); exit (0); #endif #if defined (hp300) && !defined (hpux) printf ("m68k-hp-bsd\n"); exit (0); #endif #if defined (NeXT) #if !defined (__ARCHITECTURE__) #define __ARCHITECTURE__ "m68k" #endif int version; version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; if (version < 4) printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); else printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); exit (0); #endif #if defined (MULTIMAX) || defined (n16) #if defined (UMAXV) printf ("ns32k-encore-sysv\n"); exit (0); #else #if defined (CMU) printf ("ns32k-encore-mach\n"); exit (0); #else printf ("ns32k-encore-bsd\n"); exit (0); #endif #endif #endif #if defined (__386BSD__) printf ("i386-pc-bsd\n"); exit (0); #endif #if defined (sequent) #if defined (i386) printf ("i386-sequent-dynix\n"); exit (0); #endif #if defined (ns32000) printf ("ns32k-sequent-dynix\n"); exit (0); #endif #endif #if defined (_SEQUENT_) struct utsname un; uname(&un); if (strncmp(un.version, "V2", 2) == 0) { printf ("i386-sequent-ptx2\n"); exit (0); } if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ printf ("i386-sequent-ptx1\n"); exit (0); } printf ("i386-sequent-ptx\n"); exit (0); #endif #if defined (vax) # if !defined (ultrix) # include # if defined (BSD) # if BSD == 43 printf ("vax-dec-bsd4.3\n"); exit (0); # else # if BSD == 199006 printf ("vax-dec-bsd4.3reno\n"); exit (0); # else printf ("vax-dec-bsd\n"); exit (0); # endif # endif # else printf ("vax-dec-bsd\n"); exit (0); # endif # else printf ("vax-dec-ultrix\n"); exit (0); # endif #endif #if defined (alliant) && defined (i860) printf ("i860-alliant-bsd\n"); exit (0); #endif exit (1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } # Apollos put the system type in the environment. test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } # Convex versions that predate uname can use getsysinfo(1) if [ -x /usr/convex/getsysinfo ] then case `getsysinfo -f cpu_type` in c1*) echo c1-convex-bsd exit ;; c2*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; c34*) echo c34-convex-bsd exit ;; c38*) echo c38-convex-bsd exit ;; c4*) echo c4-convex-bsd exit ;; esac fi cat >&2 < in order to provide the needed information to handle your system. config.guess timestamp = $timestamp uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` /bin/uname -X = `(/bin/uname -X) 2>/dev/null` hostinfo = `(hostinfo) 2>/dev/null` /bin/universe = `(/bin/universe) 2>/dev/null` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` /bin/arch = `(/bin/arch) 2>/dev/null` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` UNAME_MACHINE = ${UNAME_MACHINE} UNAME_RELEASE = ${UNAME_RELEASE} UNAME_SYSTEM = ${UNAME_SYSTEM} UNAME_VERSION = ${UNAME_VERSION} EOF exit 1 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: tla-1.3.5+dfsg/src/build-tools/gnu/config.sub0000755000175000017500000007726410457621764017571 0ustar useruser#! /bin/sh # Configuration validation subroutine script. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, # Inc. timestamp='2006-06-06' # This file is (in principle) common to ALL GNU software. # The presence of a machine in this file suggests that SOME GNU software # can handle that machine. It does not imply ALL GNU software can. # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA # 02110-1301, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Please send patches to . Submit a context # diff and a properly formatted ChangeLog entry. # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. # Otherwise, we print the canonical config type on stdout and succeed. # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases # that are meaningful with *any* GNU software. # Each package is responsible for reporting which valid configurations # it does not support. The user should be able to distinguish # a failure to support a valid configuration from a meaningless # configuration. # The goal of this file is to map all the various variations of a given # machine specification into a single specification in the form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or in some cases, the newer four-part form: # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # It is wrong to echo any other type of specification. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] CPU-MFR-OPSYS $0 [OPTION] ALIAS Canonicalize a configuration name. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.sub ($timestamp) Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" exit 1 ;; *local*) # First pass through any local machine types. echo $1 exit ;; * ) break ;; esac done case $# in 0) echo "$me: missing argument$help" >&2 exit 1;; 1) ;; *) echo "$me: too many arguments$help" >&2 exit 1;; esac # Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). # Here we must recognize all the valid KERNEL-OS combinations. maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` case $maybe_os in nto-qnx* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | \ uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \ storm-chaos* | os2-emx* | rtmk-nova*) os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ;; *) basic_machine=`echo $1 | sed 's/-[^-]*$//'` if [ $basic_machine != $1 ] then os=`echo $1 | sed 's/.*-/-/'` else os=; fi ;; esac ### Let's recognize common machines as not being operating systems so ### that things like config.sub decstation-3100 work. We also ### recognize some manufacturers as not being operating systems, so we ### can provide default operating systems below. case $os in -sun*os*) # Prevent following clause from handling this invalid input. ;; -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ -apple | -axis | -knuth | -cray) os= basic_machine=$1 ;; -sim | -cisco | -oki | -wec | -winbond) os= basic_machine=$1 ;; -scout) ;; -wrs) os=-vxworks basic_machine=$1 ;; -chorusos*) os=-chorusos basic_machine=$1 ;; -chorusrdb) os=-chorusrdb basic_machine=$1 ;; -hiux*) os=-hiuxwe2 ;; -sco6) os=-sco5v6 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5) os=-sco3.2v5 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco4) os=-sco3.2v4 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2.[4-9]*) os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2v[4-9]*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5v6*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco*) os=-sco3.2v2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -udk*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -isc) os=-isc2.2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -clix*) basic_machine=clipper-intergraph ;; -isc*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -lynx*) os=-lynxos ;; -ptx*) basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` ;; -windowsnt*) os=`echo $os | sed -e 's/windowsnt/winnt/'` ;; -psos*) os=-psos ;; -mint | -mint[0-9]*) basic_machine=m68k-atari os=-mint ;; esac # Decode aliases for certain CPU-COMPANY combinations. case $basic_machine in # Recognize the basic CPU types without company name. # Some are omitted here because they have special meanings below. 1750a | 580 \ | a29k \ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ | am33_2.0 \ | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \ | bfin \ | c4x | clipper \ | d10v | d30v | dlx | dsp16xx \ | fr30 | frv \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | i370 | i860 | i960 | ia64 \ | ip2k | iq2000 \ | m32c | m32r | m32rle | m68000 | m68k | m88k \ | maxq | mb | microblaze | mcore \ | mips | mipsbe | mipseb | mipsel | mipsle \ | mips16 \ | mips64 | mips64el \ | mips64vr | mips64vrel \ | mips64orion | mips64orionel \ | mips64vr4100 | mips64vr4100el \ | mips64vr4300 | mips64vr4300el \ | mips64vr5000 | mips64vr5000el \ | mips64vr5900 | mips64vr5900el \ | mipsisa32 | mipsisa32el \ | mipsisa32r2 | mipsisa32r2el \ | mipsisa64 | mipsisa64el \ | mipsisa64r2 | mipsisa64r2el \ | mipsisa64sb1 | mipsisa64sb1el \ | mipsisa64sr71k | mipsisa64sr71kel \ | mipstx39 | mipstx39el \ | mn10200 | mn10300 \ | mt \ | msp430 \ | nios | nios2 \ | ns16k | ns32k \ | or32 \ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ | pyramid \ | sh | sh[1234] | sh[24]a | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ | sh64 | sh64le \ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ | spu | strongarm \ | tahoe | thumb | tic4x | tic80 | tron \ | v850 | v850e \ | we32k \ | x86 | xscale | xscalee[bl] | xstormy16 | xtensa \ | z8k) basic_machine=$basic_machine-unknown ;; m6811 | m68hc11 | m6812 | m68hc12) # Motorola 68HC11/12. basic_machine=$basic_machine-unknown os=-none ;; m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) ;; ms1) basic_machine=mt-unknown ;; # We use `pc' rather than `unknown' # because (1) that's what they normally are, and # (2) the word "unknown" tends to confuse beginning users. i*86 | x86_64) basic_machine=$basic_machine-pc ;; # Object if more than one company name word. *-*-*) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; # Recognize the basic CPU types with company name. 580-* \ | a29k-* \ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ | avr-* | avr32-* \ | bfin-* | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \ | clipper-* | craynv-* | cydra-* \ | d10v-* | d30v-* | dlx-* \ | elxsi-* \ | f30[01]-* | f700-* | fr30-* | frv-* | fx80-* \ | h8300-* | h8500-* \ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ | i*86-* | i860-* | i960-* | ia64-* \ | ip2k-* | iq2000-* \ | m32c-* | m32r-* | m32rle-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ | m88110-* | m88k-* | maxq-* | mcore-* \ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ | mips16-* \ | mips64-* | mips64el-* \ | mips64vr-* | mips64vrel-* \ | mips64orion-* | mips64orionel-* \ | mips64vr4100-* | mips64vr4100el-* \ | mips64vr4300-* | mips64vr4300el-* \ | mips64vr5000-* | mips64vr5000el-* \ | mips64vr5900-* | mips64vr5900el-* \ | mipsisa32-* | mipsisa32el-* \ | mipsisa32r2-* | mipsisa32r2el-* \ | mipsisa64-* | mipsisa64el-* \ | mipsisa64r2-* | mipsisa64r2el-* \ | mipsisa64sb1-* | mipsisa64sb1el-* \ | mipsisa64sr71k-* | mipsisa64sr71kel-* \ | mipstx39-* | mipstx39el-* \ | mmix-* \ | mt-* \ | msp430-* \ | nios-* | nios2-* \ | none-* | np1-* | ns16k-* | ns32k-* \ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ | pyramid-* \ | romp-* | rs6000-* \ | sh-* | sh[1234]-* | sh[24]a-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ | sparclite-* \ | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | strongarm-* | sv1-* | sx?-* \ | tahoe-* | thumb-* \ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ | tron-* \ | v850-* | v850e-* | vax-* \ | we32k-* \ | x86-* | x86_64-* | xps100-* | xscale-* | xscalee[bl]-* \ | xstormy16-* | xtensa-* \ | ymp-* \ | z8k-*) ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. 386bsd) basic_machine=i386-unknown os=-bsd ;; 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) basic_machine=m68000-att ;; 3b*) basic_machine=we32k-att ;; a29khif) basic_machine=a29k-amd os=-udi ;; abacus) basic_machine=abacus-unknown ;; adobe68k) basic_machine=m68010-adobe os=-scout ;; alliant | fx80) basic_machine=fx80-alliant ;; altos | altos3068) basic_machine=m68k-altos ;; am29k) basic_machine=a29k-none os=-bsd ;; amd64) basic_machine=x86_64-pc ;; amd64-*) basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; amdahl) basic_machine=580-amdahl os=-sysv ;; amiga | amiga-*) basic_machine=m68k-unknown ;; amigaos | amigados) basic_machine=m68k-unknown os=-amigaos ;; amigaunix | amix) basic_machine=m68k-unknown os=-sysv4 ;; apollo68) basic_machine=m68k-apollo os=-sysv ;; apollo68bsd) basic_machine=m68k-apollo os=-bsd ;; aux) basic_machine=m68k-apple os=-aux ;; balance) basic_machine=ns32k-sequent os=-dynix ;; c90) basic_machine=c90-cray os=-unicos ;; convex-c1) basic_machine=c1-convex os=-bsd ;; convex-c2) basic_machine=c2-convex os=-bsd ;; convex-c32) basic_machine=c32-convex os=-bsd ;; convex-c34) basic_machine=c34-convex os=-bsd ;; convex-c38) basic_machine=c38-convex os=-bsd ;; cray | j90) basic_machine=j90-cray os=-unicos ;; craynv) basic_machine=craynv-cray os=-unicosmp ;; cr16c) basic_machine=cr16c-unknown os=-elf ;; crds | unos) basic_machine=m68k-crds ;; crisv32 | crisv32-* | etraxfs*) basic_machine=crisv32-axis ;; cris | cris-* | etrax*) basic_machine=cris-axis ;; crx) basic_machine=crx-unknown os=-elf ;; da30 | da30-*) basic_machine=m68k-da30 ;; decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) basic_machine=mips-dec ;; decsystem10* | dec10*) basic_machine=pdp10-dec os=-tops10 ;; decsystem20* | dec20*) basic_machine=pdp10-dec os=-tops20 ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) basic_machine=m68k-motorola ;; delta88) basic_machine=m88k-motorola os=-sysv3 ;; djgpp) basic_machine=i586-pc os=-msdosdjgpp ;; dpx20 | dpx20-*) basic_machine=rs6000-bull os=-bosx ;; dpx2* | dpx2*-bull) basic_machine=m68k-bull os=-sysv3 ;; ebmon29k) basic_machine=a29k-amd os=-ebmon ;; elxsi) basic_machine=elxsi-elxsi os=-bsd ;; encore | umax | mmax) basic_machine=ns32k-encore ;; es1800 | OSE68k | ose68k | ose | OSE) basic_machine=m68k-ericsson os=-ose ;; fx2800) basic_machine=i860-alliant ;; genix) basic_machine=ns32k-ns ;; gmicro) basic_machine=tron-gmicro os=-sysv ;; go32) basic_machine=i386-pc os=-go32 ;; h3050r* | hiux*) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; h8300hms) basic_machine=h8300-hitachi os=-hms ;; h8300xray) basic_machine=h8300-hitachi os=-xray ;; h8500hms) basic_machine=h8500-hitachi os=-hms ;; harris) basic_machine=m88k-harris os=-sysv3 ;; hp300-*) basic_machine=m68k-hp ;; hp300bsd) basic_machine=m68k-hp os=-bsd ;; hp300hpux) basic_machine=m68k-hp os=-hpux ;; hp3k9[0-9][0-9] | hp9[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k2[0-9][0-9] | hp9k31[0-9]) basic_machine=m68000-hp ;; hp9k3[2-9][0-9]) basic_machine=m68k-hp ;; hp9k6[0-9][0-9] | hp6[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k7[0-79][0-9] | hp7[0-79][0-9]) basic_machine=hppa1.1-hp ;; hp9k78[0-9] | hp78[0-9]) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[0-9][13679] | hp8[0-9][13679]) basic_machine=hppa1.1-hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) basic_machine=hppa1.0-hp ;; hppa-next) os=-nextstep3 ;; hppaosf) basic_machine=hppa1.1-hp os=-osf ;; hppro) basic_machine=hppa1.1-hp os=-proelf ;; i370-ibm* | ibm*) basic_machine=i370-ibm ;; # I'm not sure what "Sysv32" means. Should this be sysv3.2? i*86v32) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv32 ;; i*86v4*) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv4 ;; i*86v) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv ;; i*86sol2) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-solaris2 ;; i386mach) basic_machine=i386-mach os=-mach ;; i386-vsta | vsta) basic_machine=i386-unknown os=-vsta ;; iris | iris4d) basic_machine=mips-sgi case $os in -irix*) ;; *) os=-irix4 ;; esac ;; isi68 | isi) basic_machine=m68k-isi os=-sysv ;; m88k-omron*) basic_machine=m88k-omron ;; magnum | m3230) basic_machine=mips-mips os=-sysv ;; merlin) basic_machine=ns32k-utek os=-sysv ;; mingw32) basic_machine=i386-pc os=-mingw32 ;; miniframe) basic_machine=m68000-convergent ;; *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) basic_machine=m68k-atari os=-mint ;; mips3*-*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` ;; mips3*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown ;; monitor) basic_machine=m68k-rom68k os=-coff ;; morphos) basic_machine=powerpc-unknown os=-morphos ;; msdos) basic_machine=i386-pc os=-msdos ;; ms1-*) basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` ;; mvs) basic_machine=i370-ibm os=-mvs ;; ncr3000) basic_machine=i486-ncr os=-sysv4 ;; netbsd386) basic_machine=i386-unknown os=-netbsd ;; netwinder) basic_machine=armv4l-rebel os=-linux ;; news | news700 | news800 | news900) basic_machine=m68k-sony os=-newsos ;; news1000) basic_machine=m68030-sony os=-newsos ;; news-3600 | risc-news) basic_machine=mips-sony os=-newsos ;; necv70) basic_machine=v70-nec os=-sysv ;; next | m*-next ) basic_machine=m68k-next case $os in -nextstep* ) ;; -ns2*) os=-nextstep2 ;; *) os=-nextstep3 ;; esac ;; nh3000) basic_machine=m68k-harris os=-cxux ;; nh[45]000) basic_machine=m88k-harris os=-cxux ;; nindy960) basic_machine=i960-intel os=-nindy ;; mon960) basic_machine=i960-intel os=-mon960 ;; nonstopux) basic_machine=mips-compaq os=-nonstopux ;; np1) basic_machine=np1-gould ;; nsr-tandem) basic_machine=nsr-tandem ;; op50n-* | op60c-*) basic_machine=hppa1.1-oki os=-proelf ;; openrisc | openrisc-*) basic_machine=or32-unknown ;; os400) basic_machine=powerpc-ibm os=-os400 ;; OSE68000 | ose68000) basic_machine=m68000-ericsson os=-ose ;; os68k) basic_machine=m68k-none os=-os68k ;; pa-hitachi) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; paragon) basic_machine=i860-intel os=-osf ;; pbd) basic_machine=sparc-tti ;; pbb) basic_machine=m68k-tti ;; pc532 | pc532-*) basic_machine=ns32k-pc532 ;; pc98) basic_machine=i386-pc ;; pc98-*) basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium | p5 | k5 | k6 | nexgen | viac3) basic_machine=i586-pc ;; pentiumpro | p6 | 6x86 | athlon | athlon_*) basic_machine=i686-pc ;; pentiumii | pentium2 | pentiumiii | pentium3) basic_machine=i686-pc ;; pentium4) basic_machine=i786-pc ;; pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumpro-* | p6-* | 6x86-* | athlon-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium4-*) basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pn) basic_machine=pn-gould ;; power) basic_machine=power-ibm ;; ppc) basic_machine=powerpc-unknown ;; ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppcle | powerpclittle | ppc-le | powerpc-little) basic_machine=powerpcle-unknown ;; ppcle-* | powerpclittle-*) basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64) basic_machine=powerpc64-unknown ;; ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64le | powerpc64little | ppc64-le | powerpc64-little) basic_machine=powerpc64le-unknown ;; ppc64le-* | powerpc64little-*) basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ps2) basic_machine=i386-ibm ;; pw32) basic_machine=i586-unknown os=-pw32 ;; rdos) basic_machine=i386-pc os=-rdos ;; rom68k) basic_machine=m68k-rom68k os=-coff ;; rm[46]00) basic_machine=mips-siemens ;; rtpc | rtpc-*) basic_machine=romp-ibm ;; s390 | s390-*) basic_machine=s390-ibm ;; s390x | s390x-*) basic_machine=s390x-ibm ;; sa29200) basic_machine=a29k-amd os=-udi ;; sb1) basic_machine=mipsisa64sb1-unknown ;; sb1el) basic_machine=mipsisa64sb1el-unknown ;; sei) basic_machine=mips-sei os=-seiux ;; sequent) basic_machine=i386-sequent ;; sh) basic_machine=sh-hitachi os=-hms ;; sh64) basic_machine=sh64-unknown ;; sparclite-wrs | simso-wrs) basic_machine=sparclite-wrs os=-vxworks ;; sps7) basic_machine=m68k-bull os=-sysv2 ;; spur) basic_machine=spur-unknown ;; st2000) basic_machine=m68k-tandem ;; stratus) basic_machine=i860-stratus os=-sysv4 ;; sun2) basic_machine=m68000-sun ;; sun2os3) basic_machine=m68000-sun os=-sunos3 ;; sun2os4) basic_machine=m68000-sun os=-sunos4 ;; sun3os3) basic_machine=m68k-sun os=-sunos3 ;; sun3os4) basic_machine=m68k-sun os=-sunos4 ;; sun4os3) basic_machine=sparc-sun os=-sunos3 ;; sun4os4) basic_machine=sparc-sun os=-sunos4 ;; sun4sol2) basic_machine=sparc-sun os=-solaris2 ;; sun3 | sun3-*) basic_machine=m68k-sun ;; sun4) basic_machine=sparc-sun ;; sun386 | sun386i | roadrunner) basic_machine=i386-sun ;; sv1) basic_machine=sv1-cray os=-unicos ;; symmetry) basic_machine=i386-sequent os=-dynix ;; t3e) basic_machine=alphaev5-cray os=-unicos ;; t90) basic_machine=t90-cray os=-unicos ;; tic54x | c54x*) basic_machine=tic54x-unknown os=-coff ;; tic55x | c55x*) basic_machine=tic55x-unknown os=-coff ;; tic6x | c6x*) basic_machine=tic6x-unknown os=-coff ;; tx39) basic_machine=mipstx39-unknown ;; tx39el) basic_machine=mipstx39el-unknown ;; toad1) basic_machine=pdp10-xkl os=-tops20 ;; tower | tower-32) basic_machine=m68k-ncr ;; tpf) basic_machine=s390x-ibm os=-tpf ;; udi29k) basic_machine=a29k-amd os=-udi ;; ultra3) basic_machine=a29k-nyu os=-sym1 ;; v810 | necv810) basic_machine=v810-nec os=-none ;; vaxv) basic_machine=vax-dec os=-sysv ;; vms) basic_machine=vax-dec os=-vms ;; vpp*|vx|vx-*) basic_machine=f301-fujitsu ;; vxworks960) basic_machine=i960-wrs os=-vxworks ;; vxworks68) basic_machine=m68k-wrs os=-vxworks ;; vxworks29k) basic_machine=a29k-wrs os=-vxworks ;; w65*) basic_machine=w65-wdc os=-none ;; w89k-*) basic_machine=hppa1.1-winbond os=-proelf ;; xbox) basic_machine=i686-pc os=-mingw32 ;; xps | xps100) basic_machine=xps100-honeywell ;; ymp) basic_machine=ymp-cray os=-unicos ;; z8k-*-coff) basic_machine=z8k-unknown os=-sim ;; none) basic_machine=none-none os=-none ;; # Here we handle the default manufacturer of certain CPU types. It is in # some cases the only manufacturer, in others, it is the most popular. w89k) basic_machine=hppa1.1-winbond ;; op50n) basic_machine=hppa1.1-oki ;; op60c) basic_machine=hppa1.1-oki ;; romp) basic_machine=romp-ibm ;; mmix) basic_machine=mmix-knuth ;; rs6000) basic_machine=rs6000-ibm ;; vax) basic_machine=vax-dec ;; pdp10) # there are many clones, so DEC is not a safe bet basic_machine=pdp10-unknown ;; pdp11) basic_machine=pdp11-dec ;; we32k) basic_machine=we32k-att ;; sh[1234] | sh[24]a | sh[34]eb | sh[1234]le | sh[23]ele) basic_machine=sh-unknown ;; sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) basic_machine=sparc-sun ;; cydra) basic_machine=cydra-cydrome ;; orion) basic_machine=orion-highlevel ;; orion105) basic_machine=clipper-highlevel ;; mac | mpw | mac-mpw) basic_machine=m68k-apple ;; pmac | pmac-mpw) basic_machine=powerpc-apple ;; *-unknown) # Make sure to match an already-canonicalized machine name. ;; *) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; esac # Here we canonicalize certain aliases for manufacturers. case $basic_machine in *-digital*) basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` ;; *-commodore*) basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` ;; *) ;; esac # Decode manufacturer-specific aliases for certain operating systems. if [ x"$os" != x"" ] then case $os in # First match some system type aliases # that might get confused with valid system types. # -solaris* is a basic system type, with this one exception. -solaris1 | -solaris1.*) os=`echo $os | sed -e 's|solaris1|sunos4|'` ;; -solaris) os=-solaris2 ;; -svr4*) os=-sysv4 ;; -unixware*) os=-sysv4.2uw ;; -gnu/linux*) os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` ;; # First accept the basic system types. # The portable systems comes first. # Each alternative MUST END IN A *, to match a version number. # -sysv* is not here because it comes later, after sysvr4. -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ | -aos* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ | -openbsd* | -solidbsd* \ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ | -chorusos* | -chorusrdb* \ | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \ | -uxpv* | -beos* | -mpeix* | -udk* \ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ | -skyos* | -haiku* | -rdos*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) case $basic_machine in x86-* | i*86-*) ;; *) os=-nto$os ;; esac ;; -nto-qnx*) ;; -nto*) os=`echo $os | sed -e 's|nto|nto-qnx|'` ;; -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) ;; -mac*) os=`echo $os | sed -e 's|mac|macos|'` ;; -linux-dietlibc) os=-linux-dietlibc ;; -linux*) os=`echo $os | sed -e 's|linux|linux-gnu|'` ;; -sunos5*) os=`echo $os | sed -e 's|sunos5|solaris2|'` ;; -sunos6*) os=`echo $os | sed -e 's|sunos6|solaris3|'` ;; -opened*) os=-openedition ;; -os400*) os=-os400 ;; -wince*) os=-wince ;; -osfrose*) os=-osfrose ;; -osf*) os=-osf ;; -utek*) os=-bsd ;; -dynix*) os=-bsd ;; -acis*) os=-aos ;; -atheos*) os=-atheos ;; -syllable*) os=-syllable ;; -386bsd) os=-bsd ;; -ctix* | -uts*) os=-sysv ;; -nova*) os=-rtmk-nova ;; -ns2 ) os=-nextstep2 ;; -nsk*) os=-nsk ;; # Preserve the version number of sinix5. -sinix5.*) os=`echo $os | sed -e 's|sinix|sysv|'` ;; -sinix*) os=-sysv4 ;; -tpf*) os=-tpf ;; -triton*) os=-sysv3 ;; -oss*) os=-sysv3 ;; -svr4) os=-sysv4 ;; -svr3) os=-sysv3 ;; -sysvr4) os=-sysv4 ;; # This must come after -sysvr4. -sysv*) ;; -ose*) os=-ose ;; -es1800*) os=-ose ;; -xenix) os=-xenix ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) os=-mint ;; -aros*) os=-aros ;; -kaos*) os=-kaos ;; -zvmoe) os=-zvmoe ;; -none) ;; *) # Get rid of the `-' at the beginning of $os. os=`echo $os | sed 's/[^-]*-//'` echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 exit 1 ;; esac else # Here we handle the default operating systems that come with various machines. # The value should be what the vendor currently ships out the door with their # machine or put another way, the most popular os provided with the machine. # Note that if you're going to try to match "-MANUFACTURER" here (say, # "-sun"), then you have to tell the case statement up towards the top # that MANUFACTURER isn't an operating system. Otherwise, code above # will signal an error saying that MANUFACTURER isn't an operating # system, and we'll never get to this point. case $basic_machine in spu-*) os=-elf ;; *-acorn) os=-riscix1.2 ;; arm*-rebel) os=-linux ;; arm*-semi) os=-aout ;; c4x-* | tic4x-*) os=-coff ;; # This must come before the *-dec entry. pdp10-*) os=-tops20 ;; pdp11-*) os=-none ;; *-dec | vax-*) os=-ultrix4.2 ;; m68*-apollo) os=-domain ;; i386-sun) os=-sunos4.0.2 ;; m68000-sun) os=-sunos3 # This also exists in the configure program, but was not the # default. # os=-sunos4 ;; m68*-cisco) os=-aout ;; mips*-cisco) os=-elf ;; mips*-*) os=-elf ;; or32-*) os=-coff ;; *-tti) # must be before sparc entry or we get the wrong os. os=-sysv3 ;; sparc-* | *-sun) os=-sunos4.1.1 ;; *-be) os=-beos ;; *-haiku) os=-haiku ;; *-ibm) os=-aix ;; *-knuth) os=-mmixware ;; *-wec) os=-proelf ;; *-winbond) os=-proelf ;; *-oki) os=-proelf ;; *-hp) os=-hpux ;; *-hitachi) os=-hiux ;; i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) os=-sysv ;; *-cbm) os=-amigaos ;; *-dg) os=-dgux ;; *-dolphin) os=-sysv3 ;; m68k-ccur) os=-rtu ;; m88k-omron*) os=-luna ;; *-next ) os=-nextstep ;; *-sequent) os=-ptx ;; *-crds) os=-unos ;; *-ns) os=-genix ;; i370-*) os=-mvs ;; *-next) os=-nextstep3 ;; *-gould) os=-sysv ;; *-highlevel) os=-bsd ;; *-encore) os=-bsd ;; *-sgi) os=-irix ;; *-siemens) os=-sysv4 ;; *-masscomp) os=-rtu ;; f30[01]-fujitsu | f700-fujitsu) os=-uxpv ;; *-rom68k) os=-coff ;; *-*bug) os=-coff ;; *-apple) os=-macos ;; *-atari*) os=-mint ;; *) os=-none ;; esac fi # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. vendor=unknown case $basic_machine in *-unknown) case $os in -riscix*) vendor=acorn ;; -sunos*) vendor=sun ;; -aix*) vendor=ibm ;; -beos*) vendor=be ;; -hpux*) vendor=hp ;; -mpeix*) vendor=hp ;; -hiux*) vendor=hitachi ;; -unos*) vendor=crds ;; -dgux*) vendor=dg ;; -luna*) vendor=omron ;; -genix*) vendor=ns ;; -mvs* | -opened*) vendor=ibm ;; -os400*) vendor=ibm ;; -ptx*) vendor=sequent ;; -tpf*) vendor=ibm ;; -vxsim* | -vxworks* | -windiss*) vendor=wrs ;; -aux*) vendor=apple ;; -hms*) vendor=hitachi ;; -mpw* | -macos*) vendor=apple ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) vendor=atari ;; -vos*) vendor=stratus ;; esac basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` ;; esac echo $basic_machine$os exit # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: tla-1.3.5+dfsg/src/build-tools/gnu/ChangeLog0000644000175000017500000005561210457621764017351 0ustar useruser2002-01-10 Ben Elliston * config.guess: Update Per Bothner's mail address. 2002-01-02 Douglas B. Rupp * config.sub (alpha64*): New basic_machine. 2002-01-02 Ben Elliston From Sigbjorn Skjaeret . * config.guess: Add detection for MorphOS. * config.sub: Handle morphos*. 2002-01-02 H.J. Lu * config.guess (mips:Linux:*:*): Undef CPU, mips and mipsel first. 2001-12-13 Douglas B. Rupp * config.guess: Recognize x86 Interix version 3. 2001-12-12 Ben Elliston * config.guess (i*86:Linux:*:*): Minor simplification: have the preprocessor emit shell assignments and just eval the output. 2001-12-12 H.J. Lu * config.guess (mips:Linux:*:*): Re-work. 2001-12-12 Ben Elliston * config.guess (i*86:Linux:*:*): Speed up detection of x86 Linux systems by using just the C preprocessor rather than assembling and linking a final executable. 2001-12-12 Jason Thorpe * config.guess: Simplify assignment of machine for NetBSD targets, and make it match the convention that NetBSD uses. List all NetBSD architectures that require "elf" at the end of the OS name. 2001-12-10 Lars Brinkhoff * config.sub: Recognize a few PDP-10 aliases. 2001-12-03 Ben Elliston * config.sub: Recognise the Nucleus family of operating systems. From . 2001-12-03 Bob Wilson * config.sub: Add support for Xtensa targets. 2001-11-30 Ben Elliston * config.sub: Recognise NEC v850e. From Miles Bader . 2001-11-26 Ben Elliston * config.guess (nsr-tandem-nsk): Detect all known NSR processor types. Contributed by Kjetil Barvik . 2001-11-16 Ben Elliston * config.sub: Accept "-atheos*" as a valid OS. From Taco Witte . 2001-11-08 Ben Elliston * config.guess: Handle 3487/3488 machines for NCR SysV UNIX. Contributed by Melvin M. Bagaforo . 2001-11-07 Adrian von Bidder * config.sub: Accept "-uclinux*" as a valid OS. 2001-11-07 D.J. Barrow * config.sub: Added S/390 31 and 64 bit target. 2001-11-06 John Marshall * config.sub: Accept "-palmos*" as a valid OS. 2001-11-07 Geoffrey Keating * config.sub: Change 'stormy16' to 'xstormy16' in the two places it appears. 2001-10-05 Ben Elliston * config.guess: Add "SKA40" as a machine type for NCR SysV UNIX. From Rudi Heitbaum . 2001-10-05 Rodney Brown * config.guess (9000/[34678]??:HP-UX:*:*): Unconditionally try /usr/bin/getconf which is available on HP-UX 10.20. Reindent. 2001-10-04 Ben Elliston * config.sub: Handle viac3 as an i586-class CPU. * config.sub: Handle simso-wrs (Wind River's VxWorks Solaris simulator target). From dpovey@dstc.qut.edu.au. 2001-09-14 H.J. Lu * config.sub: Support avr-vendor-*. 2001-09-13 Ben Elliston * config.guess (*-*-openbsd): Reorganise and clean up. Contributed by brad@openbsd.org. 2001-09-12 Ben Elliston * config.guess (sparc*-*-netbsd): Properly match 32-bit NetBSD/sparc64 as sparc-unknown-netbsd. From Matthew Green . 2001-09-07 Ben Elliston * config.sub: Add mipseb-* alias (whoops). 2001-09-04 Ben Elliston * config.sub: Add mipseb alias. 2001-09-04 Eric Christopher Jason Eckhardt * config.sub: Add support for mipsisa32. 2001-09-04 Ben Elliston * config.guess: Move eval $set_cc_for_build in most cases, to prevent this script fragment from cloberring a previously constructed C program in $dummy.c. 2001-08-23 Ben Elliston * config.guess: Detect AtheOS on x86 systems. Based on info provided by Taco Witte . 2001-08-23 Geoffrey Keating * config.sub: Add stormy16-elf. 2001-08-21 matthew green * config.guess (sparc*:NetBSD:*): Use $MACHINE_ARCH, not $MACHINE. 2001-08-13 Ben Elliston * config.sub: Handle complete system name for elxsi. From Zack Weinberg . 2001-08-09 Ben Elliston * config.guess: Detect Alpha ev68 on OSF/1 and Linux. From Ken Whaley . 2001-08-04 Darrell Hamilton * config.guess: Unisys places the host id in ${UNAME_SYSTEM} which is too unique to flag this system. Detect it with * instead. 2001-08-02 Alan Modra * config.sub: Sort basic cpu patterns. Combine hppa patterns. 2001-08-01 Alan Modra * config.sub: Recognise powerpc64, powerpc64le, ppc64 variations. 2001-07-31 Ben Elliston * config.guess: Detect Stratus VOS operating system. * config.sub: Handle aliases for such. 2001-07-30 Ben Elliston * config.guess: Detect STOP operating system on x86 CPUs. From Hans Edwards . 2001-07-27 Niibe Yutaka * config.sub: Recognize sh3eb and sh4eb (big endian) aliases. 2001-07-19 Ben Elliston * config.guess: Detect Linux on the PPC64 architecture. 2001-07-12 Keith Thompson * config.guess: Strip trailing sub-version number from $UNAME_RELEASE on Cray YMP or Cray [A-Z]90 models. 2001-07-09 Mark Klein * config.guess: Update MPE/iX to handle A and N class HPe3000. 2001-07-02 Graham Stott * config.sub (basic_machine): Fix typo for mips64vr5000el. 2001-06-29 Ben Elliston * config.guess: Remove stale libc1 tests on PowerPC Linux. 2001-06-29 John Wolfe * config.guess: Correct UnixWare 7 and Open UNIX 8.0 change; test for i586 must be a string that ends with "Pentium". 2001-06-28 Ben Elliston * config.guess: On Alpha Linux, use /proc/cpuinfo to determine the CPU model, rather than assembling a small test program. 2001-06-27 Ben Elliston * config.guess: Do not unconditionally run the script fragment to set $CC_FOR_BUILD. Put the script in the shell variable $set_cc_for_build and only evaluate it before $CC_FOR_BUILD is referenced. (Poor man's function inlining!) In future, the goal will be to reduce the dependence on a C compiler to detect system types by utilising other means. 2001-06-26 Ben Elliston * config.guess: On MIPS Linux, use /proc/cpuinfo to determine the endian mode of the CPU, rather than compiling and running a small C program. 2001-06-12 John Wolfe * config.guess: Standardize triplet for UnixWare 7 and Open UNIX 8.0, improve processor detection and maintain "sysv5" prefix on third segment. 2001-06-08 Christopher Faylor * config.sub: Add support for Sun Chorus. 2001-06-05 Tomislav Greguric * config.guess: Add 2001 to copyright notice issued for -v. 2001-06-01 Ben Elliston * config.guess (i*86:Linux:*:*): Examine the list of supported targets, not the list of supported emulations when capturing the output of "ld --help". This causes problems on systems where GNU ld is built with support for all targets. Adjust cases in the switch accordingly. * config.guess: Other small Linux cleanups. Remove unnecessary logic for setting $VENDOR, since UNAME_MACHINE will always be i*86 in this case. 2001-05-30 Mo DeJong * config.sub: Handle windows32 and runtimes. 2001-05-24 Ben Elliston * config.sub: Remove duplicate z8k entry. 2001-05-11 Yaegashi Takeshi * config.sub: Handle sh[34]-* and sh[34]eb-*. 2001-05-09 Ben Elliston * config.sub: Handle z8k-coff. From Christian Groessler . 2001-04-20 Ben Elliston * config.sub: Handle sparcv9b. From Dave Miller . * config.guess: Detect PowerMAX OS on PowerPC. 2001-04-20 Tyson Dowd Fergus Henderson * config.guess: Replace i?86 with i*86 to match newer Pentiums. * config.sub: Likewise. 2001-03-30 Peter Buckingham * config.guess: Update LynxOS version numbers. 2001-03-30 Alexandre Oliva * config.sub: Make sure to match an already-canonicalized machine name (eg. mn10300-unknown-elf). 2001-03-19 Philip Blundell * config.sub: Allow tic80 as machine type. Allow company name for h8500 and pj targets; add `unknown' component when canonicalising h8500-*, pj-* and pjl-*. 2001-03-16 Ben Elliston * config.guess: Detect Linux on SPARC64. 2001-03-14 Ben Elliston * config.guess: Detect ELF-based m68k Linux systems. Reported by Michael Fedrowitz . 2001-03-09 H.J. Lu * config.sub: Recognize s390/s390x as valid $basic_machine. 2001-03-05 Pavel Roskin * config.guess: Never use `rm' without `-f' since it may be interactive. 2001-02-24 Ben Elliston * config.guess: Match Linux x86 systems explicitly. Allow unknown architectures to fall through to the default case. 2001-02-23 Ben Elliston * config.guess: More Linux cleanup. Match more in the top-level case statement and less by groking the output of ld. 2001-02-16 Ben Elliston * config.sub: Recognise [cjt]90-*. From Kevin Ryde. 2001-02-13 David Edelsohn * config.guess (ia64:AIX): New case. (*:AIX): Expand AIX V4 case to include V5. Remove unnecessary `H' option from lsattr. Check for string "POWER" with prepended space to distinguish from PowerPC_POWER3. Use ${UNAME_VERSION} instead of assuming "4" to match the expanded case. 2001-02-13 Kevin Ryde * config.sub: Recognise t90, c90, j90 without -cray. Preserve t90 and j90--don't transform to c90. 2001-02-13 Ben Elliston * config.guess: More Linux cleanup. 2001-02-13 Martin Schwidefsky * config.guess: Add Linux target for S/390x. * config.sub: Likewise. 2001-02-13 Ben Elliston * config.guess: Rework detection of many Linux platforms, where detection is straightforward. 2001-01-31 Ben Elliston * config.guess: Handle hppa64-linux systems. From Alan Modra . 2001-01-29 Michael Sokolov * config.guess: Specifically identify 4.3BSD and 4.3BSD-Reno in the original VAX UNIX detection logic based on the BSD define in . 2001-01-17 Pavel Roskin * config.sub: Removed cases that cannot match. Vendor changed from "unknown" to "pc" for "mingw", "msdos" and "go32". 2001-01-17 Ben Elliston * config.guess: Detect HI-UX on Hitachi SR8000 machines. It has been difficult to discover what type of CPU is in this machine, so we'll punt on hppa1.1 for now. 2001-01-14 Pavel Roskin * config.guess: Don't use $version in the error message. Use $timestamp instead. Minor changes in the error text. 2001-01-12 Ben Elliston * config.guess: Delete $dummy.rel after compiling test programs on PDP-10 systems whose compilers produce this output file. From Lars Brinkhoff . * config.sub: Handle EMX on OS/2. From Pavel Roskin. 2001-01-12 Ben Elliston * config.guess: Detect common kernels running on various PDP-10 architectures. Contributed by Lars Brinkhoff . * config.sub: Handle PDP-10. 2001-01-10 Ben Elliston * config.guess: Detect LynxOS 3.x on PowerPC architectures. 2001-01-07 Ben Elliston * config.sub: Recognise openrisc-*-*. 2000-12-21 Ben Elliston * config.guess: Detect HP-UX on IA-64 hosts. From Jonathan Thackray . 2000-12-20 Pavel Roskin * config.sub: Handle mint with version number as recognized OS. Contributed by Tomas Berndtsson . 2000-12-20 Pavel Roskin * config.guess: Detect Fujitsu f700 machines. * config.sub: Handle f700 and f700-fujitsu. 2000-12-15 Ben Elliston * config.guess: Detect AIX version 5. Contributed by Dan McNichol . * config.sub: Accept f301 for Fujitsu machines. Reported by Pavel Roskin . 2000-12-07 Ben Elliston * config.sub: Add more detail to version information. * config.guess: Likewise. 2000-12-06 Ben Elliston * config.sub: Add --version option. * config.guess: Likewise. 2000-12-02 Ben Elliston * config.guess: Only append "elf" to "netbsd" for platforms that have switched to the ELF object file format in recent history. From Matthew Green . 2000-11-24 Nick Clifton * config.sub: Add xscale as a recognised CPU name. 2000-11-23 Ben Elliston Patches from Akim Demaille . * config.sub (version): Rename from this .. (timestamp): .. to this. (usage): Replace --version with --time-stamp. Add additional help and copyleft notice. (time-stamp-start): Replace with "timestamp=". * config.guess (version): Rename from this .. (timestamp): .. to this. (usage): Replace --version with --time-stamp. Add additional help and copyleft notice. (CC_FOR_BUILD): Rework this logic. (time-stamp-start): Replace with "timestamp=". 2000-11-21 Ben Elliston * config.guess: Detect EMX on OS/2. Reported by Ilya Zakharevich . 2000-11-16 Ben Elliston * config.guess: Use getconf(1) on HP-UX 11.x systems (when available) to eliminate the need for compiling a small test program. From Neil Schellenberger . 2000-11-15 Ben Elliston * config.sub: Expand `power' to `power-ibm-aix' for consistency. From Kevin Ryde. * config.guess: Differentiate Cray T3D and T3E. From Kevin Ryde . 2000-11-10 Ben Elliston * config.sub: Map pentiumpro and pentiumii aliases onto i686-pc. From Kevin Ryde . * config.guess: Search for a working C compiler if CC_FOR_BUILD is not specified. From Kevin Ryde. * config.guess: Set CPU architecture to "hppa" by default, in case tests fail to produce a result. From Kevin Ryde. 2000-11-08 Ben Elliston * config.guess: Detect sparc-unknown-linux-gnu. Reported by Peter Storkey . 2000-11-02 Per Lundberg * config.sub: Add support for the *-storm-chaos OS. 2000-10-25 Ed Satterthwaite * config.sub: NexGen, not nexen, is the x86 CPU clone manufacturer. 2000-10-23 Ben Elliston * config.guess: Detect NonStop-UX on Compaq MIPS machines. * config.sub: Handle aliases for mips-compaq-nonstopux. From Tom Bates . 2000-10-12 Ben Elliston * config.guess: Detect GNU/Linux on HP PA-RISC systems. From David Huggins-Daines . 2000-10-09 Ben Elliston * config.sub: Typo fix for sh{3,4} case. 2000-10-08 Ben Elliston * config.guess: Handle 8-way NCR 4300s -- uname(1) returns 3446A. From Ken Cormack . 2000-10-03 Ben Elliston * config.guess: Do not hold ld's output in a shell variable; feed the output directly into the command pipline to avoid a limitation in variable lengths in ash(1). From Pavel Roskin . 2000-09-11 Ben Elliston * config.sub: Handle nsk*. 2000-09-11 Philip Blundell * config.sub: Fix mistake in change of 2000-08-06. 2000-09-05 Andreas Jaeger * config.sub (maybe_os): Recognise AMD x86-64 as x86_64. * config.guess: Detect x86_64-unknown-linux-gnu. 2000-09-05 Ben Elliston * config.guess: Handle Tandem NSR-K machines. Reported by Andres Junge . 2000-09-05 Paul Sokolovsky * config.guess: Detect the PW32 POSIX-on-Win32 environment. * config.sub: Handle pw32 aliases. 2000-08-31 Ben Elliston * config.guess: Correctly detect Sony NEWS-OS 6.x. From Kimio Ishii . 2000-08-06 Philip Blundell * config.sub: Accept `-conix*' as a valid OS. Accept `armv*' as a valid CPU without a company name. 2000-07-31 Mark Kettenis * config.guess: Restore detection of libc version for x86 Linux/GNU ELF systems, but fall back on tentative name based on ld emulation. Use i?86-pc-linux-gnu as tentative name since that's the canonical name. 2000-07-27 Ben Elliston * config.sub: Use "unknown" for the manufacturer field of Amiga systems, not "cbm". Contributed by Ruediger Kuhlmann . * config.sub: Likewise. 2000-07-24 Ben Elliston * config.guess: Detect Plan 9. 2000-07-06 Andrew Cagney * config.sub: Recognise d30v as a valid basic_machine. 2000-06-28 Ben Elliston * config.sub: Recognise Motorola 68HC11/12 targets. From Stephane Carrez . 2000-06-20 Ben Elliston * config.sub: Recognise tic54x (Texas Instruments TMS320C54x) and c54x (IBM C54XDSP). From Tim Wall . 2000-06-13 Ben Elliston * config.guess: Detect Minix on x86 machines. * config.sub: Recognise i286. From . * config.sub: Recognise sh3 and sh4 aliases. From Kazumoto Kojima . * config.sub: Per Bothner is not the author. 2000-06-10 Hans-Peter Nilsson * config.sub (os): Recognize axis as manufacturer. (basic_machine): Recognize cris and etrax* as cris-axis. 2000-05-31 Ben Elliston * config.sub: Accept athlon as an i686 variant. From Philipp Thomas . 2000-05-30 Ben Elliston * config.guess: Re-word some output. * config.sub: Fix a syntax error introduced by yesterday's changes. Correct a spelling mistake. From Steven G. Johnson . 2000-05-02 Akim Demaille * config.guess: Add --help and --version options. Add Emacs hooks. * config.sub: Likewise. 2000-05-27 Ben Elliston * config.guess: Handle GNU/Linux on Hitachi SuperH. From Niibe Yutaka . 2000-05-19 Ben Elliston * config.sub: Recognise hppa64 as a valid cpu type. From Jeff Law. 2000-05-10 Ben Elliston * config.sub: Recognise bs2000-siemens as a basic_machine type. From Jean-Frederic Clere . 2000-05-07 Ben Elliston * config.guess: Mac OS X will never return "Mac OS" as a uname value, so remove these cases and punt to the "Darwin" case. From Wilfredo Sanchez . 2000-04-30 Ben Elliston * config.guess: Handle Fujitsu UXP/DS. From Fu-Chuan Tsai . 2000-04-26 Ben Elliston * config.guess: Handle an ld emulation of elf_i?86. From Bruce Korb . 2000-04-22 Ben Elliston * config.guess: Do not differentiate FreeBSD systems that use the ELF object file format. From David O'Brien . 2000-04-22 Ben Elliston * config.guess: Detect Siemens BS2000 machines. From Jean-Frederic Clere . 2000-04-22 Ben Elliston * config.guess: Fix a syntax error in the DG/UX test. 2000-04-06 Ben Elliston * config.guess: Define _HPUX_SOURCE for the HP-UX test program. From Bruno Haible . 2000-04-06 Ben Elliston * config.guess: Detect Apple's Darwin operating system. * config.sub: Handle an appropriate alias. From Assar Westerlund. 2000-03-27 Ben Elliston * config.guess: Detect Ascend Embedded/OS, which is really BSDI. From Assar Westerlund . 2000-03-20 Ben Elliston * config.guess: Detect the NonStop Kernel on Tandem machines. Suggested by Kelly F. Hickel . * config.sub: Handle nsr-tandem and -nsk aliases. 2000-02-29 Peter van der Veen * config.guess: Add support for QNX Neutrino. * config.sub: Improve support for QNX Neutrino. 2000-02-29 Ossama Othman * config.sub: Add support for QNX Neutrino. 2000-02-24 Nick Clifton * config.sub: Support an OS of "wince". 2000-02-15 Andrew Cagney * config.guess: Rewrite NetBSD code. Return *-*-netbsdelf* for ELF systems and *-*-netbsd* for all others. Provide a guideline for how to match a NetBSD tuple. 2000-02-15 Richard Henderson * config.guess (alpha-osf, alpha-linux): Detect ev67. * config.sub: Accept alphaev6[78], alphaev8. 2000-02-15 Philip Blundell * config.guess: Distinguish arm-*-linux-gnuoldld from arm*-linux-gnu. 2000-02-15 Ben Elliston * config.sub: Handle avr. From Denis Chertykov . * config.guess: Detect GNU/Linux on IBM S/390 machines. * config.sub: Handle s390-*. From Adam J. Thornton . * config.guess: Detect MacOS X on PowerPC and other machines. From Stephen G. Johnson . 2000-02-08 John W. Eaton * config.sub: Recognize sv1-cray as a basic_machine type. 2000-02-07 Ben Elliston * config.guess: Replace sub-minor system version number with an `X' on certain Cray platforms. From Keith Thompson . * config.sub: Add support for mmix and mmixware. From Hans-Peter Nilsson . 2000-02-06 Ben Elliston * config.guess: Include when compiling test programs with a C++ compiler. Function prototypes are mandatory in C++. From Ossama Othman . * config.guess: Fix a regression in PowerPC Linux detection. From Franz Sirl. 2000-02-03 Ben Elliston * config.guess: Handle versions of DJGPP's uname(1) command which return the exact machine type and not just `pc'. From Laurynas Biveinis . * config.guess: Import from autoconf source tree. * config.sub: Likewise. # arch-tag: Tom Lord Fri May 10 02:15:34 2002 (gnu/ChangeLog) # tla-1.3.5+dfsg/src/build-tools/PLUGIN/0000755000175000017500000000000010457621764015773 5ustar userusertla-1.3.5+dfsg/src/build-tools/PLUGIN/REQ0000644000175000017500000000003010457621764016336 0ustar useruserbuild-tools build-tools tla-1.3.5+dfsg/src/build-tools/PLUGIN/DIRS0000644000175000017500000000000010457621764016445 0ustar userusertla-1.3.5+dfsg/src/build-tools/platforms/0000755000175000017500000000000010457621764017004 5ustar userusertla-1.3.5+dfsg/src/build-tools/platforms/pickconfig0000644000175000017500000000112310457621764021040 0ustar useruser#!/bin/sh # # pickconfig - pick a system specific configuration file # ################################################################ # Copyright (C) 2002 Tom Lord # # See the file "COPYING" for further information about # the copyright and warranty status of this work. # if test "$#" != 1 ; then printf "usage: pickconfig canonical-system-name\n" 1>&2 printf "\n" 1>&2 exit 2 fi system="$1" case "$system" in i386-*-freebsd*) echo freebsd ;; i686-*-linux-gnu) echo gnu-linux ;; *) ;; esac # arch-tag: Tom Lord Tue Jul 1 16:25:24 2003 (platforms/pickconfig) # tla-1.3.5+dfsg/src/build-tools/platforms/vars0000644000175000017500000000306610457621764017707 0ustar useruser ################################################################ # unexec support # ################################################################ # binary unexec_should_work # # Should programs that only use `unexec' as an option give # it a go by default? # binary unexec_should_work no # string unexec-implementation # # The name of a file in `src/unexec/libunexec/unexec-impls' which # is the unexec implementation to use for this system. # string unexec_implementation "unexec-unsupported.c" # binary unexec_needs_precrt0 # # If true, the very first file in a link (just) defines `data_start' # binary unexec_needs_precrt0 no # string unexec-start-files # # A list of .o files which should be listed first among the objects # when linking an executable for a program that might call `unexec'. # Typically, these are alternatives to the default `crt0.o'. # string unexec_start_files "%none%" # string unexec-ld-switches # # A list of ld switches for programs which might call `unexec'. # string unexec_ld_switches "%none%" # string unexec-libs # # Extra libraries to link against for programs that might call # `unexec'. # string unexec_libs "%none%" # string unexec-libc-substitute # # What to link against in place of libc for programs that might # call `unexec'. # string unexec_libc_substitute "%none%" # string unexec_linker # # What to use instead of the default to link `unexec'-able # programs. On GCC-based platforms, %none% is a safe binding. # string unexec_linker "%none%" # arch-tag: Tom Lord Fri May 10 02:16:23 2002 (platforms/vars) # tla-1.3.5+dfsg/src/build-tools/platforms/configs/0000755000175000017500000000000010457621764020434 5ustar userusertla-1.3.5+dfsg/src/build-tools/platforms/configs/freebsd0000644000175000017500000000157110457621764021775 0ustar useruser# freebsd - platform config file for "generic" freebsd # ################################################################ # Copyright (C) 2002 Tom Lord # # See the file "COPYING" for further information about # the copyright and warranty status of this work. # ################################################################ # # # # tested use tested platform # --------------------------------------------- # # unexec FreeBSD 3.0-RELEASE (i386) # ################################################################ unexec_should_work=yes unexec_implementation=unexelf.c unexec_needs_precrt0=yes unexec_start_files="/usr/lib/crt1.o /usr/lib/crti.o /usr/lib/crtbegin.o" unexec_ld_switches="%none%" unexec_libs="/usr/lib/libutil.a" unexec_libc_substitute="-lgcc -lc -lgcc /usr/lib/crtend.o /usr/lib/crtn.o" # arch-tag: Tom Lord Tue Jul 1 16:25:15 2003 (configs/freebsd) # tla-1.3.5+dfsg/src/build-tools/platforms/configs/gnu-linux0000644000175000017500000000150510457621764022306 0ustar useruser# gnu-linux: # ################################################################ # Copyright (C) 2002 Tom Lord # # See the file "COPYING" for further information about # the copyright and warranty status of this work. # ################################################################ # # # # tested use tested platform # --------------------------------------------- # # unexec PC GNU/Linux of some flavor or other # ################################################################ unexec_should_work=yes unexec_implementation=unexelf.c unexec_needs_precrt0=yes unexec_start_files="/usr/lib/crt1.o /usr/lib/crti.o" unexec_ld_switches="-Xlinker -z -Xlinker nocombreloc" unexec_libs="%none%" unexec_libc_substitute="-lgcc -lc -lgcc /usr/lib/crtn.o" # arch-tag: Tom Lord Mon May 13 02:03:45 2002 (configs/gnu-linux) # tla-1.3.5+dfsg/src/build-tools/platforms/sysconfig0000644000175000017500000000537410457621764020744 0ustar useruser#!/bin/sh # # sysconfig - Pick a config file, run it, emit config variables # ################################################################ # Copyright (C) 2002 Tom Lord # # See the file "COPYING" for further information about # the copyright and warranty status of this work. # if test "$#" != 1 ; then printf "usage: sysconfig canonical-system-name\n" 1>&2 printf "\n" 1>&2 exit 2 fi system="$1" ################################################################ # Pick a Config File # ################################################################ config_file="`\"$config_shell\" $srcdir/build-tools/platforms/pickconfig \"$system\"`" if test -z "$config_file" ; then exit 0 fi ################################################################ # Establish Default Values # ################################################################ string() { var="$1" default="$2" eval "${var}=\"${default}\"" } binary() { var="$1" default="$2" eval "${var}=\"${default}\"" } . "$srcdir/build-tools/platforms/vars" ################################################################ # Get the System Specific Values # ################################################################ . "$srcdir/build-tools/platforms/configs/$config_file" ################################################################ # Output Lines for the Options File # ################################################################ string() { var="$1" default="$2" value_exp="printf %s \"\$$var\"" value="`eval \"$value_exp\"`" opt_var="`printf %s \"$var\" | sed -e 's/_/-/g'`" if test -z "$value" ; then echo 1>&2 printf "WARNING: string config variable %s not set for %s\n" "$var" "$system" 1>&2 echo 1>&2 fi if test "$value" = "%none%" ; then value= fi printf "string %s=%s\\n" "$opt_var" "$value" } binary() { var="$1" default="$2" value_exp="printf %s \"\$$var\"" value="`eval \"$value_exp\"`" opt_var="`printf %s \"$var\" | sed -e 's/_/-/g'`" if test -z "$value" ; then echo 1>&2 printf "WARNING: binary config variable %s not set for %s\n" "$var" "$system" 1>&2 echo 1>&2 fi case "$value" in # default values # %y% | %yes% | %true% | %1%) value=1 ;; %n% | %no% | %false% | %0%) value=0 ;; # explicit values # y | yes | true | 1) value=1 ;; n | no | false | 0) value=0 ;; *) echo 1>&2 printf "ERROR: binary config variable %s has unrecognized value" "$var" 1>&2 printf " system=%s\n" "$system" 1>&2 printf " value=%s\n" "$value" 1>&2 echo 1>&2 exit 1 ;; esac printf "binary %s=%s\\n" "$opt_var" "$value" } . "$srcdir/build-tools/platforms/vars" # arch-tag: Tom Lord Tue Jul 1 16:25:37 2003 (platforms/sysconfig) # tla-1.3.5+dfsg/src/build-tools/platforms/=README0000644000175000017500000000775210457621764017774 0ustar useruser This directory contains "hardwired" configuration variable settings. This is for variables that aren't worth trying to derive automatically, that are too complicated to ask most users to figure out, but that can be set on the basis of the canonical system name. There should be as few of these kinds of variables as possible, but for some kinds of code, they are necessary. So how does it work? `../scripts/configure-top' has the job of computing all the "configuration variables". Those are the variables that wind up in the `Options' file in your build directory, and that are propogated to the `Makefile's and `config-include/config-options.h'. That script accepts an optional argument: a system name. If provided, it attempts to canonicalize the system name using GNU's `config.subs'. If not provided, it attempts to guess a canonical system name using GNU's `config.guess'. The canonical system name is given to the `sysconfig' script in this directory, which uses that name to pick a system configuration file. The system specific configuration file is run, which sets some shell variables. Finally, `sysconfig' emits a selection of those variables as `Options' settings. So, when porting this software, you have to make sure that a reasonable system-specific configuration file is chosen for your system. If no such file exists, you have to write one. How does that work? * What's Your Canonical System Name? Most users will be able to discover their canonical system name by running `../gnu/config.guess'. For some users, presumably, that won't work. In that case, you need to know a name for your system that `config.subs' will treat reasonably. I don't have much advice, yet, for choosing system names in that case. A good place to start is to look at the `MACHINES' file in a GNU Emacs distribution and use the name recommended there for Emacs builds. * What's Your System File? Canonical system names are very specific but, often, the corresponding configuration file can be used for several different canonical systems. So, the mapping from canonical name to config file name is handled by `pickconfig'. Run: % ./pickconfig CANONICAL-SYSTEM-NAME to see which (if any) config file is automatically selected for your system. If the selected file is wrong for some reason, there are two possibilities: (1) It's wrong on _every_ system that uses that config file: in that case, the config file needs to be changed. (2) It's right for _some_ systems that use that config file, but not others: in that case, you need to (a) create a new config file for your system; (b) modify `pickconfig' to choose correctly between the problematic config file and your new config file. That may sound horribly fragile -- and basically it is. But there is no practical alternative for some kinds of config settings, and a similar arrangement has worked well for GNU Emacs for quite a few years. * Writing a Config File Read the (very simple) script `vars'. It contains a series of comments describing the shell variables you might want to set. Your config file should set all of those variables. If you want to assign a variable the empty string, you should instead assign it the string "%none%" -- that helps to automatically detect variables that haven't been explicitly dealt with by the config file author. In the simplest case, you can write an entirely new config file. However, you also have the option of trying to factor out parts of the config file that are re-usable. For example, you might have a config file specifically for `i386-any-freebsd3.0', but that script might call `helpers/freebsd' to do some of its work. * Testing it Out Run the top-level `configure' script, telling it your system name if necessary. Examine the variable settings it produces. Does it get the system name right? The system config file name? The various variables managed by `sysconfig'? # arch-tag: Tom Lord Fri May 10 02:16:14 2002 (platforms/=README) # tla-1.3.5+dfsg/src/build-tools/platforms/helpers/0000755000175000017500000000000010457621764020446 5ustar userusertla-1.3.5+dfsg/src/build-tools/standards/0000755000175000017500000000000010457621764016760 5ustar userusertla-1.3.5+dfsg/src/build-tools/standards/document-license.doc0000644000175000017500000004366410457621764022722 0ustar useruser/* arch-tag: Tom Lord Tue Dec 4 14:57:08 2001 (document-license.doc) */ /************************************************************************ *(h0 "The GNU Free Documentation License" * :appendix) * * insert*/ GNU Free Documentation License Version 1.1, March 2000 Copyright (C) 2000 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. 0. PREAMBLE The purpose of this License is to make a manual, textbook, or other written document "free" in the sense of freedom: to assure everyone the effective freedom to copy and redistribute it, with or without modifying it, either commercially or noncommercially. Secondarily, this License preserves for the author and publisher a way to get credit for their work, while not being considered responsible for modifications made by others. This License is a kind of "copyleft", which means that derivative works of the document must themselves be free in the same sense. It complements the GNU General Public License, which is a copyleft license designed for free software. We have designed this License in order to use it for manuals for free software, because free software needs free documentation: a free program should come with manuals providing the same freedoms that the software does. But this License is not limited to software manuals; it can be used for any textual work, regardless of subject matter or whether it is published as a printed book. We recommend this License principally for works whose purpose is instruction or reference. 1. APPLICABILITY AND DEFINITIONS This License applies to any manual or other work that contains a notice placed by the copyright holder saying it can be distributed under the terms of this License. The "Document", below, refers to any such manual or work. Any member of the public is a licensee, and is addressed as "you". A "Modified Version" of the Document means any work containing the Document or a portion of it, either copied verbatim, or with modifications and/or translated into another language. A "Secondary Section" is a named appendix or a front-matter section of the Document that deals exclusively with the relationship of the publishers or authors of the Document to the Document's overall subject (or to related matters) and contains nothing that could fall directly within that overall subject. (For example, if the Document is in part a textbook of mathematics, a Secondary Section may not explain any mathematics.) The relationship could be a matter of historical connection with the subject or with related matters, or of legal, commercial, philosophical, ethical or political position regarding them. The "Invariant Sections" are certain Secondary Sections whose titles are designated, as being those of Invariant Sections, in the notice that says that the Document is released under this License. The "Cover Texts" are certain short passages of text that are listed, as Front-Cover Texts or Back-Cover Texts, in the notice that says that the Document is released under this License. A "Transparent" copy of the Document means a machine-readable copy, represented in a format whose specification is available to the general public, whose contents can be viewed and edited directly and straightforwardly with generic text editors or (for images composed of pixels) generic paint programs or (for drawings) some widely available drawing editor, and that is suitable for input to text formatters or for automatic translation to a variety of formats suitable for input to text formatters. A copy made in an otherwise Transparent file format whose markup has been designed to thwart or discourage subsequent modification by readers is not Transparent. A copy that is not "Transparent" is called "Opaque". Examples of suitable formats for Transparent copies include plain ASCII without markup, Texinfo input format, LaTeX input format, SGML or XML using a publicly available DTD, and standard-conforming simple HTML designed for human modification. Opaque formats include PostScript, PDF, proprietary formats that can be read and edited only by proprietary word processors, SGML or XML for which the DTD and/or processing tools are not generally available, and the machine-generated HTML produced by some word processors for output purposes only. The "Title Page" means, for a printed book, the title page itself, plus such following pages as are needed to hold, legibly, the material this License requires to appear in the title page. For works in formats which do not have any title page as such, "Title Page" means the text near the most prominent appearance of the work's title, preceding the beginning of the body of the text. 2. VERBATIM COPYING You may copy and distribute the Document in any medium, either commercially or noncommercially, provided that this License, the copyright notices, and the license notice saying this License applies to the Document are reproduced in all copies, and that you add no other conditions whatsoever to those of this License. You may not use technical measures to obstruct or control the reading or further copying of the copies you make or distribute. However, you may accept compensation in exchange for copies. If you distribute a large enough number of copies you must also follow the conditions in section 3. You may also lend copies, under the same conditions stated above, and you may publicly display copies. 3. COPYING IN QUANTITY If you publish printed copies of the Document numbering more than 100, and the Document's license notice requires Cover Texts, you must enclose the copies in covers that carry, clearly and legibly, all these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover. Both covers must also clearly and legibly identify you as the publisher of these copies. The front cover must present the full title with all words of the title equally prominent and visible. You may add other material on the covers in addition. Copying with changes limited to the covers, as long as they preserve the title of the Document and satisfy these conditions, can be treated as verbatim copying in other respects. If the required texts for either cover are too voluminous to fit legibly, you should put the first ones listed (as many as fit reasonably) on the actual cover, and continue the rest onto adjacent pages. If you publish or distribute Opaque copies of the Document numbering more than 100, you must either include a machine-readable Transparent copy along with each Opaque copy, or state in or with each Opaque copy a publicly-accessible computer-network location containing a complete Transparent copy of the Document, free of added material, which the general network-using public has access to download anonymously at no charge using public-standard network protocols. If you use the latter option, you must take reasonably prudent steps, when you begin distribution of Opaque copies in quantity, to ensure that this Transparent copy will remain thus accessible at the stated location until at least one year after the last time you distribute an Opaque copy (directly or through your agents or retailers) of that edition to the public. It is requested, but not required, that you contact the authors of the Document well before redistributing any large number of copies, to give them a chance to provide you with an updated version of the Document. 4. MODIFICATIONS You may copy and distribute a Modified Version of the Document under the conditions of sections 2 and 3 above, provided that you release the Modified Version under precisely this License, with the Modified Version filling the role of the Document, thus licensing distribution and modification of the Modified Version to whoever possesses a copy of it. In addition, you must do these things in the Modified Version: A. Use in the Title Page (and on the covers, if any) a title distinct from that of the Document, and from those of previous versions (which should, if there were any, be listed in the History section of the Document). You may use the same title as a previous version if the original publisher of that version gives permission. B. List on the Title Page, as authors, one or more persons or entities responsible for authorship of the modifications in the Modified Version, together with at least five of the principal authors of the Document (all of its principal authors, if it has less than five). C. State on the Title page the name of the publisher of the Modified Version, as the publisher. D. Preserve all the copyright notices of the Document. E. Add an appropriate copyright notice for your modifications adjacent to the other copyright notices. F. Include, immediately after the copyright notices, a license notice giving the public permission to use the Modified Version under the terms of this License, in the form shown in the Addendum below. G. Preserve in that license notice the full lists of Invariant Sections and required Cover Texts given in the Document's license notice. H. Include an unaltered copy of this License. I. Preserve the section entitled "History", and its title, and add to it an item stating at least the title, year, new authors, and publisher of the Modified Version as given on the Title Page. If there is no section entitled "History" in the Document, create one stating the title, year, authors, and publisher of the Document as given on its Title Page, then add an item describing the Modified Version as stated in the previous sentence. J. Preserve the network location, if any, given in the Document for public access to a Transparent copy of the Document, and likewise the network locations given in the Document for previous versions it was based on. These may be placed in the "History" section. You may omit a network location for a work that was published at least four years before the Document itself, or if the original publisher of the version it refers to gives permission. K. In any section entitled "Acknowledgements" or "Dedications", preserve the section's title, and preserve in the section all the substance and tone of each of the contributor acknowledgements and/or dedications given therein. L. Preserve all the Invariant Sections of the Document, unaltered in their text and in their titles. Section numbers or the equivalent are not considered part of the section titles. M. Delete any section entitled "Endorsements". Such a section may not be included in the Modified Version. N. Do not retitle any existing section as "Endorsements" or to conflict in title with any Invariant Section. If the Modified Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no material copied from the Document, you may at your option designate some or all of these sections as invariant. To do this, add their titles to the list of Invariant Sections in the Modified Version's license notice. These titles must be distinct from any other section titles. You may add a section entitled "Endorsements", provided it contains nothing but endorsements of your Modified Version by various parties--for example, statements of peer review or that the text has been approved by an organization as the authoritative definition of a standard. You may add a passage of up to five words as a Front-Cover Text, and a passage of up to 25 words as a Back-Cover Text, to the end of the list of Cover Texts in the Modified Version. Only one passage of Front-Cover Text and one of Back-Cover Text may be added by (or through arrangements made by) any one entity. If the Document already includes a cover text for the same cover, previously added by you or by arrangement made by the same entity you are acting on behalf of, you may not add another; but you may replace the old one, on explicit permission from the previous publisher that added the old one. The author(s) and publisher(s) of the Document do not by this License give permission to use their names for publicity for or to assert or imply endorsement of any Modified Version. 5. COMBINING DOCUMENTS You may combine the Document with other documents released under this License, under the terms defined in section 4 above for modified versions, provided that you include in the combination all of the Invariant Sections of all of the original documents, unmodified, and list them all as Invariant Sections of your combined work in its license notice. The combined work need only contain one copy of this License, and multiple identical Invariant Sections may be replaced with a single copy. If there are multiple Invariant Sections with the same name but different contents, make the title of each such section unique by adding at the end of it, in parentheses, the name of the original author or publisher of that section if known, or else a unique number. Make the same adjustment to the section titles in the list of Invariant Sections in the license notice of the combined work. In the combination, you must combine any sections entitled "History" in the various original documents, forming one section entitled "History"; likewise combine any sections entitled "Acknowledgements", and any sections entitled "Dedications". You must delete all sections entitled "Endorsements." 6. COLLECTIONS OF DOCUMENTS You may make a collection consisting of the Document and other documents released under this License, and replace the individual copies of this License in the various documents with a single copy that is included in the collection, provided that you follow the rules of this License for verbatim copying of each of the documents in all other respects. You may extract a single document from such a collection, and distribute it individually under this License, provided you insert a copy of this License into the extracted document, and follow this License in all other respects regarding verbatim copying of that document. 7. AGGREGATION WITH INDEPENDENT WORKS A compilation of the Document or its derivatives with other separate and independent documents or works, in or on a volume of a storage or distribution medium, does not as a whole count as a Modified Version of the Document, provided no compilation copyright is claimed for the compilation. Such a compilation is called an "aggregate", and this License does not apply to the other self-contained works thus compiled with the Document, on account of their being thus compiled, if they are not themselves derivative works of the Document. If the Cover Text requirement of section 3 is applicable to these copies of the Document, then if the Document is less than one quarter of the entire aggregate, the Document's Cover Texts may be placed on covers that surround only the Document within the aggregate. Otherwise they must appear on covers around the whole aggregate. 8. TRANSLATION Translation is considered a kind of modification, so you may distribute translations of the Document under the terms of section 4. Replacing Invariant Sections with translations requires special permission from their copyright holders, but you may include translations of some or all Invariant Sections in addition to the original versions of these Invariant Sections. You may include a translation of this License provided that you also include the original English version of this License. In case of a disagreement between the translation and the original English version of this License, the original English version will prevail. 9. TERMINATION You may not copy, modify, sublicense, or distribute the Document except as expressly provided for under this License. Any other attempt to copy, modify, sublicense or distribute the Document is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 10. FUTURE REVISIONS OF THIS LICENSE The Free Software Foundation may publish new, revised versions of the GNU Free Documentation License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. See http://www.gnu.org/copyleft/. Each version of the License is given a distinguishing version number. If the Document specifies that a particular numbered version of this License "or any later version" applies to it, you have the option of following the terms and conditions either of that specified version or of any later version that has been published (not as a draft) by the Free Software Foundation. If the Document does not specify a version number of this License, you may choose any version ever published (not as a draft) by the Free Software Foundation. ADDENDUM: How to use this License for your documents To use this License in a document you have written, include a copy of the License in the document and put the following copyright and license notices just after the title page: Copyright (c) YEAR YOUR NAME. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; with the Invariant Sections being LIST THEIR TITLES, with the Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST. A copy of the license is included in the section entitled "GNU Free Documentation License". If you have no Invariant Sections, write "with no Invariant Sections" instead of saying which ones are invariant. If you have no Front-Cover Texts, write "no Front-Cover Texts" instead of "Front-Cover Texts being LIST"; likewise for Back-Cover Texts. If your document contains nontrivial examples of program code, we recommend releasing these examples in parallel under your choice of free software license, such as the GNU General Public License, to permit their use in free software. /*end-insert */ tla-1.3.5+dfsg/src/build-tools/standards/standards.doc0000644000175000017500000000242510457621764021435 0ustar useruser/**************************************************************** *(book "hackerlab coding standards" * :subtitles ("visit the Hackerlab at www.regexps.com") * :authors ("Thomas Lord") * :one-line-summary "" * :keywords ("coding standards") * :copyright-years (2002) * :copyright "Thomas Lord" * :publisher #f * :home-page-link "The Hackerlab at regexps.com" * :contains ("The Hackerlab Coding Standards" * #f * "The GNU Free Documentation License" * #f * "Indexes") * * :permissions ("Permission is granted to copy, distribute and/or modify this document" * "under the terms of the GNU Free Documentation License, Version 1.1" * "or any later version published by the Free Software Foundation;" * "with the Invariant Sections being:" * "" * " (none)" * "" * "with the Front-Cover Texts being" * "" * " \"visit www.regexps.com\"," * "" * "and with the Back-Cover Texts being" * "" * " (none)." * "" * "A copy of the license is included in the section entitled \"GNU" * "Free Documentation License\".")) * */ /* arch-tag: Tom Lord Sun Mar 10 05:10:05 2002 (standards.doc) */ tla-1.3.5+dfsg/src/build-tools/standards/intro.doc0000644000175000017500000000115410457621764020603 0ustar useruser/* intro.doc: * **************************************************************** * Copyright (C) 2002 Tom Lord * * See the file "COPYING" for further information about * the copyright and warranty status of this work. */ /************************************************************************ *(h0 "The Hackerlab Coding Standards") * The purpose of these standards is to help people write programs which are consistently and conveniently formatted and consistent in build processes, testing processes, installation, and operation. */ /* arch-tag: Tom Lord Sun Mar 10 05:07:33 2002 (intro.doc) */ tla-1.3.5+dfsg/src/build-tools/standards/Makefile.in0000644000175000017500000000032710457621764021027 0ustar useruserthe-pdml-index := standards.pdml-index texi-main := standards.texi include $(makefiles)/library-ps.mk include $(makefiles)/library-html.mk # arch-tag: Tom Lord Sun Mar 10 05:11:21 2002 (standards/Makefile.in) # tla-1.3.5+dfsg/src/build-tools/standards/PLUGIN/0000755000175000017500000000000010457621764017756 5ustar userusertla-1.3.5+dfsg/src/build-tools/standards/PLUGIN/REQ0000644000175000017500000000002410457621764020324 0ustar useruserstandards standards tla-1.3.5+dfsg/src/build-tools/standards/index.doc0000644000175000017500000000037210457621764020560 0ustar useruser/************************************************************************ *(h0 "Indexes" * :unnumbered * :index (general) * :index-for "hackerlab coding standards") * */ /* arch-tag: Tom Lord Sun Mar 10 05:09:32 2002 (index.doc) */ tla-1.3.5+dfsg/src/build-tools/=README0000644000175000017500000000072310457621764015754 0ustar useruser The Package Framework This is towards a replacement for `automake' and `autoconf', but it isn't nearly done yet. "replacement" isn't quite right. For example, I don't care if this ever runs on windows or VMS (except in cases where those platforms have decent Posix environments) and I don't mind depending on a small number of packages that in turn depend on `autoconf' (e.g. GNU Make). # arch-tag: Tom Lord Fri Jan 11 18:42:31 2002 (build-tools/=README) # tla-1.3.5+dfsg/src/expat/0000755000175000017500000000000010457621771013657 5ustar userusertla-1.3.5+dfsg/src/expat/xmlwf/0000755000175000017500000000000010457621771015014 5ustar userusertla-1.3.5+dfsg/src/expat/xmlwf/readfilemap.c0000755000175000017500000000266110457621771017441 0ustar useruser/* Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd See the file COPYING for copying permission. */ #include #include #include #include #include #ifdef __BEOS__ #include #endif #ifndef S_ISREG #ifndef S_IFREG #define S_IFREG _S_IFREG #endif #ifndef S_IFMT #define S_IFMT _S_IFMT #endif #define S_ISREG(m) (((m) & S_IFMT) == S_IFREG) #endif /* not S_ISREG */ #ifndef O_BINARY #ifdef _O_BINARY #define O_BINARY _O_BINARY #else #define O_BINARY 0 #endif #endif #include "filemap.h" int filemap(const char *name, void (*processor)(const void *, size_t, const char *, void *arg), void *arg) { size_t nbytes; int fd; int n; struct stat sb; void *p; fd = open(name, O_RDONLY|O_BINARY); if (fd < 0) { perror(name); return 0; } if (fstat(fd, &sb) < 0) { perror(name); return 0; } if (!S_ISREG(sb.st_mode)) { fprintf(stderr, "%s: not a regular file\n", name); return 0; } nbytes = sb.st_size; p = malloc(nbytes); if (!p) { fprintf(stderr, "%s: out of memory\n", name); return 0; } n = read(fd, p, nbytes); if (n < 0) { perror(name); free(p); close(fd); return 0; } if (n != nbytes) { fprintf(stderr, "%s: read unexpected number of bytes\n", name); free(p); close(fd); return 0; } processor(p, nbytes, name, arg); free(p); close(fd); return 1; } tla-1.3.5+dfsg/src/expat/xmlwf/xmltchar.h0000755000175000017500000000147110457621771017015 0ustar useruser#ifdef XML_UNICODE #ifndef XML_UNICODE_WCHAR_T #error xmlwf requires a 16-bit Unicode-compatible wchar_t #endif #define T(x) L ## x #define ftprintf fwprintf #define tfopen _wfopen #define fputts fputws #define puttc putwc #define tcscmp wcscmp #define tcscpy wcscpy #define tcscat wcscat #define tcschr wcschr #define tcsrchr wcsrchr #define tcslen wcslen #define tperror _wperror #define topen _wopen #define tmain wmain #define tremove _wremove #else /* not XML_UNICODE */ #define T(x) x #define ftprintf fprintf #define tfopen fopen #define fputts fputs #define puttc putc #define tcscmp strcmp #define tcscpy strcpy #define tcscat strcat #define tcschr strchr #define tcsrchr strrchr #define tcslen strlen #define tperror perror #define topen open #define tmain main #define tremove remove #endif /* not XML_UNICODE */ tla-1.3.5+dfsg/src/expat/xmlwf/xmlwf.c0000755000175000017500000004764010457621771016333 0ustar useruser/* Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd See the file COPYING for copying permission. */ #include #include #include #include #include "expat.h" #include "codepage.h" #include "xmlfile.h" #include "xmltchar.h" #ifdef _MSC_VER #include #endif /* This ensures proper sorting. */ #define NSSEP T('\001') static void XMLCALL characterData(void *userData, const XML_Char *s, int len) { FILE *fp = userData; for (; len > 0; --len, ++s) { switch (*s) { case T('&'): fputts(T("&"), fp); break; case T('<'): fputts(T("<"), fp); break; case T('>'): fputts(T(">"), fp); break; #ifdef W3C14N case 13: fputts(T(" "), fp); break; #else case T('"'): fputts(T("""), fp); break; case 9: case 10: case 13: ftprintf(fp, T("&#%d;"), *s); break; #endif default: puttc(*s, fp); break; } } } static void attributeValue(FILE *fp, const XML_Char *s) { puttc(T('='), fp); puttc(T('"'), fp); for (;;) { switch (*s) { case 0: case NSSEP: puttc(T('"'), fp); return; case T('&'): fputts(T("&"), fp); break; case T('<'): fputts(T("<"), fp); break; case T('"'): fputts(T("""), fp); break; #ifdef W3C14N case 9: fputts(T(" "), fp); break; case 10: fputts(T(" "), fp); break; case 13: fputts(T(" "), fp); break; #else case T('>'): fputts(T(">"), fp); break; case 9: case 10: case 13: ftprintf(fp, T("&#%d;"), *s); break; #endif default: puttc(*s, fp); break; } s++; } } /* Lexicographically comparing UTF-8 encoded attribute values, is equivalent to lexicographically comparing based on the character number. */ static int attcmp(const void *att1, const void *att2) { return tcscmp(*(const XML_Char **)att1, *(const XML_Char **)att2); } static void XMLCALL startElement(void *userData, const XML_Char *name, const XML_Char **atts) { int nAtts; const XML_Char **p; FILE *fp = userData; puttc(T('<'), fp); fputts(name, fp); p = atts; while (*p) ++p; nAtts = (p - atts) >> 1; if (nAtts > 1) qsort((void *)atts, nAtts, sizeof(XML_Char *) * 2, attcmp); while (*atts) { puttc(T(' '), fp); fputts(*atts++, fp); attributeValue(fp, *atts); atts++; } puttc(T('>'), fp); } static void XMLCALL endElement(void *userData, const XML_Char *name) { FILE *fp = userData; puttc(T('<'), fp); puttc(T('/'), fp); fputts(name, fp); puttc(T('>'), fp); } static int nsattcmp(const void *p1, const void *p2) { const XML_Char *att1 = *(const XML_Char **)p1; const XML_Char *att2 = *(const XML_Char **)p2; int sep1 = (tcsrchr(att1, NSSEP) != 0); int sep2 = (tcsrchr(att1, NSSEP) != 0); if (sep1 != sep2) return sep1 - sep2; return tcscmp(att1, att2); } static void XMLCALL startElementNS(void *userData, const XML_Char *name, const XML_Char **atts) { int nAtts; int nsi; const XML_Char **p; FILE *fp = userData; const XML_Char *sep; puttc(T('<'), fp); sep = tcsrchr(name, NSSEP); if (sep) { fputts(T("n1:"), fp); fputts(sep + 1, fp); fputts(T(" xmlns:n1"), fp); attributeValue(fp, name); nsi = 2; } else { fputts(name, fp); nsi = 1; } p = atts; while (*p) ++p; nAtts = (p - atts) >> 1; if (nAtts > 1) qsort((void *)atts, nAtts, sizeof(XML_Char *) * 2, nsattcmp); while (*atts) { name = *atts++; sep = tcsrchr(name, NSSEP); puttc(T(' '), fp); if (sep) { ftprintf(fp, T("n%d:"), nsi); fputts(sep + 1, fp); } else fputts(name, fp); attributeValue(fp, *atts); if (sep) { ftprintf(fp, T(" xmlns:n%d"), nsi++); attributeValue(fp, name); } atts++; } puttc(T('>'), fp); } static void XMLCALL endElementNS(void *userData, const XML_Char *name) { FILE *fp = userData; const XML_Char *sep; puttc(T('<'), fp); puttc(T('/'), fp); sep = tcsrchr(name, NSSEP); if (sep) { fputts(T("n1:"), fp); fputts(sep + 1, fp); } else fputts(name, fp); puttc(T('>'), fp); } #ifndef W3C14N static void XMLCALL processingInstruction(void *userData, const XML_Char *target, const XML_Char *data) { FILE *fp = userData; puttc(T('<'), fp); puttc(T('?'), fp); fputts(target, fp); puttc(T(' '), fp); fputts(data, fp); puttc(T('?'), fp); puttc(T('>'), fp); } #endif /* not W3C14N */ static void XMLCALL defaultCharacterData(void *userData, const XML_Char *s, int len) { XML_DefaultCurrent((XML_Parser) userData); } static void XMLCALL defaultStartElement(void *userData, const XML_Char *name, const XML_Char **atts) { XML_DefaultCurrent((XML_Parser) userData); } static void XMLCALL defaultEndElement(void *userData, const XML_Char *name) { XML_DefaultCurrent((XML_Parser) userData); } static void XMLCALL defaultProcessingInstruction(void *userData, const XML_Char *target, const XML_Char *data) { XML_DefaultCurrent((XML_Parser) userData); } static void XMLCALL nopCharacterData(void *userData, const XML_Char *s, int len) { } static void XMLCALL nopStartElement(void *userData, const XML_Char *name, const XML_Char **atts) { } static void XMLCALL nopEndElement(void *userData, const XML_Char *name) { } static void XMLCALL nopProcessingInstruction(void *userData, const XML_Char *target, const XML_Char *data) { } static void XMLCALL markup(void *userData, const XML_Char *s, int len) { FILE *fp = XML_GetUserData((XML_Parser) userData); for (; len > 0; --len, ++s) puttc(*s, fp); } static void metaLocation(XML_Parser parser) { const XML_Char *uri = XML_GetBase(parser); if (uri) ftprintf(XML_GetUserData(parser), T(" uri=\"%s\""), uri); ftprintf(XML_GetUserData(parser), T(" byte=\"%ld\" nbytes=\"%d\" line=\"%d\" col=\"%d\""), XML_GetCurrentByteIndex(parser), XML_GetCurrentByteCount(parser), XML_GetCurrentLineNumber(parser), XML_GetCurrentColumnNumber(parser)); } static void metaStartDocument(void *userData) { fputts(T("\n"), XML_GetUserData((XML_Parser) userData)); } static void metaEndDocument(void *userData) { fputts(T("\n"), XML_GetUserData((XML_Parser) userData)); } static void XMLCALL metaStartElement(void *userData, const XML_Char *name, const XML_Char **atts) { XML_Parser parser = (XML_Parser) userData; FILE *fp = XML_GetUserData(parser); const XML_Char **specifiedAttsEnd = atts + XML_GetSpecifiedAttributeCount(parser); const XML_Char **idAttPtr; int idAttIndex = XML_GetIdAttributeIndex(parser); if (idAttIndex < 0) idAttPtr = 0; else idAttPtr = atts + idAttIndex; ftprintf(fp, T("\n"), fp); do { ftprintf(fp, T("= specifiedAttsEnd) fputts(T("\" defaulted=\"yes\"/>\n"), fp); else if (atts == idAttPtr) fputts(T("\" id=\"yes\"/>\n"), fp); else fputts(T("\"/>\n"), fp); } while (*(atts += 2)); fputts(T("\n"), fp); } else fputts(T("/>\n"), fp); } static void XMLCALL metaEndElement(void *userData, const XML_Char *name) { XML_Parser parser = (XML_Parser) userData; FILE *fp = XML_GetUserData(parser); ftprintf(fp, T("\n"), fp); } static void XMLCALL metaProcessingInstruction(void *userData, const XML_Char *target, const XML_Char *data) { XML_Parser parser = (XML_Parser) userData; FILE *fp = XML_GetUserData(parser); ftprintf(fp, T("\n"), fp); } static void XMLCALL metaComment(void *userData, const XML_Char *data) { XML_Parser parser = (XML_Parser) userData; FILE *fp = XML_GetUserData(parser); fputts(T("\n"), fp); } static void XMLCALL metaStartCdataSection(void *userData) { XML_Parser parser = (XML_Parser) userData; FILE *fp = XML_GetUserData(parser); fputts(T("\n"), fp); } static void XMLCALL metaEndCdataSection(void *userData) { XML_Parser parser = (XML_Parser) userData; FILE *fp = XML_GetUserData(parser); fputts(T("\n"), fp); } static void XMLCALL metaCharacterData(void *userData, const XML_Char *s, int len) { XML_Parser parser = (XML_Parser) userData; FILE *fp = XML_GetUserData(parser); fputts(T("\n"), fp); } static void XMLCALL metaStartDoctypeDecl(void *userData, const XML_Char *doctypeName, const XML_Char *sysid, const XML_Char *pubid, int has_internal_subset) { XML_Parser parser = (XML_Parser) userData; FILE *fp = XML_GetUserData(parser); ftprintf(fp, T("\n"), fp); } static void XMLCALL metaEndDoctypeDecl(void *userData) { XML_Parser parser = (XML_Parser) userData; FILE *fp = XML_GetUserData(parser); fputts(T("\n"), fp); } static void XMLCALL metaNotationDecl(void *userData, const XML_Char *notationName, const XML_Char *base, const XML_Char *systemId, const XML_Char *publicId) { XML_Parser parser = (XML_Parser) userData; FILE *fp = XML_GetUserData(parser); ftprintf(fp, T("\n"), fp); } static void XMLCALL metaEntityDecl(void *userData, const XML_Char *entityName, int is_param, const XML_Char *value, int value_length, const XML_Char *base, const XML_Char *systemId, const XML_Char *publicId, const XML_Char *notationName) { XML_Parser parser = (XML_Parser) userData; FILE *fp = XML_GetUserData(parser); if (value) { ftprintf(fp, T("'), fp); characterData(fp, value, value_length); fputts(T("\n"), fp); } else if (notationName) { ftprintf(fp, T("\n"), fp); } else { ftprintf(fp, T("\n"), fp); } } static void XMLCALL metaStartNamespaceDecl(void *userData, const XML_Char *prefix, const XML_Char *uri) { XML_Parser parser = (XML_Parser) userData; FILE *fp = XML_GetUserData(parser); fputts(T("\n"), fp); } else fputts(T("/>\n"), fp); } static void XMLCALL metaEndNamespaceDecl(void *userData, const XML_Char *prefix) { XML_Parser parser = (XML_Parser) userData; FILE *fp = XML_GetUserData(parser); if (!prefix) fputts(T("\n"), fp); else ftprintf(fp, T("\n"), prefix); } static int XMLCALL unknownEncodingConvert(void *data, const char *p) { return codepageConvert(*(int *)data, p); } static int XMLCALL unknownEncoding(void *userData, const XML_Char *name, XML_Encoding *info) { int cp; static const XML_Char prefixL[] = T("windows-"); static const XML_Char prefixU[] = T("WINDOWS-"); int i; for (i = 0; prefixU[i]; i++) if (name[i] != prefixU[i] && name[i] != prefixL[i]) return 0; cp = 0; for (; name[i]; i++) { static const XML_Char digits[] = T("0123456789"); const XML_Char *s = tcschr(digits, name[i]); if (!s) return 0; cp *= 10; cp += s - digits; if (cp >= 0x10000) return 0; } if (!codepageMap(cp, info->map)) return 0; info->convert = unknownEncodingConvert; /* We could just cast the code page integer to a void *, and avoid the use of release. */ info->release = free; info->data = malloc(sizeof(int)); if (!info->data) return 0; *(int *)info->data = cp; return 1; } static int XMLCALL notStandalone(void *userData) { return 0; } static void showVersion(XML_Char *prog) { XML_Char *s = prog; XML_Char ch; const XML_Feature *features = XML_GetFeatureList(); while ((ch = *s) != 0) { if (ch == '/' #ifdef WIN32 || ch == '\\' #endif ) prog = s + 1; ++s; } ftprintf(stdout, T("%s using %s\n"), prog, XML_ExpatVersion()); if (features != NULL && features[0].feature != XML_FEATURE_END) { int i = 1; ftprintf(stdout, T("%s"), features[0].name); if (features[0].value) ftprintf(stdout, T("=%ld"), features[0].value); while (features[i].feature != XML_FEATURE_END) { ftprintf(stdout, T(", %s"), features[i].name); if (features[i].value) ftprintf(stdout, T("=%ld"), features[i].value); ++i; } ftprintf(stdout, T("\n")); } } static void usage(const XML_Char *prog, int rc) { ftprintf(stderr, T("usage: %s [-n] [-p] [-r] [-s] [-w] [-x] [-d output-dir] " "[-e encoding] file ...\n"), prog); exit(rc); } int tmain(int argc, XML_Char **argv) { int i, j; const XML_Char *outputDir = NULL; const XML_Char *encoding = NULL; unsigned processFlags = XML_MAP_FILE; int windowsCodePages = 0; int outputType = 0; int useNamespaces = 0; int requireStandalone = 0; int paramEntityParsing = XML_PARAM_ENTITY_PARSING_NEVER; int useStdin = 0; #ifdef _MSC_VER _CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF|_CRTDBG_LEAK_CHECK_DF); #endif i = 1; j = 0; while (i < argc) { if (j == 0) { if (argv[i][0] != T('-')) break; if (argv[i][1] == T('-') && argv[i][2] == T('\0')) { i++; break; } j++; } switch (argv[i][j]) { case T('r'): processFlags &= ~XML_MAP_FILE; j++; break; case T('s'): requireStandalone = 1; j++; break; case T('n'): useNamespaces = 1; j++; break; case T('p'): paramEntityParsing = XML_PARAM_ENTITY_PARSING_ALWAYS; /* fall through */ case T('x'): processFlags |= XML_EXTERNAL_ENTITIES; j++; break; case T('w'): windowsCodePages = 1; j++; break; case T('m'): outputType = 'm'; j++; break; case T('c'): outputType = 'c'; useNamespaces = 0; j++; break; case T('t'): outputType = 't'; j++; break; case T('d'): if (argv[i][j + 1] == T('\0')) { if (++i == argc) usage(argv[0], 2); outputDir = argv[i]; } else outputDir = argv[i] + j + 1; i++; j = 0; break; case T('e'): if (argv[i][j + 1] == T('\0')) { if (++i == argc) usage(argv[0], 2); encoding = argv[i]; } else encoding = argv[i] + j + 1; i++; j = 0; break; case T('h'): usage(argv[0], 0); return 0; case T('v'): showVersion(argv[0]); return 0; case T('\0'): if (j > 1) { i++; j = 0; break; } /* fall through */ default: usage(argv[0], 2); } } if (i == argc) { useStdin = 1; processFlags &= ~XML_MAP_FILE; i--; } for (; i < argc; i++) { FILE *fp = 0; XML_Char *outName = 0; int result; XML_Parser parser; if (useNamespaces) parser = XML_ParserCreateNS(encoding, NSSEP); else parser = XML_ParserCreate(encoding); if (requireStandalone) XML_SetNotStandaloneHandler(parser, notStandalone); XML_SetParamEntityParsing(parser, paramEntityParsing); if (outputType == 't') { /* This is for doing timings; this gives a more realistic estimate of the parsing time. */ outputDir = 0; XML_SetElementHandler(parser, nopStartElement, nopEndElement); XML_SetCharacterDataHandler(parser, nopCharacterData); XML_SetProcessingInstructionHandler(parser, nopProcessingInstruction); } else if (outputDir) { const XML_Char *file = useStdin ? T("STDIN") : argv[i]; if (tcsrchr(file, T('/'))) file = tcsrchr(file, T('/')) + 1; #ifdef WIN32 if (tcsrchr(file, T('\\'))) file = tcsrchr(file, T('\\')) + 1; #endif outName = malloc((tcslen(outputDir) + tcslen(file) + 2) * sizeof(XML_Char)); tcscpy(outName, outputDir); tcscat(outName, T("/")); tcscat(outName, file); fp = tfopen(outName, T("wb")); if (!fp) { tperror(outName); exit(1); } setvbuf(fp, NULL, _IOFBF, 16384); #ifdef XML_UNICODE puttc(0xFEFF, fp); #endif XML_SetUserData(parser, fp); switch (outputType) { case 'm': XML_UseParserAsHandlerArg(parser); XML_SetElementHandler(parser, metaStartElement, metaEndElement); XML_SetProcessingInstructionHandler(parser, metaProcessingInstruction); XML_SetCommentHandler(parser, metaComment); XML_SetCdataSectionHandler(parser, metaStartCdataSection, metaEndCdataSection); XML_SetCharacterDataHandler(parser, metaCharacterData); XML_SetDoctypeDeclHandler(parser, metaStartDoctypeDecl, metaEndDoctypeDecl); XML_SetEntityDeclHandler(parser, metaEntityDecl); XML_SetNotationDeclHandler(parser, metaNotationDecl); XML_SetNamespaceDeclHandler(parser, metaStartNamespaceDecl, metaEndNamespaceDecl); metaStartDocument(parser); break; case 'c': XML_UseParserAsHandlerArg(parser); XML_SetDefaultHandler(parser, markup); XML_SetElementHandler(parser, defaultStartElement, defaultEndElement); XML_SetCharacterDataHandler(parser, defaultCharacterData); XML_SetProcessingInstructionHandler(parser, defaultProcessingInstruction); break; default: if (useNamespaces) XML_SetElementHandler(parser, startElementNS, endElementNS); else XML_SetElementHandler(parser, startElement, endElement); XML_SetCharacterDataHandler(parser, characterData); #ifndef W3C14N XML_SetProcessingInstructionHandler(parser, processingInstruction); #endif /* not W3C14N */ break; } } if (windowsCodePages) XML_SetUnknownEncodingHandler(parser, unknownEncoding, 0); result = XML_ProcessFile(parser, useStdin ? NULL : argv[i], processFlags); if (outputDir) { if (outputType == 'm') metaEndDocument(parser); fclose(fp); if (!result) tremove(outName); free(outName); } XML_ParserFree(parser); } return 0; } tla-1.3.5+dfsg/src/expat/xmlwf/ct.c0000755000175000017500000000554010457621771015575 0ustar useruser#define CHARSET_MAX 41 static const char * getTok(const char **pp) { enum { inAtom, inString, init, inComment }; int state = init; const char *tokStart = 0; for (;;) { switch (**pp) { case '\0': return 0; case ' ': case '\r': case '\t': case '\n': if (state == inAtom) return tokStart; break; case '(': if (state == inAtom) return tokStart; if (state != inString) state++; break; case ')': if (state > init) --state; else if (state != inString) return 0; break; case ';': case '/': case '=': if (state == inAtom) return tokStart; if (state == init) return (*pp)++; break; case '\\': ++*pp; if (**pp == '\0') return 0; break; case '"': switch (state) { case inString: ++*pp; return tokStart; case inAtom: return tokStart; case init: tokStart = *pp; state = inString; break; } break; default: if (state == init) { tokStart = *pp; state = inAtom; } break; } ++*pp; } /* not reached */ } /* key must be lowercase ASCII */ static int matchkey(const char *start, const char *end, const char *key) { if (!start) return 0; for (; start != end; start++, key++) if (*start != *key && *start != 'A' + (*key - 'a')) return 0; return *key == '\0'; } void getXMLCharset(const char *buf, char *charset) { const char *next, *p; charset[0] = '\0'; next = buf; p = getTok(&next); if (matchkey(p, next, "text")) strcpy(charset, "us-ascii"); else if (!matchkey(p, next, "application")) return; p = getTok(&next); if (!p || *p != '/') return; p = getTok(&next); if (matchkey(p, next, "xml")) isXml = 1; p = getTok(&next); while (p) { if (*p == ';') { p = getTok(&next); if (matchkey(p, next, "charset")) { p = getTok(&next); if (p && *p == '=') { p = getTok(&next); if (p) { char *s = charset; if (*p == '"') { while (++p != next - 1) { if (*p == '\\') ++p; if (s == charset + CHARSET_MAX - 1) { charset[0] = '\0'; break; } *s++ = *p; } *s++ = '\0'; } else { if (next - p > CHARSET_MAX - 1) break; while (p != next) *s++ = *p++; *s = 0; break; } } } } } else p = getTok(&next); } } int main(int argc, char **argv) { char buf[CHARSET_MAX]; getXMLCharset(argv[1], buf); printf("charset = \"%s\"\n", buf); return 0; } tla-1.3.5+dfsg/src/expat/xmlwf/codepage.h0000755000175000017500000000030410457621771016734 0ustar useruser/* Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd See the file COPYING for copying permission. */ int codepageMap(int cp, int *map); int codepageConvert(int cp, const char *p); tla-1.3.5+dfsg/src/expat/xmlwf/filemap.h0000755000175000017500000000076410457621771016614 0ustar useruser/* Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd See the file COPYING for copying permission. */ #include #ifdef XML_UNICODE int filemap(const wchar_t *name, void (*processor)(const void *, size_t, const wchar_t *, void *arg), void *arg); #else int filemap(const char *name, void (*processor)(const void *, size_t, const char *, void *arg), void *arg); #endif tla-1.3.5+dfsg/src/expat/xmlwf/xmlfile.c0000755000175000017500000001260510457621771016627 0ustar useruser/* Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd See the file COPYING for copying permission. */ #include #include #include #include #include #ifdef COMPILED_FROM_DSP #include "winconfig.h" #else #ifdef HAVE_EXPAT_CONFIG_H #include "expat_config.h" #endif #endif #include "expat.h" #include "xmlfile.h" #include "xmltchar.h" #include "filemap.h" #ifdef _MSC_VER #include #endif #ifdef HAVE_UNISTD_H #include #endif #ifndef O_BINARY #ifdef _O_BINARY #define O_BINARY _O_BINARY #else #define O_BINARY 0 #endif #endif #ifdef _DEBUG #define READ_SIZE 16 #else #define READ_SIZE (1024*8) #endif typedef struct { XML_Parser parser; int *retPtr; } PROCESS_ARGS; static void reportError(XML_Parser parser, const XML_Char *filename) { int code = XML_GetErrorCode(parser); const XML_Char *message = XML_ErrorString(code); if (message) ftprintf(stdout, T("%s:%d:%d: %s\n"), filename, XML_GetErrorLineNumber(parser), XML_GetErrorColumnNumber(parser), message); else ftprintf(stderr, T("%s: (unknown message %d)\n"), filename, code); } static void processFile(const void *data, size_t size, const XML_Char *filename, void *args) { XML_Parser parser = ((PROCESS_ARGS *)args)->parser; int *retPtr = ((PROCESS_ARGS *)args)->retPtr; if (XML_Parse(parser, data, size, 1) == XML_STATUS_ERROR) { reportError(parser, filename); *retPtr = 0; } else *retPtr = 1; } #ifdef WIN32 static int isAsciiLetter(XML_Char c) { return (T('a') <= c && c <= T('z')) || (T('A') <= c && c <= T('Z')); } #endif /* WIN32 */ static const XML_Char * resolveSystemId(const XML_Char *base, const XML_Char *systemId, XML_Char **toFree) { XML_Char *s; *toFree = 0; if (!base || *systemId == T('/') #ifdef WIN32 || *systemId == T('\\') || (isAsciiLetter(systemId[0]) && systemId[1] == T(':')) #endif ) return systemId; *toFree = (XML_Char *)malloc((tcslen(base) + tcslen(systemId) + 2) * sizeof(XML_Char)); if (!*toFree) return systemId; tcscpy(*toFree, base); s = *toFree; if (tcsrchr(s, T('/'))) s = tcsrchr(s, T('/')) + 1; #ifdef WIN32 if (tcsrchr(s, T('\\'))) s = tcsrchr(s, T('\\')) + 1; #endif tcscpy(s, systemId); return *toFree; } static int externalEntityRefFilemap(XML_Parser parser, const XML_Char *context, const XML_Char *base, const XML_Char *systemId, const XML_Char *publicId) { int result; XML_Char *s; const XML_Char *filename; XML_Parser entParser = XML_ExternalEntityParserCreate(parser, context, 0); PROCESS_ARGS args; args.retPtr = &result; args.parser = entParser; filename = resolveSystemId(base, systemId, &s); XML_SetBase(entParser, filename); if (!filemap(filename, processFile, &args)) result = 0; free(s); XML_ParserFree(entParser); return result; } static int processStream(const XML_Char *filename, XML_Parser parser) { /* passing NULL for filename means read intput from stdin */ int fd = 0; /* 0 is the fileno for stdin */ if (filename != NULL) { fd = topen(filename, O_BINARY|O_RDONLY); if (fd < 0) { tperror(filename); return 0; } } for (;;) { int nread; char *buf = XML_GetBuffer(parser, READ_SIZE); if (!buf) { if (filename != NULL) close(fd); ftprintf(stderr, T("%s: out of memory\n"), filename != NULL ? filename : "xmlwf"); return 0; } nread = read(fd, buf, READ_SIZE); if (nread < 0) { tperror(filename != NULL ? filename : "STDIN"); if (filename != NULL) close(fd); return 0; } if (XML_ParseBuffer(parser, nread, nread == 0) == XML_STATUS_ERROR) { reportError(parser, filename != NULL ? filename : "STDIN"); if (filename != NULL) close(fd); return 0; } if (nread == 0) { if (filename != NULL) close(fd); break;; } } return 1; } static int externalEntityRefStream(XML_Parser parser, const XML_Char *context, const XML_Char *base, const XML_Char *systemId, const XML_Char *publicId) { XML_Char *s; const XML_Char *filename; int ret; XML_Parser entParser = XML_ExternalEntityParserCreate(parser, context, 0); filename = resolveSystemId(base, systemId, &s); XML_SetBase(entParser, filename); ret = processStream(filename, entParser); free(s); XML_ParserFree(entParser); return ret; } int XML_ProcessFile(XML_Parser parser, const XML_Char *filename, unsigned flags) { int result; if (!XML_SetBase(parser, filename)) { ftprintf(stderr, T("%s: out of memory"), filename); exit(1); } if (flags & XML_EXTERNAL_ENTITIES) XML_SetExternalEntityRefHandler(parser, (flags & XML_MAP_FILE) ? externalEntityRefFilemap : externalEntityRefStream); if (flags & XML_MAP_FILE) { PROCESS_ARGS args; args.retPtr = &result; args.parser = parser; if (!filemap(filename, processFile, &args)) result = 0; } else result = processStream(filename, parser); return result; } tla-1.3.5+dfsg/src/expat/xmlwf/xmlmime.c0000755000175000017500000000622210457621771016635 0ustar useruser#include #include "xmlmime.h" static const char * getTok(const char **pp) { /* inComment means one level of nesting; inComment+1 means two levels etc */ enum { inAtom, inString, init, inComment }; int state = init; const char *tokStart = 0; for (;;) { switch (**pp) { case '\0': if (state == inAtom) return tokStart; return 0; case ' ': case '\r': case '\t': case '\n': if (state == inAtom) return tokStart; break; case '(': if (state == inAtom) return tokStart; if (state != inString) state++; break; case ')': if (state > init) --state; else if (state != inString) return 0; break; case ';': case '/': case '=': if (state == inAtom) return tokStart; if (state == init) return (*pp)++; break; case '\\': ++*pp; if (**pp == '\0') return 0; break; case '"': switch (state) { case inString: ++*pp; return tokStart; case inAtom: return tokStart; case init: tokStart = *pp; state = inString; break; } break; default: if (state == init) { tokStart = *pp; state = inAtom; } break; } ++*pp; } /* not reached */ } /* key must be lowercase ASCII */ static int matchkey(const char *start, const char *end, const char *key) { if (!start) return 0; for (; start != end; start++, key++) if (*start != *key && *start != 'A' + (*key - 'a')) return 0; return *key == '\0'; } void getXMLCharset(const char *buf, char *charset) { const char *next, *p; charset[0] = '\0'; next = buf; p = getTok(&next); if (matchkey(p, next, "text")) strcpy(charset, "us-ascii"); else if (!matchkey(p, next, "application")) return; p = getTok(&next); if (!p || *p != '/') return; p = getTok(&next); #if 0 if (!matchkey(p, next, "xml") && charset[0] == '\0') return; #endif p = getTok(&next); while (p) { if (*p == ';') { p = getTok(&next); if (matchkey(p, next, "charset")) { p = getTok(&next); if (p && *p == '=') { p = getTok(&next); if (p) { char *s = charset; if (*p == '"') { while (++p != next - 1) { if (*p == '\\') ++p; if (s == charset + CHARSET_MAX - 1) { charset[0] = '\0'; break; } *s++ = *p; } *s++ = '\0'; } else { if (next - p > CHARSET_MAX - 1) break; while (p != next) *s++ = *p++; *s = 0; break; } } } break; } } else p = getTok(&next); } } #ifdef TEST #include int main(int argc, char *argv[]) { char buf[CHARSET_MAX]; if (argc <= 1) return 1; printf("%s\n", argv[1]); getXMLCharset(argv[1], buf); printf("charset=\"%s\"\n", buf); return 0; } #endif /* TEST */ tla-1.3.5+dfsg/src/expat/xmlwf/xmlfile.h0000755000175000017500000000047610457621771016637 0ustar useruser/* Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd See the file COPYING for copying permission. */ #define XML_MAP_FILE 01 #define XML_EXTERNAL_ENTITIES 02 extern int XML_ProcessFile(XML_Parser parser, const XML_Char *filename, unsigned flags); tla-1.3.5+dfsg/src/expat/xmlwf/codepage.c0000755000175000017500000000242410457621771016734 0ustar useruser/* Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd See the file COPYING for copying permission. */ #include "codepage.h" #ifdef WIN32 #define STRICT 1 #define WIN32_LEAN_AND_MEAN 1 #include int codepageMap(int cp, int *map) { int i; CPINFO info; if (!GetCPInfo(cp, &info) || info.MaxCharSize > 2) return 0; for (i = 0; i < 256; i++) map[i] = -1; if (info.MaxCharSize > 1) { for (i = 0; i < MAX_LEADBYTES; i++) { int j, lim; if (info.LeadByte[i] == 0 && info.LeadByte[i + 1] == 0) break; lim = info.LeadByte[i + 1]; for (j = info.LeadByte[i]; j < lim; j++) map[j] = -2; } } for (i = 0; i < 256; i++) { if (map[i] == -1) { char c = (char)i; unsigned short n; if (MultiByteToWideChar(cp, MB_PRECOMPOSED|MB_ERR_INVALID_CHARS, &c, 1, &n, 1) == 1) map[i] = n; } } return 1; } int codepageConvert(int cp, const char *p) { unsigned short c; if (MultiByteToWideChar(cp, MB_PRECOMPOSED|MB_ERR_INVALID_CHARS, p, 2, &c, 1) == 1) return c; return -1; } #else /* not WIN32 */ int codepageMap(int cp, int *map) { return 0; } int codepageConvert(int cp, const char *p) { return -1; } #endif /* not WIN32 */ tla-1.3.5+dfsg/src/expat/xmlwf/xmlwin32url.cxx0000755000175000017500000002115510457621771017755 0ustar useruser#include "expat.h" #ifdef XML_UNICODE #define UNICODE #endif #include #include #include #include #include #include "xmlurl.h" #include "xmlmime.h" static int processURL(XML_Parser parser, IMoniker *baseMoniker, const XML_Char *url); typedef void (*StopHandler)(void *, HRESULT); class Callback : public IBindStatusCallback { public: // IUnknown methods STDMETHODIMP QueryInterface(REFIID,void **); STDMETHODIMP_(ULONG) AddRef(); STDMETHODIMP_(ULONG) Release(); // IBindStatusCallback methods STDMETHODIMP OnStartBinding(DWORD, IBinding *); STDMETHODIMP GetPriority(LONG *); STDMETHODIMP OnLowResource(DWORD); STDMETHODIMP OnProgress(ULONG, ULONG, ULONG, LPCWSTR); STDMETHODIMP OnStopBinding(HRESULT, LPCWSTR); STDMETHODIMP GetBindInfo(DWORD *, BINDINFO *); STDMETHODIMP OnDataAvailable(DWORD, DWORD, FORMATETC *, STGMEDIUM *); STDMETHODIMP OnObjectAvailable(REFIID, IUnknown *); Callback(XML_Parser, IMoniker *, StopHandler, void *); ~Callback(); int externalEntityRef(const XML_Char *context, const XML_Char *systemId, const XML_Char *publicId); private: XML_Parser parser_; IMoniker *baseMoniker_; DWORD totalRead_; ULONG ref_; IBinding *pBinding_; StopHandler stopHandler_; void *stopArg_; }; STDMETHODIMP_(ULONG) Callback::AddRef() { return ref_++; } STDMETHODIMP_(ULONG) Callback::Release() { if (--ref_ == 0) { delete this; return 0; } return ref_; } STDMETHODIMP Callback::QueryInterface(REFIID riid, void** ppv) { if (IsEqualGUID(riid, IID_IUnknown)) *ppv = (IUnknown *)this; else if (IsEqualGUID(riid, IID_IBindStatusCallback)) *ppv = (IBindStatusCallback *)this; else return E_NOINTERFACE; ((LPUNKNOWN)*ppv)->AddRef(); return S_OK; } STDMETHODIMP Callback::OnStartBinding(DWORD, IBinding* pBinding) { pBinding_ = pBinding; pBinding->AddRef(); return S_OK; } STDMETHODIMP Callback::GetPriority(LONG *) { return E_NOTIMPL; } STDMETHODIMP Callback::OnLowResource(DWORD) { return E_NOTIMPL; } STDMETHODIMP Callback::OnProgress(ULONG, ULONG, ULONG, LPCWSTR) { return S_OK; } STDMETHODIMP Callback::OnStopBinding(HRESULT hr, LPCWSTR szError) { if (pBinding_) { pBinding_->Release(); pBinding_ = 0; } if (baseMoniker_) { baseMoniker_->Release(); baseMoniker_ = 0; } stopHandler_(stopArg_, hr); return S_OK; } STDMETHODIMP Callback::GetBindInfo(DWORD* pgrfBINDF, BINDINFO* pbindinfo) { *pgrfBINDF = BINDF_ASYNCHRONOUS; return S_OK; } static void reportError(XML_Parser parser) { int code = XML_GetErrorCode(parser); const XML_Char *message = XML_ErrorString(code); if (message) _ftprintf(stderr, _T("%s:%d:%ld: %s\n"), XML_GetBase(parser), XML_GetErrorLineNumber(parser), XML_GetErrorColumnNumber(parser), message); else _ftprintf(stderr, _T("%s: (unknown message %d)\n"), XML_GetBase(parser), code); } STDMETHODIMP Callback::OnDataAvailable(DWORD grfBSCF, DWORD dwSize, FORMATETC *pfmtetc, STGMEDIUM* pstgmed) { if (grfBSCF & BSCF_FIRSTDATANOTIFICATION) { IWinInetHttpInfo *hp; HRESULT hr = pBinding_->QueryInterface(IID_IWinInetHttpInfo, (void **)&hp); if (SUCCEEDED(hr)) { char contentType[1024]; DWORD bufSize = sizeof(contentType); DWORD flags = 0; contentType[0] = 0; hr = hp->QueryInfo(HTTP_QUERY_CONTENT_TYPE, contentType, &bufSize, 0, NULL); if (SUCCEEDED(hr)) { char charset[CHARSET_MAX]; getXMLCharset(contentType, charset); if (charset[0]) { #ifdef XML_UNICODE XML_Char wcharset[CHARSET_MAX]; XML_Char *p1 = wcharset; const char *p2 = charset; while ((*p1++ = (unsigned char)*p2++) != 0) ; XML_SetEncoding(parser_, wcharset); #else XML_SetEncoding(parser_, charset); #endif } } hp->Release(); } } if (!parser_) return E_ABORT; if (pstgmed->tymed == TYMED_ISTREAM) { while (totalRead_ < dwSize) { #define READ_MAX (64*1024) DWORD nToRead = dwSize - totalRead_; if (nToRead > READ_MAX) nToRead = READ_MAX; void *buf = XML_GetBuffer(parser_, nToRead); if (!buf) { _ftprintf(stderr, _T("out of memory\n")); return E_ABORT; } DWORD nRead; HRESULT hr = pstgmed->pstm->Read(buf, nToRead, &nRead); if (SUCCEEDED(hr)) { totalRead_ += nRead; if (!XML_ParseBuffer(parser_, nRead, (grfBSCF & BSCF_LASTDATANOTIFICATION) != 0 && totalRead_ == dwSize)) { reportError(parser_); return E_ABORT; } } } } return S_OK; } STDMETHODIMP Callback::OnObjectAvailable(REFIID, IUnknown *) { return S_OK; } int Callback::externalEntityRef(const XML_Char *context, const XML_Char *systemId, const XML_Char *publicId) { XML_Parser entParser = XML_ExternalEntityParserCreate(parser_, context, 0); XML_SetBase(entParser, systemId); int ret = processURL(entParser, baseMoniker_, systemId); XML_ParserFree(entParser); return ret; } Callback::Callback(XML_Parser parser, IMoniker *baseMoniker, StopHandler stopHandler, void *stopArg) : parser_(parser), baseMoniker_(baseMoniker), ref_(0), pBinding_(0), totalRead_(0), stopHandler_(stopHandler), stopArg_(stopArg) { if (baseMoniker_) baseMoniker_->AddRef(); } Callback::~Callback() { if (pBinding_) pBinding_->Release(); if (baseMoniker_) baseMoniker_->Release(); } static int externalEntityRef(void *arg, const XML_Char *context, const XML_Char *base, const XML_Char *systemId, const XML_Char *publicId) { return ((Callback *)arg)->externalEntityRef(context, systemId, publicId); } static HRESULT openStream(XML_Parser parser, IMoniker *baseMoniker, const XML_Char *uri, StopHandler stopHandler, void *stopArg) { if (!XML_SetBase(parser, uri)) return E_OUTOFMEMORY; HRESULT hr; IMoniker *m; #ifdef XML_UNICODE hr = CreateURLMoniker(0, uri, &m); #else LPWSTR uriw = new wchar_t[strlen(uri) + 1]; for (int i = 0;; i++) { uriw[i] = uri[i]; if (uriw[i] == 0) break; } hr = CreateURLMoniker(baseMoniker, uriw, &m); delete [] uriw; #endif if (FAILED(hr)) return hr; IBindStatusCallback *cb = new Callback(parser, m, stopHandler, stopArg); XML_SetExternalEntityRefHandler(parser, externalEntityRef); XML_SetExternalEntityRefHandlerArg(parser, cb); cb->AddRef(); IBindCtx *b; if (FAILED(hr = CreateAsyncBindCtx(0, cb, 0, &b))) { cb->Release(); m->Release(); return hr; } cb->Release(); IStream *pStream; hr = m->BindToStorage(b, 0, IID_IStream, (void **)&pStream); if (SUCCEEDED(hr)) { if (pStream) pStream->Release(); } if (hr == MK_S_ASYNCHRONOUS) hr = S_OK; m->Release(); b->Release(); return hr; } struct QuitInfo { const XML_Char *url; HRESULT hr; int stop; }; static void winPerror(const XML_Char *url, HRESULT hr) { LPVOID buf; if (FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_HMODULE, GetModuleHandleA("urlmon.dll"), hr, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR) &buf, 0, NULL) || FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, 0, hr, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR) &buf, 0, NULL)) { /* The system error messages seem to end with a newline. */ _ftprintf(stderr, _T("%s: %s"), url, buf); fflush(stderr); LocalFree(buf); } else _ftprintf(stderr, _T("%s: error %x\n"), url, hr); } static void threadQuit(void *p, HRESULT hr) { QuitInfo *qi = (QuitInfo *)p; qi->hr = hr; qi->stop = 1; } extern "C" int XML_URLInit(void) { return SUCCEEDED(CoInitialize(0)); } extern "C" void XML_URLUninit(void) { CoUninitialize(); } static int processURL(XML_Parser parser, IMoniker *baseMoniker, const XML_Char *url) { QuitInfo qi; qi.stop = 0; qi.url = url; XML_SetBase(parser, url); HRESULT hr = openStream(parser, baseMoniker, url, threadQuit, &qi); if (FAILED(hr)) { winPerror(url, hr); return 0; } else if (FAILED(qi.hr)) { winPerror(url, qi.hr); return 0; } MSG msg; while (!qi.stop && GetMessage (&msg, NULL, 0, 0)) { TranslateMessage (&msg); DispatchMessage (&msg); } return 1; } extern "C" int XML_ProcessURL(XML_Parser parser, const XML_Char *url, unsigned flags) { return processURL(parser, 0, url); } tla-1.3.5+dfsg/src/expat/xmlwf/win32filemap.c0000755000175000017500000000413710457621771017470 0ustar useruser/* Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd See the file COPYING for copying permission. */ #define STRICT 1 #define WIN32_LEAN_AND_MEAN 1 #ifdef XML_UNICODE_WCHAR_T #ifndef XML_UNICODE #define XML_UNICODE #endif #endif #ifdef XML_UNICODE #define UNICODE #define _UNICODE #endif /* XML_UNICODE */ #include #include #include #include "filemap.h" static void win32perror(const TCHAR *); int filemap(const TCHAR *name, void (*processor)(const void *, size_t, const TCHAR *, void *arg), void *arg) { HANDLE f; HANDLE m; DWORD size; DWORD sizeHi; void *p; f = CreateFile(name, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_FLAG_SEQUENTIAL_SCAN, NULL); if (f == INVALID_HANDLE_VALUE) { win32perror(name); return 0; } size = GetFileSize(f, &sizeHi); if (size == (DWORD)-1) { win32perror(name); return 0; } if (sizeHi) { _ftprintf(stderr, _T("%s: bigger than 2Gb\n"), name); return 0; } /* CreateFileMapping barfs on zero length files */ if (size == 0) { static const char c = '\0'; processor(&c, 0, name, arg); CloseHandle(f); return 1; } m = CreateFileMapping(f, NULL, PAGE_READONLY, 0, 0, NULL); if (m == NULL) { win32perror(name); CloseHandle(f); return 0; } p = MapViewOfFile(m, FILE_MAP_READ, 0, 0, 0); if (p == NULL) { win32perror(name); CloseHandle(m); CloseHandle(f); return 0; } processor(p, size, name, arg); UnmapViewOfFile(p); CloseHandle(m); CloseHandle(f); return 1; } static void win32perror(const TCHAR *s) { LPVOID buf; if (FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, NULL, GetLastError(), MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR) &buf, 0, NULL)) { _ftprintf(stderr, _T("%s: %s"), s, buf); fflush(stderr); LocalFree(buf); } else _ftprintf(stderr, _T("%s: unknown Windows error\n"), s); } tla-1.3.5+dfsg/src/expat/xmlwf/xmlwf.dsp0000755000175000017500000001044110457621771016664 0ustar useruser# Microsoft Developer Studio Project File - Name="xmlwf" - Package Owner=<4> # Microsoft Developer Studio Generated Build File, Format Version 6.00 # ** DO NOT EDIT ** # TARGTYPE "Win32 (x86) Console Application" 0x0103 CFG=xmlwf - Win32 Release !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run !MESSAGE !MESSAGE NMAKE /f "xmlwf.mak". !MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: !MESSAGE !MESSAGE NMAKE /f "xmlwf.mak" CFG="xmlwf - Win32 Release" !MESSAGE !MESSAGE Possible choices for configuration are: !MESSAGE !MESSAGE "xmlwf - Win32 Release" (based on "Win32 (x86) Console Application") !MESSAGE "xmlwf - Win32 Debug" (based on "Win32 (x86) Console Application") !MESSAGE # Begin Project # PROP AllowPerConfigDependencies 0 # PROP Scc_ProjName "" # PROP Scc_LocalPath "" CPP=cl.exe RSC=rc.exe !IF "$(CFG)" == "xmlwf - Win32 Release" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 0 # PROP BASE Output_Dir ".\Release" # PROP BASE Intermediate_Dir ".\Release" # PROP BASE Target_Dir "." # PROP Use_MFC 0 # PROP Use_Debug_Libraries 0 # PROP Output_Dir ".\Release" # PROP Intermediate_Dir ".\Release" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "." # ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /YX /c # ADD CPP /nologo /MT /W3 /GX /O2 /I "..\lib" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "COMPILED_FROM_DSP" /FD /c # SUBTRACT CPP /YX /Yc /Yu # ADD BASE RSC /l 0x809 /d "NDEBUG" # ADD RSC /l 0x409 /d "NDEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 # ADD LINK32 setargv.obj kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:none /machine:I386 /out:"Release\xmlwf.exe" # SUBTRACT LINK32 /nodefaultlib !ELSEIF "$(CFG)" == "xmlwf - Win32 Debug" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 1 # PROP BASE Output_Dir ".\Debug" # PROP BASE Intermediate_Dir ".\Debug" # PROP BASE Target_Dir "." # PROP Use_MFC 0 # PROP Use_Debug_Libraries 1 # PROP Output_Dir ".\Debug" # PROP Intermediate_Dir ".\Debug" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "." # ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /YX /c # ADD CPP /nologo /MTd /W3 /GX /ZI /Od /I "..\lib" /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D "COMPILED_FROM_DSP" /FD /c # SUBTRACT CPP /Fr /YX # ADD BASE RSC /l 0x809 /d "_DEBUG" # ADD RSC /l 0x409 /d "_DEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 # ADD LINK32 setargv.obj kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /out:"Debug\xmlwf.exe" !ENDIF # Begin Target # Name "xmlwf - Win32 Release" # Name "xmlwf - Win32 Debug" # Begin Group "Source Files" # PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat;for;f90" # Begin Source File SOURCE=.\codepage.c # End Source File # Begin Source File SOURCE=.\readfilemap.c # PROP Exclude_From_Build 1 # End Source File # Begin Source File SOURCE=.\unixfilemap.c # PROP Exclude_From_Build 1 # End Source File # Begin Source File SOURCE=.\win32filemap.c # End Source File # Begin Source File SOURCE=.\xmlfile.c # End Source File # Begin Source File SOURCE=.\xmlwf.c # End Source File # End Group # Begin Group "Header Files" # PROP Default_Filter "h;hpp;hxx;hm;inl;fi;fd" # Begin Source File SOURCE=.\codepage.h # End Source File # Begin Source File SOURCE=.\xmlfile.h # End Source File # Begin Source File SOURCE=.\xmltchar.h # End Source File # End Group # Begin Group "Resource Files" # PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe" # End Group # End Target # End Project tla-1.3.5+dfsg/src/expat/xmlwf/xmlurl.h0000755000175000017500000000034010457621771016510 0ustar useruser#ifdef __cplusplus extern "C" { #endif int XML_URLInit(); void XML_URLUninit(); int XML_ProcessURL(XML_Parser parser, const XML_Char *url, unsigned flags); #ifdef __cplusplus } #endif tla-1.3.5+dfsg/src/expat/xmlwf/xmlmime.h0000755000175000017500000000075510457621771016647 0ustar useruser#ifdef __cplusplus extern "C" { #endif /* Registered charset names are at most 40 characters long. */ #define CHARSET_MAX 41 /* Figure out the charset to use from the ContentType. buf contains the body of the header field (the part after "Content-Type:"). charset gets the charset to use. It must be at least CHARSET_MAX chars long. charset will be empty if the default charset should be used. */ void getXMLCharset(const char *buf, char *charset); #ifdef __cplusplus } #endif tla-1.3.5+dfsg/src/expat/xmlwf/unixfilemap.c0000755000175000017500000000213210457621771017502 0ustar useruser/* Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd See the file COPYING for copying permission. */ #include #include #include #include #include #include #include #include #ifndef MAP_FILE #define MAP_FILE 0 #endif #include "filemap.h" int filemap(const char *name, void (*processor)(const void *, size_t, const char *, void *arg), void *arg) { int fd; size_t nbytes; struct stat sb; void *p; fd = open(name, O_RDONLY); if (fd < 0) { perror(name); return 0; } if (fstat(fd, &sb) < 0) { perror(name); close(fd); return 0; } if (!S_ISREG(sb.st_mode)) { close(fd); fprintf(stderr, "%s: not a regular file\n", name); return 0; } nbytes = sb.st_size; p = (void *)mmap((caddr_t)0, (size_t)nbytes, PROT_READ, MAP_FILE|MAP_PRIVATE, fd, (off_t)0); if (p == (void *)-1) { perror(name); close(fd); return 0; } processor(p, nbytes, name, arg); munmap((caddr_t)p, nbytes); close(fd); return 1; } tla-1.3.5+dfsg/src/expat/conftools/0000755000175000017500000000000010457621771015665 5ustar userusertla-1.3.5+dfsg/src/expat/conftools/config.guess0000755000175000017500000012625710457621771020222 0ustar useruser#! /bin/sh # Attempt to guess a canonical system name. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, # Inc. timestamp='2006-06-06' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA # 02110-1301, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Per Bothner . # Please send patches to . Submit a context # diff and a properly formatted ChangeLog entry. # # This script attempts to guess a canonical system name similar to # config.sub. If it succeeds, it prints the system name on stdout, and # exits with 0. Otherwise, it exits with 1. # # The plan is that this can be called by configure scripts if you # don't specify an explicit build system type. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] Output the configuration name of the system \`$me' is run on. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; * ) break ;; esac done if test $# != 0; then echo "$me: too many arguments$help" >&2 exit 1 fi trap 'exit 1' 1 2 15 # CC_FOR_BUILD -- compiler used by this script. Note that the use of a # compiler to aid in system detection is discouraged as it requires # temporary files to be created and, as you can see below, it is a # headache to deal with in a portable fashion. # Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still # use `HOST_CC' if defined, but it is deprecated. # Portable tmp directory creation inspired by the Autoconf team. set_cc_for_build=' trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; : ${TMPDIR=/tmp} ; { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; dummy=$tmp/dummy ; tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; case $CC_FOR_BUILD,$HOST_CC,$CC in ,,) echo "int x;" > $dummy.c ; for c in cc gcc c89 c99 ; do if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then CC_FOR_BUILD="$c"; break ; fi ; done ; if test x"$CC_FOR_BUILD" = x ; then CC_FOR_BUILD=no_compiler_found ; fi ;; ,,*) CC_FOR_BUILD=$CC ;; ,*,*) CC_FOR_BUILD=$HOST_CC ;; esac ; set_cc_for_build= ;' # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 1994-08-24) if (test -f /.attbin/uname) >/dev/null 2>&1 ; then PATH=$PATH:/.attbin ; export PATH fi UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown # Note: order is significant - the case branches are not exclusive. case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in *:NetBSD:*:*) # NetBSD (nbsd) targets should (where applicable) match one or # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently # switched to ELF, *-*-netbsd* would select the old # object file format. This provides both forward # compatibility and a consistent mechanism for selecting the # object file format. # # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". sysctl="sysctl -n hw.machine_arch" UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ /usr/sbin/$sysctl 2>/dev/null || echo unknown)` case "${UNAME_MACHINE_ARCH}" in armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; *) machine=${UNAME_MACHINE_ARCH}-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently, or will in the future. case "${UNAME_MACHINE_ARCH}" in arm*|i386|m68k|ns32k|sh3*|sparc|vax) eval $set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep __ELF__ >/dev/null then # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). # Return netbsd for either. FIX? os=netbsd else os=netbsdelf fi ;; *) os=netbsd ;; esac # The OS release # Debian GNU/NetBSD machines have a different userland, and # thus, need a distinct triplet. However, they do not need # kernel version information, so it can be replaced with a # suitable tag, in the style of linux-gnu. case "${UNAME_VERSION}" in Debian*) release='-gnu' ;; *) release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. echo "${machine}-${os}${release}" exit ;; *:OpenBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} exit ;; *:ekkoBSD:*:*) echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} exit ;; *:SolidBSD:*:*) echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} exit ;; macppc:MirBSD:*:*) echo powerppc-unknown-mirbsd${UNAME_RELEASE} exit ;; *:MirBSD:*:*) echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} exit ;; alpha:OSF1:*:*) case $UNAME_RELEASE in *4.0) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` ;; *5.*) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` ;; esac # According to Compaq, /usr/sbin/psrinfo has been available on # OSF/1 and Tru64 systems produced since 1995. I hope that # covers most systems running today. This code pipes the CPU # types through head -n 1, so we only detect the type of CPU 0. ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` case "$ALPHA_CPU_TYPE" in "EV4 (21064)") UNAME_MACHINE="alpha" ;; "EV4.5 (21064)") UNAME_MACHINE="alpha" ;; "LCA4 (21066/21068)") UNAME_MACHINE="alpha" ;; "EV5 (21164)") UNAME_MACHINE="alphaev5" ;; "EV5.6 (21164A)") UNAME_MACHINE="alphaev56" ;; "EV5.6 (21164PC)") UNAME_MACHINE="alphapca56" ;; "EV5.7 (21164PC)") UNAME_MACHINE="alphapca57" ;; "EV6 (21264)") UNAME_MACHINE="alphaev6" ;; "EV6.7 (21264A)") UNAME_MACHINE="alphaev67" ;; "EV6.8CB (21264C)") UNAME_MACHINE="alphaev68" ;; "EV6.8AL (21264B)") UNAME_MACHINE="alphaev68" ;; "EV6.8CX (21264D)") UNAME_MACHINE="alphaev68" ;; "EV6.9A (21264/EV69A)") UNAME_MACHINE="alphaev69" ;; "EV7 (21364)") UNAME_MACHINE="alphaev7" ;; "EV7.9 (21364A)") UNAME_MACHINE="alphaev79" ;; esac # A Pn.n version is a patched version. # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` exit ;; Alpha\ *:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # Should we change UNAME_MACHINE based on the output of uname instead # of the specific Alpha model? echo alpha-pc-interix exit ;; 21064:Windows_NT:50:3) echo alpha-dec-winnt3.5 exit ;; Amiga*:UNIX_System_V:4.0:*) echo m68k-unknown-sysv4 exit ;; *:[Aa]miga[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-amigaos exit ;; *:[Mm]orph[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-morphos exit ;; *:OS/390:*:*) echo i370-ibm-openedition exit ;; *:z/VM:*:*) echo s390-ibm-zvmoe exit ;; *:OS400:*:*) echo powerpc-ibm-os400 exit ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) echo arm-acorn-riscix${UNAME_RELEASE} exit ;; arm:riscos:*:*|arm:RISCOS:*:*) echo arm-unknown-riscos exit ;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) echo hppa1.1-hitachi-hiuxmpp exit ;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. if test "`(/bin/universe) 2>/dev/null`" = att ; then echo pyramid-pyramid-sysv3 else echo pyramid-pyramid-bsd fi exit ;; NILE*:*:*:dcosx) echo pyramid-pyramid-svr4 exit ;; DRS?6000:unix:4.0:6*) echo sparc-icl-nx6 exit ;; DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) case `/usr/bin/uname -p` in sparc) echo sparc-icl-nx7; exit ;; esac ;; sun4H:SunOS:5.*:*) echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; i86pc:SunOS:5.*:*) echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:*:*) case "`/usr/bin/arch -k`" in Series*|S4*) UNAME_RELEASE=`uname -v` ;; esac # Japanese Language versions have a version number like `4.1.3-JL'. echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` exit ;; sun3*:SunOS:*:*) echo m68k-sun-sunos${UNAME_RELEASE} exit ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 case "`/bin/arch`" in sun3) echo m68k-sun-sunos${UNAME_RELEASE} ;; sun4) echo sparc-sun-sunos${UNAME_RELEASE} ;; esac exit ;; aushp:SunOS:*:*) echo sparc-auspex-sunos${UNAME_RELEASE} exit ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not # "atarist" or "atariste" at least should have a processor # > m68000). The system name ranges from "MiNT" over "FreeMiNT" # to the lowercase version "mint" (or "freemint"). Finally # the system name "TOS" denotes a system which is actually not # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) echo m68k-milan-mint${UNAME_RELEASE} exit ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) echo m68k-hades-mint${UNAME_RELEASE} exit ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) echo m68k-unknown-mint${UNAME_RELEASE} exit ;; m68k:machten:*:*) echo m68k-apple-machten${UNAME_RELEASE} exit ;; powerpc:machten:*:*) echo powerpc-apple-machten${UNAME_RELEASE} exit ;; RISC*:Mach:*:*) echo mips-dec-mach_bsd4.3 exit ;; RISC*:ULTRIX:*:*) echo mips-dec-ultrix${UNAME_RELEASE} exit ;; VAX*:ULTRIX*:*:*) echo vax-dec-ultrix${UNAME_RELEASE} exit ;; 2020:CLIX:*:* | 2430:CLIX:*:*) echo clipper-intergraph-clix${UNAME_RELEASE} exit ;; mips:*:*:UMIPS | mips:*:*:RISCos) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #ifdef __cplusplus #include /* for printf() prototype */ int main (int argc, char *argv[]) { #else int main (argc, argv) int argc; char *argv[]; { #endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_SVR4) printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); #endif #endif exit (-1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && SYSTEM_NAME=`$dummy $dummyarg` && { echo "$SYSTEM_NAME"; exit; } echo mips-mips-riscos${UNAME_RELEASE} exit ;; Motorola:PowerMAX_OS:*:*) echo powerpc-motorola-powermax exit ;; Motorola:*:4.3:PL8-*) echo powerpc-harris-powermax exit ;; Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) echo powerpc-harris-powermax exit ;; Night_Hawk:Power_UNIX:*:*) echo powerpc-harris-powerunix exit ;; m88k:CX/UX:7*:*) echo m88k-harris-cxux7 exit ;; m88k:*:4*:R4*) echo m88k-motorola-sysv4 exit ;; m88k:*:3*:R3*) echo m88k-motorola-sysv3 exit ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] then if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ [ ${TARGET_BINARY_INTERFACE}x = x ] then echo m88k-dg-dgux${UNAME_RELEASE} else echo m88k-dg-dguxbcs${UNAME_RELEASE} fi else echo i586-dg-dgux${UNAME_RELEASE} fi exit ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) echo m88k-dolphin-sysv3 exit ;; M88*:*:R3*:*) # Delta 88k system running SVR3 echo m88k-motorola-sysv3 exit ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) echo m88k-tektronix-sysv3 exit ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) echo m68k-tektronix-bsd exit ;; *:IRIX*:*:*) echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` exit ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i*86:AIX:*:*) echo i386-ibm-aix exit ;; ia64:AIX:*:*) if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} exit ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include main() { if (!__power_pc()) exit(1); puts("powerpc-ibm-aix3.2.5"); exit(0); } EOF if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` then echo "$SYSTEM_NAME" else echo rs6000-ibm-aix3.2.5 fi elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then echo rs6000-ibm-aix3.2.4 else echo rs6000-ibm-aix3.2 fi exit ;; *:AIX:*:[45]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${IBM_ARCH}-ibm-aix${IBM_REV} exit ;; *:AIX:*:*) echo rs6000-ibm-aix exit ;; ibmrt:4.4BSD:*|romp-ibm:BSD:*) echo romp-ibm-bsd4.4 exit ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to exit ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) echo rs6000-bull-bosx exit ;; DPX/2?00:B.O.S.:*:*) echo m68k-bull-sysv3 exit ;; 9000/[34]??:4.3bsd:1.*:*) echo m68k-hp-bsd exit ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) echo m68k-hp-bsd4.4 exit ;; 9000/[34678]??:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` case "${UNAME_MACHINE}" in 9000/31? ) HP_ARCH=m68000 ;; 9000/[34]?? ) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) if [ -x /usr/bin/getconf ]; then sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` case "${sc_cpu_version}" in 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 case "${sc_kernel_bits}" in 32) HP_ARCH="hppa2.0n" ;; 64) HP_ARCH="hppa2.0w" ;; '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 esac ;; esac fi if [ "${HP_ARCH}" = "" ]; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #define _HPUX_SOURCE #include #include int main () { #if defined(_SC_KERNEL_BITS) long bits = sysconf(_SC_KERNEL_BITS); #endif long cpu = sysconf (_SC_CPU_VERSION); switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0"); break; case CPU_PA_RISC1_1: puts ("hppa1.1"); break; case CPU_PA_RISC2_0: #if defined(_SC_KERNEL_BITS) switch (bits) { case 64: puts ("hppa2.0w"); break; case 32: puts ("hppa2.0n"); break; default: puts ("hppa2.0"); break; } break; #else /* !defined(_SC_KERNEL_BITS) */ puts ("hppa2.0"); break; #endif default: puts ("hppa1.0"); break; } exit (0); } EOF (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` test -z "$HP_ARCH" && HP_ARCH=hppa fi ;; esac if [ ${HP_ARCH} = "hppa2.0w" ] then eval $set_cc_for_build # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler # generating 64-bit code. GNU and HP use different nomenclature: # # $ CC_FOR_BUILD=cc ./config.guess # => hppa2.0w-hp-hpux11.23 # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess # => hppa64-hp-hpux11.23 if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | grep __LP64__ >/dev/null then HP_ARCH="hppa2.0w" else HP_ARCH="hppa64" fi fi echo ${HP_ARCH}-hp-hpux${HPUX_REV} exit ;; ia64:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` echo ia64-hp-hpux${HPUX_REV} exit ;; 3050*:HI-UX:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include int main () { long cpu = sysconf (_SC_CPU_VERSION); /* The order matters, because CPU_IS_HP_MC68K erroneously returns true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct results, however. */ if (CPU_IS_PA_RISC (cpu)) { switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; default: puts ("hppa-hitachi-hiuxwe2"); break; } } else if (CPU_IS_HP_MC68K (cpu)) puts ("m68k-hitachi-hiuxwe2"); else puts ("unknown-hitachi-hiuxwe2"); exit (0); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } echo unknown-hitachi-hiuxwe2 exit ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) echo hppa1.1-hp-bsd exit ;; 9000/8??:4.3bsd:*:*) echo hppa1.0-hp-bsd exit ;; *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) echo hppa1.0-hp-mpeix exit ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) echo hppa1.1-hp-osf exit ;; hp8??:OSF1:*:*) echo hppa1.0-hp-osf exit ;; i*86:OSF1:*:*) if [ -x /usr/sbin/sysversion ] ; then echo ${UNAME_MACHINE}-unknown-osf1mk else echo ${UNAME_MACHINE}-unknown-osf1 fi exit ;; parisc*:Lites*:*:*) echo hppa1.1-hp-lites exit ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) echo c1-convex-bsd exit ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) echo c34-convex-bsd exit ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) echo c38-convex-bsd exit ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) echo c4-convex-bsd exit ;; CRAY*Y-MP:*:*:*) echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*[A-Z]90:*:*:*) echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ -e 's/\.[^.]*$/.X/' exit ;; CRAY*TS:*:*:*) echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*T3E:*:*:*) echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*SV1:*:*:*) echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; *:UNICOS/mp:*:*) echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; 5000:UNIX_System_V:4.*:*) FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} exit ;; sparc*:BSD/OS:*:*) echo sparc-unknown-bsdi${UNAME_RELEASE} exit ;; *:BSD/OS:*:*) echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} exit ;; *:FreeBSD:*:*) case ${UNAME_MACHINE} in pc98) echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; amd64) echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; *) echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; esac exit ;; i*:CYGWIN*:*) echo ${UNAME_MACHINE}-pc-cygwin exit ;; i*:MINGW*:*) echo ${UNAME_MACHINE}-pc-mingw32 exit ;; i*:windows32*:*) # uname -m includes "-pc" on this system. echo ${UNAME_MACHINE}-mingw32 exit ;; i*:PW*:*) echo ${UNAME_MACHINE}-pc-pw32 exit ;; x86:Interix*:[345]*) echo i586-pc-interix${UNAME_RELEASE} exit ;; EM64T:Interix*:[345]*) echo x86_64-unknown-interix${UNAME_RELEASE} exit ;; [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) echo i${UNAME_MACHINE}-pc-mks exit ;; i*:Windows_NT*:* | Pentium*:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we # UNAME_MACHINE based on the output of uname instead of i386? echo i586-pc-interix exit ;; i*:UWIN*:*) echo ${UNAME_MACHINE}-pc-uwin exit ;; amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) echo x86_64-unknown-cygwin exit ;; p*:CYGWIN*:*) echo powerpcle-unknown-cygwin exit ;; prep*:SunOS:5.*:*) echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; *:GNU:*:*) # the GNU system echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` exit ;; *:GNU/*:*:*) # other systems with GNU libc and userland echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu exit ;; i*86:Minix:*:*) echo ${UNAME_MACHINE}-pc-minix exit ;; arm*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; avr32*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; cris:Linux:*:*) echo cris-axis-linux-gnu exit ;; crisv32:Linux:*:*) echo crisv32-axis-linux-gnu exit ;; frv:Linux:*:*) echo frv-unknown-linux-gnu exit ;; ia64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; m32r*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; m68*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; mips:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef mips #undef mipsel #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=mipsel #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=mips #else CPU= #endif #endif EOF eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' /^CPU/{ s: ::g p }'`" test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } ;; mips64:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef mips64 #undef mips64el #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=mips64el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=mips64 #else CPU= #endif #endif EOF eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' /^CPU/{ s: ::g p }'`" test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } ;; or32:Linux:*:*) echo or32-unknown-linux-gnu exit ;; ppc:Linux:*:*) echo powerpc-unknown-linux-gnu exit ;; ppc64:Linux:*:*) echo powerpc64-unknown-linux-gnu exit ;; alpha:Linux:*:*) case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in EV5) UNAME_MACHINE=alphaev5 ;; EV56) UNAME_MACHINE=alphaev56 ;; PCA56) UNAME_MACHINE=alphapca56 ;; PCA57) UNAME_MACHINE=alphapca56 ;; EV6) UNAME_MACHINE=alphaev6 ;; EV67) UNAME_MACHINE=alphaev67 ;; EV68*) UNAME_MACHINE=alphaev68 ;; esac objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} exit ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in PA7*) echo hppa1.1-unknown-linux-gnu ;; PA8*) echo hppa2.0-unknown-linux-gnu ;; *) echo hppa-unknown-linux-gnu ;; esac exit ;; parisc64:Linux:*:* | hppa64:Linux:*:*) echo hppa64-unknown-linux-gnu exit ;; s390:Linux:*:* | s390x:Linux:*:*) echo ${UNAME_MACHINE}-ibm-linux exit ;; sh64*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; sh*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; sparc:Linux:*:* | sparc64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; vax:Linux:*:*) echo ${UNAME_MACHINE}-dec-linux-gnu exit ;; x86_64:Linux:*:*) echo x86_64-unknown-linux-gnu exit ;; i*86:Linux:*:*) # The BFD linker knows what the default object file format is, so # first see if it will tell us. cd to the root directory to prevent # problems with other programs or directories called `ld' in the path. # Set LC_ALL=C to ensure ld outputs messages in English. ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \ | sed -ne '/supported targets:/!d s/[ ][ ]*/ /g s/.*supported targets: *// s/ .*// p'` case "$ld_supported_targets" in elf32-i386) TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu" ;; a.out-i386-linux) echo "${UNAME_MACHINE}-pc-linux-gnuaout" exit ;; coff-i386) echo "${UNAME_MACHINE}-pc-linux-gnucoff" exit ;; "") # Either a pre-BFD a.out linker (linux-gnuoldld) or # one that does not give us useful --help. echo "${UNAME_MACHINE}-pc-linux-gnuoldld" exit ;; esac # Determine whether the default compiler is a.out or elf eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include #ifdef __ELF__ # ifdef __GLIBC__ # if __GLIBC__ >= 2 LIBC=gnu # else LIBC=gnulibc1 # endif # else LIBC=gnulibc1 # endif #else #if defined(__INTEL_COMPILER) || defined(__PGI) || defined(__SUNPRO_C) || defined(__SUNPRO_CC) LIBC=gnu #else LIBC=gnuaout #endif #endif #ifdef __dietlibc__ LIBC=dietlibc #endif EOF eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' /^LIBC/{ s: ::g p }'`" test x"${LIBC}" != x && { echo "${UNAME_MACHINE}-pc-linux-${LIBC}" exit } test x"${TENTATIVE}" != x && { echo "${TENTATIVE}"; exit; } ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. # earlier versions are messed up and put the nodename in both # sysname and nodename. echo i386-sequent-sysv4 exit ;; i*86:UNIX_SV:4.2MP:2.*) # Unixware is an offshoot of SVR4, but it has its own version # number series starting with 2... # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} exit ;; i*86:OS/2:*:*) # If we were able to find `uname', then EMX Unix compatibility # is probably installed. echo ${UNAME_MACHINE}-pc-os2-emx exit ;; i*86:XTS-300:*:STOP) echo ${UNAME_MACHINE}-unknown-stop exit ;; i*86:atheos:*:*) echo ${UNAME_MACHINE}-unknown-atheos exit ;; i*86:syllable:*:*) echo ${UNAME_MACHINE}-pc-syllable exit ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*) echo i386-unknown-lynxos${UNAME_RELEASE} exit ;; i*86:*DOS:*:*) echo ${UNAME_MACHINE}-pc-msdosdjgpp exit ;; i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} else echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} fi exit ;; i*86:*:5:[678]*) # UnixWare 7.x, OpenUNIX and OpenServer 6. case `/bin/uname -X | grep "^Machine"` in *486*) UNAME_MACHINE=i486 ;; *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; esac echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} exit ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ && UNAME_MACHINE=i586 (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ && UNAME_MACHINE=i686 (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 echo ${UNAME_MACHINE}-pc-sco$UNAME_REL else echo ${UNAME_MACHINE}-pc-sysv32 fi exit ;; pc:*:*:*) # Left here for compatibility: # uname -m prints for DJGPP always 'pc', but it prints nothing about # the processor, so we play safe by assuming i386. echo i386-pc-msdosdjgpp exit ;; Intel:Mach:3*:*) echo i386-pc-mach3 exit ;; paragon:*:*:*) echo i860-intel-osf1 exit ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 fi exit ;; mini*:CTIX:SYS*5:*) # "miniframe" echo m68010-convergent-sysv exit ;; mc68k:UNIX:SYSTEM5:3.51m) echo m68k-convergent-sysv exit ;; M680?0:D-NIX:5.3:*) echo m68k-diab-dnix exit ;; M68*:*:R3V[5678]*:*) test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) OS_REL='' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4; exit; } ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) echo m68k-unknown-lynxos${UNAME_RELEASE} exit ;; mc68030:UNIX_System_V:4.*:*) echo m68k-atari-sysv4 exit ;; TSUNAMI:LynxOS:2.*:*) echo sparc-unknown-lynxos${UNAME_RELEASE} exit ;; rs6000:LynxOS:2.*:*) echo rs6000-unknown-lynxos${UNAME_RELEASE} exit ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*) echo powerpc-unknown-lynxos${UNAME_RELEASE} exit ;; SM[BE]S:UNIX_SV:*:*) echo mips-dde-sysv${UNAME_RELEASE} exit ;; RM*:ReliantUNIX-*:*:*) echo mips-sni-sysv4 exit ;; RM*:SINIX-*:*:*) echo mips-sni-sysv4 exit ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` echo ${UNAME_MACHINE}-sni-sysv4 else echo ns32k-sni-sysv fi exit ;; PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort # says echo i586-unisys-sysv4 exit ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # How about differentiating between stratus architectures? -djm echo hppa1.1-stratus-sysv4 exit ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. echo i860-stratus-sysv4 exit ;; i*86:VOS:*:*) # From Paul.Green@stratus.com. echo ${UNAME_MACHINE}-stratus-vos exit ;; *:VOS:*:*) # From Paul.Green@stratus.com. echo hppa1.1-stratus-vos exit ;; mc68*:A/UX:*:*) echo m68k-apple-aux${UNAME_RELEASE} exit ;; news*:NEWS-OS:6*:*) echo mips-sony-newsos6 exit ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if [ -d /usr/nec ]; then echo mips-nec-sysv${UNAME_RELEASE} else echo mips-unknown-sysv${UNAME_RELEASE} fi exit ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. echo powerpc-be-beos exit ;; BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. echo powerpc-apple-beos exit ;; BePC:BeOS:*:*) # BeOS running on Intel PC compatible. echo i586-pc-beos exit ;; SX-4:SUPER-UX:*:*) echo sx4-nec-superux${UNAME_RELEASE} exit ;; SX-5:SUPER-UX:*:*) echo sx5-nec-superux${UNAME_RELEASE} exit ;; SX-6:SUPER-UX:*:*) echo sx6-nec-superux${UNAME_RELEASE} exit ;; Power*:Rhapsody:*:*) echo powerpc-apple-rhapsody${UNAME_RELEASE} exit ;; *:Rhapsody:*:*) echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} exit ;; *:Darwin:*:*) UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown case $UNAME_PROCESSOR in unknown) UNAME_PROCESSOR=powerpc ;; esac echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} exit ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` if test "$UNAME_PROCESSOR" = "x86"; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} exit ;; *:QNX:*:4*) echo i386-pc-qnx exit ;; NSE-?:NONSTOP_KERNEL:*:*) echo nse-tandem-nsk${UNAME_RELEASE} exit ;; NSR-?:NONSTOP_KERNEL:*:*) echo nsr-tandem-nsk${UNAME_RELEASE} exit ;; *:NonStop-UX:*:*) echo mips-compaq-nonstopux exit ;; BS2000:POSIX*:*:*) echo bs2000-siemens-sysv exit ;; DS/*:UNIX_System_V:*:*) echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} exit ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. if test "$cputype" = "386"; then UNAME_MACHINE=i386 else UNAME_MACHINE="$cputype" fi echo ${UNAME_MACHINE}-unknown-plan9 exit ;; *:TOPS-10:*:*) echo pdp10-unknown-tops10 exit ;; *:TENEX:*:*) echo pdp10-unknown-tenex exit ;; KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) echo pdp10-dec-tops20 exit ;; XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) echo pdp10-xkl-tops20 exit ;; *:TOPS-20:*:*) echo pdp10-unknown-tops20 exit ;; *:ITS:*:*) echo pdp10-unknown-its exit ;; SEI:*:*:SEIUX) echo mips-sei-seiux${UNAME_RELEASE} exit ;; *:DragonFly:*:*) echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` exit ;; *:*VMS:*:*) UNAME_MACHINE=`(uname -p) 2>/dev/null` case "${UNAME_MACHINE}" in A*) echo alpha-dec-vms ; exit ;; I*) echo ia64-dec-vms ; exit ;; V*) echo vax-dec-vms ; exit ;; esac ;; *:XENIX:*:SysV) echo i386-pc-xenix exit ;; i*86:skyos:*:*) echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' exit ;; i*86:rdos:*:*) echo ${UNAME_MACHINE}-pc-rdos exit ;; esac #echo '(No uname command or uname output not recognized.)' 1>&2 #echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 eval $set_cc_for_build cat >$dummy.c < # include #endif main () { #if defined (sony) #if defined (MIPSEB) /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, I don't know.... */ printf ("mips-sony-bsd\n"); exit (0); #else #include printf ("m68k-sony-newsos%s\n", #ifdef NEWSOS4 "4" #else "" #endif ); exit (0); #endif #endif #if defined (__arm) && defined (__acorn) && defined (__unix) printf ("arm-acorn-riscix\n"); exit (0); #endif #if defined (hp300) && !defined (hpux) printf ("m68k-hp-bsd\n"); exit (0); #endif #if defined (NeXT) #if !defined (__ARCHITECTURE__) #define __ARCHITECTURE__ "m68k" #endif int version; version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; if (version < 4) printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); else printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); exit (0); #endif #if defined (MULTIMAX) || defined (n16) #if defined (UMAXV) printf ("ns32k-encore-sysv\n"); exit (0); #else #if defined (CMU) printf ("ns32k-encore-mach\n"); exit (0); #else printf ("ns32k-encore-bsd\n"); exit (0); #endif #endif #endif #if defined (__386BSD__) printf ("i386-pc-bsd\n"); exit (0); #endif #if defined (sequent) #if defined (i386) printf ("i386-sequent-dynix\n"); exit (0); #endif #if defined (ns32000) printf ("ns32k-sequent-dynix\n"); exit (0); #endif #endif #if defined (_SEQUENT_) struct utsname un; uname(&un); if (strncmp(un.version, "V2", 2) == 0) { printf ("i386-sequent-ptx2\n"); exit (0); } if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ printf ("i386-sequent-ptx1\n"); exit (0); } printf ("i386-sequent-ptx\n"); exit (0); #endif #if defined (vax) # if !defined (ultrix) # include # if defined (BSD) # if BSD == 43 printf ("vax-dec-bsd4.3\n"); exit (0); # else # if BSD == 199006 printf ("vax-dec-bsd4.3reno\n"); exit (0); # else printf ("vax-dec-bsd\n"); exit (0); # endif # endif # else printf ("vax-dec-bsd\n"); exit (0); # endif # else printf ("vax-dec-ultrix\n"); exit (0); # endif #endif #if defined (alliant) && defined (i860) printf ("i860-alliant-bsd\n"); exit (0); #endif exit (1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } # Apollos put the system type in the environment. test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } # Convex versions that predate uname can use getsysinfo(1) if [ -x /usr/convex/getsysinfo ] then case `getsysinfo -f cpu_type` in c1*) echo c1-convex-bsd exit ;; c2*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; c34*) echo c34-convex-bsd exit ;; c38*) echo c38-convex-bsd exit ;; c4*) echo c4-convex-bsd exit ;; esac fi cat >&2 < in order to provide the needed information to handle your system. config.guess timestamp = $timestamp uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` /bin/uname -X = `(/bin/uname -X) 2>/dev/null` hostinfo = `(hostinfo) 2>/dev/null` /bin/universe = `(/bin/universe) 2>/dev/null` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` /bin/arch = `(/bin/arch) 2>/dev/null` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` UNAME_MACHINE = ${UNAME_MACHINE} UNAME_RELEASE = ${UNAME_RELEASE} UNAME_SYSTEM = ${UNAME_SYSTEM} UNAME_VERSION = ${UNAME_VERSION} EOF exit 1 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: tla-1.3.5+dfsg/src/expat/conftools/mkinstalldirs0000755000175000017500000000132610457621771020475 0ustar useruser#! /bin/sh # mkinstalldirs --- make directory hierarchy # Author: Noah Friedman # Created: 1993-05-16 # Public domain # $Id: mkinstalldirs,v 1.1 2000/09/18 16:26:21 coopercc Exp $ errstatus=0 for file do set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'` shift pathcomp= for d do pathcomp="$pathcomp$d" case "$pathcomp" in -* ) pathcomp=./$pathcomp ;; esac if test ! -d "$pathcomp"; then echo "mkdir $pathcomp" mkdir "$pathcomp" || lasterr=$? if test ! -d "$pathcomp"; then errstatus=$lasterr fi fi pathcomp="$pathcomp/" done done exit $errstatus # mkinstalldirs ends here tla-1.3.5+dfsg/src/expat/conftools/get-version.sh0000755000175000017500000000236210457621771020471 0ustar useruser#!/bin/sh # # USAGE: get-version.sh path/to/expat.h # # This script will print Expat's version number on stdout. For example: # # $ ./conftools/get-version.sh ./lib/expat.h # 1.95.3 # $ # if test $# = 0; then echo "ERROR: pathname for expat.h was not provided." echo "" echo "USAGE: $0 path/to/expat.h" exit 1 fi if test $# != 1; then echo "ERROR: too many arguments were provided." echo "" echo "USAGE: $0 path/to/expat.h" exit 1 fi hdr="$1" if test ! -r "$hdr"; then echo "ERROR: '$hdr' does not exist, or is not readable." exit 1 fi MAJOR_VERSION="`sed -n -e '/MAJOR_VERSION/s/[^0-9]*//gp' $hdr`" MINOR_VERSION="`sed -n -e '/MINOR_VERSION/s/[^0-9]*//gp' $hdr`" MICRO_VERSION="`sed -n -e '/MICRO_VERSION/s/[^0-9]*//gp' $hdr`" # Determine how to tell echo not to print the trailing \n. This is # similar to Autoconf's @ECHO_C@ and @ECHO_N@; however, we don't # generate this file via autoconf (in fact, get-version.sh is used # to *create* ./configure), so we just do something similar inline. case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in *c*,-n*) ECHO_N= ECHO_C=' ' ;; *c*,* ) ECHO_N=-n ECHO_C= ;; *) ECHO_N= ECHO_C='\c' ;; esac echo $ECHO_N "$MAJOR_VERSION.$MINOR_VERSION.$MICRO_VERSION$ECHO_C" tla-1.3.5+dfsg/src/expat/conftools/config.sub0000755000175000017500000007726410457621771017670 0ustar useruser#! /bin/sh # Configuration validation subroutine script. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, # Inc. timestamp='2006-06-06' # This file is (in principle) common to ALL GNU software. # The presence of a machine in this file suggests that SOME GNU software # can handle that machine. It does not imply ALL GNU software can. # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA # 02110-1301, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Please send patches to . Submit a context # diff and a properly formatted ChangeLog entry. # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. # Otherwise, we print the canonical config type on stdout and succeed. # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases # that are meaningful with *any* GNU software. # Each package is responsible for reporting which valid configurations # it does not support. The user should be able to distinguish # a failure to support a valid configuration from a meaningless # configuration. # The goal of this file is to map all the various variations of a given # machine specification into a single specification in the form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or in some cases, the newer four-part form: # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # It is wrong to echo any other type of specification. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] CPU-MFR-OPSYS $0 [OPTION] ALIAS Canonicalize a configuration name. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.sub ($timestamp) Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" exit 1 ;; *local*) # First pass through any local machine types. echo $1 exit ;; * ) break ;; esac done case $# in 0) echo "$me: missing argument$help" >&2 exit 1;; 1) ;; *) echo "$me: too many arguments$help" >&2 exit 1;; esac # Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). # Here we must recognize all the valid KERNEL-OS combinations. maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` case $maybe_os in nto-qnx* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | \ uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \ storm-chaos* | os2-emx* | rtmk-nova*) os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ;; *) basic_machine=`echo $1 | sed 's/-[^-]*$//'` if [ $basic_machine != $1 ] then os=`echo $1 | sed 's/.*-/-/'` else os=; fi ;; esac ### Let's recognize common machines as not being operating systems so ### that things like config.sub decstation-3100 work. We also ### recognize some manufacturers as not being operating systems, so we ### can provide default operating systems below. case $os in -sun*os*) # Prevent following clause from handling this invalid input. ;; -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ -apple | -axis | -knuth | -cray) os= basic_machine=$1 ;; -sim | -cisco | -oki | -wec | -winbond) os= basic_machine=$1 ;; -scout) ;; -wrs) os=-vxworks basic_machine=$1 ;; -chorusos*) os=-chorusos basic_machine=$1 ;; -chorusrdb) os=-chorusrdb basic_machine=$1 ;; -hiux*) os=-hiuxwe2 ;; -sco6) os=-sco5v6 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5) os=-sco3.2v5 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco4) os=-sco3.2v4 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2.[4-9]*) os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2v[4-9]*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5v6*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco*) os=-sco3.2v2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -udk*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -isc) os=-isc2.2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -clix*) basic_machine=clipper-intergraph ;; -isc*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -lynx*) os=-lynxos ;; -ptx*) basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` ;; -windowsnt*) os=`echo $os | sed -e 's/windowsnt/winnt/'` ;; -psos*) os=-psos ;; -mint | -mint[0-9]*) basic_machine=m68k-atari os=-mint ;; esac # Decode aliases for certain CPU-COMPANY combinations. case $basic_machine in # Recognize the basic CPU types without company name. # Some are omitted here because they have special meanings below. 1750a | 580 \ | a29k \ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ | am33_2.0 \ | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \ | bfin \ | c4x | clipper \ | d10v | d30v | dlx | dsp16xx \ | fr30 | frv \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | i370 | i860 | i960 | ia64 \ | ip2k | iq2000 \ | m32c | m32r | m32rle | m68000 | m68k | m88k \ | maxq | mb | microblaze | mcore \ | mips | mipsbe | mipseb | mipsel | mipsle \ | mips16 \ | mips64 | mips64el \ | mips64vr | mips64vrel \ | mips64orion | mips64orionel \ | mips64vr4100 | mips64vr4100el \ | mips64vr4300 | mips64vr4300el \ | mips64vr5000 | mips64vr5000el \ | mips64vr5900 | mips64vr5900el \ | mipsisa32 | mipsisa32el \ | mipsisa32r2 | mipsisa32r2el \ | mipsisa64 | mipsisa64el \ | mipsisa64r2 | mipsisa64r2el \ | mipsisa64sb1 | mipsisa64sb1el \ | mipsisa64sr71k | mipsisa64sr71kel \ | mipstx39 | mipstx39el \ | mn10200 | mn10300 \ | mt \ | msp430 \ | nios | nios2 \ | ns16k | ns32k \ | or32 \ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ | pyramid \ | sh | sh[1234] | sh[24]a | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ | sh64 | sh64le \ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ | spu | strongarm \ | tahoe | thumb | tic4x | tic80 | tron \ | v850 | v850e \ | we32k \ | x86 | xscale | xscalee[bl] | xstormy16 | xtensa \ | z8k) basic_machine=$basic_machine-unknown ;; m6811 | m68hc11 | m6812 | m68hc12) # Motorola 68HC11/12. basic_machine=$basic_machine-unknown os=-none ;; m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) ;; ms1) basic_machine=mt-unknown ;; # We use `pc' rather than `unknown' # because (1) that's what they normally are, and # (2) the word "unknown" tends to confuse beginning users. i*86 | x86_64) basic_machine=$basic_machine-pc ;; # Object if more than one company name word. *-*-*) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; # Recognize the basic CPU types with company name. 580-* \ | a29k-* \ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ | avr-* | avr32-* \ | bfin-* | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \ | clipper-* | craynv-* | cydra-* \ | d10v-* | d30v-* | dlx-* \ | elxsi-* \ | f30[01]-* | f700-* | fr30-* | frv-* | fx80-* \ | h8300-* | h8500-* \ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ | i*86-* | i860-* | i960-* | ia64-* \ | ip2k-* | iq2000-* \ | m32c-* | m32r-* | m32rle-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ | m88110-* | m88k-* | maxq-* | mcore-* \ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ | mips16-* \ | mips64-* | mips64el-* \ | mips64vr-* | mips64vrel-* \ | mips64orion-* | mips64orionel-* \ | mips64vr4100-* | mips64vr4100el-* \ | mips64vr4300-* | mips64vr4300el-* \ | mips64vr5000-* | mips64vr5000el-* \ | mips64vr5900-* | mips64vr5900el-* \ | mipsisa32-* | mipsisa32el-* \ | mipsisa32r2-* | mipsisa32r2el-* \ | mipsisa64-* | mipsisa64el-* \ | mipsisa64r2-* | mipsisa64r2el-* \ | mipsisa64sb1-* | mipsisa64sb1el-* \ | mipsisa64sr71k-* | mipsisa64sr71kel-* \ | mipstx39-* | mipstx39el-* \ | mmix-* \ | mt-* \ | msp430-* \ | nios-* | nios2-* \ | none-* | np1-* | ns16k-* | ns32k-* \ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ | pyramid-* \ | romp-* | rs6000-* \ | sh-* | sh[1234]-* | sh[24]a-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ | sparclite-* \ | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | strongarm-* | sv1-* | sx?-* \ | tahoe-* | thumb-* \ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ | tron-* \ | v850-* | v850e-* | vax-* \ | we32k-* \ | x86-* | x86_64-* | xps100-* | xscale-* | xscalee[bl]-* \ | xstormy16-* | xtensa-* \ | ymp-* \ | z8k-*) ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. 386bsd) basic_machine=i386-unknown os=-bsd ;; 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) basic_machine=m68000-att ;; 3b*) basic_machine=we32k-att ;; a29khif) basic_machine=a29k-amd os=-udi ;; abacus) basic_machine=abacus-unknown ;; adobe68k) basic_machine=m68010-adobe os=-scout ;; alliant | fx80) basic_machine=fx80-alliant ;; altos | altos3068) basic_machine=m68k-altos ;; am29k) basic_machine=a29k-none os=-bsd ;; amd64) basic_machine=x86_64-pc ;; amd64-*) basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; amdahl) basic_machine=580-amdahl os=-sysv ;; amiga | amiga-*) basic_machine=m68k-unknown ;; amigaos | amigados) basic_machine=m68k-unknown os=-amigaos ;; amigaunix | amix) basic_machine=m68k-unknown os=-sysv4 ;; apollo68) basic_machine=m68k-apollo os=-sysv ;; apollo68bsd) basic_machine=m68k-apollo os=-bsd ;; aux) basic_machine=m68k-apple os=-aux ;; balance) basic_machine=ns32k-sequent os=-dynix ;; c90) basic_machine=c90-cray os=-unicos ;; convex-c1) basic_machine=c1-convex os=-bsd ;; convex-c2) basic_machine=c2-convex os=-bsd ;; convex-c32) basic_machine=c32-convex os=-bsd ;; convex-c34) basic_machine=c34-convex os=-bsd ;; convex-c38) basic_machine=c38-convex os=-bsd ;; cray | j90) basic_machine=j90-cray os=-unicos ;; craynv) basic_machine=craynv-cray os=-unicosmp ;; cr16c) basic_machine=cr16c-unknown os=-elf ;; crds | unos) basic_machine=m68k-crds ;; crisv32 | crisv32-* | etraxfs*) basic_machine=crisv32-axis ;; cris | cris-* | etrax*) basic_machine=cris-axis ;; crx) basic_machine=crx-unknown os=-elf ;; da30 | da30-*) basic_machine=m68k-da30 ;; decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) basic_machine=mips-dec ;; decsystem10* | dec10*) basic_machine=pdp10-dec os=-tops10 ;; decsystem20* | dec20*) basic_machine=pdp10-dec os=-tops20 ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) basic_machine=m68k-motorola ;; delta88) basic_machine=m88k-motorola os=-sysv3 ;; djgpp) basic_machine=i586-pc os=-msdosdjgpp ;; dpx20 | dpx20-*) basic_machine=rs6000-bull os=-bosx ;; dpx2* | dpx2*-bull) basic_machine=m68k-bull os=-sysv3 ;; ebmon29k) basic_machine=a29k-amd os=-ebmon ;; elxsi) basic_machine=elxsi-elxsi os=-bsd ;; encore | umax | mmax) basic_machine=ns32k-encore ;; es1800 | OSE68k | ose68k | ose | OSE) basic_machine=m68k-ericsson os=-ose ;; fx2800) basic_machine=i860-alliant ;; genix) basic_machine=ns32k-ns ;; gmicro) basic_machine=tron-gmicro os=-sysv ;; go32) basic_machine=i386-pc os=-go32 ;; h3050r* | hiux*) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; h8300hms) basic_machine=h8300-hitachi os=-hms ;; h8300xray) basic_machine=h8300-hitachi os=-xray ;; h8500hms) basic_machine=h8500-hitachi os=-hms ;; harris) basic_machine=m88k-harris os=-sysv3 ;; hp300-*) basic_machine=m68k-hp ;; hp300bsd) basic_machine=m68k-hp os=-bsd ;; hp300hpux) basic_machine=m68k-hp os=-hpux ;; hp3k9[0-9][0-9] | hp9[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k2[0-9][0-9] | hp9k31[0-9]) basic_machine=m68000-hp ;; hp9k3[2-9][0-9]) basic_machine=m68k-hp ;; hp9k6[0-9][0-9] | hp6[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k7[0-79][0-9] | hp7[0-79][0-9]) basic_machine=hppa1.1-hp ;; hp9k78[0-9] | hp78[0-9]) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[0-9][13679] | hp8[0-9][13679]) basic_machine=hppa1.1-hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) basic_machine=hppa1.0-hp ;; hppa-next) os=-nextstep3 ;; hppaosf) basic_machine=hppa1.1-hp os=-osf ;; hppro) basic_machine=hppa1.1-hp os=-proelf ;; i370-ibm* | ibm*) basic_machine=i370-ibm ;; # I'm not sure what "Sysv32" means. Should this be sysv3.2? i*86v32) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv32 ;; i*86v4*) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv4 ;; i*86v) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv ;; i*86sol2) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-solaris2 ;; i386mach) basic_machine=i386-mach os=-mach ;; i386-vsta | vsta) basic_machine=i386-unknown os=-vsta ;; iris | iris4d) basic_machine=mips-sgi case $os in -irix*) ;; *) os=-irix4 ;; esac ;; isi68 | isi) basic_machine=m68k-isi os=-sysv ;; m88k-omron*) basic_machine=m88k-omron ;; magnum | m3230) basic_machine=mips-mips os=-sysv ;; merlin) basic_machine=ns32k-utek os=-sysv ;; mingw32) basic_machine=i386-pc os=-mingw32 ;; miniframe) basic_machine=m68000-convergent ;; *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) basic_machine=m68k-atari os=-mint ;; mips3*-*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` ;; mips3*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown ;; monitor) basic_machine=m68k-rom68k os=-coff ;; morphos) basic_machine=powerpc-unknown os=-morphos ;; msdos) basic_machine=i386-pc os=-msdos ;; ms1-*) basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` ;; mvs) basic_machine=i370-ibm os=-mvs ;; ncr3000) basic_machine=i486-ncr os=-sysv4 ;; netbsd386) basic_machine=i386-unknown os=-netbsd ;; netwinder) basic_machine=armv4l-rebel os=-linux ;; news | news700 | news800 | news900) basic_machine=m68k-sony os=-newsos ;; news1000) basic_machine=m68030-sony os=-newsos ;; news-3600 | risc-news) basic_machine=mips-sony os=-newsos ;; necv70) basic_machine=v70-nec os=-sysv ;; next | m*-next ) basic_machine=m68k-next case $os in -nextstep* ) ;; -ns2*) os=-nextstep2 ;; *) os=-nextstep3 ;; esac ;; nh3000) basic_machine=m68k-harris os=-cxux ;; nh[45]000) basic_machine=m88k-harris os=-cxux ;; nindy960) basic_machine=i960-intel os=-nindy ;; mon960) basic_machine=i960-intel os=-mon960 ;; nonstopux) basic_machine=mips-compaq os=-nonstopux ;; np1) basic_machine=np1-gould ;; nsr-tandem) basic_machine=nsr-tandem ;; op50n-* | op60c-*) basic_machine=hppa1.1-oki os=-proelf ;; openrisc | openrisc-*) basic_machine=or32-unknown ;; os400) basic_machine=powerpc-ibm os=-os400 ;; OSE68000 | ose68000) basic_machine=m68000-ericsson os=-ose ;; os68k) basic_machine=m68k-none os=-os68k ;; pa-hitachi) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; paragon) basic_machine=i860-intel os=-osf ;; pbd) basic_machine=sparc-tti ;; pbb) basic_machine=m68k-tti ;; pc532 | pc532-*) basic_machine=ns32k-pc532 ;; pc98) basic_machine=i386-pc ;; pc98-*) basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium | p5 | k5 | k6 | nexgen | viac3) basic_machine=i586-pc ;; pentiumpro | p6 | 6x86 | athlon | athlon_*) basic_machine=i686-pc ;; pentiumii | pentium2 | pentiumiii | pentium3) basic_machine=i686-pc ;; pentium4) basic_machine=i786-pc ;; pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumpro-* | p6-* | 6x86-* | athlon-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium4-*) basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pn) basic_machine=pn-gould ;; power) basic_machine=power-ibm ;; ppc) basic_machine=powerpc-unknown ;; ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppcle | powerpclittle | ppc-le | powerpc-little) basic_machine=powerpcle-unknown ;; ppcle-* | powerpclittle-*) basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64) basic_machine=powerpc64-unknown ;; ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64le | powerpc64little | ppc64-le | powerpc64-little) basic_machine=powerpc64le-unknown ;; ppc64le-* | powerpc64little-*) basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ps2) basic_machine=i386-ibm ;; pw32) basic_machine=i586-unknown os=-pw32 ;; rdos) basic_machine=i386-pc os=-rdos ;; rom68k) basic_machine=m68k-rom68k os=-coff ;; rm[46]00) basic_machine=mips-siemens ;; rtpc | rtpc-*) basic_machine=romp-ibm ;; s390 | s390-*) basic_machine=s390-ibm ;; s390x | s390x-*) basic_machine=s390x-ibm ;; sa29200) basic_machine=a29k-amd os=-udi ;; sb1) basic_machine=mipsisa64sb1-unknown ;; sb1el) basic_machine=mipsisa64sb1el-unknown ;; sei) basic_machine=mips-sei os=-seiux ;; sequent) basic_machine=i386-sequent ;; sh) basic_machine=sh-hitachi os=-hms ;; sh64) basic_machine=sh64-unknown ;; sparclite-wrs | simso-wrs) basic_machine=sparclite-wrs os=-vxworks ;; sps7) basic_machine=m68k-bull os=-sysv2 ;; spur) basic_machine=spur-unknown ;; st2000) basic_machine=m68k-tandem ;; stratus) basic_machine=i860-stratus os=-sysv4 ;; sun2) basic_machine=m68000-sun ;; sun2os3) basic_machine=m68000-sun os=-sunos3 ;; sun2os4) basic_machine=m68000-sun os=-sunos4 ;; sun3os3) basic_machine=m68k-sun os=-sunos3 ;; sun3os4) basic_machine=m68k-sun os=-sunos4 ;; sun4os3) basic_machine=sparc-sun os=-sunos3 ;; sun4os4) basic_machine=sparc-sun os=-sunos4 ;; sun4sol2) basic_machine=sparc-sun os=-solaris2 ;; sun3 | sun3-*) basic_machine=m68k-sun ;; sun4) basic_machine=sparc-sun ;; sun386 | sun386i | roadrunner) basic_machine=i386-sun ;; sv1) basic_machine=sv1-cray os=-unicos ;; symmetry) basic_machine=i386-sequent os=-dynix ;; t3e) basic_machine=alphaev5-cray os=-unicos ;; t90) basic_machine=t90-cray os=-unicos ;; tic54x | c54x*) basic_machine=tic54x-unknown os=-coff ;; tic55x | c55x*) basic_machine=tic55x-unknown os=-coff ;; tic6x | c6x*) basic_machine=tic6x-unknown os=-coff ;; tx39) basic_machine=mipstx39-unknown ;; tx39el) basic_machine=mipstx39el-unknown ;; toad1) basic_machine=pdp10-xkl os=-tops20 ;; tower | tower-32) basic_machine=m68k-ncr ;; tpf) basic_machine=s390x-ibm os=-tpf ;; udi29k) basic_machine=a29k-amd os=-udi ;; ultra3) basic_machine=a29k-nyu os=-sym1 ;; v810 | necv810) basic_machine=v810-nec os=-none ;; vaxv) basic_machine=vax-dec os=-sysv ;; vms) basic_machine=vax-dec os=-vms ;; vpp*|vx|vx-*) basic_machine=f301-fujitsu ;; vxworks960) basic_machine=i960-wrs os=-vxworks ;; vxworks68) basic_machine=m68k-wrs os=-vxworks ;; vxworks29k) basic_machine=a29k-wrs os=-vxworks ;; w65*) basic_machine=w65-wdc os=-none ;; w89k-*) basic_machine=hppa1.1-winbond os=-proelf ;; xbox) basic_machine=i686-pc os=-mingw32 ;; xps | xps100) basic_machine=xps100-honeywell ;; ymp) basic_machine=ymp-cray os=-unicos ;; z8k-*-coff) basic_machine=z8k-unknown os=-sim ;; none) basic_machine=none-none os=-none ;; # Here we handle the default manufacturer of certain CPU types. It is in # some cases the only manufacturer, in others, it is the most popular. w89k) basic_machine=hppa1.1-winbond ;; op50n) basic_machine=hppa1.1-oki ;; op60c) basic_machine=hppa1.1-oki ;; romp) basic_machine=romp-ibm ;; mmix) basic_machine=mmix-knuth ;; rs6000) basic_machine=rs6000-ibm ;; vax) basic_machine=vax-dec ;; pdp10) # there are many clones, so DEC is not a safe bet basic_machine=pdp10-unknown ;; pdp11) basic_machine=pdp11-dec ;; we32k) basic_machine=we32k-att ;; sh[1234] | sh[24]a | sh[34]eb | sh[1234]le | sh[23]ele) basic_machine=sh-unknown ;; sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) basic_machine=sparc-sun ;; cydra) basic_machine=cydra-cydrome ;; orion) basic_machine=orion-highlevel ;; orion105) basic_machine=clipper-highlevel ;; mac | mpw | mac-mpw) basic_machine=m68k-apple ;; pmac | pmac-mpw) basic_machine=powerpc-apple ;; *-unknown) # Make sure to match an already-canonicalized machine name. ;; *) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; esac # Here we canonicalize certain aliases for manufacturers. case $basic_machine in *-digital*) basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` ;; *-commodore*) basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` ;; *) ;; esac # Decode manufacturer-specific aliases for certain operating systems. if [ x"$os" != x"" ] then case $os in # First match some system type aliases # that might get confused with valid system types. # -solaris* is a basic system type, with this one exception. -solaris1 | -solaris1.*) os=`echo $os | sed -e 's|solaris1|sunos4|'` ;; -solaris) os=-solaris2 ;; -svr4*) os=-sysv4 ;; -unixware*) os=-sysv4.2uw ;; -gnu/linux*) os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` ;; # First accept the basic system types. # The portable systems comes first. # Each alternative MUST END IN A *, to match a version number. # -sysv* is not here because it comes later, after sysvr4. -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ | -aos* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ | -openbsd* | -solidbsd* \ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ | -chorusos* | -chorusrdb* \ | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \ | -uxpv* | -beos* | -mpeix* | -udk* \ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ | -skyos* | -haiku* | -rdos*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) case $basic_machine in x86-* | i*86-*) ;; *) os=-nto$os ;; esac ;; -nto-qnx*) ;; -nto*) os=`echo $os | sed -e 's|nto|nto-qnx|'` ;; -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) ;; -mac*) os=`echo $os | sed -e 's|mac|macos|'` ;; -linux-dietlibc) os=-linux-dietlibc ;; -linux*) os=`echo $os | sed -e 's|linux|linux-gnu|'` ;; -sunos5*) os=`echo $os | sed -e 's|sunos5|solaris2|'` ;; -sunos6*) os=`echo $os | sed -e 's|sunos6|solaris3|'` ;; -opened*) os=-openedition ;; -os400*) os=-os400 ;; -wince*) os=-wince ;; -osfrose*) os=-osfrose ;; -osf*) os=-osf ;; -utek*) os=-bsd ;; -dynix*) os=-bsd ;; -acis*) os=-aos ;; -atheos*) os=-atheos ;; -syllable*) os=-syllable ;; -386bsd) os=-bsd ;; -ctix* | -uts*) os=-sysv ;; -nova*) os=-rtmk-nova ;; -ns2 ) os=-nextstep2 ;; -nsk*) os=-nsk ;; # Preserve the version number of sinix5. -sinix5.*) os=`echo $os | sed -e 's|sinix|sysv|'` ;; -sinix*) os=-sysv4 ;; -tpf*) os=-tpf ;; -triton*) os=-sysv3 ;; -oss*) os=-sysv3 ;; -svr4) os=-sysv4 ;; -svr3) os=-sysv3 ;; -sysvr4) os=-sysv4 ;; # This must come after -sysvr4. -sysv*) ;; -ose*) os=-ose ;; -es1800*) os=-ose ;; -xenix) os=-xenix ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) os=-mint ;; -aros*) os=-aros ;; -kaos*) os=-kaos ;; -zvmoe) os=-zvmoe ;; -none) ;; *) # Get rid of the `-' at the beginning of $os. os=`echo $os | sed 's/[^-]*-//'` echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 exit 1 ;; esac else # Here we handle the default operating systems that come with various machines. # The value should be what the vendor currently ships out the door with their # machine or put another way, the most popular os provided with the machine. # Note that if you're going to try to match "-MANUFACTURER" here (say, # "-sun"), then you have to tell the case statement up towards the top # that MANUFACTURER isn't an operating system. Otherwise, code above # will signal an error saying that MANUFACTURER isn't an operating # system, and we'll never get to this point. case $basic_machine in spu-*) os=-elf ;; *-acorn) os=-riscix1.2 ;; arm*-rebel) os=-linux ;; arm*-semi) os=-aout ;; c4x-* | tic4x-*) os=-coff ;; # This must come before the *-dec entry. pdp10-*) os=-tops20 ;; pdp11-*) os=-none ;; *-dec | vax-*) os=-ultrix4.2 ;; m68*-apollo) os=-domain ;; i386-sun) os=-sunos4.0.2 ;; m68000-sun) os=-sunos3 # This also exists in the configure program, but was not the # default. # os=-sunos4 ;; m68*-cisco) os=-aout ;; mips*-cisco) os=-elf ;; mips*-*) os=-elf ;; or32-*) os=-coff ;; *-tti) # must be before sparc entry or we get the wrong os. os=-sysv3 ;; sparc-* | *-sun) os=-sunos4.1.1 ;; *-be) os=-beos ;; *-haiku) os=-haiku ;; *-ibm) os=-aix ;; *-knuth) os=-mmixware ;; *-wec) os=-proelf ;; *-winbond) os=-proelf ;; *-oki) os=-proelf ;; *-hp) os=-hpux ;; *-hitachi) os=-hiux ;; i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) os=-sysv ;; *-cbm) os=-amigaos ;; *-dg) os=-dgux ;; *-dolphin) os=-sysv3 ;; m68k-ccur) os=-rtu ;; m88k-omron*) os=-luna ;; *-next ) os=-nextstep ;; *-sequent) os=-ptx ;; *-crds) os=-unos ;; *-ns) os=-genix ;; i370-*) os=-mvs ;; *-next) os=-nextstep3 ;; *-gould) os=-sysv ;; *-highlevel) os=-bsd ;; *-encore) os=-bsd ;; *-sgi) os=-irix ;; *-siemens) os=-sysv4 ;; *-masscomp) os=-rtu ;; f30[01]-fujitsu | f700-fujitsu) os=-uxpv ;; *-rom68k) os=-coff ;; *-*bug) os=-coff ;; *-apple) os=-macos ;; *-atari*) os=-mint ;; *) os=-none ;; esac fi # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. vendor=unknown case $basic_machine in *-unknown) case $os in -riscix*) vendor=acorn ;; -sunos*) vendor=sun ;; -aix*) vendor=ibm ;; -beos*) vendor=be ;; -hpux*) vendor=hp ;; -mpeix*) vendor=hp ;; -hiux*) vendor=hitachi ;; -unos*) vendor=crds ;; -dgux*) vendor=dg ;; -luna*) vendor=omron ;; -genix*) vendor=ns ;; -mvs* | -opened*) vendor=ibm ;; -os400*) vendor=ibm ;; -ptx*) vendor=sequent ;; -tpf*) vendor=ibm ;; -vxsim* | -vxworks* | -windiss*) vendor=wrs ;; -aux*) vendor=apple ;; -hms*) vendor=hitachi ;; -mpw* | -macos*) vendor=apple ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) vendor=atari ;; -vos*) vendor=stratus ;; esac basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` ;; esac echo $basic_machine$os exit # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: tla-1.3.5+dfsg/src/expat/conftools/PrintPath0000755000175000017500000000465710457621771017540 0ustar useruser#!/bin/sh # Look for program[s] somewhere in $PATH. # # Options: # -s # Do not print out full pathname. (silent) # -pPATHNAME # Look in PATHNAME instead of $PATH # # Usage: # PrintPath [-s] [-pPATHNAME] program [program ...] # # Initially written by Jim Jagielski for the Apache configuration mechanism # (with kudos to Kernighan/Pike) # # This script falls under the Apache License. # See http://www.apache.org/licenses/LICENSE ## # Some "constants" ## pathname=$PATH echo="yes" ## # Find out what OS we are running for later on ## os=`(uname) 2>/dev/null` ## # Parse command line ## for args in $* do case $args in -s ) echo="no" ;; -p* ) pathname="`echo $args | sed 's/^..//'`" ;; * ) programs="$programs $args" ;; esac done ## # Now we make the adjustments required for OS/2 and everyone # else :) # # First of all, all OS/2 programs have the '.exe' extension. # Next, we adjust PATH (or what was given to us as PATH) to # be whitespace seperated directories. # Finally, we try to determine the best flag to use for # test/[] to look for an executable file. OS/2 just has '-r' # but with other OSs, we do some funny stuff to check to see # if test/[] knows about -x, which is the prefered flag. ## if [ "x$os" = "xOS/2" ] then ext=".exe" pathname=`echo -E $pathname | sed 's/^;/.;/ s/;;/;.;/g s/;$/;./ s/;/ /g s/\\\\/\\//g' ` test_exec_flag="-r" else ext="" # No default extensions pathname=`echo $pathname | sed 's/^:/.:/ s/::/:.:/g s/:$/:./ s/:/ /g' ` # Here is how we test to see if test/[] can handle -x testfile="pp.t.$$" cat > $testfile </dev/null`; then test_exec_flag="-x" else test_exec_flag="-r" fi rm -f $testfile fi for program in $programs do for path in $pathname do if [ $test_exec_flag $path/${program}${ext} ] && \ [ ! -d $path/${program}${ext} ]; then if [ "x$echo" = "xyes" ]; then echo $path/${program}${ext} fi exit 0 fi # Next try without extension (if one was used above) if [ "x$ext" != "x" ]; then if [ $test_exec_flag $path/${program} ] && \ [ ! -d $path/${program} ]; then if [ "x$echo" = "xyes" ]; then echo $path/${program} fi exit 0 fi fi done done exit 1 tla-1.3.5+dfsg/src/expat/conftools/libtool.m40000644000175000017500000034576610457621771017620 0ustar useruser# libtool.m4 - Configure libtool for the host system. -*-Shell-script-*- ## Copyright 1996, 1997, 1998, 1999, 2000, 2001 ## Free Software Foundation, Inc. ## Originally by Gordon Matzigkeit , 1996 ## ## This program is free software; you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation; either version 2 of the License, or ## (at your option) any later version. ## ## This program is distributed in the hope that it will be useful, but ## WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with this program; if not, write to the Free Software ## Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. ## ## As a special exception to the GNU General Public License, if you ## distribute this file as part of a program that contains a ## configuration script generated by Autoconf, you may include it under ## the same distribution terms that you use for the rest of that program. # serial 46 AC_PROG_LIBTOOL AC_DEFUN([AC_PROG_LIBTOOL], [AC_REQUIRE([AC_LIBTOOL_SETUP])dnl # This can be used to rebuild libtool when needed LIBTOOL_DEPS="$ac_aux_dir/ltmain.sh" # Always use our own libtool. LIBTOOL='$(SHELL) $(top_builddir)/libtool' AC_SUBST(LIBTOOL)dnl # Prevent multiple expansion define([AC_PROG_LIBTOOL], []) ]) AC_DEFUN([AC_LIBTOOL_SETUP], [AC_PREREQ(2.13)dnl AC_REQUIRE([AC_ENABLE_SHARED])dnl AC_REQUIRE([AC_ENABLE_STATIC])dnl AC_REQUIRE([AC_ENABLE_FAST_INSTALL])dnl AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_PROG_LD])dnl AC_REQUIRE([AC_PROG_LD_RELOAD_FLAG])dnl AC_REQUIRE([AC_PROG_NM])dnl AC_REQUIRE([AC_PROG_LN_S])dnl AC_REQUIRE([AC_DEPLIBS_CHECK_METHOD])dnl AC_REQUIRE([AC_OBJEXT])dnl AC_REQUIRE([AC_EXEEXT])dnl dnl _LT_AC_PROG_ECHO_BACKSLASH # Only perform the check for file, if the check method requires it case $deplibs_check_method in file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then AC_PATH_MAGIC fi ;; esac AC_CHECK_TOOL(RANLIB, ranlib, :) AC_CHECK_TOOL(STRIP, strip, :) ifdef([AC_PROVIDE_AC_LIBTOOL_DLOPEN], enable_dlopen=yes, enable_dlopen=no) ifdef([AC_PROVIDE_AC_LIBTOOL_WIN32_DLL], enable_win32_dll=yes, enable_win32_dll=no) AC_ARG_ENABLE(libtool-lock, [ --disable-libtool-lock avoid locking (might break parallel builds)]) test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes # Some flags need to be propagated to the compiler or linker for good # libtool support. case $host in *-*-irix6*) # Find out which ABI we are using. echo '[#]line __oline__ "configure"' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -32" ;; *N32*) LD="${LD-ld} -n32" ;; *64-bit*) LD="${LD-ld} -64" ;; esac fi rm -rf conftest* ;; *-*-sco3.2v5*) # On SCO OpenServer 5, we need -belf to get full-featured binaries. SAVE_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -belf" AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf, [AC_LANG_SAVE AC_LANG_C AC_TRY_LINK([],[],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no]) AC_LANG_RESTORE]) if test x"$lt_cv_cc_needs_belf" != x"yes"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf CFLAGS="$SAVE_CFLAGS" fi ;; ifdef([AC_PROVIDE_AC_LIBTOOL_WIN32_DLL], [*-*-cygwin* | *-*-mingw* | *-*-pw32*) AC_CHECK_TOOL(DLLTOOL, dlltool, false) AC_CHECK_TOOL(AS, as, false) AC_CHECK_TOOL(OBJDUMP, objdump, false) # recent cygwin and mingw systems supply a stub DllMain which the user # can override, but on older systems we have to supply one AC_CACHE_CHECK([if libtool should supply DllMain function], lt_cv_need_dllmain, [AC_TRY_LINK([], [extern int __attribute__((__stdcall__)) DllMain(void*, int, void*); DllMain (0, 0, 0);], [lt_cv_need_dllmain=no],[lt_cv_need_dllmain=yes])]) case $host/$CC in *-*-cygwin*/gcc*-mno-cygwin*|*-*-mingw*) # old mingw systems require "-dll" to link a DLL, while more recent ones # require "-mdll" SAVE_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -mdll" AC_CACHE_CHECK([how to link DLLs], lt_cv_cc_dll_switch, [AC_TRY_LINK([], [], [lt_cv_cc_dll_switch=-mdll],[lt_cv_cc_dll_switch=-dll])]) CFLAGS="$SAVE_CFLAGS" ;; *-*-cygwin* | *-*-pw32*) # cygwin systems need to pass --dll to the linker, and not link # crt.o which will require a WinMain@16 definition. lt_cv_cc_dll_switch="-Wl,--dll -nostartfiles" ;; esac ;; ]) esac _LT_AC_LTCONFIG_HACK ]) # AC_LIBTOOL_HEADER_ASSERT # ------------------------ AC_DEFUN([AC_LIBTOOL_HEADER_ASSERT], [AC_CACHE_CHECK([whether $CC supports assert without backlinking], [lt_cv_func_assert_works], [case $host in *-*-solaris*) if test "$GCC" = yes && test "$with_gnu_ld" != yes; then case `$CC --version 2>/dev/null` in [[12]].*) lt_cv_func_assert_works=no ;; *) lt_cv_func_assert_works=yes ;; esac fi ;; esac]) if test "x$lt_cv_func_assert_works" = xyes; then AC_CHECK_HEADERS(assert.h) fi ])# AC_LIBTOOL_HEADER_ASSERT # _LT_AC_CHECK_DLFCN # -------------------- AC_DEFUN([_LT_AC_CHECK_DLFCN], [AC_CHECK_HEADERS(dlfcn.h) ])# _LT_AC_CHECK_DLFCN # AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE # --------------------------------- AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([AC_PROG_NM]) AC_REQUIRE([AC_OBJEXT]) # Check for command to grab the raw symbol name followed by C symbol from nm. AC_MSG_CHECKING([command to parse $NM output]) AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe], [dnl # These are sane defaults that work on at least a few old systems. # [They come from Ultrix. What could be older than Ultrix?!! ;)] # Character class describing NM global symbol codes. symcode='[[BCDEGRST]]' # Regexp to match symbols that can be accessed directly from C. sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)' # Transform the above into a raw symbol and a C symbol. symxfrm='\1 \2\3 \3' # Transform an extracted symbol line into a proper C declaration lt_cv_global_symbol_to_cdecl="sed -n -e 's/^. .* \(.*\)$/extern char \1;/p'" # Transform an extracted symbol line into symbol name and symbol address lt_cv_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" # Define system-specific variables. case $host_os in aix*) symcode='[[BCDT]]' ;; cygwin* | mingw* | pw32*) symcode='[[ABCDGISTW]]' ;; hpux*) # Its linker distinguishes data from code symbols lt_cv_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern char \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" lt_cv_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" ;; irix*) symcode='[[BCDEGRST]]' ;; solaris* | sysv5*) symcode='[[BDT]]' ;; sysv4) symcode='[[DFNSTU]]' ;; esac # Handle CRLF in mingw tool chain opt_cr= case $host_os in mingw*) opt_cr=`echo 'x\{0,1\}' | tr x '\015'` # option cr in regexp ;; esac # If we're using GNU nm, then use its standard symbol codes. if $NM -V 2>&1 | egrep '(GNU|with BFD)' > /dev/null; then symcode='[[ABCDGISTW]]' fi # Try without a prefix undercore, then with it. for ac_symprfx in "" "_"; do # Write the raw and C identifiers. lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*\($ac_symprfx\)$sympat$opt_cr$/$symxfrm/p'" # Check to see that the pipe works correctly. pipe_works=no rm -f conftest* cat > conftest.$ac_ext < $nlist) && test -s "$nlist"; then # Try sorting and uniquifying the output. if sort "$nlist" | uniq > "$nlist"T; then mv -f "$nlist"T "$nlist" else rm -f "$nlist"T fi # Make sure that we snagged all the symbols we need. if egrep ' nm_test_var$' "$nlist" >/dev/null; then if egrep ' nm_test_func$' "$nlist" >/dev/null; then cat < conftest.$ac_ext #ifdef __cplusplus extern "C" { #endif EOF # Now generate the symbol file. eval "$lt_cv_global_symbol_to_cdecl"' < "$nlist" >> conftest.$ac_ext' cat <> conftest.$ac_ext #if defined (__STDC__) && __STDC__ # define lt_ptr void * #else # define lt_ptr char * # define const #endif /* The mapping between symbol names and symbols. */ const struct { const char *name; lt_ptr address; } lt_preloaded_symbols[[]] = { EOF sed "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (lt_ptr) \&\2},/" < "$nlist" >> conftest.$ac_ext cat <<\EOF >> conftest.$ac_ext {0, (lt_ptr) 0} }; #ifdef __cplusplus } #endif EOF # Now try linking the two files. mv conftest.$ac_objext conftstm.$ac_objext save_LIBS="$LIBS" save_CFLAGS="$CFLAGS" LIBS="conftstm.$ac_objext" CFLAGS="$CFLAGS$no_builtin_flag" if AC_TRY_EVAL(ac_link) && test -s conftest; then pipe_works=yes fi LIBS="$save_LIBS" CFLAGS="$save_CFLAGS" else echo "cannot find nm_test_func in $nlist" >&AC_FD_CC fi else echo "cannot find nm_test_var in $nlist" >&AC_FD_CC fi else echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AC_FD_CC fi else echo "$progname: failed program was:" >&AC_FD_CC cat conftest.$ac_ext >&5 fi rm -f conftest* conftst* # Do not use the global_symbol_pipe unless it works. if test "$pipe_works" = yes; then break else lt_cv_sys_global_symbol_pipe= fi done ]) global_symbol_pipe="$lt_cv_sys_global_symbol_pipe" if test -z "$lt_cv_sys_global_symbol_pipe"; then global_symbol_to_cdecl= global_symbol_to_c_name_address= else global_symbol_to_cdecl="$lt_cv_global_symbol_to_cdecl" global_symbol_to_c_name_address="$lt_cv_global_symbol_to_c_name_address" fi if test -z "$global_symbol_pipe$global_symbol_to_cdec$global_symbol_to_c_name_address"; then AC_MSG_RESULT(failed) else AC_MSG_RESULT(ok) fi ]) # AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE # _LT_AC_LIBTOOL_SYS_PATH_SEPARATOR # --------------------------------- AC_DEFUN([_LT_AC_LIBTOOL_SYS_PATH_SEPARATOR], [# Find the correct PATH separator. Usually this is `:', but # DJGPP uses `;' like DOS. if test "X${PATH_SEPARATOR+set}" != Xset; then UNAME=${UNAME-`uname 2>/dev/null`} case X$UNAME in *-DOS) lt_cv_sys_path_separator=';' ;; *) lt_cv_sys_path_separator=':' ;; esac PATH_SEPARATOR=$lt_cv_sys_path_separator fi ])# _LT_AC_LIBTOOL_SYS_PATH_SEPARATOR # _LT_AC_PROG_ECHO_BACKSLASH # -------------------------- # Add some code to the start of the generated configure script which # will find an echo command which doesn't interpret backslashes. AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH], [ifdef([AC_DIVERSION_NOTICE], [AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)], [AC_DIVERT_PUSH(NOTICE)]) _LT_AC_LIBTOOL_SYS_PATH_SEPARATOR # Check that we are running under the correct shell. SHELL=${CONFIG_SHELL-/bin/sh} case X$ECHO in X*--fallback-echo) # Remove one level of quotation (which was required for Make). ECHO=`echo "$ECHO" | sed 's,\\\\\[$]\\[$]0,'[$]0','` ;; esac echo=${ECHO-echo} if test "X[$]1" = X--no-reexec; then # Discard the --no-reexec flag, and continue. shift elif test "X[$]1" = X--fallback-echo; then # Avoid inline document here, it may be left over : elif test "X`($echo '\t') 2>/dev/null`" = 'X\t'; then # Yippee, $echo works! : else # Restart under the correct shell. exec $SHELL "[$]0" --no-reexec ${1+"[$]@"} fi if test "X[$]1" = X--fallback-echo; then # used as fallback echo shift cat </dev/null && echo_test_string="`eval $cmd`" && (test "X$echo_test_string" = "X$echo_test_string") 2>/dev/null then break fi done fi if test "X`($echo '\t') 2>/dev/null`" = 'X\t' && echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then : else # The Solaris, AIX, and Digital Unix default echo programs unquote # backslashes. This makes it impossible to quote backslashes using # echo "$something" | sed 's/\\/\\\\/g' # # So, first we look for a working echo in the user's PATH. IFS="${IFS= }"; save_ifs="$IFS"; IFS=$PATH_SEPARATOR for dir in $PATH /usr/ucb; do if (test -f $dir/echo || test -f $dir/echo$ac_exeext) && test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' && echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then echo="$dir/echo" break fi done IFS="$save_ifs" if test "X$echo" = Xecho; then # We didn't find a better echo, so look for alternatives. if test "X`(print -r '\t') 2>/dev/null`" = 'X\t' && echo_testing_string=`(print -r "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then # This shell has a builtin print -r that does the trick. echo='print -r' elif (test -f /bin/ksh || test -f /bin/ksh$ac_exeext) && test "X$CONFIG_SHELL" != X/bin/ksh; then # If we have ksh, try running configure again with it. ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh} export ORIGINAL_CONFIG_SHELL CONFIG_SHELL=/bin/ksh export CONFIG_SHELL exec $CONFIG_SHELL "[$]0" --no-reexec ${1+"[$]@"} else # Try using printf. echo='printf %s\n' if test "X`($echo '\t') 2>/dev/null`" = 'X\t' && echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then # Cool, printf works : elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` && test "X$echo_testing_string" = 'X\t' && echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL export CONFIG_SHELL SHELL="$CONFIG_SHELL" export SHELL echo="$CONFIG_SHELL [$]0 --fallback-echo" elif echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` && test "X$echo_testing_string" = 'X\t' && echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then echo="$CONFIG_SHELL [$]0 --fallback-echo" else # maybe with a smaller string... prev=: for cmd in 'echo test' 'sed 2q "[$]0"' 'sed 10q "[$]0"' 'sed 20q "[$]0"' 'sed 50q "[$]0"'; do if (test "X$echo_test_string" = "X`eval $cmd`") 2>/dev/null then break fi prev="$cmd" done if test "$prev" != 'sed 50q "[$]0"'; then echo_test_string=`eval $prev` export echo_test_string exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "[$]0" ${1+"[$]@"} else # Oops. We lost completely, so just stick with echo. echo=echo fi fi fi fi fi fi # Copy echo and quote the copy suitably for passing to libtool from # the Makefile, instead of quoting the original, which is used later. ECHO=$echo if test "X$ECHO" = "X$CONFIG_SHELL [$]0 --fallback-echo"; then ECHO="$CONFIG_SHELL \\\$\[$]0 --fallback-echo" fi AC_SUBST(ECHO) AC_DIVERT_POP ])# _LT_AC_PROG_ECHO_BACKSLASH # _LT_AC_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE, # ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING) # ------------------------------------------------------------------ AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF], [if test "$cross_compiling" = yes; then : [$4] else AC_REQUIRE([_LT_AC_CHECK_DLFCN])dnl lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext < #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif #ifdef __cplusplus extern "C" void exit (int); #endif void fnord() { int i=42;} int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; /* dlclose (self); */ } exit (status); }] EOF if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) $1 ;; x$lt_dlneed_uscore) $2 ;; x$lt_unknown|x*) $3 ;; esac else : # compilation failed $3 fi fi rm -fr conftest* ])# _LT_AC_TRY_DLOPEN_SELF # AC_LIBTOOL_DLOPEN_SELF # ------------------- AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], [if test "x$enable_dlopen" != xyes; then enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown else lt_cv_dlopen=no lt_cv_dlopen_libs= case $host_os in beos*) lt_cv_dlopen="load_add_on" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ;; cygwin* | mingw* | pw32*) lt_cv_dlopen="LoadLibrary" lt_cv_dlopen_libs= ;; *) AC_CHECK_FUNC([shl_load], [lt_cv_dlopen="shl_load"], [AC_CHECK_LIB([dld], [shl_load], [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld"], [AC_CHECK_FUNC([dlopen], [lt_cv_dlopen="dlopen"], [AC_CHECK_LIB([dl], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"], [AC_CHECK_LIB([svld], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"], [AC_CHECK_LIB([dld], [dld_link], [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld"]) ]) ]) ]) ]) ]) ;; esac if test "x$lt_cv_dlopen" != xno; then enable_dlopen=yes else enable_dlopen=no fi case $lt_cv_dlopen in dlopen) save_CPPFLAGS="$CPPFLAGS" AC_REQUIRE([_LT_AC_CHECK_DLFCN])dnl test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" save_LDFLAGS="$LDFLAGS" eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" save_LIBS="$LIBS" LIBS="$lt_cv_dlopen_libs $LIBS" AC_CACHE_CHECK([whether a program can dlopen itself], lt_cv_dlopen_self, [dnl _LT_AC_TRY_DLOPEN_SELF( lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes, lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross) ]) if test "x$lt_cv_dlopen_self" = xyes; then LDFLAGS="$LDFLAGS $link_static_flag" AC_CACHE_CHECK([whether a statically linked program can dlopen itself], lt_cv_dlopen_self_static, [dnl _LT_AC_TRY_DLOPEN_SELF( lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross) ]) fi CPPFLAGS="$save_CPPFLAGS" LDFLAGS="$save_LDFLAGS" LIBS="$save_LIBS" ;; esac case $lt_cv_dlopen_self in yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; *) enable_dlopen_self=unknown ;; esac case $lt_cv_dlopen_self_static in yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; *) enable_dlopen_self_static=unknown ;; esac fi ])# AC_LIBTOOL_DLOPEN_SELF AC_DEFUN([_LT_AC_LTCONFIG_HACK], [AC_REQUIRE([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])dnl # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. Xsed='sed -e s/^X//' sed_quote_subst='s/\([[\\"\\`$\\\\]]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\([[\\"\\`\\\\]]\)/\\\1/g' # Sed substitution to delay expansion of an escaped shell variable in a # double_quote_subst'ed string. delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' # Constants: rm="rm -f" # Global variables: default_ofile=libtool can_build_shared=yes # All known linkers require a `.a' archive for static linking (except M$VC, # which needs '.lib'). libext=a ltmain="$ac_aux_dir/ltmain.sh" ofile="$default_ofile" with_gnu_ld="$lt_cv_prog_gnu_ld" need_locks="$enable_libtool_lock" old_CC="$CC" old_CFLAGS="$CFLAGS" # Set sane defaults for various variables test -z "$AR" && AR=ar test -z "$AR_FLAGS" && AR_FLAGS=cru test -z "$AS" && AS=as test -z "$CC" && CC=cc test -z "$DLLTOOL" && DLLTOOL=dlltool test -z "$LD" && LD=ld test -z "$LN_S" && LN_S="ln -s" test -z "$MAGIC_CMD" && MAGIC_CMD=file test -z "$NM" && NM=nm test -z "$OBJDUMP" && OBJDUMP=objdump test -z "$RANLIB" && RANLIB=: test -z "$STRIP" && STRIP=: test -z "$ac_objext" && ac_objext=o if test x"$host" != x"$build"; then ac_tool_prefix=${host_alias}- else ac_tool_prefix= fi # Transform linux* to *-*-linux-gnu*, to support old configure scripts. case $host_os in linux-gnu*) ;; linux*) host=`echo $host | sed 's/^\(.*-.*-linux\)\(.*\)$/\1-gnu\2/'` esac case $host_os in aix3*) # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi ;; esac # Determine commands to create old-style static archives. old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs' old_postinstall_cmds='chmod 644 $oldlib' old_postuninstall_cmds= if test -n "$RANLIB"; then case $host_os in openbsd*) old_postinstall_cmds="\$RANLIB -t \$oldlib~$old_postinstall_cmds" ;; *) old_postinstall_cmds="\$RANLIB \$oldlib~$old_postinstall_cmds" ;; esac old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" fi # Allow CC to be a program name with arguments. set dummy $CC compiler="[$]2" ## FIXME: this should be a separate macro ## AC_MSG_CHECKING([for objdir]) rm -f .libs 2>/dev/null mkdir .libs 2>/dev/null if test -d .libs; then objdir=.libs else # MS-DOS does not allow filenames that begin with a dot. objdir=_libs fi rmdir .libs 2>/dev/null AC_MSG_RESULT($objdir) ## ## END FIXME ## FIXME: this should be a separate macro ## AC_ARG_WITH(pic, [ --with-pic try to use only PIC/non-PIC objects [default=use both]], pic_mode="$withval", pic_mode=default) test -z "$pic_mode" && pic_mode=default # We assume here that the value for lt_cv_prog_cc_pic will not be cached # in isolation, and that seeing it set (from the cache) indicates that # the associated values are set (in the cache) correctly too. AC_MSG_CHECKING([for $compiler option to produce PIC]) AC_CACHE_VAL(lt_cv_prog_cc_pic, [ lt_cv_prog_cc_pic= lt_cv_prog_cc_shlib= lt_cv_prog_cc_wl= lt_cv_prog_cc_static= lt_cv_prog_cc_no_builtin= lt_cv_prog_cc_can_build_shared=$can_build_shared if test "$GCC" = yes; then lt_cv_prog_cc_wl='-Wl,' lt_cv_prog_cc_static='-static' case $host_os in aix*) # Below there is a dirty hack to force normal static linking with -ldl # The problem is because libdl dynamically linked with both libc and # libC (AIX C++ library), which obviously doesn't included in libraries # list by gcc. This cause undefined symbols with -static flags. # This hack allows C programs to be linked with "-static -ldl", but # not sure about C++ programs. lt_cv_prog_cc_static="$lt_cv_prog_cc_static ${lt_cv_prog_cc_wl}-lC" ;; amigaos*) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. lt_cv_prog_cc_pic='-m68020 -resident32 -malways-restore-a4' ;; beos* | irix5* | irix6* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_cv_prog_cc_pic='-fno-common' ;; cygwin* | mingw* | pw32* | os2*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_cv_prog_cc_pic='-DDLL_EXPORT' ;; sysv4*MP*) if test -d /usr/nec; then lt_cv_prog_cc_pic=-Kconform_pic fi ;; *) lt_cv_prog_cc_pic='-fPIC' ;; esac else # PORTME Check for PIC flags for the system compiler. case $host_os in aix3* | aix4* | aix5*) lt_cv_prog_cc_wl='-Wl,' # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_cv_prog_cc_static='-Bstatic' else lt_cv_prog_cc_static='-bnso -bI:/lib/syscalls.exp' fi ;; hpux9* | hpux10* | hpux11*) # Is there a better lt_cv_prog_cc_static that works with the bundled CC? lt_cv_prog_cc_wl='-Wl,' lt_cv_prog_cc_static="${lt_cv_prog_cc_wl}-a ${lt_cv_prog_cc_wl}archive" lt_cv_prog_cc_pic='+Z' ;; irix5* | irix6*) lt_cv_prog_cc_wl='-Wl,' lt_cv_prog_cc_static='-non_shared' # PIC (with -KPIC) is the default. ;; cygwin* | mingw* | pw32* | os2*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_cv_prog_cc_pic='-DDLL_EXPORT' ;; newsos6) lt_cv_prog_cc_pic='-KPIC' lt_cv_prog_cc_static='-Bstatic' ;; osf3* | osf4* | osf5*) # All OSF/1 code is PIC. lt_cv_prog_cc_wl='-Wl,' lt_cv_prog_cc_static='-non_shared' ;; sco3.2v5*) lt_cv_prog_cc_pic='-Kpic' lt_cv_prog_cc_static='-dn' lt_cv_prog_cc_shlib='-belf' ;; solaris*) lt_cv_prog_cc_pic='-KPIC' lt_cv_prog_cc_static='-Bstatic' lt_cv_prog_cc_wl='-Wl,' ;; sunos4*) lt_cv_prog_cc_pic='-PIC' lt_cv_prog_cc_static='-Bstatic' lt_cv_prog_cc_wl='-Qoption ld ' ;; sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) lt_cv_prog_cc_pic='-KPIC' lt_cv_prog_cc_static='-Bstatic' if test "x$host_vendor" = xsni; then lt_cv_prog_cc_wl='-LD' else lt_cv_prog_cc_wl='-Wl,' fi ;; uts4*) lt_cv_prog_cc_pic='-pic' lt_cv_prog_cc_static='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec ;then lt_cv_prog_cc_pic='-Kconform_pic' lt_cv_prog_cc_static='-Bstatic' fi ;; *) lt_cv_prog_cc_can_build_shared=no ;; esac fi ]) if test -z "$lt_cv_prog_cc_pic"; then AC_MSG_RESULT([none]) else AC_MSG_RESULT([$lt_cv_prog_cc_pic]) # Check to make sure the pic_flag actually works. AC_MSG_CHECKING([if $compiler PIC flag $lt_cv_prog_cc_pic works]) AC_CACHE_VAL(lt_cv_prog_cc_pic_works, [dnl save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS $lt_cv_prog_cc_pic -DPIC" AC_TRY_COMPILE([], [], [dnl case $host_os in hpux9* | hpux10* | hpux11*) # On HP-UX, both CC and GCC only warn that PIC is supported... then # they create non-PIC objects. So, if there were any warnings, we # assume that PIC is not supported. if test -s conftest.err; then lt_cv_prog_cc_pic_works=no else lt_cv_prog_cc_pic_works=yes fi ;; *) lt_cv_prog_cc_pic_works=yes ;; esac ], [dnl lt_cv_prog_cc_pic_works=no ]) CFLAGS="$save_CFLAGS" ]) if test "X$lt_cv_prog_cc_pic_works" = Xno; then lt_cv_prog_cc_pic= lt_cv_prog_cc_can_build_shared=no else lt_cv_prog_cc_pic=" $lt_cv_prog_cc_pic" fi AC_MSG_RESULT([$lt_cv_prog_cc_pic_works]) fi ## ## END FIXME # Check for any special shared library compilation flags. if test -n "$lt_cv_prog_cc_shlib"; then AC_MSG_WARN([\`$CC' requires \`$lt_cv_prog_cc_shlib' to build shared libraries]) if echo "$old_CC $old_CFLAGS " | egrep -e "[[ ]]$lt_cv_prog_cc_shlib[[ ]]" >/dev/null; then : else AC_MSG_WARN([add \`$lt_cv_prog_cc_shlib' to the CC or CFLAGS env variable and reconfigure]) lt_cv_prog_cc_can_build_shared=no fi fi ## FIXME: this should be a separate macro ## AC_MSG_CHECKING([if $compiler static flag $lt_cv_prog_cc_static works]) AC_CACHE_VAL([lt_cv_prog_cc_static_works], [dnl lt_cv_prog_cc_static_works=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $lt_cv_prog_cc_static" AC_TRY_LINK([], [], [lt_cv_prog_cc_static_works=yes]) LDFLAGS="$save_LDFLAGS" ]) # Belt *and* braces to stop my trousers falling down: test "X$lt_cv_prog_cc_static_works" = Xno && lt_cv_prog_cc_static= AC_MSG_RESULT([$lt_cv_prog_cc_static_works]) pic_flag="$lt_cv_prog_cc_pic" special_shlib_compile_flags="$lt_cv_prog_cc_shlib" wl="$lt_cv_prog_cc_wl" link_static_flag="$lt_cv_prog_cc_static" no_builtin_flag="$lt_cv_prog_cc_no_builtin" can_build_shared="$lt_cv_prog_cc_can_build_shared" ## ## END FIXME ## FIXME: this should be a separate macro ## # Check to see if options -o and -c are simultaneously supported by compiler AC_MSG_CHECKING([if $compiler supports -c -o file.$ac_objext]) AC_CACHE_VAL([lt_cv_compiler_c_o], [ $rm -r conftest 2>/dev/null mkdir conftest cd conftest echo "int some_variable = 0;" > conftest.$ac_ext mkdir out # According to Tom Tromey, Ian Lance Taylor reported there are C compilers # that will create temporary files in the current directory regardless of # the output directory. Thus, making CWD read-only will cause this test # to fail, enabling locking or at least warning the user not to do parallel # builds. chmod -w . save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -o out/conftest2.$ac_objext" compiler_c_o=no if { (eval echo configure:__oline__: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>out/conftest.err; } && test -s out/conftest2.$ac_objext; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings if test -s out/conftest.err; then lt_cv_compiler_c_o=no else lt_cv_compiler_c_o=yes fi else # Append any errors to the config.log. cat out/conftest.err 1>&AC_FD_CC lt_cv_compiler_c_o=no fi CFLAGS="$save_CFLAGS" chmod u+w . $rm conftest* out/* rmdir out cd .. rmdir conftest $rm -r conftest 2>/dev/null ]) compiler_c_o=$lt_cv_compiler_c_o AC_MSG_RESULT([$compiler_c_o]) if test x"$compiler_c_o" = x"yes"; then # Check to see if we can write to a .lo AC_MSG_CHECKING([if $compiler supports -c -o file.lo]) AC_CACHE_VAL([lt_cv_compiler_o_lo], [ lt_cv_compiler_o_lo=no save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -c -o conftest.lo" save_objext="$ac_objext" ac_objext=lo AC_TRY_COMPILE([], [int some_variable = 0;], [dnl # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then lt_cv_compiler_o_lo=no else lt_cv_compiler_o_lo=yes fi ]) ac_objext="$save_objext" CFLAGS="$save_CFLAGS" ]) compiler_o_lo=$lt_cv_compiler_o_lo AC_MSG_RESULT([$compiler_o_lo]) else compiler_o_lo=no fi ## ## END FIXME ## FIXME: this should be a separate macro ## # Check to see if we can do hard links to lock some files if needed hard_links="nottested" if test "$compiler_c_o" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user AC_MSG_CHECKING([if we can lock with hard links]) hard_links=yes $rm conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no AC_MSG_RESULT([$hard_links]) if test "$hard_links" = no; then AC_MSG_WARN([\`$CC' does not support \`-c -o', so \`make -j' may be unsafe]) need_locks=warn fi else need_locks=no fi ## ## END FIXME ## FIXME: this should be a separate macro ## if test "$GCC" = yes; then # Check to see if options -fno-rtti -fno-exceptions are supported by compiler AC_MSG_CHECKING([if $compiler supports -fno-rtti -fno-exceptions]) echo "int some_variable = 0;" > conftest.$ac_ext save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -fno-rtti -fno-exceptions -c conftest.$ac_ext" compiler_rtti_exceptions=no AC_TRY_COMPILE([], [int some_variable = 0;], [dnl # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then compiler_rtti_exceptions=no else compiler_rtti_exceptions=yes fi ]) CFLAGS="$save_CFLAGS" AC_MSG_RESULT([$compiler_rtti_exceptions]) if test "$compiler_rtti_exceptions" = "yes"; then no_builtin_flag=' -fno-builtin -fno-rtti -fno-exceptions' else no_builtin_flag=' -fno-builtin' fi fi ## ## END FIXME ## FIXME: this should be a separate macro ## # See if the linker supports building shared libraries. AC_MSG_CHECKING([whether the linker ($LD) supports shared libraries]) allow_undefined_flag= no_undefined_flag= need_lib_prefix=unknown need_version=unknown # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments archive_cmds= archive_expsym_cmds= old_archive_from_new_cmds= old_archive_from_expsyms_cmds= export_dynamic_flag_spec= whole_archive_flag_spec= thread_safe_flag_spec= hardcode_into_libs=no hardcode_libdir_flag_spec= hardcode_libdir_separator= hardcode_direct=no hardcode_minus_L=no hardcode_shlibpath_var=unsupported runpath_var= link_all_deplibs=unknown always_export_symbols=no export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | sed '\''s/.* //'\'' | sort | uniq > $export_symbols' # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list include_expsyms= # exclude_expsyms can be an egrep regular expression of symbols to exclude # it will be wrapped by ` (' and `)$', so one must not match beginning or # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', # as well as any symbol that contains `d'. exclude_expsyms="_GLOBAL_OFFSET_TABLE_" # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. extract_expsyms_cmds= case $host_os in cygwin* | mingw* | pw32*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test "$GCC" != yes; then with_gnu_ld=no fi ;; openbsd*) with_gnu_ld=no ;; esac ld_shlibs=yes if test "$with_gnu_ld" = yes; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='${wl}' # See if GNU ld supports shared libraries. case $host_os in aix3* | aix4* | aix5*) # On AIX, the GNU linker is very broken # Note:Check GNU linker on AIX 5-IA64 when/if it becomes available. ld_shlibs=no cat <&2 *** Warning: the GNU linker, at least up to release 2.9.1, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to modify your PATH *** so that a non-GNU linker is found, and then restart. EOF ;; amigaos*) archive_cmds='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes # Samuel A. Falvo II reports # that the semantics of dynamic libraries on AmigaOS, at least up # to version 4, is to share data among multiple programs linked # with the same dynamic library. Since this doesn't match the # behavior of shared libraries on other platforms, we can use # them. ld_shlibs=no ;; beos*) if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then allow_undefined_flag=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else ld_shlibs=no fi ;; cygwin* | mingw* | pw32*) # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. hardcode_libdir_flag_spec='-L$libdir' allow_undefined_flag=unsupported always_export_symbols=yes extract_expsyms_cmds='test -f $output_objdir/impgen.c || \ sed -e "/^# \/\* impgen\.c starts here \*\//,/^# \/\* impgen.c ends here \*\// { s/^# //;s/^# *$//; p; }" -e d < $''0 > $output_objdir/impgen.c~ test -f $output_objdir/impgen.exe || (cd $output_objdir && \ if test "x$HOST_CC" != "x" ; then $HOST_CC -o impgen impgen.c ; \ else $CC -o impgen impgen.c ; fi)~ $output_objdir/impgen $dir/$soroot > $output_objdir/$soname-def' old_archive_from_expsyms_cmds='$DLLTOOL --as=$AS --dllname $soname --def $output_objdir/$soname-def --output-lib $output_objdir/$newlib' # cygwin and mingw dlls have different entry points and sets of symbols # to exclude. # FIXME: what about values for MSVC? dll_entry=__cygwin_dll_entry@12 dll_exclude_symbols=DllMain@12,_cygwin_dll_entry@12,_cygwin_noncygwin_dll_entry@12~ case $host_os in mingw*) # mingw values dll_entry=_DllMainCRTStartup@12 dll_exclude_symbols=DllMain@12,DllMainCRTStartup@12,DllEntryPoint@12~ ;; esac # mingw and cygwin differ, and it's simplest to just exclude the union # of the two symbol sets. dll_exclude_symbols=DllMain@12,_cygwin_dll_entry@12,_cygwin_noncygwin_dll_entry@12,DllMainCRTStartup@12,DllEntryPoint@12 # recent cygwin and mingw systems supply a stub DllMain which the user # can override, but on older systems we have to supply one (in ltdll.c) if test "x$lt_cv_need_dllmain" = "xyes"; then ltdll_obj='$output_objdir/$soname-ltdll.'"$ac_objext " ltdll_cmds='test -f $output_objdir/$soname-ltdll.c || sed -e "/^# \/\* ltdll\.c starts here \*\//,/^# \/\* ltdll.c ends here \*\// { s/^# //; p; }" -e d < $''0 > $output_objdir/$soname-ltdll.c~ test -f $output_objdir/$soname-ltdll.$ac_objext || (cd $output_objdir && $CC -c $soname-ltdll.c)~' else ltdll_obj= ltdll_cmds= fi # Extract the symbol export list from an `--export-all' def file, # then regenerate the def file from the symbol export list, so that # the compiled dll only exports the symbol export list. # Be careful not to strip the DATA tag left be newer dlltools. export_symbols_cmds="$ltdll_cmds"' $DLLTOOL --export-all --exclude-symbols '$dll_exclude_symbols' --output-def $output_objdir/$soname-def '$ltdll_obj'$libobjs $convenience~ sed -e "1,/EXPORTS/d" -e "s/ @ [[0-9]]*//" -e "s/ *;.*$//" < $output_objdir/$soname-def > $export_symbols' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is. # If DATA tags from a recent dlltool are present, honour them! archive_expsym_cmds='if test "x`head -1 $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname-def; else echo EXPORTS > $output_objdir/$soname-def; _lt_hint=1; cat $export_symbols | while read symbol; do set dummy \$symbol; case \[$]# in 2) echo " \[$]2 @ \$_lt_hint ; " >> $output_objdir/$soname-def;; *) echo " \[$]2 @ \$_lt_hint \[$]3 ; " >> $output_objdir/$soname-def;; esac; _lt_hint=`expr 1 + \$_lt_hint`; done; fi~ '"$ltdll_cmds"' $CC -Wl,--base-file,$output_objdir/$soname-base '$lt_cv_cc_dll_switch' -Wl,-e,'$dll_entry' -o $output_objdir/$soname '$ltdll_obj'$libobjs $deplibs $compiler_flags~ $DLLTOOL --as=$AS --dllname $soname --exclude-symbols '$dll_exclude_symbols' --def $output_objdir/$soname-def --base-file $output_objdir/$soname-base --output-exp $output_objdir/$soname-exp~ $CC -Wl,--base-file,$output_objdir/$soname-base $output_objdir/$soname-exp '$lt_cv_cc_dll_switch' -Wl,-e,'$dll_entry' -o $output_objdir/$soname '$ltdll_obj'$libobjs $deplibs $compiler_flags~ $DLLTOOL --as=$AS --dllname $soname --exclude-symbols '$dll_exclude_symbols' --def $output_objdir/$soname-def --base-file $output_objdir/$soname-base --output-exp $output_objdir/$soname-exp --output-lib $output_objdir/$libname.dll.a~ $CC $output_objdir/$soname-exp '$lt_cv_cc_dll_switch' -Wl,-e,'$dll_entry' -o $output_objdir/$soname '$ltdll_obj'$libobjs $deplibs $compiler_flags' ;; netbsd*) if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else archive_cmds='$CC -shared -nodefaultlibs $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared -nodefaultlibs $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris* | sysv5*) if $LD -v 2>&1 | egrep 'BFD 2\.8' > /dev/null; then ld_shlibs=no cat <&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. EOF elif $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; sunos4*) archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= hardcode_direct=yes hardcode_shlibpath_var=no ;; *) if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; esac if test "$ld_shlibs" = yes; then runpath_var=LD_RUN_PATH hardcode_libdir_flag_spec='${wl}--rpath ${wl}$libdir' export_dynamic_flag_spec='${wl}--export-dynamic' case $host_os in cygwin* | mingw* | pw32*) # dlltool doesn't understand --whole-archive et. al. whole_archive_flag_spec= ;; *) # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | egrep 'no-whole-archive' > /dev/null; then whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else whole_archive_flag_spec= fi ;; esac fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) allow_undefined_flag=unsupported always_export_symbols=yes archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. hardcode_minus_L=yes if test "$GCC" = yes && test -z "$link_static_flag"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. hardcode_direct=unsupported fi ;; aix4* | aix5*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[[23]]|aix4.[[23]].*|aix5*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes break fi done esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. hardcode_direct=yes archive_cmds='' hardcode_libdir_separator=':' if test "$GCC" = yes; then case $host_os in aix4.[[012]]|aix4.[[012]].*) collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && \ strings "$collect2name" | grep resolve_lib_name >/dev/null then # We have reworked collect2 hardcode_direct=yes else # We have old collect2 hardcode_direct=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking hardcode_minus_L=yes hardcode_libdir_flag_spec='-L$libdir' hardcode_libdir_separator= fi esac shared_flag='-shared' else # not using gcc if test "$host_cpu" = ia64; then shared_flag='${wl}-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi # It seems that -bexpall can do strange things, so it is better to # generate a list of symbols to export. always_export_symbols=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. allow_undefined_flag='-berok' hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:/usr/lib:/lib' archive_expsym_cmds="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' allow_undefined_flag="-z nodefs" archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname ${wl}-h$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols" else hardcode_libdir_flag_spec='${wl}-bnolibpath ${wl}-blibpath:$libdir:/usr/lib:/lib' # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. allow_undefined_flag='${wl}-berok' # This is a bit strange, but is similar to how AIX traditionally builds # it's shared libraries. archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols"' ~$AR -crlo $objdir/$libname$release.a $objdir/$soname' fi fi ;; amigaos*) archive_cmds='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes # see comment about different semantics on the GNU ld section ld_shlibs=no ;; cygwin* | mingw* | pw32*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. hardcode_libdir_flag_spec=' ' allow_undefined_flag=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # FIXME: Setting linknames here is a bad hack. archive_cmds='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | sed -e '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. old_archive_from_new_cmds='true' # FIXME: Should let the user specify the lib program. old_archive_cmds='lib /OUT:$oldlib$oldobjs$old_deplibs' fix_srcfile_path='`cygpath -w "$srcfile"`' ;; darwin* | rhapsody*) case "$host_os" in rhapsody* | darwin1.[[012]]) allow_undefined_flag='-undefined suppress' ;; *) # Darwin 1.3 on allow_undefined_flag='-flat_namespace -undefined suppress' ;; esac # FIXME: Relying on posixy $() will cause problems for # cross-compilation, but unfortunately the echo tests do not # yet detect zsh echo's removal of \ escapes. archive_cmds='$nonopt $(test "x$module" = xyes && echo -bundle || echo -dynamiclib) $allow_undefined_flag -o $lib $libobjs $deplibs$linker_flags -install_name $rpath/$soname $verstring' # We need to add '_' to the symbols in $export_symbols first #archive_expsym_cmds="$archive_cmds"' && strip -s $export_symbols' hardcode_direct=yes hardcode_shlibpath_var=no whole_archive_flag_spec='-all_load $convenience' ;; freebsd1*) ld_shlibs=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes hardcode_minus_L=yes hardcode_shlibpath_var=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd*) archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; hpux9* | hpux10* | hpux11*) case $host_os in hpux9*) archive_cmds='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' ;; *) archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' ;; esac hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes hardcode_minus_L=yes # Not in the search PATH, but as the default # location of the library. export_dynamic_flag_spec='${wl}-E' ;; irix5* | irix6*) if test "$GCC" = yes; then archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' fi hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: link_all_deplibs=yes ;; netbsd*) if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; newsos6) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: hardcode_shlibpath_var=no ;; openbsd*) hardcode_direct=yes hardcode_shlibpath_var=no if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='${wl}-rpath,$libdir' export_dynamic_flag_spec='${wl}-E' else case "$host_os" in openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-R$libdir' ;; *) archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='${wl}-rpath,$libdir' ;; esac fi ;; os2*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes allow_undefined_flag=unsupported archive_cmds='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' ;; osf3*) if test "$GCC" = yes; then allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else allow_undefined_flag=' -expect_unresolved \*' archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' fi hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test "$GCC" = yes; then allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' else allow_undefined_flag=' -expect_unresolved \*' archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds='for i in `cat $export_symbols`; do printf "-exported_symbol " >> $lib.exp; echo "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~ $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib~$rm $lib.exp' #Both c and cxx compiler support -rpath directly hardcode_libdir_flag_spec='-rpath $libdir' fi hardcode_libdir_separator=: ;; sco3.2v5*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes export_dynamic_flag_spec='${wl}-Bexport' ;; solaris*) # gcc --version < 3.0 without binutils cannot create self contained # shared libraries reliably, requiring libgcc.a to resolve some of # the object symbols generated in some cases. Libraries that use # assert need libgcc.a to resolve __eprintf, for example. Linking # a copy of libgcc.a into every shared library to guarantee resolving # such symbols causes other problems: According to Tim Van Holder # , C++ libraries end up with a separate # (to the application) exception stack for one thing. no_undefined_flag=' -z defs' if test "$GCC" = yes; then case `$CC --version 2>/dev/null` in [[12]].*) cat <&2 *** Warning: Releases of GCC earlier than version 3.0 cannot reliably *** create self contained shared libraries on Solaris systems, without *** introducing a dependency on libgcc.a. Therefore, libtool is disabling *** -no-undefined support, which will at least allow you to build shared *** libraries. However, you may find that when you link such libraries *** into an application without using GCC, you have to manually add *** \`gcc --print-libgcc-file-name\` to the link command. We urge you to *** upgrade to a newer version of GCC. Another option is to rebuild your *** current GCC to use the GNU linker from GNU binutils 2.9.1 or newer. EOF no_undefined_flag= ;; esac fi # $CC -shared without GNU ld will not create a library from C++ # object files and a static libstdc++, better avoid it by now archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp' hardcode_libdir_flag_spec='-R$libdir' hardcode_shlibpath_var=no case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) # Supported since Solaris 2.6 (maybe 2.5.1?) whole_archive_flag_spec='-z allextract$convenience -z defaultextract' ;; esac link_all_deplibs=yes ;; sunos4*) if test "x$host_vendor" = xsequent; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi hardcode_libdir_flag_spec='-L$libdir' hardcode_direct=yes hardcode_minus_L=yes hardcode_shlibpath_var=no ;; sysv4) if test "x$host_vendor" = xsno; then archive_cmds='$LD -G -Bsymbolic -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes # is this really true??? else archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=no #Motorola manual says yes, but my tests say they lie fi runpath_var='LD_RUN_PATH' hardcode_shlibpath_var=no ;; sysv4.3*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var=no export_dynamic_flag_spec='-Bexport' ;; sysv5*) no_undefined_flag=' -z text' # $CC -shared without GNU ld will not create a library from C++ # object files and a static libstdc++, better avoid it by now archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp' hardcode_libdir_flag_spec= hardcode_shlibpath_var=no runpath_var='LD_RUN_PATH' ;; uts4*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-L$libdir' hardcode_shlibpath_var=no ;; dgux*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-L$libdir' hardcode_shlibpath_var=no ;; sysv4*MP*) if test -d /usr/nec; then archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes ld_shlibs=yes fi ;; sysv4.2uw2*) archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes hardcode_minus_L=no hardcode_shlibpath_var=no hardcode_runpath_var=yes runpath_var=LD_RUN_PATH ;; sysv5uw7* | unixware7*) no_undefined_flag='${wl}-z ${wl}text' if test "$GCC" = yes; then archive_cmds='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$CC -G ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' fi runpath_var='LD_RUN_PATH' hardcode_shlibpath_var=no ;; *) ld_shlibs=no ;; esac fi AC_MSG_RESULT([$ld_shlibs]) test "$ld_shlibs" = no && can_build_shared=no ## ## END FIXME ## FIXME: this should be a separate macro ## # Check hardcoding attributes. AC_MSG_CHECKING([how to hardcode library paths into programs]) hardcode_action= if test -n "$hardcode_libdir_flag_spec" || \ test -n "$runpath_var"; then # We can hardcode non-existant directories. if test "$hardcode_direct" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$hardcode_shlibpath_var" != no && test "$hardcode_minus_L" != no; then # Linking always hardcodes the temporary library directory. hardcode_action=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. hardcode_action=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. hardcode_action=unsupported fi AC_MSG_RESULT([$hardcode_action]) ## ## END FIXME ## FIXME: this should be a separate macro ## striplib= old_striplib= AC_MSG_CHECKING([whether stripping libraries is possible]) if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" test -z "$striplib" && striplib="$STRIP --strip-unneeded" AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) fi ## ## END FIXME reload_cmds='$LD$reload_flag -o $output$reload_objs' test -z "$deplibs_check_method" && deplibs_check_method=unknown ## FIXME: this should be a separate macro ## # PORTME Fill in your ld.so characteristics AC_MSG_CHECKING([dynamic linker characteristics]) library_names_spec= libname_spec='lib$name' soname_spec= postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" case $host_os in aix3*) version_type=linux library_names_spec='${libname}${release}.so$versuffix $libname.a' shlibpath_var=LIBPATH # AIX has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}.so$major' ;; aix4* | aix5*) version_type=linux if test "$host_cpu" = ia64; then # AIX 5 supports IA64 library_names_spec='${libname}${release}.so$major ${libname}${release}.so$versuffix $libname.so' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line `#! .'. This would cause the generated library to # depend on `.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[[01]] | aix4.[[01]].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then : else can_build_shared=no fi ;; esac # AIX (on Power*) has no versioning support, so currently we can # not hardcode correct soname into executable. Probably we can # add versioning support to collect2, so additional links can # be useful in future. if test "$aix_use_runtimelinking" = yes; then # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so' else # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='${libname}${release}.a $libname.a' soname_spec='${libname}${release}.so$major' fi shlibpath_var=LIBPATH fi ;; amigaos*) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "(cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a)"; (cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a) || exit 1; done' ;; beos*) library_names_spec='${libname}.so' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi4*) version_type=linux need_version=no library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so' soname_spec='${libname}${release}.so$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" export_dynamic_flag_spec=-rdynamic # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32*) version_type=windows need_version=no need_lib_prefix=no case $GCC,$host_os in yes,cygwin*) library_names_spec='$libname.dll.a' soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | sed -e 's/[[.]]/-/g'`${versuffix}.dll' postinstall_cmds='dlpath=`bash 2>&1 -c '\''. $dir/${file}i;echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog .libs/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`bash 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $rm \$dlpath' ;; yes,mingw*) library_names_spec='${libname}`echo ${release} | sed -e 's/[[.]]/-/g'`${versuffix}.dll' sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | sed -e "s/^libraries://" -e "s/;/ /g"` ;; yes,pw32*) library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | sed -e 's/[.]/-/g'`${versuffix}.dll' ;; *) library_names_spec='${libname}`echo ${release} | sed -e 's/[[.]]/-/g'`${versuffix}.dll $libname.lib' ;; esac dynamic_linker='Win32 ld.exe' # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no # FIXME: Relying on posixy $() will cause problems for # cross-compilation, but unfortunately the echo tests do not # yet detect zsh echo's removal of \ escapes. library_names_spec='${libname}${release}${versuffix}.$(test .$module = .yes && echo so || echo dylib) ${libname}${release}${major}.$(test .$module = .yes && echo so || echo dylib) ${libname}.$(test .$module = .yes && echo so || echo dylib)' soname_spec='${libname}${release}${major}.$(test .$module = .yes && echo so || echo dylib)' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH ;; freebsd1*) dynamic_linker=no ;; freebsd*) objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout` version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so $libname.so' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='${libname}${release}.so$versuffix $libname.so$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2*) shlibpath_overrides_runpath=yes ;; *) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; esac ;; gnu*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so${major} ${libname}.so' soname_spec='${libname}${release}.so$major' shlibpath_var=LD_LIBRARY_PATH hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. dynamic_linker="$host_os dld.sl" version_type=sunos need_lib_prefix=no need_version=no shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}.sl$versuffix ${libname}${release}.sl$major $libname.sl' soname_spec='${libname}${release}.sl$major' # HP-UX runs *really* slowly unless shared libraries are mode 555. postinstall_cmds='chmod 555 $lib' ;; irix5* | irix6*) version_type=irix need_lib_prefix=no need_version=no soname_spec='${libname}${release}.so$major' library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major ${libname}${release}.so $libname.so' case $host_os in irix5*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" ;; # No shared lib support for Linux oldld, aout, or coff. linux-gnuoldld* | linux-gnuaout* | linux-gnucoff*) dynamic_linker=no ;; # This must be Linux ELF. linux-gnu*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so' soname_spec='${libname}${release}.so$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then library_names_spec='${libname}${release}.so$versuffix ${libname}.so$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major ${libname}${release}.so ${libname}.so' soname_spec='${libname}${release}.so$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; openbsd*) version_type=sunos need_lib_prefix=no need_version=no if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then case "$host_os" in openbsd2.[[89]] | openbsd2.[[89]].*) shlibpath_overrides_runpath=no ;; *) shlibpath_overrides_runpath=yes ;; esac else shlibpath_overrides_runpath=yes fi library_names_spec='${libname}${release}.so$versuffix ${libname}.so$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH ;; os2*) libname_spec='$name' need_lib_prefix=no library_names_spec='$libname.dll $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_version=no soname_spec='${libname}${release}.so' library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so $libname.so' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; sco3.2v5*) version_type=osf soname_spec='${libname}${release}.so$major' library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so' shlibpath_var=LD_LIBRARY_PATH ;; solaris*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so' soname_spec='${libname}${release}.so$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}.so$versuffix ${libname}.so$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) version_type=linux library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so' soname_spec='${libname}${release}.so$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; uts4*) version_type=linux library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so' soname_spec='${libname}${release}.so$major' shlibpath_var=LD_LIBRARY_PATH ;; dgux*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so' soname_spec='${libname}${release}.so$major' shlibpath_var=LD_LIBRARY_PATH ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux library_names_spec='$libname.so.$versuffix $libname.so.$major $libname.so' soname_spec='$libname.so.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; *) dynamic_linker=no ;; esac AC_MSG_RESULT([$dynamic_linker]) test "$dynamic_linker" = no && can_build_shared=no ## ## END FIXME ## FIXME: this should be a separate macro ## # Report the final consequences. AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) ## ## END FIXME ## FIXME: this should be a separate macro ## AC_MSG_CHECKING([whether to build shared libraries]) test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case "$host_os" in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix4*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac AC_MSG_RESULT([$enable_shared]) ## ## END FIXME ## FIXME: this should be a separate macro ## AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes AC_MSG_RESULT([$enable_static]) ## ## END FIXME if test "$hardcode_action" = relink; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi AC_LIBTOOL_DLOPEN_SELF ## FIXME: this should be a separate macro ## if test "$enable_shared" = yes && test "$GCC" = yes; then case $archive_cmds in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. AC_MSG_CHECKING([whether -lc should be explicitly linked in]) AC_CACHE_VAL([lt_cv_archive_cmds_need_lc], [$rm conftest* echo 'static int dummy;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$lt_cv_prog_cc_wl compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest save_allow_undefined_flag=$allow_undefined_flag allow_undefined_flag= if AC_TRY_EVAL(archive_cmds 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) then lt_cv_archive_cmds_need_lc=no else lt_cv_archive_cmds_need_lc=yes fi allow_undefined_flag=$save_allow_undefined_flag else cat conftest.err 1>&5 fi]) AC_MSG_RESULT([$lt_cv_archive_cmds_need_lc]) ;; esac fi need_lc=${lt_cv_archive_cmds_need_lc-yes} ## ## END FIXME ## FIXME: this should be a separate macro ## # The second clause should only fire when bootstrapping the # libtool distribution, otherwise you forgot to ship ltmain.sh # with your package, and you will get complaints that there are # no rules to generate ltmain.sh. if test -f "$ltmain"; then : else # If there is no Makefile yet, we rely on a make rule to execute # `config.status --recheck' to rerun these tests and create the # libtool script then. test -f Makefile && make "$ltmain" fi if test -f "$ltmain"; then trap "$rm \"${ofile}T\"; exit 1" 1 2 15 $rm -f "${ofile}T" echo creating $ofile # Now quote all the things that may contain metacharacters while being # careful not to overquote the AC_SUBSTed values. We take copies of the # variables and quote the copies for generation of the libtool script. for var in echo old_CC old_CFLAGS \ AR AR_FLAGS CC LD LN_S NM SHELL \ reload_flag reload_cmds wl \ pic_flag link_static_flag no_builtin_flag export_dynamic_flag_spec \ thread_safe_flag_spec whole_archive_flag_spec libname_spec \ library_names_spec soname_spec \ RANLIB old_archive_cmds old_archive_from_new_cmds old_postinstall_cmds \ old_postuninstall_cmds archive_cmds archive_expsym_cmds postinstall_cmds \ postuninstall_cmds extract_expsyms_cmds old_archive_from_expsyms_cmds \ old_striplib striplib file_magic_cmd export_symbols_cmds \ deplibs_check_method allow_undefined_flag no_undefined_flag \ finish_cmds finish_eval global_symbol_pipe global_symbol_to_cdecl \ global_symbol_to_c_name_address \ hardcode_libdir_flag_spec hardcode_libdir_separator \ sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ compiler_c_o compiler_o_lo need_locks exclude_expsyms include_expsyms; do case $var in reload_cmds | old_archive_cmds | old_archive_from_new_cmds | \ old_postinstall_cmds | old_postuninstall_cmds | \ export_symbols_cmds | archive_cmds | archive_expsym_cmds | \ extract_expsyms_cmds | old_archive_from_expsyms_cmds | \ postinstall_cmds | postuninstall_cmds | \ finish_cmds | sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) # Double-quote double-evaled strings. eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" ;; *) eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" ;; esac done cat <<__EOF__ > "${ofile}T" #! $SHELL # `$echo "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. # Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP) # NOTE: Changes made to this file will be lost: look at ltmain.sh. # # Copyright (C) 1996-2000 Free Software Foundation, Inc. # Originally by Gordon Matzigkeit , 1996 # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Sed that helps us avoid accidentally triggering echo(1) options like -n. Xsed="sed -e s/^X//" # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. if test "X\${CDPATH+set}" = Xset; then CDPATH=:; export CDPATH; fi # ### BEGIN LIBTOOL CONFIG # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # Shell to use when invoking shell scripts. SHELL=$lt_SHELL # Whether or not to build shared libraries. build_libtool_libs=$enable_shared # Whether or not to build static libraries. build_old_libs=$enable_static # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$need_lc # Whether or not to optimize for fast installation. fast_install=$enable_fast_install # The host system. host_alias=$host_alias host=$host # An echo program that does not interpret backslashes. echo=$lt_echo # The archiver. AR=$lt_AR AR_FLAGS=$lt_AR_FLAGS # The default C compiler. CC=$lt_CC # Is the compiler the GNU C compiler? with_gcc=$GCC # The linker used to build libraries. LD=$lt_LD # Whether we need hard or soft links. LN_S=$lt_LN_S # A BSD-compatible nm program. NM=$lt_NM # A symbol stripping program STRIP=$STRIP # Used to examine libraries when file_magic_cmd begins "file" MAGIC_CMD=$MAGIC_CMD # Used on cygwin: DLL creation program. DLLTOOL="$DLLTOOL" # Used on cygwin: object dumper. OBJDUMP="$OBJDUMP" # Used on cygwin: assembler. AS="$AS" # The name of the directory that contains temporary libtool files. objdir=$objdir # How to create reloadable object files. reload_flag=$lt_reload_flag reload_cmds=$lt_reload_cmds # How to pass a linker flag through the compiler. wl=$lt_wl # Object file suffix (normally "o"). objext="$ac_objext" # Old archive suffix (normally "a"). libext="$libext" # Executable file suffix (normally ""). exeext="$exeext" # Additional compiler flags for building library objects. pic_flag=$lt_pic_flag pic_mode=$pic_mode # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_compiler_c_o # Can we write directly to a .lo ? compiler_o_lo=$lt_compiler_o_lo # Must we lock files when doing compilation ? need_locks=$lt_need_locks # Do we need the lib prefix for modules? need_lib_prefix=$need_lib_prefix # Do we need a version for libraries? need_version=$need_version # Whether dlopen is supported. dlopen_support=$enable_dlopen # Whether dlopen of programs is supported. dlopen_self=$enable_dlopen_self # Whether dlopen of statically linked programs is supported. dlopen_self_static=$enable_dlopen_self_static # Compiler flag to prevent dynamic linking. link_static_flag=$lt_link_static_flag # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_no_builtin_flag # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec # Compiler flag to generate thread-safe objects. thread_safe_flag_spec=$lt_thread_safe_flag_spec # Library versioning type. version_type=$version_type # Format of library name prefix. libname_spec=$lt_libname_spec # List of archive names. First name is the real one, the rest are links. # The last name is the one that the linker finds with -lNAME. library_names_spec=$lt_library_names_spec # The coded name of the library, if different from the real name. soname_spec=$lt_soname_spec # Commands used to build and install an old-style archive. RANLIB=$lt_RANLIB old_archive_cmds=$lt_old_archive_cmds old_postinstall_cmds=$lt_old_postinstall_cmds old_postuninstall_cmds=$lt_old_postuninstall_cmds # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds # Commands used to build and install a shared archive. archive_cmds=$lt_archive_cmds archive_expsym_cmds=$lt_archive_expsym_cmds postinstall_cmds=$lt_postinstall_cmds postuninstall_cmds=$lt_postuninstall_cmds # Commands to strip libraries. old_striplib=$lt_old_striplib striplib=$lt_striplib # Method to check whether dependent libraries are shared objects. deplibs_check_method=$lt_deplibs_check_method # Command to use when deplibs_check_method == file_magic. file_magic_cmd=$lt_file_magic_cmd # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag # Flag that forces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag # Commands used to finish a libtool library installation in a directory. finish_cmds=$lt_finish_cmds # Same as above, but a single script fragment to be evaled but not shown. finish_eval=$lt_finish_eval # Take the output of nm and produce a listing of raw symbols and C names. global_symbol_pipe=$lt_global_symbol_pipe # Transform the output of nm in a proper C declaration global_symbol_to_cdecl=$lt_global_symbol_to_cdecl # Transform the output of nm in a C name address pair global_symbol_to_c_name_address=$lt_global_symbol_to_c_name_address # This is the shared library runtime path variable. runpath_var=$runpath_var # This is the shared library path variable. shlibpath_var=$shlibpath_var # Is shlibpath searched before the hard-coded library search path? shlibpath_overrides_runpath=$shlibpath_overrides_runpath # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action # Whether we should hardcode library paths into libraries. hardcode_into_libs=$hardcode_into_libs # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist. hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec # Whether we need a single -rpath flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator # Set to yes if using DIR/libNAME.so during linking hardcodes DIR into the # resulting binary. hardcode_direct=$hardcode_direct # Set to yes if using the -LDIR flag during linking hardcodes DIR into the # resulting binary. hardcode_minus_L=$hardcode_minus_L # Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into # the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var # Variables whose values should be saved in libtool wrapper scripts and # restored at relink time. variables_saved_for_relink="$variables_saved_for_relink" # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs # Compile-time system search path for libraries sys_lib_search_path_spec=$lt_sys_lib_search_path_spec # Run-time system search path for libraries sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec # Fix the shell variable \$srcfile for the compiler. fix_srcfile_path="$fix_srcfile_path" # Set to yes if exported symbols are required. always_export_symbols=$always_export_symbols # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds # The commands to extract the exported symbol list from a shared archive. extract_expsyms_cmds=$lt_extract_expsyms_cmds # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms # Symbols that must always be exported. include_expsyms=$lt_include_expsyms # ### END LIBTOOL CONFIG __EOF__ case $host_os in aix3*) cat <<\EOF >> "${ofile}T" # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi EOF ;; esac case $host_os in cygwin* | mingw* | pw32* | os2*) cat <<'EOF' >> "${ofile}T" # This is a source program that is used to create dlls on Windows # Don't remove nor modify the starting and closing comments # /* ltdll.c starts here */ # #define WIN32_LEAN_AND_MEAN # #include # #undef WIN32_LEAN_AND_MEAN # #include # # #ifndef __CYGWIN__ # # ifdef __CYGWIN32__ # # define __CYGWIN__ __CYGWIN32__ # # endif # #endif # # #ifdef __cplusplus # extern "C" { # #endif # BOOL APIENTRY DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved); # #ifdef __cplusplus # } # #endif # # #ifdef __CYGWIN__ # #include # DECLARE_CYGWIN_DLL( DllMain ); # #endif # HINSTANCE __hDllInstance_base; # # BOOL APIENTRY # DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved) # { # __hDllInstance_base = hInst; # return TRUE; # } # /* ltdll.c ends here */ # This is a source program that is used to create import libraries # on Windows for dlls which lack them. Don't remove nor modify the # starting and closing comments # /* impgen.c starts here */ # /* Copyright (C) 1999-2000 Free Software Foundation, Inc. # # This file is part of GNU libtool. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # */ # # #include /* for printf() */ # #include /* for open(), lseek(), read() */ # #include /* for O_RDONLY, O_BINARY */ # #include /* for strdup() */ # # /* O_BINARY isn't required (or even defined sometimes) under Unix */ # #ifndef O_BINARY # #define O_BINARY 0 # #endif # # static unsigned int # pe_get16 (fd, offset) # int fd; # int offset; # { # unsigned char b[2]; # lseek (fd, offset, SEEK_SET); # read (fd, b, 2); # return b[0] + (b[1]<<8); # } # # static unsigned int # pe_get32 (fd, offset) # int fd; # int offset; # { # unsigned char b[4]; # lseek (fd, offset, SEEK_SET); # read (fd, b, 4); # return b[0] + (b[1]<<8) + (b[2]<<16) + (b[3]<<24); # } # # static unsigned int # pe_as32 (ptr) # void *ptr; # { # unsigned char *b = ptr; # return b[0] + (b[1]<<8) + (b[2]<<16) + (b[3]<<24); # } # # int # main (argc, argv) # int argc; # char *argv[]; # { # int dll; # unsigned long pe_header_offset, opthdr_ofs, num_entries, i; # unsigned long export_rva, export_size, nsections, secptr, expptr; # unsigned long name_rvas, nexp; # unsigned char *expdata, *erva; # char *filename, *dll_name; # # filename = argv[1]; # # dll = open(filename, O_RDONLY|O_BINARY); # if (dll < 1) # return 1; # # dll_name = filename; # # for (i=0; filename[i]; i++) # if (filename[i] == '/' || filename[i] == '\\' || filename[i] == ':') # dll_name = filename + i +1; # # pe_header_offset = pe_get32 (dll, 0x3c); # opthdr_ofs = pe_header_offset + 4 + 20; # num_entries = pe_get32 (dll, opthdr_ofs + 92); # # if (num_entries < 1) /* no exports */ # return 1; # # export_rva = pe_get32 (dll, opthdr_ofs + 96); # export_size = pe_get32 (dll, opthdr_ofs + 100); # nsections = pe_get16 (dll, pe_header_offset + 4 +2); # secptr = (pe_header_offset + 4 + 20 + # pe_get16 (dll, pe_header_offset + 4 + 16)); # # expptr = 0; # for (i = 0; i < nsections; i++) # { # char sname[8]; # unsigned long secptr1 = secptr + 40 * i; # unsigned long vaddr = pe_get32 (dll, secptr1 + 12); # unsigned long vsize = pe_get32 (dll, secptr1 + 16); # unsigned long fptr = pe_get32 (dll, secptr1 + 20); # lseek(dll, secptr1, SEEK_SET); # read(dll, sname, 8); # if (vaddr <= export_rva && vaddr+vsize > export_rva) # { # expptr = fptr + (export_rva - vaddr); # if (export_rva + export_size > vaddr + vsize) # export_size = vsize - (export_rva - vaddr); # break; # } # } # # expdata = (unsigned char*)malloc(export_size); # lseek (dll, expptr, SEEK_SET); # read (dll, expdata, export_size); # erva = expdata - export_rva; # # nexp = pe_as32 (expdata+24); # name_rvas = pe_as32 (expdata+32); # # printf ("EXPORTS\n"); # for (i = 0; i> "${ofile}T" || (rm -f "${ofile}T"; exit 1) mv -f "${ofile}T" "$ofile" || \ (rm -f "$ofile" && cp "${ofile}T" "$ofile" && rm -f "${ofile}T") chmod +x "$ofile" fi ## ## END FIXME ])# _LT_AC_LTCONFIG_HACK # AC_LIBTOOL_DLOPEN - enable checks for dlopen support AC_DEFUN([AC_LIBTOOL_DLOPEN], [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])]) # AC_LIBTOOL_WIN32_DLL - declare package support for building win32 dll's AC_DEFUN([AC_LIBTOOL_WIN32_DLL], [AC_BEFORE([$0], [AC_LIBTOOL_SETUP])]) # AC_ENABLE_SHARED - implement the --enable-shared flag # Usage: AC_ENABLE_SHARED[(DEFAULT)] # Where DEFAULT is either `yes' or `no'. If omitted, it defaults to # `yes'. AC_DEFUN([AC_ENABLE_SHARED], [define([AC_ENABLE_SHARED_DEFAULT], ifelse($1, no, no, yes))dnl AC_ARG_ENABLE(shared, changequote(<<, >>)dnl << --enable-shared[=PKGS] build shared libraries [default=>>AC_ENABLE_SHARED_DEFAULT], changequote([, ])dnl [p=${PACKAGE-default} case $enableval in yes) enable_shared=yes ;; no) enable_shared=no ;; *) enable_shared=no # Look at the argument we got. We use all the common list separators. IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:," for pkg in $enableval; do if test "X$pkg" = "X$p"; then enable_shared=yes fi done IFS="$ac_save_ifs" ;; esac], enable_shared=AC_ENABLE_SHARED_DEFAULT)dnl ]) # AC_DISABLE_SHARED - set the default shared flag to --disable-shared AC_DEFUN([AC_DISABLE_SHARED], [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl AC_ENABLE_SHARED(no)]) # AC_ENABLE_STATIC - implement the --enable-static flag # Usage: AC_ENABLE_STATIC[(DEFAULT)] # Where DEFAULT is either `yes' or `no'. If omitted, it defaults to # `yes'. AC_DEFUN([AC_ENABLE_STATIC], [define([AC_ENABLE_STATIC_DEFAULT], ifelse($1, no, no, yes))dnl AC_ARG_ENABLE(static, changequote(<<, >>)dnl << --enable-static[=PKGS] build static libraries [default=>>AC_ENABLE_STATIC_DEFAULT], changequote([, ])dnl [p=${PACKAGE-default} case $enableval in yes) enable_static=yes ;; no) enable_static=no ;; *) enable_static=no # Look at the argument we got. We use all the common list separators. IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:," for pkg in $enableval; do if test "X$pkg" = "X$p"; then enable_static=yes fi done IFS="$ac_save_ifs" ;; esac], enable_static=AC_ENABLE_STATIC_DEFAULT)dnl ]) # AC_DISABLE_STATIC - set the default static flag to --disable-static AC_DEFUN([AC_DISABLE_STATIC], [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl AC_ENABLE_STATIC(no)]) # AC_ENABLE_FAST_INSTALL - implement the --enable-fast-install flag # Usage: AC_ENABLE_FAST_INSTALL[(DEFAULT)] # Where DEFAULT is either `yes' or `no'. If omitted, it defaults to # `yes'. AC_DEFUN([AC_ENABLE_FAST_INSTALL], [define([AC_ENABLE_FAST_INSTALL_DEFAULT], ifelse($1, no, no, yes))dnl AC_ARG_ENABLE(fast-install, changequote(<<, >>)dnl << --enable-fast-install[=PKGS] optimize for fast installation [default=>>AC_ENABLE_FAST_INSTALL_DEFAULT], changequote([, ])dnl [p=${PACKAGE-default} case $enableval in yes) enable_fast_install=yes ;; no) enable_fast_install=no ;; *) enable_fast_install=no # Look at the argument we got. We use all the common list separators. IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:," for pkg in $enableval; do if test "X$pkg" = "X$p"; then enable_fast_install=yes fi done IFS="$ac_save_ifs" ;; esac], enable_fast_install=AC_ENABLE_FAST_INSTALL_DEFAULT)dnl ]) # AC_DISABLE_FAST_INSTALL - set the default to --disable-fast-install AC_DEFUN([AC_DISABLE_FAST_INSTALL], [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl AC_ENABLE_FAST_INSTALL(no)]) # AC_LIBTOOL_PICMODE - implement the --with-pic flag # Usage: AC_LIBTOOL_PICMODE[(MODE)] # Where MODE is either `yes' or `no'. If omitted, it defaults to # `both'. AC_DEFUN([AC_LIBTOOL_PICMODE], [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl pic_mode=ifelse($#,1,$1,default)]) # AC_PATH_TOOL_PREFIX - find a file program which can recognise shared library AC_DEFUN([AC_PATH_TOOL_PREFIX], [AC_MSG_CHECKING([for $1]) AC_CACHE_VAL(lt_cv_path_MAGIC_CMD, [case $MAGIC_CMD in /*) lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. ;; ?:/*) lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a dos path. ;; *) ac_save_MAGIC_CMD="$MAGIC_CMD" IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" dnl $ac_dummy forces splitting on constant user-supplied paths. dnl POSIX.2 word splitting is done only on the output of word expansions, dnl not every word. This closes a longstanding sh security hole. ac_dummy="ifelse([$2], , $PATH, [$2])" for ac_dir in $ac_dummy; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$1; then lt_cv_path_MAGIC_CMD="$ac_dir/$1" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex="`expr \"$deplibs_check_method\" : \"file_magic \(.*\)\"`" MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | egrep "$file_magic_regex" > /dev/null; then : else cat <&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org EOF fi ;; esac fi break fi done IFS="$ac_save_ifs" MAGIC_CMD="$ac_save_MAGIC_CMD" ;; esac]) MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then AC_MSG_RESULT($MAGIC_CMD) else AC_MSG_RESULT(no) fi ]) # AC_PATH_MAGIC - find a file program which can recognise a shared library AC_DEFUN([AC_PATH_MAGIC], [AC_REQUIRE([AC_CHECK_TOOL_PREFIX])dnl AC_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin:$PATH) if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then AC_PATH_TOOL_PREFIX(file, /usr/bin:$PATH) else MAGIC_CMD=: fi fi ]) # AC_PROG_LD - find the path to the GNU or non-GNU linker AC_DEFUN([AC_PROG_LD], [AC_ARG_WITH(gnu-ld, [ --with-gnu-ld assume the C compiler uses GNU ld [default=no]], test "$withval" = no || with_gnu_ld=yes, with_gnu_ld=no) AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl AC_REQUIRE([_LT_AC_LIBTOOL_SYS_PATH_SEPARATOR])dnl ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. AC_MSG_CHECKING([for ld used by GCC]) case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [[\\/]]* | [[A-Za-z]]:[[\\/]]*) re_direlt='/[[^/]][[^/]]*/\.\./' # Canonicalize the path of ld ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'` while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then AC_MSG_CHECKING([for GNU ld]) else AC_MSG_CHECKING([for non-GNU ld]) fi AC_CACHE_VAL(lt_cv_path_LD, [if test -z "$LD"; then IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some GNU ld's only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. if "$lt_cv_path_LD" -v 2>&1 < /dev/null | egrep '(GNU|with BFD)' > /dev/null; then test "$with_gnu_ld" != no && break else test "$with_gnu_ld" != yes && break fi fi done IFS="$ac_save_ifs" else lt_cv_path_LD="$LD" # Let the user override the test with a path. fi]) LD="$lt_cv_path_LD" if test -n "$LD"; then AC_MSG_RESULT($LD) else AC_MSG_RESULT(no) fi test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH]) AC_PROG_LD_GNU ]) # AC_PROG_LD_GNU - AC_DEFUN([AC_PROG_LD_GNU], [AC_CACHE_CHECK([if the linker ($LD) is GNU ld], lt_cv_prog_gnu_ld, [# I'd rather use --version here, but apparently some GNU ld's only accept -v. if $LD -v 2>&1 &5; then lt_cv_prog_gnu_ld=yes else lt_cv_prog_gnu_ld=no fi]) with_gnu_ld=$lt_cv_prog_gnu_ld ]) # AC_PROG_LD_RELOAD_FLAG - find reload flag for linker # -- PORTME Some linkers may need a different reload flag. AC_DEFUN([AC_PROG_LD_RELOAD_FLAG], [AC_CACHE_CHECK([for $LD option to reload object files], lt_cv_ld_reload_flag, [lt_cv_ld_reload_flag='-r']) reload_flag=$lt_cv_ld_reload_flag test -n "$reload_flag" && reload_flag=" $reload_flag" ]) # AC_DEPLIBS_CHECK_METHOD - how to check for library dependencies # -- PORTME fill in with the dynamic library characteristics AC_DEFUN([AC_DEPLIBS_CHECK_METHOD], [AC_CACHE_CHECK([how to recognise dependant libraries], lt_cv_deplibs_check_method, [lt_cv_file_magic_cmd='$MAGIC_CMD' lt_cv_file_magic_test_file= lt_cv_deplibs_check_method='unknown' # Need to set the preceding variable on all platforms that support # interlibrary dependencies. # 'none' -- dependencies not supported. # `unknown' -- same as none, but documents that we really don't know. # 'pass_all' -- all dependencies passed with no checks. # 'test_compile' -- check by making test program. # 'file_magic [[regex]]' -- check by looking for files in library path # which responds to the $file_magic_cmd with a given egrep regex. # If you have `file' or equivalent on your system and you're not sure # whether `pass_all' will *always* work, you probably want this one. case $host_os in aix4* | aix5*) lt_cv_deplibs_check_method=pass_all ;; beos*) lt_cv_deplibs_check_method=pass_all ;; bsdi4*) lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib)' lt_cv_file_magic_cmd='/usr/bin/file -L' lt_cv_file_magic_test_file=/shlib/libc.so ;; cygwin* | mingw* | pw32*) lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?' lt_cv_file_magic_cmd='$OBJDUMP -f' ;; darwin* | rhapsody*) lt_cv_deplibs_check_method='file_magic Mach-O dynamically linked shared library' lt_cv_file_magic_cmd='/usr/bin/file -L' case "$host_os" in rhapsody* | darwin1.[[012]]) lt_cv_file_magic_test_file=`echo /System/Library/Frameworks/System.framework/Versions/*/System | head -1` ;; *) # Darwin 1.3 on lt_cv_file_magic_test_file='/usr/lib/libSystem.dylib' ;; esac ;; freebsd*) if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then case $host_cpu in i*86 ) # Not sure whether the presence of OpenBSD here was a mistake. # Let's accept both of them until this is cleared up. lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD)/i[[3-9]]86 (compact )?demand paged shared library' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` ;; esac else lt_cv_deplibs_check_method=pass_all fi ;; gnu*) lt_cv_deplibs_check_method=pass_all ;; hpux10.20*|hpux11*) lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]].[[0-9]]) shared library' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=/usr/lib/libc.sl ;; irix5* | irix6*) case $host_os in irix5*) # this will be overridden with pass_all, but let us keep it just in case lt_cv_deplibs_check_method="file_magic ELF 32-bit MSB dynamic lib MIPS - version 1" ;; *) case $LD in *-32|*"-32 ") libmagic=32-bit;; *-n32|*"-n32 ") libmagic=N32;; *-64|*"-64 ") libmagic=64-bit;; *) libmagic=never-match;; esac # this will be overridden with pass_all, but let us keep it just in case lt_cv_deplibs_check_method="file_magic ELF ${libmagic} MSB mips-[[1234]] dynamic lib MIPS - version 1" ;; esac lt_cv_file_magic_test_file=`echo /lib${libsuff}/libc.so*` lt_cv_deplibs_check_method=pass_all ;; # This must be Linux ELF. linux-gnu*) case $host_cpu in alpha* | hppa* | i*86 | powerpc* | sparc* | ia64* ) lt_cv_deplibs_check_method=pass_all ;; *) # glibc up to 2.1.1 does not perform some relocations on ARM lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' ;; esac lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so` ;; netbsd*) if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then lt_cv_deplibs_check_method='match_pattern /lib[[^/\.]]+\.so\.[[0-9]]+\.[[0-9]]+$' else lt_cv_deplibs_check_method='match_pattern /lib[[^/\.]]+\.so$' fi ;; newos6*) lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=/usr/lib/libnls.so ;; openbsd*) lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB shared object' else lt_cv_deplibs_check_method='file_magic OpenBSD.* shared library' fi ;; osf3* | osf4* | osf5*) # this will be overridden with pass_all, but let us keep it just in case lt_cv_deplibs_check_method='file_magic COFF format alpha shared library' lt_cv_file_magic_test_file=/shlib/libc.so lt_cv_deplibs_check_method=pass_all ;; sco3.2v5*) lt_cv_deplibs_check_method=pass_all ;; solaris*) lt_cv_deplibs_check_method=pass_all lt_cv_file_magic_test_file=/lib/libc.so ;; sysv5uw[[78]]* | sysv4*uw2*) lt_cv_deplibs_check_method=pass_all ;; sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) case $host_vendor in motorola) lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]' lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` ;; ncr) lt_cv_deplibs_check_method=pass_all ;; sequent) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' ;; sni) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib" lt_cv_file_magic_test_file=/lib/libc.so ;; esac ;; esac ]) file_magic_cmd=$lt_cv_file_magic_cmd deplibs_check_method=$lt_cv_deplibs_check_method ]) # AC_PROG_NM - find the path to a BSD-compatible name lister AC_DEFUN([AC_PROG_NM], [AC_REQUIRE([_LT_AC_LIBTOOL_SYS_PATH_SEPARATOR])dnl AC_MSG_CHECKING([for BSD-compatible nm]) AC_CACHE_VAL(lt_cv_path_NM, [if test -n "$NM"; then # Let the user override the test. lt_cv_path_NM="$NM" else IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH /usr/ccs/bin /usr/ucb /bin; do test -z "$ac_dir" && ac_dir=. tmp_nm=$ac_dir/${ac_tool_prefix}nm if test -f $tmp_nm || test -f $tmp_nm$ac_exeext ; then # Check to see if the nm accepts a BSD-compat flag. # Adding the `sed 1q' prevents false positives on HP-UX, which says: # nm: unknown option "B" ignored # Tru64's nm complains that /dev/null is an invalid object file if ($tmp_nm -B /dev/null 2>&1 | sed '1q'; exit 0) | egrep '(/dev/null|Invalid file or object type)' >/dev/null; then lt_cv_path_NM="$tmp_nm -B" break elif ($tmp_nm -p /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then lt_cv_path_NM="$tmp_nm -p" break else lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but continue # so that we can try to find one that supports BSD flags fi fi done IFS="$ac_save_ifs" test -z "$lt_cv_path_NM" && lt_cv_path_NM=nm fi]) NM="$lt_cv_path_NM" AC_MSG_RESULT([$NM]) ]) # AC_CHECK_LIBM - check for math library AC_DEFUN([AC_CHECK_LIBM], [AC_REQUIRE([AC_CANONICAL_HOST])dnl LIBM= case $host in *-*-beos* | *-*-cygwin* | *-*-pw32*) # These system don't have libm ;; *-ncr-sysv4.3*) AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw") AC_CHECK_LIB(m, main, LIBM="$LIBM -lm") ;; *) AC_CHECK_LIB(m, main, LIBM="-lm") ;; esac ]) # AC_LIBLTDL_CONVENIENCE[(dir)] - sets LIBLTDL to the link flags for # the libltdl convenience library and INCLTDL to the include flags for # the libltdl header and adds --enable-ltdl-convenience to the # configure arguments. Note that LIBLTDL and INCLTDL are not # AC_SUBSTed, nor is AC_CONFIG_SUBDIRS called. If DIR is not # provided, it is assumed to be `libltdl'. LIBLTDL will be prefixed # with '${top_builddir}/' and INCLTDL will be prefixed with # '${top_srcdir}/' (note the single quotes!). If your package is not # flat and you're not using automake, define top_builddir and # top_srcdir appropriately in the Makefiles. AC_DEFUN([AC_LIBLTDL_CONVENIENCE], [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl case $enable_ltdl_convenience in no) AC_MSG_ERROR([this package needs a convenience libltdl]) ;; "") enable_ltdl_convenience=yes ac_configure_args="$ac_configure_args --enable-ltdl-convenience" ;; esac LIBLTDL='${top_builddir}/'ifelse($#,1,[$1],['libltdl'])/libltdlc.la INCLTDL='-I${top_srcdir}/'ifelse($#,1,[$1],['libltdl']) ]) # AC_LIBLTDL_INSTALLABLE[(dir)] - sets LIBLTDL to the link flags for # the libltdl installable library and INCLTDL to the include flags for # the libltdl header and adds --enable-ltdl-install to the configure # arguments. Note that LIBLTDL and INCLTDL are not AC_SUBSTed, nor is # AC_CONFIG_SUBDIRS called. If DIR is not provided and an installed # libltdl is not found, it is assumed to be `libltdl'. LIBLTDL will # be prefixed with '${top_builddir}/' and INCLTDL will be prefixed # with '${top_srcdir}/' (note the single quotes!). If your package is # not flat and you're not using automake, define top_builddir and # top_srcdir appropriately in the Makefiles. # In the future, this macro may have to be called after AC_PROG_LIBTOOL. AC_DEFUN([AC_LIBLTDL_INSTALLABLE], [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl AC_CHECK_LIB(ltdl, main, [test x"$enable_ltdl_install" != xyes && enable_ltdl_install=no], [if test x"$enable_ltdl_install" = xno; then AC_MSG_WARN([libltdl not installed, but installation disabled]) else enable_ltdl_install=yes fi ]) if test x"$enable_ltdl_install" = x"yes"; then ac_configure_args="$ac_configure_args --enable-ltdl-install" LIBLTDL='${top_builddir}/'ifelse($#,1,[$1],['libltdl'])/libltdl.la INCLTDL='-I${top_srcdir}/'ifelse($#,1,[$1],['libltdl']) else ac_configure_args="$ac_configure_args --enable-ltdl-install=no" LIBLTDL="-lltdl" INCLTDL= fi ]) # old names AC_DEFUN([AM_PROG_LIBTOOL], [AC_PROG_LIBTOOL]) AC_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)]) AC_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)]) AC_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)]) AC_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)]) AC_DEFUN([AM_PROG_LD], [AC_PROG_LD]) AC_DEFUN([AM_PROG_NM], [AC_PROG_NM]) # This is just to silence aclocal about the macro not being used ifelse([AC_DISABLE_FAST_INSTALL]) tla-1.3.5+dfsg/src/expat/conftools/ltmain.sh0000644000175000017500000041723710457621771017523 0ustar useruser# ltmain.sh - Provide generalized library-building support services. # NOTE: Changing this file will not affect anything until you rerun configure. # # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001 # Free Software Foundation, Inc. # Originally by Gordon Matzigkeit , 1996 # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Check that we have a working $echo. if test "X$1" = X--no-reexec; then # Discard the --no-reexec flag, and continue. shift elif test "X$1" = X--fallback-echo; then # Avoid inline document here, it may be left over : elif test "X`($echo '\t') 2>/dev/null`" = 'X\t'; then # Yippee, $echo works! : else # Restart under the correct shell, and then maybe $echo will work. exec $SHELL "$0" --no-reexec ${1+"$@"} fi if test "X$1" = X--fallback-echo; then # used as fallback echo shift cat <&2 echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2 exit 1 fi # Global variables. mode=$default_mode nonopt= prev= prevopt= run= show="$echo" show_help= execute_dlfiles= lo2o="s/\\.lo\$/.${objext}/" o2lo="s/\\.${objext}\$/.lo/" # Parse our command line options once, thoroughly. while test $# -gt 0 do arg="$1" shift case $arg in -*=*) optarg=`$echo "X$arg" | $Xsed -e 's/[-_a-zA-Z0-9]*=//'` ;; *) optarg= ;; esac # If the previous option needs an argument, assign it. if test -n "$prev"; then case $prev in execute_dlfiles) execute_dlfiles="$execute_dlfiles $arg" ;; *) eval "$prev=\$arg" ;; esac prev= prevopt= continue fi # Have we seen a non-optional argument yet? case $arg in --help) show_help=yes ;; --version) echo "$PROGRAM (GNU $PACKAGE) $VERSION$TIMESTAMP" exit 0 ;; --config) sed -e '1,/^# ### BEGIN LIBTOOL CONFIG/d' -e '/^# ### END LIBTOOL CONFIG/,$d' $0 exit 0 ;; --debug) echo "$progname: enabling shell trace mode" set -x ;; --dry-run | -n) run=: ;; --features) echo "host: $host" if test "$build_libtool_libs" = yes; then echo "enable shared libraries" else echo "disable shared libraries" fi if test "$build_old_libs" = yes; then echo "enable static libraries" else echo "disable static libraries" fi exit 0 ;; --finish) mode="finish" ;; --mode) prevopt="--mode" prev=mode ;; --mode=*) mode="$optarg" ;; --quiet | --silent) show=: ;; -dlopen) prevopt="-dlopen" prev=execute_dlfiles ;; -*) $echo "$modename: unrecognized option \`$arg'" 1>&2 $echo "$help" 1>&2 exit 1 ;; *) nonopt="$arg" break ;; esac done if test -n "$prevopt"; then $echo "$modename: option \`$prevopt' requires an argument" 1>&2 $echo "$help" 1>&2 exit 1 fi # If this variable is set in any of the actions, the command in it # will be execed at the end. This prevents here-documents from being # left over by shells. exec_cmd= if test -z "$show_help"; then # Infer the operation mode. if test -z "$mode"; then case $nonopt in *cc | *++ | gcc* | *-gcc*) mode=link for arg do case $arg in -c) mode=compile break ;; esac done ;; *db | *dbx | *strace | *truss) mode=execute ;; *install*|cp|mv) mode=install ;; *rm) mode=uninstall ;; *) # If we have no mode, but dlfiles were specified, then do execute mode. test -n "$execute_dlfiles" && mode=execute # Just use the default operation mode. if test -z "$mode"; then if test -n "$nonopt"; then $echo "$modename: warning: cannot infer operation mode from \`$nonopt'" 1>&2 else $echo "$modename: warning: cannot infer operation mode without MODE-ARGS" 1>&2 fi fi ;; esac fi # Only execute mode is allowed to have -dlopen flags. if test -n "$execute_dlfiles" && test "$mode" != execute; then $echo "$modename: unrecognized option \`-dlopen'" 1>&2 $echo "$help" 1>&2 exit 1 fi # Change the help message to a mode-specific one. generic_help="$help" help="Try \`$modename --help --mode=$mode' for more information." # These modes are in order of execution frequency so that they run quickly. case $mode in # libtool compile mode compile) modename="$modename: compile" # Get the compilation command and the source file. base_compile= prev= lastarg= srcfile="$nonopt" suppress_output= user_target=no for arg do case $prev in "") ;; xcompiler) # Aesthetically quote the previous argument. prev= lastarg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` case $arg in # Double-quote args containing other shell metacharacters. # Many Bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac # Add the previous argument to base_compile. if test -z "$base_compile"; then base_compile="$lastarg" else base_compile="$base_compile $lastarg" fi continue ;; esac # Accept any command-line options. case $arg in -o) if test "$user_target" != "no"; then $echo "$modename: you cannot specify \`-o' more than once" 1>&2 exit 1 fi user_target=next ;; -static) build_old_libs=yes continue ;; -prefer-pic) pic_mode=yes continue ;; -prefer-non-pic) pic_mode=no continue ;; -Xcompiler) prev=xcompiler continue ;; -Wc,*) args=`$echo "X$arg" | $Xsed -e "s/^-Wc,//"` lastarg= save_ifs="$IFS"; IFS=',' for arg in $args; do IFS="$save_ifs" # Double-quote args containing other shell metacharacters. # Many Bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac lastarg="$lastarg $arg" done IFS="$save_ifs" lastarg=`$echo "X$lastarg" | $Xsed -e "s/^ //"` # Add the arguments to base_compile. if test -z "$base_compile"; then base_compile="$lastarg" else base_compile="$base_compile $lastarg" fi continue ;; esac case $user_target in next) # The next one is the -o target name user_target=yes continue ;; yes) # We got the output file user_target=set libobj="$arg" continue ;; esac # Accept the current argument as the source file. lastarg="$srcfile" srcfile="$arg" # Aesthetically quote the previous argument. # Backslashify any backslashes, double quotes, and dollar signs. # These are the only characters that are still specially # interpreted inside of double-quoted scrings. lastarg=`$echo "X$lastarg" | $Xsed -e "$sed_quote_subst"` # Double-quote args containing other shell metacharacters. # Many Bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. case $lastarg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") lastarg="\"$lastarg\"" ;; esac # Add the previous argument to base_compile. if test -z "$base_compile"; then base_compile="$lastarg" else base_compile="$base_compile $lastarg" fi done case $user_target in set) ;; no) # Get the name of the library object. libobj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%'` ;; *) $echo "$modename: you must specify a target with \`-o'" 1>&2 exit 1 ;; esac # Recognize several different file suffixes. # If the user specifies -o file.o, it is replaced with file.lo xform='[cCFSfmso]' case $libobj in *.ada) xform=ada ;; *.adb) xform=adb ;; *.ads) xform=ads ;; *.asm) xform=asm ;; *.c++) xform=c++ ;; *.cc) xform=cc ;; *.cpp) xform=cpp ;; *.cxx) xform=cxx ;; *.f90) xform=f90 ;; *.for) xform=for ;; esac libobj=`$echo "X$libobj" | $Xsed -e "s/\.$xform$/.lo/"` case $libobj in *.lo) obj=`$echo "X$libobj" | $Xsed -e "$lo2o"` ;; *) $echo "$modename: cannot determine name of library object from \`$libobj'" 1>&2 exit 1 ;; esac if test -z "$base_compile"; then $echo "$modename: you must specify a compilation command" 1>&2 $echo "$help" 1>&2 exit 1 fi # Delete any leftover library objects. if test "$build_old_libs" = yes; then removelist="$obj $libobj" else removelist="$libobj" fi $run $rm $removelist trap "$run $rm $removelist; exit 1" 1 2 15 # On Cygwin there's no "real" PIC flag so we must build both object types case $host_os in cygwin* | mingw* | pw32* | os2*) pic_mode=default ;; esac if test $pic_mode = no && test "$deplibs_check_method" != pass_all; then # non-PIC code in shared libraries is not supported pic_mode=default fi # Calculate the filename of the output object if compiler does # not support -o with -c if test "$compiler_c_o" = no; then output_obj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\.[^.]*$%%'`.${objext} lockfile="$output_obj.lock" removelist="$removelist $output_obj $lockfile" trap "$run $rm $removelist; exit 1" 1 2 15 else need_locks=no lockfile= fi # Lock this critical section if it is needed # We use this script file to make the link, it avoids creating a new file if test "$need_locks" = yes; then until $run ln "$0" "$lockfile" 2>/dev/null; do $show "Waiting for $lockfile to be removed" sleep 2 done elif test "$need_locks" = warn; then if test -f "$lockfile"; then echo "\ *** ERROR, $lockfile exists and contains: `cat $lockfile 2>/dev/null` This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $run $rm $removelist exit 1 fi echo $srcfile > "$lockfile" fi if test -n "$fix_srcfile_path"; then eval srcfile=\"$fix_srcfile_path\" fi # Only build a PIC object if we are building libtool libraries. if test "$build_libtool_libs" = yes; then # Without this assignment, base_compile gets emptied. fbsd_hideous_sh_bug=$base_compile if test "$pic_mode" != no; then # All platforms use -DPIC, to notify preprocessed assembler code. command="$base_compile $srcfile $pic_flag -DPIC" else # Don't build PIC code command="$base_compile $srcfile" fi if test "$build_old_libs" = yes; then lo_libobj="$libobj" dir=`$echo "X$libobj" | $Xsed -e 's%/[^/]*$%%'` if test "X$dir" = "X$libobj"; then dir="$objdir" else dir="$dir/$objdir" fi libobj="$dir/"`$echo "X$libobj" | $Xsed -e 's%^.*/%%'` if test -d "$dir"; then $show "$rm $libobj" $run $rm $libobj else $show "$mkdir $dir" $run $mkdir $dir status=$? if test $status -ne 0 && test ! -d $dir; then exit $status fi fi fi if test "$compiler_o_lo" = yes; then output_obj="$libobj" command="$command -o $output_obj" elif test "$compiler_c_o" = yes; then output_obj="$obj" command="$command -o $output_obj" fi $run $rm "$output_obj" $show "$command" if $run eval "$command"; then : else test -n "$output_obj" && $run $rm $removelist exit 1 fi if test "$need_locks" = warn && test x"`cat $lockfile 2>/dev/null`" != x"$srcfile"; then echo "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $run $rm $removelist exit 1 fi # Just move the object if needed, then go on to compile the next one if test x"$output_obj" != x"$libobj"; then $show "$mv $output_obj $libobj" if $run $mv $output_obj $libobj; then : else error=$? $run $rm $removelist exit $error fi fi # If we have no pic_flag, then copy the object into place and finish. if (test -z "$pic_flag" || test "$pic_mode" != default) && test "$build_old_libs" = yes; then # Rename the .lo from within objdir to obj if test -f $obj; then $show $rm $obj $run $rm $obj fi $show "$mv $libobj $obj" if $run $mv $libobj $obj; then : else error=$? $run $rm $removelist exit $error fi xdir=`$echo "X$obj" | $Xsed -e 's%/[^/]*$%%'` if test "X$xdir" = "X$obj"; then xdir="." else xdir="$xdir" fi baseobj=`$echo "X$obj" | $Xsed -e "s%.*/%%"` libobj=`$echo "X$baseobj" | $Xsed -e "$o2lo"` # Now arrange that obj and lo_libobj become the same file $show "(cd $xdir && $LN_S $baseobj $libobj)" if $run eval '(cd $xdir && $LN_S $baseobj $libobj)'; then # Unlock the critical section if it was locked if test "$need_locks" != no; then $run $rm "$lockfile" fi exit 0 else error=$? $run $rm $removelist exit $error fi fi # Allow error messages only from the first compilation. suppress_output=' >/dev/null 2>&1' fi # Only build a position-dependent object if we build old libraries. if test "$build_old_libs" = yes; then if test "$pic_mode" != yes; then # Don't build PIC code command="$base_compile $srcfile" else # All platforms use -DPIC, to notify preprocessed assembler code. command="$base_compile $srcfile $pic_flag -DPIC" fi if test "$compiler_c_o" = yes; then command="$command -o $obj" output_obj="$obj" fi # Suppress compiler output if we already did a PIC compilation. command="$command$suppress_output" $run $rm "$output_obj" $show "$command" if $run eval "$command"; then : else $run $rm $removelist exit 1 fi if test "$need_locks" = warn && test x"`cat $lockfile 2>/dev/null`" != x"$srcfile"; then echo "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $run $rm $removelist exit 1 fi # Just move the object if needed if test x"$output_obj" != x"$obj"; then $show "$mv $output_obj $obj" if $run $mv $output_obj $obj; then : else error=$? $run $rm $removelist exit $error fi fi # Create an invalid libtool object if no PIC, so that we do not # accidentally link it into a program. if test "$build_libtool_libs" != yes; then $show "echo timestamp > $libobj" $run eval "echo timestamp > \$libobj" || exit $? else # Move the .lo from within objdir $show "$mv $libobj $lo_libobj" if $run $mv $libobj $lo_libobj; then : else error=$? $run $rm $removelist exit $error fi fi fi # Unlock the critical section if it was locked if test "$need_locks" != no; then $run $rm "$lockfile" fi exit 0 ;; # libtool link mode link | relink) modename="$modename: link" case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) # It is impossible to link a dll without this setting, and # we shouldn't force the makefile maintainer to figure out # which system we are compiling for in order to pass an extra # flag for every libtool invokation. # allow_undefined=no # FIXME: Unfortunately, there are problems with the above when trying # to make a dll which has undefined symbols, in which case not # even a static library is built. For now, we need to specify # -no-undefined on the libtool link line when we can be certain # that all symbols are satisfied, otherwise we get a static library. allow_undefined=yes ;; *) allow_undefined=yes ;; esac libtool_args="$nonopt" compile_command="$nonopt" finalize_command="$nonopt" compile_rpath= finalize_rpath= compile_shlibpath= finalize_shlibpath= convenience= old_convenience= deplibs= old_deplibs= compiler_flags= linker_flags= dllsearchpath= lib_search_path=`pwd` avoid_version=no dlfiles= dlprefiles= dlself=no export_dynamic=no export_symbols= export_symbols_regex= generated= libobjs= ltlibs= module=no no_install=no objs= prefer_static_libs=no preload=no prev= prevarg= release= rpath= xrpath= perm_rpath= temp_rpath= thread_safe=no vinfo= # We need to know -static, to get the right output filenames. for arg do case $arg in -all-static | -static) if test "X$arg" = "X-all-static"; then if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then $echo "$modename: warning: complete static linking is impossible in this configuration" 1>&2 fi if test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi else if test -z "$pic_flag" && test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi fi build_libtool_libs=no build_old_libs=yes prefer_static_libs=yes break ;; esac done # See if our shared archives depend on static archives. test -n "$old_archive_from_new_cmds" && build_old_libs=yes # Go through the arguments, transforming them on the way. while test $# -gt 0; do arg="$1" shift case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") qarg=\"`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`\" ### testsuite: skip nested quoting test ;; *) qarg=$arg ;; esac libtool_args="$libtool_args $qarg" # If the previous option needs an argument, assign it. if test -n "$prev"; then case $prev in output) compile_command="$compile_command @OUTPUT@" finalize_command="$finalize_command @OUTPUT@" ;; esac case $prev in dlfiles|dlprefiles) if test "$preload" = no; then # Add the symbol object into the linking commands. compile_command="$compile_command @SYMFILE@" finalize_command="$finalize_command @SYMFILE@" preload=yes fi case $arg in *.la | *.lo) ;; # We handle these cases below. force) if test "$dlself" = no; then dlself=needless export_dynamic=yes fi prev= continue ;; self) if test "$prev" = dlprefiles; then dlself=yes elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then dlself=yes else dlself=needless export_dynamic=yes fi prev= continue ;; *) if test "$prev" = dlfiles; then dlfiles="$dlfiles $arg" else dlprefiles="$dlprefiles $arg" fi prev= continue ;; esac ;; expsyms) export_symbols="$arg" if test ! -f "$arg"; then $echo "$modename: symbol file \`$arg' does not exist" exit 1 fi prev= continue ;; expsyms_regex) export_symbols_regex="$arg" prev= continue ;; release) release="-$arg" prev= continue ;; rpath | xrpath) # We need an absolute path. case $arg in [\\/]* | [A-Za-z]:[\\/]*) ;; *) $echo "$modename: only absolute run-paths are allowed" 1>&2 exit 1 ;; esac if test "$prev" = rpath; then case "$rpath " in *" $arg "*) ;; *) rpath="$rpath $arg" ;; esac else case "$xrpath " in *" $arg "*) ;; *) xrpath="$xrpath $arg" ;; esac fi prev= continue ;; xcompiler) compiler_flags="$compiler_flags $qarg" prev= compile_command="$compile_command $qarg" finalize_command="$finalize_command $qarg" continue ;; xlinker) linker_flags="$linker_flags $qarg" compiler_flags="$compiler_flags $wl$qarg" prev= compile_command="$compile_command $wl$qarg" finalize_command="$finalize_command $wl$qarg" continue ;; *) eval "$prev=\"\$arg\"" prev= continue ;; esac fi # test -n $prev prevarg="$arg" case $arg in -all-static) if test -n "$link_static_flag"; then compile_command="$compile_command $link_static_flag" finalize_command="$finalize_command $link_static_flag" fi continue ;; -allow-undefined) # FIXME: remove this flag sometime in the future. $echo "$modename: \`-allow-undefined' is deprecated because it is the default" 1>&2 continue ;; -avoid-version) avoid_version=yes continue ;; -dlopen) prev=dlfiles continue ;; -dlpreopen) prev=dlprefiles continue ;; -export-dynamic) export_dynamic=yes continue ;; -export-symbols | -export-symbols-regex) if test -n "$export_symbols" || test -n "$export_symbols_regex"; then $echo "$modename: more than one -exported-symbols argument is not allowed" exit 1 fi if test "X$arg" = "X-export-symbols"; then prev=expsyms else prev=expsyms_regex fi continue ;; # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* # so, if we see these flags be careful not to treat them like -L -L[A-Z][A-Z]*:*) case $with_gcc/$host in no/*-*-irix*) compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" ;; esac continue ;; -L*) dir=`$echo "X$arg" | $Xsed -e 's/^-L//'` # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) absdir=`cd "$dir" && pwd` if test -z "$absdir"; then $echo "$modename: cannot determine absolute directory name of \`$dir'" 1>&2 exit 1 fi dir="$absdir" ;; esac case "$deplibs " in *" -L$dir "*) ;; *) deplibs="$deplibs -L$dir" lib_search_path="$lib_search_path $dir" ;; esac case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) case :$dllsearchpath: in *":$dir:"*) ;; *) dllsearchpath="$dllsearchpath:$dir";; esac ;; esac continue ;; -l*) if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then case $host in *-*-cygwin* | *-*-pw32* | *-*-beos*) # These systems don't actually have a C or math library (as such) continue ;; *-*-mingw* | *-*-os2*) # These systems don't actually have a C library (as such) test "X$arg" = "X-lc" && continue ;; *-*-openbsd*) # Do not include libc due to us having libc/libc_r. test "X$arg" = "X-lc" && continue ;; esac elif test "X$arg" = "X-lc_r"; then case $host in *-*-openbsd*) # Do not include libc_r directly, use -pthread flag. continue ;; esac fi deplibs="$deplibs $arg" continue ;; -module) module=yes continue ;; -no-fast-install) fast_install=no continue ;; -no-install) case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) # The PATH hackery in wrapper scripts is required on Windows # in order for the loader to find any dlls it needs. $echo "$modename: warning: \`-no-install' is ignored for $host" 1>&2 $echo "$modename: warning: assuming \`-no-fast-install' instead" 1>&2 fast_install=no ;; *) no_install=yes ;; esac continue ;; -no-undefined) allow_undefined=no continue ;; -o) prev=output ;; -release) prev=release continue ;; -rpath) prev=rpath continue ;; -R) prev=xrpath continue ;; -R*) dir=`$echo "X$arg" | $Xsed -e 's/^-R//'` # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) $echo "$modename: only absolute run-paths are allowed" 1>&2 exit 1 ;; esac case "$xrpath " in *" $dir "*) ;; *) xrpath="$xrpath $dir" ;; esac continue ;; -static) # The effects of -static are defined in a previous loop. # We used to do the same as -all-static on platforms that # didn't have a PIC flag, but the assumption that the effects # would be equivalent was wrong. It would break on at least # Digital Unix and AIX. continue ;; -thread-safe) thread_safe=yes continue ;; -version-info) prev=vinfo continue ;; -Wc,*) args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wc,//'` arg= save_ifs="$IFS"; IFS=',' for flag in $args; do IFS="$save_ifs" case $flag in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") flag="\"$flag\"" ;; esac arg="$arg $wl$flag" compiler_flags="$compiler_flags $flag" done IFS="$save_ifs" arg=`$echo "X$arg" | $Xsed -e "s/^ //"` ;; -Wl,*) args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wl,//'` arg= save_ifs="$IFS"; IFS=',' for flag in $args; do IFS="$save_ifs" case $flag in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") flag="\"$flag\"" ;; esac arg="$arg $wl$flag" compiler_flags="$compiler_flags $wl$flag" linker_flags="$linker_flags $flag" done IFS="$save_ifs" arg=`$echo "X$arg" | $Xsed -e "s/^ //"` ;; -Xcompiler) prev=xcompiler continue ;; -Xlinker) prev=xlinker continue ;; # Some other compiler flag. -* | +*) # Unknown arguments in both finalize_command and compile_command need # to be aesthetically quoted because they are evaled later. arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac ;; *.lo | *.$objext) # A library or standard object. if test "$prev" = dlfiles; then # This file was specified with -dlopen. if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then dlfiles="$dlfiles $arg" prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi if test "$prev" = dlprefiles; then # Preload the old-style object. dlprefiles="$dlprefiles "`$echo "X$arg" | $Xsed -e "$lo2o"` prev= else case $arg in *.lo) libobjs="$libobjs $arg" ;; *) objs="$objs $arg" ;; esac fi ;; *.$libext) # An archive. deplibs="$deplibs $arg" old_deplibs="$old_deplibs $arg" continue ;; *.la) # A libtool-controlled library. if test "$prev" = dlfiles; then # This library was specified with -dlopen. dlfiles="$dlfiles $arg" prev= elif test "$prev" = dlprefiles; then # The library was specified with -dlpreopen. dlprefiles="$dlprefiles $arg" prev= else deplibs="$deplibs $arg" fi continue ;; # Some other compiler argument. *) # Unknown arguments in both finalize_command and compile_command need # to be aesthetically quoted because they are evaled later. arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac ;; esac # arg # Now actually substitute the argument into the commands. if test -n "$arg"; then compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" fi done # argument parsing loop if test -n "$prev"; then $echo "$modename: the \`$prevarg' option requires an argument" 1>&2 $echo "$help" 1>&2 exit 1 fi if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then eval arg=\"$export_dynamic_flag_spec\" compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" fi # calculate the name of the file, without its directory outputname=`$echo "X$output" | $Xsed -e 's%^.*/%%'` libobjs_save="$libobjs" if test -n "$shlibpath_var"; then # get the directories listed in $shlibpath_var eval shlib_search_path=\`\$echo \"X\${$shlibpath_var}\" \| \$Xsed -e \'s/:/ /g\'\` else shlib_search_path= fi eval sys_lib_search_path=\"$sys_lib_search_path_spec\" eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" output_objdir=`$echo "X$output" | $Xsed -e 's%/[^/]*$%%'` if test "X$output_objdir" = "X$output"; then output_objdir="$objdir" else output_objdir="$output_objdir/$objdir" fi # Create the object directory. if test ! -d $output_objdir; then $show "$mkdir $output_objdir" $run $mkdir $output_objdir status=$? if test $status -ne 0 && test ! -d $output_objdir; then exit $status fi fi # Determine the type of output case $output in "") $echo "$modename: you must specify an output file" 1>&2 $echo "$help" 1>&2 exit 1 ;; *.$libext) linkmode=oldlib ;; *.lo | *.$objext) linkmode=obj ;; *.la) linkmode=lib ;; *) linkmode=prog ;; # Anything else should be a program. esac specialdeplibs= libs= # Find all interdependent deplibs by searching for libraries # that are linked more than once (e.g. -la -lb -la) for deplib in $deplibs; do case "$libs " in *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; esac libs="$libs $deplib" done deplibs= newdependency_libs= newlib_search_path= need_relink=no # whether we're linking any uninstalled libtool libraries notinst_deplibs= # not-installed libtool libraries notinst_path= # paths that contain not-installed libtool libraries case $linkmode in lib) passes="conv link" for file in $dlfiles $dlprefiles; do case $file in *.la) ;; *) $echo "$modename: libraries can \`-dlopen' only libtool libraries: $file" 1>&2 exit 1 ;; esac done ;; prog) compile_deplibs= finalize_deplibs= alldeplibs=no newdlfiles= newdlprefiles= passes="conv scan dlopen dlpreopen link" ;; *) passes="conv" ;; esac for pass in $passes; do if test $linkmode = prog; then # Determine which files to process case $pass in dlopen) libs="$dlfiles" save_deplibs="$deplibs" # Collect dlpreopened libraries deplibs= ;; dlpreopen) libs="$dlprefiles" ;; link) libs="$deplibs %DEPLIBS% $dependency_libs" ;; esac fi for deplib in $libs; do lib= found=no case $deplib in -l*) if test $linkmode = oldlib && test $linkmode = obj; then $echo "$modename: warning: \`-l' is ignored for archives/objects: $deplib" 1>&2 continue fi if test $pass = conv; then deplibs="$deplib $deplibs" continue fi name=`$echo "X$deplib" | $Xsed -e 's/^-l//'` for searchdir in $newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path; do # Search the libtool library lib="$searchdir/lib${name}.la" if test -f "$lib"; then found=yes break fi done if test "$found" != yes; then # deplib doesn't seem to be a libtool library if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" test $linkmode = lib && newdependency_libs="$deplib $newdependency_libs" fi continue fi ;; # -l -L*) case $linkmode in lib) deplibs="$deplib $deplibs" test $pass = conv && continue newdependency_libs="$deplib $newdependency_libs" newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'` ;; prog) if test $pass = conv; then deplibs="$deplib $deplibs" continue fi if test $pass = scan; then deplibs="$deplib $deplibs" newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'` else compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi ;; *) $echo "$modename: warning: \`-L' is ignored for archives/objects: $deplib" 1>&2 ;; esac # linkmode continue ;; # -L -R*) if test $pass = link; then dir=`$echo "X$deplib" | $Xsed -e 's/^-R//'` # Make sure the xrpath contains only unique directories. case "$xrpath " in *" $dir "*) ;; *) xrpath="$xrpath $dir" ;; esac fi deplibs="$deplib $deplibs" continue ;; *.la) lib="$deplib" ;; *.$libext) if test $pass = conv; then deplibs="$deplib $deplibs" continue fi case $linkmode in lib) if test "$deplibs_check_method" != pass_all; then echo echo "*** Warning: This library needs some functionality provided by $deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have." else echo echo "*** Warning: Linking the shared library $output against the" echo "*** static library $deplib is not portable!" deplibs="$deplib $deplibs" fi continue ;; prog) if test $pass != link; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi continue ;; esac # linkmode ;; # *.$libext *.lo | *.$objext) if test $pass = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then # If there is no dlopen support or we're linking statically, # we need to preload. newdlprefiles="$newdlprefiles $deplib" compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else newdlfiles="$newdlfiles $deplib" fi continue ;; %DEPLIBS%) alldeplibs=yes continue ;; esac # case $deplib if test $found = yes || test -f "$lib"; then : else $echo "$modename: cannot find the library \`$lib'" 1>&2 exit 1 fi # Check to see that this really is a libtool archive. if (sed -e '2q' $lib | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : else $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 exit 1 fi ladir=`$echo "X$lib" | $Xsed -e 's%/[^/]*$%%'` test "X$ladir" = "X$lib" && ladir="." dlname= dlopen= dlpreopen= libdir= library_names= old_library= # If the library was installed with an old release of libtool, # it will not redefine variable installed. installed=yes # Read the .la file case $lib in */* | *\\*) . $lib ;; *) . ./$lib ;; esac if test "$linkmode,$pass" = "lib,link" || test "$linkmode,$pass" = "prog,scan" || { test $linkmode = oldlib && test $linkmode = obj; }; then # Add dl[pre]opened files of deplib test -n "$dlopen" && dlfiles="$dlfiles $dlopen" test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen" fi if test $pass = conv; then # Only check for convenience libraries deplibs="$lib $deplibs" if test -z "$libdir"; then if test -z "$old_library"; then $echo "$modename: cannot find name of link library for \`$lib'" 1>&2 exit 1 fi # It is a libtool convenience library, so add in its objects. convenience="$convenience $ladir/$objdir/$old_library" old_convenience="$old_convenience $ladir/$objdir/$old_library" tmp_libs= for deplib in $dependency_libs; do deplibs="$deplib $deplibs" case "$tmp_libs " in *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; esac tmp_libs="$tmp_libs $deplib" done elif test $linkmode != prog && test $linkmode != lib; then $echo "$modename: \`$lib' is not a convenience library" 1>&2 exit 1 fi continue fi # $pass = conv # Get the name of the library we link against. linklib= for l in $old_library $library_names; do linklib="$l" done if test -z "$linklib"; then $echo "$modename: cannot find name of link library for \`$lib'" 1>&2 exit 1 fi # This library was specified with -dlopen. if test $pass = dlopen; then if test -z "$libdir"; then $echo "$modename: cannot -dlopen a convenience library: \`$lib'" 1>&2 exit 1 fi if test -z "$dlname" || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then # If there is no dlname, no dlopen support or we're linking # statically, we need to preload. dlprefiles="$dlprefiles $lib" else newdlfiles="$newdlfiles $lib" fi continue fi # $pass = dlopen # We need an absolute path. case $ladir in [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;; *) abs_ladir=`cd "$ladir" && pwd` if test -z "$abs_ladir"; then $echo "$modename: warning: cannot determine absolute directory name of \`$ladir'" 1>&2 $echo "$modename: passing it literally to the linker, although it might fail" 1>&2 abs_ladir="$ladir" fi ;; esac laname=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` # Find the relevant object directory and library name. if test "X$installed" = Xyes; then if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then $echo "$modename: warning: library \`$lib' was moved." 1>&2 dir="$ladir" absdir="$abs_ladir" libdir="$abs_ladir" else dir="$libdir" absdir="$libdir" fi else dir="$ladir/$objdir" absdir="$abs_ladir/$objdir" # Remove this search path later notinst_path="$notinst_path $abs_ladir" fi # $installed = yes name=`$echo "X$laname" | $Xsed -e 's/\.la$//' -e 's/^lib//'` # This library was specified with -dlpreopen. if test $pass = dlpreopen; then if test -z "$libdir"; then $echo "$modename: cannot -dlpreopen a convenience library: \`$lib'" 1>&2 exit 1 fi # Prefer using a static library (so that no silly _DYNAMIC symbols # are required to link). if test -n "$old_library"; then newdlprefiles="$newdlprefiles $dir/$old_library" # Otherwise, use the dlname, so that lt_dlopen finds it. elif test -n "$dlname"; then newdlprefiles="$newdlprefiles $dir/$dlname" else newdlprefiles="$newdlprefiles $dir/$linklib" fi fi # $pass = dlpreopen if test -z "$libdir"; then # Link the convenience library if test $linkmode = lib; then deplibs="$dir/$old_library $deplibs" elif test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$dir/$old_library $compile_deplibs" finalize_deplibs="$dir/$old_library $finalize_deplibs" else deplibs="$lib $deplibs" fi continue fi if test $linkmode = prog && test $pass != link; then newlib_search_path="$newlib_search_path $ladir" deplibs="$lib $deplibs" linkalldeplibs=no if test "$link_all_deplibs" != no || test -z "$library_names" || test "$build_libtool_libs" = no; then linkalldeplibs=yes fi tmp_libs= for deplib in $dependency_libs; do case $deplib in -L*) newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`;; ### testsuite: skip nested quoting test esac # Need to link against all dependency_libs? if test $linkalldeplibs = yes; then deplibs="$deplib $deplibs" else # Need to hardcode shared library paths # or/and link against static libraries newdependency_libs="$deplib $newdependency_libs" fi case "$tmp_libs " in *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; esac tmp_libs="$tmp_libs $deplib" done # for deplib continue fi # $linkmode = prog... link_static=no # Whether the deplib will be linked statically if test -n "$library_names" && { test "$prefer_static_libs" = no || test -z "$old_library"; }; then # Link against this shared library if test "$linkmode,$pass" = "prog,link" || { test $linkmode = lib && test $hardcode_into_libs = yes; }; then # Hardcode the library path. # Skip directories that are in the system default run-time # search path. case " $sys_lib_dlsearch_path " in *" $absdir "*) ;; *) case "$compile_rpath " in *" $absdir "*) ;; *) compile_rpath="$compile_rpath $absdir" esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) finalize_rpath="$finalize_rpath $libdir" esac ;; esac if test $linkmode = prog; then # We need to hardcode the library path if test -n "$shlibpath_var"; then # Make sure the rpath contains only unique directories. case "$temp_rpath " in *" $dir "*) ;; *" $absdir "*) ;; *) temp_rpath="$temp_rpath $dir" ;; esac fi fi fi # $linkmode,$pass = prog,link... if test "$alldeplibs" = yes && { test "$deplibs_check_method" = pass_all || { test "$build_libtool_libs" = yes && test -n "$library_names"; }; }; then # We only need to search for static libraries continue fi if test "$installed" = no; then notinst_deplibs="$notinst_deplibs $lib" need_relink=yes fi if test -n "$old_archive_from_expsyms_cmds"; then # figure out the soname set dummy $library_names realname="$2" shift; shift libname=`eval \\$echo \"$libname_spec\"` # use dlname if we got it. it's perfectly good, no? if test -n "$dlname"; then soname="$dlname" elif test -n "$soname_spec"; then # bleh windows case $host in *cygwin*) major=`expr $current - $age` versuffix="-$major" ;; esac eval soname=\"$soname_spec\" else soname="$realname" fi # Make a new name for the extract_expsyms_cmds to use soroot="$soname" soname=`echo $soroot | sed -e 's/^.*\///'` newlib="libimp-`echo $soname | sed 's/^lib//;s/\.dll$//'`.a" # If the library has no export list, then create one now if test -f "$output_objdir/$soname-def"; then : else $show "extracting exported symbol list from \`$soname'" save_ifs="$IFS"; IFS='~' eval cmds=\"$extract_expsyms_cmds\" for cmd in $cmds; do IFS="$save_ifs" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" fi # Create $newlib if test -f "$output_objdir/$newlib"; then :; else $show "generating import library for \`$soname'" save_ifs="$IFS"; IFS='~' eval cmds=\"$old_archive_from_expsyms_cmds\" for cmd in $cmds; do IFS="$save_ifs" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" fi # make sure the library variables are pointing to the new library dir=$output_objdir linklib=$newlib fi # test -n $old_archive_from_expsyms_cmds if test $linkmode = prog || test "$mode" != relink; then add_shlibpath= add_dir= add= lib_linked=yes case $hardcode_action in immediate | unsupported) if test "$hardcode_direct" = no; then add="$dir/$linklib" elif test "$hardcode_minus_L" = no; then case $host in *-*-sunos*) add_shlibpath="$dir" ;; esac add_dir="-L$dir" add="-l$name" elif test "$hardcode_shlibpath_var" = no; then add_shlibpath="$dir" add="-l$name" else lib_linked=no fi ;; relink) if test "$hardcode_direct" = yes; then add="$dir/$linklib" elif test "$hardcode_minus_L" = yes; then add_dir="-L$dir" add="-l$name" elif test "$hardcode_shlibpath_var" = yes; then add_shlibpath="$dir" add="-l$name" else lib_linked=no fi ;; *) lib_linked=no ;; esac if test "$lib_linked" != yes; then $echo "$modename: configuration error: unsupported hardcode properties" exit 1 fi if test -n "$add_shlibpath"; then case :$compile_shlibpath: in *":$add_shlibpath:"*) ;; *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;; esac fi if test $linkmode = prog; then test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" test -n "$add" && compile_deplibs="$add $compile_deplibs" else test -n "$add_dir" && deplibs="$add_dir $deplibs" test -n "$add" && deplibs="$add $deplibs" if test "$hardcode_direct" != yes && \ test "$hardcode_minus_L" != yes && \ test "$hardcode_shlibpath_var" = yes; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; esac fi fi fi if test $linkmode = prog || test "$mode" = relink; then add_shlibpath= add_dir= add= # Finalize command for both is simple: just hardcode it. if test "$hardcode_direct" = yes; then add="$libdir/$linklib" elif test "$hardcode_minus_L" = yes; then add_dir="-L$libdir" add="-l$name" elif test "$hardcode_shlibpath_var" = yes; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; esac add="-l$name" else # We cannot seem to hardcode it, guess we'll fake it. add_dir="-L$libdir" add="-l$name" fi if test $linkmode = prog; then test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" test -n "$add" && finalize_deplibs="$add $finalize_deplibs" else test -n "$add_dir" && deplibs="$add_dir $deplibs" test -n "$add" && deplibs="$add $deplibs" fi fi elif test $linkmode = prog; then if test "$alldeplibs" = yes && { test "$deplibs_check_method" = pass_all || { test "$build_libtool_libs" = yes && test -n "$library_names"; }; }; then # We only need to search for static libraries continue fi # Try to link the static library # Here we assume that one of hardcode_direct or hardcode_minus_L # is not unsupported. This is valid on all known static and # shared platforms. if test "$hardcode_direct" != unsupported; then test -n "$old_library" && linklib="$old_library" compile_deplibs="$dir/$linklib $compile_deplibs" finalize_deplibs="$dir/$linklib $finalize_deplibs" else compile_deplibs="-l$name -L$dir $compile_deplibs" finalize_deplibs="-l$name -L$dir $finalize_deplibs" fi elif test "$build_libtool_libs" = yes; then # Not a shared library if test "$deplibs_check_method" != pass_all; then # We're trying link a shared library against a static one # but the system doesn't support it. # Just print a warning and add the library to dependency_libs so # that the program can be linked against the static library. echo echo "*** Warning: This library needs some functionality provided by $lib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have." if test "$module" = yes; then echo "*** Therefore, libtool will create a static module, that should work " echo "*** as long as the dlopening application is linked with the -dlopen flag." if test -z "$global_symbol_pipe"; then echo echo "*** However, this would only work if libtool was able to extract symbol" echo "*** lists from a program, using \`nm' or equivalent, but libtool could" echo "*** not find such a program. So, this module is probably useless." echo "*** \`nm' from GNU binutils and a full rebuild may help." fi if test "$build_old_libs" = no; then build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi fi else convenience="$convenience $dir/$old_library" old_convenience="$old_convenience $dir/$old_library" deplibs="$dir/$old_library $deplibs" link_static=yes fi fi # link shared/static library? if test $linkmode = lib; then if test -n "$dependency_libs" && { test $hardcode_into_libs != yes || test $build_old_libs = yes || test $link_static = yes; }; then # Extract -R from dependency_libs temp_deplibs= for libdir in $dependency_libs; do case $libdir in -R*) temp_xrpath=`$echo "X$libdir" | $Xsed -e 's/^-R//'` case " $xrpath " in *" $temp_xrpath "*) ;; *) xrpath="$xrpath $temp_xrpath";; esac;; *) temp_deplibs="$temp_deplibs $libdir";; esac done dependency_libs="$temp_deplibs" fi newlib_search_path="$newlib_search_path $absdir" # Link against this library test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs" # ... and its dependency_libs tmp_libs= for deplib in $dependency_libs; do newdependency_libs="$deplib $newdependency_libs" case "$tmp_libs " in *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; esac tmp_libs="$tmp_libs $deplib" done if test $link_all_deplibs != no; then # Add the search paths of all dependency libraries for deplib in $dependency_libs; do case $deplib in -L*) path="$deplib" ;; *.la) dir=`$echo "X$deplib" | $Xsed -e 's%/[^/]*$%%'` test "X$dir" = "X$deplib" && dir="." # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; *) absdir=`cd "$dir" && pwd` if test -z "$absdir"; then $echo "$modename: warning: cannot determine absolute directory name of \`$dir'" 1>&2 absdir="$dir" fi ;; esac if grep "^installed=no" $deplib > /dev/null; then path="-L$absdir/$objdir" else eval libdir=`sed -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` if test -z "$libdir"; then $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2 exit 1 fi if test "$absdir" != "$libdir"; then $echo "$modename: warning: \`$deplib' seems to be moved" 1>&2 fi path="-L$absdir" fi ;; *) continue ;; esac case " $deplibs " in *" $path "*) ;; *) deplibs="$deplibs $path" ;; esac done fi # link_all_deplibs != no fi # linkmode = lib done # for deplib in $libs if test $pass = dlpreopen; then # Link the dlpreopened libraries before other libraries for deplib in $save_deplibs; do deplibs="$deplib $deplibs" done fi if test $pass != dlopen; then test $pass != scan && dependency_libs="$newdependency_libs" if test $pass != conv; then # Make sure lib_search_path contains only unique directories. lib_search_path= for dir in $newlib_search_path; do case "$lib_search_path " in *" $dir "*) ;; *) lib_search_path="$lib_search_path $dir" ;; esac done newlib_search_path= fi if test "$linkmode,$pass" != "prog,link"; then vars="deplibs" else vars="compile_deplibs finalize_deplibs" fi for var in $vars dependency_libs; do # Add libraries to $var in reverse order eval tmp_libs=\"\$$var\" new_libs= for deplib in $tmp_libs; do case $deplib in -L*) new_libs="$deplib $new_libs" ;; *) case " $specialdeplibs " in *" $deplib "*) new_libs="$deplib $new_libs" ;; *) case " $new_libs " in *" $deplib "*) ;; *) new_libs="$deplib $new_libs" ;; esac ;; esac ;; esac done tmp_libs= for deplib in $new_libs; do case $deplib in -L*) case " $tmp_libs " in *" $deplib "*) ;; *) tmp_libs="$tmp_libs $deplib" ;; esac ;; *) tmp_libs="$tmp_libs $deplib" ;; esac done eval $var=\"$tmp_libs\" done # for var fi if test "$pass" = "conv" && { test "$linkmode" = "lib" || test "$linkmode" = "prog"; }; then libs="$deplibs" # reset libs deplibs= fi done # for pass if test $linkmode = prog; then dlfiles="$newdlfiles" dlprefiles="$newdlprefiles" fi case $linkmode in oldlib) if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then $echo "$modename: warning: \`-dlopen' is ignored for archives" 1>&2 fi if test -n "$rpath"; then $echo "$modename: warning: \`-rpath' is ignored for archives" 1>&2 fi if test -n "$xrpath"; then $echo "$modename: warning: \`-R' is ignored for archives" 1>&2 fi if test -n "$vinfo"; then $echo "$modename: warning: \`-version-info' is ignored for archives" 1>&2 fi if test -n "$release"; then $echo "$modename: warning: \`-release' is ignored for archives" 1>&2 fi if test -n "$export_symbols" || test -n "$export_symbols_regex"; then $echo "$modename: warning: \`-export-symbols' is ignored for archives" 1>&2 fi # Now set the variables for building old libraries. build_libtool_libs=no oldlibs="$output" objs="$objs$old_deplibs" ;; lib) # Make sure we only generate libraries of the form `libNAME.la'. case $outputname in lib*) name=`$echo "X$outputname" | $Xsed -e 's/\.la$//' -e 's/^lib//'` eval libname=\"$libname_spec\" ;; *) if test "$module" = no; then $echo "$modename: libtool library \`$output' must begin with \`lib'" 1>&2 $echo "$help" 1>&2 exit 1 fi if test "$need_lib_prefix" != no; then # Add the "lib" prefix for modules if required name=`$echo "X$outputname" | $Xsed -e 's/\.la$//'` eval libname=\"$libname_spec\" else libname=`$echo "X$outputname" | $Xsed -e 's/\.la$//'` fi ;; esac if test -n "$objs"; then if test "$deplibs_check_method" != pass_all; then $echo "$modename: cannot build libtool library \`$output' from non-libtool objects on this host:$objs" 2>&1 exit 1 else echo echo "*** Warning: Linking the shared library $output against the non-libtool" echo "*** objects $objs is not portable!" libobjs="$libobjs $objs" fi fi if test "$dlself" != no; then $echo "$modename: warning: \`-dlopen self' is ignored for libtool libraries" 1>&2 fi set dummy $rpath if test $# -gt 2; then $echo "$modename: warning: ignoring multiple \`-rpath's for a libtool library" 1>&2 fi install_libdir="$2" oldlibs= if test -z "$rpath"; then if test "$build_libtool_libs" = yes; then # Building a libtool convenience library. libext=al oldlibs="$output_objdir/$libname.$libext $oldlibs" build_libtool_libs=convenience build_old_libs=yes fi if test -n "$vinfo"; then $echo "$modename: warning: \`-version-info' is ignored for convenience libraries" 1>&2 fi if test -n "$release"; then $echo "$modename: warning: \`-release' is ignored for convenience libraries" 1>&2 fi else # Parse the version information argument. save_ifs="$IFS"; IFS=':' set dummy $vinfo 0 0 0 IFS="$save_ifs" if test -n "$8"; then $echo "$modename: too many parameters to \`-version-info'" 1>&2 $echo "$help" 1>&2 exit 1 fi current="$2" revision="$3" age="$4" # Check that each of the things are valid numbers. case $current in 0 | [1-9] | [1-9][0-9] | [1-9][0-9][0-9]) ;; *) $echo "$modename: CURRENT \`$current' is not a nonnegative integer" 1>&2 $echo "$modename: \`$vinfo' is not valid version information" 1>&2 exit 1 ;; esac case $revision in 0 | [1-9] | [1-9][0-9] | [1-9][0-9][0-9]) ;; *) $echo "$modename: REVISION \`$revision' is not a nonnegative integer" 1>&2 $echo "$modename: \`$vinfo' is not valid version information" 1>&2 exit 1 ;; esac case $age in 0 | [1-9] | [1-9][0-9] | [1-9][0-9][0-9]) ;; *) $echo "$modename: AGE \`$age' is not a nonnegative integer" 1>&2 $echo "$modename: \`$vinfo' is not valid version information" 1>&2 exit 1 ;; esac if test $age -gt $current; then $echo "$modename: AGE \`$age' is greater than the current interface number \`$current'" 1>&2 $echo "$modename: \`$vinfo' is not valid version information" 1>&2 exit 1 fi # Calculate the version variables. major= versuffix= verstring= case $version_type in none) ;; darwin) # Like Linux, but with the current version available in # verstring for coding it into the library header major=.`expr $current - $age` versuffix="$major.$age.$revision" # Darwin ld doesn't like 0 for these options... minor_current=`expr $current + 1` verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" ;; freebsd-aout) major=".$current" versuffix=".$current.$revision"; ;; freebsd-elf) major=".$current" versuffix=".$current"; ;; irix) major=`expr $current - $age + 1` verstring="sgi$major.$revision" # Add in all the interfaces that we are compatible with. loop=$revision while test $loop != 0; do iface=`expr $revision - $loop` loop=`expr $loop - 1` verstring="sgi$major.$iface:$verstring" done # Before this point, $major must not contain `.'. major=.$major versuffix="$major.$revision" ;; linux) major=.`expr $current - $age` versuffix="$major.$age.$revision" ;; osf) major=`expr $current - $age` versuffix=".$current.$age.$revision" verstring="$current.$age.$revision" # Add in all the interfaces that we are compatible with. loop=$age while test $loop != 0; do iface=`expr $current - $loop` loop=`expr $loop - 1` verstring="$verstring:${iface}.0" done # Make executables depend on our current version. verstring="$verstring:${current}.0" ;; sunos) major=".$current" versuffix=".$current.$revision" ;; windows) # Use '-' rather than '.', since we only want one # extension on DOS 8.3 filesystems. major=`expr $current - $age` versuffix="-$major" ;; *) $echo "$modename: unknown library version type \`$version_type'" 1>&2 echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2 exit 1 ;; esac # Clear the version info if we defaulted, and they specified a release. if test -z "$vinfo" && test -n "$release"; then major= verstring="0.0" case $version_type in darwin) # we can't check for "0.0" in archive_cmds due to quoting # problems, so we reset it completely verstring="" ;; *) verstring="0.0" ;; esac if test "$need_version" = no; then versuffix= else versuffix=".0.0" fi fi # Remove version info from name if versioning should be avoided if test "$avoid_version" = yes && test "$need_version" = no; then major= versuffix= verstring="" fi # Check to see if the archive will have undefined symbols. if test "$allow_undefined" = yes; then if test "$allow_undefined_flag" = unsupported; then $echo "$modename: warning: undefined symbols not allowed in $host shared libraries" 1>&2 build_libtool_libs=no build_old_libs=yes fi else # Don't allow undefined symbols. allow_undefined_flag="$no_undefined_flag" fi fi if test "$mode" != relink; then # Remove our outputs. $show "${rm}r $output_objdir/$outputname $output_objdir/$libname.* $output_objdir/${libname}${release}.*" $run ${rm}r $output_objdir/$outputname $output_objdir/$libname.* $output_objdir/${libname}${release}.* fi # Now set the variables for building old libraries. if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then oldlibs="$oldlibs $output_objdir/$libname.$libext" # Transform .lo files to .o files. oldobjs="$objs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP` fi # Eliminate all temporary directories. for path in $notinst_path; do lib_search_path=`echo "$lib_search_path " | sed -e 's% $path % %g'` deplibs=`echo "$deplibs " | sed -e 's% -L$path % %g'` dependency_libs=`echo "$dependency_libs " | sed -e 's% -L$path % %g'` done if test -n "$xrpath"; then # If the user specified any rpath flags, then add them. temp_xrpath= for libdir in $xrpath; do temp_xrpath="$temp_xrpath -R$libdir" case "$finalize_rpath " in *" $libdir "*) ;; *) finalize_rpath="$finalize_rpath $libdir" ;; esac done if test $hardcode_into_libs != yes || test $build_old_libs = yes; then dependency_libs="$temp_xrpath $dependency_libs" fi fi # Make sure dlfiles contains only unique files that won't be dlpreopened old_dlfiles="$dlfiles" dlfiles= for lib in $old_dlfiles; do case " $dlprefiles $dlfiles " in *" $lib "*) ;; *) dlfiles="$dlfiles $lib" ;; esac done # Make sure dlprefiles contains only unique files old_dlprefiles="$dlprefiles" dlprefiles= for lib in $old_dlprefiles; do case "$dlprefiles " in *" $lib "*) ;; *) dlprefiles="$dlprefiles $lib" ;; esac done if test "$build_libtool_libs" = yes; then if test -n "$rpath"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos*) # these systems don't actually have a c library (as such)! ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C library is in the System framework deplibs="$deplibs -framework System" ;; *-*-netbsd*) # Don't link with libc until the a.out ld.so is fixed. ;; *-*-openbsd*) # Do not include libc due to us having libc/libc_r. ;; *) # Add libc to deplibs on all other systems if necessary. if test $build_libtool_need_lc = "yes"; then deplibs="$deplibs -lc" fi ;; esac fi # Transform deplibs into only deplibs that can be linked in shared. name_save=$name libname_save=$libname release_save=$release versuffix_save=$versuffix major_save=$major # I'm not sure if I'm treating the release correctly. I think # release should show up in the -l (ie -lgmp5) so we don't want to # add it in twice. Is that correct? release="" versuffix="" major="" newdeplibs= droppeddeps=no case $deplibs_check_method in pass_all) # Don't check for shared/static. Everything works. # This might be a little naive. We might want to check # whether the library exists or not. But this is on # osf3 & osf4 and I'm not really sure... Just # implementing what was already the behaviour. newdeplibs=$deplibs ;; test_compile) # This code stresses the "libraries are programs" paradigm to its # limits. Maybe even breaks it. We compile a program, linking it # against the deplibs as a proxy for the library. Then we can check # whether they linked in statically or dynamically with ldd. $rm conftest.c cat > conftest.c </dev/null` for potent_lib in $potential_libs; do # Follow soft links. if ls -lLd "$potent_lib" 2>/dev/null \ | grep " -> " >/dev/null; then continue fi # The statement above tries to avoid entering an # endless loop below, in case of cyclic links. # We might still enter an endless loop, since a link # loop can be closed while we follow links, # but so what? potlib="$potent_lib" while test -h "$potlib" 2>/dev/null; do potliblink=`ls -ld $potlib | sed 's/.* -> //'` case $potliblink in [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; *) potlib=`$echo "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";; esac done if eval $file_magic_cmd \"\$potlib\" 2>/dev/null \ | sed 10q \ | egrep "$file_magic_regex" > /dev/null; then newdeplibs="$newdeplibs $a_deplib" a_deplib="" break 2 fi done done if test -n "$a_deplib" ; then droppeddeps=yes echo echo "*** Warning: This library needs some functionality provided by $a_deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have." fi else # Add a -L argument. newdeplibs="$newdeplibs $a_deplib" fi done # Gone through all deplibs. ;; match_pattern*) set dummy $deplibs_check_method match_pattern_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"` for a_deplib in $deplibs; do name="`expr $a_deplib : '-l\(.*\)'`" # If $name is empty we are operating on a -L argument. if test -n "$name" && test "$name" != "0"; then libname=`eval \\$echo \"$libname_spec\"` for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do potential_libs=`ls $i/$libname[.-]* 2>/dev/null` for potent_lib in $potential_libs; do if eval echo \"$potent_lib\" 2>/dev/null \ | sed 10q \ | egrep "$match_pattern_regex" > /dev/null; then newdeplibs="$newdeplibs $a_deplib" a_deplib="" break 2 fi done done if test -n "$a_deplib" ; then droppeddeps=yes echo echo "*** Warning: This library needs some functionality provided by $a_deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have." fi else # Add a -L argument. newdeplibs="$newdeplibs $a_deplib" fi done # Gone through all deplibs. ;; none | unknown | *) newdeplibs="" if $echo "X $deplibs" | $Xsed -e 's/ -lc$//' \ -e 's/ -[LR][^ ]*//g' -e 's/[ ]//g' | grep . >/dev/null; then echo if test "X$deplibs_check_method" = "Xnone"; then echo "*** Warning: inter-library dependencies are not supported in this platform." else echo "*** Warning: inter-library dependencies are not known to be supported." fi echo "*** All declared inter-library dependencies are being dropped." droppeddeps=yes fi ;; esac versuffix=$versuffix_save major=$major_save release=$release_save libname=$libname_save name=$name_save case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library is the System framework newdeplibs=`$echo "X $newdeplibs" | $Xsed -e 's/ -lc / -framework System /'` ;; esac if test "$droppeddeps" = yes; then if test "$module" = yes; then echo echo "*** Warning: libtool could not satisfy all declared inter-library" echo "*** dependencies of module $libname. Therefore, libtool will create" echo "*** a static module, that should work as long as the dlopening" echo "*** application is linked with the -dlopen flag." if test -z "$global_symbol_pipe"; then echo echo "*** However, this would only work if libtool was able to extract symbol" echo "*** lists from a program, using \`nm' or equivalent, but libtool could" echo "*** not find such a program. So, this module is probably useless." echo "*** \`nm' from GNU binutils and a full rebuild may help." fi if test "$build_old_libs" = no; then oldlibs="$output_objdir/$libname.$libext" build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi else echo "*** The inter-library dependencies that have been dropped here will be" echo "*** automatically added whenever a program is linked with this library" echo "*** or is declared to -dlopen it." if test $allow_undefined = no; then echo echo "*** Since this library must not contain undefined symbols," echo "*** because either the platform does not support them or" echo "*** it was explicitly requested with -no-undefined," echo "*** libtool will only create a static version of it." if test "$build_old_libs" = no; then oldlibs="$output_objdir/$libname.$libext" build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi fi fi fi # Done checking deplibs! deplibs=$newdeplibs fi # All the library-specific variables (install_libdir is set above). library_names= old_library= dlname= # Test again, we may have decided not to build it any more if test "$build_libtool_libs" = yes; then if test $hardcode_into_libs = yes; then # Hardcode the library paths hardcode_libdirs= dep_rpath= rpath="$finalize_rpath" test "$mode" != relink && rpath="$compile_rpath$rpath" for libdir in $rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" dep_rpath="$dep_rpath $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) perm_rpath="$perm_rpath $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" eval dep_rpath=\"$hardcode_libdir_flag_spec\" fi if test -n "$runpath_var" && test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do rpath="$rpath$dir:" done eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" fi test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" fi shlibpath="$finalize_shlibpath" test "$mode" != relink && shlibpath="$compile_shlibpath$shlibpath" if test -n "$shlibpath"; then eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" fi # Get the real and link names of the library. eval library_names=\"$library_names_spec\" set dummy $library_names realname="$2" shift; shift if test -n "$soname_spec"; then eval soname=\"$soname_spec\" else soname="$realname" fi test -z "$dlname" && dlname=$soname lib="$output_objdir/$realname" for link do linknames="$linknames $link" done # Ensure that we have .o objects for linkers which dislike .lo # (e.g. aix) in case we are running --disable-static for obj in $libobjs; do xdir=`$echo "X$obj" | $Xsed -e 's%/[^/]*$%%'` if test "X$xdir" = "X$obj"; then xdir="." else xdir="$xdir" fi baseobj=`$echo "X$obj" | $Xsed -e 's%^.*/%%'` oldobj=`$echo "X$baseobj" | $Xsed -e "$lo2o"` if test ! -f $xdir/$oldobj; then $show "(cd $xdir && ${LN_S} $baseobj $oldobj)" $run eval '(cd $xdir && ${LN_S} $baseobj $oldobj)' || exit $? fi done # Use standard objects if they are pic test -z "$pic_flag" && libobjs=`$echo "X$libobjs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` # Prepare the list of exported symbols if test -z "$export_symbols"; then if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then $show "generating symbol list for \`$libname.la'" export_symbols="$output_objdir/$libname.exp" $run $rm $export_symbols eval cmds=\"$export_symbols_cmds\" save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" if test -n "$export_symbols_regex"; then $show "egrep -e \"$export_symbols_regex\" \"$export_symbols\" > \"${export_symbols}T\"" $run eval 'egrep -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' $show "$mv \"${export_symbols}T\" \"$export_symbols\"" $run eval '$mv "${export_symbols}T" "$export_symbols"' fi fi fi if test -n "$export_symbols" && test -n "$include_expsyms"; then $run eval '$echo "X$include_expsyms" | $SP2NL >> "$export_symbols"' fi if test -n "$convenience"; then if test -n "$whole_archive_flag_spec"; then eval libobjs=\"\$libobjs $whole_archive_flag_spec\" else gentop="$output_objdir/${outputname}x" $show "${rm}r $gentop" $run ${rm}r "$gentop" $show "mkdir $gentop" $run mkdir "$gentop" status=$? if test $status -ne 0 && test ! -d "$gentop"; then exit $status fi generated="$generated $gentop" for xlib in $convenience; do # Extract the objects. case $xlib in [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;; *) xabs=`pwd`"/$xlib" ;; esac xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'` xdir="$gentop/$xlib" $show "${rm}r $xdir" $run ${rm}r "$xdir" $show "mkdir $xdir" $run mkdir "$xdir" status=$? if test $status -ne 0 && test ! -d "$xdir"; then exit $status fi $show "(cd $xdir && $AR x $xabs)" $run eval "(cd \$xdir && $AR x \$xabs)" || exit $? libobjs="$libobjs "`find $xdir -name \*.o -print -o -name \*.lo -print | $NL2SP` done fi fi if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then eval flag=\"$thread_safe_flag_spec\" linker_flags="$linker_flags $flag" fi # Make a backup of the uninstalled library when relinking if test "$mode" = relink; then $run eval '(cd $output_objdir && $rm ${realname}U && $mv $realname ${realname}U)' || exit $? fi # Do each of the archive commands. if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then eval cmds=\"$archive_expsym_cmds\" else eval cmds=\"$archive_cmds\" fi save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" # Restore the uninstalled library and exit if test "$mode" = relink; then $run eval '(cd $output_objdir && $rm ${realname}T && $mv $realname ${realname}T && $mv "$realname"U $realname)' || exit $? exit 0 fi # Create links to the real library. for linkname in $linknames; do if test "$realname" != "$linkname"; then $show "(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)" $run eval '(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)' || exit $? fi done # If -module or -export-dynamic was specified, set the dlname. if test "$module" = yes || test "$export_dynamic" = yes; then # On all known operating systems, these are identical. dlname="$soname" fi fi ;; obj) if test -n "$deplibs"; then $echo "$modename: warning: \`-l' and \`-L' are ignored for objects" 1>&2 fi if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then $echo "$modename: warning: \`-dlopen' is ignored for objects" 1>&2 fi if test -n "$rpath"; then $echo "$modename: warning: \`-rpath' is ignored for objects" 1>&2 fi if test -n "$xrpath"; then $echo "$modename: warning: \`-R' is ignored for objects" 1>&2 fi if test -n "$vinfo"; then $echo "$modename: warning: \`-version-info' is ignored for objects" 1>&2 fi if test -n "$release"; then $echo "$modename: warning: \`-release' is ignored for objects" 1>&2 fi case $output in *.lo) if test -n "$objs$old_deplibs"; then $echo "$modename: cannot build library object \`$output' from non-libtool objects" 1>&2 exit 1 fi libobj="$output" obj=`$echo "X$output" | $Xsed -e "$lo2o"` ;; *) libobj= obj="$output" ;; esac # Delete the old objects. $run $rm $obj $libobj # Objects from convenience libraries. This assumes # single-version convenience libraries. Whenever we create # different ones for PIC/non-PIC, this we'll have to duplicate # the extraction. reload_conv_objs= gentop= # reload_cmds runs $LD directly, so let us get rid of # -Wl from whole_archive_flag_spec wl= if test -n "$convenience"; then if test -n "$whole_archive_flag_spec"; then eval reload_conv_objs=\"\$reload_objs $whole_archive_flag_spec\" else gentop="$output_objdir/${obj}x" $show "${rm}r $gentop" $run ${rm}r "$gentop" $show "mkdir $gentop" $run mkdir "$gentop" status=$? if test $status -ne 0 && test ! -d "$gentop"; then exit $status fi generated="$generated $gentop" for xlib in $convenience; do # Extract the objects. case $xlib in [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;; *) xabs=`pwd`"/$xlib" ;; esac xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'` xdir="$gentop/$xlib" $show "${rm}r $xdir" $run ${rm}r "$xdir" $show "mkdir $xdir" $run mkdir "$xdir" status=$? if test $status -ne 0 && test ! -d "$xdir"; then exit $status fi $show "(cd $xdir && $AR x $xabs)" $run eval "(cd \$xdir && $AR x \$xabs)" || exit $? reload_conv_objs="$reload_objs "`find $xdir -name \*.o -print -o -name \*.lo -print | $NL2SP` done fi fi # Create the old-style object. reload_objs="$objs$old_deplibs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test output="$obj" eval cmds=\"$reload_cmds\" save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" # Exit if we aren't doing a library object file. if test -z "$libobj"; then if test -n "$gentop"; then $show "${rm}r $gentop" $run ${rm}r $gentop fi exit 0 fi if test "$build_libtool_libs" != yes; then if test -n "$gentop"; then $show "${rm}r $gentop" $run ${rm}r $gentop fi # Create an invalid libtool object if no PIC, so that we don't # accidentally link it into a program. $show "echo timestamp > $libobj" $run eval "echo timestamp > $libobj" || exit $? exit 0 fi if test -n "$pic_flag" || test "$pic_mode" != default; then # Only do commands if we really have different PIC objects. reload_objs="$libobjs $reload_conv_objs" output="$libobj" eval cmds=\"$reload_cmds\" save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" else # Just create a symlink. $show $rm $libobj $run $rm $libobj xdir=`$echo "X$libobj" | $Xsed -e 's%/[^/]*$%%'` if test "X$xdir" = "X$libobj"; then xdir="." else xdir="$xdir" fi baseobj=`$echo "X$libobj" | $Xsed -e 's%^.*/%%'` oldobj=`$echo "X$baseobj" | $Xsed -e "$lo2o"` $show "(cd $xdir && $LN_S $oldobj $baseobj)" $run eval '(cd $xdir && $LN_S $oldobj $baseobj)' || exit $? fi if test -n "$gentop"; then $show "${rm}r $gentop" $run ${rm}r $gentop fi exit 0 ;; prog) case $host in *cygwin*) output=`echo $output | sed -e 's,.exe$,,;s,$,.exe,'` ;; esac if test -n "$vinfo"; then $echo "$modename: warning: \`-version-info' is ignored for programs" 1>&2 fi if test -n "$release"; then $echo "$modename: warning: \`-release' is ignored for programs" 1>&2 fi if test "$preload" = yes; then if test "$dlopen_support" = unknown && test "$dlopen_self" = unknown && test "$dlopen_self_static" = unknown; then $echo "$modename: warning: \`AC_LIBTOOL_DLOPEN' not used. Assuming no dlopen support." fi fi case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library is the System framework compile_deplibs=`$echo "X $compile_deplibs" | $Xsed -e 's/ -lc / -framework System /'` finalize_deplibs=`$echo "X $finalize_deplibs" | $Xsed -e 's/ -lc / -framework System /'` ;; esac compile_command="$compile_command $compile_deplibs" finalize_command="$finalize_command $finalize_deplibs" if test -n "$rpath$xrpath"; then # If the user specified any rpath flags, then add them. for libdir in $rpath $xrpath; do # This is the magic to use -rpath. case "$finalize_rpath " in *" $libdir "*) ;; *) finalize_rpath="$finalize_rpath $libdir" ;; esac done fi # Now hardcode the library paths rpath= hardcode_libdirs= for libdir in $compile_rpath $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" rpath="$rpath $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) perm_rpath="$perm_rpath $libdir" ;; esac fi case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) case :$dllsearchpath: in *":$libdir:"*) ;; *) dllsearchpath="$dllsearchpath:$libdir";; esac ;; esac done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" eval rpath=\" $hardcode_libdir_flag_spec\" fi compile_rpath="$rpath" rpath= hardcode_libdirs= for libdir in $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" rpath="$rpath $flag" fi elif test -n "$runpath_var"; then case "$finalize_perm_rpath " in *" $libdir "*) ;; *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" eval rpath=\" $hardcode_libdir_flag_spec\" fi finalize_rpath="$rpath" if test -n "$libobjs" && test "$build_old_libs" = yes; then # Transform all the library objects into standard objects. compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` fi dlsyms= if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then if test -n "$NM" && test -n "$global_symbol_pipe"; then dlsyms="${outputname}S.c" else $echo "$modename: not configured to extract global symbols from dlpreopened files" 1>&2 fi fi if test -n "$dlsyms"; then case $dlsyms in "") ;; *.c) # Discover the nlist of each of the dlfiles. nlist="$output_objdir/${outputname}.nm" $show "$rm $nlist ${nlist}S ${nlist}T" $run $rm "$nlist" "${nlist}S" "${nlist}T" # Parse the name list into a source file. $show "creating $output_objdir/$dlsyms" test -z "$run" && $echo > "$output_objdir/$dlsyms" "\ /* $dlsyms - symbol resolution table for \`$outputname' dlsym emulation. */ /* Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP */ #ifdef __cplusplus extern \"C\" { #endif /* Prevent the only kind of declaration conflicts we can make. */ #define lt_preloaded_symbols some_other_symbol /* External symbol declarations for the compiler. */\ " if test "$dlself" = yes; then $show "generating symbol list for \`$output'" test -z "$run" && $echo ': @PROGRAM@ ' > "$nlist" # Add our own program objects to the symbol list. progfiles=`$echo "X$objs$old_deplibs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` for arg in $progfiles; do $show "extracting global C symbols from \`$arg'" $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'" done if test -n "$exclude_expsyms"; then $run eval 'egrep -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' $run eval '$mv "$nlist"T "$nlist"' fi if test -n "$export_symbols_regex"; then $run eval 'egrep -e "$export_symbols_regex" "$nlist" > "$nlist"T' $run eval '$mv "$nlist"T "$nlist"' fi # Prepare the list of exported symbols if test -z "$export_symbols"; then export_symbols="$output_objdir/$output.exp" $run $rm $export_symbols $run eval "sed -n -e '/^: @PROGRAM@$/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' else $run eval "sed -e 's/\([][.*^$]\)/\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$output.exp"' $run eval 'grep -f "$output_objdir/$output.exp" < "$nlist" > "$nlist"T' $run eval 'mv "$nlist"T "$nlist"' fi fi for arg in $dlprefiles; do $show "extracting global C symbols from \`$arg'" name=`echo "$arg" | sed -e 's%^.*/%%'` $run eval 'echo ": $name " >> "$nlist"' $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'" done if test -z "$run"; then # Make sure we have at least an empty file. test -f "$nlist" || : > "$nlist" if test -n "$exclude_expsyms"; then egrep -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T $mv "$nlist"T "$nlist" fi # Try sorting and uniquifying the output. if grep -v "^: " < "$nlist" | sort +2 | uniq > "$nlist"S; then : else grep -v "^: " < "$nlist" > "$nlist"S fi if test -f "$nlist"S; then eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$dlsyms"' else echo '/* NONE */' >> "$output_objdir/$dlsyms" fi $echo >> "$output_objdir/$dlsyms" "\ #undef lt_preloaded_symbols #if defined (__STDC__) && __STDC__ # define lt_ptr void * #else # define lt_ptr char * # define const #endif /* The mapping between symbol names and symbols. */ const struct { const char *name; lt_ptr address; } lt_preloaded_symbols[] = {\ " eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$dlsyms" $echo >> "$output_objdir/$dlsyms" "\ {0, (lt_ptr) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt_preloaded_symbols; } #endif #ifdef __cplusplus } #endif\ " fi pic_flag_for_symtable= case $host in # compiling the symbol table file with pic_flag works around # a FreeBSD bug that causes programs to crash when -lm is # linked before any other PIC object. But we must not use # pic_flag when linking with -static. The problem exists in # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) case "$compile_command " in *" -static "*) ;; *) pic_flag_for_symtable=" $pic_flag -DPIC -DFREEBSD_WORKAROUND";; esac;; *-*-hpux*) case "$compile_command " in *" -static "*) ;; *) pic_flag_for_symtable=" $pic_flag -DPIC";; esac esac # Now compile the dynamic symbol file. $show "(cd $output_objdir && $CC -c$no_builtin_flag$pic_flag_for_symtable \"$dlsyms\")" $run eval '(cd $output_objdir && $CC -c$no_builtin_flag$pic_flag_for_symtable "$dlsyms")' || exit $? # Clean up the generated files. $show "$rm $output_objdir/$dlsyms $nlist ${nlist}S ${nlist}T" $run $rm "$output_objdir/$dlsyms" "$nlist" "${nlist}S" "${nlist}T" # Transform the symbol file into the correct name. compile_command=`$echo "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"` finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"` ;; *) $echo "$modename: unknown suffix for \`$dlsyms'" 1>&2 exit 1 ;; esac else # We keep going just in case the user didn't refer to # lt_preloaded_symbols. The linker will fail if global_symbol_pipe # really was required. # Nullify the symbol file. compile_command=`$echo "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"` finalize_command=`$echo "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"` fi if test $need_relink = no || test "$build_libtool_libs" != yes; then # Replace the output file specification. compile_command=`$echo "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` link_command="$compile_command$compile_rpath" # We have no uninstalled library dependencies, so finalize right now. $show "$link_command" $run eval "$link_command" status=$? # Delete the generated files. if test -n "$dlsyms"; then $show "$rm $output_objdir/${outputname}S.${objext}" $run $rm "$output_objdir/${outputname}S.${objext}" fi exit $status fi if test -n "$shlibpath_var"; then # We should set the shlibpath_var rpath= for dir in $temp_rpath; do case $dir in [\\/]* | [A-Za-z]:[\\/]*) # Absolute path. rpath="$rpath$dir:" ;; *) # Relative path: add a thisdir entry. rpath="$rpath\$thisdir/$dir:" ;; esac done temp_rpath="$rpath" fi if test -n "$compile_shlibpath$finalize_shlibpath"; then compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" fi if test -n "$finalize_shlibpath"; then finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" fi compile_var= finalize_var= if test -n "$runpath_var"; then if test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do rpath="$rpath$dir:" done compile_var="$runpath_var=\"$rpath\$$runpath_var\" " fi if test -n "$finalize_perm_rpath"; then # We should set the runpath_var. rpath= for dir in $finalize_perm_rpath; do rpath="$rpath$dir:" done finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " fi fi if test "$no_install" = yes; then # We don't need to create a wrapper script. link_command="$compile_var$compile_command$compile_rpath" # Replace the output file specification. link_command=`$echo "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` # Delete the old output file. $run $rm $output # Link the executable and exit $show "$link_command" $run eval "$link_command" || exit $? exit 0 fi if test "$hardcode_action" = relink; then # Fast installation is not supported link_command="$compile_var$compile_command$compile_rpath" relink_command="$finalize_var$finalize_command$finalize_rpath" $echo "$modename: warning: this platform does not like uninstalled shared libraries" 1>&2 $echo "$modename: \`$output' will be relinked during installation" 1>&2 else if test "$fast_install" != no; then link_command="$finalize_var$compile_command$finalize_rpath" if test "$fast_install" = yes; then relink_command=`$echo "X$compile_var$compile_command$compile_rpath" | $Xsed -e 's%@OUTPUT@%\$progdir/\$file%g'` else # fast_install is set to needless relink_command= fi else link_command="$compile_var$compile_command$compile_rpath" relink_command="$finalize_var$finalize_command$finalize_rpath" fi fi # Replace the output file specification. link_command=`$echo "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` # Delete the old output files. $run $rm $output $output_objdir/$outputname $output_objdir/lt-$outputname $show "$link_command" $run eval "$link_command" || exit $? # Now create the wrapper script. $show "creating $output" # Quote the relink command for shipping. if test -n "$relink_command"; then # Preserve any variables that may affect compiler behavior for var in $variables_saved_for_relink; do if eval test -z \"\${$var+set}\"; then relink_command="{ test -z \"\${$var+set}\" || unset $var || { $var=; export $var; }; }; $relink_command" elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"` relink_command="$var=\"$var_value\"; export $var; $relink_command" fi done relink_command="cd `pwd`; $relink_command" relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"` fi # Quote $echo for shipping. if test "X$echo" = "X$SHELL $0 --fallback-echo"; then case $0 in [\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $0 --fallback-echo";; *) qecho="$SHELL `pwd`/$0 --fallback-echo";; esac qecho=`$echo "X$qecho" | $Xsed -e "$sed_quote_subst"` else qecho=`$echo "X$echo" | $Xsed -e "$sed_quote_subst"` fi # Only actually do things if our run command is non-null. if test -z "$run"; then # win32 will think the script is a binary if it has # a .exe suffix, so we strip it off here. case $output in *.exe) output=`echo $output|sed 's,.exe$,,'` ;; esac # test for cygwin because mv fails w/o .exe extensions case $host in *cygwin*) exeext=.exe ;; *) exeext= ;; esac $rm $output trap "$rm $output; exit 1" 1 2 15 $echo > $output "\ #! $SHELL # $output - temporary wrapper script for $objdir/$outputname # Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP # # The $output program cannot be directly executed until all the libtool # libraries that it depends on are installed. # # This wrapper script should never be moved out of the build directory. # If it is, it will not operate correctly. # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. Xsed='sed -e 1s/^X//' sed_quote_subst='$sed_quote_subst' # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. if test \"\${CDPATH+set}\" = set; then CDPATH=:; export CDPATH; fi relink_command=\"$relink_command\" # This environment variable determines our operation mode. if test \"\$libtool_install_magic\" = \"$magic\"; then # install mode needs the following variable: notinst_deplibs='$notinst_deplibs' else # When we are sourced in execute mode, \$file and \$echo are already set. if test \"\$libtool_execute_magic\" != \"$magic\"; then echo=\"$qecho\" file=\"\$0\" # Make sure echo works. if test \"X\$1\" = X--no-reexec; then # Discard the --no-reexec flag, and continue. shift elif test \"X\`(\$echo '\t') 2>/dev/null\`\" = 'X\t'; then # Yippee, \$echo works! : else # Restart under the correct shell, and then maybe \$echo will work. exec $SHELL \"\$0\" --no-reexec \${1+\"\$@\"} fi fi\ " $echo >> $output "\ # Find the directory that this script lives in. thisdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*$%%'\` test \"x\$thisdir\" = \"x\$file\" && thisdir=. # Follow symbolic links until we get to the real thisdir. file=\`ls -ld \"\$file\" | sed -n 's/.*-> //p'\` while test -n \"\$file\"; do destdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*\$%%'\` # If there was a directory component, then change thisdir. if test \"x\$destdir\" != \"x\$file\"; then case \"\$destdir\" in [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; *) thisdir=\"\$thisdir/\$destdir\" ;; esac fi file=\`\$echo \"X\$file\" | \$Xsed -e 's%^.*/%%'\` file=\`ls -ld \"\$thisdir/\$file\" | sed -n 's/.*-> //p'\` done # Try to get the absolute directory name. absdir=\`cd \"\$thisdir\" && pwd\` test -n \"\$absdir\" && thisdir=\"\$absdir\" " if test "$fast_install" = yes; then echo >> $output "\ program=lt-'$outputname'$exeext progdir=\"\$thisdir/$objdir\" if test ! -f \"\$progdir/\$program\" || \\ { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | sed 1q\`; \\ test \"X\$file\" != \"X\$progdir/\$program\"; }; then file=\"\$\$-\$program\" if test ! -d \"\$progdir\"; then $mkdir \"\$progdir\" else $rm \"\$progdir/\$file\" fi" echo >> $output "\ # relink executable if necessary if test -n \"\$relink_command\"; then if relink_command_output=\`eval \$relink_command 2>&1\`; then : else $echo \"\$relink_command_output\" >&2 $rm \"\$progdir/\$file\" exit 1 fi fi $mv \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || { $rm \"\$progdir/\$program\"; $mv \"\$progdir/\$file\" \"\$progdir/\$program\"; } $rm \"\$progdir/\$file\" fi" else echo >> $output "\ program='$outputname' progdir=\"\$thisdir/$objdir\" " fi echo >> $output "\ if test -f \"\$progdir/\$program\"; then" # Export our shlibpath_var if we have one. if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then $echo >> $output "\ # Add our own library path to $shlibpath_var $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" # Some systems cannot cope with colon-terminated $shlibpath_var # The second colon is a workaround for a bug in BeOS R4 sed $shlibpath_var=\`\$echo \"X\$$shlibpath_var\" | \$Xsed -e 's/::*\$//'\` export $shlibpath_var " fi # fixup the dll searchpath if we need to. if test -n "$dllsearchpath"; then $echo >> $output "\ # Add the dll search path components to the executable PATH PATH=$dllsearchpath:\$PATH " fi $echo >> $output "\ if test \"\$libtool_execute_magic\" != \"$magic\"; then # Run the actual program with our arguments. " case $host in # win32 systems need to use the prog path for dll # lookup to work *-*-cygwin* | *-*-pw32*) $echo >> $output "\ exec \$progdir/\$program \${1+\"\$@\"} " ;; # Backslashes separate directories on plain windows *-*-mingw | *-*-os2*) $echo >> $output "\ exec \$progdir\\\\\$program \${1+\"\$@\"} " ;; *) $echo >> $output "\ # Export the path to the program. PATH=\"\$progdir:\$PATH\" export PATH exec \$program \${1+\"\$@\"} " ;; esac $echo >> $output "\ \$echo \"\$0: cannot exec \$program \${1+\"\$@\"}\" exit 1 fi else # The program doesn't exist. \$echo \"\$0: error: \$progdir/\$program does not exist\" 1>&2 \$echo \"This script is just a wrapper for \$program.\" 1>&2 echo \"See the $PACKAGE documentation for more information.\" 1>&2 exit 1 fi fi\ " chmod +x $output fi exit 0 ;; esac # See if we need to build an old-fashioned archive. for oldlib in $oldlibs; do if test "$build_libtool_libs" = convenience; then oldobjs="$libobjs_save" addlibs="$convenience" build_libtool_libs=no else if test "$build_libtool_libs" = module; then oldobjs="$libobjs_save" build_libtool_libs=no else oldobjs="$objs$old_deplibs "`$echo "X$libobjs_save" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP` fi addlibs="$old_convenience" fi if test -n "$addlibs"; then gentop="$output_objdir/${outputname}x" $show "${rm}r $gentop" $run ${rm}r "$gentop" $show "mkdir $gentop" $run mkdir "$gentop" status=$? if test $status -ne 0 && test ! -d "$gentop"; then exit $status fi generated="$generated $gentop" # Add in members from convenience archives. for xlib in $addlibs; do # Extract the objects. case $xlib in [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;; *) xabs=`pwd`"/$xlib" ;; esac xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'` xdir="$gentop/$xlib" $show "${rm}r $xdir" $run ${rm}r "$xdir" $show "mkdir $xdir" $run mkdir "$xdir" status=$? if test $status -ne 0 && test ! -d "$xdir"; then exit $status fi $show "(cd $xdir && $AR x $xabs)" $run eval "(cd \$xdir && $AR x \$xabs)" || exit $? oldobjs="$oldobjs "`find $xdir -name \*.${objext} -print -o -name \*.lo -print | $NL2SP` done fi # Do each command in the archive commands. if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then eval cmds=\"$old_archive_from_new_cmds\" else # Ensure that we have .o objects in place in case we decided # not to build a shared library, and have fallen back to building # static libs even though --disable-static was passed! for oldobj in $oldobjs; do if test ! -f $oldobj; then xdir=`$echo "X$oldobj" | $Xsed -e 's%/[^/]*$%%'` if test "X$xdir" = "X$oldobj"; then xdir="." else xdir="$xdir" fi baseobj=`$echo "X$oldobj" | $Xsed -e 's%^.*/%%'` obj=`$echo "X$baseobj" | $Xsed -e "$o2lo"` $show "(cd $xdir && ${LN_S} $obj $baseobj)" $run eval '(cd $xdir && ${LN_S} $obj $baseobj)' || exit $? fi done eval cmds=\"$old_archive_cmds\" fi save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" done if test -n "$generated"; then $show "${rm}r$generated" $run ${rm}r$generated fi # Now create the libtool archive. case $output in *.la) old_library= test "$build_old_libs" = yes && old_library="$libname.$libext" $show "creating $output" # Preserve any variables that may affect compiler behavior for var in $variables_saved_for_relink; do if eval test -z \"\${$var+set}\"; then relink_command="{ test -z \"\${$var+set}\" || unset $var || { $var=; export $var; }; }; $relink_command" elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"` relink_command="$var=\"$var_value\"; export $var; $relink_command" fi done # Quote the link command for shipping. relink_command="cd `pwd`; $SHELL $0 --mode=relink $libtool_args" relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"` # Only create the output if not a dry run. if test -z "$run"; then for installed in no yes; do if test "$installed" = yes; then if test -z "$install_libdir"; then break fi output="$output_objdir/$outputname"i # Replace all uninstalled libtool libraries with the installed ones newdependency_libs= for deplib in $dependency_libs; do case $deplib in *.la) name=`$echo "X$deplib" | $Xsed -e 's%^.*/%%'` eval libdir=`sed -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` if test -z "$libdir"; then $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2 exit 1 fi newdependency_libs="$newdependency_libs $libdir/$name" ;; *) newdependency_libs="$newdependency_libs $deplib" ;; esac done dependency_libs="$newdependency_libs" newdlfiles= for lib in $dlfiles; do name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` eval libdir=`sed -n -e 's/^libdir=\(.*\)$/\1/p' $lib` if test -z "$libdir"; then $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 exit 1 fi newdlfiles="$newdlfiles $libdir/$name" done dlfiles="$newdlfiles" newdlprefiles= for lib in $dlprefiles; do name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` eval libdir=`sed -n -e 's/^libdir=\(.*\)$/\1/p' $lib` if test -z "$libdir"; then $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 exit 1 fi newdlprefiles="$newdlprefiles $libdir/$name" done dlprefiles="$newdlprefiles" fi $rm $output # place dlname in correct position for cygwin tdlname=$dlname case $host,$output,$installed,$module,$dlname in *cygwin*,*lai,yes,no,*.dll) tdlname=../bin/$dlname ;; esac $echo > $output "\ # $outputname - a libtool library file # Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP # # Please DO NOT delete this file! # It is necessary for linking the library. # The name that we can dlopen(3). dlname='$tdlname' # Names of this library. library_names='$library_names' # The name of the static archive. old_library='$old_library' # Libraries that this one depends upon. dependency_libs='$dependency_libs' # Version information for $libname. current=$current age=$age revision=$revision # Is this an already installed library? installed=$installed # Files to dlopen/dlpreopen dlopen='$dlfiles' dlpreopen='$dlprefiles' # Directory that this library needs to be installed in: libdir='$install_libdir'" if test "$installed" = no && test $need_relink = yes; then $echo >> $output "\ relink_command=\"$relink_command\"" fi done fi # Do a symbolic link so that the libtool archive can be found in # LD_LIBRARY_PATH before the program is installed. $show "(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)" $run eval '(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)' || exit $? ;; esac exit 0 ;; # libtool install mode install) modename="$modename: install" # There may be an optional sh(1) argument at the beginning of # install_prog (especially on Windows NT). if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || # Allow the use of GNU shtool's install command. $echo "X$nonopt" | $Xsed | grep shtool > /dev/null; then # Aesthetically quote it. arg=`$echo "X$nonopt" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*) arg="\"$arg\"" ;; esac install_prog="$arg " arg="$1" shift else install_prog= arg="$nonopt" fi # The real first argument should be the name of the installation program. # Aesthetically quote it. arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*) arg="\"$arg\"" ;; esac install_prog="$install_prog$arg" # We need to accept at least all the BSD install flags. dest= files= opts= prev= install_type= isdir=no stripme= for arg do if test -n "$dest"; then files="$files $dest" dest="$arg" continue fi case $arg in -d) isdir=yes ;; -f) prev="-f" ;; -g) prev="-g" ;; -m) prev="-m" ;; -o) prev="-o" ;; -s) stripme=" -s" continue ;; -*) ;; *) # If the previous option needed an argument, then skip it. if test -n "$prev"; then prev= else dest="$arg" continue fi ;; esac # Aesthetically quote the argument. arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*) arg="\"$arg\"" ;; esac install_prog="$install_prog $arg" done if test -z "$install_prog"; then $echo "$modename: you must specify an install program" 1>&2 $echo "$help" 1>&2 exit 1 fi if test -n "$prev"; then $echo "$modename: the \`$prev' option requires an argument" 1>&2 $echo "$help" 1>&2 exit 1 fi if test -z "$files"; then if test -z "$dest"; then $echo "$modename: no file or destination specified" 1>&2 else $echo "$modename: you must specify a destination" 1>&2 fi $echo "$help" 1>&2 exit 1 fi # Strip any trailing slash from the destination. dest=`$echo "X$dest" | $Xsed -e 's%/$%%'` # Check to see that the destination is a directory. test -d "$dest" && isdir=yes if test "$isdir" = yes; then destdir="$dest" destname= else destdir=`$echo "X$dest" | $Xsed -e 's%/[^/]*$%%'` test "X$destdir" = "X$dest" && destdir=. destname=`$echo "X$dest" | $Xsed -e 's%^.*/%%'` # Not a directory, so check to see that there is only one file specified. set dummy $files if test $# -gt 2; then $echo "$modename: \`$dest' is not a directory" 1>&2 $echo "$help" 1>&2 exit 1 fi fi case $destdir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) for file in $files; do case $file in *.lo) ;; *) $echo "$modename: \`$destdir' must be an absolute directory name" 1>&2 $echo "$help" 1>&2 exit 1 ;; esac done ;; esac # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic="$magic" staticlibs= future_libdirs= current_libdirs= for file in $files; do # Do each installation. case $file in *.$libext) # Do the static libraries later. staticlibs="$staticlibs $file" ;; *.la) # Check to see that this really is a libtool archive. if (sed -e '2q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : else $echo "$modename: \`$file' is not a valid libtool archive" 1>&2 $echo "$help" 1>&2 exit 1 fi library_names= old_library= relink_command= # If there is no directory component, then add one. case $file in */* | *\\*) . $file ;; *) . ./$file ;; esac # Add the libdir to current_libdirs if it is the destination. if test "X$destdir" = "X$libdir"; then case "$current_libdirs " in *" $libdir "*) ;; *) current_libdirs="$current_libdirs $libdir" ;; esac else # Note the libdir as a future libdir. case "$future_libdirs " in *" $libdir "*) ;; *) future_libdirs="$future_libdirs $libdir" ;; esac fi dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`/ test "X$dir" = "X$file/" && dir= dir="$dir$objdir" if test -n "$relink_command"; then $echo "$modename: warning: relinking \`$file'" 1>&2 $show "$relink_command" if $run eval "$relink_command"; then : else $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2 continue fi fi # See the names of the shared library. set dummy $library_names if test -n "$2"; then realname="$2" shift shift srcname="$realname" test -n "$relink_command" && srcname="$realname"T # Install the shared library and build the symlinks. $show "$install_prog $dir/$srcname $destdir/$realname" $run eval "$install_prog $dir/$srcname $destdir/$realname" || exit $? if test -n "$stripme" && test -n "$striplib"; then $show "$striplib $destdir/$realname" $run eval "$striplib $destdir/$realname" || exit $? fi if test $# -gt 0; then # Delete the old symlinks, and create new ones. for linkname do if test "$linkname" != "$realname"; then $show "(cd $destdir && $rm $linkname && $LN_S $realname $linkname)" $run eval "(cd $destdir && $rm $linkname && $LN_S $realname $linkname)" fi done fi # Do each command in the postinstall commands. lib="$destdir/$realname" eval cmds=\"$postinstall_cmds\" save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" fi # Install the pseudo-library for information purposes. name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` instname="$dir/$name"i $show "$install_prog $instname $destdir/$name" $run eval "$install_prog $instname $destdir/$name" || exit $? # Maybe install the static library, too. test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library" ;; *.lo) # Install (i.e. copy) a libtool object. # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile="$destdir/$destname" else destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'` destfile="$destdir/$destfile" fi # Deduce the name of the destination old-style object file. case $destfile in *.lo) staticdest=`$echo "X$destfile" | $Xsed -e "$lo2o"` ;; *.$objext) staticdest="$destfile" destfile= ;; *) $echo "$modename: cannot copy a libtool object to \`$destfile'" 1>&2 $echo "$help" 1>&2 exit 1 ;; esac # Install the libtool object if requested. if test -n "$destfile"; then $show "$install_prog $file $destfile" $run eval "$install_prog $file $destfile" || exit $? fi # Install the old object if enabled. if test "$build_old_libs" = yes; then # Deduce the name of the old-style object file. staticobj=`$echo "X$file" | $Xsed -e "$lo2o"` $show "$install_prog $staticobj $staticdest" $run eval "$install_prog \$staticobj \$staticdest" || exit $? fi exit 0 ;; *) # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile="$destdir/$destname" else destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'` destfile="$destdir/$destfile" fi # Do a test to see if this is really a libtool program. if (sed -e '4q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then notinst_deplibs= relink_command= # If there is no directory component, then add one. case $file in */* | *\\*) . $file ;; *) . ./$file ;; esac # Check the variables that should have been set. if test -z "$notinst_deplibs"; then $echo "$modename: invalid libtool wrapper script \`$file'" 1>&2 exit 1 fi finalize=yes for lib in $notinst_deplibs; do # Check to see that each library is installed. libdir= if test -f "$lib"; then # If there is no directory component, then add one. case $lib in */* | *\\*) . $lib ;; *) . ./$lib ;; esac fi libfile="$libdir/"`$echo "X$lib" | $Xsed -e 's%^.*/%%g'` ### testsuite: skip nested quoting test if test -n "$libdir" && test ! -f "$libfile"; then $echo "$modename: warning: \`$lib' has not been installed in \`$libdir'" 1>&2 finalize=no fi done relink_command= # If there is no directory component, then add one. case $file in */* | *\\*) . $file ;; *) . ./$file ;; esac outputname= if test "$fast_install" = no && test -n "$relink_command"; then if test "$finalize" = yes && test -z "$run"; then tmpdir="/tmp" test -n "$TMPDIR" && tmpdir="$TMPDIR" tmpdir="$tmpdir/libtool-$$" if $mkdir -p "$tmpdir" && chmod 700 "$tmpdir"; then : else $echo "$modename: error: cannot create temporary directory \`$tmpdir'" 1>&2 continue fi file=`$echo "X$file" | $Xsed -e 's%^.*/%%'` outputname="$tmpdir/$file" # Replace the output file specification. relink_command=`$echo "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'` $show "$relink_command" if $run eval "$relink_command"; then : else $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2 ${rm}r "$tmpdir" continue fi file="$outputname" else $echo "$modename: warning: cannot relink \`$file'" 1>&2 fi else # Install the binary that we compiled earlier. file=`$echo "X$file" | $Xsed -e "s%\([^/]*\)$%$objdir/\1%"` fi fi # remove .exe since cygwin /usr/bin/install will append another # one anyways case $install_prog,$host in /usr/bin/install*,*cygwin*) case $file:$destfile in *.exe:*.exe) # this is ok ;; *.exe:*) destfile=$destfile.exe ;; *:*.exe) destfile=`echo $destfile | sed -e 's,.exe$,,'` ;; esac ;; esac $show "$install_prog$stripme $file $destfile" $run eval "$install_prog\$stripme \$file \$destfile" || exit $? test -n "$outputname" && ${rm}r "$tmpdir" ;; esac done for file in $staticlibs; do name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` # Set up the ranlib parameters. oldlib="$destdir/$name" $show "$install_prog $file $oldlib" $run eval "$install_prog \$file \$oldlib" || exit $? if test -n "$stripme" && test -n "$striplib"; then $show "$old_striplib $oldlib" $run eval "$old_striplib $oldlib" || exit $? fi # Do each command in the postinstall commands. eval cmds=\"$old_postinstall_cmds\" save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" done if test -n "$future_libdirs"; then $echo "$modename: warning: remember to run \`$progname --finish$future_libdirs'" 1>&2 fi if test -n "$current_libdirs"; then # Maybe just do a dry run. test -n "$run" && current_libdirs=" -n$current_libdirs" exec_cmd='$SHELL $0 --finish$current_libdirs' else exit 0 fi ;; # libtool finish mode finish) modename="$modename: finish" libdirs="$nonopt" admincmds= if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then for dir do libdirs="$libdirs $dir" done for libdir in $libdirs; do if test -n "$finish_cmds"; then # Do each command in the finish commands. eval cmds=\"$finish_cmds\" save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" $show "$cmd" $run eval "$cmd" || admincmds="$admincmds $cmd" done IFS="$save_ifs" fi if test -n "$finish_eval"; then # Do the single finish_eval. eval cmds=\"$finish_eval\" $run eval "$cmds" || admincmds="$admincmds $cmds" fi done fi # Exit here if they wanted silent mode. test "$show" = ":" && exit 0 echo "----------------------------------------------------------------------" echo "Libraries have been installed in:" for libdir in $libdirs; do echo " $libdir" done echo echo "If you ever happen to want to link against installed libraries" echo "in a given directory, LIBDIR, you must either use libtool, and" echo "specify the full pathname of the library, or use the \`-LLIBDIR'" echo "flag during linking and do at least one of the following:" if test -n "$shlibpath_var"; then echo " - add LIBDIR to the \`$shlibpath_var' environment variable" echo " during execution" fi if test -n "$runpath_var"; then echo " - add LIBDIR to the \`$runpath_var' environment variable" echo " during linking" fi if test -n "$hardcode_libdir_flag_spec"; then libdir=LIBDIR eval flag=\"$hardcode_libdir_flag_spec\" echo " - use the \`$flag' linker flag" fi if test -n "$admincmds"; then echo " - have your system administrator run these commands:$admincmds" fi if test -f /etc/ld.so.conf; then echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" fi echo echo "See any operating system documentation about shared libraries for" echo "more information, such as the ld(1) and ld.so(8) manual pages." echo "----------------------------------------------------------------------" exit 0 ;; # libtool execute mode execute) modename="$modename: execute" # The first argument is the command name. cmd="$nonopt" if test -z "$cmd"; then $echo "$modename: you must specify a COMMAND" 1>&2 $echo "$help" exit 1 fi # Handle -dlopen flags immediately. for file in $execute_dlfiles; do if test ! -f "$file"; then $echo "$modename: \`$file' is not a file" 1>&2 $echo "$help" 1>&2 exit 1 fi dir= case $file in *.la) # Check to see that this really is a libtool archive. if (sed -e '2q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : else $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 $echo "$help" 1>&2 exit 1 fi # Read the libtool library. dlname= library_names= # If there is no directory component, then add one. case $file in */* | *\\*) . $file ;; *) . ./$file ;; esac # Skip this library if it cannot be dlopened. if test -z "$dlname"; then # Warn if it was a shared library. test -n "$library_names" && $echo "$modename: warning: \`$file' was not linked with \`-export-dynamic'" continue fi dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` test "X$dir" = "X$file" && dir=. if test -f "$dir/$objdir/$dlname"; then dir="$dir/$objdir" else $echo "$modename: cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" 1>&2 exit 1 fi ;; *.lo) # Just add the directory containing the .lo file. dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` test "X$dir" = "X$file" && dir=. ;; *) $echo "$modename: warning \`-dlopen' is ignored for non-libtool libraries and objects" 1>&2 continue ;; esac # Get the absolute pathname. absdir=`cd "$dir" && pwd` test -n "$absdir" && dir="$absdir" # Now add the directory to shlibpath_var. if eval "test -z \"\$$shlibpath_var\""; then eval "$shlibpath_var=\"\$dir\"" else eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" fi done # This variable tells wrapper scripts just to set shlibpath_var # rather than running their programs. libtool_execute_magic="$magic" # Check if any of the arguments is a wrapper script. args= for file do case $file in -*) ;; *) # Do a test to see if this is really a libtool program. if (sed -e '4q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then # If there is no directory component, then add one. case $file in */* | *\\*) . $file ;; *) . ./$file ;; esac # Transform arg to wrapped name. file="$progdir/$program" fi ;; esac # Quote arguments (to preserve shell metacharacters). file=`$echo "X$file" | $Xsed -e "$sed_quote_subst"` args="$args \"$file\"" done if test -z "$run"; then if test -n "$shlibpath_var"; then # Export the shlibpath_var. eval "export $shlibpath_var" fi # Restore saved enviroment variables if test "${save_LC_ALL+set}" = set; then LC_ALL="$save_LC_ALL"; export LC_ALL fi if test "${save_LANG+set}" = set; then LANG="$save_LANG"; export LANG fi # Now prepare to actually exec the command. exec_cmd='"$cmd"$args' else # Display what would be done. if test -n "$shlibpath_var"; then eval "\$echo \"\$shlibpath_var=\$$shlibpath_var\"" $echo "export $shlibpath_var" fi $echo "$cmd$args" exit 0 fi ;; # libtool clean and uninstall mode clean | uninstall) modename="$modename: $mode" rm="$nonopt" files= rmforce= exit_status=0 # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic="$magic" for arg do case $arg in -f) rm="$rm $arg"; rmforce=yes ;; -*) rm="$rm $arg" ;; *) files="$files $arg" ;; esac done if test -z "$rm"; then $echo "$modename: you must specify an RM program" 1>&2 $echo "$help" 1>&2 exit 1 fi rmdirs= for file in $files; do dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` if test "X$dir" = "X$file"; then dir=. objdir="$objdir" else objdir="$dir/$objdir" fi name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` test $mode = uninstall && objdir="$dir" # Remember objdir for removal later, being careful to avoid duplicates if test $mode = clean; then case " $rmdirs " in *" $objdir "*) ;; *) rmdirs="$rmdirs $objdir" ;; esac fi # Don't error if the file doesn't exist and rm -f was used. if (test -L "$file") >/dev/null 2>&1 \ || (test -h "$file") >/dev/null 2>&1 \ || test -f "$file"; then : elif test -d "$file"; then exit_status=1 continue elif test "$rmforce" = yes; then continue fi rmfiles="$file" case $name in *.la) # Possibly a libtool archive, so verify it. if (sed -e '2q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then . $dir/$name # Delete the libtool libraries and symlinks. for n in $library_names; do rmfiles="$rmfiles $objdir/$n" done test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library" test $mode = clean && rmfiles="$rmfiles $objdir/$name $objdir/${name}i" if test $mode = uninstall; then if test -n "$library_names"; then # Do each command in the postuninstall commands. eval cmds=\"$postuninstall_cmds\" save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" $show "$cmd" $run eval "$cmd" if test $? != 0 && test "$rmforce" != yes; then exit_status=1 fi done IFS="$save_ifs" fi if test -n "$old_library"; then # Do each command in the old_postuninstall commands. eval cmds=\"$old_postuninstall_cmds\" save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" $show "$cmd" $run eval "$cmd" if test $? != 0 && test "$rmforce" != yes; then exit_status=1 fi done IFS="$save_ifs" fi # FIXME: should reinstall the best remaining shared library. fi fi ;; *.lo) if test "$build_old_libs" = yes; then oldobj=`$echo "X$name" | $Xsed -e "$lo2o"` rmfiles="$rmfiles $dir/$oldobj" fi ;; *) # Do a test to see if this is a libtool program. if test $mode = clean && (sed -e '4q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then relink_command= . $dir/$file rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}" if test "$fast_install" = yes && test -n "$relink_command"; then rmfiles="$rmfiles $objdir/lt-$name" fi fi ;; esac $show "$rm $rmfiles" $run $rm $rmfiles || exit_status=1 done # Try to remove the ${objdir}s in the directories where we deleted files for dir in $rmdirs; do if test -d "$dir"; then $show "rmdir $dir" $run rmdir $dir >/dev/null 2>&1 fi done exit $exit_status ;; "") $echo "$modename: you must specify a MODE" 1>&2 $echo "$generic_help" 1>&2 exit 1 ;; esac if test -z "$exec_cmd"; then $echo "$modename: invalid operation mode \`$mode'" 1>&2 $echo "$generic_help" 1>&2 exit 1 fi fi # test -z "$show_help" if test -n "$exec_cmd"; then eval exec $exec_cmd exit 1 fi # We need to display help for each of the modes. case $mode in "") $echo \ "Usage: $modename [OPTION]... [MODE-ARG]... Provide generalized library-building support services. --config show all configuration variables --debug enable verbose shell tracing -n, --dry-run display commands without modifying any files --features display basic configuration information and exit --finish same as \`--mode=finish' --help display this help message and exit --mode=MODE use operation mode MODE [default=inferred from MODE-ARGS] --quiet same as \`--silent' --silent don't print informational messages --version print version information MODE must be one of the following: clean remove files from the build directory compile compile a source file into a libtool object execute automatically set library path, then run a program finish complete the installation of libtool libraries install install libraries or executables link create a library or an executable uninstall remove libraries from an installed directory MODE-ARGS vary depending on the MODE. Try \`$modename --help --mode=MODE' for a more detailed description of MODE." exit 0 ;; clean) $echo \ "Usage: $modename [OPTION]... --mode=clean RM [RM-OPTION]... FILE... Remove files from the build directory. RM is the name of the program to use to delete files associated with each FILE (typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed to RM. If FILE is a libtool library, object or program, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; compile) $echo \ "Usage: $modename [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE Compile a source file into a libtool library object. This mode accepts the following additional options: -o OUTPUT-FILE set the output file name to OUTPUT-FILE -prefer-pic try to building PIC objects only -prefer-non-pic try to building non-PIC objects only -static always build a \`.o' file suitable for static linking COMPILE-COMMAND is a command to be used in creating a \`standard' object file from the given SOURCEFILE. The output file name is determined by removing the directory component from SOURCEFILE, then substituting the C source code suffix \`.c' with the library object suffix, \`.lo'." ;; execute) $echo \ "Usage: $modename [OPTION]... --mode=execute COMMAND [ARGS]... Automatically set library path, then run a program. This mode accepts the following additional options: -dlopen FILE add the directory containing FILE to the library path This mode sets the library path environment variable according to \`-dlopen' flags. If any of the ARGS are libtool executable wrappers, then they are translated into their corresponding uninstalled binary, and any of their required library directories are added to the library path. Then, COMMAND is executed, with ARGS as arguments." ;; finish) $echo \ "Usage: $modename [OPTION]... --mode=finish [LIBDIR]... Complete the installation of libtool libraries. Each LIBDIR is a directory that contains libtool libraries. The commands that this mode executes may require superuser privileges. Use the \`--dry-run' option if you just want to see what would be executed." ;; install) $echo \ "Usage: $modename [OPTION]... --mode=install INSTALL-COMMAND... Install executables or libraries. INSTALL-COMMAND is the installation command. The first component should be either the \`install' or \`cp' program. The rest of the components are interpreted as arguments to that command (only BSD-compatible install options are recognized)." ;; link) $echo \ "Usage: $modename [OPTION]... --mode=link LINK-COMMAND... Link object files or libraries together to form another library, or to create an executable program. LINK-COMMAND is a command using the C compiler that you would use to create a program from several object files. The following components of LINK-COMMAND are treated specially: -all-static do not do any dynamic linking at all -avoid-version do not add a version suffix if possible -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) -export-symbols SYMFILE try to export only the symbols listed in SYMFILE -export-symbols-regex REGEX try to export only the symbols matching REGEX -LLIBDIR search LIBDIR for required installed libraries -lNAME OUTPUT-FILE requires the installed library libNAME -module build a library that can dlopened -no-fast-install disable the fast-install mode -no-install link a not-installable executable -no-undefined declare that a library does not refer to external symbols -o OUTPUT-FILE create OUTPUT-FILE from the specified objects -release RELEASE specify package release information -rpath LIBDIR the created library will eventually be installed in LIBDIR -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries -static do not do any dynamic linking of libtool libraries -version-info CURRENT[:REVISION[:AGE]] specify library version info [each variable defaults to 0] All other options (arguments beginning with \`-') are ignored. Every other argument is treated as a filename. Files ending in \`.la' are treated as uninstalled libtool libraries, other files are standard or library object files. If the OUTPUT-FILE ends in \`.la', then a libtool library is created, only library objects (\`.lo' files) may be specified, and \`-rpath' is required, except when creating a convenience library. If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created using \`ar' and \`ranlib', or on Windows using \`lib'. If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file is created, otherwise an executable program is created." ;; uninstall) $echo \ "Usage: $modename [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... Remove libraries from an installation directory. RM is the name of the program to use to delete files associated with each FILE (typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed to RM. If FILE is a libtool library, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; *) $echo "$modename: invalid operation mode \`$mode'" 1>&2 $echo "$help" 1>&2 exit 1 ;; esac echo $echo "Try \`$modename --help' for more information about other modes." exit 0 # Local Variables: # mode:shell-script # sh-indentation:2 # End: tla-1.3.5+dfsg/src/expat/conftools/ac_c_bigendian_cross.m40000644000175000017500000000562410457621771022234 0ustar useruserdnl @synopsis AC_C_BIGENDIAN_CROSS dnl dnl Check endianess even when crosscompiling dnl (partially based on the original AC_C_BIGENDIAN). dnl dnl The implementation will create a binary, and instead of running dnl the binary it will be grep'ed for some symbols that will look dnl different for different endianess of the binary. dnl dnl @version $Id: ac_c_bigendian_cross.m4,v 1.2 2001/10/01 20:03:13 fdrake Exp $ dnl @author Guido Draheim dnl AC_DEFUN([AC_C_BIGENDIAN_CROSS], [AC_CACHE_CHECK(whether byte ordering is bigendian, ac_cv_c_bigendian, [ac_cv_c_bigendian=unknown # See if sys/param.h defines the BYTE_ORDER macro. AC_TRY_COMPILE([#include #include ], [ #if !BYTE_ORDER || !BIG_ENDIAN || !LITTLE_ENDIAN bogus endian macros #endif], [# It does; now see whether it defined to BIG_ENDIAN or not. AC_TRY_COMPILE([#include #include ], [ #if BYTE_ORDER != BIG_ENDIAN not big endian #endif], ac_cv_c_bigendian=yes, ac_cv_c_bigendian=no)]) if test $ac_cv_c_bigendian = unknown; then AC_TRY_RUN([main () { /* Are we little or big endian? From Harbison&Steele. */ union { long l; char c[sizeof (long)]; } u; u.l = 1; exit (u.c[sizeof (long) - 1] == 1); }], ac_cv_c_bigendian=no, ac_cv_c_bigendian=yes, [ echo $ac_n "cross-compiling... " 2>&AC_FD_MSG ]) fi]) if test $ac_cv_c_bigendian = unknown; then AC_MSG_CHECKING(to probe for byte ordering) [ cat >conftest.c <&AC_FD_MSG ac_cv_c_bigendian=yes fi if test `grep -l LiTTleEnDian conftest.o` ; then echo $ac_n ' little endian probe OK, ' 1>&AC_FD_MSG if test $ac_cv_c_bigendian = yes ; then ac_cv_c_bigendian=unknown; else ac_cv_c_bigendian=no fi fi echo $ac_n 'guessing bigendian ... ' >&AC_FD_MSG fi fi AC_MSG_RESULT($ac_cv_c_bigendian) fi if test $ac_cv_c_bigendian = yes; then AC_DEFINE(WORDS_BIGENDIAN, 1, [whether byteorder is bigendian]) BYTEORDER=4321 else BYTEORDER=1234 fi AC_DEFINE_UNQUOTED(BYTEORDER, $BYTEORDER, [1234 = LIL_ENDIAN, 4321 = BIGENDIAN]) if test $ac_cv_c_bigendian = unknown; then AC_MSG_ERROR(unknown endianess - sorry, please pre-set ac_cv_c_bigendian) fi ]) tla-1.3.5+dfsg/src/expat/conftools/install-sh0000755000175000017500000001273610457621771017702 0ustar useruser#!/bin/sh # # install - install a program, script, or datafile # This comes from X11R5 (mit/util/scripts/install.sh). # # Copyright 1991 by the Massachusetts Institute of Technology # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of M.I.T. not be used in advertising or # publicity pertaining to distribution of the software without specific, # written prior permission. M.I.T. makes no representations about the # suitability of this software for any purpose. It is provided "as is" # without express or implied warranty. # # Calling this script install-sh is preferred over install.sh, to prevent # `make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. It can only install one file at a time, a restriction # shared with many OS's install programs. # set DOITPROG to echo to test this script # Don't use :- since 4.3BSD and earlier shells don't like it. doit="${DOITPROG-}" # put in absolute paths if you don't have them in your path; or use env. vars. mvprog="${MVPROG-mv}" cpprog="${CPPROG-cp}" chmodprog="${CHMODPROG-chmod}" chownprog="${CHOWNPROG-chown}" chgrpprog="${CHGRPPROG-chgrp}" stripprog="${STRIPPROG-strip}" rmprog="${RMPROG-rm}" mkdirprog="${MKDIRPROG-mkdir}" transformbasename="" transform_arg="" instcmd="$mvprog" chmodcmd="$chmodprog 0755" chowncmd="" chgrpcmd="" stripcmd="" rmcmd="$rmprog -f" mvcmd="$mvprog" src="" dst="" dir_arg="" while [ x"$1" != x ]; do case $1 in -c) instcmd="$cpprog" shift continue;; -d) dir_arg=true shift continue;; -m) chmodcmd="$chmodprog $2" shift shift continue;; -o) chowncmd="$chownprog $2" shift shift continue;; -g) chgrpcmd="$chgrpprog $2" shift shift continue;; -s) stripcmd="$stripprog" shift continue;; -t=*) transformarg=`echo $1 | sed 's/-t=//'` shift continue;; -b=*) transformbasename=`echo $1 | sed 's/-b=//'` shift continue;; *) if [ x"$src" = x ] then src=$1 else # this colon is to work around a 386BSD /bin/sh bug : dst=$1 fi shift continue;; esac done if [ x"$src" = x ] then echo "install: no input file specified" exit 1 else true fi if [ x"$dir_arg" != x ]; then dst=$src src="" if [ -d $dst ]; then instcmd=: chmodcmd="" else instcmd=mkdir fi else # Waiting for this to be detected by the "$instcmd $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if [ -f $src -o -d $src ] then true else echo "install: $src does not exist" exit 1 fi if [ x"$dst" = x ] then echo "install: no destination specified" exit 1 else true fi # If destination is a directory, append the input filename; if your system # does not like double slashes in filenames, you may need to add some logic if [ -d $dst ] then dst="$dst"/`basename $src` else true fi fi ## this sed command emulates the dirname command dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'` # Make sure that the destination directory exists. # this part is taken from Noah Friedman's mkinstalldirs script # Skip lots of stat calls in the usual case. if [ ! -d "$dstdir" ]; then defaultIFS=' ' IFS="${IFS-${defaultIFS}}" oIFS="${IFS}" # Some sh's can't handle IFS=/ for some reason. IFS='%' set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'` IFS="${oIFS}" pathcomp='' while [ $# -ne 0 ] ; do pathcomp="${pathcomp}${1}" shift if [ ! -d "${pathcomp}" ] ; then $mkdirprog "${pathcomp}" else true fi pathcomp="${pathcomp}/" done fi if [ x"$dir_arg" != x ] then $doit $instcmd $dst && if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi && if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi && if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi && if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi else # If we're going to rename the final executable, determine the name now. if [ x"$transformarg" = x ] then dstfile=`basename $dst` else dstfile=`basename $dst $transformbasename | sed $transformarg`$transformbasename fi # don't allow the sed command to completely eliminate the filename if [ x"$dstfile" = x ] then dstfile=`basename $dst` else true fi # Make a temp file name in the proper directory. dsttmp=$dstdir/#inst.$$# # Move or copy the file name to the temp name $doit $instcmd $src $dsttmp && trap "rm -f ${dsttmp}" 0 && # and set any options; do chmod last to preserve setuid bits # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $instcmd $src $dsttmp" command. if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi && if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi && if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi && if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi && # Now rename the file to the real destination. $doit $rmcmd -f $dstdir/$dstfile && $doit $mvcmd $dsttmp $dstdir/$dstfile fi && exit 0 tla-1.3.5+dfsg/src/expat/conftools/expat.m40000644000175000017500000000264010457621771017252 0ustar useruserdnl Check if --with-expat[=PREFIX] is specified and dnl Expat >= 1.95.0 is installed in the system. dnl If yes, substitute EXPAT_CFLAGS, EXPAT_LIBS with regard to dnl the specified PREFIX and set with_expat to PREFIX, or 'yes' if PREFIX dnl has not been specified. Also HAVE_LIBEXPAT, HAVE_EXPAT_H are defined. dnl If --with-expat has not been specified, set with_expat to 'no'. dnl In addition, an Automake conditional EXPAT_INSTALLED is set accordingly. dnl This is necessary to adapt a whole lot of packages that have expat dnl bundled as a static library. AC_DEFUN(AM_WITH_EXPAT, [ AC_ARG_WITH(expat, [ --with-expat=PREFIX Use system Expat library], , with_expat=no) AM_CONDITIONAL(EXPAT_INSTALLED, test $with_expat != no) EXPAT_CFLAGS= EXPAT_LIBS= if test $with_expat != no; then if test $with_expat != yes; then EXPAT_CFLAGS="-I$with_expat/include" EXPAT_LIBS="-L$with_expat/lib" fi AC_CHECK_LIB(expat, XML_ParserCreate, [ EXPAT_LIBS="$EXPAT_LIBS -lexpat" expat_found=yes ], [ expat_found=no ], "$EXPAT_LIBS") if test $expat_found = no; then AC_MSG_ERROR([Could not find the Expat library]) fi expat_save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS $EXPAT_CFLAGS" AC_CHECK_HEADERS(expat.h, , expat_found=no) if test $expat_found = no; then AC_MSG_ERROR([Could not find expat.h]) fi CFLAGS="$expat_save_CFLAGS" fi AC_SUBST(EXPAT_CFLAGS) AC_SUBST(EXPAT_LIBS) ]) tla-1.3.5+dfsg/src/expat/MANIFEST0000644000175000017500000000373710457621771015022 0ustar useruserbcb5/README.txt bcb5/all_projects.bpg bcb5/elements.bpf bcb5/elements.bpr bcb5/elements.mak bcb5/expat.bpf bcb5/expat.bpr bcb5/expat.mak bcb5/expat_static.bpf bcb5/expat_static.bpr bcb5/expat_static.mak bcb5/expatw.bpf bcb5/expatw.bpr bcb5/expatw.mak bcb5/expatw_static.bpf bcb5/expatw_static.bpr bcb5/expatw_static.mak bcb5/libexpat_mtd.def bcb5/libexpatw_mtd.def bcb5/makefile.mak bcb5/outline.bpf bcb5/outline.bpr bcb5/outline.mak bcb5/setup.bat bcb5/xmlwf.bpf bcb5/xmlwf.bpr bcb5/xmlwf.mak doc/expat.png doc/reference.html doc/style.css doc/valid-xhtml10.png doc/xmlwf.1 doc/xmlwf.sgml COPYING Changes MANIFEST Makefile.in README configure configure.in expat_config.h.in expat.dsw conftools/PrintPath conftools/ac_c_bigendian_cross.m4 conftools/config.guess conftools/config.sub conftools/expat.m4 conftools/get-version.sh conftools/install-sh conftools/libtool.m4 conftools/ltmain.sh conftools/mkinstalldirs examples/elements.c examples/elements.dsp examples/outline.c examples/outline.dsp lib/Makefile.MPW lib/ascii.h lib/asciitab.h lib/expat.dsp lib/expat.h lib/expat_external.h lib/expat_static.dsp lib/expatw.dsp lib/expatw_static.dsp lib/iasciitab.h lib/internal.h lib/latin1tab.h lib/libexpat.def lib/libexpatw.def lib/macconfig.h lib/nametab.h lib/utf8tab.h lib/winconfig.h lib/xmlparse.c lib/xmlrole.c lib/xmlrole.h lib/xmltok.c lib/xmltok.h lib/xmltok_impl.c lib/xmltok_impl.h lib/xmltok_ns.c tests/benchmark/README.txt tests/benchmark/benchmark.c tests/benchmark/benchmark.dsp tests/benchmark/benchmark.dsw tests/README.txt tests/chardata.c tests/chardata.h tests/minicheck.c tests/minicheck.h tests/runtests.c tests/xmltest.sh vms/README.vms vms/descrip.mms vms/expat_config.h win32/MANIFEST.txt win32/README.txt win32/expat.iss xmlwf/codepage.c xmlwf/codepage.h xmlwf/ct.c xmlwf/filemap.h xmlwf/readfilemap.c xmlwf/unixfilemap.c xmlwf/win32filemap.c xmlwf/xmlfile.c xmlwf/xmlfile.h xmlwf/xmlmime.c xmlwf/xmlmime.h xmlwf/xmltchar.h xmlwf/xmlurl.h xmlwf/xmlwf.c xmlwf/xmlwf.dsp xmlwf/xmlwin32url.cxx tla-1.3.5+dfsg/src/expat/examples/0000755000175000017500000000000010457621771015475 5ustar userusertla-1.3.5+dfsg/src/expat/examples/outline.dsp0000644000175000017500000001030710457621771017665 0ustar useruser# Microsoft Developer Studio Project File - Name="outline" - Package Owner=<4> # Microsoft Developer Studio Generated Build File, Format Version 6.00 # ** DO NOT EDIT ** # TARGTYPE "Win32 (x86) Console Application" 0x0103 CFG=outline - Win32 Debug !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run !MESSAGE !MESSAGE NMAKE /f "outline.mak". !MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: !MESSAGE !MESSAGE NMAKE /f "outline.mak" CFG="outline - Win32 Debug" !MESSAGE !MESSAGE Possible choices for configuration are: !MESSAGE !MESSAGE "outline - Win32 Release" (based on "Win32 (x86) Console Application") !MESSAGE "outline - Win32 Debug" (based on "Win32 (x86) Console Application") !MESSAGE # Begin Project # PROP AllowPerConfigDependencies 0 # PROP Scc_ProjName "" # PROP Scc_LocalPath "" CPP=cl.exe RSC=rc.exe !IF "$(CFG)" == "outline - Win32 Release" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 0 # PROP BASE Output_Dir "Release" # PROP BASE Intermediate_Dir "Release" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 0 # PROP Output_Dir "Release" # PROP Intermediate_Dir "Release" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c # ADD CPP /nologo /MT /W3 /GX /O2 /I "..\lib" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /FD /c # SUBTRACT CPP /X /YX # ADD BASE RSC /l 0x409 /d "NDEBUG" # ADD RSC /l 0x409 /d "NDEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:none /machine:I386 !ELSEIF "$(CFG)" == "outline - Win32 Debug" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 1 # PROP BASE Output_Dir "Debug" # PROP BASE Intermediate_Dir "Debug" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 1 # PROP Output_Dir "Debug" # PROP Intermediate_Dir "Debug" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c # ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "..\lib" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FD /GZ /c # ADD BASE RSC /l 0x409 /d "_DEBUG" # ADD RSC /l 0x409 /d "_DEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 !ENDIF # Begin Target # Name "outline - Win32 Release" # Name "outline - Win32 Debug" # Begin Group "Source Files" # PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" # Begin Source File SOURCE=.\outline.c # End Source File # End Group # Begin Group "Header Files" # PROP Default_Filter "h;hpp;hxx;hm;inl" # End Group # Begin Group "Resource Files" # PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" # End Group # End Target # End Project tla-1.3.5+dfsg/src/expat/examples/elements.dsp0000644000175000017500000001006710457621771020025 0ustar useruser# Microsoft Developer Studio Project File - Name="elements" - Package Owner=<4> # Microsoft Developer Studio Generated Build File, Format Version 6.00 # ** DO NOT EDIT ** # TARGTYPE "Win32 (x86) Console Application" 0x0103 CFG=elements - Win32 Debug !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run !MESSAGE !MESSAGE NMAKE /f "elements.mak". !MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: !MESSAGE !MESSAGE NMAKE /f "elements.mak" CFG="elements - Win32 Debug" !MESSAGE !MESSAGE Possible choices for configuration are: !MESSAGE !MESSAGE "elements - Win32 Release" (based on "Win32 (x86) Console Application") !MESSAGE "elements - Win32 Debug" (based on "Win32 (x86) Console Application") !MESSAGE # Begin Project # PROP AllowPerConfigDependencies 0 # PROP Scc_ProjName "" # PROP Scc_LocalPath "" CPP=cl.exe RSC=rc.exe !IF "$(CFG)" == "elements - Win32 Release" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 0 # PROP BASE Output_Dir "Release" # PROP BASE Intermediate_Dir "Release" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 0 # PROP Output_Dir "Release" # PROP Intermediate_Dir "Release" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c # ADD CPP /nologo /MT /W3 /GX /O2 /I "..\lib" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /D "XML_STATIC" /FD /c # SUBTRACT CPP /X /YX # ADD BASE RSC /l 0x409 /d "NDEBUG" # ADD RSC /l 0x409 /d "NDEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 # ADD LINK32 odbccp32.lib libexpatMT.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib /nologo /subsystem:console /pdb:none /machine:I386 /libpath:"..\lib\Release_static" !ELSEIF "$(CFG)" == "elements - Win32 Debug" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 1 # PROP BASE Output_Dir "Debug" # PROP BASE Intermediate_Dir "Debug" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 1 # PROP Output_Dir "Debug" # PROP Intermediate_Dir "Debug" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c # ADD CPP /nologo /MTd /W3 /GX /ZI /Od /I "..\lib" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /D "XML_STATIC" /FR /FD /GZ /c # ADD BASE RSC /l 0x409 /d "_DEBUG" # ADD RSC /l 0x409 /d "_DEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept # ADD LINK32 odbccp32.lib libexpatMT.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib /nologo /subsystem:console /pdb:none /debug /machine:I386 /libpath:"..\lib\Debug_static" !ENDIF # Begin Target # Name "elements - Win32 Release" # Name "elements - Win32 Debug" # Begin Group "Source Files" # PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" # Begin Source File SOURCE=.\elements.c # End Source File # End Group # Begin Group "Header Files" # PROP Default_Filter "h;hpp;hxx;hm;inl" # End Group # Begin Group "Resource Files" # PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" # End Group # End Target # End Project tla-1.3.5+dfsg/src/expat/examples/outline.c0000644000175000017500000000377010457621771017327 0ustar useruser/***************************************************************** * outline.c * * Copyright 1999, Clark Cooper * All rights reserved. * * This program is free software; you can redistribute it and/or * modify it under the terms of the license contained in the * COPYING file that comes with the expat distribution. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * Read an XML document from standard input and print an element * outline on standard output. */ #include #include #define BUFFSIZE 8192 char Buff[BUFFSIZE]; int Depth; static void XMLCALL start(void *data, const char *el, const char **attr) { int i; for (i = 0; i < Depth; i++) printf(" "); printf("%s", el); for (i = 0; attr[i]; i += 2) { printf(" %s='%s'", attr[i], attr[i + 1]); } printf("\n"); Depth++; } static void XMLCALL end(void *data, const char *el) { Depth--; } int main(int argc, char *argv[]) { XML_Parser p = XML_ParserCreate(NULL); if (! p) { fprintf(stderr, "Couldn't allocate memory for parser\n"); exit(-1); } XML_SetElementHandler(p, start, end); for (;;) { int done; int len; len = fread(Buff, 1, BUFFSIZE, stdin); if (ferror(stdin)) { fprintf(stderr, "Read error\n"); exit(-1); } done = feof(stdin); if (XML_Parse(p, Buff, len, done) == XML_STATUS_ERROR) { fprintf(stderr, "Parse error at line %d:\n%s\n", XML_GetCurrentLineNumber(p), XML_ErrorString(XML_GetErrorCode(p))); exit(-1); } if (done) break; } return 0; } tla-1.3.5+dfsg/src/expat/examples/elements.c0000644000175000017500000000234110457621771017455 0ustar useruser/* This is simple demonstration of how to use expat. This program reads an XML document from standard input and writes a line with the name of each element to standard output indenting child elements by one tab stop more than their parent element. */ #include #include "expat.h" static void XMLCALL startElement(void *userData, const char *name, const char **atts) { int i; int *depthPtr = userData; for (i = 0; i < *depthPtr; i++) putchar('\t'); puts(name); *depthPtr += 1; } static void XMLCALL endElement(void *userData, const char *name) { int *depthPtr = userData; *depthPtr -= 1; } int main(int argc, char *argv[]) { char buf[BUFSIZ]; XML_Parser parser = XML_ParserCreate(NULL); int done; int depth = 0; XML_SetUserData(parser, &depth); XML_SetElementHandler(parser, startElement, endElement); do { size_t len = fread(buf, 1, sizeof(buf), stdin); done = len < sizeof(buf); if (XML_Parse(parser, buf, len, done) == XML_STATUS_ERROR) { fprintf(stderr, "%s at line %d\n", XML_ErrorString(XML_GetErrorCode(parser)), XML_GetCurrentLineNumber(parser)); return 1; } } while (!done); XML_ParserFree(parser); return 0; } tla-1.3.5+dfsg/src/expat/win32/0000755000175000017500000000000010457621771014621 5ustar userusertla-1.3.5+dfsg/src/expat/win32/expat.iss0000644000175000017500000000757010457621771016473 0ustar useruser; Basic setup script for the Inno Setep installer builder. For more ; information on the free installer builder, see www.jrsoftware.org. ; ; This script was contributed by Tim Peters. ; The current version is used with Inno Setup 2.0.19. [Setup] AppName=expat AppId=expat AppVersion=1.95.8 AppVerName=expat 1.95.8 AppCopyright=Copyright © 1998-2003 Thai Open Source Software Center, Clark Cooper, and the Expat maintainers DefaultDirName={sd}\Expat-1.95.8 AppPublisher=The Expat Developers AppPublisherURL=http://www.libexpat.org/ AppSupportURL=http://www.libexpat.org/ AppUpdatesURL=http://www.libexpat.org/ UninstallDisplayName=Expat XML Parser (version 1.95.8) UninstallFilesDir={app}\Uninstall Compression=bzip/9 SourceDir=.. OutputDir=win32 DisableStartupPrompt=yes AllowNoIcons=yes DisableProgramGroupPage=yes DisableReadyPage=yes [Files] CopyMode: alwaysoverwrite; Source: xmlwf\Release\*.exe; DestDir: "{app}" CopyMode: alwaysoverwrite; Source: win32\MANIFEST.txt; DestDir: "{app}" CopyMode: alwaysoverwrite; Source: Changes; DestDir: "{app}"; DestName: Changes.txt CopyMode: alwaysoverwrite; Source: COPYING; DestDir: "{app}"; DestName: COPYING.txt CopyMode: alwaysoverwrite; Source: README; DestDir: "{app}"; DestName: README.txt CopyMode: alwaysoverwrite; Source: doc\*.html; DestDir: "{app}\Doc" CopyMode: alwaysoverwrite; Source: doc\*.css; DestDir: "{app}\Doc" CopyMode: alwaysoverwrite; Source: doc\*.png; DestDir: "{app}\Doc" CopyMode: alwaysoverwrite; Source: lib\Release\*.dll; DestDir: "{app}\Libs" CopyMode: alwaysoverwrite; Source: lib\Release\*.lib; DestDir: "{app}\Libs" CopyMode: alwaysoverwrite; Source: lib\Release-w\*.dll; DestDir: "{app}\Libs" CopyMode: alwaysoverwrite; Source: lib\Release-w\*.lib; DestDir: "{app}\Libs" CopyMode: alwaysoverwrite; Source: lib\Release_static\*.lib; DestDir: "{app}\StaticLibs" CopyMode: alwaysoverwrite; Source: lib\Release-w_static\*.lib; DestDir: "{app}\StaticLibs" CopyMode: alwaysoverwrite; Source: expat.dsw; DestDir: "{app}\Source" CopyMode: alwaysoverwrite; Source: win32\README.txt; DestDir: "{app}\Source" CopyMode: alwaysoverwrite; Source: bcb5\*.*; DestDir: "{app}\Source\bcb5" CopyMode: alwaysoverwrite; Source: lib\*.c; DestDir: "{app}\Source\lib" CopyMode: alwaysoverwrite; Source: lib\*.h; DestDir: "{app}\Source\lib" CopyMode: alwaysoverwrite; Source: lib\*.def; DestDir: "{app}\Source\lib" CopyMode: alwaysoverwrite; Source: lib\*.dsp; DestDir: "{app}\Source\lib" CopyMode: alwaysoverwrite; Source: examples\*.c; DestDir: "{app}\Source\examples" CopyMode: alwaysoverwrite; Source: examples\*.dsp; DestDir: "{app}\Source\examples" CopyMode: alwaysoverwrite; Source: tests\*.c; DestDir: "{app}\Source\tests" CopyMode: alwaysoverwrite; Source: tests\*.h; DestDir: "{app}\Source\tests" CopyMode: alwaysoverwrite; Source: tests\README.txt; DestDir: "{app}\Source\tests" CopyMode: alwaysoverwrite; Source: xmlwf\*.c*; DestDir: "{app}\Source\xmlwf" CopyMode: alwaysoverwrite; Source: xmlwf\*.h; DestDir: "{app}\Source\xmlwf" CopyMode: alwaysoverwrite; Source: xmlwf\*.dsp; DestDir: "{app}\Source\xmlwf" [Messages] WelcomeLabel1=Welcome to the Expat XML Parser Setup Wizard WelcomeLabel2=This will install [name/ver] on your computer.%n%nExpat is an XML parser with a C-language API, and is primarily made available to allow developers to build applications which use XML using a portable API and fast implementation.%n%nIt is strongly recommended that you close all other applications you have running before continuing. This will help prevent any conflicts during the installation process. tla-1.3.5+dfsg/src/expat/win32/README.txt0000644000175000017500000000420310457621771016316 0ustar useruser Expat can be built on Windows in three ways: using MS Visual C++ (6.0 or .NET), Borland C++ Builder 5 or Cygwin. * Cygwin: This follows the Unix build procedures. * C++ Builder 5: Possible with make files in the BCB5 subdirectory. Details can be found in the ReadMe file located there. * MS Visual C++ 6: Based on the workspace file expat.dsw. The related project files (.dsp) are located in the lib subdirectory. * MS Visual Studio .NET 2002, 2003: The VC++ 6 workspace file (expat.dsw) and project files (.dsp) can be opened and imported in VS.NET without problems. * Special note about MS VC++ and runtime libraries: There are three possible configurations: using the single threaded or multithreaded run-time library, or using the multi-threaded run-time Dll. That is, one can build three different Expat libraries depending on the needs of the application. Dynamic Linking: By default the Expat Dlls are built to link statically with the multi-threaded run-time library. The libraries are named - libexpat(w).dll - libexpat(w).lib (import library) The "w" indicates the UTF-16 version of the library. One rarely uses other versions of the Dll, but they can be built easily by specifying a different RTL linkage in the IDE on the C/C++ tab under the category Code Generation. Static Linking: The libraries should be named like this: Single-theaded: libexpat(w)ML.lib Multi-threaded: libexpat(w)MT.lib Multi-threaded Dll: libexpat(w)MD.lib The suffixes conform to the compiler switch settings /ML, /MT and /MD for MS VC++. By default, the expat-static and expatw-static projects are set up to link statically against the multithreaded run-time library, so they will build libexpatMT.lib or libexpatwMT.lib files. To build the other versions of the static library, go to Project - Settings: - specify a different RTL linkage on the C/C++ tab under the category Code Generation. - then, on the Library tab, change the output file name accordingly, as described above An application linking to the static libraries must have the global macro XML_STATIC defined. tla-1.3.5+dfsg/src/expat/win32/MANIFEST.txt0000644000175000017500000000241310457621771016570 0ustar useruser Overview of the Expat distribution The Expat distribution creates several subdirectories on your system. Some of these directories contain components of interest to all Expat users, and some contain material of interest to developers who wish to use Expat in their applications. In the list below, is the directory you specified to the installer. Directory Contents -------------------------------------------------------------------- \ The XML well-formedness checker and some general information files. \Doc\ API documentation for developers. \Libs\ Pre-compiled dynamic libraries for developers. \StaticLibs\ Pre-compiled static libraries for developers. \Source\ Source code, which may interest some developers, including a workspace for Microsft Visual C++. The source code includes the parser, the well- formedness checker, and a couple of small sample applications. \Source\bcb5\ Project files for Borland C++ Builder 5 and BCC 5.5. \Unistall\ The uninstaller and its data files. tla-1.3.5+dfsg/src/expat/doc/0000755000175000017500000000000010457621771014424 5ustar userusertla-1.3.5+dfsg/src/expat/doc/xmlwf.10000644000175000017500000001733410457621771015653 0ustar useruser.\" This manpage has been automatically generated by docbook2man .\" from a DocBook document. This tool can be found at: .\" .\" Please send any bug reports, improvements, comments, patches, .\" etc. to Steve Cheng . .TH "XMLWF" "1" "24 January 2003" "" "" .SH NAME xmlwf \- Determines if an XML document is well-formed .SH SYNOPSIS \fBxmlwf\fR [ \fB-s\fR] [ \fB-n\fR] [ \fB-p\fR] [ \fB-x\fR] [ \fB-e \fIencoding\fB\fR] [ \fB-w\fR] [ \fB-d \fIoutput-dir\fB\fR] [ \fB-c\fR] [ \fB-m\fR] [ \fB-r\fR] [ \fB-t\fR] [ \fB-v\fR] [ \fBfile ...\fR] .SH "DESCRIPTION" .PP \fBxmlwf\fR uses the Expat library to determine if an XML document is well-formed. It is non-validating. .PP If you do not specify any files on the command-line, and you have a recent version of \fBxmlwf\fR, the input file will be read from standard input. .SH "WELL-FORMED DOCUMENTS" .PP A well-formed document must adhere to the following rules: .TP 0.2i \(bu The file begins with an XML declaration. For instance, . \fBNOTE:\fR \fBxmlwf\fR does not currently check for a valid XML declaration. .TP 0.2i \(bu Every start tag is either empty () or has a corresponding end tag. .TP 0.2i \(bu There is exactly one root element. This element must contain all other elements in the document. Only comments, white space, and processing instructions may come after the close of the root element. .TP 0.2i \(bu All elements nest properly. .TP 0.2i \(bu All attribute values are enclosed in quotes (either single or double). .PP If the document has a DTD, and it strictly complies with that DTD, then the document is also considered \fBvalid\fR. \fBxmlwf\fR is a non-validating parser -- it does not check the DTD. However, it does support external entities (see the \fB-x\fR option). .SH "OPTIONS" .PP When an option includes an argument, you may specify the argument either separately ("\fB-d\fR output") or concatenated with the option ("\fB-d\fRoutput"). \fBxmlwf\fR supports both. .TP \fB-c\fR If the input file is well-formed and \fBxmlwf\fR doesn't encounter any errors, the input file is simply copied to the output directory unchanged. This implies no namespaces (turns off \fB-n\fR) and requires \fB-d\fR to specify an output file. .TP \fB-d output-dir\fR Specifies a directory to contain transformed representations of the input files. By default, \fB-d\fR outputs a canonical representation (described below). You can select different output formats using \fB-c\fR and \fB-m\fR. The output filenames will be exactly the same as the input filenames or "STDIN" if the input is coming from standard input. Therefore, you must be careful that the output file does not go into the same directory as the input file. Otherwise, \fBxmlwf\fR will delete the input file before it generates the output file (just like running cat < file > file in most shells). Two structurally equivalent XML documents have a byte-for-byte identical canonical XML representation. Note that ignorable white space is considered significant and is treated equivalently to data. More on canonical XML can be found at http://www.jclark.com/xml/canonxml.html . .TP \fB-e encoding\fR Specifies the character encoding for the document, overriding any document encoding declaration. \fBxmlwf\fR supports four built-in encodings: US-ASCII, UTF-8, UTF-16, and ISO-8859-1. Also see the \fB-w\fR option. .TP \fB-m\fR Outputs some strange sort of XML file that completely describes the the input file, including character postitions. Requires \fB-d\fR to specify an output file. .TP \fB-n\fR Turns on namespace processing. (describe namespaces) \fB-c\fR disables namespaces. .TP \fB-p\fR Tells xmlwf to process external DTDs and parameter entities. Normally \fBxmlwf\fR never parses parameter entities. \fB-p\fR tells it to always parse them. \fB-p\fR implies \fB-x\fR. .TP \fB-r\fR Normally \fBxmlwf\fR memory-maps the XML file before parsing; this can result in faster parsing on many platforms. \fB-r\fR turns off memory-mapping and uses normal file IO calls instead. Of course, memory-mapping is automatically turned off when reading from standard input. Use of memory-mapping can cause some platforms to report substantially higher memory usage for \fBxmlwf\fR, but this appears to be a matter of the operating system reporting memory in a strange way; there is not a leak in \fBxmlwf\fR. .TP \fB-s\fR Prints an error if the document is not standalone. A document is standalone if it has no external subset and no references to parameter entities. .TP \fB-t\fR Turns on timings. This tells Expat to parse the entire file, but not perform any processing. This gives a fairly accurate idea of the raw speed of Expat itself without client overhead. \fB-t\fR turns off most of the output options (\fB-d\fR, \fB-m\fR, \fB-c\fR, \&...). .TP \fB-v\fR Prints the version of the Expat library being used, including some information on the compile-time configuration of the library, and then exits. .TP \fB-w\fR Enables support for Windows code pages. Normally, \fBxmlwf\fR will throw an error if it runs across an encoding that it is not equipped to handle itself. With \fB-w\fR, xmlwf will try to use a Windows code page. See also \fB-e\fR. .TP \fB-x\fR Turns on parsing external entities. Non-validating parsers are not required to resolve external entities, or even expand entities at all. Expat always expands internal entities (?), but external entity parsing must be enabled explicitly. External entities are simply entities that obtain their data from outside the XML file currently being parsed. This is an example of an internal entity: .nf .fi And here are some examples of external entities: .nf (parsed) (unparsed) .fi .TP \fB--\fR (Two hyphens.) Terminates the list of options. This is only needed if a filename starts with a hyphen. For example: .nf xmlwf -- -myfile.xml .fi will run \fBxmlwf\fR on the file \fI-myfile.xml\fR. .PP Older versions of \fBxmlwf\fR do not support reading from standard input. .SH "OUTPUT" .PP If an input file is not well-formed, \fBxmlwf\fR prints a single line describing the problem to standard output. If a file is well formed, \fBxmlwf\fR outputs nothing. Note that the result code is \fBnot\fR set. .SH "BUGS" .PP According to the W3C standard, an XML file without a declaration at the beginning is not considered well-formed. However, \fBxmlwf\fR allows this to pass. .PP \fBxmlwf\fR returns a 0 - noerr result, even if the file is not well-formed. There is no good way for a program to use \fBxmlwf\fR to quickly check a file -- it must parse \fBxmlwf\fR's standard output. .PP The errors should go to standard error, not standard output. .PP There should be a way to get \fB-d\fR to send its output to standard output rather than forcing the user to send it to a file. .PP I have no idea why anyone would want to use the \fB-d\fR, \fB-c\fR, and \fB-m\fR options. If someone could explain it to me, I'd like to add this information to this manpage. .SH "ALTERNATIVES" .PP Here are some XML validators on the web: .nf http://www.hcrc.ed.ac.uk/~richard/xml-check.html http://www.stg.brown.edu/service/xmlvalid/ http://www.scripting.com/frontier5/xml/code/xmlValidator.html http://www.xml.com/pub/a/tools/ruwf/check.html .fi .SH "SEE ALSO" .PP .nf The Expat home page: http://www.libexpat.org/ The W3 XML specification: http://www.w3.org/TR/REC-xml .fi .SH "AUTHOR" .PP This manual page was written by Scott Bronson for the Debian GNU/Linux system (but may be used by others). Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1. tla-1.3.5+dfsg/src/expat/doc/reference.html0000644000175000017500000026074410457621771017265 0ustar useruser Expat XML Parser
(Expat logo)
Release 1.95.8

Expat is a library, written in C, for parsing XML documents. It's the underlying XML parser for the open source Mozilla project, Perl's XML::Parser, Python's xml.parsers.expat, and other open-source XML parsers.

This library is the creation of James Clark, who's also given us groff (an nroff look-alike), Jade (an implemention of ISO's DSSSL stylesheet language for SGML), XP (a Java XML parser package), XT (a Java XSL engine). James was also the technical lead on the XML Working Group at W3C that produced the XML specification.

This is free software, licensed under the MIT/X Consortium license. You may download it from the Expat home page.

The bulk of this document was originally commissioned as an article by XML.com. They graciously allowed Clark Cooper to retain copyright and to distribute it with Expat. This version has been substantially extended to include documentation on features which have been added since the original article was published, and additional information on using the original interface.


Table of Contents


Overview

Expat is a stream-oriented parser. You register callback (or handler) functions with the parser and then start feeding it the document. As the parser recognizes parts of the document, it will call the appropriate handler for that part (if you've registered one.) The document is fed to the parser in pieces, so you can start parsing before you have all the document. This also allows you to parse really huge documents that won't fit into memory.

Expat can be intimidating due to the many kinds of handlers and options you can set. But you only need to learn four functions in order to do 90% of what you'll want to do with it:

XML_ParserCreate
Create a new parser object.
XML_SetElementHandler
Set handlers for start and end tags.
XML_SetCharacterDataHandler
Set handler for text.
XML_Parse
Pass a buffer full of document to the parser

These functions and others are described in the reference part of this document. The reference section also describes in detail the parameters passed to the different types of handlers.

Let's look at a very simple example program that only uses 3 of the above functions (it doesn't need to set a character handler.) The program outline.c prints an element outline, indenting child elements to distinguish them from the parent element that contains them. The start handler does all the work. It prints two indenting spaces for every level of ancestor elements, then it prints the element and attribute information. Finally it increments the global Depth variable.

int Depth;

void XMLCALL
start(void *data, const char *el, const char **attr) {
  int i;

  for (i = 0; i < Depth; i++)
    printf("  ");

  printf("%s", el);

  for (i = 0; attr[i]; i += 2) {
    printf(" %s='%s'", attr[i], attr[i + 1]);
  }

  printf("\n");
  Depth++;
}  /* End of start handler */

The end tag simply does the bookkeeping work of decrementing Depth.

void XMLCALL
end(void *data, const char *el) {
  Depth--;
}  /* End of end handler */

Note the XMLCALL annotation used for the callbacks. This is used to ensure that the Expat and the callbacks are using the same calling convention in case the compiler options used for Expat itself and the client code are different. Expat tries not to care what the default calling convention is, though it may require that it be compiled with a default convention of "cdecl" on some platforms. For code which uses Expat, however, the calling convention is specified by the XMLCALL annotation on most platforms; callbacks should be defined using this annotation.

The XMLCALL annotation was added in Expat 1.95.7, but existing working Expat applications don't need to add it (since they are already using the "cdecl" calling convention, or they wouldn't be working). The annotation is only needed if the default calling convention may be something other than "cdecl". To use the annotation safely with older versions of Expat, you can conditionally define it after including Expat's header file:

#include <expat.h>

#ifndef XMLCALL
#if defined(_MSC_EXTENSIONS) && !defined(__BEOS__) && !defined(__CYGWIN__)
#define XMLCALL __cdecl
#elif defined(__GNUC__)
#define XMLCALL __attribute__((cdecl))
#else
#define XMLCALL
#endif
#endif

After creating the parser, the main program just has the job of shoveling the document to the parser so that it can do its work.


Building and Installing Expat

The Expat distribution comes as a compressed (with GNU gzip) tar file. You may download the latest version from Source Forge. After unpacking this, cd into the directory. Then follow either the Win32 directions or Unix directions below.

Building under Win32

If you're using the GNU compiler under cygwin, follow the Unix directions in the next section. Otherwise if you have Microsoft's Developer Studio installed, then from Windows Explorer double-click on "expat.dsp" in the lib directory and build and install in the usual manner.

Alternatively, you may download the Win32 binary package that contains the "expat.h" include file and a pre-built DLL.

Building under Unix (or GNU)

First you'll need to run the configure shell script in order to configure the Makefiles and headers for your system.

If you're happy with all the defaults that configure picks for you, and you have permission on your system to install into /usr/local, you can install Expat with this sequence of commands:

./configure
make
make install

There are some options that you can provide to this script, but the only one we'll mention here is the --prefix option. You can find out all the options available by running configure with just the --help option.

By default, the configure script sets things up so that the library gets installed in /usr/local/lib and the associated header file in /usr/local/include. But if you were to give the option, --prefix=/home/me/mystuff, then the library and header would get installed in /home/me/mystuff/lib and /home/me/mystuff/include respectively.

Configuring Expat Using the Pre-Processor

Expat's feature set can be configured using a small number of pre-processor definitions. The definition of this symbols does not affect the set of entry points for Expat, only the behavior of the API and the definition of character types in the case of XML_UNICODE_WCHAR_T. The symbols are:

XML_DTD
Include support for using and reporting DTD-based content. If this is defined, default attribute values from an external DTD subset are reported and attribute value normalization occurs based on the type of attributes defined in the external subset. Without this, Expat has a smaller memory footprint and can be faster, but will not load external entities or process conditional sections. This does not affect the set of functions available in the API.
XML_NS
When defined, support for the Namespaces in XML specification is included.
XML_UNICODE
When defined, character data reported to the application is encoded in UTF-16 using wide characters of the type XML_Char. This is implied if XML_UNICODE_WCHAR_T is defined.
XML_UNICODE_WCHAR_T
If defined, causes the XML_Char character type to be defined using the wchar_t type; otherwise, unsigned short is used. Defining this implies XML_UNICODE.
XML_CONTEXT_BYTES
The number of input bytes of markup context which the parser will ensure are available for reporting via XML_GetInputContext. This is normally set to 1024, and must be set to a positive interger. If this is not defined, the input context will not be available and XML_GetInputContext will always report NULL. Without this, Expat has a smaller memory footprint and can be faster.
XML_STATIC
On Windows, this should be set if Expat is going to be linked statically with the code that calls it; this is required to get all the right MSVC magic annotations correct. This is ignored on other platforms.

Using Expat

Compiling and Linking Against Expat

Unless you installed Expat in a location not expected by your compiler and linker, all you have to do to use Expat in your programs is to include the Expat header (#include <expat.h>) in your files that make calls to it and to tell the linker that it needs to link against the Expat library. On Unix systems, this would usually be done with the -lexpat argument. Otherwise, you'll need to tell the compiler where to look for the Expat header and the linker where to find the Expat library. You may also need to take steps to tell the operating system where to find this libary at run time.

On a Unix-based system, here's what a Makefile might look like when Expat is installed in a standard location:

CC=cc
LDFLAGS=
LIBS= -lexpat
xmlapp: xmlapp.o
        $(CC) $(LDFLAGS) -o xmlapp xmlapp.o $(LIBS)

If you installed Expat in, say, /home/me/mystuff, then the Makefile would look like this:

CC=cc
CFLAGS= -I/home/me/mystuff/include
LDFLAGS=
LIBS= -L/home/me/mystuff/lib -lexpat
xmlapp: xmlapp.o
        $(CC) $(LDFLAGS) -o xmlapp xmlapp.o $(LIBS)

You'd also have to set the environment variable LD_LIBRARY_PATH to /home/me/mystuff/lib (or to ${LD_LIBRARY_PATH}:/home/me/mystuff/lib if LD_LIBRARY_PATH already has some directories in it) in order to run your application.

Expat Basics

As we saw in the example in the overview, the first step in parsing an XML document with Expat is to create a parser object. There are three functions in the Expat API for creating a parser object. However, only two of these (XML_ParserCreate and XML_ParserCreateNS) can be used for constructing a parser for a top-level document. The object returned by these functions is an opaque pointer (i.e. "expat.h" declares it as void *) to data with further internal structure. In order to free the memory associated with this object you must call XML_ParserFree. Note that if you have provided any user data that gets stored in the parser, then your application is responsible for freeing it prior to calling XML_ParserFree.

The objects returned by the parser creation functions are good for parsing only one XML document or external parsed entity. If your application needs to parse many XML documents, then it needs to create a parser object for each one. The best way to deal with this is to create a higher level object that contains all the default initialization you want for your parser objects.

Walking through a document hierarchy with a stream oriented parser will require a good stack mechanism in order to keep track of current context. For instance, to answer the simple question, "What element does this text belong to?" requires a stack, since the parser may have descended into other elements that are children of the current one and has encountered this text on the way out.

The things you're likely to want to keep on a stack are the currently opened element and it's attributes. You push this information onto the stack in the start handler and you pop it off in the end handler.

For some tasks, it is sufficient to just keep information on what the depth of the stack is (or would be if you had one.) The outline program shown above presents one example. Another such task would be skipping over a complete element. When you see the start tag for the element you want to skip, you set a skip flag and record the depth at which the element started. When the end tag handler encounters the same depth, the skipped element has ended and the flag may be cleared. If you follow the convention that the root element starts at 1, then you can use the same variable for skip flag and skip depth.

void
init_info(Parseinfo *info) {
  info->skip = 0;
  info->depth = 1;
  /* Other initializations here */
}  /* End of init_info */

void XMLCALL
rawstart(void *data, const char *el, const char **attr) {
  Parseinfo *inf = (Parseinfo *) data;

  if (! inf->skip) {
    if (should_skip(inf, el, attr)) {
      inf->skip = inf->depth;
    }
    else
      start(inf, el, attr);     /* This does rest of start handling */
  }

  inf->depth++;
}  /* End of rawstart */

void XMLCALL
rawend(void *data, const char *el) {
  Parseinfo *inf = (Parseinfo *) data;

  inf->depth--;

  if (! inf->skip)
    end(inf, el);              /* This does rest of end handling */

  if (inf->skip == inf->depth)
    inf->skip = 0;
}  /* End rawend */

Notice in the above example the difference in how depth is manipulated in the start and end handlers. The end tag handler should be the mirror image of the start tag handler. This is necessary to properly model containment. Since, in the start tag handler, we incremented depth after the main body of start tag code, then in the end handler, we need to manipulate it before the main body. If we'd decided to increment it first thing in the start handler, then we'd have had to decrement it last thing in the end handler.

Communicating between handlers

In order to be able to pass information between different handlers without using globals, you'll need to define a data structure to hold the shared variables. You can then tell Expat (with the XML_SetUserData function) to pass a pointer to this structure to the handlers. This is the first argument received by most handlers. In the reference section, an argument to a callback function is named userData and have type void * if the user data is passed; it will have the type XML_Parser if the parser itself is passed. When the parser is passed, the user data may be retrieved using XML_GetUserData.

One common case where multiple calls to a single handler may need to communicate using an application data structure is the case when content passed to the character data handler (set by XML_SetCharacterDataHandler) needs to be accumulated. A common first-time mistake with any of the event-oriented interfaces to an XML parser is to expect all the text contained in an element to be reported by a single call to the character data handler. Expat, like many other XML parsers, reports such data as a sequence of calls; there's no way to know when the end of the sequence is reached until a different callback is made. A buffer referenced by the user data structure proves both an effective and convenient place to accumulate character data.

XML Version

Expat is an XML 1.0 parser, and as such never complains based on the value of the version pseudo-attribute in the XML declaration, if present.

If an application needs to check the version number (to support alternate processing), it should use the XML_SetXmlDeclHandler function to set a handler that uses the information in the XML declaration to determine what to do. This example shows how to check that only a version number of "1.0" is accepted:

static int wrong_version;
static XML_Parser parser;

static void XMLCALL
xmldecl_handler(void            *userData,
                const XML_Char  *version,
                const XML_Char  *encoding,
                int              standalone)
{
  static const XML_Char Version_1_0[] = {'1', '.', '0', 0};

  int i;

  for (i = 0; i < (sizeof(Version_1_0) / sizeof(Version_1_0[0])); ++i) {
    if (version[i] != Version_1_0[i]) {
      wrong_version = 1;
      /* also clear all other handlers: */
      XML_SetCharacterDataHandler(parser, NULL);
      ...
      return;
    }
  }
  ...
}

Namespace Processing

When the parser is created using the XML_ParserCreateNS, function, Expat performs namespace processing. Under namespace processing, Expat consumes xmlns and xmlns:... attributes, which declare namespaces for the scope of the element in which they occur. This means that your start handler will not see these attributes. Your application can still be informed of these declarations by setting namespace declaration handlers with XML_SetNamespaceDeclHandler.

Element type and attribute names that belong to a given namespace are passed to the appropriate handler in expanded form. By default this expanded form is a concatenation of the namespace URI, the separator character (which is the 2nd argument to XML_ParserCreateNS), and the local name (i.e. the part after the colon). Names with undeclared prefixes are passed through to the handlers unchanged, with the prefix and colon still attached. Unprefixed attribute names are never expanded, and unprefixed element names are only expanded when they are in the scope of a default namespace.

However if XML_SetReturnNSTriplet has been called with a non-zero do_nst parameter, then the expanded form for names with an explicit prefix is a concatenation of: URI, separator, local name, separator, prefix.

You can set handlers for the start of a namespace declaration and for the end of a scope of a declaration with the XML_SetNamespaceDeclHandler function. The StartNamespaceDeclHandler is called prior to the start tag handler and the EndNamespaceDeclHandler is called before the corresponding end tag that ends the namespace's scope. The namespace start handler gets passed the prefix and URI for the namespace. For a default namespace declaration (xmlns='...'), the prefix will be null. The URI will be null for the case where the default namespace is being unset. The namespace end handler just gets the prefix for the closing scope.

These handlers are called for each declaration. So if, for instance, a start tag had three namespace declarations, then the StartNamespaceDeclHandler would be called three times before the start tag handler is called, once for each declaration.

Character Encodings

While XML is based on Unicode, and every XML processor is required to recognized UTF-8 and UTF-16 (1 and 2 byte encodings of Unicode), other encodings may be declared in XML documents or entities. For the main document, an XML declaration may contain an encoding declaration:

<?xml version="1.0" encoding="ISO-8859-2"?>

External parsed entities may begin with a text declaration, which looks like an XML declaration with just an encoding declaration:

<?xml encoding="Big5"?>

With Expat, you may also specify an encoding at the time of creating a parser. This is useful when the encoding information may come from a source outside the document itself (like a higher level protocol.)

There are four built-in encodings in Expat:

  • UTF-8
  • UTF-16
  • ISO-8859-1
  • US-ASCII

Anything else discovered in an encoding declaration or in the protocol encoding specified in the parser constructor, triggers a call to the UnknownEncodingHandler. This handler gets passed the encoding name and a pointer to an XML_Encoding data structure. Your handler must fill in this structure and return XML_STATUS_OK if it knows how to deal with the encoding. Otherwise the handler should return XML_STATUS_ERROR. The handler also gets passed a pointer to an optional application data structure that you may indicate when you set the handler.

Expat places restrictions on character encodings that it can support by filling in the XML_Encoding structure. include file:

  1. Every ASCII character that can appear in a well-formed XML document must be represented by a single byte, and that byte must correspond to it's ASCII encoding (except for the characters $@\^'{}~)
  2. Characters must be encoded in 4 bytes or less.
  3. All characters encoded must have Unicode scalar values less than or equal to 65535 (0xFFFF)This does not apply to the built-in support for UTF-16 and UTF-8
  4. No character may be encoded by more that one distinct sequence of bytes

XML_Encoding contains an array of integers that correspond to the 1st byte of an encoding sequence. If the value in the array for a byte is zero or positive, then the byte is a single byte encoding that encodes the Unicode scalar value contained in the array. A -1 in this array indicates a malformed byte. If the value is -2, -3, or -4, then the byte is the beginning of a 2, 3, or 4 byte sequence respectively. Multi-byte sequences are sent to the convert function pointed at in the XML_Encoding structure. This function should return the Unicode scalar value for the sequence or -1 if the sequence is malformed.

One pitfall that novice Expat users are likely to fall into is that although Expat may accept input in various encodings, the strings that it passes to the handlers are always encoded in UTF-8 or UTF-16 (depending on how Expat was compiled). Your application is responsible for any translation of these strings into other encodings.

Handling External Entity References

Expat does not read or parse external entities directly. Note that any external DTD is a special case of an external entity. If you've set no ExternalEntityRefHandler, then external entity references are silently ignored. Otherwise, it calls your handler with the information needed to read and parse the external entity.

Your handler isn't actually responsible for parsing the entity, but it is responsible for creating a subsidiary parser with XML_ExternalEntityParserCreate that will do the job. This returns an instance of XML_Parser that has handlers and other data structures initialized from the parent parser. You may then use XML_Parse or XML_ParseBuffer calls against this parser. Since external entities my refer to other external entities, your handler should be prepared to be called recursively.

Parsing DTDs

In order to parse parameter entities, before starting the parse, you must call XML_SetParamEntityParsing with one of the following arguments:

XML_PARAM_ENTITY_PARSING_NEVER
Don't parse parameter entities or the external subset
XML_PARAM_ENTITY_PARSING_UNLESS_STANDALONE
Parse parameter entites and the external subset unless standalone was set to "yes" in the XML declaration.
XML_PARAM_ENTITY_PARSING_ALWAYS
Always parse parameter entities and the external subset

In order to read an external DTD, you also have to set an external entity reference handler as described above.

Temporarily Stopping Parsing

Expat 1.95.8 introduces a new feature: its now possible to stop parsing temporarily from within a handler function, even if more data has already been passed into the parser. Applications for this include

  • Supporting the XInclude specification.
  • Delaying further processing until additional information is available from some other source.
  • Adjusting processor load as task priorities shift within an application.
  • Stopping parsing completely (simply free or reset the parser instead of resuming in the outer parsing loop). This can be useful if a application-domain error is found in the XML being parsed or if the result of the parse is determined not to be useful after all.

To take advantage of this feature, the main parsing loop of an application needs to support this specifically. It cannot be supported with a parsing loop compatible with Expat 1.95.7 or earlier (though existing loops will continue to work without supporting the stop/resume feature).

An application that uses this feature for a single parser will have the rough structure (in pseudo-code):

fd = open_input()
p = create_parser()

if parse_xml(p, fd) {
  /* suspended */

  int suspended = 1;

  while (suspended) {
    do_something_else()
    if ready_to_resume() {
      suspended = continue_parsing(p, fd);
    }
  }
}

An application that may resume any of several parsers based on input (either from the XML being parsed or some other source) will certainly have more interesting control structures.

This C function could be used for the parse_xml function mentioned in the pseudo-code above:

#define BUFF_SIZE 10240

/* Parse a document from the open file descriptor 'fd' until the parse
   is complete (the document has been completely parsed, or there's
   been an error), or the parse is stopped.  Return non-zero when
   the parse is merely suspended.
*/
int
parse_xml(XML_Parser p, int fd)
{
  for (;;) {
    int last_chunk;
    int bytes_read;
    enum XML_Status status;

    void *buff = XML_GetBuffer(p, BUFF_SIZE);
    if (buff == NULL) {
      /* handle error... */
      return 0;
    }
    bytes_read = read(fd, buff, BUFF_SIZE);
    if (bytes_read < 0) {
      /* handle error... */
      return 0;
    }
    status = XML_ParseBuffer(p, bytes_read, bytes_read == 0);
    switch (status) {
      case XML_STATUS_ERROR:
        /* handle error... */
        return 0;
      case XML_STATUS_SUSPENDED:
        return 1;
    }
    if (bytes_read == 0)
      return 0;
  }
}

The corresponding continue_parsing function is somewhat simpler, since it only need deal with the return code from XML_ResumeParser; it can delegate the input handling to the parse_xml function:

/* Continue parsing a document which had been suspended.  The 'p' and
   'fd' arguments are the same as passed to parse_xml().  Return
   non-zero when the parse is suspended.
*/
int
continue_parsing(XML_Parser p, int fd)
{
  enum XML_Status status = XML_ResumeParser(p);
  switch (status) {
    case XML_STATUS_ERROR:
      /* handle error... */
      return 0;
    case XML_ERROR_NOT_SUSPENDED:
      /* handle error... */
      return 0;.
    case XML_STATUS_SUSPENDED:
      return 1;
  }
  return parse_xml(p, fd);
}

Now that we've seen what a mess the top-level parsing loop can become, what have we gained? Very simply, we can now use the XML_StopParser function to stop parsing, without having to go to great lengths to avoid additional processing that we're expecting to ignore. As a bonus, we get to stop parsing temporarily, and come back to it when we're ready.

To stop parsing from a handler function, use the XML_StopParser function. This function takes two arguments; the parser being stopped and a flag indicating whether the parse can be resumed in the future.


Expat Reference

Parser Creation

XML_Parser XMLCALL
XML_ParserCreate(const XML_Char *encoding);
Construct a new parser. If encoding is non-null, it specifies a character encoding to use for the document. This overrides the document encoding declaration. There are four built-in encodings:
  • US-ASCII
  • UTF-8
  • UTF-16
  • ISO-8859-1
Any other value will invoke a call to the UnknownEncodingHandler.
XML_Parser XMLCALL
XML_ParserCreateNS(const XML_Char *encoding,
                   XML_Char sep);
Constructs a new parser that has namespace processing in effect. Namespace expanded element names and attribute names are returned as a concatenation of the namespace URI, sep, and the local part of the name. This means that you should pick a character for sep that can't be part of a legal URI.
XML_Parser XMLCALL
XML_ParserCreate_MM(const XML_Char *encoding,
                    const XML_Memory_Handling_Suite *ms,
		    const XML_Char *sep);
typedef struct {
  void *(XMLCALL *malloc_fcn)(size_t size);
  void *(XMLCALL *realloc_fcn)(void *ptr, size_t size);
  void (XMLCALL *free_fcn)(void *ptr);
} XML_Memory_Handling_Suite;

Construct a new parser using the suite of memory handling functions specified in ms. If ms is NULL, then use the standard set of memory management functions. If sep is non NULL, then namespace processing is enabled in the created parser and the character pointed at by sep is used as the separator between the namespace URI and the local part of the name.

XML_Parser XMLCALL
XML_ExternalEntityParserCreate(XML_Parser p,
                               const XML_Char *context,
                               const XML_Char *encoding);
Construct a new XML_Parser object for parsing an external general entity. Context is the context argument passed in a call to a ExternalEntityRefHandler. Other state information such as handlers, user data, namespace processing is inherited from the parser passed as the 1st argument. So you shouldn't need to call any of the behavior changing functions on this parser (unless you want it to act differently than the parent parser).
void XMLCALL
XML_ParserFree(XML_Parser p);
Free memory used by the parser. Your application is responsible for freeing any memory associated with user data.
XML_Bool XMLCALL
XML_ParserReset(XML_Parser p,
                const XML_Char *encoding);
Clean up the memory structures maintained by the parser so that it may be used again. After this has been called, parser is ready to start parsing a new document. This function may not be used on a parser created using XML_ExternalEntityParserCreate; it will return XML_FALSE in that case. Returns XML_TRUE on success. Your application is responsible for dealing with any memory associated with user data.

Parsing

To state the obvious: the three parsing functions XML_Parse, XML_ParseBuffer and XML_GetBuffer must not be called from within a handler unless they operate on a separate parser instance, that is, one that did not call the handler. For example, it is OK to call the parsing functions from within an XML_ExternalEntityRefHandler, if they apply to the parser created by XML_ExternalEntityParserCreate.

enum XML_Status XMLCALL
XML_Parse(XML_Parser p,
          const char *s,
          int len,
          int isFinal);
enum XML_Status {
  XML_STATUS_ERROR = 0,
  XML_STATUS_OK = 1
};
Parse some more of the document. The string s is a buffer containing part (or perhaps all) of the document. The number of bytes of s that are part of the document is indicated by len. This means that s doesn't have to be null terminated. It also means that if len is larger than the number of bytes in the block of memory that s points at, then a memory fault is likely. The isFinal parameter informs the parser that this is the last piece of the document. Frequently, the last piece is empty (i.e. len is zero.) If a parse error occurred, it returns XML_STATUS_ERROR. Otherwise it returns XML_STATUS_OK value.
enum XML_Status XMLCALL
XML_ParseBuffer(XML_Parser p,
                int len,
                int isFinal);
This is just like XML_Parse, except in this case Expat provides the buffer. By obtaining the buffer from Expat with the XML_GetBuffer function, the application can avoid double copying of the input.
void * XMLCALL
XML_GetBuffer(XML_Parser p,
              int len);
Obtain a buffer of size len to read a piece of the document into. A NULL value is returned if Expat can't allocate enough memory for this buffer. This has to be called prior to every call to XML_ParseBuffer. A typical use would look like this:
for (;;) {
  int bytes_read;
  void *buff = XML_GetBuffer(p, BUFF_SIZE);
  if (buff == NULL) {
    /* handle error */
  }

  bytes_read = read(docfd, buff, BUFF_SIZE);
  if (bytes_read < 0) {
    /* handle error */
  }

  if (! XML_ParseBuffer(p, bytes_read, bytes_read == 0)) {
    /* handle parse error */
  }

  if (bytes_read == 0)
    break;
}
enum XML_Status XMLCALL
XML_StopParser(XML_Parser p,
               XML_Bool resumable);

Stops parsing, causing XML_Parse or XML_ParseBuffer to return. Must be called from within a call-back handler, except when aborting (when resumable is XML_FALSE) an already suspended parser. Some call-backs may still follow because they would otherwise get lost, including

  • the end element handler for empty elements when stopped in the start element handler,
  • end namespace declaration handler when stopped in the end element handler,
and possibly others.

This can be called from most handlers, including DTD related call-backs, except when parsing an external parameter entity and resumable is XML_TRUE. Returns XML_STATUS_OK when successful, XML_STATUS_ERROR otherwise. The possible error codes are:

XML_ERROR_SUSPENDED
when suspending an already suspended parser.
XML_ERROR_FINISHED
when the parser has already finished.
XML_ERROR_SUSPEND_PE
when suspending while parsing an external PE.

Since the stop/resume feature requires application support in the outer parsing loop, it is an error to call this function for a parser not being handled appropriately; see Temporarily Stopping Parsing for more information.

When resumable is XML_TRUE then parsing is suspended, that is, XML_Parse and XML_ParseBuffer return XML_STATUS_SUSPENDED. Otherwise, parsing is aborted, that is, XML_Parse and XML_ParseBuffer return XML_STATUS_ERROR with error code XML_ERROR_ABORTED.

Note: This will be applied to the current parser instance only, that is, if there is a parent parser then it will continue parsing when the external entity reference handler returns. It is up to the implementation of that handler to call XML_StopParser on the parent parser (recursively), if one wants to stop parsing altogether.

When suspended, parsing can be resumed by calling XML_ResumeParser.

New in Expat 1.95.8.

enum XML_Status XMLCALL
XML_ResumeParser(XML_Parser p);

Resumes parsing after it has been suspended with XML_StopParser. Must not be called from within a handler call-back. Returns same status codes as XML_Parse or XML_ParseBuffer. An additional error code, XML_ERROR_NOT_SUSPENDED, will be returned if the parser was not currently suspended.

Note: This must be called on the most deeply nested child parser instance first, and on its parent parser only after the child parser has finished, to be applied recursively until the document entity's parser is restarted. That is, the parent parser will not resume by itself and it is up to the application to call XML_ResumeParser on it at the appropriate moment.

New in Expat 1.95.8.

void XMLCALL
XML_GetParsingStatus(XML_Parser p,
                     XML_ParsingStatus *status);
enum XML_Parsing {
  XML_INITIALIZED,
  XML_PARSING,
  XML_FINISHED,
  XML_SUSPENDED
};

typedef struct {
  enum XML_Parsing parsing;
  XML_Bool finalBuffer;
} XML_ParsingStatus;

Returns status of parser with respect to being initialized, parsing, finished, or suspended, and whether the final buffer is being processed. The status parameter must not be NULL.

New in Expat 1.95.8.

Handler Setting

Although handlers are typically set prior to parsing and left alone, an application may choose to set or change the handler for a parsing event while the parse is in progress. For instance, your application may choose to ignore all text not descended from a para element. One way it could do this is to set the character handler when a para start tag is seen, and unset it for the corresponding end tag.

A handler may be unset by providing a NULL pointer to the appropriate handler setter. None of the handler setting functions have a return value.

Your handlers will be receiving strings in arrays of type XML_Char. This type is defined in expat.h as char * and contains bytes encoding UTF-8. Note that you'll receive them in this form independent of the original encoding of the document.

void XMLCALL
XML_SetStartElementHandler(XML_Parser p,
                           XML_StartElementHandler start);
typedef void
(XMLCALL *XML_StartElementHandler)(void *userData,
                                   const XML_Char *name,
                                   const XML_Char **atts);

Set handler for start (and empty) tags. Attributes are passed to the start handler as a pointer to a vector of char pointers. Each attribute seen in a start (or empty) tag occupies 2 consecutive places in this vector: the attribute name followed by the attribute value. These pairs are terminated by a null pointer.

Note that an empty tag generates a call to both start and end handlers (in that order).

void XMLCALL
XML_SetEndElementHandler(XML_Parser p,
                         XML_EndElementHandler);
typedef void
(XMLCALL *XML_EndElementHandler)(void *userData,
                                 const XML_Char *name);

Set handler for end (and empty) tags. As noted above, an empty tag generates a call to both start and end handlers.

void XMLCALL
XML_SetElementHandler(XML_Parser p,
                      XML_StartElementHandler start,
                      XML_EndElementHandler end);

Set handlers for start and end tags with one call.

void XMLCALL
XML_SetCharacterDataHandler(XML_Parser p,
                            XML_CharacterDataHandler charhndl)
typedef void
(XMLCALL *XML_CharacterDataHandler)(void *userData,
                                    const XML_Char *s,
                                    int len);

Set a text handler. The string your handler receives is NOT nul-terminated. You have to use the length argument to deal with the end of the string. A single block of contiguous text free of markup may still result in a sequence of calls to this handler. In other words, if you're searching for a pattern in the text, it may be split across calls to this handler.

void XMLCALL
XML_SetProcessingInstructionHandler(XML_Parser p,
                                    XML_ProcessingInstructionHandler proc)
typedef void
(XMLCALL *XML_ProcessingInstructionHandler)(void *userData,
                                            const XML_Char *target,
                                            const XML_Char *data);

Set a handler for processing instructions. The target is the first word in the processing instruction. The data is the rest of the characters in it after skipping all whitespace after the initial word.

void XMLCALL
XML_SetCommentHandler(XML_Parser p,
                      XML_CommentHandler cmnt)
typedef void
(XMLCALL *XML_CommentHandler)(void *userData,
                              const XML_Char *data);

Set a handler for comments. The data is all text inside the comment delimiters.

void XMLCALL
XML_SetStartCdataSectionHandler(XML_Parser p,
                                XML_StartCdataSectionHandler start);
typedef void
(XMLCALL *XML_StartCdataSectionHandler)(void *userData);

Set a handler that gets called at the beginning of a CDATA section.

void XMLCALL
XML_SetEndCdataSectionHandler(XML_Parser p,
                              XML_EndCdataSectionHandler end);
typedef void
(XMLCALL *XML_EndCdataSectionHandler)(void *userData);

Set a handler that gets called at the end of a CDATA section.

void XMLCALL
XML_SetCdataSectionHandler(XML_Parser p,
                           XML_StartCdataSectionHandler start,
                           XML_EndCdataSectionHandler end)

Sets both CDATA section handlers with one call.

void XMLCALL
XML_SetDefaultHandler(XML_Parser p,
                      XML_DefaultHandler hndl)
typedef void
(XMLCALL *XML_DefaultHandler)(void *userData,
                              const XML_Char *s,
                              int len);

Sets a handler for any characters in the document which wouldn't otherwise be handled. This includes both data for which no handlers can be set (like some kinds of DTD declarations) and data which could be reported but which currently has no handler set. The characters are passed exactly as they were present in the XML document except that they will be encoded in UTF-8 or UTF-16. Line boundaries are not normalized. Note that a byte order mark character is not passed to the default handler. There are no guarantees about how characters are divided between calls to the default handler: for example, a comment might be split between multiple calls. Setting the handler with this call has the side effect of turning off expansion of references to internally defined general entities. Instead these references are passed to the default handler.

See also XML_DefaultCurrent.

void XMLCALL
XML_SetDefaultHandlerExpand(XML_Parser p,
                            XML_DefaultHandler hndl)
typedef void
(XMLCALL *XML_DefaultHandler)(void *userData,
                              const XML_Char *s,
                              int len);

This sets a default handler, but doesn't inhibit the expansion of internal entity references. The entity reference will not be passed to the default handler.

See also XML_DefaultCurrent.

void XMLCALL
XML_SetExternalEntityRefHandler(XML_Parser p,
                                XML_ExternalEntityRefHandler hndl)
typedef int
(XMLCALL *XML_ExternalEntityRefHandler)(XML_Parser p,
                                        const XML_Char *context,
                                        const XML_Char *base,
                                        const XML_Char *systemId,
                                        const XML_Char *publicId);

Set an external entity reference handler. This handler is also called for processing an external DTD subset if parameter entity parsing is in effect. (See XML_SetParamEntityParsing.)

The context parameter specifies the parsing context in the format expected by the context argument to XML_ExternalEntityParserCreate. code is valid only until the handler returns, so if the referenced entity is to be parsed later, it must be copied. context is NULL only when the entity is a parameter entity, which is how one can differentiate between general and parameter entities.

The base parameter is the base to use for relative system identifiers. It is set by XML_SetBase and may be NULL. The publicId parameter is the public id given in the entity declaration and may be NULL. systemId is the system identifier specified in the entity declaration and is never NULL.

There are a couple of ways in which this handler differs from others. First, this handler returns a status indicator (an integer). XML_STATUS_OK should be returned for successful handling of the external entity reference. Returning XML_STATUS_ERROR indicates failure, and causes the calling parser to return an XML_ERROR_EXTERNAL_ENTITY_HANDLING error.

Second, instead of having the user data as its first argument, it receives the parser that encountered the entity reference. This, along with the context parameter, may be used as arguments to a call to XML_ExternalEntityParserCreate. Using the returned parser, the body of the external entity can be recursively parsed.

Since this handler may be called recursively, it should not be saving information into global or static variables.

void XMLCALL
XML_SetExternalEntityRefHandlerArg(XML_Parser p,
                                   void *arg)

Set the argument passed to the ExternalEntityRefHandler. If arg is not NULL, it is the new value passed to the handler set using XML_SetExternalEntityRefHandler; if arg is NULL, the argument passed to the handler function will be the parser object itself.

Note: The type of arg and the type of the first argument to the ExternalEntityRefHandler do not match. This function takes a void * to be passed to the handler, while the handler accepts an XML_Parser. This is a historical accident, but will not be corrected before Expat 2.0 (at the earliest) to avoid causing compiler warnings for code that's known to work with this API. It is the responsibility of the application code to know the actual type of the argument passed to the handler and to manage it properly.

void XMLCALL
XML_SetSkippedEntityHandler(XML_Parser p,
                            XML_SkippedEntityHandler handler)
typedef void
(XMLCALL *XML_SkippedEntityHandler)(void *userData,
                                    const XML_Char *entityName,
                                    int is_parameter_entity);

Set a skipped entity handler. This is called in two situations:

  1. An entity reference is encountered for which no declaration has been read and this is not an error.
  2. An internal entity reference is read, but not expanded, because XML_SetDefaultHandler has been called.

The is_parameter_entity argument will be non-zero for a parameter entity and zero for a general entity.

Note: skipped parameter entities in declarations and skipped general entities in attribute values cannot be reported, because the event would be out of sync with the reporting of the declarations or attribute values

void XMLCALL
XML_SetUnknownEncodingHandler(XML_Parser p,
                              XML_UnknownEncodingHandler enchandler,
			      void *encodingHandlerData)
typedef int
(XMLCALL *XML_UnknownEncodingHandler)(void *encodingHandlerData,
                                      const XML_Char *name,
                                      XML_Encoding *info);

typedef struct {
  int map[256];
  void *data;
  int (XMLCALL *convert)(void *data, const char *s);
  void (XMLCALL *release)(void *data);
} XML_Encoding;

Set a handler to deal with encodings other than the built in set. This should be done before XML_Parse or XML_ParseBuffer have been called on the given parser.

If the handler knows how to deal with an encoding with the given name, it should fill in the info data structure and return XML_STATUS_OK. Otherwise it should return XML_STATUS_ERROR. The handler will be called at most once per parsed (external) entity. The optional application data pointer encodingHandlerData will be passed back to the handler.

The map array contains information for every possible possible leading byte in a byte sequence. If the corresponding value is >= 0, then it's a single byte sequence and the byte encodes that Unicode value. If the value is -1, then that byte is invalid as the initial byte in a sequence. If the value is -n, where n is an integer > 1, then n is the number of bytes in the sequence and the actual conversion is accomplished by a call to the function pointed at by convert. This function may return -1 if the sequence itself is invalid. The convert pointer may be null if there are only single byte codes. The data parameter passed to the convert function is the data pointer from XML_Encoding. The string s is NOT nul-terminated and points at the sequence of bytes to be converted.

The function pointed at by release is called by the parser when it is finished with the encoding. It may be NULL.

void XMLCALL
XML_SetStartNamespaceDeclHandler(XML_Parser p,
			         XML_StartNamespaceDeclHandler start);
typedef void
(XMLCALL *XML_StartNamespaceDeclHandler)(void *userData,
                                         const XML_Char *prefix,
                                         const XML_Char *uri);

Set a handler to be called when a namespace is declared. Namespace declarations occur inside start tags. But the namespace declaration start handler is called before the start tag handler for each namespace declared in that start tag.

void XMLCALL
XML_SetEndNamespaceDeclHandler(XML_Parser p,
			       XML_EndNamespaceDeclHandler end);
typedef void
(XMLCALL *XML_EndNamespaceDeclHandler)(void *userData,
                                       const XML_Char *prefix);

Set a handler to be called when leaving the scope of a namespace declaration. This will be called, for each namespace declaration, after the handler for the end tag of the element in which the namespace was declared.

void XMLCALL
XML_SetNamespaceDeclHandler(XML_Parser p,
                            XML_StartNamespaceDeclHandler start,
                            XML_EndNamespaceDeclHandler end)

Sets both namespace declaration handlers with a single call.

void XMLCALL
XML_SetXmlDeclHandler(XML_Parser p,
		      XML_XmlDeclHandler xmldecl);
typedef void
(XMLCALL *XML_XmlDeclHandler)(void            *userData,
                              const XML_Char  *version,
                              const XML_Char  *encoding,
                              int             standalone);

Sets a handler that is called for XML declarations and also for text declarations discovered in external entities. The way to distinguish is that the version parameter will be NULL for text declarations. The encoding parameter may be NULL for an XML declaration. The standalone argument will contain -1, 0, or 1 indicating respectively that there was no standalone parameter in the declaration, that it was given as no, or that it was given as yes.

void XMLCALL
XML_SetStartDoctypeDeclHandler(XML_Parser p,
			       XML_StartDoctypeDeclHandler start);
typedef void
(XMLCALL *XML_StartDoctypeDeclHandler)(void           *userData,
                                       const XML_Char *doctypeName,
                                       const XML_Char *sysid,
                                       const XML_Char *pubid,
                                       int            has_internal_subset);

Set a handler that is called at the start of a DOCTYPE declaration, before any external or internal subset is parsed. Both sysid and pubid may be NULL. The has_internal_subset will be non-zero if the DOCTYPE declaration has an internal subset.

void XMLCALL
XML_SetEndDoctypeDeclHandler(XML_Parser p,
			     XML_EndDoctypeDeclHandler end);
typedef void
(XMLCALL *XML_EndDoctypeDeclHandler)(void *userData);

Set a handler that is called at the end of a DOCTYPE declaration, after parsing any external subset.

void XMLCALL
XML_SetDoctypeDeclHandler(XML_Parser p,
			  XML_StartDoctypeDeclHandler start,
			  XML_EndDoctypeDeclHandler end);

Set both doctype handlers with one call.

void XMLCALL
XML_SetElementDeclHandler(XML_Parser p,
			  XML_ElementDeclHandler eldecl);
typedef void
(XMLCALL *XML_ElementDeclHandler)(void *userData,
                                  const XML_Char *name,
                                  XML_Content *model);
enum XML_Content_Type {
  XML_CTYPE_EMPTY = 1,
  XML_CTYPE_ANY,
  XML_CTYPE_MIXED,
  XML_CTYPE_NAME,
  XML_CTYPE_CHOICE,
  XML_CTYPE_SEQ
};

enum XML_Content_Quant {
  XML_CQUANT_NONE,
  XML_CQUANT_OPT,
  XML_CQUANT_REP,
  XML_CQUANT_PLUS
};

typedef struct XML_cp XML_Content;

struct XML_cp {
  enum XML_Content_Type		type;
  enum XML_Content_Quant	quant;
  const XML_Char *		name;
  unsigned int			numchildren;
  XML_Content *			children;
};

Sets a handler for element declarations in a DTD. The handler gets called with the name of the element in the declaration and a pointer to a structure that contains the element model. It is the application's responsibility to free this data structure using XML_FreeContentModel.

The model argument is the root of a tree of XML_Content nodes. If type equals XML_CTYPE_EMPTY or XML_CTYPE_ANY, then quant will be XML_CQUANT_NONE, and the other fields will be zero or NULL. If type is XML_CTYPE_MIXED, then quant will be XML_CQUANT_NONE or XML_CQUANT_REP and numchildren will contain the number of elements that are allowed to be mixed in and children points to an array of XML_Content structures that will all have type XML_CTYPE_NAME with no quantification. Only the root node can be type XML_CTYPE_EMPTY, XML_CTYPE_ANY, or XML_CTYPE_MIXED.

For type XML_CTYPE_NAME, the name field points to the name and the numchildren and children fields will be zero and NULL. The quant field will indicate any quantifiers placed on the name.

Types XML_CTYPE_CHOICE and XML_CTYPE_SEQ indicate a choice or sequence respectively. The numchildren field indicates how many nodes in the choice or sequence and children points to the nodes.

void XMLCALL
XML_SetAttlistDeclHandler(XML_Parser p,
                          XML_AttlistDeclHandler attdecl);
typedef void
(XMLCALL *XML_AttlistDeclHandler)(void           *userData,
                                  const XML_Char *elname,
                                  const XML_Char *attname,
                                  const XML_Char *att_type,
                                  const XML_Char *dflt,
                                  int            isrequired);

Set a handler for attlist declarations in the DTD. This handler is called for each attribute. So a single attlist declaration with multiple attributes declared will generate multiple calls to this handler. The elname parameter returns the name of the element for which the attribute is being declared. The attribute name is in the attname parameter. The attribute type is in the att_type parameter. It is the string representing the type in the declaration with whitespace removed.

The dflt parameter holds the default value. It will be NULL in the case of "#IMPLIED" or "#REQUIRED" attributes. You can distinguish these two cases by checking the isrequired parameter, which will be true in the case of "#REQUIRED" attributes. Attributes which are "#FIXED" will have also have a true isrequired, but they will have the non-NULL fixed value in the dflt parameter.

void XMLCALL
XML_SetEntityDeclHandler(XML_Parser p,
			 XML_EntityDeclHandler handler);
typedef void
(XMLCALL *XML_EntityDeclHandler)(void           *userData,
                                 const XML_Char *entityName,
                                 int            is_parameter_entity,
                                 const XML_Char *value,
                                 int            value_length, 
                                 const XML_Char *base,
                                 const XML_Char *systemId,
                                 const XML_Char *publicId,
                                 const XML_Char *notationName);

Sets a handler that will be called for all entity declarations. The is_parameter_entity argument will be non-zero in the case of parameter entities and zero otherwise.

For internal entities (<!ENTITY foo "bar">), value will be non-NULL and systemId, publicId, and notationName will all be NULL. The value string is not NULL terminated; the length is provided in the value_length parameter. Do not use value_length to test for internal entities, since it is legal to have zero-length values. Instead check for whether or not value is NULL.

The notationName argument will have a non-NULL value only for unparsed entity declarations.

void XMLCALL
XML_SetUnparsedEntityDeclHandler(XML_Parser p,
                                 XML_UnparsedEntityDeclHandler h)
typedef void
(XMLCALL *XML_UnparsedEntityDeclHandler)(void *userData,
                                         const XML_Char *entityName, 
                                         const XML_Char *base,
                                         const XML_Char *systemId,
                                         const XML_Char *publicId,
                                         const XML_Char *notationName);

Set a handler that receives declarations of unparsed entities. These are entity declarations that have a notation (NDATA) field:

<!ENTITY logo SYSTEM "images/logo.gif" NDATA gif>

This handler is obsolete and is provided for backwards compatibility. Use instead XML_SetEntityDeclHandler.

void XMLCALL
XML_SetNotationDeclHandler(XML_Parser p,
                           XML_NotationDeclHandler h)
typedef void
(XMLCALL *XML_NotationDeclHandler)(void *userData, 
                                   const XML_Char *notationName,
                                   const XML_Char *base,
                                   const XML_Char *systemId,
                                   const XML_Char *publicId);

Set a handler that receives notation declarations.

void XMLCALL
XML_SetNotStandaloneHandler(XML_Parser p,
                            XML_NotStandaloneHandler h)
typedef int 
(XMLCALL *XML_NotStandaloneHandler)(void *userData);

Set a handler that is called if the document is not "standalone". This happens when there is an external subset or a reference to a parameter entity, but does not have standalone set to "yes" in an XML declaration. If this handler returns XML_STATUS_ERROR, then the parser will throw an XML_ERROR_NOT_STANDALONE error.

Parse position and error reporting functions

These are the functions you'll want to call when the parse functions return XML_STATUS_ERROR (a parse error has occurred), although the position reporting functions are useful outside of errors. The position reported is the byte position (in the original document or entity encoding) of the first of the sequence of characters that generated the current event (or the error that caused the parse functions to return XML_STATUS_ERROR.) The exceptions are callbacks trigged by declarations in the document prologue, in which case they exact position reported is somewhere in the relevant markup, but not necessarily as meaningful as for other events.

The position reporting functions are accurate only outside of the DTD. In other words, they usually return bogus information when called from within a DTD declaration handler.

enum XML_Error XMLCALL
XML_GetErrorCode(XML_Parser p);
Return what type of error has occurred.
const XML_LChar * XMLCALL
XML_ErrorString(enum XML_Error code);
Return a string describing the error corresponding to code. The code should be one of the enums that can be returned from XML_GetErrorCode.
long XMLCALL
XML_GetCurrentByteIndex(XML_Parser p);
Return the byte offset of the position. This always corresponds to the values returned by XML_GetCurrentLineNumber and XML_GetCurrentColumnNumber.
int XMLCALL
XML_GetCurrentLineNumber(XML_Parser p);
Return the line number of the position. The first line is reported as 1.
int XMLCALL
XML_GetCurrentColumnNumber(XML_Parser p);
Return the offset, from the beginning of the current line, of the position.
int XMLCALL
XML_GetCurrentByteCount(XML_Parser p);
Return the number of bytes in the current event. Returns 0 if the event is inside a reference to an internal entity and for the end-tag event for empty element tags (the later can be used to distinguish empty-element tags from empty elements using separate start and end tags).
const char * XMLCALL
XML_GetInputContext(XML_Parser p,
                    int *offset,
                    int *size);

Returns the parser's input buffer, sets the integer pointed at by offset to the offset within this buffer of the current parse position, and set the integer pointed at by size to the size of the returned buffer.

This should only be called from within a handler during an active parse and the returned buffer should only be referred to from within the handler that made the call. This input buffer contains the untranslated bytes of the input.

Only a limited amount of context is kept, so if the event triggering a call spans over a very large amount of input, the actual parse position may be before the beginning of the buffer.

If XML_CONTEXT_BYTES is not defined, this will always return NULL.

Miscellaneous functions

The functions in this section either obtain state information from the parser or can be used to dynamicly set parser options.

void XMLCALL
XML_SetUserData(XML_Parser p,
                void *userData);
This sets the user data pointer that gets passed to handlers. It overwrites any previous value for this pointer. Note that the application is responsible for freeing the memory associated with userData when it is finished with the parser. So if you call this when there's already a pointer there, and you haven't freed the memory associated with it, then you've probably just leaked memory.
void * XMLCALL
XML_GetUserData(XML_Parser p);
This returns the user data pointer that gets passed to handlers. It is actually implemented as a macro.
void XMLCALL
XML_UseParserAsHandlerArg(XML_Parser p);
After this is called, handlers receive the parser in their userData arguments. The user data can still be obtained using the XML_GetUserData function.
enum XML_Status XMLCALL
XML_SetBase(XML_Parser p,
            const XML_Char *base);
Set the base to be used for resolving relative URIs in system identifiers. The return value is XML_STATUS_ERROR if there's no memory to store base, otherwise it's XML_STATUS_OK.
const XML_Char * XMLCALL
XML_GetBase(XML_Parser p);
Return the base for resolving relative URIs.
int XMLCALL
XML_GetSpecifiedAttributeCount(XML_Parser p);
When attributes are reported to the start handler in the atts vector, attributes that were explicitly set in the element occur before any attributes that receive their value from default information in an ATTLIST declaration. This function returns the number of attributes that were explicitly set times two, thus giving the offset in the atts array passed to the start tag handler of the first attribute set due to defaults. It supplies information for the last call to a start handler. If called inside a start handler, then that means the current call.
int XMLCALL
XML_GetIdAttributeIndex(XML_Parser p);
Returns the index of the ID attribute passed in the atts array in the last call to XML_StartElementHandler, or -1 if there is no ID attribute. If called inside a start handler, then that means the current call.
enum XML_Status XMLCALL
XML_SetEncoding(XML_Parser p,
                const XML_Char *encoding);
Set the encoding to be used by the parser. It is equivalent to passing a non-null encoding argument to the parser creation functions. It must not be called after XML_Parse or XML_ParseBuffer have been called on the given parser. Returns XML_STATUS_OK on success or XML_STATUS_ERROR on error.
int XMLCALL
XML_SetParamEntityParsing(XML_Parser p,
                          enum XML_ParamEntityParsing code);
This enables parsing of parameter entities, including the external parameter entity that is the external DTD subset, according to code. The choices for code are:
  • XML_PARAM_ENTITY_PARSING_NEVER
  • XML_PARAM_ENTITY_PARSING_UNLESS_STANDALONE
  • XML_PARAM_ENTITY_PARSING_ALWAYS
enum XML_Error XMLCALL
XML_UseForeignDTD(XML_Parser parser, XML_Bool useDTD);

This function allows an application to provide an external subset for the document type declaration for documents which do not specify an external subset of their own. For documents which specify an external subset in their DOCTYPE declaration, the application-provided subset will be ignored. If the document does not contain a DOCTYPE declaration at all and useDTD is true, the application-provided subset will be parsed, but the startDoctypeDeclHandler and endDoctypeDeclHandler functions, if set, will not be called. The setting of parameter entity parsing, controlled using XML_SetParamEntityParsing, will be honored.

The application-provided external subset is read by calling the external entity reference handler set via XML_SetExternalEntityRefHandler with both publicId and systemId set to NULL.

If this function is called after parsing has begun, it returns XML_ERROR_CANT_CHANGE_FEATURE_ONCE_PARSING and ignores useDTD. If called when Expat has been compiled without DTD support, it returns XML_ERROR_FEATURE_REQUIRES_XML_DTD. Otherwise, it returns XML_ERROR_NONE.

Note: For the purpose of checking WFC: Entity Declared, passing useDTD == XML_TRUE will make the parser behave as if the document had a DTD with an external subset. This holds true even if the external entity reference handler returns without action.

void XMLCALL
XML_SetReturnNSTriplet(XML_Parser parser,
                       int        do_nst);

This function only has an effect when using a parser created with XML_ParserCreateNS, i.e. when namespace processing is in effect. The do_nst sets whether or not prefixes are returned with names qualified with a namespace prefix. If this function is called with do_nst non-zero, then afterwards namespace qualified names (that is qualified with a prefix as opposed to belonging to a default namespace) are returned as a triplet with the three parts separated by the namespace separator specified when the parser was created. The order of returned parts is URI, local name, and prefix.

If do_nst is zero, then namespaces are reported in the default manner, URI then local_name separated by the namespace separator.

void XMLCALL
XML_DefaultCurrent(XML_Parser parser);
This can be called within a handler for a start element, end element, processing instruction or character data. It causes the corresponding markup to be passed to the default handler set by XML_SetDefaultHandler or XML_SetDefaultHandlerExpand. It does nothing if there is not a default handler.
XML_LChar * XMLCALL
XML_ExpatVersion();
Return the library version as a string (e.g. "expat_1.95.1").
struct XML_Expat_Version XMLCALL
XML_ExpatVersionInfo();
typedef struct {
  int major;
  int minor;
  int micro;
} XML_Expat_Version;
Return the library version information as a structure. Some macros are also defined that support compile-time tests of the library version:
  • XML_MAJOR_VERSION
  • XML_MINOR_VERSION
  • XML_MICRO_VERSION
Testing these constants is currently the best way to determine if particular parts of the Expat API are available.
const XML_Feature * XMLCALL
XML_GetFeatureList();
enum XML_FeatureEnum {
  XML_FEATURE_END = 0,
  XML_FEATURE_UNICODE,
  XML_FEATURE_UNICODE_WCHAR_T,
  XML_FEATURE_DTD,
  XML_FEATURE_CONTEXT_BYTES,
  XML_FEATURE_MIN_SIZE,
  XML_FEATURE_SIZEOF_XML_CHAR,
  XML_FEATURE_SIZEOF_XML_LCHAR
};

typedef struct {
  enum XML_FeatureEnum  feature;
  XML_LChar            *name;
  long int              value;
} XML_Feature;

Returns a list of "feature" records, providing details on how Expat was configured at compile time. Most applications should not need to worry about this, but this information is otherwise not available from Expat. This function allows code that does need to check these features to do so at runtime.

The return value is an array of XML_Feature, terminated by a record with a feature of XML_FEATURE_END and name of NULL, identifying the feature-test macros Expat was compiled with. Since an application that requires this kind of information needs to determine the type of character the name points to, records for the XML_FEATURE_SIZEOF_XML_CHAR and XML_FEATURE_SIZEOF_XML_LCHAR will be located at the beginning of the list, followed by XML_FEATURE_UNICODE and XML_FEATURE_UNICODE_WCHAR_T, if they are present at all.

Some features have an associated value. If there isn't an associated value, the value field is set to 0. At this time, the following features have been defined to have values:

XML_FEATURE_SIZEOF_XML_CHAR
The number of bytes occupied by one XML_Char character.
XML_FEATURE_SIZEOF_XML_LCHAR
The number of bytes occupied by one XML_LChar character.
XML_FEATURE_CONTEXT_BYTES
The maximum number of characters of context which can be reported by XML_GetInputContext.
void XMLCALL
XML_FreeContentModel(XML_Parser parser, XML_Content *model);
Function to deallocate the model argument passed to the XML_ElementDeclHandler callback set using XML_ElementDeclHandler. This function should not be used for any other purpose.

The following functions allow external code to share the memory allocator an XML_Parser has been configured to use. This is especially useful for third-party libraries that interact with a parser object created by application code, or heavily layered applications. This can be essential when using dynamically loaded libraries which use different C standard libraries (this can happen on Windows, at least).

void * XMLCALL
XML_MemMalloc(XML_Parser parser, size_t size);
Allocate size bytes of memory using the allocator the parser object has been configured to use. Returns a pointer to the memory or NULL on failure. Memory allocated in this way must be freed using XML_MemFree.
void * XMLCALL
XML_MemRealloc(XML_Parser parser, void *ptr, size_t size);
Allocate size bytes of memory using the allocator the parser object has been configured to use. ptr must point to a block of memory allocated by XML_MemMalloc or XML_MemRealloc, or be NULL. This function tries to expand the block pointed to by ptr if possible. Returns a pointer to the memory or NULL on failure. On success, the original block has either been expanded or freed. On failure, the original block has not been freed; the caller is responsible for freeing the original block. Memory allocated in this way must be freed using XML_MemFree.
void XMLCALL
XML_MemFree(XML_Parser parser, void *ptr);
Free a block of memory pointed to by ptr. The block must have been allocated by XML_MemMalloc or XML_MemRealloc, or be NULL.

Valid XHTML 1.0!

tla-1.3.5+dfsg/src/expat/doc/xmlwf.sgml0000644000175000017500000003307410457621771016454 0ustar useruser manpage.1'. You may view the manual page with: `docbook-to-man manpage.sgml | nroff -man | less'. A typical entry in a Makefile or Makefile.am is: manpage.1: manpage.sgml docbook-to-man $< > $@ --> Scott"> Bronson"> December 5, 2001"> 1"> bronson@rinspin.com"> XMLWF"> Debian GNU/Linux"> GNU"> ]>
&dhemail;
&dhfirstname; &dhsurname; 2001 &dhusername; &dhdate;
&dhucpackage; &dhsection; &dhpackage; Determines if an XML document is well-formed &dhpackage; file ... DESCRIPTION &dhpackage; uses the Expat library to determine if an XML document is well-formed. It is non-validating. If you do not specify any files on the command-line, and you have a recent version of &dhpackage;, the input file will be read from standard input. WELL-FORMED DOCUMENTS A well-formed document must adhere to the following rules: The file begins with an XML declaration. For instance, <?xml version="1.0" standalone="yes"?>. NOTE: &dhpackage; does not currently check for a valid XML declaration. Every start tag is either empty (<tag/>) or has a corresponding end tag. There is exactly one root element. This element must contain all other elements in the document. Only comments, white space, and processing instructions may come after the close of the root element. All elements nest properly. All attribute values are enclosed in quotes (either single or double). If the document has a DTD, and it strictly complies with that DTD, then the document is also considered valid. &dhpackage; is a non-validating parser -- it does not check the DTD. However, it does support external entities (see the option). OPTIONS When an option includes an argument, you may specify the argument either separately (" output") or concatenated with the option ("output"). &dhpackage; supports both. If the input file is well-formed and &dhpackage; doesn't encounter any errors, the input file is simply copied to the output directory unchanged. This implies no namespaces (turns off ) and requires to specify an output file. Specifies a directory to contain transformed representations of the input files. By default, outputs a canonical representation (described below). You can select different output formats using and . The output filenames will be exactly the same as the input filenames or "STDIN" if the input is coming from standard input. Therefore, you must be careful that the output file does not go into the same directory as the input file. Otherwise, &dhpackage; will delete the input file before it generates the output file (just like running cat < file > file in most shells). Two structurally equivalent XML documents have a byte-for-byte identical canonical XML representation. Note that ignorable white space is considered significant and is treated equivalently to data. More on canonical XML can be found at http://www.jclark.com/xml/canonxml.html . Specifies the character encoding for the document, overriding any document encoding declaration. &dhpackage; supports four built-in encodings: US-ASCII, UTF-8, UTF-16, and ISO-8859-1. Also see the option. Outputs some strange sort of XML file that completely describes the the input file, including character postitions. Requires to specify an output file. Turns on namespace processing. (describe namespaces) disables namespaces. Tells xmlwf to process external DTDs and parameter entities. Normally &dhpackage; never parses parameter entities. tells it to always parse them. implies . Normally &dhpackage; memory-maps the XML file before parsing; this can result in faster parsing on many platforms. turns off memory-mapping and uses normal file IO calls instead. Of course, memory-mapping is automatically turned off when reading from standard input. Use of memory-mapping can cause some platforms to report substantially higher memory usage for &dhpackage;, but this appears to be a matter of the operating system reporting memory in a strange way; there is not a leak in &dhpackage;. Prints an error if the document is not standalone. A document is standalone if it has no external subset and no references to parameter entities. Turns on timings. This tells Expat to parse the entire file, but not perform any processing. This gives a fairly accurate idea of the raw speed of Expat itself without client overhead. turns off most of the output options (, , , ...). Prints the version of the Expat library being used, including some information on the compile-time configuration of the library, and then exits. Enables support for Windows code pages. Normally, &dhpackage; will throw an error if it runs across an encoding that it is not equipped to handle itself. With , &dhpackage; will try to use a Windows code page. See also . Turns on parsing external entities. Non-validating parsers are not required to resolve external entities, or even expand entities at all. Expat always expands internal entities (?), but external entity parsing must be enabled explicitly. External entities are simply entities that obtain their data from outside the XML file currently being parsed. This is an example of an internal entity: <!ENTITY vers '1.0.2'> And here are some examples of external entities: <!ENTITY header SYSTEM "header-&vers;.xml"> (parsed) <!ENTITY logo SYSTEM "logo.png" PNG> (unparsed) (Two hyphens.) Terminates the list of options. This is only needed if a filename starts with a hyphen. For example: &dhpackage; -- -myfile.xml will run &dhpackage; on the file -myfile.xml. Older versions of &dhpackage; do not support reading from standard input. OUTPUT If an input file is not well-formed, &dhpackage; prints a single line describing the problem to standard output. If a file is well formed, &dhpackage; outputs nothing. Note that the result code is not set. BUGS According to the W3C standard, an XML file without a declaration at the beginning is not considered well-formed. However, &dhpackage; allows this to pass. &dhpackage; returns a 0 - noerr result, even if the file is not well-formed. There is no good way for a program to use &dhpackage; to quickly check a file -- it must parse &dhpackage;'s standard output. The errors should go to standard error, not standard output. There should be a way to get to send its output to standard output rather than forcing the user to send it to a file. I have no idea why anyone would want to use the , , and options. If someone could explain it to me, I'd like to add this information to this manpage. ALTERNATIVES Here are some XML validators on the web: http://www.hcrc.ed.ac.uk/~richard/xml-check.html http://www.stg.brown.edu/service/xmlvalid/ http://www.scripting.com/frontier5/xml/code/xmlValidator.html http://www.xml.com/pub/a/tools/ruwf/check.html SEE ALSO The Expat home page: http://www.libexpat.org/ The W3 XML specification: http://www.w3.org/TR/REC-xml AUTHOR This manual page was written by &dhusername; &dhemail; for the &debian; system (but may be used by others). Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1.
tla-1.3.5+dfsg/src/expat/doc/style.css0000644000175000017500000000247410457621771016305 0ustar useruserbody { background-color: white; border: 0px; margin: 0px; padding: 0px; } .corner { width: 200px; height: 80px; text-align: center; } .banner { background-color: rgb(110,139,61); color: rgb(255,236,176); padding-left: 2em; } .banner h1 { font-size: 200%; } .content { padding: 0em 2em 1em 2em; } .releaseno { background-color: rgb(110,139,61); color: rgb(255,236,176); padding-bottom: 0.3em; padding-top: 0.5em; text-align: center; font-weight: bold; } .noborder { border-width: 0px; } .eg { padding-left: 1em; padding-top: .5em; padding-bottom: .5em; border: solid thin; margin: 1em 0; background-color: tan; margin-left: 2em; margin-right: 10%; } .pseudocode { padding-left: 1em; padding-top: .5em; padding-bottom: .5em; border: solid thin; margin: 1em 0; background-color: rgb(250,220,180); margin-left: 2em; margin-right: 10%; } .handler { width: 100%; border-top-width: thin; margin-bottom: 1em; } .handler p { margin-left: 2em; } .setter { font-weight: bold; } .signature { color: navy; } .fcndec { width: 100%; border-top-width: thin; font-weight: bold; } .fcndef { margin-left: 2em; margin-bottom: 2em; } dd { margin-bottom: 2em; } .cpp-symbols dt { font-family: monospace; } .cpp-symbols dd { margin-bottom: 1em; } tla-1.3.5+dfsg/src/expat/doc/expat.png0000644000175000017500000000326510457621771016261 0ustar useruser‰PNG  IHDR¾Fý×¹¾gAMA± üabKGDÿÿÿ ½§“ pHYs  ÒÝ~ütIMEÒ 2 é_52IDATxœíë•ë( Ç“=[FHãôÁô§Ž±û }ŒÓéÃû»$È$»ú}šã€yèß{œçù (íüõê (ŸŠJG¢ÒQ„¨t!*EˆJG¢ÒQ„¨t!*EˆJG¢ÒQ„¨t!*EˆJG¢ÒQ„¨t!*Ïæv»Çãñx¹\v.Z¥óÙÜï÷ð‡µvç¢U:ÌãñðÞ‡¿U:¢†Ün7>×ù|)Ïçóóùܧª;0 Cø£ëºÓé´wñóGY‚÷>—¥ïû˜Ì9·gm›†¡ëº¦,±]Ã0lT+®ôý‹\Hj¾ïÉÄÓ4Ó¼œaŒ1­#Ù9W3r¶ãó¤3Ïsìè¢ãéº.üjŒÙ¿žEð0¨Ïƒ›V_µë®×+~8Ž#~½ÎïïïæÕj:ÅV^¸¶úÃ> ]Ý£Fw¥À¨è%¡@ Øê•_>[Í;LXÓ4u]g­]ýµX:0š‰ÚZ½èK‡™­Œ1}ßï § ¥£?Æ~Þ{çœ8çjZN:ê1JcLîUÓ4Ykû¾†!” ŸÇv]7 C±>¡ ÐcB[ššPlu€q¨p MÓTùBëKÇ{EÃHÇ{OÎ;Ñf¼ÁÈ…zp<±t¦ï Ïfãr"pΑa;Ì›4$W „Ñ?[ánÜH@kJÇ{7Q 9q “î ¶ÁšãG-Y\ÊüjÛ/<éûÞ9çœÃ²Æ6HüSð^¸J‰zJ'AH܇‡}'ÓÖ‘Nhpûs“n©Àže~Âxïs#¾¸dÅö3Æ$ý›4 ¯ðC‚¤™¤7…:^(š4¤EB× ƒ–J‡Å*&öæ Æ;r‡ðP±î ¥“¤ÁÁxRÕà¢jÚx âA¬«]LÜ:¤›K‡tŒxà’y3ãiˆaý!K‡Ôh’&qfL)¸™Xdéð³I.°Ö. ƒš¥êAΦ•'Dx$ °Qùê$d¬ƒ“‰A[H® ZÏãrÇÑ Ò™¦i•²qö$A¥Q!¤[ækU)PlÝ›‘AØré@9뫘xºHø÷x2ô³Ö~}}Õ¿„¼ó÷ÔÇ£þ…!}Îñ4?45„©Ìý~ÏE` Y~øp:®×ëõzÇqÇèÆ‚Oš¦©&„ÿC½Ê`.~áÃÐP3?Йm•Êݦ+j¼Nè÷˜2îç36y%³UŽdiÚyJvPS]±ÁÄÆ[kI?\_2/¼‡n]é,Ÿ­ äâk+鬲ÒÃcq‰tâ<¼ 9Mä¦ðåÒÁM"Ž\FæåLc×:• wÊ’rŽ Y¿¹`¹~¥‡+ÝZ‡H´\´ éxȇÉ1Yqðøþzé¬2[­ äºxµU\œW§ªø°~¡^¹ŽÃoË„A±™õÒY2[-ßO!Y:k „Œ5'P=sX¼ÊƒßÀ Ãúˆ[ Å  çÅ­¨—Žl¶Úh30°ÎVÓqw˜õš÷7Xv•Ž§æ ‚Q9ΞlPÕ\­”ì±J“ozXóä¼¾ºØ$ÆÜ)Á¥1Ñef‡Ü&€cš×)P&‚>Pž¯ònrLVîpðØä¾Vv³¹Ë áÞsZ47I»&:c®æ$—¶rÅ‘iâ½ ,; š9TóQnõF÷k·º%˜„fä ]³%š¸èºù~,ÚK‡ŒÛr5™3wÍ¢Áfj¹‡—¹N€"럃)k]6¿›ì‘ î’ÛœrV†ÆàÝoÑñ+,Òe2÷ù«9øW²Qd‰Q©M³Õ<Ï‡í¯–Žó.ÿ©Ñóùä¿l}>Ÿp~ο*Wâår /ïûþç秦2;}D¼µ6ßÁùüþ@ß¹ƒ#iâ#?áûÿ]Qο•Î[óúO<ó¨tÞ—×þó9E®z);㽊y·Ùê Òygr_u½ :a)BT:Š•Ž"d§Ýd忇zEˆJG¢ÒQ„¨t!*EˆJG¢ÒQ„¨t!*EˆJG¢ÒQ„¨t!ÿ¯Íӱ IEND®B`‚tla-1.3.5+dfsg/src/expat/doc/valid-xhtml10.png0000644000175000017500000000455610457621771017536 0ustar useruser‰PNG  IHDRX#ÊDˆPLTEÞççÎ{9­­­ÞŒB¥„Bï½c½ZZÞ„BÎ{{Þ¥¥œ”{ÞµRÆssÞ­Rœ÷½Z”Œs”{Rc”½19JcŒ½”½Ö猭Îï­R¥½ÖÖÞï„¥ÆÎÞçÎÖçZ”Œ)½J!{{{ZZJŒs9JŒZRJsssµ”J„k1!„c1kkk­ŒBÖs9ÆœJÿïïcccÎk1Îc1­kcR„µk”½99JœµÖœÆkkœÆ¥Z”µÎµ9999¥R)”{9{c1”s9111½œJ­!ÞÞÞ1{½”JŒk1){)))¥ŒZÖÖÖµŒBÎÎÎçï÷ÆÆÆ½¥Z„9))cœsœ½½µœZ„µÎ¥Zÿ÷ÖkcRÿïÖcR)cJ)9„ïÆc1„œ{9œ„Z”s1­”Z{sk­ŒZ”””­ÆÞ÷ÿÿ÷÷ÿB{­BJJ½ÆÆsœÆÖçïBs­ŒŒŒBBJï÷÷ïï÷ÎÎÆç”JÖŒŒÿÞkB9skR)!sZ1ÿÖkB1scRÿÎkç½ZRB!Î¥RkR)çµZ÷Îc„sR÷ÆcZZZµœZ9BJÆZ)µ”ZJ”RRRµÎÞ!ZœJŒÿÿÿÿÿÿ1k¥”k)BŒJ{­JJJ{œÆÖµcÞçïcZR÷÷÷÷÷÷Ö­cBBBÞ­­ç½cïïï91çµcÞµZ{sR1)””{J9{kR1!”Œ{ZJ!Ö­R)!sZ)ï½ZZB!ÿÖcÖ¥RŒ{RÿÎcÿÆckR!„­ÎÿïsÆÖçZ”ÿçs½œZR”µJ!½ÎÞ½½½9s¥JŒRRJ9k¥RJJ!R”µµµÞµcB„”€?¤ØtRNSÿÿÿÿÿÿÿˆÿlIÿÿtÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿyÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ]ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿDÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿq>`½IDATxÚ•V‹_EË»ìaFÚŠ QYˆ DT§rDiPP"ÞÉÃ|¡‡Òê94Bé"ñ:$½4Àó•G):[F‡‰œùèþ~3»w·öÑïÍÎîÎ~÷»¿ù=fsì@Å´{"ñÕ”€5àCÅY±e”°F$°›Wˆã¾õPªð¥ÈVìFt'¥Œ1|N¯cÄâÖÞDc>1ÜYÕ Ã•-{ý~B†I`è[þ%¥[vÐ[•ë³ã#˜I³$£H%aD|D cO«Ü(L¦Œ³µoÆðau„(¢ )y*ÊÉa‡Òº÷)}*`&l¯éÜÞfÿ§0üwví÷‚Ó¿ÉfX„¶mMÙ>Dز›n9küäZ2ps!aé’cfª&ƒIŒa:T²©à‹qsr=åÖ4OnÌ XþL†|ÖÔ¤j¹˜ÈÅarÜ|ºc9í‹Gî¤+@yuÒÇJÒÁ\#’—1tÐØwAÁ#G4H_¶5A =¿xÄb9°ÀÑ*¡t<¨Ûl>Ýî5·o{–»xé˜5IÒ,M™öóÖ*£ô:äÛ AºNŒä—¼(Y$IÒmžÂÀ9H˜bÖmi’ô –f¶eNBÛK~¿Ýn÷‹f‡k~²û[¾pòcªD1 Ôí6ÄÊ´)@¾¿™hi)²M?R&‹È…HY‹)m³¢4§Z­¹Ãd¨ÚTÍtòî#4~"ãñTÑ%¨ô.eøVvíÿÕ%_òÉÈ¥Xó«“Ãd^.Ъhùlz•fRJd„d×s*»tYFç\ÃÉÕù8LžhX:ÖUï Þ"Í _ë7e[íÃÍʆi…ÍgÈJË;œÜ½³¬®¯¬q¶g§7:AQOzrð‚øŸ`ƒ7žPa×aáÍü†aˆøLáž¼gÏ4è¼@>‘à ûn;¹‡±4¸Ëãšëúëhì[ÙÇl`óÝ`Æ'N ší¸æ !Ò¨ ÒóÝÏ WOËæ*oÊÑ…•›G`¸£ý¼fï3ï ;yƒß_+'H½6sáÖÝsGµAoѪhåáµ9‡AØ q>g­ doesn't define. */ #undef off_t /* Define to `unsigned' if doesn't define. */ #undef size_t /* Define if your processor stores words with the most significant byte first (like Motorola and SPARC, unlike Intel and VAX). */ #undef WORDS_BIGENDIAN /* Define if you have the bcopy function. */ #undef HAVE_BCOPY /* Define if you have the memmove function. */ #define HAVE_MEMMOVE 1 /* Define if you have the header file. */ #define HAVE_UNISTD_H 1 #define XML_NS #define XML_DTD #ifdef WORDS_BIGENDIAN #define XML_BYTE_ORDER 21 #else #define XML_BYTE_ORDER 12 #endif #define XML_CONTEXT_BYTES 1024 #ifndef HAVE_MEMMOVE #ifdef HAVE_BCOPY #define memmove(d,s,l) bcopy((s),(d),(l)) #else #define memmove(d,s,l) ;punting on memmove; #endif #endif tla-1.3.5+dfsg/src/expat/vms/README.vms0000644000175000017500000000110010457621771016140 0ustar useruser4-jun-2002 Craig A. Berry Added rudimentary build procedures for OpenVMS based on work by Martin Vorlaender. You'll need MMS or its freeware equivalent MMK. Just go to the top-level directory and type $ MMS/DESCRIPTION=[.vms] or $ MMK/DESCRIPTION=[.vms] You'll end up with the object library expat.olb. For now, installation consists merely of copying the object library, include files, and documentation to a suitable location. To-do list: -- create a shareable image -- build and run the tests and build the xmlwf utility -- create an install target tla-1.3.5+dfsg/src/expat/vms/descrip.mms0000644000175000017500000000404010457621771016631 0ustar useruser# Bare bones description file (Makefile) for OpenVMS PACKAGE = expat VERSION = 1.95.8 EXPAT_MAJOR_VERSION=1 EXPAT_MINOR_VERSION=95 EXPAT_EDIT=8 O = .obj OLB = .olb LIBRARY = expat$(OLB) LIBDIR = [.lib] SOURCES = $(LIBDIR)xmlparse.c $(LIBDIR)xmltok.c $(LIBDIR)xmlrole.c OBJECTS = xmlparse$(O) xmltok$(O) xmlrole$(O) TEMPLATES = xmltok_impl.c xmltok_ns.c APIHEADER = $(LIBDIR)expat.h HEADERS = $(LIBDIR)ascii.h $(LIBDIR)iasciitab.h $(LIBDIR)utf8tab.h $(LIBDIR)xmltok.h \ $(LIBDIR)asciitab.h $(LIBDIR)latin1tab.h \ $(LIBDIR)nametab.h $(LIBDIR)xmldef.h $(LIBDIR)xmlrole.h $(LIBDIR)xmltok_impl.h CONFIG_HEADER = expat_config.h INCLUDES = /INCLUDE=([],[.lib]) DEFS = /DEFINE=(PACKAGE="""$(PACKAGE)""",VERSION="""$(PACKAGE)_$(VERSION)""",HAVE_EXPAT_CONFIG_H) LIBREVISION = 0 LIBCURRENT = 1 LIBAGE = 0 # COMPILE = $(CC) $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) # # DISTFILES = $(DIST_COMMON) $(SOURCES) $(TEMPLATES) $(APIHEADER) $(HEADERS) # # TAR = gtar # GZIP_ENV = --best # .FIRST : IF F$SEARCH("$(LIBRARY)") .EQS. "" THEN $(LIBR) /CREATE /OBJECT $(LIBRARY) all : $(LIBRARY) @ write sys$output "All made." .SUFFIXES : .SUFFIXES : $(OLB) $(O) .C .H .c$(O) : $(COMPILE) $(MMS$SOURCE) $(O)$(OLB) : @ IF F$SEARCH("$(MMS$TARGET)") .EQS. "" - THEN LIBRARY/CREATE/LOG $(MMS$TARGET) @ LIBRARY /REPLACE /LOG $(MMS$TARGET) $(MMS$SOURCE) clean : DELETE $(LIBRARY);*,*$(O);* $(LIBRARY) : $(LIBRARY)( $(OBJECTS) ) $(LIBR) /COMPRESS $(MMS$TARGET) $(CONFIG_HEADER) : [.vms]expat_config.h COPY/LOG $(MMS$SOURCE) $(MMS$TARGET) xmlparse$(O) : $(LIBDIR)xmlparse.c $(LIBDIR)expat.h $(LIBDIR)xmlrole.h $(LIBDIR)xmltok.h $(CONFIG_HEADER) xmlrole$(O) : $(LIBDIR)xmlrole.c $(LIBDIR)ascii.h $(LIBDIR)xmlrole.h $(CONFIG_HEADER) xmltok$(O) : $(LIBDIR)xmltok.c $(LIBDIR)xmltok_impl.c $(LIBDIR)xmltok_ns.c \ $(LIBDIR)ascii.h $(LIBDIR)asciitab.h $(LIBDIR)iasciitab.h $(LIBDIR)latin1tab.h \ $(LIBDIR)nametab.h $(LIBDIR)utf8tab.h $(LIBDIR)xmltok.h $(LIBDIR)xmltok_impl.h $(CONFIG_HEADER) tla-1.3.5+dfsg/src/expat/COPYING0000644000175000017500000000224610457621771014716 0ustar useruserCopyright (c) 1998, 1999, 2000 Thai Open Source Software Center Ltd and Clark Cooper Copyright (c) 2001, 2002, 2003 Expat maintainers. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. tla-1.3.5+dfsg/src/expat/bcb5/0000755000175000017500000000000010457621771014472 5ustar userusertla-1.3.5+dfsg/src/expat/bcb5/elements.bpr0000644000175000017500000001074010457621771017015 0ustar useruser [Version Info] IncludeVerInfo=0 AutoIncBuild=0 MajorVer=1 MinorVer=0 Release=0 Build=0 Debug=0 PreRelease=0 Special=0 Private=0 DLL=0 Locale=1033 CodePage=1252 [Version Info Keys] CompanyName= FileDescription= FileVersion=1.0.0.0 InternalName= LegalCopyright= LegalTrademarks= OriginalFilename= ProductName= ProductVersion=1.0.0.0 Comments= [HistoryLists\hlIncludePath] Count=4 Item0=..\examples;$(BCB)\include Item1=$(BCB)\include Item2=$(BCB)\include;$(BCB)\include\mfc;$(BCB)\include\atl Item3=$(BCB)\include;$(BCB)\include\mfc;$(BCB)\include\atl; [HistoryLists\hlLibraryPath] Count=8 Item0=..\examples;$(BCB)\lib;$(RELEASELIBPATH) Item1=..\examples;$(BCB)\lib;..\examples\$(RELEASELIBPATH) Item2=$(BCB)\lib;$(RELEASELIBPATH) Item3=$(BCB)\lib;$(RELEASELIBPATH);..\lib\Release-w_static Item4=$(BCB)\lib;$(RELEASELIBPATH);..\lib\Release_static Item5=$(BCB)\lib;$(RELEASELIBPATH);C:\src\expat\lib\Release_static Item6=$(BCB)\lib;$(RELEASELIBPATH);$(BCB)\lib\psdk Item7=$(BCB)\lib;$(RELEASELIBPATH);;$(BCB)\lib\psdk; [HistoryLists\hlDebugSourcePath] Count=1 Item0=$(BCB)\source\vcl [HistoryLists\hlConditionals] Count=17 Item0=WIN32;NDEBUG;_CONSOLE;XML_STATIC Item1=WIN32;NDEBUG;_CONSOLE;_DEBUG;XML_STATIC Item2=WIN32;NDEBUG;_CONSOLE;_DEBUG;XML_UNICODE_WCHAR_T;_UNICODE;XML_STATIC Item3=WIN32;NDEBUG;_CONSOLE;_DEBUG;XML_UNICODE_WCHAR_T;_UNICODE Item4=WIN32;NDEBUG;_CONSOLE;_DEBUG Item5=WIN32;NDEBUG;_CONSOLE;XML_STATIC;_DEBUG Item6=WIN32;NDEBUG;_CONSOLE;XML_STATIC;_DEBUG;_UNICODE Item7=WIN32;NDEBUG;_CONSOLE;XML_STATIC;_DEBUG;XML_UNICODE_WCHAR_T Item8=WIN32;NDEBUG;_CONSOLE;_MBCS;XML_STATIC;_DEBUG;XML_UNICODE_WCHAR_T Item9=WIN32;NDEBUG;_CONSOLE;_UNICODE;XML_STATIC;_DEBUG;XML_UNICODE_WCHAR_T Item10=WIN32;NDEBUG;_CONSOLE;_UNICODE;XML_STATIC;_DEBUG;XML_UNICODE Item11=WIN32;NDEBUG;_CONSOLE;_MBCS;XML_STATIC;_DEBUG;XML_UNICODE_WCHAR_T;__WCHAR_T Item12=WIN32;NDEBUG;_CONSOLE;_MBCS;XML_STATIC;_DEBUG;XML_UNICODE_WCHAR_T;_UNICODE Item13=WIN32;NDEBUG;_CONSOLE;_MBCS;XML_STATIC;_DEBUG;XML_UNICODE;_UNICODE Item14=WIN32;NDEBUG;_CONSOLE;_MBCS;XML_STATIC;_DEBUG;XML_UNICODE Item15=WIN32;NDEBUG;_CONSOLE;_MBCS;XML_STATIC;_DEBUG Item16=WIN32;NDEBUG;_CONSOLE;_MBCS;XML_STATIC [HistoryLists\hlIntOutputDir] Count=5 Item0=Release\obj\examples Item1=Release\obj\elements Item2=Release\obj\mts Item3=..\examples\Release Item4=Release [HistoryLists\hlFinalOutputDir] Count=1 Item0=Release\ [Debugging] DebugSourceDirs= [Parameters] RunParams= HostApplication= RemoteHost= RemotePath= RemoteDebug=0 [Compiler] ShowInfoMsgs=0 LinkDebugVcl=0 LinkCGLIB=0 [Language] ActiveLang= ProjectLang= RootDir= tla-1.3.5+dfsg/src/expat/bcb5/expat_static.bpr0000644000175000017500000000702110457621771017667 0ustar useruser [Version Info] IncludeVerInfo=0 AutoIncBuild=0 MajorVer=1 MinorVer=0 Release=0 Build=0 Debug=0 PreRelease=0 Special=0 Private=0 DLL=0 Locale=1033 CodePage=1252 [Version Info Keys] CompanyName= FileDescription= FileVersion=1.0.0.0 InternalName= LegalCopyright= LegalTrademarks= OriginalFilename= ProductName= ProductVersion=1.0.0.0 Comments= [HistoryLists\hlIncludePath] Count=4 Item0=..\lib;$(BCB)\include Item1=$(BCB)\include Item2=$(BCB)\include;$(BCB)\include\mfc;$(BCB)\include\atl Item3=$(BCB)\include;$(BCB)\include\mfc;$(BCB)\include\atl; [HistoryLists\hlLibraryPath] Count=5 Item0=..\lib;$(BCB)\lib;$(RELEASELIBPATH) Item1=..\lib;$(BCB)\lib;..\lib\$(RELEASELIBPATH) Item2=$(BCB)\lib;$(RELEASELIBPATH) Item3=$(BCB)\lib;$(RELEASELIBPATH);$(BCB)\lib\psdk Item4=$(BCB)\lib;$(RELEASELIBPATH);;$(BCB)\lib\psdk; [HistoryLists\hlDebugSourcePath] Count=1 Item0=$(BCB)\source\vcl [HistoryLists\hlConditionals] Count=7 Item0=_WINDOWS;WIN32;NDEBUG;_LIB;COMPILED_FROM_DSP;XML_STATIC Item1=_WINDOWS;WIN32;NDEBUG;_DEBUG;_LIB;COMPILED_FROM_DSP;XML_STATIC Item2=WIN32;_WINDOWS;NDEBUG;_DEBUG;_LIB;COMPILED_FROM_DSP;XML_STATIC Item3=WIN32;_WINDOWS;NDEBUG;_LIB;COMPILED_FROM_DSP;_DEBUG Item4=WIN32;_WINDOWS;NDEBUG;_LIB;COMPILED_FROM_DSP Item5=WIN32;_WINDOWS;NDEBUG;_LIB;COMPILED_FROM_DSP;_MBCS Item6=WIN32;_WINDOWS;NDEBUG;_MBCS;_LIB;COMPILED_FROM_DSP [HistoryLists\hlIntOutputDir] Count=6 Item0=Release\obj\libexpat_static Item1=Release\obj\mts Item2=Release\obj\mt Item3=Release Item4=..\lib\Release_static Item5=Release_static [HistoryLists\hlFinalOutputDir] Count=3 Item0=Release\ Item1=Release Item2=Release_static\ [HistoryLists\hlTlibPageSize] Count=1 Item0=0x0010 [Debugging] DebugSourceDirs= [Parameters] RunParams= HostApplication= RemoteHost= RemotePath= RemoteDebug=0 [Compiler] ShowInfoMsgs=0 LinkDebugVcl=0 LinkCGLIB=0 [Language] ActiveLang= ProjectLang= RootDir= tla-1.3.5+dfsg/src/expat/bcb5/xmlwf.bpr0000644000175000017500000000730710457621771016343 0ustar useruser [Version Info] IncludeVerInfo=0 AutoIncBuild=0 MajorVer=1 MinorVer=0 Release=0 Build=0 Debug=0 PreRelease=0 Special=0 Private=0 DLL=0 Locale=1033 CodePage=1252 [Version Info Keys] CompanyName= FileDescription= FileVersion=1.0.0.0 InternalName= LegalCopyright= LegalTrademarks= OriginalFilename= ProductName= ProductVersion=1.0.0.0 Comments= [HistoryLists\hlIncludePath] Count=4 Item0=..\xmlwf;$(BCB)\include Item1=$(BCB)\include Item2=$(BCB)\include;$(BCB)\include\mfc;$(BCB)\include\atl Item3=$(BCB)\include;$(BCB)\include\mfc;$(BCB)\include\atl; [HistoryLists\hlLibraryPath] Count=5 Item0=..\xmlwf;$(BCB)\lib;$(RELEASELIBPATH) Item1=..\xmlwf;$(BCB)\lib;..\xmlwf\$(RELEASELIBPATH) Item2=$(BCB)\lib;$(RELEASELIBPATH) Item3=$(BCB)\lib;$(RELEASELIBPATH);$(BCB)\lib\psdk Item4=$(BCB)\lib;$(RELEASELIBPATH);;$(BCB)\lib\psdk; [HistoryLists\hlDebugSourcePath] Count=1 Item0=$(BCB)\source\vcl [HistoryLists\hlConditionals] Count=6 Item0=NDEBUG;WIN32;_CONSOLE;COMPILED_FROM_DSP Item1=NDEBUG;WIN32;_CONSOLE;COMPILED_FROM_DSP;_DEBUG;XML_UNICODE_WCHAR_T;_UNICODE Item2=NDEBUG;WIN32;_CONSOLE;COMPILED_FROM_DSP;_DEBUG;XML_UNICODE_WCHAR_T Item3=NDEBUG;WIN32;_CONSOLE;COMPILED_FROM_DSP;_DEBUG Item4=NDEBUG;WIN32;_CONSOLE;COMPILED_FROM_DSP;_DEBUG;_UNICODE;XML_UNICODE_WCHAR_T Item5=NDEBUG;WIN32;_CONSOLE;COMPILED_FROM_DSP;_DEBUG;_UNICODE [HistoryLists\hlIntOutputDir] Count=3 Item0=Release\obj\xmlwf Item1=..\xmlwf\Release Item2=Release [HistoryLists\hlFinalOutputDir] Count=3 Item0=Release\ Item1=Release Item2=.\Release\ [Debugging] DebugSourceDirs= [Parameters] RunParams=sample.xml HostApplication= RemoteHost= RemotePath= RemoteDebug=0 [Compiler] ShowInfoMsgs=0 LinkDebugVcl=0 LinkCGLIB=0 [Language] ActiveLang= ProjectLang= RootDir= tla-1.3.5+dfsg/src/expat/bcb5/expatw.bpr0000644000175000017500000001051310457621771016507 0ustar useruser [Version Info] IncludeVerInfo=0 AutoIncBuild=0 MajorVer=1 MinorVer=0 Release=0 Build=0 Debug=0 PreRelease=0 Special=0 Private=0 DLL=0 Locale=1033 CodePage=1252 [Version Info Keys] CompanyName= FileDescription= FileVersion=1.0.0.0 InternalName= LegalCopyright= LegalTrademarks= OriginalFilename= ProductName= ProductVersion=1.0.0.0 Comments= [HistoryLists\hlIncludePath] Count=4 Item0=..\lib;$(BCB)\include Item1=$(BCB)\include Item2=$(BCB)\include;$(BCB)\include\mfc;$(BCB)\include\atl Item3=$(BCB)\include;$(BCB)\include\mfc;$(BCB)\include\atl; [HistoryLists\hlLibraryPath] Count=5 Item0=..\lib;$(BCB)\lib;$(RELEASELIBPATH) Item1=..\lib;$(BCB)\lib;..\lib\$(RELEASELIBPATH) Item2=$(BCB)\lib;$(RELEASELIBPATH) Item3=$(BCB)\lib;$(RELEASELIBPATH);$(BCB)\lib\psdk Item4=$(BCB)\lib;$(RELEASELIBPATH);;$(BCB)\lib\psdk; [HistoryLists\hlDebugSourcePath] Count=1 Item0=$(BCB)\source\vcl [HistoryLists\hlConditionals] Count=9 Item0=_WINDOWS;WIN32;NDEBUG;_USRDLL;COMPILED_FROM_DSP;EXPAT_EXPORTS;XML_UNICODE_WCHAR_T Item1=_WINDOWS;WIN32;NDEBUG;_DEBUG;_USRDLL;COMPILED_FROM_DSP;EXPAT_EXPORTS;XML_UNICODE_WCHAR_T Item2=_WINDOWS;WIN32;NDEBUG;_DEBUG;_USRDLL;EXPAT_EXPORTS;COMPILED_FROM_DSP;XML_UNICODE_WCHAR_T Item3=NDEBUG;COMPILED_FROM_DSP;WIN32;_WINDOWS;_USRDLL;EXPAT_EXPORTS;_DEBUG;XML_UNICODE_WCHAR_T Item4=NDEBUG;COMPILED_FROM_DSP;WIN32;_WINDOWS;_USRDLL;EXPAT_EXPORTS;XML_UNICODE_WCHAR_T;_DEBUG Item5=NDEBUG;COMPILED_FROM_DSP;WIN32;_WINDOWS;_UNICODE;_USRDLL;EXPAT_EXPORTS;XML_UNICODE_WCHAR_T;_DEBUG Item6=NDEBUG;COMPILED_FROM_DSP;WIN32;_WINDOWS;_UNICODE;_USRDLL;EXPAT_EXPORTS;XML_UNICODE_WCHAR_T Item7=NDEBUG;COMPILED_FROM_DSP;WIN32;_WINDOWS;_MBCS;_USRDLL;EXPAT_EXPORTS;XML_UNICODE_WCHAR_T;XML_UNICODE Item8=NDEBUG;COMPILED_FROM_DSP;WIN32;_WINDOWS;_MBCS;_USRDLL;EXPAT_EXPORTS;XML_UNICODE_WCHAR_T [HistoryLists\hlIntOutputDir] Count=8 Item0=Release\obj\libexpatw Item1=Release\obj\libexpat Item2=Release\obj\mtd Item3=Release\obj\mt Item4=Release_w\obj Item5=Release-w\obj Item6=Release-w Item7=..\lib\Release-w [HistoryLists\hlFinalOutputDir] Count=5 Item0=Release\ Item1=Release Item2=Release_w\ Item3=Release-w\ Item4=Release-w [Debugging] DebugSourceDirs= [Parameters] RunParams= HostApplication= RemoteHost= RemotePath= RemoteDebug=0 [Compiler] ShowInfoMsgs=0 LinkDebugVcl=0 LinkCGLIB=0 [Language] ActiveLang= ProjectLang= RootDir= tla-1.3.5+dfsg/src/expat/bcb5/setup.bat0000644000175000017500000000105110457621771016317 0ustar useruserREM CommandInterpreter: $(COMSPEC) if not exist .\release\nul mkdir release if not exist .\release\obj\nul mkdir release\obj if not exist .\release\obj\libexpat\nul mkdir release\obj\libexpat if not exist .\release\obj\libexpatw\nul mkdir release\obj\libexpatw if not exist .\release\obj\libexpat_static\nul mkdir release\obj\libexpat_static if not exist .\release\obj\libexpatw_static\nul mkdir release\obj\libexpatw_static if not exist .\release\obj\examples\nul mkdir release\obj\examples if not exist .\release\obj\xmlwf\nul mkdir release\obj\xmlwf tla-1.3.5+dfsg/src/expat/bcb5/outline.bpr0000644000175000017500000000660710457621771016667 0ustar useruser [Version Info] IncludeVerInfo=0 AutoIncBuild=0 MajorVer=1 MinorVer=0 Release=0 Build=0 Debug=0 PreRelease=0 Special=0 Private=0 DLL=0 Locale=1033 CodePage=1252 [Version Info Keys] CompanyName= FileDescription= FileVersion=1.0.0.0 InternalName= LegalCopyright= LegalTrademarks= OriginalFilename= ProductName= ProductVersion=1.0.0.0 Comments= [HistoryLists\hlIncludePath] Count=3 Item0=..\examples;$(BCB)\include Item1=$(BCB)\include Item2=$(BCB)\include;$(BCB)\include\mfc;$(BCB)\include\atl; [HistoryLists\hlLibraryPath] Count=4 Item0=..\examples;$(BCB)\lib;$(RELEASELIBPATH) Item1=..\examples;$(BCB)\lib;..\examples\$(RELEASELIBPATH) Item2=$(BCB)\lib;$(RELEASELIBPATH) Item3=$(BCB)\lib;$(RELEASELIBPATH);;$(BCB)\lib\psdk; [HistoryLists\hlDebugSourcePath] Count=1 Item0=$(BCB)\source\vcl [HistoryLists\hlConditionals] Count=6 Item0=WIN32;NDEBUG;_CONSOLE Item1=WIN32;NDEBUG;_CONSOLE;XML_STATIC Item2=WIN32;NDEBUG;_CONSOLE;_DEBUG;XML_STATIC Item3=WIN32;NDEBUG;_CONSOLE;_DEBUG;XML_UNICODE_WCHAR_T;_UNICODE;XML_STATIC Item4=WIN32;NDEBUG;_CONSOLE;_DEBUG;XML_UNICODE_WCHAR_T;_UNICODE Item5=WIN32;NDEBUG;_CONSOLE;_DEBUG [HistoryLists\hlIntOutputDir] Count=4 Item0=Release\obj\examples Item1=Release\obj\outline Item2=..\examples\Release Item3=Release [HistoryLists\hlFinalOutputDir] Count=1 Item0=Release\ [Debugging] DebugSourceDirs= [Parameters] RunParams= HostApplication= RemoteHost= RemotePath= RemoteDebug=0 [Compiler] ShowInfoMsgs=0 LinkDebugVcl=0 LinkCGLIB=0 [Language] ActiveLang= ProjectLang= RootDir= tla-1.3.5+dfsg/src/expat/bcb5/expat.bpf0000644000175000017500000000032710457621771016306 0ustar useruserUSEUNIT("..\lib\xmlparse.c"); USEUNIT("..\lib\xmlrole.c"); USEUNIT("..\lib\xmltok.c"); USEDEF("libexpat_mtd.def"); //--------------------------------------------------------------------------- #define DllEntryPoint tla-1.3.5+dfsg/src/expat/bcb5/expatw_static.mak0000644000175000017500000001136710457621771020053 0ustar useruser# --------------------------------------------------------------------------- !if !$d(BCB) BCB = $(MAKEDIR)\.. !endif # --------------------------------------------------------------------------- # IDE SECTION # --------------------------------------------------------------------------- # The following section of the project makefile is managed by the BCB IDE. # It is recommended to use the IDE to change any of the values in this # section. # --------------------------------------------------------------------------- VERSION = BCB.05.03 # --------------------------------------------------------------------------- PROJECT = Release\libexpatws_mtd.lib OBJFILES = Release\obj\libexpatw_static\xmlparse.obj \ Release\obj\libexpatw_static\xmlrole.obj \ Release\obj\libexpatw_static\xmltok.obj RESFILES = MAINSOURCE = expatw_static.bpf RESDEPEN = $(RESFILES) LIBFILES = IDLFILES = IDLGENFILES = LIBRARIES = PACKAGES = SPARELIBS = DEFFILE = # --------------------------------------------------------------------------- PATHCPP = .;..\lib PATHASM = .; PATHPAS = .; PATHRC = .; LINKER = TLib DEBUGLIBPATH = $(BCB)\lib\debug RELEASELIBPATH = $(BCB)\lib\release USERDEFINES = _WINDOWS;WIN32;NDEBUG;_LIB;COMPILED_FROM_DSP;XML_STATIC;XML_UNICODE_WCHAR_T SYSDEFINES = _NO_VCL;_ASSERTE;NO_STRICT;_RTLDLL INCLUDEPATH = ..\lib;$(BCB)\include LIBPATH = ..\lib;$(BCB)\lib;$(RELEASELIBPATH) WARNINGS = -w-rch -w-par -w-8027 -w-8026 -w-ccc LISTFILE = # --------------------------------------------------------------------------- CFLAG1 = -O2 -X- -a8 -b -k- -vi -q -tWM -c IDLCFLAGS = -I$(BCB)\include PFLAGS = -N2Release\obj\libexpatw_static -N0Release\obj\libexpatw_static -$Y- -$L- \ -$D- RFLAGS = /l 0x409 /d "NDEBUG" /i$(BCB)\include AFLAGS = /mx /w2 /zn LFLAGS = # --------------------------------------------------------------------------- ALLOBJ = $(OBJFILES) ALLRES = $(RESFILES) ALLLIB = $(LIBFILES) $(LIBRARIES) # --------------------------------------------------------------------------- !ifdef IDEOPTIONS [Version Info] IncludeVerInfo=0 AutoIncBuild=0 MajorVer=1 MinorVer=0 Release=0 Build=0 Debug=0 PreRelease=0 Special=0 Private=0 DLL=0 [Version Info Keys] CompanyName= FileDescription= FileVersion=1.0.0.0 InternalName= LegalCopyright= LegalTrademarks= OriginalFilename= ProductName= ProductVersion=1.0.0.0 Comments= [Debugging] DebugSourceDirs=$(BCB)\source\vcl !endif # --------------------------------------------------------------------------- # MAKE SECTION # --------------------------------------------------------------------------- # This section of the project file is not used by the BCB IDE. It is for # the benefit of building from the command-line using the MAKE utility. # --------------------------------------------------------------------------- .autodepend # --------------------------------------------------------------------------- !if "$(USERDEFINES)" != "" AUSERDEFINES = -d$(USERDEFINES:;= -d) !else AUSERDEFINES = !endif !if !$d(BCC32) BCC32 = bcc32 !endif !if !$d(CPP32) CPP32 = cpp32 !endif !if !$d(DCC32) DCC32 = dcc32 !endif !if !$d(TASM32) TASM32 = tasm32 !endif !if !$d(LINKER) LINKER = TLib !endif !if !$d(BRCC32) BRCC32 = brcc32 !endif # --------------------------------------------------------------------------- !if $d(PATHCPP) .PATH.CPP = $(PATHCPP) .PATH.C = $(PATHCPP) !endif !if $d(PATHPAS) .PATH.PAS = $(PATHPAS) !endif !if $d(PATHASM) .PATH.ASM = $(PATHASM) !endif !if $d(PATHRC) .PATH.RC = $(PATHRC) !endif # --------------------------------------------------------------------------- !if "$(LISTFILE)" == "" COMMA = !else COMMA = , !endif $(PROJECT): $(IDLGENFILES) $(OBJFILES) $(RESDEPEN) $(DEFFILE) $(BCB)\BIN\$(LINKER) /u $@ @&&! $(LFLAGS) $? $(COMMA) $(LISTFILE) ! # --------------------------------------------------------------------------- .pas.hpp: $(BCB)\BIN\$(DCC32) $(PFLAGS) -U$(INCLUDEPATH) -D$(USERDEFINES);$(SYSDEFINES) -O$(INCLUDEPATH) --BCB {$< } .pas.obj: $(BCB)\BIN\$(DCC32) $(PFLAGS) -U$(INCLUDEPATH) -D$(USERDEFINES);$(SYSDEFINES) -O$(INCLUDEPATH) --BCB {$< } .cpp.obj: $(BCB)\BIN\$(BCC32) $(CFLAG1) $(WARNINGS) -I$(INCLUDEPATH) -D$(USERDEFINES);$(SYSDEFINES) -n$(@D) {$< } .c.obj: $(BCB)\BIN\$(BCC32) $(CFLAG1) $(WARNINGS) -I$(INCLUDEPATH) -D$(USERDEFINES);$(SYSDEFINES) -n$(@D) {$< } .c.i: $(BCB)\BIN\$(CPP32) $(CFLAG1) $(WARNINGS) -I$(INCLUDEPATH) -D$(USERDEFINES);$(SYSDEFINES) -n. {$< } .cpp.i: $(BCB)\BIN\$(CPP32) $(CFLAG1) $(WARNINGS) -I$(INCLUDEPATH) -D$(USERDEFINES);$(SYSDEFINES) -n. {$< } .asm.obj: $(BCB)\BIN\$(TASM32) $(AFLAGS) -i$(INCLUDEPATH:;= -i) $(AUSERDEFINES) -d$(SYSDEFINES:;= -d) $<, $@ .rc.res: $(BCB)\BIN\$(BRCC32) $(RFLAGS) -I$(INCLUDEPATH) -D$(USERDEFINES);$(SYSDEFINES) -fo$@ $< # --------------------------------------------------------------------------- tla-1.3.5+dfsg/src/expat/bcb5/expat.bpr0000644000175000017500000000770710457621771016333 0ustar useruser [Version Info] IncludeVerInfo=0 AutoIncBuild=0 MajorVer=1 MinorVer=0 Release=0 Build=0 Debug=0 PreRelease=0 Special=0 Private=0 DLL=0 Locale=1033 CodePage=1252 [Version Info Keys] CompanyName= FileDescription= FileVersion=1.0.0.0 InternalName= LegalCopyright= LegalTrademarks= OriginalFilename= ProductName= ProductVersion=1.0.0.0 Comments= [HistoryLists\hlIncludePath] Count=4 Item0=..\lib;$(BCB)\include Item1=$(BCB)\include Item2=$(BCB)\include;$(BCB)\include\mfc;$(BCB)\include\atl Item3=$(BCB)\include;$(BCB)\include\mfc;$(BCB)\include\atl; [HistoryLists\hlLibraryPath] Count=5 Item0=..\lib;$(BCB)\lib;$(RELEASELIBPATH) Item1=..\lib;$(BCB)\lib;..\lib\$(RELEASELIBPATH) Item2=$(BCB)\lib;$(RELEASELIBPATH) Item3=$(BCB)\lib;$(RELEASELIBPATH);$(BCB)\lib\psdk Item4=$(BCB)\lib;$(RELEASELIBPATH);;$(BCB)\lib\psdk; [HistoryLists\hlDebugSourcePath] Count=1 Item0=$(BCB)\source\vcl [HistoryLists\hlConditionals] Count=8 Item0=_WINDOWS;WIN32;NDEBUG;_USRDLL;COMPILED_FROM_DSP;EXPAT_EXPORTS Item1=_WINDOWS;WIN32;NDEBUG;_DEBUG;_USRDLL;COMPILED_FROM_DSP;EXPAT_EXPORTS Item2=WIN32;_WINDOWS;NDEBUG;_DEBUG;_USRDLL;COMPILED_FROM_DSP;EXPAT_EXPORTS Item3=WIN32;_WINDOWS;NDEBUG;_DEBUG;_USRDLL;EXPAT_EXPORTS;COMPILED_FROM_DSP Item4=NDEBUG;WIN32;_WINDOWS;_USRDLL;_DEBUG;EXPAT_EXPORTS;COMPILED_FROM_DSP Item5=NDEBUG;WIN32;_WINDOWS;_USRDLL;EXPAT_EXPORTS;COMPILED_FROM_DSP;_DEBUG Item6=NDEBUG;WIN32;_WINDOWS;_MBCS;_USRDLL;EXPAT_EXPORTS;COMPILED_FROM_DSP;_DEBUG Item7=NDEBUG;WIN32;_WINDOWS;_MBCS;_USRDLL;EXPAT_EXPORTS;COMPILED_FROM_DSP [HistoryLists\hlIntOutputDir] Count=7 Item0=Release\obj\libexpat Item1=Release\obj\libexpat_static Item2=Release\obj\mtd Item3=Release\obj\mt Item4=Release\obj Item5=Release Item6=..\lib\Release [HistoryLists\hlFinalOutputDir] Count=1 Item0=Release\ [Debugging] DebugSourceDirs= [Parameters] RunParams= HostApplication= RemoteHost= RemotePath= RemoteDebug=0 [Compiler] ShowInfoMsgs=0 LinkDebugVcl=0 LinkCGLIB=0 [Language] ActiveLang= ProjectLang= RootDir= tla-1.3.5+dfsg/src/expat/bcb5/xmlwf.mak0000644000175000017500000001203110457621771016316 0ustar useruser# --------------------------------------------------------------------------- !if !$d(BCB) BCB = $(MAKEDIR)\.. !endif # --------------------------------------------------------------------------- # IDE SECTION # --------------------------------------------------------------------------- # The following section of the project makefile is managed by the BCB IDE. # It is recommended to use the IDE to change any of the values in this # section. # --------------------------------------------------------------------------- VERSION = BCB.05.03 # --------------------------------------------------------------------------- PROJECT = Release\xmlwf.exe OBJFILES = Release\obj\xmlwf\codepage.obj Release\obj\xmlwf\win32filemap.obj \ Release\obj\xmlwf\xmlfile.obj Release\obj\xmlwf\xmlwf.obj RESFILES = MAINSOURCE = xmlwf.bpf RESDEPEN = $(RESFILES) LIBFILES = Release\libexpat_mtd.lib IDLFILES = IDLGENFILES = LIBRARIES = PACKAGES = VCL50.bpi VCLX50.bpi bcbsmp50.bpi QRPT50.bpi VCLDB50.bpi VCLBDE50.bpi \ ibsmp50.bpi VCLDBX50.bpi TEEUI50.bpi TEEDB50.bpi TEE50.bpi TEEQR50.bpi \ VCLIB50.bpi bcbie50.bpi VCLIE50.bpi INETDB50.bpi INET50.bpi NMFAST50.bpi \ dclocx50.bpi bcb2kaxserver50.bpi dclusr50.bpi SPARELIBS = DEFFILE = # --------------------------------------------------------------------------- PATHCPP = .;..\xmlwf PATHASM = .; PATHPAS = .; PATHRC = .; DEBUGLIBPATH = $(BCB)\lib\debug RELEASELIBPATH = $(BCB)\lib\release USERDEFINES = NDEBUG;WIN32;_CONSOLE;COMPILED_FROM_DSP SYSDEFINES = _NO_VCL;_ASSERTE;NO_STRICT;_RTLDLL INCLUDEPATH = ..\xmlwf;$(BCB)\include LIBPATH = ..\xmlwf;$(BCB)\lib;$(RELEASELIBPATH) WARNINGS= -w-8065 -w-par -w-8027 -w-8026 # --------------------------------------------------------------------------- CFLAG1 = -O2 -X- -a8 -b -k- -vi -q -tWM -I..\lib -c IDLCFLAGS = -I$(BCB)\include PFLAGS = -N2Release\obj\xmlwf -N0Release\obj\xmlwf -$Y- -$L- -$D- RFLAGS = /l 0x409 /d "NDEBUG" /i$(BCB)\include AFLAGS = /mx /w2 /zn LFLAGS = -IRelease\obj\xmlwf -D"" -ap -Tpe -x -Gn -q # --------------------------------------------------------------------------- ALLOBJ = c0x32.obj $(OBJFILES) ALLRES = $(RESFILES) ALLLIB = $(LIBFILES) $(LIBRARIES) import32.lib cw32mti.lib # --------------------------------------------------------------------------- !ifdef IDEOPTIONS [Version Info] IncludeVerInfo=0 AutoIncBuild=0 MajorVer=1 MinorVer=0 Release=0 Build=0 Debug=0 PreRelease=0 Special=0 Private=0 DLL=0 [Version Info Keys] CompanyName= FileDescription= FileVersion=1.0.0.0 InternalName= LegalCopyright= LegalTrademarks= OriginalFilename= ProductName= ProductVersion=1.0.0.0 Comments= [Debugging] DebugSourceDirs=$(BCB)\source\vcl !endif # --------------------------------------------------------------------------- # MAKE SECTION # --------------------------------------------------------------------------- # This section of the project file is not used by the BCB IDE. It is for # the benefit of building from the command-line using the MAKE utility. # --------------------------------------------------------------------------- .autodepend # --------------------------------------------------------------------------- !if "$(USERDEFINES)" != "" AUSERDEFINES = -d$(USERDEFINES:;= -d) !else AUSERDEFINES = !endif !if !$d(BCC32) BCC32 = bcc32 !endif !if !$d(CPP32) CPP32 = cpp32 !endif !if !$d(DCC32) DCC32 = dcc32 !endif !if !$d(TASM32) TASM32 = tasm32 !endif !if !$d(LINKER) LINKER = ilink32 !endif !if !$d(BRCC32) BRCC32 = brcc32 !endif # --------------------------------------------------------------------------- !if $d(PATHCPP) .PATH.CPP = $(PATHCPP) .PATH.C = $(PATHCPP) !endif !if $d(PATHPAS) .PATH.PAS = $(PATHPAS) !endif !if $d(PATHASM) .PATH.ASM = $(PATHASM) !endif !if $d(PATHRC) .PATH.RC = $(PATHRC) !endif # --------------------------------------------------------------------------- $(PROJECT): $(IDLGENFILES) $(OBJFILES) $(RESDEPEN) $(DEFFILE) $(BCB)\BIN\$(LINKER) @&&! $(LFLAGS) -L$(LIBPATH) + $(ALLOBJ), + $(PROJECT),, + $(ALLLIB), + $(DEFFILE), + $(ALLRES) ! # --------------------------------------------------------------------------- .pas.hpp: $(BCB)\BIN\$(DCC32) $(PFLAGS) -U$(INCLUDEPATH) -D$(USERDEFINES);$(SYSDEFINES) -O$(INCLUDEPATH) --BCB {$< } .pas.obj: $(BCB)\BIN\$(DCC32) $(PFLAGS) -U$(INCLUDEPATH) -D$(USERDEFINES);$(SYSDEFINES) -O$(INCLUDEPATH) --BCB {$< } .cpp.obj: $(BCB)\BIN\$(BCC32) $(CFLAG1) $(WARNINGS) -I$(INCLUDEPATH) -D$(USERDEFINES);$(SYSDEFINES) -n$(@D) {$< } .c.obj: $(BCB)\BIN\$(BCC32) $(CFLAG1) $(WARNINGS) -I$(INCLUDEPATH) -D$(USERDEFINES);$(SYSDEFINES) -n$(@D) {$< } .c.i: $(BCB)\BIN\$(CPP32) $(CFLAG1) $(WARNINGS) -I$(INCLUDEPATH) -D$(USERDEFINES);$(SYSDEFINES) -n. {$< } .cpp.i: $(BCB)\BIN\$(CPP32) $(CFLAG1) $(WARNINGS) -I$(INCLUDEPATH) -D$(USERDEFINES);$(SYSDEFINES) -n. {$< } .asm.obj: $(BCB)\BIN\$(TASM32) $(AFLAGS) -i$(INCLUDEPATH:;= -i) $(AUSERDEFINES) -d$(SYSDEFINES:;= -d) $<, $@ .rc.res: $(BCB)\BIN\$(BRCC32) $(RFLAGS) -I$(INCLUDEPATH) -D$(USERDEFINES);$(SYSDEFINES) -fo$@ $< # --------------------------------------------------------------------------- tla-1.3.5+dfsg/src/expat/bcb5/expatw.mak0000644000175000017500000001206510457621771016500 0ustar useruser# --------------------------------------------------------------------------- !if !$d(BCB) BCB = $(MAKEDIR)\.. !endif # --------------------------------------------------------------------------- # IDE SECTION # --------------------------------------------------------------------------- # The following section of the project makefile is managed by the BCB IDE. # It is recommended to use the IDE to change any of the values in this # section. # --------------------------------------------------------------------------- VERSION = BCB.05.03 # --------------------------------------------------------------------------- PROJECT = Release\libexpatw_mtd.dll OBJFILES = Release\obj\libexpatw\xmlparse.obj Release\obj\libexpatw\xmlrole.obj \ Release\obj\libexpatw\xmltok.obj RESFILES = MAINSOURCE = expatw.bpf RESDEPEN = $(RESFILES) LIBFILES = IDLFILES = IDLGENFILES = LIBRARIES = PACKAGES = VCL50.bpi VCLX50.bpi bcbsmp50.bpi QRPT50.bpi VCLDB50.bpi VCLBDE50.bpi \ ibsmp50.bpi VCLDBX50.bpi TEEUI50.bpi TEEDB50.bpi TEE50.bpi TEEQR50.bpi \ VCLIB50.bpi bcbie50.bpi VCLIE50.bpi INETDB50.bpi INET50.bpi NMFAST50.bpi \ dclocx50.bpi bcb2kaxserver50.bpi dclusr50.bpi SPARELIBS = DEFFILE = libexpatw_mtd.def # --------------------------------------------------------------------------- PATHCPP = .;..\lib PATHASM = .; PATHPAS = .; PATHRC = .; DEBUGLIBPATH = $(BCB)\lib\debug RELEASELIBPATH = $(BCB)\lib\release USERDEFINES = _WINDOWS;WIN32;NDEBUG;_USRDLL;COMPILED_FROM_DSP;XML_UNICODE_WCHAR_T SYSDEFINES = _NO_VCL;_ASSERTE;NO_STRICT;_RTLDLL INCLUDEPATH = ..\lib;$(BCB)\include LIBPATH = ..\lib;$(BCB)\lib;$(RELEASELIBPATH) WARNINGS= -w-rch -w-par -w-8027 -w-8026 -w-ccc # --------------------------------------------------------------------------- CFLAG1 = -WD -O2 -X- -a8 -b -k- -vi -q -tWM -c -tWD IDLCFLAGS = -I$(BCB)\include PFLAGS = -N2Release\obj\libexpatw -N0Release\obj\libexpatw -$Y- -$L- -$D- RFLAGS = /l 0x409 /d "NDEBUG" /i$(BCB)\include AFLAGS = /mx /w2 /zn LFLAGS = -IRelease\obj\libexpatw -D"" -aa -Tpd -x -Gn -Gi -w -q # --------------------------------------------------------------------------- ALLOBJ = c0d32w.obj $(OBJFILES) ALLRES = $(RESFILES) ALLLIB = $(LIBFILES) $(LIBRARIES) import32.lib cw32mti.lib # --------------------------------------------------------------------------- !ifdef IDEOPTIONS [Version Info] IncludeVerInfo=0 AutoIncBuild=0 MajorVer=1 MinorVer=0 Release=0 Build=0 Debug=0 PreRelease=0 Special=0 Private=0 DLL=0 [Version Info Keys] CompanyName= FileDescription= FileVersion=1.0.0.0 InternalName= LegalCopyright= LegalTrademarks= OriginalFilename= ProductName= ProductVersion=1.0.0.0 Comments= [Debugging] DebugSourceDirs=$(BCB)\source\vcl !endif # --------------------------------------------------------------------------- # MAKE SECTION # --------------------------------------------------------------------------- # This section of the project file is not used by the BCB IDE. It is for # the benefit of building from the command-line using the MAKE utility. # --------------------------------------------------------------------------- .autodepend # --------------------------------------------------------------------------- !if "$(USERDEFINES)" != "" AUSERDEFINES = -d$(USERDEFINES:;= -d) !else AUSERDEFINES = !endif !if !$d(BCC32) BCC32 = bcc32 !endif !if !$d(CPP32) CPP32 = cpp32 !endif !if !$d(DCC32) DCC32 = dcc32 !endif !if !$d(TASM32) TASM32 = tasm32 !endif !if !$d(LINKER) LINKER = ilink32 !endif !if !$d(BRCC32) BRCC32 = brcc32 !endif # --------------------------------------------------------------------------- !if $d(PATHCPP) .PATH.CPP = $(PATHCPP) .PATH.C = $(PATHCPP) !endif !if $d(PATHPAS) .PATH.PAS = $(PATHPAS) !endif !if $d(PATHASM) .PATH.ASM = $(PATHASM) !endif !if $d(PATHRC) .PATH.RC = $(PATHRC) !endif # --------------------------------------------------------------------------- $(PROJECT): $(IDLGENFILES) $(OBJFILES) $(RESDEPEN) $(DEFFILE) $(BCB)\BIN\$(LINKER) @&&! $(LFLAGS) -L$(LIBPATH) + $(ALLOBJ), + $(PROJECT),, + $(ALLLIB), + $(DEFFILE), + $(ALLRES) ! # --------------------------------------------------------------------------- .pas.hpp: $(BCB)\BIN\$(DCC32) $(PFLAGS) -U$(INCLUDEPATH) -D$(USERDEFINES);$(SYSDEFINES) -O$(INCLUDEPATH) --BCB {$< } .pas.obj: $(BCB)\BIN\$(DCC32) $(PFLAGS) -U$(INCLUDEPATH) -D$(USERDEFINES);$(SYSDEFINES) -O$(INCLUDEPATH) --BCB {$< } .cpp.obj: $(BCB)\BIN\$(BCC32) $(CFLAG1) $(WARNINGS) -I$(INCLUDEPATH) -D$(USERDEFINES);$(SYSDEFINES) -n$(@D) {$< } .c.obj: $(BCB)\BIN\$(BCC32) $(CFLAG1) $(WARNINGS) -I$(INCLUDEPATH) -D$(USERDEFINES);$(SYSDEFINES) -n$(@D) {$< } .c.i: $(BCB)\BIN\$(CPP32) $(CFLAG1) $(WARNINGS) -I$(INCLUDEPATH) -D$(USERDEFINES);$(SYSDEFINES) -n. {$< } .cpp.i: $(BCB)\BIN\$(CPP32) $(CFLAG1) $(WARNINGS) -I$(INCLUDEPATH) -D$(USERDEFINES);$(SYSDEFINES) -n. {$< } .asm.obj: $(BCB)\BIN\$(TASM32) $(AFLAGS) -i$(INCLUDEPATH:;= -i) $(AUSERDEFINES) -d$(SYSDEFINES:;= -d) $<, $@ .rc.res: $(BCB)\BIN\$(BRCC32) $(RFLAGS) -I$(INCLUDEPATH) -D$(USERDEFINES);$(SYSDEFINES) -fo$@ $< # --------------------------------------------------------------------------- tla-1.3.5+dfsg/src/expat/bcb5/outline.bpf0000644000175000017500000000023110457621771016636 0ustar useruserUSEUNIT("..\examples\outline.c"); USELIB("Release\libexpat_mtd.lib"); //--------------------------------------------------------------------------- main tla-1.3.5+dfsg/src/expat/bcb5/README.txt0000644000175000017500000001031510457621771016170 0ustar useruser Using a Borland compiler product The files in this directory support using both the free Borland command-line compiler tools and the Borland C++ Builder IDE. The project files have been tested with both versions 5 and 6 of the C++ Builder product. Using the free BCC32 command line compiler After downloading and installing the free C++ Builder commandline version, perform the following steps (assuming it was installed under C:\Borland\BCC55): 1) Add "C:\Borland\BCC55\BIN" to your path 2) Set the environment variable BCB to "C:\Borland\BCC55". 3) edit makefile.mak: enable or comment out the appropriate commands under clean & distclean, depending on whether your OS can use deltree /y or del /s/f/q. After that, you should simply cd to the bcb5 directory in your Expat directory tree (same structure as CVS) and run "make all" or just "make". Naming The libraries have the base name "libexpat" followed optionally by an "s" (static) or a "w" (unicode version), then an underscore and optionally "mt" (multi-threaded) and "d" (dynamic RTL). To change the name of the library a project file produces, edit the project option source (see step 1 under Unicode below) and change the name contained in the PROJECT tag. In a make file, change the value assigned to the PROJECT variable. Also, the LIBRARY entry in the .def file has to be changed to correspond to the new executable name. Unicode Considerations There are no facilities in the BCB 5 GUI to create a unicode-enabled application. Fortunately, it is not hard to do by hand. 1. The startup .obj system file must be changed to the unicode version. Go to Project|Edit Option Source, and scroll down to the ALLOBJ tag. Change c0x32.obj to c0x32w.obj. Editing this file can be quirky, but usually the following kludge will make the change stick. Close and save the file (CTRL-F4) then open the options dialog (CTRL-Shift-F11), then click OK on the dialog immediately without changing anything in it. If this doesn't work, you will have to close the project completely and edit the .bpr file by hand. If you are using a make file, just change the startup .obj file assigned to the ALLOBJ variable. 2. Add the macro define XML_UNICODE_WCHAR_T. In the GUI that goes in the options dialog, Directories/Conditionals tab, in the Conditional define box. In a make file, put it in the USERDEFINES variable. 3. Of course, your code has to be written for unicode. As a start, the "main" function is called "wmain". The tchar macros are an interesting way to write code that can easily switch between unicode and utf-8. If these macros are used, then simply adding the conditional define _UNICODE as well as XML_UNICODE_WCHAR_T will bring in the unicode versions of the tchar macros. Otherwise the utf-8 versions are used. xmlwf uses its own versions of the tchar macros which are switched on and off by the XML_UNICODE macro, which itself is set by the XML_UNICODE_WCHAR_T define. Threading The libexpat libraries are all built to link with the multi-threaded dynamic RTL's. That means they require CC32xxMT.DLL present on the installation target. To create single-threaded libs, do the following: 1. The compiler option for multi-threading must be turned off. Following the instructions above to edit the option source, remove the -tWM option from the CFLAG1 tag. In a make file, remove it from the CFLAG1 variable. 2. The single threaded RTL must be called. change the RTL in the ALLLIB tag or variable (GUI or makefile repectively) to the version without the "mt" in the name. For example, change cw32mti.lib to cw32i.lib. Static RTL's To build the libs with static RTL's do the following, 1. For the static expatlibs, in the Tlib tab on the options dialog, uncheck the "Use dynamic RTL" box. For the dynamic expatlibs, in the Linker tab on the options dialog, uncheck "Use dynamic RTL". If you are using a make file, remove the _RTLDLL assignment to the SYSDEFINES variable, and change the RTL to the version without an "i" in the ALLLIB variable. For example, cw32mti.lib would become cw32mt.lib. tla-1.3.5+dfsg/src/expat/bcb5/expat.mak0000644000175000017500000001202410457621771016304 0ustar useruser# --------------------------------------------------------------------------- !if !$d(BCB) BCB = $(MAKEDIR)\.. !endif # --------------------------------------------------------------------------- # IDE SECTION # --------------------------------------------------------------------------- # The following section of the project makefile is managed by the BCB IDE. # It is recommended to use the IDE to change any of the values in this # section. # --------------------------------------------------------------------------- VERSION = BCB.05.03 # --------------------------------------------------------------------------- PROJECT = Release\libexpat_mtd.dll OBJFILES = Release\obj\libexpat\xmlparse.obj Release\obj\libexpat\xmlrole.obj \ Release\obj\libexpat\xmltok.obj RESFILES = MAINSOURCE = expat.bpf RESDEPEN = $(RESFILES) LIBFILES = IDLFILES = IDLGENFILES = LIBRARIES = PACKAGES = VCL50.bpi VCLX50.bpi bcbsmp50.bpi QRPT50.bpi VCLDB50.bpi VCLBDE50.bpi \ ibsmp50.bpi VCLDBX50.bpi TEEUI50.bpi TEEDB50.bpi TEE50.bpi TEEQR50.bpi \ VCLIB50.bpi bcbie50.bpi VCLIE50.bpi INETDB50.bpi INET50.bpi NMFAST50.bpi \ dclocx50.bpi bcb2kaxserver50.bpi dclusr50.bpi SPARELIBS = DEFFILE = libexpat_mtd.def # --------------------------------------------------------------------------- PATHCPP = .;..\lib PATHASM = .; PATHPAS = .; PATHRC = .; DEBUGLIBPATH = $(BCB)\lib\debug RELEASELIBPATH = $(BCB)\lib\release USERDEFINES = _WINDOWS;WIN32;NDEBUG;_USRDLL;COMPILED_FROM_DSP SYSDEFINES = _NO_VCL;_ASSERTE;NO_STRICT;_RTLDLL INCLUDEPATH = ..\lib;$(BCB)\include LIBPATH = ..\lib;$(BCB)\lib;$(RELEASELIBPATH) WARNINGS= -w-rch -w-par -w-8027 -w-8026 -w-ccc # --------------------------------------------------------------------------- CFLAG1 = -WD -O2 -X- -a8 -b -k- -vi -q -tWM -c -tWD IDLCFLAGS = -I$(BCB)\include PFLAGS = -N2Release\obj\libexpat -N0Release\obj\libexpat -$Y- -$L- -$D- RFLAGS = /l 0x409 /d "NDEBUG" /i$(BCB)\include AFLAGS = /mx /w2 /zn LFLAGS = -IRelease\obj\libexpat -D"" -aa -Tpd -x -Gn -Gi -q # --------------------------------------------------------------------------- ALLOBJ = c0d32.obj $(OBJFILES) ALLRES = $(RESFILES) ALLLIB = $(LIBFILES) $(LIBRARIES) import32.lib cw32mti.lib # --------------------------------------------------------------------------- !ifdef IDEOPTIONS [Version Info] IncludeVerInfo=0 AutoIncBuild=0 MajorVer=1 MinorVer=0 Release=0 Build=0 Debug=0 PreRelease=0 Special=0 Private=0 DLL=0 [Version Info Keys] CompanyName= FileDescription= FileVersion=1.0.0.0 InternalName= LegalCopyright= LegalTrademarks= OriginalFilename= ProductName= ProductVersion=1.0.0.0 Comments= [Debugging] DebugSourceDirs=$(BCB)\source\vcl !endif # --------------------------------------------------------------------------- # MAKE SECTION # --------------------------------------------------------------------------- # This section of the project file is not used by the BCB IDE. It is for # the benefit of building from the command-line using the MAKE utility. # --------------------------------------------------------------------------- .autodepend # --------------------------------------------------------------------------- !if "$(USERDEFINES)" != "" AUSERDEFINES = -d$(USERDEFINES:;= -d) !else AUSERDEFINES = !endif !if !$d(BCC32) BCC32 = bcc32 !endif !if !$d(CPP32) CPP32 = cpp32 !endif !if !$d(DCC32) DCC32 = dcc32 !endif !if !$d(TASM32) TASM32 = tasm32 !endif !if !$d(LINKER) LINKER = ilink32 !endif !if !$d(BRCC32) BRCC32 = brcc32 !endif # --------------------------------------------------------------------------- !if $d(PATHCPP) .PATH.CPP = $(PATHCPP) .PATH.C = $(PATHCPP) !endif !if $d(PATHPAS) .PATH.PAS = $(PATHPAS) !endif !if $d(PATHASM) .PATH.ASM = $(PATHASM) !endif !if $d(PATHRC) .PATH.RC = $(PATHRC) !endif # --------------------------------------------------------------------------- $(PROJECT): $(IDLGENFILES) $(OBJFILES) $(RESDEPEN) $(DEFFILE) $(BCB)\BIN\$(LINKER) @&&! $(LFLAGS) -L$(LIBPATH) + $(ALLOBJ), + $(PROJECT),, + $(ALLLIB), + $(DEFFILE), + $(ALLRES) ! # --------------------------------------------------------------------------- .pas.hpp: $(BCB)\BIN\$(DCC32) $(PFLAGS) -U$(INCLUDEPATH) -D$(USERDEFINES);$(SYSDEFINES) -O$(INCLUDEPATH) --BCB {$< } .pas.obj: $(BCB)\BIN\$(DCC32) $(PFLAGS) -U$(INCLUDEPATH) -D$(USERDEFINES);$(SYSDEFINES) -O$(INCLUDEPATH) --BCB {$< } .cpp.obj: $(BCB)\BIN\$(BCC32) $(CFLAG1) $(WARNINGS) -I$(INCLUDEPATH) -D$(USERDEFINES);$(SYSDEFINES) -n$(@D) {$< } .c.obj: $(BCB)\BIN\$(BCC32) $(CFLAG1) $(WARNINGS) -I$(INCLUDEPATH) -D$(USERDEFINES);$(SYSDEFINES) -n$(@D) {$< } .c.i: $(BCB)\BIN\$(CPP32) $(CFLAG1) $(WARNINGS) -I$(INCLUDEPATH) -D$(USERDEFINES);$(SYSDEFINES) -n. {$< } .cpp.i: $(BCB)\BIN\$(CPP32) $(CFLAG1) $(WARNINGS) -I$(INCLUDEPATH) -D$(USERDEFINES);$(SYSDEFINES) -n. {$< } .asm.obj: $(BCB)\BIN\$(TASM32) $(AFLAGS) -i$(INCLUDEPATH:;= -i) $(AUSERDEFINES) -d$(SYSDEFINES:;= -d) $<, $@ .rc.res: $(BCB)\BIN\$(BRCC32) $(RFLAGS) -I$(INCLUDEPATH) -D$(USERDEFINES);$(SYSDEFINES) -fo$@ $< # --------------------------------------------------------------------------- tla-1.3.5+dfsg/src/expat/bcb5/expatw_static.bpf0000644000175000017500000000026510457621771020045 0ustar useruserUSEUNIT("..\lib\xmlparse.c"); USEUNIT("..\lib\xmlrole.c"); USEUNIT("..\lib\xmltok.c"); //--------------------------------------------------------------------------- #define Library tla-1.3.5+dfsg/src/expat/bcb5/elements.bpf0000644000175000017500000000023310457621771016775 0ustar useruserUSEUNIT("..\examples\elements.c"); USELIB("Release\libexpats_mtd.lib"); //--------------------------------------------------------------------------- main tla-1.3.5+dfsg/src/expat/bcb5/all_projects.bpg0000644000175000017500000000310610457621771017645 0ustar useruser#------------------------------------------------------------------------------ VERSION = BWS.01 #------------------------------------------------------------------------------ !ifndef ROOT ROOT = $(MAKEDIR)\.. !endif #------------------------------------------------------------------------------ MAKE = $(ROOT)\bin\make.exe -$(MAKEFLAGS) -f$** DCC = $(ROOT)\bin\dcc32.exe $** BRCC = $(ROOT)\bin\brcc32.exe $** #------------------------------------------------------------------------------ PROJECTS = setup libexpat_mtd.dll libexpats_mtd.lib libexpatw_mtd.dll \ libexpatws_mtd.lib elements.exe outline.exe xmlwf.exe #------------------------------------------------------------------------------ default: $(PROJECTS) #------------------------------------------------------------------------------ libexpat_mtd.dll: expat.bpr $(ROOT)\bin\bpr2mak $** $(ROOT)\bin\make -$(MAKEFLAGS) -f$*.mak libexpats_mtd.lib: expat_static.bpr $(ROOT)\bin\bpr2mak -t$(ROOT)\bin\deflib.bmk $** $(ROOT)\bin\make -$(MAKEFLAGS) -f$*.mak libexpatw_mtd.dll: expatw.bpr $(ROOT)\bin\bpr2mak $** $(ROOT)\bin\make -$(MAKEFLAGS) -f$*.mak libexpatws_mtd.lib: expatw_static.bpr $(ROOT)\bin\bpr2mak -t$(ROOT)\bin\deflib.bmk $** $(ROOT)\bin\make -$(MAKEFLAGS) -f$*.mak elements.exe: elements.bpr $(ROOT)\bin\bpr2mak $** $(ROOT)\bin\make -$(MAKEFLAGS) -f$*.mak outline.exe: outline.bpr $(ROOT)\bin\bpr2mak $** $(ROOT)\bin\make -$(MAKEFLAGS) -f$*.mak xmlwf.exe: xmlwf.bpr $(ROOT)\bin\bpr2mak $** $(ROOT)\bin\make -$(MAKEFLAGS) -f$*.mak setup: setup.bat call $** tla-1.3.5+dfsg/src/expat/bcb5/expatw.bpf0000644000175000017500000000033010457621771016467 0ustar useruserUSEUNIT("..\lib\xmlparse.c"); USEUNIT("..\lib\xmlrole.c"); USEUNIT("..\lib\xmltok.c"); USEDEF("libexpatw_mtd.def"); //--------------------------------------------------------------------------- #define DllEntryPoint tla-1.3.5+dfsg/src/expat/bcb5/makefile.mak0000644000175000017500000000102610457621771016740 0ustar useruserall: setup expat expatw expat_static expatw_static elements outline xmlwf setup: setup expat: make -l -fexpat.mak expatw: make -l -fexpatw.mak expat_static: make -l -fexpat_static.mak expatw_static: make -l -fexpatw_static.mak elements: make -l -felements.mak outline: make -l -foutline.mak xmlwf: make -l -fxmlwf.mak clean: # works on Win98/ME # deltree /y release\obj # works on WinNT/2000 del /s/f/q release\obj distclean: # works on Win98/ME # deltree /y release\*.* # works on WinNT/2000 del /s/f/q release\* tla-1.3.5+dfsg/src/expat/bcb5/outline.mak0000644000175000017500000001166410457621771016653 0ustar useruser# --------------------------------------------------------------------------- !if !$d(BCB) BCB = $(MAKEDIR)\.. !endif # --------------------------------------------------------------------------- # IDE SECTION # --------------------------------------------------------------------------- # The following section of the project makefile is managed by the BCB IDE. # It is recommended to use the IDE to change any of the values in this # section. # --------------------------------------------------------------------------- VERSION = BCB.05.03 # --------------------------------------------------------------------------- PROJECT = Release\outline.exe OBJFILES = Release\obj\examples\outline.obj RESFILES = MAINSOURCE = outline.bpf RESDEPEN = $(RESFILES) LIBFILES = Release\libexpat_mtd.lib IDLFILES = IDLGENFILES = LIBRARIES = PACKAGES = VCL50.bpi VCLX50.bpi bcbsmp50.bpi QRPT50.bpi VCLDB50.bpi VCLBDE50.bpi \ ibsmp50.bpi VCLDBX50.bpi TEEUI50.bpi TEEDB50.bpi TEE50.bpi TEEQR50.bpi \ VCLIB50.bpi bcbie50.bpi VCLIE50.bpi INETDB50.bpi INET50.bpi NMFAST50.bpi \ dclocx50.bpi bcb2kaxserver50.bpi dclusr50.bpi SPARELIBS = DEFFILE = # --------------------------------------------------------------------------- PATHCPP = .;..\examples PATHASM = .; PATHPAS = .; PATHRC = .; DEBUGLIBPATH = $(BCB)\lib\debug RELEASELIBPATH = $(BCB)\lib\release USERDEFINES = WIN32;NDEBUG;_CONSOLE SYSDEFINES = _NO_VCL;_ASSERTE;NO_STRICT;_RTLDLL INCLUDEPATH = ..\examples;$(BCB)\include LIBPATH = ..\examples;$(BCB)\lib;$(RELEASELIBPATH) WARNINGS= -w-par -w-8027 -w-8026 # --------------------------------------------------------------------------- CFLAG1 = -O2 -X- -a8 -b -k- -vi -q -tWM -I..\lib -c IDLCFLAGS = -I$(BCB)\include PFLAGS = -N2Release\obj\examples -N0Release\obj\examples -$Y- -$L- -$D- RFLAGS = /l 0x409 /d "NDEBUG" /i$(BCB)\include AFLAGS = /mx /w2 /zn LFLAGS = -IRelease\obj\examples -D"" -ap -Tpe -x -Gn -q # --------------------------------------------------------------------------- ALLOBJ = c0x32.obj $(OBJFILES) ALLRES = $(RESFILES) ALLLIB = $(LIBFILES) $(LIBRARIES) import32.lib cw32mti.lib # --------------------------------------------------------------------------- !ifdef IDEOPTIONS [Version Info] IncludeVerInfo=0 AutoIncBuild=0 MajorVer=1 MinorVer=0 Release=0 Build=0 Debug=0 PreRelease=0 Special=0 Private=0 DLL=0 [Version Info Keys] CompanyName= FileDescription= FileVersion=1.0.0.0 InternalName= LegalCopyright= LegalTrademarks= OriginalFilename= ProductName= ProductVersion=1.0.0.0 Comments= [Debugging] DebugSourceDirs=$(BCB)\source\vcl !endif # --------------------------------------------------------------------------- # MAKE SECTION # --------------------------------------------------------------------------- # This section of the project file is not used by the BCB IDE. It is for # the benefit of building from the command-line using the MAKE utility. # --------------------------------------------------------------------------- .autodepend # --------------------------------------------------------------------------- !if "$(USERDEFINES)" != "" AUSERDEFINES = -d$(USERDEFINES:;= -d) !else AUSERDEFINES = !endif !if !$d(BCC32) BCC32 = bcc32 !endif !if !$d(CPP32) CPP32 = cpp32 !endif !if !$d(DCC32) DCC32 = dcc32 !endif !if !$d(TASM32) TASM32 = tasm32 !endif !if !$d(LINKER) LINKER = ilink32 !endif !if !$d(BRCC32) BRCC32 = brcc32 !endif # --------------------------------------------------------------------------- !if $d(PATHCPP) .PATH.CPP = $(PATHCPP) .PATH.C = $(PATHCPP) !endif !if $d(PATHPAS) .PATH.PAS = $(PATHPAS) !endif !if $d(PATHASM) .PATH.ASM = $(PATHASM) !endif !if $d(PATHRC) .PATH.RC = $(PATHRC) !endif # --------------------------------------------------------------------------- $(PROJECT): $(IDLGENFILES) $(OBJFILES) $(RESDEPEN) $(DEFFILE) $(BCB)\BIN\$(LINKER) @&&! $(LFLAGS) -L$(LIBPATH) + $(ALLOBJ), + $(PROJECT),, + $(ALLLIB), + $(DEFFILE), + $(ALLRES) ! # --------------------------------------------------------------------------- .pas.hpp: $(BCB)\BIN\$(DCC32) $(PFLAGS) -U$(INCLUDEPATH) -D$(USERDEFINES);$(SYSDEFINES) -O$(INCLUDEPATH) --BCB {$< } .pas.obj: $(BCB)\BIN\$(DCC32) $(PFLAGS) -U$(INCLUDEPATH) -D$(USERDEFINES);$(SYSDEFINES) -O$(INCLUDEPATH) --BCB {$< } .cpp.obj: $(BCB)\BIN\$(BCC32) $(CFLAG1) $(WARNINGS) -I$(INCLUDEPATH) -D$(USERDEFINES);$(SYSDEFINES) -n$(@D) {$< } .c.obj: $(BCB)\BIN\$(BCC32) $(CFLAG1) $(WARNINGS) -I$(INCLUDEPATH) -D$(USERDEFINES);$(SYSDEFINES) -n$(@D) {$< } .c.i: $(BCB)\BIN\$(CPP32) $(CFLAG1) $(WARNINGS) -I$(INCLUDEPATH) -D$(USERDEFINES);$(SYSDEFINES) -n. {$< } .cpp.i: $(BCB)\BIN\$(CPP32) $(CFLAG1) $(WARNINGS) -I$(INCLUDEPATH) -D$(USERDEFINES);$(SYSDEFINES) -n. {$< } .asm.obj: $(BCB)\BIN\$(TASM32) $(AFLAGS) -i$(INCLUDEPATH:;= -i) $(AUSERDEFINES) -d$(SYSDEFINES:;= -d) $<, $@ .rc.res: $(BCB)\BIN\$(BRCC32) $(RFLAGS) -I$(INCLUDEPATH) -D$(USERDEFINES);$(SYSDEFINES) -fo$@ $< # --------------------------------------------------------------------------- tla-1.3.5+dfsg/src/expat/bcb5/expat_static.bpf0000644000175000017500000000026510457621771017656 0ustar useruserUSEUNIT("..\lib\xmlparse.c"); USEUNIT("..\lib\xmlrole.c"); USEUNIT("..\lib\xmltok.c"); //--------------------------------------------------------------------------- #define Library tla-1.3.5+dfsg/src/expat/bcb5/expatw_static.bpr0000644000175000017500000001066710457621771020070 0ustar useruser [Version Info] IncludeVerInfo=0 AutoIncBuild=0 MajorVer=1 MinorVer=0 Release=0 Build=0 Debug=0 PreRelease=0 Special=0 Private=0 DLL=0 Locale=1033 CodePage=1252 [Version Info Keys] CompanyName= FileDescription= FileVersion=1.0.0.0 InternalName= LegalCopyright= LegalTrademarks= OriginalFilename= ProductName= ProductVersion=1.0.0.0 Comments= [HistoryLists\hlIncludePath] Count=4 Item0=..\lib;$(BCB)\include Item1=$(BCB)\include Item2=$(BCB)\include;$(BCB)\include\mfc;$(BCB)\include\atl Item3=$(BCB)\include;$(BCB)\include\mfc;$(BCB)\include\atl; [HistoryLists\hlLibraryPath] Count=5 Item0=..\lib;$(BCB)\lib;$(RELEASELIBPATH) Item1=..\lib;$(BCB)\lib;..\lib\$(RELEASELIBPATH) Item2=$(BCB)\lib;$(RELEASELIBPATH) Item3=$(BCB)\lib;$(RELEASELIBPATH);$(BCB)\lib\psdk Item4=$(BCB)\lib;$(RELEASELIBPATH);;$(BCB)\lib\psdk; [HistoryLists\hlDebugSourcePath] Count=1 Item0=$(BCB)\source\vcl [HistoryLists\hlConditionals] Count=15 Item0=_WINDOWS;WIN32;NDEBUG;_LIB;COMPILED_FROM_DSP;XML_STATIC;XML_UNICODE_WCHAR_T Item1=_WINDOWS;WIN32;NDEBUG;_DEBUG;_LIB;COMPILED_FROM_DSP;XML_STATIC;XML_UNICODE_WCHAR_T Item2=WIN32;_WINDOWS;NDEBUG;_DEBUG;_LIB;COMPILED_FROM_DSP;XML_STATIC;XML_UNICODE_WCHAR_T Item3=WIN32;_WINDOWS;NDEBUG;_DEBUG;_LIB;XML_STATIC;COMPILED_FROM_DSP;XML_UNICODE_WCHAR_T Item4=WIN32;_WINDOWS;NDEBUG;_LIB;COMPILED_FROM_DSP;_DEBUG;XML_UNICODE_WCHAR_T Item5=WIN32;_WINDOWS;NDEBUG;_UNICODE;_LIB;COMPILED_FROM_DSP;XML_UNICODE_WCHAR_T;_DEBUG Item6=WIN32;_WINDOWS;NDEBUG;_UNICODE;_LIB;COMPILED_FROM_DSP;XML_UNICODE_WCHAR_T;_DEBUG;__cplusplus Item7=WIN32;_WINDOWS;NDEBUG;_UNICODE;_LIB;COMPILED_FROM_DSP;XML_UNICODE;_DEBUG Item8=WIN32;_WINDOWS;NDEBUG;_MBCS;_LIB;COMPILED_FROM_DSP;XML_UNICODE;_DEBUG Item9=WIN32;_WINDOWS;NDEBUG;_MBCS;_LIB;COMPILED_FROM_DSP;XML_UNICODE_WCHAR_T;_DEBUG;__WCHAR_T Item10=WIN32;_WINDOWS;NDEBUG;_MBCS;_LIB;COMPILED_FROM_DSP;XML_UNICODE_WCHAR_T;_DEBUG;_UNICODE Item11=WIN32;_WINDOWS;NDEBUG;_MBCS;_LIB;COMPILED_FROM_DSP;XML_UNICODE;_DEBUG;_UNICODE Item12=WIN32;_WINDOWS;NDEBUG;_MBCS;_LIB;COMPILED_FROM_DSP;XML_UNICODE_WCHAR_T;_DEBUG Item13=WIN32;_WINDOWS;NDEBUG;_MBCS;_LIB;COMPILED_FROM_DSP;XML_UNICODE_WCHAR_T Item14=WIN32;_WINDOWS;NDEBUG;_MBCS;_LIB;COMPILED_FROM_DSP;XML_UNICODE_WCHAR_T;XML_UNICODE [HistoryLists\hlIntOutputDir] Count=6 Item0=Release\obj\libexpatw_static Item1=Release\obj\libexpat_static Item2=Release\obj\mts Item3=Release\obj\mt Item4=..\lib\Release-w_static Item5=Release-w_static [HistoryLists\hlFinalOutputDir] Count=3 Item0=Release\ Item1=Release Item2=Release-w_static\ [HistoryLists\hlTlibPageSize] Count=1 Item0=0x0010 [Debugging] DebugSourceDirs= [Parameters] RunParams= HostApplication= RemoteHost= RemotePath= RemoteDebug=0 [Compiler] ShowInfoMsgs=0 LinkDebugVcl=0 LinkCGLIB=0 [Language] ActiveLang= ProjectLang= RootDir= tla-1.3.5+dfsg/src/expat/bcb5/expat_static.mak0000644000175000017500000001132610457621771017657 0ustar useruser# --------------------------------------------------------------------------- !if !$d(BCB) BCB = $(MAKEDIR)\.. !endif # --------------------------------------------------------------------------- # IDE SECTION # --------------------------------------------------------------------------- # The following section of the project makefile is managed by the BCB IDE. # It is recommended to use the IDE to change any of the values in this # section. # --------------------------------------------------------------------------- VERSION = BCB.05.03 # --------------------------------------------------------------------------- PROJECT = Release\libexpats_mtd.lib OBJFILES = Release\obj\libexpat_static\xmlparse.obj \ Release\obj\libexpat_static\xmlrole.obj \ Release\obj\libexpat_static\xmltok.obj RESFILES = MAINSOURCE = expat_static.bpf RESDEPEN = $(RESFILES) LIBFILES = IDLFILES = IDLGENFILES = LIBRARIES = PACKAGES = SPARELIBS = DEFFILE = # --------------------------------------------------------------------------- PATHCPP = .;..\lib PATHASM = .; PATHPAS = .; PATHRC = .; LINKER = TLib DEBUGLIBPATH = $(BCB)\lib\debug RELEASELIBPATH = $(BCB)\lib\release USERDEFINES = _WINDOWS;WIN32;NDEBUG;_LIB;COMPILED_FROM_DSP;XML_STATIC SYSDEFINES = _NO_VCL;_ASSERTE;NO_STRICT;_RTLDLL INCLUDEPATH = ..\lib;$(BCB)\include LIBPATH = ..\lib;$(BCB)\lib;$(RELEASELIBPATH) WARNINGS = -w-rch -w-par -w-8027 -w-8026 -w-ccc LISTFILE = # --------------------------------------------------------------------------- CFLAG1 = -O2 -X- -a8 -b -k- -vi -q -tWM -c IDLCFLAGS = -I$(BCB)\include PFLAGS = -N2Release\obj\libexpat_static -N0Release\obj\libexpat_static -$Y- -$L- -$D- RFLAGS = /l 0x409 /d "NDEBUG" /i$(BCB)\include AFLAGS = /mx /w2 /zn LFLAGS = # --------------------------------------------------------------------------- ALLOBJ = $(OBJFILES) ALLRES = $(RESFILES) ALLLIB = $(LIBFILES) $(LIBRARIES) # --------------------------------------------------------------------------- !ifdef IDEOPTIONS [Version Info] IncludeVerInfo=0 AutoIncBuild=0 MajorVer=1 MinorVer=0 Release=0 Build=0 Debug=0 PreRelease=0 Special=0 Private=0 DLL=0 [Version Info Keys] CompanyName= FileDescription= FileVersion=1.0.0.0 InternalName= LegalCopyright= LegalTrademarks= OriginalFilename= ProductName= ProductVersion=1.0.0.0 Comments= [Debugging] DebugSourceDirs=$(BCB)\source\vcl !endif # --------------------------------------------------------------------------- # MAKE SECTION # --------------------------------------------------------------------------- # This section of the project file is not used by the BCB IDE. It is for # the benefit of building from the command-line using the MAKE utility. # --------------------------------------------------------------------------- .autodepend # --------------------------------------------------------------------------- !if "$(USERDEFINES)" != "" AUSERDEFINES = -d$(USERDEFINES:;= -d) !else AUSERDEFINES = !endif !if !$d(BCC32) BCC32 = bcc32 !endif !if !$d(CPP32) CPP32 = cpp32 !endif !if !$d(DCC32) DCC32 = dcc32 !endif !if !$d(TASM32) TASM32 = tasm32 !endif !if !$d(LINKER) LINKER = TLib !endif !if !$d(BRCC32) BRCC32 = brcc32 !endif # --------------------------------------------------------------------------- !if $d(PATHCPP) .PATH.CPP = $(PATHCPP) .PATH.C = $(PATHCPP) !endif !if $d(PATHPAS) .PATH.PAS = $(PATHPAS) !endif !if $d(PATHASM) .PATH.ASM = $(PATHASM) !endif !if $d(PATHRC) .PATH.RC = $(PATHRC) !endif # --------------------------------------------------------------------------- !if "$(LISTFILE)" == "" COMMA = !else COMMA = , !endif $(PROJECT): $(IDLGENFILES) $(OBJFILES) $(RESDEPEN) $(DEFFILE) $(BCB)\BIN\$(LINKER) /u $@ @&&! $(LFLAGS) $? $(COMMA) $(LISTFILE) ! # --------------------------------------------------------------------------- .pas.hpp: $(BCB)\BIN\$(DCC32) $(PFLAGS) -U$(INCLUDEPATH) -D$(USERDEFINES);$(SYSDEFINES) -O$(INCLUDEPATH) --BCB {$< } .pas.obj: $(BCB)\BIN\$(DCC32) $(PFLAGS) -U$(INCLUDEPATH) -D$(USERDEFINES);$(SYSDEFINES) -O$(INCLUDEPATH) --BCB {$< } .cpp.obj: $(BCB)\BIN\$(BCC32) $(CFLAG1) $(WARNINGS) -I$(INCLUDEPATH) -D$(USERDEFINES);$(SYSDEFINES) -n$(@D) {$< } .c.obj: $(BCB)\BIN\$(BCC32) $(CFLAG1) $(WARNINGS) -I$(INCLUDEPATH) -D$(USERDEFINES);$(SYSDEFINES) -n$(@D) {$< } .c.i: $(BCB)\BIN\$(CPP32) $(CFLAG1) $(WARNINGS) -I$(INCLUDEPATH) -D$(USERDEFINES);$(SYSDEFINES) -n. {$< } .cpp.i: $(BCB)\BIN\$(CPP32) $(CFLAG1) $(WARNINGS) -I$(INCLUDEPATH) -D$(USERDEFINES);$(SYSDEFINES) -n. {$< } .asm.obj: $(BCB)\BIN\$(TASM32) $(AFLAGS) -i$(INCLUDEPATH:;= -i) $(AUSERDEFINES) -d$(SYSDEFINES:;= -d) $<, $@ .rc.res: $(BCB)\BIN\$(BRCC32) $(RFLAGS) -I$(INCLUDEPATH) -D$(USERDEFINES);$(SYSDEFINES) -fo$@ $< # --------------------------------------------------------------------------- tla-1.3.5+dfsg/src/expat/bcb5/libexpat_mtd.def0000644000175000017500000001256710457621771017641 0ustar useruser; DEF file for BCB5 LIBRARY LIBEXPAT_MTD DESCRIPTION "Implements an XML parser." EXPORTS _XML_DefaultCurrent @1 _XML_ErrorString @2 _XML_ExpatVersion @3 _XML_ExpatVersionInfo @4 _XML_ExternalEntityParserCreate @5 _XML_GetBase @6 _XML_GetBuffer @7 _XML_GetCurrentByteCount @8 _XML_GetCurrentByteIndex @9 _XML_GetCurrentColumnNumber @10 _XML_GetCurrentLineNumber @11 _XML_GetErrorCode @12 _XML_GetIdAttributeIndex @13 _XML_GetInputContext @14 _XML_GetSpecifiedAttributeCount @15 _XML_Parse @16 _XML_ParseBuffer @17 _XML_ParserCreate @18 _XML_ParserCreateNS @19 _XML_ParserCreate_MM @20 _XML_ParserFree @21 _XML_SetAttlistDeclHandler @22 _XML_SetBase @23 _XML_SetCdataSectionHandler @24 _XML_SetCharacterDataHandler @25 _XML_SetCommentHandler @26 _XML_SetDefaultHandler @27 _XML_SetDefaultHandlerExpand @28 _XML_SetDoctypeDeclHandler @29 _XML_SetElementDeclHandler @30 _XML_SetElementHandler @31 _XML_SetEncoding @32 _XML_SetEndCdataSectionHandler @33 _XML_SetEndDoctypeDeclHandler @34 _XML_SetEndElementHandler @35 _XML_SetEndNamespaceDeclHandler @36 _XML_SetEntityDeclHandler @37 _XML_SetExternalEntityRefHandler @38 _XML_SetExternalEntityRefHandlerArg @39 _XML_SetNamespaceDeclHandler @40 _XML_SetNotStandaloneHandler @41 _XML_SetNotationDeclHandler @42 _XML_SetParamEntityParsing @43 _XML_SetProcessingInstructionHandler @44 _XML_SetReturnNSTriplet @45 _XML_SetStartCdataSectionHandler @46 _XML_SetStartDoctypeDeclHandler @47 _XML_SetStartElementHandler @48 _XML_SetStartNamespaceDeclHandler @49 _XML_SetUnknownEncodingHandler @50 _XML_SetUnparsedEntityDeclHandler @51 _XML_SetUserData @52 _XML_SetXmlDeclHandler @53 _XML_UseParserAsHandlerArg @54 ; added with version 1.95.3 _XML_ParserReset @55 _XML_SetSkippedEntityHandler @56 ; added with version 1.95.5 _XML_GetFeatureList @57 _XML_UseForeignDTD @58 ; added with version 1.95.6 _XML_FreeContentModel @59 _XML_MemMalloc @60 _XML_MemRealloc @61 _XML_MemFree @62 ; added with version 1.95.8 _XML_StopParser @63 _XML_ResumeParser @64 _XML_GetParsingStatus @65 ; Aliases for MS compatible names XML_DefaultCurrent = _XML_DefaultCurrent XML_ErrorString = _XML_ErrorString XML_ExpatVersion = _XML_ExpatVersion XML_ExpatVersionInfo = _XML_ExpatVersionInfo XML_ExternalEntityParserCreate = _XML_ExternalEntityParserCreate XML_GetBase = _XML_GetBase XML_GetBuffer = _XML_GetBuffer XML_GetCurrentByteCount = _XML_GetCurrentByteCount XML_GetCurrentByteIndex = _XML_GetCurrentByteIndex XML_GetCurrentColumnNumber = _XML_GetCurrentColumnNumber XML_GetCurrentLineNumber = _XML_GetCurrentLineNumber XML_GetErrorCode = _XML_GetErrorCode XML_GetIdAttributeIndex = _XML_GetIdAttributeIndex XML_GetInputContext = _XML_GetInputContext XML_GetSpecifiedAttributeCount = _XML_GetSpecifiedAttributeCount XML_Parse = _XML_Parse XML_ParseBuffer = _XML_ParseBuffer XML_ParserCreate = _XML_ParserCreate XML_ParserCreateNS = _XML_ParserCreateNS XML_ParserCreate_MM = _XML_ParserCreate_MM XML_ParserFree = _XML_ParserFree XML_SetAttlistDeclHandler = _XML_SetAttlistDeclHandler XML_SetBase = _XML_SetBase XML_SetCdataSectionHandler = _XML_SetCdataSectionHandler XML_SetCharacterDataHandler = _XML_SetCharacterDataHandler XML_SetCommentHandler = _XML_SetCommentHandler XML_SetDefaultHandler = _XML_SetDefaultHandler XML_SetDefaultHandlerExpand = _XML_SetDefaultHandlerExpand XML_SetDoctypeDeclHandler = _XML_SetDoctypeDeclHandler XML_SetElementDeclHandler = _XML_SetElementDeclHandler XML_SetElementHandler = _XML_SetElementHandler XML_SetEncoding = _XML_SetEncoding XML_SetEndCdataSectionHandler = _XML_SetEndCdataSectionHandler XML_SetEndDoctypeDeclHandler = _XML_SetEndDoctypeDeclHandler XML_SetEndElementHandler = _XML_SetEndElementHandler XML_SetEndNamespaceDeclHandler = _XML_SetEndNamespaceDeclHandler XML_SetEntityDeclHandler = _XML_SetEntityDeclHandler XML_SetExternalEntityRefHandler = _XML_SetExternalEntityRefHandler XML_SetExternalEntityRefHandlerArg = _XML_SetExternalEntityRefHandlerArg XML_SetNamespaceDeclHandler = _XML_SetNamespaceDeclHandler XML_SetNotStandaloneHandler = _XML_SetNotStandaloneHandler XML_SetNotationDeclHandler = _XML_SetNotationDeclHandler XML_SetParamEntityParsing = _XML_SetParamEntityParsing XML_SetProcessingInstructionHandler = _XML_SetProcessingInstructionHandler XML_SetReturnNSTriplet = _XML_SetReturnNSTriplet XML_SetStartCdataSectionHandler = _XML_SetStartCdataSectionHandler XML_SetStartDoctypeDeclHandler = _XML_SetStartDoctypeDeclHandler XML_SetStartElementHandler = _XML_SetStartElementHandler XML_SetStartNamespaceDeclHandler = _XML_SetStartNamespaceDeclHandler XML_SetUnknownEncodingHandler = _XML_SetUnknownEncodingHandler XML_SetUnparsedEntityDeclHandler = _XML_SetUnparsedEntityDeclHandler XML_SetUserData = _XML_SetUserData XML_SetXmlDeclHandler = _XML_SetXmlDeclHandler XML_UseParserAsHandlerArg = _XML_UseParserAsHandlerArg XML_ParserReset = _XML_ParserReset XML_SetSkippedEntityHandler = _XML_SetSkippedEntityHandler XML_GetFeatureList = _XML_GetFeatureList XML_UseForeignDTD = _XML_UseForeignDTD XML_FreeContentModel = _XML_FreeContentModel XML_MemMalloc = _XML_MemMalloc XML_MemRealloc = _XML_MemRealloc XML_MemFree = _XML_MemFree XML_StopParser = _XML_StopParser XML_ResumeParser = _XML_ResumeParser XML_GetParsingStatus = _XML_GetParsingStatus tla-1.3.5+dfsg/src/expat/bcb5/elements.mak0000644000175000017500000001172610457621771017007 0ustar useruser# --------------------------------------------------------------------------- !if !$d(BCB) BCB = $(MAKEDIR)\.. !endif # --------------------------------------------------------------------------- # IDE SECTION # --------------------------------------------------------------------------- # The following section of the project makefile is managed by the BCB IDE. # It is recommended to use the IDE to change any of the values in this # section. # --------------------------------------------------------------------------- VERSION = BCB.05.03 # --------------------------------------------------------------------------- PROJECT = Release\elements.exe OBJFILES = Release\obj\examples\elements.obj RESFILES = MAINSOURCE = elements.bpf RESDEPEN = $(RESFILES) LIBFILES = Release\libexpats_mtd.lib IDLFILES = IDLGENFILES = LIBRARIES = PACKAGES = VCL50.bpi VCLX50.bpi bcbsmp50.bpi QRPT50.bpi VCLDB50.bpi VCLBDE50.bpi \ ibsmp50.bpi VCLDBX50.bpi TEEUI50.bpi TEEDB50.bpi TEE50.bpi TEEQR50.bpi \ VCLIB50.bpi bcbie50.bpi VCLIE50.bpi INETDB50.bpi INET50.bpi NMFAST50.bpi \ dclocx50.bpi bcb2kaxserver50.bpi dclusr50.bpi SPARELIBS = DEFFILE = # --------------------------------------------------------------------------- PATHCPP = .;..\examples PATHASM = .; PATHPAS = .; PATHRC = .; DEBUGLIBPATH = $(BCB)\lib\debug RELEASELIBPATH = $(BCB)\lib\release USERDEFINES = WIN32;NDEBUG;_CONSOLE;XML_STATIC SYSDEFINES = _NO_VCL;_ASSERTE;NO_STRICT;_RTLDLL INCLUDEPATH = ..\examples;$(BCB)\include LIBPATH = ..\examples;$(BCB)\lib;$(RELEASELIBPATH) WARNINGS= -w-par -w-8027 -w-8026 # --------------------------------------------------------------------------- CFLAG1 = -O2 -X- -a8 -b -k- -vi -q -I..\lib -c IDLCFLAGS = -I$(BCB)\include PFLAGS = -N2Release\obj\examples -N0Release\obj\examples -$Y- -$L- -$D- RFLAGS = /l 0x409 /d "NDEBUG" /i$(BCB)\include AFLAGS = /mx /w2 /zn LFLAGS = -IRelease\obj\examples -D"" -ap -Tpe -x -Gn -q -L..\LIB\RELEASE_STATIC # --------------------------------------------------------------------------- ALLOBJ = c0x32.obj $(OBJFILES) ALLRES = $(RESFILES) ALLLIB = $(LIBFILES) $(LIBRARIES) import32.lib cw32mti.lib # --------------------------------------------------------------------------- !ifdef IDEOPTIONS [Version Info] IncludeVerInfo=0 AutoIncBuild=0 MajorVer=1 MinorVer=0 Release=0 Build=0 Debug=0 PreRelease=0 Special=0 Private=0 DLL=0 [Version Info Keys] CompanyName= FileDescription= FileVersion=1.0.0.0 InternalName= LegalCopyright= LegalTrademarks= OriginalFilename= ProductName= ProductVersion=1.0.0.0 Comments= [Debugging] DebugSourceDirs=$(BCB)\source\vcl !endif # --------------------------------------------------------------------------- # MAKE SECTION # --------------------------------------------------------------------------- # This section of the project file is not used by the BCB IDE. It is for # the benefit of building from the command-line using the MAKE utility. # --------------------------------------------------------------------------- .autodepend # --------------------------------------------------------------------------- !if "$(USERDEFINES)" != "" AUSERDEFINES = -d$(USERDEFINES:;= -d) !else AUSERDEFINES = !endif !if !$d(BCC32) BCC32 = bcc32 !endif !if !$d(CPP32) CPP32 = cpp32 !endif !if !$d(DCC32) DCC32 = dcc32 !endif !if !$d(TASM32) TASM32 = tasm32 !endif !if !$d(LINKER) LINKER = ilink32 !endif !if !$d(BRCC32) BRCC32 = brcc32 !endif # --------------------------------------------------------------------------- !if $d(PATHCPP) .PATH.CPP = $(PATHCPP) .PATH.C = $(PATHCPP) !endif !if $d(PATHPAS) .PATH.PAS = $(PATHPAS) !endif !if $d(PATHASM) .PATH.ASM = $(PATHASM) !endif !if $d(PATHRC) .PATH.RC = $(PATHRC) !endif # --------------------------------------------------------------------------- $(PROJECT): $(IDLGENFILES) $(OBJFILES) $(RESDEPEN) $(DEFFILE) $(BCB)\BIN\$(LINKER) @&&! $(LFLAGS) -L$(LIBPATH) + $(ALLOBJ), + $(PROJECT),, + $(ALLLIB), + $(DEFFILE), + $(ALLRES) ! # --------------------------------------------------------------------------- .pas.hpp: $(BCB)\BIN\$(DCC32) $(PFLAGS) -U$(INCLUDEPATH) -D$(USERDEFINES);$(SYSDEFINES) -O$(INCLUDEPATH) --BCB {$< } .pas.obj: $(BCB)\BIN\$(DCC32) $(PFLAGS) -U$(INCLUDEPATH) -D$(USERDEFINES);$(SYSDEFINES) -O$(INCLUDEPATH) --BCB {$< } .cpp.obj: $(BCB)\BIN\$(BCC32) $(CFLAG1) $(WARNINGS) -I$(INCLUDEPATH) -D$(USERDEFINES);$(SYSDEFINES) -n$(@D) {$< } .c.obj: $(BCB)\BIN\$(BCC32) $(CFLAG1) $(WARNINGS) -I$(INCLUDEPATH) -D$(USERDEFINES);$(SYSDEFINES) -n$(@D) {$< } .c.i: $(BCB)\BIN\$(CPP32) $(CFLAG1) $(WARNINGS) -I$(INCLUDEPATH) -D$(USERDEFINES);$(SYSDEFINES) -n. {$< } .cpp.i: $(BCB)\BIN\$(CPP32) $(CFLAG1) $(WARNINGS) -I$(INCLUDEPATH) -D$(USERDEFINES);$(SYSDEFINES) -n. {$< } .asm.obj: $(BCB)\BIN\$(TASM32) $(AFLAGS) -i$(INCLUDEPATH:;= -i) $(AUSERDEFINES) -d$(SYSDEFINES:;= -d) $<, $@ .rc.res: $(BCB)\BIN\$(BRCC32) $(RFLAGS) -I$(INCLUDEPATH) -D$(USERDEFINES);$(SYSDEFINES) -fo$@ $< # --------------------------------------------------------------------------- tla-1.3.5+dfsg/src/expat/bcb5/xmlwf.bpf0000644000175000017500000000036710457621771016326 0ustar useruserUSEUNIT("..\xmlwf\codepage.c"); USEUNIT("..\xmlwf\win32filemap.c"); USEUNIT("..\xmlwf\xmlfile.c"); USEUNIT("..\xmlwf\xmlwf.c"); USELIB("Release\libexpat_mtd.lib"); //--------------------------------------------------------------------------- main tla-1.3.5+dfsg/src/expat/bcb5/libexpatw_mtd.def0000644000175000017500000001256710457621771020030 0ustar useruser; DEF file for BCB5 LIBRARY LIBEXPATW_MTD DESCRIPTION "Implements an XML parser." EXPORTS _XML_DefaultCurrent @1 _XML_ErrorString @2 _XML_ExpatVersion @3 _XML_ExpatVersionInfo @4 _XML_ExternalEntityParserCreate @5 _XML_GetBase @6 _XML_GetBuffer @7 _XML_GetCurrentByteCount @8 _XML_GetCurrentByteIndex @9 _XML_GetCurrentColumnNumber @10 _XML_GetCurrentLineNumber @11 _XML_GetErrorCode @12 _XML_GetIdAttributeIndex @13 _XML_GetInputContext @14 _XML_GetSpecifiedAttributeCount @15 _XML_Parse @16 _XML_ParseBuffer @17 _XML_ParserCreate @18 _XML_ParserCreateNS @19 _XML_ParserCreate_MM @20 _XML_ParserFree @21 _XML_SetAttlistDeclHandler @22 _XML_SetBase @23 _XML_SetCdataSectionHandler @24 _XML_SetCharacterDataHandler @25 _XML_SetCommentHandler @26 _XML_SetDefaultHandler @27 _XML_SetDefaultHandlerExpand @28 _XML_SetDoctypeDeclHandler @29 _XML_SetElementDeclHandler @30 _XML_SetElementHandler @31 _XML_SetEncoding @32 _XML_SetEndCdataSectionHandler @33 _XML_SetEndDoctypeDeclHandler @34 _XML_SetEndElementHandler @35 _XML_SetEndNamespaceDeclHandler @36 _XML_SetEntityDeclHandler @37 _XML_SetExternalEntityRefHandler @38 _XML_SetExternalEntityRefHandlerArg @39 _XML_SetNamespaceDeclHandler @40 _XML_SetNotStandaloneHandler @41 _XML_SetNotationDeclHandler @42 _XML_SetParamEntityParsing @43 _XML_SetProcessingInstructionHandler @44 _XML_SetReturnNSTriplet @45 _XML_SetStartCdataSectionHandler @46 _XML_SetStartDoctypeDeclHandler @47 _XML_SetStartElementHandler @48 _XML_SetStartNamespaceDeclHandler @49 _XML_SetUnknownEncodingHandler @50 _XML_SetUnparsedEntityDeclHandler @51 _XML_SetUserData @52 _XML_SetXmlDeclHandler @53 _XML_UseParserAsHandlerArg @54 ; added with version 1.95.3 _XML_ParserReset @55 _XML_SetSkippedEntityHandler @56 ; added with version 1.95.5 _XML_GetFeatureList @57 _XML_UseForeignDTD @58 ; added with version 1.95.6 _XML_FreeContentModel @59 _XML_MemMalloc @60 _XML_MemRealloc @61 _XML_MemFree @62 ; added with version 1.95.8 _XML_StopParser @63 _XML_ResumeParser @64 _XML_GetParsingStatus @65 ; Aliases for MS compatible names XML_DefaultCurrent = _XML_DefaultCurrent XML_ErrorString = _XML_ErrorString XML_ExpatVersion = _XML_ExpatVersion XML_ExpatVersionInfo = _XML_ExpatVersionInfo XML_ExternalEntityParserCreate = _XML_ExternalEntityParserCreate XML_GetBase = _XML_GetBase XML_GetBuffer = _XML_GetBuffer XML_GetCurrentByteCount = _XML_GetCurrentByteCount XML_GetCurrentByteIndex = _XML_GetCurrentByteIndex XML_GetCurrentColumnNumber = _XML_GetCurrentColumnNumber XML_GetCurrentLineNumber = _XML_GetCurrentLineNumber XML_GetErrorCode = _XML_GetErrorCode XML_GetIdAttributeIndex = _XML_GetIdAttributeIndex XML_GetInputContext = _XML_GetInputContext XML_GetSpecifiedAttributeCount = _XML_GetSpecifiedAttributeCount XML_Parse = _XML_Parse XML_ParseBuffer = _XML_ParseBuffer XML_ParserCreate = _XML_ParserCreate XML_ParserCreateNS = _XML_ParserCreateNS XML_ParserCreate_MM = _XML_ParserCreate_MM XML_ParserFree = _XML_ParserFree XML_SetAttlistDeclHandler = _XML_SetAttlistDeclHandler XML_SetBase = _XML_SetBase XML_SetCdataSectionHandler = _XML_SetCdataSectionHandler XML_SetCharacterDataHandler = _XML_SetCharacterDataHandler XML_SetCommentHandler = _XML_SetCommentHandler XML_SetDefaultHandler = _XML_SetDefaultHandler XML_SetDefaultHandlerExpand = _XML_SetDefaultHandlerExpand XML_SetDoctypeDeclHandler = _XML_SetDoctypeDeclHandler XML_SetElementDeclHandler = _XML_SetElementDeclHandler XML_SetElementHandler = _XML_SetElementHandler XML_SetEncoding = _XML_SetEncoding XML_SetEndCdataSectionHandler = _XML_SetEndCdataSectionHandler XML_SetEndDoctypeDeclHandler = _XML_SetEndDoctypeDeclHandler XML_SetEndElementHandler = _XML_SetEndElementHandler XML_SetEndNamespaceDeclHandler = _XML_SetEndNamespaceDeclHandler XML_SetEntityDeclHandler = _XML_SetEntityDeclHandler XML_SetExternalEntityRefHandler = _XML_SetExternalEntityRefHandler XML_SetExternalEntityRefHandlerArg = _XML_SetExternalEntityRefHandlerArg XML_SetNamespaceDeclHandler = _XML_SetNamespaceDeclHandler XML_SetNotStandaloneHandler = _XML_SetNotStandaloneHandler XML_SetNotationDeclHandler = _XML_SetNotationDeclHandler XML_SetParamEntityParsing = _XML_SetParamEntityParsing XML_SetProcessingInstructionHandler = _XML_SetProcessingInstructionHandler XML_SetReturnNSTriplet = _XML_SetReturnNSTriplet XML_SetStartCdataSectionHandler = _XML_SetStartCdataSectionHandler XML_SetStartDoctypeDeclHandler = _XML_SetStartDoctypeDeclHandler XML_SetStartElementHandler = _XML_SetStartElementHandler XML_SetStartNamespaceDeclHandler = _XML_SetStartNamespaceDeclHandler XML_SetUnknownEncodingHandler = _XML_SetUnknownEncodingHandler XML_SetUnparsedEntityDeclHandler = _XML_SetUnparsedEntityDeclHandler XML_SetUserData = _XML_SetUserData XML_SetXmlDeclHandler = _XML_SetXmlDeclHandler XML_UseParserAsHandlerArg = _XML_UseParserAsHandlerArg XML_ParserReset = _XML_ParserReset XML_SetSkippedEntityHandler = _XML_SetSkippedEntityHandler XML_GetFeatureList = _XML_GetFeatureList XML_UseForeignDTD = _XML_UseForeignDTD XML_FreeContentModel = _XML_FreeContentModel XML_MemMalloc = _XML_MemMalloc XML_MemRealloc = _XML_MemRealloc XML_MemFree = _XML_MemFree XML_StopParser = _XML_StopParser XML_ResumeParser = _XML_ResumeParser XML_GetParsingStatus = _XML_GetParsingStatus tla-1.3.5+dfsg/src/expat/Makefile.in0000644000175000017500000001230410457621771015724 0ustar useruser################################################################ # Process this file with top-level configure script to produce Makefile # # Copyright 2000 Clark Cooper # # This file is part of EXPAT. # # EXPAT is free software; you can redistribute it and/or modify it # under the terms of the License (based on the MIT/X license) contained # in the file COPYING that comes with this distribution. # # EXPAT IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. # IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY # CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, # TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE # SOFTWARE OR THE USE OR OTHER DEALINGS IN EXPAT. # SHELL = @SHELL@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ bindir = @bindir@ libdir = @libdir@ includedir = @includedir@ man1dir = @mandir@/man1 top_builddir = . INSTALL = @INSTALL@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_DATA = @INSTALL_DATA@ mkinstalldirs = $(SHELL) $(top_srcdir)/conftools/mkinstalldirs MANFILE = $(srcdir)/doc/xmlwf.1 APIHEADER = $(srcdir)/lib/expat.h $(srcdir)/lib/expat_external.h LIBRARY = libexpat.la all: test: all check install: all default: buildlib xmlwf/xmlwf buildlib: $(LIBRARY) all: $(LIBRARY) xmlwf/xmlwf examples/elements examples/outline clean: cd lib && rm -f $(LIBRARY) *.o *.lo && rm -rf .libs _libs cd xmlwf && rm -f xmlwf *.o *.lo && rm -rf .libs _libs cd examples && rm -f elements outline *.o *.lo && rm -rf .libs _libs cd tests && rm -rf .libs runtests runtests.o chardata.o rm -rf .libs libexpat.la rm -f examples/core tests/core xmlwf/core clobber: clean distclean: clean rm -f expat_config.h config.status config.log config.cache libtool rm -f Makefile extraclean: distclean rm -f expat_config.h.in configure rm -f conftools/ltconfig conftools/ltmain.sh conftools/libtool.m4 check: tests/runtests tests/runtests xinstall: xmlwf/xmlwf installlib $(mkinstalldirs) $(bindir) $(man1dir) $(LIBTOOL) --mode=install $(INSTALL_PROGRAM) xmlwf/xmlwf $(bindir)/xmlwf $(INSTALL_DATA) $(MANFILE) $(man1dir) installlib: $(LIBRARY) $(APIHEADER) $(mkinstalldirs) $(libdir) $(includedir) $(LIBTOOL) --mode=install $(INSTALL) $(LIBRARY) $(libdir)/$(LIBRARY) $(INSTALL_DATA) $(APIHEADER) $(includedir) uninstall: uninstalllib $(LIBTOOL) --mode=uninstall rm -f $(bindir)/xmlwf rm -f $(man1dir)/xmlwf.1 uninstalllib: $(LIBTOOL) --mode=uninstall rm -f $(libdir)/$(LIBRARY) rm -f $(includedir)/$(APIHEADER) # for VPATH builds (invoked by configure) mkdir-init: @for d in lib xmlwf examples tests ; do \ (mkdir $$d 2> /dev/null || test 1) ; \ done CC = @CC@ LIBTOOL = @LIBTOOL@ INCLUDES = -I$(srcdir)/lib -I. LDFLAGS = @LDFLAGS@ CPPFLAGS = @CPPFLAGS@ -DHAVE_EXPAT_CONFIG_H CFLAGS = @CFLAGS@ -DHAVE_EXPAT_CONFIG_H VSNFLAG = -version-info @LIBCURRENT@:@LIBREVISION@:@LIBAGE@ ### autoconf this? LTFLAGS = --silent COMPILE = $(CC) $(CFLAGS) $(DEFS) $(CPPFLAGS) -DHAVE_EXPAT_CONFIG_H $(INCLUDES) LTCOMPILE = $(LIBTOOL) $(LTFLAGS) --mode=compile $(COMPILE) LINK_LIB = $(LIBTOOL) $(LTFLAGS) --mode=link $(COMPILE) -no-undefined $(VSNFLAG) -rpath $(libdir) $(LDFLAGS) -o $@ LINK_EXE = $(LIBTOOL) $(LTFLAGS) --mode=link $(COMPILE) $(LDFLAGS) -o $@ LIB_OBJS = lib/xmlparse.lo lib/xmltok.lo lib/xmlrole.lo $(LIBRARY): $(LIB_OBJS) $(LINK_LIB) $(LIB_OBJS) lib/xmlparse.lo: lib/xmlparse.c lib/expat.h lib/xmlrole.h lib/xmltok.h \ $(top_builddir)/expat_config.h lib/expat_external.h lib/internal.h lib/xmlrole.lo: lib/xmlrole.c lib/ascii.h lib/xmlrole.h \ $(top_builddir)/expat_config.h lib/expat_external.h lib/internal.h lib/xmltok.lo: lib/xmltok.c lib/xmltok_impl.c lib/xmltok_ns.c \ lib/ascii.h lib/asciitab.h lib/iasciitab.h lib/latin1tab.h \ lib/nametab.h lib/utf8tab.h lib/xmltok.h lib/xmltok_impl.h \ $(top_builddir)/expat_config.h lib/expat_external.h lib/internal.h XMLWF_OBJS = xmlwf/xmlwf.o xmlwf/xmlfile.o xmlwf/codepage.o xmlwf/@FILEMAP@.o xmlwf/xmlwf.o: xmlwf/xmlwf.c xmlwf/xmlfile.o: xmlwf/xmlfile.c xmlwf/codepage.o: xmlwf/codepage.c xmlwf/@FILEMAP@.o: xmlwf/@FILEMAP@.c xmlwf/xmlwf: $(XMLWF_OBJS) $(LIBRARY) $(LINK_EXE) $(XMLWF_OBJS) $(LIBRARY) examples/elements.o: examples/elements.c examples/elements: examples/elements.o $(LIBRARY) $(LINK_EXE) $< $(LIBRARY) examples/outline.o: examples/outline.c examples/outline: examples/outline.o $(LIBRARY) $(LINK_EXE) $< $(LIBRARY) tests/chardata.o: tests/chardata.c tests/chardata.h tests/minicheck.o: tests/minicheck.c tests/minicheck.h tests/runtests.o: tests/runtests.c tests/chardata.h tests/runtests: tests/runtests.o tests/chardata.o @MINICHECK_OBJECT@ $(LIBRARY) $(LINK_EXE) $^ @CHECK_LIBRARY@ tests/xmlts.zip: wget --output-document=tests/xmlts.zip \ http://www.w3.org/XML/Test/xmlts20020606.zip tests/XML-Test-Suite: tests/xmlts.zip cd tests && unzip -q xmlts.zip run-xmltest: xmlwf/xmlwf tests/XML-Test-Suite tests/xmltest.sh .SUFFIXES: .c .lo .o .c.o: $(COMPILE) -o $@ -c $< .c.lo: $(LTCOMPILE) -o $@ -c $< .PHONY: buildlib all \ clean distclean extraclean maintainer-clean \ dist distdir \ install uninstall tla-1.3.5+dfsg/src/expat/Changes0000644000175000017500000001605010457621771015154 0ustar useruserRelease 1.95.8 Fri Jul 23 2004 - Major new feature: suspend/resume. Handlers can now request that a parse be suspended for later resumption or aborted altogether. See "Temporarily Stopping Parsing" in the documentation for more details. - Some mostly minor bug fixes, but compilation should no longer generate warnings on most platforms. SF issues include: 827319, 840173, 846309, 888329, 896188, 923913, 928113, 961698, 985192. Release 1.95.7 Mon Oct 20 2003 - Fixed enum XML_Status issue (reported on SourceForge many times), so compilers that are properly picky will be happy. - Introduced an XMLCALL macro to control the calling convention used by the Expat API; this macro should be used to annotate prototypes and definitions of callback implementations in code compiled with a calling convention other than the default convention for the host platform. - Improved ability to build without the configure-generated expat_config.h header. This is useful for applications which embed Expat rather than linking in the library. - Fixed a variety of bugs: see SF issues 458907, 609603, 676844, 679754, 692878, 692964, 695401, 699323, 699487, 820946. - Improved hash table lookups. - Added more regression tests and improved documentation. Release 1.95.6 Tue Jan 28 2003 - Added XML_FreeContentModel(). - Added XML_MemMalloc(), XML_MemRealloc(), XML_MemFree(). - Fixed a variety of bugs: see SF issues 615606, 616863, 618199, 653180, 673791. - Enhanced the regression test suite. - Man page improvements: includes SF issue 632146. Release 1.95.5 Fri Sep 6 2002 - Added XML_UseForeignDTD() for improved SAX2 support. - Added XML_GetFeatureList(). - Defined XML_Bool type and the values XML_TRUE and XML_FALSE. - Use an incomplete struct instead of a void* for the parser (may not retain). - Fixed UTF-8 decoding bug that caused legal UTF-8 to be rejected. - Finally fixed bug where default handler would report DTD events that were already handled by another handler. Initial patch contributed by Darryl Miles. - Removed unnecessary DllMain() function that caused static linking into a DLL to be difficult. - Added VC++ projects for building static libraries. - Reduced line-length for all source code and headers to be no longer than 80 characters, to help with AS/400 support. - Reduced memory copying during parsing (SF patch #600964). - Fixed a variety of bugs: see SF issues 580793, 434664, 483514, 580503, 581069, 584041, 584183, 584832, 585537, 596555, 596678, 598352, 598944, 599715, 600479, 600971. Release 1.95.4 Fri Jul 12 2002 - Added support for VMS, contributed by Craig Berry. See vms/README.vms for more information. - Added Mac OS (classic) support, with a makefile for MPW, contributed by Thomas Wegner and Daryle Walker. - Added Borland C++ Builder 5 / BCC 5.5 support, contributed by Patrick McConnell (SF patch #538032). - Fixed a variety of bugs: see SF issues 441449, 563184, 564342, 566334, 566901, 569461, 570263, 575168, 579196. - Made skippedEntityHandler conform to SAX2 (see source comment) - Re-implemented WFC: Entity Declared from XML 1.0 spec and added a new error "entity declared in parameter entity": see SF bug report 569461 and SF patch 578161 - Re-implemented section 5.1 from XML 1.0 spec: see SF bug report 570263 and SF patch 578161 Release 1.95.3 Mon Jun 3 2002 - Added a project to the MSVC workspace to create a wchar_t version of the library; the DLLs are named libexpatw.dll. - Changed the name of the Windows DLLs from expat.dll to libexpat.dll; this fixes SF bug #432456. - Added the XML_ParserReset() API function. - Fixed XML_SetReturnNSTriplet() to work for element names. - Made the XML_UNICODE builds usable (thanks, Karl!). - Allow xmlwf to read from standard input. - Install a man page for xmlwf on Unix systems. - Fixed many bugs; see SF bug reports 231864, 461380, 464837, 466885, 469226, 477667, 484419, 487840, 494749, 496505, 547350. Other bugs which we can't test as easily may also have been fixed, especially in the area of build support. Release 1.95.2 Fri Jul 27 2001 - More changes to make MSVC happy with the build; add a single workspace to support both the library and xmlwf application. - Added a Windows installer for Windows users; includes xmlwf.exe. - Added compile-time constants that can be used to determine the Expat version - Removed a lot of GNU-specific dependencies to aide portability among the various Unix flavors. - Fix the UTF-8 BOM bug. - Cleaned up warning messages for several compilers. - Added the -Wall, -Wstrict-prototypes options for GCC. Release 1.95.1 Sun Oct 22 15:11:36 EDT 2000 - Changes to get expat to build under Microsoft compiler - Removed all aborts and instead return an UNEXPECTED_STATE error. - Fixed a bug where a stray '%' in an entity value would cause an abort. - Defined XML_SetEndNamespaceDeclHandler. Thanks to Darryl Miles for finding this oversight. - Changed default patterns in lib/Makefile.in to fit non-GNU makes Thanks to robin@unrated.net for reporting and providing an account to test on. - The reference had the wrong label for XML_SetStartNamespaceDecl. Reported by an anonymous user. Release 1.95.0 Fri Sep 29 2000 - XML_ParserCreate_MM Allows you to set a memory management suite to replace the standard malloc,realloc, and free. - XML_SetReturnNSTriplet If you turn this feature on when namespace processing is in effect, then qualified, prefixed element and attribute names are returned as "uri|name|prefix" where '|' is whatever separator character is used in namespace processing. - Merged in features from perl-expat o XML_SetElementDeclHandler o XML_SetAttlistDeclHandler o XML_SetXmlDeclHandler o XML_SetEntityDeclHandler o StartDoctypeDeclHandler takes 3 additional parameters: sysid, pubid, has_internal_subset o Many paired handler setters (like XML_SetElementHandler) now have corresponding individual handler setters o XML_GetInputContext for getting the input context of the current parse position. - Added reference material - Packaged into a distribution that builds a sharable library tla-1.3.5+dfsg/src/expat/expat.dsw0000755000175000017500000000353010457621771015523 0ustar useruserMicrosoft Developer Studio Workspace File, Format Version 6.00 # WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! ############################################################################### Project: "elements"=.\examples\elements.dsp - Package Owner=<4> Package=<5> {{{ }}} Package=<4> {{{ Begin Project Dependency Project_Dep_Name expat_static End Project Dependency }}} ############################################################################### Project: "expat"=.\lib\expat.dsp - Package Owner=<4> Package=<5> {{{ }}} Package=<4> {{{ }}} ############################################################################### Project: "expat_static"=.\lib\expat_static.dsp - Package Owner=<4> Package=<5> {{{ }}} Package=<4> {{{ }}} ############################################################################### Project: "expatw"=.\lib\expatw.dsp - Package Owner=<4> Package=<5> {{{ }}} Package=<4> {{{ }}} ############################################################################### Project: "expatw_static"=.\lib\expatw_static.dsp - Package Owner=<4> Package=<5> {{{ }}} Package=<4> {{{ }}} ############################################################################### Project: "outline"=.\examples\outline.dsp - Package Owner=<4> Package=<5> {{{ }}} Package=<4> {{{ Begin Project Dependency Project_Dep_Name expat End Project Dependency }}} ############################################################################### Project: "xmlwf"=.\xmlwf\xmlwf.dsp - Package Owner=<4> Package=<5> {{{ }}} Package=<4> {{{ Begin Project Dependency Project_Dep_Name expat End Project Dependency }}} ############################################################################### Global: Package=<5> {{{ }}} Package=<3> {{{ }}} ############################################################################### tla-1.3.5+dfsg/src/expat/configure.in0000644000175000017500000000727410457621771016202 0ustar useruserdnl configuration script for expat dnl Process this file with autoconf to produce a configure script. dnl dnl Copyright 2000 Clark Cooper dnl dnl This file is part of EXPAT. dnl dnl EXPAT is free software; you can redistribute it and/or modify it dnl under the terms of the License (based on the MIT/X license) contained dnl in the file COPYING that comes with this distribution. dnl dnl Ensure that Expat is configured with autoconf 2.52 or newer AC_PREREQ(2.52) dnl Get the version number of Expat, using m4's esyscmd() command to run dnl the command at m4-generation time. This allows us to create an m4 dnl symbol holding the correct version number. AC_INIT() requires the dnl version number at m4-time, rather than when ./configure is run, so dnl all this must happen as part of m4, not as part of the shell code dnl contained in ./configure. dnl dnl NOTE: esyscmd() is a GNU M4 extension. Thus, we wrap it in an appropriate dnl test. I believe this test will work, but I don't have a place with non- dnl GNU M4 to test it right now. define([expat_version], ifdef([__gnu__], [esyscmd(conftools/get-version.sh lib/expat.h)], [1.95.x])) AC_INIT(expat, expat_version, expat-bugs@mail.libexpat.org) undefine([expat_version]) AC_CONFIG_SRCDIR(Makefile.in) AC_CONFIG_AUX_DIR(conftools) dnl dnl Increment LIBREVISION if source code has changed at all dnl dnl If the API has changed, increment LIBCURRENT and set LIBREVISION to 0 dnl dnl If the API changes compatibly (i.e. simply adding a new function dnl without changing or removing earlier interfaces), then increment LIBAGE. dnl dnl If the API changes incompatibly set LIBAGE back to 0 dnl LIBCURRENT=5 LIBREVISION=0 LIBAGE=5 AC_CONFIG_HEADER(expat_config.h) sinclude(conftools/libtool.m4) sinclude(conftools/ac_c_bigendian_cross.m4) AC_LIBTOOL_WIN32_DLL AC_PROG_LIBTOOL AC_SUBST(LIBCURRENT) AC_SUBST(LIBREVISION) AC_SUBST(LIBAGE) dnl Checks for programs. AC_PROG_CC AC_PROG_INSTALL if test "$GCC" = yes ; then dnl dnl Be careful about adding the -fexceptions option; some versions of dnl GCC don't support it and it causes extra warnings that are only dnl distracting; avoid. dnl OLDCFLAGS="$CFLAGS -Wall -Wmissing-prototypes -Wstrict-prototypes" CFLAGS="$OLDCFLAGS -fexceptions" AC_MSG_CHECKING(whether gcc accepts -fexceptions) AC_TRY_COMPILE(,(void)1, AC_MSG_RESULT(yes), AC_MSG_RESULT(no); CFLAGS="$OLDCFLAGS") fi dnl Checks for header files. AC_HEADER_STDC dnl Checks for typedefs, structures, and compiler characteristics. dnl Note: Avoid using AC_C_BIGENDIAN because it does not dnl work in a cross compile. AC_C_BIGENDIAN_CROSS AC_C_CONST AC_TYPE_SIZE_T AC_CHECK_FUNCS(memmove bcopy) dnl Only needed for xmlwf: AC_CHECK_HEADERS(fcntl.h unistd.h) AC_TYPE_OFF_T AC_FUNC_MMAP if test "$ac_cv_func_mmap_fixed_mapped" = "yes"; then FILEMAP=unixfilemap else FILEMAP=readfilemap fi AC_SUBST(FILEMAP) dnl Only needed for regression tests: AC_SUBST(MINICHECK_OBJECT) AC_SUBST(CHECK_LIBRARY) AC_CHECK_HEADERS(check.h) AC_CHECK_HEADER(check.h, CHECK_LIBRARY=-lcheck, MINICHECK_OBJECT=tests/minicheck.o) dnl Some basic configuration: AC_DEFINE([XML_NS], 1, [Define to make XML Namespaces functionality available.]) AC_DEFINE([XML_DTD], 1, [Define to make parameter entity parsing functionality available.]) AC_DEFINE([XML_CONTEXT_BYTES], 1024, [Define to specify how much context to retain around the current parse point.]) AC_CONFIG_FILES(Makefile) AC_OUTPUT abs_srcdir="`cd $srcdir && pwd`" abs_builddir="`pwd`" if test "$abs_srcdir" != "$abs_builddir"; then make mkdir-init fi tla-1.3.5+dfsg/src/expat/PLUGIN/0000755000175000017500000000000010457621771014655 5ustar userusertla-1.3.5+dfsg/src/expat/PLUGIN/REQ0000644000175000017500000000001510457621771015223 0ustar useruserexpat expat tla-1.3.5+dfsg/src/expat/PLUGIN/AUTOCONF0000644000175000017500000000075310457621771016023 0ustar useruser#!/bin/sh if test ! -z "$CFLAGS" ; then printf '\n' printf '================================\n' printf 'WARNING:\n' printf '\n' printf ' Discarding "-Werror" from $CFLAGS\n' printf ' while configuring "src/expat"\n' printf '\n' printf '================================\n' printf '\n' if printf '%s' "$CFLAGS" | grep -q -e -Werror ; then CFLAGS="$(printf '%s' "$CFLAGS" | sed -e 's/-Werror//g')" fi fi "$1" --prefix="$prefix" --disable-shared --enable-static tla-1.3.5+dfsg/src/expat/expat_config.h.in0000644000175000017500000000462010457621771017105 0ustar useruser/* expat_config.h.in. Generated from configure.in by autoheader. */ /* 1234 = LIL_ENDIAN, 4321 = BIGENDIAN */ #undef BYTEORDER /* Define to 1 if you have the `bcopy' function. */ #undef HAVE_BCOPY /* Define to 1 if you have the header file. */ #undef HAVE_CHECK_H /* Define to 1 if you have the header file. */ #undef HAVE_DLFCN_H /* Define to 1 if you have the header file. */ #undef HAVE_FCNTL_H /* Define to 1 if you have the `getpagesize' function. */ #undef HAVE_GETPAGESIZE /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H /* Define to 1 if you have the `memmove' function. */ #undef HAVE_MEMMOVE /* Define to 1 if you have the header file. */ #undef HAVE_MEMORY_H /* Define to 1 if you have a working `mmap' system call. */ #undef HAVE_MMAP /* Define to 1 if you have the header file. */ #undef HAVE_STDINT_H /* Define to 1 if you have the header file. */ #undef HAVE_STDLIB_H /* Define to 1 if you have the header file. */ #undef HAVE_STRINGS_H /* Define to 1 if you have the header file. */ #undef HAVE_STRING_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_STAT_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TYPES_H /* Define to 1 if you have the header file. */ #undef HAVE_UNISTD_H /* Define to the address where bug reports for this package should be sent. */ #undef PACKAGE_BUGREPORT /* Define to the full name of this package. */ #undef PACKAGE_NAME /* Define to the full name and version of this package. */ #undef PACKAGE_STRING /* Define to the one symbol short name of this package. */ #undef PACKAGE_TARNAME /* Define to the version of this package. */ #undef PACKAGE_VERSION /* Define to 1 if you have the ANSI C header files. */ #undef STDC_HEADERS /* whether byteorder is bigendian */ #undef WORDS_BIGENDIAN /* Define to specify how much context to retain around the current parse point. */ #undef XML_CONTEXT_BYTES /* Define to make parameter entity parsing functionality available. */ #undef XML_DTD /* Define to make XML Namespaces functionality available. */ #undef XML_NS /* Define to empty if `const' does not conform to ANSI C. */ #undef const /* Define to `long' if does not define. */ #undef off_t /* Define to `unsigned' if does not define. */ #undef size_t tla-1.3.5+dfsg/src/expat/tests/0000755000175000017500000000000010457621771015021 5ustar userusertla-1.3.5+dfsg/src/expat/tests/xmltest.sh0000755000175000017500000000663610457621771017073 0ustar useruser#! /bin/sh # EXPAT TEST SCRIPT FOR W3C XML TEST SUITE # This script can be used to exercise Expat against the # w3c.org xml test suite, available from # http://www.w3.org/XML/Test/xmlts20020606.zip. # To run this script, first set XMLWF so that xmlwf can be # found, then set the output directory with OUTPUT. # The script lists all test cases where Expat shows a discrepancy # from the expected result. Test cases where only the canonical # output differs are prefixed with "Output differs:", and a diff file # is generated in the appropriate subdirectory under $OUTPUT. # If there are output files provided, the script will use # output from xmlwf and compare the desired output against it. # However, one has to take into account that the canonical output # produced by xmlwf conforms to an older definition of canonical XML # and does not generate notation declarations. MYDIR="`dirname \"$0\"`" cd "$MYDIR" MYDIR="`pwd`" XMLWF="`dirname \"$MYDIR\"`/xmlwf/xmlwf" # XMLWF=/usr/local/bin/xmlwf TS="$MYDIR/XML-Test-Suite" # OUTPUT must terminate with the directory separator. OUTPUT="$TS/out/" # OUTPUT=/home/tmp/xml-testsuite-out/ RunXmlwfNotWF() { $XMLWF $1 $2 > outfile || return $? read outdata < outfile if test "$outdata" = "" ; then echo "Well formed: $3$2" return 1 else return 0 fi } RunXmlwfWF() { $XMLWF $1 -d "$OUTPUT$3" $2 > outfile || return $? read outdata < outfile if test "$outdata" = "" ; then if [ -f out/$2 ] ; then diff "$OUTPUT$3$2" out/$2 > outfile if [ -s outfile ] ; then cp outfile $OUTPUT$3${2}.diff echo "Output differs: $3$2" return 1 fi fi return 0 else echo "In $3: $outdata" return 1 fi } SUCCESS=0 ERROR=0 ########################## # well-formed test cases # ########################## cd "$TS/xmlconf" for xmldir in ibm/valid/P*/ \ ibm/invalid/P*/ \ xmltest/valid/ext-sa/ \ xmltest/valid/not-sa/ \ xmltest/invalid/ \ xmltest/invalid/not-sa/ \ xmltest/valid/sa/ \ sun/valid/ \ sun/invalid/ ; do cd "$TS/xmlconf/$xmldir" mkdir -p "$OUTPUT$xmldir" for xmlfile in *.xml ; do if RunXmlwfWF -p "$xmlfile" "$xmldir" ; then SUCCESS=`expr $SUCCESS + 1` else ERROR=`expr $ERROR + 1` fi done rm outfile done cd "$TS/xmlconf/oasis" mkdir -p "$OUTPUT"oasis/ for xmlfile in *pass*.xml ; do if RunXmlwfWF -p "$xmlfile" "oasis/" ; then SUCCESS=`expr $SUCCESS + 1` else ERROR=`expr $ERROR + 1` fi done rm outfile ############################## # not well-formed test cases # ############################## cd "$TS/xmlconf" for xmldir in ibm/not-wf/P*/ \ ibm/not-wf/misc/ \ xmltest/not-wf/ext-sa/ \ xmltest/not-wf/not-sa/ \ xmltest/not-wf/sa/ \ sun/not-wf/ ; do cd "$TS/xmlconf/$xmldir" for xmlfile in *.xml ; do if RunXmlwfNotWF -p "$xmlfile" "$xmldir" ; then SUCCESS=`expr $SUCCESS + 1` else ERROR=`expr $ERROR + 1` fi done rm outfile done cd "$TS/xmlconf/oasis" for xmlfile in *fail*.xml ; do if RunXmlwfNotWF -p "$xmlfile" "oasis/" ; then SUCCESS=`expr $SUCCESS + 1` else ERROR=`expr $ERROR + 1` fi done rm outfile echo "Passed: $SUCCESS" echo "Failed: $ERROR" tla-1.3.5+dfsg/src/expat/tests/chardata.h0000644000175000017500000000132210457621771016737 0ustar useruser/* chardata.h Interface to some helper routines used to accumulate and check text and attribute content. */ #ifndef XML_CHARDATA_H #define XML_CHARDATA_H 1 #ifndef XML_VERSION #include "expat.h" /* need XML_Char */ #endif typedef struct { int count; /* # of chars, < 0 if not set */ XML_Char data[1024]; } CharData; void CharData_Init(CharData *storage); void CharData_AppendString(CharData *storage, const char *s); void CharData_AppendXMLChars(CharData *storage, const XML_Char *s, int len); int CharData_CheckString(CharData *storage, const char *s); int CharData_CheckXMLChars(CharData *storage, const XML_Char *s); #endif /* XML_CHARDATA_H */ tla-1.3.5+dfsg/src/expat/tests/runtests.c0000644000175000017500000013074010457621771017061 0ustar useruser/* Copyright (c) 1998, 1999, 2000 Thai Open Source Software Center Ltd See the file COPYING for copying permission. runtest.c : run the Expat test suite */ #ifdef HAVE_EXPAT_CONFIG_H #include #endif #ifdef HAVE_CHECK_H #include #else #include "minicheck.h" #endif #include #include #include #include #include "expat.h" #include "chardata.h" static XML_Parser parser; static void basic_setup(void) { parser = XML_ParserCreate(NULL); if (parser == NULL) fail("Parser not created."); } static void basic_teardown(void) { if (parser != NULL) XML_ParserFree(parser); } /* Generate a failure using the parser state to create an error message; this should be used when the parser reports an error we weren't expecting. */ static void _xml_failure(XML_Parser parser, const char *file, int line) { char buffer[1024]; sprintf(buffer, "\n %s (line %d, offset %d)\n reported from %s, line %d", XML_ErrorString(XML_GetErrorCode(parser)), XML_GetCurrentLineNumber(parser), XML_GetCurrentColumnNumber(parser), file, line); _fail_unless(0, file, line, buffer); } #define xml_failure(parser) _xml_failure((parser), __FILE__, __LINE__) static void _expect_failure(char *text, enum XML_Error errorCode, char *errorMessage, char *file, int lineno) { if (XML_Parse(parser, text, strlen(text), XML_TRUE) == XML_STATUS_OK) /* Hackish use of _fail_unless() macro, but let's us report the right filename and line number. */ _fail_unless(0, file, lineno, errorMessage); if (XML_GetErrorCode(parser) != errorCode) _xml_failure(parser, file, lineno); } #define expect_failure(text, errorCode, errorMessage) \ _expect_failure((text), (errorCode), (errorMessage), \ __FILE__, __LINE__) /* Dummy handlers for when we need to set a handler to tickle a bug, but it doesn't need to do anything. */ static void XMLCALL dummy_start_doctype_handler(void *userData, const XML_Char *doctypeName, const XML_Char *sysid, const XML_Char *pubid, int has_internal_subset) {} static void XMLCALL dummy_end_doctype_handler(void *userData) {} static void XMLCALL dummy_entity_decl_handler(void *userData, const XML_Char *entityName, int is_parameter_entity, const XML_Char *value, int value_length, const XML_Char *base, const XML_Char *systemId, const XML_Char *publicId, const XML_Char *notationName) {} static void XMLCALL dummy_notation_decl_handler(void *userData, const XML_Char *notationName, const XML_Char *base, const XML_Char *systemId, const XML_Char *publicId) {} static void XMLCALL dummy_element_decl_handler(void *userData, const XML_Char *name, XML_Content *model) {} static void XMLCALL dummy_attlist_decl_handler(void *userData, const XML_Char *elname, const XML_Char *attname, const XML_Char *att_type, const XML_Char *dflt, int isrequired) {} static void XMLCALL dummy_comment_handler(void *userData, const XML_Char *data) {} static void XMLCALL dummy_pi_handler(void *userData, const XML_Char *target, const XML_Char *data) {} static void XMLCALL dummy_start_element(void *userData, const XML_Char *name, const XML_Char **atts) {} /* * Character & encoding tests. */ START_TEST(test_nul_byte) { char text[] = "\0"; /* test that a NUL byte (in US-ASCII data) is an error */ if (XML_Parse(parser, text, sizeof(text) - 1, XML_TRUE) == XML_STATUS_OK) fail("Parser did not report error on NUL-byte."); if (XML_GetErrorCode(parser) != XML_ERROR_INVALID_TOKEN) xml_failure(parser); } END_TEST START_TEST(test_u0000_char) { /* test that a NUL byte (in US-ASCII data) is an error */ expect_failure("", XML_ERROR_BAD_CHAR_REF, "Parser did not report error on NUL-byte."); } END_TEST START_TEST(test_bom_utf8) { /* This test is really just making sure we don't core on a UTF-8 BOM. */ char *text = "\357\273\277"; if (XML_Parse(parser, text, strlen(text), XML_TRUE) == XML_STATUS_ERROR) xml_failure(parser); } END_TEST START_TEST(test_bom_utf16_be) { char text[] = "\376\377\0<\0e\0/\0>"; if (XML_Parse(parser, text, sizeof(text)-1, XML_TRUE) == XML_STATUS_ERROR) xml_failure(parser); } END_TEST START_TEST(test_bom_utf16_le) { char text[] = "\377\376<\0e\0/\0>\0"; if (XML_Parse(parser, text, sizeof(text)-1, XML_TRUE) == XML_STATUS_ERROR) xml_failure(parser); } END_TEST static void XMLCALL accumulate_characters(void *userData, const XML_Char *s, int len) { CharData_AppendXMLChars((CharData *)userData, s, len); } static void XMLCALL accumulate_attribute(void *userData, const XML_Char *name, const XML_Char **atts) { CharData *storage = (CharData *)userData; if (storage->count < 0 && atts != NULL && atts[0] != NULL) { /* "accumulate" the value of the first attribute we see */ CharData_AppendXMLChars(storage, atts[1], -1); } } static void _run_character_check(XML_Char *text, XML_Char *expected, const char *file, int line) { CharData storage; CharData_Init(&storage); XML_SetUserData(parser, &storage); XML_SetCharacterDataHandler(parser, accumulate_characters); if (XML_Parse(parser, text, strlen(text), XML_TRUE) == XML_STATUS_ERROR) _xml_failure(parser, file, line); CharData_CheckXMLChars(&storage, expected); } #define run_character_check(text, expected) \ _run_character_check(text, expected, __FILE__, __LINE__) static void _run_attribute_check(XML_Char *text, XML_Char *expected, const char *file, int line) { CharData storage; CharData_Init(&storage); XML_SetUserData(parser, &storage); XML_SetStartElementHandler(parser, accumulate_attribute); if (XML_Parse(parser, text, strlen(text), XML_TRUE) == XML_STATUS_ERROR) _xml_failure(parser, file, line); CharData_CheckXMLChars(&storage, expected); } #define run_attribute_check(text, expected) \ _run_attribute_check(text, expected, __FILE__, __LINE__) /* Regression test for SF bug #491986. */ START_TEST(test_danish_latin1) { char *text = "\n" "Jørgen æøåÆØÅ"; run_character_check(text, "J\xC3\xB8rgen \xC3\xA6\xC3\xB8\xC3\xA5\xC3\x86\xC3\x98\xC3\x85"); } END_TEST /* Regression test for SF bug #514281. */ START_TEST(test_french_charref_hexidecimal) { char *text = "\n" "éèàçêÈ"; run_character_check(text, "\xC3\xA9\xC3\xA8\xC3\xA0\xC3\xA7\xC3\xAA\xC3\x88"); } END_TEST START_TEST(test_french_charref_decimal) { char *text = "\n" "éèàçêÈ"; run_character_check(text, "\xC3\xA9\xC3\xA8\xC3\xA0\xC3\xA7\xC3\xAA\xC3\x88"); } END_TEST START_TEST(test_french_latin1) { char *text = "\n" "\xE9\xE8\xE0\xE7\xEa\xC8"; run_character_check(text, "\xC3\xA9\xC3\xA8\xC3\xA0\xC3\xA7\xC3\xAA\xC3\x88"); } END_TEST START_TEST(test_french_utf8) { char *text = "\n" "\xC3\xA9"; run_character_check(text, "\xC3\xA9"); } END_TEST /* Regression test for SF bug #600479. XXX There should be a test that exercises all legal XML Unicode characters as PCDATA and attribute value content, and XML Name characters as part of element and attribute names. */ START_TEST(test_utf8_false_rejection) { char *text = "\xEF\xBA\xBF"; run_character_check(text, "\xEF\xBA\xBF"); } END_TEST /* Regression test for SF bug #477667. This test assures that any 8-bit character followed by a 7-bit character will not be mistakenly interpreted as a valid UTF-8 sequence. */ START_TEST(test_illegal_utf8) { char text[100]; int i; for (i = 128; i <= 255; ++i) { sprintf(text, "%ccd", i); if (XML_Parse(parser, text, strlen(text), XML_TRUE) == XML_STATUS_OK) { sprintf(text, "expected token error for '%c' (ordinal %d) in UTF-8 text", i, i); fail(text); } else if (XML_GetErrorCode(parser) != XML_ERROR_INVALID_TOKEN) xml_failure(parser); /* Reset the parser since we use the same parser repeatedly. */ XML_ParserReset(parser, NULL); } } END_TEST START_TEST(test_utf16) { /* some text */ char text[] = "\000<\000?\000x\000m\000\154\000 \000v\000e\000r\000s\000i\000o" "\000n\000=\000'\0001\000.\000\060\000'\000 \000e\000n\000c\000o" "\000d\000i\000n\000g\000=\000'\000U\000T\000F\000-\0001\000\066" "\000'\000?\000>\000\n" "\000<\000d\000o\000c\000 \000a\000=\000'\0001\0002\0003\000'" "\000>\000s\000o\000m\000e\000 \000t\000e\000x\000t\000<\000/" "\000d\000o\000c\000>"; if (XML_Parse(parser, text, sizeof(text)-1, XML_TRUE) == XML_STATUS_ERROR) xml_failure(parser); } END_TEST START_TEST(test_utf16_le_epilog_newline) { int first_chunk_bytes = 17; char text[] = "\xFF\xFE" /* BOM */ "<\000e\000/\000>\000" /* document element */ "\r\000\n\000\r\000\n\000"; /* epilog */ if (first_chunk_bytes >= sizeof(text) - 1) fail("bad value of first_chunk_bytes"); if ( XML_Parse(parser, text, first_chunk_bytes, XML_FALSE) == XML_STATUS_ERROR) xml_failure(parser); else { enum XML_Status rc; rc = XML_Parse(parser, text + first_chunk_bytes, sizeof(text) - first_chunk_bytes - 1, XML_TRUE); if (rc == XML_STATUS_ERROR) xml_failure(parser); } } END_TEST /* Regression test for SF bug #481609, #774028. */ START_TEST(test_latin1_umlauts) { char *text = "\n" "ä ö ü ä ö ü ä ö ü >"; char *utf8 = "\xC3\xA4 \xC3\xB6 \xC3\xBC " "\xC3\xA4 \xC3\xB6 \xC3\xBC " "\xC3\xA4 \xC3\xB6 \xC3\xBC >"; run_character_check(text, utf8); XML_ParserReset(parser, NULL); run_attribute_check(text, utf8); } END_TEST /* Regression test #1 for SF bug #653180. */ START_TEST(test_line_number_after_parse) { char *text = "\n" "\n" "\n"; int lineno; if (XML_Parse(parser, text, strlen(text), XML_FALSE) == XML_STATUS_ERROR) xml_failure(parser); lineno = XML_GetCurrentLineNumber(parser); if (lineno != 4) { char buffer[100]; sprintf(buffer, "expected 4 lines, saw %d", lineno); fail(buffer); } } END_TEST /* Regression test #2 for SF bug #653180. */ START_TEST(test_column_number_after_parse) { char *text = ""; int colno; if (XML_Parse(parser, text, strlen(text), XML_FALSE) == XML_STATUS_ERROR) xml_failure(parser); colno = XML_GetCurrentColumnNumber(parser); if (colno != 11) { char buffer[100]; sprintf(buffer, "expected 11 columns, saw %d", colno); fail(buffer); } } END_TEST static void XMLCALL start_element_event_handler2(void *userData, const XML_Char *name, const XML_Char **attr) { CharData *storage = (CharData *) userData; char buffer[100]; sprintf(buffer, "<%s> at col:%d line:%d\n", name, XML_GetCurrentColumnNumber(parser), XML_GetCurrentLineNumber(parser)); CharData_AppendString(storage, buffer); } static void XMLCALL end_element_event_handler2(void *userData, const XML_Char *name) { CharData *storage = (CharData *) userData; char buffer[100]; sprintf(buffer, " at col:%d line:%d\n", name, XML_GetCurrentColumnNumber(parser), XML_GetCurrentLineNumber(parser)); CharData_AppendString(storage, buffer); } /* Regression test #3 for SF bug #653180. */ START_TEST(test_line_and_column_numbers_inside_handlers) { char *text = "\n" /* Unix end-of-line */ " \r\n" /* Windows end-of-line */ " \r" /* Mac OS end-of-line */ " \n" " \n" " \n" " \n" ""; char *expected = " at col:0 line:1\n" " at col:2 line:2\n" " at col:4 line:3\n" " at col:8 line:3\n" " at col:2 line:4\n" " at col:2 line:5\n" " at col:4 line:6\n" " at col:8 line:6\n" " at col:2 line:7\n" " at col:0 line:8\n"; CharData storage; CharData_Init(&storage); XML_SetUserData(parser, &storage); XML_SetStartElementHandler(parser, start_element_event_handler2); XML_SetEndElementHandler(parser, end_element_event_handler2); if (XML_Parse(parser, text, strlen(text), XML_TRUE) == XML_STATUS_ERROR) xml_failure(parser); CharData_CheckString(&storage, expected); } END_TEST /* Regression test #4 for SF bug #653180. */ START_TEST(test_line_number_after_error) { char *text = "\n" " \n" " "; /* missing */ int lineno; if (XML_Parse(parser, text, strlen(text), XML_FALSE) != XML_STATUS_ERROR) fail("Expected a parse error"); lineno = XML_GetCurrentLineNumber(parser); if (lineno != 3) { char buffer[100]; sprintf(buffer, "expected 3 lines, saw %d", lineno); fail(buffer); } } END_TEST /* Regression test #5 for SF bug #653180. */ START_TEST(test_column_number_after_error) { char *text = "\n" " \n" " "; /* missing */ int colno; if (XML_Parse(parser, text, strlen(text), XML_FALSE) != XML_STATUS_ERROR) fail("Expected a parse error"); colno = XML_GetCurrentColumnNumber(parser); if (colno != 4) { char buffer[100]; sprintf(buffer, "expected 4 columns, saw %d", colno); fail(buffer); } } END_TEST /* Regression test for SF bug #478332. */ START_TEST(test_really_long_lines) { /* This parses an input line longer than INIT_DATA_BUF_SIZE characters long (defined to be 1024 in xmlparse.c). We take a really cheesy approach to building the input buffer, because this avoids writing bugs in buffer-filling code. */ char *text = "" /* 64 chars */ "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-+" /* until we have at least 1024 characters on the line: */ "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-+" "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-+" "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-+" "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-+" "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-+" "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-+" "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-+" "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-+" "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-+" "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-+" "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-+" "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-+" "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-+" "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-+" "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-+" "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-+" ""; if (XML_Parse(parser, text, strlen(text), XML_TRUE) == XML_STATUS_ERROR) xml_failure(parser); } END_TEST /* * Element event tests. */ static void XMLCALL end_element_event_handler(void *userData, const XML_Char *name) { CharData *storage = (CharData *) userData; CharData_AppendString(storage, "/"); CharData_AppendXMLChars(storage, name, -1); } START_TEST(test_end_element_events) { char *text = ""; char *expected = "/c/b/f/d/a"; CharData storage; CharData_Init(&storage); XML_SetUserData(parser, &storage); XML_SetEndElementHandler(parser, end_element_event_handler); if (XML_Parse(parser, text, strlen(text), XML_TRUE) == XML_STATUS_ERROR) xml_failure(parser); CharData_CheckString(&storage, expected); } END_TEST /* * Attribute tests. */ /* Helpers used by the following test; this checks any "attr" and "refs" attributes to make sure whitespace has been normalized. Return true if whitespace has been normalized in a string, using the rules for attribute value normalization. The 'is_cdata' flag is needed since CDATA attributes don't need to have multiple whitespace characters collapsed to a single space, while other attribute data types do. (Section 3.3.3 of the recommendation.) */ static int is_whitespace_normalized(const XML_Char *s, int is_cdata) { int blanks = 0; int at_start = 1; while (*s) { if (*s == ' ') ++blanks; else if (*s == '\t' || *s == '\n' || *s == '\r') return 0; else { if (at_start) { at_start = 0; if (blanks && !is_cdata) /* illegal leading blanks */ return 0; } else if (blanks > 1 && !is_cdata) return 0; blanks = 0; } ++s; } if (blanks && !is_cdata) return 0; return 1; } /* Check the attribute whitespace checker: */ static void testhelper_is_whitespace_normalized(void) { assert(is_whitespace_normalized("abc", 0)); assert(is_whitespace_normalized("abc", 1)); assert(is_whitespace_normalized("abc def ghi", 0)); assert(is_whitespace_normalized("abc def ghi", 1)); assert(!is_whitespace_normalized(" abc def ghi", 0)); assert(is_whitespace_normalized(" abc def ghi", 1)); assert(!is_whitespace_normalized("abc def ghi", 0)); assert(is_whitespace_normalized("abc def ghi", 1)); assert(!is_whitespace_normalized("abc def ghi ", 0)); assert(is_whitespace_normalized("abc def ghi ", 1)); assert(!is_whitespace_normalized(" ", 0)); assert(is_whitespace_normalized(" ", 1)); assert(!is_whitespace_normalized("\t", 0)); assert(!is_whitespace_normalized("\t", 1)); assert(!is_whitespace_normalized("\n", 0)); assert(!is_whitespace_normalized("\n", 1)); assert(!is_whitespace_normalized("\r", 0)); assert(!is_whitespace_normalized("\r", 1)); assert(!is_whitespace_normalized("abc\t def", 1)); } static void XMLCALL check_attr_contains_normalized_whitespace(void *userData, const XML_Char *name, const XML_Char **atts) { int i; for (i = 0; atts[i] != NULL; i += 2) { const XML_Char *attrname = atts[i]; const XML_Char *value = atts[i + 1]; if (strcmp("attr", attrname) == 0 || strcmp("ents", attrname) == 0 || strcmp("refs", attrname) == 0) { if (!is_whitespace_normalized(value, 0)) { char buffer[256]; sprintf(buffer, "attribute value not normalized: %s='%s'", attrname, value); fail(buffer); } } } } START_TEST(test_attr_whitespace_normalization) { char *text = "\n" "]>\n" "\n" " \n" " \n" ""; XML_SetStartElementHandler(parser, check_attr_contains_normalized_whitespace); if (XML_Parse(parser, text, strlen(text), XML_TRUE) == XML_STATUS_ERROR) xml_failure(parser); } END_TEST /* * XML declaration tests. */ START_TEST(test_xmldecl_misplaced) { expect_failure("\n" "\n" "", XML_ERROR_MISPLACED_XML_PI, "failed to report misplaced XML declaration"); } END_TEST /* Regression test for SF bug #584832. */ static int XMLCALL UnknownEncodingHandler(void *data,const XML_Char *encoding,XML_Encoding *info) { if (strcmp(encoding,"unsupported-encoding") == 0) { int i; for (i = 0; i < 256; ++i) info->map[i] = i; info->data = NULL; info->convert = NULL; info->release = NULL; return XML_STATUS_OK; } return XML_STATUS_ERROR; } START_TEST(test_unknown_encoding_internal_entity) { char *text = "\n" "]>\n" ""; XML_SetUnknownEncodingHandler(parser, UnknownEncodingHandler, NULL); if (XML_Parse(parser, text, strlen(text), XML_TRUE) == XML_STATUS_ERROR) xml_failure(parser); } END_TEST /* Regression test for SF bug #620106. */ static int XMLCALL external_entity_loader_set_encoding(XML_Parser parser, const XML_Char *context, const XML_Char *base, const XML_Char *systemId, const XML_Char *publicId) { /* This text says it's an unsupported encoding, but it's really UTF-8, which we tell Expat using XML_SetEncoding(). */ char *text = "" "\xC3\xA9"; XML_Parser extparser; extparser = XML_ExternalEntityParserCreate(parser, context, NULL); if (extparser == NULL) fail("Could not create external entity parser."); if (!XML_SetEncoding(extparser, "utf-8")) fail("XML_SetEncoding() ignored for external entity"); if ( XML_Parse(extparser, text, strlen(text), XML_TRUE) == XML_STATUS_ERROR) { xml_failure(parser); return 0; } return 1; } START_TEST(test_ext_entity_set_encoding) { char *text = "\n" "]>\n" "&en;"; XML_SetExternalEntityRefHandler(parser, external_entity_loader_set_encoding); run_character_check(text, "\xC3\xA9"); } END_TEST /* Test that no error is reported for unknown entities if we don't read an external subset. This was fixed in Expat 1.95.5. */ START_TEST(test_wfc_undeclared_entity_unread_external_subset) { char *text = "\n" "&entity;"; if (XML_Parse(parser, text, strlen(text), XML_TRUE) == XML_STATUS_ERROR) xml_failure(parser); } END_TEST /* Test that an error is reported for unknown entities if we don't have an external subset. */ START_TEST(test_wfc_undeclared_entity_no_external_subset) { expect_failure("&entity;", XML_ERROR_UNDEFINED_ENTITY, "Parser did not report undefined entity w/out a DTD."); } END_TEST /* Test that an error is reported for unknown entities if we don't read an external subset, but have been declared standalone. */ START_TEST(test_wfc_undeclared_entity_standalone) { char *text = "\n" "\n" "&entity;"; expect_failure(text, XML_ERROR_UNDEFINED_ENTITY, "Parser did not report undefined entity (standalone)."); } END_TEST static int XMLCALL external_entity_loader(XML_Parser parser, const XML_Char *context, const XML_Char *base, const XML_Char *systemId, const XML_Char *publicId) { char *text = (char *)XML_GetUserData(parser); XML_Parser extparser; extparser = XML_ExternalEntityParserCreate(parser, context, NULL); if (extparser == NULL) fail("Could not create external entity parser."); if ( XML_Parse(extparser, text, strlen(text), XML_TRUE) == XML_STATUS_ERROR) { xml_failure(parser); return XML_STATUS_ERROR; } return XML_STATUS_OK; } /* Test that an error is reported for unknown entities if we have read an external subset, and standalone is true. */ START_TEST(test_wfc_undeclared_entity_with_external_subset_standalone) { char *text = "\n" "\n" "&entity;"; char *foo_text = ""; XML_SetParamEntityParsing(parser, XML_PARAM_ENTITY_PARSING_ALWAYS); XML_SetUserData(parser, foo_text); XML_SetExternalEntityRefHandler(parser, external_entity_loader); expect_failure(text, XML_ERROR_UNDEFINED_ENTITY, "Parser did not report undefined entity (external DTD)."); } END_TEST /* Test that no error is reported for unknown entities if we have read an external subset, and standalone is false. */ START_TEST(test_wfc_undeclared_entity_with_external_subset) { char *text = "\n" "\n" "&entity;"; char *foo_text = ""; XML_SetParamEntityParsing(parser, XML_PARAM_ENTITY_PARSING_ALWAYS); XML_SetUserData(parser, foo_text); XML_SetExternalEntityRefHandler(parser, external_entity_loader); if (XML_Parse(parser, text, strlen(text), XML_TRUE) == XML_STATUS_ERROR) xml_failure(parser); } END_TEST START_TEST(test_wfc_no_recursive_entity_refs) { char *text = "\n" "]>\n" "&entity;"; expect_failure(text, XML_ERROR_RECURSIVE_ENTITY_REF, "Parser did not report recursive entity reference."); } END_TEST /* Regression test for SF bug #483514. */ START_TEST(test_dtd_default_handling) { char *text = "\n" "\n" "\n" "\n" "\n" "\n" "]>"; XML_SetDefaultHandler(parser, accumulate_characters); XML_SetDoctypeDeclHandler(parser, dummy_start_doctype_handler, dummy_end_doctype_handler); XML_SetEntityDeclHandler(parser, dummy_entity_decl_handler); XML_SetNotationDeclHandler(parser, dummy_notation_decl_handler); XML_SetElementDeclHandler(parser, dummy_element_decl_handler); XML_SetAttlistDeclHandler(parser, dummy_attlist_decl_handler); XML_SetProcessingInstructionHandler(parser, dummy_pi_handler); XML_SetCommentHandler(parser, dummy_comment_handler); run_character_check(text, "\n\n\n\n\n\n\n"); } END_TEST /* See related SF bug #673791. When namespace processing is enabled, setting the namespace URI for a prefix is not allowed; this test ensures that it *is* allowed when namespace processing is not enabled. (See Namespaces in XML, section 2.) */ START_TEST(test_empty_ns_without_namespaces) { char *text = "\n" " \n" ""; if (XML_Parse(parser, text, strlen(text), XML_TRUE) == XML_STATUS_ERROR) xml_failure(parser); } END_TEST /* Regression test for SF bug #824420. Checks that an xmlns:prefix attribute set in an attribute's default value isn't misinterpreted. */ START_TEST(test_ns_in_attribute_default_without_namespaces) { char *text = "\n" " ]>\n" ""; if (XML_Parse(parser, text, strlen(text), XML_TRUE) == XML_STATUS_ERROR) xml_failure(parser); } END_TEST /* * Namespaces tests. */ static void namespace_setup(void) { parser = XML_ParserCreateNS(NULL, ' '); if (parser == NULL) fail("Parser not created."); } static void namespace_teardown(void) { basic_teardown(); } /* Check that an element name and attribute name match the expected values. The expected values are passed as an array reference of string pointers provided as the userData argument; the first is the expected element name, and the second is the expected attribute name. */ static void XMLCALL triplet_start_checker(void *userData, const XML_Char *name, const XML_Char **atts) { char **elemstr = (char **)userData; char buffer[1024]; if (strcmp(elemstr[0], name) != 0) { sprintf(buffer, "unexpected start string: '%s'", name); fail(buffer); } if (strcmp(elemstr[1], atts[0]) != 0) { sprintf(buffer, "unexpected attribute string: '%s'", atts[0]); fail(buffer); } } /* Check that the element name passed to the end-element handler matches the expected value. The expected value is passed as the first element in an array of strings passed as the userData argument. */ static void XMLCALL triplet_end_checker(void *userData, const XML_Char *name) { char **elemstr = (char **)userData; if (strcmp(elemstr[0], name) != 0) { char buffer[1024]; sprintf(buffer, "unexpected end string: '%s'", name); fail(buffer); } } START_TEST(test_return_ns_triplet) { char *text = ""; char *elemstr[] = { "http://expat.sf.net/ e foo", "http://expat.sf.net/ a bar" }; XML_SetReturnNSTriplet(parser, XML_TRUE); XML_SetUserData(parser, elemstr); XML_SetElementHandler(parser, triplet_start_checker, triplet_end_checker); if (XML_Parse(parser, text, strlen(text), XML_TRUE) == XML_STATUS_ERROR) xml_failure(parser); } END_TEST static void XMLCALL overwrite_start_checker(void *userData, const XML_Char *name, const XML_Char **atts) { CharData *storage = (CharData *) userData; CharData_AppendString(storage, "start "); CharData_AppendXMLChars(storage, name, -1); while (*atts != NULL) { CharData_AppendString(storage, "\nattribute "); CharData_AppendXMLChars(storage, *atts, -1); atts += 2; } CharData_AppendString(storage, "\n"); } static void XMLCALL overwrite_end_checker(void *userData, const XML_Char *name) { CharData *storage = (CharData *) userData; CharData_AppendString(storage, "end "); CharData_AppendXMLChars(storage, name, -1); CharData_AppendString(storage, "\n"); } static void run_ns_tagname_overwrite_test(char *text, char *result) { CharData storage; CharData_Init(&storage); XML_SetUserData(parser, &storage); XML_SetElementHandler(parser, overwrite_start_checker, overwrite_end_checker); if (XML_Parse(parser, text, strlen(text), XML_TRUE) == XML_STATUS_ERROR) xml_failure(parser); CharData_CheckString(&storage, result); } /* Regression test for SF bug #566334. */ START_TEST(test_ns_tagname_overwrite) { char *text = "\n" " \n" " \n" ""; char *result = "start http://xml.libexpat.org/ e\n" "start http://xml.libexpat.org/ f\n" "attribute http://xml.libexpat.org/ attr\n" "end http://xml.libexpat.org/ f\n" "start http://xml.libexpat.org/ g\n" "attribute http://xml.libexpat.org/ attr2\n" "end http://xml.libexpat.org/ g\n" "end http://xml.libexpat.org/ e\n"; run_ns_tagname_overwrite_test(text, result); } END_TEST /* Regression test for SF bug #566334. */ START_TEST(test_ns_tagname_overwrite_triplet) { char *text = "\n" " \n" " \n" ""; char *result = "start http://xml.libexpat.org/ e n\n" "start http://xml.libexpat.org/ f n\n" "attribute http://xml.libexpat.org/ attr n\n" "end http://xml.libexpat.org/ f n\n" "start http://xml.libexpat.org/ g n\n" "attribute http://xml.libexpat.org/ attr2 n\n" "end http://xml.libexpat.org/ g n\n" "end http://xml.libexpat.org/ e n\n"; XML_SetReturnNSTriplet(parser, XML_TRUE); run_ns_tagname_overwrite_test(text, result); } END_TEST /* Regression test for SF bug #620343. */ static void XMLCALL start_element_fail(void *userData, const XML_Char *name, const XML_Char **atts) { /* We should never get here. */ fail("should never reach start_element_fail()"); } static void XMLCALL start_ns_clearing_start_element(void *userData, const XML_Char *prefix, const XML_Char *uri) { XML_SetStartElementHandler((XML_Parser) userData, NULL); } START_TEST(test_start_ns_clears_start_element) { /* This needs to use separate start/end tags; using the empty tag syntax doesn't cause the problematic path through Expat to be taken. */ char *text = ""; XML_SetStartElementHandler(parser, start_element_fail); XML_SetStartNamespaceDeclHandler(parser, start_ns_clearing_start_element); XML_UseParserAsHandlerArg(parser); if (XML_Parse(parser, text, strlen(text), XML_TRUE) == XML_STATUS_ERROR) xml_failure(parser); } END_TEST /* Regression test for SF bug #616863. */ static int XMLCALL external_entity_handler(XML_Parser parser, const XML_Char *context, const XML_Char *base, const XML_Char *systemId, const XML_Char *publicId) { int callno = 1 + (int)XML_GetUserData(parser); char *text; XML_Parser p2; if (callno == 1) text = ("\n" "\n" "\n"); else text = ("" ""); XML_SetUserData(parser, (void *) callno); p2 = XML_ExternalEntityParserCreate(parser, context, NULL); if (XML_Parse(p2, text, strlen(text), XML_TRUE) == XML_STATUS_ERROR) { xml_failure(p2); return 0; } XML_ParserFree(p2); return 1; } START_TEST(test_default_ns_from_ext_subset_and_ext_ge) { char *text = "\n" "\n" "]>\n" "\n" "&en;\n" ""; XML_SetParamEntityParsing(parser, XML_PARAM_ENTITY_PARSING_ALWAYS); XML_SetExternalEntityRefHandler(parser, external_entity_handler); /* We actually need to set this handler to tickle this bug. */ XML_SetStartElementHandler(parser, dummy_start_element); XML_SetUserData(parser, NULL); if (XML_Parse(parser, text, strlen(text), XML_TRUE) == XML_STATUS_ERROR) xml_failure(parser); } END_TEST /* Regression test #1 for SF bug #673791. */ START_TEST(test_ns_prefix_with_empty_uri_1) { char *text = "\n" " \n" ""; expect_failure(text, XML_ERROR_UNDECLARING_PREFIX, "Did not report re-setting namespace" " URI with prefix to ''."); } END_TEST /* Regression test #2 for SF bug #673791. */ START_TEST(test_ns_prefix_with_empty_uri_2) { char *text = "\n" ""; expect_failure(text, XML_ERROR_UNDECLARING_PREFIX, "Did not report setting namespace URI with prefix to ''."); } END_TEST /* Regression test #3 for SF bug #673791. */ START_TEST(test_ns_prefix_with_empty_uri_3) { char *text = "\n" " \n" "]>\n" ""; expect_failure(text, XML_ERROR_UNDECLARING_PREFIX, "Didn't report attr default setting NS w/ prefix to ''."); } END_TEST /* Regression test #4 for SF bug #673791. */ START_TEST(test_ns_prefix_with_empty_uri_4) { char *text = "\n" " \n" "]>\n" ""; /* Packaged info expected by the end element handler; the weird structuring lets us re-use the triplet_end_checker() function also used for another test. */ char *elemstr[] = { "http://xml.libexpat.org/ doc prefix" }; XML_SetReturnNSTriplet(parser, XML_TRUE); XML_SetUserData(parser, elemstr); XML_SetEndElementHandler(parser, triplet_end_checker); if (XML_Parse(parser, text, strlen(text), XML_TRUE) == XML_STATUS_ERROR) xml_failure(parser); } END_TEST START_TEST(test_ns_default_with_empty_uri) { char *text = "\n" " \n" ""; if (XML_Parse(parser, text, strlen(text), XML_TRUE) == XML_STATUS_ERROR) xml_failure(parser); } END_TEST /* Regression test for SF bug #692964: two prefixes for one namespace. */ START_TEST(test_ns_duplicate_attrs_diff_prefixes) { char *text = ""; expect_failure(text, XML_ERROR_DUPLICATE_ATTRIBUTE, "did not report multiple attributes with same URI+name"); } END_TEST /* Regression test for SF bug #695401: unbound prefix. */ START_TEST(test_ns_unbound_prefix_on_attribute) { char *text = ""; expect_failure(text, XML_ERROR_UNBOUND_PREFIX, "did not report unbound prefix on attribute"); } END_TEST /* Regression test for SF bug #695401: unbound prefix. */ START_TEST(test_ns_unbound_prefix_on_element) { char *text = ""; expect_failure(text, XML_ERROR_UNBOUND_PREFIX, "did not report unbound prefix on element"); } END_TEST static Suite * make_suite(void) { Suite *s = suite_create("basic"); TCase *tc_basic = tcase_create("basic tests"); TCase *tc_namespace = tcase_create("XML namespaces"); suite_add_tcase(s, tc_basic); tcase_add_checked_fixture(tc_basic, basic_setup, basic_teardown); tcase_add_test(tc_basic, test_nul_byte); tcase_add_test(tc_basic, test_u0000_char); tcase_add_test(tc_basic, test_bom_utf8); tcase_add_test(tc_basic, test_bom_utf16_be); tcase_add_test(tc_basic, test_bom_utf16_le); tcase_add_test(tc_basic, test_illegal_utf8); tcase_add_test(tc_basic, test_utf16); tcase_add_test(tc_basic, test_utf16_le_epilog_newline); tcase_add_test(tc_basic, test_latin1_umlauts); /* Regression test for SF bug #491986. */ tcase_add_test(tc_basic, test_danish_latin1); /* Regression test for SF bug #514281. */ tcase_add_test(tc_basic, test_french_charref_hexidecimal); tcase_add_test(tc_basic, test_french_charref_decimal); tcase_add_test(tc_basic, test_french_latin1); tcase_add_test(tc_basic, test_french_utf8); tcase_add_test(tc_basic, test_utf8_false_rejection); tcase_add_test(tc_basic, test_line_number_after_parse); tcase_add_test(tc_basic, test_column_number_after_parse); tcase_add_test(tc_basic, test_line_and_column_numbers_inside_handlers); tcase_add_test(tc_basic, test_line_number_after_error); tcase_add_test(tc_basic, test_column_number_after_error); tcase_add_test(tc_basic, test_really_long_lines); tcase_add_test(tc_basic, test_end_element_events); tcase_add_test(tc_basic, test_attr_whitespace_normalization); tcase_add_test(tc_basic, test_xmldecl_misplaced); tcase_add_test(tc_basic, test_unknown_encoding_internal_entity); tcase_add_test(tc_basic, test_wfc_undeclared_entity_unread_external_subset); tcase_add_test(tc_basic, test_wfc_undeclared_entity_no_external_subset); tcase_add_test(tc_basic, test_wfc_undeclared_entity_standalone); tcase_add_test(tc_basic, test_wfc_undeclared_entity_with_external_subset); tcase_add_test(tc_basic, test_wfc_undeclared_entity_with_external_subset_standalone); tcase_add_test(tc_basic, test_wfc_no_recursive_entity_refs); tcase_add_test(tc_basic, test_ext_entity_set_encoding); tcase_add_test(tc_basic, test_dtd_default_handling); tcase_add_test(tc_basic, test_empty_ns_without_namespaces); tcase_add_test(tc_basic, test_ns_in_attribute_default_without_namespaces); suite_add_tcase(s, tc_namespace); tcase_add_checked_fixture(tc_namespace, namespace_setup, namespace_teardown); tcase_add_test(tc_namespace, test_return_ns_triplet); tcase_add_test(tc_namespace, test_ns_tagname_overwrite); tcase_add_test(tc_namespace, test_ns_tagname_overwrite_triplet); tcase_add_test(tc_namespace, test_start_ns_clears_start_element); tcase_add_test(tc_namespace, test_default_ns_from_ext_subset_and_ext_ge); tcase_add_test(tc_namespace, test_ns_prefix_with_empty_uri_1); tcase_add_test(tc_namespace, test_ns_prefix_with_empty_uri_2); tcase_add_test(tc_namespace, test_ns_prefix_with_empty_uri_3); tcase_add_test(tc_namespace, test_ns_prefix_with_empty_uri_4); tcase_add_test(tc_namespace, test_ns_default_with_empty_uri); tcase_add_test(tc_namespace, test_ns_duplicate_attrs_diff_prefixes); tcase_add_test(tc_namespace, test_ns_unbound_prefix_on_attribute); tcase_add_test(tc_namespace, test_ns_unbound_prefix_on_element); return s; } int main(int argc, char *argv[]) { int i, nf; int forking = 0, forking_set = 0; int verbosity = CK_NORMAL; Suite *s = make_suite(); SRunner *sr = srunner_create(s); /* run the tests for internal helper functions */ testhelper_is_whitespace_normalized(); for (i = 1; i < argc; ++i) { char *opt = argv[i]; if (strcmp(opt, "-v") == 0 || strcmp(opt, "--verbose") == 0) verbosity = CK_VERBOSE; else if (strcmp(opt, "-q") == 0 || strcmp(opt, "--quiet") == 0) verbosity = CK_SILENT; else if (strcmp(opt, "-f") == 0 || strcmp(opt, "--fork") == 0) { forking = 1; forking_set = 1; } else if (strcmp(opt, "-n") == 0 || strcmp(opt, "--no-fork") == 0) { forking = 0; forking_set = 1; } else { fprintf(stderr, "runtests: unknown option '%s'\n", opt); return 2; } } if (forking_set) srunner_set_fork_status(sr, forking ? CK_FORK : CK_NOFORK); if (verbosity != CK_SILENT) printf("Expat version: %s\n", XML_ExpatVersion()); srunner_run_all(sr, verbosity); nf = srunner_ntests_failed(sr); srunner_free(sr); return (nf == 0) ? EXIT_SUCCESS : EXIT_FAILURE; } tla-1.3.5+dfsg/src/expat/tests/minicheck.h0000644000175000017500000000337410457621771017133 0ustar useruser/* Miniature re-implementation of the "check" library. * * This is intended to support just enough of check to run the Expat * tests. This interface is based entirely on the portion of the * check library being used. * * This is *source* compatible, but not necessary *link* compatible. */ #define CK_NOFORK 0 #define CK_FORK 1 #define CK_SILENT 0 #define CK_NORMAL 1 #define CK_VERBOSE 2 #define START_TEST(testname) static void testname(void) { #define END_TEST } #define fail(msg) _fail_unless(0, __FILE__, __LINE__, msg) typedef void (*tcase_setup_function)(void); typedef void (*tcase_teardown_function)(void); typedef void (*tcase_test_function)(void); typedef struct SRunner SRunner; typedef struct Suite Suite; typedef struct TCase TCase; struct SRunner { Suite *suite; int forking; int nchecks; int nfailures; }; struct Suite { char *name; TCase *tests; }; struct TCase { char *name; tcase_setup_function setup; tcase_teardown_function teardown; tcase_test_function *tests; int ntests; int allocated; TCase *next_tcase; }; /* * Prototypes for the actual implementation. */ void _fail_unless(int condition, const char *file, int line, char *msg); Suite *suite_create(char *name); TCase *tcase_create(char *name); void suite_add_tcase(Suite *suite, TCase *tc); void tcase_add_checked_fixture(TCase *, tcase_setup_function, tcase_teardown_function); void tcase_add_test(TCase *tc, tcase_test_function test); SRunner *srunner_create(Suite *suite); void srunner_set_fork_status(SRunner *runner, int forking); void srunner_run_all(SRunner *runner, int verbosity); int srunner_ntests_failed(SRunner *runner); void srunner_free(SRunner *runner); tla-1.3.5+dfsg/src/expat/tests/chardata.c0000644000175000017500000000573610457621771016747 0ustar useruser/* Copyright (c) 1998-2003 Thai Open Source Software Center Ltd See the file COPYING for copying permission. chardata.c */ #ifdef HAVE_EXPAT_CONFIG_H #include #endif #ifdef HAVE_CHECK_H #include #else #include "minicheck.h" #endif #include #include #include #include "chardata.h" static int xmlstrlen(const XML_Char *s) { int len = 0; assert(s != NULL); while (s[len] != 0) ++len; return len; } void CharData_Init(CharData *storage) { assert(storage != NULL); storage->count = -1; } void CharData_AppendString(CharData *storage, const char *s) { int maxchars = sizeof(storage->data) / sizeof(storage->data[0]); int len; assert(s != NULL); len = strlen(s); if (storage->count < 0) storage->count = 0; if ((len + storage->count) > maxchars) { len = (maxchars - storage->count); } if (len + storage->count < sizeof(storage->data)) { memcpy(storage->data + storage->count, s, len); storage->count += len; } } void CharData_AppendXMLChars(CharData *storage, const XML_Char *s, int len) { int maxchars; assert(storage != NULL); assert(s != NULL); maxchars = sizeof(storage->data) / sizeof(storage->data[0]); if (storage->count < 0) storage->count = 0; if (len < 0) len = xmlstrlen(s); if ((len + storage->count) > maxchars) { len = (maxchars - storage->count); } if (len + storage->count < sizeof(storage->data)) { memcpy(storage->data + storage->count, s, len * sizeof(storage->data[0])); storage->count += len; } } int CharData_CheckString(CharData *storage, const char *expected) { char buffer[1280]; int len; int count; assert(storage != NULL); assert(expected != NULL); count = (storage->count < 0) ? 0 : storage->count; len = strlen(expected); if (len != count) { if (sizeof(XML_Char) == 1) sprintf(buffer, "wrong number of data characters:" " got %d, expected %d:\n%s", count, len, storage->data); else sprintf(buffer, "wrong number of data characters: got %d, expected %d", count, len); fail(buffer); return 0; } if (memcmp(expected, storage->data, len) != 0) { fail("got bad data bytes"); return 0; } return 1; } int CharData_CheckXMLChars(CharData *storage, const XML_Char *expected) { char buffer[1024]; int len = xmlstrlen(expected); int count; assert(storage != NULL); count = (storage->count < 0) ? 0 : storage->count; if (len != count) { sprintf(buffer, "wrong number of data characters: got %d, expected %d", count, len); fail(buffer); return 0; } if (memcmp(expected, storage->data, len * sizeof(storage->data[0])) != 0) { fail("got bad data bytes"); return 0; } return 1; } tla-1.3.5+dfsg/src/expat/tests/README.txt0000644000175000017500000000103210457621771016513 0ustar useruserThis directory contains the (fledgling) test suite for Expat. The tests provide general unit testing and regression coverage. The tests are not expected to be useful examples of Expat usage; see the examples/ directory for that. The Expat tests use the "Check" unit testing framework for C. More information on Check can be found at: http://check.sourceforge.net/ Check 0.8 must be installed before the unit tests can be compiled & run. Since both Check and this test suite are young, it can all change in a later version. tla-1.3.5+dfsg/src/expat/tests/benchmark/0000755000175000017500000000000010457621771016753 5ustar userusertla-1.3.5+dfsg/src/expat/tests/benchmark/README.txt0000644000175000017500000000104510457621771020451 0ustar useruserUse this benchmark command line utility as follows: benchmark [-n] <# iterations> The command line arguments are: -n ... optional; if supplied, then namespace processing is turned on ... name/path of test xml file ... size of processing buffer; the file is parsed in chunks of this size <# iterations> ... how often will the file be parsed Returns: The time (in seconds) it takes to parse the test file, averaged of the number of iterations.tla-1.3.5+dfsg/src/expat/tests/benchmark/benchmark.c0000644000175000017500000000474510457621771021063 0ustar useruser#include #include #include #include #include "expat.h" static void usage(const char *prog, int rc) { fprintf(stderr, "usage: %s [-n] filename bufferSize nr_of_loops\n", prog); exit(rc); } int main (int argc, char *argv[]) { XML_Parser parser; char *XMLBuf, *XMLBufEnd, *XMLBufPtr; FILE *fd; struct stat fileAttr; int nrOfLoops, bufferSize, fileSize, i, isFinal; int j = 0, ns = 0; clock_t tstart, tend; double cpuTime = 0.0; if (argc > 1) { if (argv[1][0] == '-') { if (argv[1][1] == 'n' && argv[1][2] == '\0') { ns = 1; j = 1; } else usage(argv[0], 1); } } if (argc != j + 4) usage(argv[0], 1); if (stat (argv[j + 1], &fileAttr) != 0) { fprintf (stderr, "could not access file '%s'\n", argv[j + 1]); return 2; } fd = fopen (argv[j + 1], "r"); if (!fd) { fprintf (stderr, "could not open file '%s'\n", argv[j + 1]); exit(2); } bufferSize = atoi (argv[j + 2]); nrOfLoops = atoi (argv[j + 3]); if (bufferSize <= 0 || nrOfLoops <= 0) { fprintf (stderr, "buffer size and nr of loops must be greater than zero.\n"); exit(3); } XMLBuf = malloc (fileAttr.st_size); fileSize = fread (XMLBuf, sizeof (char), fileAttr.st_size, fd); fclose (fd); i = 0; XMLBufEnd = XMLBuf + fileSize; while (i < nrOfLoops) { XMLBufPtr = XMLBuf; isFinal = 0; if (ns) parser = XML_ParserCreateNS(NULL, '!'); else parser = XML_ParserCreate(NULL); tstart = clock(); do { int parseBufferSize = XMLBufEnd - XMLBufPtr; if (parseBufferSize <= bufferSize) isFinal = 1; else parseBufferSize = bufferSize; if (!XML_Parse (parser, XMLBufPtr, parseBufferSize, isFinal)) { fprintf (stderr, "error '%s' at line %d character %d\n", XML_ErrorString (XML_GetErrorCode (parser)), XML_GetCurrentLineNumber (parser), XML_GetCurrentColumnNumber (parser)); free (XMLBuf); XML_ParserFree (parser); exit (4); } XMLBufPtr += bufferSize; } while (!isFinal); tend = clock(); cpuTime += ((double) (tend - tstart)) / CLOCKS_PER_SEC; XML_ParserFree (parser); i++; } free (XMLBuf); printf ("%d loops, with buffer size %d. Average time per loop: %f\n", nrOfLoops, bufferSize, cpuTime / (double) nrOfLoops); return 0; } tla-1.3.5+dfsg/src/expat/tests/benchmark/benchmark.dsw0000644000175000017500000000141010457621771021420 0ustar useruserMicrosoft Developer Studio Workspace File, Format Version 6.00 # WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! ############################################################################### Project: "benchmark"=.\benchmark.dsp - Package Owner=<4> Package=<5> {{{ }}} Package=<4> {{{ Begin Project Dependency Project_Dep_Name expat End Project Dependency }}} ############################################################################### Project: "expat"=..\..\lib\expat.dsp - Package Owner=<4> Package=<5> {{{ }}} Package=<4> {{{ }}} ############################################################################### Global: Package=<5> {{{ }}} Package=<3> {{{ }}} ############################################################################### tla-1.3.5+dfsg/src/expat/tests/benchmark/benchmark.dsp0000644000175000017500000000646510457621771021430 0ustar useruser# Microsoft Developer Studio Project File - Name="benchmark" - Package Owner=<4> # Microsoft Developer Studio Generated Build File, Format Version 6.00 # ** DO NOT EDIT ** # TARGTYPE "Win32 (x86) Console Application" 0x0103 CFG=benchmark - Win32 Debug !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run !MESSAGE !MESSAGE NMAKE /f "benchmark.mak". !MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: !MESSAGE !MESSAGE NMAKE /f "benchmark.mak" CFG="benchmark - Win32 Debug" !MESSAGE !MESSAGE Possible choices for configuration are: !MESSAGE !MESSAGE "benchmark - Win32 Release" (based on "Win32 (x86) Console Application") !MESSAGE "benchmark - Win32 Debug" (based on "Win32 (x86) Console Application") !MESSAGE # Begin Project # PROP AllowPerConfigDependencies 0 # PROP Scc_ProjName "" # PROP Scc_LocalPath "" CPP=cl.exe RSC=rc.exe !IF "$(CFG)" == "benchmark - Win32 Release" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 0 # PROP BASE Output_Dir "Release" # PROP BASE Intermediate_Dir "Release" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 0 # PROP Output_Dir "Release" # PROP Intermediate_Dir "Release" # PROP Target_Dir "" # ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c # ADD CPP /nologo /W3 /GX /O2 /I "..\..\lib" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c # ADD BASE RSC /l 0x1009 /d "NDEBUG" # ADD RSC /l 0x1009 /d "NDEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 !ELSEIF "$(CFG)" == "benchmark - Win32 Debug" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 1 # PROP BASE Output_Dir "Debug" # PROP BASE Intermediate_Dir "Debug" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 1 # PROP Output_Dir "Debug" # PROP Intermediate_Dir "Debug" # PROP Target_Dir "" # ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c # ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "..\..\lib" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c # ADD BASE RSC /l 0x1009 /d "_DEBUG" # ADD RSC /l 0x1009 /d "_DEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept !ENDIF # Begin Target # Name "benchmark - Win32 Release" # Name "benchmark - Win32 Debug" # Begin Source File SOURCE=.\benchmark.c # End Source File # End Target # End Project tla-1.3.5+dfsg/src/expat/tests/minicheck.c0000644000175000017500000000662110457621771017124 0ustar useruser/* Miniature re-implementation of the "check" library. * * This is intended to support just enough of check to run the Expat * tests. This interface is based entirely on the portion of the * check library being used. */ #include #include #include #include #include "minicheck.h" Suite * suite_create(char *name) { Suite *suite = (Suite *) calloc(1, sizeof(Suite)); if (suite != NULL) { suite->name = name; } return suite; } TCase * tcase_create(char *name) { TCase *tc = (TCase *) calloc(1, sizeof(TCase)); if (tc != NULL) { tc->name = name; } return tc; } void suite_add_tcase(Suite *suite, TCase *tc) { assert(suite != NULL); assert(tc != NULL); assert(tc->next_tcase == NULL); tc->next_tcase = suite->tests; suite->tests = tc; } void tcase_add_checked_fixture(TCase *tc, tcase_setup_function setup, tcase_teardown_function teardown) { assert(tc != NULL); tc->setup = setup; tc->teardown = teardown; } void tcase_add_test(TCase *tc, tcase_test_function test) { assert(tc != NULL); if (tc->allocated == tc->ntests) { int nalloc = tc->allocated + 100; size_t new_size = sizeof(tcase_test_function) * nalloc; tcase_test_function *new_tests = realloc(tc->tests, new_size); assert(new_tests != NULL); if (new_tests != tc->tests) { free(tc->tests); tc->tests = new_tests; } tc->allocated = nalloc; } tc->tests[tc->ntests] = test; tc->ntests++; } SRunner * srunner_create(Suite *suite) { SRunner *runner = calloc(1, sizeof(SRunner)); if (runner != NULL) { runner->suite = suite; } return runner; } void srunner_set_fork_status(SRunner *runner, int status) { /* We ignore this. */ } static jmp_buf env; void srunner_run_all(SRunner *runner, int verbosity) { Suite *suite; TCase *tc; assert(runner != NULL); suite = runner->suite; tc = suite->tests; while (tc != NULL) { int i; for (i = 0; i < tc->ntests; ++i) { runner->nchecks++; if (tc->setup != NULL) { /* setup */ if (setjmp(env)) { runner->nfailures++; continue; } tc->setup(); } /* test */ if (setjmp(env)) { runner->nfailures++; continue; } (tc->tests[i])(); /* teardown */ if (tc->teardown != NULL) { if (setjmp(env)) { runner->nfailures++; continue; } tc->teardown(); } } tc = tc->next_tcase; } if (verbosity) { int passed = runner->nchecks - runner->nfailures; double percentage = ((double) passed) / runner->nchecks; int display = (int) (percentage * 100); printf("%d%%: Checks: %d, Failed: %d\n", display, runner->nchecks, runner->nfailures); } } void _fail_unless(int condition, const char *file, int line, char *msg) { longjmp(env, 1); } int srunner_ntests_failed(SRunner *runner) { assert(runner != NULL); return runner->nfailures; } void srunner_free(SRunner *runner) { free(runner->suite); free(runner); } tla-1.3.5+dfsg/src/expat/lib/0000755000175000017500000000000010457621771014425 5ustar userusertla-1.3.5+dfsg/src/expat/lib/utf8tab.h0000644000175000017500000000334310457621771016156 0ustar useruser/* Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd See the file COPYING for copying permission. */ /* 0x80 */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL, /* 0x84 */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL, /* 0x88 */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL, /* 0x8C */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL, /* 0x90 */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL, /* 0x94 */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL, /* 0x98 */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL, /* 0x9C */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL, /* 0xA0 */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL, /* 0xA4 */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL, /* 0xA8 */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL, /* 0xAC */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL, /* 0xB0 */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL, /* 0xB4 */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL, /* 0xB8 */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL, /* 0xBC */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL, /* 0xC0 */ BT_LEAD2, BT_LEAD2, BT_LEAD2, BT_LEAD2, /* 0xC4 */ BT_LEAD2, BT_LEAD2, BT_LEAD2, BT_LEAD2, /* 0xC8 */ BT_LEAD2, BT_LEAD2, BT_LEAD2, BT_LEAD2, /* 0xCC */ BT_LEAD2, BT_LEAD2, BT_LEAD2, BT_LEAD2, /* 0xD0 */ BT_LEAD2, BT_LEAD2, BT_LEAD2, BT_LEAD2, /* 0xD4 */ BT_LEAD2, BT_LEAD2, BT_LEAD2, BT_LEAD2, /* 0xD8 */ BT_LEAD2, BT_LEAD2, BT_LEAD2, BT_LEAD2, /* 0xDC */ BT_LEAD2, BT_LEAD2, BT_LEAD2, BT_LEAD2, /* 0xE0 */ BT_LEAD3, BT_LEAD3, BT_LEAD3, BT_LEAD3, /* 0xE4 */ BT_LEAD3, BT_LEAD3, BT_LEAD3, BT_LEAD3, /* 0xE8 */ BT_LEAD3, BT_LEAD3, BT_LEAD3, BT_LEAD3, /* 0xEC */ BT_LEAD3, BT_LEAD3, BT_LEAD3, BT_LEAD3, /* 0xF0 */ BT_LEAD4, BT_LEAD4, BT_LEAD4, BT_LEAD4, /* 0xF4 */ BT_LEAD4, BT_NONXML, BT_NONXML, BT_NONXML, /* 0xF8 */ BT_NONXML, BT_NONXML, BT_NONXML, BT_NONXML, /* 0xFC */ BT_NONXML, BT_NONXML, BT_MALFORM, BT_MALFORM, tla-1.3.5+dfsg/src/expat/lib/latin1tab.h0000644000175000017500000000342510457621771016461 0ustar useruser/* Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd See the file COPYING for copying permission. */ /* 0x80 */ BT_OTHER, BT_OTHER, BT_OTHER, BT_OTHER, /* 0x84 */ BT_OTHER, BT_OTHER, BT_OTHER, BT_OTHER, /* 0x88 */ BT_OTHER, BT_OTHER, BT_OTHER, BT_OTHER, /* 0x8C */ BT_OTHER, BT_OTHER, BT_OTHER, BT_OTHER, /* 0x90 */ BT_OTHER, BT_OTHER, BT_OTHER, BT_OTHER, /* 0x94 */ BT_OTHER, BT_OTHER, BT_OTHER, BT_OTHER, /* 0x98 */ BT_OTHER, BT_OTHER, BT_OTHER, BT_OTHER, /* 0x9C */ BT_OTHER, BT_OTHER, BT_OTHER, BT_OTHER, /* 0xA0 */ BT_OTHER, BT_OTHER, BT_OTHER, BT_OTHER, /* 0xA4 */ BT_OTHER, BT_OTHER, BT_OTHER, BT_OTHER, /* 0xA8 */ BT_OTHER, BT_OTHER, BT_NMSTRT, BT_OTHER, /* 0xAC */ BT_OTHER, BT_OTHER, BT_OTHER, BT_OTHER, /* 0xB0 */ BT_OTHER, BT_OTHER, BT_OTHER, BT_OTHER, /* 0xB4 */ BT_OTHER, BT_NMSTRT, BT_OTHER, BT_NAME, /* 0xB8 */ BT_OTHER, BT_OTHER, BT_NMSTRT, BT_OTHER, /* 0xBC */ BT_OTHER, BT_OTHER, BT_OTHER, BT_OTHER, /* 0xC0 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, /* 0xC4 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, /* 0xC8 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, /* 0xCC */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, /* 0xD0 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, /* 0xD4 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_OTHER, /* 0xD8 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, /* 0xDC */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, /* 0xE0 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, /* 0xE4 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, /* 0xE8 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, /* 0xEC */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, /* 0xF0 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, /* 0xF4 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_OTHER, /* 0xF8 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, /* 0xFC */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, tla-1.3.5+dfsg/src/expat/lib/asciitab.h0000644000175000017500000000334010457621771016355 0ustar useruser/* Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd See the file COPYING for copying permission. */ /* 0x00 */ BT_NONXML, BT_NONXML, BT_NONXML, BT_NONXML, /* 0x04 */ BT_NONXML, BT_NONXML, BT_NONXML, BT_NONXML, /* 0x08 */ BT_NONXML, BT_S, BT_LF, BT_NONXML, /* 0x0C */ BT_NONXML, BT_CR, BT_NONXML, BT_NONXML, /* 0x10 */ BT_NONXML, BT_NONXML, BT_NONXML, BT_NONXML, /* 0x14 */ BT_NONXML, BT_NONXML, BT_NONXML, BT_NONXML, /* 0x18 */ BT_NONXML, BT_NONXML, BT_NONXML, BT_NONXML, /* 0x1C */ BT_NONXML, BT_NONXML, BT_NONXML, BT_NONXML, /* 0x20 */ BT_S, BT_EXCL, BT_QUOT, BT_NUM, /* 0x24 */ BT_OTHER, BT_PERCNT, BT_AMP, BT_APOS, /* 0x28 */ BT_LPAR, BT_RPAR, BT_AST, BT_PLUS, /* 0x2C */ BT_COMMA, BT_MINUS, BT_NAME, BT_SOL, /* 0x30 */ BT_DIGIT, BT_DIGIT, BT_DIGIT, BT_DIGIT, /* 0x34 */ BT_DIGIT, BT_DIGIT, BT_DIGIT, BT_DIGIT, /* 0x38 */ BT_DIGIT, BT_DIGIT, BT_COLON, BT_SEMI, /* 0x3C */ BT_LT, BT_EQUALS, BT_GT, BT_QUEST, /* 0x40 */ BT_OTHER, BT_HEX, BT_HEX, BT_HEX, /* 0x44 */ BT_HEX, BT_HEX, BT_HEX, BT_NMSTRT, /* 0x48 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, /* 0x4C */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, /* 0x50 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, /* 0x54 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, /* 0x58 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_LSQB, /* 0x5C */ BT_OTHER, BT_RSQB, BT_OTHER, BT_NMSTRT, /* 0x60 */ BT_OTHER, BT_HEX, BT_HEX, BT_HEX, /* 0x64 */ BT_HEX, BT_HEX, BT_HEX, BT_NMSTRT, /* 0x68 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, /* 0x6C */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, /* 0x70 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, /* 0x74 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, /* 0x78 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_OTHER, /* 0x7C */ BT_VERBAR, BT_OTHER, BT_OTHER, BT_OTHER, tla-1.3.5+dfsg/src/expat/lib/xmltok.h0000644000175000017500000002567210457621771016130 0ustar useruser/* Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd See the file COPYING for copying permission. */ #ifndef XmlTok_INCLUDED #define XmlTok_INCLUDED 1 #ifdef __cplusplus extern "C" { #endif /* The following token may be returned by XmlContentTok */ #define XML_TOK_TRAILING_RSQB -5 /* ] or ]] at the end of the scan; might be start of illegal ]]> sequence */ /* The following tokens may be returned by both XmlPrologTok and XmlContentTok. */ #define XML_TOK_NONE -4 /* The string to be scanned is empty */ #define XML_TOK_TRAILING_CR -3 /* A CR at the end of the scan; might be part of CRLF sequence */ #define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */ #define XML_TOK_PARTIAL -1 /* only part of a token */ #define XML_TOK_INVALID 0 /* The following tokens are returned by XmlContentTok; some are also returned by XmlAttributeValueTok, XmlEntityTok, XmlCdataSectionTok. */ #define XML_TOK_START_TAG_WITH_ATTS 1 #define XML_TOK_START_TAG_NO_ATTS 2 #define XML_TOK_EMPTY_ELEMENT_WITH_ATTS 3 /* empty element tag */ #define XML_TOK_EMPTY_ELEMENT_NO_ATTS 4 #define XML_TOK_END_TAG 5 #define XML_TOK_DATA_CHARS 6 #define XML_TOK_DATA_NEWLINE 7 #define XML_TOK_CDATA_SECT_OPEN 8 #define XML_TOK_ENTITY_REF 9 #define XML_TOK_CHAR_REF 10 /* numeric character reference */ /* The following tokens may be returned by both XmlPrologTok and XmlContentTok. */ #define XML_TOK_PI 11 /* processing instruction */ #define XML_TOK_XML_DECL 12 /* XML decl or text decl */ #define XML_TOK_COMMENT 13 #define XML_TOK_BOM 14 /* Byte order mark */ /* The following tokens are returned only by XmlPrologTok */ #define XML_TOK_PROLOG_S 15 #define XML_TOK_DECL_OPEN 16 /* */ #define XML_TOK_NAME 18 #define XML_TOK_NMTOKEN 19 #define XML_TOK_POUND_NAME 20 /* #name */ #define XML_TOK_OR 21 /* | */ #define XML_TOK_PERCENT 22 #define XML_TOK_OPEN_PAREN 23 #define XML_TOK_CLOSE_PAREN 24 #define XML_TOK_OPEN_BRACKET 25 #define XML_TOK_CLOSE_BRACKET 26 #define XML_TOK_LITERAL 27 #define XML_TOK_PARAM_ENTITY_REF 28 #define XML_TOK_INSTANCE_START 29 /* The following occur only in element type declarations */ #define XML_TOK_NAME_QUESTION 30 /* name? */ #define XML_TOK_NAME_ASTERISK 31 /* name* */ #define XML_TOK_NAME_PLUS 32 /* name+ */ #define XML_TOK_COND_SECT_OPEN 33 /* */ #define XML_TOK_CLOSE_PAREN_QUESTION 35 /* )? */ #define XML_TOK_CLOSE_PAREN_ASTERISK 36 /* )* */ #define XML_TOK_CLOSE_PAREN_PLUS 37 /* )+ */ #define XML_TOK_COMMA 38 /* The following token is returned only by XmlAttributeValueTok */ #define XML_TOK_ATTRIBUTE_VALUE_S 39 /* The following token is returned only by XmlCdataSectionTok */ #define XML_TOK_CDATA_SECT_CLOSE 40 /* With namespace processing this is returned by XmlPrologTok for a name with a colon. */ #define XML_TOK_PREFIXED_NAME 41 #ifdef XML_DTD #define XML_TOK_IGNORE_SECT 42 #endif /* XML_DTD */ #ifdef XML_DTD #define XML_N_STATES 4 #else /* not XML_DTD */ #define XML_N_STATES 3 #endif /* not XML_DTD */ #define XML_PROLOG_STATE 0 #define XML_CONTENT_STATE 1 #define XML_CDATA_SECTION_STATE 2 #ifdef XML_DTD #define XML_IGNORE_SECTION_STATE 3 #endif /* XML_DTD */ #define XML_N_LITERAL_TYPES 2 #define XML_ATTRIBUTE_VALUE_LITERAL 0 #define XML_ENTITY_VALUE_LITERAL 1 /* The size of the buffer passed to XmlUtf8Encode must be at least this. */ #define XML_UTF8_ENCODE_MAX 4 /* The size of the buffer passed to XmlUtf16Encode must be at least this. */ #define XML_UTF16_ENCODE_MAX 2 typedef struct position { /* first line and first column are 0 not 1 */ unsigned long lineNumber; unsigned long columnNumber; } POSITION; typedef struct { const char *name; const char *valuePtr; const char *valueEnd; char normalized; } ATTRIBUTE; struct encoding; typedef struct encoding ENCODING; typedef int (PTRCALL *SCANNER)(const ENCODING *, const char *, const char *, const char **); struct encoding { SCANNER scanners[XML_N_STATES]; SCANNER literalScanners[XML_N_LITERAL_TYPES]; int (PTRCALL *sameName)(const ENCODING *, const char *, const char *); int (PTRCALL *nameMatchesAscii)(const ENCODING *, const char *, const char *, const char *); int (PTRFASTCALL *nameLength)(const ENCODING *, const char *); const char *(PTRFASTCALL *skipS)(const ENCODING *, const char *); int (PTRCALL *getAtts)(const ENCODING *enc, const char *ptr, int attsMax, ATTRIBUTE *atts); int (PTRFASTCALL *charRefNumber)(const ENCODING *enc, const char *ptr); int (PTRCALL *predefinedEntityName)(const ENCODING *, const char *, const char *); void (PTRCALL *updatePosition)(const ENCODING *, const char *ptr, const char *end, POSITION *); int (PTRCALL *isPublicId)(const ENCODING *enc, const char *ptr, const char *end, const char **badPtr); void (PTRCALL *utf8Convert)(const ENCODING *enc, const char **fromP, const char *fromLim, char **toP, const char *toLim); void (PTRCALL *utf16Convert)(const ENCODING *enc, const char **fromP, const char *fromLim, unsigned short **toP, const unsigned short *toLim); int minBytesPerChar; char isUtf8; char isUtf16; }; /* Scan the string starting at ptr until the end of the next complete token, but do not scan past eptr. Return an integer giving the type of token. Return XML_TOK_NONE when ptr == eptr; nextTokPtr will not be set. Return XML_TOK_PARTIAL when the string does not contain a complete token; nextTokPtr will not be set. Return XML_TOK_INVALID when the string does not start a valid token; nextTokPtr will be set to point to the character which made the token invalid. Otherwise the string starts with a valid token; nextTokPtr will be set to point to the character following the end of that token. Each data character counts as a single token, but adjacent data characters may be returned together. Similarly for characters in the prolog outside literals, comments and processing instructions. */ #define XmlTok(enc, state, ptr, end, nextTokPtr) \ (((enc)->scanners[state])(enc, ptr, end, nextTokPtr)) #define XmlPrologTok(enc, ptr, end, nextTokPtr) \ XmlTok(enc, XML_PROLOG_STATE, ptr, end, nextTokPtr) #define XmlContentTok(enc, ptr, end, nextTokPtr) \ XmlTok(enc, XML_CONTENT_STATE, ptr, end, nextTokPtr) #define XmlCdataSectionTok(enc, ptr, end, nextTokPtr) \ XmlTok(enc, XML_CDATA_SECTION_STATE, ptr, end, nextTokPtr) #ifdef XML_DTD #define XmlIgnoreSectionTok(enc, ptr, end, nextTokPtr) \ XmlTok(enc, XML_IGNORE_SECTION_STATE, ptr, end, nextTokPtr) #endif /* XML_DTD */ /* This is used for performing a 2nd-level tokenization on the content of a literal that has already been returned by XmlTok. */ #define XmlLiteralTok(enc, literalType, ptr, end, nextTokPtr) \ (((enc)->literalScanners[literalType])(enc, ptr, end, nextTokPtr)) #define XmlAttributeValueTok(enc, ptr, end, nextTokPtr) \ XmlLiteralTok(enc, XML_ATTRIBUTE_VALUE_LITERAL, ptr, end, nextTokPtr) #define XmlEntityValueTok(enc, ptr, end, nextTokPtr) \ XmlLiteralTok(enc, XML_ENTITY_VALUE_LITERAL, ptr, end, nextTokPtr) #define XmlSameName(enc, ptr1, ptr2) (((enc)->sameName)(enc, ptr1, ptr2)) #define XmlNameMatchesAscii(enc, ptr1, end1, ptr2) \ (((enc)->nameMatchesAscii)(enc, ptr1, end1, ptr2)) #define XmlNameLength(enc, ptr) \ (((enc)->nameLength)(enc, ptr)) #define XmlSkipS(enc, ptr) \ (((enc)->skipS)(enc, ptr)) #define XmlGetAttributes(enc, ptr, attsMax, atts) \ (((enc)->getAtts)(enc, ptr, attsMax, atts)) #define XmlCharRefNumber(enc, ptr) \ (((enc)->charRefNumber)(enc, ptr)) #define XmlPredefinedEntityName(enc, ptr, end) \ (((enc)->predefinedEntityName)(enc, ptr, end)) #define XmlUpdatePosition(enc, ptr, end, pos) \ (((enc)->updatePosition)(enc, ptr, end, pos)) #define XmlIsPublicId(enc, ptr, end, badPtr) \ (((enc)->isPublicId)(enc, ptr, end, badPtr)) #define XmlUtf8Convert(enc, fromP, fromLim, toP, toLim) \ (((enc)->utf8Convert)(enc, fromP, fromLim, toP, toLim)) #define XmlUtf16Convert(enc, fromP, fromLim, toP, toLim) \ (((enc)->utf16Convert)(enc, fromP, fromLim, toP, toLim)) typedef struct { ENCODING initEnc; const ENCODING **encPtr; } INIT_ENCODING; int XmlParseXmlDecl(int isGeneralTextEntity, const ENCODING *enc, const char *ptr, const char *end, const char **badPtr, const char **versionPtr, const char **versionEndPtr, const char **encodingNamePtr, const ENCODING **namedEncodingPtr, int *standalonePtr); int XmlInitEncoding(INIT_ENCODING *, const ENCODING **, const char *name); const ENCODING *XmlGetUtf8InternalEncoding(void); const ENCODING *XmlGetUtf16InternalEncoding(void); int FASTCALL XmlUtf8Encode(int charNumber, char *buf); int FASTCALL XmlUtf16Encode(int charNumber, unsigned short *buf); int XmlSizeOfUnknownEncoding(void); typedef int (XMLCALL *CONVERTER) (void *userData, const char *p); ENCODING * XmlInitUnknownEncoding(void *mem, int *table, CONVERTER convert, void *userData); int XmlParseXmlDeclNS(int isGeneralTextEntity, const ENCODING *enc, const char *ptr, const char *end, const char **badPtr, const char **versionPtr, const char **versionEndPtr, const char **encodingNamePtr, const ENCODING **namedEncodingPtr, int *standalonePtr); int XmlInitEncodingNS(INIT_ENCODING *, const ENCODING **, const char *name); const ENCODING *XmlGetUtf8InternalEncodingNS(void); const ENCODING *XmlGetUtf16InternalEncodingNS(void); ENCODING * XmlInitUnknownEncodingNS(void *mem, int *table, CONVERTER convert, void *userData); #ifdef __cplusplus } #endif #endif /* not XmlTok_INCLUDED */ tla-1.3.5+dfsg/src/expat/lib/expatw.dsp0000644000175000017500000001204610457621771016450 0ustar useruser# Microsoft Developer Studio Project File - Name="expatw" - Package Owner=<4> # Microsoft Developer Studio Generated Build File, Format Version 6.00 # ** DO NOT EDIT ** # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 CFG=expatw - Win32 Debug !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run !MESSAGE !MESSAGE NMAKE /f "expatw.mak". !MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: !MESSAGE !MESSAGE NMAKE /f "expatw.mak" CFG="expatw - Win32 Debug" !MESSAGE !MESSAGE Possible choices for configuration are: !MESSAGE !MESSAGE "expatw - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") !MESSAGE "expatw - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") !MESSAGE # Begin Project # PROP AllowPerConfigDependencies 0 # PROP Scc_ProjName "" # PROP Scc_LocalPath "" CPP=cl.exe MTL=midl.exe RSC=rc.exe !IF "$(CFG)" == "expatw - Win32 Release" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 0 # PROP BASE Output_Dir "Release" # PROP BASE Intermediate_Dir "Release" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 0 # PROP Output_Dir "Release-w" # PROP Intermediate_Dir "Release-w" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "EXPAT_EXPORTS" /Yu"stdafx.h" /FD /c # ADD CPP /nologo /MT /W3 /GX /O2 /D "NDEBUG" /D "COMPILED_FROM_DSP" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "XML_UNICODE_WCHAR_T" /FD /c # SUBTRACT CPP /YX /Yc /Yu # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0x409 /d "NDEBUG" # ADD RSC /l 0x409 /d "NDEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /pdb:none /machine:I386 /out:"Release-w\libexpatw.dll" !ELSEIF "$(CFG)" == "expatw - Win32 Debug" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 1 # PROP BASE Output_Dir "Debug" # PROP BASE Intermediate_Dir "Debug" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 1 # PROP Output_Dir "Debug-w" # PROP Intermediate_Dir "Debug-w" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "EXPAT_EXPORTS" /Yu"stdafx.h" /FD /GZ /c # ADD CPP /nologo /MTd /W3 /GX /ZI /Od /D "_DEBUG" /D "COMPILED_FROM_DSP" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "XML_UNICODE_WCHAR_T" /FR /FD /GZ /c # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0x409 /d "_DEBUG" # ADD RSC /l 0x409 /d "_DEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /pdb:none /debug /machine:I386 /out:"Debug-w\libexpatw.dll" !ENDIF # Begin Target # Name "expatw - Win32 Release" # Name "expatw - Win32 Debug" # Begin Group "Source Files" # PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" # Begin Source File SOURCE=.\libexpatw.def # End Source File # Begin Source File SOURCE=.\xmlparse.c !IF "$(CFG)" == "expatw - Win32 Release" !ELSEIF "$(CFG)" == "expatw - Win32 Debug" # ADD CPP /GX- /Od !ENDIF # End Source File # Begin Source File SOURCE=.\xmlrole.c # End Source File # Begin Source File SOURCE=.\xmltok.c # End Source File # End Group # Begin Group "Header Files" # PROP Default_Filter "h;hpp;hxx;hm;inl" # Begin Source File SOURCE=.\ascii.h # End Source File # Begin Source File SOURCE=.\asciitab.h # End Source File # Begin Source File SOURCE=.\expat.h # End Source File # Begin Source File SOURCE=.\expat_external.h # End Source File # Begin Source File SOURCE=.\iasciitab.h # End Source File # Begin Source File SOURCE=.\internal.h # End Source File # Begin Source File SOURCE=.\latin1tab.h # End Source File # Begin Source File SOURCE=.\nametab.h # End Source File # Begin Source File SOURCE=.\utf8tab.h # End Source File # Begin Source File SOURCE=.\xmlrole.h # End Source File # Begin Source File SOURCE=.\xmltok.h # End Source File # Begin Source File SOURCE=.\xmltok_impl.h # End Source File # End Group # Begin Group "Resource Files" # PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" # End Group # End Target # End Project tla-1.3.5+dfsg/src/expat/lib/expat.dsp0000644000175000017500000001167510457621771016270 0ustar useruser# Microsoft Developer Studio Project File - Name="expat" - Package Owner=<4> # Microsoft Developer Studio Generated Build File, Format Version 6.00 # ** DO NOT EDIT ** # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 CFG=expat - Win32 Debug !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run !MESSAGE !MESSAGE NMAKE /f "expat.mak". !MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: !MESSAGE !MESSAGE NMAKE /f "expat.mak" CFG="expat - Win32 Debug" !MESSAGE !MESSAGE Possible choices for configuration are: !MESSAGE !MESSAGE "expat - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") !MESSAGE "expat - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") !MESSAGE # Begin Project # PROP AllowPerConfigDependencies 0 # PROP Scc_ProjName "" # PROP Scc_LocalPath "" CPP=cl.exe MTL=midl.exe RSC=rc.exe !IF "$(CFG)" == "expat - Win32 Release" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 0 # PROP BASE Output_Dir "Release" # PROP BASE Intermediate_Dir "Release" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 0 # PROP Output_Dir "Release" # PROP Intermediate_Dir "Release" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "EXPAT_EXPORTS" /Yu"stdafx.h" /FD /c # ADD CPP /nologo /MT /W3 /GX /O2 /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COMPILED_FROM_DSP" /FD /c # SUBTRACT CPP /YX /Yc /Yu # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0x409 /d "NDEBUG" # ADD RSC /l 0x409 /d "NDEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /pdb:none /machine:I386 /out:"Release\libexpat.dll" !ELSEIF "$(CFG)" == "expat - Win32 Debug" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 1 # PROP BASE Output_Dir "Debug" # PROP BASE Intermediate_Dir "Debug" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 1 # PROP Output_Dir "Debug" # PROP Intermediate_Dir "Debug" # PROP Target_Dir "" # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "EXPAT_EXPORTS" /Yu"stdafx.h" /FD /GZ /c # ADD CPP /nologo /MTd /W3 /GX /ZI /Od /D "_DEBUG" /D "COMPILED_FROM_DSP" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /FR /FD /GZ /c # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0x409 /d "_DEBUG" # ADD RSC /l 0x409 /d "_DEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /pdb:none /debug /machine:I386 /out:"Debug\libexpat.dll" !ENDIF # Begin Target # Name "expat - Win32 Release" # Name "expat - Win32 Debug" # Begin Group "Source Files" # PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" # Begin Source File SOURCE=.\libexpat.def # End Source File # Begin Source File SOURCE=.\xmlparse.c !IF "$(CFG)" == "expat - Win32 Release" !ELSEIF "$(CFG)" == "expat - Win32 Debug" # ADD CPP /GX- /Od !ENDIF # End Source File # Begin Source File SOURCE=.\xmlrole.c # End Source File # Begin Source File SOURCE=.\xmltok.c # End Source File # End Group # Begin Group "Header Files" # PROP Default_Filter "h;hpp;hxx;hm;inl" # Begin Source File SOURCE=.\ascii.h # End Source File # Begin Source File SOURCE=.\asciitab.h # End Source File # Begin Source File SOURCE=.\expat.h # End Source File # Begin Source File SOURCE=.\expat_external.h # End Source File # Begin Source File SOURCE=.\iasciitab.h # End Source File # Begin Source File SOURCE=.\internal.h # End Source File # Begin Source File SOURCE=.\latin1tab.h # End Source File # Begin Source File SOURCE=.\nametab.h # End Source File # Begin Source File SOURCE=.\utf8tab.h # End Source File # Begin Source File SOURCE=.\xmlrole.h # End Source File # Begin Source File SOURCE=.\xmltok.h # End Source File # Begin Source File SOURCE=.\xmltok_impl.h # End Source File # End Group # Begin Group "Resource Files" # PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" # End Group # End Target # End Project tla-1.3.5+dfsg/src/expat/lib/xmltok_ns.c0000644000175000017500000000557710457621771016625 0ustar useruserconst ENCODING * NS(XmlGetUtf8InternalEncoding)(void) { return &ns(internal_utf8_encoding).enc; } const ENCODING * NS(XmlGetUtf16InternalEncoding)(void) { #if BYTEORDER == 1234 return &ns(internal_little2_encoding).enc; #elif BYTEORDER == 4321 return &ns(internal_big2_encoding).enc; #else const short n = 1; return (*(const char *)&n ? &ns(internal_little2_encoding).enc : &ns(internal_big2_encoding).enc); #endif } static const ENCODING *NS(encodings)[] = { &ns(latin1_encoding).enc, &ns(ascii_encoding).enc, &ns(utf8_encoding).enc, &ns(big2_encoding).enc, &ns(big2_encoding).enc, &ns(little2_encoding).enc, &ns(utf8_encoding).enc /* NO_ENC */ }; static int PTRCALL NS(initScanProlog)(const ENCODING *enc, const char *ptr, const char *end, const char **nextTokPtr) { return initScan(NS(encodings), (const INIT_ENCODING *)enc, XML_PROLOG_STATE, ptr, end, nextTokPtr); } static int PTRCALL NS(initScanContent)(const ENCODING *enc, const char *ptr, const char *end, const char **nextTokPtr) { return initScan(NS(encodings), (const INIT_ENCODING *)enc, XML_CONTENT_STATE, ptr, end, nextTokPtr); } int NS(XmlInitEncoding)(INIT_ENCODING *p, const ENCODING **encPtr, const char *name) { int i = getEncodingIndex(name); if (i == UNKNOWN_ENC) return 0; SET_INIT_ENC_INDEX(p, i); p->initEnc.scanners[XML_PROLOG_STATE] = NS(initScanProlog); p->initEnc.scanners[XML_CONTENT_STATE] = NS(initScanContent); p->initEnc.updatePosition = initUpdatePosition; p->encPtr = encPtr; *encPtr = &(p->initEnc); return 1; } static const ENCODING * NS(findEncoding)(const ENCODING *enc, const char *ptr, const char *end) { #define ENCODING_MAX 128 char buf[ENCODING_MAX]; char *p = buf; int i; XmlUtf8Convert(enc, &ptr, end, &p, p + ENCODING_MAX - 1); if (ptr != end) return 0; *p = 0; if (streqci(buf, KW_UTF_16) && enc->minBytesPerChar == 2) return enc; i = getEncodingIndex(buf); if (i == UNKNOWN_ENC) return 0; return NS(encodings)[i]; } int NS(XmlParseXmlDecl)(int isGeneralTextEntity, const ENCODING *enc, const char *ptr, const char *end, const char **badPtr, const char **versionPtr, const char **versionEndPtr, const char **encodingName, const ENCODING **encoding, int *standalone) { return doParseXmlDecl(NS(findEncoding), isGeneralTextEntity, enc, ptr, end, badPtr, versionPtr, versionEndPtr, encodingName, encoding, standalone); } tla-1.3.5+dfsg/src/expat/lib/xmltok.c0000644000175000017500000012015710457621771016115 0ustar useruser/* Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd See the file COPYING for copying permission. */ #include #ifdef COMPILED_FROM_DSP #include "winconfig.h" #elif defined(MACOS_CLASSIC) #include "macconfig.h" #else #ifdef HAVE_EXPAT_CONFIG_H #include #endif #endif /* ndef COMPILED_FROM_DSP */ #include "expat_external.h" #include "internal.h" #include "xmltok.h" #include "nametab.h" #ifdef XML_DTD #define IGNORE_SECTION_TOK_VTABLE , PREFIX(ignoreSectionTok) #else #define IGNORE_SECTION_TOK_VTABLE /* as nothing */ #endif #define VTABLE1 \ { PREFIX(prologTok), PREFIX(contentTok), \ PREFIX(cdataSectionTok) IGNORE_SECTION_TOK_VTABLE }, \ { PREFIX(attributeValueTok), PREFIX(entityValueTok) }, \ PREFIX(sameName), \ PREFIX(nameMatchesAscii), \ PREFIX(nameLength), \ PREFIX(skipS), \ PREFIX(getAtts), \ PREFIX(charRefNumber), \ PREFIX(predefinedEntityName), \ PREFIX(updatePosition), \ PREFIX(isPublicId) #define VTABLE VTABLE1, PREFIX(toUtf8), PREFIX(toUtf16) #define UCS2_GET_NAMING(pages, hi, lo) \ (namingBitmap[(pages[hi] << 3) + ((lo) >> 5)] & (1 << ((lo) & 0x1F))) /* A 2 byte UTF-8 representation splits the characters 11 bits between the bottom 5 and 6 bits of the bytes. We need 8 bits to index into pages, 3 bits to add to that index and 5 bits to generate the mask. */ #define UTF8_GET_NAMING2(pages, byte) \ (namingBitmap[((pages)[(((byte)[0]) >> 2) & 7] << 3) \ + ((((byte)[0]) & 3) << 1) \ + ((((byte)[1]) >> 5) & 1)] \ & (1 << (((byte)[1]) & 0x1F))) /* A 3 byte UTF-8 representation splits the characters 16 bits between the bottom 4, 6 and 6 bits of the bytes. We need 8 bits to index into pages, 3 bits to add to that index and 5 bits to generate the mask. */ #define UTF8_GET_NAMING3(pages, byte) \ (namingBitmap[((pages)[((((byte)[0]) & 0xF) << 4) \ + ((((byte)[1]) >> 2) & 0xF)] \ << 3) \ + ((((byte)[1]) & 3) << 1) \ + ((((byte)[2]) >> 5) & 1)] \ & (1 << (((byte)[2]) & 0x1F))) #define UTF8_GET_NAMING(pages, p, n) \ ((n) == 2 \ ? UTF8_GET_NAMING2(pages, (const unsigned char *)(p)) \ : ((n) == 3 \ ? UTF8_GET_NAMING3(pages, (const unsigned char *)(p)) \ : 0)) /* Detection of invalid UTF-8 sequences is based on Table 3.1B of Unicode 3.2: http://www.unicode.org/unicode/reports/tr28/ with the additional restriction of not allowing the Unicode code points 0xFFFF and 0xFFFE (sequences EF,BF,BF and EF,BF,BE). Implementation details: (A & 0x80) == 0 means A < 0x80 and (A & 0xC0) == 0xC0 means A > 0xBF */ #define UTF8_INVALID2(p) \ ((*p) < 0xC2 || ((p)[1] & 0x80) == 0 || ((p)[1] & 0xC0) == 0xC0) #define UTF8_INVALID3(p) \ (((p)[2] & 0x80) == 0 \ || \ ((*p) == 0xEF && (p)[1] == 0xBF \ ? \ (p)[2] > 0xBD \ : \ ((p)[2] & 0xC0) == 0xC0) \ || \ ((*p) == 0xE0 \ ? \ (p)[1] < 0xA0 || ((p)[1] & 0xC0) == 0xC0 \ : \ ((p)[1] & 0x80) == 0 \ || \ ((*p) == 0xED ? (p)[1] > 0x9F : ((p)[1] & 0xC0) == 0xC0))) #define UTF8_INVALID4(p) \ (((p)[3] & 0x80) == 0 || ((p)[3] & 0xC0) == 0xC0 \ || \ ((p)[2] & 0x80) == 0 || ((p)[2] & 0xC0) == 0xC0 \ || \ ((*p) == 0xF0 \ ? \ (p)[1] < 0x90 || ((p)[1] & 0xC0) == 0xC0 \ : \ ((p)[1] & 0x80) == 0 \ || \ ((*p) == 0xF4 ? (p)[1] > 0x8F : ((p)[1] & 0xC0) == 0xC0))) static int PTRFASTCALL isNever(const ENCODING *enc, const char *p) { return 0; } static int PTRFASTCALL utf8_isName2(const ENCODING *enc, const char *p) { return UTF8_GET_NAMING2(namePages, (const unsigned char *)p); } static int PTRFASTCALL utf8_isName3(const ENCODING *enc, const char *p) { return UTF8_GET_NAMING3(namePages, (const unsigned char *)p); } #define utf8_isName4 isNever static int PTRFASTCALL utf8_isNmstrt2(const ENCODING *enc, const char *p) { return UTF8_GET_NAMING2(nmstrtPages, (const unsigned char *)p); } static int PTRFASTCALL utf8_isNmstrt3(const ENCODING *enc, const char *p) { return UTF8_GET_NAMING3(nmstrtPages, (const unsigned char *)p); } #define utf8_isNmstrt4 isNever static int PTRFASTCALL utf8_isInvalid2(const ENCODING *enc, const char *p) { return UTF8_INVALID2((const unsigned char *)p); } static int PTRFASTCALL utf8_isInvalid3(const ENCODING *enc, const char *p) { return UTF8_INVALID3((const unsigned char *)p); } static int PTRFASTCALL utf8_isInvalid4(const ENCODING *enc, const char *p) { return UTF8_INVALID4((const unsigned char *)p); } struct normal_encoding { ENCODING enc; unsigned char type[256]; #ifdef XML_MIN_SIZE int (PTRFASTCALL *byteType)(const ENCODING *, const char *); int (PTRFASTCALL *isNameMin)(const ENCODING *, const char *); int (PTRFASTCALL *isNmstrtMin)(const ENCODING *, const char *); int (PTRFASTCALL *byteToAscii)(const ENCODING *, const char *); int (PTRCALL *charMatches)(const ENCODING *, const char *, int); #endif /* XML_MIN_SIZE */ int (PTRFASTCALL *isName2)(const ENCODING *, const char *); int (PTRFASTCALL *isName3)(const ENCODING *, const char *); int (PTRFASTCALL *isName4)(const ENCODING *, const char *); int (PTRFASTCALL *isNmstrt2)(const ENCODING *, const char *); int (PTRFASTCALL *isNmstrt3)(const ENCODING *, const char *); int (PTRFASTCALL *isNmstrt4)(const ENCODING *, const char *); int (PTRFASTCALL *isInvalid2)(const ENCODING *, const char *); int (PTRFASTCALL *isInvalid3)(const ENCODING *, const char *); int (PTRFASTCALL *isInvalid4)(const ENCODING *, const char *); }; #define AS_NORMAL_ENCODING(enc) ((const struct normal_encoding *) (enc)) #ifdef XML_MIN_SIZE #define STANDARD_VTABLE(E) \ E ## byteType, \ E ## isNameMin, \ E ## isNmstrtMin, \ E ## byteToAscii, \ E ## charMatches, #else #define STANDARD_VTABLE(E) /* as nothing */ #endif #define NORMAL_VTABLE(E) \ E ## isName2, \ E ## isName3, \ E ## isName4, \ E ## isNmstrt2, \ E ## isNmstrt3, \ E ## isNmstrt4, \ E ## isInvalid2, \ E ## isInvalid3, \ E ## isInvalid4 static int FASTCALL checkCharRefNumber(int); #include "xmltok_impl.h" #include "ascii.h" #ifdef XML_MIN_SIZE #define sb_isNameMin isNever #define sb_isNmstrtMin isNever #endif #ifdef XML_MIN_SIZE #define MINBPC(enc) ((enc)->minBytesPerChar) #else /* minimum bytes per character */ #define MINBPC(enc) 1 #endif #define SB_BYTE_TYPE(enc, p) \ (((struct normal_encoding *)(enc))->type[(unsigned char)*(p)]) #ifdef XML_MIN_SIZE static int PTRFASTCALL sb_byteType(const ENCODING *enc, const char *p) { return SB_BYTE_TYPE(enc, p); } #define BYTE_TYPE(enc, p) \ (AS_NORMAL_ENCODING(enc)->byteType(enc, p)) #else #define BYTE_TYPE(enc, p) SB_BYTE_TYPE(enc, p) #endif #ifdef XML_MIN_SIZE #define BYTE_TO_ASCII(enc, p) \ (AS_NORMAL_ENCODING(enc)->byteToAscii(enc, p)) static int PTRFASTCALL sb_byteToAscii(const ENCODING *enc, const char *p) { return *p; } #else #define BYTE_TO_ASCII(enc, p) (*(p)) #endif #define IS_NAME_CHAR(enc, p, n) \ (AS_NORMAL_ENCODING(enc)->isName ## n(enc, p)) #define IS_NMSTRT_CHAR(enc, p, n) \ (AS_NORMAL_ENCODING(enc)->isNmstrt ## n(enc, p)) #define IS_INVALID_CHAR(enc, p, n) \ (AS_NORMAL_ENCODING(enc)->isInvalid ## n(enc, p)) #ifdef XML_MIN_SIZE #define IS_NAME_CHAR_MINBPC(enc, p) \ (AS_NORMAL_ENCODING(enc)->isNameMin(enc, p)) #define IS_NMSTRT_CHAR_MINBPC(enc, p) \ (AS_NORMAL_ENCODING(enc)->isNmstrtMin(enc, p)) #else #define IS_NAME_CHAR_MINBPC(enc, p) (0) #define IS_NMSTRT_CHAR_MINBPC(enc, p) (0) #endif #ifdef XML_MIN_SIZE #define CHAR_MATCHES(enc, p, c) \ (AS_NORMAL_ENCODING(enc)->charMatches(enc, p, c)) static int PTRCALL sb_charMatches(const ENCODING *enc, const char *p, int c) { return *p == c; } #else /* c is an ASCII character */ #define CHAR_MATCHES(enc, p, c) (*(p) == c) #endif #define PREFIX(ident) normal_ ## ident #include "xmltok_impl.c" #undef MINBPC #undef BYTE_TYPE #undef BYTE_TO_ASCII #undef CHAR_MATCHES #undef IS_NAME_CHAR #undef IS_NAME_CHAR_MINBPC #undef IS_NMSTRT_CHAR #undef IS_NMSTRT_CHAR_MINBPC #undef IS_INVALID_CHAR enum { /* UTF8_cvalN is value of masked first byte of N byte sequence */ UTF8_cval1 = 0x00, UTF8_cval2 = 0xc0, UTF8_cval3 = 0xe0, UTF8_cval4 = 0xf0 }; static void PTRCALL utf8_toUtf8(const ENCODING *enc, const char **fromP, const char *fromLim, char **toP, const char *toLim) { char *to; const char *from; if (fromLim - *fromP > toLim - *toP) { /* Avoid copying partial characters. */ for (fromLim = *fromP + (toLim - *toP); fromLim > *fromP; fromLim--) if (((unsigned char)fromLim[-1] & 0xc0) != 0x80) break; } for (to = *toP, from = *fromP; from != fromLim; from++, to++) *to = *from; *fromP = from; *toP = to; } static void PTRCALL utf8_toUtf16(const ENCODING *enc, const char **fromP, const char *fromLim, unsigned short **toP, const unsigned short *toLim) { unsigned short *to = *toP; const char *from = *fromP; while (from != fromLim && to != toLim) { switch (((struct normal_encoding *)enc)->type[(unsigned char)*from]) { case BT_LEAD2: *to++ = (unsigned short)(((from[0] & 0x1f) << 6) | (from[1] & 0x3f)); from += 2; break; case BT_LEAD3: *to++ = (unsigned short)(((from[0] & 0xf) << 12) | ((from[1] & 0x3f) << 6) | (from[2] & 0x3f)); from += 3; break; case BT_LEAD4: { unsigned long n; if (to + 1 == toLim) goto after; n = ((from[0] & 0x7) << 18) | ((from[1] & 0x3f) << 12) | ((from[2] & 0x3f) << 6) | (from[3] & 0x3f); n -= 0x10000; to[0] = (unsigned short)((n >> 10) | 0xD800); to[1] = (unsigned short)((n & 0x3FF) | 0xDC00); to += 2; from += 4; } break; default: *to++ = *from++; break; } } after: *fromP = from; *toP = to; } #ifdef XML_NS static const struct normal_encoding utf8_encoding_ns = { { VTABLE1, utf8_toUtf8, utf8_toUtf16, 1, 1, 0 }, { #include "asciitab.h" #include "utf8tab.h" }, STANDARD_VTABLE(sb_) NORMAL_VTABLE(utf8_) }; #endif static const struct normal_encoding utf8_encoding = { { VTABLE1, utf8_toUtf8, utf8_toUtf16, 1, 1, 0 }, { #define BT_COLON BT_NMSTRT #include "asciitab.h" #undef BT_COLON #include "utf8tab.h" }, STANDARD_VTABLE(sb_) NORMAL_VTABLE(utf8_) }; #ifdef XML_NS static const struct normal_encoding internal_utf8_encoding_ns = { { VTABLE1, utf8_toUtf8, utf8_toUtf16, 1, 1, 0 }, { #include "iasciitab.h" #include "utf8tab.h" }, STANDARD_VTABLE(sb_) NORMAL_VTABLE(utf8_) }; #endif static const struct normal_encoding internal_utf8_encoding = { { VTABLE1, utf8_toUtf8, utf8_toUtf16, 1, 1, 0 }, { #define BT_COLON BT_NMSTRT #include "iasciitab.h" #undef BT_COLON #include "utf8tab.h" }, STANDARD_VTABLE(sb_) NORMAL_VTABLE(utf8_) }; static void PTRCALL latin1_toUtf8(const ENCODING *enc, const char **fromP, const char *fromLim, char **toP, const char *toLim) { for (;;) { unsigned char c; if (*fromP == fromLim) break; c = (unsigned char)**fromP; if (c & 0x80) { if (toLim - *toP < 2) break; *(*toP)++ = (char)((c >> 6) | UTF8_cval2); *(*toP)++ = (char)((c & 0x3f) | 0x80); (*fromP)++; } else { if (*toP == toLim) break; *(*toP)++ = *(*fromP)++; } } } static void PTRCALL latin1_toUtf16(const ENCODING *enc, const char **fromP, const char *fromLim, unsigned short **toP, const unsigned short *toLim) { while (*fromP != fromLim && *toP != toLim) *(*toP)++ = (unsigned char)*(*fromP)++; } #ifdef XML_NS static const struct normal_encoding latin1_encoding_ns = { { VTABLE1, latin1_toUtf8, latin1_toUtf16, 1, 0, 0 }, { #include "asciitab.h" #include "latin1tab.h" }, STANDARD_VTABLE(sb_) }; #endif static const struct normal_encoding latin1_encoding = { { VTABLE1, latin1_toUtf8, latin1_toUtf16, 1, 0, 0 }, { #define BT_COLON BT_NMSTRT #include "asciitab.h" #undef BT_COLON #include "latin1tab.h" }, STANDARD_VTABLE(sb_) }; static void PTRCALL ascii_toUtf8(const ENCODING *enc, const char **fromP, const char *fromLim, char **toP, const char *toLim) { while (*fromP != fromLim && *toP != toLim) *(*toP)++ = *(*fromP)++; } #ifdef XML_NS static const struct normal_encoding ascii_encoding_ns = { { VTABLE1, ascii_toUtf8, latin1_toUtf16, 1, 1, 0 }, { #include "asciitab.h" /* BT_NONXML == 0 */ }, STANDARD_VTABLE(sb_) }; #endif static const struct normal_encoding ascii_encoding = { { VTABLE1, ascii_toUtf8, latin1_toUtf16, 1, 1, 0 }, { #define BT_COLON BT_NMSTRT #include "asciitab.h" #undef BT_COLON /* BT_NONXML == 0 */ }, STANDARD_VTABLE(sb_) }; static int PTRFASTCALL unicode_byte_type(char hi, char lo) { switch ((unsigned char)hi) { case 0xD8: case 0xD9: case 0xDA: case 0xDB: return BT_LEAD4; case 0xDC: case 0xDD: case 0xDE: case 0xDF: return BT_TRAIL; case 0xFF: switch ((unsigned char)lo) { case 0xFF: case 0xFE: return BT_NONXML; } break; } return BT_NONASCII; } #define DEFINE_UTF16_TO_UTF8(E) \ static void PTRCALL \ E ## toUtf8(const ENCODING *enc, \ const char **fromP, const char *fromLim, \ char **toP, const char *toLim) \ { \ const char *from; \ for (from = *fromP; from != fromLim; from += 2) { \ int plane; \ unsigned char lo2; \ unsigned char lo = GET_LO(from); \ unsigned char hi = GET_HI(from); \ switch (hi) { \ case 0: \ if (lo < 0x80) { \ if (*toP == toLim) { \ *fromP = from; \ return; \ } \ *(*toP)++ = lo; \ break; \ } \ /* fall through */ \ case 0x1: case 0x2: case 0x3: \ case 0x4: case 0x5: case 0x6: case 0x7: \ if (toLim - *toP < 2) { \ *fromP = from; \ return; \ } \ *(*toP)++ = ((lo >> 6) | (hi << 2) | UTF8_cval2); \ *(*toP)++ = ((lo & 0x3f) | 0x80); \ break; \ default: \ if (toLim - *toP < 3) { \ *fromP = from; \ return; \ } \ /* 16 bits divided 4, 6, 6 amongst 3 bytes */ \ *(*toP)++ = ((hi >> 4) | UTF8_cval3); \ *(*toP)++ = (((hi & 0xf) << 2) | (lo >> 6) | 0x80); \ *(*toP)++ = ((lo & 0x3f) | 0x80); \ break; \ case 0xD8: case 0xD9: case 0xDA: case 0xDB: \ if (toLim - *toP < 4) { \ *fromP = from; \ return; \ } \ plane = (((hi & 0x3) << 2) | ((lo >> 6) & 0x3)) + 1; \ *(*toP)++ = ((plane >> 2) | UTF8_cval4); \ *(*toP)++ = (((lo >> 2) & 0xF) | ((plane & 0x3) << 4) | 0x80); \ from += 2; \ lo2 = GET_LO(from); \ *(*toP)++ = (((lo & 0x3) << 4) \ | ((GET_HI(from) & 0x3) << 2) \ | (lo2 >> 6) \ | 0x80); \ *(*toP)++ = ((lo2 & 0x3f) | 0x80); \ break; \ } \ } \ *fromP = from; \ } #define DEFINE_UTF16_TO_UTF16(E) \ static void PTRCALL \ E ## toUtf16(const ENCODING *enc, \ const char **fromP, const char *fromLim, \ unsigned short **toP, const unsigned short *toLim) \ { \ /* Avoid copying first half only of surrogate */ \ if (fromLim - *fromP > ((toLim - *toP) << 1) \ && (GET_HI(fromLim - 2) & 0xF8) == 0xD8) \ fromLim -= 2; \ for (; *fromP != fromLim && *toP != toLim; *fromP += 2) \ *(*toP)++ = (GET_HI(*fromP) << 8) | GET_LO(*fromP); \ } #define SET2(ptr, ch) \ (((ptr)[0] = ((ch) & 0xff)), ((ptr)[1] = ((ch) >> 8))) #define GET_LO(ptr) ((unsigned char)(ptr)[0]) #define GET_HI(ptr) ((unsigned char)(ptr)[1]) DEFINE_UTF16_TO_UTF8(little2_) DEFINE_UTF16_TO_UTF16(little2_) #undef SET2 #undef GET_LO #undef GET_HI #define SET2(ptr, ch) \ (((ptr)[0] = ((ch) >> 8)), ((ptr)[1] = ((ch) & 0xFF))) #define GET_LO(ptr) ((unsigned char)(ptr)[1]) #define GET_HI(ptr) ((unsigned char)(ptr)[0]) DEFINE_UTF16_TO_UTF8(big2_) DEFINE_UTF16_TO_UTF16(big2_) #undef SET2 #undef GET_LO #undef GET_HI #define LITTLE2_BYTE_TYPE(enc, p) \ ((p)[1] == 0 \ ? ((struct normal_encoding *)(enc))->type[(unsigned char)*(p)] \ : unicode_byte_type((p)[1], (p)[0])) #define LITTLE2_BYTE_TO_ASCII(enc, p) ((p)[1] == 0 ? (p)[0] : -1) #define LITTLE2_CHAR_MATCHES(enc, p, c) ((p)[1] == 0 && (p)[0] == c) #define LITTLE2_IS_NAME_CHAR_MINBPC(enc, p) \ UCS2_GET_NAMING(namePages, (unsigned char)p[1], (unsigned char)p[0]) #define LITTLE2_IS_NMSTRT_CHAR_MINBPC(enc, p) \ UCS2_GET_NAMING(nmstrtPages, (unsigned char)p[1], (unsigned char)p[0]) #ifdef XML_MIN_SIZE static int PTRFASTCALL little2_byteType(const ENCODING *enc, const char *p) { return LITTLE2_BYTE_TYPE(enc, p); } static int PTRFASTCALL little2_byteToAscii(const ENCODING *enc, const char *p) { return LITTLE2_BYTE_TO_ASCII(enc, p); } static int PTRCALL little2_charMatches(const ENCODING *enc, const char *p, int c) { return LITTLE2_CHAR_MATCHES(enc, p, c); } static int PTRFASTCALL little2_isNameMin(const ENCODING *enc, const char *p) { return LITTLE2_IS_NAME_CHAR_MINBPC(enc, p); } static int PTRFASTCALL little2_isNmstrtMin(const ENCODING *enc, const char *p) { return LITTLE2_IS_NMSTRT_CHAR_MINBPC(enc, p); } #undef VTABLE #define VTABLE VTABLE1, little2_toUtf8, little2_toUtf16 #else /* not XML_MIN_SIZE */ #undef PREFIX #define PREFIX(ident) little2_ ## ident #define MINBPC(enc) 2 /* CHAR_MATCHES is guaranteed to have MINBPC bytes available. */ #define BYTE_TYPE(enc, p) LITTLE2_BYTE_TYPE(enc, p) #define BYTE_TO_ASCII(enc, p) LITTLE2_BYTE_TO_ASCII(enc, p) #define CHAR_MATCHES(enc, p, c) LITTLE2_CHAR_MATCHES(enc, p, c) #define IS_NAME_CHAR(enc, p, n) 0 #define IS_NAME_CHAR_MINBPC(enc, p) LITTLE2_IS_NAME_CHAR_MINBPC(enc, p) #define IS_NMSTRT_CHAR(enc, p, n) (0) #define IS_NMSTRT_CHAR_MINBPC(enc, p) LITTLE2_IS_NMSTRT_CHAR_MINBPC(enc, p) #include "xmltok_impl.c" #undef MINBPC #undef BYTE_TYPE #undef BYTE_TO_ASCII #undef CHAR_MATCHES #undef IS_NAME_CHAR #undef IS_NAME_CHAR_MINBPC #undef IS_NMSTRT_CHAR #undef IS_NMSTRT_CHAR_MINBPC #undef IS_INVALID_CHAR #endif /* not XML_MIN_SIZE */ #ifdef XML_NS static const struct normal_encoding little2_encoding_ns = { { VTABLE, 2, 0, #if BYTEORDER == 1234 1 #else 0 #endif }, { #include "asciitab.h" #include "latin1tab.h" }, STANDARD_VTABLE(little2_) }; #endif static const struct normal_encoding little2_encoding = { { VTABLE, 2, 0, #if BYTEORDER == 1234 1 #else 0 #endif }, { #define BT_COLON BT_NMSTRT #include "asciitab.h" #undef BT_COLON #include "latin1tab.h" }, STANDARD_VTABLE(little2_) }; #if BYTEORDER != 4321 #ifdef XML_NS static const struct normal_encoding internal_little2_encoding_ns = { { VTABLE, 2, 0, 1 }, { #include "iasciitab.h" #include "latin1tab.h" }, STANDARD_VTABLE(little2_) }; #endif static const struct normal_encoding internal_little2_encoding = { { VTABLE, 2, 0, 1 }, { #define BT_COLON BT_NMSTRT #include "iasciitab.h" #undef BT_COLON #include "latin1tab.h" }, STANDARD_VTABLE(little2_) }; #endif #define BIG2_BYTE_TYPE(enc, p) \ ((p)[0] == 0 \ ? ((struct normal_encoding *)(enc))->type[(unsigned char)(p)[1]] \ : unicode_byte_type((p)[0], (p)[1])) #define BIG2_BYTE_TO_ASCII(enc, p) ((p)[0] == 0 ? (p)[1] : -1) #define BIG2_CHAR_MATCHES(enc, p, c) ((p)[0] == 0 && (p)[1] == c) #define BIG2_IS_NAME_CHAR_MINBPC(enc, p) \ UCS2_GET_NAMING(namePages, (unsigned char)p[0], (unsigned char)p[1]) #define BIG2_IS_NMSTRT_CHAR_MINBPC(enc, p) \ UCS2_GET_NAMING(nmstrtPages, (unsigned char)p[0], (unsigned char)p[1]) #ifdef XML_MIN_SIZE static int PTRFASTCALL big2_byteType(const ENCODING *enc, const char *p) { return BIG2_BYTE_TYPE(enc, p); } static int PTRFASTCALL big2_byteToAscii(const ENCODING *enc, const char *p) { return BIG2_BYTE_TO_ASCII(enc, p); } static int PTRCALL big2_charMatches(const ENCODING *enc, const char *p, int c) { return BIG2_CHAR_MATCHES(enc, p, c); } static int PTRFASTCALL big2_isNameMin(const ENCODING *enc, const char *p) { return BIG2_IS_NAME_CHAR_MINBPC(enc, p); } static int PTRFASTCALL big2_isNmstrtMin(const ENCODING *enc, const char *p) { return BIG2_IS_NMSTRT_CHAR_MINBPC(enc, p); } #undef VTABLE #define VTABLE VTABLE1, big2_toUtf8, big2_toUtf16 #else /* not XML_MIN_SIZE */ #undef PREFIX #define PREFIX(ident) big2_ ## ident #define MINBPC(enc) 2 /* CHAR_MATCHES is guaranteed to have MINBPC bytes available. */ #define BYTE_TYPE(enc, p) BIG2_BYTE_TYPE(enc, p) #define BYTE_TO_ASCII(enc, p) BIG2_BYTE_TO_ASCII(enc, p) #define CHAR_MATCHES(enc, p, c) BIG2_CHAR_MATCHES(enc, p, c) #define IS_NAME_CHAR(enc, p, n) 0 #define IS_NAME_CHAR_MINBPC(enc, p) BIG2_IS_NAME_CHAR_MINBPC(enc, p) #define IS_NMSTRT_CHAR(enc, p, n) (0) #define IS_NMSTRT_CHAR_MINBPC(enc, p) BIG2_IS_NMSTRT_CHAR_MINBPC(enc, p) #include "xmltok_impl.c" #undef MINBPC #undef BYTE_TYPE #undef BYTE_TO_ASCII #undef CHAR_MATCHES #undef IS_NAME_CHAR #undef IS_NAME_CHAR_MINBPC #undef IS_NMSTRT_CHAR #undef IS_NMSTRT_CHAR_MINBPC #undef IS_INVALID_CHAR #endif /* not XML_MIN_SIZE */ #ifdef XML_NS static const struct normal_encoding big2_encoding_ns = { { VTABLE, 2, 0, #if BYTEORDER == 4321 1 #else 0 #endif }, { #include "asciitab.h" #include "latin1tab.h" }, STANDARD_VTABLE(big2_) }; #endif static const struct normal_encoding big2_encoding = { { VTABLE, 2, 0, #if BYTEORDER == 4321 1 #else 0 #endif }, { #define BT_COLON BT_NMSTRT #include "asciitab.h" #undef BT_COLON #include "latin1tab.h" }, STANDARD_VTABLE(big2_) }; #if BYTEORDER != 1234 #ifdef XML_NS static const struct normal_encoding internal_big2_encoding_ns = { { VTABLE, 2, 0, 1 }, { #include "iasciitab.h" #include "latin1tab.h" }, STANDARD_VTABLE(big2_) }; #endif static const struct normal_encoding internal_big2_encoding = { { VTABLE, 2, 0, 1 }, { #define BT_COLON BT_NMSTRT #include "iasciitab.h" #undef BT_COLON #include "latin1tab.h" }, STANDARD_VTABLE(big2_) }; #endif #undef PREFIX static int FASTCALL streqci(const char *s1, const char *s2) { for (;;) { char c1 = *s1++; char c2 = *s2++; if (ASCII_a <= c1 && c1 <= ASCII_z) c1 += ASCII_A - ASCII_a; if (ASCII_a <= c2 && c2 <= ASCII_z) c2 += ASCII_A - ASCII_a; if (c1 != c2) return 0; if (!c1) break; } return 1; } static void PTRCALL initUpdatePosition(const ENCODING *enc, const char *ptr, const char *end, POSITION *pos) { normal_updatePosition(&utf8_encoding.enc, ptr, end, pos); } static int toAscii(const ENCODING *enc, const char *ptr, const char *end) { char buf[1]; char *p = buf; XmlUtf8Convert(enc, &ptr, end, &p, p + 1); if (p == buf) return -1; else return buf[0]; } static int FASTCALL isSpace(int c) { switch (c) { case 0x20: case 0xD: case 0xA: case 0x9: return 1; } return 0; } /* Return 1 if there's just optional white space or there's an S followed by name=val. */ static int parsePseudoAttribute(const ENCODING *enc, const char *ptr, const char *end, const char **namePtr, const char **nameEndPtr, const char **valPtr, const char **nextTokPtr) { int c; char open; if (ptr == end) { *namePtr = NULL; return 1; } if (!isSpace(toAscii(enc, ptr, end))) { *nextTokPtr = ptr; return 0; } do { ptr += enc->minBytesPerChar; } while (isSpace(toAscii(enc, ptr, end))); if (ptr == end) { *namePtr = NULL; return 1; } *namePtr = ptr; for (;;) { c = toAscii(enc, ptr, end); if (c == -1) { *nextTokPtr = ptr; return 0; } if (c == ASCII_EQUALS) { *nameEndPtr = ptr; break; } if (isSpace(c)) { *nameEndPtr = ptr; do { ptr += enc->minBytesPerChar; } while (isSpace(c = toAscii(enc, ptr, end))); if (c != ASCII_EQUALS) { *nextTokPtr = ptr; return 0; } break; } ptr += enc->minBytesPerChar; } if (ptr == *namePtr) { *nextTokPtr = ptr; return 0; } ptr += enc->minBytesPerChar; c = toAscii(enc, ptr, end); while (isSpace(c)) { ptr += enc->minBytesPerChar; c = toAscii(enc, ptr, end); } if (c != ASCII_QUOT && c != ASCII_APOS) { *nextTokPtr = ptr; return 0; } open = (char)c; ptr += enc->minBytesPerChar; *valPtr = ptr; for (;; ptr += enc->minBytesPerChar) { c = toAscii(enc, ptr, end); if (c == open) break; if (!(ASCII_a <= c && c <= ASCII_z) && !(ASCII_A <= c && c <= ASCII_Z) && !(ASCII_0 <= c && c <= ASCII_9) && c != ASCII_PERIOD && c != ASCII_MINUS && c != ASCII_UNDERSCORE) { *nextTokPtr = ptr; return 0; } } *nextTokPtr = ptr + enc->minBytesPerChar; return 1; } static const char KW_version[] = { ASCII_v, ASCII_e, ASCII_r, ASCII_s, ASCII_i, ASCII_o, ASCII_n, '\0' }; static const char KW_encoding[] = { ASCII_e, ASCII_n, ASCII_c, ASCII_o, ASCII_d, ASCII_i, ASCII_n, ASCII_g, '\0' }; static const char KW_standalone[] = { ASCII_s, ASCII_t, ASCII_a, ASCII_n, ASCII_d, ASCII_a, ASCII_l, ASCII_o, ASCII_n, ASCII_e, '\0' }; static const char KW_yes[] = { ASCII_y, ASCII_e, ASCII_s, '\0' }; static const char KW_no[] = { ASCII_n, ASCII_o, '\0' }; static int doParseXmlDecl(const ENCODING *(*encodingFinder)(const ENCODING *, const char *, const char *), int isGeneralTextEntity, const ENCODING *enc, const char *ptr, const char *end, const char **badPtr, const char **versionPtr, const char **versionEndPtr, const char **encodingName, const ENCODING **encoding, int *standalone) { const char *val = NULL; const char *name = NULL; const char *nameEnd = NULL; ptr += 5 * enc->minBytesPerChar; end -= 2 * enc->minBytesPerChar; if (!parsePseudoAttribute(enc, ptr, end, &name, &nameEnd, &val, &ptr) || !name) { *badPtr = ptr; return 0; } if (!XmlNameMatchesAscii(enc, name, nameEnd, KW_version)) { if (!isGeneralTextEntity) { *badPtr = name; return 0; } } else { if (versionPtr) *versionPtr = val; if (versionEndPtr) *versionEndPtr = ptr; if (!parsePseudoAttribute(enc, ptr, end, &name, &nameEnd, &val, &ptr)) { *badPtr = ptr; return 0; } if (!name) { if (isGeneralTextEntity) { /* a TextDecl must have an EncodingDecl */ *badPtr = ptr; return 0; } return 1; } } if (XmlNameMatchesAscii(enc, name, nameEnd, KW_encoding)) { int c = toAscii(enc, val, end); if (!(ASCII_a <= c && c <= ASCII_z) && !(ASCII_A <= c && c <= ASCII_Z)) { *badPtr = val; return 0; } if (encodingName) *encodingName = val; if (encoding) *encoding = encodingFinder(enc, val, ptr - enc->minBytesPerChar); if (!parsePseudoAttribute(enc, ptr, end, &name, &nameEnd, &val, &ptr)) { *badPtr = ptr; return 0; } if (!name) return 1; } if (!XmlNameMatchesAscii(enc, name, nameEnd, KW_standalone) || isGeneralTextEntity) { *badPtr = name; return 0; } if (XmlNameMatchesAscii(enc, val, ptr - enc->minBytesPerChar, KW_yes)) { if (standalone) *standalone = 1; } else if (XmlNameMatchesAscii(enc, val, ptr - enc->minBytesPerChar, KW_no)) { if (standalone) *standalone = 0; } else { *badPtr = val; return 0; } while (isSpace(toAscii(enc, ptr, end))) ptr += enc->minBytesPerChar; if (ptr != end) { *badPtr = ptr; return 0; } return 1; } static int FASTCALL checkCharRefNumber(int result) { switch (result >> 8) { case 0xD8: case 0xD9: case 0xDA: case 0xDB: case 0xDC: case 0xDD: case 0xDE: case 0xDF: return -1; case 0: if (latin1_encoding.type[result] == BT_NONXML) return -1; break; case 0xFF: if (result == 0xFFFE || result == 0xFFFF) return -1; break; } return result; } int FASTCALL XmlUtf8Encode(int c, char *buf) { enum { /* minN is minimum legal resulting value for N byte sequence */ min2 = 0x80, min3 = 0x800, min4 = 0x10000 }; if (c < 0) return 0; if (c < min2) { buf[0] = (char)(c | UTF8_cval1); return 1; } if (c < min3) { buf[0] = (char)((c >> 6) | UTF8_cval2); buf[1] = (char)((c & 0x3f) | 0x80); return 2; } if (c < min4) { buf[0] = (char)((c >> 12) | UTF8_cval3); buf[1] = (char)(((c >> 6) & 0x3f) | 0x80); buf[2] = (char)((c & 0x3f) | 0x80); return 3; } if (c < 0x110000) { buf[0] = (char)((c >> 18) | UTF8_cval4); buf[1] = (char)(((c >> 12) & 0x3f) | 0x80); buf[2] = (char)(((c >> 6) & 0x3f) | 0x80); buf[3] = (char)((c & 0x3f) | 0x80); return 4; } return 0; } int FASTCALL XmlUtf16Encode(int charNum, unsigned short *buf) { if (charNum < 0) return 0; if (charNum < 0x10000) { buf[0] = (unsigned short)charNum; return 1; } if (charNum < 0x110000) { charNum -= 0x10000; buf[0] = (unsigned short)((charNum >> 10) + 0xD800); buf[1] = (unsigned short)((charNum & 0x3FF) + 0xDC00); return 2; } return 0; } struct unknown_encoding { struct normal_encoding normal; CONVERTER convert; void *userData; unsigned short utf16[256]; char utf8[256][4]; }; #define AS_UNKNOWN_ENCODING(enc) ((const struct unknown_encoding *) (enc)) int XmlSizeOfUnknownEncoding(void) { return sizeof(struct unknown_encoding); } static int PTRFASTCALL unknown_isName(const ENCODING *enc, const char *p) { const struct unknown_encoding *uenc = AS_UNKNOWN_ENCODING(enc); int c = uenc->convert(uenc->userData, p); if (c & ~0xFFFF) return 0; return UCS2_GET_NAMING(namePages, c >> 8, c & 0xFF); } static int PTRFASTCALL unknown_isNmstrt(const ENCODING *enc, const char *p) { const struct unknown_encoding *uenc = AS_UNKNOWN_ENCODING(enc); int c = uenc->convert(uenc->userData, p); if (c & ~0xFFFF) return 0; return UCS2_GET_NAMING(nmstrtPages, c >> 8, c & 0xFF); } static int PTRFASTCALL unknown_isInvalid(const ENCODING *enc, const char *p) { const struct unknown_encoding *uenc = AS_UNKNOWN_ENCODING(enc); int c = uenc->convert(uenc->userData, p); return (c & ~0xFFFF) || checkCharRefNumber(c) < 0; } static void PTRCALL unknown_toUtf8(const ENCODING *enc, const char **fromP, const char *fromLim, char **toP, const char *toLim) { const struct unknown_encoding *uenc = AS_UNKNOWN_ENCODING(enc); char buf[XML_UTF8_ENCODE_MAX]; for (;;) { const char *utf8; int n; if (*fromP == fromLim) break; utf8 = uenc->utf8[(unsigned char)**fromP]; n = *utf8++; if (n == 0) { int c = uenc->convert(uenc->userData, *fromP); n = XmlUtf8Encode(c, buf); if (n > toLim - *toP) break; utf8 = buf; *fromP += (AS_NORMAL_ENCODING(enc)->type[(unsigned char)**fromP] - (BT_LEAD2 - 2)); } else { if (n > toLim - *toP) break; (*fromP)++; } do { *(*toP)++ = *utf8++; } while (--n != 0); } } static void PTRCALL unknown_toUtf16(const ENCODING *enc, const char **fromP, const char *fromLim, unsigned short **toP, const unsigned short *toLim) { const struct unknown_encoding *uenc = AS_UNKNOWN_ENCODING(enc); while (*fromP != fromLim && *toP != toLim) { unsigned short c = uenc->utf16[(unsigned char)**fromP]; if (c == 0) { c = (unsigned short) uenc->convert(uenc->userData, *fromP); *fromP += (AS_NORMAL_ENCODING(enc)->type[(unsigned char)**fromP] - (BT_LEAD2 - 2)); } else (*fromP)++; *(*toP)++ = c; } } ENCODING * XmlInitUnknownEncoding(void *mem, int *table, CONVERTER convert, void *userData) { int i; struct unknown_encoding *e = (struct unknown_encoding *)mem; for (i = 0; i < (int)sizeof(struct normal_encoding); i++) ((char *)mem)[i] = ((char *)&latin1_encoding)[i]; for (i = 0; i < 128; i++) if (latin1_encoding.type[i] != BT_OTHER && latin1_encoding.type[i] != BT_NONXML && table[i] != i) return 0; for (i = 0; i < 256; i++) { int c = table[i]; if (c == -1) { e->normal.type[i] = BT_MALFORM; /* This shouldn't really get used. */ e->utf16[i] = 0xFFFF; e->utf8[i][0] = 1; e->utf8[i][1] = 0; } else if (c < 0) { if (c < -4) return 0; e->normal.type[i] = (unsigned char)(BT_LEAD2 - (c + 2)); e->utf8[i][0] = 0; e->utf16[i] = 0; } else if (c < 0x80) { if (latin1_encoding.type[c] != BT_OTHER && latin1_encoding.type[c] != BT_NONXML && c != i) return 0; e->normal.type[i] = latin1_encoding.type[c]; e->utf8[i][0] = 1; e->utf8[i][1] = (char)c; e->utf16[i] = (unsigned short)(c == 0 ? 0xFFFF : c); } else if (checkCharRefNumber(c) < 0) { e->normal.type[i] = BT_NONXML; /* This shouldn't really get used. */ e->utf16[i] = 0xFFFF; e->utf8[i][0] = 1; e->utf8[i][1] = 0; } else { if (c > 0xFFFF) return 0; if (UCS2_GET_NAMING(nmstrtPages, c >> 8, c & 0xff)) e->normal.type[i] = BT_NMSTRT; else if (UCS2_GET_NAMING(namePages, c >> 8, c & 0xff)) e->normal.type[i] = BT_NAME; else e->normal.type[i] = BT_OTHER; e->utf8[i][0] = (char)XmlUtf8Encode(c, e->utf8[i] + 1); e->utf16[i] = (unsigned short)c; } } e->userData = userData; e->convert = convert; if (convert) { e->normal.isName2 = unknown_isName; e->normal.isName3 = unknown_isName; e->normal.isName4 = unknown_isName; e->normal.isNmstrt2 = unknown_isNmstrt; e->normal.isNmstrt3 = unknown_isNmstrt; e->normal.isNmstrt4 = unknown_isNmstrt; e->normal.isInvalid2 = unknown_isInvalid; e->normal.isInvalid3 = unknown_isInvalid; e->normal.isInvalid4 = unknown_isInvalid; } e->normal.enc.utf8Convert = unknown_toUtf8; e->normal.enc.utf16Convert = unknown_toUtf16; return &(e->normal.enc); } /* If this enumeration is changed, getEncodingIndex and encodings must also be changed. */ enum { UNKNOWN_ENC = -1, ISO_8859_1_ENC = 0, US_ASCII_ENC, UTF_8_ENC, UTF_16_ENC, UTF_16BE_ENC, UTF_16LE_ENC, /* must match encodingNames up to here */ NO_ENC }; static const char KW_ISO_8859_1[] = { ASCII_I, ASCII_S, ASCII_O, ASCII_MINUS, ASCII_8, ASCII_8, ASCII_5, ASCII_9, ASCII_MINUS, ASCII_1, '\0' }; static const char KW_US_ASCII[] = { ASCII_U, ASCII_S, ASCII_MINUS, ASCII_A, ASCII_S, ASCII_C, ASCII_I, ASCII_I, '\0' }; static const char KW_UTF_8[] = { ASCII_U, ASCII_T, ASCII_F, ASCII_MINUS, ASCII_8, '\0' }; static const char KW_UTF_16[] = { ASCII_U, ASCII_T, ASCII_F, ASCII_MINUS, ASCII_1, ASCII_6, '\0' }; static const char KW_UTF_16BE[] = { ASCII_U, ASCII_T, ASCII_F, ASCII_MINUS, ASCII_1, ASCII_6, ASCII_B, ASCII_E, '\0' }; static const char KW_UTF_16LE[] = { ASCII_U, ASCII_T, ASCII_F, ASCII_MINUS, ASCII_1, ASCII_6, ASCII_L, ASCII_E, '\0' }; static int FASTCALL getEncodingIndex(const char *name) { static const char *encodingNames[] = { KW_ISO_8859_1, KW_US_ASCII, KW_UTF_8, KW_UTF_16, KW_UTF_16BE, KW_UTF_16LE, }; int i; if (name == NULL) return NO_ENC; for (i = 0; i < (int)(sizeof(encodingNames)/sizeof(encodingNames[0])); i++) if (streqci(name, encodingNames[i])) return i; return UNKNOWN_ENC; } /* For binary compatibility, we store the index of the encoding specified at initialization in the isUtf16 member. */ #define INIT_ENC_INDEX(enc) ((int)(enc)->initEnc.isUtf16) #define SET_INIT_ENC_INDEX(enc, i) ((enc)->initEnc.isUtf16 = (char)i) /* This is what detects the encoding. encodingTable maps from encoding indices to encodings; INIT_ENC_INDEX(enc) is the index of the external (protocol) specified encoding; state is XML_CONTENT_STATE if we're parsing an external text entity, and XML_PROLOG_STATE otherwise. */ static int initScan(const ENCODING **encodingTable, const INIT_ENCODING *enc, int state, const char *ptr, const char *end, const char **nextTokPtr) { const ENCODING **encPtr; if (ptr == end) return XML_TOK_NONE; encPtr = enc->encPtr; if (ptr + 1 == end) { /* only a single byte available for auto-detection */ #ifndef XML_DTD /* FIXME */ /* a well-formed document entity must have more than one byte */ if (state != XML_CONTENT_STATE) return XML_TOK_PARTIAL; #endif /* so we're parsing an external text entity... */ /* if UTF-16 was externally specified, then we need at least 2 bytes */ switch (INIT_ENC_INDEX(enc)) { case UTF_16_ENC: case UTF_16LE_ENC: case UTF_16BE_ENC: return XML_TOK_PARTIAL; } switch ((unsigned char)*ptr) { case 0xFE: case 0xFF: case 0xEF: /* possibly first byte of UTF-8 BOM */ if (INIT_ENC_INDEX(enc) == ISO_8859_1_ENC && state == XML_CONTENT_STATE) break; /* fall through */ case 0x00: case 0x3C: return XML_TOK_PARTIAL; } } else { switch (((unsigned char)ptr[0] << 8) | (unsigned char)ptr[1]) { case 0xFEFF: if (INIT_ENC_INDEX(enc) == ISO_8859_1_ENC && state == XML_CONTENT_STATE) break; *nextTokPtr = ptr + 2; *encPtr = encodingTable[UTF_16BE_ENC]; return XML_TOK_BOM; /* 00 3C is handled in the default case */ case 0x3C00: if ((INIT_ENC_INDEX(enc) == UTF_16BE_ENC || INIT_ENC_INDEX(enc) == UTF_16_ENC) && state == XML_CONTENT_STATE) break; *encPtr = encodingTable[UTF_16LE_ENC]; return XmlTok(*encPtr, state, ptr, end, nextTokPtr); case 0xFFFE: if (INIT_ENC_INDEX(enc) == ISO_8859_1_ENC && state == XML_CONTENT_STATE) break; *nextTokPtr = ptr + 2; *encPtr = encodingTable[UTF_16LE_ENC]; return XML_TOK_BOM; case 0xEFBB: /* Maybe a UTF-8 BOM (EF BB BF) */ /* If there's an explicitly specified (external) encoding of ISO-8859-1 or some flavour of UTF-16 and this is an external text entity, don't look for the BOM, because it might be a legal data. */ if (state == XML_CONTENT_STATE) { int e = INIT_ENC_INDEX(enc); if (e == ISO_8859_1_ENC || e == UTF_16BE_ENC || e == UTF_16LE_ENC || e == UTF_16_ENC) break; } if (ptr + 2 == end) return XML_TOK_PARTIAL; if ((unsigned char)ptr[2] == 0xBF) { *nextTokPtr = ptr + 3; *encPtr = encodingTable[UTF_8_ENC]; return XML_TOK_BOM; } break; default: if (ptr[0] == '\0') { /* 0 isn't a legal data character. Furthermore a document entity can only start with ASCII characters. So the only way this can fail to be big-endian UTF-16 if it it's an external parsed general entity that's labelled as UTF-16LE. */ if (state == XML_CONTENT_STATE && INIT_ENC_INDEX(enc) == UTF_16LE_ENC) break; *encPtr = encodingTable[UTF_16BE_ENC]; return XmlTok(*encPtr, state, ptr, end, nextTokPtr); } else if (ptr[1] == '\0') { /* We could recover here in the case: - parsing an external entity - second byte is 0 - no externally specified encoding - no encoding declaration by assuming UTF-16LE. But we don't, because this would mean when presented just with a single byte, we couldn't reliably determine whether we needed further bytes. */ if (state == XML_CONTENT_STATE) break; *encPtr = encodingTable[UTF_16LE_ENC]; return XmlTok(*encPtr, state, ptr, end, nextTokPtr); } break; } } *encPtr = encodingTable[INIT_ENC_INDEX(enc)]; return XmlTok(*encPtr, state, ptr, end, nextTokPtr); } #define NS(x) x #define ns(x) x #include "xmltok_ns.c" #undef NS #undef ns #ifdef XML_NS #define NS(x) x ## NS #define ns(x) x ## _ns #include "xmltok_ns.c" #undef NS #undef ns ENCODING * XmlInitUnknownEncodingNS(void *mem, int *table, CONVERTER convert, void *userData) { ENCODING *enc = XmlInitUnknownEncoding(mem, table, convert, userData); if (enc) ((struct normal_encoding *)enc)->type[ASCII_COLON] = BT_COLON; return enc; } #endif /* XML_NS */ tla-1.3.5+dfsg/src/expat/lib/expat_static.dsp0000644000175000017500000000752010457621771017631 0ustar useruser# Microsoft Developer Studio Project File - Name="expat_static" - Package Owner=<4> # Microsoft Developer Studio Generated Build File, Format Version 6.00 # ** DO NOT EDIT ** # TARGTYPE "Win32 (x86) Static Library" 0x0104 CFG=expat_static - Win32 Debug !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run !MESSAGE !MESSAGE NMAKE /f "expat_static.mak". !MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: !MESSAGE !MESSAGE NMAKE /f "expat_static.mak" CFG="expat_static - Win32 Debug" !MESSAGE !MESSAGE Possible choices for configuration are: !MESSAGE !MESSAGE "expat_static - Win32 Release" (based on "Win32 (x86) Static Library") !MESSAGE "expat_static - Win32 Debug" (based on "Win32 (x86) Static Library") !MESSAGE # Begin Project # PROP AllowPerConfigDependencies 0 # PROP Scc_ProjName "" # PROP Scc_LocalPath "" CPP=cl.exe RSC=rc.exe !IF "$(CFG)" == "expat_static - Win32 Release" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 0 # PROP BASE Output_Dir "expat_static___Win32_Release" # PROP BASE Intermediate_Dir "expat_static___Win32_Release" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 0 # PROP Output_Dir "Release_static" # PROP Intermediate_Dir "Release_static" # PROP Target_Dir "" # ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c # ADD CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "_WINDOWS" /D "NDEBUG" /D "_MBCS" /D "_LIB" /D "COMPILED_FROM_DSP" /FD /c # SUBTRACT CPP /YX # ADD BASE RSC /l 0x1009 /d "NDEBUG" # ADD RSC /l 0x409 /d "NDEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LIB32=link.exe -lib # ADD BASE LIB32 /nologo # ADD LIB32 /nologo /out:"Release_static\libexpatMT.lib" !ELSEIF "$(CFG)" == "expat_static - Win32 Debug" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 1 # PROP BASE Output_Dir "expat_static___Win32_Debug" # PROP BASE Intermediate_Dir "expat_static___Win32_Debug" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 1 # PROP Output_Dir "Debug_static" # PROP Intermediate_Dir "Debug_static" # PROP Target_Dir "" # ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c # ADD CPP /nologo /MTd /W3 /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "COMPILED_FROM_DSP" /D "_MBCS" /D "_LIB" /FR /FD /GZ /c # SUBTRACT CPP /YX # ADD BASE RSC /l 0x1009 /d "_DEBUG" # ADD RSC /l 0x409 /d "_DEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LIB32=link.exe -lib # ADD BASE LIB32 /nologo # ADD LIB32 /nologo /out:"Debug_static\libexpatMT.lib" !ENDIF # Begin Target # Name "expat_static - Win32 Release" # Name "expat_static - Win32 Debug" # Begin Group "Source Files" # PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" # Begin Source File SOURCE=.\xmlparse.c # End Source File # Begin Source File SOURCE=.\xmlrole.c # End Source File # Begin Source File SOURCE=.\xmltok.c # End Source File # End Group # Begin Group "Header Files" # PROP Default_Filter "h;hpp;hxx;hm;inl" # Begin Source File SOURCE=.\ascii.h # End Source File # Begin Source File SOURCE=.\asciitab.h # End Source File # Begin Source File SOURCE=.\expat.h # End Source File # Begin Source File SOURCE=.\expat_external.h # End Source File # Begin Source File SOURCE=.\iasciitab.h # End Source File # Begin Source File SOURCE=.\internal.h # End Source File # Begin Source File SOURCE=.\latin1tab.h # End Source File # Begin Source File SOURCE=.\nametab.h # End Source File # Begin Source File SOURCE=.\utf8tab.h # End Source File # Begin Source File SOURCE=.\xmlrole.h # End Source File # Begin Source File SOURCE=.\xmltok.h # End Source File # Begin Source File SOURCE=.\xmltok_impl.h # End Source File # End Group # End Target # End Project tla-1.3.5+dfsg/src/expat/lib/expat_external.h0000644000175000017500000000543610457621771017631 0ustar useruser/* Copyright (c) 1998, 1999, 2000 Thai Open Source Software Center Ltd See the file COPYING for copying permission. */ /* External API definitions */ #if defined(_MSC_EXTENSIONS) && !defined(__BEOS__) && !defined(__CYGWIN__) #define XML_USE_MSC_EXTENSIONS 1 #endif /* Expat tries very hard to make the API boundary very specifically defined. There are two macros defined to control this boundary; each of these can be defined before including this header to achieve some different behavior, but doing so it not recommended or tested frequently. XMLCALL - The calling convention to use for all calls across the "library boundary." This will default to cdecl, and try really hard to tell the compiler that's what we want. XMLIMPORT - Whatever magic is needed to note that a function is to be imported from a dynamically loaded library (.dll, .so, or .sl, depending on your platform). The XMLCALL macro was added in Expat 1.95.7. The only one which is expected to be directly useful in client code is XMLCALL. Note that on at least some Unix versions, the Expat library must be compiled with the cdecl calling convention as the default since system headers may assume the cdecl convention. */ #ifndef XMLCALL #if defined(XML_USE_MSC_EXTENSIONS) #define XMLCALL __cdecl #elif defined(__GNUC__) && defined(__i386) #define XMLCALL __attribute__((cdecl)) #else /* For any platform which uses this definition and supports more than one calling convention, we need to extend this definition to declare the convention used on that platform, if it's possible to do so. If this is the case for your platform, please file a bug report with information on how to identify your platform via the C pre-processor and how to specify the same calling convention as the platform's malloc() implementation. */ #define XMLCALL #endif #endif /* not defined XMLCALL */ #if !defined(XML_STATIC) && !defined(XMLIMPORT) #ifndef XML_BUILDING_EXPAT /* using Expat from an application */ #ifdef XML_USE_MSC_EXTENSIONS #define XMLIMPORT __declspec(dllimport) #endif #endif #endif /* not defined XML_STATIC */ /* If we didn't define it above, define it away: */ #ifndef XMLIMPORT #define XMLIMPORT #endif #define XMLPARSEAPI(type) XMLIMPORT type XMLCALL #ifdef __cplusplus extern "C" { #endif #ifdef XML_UNICODE_WCHAR_T #define XML_UNICODE #endif #ifdef XML_UNICODE /* Information is UTF-16 encoded. */ #ifdef XML_UNICODE_WCHAR_T typedef wchar_t XML_Char; typedef wchar_t XML_LChar; #else typedef unsigned short XML_Char; typedef char XML_LChar; #endif /* XML_UNICODE_WCHAR_T */ #else /* Information is UTF-8 encoded. */ typedef char XML_Char; typedef char XML_LChar; #endif /* XML_UNICODE */ tla-1.3.5+dfsg/src/expat/lib/internal.h0000644000175000017500000000372310457621771016417 0ustar useruser/* internal.h Internal definitions used by Expat. This is not needed to compile client code. The following calling convention macros are defined for frequently called functions: FASTCALL - Used for those internal functions that have a simple body and a low number of arguments and local variables. PTRCALL - Used for functions called though function pointers. PTRFASTCALL - Like PTRCALL, but for low number of arguments. inline - Used for selected internal functions for which inlining may improve performance on some platforms. Note: Use of these macros is based on judgement, not hard rules, and therefore subject to change. */ #if defined(__GNUC__) && defined(__i386__) /* We'll use this version by default only where we know it helps. regparm() generates warnings on Solaris boxes. See SF bug #692878. Instability reported with egcs on a RedHat Linux 7.3. Let's comment out: #define FASTCALL __attribute__((stdcall, regparm(3))) and let's try this: */ #define FASTCALL __attribute__((regparm(3))) #define PTRFASTCALL __attribute__((regparm(3))) #endif /* Using __fastcall seems to have an unexpected negative effect under MS VC++, especially for function pointers, so we won't use it for now on that platform. It may be reconsidered for a future release if it can be made more effective. Likely reason: __fastcall on Windows is like stdcall, therefore the compiler cannot perform stack optimizations for call clusters. */ /* Make sure all of these are defined if they aren't already. */ #ifndef FASTCALL #define FASTCALL #endif #ifndef PTRCALL #define PTRCALL #endif #ifndef PTRFASTCALL #define PTRFASTCALL #endif #ifndef XML_MIN_SIZE #if !defined(__cplusplus) && !defined(inline) #ifdef __GNUC__ #define inline __inline #endif /* __GNUC__ */ #endif #endif /* XML_MIN_SIZE */ #ifdef __cplusplus #define inline inline #else #ifndef inline #define inline #endif #endif tla-1.3.5+dfsg/src/expat/lib/expat.h0000644000175000017500000011626310457621771015730 0ustar useruser/* Copyright (c) 1998, 1999, 2000 Thai Open Source Software Center Ltd See the file COPYING for copying permission. */ #ifndef XmlParse_INCLUDED #define XmlParse_INCLUDED 1 #ifdef __VMS /* 0 1 2 3 0 1 2 3 1234567890123456789012345678901 1234567890123456789012345678901 */ #define XML_SetProcessingInstructionHandler XML_SetProcessingInstrHandler #define XML_SetUnparsedEntityDeclHandler XML_SetUnparsedEntDeclHandler #define XML_SetStartNamespaceDeclHandler XML_SetStartNamespcDeclHandler #define XML_SetExternalEntityRefHandlerArg XML_SetExternalEntRefHandlerArg #endif #include #include "expat_external.h" struct XML_ParserStruct; typedef struct XML_ParserStruct *XML_Parser; /* Should this be defined using stdbool.h when C99 is available? */ typedef unsigned char XML_Bool; #define XML_TRUE ((XML_Bool) 1) #define XML_FALSE ((XML_Bool) 0) /* The XML_Status enum gives the possible return values for several API functions. The preprocessor #defines are included so this stanza can be added to code that still needs to support older versions of Expat 1.95.x: #ifndef XML_STATUS_OK #define XML_STATUS_OK 1 #define XML_STATUS_ERROR 0 #endif Otherwise, the #define hackery is quite ugly and would have been dropped. */ enum XML_Status { XML_STATUS_ERROR = 0, #define XML_STATUS_ERROR XML_STATUS_ERROR XML_STATUS_OK = 1, #define XML_STATUS_OK XML_STATUS_OK XML_STATUS_SUSPENDED = 2, #define XML_STATUS_SUSPENDED XML_STATUS_SUSPENDED }; enum XML_Error { XML_ERROR_NONE, XML_ERROR_NO_MEMORY, XML_ERROR_SYNTAX, XML_ERROR_NO_ELEMENTS, XML_ERROR_INVALID_TOKEN, XML_ERROR_UNCLOSED_TOKEN, XML_ERROR_PARTIAL_CHAR, XML_ERROR_TAG_MISMATCH, XML_ERROR_DUPLICATE_ATTRIBUTE, XML_ERROR_JUNK_AFTER_DOC_ELEMENT, XML_ERROR_PARAM_ENTITY_REF, XML_ERROR_UNDEFINED_ENTITY, XML_ERROR_RECURSIVE_ENTITY_REF, XML_ERROR_ASYNC_ENTITY, XML_ERROR_BAD_CHAR_REF, XML_ERROR_BINARY_ENTITY_REF, XML_ERROR_ATTRIBUTE_EXTERNAL_ENTITY_REF, XML_ERROR_MISPLACED_XML_PI, XML_ERROR_UNKNOWN_ENCODING, XML_ERROR_INCORRECT_ENCODING, XML_ERROR_UNCLOSED_CDATA_SECTION, XML_ERROR_EXTERNAL_ENTITY_HANDLING, XML_ERROR_NOT_STANDALONE, XML_ERROR_UNEXPECTED_STATE, XML_ERROR_ENTITY_DECLARED_IN_PE, XML_ERROR_FEATURE_REQUIRES_XML_DTD, XML_ERROR_CANT_CHANGE_FEATURE_ONCE_PARSING, /* Added in 1.95.7. */ XML_ERROR_UNBOUND_PREFIX, /* Added in 1.95.8. */ XML_ERROR_UNDECLARING_PREFIX, XML_ERROR_INCOMPLETE_PE, XML_ERROR_XML_DECL, XML_ERROR_TEXT_DECL, XML_ERROR_PUBLICID, XML_ERROR_SUSPENDED, XML_ERROR_NOT_SUSPENDED, XML_ERROR_ABORTED, XML_ERROR_FINISHED, XML_ERROR_SUSPEND_PE }; enum XML_Content_Type { XML_CTYPE_EMPTY = 1, XML_CTYPE_ANY, XML_CTYPE_MIXED, XML_CTYPE_NAME, XML_CTYPE_CHOICE, XML_CTYPE_SEQ }; enum XML_Content_Quant { XML_CQUANT_NONE, XML_CQUANT_OPT, XML_CQUANT_REP, XML_CQUANT_PLUS }; /* If type == XML_CTYPE_EMPTY or XML_CTYPE_ANY, then quant will be XML_CQUANT_NONE, and the other fields will be zero or NULL. If type == XML_CTYPE_MIXED, then quant will be NONE or REP and numchildren will contain number of elements that may be mixed in and children point to an array of XML_Content cells that will be all of XML_CTYPE_NAME type with no quantification. If type == XML_CTYPE_NAME, then the name points to the name, and the numchildren field will be zero and children will be NULL. The quant fields indicates any quantifiers placed on the name. CHOICE and SEQ will have name NULL, the number of children in numchildren and children will point, recursively, to an array of XML_Content cells. The EMPTY, ANY, and MIXED types will only occur at top level. */ typedef struct XML_cp XML_Content; struct XML_cp { enum XML_Content_Type type; enum XML_Content_Quant quant; XML_Char * name; unsigned int numchildren; XML_Content * children; }; /* This is called for an element declaration. See above for description of the model argument. It's the caller's responsibility to free model when finished with it. */ typedef void (XMLCALL *XML_ElementDeclHandler) (void *userData, const XML_Char *name, XML_Content *model); XMLPARSEAPI(void) XML_SetElementDeclHandler(XML_Parser parser, XML_ElementDeclHandler eldecl); /* The Attlist declaration handler is called for *each* attribute. So a single Attlist declaration with multiple attributes declared will generate multiple calls to this handler. The "default" parameter may be NULL in the case of the "#IMPLIED" or "#REQUIRED" keyword. The "isrequired" parameter will be true and the default value will be NULL in the case of "#REQUIRED". If "isrequired" is true and default is non-NULL, then this is a "#FIXED" default. */ typedef void (XMLCALL *XML_AttlistDeclHandler) ( void *userData, const XML_Char *elname, const XML_Char *attname, const XML_Char *att_type, const XML_Char *dflt, int isrequired); XMLPARSEAPI(void) XML_SetAttlistDeclHandler(XML_Parser parser, XML_AttlistDeclHandler attdecl); /* The XML declaration handler is called for *both* XML declarations and text declarations. The way to distinguish is that the version parameter will be NULL for text declarations. The encoding parameter may be NULL for XML declarations. The standalone parameter will be -1, 0, or 1 indicating respectively that there was no standalone parameter in the declaration, that it was given as no, or that it was given as yes. */ typedef void (XMLCALL *XML_XmlDeclHandler) (void *userData, const XML_Char *version, const XML_Char *encoding, int standalone); XMLPARSEAPI(void) XML_SetXmlDeclHandler(XML_Parser parser, XML_XmlDeclHandler xmldecl); typedef struct { void *(*malloc_fcn)(size_t size); void *(*realloc_fcn)(void *ptr, size_t size); void (*free_fcn)(void *ptr); } XML_Memory_Handling_Suite; /* Constructs a new parser; encoding is the encoding specified by the external protocol or NULL if there is none specified. */ XMLPARSEAPI(XML_Parser) XML_ParserCreate(const XML_Char *encoding); /* Constructs a new parser and namespace processor. Element type names and attribute names that belong to a namespace will be expanded; unprefixed attribute names are never expanded; unprefixed element type names are expanded only if there is a default namespace. The expanded name is the concatenation of the namespace URI, the namespace separator character, and the local part of the name. If the namespace separator is '\0' then the namespace URI and the local part will be concatenated without any separator. When a namespace is not declared, the name and prefix will be passed through without expansion. */ XMLPARSEAPI(XML_Parser) XML_ParserCreateNS(const XML_Char *encoding, XML_Char namespaceSeparator); /* Constructs a new parser using the memory management suite referred to by memsuite. If memsuite is NULL, then use the standard library memory suite. If namespaceSeparator is non-NULL it creates a parser with namespace processing as described above. The character pointed at will serve as the namespace separator. All further memory operations used for the created parser will come from the given suite. */ XMLPARSEAPI(XML_Parser) XML_ParserCreate_MM(const XML_Char *encoding, const XML_Memory_Handling_Suite *memsuite, const XML_Char *namespaceSeparator); /* Prepare a parser object to be re-used. This is particularly valuable when memory allocation overhead is disproportionatly high, such as when a large number of small documnents need to be parsed. All handlers are cleared from the parser, except for the unknownEncodingHandler. The parser's external state is re-initialized except for the values of ns and ns_triplets. Added in Expat 1.95.3. */ XMLPARSEAPI(XML_Bool) XML_ParserReset(XML_Parser parser, const XML_Char *encoding); /* atts is array of name/value pairs, terminated by 0; names and values are 0 terminated. */ typedef void (XMLCALL *XML_StartElementHandler) (void *userData, const XML_Char *name, const XML_Char **atts); typedef void (XMLCALL *XML_EndElementHandler) (void *userData, const XML_Char *name); /* s is not 0 terminated. */ typedef void (XMLCALL *XML_CharacterDataHandler) (void *userData, const XML_Char *s, int len); /* target and data are 0 terminated */ typedef void (XMLCALL *XML_ProcessingInstructionHandler) ( void *userData, const XML_Char *target, const XML_Char *data); /* data is 0 terminated */ typedef void (XMLCALL *XML_CommentHandler) (void *userData, const XML_Char *data); typedef void (XMLCALL *XML_StartCdataSectionHandler) (void *userData); typedef void (XMLCALL *XML_EndCdataSectionHandler) (void *userData); /* This is called for any characters in the XML document for which there is no applicable handler. This includes both characters that are part of markup which is of a kind that is not reported (comments, markup declarations), or characters that are part of a construct which could be reported but for which no handler has been supplied. The characters are passed exactly as they were in the XML document except that they will be encoded in UTF-8 or UTF-16. Line boundaries are not normalized. Note that a byte order mark character is not passed to the default handler. There are no guarantees about how characters are divided between calls to the default handler: for example, a comment might be split between multiple calls. */ typedef void (XMLCALL *XML_DefaultHandler) (void *userData, const XML_Char *s, int len); /* This is called for the start of the DOCTYPE declaration, before any DTD or internal subset is parsed. */ typedef void (XMLCALL *XML_StartDoctypeDeclHandler) ( void *userData, const XML_Char *doctypeName, const XML_Char *sysid, const XML_Char *pubid, int has_internal_subset); /* This is called for the start of the DOCTYPE declaration when the closing > is encountered, but after processing any external subset. */ typedef void (XMLCALL *XML_EndDoctypeDeclHandler)(void *userData); /* This is called for entity declarations. The is_parameter_entity argument will be non-zero if the entity is a parameter entity, zero otherwise. For internal entities (), value will be non-NULL and systemId, publicID, and notationName will be NULL. The value string is NOT nul-terminated; the length is provided in the value_length argument. Since it is legal to have zero-length values, do not use this argument to test for internal entities. For external entities, value will be NULL and systemId will be non-NULL. The publicId argument will be NULL unless a public identifier was provided. The notationName argument will have a non-NULL value only for unparsed entity declarations. Note that is_parameter_entity can't be changed to XML_Bool, since that would break binary compatibility. */ typedef void (XMLCALL *XML_EntityDeclHandler) ( void *userData, const XML_Char *entityName, int is_parameter_entity, const XML_Char *value, int value_length, const XML_Char *base, const XML_Char *systemId, const XML_Char *publicId, const XML_Char *notationName); XMLPARSEAPI(void) XML_SetEntityDeclHandler(XML_Parser parser, XML_EntityDeclHandler handler); /* OBSOLETE -- OBSOLETE -- OBSOLETE This handler has been superceded by the EntityDeclHandler above. It is provided here for backward compatibility. This is called for a declaration of an unparsed (NDATA) entity. The base argument is whatever was set by XML_SetBase. The entityName, systemId and notationName arguments will never be NULL. The other arguments may be. */ typedef void (XMLCALL *XML_UnparsedEntityDeclHandler) ( void *userData, const XML_Char *entityName, const XML_Char *base, const XML_Char *systemId, const XML_Char *publicId, const XML_Char *notationName); /* This is called for a declaration of notation. The base argument is whatever was set by XML_SetBase. The notationName will never be NULL. The other arguments can be. */ typedef void (XMLCALL *XML_NotationDeclHandler) ( void *userData, const XML_Char *notationName, const XML_Char *base, const XML_Char *systemId, const XML_Char *publicId); /* When namespace processing is enabled, these are called once for each namespace declaration. The call to the start and end element handlers occur between the calls to the start and end namespace declaration handlers. For an xmlns attribute, prefix will be NULL. For an xmlns="" attribute, uri will be NULL. */ typedef void (XMLCALL *XML_StartNamespaceDeclHandler) ( void *userData, const XML_Char *prefix, const XML_Char *uri); typedef void (XMLCALL *XML_EndNamespaceDeclHandler) ( void *userData, const XML_Char *prefix); /* This is called if the document is not standalone, that is, it has an external subset or a reference to a parameter entity, but does not have standalone="yes". If this handler returns XML_STATUS_ERROR, then processing will not continue, and the parser will return a XML_ERROR_NOT_STANDALONE error. If parameter entity parsing is enabled, then in addition to the conditions above this handler will only be called if the referenced entity was actually read. */ typedef int (XMLCALL *XML_NotStandaloneHandler) (void *userData); /* This is called for a reference to an external parsed general entity. The referenced entity is not automatically parsed. The application can parse it immediately or later using XML_ExternalEntityParserCreate. The parser argument is the parser parsing the entity containing the reference; it can be passed as the parser argument to XML_ExternalEntityParserCreate. The systemId argument is the system identifier as specified in the entity declaration; it will not be NULL. The base argument is the system identifier that should be used as the base for resolving systemId if systemId was relative; this is set by XML_SetBase; it may be NULL. The publicId argument is the public identifier as specified in the entity declaration, or NULL if none was specified; the whitespace in the public identifier will have been normalized as required by the XML spec. The context argument specifies the parsing context in the format expected by the context argument to XML_ExternalEntityParserCreate; context is valid only until the handler returns, so if the referenced entity is to be parsed later, it must be copied. context is NULL only when the entity is a parameter entity. The handler should return XML_STATUS_ERROR if processing should not continue because of a fatal error in the handling of the external entity. In this case the calling parser will return an XML_ERROR_EXTERNAL_ENTITY_HANDLING error. Note that unlike other handlers the first argument is the parser, not userData. */ typedef int (XMLCALL *XML_ExternalEntityRefHandler) ( XML_Parser parser, const XML_Char *context, const XML_Char *base, const XML_Char *systemId, const XML_Char *publicId); /* This is called in two situations: 1) An entity reference is encountered for which no declaration has been read *and* this is not an error. 2) An internal entity reference is read, but not expanded, because XML_SetDefaultHandler has been called. Note: skipped parameter entities in declarations and skipped general entities in attribute values cannot be reported, because the event would be out of sync with the reporting of the declarations or attribute values */ typedef void (XMLCALL *XML_SkippedEntityHandler) ( void *userData, const XML_Char *entityName, int is_parameter_entity); /* This structure is filled in by the XML_UnknownEncodingHandler to provide information to the parser about encodings that are unknown to the parser. The map[b] member gives information about byte sequences whose first byte is b. If map[b] is c where c is >= 0, then b by itself encodes the Unicode scalar value c. If map[b] is -1, then the byte sequence is malformed. If map[b] is -n, where n >= 2, then b is the first byte of an n-byte sequence that encodes a single Unicode scalar value. The data member will be passed as the first argument to the convert function. The convert function is used to convert multibyte sequences; s will point to a n-byte sequence where map[(unsigned char)*s] == -n. The convert function must return the Unicode scalar value represented by this byte sequence or -1 if the byte sequence is malformed. The convert function may be NULL if the encoding is a single-byte encoding, that is if map[b] >= -1 for all bytes b. When the parser is finished with the encoding, then if release is not NULL, it will call release passing it the data member; once release has been called, the convert function will not be called again. Expat places certain restrictions on the encodings that are supported using this mechanism. 1. Every ASCII character that can appear in a well-formed XML document, other than the characters $@\^`{}~ must be represented by a single byte, and that byte must be the same byte that represents that character in ASCII. 2. No character may require more than 4 bytes to encode. 3. All characters encoded must have Unicode scalar values <= 0xFFFF, (i.e., characters that would be encoded by surrogates in UTF-16 are not allowed). Note that this restriction doesn't apply to the built-in support for UTF-8 and UTF-16. 4. No Unicode character may be encoded by more than one distinct sequence of bytes. */ typedef struct { int map[256]; void *data; int (XMLCALL *convert)(void *data, const char *s); void (XMLCALL *release)(void *data); } XML_Encoding; /* This is called for an encoding that is unknown to the parser. The encodingHandlerData argument is that which was passed as the second argument to XML_SetUnknownEncodingHandler. The name argument gives the name of the encoding as specified in the encoding declaration. If the callback can provide information about the encoding, it must fill in the XML_Encoding structure, and return XML_STATUS_OK. Otherwise it must return XML_STATUS_ERROR. If info does not describe a suitable encoding, then the parser will return an XML_UNKNOWN_ENCODING error. */ typedef int (XMLCALL *XML_UnknownEncodingHandler) ( void *encodingHandlerData, const XML_Char *name, XML_Encoding *info); XMLPARSEAPI(void) XML_SetElementHandler(XML_Parser parser, XML_StartElementHandler start, XML_EndElementHandler end); XMLPARSEAPI(void) XML_SetStartElementHandler(XML_Parser parser, XML_StartElementHandler handler); XMLPARSEAPI(void) XML_SetEndElementHandler(XML_Parser parser, XML_EndElementHandler handler); XMLPARSEAPI(void) XML_SetCharacterDataHandler(XML_Parser parser, XML_CharacterDataHandler handler); XMLPARSEAPI(void) XML_SetProcessingInstructionHandler(XML_Parser parser, XML_ProcessingInstructionHandler handler); XMLPARSEAPI(void) XML_SetCommentHandler(XML_Parser parser, XML_CommentHandler handler); XMLPARSEAPI(void) XML_SetCdataSectionHandler(XML_Parser parser, XML_StartCdataSectionHandler start, XML_EndCdataSectionHandler end); XMLPARSEAPI(void) XML_SetStartCdataSectionHandler(XML_Parser parser, XML_StartCdataSectionHandler start); XMLPARSEAPI(void) XML_SetEndCdataSectionHandler(XML_Parser parser, XML_EndCdataSectionHandler end); /* This sets the default handler and also inhibits expansion of internal entities. These entity references will be passed to the default handler, or to the skipped entity handler, if one is set. */ XMLPARSEAPI(void) XML_SetDefaultHandler(XML_Parser parser, XML_DefaultHandler handler); /* This sets the default handler but does not inhibit expansion of internal entities. The entity reference will not be passed to the default handler. */ XMLPARSEAPI(void) XML_SetDefaultHandlerExpand(XML_Parser parser, XML_DefaultHandler handler); XMLPARSEAPI(void) XML_SetDoctypeDeclHandler(XML_Parser parser, XML_StartDoctypeDeclHandler start, XML_EndDoctypeDeclHandler end); XMLPARSEAPI(void) XML_SetStartDoctypeDeclHandler(XML_Parser parser, XML_StartDoctypeDeclHandler start); XMLPARSEAPI(void) XML_SetEndDoctypeDeclHandler(XML_Parser parser, XML_EndDoctypeDeclHandler end); XMLPARSEAPI(void) XML_SetUnparsedEntityDeclHandler(XML_Parser parser, XML_UnparsedEntityDeclHandler handler); XMLPARSEAPI(void) XML_SetNotationDeclHandler(XML_Parser parser, XML_NotationDeclHandler handler); XMLPARSEAPI(void) XML_SetNamespaceDeclHandler(XML_Parser parser, XML_StartNamespaceDeclHandler start, XML_EndNamespaceDeclHandler end); XMLPARSEAPI(void) XML_SetStartNamespaceDeclHandler(XML_Parser parser, XML_StartNamespaceDeclHandler start); XMLPARSEAPI(void) XML_SetEndNamespaceDeclHandler(XML_Parser parser, XML_EndNamespaceDeclHandler end); XMLPARSEAPI(void) XML_SetNotStandaloneHandler(XML_Parser parser, XML_NotStandaloneHandler handler); XMLPARSEAPI(void) XML_SetExternalEntityRefHandler(XML_Parser parser, XML_ExternalEntityRefHandler handler); /* If a non-NULL value for arg is specified here, then it will be passed as the first argument to the external entity ref handler instead of the parser object. */ XMLPARSEAPI(void) XML_SetExternalEntityRefHandlerArg(XML_Parser parser, void *arg); XMLPARSEAPI(void) XML_SetSkippedEntityHandler(XML_Parser parser, XML_SkippedEntityHandler handler); XMLPARSEAPI(void) XML_SetUnknownEncodingHandler(XML_Parser parser, XML_UnknownEncodingHandler handler, void *encodingHandlerData); /* This can be called within a handler for a start element, end element, processing instruction or character data. It causes the corresponding markup to be passed to the default handler. */ XMLPARSEAPI(void) XML_DefaultCurrent(XML_Parser parser); /* If do_nst is non-zero, and namespace processing is in effect, and a name has a prefix (i.e. an explicit namespace qualifier) then that name is returned as a triplet in a single string separated by the separator character specified when the parser was created: URI + sep + local_name + sep + prefix. If do_nst is zero, then namespace information is returned in the default manner (URI + sep + local_name) whether or not the name has a prefix. Note: Calling XML_SetReturnNSTriplet after XML_Parse or XML_ParseBuffer has no effect. */ XMLPARSEAPI(void) XML_SetReturnNSTriplet(XML_Parser parser, int do_nst); /* This value is passed as the userData argument to callbacks. */ XMLPARSEAPI(void) XML_SetUserData(XML_Parser parser, void *userData); /* Returns the last value set by XML_SetUserData or NULL. */ #define XML_GetUserData(parser) (*(void **)(parser)) /* This is equivalent to supplying an encoding argument to XML_ParserCreate. On success XML_SetEncoding returns non-zero, zero otherwise. Note: Calling XML_SetEncoding after XML_Parse or XML_ParseBuffer has no effect and returns XML_STATUS_ERROR. */ XMLPARSEAPI(enum XML_Status) XML_SetEncoding(XML_Parser parser, const XML_Char *encoding); /* If this function is called, then the parser will be passed as the first argument to callbacks instead of userData. The userData will still be accessible using XML_GetUserData. */ XMLPARSEAPI(void) XML_UseParserAsHandlerArg(XML_Parser parser); /* If useDTD == XML_TRUE is passed to this function, then the parser will assume that there is an external subset, even if none is specified in the document. In such a case the parser will call the externalEntityRefHandler with a value of NULL for the systemId argument (the publicId and context arguments will be NULL as well). Note: For the purpose of checking WFC: Entity Declared, passing useDTD == XML_TRUE will make the parser behave as if the document had a DTD with an external subset. Note: If this function is called, then this must be done before the first call to XML_Parse or XML_ParseBuffer, since it will have no effect after that. Returns XML_ERROR_CANT_CHANGE_FEATURE_ONCE_PARSING. Note: If the document does not have a DOCTYPE declaration at all, then startDoctypeDeclHandler and endDoctypeDeclHandler will not be called, despite an external subset being parsed. Note: If XML_DTD is not defined when Expat is compiled, returns XML_ERROR_FEATURE_REQUIRES_XML_DTD. */ XMLPARSEAPI(enum XML_Error) XML_UseForeignDTD(XML_Parser parser, XML_Bool useDTD); /* Sets the base to be used for resolving relative URIs in system identifiers in declarations. Resolving relative identifiers is left to the application: this value will be passed through as the base argument to the XML_ExternalEntityRefHandler, XML_NotationDeclHandler and XML_UnparsedEntityDeclHandler. The base argument will be copied. Returns XML_STATUS_ERROR if out of memory, XML_STATUS_OK otherwise. */ XMLPARSEAPI(enum XML_Status) XML_SetBase(XML_Parser parser, const XML_Char *base); XMLPARSEAPI(const XML_Char *) XML_GetBase(XML_Parser parser); /* Returns the number of the attribute/value pairs passed in last call to the XML_StartElementHandler that were specified in the start-tag rather than defaulted. Each attribute/value pair counts as 2; thus this correspondds to an index into the atts array passed to the XML_StartElementHandler. */ XMLPARSEAPI(int) XML_GetSpecifiedAttributeCount(XML_Parser parser); /* Returns the index of the ID attribute passed in the last call to XML_StartElementHandler, or -1 if there is no ID attribute. Each attribute/value pair counts as 2; thus this correspondds to an index into the atts array passed to the XML_StartElementHandler. */ XMLPARSEAPI(int) XML_GetIdAttributeIndex(XML_Parser parser); /* Parses some input. Returns XML_STATUS_ERROR if a fatal error is detected. The last call to XML_Parse must have isFinal true; len may be zero for this call (or any other). Though the return values for these functions has always been described as a Boolean value, the implementation, at least for the 1.95.x series, has always returned exactly one of the XML_Status values. */ XMLPARSEAPI(enum XML_Status) XML_Parse(XML_Parser parser, const char *s, int len, int isFinal); XMLPARSEAPI(void *) XML_GetBuffer(XML_Parser parser, int len); XMLPARSEAPI(enum XML_Status) XML_ParseBuffer(XML_Parser parser, int len, int isFinal); /* Stops parsing, causing XML_Parse() or XML_ParseBuffer() to return. Must be called from within a call-back handler, except when aborting (resumable = 0) an already suspended parser. Some call-backs may still follow because they would otherwise get lost. Examples: - endElementHandler() for empty elements when stopped in startElementHandler(), - endNameSpaceDeclHandler() when stopped in endElementHandler(), and possibly others. Can be called from most handlers, including DTD related call-backs, except when parsing an external parameter entity and resumable != 0. Returns XML_STATUS_OK when successful, XML_STATUS_ERROR otherwise. Possible error codes: - XML_ERROR_SUSPENDED: when suspending an already suspended parser. - XML_ERROR_FINISHED: when the parser has already finished. - XML_ERROR_SUSPEND_PE: when suspending while parsing an external PE. When resumable != 0 (true) then parsing is suspended, that is, XML_Parse() and XML_ParseBuffer() return XML_STATUS_SUSPENDED. Otherwise, parsing is aborted, that is, XML_Parse() and XML_ParseBuffer() return XML_STATUS_ERROR with error code XML_ERROR_ABORTED. *Note*: This will be applied to the current parser instance only, that is, if there is a parent parser then it will continue parsing when the externalEntityRefHandler() returns. It is up to the implementation of the externalEntityRefHandler() to call XML_StopParser() on the parent parser (recursively), if one wants to stop parsing altogether. When suspended, parsing can be resumed by calling XML_ResumeParser(). */ XMLPARSEAPI(enum XML_Status) XML_StopParser(XML_Parser parser, XML_Bool resumable); /* Resumes parsing after it has been suspended with XML_StopParser(). Must not be called from within a handler call-back. Returns same status codes as XML_Parse() or XML_ParseBuffer(). Additional error code XML_ERROR_NOT_SUSPENDED possible. *Note*: This must be called on the most deeply nested child parser instance first, and on its parent parser only after the child parser has finished, to be applied recursively until the document entity's parser is restarted. That is, the parent parser will not resume by itself and it is up to the application to call XML_ResumeParser() on it at the appropriate moment. */ XMLPARSEAPI(enum XML_Status) XML_ResumeParser(XML_Parser parser); enum XML_Parsing { XML_INITIALIZED, XML_PARSING, XML_FINISHED, XML_SUSPENDED }; typedef struct { enum XML_Parsing parsing; XML_Bool finalBuffer; } XML_ParsingStatus; /* Returns status of parser with respect to being initialized, parsing, finished, or suspended and processing the final buffer. XXX XML_Parse() and XML_ParseBuffer() should return XML_ParsingStatus, XXX with XML_FINISHED_OK or XML_FINISHED_ERROR replacing XML_FINISHED */ XMLPARSEAPI(void) XML_GetParsingStatus(XML_Parser parser, XML_ParsingStatus *status); /* Creates an XML_Parser object that can parse an external general entity; context is a '\0'-terminated string specifying the parse context; encoding is a '\0'-terminated string giving the name of the externally specified encoding, or NULL if there is no externally specified encoding. The context string consists of a sequence of tokens separated by formfeeds (\f); a token consisting of a name specifies that the general entity of the name is open; a token of the form prefix=uri specifies the namespace for a particular prefix; a token of the form =uri specifies the default namespace. This can be called at any point after the first call to an ExternalEntityRefHandler so longer as the parser has not yet been freed. The new parser is completely independent and may safely be used in a separate thread. The handlers and userData are initialized from the parser argument. Returns NULL if out of memory. Otherwise returns a new XML_Parser object. */ XMLPARSEAPI(XML_Parser) XML_ExternalEntityParserCreate(XML_Parser parser, const XML_Char *context, const XML_Char *encoding); enum XML_ParamEntityParsing { XML_PARAM_ENTITY_PARSING_NEVER, XML_PARAM_ENTITY_PARSING_UNLESS_STANDALONE, XML_PARAM_ENTITY_PARSING_ALWAYS }; /* Controls parsing of parameter entities (including the external DTD subset). If parsing of parameter entities is enabled, then references to external parameter entities (including the external DTD subset) will be passed to the handler set with XML_SetExternalEntityRefHandler. The context passed will be 0. Unlike external general entities, external parameter entities can only be parsed synchronously. If the external parameter entity is to be parsed, it must be parsed during the call to the external entity ref handler: the complete sequence of XML_ExternalEntityParserCreate, XML_Parse/XML_ParseBuffer and XML_ParserFree calls must be made during this call. After XML_ExternalEntityParserCreate has been called to create the parser for the external parameter entity (context must be 0 for this call), it is illegal to make any calls on the old parser until XML_ParserFree has been called on the newly created parser. If the library has been compiled without support for parameter entity parsing (ie without XML_DTD being defined), then XML_SetParamEntityParsing will return 0 if parsing of parameter entities is requested; otherwise it will return non-zero. Note: If XML_SetParamEntityParsing is called after XML_Parse or XML_ParseBuffer, then it has no effect and will always return 0. */ XMLPARSEAPI(int) XML_SetParamEntityParsing(XML_Parser parser, enum XML_ParamEntityParsing parsing); /* If XML_Parse or XML_ParseBuffer have returned XML_STATUS_ERROR, then XML_GetErrorCode returns information about the error. */ XMLPARSEAPI(enum XML_Error) XML_GetErrorCode(XML_Parser parser); /* These functions return information about the current parse location. They may be called from any callback called to report some parse event; in this case the location is the location of the first of the sequence of characters that generated the event. When called from callbacks generated by declarations in the document prologue, the location identified isn't as neatly defined, but will be within the relevant markup. When called outside of the callback functions, the position indicated will be just past the last parse event (regardless of whether there was an associated callback). They may also be called after returning from a call to XML_Parse or XML_ParseBuffer. If the return value is XML_STATUS_ERROR then the location is the location of the character at which the error was detected; otherwise the location is the location of the last parse event, as described above. */ XMLPARSEAPI(int) XML_GetCurrentLineNumber(XML_Parser parser); XMLPARSEAPI(int) XML_GetCurrentColumnNumber(XML_Parser parser); XMLPARSEAPI(long) XML_GetCurrentByteIndex(XML_Parser parser); /* Return the number of bytes in the current event. Returns 0 if the event is in an internal entity. */ XMLPARSEAPI(int) XML_GetCurrentByteCount(XML_Parser parser); /* If XML_CONTEXT_BYTES is defined, returns the input buffer, sets the integer pointed to by offset to the offset within this buffer of the current parse position, and sets the integer pointed to by size to the size of this buffer (the number of input bytes). Otherwise returns a NULL pointer. Also returns a NULL pointer if a parse isn't active. NOTE: The character pointer returned should not be used outside the handler that makes the call. */ XMLPARSEAPI(const char *) XML_GetInputContext(XML_Parser parser, int *offset, int *size); /* For backwards compatibility with previous versions. */ #define XML_GetErrorLineNumber XML_GetCurrentLineNumber #define XML_GetErrorColumnNumber XML_GetCurrentColumnNumber #define XML_GetErrorByteIndex XML_GetCurrentByteIndex /* Frees the content model passed to the element declaration handler */ XMLPARSEAPI(void) XML_FreeContentModel(XML_Parser parser, XML_Content *model); /* Exposing the memory handling functions used in Expat */ XMLPARSEAPI(void *) XML_MemMalloc(XML_Parser parser, size_t size); XMLPARSEAPI(void *) XML_MemRealloc(XML_Parser parser, void *ptr, size_t size); XMLPARSEAPI(void) XML_MemFree(XML_Parser parser, void *ptr); /* Frees memory used by the parser. */ XMLPARSEAPI(void) XML_ParserFree(XML_Parser parser); /* Returns a string describing the error. */ XMLPARSEAPI(const XML_LChar *) XML_ErrorString(enum XML_Error code); /* Return a string containing the version number of this expat */ XMLPARSEAPI(const XML_LChar *) XML_ExpatVersion(void); typedef struct { int major; int minor; int micro; } XML_Expat_Version; /* Return an XML_Expat_Version structure containing numeric version number information for this version of expat. */ XMLPARSEAPI(XML_Expat_Version) XML_ExpatVersionInfo(void); /* Added in Expat 1.95.5. */ enum XML_FeatureEnum { XML_FEATURE_END = 0, XML_FEATURE_UNICODE, XML_FEATURE_UNICODE_WCHAR_T, XML_FEATURE_DTD, XML_FEATURE_CONTEXT_BYTES, XML_FEATURE_MIN_SIZE, XML_FEATURE_SIZEOF_XML_CHAR, XML_FEATURE_SIZEOF_XML_LCHAR /* Additional features must be added to the end of this enum. */ }; typedef struct { enum XML_FeatureEnum feature; const XML_LChar *name; long int value; } XML_Feature; XMLPARSEAPI(const XML_Feature *) XML_GetFeatureList(void); /* Expat follows the GNU/Linux convention of odd number minor version for beta/development releases and even number minor version for stable releases. Micro is bumped with each release, and set to 0 with each change to major or minor version. */ #define XML_MAJOR_VERSION 1 #define XML_MINOR_VERSION 95 #define XML_MICRO_VERSION 8 #ifdef __cplusplus } #endif #endif /* not XmlParse_INCLUDED */ tla-1.3.5+dfsg/src/expat/lib/xmltok_impl.h0000644000175000017500000000122510457621771017135 0ustar useruser/* Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd See the file COPYING for copying permission. */ enum { BT_NONXML, BT_MALFORM, BT_LT, BT_AMP, BT_RSQB, BT_LEAD2, BT_LEAD3, BT_LEAD4, BT_TRAIL, BT_CR, BT_LF, BT_GT, BT_QUOT, BT_APOS, BT_EQUALS, BT_QUEST, BT_EXCL, BT_SOL, BT_SEMI, BT_NUM, BT_LSQB, BT_S, BT_NMSTRT, BT_COLON, BT_HEX, BT_DIGIT, BT_NAME, BT_MINUS, BT_OTHER, /* known not to be a name or name start character */ BT_NONASCII, /* might be a name or name start character */ BT_PERCNT, BT_LPAR, BT_RPAR, BT_AST, BT_PLUS, BT_COMMA, BT_VERBAR }; #include tla-1.3.5+dfsg/src/expat/lib/winconfig.h0000644000175000017500000000134310457621771016562 0ustar useruser/*================================================================ ** Copyright 2000, Clark Cooper ** All rights reserved. ** ** This is free software. You are permitted to copy, distribute, or modify ** it under the terms of the MIT/X license (contained in the COPYING file ** with this distribution.) */ #ifndef WINCONFIG_H #define WINCONFIG_H #define WIN32_LEAN_AND_MEAN #include #undef WIN32_LEAN_AND_MEAN #include #include #define XML_NS 1 #define XML_DTD 1 #define XML_CONTEXT_BYTES 1024 /* we will assume all Windows platforms are little endian */ #define BYTEORDER 1234 /* Windows has memmove() available. */ #define HAVE_MEMMOVE #endif /* ndef WINCONFIG_H */ tla-1.3.5+dfsg/src/expat/lib/Makefile.MPW0000644000175000017500000001076710457621771016542 0ustar useruser# File: Makefile.MPW # Targets: All, Dynamic, Static (and Clean, Clean-All) # Created: Tuesday, July 02, 2002 # # MPW Makefile for building expat under the "classic" (i.e. pre-X) Mac OS # Copyright © 2002 Daryle Walker # Portions Copyright © 2002 Thomas Wegner # See the COPYING file for distribution information # # Description: # This Makefile lets you build static, dynamic (i.e. shared) and stub # versions of the expat library as well as the elements.c and outline.c # examples (built as tools for MPW). This is for PPC only; it should be # no problem to build a 68K version of the expat library, though. # # Usage: # Buildprogram All # or Buildprogram Dynamic # or Buildprogram Static # # Note: You first have to rename this file to "Makefile", or the Buildprogram # commando will not recognize it. # MAKEFILE = Makefile ¥MondoBuild¥ = {MAKEFILE} # Make blank to avoid rebuilds when makefile is modified ObjDir = : SrcDir = : HdrDir = : ToolDir = ::examples: Includes = -i {HdrDir} Sym-PPC = -sym off Defines = -d MACOS_CLASSIC PPCCOptions = {Includes} {Sym-PPC} -w 35 {Defines} FragName = libexpat ### Source Files ### SrcFiles = ¶ "{SrcDir}xmlparse.c" ¶ "{SrcDir}xmlrole.c" ¶ "{SrcDir}xmltok.c" ToolSrcFiles = ¶ "{ToolDir}elements.c" ¶ "{ToolDir}outline.c" ### Object Files ### ObjFiles-PPC = ¶ "{ObjDir}xmlparse.c.o" ¶ "{ObjDir}xmlrole.c.o" ¶ "{ObjDir}xmltok.c.o" ElementToolObjFile = "{ObjDir}elements.c.o" OutlineToolObjFile = "{ObjDir}outline.c.o" ### Libraries ### StLibFiles-PPC = ¶ "{PPCLibraries}StdCRuntime.o" ¶ "{PPCLibraries}PPCCRuntime.o" ¶ "{PPCLibraries}PPCToolLibs.o" ShLibFiles-PPC = ¶ "{SharedLibraries}InterfaceLib" ¶ "{SharedLibraries}StdCLib" ¶ "{SharedLibraries}MathLib" LibFiles-PPC = ¶ {StLibFiles-PPC} ¶ {ShLibFiles-PPC} ### Special Files ### ExportFile = "{ObjDir}{FragName}.exp" StLibFile = "{ObjDir}{FragName}.MrC.o" ShLibFile = "{ObjDir}{FragName}" StubFile = "{ObjDir}{FragName}.stub" ElementsTool = "{ToolDir}elements" OutlineTool = "{ToolDir}outline" ### Default Rules ### .c.o Ä .c {¥MondoBuild¥} {PPCC} {depDir}{default}.c -o {targDir}{default}.c.o {PPCCOptions} ### Build Rules ### All Ä Dynamic {ElementsTool} {OutlineTool} Static Ä {StLibFile} Dynamic Ä Static {ShLibFile} {StubFile} {StLibFile} ÄÄ {ObjFiles-PPC} {StLibFiles-PPC} {¥MondoBuild¥} PPCLink ¶ -o {Targ} ¶ {ObjFiles-PPC} ¶ {StLibFiles-PPC} ¶ {Sym-PPC} ¶ -mf -d ¶ -t 'XCOF' ¶ -c 'MPS ' ¶ -xm l {ShLibFile} ÄÄ {StLibFile} {ShLibFiles-PPC} {ExportFile} {¥MondoBuild¥} PPCLink ¶ -o {Targ} ¶ {StLibFile} ¶ {ShLibFiles-PPC} ¶ {Sym-PPC} ¶ -@export {ExportFile} ¶ -fragname {FragName} ¶ -mf -d ¶ -t 'shlb' ¶ -c '????' ¶ -xm s {StubFile} ÄÄ {ShLibFile} {¥MondoBuild¥} shlb2stub -o {Targ} {ShLibFile} {ElementsTool} ÄÄ {ElementToolObjFile} {StubFile} {LibFiles-PPC} {¥MondoBuild¥} PPCLink ¶ -o {Targ} ¶ {ElementToolObjFile} ¶ {StLibFile} ¶ {LibFiles-PPC} ¶ {Sym-PPC} ¶ -mf -d ¶ -t 'MPST' ¶ -c 'MPS ' {OutlineTool} ÄÄ {OutlineToolObjFile} {StubFile} {LibFiles-PPC} {¥MondoBuild¥} PPCLink ¶ -o {Targ} ¶ {OutlineToolObjFile} ¶ {StLibFile} ¶ {LibFiles-PPC} ¶ {Sym-PPC} ¶ -mf -d ¶ -t 'MPST' ¶ -c 'MPS ' ### Special Rules ### {ExportFile} ÄÄ "{HdrDir}expat.h" {¥MondoBuild¥} StreamEdit -d ¶ -e "/¥('XMLPARSEAPI('Å') ')Ç0,1È'XML_'([A-Za-z0-9_]+)¨1'('/ Print 'XML_' ¨1" ¶ "{HdrDir}expat.h" > {Targ} ### Required Dependencies ### "{ObjDir}xmlparse.c.o" Ä "{SrcDir}xmlparse.c" "{ObjDir}xmlrole.c.o" Ä "{SrcDir}xmlrole.c" "{ObjDir}xmltok.c.o" Ä "{SrcDir}xmltok.c" "{ObjDir}elements.c.o" Ä "{ToolDir}elements.c" "{ObjDir}outline.c.o" Ä "{ToolDir}outline.c" ### Optional Dependencies ### ### Build this target to clean out generated intermediate files. ### Clean Ä Delete {ObjFiles-PPC} {ExportFile} {ElementToolObjFile} {OutlineToolObjFile} ### Build this target to clean out all generated files. ### Clean-All Ä Clean Delete {StLibFile} {ShLibFile} {StubFile} {ElementsTool} {OutlineTool} ### Build this target to generate "include file" dependencies. ### Dependencies Ä $OutOfDate MakeDepend ¶ -append {MAKEFILE} ¶ -ignore "{CIncludes}" ¶ -objdir "{ObjDir}" ¶ -objext .o ¶ {Defines} ¶ {Includes} ¶ {SrcFiles} tla-1.3.5+dfsg/src/expat/lib/xmlrole.c0000644000175000017500000007707710457621771016275 0ustar useruser/* Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd See the file COPYING for copying permission. */ #include #ifdef COMPILED_FROM_DSP #include "winconfig.h" #elif defined(MACOS_CLASSIC) #include "macconfig.h" #else #ifdef HAVE_EXPAT_CONFIG_H #include #endif #endif /* ndef COMPILED_FROM_DSP */ #include "expat_external.h" #include "internal.h" #include "xmlrole.h" #include "ascii.h" /* Doesn't check: that ,| are not mixed in a model group content of literals */ static const char KW_ANY[] = { ASCII_A, ASCII_N, ASCII_Y, '\0' }; static const char KW_ATTLIST[] = { ASCII_A, ASCII_T, ASCII_T, ASCII_L, ASCII_I, ASCII_S, ASCII_T, '\0' }; static const char KW_CDATA[] = { ASCII_C, ASCII_D, ASCII_A, ASCII_T, ASCII_A, '\0' }; static const char KW_DOCTYPE[] = { ASCII_D, ASCII_O, ASCII_C, ASCII_T, ASCII_Y, ASCII_P, ASCII_E, '\0' }; static const char KW_ELEMENT[] = { ASCII_E, ASCII_L, ASCII_E, ASCII_M, ASCII_E, ASCII_N, ASCII_T, '\0' }; static const char KW_EMPTY[] = { ASCII_E, ASCII_M, ASCII_P, ASCII_T, ASCII_Y, '\0' }; static const char KW_ENTITIES[] = { ASCII_E, ASCII_N, ASCII_T, ASCII_I, ASCII_T, ASCII_I, ASCII_E, ASCII_S, '\0' }; static const char KW_ENTITY[] = { ASCII_E, ASCII_N, ASCII_T, ASCII_I, ASCII_T, ASCII_Y, '\0' }; static const char KW_FIXED[] = { ASCII_F, ASCII_I, ASCII_X, ASCII_E, ASCII_D, '\0' }; static const char KW_ID[] = { ASCII_I, ASCII_D, '\0' }; static const char KW_IDREF[] = { ASCII_I, ASCII_D, ASCII_R, ASCII_E, ASCII_F, '\0' }; static const char KW_IDREFS[] = { ASCII_I, ASCII_D, ASCII_R, ASCII_E, ASCII_F, ASCII_S, '\0' }; static const char KW_IGNORE[] = { ASCII_I, ASCII_G, ASCII_N, ASCII_O, ASCII_R, ASCII_E, '\0' }; static const char KW_IMPLIED[] = { ASCII_I, ASCII_M, ASCII_P, ASCII_L, ASCII_I, ASCII_E, ASCII_D, '\0' }; static const char KW_INCLUDE[] = { ASCII_I, ASCII_N, ASCII_C, ASCII_L, ASCII_U, ASCII_D, ASCII_E, '\0' }; static const char KW_NDATA[] = { ASCII_N, ASCII_D, ASCII_A, ASCII_T, ASCII_A, '\0' }; static const char KW_NMTOKEN[] = { ASCII_N, ASCII_M, ASCII_T, ASCII_O, ASCII_K, ASCII_E, ASCII_N, '\0' }; static const char KW_NMTOKENS[] = { ASCII_N, ASCII_M, ASCII_T, ASCII_O, ASCII_K, ASCII_E, ASCII_N, ASCII_S, '\0' }; static const char KW_NOTATION[] = { ASCII_N, ASCII_O, ASCII_T, ASCII_A, ASCII_T, ASCII_I, ASCII_O, ASCII_N, '\0' }; static const char KW_PCDATA[] = { ASCII_P, ASCII_C, ASCII_D, ASCII_A, ASCII_T, ASCII_A, '\0' }; static const char KW_PUBLIC[] = { ASCII_P, ASCII_U, ASCII_B, ASCII_L, ASCII_I, ASCII_C, '\0' }; static const char KW_REQUIRED[] = { ASCII_R, ASCII_E, ASCII_Q, ASCII_U, ASCII_I, ASCII_R, ASCII_E, ASCII_D, '\0' }; static const char KW_SYSTEM[] = { ASCII_S, ASCII_Y, ASCII_S, ASCII_T, ASCII_E, ASCII_M, '\0' }; #ifndef MIN_BYTES_PER_CHAR #define MIN_BYTES_PER_CHAR(enc) ((enc)->minBytesPerChar) #endif #ifdef XML_DTD #define setTopLevel(state) \ ((state)->handler = ((state)->documentEntity \ ? internalSubset \ : externalSubset1)) #else /* not XML_DTD */ #define setTopLevel(state) ((state)->handler = internalSubset) #endif /* not XML_DTD */ typedef int PTRCALL PROLOG_HANDLER(PROLOG_STATE *state, int tok, const char *ptr, const char *end, const ENCODING *enc); static PROLOG_HANDLER prolog0, prolog1, prolog2, doctype0, doctype1, doctype2, doctype3, doctype4, doctype5, internalSubset, entity0, entity1, entity2, entity3, entity4, entity5, entity6, entity7, entity8, entity9, entity10, notation0, notation1, notation2, notation3, notation4, attlist0, attlist1, attlist2, attlist3, attlist4, attlist5, attlist6, attlist7, attlist8, attlist9, element0, element1, element2, element3, element4, element5, element6, element7, #ifdef XML_DTD externalSubset0, externalSubset1, condSect0, condSect1, condSect2, #endif /* XML_DTD */ declClose, error; static int FASTCALL common(PROLOG_STATE *state, int tok); static int PTRCALL prolog0(PROLOG_STATE *state, int tok, const char *ptr, const char *end, const ENCODING *enc) { switch (tok) { case XML_TOK_PROLOG_S: state->handler = prolog1; return XML_ROLE_NONE; case XML_TOK_XML_DECL: state->handler = prolog1; return XML_ROLE_XML_DECL; case XML_TOK_PI: state->handler = prolog1; return XML_ROLE_PI; case XML_TOK_COMMENT: state->handler = prolog1; return XML_ROLE_COMMENT; case XML_TOK_BOM: return XML_ROLE_NONE; case XML_TOK_DECL_OPEN: if (!XmlNameMatchesAscii(enc, ptr + 2 * MIN_BYTES_PER_CHAR(enc), end, KW_DOCTYPE)) break; state->handler = doctype0; return XML_ROLE_DOCTYPE_NONE; case XML_TOK_INSTANCE_START: state->handler = error; return XML_ROLE_INSTANCE_START; } return common(state, tok); } static int PTRCALL prolog1(PROLOG_STATE *state, int tok, const char *ptr, const char *end, const ENCODING *enc) { switch (tok) { case XML_TOK_PROLOG_S: return XML_ROLE_NONE; case XML_TOK_PI: return XML_ROLE_PI; case XML_TOK_COMMENT: return XML_ROLE_COMMENT; case XML_TOK_BOM: return XML_ROLE_NONE; case XML_TOK_DECL_OPEN: if (!XmlNameMatchesAscii(enc, ptr + 2 * MIN_BYTES_PER_CHAR(enc), end, KW_DOCTYPE)) break; state->handler = doctype0; return XML_ROLE_DOCTYPE_NONE; case XML_TOK_INSTANCE_START: state->handler = error; return XML_ROLE_INSTANCE_START; } return common(state, tok); } static int PTRCALL prolog2(PROLOG_STATE *state, int tok, const char *ptr, const char *end, const ENCODING *enc) { switch (tok) { case XML_TOK_PROLOG_S: return XML_ROLE_NONE; case XML_TOK_PI: return XML_ROLE_PI; case XML_TOK_COMMENT: return XML_ROLE_COMMENT; case XML_TOK_INSTANCE_START: state->handler = error; return XML_ROLE_INSTANCE_START; } return common(state, tok); } static int PTRCALL doctype0(PROLOG_STATE *state, int tok, const char *ptr, const char *end, const ENCODING *enc) { switch (tok) { case XML_TOK_PROLOG_S: return XML_ROLE_DOCTYPE_NONE; case XML_TOK_NAME: case XML_TOK_PREFIXED_NAME: state->handler = doctype1; return XML_ROLE_DOCTYPE_NAME; } return common(state, tok); } static int PTRCALL doctype1(PROLOG_STATE *state, int tok, const char *ptr, const char *end, const ENCODING *enc) { switch (tok) { case XML_TOK_PROLOG_S: return XML_ROLE_DOCTYPE_NONE; case XML_TOK_OPEN_BRACKET: state->handler = internalSubset; return XML_ROLE_DOCTYPE_INTERNAL_SUBSET; case XML_TOK_DECL_CLOSE: state->handler = prolog2; return XML_ROLE_DOCTYPE_CLOSE; case XML_TOK_NAME: if (XmlNameMatchesAscii(enc, ptr, end, KW_SYSTEM)) { state->handler = doctype3; return XML_ROLE_DOCTYPE_NONE; } if (XmlNameMatchesAscii(enc, ptr, end, KW_PUBLIC)) { state->handler = doctype2; return XML_ROLE_DOCTYPE_NONE; } break; } return common(state, tok); } static int PTRCALL doctype2(PROLOG_STATE *state, int tok, const char *ptr, const char *end, const ENCODING *enc) { switch (tok) { case XML_TOK_PROLOG_S: return XML_ROLE_DOCTYPE_NONE; case XML_TOK_LITERAL: state->handler = doctype3; return XML_ROLE_DOCTYPE_PUBLIC_ID; } return common(state, tok); } static int PTRCALL doctype3(PROLOG_STATE *state, int tok, const char *ptr, const char *end, const ENCODING *enc) { switch (tok) { case XML_TOK_PROLOG_S: return XML_ROLE_DOCTYPE_NONE; case XML_TOK_LITERAL: state->handler = doctype4; return XML_ROLE_DOCTYPE_SYSTEM_ID; } return common(state, tok); } static int PTRCALL doctype4(PROLOG_STATE *state, int tok, const char *ptr, const char *end, const ENCODING *enc) { switch (tok) { case XML_TOK_PROLOG_S: return XML_ROLE_DOCTYPE_NONE; case XML_TOK_OPEN_BRACKET: state->handler = internalSubset; return XML_ROLE_DOCTYPE_INTERNAL_SUBSET; case XML_TOK_DECL_CLOSE: state->handler = prolog2; return XML_ROLE_DOCTYPE_CLOSE; } return common(state, tok); } static int PTRCALL doctype5(PROLOG_STATE *state, int tok, const char *ptr, const char *end, const ENCODING *enc) { switch (tok) { case XML_TOK_PROLOG_S: return XML_ROLE_DOCTYPE_NONE; case XML_TOK_DECL_CLOSE: state->handler = prolog2; return XML_ROLE_DOCTYPE_CLOSE; } return common(state, tok); } static int PTRCALL internalSubset(PROLOG_STATE *state, int tok, const char *ptr, const char *end, const ENCODING *enc) { switch (tok) { case XML_TOK_PROLOG_S: return XML_ROLE_NONE; case XML_TOK_DECL_OPEN: if (XmlNameMatchesAscii(enc, ptr + 2 * MIN_BYTES_PER_CHAR(enc), end, KW_ENTITY)) { state->handler = entity0; return XML_ROLE_ENTITY_NONE; } if (XmlNameMatchesAscii(enc, ptr + 2 * MIN_BYTES_PER_CHAR(enc), end, KW_ATTLIST)) { state->handler = attlist0; return XML_ROLE_ATTLIST_NONE; } if (XmlNameMatchesAscii(enc, ptr + 2 * MIN_BYTES_PER_CHAR(enc), end, KW_ELEMENT)) { state->handler = element0; return XML_ROLE_ELEMENT_NONE; } if (XmlNameMatchesAscii(enc, ptr + 2 * MIN_BYTES_PER_CHAR(enc), end, KW_NOTATION)) { state->handler = notation0; return XML_ROLE_NOTATION_NONE; } break; case XML_TOK_PI: return XML_ROLE_PI; case XML_TOK_COMMENT: return XML_ROLE_COMMENT; case XML_TOK_PARAM_ENTITY_REF: return XML_ROLE_PARAM_ENTITY_REF; case XML_TOK_CLOSE_BRACKET: state->handler = doctype5; return XML_ROLE_DOCTYPE_NONE; case XML_TOK_NONE: return XML_ROLE_NONE; } return common(state, tok); } #ifdef XML_DTD static int PTRCALL externalSubset0(PROLOG_STATE *state, int tok, const char *ptr, const char *end, const ENCODING *enc) { state->handler = externalSubset1; if (tok == XML_TOK_XML_DECL) return XML_ROLE_TEXT_DECL; return externalSubset1(state, tok, ptr, end, enc); } static int PTRCALL externalSubset1(PROLOG_STATE *state, int tok, const char *ptr, const char *end, const ENCODING *enc) { switch (tok) { case XML_TOK_COND_SECT_OPEN: state->handler = condSect0; return XML_ROLE_NONE; case XML_TOK_COND_SECT_CLOSE: if (state->includeLevel == 0) break; state->includeLevel -= 1; return XML_ROLE_NONE; case XML_TOK_PROLOG_S: return XML_ROLE_NONE; case XML_TOK_CLOSE_BRACKET: break; case XML_TOK_NONE: if (state->includeLevel) break; return XML_ROLE_NONE; default: return internalSubset(state, tok, ptr, end, enc); } return common(state, tok); } #endif /* XML_DTD */ static int PTRCALL entity0(PROLOG_STATE *state, int tok, const char *ptr, const char *end, const ENCODING *enc) { switch (tok) { case XML_TOK_PROLOG_S: return XML_ROLE_ENTITY_NONE; case XML_TOK_PERCENT: state->handler = entity1; return XML_ROLE_ENTITY_NONE; case XML_TOK_NAME: state->handler = entity2; return XML_ROLE_GENERAL_ENTITY_NAME; } return common(state, tok); } static int PTRCALL entity1(PROLOG_STATE *state, int tok, const char *ptr, const char *end, const ENCODING *enc) { switch (tok) { case XML_TOK_PROLOG_S: return XML_ROLE_ENTITY_NONE; case XML_TOK_NAME: state->handler = entity7; return XML_ROLE_PARAM_ENTITY_NAME; } return common(state, tok); } static int PTRCALL entity2(PROLOG_STATE *state, int tok, const char *ptr, const char *end, const ENCODING *enc) { switch (tok) { case XML_TOK_PROLOG_S: return XML_ROLE_ENTITY_NONE; case XML_TOK_NAME: if (XmlNameMatchesAscii(enc, ptr, end, KW_SYSTEM)) { state->handler = entity4; return XML_ROLE_ENTITY_NONE; } if (XmlNameMatchesAscii(enc, ptr, end, KW_PUBLIC)) { state->handler = entity3; return XML_ROLE_ENTITY_NONE; } break; case XML_TOK_LITERAL: state->handler = declClose; state->role_none = XML_ROLE_ENTITY_NONE; return XML_ROLE_ENTITY_VALUE; } return common(state, tok); } static int PTRCALL entity3(PROLOG_STATE *state, int tok, const char *ptr, const char *end, const ENCODING *enc) { switch (tok) { case XML_TOK_PROLOG_S: return XML_ROLE_ENTITY_NONE; case XML_TOK_LITERAL: state->handler = entity4; return XML_ROLE_ENTITY_PUBLIC_ID; } return common(state, tok); } static int PTRCALL entity4(PROLOG_STATE *state, int tok, const char *ptr, const char *end, const ENCODING *enc) { switch (tok) { case XML_TOK_PROLOG_S: return XML_ROLE_ENTITY_NONE; case XML_TOK_LITERAL: state->handler = entity5; return XML_ROLE_ENTITY_SYSTEM_ID; } return common(state, tok); } static int PTRCALL entity5(PROLOG_STATE *state, int tok, const char *ptr, const char *end, const ENCODING *enc) { switch (tok) { case XML_TOK_PROLOG_S: return XML_ROLE_ENTITY_NONE; case XML_TOK_DECL_CLOSE: setTopLevel(state); return XML_ROLE_ENTITY_COMPLETE; case XML_TOK_NAME: if (XmlNameMatchesAscii(enc, ptr, end, KW_NDATA)) { state->handler = entity6; return XML_ROLE_ENTITY_NONE; } break; } return common(state, tok); } static int PTRCALL entity6(PROLOG_STATE *state, int tok, const char *ptr, const char *end, const ENCODING *enc) { switch (tok) { case XML_TOK_PROLOG_S: return XML_ROLE_ENTITY_NONE; case XML_TOK_NAME: state->handler = declClose; state->role_none = XML_ROLE_ENTITY_NONE; return XML_ROLE_ENTITY_NOTATION_NAME; } return common(state, tok); } static int PTRCALL entity7(PROLOG_STATE *state, int tok, const char *ptr, const char *end, const ENCODING *enc) { switch (tok) { case XML_TOK_PROLOG_S: return XML_ROLE_ENTITY_NONE; case XML_TOK_NAME: if (XmlNameMatchesAscii(enc, ptr, end, KW_SYSTEM)) { state->handler = entity9; return XML_ROLE_ENTITY_NONE; } if (XmlNameMatchesAscii(enc, ptr, end, KW_PUBLIC)) { state->handler = entity8; return XML_ROLE_ENTITY_NONE; } break; case XML_TOK_LITERAL: state->handler = declClose; state->role_none = XML_ROLE_ENTITY_NONE; return XML_ROLE_ENTITY_VALUE; } return common(state, tok); } static int PTRCALL entity8(PROLOG_STATE *state, int tok, const char *ptr, const char *end, const ENCODING *enc) { switch (tok) { case XML_TOK_PROLOG_S: return XML_ROLE_ENTITY_NONE; case XML_TOK_LITERAL: state->handler = entity9; return XML_ROLE_ENTITY_PUBLIC_ID; } return common(state, tok); } static int PTRCALL entity9(PROLOG_STATE *state, int tok, const char *ptr, const char *end, const ENCODING *enc) { switch (tok) { case XML_TOK_PROLOG_S: return XML_ROLE_ENTITY_NONE; case XML_TOK_LITERAL: state->handler = entity10; return XML_ROLE_ENTITY_SYSTEM_ID; } return common(state, tok); } static int PTRCALL entity10(PROLOG_STATE *state, int tok, const char *ptr, const char *end, const ENCODING *enc) { switch (tok) { case XML_TOK_PROLOG_S: return XML_ROLE_ENTITY_NONE; case XML_TOK_DECL_CLOSE: setTopLevel(state); return XML_ROLE_ENTITY_COMPLETE; } return common(state, tok); } static int PTRCALL notation0(PROLOG_STATE *state, int tok, const char *ptr, const char *end, const ENCODING *enc) { switch (tok) { case XML_TOK_PROLOG_S: return XML_ROLE_NOTATION_NONE; case XML_TOK_NAME: state->handler = notation1; return XML_ROLE_NOTATION_NAME; } return common(state, tok); } static int PTRCALL notation1(PROLOG_STATE *state, int tok, const char *ptr, const char *end, const ENCODING *enc) { switch (tok) { case XML_TOK_PROLOG_S: return XML_ROLE_NOTATION_NONE; case XML_TOK_NAME: if (XmlNameMatchesAscii(enc, ptr, end, KW_SYSTEM)) { state->handler = notation3; return XML_ROLE_NOTATION_NONE; } if (XmlNameMatchesAscii(enc, ptr, end, KW_PUBLIC)) { state->handler = notation2; return XML_ROLE_NOTATION_NONE; } break; } return common(state, tok); } static int PTRCALL notation2(PROLOG_STATE *state, int tok, const char *ptr, const char *end, const ENCODING *enc) { switch (tok) { case XML_TOK_PROLOG_S: return XML_ROLE_NOTATION_NONE; case XML_TOK_LITERAL: state->handler = notation4; return XML_ROLE_NOTATION_PUBLIC_ID; } return common(state, tok); } static int PTRCALL notation3(PROLOG_STATE *state, int tok, const char *ptr, const char *end, const ENCODING *enc) { switch (tok) { case XML_TOK_PROLOG_S: return XML_ROLE_NOTATION_NONE; case XML_TOK_LITERAL: state->handler = declClose; state->role_none = XML_ROLE_NOTATION_NONE; return XML_ROLE_NOTATION_SYSTEM_ID; } return common(state, tok); } static int PTRCALL notation4(PROLOG_STATE *state, int tok, const char *ptr, const char *end, const ENCODING *enc) { switch (tok) { case XML_TOK_PROLOG_S: return XML_ROLE_NOTATION_NONE; case XML_TOK_LITERAL: state->handler = declClose; state->role_none = XML_ROLE_NOTATION_NONE; return XML_ROLE_NOTATION_SYSTEM_ID; case XML_TOK_DECL_CLOSE: setTopLevel(state); return XML_ROLE_NOTATION_NO_SYSTEM_ID; } return common(state, tok); } static int PTRCALL attlist0(PROLOG_STATE *state, int tok, const char *ptr, const char *end, const ENCODING *enc) { switch (tok) { case XML_TOK_PROLOG_S: return XML_ROLE_ATTLIST_NONE; case XML_TOK_NAME: case XML_TOK_PREFIXED_NAME: state->handler = attlist1; return XML_ROLE_ATTLIST_ELEMENT_NAME; } return common(state, tok); } static int PTRCALL attlist1(PROLOG_STATE *state, int tok, const char *ptr, const char *end, const ENCODING *enc) { switch (tok) { case XML_TOK_PROLOG_S: return XML_ROLE_ATTLIST_NONE; case XML_TOK_DECL_CLOSE: setTopLevel(state); return XML_ROLE_ATTLIST_NONE; case XML_TOK_NAME: case XML_TOK_PREFIXED_NAME: state->handler = attlist2; return XML_ROLE_ATTRIBUTE_NAME; } return common(state, tok); } static int PTRCALL attlist2(PROLOG_STATE *state, int tok, const char *ptr, const char *end, const ENCODING *enc) { switch (tok) { case XML_TOK_PROLOG_S: return XML_ROLE_ATTLIST_NONE; case XML_TOK_NAME: { static const char *types[] = { KW_CDATA, KW_ID, KW_IDREF, KW_IDREFS, KW_ENTITY, KW_ENTITIES, KW_NMTOKEN, KW_NMTOKENS, }; int i; for (i = 0; i < (int)(sizeof(types)/sizeof(types[0])); i++) if (XmlNameMatchesAscii(enc, ptr, end, types[i])) { state->handler = attlist8; return XML_ROLE_ATTRIBUTE_TYPE_CDATA + i; } } if (XmlNameMatchesAscii(enc, ptr, end, KW_NOTATION)) { state->handler = attlist5; return XML_ROLE_ATTLIST_NONE; } break; case XML_TOK_OPEN_PAREN: state->handler = attlist3; return XML_ROLE_ATTLIST_NONE; } return common(state, tok); } static int PTRCALL attlist3(PROLOG_STATE *state, int tok, const char *ptr, const char *end, const ENCODING *enc) { switch (tok) { case XML_TOK_PROLOG_S: return XML_ROLE_ATTLIST_NONE; case XML_TOK_NMTOKEN: case XML_TOK_NAME: case XML_TOK_PREFIXED_NAME: state->handler = attlist4; return XML_ROLE_ATTRIBUTE_ENUM_VALUE; } return common(state, tok); } static int PTRCALL attlist4(PROLOG_STATE *state, int tok, const char *ptr, const char *end, const ENCODING *enc) { switch (tok) { case XML_TOK_PROLOG_S: return XML_ROLE_ATTLIST_NONE; case XML_TOK_CLOSE_PAREN: state->handler = attlist8; return XML_ROLE_ATTLIST_NONE; case XML_TOK_OR: state->handler = attlist3; return XML_ROLE_ATTLIST_NONE; } return common(state, tok); } static int PTRCALL attlist5(PROLOG_STATE *state, int tok, const char *ptr, const char *end, const ENCODING *enc) { switch (tok) { case XML_TOK_PROLOG_S: return XML_ROLE_ATTLIST_NONE; case XML_TOK_OPEN_PAREN: state->handler = attlist6; return XML_ROLE_ATTLIST_NONE; } return common(state, tok); } static int PTRCALL attlist6(PROLOG_STATE *state, int tok, const char *ptr, const char *end, const ENCODING *enc) { switch (tok) { case XML_TOK_PROLOG_S: return XML_ROLE_ATTLIST_NONE; case XML_TOK_NAME: state->handler = attlist7; return XML_ROLE_ATTRIBUTE_NOTATION_VALUE; } return common(state, tok); } static int PTRCALL attlist7(PROLOG_STATE *state, int tok, const char *ptr, const char *end, const ENCODING *enc) { switch (tok) { case XML_TOK_PROLOG_S: return XML_ROLE_ATTLIST_NONE; case XML_TOK_CLOSE_PAREN: state->handler = attlist8; return XML_ROLE_ATTLIST_NONE; case XML_TOK_OR: state->handler = attlist6; return XML_ROLE_ATTLIST_NONE; } return common(state, tok); } /* default value */ static int PTRCALL attlist8(PROLOG_STATE *state, int tok, const char *ptr, const char *end, const ENCODING *enc) { switch (tok) { case XML_TOK_PROLOG_S: return XML_ROLE_ATTLIST_NONE; case XML_TOK_POUND_NAME: if (XmlNameMatchesAscii(enc, ptr + MIN_BYTES_PER_CHAR(enc), end, KW_IMPLIED)) { state->handler = attlist1; return XML_ROLE_IMPLIED_ATTRIBUTE_VALUE; } if (XmlNameMatchesAscii(enc, ptr + MIN_BYTES_PER_CHAR(enc), end, KW_REQUIRED)) { state->handler = attlist1; return XML_ROLE_REQUIRED_ATTRIBUTE_VALUE; } if (XmlNameMatchesAscii(enc, ptr + MIN_BYTES_PER_CHAR(enc), end, KW_FIXED)) { state->handler = attlist9; return XML_ROLE_ATTLIST_NONE; } break; case XML_TOK_LITERAL: state->handler = attlist1; return XML_ROLE_DEFAULT_ATTRIBUTE_VALUE; } return common(state, tok); } static int PTRCALL attlist9(PROLOG_STATE *state, int tok, const char *ptr, const char *end, const ENCODING *enc) { switch (tok) { case XML_TOK_PROLOG_S: return XML_ROLE_ATTLIST_NONE; case XML_TOK_LITERAL: state->handler = attlist1; return XML_ROLE_FIXED_ATTRIBUTE_VALUE; } return common(state, tok); } static int PTRCALL element0(PROLOG_STATE *state, int tok, const char *ptr, const char *end, const ENCODING *enc) { switch (tok) { case XML_TOK_PROLOG_S: return XML_ROLE_ELEMENT_NONE; case XML_TOK_NAME: case XML_TOK_PREFIXED_NAME: state->handler = element1; return XML_ROLE_ELEMENT_NAME; } return common(state, tok); } static int PTRCALL element1(PROLOG_STATE *state, int tok, const char *ptr, const char *end, const ENCODING *enc) { switch (tok) { case XML_TOK_PROLOG_S: return XML_ROLE_ELEMENT_NONE; case XML_TOK_NAME: if (XmlNameMatchesAscii(enc, ptr, end, KW_EMPTY)) { state->handler = declClose; state->role_none = XML_ROLE_ELEMENT_NONE; return XML_ROLE_CONTENT_EMPTY; } if (XmlNameMatchesAscii(enc, ptr, end, KW_ANY)) { state->handler = declClose; state->role_none = XML_ROLE_ELEMENT_NONE; return XML_ROLE_CONTENT_ANY; } break; case XML_TOK_OPEN_PAREN: state->handler = element2; state->level = 1; return XML_ROLE_GROUP_OPEN; } return common(state, tok); } static int PTRCALL element2(PROLOG_STATE *state, int tok, const char *ptr, const char *end, const ENCODING *enc) { switch (tok) { case XML_TOK_PROLOG_S: return XML_ROLE_ELEMENT_NONE; case XML_TOK_POUND_NAME: if (XmlNameMatchesAscii(enc, ptr + MIN_BYTES_PER_CHAR(enc), end, KW_PCDATA)) { state->handler = element3; return XML_ROLE_CONTENT_PCDATA; } break; case XML_TOK_OPEN_PAREN: state->level = 2; state->handler = element6; return XML_ROLE_GROUP_OPEN; case XML_TOK_NAME: case XML_TOK_PREFIXED_NAME: state->handler = element7; return XML_ROLE_CONTENT_ELEMENT; case XML_TOK_NAME_QUESTION: state->handler = element7; return XML_ROLE_CONTENT_ELEMENT_OPT; case XML_TOK_NAME_ASTERISK: state->handler = element7; return XML_ROLE_CONTENT_ELEMENT_REP; case XML_TOK_NAME_PLUS: state->handler = element7; return XML_ROLE_CONTENT_ELEMENT_PLUS; } return common(state, tok); } static int PTRCALL element3(PROLOG_STATE *state, int tok, const char *ptr, const char *end, const ENCODING *enc) { switch (tok) { case XML_TOK_PROLOG_S: return XML_ROLE_ELEMENT_NONE; case XML_TOK_CLOSE_PAREN: state->handler = declClose; state->role_none = XML_ROLE_ELEMENT_NONE; return XML_ROLE_GROUP_CLOSE; case XML_TOK_CLOSE_PAREN_ASTERISK: state->handler = declClose; state->role_none = XML_ROLE_ELEMENT_NONE; return XML_ROLE_GROUP_CLOSE_REP; case XML_TOK_OR: state->handler = element4; return XML_ROLE_ELEMENT_NONE; } return common(state, tok); } static int PTRCALL element4(PROLOG_STATE *state, int tok, const char *ptr, const char *end, const ENCODING *enc) { switch (tok) { case XML_TOK_PROLOG_S: return XML_ROLE_ELEMENT_NONE; case XML_TOK_NAME: case XML_TOK_PREFIXED_NAME: state->handler = element5; return XML_ROLE_CONTENT_ELEMENT; } return common(state, tok); } static int PTRCALL element5(PROLOG_STATE *state, int tok, const char *ptr, const char *end, const ENCODING *enc) { switch (tok) { case XML_TOK_PROLOG_S: return XML_ROLE_ELEMENT_NONE; case XML_TOK_CLOSE_PAREN_ASTERISK: state->handler = declClose; state->role_none = XML_ROLE_ELEMENT_NONE; return XML_ROLE_GROUP_CLOSE_REP; case XML_TOK_OR: state->handler = element4; return XML_ROLE_ELEMENT_NONE; } return common(state, tok); } static int PTRCALL element6(PROLOG_STATE *state, int tok, const char *ptr, const char *end, const ENCODING *enc) { switch (tok) { case XML_TOK_PROLOG_S: return XML_ROLE_ELEMENT_NONE; case XML_TOK_OPEN_PAREN: state->level += 1; return XML_ROLE_GROUP_OPEN; case XML_TOK_NAME: case XML_TOK_PREFIXED_NAME: state->handler = element7; return XML_ROLE_CONTENT_ELEMENT; case XML_TOK_NAME_QUESTION: state->handler = element7; return XML_ROLE_CONTENT_ELEMENT_OPT; case XML_TOK_NAME_ASTERISK: state->handler = element7; return XML_ROLE_CONTENT_ELEMENT_REP; case XML_TOK_NAME_PLUS: state->handler = element7; return XML_ROLE_CONTENT_ELEMENT_PLUS; } return common(state, tok); } static int PTRCALL element7(PROLOG_STATE *state, int tok, const char *ptr, const char *end, const ENCODING *enc) { switch (tok) { case XML_TOK_PROLOG_S: return XML_ROLE_ELEMENT_NONE; case XML_TOK_CLOSE_PAREN: state->level -= 1; if (state->level == 0) { state->handler = declClose; state->role_none = XML_ROLE_ELEMENT_NONE; } return XML_ROLE_GROUP_CLOSE; case XML_TOK_CLOSE_PAREN_ASTERISK: state->level -= 1; if (state->level == 0) { state->handler = declClose; state->role_none = XML_ROLE_ELEMENT_NONE; } return XML_ROLE_GROUP_CLOSE_REP; case XML_TOK_CLOSE_PAREN_QUESTION: state->level -= 1; if (state->level == 0) { state->handler = declClose; state->role_none = XML_ROLE_ELEMENT_NONE; } return XML_ROLE_GROUP_CLOSE_OPT; case XML_TOK_CLOSE_PAREN_PLUS: state->level -= 1; if (state->level == 0) { state->handler = declClose; state->role_none = XML_ROLE_ELEMENT_NONE; } return XML_ROLE_GROUP_CLOSE_PLUS; case XML_TOK_COMMA: state->handler = element6; return XML_ROLE_GROUP_SEQUENCE; case XML_TOK_OR: state->handler = element6; return XML_ROLE_GROUP_CHOICE; } return common(state, tok); } #ifdef XML_DTD static int PTRCALL condSect0(PROLOG_STATE *state, int tok, const char *ptr, const char *end, const ENCODING *enc) { switch (tok) { case XML_TOK_PROLOG_S: return XML_ROLE_NONE; case XML_TOK_NAME: if (XmlNameMatchesAscii(enc, ptr, end, KW_INCLUDE)) { state->handler = condSect1; return XML_ROLE_NONE; } if (XmlNameMatchesAscii(enc, ptr, end, KW_IGNORE)) { state->handler = condSect2; return XML_ROLE_NONE; } break; } return common(state, tok); } static int PTRCALL condSect1(PROLOG_STATE *state, int tok, const char *ptr, const char *end, const ENCODING *enc) { switch (tok) { case XML_TOK_PROLOG_S: return XML_ROLE_NONE; case XML_TOK_OPEN_BRACKET: state->handler = externalSubset1; state->includeLevel += 1; return XML_ROLE_NONE; } return common(state, tok); } static int PTRCALL condSect2(PROLOG_STATE *state, int tok, const char *ptr, const char *end, const ENCODING *enc) { switch (tok) { case XML_TOK_PROLOG_S: return XML_ROLE_NONE; case XML_TOK_OPEN_BRACKET: state->handler = externalSubset1; return XML_ROLE_IGNORE_SECT; } return common(state, tok); } #endif /* XML_DTD */ static int PTRCALL declClose(PROLOG_STATE *state, int tok, const char *ptr, const char *end, const ENCODING *enc) { switch (tok) { case XML_TOK_PROLOG_S: return state->role_none; case XML_TOK_DECL_CLOSE: setTopLevel(state); return state->role_none; } return common(state, tok); } static int PTRCALL error(PROLOG_STATE *state, int tok, const char *ptr, const char *end, const ENCODING *enc) { return XML_ROLE_NONE; } static int FASTCALL common(PROLOG_STATE *state, int tok) { #ifdef XML_DTD if (!state->documentEntity && tok == XML_TOK_PARAM_ENTITY_REF) return XML_ROLE_INNER_PARAM_ENTITY_REF; #endif state->handler = error; return XML_ROLE_ERROR; } void XmlPrologStateInit(PROLOG_STATE *state) { state->handler = prolog0; #ifdef XML_DTD state->documentEntity = 1; state->includeLevel = 0; state->inEntityValue = 0; #endif /* XML_DTD */ } #ifdef XML_DTD void XmlPrologStateInitExternalEntity(PROLOG_STATE *state) { state->handler = externalSubset0; state->documentEntity = 0; state->includeLevel = 0; } #endif /* XML_DTD */ tla-1.3.5+dfsg/src/expat/lib/ascii.h0000644000175000017500000000342510457621771015672 0ustar useruser/* Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd See the file COPYING for copying permission. */ #define ASCII_A 0x41 #define ASCII_B 0x42 #define ASCII_C 0x43 #define ASCII_D 0x44 #define ASCII_E 0x45 #define ASCII_F 0x46 #define ASCII_G 0x47 #define ASCII_H 0x48 #define ASCII_I 0x49 #define ASCII_J 0x4A #define ASCII_K 0x4B #define ASCII_L 0x4C #define ASCII_M 0x4D #define ASCII_N 0x4E #define ASCII_O 0x4F #define ASCII_P 0x50 #define ASCII_Q 0x51 #define ASCII_R 0x52 #define ASCII_S 0x53 #define ASCII_T 0x54 #define ASCII_U 0x55 #define ASCII_V 0x56 #define ASCII_W 0x57 #define ASCII_X 0x58 #define ASCII_Y 0x59 #define ASCII_Z 0x5A #define ASCII_a 0x61 #define ASCII_b 0x62 #define ASCII_c 0x63 #define ASCII_d 0x64 #define ASCII_e 0x65 #define ASCII_f 0x66 #define ASCII_g 0x67 #define ASCII_h 0x68 #define ASCII_i 0x69 #define ASCII_j 0x6A #define ASCII_k 0x6B #define ASCII_l 0x6C #define ASCII_m 0x6D #define ASCII_n 0x6E #define ASCII_o 0x6F #define ASCII_p 0x70 #define ASCII_q 0x71 #define ASCII_r 0x72 #define ASCII_s 0x73 #define ASCII_t 0x74 #define ASCII_u 0x75 #define ASCII_v 0x76 #define ASCII_w 0x77 #define ASCII_x 0x78 #define ASCII_y 0x79 #define ASCII_z 0x7A #define ASCII_0 0x30 #define ASCII_1 0x31 #define ASCII_2 0x32 #define ASCII_3 0x33 #define ASCII_4 0x34 #define ASCII_5 0x35 #define ASCII_6 0x36 #define ASCII_7 0x37 #define ASCII_8 0x38 #define ASCII_9 0x39 #define ASCII_TAB 0x09 #define ASCII_SPACE 0x20 #define ASCII_EXCL 0x21 #define ASCII_QUOT 0x22 #define ASCII_AMP 0x26 #define ASCII_APOS 0x27 #define ASCII_MINUS 0x2D #define ASCII_PERIOD 0x2E #define ASCII_COLON 0x3A #define ASCII_SEMI 0x3B #define ASCII_LT 0x3C #define ASCII_EQUALS 0x3D #define ASCII_GT 0x3E #define ASCII_LSQB 0x5B #define ASCII_RSQB 0x5D #define ASCII_UNDERSCORE 0x5F tla-1.3.5+dfsg/src/expat/lib/libexpatw.def0000644000175000017500000000403710457621771017110 0ustar useruser; DEF file for MS VC++ LIBRARY LIBEXPATW DESCRIPTION "Implements an XML parser." EXPORTS XML_DefaultCurrent @1 XML_ErrorString @2 XML_ExpatVersion @3 XML_ExpatVersionInfo @4 XML_ExternalEntityParserCreate @5 XML_GetBase @6 XML_GetBuffer @7 XML_GetCurrentByteCount @8 XML_GetCurrentByteIndex @9 XML_GetCurrentColumnNumber @10 XML_GetCurrentLineNumber @11 XML_GetErrorCode @12 XML_GetIdAttributeIndex @13 XML_GetInputContext @14 XML_GetSpecifiedAttributeCount @15 XML_Parse @16 XML_ParseBuffer @17 XML_ParserCreate @18 XML_ParserCreateNS @19 XML_ParserCreate_MM @20 XML_ParserFree @21 XML_SetAttlistDeclHandler @22 XML_SetBase @23 XML_SetCdataSectionHandler @24 XML_SetCharacterDataHandler @25 XML_SetCommentHandler @26 XML_SetDefaultHandler @27 XML_SetDefaultHandlerExpand @28 XML_SetDoctypeDeclHandler @29 XML_SetElementDeclHandler @30 XML_SetElementHandler @31 XML_SetEncoding @32 XML_SetEndCdataSectionHandler @33 XML_SetEndDoctypeDeclHandler @34 XML_SetEndElementHandler @35 XML_SetEndNamespaceDeclHandler @36 XML_SetEntityDeclHandler @37 XML_SetExternalEntityRefHandler @38 XML_SetExternalEntityRefHandlerArg @39 XML_SetNamespaceDeclHandler @40 XML_SetNotStandaloneHandler @41 XML_SetNotationDeclHandler @42 XML_SetParamEntityParsing @43 XML_SetProcessingInstructionHandler @44 XML_SetReturnNSTriplet @45 XML_SetStartCdataSectionHandler @46 XML_SetStartDoctypeDeclHandler @47 XML_SetStartElementHandler @48 XML_SetStartNamespaceDeclHandler @49 XML_SetUnknownEncodingHandler @50 XML_SetUnparsedEntityDeclHandler @51 XML_SetUserData @52 XML_SetXmlDeclHandler @53 XML_UseParserAsHandlerArg @54 ; added with version 1.95.3 XML_ParserReset @55 XML_SetSkippedEntityHandler @56 ; added with version 1.95.5 XML_GetFeatureList @57 XML_UseForeignDTD @58 ; added with version 1.95.6 XML_FreeContentModel @59 XML_MemMalloc @60 XML_MemRealloc @61 XML_MemFree @62 ; added with version 1.95.8 XML_StopParser @63 XML_ResumeParser @64 XML_GetParsingStatus @65 tla-1.3.5+dfsg/src/expat/lib/iasciitab.h0000644000175000017500000000344610457621771016535 0ustar useruser/* Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd See the file COPYING for copying permission. */ /* Like asciitab.h, except that 0xD has code BT_S rather than BT_CR */ /* 0x00 */ BT_NONXML, BT_NONXML, BT_NONXML, BT_NONXML, /* 0x04 */ BT_NONXML, BT_NONXML, BT_NONXML, BT_NONXML, /* 0x08 */ BT_NONXML, BT_S, BT_LF, BT_NONXML, /* 0x0C */ BT_NONXML, BT_S, BT_NONXML, BT_NONXML, /* 0x10 */ BT_NONXML, BT_NONXML, BT_NONXML, BT_NONXML, /* 0x14 */ BT_NONXML, BT_NONXML, BT_NONXML, BT_NONXML, /* 0x18 */ BT_NONXML, BT_NONXML, BT_NONXML, BT_NONXML, /* 0x1C */ BT_NONXML, BT_NONXML, BT_NONXML, BT_NONXML, /* 0x20 */ BT_S, BT_EXCL, BT_QUOT, BT_NUM, /* 0x24 */ BT_OTHER, BT_PERCNT, BT_AMP, BT_APOS, /* 0x28 */ BT_LPAR, BT_RPAR, BT_AST, BT_PLUS, /* 0x2C */ BT_COMMA, BT_MINUS, BT_NAME, BT_SOL, /* 0x30 */ BT_DIGIT, BT_DIGIT, BT_DIGIT, BT_DIGIT, /* 0x34 */ BT_DIGIT, BT_DIGIT, BT_DIGIT, BT_DIGIT, /* 0x38 */ BT_DIGIT, BT_DIGIT, BT_COLON, BT_SEMI, /* 0x3C */ BT_LT, BT_EQUALS, BT_GT, BT_QUEST, /* 0x40 */ BT_OTHER, BT_HEX, BT_HEX, BT_HEX, /* 0x44 */ BT_HEX, BT_HEX, BT_HEX, BT_NMSTRT, /* 0x48 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, /* 0x4C */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, /* 0x50 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, /* 0x54 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, /* 0x58 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_LSQB, /* 0x5C */ BT_OTHER, BT_RSQB, BT_OTHER, BT_NMSTRT, /* 0x60 */ BT_OTHER, BT_HEX, BT_HEX, BT_HEX, /* 0x64 */ BT_HEX, BT_HEX, BT_HEX, BT_NMSTRT, /* 0x68 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, /* 0x6C */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, /* 0x70 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, /* 0x74 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, /* 0x78 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_OTHER, /* 0x7C */ BT_VERBAR, BT_OTHER, BT_OTHER, BT_OTHER, tla-1.3.5+dfsg/src/expat/lib/expatw_static.dsp0000644000175000017500000000760610457621771020025 0ustar useruser# Microsoft Developer Studio Project File - Name="expatw_static" - Package Owner=<4> # Microsoft Developer Studio Generated Build File, Format Version 6.00 # ** DO NOT EDIT ** # TARGTYPE "Win32 (x86) Static Library" 0x0104 CFG=expatw_static - Win32 Debug !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run !MESSAGE !MESSAGE NMAKE /f "expatw_static.mak". !MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: !MESSAGE !MESSAGE NMAKE /f "expatw_static.mak" CFG="expatw_static - Win32 Debug" !MESSAGE !MESSAGE Possible choices for configuration are: !MESSAGE !MESSAGE "expatw_static - Win32 Release" (based on "Win32 (x86) Static Library") !MESSAGE "expatw_static - Win32 Debug" (based on "Win32 (x86) Static Library") !MESSAGE # Begin Project # PROP AllowPerConfigDependencies 0 # PROP Scc_ProjName "" # PROP Scc_LocalPath "" CPP=cl.exe RSC=rc.exe !IF "$(CFG)" == "expatw_static - Win32 Release" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 0 # PROP BASE Output_Dir "expatw_static___Win32_Release" # PROP BASE Intermediate_Dir "expatw_static___Win32_Release" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 0 # PROP Output_Dir "Release-w_static" # PROP Intermediate_Dir "Release-w_static" # PROP Target_Dir "" # ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c # ADD CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "_WINDOWS" /D "NDEBUG" /D "_MBCS" /D "_LIB" /D "COMPILED_FROM_DSP" /D "XML_UNICODE_WCHAR_T" /FD /c # SUBTRACT CPP /YX # ADD BASE RSC /l 0x1009 /d "NDEBUG" # ADD RSC /l 0x409 /d "NDEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LIB32=link.exe -lib # ADD BASE LIB32 /nologo # ADD LIB32 /nologo /out:"Release-w_static\libexpatwMT.lib" !ELSEIF "$(CFG)" == "expatw_static - Win32 Debug" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 1 # PROP BASE Output_Dir "expatw_static___Win32_Debug" # PROP BASE Intermediate_Dir "expatw_static___Win32_Debug" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 1 # PROP Output_Dir "Debug-w_static" # PROP Intermediate_Dir "Debug-w_static" # PROP Target_Dir "" # ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c # ADD CPP /nologo /MTd /W3 /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "COMPILED_FROM_DSP" /D "_MBCS" /D "_LIB" /FR /FD /GZ /c # SUBTRACT CPP /YX # ADD BASE RSC /l 0x1009 /d "_DEBUG" # ADD RSC /l 0x409 /d "_DEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LIB32=link.exe -lib # ADD BASE LIB32 /nologo # ADD LIB32 /nologo /out:"Debug-w_static\libexpatwMT.lib" !ENDIF # Begin Target # Name "expatw_static - Win32 Release" # Name "expatw_static - Win32 Debug" # Begin Group "Source Files" # PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" # Begin Source File SOURCE=.\xmlparse.c # End Source File # Begin Source File SOURCE=.\xmlrole.c # End Source File # Begin Source File SOURCE=.\xmltok.c # End Source File # End Group # Begin Group "Header Files" # PROP Default_Filter "h;hpp;hxx;hm;inl" # Begin Source File SOURCE=.\ascii.h # End Source File # Begin Source File SOURCE=.\asciitab.h # End Source File # Begin Source File SOURCE=.\expat.h # End Source File # Begin Source File SOURCE=.\expat_external.h # End Source File # Begin Source File SOURCE=.\iasciitab.h # End Source File # Begin Source File SOURCE=.\internal.h # End Source File # Begin Source File SOURCE=.\latin1tab.h # End Source File # Begin Source File SOURCE=.\nametab.h # End Source File # Begin Source File SOURCE=.\utf8tab.h # End Source File # Begin Source File SOURCE=.\xmlrole.h # End Source File # Begin Source File SOURCE=.\xmltok.h # End Source File # Begin Source File SOURCE=.\xmltok_impl.h # End Source File # End Group # End Target # End Project tla-1.3.5+dfsg/src/expat/lib/xmltok_impl.c0000644000175000017500000012666510457621771017150 0ustar useruser/* Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd See the file COPYING for copying permission. */ #ifndef IS_INVALID_CHAR #define IS_INVALID_CHAR(enc, ptr, n) (0) #endif #define INVALID_LEAD_CASE(n, ptr, nextTokPtr) \ case BT_LEAD ## n: \ if (end - ptr < n) \ return XML_TOK_PARTIAL_CHAR; \ if (IS_INVALID_CHAR(enc, ptr, n)) { \ *(nextTokPtr) = (ptr); \ return XML_TOK_INVALID; \ } \ ptr += n; \ break; #define INVALID_CASES(ptr, nextTokPtr) \ INVALID_LEAD_CASE(2, ptr, nextTokPtr) \ INVALID_LEAD_CASE(3, ptr, nextTokPtr) \ INVALID_LEAD_CASE(4, ptr, nextTokPtr) \ case BT_NONXML: \ case BT_MALFORM: \ case BT_TRAIL: \ *(nextTokPtr) = (ptr); \ return XML_TOK_INVALID; #define CHECK_NAME_CASE(n, enc, ptr, end, nextTokPtr) \ case BT_LEAD ## n: \ if (end - ptr < n) \ return XML_TOK_PARTIAL_CHAR; \ if (!IS_NAME_CHAR(enc, ptr, n)) { \ *nextTokPtr = ptr; \ return XML_TOK_INVALID; \ } \ ptr += n; \ break; #define CHECK_NAME_CASES(enc, ptr, end, nextTokPtr) \ case BT_NONASCII: \ if (!IS_NAME_CHAR_MINBPC(enc, ptr)) { \ *nextTokPtr = ptr; \ return XML_TOK_INVALID; \ } \ case BT_NMSTRT: \ case BT_HEX: \ case BT_DIGIT: \ case BT_NAME: \ case BT_MINUS: \ ptr += MINBPC(enc); \ break; \ CHECK_NAME_CASE(2, enc, ptr, end, nextTokPtr) \ CHECK_NAME_CASE(3, enc, ptr, end, nextTokPtr) \ CHECK_NAME_CASE(4, enc, ptr, end, nextTokPtr) #define CHECK_NMSTRT_CASE(n, enc, ptr, end, nextTokPtr) \ case BT_LEAD ## n: \ if (end - ptr < n) \ return XML_TOK_PARTIAL_CHAR; \ if (!IS_NMSTRT_CHAR(enc, ptr, n)) { \ *nextTokPtr = ptr; \ return XML_TOK_INVALID; \ } \ ptr += n; \ break; #define CHECK_NMSTRT_CASES(enc, ptr, end, nextTokPtr) \ case BT_NONASCII: \ if (!IS_NMSTRT_CHAR_MINBPC(enc, ptr)) { \ *nextTokPtr = ptr; \ return XML_TOK_INVALID; \ } \ case BT_NMSTRT: \ case BT_HEX: \ ptr += MINBPC(enc); \ break; \ CHECK_NMSTRT_CASE(2, enc, ptr, end, nextTokPtr) \ CHECK_NMSTRT_CASE(3, enc, ptr, end, nextTokPtr) \ CHECK_NMSTRT_CASE(4, enc, ptr, end, nextTokPtr) #ifndef PREFIX #define PREFIX(ident) ident #endif /* ptr points to character following " */ switch (BYTE_TYPE(enc, ptr + MINBPC(enc))) { case BT_S: case BT_CR: case BT_LF: case BT_PERCNT: *nextTokPtr = ptr; return XML_TOK_INVALID; } /* fall through */ case BT_S: case BT_CR: case BT_LF: *nextTokPtr = ptr; return XML_TOK_DECL_OPEN; case BT_NMSTRT: case BT_HEX: ptr += MINBPC(enc); break; default: *nextTokPtr = ptr; return XML_TOK_INVALID; } } return XML_TOK_PARTIAL; } static int PTRCALL PREFIX(checkPiTarget)(const ENCODING *enc, const char *ptr, const char *end, int *tokPtr) { int upper = 0; *tokPtr = XML_TOK_PI; if (end - ptr != MINBPC(enc)*3) return 1; switch (BYTE_TO_ASCII(enc, ptr)) { case ASCII_x: break; case ASCII_X: upper = 1; break; default: return 1; } ptr += MINBPC(enc); switch (BYTE_TO_ASCII(enc, ptr)) { case ASCII_m: break; case ASCII_M: upper = 1; break; default: return 1; } ptr += MINBPC(enc); switch (BYTE_TO_ASCII(enc, ptr)) { case ASCII_l: break; case ASCII_L: upper = 1; break; default: return 1; } if (upper) return 0; *tokPtr = XML_TOK_XML_DECL; return 1; } /* ptr points to character following " 1) { size_t n = end - ptr; if (n & (MINBPC(enc) - 1)) { n &= ~(MINBPC(enc) - 1); if (n == 0) return XML_TOK_PARTIAL; end = ptr + n; } } switch (BYTE_TYPE(enc, ptr)) { case BT_RSQB: ptr += MINBPC(enc); if (ptr == end) return XML_TOK_PARTIAL; if (!CHAR_MATCHES(enc, ptr, ASCII_RSQB)) break; ptr += MINBPC(enc); if (ptr == end) return XML_TOK_PARTIAL; if (!CHAR_MATCHES(enc, ptr, ASCII_GT)) { ptr -= MINBPC(enc); break; } *nextTokPtr = ptr + MINBPC(enc); return XML_TOK_CDATA_SECT_CLOSE; case BT_CR: ptr += MINBPC(enc); if (ptr == end) return XML_TOK_PARTIAL; if (BYTE_TYPE(enc, ptr) == BT_LF) ptr += MINBPC(enc); *nextTokPtr = ptr; return XML_TOK_DATA_NEWLINE; case BT_LF: *nextTokPtr = ptr + MINBPC(enc); return XML_TOK_DATA_NEWLINE; INVALID_CASES(ptr, nextTokPtr) default: ptr += MINBPC(enc); break; } while (ptr != end) { switch (BYTE_TYPE(enc, ptr)) { #define LEAD_CASE(n) \ case BT_LEAD ## n: \ if (end - ptr < n || IS_INVALID_CHAR(enc, ptr, n)) { \ *nextTokPtr = ptr; \ return XML_TOK_DATA_CHARS; \ } \ ptr += n; \ break; LEAD_CASE(2) LEAD_CASE(3) LEAD_CASE(4) #undef LEAD_CASE case BT_NONXML: case BT_MALFORM: case BT_TRAIL: case BT_CR: case BT_LF: case BT_RSQB: *nextTokPtr = ptr; return XML_TOK_DATA_CHARS; default: ptr += MINBPC(enc); break; } } *nextTokPtr = ptr; return XML_TOK_DATA_CHARS; } /* ptr points to character following " 1) { size_t n = end - ptr; if (n & (MINBPC(enc) - 1)) { n &= ~(MINBPC(enc) - 1); if (n == 0) return XML_TOK_PARTIAL; end = ptr + n; } } switch (BYTE_TYPE(enc, ptr)) { case BT_LT: return PREFIX(scanLt)(enc, ptr + MINBPC(enc), end, nextTokPtr); case BT_AMP: return PREFIX(scanRef)(enc, ptr + MINBPC(enc), end, nextTokPtr); case BT_CR: ptr += MINBPC(enc); if (ptr == end) return XML_TOK_TRAILING_CR; if (BYTE_TYPE(enc, ptr) == BT_LF) ptr += MINBPC(enc); *nextTokPtr = ptr; return XML_TOK_DATA_NEWLINE; case BT_LF: *nextTokPtr = ptr + MINBPC(enc); return XML_TOK_DATA_NEWLINE; case BT_RSQB: ptr += MINBPC(enc); if (ptr == end) return XML_TOK_TRAILING_RSQB; if (!CHAR_MATCHES(enc, ptr, ASCII_RSQB)) break; ptr += MINBPC(enc); if (ptr == end) return XML_TOK_TRAILING_RSQB; if (!CHAR_MATCHES(enc, ptr, ASCII_GT)) { ptr -= MINBPC(enc); break; } *nextTokPtr = ptr; return XML_TOK_INVALID; INVALID_CASES(ptr, nextTokPtr) default: ptr += MINBPC(enc); break; } while (ptr != end) { switch (BYTE_TYPE(enc, ptr)) { #define LEAD_CASE(n) \ case BT_LEAD ## n: \ if (end - ptr < n || IS_INVALID_CHAR(enc, ptr, n)) { \ *nextTokPtr = ptr; \ return XML_TOK_DATA_CHARS; \ } \ ptr += n; \ break; LEAD_CASE(2) LEAD_CASE(3) LEAD_CASE(4) #undef LEAD_CASE case BT_RSQB: if (ptr + MINBPC(enc) != end) { if (!CHAR_MATCHES(enc, ptr + MINBPC(enc), ASCII_RSQB)) { ptr += MINBPC(enc); break; } if (ptr + 2*MINBPC(enc) != end) { if (!CHAR_MATCHES(enc, ptr + 2*MINBPC(enc), ASCII_GT)) { ptr += MINBPC(enc); break; } *nextTokPtr = ptr + 2*MINBPC(enc); return XML_TOK_INVALID; } } /* fall through */ case BT_AMP: case BT_LT: case BT_NONXML: case BT_MALFORM: case BT_TRAIL: case BT_CR: case BT_LF: *nextTokPtr = ptr; return XML_TOK_DATA_CHARS; default: ptr += MINBPC(enc); break; } } *nextTokPtr = ptr; return XML_TOK_DATA_CHARS; } /* ptr points to character following "%" */ static int PTRCALL PREFIX(scanPercent)(const ENCODING *enc, const char *ptr, const char *end, const char **nextTokPtr) { if (ptr == end) return -XML_TOK_PERCENT; switch (BYTE_TYPE(enc, ptr)) { CHECK_NMSTRT_CASES(enc, ptr, end, nextTokPtr) case BT_S: case BT_LF: case BT_CR: case BT_PERCNT: *nextTokPtr = ptr; return XML_TOK_PERCENT; default: *nextTokPtr = ptr; return XML_TOK_INVALID; } while (ptr != end) { switch (BYTE_TYPE(enc, ptr)) { CHECK_NAME_CASES(enc, ptr, end, nextTokPtr) case BT_SEMI: *nextTokPtr = ptr + MINBPC(enc); return XML_TOK_PARAM_ENTITY_REF; default: *nextTokPtr = ptr; return XML_TOK_INVALID; } } return XML_TOK_PARTIAL; } static int PTRCALL PREFIX(scanPoundName)(const ENCODING *enc, const char *ptr, const char *end, const char **nextTokPtr) { if (ptr == end) return XML_TOK_PARTIAL; switch (BYTE_TYPE(enc, ptr)) { CHECK_NMSTRT_CASES(enc, ptr, end, nextTokPtr) default: *nextTokPtr = ptr; return XML_TOK_INVALID; } while (ptr != end) { switch (BYTE_TYPE(enc, ptr)) { CHECK_NAME_CASES(enc, ptr, end, nextTokPtr) case BT_CR: case BT_LF: case BT_S: case BT_RPAR: case BT_GT: case BT_PERCNT: case BT_VERBAR: *nextTokPtr = ptr; return XML_TOK_POUND_NAME; default: *nextTokPtr = ptr; return XML_TOK_INVALID; } } return -XML_TOK_POUND_NAME; } static int PTRCALL PREFIX(scanLit)(int open, const ENCODING *enc, const char *ptr, const char *end, const char **nextTokPtr) { while (ptr != end) { int t = BYTE_TYPE(enc, ptr); switch (t) { INVALID_CASES(ptr, nextTokPtr) case BT_QUOT: case BT_APOS: ptr += MINBPC(enc); if (t != open) break; if (ptr == end) return -XML_TOK_LITERAL; *nextTokPtr = ptr; switch (BYTE_TYPE(enc, ptr)) { case BT_S: case BT_CR: case BT_LF: case BT_GT: case BT_PERCNT: case BT_LSQB: return XML_TOK_LITERAL; default: return XML_TOK_INVALID; } default: ptr += MINBPC(enc); break; } } return XML_TOK_PARTIAL; } static int PTRCALL PREFIX(prologTok)(const ENCODING *enc, const char *ptr, const char *end, const char **nextTokPtr) { int tok; if (ptr == end) return XML_TOK_NONE; if (MINBPC(enc) > 1) { size_t n = end - ptr; if (n & (MINBPC(enc) - 1)) { n &= ~(MINBPC(enc) - 1); if (n == 0) return XML_TOK_PARTIAL; end = ptr + n; } } switch (BYTE_TYPE(enc, ptr)) { case BT_QUOT: return PREFIX(scanLit)(BT_QUOT, enc, ptr + MINBPC(enc), end, nextTokPtr); case BT_APOS: return PREFIX(scanLit)(BT_APOS, enc, ptr + MINBPC(enc), end, nextTokPtr); case BT_LT: { ptr += MINBPC(enc); if (ptr == end) return XML_TOK_PARTIAL; switch (BYTE_TYPE(enc, ptr)) { case BT_EXCL: return PREFIX(scanDecl)(enc, ptr + MINBPC(enc), end, nextTokPtr); case BT_QUEST: return PREFIX(scanPi)(enc, ptr + MINBPC(enc), end, nextTokPtr); case BT_NMSTRT: case BT_HEX: case BT_NONASCII: case BT_LEAD2: case BT_LEAD3: case BT_LEAD4: *nextTokPtr = ptr - MINBPC(enc); return XML_TOK_INSTANCE_START; } *nextTokPtr = ptr; return XML_TOK_INVALID; } case BT_CR: if (ptr + MINBPC(enc) == end) { *nextTokPtr = end; /* indicate that this might be part of a CR/LF pair */ return -XML_TOK_PROLOG_S; } /* fall through */ case BT_S: case BT_LF: for (;;) { ptr += MINBPC(enc); if (ptr == end) break; switch (BYTE_TYPE(enc, ptr)) { case BT_S: case BT_LF: break; case BT_CR: /* don't split CR/LF pair */ if (ptr + MINBPC(enc) != end) break; /* fall through */ default: *nextTokPtr = ptr; return XML_TOK_PROLOG_S; } } *nextTokPtr = ptr; return XML_TOK_PROLOG_S; case BT_PERCNT: return PREFIX(scanPercent)(enc, ptr + MINBPC(enc), end, nextTokPtr); case BT_COMMA: *nextTokPtr = ptr + MINBPC(enc); return XML_TOK_COMMA; case BT_LSQB: *nextTokPtr = ptr + MINBPC(enc); return XML_TOK_OPEN_BRACKET; case BT_RSQB: ptr += MINBPC(enc); if (ptr == end) return -XML_TOK_CLOSE_BRACKET; if (CHAR_MATCHES(enc, ptr, ASCII_RSQB)) { if (ptr + MINBPC(enc) == end) return XML_TOK_PARTIAL; if (CHAR_MATCHES(enc, ptr + MINBPC(enc), ASCII_GT)) { *nextTokPtr = ptr + 2*MINBPC(enc); return XML_TOK_COND_SECT_CLOSE; } } *nextTokPtr = ptr; return XML_TOK_CLOSE_BRACKET; case BT_LPAR: *nextTokPtr = ptr + MINBPC(enc); return XML_TOK_OPEN_PAREN; case BT_RPAR: ptr += MINBPC(enc); if (ptr == end) return -XML_TOK_CLOSE_PAREN; switch (BYTE_TYPE(enc, ptr)) { case BT_AST: *nextTokPtr = ptr + MINBPC(enc); return XML_TOK_CLOSE_PAREN_ASTERISK; case BT_QUEST: *nextTokPtr = ptr + MINBPC(enc); return XML_TOK_CLOSE_PAREN_QUESTION; case BT_PLUS: *nextTokPtr = ptr + MINBPC(enc); return XML_TOK_CLOSE_PAREN_PLUS; case BT_CR: case BT_LF: case BT_S: case BT_GT: case BT_COMMA: case BT_VERBAR: case BT_RPAR: *nextTokPtr = ptr; return XML_TOK_CLOSE_PAREN; } *nextTokPtr = ptr; return XML_TOK_INVALID; case BT_VERBAR: *nextTokPtr = ptr + MINBPC(enc); return XML_TOK_OR; case BT_GT: *nextTokPtr = ptr + MINBPC(enc); return XML_TOK_DECL_CLOSE; case BT_NUM: return PREFIX(scanPoundName)(enc, ptr + MINBPC(enc), end, nextTokPtr); #define LEAD_CASE(n) \ case BT_LEAD ## n: \ if (end - ptr < n) \ return XML_TOK_PARTIAL_CHAR; \ if (IS_NMSTRT_CHAR(enc, ptr, n)) { \ ptr += n; \ tok = XML_TOK_NAME; \ break; \ } \ if (IS_NAME_CHAR(enc, ptr, n)) { \ ptr += n; \ tok = XML_TOK_NMTOKEN; \ break; \ } \ *nextTokPtr = ptr; \ return XML_TOK_INVALID; LEAD_CASE(2) LEAD_CASE(3) LEAD_CASE(4) #undef LEAD_CASE case BT_NMSTRT: case BT_HEX: tok = XML_TOK_NAME; ptr += MINBPC(enc); break; case BT_DIGIT: case BT_NAME: case BT_MINUS: #ifdef XML_NS case BT_COLON: #endif tok = XML_TOK_NMTOKEN; ptr += MINBPC(enc); break; case BT_NONASCII: if (IS_NMSTRT_CHAR_MINBPC(enc, ptr)) { ptr += MINBPC(enc); tok = XML_TOK_NAME; break; } if (IS_NAME_CHAR_MINBPC(enc, ptr)) { ptr += MINBPC(enc); tok = XML_TOK_NMTOKEN; break; } /* fall through */ default: *nextTokPtr = ptr; return XML_TOK_INVALID; } while (ptr != end) { switch (BYTE_TYPE(enc, ptr)) { CHECK_NAME_CASES(enc, ptr, end, nextTokPtr) case BT_GT: case BT_RPAR: case BT_COMMA: case BT_VERBAR: case BT_LSQB: case BT_PERCNT: case BT_S: case BT_CR: case BT_LF: *nextTokPtr = ptr; return tok; #ifdef XML_NS case BT_COLON: ptr += MINBPC(enc); switch (tok) { case XML_TOK_NAME: if (ptr == end) return XML_TOK_PARTIAL; tok = XML_TOK_PREFIXED_NAME; switch (BYTE_TYPE(enc, ptr)) { CHECK_NAME_CASES(enc, ptr, end, nextTokPtr) default: tok = XML_TOK_NMTOKEN; break; } break; case XML_TOK_PREFIXED_NAME: tok = XML_TOK_NMTOKEN; break; } break; #endif case BT_PLUS: if (tok == XML_TOK_NMTOKEN) { *nextTokPtr = ptr; return XML_TOK_INVALID; } *nextTokPtr = ptr + MINBPC(enc); return XML_TOK_NAME_PLUS; case BT_AST: if (tok == XML_TOK_NMTOKEN) { *nextTokPtr = ptr; return XML_TOK_INVALID; } *nextTokPtr = ptr + MINBPC(enc); return XML_TOK_NAME_ASTERISK; case BT_QUEST: if (tok == XML_TOK_NMTOKEN) { *nextTokPtr = ptr; return XML_TOK_INVALID; } *nextTokPtr = ptr + MINBPC(enc); return XML_TOK_NAME_QUESTION; default: *nextTokPtr = ptr; return XML_TOK_INVALID; } } return -tok; } static int PTRCALL PREFIX(attributeValueTok)(const ENCODING *enc, const char *ptr, const char *end, const char **nextTokPtr) { const char *start; if (ptr == end) return XML_TOK_NONE; start = ptr; while (ptr != end) { switch (BYTE_TYPE(enc, ptr)) { #define LEAD_CASE(n) \ case BT_LEAD ## n: ptr += n; break; LEAD_CASE(2) LEAD_CASE(3) LEAD_CASE(4) #undef LEAD_CASE case BT_AMP: if (ptr == start) return PREFIX(scanRef)(enc, ptr + MINBPC(enc), end, nextTokPtr); *nextTokPtr = ptr; return XML_TOK_DATA_CHARS; case BT_LT: /* this is for inside entity references */ *nextTokPtr = ptr; return XML_TOK_INVALID; case BT_LF: if (ptr == start) { *nextTokPtr = ptr + MINBPC(enc); return XML_TOK_DATA_NEWLINE; } *nextTokPtr = ptr; return XML_TOK_DATA_CHARS; case BT_CR: if (ptr == start) { ptr += MINBPC(enc); if (ptr == end) return XML_TOK_TRAILING_CR; if (BYTE_TYPE(enc, ptr) == BT_LF) ptr += MINBPC(enc); *nextTokPtr = ptr; return XML_TOK_DATA_NEWLINE; } *nextTokPtr = ptr; return XML_TOK_DATA_CHARS; case BT_S: if (ptr == start) { *nextTokPtr = ptr + MINBPC(enc); return XML_TOK_ATTRIBUTE_VALUE_S; } *nextTokPtr = ptr; return XML_TOK_DATA_CHARS; default: ptr += MINBPC(enc); break; } } *nextTokPtr = ptr; return XML_TOK_DATA_CHARS; } static int PTRCALL PREFIX(entityValueTok)(const ENCODING *enc, const char *ptr, const char *end, const char **nextTokPtr) { const char *start; if (ptr == end) return XML_TOK_NONE; start = ptr; while (ptr != end) { switch (BYTE_TYPE(enc, ptr)) { #define LEAD_CASE(n) \ case BT_LEAD ## n: ptr += n; break; LEAD_CASE(2) LEAD_CASE(3) LEAD_CASE(4) #undef LEAD_CASE case BT_AMP: if (ptr == start) return PREFIX(scanRef)(enc, ptr + MINBPC(enc), end, nextTokPtr); *nextTokPtr = ptr; return XML_TOK_DATA_CHARS; case BT_PERCNT: if (ptr == start) { int tok = PREFIX(scanPercent)(enc, ptr + MINBPC(enc), end, nextTokPtr); return (tok == XML_TOK_PERCENT) ? XML_TOK_INVALID : tok; } *nextTokPtr = ptr; return XML_TOK_DATA_CHARS; case BT_LF: if (ptr == start) { *nextTokPtr = ptr + MINBPC(enc); return XML_TOK_DATA_NEWLINE; } *nextTokPtr = ptr; return XML_TOK_DATA_CHARS; case BT_CR: if (ptr == start) { ptr += MINBPC(enc); if (ptr == end) return XML_TOK_TRAILING_CR; if (BYTE_TYPE(enc, ptr) == BT_LF) ptr += MINBPC(enc); *nextTokPtr = ptr; return XML_TOK_DATA_NEWLINE; } *nextTokPtr = ptr; return XML_TOK_DATA_CHARS; default: ptr += MINBPC(enc); break; } } *nextTokPtr = ptr; return XML_TOK_DATA_CHARS; } #ifdef XML_DTD static int PTRCALL PREFIX(ignoreSectionTok)(const ENCODING *enc, const char *ptr, const char *end, const char **nextTokPtr) { int level = 0; if (MINBPC(enc) > 1) { size_t n = end - ptr; if (n & (MINBPC(enc) - 1)) { n &= ~(MINBPC(enc) - 1); end = ptr + n; } } while (ptr != end) { switch (BYTE_TYPE(enc, ptr)) { INVALID_CASES(ptr, nextTokPtr) case BT_LT: if ((ptr += MINBPC(enc)) == end) return XML_TOK_PARTIAL; if (CHAR_MATCHES(enc, ptr, ASCII_EXCL)) { if ((ptr += MINBPC(enc)) == end) return XML_TOK_PARTIAL; if (CHAR_MATCHES(enc, ptr, ASCII_LSQB)) { ++level; ptr += MINBPC(enc); } } break; case BT_RSQB: if ((ptr += MINBPC(enc)) == end) return XML_TOK_PARTIAL; if (CHAR_MATCHES(enc, ptr, ASCII_RSQB)) { if ((ptr += MINBPC(enc)) == end) return XML_TOK_PARTIAL; if (CHAR_MATCHES(enc, ptr, ASCII_GT)) { ptr += MINBPC(enc); if (level == 0) { *nextTokPtr = ptr; return XML_TOK_IGNORE_SECT; } --level; } } break; default: ptr += MINBPC(enc); break; } } return XML_TOK_PARTIAL; } #endif /* XML_DTD */ static int PTRCALL PREFIX(isPublicId)(const ENCODING *enc, const char *ptr, const char *end, const char **badPtr) { ptr += MINBPC(enc); end -= MINBPC(enc); for (; ptr != end; ptr += MINBPC(enc)) { switch (BYTE_TYPE(enc, ptr)) { case BT_DIGIT: case BT_HEX: case BT_MINUS: case BT_APOS: case BT_LPAR: case BT_RPAR: case BT_PLUS: case BT_COMMA: case BT_SOL: case BT_EQUALS: case BT_QUEST: case BT_CR: case BT_LF: case BT_SEMI: case BT_EXCL: case BT_AST: case BT_PERCNT: case BT_NUM: #ifdef XML_NS case BT_COLON: #endif break; case BT_S: if (CHAR_MATCHES(enc, ptr, ASCII_TAB)) { *badPtr = ptr; return 0; } break; case BT_NAME: case BT_NMSTRT: if (!(BYTE_TO_ASCII(enc, ptr) & ~0x7f)) break; default: switch (BYTE_TO_ASCII(enc, ptr)) { case 0x24: /* $ */ case 0x40: /* @ */ break; default: *badPtr = ptr; return 0; } break; } } return 1; } /* This must only be called for a well-formed start-tag or empty element tag. Returns the number of attributes. Pointers to the first attsMax attributes are stored in atts. */ static int PTRCALL PREFIX(getAtts)(const ENCODING *enc, const char *ptr, int attsMax, ATTRIBUTE *atts) { enum { other, inName, inValue } state = inName; int nAtts = 0; int open = 0; /* defined when state == inValue; initialization just to shut up compilers */ for (ptr += MINBPC(enc);; ptr += MINBPC(enc)) { switch (BYTE_TYPE(enc, ptr)) { #define START_NAME \ if (state == other) { \ if (nAtts < attsMax) { \ atts[nAtts].name = ptr; \ atts[nAtts].normalized = 1; \ } \ state = inName; \ } #define LEAD_CASE(n) \ case BT_LEAD ## n: START_NAME ptr += (n - MINBPC(enc)); break; LEAD_CASE(2) LEAD_CASE(3) LEAD_CASE(4) #undef LEAD_CASE case BT_NONASCII: case BT_NMSTRT: case BT_HEX: START_NAME break; #undef START_NAME case BT_QUOT: if (state != inValue) { if (nAtts < attsMax) atts[nAtts].valuePtr = ptr + MINBPC(enc); state = inValue; open = BT_QUOT; } else if (open == BT_QUOT) { state = other; if (nAtts < attsMax) atts[nAtts].valueEnd = ptr; nAtts++; } break; case BT_APOS: if (state != inValue) { if (nAtts < attsMax) atts[nAtts].valuePtr = ptr + MINBPC(enc); state = inValue; open = BT_APOS; } else if (open == BT_APOS) { state = other; if (nAtts < attsMax) atts[nAtts].valueEnd = ptr; nAtts++; } break; case BT_AMP: if (nAtts < attsMax) atts[nAtts].normalized = 0; break; case BT_S: if (state == inName) state = other; else if (state == inValue && nAtts < attsMax && atts[nAtts].normalized && (ptr == atts[nAtts].valuePtr || BYTE_TO_ASCII(enc, ptr) != ASCII_SPACE || BYTE_TO_ASCII(enc, ptr + MINBPC(enc)) == ASCII_SPACE || BYTE_TYPE(enc, ptr + MINBPC(enc)) == open)) atts[nAtts].normalized = 0; break; case BT_CR: case BT_LF: /* This case ensures that the first attribute name is counted Apart from that we could just change state on the quote. */ if (state == inName) state = other; else if (state == inValue && nAtts < attsMax) atts[nAtts].normalized = 0; break; case BT_GT: case BT_SOL: if (state != inValue) return nAtts; break; default: break; } } /* not reached */ } static int PTRFASTCALL PREFIX(charRefNumber)(const ENCODING *enc, const char *ptr) { int result = 0; /* skip &# */ ptr += 2*MINBPC(enc); if (CHAR_MATCHES(enc, ptr, ASCII_x)) { for (ptr += MINBPC(enc); !CHAR_MATCHES(enc, ptr, ASCII_SEMI); ptr += MINBPC(enc)) { int c = BYTE_TO_ASCII(enc, ptr); switch (c) { case ASCII_0: case ASCII_1: case ASCII_2: case ASCII_3: case ASCII_4: case ASCII_5: case ASCII_6: case ASCII_7: case ASCII_8: case ASCII_9: result <<= 4; result |= (c - ASCII_0); break; case ASCII_A: case ASCII_B: case ASCII_C: case ASCII_D: case ASCII_E: case ASCII_F: result <<= 4; result += 10 + (c - ASCII_A); break; case ASCII_a: case ASCII_b: case ASCII_c: case ASCII_d: case ASCII_e: case ASCII_f: result <<= 4; result += 10 + (c - ASCII_a); break; } if (result >= 0x110000) return -1; } } else { for (; !CHAR_MATCHES(enc, ptr, ASCII_SEMI); ptr += MINBPC(enc)) { int c = BYTE_TO_ASCII(enc, ptr); result *= 10; result += (c - ASCII_0); if (result >= 0x110000) return -1; } } return checkCharRefNumber(result); } static int PTRCALL PREFIX(predefinedEntityName)(const ENCODING *enc, const char *ptr, const char *end) { switch ((end - ptr)/MINBPC(enc)) { case 2: if (CHAR_MATCHES(enc, ptr + MINBPC(enc), ASCII_t)) { switch (BYTE_TO_ASCII(enc, ptr)) { case ASCII_l: return ASCII_LT; case ASCII_g: return ASCII_GT; } } break; case 3: if (CHAR_MATCHES(enc, ptr, ASCII_a)) { ptr += MINBPC(enc); if (CHAR_MATCHES(enc, ptr, ASCII_m)) { ptr += MINBPC(enc); if (CHAR_MATCHES(enc, ptr, ASCII_p)) return ASCII_AMP; } } break; case 4: switch (BYTE_TO_ASCII(enc, ptr)) { case ASCII_q: ptr += MINBPC(enc); if (CHAR_MATCHES(enc, ptr, ASCII_u)) { ptr += MINBPC(enc); if (CHAR_MATCHES(enc, ptr, ASCII_o)) { ptr += MINBPC(enc); if (CHAR_MATCHES(enc, ptr, ASCII_t)) return ASCII_QUOT; } } break; case ASCII_a: ptr += MINBPC(enc); if (CHAR_MATCHES(enc, ptr, ASCII_p)) { ptr += MINBPC(enc); if (CHAR_MATCHES(enc, ptr, ASCII_o)) { ptr += MINBPC(enc); if (CHAR_MATCHES(enc, ptr, ASCII_s)) return ASCII_APOS; } } break; } } return 0; } static int PTRCALL PREFIX(sameName)(const ENCODING *enc, const char *ptr1, const char *ptr2) { for (;;) { switch (BYTE_TYPE(enc, ptr1)) { #define LEAD_CASE(n) \ case BT_LEAD ## n: \ if (*ptr1++ != *ptr2++) \ return 0; LEAD_CASE(4) LEAD_CASE(3) LEAD_CASE(2) #undef LEAD_CASE /* fall through */ if (*ptr1++ != *ptr2++) return 0; break; case BT_NONASCII: case BT_NMSTRT: #ifdef XML_NS case BT_COLON: #endif case BT_HEX: case BT_DIGIT: case BT_NAME: case BT_MINUS: if (*ptr2++ != *ptr1++) return 0; if (MINBPC(enc) > 1) { if (*ptr2++ != *ptr1++) return 0; if (MINBPC(enc) > 2) { if (*ptr2++ != *ptr1++) return 0; if (MINBPC(enc) > 3) { if (*ptr2++ != *ptr1++) return 0; } } } break; default: if (MINBPC(enc) == 1 && *ptr1 == *ptr2) return 1; switch (BYTE_TYPE(enc, ptr2)) { case BT_LEAD2: case BT_LEAD3: case BT_LEAD4: case BT_NONASCII: case BT_NMSTRT: #ifdef XML_NS case BT_COLON: #endif case BT_HEX: case BT_DIGIT: case BT_NAME: case BT_MINUS: return 0; default: return 1; } } } /* not reached */ } static int PTRCALL PREFIX(nameMatchesAscii)(const ENCODING *enc, const char *ptr1, const char *end1, const char *ptr2) { for (; *ptr2; ptr1 += MINBPC(enc), ptr2++) { if (ptr1 == end1) return 0; if (!CHAR_MATCHES(enc, ptr1, *ptr2)) return 0; } return ptr1 == end1; } static int PTRFASTCALL PREFIX(nameLength)(const ENCODING *enc, const char *ptr) { const char *start = ptr; for (;;) { switch (BYTE_TYPE(enc, ptr)) { #define LEAD_CASE(n) \ case BT_LEAD ## n: ptr += n; break; LEAD_CASE(2) LEAD_CASE(3) LEAD_CASE(4) #undef LEAD_CASE case BT_NONASCII: case BT_NMSTRT: #ifdef XML_NS case BT_COLON: #endif case BT_HEX: case BT_DIGIT: case BT_NAME: case BT_MINUS: ptr += MINBPC(enc); break; default: return ptr - start; } } } static const char * PTRFASTCALL PREFIX(skipS)(const ENCODING *enc, const char *ptr) { for (;;) { switch (BYTE_TYPE(enc, ptr)) { case BT_LF: case BT_CR: case BT_S: ptr += MINBPC(enc); break; default: return ptr; } } } static void PTRCALL PREFIX(updatePosition)(const ENCODING *enc, const char *ptr, const char *end, POSITION *pos) { while (ptr != end) { switch (BYTE_TYPE(enc, ptr)) { #define LEAD_CASE(n) \ case BT_LEAD ## n: \ ptr += n; \ break; LEAD_CASE(2) LEAD_CASE(3) LEAD_CASE(4) #undef LEAD_CASE case BT_LF: pos->columnNumber = (unsigned)-1; pos->lineNumber++; ptr += MINBPC(enc); break; case BT_CR: pos->lineNumber++; ptr += MINBPC(enc); if (ptr != end && BYTE_TYPE(enc, ptr) == BT_LF) ptr += MINBPC(enc); pos->columnNumber = (unsigned)-1; break; default: ptr += MINBPC(enc); break; } pos->columnNumber++; } } #undef DO_LEAD_CASE #undef MULTIBYTE_CASES #undef INVALID_CASES #undef CHECK_NAME_CASE #undef CHECK_NAME_CASES #undef CHECK_NMSTRT_CASE #undef CHECK_NMSTRT_CASES tla-1.3.5+dfsg/src/expat/lib/nametab.h0000644000175000017500000001561210457621771016212 0ustar useruserstatic const unsigned namingBitmap[] = { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0x04000000, 0x87FFFFFE, 0x07FFFFFE, 0x00000000, 0x00000000, 0xFF7FFFFF, 0xFF7FFFFF, 0xFFFFFFFF, 0x7FF3FFFF, 0xFFFFFDFE, 0x7FFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFE00F, 0xFC31FFFF, 0x00FFFFFF, 0x00000000, 0xFFFF0000, 0xFFFFFFFF, 0xFFFFFFFF, 0xF80001FF, 0x00000003, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFD740, 0xFFFFFFFB, 0x547F7FFF, 0x000FFFFD, 0xFFFFDFFE, 0xFFFFFFFF, 0xDFFEFFFF, 0xFFFFFFFF, 0xFFFF0003, 0xFFFFFFFF, 0xFFFF199F, 0x033FCFFF, 0x00000000, 0xFFFE0000, 0x027FFFFF, 0xFFFFFFFE, 0x0000007F, 0x00000000, 0xFFFF0000, 0x000707FF, 0x00000000, 0x07FFFFFE, 0x000007FE, 0xFFFE0000, 0xFFFFFFFF, 0x7CFFFFFF, 0x002F7FFF, 0x00000060, 0xFFFFFFE0, 0x23FFFFFF, 0xFF000000, 0x00000003, 0xFFF99FE0, 0x03C5FDFF, 0xB0000000, 0x00030003, 0xFFF987E0, 0x036DFDFF, 0x5E000000, 0x001C0000, 0xFFFBAFE0, 0x23EDFDFF, 0x00000000, 0x00000001, 0xFFF99FE0, 0x23CDFDFF, 0xB0000000, 0x00000003, 0xD63DC7E0, 0x03BFC718, 0x00000000, 0x00000000, 0xFFFDDFE0, 0x03EFFDFF, 0x00000000, 0x00000003, 0xFFFDDFE0, 0x03EFFDFF, 0x40000000, 0x00000003, 0xFFFDDFE0, 0x03FFFDFF, 0x00000000, 0x00000003, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFE, 0x000D7FFF, 0x0000003F, 0x00000000, 0xFEF02596, 0x200D6CAE, 0x0000001F, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFEFF, 0x000003FF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFF003F, 0x007FFFFF, 0x0007DAED, 0x50000000, 0x82315001, 0x002C62AB, 0x40000000, 0xF580C900, 0x00000007, 0x02010800, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x0FFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x03FFFFFF, 0x3F3FFFFF, 0xFFFFFFFF, 0xAAFF3F3F, 0x3FFFFFFF, 0xFFFFFFFF, 0x5FDFFFFF, 0x0FCF1FDC, 0x1FDC1FFF, 0x00000000, 0x00004C40, 0x00000000, 0x00000000, 0x00000007, 0x00000000, 0x00000000, 0x00000000, 0x00000080, 0x000003FE, 0xFFFFFFFE, 0xFFFFFFFF, 0x001FFFFF, 0xFFFFFFFE, 0xFFFFFFFF, 0x07FFFFFF, 0xFFFFFFE0, 0x00001FFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x0000003F, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x0000000F, 0x00000000, 0x00000000, 0x00000000, 0x07FF6000, 0x87FFFFFE, 0x07FFFFFE, 0x00000000, 0x00800000, 0xFF7FFFFF, 0xFF7FFFFF, 0x00FFFFFF, 0x00000000, 0xFFFF0000, 0xFFFFFFFF, 0xFFFFFFFF, 0xF80001FF, 0x00030003, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0x0000003F, 0x00000003, 0xFFFFD7C0, 0xFFFFFFFB, 0x547F7FFF, 0x000FFFFD, 0xFFFFDFFE, 0xFFFFFFFF, 0xDFFEFFFF, 0xFFFFFFFF, 0xFFFF007B, 0xFFFFFFFF, 0xFFFF199F, 0x033FCFFF, 0x00000000, 0xFFFE0000, 0x027FFFFF, 0xFFFFFFFE, 0xFFFE007F, 0xBBFFFFFB, 0xFFFF0016, 0x000707FF, 0x00000000, 0x07FFFFFE, 0x0007FFFF, 0xFFFF03FF, 0xFFFFFFFF, 0x7CFFFFFF, 0xFFEF7FFF, 0x03FF3DFF, 0xFFFFFFEE, 0xF3FFFFFF, 0xFF1E3FFF, 0x0000FFCF, 0xFFF99FEE, 0xD3C5FDFF, 0xB080399F, 0x0003FFCF, 0xFFF987E4, 0xD36DFDFF, 0x5E003987, 0x001FFFC0, 0xFFFBAFEE, 0xF3EDFDFF, 0x00003BBF, 0x0000FFC1, 0xFFF99FEE, 0xF3CDFDFF, 0xB0C0398F, 0x0000FFC3, 0xD63DC7EC, 0xC3BFC718, 0x00803DC7, 0x0000FF80, 0xFFFDDFEE, 0xC3EFFDFF, 0x00603DDF, 0x0000FFC3, 0xFFFDDFEC, 0xC3EFFDFF, 0x40603DDF, 0x0000FFC3, 0xFFFDDFEC, 0xC3FFFDFF, 0x00803DCF, 0x0000FFC3, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFE, 0x07FF7FFF, 0x03FF7FFF, 0x00000000, 0xFEF02596, 0x3BFF6CAE, 0x03FF3F5F, 0x00000000, 0x03000000, 0xC2A003FF, 0xFFFFFEFF, 0xFFFE03FF, 0xFEBF0FDF, 0x02FE3FFF, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x1FFF0000, 0x00000002, 0x000000A0, 0x003EFFFE, 0xFFFFFFFE, 0xFFFFFFFF, 0x661FFFFF, 0xFFFFFFFE, 0xFFFFFFFF, 0x77FFFFFF, }; static const unsigned char nmstrtPages[] = { 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x00, 0x00, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x13, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; static const unsigned char namePages[] = { 0x19, 0x03, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x00, 0x00, 0x1F, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x10, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x13, 0x26, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x27, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; tla-1.3.5+dfsg/src/expat/lib/macconfig.h0000644000175000017500000000245510457621771016532 0ustar useruser/*================================================================ ** Copyright 2000, Clark Cooper ** All rights reserved. ** ** This is free software. You are permitted to copy, distribute, or modify ** it under the terms of the MIT/X license (contained in the COPYING file ** with this distribution.) ** */ #ifndef MACCONFIG_H #define MACCONFIG_H /* 1234 = LIL_ENDIAN, 4321 = BIGENDIAN */ #define BYTEORDER 4321 /* Define to 1 if you have the `bcopy' function. */ #undef HAVE_BCOPY /* Define to 1 if you have the `memmove' function. */ #define HAVE_MEMMOVE /* Define to 1 if you have a working `mmap' system call. */ #undef HAVE_MMAP /* Define to 1 if you have the header file. */ #undef HAVE_UNISTD_H /* whether byteorder is bigendian */ #define WORDS_BIGENDIAN /* Define to specify how much context to retain around the current parse point. */ #undef XML_CONTEXT_BYTES /* Define to make parameter entity parsing functionality available. */ #define XML_DTD /* Define to make XML Namespaces functionality available. */ #define XML_NS /* Define to empty if `const' does not conform to ANSI C. */ #undef const /* Define to `long' if does not define. */ #define off_t long /* Define to `unsigned' if does not define. */ #undef size_t #endif /* ifndef MACCONFIG_H */ tla-1.3.5+dfsg/src/expat/lib/xmlparse.c0000644000175000017500000056131210457621771016434 0ustar useruser/* Copyright (c) 1998, 1999, 2000 Thai Open Source Software Center Ltd See the file COPYING for copying permission. */ #include #include /* memset(), memcpy() */ #include #define XML_BUILDING_EXPAT 1 #ifdef COMPILED_FROM_DSP #include "winconfig.h" #elif defined(MACOS_CLASSIC) #include "macconfig.h" #elif defined(HAVE_EXPAT_CONFIG_H) #include #endif /* ndef COMPILED_FROM_DSP */ #include "expat.h" #ifdef XML_UNICODE #define XML_ENCODE_MAX XML_UTF16_ENCODE_MAX #define XmlConvert XmlUtf16Convert #define XmlGetInternalEncoding XmlGetUtf16InternalEncoding #define XmlGetInternalEncodingNS XmlGetUtf16InternalEncodingNS #define XmlEncode XmlUtf16Encode #define MUST_CONVERT(enc, s) (!(enc)->isUtf16 || (((unsigned long)s) & 1)) typedef unsigned short ICHAR; #else #define XML_ENCODE_MAX XML_UTF8_ENCODE_MAX #define XmlConvert XmlUtf8Convert #define XmlGetInternalEncoding XmlGetUtf8InternalEncoding #define XmlGetInternalEncodingNS XmlGetUtf8InternalEncodingNS #define XmlEncode XmlUtf8Encode #define MUST_CONVERT(enc, s) (!(enc)->isUtf8) typedef char ICHAR; #endif #ifndef XML_NS #define XmlInitEncodingNS XmlInitEncoding #define XmlInitUnknownEncodingNS XmlInitUnknownEncoding #undef XmlGetInternalEncodingNS #define XmlGetInternalEncodingNS XmlGetInternalEncoding #define XmlParseXmlDeclNS XmlParseXmlDecl #endif #ifdef XML_UNICODE #ifdef XML_UNICODE_WCHAR_T #define XML_T(x) (const wchar_t)x #define XML_L(x) L ## x #else #define XML_T(x) (const unsigned short)x #define XML_L(x) x #endif #else #define XML_T(x) x #define XML_L(x) x #endif /* Round up n to be a multiple of sz, where sz is a power of 2. */ #define ROUND_UP(n, sz) (((n) + ((sz) - 1)) & ~((sz) - 1)) /* Handle the case where memmove() doesn't exist. */ #ifndef HAVE_MEMMOVE #ifdef HAVE_BCOPY #define memmove(d,s,l) bcopy((s),(d),(l)) #else #error memmove does not exist on this platform, nor is a substitute available #endif /* HAVE_BCOPY */ #endif /* HAVE_MEMMOVE */ #include "internal.h" #include "xmltok.h" #include "xmlrole.h" typedef const XML_Char *KEY; typedef struct { KEY name; } NAMED; typedef struct { NAMED **v; unsigned char power; size_t size; size_t used; const XML_Memory_Handling_Suite *mem; } HASH_TABLE; /* Basic character hash algorithm, taken from Python's string hash: h = h * 1000003 ^ character, the constant being a prime number. */ #ifdef XML_UNICODE #define CHAR_HASH(h, c) \ (((h) * 0xF4243) ^ (unsigned short)(c)) #else #define CHAR_HASH(h, c) \ (((h) * 0xF4243) ^ (unsigned char)(c)) #endif /* For probing (after a collision) we need a step size relative prime to the hash table size, which is a power of 2. We use double-hashing, since we can calculate a second hash value cheaply by taking those bits of the first hash value that were discarded (masked out) when the table index was calculated: index = hash & mask, where mask = table->size - 1. We limit the maximum step size to table->size / 4 (mask >> 2) and make it odd, since odd numbers are always relative prime to a power of 2. */ #define SECOND_HASH(hash, mask, power) \ ((((hash) & ~(mask)) >> ((power) - 1)) & ((mask) >> 2)) #define PROBE_STEP(hash, mask, power) \ ((unsigned char)((SECOND_HASH(hash, mask, power)) | 1)) typedef struct { NAMED **p; NAMED **end; } HASH_TABLE_ITER; #define INIT_TAG_BUF_SIZE 32 /* must be a multiple of sizeof(XML_Char) */ #define INIT_DATA_BUF_SIZE 1024 #define INIT_ATTS_SIZE 16 #define INIT_ATTS_VERSION 0xFFFFFFFF #define INIT_BLOCK_SIZE 1024 #define INIT_BUFFER_SIZE 1024 #define EXPAND_SPARE 24 typedef struct binding { struct prefix *prefix; struct binding *nextTagBinding; struct binding *prevPrefixBinding; const struct attribute_id *attId; XML_Char *uri; int uriLen; int uriAlloc; } BINDING; typedef struct prefix { const XML_Char *name; BINDING *binding; } PREFIX; typedef struct { const XML_Char *str; const XML_Char *localPart; const XML_Char *prefix; int strLen; int uriLen; int prefixLen; } TAG_NAME; /* TAG represents an open element. The name of the element is stored in both the document and API encodings. The memory buffer 'buf' is a separately-allocated memory area which stores the name. During the XML_Parse()/ XMLParseBuffer() when the element is open, the memory for the 'raw' version of the name (in the document encoding) is shared with the document buffer. If the element is open across calls to XML_Parse()/XML_ParseBuffer(), the buffer is re-allocated to contain the 'raw' name as well. A parser re-uses these structures, maintaining a list of allocated TAG objects in a free list. */ typedef struct tag { struct tag *parent; /* parent of this element */ const char *rawName; /* tagName in the original encoding */ int rawNameLength; TAG_NAME name; /* tagName in the API encoding */ char *buf; /* buffer for name components */ char *bufEnd; /* end of the buffer */ BINDING *bindings; } TAG; typedef struct { const XML_Char *name; const XML_Char *textPtr; int textLen; /* length in XML_Chars */ int processed; /* # of processed bytes - when suspended */ const XML_Char *systemId; const XML_Char *base; const XML_Char *publicId; const XML_Char *notation; XML_Bool open; XML_Bool is_param; XML_Bool is_internal; /* true if declared in internal subset outside PE */ } ENTITY; typedef struct { enum XML_Content_Type type; enum XML_Content_Quant quant; const XML_Char * name; int firstchild; int lastchild; int childcnt; int nextsib; } CONTENT_SCAFFOLD; #define INIT_SCAFFOLD_ELEMENTS 32 typedef struct block { struct block *next; int size; XML_Char s[1]; } BLOCK; typedef struct { BLOCK *blocks; BLOCK *freeBlocks; const XML_Char *end; XML_Char *ptr; XML_Char *start; const XML_Memory_Handling_Suite *mem; } STRING_POOL; /* The XML_Char before the name is used to determine whether an attribute has been specified. */ typedef struct attribute_id { XML_Char *name; PREFIX *prefix; XML_Bool maybeTokenized; XML_Bool xmlns; } ATTRIBUTE_ID; typedef struct { const ATTRIBUTE_ID *id; XML_Bool isCdata; const XML_Char *value; } DEFAULT_ATTRIBUTE; typedef struct { unsigned long version; unsigned long hash; const XML_Char *uriName; } NS_ATT; typedef struct { const XML_Char *name; PREFIX *prefix; const ATTRIBUTE_ID *idAtt; int nDefaultAtts; int allocDefaultAtts; DEFAULT_ATTRIBUTE *defaultAtts; } ELEMENT_TYPE; typedef struct { HASH_TABLE generalEntities; HASH_TABLE elementTypes; HASH_TABLE attributeIds; HASH_TABLE prefixes; STRING_POOL pool; STRING_POOL entityValuePool; /* false once a parameter entity reference has been skipped */ XML_Bool keepProcessing; /* true once an internal or external PE reference has been encountered; this includes the reference to an external subset */ XML_Bool hasParamEntityRefs; XML_Bool standalone; #ifdef XML_DTD /* indicates if external PE has been read */ XML_Bool paramEntityRead; HASH_TABLE paramEntities; #endif /* XML_DTD */ PREFIX defaultPrefix; /* === scaffolding for building content model === */ XML_Bool in_eldecl; CONTENT_SCAFFOLD *scaffold; unsigned contentStringLen; unsigned scaffSize; unsigned scaffCount; int scaffLevel; int *scaffIndex; } DTD; typedef struct open_internal_entity { const char *internalEventPtr; const char *internalEventEndPtr; struct open_internal_entity *next; ENTITY *entity; int startTagLevel; XML_Bool betweenDecl; /* WFC: PE Between Declarations */ } OPEN_INTERNAL_ENTITY; typedef enum XML_Error PTRCALL Processor(XML_Parser parser, const char *start, const char *end, const char **endPtr); static Processor prologProcessor; static Processor prologInitProcessor; static Processor contentProcessor; static Processor cdataSectionProcessor; #ifdef XML_DTD static Processor ignoreSectionProcessor; static Processor externalParEntProcessor; static Processor externalParEntInitProcessor; static Processor entityValueProcessor; static Processor entityValueInitProcessor; #endif /* XML_DTD */ static Processor epilogProcessor; static Processor errorProcessor; static Processor externalEntityInitProcessor; static Processor externalEntityInitProcessor2; static Processor externalEntityInitProcessor3; static Processor externalEntityContentProcessor; static Processor internalEntityProcessor; static enum XML_Error handleUnknownEncoding(XML_Parser parser, const XML_Char *encodingName); static enum XML_Error processXmlDecl(XML_Parser parser, int isGeneralTextEntity, const char *s, const char *next); static enum XML_Error initializeEncoding(XML_Parser parser); static enum XML_Error doProlog(XML_Parser parser, const ENCODING *enc, const char *s, const char *end, int tok, const char *next, const char **nextPtr, XML_Bool haveMore); static enum XML_Error processInternalEntity(XML_Parser parser, ENTITY *entity, XML_Bool betweenDecl); static enum XML_Error doContent(XML_Parser parser, int startTagLevel, const ENCODING *enc, const char *start, const char *end, const char **endPtr, XML_Bool haveMore); static enum XML_Error doCdataSection(XML_Parser parser, const ENCODING *, const char **startPtr, const char *end, const char **nextPtr, XML_Bool haveMore); #ifdef XML_DTD static enum XML_Error doIgnoreSection(XML_Parser parser, const ENCODING *, const char **startPtr, const char *end, const char **nextPtr, XML_Bool haveMore); #endif /* XML_DTD */ static enum XML_Error storeAtts(XML_Parser parser, const ENCODING *, const char *s, TAG_NAME *tagNamePtr, BINDING **bindingsPtr); static enum XML_Error addBinding(XML_Parser parser, PREFIX *prefix, const ATTRIBUTE_ID *attId, const XML_Char *uri, BINDING **bindingsPtr); static int defineAttribute(ELEMENT_TYPE *type, ATTRIBUTE_ID *, XML_Bool isCdata, XML_Bool isId, const XML_Char *dfltValue, XML_Parser parser); static enum XML_Error storeAttributeValue(XML_Parser parser, const ENCODING *, XML_Bool isCdata, const char *, const char *, STRING_POOL *); static enum XML_Error appendAttributeValue(XML_Parser parser, const ENCODING *, XML_Bool isCdata, const char *, const char *, STRING_POOL *); static ATTRIBUTE_ID * getAttributeId(XML_Parser parser, const ENCODING *enc, const char *start, const char *end); static int setElementTypePrefix(XML_Parser parser, ELEMENT_TYPE *); static enum XML_Error storeEntityValue(XML_Parser parser, const ENCODING *enc, const char *start, const char *end); static int reportProcessingInstruction(XML_Parser parser, const ENCODING *enc, const char *start, const char *end); static int reportComment(XML_Parser parser, const ENCODING *enc, const char *start, const char *end); static void reportDefault(XML_Parser parser, const ENCODING *enc, const char *start, const char *end); static const XML_Char * getContext(XML_Parser parser); static XML_Bool setContext(XML_Parser parser, const XML_Char *context); static void FASTCALL normalizePublicId(XML_Char *s); static DTD * dtdCreate(const XML_Memory_Handling_Suite *ms); /* do not call if parentParser != NULL */ static void dtdReset(DTD *p, const XML_Memory_Handling_Suite *ms); static void dtdDestroy(DTD *p, XML_Bool isDocEntity, const XML_Memory_Handling_Suite *ms); static int dtdCopy(DTD *newDtd, const DTD *oldDtd, const XML_Memory_Handling_Suite *ms); static int copyEntityTable(HASH_TABLE *, STRING_POOL *, const HASH_TABLE *); static NAMED * lookup(HASH_TABLE *table, KEY name, size_t createSize); static void FASTCALL hashTableInit(HASH_TABLE *, const XML_Memory_Handling_Suite *ms); static void FASTCALL hashTableClear(HASH_TABLE *); static void FASTCALL hashTableDestroy(HASH_TABLE *); static void FASTCALL hashTableIterInit(HASH_TABLE_ITER *, const HASH_TABLE *); static NAMED * FASTCALL hashTableIterNext(HASH_TABLE_ITER *); static void FASTCALL poolInit(STRING_POOL *, const XML_Memory_Handling_Suite *ms); static void FASTCALL poolClear(STRING_POOL *); static void FASTCALL poolDestroy(STRING_POOL *); static XML_Char * poolAppend(STRING_POOL *pool, const ENCODING *enc, const char *ptr, const char *end); static XML_Char * poolStoreString(STRING_POOL *pool, const ENCODING *enc, const char *ptr, const char *end); static XML_Bool FASTCALL poolGrow(STRING_POOL *pool); static const XML_Char * FASTCALL poolCopyString(STRING_POOL *pool, const XML_Char *s); static const XML_Char * poolCopyStringN(STRING_POOL *pool, const XML_Char *s, int n); static const XML_Char * FASTCALL poolAppendString(STRING_POOL *pool, const XML_Char *s); static int FASTCALL nextScaffoldPart(XML_Parser parser); static XML_Content * build_model(XML_Parser parser); static ELEMENT_TYPE * getElementType(XML_Parser parser, const ENCODING *enc, const char *ptr, const char *end); static XML_Parser parserCreate(const XML_Char *encodingName, const XML_Memory_Handling_Suite *memsuite, const XML_Char *nameSep, DTD *dtd); static void parserInit(XML_Parser parser, const XML_Char *encodingName); #define poolStart(pool) ((pool)->start) #define poolEnd(pool) ((pool)->ptr) #define poolLength(pool) ((pool)->ptr - (pool)->start) #define poolChop(pool) ((void)--(pool->ptr)) #define poolLastChar(pool) (((pool)->ptr)[-1]) #define poolDiscard(pool) ((pool)->ptr = (pool)->start) #define poolFinish(pool) ((pool)->start = (pool)->ptr) #define poolAppendChar(pool, c) \ (((pool)->ptr == (pool)->end && !poolGrow(pool)) \ ? 0 \ : ((*((pool)->ptr)++ = c), 1)) struct XML_ParserStruct { /* The first member must be userData so that the XML_GetUserData macro works. */ void *m_userData; void *m_handlerArg; char *m_buffer; const XML_Memory_Handling_Suite m_mem; /* first character to be parsed */ const char *m_bufferPtr; /* past last character to be parsed */ char *m_bufferEnd; /* allocated end of buffer */ const char *m_bufferLim; long m_parseEndByteIndex; const char *m_parseEndPtr; XML_Char *m_dataBuf; XML_Char *m_dataBufEnd; XML_StartElementHandler m_startElementHandler; XML_EndElementHandler m_endElementHandler; XML_CharacterDataHandler m_characterDataHandler; XML_ProcessingInstructionHandler m_processingInstructionHandler; XML_CommentHandler m_commentHandler; XML_StartCdataSectionHandler m_startCdataSectionHandler; XML_EndCdataSectionHandler m_endCdataSectionHandler; XML_DefaultHandler m_defaultHandler; XML_StartDoctypeDeclHandler m_startDoctypeDeclHandler; XML_EndDoctypeDeclHandler m_endDoctypeDeclHandler; XML_UnparsedEntityDeclHandler m_unparsedEntityDeclHandler; XML_NotationDeclHandler m_notationDeclHandler; XML_StartNamespaceDeclHandler m_startNamespaceDeclHandler; XML_EndNamespaceDeclHandler m_endNamespaceDeclHandler; XML_NotStandaloneHandler m_notStandaloneHandler; XML_ExternalEntityRefHandler m_externalEntityRefHandler; XML_Parser m_externalEntityRefHandlerArg; XML_SkippedEntityHandler m_skippedEntityHandler; XML_UnknownEncodingHandler m_unknownEncodingHandler; XML_ElementDeclHandler m_elementDeclHandler; XML_AttlistDeclHandler m_attlistDeclHandler; XML_EntityDeclHandler m_entityDeclHandler; XML_XmlDeclHandler m_xmlDeclHandler; const ENCODING *m_encoding; INIT_ENCODING m_initEncoding; const ENCODING *m_internalEncoding; const XML_Char *m_protocolEncodingName; XML_Bool m_ns; XML_Bool m_ns_triplets; void *m_unknownEncodingMem; void *m_unknownEncodingData; void *m_unknownEncodingHandlerData; void (XMLCALL *m_unknownEncodingRelease)(void *); PROLOG_STATE m_prologState; Processor *m_processor; enum XML_Error m_errorCode; const char *m_eventPtr; const char *m_eventEndPtr; const char *m_positionPtr; OPEN_INTERNAL_ENTITY *m_openInternalEntities; OPEN_INTERNAL_ENTITY *m_freeInternalEntities; XML_Bool m_defaultExpandInternalEntities; int m_tagLevel; ENTITY *m_declEntity; const XML_Char *m_doctypeName; const XML_Char *m_doctypeSysid; const XML_Char *m_doctypePubid; const XML_Char *m_declAttributeType; const XML_Char *m_declNotationName; const XML_Char *m_declNotationPublicId; ELEMENT_TYPE *m_declElementType; ATTRIBUTE_ID *m_declAttributeId; XML_Bool m_declAttributeIsCdata; XML_Bool m_declAttributeIsId; DTD *m_dtd; const XML_Char *m_curBase; TAG *m_tagStack; TAG *m_freeTagList; BINDING *m_inheritedBindings; BINDING *m_freeBindingList; int m_attsSize; int m_nSpecifiedAtts; int m_idAttIndex; ATTRIBUTE *m_atts; NS_ATT *m_nsAtts; unsigned long m_nsAttsVersion; unsigned char m_nsAttsPower; POSITION m_position; STRING_POOL m_tempPool; STRING_POOL m_temp2Pool; char *m_groupConnector; unsigned int m_groupSize; XML_Char m_namespaceSeparator; XML_Parser m_parentParser; XML_ParsingStatus m_parsingStatus; #ifdef XML_DTD XML_Bool m_isParamEntity; XML_Bool m_useForeignDTD; enum XML_ParamEntityParsing m_paramEntityParsing; #endif }; #define MALLOC(s) (parser->m_mem.malloc_fcn((s))) #define REALLOC(p,s) (parser->m_mem.realloc_fcn((p),(s))) #define FREE(p) (parser->m_mem.free_fcn((p))) #define userData (parser->m_userData) #define handlerArg (parser->m_handlerArg) #define startElementHandler (parser->m_startElementHandler) #define endElementHandler (parser->m_endElementHandler) #define characterDataHandler (parser->m_characterDataHandler) #define processingInstructionHandler \ (parser->m_processingInstructionHandler) #define commentHandler (parser->m_commentHandler) #define startCdataSectionHandler \ (parser->m_startCdataSectionHandler) #define endCdataSectionHandler (parser->m_endCdataSectionHandler) #define defaultHandler (parser->m_defaultHandler) #define startDoctypeDeclHandler (parser->m_startDoctypeDeclHandler) #define endDoctypeDeclHandler (parser->m_endDoctypeDeclHandler) #define unparsedEntityDeclHandler \ (parser->m_unparsedEntityDeclHandler) #define notationDeclHandler (parser->m_notationDeclHandler) #define startNamespaceDeclHandler \ (parser->m_startNamespaceDeclHandler) #define endNamespaceDeclHandler (parser->m_endNamespaceDeclHandler) #define notStandaloneHandler (parser->m_notStandaloneHandler) #define externalEntityRefHandler \ (parser->m_externalEntityRefHandler) #define externalEntityRefHandlerArg \ (parser->m_externalEntityRefHandlerArg) #define internalEntityRefHandler \ (parser->m_internalEntityRefHandler) #define skippedEntityHandler (parser->m_skippedEntityHandler) #define unknownEncodingHandler (parser->m_unknownEncodingHandler) #define elementDeclHandler (parser->m_elementDeclHandler) #define attlistDeclHandler (parser->m_attlistDeclHandler) #define entityDeclHandler (parser->m_entityDeclHandler) #define xmlDeclHandler (parser->m_xmlDeclHandler) #define encoding (parser->m_encoding) #define initEncoding (parser->m_initEncoding) #define internalEncoding (parser->m_internalEncoding) #define unknownEncodingMem (parser->m_unknownEncodingMem) #define unknownEncodingData (parser->m_unknownEncodingData) #define unknownEncodingHandlerData \ (parser->m_unknownEncodingHandlerData) #define unknownEncodingRelease (parser->m_unknownEncodingRelease) #define protocolEncodingName (parser->m_protocolEncodingName) #define ns (parser->m_ns) #define ns_triplets (parser->m_ns_triplets) #define prologState (parser->m_prologState) #define processor (parser->m_processor) #define errorCode (parser->m_errorCode) #define eventPtr (parser->m_eventPtr) #define eventEndPtr (parser->m_eventEndPtr) #define positionPtr (parser->m_positionPtr) #define position (parser->m_position) #define openInternalEntities (parser->m_openInternalEntities) #define freeInternalEntities (parser->m_freeInternalEntities) #define defaultExpandInternalEntities \ (parser->m_defaultExpandInternalEntities) #define tagLevel (parser->m_tagLevel) #define buffer (parser->m_buffer) #define bufferPtr (parser->m_bufferPtr) #define bufferEnd (parser->m_bufferEnd) #define parseEndByteIndex (parser->m_parseEndByteIndex) #define parseEndPtr (parser->m_parseEndPtr) #define bufferLim (parser->m_bufferLim) #define dataBuf (parser->m_dataBuf) #define dataBufEnd (parser->m_dataBufEnd) #define _dtd (parser->m_dtd) #define curBase (parser->m_curBase) #define declEntity (parser->m_declEntity) #define doctypeName (parser->m_doctypeName) #define doctypeSysid (parser->m_doctypeSysid) #define doctypePubid (parser->m_doctypePubid) #define declAttributeType (parser->m_declAttributeType) #define declNotationName (parser->m_declNotationName) #define declNotationPublicId (parser->m_declNotationPublicId) #define declElementType (parser->m_declElementType) #define declAttributeId (parser->m_declAttributeId) #define declAttributeIsCdata (parser->m_declAttributeIsCdata) #define declAttributeIsId (parser->m_declAttributeIsId) #define freeTagList (parser->m_freeTagList) #define freeBindingList (parser->m_freeBindingList) #define inheritedBindings (parser->m_inheritedBindings) #define tagStack (parser->m_tagStack) #define atts (parser->m_atts) #define attsSize (parser->m_attsSize) #define nSpecifiedAtts (parser->m_nSpecifiedAtts) #define idAttIndex (parser->m_idAttIndex) #define nsAtts (parser->m_nsAtts) #define nsAttsVersion (parser->m_nsAttsVersion) #define nsAttsPower (parser->m_nsAttsPower) #define tempPool (parser->m_tempPool) #define temp2Pool (parser->m_temp2Pool) #define groupConnector (parser->m_groupConnector) #define groupSize (parser->m_groupSize) #define namespaceSeparator (parser->m_namespaceSeparator) #define parentParser (parser->m_parentParser) #define parsing (parser->m_parsingStatus.parsing) #define finalBuffer (parser->m_parsingStatus.finalBuffer) #ifdef XML_DTD #define isParamEntity (parser->m_isParamEntity) #define useForeignDTD (parser->m_useForeignDTD) #define paramEntityParsing (parser->m_paramEntityParsing) #endif /* XML_DTD */ XML_Parser XMLCALL XML_ParserCreate(const XML_Char *encodingName) { return XML_ParserCreate_MM(encodingName, NULL, NULL); } XML_Parser XMLCALL XML_ParserCreateNS(const XML_Char *encodingName, XML_Char nsSep) { XML_Char tmp[2]; *tmp = nsSep; return XML_ParserCreate_MM(encodingName, NULL, tmp); } static const XML_Char implicitContext[] = { 'x', 'm', 'l', '=', 'h', 't', 't', 'p', ':', '/', '/', 'w', 'w', 'w', '.', 'w', '3', '.', 'o', 'r', 'g', '/', 'X', 'M', 'L', '/', '1', '9', '9', '8', '/', 'n', 'a', 'm', 'e', 's', 'p', 'a', 'c', 'e', '\0' }; XML_Parser XMLCALL XML_ParserCreate_MM(const XML_Char *encodingName, const XML_Memory_Handling_Suite *memsuite, const XML_Char *nameSep) { XML_Parser parser = parserCreate(encodingName, memsuite, nameSep, NULL); if (parser != NULL && ns) { /* implicit context only set for root parser, since child parsers (i.e. external entity parsers) will inherit it */ if (!setContext(parser, implicitContext)) { XML_ParserFree(parser); return NULL; } } return parser; } static XML_Parser parserCreate(const XML_Char *encodingName, const XML_Memory_Handling_Suite *memsuite, const XML_Char *nameSep, DTD *dtd) { XML_Parser parser; if (memsuite) { XML_Memory_Handling_Suite *mtemp; parser = (XML_Parser) memsuite->malloc_fcn(sizeof(struct XML_ParserStruct)); if (parser != NULL) { mtemp = (XML_Memory_Handling_Suite *)&(parser->m_mem); mtemp->malloc_fcn = memsuite->malloc_fcn; mtemp->realloc_fcn = memsuite->realloc_fcn; mtemp->free_fcn = memsuite->free_fcn; } } else { XML_Memory_Handling_Suite *mtemp; parser = (XML_Parser)malloc(sizeof(struct XML_ParserStruct)); if (parser != NULL) { mtemp = (XML_Memory_Handling_Suite *)&(parser->m_mem); mtemp->malloc_fcn = malloc; mtemp->realloc_fcn = realloc; mtemp->free_fcn = free; } } if (!parser) return parser; buffer = NULL; bufferLim = NULL; attsSize = INIT_ATTS_SIZE; atts = (ATTRIBUTE *)MALLOC(attsSize * sizeof(ATTRIBUTE)); if (atts == NULL) { FREE(parser); return NULL; } dataBuf = (XML_Char *)MALLOC(INIT_DATA_BUF_SIZE * sizeof(XML_Char)); if (dataBuf == NULL) { FREE(atts); FREE(parser); return NULL; } dataBufEnd = dataBuf + INIT_DATA_BUF_SIZE; if (dtd) _dtd = dtd; else { _dtd = dtdCreate(&parser->m_mem); if (_dtd == NULL) { FREE(dataBuf); FREE(atts); FREE(parser); return NULL; } } freeBindingList = NULL; freeTagList = NULL; freeInternalEntities = NULL; groupSize = 0; groupConnector = NULL; unknownEncodingHandler = NULL; unknownEncodingHandlerData = NULL; namespaceSeparator = '!'; ns = XML_FALSE; ns_triplets = XML_FALSE; nsAtts = NULL; nsAttsVersion = 0; nsAttsPower = 0; poolInit(&tempPool, &(parser->m_mem)); poolInit(&temp2Pool, &(parser->m_mem)); parserInit(parser, encodingName); if (encodingName && !protocolEncodingName) { XML_ParserFree(parser); return NULL; } if (nameSep) { ns = XML_TRUE; internalEncoding = XmlGetInternalEncodingNS(); namespaceSeparator = *nameSep; } else { internalEncoding = XmlGetInternalEncoding(); } return parser; } static void parserInit(XML_Parser parser, const XML_Char *encodingName) { processor = prologInitProcessor; XmlPrologStateInit(&prologState); protocolEncodingName = (encodingName != NULL ? poolCopyString(&tempPool, encodingName) : NULL); curBase = NULL; XmlInitEncoding(&initEncoding, &encoding, 0); userData = NULL; handlerArg = NULL; startElementHandler = NULL; endElementHandler = NULL; characterDataHandler = NULL; processingInstructionHandler = NULL; commentHandler = NULL; startCdataSectionHandler = NULL; endCdataSectionHandler = NULL; defaultHandler = NULL; startDoctypeDeclHandler = NULL; endDoctypeDeclHandler = NULL; unparsedEntityDeclHandler = NULL; notationDeclHandler = NULL; startNamespaceDeclHandler = NULL; endNamespaceDeclHandler = NULL; notStandaloneHandler = NULL; externalEntityRefHandler = NULL; externalEntityRefHandlerArg = parser; skippedEntityHandler = NULL; elementDeclHandler = NULL; attlistDeclHandler = NULL; entityDeclHandler = NULL; xmlDeclHandler = NULL; bufferPtr = buffer; bufferEnd = buffer; parseEndByteIndex = 0; parseEndPtr = NULL; declElementType = NULL; declAttributeId = NULL; declEntity = NULL; doctypeName = NULL; doctypeSysid = NULL; doctypePubid = NULL; declAttributeType = NULL; declNotationName = NULL; declNotationPublicId = NULL; declAttributeIsCdata = XML_FALSE; declAttributeIsId = XML_FALSE; memset(&position, 0, sizeof(POSITION)); errorCode = XML_ERROR_NONE; eventPtr = NULL; eventEndPtr = NULL; positionPtr = NULL; openInternalEntities = NULL; defaultExpandInternalEntities = XML_TRUE; tagLevel = 0; tagStack = NULL; inheritedBindings = NULL; nSpecifiedAtts = 0; unknownEncodingMem = NULL; unknownEncodingRelease = NULL; unknownEncodingData = NULL; parentParser = NULL; parsing = XML_INITIALIZED; #ifdef XML_DTD isParamEntity = XML_FALSE; useForeignDTD = XML_FALSE; paramEntityParsing = XML_PARAM_ENTITY_PARSING_NEVER; #endif } /* moves list of bindings to freeBindingList */ static void FASTCALL moveToFreeBindingList(XML_Parser parser, BINDING *bindings) { while (bindings) { BINDING *b = bindings; bindings = bindings->nextTagBinding; b->nextTagBinding = freeBindingList; freeBindingList = b; } } XML_Bool XMLCALL XML_ParserReset(XML_Parser parser, const XML_Char *encodingName) { TAG *tStk; OPEN_INTERNAL_ENTITY *openEntityList; if (parentParser) return XML_FALSE; /* move tagStack to freeTagList */ tStk = tagStack; while (tStk) { TAG *tag = tStk; tStk = tStk->parent; tag->parent = freeTagList; moveToFreeBindingList(parser, tag->bindings); tag->bindings = NULL; freeTagList = tag; } /* move openInternalEntities to freeInternalEntities */ openEntityList = openInternalEntities; while (openEntityList) { OPEN_INTERNAL_ENTITY *openEntity = openEntityList; openEntityList = openEntity->next; openEntity->next = freeInternalEntities; freeInternalEntities = openEntity; } moveToFreeBindingList(parser, inheritedBindings); FREE(unknownEncodingMem); if (unknownEncodingRelease) unknownEncodingRelease(unknownEncodingData); poolClear(&tempPool); poolClear(&temp2Pool); parserInit(parser, encodingName); dtdReset(_dtd, &parser->m_mem); return setContext(parser, implicitContext); } enum XML_Status XMLCALL XML_SetEncoding(XML_Parser parser, const XML_Char *encodingName) { /* Block after XML_Parse()/XML_ParseBuffer() has been called. XXX There's no way for the caller to determine which of the XXX possible error cases caused the XML_STATUS_ERROR return. */ if (parsing == XML_PARSING || parsing == XML_SUSPENDED) return XML_STATUS_ERROR; if (encodingName == NULL) protocolEncodingName = NULL; else { protocolEncodingName = poolCopyString(&tempPool, encodingName); if (!protocolEncodingName) return XML_STATUS_ERROR; } return XML_STATUS_OK; } XML_Parser XMLCALL XML_ExternalEntityParserCreate(XML_Parser oldParser, const XML_Char *context, const XML_Char *encodingName) { XML_Parser parser = oldParser; DTD *newDtd = NULL; DTD *oldDtd = _dtd; XML_StartElementHandler oldStartElementHandler = startElementHandler; XML_EndElementHandler oldEndElementHandler = endElementHandler; XML_CharacterDataHandler oldCharacterDataHandler = characterDataHandler; XML_ProcessingInstructionHandler oldProcessingInstructionHandler = processingInstructionHandler; XML_CommentHandler oldCommentHandler = commentHandler; XML_StartCdataSectionHandler oldStartCdataSectionHandler = startCdataSectionHandler; XML_EndCdataSectionHandler oldEndCdataSectionHandler = endCdataSectionHandler; XML_DefaultHandler oldDefaultHandler = defaultHandler; XML_UnparsedEntityDeclHandler oldUnparsedEntityDeclHandler = unparsedEntityDeclHandler; XML_NotationDeclHandler oldNotationDeclHandler = notationDeclHandler; XML_StartNamespaceDeclHandler oldStartNamespaceDeclHandler = startNamespaceDeclHandler; XML_EndNamespaceDeclHandler oldEndNamespaceDeclHandler = endNamespaceDeclHandler; XML_NotStandaloneHandler oldNotStandaloneHandler = notStandaloneHandler; XML_ExternalEntityRefHandler oldExternalEntityRefHandler = externalEntityRefHandler; XML_SkippedEntityHandler oldSkippedEntityHandler = skippedEntityHandler; XML_UnknownEncodingHandler oldUnknownEncodingHandler = unknownEncodingHandler; XML_ElementDeclHandler oldElementDeclHandler = elementDeclHandler; XML_AttlistDeclHandler oldAttlistDeclHandler = attlistDeclHandler; XML_EntityDeclHandler oldEntityDeclHandler = entityDeclHandler; XML_XmlDeclHandler oldXmlDeclHandler = xmlDeclHandler; ELEMENT_TYPE * oldDeclElementType = declElementType; void *oldUserData = userData; void *oldHandlerArg = handlerArg; XML_Bool oldDefaultExpandInternalEntities = defaultExpandInternalEntities; XML_Parser oldExternalEntityRefHandlerArg = externalEntityRefHandlerArg; #ifdef XML_DTD enum XML_ParamEntityParsing oldParamEntityParsing = paramEntityParsing; int oldInEntityValue = prologState.inEntityValue; #endif XML_Bool oldns_triplets = ns_triplets; #ifdef XML_DTD if (!context) newDtd = oldDtd; #endif /* XML_DTD */ /* Note that the magical uses of the pre-processor to make field access look more like C++ require that `parser' be overwritten here. This makes this function more painful to follow than it would be otherwise. */ if (ns) { XML_Char tmp[2]; *tmp = namespaceSeparator; parser = parserCreate(encodingName, &parser->m_mem, tmp, newDtd); } else { parser = parserCreate(encodingName, &parser->m_mem, NULL, newDtd); } if (!parser) return NULL; startElementHandler = oldStartElementHandler; endElementHandler = oldEndElementHandler; characterDataHandler = oldCharacterDataHandler; processingInstructionHandler = oldProcessingInstructionHandler; commentHandler = oldCommentHandler; startCdataSectionHandler = oldStartCdataSectionHandler; endCdataSectionHandler = oldEndCdataSectionHandler; defaultHandler = oldDefaultHandler; unparsedEntityDeclHandler = oldUnparsedEntityDeclHandler; notationDeclHandler = oldNotationDeclHandler; startNamespaceDeclHandler = oldStartNamespaceDeclHandler; endNamespaceDeclHandler = oldEndNamespaceDeclHandler; notStandaloneHandler = oldNotStandaloneHandler; externalEntityRefHandler = oldExternalEntityRefHandler; skippedEntityHandler = oldSkippedEntityHandler; unknownEncodingHandler = oldUnknownEncodingHandler; elementDeclHandler = oldElementDeclHandler; attlistDeclHandler = oldAttlistDeclHandler; entityDeclHandler = oldEntityDeclHandler; xmlDeclHandler = oldXmlDeclHandler; declElementType = oldDeclElementType; userData = oldUserData; if (oldUserData == oldHandlerArg) handlerArg = userData; else handlerArg = parser; if (oldExternalEntityRefHandlerArg != oldParser) externalEntityRefHandlerArg = oldExternalEntityRefHandlerArg; defaultExpandInternalEntities = oldDefaultExpandInternalEntities; ns_triplets = oldns_triplets; parentParser = oldParser; #ifdef XML_DTD paramEntityParsing = oldParamEntityParsing; prologState.inEntityValue = oldInEntityValue; if (context) { #endif /* XML_DTD */ if (!dtdCopy(_dtd, oldDtd, &parser->m_mem) || !setContext(parser, context)) { XML_ParserFree(parser); return NULL; } processor = externalEntityInitProcessor; #ifdef XML_DTD } else { /* The DTD instance referenced by _dtd is shared between the document's root parser and external PE parsers, therefore one does not need to call setContext. In addition, one also *must* not call setContext, because this would overwrite existing prefix->binding pointers in _dtd with ones that get destroyed with the external PE parser. This would leave those prefixes with dangling pointers. */ isParamEntity = XML_TRUE; XmlPrologStateInitExternalEntity(&prologState); processor = externalParEntInitProcessor; } #endif /* XML_DTD */ return parser; } static void FASTCALL destroyBindings(BINDING *bindings, XML_Parser parser) { for (;;) { BINDING *b = bindings; if (!b) break; bindings = b->nextTagBinding; FREE(b->uri); FREE(b); } } void XMLCALL XML_ParserFree(XML_Parser parser) { TAG *tagList; OPEN_INTERNAL_ENTITY *entityList; if (parser == NULL) return; /* free tagStack and freeTagList */ tagList = tagStack; for (;;) { TAG *p; if (tagList == NULL) { if (freeTagList == NULL) break; tagList = freeTagList; freeTagList = NULL; } p = tagList; tagList = tagList->parent; FREE(p->buf); destroyBindings(p->bindings, parser); FREE(p); } /* free openInternalEntities and freeInternalEntities */ entityList = openInternalEntities; for (;;) { OPEN_INTERNAL_ENTITY *openEntity; if (entityList == NULL) { if (freeInternalEntities == NULL) break; entityList = freeInternalEntities; freeInternalEntities = NULL; } openEntity = entityList; entityList = entityList->next; FREE(openEntity); } destroyBindings(freeBindingList, parser); destroyBindings(inheritedBindings, parser); poolDestroy(&tempPool); poolDestroy(&temp2Pool); #ifdef XML_DTD /* external parameter entity parsers share the DTD structure parser->m_dtd with the root parser, so we must not destroy it */ if (!isParamEntity && _dtd) #else if (_dtd) #endif /* XML_DTD */ dtdDestroy(_dtd, (XML_Bool)!parentParser, &parser->m_mem); FREE((void *)atts); FREE(groupConnector); FREE(buffer); FREE(dataBuf); FREE(nsAtts); FREE(unknownEncodingMem); if (unknownEncodingRelease) unknownEncodingRelease(unknownEncodingData); FREE(parser); } void XMLCALL XML_UseParserAsHandlerArg(XML_Parser parser) { handlerArg = parser; } enum XML_Error XMLCALL XML_UseForeignDTD(XML_Parser parser, XML_Bool useDTD) { #ifdef XML_DTD /* block after XML_Parse()/XML_ParseBuffer() has been called */ if (parsing == XML_PARSING || parsing == XML_SUSPENDED) return XML_ERROR_CANT_CHANGE_FEATURE_ONCE_PARSING; useForeignDTD = useDTD; return XML_ERROR_NONE; #else return XML_ERROR_FEATURE_REQUIRES_XML_DTD; #endif } void XMLCALL XML_SetReturnNSTriplet(XML_Parser parser, int do_nst) { /* block after XML_Parse()/XML_ParseBuffer() has been called */ if (parsing == XML_PARSING || parsing == XML_SUSPENDED) return; ns_triplets = do_nst ? XML_TRUE : XML_FALSE; } void XMLCALL XML_SetUserData(XML_Parser parser, void *p) { if (handlerArg == userData) handlerArg = userData = p; else userData = p; } enum XML_Status XMLCALL XML_SetBase(XML_Parser parser, const XML_Char *p) { if (p) { p = poolCopyString(&_dtd->pool, p); if (!p) return XML_STATUS_ERROR; curBase = p; } else curBase = NULL; return XML_STATUS_OK; } const XML_Char * XMLCALL XML_GetBase(XML_Parser parser) { return curBase; } int XMLCALL XML_GetSpecifiedAttributeCount(XML_Parser parser) { return nSpecifiedAtts; } int XMLCALL XML_GetIdAttributeIndex(XML_Parser parser) { return idAttIndex; } void XMLCALL XML_SetElementHandler(XML_Parser parser, XML_StartElementHandler start, XML_EndElementHandler end) { startElementHandler = start; endElementHandler = end; } void XMLCALL XML_SetStartElementHandler(XML_Parser parser, XML_StartElementHandler start) { startElementHandler = start; } void XMLCALL XML_SetEndElementHandler(XML_Parser parser, XML_EndElementHandler end) { endElementHandler = end; } void XMLCALL XML_SetCharacterDataHandler(XML_Parser parser, XML_CharacterDataHandler handler) { characterDataHandler = handler; } void XMLCALL XML_SetProcessingInstructionHandler(XML_Parser parser, XML_ProcessingInstructionHandler handler) { processingInstructionHandler = handler; } void XMLCALL XML_SetCommentHandler(XML_Parser parser, XML_CommentHandler handler) { commentHandler = handler; } void XMLCALL XML_SetCdataSectionHandler(XML_Parser parser, XML_StartCdataSectionHandler start, XML_EndCdataSectionHandler end) { startCdataSectionHandler = start; endCdataSectionHandler = end; } void XMLCALL XML_SetStartCdataSectionHandler(XML_Parser parser, XML_StartCdataSectionHandler start) { startCdataSectionHandler = start; } void XMLCALL XML_SetEndCdataSectionHandler(XML_Parser parser, XML_EndCdataSectionHandler end) { endCdataSectionHandler = end; } void XMLCALL XML_SetDefaultHandler(XML_Parser parser, XML_DefaultHandler handler) { defaultHandler = handler; defaultExpandInternalEntities = XML_FALSE; } void XMLCALL XML_SetDefaultHandlerExpand(XML_Parser parser, XML_DefaultHandler handler) { defaultHandler = handler; defaultExpandInternalEntities = XML_TRUE; } void XMLCALL XML_SetDoctypeDeclHandler(XML_Parser parser, XML_StartDoctypeDeclHandler start, XML_EndDoctypeDeclHandler end) { startDoctypeDeclHandler = start; endDoctypeDeclHandler = end; } void XMLCALL XML_SetStartDoctypeDeclHandler(XML_Parser parser, XML_StartDoctypeDeclHandler start) { startDoctypeDeclHandler = start; } void XMLCALL XML_SetEndDoctypeDeclHandler(XML_Parser parser, XML_EndDoctypeDeclHandler end) { endDoctypeDeclHandler = end; } void XMLCALL XML_SetUnparsedEntityDeclHandler(XML_Parser parser, XML_UnparsedEntityDeclHandler handler) { unparsedEntityDeclHandler = handler; } void XMLCALL XML_SetNotationDeclHandler(XML_Parser parser, XML_NotationDeclHandler handler) { notationDeclHandler = handler; } void XMLCALL XML_SetNamespaceDeclHandler(XML_Parser parser, XML_StartNamespaceDeclHandler start, XML_EndNamespaceDeclHandler end) { startNamespaceDeclHandler = start; endNamespaceDeclHandler = end; } void XMLCALL XML_SetStartNamespaceDeclHandler(XML_Parser parser, XML_StartNamespaceDeclHandler start) { startNamespaceDeclHandler = start; } void XMLCALL XML_SetEndNamespaceDeclHandler(XML_Parser parser, XML_EndNamespaceDeclHandler end) { endNamespaceDeclHandler = end; } void XMLCALL XML_SetNotStandaloneHandler(XML_Parser parser, XML_NotStandaloneHandler handler) { notStandaloneHandler = handler; } void XMLCALL XML_SetExternalEntityRefHandler(XML_Parser parser, XML_ExternalEntityRefHandler handler) { externalEntityRefHandler = handler; } void XMLCALL XML_SetExternalEntityRefHandlerArg(XML_Parser parser, void *arg) { if (arg) externalEntityRefHandlerArg = (XML_Parser)arg; else externalEntityRefHandlerArg = parser; } void XMLCALL XML_SetSkippedEntityHandler(XML_Parser parser, XML_SkippedEntityHandler handler) { skippedEntityHandler = handler; } void XMLCALL XML_SetUnknownEncodingHandler(XML_Parser parser, XML_UnknownEncodingHandler handler, void *data) { unknownEncodingHandler = handler; unknownEncodingHandlerData = data; } void XMLCALL XML_SetElementDeclHandler(XML_Parser parser, XML_ElementDeclHandler eldecl) { elementDeclHandler = eldecl; } void XMLCALL XML_SetAttlistDeclHandler(XML_Parser parser, XML_AttlistDeclHandler attdecl) { attlistDeclHandler = attdecl; } void XMLCALL XML_SetEntityDeclHandler(XML_Parser parser, XML_EntityDeclHandler handler) { entityDeclHandler = handler; } void XMLCALL XML_SetXmlDeclHandler(XML_Parser parser, XML_XmlDeclHandler handler) { xmlDeclHandler = handler; } int XMLCALL XML_SetParamEntityParsing(XML_Parser parser, enum XML_ParamEntityParsing peParsing) { /* block after XML_Parse()/XML_ParseBuffer() has been called */ if (parsing == XML_PARSING || parsing == XML_SUSPENDED) return 0; #ifdef XML_DTD paramEntityParsing = peParsing; return 1; #else return peParsing == XML_PARAM_ENTITY_PARSING_NEVER; #endif } enum XML_Status XMLCALL XML_Parse(XML_Parser parser, const char *s, int len, int isFinal) { switch (parsing) { case XML_SUSPENDED: errorCode = XML_ERROR_SUSPENDED; return XML_STATUS_ERROR; case XML_FINISHED: errorCode = XML_ERROR_FINISHED; return XML_STATUS_ERROR; default: parsing = XML_PARSING; } if (len == 0) { finalBuffer = (XML_Bool)isFinal; if (!isFinal) return XML_STATUS_OK; positionPtr = bufferPtr; parseEndPtr = bufferEnd; /* If data are left over from last buffer, and we now know that these data are the final chunk of input, then we have to check them again to detect errors based on this information. */ errorCode = processor(parser, bufferPtr, parseEndPtr, &bufferPtr); if (errorCode == XML_ERROR_NONE) { switch (parsing) { case XML_SUSPENDED: XmlUpdatePosition(encoding, positionPtr, bufferPtr, &position); positionPtr = bufferPtr; return XML_STATUS_SUSPENDED; case XML_INITIALIZED: case XML_PARSING: parsing = XML_FINISHED; /* fall through */ default: return XML_STATUS_OK; } } eventEndPtr = eventPtr; processor = errorProcessor; return XML_STATUS_ERROR; } #ifndef XML_CONTEXT_BYTES else if (bufferPtr == bufferEnd) { const char *end; int nLeftOver; enum XML_Error result; parseEndByteIndex += len; positionPtr = s; finalBuffer = (XML_Bool)isFinal; errorCode = processor(parser, s, parseEndPtr = s + len, &end); if (errorCode != XML_ERROR_NONE) { eventEndPtr = eventPtr; processor = errorProcessor; return XML_STATUS_ERROR; } else { switch (parsing) { case XML_SUSPENDED: result = XML_STATUS_SUSPENDED; break; case XML_INITIALIZED: case XML_PARSING: result = XML_STATUS_OK; if (isFinal) { parsing = XML_FINISHED; return result; } } } XmlUpdatePosition(encoding, positionPtr, end, &position); positionPtr = end; nLeftOver = s + len - end; if (nLeftOver) { if (buffer == NULL || nLeftOver > bufferLim - buffer) { /* FIXME avoid integer overflow */ char *temp; temp = (buffer == NULL ? (char *)MALLOC(len * 2) : (char *)REALLOC(buffer, len * 2)); if (temp == NULL) { errorCode = XML_ERROR_NO_MEMORY; return XML_STATUS_ERROR; } buffer = temp; if (!buffer) { errorCode = XML_ERROR_NO_MEMORY; eventPtr = eventEndPtr = NULL; processor = errorProcessor; return XML_STATUS_ERROR; } bufferLim = buffer + len * 2; } memcpy(buffer, end, nLeftOver); bufferPtr = buffer; bufferEnd = buffer + nLeftOver; } return result; } #endif /* not defined XML_CONTEXT_BYTES */ else { void *buff = XML_GetBuffer(parser, len); if (buff == NULL) return XML_STATUS_ERROR; else { memcpy(buff, s, len); return XML_ParseBuffer(parser, len, isFinal); } } } enum XML_Status XMLCALL XML_ParseBuffer(XML_Parser parser, int len, int isFinal) { const char *start; enum XML_Error result = XML_STATUS_OK; switch (parsing) { case XML_SUSPENDED: errorCode = XML_ERROR_SUSPENDED; return XML_STATUS_ERROR; case XML_FINISHED: errorCode = XML_ERROR_FINISHED; return XML_STATUS_ERROR; default: parsing = XML_PARSING; } start = bufferPtr; positionPtr = start; bufferEnd += len; parseEndPtr = bufferEnd; parseEndByteIndex += len; finalBuffer = (XML_Bool)isFinal; errorCode = processor(parser, start, parseEndPtr, &bufferPtr); if (errorCode != XML_ERROR_NONE) { eventEndPtr = eventPtr; processor = errorProcessor; return XML_STATUS_ERROR; } else { switch (parsing) { case XML_SUSPENDED: result = XML_STATUS_SUSPENDED; break; case XML_INITIALIZED: case XML_PARSING: if (isFinal) { parsing = XML_FINISHED; return result; } default: ; /* should not happen */ } } XmlUpdatePosition(encoding, positionPtr, bufferPtr, &position); positionPtr = bufferPtr; return result; } void * XMLCALL XML_GetBuffer(XML_Parser parser, int len) { switch (parsing) { case XML_SUSPENDED: errorCode = XML_ERROR_SUSPENDED; return NULL; case XML_FINISHED: errorCode = XML_ERROR_FINISHED; return NULL; default: ; } if (len > bufferLim - bufferEnd) { /* FIXME avoid integer overflow */ int neededSize = len + (bufferEnd - bufferPtr); #ifdef XML_CONTEXT_BYTES int keep = bufferPtr - buffer; if (keep > XML_CONTEXT_BYTES) keep = XML_CONTEXT_BYTES; neededSize += keep; #endif /* defined XML_CONTEXT_BYTES */ if (neededSize <= bufferLim - buffer) { #ifdef XML_CONTEXT_BYTES if (keep < bufferPtr - buffer) { int offset = (bufferPtr - buffer) - keep; memmove(buffer, &buffer[offset], bufferEnd - bufferPtr + keep); bufferEnd -= offset; bufferPtr -= offset; } #else memmove(buffer, bufferPtr, bufferEnd - bufferPtr); bufferEnd = buffer + (bufferEnd - bufferPtr); bufferPtr = buffer; #endif /* not defined XML_CONTEXT_BYTES */ } else { char *newBuf; int bufferSize = bufferLim - bufferPtr; if (bufferSize == 0) bufferSize = INIT_BUFFER_SIZE; do { bufferSize *= 2; } while (bufferSize < neededSize); newBuf = (char *)MALLOC(bufferSize); if (newBuf == 0) { errorCode = XML_ERROR_NO_MEMORY; return NULL; } bufferLim = newBuf + bufferSize; #ifdef XML_CONTEXT_BYTES if (bufferPtr) { int keep = bufferPtr - buffer; if (keep > XML_CONTEXT_BYTES) keep = XML_CONTEXT_BYTES; memcpy(newBuf, &bufferPtr[-keep], bufferEnd - bufferPtr + keep); FREE(buffer); buffer = newBuf; bufferEnd = buffer + (bufferEnd - bufferPtr) + keep; bufferPtr = buffer + keep; } else { bufferEnd = newBuf + (bufferEnd - bufferPtr); bufferPtr = buffer = newBuf; } #else if (bufferPtr) { memcpy(newBuf, bufferPtr, bufferEnd - bufferPtr); FREE(buffer); } bufferEnd = newBuf + (bufferEnd - bufferPtr); bufferPtr = buffer = newBuf; #endif /* not defined XML_CONTEXT_BYTES */ } } return bufferEnd; } enum XML_Status XMLCALL XML_StopParser(XML_Parser parser, XML_Bool resumable) { switch (parsing) { case XML_SUSPENDED: if (resumable) { errorCode = XML_ERROR_SUSPENDED; return XML_STATUS_ERROR; } parsing = XML_FINISHED; break; case XML_FINISHED: errorCode = XML_ERROR_FINISHED; return XML_STATUS_ERROR; default: if (resumable) { #ifdef XML_DTD if (isParamEntity) { errorCode = XML_ERROR_SUSPEND_PE; return XML_STATUS_ERROR; } #endif parsing = XML_SUSPENDED; } else parsing = XML_FINISHED; } return XML_STATUS_OK; } enum XML_Status XMLCALL XML_ResumeParser(XML_Parser parser) { enum XML_Error result = XML_STATUS_OK; if (parsing != XML_SUSPENDED) { errorCode = XML_ERROR_NOT_SUSPENDED; return XML_STATUS_ERROR; } parsing = XML_PARSING; errorCode = processor(parser, bufferPtr, parseEndPtr, &bufferPtr); if (errorCode != XML_ERROR_NONE) { eventEndPtr = eventPtr; processor = errorProcessor; return XML_STATUS_ERROR; } else { switch (parsing) { case XML_SUSPENDED: result = XML_STATUS_SUSPENDED; break; case XML_INITIALIZED: case XML_PARSING: if (finalBuffer) { parsing = XML_FINISHED; return result; } default: ; } } XmlUpdatePosition(encoding, positionPtr, bufferPtr, &position); positionPtr = bufferPtr; return result; } void XMLCALL XML_GetParsingStatus(XML_Parser parser, XML_ParsingStatus *status) { assert(status != NULL); *status = parser->m_parsingStatus; } enum XML_Error XMLCALL XML_GetErrorCode(XML_Parser parser) { return errorCode; } long XMLCALL XML_GetCurrentByteIndex(XML_Parser parser) { if (eventPtr) return parseEndByteIndex - (parseEndPtr - eventPtr); return -1; } int XMLCALL XML_GetCurrentByteCount(XML_Parser parser) { if (eventEndPtr && eventPtr) return eventEndPtr - eventPtr; return 0; } const char * XMLCALL XML_GetInputContext(XML_Parser parser, int *offset, int *size) { #ifdef XML_CONTEXT_BYTES if (eventPtr && buffer) { *offset = eventPtr - buffer; *size = bufferEnd - buffer; return buffer; } #endif /* defined XML_CONTEXT_BYTES */ return (char *) 0; } int XMLCALL XML_GetCurrentLineNumber(XML_Parser parser) { if (eventPtr && eventPtr >= positionPtr) { XmlUpdatePosition(encoding, positionPtr, eventPtr, &position); positionPtr = eventPtr; } return position.lineNumber + 1; } int XMLCALL XML_GetCurrentColumnNumber(XML_Parser parser) { if (eventPtr && eventPtr >= positionPtr) { XmlUpdatePosition(encoding, positionPtr, eventPtr, &position); positionPtr = eventPtr; } return position.columnNumber; } void XMLCALL XML_FreeContentModel(XML_Parser parser, XML_Content *model) { FREE(model); } void * XMLCALL XML_MemMalloc(XML_Parser parser, size_t size) { return MALLOC(size); } void * XMLCALL XML_MemRealloc(XML_Parser parser, void *ptr, size_t size) { return REALLOC(ptr, size); } void XMLCALL XML_MemFree(XML_Parser parser, void *ptr) { FREE(ptr); } void XMLCALL XML_DefaultCurrent(XML_Parser parser) { if (defaultHandler) { if (openInternalEntities) reportDefault(parser, internalEncoding, openInternalEntities->internalEventPtr, openInternalEntities->internalEventEndPtr); else reportDefault(parser, encoding, eventPtr, eventEndPtr); } } const XML_LChar * XMLCALL XML_ErrorString(enum XML_Error code) { static const XML_LChar *message[] = { 0, XML_L("out of memory"), XML_L("syntax error"), XML_L("no element found"), XML_L("not well-formed (invalid token)"), XML_L("unclosed token"), XML_L("partial character"), XML_L("mismatched tag"), XML_L("duplicate attribute"), XML_L("junk after document element"), XML_L("illegal parameter entity reference"), XML_L("undefined entity"), XML_L("recursive entity reference"), XML_L("asynchronous entity"), XML_L("reference to invalid character number"), XML_L("reference to binary entity"), XML_L("reference to external entity in attribute"), XML_L("xml declaration not at start of external entity"), XML_L("unknown encoding"), XML_L("encoding specified in XML declaration is incorrect"), XML_L("unclosed CDATA section"), XML_L("error in processing external entity reference"), XML_L("document is not standalone"), XML_L("unexpected parser state - please send a bug report"), XML_L("entity declared in parameter entity"), XML_L("requested feature requires XML_DTD support in Expat"), XML_L("cannot change setting once parsing has begun"), XML_L("unbound prefix"), XML_L("must not undeclare prefix"), XML_L("incomplete markup in parameter entity"), XML_L("XML declaration not well-formed"), XML_L("text declaration not well-formed"), XML_L("illegal character(s) in public id"), XML_L("parser suspended"), XML_L("parser not suspended"), XML_L("parsing aborted"), XML_L("parsing finished"), XML_L("cannot suspend in external parameter entity") }; if (code > 0 && code < sizeof(message)/sizeof(message[0])) return message[code]; return NULL; } const XML_LChar * XMLCALL XML_ExpatVersion(void) { /* V1 is used to string-ize the version number. However, it would string-ize the actual version macro *names* unless we get them substituted before being passed to V1. CPP is defined to expand a macro, then rescan for more expansions. Thus, we use V2 to expand the version macros, then CPP will expand the resulting V1() macro with the correct numerals. */ /* ### I'm assuming cpp is portable in this respect... */ #define V1(a,b,c) XML_L(#a)XML_L(".")XML_L(#b)XML_L(".")XML_L(#c) #define V2(a,b,c) XML_L("expat_")V1(a,b,c) return V2(XML_MAJOR_VERSION, XML_MINOR_VERSION, XML_MICRO_VERSION); #undef V1 #undef V2 } XML_Expat_Version XMLCALL XML_ExpatVersionInfo(void) { XML_Expat_Version version; version.major = XML_MAJOR_VERSION; version.minor = XML_MINOR_VERSION; version.micro = XML_MICRO_VERSION; return version; } const XML_Feature * XMLCALL XML_GetFeatureList(void) { static XML_Feature features[] = { {XML_FEATURE_SIZEOF_XML_CHAR, XML_L("sizeof(XML_Char)"), 0}, {XML_FEATURE_SIZEOF_XML_LCHAR, XML_L("sizeof(XML_LChar)"), 0}, #ifdef XML_UNICODE {XML_FEATURE_UNICODE, XML_L("XML_UNICODE"), 0}, #endif #ifdef XML_UNICODE_WCHAR_T {XML_FEATURE_UNICODE_WCHAR_T, XML_L("XML_UNICODE_WCHAR_T"), 0}, #endif #ifdef XML_DTD {XML_FEATURE_DTD, XML_L("XML_DTD"), 0}, #endif #ifdef XML_CONTEXT_BYTES {XML_FEATURE_CONTEXT_BYTES, XML_L("XML_CONTEXT_BYTES"), XML_CONTEXT_BYTES}, #endif #ifdef XML_MIN_SIZE {XML_FEATURE_MIN_SIZE, XML_L("XML_MIN_SIZE"), 0}, #endif {XML_FEATURE_END, NULL, 0} }; features[0].value = sizeof(XML_Char); features[1].value = sizeof(XML_LChar); return features; } /* Initially tag->rawName always points into the parse buffer; for those TAG instances opened while the current parse buffer was processed, and not yet closed, we need to store tag->rawName in a more permanent location, since the parse buffer is about to be discarded. */ static XML_Bool storeRawNames(XML_Parser parser) { TAG *tag = tagStack; while (tag) { int bufSize; int nameLen = sizeof(XML_Char) * (tag->name.strLen + 1); char *rawNameBuf = tag->buf + nameLen; /* Stop if already stored. Since tagStack is a stack, we can stop at the first entry that has already been copied; everything below it in the stack is already been accounted for in a previous call to this function. */ if (tag->rawName == rawNameBuf) break; /* For re-use purposes we need to ensure that the size of tag->buf is a multiple of sizeof(XML_Char). */ bufSize = nameLen + ROUND_UP(tag->rawNameLength, sizeof(XML_Char)); if (bufSize > tag->bufEnd - tag->buf) { char *temp = (char *)REALLOC(tag->buf, bufSize); if (temp == NULL) return XML_FALSE; /* if tag->name.str points to tag->buf (only when namespace processing is off) then we have to update it */ if (tag->name.str == (XML_Char *)tag->buf) tag->name.str = (XML_Char *)temp; /* if tag->name.localPart is set (when namespace processing is on) then update it as well, since it will always point into tag->buf */ if (tag->name.localPart) tag->name.localPart = (XML_Char *)temp + (tag->name.localPart - (XML_Char *)tag->buf); tag->buf = temp; tag->bufEnd = temp + bufSize; rawNameBuf = temp + nameLen; } memcpy(rawNameBuf, tag->rawName, tag->rawNameLength); tag->rawName = rawNameBuf; tag = tag->parent; } return XML_TRUE; } static enum XML_Error PTRCALL contentProcessor(XML_Parser parser, const char *start, const char *end, const char **endPtr) { enum XML_Error result = doContent(parser, 0, encoding, start, end, endPtr, (XML_Bool)!finalBuffer); if (result == XML_ERROR_NONE) { if (!storeRawNames(parser)) return XML_ERROR_NO_MEMORY; } return result; } static enum XML_Error PTRCALL externalEntityInitProcessor(XML_Parser parser, const char *start, const char *end, const char **endPtr) { enum XML_Error result = initializeEncoding(parser); if (result != XML_ERROR_NONE) return result; processor = externalEntityInitProcessor2; return externalEntityInitProcessor2(parser, start, end, endPtr); } static enum XML_Error PTRCALL externalEntityInitProcessor2(XML_Parser parser, const char *start, const char *end, const char **endPtr) { const char *next = start; /* XmlContentTok doesn't always set the last arg */ int tok = XmlContentTok(encoding, start, end, &next); switch (tok) { case XML_TOK_BOM: /* If we are at the end of the buffer, this would cause the next stage, i.e. externalEntityInitProcessor3, to pass control directly to doContent (by detecting XML_TOK_NONE) without processing any xml text declaration - causing the error XML_ERROR_MISPLACED_XML_PI in doContent. */ if (next == end && !finalBuffer) { *endPtr = next; return XML_ERROR_NONE; } start = next; break; case XML_TOK_PARTIAL: if (!finalBuffer) { *endPtr = start; return XML_ERROR_NONE; } eventPtr = start; return XML_ERROR_UNCLOSED_TOKEN; case XML_TOK_PARTIAL_CHAR: if (!finalBuffer) { *endPtr = start; return XML_ERROR_NONE; } eventPtr = start; return XML_ERROR_PARTIAL_CHAR; } processor = externalEntityInitProcessor3; return externalEntityInitProcessor3(parser, start, end, endPtr); } static enum XML_Error PTRCALL externalEntityInitProcessor3(XML_Parser parser, const char *start, const char *end, const char **endPtr) { int tok; const char *next = start; /* XmlContentTok doesn't always set the last arg */ eventPtr = start; tok = XmlContentTok(encoding, start, end, &next); eventEndPtr = next; switch (tok) { case XML_TOK_XML_DECL: { enum XML_Error result; result = processXmlDecl(parser, 1, start, next); if (result != XML_ERROR_NONE) return result; switch (parsing) { case XML_SUSPENDED: *endPtr = next; return XML_ERROR_NONE; case XML_FINISHED: return XML_ERROR_ABORTED; default: start = next; } } break; case XML_TOK_PARTIAL: if (!finalBuffer) { *endPtr = start; return XML_ERROR_NONE; } return XML_ERROR_UNCLOSED_TOKEN; case XML_TOK_PARTIAL_CHAR: if (!finalBuffer) { *endPtr = start; return XML_ERROR_NONE; } return XML_ERROR_PARTIAL_CHAR; } processor = externalEntityContentProcessor; tagLevel = 1; return externalEntityContentProcessor(parser, start, end, endPtr); } static enum XML_Error PTRCALL externalEntityContentProcessor(XML_Parser parser, const char *start, const char *end, const char **endPtr) { enum XML_Error result = doContent(parser, 1, encoding, start, end, endPtr, (XML_Bool)!finalBuffer); if (result == XML_ERROR_NONE) { if (!storeRawNames(parser)) return XML_ERROR_NO_MEMORY; } return result; } static enum XML_Error doContent(XML_Parser parser, int startTagLevel, const ENCODING *enc, const char *s, const char *end, const char **nextPtr, XML_Bool haveMore) { /* save one level of indirection */ DTD * const dtd = _dtd; const char **eventPP; const char **eventEndPP; if (enc == encoding) { eventPP = &eventPtr; eventEndPP = &eventEndPtr; } else { eventPP = &(openInternalEntities->internalEventPtr); eventEndPP = &(openInternalEntities->internalEventEndPtr); } *eventPP = s; for (;;) { const char *next = s; /* XmlContentTok doesn't always set the last arg */ int tok = XmlContentTok(enc, s, end, &next); *eventEndPP = next; switch (tok) { case XML_TOK_TRAILING_CR: if (haveMore) { *nextPtr = s; return XML_ERROR_NONE; } *eventEndPP = end; if (characterDataHandler) { XML_Char c = 0xA; characterDataHandler(handlerArg, &c, 1); } else if (defaultHandler) reportDefault(parser, enc, s, end); /* We are at the end of the final buffer, should we check for XML_SUSPENDED, XML_FINISHED? */ if (startTagLevel == 0) return XML_ERROR_NO_ELEMENTS; if (tagLevel != startTagLevel) return XML_ERROR_ASYNC_ENTITY; *nextPtr = end; return XML_ERROR_NONE; case XML_TOK_NONE: if (haveMore) { *nextPtr = s; return XML_ERROR_NONE; } if (startTagLevel > 0) { if (tagLevel != startTagLevel) return XML_ERROR_ASYNC_ENTITY; *nextPtr = s; return XML_ERROR_NONE; } return XML_ERROR_NO_ELEMENTS; case XML_TOK_INVALID: *eventPP = next; return XML_ERROR_INVALID_TOKEN; case XML_TOK_PARTIAL: if (haveMore) { *nextPtr = s; return XML_ERROR_NONE; } return XML_ERROR_UNCLOSED_TOKEN; case XML_TOK_PARTIAL_CHAR: if (haveMore) { *nextPtr = s; return XML_ERROR_NONE; } return XML_ERROR_PARTIAL_CHAR; case XML_TOK_ENTITY_REF: { const XML_Char *name; ENTITY *entity; XML_Char ch = (XML_Char) XmlPredefinedEntityName(enc, s + enc->minBytesPerChar, next - enc->minBytesPerChar); if (ch) { if (characterDataHandler) characterDataHandler(handlerArg, &ch, 1); else if (defaultHandler) reportDefault(parser, enc, s, next); break; } name = poolStoreString(&dtd->pool, enc, s + enc->minBytesPerChar, next - enc->minBytesPerChar); if (!name) return XML_ERROR_NO_MEMORY; entity = (ENTITY *)lookup(&dtd->generalEntities, name, 0); poolDiscard(&dtd->pool); /* First, determine if a check for an existing declaration is needed; if yes, check that the entity exists, and that it is internal, otherwise call the skipped entity or default handler. */ if (!dtd->hasParamEntityRefs || dtd->standalone) { if (!entity) return XML_ERROR_UNDEFINED_ENTITY; else if (!entity->is_internal) return XML_ERROR_ENTITY_DECLARED_IN_PE; } else if (!entity) { if (skippedEntityHandler) skippedEntityHandler(handlerArg, name, 0); else if (defaultHandler) reportDefault(parser, enc, s, next); break; } if (entity->open) return XML_ERROR_RECURSIVE_ENTITY_REF; if (entity->notation) return XML_ERROR_BINARY_ENTITY_REF; if (entity->textPtr) { enum XML_Error result; if (!defaultExpandInternalEntities) { if (skippedEntityHandler) skippedEntityHandler(handlerArg, entity->name, 0); else if (defaultHandler) reportDefault(parser, enc, s, next); break; } result = processInternalEntity(parser, entity, XML_FALSE); if (result != XML_ERROR_NONE) return result; } else if (externalEntityRefHandler) { const XML_Char *context; entity->open = XML_TRUE; context = getContext(parser); entity->open = XML_FALSE; if (!context) return XML_ERROR_NO_MEMORY; if (!externalEntityRefHandler(externalEntityRefHandlerArg, context, entity->base, entity->systemId, entity->publicId)) return XML_ERROR_EXTERNAL_ENTITY_HANDLING; poolDiscard(&tempPool); } else if (defaultHandler) reportDefault(parser, enc, s, next); break; } case XML_TOK_START_TAG_NO_ATTS: /* fall through */ case XML_TOK_START_TAG_WITH_ATTS: { TAG *tag; enum XML_Error result; XML_Char *toPtr; if (freeTagList) { tag = freeTagList; freeTagList = freeTagList->parent; } else { tag = (TAG *)MALLOC(sizeof(TAG)); if (!tag) return XML_ERROR_NO_MEMORY; tag->buf = (char *)MALLOC(INIT_TAG_BUF_SIZE); if (!tag->buf) { FREE(tag); return XML_ERROR_NO_MEMORY; } tag->bufEnd = tag->buf + INIT_TAG_BUF_SIZE; } tag->bindings = NULL; tag->parent = tagStack; tagStack = tag; tag->name.localPart = NULL; tag->name.prefix = NULL; tag->rawName = s + enc->minBytesPerChar; tag->rawNameLength = XmlNameLength(enc, tag->rawName); ++tagLevel; { const char *rawNameEnd = tag->rawName + tag->rawNameLength; const char *fromPtr = tag->rawName; toPtr = (XML_Char *)tag->buf; for (;;) { int bufSize; int convLen; XmlConvert(enc, &fromPtr, rawNameEnd, (ICHAR **)&toPtr, (ICHAR *)tag->bufEnd - 1); convLen = toPtr - (XML_Char *)tag->buf; if (fromPtr == rawNameEnd) { tag->name.strLen = convLen; break; } bufSize = (tag->bufEnd - tag->buf) << 1; { char *temp = (char *)REALLOC(tag->buf, bufSize); if (temp == NULL) return XML_ERROR_NO_MEMORY; tag->buf = temp; tag->bufEnd = temp + bufSize; toPtr = (XML_Char *)temp + convLen; } } } tag->name.str = (XML_Char *)tag->buf; *toPtr = XML_T('\0'); result = storeAtts(parser, enc, s, &(tag->name), &(tag->bindings)); if (result) return result; if (startElementHandler) startElementHandler(handlerArg, tag->name.str, (const XML_Char **)atts); else if (defaultHandler) reportDefault(parser, enc, s, next); poolClear(&tempPool); break; } case XML_TOK_EMPTY_ELEMENT_NO_ATTS: /* fall through */ case XML_TOK_EMPTY_ELEMENT_WITH_ATTS: { const char *rawName = s + enc->minBytesPerChar; enum XML_Error result; BINDING *bindings = NULL; XML_Bool noElmHandlers = XML_TRUE; TAG_NAME name; name.str = poolStoreString(&tempPool, enc, rawName, rawName + XmlNameLength(enc, rawName)); if (!name.str) return XML_ERROR_NO_MEMORY; poolFinish(&tempPool); result = storeAtts(parser, enc, s, &name, &bindings); if (result) return result; poolFinish(&tempPool); if (startElementHandler) { startElementHandler(handlerArg, name.str, (const XML_Char **)atts); noElmHandlers = XML_FALSE; } if (endElementHandler) { if (startElementHandler) *eventPP = *eventEndPP; endElementHandler(handlerArg, name.str); noElmHandlers = XML_FALSE; } if (noElmHandlers && defaultHandler) reportDefault(parser, enc, s, next); poolClear(&tempPool); while (bindings) { BINDING *b = bindings; if (endNamespaceDeclHandler) endNamespaceDeclHandler(handlerArg, b->prefix->name); bindings = bindings->nextTagBinding; b->nextTagBinding = freeBindingList; freeBindingList = b; b->prefix->binding = b->prevPrefixBinding; } } if (tagLevel == 0) return epilogProcessor(parser, next, end, nextPtr); break; case XML_TOK_END_TAG: if (tagLevel == startTagLevel) return XML_ERROR_ASYNC_ENTITY; else { int len; const char *rawName; TAG *tag = tagStack; tagStack = tag->parent; tag->parent = freeTagList; freeTagList = tag; rawName = s + enc->minBytesPerChar*2; len = XmlNameLength(enc, rawName); if (len != tag->rawNameLength || memcmp(tag->rawName, rawName, len) != 0) { *eventPP = rawName; return XML_ERROR_TAG_MISMATCH; } --tagLevel; if (endElementHandler) { const XML_Char *localPart; const XML_Char *prefix; XML_Char *uri; localPart = tag->name.localPart; if (ns && localPart) { /* localPart and prefix may have been overwritten in tag->name.str, since this points to the binding->uri buffer which gets re-used; so we have to add them again */ uri = (XML_Char *)tag->name.str + tag->name.uriLen; /* don't need to check for space - already done in storeAtts() */ while (*localPart) *uri++ = *localPart++; prefix = (XML_Char *)tag->name.prefix; if (ns_triplets && prefix) { *uri++ = namespaceSeparator; while (*prefix) *uri++ = *prefix++; } *uri = XML_T('\0'); } endElementHandler(handlerArg, tag->name.str); } else if (defaultHandler) reportDefault(parser, enc, s, next); while (tag->bindings) { BINDING *b = tag->bindings; if (endNamespaceDeclHandler) endNamespaceDeclHandler(handlerArg, b->prefix->name); tag->bindings = tag->bindings->nextTagBinding; b->nextTagBinding = freeBindingList; freeBindingList = b; b->prefix->binding = b->prevPrefixBinding; } if (tagLevel == 0) return epilogProcessor(parser, next, end, nextPtr); } break; case XML_TOK_CHAR_REF: { int n = XmlCharRefNumber(enc, s); if (n < 0) return XML_ERROR_BAD_CHAR_REF; if (characterDataHandler) { XML_Char buf[XML_ENCODE_MAX]; characterDataHandler(handlerArg, buf, XmlEncode(n, (ICHAR *)buf)); } else if (defaultHandler) reportDefault(parser, enc, s, next); } break; case XML_TOK_XML_DECL: return XML_ERROR_MISPLACED_XML_PI; case XML_TOK_DATA_NEWLINE: if (characterDataHandler) { XML_Char c = 0xA; characterDataHandler(handlerArg, &c, 1); } else if (defaultHandler) reportDefault(parser, enc, s, next); break; case XML_TOK_CDATA_SECT_OPEN: { enum XML_Error result; if (startCdataSectionHandler) startCdataSectionHandler(handlerArg); #if 0 /* Suppose you doing a transformation on a document that involves changing only the character data. You set up a defaultHandler and a characterDataHandler. The defaultHandler simply copies characters through. The characterDataHandler does the transformation and writes the characters out escaping them as necessary. This case will fail to work if we leave out the following two lines (because & and < inside CDATA sections will be incorrectly escaped). However, now we have a start/endCdataSectionHandler, so it seems easier to let the user deal with this. */ else if (characterDataHandler) characterDataHandler(handlerArg, dataBuf, 0); #endif else if (defaultHandler) reportDefault(parser, enc, s, next); result = doCdataSection(parser, enc, &next, end, nextPtr, haveMore); if (result != XML_ERROR_NONE) return result; else if (!next) { processor = cdataSectionProcessor; return result; } } break; case XML_TOK_TRAILING_RSQB: if (haveMore) { *nextPtr = s; return XML_ERROR_NONE; } if (characterDataHandler) { if (MUST_CONVERT(enc, s)) { ICHAR *dataPtr = (ICHAR *)dataBuf; XmlConvert(enc, &s, end, &dataPtr, (ICHAR *)dataBufEnd); characterDataHandler(handlerArg, dataBuf, dataPtr - (ICHAR *)dataBuf); } else characterDataHandler(handlerArg, (XML_Char *)s, (XML_Char *)end - (XML_Char *)s); } else if (defaultHandler) reportDefault(parser, enc, s, end); /* We are at the end of the final buffer, should we check for XML_SUSPENDED, XML_FINISHED? */ if (startTagLevel == 0) { *eventPP = end; return XML_ERROR_NO_ELEMENTS; } if (tagLevel != startTagLevel) { *eventPP = end; return XML_ERROR_ASYNC_ENTITY; } *nextPtr = end; return XML_ERROR_NONE; case XML_TOK_DATA_CHARS: if (characterDataHandler) { if (MUST_CONVERT(enc, s)) { for (;;) { ICHAR *dataPtr = (ICHAR *)dataBuf; XmlConvert(enc, &s, next, &dataPtr, (ICHAR *)dataBufEnd); *eventEndPP = s; characterDataHandler(handlerArg, dataBuf, dataPtr - (ICHAR *)dataBuf); if (s == next) break; *eventPP = s; } } else characterDataHandler(handlerArg, (XML_Char *)s, (XML_Char *)next - (XML_Char *)s); } else if (defaultHandler) reportDefault(parser, enc, s, next); break; case XML_TOK_PI: if (!reportProcessingInstruction(parser, enc, s, next)) return XML_ERROR_NO_MEMORY; break; case XML_TOK_COMMENT: if (!reportComment(parser, enc, s, next)) return XML_ERROR_NO_MEMORY; break; default: if (defaultHandler) reportDefault(parser, enc, s, next); break; } *eventPP = s = next; switch (parsing) { case XML_SUSPENDED: *nextPtr = next; return XML_ERROR_NONE; case XML_FINISHED: return XML_ERROR_ABORTED; default: ; } } /* not reached */ } /* Precondition: all arguments must be non-NULL; Purpose: - normalize attributes - check attributes for well-formedness - generate namespace aware attribute names (URI, prefix) - build list of attributes for startElementHandler - default attributes - process namespace declarations (check and report them) - generate namespace aware element name (URI, prefix) */ static enum XML_Error storeAtts(XML_Parser parser, const ENCODING *enc, const char *attStr, TAG_NAME *tagNamePtr, BINDING **bindingsPtr) { DTD * const dtd = _dtd; /* save one level of indirection */ ELEMENT_TYPE *elementType; int nDefaultAtts; const XML_Char **appAtts; /* the attribute list for the application */ int attIndex = 0; int prefixLen; int i; int n; XML_Char *uri; int nPrefixes = 0; BINDING *binding; const XML_Char *localPart; /* lookup the element type name */ elementType = (ELEMENT_TYPE *)lookup(&dtd->elementTypes, tagNamePtr->str,0); if (!elementType) { const XML_Char *name = poolCopyString(&dtd->pool, tagNamePtr->str); if (!name) return XML_ERROR_NO_MEMORY; elementType = (ELEMENT_TYPE *)lookup(&dtd->elementTypes, name, sizeof(ELEMENT_TYPE)); if (!elementType) return XML_ERROR_NO_MEMORY; if (ns && !setElementTypePrefix(parser, elementType)) return XML_ERROR_NO_MEMORY; } nDefaultAtts = elementType->nDefaultAtts; /* get the attributes from the tokenizer */ n = XmlGetAttributes(enc, attStr, attsSize, atts); if (n + nDefaultAtts > attsSize) { int oldAttsSize = attsSize; ATTRIBUTE *temp; attsSize = n + nDefaultAtts + INIT_ATTS_SIZE; temp = (ATTRIBUTE *)REALLOC((void *)atts, attsSize * sizeof(ATTRIBUTE)); if (temp == NULL) return XML_ERROR_NO_MEMORY; atts = temp; if (n > oldAttsSize) XmlGetAttributes(enc, attStr, n, atts); } appAtts = (const XML_Char **)atts; for (i = 0; i < n; i++) { /* add the name and value to the attribute list */ ATTRIBUTE_ID *attId = getAttributeId(parser, enc, atts[i].name, atts[i].name + XmlNameLength(enc, atts[i].name)); if (!attId) return XML_ERROR_NO_MEMORY; /* Detect duplicate attributes by their QNames. This does not work when namespace processing is turned on and different prefixes for the same namespace are used. For this case we have a check further down. */ if ((attId->name)[-1]) { if (enc == encoding) eventPtr = atts[i].name; return XML_ERROR_DUPLICATE_ATTRIBUTE; } (attId->name)[-1] = 1; appAtts[attIndex++] = attId->name; if (!atts[i].normalized) { enum XML_Error result; XML_Bool isCdata = XML_TRUE; /* figure out whether declared as other than CDATA */ if (attId->maybeTokenized) { int j; for (j = 0; j < nDefaultAtts; j++) { if (attId == elementType->defaultAtts[j].id) { isCdata = elementType->defaultAtts[j].isCdata; break; } } } /* normalize the attribute value */ result = storeAttributeValue(parser, enc, isCdata, atts[i].valuePtr, atts[i].valueEnd, &tempPool); if (result) return result; appAtts[attIndex] = poolStart(&tempPool); poolFinish(&tempPool); } else { /* the value did not need normalizing */ appAtts[attIndex] = poolStoreString(&tempPool, enc, atts[i].valuePtr, atts[i].valueEnd); if (appAtts[attIndex] == 0) return XML_ERROR_NO_MEMORY; poolFinish(&tempPool); } /* handle prefixed attribute names */ if (attId->prefix) { if (attId->xmlns) { /* deal with namespace declarations here */ enum XML_Error result = addBinding(parser, attId->prefix, attId, appAtts[attIndex], bindingsPtr); if (result) return result; --attIndex; } else { /* deal with other prefixed names later */ attIndex++; nPrefixes++; (attId->name)[-1] = 2; } } else attIndex++; } /* set-up for XML_GetSpecifiedAttributeCount and XML_GetIdAttributeIndex */ nSpecifiedAtts = attIndex; if (elementType->idAtt && (elementType->idAtt->name)[-1]) { for (i = 0; i < attIndex; i += 2) if (appAtts[i] == elementType->idAtt->name) { idAttIndex = i; break; } } else idAttIndex = -1; /* do attribute defaulting */ for (i = 0; i < nDefaultAtts; i++) { const DEFAULT_ATTRIBUTE *da = elementType->defaultAtts + i; if (!(da->id->name)[-1] && da->value) { if (da->id->prefix) { if (da->id->xmlns) { enum XML_Error result = addBinding(parser, da->id->prefix, da->id, da->value, bindingsPtr); if (result) return result; } else { (da->id->name)[-1] = 2; nPrefixes++; appAtts[attIndex++] = da->id->name; appAtts[attIndex++] = da->value; } } else { (da->id->name)[-1] = 1; appAtts[attIndex++] = da->id->name; appAtts[attIndex++] = da->value; } } } appAtts[attIndex] = 0; /* expand prefixed attribute names, check for duplicates, and clear flags that say whether attributes were specified */ i = 0; if (nPrefixes) { int j; /* hash table index */ unsigned long version = nsAttsVersion; int nsAttsSize = (int)1 << nsAttsPower; /* size of hash table must be at least 2 * (# of prefixed attributes) */ if ((nPrefixes << 1) >> nsAttsPower) { /* true for nsAttsPower = 0 */ NS_ATT *temp; /* hash table size must also be a power of 2 and >= 8 */ while (nPrefixes >> nsAttsPower++); if (nsAttsPower < 3) nsAttsPower = 3; nsAttsSize = (int)1 << nsAttsPower; temp = (NS_ATT *)REALLOC(nsAtts, nsAttsSize * sizeof(NS_ATT)); if (!temp) return XML_ERROR_NO_MEMORY; nsAtts = temp; version = 0; /* force re-initialization of nsAtts hash table */ } /* using a version flag saves us from initializing nsAtts every time */ if (!version) { /* initialize version flags when version wraps around */ version = INIT_ATTS_VERSION; for (j = nsAttsSize; j != 0; ) nsAtts[--j].version = version; } nsAttsVersion = --version; /* expand prefixed names and check for duplicates */ for (; i < attIndex; i += 2) { const XML_Char *s = appAtts[i]; if (s[-1] == 2) { /* prefixed */ ATTRIBUTE_ID *id; const BINDING *b; unsigned long uriHash = 0; ((XML_Char *)s)[-1] = 0; /* clear flag */ id = (ATTRIBUTE_ID *)lookup(&dtd->attributeIds, s, 0); b = id->prefix->binding; if (!b) return XML_ERROR_UNBOUND_PREFIX; /* as we expand the name we also calculate its hash value */ for (j = 0; j < b->uriLen; j++) { const XML_Char c = b->uri[j]; if (!poolAppendChar(&tempPool, c)) return XML_ERROR_NO_MEMORY; uriHash = CHAR_HASH(uriHash, c); } while (*s++ != XML_T(':')) ; do { /* copies null terminator */ const XML_Char c = *s; if (!poolAppendChar(&tempPool, *s)) return XML_ERROR_NO_MEMORY; uriHash = CHAR_HASH(uriHash, c); } while (*s++); { /* Check hash table for duplicate of expanded name (uriName). Derived from code in lookup(HASH_TABLE *table, ...). */ unsigned char step = 0; unsigned long mask = nsAttsSize - 1; j = uriHash & mask; /* index into hash table */ while (nsAtts[j].version == version) { /* for speed we compare stored hash values first */ if (uriHash == nsAtts[j].hash) { const XML_Char *s1 = poolStart(&tempPool); const XML_Char *s2 = nsAtts[j].uriName; /* s1 is null terminated, but not s2 */ for (; *s1 == *s2 && *s1 != 0; s1++, s2++); if (*s1 == 0) return XML_ERROR_DUPLICATE_ATTRIBUTE; } if (!step) step = PROBE_STEP(uriHash, mask, nsAttsPower); j < step ? ( j += nsAttsSize - step) : (j -= step); } } if (ns_triplets) { /* append namespace separator and prefix */ tempPool.ptr[-1] = namespaceSeparator; s = b->prefix->name; do { if (!poolAppendChar(&tempPool, *s)) return XML_ERROR_NO_MEMORY; } while (*s++); } /* store expanded name in attribute list */ s = poolStart(&tempPool); poolFinish(&tempPool); appAtts[i] = s; /* fill empty slot with new version, uriName and hash value */ nsAtts[j].version = version; nsAtts[j].hash = uriHash; nsAtts[j].uriName = s; if (!--nPrefixes) break; } else /* not prefixed */ ((XML_Char *)s)[-1] = 0; /* clear flag */ } } /* clear flags for the remaining attributes */ for (; i < attIndex; i += 2) ((XML_Char *)(appAtts[i]))[-1] = 0; for (binding = *bindingsPtr; binding; binding = binding->nextTagBinding) binding->attId->name[-1] = 0; if (!ns) return XML_ERROR_NONE; /* expand the element type name */ if (elementType->prefix) { binding = elementType->prefix->binding; if (!binding) return XML_ERROR_UNBOUND_PREFIX; localPart = tagNamePtr->str; while (*localPart++ != XML_T(':')) ; } else if (dtd->defaultPrefix.binding) { binding = dtd->defaultPrefix.binding; localPart = tagNamePtr->str; } else return XML_ERROR_NONE; prefixLen = 0; if (ns_triplets && binding->prefix->name) { for (; binding->prefix->name[prefixLen++];) ; } tagNamePtr->localPart = localPart; tagNamePtr->uriLen = binding->uriLen; tagNamePtr->prefix = binding->prefix->name; tagNamePtr->prefixLen = prefixLen; for (i = 0; localPart[i++];) ; n = i + binding->uriLen + prefixLen; if (n > binding->uriAlloc) { TAG *p; uri = (XML_Char *)MALLOC((n + EXPAND_SPARE) * sizeof(XML_Char)); if (!uri) return XML_ERROR_NO_MEMORY; binding->uriAlloc = n + EXPAND_SPARE; memcpy(uri, binding->uri, binding->uriLen * sizeof(XML_Char)); for (p = tagStack; p; p = p->parent) if (p->name.str == binding->uri) p->name.str = uri; FREE(binding->uri); binding->uri = uri; } uri = binding->uri + binding->uriLen; memcpy(uri, localPart, i * sizeof(XML_Char)); if (prefixLen) { uri = uri + (i - 1); if (namespaceSeparator) *uri = namespaceSeparator; memcpy(uri + 1, binding->prefix->name, prefixLen * sizeof(XML_Char)); } tagNamePtr->str = binding->uri; return XML_ERROR_NONE; } /* addBinding() overwrites the value of prefix->binding without checking. Therefore one must keep track of the old value outside of addBinding(). */ static enum XML_Error addBinding(XML_Parser parser, PREFIX *prefix, const ATTRIBUTE_ID *attId, const XML_Char *uri, BINDING **bindingsPtr) { BINDING *b; int len; /* empty URI is only valid for default namespace per XML NS 1.0 (not 1.1) */ if (*uri == XML_T('\0') && prefix->name) return XML_ERROR_UNDECLARING_PREFIX; for (len = 0; uri[len]; len++) ; if (namespaceSeparator) len++; if (freeBindingList) { b = freeBindingList; if (len > b->uriAlloc) { XML_Char *temp = (XML_Char *)REALLOC(b->uri, sizeof(XML_Char) * (len + EXPAND_SPARE)); if (temp == NULL) return XML_ERROR_NO_MEMORY; b->uri = temp; b->uriAlloc = len + EXPAND_SPARE; } freeBindingList = b->nextTagBinding; } else { b = (BINDING *)MALLOC(sizeof(BINDING)); if (!b) return XML_ERROR_NO_MEMORY; b->uri = (XML_Char *)MALLOC(sizeof(XML_Char) * (len + EXPAND_SPARE)); if (!b->uri) { FREE(b); return XML_ERROR_NO_MEMORY; } b->uriAlloc = len + EXPAND_SPARE; } b->uriLen = len; memcpy(b->uri, uri, len * sizeof(XML_Char)); if (namespaceSeparator) b->uri[len - 1] = namespaceSeparator; b->prefix = prefix; b->attId = attId; b->prevPrefixBinding = prefix->binding; /* NULL binding when default namespace undeclared */ if (*uri == XML_T('\0') && prefix == &_dtd->defaultPrefix) prefix->binding = NULL; else prefix->binding = b; b->nextTagBinding = *bindingsPtr; *bindingsPtr = b; /* if attId == NULL then we are not starting a namespace scope */ if (attId && startNamespaceDeclHandler) startNamespaceDeclHandler(handlerArg, prefix->name, prefix->binding ? uri : 0); return XML_ERROR_NONE; } /* The idea here is to avoid using stack for each CDATA section when the whole file is parsed with one call. */ static enum XML_Error PTRCALL cdataSectionProcessor(XML_Parser parser, const char *start, const char *end, const char **endPtr) { enum XML_Error result = doCdataSection(parser, encoding, &start, end, endPtr, (XML_Bool)!finalBuffer); if (result != XML_ERROR_NONE) return result; if (start) { if (parentParser) { /* we are parsing an external entity */ processor = externalEntityContentProcessor; return externalEntityContentProcessor(parser, start, end, endPtr); } else { processor = contentProcessor; return contentProcessor(parser, start, end, endPtr); } } return result; } /* startPtr gets set to non-null if the section is closed, and to null if the section is not yet closed. */ static enum XML_Error doCdataSection(XML_Parser parser, const ENCODING *enc, const char **startPtr, const char *end, const char **nextPtr, XML_Bool haveMore) { const char *s = *startPtr; const char **eventPP; const char **eventEndPP; if (enc == encoding) { eventPP = &eventPtr; *eventPP = s; eventEndPP = &eventEndPtr; } else { eventPP = &(openInternalEntities->internalEventPtr); eventEndPP = &(openInternalEntities->internalEventEndPtr); } *eventPP = s; *startPtr = NULL; for (;;) { const char *next; int tok = XmlCdataSectionTok(enc, s, end, &next); *eventEndPP = next; switch (tok) { case XML_TOK_CDATA_SECT_CLOSE: if (endCdataSectionHandler) endCdataSectionHandler(handlerArg); #if 0 /* see comment under XML_TOK_CDATA_SECT_OPEN */ else if (characterDataHandler) characterDataHandler(handlerArg, dataBuf, 0); #endif else if (defaultHandler) reportDefault(parser, enc, s, next); *startPtr = next; *nextPtr = next; if (parsing == XML_FINISHED) return XML_ERROR_ABORTED; else return XML_ERROR_NONE; case XML_TOK_DATA_NEWLINE: if (characterDataHandler) { XML_Char c = 0xA; characterDataHandler(handlerArg, &c, 1); } else if (defaultHandler) reportDefault(parser, enc, s, next); break; case XML_TOK_DATA_CHARS: if (characterDataHandler) { if (MUST_CONVERT(enc, s)) { for (;;) { ICHAR *dataPtr = (ICHAR *)dataBuf; XmlConvert(enc, &s, next, &dataPtr, (ICHAR *)dataBufEnd); *eventEndPP = next; characterDataHandler(handlerArg, dataBuf, dataPtr - (ICHAR *)dataBuf); if (s == next) break; *eventPP = s; } } else characterDataHandler(handlerArg, (XML_Char *)s, (XML_Char *)next - (XML_Char *)s); } else if (defaultHandler) reportDefault(parser, enc, s, next); break; case XML_TOK_INVALID: *eventPP = next; return XML_ERROR_INVALID_TOKEN; case XML_TOK_PARTIAL_CHAR: if (haveMore) { *nextPtr = s; return XML_ERROR_NONE; } return XML_ERROR_PARTIAL_CHAR; case XML_TOK_PARTIAL: case XML_TOK_NONE: if (haveMore) { *nextPtr = s; return XML_ERROR_NONE; } return XML_ERROR_UNCLOSED_CDATA_SECTION; default: *eventPP = next; return XML_ERROR_UNEXPECTED_STATE; } *eventPP = s = next; switch (parsing) { case XML_SUSPENDED: *nextPtr = next; return XML_ERROR_NONE; case XML_FINISHED: return XML_ERROR_ABORTED; default: ; } } /* not reached */ } #ifdef XML_DTD /* The idea here is to avoid using stack for each IGNORE section when the whole file is parsed with one call. */ static enum XML_Error PTRCALL ignoreSectionProcessor(XML_Parser parser, const char *start, const char *end, const char **endPtr) { enum XML_Error result = doIgnoreSection(parser, encoding, &start, end, endPtr, (XML_Bool)!finalBuffer); if (result != XML_ERROR_NONE) return result; if (start) { processor = prologProcessor; return prologProcessor(parser, start, end, endPtr); } return result; } /* startPtr gets set to non-null is the section is closed, and to null if the section is not yet closed. */ static enum XML_Error doIgnoreSection(XML_Parser parser, const ENCODING *enc, const char **startPtr, const char *end, const char **nextPtr, XML_Bool haveMore) { const char *next; int tok; const char *s = *startPtr; const char **eventPP; const char **eventEndPP; if (enc == encoding) { eventPP = &eventPtr; *eventPP = s; eventEndPP = &eventEndPtr; } else { eventPP = &(openInternalEntities->internalEventPtr); eventEndPP = &(openInternalEntities->internalEventEndPtr); } *eventPP = s; *startPtr = NULL; tok = XmlIgnoreSectionTok(enc, s, end, &next); *eventEndPP = next; switch (tok) { case XML_TOK_IGNORE_SECT: if (defaultHandler) reportDefault(parser, enc, s, next); *startPtr = next; *nextPtr = next; if (parsing == XML_FINISHED) return XML_ERROR_ABORTED; else return XML_ERROR_NONE; case XML_TOK_INVALID: *eventPP = next; return XML_ERROR_INVALID_TOKEN; case XML_TOK_PARTIAL_CHAR: if (haveMore) { *nextPtr = s; return XML_ERROR_NONE; } return XML_ERROR_PARTIAL_CHAR; case XML_TOK_PARTIAL: case XML_TOK_NONE: if (haveMore) { *nextPtr = s; return XML_ERROR_NONE; } return XML_ERROR_SYNTAX; /* XML_ERROR_UNCLOSED_IGNORE_SECTION */ default: *eventPP = next; return XML_ERROR_UNEXPECTED_STATE; } /* not reached */ } #endif /* XML_DTD */ static enum XML_Error initializeEncoding(XML_Parser parser) { const char *s; #ifdef XML_UNICODE char encodingBuf[128]; if (!protocolEncodingName) s = NULL; else { int i; for (i = 0; protocolEncodingName[i]; i++) { if (i == sizeof(encodingBuf) - 1 || (protocolEncodingName[i] & ~0x7f) != 0) { encodingBuf[0] = '\0'; break; } encodingBuf[i] = (char)protocolEncodingName[i]; } encodingBuf[i] = '\0'; s = encodingBuf; } #else s = protocolEncodingName; #endif if ((ns ? XmlInitEncodingNS : XmlInitEncoding)(&initEncoding, &encoding, s)) return XML_ERROR_NONE; return handleUnknownEncoding(parser, protocolEncodingName); } static enum XML_Error processXmlDecl(XML_Parser parser, int isGeneralTextEntity, const char *s, const char *next) { const char *encodingName = NULL; const XML_Char *storedEncName = NULL; const ENCODING *newEncoding = NULL; const char *version = NULL; const char *versionend; const XML_Char *storedversion = NULL; int standalone = -1; if (!(ns ? XmlParseXmlDeclNS : XmlParseXmlDecl)(isGeneralTextEntity, encoding, s, next, &eventPtr, &version, &versionend, &encodingName, &newEncoding, &standalone)) { if (isGeneralTextEntity) return XML_ERROR_TEXT_DECL; else return XML_ERROR_XML_DECL; } if (!isGeneralTextEntity && standalone == 1) { _dtd->standalone = XML_TRUE; #ifdef XML_DTD if (paramEntityParsing == XML_PARAM_ENTITY_PARSING_UNLESS_STANDALONE) paramEntityParsing = XML_PARAM_ENTITY_PARSING_NEVER; #endif /* XML_DTD */ } if (xmlDeclHandler) { if (encodingName != NULL) { storedEncName = poolStoreString(&temp2Pool, encoding, encodingName, encodingName + XmlNameLength(encoding, encodingName)); if (!storedEncName) return XML_ERROR_NO_MEMORY; poolFinish(&temp2Pool); } if (version) { storedversion = poolStoreString(&temp2Pool, encoding, version, versionend - encoding->minBytesPerChar); if (!storedversion) return XML_ERROR_NO_MEMORY; } xmlDeclHandler(handlerArg, storedversion, storedEncName, standalone); } else if (defaultHandler) reportDefault(parser, encoding, s, next); if (protocolEncodingName == NULL) { if (newEncoding) { if (newEncoding->minBytesPerChar != encoding->minBytesPerChar) { eventPtr = encodingName; return XML_ERROR_INCORRECT_ENCODING; } encoding = newEncoding; } else if (encodingName) { enum XML_Error result; if (!storedEncName) { storedEncName = poolStoreString( &temp2Pool, encoding, encodingName, encodingName + XmlNameLength(encoding, encodingName)); if (!storedEncName) return XML_ERROR_NO_MEMORY; } result = handleUnknownEncoding(parser, storedEncName); poolClear(&temp2Pool); if (result == XML_ERROR_UNKNOWN_ENCODING) eventPtr = encodingName; return result; } } if (storedEncName || storedversion) poolClear(&temp2Pool); return XML_ERROR_NONE; } static enum XML_Error handleUnknownEncoding(XML_Parser parser, const XML_Char *encodingName) { if (unknownEncodingHandler) { XML_Encoding info; int i; for (i = 0; i < 256; i++) info.map[i] = -1; info.convert = NULL; info.data = NULL; info.release = NULL; if (unknownEncodingHandler(unknownEncodingHandlerData, encodingName, &info)) { ENCODING *enc; unknownEncodingMem = MALLOC(XmlSizeOfUnknownEncoding()); if (!unknownEncodingMem) { if (info.release) info.release(info.data); return XML_ERROR_NO_MEMORY; } enc = (ns ? XmlInitUnknownEncodingNS : XmlInitUnknownEncoding)(unknownEncodingMem, info.map, info.convert, info.data); if (enc) { unknownEncodingData = info.data; unknownEncodingRelease = info.release; encoding = enc; return XML_ERROR_NONE; } } if (info.release != NULL) info.release(info.data); } return XML_ERROR_UNKNOWN_ENCODING; } static enum XML_Error PTRCALL prologInitProcessor(XML_Parser parser, const char *s, const char *end, const char **nextPtr) { enum XML_Error result = initializeEncoding(parser); if (result != XML_ERROR_NONE) return result; processor = prologProcessor; return prologProcessor(parser, s, end, nextPtr); } #ifdef XML_DTD static enum XML_Error PTRCALL externalParEntInitProcessor(XML_Parser parser, const char *s, const char *end, const char **nextPtr) { enum XML_Error result = initializeEncoding(parser); if (result != XML_ERROR_NONE) return result; /* we know now that XML_Parse(Buffer) has been called, so we consider the external parameter entity read */ _dtd->paramEntityRead = XML_TRUE; if (prologState.inEntityValue) { processor = entityValueInitProcessor; return entityValueInitProcessor(parser, s, end, nextPtr); } else { processor = externalParEntProcessor; return externalParEntProcessor(parser, s, end, nextPtr); } } static enum XML_Error PTRCALL entityValueInitProcessor(XML_Parser parser, const char *s, const char *end, const char **nextPtr) { int tok; const char *start = s; const char *next = start; eventPtr = start; for (;;) { tok = XmlPrologTok(encoding, start, end, &next); eventEndPtr = next; if (tok <= 0) { if (!finalBuffer && tok != XML_TOK_INVALID) { *nextPtr = s; return XML_ERROR_NONE; } switch (tok) { case XML_TOK_INVALID: return XML_ERROR_INVALID_TOKEN; case XML_TOK_PARTIAL: return XML_ERROR_UNCLOSED_TOKEN; case XML_TOK_PARTIAL_CHAR: return XML_ERROR_PARTIAL_CHAR; case XML_TOK_NONE: /* start == end */ default: break; } /* found end of entity value - can store it now */ return storeEntityValue(parser, encoding, s, end); } else if (tok == XML_TOK_XML_DECL) { enum XML_Error result; result = processXmlDecl(parser, 0, start, next); if (result != XML_ERROR_NONE) return result; switch (parsing) { case XML_SUSPENDED: *nextPtr = next; return XML_ERROR_NONE; case XML_FINISHED: return XML_ERROR_ABORTED; default: *nextPtr = next; } /* stop scanning for text declaration - we found one */ processor = entityValueProcessor; return entityValueProcessor(parser, next, end, nextPtr); } /* If we are at the end of the buffer, this would cause XmlPrologTok to return XML_TOK_NONE on the next call, which would then cause the function to exit with *nextPtr set to s - that is what we want for other tokens, but not for the BOM - we would rather like to skip it; then, when this routine is entered the next time, XmlPrologTok will return XML_TOK_INVALID, since the BOM is still in the buffer */ else if (tok == XML_TOK_BOM && next == end && !finalBuffer) { *nextPtr = next; return XML_ERROR_NONE; } start = next; eventPtr = start; } } static enum XML_Error PTRCALL externalParEntProcessor(XML_Parser parser, const char *s, const char *end, const char **nextPtr) { const char *next = s; int tok; tok = XmlPrologTok(encoding, s, end, &next); if (tok <= 0) { if (!finalBuffer && tok != XML_TOK_INVALID) { *nextPtr = s; return XML_ERROR_NONE; } switch (tok) { case XML_TOK_INVALID: return XML_ERROR_INVALID_TOKEN; case XML_TOK_PARTIAL: return XML_ERROR_UNCLOSED_TOKEN; case XML_TOK_PARTIAL_CHAR: return XML_ERROR_PARTIAL_CHAR; case XML_TOK_NONE: /* start == end */ default: break; } } /* This would cause the next stage, i.e. doProlog to be passed XML_TOK_BOM. However, when parsing an external subset, doProlog will not accept a BOM as valid, and report a syntax error, so we have to skip the BOM */ else if (tok == XML_TOK_BOM) { s = next; tok = XmlPrologTok(encoding, s, end, &next); } processor = prologProcessor; return doProlog(parser, encoding, s, end, tok, next, nextPtr, (XML_Bool)!finalBuffer); } static enum XML_Error PTRCALL entityValueProcessor(XML_Parser parser, const char *s, const char *end, const char **nextPtr) { const char *start = s; const char *next = s; const ENCODING *enc = encoding; int tok; for (;;) { tok = XmlPrologTok(enc, start, end, &next); if (tok <= 0) { if (!finalBuffer && tok != XML_TOK_INVALID) { *nextPtr = s; return XML_ERROR_NONE; } switch (tok) { case XML_TOK_INVALID: return XML_ERROR_INVALID_TOKEN; case XML_TOK_PARTIAL: return XML_ERROR_UNCLOSED_TOKEN; case XML_TOK_PARTIAL_CHAR: return XML_ERROR_PARTIAL_CHAR; case XML_TOK_NONE: /* start == end */ default: break; } /* found end of entity value - can store it now */ return storeEntityValue(parser, enc, s, end); } start = next; } } #endif /* XML_DTD */ static enum XML_Error PTRCALL prologProcessor(XML_Parser parser, const char *s, const char *end, const char **nextPtr) { const char *next = s; int tok = XmlPrologTok(encoding, s, end, &next); return doProlog(parser, encoding, s, end, tok, next, nextPtr, (XML_Bool)!finalBuffer); } static enum XML_Error doProlog(XML_Parser parser, const ENCODING *enc, const char *s, const char *end, int tok, const char *next, const char **nextPtr, XML_Bool haveMore) { #ifdef XML_DTD static const XML_Char externalSubsetName[] = { '#' , '\0' }; #endif /* XML_DTD */ static const XML_Char atypeCDATA[] = { 'C', 'D', 'A', 'T', 'A', '\0' }; static const XML_Char atypeID[] = { 'I', 'D', '\0' }; static const XML_Char atypeIDREF[] = { 'I', 'D', 'R', 'E', 'F', '\0' }; static const XML_Char atypeIDREFS[] = { 'I', 'D', 'R', 'E', 'F', 'S', '\0' }; static const XML_Char atypeENTITY[] = { 'E', 'N', 'T', 'I', 'T', 'Y', '\0' }; static const XML_Char atypeENTITIES[] = { 'E', 'N', 'T', 'I', 'T', 'I', 'E', 'S', '\0' }; static const XML_Char atypeNMTOKEN[] = { 'N', 'M', 'T', 'O', 'K', 'E', 'N', '\0' }; static const XML_Char atypeNMTOKENS[] = { 'N', 'M', 'T', 'O', 'K', 'E', 'N', 'S', '\0' }; static const XML_Char notationPrefix[] = { 'N', 'O', 'T', 'A', 'T', 'I', 'O', 'N', '(', '\0' }; static const XML_Char enumValueSep[] = { '|', '\0' }; static const XML_Char enumValueStart[] = { '(', '\0' }; /* save one level of indirection */ DTD * const dtd = _dtd; const char **eventPP; const char **eventEndPP; enum XML_Content_Quant quant; if (enc == encoding) { eventPP = &eventPtr; eventEndPP = &eventEndPtr; } else { eventPP = &(openInternalEntities->internalEventPtr); eventEndPP = &(openInternalEntities->internalEventEndPtr); } for (;;) { int role; XML_Bool handleDefault = XML_TRUE; *eventPP = s; *eventEndPP = next; if (tok <= 0) { if (haveMore && tok != XML_TOK_INVALID) { *nextPtr = s; return XML_ERROR_NONE; } switch (tok) { case XML_TOK_INVALID: *eventPP = next; return XML_ERROR_INVALID_TOKEN; case XML_TOK_PARTIAL: return XML_ERROR_UNCLOSED_TOKEN; case XML_TOK_PARTIAL_CHAR: return XML_ERROR_PARTIAL_CHAR; case XML_TOK_NONE: #ifdef XML_DTD /* for internal PE NOT referenced between declarations */ if (enc != encoding && !openInternalEntities->betweenDecl) { *nextPtr = s; return XML_ERROR_NONE; } /* WFC: PE Between Declarations - must check that PE contains complete markup, not only for external PEs, but also for internal PEs if the reference occurs between declarations. */ if (isParamEntity || enc != encoding) { if (XmlTokenRole(&prologState, XML_TOK_NONE, end, end, enc) == XML_ROLE_ERROR) return XML_ERROR_INCOMPLETE_PE; *nextPtr = s; return XML_ERROR_NONE; } #endif /* XML_DTD */ return XML_ERROR_NO_ELEMENTS; default: tok = -tok; next = end; break; } } role = XmlTokenRole(&prologState, tok, s, next, enc); switch (role) { case XML_ROLE_XML_DECL: { enum XML_Error result = processXmlDecl(parser, 0, s, next); if (result != XML_ERROR_NONE) return result; enc = encoding; handleDefault = XML_FALSE; } break; case XML_ROLE_DOCTYPE_NAME: if (startDoctypeDeclHandler) { doctypeName = poolStoreString(&tempPool, enc, s, next); if (!doctypeName) return XML_ERROR_NO_MEMORY; poolFinish(&tempPool); doctypePubid = NULL; handleDefault = XML_FALSE; } doctypeSysid = NULL; /* always initialize to NULL */ break; case XML_ROLE_DOCTYPE_INTERNAL_SUBSET: if (startDoctypeDeclHandler) { startDoctypeDeclHandler(handlerArg, doctypeName, doctypeSysid, doctypePubid, 1); doctypeName = NULL; poolClear(&tempPool); handleDefault = XML_FALSE; } break; #ifdef XML_DTD case XML_ROLE_TEXT_DECL: { enum XML_Error result = processXmlDecl(parser, 1, s, next); if (result != XML_ERROR_NONE) return result; enc = encoding; handleDefault = XML_FALSE; } break; #endif /* XML_DTD */ case XML_ROLE_DOCTYPE_PUBLIC_ID: #ifdef XML_DTD useForeignDTD = XML_FALSE; declEntity = (ENTITY *)lookup(&dtd->paramEntities, externalSubsetName, sizeof(ENTITY)); if (!declEntity) return XML_ERROR_NO_MEMORY; #endif /* XML_DTD */ dtd->hasParamEntityRefs = XML_TRUE; if (startDoctypeDeclHandler) { if (!XmlIsPublicId(enc, s, next, eventPP)) return XML_ERROR_PUBLICID; doctypePubid = poolStoreString(&tempPool, enc, s + enc->minBytesPerChar, next - enc->minBytesPerChar); if (!doctypePubid) return XML_ERROR_NO_MEMORY; normalizePublicId((XML_Char *)doctypePubid); poolFinish(&tempPool); handleDefault = XML_FALSE; goto alreadyChecked; } /* fall through */ case XML_ROLE_ENTITY_PUBLIC_ID: if (!XmlIsPublicId(enc, s, next, eventPP)) return XML_ERROR_PUBLICID; alreadyChecked: if (dtd->keepProcessing && declEntity) { XML_Char *tem = poolStoreString(&dtd->pool, enc, s + enc->minBytesPerChar, next - enc->minBytesPerChar); if (!tem) return XML_ERROR_NO_MEMORY; normalizePublicId(tem); declEntity->publicId = tem; poolFinish(&dtd->pool); if (entityDeclHandler) handleDefault = XML_FALSE; } break; case XML_ROLE_DOCTYPE_CLOSE: if (doctypeName) { startDoctypeDeclHandler(handlerArg, doctypeName, doctypeSysid, doctypePubid, 0); poolClear(&tempPool); handleDefault = XML_FALSE; } /* doctypeSysid will be non-NULL in the case of a previous XML_ROLE_DOCTYPE_SYSTEM_ID, even if startDoctypeDeclHandler was not set, indicating an external subset */ #ifdef XML_DTD if (doctypeSysid || useForeignDTD) { dtd->hasParamEntityRefs = XML_TRUE; /* when docTypeSysid == NULL */ if (paramEntityParsing && externalEntityRefHandler) { ENTITY *entity = (ENTITY *)lookup(&dtd->paramEntities, externalSubsetName, sizeof(ENTITY)); if (!entity) return XML_ERROR_NO_MEMORY; if (useForeignDTD) entity->base = curBase; dtd->paramEntityRead = XML_FALSE; if (!externalEntityRefHandler(externalEntityRefHandlerArg, 0, entity->base, entity->systemId, entity->publicId)) return XML_ERROR_EXTERNAL_ENTITY_HANDLING; if (dtd->paramEntityRead && !dtd->standalone && notStandaloneHandler && !notStandaloneHandler(handlerArg)) return XML_ERROR_NOT_STANDALONE; /* end of DTD - no need to update dtd->keepProcessing */ } useForeignDTD = XML_FALSE; } #endif /* XML_DTD */ if (endDoctypeDeclHandler) { endDoctypeDeclHandler(handlerArg); handleDefault = XML_FALSE; } break; case XML_ROLE_INSTANCE_START: #ifdef XML_DTD /* if there is no DOCTYPE declaration then now is the last chance to read the foreign DTD */ if (useForeignDTD) { dtd->hasParamEntityRefs = XML_TRUE; if (paramEntityParsing && externalEntityRefHandler) { ENTITY *entity = (ENTITY *)lookup(&dtd->paramEntities, externalSubsetName, sizeof(ENTITY)); if (!entity) return XML_ERROR_NO_MEMORY; entity->base = curBase; dtd->paramEntityRead = XML_FALSE; if (!externalEntityRefHandler(externalEntityRefHandlerArg, 0, entity->base, entity->systemId, entity->publicId)) return XML_ERROR_EXTERNAL_ENTITY_HANDLING; if (dtd->paramEntityRead && !dtd->standalone && notStandaloneHandler && !notStandaloneHandler(handlerArg)) return XML_ERROR_NOT_STANDALONE; /* end of DTD - no need to update dtd->keepProcessing */ } } #endif /* XML_DTD */ processor = contentProcessor; return contentProcessor(parser, s, end, nextPtr); case XML_ROLE_ATTLIST_ELEMENT_NAME: declElementType = getElementType(parser, enc, s, next); if (!declElementType) return XML_ERROR_NO_MEMORY; goto checkAttListDeclHandler; case XML_ROLE_ATTRIBUTE_NAME: declAttributeId = getAttributeId(parser, enc, s, next); if (!declAttributeId) return XML_ERROR_NO_MEMORY; declAttributeIsCdata = XML_FALSE; declAttributeType = NULL; declAttributeIsId = XML_FALSE; goto checkAttListDeclHandler; case XML_ROLE_ATTRIBUTE_TYPE_CDATA: declAttributeIsCdata = XML_TRUE; declAttributeType = atypeCDATA; goto checkAttListDeclHandler; case XML_ROLE_ATTRIBUTE_TYPE_ID: declAttributeIsId = XML_TRUE; declAttributeType = atypeID; goto checkAttListDeclHandler; case XML_ROLE_ATTRIBUTE_TYPE_IDREF: declAttributeType = atypeIDREF; goto checkAttListDeclHandler; case XML_ROLE_ATTRIBUTE_TYPE_IDREFS: declAttributeType = atypeIDREFS; goto checkAttListDeclHandler; case XML_ROLE_ATTRIBUTE_TYPE_ENTITY: declAttributeType = atypeENTITY; goto checkAttListDeclHandler; case XML_ROLE_ATTRIBUTE_TYPE_ENTITIES: declAttributeType = atypeENTITIES; goto checkAttListDeclHandler; case XML_ROLE_ATTRIBUTE_TYPE_NMTOKEN: declAttributeType = atypeNMTOKEN; goto checkAttListDeclHandler; case XML_ROLE_ATTRIBUTE_TYPE_NMTOKENS: declAttributeType = atypeNMTOKENS; checkAttListDeclHandler: if (dtd->keepProcessing && attlistDeclHandler) handleDefault = XML_FALSE; break; case XML_ROLE_ATTRIBUTE_ENUM_VALUE: case XML_ROLE_ATTRIBUTE_NOTATION_VALUE: if (dtd->keepProcessing && attlistDeclHandler) { const XML_Char *prefix; if (declAttributeType) { prefix = enumValueSep; } else { prefix = (role == XML_ROLE_ATTRIBUTE_NOTATION_VALUE ? notationPrefix : enumValueStart); } if (!poolAppendString(&tempPool, prefix)) return XML_ERROR_NO_MEMORY; if (!poolAppend(&tempPool, enc, s, next)) return XML_ERROR_NO_MEMORY; declAttributeType = tempPool.start; handleDefault = XML_FALSE; } break; case XML_ROLE_IMPLIED_ATTRIBUTE_VALUE: case XML_ROLE_REQUIRED_ATTRIBUTE_VALUE: if (dtd->keepProcessing) { if (!defineAttribute(declElementType, declAttributeId, declAttributeIsCdata, declAttributeIsId, 0, parser)) return XML_ERROR_NO_MEMORY; if (attlistDeclHandler && declAttributeType) { if (*declAttributeType == XML_T('(') || (*declAttributeType == XML_T('N') && declAttributeType[1] == XML_T('O'))) { /* Enumerated or Notation type */ if (!poolAppendChar(&tempPool, XML_T(')')) || !poolAppendChar(&tempPool, XML_T('\0'))) return XML_ERROR_NO_MEMORY; declAttributeType = tempPool.start; poolFinish(&tempPool); } *eventEndPP = s; attlistDeclHandler(handlerArg, declElementType->name, declAttributeId->name, declAttributeType, 0, role == XML_ROLE_REQUIRED_ATTRIBUTE_VALUE); poolClear(&tempPool); handleDefault = XML_FALSE; } } break; case XML_ROLE_DEFAULT_ATTRIBUTE_VALUE: case XML_ROLE_FIXED_ATTRIBUTE_VALUE: if (dtd->keepProcessing) { const XML_Char *attVal; enum XML_Error result = storeAttributeValue(parser, enc, declAttributeIsCdata, s + enc->minBytesPerChar, next - enc->minBytesPerChar, &dtd->pool); if (result) return result; attVal = poolStart(&dtd->pool); poolFinish(&dtd->pool); /* ID attributes aren't allowed to have a default */ if (!defineAttribute(declElementType, declAttributeId, declAttributeIsCdata, XML_FALSE, attVal, parser)) return XML_ERROR_NO_MEMORY; if (attlistDeclHandler && declAttributeType) { if (*declAttributeType == XML_T('(') || (*declAttributeType == XML_T('N') && declAttributeType[1] == XML_T('O'))) { /* Enumerated or Notation type */ if (!poolAppendChar(&tempPool, XML_T(')')) || !poolAppendChar(&tempPool, XML_T('\0'))) return XML_ERROR_NO_MEMORY; declAttributeType = tempPool.start; poolFinish(&tempPool); } *eventEndPP = s; attlistDeclHandler(handlerArg, declElementType->name, declAttributeId->name, declAttributeType, attVal, role == XML_ROLE_FIXED_ATTRIBUTE_VALUE); poolClear(&tempPool); handleDefault = XML_FALSE; } } break; case XML_ROLE_ENTITY_VALUE: if (dtd->keepProcessing) { enum XML_Error result = storeEntityValue(parser, enc, s + enc->minBytesPerChar, next - enc->minBytesPerChar); if (declEntity) { declEntity->textPtr = poolStart(&dtd->entityValuePool); declEntity->textLen = poolLength(&dtd->entityValuePool); poolFinish(&dtd->entityValuePool); if (entityDeclHandler) { *eventEndPP = s; entityDeclHandler(handlerArg, declEntity->name, declEntity->is_param, declEntity->textPtr, declEntity->textLen, curBase, 0, 0, 0); handleDefault = XML_FALSE; } } else poolDiscard(&dtd->entityValuePool); if (result != XML_ERROR_NONE) return result; } break; case XML_ROLE_DOCTYPE_SYSTEM_ID: #ifdef XML_DTD useForeignDTD = XML_FALSE; #endif /* XML_DTD */ dtd->hasParamEntityRefs = XML_TRUE; if (startDoctypeDeclHandler) { doctypeSysid = poolStoreString(&tempPool, enc, s + enc->minBytesPerChar, next - enc->minBytesPerChar); if (doctypeSysid == NULL) return XML_ERROR_NO_MEMORY; poolFinish(&tempPool); handleDefault = XML_FALSE; } #ifdef XML_DTD else /* use externalSubsetName to make doctypeSysid non-NULL for the case where no startDoctypeDeclHandler is set */ doctypeSysid = externalSubsetName; #endif /* XML_DTD */ if (!dtd->standalone #ifdef XML_DTD && !paramEntityParsing #endif /* XML_DTD */ && notStandaloneHandler && !notStandaloneHandler(handlerArg)) return XML_ERROR_NOT_STANDALONE; #ifndef XML_DTD break; #else /* XML_DTD */ if (!declEntity) { declEntity = (ENTITY *)lookup(&dtd->paramEntities, externalSubsetName, sizeof(ENTITY)); if (!declEntity) return XML_ERROR_NO_MEMORY; declEntity->publicId = NULL; } /* fall through */ #endif /* XML_DTD */ case XML_ROLE_ENTITY_SYSTEM_ID: if (dtd->keepProcessing && declEntity) { declEntity->systemId = poolStoreString(&dtd->pool, enc, s + enc->minBytesPerChar, next - enc->minBytesPerChar); if (!declEntity->systemId) return XML_ERROR_NO_MEMORY; declEntity->base = curBase; poolFinish(&dtd->pool); if (entityDeclHandler) handleDefault = XML_FALSE; } break; case XML_ROLE_ENTITY_COMPLETE: if (dtd->keepProcessing && declEntity && entityDeclHandler) { *eventEndPP = s; entityDeclHandler(handlerArg, declEntity->name, declEntity->is_param, 0,0, declEntity->base, declEntity->systemId, declEntity->publicId, 0); handleDefault = XML_FALSE; } break; case XML_ROLE_ENTITY_NOTATION_NAME: if (dtd->keepProcessing && declEntity) { declEntity->notation = poolStoreString(&dtd->pool, enc, s, next); if (!declEntity->notation) return XML_ERROR_NO_MEMORY; poolFinish(&dtd->pool); if (unparsedEntityDeclHandler) { *eventEndPP = s; unparsedEntityDeclHandler(handlerArg, declEntity->name, declEntity->base, declEntity->systemId, declEntity->publicId, declEntity->notation); handleDefault = XML_FALSE; } else if (entityDeclHandler) { *eventEndPP = s; entityDeclHandler(handlerArg, declEntity->name, 0,0,0, declEntity->base, declEntity->systemId, declEntity->publicId, declEntity->notation); handleDefault = XML_FALSE; } } break; case XML_ROLE_GENERAL_ENTITY_NAME: { if (XmlPredefinedEntityName(enc, s, next)) { declEntity = NULL; break; } if (dtd->keepProcessing) { const XML_Char *name = poolStoreString(&dtd->pool, enc, s, next); if (!name) return XML_ERROR_NO_MEMORY; declEntity = (ENTITY *)lookup(&dtd->generalEntities, name, sizeof(ENTITY)); if (!declEntity) return XML_ERROR_NO_MEMORY; if (declEntity->name != name) { poolDiscard(&dtd->pool); declEntity = NULL; } else { poolFinish(&dtd->pool); declEntity->publicId = NULL; declEntity->is_param = XML_FALSE; /* if we have a parent parser or are reading an internal parameter entity, then the entity declaration is not considered "internal" */ declEntity->is_internal = !(parentParser || openInternalEntities); if (entityDeclHandler) handleDefault = XML_FALSE; } } else { poolDiscard(&dtd->pool); declEntity = NULL; } } break; case XML_ROLE_PARAM_ENTITY_NAME: #ifdef XML_DTD if (dtd->keepProcessing) { const XML_Char *name = poolStoreString(&dtd->pool, enc, s, next); if (!name) return XML_ERROR_NO_MEMORY; declEntity = (ENTITY *)lookup(&dtd->paramEntities, name, sizeof(ENTITY)); if (!declEntity) return XML_ERROR_NO_MEMORY; if (declEntity->name != name) { poolDiscard(&dtd->pool); declEntity = NULL; } else { poolFinish(&dtd->pool); declEntity->publicId = NULL; declEntity->is_param = XML_TRUE; /* if we have a parent parser or are reading an internal parameter entity, then the entity declaration is not considered "internal" */ declEntity->is_internal = !(parentParser || openInternalEntities); if (entityDeclHandler) handleDefault = XML_FALSE; } } else { poolDiscard(&dtd->pool); declEntity = NULL; } #else /* not XML_DTD */ declEntity = NULL; #endif /* XML_DTD */ break; case XML_ROLE_NOTATION_NAME: declNotationPublicId = NULL; declNotationName = NULL; if (notationDeclHandler) { declNotationName = poolStoreString(&tempPool, enc, s, next); if (!declNotationName) return XML_ERROR_NO_MEMORY; poolFinish(&tempPool); handleDefault = XML_FALSE; } break; case XML_ROLE_NOTATION_PUBLIC_ID: if (!XmlIsPublicId(enc, s, next, eventPP)) return XML_ERROR_PUBLICID; if (declNotationName) { /* means notationDeclHandler != NULL */ XML_Char *tem = poolStoreString(&tempPool, enc, s + enc->minBytesPerChar, next - enc->minBytesPerChar); if (!tem) return XML_ERROR_NO_MEMORY; normalizePublicId(tem); declNotationPublicId = tem; poolFinish(&tempPool); handleDefault = XML_FALSE; } break; case XML_ROLE_NOTATION_SYSTEM_ID: if (declNotationName && notationDeclHandler) { const XML_Char *systemId = poolStoreString(&tempPool, enc, s + enc->minBytesPerChar, next - enc->minBytesPerChar); if (!systemId) return XML_ERROR_NO_MEMORY; *eventEndPP = s; notationDeclHandler(handlerArg, declNotationName, curBase, systemId, declNotationPublicId); handleDefault = XML_FALSE; } poolClear(&tempPool); break; case XML_ROLE_NOTATION_NO_SYSTEM_ID: if (declNotationPublicId && notationDeclHandler) { *eventEndPP = s; notationDeclHandler(handlerArg, declNotationName, curBase, 0, declNotationPublicId); handleDefault = XML_FALSE; } poolClear(&tempPool); break; case XML_ROLE_ERROR: switch (tok) { case XML_TOK_PARAM_ENTITY_REF: /* PE references in internal subset are not allowed within declarations. */ return XML_ERROR_PARAM_ENTITY_REF; case XML_TOK_XML_DECL: return XML_ERROR_MISPLACED_XML_PI; default: return XML_ERROR_SYNTAX; } #ifdef XML_DTD case XML_ROLE_IGNORE_SECT: { enum XML_Error result; if (defaultHandler) reportDefault(parser, enc, s, next); handleDefault = XML_FALSE; result = doIgnoreSection(parser, enc, &next, end, nextPtr, haveMore); if (result != XML_ERROR_NONE) return result; else if (!next) { processor = ignoreSectionProcessor; return result; } } break; #endif /* XML_DTD */ case XML_ROLE_GROUP_OPEN: if (prologState.level >= groupSize) { if (groupSize) { char *temp = (char *)REALLOC(groupConnector, groupSize *= 2); if (temp == NULL) return XML_ERROR_NO_MEMORY; groupConnector = temp; if (dtd->scaffIndex) { int *temp = (int *)REALLOC(dtd->scaffIndex, groupSize * sizeof(int)); if (temp == NULL) return XML_ERROR_NO_MEMORY; dtd->scaffIndex = temp; } } else { groupConnector = (char *)MALLOC(groupSize = 32); if (!groupConnector) return XML_ERROR_NO_MEMORY; } } groupConnector[prologState.level] = 0; if (dtd->in_eldecl) { int myindex = nextScaffoldPart(parser); if (myindex < 0) return XML_ERROR_NO_MEMORY; dtd->scaffIndex[dtd->scaffLevel] = myindex; dtd->scaffLevel++; dtd->scaffold[myindex].type = XML_CTYPE_SEQ; if (elementDeclHandler) handleDefault = XML_FALSE; } break; case XML_ROLE_GROUP_SEQUENCE: if (groupConnector[prologState.level] == '|') return XML_ERROR_SYNTAX; groupConnector[prologState.level] = ','; if (dtd->in_eldecl && elementDeclHandler) handleDefault = XML_FALSE; break; case XML_ROLE_GROUP_CHOICE: if (groupConnector[prologState.level] == ',') return XML_ERROR_SYNTAX; if (dtd->in_eldecl && !groupConnector[prologState.level] && (dtd->scaffold[dtd->scaffIndex[dtd->scaffLevel - 1]].type != XML_CTYPE_MIXED) ) { dtd->scaffold[dtd->scaffIndex[dtd->scaffLevel - 1]].type = XML_CTYPE_CHOICE; if (elementDeclHandler) handleDefault = XML_FALSE; } groupConnector[prologState.level] = '|'; break; case XML_ROLE_PARAM_ENTITY_REF: #ifdef XML_DTD case XML_ROLE_INNER_PARAM_ENTITY_REF: dtd->hasParamEntityRefs = XML_TRUE; if (!paramEntityParsing) dtd->keepProcessing = dtd->standalone; else { const XML_Char *name; ENTITY *entity; name = poolStoreString(&dtd->pool, enc, s + enc->minBytesPerChar, next - enc->minBytesPerChar); if (!name) return XML_ERROR_NO_MEMORY; entity = (ENTITY *)lookup(&dtd->paramEntities, name, 0); poolDiscard(&dtd->pool); /* first, determine if a check for an existing declaration is needed; if yes, check that the entity exists, and that it is internal, otherwise call the skipped entity handler */ if (prologState.documentEntity && (dtd->standalone ? !openInternalEntities : !dtd->hasParamEntityRefs)) { if (!entity) return XML_ERROR_UNDEFINED_ENTITY; else if (!entity->is_internal) return XML_ERROR_ENTITY_DECLARED_IN_PE; } else if (!entity) { dtd->keepProcessing = dtd->standalone; /* cannot report skipped entities in declarations */ if ((role == XML_ROLE_PARAM_ENTITY_REF) && skippedEntityHandler) { skippedEntityHandler(handlerArg, name, 1); handleDefault = XML_FALSE; } break; } if (entity->open) return XML_ERROR_RECURSIVE_ENTITY_REF; if (entity->textPtr) { enum XML_Error result; XML_Bool betweenDecl = (role == XML_ROLE_PARAM_ENTITY_REF ? XML_TRUE : XML_FALSE); result = processInternalEntity(parser, entity, betweenDecl); if (result != XML_ERROR_NONE) return result; handleDefault = XML_FALSE; break; } if (externalEntityRefHandler) { dtd->paramEntityRead = XML_FALSE; entity->open = XML_TRUE; if (!externalEntityRefHandler(externalEntityRefHandlerArg, 0, entity->base, entity->systemId, entity->publicId)) { entity->open = XML_FALSE; return XML_ERROR_EXTERNAL_ENTITY_HANDLING; } entity->open = XML_FALSE; handleDefault = XML_FALSE; if (!dtd->paramEntityRead) { dtd->keepProcessing = dtd->standalone; break; } } else { dtd->keepProcessing = dtd->standalone; break; } } #endif /* XML_DTD */ if (!dtd->standalone && notStandaloneHandler && !notStandaloneHandler(handlerArg)) return XML_ERROR_NOT_STANDALONE; break; /* Element declaration stuff */ case XML_ROLE_ELEMENT_NAME: if (elementDeclHandler) { declElementType = getElementType(parser, enc, s, next); if (!declElementType) return XML_ERROR_NO_MEMORY; dtd->scaffLevel = 0; dtd->scaffCount = 0; dtd->in_eldecl = XML_TRUE; handleDefault = XML_FALSE; } break; case XML_ROLE_CONTENT_ANY: case XML_ROLE_CONTENT_EMPTY: if (dtd->in_eldecl) { if (elementDeclHandler) { XML_Content * content = (XML_Content *) MALLOC(sizeof(XML_Content)); if (!content) return XML_ERROR_NO_MEMORY; content->quant = XML_CQUANT_NONE; content->name = NULL; content->numchildren = 0; content->children = NULL; content->type = ((role == XML_ROLE_CONTENT_ANY) ? XML_CTYPE_ANY : XML_CTYPE_EMPTY); *eventEndPP = s; elementDeclHandler(handlerArg, declElementType->name, content); handleDefault = XML_FALSE; } dtd->in_eldecl = XML_FALSE; } break; case XML_ROLE_CONTENT_PCDATA: if (dtd->in_eldecl) { dtd->scaffold[dtd->scaffIndex[dtd->scaffLevel - 1]].type = XML_CTYPE_MIXED; if (elementDeclHandler) handleDefault = XML_FALSE; } break; case XML_ROLE_CONTENT_ELEMENT: quant = XML_CQUANT_NONE; goto elementContent; case XML_ROLE_CONTENT_ELEMENT_OPT: quant = XML_CQUANT_OPT; goto elementContent; case XML_ROLE_CONTENT_ELEMENT_REP: quant = XML_CQUANT_REP; goto elementContent; case XML_ROLE_CONTENT_ELEMENT_PLUS: quant = XML_CQUANT_PLUS; elementContent: if (dtd->in_eldecl) { ELEMENT_TYPE *el; const XML_Char *name; int nameLen; const char *nxt = (quant == XML_CQUANT_NONE ? next : next - enc->minBytesPerChar); int myindex = nextScaffoldPart(parser); if (myindex < 0) return XML_ERROR_NO_MEMORY; dtd->scaffold[myindex].type = XML_CTYPE_NAME; dtd->scaffold[myindex].quant = quant; el = getElementType(parser, enc, s, nxt); if (!el) return XML_ERROR_NO_MEMORY; name = el->name; dtd->scaffold[myindex].name = name; nameLen = 0; for (; name[nameLen++]; ); dtd->contentStringLen += nameLen; if (elementDeclHandler) handleDefault = XML_FALSE; } break; case XML_ROLE_GROUP_CLOSE: quant = XML_CQUANT_NONE; goto closeGroup; case XML_ROLE_GROUP_CLOSE_OPT: quant = XML_CQUANT_OPT; goto closeGroup; case XML_ROLE_GROUP_CLOSE_REP: quant = XML_CQUANT_REP; goto closeGroup; case XML_ROLE_GROUP_CLOSE_PLUS: quant = XML_CQUANT_PLUS; closeGroup: if (dtd->in_eldecl) { if (elementDeclHandler) handleDefault = XML_FALSE; dtd->scaffLevel--; dtd->scaffold[dtd->scaffIndex[dtd->scaffLevel]].quant = quant; if (dtd->scaffLevel == 0) { if (!handleDefault) { XML_Content *model = build_model(parser); if (!model) return XML_ERROR_NO_MEMORY; *eventEndPP = s; elementDeclHandler(handlerArg, declElementType->name, model); } dtd->in_eldecl = XML_FALSE; dtd->contentStringLen = 0; } } break; /* End element declaration stuff */ case XML_ROLE_PI: if (!reportProcessingInstruction(parser, enc, s, next)) return XML_ERROR_NO_MEMORY; handleDefault = XML_FALSE; break; case XML_ROLE_COMMENT: if (!reportComment(parser, enc, s, next)) return XML_ERROR_NO_MEMORY; handleDefault = XML_FALSE; break; case XML_ROLE_NONE: switch (tok) { case XML_TOK_BOM: handleDefault = XML_FALSE; break; } break; case XML_ROLE_DOCTYPE_NONE: if (startDoctypeDeclHandler) handleDefault = XML_FALSE; break; case XML_ROLE_ENTITY_NONE: if (dtd->keepProcessing && entityDeclHandler) handleDefault = XML_FALSE; break; case XML_ROLE_NOTATION_NONE: if (notationDeclHandler) handleDefault = XML_FALSE; break; case XML_ROLE_ATTLIST_NONE: if (dtd->keepProcessing && attlistDeclHandler) handleDefault = XML_FALSE; break; case XML_ROLE_ELEMENT_NONE: if (elementDeclHandler) handleDefault = XML_FALSE; break; } /* end of big switch */ if (handleDefault && defaultHandler) reportDefault(parser, enc, s, next); switch (parsing) { case XML_SUSPENDED: *nextPtr = next; return XML_ERROR_NONE; case XML_FINISHED: return XML_ERROR_ABORTED; default: s = next; tok = XmlPrologTok(enc, s, end, &next); } } /* not reached */ } static enum XML_Error PTRCALL epilogProcessor(XML_Parser parser, const char *s, const char *end, const char **nextPtr) { processor = epilogProcessor; eventPtr = s; for (;;) { const char *next = NULL; int tok = XmlPrologTok(encoding, s, end, &next); eventEndPtr = next; switch (tok) { /* report partial linebreak - it might be the last token */ case -XML_TOK_PROLOG_S: if (defaultHandler) { reportDefault(parser, encoding, s, next); if (parsing == XML_FINISHED) return XML_ERROR_ABORTED; } *nextPtr = next; return XML_ERROR_NONE; case XML_TOK_NONE: *nextPtr = s; return XML_ERROR_NONE; case XML_TOK_PROLOG_S: if (defaultHandler) reportDefault(parser, encoding, s, next); break; case XML_TOK_PI: if (!reportProcessingInstruction(parser, encoding, s, next)) return XML_ERROR_NO_MEMORY; break; case XML_TOK_COMMENT: if (!reportComment(parser, encoding, s, next)) return XML_ERROR_NO_MEMORY; break; case XML_TOK_INVALID: eventPtr = next; return XML_ERROR_INVALID_TOKEN; case XML_TOK_PARTIAL: if (!finalBuffer) { *nextPtr = s; return XML_ERROR_NONE; } return XML_ERROR_UNCLOSED_TOKEN; case XML_TOK_PARTIAL_CHAR: if (!finalBuffer) { *nextPtr = s; return XML_ERROR_NONE; } return XML_ERROR_PARTIAL_CHAR; default: return XML_ERROR_JUNK_AFTER_DOC_ELEMENT; } eventPtr = s = next; switch (parsing) { case XML_SUSPENDED: *nextPtr = next; return XML_ERROR_NONE; case XML_FINISHED: return XML_ERROR_ABORTED; default: ; } } } static enum XML_Error processInternalEntity(XML_Parser parser, ENTITY *entity, XML_Bool betweenDecl) { const char *textStart, *textEnd; const char *next; enum XML_Error result; OPEN_INTERNAL_ENTITY *openEntity; if (freeInternalEntities) { openEntity = freeInternalEntities; freeInternalEntities = openEntity->next; } else { openEntity = (OPEN_INTERNAL_ENTITY *)MALLOC(sizeof(OPEN_INTERNAL_ENTITY)); if (!openEntity) return XML_ERROR_NO_MEMORY; } entity->open = XML_TRUE; entity->processed = 0; openEntity->next = openInternalEntities; openInternalEntities = openEntity; openEntity->entity = entity; openEntity->startTagLevel = tagLevel; openEntity->betweenDecl = betweenDecl; openEntity->internalEventPtr = NULL; openEntity->internalEventEndPtr = NULL; textStart = (char *)entity->textPtr; textEnd = (char *)(entity->textPtr + entity->textLen); #ifdef XML_DTD if (entity->is_param) { int tok = XmlPrologTok(internalEncoding, textStart, textEnd, &next); result = doProlog(parser, internalEncoding, textStart, textEnd, tok, next, &next, XML_FALSE); } else #endif /* XML_DTD */ result = doContent(parser, tagLevel, internalEncoding, textStart, textEnd, &next, XML_FALSE); if (result == XML_ERROR_NONE) { if (textEnd != next && parsing == XML_SUSPENDED) { entity->processed = next - textStart; processor = internalEntityProcessor; } else { entity->open = XML_FALSE; openInternalEntities = openEntity->next; /* put openEntity back in list of free instances */ openEntity->next = freeInternalEntities; freeInternalEntities = openEntity; } } return result; } static enum XML_Error PTRCALL internalEntityProcessor(XML_Parser parser, const char *s, const char *end, const char **nextPtr) { ENTITY *entity; const char *textStart, *textEnd; const char *next; enum XML_Error result; OPEN_INTERNAL_ENTITY *openEntity = openInternalEntities; if (!openEntity) return XML_ERROR_UNEXPECTED_STATE; entity = openEntity->entity; textStart = ((char *)entity->textPtr) + entity->processed; textEnd = (char *)(entity->textPtr + entity->textLen); #ifdef XML_DTD if (entity->is_param) { int tok = XmlPrologTok(internalEncoding, textStart, textEnd, &next); result = doProlog(parser, internalEncoding, textStart, textEnd, tok, next, &next, XML_FALSE); } else #endif /* XML_DTD */ result = doContent(parser, openEntity->startTagLevel, internalEncoding, textStart, textEnd, &next, XML_FALSE); if (result != XML_ERROR_NONE) return result; else if (textEnd != next && parsing == XML_SUSPENDED) { entity->processed = next - (char *)entity->textPtr; return result; } else { entity->open = XML_FALSE; openInternalEntities = openEntity->next; /* put openEntity back in list of free instances */ openEntity->next = freeInternalEntities; freeInternalEntities = openEntity; } #ifdef XML_DTD if (entity->is_param) { int tok; processor = prologProcessor; tok = XmlPrologTok(encoding, s, end, &next); return doProlog(parser, encoding, s, end, tok, next, nextPtr, (XML_Bool)!finalBuffer); } else #endif /* XML_DTD */ { processor = contentProcessor; /* see externalEntityContentProcessor vs contentProcessor */ return doContent(parser, parentParser ? 1 : 0, encoding, s, end, nextPtr, (XML_Bool)!finalBuffer); } } static enum XML_Error PTRCALL errorProcessor(XML_Parser parser, const char *s, const char *end, const char **nextPtr) { return errorCode; } static enum XML_Error storeAttributeValue(XML_Parser parser, const ENCODING *enc, XML_Bool isCdata, const char *ptr, const char *end, STRING_POOL *pool) { enum XML_Error result = appendAttributeValue(parser, enc, isCdata, ptr, end, pool); if (result) return result; if (!isCdata && poolLength(pool) && poolLastChar(pool) == 0x20) poolChop(pool); if (!poolAppendChar(pool, XML_T('\0'))) return XML_ERROR_NO_MEMORY; return XML_ERROR_NONE; } static enum XML_Error appendAttributeValue(XML_Parser parser, const ENCODING *enc, XML_Bool isCdata, const char *ptr, const char *end, STRING_POOL *pool) { DTD * const dtd = _dtd; /* save one level of indirection */ for (;;) { const char *next; int tok = XmlAttributeValueTok(enc, ptr, end, &next); switch (tok) { case XML_TOK_NONE: return XML_ERROR_NONE; case XML_TOK_INVALID: if (enc == encoding) eventPtr = next; return XML_ERROR_INVALID_TOKEN; case XML_TOK_PARTIAL: if (enc == encoding) eventPtr = ptr; return XML_ERROR_INVALID_TOKEN; case XML_TOK_CHAR_REF: { XML_Char buf[XML_ENCODE_MAX]; int i; int n = XmlCharRefNumber(enc, ptr); if (n < 0) { if (enc == encoding) eventPtr = ptr; return XML_ERROR_BAD_CHAR_REF; } if (!isCdata && n == 0x20 /* space */ && (poolLength(pool) == 0 || poolLastChar(pool) == 0x20)) break; n = XmlEncode(n, (ICHAR *)buf); if (!n) { if (enc == encoding) eventPtr = ptr; return XML_ERROR_BAD_CHAR_REF; } for (i = 0; i < n; i++) { if (!poolAppendChar(pool, buf[i])) return XML_ERROR_NO_MEMORY; } } break; case XML_TOK_DATA_CHARS: if (!poolAppend(pool, enc, ptr, next)) return XML_ERROR_NO_MEMORY; break; case XML_TOK_TRAILING_CR: next = ptr + enc->minBytesPerChar; /* fall through */ case XML_TOK_ATTRIBUTE_VALUE_S: case XML_TOK_DATA_NEWLINE: if (!isCdata && (poolLength(pool) == 0 || poolLastChar(pool) == 0x20)) break; if (!poolAppendChar(pool, 0x20)) return XML_ERROR_NO_MEMORY; break; case XML_TOK_ENTITY_REF: { const XML_Char *name; ENTITY *entity; char checkEntityDecl; XML_Char ch = (XML_Char) XmlPredefinedEntityName(enc, ptr + enc->minBytesPerChar, next - enc->minBytesPerChar); if (ch) { if (!poolAppendChar(pool, ch)) return XML_ERROR_NO_MEMORY; break; } name = poolStoreString(&temp2Pool, enc, ptr + enc->minBytesPerChar, next - enc->minBytesPerChar); if (!name) return XML_ERROR_NO_MEMORY; entity = (ENTITY *)lookup(&dtd->generalEntities, name, 0); poolDiscard(&temp2Pool); /* first, determine if a check for an existing declaration is needed; if yes, check that the entity exists, and that it is internal, otherwise call the default handler (if called from content) */ if (pool == &dtd->pool) /* are we called from prolog? */ checkEntityDecl = #ifdef XML_DTD prologState.documentEntity && #endif /* XML_DTD */ (dtd->standalone ? !openInternalEntities : !dtd->hasParamEntityRefs); else /* if (pool == &tempPool): we are called from content */ checkEntityDecl = !dtd->hasParamEntityRefs || dtd->standalone; if (checkEntityDecl) { if (!entity) return XML_ERROR_UNDEFINED_ENTITY; else if (!entity->is_internal) return XML_ERROR_ENTITY_DECLARED_IN_PE; } else if (!entity) { /* cannot report skipped entity here - see comments on skippedEntityHandler if (skippedEntityHandler) skippedEntityHandler(handlerArg, name, 0); */ if ((pool == &tempPool) && defaultHandler) reportDefault(parser, enc, ptr, next); break; } if (entity->open) { if (enc == encoding) eventPtr = ptr; return XML_ERROR_RECURSIVE_ENTITY_REF; } if (entity->notation) { if (enc == encoding) eventPtr = ptr; return XML_ERROR_BINARY_ENTITY_REF; } if (!entity->textPtr) { if (enc == encoding) eventPtr = ptr; return XML_ERROR_ATTRIBUTE_EXTERNAL_ENTITY_REF; } else { enum XML_Error result; const XML_Char *textEnd = entity->textPtr + entity->textLen; entity->open = XML_TRUE; result = appendAttributeValue(parser, internalEncoding, isCdata, (char *)entity->textPtr, (char *)textEnd, pool); entity->open = XML_FALSE; if (result) return result; } } break; default: if (enc == encoding) eventPtr = ptr; return XML_ERROR_UNEXPECTED_STATE; } ptr = next; } /* not reached */ } static enum XML_Error storeEntityValue(XML_Parser parser, const ENCODING *enc, const char *entityTextPtr, const char *entityTextEnd) { DTD * const dtd = _dtd; /* save one level of indirection */ STRING_POOL *pool = &(dtd->entityValuePool); enum XML_Error result = XML_ERROR_NONE; #ifdef XML_DTD int oldInEntityValue = prologState.inEntityValue; prologState.inEntityValue = 1; #endif /* XML_DTD */ /* never return Null for the value argument in EntityDeclHandler, since this would indicate an external entity; therefore we have to make sure that entityValuePool.start is not null */ if (!pool->blocks) { if (!poolGrow(pool)) return XML_ERROR_NO_MEMORY; } for (;;) { const char *next; int tok = XmlEntityValueTok(enc, entityTextPtr, entityTextEnd, &next); switch (tok) { case XML_TOK_PARAM_ENTITY_REF: #ifdef XML_DTD if (isParamEntity || enc != encoding) { const XML_Char *name; ENTITY *entity; name = poolStoreString(&tempPool, enc, entityTextPtr + enc->minBytesPerChar, next - enc->minBytesPerChar); if (!name) { result = XML_ERROR_NO_MEMORY; goto endEntityValue; } entity = (ENTITY *)lookup(&dtd->paramEntities, name, 0); poolDiscard(&tempPool); if (!entity) { /* not a well-formedness error - see XML 1.0: WFC Entity Declared */ /* cannot report skipped entity here - see comments on skippedEntityHandler if (skippedEntityHandler) skippedEntityHandler(handlerArg, name, 0); */ dtd->keepProcessing = dtd->standalone; goto endEntityValue; } if (entity->open) { if (enc == encoding) eventPtr = entityTextPtr; result = XML_ERROR_RECURSIVE_ENTITY_REF; goto endEntityValue; } if (entity->systemId) { if (externalEntityRefHandler) { dtd->paramEntityRead = XML_FALSE; entity->open = XML_TRUE; if (!externalEntityRefHandler(externalEntityRefHandlerArg, 0, entity->base, entity->systemId, entity->publicId)) { entity->open = XML_FALSE; result = XML_ERROR_EXTERNAL_ENTITY_HANDLING; goto endEntityValue; } entity->open = XML_FALSE; if (!dtd->paramEntityRead) dtd->keepProcessing = dtd->standalone; } else dtd->keepProcessing = dtd->standalone; } else { entity->open = XML_TRUE; result = storeEntityValue(parser, internalEncoding, (char *)entity->textPtr, (char *)(entity->textPtr + entity->textLen)); entity->open = XML_FALSE; if (result) goto endEntityValue; } break; } #endif /* XML_DTD */ /* In the internal subset, PE references are not legal within markup declarations, e.g entity values in this case. */ eventPtr = entityTextPtr; result = XML_ERROR_PARAM_ENTITY_REF; goto endEntityValue; case XML_TOK_NONE: result = XML_ERROR_NONE; goto endEntityValue; case XML_TOK_ENTITY_REF: case XML_TOK_DATA_CHARS: if (!poolAppend(pool, enc, entityTextPtr, next)) { result = XML_ERROR_NO_MEMORY; goto endEntityValue; } break; case XML_TOK_TRAILING_CR: next = entityTextPtr + enc->minBytesPerChar; /* fall through */ case XML_TOK_DATA_NEWLINE: if (pool->end == pool->ptr && !poolGrow(pool)) { result = XML_ERROR_NO_MEMORY; goto endEntityValue; } *(pool->ptr)++ = 0xA; break; case XML_TOK_CHAR_REF: { XML_Char buf[XML_ENCODE_MAX]; int i; int n = XmlCharRefNumber(enc, entityTextPtr); if (n < 0) { if (enc == encoding) eventPtr = entityTextPtr; result = XML_ERROR_BAD_CHAR_REF; goto endEntityValue; } n = XmlEncode(n, (ICHAR *)buf); if (!n) { if (enc == encoding) eventPtr = entityTextPtr; result = XML_ERROR_BAD_CHAR_REF; goto endEntityValue; } for (i = 0; i < n; i++) { if (pool->end == pool->ptr && !poolGrow(pool)) { result = XML_ERROR_NO_MEMORY; goto endEntityValue; } *(pool->ptr)++ = buf[i]; } } break; case XML_TOK_PARTIAL: if (enc == encoding) eventPtr = entityTextPtr; result = XML_ERROR_INVALID_TOKEN; goto endEntityValue; case XML_TOK_INVALID: if (enc == encoding) eventPtr = next; result = XML_ERROR_INVALID_TOKEN; goto endEntityValue; default: if (enc == encoding) eventPtr = entityTextPtr; result = XML_ERROR_UNEXPECTED_STATE; goto endEntityValue; } entityTextPtr = next; } endEntityValue: #ifdef XML_DTD prologState.inEntityValue = oldInEntityValue; #endif /* XML_DTD */ return result; } static void FASTCALL normalizeLines(XML_Char *s) { XML_Char *p; for (;; s++) { if (*s == XML_T('\0')) return; if (*s == 0xD) break; } p = s; do { if (*s == 0xD) { *p++ = 0xA; if (*++s == 0xA) s++; } else *p++ = *s++; } while (*s); *p = XML_T('\0'); } static int reportProcessingInstruction(XML_Parser parser, const ENCODING *enc, const char *start, const char *end) { const XML_Char *target; XML_Char *data; const char *tem; if (!processingInstructionHandler) { if (defaultHandler) reportDefault(parser, enc, start, end); return 1; } start += enc->minBytesPerChar * 2; tem = start + XmlNameLength(enc, start); target = poolStoreString(&tempPool, enc, start, tem); if (!target) return 0; poolFinish(&tempPool); data = poolStoreString(&tempPool, enc, XmlSkipS(enc, tem), end - enc->minBytesPerChar*2); if (!data) return 0; normalizeLines(data); processingInstructionHandler(handlerArg, target, data); poolClear(&tempPool); return 1; } static int reportComment(XML_Parser parser, const ENCODING *enc, const char *start, const char *end) { XML_Char *data; if (!commentHandler) { if (defaultHandler) reportDefault(parser, enc, start, end); return 1; } data = poolStoreString(&tempPool, enc, start + enc->minBytesPerChar * 4, end - enc->minBytesPerChar * 3); if (!data) return 0; normalizeLines(data); commentHandler(handlerArg, data); poolClear(&tempPool); return 1; } static void reportDefault(XML_Parser parser, const ENCODING *enc, const char *s, const char *end) { if (MUST_CONVERT(enc, s)) { const char **eventPP; const char **eventEndPP; if (enc == encoding) { eventPP = &eventPtr; eventEndPP = &eventEndPtr; } else { eventPP = &(openInternalEntities->internalEventPtr); eventEndPP = &(openInternalEntities->internalEventEndPtr); } do { ICHAR *dataPtr = (ICHAR *)dataBuf; XmlConvert(enc, &s, end, &dataPtr, (ICHAR *)dataBufEnd); *eventEndPP = s; defaultHandler(handlerArg, dataBuf, dataPtr - (ICHAR *)dataBuf); *eventPP = s; } while (s != end); } else defaultHandler(handlerArg, (XML_Char *)s, (XML_Char *)end - (XML_Char *)s); } static int defineAttribute(ELEMENT_TYPE *type, ATTRIBUTE_ID *attId, XML_Bool isCdata, XML_Bool isId, const XML_Char *value, XML_Parser parser) { DEFAULT_ATTRIBUTE *att; if (value || isId) { /* The handling of default attributes gets messed up if we have a default which duplicates a non-default. */ int i; for (i = 0; i < type->nDefaultAtts; i++) if (attId == type->defaultAtts[i].id) return 1; if (isId && !type->idAtt && !attId->xmlns) type->idAtt = attId; } if (type->nDefaultAtts == type->allocDefaultAtts) { if (type->allocDefaultAtts == 0) { type->allocDefaultAtts = 8; type->defaultAtts = (DEFAULT_ATTRIBUTE *)MALLOC(type->allocDefaultAtts * sizeof(DEFAULT_ATTRIBUTE)); if (!type->defaultAtts) return 0; } else { DEFAULT_ATTRIBUTE *temp; int count = type->allocDefaultAtts * 2; temp = (DEFAULT_ATTRIBUTE *) REALLOC(type->defaultAtts, (count * sizeof(DEFAULT_ATTRIBUTE))); if (temp == NULL) return 0; type->allocDefaultAtts = count; type->defaultAtts = temp; } } att = type->defaultAtts + type->nDefaultAtts; att->id = attId; att->value = value; att->isCdata = isCdata; if (!isCdata) attId->maybeTokenized = XML_TRUE; type->nDefaultAtts += 1; return 1; } static int setElementTypePrefix(XML_Parser parser, ELEMENT_TYPE *elementType) { DTD * const dtd = _dtd; /* save one level of indirection */ const XML_Char *name; for (name = elementType->name; *name; name++) { if (*name == XML_T(':')) { PREFIX *prefix; const XML_Char *s; for (s = elementType->name; s != name; s++) { if (!poolAppendChar(&dtd->pool, *s)) return 0; } if (!poolAppendChar(&dtd->pool, XML_T('\0'))) return 0; prefix = (PREFIX *)lookup(&dtd->prefixes, poolStart(&dtd->pool), sizeof(PREFIX)); if (!prefix) return 0; if (prefix->name == poolStart(&dtd->pool)) poolFinish(&dtd->pool); else poolDiscard(&dtd->pool); elementType->prefix = prefix; } } return 1; } static ATTRIBUTE_ID * getAttributeId(XML_Parser parser, const ENCODING *enc, const char *start, const char *end) { DTD * const dtd = _dtd; /* save one level of indirection */ ATTRIBUTE_ID *id; const XML_Char *name; if (!poolAppendChar(&dtd->pool, XML_T('\0'))) return NULL; name = poolStoreString(&dtd->pool, enc, start, end); if (!name) return NULL; /* skip quotation mark - its storage will be re-used (like in name[-1]) */ ++name; id = (ATTRIBUTE_ID *)lookup(&dtd->attributeIds, name, sizeof(ATTRIBUTE_ID)); if (!id) return NULL; if (id->name != name) poolDiscard(&dtd->pool); else { poolFinish(&dtd->pool); if (!ns) ; else if (name[0] == XML_T('x') && name[1] == XML_T('m') && name[2] == XML_T('l') && name[3] == XML_T('n') && name[4] == XML_T('s') && (name[5] == XML_T('\0') || name[5] == XML_T(':'))) { if (name[5] == XML_T('\0')) id->prefix = &dtd->defaultPrefix; else id->prefix = (PREFIX *)lookup(&dtd->prefixes, name + 6, sizeof(PREFIX)); id->xmlns = XML_TRUE; } else { int i; for (i = 0; name[i]; i++) { /* attributes without prefix are *not* in the default namespace */ if (name[i] == XML_T(':')) { int j; for (j = 0; j < i; j++) { if (!poolAppendChar(&dtd->pool, name[j])) return NULL; } if (!poolAppendChar(&dtd->pool, XML_T('\0'))) return NULL; id->prefix = (PREFIX *)lookup(&dtd->prefixes, poolStart(&dtd->pool), sizeof(PREFIX)); if (id->prefix->name == poolStart(&dtd->pool)) poolFinish(&dtd->pool); else poolDiscard(&dtd->pool); break; } } } } return id; } #define CONTEXT_SEP XML_T('\f') static const XML_Char * getContext(XML_Parser parser) { DTD * const dtd = _dtd; /* save one level of indirection */ HASH_TABLE_ITER iter; XML_Bool needSep = XML_FALSE; if (dtd->defaultPrefix.binding) { int i; int len; if (!poolAppendChar(&tempPool, XML_T('='))) return NULL; len = dtd->defaultPrefix.binding->uriLen; if (namespaceSeparator != XML_T('\0')) len--; for (i = 0; i < len; i++) if (!poolAppendChar(&tempPool, dtd->defaultPrefix.binding->uri[i])) return NULL; needSep = XML_TRUE; } hashTableIterInit(&iter, &(dtd->prefixes)); for (;;) { int i; int len; const XML_Char *s; PREFIX *prefix = (PREFIX *)hashTableIterNext(&iter); if (!prefix) break; if (!prefix->binding) continue; if (needSep && !poolAppendChar(&tempPool, CONTEXT_SEP)) return NULL; for (s = prefix->name; *s; s++) if (!poolAppendChar(&tempPool, *s)) return NULL; if (!poolAppendChar(&tempPool, XML_T('='))) return NULL; len = prefix->binding->uriLen; if (namespaceSeparator != XML_T('\0')) len--; for (i = 0; i < len; i++) if (!poolAppendChar(&tempPool, prefix->binding->uri[i])) return NULL; needSep = XML_TRUE; } hashTableIterInit(&iter, &(dtd->generalEntities)); for (;;) { const XML_Char *s; ENTITY *e = (ENTITY *)hashTableIterNext(&iter); if (!e) break; if (!e->open) continue; if (needSep && !poolAppendChar(&tempPool, CONTEXT_SEP)) return NULL; for (s = e->name; *s; s++) if (!poolAppendChar(&tempPool, *s)) return 0; needSep = XML_TRUE; } if (!poolAppendChar(&tempPool, XML_T('\0'))) return NULL; return tempPool.start; } static XML_Bool setContext(XML_Parser parser, const XML_Char *context) { DTD * const dtd = _dtd; /* save one level of indirection */ const XML_Char *s = context; while (*context != XML_T('\0')) { if (*s == CONTEXT_SEP || *s == XML_T('\0')) { ENTITY *e; if (!poolAppendChar(&tempPool, XML_T('\0'))) return XML_FALSE; e = (ENTITY *)lookup(&dtd->generalEntities, poolStart(&tempPool), 0); if (e) e->open = XML_TRUE; if (*s != XML_T('\0')) s++; context = s; poolDiscard(&tempPool); } else if (*s == XML_T('=')) { PREFIX *prefix; if (poolLength(&tempPool) == 0) prefix = &dtd->defaultPrefix; else { if (!poolAppendChar(&tempPool, XML_T('\0'))) return XML_FALSE; prefix = (PREFIX *)lookup(&dtd->prefixes, poolStart(&tempPool), sizeof(PREFIX)); if (!prefix) return XML_FALSE; if (prefix->name == poolStart(&tempPool)) { prefix->name = poolCopyString(&dtd->pool, prefix->name); if (!prefix->name) return XML_FALSE; } poolDiscard(&tempPool); } for (context = s + 1; *context != CONTEXT_SEP && *context != XML_T('\0'); context++) if (!poolAppendChar(&tempPool, *context)) return XML_FALSE; if (!poolAppendChar(&tempPool, XML_T('\0'))) return XML_FALSE; if (addBinding(parser, prefix, NULL, poolStart(&tempPool), &inheritedBindings) != XML_ERROR_NONE) return XML_FALSE; poolDiscard(&tempPool); if (*context != XML_T('\0')) ++context; s = context; } else { if (!poolAppendChar(&tempPool, *s)) return XML_FALSE; s++; } } return XML_TRUE; } static void FASTCALL normalizePublicId(XML_Char *publicId) { XML_Char *p = publicId; XML_Char *s; for (s = publicId; *s; s++) { switch (*s) { case 0x20: case 0xD: case 0xA: if (p != publicId && p[-1] != 0x20) *p++ = 0x20; break; default: *p++ = *s; } } if (p != publicId && p[-1] == 0x20) --p; *p = XML_T('\0'); } static DTD * dtdCreate(const XML_Memory_Handling_Suite *ms) { DTD *p = (DTD *)ms->malloc_fcn(sizeof(DTD)); if (p == NULL) return p; poolInit(&(p->pool), ms); poolInit(&(p->entityValuePool), ms); hashTableInit(&(p->generalEntities), ms); hashTableInit(&(p->elementTypes), ms); hashTableInit(&(p->attributeIds), ms); hashTableInit(&(p->prefixes), ms); #ifdef XML_DTD p->paramEntityRead = XML_FALSE; hashTableInit(&(p->paramEntities), ms); #endif /* XML_DTD */ p->defaultPrefix.name = NULL; p->defaultPrefix.binding = NULL; p->in_eldecl = XML_FALSE; p->scaffIndex = NULL; p->scaffold = NULL; p->scaffLevel = 0; p->scaffSize = 0; p->scaffCount = 0; p->contentStringLen = 0; p->keepProcessing = XML_TRUE; p->hasParamEntityRefs = XML_FALSE; p->standalone = XML_FALSE; return p; } static void dtdReset(DTD *p, const XML_Memory_Handling_Suite *ms) { HASH_TABLE_ITER iter; hashTableIterInit(&iter, &(p->elementTypes)); for (;;) { ELEMENT_TYPE *e = (ELEMENT_TYPE *)hashTableIterNext(&iter); if (!e) break; if (e->allocDefaultAtts != 0) ms->free_fcn(e->defaultAtts); } hashTableClear(&(p->generalEntities)); #ifdef XML_DTD p->paramEntityRead = XML_FALSE; hashTableClear(&(p->paramEntities)); #endif /* XML_DTD */ hashTableClear(&(p->elementTypes)); hashTableClear(&(p->attributeIds)); hashTableClear(&(p->prefixes)); poolClear(&(p->pool)); poolClear(&(p->entityValuePool)); p->defaultPrefix.name = NULL; p->defaultPrefix.binding = NULL; p->in_eldecl = XML_FALSE; ms->free_fcn(p->scaffIndex); p->scaffIndex = NULL; ms->free_fcn(p->scaffold); p->scaffold = NULL; p->scaffLevel = 0; p->scaffSize = 0; p->scaffCount = 0; p->contentStringLen = 0; p->keepProcessing = XML_TRUE; p->hasParamEntityRefs = XML_FALSE; p->standalone = XML_FALSE; } static void dtdDestroy(DTD *p, XML_Bool isDocEntity, const XML_Memory_Handling_Suite *ms) { HASH_TABLE_ITER iter; hashTableIterInit(&iter, &(p->elementTypes)); for (;;) { ELEMENT_TYPE *e = (ELEMENT_TYPE *)hashTableIterNext(&iter); if (!e) break; if (e->allocDefaultAtts != 0) ms->free_fcn(e->defaultAtts); } hashTableDestroy(&(p->generalEntities)); #ifdef XML_DTD hashTableDestroy(&(p->paramEntities)); #endif /* XML_DTD */ hashTableDestroy(&(p->elementTypes)); hashTableDestroy(&(p->attributeIds)); hashTableDestroy(&(p->prefixes)); poolDestroy(&(p->pool)); poolDestroy(&(p->entityValuePool)); if (isDocEntity) { ms->free_fcn(p->scaffIndex); ms->free_fcn(p->scaffold); } ms->free_fcn(p); } /* Do a deep copy of the DTD. Return 0 for out of memory, non-zero otherwise. The new DTD has already been initialized. */ static int dtdCopy(DTD *newDtd, const DTD *oldDtd, const XML_Memory_Handling_Suite *ms) { HASH_TABLE_ITER iter; /* Copy the prefix table. */ hashTableIterInit(&iter, &(oldDtd->prefixes)); for (;;) { const XML_Char *name; const PREFIX *oldP = (PREFIX *)hashTableIterNext(&iter); if (!oldP) break; name = poolCopyString(&(newDtd->pool), oldP->name); if (!name) return 0; if (!lookup(&(newDtd->prefixes), name, sizeof(PREFIX))) return 0; } hashTableIterInit(&iter, &(oldDtd->attributeIds)); /* Copy the attribute id table. */ for (;;) { ATTRIBUTE_ID *newA; const XML_Char *name; const ATTRIBUTE_ID *oldA = (ATTRIBUTE_ID *)hashTableIterNext(&iter); if (!oldA) break; /* Remember to allocate the scratch byte before the name. */ if (!poolAppendChar(&(newDtd->pool), XML_T('\0'))) return 0; name = poolCopyString(&(newDtd->pool), oldA->name); if (!name) return 0; ++name; newA = (ATTRIBUTE_ID *)lookup(&(newDtd->attributeIds), name, sizeof(ATTRIBUTE_ID)); if (!newA) return 0; newA->maybeTokenized = oldA->maybeTokenized; if (oldA->prefix) { newA->xmlns = oldA->xmlns; if (oldA->prefix == &oldDtd->defaultPrefix) newA->prefix = &newDtd->defaultPrefix; else newA->prefix = (PREFIX *)lookup(&(newDtd->prefixes), oldA->prefix->name, 0); } } /* Copy the element type table. */ hashTableIterInit(&iter, &(oldDtd->elementTypes)); for (;;) { int i; ELEMENT_TYPE *newE; const XML_Char *name; const ELEMENT_TYPE *oldE = (ELEMENT_TYPE *)hashTableIterNext(&iter); if (!oldE) break; name = poolCopyString(&(newDtd->pool), oldE->name); if (!name) return 0; newE = (ELEMENT_TYPE *)lookup(&(newDtd->elementTypes), name, sizeof(ELEMENT_TYPE)); if (!newE) return 0; if (oldE->nDefaultAtts) { newE->defaultAtts = (DEFAULT_ATTRIBUTE *) ms->malloc_fcn(oldE->nDefaultAtts * sizeof(DEFAULT_ATTRIBUTE)); if (!newE->defaultAtts) { ms->free_fcn(newE); return 0; } } if (oldE->idAtt) newE->idAtt = (ATTRIBUTE_ID *) lookup(&(newDtd->attributeIds), oldE->idAtt->name, 0); newE->allocDefaultAtts = newE->nDefaultAtts = oldE->nDefaultAtts; if (oldE->prefix) newE->prefix = (PREFIX *)lookup(&(newDtd->prefixes), oldE->prefix->name, 0); for (i = 0; i < newE->nDefaultAtts; i++) { newE->defaultAtts[i].id = (ATTRIBUTE_ID *) lookup(&(newDtd->attributeIds), oldE->defaultAtts[i].id->name, 0); newE->defaultAtts[i].isCdata = oldE->defaultAtts[i].isCdata; if (oldE->defaultAtts[i].value) { newE->defaultAtts[i].value = poolCopyString(&(newDtd->pool), oldE->defaultAtts[i].value); if (!newE->defaultAtts[i].value) return 0; } else newE->defaultAtts[i].value = NULL; } } /* Copy the entity tables. */ if (!copyEntityTable(&(newDtd->generalEntities), &(newDtd->pool), &(oldDtd->generalEntities))) return 0; #ifdef XML_DTD if (!copyEntityTable(&(newDtd->paramEntities), &(newDtd->pool), &(oldDtd->paramEntities))) return 0; newDtd->paramEntityRead = oldDtd->paramEntityRead; #endif /* XML_DTD */ newDtd->keepProcessing = oldDtd->keepProcessing; newDtd->hasParamEntityRefs = oldDtd->hasParamEntityRefs; newDtd->standalone = oldDtd->standalone; /* Don't want deep copying for scaffolding */ newDtd->in_eldecl = oldDtd->in_eldecl; newDtd->scaffold = oldDtd->scaffold; newDtd->contentStringLen = oldDtd->contentStringLen; newDtd->scaffSize = oldDtd->scaffSize; newDtd->scaffLevel = oldDtd->scaffLevel; newDtd->scaffIndex = oldDtd->scaffIndex; return 1; } /* End dtdCopy */ static int copyEntityTable(HASH_TABLE *newTable, STRING_POOL *newPool, const HASH_TABLE *oldTable) { HASH_TABLE_ITER iter; const XML_Char *cachedOldBase = NULL; const XML_Char *cachedNewBase = NULL; hashTableIterInit(&iter, oldTable); for (;;) { ENTITY *newE; const XML_Char *name; const ENTITY *oldE = (ENTITY *)hashTableIterNext(&iter); if (!oldE) break; name = poolCopyString(newPool, oldE->name); if (!name) return 0; newE = (ENTITY *)lookup(newTable, name, sizeof(ENTITY)); if (!newE) return 0; if (oldE->systemId) { const XML_Char *tem = poolCopyString(newPool, oldE->systemId); if (!tem) return 0; newE->systemId = tem; if (oldE->base) { if (oldE->base == cachedOldBase) newE->base = cachedNewBase; else { cachedOldBase = oldE->base; tem = poolCopyString(newPool, cachedOldBase); if (!tem) return 0; cachedNewBase = newE->base = tem; } } if (oldE->publicId) { tem = poolCopyString(newPool, oldE->publicId); if (!tem) return 0; newE->publicId = tem; } } else { const XML_Char *tem = poolCopyStringN(newPool, oldE->textPtr, oldE->textLen); if (!tem) return 0; newE->textPtr = tem; newE->textLen = oldE->textLen; } if (oldE->notation) { const XML_Char *tem = poolCopyString(newPool, oldE->notation); if (!tem) return 0; newE->notation = tem; } newE->is_param = oldE->is_param; newE->is_internal = oldE->is_internal; } return 1; } #define INIT_POWER 6 static XML_Bool FASTCALL keyeq(KEY s1, KEY s2) { for (; *s1 == *s2; s1++, s2++) if (*s1 == 0) return XML_TRUE; return XML_FALSE; } static unsigned long FASTCALL hash(KEY s) { unsigned long h = 0; while (*s) h = CHAR_HASH(h, *s++); return h; } static NAMED * lookup(HASH_TABLE *table, KEY name, size_t createSize) { size_t i; if (table->size == 0) { size_t tsize; if (!createSize) return NULL; table->power = INIT_POWER; /* table->size is a power of 2 */ table->size = (size_t)1 << INIT_POWER; tsize = table->size * sizeof(NAMED *); table->v = (NAMED **)table->mem->malloc_fcn(tsize); if (!table->v) { table->size = 0; return NULL; } memset(table->v, 0, tsize); i = hash(name) & ((unsigned long)table->size - 1); } else { unsigned long h = hash(name); unsigned long mask = (unsigned long)table->size - 1; unsigned char step = 0; i = h & mask; while (table->v[i]) { if (keyeq(name, table->v[i]->name)) return table->v[i]; if (!step) step = PROBE_STEP(h, mask, table->power); i < step ? (i += table->size - step) : (i -= step); } if (!createSize) return NULL; /* check for overflow (table is half full) */ if (table->used >> (table->power - 1)) { unsigned char newPower = table->power + 1; size_t newSize = (size_t)1 << newPower; unsigned long newMask = (unsigned long)newSize - 1; size_t tsize = newSize * sizeof(NAMED *); NAMED **newV = (NAMED **)table->mem->malloc_fcn(tsize); if (!newV) return NULL; memset(newV, 0, tsize); for (i = 0; i < table->size; i++) if (table->v[i]) { unsigned long newHash = hash(table->v[i]->name); size_t j = newHash & newMask; step = 0; while (newV[j]) { if (!step) step = PROBE_STEP(newHash, newMask, newPower); j < step ? (j += newSize - step) : (j -= step); } newV[j] = table->v[i]; } table->mem->free_fcn(table->v); table->v = newV; table->power = newPower; table->size = newSize; i = h & newMask; step = 0; while (table->v[i]) { if (!step) step = PROBE_STEP(h, newMask, newPower); i < step ? (i += newSize - step) : (i -= step); } } } table->v[i] = (NAMED *)table->mem->malloc_fcn(createSize); if (!table->v[i]) return NULL; memset(table->v[i], 0, createSize); table->v[i]->name = name; (table->used)++; return table->v[i]; } static void FASTCALL hashTableClear(HASH_TABLE *table) { size_t i; for (i = 0; i < table->size; i++) { table->mem->free_fcn(table->v[i]); table->v[i] = NULL; } table->used = 0; } static void FASTCALL hashTableDestroy(HASH_TABLE *table) { size_t i; for (i = 0; i < table->size; i++) table->mem->free_fcn(table->v[i]); table->mem->free_fcn(table->v); } static void FASTCALL hashTableInit(HASH_TABLE *p, const XML_Memory_Handling_Suite *ms) { p->power = 0; p->size = 0; p->used = 0; p->v = NULL; p->mem = ms; } static void FASTCALL hashTableIterInit(HASH_TABLE_ITER *iter, const HASH_TABLE *table) { iter->p = table->v; iter->end = iter->p + table->size; } static NAMED * FASTCALL hashTableIterNext(HASH_TABLE_ITER *iter) { while (iter->p != iter->end) { NAMED *tem = *(iter->p)++; if (tem) return tem; } return NULL; } static void FASTCALL poolInit(STRING_POOL *pool, const XML_Memory_Handling_Suite *ms) { pool->blocks = NULL; pool->freeBlocks = NULL; pool->start = NULL; pool->ptr = NULL; pool->end = NULL; pool->mem = ms; } static void FASTCALL poolClear(STRING_POOL *pool) { if (!pool->freeBlocks) pool->freeBlocks = pool->blocks; else { BLOCK *p = pool->blocks; while (p) { BLOCK *tem = p->next; p->next = pool->freeBlocks; pool->freeBlocks = p; p = tem; } } pool->blocks = NULL; pool->start = NULL; pool->ptr = NULL; pool->end = NULL; } static void FASTCALL poolDestroy(STRING_POOL *pool) { BLOCK *p = pool->blocks; while (p) { BLOCK *tem = p->next; pool->mem->free_fcn(p); p = tem; } p = pool->freeBlocks; while (p) { BLOCK *tem = p->next; pool->mem->free_fcn(p); p = tem; } } static XML_Char * poolAppend(STRING_POOL *pool, const ENCODING *enc, const char *ptr, const char *end) { if (!pool->ptr && !poolGrow(pool)) return NULL; for (;;) { XmlConvert(enc, &ptr, end, (ICHAR **)&(pool->ptr), (ICHAR *)pool->end); if (ptr == end) break; if (!poolGrow(pool)) return NULL; } return pool->start; } static const XML_Char * FASTCALL poolCopyString(STRING_POOL *pool, const XML_Char *s) { do { if (!poolAppendChar(pool, *s)) return NULL; } while (*s++); s = pool->start; poolFinish(pool); return s; } static const XML_Char * poolCopyStringN(STRING_POOL *pool, const XML_Char *s, int n) { if (!pool->ptr && !poolGrow(pool)) return NULL; for (; n > 0; --n, s++) { if (!poolAppendChar(pool, *s)) return NULL; } s = pool->start; poolFinish(pool); return s; } static const XML_Char * FASTCALL poolAppendString(STRING_POOL *pool, const XML_Char *s) { while (*s) { if (!poolAppendChar(pool, *s)) return NULL; s++; } return pool->start; } static XML_Char * poolStoreString(STRING_POOL *pool, const ENCODING *enc, const char *ptr, const char *end) { if (!poolAppend(pool, enc, ptr, end)) return NULL; if (pool->ptr == pool->end && !poolGrow(pool)) return NULL; *(pool->ptr)++ = 0; return pool->start; } static XML_Bool FASTCALL poolGrow(STRING_POOL *pool) { if (pool->freeBlocks) { if (pool->start == 0) { pool->blocks = pool->freeBlocks; pool->freeBlocks = pool->freeBlocks->next; pool->blocks->next = NULL; pool->start = pool->blocks->s; pool->end = pool->start + pool->blocks->size; pool->ptr = pool->start; return XML_TRUE; } if (pool->end - pool->start < pool->freeBlocks->size) { BLOCK *tem = pool->freeBlocks->next; pool->freeBlocks->next = pool->blocks; pool->blocks = pool->freeBlocks; pool->freeBlocks = tem; memcpy(pool->blocks->s, pool->start, (pool->end - pool->start) * sizeof(XML_Char)); pool->ptr = pool->blocks->s + (pool->ptr - pool->start); pool->start = pool->blocks->s; pool->end = pool->start + pool->blocks->size; return XML_TRUE; } } if (pool->blocks && pool->start == pool->blocks->s) { int blockSize = (pool->end - pool->start)*2; pool->blocks = (BLOCK *) pool->mem->realloc_fcn(pool->blocks, (offsetof(BLOCK, s) + blockSize * sizeof(XML_Char))); if (pool->blocks == NULL) return XML_FALSE; pool->blocks->size = blockSize; pool->ptr = pool->blocks->s + (pool->ptr - pool->start); pool->start = pool->blocks->s; pool->end = pool->start + blockSize; } else { BLOCK *tem; int blockSize = pool->end - pool->start; if (blockSize < INIT_BLOCK_SIZE) blockSize = INIT_BLOCK_SIZE; else blockSize *= 2; tem = (BLOCK *)pool->mem->malloc_fcn(offsetof(BLOCK, s) + blockSize * sizeof(XML_Char)); if (!tem) return XML_FALSE; tem->size = blockSize; tem->next = pool->blocks; pool->blocks = tem; if (pool->ptr != pool->start) memcpy(tem->s, pool->start, (pool->ptr - pool->start) * sizeof(XML_Char)); pool->ptr = tem->s + (pool->ptr - pool->start); pool->start = tem->s; pool->end = tem->s + blockSize; } return XML_TRUE; } static int FASTCALL nextScaffoldPart(XML_Parser parser) { DTD * const dtd = _dtd; /* save one level of indirection */ CONTENT_SCAFFOLD * me; int next; if (!dtd->scaffIndex) { dtd->scaffIndex = (int *)MALLOC(groupSize * sizeof(int)); if (!dtd->scaffIndex) return -1; dtd->scaffIndex[0] = 0; } if (dtd->scaffCount >= dtd->scaffSize) { CONTENT_SCAFFOLD *temp; if (dtd->scaffold) { temp = (CONTENT_SCAFFOLD *) REALLOC(dtd->scaffold, dtd->scaffSize * 2 * sizeof(CONTENT_SCAFFOLD)); if (temp == NULL) return -1; dtd->scaffSize *= 2; } else { temp = (CONTENT_SCAFFOLD *)MALLOC(INIT_SCAFFOLD_ELEMENTS * sizeof(CONTENT_SCAFFOLD)); if (temp == NULL) return -1; dtd->scaffSize = INIT_SCAFFOLD_ELEMENTS; } dtd->scaffold = temp; } next = dtd->scaffCount++; me = &dtd->scaffold[next]; if (dtd->scaffLevel) { CONTENT_SCAFFOLD *parent = &dtd->scaffold[dtd->scaffIndex[dtd->scaffLevel-1]]; if (parent->lastchild) { dtd->scaffold[parent->lastchild].nextsib = next; } if (!parent->childcnt) parent->firstchild = next; parent->lastchild = next; parent->childcnt++; } me->firstchild = me->lastchild = me->childcnt = me->nextsib = 0; return next; } static void build_node(XML_Parser parser, int src_node, XML_Content *dest, XML_Content **contpos, XML_Char **strpos) { DTD * const dtd = _dtd; /* save one level of indirection */ dest->type = dtd->scaffold[src_node].type; dest->quant = dtd->scaffold[src_node].quant; if (dest->type == XML_CTYPE_NAME) { const XML_Char *src; dest->name = *strpos; src = dtd->scaffold[src_node].name; for (;;) { *(*strpos)++ = *src; if (!*src) break; src++; } dest->numchildren = 0; dest->children = NULL; } else { unsigned int i; int cn; dest->numchildren = dtd->scaffold[src_node].childcnt; dest->children = *contpos; *contpos += dest->numchildren; for (i = 0, cn = dtd->scaffold[src_node].firstchild; i < dest->numchildren; i++, cn = dtd->scaffold[cn].nextsib) { build_node(parser, cn, &(dest->children[i]), contpos, strpos); } dest->name = NULL; } } static XML_Content * build_model (XML_Parser parser) { DTD * const dtd = _dtd; /* save one level of indirection */ XML_Content *ret; XML_Content *cpos; XML_Char * str; int allocsize = (dtd->scaffCount * sizeof(XML_Content) + (dtd->contentStringLen * sizeof(XML_Char))); ret = (XML_Content *)MALLOC(allocsize); if (!ret) return NULL; str = (XML_Char *) (&ret[dtd->scaffCount]); cpos = &ret[1]; build_node(parser, 0, ret, &cpos, &str); return ret; } static ELEMENT_TYPE * getElementType(XML_Parser parser, const ENCODING *enc, const char *ptr, const char *end) { DTD * const dtd = _dtd; /* save one level of indirection */ const XML_Char *name = poolStoreString(&dtd->pool, enc, ptr, end); ELEMENT_TYPE *ret; if (!name) return NULL; ret = (ELEMENT_TYPE *) lookup(&dtd->elementTypes, name, sizeof(ELEMENT_TYPE)); if (!ret) return NULL; if (ret->name != name) poolDiscard(&dtd->pool); else { poolFinish(&dtd->pool); if (!setElementTypePrefix(parser, ret)) return NULL; } return ret; } tla-1.3.5+dfsg/src/expat/lib/libexpat.def0000644000175000017500000000403610457621771016720 0ustar useruser; DEF file for MS VC++ LIBRARY LIBEXPAT DESCRIPTION "Implements an XML parser." EXPORTS XML_DefaultCurrent @1 XML_ErrorString @2 XML_ExpatVersion @3 XML_ExpatVersionInfo @4 XML_ExternalEntityParserCreate @5 XML_GetBase @6 XML_GetBuffer @7 XML_GetCurrentByteCount @8 XML_GetCurrentByteIndex @9 XML_GetCurrentColumnNumber @10 XML_GetCurrentLineNumber @11 XML_GetErrorCode @12 XML_GetIdAttributeIndex @13 XML_GetInputContext @14 XML_GetSpecifiedAttributeCount @15 XML_Parse @16 XML_ParseBuffer @17 XML_ParserCreate @18 XML_ParserCreateNS @19 XML_ParserCreate_MM @20 XML_ParserFree @21 XML_SetAttlistDeclHandler @22 XML_SetBase @23 XML_SetCdataSectionHandler @24 XML_SetCharacterDataHandler @25 XML_SetCommentHandler @26 XML_SetDefaultHandler @27 XML_SetDefaultHandlerExpand @28 XML_SetDoctypeDeclHandler @29 XML_SetElementDeclHandler @30 XML_SetElementHandler @31 XML_SetEncoding @32 XML_SetEndCdataSectionHandler @33 XML_SetEndDoctypeDeclHandler @34 XML_SetEndElementHandler @35 XML_SetEndNamespaceDeclHandler @36 XML_SetEntityDeclHandler @37 XML_SetExternalEntityRefHandler @38 XML_SetExternalEntityRefHandlerArg @39 XML_SetNamespaceDeclHandler @40 XML_SetNotStandaloneHandler @41 XML_SetNotationDeclHandler @42 XML_SetParamEntityParsing @43 XML_SetProcessingInstructionHandler @44 XML_SetReturnNSTriplet @45 XML_SetStartCdataSectionHandler @46 XML_SetStartDoctypeDeclHandler @47 XML_SetStartElementHandler @48 XML_SetStartNamespaceDeclHandler @49 XML_SetUnknownEncodingHandler @50 XML_SetUnparsedEntityDeclHandler @51 XML_SetUserData @52 XML_SetXmlDeclHandler @53 XML_UseParserAsHandlerArg @54 ; added with version 1.95.3 XML_ParserReset @55 XML_SetSkippedEntityHandler @56 ; added with version 1.95.5 XML_GetFeatureList @57 XML_UseForeignDTD @58 ; added with version 1.95.6 XML_FreeContentModel @59 XML_MemMalloc @60 XML_MemRealloc @61 XML_MemFree @62 ; added with version 1.95.8 XML_StopParser @63 XML_ResumeParser @64 XML_GetParsingStatus @65 tla-1.3.5+dfsg/src/expat/lib/xmlrole.h0000644000175000017500000000571710457621771016272 0ustar useruser/* Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd See the file COPYING for copying permission. */ #ifndef XmlRole_INCLUDED #define XmlRole_INCLUDED 1 #ifdef __VMS /* 0 1 2 3 0 1 2 3 1234567890123456789012345678901 1234567890123456789012345678901 */ #define XmlPrologStateInitExternalEntity XmlPrologStateInitExternalEnt #endif #include "xmltok.h" #ifdef __cplusplus extern "C" { #endif enum { XML_ROLE_ERROR = -1, XML_ROLE_NONE = 0, XML_ROLE_XML_DECL, XML_ROLE_INSTANCE_START, XML_ROLE_DOCTYPE_NONE, XML_ROLE_DOCTYPE_NAME, XML_ROLE_DOCTYPE_SYSTEM_ID, XML_ROLE_DOCTYPE_PUBLIC_ID, XML_ROLE_DOCTYPE_INTERNAL_SUBSET, XML_ROLE_DOCTYPE_CLOSE, XML_ROLE_GENERAL_ENTITY_NAME, XML_ROLE_PARAM_ENTITY_NAME, XML_ROLE_ENTITY_NONE, XML_ROLE_ENTITY_VALUE, XML_ROLE_ENTITY_SYSTEM_ID, XML_ROLE_ENTITY_PUBLIC_ID, XML_ROLE_ENTITY_COMPLETE, XML_ROLE_ENTITY_NOTATION_NAME, XML_ROLE_NOTATION_NONE, XML_ROLE_NOTATION_NAME, XML_ROLE_NOTATION_SYSTEM_ID, XML_ROLE_NOTATION_NO_SYSTEM_ID, XML_ROLE_NOTATION_PUBLIC_ID, XML_ROLE_ATTRIBUTE_NAME, XML_ROLE_ATTRIBUTE_TYPE_CDATA, XML_ROLE_ATTRIBUTE_TYPE_ID, XML_ROLE_ATTRIBUTE_TYPE_IDREF, XML_ROLE_ATTRIBUTE_TYPE_IDREFS, XML_ROLE_ATTRIBUTE_TYPE_ENTITY, XML_ROLE_ATTRIBUTE_TYPE_ENTITIES, XML_ROLE_ATTRIBUTE_TYPE_NMTOKEN, XML_ROLE_ATTRIBUTE_TYPE_NMTOKENS, XML_ROLE_ATTRIBUTE_ENUM_VALUE, XML_ROLE_ATTRIBUTE_NOTATION_VALUE, XML_ROLE_ATTLIST_NONE, XML_ROLE_ATTLIST_ELEMENT_NAME, XML_ROLE_IMPLIED_ATTRIBUTE_VALUE, XML_ROLE_REQUIRED_ATTRIBUTE_VALUE, XML_ROLE_DEFAULT_ATTRIBUTE_VALUE, XML_ROLE_FIXED_ATTRIBUTE_VALUE, XML_ROLE_ELEMENT_NONE, XML_ROLE_ELEMENT_NAME, XML_ROLE_CONTENT_ANY, XML_ROLE_CONTENT_EMPTY, XML_ROLE_CONTENT_PCDATA, XML_ROLE_GROUP_OPEN, XML_ROLE_GROUP_CLOSE, XML_ROLE_GROUP_CLOSE_REP, XML_ROLE_GROUP_CLOSE_OPT, XML_ROLE_GROUP_CLOSE_PLUS, XML_ROLE_GROUP_CHOICE, XML_ROLE_GROUP_SEQUENCE, XML_ROLE_CONTENT_ELEMENT, XML_ROLE_CONTENT_ELEMENT_REP, XML_ROLE_CONTENT_ELEMENT_OPT, XML_ROLE_CONTENT_ELEMENT_PLUS, XML_ROLE_PI, XML_ROLE_COMMENT, #ifdef XML_DTD XML_ROLE_TEXT_DECL, XML_ROLE_IGNORE_SECT, XML_ROLE_INNER_PARAM_ENTITY_REF, #endif /* XML_DTD */ XML_ROLE_PARAM_ENTITY_REF }; typedef struct prolog_state { int (PTRCALL *handler) (struct prolog_state *state, int tok, const char *ptr, const char *end, const ENCODING *enc); unsigned level; int role_none; #ifdef XML_DTD unsigned includeLevel; int documentEntity; int inEntityValue; #endif /* XML_DTD */ } PROLOG_STATE; void XmlPrologStateInit(PROLOG_STATE *); #ifdef XML_DTD void XmlPrologStateInitExternalEntity(PROLOG_STATE *); #endif /* XML_DTD */ #define XmlTokenRole(state, tok, ptr, end, enc) \ (((state)->handler)(state, tok, ptr, end, enc)) #ifdef __cplusplus } #endif #endif /* not XmlRole_INCLUDED */ tla-1.3.5+dfsg/src/expat/configure0000755000175000017500000113620110457621771015572 0ustar useruser#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.53 for expat 1.95.8. # # Report bugs to . # # Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, 2002 # Free Software Foundation, Inc. # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. # Find the correct PATH separator. Usually this is `:', but # DJGPP uses `;' like DOS. if test "X${PATH_SEPARATOR+set}" != Xset; then UNAME=${UNAME-`uname 2>/dev/null`} case X$UNAME in *-DOS) lt_cv_sys_path_separator=';' ;; *) lt_cv_sys_path_separator=':' ;; esac PATH_SEPARATOR=$lt_cv_sys_path_separator fi # Check that we are running under the correct shell. SHELL=${CONFIG_SHELL-/bin/sh} case X$ECHO in X*--fallback-echo) # Remove one level of quotation (which was required for Make). ECHO=`echo "$ECHO" | sed 's,\\\\\$\\$0,'$0','` ;; esac echo=${ECHO-echo} if test "X$1" = X--no-reexec; then # Discard the --no-reexec flag, and continue. shift elif test "X$1" = X--fallback-echo; then # Avoid inline document here, it may be left over : elif test "X`($echo '\t') 2>/dev/null`" = 'X\t'; then # Yippee, $echo works! : else # Restart under the correct shell. exec $SHELL "$0" --no-reexec ${1+"$@"} fi if test "X$1" = X--fallback-echo; then # used as fallback echo shift cat </dev/null && echo_test_string="`eval $cmd`" && (test "X$echo_test_string" = "X$echo_test_string") 2>/dev/null then break fi done fi if test "X`($echo '\t') 2>/dev/null`" = 'X\t' && echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then : else # The Solaris, AIX, and Digital Unix default echo programs unquote # backslashes. This makes it impossible to quote backslashes using # echo "$something" | sed 's/\\/\\\\/g' # # So, first we look for a working echo in the user's PATH. IFS="${IFS= }"; save_ifs="$IFS"; IFS=$PATH_SEPARATOR for dir in $PATH /usr/ucb; do if (test -f $dir/echo || test -f $dir/echo$ac_exeext) && test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' && echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then echo="$dir/echo" break fi done IFS="$save_ifs" if test "X$echo" = Xecho; then # We didn't find a better echo, so look for alternatives. if test "X`(print -r '\t') 2>/dev/null`" = 'X\t' && echo_testing_string=`(print -r "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then # This shell has a builtin print -r that does the trick. echo='print -r' elif (test -f /bin/ksh || test -f /bin/ksh$ac_exeext) && test "X$CONFIG_SHELL" != X/bin/ksh; then # If we have ksh, try running configure again with it. ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh} export ORIGINAL_CONFIG_SHELL CONFIG_SHELL=/bin/ksh export CONFIG_SHELL exec $CONFIG_SHELL "$0" --no-reexec ${1+"$@"} else # Try using printf. echo='printf %s\n' if test "X`($echo '\t') 2>/dev/null`" = 'X\t' && echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then # Cool, printf works : elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` && test "X$echo_testing_string" = 'X\t' && echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL export CONFIG_SHELL SHELL="$CONFIG_SHELL" export SHELL echo="$CONFIG_SHELL $0 --fallback-echo" elif echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` && test "X$echo_testing_string" = 'X\t' && echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then echo="$CONFIG_SHELL $0 --fallback-echo" else # maybe with a smaller string... prev=: for cmd in 'echo test' 'sed 2q "$0"' 'sed 10q "$0"' 'sed 20q "$0"' 'sed 50q "$0"'; do if (test "X$echo_test_string" = "X`eval $cmd`") 2>/dev/null then break fi prev="$cmd" done if test "$prev" != 'sed 50q "$0"'; then echo_test_string=`eval $prev` export echo_test_string exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "$0" ${1+"$@"} else # Oops. We lost completely, so just stick with echo. echo=echo fi fi fi fi fi fi # Copy echo and quote the copy suitably for passing to libtool from # the Makefile, instead of quoting the original, which is used later. ECHO=$echo if test "X$ECHO" = "X$CONFIG_SHELL $0 --fallback-echo"; then ECHO="$CONFIG_SHELL \\\$\$0 --fallback-echo" fi if expr a : '\(a\)' >/dev/null 2>&1; then as_expr=expr else as_expr=false fi ## --------------------- ## ## M4sh Initialization. ## ## --------------------- ## # Be Bourne compatible if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then set -o posix fi # NLS nuisances. # Support unset when possible. if (FOO=FOO; unset FOO) >/dev/null 2>&1; then as_unset=unset else as_unset=false fi (set +x; test -n "`(LANG=C; export LANG) 2>&1`") && { $as_unset LANG || test "${LANG+set}" != set; } || { LANG=C; export LANG; } (set +x; test -n "`(LC_ALL=C; export LC_ALL) 2>&1`") && { $as_unset LC_ALL || test "${LC_ALL+set}" != set; } || { LC_ALL=C; export LC_ALL; } (set +x; test -n "`(LC_TIME=C; export LC_TIME) 2>&1`") && { $as_unset LC_TIME || test "${LC_TIME+set}" != set; } || { LC_TIME=C; export LC_TIME; } (set +x; test -n "`(LC_CTYPE=C; export LC_CTYPE) 2>&1`") && { $as_unset LC_CTYPE || test "${LC_CTYPE+set}" != set; } || { LC_CTYPE=C; export LC_CTYPE; } (set +x; test -n "`(LANGUAGE=C; export LANGUAGE) 2>&1`") && { $as_unset LANGUAGE || test "${LANGUAGE+set}" != set; } || { LANGUAGE=C; export LANGUAGE; } (set +x; test -n "`(LC_COLLATE=C; export LC_COLLATE) 2>&1`") && { $as_unset LC_COLLATE || test "${LC_COLLATE+set}" != set; } || { LC_COLLATE=C; export LC_COLLATE; } (set +x; test -n "`(LC_NUMERIC=C; export LC_NUMERIC) 2>&1`") && { $as_unset LC_NUMERIC || test "${LC_NUMERIC+set}" != set; } || { LC_NUMERIC=C; export LC_NUMERIC; } (set +x; test -n "`(LC_MESSAGES=C; export LC_MESSAGES) 2>&1`") && { $as_unset LC_MESSAGES || test "${LC_MESSAGES+set}" != set; } || { LC_MESSAGES=C; export LC_MESSAGES; } # Name of the executable. as_me=`(basename "$0") 2>/dev/null || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)$' \| \ . : '\(.\)' 2>/dev/null || echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; } /^X\/\(\/\/\)$/{ s//\1/; q; } /^X\/\(\/\).*/{ s//\1/; q; } s/.*/./; q'` # PATH needs CR, and LINENO needs CR and PATH. # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conftest.sh echo "exit 0" >>conftest.sh chmod +x conftest.sh if (PATH=".;."; conftest.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conftest.sh fi as_lineno_1=$LINENO as_lineno_2=$LINENO as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` test "x$as_lineno_1" != "x$as_lineno_2" && test "x$as_lineno_3" = "x$as_lineno_2" || { # Find who we are. Look in the path if we contain no path at all # relative or not. case $0 in *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then { echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2 { (exit 1); exit 1; }; } fi case $CONFIG_SHELL in '') as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for as_base in sh bash ksh sh5; do case $as_dir in /*) if ("$as_dir/$as_base" -c ' as_lineno_1=$LINENO as_lineno_2=$LINENO as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` test "x$as_lineno_1" != "x$as_lineno_2" && test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then CONFIG_SHELL=$as_dir/$as_base export CONFIG_SHELL exec "$CONFIG_SHELL" "$0" ${1+"$@"} fi;; esac done done ;; esac # Create $as_me.lineno as a copy of $as_myself, but with $LINENO # uniformly replaced by the line number. The first 'sed' inserts a # line-number line before each line; the second 'sed' does the real # work. The second script uses 'N' to pair each line-number line # with the numbered line, and appends trailing '-' during # substitution so that $LINENO is not a special case at line end. # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) sed '=' <$as_myself | sed ' N s,$,-, : loop s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, t loop s,-$,, s,^['$as_cr_digits']*\n,, ' >$as_me.lineno && chmod +x $as_me.lineno || { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 { (exit 1); exit 1; }; } # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensible to this). . ./$as_me.lineno # Exit status is that of the last command. exit } case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in *c*,-n*) ECHO_N= ECHO_C=' ' ECHO_T=' ' ;; *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; *) ECHO_N= ECHO_C='\c' ECHO_T= ;; esac if expr a : '\(a\)' >/dev/null 2>&1; then as_expr=expr else as_expr=false fi rm -f conf$$ conf$$.exe conf$$.file echo >conf$$.file if ln -s conf$$.file conf$$ 2>/dev/null; then # We could just check for DJGPP; but this test a) works b) is more generic # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). if test -f conf$$.exe; then # Don't use ln at all; we don't have any links as_ln_s='cp -p' else as_ln_s='ln -s' fi elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.file as_executable_p="test -f" # Sed expression to map a string onto a valid CPP name. as_tr_cpp="sed y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g" # Sed expression to map a string onto a valid variable name. as_tr_sh="sed y%*+%pp%;s%[^_$as_cr_alnum]%_%g" # IFS # We need space, tab and new line, in precisely that order. as_nl=' ' IFS=" $as_nl" # CDPATH. $as_unset CDPATH || test "${CDPATH+set}" != set || { CDPATH=$PATH_SEPARATOR; export CDPATH; } # Name of the host. # hostname on some systems (SVR3.2, Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` exec 6>&1 # # Initializations. # ac_default_prefix=/usr/local cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= SHELL=${CONFIG_SHELL-/bin/sh} # Maximum number of lines to put in a shell here document. # This variable seems obsolete. It should probably be removed, and # only ac_max_sed_lines should be used. : ${ac_max_here_lines=38} # Identity of this package. PACKAGE_NAME='expat' PACKAGE_TARNAME='expat' PACKAGE_VERSION='1.95.8' PACKAGE_STRING='expat 1.95.8' PACKAGE_BUGREPORT='expat-bugs@mail.libexpat.org' ac_unique_file="Makefile.in" # Factoring default headers for most tests. ac_includes_default="\ #include #if HAVE_SYS_TYPES_H # include #endif #if HAVE_SYS_STAT_H # include #endif #if STDC_HEADERS # include # include #else # if HAVE_STDLIB_H # include # endif #endif #if HAVE_STRING_H # if !STDC_HEADERS && HAVE_MEMORY_H # include # endif # include #endif #if HAVE_STRINGS_H # include #endif #if HAVE_INTTYPES_H # include #else # if HAVE_STDINT_H # include # endif #endif #if HAVE_UNISTD_H # include #endif" # Initialize some variables set by options. ac_init_help= ac_init_version=false # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datadir='${prefix}/share' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' libdir='${exec_prefix}/lib' includedir='${prefix}/include' oldincludedir='/usr/include' infodir='${prefix}/info' mandir='${prefix}/man' ac_prev= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval "$ac_prev=\$ac_option" ac_prev= continue fi ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'` # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_option in -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad | --data | --dat | --da) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \ | --da=*) datadir=$ac_optarg ;; -disable-* | --disable-*) ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid feature name: $ac_feature" >&2 { (exit 1); exit 1; }; } ac_feature=`echo $ac_feature | sed 's/-/_/g'` eval "enable_$ac_feature=no" ;; -enable-* | --enable-*) ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid feature name: $ac_feature" >&2 { (exit 1); exit 1; }; } ac_feature=`echo $ac_feature | sed 's/-/_/g'` case $ac_option in *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; *) ac_optarg=yes ;; esac eval "enable_$ac_feature='$ac_optarg'" ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst \ | --locals | --local | --loca | --loc | --lo) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* \ | --locals=* | --local=* | --loca=* | --loc=* | --lo=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid package name: $ac_package" >&2 { (exit 1); exit 1; }; } ac_package=`echo $ac_package| sed 's/-/_/g'` case $ac_option in *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; *) ac_optarg=yes ;; esac eval "with_$ac_package='$ac_optarg'" ;; -without-* | --without-*) ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid package name: $ac_package" >&2 { (exit 1); exit 1; }; } ac_package=`echo $ac_package | sed 's/-/_/g'` eval "with_$ac_package=no" ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) { echo "$as_me: error: unrecognized option: $ac_option Try \`$0 --help' for more information." >&2 { (exit 1); exit 1; }; } ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid variable name: $ac_envvar" >&2 { (exit 1); exit 1; }; } ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` eval "$ac_envvar='$ac_optarg'" export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` { echo "$as_me: error: missing argument to $ac_option" >&2 { (exit 1); exit 1; }; } fi # Be sure to have absolute paths. for ac_var in exec_prefix prefix do eval ac_val=$`echo $ac_var` case $ac_val in [\\/$]* | ?:[\\/]* | NONE | '' ) ;; *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 { (exit 1); exit 1; }; };; esac done # Be sure to have absolute paths. for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \ localstatedir libdir includedir oldincludedir infodir mandir do eval ac_val=$`echo $ac_var` case $ac_val in [\\/$]* | ?:[\\/]* ) ;; *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 { (exit 1); exit 1; }; };; esac done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. If a cross compiler is detected then cross compile mode will be used." >&2 elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then its parent. ac_confdir=`(dirname "$0") 2>/dev/null || $as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$0" : 'X\(//\)[^/]' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$0" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` srcdir=$ac_confdir if test ! -r $srcdir/$ac_unique_file; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r $srcdir/$ac_unique_file; then if test "$ac_srcdir_defaulted" = yes; then { echo "$as_me: error: cannot find sources ($ac_unique_file) in $ac_confdir or .." >&2 { (exit 1); exit 1; }; } else { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2 { (exit 1); exit 1; }; } fi fi srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'` ac_env_build_alias_set=${build_alias+set} ac_env_build_alias_value=$build_alias ac_cv_env_build_alias_set=${build_alias+set} ac_cv_env_build_alias_value=$build_alias ac_env_host_alias_set=${host_alias+set} ac_env_host_alias_value=$host_alias ac_cv_env_host_alias_set=${host_alias+set} ac_cv_env_host_alias_value=$host_alias ac_env_target_alias_set=${target_alias+set} ac_env_target_alias_value=$target_alias ac_cv_env_target_alias_set=${target_alias+set} ac_cv_env_target_alias_value=$target_alias ac_env_CC_set=${CC+set} ac_env_CC_value=$CC ac_cv_env_CC_set=${CC+set} ac_cv_env_CC_value=$CC ac_env_CFLAGS_set=${CFLAGS+set} ac_env_CFLAGS_value=$CFLAGS ac_cv_env_CFLAGS_set=${CFLAGS+set} ac_cv_env_CFLAGS_value=$CFLAGS ac_env_LDFLAGS_set=${LDFLAGS+set} ac_env_LDFLAGS_value=$LDFLAGS ac_cv_env_LDFLAGS_set=${LDFLAGS+set} ac_cv_env_LDFLAGS_value=$LDFLAGS ac_env_CPPFLAGS_set=${CPPFLAGS+set} ac_env_CPPFLAGS_value=$CPPFLAGS ac_cv_env_CPPFLAGS_set=${CPPFLAGS+set} ac_cv_env_CPPFLAGS_value=$CPPFLAGS ac_env_CPP_set=${CPP+set} ac_env_CPP_value=$CPP ac_cv_env_CPP_set=${CPP+set} ac_cv_env_CPP_value=$CPP # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures expat 1.95.8 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] _ACEOF cat <<_ACEOF Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --datadir=DIR read-only architecture-independent data [PREFIX/share] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --infodir=DIR info documentation [PREFIX/info] --mandir=DIR man documentation [PREFIX/man] _ACEOF cat <<\_ACEOF System types: --build=BUILD configure for building on BUILD [guessed] --host=HOST cross-compile to build programs to run on HOST [BUILD] _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of expat 1.95.8:";; esac cat <<\_ACEOF Optional Features: --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-shared=PKGS build shared libraries default=yes --enable-static=PKGS build static libraries default=yes --enable-fast-install=PKGS optimize for fast installation default=yes --disable-libtool-lock avoid locking (might break parallel builds) Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-gnu-ld assume the C compiler uses GNU ld default=no --with-pic try to use only PIC/non-PIC objects default=use both Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory CPPFLAGS C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory CPP C preprocessor Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to . _ACEOF fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. ac_popdir=`pwd` for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d $ac_dir || continue ac_builddir=. if test "$ac_dir" != .; then ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` # A "../" for each directory in $ac_dir_suffix. ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` else ac_dir_suffix= ac_top_builddir= fi case $srcdir in .) # No --srcdir option. We are building in place. ac_srcdir=. if test -z "$ac_top_builddir"; then ac_top_srcdir=. else ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` fi ;; [\\/]* | ?:[\\/]* ) # Absolute path. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ;; *) # Relative path. ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_builddir$srcdir ;; esac # Don't blindly perform a `cd "$ac_dir"/$ac_foo && pwd` since $ac_foo can be # absolute. ac_abs_builddir=`cd "$ac_dir" && cd $ac_builddir && pwd` ac_abs_top_builddir=`cd "$ac_dir" && cd $ac_top_builddir && pwd` ac_abs_srcdir=`cd "$ac_dir" && cd $ac_srcdir && pwd` ac_abs_top_srcdir=`cd "$ac_dir" && cd $ac_top_srcdir && pwd` cd $ac_dir # Check for guested configure; otherwise get Cygnus style configure. if test -f $ac_srcdir/configure.gnu; then echo $SHELL $ac_srcdir/configure.gnu --help=recursive elif test -f $ac_srcdir/configure; then echo $SHELL $ac_srcdir/configure --help=recursive elif test -f $ac_srcdir/configure.ac || test -f $ac_srcdir/configure.in; then echo $ac_configure --help else echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi cd $ac_popdir done fi test -n "$ac_init_help" && exit 0 if $ac_init_version; then cat <<\_ACEOF expat configure 1.95.8 generated by GNU Autoconf 2.53 Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit 0 fi exec 5>config.log cat >&5 <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by expat $as_me 1.95.8, which was generated by GNU Autoconf 2.53. Invocation command line was $ $0 $@ _ACEOF { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` hostinfo = `(hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. echo "PATH: $as_dir" done } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Also quote any args containing shell meta-characters. ac_configure_args= ac_sep= for ac_arg do case $ac_arg in -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n ) continue ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) continue ;; *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'" ac_sep=" " ;; esac # Get rid of the leading space. done # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Be sure not to use single quotes in there, as some shells, # such as our DU 5.0 friend, will then `close' the trap. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo cat <<\_ASBOX ## ---------------- ## ## Cache variables. ## ## ---------------- ## _ASBOX echo # The following way of writing the cache mishandles newlines in values, { (set) 2>&1 | case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in *ac_space=\ *) sed -n \ "s/'"'"'/'"'"'\\\\'"'"''"'"'/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p" ;; *) sed -n \ "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" ;; esac; } echo if test -s confdefs.h; then cat <<\_ASBOX ## ----------- ## ## confdefs.h. ## ## ----------- ## _ASBOX echo sed "/^$/d" confdefs.h echo fi test "$ac_signal" != 0 && echo "$as_me: caught signal $ac_signal" echo "$as_me: exit $exit_status" } >&5 rm -f core core.* *.core && rm -rf conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -rf conftest* confdefs.h # AIX cpp loses on an empty file, so make sure it contains at least a newline. echo >confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer explicitly selected file to automatically selected ones. if test -z "$CONFIG_SITE"; then if test "x$prefix" != xNONE; then CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site" else CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" fi fi for ac_site_file in $CONFIG_SITE; do if test -r "$ac_site_file"; then { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5 echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special # files actually), so we avoid doing that. if test -f "$cache_file"; then { echo "$as_me:$LINENO: loading cache $cache_file" >&5 echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . $cache_file;; *) . ./$cache_file;; esac fi else { echo "$as_me:$LINENO: creating cache $cache_file" >&5 echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in `(set) 2>&1 | sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val="\$ac_cv_env_${ac_var}_value" eval ac_new_val="\$ac_env_${ac_var}_value" case $ac_old_set,$ac_new_set in set,) { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5 echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then { echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5 echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} { echo "$as_me:$LINENO: former value: $ac_old_val" >&5 echo "$as_me: former value: $ac_old_val" >&2;} { echo "$as_me:$LINENO: current value: $ac_new_val" >&5 echo "$as_me: current value: $ac_new_val" >&2;} ac_cache_corrupted=: fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) ac_configure_args="$ac_configure_args '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5 echo "$as_me: error: changes in the environment can compromise the build" >&2;} { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5 echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;} { (exit 1); exit 1; }; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_aux_dir= for ac_dir in conftools $srcdir/conftools; do if test -f $ac_dir/install-sh; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f $ac_dir/install.sh; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break elif test -f $ac_dir/shtool; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/shtool install -c" break fi done if test -z "$ac_aux_dir"; then { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in conftools $srcdir/conftools" >&5 echo "$as_me: error: cannot find install-sh or install.sh in conftools $srcdir/conftools" >&2;} { (exit 1); exit 1; }; } fi ac_config_guess="$SHELL $ac_aux_dir/config.guess" ac_config_sub="$SHELL $ac_aux_dir/config.sub" ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure. LIBCURRENT=5 LIBREVISION=0 LIBAGE=5 ac_config_headers="$ac_config_headers expat_config.h" # libtool.m4 - Configure libtool for the host system. -*-Shell-script-*- ## Copyright 1996, 1997, 1998, 1999, 2000, 2001 ## Free Software Foundation, Inc. ## Originally by Gordon Matzigkeit , 1996 ## ## This program is free software; you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation; either version 2 of the License, or ## (at your option) any later version. ## ## This program is distributed in the hope that it will be useful, but ## WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with this program; if not, write to the Free Software ## Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. ## ## As a special exception to the GNU General Public License, if you ## distribute this file as part of a program that contains a ## configuration script generated by Autoconf, you may include it under ## the same distribution terms that you use for the rest of that program. # serial 46 AC_PROG_LIBTOOL # AC_LIBTOOL_HEADER_ASSERT # ------------------------ # AC_LIBTOOL_HEADER_ASSERT # _LT_AC_CHECK_DLFCN # -------------------- # _LT_AC_CHECK_DLFCN # AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE # --------------------------------- # AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE # _LT_AC_LIBTOOL_SYS_PATH_SEPARATOR # --------------------------------- # _LT_AC_LIBTOOL_SYS_PATH_SEPARATOR # _LT_AC_PROG_ECHO_BACKSLASH # -------------------------- # Add some code to the start of the generated configure script which # will find an echo command which doesn't interpret backslashes. # _LT_AC_PROG_ECHO_BACKSLASH # _LT_AC_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE, # ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING) # ------------------------------------------------------------------ # _LT_AC_TRY_DLOPEN_SELF # AC_LIBTOOL_DLOPEN_SELF # ------------------- # AC_LIBTOOL_DLOPEN_SELF # _LT_AC_LTCONFIG_HACK # AC_LIBTOOL_DLOPEN - enable checks for dlopen support # AC_LIBTOOL_WIN32_DLL - declare package support for building win32 dll's # AC_ENABLE_SHARED - implement the --enable-shared flag # Usage: AC_ENABLE_SHARED[(DEFAULT)] # Where DEFAULT is either `yes' or `no'. If omitted, it defaults to # `yes'. # AC_DISABLE_SHARED - set the default shared flag to --disable-shared # AC_ENABLE_STATIC - implement the --enable-static flag # Usage: AC_ENABLE_STATIC[(DEFAULT)] # Where DEFAULT is either `yes' or `no'. If omitted, it defaults to # `yes'. # AC_DISABLE_STATIC - set the default static flag to --disable-static # AC_ENABLE_FAST_INSTALL - implement the --enable-fast-install flag # Usage: AC_ENABLE_FAST_INSTALL[(DEFAULT)] # Where DEFAULT is either `yes' or `no'. If omitted, it defaults to # `yes'. # AC_DISABLE_FAST_INSTALL - set the default to --disable-fast-install # AC_LIBTOOL_PICMODE - implement the --with-pic flag # Usage: AC_LIBTOOL_PICMODE[(MODE)] # Where MODE is either `yes' or `no'. If omitted, it defaults to # `both'. # AC_PATH_TOOL_PREFIX - find a file program which can recognise shared library # AC_PATH_MAGIC - find a file program which can recognise a shared library # AC_PROG_LD - find the path to the GNU or non-GNU linker # AC_PROG_LD_GNU - # AC_PROG_LD_RELOAD_FLAG - find reload flag for linker # -- PORTME Some linkers may need a different reload flag. # AC_DEPLIBS_CHECK_METHOD - how to check for library dependencies # -- PORTME fill in with the dynamic library characteristics # AC_PROG_NM - find the path to a BSD-compatible name lister # AC_CHECK_LIBM - check for math library # AC_LIBLTDL_CONVENIENCE[(dir)] - sets LIBLTDL to the link flags for # the libltdl convenience library and INCLTDL to the include flags for # the libltdl header and adds --enable-ltdl-convenience to the # configure arguments. Note that LIBLTDL and INCLTDL are not # AC_SUBSTed, nor is AC_CONFIG_SUBDIRS called. If DIR is not # provided, it is assumed to be `libltdl'. LIBLTDL will be prefixed # with '${top_builddir}/' and INCLTDL will be prefixed with # '${top_srcdir}/' (note the single quotes!). If your package is not # flat and you're not using automake, define top_builddir and # top_srcdir appropriately in the Makefiles. # AC_LIBLTDL_INSTALLABLE[(dir)] - sets LIBLTDL to the link flags for # the libltdl installable library and INCLTDL to the include flags for # the libltdl header and adds --enable-ltdl-install to the configure # arguments. Note that LIBLTDL and INCLTDL are not AC_SUBSTed, nor is # AC_CONFIG_SUBDIRS called. If DIR is not provided and an installed # libltdl is not found, it is assumed to be `libltdl'. LIBLTDL will # be prefixed with '${top_builddir}/' and INCLTDL will be prefixed # with '${top_srcdir}/' (note the single quotes!). If your package is # not flat and you're not using automake, define top_builddir and # top_srcdir appropriately in the Makefiles. # In the future, this macro may have to be called after AC_PROG_LIBTOOL. # old names # This is just to silence aclocal about the macro not being used # Check whether --enable-shared or --disable-shared was given. if test "${enable_shared+set}" = set; then enableval="$enable_shared" p=${PACKAGE-default} case $enableval in yes) enable_shared=yes ;; no) enable_shared=no ;; *) enable_shared=no # Look at the argument we got. We use all the common list separators. IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:," for pkg in $enableval; do if test "X$pkg" = "X$p"; then enable_shared=yes fi done IFS="$ac_save_ifs" ;; esac else enable_shared=yes fi; # Check whether --enable-static or --disable-static was given. if test "${enable_static+set}" = set; then enableval="$enable_static" p=${PACKAGE-default} case $enableval in yes) enable_static=yes ;; no) enable_static=no ;; *) enable_static=no # Look at the argument we got. We use all the common list separators. IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:," for pkg in $enableval; do if test "X$pkg" = "X$p"; then enable_static=yes fi done IFS="$ac_save_ifs" ;; esac else enable_static=yes fi; # Check whether --enable-fast-install or --disable-fast-install was given. if test "${enable_fast_install+set}" = set; then enableval="$enable_fast_install" p=${PACKAGE-default} case $enableval in yes) enable_fast_install=yes ;; no) enable_fast_install=no ;; *) enable_fast_install=no # Look at the argument we got. We use all the common list separators. IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:," for pkg in $enableval; do if test "X$pkg" = "X$p"; then enable_fast_install=yes fi done IFS="$ac_save_ifs" ;; esac else enable_fast_install=yes fi; # Make sure we can run config.sub. $ac_config_sub sun4 >/dev/null 2>&1 || { { echo "$as_me:$LINENO: error: cannot run $ac_config_sub" >&5 echo "$as_me: error: cannot run $ac_config_sub" >&2;} { (exit 1); exit 1; }; } echo "$as_me:$LINENO: checking build system type" >&5 echo $ECHO_N "checking build system type... $ECHO_C" >&6 if test "${ac_cv_build+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_build_alias=$build_alias test -z "$ac_cv_build_alias" && ac_cv_build_alias=`$ac_config_guess` test -z "$ac_cv_build_alias" && { { echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5 echo "$as_me: error: cannot guess build type; you must specify one" >&2;} { (exit 1); exit 1; }; } ac_cv_build=`$ac_config_sub $ac_cv_build_alias` || { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_build_alias failed" >&5 echo "$as_me: error: $ac_config_sub $ac_cv_build_alias failed" >&2;} { (exit 1); exit 1; }; } fi echo "$as_me:$LINENO: result: $ac_cv_build" >&5 echo "${ECHO_T}$ac_cv_build" >&6 build=$ac_cv_build build_cpu=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` build_vendor=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` build_os=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` echo "$as_me:$LINENO: checking host system type" >&5 echo $ECHO_N "checking host system type... $ECHO_C" >&6 if test "${ac_cv_host+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_host_alias=$host_alias test -z "$ac_cv_host_alias" && ac_cv_host_alias=$ac_cv_build_alias ac_cv_host=`$ac_config_sub $ac_cv_host_alias` || { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_host_alias failed" >&5 echo "$as_me: error: $ac_config_sub $ac_cv_host_alias failed" >&2;} { (exit 1); exit 1; }; } fi echo "$as_me:$LINENO: result: $ac_cv_host" >&5 echo "${ECHO_T}$ac_cv_host" >&6 host=$ac_cv_host host_cpu=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` host_vendor=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` host_os=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 echo "${ECHO_T}$ac_ct_CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi CC=$ac_ct_CC else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="cc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 echo "${ECHO_T}$ac_ct_CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi CC=$ac_ct_CC else CC="$ac_cv_prog_CC" fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift set dummy "$as_dir/$ac_word" ${1+"$@"} shift ac_cv_prog_CC="$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 echo "${ECHO_T}$ac_ct_CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$ac_ct_CC" && break done CC=$ac_ct_CC fi fi test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH" >&5 echo "$as_me: error: no acceptable C compiler found in \$PATH" >&2;} { (exit 1); exit 1; }; } # Provide some information about the compiler. echo "$as_me:$LINENO:" \ "checking for C compiler version" >&5 ac_compiler=`set X $ac_compile; echo $2` { (eval echo "$as_me:$LINENO: \"$ac_compiler --version &5\"") >&5 (eval $ac_compiler --version &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (eval echo "$as_me:$LINENO: \"$ac_compiler -v &5\"") >&5 (eval $ac_compiler -v &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (eval echo "$as_me:$LINENO: \"$ac_compiler -V &5\"") >&5 (eval $ac_compiler -V &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" #include "confdefs.h" #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.exe" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. echo "$as_me:$LINENO: checking for C compiler default output" >&5 echo $ECHO_N "checking for C compiler default output... $ECHO_C" >&6 ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` if { (eval echo "$as_me:$LINENO: \"$ac_link_default\"") >&5 (eval $ac_link_default) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then # Find the output, starting from the most likely. This scheme is # not robust to junk in `.', hence go to wildcards (a.*) only as a last # resort. # Be careful to initialize this variable, since it used to be cached. # Otherwise an old cache value of `no' led to `EXEEXT = no' in a Makefile. ac_cv_exeext= for ac_file in `ls a_out.exe a.exe conftest.exe 2>/dev/null; ls a.out conftest 2>/dev/null; ls a.* conftest.* 2>/dev/null`; do case $ac_file in *.$ac_ext | *.o | *.obj | *.xcoff | *.tds | *.d | *.pdb | *.xSYM ) ;; a.out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` # FIXME: I believe we export ac_cv_exeext for Libtool --akim. export ac_cv_exeext break;; * ) break;; esac done else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 { { echo "$as_me:$LINENO: error: C compiler cannot create executables" >&5 echo "$as_me: error: C compiler cannot create executables" >&2;} { (exit 77); exit 77; }; } fi ac_exeext=$ac_cv_exeext echo "$as_me:$LINENO: result: $ac_file" >&5 echo "${ECHO_T}$ac_file" >&6 # Check the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. echo "$as_me:$LINENO: checking whether the C compiler works" >&5 echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6 # FIXME: These cross compiler hacks should be removed for Autoconf 3.0 # If not cross compiling, check that we can run a simple program. if test "$cross_compiling" != yes; then if { ac_try='./$ac_file' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { echo "$as_me:$LINENO: error: cannot run C compiled programs. If you meant to cross compile, use \`--host'." >&5 echo "$as_me: error: cannot run C compiled programs. If you meant to cross compile, use \`--host'." >&2;} { (exit 1); exit 1; }; } fi fi fi echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 rm -f a.out a.exe conftest$ac_cv_exeext ac_clean_files=$ac_clean_files_save # Check the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. echo "$as_me:$LINENO: checking whether we are cross compiling" >&5 echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6 echo "$as_me:$LINENO: result: $cross_compiling" >&5 echo "${ECHO_T}$cross_compiling" >&6 echo "$as_me:$LINENO: checking for suffix of executables" >&5 echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6 if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in `(ls conftest.exe; ls conftest; ls conftest.*) 2>/dev/null`; do case $ac_file in *.$ac_ext | *.o | *.obj | *.xcoff | *.tds | *.d | *.pdb ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` export ac_cv_exeext break;; * ) break;; esac done else { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link" >&5 echo "$as_me: error: cannot compute suffix of executables: cannot compile and link" >&2;} { (exit 1); exit 1; }; } fi rm -f conftest$ac_cv_exeext echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5 echo "${ECHO_T}$ac_cv_exeext" >&6 rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT echo "$as_me:$LINENO: checking for suffix of object files" >&5 echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6 if test "${ac_cv_objext+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" #include "confdefs.h" #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then for ac_file in `(ls conftest.o conftest.obj; ls conftest.*) 2>/dev/null`; do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 { { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile" >&5 echo "$as_me: error: cannot compute suffix of object files: cannot compile" >&2;} { (exit 1); exit 1; }; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_objext" >&5 echo "${ECHO_T}$ac_cv_objext" >&6 OBJEXT=$ac_cv_objext ac_objext=$OBJEXT echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5 echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6 if test "${ac_cv_c_compiler_gnu+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" #include "confdefs.h" #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_compiler_gnu=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_compiler_gnu=no fi rm -f conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5 echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6 GCC=`test $ac_compiler_gnu = yes && echo yes` ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS CFLAGS="-g" echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5 echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6 if test "${ac_cv_prog_cc_g+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" #include "confdefs.h" #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_prog_cc_g=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_prog_cc_g=no fi rm -f conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 echo "${ECHO_T}$ac_cv_prog_cc_g" >&6 if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi # Some people use a C++ compiler to compile C. Since we use `exit', # in C++ we need to declare it. In case someone uses the same compiler # for both compiling C and C++ we need to have the C++ compiler decide # the declaration of exit, since it's the most demanding environment. cat >conftest.$ac_ext <<_ACEOF #ifndef __cplusplus choke me #endif _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then for ac_declaration in \ ''\ '#include ' \ 'extern "C" void std::exit (int) throw (); using std::exit;' \ 'extern "C" void std::exit (int); using std::exit;' \ 'extern "C" void exit (int) throw ();' \ 'extern "C" void exit (int);' \ 'void exit (int);' do cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" #include "confdefs.h" #include $ac_declaration #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { exit (42); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 continue fi rm -f conftest.$ac_objext conftest.$ac_ext cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" #include "confdefs.h" $ac_declaration #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { exit (42); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then break else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -f conftest.$ac_objext conftest.$ac_ext done rm -f conftest* if test -n "$ac_declaration"; then echo '#ifdef __cplusplus' >>confdefs.h echo $ac_declaration >>confdefs.h echo '#endif' >>confdefs.h fi else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -f conftest.$ac_objext conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # Find the correct PATH separator. Usually this is `:', but # DJGPP uses `;' like DOS. if test "X${PATH_SEPARATOR+set}" != Xset; then UNAME=${UNAME-`uname 2>/dev/null`} case X$UNAME in *-DOS) lt_cv_sys_path_separator=';' ;; *) lt_cv_sys_path_separator=':' ;; esac PATH_SEPARATOR=$lt_cv_sys_path_separator fi # Check whether --with-gnu-ld or --without-gnu-ld was given. if test "${with_gnu_ld+set}" = set; then withval="$with_gnu_ld" test "$withval" = no || with_gnu_ld=yes else with_gnu_ld=no fi; ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. echo "$as_me:$LINENO: checking for ld used by GCC" >&5 echo $ECHO_N "checking for ld used by GCC... $ECHO_C" >&6 case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [\\/]* | [A-Za-z]:[\\/]*) re_direlt='/[^/][^/]*/\.\./' # Canonicalize the path of ld ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'` while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then echo "$as_me:$LINENO: checking for GNU ld" >&5 echo $ECHO_N "checking for GNU ld... $ECHO_C" >&6 else echo "$as_me:$LINENO: checking for non-GNU ld" >&5 echo $ECHO_N "checking for non-GNU ld... $ECHO_C" >&6 fi if test "${lt_cv_path_LD+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -z "$LD"; then IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some GNU ld's only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. if "$lt_cv_path_LD" -v 2>&1 < /dev/null | egrep '(GNU|with BFD)' > /dev/null; then test "$with_gnu_ld" != no && break else test "$with_gnu_ld" != yes && break fi fi done IFS="$ac_save_ifs" else lt_cv_path_LD="$LD" # Let the user override the test with a path. fi fi LD="$lt_cv_path_LD" if test -n "$LD"; then echo "$as_me:$LINENO: result: $LD" >&5 echo "${ECHO_T}$LD" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -z "$LD" && { { echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5 echo "$as_me: error: no acceptable ld found in \$PATH" >&2;} { (exit 1); exit 1; }; } echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5 echo $ECHO_N "checking if the linker ($LD) is GNU ld... $ECHO_C" >&6 if test "${lt_cv_prog_gnu_ld+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # I'd rather use --version here, but apparently some GNU ld's only accept -v. if $LD -v 2>&1 &5; then lt_cv_prog_gnu_ld=yes else lt_cv_prog_gnu_ld=no fi fi echo "$as_me:$LINENO: result: $lt_cv_prog_gnu_ld" >&5 echo "${ECHO_T}$lt_cv_prog_gnu_ld" >&6 with_gnu_ld=$lt_cv_prog_gnu_ld echo "$as_me:$LINENO: checking for $LD option to reload object files" >&5 echo $ECHO_N "checking for $LD option to reload object files... $ECHO_C" >&6 if test "${lt_cv_ld_reload_flag+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_cv_ld_reload_flag='-r' fi echo "$as_me:$LINENO: result: $lt_cv_ld_reload_flag" >&5 echo "${ECHO_T}$lt_cv_ld_reload_flag" >&6 reload_flag=$lt_cv_ld_reload_flag test -n "$reload_flag" && reload_flag=" $reload_flag" echo "$as_me:$LINENO: checking for BSD-compatible nm" >&5 echo $ECHO_N "checking for BSD-compatible nm... $ECHO_C" >&6 if test "${lt_cv_path_NM+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$NM"; then # Let the user override the test. lt_cv_path_NM="$NM" else IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH /usr/ccs/bin /usr/ucb /bin; do test -z "$ac_dir" && ac_dir=. tmp_nm=$ac_dir/${ac_tool_prefix}nm if test -f $tmp_nm || test -f $tmp_nm$ac_exeext ; then # Check to see if the nm accepts a BSD-compat flag. # Adding the `sed 1q' prevents false positives on HP-UX, which says: # nm: unknown option "B" ignored # Tru64's nm complains that /dev/null is an invalid object file if ($tmp_nm -B /dev/null 2>&1 | sed '1q'; exit 0) | egrep '(/dev/null|Invalid file or object type)' >/dev/null; then lt_cv_path_NM="$tmp_nm -B" break elif ($tmp_nm -p /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then lt_cv_path_NM="$tmp_nm -p" break else lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but continue # so that we can try to find one that supports BSD flags fi fi done IFS="$ac_save_ifs" test -z "$lt_cv_path_NM" && lt_cv_path_NM=nm fi fi NM="$lt_cv_path_NM" echo "$as_me:$LINENO: result: $NM" >&5 echo "${ECHO_T}$NM" >&6 echo "$as_me:$LINENO: checking whether ln -s works" >&5 echo $ECHO_N "checking whether ln -s works... $ECHO_C" >&6 LN_S=$as_ln_s if test "$LN_S" = "ln -s"; then echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else echo "$as_me:$LINENO: result: no, using $LN_S" >&5 echo "${ECHO_T}no, using $LN_S" >&6 fi echo "$as_me:$LINENO: checking how to recognise dependant libraries" >&5 echo $ECHO_N "checking how to recognise dependant libraries... $ECHO_C" >&6 if test "${lt_cv_deplibs_check_method+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_cv_file_magic_cmd='$MAGIC_CMD' lt_cv_file_magic_test_file= lt_cv_deplibs_check_method='unknown' # Need to set the preceding variable on all platforms that support # interlibrary dependencies. # 'none' -- dependencies not supported. # `unknown' -- same as none, but documents that we really don't know. # 'pass_all' -- all dependencies passed with no checks. # 'test_compile' -- check by making test program. # 'file_magic [[regex]]' -- check by looking for files in library path # which responds to the $file_magic_cmd with a given egrep regex. # If you have `file' or equivalent on your system and you're not sure # whether `pass_all' will *always* work, you probably want this one. case $host_os in aix4* | aix5*) lt_cv_deplibs_check_method=pass_all ;; beos*) lt_cv_deplibs_check_method=pass_all ;; bsdi4*) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' lt_cv_file_magic_cmd='/usr/bin/file -L' lt_cv_file_magic_test_file=/shlib/libc.so ;; cygwin* | mingw* | pw32*) lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?' lt_cv_file_magic_cmd='$OBJDUMP -f' ;; darwin* | rhapsody*) lt_cv_deplibs_check_method='file_magic Mach-O dynamically linked shared library' lt_cv_file_magic_cmd='/usr/bin/file -L' case "$host_os" in rhapsody* | darwin1.[012]) lt_cv_file_magic_test_file=`echo /System/Library/Frameworks/System.framework/Versions/*/System | head -1` ;; *) # Darwin 1.3 on lt_cv_file_magic_test_file='/usr/lib/libSystem.dylib' ;; esac ;; freebsd*) if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then case $host_cpu in i*86 ) # Not sure whether the presence of OpenBSD here was a mistake. # Let's accept both of them until this is cleared up. lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD)/i[3-9]86 (compact )?demand paged shared library' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` ;; esac else lt_cv_deplibs_check_method=pass_all fi ;; gnu*) lt_cv_deplibs_check_method=pass_all ;; hpux10.20*|hpux11*) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9].[0-9]) shared library' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=/usr/lib/libc.sl ;; irix5* | irix6*) case $host_os in irix5*) # this will be overridden with pass_all, but let us keep it just in case lt_cv_deplibs_check_method="file_magic ELF 32-bit MSB dynamic lib MIPS - version 1" ;; *) case $LD in *-32|*"-32 ") libmagic=32-bit;; *-n32|*"-n32 ") libmagic=N32;; *-64|*"-64 ") libmagic=64-bit;; *) libmagic=never-match;; esac # this will be overridden with pass_all, but let us keep it just in case lt_cv_deplibs_check_method="file_magic ELF ${libmagic} MSB mips-[1234] dynamic lib MIPS - version 1" ;; esac lt_cv_file_magic_test_file=`echo /lib${libsuff}/libc.so*` lt_cv_deplibs_check_method=pass_all ;; # This must be Linux ELF. linux-gnu*) case $host_cpu in alpha* | hppa* | i*86 | powerpc* | sparc* | ia64* ) lt_cv_deplibs_check_method=pass_all ;; *) # glibc up to 2.1.1 does not perform some relocations on ARM lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' ;; esac lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so` ;; netbsd*) if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$' else lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so$' fi ;; newos6*) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=/usr/lib/libnls.so ;; openbsd*) lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB shared object' else lt_cv_deplibs_check_method='file_magic OpenBSD.* shared library' fi ;; osf3* | osf4* | osf5*) # this will be overridden with pass_all, but let us keep it just in case lt_cv_deplibs_check_method='file_magic COFF format alpha shared library' lt_cv_file_magic_test_file=/shlib/libc.so lt_cv_deplibs_check_method=pass_all ;; sco3.2v5*) lt_cv_deplibs_check_method=pass_all ;; solaris*) lt_cv_deplibs_check_method=pass_all lt_cv_file_magic_test_file=/lib/libc.so ;; sysv5uw[78]* | sysv4*uw2*) lt_cv_deplibs_check_method=pass_all ;; sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) case $host_vendor in motorola) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` ;; ncr) lt_cv_deplibs_check_method=pass_all ;; sequent) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' ;; sni) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" lt_cv_file_magic_test_file=/lib/libc.so ;; esac ;; esac fi echo "$as_me:$LINENO: result: $lt_cv_deplibs_check_method" >&5 echo "${ECHO_T}$lt_cv_deplibs_check_method" >&6 file_magic_cmd=$lt_cv_file_magic_cmd deplibs_check_method=$lt_cv_deplibs_check_method # Check for command to grab the raw symbol name followed by C symbol from nm. echo "$as_me:$LINENO: checking command to parse $NM output" >&5 echo $ECHO_N "checking command to parse $NM output... $ECHO_C" >&6 if test "${lt_cv_sys_global_symbol_pipe+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # These are sane defaults that work on at least a few old systems. # [They come from Ultrix. What could be older than Ultrix?!! ;)] # Character class describing NM global symbol codes. symcode='[BCDEGRST]' # Regexp to match symbols that can be accessed directly from C. sympat='\([_A-Za-z][_A-Za-z0-9]*\)' # Transform the above into a raw symbol and a C symbol. symxfrm='\1 \2\3 \3' # Transform an extracted symbol line into a proper C declaration lt_cv_global_symbol_to_cdecl="sed -n -e 's/^. .* \(.*\)$/extern char \1;/p'" # Transform an extracted symbol line into symbol name and symbol address lt_cv_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode \([^ ]*\) \([^ ]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" # Define system-specific variables. case $host_os in aix*) symcode='[BCDT]' ;; cygwin* | mingw* | pw32*) symcode='[ABCDGISTW]' ;; hpux*) # Its linker distinguishes data from code symbols lt_cv_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern char \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" lt_cv_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" ;; irix*) symcode='[BCDEGRST]' ;; solaris* | sysv5*) symcode='[BDT]' ;; sysv4) symcode='[DFNSTU]' ;; esac # Handle CRLF in mingw tool chain opt_cr= case $host_os in mingw*) opt_cr=`echo 'x\{0,1\}' | tr x '\015'` # option cr in regexp ;; esac # If we're using GNU nm, then use its standard symbol codes. if $NM -V 2>&1 | egrep '(GNU|with BFD)' > /dev/null; then symcode='[ABCDGISTW]' fi # Try without a prefix undercore, then with it. for ac_symprfx in "" "_"; do # Write the raw and C identifiers. lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*\($ac_symprfx\)$sympat$opt_cr$/$symxfrm/p'" # Check to see that the pipe works correctly. pipe_works=no rm -f conftest* cat > conftest.$ac_ext <&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then # Now try to grab the symbols. nlist=conftest.nm if { (eval echo "$as_me:$LINENO: \"$NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist\"") >&5 (eval $NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && test -s "$nlist"; then # Try sorting and uniquifying the output. if sort "$nlist" | uniq > "$nlist"T; then mv -f "$nlist"T "$nlist" else rm -f "$nlist"T fi # Make sure that we snagged all the symbols we need. if egrep ' nm_test_var$' "$nlist" >/dev/null; then if egrep ' nm_test_func$' "$nlist" >/dev/null; then cat < conftest.$ac_ext #ifdef __cplusplus extern "C" { #endif EOF # Now generate the symbol file. eval "$lt_cv_global_symbol_to_cdecl"' < "$nlist" >> conftest.$ac_ext' cat <> conftest.$ac_ext #if defined (__STDC__) && __STDC__ # define lt_ptr void * #else # define lt_ptr char * # define const #endif /* The mapping between symbol names and symbols. */ const struct { const char *name; lt_ptr address; } lt_preloaded_symbols[] = { EOF sed "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (lt_ptr) \&\2},/" < "$nlist" >> conftest.$ac_ext cat <<\EOF >> conftest.$ac_ext {0, (lt_ptr) 0} }; #ifdef __cplusplus } #endif EOF # Now try linking the two files. mv conftest.$ac_objext conftstm.$ac_objext save_LIBS="$LIBS" save_CFLAGS="$CFLAGS" LIBS="conftstm.$ac_objext" CFLAGS="$CFLAGS$no_builtin_flag" if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && test -s conftest; then pipe_works=yes fi LIBS="$save_LIBS" CFLAGS="$save_CFLAGS" else echo "cannot find nm_test_func in $nlist" >&5 fi else echo "cannot find nm_test_var in $nlist" >&5 fi else echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 fi else echo "$progname: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -f conftest* conftst* # Do not use the global_symbol_pipe unless it works. if test "$pipe_works" = yes; then break else lt_cv_sys_global_symbol_pipe= fi done fi global_symbol_pipe="$lt_cv_sys_global_symbol_pipe" if test -z "$lt_cv_sys_global_symbol_pipe"; then global_symbol_to_cdecl= global_symbol_to_c_name_address= else global_symbol_to_cdecl="$lt_cv_global_symbol_to_cdecl" global_symbol_to_c_name_address="$lt_cv_global_symbol_to_c_name_address" fi if test -z "$global_symbol_pipe$global_symbol_to_cdec$global_symbol_to_c_name_address"; then echo "$as_me:$LINENO: result: failed" >&5 echo "${ECHO_T}failed" >&6 else echo "$as_me:$LINENO: result: ok" >&5 echo "${ECHO_T}ok" >&6 fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5 echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6 # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if test "${ac_cv_prog_CPP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" #include "confdefs.h" #include Syntax error _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? egrep -v '^ *\+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then : else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether non-existent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" #include "confdefs.h" #include _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? egrep -v '^ *\+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then # Broken: success on invalid input. continue else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi echo "$as_me:$LINENO: result: $CPP" >&5 echo "${ECHO_T}$CPP" >&6 ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" #include "confdefs.h" #include Syntax error _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? egrep -v '^ *\+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then : else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether non-existent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" #include "confdefs.h" #include _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? egrep -v '^ *\+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then # Broken: success on invalid input. continue else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check" >&5 echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check" >&2;} { (exit 1); exit 1; }; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu echo "$as_me:$LINENO: checking for ANSI C header files" >&5 echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6 if test "${ac_cv_header_stdc+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" #include "confdefs.h" #include #include #include #include _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? egrep -v '^ *\+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then ac_cv_header_stdc=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_header_stdc=no fi rm -f conftest.err conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" #include "confdefs.h" #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | egrep "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" #include "confdefs.h" #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | egrep "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : else cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" #include "confdefs.h" #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2); exit (0); } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ( exit $ac_status ) ac_cv_header_stdc=no fi rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi fi echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5 echo "${ECHO_T}$ac_cv_header_stdc" >&6 if test $ac_cv_header_stdc = yes; then cat >>confdefs.h <<\_ACEOF #define STDC_HEADERS 1 _ACEOF fi # On IRIX 5.3, sys/types and inttypes.h are conflicting. for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ inttypes.h stdint.h unistd.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" #include "confdefs.h" $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then eval "$as_ac_Header=yes" else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 eval "$as_ac_Header=no" fi rm -f conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_header in dlfcn.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` if eval "test \"\${$as_ac_Header+set}\" = set"; then echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 else # Is the header compilable? echo "$as_me:$LINENO: checking $ac_header usability" >&5 echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" #include "confdefs.h" $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f conftest.$ac_objext conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6 # Is the header present? echo "$as_me:$LINENO: checking $ac_header presence" >&5 echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" #include "confdefs.h" #include <$ac_header> _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? egrep -v '^ *\+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6 # So? What about this header? case $ac_header_compiler:$ac_header_preproc in yes:no ) { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;};; no:yes ) { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;};; esac echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else eval "$as_ac_Header=$ac_header_preproc" fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 fi if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done # Only perform the check for file, if the check method requires it case $deplibs_check_method in file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then echo "$as_me:$LINENO: checking for ${ac_tool_prefix}file" >&5 echo $ECHO_N "checking for ${ac_tool_prefix}file... $ECHO_C" >&6 if test "${lt_cv_path_MAGIC_CMD+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case $MAGIC_CMD in /*) lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. ;; ?:/*) lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a dos path. ;; *) ac_save_MAGIC_CMD="$MAGIC_CMD" IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" ac_dummy="/usr/bin:$PATH" for ac_dir in $ac_dummy; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/${ac_tool_prefix}file; then lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex="`expr \"$deplibs_check_method\" : \"file_magic \(.*\)\"`" MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | egrep "$file_magic_regex" > /dev/null; then : else cat <&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org EOF fi ;; esac fi break fi done IFS="$ac_save_ifs" MAGIC_CMD="$ac_save_MAGIC_CMD" ;; esac fi MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5 echo "${ECHO_T}$MAGIC_CMD" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then echo "$as_me:$LINENO: checking for file" >&5 echo $ECHO_N "checking for file... $ECHO_C" >&6 if test "${lt_cv_path_MAGIC_CMD+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case $MAGIC_CMD in /*) lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. ;; ?:/*) lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a dos path. ;; *) ac_save_MAGIC_CMD="$MAGIC_CMD" IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" ac_dummy="/usr/bin:$PATH" for ac_dir in $ac_dummy; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/file; then lt_cv_path_MAGIC_CMD="$ac_dir/file" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex="`expr \"$deplibs_check_method\" : \"file_magic \(.*\)\"`" MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | egrep "$file_magic_regex" > /dev/null; then : else cat <&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org EOF fi ;; esac fi break fi done IFS="$ac_save_ifs" MAGIC_CMD="$ac_save_MAGIC_CMD" ;; esac fi MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5 echo "${ECHO_T}$MAGIC_CMD" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi else MAGIC_CMD=: fi fi fi ;; esac if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_RANLIB+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then echo "$as_me:$LINENO: result: $RANLIB" >&5 echo "${ECHO_T}$RANLIB" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_RANLIB="ranlib" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_prog_ac_ct_RANLIB" && ac_cv_prog_ac_ct_RANLIB=":" fi fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5 echo "${ECHO_T}$ac_ct_RANLIB" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi RANLIB=$ac_ct_RANLIB else RANLIB="$ac_cv_prog_RANLIB" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_STRIP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then echo "$as_me:$LINENO: result: $STRIP" >&5 echo "${ECHO_T}$STRIP" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_prog_ac_ct_STRIP" && ac_cv_prog_ac_ct_STRIP=":" fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5 echo "${ECHO_T}$ac_ct_STRIP" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi STRIP=$ac_ct_STRIP else STRIP="$ac_cv_prog_STRIP" fi enable_dlopen=no enable_win32_dll=no # Check whether --enable-libtool-lock or --disable-libtool-lock was given. if test "${enable_libtool_lock+set}" = set; then enableval="$enable_libtool_lock" fi; test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes # Some flags need to be propagated to the compiler or linker for good # libtool support. case $host in *-*-irix6*) # Find out which ABI we are using. echo '#line 3850 "configure"' > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -32" ;; *N32*) LD="${LD-ld} -n32" ;; *64-bit*) LD="${LD-ld} -64" ;; esac fi rm -rf conftest* ;; *-*-sco3.2v5*) # On SCO OpenServer 5, we need -belf to get full-featured binaries. SAVE_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -belf" echo "$as_me:$LINENO: checking whether the C compiler needs -belf" >&5 echo $ECHO_N "checking whether the C compiler needs -belf... $ECHO_C" >&6 if test "${lt_cv_cc_needs_belf+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" #include "confdefs.h" #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then lt_cv_cc_needs_belf=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 lt_cv_cc_needs_belf=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu fi echo "$as_me:$LINENO: result: $lt_cv_cc_needs_belf" >&5 echo "${ECHO_T}$lt_cv_cc_needs_belf" >&6 if test x"$lt_cv_cc_needs_belf" != x"yes"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf CFLAGS="$SAVE_CFLAGS" fi ;; esac # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. Xsed='sed -e s/^X//' sed_quote_subst='s/\([\\"\\`$\\\\]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\([\\"\\`\\\\]\)/\\\1/g' # Sed substitution to delay expansion of an escaped shell variable in a # double_quote_subst'ed string. delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' # Constants: rm="rm -f" # Global variables: default_ofile=libtool can_build_shared=yes # All known linkers require a `.a' archive for static linking (except M$VC, # which needs '.lib'). libext=a ltmain="$ac_aux_dir/ltmain.sh" ofile="$default_ofile" with_gnu_ld="$lt_cv_prog_gnu_ld" need_locks="$enable_libtool_lock" old_CC="$CC" old_CFLAGS="$CFLAGS" # Set sane defaults for various variables test -z "$AR" && AR=ar test -z "$AR_FLAGS" && AR_FLAGS=cru test -z "$AS" && AS=as test -z "$CC" && CC=cc test -z "$DLLTOOL" && DLLTOOL=dlltool test -z "$LD" && LD=ld test -z "$LN_S" && LN_S="ln -s" test -z "$MAGIC_CMD" && MAGIC_CMD=file test -z "$NM" && NM=nm test -z "$OBJDUMP" && OBJDUMP=objdump test -z "$RANLIB" && RANLIB=: test -z "$STRIP" && STRIP=: test -z "$ac_objext" && ac_objext=o if test x"$host" != x"$build"; then ac_tool_prefix=${host_alias}- else ac_tool_prefix= fi # Transform linux* to *-*-linux-gnu*, to support old configure scripts. case $host_os in linux-gnu*) ;; linux*) host=`echo $host | sed 's/^\(.*-.*-linux\)\(.*\)$/\1-gnu\2/'` esac case $host_os in aix3*) # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi ;; esac # Determine commands to create old-style static archives. old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs' old_postinstall_cmds='chmod 644 $oldlib' old_postuninstall_cmds= if test -n "$RANLIB"; then case $host_os in openbsd*) old_postinstall_cmds="\$RANLIB -t \$oldlib~$old_postinstall_cmds" ;; *) old_postinstall_cmds="\$RANLIB \$oldlib~$old_postinstall_cmds" ;; esac old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" fi # Allow CC to be a program name with arguments. set dummy $CC compiler="$2" ## FIXME: this should be a separate macro ## echo "$as_me:$LINENO: checking for objdir" >&5 echo $ECHO_N "checking for objdir... $ECHO_C" >&6 rm -f .libs 2>/dev/null mkdir .libs 2>/dev/null if test -d .libs; then objdir=.libs else # MS-DOS does not allow filenames that begin with a dot. objdir=_libs fi rmdir .libs 2>/dev/null echo "$as_me:$LINENO: result: $objdir" >&5 echo "${ECHO_T}$objdir" >&6 ## ## END FIXME ## FIXME: this should be a separate macro ## # Check whether --with-pic or --without-pic was given. if test "${with_pic+set}" = set; then withval="$with_pic" pic_mode="$withval" else pic_mode=default fi; test -z "$pic_mode" && pic_mode=default # We assume here that the value for lt_cv_prog_cc_pic will not be cached # in isolation, and that seeing it set (from the cache) indicates that # the associated values are set (in the cache) correctly too. echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5 echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6 if test "${lt_cv_prog_cc_pic+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_cv_prog_cc_pic= lt_cv_prog_cc_shlib= lt_cv_prog_cc_wl= lt_cv_prog_cc_static= lt_cv_prog_cc_no_builtin= lt_cv_prog_cc_can_build_shared=$can_build_shared if test "$GCC" = yes; then lt_cv_prog_cc_wl='-Wl,' lt_cv_prog_cc_static='-static' case $host_os in aix*) # Below there is a dirty hack to force normal static linking with -ldl # The problem is because libdl dynamically linked with both libc and # libC (AIX C++ library), which obviously doesn't included in libraries # list by gcc. This cause undefined symbols with -static flags. # This hack allows C programs to be linked with "-static -ldl", but # not sure about C++ programs. lt_cv_prog_cc_static="$lt_cv_prog_cc_static ${lt_cv_prog_cc_wl}-lC" ;; amigaos*) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. lt_cv_prog_cc_pic='-m68020 -resident32 -malways-restore-a4' ;; beos* | irix5* | irix6* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_cv_prog_cc_pic='-fno-common' ;; cygwin* | mingw* | pw32* | os2*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_cv_prog_cc_pic='-DDLL_EXPORT' ;; sysv4*MP*) if test -d /usr/nec; then lt_cv_prog_cc_pic=-Kconform_pic fi ;; *) lt_cv_prog_cc_pic='-fPIC' ;; esac else # PORTME Check for PIC flags for the system compiler. case $host_os in aix3* | aix4* | aix5*) lt_cv_prog_cc_wl='-Wl,' # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_cv_prog_cc_static='-Bstatic' else lt_cv_prog_cc_static='-bnso -bI:/lib/syscalls.exp' fi ;; hpux9* | hpux10* | hpux11*) # Is there a better lt_cv_prog_cc_static that works with the bundled CC? lt_cv_prog_cc_wl='-Wl,' lt_cv_prog_cc_static="${lt_cv_prog_cc_wl}-a ${lt_cv_prog_cc_wl}archive" lt_cv_prog_cc_pic='+Z' ;; irix5* | irix6*) lt_cv_prog_cc_wl='-Wl,' lt_cv_prog_cc_static='-non_shared' # PIC (with -KPIC) is the default. ;; cygwin* | mingw* | pw32* | os2*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_cv_prog_cc_pic='-DDLL_EXPORT' ;; newsos6) lt_cv_prog_cc_pic='-KPIC' lt_cv_prog_cc_static='-Bstatic' ;; osf3* | osf4* | osf5*) # All OSF/1 code is PIC. lt_cv_prog_cc_wl='-Wl,' lt_cv_prog_cc_static='-non_shared' ;; sco3.2v5*) lt_cv_prog_cc_pic='-Kpic' lt_cv_prog_cc_static='-dn' lt_cv_prog_cc_shlib='-belf' ;; solaris*) lt_cv_prog_cc_pic='-KPIC' lt_cv_prog_cc_static='-Bstatic' lt_cv_prog_cc_wl='-Wl,' ;; sunos4*) lt_cv_prog_cc_pic='-PIC' lt_cv_prog_cc_static='-Bstatic' lt_cv_prog_cc_wl='-Qoption ld ' ;; sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) lt_cv_prog_cc_pic='-KPIC' lt_cv_prog_cc_static='-Bstatic' if test "x$host_vendor" = xsni; then lt_cv_prog_cc_wl='-LD' else lt_cv_prog_cc_wl='-Wl,' fi ;; uts4*) lt_cv_prog_cc_pic='-pic' lt_cv_prog_cc_static='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec ;then lt_cv_prog_cc_pic='-Kconform_pic' lt_cv_prog_cc_static='-Bstatic' fi ;; *) lt_cv_prog_cc_can_build_shared=no ;; esac fi fi if test -z "$lt_cv_prog_cc_pic"; then echo "$as_me:$LINENO: result: none" >&5 echo "${ECHO_T}none" >&6 else echo "$as_me:$LINENO: result: $lt_cv_prog_cc_pic" >&5 echo "${ECHO_T}$lt_cv_prog_cc_pic" >&6 # Check to make sure the pic_flag actually works. echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_cv_prog_cc_pic works" >&5 echo $ECHO_N "checking if $compiler PIC flag $lt_cv_prog_cc_pic works... $ECHO_C" >&6 if test "${lt_cv_prog_cc_pic_works+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS $lt_cv_prog_cc_pic -DPIC" cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" #include "confdefs.h" #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then case $host_os in hpux9* | hpux10* | hpux11*) # On HP-UX, both CC and GCC only warn that PIC is supported... then # they create non-PIC objects. So, if there were any warnings, we # assume that PIC is not supported. if test -s conftest.err; then lt_cv_prog_cc_pic_works=no else lt_cv_prog_cc_pic_works=yes fi ;; *) lt_cv_prog_cc_pic_works=yes ;; esac else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 lt_cv_prog_cc_pic_works=no fi rm -f conftest.$ac_objext conftest.$ac_ext CFLAGS="$save_CFLAGS" fi if test "X$lt_cv_prog_cc_pic_works" = Xno; then lt_cv_prog_cc_pic= lt_cv_prog_cc_can_build_shared=no else lt_cv_prog_cc_pic=" $lt_cv_prog_cc_pic" fi echo "$as_me:$LINENO: result: $lt_cv_prog_cc_pic_works" >&5 echo "${ECHO_T}$lt_cv_prog_cc_pic_works" >&6 fi ## ## END FIXME # Check for any special shared library compilation flags. if test -n "$lt_cv_prog_cc_shlib"; then { echo "$as_me:$LINENO: WARNING: \`$CC' requires \`$lt_cv_prog_cc_shlib' to build shared libraries" >&5 echo "$as_me: WARNING: \`$CC' requires \`$lt_cv_prog_cc_shlib' to build shared libraries" >&2;} if echo "$old_CC $old_CFLAGS " | egrep -e "[ ]$lt_cv_prog_cc_shlib[ ]" >/dev/null; then : else { echo "$as_me:$LINENO: WARNING: add \`$lt_cv_prog_cc_shlib' to the CC or CFLAGS env variable and reconfigure" >&5 echo "$as_me: WARNING: add \`$lt_cv_prog_cc_shlib' to the CC or CFLAGS env variable and reconfigure" >&2;} lt_cv_prog_cc_can_build_shared=no fi fi ## FIXME: this should be a separate macro ## echo "$as_me:$LINENO: checking if $compiler static flag $lt_cv_prog_cc_static works" >&5 echo $ECHO_N "checking if $compiler static flag $lt_cv_prog_cc_static works... $ECHO_C" >&6 if test "${lt_cv_prog_cc_static_works+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_cv_prog_cc_static_works=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $lt_cv_prog_cc_static" cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" #include "confdefs.h" #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then lt_cv_prog_cc_static_works=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext LDFLAGS="$save_LDFLAGS" fi # Belt *and* braces to stop my trousers falling down: test "X$lt_cv_prog_cc_static_works" = Xno && lt_cv_prog_cc_static= echo "$as_me:$LINENO: result: $lt_cv_prog_cc_static_works" >&5 echo "${ECHO_T}$lt_cv_prog_cc_static_works" >&6 pic_flag="$lt_cv_prog_cc_pic" special_shlib_compile_flags="$lt_cv_prog_cc_shlib" wl="$lt_cv_prog_cc_wl" link_static_flag="$lt_cv_prog_cc_static" no_builtin_flag="$lt_cv_prog_cc_no_builtin" can_build_shared="$lt_cv_prog_cc_can_build_shared" ## ## END FIXME ## FIXME: this should be a separate macro ## # Check to see if options -o and -c are simultaneously supported by compiler echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6 if test "${lt_cv_compiler_c_o+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else $rm -r conftest 2>/dev/null mkdir conftest cd conftest echo "int some_variable = 0;" > conftest.$ac_ext mkdir out # According to Tom Tromey, Ian Lance Taylor reported there are C compilers # that will create temporary files in the current directory regardless of # the output directory. Thus, making CWD read-only will cause this test # to fail, enabling locking or at least warning the user not to do parallel # builds. chmod -w . save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -o out/conftest2.$ac_objext" compiler_c_o=no if { (eval echo configure:4400: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>out/conftest.err; } && test -s out/conftest2.$ac_objext; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings if test -s out/conftest.err; then lt_cv_compiler_c_o=no else lt_cv_compiler_c_o=yes fi else # Append any errors to the config.log. cat out/conftest.err 1>&5 lt_cv_compiler_c_o=no fi CFLAGS="$save_CFLAGS" chmod u+w . $rm conftest* out/* rmdir out cd .. rmdir conftest $rm -r conftest 2>/dev/null fi compiler_c_o=$lt_cv_compiler_c_o echo "$as_me:$LINENO: result: $compiler_c_o" >&5 echo "${ECHO_T}$compiler_c_o" >&6 if test x"$compiler_c_o" = x"yes"; then # Check to see if we can write to a .lo echo "$as_me:$LINENO: checking if $compiler supports -c -o file.lo" >&5 echo $ECHO_N "checking if $compiler supports -c -o file.lo... $ECHO_C" >&6 if test "${lt_cv_compiler_o_lo+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_cv_compiler_o_lo=no save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -c -o conftest.lo" save_objext="$ac_objext" ac_objext=lo cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" #include "confdefs.h" #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { int some_variable = 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then lt_cv_compiler_o_lo=no else lt_cv_compiler_o_lo=yes fi else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -f conftest.$ac_objext conftest.$ac_ext ac_objext="$save_objext" CFLAGS="$save_CFLAGS" fi compiler_o_lo=$lt_cv_compiler_o_lo echo "$as_me:$LINENO: result: $compiler_o_lo" >&5 echo "${ECHO_T}$compiler_o_lo" >&6 else compiler_o_lo=no fi ## ## END FIXME ## FIXME: this should be a separate macro ## # Check to see if we can do hard links to lock some files if needed hard_links="nottested" if test "$compiler_c_o" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user echo "$as_me:$LINENO: checking if we can lock with hard links" >&5 echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6 hard_links=yes $rm conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no echo "$as_me:$LINENO: result: $hard_links" >&5 echo "${ECHO_T}$hard_links" >&6 if test "$hard_links" = no; then { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} need_locks=warn fi else need_locks=no fi ## ## END FIXME ## FIXME: this should be a separate macro ## if test "$GCC" = yes; then # Check to see if options -fno-rtti -fno-exceptions are supported by compiler echo "$as_me:$LINENO: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 echo $ECHO_N "checking if $compiler supports -fno-rtti -fno-exceptions... $ECHO_C" >&6 echo "int some_variable = 0;" > conftest.$ac_ext save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -fno-rtti -fno-exceptions -c conftest.$ac_ext" compiler_rtti_exceptions=no cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" #include "confdefs.h" #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { int some_variable = 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then compiler_rtti_exceptions=no else compiler_rtti_exceptions=yes fi else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -f conftest.$ac_objext conftest.$ac_ext CFLAGS="$save_CFLAGS" echo "$as_me:$LINENO: result: $compiler_rtti_exceptions" >&5 echo "${ECHO_T}$compiler_rtti_exceptions" >&6 if test "$compiler_rtti_exceptions" = "yes"; then no_builtin_flag=' -fno-builtin -fno-rtti -fno-exceptions' else no_builtin_flag=' -fno-builtin' fi fi ## ## END FIXME ## FIXME: this should be a separate macro ## # See if the linker supports building shared libraries. echo "$as_me:$LINENO: checking whether the linker ($LD) supports shared libraries" >&5 echo $ECHO_N "checking whether the linker ($LD) supports shared libraries... $ECHO_C" >&6 allow_undefined_flag= no_undefined_flag= need_lib_prefix=unknown need_version=unknown # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments archive_cmds= archive_expsym_cmds= old_archive_from_new_cmds= old_archive_from_expsyms_cmds= export_dynamic_flag_spec= whole_archive_flag_spec= thread_safe_flag_spec= hardcode_into_libs=no hardcode_libdir_flag_spec= hardcode_libdir_separator= hardcode_direct=no hardcode_minus_L=no hardcode_shlibpath_var=unsupported runpath_var= link_all_deplibs=unknown always_export_symbols=no export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | sed '\''s/.* //'\'' | sort | uniq > $export_symbols' # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list include_expsyms= # exclude_expsyms can be an egrep regular expression of symbols to exclude # it will be wrapped by ` (' and `)$', so one must not match beginning or # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', # as well as any symbol that contains `d'. exclude_expsyms="_GLOBAL_OFFSET_TABLE_" # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. extract_expsyms_cmds= case $host_os in cygwin* | mingw* | pw32*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test "$GCC" != yes; then with_gnu_ld=no fi ;; openbsd*) with_gnu_ld=no ;; esac ld_shlibs=yes if test "$with_gnu_ld" = yes; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='${wl}' # See if GNU ld supports shared libraries. case $host_os in aix3* | aix4* | aix5*) # On AIX, the GNU linker is very broken # Note:Check GNU linker on AIX 5-IA64 when/if it becomes available. ld_shlibs=no cat <&2 *** Warning: the GNU linker, at least up to release 2.9.1, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to modify your PATH *** so that a non-GNU linker is found, and then restart. EOF ;; amigaos*) archive_cmds='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes # Samuel A. Falvo II reports # that the semantics of dynamic libraries on AmigaOS, at least up # to version 4, is to share data among multiple programs linked # with the same dynamic library. Since this doesn't match the # behavior of shared libraries on other platforms, we can use # them. ld_shlibs=no ;; beos*) if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then allow_undefined_flag=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else ld_shlibs=no fi ;; cygwin* | mingw* | pw32*) # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. hardcode_libdir_flag_spec='-L$libdir' allow_undefined_flag=unsupported always_export_symbols=yes extract_expsyms_cmds='test -f $output_objdir/impgen.c || \ sed -e "/^# \/\* impgen\.c starts here \*\//,/^# \/\* impgen.c ends here \*\// { s/^# //;s/^# *$//; p; }" -e d < $''0 > $output_objdir/impgen.c~ test -f $output_objdir/impgen.exe || (cd $output_objdir && \ if test "x$HOST_CC" != "x" ; then $HOST_CC -o impgen impgen.c ; \ else $CC -o impgen impgen.c ; fi)~ $output_objdir/impgen $dir/$soroot > $output_objdir/$soname-def' old_archive_from_expsyms_cmds='$DLLTOOL --as=$AS --dllname $soname --def $output_objdir/$soname-def --output-lib $output_objdir/$newlib' # cygwin and mingw dlls have different entry points and sets of symbols # to exclude. # FIXME: what about values for MSVC? dll_entry=__cygwin_dll_entry@12 dll_exclude_symbols=DllMain@12,_cygwin_dll_entry@12,_cygwin_noncygwin_dll_entry@12~ case $host_os in mingw*) # mingw values dll_entry=_DllMainCRTStartup@12 dll_exclude_symbols=DllMain@12,DllMainCRTStartup@12,DllEntryPoint@12~ ;; esac # mingw and cygwin differ, and it's simplest to just exclude the union # of the two symbol sets. dll_exclude_symbols=DllMain@12,_cygwin_dll_entry@12,_cygwin_noncygwin_dll_entry@12,DllMainCRTStartup@12,DllEntryPoint@12 # recent cygwin and mingw systems supply a stub DllMain which the user # can override, but on older systems we have to supply one (in ltdll.c) if test "x$lt_cv_need_dllmain" = "xyes"; then ltdll_obj='$output_objdir/$soname-ltdll.'"$ac_objext " ltdll_cmds='test -f $output_objdir/$soname-ltdll.c || sed -e "/^# \/\* ltdll\.c starts here \*\//,/^# \/\* ltdll.c ends here \*\// { s/^# //; p; }" -e d < $''0 > $output_objdir/$soname-ltdll.c~ test -f $output_objdir/$soname-ltdll.$ac_objext || (cd $output_objdir && $CC -c $soname-ltdll.c)~' else ltdll_obj= ltdll_cmds= fi # Extract the symbol export list from an `--export-all' def file, # then regenerate the def file from the symbol export list, so that # the compiled dll only exports the symbol export list. # Be careful not to strip the DATA tag left be newer dlltools. export_symbols_cmds="$ltdll_cmds"' $DLLTOOL --export-all --exclude-symbols '$dll_exclude_symbols' --output-def $output_objdir/$soname-def '$ltdll_obj'$libobjs $convenience~ sed -e "1,/EXPORTS/d" -e "s/ @ [0-9]*//" -e "s/ *;.*$//" < $output_objdir/$soname-def > $export_symbols' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is. # If DATA tags from a recent dlltool are present, honour them! archive_expsym_cmds='if test "x`head -1 $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname-def; else echo EXPORTS > $output_objdir/$soname-def; _lt_hint=1; cat $export_symbols | while read symbol; do set dummy \$symbol; case \$# in 2) echo " \$2 @ \$_lt_hint ; " >> $output_objdir/$soname-def;; *) echo " \$2 @ \$_lt_hint \$3 ; " >> $output_objdir/$soname-def;; esac; _lt_hint=`expr 1 + \$_lt_hint`; done; fi~ '"$ltdll_cmds"' $CC -Wl,--base-file,$output_objdir/$soname-base '$lt_cv_cc_dll_switch' -Wl,-e,'$dll_entry' -o $output_objdir/$soname '$ltdll_obj'$libobjs $deplibs $compiler_flags~ $DLLTOOL --as=$AS --dllname $soname --exclude-symbols '$dll_exclude_symbols' --def $output_objdir/$soname-def --base-file $output_objdir/$soname-base --output-exp $output_objdir/$soname-exp~ $CC -Wl,--base-file,$output_objdir/$soname-base $output_objdir/$soname-exp '$lt_cv_cc_dll_switch' -Wl,-e,'$dll_entry' -o $output_objdir/$soname '$ltdll_obj'$libobjs $deplibs $compiler_flags~ $DLLTOOL --as=$AS --dllname $soname --exclude-symbols '$dll_exclude_symbols' --def $output_objdir/$soname-def --base-file $output_objdir/$soname-base --output-exp $output_objdir/$soname-exp --output-lib $output_objdir/$libname.dll.a~ $CC $output_objdir/$soname-exp '$lt_cv_cc_dll_switch' -Wl,-e,'$dll_entry' -o $output_objdir/$soname '$ltdll_obj'$libobjs $deplibs $compiler_flags' ;; netbsd*) if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else archive_cmds='$CC -shared -nodefaultlibs $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared -nodefaultlibs $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris* | sysv5*) if $LD -v 2>&1 | egrep 'BFD 2\.8' > /dev/null; then ld_shlibs=no cat <&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. EOF elif $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; sunos4*) archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= hardcode_direct=yes hardcode_shlibpath_var=no ;; *) if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; esac if test "$ld_shlibs" = yes; then runpath_var=LD_RUN_PATH hardcode_libdir_flag_spec='${wl}--rpath ${wl}$libdir' export_dynamic_flag_spec='${wl}--export-dynamic' case $host_os in cygwin* | mingw* | pw32*) # dlltool doesn't understand --whole-archive et. al. whole_archive_flag_spec= ;; *) # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | egrep 'no-whole-archive' > /dev/null; then whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else whole_archive_flag_spec= fi ;; esac fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) allow_undefined_flag=unsupported always_export_symbols=yes archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. hardcode_minus_L=yes if test "$GCC" = yes && test -z "$link_static_flag"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. hardcode_direct=unsupported fi ;; aix4* | aix5*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[23]|aix4.[23].*|aix5*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes break fi done esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. hardcode_direct=yes archive_cmds='' hardcode_libdir_separator=':' if test "$GCC" = yes; then case $host_os in aix4.[012]|aix4.[012].*) collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && \ strings "$collect2name" | grep resolve_lib_name >/dev/null then # We have reworked collect2 hardcode_direct=yes else # We have old collect2 hardcode_direct=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking hardcode_minus_L=yes hardcode_libdir_flag_spec='-L$libdir' hardcode_libdir_separator= fi esac shared_flag='-shared' else # not using gcc if test "$host_cpu" = ia64; then shared_flag='${wl}-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi # It seems that -bexpall can do strange things, so it is better to # generate a list of symbols to export. always_export_symbols=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. allow_undefined_flag='-berok' hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:/usr/lib:/lib' archive_expsym_cmds="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' allow_undefined_flag="-z nodefs" archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname ${wl}-h$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols" else hardcode_libdir_flag_spec='${wl}-bnolibpath ${wl}-blibpath:$libdir:/usr/lib:/lib' # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. allow_undefined_flag='${wl}-berok' # This is a bit strange, but is similar to how AIX traditionally builds # it's shared libraries. archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols"' ~$AR -crlo $objdir/$libname$release.a $objdir/$soname' fi fi ;; amigaos*) archive_cmds='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes # see comment about different semantics on the GNU ld section ld_shlibs=no ;; cygwin* | mingw* | pw32*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. hardcode_libdir_flag_spec=' ' allow_undefined_flag=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # FIXME: Setting linknames here is a bad hack. archive_cmds='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | sed -e '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. old_archive_from_new_cmds='true' # FIXME: Should let the user specify the lib program. old_archive_cmds='lib /OUT:$oldlib$oldobjs$old_deplibs' fix_srcfile_path='`cygpath -w "$srcfile"`' ;; darwin* | rhapsody*) case "$host_os" in rhapsody* | darwin1.[012]) allow_undefined_flag='-undefined suppress' ;; *) # Darwin 1.3 on allow_undefined_flag='-flat_namespace -undefined suppress' ;; esac # FIXME: Relying on posixy $() will cause problems for # cross-compilation, but unfortunately the echo tests do not # yet detect zsh echo's removal of \ escapes. archive_cmds='$nonopt $(test "x$module" = xyes && echo -bundle || echo -dynamiclib) $allow_undefined_flag -o $lib $libobjs $deplibs$linker_flags -install_name $rpath/$soname $verstring' # We need to add '_' to the symbols in $export_symbols first #archive_expsym_cmds="$archive_cmds"' && strip -s $export_symbols' hardcode_direct=yes hardcode_shlibpath_var=no whole_archive_flag_spec='-all_load $convenience' ;; freebsd1*) ld_shlibs=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes hardcode_minus_L=yes hardcode_shlibpath_var=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd*) archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; hpux9* | hpux10* | hpux11*) case $host_os in hpux9*) archive_cmds='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' ;; *) archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' ;; esac hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes hardcode_minus_L=yes # Not in the search PATH, but as the default # location of the library. export_dynamic_flag_spec='${wl}-E' ;; irix5* | irix6*) if test "$GCC" = yes; then archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' fi hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: link_all_deplibs=yes ;; netbsd*) if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; newsos6) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: hardcode_shlibpath_var=no ;; openbsd*) hardcode_direct=yes hardcode_shlibpath_var=no if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='${wl}-rpath,$libdir' export_dynamic_flag_spec='${wl}-E' else case "$host_os" in openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-R$libdir' ;; *) archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='${wl}-rpath,$libdir' ;; esac fi ;; os2*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes allow_undefined_flag=unsupported archive_cmds='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' ;; osf3*) if test "$GCC" = yes; then allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else allow_undefined_flag=' -expect_unresolved \*' archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' fi hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test "$GCC" = yes; then allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' else allow_undefined_flag=' -expect_unresolved \*' archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds='for i in `cat $export_symbols`; do printf "-exported_symbol " >> $lib.exp; echo "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~ $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib~$rm $lib.exp' #Both c and cxx compiler support -rpath directly hardcode_libdir_flag_spec='-rpath $libdir' fi hardcode_libdir_separator=: ;; sco3.2v5*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes export_dynamic_flag_spec='${wl}-Bexport' ;; solaris*) # gcc --version < 3.0 without binutils cannot create self contained # shared libraries reliably, requiring libgcc.a to resolve some of # the object symbols generated in some cases. Libraries that use # assert need libgcc.a to resolve __eprintf, for example. Linking # a copy of libgcc.a into every shared library to guarantee resolving # such symbols causes other problems: According to Tim Van Holder # , C++ libraries end up with a separate # (to the application) exception stack for one thing. no_undefined_flag=' -z defs' if test "$GCC" = yes; then case `$CC --version 2>/dev/null` in [12].*) cat <&2 *** Warning: Releases of GCC earlier than version 3.0 cannot reliably *** create self contained shared libraries on Solaris systems, without *** introducing a dependency on libgcc.a. Therefore, libtool is disabling *** -no-undefined support, which will at least allow you to build shared *** libraries. However, you may find that when you link such libraries *** into an application without using GCC, you have to manually add *** \`gcc --print-libgcc-file-name\` to the link command. We urge you to *** upgrade to a newer version of GCC. Another option is to rebuild your *** current GCC to use the GNU linker from GNU binutils 2.9.1 or newer. EOF no_undefined_flag= ;; esac fi # $CC -shared without GNU ld will not create a library from C++ # object files and a static libstdc++, better avoid it by now archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp' hardcode_libdir_flag_spec='-R$libdir' hardcode_shlibpath_var=no case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) # Supported since Solaris 2.6 (maybe 2.5.1?) whole_archive_flag_spec='-z allextract$convenience -z defaultextract' ;; esac link_all_deplibs=yes ;; sunos4*) if test "x$host_vendor" = xsequent; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi hardcode_libdir_flag_spec='-L$libdir' hardcode_direct=yes hardcode_minus_L=yes hardcode_shlibpath_var=no ;; sysv4) if test "x$host_vendor" = xsno; then archive_cmds='$LD -G -Bsymbolic -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes # is this really true??? else archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=no #Motorola manual says yes, but my tests say they lie fi runpath_var='LD_RUN_PATH' hardcode_shlibpath_var=no ;; sysv4.3*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var=no export_dynamic_flag_spec='-Bexport' ;; sysv5*) no_undefined_flag=' -z text' # $CC -shared without GNU ld will not create a library from C++ # object files and a static libstdc++, better avoid it by now archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp' hardcode_libdir_flag_spec= hardcode_shlibpath_var=no runpath_var='LD_RUN_PATH' ;; uts4*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-L$libdir' hardcode_shlibpath_var=no ;; dgux*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-L$libdir' hardcode_shlibpath_var=no ;; sysv4*MP*) if test -d /usr/nec; then archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes ld_shlibs=yes fi ;; sysv4.2uw2*) archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes hardcode_minus_L=no hardcode_shlibpath_var=no hardcode_runpath_var=yes runpath_var=LD_RUN_PATH ;; sysv5uw7* | unixware7*) no_undefined_flag='${wl}-z ${wl}text' if test "$GCC" = yes; then archive_cmds='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$CC -G ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' fi runpath_var='LD_RUN_PATH' hardcode_shlibpath_var=no ;; *) ld_shlibs=no ;; esac fi echo "$as_me:$LINENO: result: $ld_shlibs" >&5 echo "${ECHO_T}$ld_shlibs" >&6 test "$ld_shlibs" = no && can_build_shared=no ## ## END FIXME ## FIXME: this should be a separate macro ## # Check hardcoding attributes. echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5 echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6 hardcode_action= if test -n "$hardcode_libdir_flag_spec" || \ test -n "$runpath_var"; then # We can hardcode non-existant directories. if test "$hardcode_direct" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$hardcode_shlibpath_var" != no && test "$hardcode_minus_L" != no; then # Linking always hardcodes the temporary library directory. hardcode_action=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. hardcode_action=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. hardcode_action=unsupported fi echo "$as_me:$LINENO: result: $hardcode_action" >&5 echo "${ECHO_T}$hardcode_action" >&6 ## ## END FIXME ## FIXME: this should be a separate macro ## striplib= old_striplib= echo "$as_me:$LINENO: checking whether stripping libraries is possible" >&5 echo $ECHO_N "checking whether stripping libraries is possible... $ECHO_C" >&6 if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" test -z "$striplib" && striplib="$STRIP --strip-unneeded" echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi ## ## END FIXME reload_cmds='$LD$reload_flag -o $output$reload_objs' test -z "$deplibs_check_method" && deplibs_check_method=unknown ## FIXME: this should be a separate macro ## # PORTME Fill in your ld.so characteristics echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5 echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6 library_names_spec= libname_spec='lib$name' soname_spec= postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" case $host_os in aix3*) version_type=linux library_names_spec='${libname}${release}.so$versuffix $libname.a' shlibpath_var=LIBPATH # AIX has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}.so$major' ;; aix4* | aix5*) version_type=linux if test "$host_cpu" = ia64; then # AIX 5 supports IA64 library_names_spec='${libname}${release}.so$major ${libname}${release}.so$versuffix $libname.so' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line `#! .'. This would cause the generated library to # depend on `.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[01] | aix4.[01].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then : else can_build_shared=no fi ;; esac # AIX (on Power*) has no versioning support, so currently we can # not hardcode correct soname into executable. Probably we can # add versioning support to collect2, so additional links can # be useful in future. if test "$aix_use_runtimelinking" = yes; then # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so' else # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='${libname}${release}.a $libname.a' soname_spec='${libname}${release}.so$major' fi shlibpath_var=LIBPATH fi ;; amigaos*) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "(cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a)"; (cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a) || exit 1; done' ;; beos*) library_names_spec='${libname}.so' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi4*) version_type=linux need_version=no library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so' soname_spec='${libname}${release}.so$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" export_dynamic_flag_spec=-rdynamic # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32*) version_type=windows need_version=no need_lib_prefix=no case $GCC,$host_os in yes,cygwin*) library_names_spec='$libname.dll.a' soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | sed -e 's/[.]/-/g'`${versuffix}.dll' postinstall_cmds='dlpath=`bash 2>&1 -c '\''. $dir/${file}i;echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog .libs/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`bash 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $rm \$dlpath' ;; yes,mingw*) library_names_spec='${libname}`echo ${release} | sed -e 's/[.]/-/g'`${versuffix}.dll' sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | sed -e "s/^libraries://" -e "s/;/ /g"` ;; yes,pw32*) library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | sed -e 's/./-/g'`${versuffix}.dll' ;; *) library_names_spec='${libname}`echo ${release} | sed -e 's/[.]/-/g'`${versuffix}.dll $libname.lib' ;; esac dynamic_linker='Win32 ld.exe' # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no # FIXME: Relying on posixy $() will cause problems for # cross-compilation, but unfortunately the echo tests do not # yet detect zsh echo's removal of \ escapes. library_names_spec='${libname}${release}${versuffix}.$(test .$module = .yes && echo so || echo dylib) ${libname}${release}${major}.$(test .$module = .yes && echo so || echo dylib) ${libname}.$(test .$module = .yes && echo so || echo dylib)' soname_spec='${libname}${release}${major}.$(test .$module = .yes && echo so || echo dylib)' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH ;; freebsd1*) dynamic_linker=no ;; freebsd*) objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout` version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so $libname.so' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='${libname}${release}.so$versuffix $libname.so$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2*) shlibpath_overrides_runpath=yes ;; *) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; esac ;; gnu*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so${major} ${libname}.so' soname_spec='${libname}${release}.so$major' shlibpath_var=LD_LIBRARY_PATH hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. dynamic_linker="$host_os dld.sl" version_type=sunos need_lib_prefix=no need_version=no shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}.sl$versuffix ${libname}${release}.sl$major $libname.sl' soname_spec='${libname}${release}.sl$major' # HP-UX runs *really* slowly unless shared libraries are mode 555. postinstall_cmds='chmod 555 $lib' ;; irix5* | irix6*) version_type=irix need_lib_prefix=no need_version=no soname_spec='${libname}${release}.so$major' library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major ${libname}${release}.so $libname.so' case $host_os in irix5*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" ;; # No shared lib support for Linux oldld, aout, or coff. linux-gnuoldld* | linux-gnuaout* | linux-gnucoff*) dynamic_linker=no ;; # This must be Linux ELF. linux-gnu*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so' soname_spec='${libname}${release}.so$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then library_names_spec='${libname}${release}.so$versuffix ${libname}.so$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major ${libname}${release}.so ${libname}.so' soname_spec='${libname}${release}.so$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; openbsd*) version_type=sunos need_lib_prefix=no need_version=no if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then case "$host_os" in openbsd2.[89] | openbsd2.[89].*) shlibpath_overrides_runpath=no ;; *) shlibpath_overrides_runpath=yes ;; esac else shlibpath_overrides_runpath=yes fi library_names_spec='${libname}${release}.so$versuffix ${libname}.so$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH ;; os2*) libname_spec='$name' need_lib_prefix=no library_names_spec='$libname.dll $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_version=no soname_spec='${libname}${release}.so' library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so $libname.so' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; sco3.2v5*) version_type=osf soname_spec='${libname}${release}.so$major' library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so' shlibpath_var=LD_LIBRARY_PATH ;; solaris*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so' soname_spec='${libname}${release}.so$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}.so$versuffix ${libname}.so$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) version_type=linux library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so' soname_spec='${libname}${release}.so$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; uts4*) version_type=linux library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so' soname_spec='${libname}${release}.so$major' shlibpath_var=LD_LIBRARY_PATH ;; dgux*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so' soname_spec='${libname}${release}.so$major' shlibpath_var=LD_LIBRARY_PATH ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux library_names_spec='$libname.so.$versuffix $libname.so.$major $libname.so' soname_spec='$libname.so.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; *) dynamic_linker=no ;; esac echo "$as_me:$LINENO: result: $dynamic_linker" >&5 echo "${ECHO_T}$dynamic_linker" >&6 test "$dynamic_linker" = no && can_build_shared=no ## ## END FIXME ## FIXME: this should be a separate macro ## # Report the final consequences. echo "$as_me:$LINENO: checking if libtool supports shared libraries" >&5 echo $ECHO_N "checking if libtool supports shared libraries... $ECHO_C" >&6 echo "$as_me:$LINENO: result: $can_build_shared" >&5 echo "${ECHO_T}$can_build_shared" >&6 ## ## END FIXME ## FIXME: this should be a separate macro ## echo "$as_me:$LINENO: checking whether to build shared libraries" >&5 echo $ECHO_N "checking whether to build shared libraries... $ECHO_C" >&6 test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case "$host_os" in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix4*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac echo "$as_me:$LINENO: result: $enable_shared" >&5 echo "${ECHO_T}$enable_shared" >&6 ## ## END FIXME ## FIXME: this should be a separate macro ## echo "$as_me:$LINENO: checking whether to build static libraries" >&5 echo $ECHO_N "checking whether to build static libraries... $ECHO_C" >&6 # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes echo "$as_me:$LINENO: result: $enable_static" >&5 echo "${ECHO_T}$enable_static" >&6 ## ## END FIXME if test "$hardcode_action" = relink; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi if test "x$enable_dlopen" != xyes; then enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown else lt_cv_dlopen=no lt_cv_dlopen_libs= case $host_os in beos*) lt_cv_dlopen="load_add_on" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ;; cygwin* | mingw* | pw32*) lt_cv_dlopen="LoadLibrary" lt_cv_dlopen_libs= ;; *) echo "$as_me:$LINENO: checking for shl_load" >&5 echo $ECHO_N "checking for shl_load... $ECHO_C" >&6 if test "${ac_cv_func_shl_load+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" #include "confdefs.h" /* System header to define __stub macros and hopefully few prototypes, which can conflict with char shl_load (); below. */ #include /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char shl_load (); char (*f) (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_shl_load) || defined (__stub___shl_load) choke me #else f = shl_load; #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_shl_load=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_func_shl_load=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_func_shl_load" >&5 echo "${ECHO_T}$ac_cv_func_shl_load" >&6 if test $ac_cv_func_shl_load = yes; then lt_cv_dlopen="shl_load" else echo "$as_me:$LINENO: checking for shl_load in -ldld" >&5 echo $ECHO_N "checking for shl_load in -ldld... $ECHO_C" >&6 if test "${ac_cv_lib_dld_shl_load+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char shl_load (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { shl_load (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_dld_shl_load=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_lib_dld_shl_load=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_dld_shl_load" >&5 echo "${ECHO_T}$ac_cv_lib_dld_shl_load" >&6 if test $ac_cv_lib_dld_shl_load = yes; then lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld" else echo "$as_me:$LINENO: checking for dlopen" >&5 echo $ECHO_N "checking for dlopen... $ECHO_C" >&6 if test "${ac_cv_func_dlopen+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" #include "confdefs.h" /* System header to define __stub macros and hopefully few prototypes, which can conflict with char dlopen (); below. */ #include /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dlopen (); char (*f) (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_dlopen) || defined (__stub___dlopen) choke me #else f = dlopen; #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_dlopen=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_func_dlopen=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_func_dlopen" >&5 echo "${ECHO_T}$ac_cv_func_dlopen" >&6 if test $ac_cv_func_dlopen = yes; then lt_cv_dlopen="dlopen" else echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5 echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6 if test "${ac_cv_lib_dl_dlopen+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dlopen (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { dlopen (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_dl_dlopen=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_lib_dl_dlopen=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5 echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6 if test $ac_cv_lib_dl_dlopen = yes; then lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" else echo "$as_me:$LINENO: checking for dlopen in -lsvld" >&5 echo $ECHO_N "checking for dlopen in -lsvld... $ECHO_C" >&6 if test "${ac_cv_lib_svld_dlopen+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsvld $LIBS" cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dlopen (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { dlopen (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_svld_dlopen=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_lib_svld_dlopen=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_svld_dlopen" >&5 echo "${ECHO_T}$ac_cv_lib_svld_dlopen" >&6 if test $ac_cv_lib_svld_dlopen = yes; then lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" else echo "$as_me:$LINENO: checking for dld_link in -ldld" >&5 echo $ECHO_N "checking for dld_link in -ldld... $ECHO_C" >&6 if test "${ac_cv_lib_dld_dld_link+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dld_link (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { dld_link (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_dld_dld_link=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_lib_dld_dld_link=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_dld_dld_link" >&5 echo "${ECHO_T}$ac_cv_lib_dld_dld_link" >&6 if test $ac_cv_lib_dld_dld_link = yes; then lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld" fi fi fi fi fi fi ;; esac if test "x$lt_cv_dlopen" != xno; then enable_dlopen=yes else enable_dlopen=no fi case $lt_cv_dlopen in dlopen) save_CPPFLAGS="$CPPFLAGS" test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" save_LDFLAGS="$LDFLAGS" eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" save_LIBS="$LIBS" LIBS="$lt_cv_dlopen_libs $LIBS" echo "$as_me:$LINENO: checking whether a program can dlopen itself" >&5 echo $ECHO_N "checking whether a program can dlopen itself... $ECHO_C" >&6 if test "${lt_cv_dlopen_self+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$cross_compiling" = yes; then : lt_cv_dlopen_self=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext < #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif #ifdef __cplusplus extern "C" void exit (int); #endif void fnord() { int i=42;} int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; /* dlclose (self); */ } exit (status); } EOF if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; x$lt_unknown|x*) lt_cv_dlopen_self=no ;; esac else : # compilation failed lt_cv_dlopen_self=no fi fi rm -fr conftest* fi echo "$as_me:$LINENO: result: $lt_cv_dlopen_self" >&5 echo "${ECHO_T}$lt_cv_dlopen_self" >&6 if test "x$lt_cv_dlopen_self" = xyes; then LDFLAGS="$LDFLAGS $link_static_flag" echo "$as_me:$LINENO: checking whether a statically linked program can dlopen itself" >&5 echo $ECHO_N "checking whether a statically linked program can dlopen itself... $ECHO_C" >&6 if test "${lt_cv_dlopen_self_static+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$cross_compiling" = yes; then : lt_cv_dlopen_self_static=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext < #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif #ifdef __cplusplus extern "C" void exit (int); #endif void fnord() { int i=42;} int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; /* dlclose (self); */ } exit (status); } EOF if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_unknown|x*) lt_cv_dlopen_self_static=no ;; esac else : # compilation failed lt_cv_dlopen_self_static=no fi fi rm -fr conftest* fi echo "$as_me:$LINENO: result: $lt_cv_dlopen_self_static" >&5 echo "${ECHO_T}$lt_cv_dlopen_self_static" >&6 fi CPPFLAGS="$save_CPPFLAGS" LDFLAGS="$save_LDFLAGS" LIBS="$save_LIBS" ;; esac case $lt_cv_dlopen_self in yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; *) enable_dlopen_self=unknown ;; esac case $lt_cv_dlopen_self_static in yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; *) enable_dlopen_self_static=unknown ;; esac fi ## FIXME: this should be a separate macro ## if test "$enable_shared" = yes && test "$GCC" = yes; then case $archive_cmds in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5 echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6 if test "${lt_cv_archive_cmds_need_lc+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else $rm conftest* echo 'static int dummy;' > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$lt_cv_prog_cc_wl compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest save_allow_undefined_flag=$allow_undefined_flag allow_undefined_flag= if { (eval echo "$as_me:$LINENO: \"$archive_cmds 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5 (eval $archive_cmds 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } then lt_cv_archive_cmds_need_lc=no else lt_cv_archive_cmds_need_lc=yes fi allow_undefined_flag=$save_allow_undefined_flag else cat conftest.err 1>&5 fi fi echo "$as_me:$LINENO: result: $lt_cv_archive_cmds_need_lc" >&5 echo "${ECHO_T}$lt_cv_archive_cmds_need_lc" >&6 ;; esac fi need_lc=${lt_cv_archive_cmds_need_lc-yes} ## ## END FIXME ## FIXME: this should be a separate macro ## # The second clause should only fire when bootstrapping the # libtool distribution, otherwise you forgot to ship ltmain.sh # with your package, and you will get complaints that there are # no rules to generate ltmain.sh. if test -f "$ltmain"; then : else # If there is no Makefile yet, we rely on a make rule to execute # `config.status --recheck' to rerun these tests and create the # libtool script then. test -f Makefile && make "$ltmain" fi if test -f "$ltmain"; then trap "$rm \"${ofile}T\"; exit 1" 1 2 15 $rm -f "${ofile}T" echo creating $ofile # Now quote all the things that may contain metacharacters while being # careful not to overquote the AC_SUBSTed values. We take copies of the # variables and quote the copies for generation of the libtool script. for var in echo old_CC old_CFLAGS \ AR AR_FLAGS CC LD LN_S NM SHELL \ reload_flag reload_cmds wl \ pic_flag link_static_flag no_builtin_flag export_dynamic_flag_spec \ thread_safe_flag_spec whole_archive_flag_spec libname_spec \ library_names_spec soname_spec \ RANLIB old_archive_cmds old_archive_from_new_cmds old_postinstall_cmds \ old_postuninstall_cmds archive_cmds archive_expsym_cmds postinstall_cmds \ postuninstall_cmds extract_expsyms_cmds old_archive_from_expsyms_cmds \ old_striplib striplib file_magic_cmd export_symbols_cmds \ deplibs_check_method allow_undefined_flag no_undefined_flag \ finish_cmds finish_eval global_symbol_pipe global_symbol_to_cdecl \ global_symbol_to_c_name_address \ hardcode_libdir_flag_spec hardcode_libdir_separator \ sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ compiler_c_o compiler_o_lo need_locks exclude_expsyms include_expsyms; do case $var in reload_cmds | old_archive_cmds | old_archive_from_new_cmds | \ old_postinstall_cmds | old_postuninstall_cmds | \ export_symbols_cmds | archive_cmds | archive_expsym_cmds | \ extract_expsyms_cmds | old_archive_from_expsyms_cmds | \ postinstall_cmds | postuninstall_cmds | \ finish_cmds | sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) # Double-quote double-evaled strings. eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" ;; *) eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" ;; esac done cat <<__EOF__ > "${ofile}T" #! $SHELL # `$echo "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. # Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP) # NOTE: Changes made to this file will be lost: look at ltmain.sh. # # Copyright (C) 1996-2000 Free Software Foundation, Inc. # Originally by Gordon Matzigkeit , 1996 # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Sed that helps us avoid accidentally triggering echo(1) options like -n. Xsed="sed -e s/^X//" # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. if test "X\${CDPATH+set}" = Xset; then CDPATH=:; export CDPATH; fi # ### BEGIN LIBTOOL CONFIG # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # Shell to use when invoking shell scripts. SHELL=$lt_SHELL # Whether or not to build shared libraries. build_libtool_libs=$enable_shared # Whether or not to build static libraries. build_old_libs=$enable_static # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$need_lc # Whether or not to optimize for fast installation. fast_install=$enable_fast_install # The host system. host_alias=$host_alias host=$host # An echo program that does not interpret backslashes. echo=$lt_echo # The archiver. AR=$lt_AR AR_FLAGS=$lt_AR_FLAGS # The default C compiler. CC=$lt_CC # Is the compiler the GNU C compiler? with_gcc=$GCC # The linker used to build libraries. LD=$lt_LD # Whether we need hard or soft links. LN_S=$lt_LN_S # A BSD-compatible nm program. NM=$lt_NM # A symbol stripping program STRIP=$STRIP # Used to examine libraries when file_magic_cmd begins "file" MAGIC_CMD=$MAGIC_CMD # Used on cygwin: DLL creation program. DLLTOOL="$DLLTOOL" # Used on cygwin: object dumper. OBJDUMP="$OBJDUMP" # Used on cygwin: assembler. AS="$AS" # The name of the directory that contains temporary libtool files. objdir=$objdir # How to create reloadable object files. reload_flag=$lt_reload_flag reload_cmds=$lt_reload_cmds # How to pass a linker flag through the compiler. wl=$lt_wl # Object file suffix (normally "o"). objext="$ac_objext" # Old archive suffix (normally "a"). libext="$libext" # Executable file suffix (normally ""). exeext="$exeext" # Additional compiler flags for building library objects. pic_flag=$lt_pic_flag pic_mode=$pic_mode # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_compiler_c_o # Can we write directly to a .lo ? compiler_o_lo=$lt_compiler_o_lo # Must we lock files when doing compilation ? need_locks=$lt_need_locks # Do we need the lib prefix for modules? need_lib_prefix=$need_lib_prefix # Do we need a version for libraries? need_version=$need_version # Whether dlopen is supported. dlopen_support=$enable_dlopen # Whether dlopen of programs is supported. dlopen_self=$enable_dlopen_self # Whether dlopen of statically linked programs is supported. dlopen_self_static=$enable_dlopen_self_static # Compiler flag to prevent dynamic linking. link_static_flag=$lt_link_static_flag # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_no_builtin_flag # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec # Compiler flag to generate thread-safe objects. thread_safe_flag_spec=$lt_thread_safe_flag_spec # Library versioning type. version_type=$version_type # Format of library name prefix. libname_spec=$lt_libname_spec # List of archive names. First name is the real one, the rest are links. # The last name is the one that the linker finds with -lNAME. library_names_spec=$lt_library_names_spec # The coded name of the library, if different from the real name. soname_spec=$lt_soname_spec # Commands used to build and install an old-style archive. RANLIB=$lt_RANLIB old_archive_cmds=$lt_old_archive_cmds old_postinstall_cmds=$lt_old_postinstall_cmds old_postuninstall_cmds=$lt_old_postuninstall_cmds # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds # Commands used to build and install a shared archive. archive_cmds=$lt_archive_cmds archive_expsym_cmds=$lt_archive_expsym_cmds postinstall_cmds=$lt_postinstall_cmds postuninstall_cmds=$lt_postuninstall_cmds # Commands to strip libraries. old_striplib=$lt_old_striplib striplib=$lt_striplib # Method to check whether dependent libraries are shared objects. deplibs_check_method=$lt_deplibs_check_method # Command to use when deplibs_check_method == file_magic. file_magic_cmd=$lt_file_magic_cmd # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag # Flag that forces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag # Commands used to finish a libtool library installation in a directory. finish_cmds=$lt_finish_cmds # Same as above, but a single script fragment to be evaled but not shown. finish_eval=$lt_finish_eval # Take the output of nm and produce a listing of raw symbols and C names. global_symbol_pipe=$lt_global_symbol_pipe # Transform the output of nm in a proper C declaration global_symbol_to_cdecl=$lt_global_symbol_to_cdecl # Transform the output of nm in a C name address pair global_symbol_to_c_name_address=$lt_global_symbol_to_c_name_address # This is the shared library runtime path variable. runpath_var=$runpath_var # This is the shared library path variable. shlibpath_var=$shlibpath_var # Is shlibpath searched before the hard-coded library search path? shlibpath_overrides_runpath=$shlibpath_overrides_runpath # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action # Whether we should hardcode library paths into libraries. hardcode_into_libs=$hardcode_into_libs # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist. hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec # Whether we need a single -rpath flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator # Set to yes if using DIR/libNAME.so during linking hardcodes DIR into the # resulting binary. hardcode_direct=$hardcode_direct # Set to yes if using the -LDIR flag during linking hardcodes DIR into the # resulting binary. hardcode_minus_L=$hardcode_minus_L # Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into # the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var # Variables whose values should be saved in libtool wrapper scripts and # restored at relink time. variables_saved_for_relink="$variables_saved_for_relink" # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs # Compile-time system search path for libraries sys_lib_search_path_spec=$lt_sys_lib_search_path_spec # Run-time system search path for libraries sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec # Fix the shell variable \$srcfile for the compiler. fix_srcfile_path="$fix_srcfile_path" # Set to yes if exported symbols are required. always_export_symbols=$always_export_symbols # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds # The commands to extract the exported symbol list from a shared archive. extract_expsyms_cmds=$lt_extract_expsyms_cmds # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms # Symbols that must always be exported. include_expsyms=$lt_include_expsyms # ### END LIBTOOL CONFIG __EOF__ case $host_os in aix3*) cat <<\EOF >> "${ofile}T" # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi EOF ;; esac case $host_os in cygwin* | mingw* | pw32* | os2*) cat <<'EOF' >> "${ofile}T" # This is a source program that is used to create dlls on Windows # Don't remove nor modify the starting and closing comments # /* ltdll.c starts here */ # #define WIN32_LEAN_AND_MEAN # #include # #undef WIN32_LEAN_AND_MEAN # #include # # #ifndef __CYGWIN__ # # ifdef __CYGWIN32__ # # define __CYGWIN__ __CYGWIN32__ # # endif # #endif # # #ifdef __cplusplus # extern "C" { # #endif # BOOL APIENTRY DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved); # #ifdef __cplusplus # } # #endif # # #ifdef __CYGWIN__ # #include # DECLARE_CYGWIN_DLL( DllMain ); # #endif # HINSTANCE __hDllInstance_base; # # BOOL APIENTRY # DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved) # { # __hDllInstance_base = hInst; # return TRUE; # } # /* ltdll.c ends here */ # This is a source program that is used to create import libraries # on Windows for dlls which lack them. Don't remove nor modify the # starting and closing comments # /* impgen.c starts here */ # /* Copyright (C) 1999-2000 Free Software Foundation, Inc. # # This file is part of GNU libtool. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # */ # # #include /* for printf() */ # #include /* for open(), lseek(), read() */ # #include /* for O_RDONLY, O_BINARY */ # #include /* for strdup() */ # # /* O_BINARY isn't required (or even defined sometimes) under Unix */ # #ifndef O_BINARY # #define O_BINARY 0 # #endif # # static unsigned int # pe_get16 (fd, offset) # int fd; # int offset; # { # unsigned char b[2]; # lseek (fd, offset, SEEK_SET); # read (fd, b, 2); # return b[0] + (b[1]<<8); # } # # static unsigned int # pe_get32 (fd, offset) # int fd; # int offset; # { # unsigned char b[4]; # lseek (fd, offset, SEEK_SET); # read (fd, b, 4); # return b[0] + (b[1]<<8) + (b[2]<<16) + (b[3]<<24); # } # # static unsigned int # pe_as32 (ptr) # void *ptr; # { # unsigned char *b = ptr; # return b[0] + (b[1]<<8) + (b[2]<<16) + (b[3]<<24); # } # # int # main (argc, argv) # int argc; # char *argv[]; # { # int dll; # unsigned long pe_header_offset, opthdr_ofs, num_entries, i; # unsigned long export_rva, export_size, nsections, secptr, expptr; # unsigned long name_rvas, nexp; # unsigned char *expdata, *erva; # char *filename, *dll_name; # # filename = argv[1]; # # dll = open(filename, O_RDONLY|O_BINARY); # if (dll < 1) # return 1; # # dll_name = filename; # # for (i=0; filename[i]; i++) # if (filename[i] == '/' || filename[i] == '\\' || filename[i] == ':') # dll_name = filename + i +1; # # pe_header_offset = pe_get32 (dll, 0x3c); # opthdr_ofs = pe_header_offset + 4 + 20; # num_entries = pe_get32 (dll, opthdr_ofs + 92); # # if (num_entries < 1) /* no exports */ # return 1; # # export_rva = pe_get32 (dll, opthdr_ofs + 96); # export_size = pe_get32 (dll, opthdr_ofs + 100); # nsections = pe_get16 (dll, pe_header_offset + 4 +2); # secptr = (pe_header_offset + 4 + 20 + # pe_get16 (dll, pe_header_offset + 4 + 16)); # # expptr = 0; # for (i = 0; i < nsections; i++) # { # char sname[8]; # unsigned long secptr1 = secptr + 40 * i; # unsigned long vaddr = pe_get32 (dll, secptr1 + 12); # unsigned long vsize = pe_get32 (dll, secptr1 + 16); # unsigned long fptr = pe_get32 (dll, secptr1 + 20); # lseek(dll, secptr1, SEEK_SET); # read(dll, sname, 8); # if (vaddr <= export_rva && vaddr+vsize > export_rva) # { # expptr = fptr + (export_rva - vaddr); # if (export_rva + export_size > vaddr + vsize) # export_size = vsize - (export_rva - vaddr); # break; # } # } # # expdata = (unsigned char*)malloc(export_size); # lseek (dll, expptr, SEEK_SET); # read (dll, expdata, export_size); # erva = expdata - export_rva; # # nexp = pe_as32 (expdata+24); # name_rvas = pe_as32 (expdata+32); # # printf ("EXPORTS\n"); # for (i = 0; i> "${ofile}T" || (rm -f "${ofile}T"; exit 1) mv -f "${ofile}T" "$ofile" || \ (rm -f "$ofile" && cp "${ofile}T" "$ofile" && rm -f "${ofile}T") chmod +x "$ofile" fi ## ## END FIXME # This can be used to rebuild libtool when needed LIBTOOL_DEPS="$ac_aux_dir/ltmain.sh" # Always use our own libtool. LIBTOOL='$(SHELL) $(top_builddir)/libtool' # Prevent multiple expansion ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 echo "${ECHO_T}$ac_ct_CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi CC=$ac_ct_CC else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="cc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 echo "${ECHO_T}$ac_ct_CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi CC=$ac_ct_CC else CC="$ac_cv_prog_CC" fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift set dummy "$as_dir/$ac_word" ${1+"$@"} shift ac_cv_prog_CC="$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 echo "${ECHO_T}$ac_ct_CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$ac_ct_CC" && break done CC=$ac_ct_CC fi fi test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH" >&5 echo "$as_me: error: no acceptable C compiler found in \$PATH" >&2;} { (exit 1); exit 1; }; } # Provide some information about the compiler. echo "$as_me:$LINENO:" \ "checking for C compiler version" >&5 ac_compiler=`set X $ac_compile; echo $2` { (eval echo "$as_me:$LINENO: \"$ac_compiler --version &5\"") >&5 (eval $ac_compiler --version &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (eval echo "$as_me:$LINENO: \"$ac_compiler -v &5\"") >&5 (eval $ac_compiler -v &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (eval echo "$as_me:$LINENO: \"$ac_compiler -V &5\"") >&5 (eval $ac_compiler -V &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5 echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6 if test "${ac_cv_c_compiler_gnu+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" #include "confdefs.h" #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_compiler_gnu=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_compiler_gnu=no fi rm -f conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5 echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6 GCC=`test $ac_compiler_gnu = yes && echo yes` ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS CFLAGS="-g" echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5 echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6 if test "${ac_cv_prog_cc_g+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" #include "confdefs.h" #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_prog_cc_g=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_prog_cc_g=no fi rm -f conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 echo "${ECHO_T}$ac_cv_prog_cc_g" >&6 if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi # Some people use a C++ compiler to compile C. Since we use `exit', # in C++ we need to declare it. In case someone uses the same compiler # for both compiling C and C++ we need to have the C++ compiler decide # the declaration of exit, since it's the most demanding environment. cat >conftest.$ac_ext <<_ACEOF #ifndef __cplusplus choke me #endif _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then for ac_declaration in \ ''\ '#include ' \ 'extern "C" void std::exit (int) throw (); using std::exit;' \ 'extern "C" void std::exit (int); using std::exit;' \ 'extern "C" void exit (int) throw ();' \ 'extern "C" void exit (int);' \ 'void exit (int);' do cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" #include "confdefs.h" #include $ac_declaration #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { exit (42); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 continue fi rm -f conftest.$ac_objext conftest.$ac_ext cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" #include "confdefs.h" $ac_declaration #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { exit (42); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then break else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -f conftest.$ac_objext conftest.$ac_ext done rm -f conftest* if test -n "$ac_declaration"; then echo '#ifdef __cplusplus' >>confdefs.h echo $ac_declaration >>confdefs.h echo '#endif' >>confdefs.h fi else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -f conftest.$ac_objext conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # ./install, which can be erroneously created by make from ./install.sh. echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6 if test -z "$INSTALL"; then if test "${ac_cv_path_install+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. # Account for people who put trailing slashes in PATH elements. case $as_dir/ in ./ | .// | /cC/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi done done ;; esac done fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. We don't cache a # path for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the path is relative. INSTALL=$ac_install_sh fi fi echo "$as_me:$LINENO: result: $INSTALL" >&5 echo "${ECHO_T}$INSTALL" >&6 # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' if test "$GCC" = yes ; then OLDCFLAGS="$CFLAGS -Wall -Wmissing-prototypes -Wstrict-prototypes" CFLAGS="$OLDCFLAGS -fexceptions" echo "$as_me:$LINENO: checking whether gcc accepts -fexceptions" >&5 echo $ECHO_N "checking whether gcc accepts -fexceptions... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" #include "confdefs.h" #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { (void)1 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; CFLAGS="$OLDCFLAGS" fi rm -f conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: checking for ANSI C header files" >&5 echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6 if test "${ac_cv_header_stdc+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" #include "confdefs.h" #include #include #include #include _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? egrep -v '^ *\+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then ac_cv_header_stdc=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_header_stdc=no fi rm -f conftest.err conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" #include "confdefs.h" #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | egrep "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" #include "confdefs.h" #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | egrep "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : else cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" #include "confdefs.h" #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2); exit (0); } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ( exit $ac_status ) ac_cv_header_stdc=no fi rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi fi echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5 echo "${ECHO_T}$ac_cv_header_stdc" >&6 if test $ac_cv_header_stdc = yes; then cat >>confdefs.h <<\_ACEOF #define STDC_HEADERS 1 _ACEOF fi echo "$as_me:$LINENO: checking whether byte ordering is bigendian" >&5 echo $ECHO_N "checking whether byte ordering is bigendian... $ECHO_C" >&6 if test "${ac_cv_c_bigendian+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_c_bigendian=unknown # See if sys/param.h defines the BYTE_ORDER macro. cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" #include "confdefs.h" #include #include #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { #if !BYTE_ORDER || !BIG_ENDIAN || !LITTLE_ENDIAN bogus endian macros #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then # It does; now see whether it defined to BIG_ENDIAN or not. cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" #include "confdefs.h" #include #include #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { #if BYTE_ORDER != BIG_ENDIAN not big endian #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_c_bigendian=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_c_bigendian=no fi rm -f conftest.$ac_objext conftest.$ac_ext else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -f conftest.$ac_objext conftest.$ac_ext if test $ac_cv_c_bigendian = unknown; then if test "$cross_compiling" = yes; then echo $ac_n "cross-compiling... " 2>&6 else cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" #include "confdefs.h" main () { /* Are we little or big endian? From Harbison&Steele. */ union { long l; char c[sizeof (long)]; } u; u.l = 1; exit (u.c[sizeof (long) - 1] == 1); } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_c_bigendian=no else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ( exit $ac_status ) ac_cv_c_bigendian=yes fi rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi fi echo "$as_me:$LINENO: result: $ac_cv_c_bigendian" >&5 echo "${ECHO_T}$ac_cv_c_bigendian" >&6 if test $ac_cv_c_bigendian = unknown; then echo "$as_me:$LINENO: checking to probe for byte ordering" >&5 echo $ECHO_N "checking to probe for byte ordering... $ECHO_C" >&6 cat >conftest.c <&6 ac_cv_c_bigendian=yes fi if test `grep -l LiTTleEnDian conftest.o` ; then echo $ac_n ' little endian probe OK, ' 1>&6 if test $ac_cv_c_bigendian = yes ; then ac_cv_c_bigendian=unknown; else ac_cv_c_bigendian=no fi fi echo $ac_n 'guessing bigendian ... ' >&6 fi fi echo "$as_me:$LINENO: result: $ac_cv_c_bigendian" >&5 echo "${ECHO_T}$ac_cv_c_bigendian" >&6 fi if test $ac_cv_c_bigendian = yes; then cat >>confdefs.h <<\_ACEOF #define WORDS_BIGENDIAN 1 _ACEOF BYTEORDER=4321 else BYTEORDER=1234 fi cat >>confdefs.h <<_ACEOF #define BYTEORDER $BYTEORDER _ACEOF if test $ac_cv_c_bigendian = unknown; then { { echo "$as_me:$LINENO: error: unknown endianess - sorry" >&5 echo "$as_me: error: unknown endianess - sorry" >&2;} { (exit please pre-set ac_cv_c_bigendian); exit please pre-set ac_cv_c_bigendian; }; } fi echo "$as_me:$LINENO: checking for $CC option to accept ANSI C" >&5 echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6 if test "${ac_cv_prog_cc_stdc+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_prog_cc_stdc=no ac_save_CC=$CC cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" #include "confdefs.h" #include #include #include #include /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF # Don't try gcc -ansi; that turns off useful extensions and # breaks some systems' header files. # AIX -qlanglvl=ansi # Ultrix and OSF/1 -std1 # HP-UX 10.20 and later -Ae # HP-UX older versions -Aa -D_HPUX_SOURCE # SVR4 -Xc -D__EXTENSIONS__ for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_prog_cc_stdc=$ac_arg break else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -f conftest.$ac_objext done rm -f conftest.$ac_ext conftest.$ac_objext CC=$ac_save_CC fi case "x$ac_cv_prog_cc_stdc" in x|xno) echo "$as_me:$LINENO: result: none needed" >&5 echo "${ECHO_T}none needed" >&6 ;; *) echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5 echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6 CC="$CC $ac_cv_prog_cc_stdc" ;; esac echo "$as_me:$LINENO: checking for an ANSI C-conforming const" >&5 echo $ECHO_N "checking for an ANSI C-conforming const... $ECHO_C" >&6 if test "${ac_cv_c_const+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" #include "confdefs.h" #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { /* FIXME: Include the comments suggested by Paul. */ #ifndef __cplusplus /* Ultrix mips cc rejects this. */ typedef int charset[2]; const charset x; /* SunOS 4.1.1 cc rejects this. */ char const *const *ccp; char **p; /* NEC SVR4.0.2 mips cc rejects this. */ struct point {int x, y;}; static struct point const zero = {0,0}; /* AIX XL C 1.02.0.0 rejects this. It does not let you subtract one const X* pointer from another in an arm of an if-expression whose if-part is not a constant expression */ const char *g = "string"; ccp = &g + (g ? g-g : 0); /* HPUX 7.0 cc rejects these. */ ++ccp; p = (char**) ccp; ccp = (char const *const *) p; { /* SCO 3.2v4 cc rejects this. */ char *t; char const *s = 0 ? (char *) 0 : (char const *) 0; *t++ = 0; } { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */ int x[] = {25, 17}; const int *foo = &x[0]; ++foo; } { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */ typedef const int *iptr; iptr p = 0; ++p; } { /* AIX XL C 1.02.0.0 rejects this saying "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */ struct s { int j; const int *ap[3]; }; struct s *b; b->j = 5; } { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ const int foo = 10; } #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_c_const=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_c_const=no fi rm -f conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_c_const" >&5 echo "${ECHO_T}$ac_cv_c_const" >&6 if test $ac_cv_c_const = no; then cat >>confdefs.h <<\_ACEOF #define const _ACEOF fi echo "$as_me:$LINENO: checking for size_t" >&5 echo $ECHO_N "checking for size_t... $ECHO_C" >&6 if test "${ac_cv_type_size_t+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" #include "confdefs.h" $ac_includes_default #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { if ((size_t *) 0) return 0; if (sizeof (size_t)) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_type_size_t=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_type_size_t=no fi rm -f conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_type_size_t" >&5 echo "${ECHO_T}$ac_cv_type_size_t" >&6 if test $ac_cv_type_size_t = yes; then : else cat >>confdefs.h <<_ACEOF #define size_t unsigned _ACEOF fi for ac_func in memmove bcopy do as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` echo "$as_me:$LINENO: checking for $ac_func" >&5 echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 if eval "test \"\${$as_ac_var+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" #include "confdefs.h" /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $ac_func (); below. */ #include /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char $ac_func (); char (*f) (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_$ac_func) || defined (__stub___$ac_func) choke me #else f = $ac_func; #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then eval "$as_ac_var=yes" else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 eval "$as_ac_var=no" fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 if test `eval echo '${'$as_ac_var'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done for ac_header in fcntl.h unistd.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` if eval "test \"\${$as_ac_Header+set}\" = set"; then echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 else # Is the header compilable? echo "$as_me:$LINENO: checking $ac_header usability" >&5 echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" #include "confdefs.h" $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f conftest.$ac_objext conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6 # Is the header present? echo "$as_me:$LINENO: checking $ac_header presence" >&5 echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" #include "confdefs.h" #include <$ac_header> _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? egrep -v '^ *\+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6 # So? What about this header? case $ac_header_compiler:$ac_header_preproc in yes:no ) { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;};; no:yes ) { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;};; esac echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else eval "$as_ac_Header=$ac_header_preproc" fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 fi if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done echo "$as_me:$LINENO: checking for off_t" >&5 echo $ECHO_N "checking for off_t... $ECHO_C" >&6 if test "${ac_cv_type_off_t+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" #include "confdefs.h" $ac_includes_default #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { if ((off_t *) 0) return 0; if (sizeof (off_t)) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_type_off_t=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_type_off_t=no fi rm -f conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_type_off_t" >&5 echo "${ECHO_T}$ac_cv_type_off_t" >&6 if test $ac_cv_type_off_t = yes; then : else cat >>confdefs.h <<_ACEOF #define off_t long _ACEOF fi for ac_header in stdlib.h unistd.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` if eval "test \"\${$as_ac_Header+set}\" = set"; then echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 else # Is the header compilable? echo "$as_me:$LINENO: checking $ac_header usability" >&5 echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" #include "confdefs.h" $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f conftest.$ac_objext conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6 # Is the header present? echo "$as_me:$LINENO: checking $ac_header presence" >&5 echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" #include "confdefs.h" #include <$ac_header> _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? egrep -v '^ *\+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6 # So? What about this header? case $ac_header_compiler:$ac_header_preproc in yes:no ) { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;};; no:yes ) { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;};; esac echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else eval "$as_ac_Header=$ac_header_preproc" fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 fi if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_func in getpagesize do as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` echo "$as_me:$LINENO: checking for $ac_func" >&5 echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 if eval "test \"\${$as_ac_var+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" #include "confdefs.h" /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $ac_func (); below. */ #include /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char $ac_func (); char (*f) (); #ifdef F77_DUMMY_MAIN # ifdef __cplusplus extern "C" # endif int F77_DUMMY_MAIN() { return 1; } #endif int main () { /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_$ac_func) || defined (__stub___$ac_func) choke me #else f = $ac_func; #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then eval "$as_ac_var=yes" else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 eval "$as_ac_var=no" fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 if test `eval echo '${'$as_ac_var'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done echo "$as_me:$LINENO: checking for working mmap" >&5 echo $ECHO_N "checking for working mmap... $ECHO_C" >&6 if test "${ac_cv_func_mmap_fixed_mapped+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$cross_compiling" = yes; then ac_cv_func_mmap_fixed_mapped=no else cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" #include "confdefs.h" $ac_includes_default /* malloc might have been renamed as rpl_malloc. */ #undef malloc /* Thanks to Mike Haertel and Jim Avera for this test. Here is a matrix of mmap possibilities: mmap private not fixed mmap private fixed at somewhere currently unmapped mmap private fixed at somewhere already mapped mmap shared not fixed mmap shared fixed at somewhere currently unmapped mmap shared fixed at somewhere already mapped For private mappings, we should verify that changes cannot be read() back from the file, nor mmap's back from the file at a different address. (There have been systems where private was not correctly implemented like the infamous i386 svr4.0, and systems where the VM page cache was not coherent with the file system buffer cache like early versions of FreeBSD and possibly contemporary NetBSD.) For shared mappings, we should conversely verify that changes get propagated back to all the places they're supposed to be. Grep wants private fixed already mapped. The main things grep needs to know about mmap are: * does it exist and is it safe to write into the mmap'd area * how to use it (BSD variants) */ #include #include #if !STDC_HEADERS && !HAVE_STDLIB_H char *malloc (); #endif /* This mess was copied from the GNU getpagesize.h. */ #if !HAVE_GETPAGESIZE /* Assume that all systems that can run configure have sys/param.h. */ # if !HAVE_SYS_PARAM_H # define HAVE_SYS_PARAM_H 1 # endif # ifdef _SC_PAGESIZE # define getpagesize() sysconf(_SC_PAGESIZE) # else /* no _SC_PAGESIZE */ # if HAVE_SYS_PARAM_H # include # ifdef EXEC_PAGESIZE # define getpagesize() EXEC_PAGESIZE # else /* no EXEC_PAGESIZE */ # ifdef NBPG # define getpagesize() NBPG * CLSIZE # ifndef CLSIZE # define CLSIZE 1 # endif /* no CLSIZE */ # else /* no NBPG */ # ifdef NBPC # define getpagesize() NBPC # else /* no NBPC */ # ifdef PAGESIZE # define getpagesize() PAGESIZE # endif /* PAGESIZE */ # endif /* no NBPC */ # endif /* no NBPG */ # endif /* no EXEC_PAGESIZE */ # else /* no HAVE_SYS_PARAM_H */ # define getpagesize() 8192 /* punt totally */ # endif /* no HAVE_SYS_PARAM_H */ # endif /* no _SC_PAGESIZE */ #endif /* no HAVE_GETPAGESIZE */ int main () { char *data, *data2, *data3; int i, pagesize; int fd; pagesize = getpagesize (); /* First, make a file with some known garbage in it. */ data = (char *) malloc (pagesize); if (!data) exit (1); for (i = 0; i < pagesize; ++i) *(data + i) = rand (); umask (0); fd = creat ("conftest.mmap", 0600); if (fd < 0) exit (1); if (write (fd, data, pagesize) != pagesize) exit (1); close (fd); /* Next, try to mmap the file at a fixed address which already has something else allocated at it. If we can, also make sure that we see the same garbage. */ fd = open ("conftest.mmap", O_RDWR); if (fd < 0) exit (1); data2 = (char *) malloc (2 * pagesize); if (!data2) exit (1); data2 += (pagesize - ((int) data2 & (pagesize - 1))) & (pagesize - 1); if (data2 != mmap (data2, pagesize, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_FIXED, fd, 0L)) exit (1); for (i = 0; i < pagesize; ++i) if (*(data + i) != *(data2 + i)) exit (1); /* Finally, make sure that changes to the mapped area do not percolate back to the file as seen by read(). (This is a bug on some variants of i386 svr4.0.) */ for (i = 0; i < pagesize; ++i) *(data2 + i) = *(data2 + i) + 1; data3 = (char *) malloc (pagesize); if (!data3) exit (1); if (read (fd, data3, pagesize) != pagesize) exit (1); for (i = 0; i < pagesize; ++i) if (*(data + i) != *(data3 + i)) exit (1); close (fd); exit (0); } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_mmap_fixed_mapped=yes else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ( exit $ac_status ) ac_cv_func_mmap_fixed_mapped=no fi rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi echo "$as_me:$LINENO: result: $ac_cv_func_mmap_fixed_mapped" >&5 echo "${ECHO_T}$ac_cv_func_mmap_fixed_mapped" >&6 if test $ac_cv_func_mmap_fixed_mapped = yes; then cat >>confdefs.h <<\_ACEOF #define HAVE_MMAP 1 _ACEOF fi rm -f conftest.mmap if test "$ac_cv_func_mmap_fixed_mapped" = "yes"; then FILEMAP=unixfilemap else FILEMAP=readfilemap fi for ac_header in check.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` if eval "test \"\${$as_ac_Header+set}\" = set"; then echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 else # Is the header compilable? echo "$as_me:$LINENO: checking $ac_header usability" >&5 echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" #include "confdefs.h" $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f conftest.$ac_objext conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6 # Is the header present? echo "$as_me:$LINENO: checking $ac_header presence" >&5 echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" #include "confdefs.h" #include <$ac_header> _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? egrep -v '^ *\+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6 # So? What about this header? case $ac_header_compiler:$ac_header_preproc in yes:no ) { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;};; no:yes ) { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;};; esac echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else eval "$as_ac_Header=$ac_header_preproc" fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 fi if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done if test "${ac_cv_header_check_h+set}" = set; then echo "$as_me:$LINENO: checking for check.h" >&5 echo $ECHO_N "checking for check.h... $ECHO_C" >&6 if test "${ac_cv_header_check_h+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi echo "$as_me:$LINENO: result: $ac_cv_header_check_h" >&5 echo "${ECHO_T}$ac_cv_header_check_h" >&6 else # Is the header compilable? echo "$as_me:$LINENO: checking check.h usability" >&5 echo $ECHO_N "checking check.h usability... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" #include "confdefs.h" $ac_includes_default #include _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f conftest.$ac_objext conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6 # Is the header present? echo "$as_me:$LINENO: checking check.h presence" >&5 echo $ECHO_N "checking check.h presence... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" #include "confdefs.h" #include _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? egrep -v '^ *\+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6 # So? What about this header? case $ac_header_compiler:$ac_header_preproc in yes:no ) { echo "$as_me:$LINENO: WARNING: check.h: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: check.h: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: check.h: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: check.h: proceeding with the preprocessor's result" >&2;};; no:yes ) { echo "$as_me:$LINENO: WARNING: check.h: present but cannot be compiled" >&5 echo "$as_me: WARNING: check.h: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: check.h: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: check.h: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: check.h: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: check.h: proceeding with the preprocessor's result" >&2;};; esac echo "$as_me:$LINENO: checking for check.h" >&5 echo $ECHO_N "checking for check.h... $ECHO_C" >&6 if test "${ac_cv_header_check_h+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_header_check_h=$ac_header_preproc fi echo "$as_me:$LINENO: result: $ac_cv_header_check_h" >&5 echo "${ECHO_T}$ac_cv_header_check_h" >&6 fi if test $ac_cv_header_check_h = yes; then CHECK_LIBRARY=-lcheck else MINICHECK_OBJECT=tests/minicheck.o fi cat >>confdefs.h <<\_ACEOF #define XML_NS 1 _ACEOF cat >>confdefs.h <<\_ACEOF #define XML_DTD 1 _ACEOF cat >>confdefs.h <<\_ACEOF #define XML_CONTEXT_BYTES 1024 _ACEOF ac_config_files="$ac_config_files Makefile" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overriden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, don't put newlines in cache variables' values. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. { (set) 2>&1 | case `(ac_space=' '; set | grep ac_space) 2>&1` in *ac_space=\ *) # `set' does not quote correctly, so add quotes (double-quote # substitution turns \\\\ into \\, and sed turns \\ into \). sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n \ "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" ;; esac; } | sed ' t clear : clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ : end' >>confcache if cmp -s $cache_file confcache; then :; else if test -w $cache_file; then test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file" cat confcache >$cache_file else echo "not updating unwritable cache $cache_file" fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' # VPATH may cause trouble with some makes, so we remove $(srcdir), # ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=/{ s/:*\$(srcdir):*/:/; s/:*\${srcdir}:*/:/; s/:*@srcdir@:*/:/; s/^\([^=]*=[ ]*\):*/\1/; s/:*$//; s/^[^=]*=[ ]*$//; }' fi DEFS=-DHAVE_CONFIG_H : ${CONFIG_STATUS=./config.status} ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5 echo "$as_me: creating $CONFIG_STATUS" >&6;} cat >$CONFIG_STATUS <<_ACEOF #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false SHELL=\${CONFIG_SHELL-$SHELL} _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF ## --------------------- ## ## M4sh Initialization. ## ## --------------------- ## # Be Bourne compatible if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then set -o posix fi # NLS nuisances. # Support unset when possible. if (FOO=FOO; unset FOO) >/dev/null 2>&1; then as_unset=unset else as_unset=false fi (set +x; test -n "`(LANG=C; export LANG) 2>&1`") && { $as_unset LANG || test "${LANG+set}" != set; } || { LANG=C; export LANG; } (set +x; test -n "`(LC_ALL=C; export LC_ALL) 2>&1`") && { $as_unset LC_ALL || test "${LC_ALL+set}" != set; } || { LC_ALL=C; export LC_ALL; } (set +x; test -n "`(LC_TIME=C; export LC_TIME) 2>&1`") && { $as_unset LC_TIME || test "${LC_TIME+set}" != set; } || { LC_TIME=C; export LC_TIME; } (set +x; test -n "`(LC_CTYPE=C; export LC_CTYPE) 2>&1`") && { $as_unset LC_CTYPE || test "${LC_CTYPE+set}" != set; } || { LC_CTYPE=C; export LC_CTYPE; } (set +x; test -n "`(LANGUAGE=C; export LANGUAGE) 2>&1`") && { $as_unset LANGUAGE || test "${LANGUAGE+set}" != set; } || { LANGUAGE=C; export LANGUAGE; } (set +x; test -n "`(LC_COLLATE=C; export LC_COLLATE) 2>&1`") && { $as_unset LC_COLLATE || test "${LC_COLLATE+set}" != set; } || { LC_COLLATE=C; export LC_COLLATE; } (set +x; test -n "`(LC_NUMERIC=C; export LC_NUMERIC) 2>&1`") && { $as_unset LC_NUMERIC || test "${LC_NUMERIC+set}" != set; } || { LC_NUMERIC=C; export LC_NUMERIC; } (set +x; test -n "`(LC_MESSAGES=C; export LC_MESSAGES) 2>&1`") && { $as_unset LC_MESSAGES || test "${LC_MESSAGES+set}" != set; } || { LC_MESSAGES=C; export LC_MESSAGES; } # Name of the executable. as_me=`(basename "$0") 2>/dev/null || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)$' \| \ . : '\(.\)' 2>/dev/null || echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; } /^X\/\(\/\/\)$/{ s//\1/; q; } /^X\/\(\/\).*/{ s//\1/; q; } s/.*/./; q'` # PATH needs CR, and LINENO needs CR and PATH. # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conftest.sh echo "exit 0" >>conftest.sh chmod +x conftest.sh if (PATH=".;."; conftest.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conftest.sh fi as_lineno_1=$LINENO as_lineno_2=$LINENO as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` test "x$as_lineno_1" != "x$as_lineno_2" && test "x$as_lineno_3" = "x$as_lineno_2" || { # Find who we are. Look in the path if we contain no path at all # relative or not. case $0 in *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then { { echo "$as_me:$LINENO: error: cannot find myself; rerun with an absolute path" >&5 echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2;} { (exit 1); exit 1; }; } fi case $CONFIG_SHELL in '') as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for as_base in sh bash ksh sh5; do case $as_dir in /*) if ("$as_dir/$as_base" -c ' as_lineno_1=$LINENO as_lineno_2=$LINENO as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` test "x$as_lineno_1" != "x$as_lineno_2" && test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then CONFIG_SHELL=$as_dir/$as_base export CONFIG_SHELL exec "$CONFIG_SHELL" "$0" ${1+"$@"} fi;; esac done done ;; esac # Create $as_me.lineno as a copy of $as_myself, but with $LINENO # uniformly replaced by the line number. The first 'sed' inserts a # line-number line before each line; the second 'sed' does the real # work. The second script uses 'N' to pair each line-number line # with the numbered line, and appends trailing '-' during # substitution so that $LINENO is not a special case at line end. # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) sed '=' <$as_myself | sed ' N s,$,-, : loop s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, t loop s,-$,, s,^['$as_cr_digits']*\n,, ' >$as_me.lineno && chmod +x $as_me.lineno || { { echo "$as_me:$LINENO: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&5 echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2;} { (exit 1); exit 1; }; } # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensible to this). . ./$as_me.lineno # Exit status is that of the last command. exit } case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in *c*,-n*) ECHO_N= ECHO_C=' ' ECHO_T=' ' ;; *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; *) ECHO_N= ECHO_C='\c' ECHO_T= ;; esac if expr a : '\(a\)' >/dev/null 2>&1; then as_expr=expr else as_expr=false fi rm -f conf$$ conf$$.exe conf$$.file echo >conf$$.file if ln -s conf$$.file conf$$ 2>/dev/null; then # We could just check for DJGPP; but this test a) works b) is more generic # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). if test -f conf$$.exe; then # Don't use ln at all; we don't have any links as_ln_s='cp -p' else as_ln_s='ln -s' fi elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.file as_executable_p="test -f" # Sed expression to map a string onto a valid CPP name. as_tr_cpp="sed y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g" # Sed expression to map a string onto a valid variable name. as_tr_sh="sed y%*+%pp%;s%[^_$as_cr_alnum]%_%g" # IFS # We need space, tab and new line, in precisely that order. as_nl=' ' IFS=" $as_nl" # CDPATH. $as_unset CDPATH || test "${CDPATH+set}" != set || { CDPATH=$PATH_SEPARATOR; export CDPATH; } exec 6>&1 # Open the log real soon, to keep \$[0] and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. Logging --version etc. is OK. exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX } >&5 cat >&5 <<_CSEOF This file was extended by expat $as_me 1.95.8, which was generated by GNU Autoconf 2.53. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ _CSEOF echo "on `(hostname || uname -n) 2>/dev/null | sed 1q`" >&5 echo >&5 _ACEOF # Files that config.status was made for. if test -n "$ac_config_files"; then echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS fi if test -n "$ac_config_headers"; then echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS fi if test -n "$ac_config_links"; then echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS fi if test -n "$ac_config_commands"; then echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS fi cat >>$CONFIG_STATUS <<\_ACEOF ac_cs_usage="\ \`$as_me' instantiates files from templates according to the current configuration. Usage: $0 [OPTIONS] [FILE]... -h, --help print this help, then exit -V, --version print version number, then exit -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Report bugs to ." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF ac_cs_version="\\ expat config.status 1.95.8 configured by $0, generated by GNU Autoconf 2.53, with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\" Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." srcdir=$srcdir INSTALL="$INSTALL" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # If no file are specified by the user, then we need to provide default # value. By we need to know if files were specified by the user. ac_need_defaults=: while test $# != 0 do case $1 in --*=*) ac_option=`expr "x$1" : 'x\([^=]*\)='` ac_optarg=`expr "x$1" : 'x[^=]*=\(.*\)'` shift set dummy "$ac_option" "$ac_optarg" ${1+"$@"} shift ;; -*);; *) # This is not an option, so the user has probably given explicit # arguments. ac_need_defaults=false;; esac case $1 in # Handling of the options. _ACEOF cat >>$CONFIG_STATUS <<_ACEOF -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) echo "running $SHELL $0 " $ac_configure_args " --no-create --no-recursion" exec $SHELL $0 $ac_configure_args --no-create --no-recursion ;; _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF --version | --vers* | -V ) echo "$ac_cs_version"; exit 0 ;; --he | --h) # Conflict between --help and --header { { echo "$as_me:$LINENO: error: ambiguous option: $1 Try \`$0 --help' for more information." >&5 echo "$as_me: error: ambiguous option: $1 Try \`$0 --help' for more information." >&2;} { (exit 1); exit 1; }; };; --help | --hel | -h ) echo "$ac_cs_usage"; exit 0 ;; --debug | --d* | -d ) debug=: ;; --file | --fil | --fi | --f ) shift CONFIG_FILES="$CONFIG_FILES $1" ac_need_defaults=false;; --header | --heade | --head | --hea ) shift CONFIG_HEADERS="$CONFIG_HEADERS $1" ac_need_defaults=false;; # This is an error. -*) { { echo "$as_me:$LINENO: error: unrecognized option: $1 Try \`$0 --help' for more information." >&5 echo "$as_me: error: unrecognized option: $1 Try \`$0 --help' for more information." >&2;} { (exit 1); exit 1; }; } ;; *) ac_config_targets="$ac_config_targets $1" ;; esac shift done _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF for ac_config_target in $ac_config_targets do case "$ac_config_target" in # Handling of arguments. "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;; "expat_config.h" ) CONFIG_HEADERS="$CONFIG_HEADERS expat_config.h" ;; *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 echo "$as_me: error: invalid argument: $ac_config_target" >&2;} { (exit 1); exit 1; }; };; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers fi # Create a temporary directory, and hook for its removal unless debugging. $debug || { trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0 trap '{ (exit 1); exit 1; }' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. : ${TMPDIR=/tmp} { tmp=`(umask 077 && mktemp -d -q "$TMPDIR/csXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" } || { tmp=$TMPDIR/cs$$-$RANDOM (umask 077 && mkdir $tmp) } || { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 { (exit 1); exit 1; } } _ACEOF cat >>$CONFIG_STATUS <<_ACEOF # # CONFIG_FILES section. # # No need to generate the scripts if there are no CONFIG_FILES. # This happens for instance when ./config.status config.h if test -n "\$CONFIG_FILES"; then # Protect against being on the right side of a sed subst in config.status. sed 's/,@/@@/; s/@,/@@/; s/,;t t\$/@;t t/; /@;t t\$/s/[\\\\&,]/\\\\&/g; s/@@/,@/; s/@@/@,/; s/@;t t\$/,;t t/' >\$tmp/subs.sed <<\\CEOF s,@SHELL@,$SHELL,;t t s,@PATH_SEPARATOR@,$PATH_SEPARATOR,;t t s,@PACKAGE_NAME@,$PACKAGE_NAME,;t t s,@PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t s,@PACKAGE_VERSION@,$PACKAGE_VERSION,;t t s,@PACKAGE_STRING@,$PACKAGE_STRING,;t t s,@PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t s,@exec_prefix@,$exec_prefix,;t t s,@prefix@,$prefix,;t t s,@program_transform_name@,$program_transform_name,;t t s,@bindir@,$bindir,;t t s,@sbindir@,$sbindir,;t t s,@libexecdir@,$libexecdir,;t t s,@datadir@,$datadir,;t t s,@sysconfdir@,$sysconfdir,;t t s,@sharedstatedir@,$sharedstatedir,;t t s,@localstatedir@,$localstatedir,;t t s,@libdir@,$libdir,;t t s,@includedir@,$includedir,;t t s,@oldincludedir@,$oldincludedir,;t t s,@infodir@,$infodir,;t t s,@mandir@,$mandir,;t t s,@build_alias@,$build_alias,;t t s,@host_alias@,$host_alias,;t t s,@target_alias@,$target_alias,;t t s,@DEFS@,$DEFS,;t t s,@ECHO_C@,$ECHO_C,;t t s,@ECHO_N@,$ECHO_N,;t t s,@ECHO_T@,$ECHO_T,;t t s,@LIBS@,$LIBS,;t t s,@build@,$build,;t t s,@build_cpu@,$build_cpu,;t t s,@build_vendor@,$build_vendor,;t t s,@build_os@,$build_os,;t t s,@host@,$host,;t t s,@host_cpu@,$host_cpu,;t t s,@host_vendor@,$host_vendor,;t t s,@host_os@,$host_os,;t t s,@CC@,$CC,;t t s,@CFLAGS@,$CFLAGS,;t t s,@LDFLAGS@,$LDFLAGS,;t t s,@CPPFLAGS@,$CPPFLAGS,;t t s,@ac_ct_CC@,$ac_ct_CC,;t t s,@EXEEXT@,$EXEEXT,;t t s,@OBJEXT@,$OBJEXT,;t t s,@LN_S@,$LN_S,;t t s,@ECHO@,$ECHO,;t t s,@RANLIB@,$RANLIB,;t t s,@ac_ct_RANLIB@,$ac_ct_RANLIB,;t t s,@STRIP@,$STRIP,;t t s,@ac_ct_STRIP@,$ac_ct_STRIP,;t t s,@CPP@,$CPP,;t t s,@LIBTOOL@,$LIBTOOL,;t t s,@LIBCURRENT@,$LIBCURRENT,;t t s,@LIBREVISION@,$LIBREVISION,;t t s,@LIBAGE@,$LIBAGE,;t t s,@INSTALL_PROGRAM@,$INSTALL_PROGRAM,;t t s,@INSTALL_SCRIPT@,$INSTALL_SCRIPT,;t t s,@INSTALL_DATA@,$INSTALL_DATA,;t t s,@FILEMAP@,$FILEMAP,;t t s,@MINICHECK_OBJECT@,$MINICHECK_OBJECT,;t t s,@CHECK_LIBRARY@,$CHECK_LIBRARY,;t t CEOF _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # Split the substitutions into bite-sized pieces for seds with # small command number limits, like on Digital OSF/1 and HP-UX. ac_max_sed_lines=48 ac_sed_frag=1 # Number of current file. ac_beg=1 # First line for current file. ac_end=$ac_max_sed_lines # Line after last line for current file. ac_more_lines=: ac_sed_cmds= while $ac_more_lines; do if test $ac_beg -gt 1; then sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag else sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag fi if test ! -s $tmp/subs.frag; then ac_more_lines=false else # The purpose of the label and of the branching condition is to # speed up the sed processing (if there are no `@' at all, there # is no need to browse any of the substitutions). # These are the two extra sed commands mentioned above. (echo ':t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed if test -z "$ac_sed_cmds"; then ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed" else ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed" fi ac_sed_frag=`expr $ac_sed_frag + 1` ac_beg=$ac_end ac_end=`expr $ac_end + $ac_max_sed_lines` fi done if test -z "$ac_sed_cmds"; then ac_sed_cmds=cat fi fi # test -n "$CONFIG_FILES" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". case $ac_file in - | *:- | *:-:* ) # input from stdin cat >$tmp/stdin ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; * ) ac_file_in=$ac_file.in ;; esac # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories. ac_dir=`(dirname "$ac_file") 2>/dev/null || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` { case "$ac_dir" in [\\/]* | ?:[\\/]* ) as_incr_dir=;; *) as_incr_dir=.;; esac as_dummy="$ac_dir" for as_mkdir_dir in `IFS='/\\'; set X $as_dummy; shift; echo "$@"`; do case $as_mkdir_dir in # Skip DOS drivespec ?:) as_incr_dir=$as_mkdir_dir ;; *) as_incr_dir=$as_incr_dir/$as_mkdir_dir test -d "$as_incr_dir" || mkdir "$as_incr_dir" || { { echo "$as_me:$LINENO: error: cannot create \"$ac_dir\"" >&5 echo "$as_me: error: cannot create \"$ac_dir\"" >&2;} { (exit 1); exit 1; }; } ;; esac done; } ac_builddir=. if test "$ac_dir" != .; then ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` # A "../" for each directory in $ac_dir_suffix. ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` else ac_dir_suffix= ac_top_builddir= fi case $srcdir in .) # No --srcdir option. We are building in place. ac_srcdir=. if test -z "$ac_top_builddir"; then ac_top_srcdir=. else ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` fi ;; [\\/]* | ?:[\\/]* ) # Absolute path. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ;; *) # Relative path. ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_builddir$srcdir ;; esac # Don't blindly perform a `cd "$ac_dir"/$ac_foo && pwd` since $ac_foo can be # absolute. ac_abs_builddir=`cd "$ac_dir" && cd $ac_builddir && pwd` ac_abs_top_builddir=`cd "$ac_dir" && cd $ac_top_builddir && pwd` ac_abs_srcdir=`cd "$ac_dir" && cd $ac_srcdir && pwd` ac_abs_top_srcdir=`cd "$ac_dir" && cd $ac_top_srcdir && pwd` case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_builddir$INSTALL ;; esac if test x"$ac_file" != x-; then { echo "$as_me:$LINENO: creating $ac_file" >&5 echo "$as_me: creating $ac_file" >&6;} rm -f "$ac_file" fi # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ if test x"$ac_file" = x-; then configure_input= else configure_input="$ac_file. " fi configure_input=$configure_input"Generated from `echo $ac_file_in | sed 's,.*/,,'` by configure." # First look for the input files in the build tree, otherwise in the # src tree. ac_file_inputs=`IFS=: for f in $ac_file_in; do case $f in -) echo $tmp/stdin ;; [\\/$]*) # Absolute (can't be DOS-style, as IFS=:) test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } echo $f;; *) # Relative if test -f "$f"; then # Build tree echo $f elif test -f "$srcdir/$f"; then # Source tree echo $srcdir/$f else # /dev/null tree { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } fi;; esac done` || { (exit 1); exit 1; } _ACEOF cat >>$CONFIG_STATUS <<_ACEOF sed "$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s,@configure_input@,$configure_input,;t t s,@srcdir@,$ac_srcdir,;t t s,@abs_srcdir@,$ac_abs_srcdir,;t t s,@top_srcdir@,$ac_top_srcdir,;t t s,@abs_top_srcdir@,$ac_abs_top_srcdir,;t t s,@builddir@,$ac_builddir,;t t s,@abs_builddir@,$ac_abs_builddir,;t t s,@top_builddir@,$ac_top_builddir,;t t s,@abs_top_builddir@,$ac_abs_top_builddir,;t t s,@INSTALL@,$ac_INSTALL,;t t " $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out rm -f $tmp/stdin if test x"$ac_file" != x-; then mv $tmp/out $ac_file else cat $tmp/out rm -f $tmp/out fi done _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # # CONFIG_HEADER section. # # These sed commands are passed to sed as "A NAME B NAME C VALUE D", where # NAME is the cpp macro being defined and VALUE is the value it is being given. # # ac_d sets the value in "#define NAME VALUE" lines. ac_dA='s,^\([ ]*\)#\([ ]*define[ ][ ]*\)' ac_dB='[ ].*$,\1#\2' ac_dC=' ' ac_dD=',;t' # ac_u turns "#undef NAME" without trailing blanks into "#define NAME VALUE". ac_uA='s,^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' ac_uB='$,\1#\2define\3' ac_uC=' ' ac_uD=',;t' for ac_file in : $CONFIG_HEADERS; do test "x$ac_file" = x: && continue # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". case $ac_file in - | *:- | *:-:* ) # input from stdin cat >$tmp/stdin ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; * ) ac_file_in=$ac_file.in ;; esac test x"$ac_file" != x- && { echo "$as_me:$LINENO: creating $ac_file" >&5 echo "$as_me: creating $ac_file" >&6;} # First look for the input files in the build tree, otherwise in the # src tree. ac_file_inputs=`IFS=: for f in $ac_file_in; do case $f in -) echo $tmp/stdin ;; [\\/$]*) # Absolute (can't be DOS-style, as IFS=:) test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } echo $f;; *) # Relative if test -f "$f"; then # Build tree echo $f elif test -f "$srcdir/$f"; then # Source tree echo $srcdir/$f else # /dev/null tree { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } fi;; esac done` || { (exit 1); exit 1; } # Remove the trailing spaces. sed 's/[ ]*$//' $ac_file_inputs >$tmp/in _ACEOF # Transform confdefs.h into two sed scripts, `conftest.defines' and # `conftest.undefs', that substitutes the proper values into # config.h.in to produce config.h. The first handles `#define' # templates, and the second `#undef' templates. # And first: Protect against being on the right side of a sed subst in # config.status. Protect against being in an unquoted here document # in config.status. rm -f conftest.defines conftest.undefs # Using a here document instead of a string reduces the quoting nightmare. # Putting comments in sed scripts is not portable. # # `end' is used to avoid that the second main sed command (meant for # 0-ary CPP macros) applies to n-ary macro definitions. # See the Autoconf documentation for `clear'. cat >confdef2sed.sed <<\_ACEOF s/[\\&,]/\\&/g s,[\\$`],\\&,g t clear : clear s,^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*\)\(([^)]*)\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1\2${ac_dC}\3${ac_dD},gp t end s,^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD},gp : end _ACEOF # If some macros were called several times there might be several times # the same #defines, which is useless. Nevertheless, we may not want to # sort them, since we want the *last* AC-DEFINE to be honored. uniq confdefs.h | sed -n -f confdef2sed.sed >conftest.defines sed 's/ac_d/ac_u/g' conftest.defines >conftest.undefs rm -f confdef2sed.sed # This sed command replaces #undef with comments. This is necessary, for # example, in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. cat >>conftest.undefs <<\_ACEOF s,^[ ]*#[ ]*undef[ ][ ]*[a-zA-Z_][a-zA-Z_0-9]*,/* & */, _ACEOF # Break up conftest.defines because some shells have a limit on the size # of here documents, and old seds have small limits too (100 cmds). echo ' # Handle all the #define templates only if necessary.' >>$CONFIG_STATUS echo ' if egrep "^[ ]*#[ ]*define" $tmp/in >/dev/null; then' >>$CONFIG_STATUS echo ' # If there are no defines, we may have an empty if/fi' >>$CONFIG_STATUS echo ' :' >>$CONFIG_STATUS rm -f conftest.tail while grep . conftest.defines >/dev/null do # Write a limited-size here document to $tmp/defines.sed. echo ' cat >$tmp/defines.sed <>$CONFIG_STATUS # Speed up: don't consider the non `#define' lines. echo '/^[ ]*#[ ]*define/!b' >>$CONFIG_STATUS # Work around the forget-to-reset-the-flag bug. echo 't clr' >>$CONFIG_STATUS echo ': clr' >>$CONFIG_STATUS sed ${ac_max_here_lines}q conftest.defines >>$CONFIG_STATUS echo 'CEOF sed -f $tmp/defines.sed $tmp/in >$tmp/out rm -f $tmp/in mv $tmp/out $tmp/in ' >>$CONFIG_STATUS sed 1,${ac_max_here_lines}d conftest.defines >conftest.tail rm -f conftest.defines mv conftest.tail conftest.defines done rm -f conftest.defines echo ' fi # egrep' >>$CONFIG_STATUS echo >>$CONFIG_STATUS # Break up conftest.undefs because some shells have a limit on the size # of here documents, and old seds have small limits too (100 cmds). echo ' # Handle all the #undef templates' >>$CONFIG_STATUS rm -f conftest.tail while grep . conftest.undefs >/dev/null do # Write a limited-size here document to $tmp/undefs.sed. echo ' cat >$tmp/undefs.sed <>$CONFIG_STATUS # Speed up: don't consider the non `#undef' echo '/^[ ]*#[ ]*undef/!b' >>$CONFIG_STATUS # Work around the forget-to-reset-the-flag bug. echo 't clr' >>$CONFIG_STATUS echo ': clr' >>$CONFIG_STATUS sed ${ac_max_here_lines}q conftest.undefs >>$CONFIG_STATUS echo 'CEOF sed -f $tmp/undefs.sed $tmp/in >$tmp/out rm -f $tmp/in mv $tmp/out $tmp/in ' >>$CONFIG_STATUS sed 1,${ac_max_here_lines}d conftest.undefs >conftest.tail rm -f conftest.undefs mv conftest.tail conftest.undefs done rm -f conftest.undefs cat >>$CONFIG_STATUS <<\_ACEOF # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ if test x"$ac_file" = x-; then echo "/* Generated by configure. */" >$tmp/config.h else echo "/* $ac_file. Generated by configure. */" >$tmp/config.h fi cat $tmp/in >>$tmp/config.h rm -f $tmp/in if test x"$ac_file" != x-; then if cmp -s $ac_file $tmp/config.h 2>/dev/null; then { echo "$as_me:$LINENO: $ac_file is unchanged" >&5 echo "$as_me: $ac_file is unchanged" >&6;} else ac_dir=`(dirname "$ac_file") 2>/dev/null || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` { case "$ac_dir" in [\\/]* | ?:[\\/]* ) as_incr_dir=;; *) as_incr_dir=.;; esac as_dummy="$ac_dir" for as_mkdir_dir in `IFS='/\\'; set X $as_dummy; shift; echo "$@"`; do case $as_mkdir_dir in # Skip DOS drivespec ?:) as_incr_dir=$as_mkdir_dir ;; *) as_incr_dir=$as_incr_dir/$as_mkdir_dir test -d "$as_incr_dir" || mkdir "$as_incr_dir" || { { echo "$as_me:$LINENO: error: cannot create \"$ac_dir\"" >&5 echo "$as_me: error: cannot create \"$ac_dir\"" >&2;} { (exit 1); exit 1; }; } ;; esac done; } rm -f $ac_file mv $tmp/config.h $ac_file fi else cat $tmp/config.h rm -f $tmp/config.h fi done _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF { (exit 0); exit 0; } _ACEOF chmod +x $CONFIG_STATUS ac_clean_files=$ac_clean_files_save # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: exec 5>/dev/null $SHELL $CONFIG_STATUS || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || { (exit 1); exit 1; } fi abs_srcdir="`cd $srcdir && pwd`" abs_builddir="`pwd`" if test "$abs_srcdir" != "$abs_builddir"; then make mkdir-init fi tla-1.3.5+dfsg/src/COPYING0000644000175000017500000004403010457621764013574 0ustar useruserAll or most of the source files in this distribution refer to this file for copyright and warranty information. This file should be included whenever those files are redistributed. This software is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License, version 2, as published by the Free Software Foundation. That license is reproduced below. GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License. # arch-tag: Tom Lord Fri Jan 11 15:48:48 2002 (src/COPYING) # tla-1.3.5+dfsg/src/Makefile.in0000644000175000017500000000077010457621764014611 0ustar useruser# arch-tag: Tom Lord Tue Dec 4 14:46:27 2001 (Makefile.in) # # Makefile.in - # ################################################################ # Copyright (C) 2001 Tom Lord # # See the file "COPYING" for further information about # the copyright and warranty status of this work. # ################################################################ # This is a generic top-level makefile for Hackerlab packages. # It should never be necessary to edit this file. # include $(makefiles)/top-level.mk tla-1.3.5+dfsg/src/links/0000755000175000017500000000000010457621764013660 5ustar userusertla-1.3.5+dfsg/src/links/remove-links.sh.in0000755000175000017500000000674710457621764017255 0ustar useruser# remove-links - delete a shadow-tree of symlinks # ################################################################ # Copyright (C) 2002 Tom Lord # # See the file "COPYING" for further information about # the copyright and warranty status of this work. # set -e bug_mail="@BUGMAIL@" ################################################################ # special options # # Some options are special: # # --version | -V # --help | -h # if test $# -ne 0 ; then for opt in "$@" ; do case $opt in --version|-V) printf "remove-links 2002-1 from regexps.com\\n" printf "\\n" printf "Copyright 2002, Tom Lord\\n" printf "\\n" printf "This is free software; see the source for copying conditions.\\n" printf "There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\\n" printf "PARTICULAR PURPOSE.\\n" printf "\\n" printf "Report bugs to $bug_mail.\n" printf "\\n" exit 0 ;; --help|-h) printf "remove a shadow tree of symbolic links\\n" printf "usage: remove-links [options] from-dir to-dir\\n" printf "\\n" printf " -V --version print version info\\n" printf " -h --help display help\\n" printf "\\n" printf " -n print a list of links, but\\n" printf " don't actually remove them\\n" printf "\\n" printf " -q don't print the list of links\\n" printf "\\n" printf "Remove symbolink links in TO-DIR to all files in\\n" printf "FROM-DIR.\\n" printf "\\n" printf "The link targets must be absolute path names which have\\n" printf "a prefix identical to the output of 'pwd' in FROM-DIR.\\n" printf "\\n" exit 0 ;; *) ;; esac done fi ################################################################ # Ordinary Options # # no_remove= quiet= while test $# -ne 0 ; do case "$1" in -n) shift no_remove=-n ;; -q) shift quiet=-q ;; --) shift break ;; -*) printf "remove-links: unrecognized option (%s)\\n" "$1" 1>&2 printf "try --help\\n" 1>&2 exit 1 ;; *) break ;; esac done ################################################################ # Ordinary Arguments # if test $# -ne 2 ; then printf "usage: remove-links [options] from-dir to-dir\\n" 1>&2 printf "try --help\\n" 1>&2 exit 1 fi from_dir="$1" shift to_dir="$1" shift ################################################################ # Sanity Check and Process Defaults # here="`pwd`" cd "$here" cd "$from_dir" from_dir="`pwd`" cd "$here" cd "$to_dir" to_dir="`pwd`" ################################################################ # Do It # list_of_links() { cd "$to_dir" find . -type l \ | xargs -n 1 ls -l \ | awk -vfrom_dir="$from_dir/" \ '{ pair = $0; left = pair; right = pair; sub("[ \t]->.*", "", left); sub(".*[ \t]", "", left); sub(".*[ \t]->[ \t]", "", right); if (substr(right, 0, length(from_dir)) == from_dir) { print left; } }' } if test ! -z "$no_remove" ; then if test ! -z "$quiet" ; then exit 0 fi list_of_links exit 0 fi # Really do it # cd "$to_dir" list_of_links \ | awk -vquiet="$quiet" \ '{ if (quiet == "") { print "printf \"%s\\\\n\" \"" $0 "\""; } print "rm \"" $0 "\""; }' \ | sh -e # arch-tag: Tom Lord Fri Apr 5 08:36:26 2002 (links/remove-links.sh.in) # tla-1.3.5+dfsg/src/links/make-links.sh.in0000755000175000017500000000651110457621764016662 0ustar useruser# make-links - create a shadow-tree of symlinks # ################################################################ # Copyright (C) 2002 Tom Lord # # See the file "COPYING" for further information about # the copyright and warranty status of this work. # set -e bug_mail="@BUGMAIL@" ################################################################ # special options # # Some options are special: # # --version | -V # --help | -h # if test $# -ne 0 ; then for opt in "$@" ; do case $opt in --version|-V) printf "make-links 2002-1 from regexps.com\\n" printf "\\n" printf "Copyright 2002, Tom Lord\\n" printf "\\n" printf "This is free software; see the source for copying conditions.\\n" printf "There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\\n" printf "PARTICULAR PURPOSE.\\n" printf "\\n" printf "Report bugs to $bug_mail.\n" printf "\\n" exit 0 ;; --help|-h) printf "create a shadow tree of symbolic links\\n" printf "usage: make-links [options] from-dir to-dir\\n" printf "\\n" printf " -V --version print version info\\n" printf " -h --help display help\\n" printf "\\n" printf " -n print a list of links, but\\n" printf " don't actually create them\\n" printf "\\n" printf " -f pass -f to ln\\n" printf " -q don't print the list of links\\n" printf "\\n" printf "Create symbolink links in TO-DIR to all regular files in\\n" printf "FROM-DIR, creating new subdirectories in TO-DIR as needed.\\n" printf "\\n" exit 0 ;; *) ;; esac done fi ################################################################ # Ordinary Options # # no_links= quiet= force= while test $# -ne 0 ; do case "$1" in -n) shift no_links=-n ;; -q) shift quiet=-q ;; -f) shift force=-f ;; --) shift break ;; -*) printf "make-links: unrecognized option (%s)\\n" "$1" 1>&2 printf "try --help\\n" 1>&2 exit 1 ;; *) break ;; esac done ################################################################ # Ordinary Arguments # if test $# -ne 2 ; then printf "usage: make-links [options] from-dir to-dir\\n" 1>&2 printf "try --help\\n" 1>&2 exit 1 fi from_dir="$1" shift to_dir="$1" shift ################################################################ # Sanity Check and Process Defaults # here="`pwd`" cd "$here" cd "$from_dir" from_dir="`pwd`" cd "$here" cd "$to_dir" to_dir="`pwd`" ################################################################ # Do It # if test ! -z "$no_links" ; then if test ! -z "$quiet" ; then exit 0 fi cd "$from_dir" find . -type f exit 0 fi # Really do it # cd "$to_dir" ( cd "$from_dir" ; \ find . -type d \ | awk '{ print "mkdir -p \"" $0 "\"" }' ; \ find . -type f \ | awk -vquiet="$quiet" \ -vfrom_dir="$from_dir" \ -vforce="$force" \ '{ if (quiet == "") { print "printf \"%s\\\\n\" \"" $0 "\""; } print "ln -s " force " \"" from_dir "/" $0 "\" \"" $0 "\""; }' ) \ | sh -e # arch-tag: Tom Lord Fri Apr 5 08:36:26 2002 (links/make-links.sh.in) # tla-1.3.5+dfsg/src/links/Makefile.in0000644000175000017500000000142110457621764015723 0ustar useruser# Makefile.in # ################################################################ # Copyright (C) 2003 Tom Lord # # See the file "COPYING" for further information about # the copyright and warranty status of this work. # shell-scripts := remove-links.sh make-links.sh include $(makefiles)/shell-scripts.mk ifeq ($(cfg__install_link_tools),1) include $(makefiles)/install-shell-scripts.mk endif remove-links.sh: remove-links.sh.in sed -e "s,@BUGMAIL@,$(cfg__links_bug_mail)," \ $< > remove-links.sh make-links.sh: make-links.sh.in sed -e "s,@BUGMAIL@,$(cfg__links_bug_mail)," \ $< > make-links.sh clean: clean-derive-link-scripts clean-derive-link-scripts: -rm remove-links.sh -rm make-links.sh # arch-tag: Tom Lord Tue Dec 4 14:52:14 2001 (arch/Makefile.in) # tla-1.3.5+dfsg/src/links/PLUGIN/0000755000175000017500000000000010457621764014656 5ustar userusertla-1.3.5+dfsg/src/links/PLUGIN/REQ0000644000175000017500000000001410457621764015223 0ustar useruserlinks links tla-1.3.5+dfsg/src/links/PLUGIN/options0000644000175000017500000000031710457621764016275 0ustar useruser string links-bug-mail lord@emf.net To what email address should links bug reports be sent? binary install-link-tools no If true, make-links and remove-links will be installed. tla-1.3.5+dfsg/src/PLUGIN/0000755000175000017500000000000010457621764013536 5ustar userusertla-1.3.5+dfsg/src/PLUGIN/packages0000644000175000017500000000037210457621764015241 0ustar useruser;; required hackerlab-core hackerlab --version 0.0 ;; What is the installation root of the ;; hackerlab core? ;; ;; ;; required x11 x11 ;; Where is X11 installed? ;; ;; ;; optional tcltk tcltk --version 8.0 ;; Where is Tcl/Tk? ;; ;; tla-1.3.5+dfsg/src/PLUGIN/compatible0000644000175000017500000000030610457621764015577 0ustar useruser ;; Compatibility policy: ;; ;; We try to preserve upwards compatibility with the two previous ;; versioned releases. ;; ;; hackerlab-package-framework--0.0 ;; hackerlab-package-framework--0.1 tla-1.3.5+dfsg/src/PLUGIN/options0000644000175000017500000000105110457621764015151 0ustar useruser;; Syntax examples: ;; ;; ;; binary shared-library no ;; Build a shared library? ;; ;; binary static-library yes ;; Build a static library? ;; ;; string admin-email root ;; To what email address should administrative ;; notifications be sent? ;; string posix-shell /bin/sh What program should be used to execute POSIX.2 shell scripts? string cc cc What command name should be used to invoke the C compiler? string package-framework-bug-mail lord@emf.net To what email address should package-framework bug reports be sent? tla-1.3.5+dfsg/src/PLUGIN/auto0000644000175000017500000000036710457621764014437 0ustar useruser ;; On some systems, programs that use socket functions ;; need to link with a library "-lsocket". We presume that ;; if such a library exists, it should be used. ;; library-test socket-library -lsocket gcc-test gcc-version exec-suffix-test tla-1.3.5+dfsg/src/docs-tla/0000755000175000017500000000000010457621770014243 5ustar userusertla-1.3.5+dfsg/src/docs-tla/index.txt0000644000175000017500000001133410457621770016115 0ustar useruser [[title A GNU Arch Handbook ]] <"*(start)*" -- $/build/why.html> [[abstract A guide and reference manual for the GNU Arch Revision Control system. ]] Topics are presented in roughly the order they are encountered by a new programmer joining an existing arch-using project. The /GNU Arch/ project itself is used as a "living example": readers are encouraged to make sure that they have an up-to-date version of this handbook and to learn-by-doing --- trying out the examples on the live GNU project's archives --- as you read. [[blockquote [[styled-lines //\Part I\// //\*Fundamentals*\// /\1\ Build Your Own `tla' Binary:/ <"/1.1/ Why build your own?" -- $/build/why.html> <"/1.2/ Obtaining Sources" -- $/build/sources.html> <"/1.3/ Other Tools You'll Need or Want" -- $/build/othertools.html> <"/1.4/ Configure/Build/Test/Install" -- $/build/install.html> <"/1.5/ On-line Help" -- $/build/help.html> /\2\ Configuring Per-User Parameters:/ <"/2.1/ Set Your User Identity" -- $/my/id.html> <"/2.2/ Pick a Default Archive Location" -- $/my/archloc.html> <"/2.3/ Pick a Default Mirror Location" -- $/my/mirrorloc.html> <"/2.4/ Set Up a Revision Library" -- $/my/revlib.html /\3\ Registering Remote Archives and Making Local Mirrors/ <"/3.1/ Coordinates for Upstream Projects" -- $/archreg/coords.html> <"/3.2/ Registering Archives and Creating Mirrors" -- $/archreg/register.html> <"/3.3/ Keeping a Mirror Up to Date" -- $/archreg/mirrormgt.html> /\4\ Checking Out a Project/ <"/4.1/ Check Out a Project" -- $/checkout/checkout.html> <"/4.2/ Check Out a Multi-Project Tree" -- $/checkout/checkout-config.html> <"/4.3/ Examining a Tree's History" -- $/checkout/tree-state.html> /\5\ Starting Your Own Branch/ <"/5.1/ Create A Personal Archive" -- $/hacking/my-archive.html> <"/5.2/ Create a Branch" -- $/hacking/my-branch.html> <"/5.3/ Create a Personal Multi-Project Tree" -- $/hacking/my-config.html> <"/5.4/ Examining Your Changes" -- $/hacking/changes.html> <"/5.5/ Committing Your Changes" -- $/hacking/commit.html> <"/5.6/ Merging in Changes from Upstream" -- $/hacking/merge-from-upstream.html> <"/5.7/ Publish Your Archive -- an Outbound Mirror" -- $/hacking/branch-publishing.html> /\6\ Adding, Deleting, and Renaming Files and Directories/ <"/6.1/ The Inventory Subsystem" -- $/treedelta/inventory.html> <"/6.2/ Naming Convention and Inventory ID Configuration" -- $/treedelta/naming-conventions.html> <"/6.3/ Adding a New File or Directory" -- $/treedelta/add.html> <"/6.4/ Deleting a File or Directory" -- $/treedelta/delete.html> <"/6.5/ Renaming a File or Directory" -- $/treedelta/rename.html> //\Part II\// //\*Advanced Topics*\// (*planned, sorta*) */\7\ Maintaining Your Own Project With Arch/ ^*/7.1/ The Basics: A Star-merge Policy ^*/7.2/ A Patch Queue Manager: Why and Roughly How ^*/7.3/ Be Strict in What You Transmit... ^*/7.4/ Be Tolerant in What You Accept... ^*/7.5/ Become an Arch Usage Expert ^*/7.5/ Become an Arch Security Expert */\8\ Archive Integrity and Cryptographic Signing/ ^*/8.1/ Familiarize Yourself With Archive-format Basics! ^*/8.2/ Checksums ^*/8.3/ The Signing Hook */\9\ Cherrypicking Merges/ */\10\ Hacking Tricks with `undo', `mkpatch', `dopatch', and `delta'/ */\11\ Log Pruning/ //\Part III\// //\*Appendices*\// */\Appendix A:\ Arch Terminology and the Global Namespace of Arch Revisions/ */\Appendix B:\ Highlights from Revision Control Theory/ ]] ]] * Copyright Copyright /(C)/ 2005 Tom Lord (`lord@emf.net') This program is free software; you can redistribute it and/or modify it under the terms of the /GNU General Public License/ as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but \\/WITHOUT ANY WARRANTY/\\; without even the implied warranty of \\/MERCHANTABILITY/\\ or \\/FITNESS FOR A PARTICULAR PURPOSE/\\. See the /GNU General Public License/ for more details. You should have received a copy of the /GNU General Public License/ along with this software; see the file <"`COPYING'" -- $/COPYING.html>. If not, write to the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. [[null ; arch-tag: Tom Lord Thu Mar 24 12:14:24 2005 (docs-tla/index.txt) ]] tla-1.3.5+dfsg/src/docs-tla/my/0000755000175000017500000000000010457621770014670 5ustar userusertla-1.3.5+dfsg/src/docs-tla/my/revlib.txt0000644000175000017500000000337110457621770016720 0ustar useruser [[title /2.4/ Set Up a Revision Library ]] <"*(prev)*" -- $/my/mirrorloc.html> <"*(next chapter)*" -- $/archreg/coords.html> * Local Caching Arch's best performance is obtained by allocating for it substantial on-disk storage for a *revision library*. [[blockquote /Note:/ It is not *required* that you create a revision library; it is *usually* a performance-win (trading disk-space for speed) to do so. ]] Revision libraries are created by commands such as: [[tty % mkdir ~/Revlib % tla my-revision-library ~/Revlib % tla library-config --greedy --sparse ~/Revlib ]] * Commands Discussed [[tty % tla my-revision-library -H % tla library-config -H ]] <"*(prev)*" -- $/my/mirrorloc.html> <"*(next chapter)*" -- $/archreg/coords.html> * Copyright Copyright /(C)/ 2005 Tom Lord (`lord@emf.net') This program is free software; you can redistribute it and/or modify it under the terms of the /GNU General Public License/ as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but \\/WITHOUT ANY WARRANTY/\\; without even the implied warranty of \\/MERCHANTABILITY/\\ or \\/FITNESS FOR A PARTICULAR PURPOSE/\\. See the /GNU General Public License/ for more details. You should have received a copy of the /GNU General Public License/ along with this software; see the file <"`COPYING'" -- $/COPYING.html>. If not, write to the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. <"*(prev)*" -- $/my/mirrorloc.html> <"*(next chapter)*" -- $/archreg/coords.html> [[null ; arch-tag: Tom Lord Thu Mar 24 14:01:57 2005 (my/revlib.txt) ]] tla-1.3.5+dfsg/src/docs-tla/my/top-nav.txt0000644000175000017500000000056510457621770017023 0ustar useruser <"*full contents*" -- $/index.html> * /2/ Configuring Per-User Parameters: <"/2.1/ Your User ID" -- $/my/id.html> <"/2.2/ Default Archive Location" -- $/my/archloc.html> <"/2.3/ Default Mirror Location" -- $/my/mirrorloc.html> <"/2.4/ Your Revision Library" -- $/my/revlib.html> [[null ; arch-tag: Tom Lord Mon Mar 28 10:51:25 2005 (my/top-nav.txt) ]] tla-1.3.5+dfsg/src/docs-tla/my/archloc.html0000644000175000017500000001022610457621770017172 0ustar useruser

A GNU Arch Handbook

'" -- ./diary-2005-04.html>>>^*\// ]] [[cartouche /`Thu Mar 31 13:14 2005'/ I've written (er... *made a good start on*) a new <"/GNU Arch Handbook/" -- $/src/docs-tla/index.html> ]] [[cartouche /`Wed Mar 23 10:35 2005'/ I've merged support for `baz' archive compatability into `tla-1.3.2'. See `patch-5' of `tla--devo--1.3.2' in `lord@emf.net--2005'. */Be sure to read about the recent release announcement in: /* ]] [[cartouche /`Tue Mar 22 20:02 2005'/ `tla 1.3.1-fix-1' is now available. Compared to the recent `tla 1.3.1', this release fixes a bug in the command `tla pristines'. GNU Arch is a modern replacement for CVS, specifically designed for the distributed development needs of open source projects. It has uniquely good support for development on branches (especially good merging tools), distributed repositories (every developer can have branches in their own repository), changeset-oriented project management (arch commits changes to multiple files at once), and, of course, file and directory renaming. This release fixes a few bugs, upgrades `libneon', and includes internal improvements. [[blockquote */ `tla-1.3.1-fix-1' Coordinates /* *(note: availability at `ftp.gnu.org' is delayed)* /Download at `gnuarch':/ /Download at `seyza':/ /MD5 (`tla-1.3.1-fix-1.tar.gz'):/ `bab3b300176c5d038e190602eac40e86' /Signature:/ [[tty -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.3 (FreeBSD) iD8DBQBCQO072XpV3xvJrncRAjC7AKCnpYzRUCvslmLizk19Uu3TMWD6dgCfXtzs pmMeoo6auDD5vHr7O2remUU= =cRlx -----END PGP SIGNATURE----- ]] /GNU project home page:/ /Wiki:/ /User mailing list:/ /Developer mailing list:/ /IRC channel (`freenode'):/ `#arch' /Tom Lord's project home page:/ ]] The next release is scheduled for *approx. 15-Apr-2005*. There is some consideration being given to an intermediate release *around 1-Apr-2005*. The two foci will remain internal improvements (e.g., librification progress), and bug fixing (including minor feature additions and a pass over the documentation). /`Tue Mar 22 14:53 2005'/ I fixed the bug <"`unregister-library'" -- $/bugs/all-bugs/unregister-library.html> [[blockquote [[styled-lines *archive:* `lord@emf.net--2005' *version:* `tla--devo--1.3.2' *revision:* `patch-3' ]] ]] /`baz' note:/ I understand that this bug is already fixed in `baz'. This fix is a different changeset. The `my-revision-library' command was not robust if given an argument which was the name of a non-existing library. These changes correct that. //\Note:\// This change modifies the way that arguments to `my-revision-library' are canonicalized. Previously, the library directory argument was canonicalized by `chdir'-ing to that directory and computing the "current working directory". Now, instead (as per a suggestion from `abentley'), if the directory argument is an absolute path, it is left alone; if it is a relative path, the current working directory is prefixed to it. /`Mon Mar 21 16:03 2005'/ I've closed the bug <"`missing-status'" -- $/bugs/all-bugs/missing-status.html> by adding new options to the `whats-missing' command: [[tty -q, --quiet produce no ordinary output -x, --exit-status exit non-0 if patches are missing ]] ]] [[cartouche /`Mon Mar 21 16:03 2005'/ I've recently updated the <"bug tracker" -- $/bugs/index.html> to reflect some new data, thoughts, and closed bugs. Recently closed are: [[blockquote [[styled-lines <"/`id-cmds-confusing'/" -- $/bugs/all-bugs/id-cmds-confusing.html> *(closed in `tla-1.3.1')* 2005-02-12 * the inventory-id command names are confusing* <"/`libneon'/" -- $/bugs/all-bugs/libneon.html> *(closed in `tla-1.3.1')* 2005-03-21 * the `libneon' in `tla-1.3' is out-of-date* <"/`review-fix-help-msgs'/" -- $/bugs/all-bugs/review-fix-help-msgs.html> *(closed -- redundant)* 2005-02-07 * replaced by <"/`help-msgs-need-help'/" -- $/bugs/all-bugs/help-msgs-need-help.html>* ]] ]] ]] [[cartouche /`Fri Mar 18 11:56 2005'/ `tla 1.3.1' is now available. GNU Arch is a modern replacement for CVS, specifically designed for the distributed development needs of open source projects. It has uniquely good support for development on branches (especially good merging tools), distributed repositories (every developer can have branches in their own repository), changeset-oriented project management (arch commits changes to multiple files at once), and, of course, file and directory renaming. This release fixes a few bugs, upgrades `libneon', and includes internal improvements. [[blockquote */ `tla-1.3.1' Coordinates /* *(note: availability at `ftp.gnu.org' is delayed)* /Download at `gnuarch':/ /Download at `seyza':/ /MD5 (`tla-1.3.1.tar.gz'):/ `e3e2a92b9ddd9221d70bdd9134ae45d6' /Signature:/ [[tty -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.3 (FreeBSD) iD8DBQBCOzq22XpV3xvJrncRAtQIAKCT6/tzFruSNJBXKLy9WwKo0wPHSwCgyzMv sEMIH5nXABoOD7RA/q5nlq8= =/rit -----END PGP SIGNATURE----- ]] /GNU project home page:/ /Wiki:/ /User mailing list:/ /Developer mailing list:/ /IRC channel (`freenode'):/ `#arch' /Tom Lord's project home page:/ ]] The next release is scheduled for *approx. 15-Apr-2005*. There is some consideration being given to an intermediate release *around 1-Apr-2005*. The two foci will remain internal improvements (e.g., librification progress), and bug fixing (including minor feature additions and a pass over the documentation). ]] [[cartouche /`Thu Mar 17 10:57 2005'/ Final build test for `tla 1.3.1'? The last round revealed a few remaining makefile glitches and did not compile with `-Werror'. It spuriously included `awiki' in the `config'. I'd like to push `1.3.1' out the door soon.... hopefully it builds smoothly now. (Here is the recycled rfbt announcment: ) ]] [[cartouche /`Tue Mar 15 15:50 2005'/ Build testing round three! The last round revealed an unintentional dependency on native `libexpat'. Yet more evidence that `libneon' is in an *icky* state. I've snarked `expat' and `libneon' into arch, factored `libneon' source out of the `./src/tla' source tree, and rolled a new config. Build testing please.... (hey, the 15-Mar release is late!) .... ]] [[cartouche /`Mon Mar 14 11:18 2005'/ I recently issed a */request for build testing/* for the `tla 1.3.1' mainline. Volunteer testing discovered one memory corruption bug and two bugs with the build system. I have patch the build system (package framework) and tla itself, hopefully to fix the bugs. This is a second: <"request for build testing" -- $/web/communications/rfbt-20050314.html> in anticipation of the 1.3.1 release. ]] [[cartouche /`Thu Mar 10 10:56 2005'/ I've recently patched the `tla 1.3.1' mainline to include an updated `libneon'. I've posted a <"request for build testing" -- $/web/communications/rfbt-20050310.html> in anticipation of the 1.3.1 release. ]] [[cartouche /`Mon Mar 7 11:57 2005'/ A librified `libarch' requires provisions for state which persists between calls into `libarch'. A simple example is the user's default archive: one call in `libarch' might change that default (just for the current process) while the next call needs the new value. A more complex example is caching: the `inventory' subsystem might want to keep a fairly complicated cache of earlier results, for example. Having earlier written the librified replacements for `libawk', I've been working on extending those data structures to be suitable for managing inter-call state. <"I've written a description of what I'm writing." -- $/web/gnu-arch/librification-notes/inter-state.html> ]] [[cartouche /`Thu Mar 3 13:48 2005'/ The librification experiment mentioned in my <"last entry" -- $/web/communications/diary-2005-02.html> produced encouraging results. I've written an <"overview of how librification can proceed" -- $/web/gnu-arch/librification-notes/intro.html> ]] * Copyright /Copyright (C) 2004 Tom Lord/ This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but /WITHOUT ANY WARRANTY/; without even the implied warranty of /MERCHANTABILITY/ or /FITNESS FOR A PARTICULAR PURPOSE/. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. See the file `COPYING' for further information about the copyright and warranty status of this work. [[null ; arch-tag: Tom Lord Mon Mar 7 11:56:14 2005 (communications/diary-2005-03.txt) ]] tla-1.3.5+dfsg/web/communications/diary-2005-04.html0000644000175000017500000000501410457621763020360 0ustar useruser Tom Lord's Hackery

Tom Lord's Hackery

Tom's Work Diary (April 2005)

<-- March 2005 May 2005 -->

Wed Apr 13 14:16 2005

I've fixed the oft-noted bug in which the inode signature shortcut causes certain meta-data changes to go undetected. (It turns out to be a very trivial fix.)

Copyright

Copyright (C) 2004 Tom Lord

This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.

See the file COPYING for further information about the copyright and warranty status of this work.

tla-1.3.5+dfsg/web/communications/rfbt-20050314.html0000644000175000017500000000462710457621763020305 0ustar useruser Tom Lord's Hackery

Tom Lord's Hackery

Request for tla 1.3.1 Build Testing
2005-03-14

Recently the tla 1.3.1 mainline has been patched to use a more recent version of libneon. This is a request for people to build test the resulting mainline.

To perform the test, you will need to have registered the archive:

                lord@emf.net--2005

Coordinates for that archive are given below.

To create the necessary source tree:

        % tla get lord@emf.net--2005/dists--devo--1.3.1 tla-build-test
        % cd tla-build-test
        % tla buildcfg ./config

To perform the test, from that same directory:

        % mkdir =build
        % cd =build
        % ../configure
        % make
        % make test
        % make install

The install step will install tla in a subdirectory of the =build directory -- not somewhere it is likely to accidentally appear on your path.

Test results (a short summary, not the output of make) can be informally passed along on gnu-arch-dev@lists.seyza.com.

Thanks. -t

Archive coordinates:

        Archive: lord@emf.net--2005
        Location: http://www.gnuarch.org/archives/lord@emf.net--2005

tla-1.3.5+dfsg/web/communications/rfbt-20050315.txt0000644000175000017500000000317710457621763020160 0ustar useruser [[title Request for `tla 1.3.1' Build Testing `2005-03-15' ]] Recently the `tla 1.3.1' mainline has been patched to use a more recent version of `libneon'. This is a request for people to build test the resulting mainline. \\/\Note:\/\\ Unlike previous 1.3.1 RFBT's, this one asks you to register */two/* archives rather than just one. To perform the test, you will need to have registered the archives: [[tty lord@emf.net--2005 lord@emf.net--websw-2005 ]] Coordinates for those archives are given below. To create the necessary source tree: [[tty % tla get lord@emf.net--2005/dists--devo--1.3.1 tla-build-test % cd tla-build-test % tla buildcfg ./config ]] To perform the test, from that same directory: [[tty % cd src % mkdir =build % cd =build % ../configure % make % make test % make install ]] The `install' step will install `tla' in a subdirectory of the `=build' directory -- not somewhere it is likely to accidentally appear on your path. Test results (a short summary, not the output of `make') can be informally passed along on . Thanks. -t Archive coordinates: [[tty Archive: lord@emf.net--2005 Location: http://www.gnuarch.org/archives/lord@emf.net--2005 Archive: lord@emf.net--websw-2005 Location: http://www.gnuarch.org/archives/lord@emf.net--websw-2005 ]] [[null ; arch-tag: Tom Lord Tue Mar 15 16:06:41 2005 (communications/rfbt-20050315.txt) ]] tla-1.3.5+dfsg/web/communications/gnu-arch-roadmap.txt0000644000175000017500000000413510457621763021446 0ustar useruser[[title An Emerging Tla Roadmap ]] /Updated: `6 Feb 2005'/ * Next Planned Releases ^These dates are /not/ cast in stone. They are rough estimates and vague goals.^ /GNU Arch 2.0/ postponed indefinately. /GNU Arch 1.4pre2/ uncertain -- it depends entirely on what comes down the pipeline from `baz'. /GNU Arch 1.3.1/ /`15 Mar 2005'/ -- This will be primarily a maintenance/rejuvination release of GNU Arch 1.x. Experience has shown that permitting the `baz' line to serve as the de facto mainline for GNU Arch 1.x will be highly problematic. Therefore, some resources are being redirected from the GNU Arch 2.0 and GNU Arch 1.4 lines of development in order to produce suitable 1.x releases. * Other Upcoming Milestones /Issue Tracking for GNU Arch/ /`15 Mar 2005'/ In conjunction with the release of GNU Arch 1.3.1, I will announce a new bug-tracking and support infrastructure for GNU Arch releases. Our aim will be to provide direct, person-to-person issue tracking support. In other words, resources permitting, 5 days per week, "bug czar" volunteers will read and individually reply to incoming issue reports, maintaining in the process the database of known bugs, their priorities, and the status of their fixes. (Initially, the labor and computing infrastructure for this purpose will be donated by Seyza Corp.) /Documentation Update/ /`30 Mar 2005'/ Close on the heals of the 1.3.1 release, we intended to release an updated version of the tutorial documentation, catching it back up to the GNU line, and making it easier to maintain and keep up to date in the future. * Periodic Milestones We plan to make /GNU Arch 1.x/ releases not less than once per quarter. * Design Discussions and Standards Development We intend to agressively lead focussed design discussions about critical areas of Arch design and to work to produce, as a byproduct of those, authoritative standards documents defining the Arch protocol. [[null ; arch-tag: Tom Lord Sun Feb 6 12:57:19 2005 (communications/gnu-arch-roadmap.txt) ]] tla-1.3.5+dfsg/web/communications/progress-2005021.txt0000644000175000017500000002643710457621763021005 0ustar useruser[[title Tla 1.3.1 Librification Experiment Progress Report --- 2005-02-21 ]] This document refers to the `tla' development branch: [[cartouche /Archive:/ `lord@emf.net--librify-tla-2005' /Version:/ `tla--factor-1--1.3.1' *(See <"links on the home page" -- $/index.html> for help finding my archives.)* ]] * Context Last week I reported having just spent a week modifying the `libawk' part of `tla' to permit string-sharing between multiple relational and associative table entries. (<"The bug report describes that work." -- $/bugs--devo--2005/all-bugs/libawk-api-bogosities.html>) I was surprised at how quickly that work went. I had only meant to spend some time estimating how long the task would take. Working on the estimate, I couldn't resist working on the modification itself, and when the deadline for the estimate arrived I already finished the work I was supposed to estimate! (I provided an estimate of "-3 days" -- undertaking the already-complete task should count as adding three days to our schedule. :-) That got me thinking: the `libawk' cleanups were a small part of the long list of changes that would be necessarily to incrementally transform `libarch' from its state in 1.3 into a more librified and more portable piece of code: friendly to scripting languages, GUIs, alternative front-ends, extension languages, and non-unix platforms. I have long assumed (<"as described elsewhere" -- ../attic/tla-2.0.html> that an incremental librification starting from the 1.3 code base had poor chances for success. But if the fixes to `libawk' took "-3 days", perhaps the rest of incremental librification wouldn't be so impractical. * A Two Week Experiment Today marks the middle of what will be a two week experiment in `1.3 librification.' The form of the experiement is that I am spending these two weeks to librify as much of `libarch' as I can subject to some constraints: * Results After Week 1 ** Executive Summary The experiment tries to answer the yes or no question: [[cartouche /The Executive Question/ Is persuing the librification effort for 1.3.1 a practical strategy for persuing the high-level objectives for GNU Arch (such as Windows support, Unicode support, scripting and extension language support, a demonstrably/visibly robust implementation, etc.)? ]] One week into the experiment I will leave my betting money at 90/10: there is a 90% chance that the answer to the executive question will be a clear "yes" at the end of the two week experiment (which will be 28-Feb-2005). One modest but interesting demonstration of the benefits of librification might be <"the improvements to error reporting" -- ./tla-error-sample.html> that it might lead to. ** Technical Summary See also <./tla-fn-anatomy.html>. *** Last Week I spent most of the first week laying down a foundation for librification. That included: /Factoring the source tree./ I set up a framework for splitting up files into multiple directories organized around modular and "modular cluster" boundaries. The old contents of `libarch' now live in a directory called `libarch-compat'. Those files will be incrementally deprecated: removed one by one and replaced by librified replacements in other `libarch-*' directories. /Setting up a new front end./ My plan is to librify "from the top down" as much as possible. I'll work in a loop: pick a an arch subcommand; rewrite it to use only librified code (no code from `libarch-compat'); repeat until there are no unlibrified commands. Therefore, I set up a new `tla.c' (the home of `main'). The new front end first looks for a librified version of the subcommand. If it doesn't find one, it runs the subcommand from `libarch-compat'. /Designing and implementing the error signalling mechanism./ `libarch' needs to consistently and robustly signal errors rather than (in the manner of 1.3 and prior) often simply exitting on discovery of an error condition. Part of what I did this week was to install run-time systemf support (`./src/tla/libach-errors') for error management. /Rebuilt `libawk'./ The `libawk' cleanup modified all callers into `libawk' to be robust in the face of a `libawk' implementation that shared strings between multiple table entries. It also modified the existing `libawk' code to actually share strings opportunistically, resulting in at least a significant run-time space savings. Many librified functions will need `libawk'-style functionality but the existing `libawk' implementation does not provide for error signalling and recovery and, in other ways, does not conform to the requirements for a fully librified `libarch'. Last week, collecting ideas and code-scraps from both the existing `libawk' and the code base for `tla 2.0', I built a new implementation of the functionality in `libawk'. The new `libawk' (now called `libarch-values'), in addition to be librified, adds support for table entries whose values are of types other than just string (e.g., integer-valued table entries). I also started on librifying the `my-id' command. That invovled working on revised support for option parsing, on the API for functions implementing tla sub-commands, and work on writing librified versions of the low-level functions for manipulating a user id. This work went well in a few senses. I was able to cut-past-edit a certain amount of code from both `tla 1.3' and `tla 2.0' to write what I needed in this context. A great deal of the new code I simply rewrote, from scratch: this was code that is a minor variation on code that I've rewritten from scratch 3 or 4 times over the past few months. The resulting code seems to work well, although testing has been scattershot. I'm satisfied with the emerging calling conventions. ** Next Week and Possibly Beyond In week two I have a little more work to do on the foundation: string primitive operations; better option parsing; the beginnings of a more portable file system protocol stack. Beyond that I want to librify as much as I can in the remaining time. I'll consider the experiment to have produced a distinctly positive result (meaning that this approach to librification is worth persuing) if I can get through librifying the `file-id' command and some commands that pertain to per-user (`~/.arch-params') parameters. Such an outcome implies an efficient framework for reimplementing CLI parsers, progress on librifying namespace management, project tree file system access, project tree arch control file access, and `~/.arch-params' access. A positive outcome will warrant a follow-on series of three "wind sprints": one each to librify `inventory', `mkpatch', and `dopatch'. Past experience has shown that, once those commands are in place, implementing (in this case, librifying) the rest of `tla' is a relative cake walk. * Librification Experiment Constraints This experiment asks how long it will take to make a "clean up pass" over `libarch' such that, at the end of the process, the constraints described below are satisfied throughout the implementation of `tla'. [[cartouche /\\Librification Experiment Constraints/\\ *Upward compatability* -- for several roughly one week intervals it is anticipated that only part of `libarch' will be librified. Nevertheless, `tla' must be fully operable at those intervals, passing both `make test' and changeset burn-in tests. The intent is that it should be possible (and ideally useful) to merge partially-complete librification work into the mainline early and often. *Perfect Error Handling* -- Librified parts of `libarch' must have perfected error handling. That means that they do not exit the process except under truly uncontinuable conditions -- most errors are signalled to callers. Resource allocation and deallocation must be robustly handled across all paths, including error-signaling paths through the code. *Abstract String Handling* -- No part `libarch' code should make presumptions about the internal representation of strings. Strings should be manipulated purely via procedural interfaces based on an ontology of code-point-index-addressable sequences of unicode codepoints. Where specific codepoint values /must/ be presumed, only graphical and space ASCII characters should be referred to. *Reinforced On-disk Representation Abstractions* `libarch' has long internally had a rough layering of its filesystem access. The `vu' layer, from hackerlab, provides a low-level indirection above Posix system calls; for each of project-trees, `~/.arch-param' directories, and file-system archives arch includes a roughly procedural interface. Within those three primary disk formats are ad-hoc formats for specific subcomponents (e.g, for files in `~/.arch-params' or for patch logs in `./{arch}'). Two of these subsystems (project tree and archive formats) have proven to need major restructuring for a clean port to Windows-based platforms. Throughout the code, abstraction barriers are unevenly preserved with leaks across them exposing details of path names, descriptors, and so forth. A librified libarch needs to clarify the layering in these components and ensure that the API to them is sufficiently abstract that changes to them (such as for a Windows port) can be made easily. *Customizability, Extensibility, and Self-Documentation* Third party developers have made very clear the demand for robust scripting language bindings to `libarch'. Work on arch GUIs, IDE bindings, and alternative front-ends suggests a similar demand. Some desirable capabilities in the core of arch, such as file-type-specific `diff' compuation and `patch' application, suggests a demand for an arch which is not merely *scriptable* (callable as primitive routines from a scripting language) but *extensible* (can be configured to call out to extension language routines during core operations). The APIs, data types, error handling conventions, and available documentation used in a librified `libarch' must be scripting and extension language friendly. ]] * Copyright /Copyright (C) 2004 Tom Lord/ This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but /WITHOUT ANY WARRANTY/; without even the implied warranty of /MERCHANTABILITY/ or /FITNESS FOR A PARTICULAR PURPOSE/. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. See the file `COPYING' for further information about the copyright and warranty status of this work. [[null ; arch-tag: Tom Lord Mon Feb 21 08:56:34 2005 (communications/progress-2005021.txt) ]] tla-1.3.5+dfsg/web/communications/rfbt-20050315.html0000644000175000017500000000534710457621763020306 0ustar useruser Tom Lord's Hackery

Tom Lord's Hackery

Request for tla 1.3.1 Build Testing
2005-03-15

Recently the tla 1.3.1 mainline has been patched to use a more recent version of libneon. This is a request for people to build test the resulting mainline.

Note: Unlike previous 1.3.1 RFBT's, this one asks you to register two archives rather than just one.

To perform the test, you will need to have registered the archives:

                lord@emf.net--2005
                lord@emf.net--websw-2005

Coordinates for those archives are given below.

To create the necessary source tree:

        % tla get lord@emf.net--2005/dists--devo--1.3.1 tla-build-test
        % cd tla-build-test
        % tla buildcfg ./config

To perform the test, from that same directory:

        % cd src
        % mkdir =build
        % cd =build
        % ../configure
        % make
        % make test
        % make install

The install step will install tla in a subdirectory of the =build directory -- not somewhere it is likely to accidentally appear on your path.

Test results (a short summary, not the output of make) can be informally passed along on gnu-arch-dev@lists.seyza.com.

Thanks. -t

Archive coordinates:

        Archive: lord@emf.net--2005
        Location: http://www.gnuarch.org/archives/lord@emf.net--2005

        Archive: lord@emf.net--websw-2005
        Location: http://www.gnuarch.org/archives/lord@emf.net--websw-2005

tla-1.3.5+dfsg/web/communications/diary-2005-03.html0000644000175000017500000003537010457621763020367 0ustar useruser Tom Lord's Hackery

Tom Lord's Hackery

Tom's Work Diary (March 2005)

<-- February 2005 April 2005 -->

Thu Mar 31 13:14 2005

I've written (er... made a good start on) a new GNU Arch Handbook

Wed Mar 23 10:35 2005

I've merged support for baz archive compatability into tla-1.3.2. See patch-5 of tla--devo--1.3.2 in lord@emf.net--2005.

Be sure to read about the recent release announcement in:

Tue Mar 22 20:02 2005

tla 1.3.1-fix-1 is now available.

Compared to the recent tla 1.3.1, this release fixes a bug in the command tla pristines.

GNU Arch is a modern replacement for CVS, specifically designed for the distributed development needs of open source projects. It has uniquely good support for development on branches (especially good merging tools), distributed repositories (every developer can have branches in their own repository), changeset-oriented project management (arch commits changes to multiple files at once), and, of course, file and directory renaming.

This release fixes a few bugs, upgrades libneon, and includes internal improvements.

tla-1.3.1-fix-1 Coordinates

(note: availability at ftp.gnu.org is delayed)

Download at gnuarch: http://www.gnuarch.org/releases/tla-1.3.1-fix-1.tar.gz

Download at seyza: http://www.seyza.com/gnu-releases/tla-1.3.1-fix-1.tar.gz

MD5 (tla-1.3.1-fix-1.tar.gz): bab3b300176c5d038e190602eac40e86

Signature:

         -----BEGIN PGP SIGNATURE-----
         Version: GnuPG v1.2.3 (FreeBSD)

         iD8DBQBCQO072XpV3xvJrncRAjC7AKCnpYzRUCvslmLizk19Uu3TMWD6dgCfXtzs
         pmMeoo6auDD5vHr7O2remUU=
         =cRlx
         -----END PGP SIGNATURE-----

    

GNU project home page: http://www.gnu.org/software/gnu-arch

Wiki: http://wiki.gnuarch.org

User mailing list: http://lists.gnu.org/mailman/listinfo/gnu-arch-users

Developer mailing list: http://lists.seyza.com/cgi-bin/mailman/listinfo/gnu-arch-dev

IRC channel (freenode): #arch

Tom Lord's project home page: http://www.gnuarch.org

The next release is scheduled for approx. 15-Apr-2005. There is some consideration being given to an intermediate release around 1-Apr-2005. The two foci will remain internal improvements (e.g., librification progress), and bug fixing (including minor feature additions and a pass over the documentation).

Tue Mar 22 14:53 2005

I fixed the bug unregister-library

archive: lord@emf.net--2005
version: tla--devo--1.3.2
revision: patch-3

baz note: I understand that this bug is already fixed in baz. This fix is a different changeset.

The my-revision-library command was not robust if given an argument which was the name of a non-existing library. These changes correct that.

Note:

This change modifies the way that arguments to my-revision-library are canonicalized. Previously, the library directory argument was canonicalized by chdir-ing to that directory and computing the "current working directory".

Now, instead (as per a suggestion from abentley), if the directory argument is an absolute path, it is left alone; if it is a relative path, the current working directory is prefixed to it.

Mon Mar 21 16:03 2005

I've closed the bug missing-status by adding new options to the whats-missing command:

    -q, --quiet         produce no ordinary output
    -x, --exit-status   exit non-0 if patches are missing

  

Mon Mar 21 16:03 2005

I've recently updated the bug tracker to reflect some new data, thoughts, and closed bugs.

Recently closed are:

id-cmds-confusing (closed in tla-1.3.1) 2005-02-12
the inventory-id command names are confusing

libneon (closed in tla-1.3.1) 2005-03-21
the libneon in tla-1.3 is out-of-date

review-fix-help-msgs (closed -- redundant) 2005-02-07
replaced by help-msgs-need-help

Fri Mar 18 11:56 2005

tla 1.3.1 is now available.

GNU Arch is a modern replacement for CVS, specifically designed for the distributed development needs of open source projects. It has uniquely good support for development on branches (especially good merging tools), distributed repositories (every developer can have branches in their own repository), changeset-oriented project management (arch commits changes to multiple files at once), and, of course, file and directory renaming.

This release fixes a few bugs, upgrades libneon, and includes internal improvements.

tla-1.3.1 Coordinates

(note: availability at ftp.gnu.org is delayed)

Download at gnuarch: http://www.gnuarch.org/releases/tla-1.3.1.tar.gz

Download at seyza: http://www.seyza.com/gnu-releases/tla-1.3.1.tar.gz

MD5 (tla-1.3.1.tar.gz): e3e2a92b9ddd9221d70bdd9134ae45d6

Signature:

        -----BEGIN PGP SIGNATURE-----
        Version: GnuPG v1.2.3 (FreeBSD)

        iD8DBQBCOzq22XpV3xvJrncRAtQIAKCT6/tzFruSNJBXKLy9WwKo0wPHSwCgyzMv
        sEMIH5nXABoOD7RA/q5nlq8=
        =/rit
        -----END PGP SIGNATURE-----

    

GNU project home page: http://www.gnu.org/software/gnu-arch

Wiki: http://wiki.gnuarch.org

User mailing list: http://lists.gnu.org/mailman/listinfo/gnu-arch-users

Developer mailing list: http://lists.seyza.com/cgi-bin/mailman/listinfo/gnu-arch-dev

IRC channel (freenode): #arch

Tom Lord's project home page: http://www.gnuarch.org

The next release is scheduled for approx. 15-Apr-2005. There is some consideration being given to an intermediate release around 1-Apr-2005. The two foci will remain internal improvements (e.g., librification progress), and bug fixing (including minor feature additions and a pass over the documentation).

Thu Mar 17 10:57 2005

Final build test for tla 1.3.1?

The last round revealed a few remaining makefile glitches and did not compile with -Werror. It spuriously included awiki in the config.

I'd like to push 1.3.1 out the door soon.... hopefully it builds smoothly now.

(Here is the recycled rfbt announcment: http://www.gnuarch.org/web/communications/rfbt-20050315.html)

Tue Mar 15 15:50 2005

Build testing round three!

The last round revealed an unintentional dependency on native libexpat. Yet more evidence that libneon is in an icky state.

I've snarked expat and libneon into arch, factored libneon source out of the ./src/tla source tree, and rolled a new config.

Build testing please.... (hey, the 15-Mar release is late!) ....

http://www.gnuarch.org/web/communications/rfbt-20050315.html

Mon Mar 14 11:18 2005

I recently issed a request for build testing for the tla 1.3.1 mainline.

Volunteer testing discovered one memory corruption bug and two bugs with the build system.

I have patch the build system (package framework) and tla itself, hopefully to fix the bugs.

This is a second: request for build testing in anticipation of the 1.3.1 release.

Thu Mar 10 10:56 2005

I've recently patched the tla 1.3.1 mainline to include an updated libneon.

I've posted a request for build testing in anticipation of the 1.3.1 release.

Mon Mar 7 11:57 2005

A librified libarch requires provisions for state which persists between calls into libarch. A simple example is the user's default archive: one call in libarch might change that default (just for the current process) while the next call needs the new value. A more complex example is caching: the inventory subsystem might want to keep a fairly complicated cache of earlier results, for example.

Having earlier written the librified replacements for libawk, I've been working on extending those data structures to be suitable for managing inter-call state.

I've written a description of what I'm writing.

Thu Mar 3 13:48 2005

The librification experiment mentioned in my last entry produced encouraging results.

I've written an overview of how librification can proceed

Copyright

Copyright (C) 2004 Tom Lord

This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.

See the file COPYING for further information about the copyright and warranty status of this work.

tla-1.3.5+dfsg/web/communications/diary-2005-06.txt0000644000175000017500000000236110457621763020237 0ustar useruser[[title Tom's Work Diary (June 2005) ]] [[blockquote //\*^<<<"`<--' May 2005" -- ./diary-2005-05.html>>>^*\// ]] [[cartouche /`Wed Jun 1 10:38 2005'/ `GNU Arch version tla 1.3.3' is ready and available at `ftp.gnu.org' and its mirrors. This release fixes a few minor but important bugs in low level libraries. ]] * Copyright /Copyright (C) 2004 Tom Lord/ This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but /WITHOUT ANY WARRANTY/; without even the implied warranty of /MERCHANTABILITY/ or /FITNESS FOR A PARTICULAR PURPOSE/. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. See the file `COPYING' for further information about the copyright and warranty status of this work. [[null ; arch-tag: Tom Lord Tue Jun 7 12:18:14 2005 (communications/diary-2005-06.txt) ]] tla-1.3.5+dfsg/web/communications/diary-2005-02.txt0000644000175000017500000001055010457621763020232 0ustar useruser[[title Tom's Work Diary (February 2005) ]] [[blockquote //\*^<<<"`<--' January 2005" -- ./diary-2005-01.html>>>^*\// //\*^<<<"March 2005 `-->'" -- ./diary-2005-03.html>>>^*\// ]] [[cartouche /`Mon Feb 21 16:53 2005'/ I've been working on an experiment regarding librifying the `1.3.1' code base. Here's my <"week-1 report" -- $/web/communications/progress-2005021.html> ]] [[cartouche /`Mon Feb 14 12:19 2005' I've implemented changes in `1.3.1' which result in relational table entries and keys and values in associative tables (both `libawk' data structures) can be shared and are, in fact, shared opportunistically. Crude initial testing suggests that these changes result in fairly substantial memory savings, especially on large trees. Speed is roughly unchanged, with a silght *degredation*. On the other hand, the new code hasn't been tuned and profiling of it suggests that obtaining a net speed *improvement* is much simpler after these changes than before. The nitty gritty details are available in <"a bug report" -- $/bugs--devo--2005/all-bugs/libawk-api-bogosities.html>. ]] [[cartouche /`Fri Feb 11 16:56 2005'/ There are two new patches (`patch-1' and `patch-2', in fact) in: [[tty lord@emf.net--2005/tla--devo--1.3.1 ]] which are summarized: [[tty patch-2 Remove "libawk/trim.[ch]" patch-1 remove libawk/numbers.[ch] ]] Use of these patches requires the latest revision of libhackerlab in: [[tty lord@emf.net--2005/hackerlab--devo--1.1 ]] (<"archive locations..." -- $/web/gnu-arch/famous-archives.html>) Merging these changes into branches which wish to remain somewhat in sync with GNU Arch 1.3.1 is recommended. These ought to be low impact changes for all branches. The short description is that these changes remove the source files matching the patterns: [[tty ./src/tla/libawk/numbers.[ch] ./src/tla/libawk/trim.[ch] ]] The two functions defined in those files have been removed and all callers updated to reflect that. The changes are documented in detail in the log messages of [[blockquote [[styled-lines /Archive:/ `lord@emf.net--libawk-exp-2005' /Version:/ tla--libawk-exp--1.3.1' /Revs:/ `patch-1' ... `patch-9' ]] ]] ]] [[cartouche /`Wed Feb 9 11:37 2005'/ The new system for recording bugs in GNU Arch releases seems to work reasonably well so far and hopefully will be officially in operation before too long. Currently it is still an unofficial experiment, temporarily housed at . In other news, I am experimentating and exploring a <"performance question concerning string allocation and copying practices in arch" -- $/web/gnu-arch/string-copying-notes.html>. ]] [[cartouche /`Sun Feb 6 13:00 2005'/ Well, `tla-1.4pre1' looks terrible: it seems it will not work very well to just "pass through" `baz' changes as GNU Arch. Therefore, work on `tla-2.0' has been de-prioritized, and work in persuit of a new <"GNU Arch Roadmap" -- ./web/communications/gnu-arch-roadmap.html> has begun. /`Sun Feb 6 13:11 2005'/ Pika and XL are not dead or even entirely dormant. But to maintain the freedom to work on them, I must concentrate heavily on `tla 1.x' right now. I have removed links about them from this page because I don't want to take the time to maintain those links properly right now. ]] * Copyright /Copyright (C) 2004 Tom Lord/ This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but /WITHOUT ANY WARRANTY/; without even the implied warranty of /MERCHANTABILITY/ or /FITNESS FOR A PARTICULAR PURPOSE/. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. See the file `COPYING' for further information about the copyright and warranty status of this work. [[null ; arch-tag: Tom Lord Wed Feb 9 09:11:24 2005 (communications/diary-2005-02.txt) ]] tla-1.3.5+dfsg/web/communications/progress-2005021.html0000644000175000017500000003345510457621763021130 0ustar useruser Tom Lord's Hackery

Tom Lord's Hackery

Tla 1.3.1 Librification Experiment Progress Report

2005-02-21

This document refers to the tla development branch:

Archive: lord@emf.net--librify-tla-2005

Version: tla--factor-1--1.3.1

(See links on the home page for help finding my archives.)

Context

Last week I reported having just spent a week modifying the libawk part of tla to permit string-sharing between multiple relational and associative table entries. (The bug report describes that work.)

I was surprised at how quickly that work went. I had only meant to spend some time estimating how long the task would take. Working on the estimate, I couldn't resist working on the modification itself, and when the deadline for the estimate arrived I already finished the work I was supposed to estimate! (I provided an estimate of "-3 days" -- undertaking the already-complete task should count as adding three days to our schedule. :-)

That got me thinking: the libawk cleanups were a small part of the long list of changes that would be necessarily to incrementally transform libarch from its state in 1.3 into a more librified and more portable piece of code: friendly to scripting languages, GUIs, alternative front-ends, extension languages, and non-unix platforms.

I have long assumed (as described elsewhere that an incremental librification starting from the 1.3 code base had poor chances for success.

But if the fixes to libawk took "-3 days", perhaps the rest of incremental librification wouldn't be so impractical.

A Two Week Experiment

Today marks the middle of what will be a two week experiment in 1.3 librification.

The form of the experiement is that I am spending these two weeks to librify as much of libarch as I can subject to some constraints:

Results After Week 1

Executive Summary

The experiment tries to answer the yes or no question:

The Executive Question

Is persuing the librification effort for 1.3.1 a practical strategy for persuing the high-level objectives for GNU Arch (such as Windows support, Unicode support, scripting and extension language support, a demonstrably/visibly robust implementation, etc.)?

One week into the experiment I will leave my betting money at 90/10: there is a 90% chance that the answer to the executive question will be a clear "yes" at the end of the two week experiment (which will be 28-Feb-2005).

One modest but interesting demonstration of the benefits of librification might be the improvements to error reporting that it might lead to.

Technical Summary

See also ./tla-fn-anatomy.html.

Last Week

I spent most of the first week laying down a foundation for librification. That included:

Factoring the source tree. I set up a framework for splitting up files into multiple directories organized around modular and "modular cluster" boundaries. The old contents of libarch now live in a directory called libarch-compat. Those files will be incrementally deprecated: removed one by one and replaced by librified replacements in other libarch-* directories.

Setting up a new front end. My plan is to librify "from the top down" as much as possible. I'll work in a loop: pick a an arch subcommand; rewrite it to use only librified code (no code from libarch-compat); repeat until there are no unlibrified commands. Therefore, I set up a new tla.c (the home of main). The new front end first looks for a librified version of the subcommand. If it doesn't find one, it runs the subcommand from libarch-compat.

Designing and implementing the error signalling mechanism. libarch needs to consistently and robustly signal errors rather than (in the manner of 1.3 and prior) often simply exitting on discovery of an error condition. Part of what I did this week was to install run-time systemf support (./src/tla/libach-errors) for error management.

Rebuilt libawk. The libawk cleanup modified all callers into libawk to be robust in the face of a libawk implementation that shared strings between multiple table entries. It also modified the existing libawk code to actually share strings opportunistically, resulting in at least a significant run-time space savings. Many librified functions will need libawk-style functionality but the existing libawk implementation does not provide for error signalling and recovery and, in other ways, does not conform to the requirements for a fully librified libarch. Last week, collecting ideas and code-scraps from both the existing libawk and the code base for tla 2.0, I built a new implementation of the functionality in libawk. The new libawk (now called libarch-values), in addition to be librified, adds support for table entries whose values are of types other than just string (e.g., integer-valued table entries).

I also started on librifying the my-id command. That invovled working on revised support for option parsing, on the API for functions implementing tla sub-commands, and work on writing librified versions of the low-level functions for manipulating a user id.

This work went well in a few senses. I was able to cut-past-edit a certain amount of code from both tla 1.3 and tla 2.0 to write what I needed in this context. A great deal of the new code I simply rewrote, from scratch: this was code that is a minor variation on code that I've rewritten from scratch 3 or 4 times over the past few months. The resulting code seems to work well, although testing has been scattershot. I'm satisfied with the emerging calling conventions.

Next Week and Possibly Beyond

In week two I have a little more work to do on the foundation: string primitive operations; better option parsing; the beginnings of a more portable file system protocol stack.

Beyond that I want to librify as much as I can in the remaining time.

I'll consider the experiment to have produced a distinctly positive result (meaning that this approach to librification is worth persuing) if I can get through librifying the file-id command and some commands that pertain to per-user (~/.arch-params) parameters. Such an outcome implies an efficient framework for reimplementing CLI parsers, progress on librifying namespace management, project tree file system access, project tree arch control file access, and ~/.arch-params access.

A positive outcome will warrant a follow-on series of three "wind sprints": one each to librify inventory, mkpatch, and dopatch. Past experience has shown that, once those commands are in place, implementing (in this case, librifying) the rest of tla is a relative cake walk.

Librification Experiment Constraints

This experiment asks how long it will take to make a "clean up pass" over libarch such that, at the end of the process, the constraints described below are satisfied throughout the implementation of tla.

Librification Experiment Constraints

Upward compatability -- for several roughly one week intervals it is anticipated that only part of libarch will be librified. Nevertheless, tla must be fully operable at those intervals, passing both make test and changeset burn-in tests. The intent is that it should be possible (and ideally useful) to merge partially-complete librification work into the mainline early and often.

Perfect Error Handling -- Librified parts of libarch must have perfected error handling. That means that they do not exit the process except under truly uncontinuable conditions -- most errors are signalled to callers. Resource allocation and deallocation must be robustly handled across all paths, including error-signaling paths through the code.

Abstract String Handling -- No part libarch code should make presumptions about the internal representation of strings. Strings should be manipulated purely via procedural interfaces based on an ontology of code-point-index-addressable sequences of unicode codepoints. Where specific codepoint values must be presumed, only graphical and space ASCII characters should be referred to.

Reinforced On-disk Representation Abstractions libarch has long internally had a rough layering of its filesystem access. The vu layer, from hackerlab, provides a low-level indirection above Posix system calls; for each of project-trees, ~/.arch-param directories, and file-system archives arch includes a roughly procedural interface. Within those three primary disk formats are ad-hoc formats for specific subcomponents (e.g, for files in ~/.arch-params or for patch logs in ./{arch}). Two of these subsystems (project tree and archive formats) have proven to need major restructuring for a clean port to Windows-based platforms. Throughout the code, abstraction barriers are unevenly preserved with leaks across them exposing details of path names, descriptors, and so forth. A librified libarch needs to clarify the layering in these components and ensure that the API to them is sufficiently abstract that changes to them (such as for a Windows port) can be made easily.

Customizability, Extensibility, and Self-Documentation Third party developers have made very clear the demand for robust scripting language bindings to libarch. Work on arch GUIs, IDE bindings, and alternative front-ends suggests a similar demand. Some desirable capabilities in the core of arch, such as file-type-specific diff compuation and patch application, suggests a demand for an arch which is not merely scriptable (callable as primitive routines from a scripting language) but extensible (can be configured to call out to extension language routines during core operations). The APIs, data types, error handling conventions, and available documentation used in a librified libarch must be scripting and extension language friendly.

Copyright

Copyright (C) 2004 Tom Lord

This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.

See the file COPYING for further information about the copyright and warranty status of this work.

tla-1.3.5+dfsg/web/communications/diary-2005-05.html0000644000175000017500000000554010457621763020365 0ustar useruser Tom Lord's Hackery

Tom Lord's Hackery

Tom's Work Diary (May 2005)

<-- April 2005 June 2005 -->

Mon May 2 16:07 2005

GNU Arch version tla 1.3.2 is ready and available at ftp.gnu.org and its mirrors.

This release fixes a number of minor bugs and adds initial support for more extensive metadata support.

With the new release, if a tree being patched or committed has the file {arch}/=meta and the user running tla has the file ~/.arch-params/metadata-rules, then 12 rather than 9 bits of file mode are tracked and ownership and group ownership are tracked.

Copyright

Copyright (C) 2004 Tom Lord

This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.

See the file COPYING for further information about the copyright and warranty status of this work.

tla-1.3.5+dfsg/web/communications/diary-2005-01.html0000644000175000017500000000640610457621763020363 0ustar useruser Tom Lord's Hackery

Tom Lord's Hackery

Tom's Work Diary (January 2005)

<-- December 2004 Febrary 2005 -->

Tue Jan 11 11:49 2005

NEXT DUE DATE Tue Feb 1 2005 -- "step 1" of the tla 2.0 roadmap.

The todo item: make progress on the tla 2.0

The todo item: make progress on the tla 2.0

Mon Jan 10 15:53 2005

The todo item: make progress on the tla 2.0

Today's hot updates (after many days of silence, sorry):

For the "big picture" folks, a tla 2.0 roadmap (with stuff about 1.X, too).

For the "masochistic geek" folks, a virtual machine for XL and the latest updates to the tla 2.0 code guide.

Copyright

Copyright (C) 2004 Tom Lord

This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.

See the file COPYING for further information about the copyright and warranty status of this work.

tla-1.3.5+dfsg/web/communications/diary-2004-12.txt0000644000175000017500000000763710457621763020246 0ustar useruser[[title Tom's Work Diary (December 2004) ]] [[blockquote //\*^<<<"`<--' November 2004" -- ./diary-2004-11.html>>>^*\// //\*^<<<"January 2005 `-->'" -- ./diary-2005-01.html>>>^*\// ]] [[cartouche /`Thu Dec 23 12:02 2004'/ \// Today's goals //\ * Progress on the `tla 2.0' todo list /`Thu Dec 23 12:02 2004'/ A bit of code shuffling (bringing down prototype from rafters to the 2.0 mainline) and there's <"progress on the `libarch' API" -- ./src/tla2/guide.html>. ]] [[cartouche /`Fri Dec 17 11:01 2004'/ \// Today's goals //\ /Really, really! Overdue TODO Items!/ * Deal with the FSF copyright assignment paperwork * Make a mirror of `lord@regexps.com--2002' available somewhere where jblack can snarf it. /Routine todo items:/ * Progress on the `tla 2.0' todo list /`Fri Dec 17 12:21 2004'/ Made ample progress on `tla 2.0'. Finally got jblack his mirror and even sent mail about it! Finally mailed back FSF paperwork! /`Fri Dec 17 11:03 2004'/ `tla 2.0' continues to <"progress nicely" -- $/src/tla2/guide.html>. It's probably not controversial but <"here is a standard for the lexical syntax of subcommand names" -- $/src/tla2/stds/arch-cmd-name.html> Now I must catch up on some overdue <"non-tla 2.0 TODO items" -- $/web/communications/diary-2004-12.html> ]] [[cartouche /`Thu Dec 16 13:12:11 2004'/ \// Today's goals //\ * ^Finish^ the tla 2.0 error code stuff * Deal with the FSF copyright assignment paperwork * Make a mirror of `lord@emf.net--2002' available somewhere where jblack can snarf it. /`Thu Dec 16 13:13 2004'/ Hey, boys and girls, I hit a */milestone/*.... crazy, eh? The error code system for `tla2' is now officially (I assert) in decent enough shape to move on to the next `tla2' subtask. <"read all about it...." -- $/src/tla2/guide.html#Error Subsystems> ]] [[cartouche /`Wed Dec 15 12:00 2004'/ \// Today's goals //\ * Write up the tla-2.0 * Update this web site * Deal with the FSF copyright assignment paperwork * Freshmeat about 1.3pre3 * Make a mirror of `lord@emf.net--2002' available somewhere where jblack can snarf it. /`Wed Dec 15 12:01 2004'/ Coding of `tla 2.0' has begun. Currently, attention is being given to the mechanisms for managing error codes. You can read about the status of that at <$/src/tla2/guide.html>. ]] [[cartouche /`Mon Dec 13 08:33 2004'/ \// Today's goals //\ * Write up the tla-2.0 * Update this web site * Deal with the FSF copyright assignment paperwork * Freshmeat about 1.3pre3 * Make a mirror of `lord@emf.net--2002' available somewhere where jblack can snarf it. /'Mon Dec 13 08:18 2004'/ It's been a busy two weeks since my last web site update. /Awiki now using css -- / As you can see, the awiki tool that generates these web pages now has some rudimentary CSS hacks. A friend "forced" me to learn a little bit about CSS recently and, indeed, the core functionality of it seems to be clean, sensible, and useful. The next major revision to the awiki source code (which is not an *immediate* priority) will (a) make the wiki syntax it recognizes entirely "table driven" --- you can create custom wiki syntaxes by writing a new table; (b) make the translation of a wiki parse syntax tree to xml table driven -- choose your own element tags and `CLASS' attributes. /tla-1.3pre3 finally at ftp.gnu.org -- / Freshmeat announcement going out today. /clarity achieved (relatively speaking) about archive and project tree formats -- / recent discussions on those topics on the dev list have been very enlightening, at least for me. /tla 2.0 source base started; `libawk' largely replace -- / The `tla-2.0' project is officially underway. ]] [[null ; arch-tag: Tom Lord Mon Dec 13 09:28:33 2004 (communications/diary-2004-12.txt) ]] tla-1.3.5+dfsg/web/communications/tla-fn-anatomy.html0000644000175000017500000004424710457621763021305 0ustar useruser Tom Lord's Hackery

Tom Lord's Hackery

Anatomy of a Librified libarch Function

#include <tla/libarch/arch.h>

It may be helpful to read this document in parallel with the template C code for libarch functions

The template is described in detail in the appendix Template Details.

t_arch const arch -- The Universal Function Parameter

Every ordinary function in libarch accepts a parameter of type t_arch, conventionally named arch. Some very low level functions are an exception to this rule.

By convention, the output parameters to a function are first in its parameter list, then the t_arch const arch parameter, and then any input parameters.

Arch Sessions and Arch Calls

The arch parameter holds the state, including dynamically allocated resources, of a single "arch session" and of all "arch calls" within that session.

An arch call is the invocation and execution of a single, client-facing, ordinary libarch function. Typically an arch call performs a primitive arch operation or calculation. A call may temporarily allocate resources as it runs; these resources are released before the call returns to the client. During a single call, temporary resources are "attached" to the t_arch const arch and, when a call returns, are automatically released.

An arch session is a sequence of calls which may share persistent state among themselves. A t_arch const arch value is the name for a single context in which such persistent state can be recorded. For example, the location of a user's .arch-params directory defaults to ~/ but it might as easily be an element of the persistent state of a t_arch const arch object. A client can allocate a t_arch, set its .arch-params location to a non-default location, and then perform a series of arch calls with that t_arch. Those arch calls will use the non-default .arch-params location. Other calls in the same process, using a different t_arch, might use a different .arch-params location.

Anatomy of an Arch Function

Entry and Exit

libarch extends the standard C function prolog and postlog with its own conventions. Every libarch function must be of the general form (here illustrated for a function which can not raise errors):


    int
    some_fn (t_arch const arch)
    {
      int answer = -1;

      arch_enter_call (arch);

      /* ... compute the real answer.  Set `answer'.  ... */

      arch_leave_call (arch);
      return answer;
    }


    

Unbalanced calls to arch_leave_call constitute an invariant violation resulting from a coding error and cause a call to panic.

Error Codes and Raising Errors

libarch uses dynamically assigned positiveinteger error codes when reporting error conditions to callers. Must functions which can indicate an error do so by returning a negativeinteger whose magnitude (additive inverse) is an error code.

In addition to signalling errors via return value, functions must explicitly raise errors, which records then in the t_arch const arch parameter. Typical code looks (schematically) like this:

    ssize_t
    some_fn (t_arch const arch)
    {
      ssize_t answer = -1;
      ssize_t errcode = 0;

      arch_enter_call (arch);

      /* ... compute the real value for `answer' but:
       */
      if (... an XYZZY error has been detected ...)
        {
          errcode = error_arch_XYZZY ();
          goto error_exit;
        }

      /* ... assuming that `answer' is now set 
       */
      invariant (answer >= 0);  /* normal return can't be negative --
                                 * that's reserved for errors.
                                 */
      arch_leave_call (arch);
      return answer;


     error_exit:
       invariant (errcode > 0);
       arch_RAISE (arch, errcode, "some_fn");
       answer = -errcode;
       arch_leave_call (arch);
       return answer;
    }


    

See also Error State Transition Table.

Error Messages -- The msgbuf

Between a call to arch_enter_call and a call to arch_RAISE, clients can format arbitrary text to be associated with the raised error. (The intent is that this is text which might be displayed to a user.)

The exmaple above might be modified to contain:

      if (... an XYZZY error has been detected ...)
        {
          arch_msgbuf_printfmt (arch, "an xyzzy error caused by %s\n", xyzzy_errstr());
          errcode = error_arch_XYZZY ();
          goto error_exit;
        }

    

Managing Allocted Local State

Commonly, libarch functions need to allocate temporary strings, lists, and tables to contain the results of intermediate computations. Those data structures must be reliably freed before returning to the caller. The situation is common enough that libarch includes help for it.

Local allocated values, when allocated, are "attached" to a t_arch const arch value. When the call is exited (indicated by a call to arch_leave_call), those attached resources are freed:

WARNING: this interface is not fully implemented yet and is subject to minor changes as it is finalized.

    ssize_t
    some_fn (t_arch const arch)
    {
      ARCH_FN_DECL;
      ssize_t answer = -1;
      t_local_val tmp_str = LOCAL_VAL_NIL_INIT;
      ssize_t status = -1;

      arch_enter_call (arch);


      /* ... */

      /* e.g.: allocate a local string
       */
      status = val_make_str (addr_local_val (tmp_str, arch),
                             arch,
                             "hello world");
      if (status < 0)
        {
          errcode = arch_error_ENOMEM ();
          goto error_exit;
        }

      /* ... */

      arch_leave_call (arch);
      /*
       * The call to `arch_leave_call' above will implicitly 
       * release the storage allocated for `tmp_str'.
       */

      return answer;


     error_exit:
       invariant (errcode > 0);
       arch_RAISE (arch, errcode, "some_fn");
       answer = -errcode;
       arch_leave_call (arch);
       return answer;
    }


    

Appendix: {Template Details}

The file src/tla/Template-fn contains a template for librified libarch functions. The template begins:

Function Prototype

    /** function: FN_NAME
     *
     */
    ssize_t
    FN_NAME (t_arch const arch)

    

there and elsewhere, replace FN_NAME with the name of the function you are defining.

Most functions should return a ssize_t value, a negative integer indicating an error (whose error code is the magnitude of that negative integer). Functions with no other use for the ssize_t return value should return 0 upon success. Other functions may return any non-negative value upon success.

Output parameters should be declared prior to the arch parameter; other parameters following the arch parameter. All parameters should be declared const. Normally, each parameter should be declared on a separate line. For example:

    ssize_t
    some_fn (int * const n_ret,
             t_arch const arch,
             int const x,
             int const y)

    

Local Variable

All non-const local variables must be declared in the outermost block of a function. The outermost block in the template begins:

    {
      ARCH_FN_DECLS;
      ssize_t answer = -1;
      int pc = 0;
      ssize_t errcode = 0;

    

Additional local variables may be added to that list.

The sole exception to this role is local variables which are const. Such variables may be declared (and necessarily initialized) at the top of nested blocks.

No local variable in the outermost block may have a non-constant initializer or may have an initializer which makes a call to a function (even a const function).

Function Entry

The body of the template reads, schematically:

    if (pc == 0)
      {
        /* init */
        arch_enter_call (arch);
        goto body;
      }
    else
      {
        [... error handling code ...]

      normal_exit:
        invariant (answer >= 0);
        goto exit_with_cleanups;

      exit_with_cleanups:
        goto exit_immediately;

      exit_immediately:
        arch_leave_call (arch);
        return answer;
      }

    body:

    [... main body of the function ...]

    goto normal_exit;


    

Programs may add code to the section labeled /* init */ between the call to arch_enter_call and the goto body statement. Coded added in that location should be solely for the purpose of initializing local variables to values which are not constant. For example, a local variable declared:

     time_t now = 0;

    

might be initialized in the /* init */ section with:

     time_t now = time (0);

    

It could not have been declared these ways:

     time_t now = time (0);             /* illegal (by convention) */
     time_t const now = time (0);       /* illegal (by convention) */

    

because local variable initializers at the top of a libarch function may not make function calls.

Single Entry, Single Exit

The template contains the code:

      exit_immediately:
        arch_leave_call (arch);
        return answer;

    

That is the only return statement in the template and programmers must not add addition return statements to the function definition. All exit paths from the function must pass through the code labeled exit_immediately.

The call to arch_leave_call provides run-time enforcement of an open ended set of calling convention invarients. It has has responsibility for releasing temporary resources allocated by this function call.

Error and Normal Returns but a Single Cleanup Path

The template contains:


    error_exit:
      invariant (errcode > 0);
      arch_RAISE (arch, errcode, "FN_NAME");
      answer = -errcode;
      goto exit_with_cleanups;

    efatal_exit:
      errcode = error_arch_EFATAL ();
      goto error_exit;

    eparam_exit:
      errcode = error_arch_EPARAM ();
      goto error_exit;

    normal_exit:
      invariant (answer >= 0);
      goto exit_with_cleanups;

    exit_with_cleanups:
      goto exit_immediately;


    

Programmers may delete the code labeled efatal_exit and eparam_exit if those exit paths are not needed.

All error exit paths from the function should involve setting errcode to a positive integer value and transfering to error_exit.

All ordinary exit paths from the function should involve setting the variable answer to the return value from the function and transfering to normal_exit.

When those conventions are followed, execution passes through the code labled exit_with_cleanups and finally to`exit_immediately'.

Programmers may (have to) customize the template in two ways: (1) By adding resource-releasing code to the section labled exit_with_cleanups; (2) by modifying the invariant's in error_exit and normal_exit to more precisely reflect the range of expected return values from the function.

The Main Function Body

The template finishes with:


   body:

    goto normal_exit;


    

Programmers must customize that part of the template by filling in code implementing the function between the body and the goto. In some cases, programmer's must replace the label in the goto or replace the entire goto with /* not reached */.

Appendix: {Error State Transition Table}

Any libarch function (client facing or ordinary internal function) can raise an error. Caller's must respond to all errors raised.

To an imperfect but practical extent, libarch enforces that restriction. In particular, every t_libarch is partly characterized by an error state. The error state is described by three integers, according to the state diagram below.

The gist is that if a function you call raises an error, your client must either re-raise the error before returning to its caller, or must "clear" the error state.


    NORMAL state:
          depth = D
          err_depth = -1;
          last_raise_depth = -1;

      invariants:
          0 <= D

      transitions:

         * arch_enter_call (arch)

            goto NORMAL with
              new_depth := D + 1

         * arch_leave_call (arch)

            if (depth == 0)
              FATAL ERROR
            else
              goto NORMAL with
                new_depth := D - 1

         * arch_RAISE (arch, errcode, tag)

            goto ERROR_HERE with
              new_err_depth := D
              new_last_raise_depth := D


         * arch_clear_error (arch)

            goto NORMAL with
              err_depth = -1;
              last_raise_depth = -1;


    ----

    ERROR_HERE state:

          depth = D
          err_depth = E;
          last_raise_depth = L;

      invariants:
          D >= 0
          D <= E
          D == L

      transitions:

         * arch_enter_call (arch)

            FATAL ERROR

         * arch_leave_call (arch)

            if (depth == 0)
              FATAL ERROR
            else
              goto ERROR_CALLEE with
                new_depth := D - 1

         * arch_RAISE (arch, errcode, tag)

           goto ERROR_HERE

         * arch_clear_error (arch)

            goto NORMAL with
              err_depth = -1;
              last_raise_depth = -1;

    ----

    ERROR_CALLEE state:

          depth = D
          err_depth = E;
          last_raise_depth = L;

      invariants:
          D >= 0
          D < E
          D == (L - 1)

      transitions:

         * arch_enter_call (arch)

            FATAL ERROR

          * arch_leave_call (arch)

            FATAL ERROR

          * arch_RAISE (arch, errcode, tag)

            goto ERROR_HERE with
              new_last_raise_depth = D

         * arch_clear_error (arch)

            goto NORMAL with
              err_depth = -1;
              last_raise_depth = -1;


  

Copyright

Copyright (C) 2004 Tom Lord

This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.

See the file COPYING for further information about the copyright and warranty status of this work.

tla-1.3.5+dfsg/web/communications/diary-2004-12.html0000644000175000017500000001431210457621763020357 0ustar useruser Tom Lord's Hackery

Tom Lord's Hackery

Tom's Work Diary (December 2004)

<-- November 2004 January 2005 -->

Thu Dec 23 12:02 2004

Today's goals

Progress on the tla 2.0 todo list

Thu Dec 23 12:02 2004

A bit of code shuffling (bringing down prototype from rafters to the 2.0 mainline) and there's progress on the libarch API.

Fri Dec 17 11:01 2004

Today's goals

Really, really! Overdue TODO Items!

Deal with the FSF copyright assignment paperwork

Make a mirror of lord@regexps.com--2002 available somewhere where jblack can snarf it.

Routine todo items:

Progress on the tla 2.0 todo list

Fri Dec 17 12:21 2004

Made ample progress on tla 2.0.

Finally got jblack his mirror and even sent mail about it!

Finally mailed back FSF paperwork!

Fri Dec 17 11:03 2004

tla 2.0 continues to progress nicely.

It's probably not controversial but here is a standard for the lexical syntax of subcommand names

Now I must catch up on some overdue non-tla 2.0 TODO items

Thu Dec 16 13:12:11 2004

Today's goals

Finish the tla 2.0 error code stuff

Deal with the FSF copyright assignment paperwork

Make a mirror of lord@emf.net--2002 available somewhere where jblack can snarf it.

Thu Dec 16 13:13 2004

Hey, boys and girls, I hit a milestone.... crazy, eh? The error code system for tla2 is now officially (I assert) in decent enough shape to move on to the next tla2 subtask.

read all about it....

Wed Dec 15 12:00 2004

Today's goals

Write up the tla-2.0

Update this web site

Deal with the FSF copyright assignment paperwork

Freshmeat about 1.3pre3

Make a mirror of lord@emf.net--2002 available somewhere where jblack can snarf it.

Wed Dec 15 12:01 2004

Coding of tla 2.0 has begun. Currently, attention is being given to the mechanisms for managing error codes.

You can read about the status of that at $/src/tla2/guide.html.

Mon Dec 13 08:33 2004

Today's goals

Write up the tla-2.0

Update this web site

Deal with the FSF copyright assignment paperwork

Freshmeat about 1.3pre3

Make a mirror of lord@emf.net--2002 available somewhere where jblack can snarf it.

'Mon Dec 13 08:18 2004'

It's been a busy two weeks since my last web site update.

Awiki now using css -- As you can see, the awiki tool that generates these web pages now has some rudimentary CSS hacks. A friend "forced" me to learn a little bit about CSS recently and, indeed, the core functionality of it seems to be clean, sensible, and useful. The next major revision to the awiki source code (which is not an immediate priority) will (a) make the wiki syntax it recognizes entirely "table driven" --- you can create custom wiki syntaxes by writing a new table; (b) make the translation of a wiki parse syntax tree to xml table driven -- choose your own element tags and CLASS attributes.

tla-1.3pre3 finally at ftp.gnu.org -- Freshmeat announcement going out today.

clarity achieved (relatively speaking) about archive and project tree formats -- recent discussions on those topics on the dev list have been very enlightening, at least for me.

tla 2.0 source base started; libawk largely replace -- The tla-2.0 project is officially underway.

tla-1.3.5+dfsg/web/communications/tla-error-sample.txt0000644000175000017500000001266010457621763021511 0ustar useruser[[title Error Reporting for 1.3.1 ]] If the <"librification experiment" -- librification.html> continues to go well, error reporting in 1.3.1 will begin to improve. Specifically, the librified parts of `libarch' use an error reporting mechanism that supports printing a "traceback" of an error. A test command illustrates this using a fictional command that signals an error condition from deep in the call stack when provided with an even number of arguments. Note that in this illustration, a total of six frames of the stack walkback are printed --- the shallowest three on the call stack and the deepest three. Frames are printed from shallowest to deepest and so the user sees first the error as reported by the highest level entry point and then, finally, the error as reported by the low-level function where it occured. The number of stack frames printed in the walkback is parameterized The current setting of six is probably two verbose to use as a default; printing two (the shallowest and deepest) is probably better. Still, by way of illustration of the new `libarch' capability: [[tty % tla try-error * ERROR RAISED BY `tla' In: arch_cli_hello_world "/usr/home/lord/wd/dists/src/tla/libarch-cli/try-error.c":69 Error: EOPNOTSUPP "non-specific error" Category: arch "errors from GNU Arch" Unable to complete operation. (This error code is primarily for testing purposes; most commands should never signal this error. The `try-error' command (a testing command) is an exception. ----- (details follow) this is a message printed by arch_cli_try_error ---from--- In: arch_try_error "/usr/home/lord/wd/dists/src/tla/libarch-cli/try-error.c":134 Error: EOPNOTSUPP "non-specific error" Category: arch "errors from GNU Arch" Unable to complete operation. (This error code is primarily for testing purposes; most commands should never signal this error. The `try-error' command (a testing command) is an exception. ----- (details follow) this is a message printed by try_error ---from--- In: arch_try_error "/usr/home/lord/wd/dists/src/tla/libarch-cli/try-error.c":134 Error: EOPNOTSUPP "non-specific error" Category: arch "errors from GNU Arch" Unable to complete operation. (This error code is primarily for testing purposes; most commands should never signal this error. The `try-error' command (a testing command) is an exception. ----- (details follow) this is a message printed by try_error [...] ---from--- In: arch_try_error "/usr/home/lord/wd/dists/src/tla/libarch-cli/try-error.c":134 Error: EOPNOTSUPP "non-specific error" Category: arch "errors from GNU Arch" Unable to complete operation. (This error code is primarily for testing purposes; most commands should never signal this error. The `try-error' command (a testing command) is an exception. ----- (details follow) this is a message printed by try_error ---from--- In: arch_try_error "/usr/home/lord/wd/dists/src/tla/libarch-cli/try-error.c":134 Error: EOPNOTSUPP "non-specific error" Category: arch "errors from GNU Arch" Unable to complete operation. (This error code is primarily for testing purposes; most commands should never signal this error. The `try-error' command (a testing command) is an exception. ----- (details follow) this is a message printed by try_error ---from--- In: arch_try_error "/usr/home/lord/wd/dists/src/tla/libarch-cli/try-error.c":134 Error: EOPNOTSUPP "non-specific error" Category: arch "errors from GNU Arch" Unable to complete operation. (This error code is primarily for testing purposes; most commands should never signal this error. The `try-error' command (a testing command) is an exception. ----- (details follow) * Copyright /Copyright (C) 2004 Tom Lord/ This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but /WITHOUT ANY WARRANTY/; without even the implied warranty of /MERCHANTABILITY/ or /FITNESS FOR A PARTICULAR PURPOSE/. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. See the file `COPYING' for further information about the copyright and warranty status of this work. [[null ; arch-tag: Tom Lord Mon Feb 21 16:30:45 2005 (communications/tla-error-sample.txt) ]] tla-1.3.5+dfsg/web/communications/tla-error-sample.html0000644000175000017500000001524110457621763021634 0ustar useruser Tom Lord's Hackery

Tom Lord's Hackery

Error Reporting for 1.3.1

If the librification experiment continues to go well, error reporting in 1.3.1 will begin to improve.

Specifically, the librified parts of libarch use an error reporting mechanism that supports printing a "traceback" of an error.

A test command illustrates this using a fictional command that signals an error condition from deep in the call stack when provided with an even number of arguments.

Note that in this illustration, a total of six frames of the stack walkback are printed --- the shallowest three on the call stack and the deepest three. Frames are printed from shallowest to deepest and so the user sees first the error as reported by the highest level entry point and then, finally, the error as reported by the low-level function where it occured.

The number of stack frames printed in the walkback is parameterized The current setting of six is probably two verbose to use as a default; printing two (the shallowest and deepest) is probably better.

Still, by way of illustration of the new libarch capability:


    % tla try-error

    * ERROR RAISED BY `tla'
    
      In: arch_cli_hello_world
          "/usr/home/lord/wd/dists/src/tla/libarch-cli/try-error.c":69
      Error: EOPNOTSUPP
             "non-specific error"
      Category: arch
                "errors from GNU Arch"
    
        Unable to complete operation.  (This error code is primarily
        for testing purposes;  most commands should never signal this
        error.  The `try-error' command (a testing command) is an
        exception.
        
      ----- (details follow)
    
        this is a message
        printed by arch_cli_try_error
        
    
    ---from---
      In: arch_try_error
          "/usr/home/lord/wd/dists/src/tla/libarch-cli/try-error.c":134
      Error: EOPNOTSUPP
             "non-specific error"
      Category: arch
                "errors from GNU Arch"
    
        Unable to complete operation.  (This error code is primarily
        for testing purposes;  most commands should never signal this
        error.  The `try-error' command (a testing command) is an
        exception.
        
      ----- (details follow)
    
        this is a message
        printed by try_error
        
    
    ---from---
      In: arch_try_error
          "/usr/home/lord/wd/dists/src/tla/libarch-cli/try-error.c":134
      Error: EOPNOTSUPP
             "non-specific error"
      Category: arch
                "errors from GNU Arch"
    
        Unable to complete operation.  (This error code is primarily
        for testing purposes;  most commands should never signal this
        error.  The `try-error' command (a testing command) is an
        exception.
        
      ----- (details follow)
    
        this is a message
        printed by try_error
        
    
    [...]
    
    ---from---
      In: arch_try_error
          "/usr/home/lord/wd/dists/src/tla/libarch-cli/try-error.c":134
      Error: EOPNOTSUPP
             "non-specific error"
      Category: arch
                "errors from GNU Arch"
    
        Unable to complete operation.  (This error code is primarily
        for testing purposes;  most commands should never signal this
        error.  The `try-error' command (a testing command) is an
        exception.
        
      ----- (details follow)
    
        this is a message
        printed by try_error
        
    
    ---from---
      In: arch_try_error
          "/usr/home/lord/wd/dists/src/tla/libarch-cli/try-error.c":134
      Error: EOPNOTSUPP
             "non-specific error"
      Category: arch
                "errors from GNU Arch"
    
        Unable to complete operation.  (This error code is primarily
        for testing purposes;  most commands should never signal this
        error.  The `try-error' command (a testing command) is an
        exception.
        
      ----- (details follow)
    
        this is a message
        printed by try_error
        
    
    ---from---
      In: arch_try_error
          "/usr/home/lord/wd/dists/src/tla/libarch-cli/try-error.c":134
      Error: EOPNOTSUPP
             "non-specific error"
      Category: arch
                "errors from GNU Arch"
    
        Unable to complete operation.  (This error code is primarily
        for testing purposes;  most commands should never signal this
        error.  The `try-error' command (a testing command) is an
        exception.
        
      ----- (details follow)
    
        
        

Copyright

Copyright (C) 2004 Tom Lord

This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.

See the file COPYING for further information about the copyright and warranty status of this work.

tla-1.3.5+dfsg/web/communications/tla-fn-anatomy.txt0000644000175000017500000003567510457621763021165 0ustar useruser[[title Anatomy of a Librified `libarch' Function --- /`#include '/ ]] [[cartouche It may be helpful to read this document in parallel with the <"template /C/ code for `libarch' functions" -- $/src/tla/Template-fn> The template is described in detail in the appendix {Template Details}. ]] * `t_arch const arch' -- The Universal Function Parameter Every ordinary function in `libarch' accepts a parameter of type `t_arch', conventionally named `arch'. Some very low level functions are an exception to this rule. By convention, the output parameters to a function are first in its parameter list, then the `t_arch const arch' parameter, and then any input parameters. * Arch Sessions and Arch Calls The `arch' parameter holds the state, including dynamically allocated resources, of a single "arch session" and of all "arch calls" within that session. An /arch call/ is the invocation and execution of a single, client-facing, ordinary `libarch' function. Typically an arch call performs a primitive arch operation or calculation. A call may temporarily allocate resources as it runs; these resources are released before the call returns to the client. During a single call, temporary resources are "attached" to the `t_arch const arch' and, when a call returns, are automatically released. An /arch session/ is a sequence of calls which may share persistent state among themselves. A `t_arch const arch' value is the name for a single context in which such persistent state can be recorded. For example, the location of a user's `.arch-params' directory defaults to `~/' but it might as easily be an element of the persistent state of a `t_arch const arch' object. A client can allocate a `t_arch', set its `.arch-params' location to a non-default location, and then perform a series of arch calls with that `t_arch'. Those arch calls will use the non-default `.arch-params' location. Other calls in the same process, using a different `t_arch', might use a different `.arch-params' location. * Anatomy of an Arch Function ** Entry and Exit `libarch' extends the standard /C/ function prolog and postlog with its own conventions. Every `libarch' function must be of the general form (here illustrated for a function which can not raise errors): [[tty int some_fn (t_arch const arch) { int answer = -1; arch_enter_call (arch); /* ... compute the real answer. Set `answer'. ... */ arch_leave_call (arch); return answer; } ]] Unbalanced calls to `arch_leave_call' constitute an invariant violation resulting from a coding error and cause a call to `panic'. ** Error Codes and Raising Errors `libarch' uses dynamically assigned */positive*/ integer error codes when reporting error conditions to callers. Must functions which can indicate an error do so by returning a */negative/* integer whose magnitude (additive inverse) is an error code. In addition to signalling errors via return value, functions must explicitly *raise* errors, which records then in the `t_arch const arch' parameter. Typical code looks (schematically) like this: [[tty ssize_t some_fn (t_arch const arch) { ssize_t answer = -1; ssize_t errcode = 0; arch_enter_call (arch); /* ... compute the real value for `answer' but: */ if (... an XYZZY error has been detected ...) { errcode = error_arch_XYZZY (); goto error_exit; } /* ... assuming that `answer' is now set */ invariant (answer >= 0); /* normal return can't be negative -- * that's reserved for errors. */ arch_leave_call (arch); return answer; error_exit: invariant (errcode > 0); arch_RAISE (arch, errcode, "some_fn"); answer = -errcode; arch_leave_call (arch); return answer; } ]] See also {Error State Transition Table}. ** Error Messages -- The `msgbuf' Between a call to `arch_enter_call' and a call to `arch_RAISE', clients can format arbitrary text to be associated with the raised error. (The intent is that this is text which might be displayed to a user.) The exmaple above might be modified to contain: [[tty if (... an XYZZY error has been detected ...) { arch_msgbuf_printfmt (arch, "an xyzzy error caused by %s\n", xyzzy_errstr()); errcode = error_arch_XYZZY (); goto error_exit; } ]] ** Managing Allocted Local State Commonly, `libarch' functions need to allocate temporary strings, lists, and tables to contain the results of intermediate computations. Those data structures must be reliably freed before returning to the caller. The situation is common enough that `libarch' includes help for it. Local allocated values, when allocated, are "attached" to a `t_arch const arch' value. When the call is exited (indicated by a call to `arch_leave_call'), those attached resources are freed: /WARNING:/ this interface is not fully implemented yet and is subject to minor changes as it is finalized. [[tty ssize_t some_fn (t_arch const arch) { ARCH_FN_DECL; ssize_t answer = -1; t_local_val tmp_str = LOCAL_VAL_NIL_INIT; ssize_t status = -1; arch_enter_call (arch); /* ... */ /* e.g.: allocate a local string */ status = val_make_str (addr_local_val (tmp_str, arch), arch, "hello world"); if (status < 0) { errcode = arch_error_ENOMEM (); goto error_exit; } /* ... */ arch_leave_call (arch); /* * The call to `arch_leave_call' above will implicitly * release the storage allocated for `tmp_str'. */ return answer; error_exit: invariant (errcode > 0); arch_RAISE (arch, errcode, "some_fn"); answer = -errcode; arch_leave_call (arch); return answer; } ]] * Appendix: {*Template Details} The file <"src/tla/Template-fn" -- $/src/tla/Template-fn> contains a template for librified `libarch' functions. The template begins: ** Function Prototype [[tty /** function: FN_NAME * */ ssize_t FN_NAME (t_arch const arch) ]] there and elsewhere, replace `FN_NAME' with the name of the function you are defining. Most functions should return a `ssize_t' value, a negative integer indicating an error (whose error code is the magnitude of that negative integer). Functions with no other use for the `ssize_t' return value should return `0' upon success. Other functions may return any non-negative value upon success. Output parameters should be declared prior to the `arch' parameter; other parameters following the `arch' parameter. All parameters should be declared const. Normally, each parameter should be declared on a separate line. For example: [[tty ssize_t some_fn (int * const n_ret, t_arch const arch, int const x, int const y) ]] ** Local Variable All non-const local variables /must/ be declared in the outermost block of a function. The outermost block in the template begins: [[tty { ARCH_FN_DECLS; ssize_t answer = -1; int pc = 0; ssize_t errcode = 0; ]] Additional local variables may be added to that list. The sole exception to this role is local variables which are `const'. Such variables may be declared (and necessarily initialized) at the top of nested blocks. No local variable in the outermost block may have a non-constant initializer or may have an initializer which makes a call to a function (even a `const' function). ** Function Entry The body of the template reads, schematically: [[tty if (pc == 0) { /* init */ arch_enter_call (arch); goto body; } else { [... error handling code ...] normal_exit: invariant (answer >= 0); goto exit_with_cleanups; exit_with_cleanups: goto exit_immediately; exit_immediately: arch_leave_call (arch); return answer; } body: [... main body of the function ...] goto normal_exit; ]] Programs may add code to the section labeled `/* init */' between the call to `arch_enter_call' and the `goto body' statement. Coded added in that location should be solely for the purpose of initializing local variables to values which are not constant. For example, a local variable declared: [[tty time_t now = 0; ]] might be initialized in the `/* init */' section with: [[tty time_t now = time (0); ]] It could not have been declared these ways: [[tty time_t now = time (0); /* illegal (by convention) */ time_t const now = time (0); /* illegal (by convention) */ ]] because local variable initializers at the top of a `libarch' function may not make function calls. ** Single Entry, Single Exit The template contains the code: [[tty exit_immediately: arch_leave_call (arch); return answer; ]] That is the only `return' statement in the template and programmers /must not/ add addition `return' statements to the function definition. All exit paths from the function must pass through the code labeled `exit_immediately'. The call to `arch_leave_call' provides run-time enforcement of an open ended set of calling convention invarients. It has has responsibility for releasing temporary resources allocated by this function call. ** Error and Normal Returns but a Single Cleanup Path The template contains: [[tty error_exit: invariant (errcode > 0); arch_RAISE (arch, errcode, "FN_NAME"); answer = -errcode; goto exit_with_cleanups; efatal_exit: errcode = error_arch_EFATAL (); goto error_exit; eparam_exit: errcode = error_arch_EPARAM (); goto error_exit; normal_exit: invariant (answer >= 0); goto exit_with_cleanups; exit_with_cleanups: goto exit_immediately; ]] Programmers /may/ delete the code labeled `efatal_exit' and `eparam_exit' if those exit paths are not needed. All error exit paths from the function should involve setting `errcode' to a positive integer value and transfering to `error_exit'. All ordinary exit paths from the function should involve setting the variable `answer' to the return value from the function and transfering to `normal_exit'. When those conventions are followed, execution passes through the code labled `exit_with_cleanups' and finally to`exit_immediately'. Programmers may (have to) customize the template in two ways: (1) By adding resource-releasing code to the section labled `exit_with_cleanups'; (2) by modifying the `invariant''s in `error_exit' and `normal_exit' to more precisely reflect the range of expected return values from the function. ** The Main Function Body The template finishes with: [[tty body: goto normal_exit; ]] Programmers must customize that part of the template by filling in code implementing the function between the `body' and the `goto'. In some cases, programmer's must replace the label in the `goto' or replace the entire `goto' with `/* not reached */'. * Appendix: {*Error State Transition Table} Any `libarch' function (client facing or ordinary internal function) can raise an error. Caller's *must* respond to all errors raised. To an imperfect but practical extent, `libarch' enforces that restriction. In particular, every `t_libarch' is partly characterized by an *error state*. The error state is described by three integers, according to the state diagram below. The gist is that if a function you call raises an error, your client must either re-raise the error before returning to *its* caller, or must "clear" the error state. [[tty NORMAL state: depth = D err_depth = -1; last_raise_depth = -1; invariants: 0 <= D transitions: * arch_enter_call (arch) goto NORMAL with new_depth := D + 1 * arch_leave_call (arch) if (depth == 0) FATAL ERROR else goto NORMAL with new_depth := D - 1 * arch_RAISE (arch, errcode, tag) goto ERROR_HERE with new_err_depth := D new_last_raise_depth := D * arch_clear_error (arch) goto NORMAL with err_depth = -1; last_raise_depth = -1; ---- ERROR_HERE state: depth = D err_depth = E; last_raise_depth = L; invariants: D >= 0 D <= E D == L transitions: * arch_enter_call (arch) FATAL ERROR * arch_leave_call (arch) if (depth == 0) FATAL ERROR else goto ERROR_CALLEE with new_depth := D - 1 * arch_RAISE (arch, errcode, tag) goto ERROR_HERE * arch_clear_error (arch) goto NORMAL with err_depth = -1; last_raise_depth = -1; ---- ERROR_CALLEE state: depth = D err_depth = E; last_raise_depth = L; invariants: D >= 0 D < E D == (L - 1) transitions: * arch_enter_call (arch) FATAL ERROR * arch_leave_call (arch) FATAL ERROR * arch_RAISE (arch, errcode, tag) goto ERROR_HERE with new_last_raise_depth = D * arch_clear_error (arch) goto NORMAL with err_depth = -1; last_raise_depth = -1; ]] * Copyright /Copyright (C) 2004 Tom Lord/ This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but /WITHOUT ANY WARRANTY/; without even the implied warranty of /MERCHANTABILITY/ or /FITNESS FOR A PARTICULAR PURPOSE/. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. See the file `COPYING' for further information about the copyright and warranty status of this work. [[null ; arch-tag: Tom Lord Mon Feb 21 10:08:12 2005 (communications/tla-dynstate.txt) ]] tla-1.3.5+dfsg/web/communications/rfbt-20050310.html0000644000175000017500000000462710457621763020301 0ustar useruser Tom Lord's Hackery

Tom Lord's Hackery

Request for tla 1.3.1 Build Testing
2005-03-10

Recently the tla 1.3.1 mainline has been patched to use a more recent version of libneon. This is a request for people to build test the resulting mainline.

To perform the test, you will need to have registered the archive:

                lord@emf.net--2005

Coordinates for that archive are given below.

To create the necessary source tree:

        % tla get lord@emf.net--2005/dists--devo--1.3.1 tla-build-test
        % cd tla-build-test
        % tla buildcfg ./config

To perform the test, from that same directory:

        % mkdir =build
        % cd =build
        % ../configure
        % make
        % make test
        % make install

The install step will install tla in a subdirectory of the =build directory -- not somewhere it is likely to accidentally appear on your path.

Test results (a short summary, not the output of make) can be informally passed along on gnu-arch-dev@lists.seyza.com.

Thanks. -t

Archive coordinates:

        Archive: lord@emf.net--2005
        Location: http://www.gnuarch.org/archives/lord@emf.net--2005

tla-1.3.5+dfsg/web/communications/diary-2005-01.txt0000644000175000017500000000346310457621763020236 0ustar useruser[[title Tom's Work Diary (January 2005) ]] [[blockquote //\*^<<<"`<--' December 2004" -- ./diary-2004-12.html>>>^*\// //\*^<<<"Febrary 2005 `-->'" -- ./diary-2005-02.html>>>^*\// ]] [[cartouche /`Tue Jan 11 11:49 2005'/ */NEXT DUE DATE/* `Tue Feb 1 2005' -- "step 1" of the <"tla 2.0 roadmap" -- $/src/tla2/roadmap.html>. /*^The^* todo item:/ make progress on the `tla 2.0' /*^The^* todo item:/ make progress on the `tla 2.0' ]] [[cartouche /`Mon Jan 10 15:53 2005'/ /*^The^* todo item:/ make progress on the `tla 2.0' Today's hot updates (after many days of silence, sorry): For the "big picture" folks, a <"tla 2.0 roadmap (with stuff about 1.X, too)" -- $/src/tla2/roadmap.html>. For the "masochistic geek" folks, a <"virtual machine for XL" -- $/src/tla2/frobs/frob.html> and the latest updates to the tla 2.0 <"code guide" -- $/src/tla2/guide.html>. ]] * Copyright /Copyright (C) 2004 Tom Lord/ This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but /WITHOUT ANY WARRANTY/; without even the implied warranty of /MERCHANTABILITY/ or /FITNESS FOR A PARTICULAR PURPOSE/. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. See the file `COPYING' for further information about the copyright and warranty status of this work. [[null ; arch-tag: Tom Lord Mon Jan 10 15:51:50 2005 (communications/diary-2005-01.txt) ]] tla-1.3.5+dfsg/web/communications/rfbt-20050310.txt0000644000175000017500000000252510457621763020147 0ustar useruser [[title Request for `tla 1.3.1' Build Testing `2005-03-10' ]] Recently the `tla 1.3.1' mainline has been patched to use a more recent version of `libneon'. This is a request for people to build test the resulting mainline. To perform the test, you will need to have registered the archive: [[tty lord@emf.net--2005 ]] Coordinates for that archive are given below. To create the necessary source tree: [[tty % tla get lord@emf.net--2005/dists--devo--1.3.1 tla-build-test % cd tla-build-test % tla buildcfg ./config ]] To perform the test, from that same directory: [[tty % mkdir =build % cd =build % ../configure % make % make test % make install ]] The `install' step will install `tla' in a subdirectory of the `=build' directory -- not somewhere it is likely to accidentally appear on your path. Test results (a short summary, not the output of `make') can be informally passed along on . Thanks. -t Archive coordinates: [[tty Archive: lord@emf.net--2005 Location: http://www.gnuarch.org/archives/lord@emf.net--2005 ]] [[null ; arch-tag: Tom Lord Thu Mar 10 11:01:09 2005 (communications/rfbt-20050310.txt) ]] tla-1.3.5+dfsg/web/communications/diary-2005-05.txt0000644000175000017500000000313410457621763020235 0ustar useruser[[title Tom's Work Diary (May 2005) ]] [[blockquote //\*^<<<"`<--' April 2005" -- ./diary-2005-04.html>>>^*\// //\*^<<<"June 2005 `-->'" -- ./diary-2005-06.html>>>^*\// ]] [[cartouche /`Mon May 2 16:07 2005'/ `GNU Arch version tla 1.3.2' is ready and available at `ftp.gnu.org' and its mirrors. This release fixes a number of minor bugs and adds initial support for more extensive metadata support. With the new release, if a tree being patched or committed has the file `{arch}/=meta' */and/* the user running `tla' has the file `~/.arch-params/metadata-rules', then 12 rather than 9 bits of file mode are tracked and ownership and group ownership are tracked. ]] * Copyright /Copyright (C) 2004 Tom Lord/ This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but /WITHOUT ANY WARRANTY/; without even the implied warranty of /MERCHANTABILITY/ or /FITNESS FOR A PARTICULAR PURPOSE/. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. See the file `COPYING' for further information about the copyright and warranty status of this work. [[null ; arch-tag: Tom Lord Wed Jun 1 10:42:39 2005 (communications/diary-2005-05.txt) ]] tla-1.3.5+dfsg/web/communications/diary-2004-11.html0000644000175000017500000002216310457621763020361 0ustar useruser Tom Lord's Hackery

Tom Lord's Hackery

Tom's Work Diary (November 2004)

December 2004 -->

Tue Nov 30 09:26 2004

I've written a draft of a spec for a large foundational part of libarch for tla-2.0. It's a kind of generalization of libawk in the current tla-1.x.

./web/communications/tla-2.0-data.html

Tue Nov 30 09:30 2004

Today's goals

Visit the DMV this week

DEAL WITH THE FSF COPYRIGHT ASSIGNMENT PAPERWORK

DON'T FORGET ABOUT ARCH 1.3PRE3

PUBLISH VARIOUS "OWED" DOCUMENTS

MAKE A MIRROR OF LORD@EMF.NET--2002 AVAILABLE SOMEWHERE WHERE JBLACK CAN SNARF IT.

Thursday was a national holiday in the U.S.

Wed Nov 24 2004

Today's goals

Give up on visit the DMV until next week

Deal with the FSF copyright assignment paperwork

Don't forget about Arch 1.3pre3

Publish various "owed" documents

Wed Nov 24 10:49 2004

Here are some notes about rewriting arch for tla 2.0

Wed Nov 24 08:45 2004

Here is my first "programmer's blog success story.".

Below, I publish a link called What's on Tom's radar?. The idea is that if you are waiting with baited breath for me to get back to you on some topic or make progress on some project, but you don't see it listed there, or don't like the way it's listed there, then you know we've had some kind of "disconnect".

Earlier, on that page, I wrote:

Lots of people, from lots of different perspectives, want "windows support".

The catch is that I have to say: What the heck to you mean, specifically, by Windows support, eh?

As a result of that being on my radar page, someone read it and answered my questions. I have a much clearer idea now and I've started to address that in plans for tla-2.0.

Tue Nov 23 08:57 2004

Today's goals

Visit the DMV

Deal with the FSF copyright assignment paperwork

Don't forget about Arch 1.3pre3

Do additional improvisational "programmer's blog" hacking

Here's a brief report about today's cool new programmer's blog feature:

I want to get out of having to constantly explain every little thing that I do as a programmer, again and again, to several different people and groups. I have to report my progress to the guy who signs my checks; I have to report my progress to the guy I'm supposedly supervising; I have to (at least informally) report my progress to the core group of hackers who contribute the most to arch; I have to report my progress to the Arch community as a whole and even, from time to time, to the FSF.

Things can quickly get out of hand to the point where I spend all of my time talking about progress and none of my time actually making progress.

Wouldn't it be nice if, with less work, I could produce a legible, informative journal of my actual progress -- mostly just as a side effect of taking steps like writing careful commit log messages -- and just point all of the people and groups I'm supposed to report to at my journal? "See of yourself", I can say, "it's all documented right there."

One small but significant aspect of my work is that I'm working on some contribution branches for the GNU Arch mainlines. A contribution branch is a branch of the mainline, containing just one set of changes. The idea is that the upstream mainline maintainer can merge or not merge a contribution branch as a unit: it's thumbs up or down -- all the changes on the branch or none.

It's a chore, sure, for a contributor (like me) to have to prepare a contribution branch --- but it's a chore that pays off. It encourages clearer thinking about keeping the mainline in the state of monotonically increasing quality accomplished by clean, isolated, meaningful change steps.

So, how is my progress on preparing contribution branches for the GNU mainline?

Taking advantage of the structure of gtla, I wrote a tiny shell script (I hope your browser manages to show that as text rather than trying to execute it!).

That shell script is a trivial report generator. It produces, as output, what I think is fairly human-readable plain text output

The strange asci-art conventions in the plain-text report are, of course, Awiki syntax. The report translates trivially to a not-so-shabby web page like this summary of my pending contribution branches

Mon Nov 22 12:44 2004

Today's goals

Make Arch 1.3pre2 more widely available -- put it on the GNU FTP site and announce on freshmeat.

Do lots of hacking on my "programmer's blog" -- Lot's of longer term objectives are now focused on this task including: improving the process for maintaining the GNU Mainline; increasing the transparency of what I do as project maintainer; making and keeping available various interesting technical memos; experimenting with new features for Arch; experimenting with the parser I hope to use for XL; and on and on.

Developments

In fact, 1.3pre2 was quickly noticed to have a nasty regression and 1.3pre3 was produced. So, later this week I'll make 1.3pre3 more widely available instead.

Indeed, I've made lots of progress on Awiki and the programmer's blog, not least rapidly filling out many pages on this site, including quickly converting some older writings to the Awiki syntax.

Life interferes, of course. I have to spend about 4 hours today making my mostly-idle car street-legal again, lest it be towed away and sold to some lowlife more needy than me. This involves, among other things, a trip to the DMV to replace a license plate that seems to have disappeared. I look forward to the day (if ever) when all of my poverty-related civic-procedure glitches are well behind me --- one hard part about not having enough money is it the resulting hassles take too much time and there is no way to avoid the hassles. Meanwhile -- I'm still months behind on two personal (as opposed to commercial) debts incurred during the leanest months of busking: that's a hard part about not having enough money but starting to recover from that -- I feel like an ass towards those I'm still putting off for "tactical" reasons.

tla-1.3.5+dfsg/web/communications/diary-2004-11.txt0000644000175000017500000001551310457621763020235 0ustar useruser[[title Tom's Work Diary (November 2004) ]] [[blockquote //\*^<<<"December 2004 `-->'" -- ./diary-2004-12.html>>>^*\// ]] [[cartouche /`Tue Nov 30 09:26 2004'/ I've written a draft of a spec for a large foundational part of `libarch' for `tla-2.0'. It's a kind of generalization of `libawk' in the current `tla-1.x'. <./web/communications/tla-2.0-data.html> /`Tue Nov 30 09:30 2004'/ \// Today's goals //\ * Visit the DMV this week * DEAL WITH THE FSF COPYRIGHT ASSIGNMENT PAPERWORK * DON'T FORGET ABOUT `ARCH 1.3PRE3' * PUBLISH VARIOUS "OWED" DOCUMENTS * MAKE A MIRROR OF `LORD@EMF.NET--2002' AVAILABLE SOMEWHERE WHERE JBLACK CAN SNARF IT. ]] [[cartouche /Thursday was a national holiday in the U.S./ ]] [[cartouche /`Wed Nov 24 2004'/ \// Today's goals //\ * Give up on visit the DMV until next week * Deal with the FSF copyright assignment paperwork * Don't forget about `Arch 1.3pre3' * Publish various "owed" documents /Wed Nov 24 10:49 2004/ Here are some notes about <"rewriting arch for tla 2.0" -- $/web/communications/rewriting-arch.html> /Wed Nov 24 08:45 2004/ Here is my first "programmer's blog success story.". Below, I publish a link called <"What's on Tom's radar?" -- $/radar.html>. The idea is that if you are waiting with baited breath for me to get back to you on some topic or make progress on some project, but you don't see it listed there, or don't like the way it's listed there, then you know we've had some kind of "disconnect". Earlier, on that page, I wrote: [[cartouche Lots of people, from lots of different perspectives, want *"windows support"*. The catch is that I have to say: *What the heck to you mean, specifically, by ^Windows support^, eh?* ]] As a result of that being on my /radar/ page, someone read it and answered my questions. I have a much clearer idea now and I've started to address that in <"plans for tla-2.0" -- $/tla-2.0.html>. ]] [[cartouche /`Tue Nov 23 08:57 2004'/ \// Today's goals //\ * Visit the DMV * Deal with the FSF copyright assignment paperwork * Don't forget about `Arch 1.3pre3' * Do additional improvisational "programmer's blog" hacking Here's a brief report about today's cool new /programmer's blog/ feature: I want to get out of having to constantly explain every little thing that I do as a programmer, again and again, to several different people and groups. I have to report my progress to the guy who signs my checks; I have to report my progress to the guy I'm supposedly supervising; I have to (at least informally) report my progress to the core group of hackers who contribute the most to arch; I have to report my progress to the Arch community as a whole and even, from time to time, to the FSF. Things can quickly get out of hand to the point where I spend all of my time /talking about progress/ and none of my time /actually making progress/. Wouldn't it be nice if, with less work, I could produce a legible, informative journal of my actual progress -- mostly just as a side effect of taking steps like writing careful `commit' log messages -- and just point all of the people and groups I'm supposed to report to at my journal? *"See of yourself"*, I can say, **"it's all documented right *there*."** One small but significant aspect of my work is that I'm working on some *contribution branches* for the GNU Arch mainlines. A contribution branch is a branch of the mainline, containing just one set of changes. The idea is that the upstream mainline maintainer can merge or not merge a contribution branch as a unit: it's thumbs up or down -- all the changes on the branch or none. It's a chore, sure, for a contributor (like me) to have to prepare a contribution branch --- but it's a chore that pays off. It encourages clearer thinking about keeping the mainline in the state of monotonically increasing quality accomplished by clean, isolated, meaningful change steps. So, how is my progress on preparing contribution branches for the GNU mainline? Taking advantage of the structure of `gtla', I wrote a tiny <"shell script" -- ../gnu-arch/reports/contrib-summary.sh> (I hope your browser manages to show that as text rather than trying to execute it!). That shell script is a trivial *report generator*. It produces, as output, what I think is fairly human-readable <"plain text output" -- ../gnu-arch/reports/contrib-summary.txt> The strange asci-art conventions in the plain-text report are, of course, /Awiki/ syntax. The report translates trivially to a not-so-shabby web page like this <"summary of my pending contribution branches" -- ../gnu-arch/reports/contrib-summary.html> ]] [[cartouche /Mon Nov 22 12:44 2004/ \// Today's goals //\ *Make `Arch 1.3pre2' more widely available -- * put it on the GNU FTP site and announce on freshmeat. *Do lots of hacking on my "programmer's blog" --* Lot's of longer term objectives are now focused on this task including: improving the process for maintaining the GNU Mainline; increasing the transparency of what I do as project maintainer; making and keeping available various interesting technical memos; experimenting with new features for Arch; experimenting with the parser I hope to use for XL; and on and on. \// Developments //\ In fact, `1.3pre2' was quickly noticed to have a nasty regression and `1.3pre3' was produced. So, later this week I'll make `1.3pre3' more widely available instead. Indeed, I've made lots of progress on Awiki and the programmer's blog, not least rapidly filling out many pages on this site, including quickly converting some older writings to the Awiki syntax. /*Life interferes,*/ of course. I have to spend about 4 hours today making my mostly-idle car street-legal again, lest it be towed away and sold to some lowlife more needy than me. This involves, among other things, a trip to the DMV to replace a license plate that seems to have disappeared. I look forward to the day (if ever) when all of my poverty-related civic-procedure glitches are well behind me --- one hard part about not having enough money is it *the resulting hassles take too much time* and *there is no way to avoid the hassles*. Meanwhile -- I'm still months behind on two personal (as opposed to commercial) debts incurred during the leanest months of busking: that's a hard part about not having enough money but starting to recover from that -- I feel like an ass towards those I'm still putting off for "tactical" reasons. ]] [[null ; arch-tag: Tom Lord Mon Nov 22 12:44:28 2004 (communications/diary.txt) ]] tla-1.3.5+dfsg/web/communications/gnu-arch-roadmap.html0000644000175000017500000000637710457621763021605 0ustar useruser Tom Lord's Hackery

Tom Lord's Hackery

An Emerging Tla Roadmap

Updated: 6 Feb 2005

Next Planned Releases

These dates are not cast in stone. They are rough estimates and vague goals.

GNU Arch 2.0 postponed indefinately.

GNU Arch 1.4pre2 uncertain -- it depends entirely on what comes down the pipeline from baz.

GNU Arch 1.3.1 15 Mar 2005 -- This will be primarily a maintenance/rejuvination release of GNU Arch 1.x. Experience has shown that permitting the baz line to serve as the de facto mainline for GNU Arch 1.x will be highly problematic. Therefore, some resources are being redirected from the GNU Arch 2.0 and GNU Arch 1.4 lines of development in order to produce suitable 1.x releases.

Other Upcoming Milestones

Issue Tracking for GNU Arch 15 Mar 2005 In conjunction with the release of GNU Arch 1.3.1, I will announce a new bug-tracking and support infrastructure for GNU Arch releases.

Our aim will be to provide direct, person-to-person issue tracking support. In other words, resources permitting, 5 days per week, "bug czar" volunteers will read and individually reply to incoming issue reports, maintaining in the process the database of known bugs, their priorities, and the status of their fixes. (Initially, the labor and computing infrastructure for this purpose will be donated by Seyza Corp.)

Documentation Update 30 Mar 2005 Close on the heals of the 1.3.1 release, we intended to release an updated version of the tutorial documentation, catching it back up to the GNU line, and making it easier to maintain and keep up to date in the future.

Periodic Milestones

We plan to make GNU Arch 1.x releases not less than once per quarter.

Design Discussions and Standards Development

We intend to agressively lead focussed design discussions about critical areas of Arch design and to work to produce, as a byproduct of those, authoritative standards documents defining the Arch protocol.

tla-1.3.5+dfsg/web/communications/rfbt-20050314.txt0000644000175000017500000000252510457621763020153 0ustar useruser [[title Request for `tla 1.3.1' Build Testing `2005-03-14' ]] Recently the `tla 1.3.1' mainline has been patched to use a more recent version of `libneon'. This is a request for people to build test the resulting mainline. To perform the test, you will need to have registered the archive: [[tty lord@emf.net--2005 ]] Coordinates for that archive are given below. To create the necessary source tree: [[tty % tla get lord@emf.net--2005/dists--devo--1.3.1 tla-build-test % cd tla-build-test % tla buildcfg ./config ]] To perform the test, from that same directory: [[tty % mkdir =build % cd =build % ../configure % make % make test % make install ]] The `install' step will install `tla' in a subdirectory of the `=build' directory -- not somewhere it is likely to accidentally appear on your path. Test results (a short summary, not the output of `make') can be informally passed along on . Thanks. -t Archive coordinates: [[tty Archive: lord@emf.net--2005 Location: http://www.gnuarch.org/archives/lord@emf.net--2005 ]] [[null ; arch-tag: Tom Lord Mon Mar 14 11:21:27 2005 (communications/rfbt-20050314.txt) ]] tla-1.3.5+dfsg/web/communications/diary-2005-06.html0000644000175000017500000000463010457621763020365 0ustar useruser Tom Lord's Hackery

Tom Lord's Hackery

Tom's Work Diary (June 2005)

<-- May 2005

Wed Jun 1 10:38 2005

GNU Arch version tla 1.3.3 is ready and available at ftp.gnu.org and its mirrors.

This release fixes a few minor but important bugs in low level libraries.

Copyright

Copyright (C) 2004 Tom Lord

This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.

See the file COPYING for further information about the copyright and warranty status of this work.

tla-1.3.5+dfsg/web/communications/=update0000644000175000017500000000060510457621763017060 0ustar useruser set -e if test $# -eq 0 ; then for f in [a-z]*.txt ; do rm -f ${f%.txt}.html awiki -N ../../gnuarch.css -n ../../top-nav.txt -r ../.. $f > ${f%.txt}.html done else for f in "$@" ; do rm -f ${f%.txt}.html awiki -N ../../gnuarch.css -n ../../top-nav.txt -r ../.. $f > ${f%.txt}.html done fi # arch-tag: Tom Lord Mon Dec 13 08:38:18 2004 (communications/=update) tla-1.3.5+dfsg/web/communications/diary-2005-02.html0000644000175000017500000001440710457621763020364 0ustar useruser Tom Lord's Hackery

Tom Lord's Hackery

Tom's Work Diary (February 2005)

<-- January 2005 March 2005 -->

Mon Feb 21 16:53 2005

I've been working on an experiment regarding librifying the 1.3.1 code base.

Here's my week-1 report

Mon Feb 14 12:19 2005

I've implemented changes in 1.3.1 which result in relational table entries and keys and values in associative tables (both libawk data structures) can be shared and are, in fact, shared opportunistically.

Crude initial testing suggests that these changes result in fairly substantial memory savings, especially on large trees.

Speed is roughly unchanged, with a silght degredation. On the other hand, the new code hasn't been tuned and profiling of it suggests that obtaining a net speed improvement is much simpler after these changes than before.

The nitty gritty details are available in a bug report.

Fri Feb 11 16:56 2005

There are two new patches (patch-1 and patch-2, in fact) in:

        lord@emf.net--2005/tla--devo--1.3.1


  

which are summarized:

    patch-2
      Remove "libawk/trim.[ch]"
    patch-1
      remove libawk/numbers.[ch]

  

Use of these patches requires the latest revision of libhackerlab in:

        lord@emf.net--2005/hackerlab--devo--1.1

  

(archive locations...)

Merging these changes into branches which wish to remain somewhat in sync with GNU Arch 1.3.1 is recommended. These ought to be low impact changes for all branches.

The short description is that these changes remove the source files matching the patterns:

        ./src/tla/libawk/numbers.[ch]
        ./src/tla/libawk/trim.[ch]

  

The two functions defined in those files have been removed and all callers updated to reflect that.

The changes are documented in detail in the log messages of

Archive: lord@emf.net--libawk-exp-2005
Version: tla--libawk-exp--1.3.1'
Revs: patch-1 ... patch-9

Wed Feb 9 11:37 2005

The new system for recording bugs in GNU Arch releases seems to work reasonably well so far and hopefully will be officially in operation before too long. Currently it is still an unofficial experiment, temporarily housed at http://www.gnuarch.org/bugs--devo--2005.

In other news, I am experimentating and exploring a performance question concerning string allocation and copying practices in arch.

Sun Feb 6 13:00 2005

Well, tla-1.4pre1 looks terrible: it seems it will not work very well to just "pass through" baz changes as GNU Arch.

Therefore, work on tla-2.0 has been de-prioritized, and work in persuit of a new GNU Arch Roadmap has begun.

Sun Feb 6 13:11 2005 Pika and XL are not dead or even entirely dormant. But to maintain the freedom to work on them, I must concentrate heavily on tla 1.x right now. I have removed links about them from this page because I don't want to take the time to maintain those links properly right now.

Copyright

Copyright (C) 2004 Tom Lord

This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.

See the file COPYING for further information about the copyright and warranty status of this work.

tla-1.3.5+dfsg/web/communications/diary-2005-04.txt0000644000175000017500000000252510457621763020237 0ustar useruser[[title Tom's Work Diary (April 2005) ]] [[blockquote //\*^<<<"`<--' March 2005" -- ./diary-2005-03.html>>>^*\// //\*^<<<"May 2005 `-->'" -- ./diary-2005-05.html>>>^*\// ]] [[cartouche /`Wed Apr 13 14:16 2005'/ I've fixed the oft-noted bug in which the <"inode signature shortcut" -- $/bugs/all-bugs/inode-sig.html> causes certain meta-data changes to go undetected. (It turns out to be a very trivial fix.) ]] * Copyright /Copyright (C) 2004 Tom Lord/ This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but /WITHOUT ANY WARRANTY/; without even the implied warranty of /MERCHANTABILITY/ or /FITNESS FOR A PARTICULAR PURPOSE/. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. See the file `COPYING' for further information about the copyright and warranty status of this work. [[null ; arch-tag: Tom Lord Mon May 2 16:05:58 2005 (communications/diary-2005-04.txt) ]] tla-1.3.5+dfsg/web/attic/0000755000175000017500000000000010457621763013631 5ustar userusertla-1.3.5+dfsg/web/attic/radar.html0000644000175000017500000000517610457621763015621 0ustar useruser Tom Lord's Hackery

Tom Lord's Hackery

What's on Tom's Radar?

Things I'm currently paying the most attention to (at least as of when I updated this page (Tue Jan 11 12:31 2005).

GNU Arch

Arch 1.X

Is doing fine.

Arch 2.0

Is my focus right now.

It has it's own project blog where progress is discussed.

Right now, all of the hacking action is around a low-level component called a frob (aka the XL virtual machine

Work on this component now has an official schedule. It's supposed to take 3 weeks, beginning (let's say), now: Tue Jan 11 12:36 2005.

Due Date: Tue Feb 1 12:36 2005.

Arch Concerns

This radar used to have a list "arch issues" -- things that ought to be goals for the Arch project. That material has be revised and is now available as part of the tla 2.0 roadmap.

Pika Scheme

Still alive with cool developments impending .... Tue Jan 11 12:39 2005. See you in 3 days, at most.

Awiki

Awiki is a wiki-style notation for trees over simple scalar types, with a heavy emphasis on human-readable text. It's what the page you are reading is written in.

tla-1.3.5+dfsg/web/attic/radar.txt0000644000175000017500000000255710457621763015474 0ustar useruser[[title What's on Tom's Radar? ]] Things I'm currently paying the most attention to (at least as of when I updated this page (`Tue Jan 11 12:31 2005'). * GNU Arch ** Arch 1.X Is doing fine. ** Arch 2.0 Is my <"focus" -- $/src/tla2/roadmap.html> right now. It has it's own <"project blog" -- $/src/tla2/guide.html> where progress is discussed. Right now, all of the hacking action is around a low-level component called a `frob' (aka <"the XL virtual machine" -- $/src/tla2/frobs/frob.html). Work on this component now has an <"official schedule" -- $/src/tla2/roadmap.html>. It's supposed to take 3 weeks, beginning (let's say), now: /`Tue Jan 11 12:36 2005'./ //\Due Date:\// /`Tue Feb 1 12:36 2005'./ ** Arch Concerns This radar used to have a list "arch issues" -- things that ought to be goals for the Arch project. That material has be revised and is now available as part of the <"tla 2.0 roadmap" -- $/src/tla2/roadmap.html>. * Pika Scheme Still alive with cool developments impending .... `Tue Jan 11 12:39 2005'. See you in 3 days, at most. * Awiki Awiki is a wiki-style notation for trees over simple scalar types, with a heavy emphasis on human-readable text. It's what the page you are reading is written in. [[null ; arch-tag: Tom Lord Mon Nov 22 13:06:01 2004 (communications/radar.txt) ]] tla-1.3.5+dfsg/web/attic/rsn.txt0000644000175000017500000000337710457621763015206 0ustar useruser[[title The /Real Soon Now/ Task List ]] The */Real Soon Now/* task list is a collection of ideas for hacks having the following properties: [[cartouche /Properties of a *Real Soon Now* Task/ /1. Easy to specify./ -- The idea can expressed in just a few words. /2. Easy to hack./ -- The idea can obviously be accomplished in, perhaps at most, one week's work. Ideas in the list can usefully be for any task taking more than just a few seconds. /3. Not an Immediate Priority/ -- Nobody is "scheduled" to begin work on the task and therefore, even though it is a small task, there is no estimated date of completion. ]] /1. Better awiki navigation./ Sites like gnuarch.org become difficult to navigate as more documentation is added. Features such as a sitemap or a context bar would help. * Copyright /Copyright (C) 2004 Tom Lord/ This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but /WITHOUT ANY WARRANTY/; without even the implied warranty of /MERCHANTABILITY/ or /FITNESS FOR A PARTICULAR PURPOSE/. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. See the file `COPYING' for further information about the copyright and warranty status of this work. [[null ; arch-tag: Tom Lord Tue Jan 11 12:40:24 2005 (communications/rsn.txt) ]] tla-1.3.5+dfsg/web/attic/reports/0000755000175000017500000000000010457621763015327 5ustar userusertla-1.3.5+dfsg/web/attic/reports/contrib-summary.html0000644000175000017500000001022210457621763021345 0ustar useruser Tom Lord's Hackery

Tom Lord's Hackery

Contrib Branches Summary

hackerlab--feature-oblists--1.1

The mainline for this contribution branch is lord@emf.net--gnu-arch-2004/hackerlab--devo--1.1.

This contribution branch is up-to-date with the mainline revision patch-2

no CONTRIBUTION-LOG found in base-0

Recent Commits:


    lord@emf.net--gnu-arch-ws-2004/hackerlab--feature-oblists--1.1--base-0
        2004-11-04 17:01:34 GMT
        Tom Lord <lord@emf.net>
        tag of lord@emf.net--gnu-arch-2004/hackerlab--devo--1.1--patch-2

  

hackerlab--feature-obqueues--1.1

The mainline for this contribution branch is lord@emf.net--gnu-arch-2004/hackerlab--devo--1.1.

This contribution branch is up-to-date with the mainline revision patch-2

no CONTRIBUTION-LOG found in base-0

Recent Commits:


    lord@emf.net--gnu-arch-ws-2004/hackerlab--feature-obqueues--1.1--base-0
        2004-11-05 15:15:13 GMT
        Tom Lord <lord@emf.net>
        tag of lord@emf.net--gnu-arch-2004/hackerlab--devo--1.1--patch-2

  

hackerlab--feature-obtables--1.1

The mainline for this contribution branch is lord@emf.net--gnu-arch-2004/hackerlab--devo--1.1.

This contribution branch is up-to-date with the mainline revision patch-2

from ./CONTRIBUTION-LOG in patch-2

Summary: add the 't_obtable' data structure

The obtable modules provide a simple data structure for allocating and freeing descriptor-addressed, homogenously-sized regions of memory from a pool. "Descriptor-addressed" means that, instead of pointers, allocated objects are referred to by small, non-negative, densely-packed integers. "Homogenously-sized" means, obviously enough, that all objects in an obtable are regions of memory of the same size as one another. "From a pool" means that an entire obtable may be de-allocated at once (freeing all allocated objects) and that a single 'alloc-limits.h' allocator is used for an entire pool.

[...]

Recent Commits:


    lord@emf.net--gnu-arch-ws-2004/hackerlab--feature-obtables--1.1--patch-2
        2004-11-05 20:29:23 GMT
        Tom Lord <lord@emf.net>
        added CONTRIBUTION-LOG
    lord@emf.net--gnu-arch-ws-2004/hackerlab--feature-obtables--1.1--patch-1
        2004-11-05 19:53:13 GMT
        Tom Lord <lord@emf.net>
        catch up to fork
    lord@emf.net--gnu-arch-ws-2004/hackerlab--feature-obtables--1.1--base-0
        2004-11-04 17:01:55 GMT
        Tom Lord <lord@emf.net>
        tag of lord@emf.net--gnu-arch-2004/hackerlab--devo--1.1--patch-2

  
tla-1.3.5+dfsg/web/attic/reports/contrib-summary.txt0000644000175000017500000000526310457621763021231 0ustar useruser[[title Contrib Branches Summary ]] * `hackerlab--feature-oblists--1.1' The mainline for this contribution branch is `lord@emf.net--gnu-arch-2004/hackerlab--devo--1.1'. This contribution branch is up-to-date with the mainline revision `patch-2' *no `CONTRIBUTION-LOG' found in `base-0'* /Recent Commits:/ [[log-summary lord@emf.net--gnu-arch-ws-2004/hackerlab--feature-oblists--1.1--base-0 2004-11-04 17:01:34 GMT Tom Lord tag of lord@emf.net--gnu-arch-2004/hackerlab--devo--1.1--patch-2 ]] * `hackerlab--feature-obqueues--1.1' The mainline for this contribution branch is `lord@emf.net--gnu-arch-2004/hackerlab--devo--1.1'. This contribution branch is up-to-date with the mainline revision `patch-2' *no `CONTRIBUTION-LOG' found in `base-0'* /Recent Commits:/ [[log-summary lord@emf.net--gnu-arch-ws-2004/hackerlab--feature-obqueues--1.1--base-0 2004-11-05 15:15:13 GMT Tom Lord tag of lord@emf.net--gnu-arch-2004/hackerlab--devo--1.1--patch-2 ]] * `hackerlab--feature-obtables--1.1' The mainline for this contribution branch is `lord@emf.net--gnu-arch-2004/hackerlab--devo--1.1'. This contribution branch is up-to-date with the mainline revision `patch-2' *from `./CONTRIBUTION-LOG' in `patch-2'* [[cartouche /Summary: / add the 't_obtable' data structure The obtable modules provide a simple data structure for allocating and freeing descriptor-addressed, homogenously-sized regions of memory from a pool. "Descriptor-addressed" means that, instead of pointers, allocated objects are referred to by small, non-negative, densely-packed integers. "Homogenously-sized" means, obviously enough, that all objects in an obtable are regions of memory of the same size as one another. "From a pool" means that an entire obtable may be de-allocated at once (freeing all allocated objects) and that a single 'alloc-limits.h' allocator is used for an entire pool. /*[...]*/ ]] /Recent Commits:/ [[log-summary lord@emf.net--gnu-arch-ws-2004/hackerlab--feature-obtables--1.1--patch-2 2004-11-05 20:29:23 GMT Tom Lord added CONTRIBUTION-LOG lord@emf.net--gnu-arch-ws-2004/hackerlab--feature-obtables--1.1--patch-1 2004-11-05 19:53:13 GMT Tom Lord catch up to fork lord@emf.net--gnu-arch-ws-2004/hackerlab--feature-obtables--1.1--base-0 2004-11-04 17:01:55 GMT Tom Lord tag of lord@emf.net--gnu-arch-2004/hackerlab--devo--1.1--patch-2 ]] tla-1.3.5+dfsg/web/attic/reports/contrib-summary.sh0000755000175000017500000000517110457621763021025 0ustar useruser#!/usr/local/bin/bash set -e printf '[[title\n' printf " Contrib Branches Summary\n" printf ']]\n' printf '\n' printf '\n' archive="$1" feature_versions=$(tla abrowse --versions lord@emf.net--gnu-arch-ws-2004 \ | grep -E '.--feature.*--' \ | sed -e 's/^[ ]*//' \ | sort -u) for v in $feature_versions ; do printf "* \`%s\'\n" $v printf '\n' latest_rev=$(tla revisions --full -r $1/$v | head -1) root=$(tla library-find "$latest_rev") category=$(tla parse-package-name --category "$latest_rev") mainline=$(gtla mainline-cfg | awk '{print $2}' | grep -E "/$category--" | head -1) printf ' The mainline for this contribution branch is\n' if [ -z "$mainline" ] ; then printf ' */unknown/*.\n' else printf " \`%s\'.\\n" "$mainline" printf '\n' latest="$( cd $root ; tla logs -r -s $mainline | head -1 )" if [ -z "$latest" ] ; then printf ' This contribution has no patch logs for the mainline.\n' else printf " This contribution branch is up-to-date with the mainline revision \`%s\'\\n" $latest fi fi printf '\n' if [ ! -e $root/CONTRIBUTION-LOG ] ; then printf " *no \`CONTRIBUTION-LOG\' found in \`%s\'*\n" $(tla parse-package-name --lvl "$latest_rev") else printf " *from \`./CONTRIBUTION-LOG\' in \`%s\'*\n" $(tla parse-package-name --lvl "$latest_rev") printf '\n' printf ' [[cartouche\n' printf '\n' grep -i -E '^summary:' $root/CONTRIBUTION-LOG | head -1 | sed -e 's,^[^:]*:, /Summary: /,' printf '\n' printf '\n' cat $root/CONTRIBUTION-LOG \ | awk ' BEGIN { past_headers = 0; lines_printed = -1; } (!past_headers && match($0,"^[[:space:]]*$")) { past_headers = 1; } ((lines_printed < 0) && past_headers && !match($0,"^[[:space:]]*$")) { lines_printed = 0; } (lines_printed >= 0) { print $0; lines_printed = lines_printed + 1; if (lines_printed >= 10) exit(0); } ' \ | sed -e 's/^/ /' printf ' /*[...]*/\n' printf '\n' printf ' ]]\n' printf '\n' fi printf '\n' printf '\n' printf ' /Recent Commits:/\n' printf '\n' printf ' [[log-summary\n\n' tla revisions --full --summary --creator --date --reverse -A "$archive" "$v" | head -20 | sed -e 's/^/ /' printf ' ]]\n' printf '\n' printf '\n' printf '\n' done # arch-tag: Tom Lord Tue Nov 23 09:22:30 2004 (reports/contrib-summary.sh) tla-1.3.5+dfsg/web/attic/reports/=update0000644000175000017500000000053610457621763016635 0ustar useruser set -e if test $# -eq 0 ; then for f in [a-z]*.txt ; do awiki -N ../../../gnuarch.css -n ../../../top-nav.txt -r ../../.. $f > ${f%.txt}.html done else for f in "$@" ; do awiki -N ../../../gnuarch.css -n ../../../top-nav.txt -r ../../.. $f > ${f%.txt}.html done fi # arch-tag: Tom Lord Mon Dec 13 09:27:54 2004 (reports/=update) tla-1.3.5+dfsg/web/attic/latest-and-greatest.txt0000644000175000017500000000076410457621763020251 0ustar useruser[[title Latest and Greatest Essays of Interest ]] [[cartouche /Mon Nov 22 12:42 2004/ //\ <"Awiki Introduction" -- ../../src/awiki/intro.html> \// Awiki is a little parser engine I'm working on for many purposes, one of which is a simple HTML formatter for multimedia text. This intro describes (most of) the markup language used to generate the pages you're reading. ]] [[null ; arch-tag: Tom Lord Mon Nov 22 12:28:50 2004 (communications/latest-and-greatest.txt) ]] tla-1.3.5+dfsg/web/attic/ancient-stuff/0000755000175000017500000000000010457621763016377 5ustar userusertla-1.3.5+dfsg/web/attic/ancient-stuff/index-prev2.txt0000644000175000017500000002050510457621763021305 0ustar useruser [[title Tom Lord's (temporary) GNU Arch Page ]] Yes, it's the dreaded */under construction/* page. If you're here to find some information about GNU Arch that is customarily found on this page, here are some links to popular pages. Below that, a brief note about what's going on behind this site (why it's under construction and what it will be like shortly). //\Note:\// Most of these links take you to mirrors of the old site that used to be here. [[cartouche /The old top-level page -- / if you are looking for an old link not listed below, try looking here. /"What is Revision Control" -- / a neutral description of what revision control is (not Arch specific although, obviously, reflective of the perspective of Arch's designer). /"An Overview of GNU Arch" -- / a brief list of (some of) the features that most distinguish Gnu Arch from competing systems. /"How Arch Works" -- / a high level description of exactly what arch is and does. If you're like me, the necessary vagueness of an "overview" like the previous link can be tantalizing but frustrating. This short paper tries to give programmers and other technical types a slightly deeper picture. /"A Tutorial Introduction to The arch Revision Control System" -- / /The user community wiki -- / not something I help to maintain at all but (or therefore :-) a popular alternative to the tutorial. Also a forum where people work on new ideas and designs for improvements to arch. ]] * So.... what's up with *this* site, then? This site is turning into a /programmer's blog/: an organization and communiation tool for arch-using programmers. The site will be the initial prototype and demonstration of /`gtla'/: a front-end for /`GNU Arch'/ --- /`gtla'/ will be generating a lot of of the automated content for the blog itself. You can read about some of the motivation for the blog and for `gtla' generally in <"the previous edition of this home page" -- ./index-prev.html> * Well, Tom, Any Progress? You betcha. To build the programmer's blog, or for that matter many other kind of new UI for arch, I'll need to glue lots of components together. In particular, the functionality of arch commands and scripts that serve as "report generators" has to, somehow, be translated for the UI being built. In this case, there's a need to translate arch-related reports into HTML -- for inclusion in a blog. It's a shame to waste work, right? If someone will go to the trouble of making a pleasingly and unambiguously formatted text display of a report -- is there some reason that that work can't directly translate into other kinds of display (such as HTML or GUI)? I think a wiki language is ideal for the interface between low-level report generation tools and higher-level user interface presentation layers. There are several reasons for this: /Wiki syntax is attractive -- / The low-level report generators can produce human-readable, even attractive (plain-text) output. /Wiki syntax can be precise -- / Wiki syntax for structured data from report generators can be completely unambiguous and easy to machine parse. /Wiki presentation is naturally flexible and failsafe -- / User interfaces and core commands *will*, inevitably, fall out of sync. What happens then? Wiki parsers are naturally quite flexible and tend to be failsafe (failsafe meaning that a display of an invalid or misparsed input file is still likely to be a legible (even if ugly) display). Using Wiki syntax as the protocol between core arch report generators and front ends suggests an interesting approach to avoiding needless dependencies between UI and core Arch. /Good wiki output is easy and rewarding to produce -- / Writing a plain text report generator that produces wiki-syntax output is easy: no special libraries are required; the basic formatting rules can be learned in just a few minutes. Wiki output can be attractive *as plain text*, the mark-up actually *contributing* to the legibiilty of the output. So I think that using a wiki syntax is a good way to encourage people to concentrate on the content and appearence of their reports, rather than on the process of trying to implement them. So: I decided I needed a Wiki parser and html translator as a building block for `gtla' -- as a component to help build the *programmer's blog* features. I have lots of other reasons for wanting such wiki tools. Not least is just to make it easier to produce quick technical communications, especially for delivery over the web. Being a bit particular about these things, I built the wiki tool that formatted the site you're reading now: <"Awiki" -- ./src/awiki/intro.html>. [[cartouche \Archive:\ `lord@emf.net--gnu-arch-ws-2004' \Location:\ ]] ** Some Hack Niti-Gritty *** Interesting Code: `Awiki' contains some neat libraries (additions to `hackerlab') The libraries I built for `Awiki' are pretty intereting. /`libbufs'/ provides emacs-ish edittable strings. Programmers can create and destroy buffers, store and retrieve per-buffer properties, edit and examine the text in the buffer, and allocate and free "points" -- pointers into a buffer's string which are adjusted as text is inserted or deleted from the string. `Awiki' works by loading its input file into a buffer before processing it. It generates its output in a second buffer before printing anything. /`libgraph'/ provides something sort of like buffers, but for edittable directed graphs rather than edittable strings. Programs can allocate and free graphs. Within a graph, programs can create and delete nodes and edges and set and retrieve per-node properties. `Awiki' uses libgraph to build a parse-tree for its input. The implementations of those are, I think, surprisingly simple. There are a number of lower level data structures I added first (e.g., very simple homogenous queues) --- `libgraph' and `libbufs' are built up out of those in just a few steps. *** C Programming Observation: Descriptors are Better than Pointers I've mostly given up on using (data) pointers in structures. There are a few low-level examples where there's no getting around the need to have a structure field of some (non-function) pointer type -- but mostly I think there are just a few examples of that and they can be solved, once and for all, in a few library modules. Without pointers, how can you build a linked list of integer? [[tty struct int_list { int elt; struct int_list * next; }; ]] I like using integers, instead. The type `ssize_t' is usually appropriate: [[tty struct int_list { int elt; ssize_t next; }; ]] My approach, though, requires some helper functions: [[tty /* with pointers: */ struct int_list * list; list = list->next; /* with integers: */ ssize_t list; list = int_list_next (list); ]] There's more than one way to write something like `int_list_next' and which way is right depends on the circumstance. A fragment of one trivial implementation might look like: [[tty #define int_list_next (list) list_next_fields[list] ]] As long as I can find a reasonable way to write accessor and mutator functions like `int_list_next', the approach of using integer identifiers has some advantages over pointers. One big advantage is that the actual object itself can change locations in memory. If the `next' pointers are integer ids, then the absolute address of an `int_list' doesn't matter: many memory management strategies become simpler. Another advantage is that accessor functions like `int_list_next' can validate their arguments. It *is* still possible to use a stale (and since recycled) object descriptor with such a function, but there is no possibility of attempting to read from an illegal address or address containting wrongly typed data. [[null ; arch-tag: Tom Lord Sun Nov 21 19:23:42 2004 (tla-ws/index.txt) ]] tla-1.3.5+dfsg/web/attic/ancient-stuff/index-prev.html0000644000175000017500000006176110457621763021361 0ustar useruser Tom Lord's (temporary) GNU Arch Page

Tom Lord's (temporary) GNU Arch Page

Yes, it's the dreaded under construction page. If you're here to find some information about GNU Arch that is customarily found on this page, here are some links to popular pages. Below that, a brief note about what's going on behind this site (why it's under construction and what it will be like shortly).

Note:Most of these links take you to mirrors of the old site that used to be here.

So.... what's up with this site, then?

To understand what's up with this site it's helpful to understand my motivation for the behind-the-scenes work I'm up to. My motivation is based on a (hopefully accurate) contemplation of the strengths and weaknesses of GNU Arch:

Some Tools are Better than Others --- But What Does that Mean?

For the discussion here, and ignoring (briefly) certain larger philosophical issues about the broader impacts of tool design, we can start from this:

A good tool is one which, when given to a craftsperson, expands that person's "reach" within their chosen craft. I'm using "reach" as the name for what that craftsperson can reasonably accomplish given a fixed amount of other resources, such as time.

For example, higher-level, machine-independent programming languages are often good tools tools because they can allow programmers to more easily and more accurately write programs than if only assembly language is used. The C language may be arguably a better such tool than the otherwise comparable Bliss language because it is more widely ported and compilers for C have received far more attention over the years, making C the more reliably useful tool to reach for in most circumstances.

Another example: modern revision control systems seem to be demonstably better tools than older revision control systems because (in part) they make branching and merging easier --- thereby enabling programmers to cooperate with one another with greater control and greater ease.

The Strengths of GNU Arch

In that light, Arch has plenty of strengths. Most readers know the "feature list" (e.g., best-of-breed branching and merging capabilities; good support for detached (from a network) operation; good distributed development support....)

I won't rehearse the "brag list" further, here, except to say that the core functionality of arch already has plenty of programmers doing far more sophisticated things, at significantly higher "scales" (problem sizes) than they could have sanely attempted without Arch (or something very much like it).

The Weaknesses of GNU Arch

For all its goodness, as a tool, arch has its share of weaknesses.

One weakness is that Arch's availability on Windows is quite shaky, at the moment. That isn't the reason for changes to this site but I mention it so that people don't think I'm ignoring that problem.

Another weakness of Arch, the one of greatest concern here, is what I would call the fancy tablesaw problem. A tablesaw, in woodworking, is a powerful electric motor, attached to a spinning circular blade, mounted below a precision-milled table in such a way that the edge of the blade pokes up through the table. When the blade is spinning, anything that is passed over this part that pops up through the table will be cut. Pieces of wood can be placed on the table, securely braced in various ways, run against the blade -- in this way, a variety of precision cuts can be made. Experts can use such saws to create, in minutes, all manner of clever woodworking contructions that would otherwise be impossible or at least nearly so.

The fancy tablesaw problem is my name for two issues with a fancy tablesaw:

  • Tablesaws Are Dangerous -- The inexperienced and under-trained user is extended ample opportunity to ruin his woodworking project very quickly (by making a bogus cut). Tablesaws are also great for causing yourself nasty personal injuries with just a second or so of inattention.
  • Fancy Tablesaws are Confusing to Newbies -- A fancy table saw will come with a non-trivial number of attachments, adjustment controls, blade options, and so forth: lots of knobs and swappable parts, in other words. In software terminology: lots and lots of "input parameters" for every cutting operation. There is an entire micro-industry dedicated to publishing books, videos, and so forth just to explain useful ways to configure a fancy table saw. At the same time, if you drop a new user in front of such a saw, even giving them a reference manual for the configuration options -- it will take them lots of time and lots of trial and error to learn to use it well.

Arch suffers (somewhat needlessly) from its own analog of the fancy tablesaw program. Although powerful and flexible in the hands of an experienced expert, to the newbie it is all too often a confusing array of many, many parameters. Newbies who fail to seek good advice about Arch can easily botch their attempts to use arch. Even given the reference documentation --- newbies working on their own stand almost no chance of discovering many of the best ways to use Arch in practice.

What can we do about that?

Two Wrong (but Popular) Answers

I often get two kinds of suggestion for how to solve the "fancy tablesaw problem" for Arch, both of which I reject:

  • Remove Features -- Too many ways to merge? Too many parameters? Why not take some out?

    I don't often get that as a literal suggestion -- few users (most of whom are programmers) would make that suggestion with a straight face. But sometimes the kibbitzers, not seeing the reason for this or that arch sub-command are parameter, argue that it can be thrown away.

    Of course, I reject this solution because even though it would help newbies during their first exposure to arch, more experienced users would lose capabilities. To go this route would be to make Arch a tool that grants less "reach" to its users -- it would make it a less good tool.

  • Optimize the UI for the Common Case -- Many suggestions ask that the value of a given parameter, currently one that has to be supplied "by hand", be made a default.

    That's a great rule of thumb but it is often misapplied in the cases I get suggestions about.

    The problem is that, more often than you might think, one user's "exceptional case" is the next user's "default case":

    If you push in here it pops out there: changes to parameter defaults which satisfy one group of user's will often inconvenience another group who likes the current defaults.

The Plan (as relates to this site) -- Getting Past the Tablesaw Stage

To review: arch is a leader in its field when it comes to the "reach" that it grants expert users --- a laggard when it comes to helping newbies get on board. Above, I created an extended analogy between arch and a "fancy table saw" -- both are in some sense dangerous and the input parameters they offer can overwhelm newbies.

I will now put aside the tablesaw analogy and offer a new one: the industrial manufacturing equipment problem.

By "industrial manufacturing equipment" I mean the family of machines that you might find in an industrial shop. For example, the massive-scale mixers and ovens you might find in a cookie factory are examples of industrial manufacturing equipment.

Industrial manufacturing equipment has the interesting property that it has to be newly and creatively deployed for every factory that will use it. The builder of the equipment has solved a general problem -- but when it comes time to install that solution in a specific factory, additional customization is often (not always) necessary. If you would like to read a bit about that (and about some social implications of tool design) I suggest the article Food Plant (at www.kuro5hin.org): a report from someone whose career has included selling industrial manufacturing equipment for food processing.

The field of industrial manufacturing equipment has come to grips with and aggressively works on solving the "fancy tablesaw problem". The factories using this equipment often use workers with a very narrow range of skills in relation to the tools. Experts configure the tools for a given factory but, once configured, a new user of the tool can be completely trained in its use in a matter of minutes.

Such narrowly-skilled user's are typically not qualified to, for example, reconfigure a factory to make tarts instead of cookies --- but they can learn and settle into their cookie-making roles without having to become experts in the field of manufacturing equipment generally.

Arch should grow to become more like industrial manufacturing equipment in the sense that the task of configuring lots of complicated parameters is separated from the task of using the machine day-to-day. In this way, at least within each shop (or, really, each type of shop), newbies can learn what they need to know quickly and get started working with very little training.

To that end I have started working on gtla, which is a new "front-end program" to arch: an alternative to using the program tla directly.

gtla will initially be a command line program, just like tla. In fact, the prototype contains the entire tla command set as a subset of its own commands.

gtla will first add some new commands, tailored for the particular "industrial shop" which is the GNU Arch project itself. In other words, given gtla, if a new "line worker" were to join the GNU Arch project, I will be able to train them in what they need to know about arch very quickly, just by teaching them a small subset of the gtla command set. My informal goal is that everything a newbie needs to know should fit on a reference card, small enough to sit next to a keyboard.

gtla will next develop the holy trio:

  • Self-documentation
  • Customizability
  • Extensibility

Those mean:

  • Self-documentation: on-line documentation should be convenient, context sensative, and easy to author and extend.

  • Customizability: it should be easy to configure gtla by changing the default values of key parameters in a site-specific way. The software part of an "arch shop" should largely be defined just by a small amount of configuration files which set shop- (or project-)specific parameters.

  • Extensibility: The new commands gtla adds for the GNU Arch project (shop) itself are all quite trivial --- I'm implementing each in the prototype as just a few lines of shell script. In the longer term, gtla will concentrate on making such new commands easy to create (and easy to include within the features for self-documentation and customizability).

gtla will additionally develop (or integrate with) some non-CLI interfaces. Overall, gtla is mostly concerned with UI issues. Therefore, it will grow to include a comprehensive and interface-technology-independent model of user interaction. For example, gtla will model each command as a data structure which describes its parameters and options in detail and which includes documentation for these. That data structure can be used to "drive" any kind of interface: CLI, GUI, Web-based, or otherwise. In this area, gtla, is likely to borrow heavily from some underappreciated aspects of the design of GNU Emacs (and traditional lisp-based interactive systems generally) --- namely those design aspects that are key to the success of Emacs (et al.) at producing a self-documenting, customizable, extensible program.

There is more to the current conception of gtla than simply to parrot some features of Emacs, though....

A Programmer's Blog

Over the coming weeks, I intend to adopt gtla myself, for my everyday revision control needs. That is, I will start using the gtla front-end rather than directly using tla itself.

I intend to extend gtla by adding features which will help me to maintain a programmer's blog: an on-line diary for arch-using programmer's. That's what this site will evolve into: a gtla-managed blog.

"Programmer's blog" is my name for a tool that helps a programmer to journal, document, and communicate his hacking efforts --- it is a an organizational tool, like a labbook or business diary.

Perhaps you've seen a very methodical programmer work (or are one yourself) who sits with a traditional, paper labbook by your terminal and documents carefully every significant hacking step you plan or take. I've known managers who kept personal databases of release-candidate benchmarks that way (not to mention all the usual PHB stuff about who's supposed to be doing what, when). I've known "line coders" who kept a personal database of issues assigned and fixed that way. That sort of thing.

From such a notebook, if it is thorough, many of the demands upon a programmer for personal organization and ability to communicate work status to others can be pleasantly satisfied. I would see, for example, that manager writing a complicated technical email to the team essentially by typing in excerpts from his notebook. That line coder, asked for a weekly status update, could just read down his list of issues fixed --- the notebook was perfect for making notes such as "fixing issue X was necessary for contract Y which is due on Tuesday".

In my various roles regarding Arch, Pika, and other projects, I find that (a) it's not very convenient to keep such a traditional notebook, largely because there are always overdue high-priority tasks (so I don't really do it); (b) nevertheless, i find myself both generating (on-line) what would make ideal content for such a notebook, and wishing later that I had that content better organized so that it was at least as useful as an actual notebook. For example, I'll write a few paragraphs for a commit message. Later, I'll rewrite essentially the same content for one or more emails. Later still I'll rewrite it a third time to put on a web site. All of these rewrites occur because it would be too expensive to go searching for the previous version, yet the rewrites themselves do take a lot of time.

So a "programmer's blog", then, will be a simple, arch-hosted database, designed to capture useful content (like significant commit logs) from a programmer, and help the programmer (and possibly others) organize and acess that content.

In a web site form, the programmer's blog idea is a bit more concrete. For example, some features I'd like to see on this page are:

  • Latest Interesting Commits -- I work on several different arch archives and several projects. Some of the revision control "commits" that I do for those projects are more interesting than others: a spelling fix to a help message is boring; a new module added to hackerlab is more interesting. I'd like this front page to list the summary lines and dates of my 10 most recent commits, to any project, where I put the string "[MILESTONE]" in the "Summary:" header. There should be links to full patch logs, changesets, and trees for these commits.
  • Pending Merge Requests -- Nowadays, to get anything merged into the GNU Arch mainline (which happens to also contain my preferred branch of the Hackerlab C library) I have to prepare and submit a merge request to the integration manager, just like everybody else.

    gtla applies very regular naming conventions to contribution branches and understands the ./=merges convention used in the GNU Arch project: I plan to teach gtla to display on this page lists of my contributions-recently-merged and lists of contributions-pending (with links to the "./CONTRIBUTION-LOG" files and so forth).

  • The Usual Diary Entries gtla's web-blog features will comprise, in essense, a highly specialized "viewer" for my collection of archives. For example, the "latest interesting commits" display is a specialized view of the list of revisions in this archive.

    The usual blog-ish diary entries (a running collection of short-items, posted by the blog owner) can be modeled as a GNU Arch version --- log entries for the commits in that version containing the successive diary entries.

  • A Personal, Free-form Wiki To organize notes taken in relation to some long-standing topic (rather than notes found in diary entries and other commit logs), I'll add support for displaying a simple and flexible personal wiki from the latest revision of a specially named version in my archives.

...etc. It's easy to imagine many other features: links to "bug goo"; support for email archives; gateways to and from email; and on an on, no one of which seems at all difficult to implement.

Programmer's Blogs and an Industrial Revolution?

How do gtla and a personal blog relate to the idea of solving the industrial manufacturing equipment problem?:

Arch should grow to become more like industrial manufacturing equipment in the sense that the task of configuring lots of complicated parameters is separated from the task of using the machine day-to-day. In this way, at least within each shop (or, really, each type of shop), newbies can learn what they need to know quickly and get started working with very little training.

Initially, gtla will be a tool that anyone can use to play roles like those that I play. Especially, if someone wants to become a contributor to the GNU arch project itself, gtla will lower their learning curve, get them going very quickly, and help them to produce very professional and standard output for consumption by the upstream integration manager. I need those features -- that's one of my current prominent itches -- so I may as well code them up in a way that makes my solutions useful to others.

Ultimately, there are then (at least) two directions in which to generalize gtla.

In one direction, greater generality, gtla can simply be made more parameterized (customizable) and exenstensible. While my solutions might be optimized for the GNU Arch project, someone else might configure gtla to be perfect for, say, working on the Samba project.

In another direction, expanded focus, gtla can be extended with features for upstream hackers. For example, in addition to helping people who want to be (leaf node) contributors to GNU Arch, gtla can gain features to help Matthew, upstream, who collects changes from those leaf nodes and manages the mainline.

Extensions in the two directions can be complementary. For example, an upstream maintainers radar screen front-page box might link to those changes he intends to merge soon --- they can contain links to the contributor's blogs. Or: an upstream project might display on its blog a downloadable gtla configuration -- the optimal parameter settings for interacting with that particular project.

To complete, perhaps torturously, the analogy: tla is, pretty much, the essential guts of an ideal industrial strength revision control system. gtla will be the flexible, lego-brick-style, assemble-in-the-field technology for making custom UIs to arch at each site of deployment.

Of course, a few common cases (the basement-hobbiest hacker; the small business hacker; the "typical" freshmeat-project maintainer) may very well be covered by just a few "standard" gtla configurations --- hopefully many people will never have to, themselves, hack such configurations (they can think of them as "skins" and download their favorites. tla-1.3.5+dfsg/web/attic/ancient-stuff/index-prev2.html0000644000175000017500000002543210457621763021436 0ustar useruser

Tom Lord's (temporary) GNU Arch Page

Yes, it's the dreaded under construction page. If you're here to find some information about GNU Arch that is customarily found on this page, here are some links to popular pages. Below that, a brief note about what's going on behind this site (why it's under construction and what it will be like shortly).

Note: Most of these links take you to mirrors of the old site that used to be here.

The old top-level page -- if you are looking for an old link not listed below, try looking here. http://regexps.srparish.net/www

"What is Revision Control" -- a neutral description of what revision control is (not Arch specific although, obviously, reflective of the perspective of Arch's designer). http://regexps.srparish.net/www/revctl-intro.html

"An Overview of GNU Arch" -- a brief list of (some of) the features that most distinguish Gnu Arch from competing systems. http://regexps.srparish.net/www/arch-overview.html

"How Arch Works" -- a high level description of exactly what arch is and does. If you're like me, the necessary vagueness of an "overview" like the previous link can be tantalizing but frustrating. This short paper tries to give programmers and other technical types a slightly deeper picture. http://regexps.srparish.net/www/arch-tech.html

"A Tutorial Introduction to The arch Revision Control System" -- http://regexps.srparish.net/www/tutorial/html/arch.html

The user community wiki -- not something I help to maintain at all but (or therefore :-) a popular alternative to the tutorial. Also a forum where people work on new ideas and designs for improvements to arch. http://wiki.gnuarch.org